欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種動態(tài)Huffman編碼硬件實(shí)現(xiàn)系統(tǒng)的制作方法

文檔序號:7529704閱讀:296來源:國知局
專利名稱:一種動態(tài)Huffman編碼硬件實(shí)現(xiàn)系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本實(shí)用新型涉及數(shù)據(jù)壓縮技術(shù)。尤其涉及一種動態(tài)Huffman編碼硬件實(shí)現(xiàn)系統(tǒng)及其實(shí)現(xiàn)方法。
背景技術(shù)
在云計(jì)算的海量數(shù)據(jù)處理中,數(shù)據(jù)的壓縮、解壓縮是非常重要的手段,可以大幅度的降低數(shù)據(jù)的存儲空間,提升數(shù)據(jù)傳輸?shù)耐掏侣?。Huffman 一種基于統(tǒng)計(jì)模式的無損壓縮算法,主要包括以下幾個基本的步驟:a)統(tǒng)計(jì)字符的頻率。b)構(gòu)造Huffman樹。c)創(chuàng)建Huffman表。d)編碼輸出。最終,在數(shù)據(jù)流中出現(xiàn)頻率最高的字符給予最短的編碼,而出現(xiàn)頻率最低的給予最長的編碼,這樣就可以得到壓縮的效果。使用軟件結(jié)構(gòu)實(shí)現(xiàn)Huffman樹的過程中,需要采用二叉樹數(shù)據(jù)結(jié)構(gòu),因此,我們需要定義一個結(jié)構(gòu)體去表示Huffman樹中的每一個節(jié)點(diǎn),在硬件描述語言Verilog及VHDL中沒有數(shù)據(jù)結(jié)構(gòu)。為了實(shí)現(xiàn)動態(tài)Huffman編碼的結(jié)構(gòu),因此這里給出了 Huffman編碼的硬件實(shí)現(xiàn)系統(tǒng)并給出了 Huffman編碼硬件實(shí)現(xiàn)方法及加速方法。傳統(tǒng)的Huffman實(shí)現(xiàn)方式中,一般是基于軟件平臺的實(shí)現(xiàn)方式,編碼過程是串行處理的過程,而在Huffman編碼的硬件實(shí)現(xiàn)過程中,采用了快速的字符統(tǒng)計(jì)方法、頻率緩存單元提前清空等技術(shù)使得數(shù)據(jù)吞吐率有了明顯的提升。

實(shí)用新型內(nèi)容本實(shí)用新型要解決的一個技術(shù)問題是提供了一種動態(tài)Huffman編碼硬件實(shí)現(xiàn)系統(tǒng)及其實(shí)現(xiàn)方法,能夠利用極少的組合邏輯、時序邏輯以及存儲器資源加以實(shí)現(xiàn)。本實(shí)用新型為實(shí)現(xiàn)上述目的,采用如下技術(shù)方案:一種動態(tài)Huffman編碼硬件實(shí)現(xiàn)系統(tǒng),其特征在于,所述系統(tǒng)包括:一個頻率緩存單元,用于存放數(shù)據(jù)流中每一個字符出現(xiàn)的頻率;一個最小堆緩存單元,用于維護(hù)頻率緩沖單元中出現(xiàn)頻率不為O的字符,使得這些字符在存儲方式上呈現(xiàn)連續(xù)的形式,而這些字符在邏輯關(guān)系上呈現(xiàn)二叉樹的形式,并且使得這棵二叉樹滿足:左節(jié)點(diǎn)和右節(jié)點(diǎn)都大于或者等于本節(jié)點(diǎn),為輔助構(gòu)造Huffman樹的過程做好準(zhǔn)備,其中葉子節(jié)點(diǎn)除外;—個父親節(jié)點(diǎn)緩存單元,用于存放Huffman樹中每一個節(jié)點(diǎn)的父親節(jié)點(diǎn);—個深度緩存單元,用于存放整個Huffman樹中每一個節(jié)點(diǎn)的深度,其中根節(jié)點(diǎn)的深度最大,葉子節(jié)點(diǎn)的深度是O ;一個碼字值緩存單元,用于存放Huffman樹中每一個葉子節(jié)點(diǎn)對應(yīng)的Huffman編碼的值;一個碼字長度緩存單元,用于存放Huffman樹中每一個節(jié)點(diǎn)對應(yīng)的Huffman編碼的碼字長度;[0015]一個乘法器單元,用于計(jì)算對待壓縮數(shù)據(jù)塊經(jīng)過動態(tài)Huffman編碼之后數(shù)據(jù)塊的大??;一個數(shù)據(jù)統(tǒng)計(jì)單元,用于統(tǒng)計(jì)待壓縮數(shù)據(jù)流中每一個字符出現(xiàn)的頻率,并將統(tǒng)計(jì)的結(jié)果存放在頻率緩存單元中;一個主控狀態(tài)機(jī)部分,根據(jù)頻率緩存單元中存放的每一個字符的頻率,通過最小堆緩存單元、父親節(jié)點(diǎn)緩存單元、深度緩存單元來構(gòu)造Huffman樹及Huffman表,分別存放在碼字值緩存單元及碼字長度緩存單元中;三個多路選擇器單元,分別用于控制頻率緩存單元在不同的工作階段由主控狀態(tài)機(jī)或者是由數(shù)據(jù)統(tǒng)計(jì)單元控制,和碼字值緩存單元、碼字長度緩存單元在不同的工作階段分別由主控狀態(tài)機(jī)或者是由數(shù)據(jù)打包輸出單元進(jìn)行控制;一個數(shù)據(jù)打包輸出單元,得到每一個字符的Huffman編碼并打包輸出;一個加法器單元,用于快速的字符統(tǒng)計(jì),統(tǒng)計(jì)結(jié)果存放在頻率緩存單元中。一種動態(tài)Huffman編碼硬件實(shí)現(xiàn)方法,包括下述步驟:( I)掃描待壓縮的原始數(shù)據(jù),并快速統(tǒng)計(jì)每一個字符出現(xiàn)的頻率,依次存放在頻率緩存單元;(2)主控狀態(tài)機(jī)讀取頻率緩存單元的數(shù)據(jù)并把出現(xiàn)頻率不為O的字符順序的放進(jìn)最小堆緩存單元進(jìn)行維護(hù);(3)利用最小堆緩存單元、父親節(jié)點(diǎn)緩存單元、深度緩存單元構(gòu)造Huffman樹,其中Huffman樹的信息最終也是存放在最小堆緩存單元中;(4)遍歷Huffman樹,得到Huffman樹中每一個葉子節(jié)點(diǎn)的碼字長度;(5)統(tǒng)計(jì)每一個非O碼字長度字符的數(shù)目;(6)根據(jù)每一個非O碼字長度字符的數(shù)目去計(jì)算出每一個字符的Huffman碼字值;(7)統(tǒng)計(jì)數(shù)據(jù)塊經(jīng)過Huffman編碼之后的數(shù)據(jù)塊的大小;(8)主控狀態(tài)機(jī)部分把碼字值緩存單元、碼字長度緩存單元控制權(quán)交給數(shù)據(jù)打包單元;(9)數(shù)據(jù)打包單元在得到碼字值緩存單元及碼字長度緩存單元的控制權(quán)之后,開始對原始的數(shù)據(jù)進(jìn)行Huffman編碼,并打包輸出;( 10)主控狀態(tài)機(jī)在進(jìn)行對新的數(shù)據(jù)塊進(jìn)行統(tǒng)計(jì)之前對頻率緩存單元的提前清空。其進(jìn)一步特征在于:所述步驟(I)中字符快速統(tǒng)計(jì)通過加法器和頻率緩存單元完成。所述步驟(2)中最小堆緩存單元進(jìn)行維護(hù)過程為把頻率緩存單元中的字符出現(xiàn)頻率依次順序的讀出,并加以判斷,如果不為0,就把該字符放進(jìn)最小堆緩存單元中,一直到頻率緩存單元中所有的葉子節(jié)點(diǎn)都讀取并判斷完畢,如果為O就不放進(jìn)最小堆緩存單元中,在把字符依次存進(jìn)最小堆緩存單元中的同時記錄最小堆的長度,即最小堆緩存單元中有效的字符的數(shù)目,這些字符在邏輯關(guān)系上呈現(xiàn)二叉樹的形式;從最小堆緩存單元中數(shù)據(jù)元素個數(shù)的一半開始一直到最小堆緩存單元的頂部依次調(diào)整這棵二叉樹,使得這課二叉樹中的每一個節(jié)點(diǎn)都滿足左節(jié)點(diǎn)和右節(jié)點(diǎn)都大于或者等于本節(jié)點(diǎn),其中葉子節(jié)點(diǎn)除外。[0036]所述步驟(3)中構(gòu)造Huffman樹的過程中從最小堆緩存單元的頂部讀取第一個元素,并把這個元素存入最小堆緩存單元底部開始的第一個未被占用的單元中,此時最小堆緩存單元的長度減1,并將最小堆緩存單元的最后一個元素放進(jìn)最小堆緩存單元的第一個元素的位置上,從第一個元素位置開始調(diào)整這棵二叉樹,使得這棵二叉樹中的每一個節(jié)點(diǎn)都滿足左節(jié)點(diǎn)和右節(jié)點(diǎn)大于或者等于本節(jié)點(diǎn),其中葉子節(jié)點(diǎn)除外;從最小堆緩存單元的頂部再讀取第一個元素并把這個元素存入最小堆緩存單元底部開始的第一個未被占用的單元中,把最小堆緩存單元的長度減1,把從最小堆緩存單元中連續(xù)讀取的元素組合成一個新的節(jié)點(diǎn),這個新的節(jié)點(diǎn)的權(quán)值為兩個連續(xù)讀取的元素的權(quán)值的和,這個的新節(jié)點(diǎn)在整個Huffman樹中的深度為兩個連續(xù)讀取元素中較大深度加1,并在父親節(jié)點(diǎn)緩存單元中設(shè)置好兩個連續(xù)讀取的葉子節(jié)點(diǎn)的父親節(jié)點(diǎn)為這個新得到的節(jié)
占.[0038]把新得到的節(jié)點(diǎn)放入最小堆緩存單元的頂部,并把最小堆緩存單元的長度加1,從最小堆緩存單元的頂部開始依次調(diào)整最小堆中二叉樹的節(jié)點(diǎn),使得這棵二叉樹滿足左節(jié)點(diǎn)和右節(jié)點(diǎn)大于或者等于本節(jié)點(diǎn),其中葉子節(jié)點(diǎn)除外;判斷最小堆緩存單元的長度是否為0,若不為0,表示Huffman樹未建好,繼續(xù)Huffman樹的建立;若為O,表示Huffman樹已經(jīng)全部建好,把讀取的最后一個節(jié)點(diǎn)存入最小堆緩存單元底部開始第一個未被占用的單元中。所述步驟(4)遍歷Huffman樹,得到Huffman樹中每一個葉子節(jié)點(diǎn)的碼字長度過程中Huffman樹已經(jīng)建好,并存放在最小堆緩存單元中,從最小堆緩存單元中最新存入的那個單元開始,并在碼字長度緩存單元中設(shè)置其對應(yīng)的碼字長度為0,并從Huffman樹的根節(jié)點(diǎn)開始,依次遍歷最小堆緩存單元中存放的Huffman樹中剩余的每一個節(jié)點(diǎn),依次設(shè)置好每一個葉子節(jié)點(diǎn)的碼字長度,依次對應(yīng)存放在碼字長度緩存單元中。所述步驟(5)統(tǒng)計(jì)每一個非O碼字長度字符的數(shù)目過程中在遍歷Huffman樹,得到每一個節(jié)點(diǎn)的碼字長度時,主控狀態(tài)機(jī)會同時統(tǒng)計(jì)出每一個碼字長度的節(jié)點(diǎn)的個數(shù),為計(jì)算Huffman編碼的值作好準(zhǔn)備。所述步驟(6)根據(jù)每一個非O碼字長度字符的數(shù)目去計(jì)算出每一個字符的Huffman碼字值的過程是為了得出Huffman樹中每一個節(jié)點(diǎn)的碼字值,統(tǒng)計(jì)出了每一個非O碼字長度的個數(shù),從Huffman樹的最頂層依次向下進(jìn)行推出Huffman樹中每一個節(jié)點(diǎn)的碼字值,并將葉子節(jié)點(diǎn)的碼字值保存在碼字值緩存單元中。所述步驟(7)統(tǒng)計(jì)數(shù)據(jù)塊經(jīng)過Huffman編碼之后的數(shù)據(jù)塊的大小過程是為了在得到每一個葉子節(jié)點(diǎn)碼字長度的過程中,同時讀取對應(yīng)的頻率緩存單元中對應(yīng)字符的頻率信息,通過乘法器單元計(jì)算出對頻率緩存單元中字符進(jìn)行Huffman編碼之后的長度,同時計(jì)算出累計(jì)Huffman編碼的長度;在得出每一個Huffman葉子節(jié)點(diǎn)的碼字長度之后,也就得到了固定長度的數(shù)據(jù)塊經(jīng)過Huffman編碼之后總大小。所述步驟(10) Huffman編碼統(tǒng)計(jì)之前對頻率緩存單元的提前清空過程為數(shù)據(jù)打包單元啟動,開始編碼輸出,同時主控狀態(tài)機(jī)開始把頻率緩存單元開始清空處理,為下一個數(shù)據(jù)塊的Huffman編碼開始做好準(zhǔn)備。本實(shí)用新型通過硬件實(shí)現(xiàn)了 Huffman編碼,并在Huffman編碼的硬件實(shí)現(xiàn)過程中,采用了快速的字符統(tǒng)計(jì)方法、頻率緩存單元提前清空等技術(shù)使得數(shù)據(jù)吞吐率有了明顯的提 升。

圖1給出了一種動態(tài)Huffman編碼硬件實(shí)現(xiàn)系統(tǒng)的結(jié)構(gòu)示意圖。圖2給出了一種動態(tài)Huffman編碼硬件實(shí)現(xiàn)方法的狀態(tài)轉(zhuǎn)換圖。
具體實(shí)施方式
下面參照附圖用本實(shí)用新型的示例性實(shí)施例對本實(shí)用新型進(jìn)行更全面的描述和說明。如圖1所示,一種動態(tài)Huffman編碼硬件實(shí)現(xiàn)系統(tǒng)的結(jié)構(gòu)示意圖包括:數(shù)據(jù)打包單元100,數(shù)據(jù)選擇器單元101,頻率緩存單元102,數(shù)據(jù)選擇器單元103,碼字長度緩存單元104,數(shù)據(jù)選擇器單元105,碼字值緩存單元106,主控狀態(tài)機(jī)107,父親節(jié)點(diǎn)緩存單元108,深度緩存單元109,最小堆緩存單元110,數(shù)據(jù)統(tǒng)計(jì)單元111。數(shù)據(jù)打包單元100,用于把待壓縮的數(shù)據(jù)通過查詢碼字長度緩存單元104及碼字值緩存單元106得到每一個字符的Huffman編碼并打包輸出。數(shù)據(jù)選擇器單元101,用于選擇頻率緩存單元的控制權(quán),在Huffman編碼之前,數(shù)據(jù)選擇器單元101選擇數(shù)據(jù)統(tǒng)計(jì)單元111去控制頻率緩存單元102 ;在構(gòu)造Huffman編碼過程中,數(shù)據(jù)選擇器單元101選擇主控狀態(tài)機(jī)單元107去控制頻率緩存單元102的控制權(quán)。頻率緩存單元102,用于存放Huffman樹中每一個葉子節(jié)點(diǎn)的頻率。數(shù)據(jù)選擇器單元103,用于控制碼字長度緩存單元104的控制權(quán),在得到Huffman樹中每一個葉子節(jié)點(diǎn)的碼字長度及碼字值之前,數(shù)據(jù)選擇器單元103選擇主控狀態(tài)機(jī)單元107去控制碼字長度緩存單元104 ;在得到Huffman樹中每一個葉子節(jié)點(diǎn)的碼字長度及碼字值之后,數(shù)據(jù)選擇器單元103選擇數(shù)據(jù)打包單元100去控制碼字長度緩存單元104的控制權(quán)。碼字長度緩存單元104,用于存放Huffman樹中每一個葉子節(jié)點(diǎn)的碼字長度。數(shù)據(jù)選擇單元105,用于控制碼字值緩存單元106的控制權(quán),在得到Huffman樹中每一個葉子節(jié)點(diǎn)的碼字長度及碼字值之前,數(shù)據(jù)選擇器單元105選擇主控狀態(tài)機(jī)單元107去控制碼字值緩存單元106 ;在得到Huffman樹中每一個葉子節(jié)點(diǎn)的碼字長度及碼字值之后,數(shù)據(jù)選擇單元105選擇數(shù)據(jù)打包單元100去控制碼字值緩存單元106。主控狀態(tài)機(jī)單元107,通過借助父親節(jié)點(diǎn)緩存單元108,深度緩存單元109,最小堆緩存單元110,去構(gòu)建Huffman樹,通過遍歷Huffman樹,得到Huffman樹中每一個節(jié)點(diǎn)的碼字長度,再根據(jù)碼字長度去計(jì)算Huffman樹中所有的葉子節(jié)點(diǎn)的碼字值存放在碼字值緩存單元106中,對應(yīng)的葉子節(jié)點(diǎn)的碼字長度存放于碼字長度緩存單元104中。父親節(jié)點(diǎn)緩存單元108,用于存放Huffman樹中每一個節(jié)點(diǎn)的父親節(jié)點(diǎn),根節(jié)點(diǎn)除外。深度緩存單元109,用于存放Huffman樹中每一個節(jié)點(diǎn)的深度,其中葉子節(jié)點(diǎn)的深度是0,根節(jié)點(diǎn)的深度最大。最小堆緩存單元110,用于維護(hù)Huffman樹中所有的節(jié)點(diǎn),使得這些節(jié)點(diǎn)在邏輯上構(gòu)成一棵二叉樹,并且滿足左節(jié)點(diǎn)和右節(jié)點(diǎn)大于或者等于本節(jié)點(diǎn),其中葉子節(jié)點(diǎn)除外。[0060]數(shù)據(jù)統(tǒng)計(jì)單元111,在Huffman主控狀態(tài)機(jī)構(gòu)造Huffman樹之前,由數(shù)據(jù)統(tǒng)計(jì)單元111去統(tǒng)計(jì)每一個葉子節(jié)點(diǎn)出現(xiàn)的頻率,并把這個統(tǒng)計(jì)的每一個字符的頻率信息存放在頻率緩存單元102中。如圖2所示,一種動態(tài)Huffman編碼硬件實(shí)現(xiàn)方法的狀態(tài)轉(zhuǎn)換圖,主要狀態(tài)包括:狀態(tài)000(Γ狀態(tài)0010在狀態(tài)0000,圖1中主控狀態(tài)機(jī)單元107通過數(shù)據(jù)選擇單元101獲得頻率緩存單元102的控制權(quán),并把頻率緩存單元中每一個數(shù)據(jù)存儲單元都清空為0,為數(shù)據(jù)統(tǒng)計(jì)做好準(zhǔn)備,并進(jìn)入狀態(tài)0001。在狀態(tài)0001,圖1中主控狀態(tài)機(jī)單元107通過數(shù)據(jù)選擇單元101開始釋放頻率緩存單元102的控制權(quán),此時頻率緩存單元102的控制權(quán)交給數(shù)據(jù)統(tǒng)計(jì)單元111并進(jìn)入狀態(tài)0002。在狀態(tài)0002,圖1中數(shù)據(jù)統(tǒng)計(jì)單元111開始對掃描待壓縮的原始數(shù)據(jù),并統(tǒng)計(jì)每一個字符出現(xiàn)的頻率,依次存放在頻率緩存單元102中,當(dāng)原始數(shù)據(jù)塊掃描完畢時,主控狀態(tài)機(jī)單元107通過數(shù)據(jù)選擇單元101回收頻率緩存單元102的控制權(quán),并開始進(jìn)入狀態(tài)0003。在狀態(tài)0003,主控狀態(tài)機(jī)單元開始從頻率緩存單元102中依次順序的讀取數(shù)據(jù),并把出現(xiàn)頻率不為O的字符順序的放進(jìn)最小堆緩存單元110中,每存放一個元素最小堆的長度就加1,一直到把頻率緩存單元中的數(shù)據(jù)讀取完畢為止,在讀取的過程中會進(jìn)行判斷如果一個字符沒有出現(xiàn),那么該字符的碼字長度為0,此時主控狀態(tài)機(jī)單元107開始把碼字長度緩存單元104中對應(yīng)的單元填寫為O ;如果出現(xiàn)了那么該字符定是葉子節(jié)點(diǎn)其深度為0,此時主控狀態(tài)機(jī)單元開始把深度緩存單元109中對應(yīng)的單元設(shè)置為0,重復(fù)執(zhí)行狀態(tài)0003,直到所有的節(jié)點(diǎn)讀取完畢,并開始進(jìn)入狀態(tài)0004。在狀態(tài)0004,主控狀`態(tài)機(jī)開始處理最小堆緩存單元110中存放的每一個字符,使得這些字符物理上呈現(xiàn)順序存放,在邏輯上又構(gòu)成了一棵二叉樹,并且這棵二叉樹滿足:左節(jié)點(diǎn)和右節(jié)點(diǎn)大于或者等于本節(jié)點(diǎn),其中葉子節(jié)點(diǎn)除外。在狀態(tài)0004重復(fù)處理這個過程,直到最小堆中所有的葉子節(jié)點(diǎn)都滿足:左節(jié)點(diǎn)和右節(jié)點(diǎn)大于或者等于本節(jié)點(diǎn),葉子節(jié)點(diǎn)除夕卜,最小堆緩存單元110中的數(shù)據(jù)處理好了之后,主控狀態(tài)機(jī)單元開始進(jìn)入狀態(tài)0005。在狀態(tài)0005,主控狀態(tài)機(jī)開始從最小堆的頂部讀取一個字符,此時最小堆緩存單元的長度減I,主控狀態(tài)機(jī)單元107把這個字符從最小堆緩存單元110的底部開始順序的向頂部存放,并把最小堆的有效字符的最后一個字符放進(jìn)最小堆的頂部,此時最小堆的長度加1,并開始調(diào)整最小堆緩存單元110中的元素,使得最小堆緩存單元110中的每一個元素都滿足::左節(jié)點(diǎn)和右節(jié)點(diǎn)大于或者等于本節(jié)點(diǎn),葉子節(jié)點(diǎn)除外,調(diào)整好之后,主控狀態(tài)機(jī)單元107再從最小堆緩存單元110中讀取一個元素,此時最小堆的長度再次減1,主控狀態(tài)機(jī)單元107再把這個新讀取的字符從最小堆緩存單元110的底部順序的向最小堆的頂部順序的存放,并把兩個連續(xù)讀取的元素構(gòu)成一個新的Huffman節(jié)點(diǎn),即中間節(jié)點(diǎn),并開始設(shè)置頻率緩存單元102中這個新的節(jié)點(diǎn)的權(quán)值為連續(xù)讀取的兩個元素的權(quán)值之和,在深度緩存單元109中開始設(shè)置這個新節(jié)點(diǎn)的深度為連續(xù)讀取的兩個元素的深度最大值加1,主控狀態(tài)機(jī)單元107此時還會在父親節(jié)點(diǎn)緩存單元中設(shè)置之前連續(xù)讀取元素的父親節(jié)點(diǎn)為這個新得到的節(jié)點(diǎn),處理完之后主控狀態(tài)機(jī)單元107開始判斷最小堆的長度是否為0,如果為O就表示Huffman樹已經(jīng)建好并順序的從最小堆的底部向最小堆的頂部存放,并開始準(zhǔn)備進(jìn)入狀態(tài)0006,否則就繼續(xù)進(jìn)入狀態(tài)0005重復(fù)執(zhí)行上述過程。在狀態(tài)0006中,主控狀態(tài)機(jī)單元107把最后一個存進(jìn)最小堆緩存單元110中的節(jié)點(diǎn)讀取出來,設(shè)置其碼字長度為0,進(jìn)入狀態(tài)0007。在狀態(tài)0007中,繼續(xù)從最小堆緩存單元110中讀取出一個元素,并在碼字長度緩存單元104中設(shè)置其碼字長度為其父親節(jié)點(diǎn)的碼字長度加1,每設(shè)置好一個節(jié)點(diǎn)的碼字長度的同時主控狀態(tài)機(jī)單元107會判斷該節(jié)點(diǎn)是不是Huffman樹中的葉子節(jié)點(diǎn),如果是葉子節(jié)點(diǎn)主控狀態(tài)機(jī)單元107就從頻率緩存單元102中把該節(jié)點(diǎn)對應(yīng)的頻率讀取出來,利用乘法器單元計(jì)算出采用Huffman編碼待壓縮數(shù)據(jù)塊中所有的該節(jié)點(diǎn)最后總得長度是多長,重復(fù)執(zhí)行步驟0007,在重復(fù)執(zhí)行的過程中主控狀態(tài)機(jī)單元107同時會統(tǒng)計(jì)出每一種碼字長度所對應(yīng)的節(jié)點(diǎn)的個數(shù),當(dāng)設(shè)置好Huffman樹中所有節(jié)點(diǎn)的碼字長度后就進(jìn)入狀態(tài)0008。在狀態(tài)0008中,主控狀態(tài)機(jī)單元107根據(jù)在狀態(tài)0007中得出的每一種碼字長度的個數(shù)去計(jì)算出所有節(jié)點(diǎn)的碼字值,并分別存放在碼字值緩存單元106中,并開始進(jìn)入狀態(tài)0009。在狀態(tài)0009中,主控狀態(tài)機(jī)單元107就通過數(shù)據(jù)選擇單元103、105釋放對碼字長度緩存單元104及碼字值緩存單元106的控制權(quán),并把碼字長度緩存單元104、碼字值緩存單元106的控制權(quán)交給數(shù)據(jù)打包單元100,進(jìn)入狀態(tài)0010。在狀態(tài)0010中,數(shù)據(jù)打包單元100開始工作,并依次讀取原始待壓縮數(shù)據(jù)塊中的每一個字符,通過查詢圖1中碼字長度緩存單元104及碼字值緩存單元106開始輸出壓縮之后的數(shù)據(jù)。在狀態(tài)0010中,數(shù)據(jù)打包單元開始工作的同時,主控狀態(tài)機(jī)單元107也把頻率緩存單元102中的每一個存儲單元給清除。如果編碼輸出完成并且頻率緩存單元102中的每一個單元都被清除那么,主控狀態(tài)機(jī)就通過圖1中數(shù)據(jù)選擇單元103、105去獲得圖1中碼字長度緩存單元104、碼字值緩存單元106的控制權(quán),并進(jìn)入狀態(tài)0000。在實(shí)用新型中,數(shù)據(jù)存儲及數(shù)據(jù)控制部分構(gòu)成的一個完成的系統(tǒng),結(jié)構(gòu)清晰,利于分析和設(shè)計(jì),Huffman樹及Huffman表的構(gòu)造過程是由主控狀態(tài)機(jī)去控制存放在各個數(shù)據(jù)緩存單元中的數(shù)據(jù)進(jìn)行的,狀態(tài)轉(zhuǎn)換過程清晰。盡管本實(shí)用新型此處具體化一些特定的例子示出和描述,然而本實(shí)用新型不限制于所示出的細(xì)節(jié),因?yàn)樵诓黄x本實(shí)用新型的精神以及在權(quán)利要求的范圍和等同范圍內(nèi),可以作出多種改進(jìn)和結(jié)構(gòu)變化。因此,寬范圍地并且如權(quán)利要求中所闡明的在某種意義上與本實(shí)用新型的范圍一致地解釋附加的權(quán)利要求是適當(dāng)?shù)摹?br> 權(quán)利要求1.種動態(tài)Huffman編碼硬件實(shí)現(xiàn)系統(tǒng),其特征在于,所述系統(tǒng)包括: 一個頻率緩存單元,用于存放數(shù)據(jù)流中每一個字符出現(xiàn)的頻率; 一個最小堆緩存單元,用于維護(hù)頻率緩沖單元中頻率不為O的字符,; 一個父親節(jié)點(diǎn)緩存單元,用于存放Huffman樹中除根節(jié)點(diǎn)外的每一個節(jié)點(diǎn)的父親節(jié)占.一個深度緩存單元,用于存放整個Huffman樹中每一個節(jié)點(diǎn)的深度; 一個碼字值緩存單元,用于存放每一個字符對應(yīng)的Huffman編碼的值; 一個碼字長度緩存單元,用于存放每一個字符對應(yīng)的Huffman編碼值所對應(yīng)的碼字長度; 一個乘法器單元,用于計(jì)算對待壓縮數(shù)據(jù)塊采用動態(tài)Huffman編碼之后數(shù)據(jù)塊的大小; 一個數(shù)據(jù)統(tǒng)計(jì)單元,用于統(tǒng)計(jì)待壓縮數(shù)據(jù)流中每一個字符出現(xiàn)的頻率,并將統(tǒng)計(jì)的結(jié)果存放在頻率緩存單元中; 一個主控狀態(tài)機(jī)部分,用于構(gòu)造Huffman樹及Huffman表,分別存放在碼字值緩存單元及碼字長度緩存單元中; 三個多路選擇器單元,分別用于控制頻率緩存單元在不同的工作階段由主控狀態(tài)機(jī)或者是由數(shù)據(jù)統(tǒng)計(jì)單元控制,和碼字值緩存單元、碼字長度緩存單元在不同的工作階段分別由主控狀態(tài)機(jī)或者是由數(shù)據(jù)打包輸出單元進(jìn)行控制; 一個數(shù)據(jù)打包輸出單元,得到每一個字符的Huffman編碼并打包輸出; 一個加法器單元,用于快速的字符統(tǒng)計(jì),統(tǒng)計(jì)結(jié)果存放在頻率緩存單元中。
專利摘要本實(shí)用新型公布了一種動態(tài)Huffman編碼硬件實(shí)現(xiàn)系統(tǒng),該系統(tǒng)包括數(shù)據(jù)打包單元,頻率緩存單元,碼字長度緩存單元,三個數(shù)據(jù)選擇器單元,碼字值緩存單元,主控狀態(tài)機(jī),父親節(jié)點(diǎn)緩存單元,深度緩存單元,最小堆緩存單元,數(shù)據(jù)統(tǒng)計(jì)單元,加法器單元和乘法器單元。動態(tài)Huffman編碼硬件實(shí)現(xiàn)方法,包括快速的字符統(tǒng)計(jì);建立Huffman樹;建立Huffman表;編碼輸出;頻率緩存單元的提前清空等步驟。本實(shí)用新型通過硬件實(shí)現(xiàn)了Huffman編碼,并在Huffman編碼的硬件實(shí)現(xiàn)過程中,采用了快速的字符統(tǒng)計(jì)方法、頻率緩存單元提前清空等技術(shù)使得數(shù)據(jù)吞吐率有了明顯的提升。
文檔編號H03M7/40GK202931291SQ201220598299
公開日2013年5月8日 申請日期2012年11月14日 優(yōu)先權(quán)日2012年11月14日
發(fā)明者湯曉東, 郭彥鋒, 李冰 申請人:無錫芯響電子科技有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
沙田区| 鲁甸县| 萝北县| 盐津县| 禄丰县| 娄底市| 科尔| 上杭县| 镇平县| 余庆县| 石嘴山市| 洞头县| 武川县| 米脂县| 安乡县| 贵德县| 图们市| 买车| 江川县| 兴国县| 盐亭县| 独山县| 深泽县| 五河县| 保康县| 株洲县| 台前县| 玉山县| 界首市| 盐城市| 瓦房店市| 洪泽县| 和林格尔县| 绥德县| 东乡| 阿尔山市| 永顺县| 察隅县| 平顶山市| 南召县| 阿图什市|