【问题标题】:Writing to simulator log file without writing to terminal写入模拟器日志文件而不写入终端
【发布时间】:2021-01-24 19:56:01
【问题描述】:

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

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


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

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

【问题讨论】:

  • 写入终端和日志需要两个不同的文件描述符。因此在'c'中你需要 printf 两次。在verilog中相同。 vpi_mcd_printf 是一种 hack,它只允许同时将 printf 打印到多个描述符中。它们都没有从模拟内核捕获运行时消息。您可以使用 freopen() 或任何将标准输出重定向到不同位置的方法在“c”中执行此操作。通过着色器“管道”输出或对日志进行后处理可能更容易。

标签: system-verilog


【解决方案1】:

您的问题开始于询问如何禁止打印到终端。但是您对问题的背景表明您希望选择单独控制两者的格式。

终端/标准输出抑制:

您的模拟器可能有一个内置的命令行选项;例如-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_messagecompose_report_message。这可能需要您编写自己的 VPI 或 DPI 函数。

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

【讨论】:

  • 感谢您非常彻底的回复。我对写入默认日志文件非常感兴趣,因为我希望拥有尽可能接近“常规”操作的东西。不幸的是,我也很确定这是不可能的,因为没有办法将工具“默认输出”和它的“默认日志文件”分开。
猜你喜欢
  • 2020-01-04
  • 1970-01-01
  • 2015-09-24
  • 2017-07-02
  • 1970-01-01
  • 2019-05-20
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
相关资源
最近更新 更多