基于FPGA和ARM的视频采集处理系统
近年来,视频技术的飞速发展,使得视频产品越来越普及。视频信号采集是整个视频应用的前端部分,扮演着极其重要的作用。传统的图像采集卡面向计算机应用,体积大,可靠性有待进一步提高,于是便产生了一些新的视频采集方法,这些方案有的基于FPGA和DSP,有的基于ARM和编码芯片,在实时性、灵活性、 可维护性方面各有千秋。本文针对FPGA在数字信号处理速度上的优势以及ARM在控制方面的长处,设计了一种全数字化的实时视频采集系统,具有很实用的参考价值。 1 系统构成 本系统的结构框图如图1所示,图像传感器模块负责图像采集,FPGA产生I2 C时序控制CMOS图像传感器芯片,并将采集到的图像数据进行相应处理后送到压缩芯片ZR36060进行压缩;ARM负责压缩芯片的驱动、以太网芯片的控制和UDP/IP协议的实现,以及视频采集系统的指令控制和数据传输, 以太网模块主要实现以太网数据传输。SDRAM做数据暂存与ARM存储空间的扩展,采集到的视频图像以帧为单位通过网卡芯片传送到网络。 图 1 2 硬件设计 2.1 图像传感器 图像传感器采用MICRON公司的MT9M131。它是一种彩色CMOS图像传感器,可支持SXVGA、VGA、QVGA等显示格式,I2 C总线接口,最大支持分辨率1280*1024,在VGA格式下可达到30帧/每秒的采集速度,并具有自动曝光控制、自动增益控制、自动白平衡、自动带通滤波、自动黑级校准等功能。本系统采用VGA格式,CMOS传感器的控制时序由FPGA产生。 2.2 FPGA器件 FPGA器件的主要功能包括图像传感器的控制、采集后的图像数据处理和格式转换,为了采集到质量更好的图像,将来还会在此部分加入一些相应的处理算法。因此,为保证系统的实时性,系统选用了Altera公司Cyclone II系列的EP2C35F672C6。该芯片具有35000个逻辑单元、672个引脚、475个用户自定义I/O接口、35个嵌入式乘法器和4个锁相环,完全可以满足系统要求。 2.3 ARM处理器和网卡芯片 ARM处理器选用三星公司的S3C2410,该处理器拥有独立的16KB指令Cache和16KB数据Cache,MMU,支持TFT的LCD控制器,NAND闪存控制器,3路串口,4路DMA,4路带PWM的时钟,最高可运行在203MHz。系统采用的网卡芯片是CS8900A,它是用于嵌入式设备的低成本以太局域网控制器。它的高度集成设计使其不再需要其它以太网控制器所必需的昂贵外部器件。 CS8900A包括片上RAM,10Base-T传输和接收滤波器,以及带24毫安驱动的直接ISA-总线接口。除了高度集成,CS8900A还提供其它性能和配置选择。它独特的PacketPage结构可自动适应网络通信量模式的改变和现有系统资源,从而提高系统效率。图2为网卡芯片与S3C2410的接口示意图。
图 2 2.4 视频压缩芯片 JPEG编解码芯片ZR36060是专为视频采集与编辑应用而设计的,可以方便地实现对视频信号的实时压缩和解压缩。在进行压缩时,ZR36060接受 YUV4:2:2数字视频信号,将其编码为JPEG码流输出。ZR36060对像素块和CCIR视频信号可实现高达25~30帧/秒的压缩;灵活的数据接口,支持三种YUV视频接口模式,即8位主模式、16位从模式和8位从模式;3种不同的比特率控制模式用于静止和运动视频的压缩;可以和多种常用视频解码器实现无缝连接[1]。据统计,JPEG格式的压缩比例约为70~80:1,而本系统中采用的分辨率并不高(640*480),直接使用ZR36060进行帧内编码压缩可以满足要求,同时也减少了FPGA部分的开发工作量。 3 关键模块的工作原理 3.1 图像传感器驱动 MT9M131是标准的I2 C总线器件,接口简单,传感器工作时只有6个控制信号。其中MCLK由FPGA产生,是传感器工作时钟输入;FVAL是帧有效信号,它的上升沿表示一帧数据的开始。在FVAL信号的有效期间内包含了480个行有效信号LVAL,而每个LVAL信号的高电平期间包含了数据总线上640个像素数据的输出。所以,在FVAL一个周期内,图像传感器正好输出了完整的一帧图像。分辨率为640×480。仅当FVAL和LVAL信号同时为高电平时,传感器输出数据 D[9:0]有效,FPGA在每个像素时钟PIXCLK上升沿时将有效数据读入。经实测,传感器正常工作时,SCLK,LVAL频率约为7.56kHz和 14.2kHz。 本系统采用Verilog HDL语言来编写CMOS图像传感器的时序驱动。在实际设计中,把控制模块分成两部分:I2C_Config模块根据设定的曝光时间来发生I2 C总线SCLK和SDAT时序,而Capture模块则负责与传感器的数据接口,读入10位的图像数据,并送到下一级模块进行相应处理。以下是 Capture模块部分代码: always@(posedge iCLK or negedge iRST) begin if(!iRST) ……… //各信号清零复位 else begin Pre_FVAL <= iFVAL; if( ({Pre_FVAL,iFVAL}==2'b01) ** mSTART ) //当前帧有效且前一帧处理完 mCMOS_FVAL <= 1; else if({Pre_FVAL,iFVAL}==2'b10) //正 在处理前一帧 mCMOS_FVAL <= 0; mCMOS_LVAL <= iLVAL; mCMOS_DATA <= iDATA; //读取数据送入FPGA if(mCMOS_FVAL) //帧有效 begin if(mCMOS_LVAL) //行有效 begin if(X_Cont<639) X_Cont <=X_Cont 1; else begin X_Cont <=0; Y_Cont < = Y _ Cont 1; //计算像素坐标,方便后续模块显示 图 3 3.2 格式转换模块 从数字图像传感器传来的原始图像质量,在整个系统的性能影响中占主要地位,对后续的视频压缩和传输速度有着非常重要的影响。后期将会在采集前端加入相应的图像处理算法。而大多数处理算法都是基于RGB颜色空间的,为了进行视频压缩以减小数据量,就需要进行RGB到YUV的颜色转换。 YCbCr是YUV属于颜色空间的一种储存格式,适用于MPEG、JPEG等格式的编码。相比RGB色彩空间,YCbCr色彩空间有一个显著的优点。Y的存储可以采用和原来画面一样的分辨率,但是Cb,Cr的存储可以使用更低的分辨率。这样可以占用更少的数据量,并且在图像质量上没有明显的下降。所以,将色彩信息以低于量度信息的分辨率来保存是一个简单有效的图像压缩方法。 在ITU-R BT.601标准中,建议在计算Y时,权重选择为kr=0.299,kg=0.587,kb=0.114。于是常用的转换公式如下: Y=0.299R 0.587G 0.114B Cb=0.564(B-Y) Cr=0.713(R-Y) 采用硬件描述语言进行编程之前,需要消除浮点数运算。合理利用硬件资源是编写代码时要充分考虑的。对于常系数乘法单元,其占用的LEs(Logic Elements)与系数大小有关。为了避免出现负数和溢出问题,最终采用的转换公式如下: Y = [CA*27] *(R - G) G [CB*27] *(B - G) YOFFSET Cb = [CC*27] *(B – Y) COFFSET Cr = [CD*27] *(R – Y) COFFSET ([ ]符号表示取整运算) 各参数的取值见表1[2]。 表1 各参数值 CA0.299 CC0.492 CB 0.114CD0.877 YOFFSET 16 COFFSET 128 3.3 图像压缩控制 ZR36060的控制接口示意图如图3所示,VCLK和VCLK2是需要外部提供的时钟信号,由FPGA产生的PIXCLK为25MHZ,满足系统要求。 VCLK是VCLK2的分频,并要求与VCLK2同步。 本系统选择ZR36060工作状态为:8位代码从模式,视频同步从模式,8位视频总线宽度。ZR36060的接口可分为视频接口、主机接口和代码接口三部分。视频信号由视频接口Y[7:0]输入,主机接口通过DATA[7:0]对芯片内部寄存器设置,控制工作状态,压缩后的码流通过代码接口 CODE[7:0]输出到存储器中缓存。8位代码从模式下,主控制器的数据总线DATA[7:0]通过读写HostData对ZR36060的内部寄存器进行设置和读取,代码总线CODE[7:0]从CODEFIFO读写JPEG数据。行同步信号HSYNC接到图像传感器的LVAL引脚,场同步信号 VSYN接到传感器的FVAL引脚。奇偶场指示信号由FPGA给出,每采集到FVAL的上升沿,IND信号翻转一次,以指示奇偶场。 3.4 以太网数据传输 本系统采用UDP/IP协议来实现图像数据的网络传输。压缩后的图像数据经ARM进行UDP数据打包后,存储在SDRAM中。一个完整的数据帧格式包括以太网头、IP头、UDP头和一行图像数据,其系统工作流程图见图4所示。ZR36060 每压缩完成一帧,就由S3C2410读取并写到SDRAM中,然后判断是否读完一帧图像数据,读完后则发送UDP包,将图像数据通过以太网发送到网络。 图 4 4 小结 本文提出了一种基于FPGA和ARM的视频采集处理系统,其特点在于设备接口和视频信号处理的全数字化,系统结构紧凑,体积小巧、响应快速;基于FPGA的前端处理更增加了图像处理算法升级的灵活性,适用于工业远程监控等多种场合。后期还可在采集端加入相应的图像处理算法,以提高图像质量。 |