【发布时间】:2019-10-19 20:33:25
【问题描述】:
我试图了解 Verilog 调度算法的工作原理。下面的示例输出 0, xxxx 而不是 1010。我不清楚为什么。如果我确实在$display 之前设置了延迟,它将输出1010。
module test;
reg [3:0] t_var;
initial begin
t_var <= 4'b1010;
$display("%0t, %b", $realtime, t_var);
end
endmodule
以下示例的输出相同,0, xxxx:
module test;
reg [3:0] t_var;
wire [3:0] y;
assign y = ~t_var;
initial begin
t_var = 4'b1010;
$display("%0t, %b, %b", $realtime, t_var, y);
end
endmodule
根据示例,非阻塞分配和连续分配似乎都是两步过程,其中 RHS 在当前时间步进行评估,LHS 是计划在下一个时间步(如果未指定延迟)或稍后的时间步(如果指定延迟)发生。
有人可以确认并向我解释以下算法的分步流程(来自 Clifford Cummings),因为它适用于上面的示例?
谢谢!
【问题讨论】:
标签: verilog system-verilog iverilog