您的问题首先是询问如何禁止打印到终端。但是您对问题的背景表明您希望选择分别控制两者的格式。
终端/标准输出抑制:
你的模拟器可能有一个内置的命令行选项;例如-noprint
,-nostdout
或-quiet
. 检查您的特定模拟器的手册。
对于基于 Linux 的模拟,您始终可以将标准输出通过管道传输到/dev/null
如果使用 UVM:
使用 plusarg+uvm_set_action=*,_ALL_,UVM_INFO,UVM_LOG +uvm_set_action=*,_ALL_,UVM_WARNING,UVM_LOG
这样信息和警告消息只会进入日志文件;错误和致命仍然会进入标准输出并记录。
要将所有 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
系统功能。
如您的背景声明中所述,您可以使用printf
C 代码中的常规代码编写终端。要专门写入日志文件,您可以使用$fdisplay
/$fwrite
或您自己的 VPI/DPI 代码来定位输出文件。可能不能是默认的日志文件。
如果文件管理存在问题,您的模拟器可能有一个命令来禁用写入默认日志文件。
UVM专家!!!
您需要创建自己的 report_server (扩展形式uvm_report_server
)并覆盖execute_report_message
and compose_report_message
。这可能需要您编写自己的 VPI 或 DPI 函数。
uvm_report_server XML 示例:http ://www.verilab.com/files/SNUG_Applications_of_custom_UVM_report_servers.pdf