我是verilog的新手,我有一个问题
假设模块中有2个始终块,该块将首先执行,或者它们将在同一时间执行。如果是这样,r1的值是多少。例如
module example(clk);
input clk;
reg r1;
always @ (posedge clk)
r1 <= 1'b0;
always @ (posedge clk)
r1 <= 1'b1;
endmodule
TIA
答案 0 :(得分:5)
两个always
块创建两个并行执行的进程。这两个进程都将阻止等待上升的clk
事件。当该事件发生时,两个进程都将安排恢复。但是,Verilog / SystemVerilog模拟器使用一个事件队列来序列化应该同时发生的所有事情。您无法预测首先安排哪个流程;这是模拟竞赛条件。在实践中,模拟器的一个特定版本将始终在另一个之前选择一个过程,因此您将始终看到相同的结果。但是,如果切换到其他工具,甚至更改工具中的某些选项以进行调试或优化,结果可能会发生变化。
答案 1 :(得分:1)
两个always块同时并行,因此禁止在两个always块中分配相同的reg。在模拟中,它可能是未定义的,并且它不会合成。
答案 2 :(得分:0)
它取决于工具。不应在两个不同的始终块中为单个reg分配值。