基于FPGA的H.264幀內(nèi)預(yù)測(cè)模塊設(shè)計(jì)
H.264/AVC是由國(guó)際電信聯(lián)盟(ITU)和國(guó)際標(biāo)準(zhǔn)化組織(ISO)共同提出的最新一代數(shù)字視頻壓縮標(biāo)準(zhǔn),它吸取了以往壓縮技術(shù)的精華,又引進(jìn)了其他壓縮技術(shù)無(wú)法比擬的許多新技術(shù),因此,H.264在通信領(lǐng)域得到了廣泛應(yīng)用。H.264/AVC壓縮效率很高,但算法的復(fù)雜度和運(yùn)算量同時(shí)也大大增加,為了滿(mǎn)足視頻解碼實(shí)時(shí)性的要求,尋求更有效的解碼技術(shù)成為重要的研究課題。
幀內(nèi)預(yù)測(cè)是視頻編解碼中重要的一部分,其主要功能是降低圖像的空間冗余。本文根據(jù)H.264/AVC 幀內(nèi)預(yù)測(cè)的特點(diǎn)并結(jié)合對(duì)其算法的分析,提出了一種幀內(nèi)預(yù)測(cè)硬件電路結(jié)構(gòu),有效地減少了硬件電路面積,提高了解碼的性能。
1 H.264幀內(nèi)預(yù)測(cè)算法介紹
H.264視頻解碼器中,對(duì)于I和SI宏塊類(lèi)型采用幀內(nèi)預(yù)測(cè)來(lái)解碼。幀內(nèi)預(yù)測(cè)模塊的輸入是當(dāng)前宏塊相鄰左邊塊和上邊塊環(huán)路濾波前的像素值及參考預(yù)測(cè)模式,輸出是當(dāng)前宏塊的預(yù)測(cè)值。預(yù)測(cè)值與反變換反量化得到的殘差值重構(gòu),得到宏塊的像素值。完成后,當(dāng)前宏塊的部分像素值和預(yù)測(cè)模式要進(jìn)行存儲(chǔ),為后面宏塊解碼提供參考值。
H.264中亮度預(yù)測(cè)分兩類(lèi),一類(lèi)是針對(duì)圖像中含有大量細(xì)節(jié)的部分采用4×4塊的預(yù)測(cè)模式(有9種預(yù)測(cè)模式);另一類(lèi)是對(duì)圖像中比較平緩的區(qū)域采用16×16塊的預(yù)測(cè)模式(有4種預(yù)測(cè)模式)。色度預(yù)測(cè)是8×8塊的預(yù)測(cè)模式,有4種預(yù)測(cè)模式,這4種預(yù)測(cè)模式與亮度16×16的預(yù)測(cè)模式相似,也有豎直、水平、DC和平面模式。所有的預(yù)測(cè)模式都是根據(jù)左邊塊和上邊塊的參考值,計(jì)算當(dāng)前宏塊的預(yù)測(cè)值。
2 硬件實(shí)現(xiàn)
根據(jù)幀內(nèi)預(yù)測(cè)算法,硬件結(jié)構(gòu)劃分為predmode模塊、plane模塊、prediction模塊、reconstruct模塊、left_pixels模塊、predmode_ram、prediction_ram、sample和prediction_output模塊。如圖1所示,其中l(wèi)eft_pixels、prediction_ram、predmode _ram、sample和prediction_output模塊都是存儲(chǔ)單元,分別存儲(chǔ)的是當(dāng)前宏塊左邊塊的參考值、當(dāng)前宏塊上邊塊參考值、當(dāng)前宏塊上邊塊的參考預(yù)測(cè)模式、提取的參考像素值和當(dāng)前宏塊預(yù)測(cè)值輸出;predmode模塊預(yù)測(cè)計(jì)算出當(dāng)前塊的預(yù)測(cè)模式;plane模塊是對(duì)plane預(yù)測(cè)模式的預(yù)處理;prediction模塊是幀內(nèi)預(yù)測(cè)的核心計(jì)算單元,4個(gè)PE單元并行運(yùn)算,一個(gè)時(shí)鐘周期解碼出一個(gè)4×4的一列4個(gè)預(yù)測(cè)值;reconstruct模塊的功能是實(shí)現(xiàn)重構(gòu)。
2.1 predmode模塊設(shè)計(jì)
Intra_16×16和Intra_Chroma的預(yù)測(cè)模式可通過(guò)語(yǔ)法元素解析直接獲得,所以本模塊的主要任務(wù)是解析Intra_4×4的預(yù)測(cè)模式。
本模式預(yù)測(cè)器的輸入是當(dāng)前4×4亮度塊的luma_4×4BlkIdx(塊索引)、解析的語(yǔ)法元素和當(dāng)前宏塊的信息。輸出是當(dāng)前宏塊的16個(gè)子塊的預(yù)測(cè)模式mb_predmode。predmode_ram中存儲(chǔ)的是當(dāng)前宏塊上邊一行4×4塊的預(yù)測(cè)模式,如圖2陰影部分所示。左邊塊的預(yù)測(cè)模式存儲(chǔ)在predmode模塊內(nèi)。對(duì)于高清圖像(分辨率為1 920×1 080)來(lái)說(shuō),predmode_ram需要的存儲(chǔ)空間為1 080 bit。
如圖3所示,E是當(dāng)前塊,A是左邊塊,B是上邊塊,D是左上邊塊,C是右上邊塊。predmode模塊的結(jié)構(gòu)如圖4所示,圖中predmode_B模塊的作用是獲得當(dāng)前宏塊E的上邊塊B的預(yù)測(cè)模式,預(yù)測(cè)當(dāng)前宏塊E的子塊0、1、4、5,需要從predmode_ram中讀取上邊塊的參考預(yù)測(cè)模式,其他子塊的上邊塊參考預(yù)測(cè)模式是當(dāng)前塊已解碼子塊的預(yù)測(cè)模式。predmode_A模塊的作用是獲得當(dāng)前宏塊E的左邊塊A的預(yù)測(cè)模式,預(yù)測(cè)當(dāng)前塊E的子塊0、2、8、10時(shí),左邊塊預(yù)測(cè)模式從reg_A里讀取。當(dāng)宏塊E的16個(gè)子塊預(yù)測(cè)完成時(shí),把5、7、13、15子塊的預(yù)測(cè)模式存儲(chǔ)到reg_A中,為下個(gè)宏塊模式預(yù)測(cè)提供左邊塊參考值。
2.2 prediction模塊設(shè)計(jì)
prediction模塊是整個(gè)幀內(nèi)預(yù)測(cè)的核心計(jì)算模塊。prediction模塊的功能是根據(jù)獲得的參考像素,在不同預(yù)測(cè)模式下采用不同的預(yù)測(cè)公式計(jì)算當(dāng)前塊的預(yù)測(cè)值。幀內(nèi)預(yù)測(cè)共有17種預(yù)測(cè)模式,通常若對(duì)每種預(yù)測(cè)模式都設(shè)計(jì)預(yù)測(cè)器,當(dāng)求解一個(gè)預(yù)算值時(shí),其他16個(gè)模式處于空閑,這就造成了很大的資源浪費(fèi)。通過(guò)分析各個(gè)模式所對(duì)應(yīng)的運(yùn)算法則,可以發(fā)現(xiàn)這些運(yùn)算法則的共同特點(diǎn)是:(1)計(jì)算每個(gè)位置預(yù)測(cè)值最多需要4個(gè)參考樣本像素;(2)計(jì)算公式都可由加法和移位操作完成計(jì)算。根據(jù)各個(gè)預(yù)測(cè)模式的相似點(diǎn),把17種預(yù)測(cè)模式集合到一個(gè)運(yùn)算單元中,可大大節(jié)約硬件資源。
圖5給出了PE的設(shè)計(jì),該P(yáng)E的特點(diǎn)是:(1)Horizontal或Vertical預(yù)測(cè)模式中在獲得參考值x0后,在bypass控制下不需要經(jīng)過(guò)運(yùn)算單元直接獲得預(yù)測(cè)值;(2)DC模式,該模式的預(yù)測(cè)值是一個(gè)平均值。對(duì)于Intra_4×4_DC模式,用2個(gè)PE單元(PE0和PE1)在1個(gè)時(shí)鐘周期就可解得預(yù)測(cè)值。Intra_16x16_DC模式需要4個(gè)時(shí)鐘周期,假設(shè)左邊和上邊的參考像素值分別命名為L(zhǎng)0~L15和U0~U15,前3個(gè)時(shí)鐘周期,PE0的輸入分別為(L0,L1,L2,L3)、((L0+L1+L2+L3),U0,U1,U2)、((L0+L1+L2+L3+U0+U1+U2),U3,0,0),輸出存儲(chǔ)在PE_reg中作為下個(gè)時(shí)鐘周期的輸入,PE1、FE2、PE3的輸入類(lèi)同,最后一個(gè)時(shí)鐘周期把PE0、PE1、PE2、PE3作為PE0的輸入求出DC模式的預(yù)測(cè)值;(3)其他預(yù)測(cè)模式,如(A+2B+C+2)>>2和plane預(yù)處理單元的輸出都能經(jīng)過(guò)此運(yùn)算單元完成預(yù)測(cè)值的計(jì)算。
為了提高解碼速度,滿(mǎn)足視頻解碼實(shí)時(shí)性的要求,采用4個(gè)運(yùn)算單元PE0、PE1、PE2和PE3同時(shí)運(yùn)行, 4個(gè)運(yùn)算單元4個(gè)時(shí)鐘周期可以解碼出一個(gè)4×4塊,提高了解碼速度。
2.3 plane模塊設(shè)計(jì)
2.3.1 簡(jiǎn)化 plane預(yù)測(cè)模式
Intra_16×16_Plane模式和色度塊Intra_chroma_Plane模式是幀內(nèi)預(yù)測(cè)中最復(fù)雜的預(yù)算模式,為了滿(mǎn)足系統(tǒng)實(shí)時(shí)處理的要求,可提前預(yù)算plane模式需要的一些參數(shù)。本文以Intra_16×16_Plane為例介紹如何簡(jiǎn)化plane模式,Intra_chroma_Plane方法類(lèi)同。
在plane模式運(yùn)算中要用到乘法,為了節(jié)約硬件資源,采用移位來(lái)實(shí)現(xiàn)乘法,其中參數(shù)a、b、c的計(jì)算公式為:
上述公式,首先求得A后,pred(0,1)、pred(0,2)、pred(0,3)的值是在A的基礎(chǔ)上加上c、2c、3c,然后再進(jìn)行移位和clip。pred(1,0)、pred(2,0)、pred(3,0)的值只是在A的基礎(chǔ)上加上b、2b、3b,然后再進(jìn)行移位和clip。所以提前求得A、b、c,預(yù)算值是在A的基礎(chǔ)上加上b或者c的倍數(shù),本方法可大大優(yōu)化plane模式。
2.3.2 plane模式硬件設(shè)計(jì)
plane模式的關(guān)鍵是求得參數(shù)H和V,其硬件設(shè)計(jì)如圖6所示。以V為例介紹本電路。
舉例說(shuō)明本運(yùn)算單元如何計(jì)算出參數(shù)H:
當(dāng)a=a11、b=a12、c=a3、d=a3、sum=0、mux1=0、IS6=0、IS7=0、shift1=0、shift2=1時(shí),就可以求得A1+A3。a=a21、b=a22、c=a51、d=a52、sum=0、mux1=0、IS6=0、IS7=0、shift1=1、shift2=2時(shí),就可以求得A2+A5,并依照這個(gè)運(yùn)算單元可求出A4+A6和A8+A7。
本電路4個(gè)時(shí)鐘周期就可以求得H或V,所以共需要8個(gè)時(shí)鐘周期求H和V。本方法與通常方法相比,只計(jì)算一次A、b、c的值,其他位置的預(yù)測(cè)值只需要在A的基礎(chǔ)上加上b或者c的倍數(shù),降低了復(fù)雜度。
3 實(shí)驗(yàn)結(jié)果
本設(shè)計(jì)使用Verilog HDL完成硬件代碼的編寫(xiě),并用Altera公司的Quartus II 8.0進(jìn)行代碼的仿真和綜合。圖7為核心單元prediction模塊的仿真結(jié)果,PE0_out、PE1_out、PE2_out、PE3_out9為4個(gè)并行單元的輸出。采用Altera公司的Cyclone II進(jìn)行本設(shè)計(jì)FPGA驗(yàn)證,本設(shè)計(jì)占用的邏輯資源數(shù)量較少,節(jié)約了硬件資源。
本文根據(jù)H.264幀內(nèi)預(yù)測(cè)的特點(diǎn),提出了一種并行處理的硬件實(shí)現(xiàn)方法。該方法能夠提高幀內(nèi)預(yù)測(cè)的處理速度,節(jié)約了硬件資源,滿(mǎn)足了高清視頻的解碼要求。
評(píng)論