《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 業(yè)界動態(tài) > 基于FPGA的JPEG解碼器設(shè)計與實現(xiàn)

基于FPGA的JPEG解碼器設(shè)計與實現(xiàn)

2008-07-28
作者:劉小衛(wèi),周劍揚,黃云鷹,,劉旻燾

??? 摘 要: 為滿足SoC中JPEG靜止圖像實時解壓縮要求,,在完成JPEG解碼器C語言建模的基礎(chǔ)上,,采用自頂向下的設(shè)計方法,完成了JPEG Baseline解碼器設(shè)計,并在FPGA開發(fā)板上驗證了設(shè)計結(jié)果。該設(shè)計與ACTEL,、4I2I等公司的IP核相比具有相近的解壓縮速度,能滿足實時解碼要求,。
??? 關(guān)鍵詞: JPEG,;FPGA;解碼器,;IDCT

?

??? 隨著多媒體技術(shù)的蓬勃發(fā)展,視頻編解碼技術(shù)得到了長足的進步,人們先后制定了多個數(shù)字圖像視頻編解碼標(biāo)準,。其中JPEG仍然是目前最流行的靜止圖像壓縮格式,在手持設(shè)備和網(wǎng)絡(luò)中有廣泛的應(yīng)用,。
??? 本論文工作是無線投影機控制器設(shè)計中的一部分,,見圖1。該控制器以開放源代碼處理器LEON3為核心,,具有以太網(wǎng),、VGA、PCI等接口,,PCI接口用來連接無線網(wǎng)卡,,VGA接口用來連接投影機,,這樣構(gòu)成一個無線投影系統(tǒng)。PC機通過有線網(wǎng)絡(luò)或無線網(wǎng)絡(luò)向控制器傳輸JPEG壓縮圖像數(shù)據(jù)" title="圖像數(shù)據(jù)">圖像數(shù)據(jù),,經(jīng)過解碼器解碼后顯示在投影儀上,從而實現(xiàn)多臺電腦共享一臺投影機,,并且避免了連線的麻煩,,具有一定的市場前景??紤]到系統(tǒng)的靈活性,,本控制器選用Altera FPGA作為實現(xiàn)平臺,設(shè)計可以無縫地轉(zhuǎn)移到Altera Hardcopy技術(shù),,從而實現(xiàn)低成本,。

??????????????????????????


??? 本設(shè)計利用硬件描述語言(VHDL)設(shè)計了JPEG Baseline的解碼系統(tǒng)。
1 JPEG解碼器原理
??? JPEG解碼器主要由四部分組成:圖像頭信息的讀取,、熵解碼,、反量化" title="反量化">反量化、IDCT(反離散余弦變換" title="離散余弦變換">離散余弦變換),,其數(shù)據(jù)流圖見圖2,。


??? 從圖中可以看出,解碼器首先從JPEG圖像數(shù)據(jù)中讀取Header信息,,得到與解碼相關(guān)的如哈夫曼表,、量化表以及圖像大小等信息,并且將這些信息存儲在RAM或者寄存器中,,供后面的步驟調(diào)用,。
??? 在圖像頭信息讀取完成后,解碼器進一步讀取壓縮編碼的數(shù)據(jù)并對其進行熵解碼,。壓縮編碼的數(shù)據(jù)采用哈夫曼(Huffman)編碼,。哈夫曼編碼是一種常用的壓縮編碼方法,是Huffman于1952年為壓縮文本文件建立的,。它的基本原理是:將頻繁使用的數(shù)據(jù)用較短的代碼代替,,而較少使用的數(shù)據(jù)用較長的代碼代替,每個數(shù)據(jù)的代碼各不相同,。這些代碼都是二進制碼,,且碼的長度可變,因此哈夫曼編碼是可變長編碼的一種,。在JPEG中采用游程編碼與范式huffman編碼進行數(shù)據(jù)的壓縮存儲,,并且直流系數(shù)(DC)與交流系數(shù)(AC)分開編碼,提高了壓縮效率,。因而在熵解碼過程中需要分別對直流系數(shù)和交流系數(shù)分別解碼,。當(dāng)前直流系數(shù)為上一個直流系數(shù)加上當(dāng)前熵解碼數(shù)據(jù)(即殘差),。
??? 當(dāng)解碼完一個MCU(Minimal Coded Unit)后,接下來就是進行反量化的操作,,即將解碼出來的數(shù)據(jù)乘以一個量化系數(shù),。
??? 最后是IDCT(反離散余弦變換)操作,即DCT(離散余弦變換)的反變換,。離散余弦變換(DCT)是N.Ahmed等人在1974年提出的正交變換方法,,它常被認為是對語音和圖像信號進行變換的最佳方法。通過DCT變換,,將數(shù)據(jù)從一個域變換到另外一個域,,其大多數(shù)高頻分量的系數(shù)變?yōu)?。人眼對低頻分量比較敏感,,對高頻分量則不太敏感,;因而量化的結(jié)果是去掉了不太重要的高頻分量,降低了碼率,。在JPEG解碼過程中需要通過IDCT還原圖像原始數(shù)據(jù),。IDCT部分是計算量最大" title="最大">最大的單元,對此單元設(shè)計的好壞將直接影響到解碼速度,。
2 JPEG解碼器設(shè)計與實現(xiàn)
??? 針對JPEG解碼流程特點,,本JPEG解碼器硬件總體設(shè)計如圖3所示。JPEG CONTROLLER負責(zé)調(diào)度各個模塊的執(zhí)行,;Src_ram存儲著JPEG原始圖像數(shù)據(jù),;Addr_gen模塊產(chǎn)生下一個需要讀取字節(jié)的地址;Read_markers模塊讀取JPEG圖像的圖像頭信息,,并且將頭信息保存在Register files中,,相應(yīng)的量化表信息及huffman表將存儲在Dqt rams和Dht rams中;Huff_derived_tbl是由huffman表生成的用于熵解碼的表格,;Decode MCU 模塊從Src_ram讀取JPEG圖像數(shù)據(jù)并解碼,,解碼出來的數(shù)據(jù)將逆zig-zag順序存儲在Block ram中;IDCT模塊讀取Block ram中的哈夫曼解碼數(shù)據(jù)進行反量化和IDCT變換,,之后將數(shù)據(jù)輸出到Ram,。下面將對各個模塊的設(shè)計作詳細的介紹。
2.1 Addr_gen模塊設(shè)計
??? 此模塊用于產(chǎn)生讀取Src_ram的地址并生成下一個要讀取字節(jié)的地址,。其硬件實現(xiàn)如圖4虛線右邊部分所示,。在非跳轉(zhuǎn)情況下,當(dāng)RD信號有效時,,Addr_gen計數(shù)器每次遞增1個單位,。
??? 跳轉(zhuǎn)情況下,即skip有效時,其計數(shù)器工作如圖4虛線左邊部分所示,,當(dāng)讀入地址為Addr_n的數(shù)據(jù)后需要跳轉(zhuǎn)k個單位的字節(jié)(Skip_num=k),,因為在讀取地址為Addr_n的數(shù)據(jù)Data_n后地址計數(shù)已經(jīng)增加了一個單位,因而在第三個時鐘周期能跳轉(zhuǎn)到地址為Addr_n+1+k的數(shù)據(jù),,而這第三個時鐘周期讀出來的數(shù)據(jù)Data_n+1將會被忽略,。從第四個時鐘起此模塊將恢復(fù)正常的讀取數(shù)據(jù)功能。


2.2 Read_markers模塊設(shè)計" title="模塊設(shè)計">模塊設(shè)計
??? Read_markers讀取JPEG文件頭信息并且解釋,,由以下子模塊組成,,見圖5虛線左邊部分。
??? (1)First_marker:判斷文件是否為JPEG文件,,即判斷開始的2B是否為FF D8;
??? (2)Next_marker:查找下一個標(biāo)志,;
??? (3)Get_sos:讀取sos(start of scan),;
??? (4)Skip_var:跳過一些信息時被調(diào)用,給Addr_gen模塊傳送跳過信息標(biāo)志,;
??? (5)Get_sof:讀取sof(start of frame),;
??? (6)Get_dht:讀取huffman表信息,存儲在Dht rams(見圖1),;
??? (7)Get_dqt:讀取量化表信息,,并存儲在Dqt rams(見圖1);
??? (8)Get_dri:讀取重起間隔,,以MCU(Minimum Coded Unit)為單位,。
??? 硬件實現(xiàn)利用FSM(有限狀態(tài)機)來進行控制。其模塊調(diào)度示意圖見圖5虛線右邊部分,。

?


2.3 Decode_MCU模塊設(shè)計
??? Decode_MCU是jpeg解碼器設(shè)計中一個非常重要的單元,,也是正式解碼的開始。本設(shè)計中此模塊的設(shè)計見圖6虛線框中設(shè)計,,主要由四個子模塊組成:Fill_buffer,、Decode_block&IZZ、Process_restart和Controller,。
??? (1)Fill_buffer:當(dāng)32BITS_REG中的比特數(shù)不夠時控制器將啟動此模塊讀取Src_ram中的數(shù)據(jù)并且加載到32bits_reg中,,并且去掉碼流中的填充數(shù)據(jù)。
??? (2)Decode_block&IZZ:huffman解碼,,并且將解碼數(shù)據(jù)逆zig_zag順序輸出,。
??? (3)Process_restart:當(dāng)JPEG圖像中有restart interval(Get_dri)標(biāo)志,在解碼完由Get_dri規(guī)定的n個MCU后,,控制器首先調(diào)用此模塊來進行同步(在網(wǎng)絡(luò)傳輸中非常重要),。
?? ?(4)Controller:控制協(xié)調(diào)各模塊的執(zhí)行。
??? 核心模塊Decode_block硬件實現(xiàn)如圖6,虛線右邊是EXTEND[1]部分,,采用查找表實現(xiàn),。Get_buffer即圖6中的32BITS_REG, Bits_left記錄32BITS_REG中剩余的比特數(shù),。Huff_D模塊每啟動一次解碼一個熵編碼數(shù)據(jù),。由于DC編碼采用DPCM編碼,解碼直流(DC)時需要增加一個時鐘周期來加上上一個DC的值,,從而得出如圖6所示的output,,解碼交流系數(shù)(AC)時則在EXTEND后直接輸出。Sel_s_input為”00”時,,選通huffman解碼數(shù)據(jù),;為”01”時,選通EXTEND后的數(shù)據(jù),;為”10”時,,選通加上了last_dc_val的數(shù)據(jù)。

?


2.4 IDCT模塊設(shè)計
??? IDCT(Inverse Discrete Consine Transform)是JPEG解碼器中最耗資源和計算量最大的單元,。本設(shè)計為減少內(nèi)存讀取,,提高解碼速度,將反量化也放在IDCT模塊中實現(xiàn),。
??? 離散余弦變換的公式和離散余弦逆變換的公式如下:
??

?

??? 經(jīng)分析公式(1)可以做如下等效變換:
???


??? 即通過兩次一維的IDCT變換即可實現(xiàn)二維的IDCT,。考慮到數(shù)據(jù)的讀取,,本設(shè)計IDCT模塊的設(shè)計如圖7虛線框中所示,。
??? 實現(xiàn)過程:首先讀取Block ram的一列,相應(yīng)的反量化數(shù)據(jù)從Dqt ram中讀取,,經(jīng)過IQ(反量化單元,,即乘法器)后的8個數(shù)據(jù)存儲在regs中,之后控制器啟動一維IDCT變換,,并將反變換后的數(shù)據(jù)存儲在REG FILES的一列中,。當(dāng)一個Block ram中的8列數(shù)據(jù)全部反量化和IDCT變換后,控制器將切換成對REG FILES中一行的數(shù)據(jù)進行一維IDCT變換,,變換后的數(shù)據(jù)存儲在REG FILES中的一行中,,之后再進行下一行變換,直到8行數(shù)據(jù)全部IDCT 變換完,?;趨⒖嘉墨I[2]的一維IDCT實現(xiàn)具有資源比較小和實現(xiàn)簡單的特點,通過對IDCT反變換矩陣系數(shù)分析,,一維IDCT奇偶數(shù)據(jù)變換具有不同的結(jié)構(gòu)化特點,,在此可以進行單獨的設(shè)計,,最后將兩部分的結(jié)果數(shù)據(jù)進行碟形加減操作,得到一維IDCT的運算結(jié)果(見圖7),。這樣變換完的數(shù)據(jù)即可進行輸出,,送到顯示單元進行色彩變換和其它后續(xù)處理后顯示。

2.5 測試與結(jié)果
????? 本設(shè)計采用的硬件開發(fā)平臺為ALTERA DE2,,F(xiàn)PGA為EP2C35F672C6,,在quartusii 5.0中進行綜合,所耗資源和最大時鐘頻率見表1,。2005年ACTEL[3]公司推出的JPEG-D IP的速度針對不同的平臺其速度變化從31M~69M,,同年4I2I[4]公司推出的JPEG-D的最大速率為40M,從速度可以看出本設(shè)計達到了實時解碼的要求,。

?


??? 將VHDL與C語言實現(xiàn)的JPEG解碼器對圖像解碼產(chǎn)生的結(jié)果進行對比,,從而可以判斷解碼正確與錯誤。通過結(jié)果對比,,本設(shè)計結(jié)果完全正確,。
??? 本設(shè)計嚴格按照VLSI自頂向下設(shè)計的一般流程,首先進行C語言級建模[5],,從而得到測試矢量和JPEG硬件解碼器的總體架構(gòu);之后完成了各個頂層模塊和子模塊的接口定義,;最后進行各個模塊的VHDL實現(xiàn),。從結(jié)果可知達到了實時解碼要求,并且節(jié)約了資源,。


參考文獻
[1] CCITT Rec.T.81(1992 E)104-105.
[2] Chris.tophLoeffler,,Adriaan.Ligtenberg.Practical? fast 1-D?DCT algorithms with 11 multiplication.[J]IEEE 1989.988-990.
[3] http://www.cast-inc.com.
[4] http://www.4i42.com.
[5] http://www.smalleranimals.com/.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點,。轉(zhuǎn)載的所有的文章、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有,。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認版權(quán)者。如涉及作品內(nèi)容,、版權(quán)和其它問題,,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟損失,。聯(lián)系電話:010-82306118;郵箱:[email protected],。