您的问题开始于询问如何禁止打印到终端。但是您对问题的背景表明您希望选择单独控制两者的格式。
终端/标准输出抑制:
您的模拟器可能有一个内置的命令行选项;例如-noprint、-nostdout 或-quiet。查看您特定模拟器的手册。
对于基于 Linux 的模拟,您始终可以将标准输出通过管道传输到 /dev/null
如果使用 UVM:
使用 plusarg +uvm_set_action=*,_ALL_,UVM_INFO,UVM_LOG +uvm_set_action=*,_ALL_,UVM_WARNING,UVM_LOG 这样信息和警告消息只会进入日志文件; error 和 fatal 仍会进入标准输出并记录。
要让所有 UVM 消息仅发送到日志文件,您可以在基础测试的 build_phase 顶部添加如下内容:
set_report_severity_action_hier(UVM_INFO, UVM_LOG);
set_report_severity_action_hier(UVM_WARNING, UVM_LOG);
set_report_severity_action_hier(UVM_ERROR, UVM_LOG | UVM_COUNT);
set_report_severity_action_hier(UVM_FATAL, UVM_LOG | UVM_EXIT);
两者都允许混合和匹配组件、ID 和严重性的控件。
UVM 消息传递的参考公会:
http://www.sunburst-design.com/papers/CummingsSNUG2014AUS_UVM_Messages.pdf
精细的音调控制:
如果您确实需要使终端和日志输出有所不同(例如颜色格式、以 XML 格式制作日志等),那么您需要避免使用$display,而是使用您自己的 VPI 或 DPI 函数。据我所知,您不能覆盖 $display 系统函数。
如背景声明中所述,您可以使用 C 代码中的常规 printf 编写终端。要专门写入日志文件,您可以使用$fdisplay/$fwrite 或您自己的 VPI/DPI 代码来定位输出文件。可能不能是默认的日志文件。
如果文件管理存在问题,您的模拟器可能有一个命令来禁止写入默认日志文件。
UVM 专家!!!
您需要创建自己的 report_server(扩展形式 uvm_report_server)并覆盖 execute_report_message 和 compose_report_message。这可能需要您编写自己的 VPI 或 DPI 函数。
uvm_report_server XML 示例:http://www.verilab.com/files/SNUG_Applications_of_custom_UVM_report_servers.pdf