设计了一种基于HDMI接口的全高清(分辨率1 920×1 080)视频采集与显示系统,该系统以Xilinx公司Spartan6系列FPGA作为控制芯片,采用500万像素级别CMOS摄像头OV5640作为前端数据源,能够采集全高清视频信号;为了解决由于高速大容量视频数据缓存容量和速率不足导致的拖影现象,该系统采用了一块Micron公司4 Gbit容量的DDR3 SDRAM作为缓存介质,再结合乒乓操作,能妥善解决高速大容量数据的缓存问题;该系统选用Silion Image公司的SiI9134作为HDMI接口芯片,能有效支持全高清视频信号输出。该系统可应用于军用监控系统、民用多媒体系统以及医学等领域。
中文引用格式: 王少斌,苏淑靖,袁财源. 基于FPGA的高清视频采集系统设计[J].电子技术应用,2019,45(7):63-66,71.
英文引用格式: Wang Shaobin,Su Shujing,Yuan Caiyuan. Design of high-definition video acquisition system based on FPGA[J]. Application of Electronic Technique,2019,45(7):63-66,71.
随着视频显示技术的发展,视频信号从之前的标清发展到高清,再发展到全高清,其分辨越来越高,数据量也成倍增加,这就推进了显示接口技术的高速发展,显示接口技术经过了一个从模拟到数字、从并行到串行、低速到高速的发展过程[1-3]。HDMI接口是最新的高清晰度多媒体接口,与DVI接口相比,其尺寸更小,带宽更大,传输距离更远,支持的分辨率更高,不仅能够传输视频信号,还能传输音频信号,且具备版权保护功能[4]。HDMI接口已成为液晶显示器、平板带脑、笔记本电脑等设备的标准接口之一,得到了广泛应用[5-6]。本系统中不仅实现了标准HDMI接口电路及其控制,并且还提供全高清视频数据源,选用500万像素级别CMOS摄像头OV5640,输出视频信号分辨率可达2K级别,支持多种数据格式输出。为了解决由于视频数据缓存速率和容量不足导致的拖影问题,该系统选用容量为4 Gbit的DDR3 SDRAM作为换缓存介质,通过Xilinx公司的MIG IP和对其进行控制,再结合乒乓操作,能有效解决高数大容量数据的缓存问题,使显示质量更高。本系统实现了全高清视频信号的采集及高质量显示,其能应用到多种领域,包括军用监控领域、多媒体领域、医用领域等。此视频采集显示系统原理框图如图1所示,该系统主要包括视频采集模块、FPGA主控模块、数据缓存模块和HDMI接口电路。视频采集模块提供全高清视频数据源,在其开始采集之前需要FPGA主控模块通过SCCB(Serial Camera Control Bus)总线将摄像头配置信息发送到摄像头中的寄存器;FPGA主控模块是此系统的控制核心,其控制着摄像头、DDR3-SDRAM、HDMI接口芯片以及视频数据流;数据缓存模块以一块4 Gbit容量的DDR3-SDRAM作为缓存介质,能有效解决高速大容量数据的缓存问题;HDMI接口电路主要包含一块HDMI接口芯片,其作用是实现视频数据的并串转换;最后,串行视频数据通过HDMI传输线传输到支持HDMI接口的显示器上,就能实时显示全高清视频图像。
2.1 视频采集模块
视频采集模块选用OmniVision公司OV5640摄像头,其为500万像素级别CMOS图像传感器,支持分辨率可达2K级别,能输出多种图像格式数据,且支持多种自适应调节功能。此CMOS图像传感器支持DVP和MIPI两种数据接口,本系统中选择DVP接口。在主控模块获取数据之前需要通过SCCB总线将传感器寄存器信息配置给传感器[7-8]。本系统中CMOS图像传感器图像数据输出格式配置为RGB24,视频分辨率配置为1 920×1 080(全高清),视频帧率配置为30 f/s,此模块还包括数字和模拟供电电路。
2.2 FPGA主控模块
系统控制核心选用的芯片是Xilinx公司Spartan6系列芯片XC6SLX45,第六代Spartan系列产品Spartan6 FPGA基于公认的低功耗45 nm、9-金属铜层、双栅极氧化层工艺技术,提供了高级功耗管理技术、150 000个逻辑单元、硬核DRAM存储器以及多种IP等,是Xlinx公司应用最为广泛、技术非常成熟的一个FPGA系列[9-11]。FPGA主控模块主要完成摄像头的配置及视频数据获取、DDR3-SDRAM数据的存取以及HDMI接口芯片的配置以及视频数据发送,其硬件电路还包括供电电路、复位电路、晶振电路、下载电路和配置SPI Flash电路。
2.3 数据缓存模块
为了解决高速大容量视频数据的缓存问题,此系统选用Micron公司4 Gbit容量DDR3-SDRAM存储芯片MT41J256M16HA-125作为缓存介质,其与FPAG的硬件连接示意图如图2所示。A0~A14为地址总线,B0~B3为Bank地址,FPGA通过控制地址总线和Bank地址就能控制数据在DDR3-SDRAM中的存储位置;D0~D15为数据总线,与FPGA并行连接;CLK-N和CLK-P为差分时钟输入端口,本系统中设定时钟频率为312.5 MHz;FPGA通过列地址选择信号(CAS)、行地址选择信号(RAS)、写使能信号(WE)对DDR3-SDRAM进行读写控制,通过控制ODT使能片内电阻优化性能来防止数据线中断反射[12];DQS为DDR3-SDRAM与控制器之间的同步信号,其为双向信号,当写入数据时,其由控制器发出,当读取数据时,其由存储器发出;DM为数据屏蔽信号[13]。由于Spartan6系列FPAG只有Bank1和Bank3有MCB硬核,在本系统中选择FPGA中Bank3与DDR3-SDRAM连接,端口电压标准为1.5 V,且在FPAG UCF中,需要设定IO标准为SSTL15_II。
2.4 HDMI接口模块
本系统中选用SiI9134作为HDMI输出接口芯片,其和FPAG的硬件连接关系如图3所示。在芯片工作之前,需要通过I2C(SCL、SDA)总线将寄存器信息配置到芯片里,配置过程中频率为100 kHz,数据输入格式配置为RGB24,视频输出分辨率配置为1 920×1 080;CLK为视频数据同步时钟,此芯片1080p视频格式的时钟为148.5 MHz,DE为数据有效信号,高电平有效;HS、VS分别为行同步信号和场同步信号;D[23:0]为RGB24数据输入总线,从上到下依次为R、G、B分量数据总线,为了支持其他视频数据格式,SiI9134的总线宽度为36 bit,此系统中只使用24 bit,其余的数据总线引脚接地;SiI9134支持多种数字音频信号输入接口,包括S/PDIF、I2S等,本系统中不使用音频接口。RGB24格式视频数据经SiI9134编码后,转换成串行数据后通过连接器和传输线将数据发送给显示器,最终显示出全高清视频。
本系统控制逻辑设计中,包括OV5640配置及视频数据获取逻辑、DDR3-SDRAM数据存取控制逻辑、SiI9134配置及视频数据发送逻辑。系统通过DVP口接收RGB24格式的视频数据,然后将视频数据分区域存入DDR3-SDRAM中,再将视频数据从中读出发送给HDMI接口芯片供显示屏显示。系统工作流程如图4所示,上电后系统先进行复位操作,然后进入初始化状态,系统给OV5640和SiI9134发送配置信息,DDR3-SDRAM也开始进入初始化和校验过程。所有初始化工作完成后,系统判断OV5640是否配置结束,如果配置结束,系统将获取视频数据,并将其存入DDR3-SDRAM中。当缓存区有数据且SiI9134配置结束后,系统将缓存区的视频数据读出发送给SiI9134。
3.1 视频采集控制部分
OV5640对上电的时序有一定的要求,所以满足此上电时序的模块是必不可少的,完成初始化后,先确定OV5640的工作模式,通过SCCB总线就能完成,此系统中配置了303个寄存器;待OV5640配置完成和DDR3-SDRAM初始化和校准完成后,就可获取视频数据;控制OV5640需要先提供一个系统时钟XVCLK,为192 MHz,然后识别像素输出时钟(PCLK)、场同步信号(VSYNC)、行同步信号(HREF)来获取数据。场同步信号下降沿表示一帧数据的开始,行同步信号为高电平时为有效数据输出,在场同步信号低电平之间,行同步信号会出现1 080次高电平,代表一帧数据有1 080行数据;在行同步信号处于高电平期间会持续1 920个像素输出时钟,代表每一行有1 920个像素点。
3.2 DDR3-SDRAM缓存控制部分
DDR3-SDRAM数据的存取使用了Spartan6系列FPGA提供的MIG IP核,同时也需要MCB硬核与外部的SDRAM芯片进行数据交换。在Xilinx编译环境ISE中生成SDRAM控制器后,就可运用MIG IP核用户接口进行数据存取,本系统中MIG IP核配置成两个位宽为64 bit的双向端口,一个端口用于写数据,一个端口用于读数据。其工作状态示意图如图5所示,在MIG IP核的前端和后端分别加入一个写数据FIFO和读数据FIFO,对于调用此缓存模块的逻辑来说,就相当于一个大容量的FIFO。在MIG IP核内部,采用乒乓操作的方式来提高缓存效率,在缓存的过程中,将4 Gbit容量的存储区域分为N个区域,每个区域的容量为一帧视频数据的容量,在写入过程中,先将数据写入第1区域,第1区域写满后开始写下一区域(为第2区域,写下一区域时确保该区域数据为空),此时就可以读取第1区域的数据,第1区域读完再读下一区域(为第2区域,在读下一区域时确保该区域数据已满)数据,依此顺序循环读写,完成乒乓操作。这种缓存方式可极大提高视频数据缓存效率,有效解决高速大容量数据的缓存问题,一帧视频数据连续且不会出现数据交叉的情况(地址不会交叉),避免了视频显示的拖影现象。
3.3 HDMI接口控制部分
在HDMI工作之前,需要通过I2C总线给寄存器配置数据,数据格式配置为RGB24,分辨率为1 920×1 080,视频帧率为30 f/s。配置完成后,缓存区一数据满时,就可读取视频数据按照特定时序发送给SiI9134,SiI9134数据发送时序如图6所示,行同步信号的下降沿代表一帧视频数据的开始,上升沿代表一帧数据的结束,当一行数据发送完后开始发送下一行数据,当一帧数据最后一行发送完成后再发送下一帧画面的第一行数据。以此重复循环发送数据,DE为数据有效信号,高电平有效。
硬件电路电气性能测试完成后,开始进行整体性能的测试,在整体性能测试之前,还需要对FPGA程序进行功能仿真和时序仿真,再对各个功能模块分别进行测试,确保代码准确无误。
4.1 DDR3-SDRAM测试
利用Xilinx公司提供的ChipScope Pro工具对DDR3-SDRAM代码进行测试,测试过程中,由系统内部产生递增数写入到写数据FIFO中,然后从读数据FIFO中读取数据,将写入的数据和读出的数据通过ChipScope Pro工具抓取,再对抓取结果绘出波形并进行比对,测试结果如图7所示。从测试结果来看,读写速度快且没有出现数据乱码情况,符合系统要求。
4.2 HDMI接口测试
HDMI接口模块测试结果如图8所示,测试过程中,视频数据源由系统内部产生,包括三基色、棋盘格、彩色条等数据,最后将串行数据发送到支持1080p分辨率的显示器上。从测试结果来看,显示效果符合要求。
4.3 系统整体测试
图9所示为系统整体测试结果,测试过程中,视频数据源为摄像头采集的视频数据,数据经过DDR3-SDRAM缓存,再发送到HDMI接口芯片,然后通过HDMI连接器和传输线将差分数据传输给显示器。从测试结果来看,如图9(a)所示,视频显示清晰完整;当摄像头移动时,如图9(b)所示,图像显示无拖影现象,证明通过DDR3-SDRAM高效缓存和乒乓操作结合的方式,能够有效解决高速大容量数据的缓存问题。
为了满足人们对视频显示质量的需求,本系统设计了一种全高清视频采集显示系统,系统以OminiVision公司的500万像素级别CMOS图像传感器OV5640为前端采集摄像头,以Xilinx公司Spartan6系列FPGA作为主控芯片,以4 Gbit容量DDR3-SDRAM作为缓存芯片,再结合MCB硬核、MIG IP核以及乒乓操作,实现视频数据的高效缓存;同时以Silion Image公司的SiI9134为HDMI芯片,能有效支持全高清视频。系统能够稳定采集显示全高清视频,显示质量高且无拖影现象,该系统可应用于军用监控系统、民用多媒体系统以及医学等领域。
参考文献
[1] 黄庆敏,罗键.HDMI接口标准及应用设计[J].电视技术,2007(2):32-34.
[2] 顾海峰,夏宁,吴杰.一种基于CH7301C的显示接口电路设计[J].信息化研究,2012,38(6):30-34.
[3] 刘佳.数字图像高速采集和传输技术的研究与实现[D].天津:天津大学,2014.
[4] 李先友,赵曙光,段永成,等.基于FPGA的实时MIPI CSI-2图像采集与处理系统[J].电子技术应用,2019,45(1):97-100.
[5] 潘磊,葛中芹,庄建军,等.基于FPGA的HDMI视频流图像处理的系统设计[J].实验室研究与探索,2015,34(10):76-80.
[6] 向梓豪,陆安江.基于FPGA的HDMI多模式显示模块设计[J].电子技术应用,2017,43(12):48-51.
[7] 陈一波,杨玉华,王红亮,等.基于DDR3-SDRAM的图像采集与显示系统[J].电子器件,2017,40(3):702-707.
[8] 周浩,王浩全,任时磊.基于FPGA和NAND Flash的便携式信号采集系统设计[J].电子技术应用,2018,44(9):82-86.
[9] 林谋锦,林子威.DVI接口与HDMI接口的比较[J].中国有线电视,2005(6):581-582.
[10] 杨帆,张皓,马新文,等.基于FPGA的图像处理系统[J].华中科技大学学报(自然科学版),2015,43(2):119-123.
[11] 宋海吒,唐立军,谢新辉.基于FPGA和OV7620的图像采集及VGA显示[J].电视技术,2011,35(5):45-47.
[12] 李华.基于FPGA的高精度图像采集系统设计[J].电子器件,2014,37(5):840-843.
[13] 潘明,陈元枝,李强.基于FPGA的图像采集系统的设计[J].国外电子测量技术,2012,31(3):58-61.
作者信息:
王少斌,苏淑靖,袁财源
(中北大学 电子测试技术国家重点实验室,山西 太原030051)