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核、地址映射等信息。

步骤简述:

  1. 在Vitis中点击 File → New → Platform Project
  2. 输入工程名,比如 my_platform
  3. 选择 Create from hardware specification (XSA)
  4. 指定XSA文件路径
  5. 选择操作系统(standalone、freertos、linux)
  6. 点击Finish

我的习惯:XSA文件最好放在工程目录下的 hw 文件夹里,方便版本管理。我曾经因为XSA文件路径变动,导致整个团队编译不过,折腾了半天。

创建完成后,你会看到平台工程的结构:

my_platform/
├── hw/                  # 硬件描述文件
│   └── design.xsa
├── sw/                  # 软件驱动和BSP
│   ├── standalone/
│   └── freertos/
├── platform.spr         # 平台描述文件
└── ...

3.3 创建应用工程:把软件跑在平台上

平台工程建好了,接下来就是写应用。创建应用工程很简单:

  1. 右键点击平台工程 → New → Application Project
  2. 输入应用名,比如 hello_world_app
  3. 选择依赖的平台(就是刚才建的 my_platform)
  4. 选择模板(Hello World、Empty Application、DMA等)
  5. 点击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/ 目录下

源文件管理原则:

  1. 按功能分文件夹:别把所有文件堆在根目录。我习惯建 src/、hls/、rtl/、include/ 四个文件夹。
  2. 头文件统一管理:所有 .h 文件放 include/,并在工程设置里添加包含路径。
  3. HLS源文件单独处理:HLS代码虽然也是C++,但里面全是 #pragma HLS 指令。我建议单独建一个HLS工程来开发和仿真,等验证通过后再复制到Vitis应用工程里。
  4. RTL文件要加约束:如果用了自定义RTL模块,记得在Vivado里添加XDC约束文件,否则综合时会报错。

我的经验:有一次我把HLS源文件和C源文件混在一起,结果Vitis把HLS函数当普通C函数编译,报了一堆语法错误。后来我强制把HLS文件标记为「HLS source」,问题解决。具体操作:右键文件 → Properties → File Type → HLS Source。

3.6 实战:一个简单的软硬件协同工程

咱们来搭一个最小系统:

  1. 创建平台工程 my_platform,导入XSA文件
  2. 创建应用工程 led_control,选择Empty Application
  3. 在 src/ 下新建 main.c,写一个GPIO控制LED的裸机程序
  4. 在 hls/ 下新建 adder.cpp,写一个简单的加法器HLS函数
  5. 在 rtl/ 下新建 counter.v,写一个计数器模块
  6. 在工程设置里,把 adder.cpp 标记为HLS源文件,把 counter.v 添加到硬件描述

编译、下载、运行。你会发现:C代码控制LED闪烁,HLS加速器做加法运算,RTL计数器在后台默默计数。这就是软硬件协同开发的基本形态。

核心要点:Vitis工程管理的本质,就是把不同语言、不同工具链的源文件组织在一起,让它们协同工作。你不需要关心底层编译细节,只需要把文件放对位置、设置好属性。

3.7 本章小结

创建Vitis工程,说白了就是三步:建平台、建应用、管理源文件。平台工程描述硬件,应用工程实现功能,源文件管理决定项目是否整洁。我个人建议:

  • 平台工程只建一次,后续复用
  • 应用工程按功能拆分,不要一个工程塞所有代码
  • 源文件分类存放,HLS和RTL单独管理

做到这三点,你的Vitis工程就不会乱成一锅粥。

Vitis工程结构图 系统项目 (System Project) 平台工程 hw/ (XSA硬件描述) sw/ (BSP、驱动、操作系统) platform.spr (平台描述) 应用工程 src/ (C/C++主控程序) hls/ (HLS加速器源文件) rtl/ (Verilog/VHDL模块) include/ (头文件) 依赖 一个平台工程可被多个应用工程引用,实现软硬件协同开发

可可精品资料库