我正在编写一些 SV 代码。我有“定义值”,我想从终端使用 +define 来跟随“define ENV_TOP”。当我检索运行和初始化测试实例的值时,该值应该位于 config_db 块中。检查下面的代码。 正确的做法是什么?
`ifndef ENV_TOP
`define ENV_TOP tb
`endif
env_base `ENV_TOP; //env_base is class and I should get "tb" here as I am not defining ENV_TOP
virtual function void build_phase(uvm_phase phase);
string env_scope = `ENV_TOP; //I should get here "tb" as well.
if (!uvm_config_db#(env_cfg)::get(this,env_scope,"env_cfg", env_cfg)) begin
...
end
将
`define
文本转换为字符串标记需要另一个带有使用 `"
字符的参数的宏。
`define STR(s) `"s`"
string env_scope = `STR(`ENV_TOP); //should get here "tb" as well.
请参阅 IEEE 1800-2023 SystemVerilog LRM 中的第 22.5.1 `定义