第三章 仿真工具链:Vivado Simulator、ModelSim/QuestaSim、Verilator、仿真波形分析基础
做FPGA验证,说白了就是跟仿真工具打交道。我干了这么多年,换过好几个工具链,每个都有脾气。今天聊聊市面上主流的几款仿真器,还有怎么看波形。
3.1 仿真工具概览
仿真工具分两类:商业版和开源版。商业版功能全、速度快,但贵。开源版免费,但有些场景跑不动。我个人习惯是项目前期用开源工具快速迭代,后期用商业工具做全面验证。
| 工具名称 | 类型 | 特点 | 适用场景 |
|---|---|---|---|
| Vivado Simulator (xsim) | 商业(免费) | 与Vivado深度集成,支持SystemVerilog | Xilinx平台项目 |
| ModelSim/QuestaSim | 商业 | 业界标准,调试功能强大 | 复杂验证环境 |
| Verilator | 开源 | 速度快,支持C++测试框架 | 单元测试、回归测试 |
3.2 Vivado Simulator
Vivado自带的仿真器,叫xsim。很多人觉得它慢,其实用对了还行。我一般在Vivado里直接跑仿真,图个省事。
启动方式有两种:
- GUI模式:在Vivado里点"Run Simulation"
- 命令行模式:用xelab、xsim命令
命令行示例:
# 编译
xvhdl -work work top.vhd
xverilog -work work top.v
# 仿真
xelab -work work top -debug typical
xsim work.top -gui
我的经验:用命令行模式跑回归测试,比GUI快3倍以上。GUI适合调试,命令行适合批量跑。
3.3 ModelSim / QuestaSim
ModelSim是老牌仿真器,QuestaSim是它的升级版。我在交易系统项目里主要用QuestaSim,因为它支持UVM和覆盖率收集。
为什么选QuestaSim?
- 支持SystemVerilog断言(SVA)
- 功能覆盖率分析
- 波形对比功能
- 支持混合语言仿真
避坑指南:我曾经在ModelSim里跑一个大型UVM环境,结果仿真到一半内存爆了。后来发现是没设置优化选项。记得加 -opt 参数。
常用命令:
# 编译
vlib work
vlog -work work +incdir+../rtl top.sv
# 仿真
vsim -voptargs=+acc work.top
# 添加波形
add wave -r /*
run -all
3.4 Verilator
Verilator是个另类。它不直接仿真,而是把Verilog代码转成C++,然后编译成可执行文件。速度极快,比ModelSim快10倍以上。
我一般在以下场景用Verilator:
- 单元测试:验证单个模块功能
- 回归测试:跑几千个测试用例
- 与C++模型联仿:比如交易系统的算法模型
Verilator使用示例:
# 转换Verilog到C++
verilator -Wall --cc top.v --exe sim_main.cpp
# 编译
make -C obj_dir -f Vtop.mk
# 运行
./obj_dir/Vtop
注意:Verilator不支持所有Verilog语法。比如延迟语句(#10)就不支持。你想想看,它转成C++后,哪来的延迟?
3.5 仿真波形分析基础
波形分析是验证的基本功。我见过很多新人,仿真跑完了,盯着波形发呆,不知道看什么。其实波形分析有套路。
3.5.1 波形文件格式
| 格式 | 说明 | 工具支持 |
|---|---|---|
| VCD | 标准格式,文件大 | 所有工具 |
| WLF | ModelSim专用,压缩率高 | ModelSim/QuestaSim |
| FSDB | Synopsys格式,调试方便 | Verdi |
3.5.2 波形分析技巧
拿到波形后,我一般按这个顺序检查:
- 时钟和复位:时钟频率对不对?复位释放时机?
- 关键信号:数据路径上的信号是否按预期变化?
- 状态机:状态跳转是否符合设计?
- 时序关系:信号之间的建立时间、保持时间?
波形分析示例:
假设我们验证一个FIFO模块。我会先看写使能(wr_en)和满标志(full)的关系。如果wr_en为高时full也为高,说明FIFO写溢出了,这是个bug。
我曾经踩过的坑:有一次仿真波形看起来完全正确,但上板后就是跑不通。后来发现是仿真时没加时序约束,导致仿真结果过于理想。记住:仿真通过不代表硬件没问题。
3.6 工具链选择建议
说了这么多,到底该用哪个?我建议这样选:
- 个人学习:用Vivado Simulator,免费且够用
- 团队项目:用QuestaSim,功能全面
- 回归测试:用Verilator,速度快
- 混合场景:Verilator做单元测试 + QuestaSim做系统验证
嗯,工具只是工具,关键还是验证思路。下一节我们聊聊怎么搭建验证环境,那才是真正考验功底的地方。