FPGA 加速视觉检测:从 200ms 到 8µs 的延迟优化之路
1. 问题的原点:软件视觉检测撞上性能墙
在泰诺的 PCB 印刷产线中,锡膏检测(SPI)是核心品控环节。每一块经过产线的 PCB 仅有不到 50ms 的时间窗口用于缺陷检测——超出这个时间,整条产线就会产生背压。
多年来,我们一直使用基于 GPU 加速的 OpenCV 流水线运行在 x86 边缘节点上。方案确实能用——但仅限低负载场景。当检测分辨率提升到 8K 级别后,单帧处理延迟偶尔飙升至 180~220ms。这 180ms 的抖动意味着漏检、误放行和产线拥塞。根本原因在于架构:通用 GPU 流水线无论怎样优化,都无法消除调度延迟和 PCIe 传输开销的不确定性。
2. 为什么选择 FPGA:硬件流水线的不可替代性
我们决定将整条检测流水线下沉到 FPGA,让芯片直接对接图像传感器的 MIPI 接口。核心理由有三:
- 流式架构:像素从 ADC 输出的那一刻就开始逐级流过流水线,不存在帧缓存、DMA 传输和内核上下文切换。
- 确定性延迟:精心设计的流水线具有精确的
N个时钟周期的像素延迟,N即流水线总深度,不存在方差。 - 能效优势:FPGA 方案功耗约 4W,而同等工作负载在 GPU 边缘节点上需要 45W。
3. 架构设计
我们在 Xilinx Kintex-7 上实现了五级流水线:
总流水线深度:15 个时钟周期。在 200MHz 时钟下,单个像素从进入到缺陷标志输出的延迟为 75 纳秒。整帧图像以行速率流转,8K × 8K 的帧在传感器输出完成的同时即完成检测——不引入任何额外延迟。
连通域检测采用简化的单遍硬件状态机(CCL),避免了传统软件库中多遍扫描算法带来的帧缓冲开销。
4. 从实验室到产线
FPGA 比特流使用 SystemVerilog 开发,搭配 Cocotb 验证框架。我们构建了联合仿真平台,将 10 万张标注 PCB 图像送入 RTL 仿真器,逐帧对比 FPGA 流水线与现有 GPU 管线的检测结果。FPGA 流水线在关键缺陷类别中实现了 零漏检,整体捕获率达 99.7%(GPU 管线为 98.2%)。
2026 年 Q2 正式部署到产线后,FPGA 检测节点已累计处理超过 200 万块板卡。单板平均检测耗时从 180ms 降至 12ms,尾延迟从 220ms 降至精确的 12ms——传感器读出时间成为唯一瓶颈。
5. 工程启示
- 先设计数据路径,再选择算法:最大的优化收益来自对数据驻留位置和流动路径的重新思考,而非算法本身的精巧程度。
- 流水线深度不等于延迟:100 级流水线跑在 400MHz 下,每像素仍然只需 250ns 就能完成。深度影响的是吞吐量,不是延迟。
- 联合仿真无可替代:用 10 万张真实图像做验证,发现了三个形式验证遗漏的边界场景。当预算允许时,真实数据胜过形式证明。