3. Verdi主界面与波形窗口高效操作
Verdi 的调试效率,很大程度上取决于你是否把波形窗口当成“可编程的工作台”来使用,而不是一个只能左右拖动的查看器。本节围绕信号添加/删除/分组、总线拆分与合并、光标与标记、缩放与平移、书签与视图保存五组操作展开,目标是让你在几十万条信号的仿真波形中,快速定位到真正要看的那几条,并把观察结果稳定地保存下来。
一、信号添加、删除与分组:把波形窗口变成“调试清单”
Verdi 波形窗口(nWave)中,信号来源主要有三类:设计层次树(Hierarchy)、信号列表(Signal List / Get Signals)、以及已有波形中的复制粘贴。最常用的添加方式是在层次树中选中信号后按 Ctrl+W(或中键拖拽)送入波形窗口;删除则选中信号行按 Delete。真正提升效率的是“分组”:把同一功能域的时钟、复位、状态机、数据总线放进一个 Group,例如 grp_axi_wr、grp_dma_ch0。分组后可以整体折叠、整体移动、整体保存,避免每次调试都重新找信号。
建议的命名与组织约定如下(示例,可按项目调整):
grp_clk_rst:clk、rst_n、pll_lockgrp_ctrl_fsm:state、next_state、start、donegrp_datapath:data_in、data_out、valid、readygrp_dbg:临时观察信号,调试结束后删除
分组操作本身不改变信号来源,只是视图层的组织。因此可以放心地把同一信号加入多个 Group,用于不同分析视角(例如“时序视角”和“协议视角”)。
二、总线拆分与合并:从“一根粗线”到“逐位可读”
总线在波形中默认显示为一条带数值的粗线,但调试时经常需要看某几位。Verdi 提供两种方向相反的操作:
- 拆分(Expand / Split Bus):把
data[31:0]展开为 32 条位线,或按字段拆成data[31:16]、data[15:0]。常用做法是选中总线后右键选择 Expand,或使用[ ]快捷键逐级展开。 - 合并(Merge / Group as Bus):把多条相关信号(如
addr[7:0]、addr[15:8])合并成一条总线显示,减少行数、便于整体观察数值变化。
拆分时要注意位序约定:Verdi 默认按声明位宽显示,[31:0] 中左侧为高位。若你的设计使用小端字段布局,拆分后应核对字段边界是否与 RTL 一致,避免把 data[7:0] 误读为高字节。合并操作则要求各信号位宽之和与目标总线一致,否则 Verdi 会提示位宽不匹配。
三、光标与标记:把“时间点”变成可引用的坐标
波形调试的核心是“在某个时刻发生了什么”。Verdi 提供两类时间坐标工具:
- 光标(Cursor):主光标用于定位当前时刻,辅助光标(A/B 光标)用于测量两点之间的时间差。常用快捷键:
Shift+←/→移动主光标,Ctrl+←/→移动辅助光标。 - 标记(Marker):在关键事件处打标记,例如“复位释放”“握手成功”“错误注入”。标记可以命名,并在波形窗口顶部以标签形式显示,便于快速跳转。
一个实用技巧:先用光标定位到异常时刻,再在该时刻打一个命名标记(如 M1_axi_timeout),然后继续向后分析。这样即使后续缩放、平移,标记仍然锚定在原始时间点,不会丢失。
四、缩放与平移:在“全局”和“细节”之间切换
Verdi 的缩放与平移操作非常密集,建议形成肌肉记忆:
- 缩放:
+/-以光标为中心放大/缩小;Ctrl+滚轮连续缩放;F适配全波形(Fit)。 - 平移:
←/→按固定步长平移;Shift+滚轮水平滚动;Home/End跳到波形首尾。 - 区域缩放:按住鼠标中键框选一段时间范围,Verdi 会缩放到该区间,适合快速聚焦某次事务。
缩放时要注意“时间基准”是否变化。Verdi 默认以仿真时间(ns/ps)为横轴,若你切换了时间单位或使用了不同的时间精度,光标读数会随之改变。建议在调试开始时先确认波形窗口右下角的时间单位,再开始测量。
五、书签与视图保存:让调试现场可复现
书签(Bookmark)和视图保存(Save View / Restore View)是 Verdi 中最容易被忽视、但回报最高的功能。书签用于标记“时间点”,视图保存用于标记“整个波形窗口的状态”。
视图保存通常包含:信号列表、分组结构、光标位置、缩放范围、标记、以及当前打开的文件。恢复视图后,你可以回到与上次完全一致的调试现场,而不需要重新添加信号、重新分组、重新缩放。对于需要反复回归的 bug,建议按如下方式命名视图:
# 示例:视图保存命名约定
view_axi_wr_timeout_20240612
view_dma_ch0_overflow
view_clk_rst_bringup
书签则更适合“单点”场景。例如在波形中看到一次异常握手,打上书签 BM_handshake_fail,下次打开波形时直接从书签列表跳转,无需记住具体时间。
六、把五组操作串成一条调试路径
实际调试中,这五组操作通常不是孤立的。一个典型路径是:从层次树添加信号(Ctrl+W)→ 按功能分组(Group)→ 对总线拆分(Expand)→ 用光标定位异常时刻并打标记(Marker)→ 框选区域缩放(Zoom)→ 保存视图(Save View)。下次回归时,直接 Restore View,再跳到书签,就能在几秒内回到上次的调试现场。
最后强调一点:Verdi 的波形窗口操作并不难,难的是形成稳定的操作习惯。建议在下一个调试任务中,刻意练习“先分组、再拆分、后保存”的顺序,把重复劳动压缩到最低,把注意力留给真正的时序与协议分析。