H.264編碼器中亞像素運動估計的硬件實現(xiàn)
圖4 菱形全搜索
即先利用整像素運動估計搜索出最佳整像素點,再在最佳整像素匹配點的基礎上搜索出最佳整像素點周圍的36個亞像素點(假設在圖5中正中心點是最佳整像素匹配點)。等36個亞像素點都計算出來后,加上正中心的最佳整像素點共37個像素點。比較這37個像素點的SATD的值,將SATD值最小的像素點確定為最佳的預測點。
由于H.264采用樹形結構運動估計,每個宏塊可劃分成更小的子塊,其中4×4塊是宏塊劃分中最小的子塊,任何類型的子塊都可由若干個具有相同運動矢量的4×4塊組成,因此本設計在硬件實現(xiàn)時將4×4塊作為處理的基本單位??紤]到硬件資源的節(jié)省及計算的并行度,在本設計模塊中每次能并行處理兩個4×4塊的亞像素點的搜索,一個宏塊(16×16)要分8次完成。
其中IME單元為FME單元提供10×10整像素點陣列,內插法用于1/2像素點的插值,ave單元用于計算1/4像素精度的像素點,Sram單元用于存儲計算出來的亞像素點的值。比較器單元由diff、DCT、satd三個單元組成,用于比較這些亞像素的SATD值,確定最佳的亞像素預測值。
假設當前處理的4×4塊在參考幀中的最佳整像素匹配塊(4×4塊為匹配的塊),在硬件實現(xiàn)的過程中為減少搜索次數(shù),只要搜索出圖5中對應的5×5塊的每個整像素點左上角的15個亞像素點(,然后將相鄰整像素點左上角的亞像素點進行組合后就能將當前處理的4×4塊中每個整像素點周圍的36個亞像素點都計算出來。
圖5 最佳整像素匹配塊
本設計在硬件實現(xiàn)的過程中為提高計算的并行度,利用15個六抽頭濾波器,25個均值器等硬件資源來計算圖8所示的亞像素點的值,計算依據(jù)分別如公式1、2所示,硬件搜索計算過程如圖6所示。
圖6 亞像素點硬件搜索步驟
通過上述15個步驟就可將圖8所示的亞像素點全部計算出來,并將計算出來的亞像素點的值都存入到開辟的Sram中,以便在進行P幀重構時從Sram中直接取出最佳的預測值給相關的模塊。由于如上文所述在對每個4×4塊進行亞像素搜索時要計算出對應的5×5塊(如圖7所示4×4塊對應的5×5塊)的每個整像素點左上角的15個亞像素點的值(如圖8所示的15個亞像素點),加上最佳整像素點共16個像素點的值都要存儲起來,且對應的5×5塊中的每個整像素點左上角的亞像素點的像素值都是并行計算出來的(如step1計算點2,是將對應的5×5塊的25個整像素點左上角對應的點2一次全計算出來),所以在進行一個4×4塊的亞像素搜索時,要存儲的像素點共有25×16個。由于在本設計模塊中每次能并行處理兩個4×4塊單元,即利用兩套FME模塊資源并行處理兩個4×4塊的亞像素搜索,一個宏塊(16×16)要分8次完成??紤]到數(shù)據(jù)組織的方便性,本設計在一套FME模塊中開辟兩塊Sram資源,一塊大小為104×128,一個地址存儲13個像素點的值(每個像素點的值占8bit),另一塊大小為96×128,一個地址能存儲12個像素點的值(每個像素點的值占8bit),地址深度128剛好能存儲8個4×4塊的亞像素點的像素值,所以兩套FME模塊中的Sram資源剛好能把一個宏塊的亞像素點的像素值都存儲起來。此設計在硬件的實現(xiàn)過程中計算并行度高,硬件實現(xiàn)簡潔有效。
根據(jù)圖6所示的硬件架構及上文描述的算法原理,利用Verilog HDL對其進行建模,建立測試平臺在ModelSim環(huán)境中進行編譯、仿真,驗證其功能的準確性。然后使用Synplify工具對其進行綜合,工作頻率可達68MHz。在FPGA 驗證平臺上,可實現(xiàn)對高清碼流(1920×1080)的編碼,利用Design Complier工具進行綜合,在中芯國際0.18μm 工藝標準單元庫的基礎上,綜合后面積占150千門,工作時鐘頻率可達166MHz,達到了預期要求。
結語
H.264中的分數(shù)運動估計能有效提高預測精度,但大大增加了計算復雜度。同整數(shù)運動估計一樣,分數(shù)運動估計存在兩個主要問題,一是計算量大,二是存儲訪問量大。而本文提出與其他實現(xiàn)方法相比在空間上具有更高的并行度,處理能力更高,不但減少了大量中間數(shù)據(jù)的存儲與傳輸,節(jié)省了存儲器資源,而且簡化了數(shù)據(jù)流和控制流,使硬件實現(xiàn)簡潔有效,非常適合高分辨率視頻的分像素運動估計。
評論