system-verilog - 写入模拟器日志文件而不写入终端
问题描述
我想写入模拟器日志文件而不写入终端。我猜不可能从 SystemVerilog 代码中做到这一点,但可以使用 VPI 吗?
我看了一下vpi_mcd_printf
方法。它指出通道 1 代表工具和日志文件的输出通道。有没有办法只写入日志文件?
这个问题的背景是我想为错误/警告消息实现颜色。终端可以使用转义字符,这些字符控制显示的颜色。如果我只是使用$display
调用编写这样的转义字符,我将在终端中获得所需的行为,但日志文件将逐字包含这些转义字符。当工具以 GUI 模式启动时,它们也会出现,其中消息不会打印在终端中,而是在工具的控制台中。
我可以使用 C 代码中的常规写入终端printf
,但仍然存在写入日志文件的问题。
解决方案
您的问题首先是询问如何禁止打印到终端。但是您对问题的背景表明您希望选择分别控制两者的格式。
终端/标准输出抑制:
你的模拟器可能有一个内置的命令行选项;例如-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
推荐阅读
- sql-server - 公用表表达式 (CTE) 查询中的表行计数?
- css - 有人可以告诉我这个css类的问题吗?
- python - 带有条件语句的 For-Loop 输出问题 - python
- html - 如何判断当前页面是否有屏幕唤醒锁?
- https - EnvoyProxy 上游连接错误或在标头之前断开/重置
- json - SoapUI Groovy 脚本 - 多个调用将值存储在变量中?
- python-3.x - 如何使 Python 正则表达式看起来很贪婪
- javascript - 'h1:nth-child(5)' 选择第三个而不是第五个孩子
- heroku - 除了信任代理之外,Heroku 上的快速会话安全 cookie 的任何其他设置?
- python - pandas str.split(' ', 5, expand=True) 确实覆盖了我在数据框中的现有列。如何避免这种情况?