1. 课程导入与平台认知

AMD Versal ACAP(Adaptive Compute Acceleration Platform,自适应计算加速平台)是AMD面向异构计算推出的SoC级器件,它把标量处理、可编程逻辑和专用计算引擎集成在同一芯片内。对嵌入式Linux开发者而言,理解Versal的关键不是记住型号参数,而是建立一张"谁负责什么、数据怎么流动、软件从哪里介入"的认知地图。本章围绕这张地图展开,为后续的启动链、设备树、驱动、加速器调用和系统集成打下共同语言。

一、Versal ACAP的四个计算域

Versal内部可以划分为四个主要计算域。第一是标量处理域,即PS(Processing System),包含Arm Cortex-A72应用核与Cortex-R5F实时核,前者通常运行Linux,后者承担实时任务或安全监控。第二是自适应逻辑域,即PL(Programmable Logic),由可编程逻辑资源、DSP和Block RAM构成,用于实现自定义接口、数据通路和硬件加速。第三是AI Engine域,由阵列化的VLIW向量处理器、本地存储和互连组成,适合高吞吐的矩阵、滤波、信号处理类运算。第四是专用硬件引擎域,包括DDR控制器、PCIe、以太网、视频编解码、高速收发器等硬核IP。

这四个域并非彼此孤立,而是通过NoC(Network on Chip)和AXI互连交换数据。理解这一点非常重要:在Versal上做系统集成,本质上是决定"哪一段计算放在哪个域、数据通过什么接口在域之间搬运、由谁发起和同步"。

Versal ACAP 计算域与嵌入式Linux定位 标量处理域 PS Cortex-A72 ×2 → Linux Cortex-R5F ×2 → 实时/安全 DDR / OCM / 外设控制器 自适应逻辑域 PL LUT / FF / DSP / BRAM 自定义AXI接口与数据通路 硬件加速 / 协议桥接 AI Engine 域 VLIW 向量核阵列 本地存储 + 流式互连 矩阵/滤波/信号处理 NoC / AXI 互连 —— 域间数据搬运与地址映射 嵌入式Linux 在 Versal 上的定位 用户态应用 算法 / 控制 / 通信 内核驱动 字符/平台/加速器驱动 设备树与固件 PL/AIE 配置加载 Boot 链 BootROM→PLM→U-Boot

二、嵌入式Linux在Versal上的角色

在Versal系统中,Linux通常运行在Cortex-A72上,承担三类职责。其一是系统管理:完成启动、内存管理、时钟与电源管理、文件系统挂载。其二是资源协调:通过设备树描述PL和AIE的地址空间、中断号、时钟,让内核知道这些硬件存在。其三是应用承载:运行用户态程序,通过驱动或用户态库访问加速器。

需要特别注意的是,Linux并不是Versal上唯一的软件层。PLM(Platform Loader and Manager)在启动早期运行,负责加载PL配置、管理电源域;Cortex-R5F上可能运行裸机或RTOS固件。Linux与它们之间通过共享内存、IPI中断或特定驱动通信。因此"在Versal上开发Linux"往往意味着同时理解多个软件实体的分工。

三、开发流程总览

一个典型的Versal嵌入式Linux项目,流程可以概括为五条并行的线索,最终汇聚到同一块板卡上:

  1. 硬件平台设计:在Vivado中配置PS外设、PL逻辑、时钟与DDR,导出XSA文件。
  2. AI Engine设计(如涉及):在Vitis中编写AIE图,编译生成xclbin或AIE配置。
  3. 启动固件生成:用Vitis生成PLM、TF-A、U-Boot、设备树,打包成BOOT.BIN与image.ub。
  4. Linux系统构建:用PetaLinux或Yocto生成内核、根文件系统、驱动模块。
  5. 应用与驱动开发:编写用户态程序、内核驱动,完成加速器调用与数据搬运。

这五条线索不是严格串行的。例如设备树既依赖硬件设计,又影响驱动开发;AIE的接口定义会影响Linux侧的驱动形态。软硬件协同设计的核心,就是在早期就把接口、地址、中断、数据格式约定清楚,避免后期返工。

四、软硬件协同设计的关键约定

协同设计最容易出问题的地方,往往不是算法本身,而是接口约定。以下是一份在项目启动阶段就应确认的约定清单,可作为实际工程的检查表使用:

约定项示例内容影响方
地址映射PL加速器寄存器基址 0xA000_0000,长度 64KBVivado / 设备树 / 驱动
中断号PL完成中断接 pl_ps_irq0,Linux侧为 SPI 89Vivado / 设备树 / 驱动
数据格式输入定点Q1.15,输出32位累加,小端AIE / PL / 应用
搬运方式DMA描述符环,每包4096字节PL / 驱动 / 应用
时钟与复位PL时钟100MHz,复位由PS GPIO控制Vivado / 设备树

这些约定一旦确定,就应写入设计文档,并在设备树和驱动中保持一致。后续调试时,大部分"加速器不工作"的问题都可以回溯到这张表。

五、课程实战目标与最终交付物

本课程以一个可运行的Versal嵌入式Linux系统为目标。最终交付物包括:

  • 一份可启动的BOOT.BIN与image.ub,能在目标板上进入Linux控制台;
  • 一份与硬件匹配的设备树源文件,正确描述PS外设、PL加速器和中断;
  • 一个内核驱动模块,完成加速器寄存器访问与DMA数据搬运;
  • 一个用户态测试程序,向加速器提交数据并校验结果;
  • 一份系统集成记录,包含启动日志、关键寄存器读数、性能与正确性判断依据。