1. 课程导入与工程全景

在开始动手写第一行 PL 逻辑或调用第一个 AI Engine 内核之前,我们需要先建立一张"工程全景图"。很多工程师在接触 AMD Versal 时,第一反应是把它当成"更快的 Zynq"——更大的 FPGA、更多的 DSP、更强的 ARM 核。这种理解会让人在项目中期陷入困境:明明硬件资源充足,却因为数据在 PL、AI Engine、DDR 之间反复搬运,导致端到端延迟远超预期。Versal 的核心价值不在于单点算力,而在于它把标量处理、可编程逻辑、向量 DSP 和 AI 引擎组织成了一条可编排的异构计算流水线。理解这条流水线的分工与数据流向,是本课程所有后续工作的前提。

Versal 的异构计算架构定位

Versal ACAP(Adaptive Compute Acceleration Platform)内部可以粗略划分为四个计算域。最上层是 Scalar Engine,即双核或四核 Arm Cortex-A72 应用处理单元,负责操作系统、控制流、网络协议栈和任务调度;旁边是 Adaptive Engine,也就是传统的可编程逻辑(PL),适合做像素级流水线、视频时序生成、高速接口协议以及确定性极强的定点运算;再往下是 AI Engine 阵列,由大量 VLIW 向量处理器和专用浮点/定点 MAC 组成,擅长矩阵乘、卷积、FFT 这类规则的高吞吐计算;最后是 DSP Engine,提供硬核浮点 DSP 切片,用于补充 PL 中的高精度运算。这四个域通过 NoC(Network-on-Chip)和 AXI 互联,共享 DDR 与 LPDDR 内存控制器。

对视频与视觉加速而言,这个架构的意义在于:视频输入输出、色彩空间转换、缩放、去隔行等"确定性数据流"放在 PL;目标检测、特征提取、分类等"计算密集型"任务放在 AI Engine;而任务编排、结果上报、与上位机通信放在 Arm 核。三者并行工作,而不是串行等待。

Versal 视频与视觉加速系统全景 视频源 MIPI / SDI / HDMI Adaptive Engine (PL) 视频时序 / ISP 前端 缩放 / 色彩空间转换 DMA / 帧缓存接口 确定性像素流水线 AI Engine 阵列 卷积 / 矩阵乘加速 特征提取 / 后处理 流式数据乒乓缓冲 高吞吐规则计算 Scalar Engine Cortex-A72 Linux / 调度 任务编排 结果上报 控制 / 参数下发 NoC + DDR / LPDDR 共享内存 帧缓冲 · 权重存储 · 中间特征图 显示 / 网络输出 DP / Ethernet 关键约束 端到端延迟 吞吐帧率 功耗与散热

系统级开发流程

Versal 的工程开发不是"先写 RTL 再写软件"的线性过程,而是围绕平台(Platform)和加速内核(Kernel)两条主线并行推进。典型流程如下:首先在 Vivado 中创建 Versal 工程,配置 PS、PL、AI Engine 和 NoC 的硬件平台,导出 XSA;然后在 Vitis 中基于 XSA 创建平台工程,分别开发 PL 侧的 RTL/HLS 内核、AI Engine 侧的图(Graph)程序,以及 Arm 侧的 Linux 应用;最后通过 Vitis Analyzer 观察 AI Engine 的吞吐、PL 的时序余量和 NoC 带宽占用,迭代优化。

这里有一个容易被忽视的环节:接口契约的提前定义。PL 与 AI Engine 之间通过 AXI4-Stream 或内存映射接口通信,数据格式(如 RGB888 还是 YUV420)、位宽、行对齐、帧同步信号必须在编码前确定。否则后期修改接口会导致 PL 和 AI Engine 两侧同时返工。建议在项目启动时用一张接口表固定下来,例如:视频输入 1920×1080@60fps,YUV420 8bit,每帧 3 110 400 字节;AI Engine 输入为 640×640 INT8 张量,通道优先布局。

课程项目目标与硬件平台选型

本课程以一个完整的"智能视觉加速系统"作为贯穿项目:从 MIPI 摄像头采集 1080p 视频,在 PL 中完成去马赛克、缩放和色彩空间转换,将 640×640 的 INT8 张量送入 AI Engine 执行轻量级目标检测网络,检测结果回传 Arm 核进行框选叠加,最终通过 DisplayPort 输出带标注的视频流。项目目标不是追求最高帧率,而是让学员理解每个计算域的职责边界,以及数据在域之间流动时的带宽和延迟代价。

硬件平台选型方面,课程推荐使用 AMD Versal AI Core 系列 VCK190 评估板。它包含 400 个 AI Engine、双核 Cortex-A72、丰富的 PL 资源,以及 MIPI、DisplayPort、以太网等视频常用接口,适合承载本课程的全部实验。如果手头只有 Versal AI Edge 系列(如 VEK280),大部分实验也可以完成,但 AI Engine 数量和 PL 规模较小,需要适当降低网络规模或分辨率。选型时重点确认三件事:AI Engine 阵列规模是否满足目标网络的 MAC 需求、PL 是否有足够的 DSP 和 BRAM 做视频流水线、板卡是否具备所需的视频输入输出接口。

在正式进入后续章节前,建议先完成一次"空平台"验证:用 Vivado 生成一个仅包含 PS 和时钟的 Versal 平台,在 Vitis 中跑通 Hello World,确认工具链、License 和板卡连接均正常。这一步看似简单,却能提前暴露 80% 的环境问题。

最后需要明确本课程的学习路径:前四章建立架构认知和工具环境,中间章节分别深入 PL 视频流水线、AI Engine 内核开发和 Arm 侧系统集成,最后以完整项目联调和性能分析收尾。每一章都会围绕真实工程对象展开,而不是孤立地讲某个 IP 或某条指令。当你完成全部实验后,应该能够独立判断一个视频视觉任务中,哪些部分该放进 PL、哪些该交给 AI Engine、哪些留给 Arm,以及如何用数据流和带宽预算来验证这个划分是否合理。