我想创建一个具有多个参数的宏,就像 $display 一样。
我的代码看起来像这样,但它不起作用。
`define format_macro(A) \
$write("%s", $sformatf(A)); \
这就是我调用 format_macro 的方式。
`format_macro("variable = %d", variable)
我怎样才能做到这一点?
我想创建一个具有多个参数的宏,就像 $display 一样。
你不能。 Verilog 和 SystemVerilog 不支持可变参数宏.
如果您的目标是使用它来格式化字符串或输出,并且您希望避免键入,那么这里有一个解决方法$sformat
到处都是。您可以定义宏以具有单一参数,并将该论证与$sformat
。这样做需要注意的是,使用宏时必须将参数括在括号中。
请注意()
's for $sformatf
不是宏的一部分:
`define format_macro(A) \
$write("%s", $sformatf A ); \
然后你可以这样做:
`format_macro(("a = %d", a))
`format_macro(("a = %d, b = %d", a, b))
顺便说一句,有一个很棒的截屏视频here其中展示了如何在 UVM 中自定义消息传递。在其中,作者展示了这种宏观技术,以及一些其他不错的技巧(如果您使用 UVM)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)