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