当敏感列表中描述的逻辑重新分配时,为什么总是阻止不重新激活
Why always block not reactivating when there is a reassignment of logic described in sensitivity list
信号 driver_a 在 always 块中重新赋值回 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 时,我希望总是阻止重新激活并将值 0 分配回 driver_b。
然而事实并非如此,波形似乎表明一旦 driver_a 在 always 块中被分配给 0,always 块不会重新激活并将 0 分配回 driver_b的价值。简而言之,我希望 driver_b 的值始终保持为 0,因为 always 块中的代码在零模拟时间内执行。
我在下面附上了生成的波形图
因为代码被解释为单个有序的语句集。就好像你写了
always begin
@(driver_a) // 1
driver_b = driver_a; // 2
driver_a = 0; // 3
end
语句 //1 表示 "Wait for driver_a to change"
语句 //2 表示 "Change driver_b to the value of driver_a"
语句 //3 表示 "Change driver_a to 0"
因为 always
块是一个单线程,它按顺序执行语句,从 //3 开始的变化在它循环回执行 //1 时已经发生了。
信号 driver_a 在 always 块中重新赋值回 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 时,我希望总是阻止重新激活并将值 0 分配回 driver_b。
然而事实并非如此,波形似乎表明一旦 driver_a 在 always 块中被分配给 0,always 块不会重新激活并将 0 分配回 driver_b的价值。简而言之,我希望 driver_b 的值始终保持为 0,因为 always 块中的代码在零模拟时间内执行。
我在下面附上了生成的波形图
因为代码被解释为单个有序的语句集。就好像你写了
always begin
@(driver_a) // 1
driver_b = driver_a; // 2
driver_a = 0; // 3
end
语句 //1 表示 "Wait for driver_a to change" 语句 //2 表示 "Change driver_b to the value of driver_a" 语句 //3 表示 "Change driver_a to 0"
因为 always
块是一个单线程,它按顺序执行语句,从 //3 开始的变化在它循环回执行 //1 时已经发生了。