当前位置:首页 > 工业控制 > 工业控制
[导读]工业相机跑高帧率时,瓶颈往往不在传感器,而在“图像怎么进FPGA、进来后怎么不卡顿地做预处理”。1080p@60fps的24位RGB视频需要约1.5Gbps带宽,传统“CPU参与搬运+软件算法”的链路根本喂不饱。FPGA的价值就是用硬件流水线把“采集→预处理→输出”做成一条无阻塞的数据通路:相机数据进来即处理,像素时钟驱动下每周期出一个结果。本文给出一套以AXI4-Stream为骨干的可落地架构。


工业相机跑高帧率时,瓶颈往往不在传感器,而在“图像怎么进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上,才是根治之道。



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭