Macros 如何在SystemVerilog中将调试消息传递给宏

Macros 如何在SystemVerilog中将调试消息传递给宏,macros,system-verilog,Macros,System Verilog,我正在尝试以下SystemVerilog: `define DEBUG (ARG) \ `ifdef DEBUG_ON \ $display ARG; `endif module my_mod; logic a; logic [1:0] b; assign a = 1'b0; assign b = 2'b01; `DEBUG(("a=%x, b=%b", a, b)) endmodule VCS给了我以下编译错误: Error-[SE] Syntax error

我正在尝试以下SystemVerilog:

`define DEBUG (ARG) \
`ifdef DEBUG_ON \
  $display ARG;
`endif

module my_mod;
logic a;
logic [1:0] b;

assign a = 1'b0;
assign b = 2'b01;

`DEBUG(("a=%x, b=%b", a, b))
endmodule
VCS给了我以下编译错误:

Error-[SE] Syntax error
  Following verilog source has syntax error :
  "/media/psf/Home/projects/dep2/hw/rtl/dep_dc/dep_dc_cs.sv", 254 (expanding 
  macro): token is '('
        `DEBUG(("a=%x, b=%b", a, b))
              ^

#0, DEBUG : "<my_file>":21
full expansion of macro (DEBUG), error at line 1
=>(ARG) 
  `ifdef DEP_DEBUG_ON
  ...
Error-[SE]语法错误
以下verilog源有语法错误:
“/media/psf/Home/projects/dep2/hw/rtl/dep_dc/dep_dc_cs.sv”,254(扩展)
宏):标记为“(”
`调试(((“a=%x,b=%b”,a,b))
^
#0,调试:“”:21
宏完全展开(调试),第1行出错
=>(ARG)
`ifdef DEP_DEBUG_ON
...
根据这一回答:


对我来说,这似乎是正确的语法。有人能发现任何错误吗?

因此我发现显然,编译器不喜欢宏定义和参数之间的空格:

`define DEBUG(ARG) \
`ifdef DEBUG_ON \
  $display ARG;
`endif
工作