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

问题描述 投票:1回答:1

信号driver_a重新分配在always块回0,但为什么始终阻止未激活和值分配给driver_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。

然而,这并非如此,波形似乎表明,一旦driver_a获取always块分配到0时,总是块不激活并分配0回driver_b的价值。总之,我期望driver_b的价值总是一个永远块执行零仿真时间内保持0,因为代码。

我重视所产生的波形的图像,下面

DVE Waveform of results

verilog system-verilog hdl synopsys-vcs
1个回答
1
投票

因为代码被解释为单一的有序集合语句。这是一样的,如果你写

always begin
     @(driver_a)           // 1
     driver_b = driver_a;  // 2
     driver_a = 0;         // 3
end

语句// 1表示“等待driver_a改变”语句// 2种手段“更改driver_b到driver_a的值”语句// 3种手段“更改driver_a至0”

因为always块是执行串行顺序陈述一个线程,从// 3的变化,当它返回到执行// 1已经发生了。

© www.soinside.com 2019 - 2024. All rights reserved.