本文摘自《Vivado使用误区与进阶》,作者为Xilinx工具与方法学应用专家Ally Zhou。
上一篇《 Tcl 在 Vivado 中的应用》 介绍了 Tcl 的基本语法以及如何利用 Tcl 在 Vivado 中定位目标。其实 Tcl 在 Vivado 中还有很多延展应用,接下来我们就来讨论如何利用 Tcl 语言的灵活性和可扩展性,在 Vivado 中实现定制化的 FPGA 设计流程。
01
基本的FPGA设计实现流程
FPGA 的设计流程简单来讲,就是从源代码到比特流文件的实现过程。大体上跟 IC 设计流程类似,可以分为前端设计和后端设计。其中前端设计是把源代码综合为对应的门级网表的过程,而后端设计则是把门级网表布局布线到芯片上最终实现的过程。
以下两图分别表示 ISE 和 Vivado 的基本设计流程:
ISE 中设计实现的每一步都是相对独立的过程,数据模型各不相同,用户需要维护不同的输入文件,例如约束等,输出文件也不是标准网表格式,并且形式各异,导致整体运行时间过长,冗余文件较多。
Vivado 中则统一了约束格式和数据模型,在设计实现的任何一个阶段都支持 XDC 约束,可以生成时序报告,在每一步都能输出包含有网表、约束以及布局布线信息(如果有)的设计检查点(DCP)文件,大大缩短了运行时间。
从使用方式上来讲,Vivado 支持工程模式(Project Based Mode)和非工程模式(None Project Mode)两种,且都能通过 Tcl 脚本批处理运行,或是在 Vivado 图形化界面 IDE 中交互运行和调试。
工程模式
工程模式的关键优势在于可以通过在 Vivado 中创建工程的方式管理整个设计流程,包括工程文件的位置、阶段性关键报告的生成、重要数据的输出和存储等。
如下左图所示,用户建立了一个 Vivado 工程后,工具会自动创建相应的.xpr 工程文件,并在工程文件所在的位置同层创建相应的几个目录,包括.cache .data .runs和.srcs等等(不同版本可能有稍许差异),分别用于存储运行工程过程中产生的数据、输出的文件和报告以及工程的输入源文件(包含约束文件)等。
如下右图所示,在 Vivado IDE 中还可以一键式运行整个设计流程。这些预置的命令按钮就放置在工具最左边的侧栏:Flow Navigator 。不同按钮对应不同的实现过程,其中在后端实现阶段,还可以用右键调出详细分步命令,指引工具具体执行实现的哪一步。