基于FPGA的工业相机图像采集:实现高帧率实时画面的预处理
工业相机跑高帧率时,瓶颈往往不在传感器,而在“图像怎么进FPGA、进来后怎么不卡顿地做预处理”。1080p@60fps的24位RGB视频需要约1.5Gbps带宽,传统“CPU参与搬运+软件算法”的链路根本喂不饱。FPGA的价值就是用硬件流水线把“采集→预处理→输出”做成一条无阻塞的数据通路:相机数据进来即处理,像素时钟驱动下每周期出一个结果。本文给出一套以AXI4-Stream为骨干的可落地架构。
一、接口选型决定上限
工业相机常用接口与FPGA接入方式:
接口 典型带宽 FPGA接入
Camera Link ~680MB/s(Full) 并行LVDS直连,DS90CR288A解串
CoaXPress CXP-6≈6.25Gbps 光模块转GTY
LVDS/DVP 低~中 IOB直接接入
某半导体检测设备采用CameraLink Full模式+Xilinx Kintex-7,实现了2048×2048@60fps稳定采集,实测吞吐3.2Gbps 。
入门验证可用OV5640的DVP并行接口(10位像素总线+VSYNC/HREF/PCLK),但注意PCLK与FPGA系统时钟异步,跨时钟域首选异步FIFO :
async_fifo #( .DATA_WIDTH(10), .DEPTH(512) ) pixel_fifo (
.wr_clk(pclk), .rd_clk(sys_clk),
.wr_en(href), .din(pixel_data),
.rd_en(proc_ready), .dout(stream_data)
);
二、AXI4-Stream:工业视觉的“数据高速公路”
Xilinx的Video In to AXI4-Stream IP核可将Native视频流转为标准AXI4-Stream,供后续算法IP消费 。其优势在于:标准化的握手机制(tvalid/tready)、支持4K60fps、可与VDMA/DMA无缝衔接 。
三、预处理流水线:灰度化→滤波→边缘检测
参考AXI_image开源项目的DMA→Skid Buffer→Sobel→DMA架构 ,预处理每个阶段都是AXI4-Stream兼容的流式IP,用skid buffer吸收下游背压,保证不丢数据 。
module image_preprocess (
input wire [23:0] s_axis_tdata,
input wire s_axis_tvalid,
output wire s_axis_tready,
output wire [7:0] m_axis_tdata, // 处理后单通道
output wire m_axis_tvalid
);
// 阶段1:RGB转灰度(移位代替除法)
wire [7:0] gray = (s_axis_tdata[23:16]*299 +
s_axis_tdata[15:8] *587 +
s_axis_tdata[7:0] *114) >> 10;
// 阶段2:3×3窗口缓冲(Line Buffer + Shift Register)
// 阶段3:Sobel边缘检测
// 阶段4:阈值二值化
assign m_axis_tdata = (sobel_mag > THRESH) ? 8'hFF : 8'h00;
assign m_axis_tvalid = s_axis_tvalid;
assign s_axis_tready = 1'b1; // 全速吞吐
endmodule
Sobel核心的乘加链要做寄存器重定时(Retiming),将时序从150MHz提升到250MHz 。
四、关键工程要点
1. 带宽预留20%余量
1080p@60fps的24位RGB需1.5Gbps,AXI4-Stream总线时钟要按1.8Gbps以上设计 。
2. 双缓冲/三缓冲消除冲突
采集区、处理区、结果区物理隔离,配合VDMA实现零拷贝 。
3. 外部触发与时刻戳绑定
工业产线必须让相机曝光与编码器脉冲同步,时刻戳随像素数据一路流转,否则后端缺陷定位会打偏 。
4. 背压处理
AXI4-Stream的tready可能由于DMA配置或DDR刷新而拉低,必须在“FIFO非空且上一拍tvalid已清”时才发起读使能,Skid Buffer是解决背压的标准方案 。
五、实测性能
ZYNQ+OV5640方案:200fps采集+缺陷检测,端到端延迟控制在3帧以内
Xilinx Zynq UltraScale+ MPSoC:采集到显示总延迟压缩至2个时钟周期(约33ns@60MHz)
单FPGA并行处理8路1080p视频流,单路延迟<10μs
写在最后
FPGA做工业相机高帧率预处理的本质,是用“AXI4-Stream流水线+跨时钟域FIFO+背压感知的Skid Buffer”把相机数据变成一条无阻塞的硬件数据流。采集端做好跨时钟域隔离,处理端做好流水线切割,输出端做好DMA零拷贝——三者协同,1080p@60fps的灰度化+Sobel+阈值化全链路延迟可压到微秒级。当你的视觉检测项目卡在“CPU搬运跟不上相机”时,别再优化软件算法,把数据通路搬到FPGA的AXI4-Stream上,才是根治之道。





