1. ISP Pipeline 概览与 FPGA 选型

各位同学好,我是你们的讲师。今天咱们正式开篇,聊聊 ISP Pipeline 的整体框架,以及怎么根据算法挑 FPGA。说实话,我见过不少工程师一上来就盯着算法细节猛啃,结果做到一半发现芯片资源不够,或者带宽撑不住,那叫一个难受。所以这一章,咱们先把全局地图铺开,再讲讲选型那点事儿。

1.1 什么是 ISP Pipeline?

ISP,全称 Image Signal Processor,说白了就是把 CMOS 传感器吐出来的原始数据,变成人眼看着舒服、机器能分析的图像。你想想看,传感器出来的东西是啥?是一堆 Bayer 格式的 RAW 数据,每个像素只有一种颜色分量,红的、绿的、蓝的混在一起,根本没法看。

ISP Pipeline 就是一条流水线,把 RAW 数据一步步“洗”成 RGB 或 YUV 图像。我习惯把它分成三个阶段:

  • 前端处理:黑电平校正、坏点校正、去噪、Bayer 插值(Demosaic)
  • 中端处理:白平衡(AWB)、色彩校正矩阵(CCM)、Gamma 校正
  • 后端处理:锐化(Sharpen)、降噪、色彩增强、格式转换

每个阶段都有各自的算法复杂度,有的偏计算密集,有的偏存储密集。咱们做 FPGA 部署,就得把这些算法拆开,看看哪些适合并行流水,哪些需要缓存多帧。

核心观点:ISP Pipeline 的本质是“数据流 + 算法流”的协同。FPGA 的优势在于流水线并行,而不是像 CPU 那样串行跑。

1.2 ISP 核心模块速览

下面这张表,是我整理的核心模块功能与 FPGA 实现要点。每个模块我都踩过坑,后面会细讲。

模块 功能简述 FPGA 实现要点
Bayer 输入 接收传感器 RAW 数据,格式为 RGGB/GRBG 等 LVDS/MIPI 接口,数据对齐,时钟域同步
黑电平校正 减去暗电流偏移,恢复真实黑电平 简单减法,单周期完成
坏点校正 检测并替换死点/亮点 需要 3x3 窗口,比较阈值,中值替换
Demosaic 从 Bayer 恢复全彩色,常用双线性或边缘导向 5x5 窗口,梯度计算,乘法器密集
AWB 估计光源色温,调整 R/G/B 增益 统计 R/G/B 均值,查表或迭代计算
CCM 3x3 矩阵乘法,校正色彩偏差 9 个乘法器 + 累加,流水线设计
Gamma 非线性映射,适应显示设备 LUT 查表,256 或 1024 深度
Sharpen 增强边缘对比度,常用拉普拉斯或非锐化掩模 3x3 或 5x5 卷积,注意噪声放大

嗯,这里要注意:Demosaic 和 Sharpen 是资源消耗大户。我在一个 1080p 60fps 的项目里,光 Demosaic 就吃掉了 40% 的 DSP 资源。所以选型时,这两个模块的并行度要重点考虑。

1.3 ISP Pipeline 的典型数据流

为了让你更直观地理解,我画了一张流程图。这张图基本覆盖了主流 ISP 的骨架,咱们后面每一章都会围绕它展开。

ISP Pipeline 典型数据流 ISP Pipeline 典型数据流 CMOS 传感器 RAW 前端:黑电平 → 坏点校正 → 去噪 Demosaic (Bayer→RGB) 中端:AWB → CCM → Gamma 后端:Sharpen → 降噪 → 色彩增强 RGB/YUV 输出 注意 每个模块可独立 流水线并行 避坑 Demosaic 和 Sharpen 是资源大户

你看,数据从传感器进来,经过前端、Demosaic、中端、后端,最后输出。每个模块之间用 FIFO 或行缓冲衔接。我个人习惯在 AWB 和 CCM 之间加一个帧缓冲,因为 AWB 需要统计整帧的 R/G/B 均值,没法做到逐像素流水。

1.4 FPGA 选型:Xilinx vs Altera/Intel

选型这事儿,说白了就是看你的算法要吃多少资源,跑多快,预算多少。我这些年用过 Xilinx 的 Artix、Kintex、Zynq,也用过 Altera 的 Cyclone、Arria。下面这张表是我自己的对比心得。

维度 Xilinx (AMD) Altera/Intel (PSG)
开发工具 Vivado,生态成熟,IP 核丰富 Quartus,界面稍旧,但稳定
DSP 资源 DSP48E2,支持 27x27 乘法,适合 ISP DSP Block,18x19 为主,高精度需组合
BRAM/MLAB BRAM 容量大,36Kb 块,适合行缓冲 MLAB 灵活,但大容量需 M20K
高速接口 GTH/GTY,SerDes 速率高 Transceiver,性能相当
ISP 相关 IP 有 MIPI CSI-2、VDMA、HLS 视频库 有 VIP 套件,但不如 Xilinx 丰富
成本 中高端偏贵,Artix 性价比不错 Cyclone 系列便宜,适合量产

我的建议:如果你做的是 1080p 30fps 以内的 ISP,用 Xilinx Artix-7 或 Altera Cyclone V 就够了。但如果是 4K 60fps,老老实实上 Kintex 或 Arria 10,别省那点钱,否则时序跑不过有你哭的。

1.5 选型实战:如何估算资源?

我记得有一次,一个客户拿着一个 4K 30fps 的 ISP 需求来找我,说想用 Cyclone IV 做。我一看,Cyclone IV 的 DSP 才 200 多个,光 Demosaic 的 5x5 窗口就要 25 个乘法器,再加上 CCM 的 9 个、Sharpen 的 9 个,还有去噪的……算下来至少 80 个 DSP。再加上行缓冲,BRAM 也得 100 多块。Cyclone IV 根本扛不住。

所以,我一般按这个步骤估算:

  1. 算分辨率与帧率:1080p 60fps 的像素时钟约 148.5 MHz,4K 30fps 约 297 MHz。时钟越高,时序越难。
  2. 算 DSP 数量:每个卷积或矩阵乘法模块,按窗口大小估算。比如 5x5 卷积需要 25 个乘法器,但可以用 DSP48 的 27x27 模式一次算两个。
  3. 算 BRAM 数量:行缓冲是 ISP 的标配。1080p 的一行数据约 1920 像素,每个像素 16 位,一行就是 30 Kb。5 行缓冲需要 150 Kb,约 5 块 BRAM36K。
  4. 留余量:我习惯留 30% 的余量,因为后期调试、加功能、修 bug 都会吃资源。

警告:千万不要只看 LUT 和 FF 数量!ISP 的瓶颈往往是 DSP 和 BRAM。我曾经见过一个项目,LUT 用了 60%,但 DSP 用了 95%,结果布局布线跑得跟蜗牛一样。

1.6 选型决策树

最后,我画了一个简单的决策树,帮你快速锁定芯片范围。

FPGA 选型决策树 FPGA 选型决策树 ISP 需求 1080p 以下 Artix-7 / Cyclone V 1080p~4K Kintex-7 / Arria 10 4K 以上 / 多路 Virtex / Stratix 10 选型口诀 低分辨率:性价比优先 中分辨率:平衡 DSP 与 BRAM 高分辨率:上高速 SerDes 和大容量