在 FPGA 应用开发过程中,一些开发人员喜欢用自动管理其设计流程和设计数据的设计工具,而另一些开发人员更喜欢自己管理源文件和流程。Vivado 设计套件使用工程文件(.xpr)和目录结构来管理设计流程中的设计源文件、保存不同综合和实现运行的结果,以及跟踪工程的状态。这种对设计数据、过程和状态自动化管理需要一个工程基础设施。因此,Xilinx 将该流程模式称为工程模式(Project Mode)。
开发人员更喜欢像源文件编译一样运行 FPGA 设计过程,只需要简单地编译源文件、实现设计和报告结果。这种编译类型流程模式称为非工程模式(Non-Project Mode)。
这两种流程都使用工程结构来编译和管理设计。其主要区别在于非工程模式在内存中处理整个设计,没有文件写入磁盘,而工程模式在磁盘上创建并维护工程目录结构,以管理设计源文件、结果,以及工程的设置和状态。
Vivado 设计套件利用基于结构的工程来组装、实现和跟踪设计的状态,这称为工程模式。在工程模式下,Vivado工具会自动管理开发人员的设计流程和设计数据。
注: 工程模式的主要优势在于Vivado设计套件管理整个设计过程,包括依赖关系管理、生成报告、数据保存等。
在工程模式下工作时,Vivado 会在磁盘上创建一个目录结构,以便本地或远程管理设计源文件,并管理对源文件的修改和更新。
注: 某些操作系统(如 Microsoft 的 Windows)会限制可用于文件路径和文件名的字符数(如 256)。如果操作系统有这样的限制,建议开发人员创建更靠近驱动器根目录的工程,以便使路径和名字尽可能短。
工程基础设施还用于管理自动化的综合和实现运行,跟踪运行状态,并保存综合和实现结果与报告。例如:
(1)如果在综合后修改 HDL 源文件,Vivado 设计套件将当前的结果识别为过期,并提示开发人员重新综合。
(2)如果修改设计约束,Vivado工具会提示开发人员重新综合或/和实现。
(3)布线完成后,Vivado工具自动生成时序、DRC、方法和功耗报告。
(4)设计流程只需要在Vivado IDE中单击即可运行。
开发人员可以选择在内存中编译流程。在该编译流程中,开发人员自己管理源文件和设计流程,称为非工程模式。在非工程模式下,开发人员可以使用 Tcl 命令或脚本自己管理设计源文件和设计过程。关键的优势就是开发人员可以完全控制流程的每一步。
在非工程模式下工作时,将从源文件当前的位置读取它们,如从修订控制系统,并通过内存中的流程编译设计。开发人员可以使用 Tcl 命令单独运行每个设计步骤。开发人员还可以使用Tcl命令设置设计参数和实现选项。
在设计过程中的任何阶段,开发人员可以保存设计检查点并创建报告。开发人员可以定制每个实现步骤以满足特定的设计挑战,并且开发人员可以在每个设计步骤后分析结果。此外,开发人员可以在任何使用中打开Vivado IDE进行设计分析和约束分配。
在非工程模式下,每个设计步骤都使用Tcl命令进行控制。例如:
(1)如果在综合后修改 HDL 文件,开发人员必须记住重新运行综合以更新内存中的网表。
(2)如果要在布线后生成时序报告,开发人员必须在布线完成时明确生成时序报告。
(3)使用Tcl命令和参数设置设计参数与实现选项。
(4)开发人员可以使用Tcl在设计过程的任何阶段保存DCP并创建报告。
随着设计流程的进展,Vivado设计套件将保留设计的表现形式。
在工程模式下,Vivado IDE 跟踪设计历史,保存相关的设计信息。然而,由于许多功能是自动化的,因此在默认的流程中,设计者很少能控制处理的过程。例如,在每次运行时,只是生成一组标准的报告文件。但是,通过 Tcl 命令或脚本,开发人员可以在工程模式下自定义工具的流程和功能。
在工程模式下,提供了下面的自动处理功能:
(1)开箱即用(Out of the Box,OOB)的设计流程。
(2)易于使用,按钮式界面。
(3)用于定制的强大的Tcl脚本语言。
(4)源文件的管理和状态。
(5)自动生成标准的报告。
(6)工具设置与设计配置的保存和重用。
(7)多个综合和实现运行的试验。
(8)运行结果的管理和状态。
非工程模式更像是一种编译方法。在这种方法中,通过 Tcl 命令,开发人员可以完全控制执行的每个行为。这是一个完全可定制的设计流程,适合于正在寻找控制和批量处理的特定开发人员。所有的处理都是在内存中完成的,因此不会自动生成文件或者报告。当开发人员每次对设计进行编译时,他们都必须定义所有的源文件,设置所有工具,设计配置参数,启动所有的实现命令,以及生成报告文件。这可以使用 Tcl 运行脚本来完成,因为工程不是在磁盘上创建的,源文件保留在其最初的位置,并且只有在指定的时间和位置创建设计输出。这种方法给开发人员提供了 Tc l 命令的所有功能,并可以完全控制整个设计过程。
表2.1给出了工程模式和非工程模式特性的比较。
表2.1 工程模式和非工程模式特性的比较
Tcl 命令因使用的模式不同而有所区别,并且在每个模式下的最终Tcl 运行脚本也不同。在非工程模式下,所有操作和工具设置都要求单独的 Tcl 命令,包括设置工具选项、运行实现命令、产生报告和写入设计检查点。在工程模式下,打包过的命令用于每个综合、实现和报告命令。
例如,在工程模式下,设计者使用 add_files Tcl命令将源文件添加到工程中用于管理。可以将源文件复制到工程中,这样在工程目录结构中维护一个单独的版本,也可以通过远程引用。在非工程模式下,开发人员使用read_verilog、read_vhdl、read_xdc和read_*Tcl命令从当前的位置读取不同类型的源文件。
在工程模式下,launch_run 命令启动具有预配置运行策略的工具,并生成标准报告。开发人员可以在设计过程中的每一步之前或者之后运行定制的 Tcl 命令。在工程中自动保存和管理运行结果。在非工程模式下,必须运行每个命令。例如,opt_design、place_design和route_design。
很多 Tcl 命令可以用于其中的一种模式,如报告命令。在一些情况下,Tcl 命令特定于工程模式或非工程模式。当创建脚本时,特定为一个模式的命令不能混用。例如,如果使用了工程模式,开发人员就不能使用诸如 synth_design 之类的命令,因为这些命令特定于非工程模式。如果在工程模式下使用了非工程模式的命令,则不会使用状态信息更新数据库,也不会自动生成报告。
图2.1给出了工程模式和非工程模式下的命令列表。
图2.1 工程模式和非工程模式下的命令列表
注: 工程模式包含所有的 GUI 操作,这样导致在绝大多数情况下都会执行 Tcl 命令。Tcl命令显示在 Vivado IDE 的 Console(控制台)中,也捕获在 vivado.jou 文件中。设计者可以使用这个文件开发用于其中一种模式的脚本。