分析JPEG2000 MQ編碼器的設(shè)計與實現(xiàn)
出處:雷 磊,羅桂娥 發(fā)布于:2011-08-23 19:14:28
摘 要: MQ編碼器對于無損的數(shù)據(jù)壓縮是一種非常有效的方法,它已被JPEG2000標準所采用。但該編碼算法復(fù)雜度高,執(zhí)行速度慢。文中提出了一種基于動態(tài)流水的高性能MQ編碼器的VLSI結(jié)構(gòu)。為了獲得高速處理能力,首先分析了JPEG2000標準中MQ編碼算法的軟件流程,并對其進行了相應(yīng)的修改以適應(yīng)硬件實現(xiàn),然后采用了"動態(tài)流水"技術(shù),可以根據(jù)變化的運算量來實時地安排流水操作。
隨著多媒體技術(shù)的不斷運用,圖像壓縮要求更高的性能和新的特征。為了滿足靜止圖像在特殊領(lǐng)域編碼的需求,JPEG2000作為一個新的標準處于不斷的發(fā)展中。它不僅希望提供優(yōu)于現(xiàn)行標準的失真率和個人圖像壓縮性能,而且還可以提供一些現(xiàn)行標準不能有效地實現(xiàn)甚至在很多情況下完全無法實現(xiàn)的功能和特性。這種新的標準更加注重圖像的可伸縮表述。所以就可以在任意給定的分辨率級別上來提供一個低質(zhì)量的圖像恢復(fù),或者在要求的分辨率和信噪比的情況下提取圖像的部分區(qū)域。
JPEG2000是新一代的靜態(tài)圖像壓縮標準。與JPEG相比,JPEG2000不僅具有更為優(yōu)良的壓縮性能,而且提供了更多的新特性,例如支持質(zhì)量、分辨率的可伸縮性和感興趣域編碼等。JPEG2000編碼包括了小波變換、量化、位平面編碼和MQ編碼這4個主要的編碼流程。其中位平面編碼和MQ編碼是JPEG2000中復(fù)雜度較高的2個模塊。而當前的位平面編碼處理速度已經(jīng)遠超過MQ編碼的速度,也就是說MQ編碼器的編碼速率已經(jīng)成為了JPEG2000處理速度快慢的關(guān)鍵所在。
MQ編碼器是一種改進的自適應(yīng)算術(shù)編碼器。雖然MQ編碼器避免了乘法運算,但算法仍然比較復(fù)雜,同時采用串行處理方式的MQ編碼標準算法用硬件實現(xiàn)起來效率低下。而目前國內(nèi)外對MQ編碼硬件實現(xiàn)有不少有效的處理方法。本文對面向軟件的標準算法進行了改進以提高硬件實現(xiàn)的編碼速率:采用FIFO進行輸入輸出的緩存處理,優(yōu)化了狀態(tài)更新及A、C區(qū)間處理過程以提高處理速度,改進了字節(jié)輸出從而節(jié)約了資源面積。該設(shè)計方案采用了4級流水,能夠達到比較高的數(shù)據(jù)吞吐量。
1 MQ編碼器原理和算法流程
MQ編碼器(encoder)是將信號(如比特流)或數(shù)據(jù)進行編制、轉(zhuǎn)換為可用以通訊、傳輸和存儲的信號形式的設(shè)備。 編碼器把角位移或直線位移轉(zhuǎn)換成電信號,前者成為碼盤,后者稱碼尺。按照讀出方式編碼器可以分為接觸式和非接觸式兩種。接觸式采用電刷輸出,一電刷接觸導(dǎo)電區(qū)或絕緣區(qū)來表示代碼的狀態(tài)是"1"還是"0";非接觸式的接受敏感元件是光敏元件或磁敏元件,采用光敏元件時以透光區(qū)和不透光區(qū)來表示代碼的狀態(tài)是"1"還是"0",通過"1"和"0"的二進制編碼來將采集來的物理信號轉(zhuǎn)換為機器碼可讀取的電信號用以通訊、傳輸和儲存。
MQ編碼器通過使用CX狀態(tài)表和概率估值表能夠?qū)崿F(xiàn)自適應(yīng)的功能。其中CX狀態(tài)表包括19個上下文,每個上下文都對應(yīng)著不同的狀態(tài),每個狀態(tài)包括索引值(index)和大概率符號值(mps)。而概率估值表是一個可以對原始數(shù)據(jù)快速適應(yīng)的概率估計模型,包括47個索引值。每個索引都對應(yīng)著不同的狀態(tài),這些狀態(tài)包括下一個狀態(tài)的索引值NMPS(6位)和NLPS(6位)、交換位SWITCH(1位)和小概率符號概率值Qe(15位)共28位。這2個表的具體內(nèi)容可以從參考文獻[2]中找到。
MQ編碼是基于自適應(yīng)的算術(shù)編碼改進而來的。而算術(shù)編碼的基本操作是遞歸地劃分當前的子區(qū)間:當編碼器接收到一個新的待壓縮碼,當前子區(qū)間就被劃分成2個子區(qū)間,被劃分的邊界更新成為新的區(qū)間的左邊界,也即左區(qū)間值,子區(qū)間的間隔大小也更新成為新區(qū)間的間隔大小。
因此,MQ編碼器采用一個A寄存器來存儲當前子區(qū)間的間隔大小,而用一個C寄存器來存儲當前子區(qū)間的左區(qū)間值。當MQ編碼器接收到輸入數(shù)據(jù)對(CX,D),通過概率估計表和狀態(tài)表找到相應(yīng)的Qe值,根據(jù)當前的情況來決定A和C如何進行更新,其中包括了A、C寄存器值與Qe值的加減操作及對A、C寄存器的左移重歸一化操作,同時伴隨著壓縮字節(jié)輸出等過程。
2 MQ編碼器的硬件設(shè)計
本文設(shè)計的MQ編碼器采用4級流水線,并使用了一些加速技術(shù)對關(guān)鍵部分進行了改進,改進后的MQ編碼器流水線總體架構(gòu)如圖1所示。

第1階段:用一個RAM對CX狀態(tài)進行存儲和更新。把從FIFO中輸出的(CX,D)數(shù)據(jù)對做為輸入,根據(jù)CX的值來得到概率估值表的索引和mps的值。然后由D值與mps值比較判斷是進行大概率編碼(mps)還是進行小概率編碼(lps)。要注意的是,要確保RAM和ROM輸出消耗的時間為1個時鐘,否則就達不到本設(shè)計的時序要求。一個解決的辦法是對下一個索引值加入一個超前狀態(tài)分析,這樣就可以在編碼同一個CX的數(shù)據(jù)時不必等待RAM的輸出而直接讀入由組合邏輯產(chǎn)生的下一個索引值,從而滿足了時序的要求。圖2所示為加入超前狀態(tài)分析的CX表。

第2階段:用一個ROM對概率估值表進行存儲和讀取。把從RAM中輸出的index和mps作為輸入數(shù)據(jù),數(shù)據(jù)位由高到低排列。根據(jù)index的值導(dǎo)出相應(yīng)的Qe、NMPS、NLPS、SWITCH等值。本設(shè)計由于采用了超前狀態(tài)預(yù)測,沒必要把下的lps和mps的概率值加入到估值表中,而僅需添加前導(dǎo)零的個數(shù),使得在第3階段發(fā)生重歸一化時能夠一步完成移位操作,避免了重復(fù)和循環(huán)過程,大大提高了編碼效率。具體的移位思想可以參看參考文獻[3].
第3階段:對A寄存器和C寄存器低17位進行更新處理。把28位的C寄存器分開處理可以有效縮短關(guān)鍵路徑,因此在這個階段先對C寄存器的低17位進行處理。為了減少路徑消耗,可以把A<2Qe替換成A[14:0]-Qe[14:0],看是否有借位產(chǎn)生來處理,把它作為是否要進行重歸一化的判斷條件,同時把A和C寄存器的加減更新判斷邏輯簡化成2個由于1個時鐘輸入1對數(shù)據(jù)對的關(guān)系,A、C寄存器將在1個時鐘周期后進行數(shù)據(jù)更新替換,所以A、C的數(shù)據(jù)處理過程必須要在1個時鐘周期內(nèi)完成,因此本設(shè)計不能對這段路徑進行流水線分割處理。圖3為對A寄存器處理的優(yōu)化設(shè)計結(jié)構(gòu)。C寄存器的處理結(jié)構(gòu)和A類似。

第4階段:Chigh的處理和字節(jié)輸出。按照標準的字節(jié)輸出算法流程,需要1個緩沖寄存器B和1個減法計數(shù)器來輔助處理:先把高8位賦給B寄存器,看其值是否是0xFF和有沒有進位位產(chǎn)生。由于原算法加入了3位間隔位來限制輸出值的范圍,為了符合標準,至少要左移19(即8+3+8)位才輸出1個字節(jié),同理,至少左移27位才輸出2個字節(jié),而小于19位的則不輸出字節(jié),處理好的數(shù)據(jù)全部放到剩余的數(shù)據(jù)存儲器bitbuf中去。而MQ編碼器的輸出方式是增量輸出的,因此可以把要左移處理的數(shù)據(jù)與上剩余的數(shù)據(jù)進行合并,這與標準算法的思想是完全一致的。
首先把tempC中的數(shù)據(jù)進行掩膜處理得到包含左移數(shù)據(jù)位的Cmask,同時對Cmask進行左移17位,使Cresult的位數(shù)和augment的位數(shù)相同(augment為34位),再對其進行右移一定位數(shù),使左移數(shù)據(jù)能夠正確地合并到編碼數(shù)據(jù)中去。Cresult可以表示為:
Cresult={Cmask,17{1'b0}}》CT-1
其中CT為一個5位的加法計數(shù)器,它對當前剩余的數(shù)據(jù)進行位數(shù)計數(shù)。為了減少路徑開銷,可以把Cresult改成:
Cresult={Cmask,18{1'b0}}》CT
由于剩余的數(shù)據(jù)位多為18位,因此bitbuf采用一個18位的寄存器作為處理空間??梢赃@樣把左移數(shù)據(jù)合并到數(shù)據(jù)流中:
augment[33:16]=bitbuf+Cresult[33:16]
augment[15:0]=Cresult[15:0]
這是因為僅有高18位的Cresult需要進行相加,而后16位只進行簡單的復(fù)制即可。這樣做就可以不必考慮進位位的值及緩沖值B加1后是否需要進行位填充這幾個因素,可以在一個時鐘周期內(nèi)一步到位地進行字節(jié)輸出。同時,為了與標準輸出一致,把CT(5位)的初始值設(shè)為-1,即為11111.圖4為改進的字節(jié)輸出的bitbuf更新處理部分,圖5為字節(jié)輸出的計數(shù)更新處理部分。

,由于輸出的字節(jié)數(shù)可能為0、1、2這3種情況,有必要對輸出數(shù)據(jù)進行緩沖,因此需要在添加一個FIFO對輸出的數(shù)據(jù)進行緩沖。
3 實驗結(jié)果和性能比較
本文的MQ編碼器采用Verilog語言進行RTL級描述,在Modelsim-Altera軟件下進行仿真,仿真結(jié)果和標準算法的計算結(jié)果一致,如圖6所示。在QuartusII中選用器件EP2S60F67214對代碼進行綜合、布局布線及時序分析。仿真結(jié)果表明,本設(shè)計結(jié)構(gòu)的時鐘頻率可達65.19 MHz,吞吐量可達65.19 MCxD/s.與參考文獻[5]中的方案的比較如表1所示。表2所示為MQ編碼器的資源使用情況。


結(jié)果顯示,本設(shè)計占用資源很少的情況下,在時鐘頻率上不及參考文獻[5],因為本設(shè)計結(jié)構(gòu)為了節(jié)省時鐘周期在關(guān)鍵路徑上沒有采用流水線分割,但在整體的處理速度上有較大的改進,可以滿足硬件高速編碼要求。
本文針對JPEG2000MQ編碼器的硬件實現(xiàn),提出了一種4級流水的設(shè)計方案。對MQ編碼器的原理和算法流程進行了分析,采用超前狀態(tài)分析避免了時序上的沖突,同時優(yōu)化了條件判斷邏輯以及改進了字節(jié)輸出的處理結(jié)構(gòu),減少了路徑的開銷。終通過Aletra的FPGA的驗證,處理速度可達65.19 MCxD/s.
參考文獻:
[1]. mps datasheet http://www.hbjingang.com/datasheet/mps_2428474.html.
[2]. ROM datasheet http://www.hbjingang.com/datasheet/ROM_1188413.html.
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- 什么是氫氧燃料電池,氫氧燃料電池的知識介紹2025/8/29 16:58:56
- SQL核心知識點總結(jié)2025/8/11 16:51:36
- 等電位端子箱是什么_等電位端子箱的作用2025/8/1 11:36:41
- 基于PID控制和重復(fù)控制的復(fù)合控制策略2025/7/29 16:58:24
- 什么是樹莓派?一文快速了解樹莓派基礎(chǔ)知識2025/6/18 16:30:52









