系统任务或功能'$价值$plusarg';未定义->;警告:Verilog

系统任务或功能'$价值$plusarg';未定义->;警告:Verilog,verilog,modelsim,Verilog,Modelsim,我正在努力学习如何使用$value$plusarg。我从某处获得了以下代码 module test; integer i, r; initial begin r = $value$plusarg("myint=%d", i); $display("Value is %0d", i); end endmodule 当我试着运行它时,我得到如下警告: System task or function '$value$plusarg' is not defined. 我用过Modelsi

我正在努力学习如何使用$value$plusarg。我从某处获得了以下代码

module test;
integer i, r;

initial begin
  r = $value$plusarg("myint=%d", i);
  $display("Value is %0d", i);
end

endmodule
当我试着运行它时,我得到如下警告:

System task or function '$value$plusarg' is not defined.
我用过Modelsim。我使用的命令如下:

vlog test_genvar.v +define+myint="22"
vsim work.test
run -all
if($test$plusargs("myint"))
begin
$value$plusargs("myint=%d",i);
end

我不确定问题是否出在我使用的代码或命令上。提前谢谢:)

你有这本书的复印件吗?如果你这样做了,你会发现你拼错了什么

非常愚蠢的错误。系统任务名称是
$value$plusargs
,而不是
$value$plusarg
(缺少's'…!!!)

此外,您可以使用
$test$plusargs
来检测/测试给定开关在运行时是否可用。具体如下:

vlog test_genvar.v +define+myint="22"
vsim work.test
run -all
if($test$plusargs("myint"))
begin
$value$plusargs("myint=%d",i);
end
还有一件事,我正在使用VCS,为了提供此类开关,我只使用“/simv+myint=5”(当然,simv是我编译的可执行文件)。因此,不需要
+define+myint=5
,直接
+myint=5
就可以了

此外,这些是运行时开关,而不是编译时开关。因此,我认为他们应该使用
vsim
命令,而不是
vlog
,但我不确定这一点。我想没什么大不了的


您的代码在EDA游乐场上可用,使用VCS模拟。仅供参考。

我应该看看标准。吸取了一个教训:)它确实是运行时开关。如果我和vlog一起使用,我得到的输出是x。谢谢:)我还可以知道我们什么时候使用+define吗?
+define
可能用于定义宏条件。例如,您有一个带有
ifdef ABC
的代码,那么
+define+ABC
将定义
ABC
宏。