引用字符串中的宏文字字符串参数

时间:2016-12-15 14:44:23

标签: system-verilog

我有以下宏:

`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.

有没有办法编写允许这个的宏体?我想避免解决方案,我有两个宏,一个字符串不允许在条件内,一个明确表示字符串。

1 个答案:

答案 0 :(得分:1)

只能在SystemVerilog中使用一个宏来执行此操作。这需要像PERL中的qq()运算符一样才能实现。