2016-07-30 416 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在运行时测试命令行选项,因此您不需要重新编译。

相关问题