<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          關(guān) 閉

          新聞中心

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

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

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

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

          本文引用地址:http://www.ex-cimer.com/article/162053.htm

          e.jpg


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



          評(píng)論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();