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

时间:2019-02-09 04:27:18

标签: verilog system-verilog hdl synopsys-vcs

在always块中将信号driver_a重新分配回0,但是为什么always块没有激活并为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。

但是,并非如此,该波形似乎表明,一旦在always块中将driver_a分配为0,always块就不会重新激活并将0赋回driver_b的值。简而言之,我希望driver_b的值始终保持为0 ,因为always块中的代码将在零仿真时间内执行。

我在下面附加了所产生波形的图像

DVE Waveform of results

1 个答案:

答案 0 :(得分: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时已经发生了对// 3的更改。