赵慧荣,张 刚
(太原理工大学 信息工程学院,山西 太原030024)
AVS作为新一代音视频编码标准[1],2006年正式被批准为国家标准。AVS视频编码标准兼顾了性能与实现复杂度之间的矛盾,代表了国际先进水平。目前AVS解码器和解码芯片已经有了比较成熟的发展,但AVS编码器仍处于研究阶段,市场还未产业化。FPGA平台拥有丰富的寄存器资源和逻辑资源,其并行执行的硬件实现方式可以满足大量的高速电子线路设计需求,能实现复杂的数字视频信号处理,是硬件实现的最佳选择之一。
本文对AVS编码I帧算法进行深入研究,根据FPGA硬件特点[2],实现了AVS的全I帧实时编码。以宏块为单元,考虑到占用资源和运行速度两方面的限制,采用适当的复用技术和流水线技术对系统进行了优化,保证了流水线的高效运行以及硬件资源的最优利用。
本设计基于FPGA平台完成CIF分辨率图像的实时采集、AVS全I帧压缩编码和网络传输,主要由视频采集系统、数据调度系统、I帧编码系统和以太网传输系统构成,其实现框图如图1所示。
视频采集系统主要完成将复合视频解码成YUV(4:2:0)数字视频,为AVS全I帧编码准备好视频数据。
数据调度系统主要完成向I帧编码系统提供原始数据,同时将编码后的码流传输到以太网传输系统。视频数据吞吐量大、带宽高,涉及到低速存储器(如DDR)和高速存储器(如FPGA内部RAM)之间大量的数据交换,成功的数据调度策略是实现实时编码的关键技术之一。
I帧编码系统主要完成 AVS视频I帧实时编码,整个系统使用硬件描述语言独立设计完成。
以太网传输系统主要完成对AVS码流的打包,并将其传输到PC机。本系统包含实验室设计的以太网控制器IP核和网络传输协议IP核。
PC机上的AVS播放器采用DirectShow架构,基于本实验室完成的AVS解码器设计了AVS实时播放器,用来验证AVS编码系统的实时编码能力。
前端视频采集模块采用TVP5150PBS视频解码器将输入的PAL视频信号转换成数字YUV(4:2:0)信号,输出格式为ITU-R BT.656。
系统上电后,FPGA通过IIC总线对TVP5150解码器进行初始化配置;接通复合视频信号后,TVP5150即可正确输出8 bit数字YUV视频信号至FPGA。由于接收的视频信号为ITU565格式,视频信息仅由8 bit视频信号组成,没有独立的行、场同步信息,所以,FPGA需要从接收的8 bit视频信号中提取行场同步信号,并将相邻8 bit数据(亮度、色差信号)转换成16 bit视频信号。
转换后的16 bit视频信号经DDR SDRAM控制器写入到外部DDR SDRAM存储器中,系统采用的DDR SDRAM存储器容量为 16 M×16 bit,利用迸发模式,将接收的一行视频信号存储到DDR SDRM的一行,则一帧视频信号可存储在DDR SDRAM的一个Bank空间。
根据AVS I帧编码算法的特点,将I帧编码系统的整体设计[3]分为帧内预测模块、变换量化模块和熵编码模块,再加上残差、重构和写CBP等一些外围电路,即可实现AVS全I帧的编码。整体设计框图如图2所示。
帧内预测模块主要完成从邻近宏块的重构数据中获取用于当前宏块预测的参考数据,并完成对8×8块的预测,得到预测数据和预测模式。
变换量化模块主要完成DCT变换、量化、反量化和反DCT变换。输出的量化数据经过Z扫描后进行熵编码,输出编码码流;反DCT变换后的数据与预测数据相加,得到子宏块的重构数据,重构数据反馈给帧内预测模块进行下一个子宏块的预测。
熵编码模块主要完成Z扫描和变长编码。对扫描后的数据进行全零判断,得到该宏块的CBP值。变长编码后的码流前面加上写入的CBP信息,组成一个宏块的编码码流,编码码流8 bit对齐放到RAM中。
对AVS全I帧编码设计时,需充分考虑FPGA硬件平台的特点,整个系统使用硬件描述语言独立设计完成。
帧内预测模块[4]以宏块为单元,主要包括参考样本获取和预测两部分。首先在预测前要从邻近宏块中获取进行16×16宏块预测时所需要的上面25个数据和前一个宏块重构的最右列16个数据。子宏块的预测数据经变换量化模块后,从重构数据中提取下一个子宏块预测所需的边界数据。输出的预测数据与子宏块编码前原始数据相减,得到的残差数据给变换量化模块。输出最佳预测模式给写CBP模块。
算法采用多种预测模式并行执行,一个时钟预测一个像素,并对预测完的一个像素计算一次绝对值差,每次时钟都会将SAD累加,64个时钟就能将预测和计算SAD同时完成。所有可用预测模式并行完成后,进行模式判决模块,比较所有模式下SAD的最小值,选出最佳预测模式并输出对应的预测数据。本算法共享公共运算单元和多级流水线操作,资源利用率高,并且兼顾了处理速度和实现代价。
用ModelSim进行仿真的结果如图3所示,信号sum_v、sum_h、sum_dc、sum_dc_left、sum_dc_top、sum_ddl、sum_ddr和sum_p是各种模式下计算的代价值SAD,通过比较大小,得出最佳的预测模式(logout)和预测数据(dataout_intra)。
该模块主要包括DCT变换、量化、反量化和反DCT变换[5]4个部分。DCT变换采用蝶形算法,每次处理8×8的一行数据,节省了大量的运算时间,且大量的乘法用移位和加法代替。量化中涉及查表运算,表格存放在ROM中,通过地址即可得到所需数据。残差数据经DCT变换、量化后,量化系数传给熵编码模块;同时将量化后的数据再进行反量化和反DCT变换,得到8×8子宏块的重构数据,重构的数据反馈给帧内预测模块,进行下一个8×8子宏块的预测。
由于亮度和色度算法相同,因此该模块可以共享,减少了资源的利用。变换量化模块涉及大量的运算,是最耗时的模块,为了提高处理速度,算法使用了适当的并行操作,将量化与反量化、反DCT变换并行执行;同时把数据位数扩展,可同时对8×8矩阵的一行数据赋值,从而节省了读取数据占用的时间,并且提高了数据的利用率。
用ModelSim进行仿真的结果如图4所示,设定qp为36的情况下,n0_o的输出为量化数据。
该模块主要完成对数据的zig-zag扫描、游程编码、码表查询、码表切换、哥伦布编码和最终的码流输出[6]。首先对量化数据进行扫描,若扫描后数据非全0,则对数据进行游程编码、指数哥伦布编码,并输出编码后码流;若扫描后数据全0,则终止该子宏块的熵编码,等待下一组子宏块量化数据的输入。
对(level,run)编码时,码字长度是不确定的,而输出的码流要8位对齐,需要根据前一个码字的输出和相应的码长剩余信号对码字进行组合,以得到最终的码流。设置一个变量w作为码字输出的缓存,t是w中码字的长度。每当t≥8时,输出码流,同时t减去8;否则继续读入下一个已编码的码字(code_num)和码字长度(numbits)。状态机实现如图5所示。
在进行熵编码模块的设计时,算法采用一种较少存储空间来存储码表的方法,并将码表查询、码表优化和指数哥伦布编码合并为一个流水线单元并行处理,节省了存储中间结果所需的大量存储空间;将熵编码各任务并行执行,加快了处理速度。
用ModelSim进行仿真的结果如图6所示,状态机在4、5、6循环判断,并在 6状态时输出子宏块编码码流(dataout)。
本设计使用VHDL硬件描述语言进行设计实现,采用Xilinx ISE进行综合验证、ModelSim 6.2b进行仿真,器件选用Xilinx公司的xc4vsx25-10ff668,最高工作频率达到110 MHz,综合后的资源利用情况如图7所示。
利用编解码软件截取I帧第一个宏块数据作为参考数据输入,在 qp为 36的情况下,图 8(a)中内存 2从地址0x00980067开始为编解码软件输出的宏块编码码流;图8(b)为经ModelSim.6.2b仿真的结果,宏块编码后的码流从datain_u5_top_o输出。从图中数据可以看出,输出结果一致,说明本设计完全符合算法要求。
本文完成了AVS全I帧编码器在FPGA平台上的设计与实现。经仿真与验证,能达到CIF分辨率下视频图像的实时编码。与同类设计相比,本设计采用适当的复用技术和流水线技术对系统进行了优化,保证了流水线的高效运行以及硬件资源的最优利用,且系统具有开发成本低、性能和灵活性高、更新方便等特点。
[1]毕厚杰.视频压缩编码标准:H_264/AVC[M].北京:人民邮电出版社,2005.
[2]王道宪.CPLD/FPGA可编程逻辑器件应用与开发[M].北京:国防工业出版社,2004.
[3]胡倩,张珂,虞露.AVS视频解码器的一种结构设计与硬件实现[J].浙江大学学报(工学版),2006,40(12):2139-2143.
[4]Liu Min,Wei Zhiqiang.A fast mode decision algorithm for intra prediction in AVS-M video coding[C].Proceedings of the 2007 International Conference on Wavelet Analysis and Pattern Recognition,ICWAPR 07,2008:326-331.
[5]黄友文,陈咏恩.AVS反扫描、反量化和反变换模块的一种优化设计[J].计算机工程与应用,2008,44(19):93-95.
[6]刘群鑫.AVS中可变长解码器的硬件设计[J].现代电子技术,2007,30(23):185-187,194.