2. Versal器件架构与异构计算资源

Versal 是 AMD 面向自适应计算推出的异构 SoC 平台,它的核心思想不是把更多逻辑门堆在一起,而是把不同“计算性格”的引擎放进同一颗芯片,让它们各司其职、按需协作。理解 Versal,关键不是记住某个模块的名字,而是建立一张“谁负责什么、数据怎么走、谁指挥谁”的资源地图。本节围绕这张地图展开,重点讲清 PS、PL、NoC、DSP58、AI Engine 之间的分工与协同。

一、自适应 SoC 的整体分层

Versal 从结构上可以分成三层来看。最上层是处理系统(PS),它包含 Arm Cortex-A72 应用核、Cortex-R5F 实时核、DDR 控制器、外设接口和平台管理单元(PMU)。PS 负责运行操作系统、协议栈、任务调度和系统级控制,是整颗芯片的“大脑”。中间层是可编程逻辑(PL),由可配置逻辑块、Block RAM、UltraRAM 和 DSP58 切片组成,负责高速接口、时序逻辑、数据搬运和确定性流水线。最下层是AI Engine(AIE)阵列,它由大量 VLIW 向量处理器、本地存储器和 AXI 流接口构成,专门处理高吞吐、规则性强的向量与矩阵运算。

这三层不是简单堆叠,而是通过 NoC(Network on Chip) 和 AXI 互联连接成一个整体。NoC 是 Versal 区别于传统 FPGA 的关键:它是一条片上高速数据网络,把 PS 的 DDR、PL 的接口、AIE 阵列和各类硬核 IP 连接起来,让数据不必全部绕经可编程逻辑布线,从而降低拥塞、提高带宽可预测性。

处理系统 PS(系统控制与调度) Cortex-A72 应用核 / Linux Cortex-R5F 实时核 / 裸机 DDR 控制器 LPDDR4 / DDR4 PMU / 外设 PCIe / USB / Ethernet 平台管理 启动 / 安全 / 时钟 NoC 片上网络(高带宽、低拥塞数据通道) NMU 主接口 NSU 交换 NCR 路由 NSU 交换 NID 从接口 QoS / 带宽分配 可编程逻辑 PL CLB / LUT 组合/时序逻辑 Block RAM 片上缓存 DSP58 乘加/复数运算 高速接口:GTY/GTYP 收发器、PCIe、100G Ethernet、MIPI AI Engine 阵列 AIE Tile VLIW 向量核 本地存储 32KB/核 AXI Stream 流式数据接口 AIE-ML:增强 INT8/FP16 矩阵运算与级联接口 AXI 协同关系要点 • PS 负责控制与调度,通过 NoC 访问 DDR 和 PL/AIE 资源,不直接参与高吞吐数据通路。 • PL 承担接口转换、协议处理、确定性流水线和 DSP58 乘加运算,是数据进入 AIE 前的预处理层。 • AIE 阵列通过 AXI Stream 接收 PL 或 NoC 的数据,完成向量/矩阵运算后回写 DDR 或送回 PL。 • NoC 是三者之间的“高速公路”,带宽和 QoS 配置直接影响系统吞吐与实时性。

二、NoC:被低估的“数据高速公路”

在传统 FPGA 中,数据从一个模块搬到另一个模块,往往要占用可编程逻辑的布线资源,模块一多就容易出现布线拥塞和时序收敛困难。Versal 的 NoC 把这件事从“逻辑布线”变成了“网络路由”。NoC 由 NMU(Network Master Unit)、NSU(Network Switch Unit)、NCR(Network Coupler/Route)和 NID(Network Slave Unit)等组件构成,支持 AXI4 和 AXI Stream 两种事务类型,并可按 QoS 等级分配带宽。

实际使用中,NoC 的价值体现在三个场景。第一,PS 的 DDR 到 PL 的高速数据搬运,可以走 NoC 而不占用 PL 逻辑;第二,PL 采集的高速数据直接通过 NoC 写入 DDR,再由 AIE 从 DDR 读取,形成“采集—存储—计算”的解耦;第三,多个 AIE 阵列之间或 AIE 与 PL 之间的流式数据,可以通过 NoC 的 AXI Stream 通道传输。配置 NoC 时,需要关注带宽预算、QoS 等级和连接拓扑,避免某条路径成为瓶颈。

三、DSP58 与 AI Engine 的分工

DSP58 是 PL 中的硬核乘加单元,支持 27×18 位乘法、复数乘法和累加,适合做滤波器、混频、FFT 蝶形运算等确定性强的信号处理。它的优势是延迟确定、与 PL 逻辑紧密耦合,适合放在数据流的前端。AI Engine 则是阵列化的 VLIW 向量处理器,每个 AIE Tile 包含向量核、标量核和本地存储器,通过 AXI Stream 与邻居级联,适合做大规模并行、规则性强的运算,比如矩阵乘法、卷积、波束形成和神经网络推理。

一个典型的协同分工是:PL 用 DSP58 完成数字下变频和抽取滤波,把数据率降下来;AIE 阵列接手做 FFT、脉冲压缩或目标检测;PS 负责参数配置、结果汇总和对外通信。这样既发挥了 DSP58 的低延迟,又利用了 AIE 的高吞吐。

四、协同关系中的关键约束

异构协同不是“把任务随便丢给某个引擎”就行,实际工程中有几个硬约束需要提前考虑。第一是数据搬运成本:数据每经过一次 DDR 往返,都会增加延迟和功耗,能流式传递的就不要落 DDR。第二是接口匹配:PL 的 AXI4 接口与 AIE 的 AXI Stream 接口之间需要做位宽、时钟域和握手协议的转换。第三是同步与触发:PS 通过 PL 的寄存器或 AIE 的 GMIO 接口下发参数,需要保证配置在数据到达之前生效。第四是资源预算:AIE 阵列的 Tile 数量、PL 的 DSP58 数量和 NoC 的带宽都是有限资源,需要在设计初期做分配。

在实际项目中,建议先用一张“数据流—资源映射表”把每个处理阶段对应的引擎、接口类型、数据位宽和带宽需求列清楚,再开始写 RTL 或 AIE 内核代码。这张表能提前暴露接口不匹配和带宽不足的问题,比后期调试省力得多。

五、一个简化的协同示例

假设系统需要处理 1 GSPS、12 位 ADC 采集的数据,做 1024 点 FFT 和简单门限检测。一种合理的映射是:ADC 数据先进入 PL,由 DSP58 完成 4 倍抽取和数字下变频,输出 250 MSPS 的复数数据;然后通过 AXI Stream 送入 AIE 阵列,由多个 AIE Tile 并行完成 1024 点 FFT;FFT 结果在 AIE 内做模值计算和门限比较,只把超过门限的峰值信息通过 NoC 写入 DDR;PS 定期读取 DDR 中的峰值列表,做进一步处理和上报。这个例子里,PL 负责“降速和预处理”,AIE 负责“密集计算”,PS 负责“决策和通信”,NoC 负责“搬运”,四者各司其职。

理解 Versal 的异构架构,最终要落到“什么任务放在哪个引擎、数据怎么在引擎之间流动、瓶颈可能出现在哪里”这三个问题上。把这三个问题想清楚,后续的硬件设计、软件划分和性能优化才有稳定的基础。