3. FPGA基础回顾
要设计一个高效的脉动阵列GEMM加速器,必须先回到FPGA的物理底座:它到底由哪些可编程资源构成,这些资源又如何决定矩阵乘加的吞吐、延迟与功耗。本节把FPGA拆成六类关键资源——可编程逻辑、DSP Slice、BRAM、URAM、布线资源与时钟管理,并说明它们与脉动阵列的对应关系。
一、核心原理:FPGA是一张可重构的计算织物
FPGA的本质是“可编程逻辑阵列+可编程互连+专用硬核”的组合。查找表(LUT)实现任意组合逻辑,触发器(FF)提供时序寄存,二者构成最基本的可编程逻辑单元(CLB/ALM)。DSP Slice提供硬化的乘加运算,BRAM/URAM提供片上存储,布线资源把上述单元连接成任意数据通路,时钟管理单元(MMCM/PLL)则提供稳定的时钟与相位关系。
对GEMM而言,脉动阵列的每个处理单元(PE)通常需要:一个乘法器、一个累加器、若干寄存器以及局部数据缓存。这正好对应DSP Slice、FF、BRAM三类资源。因此,理解FPGA资源结构,等价于理解脉动阵列的“物理预算”。
二、DSP Slice:脉动阵列的乘加心脏
DSP Slice是FPGA中专门用于算术运算的硬核,典型结构包含预加器、乘法器、累加器和流水寄存器。以Xilinx 7系列DSP48E1为例,它支持25×18位乘法、48位累加,并可配置为乘累加(MACC)、乘加(MADD)等模式。脉动阵列中每个PE的乘加操作,最理想的实现就是直接映射到一个DSP Slice。
关键参数包括:输入寄存器级数、乘法器位宽、累加器位宽、是否使用预加器。对于GEMM,若采用INT8量化,一个DSP可拆分为两个INT8乘法,从而提升吞吐。设计时需注意DSP的流水延迟,通常为3~5个时钟周期,这直接影响脉动阵列的节拍对齐。
// 典型 DSP48E1 乘累加推断(Verilog 片段)
always @(posedge clk) begin
mult_reg <= a * b; // 映射到 DSP 乘法器
acc_reg <= acc_reg + mult_reg; // 映射到 DSP 累加器
end
// 综合属性:USE_DSP = "yes"
三、BRAM与URAM:数据供给的粮仓
脉动阵列的算力再高,若数据供给跟不上,也会陷入“饥饿”。BRAM和URAM就是解决片上数据吞吐的关键。BRAM通常为18Kb或36Kb双端口块,适合实现行缓冲、列缓冲、乒乓缓冲;URAM是UltraScale+引入的288Kb大块存储,容量大、功耗低,适合存放权重矩阵或大块特征图。
在GEMM中,常见的数据流是:从DDR读入A、B矩阵分块,写入BRAM/URAM,再以脉动方式送入PE阵列。BRAM的双端口特性允许同时读写,支持乒乓操作,从而隐藏访存延迟。URAM则适合权重常驻,减少重复加载。
| 资源 | 典型容量 | 端口特性 | 在GEMM中的角色 |
|---|---|---|---|
| BRAM | 18/36 Kb | 双端口,可配置位宽 | 行/列缓冲、乒乓缓冲 |
| URAM | 288 Kb | 双端口,固定位宽 | 权重常驻、大块矩阵缓存 |
| DSP Slice | 25×18 乘法 | 流水寄存器 | PE 乘加核心 |
| CLB/ALM | LUT+FF | 可编程 | 控制逻辑、状态机 |
四、布线资源与时钟管理:决定阵列能否“跑起来”
布线资源是FPGA中最容易被忽视、却最影响脉动阵列性能的部分。PE之间的数据流需要大量短距离互连,若布线拥塞,会导致时序违例、频率下降。设计时应尽量让PE阵列呈规则二维网格,数据流方向一致,减少交叉和长线。必要时使用寄存器打拍,把长路径切分为多级流水。
时钟管理单元MMCM/PLL负责生成稳定的时钟。脉动阵列通常需要多个时钟域:计算时钟、数据加载时钟、DDR接口时钟。MMCM可提供倍频、分频和相位偏移,确保各时钟域之间的数据同步。对于高吞吐GEMM,建议使用全局时钟缓冲(BUFG)驱动PE阵列,避免使用区域时钟导致偏斜。
五、案例与误区复盘
以一个16×16脉动阵列INT8 GEMM为例:需要256个DSP Slice、约256个BRAM块用于行/列缓冲、若干URAM存放权重。若FPGA的DSP数量不足,可考虑时间复用,让一个DSP服务多个PE,但会降低吞吐。若BRAM不足,可改用URAM或减少分块大小。
常见误区包括:一是忽视DSP的流水延迟,导致脉动阵列节拍错位;二是BRAM位宽配置不当,造成带宽浪费;三是布线拥塞未提前规划,导致频率无法收敛;四是时钟域交叉未做同步,产生亚稳态。复盘时应重点检查资源利用率报告、时序报告和布线拥塞图。
总结来说,FPGA的可编程逻辑、DSP Slice、BRAM、URAM、布线资源和时钟管理共同构成了脉动阵列GEMM加速器的物理基础。只有把这些资源的特性与GEMM的数据流、计算流对齐,才能设计出高吞吐、低延迟、可收敛的加速器。