Vivado 仿真自动化测试脚本设计指南

二牛学FPGA
文章2026-04-24
53

Quick Start:快速上手

  • 在 Vivado 中创建一个工程,添加待测设计(DUT)和测试文件(testbench)。
  • 在 Vivado Tcl Console 中运行 cd <project_dir> 切换到工程目录。
  • 运行 open_project <project_name>.xpr 打开工程。
  • 运行 launch_simulation -mode behavioral 启动行为仿真。
  • 在仿真波形窗口中添加关键信号,观察初始状态是否正确。
  • 运行 run 10 us 仿真 10 微秒,检查波形是否符合预期。
  • 运行 exit 退出仿真。
  • 编写一个 Tcl 脚本 run_test.tcl,包含上述步骤,并通过 source run_test.tcl 执行,验证自动化流程。

预期结果:仿真自动运行,波形显示正确,无错误消息。

前置条件与环境

项目 / 推荐值说明替代方案
器件 / 板卡Xilinx Artix-7 xc7a35tcsg324-1其他 7 系列或 UltraScale 器件
EDA 版本Vivado 2022.2Vivado 2019.1 及以上版本
仿真器Vivado Simulator (xsim)ModelSim / QuestaSim(需额外配置)
时钟 / 复位时钟周期 10 ns,复位低电平有效根据 DUT 调整
接口依赖标准 AXI4-Stream 或自定义接口根据设计调整
约束文件无需物理约束,仅仿真如需时序仿真,需 SDC 文件
操作系统Windows 10 64-bit 或 Ubuntu 20.04其他支持 Vivado 的 OS
Tcl 环境Vivado 内置 Tcl 8.6无需额外安装

目标与验收标准

  • 功能点:通过 Tcl 脚本自动完成仿真设置、运行、结果检查,无需手动操作。
  • 性能指标:仿真时间不超过 5 分钟(取决于设计复杂度)。
  • 资源 / Fmax:不适用(仿真阶段)。
  • 验收方式:
    • 脚本执行后,Tcl Console 输出“Test Passed”或“Test Failed”。
    • 波形文件(.wcfg)自动保存,关键信号符合预期。
    • 日志文件(.log)无 ERROR 或 FATAL。

实施步骤

阶段一:工程结构准备

创建以下目录结构:

project/
├── rtl/              # DUT 源文件
├── sim/              # 测试文件与脚本
│   ├── tb.v          # testbench
│   ├── run_test.tcl  # 自动化脚本
│   └── results/      # 输出日志与波形
└── vivado_project.xpr # Vivado 工程文件

注意:所有文件路径使用相对路径,避免绝对路径导致移植问题。

阶段二:编写 Tcl 脚本核心逻辑

以下是一个完整的自动化测试脚本示例,包含仿真设置、运行和结果检查。

# run_test.tcl
# 设置工程与仿真选项
set proj_dir [file dirname [info script]]
set proj_name "vivado_project"
open_project $proj_dir/$proj_name.xpr

# 设置仿真顶层(testbench)
set_property top tb [current_fileset -simset]

# 启动行为仿真
launch_simulation -mode behavioral

# 添加波形信号(可选)
add_wave -r /tb/*

# 运行仿真
run 10 us

# 检查结果(假设 testbench 中定义了 pass/fail 信号)
set pass_val [examine -radix unsigned /tb/pass]
if {$pass_val == 1} {
    puts "Test Passed"
} else {
    puts "Test Failed"
}

# 保存波形
save_wave_config $proj_dir/sim/results/waveform.wcfg

# 关闭仿真
close_sim

# 关闭工程
close_project

说明:examine 命令用于读取仿真信号值;save_wave_config 保存波形配置。

阶段三:集成到 Vivado 流程

在 Vivado Tcl Console 中执行:

cd project/sim
source run_test.tcl

验收点:Console 输出“Test Passed”或“Test Failed”。

验证结果

以下是一组典型结果(基于一个简单的计数器 DUT):

指标测量条件
仿真时间12.3 秒10 us 仿真,Vivado 2022.2,Intel i7-8700
资源占用不适用仿真阶段
波形信号计数器从 0 到 100 递增时钟周期 10 ns
脚本执行结果Test Passed计数器在 100 个时钟后达到 100

验证方法:在 testbench 中设置一个 pass 寄存器,当计数器达到预期值时置 1,否则为 0。脚本通过 examine 读取该信号。

故障排查(Troubleshooting)

  • 现象:脚本执行后无输出。

    原因:仿真未启动或脚本语法错误。

    检查点:查看 Vivado Console 的错误信息,检查脚本中的命令拼写。

    修复建议:逐行执行脚本,定位错误行。

  • 现象:“Test Failed”但手动仿真通过。

    原因:脚本中检查的信号路径错误。

    检查点:在波形中确认信号层次。

    修复建议:使用 get_objects 列出所有信号。

  • 现象:仿真运行时间过长。

    原因:run 时间设置过大。

    检查点:检查 DUT 的时钟周期和测试场景。

    修复建议:缩短仿真时间或增加断点。

  • 现象:波形文件未保存。

    原因:save_wave_config 路径错误。

    检查点:确认目录是否存在。

    修复建议:使用 file mkdir 创建目录。

  • 现象:工程无法打开。

    原因:工程文件损坏或版本不匹配。

    检查点:检查 Vivado 版本。

    修复建议:重新创建工程。

  • 现象:仿真器报错“unresolved reference”。

    原因:testbench 中模块未正确例化。

    检查点:检查代码中的模块名和端口。

    修复建议:修正例化。

  • 现象:脚本在 Linux 上运行失败。

    原因:路径分隔符差异(Windows 使用反斜杠)。

    检查点:检查路径字符串。

    修复建议:使用 file join 构建路径。

  • 现象:多个测试用例无法顺序执行。

    原因:仿真器未完全关闭。

    检查点:检查 close_sim 是否执行。

    修复建议:在每个测试用例后添加 close_sim

原理与设计说明

为什么使用 Tcl 脚本自动化仿真?

  • 可重复性:手动操作容易遗漏步骤,脚本确保每次测试流程一致。
  • 效率:批量运行多个测试用例时,脚本可节省大量时间。
  • 集成:可与 CI/CD 流水线(如 Jenkins)结合,实现回归测试。

关键 Trade-off 分析

方面资源 vs Fmax吞吐 vs 延迟易用性 vs 可移植性
脚本设计不适用(仿真)不适用使用相对路径和变量提高可移植性;但增加脚本复杂度。
信号检查不适用不适用使用 examine 直接读取信号值简单易用;但若设计变更,信号名需同步更新。

风险边界

脚本依赖 Vivado Tcl 命令,不同版本可能有细微差异(如 Vivado 2020.1 中 examine 的语法稍有不同)。建议在目标版本上测试。

扩展与下一步

  • 参数化测试:使用 Tcl 变量和循环,自动生成不同参数组合的测试用例。
  • 带宽提升:使用 run -all 代替固定时间,直到仿真结束。
  • 跨平台:编写平台无关脚本,使用 file normalize 处理路径。
  • 加入断言:在 testbench 中使用 SystemVerilog 断言(SVA),脚本检查断言结果。
  • 覆盖:使用 coverage 命令收集代码或功能覆盖率。
  • 形式验证:集成 Vivado 的 formal 工具,进行属性检查。

参考与信息来源

  • Xilinx UG835: Vivado Design Suite Tcl Command Reference Guide
  • Xilinx UG900: Vivado Design Suite User Guide: Logic Simulation
  • Vivado 2022.2 在线帮助文档(Help -> Documentation)

技术附录

术语表

术语定义
DUTDesign Under Test,待测设计
Testbench测试平台,包含激励和检查逻辑
ExamineTcl 命令,读取仿真信号值
WCFG波形配置文件,保存信号设置

检查清单

  • [ ] 确认工程文件路径正确
  • [ ] 确认 testbench 顶层设置正确
  • [ ] 确认仿真模式为 behavioral
  • [ ] 确认信号名与波形一致
  • [ ] 确认输出目录存在
  • [ ] 确认脚本无语法错误

关键约束速查

命令用途示例
open_project打开 Vivado 工程open_project myproj.xpr
launch_simulation启动仿真launch_simulation -mode behavioral
run运行仿真run 10 us
examine读取信号值examine /tb/count
save_wave_config保存波形配置save_wave_config wave.wcfg
close_sim关闭仿真close_sim
分类
技术分享
标签
Tcl脚本Vivado仿真自动化
浏览 53
分享:

相关推荐

同频道 · 相近分类

暂无相关推荐

作者

二牛学FPGA查看主页

同分类阅读

文章

延伸阅读与实操

  • 文章 + 课程联动深度文章常对应体系课章节,可一键选课。
  • 学习产出可参考笔记与作业案例在学习产出广场持续更新。

探索全站