第三章 仿真工具链: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 波形分析技巧

拿到波形后,我一般按这个顺序检查:

  1. 时钟和复位:时钟频率对不对?复位释放时机?
  2. 关键信号:数据路径上的信号是否按预期变化?
  3. 状态机:状态跳转是否符合设计?
  4. 时序关系:信号之间的建立时间、保持时间?

波形分析示例:

假设我们验证一个FIFO模块。我会先看写使能(wr_en)和满标志(full)的关系。如果wr_en为高时full也为高,说明FIFO写溢出了,这是个bug。

我曾经踩过的坑:有一次仿真波形看起来完全正确,但上板后就是跑不通。后来发现是仿真时没加时序约束,导致仿真结果过于理想。记住:仿真通过不代表硬件没问题。

3.6 工具链选择建议

说了这么多,到底该用哪个?我建议这样选:

  • 个人学习:用Vivado Simulator,免费且够用
  • 团队项目:用QuestaSim,功能全面
  • 回归测试:用Verilator,速度快
  • 混合场景:Verilator做单元测试 + QuestaSim做系统验证

嗯,工具只是工具,关键还是验证思路。下一节我们聊聊怎么搭建验证环境,那才是真正考验功底的地方。