为什么FPGA比RK3588加速yolo延迟低

下面我从最底层的计算原理、数据流、卷积结构和系统架构来解释 为什么 FPGA 可以做到比 RK3588(含 NPU)更低延迟,尤其在 YOLO 这种卷积网络中延迟差距会明显放大。

你的背景是 FPGA + AI,我会尽量结合硬件和 CNN 架构给你“看得懂也看得透”的解释。


🟥 0. 一句话根本原因

FPGA = 真·按像素/特征图连续流动的 Pipeline 计算
SoC/NPU = 必须分 Batch,把所有数据装载进片内 RAM 后再算

所以:

▶ FPGA:图像一点都不需要缓存,像流水一样来一点算一点 → 延迟极低

▶ RK3588 / NPU:必须等整层数据准备好 → 延迟必然高


🟥 1. YOLO 的延迟从哪里来?

YOLO 本质是堆叠多层 CNN,包括:

  • 大量 3×3/1×1 卷积
  • BN、SiLU/ReLU
  • DownSample、Upsample
  • C2f、SPPF 等模块

本质都是 矩阵卷积

🟦 SoC/NPU 的工作方式

必须经过以下步骤:

  1. 把整张图读入内存
  2. 转换格式(NCHW → NHWC → 特定布局)
  3. 整层 Feature Map 全部搬到 NPU SRAM
  4. 整层卷积运算
  5. 再把结果搬回 DRAM

特点:

  • 以层为单位执行
  • 每层之间有内存读写
  • 数据排布复杂(Winograd/Tile/Block/Pack)
  • 一层卷积必须等上层整个输出完成

这意味着一定有“整层级”的延迟
也就是你必须等 一帧图像的所有像素先准备好,NPU 才开始卷积。


🟥 2. FPGA 的卷积方式完全不一样

FPGA 是 纯流式(Streaming) 结构。

🟩 FPGA 卷积本质是:

像素进入 → 直接参与卷积 → 结果立即输出

用硬件 pipeline 表示:

1
摄像头输入流 → Line Buffer3×3窗口 → MAC阵列 → 激活 → 输出

数据根本不需要存整层 Feature Map。

示例:3×3 卷积(FPGA计算流程)

FPGA 用 Shift Register + Line Buffer 做窗口滑动。

只需存 两行 + 3 像素窗口,就可以计算:

1
kernel[0][0]*p0 + kernel[0][1]*p1 + ...

每个像素(或者每个 Clock)都能得到一个卷积结果。

🟩 流水线(Pipeline)→ 延迟极低

FPGA pipeline 运行后:

每个时钟周期都输出一个结果(after pipeline filled)

所以延迟 ≈ pipeline 深度(几十 ns ~ 微秒级)

而不是等待整层图像!


🟥 3. 最核心的区别:FPGA 是空间并行 + 流式

下面是关键对比:


🟦 ① 架构方式不同

架构 SoC/NPU FPGA
并行方式 时间并行(批量 + Tile 计算) 空间并行(真并行电路)
数据处理 分层处理 流水式实时处理
需要 RAM 缓存 大量缓存 Feature Map 几乎不缓存
层与层的同步 必须等待 无需等待

🟦 ② 数据访问方式不同

NPU:

  • 不断做 DRAM <→ SRAM 的搬运
  • tile/block 重排
  • Winograd 转换
  • Reordering 很耗时间

FPGA:

  • 读入一条图像流 → 固定结构卷积 → 输出
  • 极少的 RAM(几 KB)

所以 NPU 必然产生 latency:

  • 因为要等待整层准备、DMA 传输、tile 拼接。

FPGA 完全没有这个步骤。


🟦 ③ 算法调度方式

SoC/NPU

一个卷积层通常要:

  1. Load Input Tile
  2. Load Weight Tile
  3. Compute
  4. Store Output Tile
    重复多次(tile 数量级 = 数千)

FPGA

卷积是硬连线:
权重存在 BRAM/寄存器中
数据进来就算,算完立刻出流


🟦 ④ 并行规模

SoC/NPU

有“MAC 数量上限”(例如 RK3588 NPU ≈ 1024 MAC)

FPGA

可以:

  • 部署 N 个 3×3 卷积阵列
  • 每个阵列是 9×并行乘加
  • 多个卷积核并行
  • 多通道(C)也可并行展开

比如你有 200 DSP,可以搭建 200 个独立 MAC 单元,这就是纯物理并行。


🟥 4. 实例:FPGA vs NPU 处理一层卷积的延迟

假设输入图像为 640×640×3,卷积核 3×3×3→64


🟦 RK3588 NPU 的流程:

1)加载 640×640×3 输入

2)转换格式 NHWC → 特定数据布局

3)分 Tile(比如 64×64 Block)

4)把 Tile 搬到 SRAM

5)卷积处理

6)结果再搬回 DRAM

7)等待下一层

这一层的 latency 通常是 5–20 ms


🟩 FPGA 的流程:

像素流进 → 3 行 buffer → 3×3 MAC → 输出
延迟 = 数百到数千个时钟周期
假设 200MHz 时钟:

Pipeline 深度约 200 ~ 300 个 cycle
延迟 = 1~2 微秒(us)
输出流是实时连续的


🟥 5. YOLO 网络中延迟差异为什么被进一步放大?

YOLO 特点:

  • 特征层非常多(几十个)
  • 每层都有 1×1/3×3 卷积
  • 每层 Feature Map 都要在 SoC 上 memcpy

SoC/NPU 的延迟被叠加几十次
FPGA Pipeline 不叠加,它们连接成长流水线。

等于:

▣ FPGA:1 次延迟 → YOLO 结束

▣ SoC:每层都有延迟 → YOLO 很慢


🟥 6. FPGA 低延迟的本质总结(关键 4 条)

✔ ① 流式处理,不等整帧

每个像素到达即卷积,即输出。

✔ ② 硬件 Pipeline 代替 CPU 调度

没有操作系统干扰,没有 Thread/Task switch。

✔ ③ 高度空间并行

通道展开、卷积核展开都可以直接做硬件复制。

✔ ④ 无需在 RAM 做大量中间缓存

只要 line buffer(KB 级)
而不是 SoC 的 tens of MB 中间数据。


🟥 7. 为什么军工/工业常用 FPGA 做 YOLO 加速?

因为:

  • 延迟更低(us~ms 级)
  • 实时性确定(无抖动)
  • 无操作系统风险
  • 在高温/振动下更可靠
  • 可对模型做“硬化”,不怕攻击
  • 可绑定多路高速 Sensor

这就是 FPGA 在这些场景“价值远超 RK3588”的本质原因。


📌 如果你需要

我可以继续给你:

✔ FPGA YOLO 轻量加速器(Verilog/HLS)的 框图和数据流图

✔ 如何实现 3×3 卷积的 FPGA Pipeline(含乘法器/DSP 映射)

✔ 如何让 FPGA 跑 YOLO(Backbone + Neck)最优

✔ FPGA vs NPU 并行度对比图(非常直观)

你想继续看哪一部分?


为什么FPGA比RK3588加速yolo延迟低
http://witbit.cn/AI/为什么FPGA比RK3588加速yolo延迟低.html
作者
朝彻
发布于
2025年11月16日
许可协议