2015-11-01 186 views
-1

我正在嘗試學習如何使用$ 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 

我不確定問題是否與代碼或我用過的命令一致。在此先感謝:)

回答

1

非常愚蠢的錯誤。系統任務名稱爲$value$plusargs,而不是$value$plusarg(缺少'..')。

此外,您可以使用$test$plusargs來檢測/測試給定的交換機在運行時是否可用。就像如下:

if($test$plusargs("myint")) 
begin 
$value$plusargs("myint=%d",i); 
end 

還有一兩件事,我使用VCS,並提供這些類型的開關,我用簡單的」 ./simv +敏= 5" (當然SIMV的是我的編譯後的可執行文件)。所以,不需要+define+myint=5,直接+myint=5應該工作。

此外,這些是運行時開關,而不是編譯時間。所以,我認爲他們應該與vsim命令,而不是vlog,但我不知道這一點。我猜想沒什麼大不了的。

您的代碼在EDAPlayground可用here,用VCS模擬。僅供參考。

+0

它確實是運行時切換。如果我使用vlog,我得到的輸出爲** x **。謝謝你:) – ssgr

+0

也可以知道我們什麼時候使用** + define **? – ssgr

+2

'+ define'可能被用來定義一個宏條件。例如,您使用'ifdef ABC'的代碼,然後'+ define + ABC'將定義'ABC'宏。 – sharvil111

2

您有否複製1800-2012 LRM?如果你這樣做了,你會看到你拼錯了一些東西。

+0

我應該看看這個標準。學了一課:) – ssgr