系列文章目录
1.非制冷红外探测器片上非均匀校正(on-chip offset calibration OOC)技术应用分析
2.非制冷红外探测器驱动模块设计与实现
文章目录
前言
本系统采用基于FPGA+ARM架构的Zynq-7000系列芯片作为核心处理器开展红外相机机芯设计,该方案通过FPGA实现红外探测器时序控制、信息采集、数据传输、图像处理和PS端实现互联,ARM作为数据传输单元对VDMA进行初始化、驱动设置以及基于UDP协议的千兆以太网数据传输模块设计,并对基于QT的红外视频上位机进行设计。
一、基于Zynq的总体架构设计
笔者设计的非制冷红外成像系统采用基于Zynq的结构,系统主要由非制冷红外焦平面探测器、信号转接电路、电源供电电路、时序控制及图像采集模块、图像数据处理、DDR3存储、以太网传输和PC机显示部分组成,其中以太网传输部分,利用UDP协议通过以太网实现红外视频数据传输,并实现千兆以太网数据传输,总体框架如图1A所示,Zynq硬件平台实物如图1B所示。
图1A:红外成像系统总体框架
图1B:Zynq硬件平台实物图片
二、红外视频传输处理软件设计
PL端完成探测器时序驱动及图像采集,获取有效的14位原始红外图像数据,并将有效视频数据进行处理,转换为RGB888的格式,再将视频数据转换为AXI4-Stream格式的视频流,为后续VDMA与DDR3之间的通信提供便利,视频数据进入VDMA IP,VDMA利用AXI4接口实现与PS端进行数据交互,将视频数据写入DDR3中。
AXI4-Stream IP核是官方提供的 IP核,主要将探测器采集的并行红外视频信号转换成AXI-Stream流视频协议接口。在Zynq中,方便使用VDMA IP来将PL端采集的视频数据直接缓存到PS端的DDR3中。Video into AXI4-StreamIP的接口如图2所示。其中Vid_data接口主要用于传入视频数据, Vid_active_video接口用于标志有效的视频数据,Vid_hsync接口接收视频行同步信号,Vid_vsync接口是视频场同步信号,Vid_io_in_ce接口为输入视频数据时钟使能,Vid_io_in_clk接口将IP时钟与红外视频时钟同步,Vid_io_in_reset接口为此IP的复位信号。
图2 Video into AXI4-Stream IP的接口
为更好理解输出信号AXI-Stream流的格式,必须了解AXI-Stream总线的时序。 AXI-Stream 总线的工作时序如图3所示。AXI总线最主要的信号是ACLK、DATA、VALID、READY、EOL 以及SOF。传输视频数据时,只有在ACLK的上升沿,READY和VALID同时为高电平时,才会进行有效视频数据的传输,数据传输是按照packet为单位进行的,每个 packet 包含一帧视频中的一行像素数据,在每个packet的最后一个像素处,EOL会被置为高电平来标记一行的结束,如果此packet为一帧的第一个packet,在当前packet的第一个像素处将SOF置为高电平。
图3 AXI-Stream 总线工作时序
本方案中VideointoAXI4-Stream IP 的每个时钟的像素个数、视频输入格式、输入输出像素宽度、FIFO深度以及时钟模式的设置如图4所示。
图 4 VideointoAXI4-Stream IP的设置
三、红外视频传输存储设计
传输红外视频时采用以太网传输技术,但探测器采集的原始数据量比较大,因此需要对视频数据进行缓存。笔者采用了Xilinx 提供的软核IP AXI VDMA,该IP可将AXI Stream格式的视频流与Memory Map格式进 行相互转换,从而实现与DDR3通信。VDMA核中具有图像缓存技术中的多帧缓存以及动态同步锁相机制,能够防止显示视频出现图像割裂或者其他情况发生,是升级版的DMA。如图5所示为多帧缓存工作机制。动态同步锁相机制是读取和写入视频数据分别操作不同的帧存,从而避免冲突PS端读写冲突。
图5 VDMA核多帧缓存工作机制
本方案中整体传输方案设计如图6所示。Video into AXI4-Stream IP输出的AXI-Stream流视频数据通过VDMA写入到DDR3缓存器中,再由PS端在缓存器中读出利用以太网传输视频数据到上位机。视频传输缓存设计如下图6所示。
图6 视频传输缓存设计
在AXI VDMA中,包括控制和状态寄存器、数据搬运模块、行缓冲等几部分构成,如图7所示。视频数据进出DDR3存储器时需利用行缓冲进行缓存,数据搬运模块则控制寄存器读取或写入数据,实现对数据的搬运。通过读取状态寄存器,可获取VDMA当前工作状态。通过些模块的协作,AXI-Stream视频信号可以有效地转换为 Memory Map格式,保存到DDR3中。
图7 VDMA内部框图
本方案中,VDMA IP的基础配置如图8所示,高级配置如图9所示。在 VDMA Basic选项卡中,地址线宽度(AdderssWidth)设置AXI4总线可以访问的地址范围,笔者采用DDR3只有512MB,因此将其配置为32位;在帧缓存(Frame Buffers)的设置上,笔者选择了3帧的缓存数量,这一配置可以有效避免写入帧重叠到读取帧上的问题,同一时刻读写帧缓存数据组合为 Frame0/Frame2、Frame1/Frame0、Frame2/Frame1;数据线宽度(MemoryMapDataWidth)用于设置AXI4接口的数据位宽,位宽越大通信速度越高,但总线的占有率也会更高,因此一般设置为64位;为了配置AXI总线的写通道突发数量的大小,WriteBurstSize和ReadBurstSize设置为64位;Stream流数据位宽(Stream Data Width)设置为32位,这与本方案中格式转换模块输出的视频流数据位宽相对应, 从而保证数据的精确对齐。LineBufferDepth主要设置AXI4-Stream视频数据流的缓存大小,即设置FIFO的大小,用于缓存视频流数据每一行数据的buffer深度,一般越大越好,这里设置为512。在VDMA Advanced选项卡中,对读写通道进行配置,读写通道帧同步(FsyncOptions)有三个选项none、s2mmfsync以及s2mmtuser,在此系统中选择的是none。
图8 VDMA IP基础配置
图9 VDMA IP高级配置
四、PS端软件设计
FPGA的PS端采用C语言对该该部分的软件进行设计,主要对VDMA IP核的初始化及读写控制和以太网传输模块的设计,从而实现DDR3中数据利用网口发送到上位机显示。本方案需要通过VDMA对存储器DDR3进行快速访问,将处理后的红外数据写入DDR3中,因此在SDK中需要对VDMA进行配置,需要根据每一帧红外图像的大小以及每个像素值的位数去设置各个寄存器的值,探测器分辨率为640× 512,因此设置垂直方向为512,水平方向为640,在PL部分设计中,需要配置VDMA IP的帧缓存个数为3,设置3个帧起始地址,采用自动地址分配,采用库函数的方式对VDMA寄存器进行配置。
UDP的配置及主程序流程图如图10所示。当系统上电或者复位时,首先对UDP协议栈与外围以太网接口进行初始化,调用库函数对协议栈进行初始化,主要是对开发板的MAC地址、IP地址、子网掩码以及网关信息进行定义。接着通过UDP协议进行网络连接,连接前需要先创建新的pcb*,分配内存空间给pcb,再连接到指定的端口。网络连接成功后,建立UDP接收回调函数,其功能为接收上位机的UDP命令,并判断是否是自定义协议。当系统接收到上位机的 询问命令,系统发送应答信息,当接收到上位机的获取数据命令,系统开始发送图像数据。为了防止产生丢包以及提高传输质量,本方案中对红外视频数据进行分包处理。
图10 UDP的配置及主程序流程图
UDP 协议发送数据流程图如图11所示。系统开始调用发送数据函数 transfer_data时,首先判断发送数据长度len大于udp8080_qlen时,若是,继续判断 udp8080_q是否等于1,若等于,则释放udp8080_q内存空间,并重新给udp8080_q分配空间,之后将视频数据复制到udp8080_q缓冲区,并调用udp_sento发送缓冲区数据,从而完成一次UDP视频数据传输。
图11 UDP发送数据流程图
上位机软件在整个非制冷红外成像系统中实现红外视频的实时显示。本方案设计的上位机是基于Qt进行的,通过UDP socket实现对下位机的控制和视频数据传输。如图12所示位红外视频显示上位机设计流程,在上位机应用程序获取的红外视频如图13所示。
图12 上位机红外视频显示设计流程
图13 上位机应用程序获取的红外视频
总结
本文较详细的介绍了如何利用Zynq平台,在PL端和PS端相互配合条件下,实现基于UDP协议的千兆以太网红外视频传输的设计与实现。
标签:视频,UDP,缓存,Stream,IP,千兆,红外,VDMA,以太网 From: https://blog.csdn.net/chuangan77/article/details/143811778