Verilog 当灵敏度列表中描述的逻辑重新分配时,为什么总是阻止不重新激活

Verilog 当灵敏度列表中描述的逻辑重新分配时,为什么总是阻止不重新激活,verilog,system-verilog,hdl,synopsys-vcs,Verilog,System Verilog,Hdl,Synopsys Vcs,信号驱动器a在always块中重新分配回0,但为什么always块未激活并将值分配给驱动器b always @(driver_a) begin driver_b = driver_a; driver_a = 0; end initial begin driver_a = 0; driver_b = 0; #2 driver_a = 8'h8; #2 driver_a = 8'hf; end 在波形中,我希望在driver_a将其值分配给driver_b之后,在下一行中,当driver_a被分

信号驱动器a在always块中重新分配回0,但为什么always块未激活并将值分配给驱动器b

always @(driver_a) begin
driver_b = driver_a;
driver_a = 0;
end

initial begin
driver_a = 0; driver_b = 0;
#2 driver_a = 8'h8;
#2 driver_a = 8'hf;
end
在波形中,我希望在driver_a将其值分配给driver_b之后,在下一行中,当driver_a被分配到0时,我希望always块重新激活并将值0分配回driver_b

然而,情况并非如此,波形似乎表明,一旦驱动程序_a在always块中被分配到0,always块就不会重新激活并将0分配回驱动程序_b的值。简而言之,我希望driver_b的值始终保持为0,因为always块中的代码在零模拟时间内执行

我已经附上了结果波形的图像,如下所示


因为代码被解释为单个有序的语句集。就像你写的一样

always begin
     @(driver_a)           // 1
     driver_b = driver_a;  // 2
     driver_a = 0;         // 3
end
语句//1表示“等待驱动程序更改” 语句//2表示“将驱动程序_b更改为驱动程序_a的值” 语句//3表示“将驱动程序a更改为0”


因为
总是
块是一个以串行顺序执行语句的单线程,所以当它循环回execute//1时,从//3到//3的更改已经发生了。

啊,好的..我现在看到了。始终以串行方式执行块。谢谢你,戴夫!