跳转到主要内容

FPGA仿真环境搭建与使用技巧(III)

作者:Warren Huang,文章来源:FPGA FAE技术分享选集

一、TCL 的介绍

TCL 脚本自 20 世纪 80 年代诞生以来已经有 30 多年历史,被 IC 领域广泛使用。

在 Vivado 中,我们在图形界面下执行的操作都有对应的 Tcl 命令。Vivado 不仅支持 Project 模式,也支持 Non-Project 模式。在 Project 模式下,可以使用钩子脚本,用于在设计的指定阶段定制报告、根据设计流程修改时序约束和修改网表。

如下图中的 tcl.pre、tcl.post 指定钩子脚本:

我们最常用的模式是 Project 模式,下面就以 Project 模式演示自动编译脚本。

二、脚本演示

以 Windows 环境为例,我们基于 UG835,使用 bat 调用 TCL 脚本。

在执行脚本时,任意一个工程,将脚本放在 xpr 同一级目录下,双击 bat 脚本,即可自动跑 TCL 脚本。

1. run.bat

如果不想打开 VIVADO GUI,则修改第二行为:

@D:\vivado202502\2025.2\Vivado\bin\vivado.bat -mode batch -source run_my.tcl

2. 脚本执行流程

整体分为四个阶段:

  1. 准备阶段:

     自动查找xpr并打开Vivado工程→清理旧日志→创建output目录→解析xpr识别综合版本与策略→删除历史综合,防止冲突或残留配置→导出工程Tcl&源文件列表、导出 filelist,供工程传递和仿真用。

  2. 编译阶段:删除默认

    synth_1 → 根据版本执行综合 & 实现 → 综合 & 实现时间统计。

  3. 报告生成:打开实现结果并生成报告

     → 自动检查时序违例 → 详细时序分析 → 提取 WNS / WHS(最差时序)→ 功耗报告等。

  4. 查看报告:如果时序通过,将打包好的工程和

     filelist 文件移交给验证人员做仿真验证。

3. run_my.tcl 完整内容

① 自动查找并打开 Vivado 工程

② 清理旧的日志与 Jou 文件

③ 创建 output 文件夹

④ 解析工程 XML,识别综合版本与策略

⑤ 删除历史综合运行

⑥ 导出工程 Tcl & 源文件列表

注意:
如果使用 reset_project 重置当前项目,会把项目重置为初始状态,清除在综合、实现和 write_bitstream 过程中创建的所有输出文件。但是它会清理所有的 IP 和缓存,如果是大工程的话,清理完后,第一次重新编译需要花费更多的时间。
而 reset_project -exclude ip 可复位整个项目,但不会清理 IP 目录下的文件。

4. 编译阶段

5. 报告生成

打开实现结果并生成报告 → 自动检查时序违例 → 详细时序分析 → 提取 WNS / WHS(最差时序)。

① 功耗、时钟、资源报告

③ 详细时序分析

④ 提取 WNS / WHS(最差时序)

三、查看报告

如果时序通过,将打包好的工程和 filelist 文件移交给验证人员做仿真验证。

四、拓展

我们也可以定制脚本,从时序报告文件中提取我们关心的信息。如下是在 Linux 系统下简单的自定义报告脚本,仅作演示。

大家也可以使用 AI 工具自定义编译报告,也可以接入 git、svn 仓库,在集群上定时并行跑多个综合实现策略,做时序探索。

推荐阅读:

  • Vivado

     UG835

  • Vivado

     Project 模式与 Non-Project 模式

  • Tcl

     脚本在 IC 领域的应用