-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;吗?

4

2 回答 2

1

它可能在您的模拟器中工作,但不建议这样做。

在 IEEE 标准 1800-2009 第 10.6 节中,将强制语句定义为“程序连续分配”。LRM 中有一个示例说明,如果等式右侧的值发生变化,则它将强制将新值传递给右侧变量。在这种情况下a=a+1,技术上应该会导致无限循环,但可能不会因为调度规则。

通常force应谨慎使用,并用于测试台和行为建模。函数表达式可以强制使用,但需要避免循环依赖。最好分配一个常量表达式force

于 2013-02-05T19:10:29.077 回答
0

是的,我相信在这种情况下,行为是明确定义的。模块 m1 将看到强制值,但封闭模块不会。

于 2013-02-05T17:12:39.863 回答