Xilinx工程自动化:基于脚本的Vivado/Vitis快速配置与项目管理方案

发布于 2025-05-15  348 次阅读


1.前言

每次新建工程,我们都需要做很多繁琐但重复的配置,
如vivado需要添加用户IP路径,添加源文件,IP,blockdesign,结合外部软件仿真等
vitis需要导入源文件,添加头文件路径,链接外部库,设置编译选项,堆栈大小,launch选项等等各项配置,配置更加繁琐,少配一步都需要很多时间来debug找问题

同时,在编译稍大些的vivado工程后,整个项目会占用几百M甚至上G的硬盘容量,直接打包工程进行项目管理会非常占用空间,工程直接复制给其他人使用也非常麻烦,还会有各种路径依赖问题和bug

针对以上问题,我做了一个脚本小项目,该项目实现了工程与源文件分离,使用makefile、tcl、python脚本进行配置,集成vitis工程创建,vivado工程创建,编译运行,vivado结合外部软件仿真于一体。旨在最大化减小构建工程与重构工程时的繁琐程度。
例如,需要将自己的工程项目上传至github进行工程管理,与别人共享工程时,只需要将项目的源码文件和脚本文件上传,极大的节省了空间,给别人使用也只需一行简单的命令即可快速重建工程。

目前,整个项目还没有进行通用性测试,仅适用于我的个人工程配置,如仿真软件现仅适配VCS,vitis工程创建目前支持的版本只有2024.2(其他版本还没测试过),待暑假电赛结束,我会对项目做进一步的整理和修缮,提高整体的通用性后再开源出来

2.快速使用

工程的整体目录结构如下
Pasted image 20250515124130

2.1工程目录讲解

  • .Xil文件是工程创建过程中产生的中间文件
  • prj文件是由脚本自动创建的vivado工程
  • tcl文件是项目所包含的所有脚本,可以不用管,除非有其他的配置需求,需要阅读并修改脚本代码
  • usr文件内含有用户使用的所有源文件,用户在开发过程中使用的全部文件都在这里,包括bd文件(blockdesgin导出的tcl文件)、IP文件、src(verilog源文件)、src_vitis(vitis源文件,所有用户c语言代码全在该目录下),tb(添加的仿真文件),xdc(管脚约束文件)
  • vitis是脚本自动创建的vitis工程
  • sxa文件夹内包含了所有导出的.xsa文件

    2.2快速测试

删除自动创建的工程文件夹prjvitis
打开终端,输入make help,快速查找命令
Pasted image 20250515124926
根据测试要求,我们要创建vivado工程和vitis工程,并打开gui

2.2.1 vivado工程创建测试

vivado工程创建主要使用tcl脚本
参考make help,我们应该输入make set gui命令来创建并打开vivado工程
测试成功后的画面如下,vivado工程自动创建并打开
Pasted image 20250515125338

2.2.2 vitis工程创建测试

vitis工程创建主要使用python脚本(有一说一,python真好用)
参考make help,我们应该输入make setv guiv命令来创建并打开vitis工程
测试成功后的画面如下,vitis工程自动创建并打开,可见usr文件夹内的src_vitis文件夹被完整的导入工程中,同时也自动编译成功
Pasted image 20250515130102

3.如何创建自己的工程?

3.1vivado配置

3.1.1添加源文件

usr/ip文件夹内添加IP的xci文件,脚本会自动递归遍历 添加路径下的所有.xci后缀IP文件
Pasted image 20250515142946

usr/srcusr/tb文件夹内添加所有要用到的源文件和仿真文件,如下所示,脚本会自动递归遍历 添加路径下的所有.v.sv.vhd后缀源文件
Pasted image 20250515143148
Pasted image 20250515143225

usr/bd文件夹内添加blockdesign导出的tcl文件,创建工程后会自动复现原来的blockdesign
Pasted image 20250515142204
复现后效果
Pasted image 20250515142414
blockdesign导出方法,工程内打开blockdesign,点击File->Export->Export Block Design即可

usr/xdc文件夹内添加对应的管脚和时序约束文件
Pasted image 20250515143540

3.1.2makefile脚本配置

打开工程下的makefile文件
Pasted image 20250515140910
如上图所示,可以对项目的工程名,器件,顶层编译模块、顶层仿真模块、目标约束文件和用户IP路径 进行配置

其中工程名、器件选择和用户IP路径 必须在vivado工程创建前就设置好

顶层编译模块和目标约束文件在需要自动编译下载工程时设置,顶层仿真模块在需要仿真时设置

3.2vitis配置

3.2.1添加源文件

将需要的c文件添加到usr/src_vitis文件夹下,vitis创建工程时会将整个src_vitis文件全部导入
Pasted image 20250515144451

3.2.2makefile脚本配置

打开工程下的makefile文件
Pasted image 20250515141319
vitis可配置参数较多,

  • vitis_spacename:工作区名字,该参数决定vitis工程文件夹的名字,以满足需要建立不同工作区的需求
  • platform_name:platform名称
  • app_name:app名称
  • xsa_dir:xsa文件路径
  • stack_size:栈大小设置
  • heap_size:堆大小设置
  • template:创建app工程时使用的内置模板,默认empty_application(空工程)
  • user_link_libraries:需要链接的外部库,本例链接了c语言math标准库和之前移植好的fftw静态库(fftw移植教程详见vitis2024移植FFTW库)
  • inlude_dir:添加c语言头文件的路径

    4.注意事项

    创建vitis工程时的注意事项

  • 第一次创建会有点慢,因为要对platfom和app进行一次编译,后续如果创建另外的app,脚本会判断是否已经创建过platform,若已经创建过,则只编译一次新创建的app,速度会快很多。
  • 若已经创建了一次app,后续还要再创建另一个app,请记得在makefile脚本下修改app名,脚本会自动判断两次的app工程名是否相同,若相同则报错退出,这么做为了防止手残或者忘记在makefile脚本中更改需要配置的app名,因为每次新建app都会导入usr/src_vitis目录下的所有源文件,若手残不小心重新创建工程,那之前写的代码就都芜了。若确定需要创建并覆盖原来的app工程,请做好源码备份后手动删除工程文件夹后再创建。
最后更新于 2025-05-15