描述UVM调试数据库的使用方法
解读
面试官抛出该问题,核心想确认三件事:
- 你是否真的在项目中落地过UVM调试数据库(不是只跑过demo);
- 能否把“数据库”当成“可检索、可复现、可协作”的验证资产来管理,而不仅是打印log;
- 对国内主流EDA工具(VCS、Xcelium、Questa)的调试流程是否熟悉,能否在团队里快速定位RTL/TB缺陷并给出sign-off证据。
回答时要突出“场景→命令→数据库→分析→复现”闭环,避免只罗列开关。
知识点
- UVM调试数据库的三种主流格式:
- VCS:UVM-ML Plus + .kdb + .vpd + verdi_interactive.fsdb
- Xcelium:SIMVISION + .shm + .tdb
- Questa:UVM_DEBUG + .wlf + .ucdb
- 生成阶段:编译时加
-debug_access+all -kdb -lca(VCS示例),运行时+UVM_TR_RECORD +UVM_VERDI_TRACE;同时打开+UVM_PHASE_TRACE和+UVM_OBJECTION_TRACE便于后期相位调试。 - 记录内容:objection、phase跳转、TLM transaction、寄存器操作、sequence/item、config_db set/get、factory override、时间零glitch、覆盖率采样点。
- 可视化调试:Verdi/SimVision中利用“UVM Debug”窗口,按“component→phase→transaction”三级展开;支持在波形里双击transaction自动跳到对应源码行。
- 交互式调试:在simulation挂起后,用
uvm> find . -name *.my_scoreboard -exec show查看field值;用uvm> call my_scoreboard::debug()触发用户自定义钩子。 - 回归复现:把
.kdb/.ucdb与git commit id、seed、constraint一起入库;后续用simvision -input restore.tcl +seed=12345即可100%复现。 - 性能与容量:国内项目通常要求“单核波形<20 GB、 nightly regression <2 TB”,需要打开smart record(只录关键hierarchy)或分段dump。
- 权限与合规:对去客户现场调试的bitstream,数据库需脱敏(剪掉加密算法路径),符合《中国集成电路设计企业出口管制合规指引》。
答案
以VCS+Verdi为例,分五步说明:
-
编译:
vcs -debug_access+all -kdb -lca -full64 -sverilog -ntb_opts uvm-1.2 top.sv
其中-kdb生成统一调试数据库,-debug_access+all保证所有信号可见。 -
运行:
simv +UVM_TR_RECORD +UVM_VERDI_TRACE +UVM_PHASE_TRACE +UVM_OBJECTION_TRACE -l run.log -ssf rtl.fsdb
运行结束后得到novas.fsdb、verdi_interactive.fsdb和uvm.tcl。 -
可视化定位:
打开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输出不一致。 -
交互式深挖:
在Verdi命令行执行uvm> call my_scoreboard::print_packet(compare_pkt),把期望包打印到终端;同时uvm> show -value .my_scoreboard.m_matches确认内部计数器未累加;结合driver的vif.sig波形,发现时钟域采样晚1 ns,与时序约束不符。 -
复现与归档:
将verdi_interactive.fsdb、seed、git commit id、constraint文件打包到fail_20240604.tar.gz;在Jenkins回归脚本里加一行verdi -play restore.tcl -seed ${Seed},实现nightly自动复现;最终把调试结论写进sign-off报告,作为“时序采样异常已修复”的追踪证据。
拓展思考
- 混合仿真场景:当UVM Testbench通过DPI调用C/C++参考模型时,可用
gdb+verdi联合调试,设置gdbserver端口,在Verdi里一键切到C源码断点,实现RTL→TLM→C三层同步追踪。 - 低功耗验证:加入UPF后,调试数据库需记录电源域开关与isolation cell行为;可在Verdi里自定义“power wave”,把
supply_on/off事件与UVM objection叠加,检查断电时是否仍有未完成的transaction。 - 云原生调试:国内头部公司已将
.kdb上传至自研对象存储,通过WebGL版Verdi-Lite在线浏览,支持多人同时标注缺陷;需解决“百GB波形实时渲染”与“外网脱敏”两大痛点,后续可结合AI模型自动比对pass/fail差异,进一步缩短定位时间。