系统Verilog-强制信号反转/翻转

系统Verilog-强制信号反转/翻转,verilog,system-verilog,Verilog,System Verilog,使用此方法强制信号位翻转是否有效 一, 我尝试过这个方法,但结果好坏参半。有时钻头翻转,有时保持不变 但是,我还编写了一个不太优雅的代码,用于翻转位的相同目的,该代码一直有效,如下所示: 二, 第一个代码不是翻转位的好方法吗?还是我还遗漏了什么 其中高电平。低电平。a[51:0]是52位信号 谢谢:不,第一种方法不行。如果是这样的话,它就像一个无限循环振荡器 第二种方法要求您设置一个采样过程,在该过程中,您需要决定何时采样a 如果a由某个表达式驱动,您可以强制它与该表达式相反。嗨,dave,我想

使用此方法强制信号位翻转是否有效

一,

我尝试过这个方法,但结果好坏参半。有时钻头翻转,有时保持不变

但是,我还编写了一个不太优雅的代码,用于翻转位的相同目的,该代码一直有效,如下所示:

二,

第一个代码不是翻转位的好方法吗?还是我还遗漏了什么

其中
高电平。低电平。a[51:0]
是52位信号


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

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


如果a由某个表达式驱动,您可以强制它与该表达式相反。

嗨,dave,我想知道采样过程是什么意思?我还忘了提到这段代码在
任务
块中,因此,无限循环的问题不会在
任务
块结束时成为问题。如果我的理解是正确的,
force
应该在任务结束后停止强制信号。我的意思是
if
语句必须在某个点计算其分支表达式,也就是在调用您忘记提到的任务时。
force
语句建立了一个类似于连续赋值的新过程:每次RHS上的信号发生变化时,RHS都会重新评估,并向LHS进行赋值。这个过程一直持续到另一个
强制
发生,或者有一个
释放
。哦,好吧,对于第一种方法,如果我在任务结束时使用
释放
,信号应该保持该值,直到其他值被过度写入信号
a
,还是说方法1在任何情况下都不起作用,我应该只坚持方法2?释放
后信号的行为取决于
是否在变量或网络上。我会坚持方法2。A
force
添加一个临时的连续赋值。这意味着它会持续评估RHS,并将结果发送到LHS。因为这是由离散事件模拟器执行的,所以实际上不存在连续评估。因此,您可以在模拟器的支配下选择什么构成事件来重新评估RHS。
task
begin
force higher_level.lower_level.a[1] = ~higher_level.lower_level.a[1];
end 
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