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$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 に答える