我想创建一个系统verilog宏并将一个字符串变量传递给它。
我已经阅读了另一个使用define to define a string and pass that
STRING_NAME的帖子,但我需要以下内容。
`define STRINGIFY(x) `"x`"
我希望将REG_PATH
转换为用作参数的string
。
`define mirror(REG_PATH) \
$display(`STRINGIFY(REG_PATH)``other text);
使用时,我想使用字符串变量传递字符串。
string register_path = "my string"
`mirror(register_path)
我没有尝试过此代码,但我知道您可以将string
变量传递给macro
。
这就是我使用STRINGIFY(REG_PATH)
。
答案 0 :(得分:0)
如果要求只是显示,因为字符串已经传递到宏中,并且可以直接使用它而无需在显示中进行任何转换。
define mirror(REG_PATH) \
$display("%s ``other text",REG_PATH);
string register_path = "my string";
initial
`mirror(register_path)
字符串也可以直接连接。
`define mirror(REG_PATH) \
{REG_PATH," other text"}
initial
$display(`mirror(register_path));
选项3
`define mirror(REG_PATH) \
$display("%s otherstring",$psprintf("%s",REG_PATH));
initial
`mirror(register_path)
选项4
`define mirror(REG_PATH) \
$psprintf("%s",REG_PATH)
initial
begin
$display(`mirror(register_path));
end
答案 1 :(得分:0)
我发现了这个问题。由于宏是编译时功能,因此不会对字符串进行运行时转换。我需要做的就是传递对象而不是字符串,因为我想传递的东西看起来像一个字符串,但它确实是一个对象。 `define mirror(x)x.mirror_task()将对象添加到对象类中的镜像任务。