我正在使用Verilator将一个用SystemVerilog编写的算法合并到一个可执行的实用程序中,该实用程序可以处理通过stdin
和stdout
传递的I / O流。不幸的是,当我使用SystemVerilog $display()
函数时,输出转到stdout
。我希望它转到stderr
,以便stdout
对我的其他目的保持不受污染。
我怎样才能实现这一目标?
答案 0 :(得分:4)
感谢@toolic指出$fdisplay()
的存在,因此可以使用......
$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
的自定义包装器,但使用您选择的文件描述符(每次都不指定),这可能会很好。不幸的是,that doesn't seem to be possible within the language itself - 但也许您可以使用DPI执行此操作,请参阅DPI Display Functions(到目前为止我还没有这样做)。