2016-07-30 423 views
0

我想使用環境變量在運行時在Verilog中定義一個宏。如何在verilog中使用環境變量或命令行設置宏的值?

例如,我只想在DEBUG宏定義爲1時將某些文本打印到文件中。

`define DEBUG 0 
... 
if(DEBUG) $fwrite(file,"Debug message"); 

如何從命令行運行仿真或使用環境變量時,我可以覆蓋的DEBUG的定義1

或者,我可以保持宏觀不確定和使用ifdef

`ifdef(DEBUG) $fwrite(file,"Debug message"); 

在這種情況下我會運行模擬時定義宏DEBUG。這可能嗎?

我正在使用Modelsim。謝謝。


編輯:接受的答案是足夠的。但是我也會爲在這裏絆倒的人添加這些信息。

參數的值可以使用-g<parameter>-G<parameter>參數設置/覆蓋vsim-g僅在尚未設置參數值的情況下設置參數值,即使定義了值,-G也會設置參數值。當我使用參數控制模擬長度時,我發現這很方便。重新編譯是沒有必要的。

vsim -c work.top -gSIM_END_TIME // Sets value in all scope 
vsim -c work.top -g/top/dut/SIM_END_TIME // Sets value only in the defined scope 

回答

3

您可以覆蓋與VLOG命令行選項+宏定義限定+ < MACRO_NAME> [= < macro_text>]

更好的選擇是離開宏未定義,並使用`ifdef語句來測試您是否在命令行上定義了它。

請注意,使用宏需要您每次要更改宏值時重新編譯源代碼。 Verilog提供了$test$plusargs$value$plusargs在運行時測試命令行選項,因此您不需要重新編譯。

相關問題