APP下载

基于FPGA的USB3.0高清视频传输系统的设计

2019-09-20

测控技术 2019年3期
关键词:时钟高清像素

(长沙理工大学 物理与电子科学学院 湖南 长沙 410114)

随着信息化时代的到来,人们对视频画面的细腻程度要求越来越高,因此实时传输高清视频图像成为一种趋势[1]。USB接口作为生活中最普遍的接口,在图像传输中扮演着不可或缺的角色,而传统基于USB2.0接口的传输模块一般将视频压缩后进行传输,以牺牲画面质量完成图像的传输,其传输效率已经不能满足市场的需求。随着USB3.0协议的发布,其理论速度达到了5 Gbit/s,以优于USB2.0 480 Mbit/s 10倍的速率,成为高清视频传输的新宠。国内市场视频传输系统多采用标准串行接口,而采集DVI 接口的高清视频,以5 Gbit/s的吞吐量传输多种格式高清视频的产品较少,因此研究一种基于USB3.0的高清视频传输系统具有一定的应用价值。

1 系统简介

整个系统至下而上是由DVI接口模块、FPGA控制模块、SDRAM、USB3.0模块和上位机组成,系统框图如图1所示。

视频源通过DVI接口芯片,将视频转换为行、场、同步信号和RGB数据传输给FPGA,FPGA控制一片SDRAM进行缓存,完成与USB3.0模块的数据交换,之后CYUSB3014芯片将数据通过USB micro-B接口和USB3.0协议发送至PC端显示。

视频图像传输的基本流程可分为三步:

① 完成一帧视频图像数据的采集;

② 完成一帧视频图像数据的缓存;

③ 完成一帧视频图像数据的发送。

图1 系统设计方案框图

循环此基本流程即可构成系统的整个工作流程,同样,基本流程的的吞吐量就是整个系统的数据吞吐量。完成高清视频传输的关键是系统数据传输吞吐量,能满足高清视频的采集速率,也就是系统缓存和发送吞吐量满足视频数据的采集速率。

完成定性分析之后,需要对每个模块进行一个准确的定量分析。

吞吐量的数学计算公式[2]为

(1)

式中,Total_data为一帧图像的比特数(bit);Total_lantency为采集或传输一帧图像需要的时间(s)。

显然,直接传输24bit的RGB视频数据时,TP_USB3_0

高清视频源经DVI接口模块采集视频数据之后传给FPGA进行视频编码,FPGA将编码后的视频数据缓存在SDRAM中[3],并使用两个容量为1024×32-bit的异步FIFO进行视频数据的跨时钟域交换,然后通过USB3.0芯片将数据发送到PC端进行显示。不同模块所处的时钟域如图2所示。

图2 各模块所处时钟域

2 FPGA控制逻辑设计

FPGA控制逻辑设计包括采集DVI视频数据时的视频格式识别和编码、控制SDRAM进行视频数据缓存、控制异步FIFO进行跨时钟域传输[4]。

2.1 视频格式识别和编码

目前主流的视频格式如表1所示,每一种都有其固定的频率和像素点,可根据其有效像素频率分别计数视频的长度和宽度,通过查表1,可识别目标视频格式,并产生相对应的编号,插入到帧头同步码中。在PC端解出视频编码,产生对应的视频格式缓存区,并显示。

2.2 带宽计算

在SDRAM缓存一帧图像的前提下,USB3.0模块要在下一帧图像到来之前将当前图像传输完。最大分辨率1920像素×1080像素视频格式一帧的像素点为2200×1125个,频率为60 Hz,所以实际像素时钟频率为f1=2200×1125×60=148.5 MHz,一帧图像连续传输2200×1125个像素点,每个像素点占24-bit,而实际上每帧有效像素点只有1920×1080个,经过RGB转YUV后每个像素点只有16-bit,FIFO将两个16-bit数据合成一个32-bit数据再传到USB3.0模块,而且经过FIFO存储后它们不是帧数据那样的间断,而是连续的,所以一帧的时间内,只传输了1920×1080/2个32-bit数据,传输一帧的时间T1=1/60,因此f2=(1920×1080)/(2×T1)=62.208 MHz,f2为1920×1080视频格式的有效像素时钟频率,同理,其余的视频格式的有效像素时钟频率也可以计算出来,如表1。

表1 不同视频格式的帧有效像素时钟

从表1中可以看出,帧有效像素时钟频率最高为62.208 MHz,Slave FIFO接口速度为100 MHz,USB3.0模块完全满足传输条件。当Slave FIFO运行在100 MHz时,由于使用了8B/10B编码,USB3.0接口的传输速度V=100 MHz×10/8×32=4 Gbit/s,V是FX3这款芯片能达到的最高传输吞吐率。

2.3 SDRAM控制逻辑

SDRAM可将采集到的不连续的视频数据,按帧缓存有效视频数据,保证视频数据的完整性和连续性。选用三星公司的K4S643232H-UC60芯片,容量为64 Mbit,其工作频率可达到166 MHz,为保证系统稳定,将其工作频率定为150 MHz。FPGA将采集到的RGB 24-bit数据转为YUV 16-bit后,1080p格式的视频一帧图像大小Total_bit=1920×1080×16-bit,而SDRAM有21-bit的行列地址线,存储空间为221×32-bit,所以一片SDRAM可储存2.02帧图像;因为在下一帧图像到来之前,USB3.0模块能传完当前图像,因此只需一片SDRAM每次缓存一帧图像即可实现图像的传输[3]。

SDRAM状态机控制器总共有4个状态:WAIT_WR_SDR、WR_SDR、WAIT_RD_SDR和RD_SDR,初始状态为WAIT_WR_SDR,如图3所示。SDRAM使用页突发的方式进行读写,每次读写一整行256个32-bit数据。视频传输的关键是在读和写操作的同时要检测同步码,以保证SDRAM中缓存的为一帧完整的图像[5]。

WAIT_WR_SDR状态:当(WR_FIFO_RDY==1 && SDRAM_RD_REQ==0),令WR_EN=1,进入WR_SDR状态;当(WR_FIFO_RDY==0 && SDRAM_RD_REQ ==1),进入WAIT_RD_SDR状态。

图3 SDRAM读写控制状态机

WR_SDR状态:在FPGA写入图像数据到SDRAM中任一周期,如果检测到同步码,则令WR_EN=0,wr_addr=0,进入到WAIT_RD_SDR状态;否则,则完成当前写操作后令WR_EN=0并进入WAIT_RD_SDR状态。

WAIT_WR_SDR状态:当(RD_FIFO_RDY==1 && SDRAM_WR_REQ==0),则RD_EN=1,进入RD_SDR状态;当(RD_FIFO_RDY==0 && SDRAM_WR_REQ ==1),进入WAIT_WR_SDR状态。

RD_SDR状态:在FPGA从SDRAM中读出图像数据的任一周期,如果检测到同步码,则令RD_EN=0,rd_addr=0,进入到WAIT_WR_SDR状态;否则,则完成当前读操作后令RD_EN=0并进入WAIT_WR_SDR状态。

3 USB3.0模块的设计

3.1 CYUSB3014固件程序设计

CYUSB3014内集成了运行频率可达到200 MHz的ARM926EJ-S内核,512 KB的嵌入式SRAM[6]。在Cypress官方SDK中的Eclipse开发环境下进行固件开发。固件程序是指由内核控制和调用芯片资源,接收并处理外部命令的代码。固件的整体框架如图5所示[7],主要功能为:实现USB3.0协议、GPIF II接口的时序配置和DMA通道的配置[7]。

图4 USB3.0模块连接框图

图5 FX3固件框架

3.2 GPIF II接口

GPIF II是一种可编程、位宽为32-bit的接口,由一套可编程的存储器映射的寄存器定义,运行频率可达到100 MHz,可连接多种类型外部器件[7]。本系统使用FPGA为控制芯片,并选用Slave FIFO接口模式。

使用Cypress提供的GPIF II designer软件实现特定的GPIF II接口寄存器配置,经过编译,生成C头文件,将包含GPIF II寄存器配置的C头文件加载到Eclipse下的固件工程中,实现EZ-USB FX3的数据传输通[8]。设计流程如图6所示[7]。

图6 GPIF II设计流程图

3.3 DMA通道

DMA的配置包含Socket(套接字)、DMA Descriptor(DMA描述符)、DMA Buffer(DMA缓存区)以及GPIF Thread(DMA线程)四个要素。Socket是外设硬件模块(如GPIF、USB和SPI)与 FX3 RAM之间的连接点;DMA Descriptor是一组位于FX3 RAM的寄存器,存储了DMA缓冲区的地址和数据及下一描述符的指针,以构建成DMA描述符链;DMA Buffer是RAM的一部分,用来暂时存放通过FX3的数据;GPIF Thread是用来将外部数据引脚连接至Socket的专用数据路径。例如,将视频数据流从GPIF II接口传输给USB模块;因为不需要修改数据流中的任何数据,所以配置为自动DMA通道。传输视频数据流使用FX3超高速stream模式,此时需要配置两个DMA通道,一个是GPIF II端口到USB端口的P2U通道,一个是USB端口到GPIF II端口的U2P通道,通道的传输吞吐率由缓冲区的数量决定,由于FX3硬件资源有限,且主要是实现视频流从下位机传输到上位机的过程,因此将P2U通道定位优先通道,配置8个缓存区,U2P通道配置4个缓存区,如图7所示[8]。

图7 串流输入的DMA传输设置

4 上位机设计

使用Cypress官方提供的示例驱动,实现CYUSB3014芯片的枚举与通信。使用Microsoft Visual Studio 2010软件编写应用程序,在Cypress公司提供的USB Control Center工具的基础上[9],添加了视频显示界面,如图8所示。上位机功能包括检测并枚举USB设备、下载固件到USB芯片RAM或Flash中、对下位机传来的数据进行帧头检测、将视频数据去帧头后按帧保存并显示图像;使用Cypress官方测速工具Streamer测试Stream_IN或Stream_OUT模式时的传输速率和丢包现象。上位机是按字节读取CYUSB3014中的数据,每次1 B,每2 B为一个像素点数据,如果是800×600格式的视频,则将帧头之后的数据保存到数组RGB_buff[600,1600]中,此时数组中保存的为一帧图像的数据。

5 仿真与系统测试

系统测试分为两个阶段,首先是分模块进行测试,使用Xilinx的Chipsocpe工具和示波器调试每个模块,确保硬件电路的正常,然后进行FPGA时序仿真,编写逻辑代码,进行系统联调。

5.1 硬件与FPGA固件调试

视频图像在传输过程中不能丢失数据,否则在PC端显示时,画面会产生抖动、错位等很明显的问题。因此先用FPGA产生DVI格式的自加数据给上位机显示,以便于观察图像数据的完整性和正确性,如图9所示,图像正确显示且无丢数、错位现象。

图9 DVI测试数据

用带DVI接口的台式机主机播放高清视频模拟视频源,测试视频格式分辨率为1920×1080@60Hz,用示波器观察TFP401A的时钟、行和场同步信号频率输出,经测试TFP401A正常工作,如图10所示。

图10 1920×1080@60Hz的行同步信号和像素时钟

5.2 系统测试

启动传输,如图11所示,图像正常显示,无丢数、错位现象。

图12为Chipscope在线逻辑分析仪抓取FPGA读出SDRAM中同步码的时刻,意味着一帧视频图像数据传输完成,此时对SDRAM读地址复位清零;同步码为0xF08421、0xAA5580、0x3BE6E6,连续3个数据是为了不与像素数据重复,其中0xAA5580中的8’h80代表该视频流格式为1920×1080。使用Cypress官方测速工具Streamer测试Stream_IN模式时的传输速率,如图13所示,V_Stream_IN=330800(KB/s)/1024=323.05 MB/s。

图12 SDRAM读出同步码

图13 Stream_IN模式时传输速率

6 结束语

为解决USB2.0带宽不够、速度较慢,其余接口便携性不好而无法或不适合传输高清视频的问题,设计了基于FPGA的USB3.0的高清视频传输系统,经过实际测试,所设计的传输系统,可传输8种主流分辨率的视频格式,灵活便携,较传统的USB2.0传输系统相比,极大提升了传输性能,满足了项目可靠、高速、便捷的设计要求,且USB3.0模块采用两层板设计,减少了成本。同时,因为采用模块化,预留了DVI输出接口,可从上位机传输高清视频到显示器上,功能更加完善。

猜你喜欢

时钟高清像素
高清大脑皮层发育新图谱绘成
像素前线之“幻影”2000
别样的“时钟”
古代的时钟
“像素”仙人掌
教你玩转AV设备(一):4K高清播放机使用指南
ÉVOLUTIONDIGAE Style de vie tactile
安防慧眼——高清镜头发展趋势
有趣的时钟
时钟会开“花”