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