如果总有2个块将首先执行哪个块

时间:2017-04-30 12:34:10

标签: verilog system-verilog hdl

我是verilog的新手,我有一个问题

假设模块中有2个始终块,该块将首先执行,或者它们将在同一时间执行。如果是这样,r1的值是多少。例如

module example(clk);
input clk;
reg r1;
always @ (posedge clk)
  r1 <= 1'b0;
always @ (posedge clk)
  r1 <= 1'b1;
endmodule

TIA

3 个答案:

答案 0 :(得分:5)

两个always块创建两个并行执行的进程。这两个进程都将阻止等待上升的clk事件。当该事件发生时,两个进程都将安排恢复。但是,Verilog / SystemVerilog模拟器使用一个事件队列来序列化应该同时发生的所有事情。您无法预测首先安排哪个流程;这是模拟竞赛条件。在实践中,模拟器的一个特定版本将始终在另一个之前选择一个过程,因此您将始终看到相同的结果。但是,如果切换到其他工具,甚至更改工具中的某些选项以进行调试或优化,结果可能会发生变化。

答案 1 :(得分:1)

两个always块同时并行,因此禁止在两个always块中分配相同的reg。在模拟中,它可能是未定义的,并且它不会合成。

答案 2 :(得分:0)

它取决于工具。不应在两个不同的始终块中为单个reg分配值。