| name | vivado-sim |
| description | 当用户需要 Vivado 仿真策略、流程选择和调试方面的帮助时使用此技能。这包括行为仿真(RTL 功能验证)、综合后仿真(网表功能验证)、实现后时序仿真(SDF 反标注,时序验证)、Vivado 仿真器 xsim 使用(xvlog/xvhdl/xelab/xsim 三步流程,launch_simulation 工程模式)、第三方仿真器集成(Questa/ModelSim/VCS/Xcelium/Riviera/ActiveHDL,compile_simlib,export_simulation)、SAIF/VCD 功耗仿真(open_saif/log_saif,open_vcd/log_vcd,read_saif + report_power)、仿真网表生成(write_verilog -mode funcsim/timesim,write_sdf)、xsim 调试命令(add_force、add_wave、log_wave、add_bp、step、run、restart、get_objects、get_value)、仿真属性和设置、glbl.v 使用,或选择正确仿真方法进行验证或功耗分析的任何问题。 |
Vivado 仿真决策指南
基于 UG900(v2025.2)。完整命令语法和属性表请参阅 REFERENCE.md。
仿真流程概述
RTL + 测试平台 ──→ 行为仿真(功能验证,最快)
↓ synth_design
综合网表 ──→ 综合后仿真(综合正确性验证,可选)
↓ place_design + route_design
实现网表 + SDF ──→ 时序仿真(时序验证,最慢)
↓
SAIF/VCD ──→ report_power(功耗分析)
三个仿真阶段
| 阶段 | 输入 | 目的 | 速度 | 准确性 |
|---|
| 行为(RTL) | RTL 源 + TB | 功能验证 | 最快 | 无时序 |
| 综合后 | 综合网表 | 验证综合正确性 | 中等 | 仅功能 |
| 实现后 | 实现网表 + SDF | 时序验证 | 最慢 | 完整时序 |
何时使用各阶段
- 日常开发 → 仅行为仿真
- 综合后功能不匹配 → 综合后仿真以隔离问题
- 时序收敛验证 → 实现后时序仿真
- 功耗估计 → 任何阶段 + SAIF 转储 →
report_power
Vivado 仿真器(xsim)— 工程模式
推荐用于与 Vivado GUI/项目的交互式开发。
# 配置仿真设置
set_property -name {xsim.simulate.runtime} -value {1000ns} -objects [get_filesets sim_1]
set_property -name {xsim.simulate.log_all_signals} -value {true} -objects [get_filesets sim_1]
set_property -name {xsim.elaborate.debug_level} -value {typical} -objects [get_filesets sim_1]
# 启动行为仿真
launch_simulation
run 100ns
close_sim
工程模式中的仿真模式
launch_simulation -mode behavioral ;# RTL 仿真(默认)
launch_simulation -mode post-synthesis -type functional ;# 综合后功能
launch_simulation -mode post-synthesis -type timing ;# 综合后时序
launch_simulation -mode post-implementation -type functional ;# 实现后功能
launch_simulation -mode post-implementation -type timing ;# 实现后时序
生成脚本但不运行
launch_simulation -scripts_only ;# 仅生成仿真脚本
launch_simulation -scripts_only -absolute_path ;# 使用绝对路径
Vivado 仿真器(xsim)— 非工程模式(脚本化)
三步流程:编译 → Elaborate → 仿真
# 步骤 1:编译
exec xvlog design.v tb.v ;# Verilog
exec xvlog -sv design.sv ;# SystemVerilog
exec xvhdl design.vhd ;# VHDL
exec xvhdl -2008 design.vhd ;# VHDL-2008
# 步骤 2:Elaborate(链接)
exec xelab -debug typical tb_top -s sim_snap
# 步骤 3:仿真
exec xsim sim_snap -runall
exec xsim sim_snap -t run.tcl ;# 带 TCL 脚本
exec xsim sim_snap -gui ;# 带 GUI
xelab 调试级别决策
| 场景 | 选项 | 效果 |
|---|
| 波形 + 断点 | -debug typical | 标准调试(推荐) |
| 所有信号可观察 | -debug all | 完整可见性,较慢Elaborate |
| 最快仿真 | -debug off | 无调试,最大速度 |
| 逐行步进 | -debug line | 源码级步进 |
xelab 关键选项
| 选项 | 目的 |
|---|
-d MACRO=value | Verilog `define |
-i <path> | Verilog include 搜索路径 |
-L <library> | 库搜索顺序 |
-s <snapshot> | 输出快照名称 |
-timescale 1ns/1ps | 默认时间刻度 |
-mt <N> | 多线程(2, 4, 8, off) |
-transport_int_delays | 传输延迟模式(时序仿真) |
-pulse_r 0 -pulse_e 0 | 脉冲拒绝/错误(时序仿真) |
-sdfroot <instance> | SDF 反标注根实例 |
-generic_top <param=val> | 覆盖顶层通用参数(VHDL) |
-override_timeunit | 用 -timescale 覆盖模块 timeunit |
xsim 运行时 / 调试命令
| 命令 | 描述 |
|---|
run <time> | 运行指定时间 |
run -all | 运行直到 $finish 或断点 |
restart | 重置仿真到时间 0 |
step / step <N> | 单步(N 条语句) |
current_time | 返回当前仿真时间 |
add_force <signal> <value> [<time> <value>...] | 强制信号值(支持序列) |
remove_forces <signal> | 移除强制值 |
add_wave <signal> | 将信号添加到波形查看器 |
log_wave -r / | 将所有信号记录到 WDB(波形数据库) |
add_bp <file> <line> | 在源码行添加断点 |
add_bp -condition {<expr>} | 条件断点 |
remove_bp <id> | 移除断点 |
get_objects -r * | 列出所有对象(层次结构) |
get_value <signal> | 读取当前信号值 |
set_value <signal> <value> | 设置信号值(非持久) |
report_values | 报告所有信号值 |
add_force 示例
# 恒定强制
add_force clk 0
# 时钟模式:0 在 0ns,1 在 5ns,每 10ns 重复
add_force clk {0} {1 5ns} -repeat_every 10ns
# 复位脉冲:1 在 0ns,0 在 100ns
add_force rst {1} {0 100ns}
# 带进制
add_force -radix hex data_in 0xFF
时序仿真(实现后)
网表生成
# 综合后功能网表
open_checkpoint post_synth.dcp
write_verilog -mode funcsim -force post_synth_func.v
# 实现后时序网表 + SDF
open_checkpoint post_route.dcp
write_verilog -mode timesim -sdf_anno true -force post_impl_timing.v
write_sdf -force post_impl_timing.sdf
# VHDL 变体
write_vhdl -mode funcsim -force post_synth_func.vhd
write_verilog -mode 选项
| 模式 | 目的 |
|---|
funcsim | 功能仿真网表(无时序) |
timesim | 时序仿真网表(带 SDF 反标注) |
design | 设计网表(非仿真) |
synth_stub | 综合桩(用于 OOC) |
pin_planning | I/O 引脚规划 |
SDF 反标注
xelab 在 write_verilog 使用 -sdf_anno true 时自动处理 SDF:
# xelab 当时序仿真网表
exec xelab -debug typical tb_top glbl \
-transport_int_delays \
-pulse_r 0 -pulse_e 0 \
-s timing_sim_snap
手动 SDF 指定:
exec xelab -debug typical tb_top glbl \
-sdfroot /tb_top/uut \
-transport_int_delays \
-pulse_r 0 -pulse_e 0 \
-s timing_sim_snap
工艺角选择
write_sdf -process_corner fast -force fast_corner.sdf ;# 最佳情况
write_sdf -process_corner slow -force slow_corner.sdf ;# 最差情况(默认)
glbl.v 要求
| 阶段 | 需要 glbl.v? | 原因 |
|---|
| 行为 | 仅当使用 MMCM/PLL/GT 原语 | 全局置位/复位信号 |
| 综合后 | 是 | 网表引用全局信号 |
| 时序仿真 | 必需 | SDF 反标注依赖它 |
路径:$XILINX_VIVADO/data/verilog/src/glbl.v
# 在编译和 Elaborate 中包含 glbl.v
exec xvlog $::env(XILINX_VIVADO)/data/verilog/src/glbl.v
exec xelab tb_top glbl -debug typical -s sim_snap
第三方仿真器集成
支持的仿真器
| 仿真器 | -simulator 值 | 供应商 |
|---|
| Questa Advanced Simulator | questa | Siemens EDA |
| ModelSim | modelsim | Siemens EDA |
| VCS | vcs | Synopsys |
| Xcelium | xcelium | Cadence |
| Riviera-PRO | riviera | Aldec |
| Active-HDL | activehdl | Aldec |
步骤 1:编译仿真库(一次性)
compile_simlib -simulator questa -directory /path/to/compiled_libs \
-family all -language all
步骤 2:设置目标仿真器
set_property target_simulator Questa [current_project]
# 或:ModelSim, VCS, Xcelium, Riviera, ActiveHDL
步骤 3:导出仿真脚本
# 选项 A:export_simulation(灵活,支持非工程模式)
export_simulation -simulator questa -directory ./sim_scripts \
-use_ip_compiled_libs
# 选项 B:launch_simulation -scripts_only(仅工程模式)
launch_simulation -scripts_only
export_simulation vs launch_simulation -scripts_only
| 特性 | export_simulation | launch_simulation -scripts_only |
|---|
| 自定义输出目录 | 是 | 项目默认 |
| 非工程模式 | 是 | 否 |
| IP 编译库 | -use_ip_compiled_libs | 自动 |
| 所有仿真类型 | 是 | 当前模式仅 |
SAIF/VCD 功耗仿真
SAIF 收集(推荐用于 report_power)
# 仿真期间(xsim)
open_saif /path/to/output.saif
log_saif [get_objects -r *] ;# 或特定层次结构
run 1000ns
close_saif
# 功耗分析
open_checkpoint post_route.dcp
read_saif /path/to/output.saif
report_power -file power.rpt
VCD 收集
open_vcd /path/to/output.vcd
log_vcd [get_objects -r *]
run 1000ns
close_vcd
SAIF vs VCD
| 特性 | SAIF | VCD |
|---|
| 文件大小 | 小(统计摘要) | 大(完整波形) |
| report_power 支持 | 直接 read_saif | 需要转换 |
| 最佳用于 | Vivado 功耗分析 | 第三方工具/波形查看 |
| 推荐 | 是(用于功耗) | 需要波形时 |
仿真属性快速参考
# 运行时
set_property -name {xsim.simulate.runtime} -value {1000ns} -objects [get_filesets sim_1]
# 记录所有信号
set_property -name {xsim.simulate.log_all_signals} -value {true} -objects [get_filesets sim_1]
# 调试级别:typical | all | off
set_property -name {xsim.elaborate.debug_level} -value {typical} -objects [get_filesets sim_1]
# 额外 xsim 选项
set_property -name {xsim.simulate.xsim.more_options} -value {-testplusarg FAST} -objects [get_filesets sim_1]
# 额外 xelab 选项
set_property -name {xsim.elaborate.xelab.more_options} -value {-mt 4} -objects [get_filesets sim_1]
# 波形数据库文件
set_property -name {xsim.simulate.wdb} -value {my_sim.wdb} -objects [get_filesets sim_1]
# 目标仿真器
set_property target_simulator Questa [current_project]
仿真文件集管理
# 添加仿真源
add_files -fileset sim_1 tb_top.v
# 设置顶层模块
set_property top tb_top [get_filesets sim_1]
# 设置顶层库
set_property top_lib work [get_filesets sim_1]
# 创建额外仿真文件集
create_fileset -simset sim_2
语言支持
| 语言 | 标准 | xsim 支持 |
|---|
| Verilog | IEEE 1364-2001/2005 | 完整 |
| SystemVerilog | IEEE 1800-2012(部分 2017) | 完整 |
| VHDL | IEEE 1076-1993/2008 | 完整 |
| 混合语言 | Verilog/SV + VHDL | 支持 |