Verilog $sformat是否有等效函数?

Verilog $sformat是否有等效函数?,verilog,system-verilog,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中得到以下运行时错误: **错误:(vsi

我正在编写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中得到以下运行时错误:


**错误:(vsim-PLI-3029)component.sv(105):应为系统功能,而不是系统任务“$sformat”。
是,
$sformat

来自LRM:

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

例如:

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

您可以使用
$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
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