系统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。Aforce
添加一个临时的连续赋值。这意味着它会持续评估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