三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

VCS仿真不出波形?从FSDB生成到VERDI打开的完整避坑指南

VCS仿真不出波形?从FSDB生成到VERDI打开的完整避坑指南

VCS仿真不出波形?从FSDB生成到VERDI打开的完整避坑指南

当你在深夜加班调试芯片设计,VCS仿真终于跑完却发现波形文件死活打不开——这种崩溃感每个数字IC工程师都懂。本文将彻底拆解VCS+VERDI流程中的波形生成与加载全链路,用实战经验帮你避开那些教科书不会告诉你的"坑"。

1. FSDB波形生成的三条路径与致命陷阱

1.1 Makefile参数注入法:简单但不够灵活

在编译命令中添加+fsdb+fsdbon是最快捷的波形生成方式,但存在两个典型问题:

vcs -full64 -debug_acc+all +fsdb+fsdbon -sverilog -f files.f
  • 固定命名问题:生成的波形文件强制命名为novas.fsdb,在多测试用例场景下会互相覆盖
  • 信号冗余问题:默认dump所有层次信号,可能导致数GB的无用波形数据

提示:此方法适合快速验证小型设计,但建议添加+fsdb+autoflush参数避免仿真崩溃时波形丢失

1.2 TB系统函数调用法:精准控制但需修改代码

在Testbench中插入FSDB系统函数是更专业的做法:

initial begin $fsdbDumpfile("dut_tb.fsdb"); $fsdbDumpvars(0, dut_top); // 只dump顶层信号 $fsdbDumpMDA(); // 存储存储器数据 end

致命陷阱

  • 混用Makefile参数和TB函数会导致波形文件冲突
  • 未正确设置$fsdbDumpvars层级可能漏掉关键信号

1.3 TCL脚本控制法:动态灵活但复杂度高

通过-run.tcl脚本控制波形生成:

# run.tcl fsdbDumpfile waveform.fsdb fsdbDumpvars 0 top_tb fsdbDumpvars +mda run

对应的Makefile调用方式:

simv -ucli -i run.tcl

参数冲突警示

冲突参数现象解决方案
-gui + -ucli卡在交互界面无法仿真移除-gui或改用-i调用
+fsdbon + TCL生成多个冲突波形文件统一采用单一控制方式

2. VCS仿真命令的"禁忌组合"

2.1 -gui的隐藏代价

虽然-gui能直接唤起DVE界面看似方便,但存在三大隐患:

  1. 与VERDI的nWave存在图形库冲突可能导致崩溃
  2. 消耗更多内存资源影响仿真速度
  3. 无法批量执行自动化测试

2.2 -ucli模式下的波形陷阱

当使用-ucli -i run.tcl组合时:

# 错误示例(会导致波形不生成) ./simv -ucli -i run.tcl -l sim.log

必须确保

  • TCL脚本中包含fsdbDumpfilefsdbDumpvars调用
  • 仿真时间足够长(可通过run xx ns控制)

2.3 编译选项的"静默杀手"

这些编译参数可能悄悄影响波形生成:

vcs -full64 -debug_access+all # 必须包含debug_access才能生成波形 vcs -nospecify # 禁用此选项否则可能丢失时序检查信号

3. VERDI加载失败的六大元凶

3.1 波形文件完整性检查

使用fsdbinfo工具快速验证FSDB文件:

fsdbinfo dump.fsdb | grep "Signal Count"

健康波形文件应显示:

  • 正确的版本号(如FSDB version 3.0)
  • 非零的信号数量
  • 合理的文件大小(至少几MB)

3.2 信号缺失的三大根源

  1. 编译优化过度:检查是否误用-O2等优化选项
  2. 层次路径错误$fsdbDumpvars(0)中的数字代表dump层级
  3. 宏定义影响:缺少+define+FSDB_DUMP可能导致条件编译失效

3.3 版本兼容性矩阵

VCS版本VERDI版本兼容性已知问题
2020.032021.03FSDB解析错误
2021.122021.09需更新补丁
2023.062023.03⚠️部分信号显示异常

4. 终极排障流程图与实战案例

4.1 诊断决策树

波形异常排查路径: 1. 检查fsdb文件是否存在 → 否 → 检查生成方法是否正确 2. 文件存在但为空 → 检查$fsdbDumpvars参数 3. 文件损坏 → 使用fsdbRepair修复 4. VERDI报版本错误 → 使用fsdbConvert转换格式

4.2 典型故障案例

案例1:多TB用例覆盖波形

  • 现象:每次仿真后之前的波形被覆盖
  • 解决方案:动态生成文件名:
$sformat(wave_name, "%s_%t.fsdb", testcase, $time); $fsdbDumpfile(wave_name);

案例2:PLI接口信号丢失

  • 现象:SV与C交互信号未捕获
  • 修复:在Makefile添加:
CFLAGS += -DVERDI_PLI VCS_OPTS += -P ${VERDI_HOME}/pli.tab

在最近一次28nm项目调试中,我们发现当FSDB文件超过20GB时,VERDI 2022版本会出现分段加载异常。临时解决方案是:

fsdbSplit -size 10G large.fsdb # 分割波形文件 verdi -ssf large_pt1.fsdb # 分段加载
← 返回列表