e19*_*001 4 verilog system-verilog
我想创建一个具有多个参数的宏,就像$ display一样.
我的代码看起来像这样,但它不起作用.
`define format_macro(A) \
$write("%s", $sformatf(A)); \
Run Code Online (Sandbox Code Playgroud)
这就是我所谓的format_macro.
`format_macro("variable = %d", variable)
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
dwi*_*kle 10
我想创建一个具有多个参数的宏,就像$ display一样.
你不能.Verilog和SystemVerilog不支持可变参数宏.
如果您的目标是使用它来格式化字符串或输出,并且您希望避免必须$sformat在整个地方键入,这是一种解决方法.您可以将宏定义为具有单个参数,并将该参数与$sformat.这样做的警告是,在使用宏时必须将参数包装在括号中.
注意()'s for $sformatf不是宏的一部分:
`define format_macro(A) \
$write("%s", $sformatf A ); \
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
`format_macro(("a = %d", a))
`format_macro(("a = %d, b = %d", a, b))
Run Code Online (Sandbox Code Playgroud)
顺便说一下,这里有一个很棒的截屏视频,展示了如何在UVM中自定义消息.在其中,作者展示了这种宏观技术,以及一些其他很好的技巧,如果你正在使用UVM.
| 归档时间: |
|
| 查看次数: |
3319 次 |
| 最近记录: |