如何在 verilog 中使用环境变量或命令行设置宏的值?
How to set the value of a macro using environment variable or command line in verilog?
我想在运行时使用环境变量在 Verilog 中定义一个宏。
例如,我只想在 DEBUG
宏定义为 1
.
时将一些文本打印到文件中
`define DEBUG 0
...
if(DEBUG) $fwrite(file,"Debug message");
当 运行 从命令行或使用环境变量进行模拟时,如何将 DEBUG
的定义覆盖为 1
?
或者,我可以保持宏未定义并使用 ifdef
`ifdef(DEBUG) $fwrite(file,"Debug message");
在这种情况下,我必须在 运行 模拟时定义宏 DEBUG
。这可能吗?
我正在使用 Modelsim。谢谢。
编辑:接受的答案就足够了。但我也会为偶然发现这里的任何人添加此信息。
通过使用 vsim
的 -g<parameter>
或 -G<parameter>
参数,参数的值可以是 set/overriden。 -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
您可以使用 vlog 命令行选项覆盖宏定义 +define+<macro_name >[=<macro_text>]
更好的选择是不定义宏并使用 `ifdef
语句来测试您是否在命令行上定义了它。
请注意,每次要更改宏值时,使用宏都需要重新编译源代码。 Verilog 提供 $test$plusargs
和 $value$plusargs
以在运行时测试命令行选项,因此您无需重新编译。
我想在运行时使用环境变量在 Verilog 中定义一个宏。
例如,我只想在 DEBUG
宏定义为 1
.
`define DEBUG 0
...
if(DEBUG) $fwrite(file,"Debug message");
当 运行 从命令行或使用环境变量进行模拟时,如何将 DEBUG
的定义覆盖为 1
?
或者,我可以保持宏未定义并使用 ifdef
`ifdef(DEBUG) $fwrite(file,"Debug message");
在这种情况下,我必须在 运行 模拟时定义宏 DEBUG
。这可能吗?
我正在使用 Modelsim。谢谢。
编辑:接受的答案就足够了。但我也会为偶然发现这里的任何人添加此信息。
通过使用 vsim
的 -g<parameter>
或 -G<parameter>
参数,参数的值可以是 set/overriden。 -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
您可以使用 vlog 命令行选项覆盖宏定义 +define+<macro_name >[=<macro_text>]
更好的选择是不定义宏并使用 `ifdef
语句来测试您是否在命令行上定义了它。
请注意,每次要更改宏值时,使用宏都需要重新编译源代码。 Verilog 提供 $test$plusargs
和 $value$plusargs
以在运行时测试命令行选项,因此您无需重新编译。