文献标识码: A
文章编号: 0258-7998(2011)04-0126-04
离散余弦变换(DCT)是最广泛使用的图像和视频压缩变换编码方法之一,它可以去除数据之间的相关性、聚集图像中的能量,使数据便于压缩,是目前大多数图像和视频编码标准(如JPEG、H.26x系列、MPEGx系列标准等)的核心。在图像和视频解码系统中,则使用离散余弦逆变换(IDCT)对数据进行还原,而常用8×8的二维离散余弦逆变换(2D IDCT)的运算量较大,直接影响到图像和视频解码系统的实时性。本文在基于SoPC视频解码系统设计中,考虑到充分利用SoPC具有的软硬件协同设计优势,对二维IDCT优化的硬件设计与实现进行了研究。
研究采用IDCT的分布式算法(DA),并结合偏移二进制编码(OBC)的查找表方式,设计基于SoPC解码系统8×8的二维 IDCT IP核。在以Nios II处理器为核心的SoPC视频解码系统中,该 IP核设计满足Avalon总线标准的接口。经综合测试表明,该IP核的应用提高了解码的实时性,具有一定的应用价值。
1 IDCT算法
1.1二维IDCT分解
8×8二维IDCT的定义式[1]如下:
其中Fx,y为DCT变换后的系数,fi,j为原始数据,当x,y=
从式(9)可以看出,如果预先计算好部分和Dj并存入查找表,则通过移位累加操作,同样可以计算出向量内积Px。dij的取值只可能是-1或+1,部分和Dj关于向量d的正负值成镜像对称。下面以计算P1为例,来说明这种部分和的对称关系:
2 二维IDCT硬件设计
2.1 二维IDCT硬件结构
设计方案利用2D IDCT的行列分解特性,使用一个1D IDCT核、8×8转置RAM和复用器等模块来构成2D IDCT硬件系统。2D IDCT的结构框图如图2所示。
图中,串并转换缓冲器,每收到8个数据后将其作为一行数据同时输出,该模块还是输入数据的缓存模块。并串转换缓冲器功能与此模块类似。转置RAM用来完成8×8数据的行列转换,按行输入按列输出。1D IDCT模块为整个IP的核心,用来计算8点1D IDCT的值。控制器负责整个IP核的工作时序,保证其运行无误。工作时先按行顺序读入数据,然后由1D IDCT计算每行8点的逆变换值,再按行顺序写入转置RAM中,然后控制器切换复用器,按列顺序从转置RAM中读出数据,计算每列IDCT值后按列顺序写入输出缓存,最后按行顺序读出最终结果。
2.2 一维IDCT硬件设计
实现2D IDCT硬件的关键是如何实现1D IDCT。本设计使用OBC编码的分布式算法来完成1D IDCT的硬件设计,其核心是4输入的移位累加模块的设计,其结构如图3所示。移位累加模块可以计算一个乘积和,并行使用8个移位累加模块及1个后处理模块,组成完整的1D IDCT模块。后处理模块用于式(5)、式(6)的计算,其输出为最终8点1D IDCT的结果。在设计移位累加器时,要注意初始值Dapp的设置。在视频解码系统中,对IDCT输出数据的准确性较敏感,对数据的舍入要求较高。因此设计时,对输出数据采用四舍五入,将累加器的初始值加上4 096,右移13次后将输出结果补偿0.5。
图4为1D IDCT的硬件结构图。1D IDCT模块的输入数据精度为13 bit,输出为16 bit。其中移位寄存器输入13 bit,输出为8 bit。为防止数据溢出,移位累加器的输出为14 bit,而非13 bit。经后处理模块将精度扩展为16 bit后,作为最后结果输出。
1D IDCT是整个设计的核心,该模块功能的正确与否将影响整个系统的性能。
2.3 Avalon总线接口2D IDCT IP核设计
基于SoPC视频解码中,IP核还应包含Avalon总线接口以及控制寄存器组。Avalon总线接口包含对总线进行读写操作,它是2D IDCT IP核与Avalon总线数据传输的桥梁[5]。通过接口模块,可以将IP核加入到SoPC系统中。控制寄存器组用于存储控制状态字,以及控制IP核的参数数据[5]。
图5为基于Avalon总线接口的2D IDCT IP核的总体结构图。
Avalon总线读取模块根据寄存器中的操作地址,将要处理的64个数据读入输入缓存,经2D IDCT模块处理后由总线写入模块将结果写回原地址。模块运行时,首先向控制寄存器写入控制数据,然后IP核发起总线数据读取操作,等IP核接收到Avalon总线返回的数据后开始对数据进行处理,最后再将结果写回Avalon总线。
3 二维IDCT IP核的综合与测试
3.1 二维IDCT IP核的综合
使用以Cyclone II EP2C35F672C8 FPGA芯片为核心的SoPC开发平台,硬件设计使用Verilog HDL硬件描述语言编写,在Quartus II软件进行综合,综合报告如图6所示。由此可见,整个2D IDCT占用了4 336个逻辑单元,核心模块1D IDCT只占用了632个逻辑单元。8个查找表模块直接使用了FPGA逻辑单元内的查找表LUT,没有寄存器或内置RAM。这种查找表模块的实现方式简单灵活,并且芯片访问速度快。2D IDCT IP核的最高可综合工作频率为140.39 MHz。其时序分析报告如图7所示。
3.2 二维IDCT IP核的SoPC测试结果
在以Nios II 为处理器的SoPC系统中,进行实际视频解码测试。将 IDCT IP核添加到SoPC Builder中,将编码过的视频测试文件烧入到Flash中,移植解码程序到Nios II IDE中,删除原有的IDCT软件函数,用C语言编写2D IDCT IP核的驱动函数。经系统解码后,通过带VGA接口的LCD进行播放[6]。
测试结果看出系统加入IDCT IP核后,LCD显示画面清晰,没有降低系统的解码质量。
对于不同的测试视频,解码速度是有差异的,为了能更准确地测试出IP核的性能,本研究选用了多个视频文件进行比较如表1所示。从表1可以看出,加入2D IDCT IP核以后, 解码每帧所需时间平均减少了约6 ms,帧率平均提高了6~8帧,使系统的解码速率平均提高了20%以上。
本文研究设计的2D IDCT IP核针对FPGA的硬件特点,采用分布式算法实现乘法累加模块,使用OBC编码减小了查找表的大小,节省了FPGA资源,优化了硬件设计。
该IP核的研究基于先进的SoPC技术,应用于视频解码系统中,结果表明,该IP核很大程度上提高了视频解码速度,增强了视频解码系统的实时性。由于SoPC的IP核复用技术,该设计将具有很强的实用性、通用性和扩展性。
参考文献
[1] RICHARDSON I E G.视频编解码器的设计-开发图像与视频压缩系统[M]. 北京:国防科技大学出版社, 2005.
[2] CHEN W H. A fast computational algorithm for the discrete cosine transforms [J]. IEEE Transactions on Communications, 1977,25(9):1004-1009.
[3] 梁刚.分布算术的并行计算技术研究[J]. 微电子学与计算机, 2009(5).
[4] 纪秀花.用查表法快速实现二维8×8离散余弦逆变换的研究[J]. 电子学报,2008(4):639-645.
[5] 刘家良,任怀鲁,陈新华.AVS视频解码中帧内预测模块的硬件化设计及SOPC验证 [J].电子技术应2009,
35(10):18-21.
[6] Altera. Avalon Interface Specifications [DB/OL].2009-11.