關(guān) 閉

新聞中心

EEPW首頁 > 工控自動化 > 設(shè)計應(yīng)用 > JPEG解碼器IP核的設(shè)計與實(shí)現(xiàn)

JPEG解碼器IP核的設(shè)計與實(shí)現(xiàn)

作者: 時間:2011-05-24 來源:網(wǎng)絡(luò) 收藏

因?yàn)镠uffman編碼是無損壓縮,不存在誤差,所以Huffman解碼出來的數(shù)據(jù)也是沒有誤差的。本采用一個簡潔的Mealy型狀態(tài)機(jī),狀態(tài)轉(zhuǎn)移如圖4所示。圖5所示是相應(yīng)的Huffman解碼硬件結(jié)構(gòu)圖。

本文引用地址:http://2s4d.com/article/162053.htm

e.jpg


接下來結(jié)合圖4和圖5介紹Huffman并行解碼流程。
(1)初始化狀態(tài)(IDLE):復(fù)位或圖像壓縮數(shù)據(jù)解碼完成時進(jìn)入的狀態(tài),初始化相關(guān)寄存器。
(2)解碼狀態(tài)1(S1):首先寄存從碼流緩沖模塊輸入26位圖像碼流,將高16位輸入碼長檢測單元,與Min Code Memory中存儲的各長度最小碼字并行比較,碼長檢測單元由選擇器、比較器和一個16選4的選擇器組成,得到碼字的長度L。接著由碼長為L的Huffman碼與相應(yīng)長度的最小碼字Min(L)計算出偏移量offset,從Base Address Memory中取出最小碼字Min(L)的地址Base Address,將兩者輸入8位加法器中,由式(1)可計算出該碼字對應(yīng)的解碼符號地址。然后根據(jù)這個地址從Symbol Memory中取出解碼符號,對DC來說是SSSS,對AC來說是RRRRSSSS。同時將移位寄存器中的碼字左移L位,將高11位編碼輸入到幅值寄存器中。
(3)解碼狀態(tài)2(S2):將解析出的字長SSSS和碼長L輸入到5位加法器中,得出本次解碼總位長,輸出到碼流緩沖模塊,用于重新定位碼流,更新輸入數(shù)據(jù)。將幅值寄存器的高SSSS位選擇輸入一個12位中間寄存器的低位,該中間寄存器的高(12-SSSS)位移入幅值寄存器的最高位的相反值,若得到的中間寄存器的最高位為“1”,按.標(biāo)準(zhǔn),要再加1。這樣解析出來的就是頻率系數(shù),即DCT系數(shù),對于DC來說就是差值DIFF。解析完幅值后,進(jìn)行DC/AC系數(shù)解碼。
DC/AC系數(shù)解碼:計數(shù)器用于計算解析系數(shù)在塊數(shù)據(jù)中的位置。若計數(shù)器值為零,表示解析出來的是DC系數(shù)的差值DIFF,要根據(jù)亮度色度選擇信號選擇相應(yīng)DCk-1,根據(jù)DCk=DIFF+DCk-1計算出DC值,并且更新DCk-1。若計數(shù)器值不為零,表示解析出來的是AC值,接下來對應(yīng)的有4個分支:1)若(RRRR,SSSS)=(0,0),表示此圖像塊解碼結(jié)束,輸出塊解碼結(jié)束標(biāo)志DecOneBlock,并清零計數(shù)器;2)若(RRRR,SSSS)=(15,0),表示連續(xù)16個零系數(shù),計數(shù)器加16,不輸出;3)若SSSS不為零,且計數(shù)器值+RRRR=62,表示解析出來的是圖像塊的最后一個系數(shù),計數(shù)器清零,并輸出塊解碼結(jié)束標(biāo)志DecOneBlock和DCT系數(shù)值;4)普通AC系數(shù),計數(shù)器加1,輸出計數(shù)器的值和DCT系數(shù)值。
1.4 反量化模塊
在Huffman解碼后沒有采用標(biāo)準(zhǔn)的先反Z字形重排再反量化的流程,而是先進(jìn)行反量化操作。如此只要Huffman解碼有DCT系數(shù)輸出時才需要進(jìn)行反量化運(yùn)算,能減少無效操作,降低功耗。
反量化運(yùn)算時先將相應(yīng)的量化系數(shù)保存在寄存器陣列中,在Huffman解碼模塊有DCT系數(shù)輸入時,按其地址取出相應(yīng)的量化系數(shù),相乘后輸出到后級反Z字形重排模塊。
1.5 反Z字形重排模塊設(shè)計
根據(jù)模塊輸入數(shù)據(jù)的特點(diǎn),提出了一種優(yōu)化的硬件結(jié)構(gòu)。因?yàn)橐粋€8×8圖像塊經(jīng)DCT變換后非零系數(shù)個數(shù)一般不超過總數(shù)據(jù)量的10%,所以設(shè)計中為寄存器陣列的每個寄存器都設(shè)定一個一位的使能標(biāo)志,在初始化時先將寄存器陣列中寄存器和相應(yīng)標(biāo)志位都賦零值,在輸入值為非零值時才寫入相應(yīng)地址,并置位對應(yīng)的使能標(biāo)志,這樣在寫入數(shù)據(jù)時不需要進(jìn)行零數(shù)據(jù)的存儲,而在輸出數(shù)據(jù)時只要根據(jù)使能標(biāo)志就能判斷是要讀寄存器陣列還是直接輸出零,所以可以減少對存儲器的讀寫操作,加快數(shù)據(jù)處理速度。
反Z字形重排模塊不僅要接收反量化后的系數(shù),對其進(jìn)行反Z字形重排,同時要對圖像塊數(shù)據(jù)進(jìn)行一次行列轉(zhuǎn)置,這樣可以節(jié)省2個寄存器陣列,降低硬件成本。為了提高運(yùn)算并行度,提高解碼速率,滿足后級模塊數(shù)據(jù)要求,反Z字形重排模塊中采用了兩個64×14位雙端口寄存器陣列,進(jìn)行乒乓操作。



評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉