一种基于FPGA的视频播放器

2010-06-25 09:38赵小欢夏靖波郭威武
电视技术 2010年4期
关键词:视频信号时序时钟

赵小欢,夏靖波,赵 旭,郭威武

(中国人民解放军空军工程大学 电讯工程学院,陕西 西安 710077)

1 引言

视频图像信号的突出特点是信息量巨大,以我国数字广播中广泛采用的PAL制式为例,标准的数字化PAL电视分辨力为720×576,24 bit的色彩位深,1帧图像的信息量为 720×576×24 bit=9.95328 Mbit,而 PAL 标准中每秒扫描25帧图像,则每秒传送的信息量为9.95328×25=248.832 Mbit。另一方面,视频信号需要严格的时钟同步,在视频的采集与显示过程中,即使仅一个像素错位,整幅画面也会失步。CPLD与FPGA等可编程逻辑器件集成度与速度都有很大的提高,而且价格较低,在图像显示控制方面有较多应用。文献[1],[2]采用可编程逻辑器件完成LCD控制电路设计,文献[3]设计了一种LCD控制器的IP核,基于FPGA的LCD控制器在灵活性与价格方面都比专用显卡芯片具有优势。

本设计基于“FPGA+SAA7111A”的结构,利用 FPGA的硬件并行处理和在线可编程能力解决视频信号信息量大和制式繁多的问题,通过Verilog HDL编程实现视频采集以及TFT LCD驱动等各种复杂时序信号的产生与控制,实现了高质量、小体积、低成本的视频播放器。

2 总体设计思想

2.1 系统介绍

电视信号除了需要传送辉度信号Y以外,还必须用次载波来传送色差信号BY及RY。复合视频信号将BY及RY以3.58 MHz的次载波载送在Y信号里,同时还包括了行同步信号、行消隐信号、场同步信号、场消隐信号等同步信号。为了得到图像信号,首先需要采用梳状滤波器将3.58 MHz的色度信号与Y信号分离,得到Y,C信号(即S-Video),然后以不同的速率对这两路信号采样、编码就得到各种标准的图像信号。

本设计采用Philips公司的SAA7111A来完成复合视频信号的解码。SAA7111A是一种增强型视频输入处理器芯片,它能够完成视频制式自动识别、A/D变换、同步时序信号分离、亮度色度调整、色彩空间变换等功能,极大地减轻了设计的复杂度和体积。同时,SAA7111A是一种标准的I2C器件,需要通过I2C总线对其初始化。为了减小视频播放器的体积及成本,设计中采用FPGA模拟I2C主控制器来完成SAA7111A的配置过程。

设计中采用的TFT LCD为光联科技的UMSH-8044MD-T。该TFT LCD分辨力为320×240,支持RGB(5∶6∶5)格式图像显示。本设计通过FPGA产生LCD需要的各种时序信号,驱动该TFT LCD完成视频播放。

2.2 系统结构

该系统结构如图1所示,它主要完成对视频信号的采集并实时播放。整个视频系统由3部分组成。

图1 系统结构框图

1)视频解码模块,该部分通过FPGA来配置视频处理芯片SAA7111A,实现模拟视频信号的数字化,为系统后面的模块提供RGB(5∶6∶5)格式的标准数字视频信号。

2)图像缓存与控制模块。该部分是整个系统的关键,它协调着采集与显示的同步。一方面通过FPGA编程控制SRAM存储所需分辨力的数字视频信号;另一方面,采用2块SRAM实现双缓存,通过乒乓机制,确保FPGA向一块SRAM写图像数据的同时,LCD能够接收到另一块SRAM的数据,始终保证LCD接收到连续、稳定的视频流。

3)TFT LCD驱动模块,该部分通过FPGA产生LCD显示时序,实现TFT LCD显卡的功能,确保SRAM中的数据正确输出到LCD。

3 系统具体设计及实现

3.1 视频解码模块

SAA7111A解码芯片需要通过I2C总线对其初始化才能正常工作。由于I2C总线时序比较简单,并且该设计仅涉及到单主控制器、单从器件的情况,不需要仲裁过程,更加降低了难度,因此这里采用FPGA模拟I2C主控制器来完成SAA7111A的配置过程。I2C总线时序如图2所示,每次传送完1 byte后,需要接收到从器件的响应后再传送下一字节。

图2 I2C数据传送时序

为了判断SAA7111A是否解码正确,建议同时编写对SAA7111A的读程序,通过读取SAA7111A的状态寄存器0x1F的值来判断解码芯片的工作状态。值得注意的是,SAA7111A对晶振精度要求较高,稍有偏差就会造成颜色分量的失真。前两次采用无源晶振,SAA7111A均解码不正确,建议采用精度更高的有源晶振。

3.2 视频图像缓冲模块

SAA7111A场同步信号VREF、行同步信号HREF、奇偶场信号RTS0、像素时钟信号LLC2的时序见图3。

图3 FPGA图像采集时序图

当RTS0为1时,表明输出为奇数场,当场同步信号VREF有效时,对行同步信号HREF计数到83时,启动行有效信号。同理当行同步信号HREF有效时,对像素时钟信号LLC2计数到200时,启动数据有效信号,开始采集图像数据[4]。采用该方式可以灵活的控制采集信号的分辨力,这里将分辨力设为320×240,是为了满足TFT LCD分辨力的需要。由于SAA7111A解码出来的数字视频信号采用隔行扫描的方式,而TFT LCD是逐行显示,所以该奇数场采集了120行数据。

在这里FPGA接收4个输入时钟,即VREF,HREF,RTS0和LLC2。为了保证时钟的可靠性,将像素时钟信号LLC2引入FPGA的全局时钟引脚作为全局时钟。

对图像数据的定位,采用下列方法:调用FPGA的ROM宏模块,建立1个表,保存行首地址,每次存储数据时,行首地址采用查表得到,行内地址采用计数的方式[5-6]。

这样做的好处是:1)可消除隔行扫描信号与逐行扫描信号的差异,由于行首地址已固定,行内地址都采用计数的方式,奇偶场信号的存储方法完全一样。2)可准确定位整幅图像每行的行首地址,即使某一个数据受到干扰,则失步只存在于该像素所在行,其他行仍然同步。

3.3 TFT LCD控制模块

如图4所示,像素数据需要在行同步信号HSYNC、帧同步信号VSYNC、像素时钟CLK以及使能信号ENAB(图中由V_EN和H_EN)的配合下才得以在LCD上正确显示。一副图像被各种时序信号分成了若干区域,只有图中有效像素区的数据会被显示到LCD上。当行同步信号HSYNC、帧同步信号VSYNC均处于有效像素区时,输出使能信号ENAB有效,使数据输出;而当HSYNC和VSYNC处于消隐期间,关闭使能信号,禁止数据输出。

图4 LCD显示框图

图5显示了VSYNC与HSYNC的时序关系。由于该时序关系比较复杂,而且LCD对时序要求比较严格,这里采用有限状态机来产生各种时序信号[7]。

图5 VSYNC产生时序图

系统采用的TFT LCD标准像素时钟为6.4 MHz,为了便于时钟同步,这里将LLC2二分频作为显示时的像素时钟(即CLK=LLC2/2=6.25 MHz)。系统中采用的摄像头输出的是PAL信号,则显示1屏图像需要0.0204 s。而SAA7111A可在1 s采集25帧图像,即采集1帧图像需要0.04 s时间。这样采集1帧图像的同时LCD大约需要刷新2次。不妨采用奇偶场信号RTS0的时钟变化来产生INT_Syn标志表示1帧的开始,这样需要LCD每次读SRAM中的数据2次后才能切换到读另一块SRAM。

从图5可以看出,VSYNC的产生可以分为4个状态:S0,S1,S2 和 S3。 各状态之间的转换为 S0→S1→S2→S3→S0,通过状态机描述如下:

1)S0为帧同步脉宽阶段。INT_Syn到来,标志一帧的开始,此时VSYNC为1,帧有效信号VDEN为0,对HSYNC计数从0到VSPW。

2)S1为垂直后扫阶段。此时VSYNC为0,帧有效信号VDEN为0,对HSYNC计数从0到VBPD。

3)S2为帧有效阶段。此时VSYNC为0,帧有效信号VDEN为1,对HSYNC计数从0到LINEVAL。

4)S3为垂直前扫阶段。此时VSYNC为0,帧有效信号VDEN为0,对HSYNC计数从0到VFPD。

行同步HSYNC信号的产生过程同VSYNC类似,只不过HSYNC的各个状态是对CLK计数。当帧有效信号VDEN与行有效信号HDEN均为1时,打开LCD数据使能端ENAB,LCD接收SRAM送来的数据。当然,由于LCD的差异,可能在时序产生时需要对前消隐、后消隐信号有所调整才能显示出无错位的图像。

通过Verilog HDL编程语言来描述以上状态机,在Quartus II 6.0开发环境中仿真得到TFT LCD显示时序(见图6)。通过该仿真可以看出,采用有限状态机较好地解决了视频显示复杂时序的问题,得到了TFT LCD显示所需的各种时序信号。

图6 TFT LCD显示仿真时序

3.4 双缓存控制模块

以上分别介绍了视频采集以及TFT LCD显示驱动功能的实现,但由于采集与显示都是连续不间断的,故需要协调采集与显示的同步才能正常播放视频。这里采用双缓存结构,通过乒乓缓存操作确保LCD不间断地接收数据[8]。当FPGA向SRAM1写入数据时,LCD接收来自SRAM2的数据,这时LCD数据口和SRAM2相接,却必须和SRAM1隔离;反过来,当FPGA向SRAM2写入数据时,LCD接收来自SRAM1的数据,这时LCD数据口和SRAM1相接,却必须和SRAM2隔离。这里采用如图7所示电路解决这一问题。

图7 双缓存切换控制电路示意图

图7中,引入switch控制信号作为缓存切换标志,其中switch信号每当RTS0上升沿到来时翻转一次。当switch 为 1 时,vpo[15∶0]与 sram1_data[15∶0]接通,而由于三态门为高组态,vpo[15∶0]与 sram2_data[15∶0]隔离,而在数据输出端通过多路选择器使DATAB即sram2_data[15∶0]输出到 lcd_data[15∶0]。同理,当 switch 为 0 时,vpo[15∶0]与 sram2_data[15∶0]接通而与 sram1_data[15∶0]隔离,lcd_data[15∶0]接收SRAM1的数据。而SRAM地址产生则比较简单,只需要在每帧到来时从零开始计数即可。通过此种方案可以很好地解决视频采集与显示的切换,视频播放效果如图8所示,视频播放比较流畅,清晰度较好。

图8 LCD显示视频

4 小结

笔者设计并实现了一种基于FPGA的视频播放器,经过仿真与测试,每秒能够播放25帧视频,且适用于分辨力在720×576以下的各种TFT LCD。

笔者将视频的采集以及TFT LCD的驱动集成在一块FPGA中,实现了视频播放的功能。同时,该方案与其他方案相比,不仅减小了视频采集与显示时钟同步的难度,又缩小了系统的体积,更为重要的是该方案完全在线可编程,具有非常好的灵活性。另外,随着数字图像处理技术的日益发展及成熟,该方案也可作为图像处理系统中的前端视频采集部分,为数字图像处理部分提供高速、可控的视频流。

[1]LEI Jingming,ZHOU Xuechen.Dynamic dithering algorithm and frame rate control technique for liquid crystal display controller[C]//Proc.ASICON2003.[S.l.]:IEEE Press,2003:740-743.

[2]ITAKURA T, MINAMIZAKI H,SAITO T,et al.A 402-output TFTLCD driver IC with power control based on the number of colors selected[J].Solid-State Circuits,2003,38(3):503-510.

[3]程佺,沈绪榜.一种LCD显示控制器IP核的设计与验证[J].计算机与数字工程,2004,32(1):5-8.

[4]程颖,王锐.SAA7111A芯片在视频图像处理FPGA设计中的应用[J].合肥工业大学学报:自然科学版,2007,30(11):1399-1403.

[5]武乾永,陈宾.基于FPGA的实时图像数据采集模块设计[J].微电子学,2008,38(3):453-456.

[6]陈彬.基于FPGA的视频图像处理系统设计[D].重庆∶重庆大学,2006.

[7]方勇,吕国强,彭良清,等.3D显示器视频转换系统设计及其FPGA实现[J].液晶与显示,2007,22(1):94-98.

[8]周剑波,巩宪锋,王长松,等.利用FPGA和USB总线的视频图像的采集与处理系统设计[J].北京科技大学学报,2006,28(9):886-889.

猜你喜欢
视频信号时序时钟
基于Sentinel-2时序NDVI的麦冬识别研究
别样的“时钟”
古代的时钟
浅析新一代视频信号ICtCp
基于FPGA 的时序信号光纤传输系统
短距视频信号无线通信网络
有趣的时钟
一种毫米波放大器时序直流电源的设计
时钟会开“花”
小飞鸽ZY—2250D数字机无视频输出故障的应急处理