摘 要:H.264视频编码标准的去块效应滤波器在改善视频主观质量的同时,也引入了巨大的计算量。为了得到一个高处理能力和低电路规模的去块效应滤波器,提出一种将对外部存储器的读写操作与滤波计算并行执行的滤波算法,并给出了该算法的电路结构。基于O.18μm的工艺。用Verilog语言对该算法和结构进行了实现。结果表明,综合后电路的关键路径最大时延为7ns,电路规模低于1.65万门,能够以111.7帧/s的帧率对1 280× 720分辨率的图像进行滤波处理。与现有的设计相比,本设计节省了32.5%的面积,同时提高了79.3%的处理能力。
关键词:集成电路设计;去块效应滤波;并行执行
为了去除解码器反变换量化之后的图像出现的块效应,H.264标准引入了去块效应滤波器,对块的边界进行滤波。在有效地改善视频图像质量和压缩效率的同时,去块效应滤波也引入了极大的计算复杂度,其运算量大约占到了解码器计算总量的1/3。另一方面,去块效应滤波过程需要反复从片外的存储器中读出待滤波的像素数据,并将滤波后的像素数据写入片外存储器,频繁的读写操作往往成为制约滤波处理能力的瓶颈。正是由于这些问题,使得设计一个处理能力高而电路规模小的去块效应滤波器具有一定的挑战性。
本文提出的去块效应滤波算法及其电路结构,基于一种改进的滤波顺序,将对外部存储器的读写操作与滤波计算并行执行,从而减小了电路规模,提高了处理能力。
1 H.264中的去块效应滤波
H.264的去块效应滤波操作应用于每一个已解码完成的宏块,对每个宏块内的每个4×4块的4个边(除去整幅图像的边缘)都要进行。每个宏块的滤波顺序如图1所示,其中虚线表示需要滤波的边界,字母顺序表示了滤波的先后顺序。

在每个竖直边界或者水平边界两边相邻的块中各取出与边界垂直的4个像素点,根据不同的边界滤波强度采用不同的滤波过程,得到滤波后的数据。具体的滤波过程可以参考文。
2 滤波算法设计
2.1 设计原则
本文的滤波算法基于以下3方面的设计原则:
1)将滤波过程的中间数据全部缓存,只将滤波后的最终结果输出,可以达到对片外存储器的读写次数的下限,从而将外部存储器的带宽对处理能力的影响降到最小。
2)基于一种改进的滤波顺序,相对于基本的滤波顺序,可以减小片内缓存的中间数据量,从而减小电路规模。
3)将对外部存储器的读写操作与滤波计算并行执行,减少了整个滤波过程需要的时钟周期数,从而提高了处理能力。
综合考虑了对外部存储器的读写次数、片内缓存的大小、读写操作与滤波计算的并行执行这3方面的问题,是本文提出的滤波算法可以减小电路规模并提高处理能力的关键。
2.2 对外部存储器读写次数的下限
对一个宏块内所有需要滤波的4×4大小的块进行标记,如图2所示。其中字母a-p标记的是相邻的参考块,字母A-Y标记的是宏块内的块。

为了减少对外部存储器的读写次数,应该避免把滤波过程的中间数据写入外部存储器中,而只将每个块滤波后的最终结果写入外部存储器。设定外部存储器的位宽为32 b,每次可以读出或写入一个块同一行的4个像素点的数据,那么从外部存储器中读出和写入数据都只需要4×40=160个时钟周期,这就是一个宏块的滤波过程对外部存储器读写次数的下限。
2.3 需要缓存的中间数据量
根据图1所示的滤波顺序,得到基本的去块效应滤波顺序,如图3a所示。该顺序不利于尽早得到滤波后的最终结果,增加了对中间数据缓存的需求。文给出了一种改进后的滤波顺序,如图3b所示,它能够尽早地完成同一个块的4个边界的滤波,从而减少了需要缓存的中间数据量。
2.4 读写操作与滤波计算并行执行
对外部存储器的读写操作与滤波计算并行执行,可以减少滤波过程需要的时钟周期数,从而提高处理能力。
由于每次读出或写入的是一个4×4大小的块同一行的4个像素点的数据,所以块的读操作和写操作可以和该块的竖直边界的滤波计算并行执行,而不能和该块的水平边界的滤波计算并行执行。所以,对图2和图3b所示的亮度宏块,从外部存储器中读出块A~P的操作可以分别和竖直边界1、2、4、6、9、10、12、14、17、18、20、22、25、26、28、30的滤波计算并行执行;将块e、f、g、h的滤波后的最终结果写入外部存储器的操作可以分别和竖直边界1、9、17、25的滤波操作并行执行。
另外,如果块的水平边界滤波之后得到该块滤波后的最终结果,那么将该结果写入外部存储器的操作可以和下一个边界的滤波计算或者下一个块的读操作并行执行。所以,对图2和图3b所示的亮度宏块,将a、b、c、A、B、C、E、F、G、I、J、K这12个块的滤波后的最终结果写入外部存储器的操作可以分别和边界4、6、8、12、14、16、20、22、24、28、30、32的滤波操作并行执行;将块d、D、H的滤波后的最终结果写入外部存储器的操作可以分别和读出块f、g、h的操作并行执行。
2.5 滤波算法
对图2中的亮度宏块,提出的滤波算法如下:
步骤0 从外部存储器中读出块a、b、c、d;
步骤l 从外部存储器中读出块e、A、B、C、D,完成边界1~8的滤波,将块e、a、b、c、d滤波后的最终结果写入外部存储器;
步骤2 从外部存储器中读出块f、E、F、G、H,完成边界9~16的滤波,将块f、A、B、C、D滤波后的最终结果写入外部存储器;
步骤3 从外部存储器中读出块g、I、J、K、L,完成边界17~24的滤波,将块g、E、F、G、H滤波后的最终结果写入外部存储器;
步骤4 从外部存储器中读出块h、M、N、O、P,完成边界25~32的滤波,将块h、I、J、K、L滤波后的最终结果写入外部存储器;
步骤5 将块M、N、O、P滤波后的最终结果写入外部存储器。
由于数据的相关性,步骤0的读操作和步骤5的写操作都不能与滤波计算并行执行。步骤1、2、3、4中的读写操作与滤波计算可以并行执行,并且这4个步骤是类似的,只是处理的块不同。下面只给出步骤1的具体实现过程:
1)从外部存储器中读出块e并缓存;
2)从外部存储器中读出块A,完成边界1的滤波,同时将块e滤波后的最终结果写入外部存储器,缓存块A的中间数据;
3)从外部存储器中读出块B,完成边界2的滤波,缓存块A和块B的中间数据;
4)完成边界3的滤波,缓存块a滤波后的最终结果和块A的中间数据;
5)从外部存储器中读出块C,完成边界4的滤波,同时将块a滤波后的最终结果写入外部存储器,缓存块B和块C的中间数据;
6)完成边界5的滤波,缓存块b滤波后的最终结果和块B的中间数据;
7)从外部存储器中读出块D,完成边界6的滤波,同时将块b滤波后的最终结果写入外部存储器,缓存块C和块D的中间数据;
8)完成边界7的滤波,缓存块c滤波后的最终结果和块C的中间数据;
9)完成边界8的滤波,同时将块c滤波后的最终结果写入外部存储器,缓存块d滤波后的最终结果和块D的中间数据;
10)将块d滤波后的最终结果写入外部存储器,该操作与步骤2的第1)步并行执行。
与亮度宏块的滤波算法类似,对图2中的一个色度宏块,提出的滤波算法如下:
步骤0 从外部存储器中读出块i、j并缓存;
步骤l 从外部存储器中读出块k、R、S,完成边界33~36的滤波,将块k、i、j滤波后的最终结果写入外部存储器;
步骤2 从外部存储器中读出块I、T、U,完成边界37~40的滤波,将块l、R、S滤波后的最终结果写入外部存储器;
步骤3 将块T、U滤波后的最终结果写入存储器。
3 滤波算法的电路实现
3.1 电路结构
根据本文提出的滤波算法,可以得到图6中的去块效应滤波器的结构如图4所示,这是一个3级流水线加旁路的并行处理结构。

第1级流水线中,待滤波数据和滤波过程的中间数据通过数据缓存选择存储在中间数据缓存中;第2级流水线中,缓存的数据通过多路选择器送给边界滤波器完成一个边界的滤波;第3级流水线中,输出选择与缓存选择Out-1与Out-2中的一路缓存并输出。第2级流水线得到的滤波过程的中间数据经旁路送回第1级流水线。图4给出的是已经通过数据缓存选择的适当调度,省去了边界滤波器的一个输入端的多路选择器之后的结构。
图4中的边界滤波模块的结构如图5所示,其中(po,p1,p2,p3)和(q0,q1,q2,q3)是待滤波的数据,
是滤波后的数据,参数汁算和滤波计算要完成的具体运算可以参考文。

为了减小电路的关键路径长度,边界滤波器的输出通过一级寄存器缓存,所以完成一个边界的滤波需要5个时钟周期。
3.2 时钟周期数统计
完成一个亮度宏块的滤波,各个步骤需要的时钟周期数为:步骤0读出4个块,需要16个时钟周期;步骤1的第1)步从外部存储器读出1个块,需要4个时钟周期,第2)到9)步的读写操作都可以和滤波计算并行执行,滤波计算需要5×8=40个时钟周期,第10)步不需要额外的时钟周期,所以步骤1一共需要44个时钟周期;步骤2、3与步骤1类似,都需要44个时钟周期;因为步骤4的第10)步的写操作不能与读操作并行执行,所以步骤4需要的时钟周期数比步骤1多4个,为48个;步骤5写入4个块,需要16个时钟周期。所以,完成一个亮度宏块的滤波,一共需要212个时钟周期。
与亮度宏块类似,完成一个色度宏块的滤波,各个步骤需要的时钟周期数为:步骤0需要4×2=8个时钟周期;步骤1需要4+5×4=24个时钟周期;步骤2需要4+5×4+4=28个时钟周期;步骤3需要4×2=8个时钟周期。所以,完成一个色度宏块的滤波,一共需要68个时钟周期。综上,完成一个包含亮度分量和色度分量的宏块的滤波一共需要212+68×2=348个时钟周期。
4 实现结果
按照文中的基本的滤波顺序,采用matlab实现了去块效应滤波过程作为验证模型,采用Verilog语言实现了本文提出滤波算法及其电路结构。通过将Verilog语言设计得到的数据与验证模型得到的数据进行比对,验证了本设计的正确性。
基于SMIC0.18 μm最坏的工艺,综合后的电路的关键路径最大时延为7 ns,即时钟频率达到140 MHz,电路规模约为1_6万门。为了与参考文献中的设计在相同时钟频率下进行比较,还设定关键路径最大延时为10 ns进行综合,得到的结果与现有设计的比较见表1。其中处理能力是指对1 280×720分辨率图像的处理能力。

从表1的综合结果来看,本设计在电路规模和处理能力上都优于文中的同类设计,并且与文中的设计都可以满足对HDTV图像(1 280×720,60帧/s)进行实时处理的要求,但是本设计在140 MHz的工作频率下,比文中的设计减小了32.5%的电路规模,同时提高了79.3%的处理能力。
5 结 论
本文基于改进的滤波顺序提出了一种将对外部存储器的读写操作与滤波计算并行执行的去块效应滤波算法及其电路结构。实现结果表明,本设计的电路规模为1.62万门,完成一个宏块的滤波过程需要348个时钟周期,能够以111.7帧/s的帧率对1 280×720分辨率的图像进行滤波处理。与现有的设计相比,本设计减小了电路规模,减少了完成一个宏块的去块效应滤波的时钟周期数,提高了处理能力。


