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