摘 要: 分析了JPEG標(biāo)準(zhǔn)的壓縮/解壓縮算法,,以VLSI方式實(shí)現(xiàn)了基于JPEG標(biāo)準(zhǔn)的解碼流程,在關(guān)鍵模塊——Huffman解碼,、IDCT上進(jìn)行了算法級,、結(jié)構(gòu)級和電路級等層次的綜合考慮,使其有更好的功耗代價(jià),,使其能夠在圖像傳感器上得到應(yīng)用,。通過測試平臺對其VLSI進(jìn)行了RTL級和門級的仿真。結(jié)果表明,,功能符合需求,。
關(guān)鍵詞: JPEG解碼;Huffman算法,;硬件實(shí)現(xiàn),;低功耗設(shè)計(jì)
目前,我國正在籌備物聯(lián)網(wǎng)的建設(shè),,這對于傳感器技術(shù)的發(fā)展以及數(shù)字圖像傳感器瞬時(shí)產(chǎn)生的海量數(shù)據(jù)為實(shí)時(shí)通信系統(tǒng)的存儲容量,、傳輸帶寬和功耗提出了挑戰(zhàn)。在醫(yī)療,、遙感圖像通信等對恢復(fù)圖像質(zhì)量要求高的領(lǐng)域,,對低功耗、具有良好壓縮/解壓縮性能及實(shí)時(shí)處理能力的圖像編/解碼器的需求也變得日益迫切,。JPEG靜態(tài)圖像壓縮/解壓縮標(biāo)準(zhǔn),,具有優(yōu)良的壓縮/解壓縮性能,而且要求低存儲量和相對較低的復(fù)雜度使其很適合于硬件實(shí)現(xiàn),。
為了實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)處理和低功耗應(yīng)用,,本文提出了一種帶有時(shí)鐘管理機(jī)制的并行、全流水結(jié)構(gòu)的JPEG解碼器實(shí)現(xiàn)方案,。
1 JPEG解碼算法
JPEG(Joint Photographic Experts Group)是一種適用范圍很廣的靜態(tài)圖像數(shù)據(jù)壓縮標(biāo)準(zhǔn),。JPEG壓縮是一種有損壓縮,它利用了人的視覺系統(tǒng)特性,,使用量化和無損壓縮編碼相結(jié)合的方式去掉視覺的冗余信息和數(shù)據(jù)本身的冗余信息,。JPEG解碼器包括:霍夫曼(Huffman)解碼、反量化(IQ)和IDCT變換,。在JPEG中,,對于圖像的解碼是分塊進(jìn)行的。整個(gè)圖像被劃分為若干個(gè)8×8的數(shù)據(jù)塊(MCU),,每1個(gè)塊對應(yīng)于原圖像的1個(gè)8×8的像素陣列,。各行的編解碼順序從上到下,,行內(nèi)的編解碼順序從左到右[1]。
2 并行Huffman解碼器
Huffman編碼后代碼的長度不一致,,如果解碼器用串行技術(shù)實(shí)現(xiàn),,由于其代碼長度不一致,解1個(gè)碼字所需的周期數(shù)也不一樣,。對于實(shí)時(shí)系統(tǒng),,串行技術(shù)的效率比較低。另外,,如果數(shù)據(jù)在傳播過程中被噪聲中斷,,整組數(shù)據(jù)就變得沒有價(jià)值了。針對這兩方面的問題,,本文提出如下的解決方案,。如圖1所示為Huffman解碼的主要元件和算法流程。
算法流程:從輸入端獲取32位的壓縮圖像數(shù)據(jù),,分析輸入的數(shù)據(jù)流,,判斷出碼長,把輸入的數(shù)據(jù)移位,,同時(shí)從輸入端補(bǔ)充新的數(shù)據(jù),。輸入的數(shù)據(jù)通過Huffman表翻譯成原始數(shù)據(jù),提取出數(shù)據(jù)流中嵌入的符號位,,經(jīng)過一系列的除法,、減法運(yùn)算后得到編碼前的頻率數(shù)據(jù),與之前得到的符號位合并后輸送到輸出緩存,。
本文采用的算法靈活地利用了Huffman表的特點(diǎn),,消除了算法中的乘法運(yùn)算,完成碼長的判斷只需要1個(gè)周期,。把碼表的數(shù)據(jù)按照碼長分類從小到大排列,,再把碼長相同的數(shù)據(jù)按照碼字的大小從小到大排列。每張表按照排列后的順序把碼字對應(yīng)的解碼結(jié)果DR(Decoding Results)存入到ROM中,。這樣既有利于查表,,需要的ROM也是最小的,符合低功耗要求,。查表的地址發(fā)生器由“長度匹配”模塊傳遞到的碼長得到1個(gè)基地址,,碼長從輸入數(shù)據(jù)中截取連續(xù)的幾個(gè)與碼長相同位數(shù)的bit作為偏移地址,2個(gè)地址相加就是DR保存的地址[2],。
因關(guān)鍵bit出現(xiàn)的位置都是在碼字的最后幾位,,因此根據(jù)碼長將輸入數(shù)據(jù)進(jìn)行移位,使關(guān)鍵bit的最后1位出現(xiàn)在第n位,移位的結(jié)果只輸出第n位以前的幾個(gè)bit,,這樣的電路只需要1個(gè)只受碼長控制的桶形移位寄存器,。另外,再為每張表產(chǎn)生1個(gè)1串0加上1串1的地址修正串,,有幾個(gè)關(guān)鍵bit就有幾個(gè)1,,這部分電路邏輯簡單且占用的電路不多,。用這個(gè)地址修正串和桶形移位寄存器的輸出做一個(gè)“與”邏輯運(yùn)算,,得到的就是正確的偏移地址。由于Huffman表需要的最長bit是9位,,碼長最大為19位,,所以本文設(shè)計(jì)了1個(gè)19位輸入、9位輸出的桶形移位寄存器,。改進(jìn)后的電路面積縮小到改進(jìn)前的50%左右,。
3 IDCT處理器
逆向離散余弦變換IDCT(Inverse Discrete Cosine Transform)電路的總體實(shí)現(xiàn)框圖和其中的2D IDCT框圖如圖2所示。DCT系數(shù)經(jīng)過反量化和反掃描電路處理后輸入到IDCT的緩存器,,由全局控制電路控制輸入到2D IDCT單元及將最終變換好的數(shù)據(jù)送到輸出緩存器中,,發(fā)送Ready信號到運(yùn)動(dòng)補(bǔ)償單元,通知該單元可以讀出IDCT數(shù)據(jù),。2D IDCT單元進(jìn)行2次1D IDCT運(yùn)算,,首先進(jìn)行基于行的1D IDCT,然后將第1次IDCT的中間結(jié)果經(jīng)轉(zhuǎn)置存儲器進(jìn)行轉(zhuǎn)置處理和緩存,,再進(jìn)行基于列的1D IDCT變換,,得到最終的IDCT變換結(jié)果[3]。
IDCT設(shè)計(jì)中使用了零值判斷邏輯電路,、門控時(shí)鐘,、并行流水線等技術(shù),使得整個(gè)電路在滿足處理速度和精度要求的基礎(chǔ)上大大降低了功耗,。
3.1 零值判斷邏輯電路
在整個(gè)圖像解碼過程中,,每8×8個(gè)數(shù)據(jù)塊中有約90%的數(shù)據(jù)的DCT系數(shù)為零,對這些零值進(jìn)行IDCT變換并無意義,。因此,,本設(shè)計(jì)添加了零值判斷邏輯來消除不必要的乘法運(yùn)算。零值判斷邏輯電路由8×8累加器陣列,、零值判斷邏輯模塊和復(fù)選器MUX構(gòu)成,。通過零值邏輯模塊判斷,當(dāng)操作數(shù)不全為零時(shí),,使能信號變成高電平,,將操作數(shù)取到寄存器中,然后再進(jìn)行乘法運(yùn)算。如果操作數(shù)全為零,,則封鎖累加陣列,,直接通過MUX輸出0。零值判斷邏輯能有效地降低功耗,,且電路簡單,,面積與延遲時(shí)間幾乎可以忽略不計(jì)。
3.2 基于鎖存器的門控時(shí)鐘
通過控制電路的輸入時(shí)鐘可以使得一部分電路降低工作頻率或者停止工作,,從而降低整個(gè)電路的功耗,。2D DCT/IDCT的電路主要由3部分組成:1D DCT/IDCT單元、轉(zhuǎn)置存儲器,、輸入輸出處理單元,。
轉(zhuǎn)置存儲器部分只有在每次1D DCT/IDCT處理的最后才進(jìn)行更新,而輸入輸出處理單元只有在數(shù)據(jù)輸入輸出的時(shí)候才工作,。因此,,控制這幾部分電路的輸入時(shí)鐘,使其在大多數(shù)時(shí)間停止工作即可以有效地降低功耗,。設(shè)計(jì)結(jié)果表明,,在面積僅增加2%的情況下系統(tǒng)功耗可降低13%。
基于鎖存器的門控時(shí)鐘可以實(shí)現(xiàn)上述功能,,它具有不需要數(shù)據(jù)選擇器,、面積較小、可以減小時(shí)鐘網(wǎng)絡(luò)上電容,、減少門控寄存器的內(nèi)部功耗等優(yōu)點(diǎn),。鎖存器門控時(shí)鐘電路及時(shí)序如圖3所示。
3.3 并行流水線
本設(shè)計(jì)使用加法和移位運(yùn)算代替IDCT快速算法中的浮點(diǎn)乘法運(yùn)算單元,,用高度并行流水線VLSI結(jié)構(gòu)加快數(shù)據(jù)處理速度,,其處理數(shù)據(jù)的時(shí)間不到串行結(jié)構(gòu)的1/5。因此,,時(shí)鐘頻率可以相應(yīng)地降低到串行結(jié)構(gòu)的1/5左右,,從而降低系統(tǒng)的功耗。例如,,使用2個(gè)16×8的乘法器同時(shí)并行計(jì)算高位部分和低位部分,,分別得到高位部分積和低位部分積,然后進(jìn)行移位相加,。實(shí)現(xiàn)電路運(yùn)算時(shí)實(shí)現(xiàn)時(shí)間重疊,、資源重復(fù)使用和資源共享,提高了系統(tǒng)的并行性,,以此提高了乘法電路的運(yùn)行速度和效率,。
4 仿真和綜合結(jié)果
本文選用1幅1 920×1 080大小的JPEG圖像,,Modelsim進(jìn)行RTL級仿真后的波形如圖4所示。圖中JPEG_DATA是碼流數(shù)據(jù),,OutR,、OutG、OutB是解碼仿真結(jié)果[4],。在100 MHz的頻率下對解碼核心模塊進(jìn)行綜合[5],,結(jié)果如表1所示。
本文有別于以往用軟件實(shí)現(xiàn)JPEG解碼,,而是在用硬件實(shí)現(xiàn)JPEG解碼的同時(shí),,改進(jìn)硬件結(jié)構(gòu),通過多種易于操作的方法來降低硬件解碼能耗,。通過EDA工具驗(yàn)證,,完全可以滿足JPEG圖像硬件解碼的要求。
參考文獻(xiàn)
[1] 楊淑瑩,,邊奠英.VC++圖像處理程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2003.
[2] KOREN I. Computer arithmetic algorithms[M]. New York: Prentice Hall,, 1993.
[3] KOVAC M,, RANGANATHAN N. JAGUAR: a fully pipelined VLSI architecture for JPEG image compression standard[C]. Proceeding of the IEEE,1995,,83:247-258.
[4] CILETTI M D. Advanced digital design with the verilog HDL[M]. New York: Prentice Hall,, 2003.
[5] BIRNBAUM M D. Essential electronic design automation(EDA)[M]. New York: Prentice Hall PTR, 2003.