描述使用波形查看器调试的典型流程
解读
面试官并非只想听到“打开波形→放大→看信号”这类表面操作,而是考察候选人是否具备“定位缺陷→追溯根因→闭环验证”的系统化调试思维。国内项目普遍节奏紧、迭代快,波形调试往往与 regression 失败、case 挂死、覆盖率漏洞、后仿差异等场景强耦合,因此回答必须体现“效率”和“可复现”两大指标:既要快速从海量波形中捞出关键线索,又要让结论可被同事复现、被后端签收。回答时应把“工具操作”与“验证方法论”绑定,突出自己如何在真实芯片项目中把波形调试做成可量化、可回放的验证资产。
知识点
- 波形数据库格式:VCD、FSDB、WLF、SHM 的优缺点及国内主流选择(Verdi FSDB 占 90% 以上)。
- 信号完整性:x/z 传播、delta-cycle glitch、reg 与 wire 混用导致的采样歧义。
- 时序对齐:RTL 波形 vs 门级波形 vs SDF 后仿波形,同一时刻命名信号可能因时钟漂移出现“半周期”差异。
- 触发与过滤:基于 SVA 的“断言失败自动抓波”、UVM objection 挂起自动保存波形、
-ucli脚本批处理抓波。 - 比对工具:波形 diff(Verdi WMGR)、Matlab 向量比对、SST 算法快速回归 diff。
- 版本可追溯:波形文件名必须含 git commit 头 7 位、case seed、工具版本,确保半年后仍可重跑。
- 国内签关要求:后端团队要求“波形 + 对应 RTL tag + 约束”一并入库,否则不接受 eco。
答案
我常用的“六步闭环”流程已在三个 7 nm 流片项目中跑通,平均能把调试时间从 2 天压到 4 小时以内,且 100% 通过质量部审计:
-
失败用例快速复现
regression 失败后,首先通过grep UVM_ERROR sim.log拿到时间戳,用make replay SEED=12345在本地 10 分钟内重跑,确保波形可稳定复现。 -
自动抓波与版本标记
在 Makefile 里预埋-debug_access+all -ucli -do dump.tcl,脚本中写if { $UVM_ERROR_CNT > 0 } { dump -add $TOP -depth 0 -fsdb top.fsdb },保证失败即自动落盘。文件名强制格式TOP_CASE_2025_0605_1430_abc1d2e.fsdb,其中 abc1d2e 为 RTL git commit ID,方便回溯。 -
粗定位:先拉“时序图”再进“数据路径”
打开 Verdi,用nWave -ssf top.fsdb,首先加载提前写好的signal_list.tcl,只展开时钟、复位、AXI 通道 valid/ready、中断、关键状态机。用Shift+Z一键看 x/z,若发现未知态,立即追踪到驱动源,90% 的挂死在此步即可锁定为时钟未接或复位未释。 -
精定位:断言与事务级联动
若未发现 x/z,则加载同目录下的sva_pass_fail.log,双击失败断言自动跳转到对应时间;同时打开 UVM Transaction Window,把 AXI 读写事务和 RTL 波形做时间对齐,观察事务完成但 ready 持续为 0 的场景,基本可定位协议死锁。 -
根因分析与设计修复
一旦锁定到 RTL 代码行,用verdi -codebrowser直接查看波形对应代码,并在 Jira 中开单,标签格式“[验证][波形]AXI 死锁—ready 未拉高”。同时把关键信号保存为.rc文件上传,确保设计同事打开即可看到完全相同视图。 -
回归验证与波形归档
设计提交修复后,在原 seed 基础上跑make regress SEED=12345 PLUSARGS="+FIXED",通过后再跑 100 次随机回归,全部通过才把波形压缩为top.fsdb.gz并推送至公司 NAS,路径/<project>/wave/<version>/pass/,实现闭环。
该流程已在质量部审计时被列为“推荐模板”,并在 2023 年一次 12 亿门 GPU 项目中拦截到后端时钟门控使能信号未同步导致的低功耗异常,避免二次流片,直接节省 2800 万元 mask 费用。
拓展思考
- 当芯片规模超过 20 亿门、完整波形达 800 GB 时,上述“全信号抓波”不再可行,可引入“分段抓波 + 触发器”策略:先用 Verdi 的 SmartLog 分析 error 时间窗,再用
-fsdb_slice只保存前后 2 ms 波形,磁盘占用降至 5%。 - 国内先进工艺已普遍采用“门级功耗仿真(GLS Power)”签收,门级波形与 RTL 波形存在时钟漂移,调试时需把两种波形加载到同一窗口,通过
time zero alignment脚本自动对齐,否则会把正常时钟门控误判为缺陷。 - 随着 RISC-V 生态兴起,开源内核常因自定义指令导致波形异常,可把 Spike 模拟器的执行 log 转为 VCD,再与 RTL 波形做 diff,实现“指令级”精确定位,该方法已在某 AI 加速器项目中将自定义指令 bug 调试效率提升 6 倍。