在我们使用Xilinx Vivado 创建工程时, 通常会使用GUI mode模式创建工程。在创建好的工程中添加源文件,IP 核, 约束文件等等。这是我们经常使用的模式。 但是随着功能的不断增加,整个工程的会变得非常大。由于IP 核会产生大量的binary 文件,在某些大型项目中,整个工程可能达到几百兆到1G。 对于当前的硬盘来说,也是可以承受的。 但是,
- 如果是多人在不同的城市共同开发一个项目时,通常会使用git 来管理整个项目,而使用git clone项目会需要大量的时间,甚至不能clone工程;
- 有时会远程管理或者编译项目时,图像界面会增加网络的传输带宽,不利于远程访问。这些情况下就需要使用tcl 命令来创建工程。
在项目开发中,有两组方式组织工程:
- GUI 模式创建工程, 然后将整个工程打包,上传,下载,或者分发给其他的开发者。优点是操作简单,直观,不需要其他学习就可以管理项目。缺点是项目比较大。不利于使用git 工具对版本追踪。 通常在一些中小型项目中使用。(开发人员少, 开发环境比较集中)
- script模式创建工程, 就是使用Tcl 命令组织工程。 优点是工程比较小,基本上都是文本文件或者是说明文档(二进制文件比较少),有利于git 上传,下载,有利于远程维护。缺点是需要学习相关的知识创建脚本工程(script project)。在中大型项目中使用,开发人员比较多,开发地点分散,需要大量的时间精力用于版本维护,远程调试等。
本文将对使用Tcl命令创建脚本工程进行讲解(script project)。
1. 开发环境:
本文中使用的是Vivado 2018.2 版本,其他的版本与之类似,但也要注意, Xilinx 公司的Vivado 不同的版本, script 工程可能有所不同,有时需要修改。这一点不如gui 模式下的工程 容易管理。
在Vivado 2018.2 软件安装时,需要安装Vivado2018.2 和SDK 2018.2 (在script 工程中使用了make ,rm 等命令),这样生成的script 脚本工程可以在windows 环境下,或者是linux 环境下使用了。
2. script 工程目录结构
- 创建一个uart_scripts 目录
用户也可以根据自己的工程需要更改这个目录名称
- 在uart_scripts 目录下创建以下几个目录,用于存放不同的文件:

图1
constraints 目录: 用于存放xdc 文件

图2
docs目录 :用于存放和项目相关的文档,包括docx文件,原理图,说明文件等等。
ip_cores目录:用于存放xci文件。 xci 文件是由 ip 核所生成的

图3
prj_scripts目录:srcipt 脚本文件存放在这个目录下,本文主要对这个目录下的文件做详细介绍。

图4
sim_scripts目录:仿真脚本文件存放在这个目录下, 在这个目录下, 可以创建多个子目录,用于不同的test case 仿真。仿真工程也是通过script 脚本方式实现的。

图5
src目录:所有的原文件存放在这个目录下

图6
tb目录:所有的testbench 文件放在这个目录下

图7
.gitignore:script 脚本工程通常配合git 使用,在使用git 工具维护工程时,就需要告诉git server 那些文件是临时文件、目录,或者是不需要上传到git server 的文件,目录。 这些不需要上传的文件,目录都记录在这个文件中。

图8
用户可以根据自己项目的需要,更改这个文件中的工程目录,或者是mcs 文件的输出目录。这两个目录在git push 命令中不被上传的git server 上。
readme.txt:通常是整个工程的说明文件,用户可以根据需要自行编写。
环境需求: vivado 2018.2 sdk 2018.2 脚本工程操作步骤: 1) 进入prj_scripts 目录 2) 双击 “cmd_Vivado 2018.2" 图标 3) make create_prj 4) make compile_prj 5) make create_mcs clean 工程: make clean 帮助: make
3 创建script 工程脚本
- 进入prj_scripts 目录

图9
- cmd_Vivado 2018.2 :
执行script 脚本工程所需要的的命令窗口(termial)。 这里,我们假设Xilinx Vivado 安装在 c:\Xilinx 目录下。 如果用户的Vivado 没有安装在这个目录,需要右键点击cmd_Vivado 2018.2 这个图标,修改为用户计算机下的安装目录:

图10
- common_settings.tcl:
这个文件中定义了很多和script脚本相关的信息,这些信息可能会在多个tcl 文件中使用,其他的tcl文件可以使用 source commont_settings.tcl 来调用这个文件中的信息。这有点像 c 语言中的 h 文件(头文件) 一样。

图11
当用户需要创建自己的工程时, 只需要修改:
1)set proj_name UART_PRJ 这里我们定义的工程名称为UART_PRJ , 用户可以根据自己工程需要进行更改。
2)set fpga_part_num “xc7a100tfgg676-2” 当前我们使用的FPGA 型号为xc7a100tfgg676-2, 用户可以根据需要进行更改。
如果用户不知道如何填写型号,可以根据列表寻找:

图12

图13
- create_prj.tcl:
用于创建这个工程目录,同时生成*.xpr Vivado 工程文件。

图14
用户需要的修改:
-
- 添加工程所需要源文件 包括 verilog 或者 vhdl 文件
- 添加工程所需要的testbench 文件
- 指定仿真工程中的顶层文件
- 指定项目的顶层文件
- 添加项目所需要的IP 核 文件
- 添加项目所需要的xdc 文件
- 指定工程的所使用的语言
在scripts 目录下终端窗口中使用 make create_prj 执行创建工程的操作。

图15
- compile_prj.tcl:
这个脚本文件用来编译 刚刚创建的工程。 在GUI 模式下, 我们可以进入工程目录,双击*.xpr 进入gmi 界面,使用图形界面进行编译。 但是在远程操作中,使用script 脚本则更加方便。运行这个脚本,可以在不进入GUI 模式下, 编译整个工程,同时生成相应的bit 文件。一般情况下,这个脚本文件不需要用户修改。
在scripts 目录下终端窗口中使用 make compile_prj 执行创建工程的操作。

图16
- create_mcs.tcl:
这个脚本文件用来生成MCS 文件,在工程被成功编译后,会产生bit文件, 这个脚本将bit文件转换为MCS 文件。本工程中使用的是Micron SPI Nor Flash 以x4 模式生成MCS 文件。 用户可以根据自己开发板的需要,更改这个脚本文件。

图17
用户需要修改:
1)指定工程中所生成的bit文件,用户根据自己的项目,修改相关目录或者bit文件的名称。
2)指定MCS 文件输出的路径,以及输出的MCS 文件名称。缺省情况下输出的目录为mcs_files,输出的文件名,用户也可以自行更改。
3)选择硬件flash 的大小。 8 = 8M bytes
4)选择flash 接口模式:

图18
在scripts 目录下终端窗口中使用 make create_mcs 执行创建工程的操作。

图19
缺省输出目录为:

图20
- Makefile:
组织工程的文件,执行Makefile文件,需要安装make.exe。如果用户安装过SDK2018.2 ,那么就可以使用make命令了。用户可以通过命令which make 来确定make.exe 是否可以使用。

图21
执行:make 可以得到当前的工程列表。即那些make 命令可以使用。

图22
一般情况下,用户不需要修改这个文件。如果用户想增加新的make 命令可以根据下图进行修改:

图23
4. 执行 make 命令
当用户修改好工程后,可以执行以下操作,实现工程的创建,编译,输出等操作:
1)进入prj_scripts 目录
2)双击cmd_Vivado 2018.2
3)执行 make create_rpj
4)执行 make compile_prj
5)执行 make create_mcs
到此工程被完整的创建, 编译,并且输出了bit文件和mcs 文件了。

图24
附件中有一个GUI 模式下uart 工程文件 和一个scripts 模式下的工程文件。 作为例子,供用户参考。同时也可以用来验证相关的命令操作。
参考文章:
Xilinx ug835-vivado-tcl-commands pdf
Xilinx ug894-vivado-tcl-scripting pdf
[content_control]
GUI 模式下工程
script 模式下的工程
[/content_control]