描述使用波形查看器调试的典型流程

解读

面试官并非只想听到“打开波形→放大→看信号”这类表面操作,而是考察候选人是否具备“定位缺陷→追溯根因→闭环验证”的系统化调试思维。国内项目普遍节奏紧、迭代快,波形调试往往与 regression 失败、case 挂死、覆盖率漏洞、后仿差异等场景强耦合,因此回答必须体现“效率”和“可复现”两大指标:既要快速从海量波形中捞出关键线索,又要让结论可被同事复现、被后端签收。回答时应把“工具操作”与“验证方法论”绑定,突出自己如何在真实芯片项目中把波形调试做成可量化、可回放的验证资产。

知识点

  1. 波形数据库格式:VCD、FSDB、WLF、SHM 的优缺点及国内主流选择(Verdi FSDB 占 90% 以上)。
  2. 信号完整性:x/z 传播、delta-cycle glitch、reg 与 wire 混用导致的采样歧义。
  3. 时序对齐:RTL 波形 vs 门级波形 vs SDF 后仿波形,同一时刻命名信号可能因时钟漂移出现“半周期”差异。
  4. 触发与过滤:基于 SVA 的“断言失败自动抓波”、UVM objection 挂起自动保存波形、-ucli 脚本批处理抓波。
  5. 比对工具:波形 diff(Verdi WMGR)、Matlab 向量比对、SST 算法快速回归 diff。
  6. 版本可追溯:波形文件名必须含 git commit 头 7 位、case seed、工具版本,确保半年后仍可重跑。
  7. 国内签关要求:后端团队要求“波形 + 对应 RTL tag + 约束”一并入库,否则不接受 eco。

答案

我常用的“六步闭环”流程已在三个 7 nm 流片项目中跑通,平均能把调试时间从 2 天压到 4 小时以内,且 100% 通过质量部审计:

  1. 失败用例快速复现
    regression 失败后,首先通过 grep UVM_ERROR sim.log 拿到时间戳,用 make replay SEED=12345 在本地 10 分钟内重跑,确保波形可稳定复现。

  2. 自动抓波与版本标记
    在 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,方便回溯。

  3. 粗定位:先拉“时序图”再进“数据路径”
    打开 Verdi,用 nWave -ssf top.fsdb,首先加载提前写好的 signal_list.tcl,只展开时钟、复位、AXI 通道 valid/ready、中断、关键状态机。用 Shift+Z 一键看 x/z,若发现未知态,立即追踪到驱动源,90% 的挂死在此步即可锁定为时钟未接或复位未释。

  4. 精定位:断言与事务级联动
    若未发现 x/z,则加载同目录下的 sva_pass_fail.log,双击失败断言自动跳转到对应时间;同时打开 UVM Transaction Window,把 AXI 读写事务和 RTL 波形做时间对齐,观察事务完成但 ready 持续为 0 的场景,基本可定位协议死锁。

  5. 根因分析与设计修复
    一旦锁定到 RTL 代码行,用 verdi -codebrowser 直接查看波形对应代码,并在 Jira 中开单,标签格式“[验证][波形]AXI 死锁—ready 未拉高”。同时把关键信号保存为 .rc 文件上传,确保设计同事打开即可看到完全相同视图。

  6. 回归验证与波形归档
    设计提交修复后,在原 seed 基础上跑 make regress SEED=12345 PLUSARGS="+FIXED",通过后再跑 100 次随机回归,全部通过才把波形压缩为 top.fsdb.gz 并推送至公司 NAS,路径 /<project>/wave/<version>/pass/,实现闭环。

该流程已在质量部审计时被列为“推荐模板”,并在 2023 年一次 12 亿门 GPU 项目中拦截到后端时钟门控使能信号未同步导致的低功耗异常,避免二次流片,直接节省 2800 万元 mask 费用。

拓展思考

  1. 当芯片规模超过 20 亿门、完整波形达 800 GB 时,上述“全信号抓波”不再可行,可引入“分段抓波 + 触发器”策略:先用 Verdi 的 SmartLog 分析 error 时间窗,再用 -fsdb_slice 只保存前后 2 ms 波形,磁盘占用降至 5%。
  2. 国内先进工艺已普遍采用“门级功耗仿真(GLS Power)”签收,门级波形与 RTL 波形存在时钟漂移,调试时需把两种波形加载到同一窗口,通过 time zero alignment 脚本自动对齐,否则会把正常时钟门控误判为缺陷。
  3. 随着 RISC-V 生态兴起,开源内核常因自定义指令导致波形异常,可把 Spike 模拟器的执行 log 转为 VCD,再与 RTL 波形做 diff,实现“指令级”精确定位,该方法已在某 AI 加速器项目中将自定义指令 bug 调试效率提升 6 倍。