杨 钦,周云飞,胡永兵
(华中科技大学 机械科学与工程学院,湖北 武汉430074)
现场可编程逻辑门阵列FPGA具有容量大,编程灵活,并行处理能力强的特点。在视频信号的实时处理场合,由于图像数据的吞吐量大,处理运算量大,同时实时性要求高,因此FPGA强大的并行处理能力在数字视频的实时处理方面得到广泛应用[1-6]。
本文设计了一种采用Altera公司的FPGA芯片EP2C35F672C6N作为主控芯片、ADI生产的ADV7403作为解码芯片、SDRAM作为图像数据缓冲区、ADV7123作为编码芯片的实时视频采集与显示系统。其中,FPGA用于配置视频解码芯片,解析视频数据,预处理视频数据,控制SDRAM的工作时序、色度空间转换以及VGA显示;ADV7403用于对模拟摄像头数据进行A/D转换;SDRAM用于视频数据的实时存储;ADV7123用于将RGB分量转换成00.714V的模拟信号。
图1为本系统的整体结构框图,主要分为以下几个部分:
(1)视频采集部分:将摄像头采集到的模拟视频数据CVBS转换成数字视频格式YUV4∶2∶2,包括I2C总线配置,ITU656解码。
(2)视频处理部分:为适应VGA的不同显示,对视频数据做相应预处理,包括彩色VGA数据处理,灰度VGA数据处理,Sobel边沿检测数据处理,Prewitt边沿检测数据处理。
(3)视频存储部分:将视频数据储存在容量为4M×16×4Banks的SDRAM中,主要包括SDRAM控制器设计。
(4)VGA显示部分:将实时的视频数据在显示器上显示出来。包括色度空间转换,VGA时序产生,ADV7123视频数据编码。
图1 采集与显示系统总体结构
本文选取的视频解码芯片ADV7403是一款高质量、单芯片、多格式视频解码器和图形数字化仪。这款多格式解码器支持将复合视频CVBS或S视频形式的PAL、NTSC和SECAM标准信号转换为数字ITU-R BT.656格式。它还支持将RGB/YPrPb分量视频信号解码为数字YCrCb或RGB像素输出流。支持的分量视频包括525i、625i、525p、1080i、1250i等标准,以及许多其它高清和SMPTE标准。该芯片的数字输出位数可配置为12位或10位或8位,视频输出格式为ITU-R BT.656YCrCb4:2:2格式,同时该芯片还提供一些辅助信号,包括水平同步信号TD_HS,垂直同步信号TD_VS,场同步信号TD_FIELD和像素时钟LLC等信号。
为适应特定模式的需要,需要对ADV7403进行寄存器配置,配置采用I2C总线的方式。I2C由两根信号线组成,双向串行数据线和单向时钟线。I2C总线传输的协议如图2所示。
图2 I2 C总线配置时序
其中,第一个17表示设备地址,第二个17表示该设备的寄存器地址,第三个17和数据位8表示此次传输的数据。本系统采用的解码芯片ADV7403拥有两个独立的I2C控制线接口,Control Port与 VBI Port。Control Port用于设置内部寄存器,VBI Port用于俘获内部数据。每个接口都有两个地址,一个读地址,一个写地址。根据解码芯片的ALSB引脚电平高低和I2C的读写控制位,一共4种组合 (见表1),可对内部寄存器实现不同操作。
表1 ADV7403的I2C读写地址
由于本文只需要对视频解码芯片进行配置操作,即写操作,因此设备地址选用0x42。同时I2C控制器只需要实现写部分即可。实现一个寄存器配置需要一次传输24位数据LUT_DATA [23∶0],其中LUT_DATA [23∶16]为寻址的设备地址,LUT_DATA [15∶8]为该设备的寄存器地址,LUT_DATA [7∶0]为该寄存器的配置数据。由于I2C总线每传输8位数据后,需要从设备发回一个应答数据,因此配置一个寄存器至少需要27个时钟周期。本文采用的方式为,控制器采用33个时钟周期完成一次数据传输,前3个周期用于初始化控制器并启动传输,接着
27个周期传输有效数据 (24位数据和3个应答位),最后3个周期停止传输[1]。周期计数用6位计数器I2C_CNT实现。
配置数据存储在一个查找表中,每次配置完毕之后从中再选出新的数据进行传输。如此循环,直到35个寄存器数据配置完毕。本系统串行时钟频率选为20KHz,由系统主时钟50MHz分频而来。
视频解码芯片依照选定的工作模式将摄像头采集到的模拟视频数据进行相应解码转换,最后输出8位的YUV4∶2∶2数据流。本系统选用的CCD摄像头输出的是PAL制式的CVBS信号,PAL制式全名为逐行倒相正交平衡制,该制式图像一帧有625行,每秒扫描25帧,每行数据由1728个数据块组成,每个数据块可以是8位,也可以是10位,前者一般用于演播室内,后者用于传输。其中,PAL制式23310行是奇数场视频数据,336623是偶数场视频数据,其余为辅助数据和基准数据。
ITU-R BT.601建议规定,PAL制式的演播室数字编码的主要参数为,全行的采样点数为:亮度信号Y为864,色差信号Cr为432,Cb为432;有效行的采样点数为:亮度信号为720,每个色差信号 (Cr,Cb)各为360,抽样结构为正交结构;亮度信号的抽样频率为13.5MHz,每个色差信号的抽样频率为6.75MHz。因此,视频数据字的亮度信号Y,色差信号Cr和色差信号Cb的字速率分别为13.5MW/s和6.75MW/s。在有效行内时分复用后输出的串行字 (像素)速率为27MW/s,顺序为Cb1,Y1,Cr1,Y2,Cb2,Y3,…,一共传输了720个亮度数据和360个色差数据,之后就进入行消隐期。每行的数据结构如图3所示[2]。
图3 ITU656每行的数据结构
行消隐期内一共占用288个字节,开始4字节为有效视频结束信号EAV,接着280个固定填充数据,最后4字节为有效视频开始信号SAV。SAV之后紧接着就是有效行视频数据。因此,SAV和EAV将有效数据和消隐数据明确的区分开。作为基准信号,SAV和EAV有着相同的前导符:FF、00、00,第四个字节XY则用于表示该行在这一帧数据中的位置信息和区分SAV、EAV,其结构见表2。
表2 XY各位定义
其中,F=0表示奇数场,F=1表示偶数场;V=0表示场正程,V=1表示场消隐期;H=0表示SAV,H=1表示EAV,而P3、P2、P1、P0为校验码保护位[3-4]。
因此,在提取视频数据时,需要先检测到FF0000,然后从XY中提取出F、V、H,再根据这些标志位的0、1状态,判断目前数据是EAV还是SAV,如果是SAV,则下个数据便是有效视频数据,开始提取Y、Cb、Cr,同时有效视频行计数器L_cnt启动,加1计数,判定目前数据是亮度还是色度,由于SDRAM为16位,视频数据为8位,故需要将数据组装成16位,送往预处理模块进行处理;如果是EAV,则进入消隐期。
PAL制式的有效视频数据为720×576像素,本文采集的图像要通过分辨率为640×480的VGA进行实时显示,故每行需要截掉80个像素,每帧需要截掉96行。为保证图像的清晰,系统选用的截断办法是:将每行的边沿数据(开始40个像素,结尾40个像素)进行截断,每帧的边沿行数据 (奇数场的起、始各24行,偶数场的起、始各24行)进行截断,使图像的中间部分得到良好的显示。因此,当80<L_cnt<1280时,提取的数据作为VGA显示的行有效数据。
为实现VGA的不同显示,需要对采集到的视频数据进行预处理。系统采用的VGA显示包括4种:RGB彩色显示,灰度显示,Sobel边沿检测图像显示,Prewitt边沿检测图像显示。相应的处理方式有4种:RGB处理,灰度处理,Sobel边沿检测处理,Prewitt边沿检测处理。VGA的显示模式由外部显示开关进行选择。
(1)RGB处理:系统采用的SDRAM是16位的,而视频数据亮度和色度是8位的,故需要对数据进行组装处理,为提取方便,本文选取准则为:高8位为亮度数据,低8位为色度数据,即视频数据流组装为 (Y1,Cb1), (Y2,Cr1),(Y3,Cb2),…。相应代码表示如下:
(2)灰度处理:灰度数据即亮度数据,因此可以直接舍弃掉色度数据,直接取亮度数据。准则为:当Lin_cnt
[0]为1时,将TD_DATA直接赋值给YCbCr。
(3)边沿检测处理:边沿定义为图像中灰度发生急剧变化的区域边界。图像灰度的变化情况可以用图像灰度分布的梯度来反映,常用的边沿检测算子有Sobel算子,Prewitt算子,拉普拉斯算子[5-10]。本系统选用的是Sobel算子和Prewitt算子。两种算子的模版如图4所示。
两种算子都是对图像数据的连续三行进行处理,因此在读SDRAM数据的时候,需要连续读取两行数据,并暂存起来,具体的实现步骤如图5所示。
FIFO1和FIFO2的长度为VGA显示的一行数据个数,即640。通过模板计算出相应的水平梯度和垂直梯度,二者相加之和再和一定的阈值进行比较,若大于阈值,则输出白电平;否则输出黑电平。
ITU656解码后得到的YUV4∶2∶2数据,经过预处理模块后,原来的8位数据组装成16位,送入SDRAM进行存储。PAL制式的图像一帧有效数据为720×576,每行去掉80个像素后,为640×576,存入SDRAM的0 640×575的地址空间中。
SDRAM的时钟频率为100MHz,往SDRAM写视频数据的同时,需要从SDRAM读出数据供VGA显示。本系统设计了4个端口,两个读端口,两个写端口。两个写端口负责将写FIFO中的数据写进SDRAM,两个读端口负责将从SDRAM中读出的数据写进读FIFO。对于写端口,系统采用解码芯片给出的像素时钟27MHz,对于读端口,为了与VGA同步,选用VGA时钟25MHz。为平衡不同时钟域的速度要求,4个端口各控制一个长度为512的数据暂存FIFO。在采集系统中,SDRAM的读写均采用全页突发模式,一次可以读写512个数据 (列地址为9位),由于PAL一行有效像素为720个,截断80个后 ,剩下640个,为存储方便,系统采取一次读写128个数据的方式,一行数据存取完毕总共需要5次突发读写。在突发读写的时候,设计了一个计数器,记录当前突发传输的个数。当读写了128个数据后就发出突发停止命令,中止当前突发传输,同时突发起始地址增加128,并进行下一次突发传输[11,12]。
PAL制式图像采用逐行扫描的方式,将一帧图像分为两场扫描和传输。奇数场扫描一帧的奇数行,共312行,偶数场扫描一帧的偶数行,共313行。SDRAM先存储奇数场数据,再存储偶数场数据。除去截断的有效行内80个像素值,两场数据的有效像素均为640×288,对应SDRAM的地址空间范围为,奇数场为0640×287,偶数场为640×288640×575。截去列的首尾96行,VGA显示的数据地址空间范围为640×24640×263和640×312 640×551。
如果外部开关选择RGB彩色显示,则需要将视频解码芯片输出的YUV4∶2∶2数据转换成RGB三色分量。操作步骤包括YUV4∶2∶2到YUV4∶4∶4转换,YUV4∶4∶4到RGB的转换。
YUV4∶2∶2转换到YUV4∶4∶4,使每一个像素点都包含完整的Y,Cb,Cr。然后进行色度空间转换,将YUV4∶4∶4的数据转换成ADV7123可接受的10位RGB信号,转换公式如下
上式公式涉及到浮点运算,FPGA不支持浮点类型,因此需要采用移位操作进行放大和缩小。采集系统采用如下方法:系数全部左移9位,计算结果再右移7位 (Y、Cb、Cr为8位数据,RGB为10位数据,故结果右移7位)。乘法操作可采取两种方式,一种方式调用内部乘法器IP核,另一种方式是不用乘法器IP核,直接将系数转换成二进制,乘2n就向左移n位数据,乘法操作就转换成了移位操作。
VGA控制模块的功能包括产生VGA时序,控制对SDRAM的读操作,同时将读取的数据送到编码芯片ADV7123中,并产生行同步信号VGA_HS,场同步信号VGA_VS,以实现视频数据在VGA显示器中的实时显示。
VGA显示模块采用的分辨率为640×480@60,时钟频率为25MHz。VGA的显示时序如图6所示。VGA的显示采用逐行扫描的方式,因此需要同时读SDRAM中的奇数场数据和偶数场数据,并将两场数据复合到一场中。一种简单的做法是设计一个VGA列计数器,计数器为奇数时,读奇数场数据进行显示,否则读偶数场数据进行显示。实验结果表明,显示效果较好。
VGA视频数据显示如图7所示。
本文采用可编程逻辑门阵列FPGA,视频解码芯片ADV7403,视频编码芯片ADV7123以及同步动态随机存取器SDRAM,实现了对CCD摄像头采集到的CVBS信号的不同处理,然后通过VGA显示器进行了实时显示。并且通过外部显示开关的不同选择,实现了视频数据的RGB显示、灰度显示、Sobel边沿检测显示以及Prewitt边沿检测显示。此系统结构简单,成本低廉,实时性强,处理效率高,接口方便以及编程灵活,是CCD模拟视频信号采集与处理的良好方案。
:
[1]ZHU Changfeng,XIAO Tiejun.Design of video capture system based on FPGA [J].Computer Engineering and Design,2008,29 (17):4405 (in Chinese).[祝长锋,肖铁军.基于FPGA的视频图像采集系统的设计 [J].计算机工程与设计,2008,29 (17):4405.]
[2]TAN Xinquan,CHEN Xiaoqian,DENG Tianping,et al.Digital video technology foundation [M].Wuhan:Huazhong University of Science and Technology Press,2009 (in Chinese). [谈新权,陈筱倩,邓天平,等.数字视频技术基础[M].武汉:华中科技大学出版社,2009.]
[3]SHAO Zhongjun,CHENG Guangwei.Design of video capture and display based on FPGA [J].Electronic Component & Device Applications,2010,12 (12):24-25 (in Chinese). [邵忠俊,程光伟.基于FPGA的视频采集与显示模块设计 [J].电子元器件应用,2010,12 (12):24-25.]
[4]LUO Xiaoqiao,FAN Weiliang,LI Wei.Design and implementation of digital video conversion interface based on FPGA [J].Electronic Measurement Technology,2008,31 (10):177-178(in Chinese).[罗小巧,樊伟良,李伟.基于FPGA的数字视频转换接口的设计与实现 [J].电子测量技术,2008,31(10):177-178.]
[5]WANG Jianzhuang.Study on the algorithms of high-speed image processing based on FPGA and system implementation[D].Wuhan:Huazhong University of Science & Technology,2011(in Chinese).[王建庄.基于FPGA的高速图像处理算法研究及系统实现 [D].武汉:华中科技大学,2011.]
[6]LIU Wenying.Design and implementation of video image preprocessing system based on FPGA [D].Tianjin:Tianjin Normal University,2010 (in Chinese).[刘文英.基于 FPGA 的视频图像预处理系统的设计与实现 [D].天津:天津师范大学,2010.]
[7]JIANG Guoqiang.SOPC technology and application [M].Beijing:China Machine Press,2006 (in Chinese).[江国强.SOPC技术与应用 [M].北京:机械工业出版社,2006.]
[8]WANG Gang,ZHANG Lian.Design and typical examples of SOPC embedded system based on FPGA [M].Beijing:Publishing House of Electronics Industry,2009 (in Chinese).[王刚,张潋.基于FPGA的SOPC嵌入式系统设计与典型实例 [M].北京:电子工业出版社,2009.]
[9]HAN Xiaojun.Digital image processing technology and application [M].Beijing:Publishing House of Electronics Industry,2009(in Chinese).[韩晓军.数字图像处理技术与应用[M].北京:电子工业出版社,2009.]
[10]ZHANG Zhigang.FPGA and SOPC design tutorial-DE2practice [M].Xi’an:Xi’an University of Electronic Science and Technology Press,2007 (in Chinese). [张志刚.FPGA 与SOPC设计教程-DE2实践 [M].西安:西安电子科技大学出版社,2007.]
[11]FAN Ji,WU Xiaoyi,WANG Binyi,et al.FPGA realization of SDRAM controller design in digital system [J].Journal of Gun Launch & Control,2009 (4):38-40 (in Chinese).[范继,吴小役,王斌翊,等.数字系统中SDRAM控制器的FPGA实现 [J].火炮发射与控制学报,2009 (4):38-40.]
[12]MA Ling,YANG Junfeng,SONG Kezhu,et al.A design of multiple DDR SDRAM controllers based on FPGA in a seismic data acquisition system [J].Journal of University of Science and Technology of China,2010 (9):939-945 (in Chinese).[马灵,杨俊峰,宋克柱,等.地震数据采集中基于FPGA的多DDR SDRAM控制器设计 [J].中国科学技术大学学报,2010 (9):939-945.]