在Systemverilog中强制输入端口上的值可以吗?
我有这个SV代码:在Systemverilog中强制输入端口上的值可以吗?,verilog,system-verilog,Verilog,System Verilog,我有这个SV代码: module m1 (input int a); always begin #1; force a=a+1; end endmodule module m (); int a; m1 m1(a); endmodule 上述代码中的这句话有效吗?是的,我相信这种行为在这种情况下定义得很好。模块m1将看到强制值,但封闭模块不会看到。它可能在模拟器中工作,但不建议使用 在IEEE std 1800-2009第10.6节中,将力声明定义为“程序连续赋值
module m1 (input int a);
always begin #1; force a=a+1; end
endmodule
module m ();
int a;
m1 m1(a);
endmodule
上述代码中的这句话有效吗代码>?是的,我相信这种行为在这种情况下定义得很好。模块m1将看到强制值,但封闭模块不会看到。它可能在模拟器中工作,但不建议使用 在IEEE std 1800-2009第10.6节中,将力声明定义为“程序连续赋值”。LRM中有一个例子说明,如果等式右侧的值发生变化,则会将新值强制到右侧变量。在这种情况下,
a=a+1
从技术上讲应该会导致无限循环,但由于调度规则,可能不会
一般来说,
力
应谨慎使用,并用于试验台和行为建模。函数表达式允许强制,但需要避免循环依赖。最好使用force
指定一个常量表达式。谢谢您的回答。如果您能在回答时引用IEEE标准章节号,对我会更有帮助。如果我将force a=a+1
更改为force a=b+1
是否可以,其中b可以是任何其他变量?是的,只要a
不在触发b
更新的敏感度列表中。请注意,如果b
在应用force
时随时发生变化,则a
将更新。至少根据LRM。