4

我正在编写 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'.

4

2 回答 2

10

是的,$sformatf

来自 LRM:

系统函数的$sformatf行为类似$sformat,只是字符串结果作为函数结果值传回$sformatf,而不是像 for 那样放在第一个参数中$sformat。因此$sformatf可以在字符串值有效的地方使用。

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

例子:

string s;
s = $sformatf("Value = %0d", value);
于 2013-05-09T16:07:37.367 回答
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
于 2013-05-09T16:15:45.560 回答