vcs的uvm debug tool的使用

本文介绍如何使用 Verdi 进行 UVM 调试,通过两步编译流程实现:第一步编译设置包含 debug 访问权限及各种选项;第二步模拟过程启用 GUI、FSDB 等功能并记录调试信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

refer link: https://cn.bing.com/search?q=Verdi+UVM+Debug+Mode+简单使用_Holden_Liu的博客-CSDN博客&cvid=0fc34836d9134e079275e243198974e0&aqs=edge..69i57j69i61.1228j0j4&FORM=ANAB01&PC=U531

二步编译

1.compile:  vcs -full64 -sverilog -debug_access+all+reverse(倒叙debug,可以不加)-lca -kdb -ntb_opts uvm -timescale 1ns/1ps -f filelist +define+UVM_VERDI_COMPWAVE  -l compile.log

2.simulation:  ./simv -gui=verdi +FSDB_ON +UVM_TR_RECORD +UVM_LOG_RECORD +UVM_VERDI_TRACE='UVM_AWARE+HIER+TLM+COMPWAVE' +fsdbfile+verdi_i.fsdb 

<think>我们正在讨论如何在VCS仿真器中控制UVM打印信息的显示设置。用户的问题是如何在VCS中设置UVM打印信息的级别和显示选项。 根据UVM机制,控制打印信息主要有两种方式:通过命令行参数(全局控制)和通过代码设置(精细控制)。在VCS中,我们主要使用命令行参数,但也可以结合代码设置。 重点:VCS中控制UVM打印信息的命令行参数 1. 设置全局冗余级别(verbosity): +UVM_VERBOSITY=<level> 其中<level>可以是:UVM_NONE, UVM_LOW, UVM_MEDIUM, UVM_HIGH, UVM_FULL, UVM_DEBUG 例如:+UVM_VERBOSITY=UVM_HIGH # 将只显示HIGH及以上级别的消息 2. 设置特定文件的日志输出: - 通常,VCS会将所有消息同时输出到标准输出和日志文件(默认的日志文件名为simv.log)。如果希望将UVM消息单独输出到另一个文件,可以使用: +UVM_LOG_FILE=<filename> 例如:+UVM_LOG_FILE=uvm_messages.log 3. 设置是否将消息同时输出到标准输出和日志文件(默认是同时输出): +UVM_DUMP_CMDLINE_ARGS # 这个选项并不直接控制输出,实际上控制输出重定向的是: - 如果希望只输出到日志文件而不输出到标准输出,可以使用: +UVM_NO_TERMINAL # 这样消息就不会在终端显示,只写入日志文件 4. 控制特定ID或消息类型的显示: +uvm_set_action=<comp>,<id>,<severity>,<action> 其中: <comp>:组件路径,可以使用通配符(*),例如"uvm_test_top.*" <id>:消息ID,也可以使用通配符(*) <severity>:严重性(UVM_INFO, UVM_WARNING, UVM_ERROR, UVM_FATAL) <action>:采取的动作(UVM_DISPLAY, UVM_LOG, UVM_COUNT, UVM_EXIT等),多个动作可以用或运算(如UVM_DISPLAY|UVM_LOG) 例如:+uvm_set_action="uvm_test_top.env.agent*","monitor_id",UVM_INFO,UVM_NO_ACTION" # 关闭特定组件的特定ID的INFO消息 5. 设置特定ID或组件的冗余级别: +uvm_set_verbosity=<comp>,<id>,<verbosity>,<phase> 其中: <comp>:组件路径(支持通配符) <id>:消息ID(支持通配符) <verbosity>:冗余级别(UVM_LOW, UVM_MEDIUM, UVM_HIGH等) <phase>:在哪个phase生效(例如:build, run, main, etc.),也可以使用"*"表示所有phase 例如:+uvm_set_verbosity="uvm_test_top.env",*,UVM_HIGH,build # 在build阶段,将env及其子组件中所有消息的冗余级别设置为HIGH(这样只有高于HIGH的才会显示,而原来为MEDIUM的就不会显示) 6. 设置超时警告:UVM默认在仿真超时时会报告警告,可以通过以下命令关闭超时警告: +UVM_TIMEOUT=<timeout_value> # 设置超时时间(单位时间单位),如果设置为0则禁用超时检测 或者禁用超时警告消息(但超时检测仍然进行): +uvm_set_action="uvm_test_top",UVM_TIMEOUT,UVM_WARNING,UVM_NO_ACTION 7. 控制消息显示格式: UVM默认的消息格式是固定的,但可以通过重载uvm_report_server来改变。在命令行中,没有直接改变格式的选项,但可以通过以下方式设置: +UVM_CONFIG_DB_SET=uvm_report_server,default_report_server,<class_name> 其中<class_name>是你自定义的report server类名(需要继承自uvm_report_server)。但这种方法相对复杂,通常更推荐在代码中设置。 示例:在VCS中运行一个测试,并控制打印信息 vcs -sverilog ... [编译选项] ... ./simv +UVM_TESTNAME=my_test +UVM_VERBOSITY=UVM_HIGH +uvm_set_verbosity="uvm_test_top.env.*",*,UVM_FULL,build +UVM_LOG_FILE=uvm.log 解释: - 全局冗余级别设置为UVM_HIGH,所以只有HIGH和FULL级别的消息会显示(注意:在build阶段,通常使用MEDIUM级别,所以这些消息会被过滤掉)。 - 对于env及其子组件,在build阶段,将所有消息的冗余级别设置为UVM_FULL(这样,这些组件中原来使用MEDIUM或HIGH级别的消息,因为被设置为FULL,而全局级别是HIGH,所以FULL级别的消息不会被显示,除非全局级别改为FULL或更高?) 注意:设置特定组件的冗余级别会覆盖消息本身的冗余级别。例如,一条消息原本是UVM_MEDIUM,通过+uvm_set_verbosity设置为UVM_FULL,那么这条消息的级别就变成了UVM_FULL。而全局设置的冗余级别是UVM_HIGH,那么UVM_FULL低于UVM_HIGH(因为UVM_FULL的整数值比UVM_HIGH高,但比较时是数值越大越详细),所以不会显示。因此,要显示更多消息,需要将全局冗余级别设置为较低(数值较大)的级别。 重要:UVM冗余级别的数值定义(在uvm_globals.svh中): UVM_NONE = 0; UVM_LOW = 100; UVM_MEDIUM = 200; UVM_HIGH = 300; UVM_FULL = 400; UVM_DEBUG = 500; 所以,数值越大,冗余度越高。当设置全局冗余级别为UVM_HIGH(300)时,只有冗余度大于等于300(即UVM_HIGH, UVM_FULL, UVM_DEBUG)的消息才会显示。 因此,上面的例子中,我们将env及其子组件在build阶段的消息都设置为UVM_FULL(400),那么这些消息在全局级别为UVM_HIGH(300)时,因为400>300,所以会显示。而其他组件的消息如果级别为UVM_MEDIUM(200)则不会显示。 如果希望完全关闭某个组件的所有消息,可以将该组件的冗余级别设置为UVM_NONE(0): +uvm_set_verbosity="uvm_test_top.agent1",*,UVM_NONE,* 或者使用set_action来关闭显示: +uvm_set_action="uvm_test_top.agent1",*,UVM_INFO,UVM_NO_ACTION" 注意:uvm_set_action不仅可以控制UVM_INFO,还可以控制UVM_WARNING等。 总结:在VCS中,主要通过以下命令行参数控制UVM打印: +UVM_VERBOSITY +UVM_LOG_FILE +UVM_NO_TERMINAL +uvm_set_verbosity +uvm_set_action 另外,UVM还支持通过配置文件(.ini)来设置,但VCS可能不支持直接读取.ini文件,所以通常使用命令行参数。 最后,生成相关问题。</think>### 在 VCS 中控制 UVM 打印信息的配置方法 在 VCS 仿真器中控制 UVM 打印信息,主要通过**命令行参数**实现。以下是核心配置方法: --- #### 1. **全局冗余级别控制**(常用) 通过 `+UVM_VERBOSITY` 参数设置全局消息过滤级别: ```bash # 只显示 HIGH 及以上级别消息(屏蔽 MEDIUM/LOW) ./simv +UVM_VERBOSITY=UVM_HIGH # 显示所有消息(包括 DEBUG) ./simv +UVM_VERBOSITY=UVM_DEBUG ``` **级别说明**: | 级别 | 数值 | 说明 | |------------|------|-------------------------| | `UVM_NONE` | 0 | 完全关闭 | | `UVM_LOW` | 100 | 关键信息(默认最低级别) | | `UVM_MEDIUM`| 200 | 常规信息(build_phase 默认)| | `UVM_HIGH` | 300 | 详细调试信息 | | `UVM_FULL` | 400 | 完整跟踪信息 | | `UVM_DEBUG`| 500 | 最详细调试信息 | --- #### 2. **精准组件级控制** 使用 `+uvm_set_verbosity` 控制特定组件的消息: ```bash # 关闭 test_top.env 下所有组件的 MEDIUM 消息 ./simv +uvm_set_verbosity="test_top.env.*",_,UVM_NONE,build # 仅开启 agent 组件的 DEBUG 消息 ./simv +uvm_set_verbosity="test_top.env.agent*",_,UVM_DEBUG,* ``` 参数格式: `+uvm_set_verbosity="<组件路径>",<消息ID>,<级别>,<阶段>` - 通配符 `*` 匹配任意字符 - `_` 表示所有消息 ID - `*` 表示所有阶段 --- #### 3. **消息输出重定向** 控制消息输出位置: ```bash # 将 UVM 消息重定向到文件(不显示在终端) ./simv +UVM_LOG_FILE=uvm_messages.log # 禁用终端输出(只写日志) ./simv +UVM_NO_TERMINAL ``` --- #### 4. **特定消息类型过滤** 使用 `+uvm_set_action` 拦截指定消息: ```bash # 关闭所有 BUILD 阶段的消息 ./simv +uvm_set_action="*","BUILD",UVM_INFO,UVM_NO_ACTION # 关闭特定组件的警告 ./simv +uvm_set_action="test_top.env.agent","CFGERR",UVM_WARNING,UVM_NO_ACTION ``` 参数格式: `+uvm_set_action="<组件>",<消息ID>,<消息类型>,<动作>` 动作选项:`UVM_DISPLAY` (显示), `UVM_LOG` (写日志), `UVM_NO_ACTION` (屏蔽) --- ### 配置示例 **场景**:关闭 build_phase 所有消息,只保留 agent 的警告: ```bash ./simv \ +UVM_VERBOSITY=UVM_HIGH \ # 全局屏蔽MEDIUM及以下 +uvm_set_verbosity="*",_,UVM_NONE,build \ # 强制关闭build阶段消息 +uvm_set_action="test_top.env.agent*",_,UVM_WARNING,UVM_DISPLAY ``` --- ### 验证配置效果 在测试代码中添加检查: ```systemverilog // 在 build_phase 中验证 `uvm_info("VERB_TEST", "MEDIUM消息应被屏蔽", UVM_MEDIUM) `uvm_info("VERB_TEST", "HIGH消息应显示", UVM_HIGH) ``` > ⚠️ 注意:命令行参数优先级高于代码中的 `set_report_verbosity_level()` 设置[^1]。 --- ### 常用 VCS 调试命令组合 | **目的** | **命令** | |---------------------------|-------------------------------------------------------------------------| | 仅显示错误/警告 | `./simv +UVM_VERBOSITY=UVM_NONE` | | 调试特定组件 | `./simv +uvm_set_verbosity="top.env.dut*",_,UVM_DEBUG,*` | | 捕获消息到文件 | `./simv +UVM_LOG_FILE=debug.log +UVM_NO_TERMINAL` | | 关闭超时警告 | `./simv +uvm_set_action="*",UVM_TIMEOUT,UVM_WARNING,UVM_NO_ACTION` | [^1]: UVM 命令行参数优先级规则参考 IEEE 1800.2-2020 标准第 15.3 节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值