8路CXP相机采集系统介绍

8xCXP相机采集系统介绍

目录

1 系统概述 4

2 硬件架构 5

2.1 FPGA处理单元 5

2.2 CXP接口层 6

2.3 CXP相机说明与使用要求 7

2.4 SSI控制器板 8

3 FPGA方案 9

3.1 FPGA实现 9

3.2 Block Design说明 10

4 软件方案 14

4.1 嵌入式层 14

4.2 上位机软件(C#)​ 14

4.2.1 启动与相机扫描 15

4.2.2 参数配置 15

4.2.3 数据可视化 16

图 1 系统整体架构 4

图 2 ­ 硬件连接示意图 5

图 3 ALINX ZU19EG FPGA板卡 5

图 4 FMC-CXP-4R 板卡 6

图 5 a2A2448-210cm 机械结构 7

图 6 6芯GPIO线缆 7

图 7 485接线图 8

图 8 SSI时序图 8

图 9 FPGA数据流 9

图 10 ISP处理 10

图 11 核心模块 11

图 12 cxp_phy Block Design 12

图 13 cxp host图像输出端口 12

图 14 cxp rx Block Design 13

图 15 Rx Block Design 13

图 16 ssi数据输出Block Design 14

图 17 C# 范例界面图 15

图 18 采集图像演示 17

系统概述

✅ 应用需求:

  • 连接控制8路CXP 单lane 相机,支持POE,相机工作在外触发模式;
  • 可以通过网络接口监控CXP相机图像(只监控最新图像),传输控制指令,修改相机参数;
  • 支持3路SSI接口;

根据上述需求,本系统通过双CXP FMC子卡接入8台CoaXPress(CXP)工业相机,利用Xilinx ZYNQ SoC芯片实现高速图像采集、传输及上位机实时显示。系统采用软硬件协同设计,支持实时数据流处理与灵活的上位机控制,可广泛应用于机器视觉、工业检测等高带宽场景。

图 1 系统整体架构

特色与优势:

✅ 多通道高速采集:支持 8台相机同时工作,确保大规模采集的稳定性。

✅ 智能参数管理:匹配不同品牌相机的参数配置。

✅ 动态缓存分配:根据实际连接的相机数和参数,动态调整Rx存储,提高内存利用率。

✅ 实时数据监控:图像界面实时显示采集数据,同时可监控可用帧数,避免缓存溢出。

✅ 高效数据传输:结合 DDR4+AXIS总线,保证高吞吐量的稳定采集。

✅ 多种触发模式支持:适应不同应用场景,如工业检测、航空影像采集、武器测试等。

硬件架构

图 2­ 硬件连接示意图

FPGA处理单元

利用现有商用FPGA主控板,搭载外设完成系统设计。

图 3 ALINX ZU19EG FPGA板卡

Z19开发板主要由 ZU19EG + 4 个 DDR4+DDR4 SODIMM + eMMC +2 个 QSPI FLASH 构成。主芯片采用 Xilinx 公司的 Zynq UltraScale+ MPSoCs 系列的芯片,型号为 XCZU19EG- -2FFVC1760I。ZU19EG 芯片可分成处理器系统部分 Processor System(PS)和可编程逻辑 部分 Programmable Logic(PL)。 在 ZU19EG 芯片的 PS 端和 PL 端分别挂了 4 片 DDR4 和 1 个 260 脚 DDR4 SODIMM 卡槽,PS 端的每片 DDR4 容量高达 2GB,使得 ARM 系统和 FPGA 系统能独立处理和存储的数据的功能。PS 端的 32GB eMMC FLASH 存储芯片和 2 片 256Mb 的 QSPI FLASH 用来静态存储 MPSoCs 的操作系统、文件系统及用户数据。

该板卡有如下特点适合我们的应用场景:

  • 2个FMC HPC可以用于CXP HOST FMC子卡的连接,实现CXP相机的采集和控制;
  • 千兆以太网:提供高速稳定的网络连接,确保大数据量的快速传输,适合实时数据处理需求。
  • DDR4内存:增强数据处理能力,满足复杂运算和大容量数据处理的需求。
  • 2路485可以方便扩展外设;

CXP接口层

图 4 FMC-CXP-4R 板卡

2块FMC子卡提供8路CXP-12接口,单链路带宽达12.5 Gbps,支持PoCXP供电,支持1.25,2.5,3.125,5,6.25,10,12.5 Gbps速率。FMC-CXP-4R 子卡特性如下:

  • HPC FMC连接器,使用FMC高密度连接器,符合VITA 57.1标准;
  • Equalizer/Driver均衡器与驱动器,接收来自相机的高速downlink信号,发送来组FMC IO的低速控制信号;
  • LED,每个通道配置1个双色LED,可以通过FMC IO实现R,G颜色任意组合;
  • EEPROM,使用I2C接口的MT24C02 EEPROM,256Bytes容量,可以用于存储用户数据;
  • 24V DC Power, 24V DC电源电路,可以接受来自FMC的12V或者来自外部电源的12V供电电源,为power on cable功能提供DC电源,理论CXP每通道提供最大13W输出功率;
  • Power monitor,每路CoaXPress提供1路电流、电压监测电路,当电流超过门限后,会通过alert 端口向外发出警告;
  • HDBNC, 根据CoaXPress标准,子板使用MircroBNC连接器连接Device设备;
  • SMA,双向数字输入输出接口,通常用于触发信号的路由;

|-------------|--------|--------|--------------|-----------|--------|----------------------|
| 名称 | 别名 | 方向 | 电气 | 接头 | 宽度 | 描述 |
| CH0-CH3 | CXP | 双向 | 24V,12.5Gbps | Micro BNC | 4 | CoaXPress 物理通道,支持POE |
| Trigger | 触发 | 双向 | 1.8V-3.3V | SMA | 1 | 数字触发信号 |

CXP相机说明与使用要求

参考 a2A2448-210cm | Basler Product Documentation

图 5 a2A2448-210cm 机械结构

图 6 6芯GPIO线缆

相机会工作在外部触发模式,触发信号从Line 1/2/3 输入,注意接线时Line 1 有独立的GND。

SSI控制器板

SSI 控制板由ZYNQ7020 作为主控,通过485接口与Z19板卡完成通讯,Z19板卡上使用485接口1(A1 B1 GND),在SSI开发板上,预留好了一个RS-485接口,使用导线按照图7所示连接。

图 7 485接线图

设计通过RS485接口接收数据,经UART协议解析后转换为AXI4 Stream数据流,在第一次握手信号成功后将数据转换为源同步的方式将数据从TX1发送,每次数据会在同步时钟的上升沿改变如图8所示,第二次握手成功后数据也会按照源同步的方式从TX3输出,其他以此类推,数据是在奇数路输出,同步时钟在偶数路输出,总共能够输出4路数据与4路时钟

考虑到SSI板上没有PL端使用的按键,因此每次接收到数据32'h55555555会使SSI板上复位,之后每一路源同步数据会转换成RS-422协议由每一路的Y和Z口输出。

图 8 SSI时序图

FPGA方案

FPGA实现

图 9 FPGA数据流

  1. 图像采集部分(左侧)

如图7所示为本系统的FPGA数据流的示意图。系统使用了8个相机(Camera1 ~ Camera8)进行图像采集,每4个相机的数据分别由一块CXP FMC采集卡接收。采用CoaXPress(CXP)高速接口,保证数据的高带宽传输。CXP FMC Card 1 连接 Camera1 ~ Camera4,负责接收这4个相机的数据流。CXP FMC Card 2 连接 Camera5 ~ Camera8,负责接收这4个相机的数据流。这两个FMC采集卡分别通过CXP链路,将数据传输到下一级数据处理模块。

  1. 数据解析部分(中间)

每块FMC采集卡的数据先通过External PHY,完成CXP链路的物理层解析。External PHY 主要用于信号处理、数据恢复,并将物理层数据转换为可供CXP Host解析的格式。

  1. CXP Host协议解析

External PHY 之后,数据进入CXP Host协议解析模块,用于解析相机数据和相机信息(如帧头、状态等)。使用Hello-FPGA的CXP HOST IP Core 接收CXP相机的视频数据、发送主机的控制信号,控制信号的发送通过AXI Lite 接口完成,适配数据的接收通过AXI Stream Video格式接收。如图8所示,stream数据一分为二,一份送给PS作为监控使用,一份送给ISP 模块进行后续处理,ISP将处理结果通过DMA存储到PS DDR内存,然后软件可以读取计算结果,该计算结果与VIDEO数据一一对应,存在同步关系。

  1. 数据流处理部分(右侧)

AXIS数据流拆分,解析后的数据被划分为8路AXIS数据流(Stream 1 ~ Stream 8),每路数据流分别对应一个相机。这些数据流由Rx(数据接收引擎)模块处理,确保数据的稳定传输。Stream 1 Rx 处理 Camera1 数据流,Stream 2 Rx 处理 Camera2 数据流...(依次类推)。每个Rx独立工作,保证多通道数据的高效传输。经过Rx处理后的8路数据流被存储到ZYNQ PS端的DDR4中。DDR4作为高速缓存,保证数据不会因为带宽限制而丢失。存储的数据可用于进一步处理,如,直接传输到上位机进行显示或存储。

这里8路相机,每个相机大概分配不超过128MB的缓存,主要用于视频监控。8路计算结果合并成1路通过DMA存储到PS DDR内存,软件读取的时候按照存储顺序对计算结果机型划分。

图 10 ISP处理

Block Design说明

如图 11 所示,Block Design 的核心部分由 cxp_phy 和 cxp_rx 组成。其中,cxp_phy 负责 CXP 链路的物理层解析,包括信号处理和数据恢复,并将数据转换为标准的图像格式;cxp_rx 则对 cxp_phy 解析后的图像数据进行拆分和接收。

图 11 核心模块

图 12 展示了 cxp_phy 的内部结构,主要由 ext_phy 和 cxp_host 组成:

  • ext_phy 实现 CXP 物理层处理;
  • cxp_host 负责 CXP 协议解析,并输出图像数据。

本设计采用两个 ext_phy 模块,实现八路 CXP 相机的输入。cxp_host 输出的 dma_data[511:0] 包含所有八路相机的数据,每个相机的数据位宽是64位。其中:

第1路相机数据:dma_data[63:0]

第2路相机数据:dma_data[127:64]

......

第8路相机数据:dma_data[511:448]

此外,数据流控制信号定义如下:

  • dma_ready[7:0]:指示下游模块是否已准备好接收对应通道的数据。
  • dma_valid[7:0]:表示当前时刻对应相机的数据是否有效。
  • dma_sop[7:0](Start of Packet):标识新帧的起始,仅在帧的第一行首个像素时拉高。
  • dma_eol[7:0](End of Line):标识一行数据的结束,在每行最后一个像素时拉高。

图 12 cxp_phy Block Design

图 13 cxp host图像输出端口

如图 14 所示,cxp_rx 内部通过 video_to_axis 模块,将八路图像数据拆分,并转换为 AXI Stream 格式。如果需要对某一路相机的数据进行图像处理,只需复制该通道的 AXI Stream 数据并送入图像处理模块。复制操作可通过简单的组合逻辑实现,只需在 Block Design 中添加复制模块,并分别连接至图像处理模块和原有模块。

图 14 cxp rx Block Design

cxp_rx 还包含 Rx,用于将接收到的图像数据缓存至 DDR,如图 15 所示。

图 15 rx Block Design

如图 16 所示,ssi 数据输出部分的 Block Design 采用自定义的 axi_stream_generate 模块生成 AXI Stream 数据,并通过 axis_broadcaster 进行分流:

  • 一路数据进入 axi_stream_FIFO,供上位机监测;
  • 另一路通过 axis_to_uart 模块转换为串口数据,并通过 RS485 传输至 ssi 板卡。

在实际应用中,可将 axi_stream_generate 模块替换为用户的图像处理模块,确保处理后的图像参数输出符合 AXI Stream 格式,并连接至 axis_broadcaster 以实现数据分流。

图 16 ssi数据输出Block Design

软件方案

嵌入式层

嵌入PS的Linux系统驱动PL IP核,通过AXI总线控制Rx,实现内存到网络的数据搬运。嵌入式系统基于ZYNQ架构,PS端运行Linux系统,并包含相应的网络驱动。图像数据采集后,通过CXP Host模块解析并整理成AXIS数据流,随后传输至PS端的DDR4缓存区,等待上位机读取。

上位机软件(C#)​

hello-fpga会提供C++/C# API接口,提供8个相机控制、显示的C# 范例,这里8路相机默认使用相同的配置,如果需要每个相机进行不同的配置,可以修改范例程序得到。

上位机软件基于C++/C#开发,主要包含设备管理、参数配置、实时显示及数据存储模块。上电后,上位机首先执行设备扫描,读取相机的设备信息。基于厂商提供的XML文件解析相机配置参数的地址和格式,并进行初始化配置。

在采集启动前,上位机会根据检测到的相机数量,动态分配 Rx 的缓存空间,并发送启动命令。采集过程中,上位机定期查询 Rx 的缓存状态,并从中读取数据,实时解码并显示在界面上。此外,界面右侧实时更新可用帧数,确保数据流畅显示,并支持用户参数调整和存储功能。

图 17 C# 范例界面图

启动与相机扫描

8个相机控制、显示的C# 范例如图9所示,上电后,软件首先执行 Scan Cameras 操作,以检测并识别系统中可用的CXP相机。扫描流程如下:上位机会向每个连接的相机发送查询命令,并从相机端读取一系列关键寄存器信息,如,厂商名称、型号、制造信息、固件版本等。

为了正确解析相机参数,上位机会根据不同厂商的XML配置文件解析相机的参数结构,获取XML文件中的寄存器地址映射,获取参数存储地址和数据格式。

根据扫描结果,动态创建相机实例,存储相机相关信息,以便后续参数配置和数据采集。

参数配置

在成功扫描到相机后,用户可以在右侧参数面板中配置相机的工作模式,参数包括:

  • 图像尺寸

Image Width(ROI_X):设置横向分辨率。

Image Height(ROI_Y):设置纵向分辨率。

  • 帧率控制

Acquisition Frame Rate:设置采集帧率(FPS),影响数据吞吐量。

  • 触发模式

Trigger Source:选择触发信号源,如**软件触发、外部触发(IP Line0)**等。

  • 曝光设置

Exposure Mode:设置曝光模式(自动/手动)。

Exposure Time(μs):手动模式下的曝光时间,单位为微秒。

  • 图像增强

Camera Gain:调整增益,提高低亮度场景下的图像清晰度。

Black Level:设置黑电平,提高图像对比度。

  • 采集模式

TakeContinueMode(连续模式):启用后,相机会持续采集数据,直到用户手动停止。

Trigger Mode(触发模式):仅在收到触发信号时采集图像。

数据可视化

在用户点击 Start 按钮后,系统进入正式的数据采集流程:

(1)动态分配Rx缓存

由于不同相机的分辨率、帧率可能不同,为了优化内存使用,上位机会根据读取扫描到的相机数,动态分配 Rx 缓存空间。计算每个相机的数据吞吐量,合理分配DDR4存储区域,避免溢出或带宽瓶颈。为每个相机创建独立的缓存队列,保证数据存储有序。

(2)实时数据传输、显示

如图10所示,为8个相机采集画面的截图(只装了两个镜头,其余相机机盖未打开显示为黑色画面)。上位机不断查询 Rx 缓存中的数据量,即当前可读取的帧数。当缓存中有新数据时,上位机会将其读取并进行解码,采集到的数据会通过图形界面显示,每个窗口对应一个相机的数据流。右侧"Available Frames"区域会动态显示当前可用帧数,帮助用户监测数据采集状态。

(3)数据停止与存储

当用户点击 Stop 按钮时,系统会: 停止向 Rx 发送新的采集请求。读取并存储剩余的缓存数据,确保数据完整性。释放动态分配的缓存空间,提高系统资源利用率。

图 18 采集图像演示

相关推荐
爱凤的小光6 小时前
2D视觉系统选型(待补充)
数码相机
计算机程序设计开发11 小时前
相机租赁网站基于Spring Boot SSM
spring boot·后端·数码相机·毕设·计算机毕设
BBTSOH1590151604417 小时前
Vicon MX40 光学动作捕捉摄像机
数码相机·vr·虚拟现实·定位·光学·动作捕捉·光学动捕
想要打 Acm 的小周同学呀21 小时前
相机推流到网页中播放
数码相机
isyoungboy1 天前
双目立体视觉的3D重建全流程
数码相机·3d
棪燊2 天前
Blender多摄像机怎么指定相机渲染图像
数码相机·blender
硬件进化论2 天前
从基础到实践(二十三):MCU选型设计指南
单片机·嵌入式硬件·数码相机·电脑·硬件工程·智能手表·智能电视
Σίσυφος19002 天前
Tof 深度相机原理
数码相机
云钥科技4 天前
云钥科技多通道工业相机解决方案设计
数码相机