JPEG解碼器IP核的設(shè)計(jì)與實(shí)現(xiàn)
1.2 碼流緩存模塊設(shè)計(jì)
JPEG碼流是變長碼,數(shù)據(jù)量大,如果采用傳統(tǒng)的解碼方法對(duì)碼字的每個(gè)比特進(jìn)行處理,其輸出速率勢(shì)必不能滿足應(yīng)用要求。JPEG標(biāo)準(zhǔn)中數(shù)據(jù)編碼的最大碼長為26,而在標(biāo)志段解碼時(shí)要求碼長為8的整數(shù)倍,所以設(shè)計(jì)中采用兩個(gè)32位寄存器、一個(gè)32位桶形移位器、一個(gè)加法器和一個(gè)減法器的組合來實(shí)現(xiàn)該功能。其中,寄存器Rn負(fù)責(zé)從外部模塊讀取數(shù)據(jù),并和寄存器R1一起作為桶形移位器的輸入緩存。每個(gè)解碼周期,桶形移位器移出已解碼流的同時(shí)裝載新的待解碼流。減法器用于計(jì)算已處理碼長,傳送桶形移位器移位長度,判斷并控制R0的讀取和R1的更新。加法器用于碼流輸入時(shí)更新寄存器碼長和桶形移位器移位長度。這樣就為后續(xù)處理單元提供了連續(xù)不間斷的碼流,滿足了并行解碼處理的需求。
桶形移位器的輸出是32位,因此每個(gè)時(shí)鐘周期R0、R1必須為其提供32位的有效碼流。圖3所示給出了桶形移位器輸入緩存的更新示例。本文引用地址:http://www.ex-cimer.com/article/162053.htm
1.3 Huffman解碼模塊設(shè)計(jì)
Huffman碼是變長編碼,若采用傳統(tǒng)的解碼方法逐位讀人碼流,先判斷碼字長度,再進(jìn)行解碼,效率較低,其解碼速率難以滿足應(yīng)用要求。本設(shè)計(jì)中提出了一種新的Huffman并行解碼硬件結(jié)構(gòu),Huffman符號(hào)表可配置,通用性強(qiáng)。用簡(jiǎn)單的算術(shù)運(yùn)算代替復(fù)雜的配對(duì)模式,解碼速度快、硬件成本低。
1.3.1 Huffman解碼算法分析
對(duì)于一組概率確定的符號(hào),其最佳Huffman編碼有多種碼字分配方式。其中一種特殊的分配方式稱為單調(diào)編碼,這種編碼中長度相等的碼字在數(shù)值上是單調(diào)變化的,JPEG中Huffman編碼采用這種方式。單調(diào)編碼的單調(diào)性是指出現(xiàn)概率較大的符號(hào)其對(duì)應(yīng)的碼字的值一定小于概率小的符號(hào)對(duì)應(yīng)的碼字值。具體說來有兩個(gè)特性:
(1)在某一特定長度對(duì)應(yīng)的碼字集當(dāng)中,碼字大小是連續(xù)變化的。
(2)長度短的碼字Ck的值一定小于長度比它長的碼字Cm,且Ck一定小于Cm的前k位前綴。
根據(jù)單調(diào)編碼的特性,可以證明:對(duì)于一個(gè)長為X的碼字,其長為K(1≤KX)位前綴碼的值總是大于長度為K的最大碼字,同時(shí)其碼字總是小于長度為Y(Y>X)的最小碼字的K位前綴。這一結(jié)論表明當(dāng)把一串足夠長的碼流并行輸入碼長檢測(cè)器時(shí),只可能得到惟一的有效碼長。
1.3.2 Huffman解碼模塊的硬件實(shí)現(xiàn)
對(duì)于一個(gè)給定長度L的碼字,可以用碼長為L的最小碼字和該碼字相對(duì)于最小碼字的偏差offset來表示。如果解碼器將相同碼長的解碼符號(hào)順序存儲(chǔ)在RAM或者寄存器陣列中,則可以由最小碼字的地址和偏差offset得到解碼符號(hào)。解碼符號(hào)的地址可由式(1)得到
在Huffman碼表定義DHT標(biāo)志段解碼時(shí),可以得到各長度對(duì)應(yīng)的最小碼字Min Code、各最小碼字的地址Base Address和解碼符號(hào)Symbol,為了后續(xù)解碼需要,要將這些數(shù)據(jù)存入存儲(chǔ)器中。因?yàn)榻獯a包括了亮度DC系數(shù)、亮度AC系數(shù)、色度DC系數(shù)和色度AC系數(shù)4種情況,所以相應(yīng)地需要多個(gè)存儲(chǔ)器。
表1所示給出了本算法和其他算法的實(shí)現(xiàn)比較??梢?,本算法的實(shí)現(xiàn)在速度和硬件成本綜合權(quán)衡之下比較有優(yōu)勢(shì)。
評(píng)論