作者: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. 脚本执行流程
整体分为四个阶段:
准备阶段:
自动查找xpr并打开Vivado工程→清理旧日志→创建output目录→解析xpr识别综合版本与策略→删除历史综合,防止冲突或残留配置→导出工程Tcl&源文件列表、导出 filelist,供工程传递和仿真用。
编译阶段:删除默认
synth_1→ 根据版本执行综合 & 实现 → 综合 & 实现时间统计。报告生成:打开实现结果并生成报告
→ 自动检查时序违例 → 详细时序分析 → 提取 WNS / WHS(最差时序)→ 功耗报告等。
查看报告:如果时序通过,将打包好的工程和
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 领域的应用