FPGA 上跑 CNN 的关键在于量化与 DSP 复用:本文拆解 INT8 推理从量化、卷积映射到硬件调优的完整工程路径。
FP32 权重与激活在 FPGA 上直接计算代价高昂:DSP48 单次乘法位宽有限、片上存储带宽吃紧。INT8 量化把计算位宽砍到 1/4,配合 DSP 拼接(两个 INT8 乘法塞进一个 DSP48)可成倍提升乘加密度。量化策略上,min/max 校准实现简单但对长尾分布敏感,KL 散度校准(参考 TensorRT 思路)用信息论保留分布主体,精度损失通常可控制在 1% 以内。
两种主流数据流:im2col 把卷积转成矩阵乘,利于复用脉动阵列但引入额外搬移;直接卷积按滑动窗口流式计算,用 line buffer 缓存行数据,资源占用更省。工程上小卷积核(3x3)多用直接卷积,大 stride 或转置卷积再权衡。
CNN 层间数据量远超片上存储。实践要点:输入/权重乒乓缓冲隐藏访存延迟,输出部分和片上累加减少写回次数。设计目标是把外部 DRAM 带宽占用压到可用额度内,而不是盲目堆并行度。