Verilatorを使用して、SystemVerilog で記述されたアルゴリズムをstdin
、 およびを介して渡される I/O ストリームを操作する実行可能ユーティリティに組み込みますstdout
。残念ながら、SystemVerilog$display()
関数を使用すると、出力はstdout
. 他の目的のために汚染されないstderr
ようにしてほしい。stdout
どうすればこれを実現できますか?
$fdisplay()
このように使用できるの存在を指摘してくれた @toolic に感謝します...
$fdisplay(STDERR,"hello world"); // also supports formatted arguments
IEEE Std 1800-2012 は、STDERR
事前に公開する必要があると述べていますが、Verilator には認識されていないようです。これに対する回避策は次のとおりです。
integer STDERR = 32'h8000_0002;
または、次のように使用するログ ファイル ハンドルを作成することもできます$fdisplay()
...
integer logfile;
initial begin
$system("echo 'initial at ['$(date)']'>>temp.log");
logfile = $fopen("temp.log","a"); // or open with "w" to start fresh
end
同様に機能するが、選択したファイル記述子を使用するカスタムラッパーを作成できればいいかもしれません$display
(毎回指定する必要はありません)。残念ながら、それは言語自体では可能ではないようです-- しかし、おそらくDPIでそれを行うことができます。