我有一个像这样定义的宏:
`define some_macro(ARG0, ARG1 = ARG0) \
...
我希望展开some_macro(2)
扩展为some_macro(2, 2)
。它扩展为some_macro(2, ARG0)
,因为在ARG1
的默认值规范中使用了文本ARG0
,而不是ARG0
参数的值。
是否可以将第二个参数的默认值指定为ARG0
的值?
答案 0 :(得分:3)
Here's很好地总结了你可以用SV宏做些什么。
你可以通过两个宏来实现这一点,比如
`define M(A1) \
`M2(A1, A1)
`define M2(A1, A2) \
"A1 A2"
module m();
initial begin
$display("joined string %s", `M(bye));
$finish;
end
endmodule
不同之处在于,这需要使用M或M2,具体取决于参数的数量,而不仅仅是两种情况下的一个宏。