基于FPGA的H.264幀內預測模塊設計
H.264/AVC是由國際電信聯(lián)盟(ITU)和國際標準化組織(ISO)共同提出的最新一代數字視頻壓縮標準,它吸取了以往壓縮技術的精華,又引進了其他壓縮技術無法比擬的許多新技術,因此,H.264在通信領域得到了廣泛應用。H.264/AVC壓縮效率很高,但算法的復雜度和運算量同時也大大增加,為了滿足視頻解碼實時性的要求,尋求更有效的解碼技術成為重要的研究課題。
幀內預測是視頻編解碼中重要的一部分,其主要功能是降低圖像的空間冗余。本文根據H.264/AVC 幀內預測的特點并結合對其算法的分析,提出了一種幀內預測硬件電路結構,有效地減少了硬件電路面積,提高了解碼的性能。
1 H.264幀內預測算法介紹
H.264視頻解碼器中,對于I和SI宏塊類型采用幀內預測來解碼。幀內預測模塊的輸入是當前宏塊相鄰左邊塊和上邊塊環(huán)路濾波前的像素值及參考預測模式,輸出是當前宏塊的預測值。預測值與反變換反量化得到的殘差值重構,得到宏塊的像素值。完成后,當前宏塊的部分像素值和預測模式要進行存儲,為后面宏塊解碼提供參考值。
H.264中亮度預測分兩類,一類是針對圖像中含有大量細節(jié)的部分采用4×4塊的預測模式(有9種預測模式);另一類是對圖像中比較平緩的區(qū)域采用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所示,其中l(wèi)eft_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個模式處于空閑,這就造成了很大的資源浪費。通過分析各個模式所對應的運算法則,可以發(fā)現這些運算法則的共同特點是:(1)計算每個位置預測值最多需要4個參考樣本像素;(2)計算公式都可由加法和移位操作完成計算。根據各個預測模式的相似點,把17種預測模式集合到一個運算單元中,可大大節(jié)約硬件資源。
圖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模式是幀內預測中最復雜的預算模式,為了滿足系統(tǒng)實時處理的要求,可提前預算plane模式需要的一些參數。本文以Intra_16×16_Plane為例介紹如何簡化plane模式,Intra_chroma_Plane方法類同。
在plane模式運算中要用到乘法,為了節(jié)約硬件資源,采用移位來實現乘法,其中參數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的倍數,本方法可大大優(yōu)化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的倍數,降低了復雜度。
3 實驗結果
本設計使用Verilog HDL完成硬件代碼的編寫,并用Altera公司的Quartus II 8.0進行代碼的仿真和綜合。圖7為核心單元prediction模塊的仿真結果,PE0_out、PE1_out、PE2_out、PE3_out9為4個并行單元的輸出。采用Altera公司的Cyclone II進行本設計FPGA驗證,本設計占用的邏輯資源數量較少,節(jié)約了硬件資源。
本文根據H.264幀內預測的特點,提出了一種并行處理的硬件實現方法。該方法能夠提高幀內預測的處理速度,節(jié)約了硬件資源,滿足了高清視頻的解碼要求。
評論