【发布时间】:2015-09-16 09:57:34
【问题描述】:
我正在尝试在 System Verilog 中对宏进行字符串化,以便在字符串中使用它进行打印。
我创建了一个 STRINGIFY 宏:
`define STRINGIFY(x) `"x`"
这里建议: How to create a string from a pre-processor macro
但是,我尝试字符串化的宏需要参数。
考虑以下代码:
`define STRINGIFY(x) `"x`"
`define HPATH(signal) top.chip.block.signal
string hpath = `STRINGIFY(`HPATH(wire));
$display(hpath); // Output: "`HPATH(wire)"
我希望输出是
"top.chip.block.wire"
而是。
注意HPATH 宏接受一个参数wire。
这是此处运行的示例代码:http://www.edaplayground.com/x/CKB
编辑: 问题在于,当宏内部有参数时,`STRINGIFY 宏会停止内部宏的扩展。 例如:
`define STRINGIFY(x) `"x`"
`define HPATH top.chip.block
`define HPATH_SIGNAL(signal) top.chip.block.signal
$display(`"`HPATH`"); // correctly outputs "top.chip.block"
$display(`STRINGIFY(`HPATH)); // correctly outputs "top.chip.block"
$display(`"`HPATH_SIGNAL(sig)`"); // correctly outputs "top.chip.block.sig"
$display(`STRINGIFY(`HPATH_SIGNAL(sig))); // incorrectly outputs "`HPATH_SIGNAL(sig)"
嵌套在 `STRINGIFY 宏中时,`HPATH_SIGNAL(sig) 似乎没有解析
问题是为什么 HPATH_SIGNAL(sig) 没有在最后一行展开?
这是运行的示例代码: http://www.edaplayground.com/x/RF2
【问题讨论】:
标签: macros verilog system-verilog stringification