Menu Close

Vivado 下使用Tcl 命令 创建工程

在我们使用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

用户需要的修改:

    1. 添加工程所需要源文件 包括 verilog 或者 vhdl 文件
    2. 添加工程所需要的testbench 文件
    3. 指定仿真工程中的顶层文件
    4. 指定项目的顶层文件
    5. 添加项目所需要的IP 核 文件
    6. 添加项目所需要的xdc 文件
    7. 指定工程的所使用的语言

在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 模式下工程

uart_txrx_2022_0211.zip

script 模式下的工程

uart_scripts_2022_0513.zip

[/content_control]

 

 

Posted in FPGA, FPGA 教材教案, Verilog, 教材与教案, 文章

发表回复

相关链接