gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 17:25:45 25 4
gpt4 key购买 nike

我想在运行时使用环境变量在 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

最佳答案

您可以使用 vlog 命令行选项覆盖宏定义 +define+<macro_name>[=<macro_text>]

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

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

关于verilog - 如何在 verilog 中使用环境变量或命令行设置宏的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38674839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com