首页 > 解决方案 > 写入模拟器日志文件而不写入终端

问题描述

我想写入模拟器日志文件而不写入终端。我猜不可能从 SystemVerilog 代码中做到这一点,但可以使用 VPI 吗?

我看了一下vpi_mcd_printf方法。它指出通道 1 代表工具日志文件的输出通道。有没有办法只写入日志文件?


这个问题的背景是我想为错误/警告消息实现颜色。终端可以使用转义字符,这些字符控制显示的颜色。如果我只是使用$display调用编写这样的转义字符,我将在终端中获得所需的行为,但日志文件将逐字包含这些转义字符。当工具以 GUI 模式启动时,它们也会出现,其中消息不会打印在终端中,而是在工具的控制台中。

我可以使用 C 代码中的常规写入终端printf,但仍然存在写入日志文件的问题。

标签: system-verilog

解决方案


您的问题首先是询问如何禁止打印到终端。但是您对问题的背景表明您希望选择分别控制两者的格式。

终端/标准输出抑制:

你的模拟器可能有一个内置的命令行选项;例如-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系统功能。

如您的背景声明中所述,您可以使用printfC 代码中的常规代码编写终端。要专门写入日志文件,您可以使用$fdisplay/$fwrite或您自己的 VPI/DPI 代码来定位输出文件。可能不能是默认的日志文件。

如果文件管理存在问题,您的模拟器可能有一个命令来禁用写入默认日志文件。

UVM专家!!!

您需要创建自己的 report_server (扩展形式uvm_report_server)并覆盖execute_report_messageand compose_report_message。这可能需要您编写自己的 VPI 或 DPI 函数。

uvm_report_server XML 示例:http ://www.verilab.com/files/SNUG_Applications_of_custom_UVM_report_servers.pdf


推荐阅读