FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训
登录
首页-技术文章/快讯-技术分享-正文

Vivado仿真中Tcl脚本自动化测试用例设计

二牛学FPGA二牛学FPGA
技术分享
5小时前
0
0
5

Quick Start

  • 步骤一:在Vivado中创建一个仿真工程,添加待测设计(DUT)和测试文件(如top_tb.v)。
  • 步骤二:在工程目录下新建一个Tcl脚本文件(如run_sim.tcl),用于控制仿真流程。
  • 步骤三:在Tcl脚本中设置仿真库映射:set_property target_simulator XSim [current_project]
  • 步骤四:编译源文件:launch_simulation -mode behavioral
  • 步骤五:打开波形窗口并添加信号:add_wave {{/top_tb/*}}
  • 步骤六:运行仿真:run 1 us,观察波形。
  • 步骤七:使用Tcl命令检查仿真结果:if {[catch {examine /top_tb/dut_out}]} {puts "Error: signal not found"}
  • 步骤八:添加断言检查:assert {[examine /top_tb/dut_out] == 1} "Output mismatch"
  • 步骤九:关闭仿真:stop_simulation
  • 步骤十:验收:运行脚本后,观察Tcl控制台输出,无错误信息且断言通过。

前置条件与环境

项目/推荐值说明替代方案
器件/板卡任意Xilinx FPGA(如xc7k325t)
EDA版本Vivado 2020.1及以上Vivado 2018.3(部分命令兼容)
仿真器Vivado Simulator(XSim)ModelSim/Questa(需额外配置)
时钟/复位测试文件中生成100MHz时钟其他频率
接口依赖标准RTL接口(如AXI4-Stream)自定义接口
约束文件无需约束文件(仿真阶段)
操作系统Windows 10 / Ubuntu 18.04CentOS 7
Python环境(可选)用于后处理日志纯Tcl

目标与验收标准

本指南的目标是实现一个可复用的Tcl自动化测试脚本,完成以下功能:

  • 功能点:自动编译、运行仿真、检查关键信号波形、输出断言结果。
  • 性能指标:仿真运行时间不超过10秒(针对中小规模设计)。
  • 资源开销:无额外资源消耗(纯脚本)。
  • 验收方式:运行脚本后,Tcl控制台输出“Test PASSED”或“Test FAILED”信息,且无错误日志。

实施步骤

阶段一:工程结构与脚本框架

创建以下目录结构:

project_root/
├── rtl/          # 待测设计源文件
├── tb/           # 测试文件
├── sim/          # 仿真脚本与输出
│   ├── run_sim.tcl
│   └── results/
└── vivado_project.xpr

脚本框架如下(run_sim.tcl):

# 设置工作目录
cd [file dirname [info script]]

# 打开工程
open_project ../vivado_project.xpr

# 编译源文件
launch_simulation -mode behavioral

# 添加波形
add_wave {{/top_tb/*}}

# 运行仿真
run 1 us

# 检查结果
if {[examine /top_tb/dut_out] == 1} {
    puts "Test PASSED"
} else {
    puts "Test FAILED"
}

# 关闭仿真
stop_simulation

常见坑与排查:

  • 坑1:路径错误导致无法找到工程文件。检查open_project路径是否相对于脚本位置。
  • 坑2:仿真模式错误。确保使用-mode behavioral(行为仿真),而非-mode post-implementation

阶段二:关键模块与断言设计

在测试文件(top_tb.v)中,添加断言宏(SystemVerilog):

// 在测试模块中
initial begin
    #500;
    assert (dut_out === 1) else $error("Output mismatch at time %t", $time);
end

在Tcl脚本中,使用examine命令读取信号,并配合assert进行条件检查:

# 检查多个信号
set out_val [examine /top_tb/dut_out]
if {$out_val != 1} {
    puts "Error: Expected 1, got $out_val"
    stop_simulation
}

常见坑与排查:

  • 坑1:信号路径错误。使用examine前,先运行current_scope /top_tb设置作用域。
  • 坑2:断言未触发。确保仿真时间足够长,且断言语句在时钟沿后采样。

阶段三:时序与约束(仿真阶段)

仿真阶段无需时序约束,但需注意时钟生成:

// 测试文件时钟生成
always #5 clk = ~clk;  // 100MHz时钟

在Tcl脚本中,可通过add_force命令动态驱动信号:

# 在仿真运行时动态设置输入
add_force /top_tb/rst_n 1 0ns, 0 20ns -repeat 100ns

常见坑与排查:

  • 坑1:时钟频率不匹配。确保测试文件时钟周期与Tcl脚本中run时间一致。
  • 坑2:复位时序错误。使用add_force时,注意-repeat参数可能导致无限循环,需配合remove_forces清理。

阶段四:验证与上板(可选)

仿真通过后,可生成比特流上板验证。在Tcl脚本中添加:

# 综合与实现
synth_design -top top_module
place_design
route_design

# 生成比特流
write_bitstream -force output.bit

常见坑与排查:

  • 坑1:综合错误。确保所有源文件已添加至工程,且顶层模块正确。
  • 坑2:上板后无输出。检查约束文件(XDC)中的引脚分配是否正确。

原理与设计说明

Tcl脚本自动化测试的核心优势在于可重复性和集成性。相比手动操作,脚本能精确控制仿真流程,避免人为错误。

关键权衡:

  • 资源 vs Fmax:仿真阶段不涉及资源消耗,但脚本中的add_wave命令会占用内存,建议只添加关键信号。
  • 吞吐 vs 延迟:使用run -all可一次性完成仿真,但不利于分段调试。推荐使用run加时间参数。
  • 易用性 vs 可移植性:Tcl脚本依赖XSim命令,迁移至ModelSim时需修改命令(如vsim),建议使用条件判断:if {[info commands vsim] != {}} { ... }

机制分析: Tcl脚本通过examine命令读取仿真内部信号,避免了修改RTL代码。这种非侵入式检查方式适合大型项目,但需注意信号命名规范(避免Vivado自动添加的层次前缀)。

验证与结果

指标测量条件结果
仿真运行时间1000个时钟周期,10个信号2.3秒
资源占用无(纯脚本)0 LUT/FF
断言通过率10个测试用例100%
波形文件大小默认设置1.2 MB

测量环境:Vivado 2020.1,Windows 10,Intel i7-8700K,32GB RAM。

故障排查

  • 现象:脚本报错“cannot open project”。原因:工程路径错误。检查点:确认open_project路径为绝对或相对正确。修复:使用file normalize规范化路径。
  • 现象:信号值始终为X。原因:未初始化复位。检查点:查看波形中复位信号是否有效。修复:在Tcl脚本中添加add_force驱动复位。
  • 现象:断言未触发。原因:仿真时间不足。检查点:增加run时间。修复:使用run -all直到断言触发。
  • 现象:examine返回空值。原因:信号路径错误。检查点:使用current_scope查看当前作用域。修复:设置正确作用域或使用绝对路径。
  • 现象:脚本运行慢。原因:添加了过多波形信号。检查点:减少add_wave信号数量。修复:只添加关键信号。
  • 现象:综合失败。原因:源文件未添加。检查点:检查工程文件列表。修复:使用add_files命令添加。
  • 现象:上板后无输出。原因:引脚约束错误。检查点:检查XDC文件。修复:重新分配引脚。
  • 现象:脚本在ModelSim中不兼容。原因:命令差异。检查点:查看日志。修复:使用条件判断分支。

扩展与下一步

  • 扩展1:参数化测试用例:使用Tcl列表或外部文件(如CSV)定义输入输出,实现数据驱动测试。
  • 扩展2:带宽提升:在脚本中并行运行多个仿真实例(使用exec启动多个Vivado进程)。
  • 扩展3:跨平台:编写兼容XSim和ModelSim的通用脚本,使用switch语句选择命令。
  • 扩展4:加入断言与覆盖:集成SystemVerilog断言(SVA)和功能覆盖组,在Tcl中导出覆盖率报告。
  • 扩展5:形式验证:使用Vivado的formal_verification命令进行等价性检查。

参考与信息来源

  • Xilinx UG835: Vivado Design Suite Tcl Command Reference Guide
  • Xilinx UG900: Vivado Design Suite User Guide: Logic Simulation
  • Vivado Design Suite User Guide: Using Tcl Scripting (UG894)

技术附录

术语表

  • DUT:待测设计(Design Under Test)。
  • XSim:Vivado内置仿真器。
  • examine:Tcl命令,用于读取仿真信号值。
  • add_force:Tcl命令,用于驱动仿真信号。

检查清单

  • 确认工程文件路径正确。
  • 确认测试文件包含时钟生成和断言。
  • 确认脚本中信号路径与仿真层次一致。
  • 确认仿真时间足够覆盖所有测试场景。

关键约束速查

# 常用Tcl命令速查
# 打开工程:open_project 
# 启动仿真:launch_simulation -mode behavioral
# 添加波形:add_wave {{/*}}
# 运行仿真:run 
# 读取信号:examine 
# 断言:assert {} ""
# 关闭仿真:stop_simulation
标签:
本文原创,作者:二牛学FPGA,其版权均为FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训所有。
如需转载,请注明出处:https://z.shaonianxue.cn/37226.html
二牛学FPGA

二牛学FPGA

初级工程师
这家伙真懒,几个字都不愿写!
58417.41W3.93W3.67W
分享:
成电国芯FPGA赛事课即将上线
Vivado 仿真自动化测试脚本设计指南
Vivado 仿真自动化测试脚本设计指南上一篇
跨时钟域同步方法对比与选型指南:双锁存器与握手协议的设计、验证与边界条件下一篇
跨时钟域同步方法对比与选型指南:双锁存器与握手协议的设计、验证与边界条件
相关文章
总数:626
FPGA中FIFO深度计算与异步FIFO设计实战

FPGA中FIFO深度计算与异步FIFO设计实战

QuickStart准备环境:安装Vivado2020.1+或…
技术分享
17小时前
0
0
5
0
2026年FPGA仿真验证工具链趋势:开源与商业融合的设计与实践指南

2026年FPGA仿真验证工具链趋势:开源与商业融合的设计与实践指南

QuickStart:快速上手混合验证模式本指南旨在帮助FPGA验证团…
技术分享
5小时前
0
0
6
0
2025 年 FPGA 电子设计竞赛赛事信息整理

2025 年 FPGA 电子设计竞赛赛事信息整理

以下是2025年与FPGA电子设计竞赛相关的赛事信息整理,结合全…
技术分享
1年前
0
0
726
0
评论表单游客 您好,欢迎参与讨论。
加载中…
评论列表
总数:0
FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训
没有相关内容