将SystemVerilog $ display发送到stderr

时间:2015-10-16 00:06:51

标签: stdout verilog system-verilog stderr verilator

我正在使用Verilator将一个用SystemVerilog编写的算法合并到一个可执行的实用程序中,该实用程序可以处理通过stdinstdout传递的I / O流。不幸的是,当我使用SystemVerilog $display()函数时,输出转到stdout。我希望它转到stderr,以便stdout对我的其他目的保持不受污染。

我怎样才能实现这一目标?

1 个答案:

答案 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(到目前为止我还没有这样做)。