我有这个SV代码:
module m1 (input int a);
always begin #1; force a=a+1; end
endmodule
module m ();
int a;
m1 m1(a);
endmodule
以上代码中的此语句是否有效force a=a+1;
?
答案 0 :(得分:1)
它可能在您的模拟器中有效,但不建议这样做。
在IEEE标准1800-2009中,第10.6节将强制声明定义为“程序性连续分配”。在LRM中有一个例子说明如果等式右边的值发生变化,那么它会强制新值到右手变量。在这种情况下,a=a+1
在技术上应该导致无限循环,但可能不会因为调度规则而导致。
一般情况下,force
应谨慎使用,并用于测试平台和行为建模。功能表达是强制允许的,但是需要避免循环依赖。最好使用force
分配常量表达式。
答案 1 :(得分:0)
是的,我相信在这种情况下行为已明确定义。模块m1将看到强制值,但封闭模块将不会。