集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 135|回复: 3

基于FPGA的GigE Vision相机图像采集方案设计

[复制链接]
dameihuaxia 发表于 2024-10-29 09:44:17 | 显示全部楼层 |阅读模式
1 概述
        GigE Vision是一个比较复杂的协议,要在FPGA中完全实现具有较大的难度。如果FPGA作为接收端希望实现GigE Vision相机的配置和图像采集功能,则只需要实现其中小部分功能即可。本文对原有GigE Vision协议的结构进行了裁剪,仅保留设备搜索、寄存器配置和图像采集三个主要功能。并在FPGA中成功实现了对Basler GIGE相机的配置和图像实时采集。

2 GigE Vision协议
        GigE Vision协议包含GVCP(GigE Vision Control Protocol)和GVSP(GigE Vision Streaming Protocol)两部分。其中,GVCP负责对相机进行配置,GVSP负责控制图像数据的传输。

2.1 GVCP协议
    GVCP协议规定了应用程序通过以太网配置和控制外部设备的准则,设备的配置过程采用了指令(CMD)和应答(ACK)的方式。以外部主机和相机为例,首先,主机通过以太网向相机发送指令包,然后等待相机返回当前指令的应答包;相机接收到指令包后执行相应的操作,而后向主机返回应答包。主机收到应答包后,根据应答包中的状态信息判断指令是否执行成功,若执行成功则继续发送下一个指令包,否则重新发送当前指令包。该方式弥补了UDP协议面向无连接的缺点,保证了数据传输的完整性和可靠性。

    GVCP包含两种格式的数据包:指令包和应答包,指令包首部为:



        在指令包首部中,0x42为GVCP指令包的固定字段,flag字段包含了不同指令的特定信息,command字段代表指令的类型,length字段代表指令包中除首部外,载荷数据的长度(单位:字节),req_id代表指令包的序号。

        应答包首部为:



        在应答包首部中,status字段代表指令包的执行状态,acknowledge字段代表应答包的类型,length字段代表应答包中除首部外,载荷数据的长度(单位:字节),ack_id代表应答包的序号。

        设计中使用了两种指令包:设备搜索(DISCOVERY)和写寄存器(WRITEREG)。

2.1.1 设备搜索(DISCOVERY)
        设备搜索指令用于接收端(FPGA)寻找所在的子网中的GIGE发送设备(相机)。通过搜索指令DISCOVERY_CMD实现。

搜索指令包格式:



        设计中的搜索指令包格式为:



         对应的搜索应答包DISCOVERY_ACK为格式:



        在搜索应答包中,包含了相机的各个主要参数,包括相机的生产商、版本、名称、序列号、IP地址、MAC地址等信息,载荷数据的长度为248字节。设计中所关心的是相机的IP地址和MAC地址信息,其中MAC地址位于载荷数据的第11~16字节部分,IP地址位于第37~40字节部分。

2.1.2 写寄存器(WRITEREG)
        写寄存器指令用于配置相机的参数,通过WRITEREG_CMD指令实现。

        写寄存器指令包格式:



        在写寄存器指令包中,register_address字段代表32位的寄存器地址,register_data字段代表所要写入的32位寄存器值。在设计中,每次只配置一个寄存器,因此只包含一个register_address和register_data字段。

vision
pytorch/vision: 一个基于 PyTorch 的计算机视觉库,提供了各种计算机视觉算法和工具,适合用于实现计算机视觉应用程序。
项目地址:https://gitcode.com/gh_mirrors/vi/vision
        因此,设计中的写寄存器包格式如下:



        对应的写寄存器应答包WRITEREG_ACK格式:



        在应答包中,status字段的值为0x0000,代表写寄存器指令执行成功,index字段代表配置成功的寄存器个数,对于每次配置1个寄存器而言,该字段的值为0x0001。

        因此,设计中的写寄存器应答包格式如下:



2.2 GVSP协议
         GVSP协议规定了GVSP发送方向GVSP接收方传输图像数据和图像信息的一系列准则。GVSP协议以数据块(Data Block)为单位进行数据传输,通常使用标准传输模式。该模式包含3种格式的数据包:头数据包(Data Leader Packet)、载荷数据包(Data Payload Packet)和尾数据包(Data Trailer Packet),头数据包和尾数据包作为每个数据块的首尾界定,不包含图像数据;载荷数据包则作为数据块中数据的传输载体,包含了有效的图像数据。



        3种数据包具有相同的GVSP首部,格式如下:



        在GVSP首部中,status字段代表数据包的状态,block_id代表数据块的序号,packet_id代表当前数据块中数据包的序号(头数据包的packet_id总为0),packet_format字段代表数据包的类型(头数据包、载荷数据包、尾数据包)。EI字段代表扩展block_id和packet_id的标志位,当EI=0时,block_id为16bit,packet_id为24bit,此时的首部长度为8字节;当EI=1时,block_id为64bit,packet_id为32bit,此时的首部长度为20字节。

        设计中不对头数据包和尾数据包进行处理,仅根据packet_format字段从数据流中提取包含图像数据的载荷数据包,并由EI位判断首部的长度,准确剥除载荷数据包的首部后,便可得到有效的图像数据。为了保证图像传输的实时性,不对status字段进行判断,对于传输错误的图像数据仍作为有效数据输出。

3 UDP IP协议
        GigE Vision是基于UDP协议进行数据传输的。因此,要实现FPGA与相机间的GVCP和GVSP通信,还需要设计网络通信协议。按照GigE Vision协议的要求,需要设计的网络协议还是比较多的。从FPGA与相机之间实现点对点数据传输的角度出发,只要实现基本的UDP 、IP和MAC三种协议即可。由于相机可以设置为固定IP地址,而且相机的IP地址和MAC地址都可以通过FPGA发送DISCOVERY指令获取。所以ARP协议可以不在FPGA中实现。

        对于UDP和IP协议,只需要实现UDP和IP首部的添加和移除功能,其他功能可以不做。MAC协议在FPGA厂商的开发环境中均提供了IP。当然自己也可以设计一个MAC,只需要实现基本的MAC首部移除、添加以及CRC32校验功能即可。

4 FPGA工作流程
        从相机的配置到图像的采集整个流程为:



        可分为5个步骤,具体过程如下:

    (1)FPGA向其所属子网发送UDP广播包搜寻所连接的相机。GVCP的UDP端口号为3956,除此之外,FPGA和相机的IP地址必须属于同一个子网段,否则相机将无法应答搜索包。

    (2)FPGA等待相机返回应答包,并从中提取相机的IP地址和MAC地址,作为发送数据包的IP首部和MAC首部中的目的地址。

    (3)FPGA发送写寄存器指令包,依次配置相机的各功能寄存器,对其工作参数进行设置。

    (4)FPGA发送写采集使能寄存器指令包,触发相机进行图像采集和传输。

    (5)FPGA从相机接收GVSP数据包,从中提取出有效的图像数据。
雷1314521景 发表于 2024-10-29 16:50:29 | 显示全部楼层
基于FPGA的GigE Vision相机图像采集方案设计
http://www.fpgaw.com/forum.php?m ... 6&fromuid=59831
(出处: fpga论坛|fpga设计论坛)

点评

海!外直播 bitly.net/nnnxx 禁闻视频 bitly.net/nvvvn 一个国家有三千所普通大学,学生大多自费;但却有6000所党校是花纳税人的钱办学,学生全都用纳税人的钱上学!令人发指的是它们的毕业生犯罪率几乎百分之百!  发表于 2024-10-30 07:55
大鹏 发表于 2024-11-1 13:42:48 | 显示全部楼层
基于FPGA的GigE Vision相机图像采集方案设计
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-11-23 11:53 , Processed in 0.058024 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表