摘 要: 完成了H.264 baseline解碼器中運動補償模塊" title="運動補償模塊">運動補償模塊的Verilog建模,通過了功能驗證和綜合。該運動補償模塊可用于H.264 baseline解碼器的FPGA實現(xiàn)和ASIC實現(xiàn)。
關(guān)鍵詞: H.264 運動補償模塊 硬件設(shè)計
H.264是ITU-T(VCEG)和ISO/IEC(JVT)聯(lián)合提出的新一代的視頻編碼標(biāo)準(zhǔn),該標(biāo)準(zhǔn)于2003年公布。H.264標(biāo)準(zhǔn)承諾將在編碼壓縮性能上超過以往所有的視頻編碼標(biāo)準(zhǔn)(MPEG2,MPEG4,H.263等)。H.264包含7個不同的檔次,其中baseline檔次適合于手持設(shè)備、個人終端等應(yīng)用。
在H.264 baseline解碼器的FPGA或ASIC實現(xiàn)中,運動補償模塊占據(jù)十分重要的地位。一般來講,在整個解碼器中,運動補償模塊往往是占用硬件復(fù)雜度最高、功耗最大的模塊。因此在解碼器的設(shè)計過程中,有必要對運動補償模塊進行精心設(shè)計。
1 Baseline級別中運動補償?shù)奶攸c
在一般情況下,H.264 baseline解碼器中的運動補償器具有以下特點:
(1)支持4×4到16×16的可變塊大小的運動補償。
(2)支持運動向量的預(yù)測和恢復(fù)。
(3)在像素插值" title="插值">插值中,亮度像素的插值精度為1/4像素,色度像素的精度為1/8像素。
(4)運動補償器涉及的圖像類型只有I幀和P幀。除此之外,沒有其他類型的圖像。
2 運動補償模塊的硬件設(shè)計
運動補償?shù)拇笾铝鞒虨椋焊鶕?jù)H.264標(biāo)準(zhǔn)所規(guī)定的算法,利用解碼得到的運動向量殘差和解碼端計算出運動向量估計值,恢復(fù)出當(dāng)前塊的運動向量。并利用已經(jīng)掌握的運動向量、參考幀號和當(dāng)前解碼塊的位置等信息,從外存(本設(shè)計支持SDRAM或DDR SDRAM)中讀入所需的參考幀數(shù)據(jù)。然后,利用讀入的參考幀數(shù)據(jù),結(jié)合已經(jīng)計算出的運動向量,完成亞像素" title="亞像素">亞像素插值。插值之后的數(shù)據(jù)即是像素的預(yù)測值,該預(yù)測值可以輸出到圖像重建" title="圖像重建">圖像重建模塊中與反量化反變換模塊得到的像素殘差值相加,并回寫入外存中。
由于H.264使用幀內(nèi)預(yù)測和幀間預(yù)測,圖像重建模塊需要處理來自幀內(nèi)補償和運動補償兩個模塊的數(shù)據(jù),所以解碼器中,圖像重建模塊并未被劃分到運動補償模塊中,而是獨立成為一個模塊。該模塊的硬件設(shè)計也已完成。本運動補償模塊的頂層結(jié)構(gòu)及周邊模塊的結(jié)構(gòu)如圖1所示。其中虛線框所示為運動補償模塊的頂層結(jié)構(gòu)。
2.1 運動向量恢復(fù)模塊
在H.264 baseline解碼器中,當(dāng)前塊的運動向量需要通過本地計算恢復(fù)得到。計算方法是:將本地恢復(fù)的運動向量估計值和編碼端傳輸過來的運動向量殘差值相加,得到的和即是當(dāng)前塊的運動向量。其中運動向量估計值的計算完全遵照H.264標(biāo)準(zhǔn)。由于計算當(dāng)前塊數(shù)據(jù)時需要用到相鄰塊的數(shù)據(jù),所以需要一個本地存儲單元將其暫時存儲。這里所謂的相鄰塊的定義如標(biāo)準(zhǔn)所述。
運動向量恢復(fù)模塊的結(jié)構(gòu)如圖2所示。在該模塊中,控制模塊生成控制信號,調(diào)度各個子模塊的工作。當(dāng)前塊的信息首先被輸入到相鄰塊信息生成模塊。該子模塊利用這些信息計算出相鄰塊的位置信息。這些位置信息被提交給本地數(shù)據(jù)管理模塊,從中調(diào)用相鄰塊的運動向量相關(guān)信息,并輸出給運動向量估計模塊。運動向量估計模塊利用這些數(shù)據(jù),估計出當(dāng)前塊的運動向量估計值,并將估計值反饋給本地數(shù)據(jù)管理模塊。在本地數(shù)據(jù)管理模塊內(nèi),運動向量的估計值和殘差值相加得到當(dāng)前模塊的運動向量。一方面,這個運動向量被作為運動向量恢復(fù)模塊的輸出;另一方面,運動向量同時被存儲進本地存儲器,當(dāng)需要時可被當(dāng)作今后塊的相鄰塊信息調(diào)用。
2.2 參考幀數(shù)據(jù)讀取模塊
由于參考幀數(shù)據(jù)被按照一定的格式存儲在外存中(本設(shè)計支持SDRAM或DDR SDRAM),為實現(xiàn)運動補償,需要將所需的參考幀數(shù)據(jù)從外存中讀入;另一方面,插值模塊需要使用到這些讀入的數(shù)據(jù)。因此,參考幀讀取模塊的主要功能是將參考幀數(shù)據(jù)讀入,并按照一定的格式輸送給亞像素插值" title="像素插值">像素插值模塊。
H.264標(biāo)準(zhǔn)規(guī)定,亮度像素通過6抽頭的濾波器實現(xiàn)半像素插值,色度像素通過2抽頭的濾波器實現(xiàn)半像素插值。因此,對于一個4×4的亮度塊,需要一次讀入一個9×9像素的塊;對于2×2的色度塊,需要一次讀入3×3像素的塊。由于亞像素插值是逐行進行的,亮度像素每次輸出同一列的6個點給亞像素插值模塊;而色度像素則輸出同一列的3個點給亞像素插值模塊。
總體來講,參考幀數(shù)據(jù)讀取模塊通過一個多層嵌套的狀態(tài)機實現(xiàn)。其中頂層的狀態(tài)跳轉(zhuǎn)狀況如圖3所示。
首先,本子模塊根據(jù)當(dāng)前塊的位置和當(dāng)前塊的運動向量,計算出參考數(shù)據(jù)塊在參考幀中的位置。這個位置信息和參考幀編號被一起提交給外部的地址轉(zhuǎn)換模塊,從而申請從外存讀入數(shù)據(jù)。本子模塊內(nèi)部包含了一個9×9字節(jié)的本地寄存器堆,從外存中讀入的數(shù)據(jù)被暫時存儲在寄存器堆內(nèi),以便這些數(shù)據(jù)被并發(fā)訪問。一旦進入到數(shù)據(jù)輸出狀態(tài),就按節(jié)拍選擇必要的數(shù)據(jù)輸出給亞像素插值模塊。
2.3 亞像素插值模塊
為盡可能減少片內(nèi)存儲器的數(shù)量并兼顧速度,亞像素模塊對亮度采用4×4塊串行處理的工作方式。即在一段時間內(nèi)集中處理一個4×4亮度塊的數(shù)據(jù)。如果當(dāng)前單元大于4×4,則必定將其劃分為多個4×4塊,并且這些4×4塊之間享有相同的運動向量。類似的,對于色度數(shù)據(jù)則采用2×2塊串行處理的工作方式,即在一段時間內(nèi)集中處理一個2×2亮度塊的數(shù)據(jù)。在同一個4×4或2×2塊內(nèi),則采用逐行計算的順序。
對于亮度部分,需采用6抽頭的濾波器來實現(xiàn)整像素到半像素的插值??紤]到6個抽頭的加權(quán)系數(shù)為[1,-5,20,20,-5,1],如果直接采用乘法器實現(xiàn)乘系數(shù)的運算,則必然導(dǎo)致較高的硬件開銷。因此采用兩種基于加法器的設(shè)計來分別實現(xiàn)橫向和縱向的半像素插值。這兩種濾波器的結(jié)構(gòu)分別如圖4(a)和圖4(b)所示。
在圖4所示濾波器中,Sx表示將輸入數(shù)據(jù)向左移x位,而L表示將輸入數(shù)據(jù)延遲一個時鐘。在圖4(a)中,N×5用N+(N>>2)實現(xiàn),N×20用(N>>4)+(N>>2)實現(xiàn)。圖4(b)采用類似的方法。經(jīng)過合理的設(shè)計,僅采用一個加法器就實現(xiàn)了對6個抽頭的乘系數(shù)操作。
同理,對色度像素也作了基于加法器的設(shè)計,整個操作全部采用加法器和移位器實現(xiàn),大大節(jié)省了硬件開銷。
2.4 周邊模塊簡介
圖像重建模塊負(fù)責(zé)將像素殘差和像素的估計值求和,并將結(jié)果回寫入外存。H.264解碼器包含運動補償模塊和幀內(nèi)補償模塊,像素的估計值可能來自兩者,不同來源地的數(shù)據(jù)都在該模塊內(nèi)處理。因此圖像重建模塊被獨立為一個模塊,而不從屬于運動補償模塊。
另一方面,參考幀數(shù)據(jù)在外存中按照某種結(jié)構(gòu)存儲,對外存的讀寫需要提交存儲器對應(yīng)地址,而解碼過程中產(chǎn)生的像素位置值是其在圖像中的坐標(biāo)。地址轉(zhuǎn)換模塊的作用是完成兩者的轉(zhuǎn)化,并將轉(zhuǎn)換結(jié)果輸送給DRAM接口。
上述周邊模塊的設(shè)計也已完成。
3 功能驗證與綜合
本運動補償模塊已通過利用Modelsim XE 5.7c進行的功能仿真。在功能驗證時,采用與H.264標(biāo)準(zhǔn)配套的jm86生成測試向量。將Verilog模型計算結(jié)果與jm86本身運算結(jié)果比對,兩者完全一致。
本模塊利用synplify pro 8.1針對XILINX sparten3 的FPGA開發(fā)板進行綜合,結(jié)果顯示共使用了6157個LUT。利用Synopsys的design vision針對smic18工藝進行綜合,通過了本運動補償模塊的可綜合性驗證。
參考文獻
[1] Draft ITU-T Recommendation and pre-publish draft international standard of jointVid sopecification(ITU-T Rec.H.264ISO/IEC 14496-10:2005(E)) Joint Video Team(JVT), Mar.2005.
[2] Iain G.Richardson.International electrotechnical commission video coding for next-generation multimedia,0-470-84837-5,2003.
[3] HE Wei feng,MAO Zhi gaig,WANG Jin riang,et al.Design and implementation of motion compensation for MPEG-4 AS profile streaming video decoding,0-7803-7889-x/03,IEEE,2003.
[4] CHIEN Chih Da,CHEN Ho Chun,HUANG Lin-Chieh,et? al.A low-power motion compensation IP core design for? MPEG-1/2/4 video decoding,0-7803-8834-8/05,IEEE, 2005.