3、Vitis工程创建与管理:创建应用工程、创建平台工程、理解系统项目结构、源文件管理(HLS/C/RTL)
好,咱们今天聊聊Vitis工程怎么创建和管理。说实话,很多初学者一上来就被Vitis的工程结构搞懵了——什么平台工程、应用工程,还有一堆配置文件。别急,我带你捋一遍。
3.1 先搞懂:平台工程 vs 应用工程
Vitis的工程体系,说白了就是「硬件平台」+「软件应用」两层。你想想看,就像做一台手机——硬件平台是主板、芯片、接口,软件应用是上面的App。两者分开开发,最后再合在一起。
平台工程(Platform Project):描述硬件资源。包括PS(处理系统)配置、PL(可编程逻辑)的IP核、时钟、复位、DDR、MIG等等。说白了,就是告诉Vitis:「我的板子上有什么硬件可用」。
应用工程(Application Project):跑在平台上的软件。可以是裸机程序、FreeRTOS、Linux应用,甚至HLS加速器。它依赖平台提供的接口和驱动。
核心关系:一个平台工程可以被多个应用工程引用。我在项目中经常这样做——同一个硬件平台,同时跑一个控制程序和一个图像处理程序,互不干扰。
3.2 创建平台工程:从硬件描述文件开始
创建平台工程,通常从XSA文件开始。XSA是Vivado导出的硬件描述文件,包含了PS配置、PL的IP核、地址映射等信息。
步骤简述:
- 在Vitis中点击
File → New → Platform Project - 输入工程名,比如
my_platform - 选择
Create from hardware specification (XSA) - 指定XSA文件路径
- 选择操作系统(standalone、freertos、linux)
- 点击Finish
我的习惯:XSA文件最好放在工程目录下的 hw 文件夹里,方便版本管理。我曾经因为XSA文件路径变动,导致整个团队编译不过,折腾了半天。
创建完成后,你会看到平台工程的结构:
my_platform/
├── hw/ # 硬件描述文件
│ └── design.xsa
├── sw/ # 软件驱动和BSP
│ ├── standalone/
│ └── freertos/
├── platform.spr # 平台描述文件
└── ...
3.3 创建应用工程:把软件跑在平台上
平台工程建好了,接下来就是写应用。创建应用工程很简单:
- 右键点击平台工程 →
New → Application Project - 输入应用名,比如
hello_world_app - 选择依赖的平台(就是刚才建的
my_platform) - 选择模板(Hello World、Empty Application、DMA等)
- 点击Finish
嗯,这里要注意:模板只是帮你生成初始代码,别指望它一步到位。我一般选Empty Application,自己从头写,心里踏实。
3.4 理解系统项目结构
Vitis里有个概念叫「系统项目(System Project)」。它其实是一个容器,把平台工程和应用工程打包在一起。当你创建应用工程时,Vitis会自动生成一个系统项目。
系统项目的结构长这样:
my_system/
├── my_platform/ # 平台工程
│ ├── hw/
│ └── sw/
├── hello_world_app/ # 应用工程
│ ├── src/
│ ├── debug/
│ └── ...
├── system.hdf # 系统硬件描述
└── ...
避坑指南:我曾经不小心删了系统项目里的 system.hdf 文件,结果整个工程打不开。这个文件是Vitis识别硬件配置的关键,千万别手滑。
为什么要有系统项目?因为一个硬件平台可能跑多个应用。比如:
- 一个应用做数据采集(C语言写的裸机程序)
- 一个应用做图像处理(HLS生成的加速器)
- 一个应用做网络通信(Linux应用)
它们共享同一个平台,但各自独立编译、调试。系统项目就是管理这种「一对多」关系的。
3.5 源文件管理:HLS / C / RTL 的混搭
Vitis最强大的地方,就是能同时管理三种类型的源文件:
| 类型 | 扩展名 | 用途 | 我的建议 |
|---|---|---|---|
| C/C++ | .c, .cpp, .h | 主控程序、驱动、算法 | 放在 src/ 目录下 |
| HLS | .cpp (带pragma) | 硬件加速函数 | 单独建 hls/ 文件夹 |
| RTL | .v, .sv, .vhd | 自定义硬件模块 | 放在 rtl/ 目录下 |
源文件管理原则:
- 按功能分文件夹:别把所有文件堆在根目录。我习惯建
src/、hls/、rtl/、include/四个文件夹。 - 头文件统一管理:所有
.h文件放include/,并在工程设置里添加包含路径。 - HLS源文件单独处理:HLS代码虽然也是C++,但里面全是
#pragma HLS指令。我建议单独建一个HLS工程来开发和仿真,等验证通过后再复制到Vitis应用工程里。 - RTL文件要加约束:如果用了自定义RTL模块,记得在Vivado里添加XDC约束文件,否则综合时会报错。
我的经验:有一次我把HLS源文件和C源文件混在一起,结果Vitis把HLS函数当普通C函数编译,报了一堆语法错误。后来我强制把HLS文件标记为「HLS source」,问题解决。具体操作:右键文件 → Properties → File Type → HLS Source。
3.6 实战:一个简单的软硬件协同工程
咱们来搭一个最小系统:
- 创建平台工程
my_platform,导入XSA文件 - 创建应用工程
led_control,选择Empty Application - 在
src/下新建main.c,写一个GPIO控制LED的裸机程序 - 在
hls/下新建adder.cpp,写一个简单的加法器HLS函数 - 在
rtl/下新建counter.v,写一个计数器模块 - 在工程设置里,把
adder.cpp标记为HLS源文件,把counter.v添加到硬件描述
编译、下载、运行。你会发现:C代码控制LED闪烁,HLS加速器做加法运算,RTL计数器在后台默默计数。这就是软硬件协同开发的基本形态。
核心要点:Vitis工程管理的本质,就是把不同语言、不同工具链的源文件组织在一起,让它们协同工作。你不需要关心底层编译细节,只需要把文件放对位置、设置好属性。
3.7 本章小结
创建Vitis工程,说白了就是三步:建平台、建应用、管理源文件。平台工程描述硬件,应用工程实现功能,源文件管理决定项目是否整洁。我个人建议:
- 平台工程只建一次,后续复用
- 应用工程按功能拆分,不要一个工程塞所有代码
- 源文件分类存放,HLS和RTL单独管理
做到这三点,你的Vitis工程就不会乱成一锅粥。
可可精品资料库