在Systemverilog中强制输入端口上的值可以吗?

在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节中,将力声明定义为“程序连续赋值

我有这个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节中,将力声明定义为“程序连续赋值”。LRM中有一个例子说明,如果等式右侧的值发生变化,则会将新值强制到右侧变量。在这种情况下,
a=a+1
从技术上讲应该会导致无限循环,但由于调度规则,可能不会


一般来说,
应谨慎使用,并用于试验台和行为建模。函数表达式允许强制,但需要避免循环依赖。最好使用
force
指定一个常量表达式。

谢谢您的回答。如果您能在回答时引用IEEE标准章节号,对我会更有帮助。如果我将
force a=a+1
更改为
force a=b+1
是否可以,其中b可以是任何其他变量?是的,只要
a
不在触发
b
更新的敏感度列表中。请注意,如果
b
在应用
force
时随时发生变化,则
a
将更新。至少根据LRM。