《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 業(yè)界動(dòng)態(tài) > H.264 baseline解碼器中運(yùn)動(dòng)補(bǔ)償模塊的硬件設(shè)計(jì)

H.264 baseline解碼器中運(yùn)動(dòng)補(bǔ)償模塊的硬件設(shè)計(jì)

2008-04-17
作者:俞 堯,楊華中

  摘 要: 完成了H.264 baseline解碼器中運(yùn)動(dòng)補(bǔ)償模塊" title="運(yùn)動(dòng)補(bǔ)償模塊">運(yùn)動(dòng)補(bǔ)償模塊的Verilog建模,通過了功能驗(yàn)證和綜合。該運(yùn)動(dòng)補(bǔ)償模塊可用于H.264 baseline解碼器的FPGA實(shí)現(xiàn)和ASIC實(shí)現(xiàn)。
  關(guān)鍵詞: H.264 運(yùn)動(dòng)補(bǔ)償模塊 硬件設(shè)計(jì)


  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個(gè)不同的檔次,其中baseline檔次適合于手持設(shè)備、個(gè)人終端等應(yīng)用。
  在H.264 baseline解碼器的FPGA或ASIC實(shí)現(xiàn)中,運(yùn)動(dòng)補(bǔ)償模塊占據(jù)十分重要的地位。一般來講,在整個(gè)解碼器中,運(yùn)動(dòng)補(bǔ)償模塊往往是占用硬件復(fù)雜度最高、功耗最大的模塊。因此在解碼器的設(shè)計(jì)過程中,有必要對(duì)運(yùn)動(dòng)補(bǔ)償模塊進(jìn)行精心設(shè)計(jì)。
1 Baseline級(jí)別中運(yùn)動(dòng)補(bǔ)償?shù)奶攸c(diǎn)
  在一般情況下,H.264 baseline解碼器中的運(yùn)動(dòng)補(bǔ)償器具有以下特點(diǎn):
  (1)支持4×4到16×16的可變塊大小的運(yùn)動(dòng)補(bǔ)償。
  (2)支持運(yùn)動(dòng)向量的預(yù)測和恢復(fù)。
  (3)在像素插值" title="插值">插值中,亮度像素的插值精度為1/4像素,色度像素的精度為1/8像素。
  (4)運(yùn)動(dòng)補(bǔ)償器涉及的圖像類型只有I幀和P幀。除此之外,沒有其他類型的圖像。
2 運(yùn)動(dòng)補(bǔ)償模塊的硬件設(shè)計(jì)
  運(yùn)動(dòng)補(bǔ)償?shù)拇笾铝鞒虨椋焊鶕?jù)H.264標(biāo)準(zhǔn)所規(guī)定的算法,利用解碼得到的運(yùn)動(dòng)向量殘差和解碼端計(jì)算出運(yùn)動(dòng)向量估計(jì)值,恢復(fù)出當(dāng)前塊的運(yùn)動(dòng)向量。并利用已經(jīng)掌握的運(yùn)動(dòng)向量、參考幀號(hào)和當(dāng)前解碼塊的位置等信息,從外存(本設(shè)計(jì)支持SDRAM或DDR SDRAM)中讀入所需的參考幀數(shù)據(jù)。然后,利用讀入的參考幀數(shù)據(jù),結(jié)合已經(jīng)計(jì)算出的運(yùn)動(dòng)向量,完成亞像素" title="亞像素">亞像素插值。插值之后的數(shù)據(jù)即是像素的預(yù)測值,該預(yù)測值可以輸出到圖像重建" title="圖像重建">圖像重建模塊中與反量化反變換模塊得到的像素殘差值相加,并回寫入外存中。
  由于H.264使用幀內(nèi)預(yù)測和幀間預(yù)測,圖像重建模塊需要處理來自幀內(nèi)補(bǔ)償和運(yùn)動(dòng)補(bǔ)償兩個(gè)模塊的數(shù)據(jù),所以解碼器中,圖像重建模塊并未被劃分到運(yùn)動(dòng)補(bǔ)償模塊中,而是獨(dú)立成為一個(gè)模塊。該模塊的硬件設(shè)計(jì)也已完成。本運(yùn)動(dòng)補(bǔ)償模塊的頂層結(jié)構(gòu)及周邊模塊的結(jié)構(gòu)如圖1所示。其中虛線框所示為運(yùn)動(dòng)補(bǔ)償模塊的頂層結(jié)構(gòu)。

2.1 運(yùn)動(dòng)向量恢復(fù)模塊

  在H.264 baseline解碼器中,當(dāng)前塊的運(yùn)動(dòng)向量需要通過本地計(jì)算恢復(fù)得到。計(jì)算方法是:將本地恢復(fù)的運(yùn)動(dòng)向量估計(jì)值和編碼端傳輸過來的運(yùn)動(dòng)向量殘差值相加,得到的和即是當(dāng)前塊的運(yùn)動(dòng)向量。其中運(yùn)動(dòng)向量估計(jì)值的計(jì)算完全遵照H.264標(biāo)準(zhǔn)。由于計(jì)算當(dāng)前塊數(shù)據(jù)時(shí)需要用到相鄰塊的數(shù)據(jù),所以需要一個(gè)本地存儲(chǔ)單元將其暫時(shí)存儲(chǔ)。這里所謂的相鄰塊的定義如標(biāo)準(zhǔn)所述。


  運(yùn)動(dòng)向量恢復(fù)模塊的結(jié)構(gòu)如圖2所示。在該模塊中,控制模塊生成控制信號(hào),調(diào)度各個(gè)子模塊的工作。當(dāng)前塊的信息首先被輸入到相鄰塊信息生成模塊。該子模塊利用這些信息計(jì)算出相鄰塊的位置信息。這些位置信息被提交給本地?cái)?shù)據(jù)管理模塊,從中調(diào)用相鄰塊的運(yùn)動(dòng)向量相關(guān)信息,并輸出給運(yùn)動(dòng)向量估計(jì)模塊。運(yùn)動(dòng)向量估計(jì)模塊利用這些數(shù)據(jù),估計(jì)出當(dāng)前塊的運(yùn)動(dòng)向量估計(jì)值,并將估計(jì)值反饋給本地?cái)?shù)據(jù)管理模塊。在本地?cái)?shù)據(jù)管理模塊內(nèi),運(yùn)動(dòng)向量的估計(jì)值和殘差值相加得到當(dāng)前模塊的運(yùn)動(dòng)向量。一方面,這個(gè)運(yùn)動(dòng)向量被作為運(yùn)動(dòng)向量恢復(fù)模塊的輸出;另一方面,運(yùn)動(dòng)向量同時(shí)被存儲(chǔ)進(jìn)本地存儲(chǔ)器,當(dāng)需要時(shí)可被當(dāng)作今后塊的相鄰塊信息調(diào)用。
2.2 參考幀數(shù)據(jù)讀取模塊
  由于參考幀數(shù)據(jù)被按照一定的格式存儲(chǔ)在外存中(本設(shè)計(jì)支持SDRAM或DDR SDRAM),為實(shí)現(xiàn)運(yùn)動(dòng)補(bǔ)償,需要將所需的參考幀數(shù)據(jù)從外存中讀入;另一方面,插值模塊需要使用到這些讀入的數(shù)據(jù)。因此,參考幀讀取模塊的主要功能是將參考幀數(shù)據(jù)讀入,并按照一定的格式輸送給亞像素插值" title="像素插值">像素插值模塊。
  H.264標(biāo)準(zhǔn)規(guī)定,亮度像素通過6抽頭的濾波器實(shí)現(xiàn)半像素插值,色度像素通過2抽頭的濾波器實(shí)現(xiàn)半像素插值。因此,對(duì)于一個(gè)4×4的亮度塊,需要一次讀入一個(gè)9×9像素的塊;對(duì)于2×2的色度塊,需要一次讀入3×3像素的塊。由于亞像素插值是逐行進(jìn)行的,亮度像素每次輸出同一列的6個(gè)點(diǎn)給亞像素插值模塊;而色度像素則輸出同一列的3個(gè)點(diǎn)給亞像素插值模塊。
  總體來講,參考幀數(shù)據(jù)讀取模塊通過一個(gè)多層嵌套的狀態(tài)機(jī)實(shí)現(xiàn)。其中頂層的狀態(tài)跳轉(zhuǎn)狀況如圖3所示。


  首先,本子模塊根據(jù)當(dāng)前塊的位置和當(dāng)前塊的運(yùn)動(dòng)向量,計(jì)算出參考數(shù)據(jù)塊在參考幀中的位置。這個(gè)位置信息和參考幀編號(hào)被一起提交給外部的地址轉(zhuǎn)換模塊,從而申請(qǐng)從外存讀入數(shù)據(jù)。本子模塊內(nèi)部包含了一個(gè)9×9字節(jié)的本地寄存器堆,從外存中讀入的數(shù)據(jù)被暫時(shí)存儲(chǔ)在寄存器堆內(nèi),以便這些數(shù)據(jù)被并發(fā)訪問。一旦進(jìn)入到數(shù)據(jù)輸出狀態(tài),就按節(jié)拍選擇必要的數(shù)據(jù)輸出給亞像素插值模塊。
2.3 亞像素插值模塊
  為盡可能減少片內(nèi)存儲(chǔ)器的數(shù)量并兼顧速度,亞像素模塊對(duì)亮度采用4×4塊串行處理的工作方式。即在一段時(shí)間內(nèi)集中處理一個(gè)4×4亮度塊的數(shù)據(jù)。如果當(dāng)前單元大于4×4,則必定將其劃分為多個(gè)4×4塊,并且這些4×4塊之間享有相同的運(yùn)動(dòng)向量。類似的,對(duì)于色度數(shù)據(jù)則采用2×2塊串行處理的工作方式,即在一段時(shí)間內(nèi)集中處理一個(gè)2×2亮度塊的數(shù)據(jù)。在同一個(gè)4×4或2×2塊內(nèi),則采用逐行計(jì)算的順序。
  對(duì)于亮度部分,需采用6抽頭的濾波器來實(shí)現(xiàn)整像素到半像素的插值。考慮到6個(gè)抽頭的加權(quán)系數(shù)為[1,-5,20,20,-5,1],如果直接采用乘法器實(shí)現(xiàn)乘系數(shù)的運(yùn)算,則必然導(dǎo)致較高的硬件開銷。因此采用兩種基于加法器的設(shè)計(jì)來分別實(shí)現(xiàn)橫向和縱向的半像素插值。這兩種濾波器的結(jié)構(gòu)分別如圖4(a)和圖4(b)所示。


  在圖4所示濾波器中,Sx表示將輸入數(shù)據(jù)向左移x位,而L表示將輸入數(shù)據(jù)延遲一個(gè)時(shí)鐘。在圖4(a)中,N×5用N+(N>>2)實(shí)現(xiàn),N×20用(N>>4)+(N>>2)實(shí)現(xiàn)。圖4(b)采用類似的方法。經(jīng)過合理的設(shè)計(jì),僅采用一個(gè)加法器就實(shí)現(xiàn)了對(duì)6個(gè)抽頭的乘系數(shù)操作。
  同理,對(duì)色度像素也作了基于加法器的設(shè)計(jì),整個(gè)操作全部采用加法器和移位器實(shí)現(xiàn),大大節(jié)省了硬件開銷。
2.4 周邊模塊簡介
  圖像重建模塊負(fù)責(zé)將像素殘差和像素的估計(jì)值求和,并將結(jié)果回寫入外存。H.264解碼器包含運(yùn)動(dòng)補(bǔ)償模塊和幀內(nèi)補(bǔ)償模塊,像素的估計(jì)值可能來自兩者,不同來源地的數(shù)據(jù)都在該模塊內(nèi)處理。因此圖像重建模塊被獨(dú)立為一個(gè)模塊,而不從屬于運(yùn)動(dòng)補(bǔ)償模塊。
  另一方面,參考幀數(shù)據(jù)在外存中按照某種結(jié)構(gòu)存儲(chǔ),對(duì)外存的讀寫需要提交存儲(chǔ)器對(duì)應(yīng)地址,而解碼過程中產(chǎn)生的像素位置值是其在圖像中的坐標(biāo)。地址轉(zhuǎn)換模塊的作用是完成兩者的轉(zhuǎn)化,并將轉(zhuǎn)換結(jié)果輸送給DRAM接口。
  上述周邊模塊的設(shè)計(jì)也已完成。
3 功能驗(yàn)證與綜合
  本運(yùn)動(dòng)補(bǔ)償模塊已通過利用Modelsim XE 5.7c進(jìn)行的功能仿真。在功能驗(yàn)證時(shí),采用與H.264標(biāo)準(zhǔn)配套的jm86生成測試向量。將Verilog模型計(jì)算結(jié)果與jm86本身運(yùn)算結(jié)果比對(duì),兩者完全一致。
  本模塊利用synplify pro 8.1針對(duì)XILINX sparten3 的FPGA開發(fā)板進(jìn)行綜合,結(jié)果顯示共使用了6157個(gè)LUT。利用Synopsys的design vision針對(duì)smic18工藝進(jìn)行綜合,通過了本運(yùn)動(dòng)補(bǔ)償模塊的可綜合性驗(yàn)證。
參考文獻(xiàn)

[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.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請(qǐng)及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。