我在我遇到的问题的 eda playground 上做了一个基本的例子。假设我有两个时钟 1x 和 2x。使用触发器分频器将 2x 从 1x 分频。
我有两个寄存器a和b。a 以 1x 计时,b 以 2x 计时。
b是a的采样值。
当我们有 1x 和 2x 时钟的上升沿时,b 没有取 a 的预期值,而是取下一个周期值。
这是因为这种时钟分频器方案,如果我们使用 icgs 进行分频并且 en 它工作正常。但是有没有办法让它使用这种带有触发器的时钟分频器方案?
EDA 游乐场链接:https ://www.edaplayground.com/x/map#
module race_test;
logic clk1x = 0;
logic clk2x = 0;
always
#5ns clk1x = !clk1x;
int a, b;
always @(posedge clk1x) begin
a <= a+1;
clk2x <= !clk2x;
end
// Problem here is that b will sample postpone value of a
// clk2x is not triggering at the same time than clk1x but a bit later
// This can be workaround by putting blocking assignment for clock divider
always @(posedge clk2x) begin
b <= a;
end
initial begin
$dumpfile("test.vcd");
$dumpvars;
#1us
$stop;
end
endmodule