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 由某个表达式驱动,您可以强制它成为该表达式的反函数。
使用此方法强制翻转信号位有效吗?
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 由某个表达式驱动,您可以强制它成为该表达式的反函数。