微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于FPGA的H.264帧内预测模块设计

基于FPGA的H.264帧内预测模块设计

时间:06-05 来源:互联网 点击:

H.264/AVC是由国际电信联盟(ITU)和国际标准化组织(ISO)共同提出的最新一代数字视频压缩标准,它吸取了以往压缩技术的精华,又引进了其他压缩技术无法比拟的许多新技术,因此,H.264在通信领域得到了广泛应用。H.264/AVC压缩效率很高,但算法的复杂度和运算量同时也大大增加,为了满足视频解码实时性的要求,寻求更有效的解码技术成为重要的研究课题。

帧内预测是视频编解码中重要的一部分,其主要功能是降低图像的空间冗余。本文根据H.264/AVC 帧内预测的特点并结合对其算法的分析,提出了一种帧内预测硬件电路结构,有效地减少了硬件电路面积,提高了解码的性能。

1 H.264帧内预测算法介绍

H.264视频解码器中,对于I和SI宏块类型采用帧内预测来解码。帧内预测模块的输入是当前宏块相邻左边块和上边块环路滤波前的像素值及参考预测模式,输出是当前宏块的预测值。预测值与反变换反量化得到的残差值重构,得到宏块的像素值。完成后,当前宏块的部分像素值和预测模式要进行存储,为后面宏块解码提供参考值。

H.264中亮度预测分两类,一类是针对图像中含有大量细节的部分采用4×4块的预测模式(有9种预测模式);另一类是对图像中比较平缓的区域采用16×16块的预测模式(有4种预测模式)。色度预测是8×8块的预测模式,有4种预测模式,这4种预测模式与亮度16×16的预测模式相似,也有竖直、水平、DC和平面模式。所有的预测模式都是根据左边块和上边块的参考值,计算当前宏块的预测值。

2 硬件实现

根据帧内预测算法,硬件结构划分为predmode模块、plane模块、prediction模块、reconstruct模块、left_pixels模块、predmode_ram、prediction_ram、sample和prediction_output模块。如图1所示,其中left_pixels、prediction_ram、predmode _ram、sample和prediction_output模块都是存储单元,分别存储的是当前宏块左边块的参考值、当前宏块上边块参考值、当前宏块上边块的参考预测模式、提取的参考像素值和当前宏块预测值输出;predmode模块预测计算出当前块的预测模式;plane模块是对plane预测模式的预处理;prediction模块是帧内预测的核心计算单元,4个PE单元并行运算,一个时钟周期解码出一个4×4的一列4个预测值;reconstruct模块的功能是实现重构。


2.1 predmode模块设计

Intra_16×16和Intra_Chroma的预测模式可通过语法元素解析直接获得,所以本模块的主要任务是解析Intra_4×4的预测模式。

本模式预测器的输入是当前4×4亮度块的luma_4×4BlkIdx(块索引)、解析的语法元素和当前宏块的信息。输出是当前宏块的16个子块的预测模式mb_predmode。predmode_ram中存储的是当前宏块上边一行4×4块的预测模式,如图2阴影部分所示。左边块的预测模式存储在predmode模块内。对于高清图像(分辨率为1 920×1 080)来说,predmode_ram需要的存储空间为1 080 bit。

如图3所示,E是当前块,A是左边块,B是上边块,D是左上边块,C是右上边块。predmode模块的结构如图4所示,图中predmode_B模块的作用是获得当前宏块E的上边块B的预测模式,预测当前宏块E的子块0、1、4、5,需要从predmode_ram中读取上边块的参考预测模式,其他子块的上边块参考预测模式是当前块已解码子块的预测模式。predmode_A模块的作用是获得当前宏块E的左边块A的预测模式,预测当前块E的子块0、2、8、10时,左边块预测模式从reg_A里读取。当宏块E的16个子块预测完成时,把5、7、13、15子块的预测模式存储到reg_A中,为下个宏块模式预测提供左边块参考值。


2.2 prediction模块设计

prediction模块是整个帧内预测的核心计算模块。prediction模块的功能是根据获得的参考像素,在不同预测模式下采用不同的预测公式计算当前块的预测值。帧内预测共有17种预测模式,通常若对每种预测模式都设计预测器,当求解一个预算值时,其他16个模式处于空闲,这就造成了很大的资源浪费。通过分析各个模式所对应的运算法则,可以发现这些运算法则的共同特点是:(1)计算每个位置预测值最多需要4个参考样本像素;(2)计算公式都可由加法和移位操作完成计算。根据各个预测模式的相似点,把17种预测模式集合到一个运算单元中,可大大节约硬件资源。

图5给出了PE的设计,该PE的特点是:(1)Horizontal或Vertical预测模式中在获得参考值x0后,在bypass控制下不需要经过运算单元直接获得预测值;(2)DC模式,该模式的预测值是一个平均值。对于Intra_4×4_DC模式,用2个PE单元(PE0和PE1)在1个时钟周期就可解得预测值。Intra_16x16_DC模式需要4个时钟周期,假设左边和上边的参考像素值分别命名为L0~L15和U0~U15,前3个时钟周期,PE0的输入分别为(L0,L1,L2,L3)、((L0+L1+L2+L3),U0,U1,U2)、((L0+L1+L2+L3+U0+U1+U2),U3,0,0),输出存储在PE_reg中作为下个时钟周期的输入,PE1、FE2、PE3的输入类同,最后一个时钟周期把PE0、PE1、PE2、PE3作为PE0的输入求出DC模式的预测值;(3)其他预测模式,如(A+2B+C+2)>>2和plane预处理单元的输出都能经过此运算单元完成预测值的计算。

为了提高解码速度,满足视频解码实时性的要求,采用4个运算单元PE0、PE1、PE2和PE3同时运行, 4个运算单元4个时钟周期可以解码出一个4×4块,提高了解码速度。

2.3 plane模块设计

2.3.1 简化 plane预测模式

Intra_16×16_Plane模式和色度块Intra_chroma_Plane模式是帧内预测中最复杂的预算模式,为了满足系统实时处理的要求,可提前预算plane模式需要的一些参数。本文以Intra_16×16_Plane为例介绍如何简化plane模式,Intra_chroma_Plane方法类同。

在plane模式运算中要用到乘法,为了节约硬件资源,采用移位来实现乘法,其中参数a、b、c的计算公式为:

上述公式,首先求得A后,pred(0,1)、pred(0,2)、pred(0,3)的值是在A的基础上加上c、2c、3c,然后再进行移位和clip。pred(1,0)、pred(2,0)、pred(3,0)的值只是在A的基础上加上b、2b、3b,然后再进行移位和clip。所以提前求得A、b、c,预算值是在A的基础上加上b或者c的倍数,本方法可大大优化plane模式。

2.3.2 plane模式硬件设计

plane模式的关键是求得参数H和V,其硬件设计如图6所示。以V为例介绍本电路。

举例说明本运算单元如何计算出参数H:

当a=a11、b=a12、c=a3、d=a3、sum=0、mux1=0、IS6=0、IS7=0、shift1=0、shift2=1时,就可以求得A1+A3。a=a21、b=a22、c=a51、d=a52、sum=0、mux1=0、IS6=0、IS7=0、shift1=1、shift2=2时,就可以求得A2+A5,并依照这个运算单元可求出A4+A6和A8+A7。

本电路4个时钟周期就可以求得H或V,所以共需要8个时钟周期求H和V。本方法与通常方法相比,只计算一次A、b、c的值,其他位置的预测值只需要在A的基础上加上b或者c的倍数,降低了复杂度。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top