我有这个 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;
吗?
我有这个 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;
吗?
它可能在您的模拟器中工作,但不建议这样做。
在 IEEE 标准 1800-2009 第 10.6 节中,将强制语句定义为“程序连续分配”。LRM 中有一个示例说明,如果等式右侧的值发生变化,则它将强制将新值传递给右侧变量。在这种情况下a=a+1
,技术上应该会导致无限循环,但可能不会因为调度规则。
通常force
应谨慎使用,并用于测试台和行为建模。函数表达式可以强制使用,但需要避免循环依赖。最好分配一个常量表达式force
。
是的,我相信在这种情况下,行为是明确定义的。模块 m1 将看到强制值,但封闭模块不会。