来自本土记录器的$ psprintf功能?

时间:2016-02-09 21:19:34

标签: system-verilog

有没有人想出一种聪明的方法来支持您自己的记录器的$psprinf(或$sformat)功能?

我想改变我的界限:

  log.info($psprintf(" The burst took %0d cycles as expected", cycle_count)); 

为:

  log.info(" The burst took %0d cycles as expected", cycle_count);

它主要是一个美容目标,但每个打印行添加10个字符会变得乏味。

欢迎聪明的想法!

更新:注意!主要问题是模仿$psprintf能够接受多个(非确切数量)参数的能力。我不认为它得到了语言的支持,但是我已经离开了几年,所以也许出现了一些聪明的东西?

1 个答案:

答案 0 :(得分:1)

SystemVerilog不支持具有可变数量参数的函数或任务,但您可以使用具有您期望的最大参数数量的宏

// must have between 1 and 5 arguments
`define LOG(a1,a2="",a3="",a4="",a5="") log.info($psprintf(a1,a2,a3,a4,a5))

`LOG(" The burst took %0d cycles as expected", cycle_count);

如果您不知道预期有多少个参数,则必须将括号作为参数的一部分。

`define LOG(arg) log.info($psprintf arg )
`LOG((" The burst took %0d cycles as expected", cycle_count));