如何在verilog中使用环境变量或命令行设置宏的值?

时间:2016-07-30 14:09:38

标签: verilog modelsim

我想在运行期间使用环境变量在Verilog中定义一个宏。

例如,我只想在DEBUG宏定义为1时将一些文本打印到文件中。

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

从命令行运行模拟或使用环境变量时,如何覆盖DEBUG1的定义?

或者,我可以保持宏未定义并使用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

1 个答案:

答案 0 :(得分:4)

您可以使用 vlog 命令行选项覆盖宏定义 + define +&lt; macro_name &gt; [=&lt; macro_text &GT;]

更好的选择是保持宏未定义,并使用`ifdef语句来测试您是否在命令行中定义了它。

请注意,每次要更改宏值时,使用宏都需要重新编译源代码。 Verilog提供$test$plusargs$value$plusargs来在运行时测试命令行选项,因此您无需重新编译。