System Verilog - 强制信号反转/翻转

System Verilog - forcing a signal to invert / flip

使用此方法强制翻转信号位有效吗?

1.

task
begin
force higher_level.lower_level.a[1] = ~higher_level.lower_level.a[1];
end 

我试过这个,结果好坏参半。有时位翻转,有时保持不变。

然而,我也写了一个不太优雅的代码,目的是翻转位,它一直有效,如下所示:

2.

task
begin
if(higher_level.lower_level.a[1] == 1'b1)
force higher_level.lower_level.a[1] = 1'b0;
else
force higher_level.lower_level.a[1] = 1'b1;
end

第一个代码不是翻转位的好方法吗?或者还有其他我错过的东西吗?

其中higher_level.lower_level.a[51:0]是52位信号

谢谢 :D

不,第一种方法行不通。如果是这样,它就像一个无限循环振荡器。

第二种方法要求您设置一个采样过程,您需要在其中决定何时采样 a

如果 a 由某个表达式驱动,您可以强制它成为该表达式的反函数。