描述UVM调试数据库的使用方法

解读

面试官抛出该问题,核心想确认三件事:

  1. 你是否真的在项目中落地过UVM调试数据库(不是只跑过demo);
  2. 能否把“数据库”当成“可检索、可复现、可协作”的验证资产来管理,而不仅是打印log;
  3. 对国内主流EDA工具(VCS、Xcelium、Questa)的调试流程是否熟悉,能否在团队里快速定位RTL/TB缺陷并给出sign-off证据。
    回答时要突出“场景→命令→数据库→分析→复现”闭环,避免只罗列开关。

知识点

  1. UVM调试数据库的三种主流格式:
    • VCS:UVM-ML Plus + .kdb + .vpd + verdi_interactive.fsdb
    • Xcelium:SIMVISION + .shm + .tdb
    • Questa:UVM_DEBUG + .wlf + .ucdb
  2. 生成阶段:编译时加-debug_access+all -kdb -lca(VCS示例),运行时+UVM_TR_RECORD +UVM_VERDI_TRACE;同时打开+UVM_PHASE_TRACE+UVM_OBJECTION_TRACE便于后期相位调试。
  3. 记录内容:objection、phase跳转、TLM transaction、寄存器操作、sequence/item、config_db set/get、factory override、时间零glitch、覆盖率采样点。
  4. 可视化调试:Verdi/SimVision中利用“UVM Debug”窗口,按“component→phase→transaction”三级展开;支持在波形里双击transaction自动跳到对应源码行。
  5. 交互式调试:在simulation挂起后,用uvm> find . -name *.my_scoreboard -exec show查看field值;用uvm> call my_scoreboard::debug()触发用户自定义钩子。
  6. 回归复现:把.kdb/.ucdbgit commit idseedconstraint一起入库;后续用simvision -input restore.tcl +seed=12345即可100%复现。
  7. 性能与容量:国内项目通常要求“单核波形<20 GB、 nightly regression <2 TB”,需要打开smart record(只录关键hierarchy)或分段dump。
  8. 权限与合规:对去客户现场调试的bitstream,数据库需脱敏(剪掉加密算法路径),符合《中国集成电路设计企业出口管制合规指引》。

答案

以VCS+Verdi为例,分五步说明:

  1. 编译:
    vcs -debug_access+all -kdb -lca -full64 -sverilog -ntb_opts uvm-1.2 top.sv
    其中-kdb生成统一调试数据库,-debug_access+all保证所有信号可见。

  2. 运行:
    simv +UVM_TR_RECORD +UVM_VERDI_TRACE +UVM_PHASE_TRACE +UVM_OBJECTION_TRACE -l run.log -ssf rtl.fsdb
    运行结束后得到novas.fsdbverdi_interactive.fsdbuvm.tcl

  3. 可视化定位:
    打开Verdi:verdi -ssf novas.fsdb -dbdir simv.daidir -sv -top top &
    在“UVM Debug”窗口选择失败用例,Filter输入“uvm_test_top.env.my_scoreboard”,双击红色fail transaction,波形自动zoom到该transaction时间窗;查看m_matches字段为0,确认golden packet与DUT输出不一致。

  4. 交互式深挖:
    在Verdi命令行执行uvm> call my_scoreboard::print_packet(compare_pkt),把期望包打印到终端;同时uvm> show -value .my_scoreboard.m_matches确认内部计数器未累加;结合driver的vif.sig波形,发现时钟域采样晚1 ns,与时序约束不符。

  5. 复现与归档:
    verdi_interactive.fsdb、seed、git commit id、constraint文件打包到fail_20240604.tar.gz;在Jenkins回归脚本里加一行verdi -play restore.tcl -seed ${Seed},实现nightly自动复现;最终把调试结论写进sign-off报告,作为“时序采样异常已修复”的追踪证据。

拓展思考

  1. 混合仿真场景:当UVM Testbench通过DPI调用C/C++参考模型时,可用gdb+verdi联合调试,设置gdbserver端口,在Verdi里一键切到C源码断点,实现RTL→TLM→C三层同步追踪。
  2. 低功耗验证:加入UPF后,调试数据库需记录电源域开关与isolation cell行为;可在Verdi里自定义“power wave”,把supply_on/off事件与UVM objection叠加,检查断电时是否仍有未完成的transaction。
  3. 云原生调试:国内头部公司已将.kdb上传至自研对象存储,通过WebGL版Verdi-Lite在线浏览,支持多人同时标注缺陷;需解决“百GB波形实时渲染”与“外网脱敏”两大痛点,后续可结合AI模型自动比对pass/fail差异,进一步缩短定位时间。