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

时间:2013-02-05 09:26:36

标签: 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

以上代码中的此语句是否有效force a=a+1;

2 个答案:

答案 0 :(得分:1)

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

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

一般情况下,force应谨慎使用,并用于测试平台和行为建模。功能表达是强制允许的,但是需要避免循环依赖。最好使用force分配常量表达式。

答案 1 :(得分:0)

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