PNG的硬件解碼加速設(shè)計(jì)
本文引用地址:http://www.ex-cimer.com/article/166979.htm
4 PNG核心解碼模塊的硬件結(jié)構(gòu)
由于編碼長度可變和編碼長度不統(tǒng)一,解碼時(shí)若按位比較來查找Huffman表會(huì)消耗很多時(shí)間,且PNG數(shù)據(jù)流中Huffman編碼的最長碼長為9。因此,為了實(shí)現(xiàn)快速查表解碼,本算法中將碼長小于9的Huffman樹的葉結(jié)點(diǎn)作為父結(jié)點(diǎn)來擴(kuò)展到9層,即擴(kuò)展出來的葉結(jié)點(diǎn)信息都同父結(jié)點(diǎn)一樣,每次用固定的9比特壓縮數(shù)據(jù)作為地址去查表。這樣可以保證在每一個(gè)時(shí)鐘內(nèi)都可以查找到相應(yīng)的字符值,就可以極大地提高硬件解碼的效率。以前面的Huffman樹為例子(如圖4所示),簡單地將第4層以內(nèi)的葉結(jié)點(diǎn)補(bǔ)充到第4層,即把整個(gè)Huffman二叉樹補(bǔ)滿,則在第4層的子葉結(jié)點(diǎn)的長度和字符信息都同父結(jié)點(diǎn)一樣。
這種擴(kuò)展Huffman樹的方法,可以實(shí)現(xiàn)迅速查找Huffman表,得到相應(yīng)的字符值和匹配的組合信息值,對(duì)解出匹配的組合信息值,則根據(jù)LZ77原則還原出解碼數(shù)據(jù)作為輸出。
該設(shè)計(jì)中的硬件解碼核心模塊可參考圖5。這種硬件結(jié)構(gòu)的優(yōu)點(diǎn)是利用擴(kuò)展碼表的方法實(shí)現(xiàn)快速解碼。核心解碼的基本流程為:每次用固定的9 b壓縮數(shù)據(jù)作為地址去查表,查出包含有碼長和字符信息的葉結(jié)點(diǎn),并根據(jù)碼長信息從字符容器模塊移出使用過的壓縮數(shù)據(jù),并等待新進(jìn)的壓縮數(shù)據(jù)與字符容器剩余的壓縮數(shù)據(jù)組成新的9 b數(shù)據(jù)作為查表地址。在下一個(gè)時(shí)鐘重復(fù)查表的過程,以此方式反復(fù)查表直至Huffman解碼結(jié)束。
5 仿真和綜合結(jié)果
經(jīng)Modelsim 6.3仿真提取出解碼后數(shù)據(jù),在Matlab工具中進(jìn)行對(duì)原圖顯示與該設(shè)計(jì)解碼后提取出的圖像數(shù)據(jù)進(jìn)行對(duì)比,比較結(jié)果完全一致,并且在驗(yàn)證平臺(tái)上比較其對(duì)應(yīng)的原始圖像數(shù)據(jù)也完全吻合,因此,該硬件設(shè)計(jì)能夠完全不失真的恢復(fù)PNG圖像數(shù)據(jù)。
在設(shè)計(jì)中,使用臺(tái)積電90 nlTl的工藝庫,在100 MHz的頻率下對(duì)PNG解碼核心模塊用DC進(jìn)行綜合,結(jié)果如表1所示。(其中面積大小和功耗不包括RAM的面積和讀寫RAM的功耗)
6 結(jié) 語
這里討論了PNG解碼加速的硬件實(shí)現(xiàn)方法。其中分析了LZ77和Huffman兩種算法的硬件解碼原理,以及采用補(bǔ)滿Huffman樹的機(jī)制實(shí)現(xiàn)快速查表解碼,并運(yùn)用較優(yōu)的軟硬件協(xié)調(diào)機(jī)制,在節(jié)省功耗前的前提下實(shí)現(xiàn)PNG硬件解碼加速。
評(píng)論