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上做系统集成,本质上是决定"哪一段计算放在哪个域、数据通过什么接口在域之间搬运、由谁发起和同步"。
二、嵌入式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项目,流程可以概括为五条并行的线索,最终汇聚到同一块板卡上:
- 硬件平台设计:在Vivado中配置PS外设、PL逻辑、时钟与DDR,导出XSA文件。
- AI Engine设计(如涉及):在Vitis中编写AIE图,编译生成xclbin或AIE配置。
- 启动固件生成:用Vitis生成PLM、TF-A、U-Boot、设备树,打包成BOOT.BIN与image.ub。
- Linux系统构建:用PetaLinux或Yocto生成内核、根文件系统、驱动模块。
- 应用与驱动开发:编写用户态程序、内核驱动,完成加速器调用与数据搬运。
这五条线索不是严格串行的。例如设备树既依赖硬件设计,又影响驱动开发;AIE的接口定义会影响Linux侧的驱动形态。软硬件协同设计的核心,就是在早期就把接口、地址、中断、数据格式约定清楚,避免后期返工。
四、软硬件协同设计的关键约定
协同设计最容易出问题的地方,往往不是算法本身,而是接口约定。以下是一份在项目启动阶段就应确认的约定清单,可作为实际工程的检查表使用:
| 约定项 | 示例内容 | 影响方 |
|---|---|---|
| 地址映射 | PL加速器寄存器基址 0xA000_0000,长度 64KB | Vivado / 设备树 / 驱动 |
| 中断号 | PL完成中断接 pl_ps_irq0,Linux侧为 SPI 89 | Vivado / 设备树 / 驱动 |
| 数据格式 | 输入定点Q1.15,输出32位累加,小端 | AIE / PL / 应用 |
| 搬运方式 | DMA描述符环,每包4096字节 | PL / 驱动 / 应用 |
| 时钟与复位 | PL时钟100MHz,复位由PS GPIO控制 | Vivado / 设备树 |
这些约定一旦确定,就应写入设计文档,并在设备树和驱动中保持一致。后续调试时,大部分"加速器不工作"的问题都可以回溯到这张表。
五、课程实战目标与最终交付物
本课程以一个可运行的Versal嵌入式Linux系统为目标。最终交付物包括:
- 一份可启动的BOOT.BIN与image.ub,能在目标板上进入Linux控制台;
- 一份与硬件匹配的设备树源文件,正确描述PS外设、PL加速器和中断;
- 一个内核驱动模块,完成加速器寄存器访问与DMA数据搬运;
- 一个用户态测试程序,向加速器提交数据并校验结果;
- 一份系统集成记录,包含启动日志、关键寄存器读数、性能与正确性判断依据。