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里完成硬件设计,然后导出硬件。具体步骤:

  1. 完成Block Design,添加所有需要的IP核
  2. 综合、实现、生成比特流
  3. 点击 File → Export → Export Hardware
  4. 勾选 Include bitstream(如果你要跑FPGA逻辑)
  5. 选择输出目录,生成 .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里操作:

  1. 新建一个 Platform Project
  2. 导入刚才生成的 .xsa 文件
  3. 在 Domains 选项卡里,点击 Add Domain
  4. 选择操作系统(Baremetal、Linux、FreeRTOS等)
  5. 选择处理器(Cortex-A53、Cortex-R5、MicroBlaze等)
  6. 配置启动参数、内存大小、堆栈大小

关键参数说明:

  • 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 知识体系总览

为了让你更直观地理解整个流程,我画了一张图:

Vitis平台开发流程 Vivado硬件设计 Block Design + IP集成 导出XSA文件 硬件描述 + 比特流 Vitis平台 导入XSA 域(Domain)配置 选择OS、CPU、内存、启动方式 Baremetal / Linux / FreeRTOS 应用开发与调试 编写代码 → 编译 → 下载 → 调试 整个流程:Vivado设计 → 导出XSA → Vitis建平台 → 配置域 → 开发应用

这张图把整个流程串起来了。你从Vivado开始,生成XSA,然后到Vitis里建平台、配域,最后写应用代码。每一步都环环相扣。

嗯,关于Platform和Domain,今天就聊这么多。记住一句话:Platform是硬件和软件的桥梁,Domain是软件运行的环境。搞懂了这两个概念,Vitis开发你就入门了。

核心要点回顾:

  • Platform = 硬件平台 + 软件平台 + 域配置
  • XSA文件是硬件设计的“快照”,必须包含比特流
  • 域定义了软件运行的操作系统、CPU、内存等参数
  • 一个硬件平台可以配多个域,但注意CPU核不能冲突

可可精品资料库