4、Vitis软件平台组件:平台(Platform)的概念与作用、硬件平台(XSA文件)的生成、软件平台与域(Domain)的配置
好,咱们今天聊聊Vitis里最核心的一个概念——平台(Platform)。
说实话,我刚接触Vitis那会儿,也被Platform这个概念绕得有点晕。它到底是个啥?跟以前SDK里的硬件平台有啥区别?
嗯,咱们一步步拆开看。
4.1 平台(Platform)的概念与作用
说白了,Platform就是硬件和软件之间的“契约”。
它定义了你手里的FPGA芯片上,哪些资源是固定的,哪些是留给你的应用去用的。我习惯把它理解成一个“半成品”开发板——厂家已经把基础的外设、内存控制器、时钟都搭好了,你只需要在上面跑自己的算法。
平台的核心组成:
- 硬件部分:固定的IP核、内存映射、时钟、复位、中断控制器
- 软件部分:板级支持包(BSP)、驱动、设备树、启动代码
- 域(Domain):定义软件运行的环境,比如是跑裸机还是Linux
为什么要有Platform?你想想看,如果没有这个抽象层,每次换个板子,你都得重新写一遍底层驱动,那得多痛苦。Vitis把硬件细节封装起来,你的应用代码只需要调用标准API就行。
我在项目中遇到过一件事:有个同事直接把XSA文件丢给另一个团队,结果对方死活跑不起来。后来发现,是因为Platform里配置的时钟频率跟实际板子对不上。嗯,这里要注意——Platform不是随便生成的,它必须跟你的硬件设计严格对应。
4.2 硬件平台(XSA文件)的生成
XSA文件,全称是Xilinx Support Archive。它就是硬件平台的“打包文件”。
怎么生成?流程其实不复杂,但有几个坑。
4.2.1 在Vivado中生成XSA
你需要在Vivado里完成硬件设计,然后导出硬件。具体步骤:
- 完成Block Design,添加所有需要的IP核
- 综合、实现、生成比特流
- 点击 File → Export → Export Hardware
- 勾选 Include bitstream(如果你要跑FPGA逻辑)
- 选择输出目录,生成
.xsa文件
我的小技巧: 我个人习惯在导出时,把XSA文件命名成 项目名_版本号.xsa。比如 video_processor_v1.0.xsa。这样后期迭代时,一眼就能看出哪个是最新版。
4.2.2 XSA文件里到底装了啥?
你可以把XSA理解成一个压缩包。里面包含:
| 内容 | 说明 |
|---|---|
| 硬件描述(.hdf) | 寄存器地址、中断号、内存映射 |
| 比特流(.bit) | FPGA配置数据(如果勾选了) |
| 设备树(.dts) | Linux启动时需要的硬件信息 |
| 驱动文件 | BSP源码、头文件 |
注意: 我曾经有一次忘了勾选“Include bitstream”,结果在Vitis里调试时,FPGA一直没加载逻辑。查了半天才发现是XSA里没有比特流。这个坑,你们千万别踩。
4.3 软件平台与域(Domain)的配置
硬件平台有了,接下来就是软件的事了。
在Vitis里,你需要创建一个软件平台,然后在这个平台下配置域(Domain)。
4.3.1 什么是域(Domain)?
域,说白了就是软件运行的环境配置。
它决定了:
- 你的代码是跑在裸机上,还是跑在Linux上
- 用哪个编译器(ARM GCC还是RISC-V GCC)
- 标准库用哪个(newlib还是glibc)
- 启动方式是什么(DDR启动还是QSPI启动)
我习惯把域理解成“一个软件项目的配置文件”。同一个硬件平台,你可以配多个域。比如:
- 一个域跑裸机控制程序
- 另一个域跑Linux系统
- 第三个域跑FreeRTOS
4.3.2 如何配置域?
在Vitis里操作:
- 新建一个 Platform Project
- 导入刚才生成的
.xsa文件 - 在 Domains 选项卡里,点击 Add Domain
- 选择操作系统(Baremetal、Linux、FreeRTOS等)
- 选择处理器(Cortex-A53、Cortex-R5、MicroBlaze等)
- 配置启动参数、内存大小、堆栈大小
关键参数说明:
- OS:选Baremetal就是裸机,选Linux就是带操作系统
- Arch:32位还是64位
- CPU:指定用哪个核(比如A53_0还是A53_1)
- Heap Size:堆大小,我一般设成1MB起步
- Stack Size:栈大小,默认16KB,如果递归多就加大
4.3.3 一个实际例子
假设你有一个Zynq UltraScale+板子,硬件上配了DDR和以太网。你想在上面跑一个Linux系统,同时用裸机控制一个外设。
那你可以这样配:
- Domain 1:Linux on A53_0,64位,启动方式SD卡
- Domain 2:Baremetal on R5_0,32位,启动方式DDR
两个域共享同一个硬件平台,但跑完全不同的软件。这就是Platform的威力——硬件复用,软件隔离。
避坑指南: 我曾经在配置域时,把两个域都设成了同一个CPU核。结果编译通过,但运行时两个程序互相抢占资源,系统直接崩溃。记住:每个域必须绑定不同的CPU核,除非你明确知道自己在做SMP。
4.4 知识体系总览
为了让你更直观地理解整个流程,我画了一张图:
这张图把整个流程串起来了。你从Vivado开始,生成XSA,然后到Vitis里建平台、配域,最后写应用代码。每一步都环环相扣。
嗯,关于Platform和Domain,今天就聊这么多。记住一句话:Platform是硬件和软件的桥梁,Domain是软件运行的环境。搞懂了这两个概念,Vitis开发你就入门了。
核心要点回顾:
- Platform = 硬件平台 + 软件平台 + 域配置
- XSA文件是硬件设计的“快照”,必须包含比特流
- 域定义了软件运行的操作系统、CPU、内存等参数
- 一个硬件平台可以配多个域,但注意CPU核不能冲突
可可精品资料库