我有以下宏:
`define check(CONDITION) \
begin \
if (!(CONDITION)) \
$display("'%s' failed.", `"CONDITION`"); \
end
以下扩展:
module test;
initial begin
`check(0)
`check(1 == 0)
end
endmodule
他们打印以下内容:
'0' failed.
'1 == 0' failed.
如果我对字符串有条件,那么宏扩展将无法正常工作。具体而言,添加以下行会导致编译错误:
`check("foo" == "bar")
但我想要的是打印以下内容:
'"foo" == "bar"' failed.
有没有办法编写允许这个的宏体?我想避免解决方案,我有两个宏,一个字符串不允许在条件内,一个明确表示字符串。
答案 0 :(得分:1)
只能在SystemVerilog中使用一个宏来执行此操作。这需要像PERL中的qq()
运算符一样才能实现。