基于H.264的Exp-Golomb解碼器ASIC設計
本文的研究目標是設計H.264標準中的Exp-Golomb解碼器,在對其算法進(jìn)行深入探討的基礎上,提出了一種高效且低成本的ASIC實(shí)現方案。
Exp-Golomb編碼原理及解碼算法分析
在H.264基本規范中,除了殘差變換系數采用CAVLC編碼方式外,其它句法元素均使用Exp-Golomb編碼。Exp-Golomb編碼是一種有規則的變長(cháng)編碼方式,在各類(lèi)視頻編碼標準中被廣泛應用。Exp-Golomb編碼基于符號的概率統計進(jìn)行編碼,用短碼字來(lái)表示出現概率高的信息,用長(cháng)碼字來(lái)表示出現概率低的信息,碼長(cháng)與被編碼數成指數對應關(guān)系,從而使總體平均碼字最短。與定長(cháng)編碼方式相比,節省了大量存儲空間。
在H.264中采用的是0階Exp-Golomb編碼,編碼規則如圖1所示。
Exp-Golomb碼字的邏輯結構為:[M zeros][1][INFO]。其中M個(gè)0和中間的1稱(chēng)為前綴,INFO是M位的信息值,因此,每個(gè)Exp-Golomb碼字的長(cháng)度都為2M+ 1。每個(gè)索引字codenum經(jīng)過(guò)編碼都可以對應一個(gè)如上結構的碼字,它們之間的關(guān)系是:
codenum=2M+INFO-1 (1)
由式1可知,進(jìn)行Exp-Golomb解碼可先探測出碼字前連續O的個(gè)數,再取出后綴,經(jīng)該公式計算即可得到codenum值。在H.264中存在四種Exp-Golomb碼:無(wú)符號型ue(v)、有符號型se(v)、映射型me(v)和截斷型te(v)。因此,對于解出的codenum值,根據句法元素類(lèi)型的不同有四種映射方式,如表2所示。根據相應描述完成映射后,輸出syntax即為解碼值。
Exp-Golomb解碼器硬件結構設計
基于以上解碼算法設計的Exp-Golomb解碼器硬件結構如圖1所示。整個(gè)系統主要由以下模塊組成:輸入碼流緩沖移位模塊、碼長(cháng)檢測模塊、 codenum生成模塊以及句法元素映射模塊。系統上電復位后,首先由碼流緩沖移位模塊提供待解碼字,然后由碼長(cháng)檢測模塊中的首一檢測器探測出連續0 的個(gè)數,即時(shí)計算得出當前碼長(cháng)送至累加器。同時(shí),首一檢測的結果和待解碼字一起送至codenum計算模塊,經(jīng)移位、相減得到codenum值。最后將 codenum送至四個(gè)映射單元處理,最終解碼句法元素由選擇器輸出至寄存器。整個(gè)解碼流程用一個(gè)時(shí)鐘周期完成。下文將詳細敘述各功能子模塊的硬件結構。
輸入碼流緩沖移位模塊
輸入碼流緩沖移位模塊是實(shí)現H.264實(shí)時(shí)解碼的關(guān)鍵模塊。由于在每個(gè)變長(cháng)解碼流程中,碼長(cháng)不可能事先確定,所以在解出碼值的同時(shí)必須定位下一個(gè)碼字。這就要求該模塊具有快速響應和并行輸出的特點(diǎn)。由于H.264中定義Exp-Golomb碼最大碼長(cháng)不超過(guò)32,設計中采用兩個(gè)32位寄存器,一個(gè)32位桶形移位器及一個(gè)累加器的組合來(lái)實(shí)現該功能,如圖1左端所示。其中,寄存器Rn負責從外部模塊讀取數據,并和寄存器R1一起作為桶形移位器的輸入; 在每個(gè)解碼周期,桶形移位器移出已解碼流的同時(shí)還要裝載新的待解碼流;而累加器則計數已處理碼長(cháng),傳送桶形移位器移位長(cháng)度,判斷并控制R0的讀取和R1的更新。這樣就為后續處理單元提供了連續不間斷的碼流。
評論