專利名稱:一種基于gzip的壓縮硬件系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本實(shí)用新型涉及一種基于GZIP壓縮硬件系統(tǒng);屬于數(shù)據(jù)壓縮技術(shù)領(lǐng)域。
背景技術(shù):
隨著云計(jì)算技術(shù)的發(fā)展,海量數(shù)據(jù)存儲和傳輸越來越嚴(yán)峻。因此,數(shù)據(jù)無損壓縮技術(shù)得到廣泛的應(yīng)用以減少數(shù)據(jù)存儲空間、提升數(shù)據(jù)傳輸效率。GZIPjPGNU ZIP壓縮算法是非常著名的無損壓縮算法,無專利保護(hù),復(fù)雜度適中,適合硬件平臺實(shí)現(xiàn)。在傳統(tǒng)的數(shù)據(jù)壓縮領(lǐng)域中,基于軟件平臺的實(shí)現(xiàn)的方案得以廣泛的運(yùn)用,然而基于軟件平臺的實(shí)現(xiàn)方法中,占用太多CPU,即Central Processing Unit以及內(nèi)存資源。在本實(shí)用新型中,給出了一種全新的GZIP硬件實(shí)現(xiàn)結(jié)構(gòu)并提出了多種加速方案來提升整個系統(tǒng)性能,可以顯著的減少CPU以及內(nèi)存資源的消耗。高性能系統(tǒng)總線PCIE2.0作為壓縮卡與計(jì)算機(jī)之間進(jìn)行通信橋梁,DMA,即Direct Memory Access通過PCIE2.0接口把計(jì)算機(jī)內(nèi)存中的數(shù)據(jù)傳輸給GZIP壓縮內(nèi)核,在內(nèi)核壓縮完畢之后,DMA再將壓縮過的數(shù)據(jù)傳遞到就算計(jì)的內(nèi)存中,在數(shù)據(jù)傳遞和壓縮過程中無需CPU干預(yù)。
實(shí)用新型內(nèi)容本實(shí)用新型目的是針對現(xiàn)有技術(shù)存在的缺陷提供一種可實(shí)現(xiàn)GZIP壓縮算法、做到軟件壓縮相兼容、提升GZIP壓縮的數(shù)據(jù)吞吐率,使得數(shù)據(jù)壓縮過程中無需CPU的干預(yù)的GZIP壓縮硬件系統(tǒng)。本實(shí)用新型為實(shí)現(xiàn)上述目的,采用如下技術(shù)方案:一種基于GZIP的壓縮硬件系統(tǒng),該系統(tǒng)包括:—個輸入緩存單元,用于對輸入數(shù)據(jù)進(jìn)行緩存;一個LZ77編碼單元,用于對輸入數(shù)據(jù)進(jìn)行LZ77編碼;一個動態(tài)新字符/匹配長度Huffman編碼頻率統(tǒng)計(jì)控制單元,用于對LZ77編碼單元輸出的新字符以及匹配長度進(jìn)行統(tǒng)計(jì);—個動態(tài)指回距離Huffman編碼頻率統(tǒng)計(jì)控制單元,用于對LZ77編碼單元輸出的指回距離進(jìn)行統(tǒng)計(jì); 一個動態(tài)新字符/匹配長度Huffman編碼單元,用于對LZ77編碼單元輸出的新字符以及匹配長度進(jìn)行動態(tài)Huffman編碼;一個動態(tài)指回距離Huffman編碼單元,用于對LZ77編碼單元輸出的指回距離進(jìn)行動態(tài)Huffman編碼;一個動態(tài)碼字長度Huffman編碼單元,用于對動態(tài)新字符/匹配長度Huffman樹的信息及對動態(tài)指回距離Huffman樹的信息進(jìn)行編碼;一個靜態(tài)新字符/匹配長度Huffman編碼單元,用于對LZ77編碼單元輸出之后的新字符/匹配長度進(jìn)行靜態(tài)Huffman編碼;一個靜態(tài)指回距離Huffman編碼單元,用于對LZ77編碼單元輸出之后的指回距離進(jìn)行靜態(tài)Huffman編碼;—個數(shù)據(jù)打包單元,用于判斷采用直接存儲、靜態(tài)Huffman編碼以及動態(tài)Huffman編碼三種模式中的一種,并按照固定的格式進(jìn)行編碼輸出;一個輸出緩存單元,用于緩存數(shù)據(jù)打包單元輸出的壓縮之后的數(shù)據(jù)。優(yōu)選的,所述輸入緩存單元包括:兩個數(shù)據(jù)塊緩存單元,用于存放待壓縮的原始數(shù)據(jù);兩個數(shù)據(jù)選擇單元,用于控制數(shù)據(jù)塊緩存單元的讀寫控制權(quán)。優(yōu)選的,所述LZ77編碼單元包括:兩對Head/Prev Hash表,用于對LZ77編碼單元中編碼字符串的快速匹配查找;一個只讀存儲單元R0M,用于存放循環(huán)冗余校驗(yàn)碼CRC32校驗(yàn)計(jì)算時的常數(shù)表;一個新字符/匹配長度緩存單元,用于存放LZ77編碼單元輸出之后的新字符或者是匹配長度;一個指回距離緩存單元,用于存放LZ77編碼單元輸出之后的指回距離;一個主控狀態(tài)機(jī)單元,用于對數(shù)據(jù)塊緩存單元中的數(shù)據(jù)進(jìn)行數(shù)據(jù)讀取。優(yōu)選的,所述動態(tài)新字符/匹配長度Huffman編碼單元包括:一個新字符/匹配長度頻率緩存單元,用于存放LZ77編碼單元輸出之后新字符以及匹配長度的頻率;一個新字符/匹配長度父親節(jié)點(diǎn)緩存單元,用于存放新字符以及匹配長度Huffman樹中每一個節(jié)點(diǎn)的父親節(jié)點(diǎn),其中根節(jié)點(diǎn)除外;一個新字符/匹配長度深度緩存單元,用于存放新字符以及匹配長度Huffman樹中每一個節(jié)點(diǎn)在新字符以及匹配長度Huffman樹中的深度;一個新字符/匹配長度最小堆緩存單元,用于連續(xù)存放新字符以及匹配長度Huffman樹中所有的節(jié)點(diǎn);一個新字符/匹配長度碼字值緩存單元,用于存放新字符/匹配長度Huffman樹中所有的葉子節(jié)點(diǎn)對應(yīng)的Huffman編碼的值;一個新字符/匹配長度碼字長度緩存單元,用于存放新字符以及匹配長度Huffman樹中所有節(jié)點(diǎn)對應(yīng)的一個Huffman編碼的有效長度;3個數(shù)據(jù)選擇單元,分別用于控制新字符/匹配長度頻率緩存單元、新字符/匹配長度碼字值緩存單元、新字符/匹配長度碼字長度緩存單元的控制權(quán);一個流水線乘法器單元,用于輔助計(jì)算數(shù)據(jù)塊經(jīng)過動態(tài)新字符以及匹配長度Huffman編碼之后的大?。灰粋€主控狀態(tài)機(jī)單元,用來根據(jù)新字符/匹配長度頻率緩存單元中存放的待壓縮數(shù)據(jù)塊中每一個字符的頻率信息,利用新字符/匹配長度父親節(jié)點(diǎn)緩存單元、新字符/匹配長度深度緩存單元、新字符/匹配長度最小堆緩存單元去構(gòu)造Huffman樹,并將Huffman樹的信息存放在新字符/匹配長度最小堆緩存單元中,在得到新字符/匹配長度Huffman樹的信息之后,主控狀態(tài)機(jī)單元遍歷Huffman樹得出Huffman樹中每一個節(jié)點(diǎn)的碼字長度,并對該節(jié)點(diǎn)加以判斷;如果是葉子節(jié)點(diǎn),則所述主控狀態(tài)機(jī)單元繼續(xù)從新字符/匹配長度緩存單元中讀取該節(jié)點(diǎn)的頻率,并利用流水線乘法器單元去計(jì)算出當(dāng)前的這個字符經(jīng)過Huffman編碼之后的大小,再根據(jù)得出的Huffman樹中每一個節(jié)點(diǎn)的碼字長度去計(jì)算出Huffman樹中每一個節(jié)點(diǎn)的碼字值,主控狀態(tài)機(jī)單元對這些節(jié)點(diǎn)加以判斷,如果是葉子節(jié)點(diǎn)就將葉子節(jié)點(diǎn)的碼字值存放進(jìn)新字符/匹配長度碼字值緩存單元中。優(yōu)選的,所述動態(tài)指回距離Huffman編碼單元包括:一個指回距離頻率緩存單元,用于存放LZ77編碼單元輸出之后指回距離的頻率;一個指回距離父親節(jié)點(diǎn)緩存單元,用于存放指回距離Huffman樹中每一個節(jié)點(diǎn)的父親節(jié)點(diǎn),其中根節(jié)點(diǎn)除外;一個指回距離深度緩存單元,用于存放指回距離Huffman樹中每一個節(jié)點(diǎn)在指回距離Huffman樹中的深度;一個指回距離最小堆緩存單元,用于連續(xù)存放指回距離Huffman樹中所有的節(jié)
占.[0042]一個指回距離碼字值緩存單元,用于存放指回距離Huffman樹中所有的葉子節(jié)點(diǎn)對應(yīng)的Huffman編碼的值;一個指回距離碼字長度緩存單元,用于存放指回距離Huffman樹中所有節(jié)點(diǎn)對應(yīng)的Huffman編碼的有效長度;3個數(shù)據(jù)選擇單元,分別用于控制指回距離頻率緩存單元、指回距離碼字值緩存單元、指回距離碼字長度緩存單元的控制權(quán);一個流水線乘法器單元,用于輔助計(jì)算數(shù)據(jù)塊經(jīng)過動態(tài)指回距離Huffman編碼之后的大小;—個主控狀態(tài)機(jī)單元,用來根據(jù)指回距離頻率緩存單元中存放的待壓縮數(shù)據(jù)塊中每一個字符的頻率信息,并利用指回距離父親節(jié)點(diǎn)緩存單元、指回距離深度緩存單元、指回距離最小堆緩存單元去構(gòu)造Huffman樹,并將Huffman樹的信息存放在最小堆緩存單元中,在得到指回距離Huffman樹的信息之后,主控狀態(tài)機(jī)單元遍歷Huffman樹得出Huffman樹中每一個節(jié)點(diǎn)的碼字長度,并對該節(jié)點(diǎn)加以判斷,如果是葉子節(jié)點(diǎn),主控狀態(tài)機(jī)單元將從新字符/匹配長度緩存單元中讀取該節(jié)點(diǎn)的頻率,利用流水線乘法器單元去計(jì)算出當(dāng)前的這個字符經(jīng)過Huffman編碼之后的大小,再根據(jù)得出的Huffman樹中每一個節(jié)點(diǎn)的碼字長度去計(jì)算出Huffman樹中每一個節(jié)點(diǎn)的碼字值,主控狀態(tài)機(jī)單元對這些節(jié)點(diǎn)加以判斷,如果是葉子節(jié)點(diǎn)就將葉子節(jié)點(diǎn)的碼字值存放進(jìn)指回距離碼字值緩存單元中。優(yōu)選的,所述的動態(tài)碼字長度Huffman編碼單元包括:一個碼字長度數(shù)據(jù)統(tǒng)計(jì)單元,用于統(tǒng)計(jì)新字符/匹配長度碼字長度緩存單元和指回距離碼字長度緩存單元中每一種碼字長度出現(xiàn)的頻率;一個碼字長度頻率緩存單元,用于存放碼字長度數(shù)據(jù)統(tǒng)計(jì)單元統(tǒng)計(jì)的結(jié)果;—個碼字長度父親節(jié)點(diǎn)緩存單元,用于存放碼字長度Huffman樹中每一個節(jié)點(diǎn)的父親節(jié)點(diǎn);一個碼字長度深度緩存單元,用于存放碼字長度Huffman樹中每一個節(jié)點(diǎn)的深度;—個碼字長度小堆緩存單元,用于連續(xù)存放碼字長度Huffman樹中所有的節(jié)點(diǎn);—個碼字長度碼字值緩存單元,用于存放碼字長度Huffman樹中每一個葉子節(jié)點(diǎn)對應(yīng)的Huffman編碼的值;一個碼字長度的碼字長度緩存單元,用于存放碼字長度Huffman樹中所有節(jié)點(diǎn)對應(yīng)的Huffman編碼的碼字長度;一個碼字長度葉子節(jié)點(diǎn)緩存單元,用于存放對新字符/匹配長度碼字長度緩存單元和指回距離碼字長度緩存單元進(jìn)行遍歷之后得到的碼字長度的葉子節(jié)點(diǎn);一個碼字長度重復(fù)次數(shù)緩存單元,用于存放遍歷之后碼字長度的重復(fù)次數(shù);5個數(shù)據(jù)選擇單元,分別用于控制碼字長度頻率緩存單元、碼字長度碼字值緩存單元、碼字長度的碼字長度緩存單元、碼字長度葉子節(jié)點(diǎn)緩存單元、碼字長度重復(fù)次數(shù)緩存單元的控制權(quán);一個流水線乘法器單元,用于計(jì)算數(shù)據(jù)塊經(jīng)過動態(tài)碼字長度Huffman編碼之后的大??;一個碼字長度主控狀態(tài)機(jī),用于完成新字符/匹配長度碼字長度緩存單元和指回距離碼字長度緩存單元中遍歷所有葉子節(jié)點(diǎn)的碼字長度,并將統(tǒng)計(jì)的結(jié)果存放在碼字長度葉子節(jié)點(diǎn)緩存單元和碼字長度重復(fù)次數(shù)緩存單元中,將每一個葉子節(jié)點(diǎn)的頻率信息存放在碼字長度頻率緩存單元中。優(yōu)選的,所述的數(shù)據(jù)打包單元包括:讀取變長碼字單元,用于讀取LZ77編碼單元、動態(tài)新字符/匹配長度Huffman編碼單元、動態(tài)指回距離Huffman編碼單元和動態(tài)碼字長度Huffman編碼單元中相應(yīng)的信息;變長碼字打包單元,根據(jù)讀取變長碼字單元提供的信息從而獲知針對當(dāng)前數(shù)據(jù)塊所采用的壓縮模式。本實(shí)用新型的有益效果:本壓縮硬件系統(tǒng)及其加速方法可實(shí)現(xiàn)GZIP壓縮算法、做到軟件實(shí)現(xiàn)壓縮相兼容、提升GZIP壓縮的數(shù)據(jù)吞吐率,使得數(shù)據(jù)壓縮過程中無需CPU的干預(yù)。
附加的并且形成說明書一部分的附圖包括在本實(shí)用新型的特定方面的描寫中。本實(shí)用新型以及本實(shí)用新型提供的系統(tǒng)的模塊和流程的更清楚的概念,通過參考示例以及附圖中示出非限制性的實(shí)施例將更容易理解。通過參考一個或多個附圖結(jié)合本實(shí)用新型的描述可以更好的理解本實(shí)用新型。圖1示出本實(shí)用新型實(shí)施例提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)結(jié)構(gòu)圖;圖2示出本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的具體工作流程示意圖;圖3示出本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的一個實(shí)施例中寫入緩存單元的具體實(shí)施方式
的結(jié)構(gòu)示意圖;圖4示出本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的一個實(shí)施例中LZ77編碼單元的具體實(shí)施方式
的結(jié)構(gòu)示意圖;圖5示出本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的一個實(shí)施例中動態(tài)新字符/匹配長度Huffman編碼頻率統(tǒng)計(jì)控制單元的具體實(shí)施方式
的工作流程示意圖;圖6示出本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的一個實(shí)施例中動態(tài)指回距離Huffman編碼頻率統(tǒng)計(jì)控制單元的具體實(shí)施方式
的工作流程示意圖;[0071]圖7示出本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的一個實(shí)施例中動態(tài)新字符/匹配長度Huffman編碼單元的具體實(shí)施方式
的結(jié)構(gòu)示意圖;圖8示出本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的一個實(shí)施例中動態(tài)指回距離Huffman編碼單元的具體實(shí)施方式
的示意圖;圖9示出本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的一個實(shí)施例中動態(tài)碼字長度Huffman編碼單元的具體實(shí)施方式
的結(jié)構(gòu)示意圖;圖10示出本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的一個實(shí)施例中靜態(tài)新字符/匹配長度Huffman編碼單元的具體實(shí)施方式
的結(jié)構(gòu)示意圖;圖11示出本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的一個實(shí)施例中一個靜態(tài)指回距離Huffman編碼單元的具體實(shí)施方式
的結(jié)構(gòu)示意圖;圖12示出本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的一個實(shí)施例中數(shù)據(jù)打包單元的具體實(shí)施方式
的結(jié)構(gòu)示意圖;圖13示出本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的一個實(shí)施例中輸出緩存單元的具體實(shí)施方式
的結(jié)構(gòu)示意圖;圖14示出本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)加速方法中雙Head/Prev加速方法的具體實(shí)施方式
結(jié)構(gòu)示意圖;圖15示出本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)加速方法中雙Head/Prev加速方法的具體實(shí)施方式
的工作流程示意圖;圖16示出本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)加速方法中Huffman提前統(tǒng)計(jì)加速方法的具體實(shí)施方式
的結(jié)構(gòu)示意圖;圖17示出本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)加速方法中Huffman提前清空加速方法的具體實(shí)施方式
的工作流程示意圖;圖18示出本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)加速方法中CRC32穿插計(jì)算的具體實(shí)施方式
的工作流程示意圖。
具體實(shí)施方式
下面參照附圖用本實(shí)用新型的示例性實(shí)施例對本實(shí)用新型進(jìn)行更加全面的描述和說明。圖1示出本實(shí)用新型實(shí)施例提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)結(jié)構(gòu)圖。如圖1所示,本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)100主要包括:輸入緩存單元101、新字符/匹配長度頻率統(tǒng)計(jì)控制單元102、指回距離頻率統(tǒng)計(jì)控制單元103、LZ77編碼單元104、動態(tài)新字符/匹配長度Huffman編碼單元105、動態(tài)指回距離Huffman編碼單元106、靜態(tài)新字符/匹配長度Huffman編碼單元107、靜態(tài)指回距離Huffman編碼單元108、動態(tài)碼字長度Huffman編碼單元109、數(shù)據(jù)打包單元110、輸出緩存單元111。其中,輸入緩存單元101,用于對待壓縮的數(shù)據(jù)進(jìn)行緩存,尤其是,原始數(shù)據(jù)經(jīng)過數(shù)據(jù)緩存單元中兩個數(shù)據(jù)存儲單元可是實(shí)現(xiàn)數(shù)字電路設(shè)計(jì)中提升數(shù)據(jù)吞吐率的乒乓操作。新字符/匹配長度頻率統(tǒng)計(jì)控制單元102,主要是用于接收從LZ77編碼單元104中輸出的新字符/匹配長度,并作出進(jìn)一步的判斷,如果是新字符則之直接輸出。否則,就是匹配長度,此時,新字符/匹配長度頻率統(tǒng)計(jì)單元102從動態(tài)新字符/匹配長度Huffman樹字符表將匹配長度映射到相應(yīng)的范圍再輸出。指回距離頻率統(tǒng)計(jì)控制單元103,主要是用于接收從LZ77編碼單元104中輸出的指回距離,并查詢動態(tài)指回距離Huffman樹字符表將指回距離映射到相應(yīng)的范圍再輸出。LZ77編碼單元104,首先,主要是用于對輸入緩存單元101中的數(shù)據(jù)進(jìn)行LZ77編碼,并把編碼的結(jié)果分別輸出到新字符/匹配長度頻率統(tǒng)計(jì)控制單元102及指回距離頻率統(tǒng)計(jì)控制單元103。其次,LZ77編碼單元104是要完成對原始數(shù)據(jù)的CRC32校驗(yàn)計(jì)算,并把計(jì)算的結(jié)果反饋給數(shù)據(jù)打包單元HO。動態(tài)新字符/匹配長度Huffman編碼單元105,主要是用于對LZ77編碼單元104輸出的新字符/匹配長度進(jìn)行動態(tài)Huffman編碼。動態(tài)指回距離Huffman編碼單元106,主要是用于對LZ77編碼單元104輸出的指回距離進(jìn)行動態(tài)Huffman編碼。靜態(tài)字符/匹配長度Huffman編碼單元107,主要用于對LZ77編碼單元104輸出的新字符/匹配長度進(jìn)行靜態(tài)Huffman編碼。例如,在某些特殊的數(shù)據(jù)壓縮場合之下,如音視頻領(lǐng)域中,數(shù)據(jù)的統(tǒng)計(jì)特性變化范圍很小。因此,為了提升Huffman編碼的速度,需要對這些統(tǒng)計(jì)特性變化很小的數(shù)據(jù)提前做好Huffman編碼,并將Huffman編碼的結(jié)果固化在ROM中,在實(shí)際中,即使數(shù)據(jù)的統(tǒng)計(jì)特性有些波動影響到一些壓縮率,但是壓縮的速度卻得以顯著性的提升。靜態(tài)指回距離Huffman編碼單元108,主要是用于對LZ77編碼單元的輸出的指回距尚進(jìn)行靜態(tài)Huffman編碼。動態(tài)碼字長度Huffman編碼單元109,主要是用于對動態(tài)新字符/匹配長度Huffman編碼的碼字長度信息和動態(tài)指回距離Huffman編碼的碼字長度信息進(jìn)行動態(tài)Huffman編碼,以此來減小動態(tài)Huffman編碼時樹的信息以提升數(shù)據(jù)的壓縮率。數(shù)據(jù)打包單元110,根據(jù)LZ77編碼單元104給出的原始數(shù)據(jù)的大小,動態(tài)新字符/匹配長度Huffman編碼單元105、動態(tài)指回距離Huffman編碼單元106、動態(tài)碼字長度Huffman編碼單元109給出的對原始數(shù)據(jù)塊采用動態(tài)Huffman編碼之后的大小,靜態(tài)新字符/匹配長度Huffman編碼單元107、靜態(tài)指回距離Huffman編碼單元108給出的對原始數(shù)據(jù)塊進(jìn)行靜態(tài)Huffman編碼之后的大小來決定采用的直接存儲、動態(tài)Huffman編碼、靜態(tài)Huffman編碼三種壓縮模式中的一種對待壓縮數(shù)據(jù)塊進(jìn)行壓縮。輸出緩存單元111,主要是用于接收來自數(shù)據(jù)打包單元110輸出的壓縮之后的數(shù)據(jù)。圖2示出本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的具體工作流程。如圖2所示,本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的具體工作流程200主要包括:步驟201,填充輸入緩存單元中的一個數(shù)據(jù)緩存單元。用來接收待壓縮的原始數(shù)據(jù),如果原始數(shù)據(jù)可以分割成多個數(shù)據(jù)塊,則交替使用輸入數(shù)據(jù)緩存單元中兩個數(shù)據(jù)存儲單元,使得數(shù)據(jù)的傳輸和數(shù)據(jù)的處理并行的進(jìn)行,以此來提升數(shù)據(jù)的吞吐率,填滿之后進(jìn)入步驟202。步驟202,通知GZIP壓縮單元中的LZ77編碼單元數(shù)據(jù)已經(jīng)填滿。LZ77編碼單元在接收到這個信息之后開始選擇輸入緩存單元中相應(yīng)的數(shù)據(jù)緩存單元,進(jìn)入步驟203。[0101]步驟203,LZ77工作。LZ77在獲得輸入緩存單元中相應(yīng)的數(shù)據(jù)緩存單元的控制權(quán)之后開始工作,并對當(dāng)前的數(shù)據(jù)塊進(jìn)行CRC32校驗(yàn)計(jì)算,進(jìn)入步驟204。步驟204,判斷LZ77工作是否完成。如果LZ77編碼工作尚未完成就繼續(xù)進(jìn)行LZ77編碼工作,進(jìn)入步驟203,否則就開始準(zhǔn)備啟動后續(xù)的工作單元進(jìn)入步驟205。步驟205,動態(tài)新字符/匹配長度Huffman編碼單元和動態(tài)指回距離Huffman編碼單元開始工作。LZ77編碼單元結(jié)束之后,就開始啟動動態(tài)新字符/匹配長度Huffman編碼單元對LZ77編碼輸出的新字符/匹配長度進(jìn)行動態(tài)Huffman編碼;同時,啟動動態(tài)指回距離Huffman編碼單元對LZ77編碼輸出的指回距離進(jìn)行動態(tài)Huffman編碼,接著進(jìn)入步驟206。步驟206,判斷動態(tài)新字符/匹配長度Huffman編碼單元和指回距離Huffman編碼單元工作是否結(jié)束。如果沒有結(jié)束就繼續(xù)進(jìn)行動態(tài)Huffman編碼的過程205,否則,就準(zhǔn)備進(jìn)入步驟207。步驟207,動態(tài)碼字長度Huffman編碼單元開始工作。如果動態(tài)新字符/匹配長度Huffman編碼單元和動態(tài)指回距離Huffman編碼單元都結(jié)束,則動態(tài)碼字長度Huffman編碼單元開始工作,進(jìn)入步驟208。步驟208,判斷動態(tài)碼字長度Huffman編碼單元工作是否結(jié)束。如果沒有結(jié)束,繼續(xù)進(jìn)行動態(tài)碼字長度Huffman編碼過程,否則,就進(jìn)入步驟209。步驟209,啟動數(shù)據(jù)打包單元。在動態(tài)碼字長度Huffman編碼單元工作結(jié)束之后,數(shù)據(jù)打包單元開始啟動,并根據(jù)LZ77編碼單元給出的結(jié)果、動態(tài)新字符/匹配長度Huffman編碼單元給出的結(jié)果、動態(tài)指回距離Huffman編碼單元給出的結(jié)果、動態(tài)碼字長度Huffman編碼單元給出的結(jié)果進(jìn)行判斷,選擇直接存儲、動態(tài)Huffman編碼、靜態(tài)Huffman編碼三種壓縮模式中的一種對當(dāng)前的數(shù)據(jù)塊進(jìn)行壓縮,當(dāng)前數(shù)據(jù)塊編碼完成之后直接進(jìn)入步驟210。步驟210,判斷當(dāng)前處理的數(shù)據(jù)塊是不是最后一個數(shù)據(jù)塊。如果是最后一個數(shù)據(jù)塊,就表示數(shù)據(jù)壓縮完畢,否則進(jìn)入步驟201開始處理下一個數(shù)據(jù)塊。由此可見,原始待壓縮的數(shù)據(jù)是分割成多個數(shù)據(jù)塊進(jìn)行壓縮的,從而使得乒乓操作的實(shí)現(xiàn)成為可能。圖3示出本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的一個實(shí)施例中寫入緩存單元的具體實(shí)施方式
的結(jié)構(gòu)示意圖。如圖3所示,本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的一個實(shí)施例中寫入緩存單元300的具體實(shí)施方式
的結(jié)構(gòu)進(jìn)一步包括:數(shù)據(jù)選擇單元301、數(shù)據(jù)緩存單元302、數(shù)據(jù)緩存單元303、數(shù)據(jù)選擇單元304。如圖3所示,其中數(shù)據(jù)選擇單元301,主要是用于控制數(shù)據(jù)緩存單元302和數(shù)據(jù)緩存單元303中的一個進(jìn)行數(shù)據(jù)填充。數(shù)據(jù)緩存單元302和數(shù)據(jù)緩存單元303,主要是用于緩存待壓縮的數(shù)據(jù),實(shí)際工作時,一個數(shù)據(jù)緩存單元用來進(jìn)行數(shù)據(jù)編碼,另一個數(shù)據(jù)緩存單元用來進(jìn)行數(shù)據(jù)的填充,使得數(shù)據(jù)的填充和數(shù)據(jù)的編碼并行的進(jìn)行。數(shù)據(jù)選擇單元304,主要是用于選擇數(shù)據(jù)緩存單元302和數(shù)據(jù)緩存單元303中的一個來進(jìn)行數(shù)據(jù)的編碼處理。圖4示出本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的一個實(shí)施例中LZ77編碼單元的具體實(shí)施方式
的結(jié)構(gòu)示意圖。如圖4所示,本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的一個實(shí)施例中LZ77編碼單元的具體實(shí)施方式
的結(jié)構(gòu)400進(jìn)一步包括:Headl Hash查找表401、Prevl Hash查找表402、Head2 Hash查找表403、Prev2 Hash查找表404、LZ77主控狀態(tài)機(jī)單元405、ROM查找表406、新字符/匹配長度緩存單元407、指回距離緩存單元408。其中,HeadlHash 查找表 401、Prevl Hash 查找表 402、Head2 Hash 查找表 403、Prev2 Hash查找表404,主要是被LZ77主控狀態(tài)機(jī)單元405用作Hash表進(jìn)行快速的匹配字符搜索。LZ77 主控狀態(tài)機(jī)單元 405,主要利用 Headl Hash 表 401、PrevI Hash402 表、Head2Hash表403、Prev2 Hash表404完成對原始數(shù)據(jù)塊的LZ77編碼過程,并完成對原始數(shù)據(jù)塊的CRC32校驗(yàn)過程并統(tǒng)計(jì)出原始文件的大小,LZ77主控狀態(tài)機(jī)也為動態(tài)新字符/匹配長度Huffman編碼單元、動態(tài)指回距離Huffman編碼單元及數(shù)據(jù)打包單元提供必要的信息,主要包括CRC32校驗(yàn)的結(jié)果、原始數(shù)據(jù)塊的大小、待壓縮文件的大小。ROM查找表單元406,在LZ77主控狀態(tài)機(jī)單元405對原始數(shù)據(jù)塊CRC32校驗(yàn)時,需要利用ROM中固化的數(shù)據(jù)進(jìn)行計(jì)算。新字符/匹配長度緩存單元407,主要用于存放LZ77對原始數(shù)據(jù)進(jìn)行編碼輸出的新字符或者是匹配長度。指回距離緩存單元408,主要用于存放LZ77對原始數(shù)據(jù)進(jìn)行編碼輸出的指回距離。圖5示出本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的一個實(shí)施例中動態(tài)新字符/匹配長度Huffman編碼頻率統(tǒng)計(jì)控制單元的具體實(shí)施方式
的工作流程示意圖。如圖5所示,本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的一個實(shí)施例中動態(tài)新字符/匹配長度Huffman編碼頻率統(tǒng)計(jì)控制單元的具體實(shí)施方式
的工作流程500進(jìn)一步包括:步驟501,動態(tài)新字符/匹配長度Huffman編碼頻率統(tǒng)計(jì)控制單元的主控狀態(tài)機(jī)從LZ77編碼模塊中接收一個新字符/匹配長度,進(jìn)入步驟502。步驟502,動態(tài)新字符/匹配長度Huffman編碼頻率統(tǒng)計(jì)控制單元的主控狀態(tài)機(jī)對接收到的這個新字符/匹配長度進(jìn)行判斷,如果接收到的是匹配長度進(jìn)入步驟503,否則進(jìn)入步驟504。步驟503,將接收到的匹配長度查詢動態(tài)新字符/匹配長度Huffman樹字符表,將接收到的匹配長度映射到動態(tài)新字符/匹配長度Huffman樹字符表中對應(yīng)的葉子節(jié)點(diǎn),進(jìn)入步驟504。步驟504,動態(tài)新字符/匹配長度Huffman編碼頻率統(tǒng)計(jì)控制單元的主控狀態(tài)機(jī)將新字符/匹配長度頻率緩存單元中對應(yīng)的節(jié)點(diǎn)單元加I,進(jìn)入步驟505。步驟505,判斷工作是否結(jié)束,如果沒有結(jié)束就進(jìn)入步驟501繼續(xù)準(zhǔn)備接收下一個字符,否則就進(jìn)入結(jié)束狀態(tài)。圖6示出本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的一個實(shí)施例中動態(tài)指回距離Huffman編碼頻率統(tǒng)計(jì)控制單元的具體實(shí)施方式
的工作流程示意圖。如圖6所示,本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的一個實(shí)施例中動態(tài)指回距離Huffman編碼頻率統(tǒng)計(jì)控制單元的具體實(shí)施方式
的工作流程600進(jìn)一步包括:步驟601,動態(tài)指回距離Huffman編碼頻率統(tǒng)計(jì)控制單元的主控狀態(tài)機(jī)從LZ77編碼單元中接收一個指回距離,進(jìn)入步驟602。前提是LZ77編碼單元此時發(fā)現(xiàn)了匹配字符串,并輸出了指回距離,否則該模塊不工作。步驟602,將接收到的指回距離用作索引查詢動態(tài)指回距離Huffman樹字符表,將指回距離映射到動態(tài)指回距離Huffman樹字符表中的葉子節(jié)點(diǎn),進(jìn)入步驟603。步驟603,動態(tài)指回距離Huffman編碼頻率統(tǒng)計(jì)控制單元的主控狀態(tài)機(jī)將指回距離頻率緩存單元中對應(yīng)的單元加1,進(jìn)入步驟604。步驟604,判斷工作過程是否結(jié)束,如果沒有結(jié)束就進(jìn)入步驟601開始接收下一個LZ77編碼單元輸出的指回距離,否則就進(jìn)入結(jié)束狀態(tài)。圖7示出本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的一個實(shí)施例中動態(tài)新字符/匹配長度Huffman編碼單元的具體實(shí)施方式
的結(jié)構(gòu)示意圖。如圖7所示,本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的一個實(shí)施例中動態(tài)新字符/匹配長度Huffman編碼單元的具體實(shí)施方式
的結(jié)構(gòu)700進(jìn)一步包括:數(shù)據(jù)選擇單元701,用來控制新字符/匹配長度頻率緩存單元702的控制權(quán),在字符的統(tǒng)計(jì)階段,數(shù)據(jù)選擇單元701選擇動態(tài)新字符/匹配長度Huffman頻率統(tǒng)計(jì)單元去控制新字符/匹配長度頻率緩存單元702 ;在構(gòu)建Huffman樹階段,數(shù)據(jù)選擇單元701選擇動態(tài)新字符/匹配長度Huffman編碼主控狀態(tài)機(jī)單元707去控制新字符/匹配長度頻率緩存單元702。新字符/匹配長度頻率緩存單元702,用來存放動態(tài)新字符/匹配長度Huffman樹中每一個節(jié)點(diǎn)的頻率,包括葉子節(jié)點(diǎn)、中間節(jié)點(diǎn)和根節(jié)點(diǎn)。數(shù)據(jù)選擇單元703,用來控制新字符/匹配長度碼字長度緩存單元704的控制權(quán)。在構(gòu)建Huffman樹的過程中,數(shù)據(jù)選擇單元703選擇動態(tài)新字符/匹配長度Huffman編碼主控狀態(tài)機(jī)707去控制新字符/匹配長度碼字長度緩存單元704 ;在Huffman樹、Huffman表構(gòu)建完畢數(shù)據(jù)選擇單元703選擇數(shù)據(jù)打包單元去控制新字符/匹配長度碼字長度緩存單元 704。新字符/匹配長度碼字長度緩存單元704,主要用來存放動態(tài)新字符/匹配長度Huffman樹中每一個節(jié)點(diǎn)的碼字長度。數(shù)據(jù)選擇單元705,主要是用來控制新字符/匹配長度碼字值緩存單元706的控制權(quán)。在構(gòu)建Huffman樹的過程中,數(shù)據(jù)選擇單元705選擇新字符/匹配長度Huffman編碼主控狀態(tài)機(jī)去控制碼字值緩存單元706,在得到碼字長度及碼字值之后,數(shù)據(jù)選擇單元去選擇數(shù)據(jù)打包單元去控制新字符/匹配長度碼字值緩存單元706。新字符/匹配長度碼字值緩存單元706,主要是用來存放新字符/匹配長度Huffman樹中每一個葉子節(jié)點(diǎn)的碼字值。動態(tài)新字符/匹配長度Huffman編碼主控狀態(tài)機(jī)單元707,在新字符/匹配長度頻率緩存單元702中得到Huffman樹中每一個葉子的頻率之后,動態(tài)新字符/匹配長度Huffman主控狀態(tài)機(jī)單元707根據(jù)新字符/匹配長度頻率緩存單元中存放的每一個字符頻率,并利用新字符/匹配長度最小堆緩存單元709、新字符/匹配長度深度緩存單元710、新字符/匹配長度父親節(jié)點(diǎn)緩存單元711去構(gòu)建Huffman樹,并計(jì)算出Huffman表,在這個過程中動態(tài)新字符/匹配長度Huffman編碼主控狀態(tài)機(jī)單元707還利用新字符/匹配長度頻率緩存單元702中存放的每一個字符的頻率信息和流水線乘法器單元708去計(jì)算待壓縮數(shù)據(jù)經(jīng)過動態(tài)新字符/匹配長度Huffman編碼之后的大小。流水線乘法器單元708,動態(tài)新字符/匹配長度主控狀態(tài)機(jī)單元707主要用流水線乘法器單元708來計(jì)算存放在新字符/匹配長度頻率緩存單元702中字符出現(xiàn)的頻率和新字符/匹配長度碼字長度緩存單元706中對應(yīng)的Huffman編碼的碼字長度的乘法計(jì)算。新字符/匹配長度最小堆緩存單元709,新字符/匹配長度最小堆緩存單元709前半部分主要用來維護(hù)新字符/匹配長度頻率緩存單元702中出現(xiàn)的字符,使得這些字符在物理上呈現(xiàn)連續(xù)存儲,在邏輯上構(gòu)成一棵二叉樹,并且這棵二叉樹滿足:左節(jié)點(diǎn)和右節(jié)點(diǎn)大于或者等于本節(jié)點(diǎn),其中葉子節(jié)點(diǎn)除外。新字符/匹配長度最小堆緩存單元709的后半部分主要是用來存放新字符/匹配長度Huffman樹。新字符/匹配長度深度緩存單元710,主要是用來存放新字符/匹配長度Huffman樹中每一個節(jié)點(diǎn)的深度,其中根節(jié)點(diǎn)的深度最大,葉子節(jié)點(diǎn)的深度是O。新字符/匹配長度父親節(jié)點(diǎn)緩存單元711,主要是用來存放新字符/匹配長度Huf fman樹中每一個節(jié)點(diǎn)的父親節(jié)點(diǎn),其中根節(jié)點(diǎn)除外。在新字符/匹配長度Huffman工作結(jié)束,在新字符/匹配長度碼字長度緩存單元704和碼字值緩存單元706中得到了每一個葉子節(jié)點(diǎn)的碼字長度和碼字值,Huffman工作結(jié)束,此時新字符/匹配長度Huffman編碼單元就把新字符/匹配長度碼字長度緩存單元704和碼字值緩存單元706的控制權(quán)交給數(shù)據(jù)打包單元。圖8示出本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的一個實(shí)施例中動態(tài)指回距離Huffman編碼單元的具體實(shí)施方式
的結(jié)構(gòu)示意圖。如圖8所示,本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的一個實(shí)施例中動態(tài)指回距離Huffman編碼單元的具體實(shí)施方式
的結(jié)構(gòu)800進(jìn)一步包括:數(shù)據(jù)選擇單元801,用來控制指回距離頻率緩存單元802的控制權(quán),在字符的統(tǒng)計(jì)階段,數(shù)據(jù)選擇單元801選擇動態(tài)指回距離Huffman頻率統(tǒng)計(jì)單元去控制指回距離頻率緩存單元802 ;在構(gòu)建Huffman樹階段,數(shù)據(jù)選擇單元801選擇動態(tài)指回距離Huffman編碼主控狀態(tài)機(jī)單元807去控制指回距離頻率緩存單元802。指回距離頻率緩存單元802,用來存放動態(tài)指回距離Huffman樹中每一個節(jié)點(diǎn)的頻率,包括葉子節(jié)點(diǎn)、中間節(jié)點(diǎn)和根節(jié)點(diǎn)。數(shù)據(jù)選擇單元803,用來控制指回距離碼字長度緩存單元804的控制權(quán)。在構(gòu)建Huffman樹的過程中,數(shù)據(jù)選擇單元803選擇動態(tài)指回距離Huffman編碼主控狀態(tài)機(jī)807去控制指回距離碼字長度緩存單元804 ;在Huffman樹、Huffman表構(gòu)建完畢數(shù)據(jù)選擇單元803選擇數(shù)據(jù)打包單元去控制指回距離碼字長度緩存單元804。指回距離碼字長度緩存單元804,主要用來存放動態(tài)指回距離Huffman樹中每一個節(jié)點(diǎn)的碼字長度。數(shù)據(jù)選擇單元805,主要是用來控制指回距離碼字值緩存單元806的控制權(quán)。在構(gòu)建Huffman樹的過程中,數(shù)據(jù)選擇單元805選擇指回距離Huffman編碼主控狀態(tài)機(jī)去控制碼字值緩存單元806,在得到碼字長度及碼字值之后,數(shù)據(jù)選擇單元805選擇數(shù)據(jù)打包單元去控制指回距離碼字值緩存單元806。[0156]指回距離碼字值緩存單元806,主要是用來存放指回距離Huffman樹中每一個葉子節(jié)點(diǎn)的碼字值。動態(tài)指回距離Huffman編碼主控狀態(tài)機(jī)單元807,在指回距離頻率緩存單元802中得到Huffman樹中每一個葉子的頻率之后,動態(tài)指回距離Huffman主控狀態(tài)機(jī)單元807根據(jù)指回距離頻率緩存單元中存放的每一個字符頻率,并利用指回距離最小堆緩存單元809、指回距離深度緩存單元810、指回距離父親節(jié)點(diǎn)緩存單元811去構(gòu)建Huffman樹,并計(jì)算出Huffman表,在這個過程中動態(tài)指回距離Huffman編碼主控狀態(tài)機(jī)單元807還利用指回距離頻率緩存單元802中存放的每一個字符的頻率信息和流水線乘法器單元808去計(jì)算待壓縮數(shù)據(jù)經(jīng)過動態(tài)指回距離Huffman編碼之后的大小。流水線乘法器單元808,動態(tài)指回距離主控狀態(tài)機(jī)單元807主要用流水線乘法器單元808來計(jì)算存放在指回距離頻率緩存單元802中字符出現(xiàn)的頻率和指回距離碼字長度緩存單元806中對應(yīng)的Huffman編碼的碼字長度的乘法計(jì)算。指回距離最小堆緩存單元809,指回距離最小堆緩存單元809前半部分主要用來維護(hù)指回距離頻率緩存單元802中出現(xiàn)的字符,使得這些字符在物理上呈現(xiàn)連續(xù)存儲,在邏輯上構(gòu)成一棵二叉樹,并且這棵二叉樹滿足:左節(jié)點(diǎn)和右節(jié)點(diǎn)大于或者等于本節(jié)點(diǎn),其中葉子節(jié)點(diǎn)除外。指回距離最小堆緩存單元809的后半部分主要是用來存放指回距離Huffman 樹。指回距離深度緩存單元810,主要是用來存放指回距離Huffman樹中每一個節(jié)點(diǎn)的深度,其中根節(jié)點(diǎn)的深度最大,葉子節(jié)點(diǎn)的深度是O。指回距離父親節(jié)點(diǎn)緩存單元811,主要是用來存放指回距離Huffman樹中每一個節(jié)點(diǎn)的父親節(jié)點(diǎn),其中根節(jié)點(diǎn)除外。在指回距離Huffman工作結(jié)束,在指回距離碼字長度緩存單元804和碼字值緩存單元806中得到了每一個葉子節(jié)點(diǎn)的碼字長度和碼字值,Huffman工作結(jié)束,此時指回距離Huffman編碼單元就把指回距離碼字長度緩存單元804和碼字值緩存單元806的控制權(quán)交給數(shù)據(jù)打包單元。圖9示出本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的一個實(shí)施例中動態(tài)碼字長度Huffman編碼單元的具體實(shí)施方式
的結(jié)構(gòu)示意圖。如圖9所示,本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的一個實(shí)施例中動態(tài)碼字長度Huffman編碼單元的具體實(shí)施方式
的結(jié)構(gòu)900進(jìn)一步包括:碼字長度數(shù)據(jù)統(tǒng)計(jì)單元901,主要是用來從圖7中新字符/匹配長度碼字長度緩存單元704和圖8中指回距離碼字長度緩存單元804中讀取每一個葉子節(jié)點(diǎn)的碼字長度,并進(jìn)行統(tǒng)計(jì)。數(shù)據(jù)選擇單元902,用來控制碼字長度頻率緩存單元903的控制權(quán),在字符的統(tǒng)計(jì)階段,數(shù)據(jù)選擇單元902選擇碼字長度數(shù)據(jù)統(tǒng)計(jì)單元901去控制碼字長度頻率緩存單元903 ;在構(gòu)建Huffman樹階段,數(shù)據(jù)選擇單元902選擇動態(tài)碼字長度Huffman編碼主控狀態(tài)機(jī)單元910去控制碼字長度頻率緩存單元903。碼字長度頻率緩存單元903,用來存放動態(tài)碼字長度Huffman樹中每一個節(jié)點(diǎn)的頻率,包括葉子節(jié)點(diǎn)、中間節(jié)點(diǎn)和根節(jié)點(diǎn)。數(shù)據(jù)選擇單元904,用來控制碼字長度的碼字長度緩存單元905的控制權(quán)。在構(gòu)建Huffman樹的過程中,數(shù)據(jù)選擇單元904選擇動態(tài)碼字長度Huffman編碼主控狀態(tài)機(jī)910去控制碼字長度的碼字長度緩存單元905 ;在Huffman樹、Huffman表構(gòu)建完畢數(shù)據(jù)選擇單元904選擇數(shù)據(jù)打包單元去控制碼字長度的碼字長度緩存單元905。碼字長度的碼字長度緩存單元905,主要用來存放動態(tài)碼字長度Huffman樹中每一個節(jié)點(diǎn)的碼字長度。數(shù)據(jù)選擇單元906,主要是用來控制碼字長度碼字值緩存單元907的控制權(quán)。在構(gòu)建Huffman樹的過程中,數(shù)據(jù)選擇單元906選擇碼字長度Huffman編碼主控狀態(tài)機(jī)單元910去控制碼字長度碼字值緩存單元907,在得到碼字長度及碼字值之后,數(shù)據(jù)選擇單元906選擇數(shù)據(jù)打包單元去控制碼字長度碼字值緩存單元907。碼字長度碼字值緩存單元907,主要是用來存放碼字長度Huffman樹中每一個葉子節(jié)點(diǎn)的碼字值。數(shù)據(jù)選擇單元908,主要是用來選擇碼字長度葉子節(jié)點(diǎn)緩存單元909的控制權(quán),在數(shù)據(jù)統(tǒng)計(jì)階段,數(shù)據(jù)選擇單元908選擇動態(tài)碼字長度Huffman編碼主控狀態(tài)機(jī)單元910去控制碼字長度葉子節(jié)點(diǎn)緩存單元;在得到碼字長度的碼字長度及碼字長度的碼字值之后,數(shù)據(jù)選擇單元908選擇數(shù)據(jù)打包單元去控制碼字長度葉子節(jié)點(diǎn)緩存單元909。碼字長度葉子節(jié)點(diǎn)緩存單元909,主要是用來存放碼字長度Huffman樹中所有的葉子節(jié)點(diǎn)。動態(tài)碼字長度Huffman編碼主控狀態(tài)機(jī)單元910,在碼字長度頻率緩存單元903中得到Huffman樹中每一個葉子的頻率之后,動態(tài)碼字長度Huffman主控狀態(tài)機(jī)單元910根據(jù)碼字長度頻率緩存單元903中存放的每一個字符頻率,并利用碼字長度最小堆緩存單元912、碼字長度深度緩存單元913、碼字長度父親節(jié)點(diǎn)緩存單元914去構(gòu)建Huffman樹,并計(jì)算出Huffman表,在這個過程中動態(tài)碼字長度Huffman編碼主控狀態(tài)機(jī)單元910還利用碼字長度頻率緩存單元903中存放的每一個字符的頻率信息和流水線乘法器單元911去計(jì)算待壓縮數(shù)據(jù)經(jīng)過動態(tài)碼字長度Huffman編碼之后的大小。流水線乘法器單元911,動態(tài)碼字長度主控狀態(tài)機(jī)單元910主要用流水線乘法器單元911來計(jì)算存放在碼字長度頻率緩存單元903中字符出現(xiàn)的頻率和碼字長度的碼字長度緩存單元905中對應(yīng)的Huffman編碼的碼字長度的乘法計(jì)算。碼字長度最小堆緩存單元912,碼字長度最小堆緩存單元912前半部分主要用來維護(hù)碼字長度頻率緩存單元903中出現(xiàn)的字符,使得這些字符在物理上呈現(xiàn)連續(xù)存儲,在邏輯上構(gòu)成一棵二叉樹,并且這棵二叉樹滿足:左節(jié)點(diǎn)和右節(jié)點(diǎn)大于或者等于本節(jié)點(diǎn),其中葉子節(jié)點(diǎn)除外。碼字長度最小堆緩存單元912的后半部分主要是用來存放碼字長度Huffman 樹。碼字長度深度緩存單元913,主要是用來存放碼字長度Huffman樹中每一個節(jié)點(diǎn)的深度,其中根節(jié)點(diǎn)的深度最大,葉子節(jié)點(diǎn)的深度是O。碼字長度父親節(jié)點(diǎn)緩存單元914,主要是用來存放碼字長度Huffman樹中每一個節(jié)點(diǎn)的父親節(jié)點(diǎn),其中根節(jié)點(diǎn)除外。數(shù)據(jù)選擇單元915,主要是用來控制碼字長度重復(fù)次數(shù)緩存單元916的控制權(quán),在構(gòu)造Huffman樹的過程中,數(shù)據(jù)選擇單元915選擇碼字長度Huffman編碼主控狀態(tài)機(jī)單元910去控制碼字長度重復(fù)次數(shù)緩存單元916,在碼字長度Huffman樹及碼字長度Huffman表構(gòu)建完畢,數(shù)據(jù)選擇單元915選擇數(shù)據(jù)打包單元去控制碼字長度重復(fù)次數(shù)緩存單元。碼字長度重復(fù)次數(shù)緩存單元916,主要是用來存放碼字長度Huffman樹中每一個葉子節(jié)點(diǎn)的重復(fù)次數(shù)。在碼字長度Huffman工作結(jié)束,在碼字長度的碼字長度緩存單元905和碼字值緩存單元907中得到了每一個葉子節(jié)點(diǎn)的碼字長度和碼字值,Huffman工作結(jié)束,此時碼字長度Huffman編碼單元就把碼字長度的碼字長度緩存單元905和碼字值緩存單元907的控制權(quán)交給數(shù)據(jù)打包單元。圖10示出本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的一個實(shí)施例中靜態(tài)新字符/匹配長度Huffman編碼單元的具體實(shí)施方式
的結(jié)構(gòu)示意圖。如圖10所示,本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的一個實(shí)施例中靜態(tài)新字符/匹配長度Huffman編碼單元的具體實(shí)施方式
的結(jié)構(gòu)1000進(jìn)一步包括:數(shù)據(jù)打包單元1001,主要完成對LZ77編碼單元中存放在新字符/匹配長度緩存單元中的新字符/匹配長度進(jìn)行靜態(tài)Huffman編碼。靜態(tài)新字符/匹配長度碼字長度常數(shù)表單元1002,主要用來存放新字符/匹配長度對應(yīng)的Huffman編碼的碼字長度,設(shè)計(jì)中可以使用R0M,即只讀存儲器去加以實(shí)現(xiàn)。靜態(tài)新字符/匹配長度碼字值緩存單元1003,主要是用來存放新字符/匹配長度對應(yīng)的Huffman編碼的碼字值,設(shè)計(jì)中可以使用R0M,即只讀存儲器加以實(shí)現(xiàn)。流水線乘法器單元1004,主要是用來計(jì)算對存放在LZ77編碼單元中新字符/匹配長度緩存單元中的新字符/匹配長度進(jìn)行靜態(tài)Huffman編碼之后數(shù)據(jù)的大小。在圖10中,Literal_length[8:0]是讀取的新字符或者是匹配長度,Code [8:0] >CodeJength [3:0]分別是用來輸出新字符或者是匹配長度對應(yīng)的靜態(tài)Huffman碼字值和碼字長度,Static_literal_length[31:0]主要是輸出待壓縮數(shù)據(jù)經(jīng)過靜態(tài)新字符/匹配長度Huffman編碼之后的大小。圖11示出本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的一個實(shí)施例中靜態(tài)指回距離Huffman編碼單元的具體實(shí)施方式
的結(jié)構(gòu)示意圖。如圖11所示,本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的一個實(shí)施例中靜態(tài)指回距離Huffman編碼單元的具體實(shí)施方式
的結(jié)構(gòu)1100進(jìn)一步包括:數(shù)據(jù)打包單元1101,主要完成對LZ77編碼單元中存放在指回距離緩存單元中的指回距離進(jìn)行靜態(tài)Huffman編碼。靜態(tài)指回距離碼字值緩存單元1102,主要是用來存放指回距離對應(yīng)的Huffman編碼的碼字值,設(shè)計(jì)中可以使用R0M,即只讀存儲器加以實(shí)現(xiàn)。流水線乘法器單元1103,主要是用來計(jì)算對存放在LZ77編碼單元中指回距離緩存單元中的指回距離進(jìn)行靜態(tài)指回距離Huffman編碼之后數(shù)據(jù)的大小。在圖11 中,Distance[14:0]是讀取的指回距離,Code[4:0],Code_length[2:0]分別是用來輸出指回距離對應(yīng)的靜態(tài)Huffman碼字值和碼字長度,在靜態(tài)指回距離Huffman編碼中碼字長度固定為5比特位寬,Static_literal_length[31:0]主要是輸出待壓縮數(shù)據(jù)經(jīng)過靜態(tài)指回距離Huffman編碼之后的大小。圖12示出本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的一個實(shí)施例中數(shù)據(jù)打包單元的具體實(shí)施方式
的結(jié)構(gòu)示意圖。[0196]在圖12中,本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的一個實(shí)施例中數(shù)據(jù)打包單元的具體實(shí)施方式
的結(jié)構(gòu)1200進(jìn)一步包括:動態(tài)碼字長度的碼字長度緩存單元1201,主要是用來存放動態(tài)碼字長度Huffman樹中每一個節(jié)點(diǎn)的碼字長度,與圖9中的動態(tài)碼字長度的碼字長度緩存單元905是復(fù)用的。動態(tài)碼字長度碼字值緩存單元1202,主要是用來存放動態(tài)碼字長度Huffman樹中每一個葉子節(jié)點(diǎn)的碼字值,與圖9中的動態(tài)碼字長度碼字值緩存單元907是復(fù)用的。靜態(tài)指回距離碼字值緩存單元1203,主要是用來存放指回距離的靜態(tài)Huffman編碼值,與圖11中的靜態(tài)指回距離碼字值單元1102是復(fù)用的。輸入數(shù)據(jù)緩存單元1204,主要是用來存放原始的待壓縮的數(shù)據(jù),與圖3中的數(shù)據(jù)緩存單元303及304單元是復(fù)用的。 新字符/匹配長度緩存單元1205,主要是用來存放LZ77編碼單元輸出的新字符/匹配長度,與圖4中新字符/匹配長度緩存單元407是復(fù)用的。指回距離緩存單元1206,主要是用來存放LZ77編碼單元輸出的指回距離,與圖4中的指回距離緩存單元408是復(fù)用的。動態(tài)新字符/匹配長度碼字值緩存單元1207,主要是用來存放動態(tài)新字符/匹配長度Huffman樹中所有葉子節(jié)點(diǎn)的碼字值,與圖7中的動態(tài)新字符/匹配長度碼字值緩存單元706是復(fù)用的。動態(tài)新字符/匹配長度碼字長度緩存單元1208,主要是用來存放動態(tài)新字符/匹配長度Huffman樹中所有節(jié)點(diǎn)的碼字長度,與圖7中的動態(tài)新字符/匹配長度碼字長度緩存單元704是復(fù)用的。靜態(tài)新字符/匹配長度碼字值緩存單元1209,主用是用來存放新字符/匹配長度的靜態(tài)Huffman編碼的碼字值,與圖10中的靜態(tài)新字符/匹配長度碼字值緩存單元1003是復(fù)用的。靜態(tài)新字符/匹配長度碼字長度緩存單元1210,主要是用來存放新字符/匹配長度的靜態(tài)Huffman編碼的碼字長度,與圖10中的靜態(tài)新字符/匹配長度碼字長度緩存單元1002是復(fù)用的。動態(tài)指回距離碼字值緩存單元1211,主要是用來存放動態(tài)指回距離Huffman樹中所有葉子節(jié)點(diǎn)的碼字值,與圖8中的動態(tài)指回距離碼字值緩存單元806是復(fù)用的。變長碼字打包單元1212,主要是接收讀取變長碼字單元送來的碼字值及碼字長度將這些變長碼字打包成64比特位寬輸出到輸出緩存單元中。動態(tài)指回距離碼字長度緩存單元1213,主要是用來存放動態(tài)指回距離Huffman樹中所有節(jié)點(diǎn)的碼字長度,與圖8中的動態(tài)指回距離碼字長度緩存單元804是復(fù)用的。動態(tài)碼字長度重復(fù)次數(shù)緩存單元1214,主要是用來存放動態(tài)碼字長度Huffman樹中所有葉子節(jié)點(diǎn)的重復(fù)次數(shù),與圖9中動態(tài)碼字長度重復(fù)次數(shù)緩存單元916是復(fù)用的。動態(tài)碼字長度葉子節(jié)點(diǎn)緩存單元1215,主要是用來存放動態(tài)碼字長度Huffman樹中所有的葉子節(jié)點(diǎn),與圖9中的動態(tài)碼字長度葉子節(jié)點(diǎn)緩存單元909是復(fù)用的。讀取變長碼字單元1216,主要是用來根據(jù)圖4中LZ77編碼單元、圖7中動態(tài)新字符/匹配長度Huffman編碼單元、圖8中動態(tài)指回距離Huffman編碼單元、圖9中動態(tài)碼字長度Huffman編碼單元、圖10中靜態(tài)新字符/匹配長度Huffman編碼單元、圖11中靜態(tài)指回距離Huffman編碼單元送出的結(jié)果進(jìn)行判斷,根據(jù)判斷的結(jié)果采用直接存儲、動態(tài)Huffman編碼、靜態(tài)Huffman編碼三種壓縮模式中的一種對待壓縮的數(shù)據(jù)塊進(jìn)行壓縮,進(jìn)而從數(shù)據(jù)緩存單元1201-1211,1213-1215中按照特定的順序讀取數(shù)據(jù)并將讀取的變長碼字交給變長碼字打包單元輸出。圖13示出本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的一個實(shí)施例中輸出緩存單元的具體實(shí)施方式
的結(jié)構(gòu)示意圖。如圖13所示,本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的一個實(shí)施例中輸出緩存單元的具體實(shí)施方式
的結(jié)構(gòu)1300進(jìn)一步包括:FIFO緩存單元1301,主要是用來接收數(shù)據(jù)打包單元1302發(fā)送出來的壓縮之后的數(shù)據(jù)。數(shù)據(jù)打包單元1302,主要是用來編碼輸出數(shù)據(jù),與圖12中的數(shù)據(jù)打包單元是復(fù)用的。圖14示出本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)加速方法中雙Head/Prev加速方法的具體實(shí)施方式
結(jié)構(gòu)示意圖。如圖14所示,本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)加速方法中雙Head/Prev加速方法的具體實(shí)施方式
結(jié)構(gòu)進(jìn)一步包括:Headl Hash 查找表 1401、Prev I Hash 查找表 1402、Head2 Hash 查找表 1404、Prev2 Hash查找表1405,主要是用來存放待壓縮數(shù)據(jù)中出現(xiàn)的每一個字符的地址,每次使用之前都需要對Headl Hash查找表1401、Prev I Hash查找表1402、Head2 Hash查找表1404、Prev2 Hash查找表1405進(jìn)行清空,然后再使用,這里的Headl Hash查找表1401、PrevI Hash 查找表 1402、Head2 Hash 查找表 1404、Prev2 Hash 查找表 1405 與圖 4 中的 HeadlHash 查找表 401、Prevl Hash 查找表 402、Head2 Hash 查找表 403、Prev2 Hash 查找表 404是對應(yīng)復(fù)用的。LZ77主控狀態(tài)機(jī)單元1403,主要是利用Headl Hash查找表1401、Prev I Hash查找表1402、Head2 Hash查找表1404、Prev2 Hash查找表1405完成數(shù)據(jù)塊的LZ77編碼過程,與圖4中的LZ77主控狀態(tài)機(jī)單元405是復(fù)用的。圖15示出本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)加速方法中雙Head/Prev加速方法的具體實(shí)施方式
的工作流程示意圖。如圖15所示,本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)加速方法中雙Head/Prev加速方法的具體實(shí)施方式
的工作流程1500進(jìn)一步包括:步驟1501,清空Headl和Prevl,清空完成進(jìn)入步驟1502。步驟1502,利用步驟1501中清空好的Headl Hash查找表和Prevl Hash查找表開始壓縮第一個數(shù)據(jù)塊,在壓縮第一個數(shù)據(jù)塊的同時,完成對Head2 Hash表和Prev2 Hash表的清空,處理完成之后就進(jìn)入步驟1503。步驟1503,利用步驟1502中清空好的Head2 Hash表盒Prev2 Hash表開始壓縮第二個數(shù)據(jù)塊,在壓縮第二個數(shù)據(jù)塊的同時也完成對Headl Hash表和Prevl Hash表的清空,處理完成之后就進(jìn)入步驟1504。步驟1504,開始利用步驟1503中清空好的Headl Hash表和Prevl Hash表對第三個數(shù)據(jù)塊的壓縮,在壓縮的同時完成對Head2 Hash表和Prev2 Hash表的清空。[0227]按照上述的操作步驟,一直到所有的數(shù)據(jù)塊都被壓縮完畢,這里首次采用的雙Head和Prev的結(jié)構(gòu)去壓縮數(shù)據(jù),顯著地提升了數(shù)據(jù)的吞吐率。圖16示出本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)加速方法中Huffman提前統(tǒng)計(jì)加速方法的具體實(shí)施方式
的結(jié)構(gòu)示意圖。如圖16所示,本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)加速方法中Huffman提前統(tǒng)計(jì)加速方法的具體實(shí)施方式
的結(jié)構(gòu)1600進(jìn)一步包括:LZ77編碼單元1601,主要完成對待壓縮數(shù)據(jù)的LZ77編碼,與圖1中LZ77編碼單元104是復(fù)用的。新字符/匹配長度或者是指回距離緩存單元1602,主要是用來存放新字符/匹配長度或者是指回距離,與圖4中的新字符/匹配長度緩存單元407或者是指回距離緩存單元408是復(fù)用的。頻率統(tǒng)計(jì)控制單元1603,主要是用來接收來自LZ77編碼單元輸出的新字符/匹配長度或者是指回距離,并進(jìn)行統(tǒng)計(jì),與圖1中的動態(tài)新字符/匹配長度Huffman編碼頻率統(tǒng)計(jì)控制單元102或者是動態(tài)指回距離Huffman編碼頻率統(tǒng)計(jì)控制單元103是復(fù)用的。頻率緩存單元1604,主要是用來存放動態(tài)Huffman樹中所有的節(jié)點(diǎn)的頻率,與圖7中新字符/匹配長度頻率緩存單元702或者是圖8中的指回距離頻率緩存單元802是復(fù)用的。由圖16中可以看出,本實(shí)用新型提供的這種方法可以同時完成字符的存儲及統(tǒng)計(jì),完全并行的工作,從提升了 Huffman編碼的數(shù)據(jù)吞吐率。圖17示出本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)加速方法中Huffman提前清空加速方法的具體實(shí)施方式
的工作流程示意圖。如圖17所示,本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)加速方法中Huffman提前清空加速方法的具體實(shí)施方式
的工作流程1700進(jìn)一步包括:步驟1701,在進(jìn)行對第一個數(shù)據(jù)塊進(jìn)行Huffman編碼之前完成對頻率緩存單元的清空,清空好之后進(jìn)入步驟1702。步驟1702,主要是完成對待壓縮數(shù)據(jù)中出現(xiàn)的字符進(jìn)行統(tǒng)計(jì),統(tǒng)計(jì)好之后進(jìn)入步驟 1705。步驟1705,根據(jù)步驟1702統(tǒng)計(jì)的結(jié)果建立Huffman樹,Huffman樹建好之后就進(jìn)入步驟1706。步驟1706,根據(jù)步驟1705建立的Huffman樹得出Huffman表,得到Huffman表之后存放在頻率緩存單元中的數(shù)據(jù)就不再有用,接著同時完成步驟1703和步驟1704。步驟1703,完成對待壓縮數(shù)據(jù)塊的Huffman編碼過程。步驟1704,完成頻率緩存單元的清空,步驟1703和步驟1704是同時進(jìn)行,在步驟1703和步驟1704都完成之后就進(jìn)入步驟1702,開始準(zhǔn)備處理下一個數(shù)據(jù)塊。從圖17中可以看出,步驟1703與步驟1704是完全并行的工作,從而提升了Huffman編碼的數(shù)據(jù)吞吐率。圖18示出本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)加速方法中CRC32穿插計(jì)算的具體實(shí)施方式
的工作流程示意圖。如圖18所示,本實(shí)用新型提供的一種GZIP壓縮硬件系統(tǒng)加速方法中CRC32穿插計(jì)算的具體實(shí)施方式
的工作流程1800進(jìn)一步包括:步驟1801,讀取一個字符,準(zhǔn)備進(jìn)行LZ77編碼,進(jìn)入步驟1802。步驟1802,從當(dāng)前的這個字符開始進(jìn)行匹配字符串的查找過程,利用讀取Hash表的時間去完成當(dāng)前字符的CRC32校驗(yàn)計(jì)算,進(jìn)而進(jìn)入步驟1803。步驟1803,判斷處理是否結(jié)束,如果沒有,繼續(xù)執(zhí)行步驟1801,否則就進(jìn)入結(jié)束狀態(tài)。從圖18中可以看出,重復(fù)利用了 LZ77逐個處理字符的特性,且在編碼的過程中會查詢Hash表,利用這樣的時間空隙完成CRC32校驗(yàn)計(jì)算,從而數(shù)據(jù)吞吐率得以提升。參考前述本實(shí)用新型示例性的描述,本領(lǐng)域技術(shù)人員可以知曉本實(shí)用新型具有以下優(yōu)點(diǎn):本實(shí)用新型提供了一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的方法,并在FPGA上實(shí)現(xiàn)了 GZIP壓縮的基本功能。本實(shí)用新型提供了一種GZIP壓縮硬件系統(tǒng)實(shí)現(xiàn)的方法,最終實(shí)現(xiàn)硬件實(shí)現(xiàn)與軟件實(shí)現(xiàn)相兼容,硬件壓縮之后,軟件可以進(jìn)行正確的解壓。在本實(shí)用新型中,采用兵兵操作、雙Head和Prev Hash結(jié)構(gòu)、Huffman提前統(tǒng)計(jì)、Huffman提前清空、CRC32穿插計(jì)算來提升GZIP壓縮的數(shù)據(jù)吞吐率,測試結(jié)果表明,GZIP壓縮硬件實(shí)現(xiàn)較軟件實(shí)現(xiàn)在數(shù)據(jù)吞吐率上有了大幅度的提升。盡管本實(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.一種基于GZIP的壓縮硬件系統(tǒng),其特征在于,該系統(tǒng)包括: 一個輸入緩存單元,用于對輸入數(shù)據(jù)進(jìn)行緩存; 一個LZ77編碼單元,用于對輸入數(shù)據(jù)進(jìn)行LZ77編碼; 一個動態(tài)新字符/匹配長度Huffman編碼頻率統(tǒng)計(jì)控制單元,用于對LZ77編碼單元輸出的新字符以及匹配長度進(jìn)行統(tǒng)計(jì); 一個動態(tài)指回距離Huffman編碼頻率統(tǒng)計(jì)控制單元,用于對LZ77編碼單元輸出的指回距離進(jìn)行統(tǒng)計(jì); 一個動態(tài)新字符/匹配長度Huffman編碼單元,用于對LZ77編碼單元輸出的新字符以及匹配長度進(jìn)行動態(tài)Huffman編碼; 一個動態(tài)指回距離Huffman編碼單元,用于對LZ77編碼單元輸出的指回距離進(jìn)行動態(tài)Huffman 編碼; 一個動態(tài)碼字長度Huffman編碼單元,用于對動態(tài)新字符/匹配長度Huffman樹的信息及對動態(tài)指回距離Huffman樹的信息進(jìn)行編碼; 一個靜態(tài)新字符/匹配長度Huffman編碼單元,用于對LZ77編碼單元輸出之后的新字符/匹配長度進(jìn)行靜態(tài)Huffman編碼; 一個靜態(tài)指回距離Huffman編碼單元,用于對LZ77編碼單元輸出之后的指回距離進(jìn)行靜態(tài)Huffman編碼; 一個數(shù)據(jù)打包單元,用于判斷采用直接存儲、靜態(tài)Huffman編碼以及動態(tài)Huffman編碼三種模式中的一種,并按 照固定的格式進(jìn)行編碼輸出; 一個輸出緩存單元,用于緩存數(shù)據(jù)打包單元輸出的壓縮之后的數(shù)據(jù)。
2.根據(jù)權(quán)利要求1所述的基于GZIP的壓縮硬件系統(tǒng),其特征在于,所述輸入緩存單元包括: 兩個數(shù)據(jù)塊緩存單元,用于存放待壓縮的原始數(shù)據(jù); 兩個數(shù)據(jù)選擇單元,用于控制數(shù)據(jù)塊緩存單元的讀寫控制權(quán)。
3.根據(jù)權(quán)利要求1所述的基于GZIP的壓縮硬件系統(tǒng),其特征在于,所述LZ77編碼單元包括: 兩對Head/Prev Hash表,用于對LZ77編碼單元中編碼字符串的快速匹配查找; 一個只讀存儲單元ROM,用于存放循環(huán)冗余校驗(yàn)碼CRC32校驗(yàn)計(jì)算時的常數(shù)表; 一個新字符/匹配長度緩存單元,用于存放LZ77編碼單元輸出之后的新字符或者是匹配長度; 一個指回距離緩存單元,用于存放LZ77編碼單元輸出之后的指回距離; 一個主控狀態(tài)機(jī)單元,用于對數(shù)據(jù)塊緩存單元中的數(shù)據(jù)進(jìn)行數(shù)據(jù)讀取。
4.根據(jù)權(quán)利要求1所述的基于GZIP的壓縮硬件系統(tǒng),其特征在于,所述動態(tài)新字符/匹配長度Huffman編碼單元包括: 一個新字符/匹配長度頻率緩存單元,用于存放LZ77編碼單元輸出之后新字符以及匹配長度的頻率; 一個新字符/匹配長度父親節(jié)點(diǎn)緩存單元,用于存放新字符以及匹配長度Huffman樹中每一個節(jié)點(diǎn)的父親節(jié)點(diǎn),其中根節(jié)點(diǎn)除外; 一個新字符/匹配長度深度緩存單元,用于存放新字符以及匹配長度Huffman樹中每一個節(jié)點(diǎn)在新字符以及匹配長度Huffman樹中的深度; 一個新字符/匹配長度最小堆緩存單元,用于連續(xù)存放新字符以及匹配長度Huffman樹中所有的節(jié)點(diǎn); 一個新字符/匹配長度碼字值緩存單元,用于存放新字符/匹配長度Huffman樹中所有的葉子節(jié)點(diǎn)對應(yīng)的Huffman編碼的值; 一個新字符/匹配長度碼字長度緩存單元,用于存放新字符以及匹配長度Huffman樹中所有節(jié)點(diǎn)對應(yīng)的一個Huffman編碼的有效長度; 3個數(shù)據(jù)選擇單元,分別用于控制新字符/匹配長度頻率緩存單元、新字符/匹配長度碼字值緩存單元、新字符/匹配長度碼字長度緩存單元的控制權(quán); 一個流水線乘法器單元,用于輔助計(jì)算數(shù)據(jù)塊經(jīng)過動態(tài)新字符以及匹配長度Huffman編碼之后的大??; 一個主控狀態(tài)機(jī)單元,用來根據(jù)新字符/匹配長度頻率緩存單元中存放的待壓縮數(shù)據(jù)塊中每一個字符的頻率信息,利用新字符/匹配長度父親節(jié)點(diǎn)緩存單元、新字符/匹配長度深度緩存單元、新字符/匹配長度最小堆緩存單元去構(gòu)造Huffman樹,并將Huffman樹的信息存放在新字符/匹配長度最小堆緩存單元中,在得到新字符/匹配長度Huffman樹的信息之后,主控狀態(tài)機(jī)單元遍歷Huffman樹得出Huffman樹中每一個節(jié)點(diǎn)的碼字長度,并對該節(jié)點(diǎn)加以判斷;如果是葉子節(jié)點(diǎn),則所述主控狀態(tài)機(jī)單元繼續(xù)從新字符/匹配長度緩存單元中讀取該節(jié)點(diǎn)的頻率,并利用流水線乘法器單元去計(jì)算出當(dāng)前的這個字符經(jīng)過Huffman編碼之后的大小,再根據(jù)得出的Huffman樹中每一個節(jié)點(diǎn)的碼字長度去計(jì)算出Huffman樹中每一個節(jié)點(diǎn)的碼字值,主控狀態(tài)機(jī)單元對這些節(jié)點(diǎn)加以判斷,如果是葉子節(jié)點(diǎn)就將葉子節(jié)點(diǎn)的碼字值存放進(jìn)新字符/匹配長度碼字值緩存單元中。
5.根據(jù)權(quán)利要求1所述的基`于GZIP的壓縮硬件系統(tǒng),其特征在于,所述動態(tài)指回距離Huffman編碼單元包括: 一個指回距離頻率緩存單元,用于存放LZ77編碼單元輸出之后指回距離的頻率; 一個指回距離父親節(jié)點(diǎn)緩存單元,用于存放指回距離Huffman樹中每一個節(jié)點(diǎn)的父親節(jié)點(diǎn),其中根節(jié)點(diǎn)除外; 一個指回距離深度緩存單元,用于存放指回距離Huffman樹中每一個節(jié)點(diǎn)在指回距離Huffman樹中的深度; 一個指回距離最小堆緩存單元,用于連續(xù)存放指回距離Huffman樹中所有的節(jié)點(diǎn); 一個指回距離碼字值緩存單元,用于存放指回距離Huffman樹中所有的葉子節(jié)點(diǎn)對應(yīng)的Huffman編碼的值; 一個指回距離碼字長度緩存單元,用于存放指回距離Huffman樹中所有節(jié)點(diǎn)對應(yīng)的Huffman編碼的有效長度; 3個數(shù)據(jù)選擇單元,分別用于控制指回距離頻率緩存單元、指回距離碼字值緩存單元、指回距離碼字長度緩存單元的控制權(quán); 一個流水線乘法器單元,用于輔助計(jì)算數(shù)據(jù)塊經(jīng)過動態(tài)指回距離Huffman編碼之后的大小; 一個主控狀態(tài)機(jī)單元,用來根據(jù)指回距離頻率緩存單元中存放的待壓縮數(shù)據(jù)塊中每一個字符的頻率信息,并利用指回距離父親節(jié)點(diǎn)緩存單元、指回距離深度緩存單元、指回距離最小堆緩存單元去構(gòu)造Huffman樹,并將Huffman樹的信息存放在最小堆緩存單元中,在得到指回距離Huffman樹的信息之后,主控狀態(tài)機(jī)單元遍歷Huffman樹得出Huffman樹中每一個節(jié)點(diǎn)的碼字長度,并對該節(jié)點(diǎn)加以判斷,如果是葉子節(jié)點(diǎn),主控狀態(tài)機(jī)單元將從新字符/匹配長度緩存單元中讀取該節(jié)點(diǎn)的頻率,利用流水線乘法器單元去計(jì)算出當(dāng)前的這個字符經(jīng)過Huffman編碼之后的大小,再根據(jù)得出的Huffman樹中每一個節(jié)點(diǎn)的碼字長度去計(jì)算出Huffman樹中每一個節(jié)點(diǎn)的碼字值,主控狀態(tài)機(jī)單元對這些節(jié)點(diǎn)加以判斷,如果是葉子節(jié)點(diǎn)就將葉子節(jié)點(diǎn)的碼字值存放進(jìn)指回距離碼字值緩存單元中。
6.根據(jù)權(quán)利要求1所述的基于GZIP的壓縮硬件系統(tǒng),其特征在于,所述的動態(tài)碼字長度Huffman編碼單元包括: 一個碼字長度數(shù)據(jù)統(tǒng)計(jì)單元,用于統(tǒng)計(jì)新字符/匹配長度碼字長度緩存單元和指回距離碼字長度緩存單元中每一種碼字長度出現(xiàn)的頻率; 一個碼字長度頻率緩存單元,用于存放碼字長度數(shù)據(jù)統(tǒng)計(jì)單元統(tǒng)計(jì)的結(jié)果; 一個碼字長度父親節(jié)點(diǎn)緩存單元,用于存放碼字長度Huffman樹中每一個節(jié)點(diǎn)的父親節(jié)點(diǎn); 一個碼字長度深度緩存單元,用于存放碼字長度Huffman樹中每一個節(jié)點(diǎn)的深度; 一個碼字長度小堆緩存單元,用于連續(xù)存放碼字長度Huffman樹中所有的節(jié)點(diǎn); 一個碼字長度碼字值緩存單元,用于存放碼字長度Huffman樹中每一個葉子節(jié)點(diǎn)對應(yīng)的Huffman編碼的值; 一個碼字長度的碼字長度緩存單元,用于存放碼字長度Huffman樹中所有節(jié)點(diǎn)對應(yīng)的Huffman編碼的碼字長度; 一個碼字長度葉子節(jié)點(diǎn)緩 存單元,用于存放對新字符/匹配長度碼字長度緩存單元和指回距離碼字長度緩存單元進(jìn)行遍歷之后得到的碼字長度的葉子節(jié)點(diǎn); 一個碼字長度重復(fù)次數(shù)緩存單元,用于存放遍歷之后碼字長度的重復(fù)次數(shù); 5個數(shù)據(jù)選擇單元,分別用于控制碼字長度頻率緩存單元、碼字長度碼字值緩存單元、碼字長度的碼字長度緩存單元、碼字長度葉子節(jié)點(diǎn)緩存單元、碼字長度重復(fù)次數(shù)緩存單元的控制權(quán); 一個流水線乘法器單元,用于計(jì)算數(shù)據(jù)塊經(jīng)過動態(tài)碼字長度Huffman編碼之后的大小; 一個碼字長度主控狀態(tài)機(jī),用于完成新字符/匹配長度碼字長度緩存單元和指回距離碼字長度緩存單元中遍歷所有葉子節(jié)點(diǎn)的碼字長度,并將統(tǒng)計(jì)的結(jié)果存放在碼字長度葉子節(jié)點(diǎn)緩存單元和碼字長度重復(fù)次數(shù)緩存單元中,將每一個葉子節(jié)點(diǎn)的頻率信息存放在碼字長度頻率緩存單元中。
7.根據(jù)權(quán)利要求1所述的基于GZIP的壓縮硬件系統(tǒng),其特征在于,所述的數(shù)據(jù)打包單元包括: 讀取變長碼字單元,用于讀取LZ77編碼單元、動態(tài)新字符/匹配長度Huffman編碼單元、動態(tài)指回距離Huffman編碼單元和動態(tài)碼字長度Huffman編碼單元中相應(yīng)的信息;變長碼字打包單元,根據(jù)讀取變長碼字單元提供的信息從而獲知針對當(dāng)前數(shù)據(jù)塊所采用的壓縮模式。
專利摘要本實(shí)用新型公布了一種基于GZIP的壓縮硬件系統(tǒng),包括輸入緩存單元,用于對輸入數(shù)據(jù)進(jìn)行緩存;LZ77編碼單元;動態(tài)新字符/匹配長度Huffman編碼頻率統(tǒng)計(jì)控制單元;動態(tài)指回距離Huffman編碼頻率統(tǒng)計(jì)控制單元;動態(tài)新字符/匹配長度Huffman編碼單元;動態(tài)指回距離Huffman編碼單元;動態(tài)碼字長度Huffman編碼單元;靜態(tài)新字符/匹配長度Huffman編碼單元;靜態(tài)指回距離Huffman編碼單元;數(shù)據(jù)打包單元;輸出緩存單元。本壓縮硬件系統(tǒng)可實(shí)現(xiàn)GZIP壓縮算法、做到與軟件實(shí)現(xiàn)相兼容、提升GZIP壓縮的數(shù)據(jù)吞吐率,使得數(shù)據(jù)壓縮過程中無需CPU的干預(yù)。
文檔編號H03M7/30GK202931290SQ20122060151
公開日2013年5月8日 申請日期2012年11月14日 優(yōu)先權(quán)日2012年11月14日
發(fā)明者湯曉東, 狄永清, 李冰, 李瑋 申請人:無錫芯響電子科技有限公司