1 PNG圖像解碼原理的介紹
1.1 LZ77算法介紹
LZ77算法可以稱為“滑動窗口壓縮”,該算法將一個虛擬的,可以跟隨壓縮進程滑動的窗口作為術語字典;要壓縮的字符串若在窗口中出現(xiàn),則輸出匹配長度和距離的組合信息,來替換前面出現(xiàn)的相同字符串,且要求最小匹配的字符串為3個字節(jié),這樣可以保證壓縮后的數(shù)據(jù)量小于原始數(shù)據(jù)。
例如窗口的大小為15個字符,岡0剛編碼過的15個字符為:byhelloeveryone,即將編碼的字符為:helloto—e、,eryonehi。可以發(fā)現(xiàn)有些字符串前面已經(jīng)出現(xiàn)過,則用()起來的字符串表示滑動窗口中已出現(xiàn)過的匹配串:(hello)to(everyone)hi。
以上這些原始信息,可利用LZ77算法用匹配長度和距離的組合信息來替換有匹配的字符串,若碰到未匹配的字節(jié)則直接輸出,壓縮后的內(nèi)容為:(5,13)to(8,15)hi。在LZ77解壓縮時,只要維護好滑動窗口,隨著壓縮信息的不斷輸入,可根據(jù)匹配的組合信息從窗口中找到相應的匹配字符串作為輸出,即可還原出原始數(shù)據(jù)。
1.2 Huffman算法介紹
Huffman算法屬于編碼式壓縮,利用各個單字節(jié)所使用頻率不一樣的特點,使定長編碼轉(zhuǎn)變?yōu)樽冮L的編碼,給頻率高的字節(jié)更短的編碼,使用頻率低的字節(jié)更長的編碼,起到無損壓縮的效果。這樣,經(jīng)過LZ77壓縮后的未匹配的字節(jié)和匹配的組合信息可以進一步地進行Huffman壓縮,從而得到很高的壓縮效率。
例如,對于一組元素的字符值為s={a,b,c,d,e,f},其對應的出現(xiàn)頻率為P={10,2,2,2,2,9}。圖1是根據(jù)以上信息建立的Huffman樹。各元素出現(xiàn)頻率和元素值如圖1所示,編碼后的各個元素長度分別為L一{1,3,3,3,3,2},可見編碼后儲存這些字符值所需的空間極大地減少了。
這棵Huffman樹是根據(jù)PNG規(guī)范的Dellate原則建立的,具有以下特點:
(1)左邊的葉子編碼為0,右邊的為1;
(2)編碼必須滿足“前綴編碼”的要求,即較短的編碼不能是較長編碼的前綴,這保證了碼的惟一性;
(3)每一層葉子的節(jié)點頻率按從小到大排列,而同樣頻率的節(jié)點按字符值從小到大排列,這點也是PNG采用的zip算法對Huffman算法的一種改進。因此,解碼時首先要提取出壓縮流中的碼表信息建立出Huffman樹,其中每個葉結點應包含有碼長和字符值信息,并把最終生成的碼表保存在RAM中供給Huff_man解碼模塊查表還原出圖像原始數(shù)據(jù)。
2 PNG解碼的軟硬件協(xié)調(diào)機制
整個PNG硬件解碼過程都是由軟件來調(diào)度的,在硬件解碼中若校驗到圖片數(shù)據(jù)出錯或解碼完成時,則PNG硬件模塊通過配置專門的寄存器給軟件檢查做中斷處理;當軟件檢測到這個寄存器信號使能時就產(chǎn)生中斷,就能即使關閉PNG硬件解碼模塊,在數(shù)據(jù)有誤的情況下節(jié)省了硬件解碼的功耗。
解碼前后數(shù)據(jù)的搬運機制是通過公用的AVI模塊(相當于FIF0實現(xiàn)輸入輸出數(shù)據(jù)的緩存)實現(xiàn)了PNG數(shù)據(jù)的搬運:解碼前,軟件通過調(diào)配AVI模塊從內(nèi)存中搬取壓縮數(shù)據(jù)給PNG硬件模塊做解碼;解碼后的數(shù)據(jù)經(jīng)過Resize模塊縮放后又可以利用AVI搬運給VGA做顯示,這種較優(yōu)的軟件調(diào)配機制,解決了該設計的軟硬件協(xié)調(diào)問題,可以在節(jié)省功耗的前提下實現(xiàn)高效率的解碼,具體的軟件硬件協(xié)調(diào)原理如圖2所示。
3 PNG解碼的總體硬件結構
PNG硬件解碼加速的整體結構主要由Bytesshift字符容器、PNG頭信息處理模塊、Inflate table建Huffman表模塊、Inflate fast快速解碼模塊、Lz77尋找匹配串模塊、Filter反濾波反交織模塊和Resize放大縮小模塊7大模塊組成。具體PNG解碼的硬件流程圖如圖3所示。
如圖3可見,PNG解碼的基本流程為:通過AVI模塊從總線上搬取壓縮數(shù)據(jù)到Bytesshift字符容器進行緩存,并轉(zhuǎn)換為壓縮比特流;通過PNG頭信息處理模塊保留下文件的頭信息,通過控制Inflate table模塊讀取碼長信息來建立Huffman表,并對壓縮數(shù)據(jù)進行解碼;解碼后的數(shù)據(jù)經(jīng)過Filter模塊進行反濾波和反交織等處理,然后發(fā)給Resize模塊做放大縮小處理后,并通過AVI模塊將最終解碼后的數(shù)據(jù)傳輸出去。其中,解碼核心模塊和Filter模塊通過采用了數(shù)據(jù)的流水線處理方式,也極大地提高了.PNG的解碼效率。
4 PNG核心解碼模塊的硬件結構
由于編碼長度可變和編碼長度不統(tǒng)一,解碼時若按位比較來查找Huffman表會消耗很多時間,且PNG數(shù)據(jù)流中Huffman編碼的最長碼長為9。因此,為了實現(xiàn)快速查表解碼,本算法中將碼長小于9的Huffman樹的葉結點作為父結點來擴展到9層,即擴展出來的葉結點信息都同父結點一樣,每次用固定的9比特壓縮數(shù)據(jù)作為地址去查表。這樣可以保證在每一個時鐘內(nèi)都可以查找到相應的字符值,就可以極大地提高硬件解碼的效率。以前面的Huffman樹為例子(如圖4所示),簡單地將第4層以內(nèi)的葉結點補充到第4層,即把整個Huffman二叉樹補滿,則在第4層的子葉結點的長度和字符信息都同父結點一樣。
這種擴展Huffman樹的方法,可以實現(xiàn)迅速查找Huffman表,得到相應的字符值和匹配的組合信息值,對解出匹配的組合信息值,則根據(jù)LZ77原則還原出解碼數(shù)據(jù)作為輸出。
該設計中的硬件解碼核心模塊可參考圖5。這種硬件結構的優(yōu)點是利用擴展碼表的方法實現(xiàn)快速解碼。核心解碼的基本流程為:每次用固定的9 b壓縮數(shù)據(jù)作為地址去查表,查出包含有碼長和字符信息的葉結點,并根據(jù)碼長信息從字符容器模塊移出使用過的壓縮數(shù)據(jù),并等待新進的壓縮數(shù)據(jù)與字符容器剩余的壓縮數(shù)據(jù)組成新的9 b數(shù)據(jù)作為查表地址。在下一個時鐘重復查表的過程,以此方式反復查表直至Huffman解碼結束。
5 仿真和綜合結果
經(jīng)Modelsim 6.3仿真提取出解碼后數(shù)據(jù),在Matlab工具中進行對原圖顯示與該設計解碼后提取出的圖像數(shù)據(jù)進行對比,比較結果完全一致,并且在驗證平臺上比較其對應的原始圖像數(shù)據(jù)也完全吻合,因此,該硬件設計能夠完全不失真的恢復PNG圖像數(shù)據(jù)。
在設計中,使用臺積電90 nlTl的工藝庫,在100 MHz的頻率下對PNG解碼核心模塊用DC進行綜合,結果如表1所示。(其中面積大小和功耗不包括RAM的面積和讀寫RAM的功耗)
6 結 語
這里討論了PNG解碼加速的硬件實現(xiàn)方法。其中分析了LZ77和Huffman兩種算法的硬件解碼原理,以及采用補滿Huffman樹的機制實現(xiàn)快速查表解碼,并運用較優(yōu)的軟硬件協(xié)調(diào)機制,在節(jié)省功耗前的前提下實現(xiàn)PNG硬件解碼加速。
北京2022年10月18日 /美通社/ -- 10月14日,國際數(shù)據(jù)公司(IDC)發(fā)布《2022Q2中國軟件定義存儲及超融合市場研究報告》,報告顯示:2022年上半年浪潮超融合銷售額同比增長59.4%,近5倍于...
關鍵字: IDC BSP 數(shù)字化 數(shù)據(jù)中心