$ sformat是否有相同的功能?

时间:2013-05-09 15:57:18

标签: verilog system-verilog

我正在编写SystemVerilog代码,我注意到$ sformat是一个系统任务,而不是一个函数。 是否有一个等同于$ sformat的函数?

我想在一个函数中执行以下操作:

assert(my_dto_h.a == 10) else begin
  `ovm_error("component", $sformat("my_dto_h.a should be 10, not %0d", my_dto_h.a))
end

不幸的是,我从QuestaSim 10.2获得了以下运行时错误:

** Error: (vsim-PLI-3029) component.sv(105): Expected a system function, not system task '$sformat'.

2 个答案:

答案 0 :(得分:9)

是的,$sformatf

来自LRM:

  

系统函数$sformatf的行为与$sformat类似,不同之处在于字符串结果作为$sformatf的函数结果值传回,而不是放在$sformat的第一个参数中}。因此,$sformatf可以在字符串值有效的情况下使用。

variable_format_string_output_function ::=
   $sformatf ( format_string [ , list_of_arguments ] )

示例:

string s;
s = $sformatf("Value = %0d", value);

答案 1 :(得分:1)

您可以使用$psprintf。它不是标准的一部分,但许多模拟器如QuestaSim和VCS都支持它。

assert(my_dto_h.a == 10) else begin
  `ovm_error("component", $psprintf("my_dto_h.a should be 10, not %0d", my_dto_h.a))
end