APP下载

基于FPGA的千兆以太网实时图像采集与传输系统设计

2022-09-16肖顺文

关键词:IP地址字节以太网

郑 瑞,肖顺文,王 涌

(西华师范大学 电子信息工程学院,四川 南充 637009)

电子技术飞速发展,图像数据的采集与传输渗透到了生活的各方面,如视频广播、汽车无人驾驶、医疗机器人等。FPGA由于其出色的稳定性与可靠性,在图像处理领域得到广泛应用。千兆以太网具有高速率、高可靠性、远距离传输的优点,非常适合传输数据量大的图像数据[1]。

王琦[2]、张威[3]通过对TCP/IP协议进行研究完成高速以太网接口设计;胡兵[4]、王新颖[5]采用SOPC架构,吕俊杰和武杰[6]、宋仕坤[7]采用FPGA+ARM架构,利用软硬协同方式设计千兆以太网传输系统;余鹏炜等[1]利用UDP协议实现高速图像数据传输系统设计。考虑到TCP/IP协议较UDP协议在硬件实现上困难,利用软硬结合的方式对开发者的要求高和没有专门的上位机来接收传输的图像数据等问题,本文以UDP作为通信协议,通过GMII接口实现FPGA与千兆以太网PHY芯片结合,同时提出千兆以太网传输模块分层、分模块的硬件实现方法,并开发上位机实时接收并显示图像。经仿真测试验证,该系统不仅能够实现图像采集、数据缓存、千兆以太网图像传输、上位机实时接收与显示等功能,而且运行稳定、可移植性强[1-10]。

1 设计原理与结构

采用模块化的设计思想将整个系统划分为图像传感器初始化模块、图像数据捕获模块、FIFO数据缓存模块、上位机显示模块。通过编写SCCB总线协议配置OV5640图像传感器,输出RGB565格式的图像数据,实现图像采集。通过千兆以太网传输模块实现图像传输,上位机接收数据并进行实时显示。千兆以太网模块中物理层的实现采用PHY芯片RTL8211EG;数据链路层(MAC)将待发送的数据封装成以太网数据帧;网络层(IP)负责分割和重新组合数据包,进行不同网络系统间的路径选择;传输层(UDP)将数据组织成数据段,用一个寻址机制来标识一个特定的应用程序(端口号)。

系统设计整体结构如图1。首先,通过编写SCCB总线协议对OV5640图像传感器进行初始化配置,控制其输出RGB565格式的图像数据流;待图像传感器初始化完成后,FPGA接收来自图像传感器的图像数据,利用FIFO存储器对数据进行缓存,当FIFO中的数据足够以太网发送一次时,便启动以太网进行数据发送;从FIFO中取出数据,对数据进行封装,添加UDP信息,封装成UDP数据报发送给网络层;网络层通过添加IP协议信息,封装成IP数据报发给数据链路层MAC;数据链路层通过添加前导码、帧开始符等以太网帧信息,将封装后的以太网数据帧发送至物理层;最后数据由CAT 6网线传输至PC端,由上位机接收并进行实时图像显示。

2 系统设计

2.1 系统电路

整个系统包括摄像头初始化、PLL时钟产生、图像数据捕获、FIFO数据缓存、千兆以太网传输、上位机显示6个模块,系统电路如图2所示。本系统采用的是“自顶而下”的设计方式,首先将系统划分为各个子模块,然后分别对各个模块进行设计,设计完成后通过例化将各模块进行连接,最终实现摄像头图像采集、千兆以太网传输、上位机显示系统。

2.2 硬件设计

硬件设计包括图像传感器模块和千兆以太网模块。图像传感器模块采用OmniVision公司生产的CMOS 图像传感器:OV5640,最高500万像素图像输出能力,带双LED补光灯,支持自动变焦功能,具有非常高的性价比。千兆以太网模块中的PHY芯片采用Realtek瑞昱公司的RTL8211EG,是一款高集成的网络接收芯片,符合10 Base-T,100 Base-TX和1000 Base-T IEEE 802.3标准,支持10/100/1000 Mbps网络传输速率,传输速率自动匹配。FPGA与物理层的连接采用GMII接口,相对于RGMII接口而言,GMII接口编码实现简单,可降低系统设计难度。

2.3 软件设计

系统软件设计部分包括对摄像头进行初始化配置、图像数据捕获、FIFO数据缓存、千兆以太网传输、上位机设计。首先,通过编写SCCB总线协议完成摄像头内部寄存器配置,然后数据捕获模块接收摄像头传输的数据并加以处理,输入FIFO存储器中,当FIFO中的数据够以太网发送一次时,千兆以太网模块便从FIFO中取出数据进行传输,最后由上位机接收数据并实时显示。

2.4 SCCB总线设计

为保证图像传感器OV5640能够正常工作,需要设置分辨率、亮度、内部时钟、色差等参数[11]。OmniVision公司为了实现Camera控制,设计开发了一种类似于I2C总线的同步串行总线,即SCCB(Serial Camera Control Bus),其具有SCL(时钟信号)和SDA(数据信号)两个信号。图像传感器利用SCL和SDA实现对寄存器的配置,以达到预期配置的视频流输出[11]。SCCB写时序和I2C写时序一致,但是读时序和I2C有所差别,差别在于SCCB要产生一个停止位后才能产生第二个起始位。SCCB写时序图如图3所示,SCCB读时序图如图4所示。

2.5 图像数据捕获模块设计

在OV5640初始化完成之后,图像数据经过DVP(Digital Video Port,数字视频接口)被传输给FPGA芯片[11]。图像数据捕获模块如图2系统电路中的Ctrl_FIFO_in,Clk_cmos为PLL锁相环产生时钟24.02 MHz,通过assign赋值语句直接赋给摄像头正常工作所需时钟Cmos_xclk。Cmos_pclk、Cmos_href、Cmos_vsync、Cmos_din分别为摄像头输出时钟48.04 MHz、行信号、场信号、图像数据。该模块的作用包括为摄像头工作时钟和对图像数据进行预处理。为避免数据在千兆以太网传输过程中发生错误导致显示图像压缩,需要对每一行图像数据进行编号,在每一行图像数据之前加上2个字节的行号,接收时根据编号来确定传输的具体是哪一行数据,再将数据放在具体位置进行显示。

2.6 千兆以太网模块设计

千兆以太网系统的实现方式主要有:1)利用千兆以太网IP核,配合专用的PHY芯片实现数据传输;2)利用专用的网络集成芯片,内部集成MAC和PHY的功能,实现以太网数据传输。前者不仅价格昂贵,而且配置不灵活;后者传输速度不高[1]。为此,本文采用分模块化的方法设计了一种基于FPGA的千兆以太网系统,将整个千兆以太网模块拆分为PHY模块、MAC模块、IP模块、UDP模块,同时将目的MAC地址、源MAC地址、目的IP地址、源IP地址、目的端口、源端口等用端口引出,当应用环境发生变化,只需在顶层模块中修改端口参数,使得模块的灵活性、可移植性增强。

2.6.1 MAC模块设计

MAC层在物理层提供比特流数据的基础上,将比特信息封装成数据帧Frame。以太网数据帧的基本格式如图5。

图5 以太网帧基本格式

当启动以太网发送时,首先发送7个字节的前导码8′h55,然后发送1个字节的帧开始符8′hD5,接着分别发送6个字节的目的MAC地址和6个字节的源MAC地址,再发送2个字节的长度/类型字段和46~1500个字节的数据,最后发送4个字节的FCS校验字段[12-16]。

MAC模块如图2系统电路图中MAC_GMII,设计时采用状态机加线性序列机的方式,同时为了实现模块的复用,将数据长度Lenth、目的MAC地址Receive_MAC_addr、源MAC地址send_MAC_addr、长度/类型字段Num_lenth_type、FCS校验字段Check_num进行参数化设计,作为独立的端口进行引出,当应用于其他环境时,只需在顶层模块中修改端口参数即可。

2.6.2 IP模块设计

IP数据报格式如图6。本设计中IP版本采用IPv4;首部长度为5个32位的数共20个字节;服务类型采用普通模式;总长度为待发送数据的长度+IP报头长度;当数据量超过65 536个字节时需要对数据进行分片发送;生存周期为数据能够经过最多得路由器个数;上层协议表示数据采用何种协议进行传输,本设计采用UDP协议;报头校验和对数据进行校验,当数据错误,采取丢弃该包数据并启动重传操作[12,14]。源IP地址表示发送方的IP地址,目的IP地址表示接收方的IP地址。

图6 IP数据报格式

IP模块如图2系统电路图中IP,设计时采用状态机加线性序列机的方式,同时为了实现模块的复用,将数据长度Data_Lenth、目的IP地址Receive_IP_addr、源IP地址Send_IP_addr作为独立的端口引出,当应用于其他环境需要改变数据发送长度与IP地址时,只需在顶层模块中修改参数即可。

2.6.3 UDP模块设计

UDP是User Datagram Protocol的简称,中文名是用户数据报协议,是OSI参考模型中一种无连接的传输层协议,提供面向事务不可靠传送服务,发送方只负责将数据发送出去,而不管接收方是否正确接收。UDP协议的主要作用是将网络数据流量压缩成数据包的形式,用来支持需要在计算机之间传输数据的网络应用[2]。UDP格式如图7。

图7 UDP格式

UDP协议使用端口号为不同的应用保留其各自的数据传输通道,采用这一机制可实现在同一时刻内多项应用同时发送和接收数据。数据报长度包括报头和数据部分在内的总字节数,报头长度固定为8个字节,数据部分长度根据操作环境的不同而各异。UDP协议使用报头中的校验值来保证数据的安全,但检测到错误时,UDP并不做错误校正,只是把损坏的消息段扔掉,或者给应用程序提供警告信息,因此为了简化设计,在传输层不进行数据的校验。

UDP模块如图2系统电路图中UDP,设计时采用状态机加线性序列机的方式,同时为了实现模块的复用,将数据长度UDP_Lenth、目的端口号Receive_UDP_addr、源端口Send_UDP_addr作为独立的端口进行引出,当应用于其他环境需要改变数据发送长度与端口号时,只需在顶层模块中修改参数即可。

3 仿真测试

编写Testbench测试代码,设置发送指令为(China West Normal Univerity),源MAC地址Send_MAC_addr为(48′h98_76_54_32_10_ab),目的MAC地址为Receive_MAC_addr为(48′hff_ff_ff_ff_ff_ff),源IP地址Send_IP_addr为(32′ha9_fe_d6_01),目的IP地址Receive_IP_addr为(32′ha9_fe_d6_f8),源端口号Send_UDP_addr为(16′h13_88),目标端口号Receive_UDP_addr为(16′h17_70),从仿真波形图8看出仿真结果与设计完成一致,符合设计要求。

将整个系统移植到AC620开发板,并配合OV5640图像传感器模块和ACM8211以太网模块进行下板测试。通过Wireshark抓包工具对以太网数据包进行抓取,抓包结果如图9所示,源IP地址、目的IP地址、源端口号、目标端口号与设置相同,抓取的数据长度为27个字节,抓取指令与发送指令一致。同时,使用网络调试助手接收千兆以太网模块发送的指令,如图10所示,每按下按键执行1次指令发送,测试时每次都能成功接收指令,证明千兆以太网模块功能实现正常。如图11所示,上位机能够接收图像数据并实时显示,证明整个系统功能满足设计要求。

4 结束语

整个系统以AC620 FPGA开发板作为平台,配合ACM8211以太网模块和OV5640图像传感器,实现了图像采集、FIFO数据缓存、千兆以太网传输、上位机实时显示的功能,并提出一种千兆以太网传输模块的设计方式,将原本1个大的模块拆分为3个模块来实现,使得编码难度降低,可移植性增强。通过仿真测试,该系统运行最高频率达135.34 MHz,且系统数据传输稳定,可将整个系统直接运用于高速、远距离、大数据量的图像数据传输实际应用中。

猜你喜欢

IP地址字节以太网
No.8 字节跳动将推出独立出口电商APP
基于1500以太网养猪场的智能饲喂控制系统的设计与实现
铁路远动系统几种组网方式IP地址的申请和设置
No.10 “字节跳动手机”要来了?
基于MSP430的四旋翼飞行器的S-BUS通信协议的设计与实现
基于SNMP的IP地址管理系统开发与应用
谈实时以太网EtherCAT技术在变电站自动化中的应用
公安网络中IP地址智能管理的研究与思考
《IP地址及其管理》教学设计
浅谈EPON与工业以太网在贵遵高速公路中的应用