專利名稱:一種硬件lz77的壓縮實現(xiàn)系統(tǒng)及方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)壓縮技術(shù),特別是涉及以一種硬件LZ77的壓縮系統(tǒng)及方法。
背景技術(shù):
隨著信息和通信技術(shù)的迅猛發(fā)展,數(shù)據(jù)交換量日益增大,大規(guī)模的數(shù)據(jù)處理也變的更加的繁雜。對于如此龐大的數(shù)據(jù)必須進行有效的壓縮,才能夠有效的減少數(shù)據(jù)的存儲量,最大限度的合理利用有限的數(shù)據(jù)傳輸帶寬。除此之外,壓縮后的數(shù)據(jù)在一定程度上是對原始數(shù)據(jù)的加密,能夠更好的保護數(shù)據(jù)。數(shù)據(jù)壓縮可分成兩種類型,一種叫做無損壓縮,另一種叫做有損壓縮。無損壓縮是指使用壓縮后的數(shù)據(jù)進行重構(gòu)(或者叫做還原,解壓縮),重構(gòu)后的數(shù)據(jù)與原來的數(shù)據(jù)完全相同;無損壓縮用于要求重構(gòu)的信號與原始信號完全一致的場合。一個很常見的例子是磁盤文件的壓縮。根據(jù)目前的技術(shù)水平,無損壓縮算法一般可以把普通文件的數(shù)據(jù)壓縮到原來的1/2 1/4。大多數(shù)壓縮程序使用基于自適應字典的LZ算法來縮小文件?!癓Z”指的是此算法的發(fā)明者Lempel和Ziv,“字典”指的是對數(shù)據(jù)塊進行歸類的方法。目前,絕大部分的壓縮還是有軟件實現(xiàn),對數(shù)據(jù)的壓縮處理操作仍然是由中央處理器(CPU)來完成的,當面對海量數(shù)據(jù)處理時,必然會占用大量的CPU資源,使得在進行數(shù)據(jù)壓縮的同時進行其他操作變成了難題。除此之外,軟件壓縮是一種順序進行的操作,無法取得高效率的并行運算。因此,如何有效的提高壓縮算法的效率,減輕海量數(shù)據(jù)壓縮給CPU帶來的壓力成為了現(xiàn)有的軟件壓縮解壓縮技術(shù)的主要問題。
發(fā)明內(nèi)容
本發(fā)明的發(fā)明目的是提供一種硬件LZ77的壓縮實現(xiàn)系統(tǒng)及方法,以能夠有效的提高LZ77壓縮算法的效率,將CPU從海量數(shù)據(jù)壓縮中解脫出來。為實現(xiàn)上述目的,本發(fā)明提供了一種硬件LZ77的壓縮實現(xiàn)系統(tǒng),該系統(tǒng)包括:數(shù)據(jù)寫入緩存模塊,緩存待壓縮的數(shù)據(jù);壓縮處理模塊,利用乒乓操作提取所述待壓縮的數(shù)據(jù),并交替使用哈希表和字典鏈表對其進行壓縮編碼;拼接處理模塊,對壓縮編碼后的數(shù)據(jù)中的非定長數(shù)據(jù)進行拼接處理;數(shù)據(jù)讀出緩存模塊,緩存壓縮后的數(shù)據(jù)和拼接處理后的數(shù)據(jù)。進一步的,所述數(shù)據(jù)寫入緩存模塊包括:使用多路選擇器將待壓縮的數(shù)據(jù),存儲到兩個數(shù)據(jù)存儲裝置中。進一步的,所述壓縮處理模塊包括:交替壓縮模塊,取部分數(shù)據(jù)進行哈希變換,在哈希表中查找,若未找到,則所述部分數(shù)據(jù)是新字符,以新字符編碼輸出非定長數(shù)據(jù),若找到,則所述部分數(shù)據(jù)是重復字符,結(jié)合字典鏈表以此為數(shù)據(jù)頭尋找最大的匹配長度,以重復字符編碼輸出非定長數(shù)據(jù);數(shù)據(jù)更新模塊,壓縮過程中,根據(jù)哈希表和字典鏈表反饋的信號,對待壓縮的數(shù)據(jù)進行相應的讀取操作,對哈希表和字典鏈表中的數(shù)據(jù)進行相應的更新。進一步的,所述拼接處理模塊包括:轉(zhuǎn)換處理模塊,利用移位寄存器將所述非定長數(shù)據(jù)拼接成定長數(shù)據(jù);計算處理模塊,計算壓縮后的數(shù)據(jù)個數(shù),與壓縮前數(shù)據(jù)個數(shù)比較,若壓縮后的數(shù)據(jù)個數(shù)多于壓縮前的數(shù)據(jù)個數(shù),選取直接存儲的方式,若壓縮后的數(shù)據(jù)個數(shù)少于壓縮前的數(shù)據(jù)個數(shù),選取壓縮存儲的方式;對齊處理模塊,添加壓縮后的數(shù)據(jù)塊頭,并對壓縮后的數(shù)據(jù)尾部進行字節(jié)對齊處理。進一步的,所述數(shù)據(jù)讀出緩存模塊中:若一個數(shù)據(jù)塊未完成壓縮,則使用寫入數(shù)據(jù)多路選擇器,選擇將壓縮后的數(shù)據(jù)寫入數(shù)據(jù)存儲裝置;若一個數(shù)據(jù)塊完成壓縮,則利用讀出數(shù)據(jù)多路選擇器,選擇讀出對應的數(shù)據(jù)存儲裝置中的數(shù)據(jù)。為實現(xiàn)上述目的,本發(fā)明還提供一種硬件LZ77的壓縮實現(xiàn)方法,該方法包括:步驟1,緩存待壓縮的數(shù)據(jù);步驟2,利用乒乓操作提取所述待壓縮的數(shù)據(jù),并交替使用哈希表和字典鏈表對其進行壓縮編碼;步驟3,對壓縮編碼后的數(shù)據(jù)中的非定長數(shù)據(jù)進行拼接處理;步驟4,緩存壓縮后的數(shù)據(jù)和拼接處理后的數(shù)據(jù)。進一步的,所述步驟I包括: 使用多路選擇器將待壓縮的數(shù)據(jù),存儲到兩個數(shù)據(jù)存儲裝置中。進一步的,所述步驟2包括:步驟21,取部分數(shù)據(jù)進行哈希變換,在哈希表中查找,若未找到,則所述部分數(shù)據(jù)是新字符,以新字符編碼輸出非定長數(shù)據(jù),若找到,則所述部分數(shù)據(jù)是重復字符,結(jié)合字典鏈表以此為數(shù)據(jù)頭尋找最大的匹配長度,以重復字符編碼輸出非定長數(shù)據(jù);步驟22,壓縮過程中,根據(jù)哈希表和字典鏈表反饋的信號,對待壓縮的數(shù)據(jù)進行相應的讀取操作,對哈希表和字典鏈表中的數(shù)據(jù)進行相應的更新。進一步的,所述步驟3包括:步驟31,利用移位寄存器將所述非定長數(shù)據(jù)拼接成定長數(shù)據(jù);步驟32,計算壓縮后的數(shù)據(jù)個數(shù),與壓縮前數(shù)據(jù)個數(shù)比較,若壓縮后的數(shù)據(jù)個數(shù)多于壓縮前的數(shù)據(jù)個數(shù),選取直接存儲的方式,若壓縮后的數(shù)據(jù)個數(shù)少于壓縮前的數(shù)據(jù)個數(shù),選取壓縮存儲的方式;步驟33,添加壓縮后的數(shù)據(jù)塊頭,并對壓縮后的數(shù)據(jù)尾部進行字節(jié)對齊處理。進一步的,所述步驟4中:若一個數(shù)據(jù)塊未完成壓縮,則使用寫入數(shù)據(jù)多路選擇器,選擇將壓縮后的數(shù)據(jù)寫入數(shù)據(jù)存儲裝置;若一個數(shù)據(jù)塊完成壓縮,則利用讀出數(shù)據(jù)多路選擇器,選擇讀出對應的數(shù)據(jù)存儲裝置中的數(shù)據(jù)。本發(fā)明的有益功效在于:1.采用 FPGA (Field Programmable Gate Arry)實現(xiàn) LZ77 壓縮功能,通過采用數(shù)據(jù)寫入緩存、數(shù)據(jù)讀出緩存的方法實現(xiàn)數(shù)去寫入和讀出的乒乓操作,提高了 LZ77壓縮的效率。2.采用交替使用和初始化哈希表和字典鏈表,實現(xiàn)了字典初始化與壓縮的并行操作,從一定程度上提高了 LZ77壓縮的效率。3.采用LZ77編碼和非定長碼元拼接實現(xiàn)了 LZ77壓縮編碼和非定長碼元高速拼接的并行操作,進一步提升了 LZ77壓縮的效率。4.采用壓縮模式選擇和數(shù)據(jù)直接存儲實現(xiàn)了數(shù)據(jù)直接存儲和壓縮存儲兩種模式,保證了 LZ77壓縮的壓縮比,確保了壓縮的性能。以下結(jié)合附圖和具體實施例對本發(fā)明進行詳細描述,但不作為對本發(fā)明的限定。
圖1A為本發(fā)明的硬件LZ77的壓縮實現(xiàn)系統(tǒng)示意圖;圖1B為本發(fā)明的硬件LZ77的壓縮實現(xiàn)方法流程圖;圖1C為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)系統(tǒng)的結(jié)構(gòu)示意圖;圖2為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)系統(tǒng)的一個具體實施方式
的結(jié)構(gòu)示意圖;圖3為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)系統(tǒng)的一個具體實施實例中數(shù)據(jù)寫入緩存模塊的具體實施方式
的結(jié)構(gòu)示意圖;圖4為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)系統(tǒng)的另一個具體實施方式
的結(jié)構(gòu)示意圖;圖5為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)系統(tǒng)的一個具體實施實例中壓縮算法模塊的具體實施方式
的結(jié)構(gòu)示意圖;圖6為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)系統(tǒng)的另一個具體實施方式
的結(jié)構(gòu)示意圖;圖7為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)系統(tǒng)的一個具體實施實例中字典模塊的具體實施方式
的結(jié)構(gòu)示意圖;圖8為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)系統(tǒng)的另一個具體實施方式
的結(jié)構(gòu)示意圖;圖9是本發(fā)明提供的硬件LZ77壓縮實現(xiàn)系統(tǒng)的一個具體實施實例中非定長碼元拼接模塊的具體實施方式
的結(jié)構(gòu)示意圖;圖10為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)系統(tǒng)的另一個具體實施方式
的結(jié)構(gòu)示意圖;圖11為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)系統(tǒng)的一個具體實施實例中數(shù)據(jù)讀出緩存模塊的具體實施方式
結(jié)構(gòu)示意圖;圖12為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)系統(tǒng)的另一個具體實施方式
的結(jié)構(gòu)示意圖13為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)系統(tǒng)的一個具體實施實例中哈希表模塊或者字典鏈表模塊的具體實施方式
的結(jié)構(gòu)示意圖;圖14為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)系統(tǒng)的另一個具體實施方式
的結(jié)構(gòu)示意圖;圖15為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)系統(tǒng)的一個具體實施實例中非定長碼元到定長碼元轉(zhuǎn)換模塊的具體實施方式
的結(jié)構(gòu)示意圖;圖16為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)方法的流程圖;圖17為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)方法的另一個實施實例的流程圖;圖18為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)方法的另一個實施實例的流程圖;圖19為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)方法的另一個實施實例的流程圖;圖20為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)方法的另一個實施實例的流程圖;圖21為奔放名提供的硬件LZ77壓縮實現(xiàn)方法的一個具體應用實例的流程圖。
具體實施例方式下面參照附圖用本發(fā)明的一個示例性實施實例對本發(fā)明進行全面細致的描述和說明。圖1A為本發(fā)明的硬件LZ77的壓縮實現(xiàn)系統(tǒng)示意圖。如圖1A所示,該系統(tǒng)包括:數(shù)據(jù)寫入緩存模塊100,緩存待壓縮的數(shù)據(jù);壓縮處理模塊200,利用乒乓操作提取所述待壓縮的數(shù)據(jù),并交替使用哈希表和字典鏈表對其進行壓縮編碼;拼接處理模塊300,對壓縮編碼后的數(shù)據(jù)中的非定長數(shù)據(jù)進行拼接處理;數(shù)據(jù)讀出緩存模塊400,緩存壓縮后的數(shù)據(jù)和拼接處理后的數(shù)據(jù)。進一步的,所述數(shù)據(jù)寫入緩存模塊100包括:使用多路選擇器將待壓縮的數(shù)據(jù),存儲到兩個數(shù)據(jù)存儲裝置中。進一步的,所述壓縮處理模塊200包括:交替壓縮模塊,取部分數(shù)據(jù)進行哈希變換,在哈希表中查找,若未找到,則所述部分數(shù)據(jù)是新字符,以新字符編碼輸出非定長數(shù)據(jù),若找到,則所述部分數(shù)據(jù)是重復字符,結(jié)合字典鏈表以此為數(shù)據(jù)頭尋找最大的匹配長度,以重復字符編碼輸出非定長數(shù)據(jù);數(shù)據(jù)更新模塊,壓縮過程中,根據(jù)哈希表和字典鏈表反饋的信號,對待壓縮的數(shù)據(jù)進行相應的讀取操作,對哈希表和字典鏈表中的數(shù)據(jù)進行相應的更新。進一步的,所述拼接處理模塊300包括:轉(zhuǎn)換處理模塊,利用移位寄存器將所述非定長數(shù)據(jù)拼接成定長數(shù)據(jù);計算處理模塊,計算壓縮后的數(shù)據(jù)個數(shù),與壓縮前數(shù)據(jù)個數(shù)比較,若壓縮后的數(shù)據(jù)個數(shù)多于壓縮前的數(shù)據(jù)個數(shù),選取直接存儲的方式,若壓縮后的數(shù)據(jù)個數(shù)少于壓縮前的數(shù)據(jù)個數(shù),選取壓縮存儲的方式;對齊處理模塊,添加壓縮后的數(shù)據(jù)塊頭,并對壓縮后的數(shù)據(jù)尾部進行字節(jié)對齊處理。進一步的,所述數(shù)據(jù)讀出緩存模塊400中:若一個數(shù)據(jù)塊未完成壓縮,則使用寫入數(shù)據(jù)多路選擇器,選擇將壓縮后的數(shù)據(jù)寫入數(shù)據(jù)存儲裝置;若一個數(shù)據(jù)塊完成壓縮,則利用讀出數(shù)據(jù)多路選擇器,選擇讀出對應的數(shù)據(jù)存儲裝置中的數(shù)據(jù)。圖1B為本發(fā)明的硬件LZ77的壓縮實現(xiàn)方法流程圖。如圖1B所示,該方法包括:步驟1,緩存待壓縮的數(shù)據(jù);步驟2,利用乒乓操作提取所述待壓縮的數(shù)據(jù),并交替使用哈希表和字典鏈表對其進行壓縮編碼;步驟3,對壓縮編碼后的數(shù)據(jù)中的非定長數(shù)據(jù)進行拼接處理;步驟4,緩存壓縮后的數(shù)據(jù)和拼接處理后的數(shù)據(jù)。進一步的,所述步驟I包括:使用多路選擇器將待壓縮的數(shù)據(jù),存儲到兩個數(shù)據(jù)存儲裝置中。進一步的,所述步驟2包括:步驟21,取部分數(shù)據(jù)進行哈希變換,在哈希表中查找,若未找到,則所述部分數(shù)據(jù)是新字符,以新字符編碼輸出非定長數(shù)據(jù),若找到,則所述部分數(shù)據(jù)是重復字符,結(jié)合字典鏈表以此為數(shù)據(jù)頭尋找最大的匹配長度,以重復字符編碼輸出非定長數(shù)據(jù);步驟22,壓縮過程中,根據(jù)哈希表和字典鏈表反饋的信號,對待壓縮的數(shù)據(jù)進行相應的讀取操作,對哈希表和字典鏈表中的數(shù)據(jù)進行相應的更新。進一步的,所述步驟3包括:步驟31,利用移位寄存器將所述非定長數(shù)據(jù)拼接成定長數(shù)據(jù);步驟32,計算壓縮后的數(shù)據(jù)個數(shù),與壓縮前數(shù)據(jù)個數(shù)比較,若壓縮后的數(shù)據(jù)個數(shù)多于壓縮前的數(shù)據(jù)個數(shù),選取直接存儲的方式,若壓縮后的數(shù)據(jù)個數(shù)少于壓縮前的數(shù)據(jù)個數(shù),選取壓縮存儲的方式;步驟33,添加壓縮后的數(shù)據(jù)塊頭,并對壓縮后的數(shù)據(jù)尾部進行字節(jié)對齊處理。進一步的,所述步驟4中:若一個數(shù)據(jù)塊未完成壓縮,則使用寫入數(shù)據(jù)多路選擇器,選擇將壓縮后的數(shù)據(jù)寫入數(shù)據(jù)存儲裝置;若一個數(shù)據(jù)塊完成壓縮,則利用讀出數(shù)據(jù)多路選擇器,選擇讀出對應的數(shù)據(jù)存儲裝置中的數(shù)據(jù)。圖1C為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)系統(tǒng)的結(jié)構(gòu)示意圖。如圖1C所示,硬件LZ77壓縮實現(xiàn)系統(tǒng)包100括:PCIE接口模塊101、數(shù)據(jù)直接訪問模塊(DMA) 102、數(shù)據(jù)打包解包模塊103、數(shù)據(jù)寫入緩存模塊104、壓縮算法模塊105、字典模塊106、非定長碼元拼接模塊107、數(shù)據(jù)讀出緩存模塊108。其中,PCIE接口模塊101,用于實現(xiàn)與上位機的通信。例如,上位機配置PCIE對應的寄存器,實現(xiàn)上位機與硬件LZ77壓縮實現(xiàn)系統(tǒng)間數(shù)據(jù)的通信。數(shù)據(jù)直接訪問模塊(DMA) 102,用于實現(xiàn)數(shù)據(jù)的直接訪問。例如,根據(jù)上位機配置的地址和數(shù)據(jù)長度,從磁盤或者數(shù)據(jù)存儲裝置中從指定的地址讀取指定長度的數(shù)據(jù),或者想指定的地址中寫入指定長度的數(shù)據(jù)。數(shù)據(jù)打包解包模塊103,用于實現(xiàn)數(shù)據(jù)通信時對數(shù)據(jù)包的組包和解包操作。例如,從上位機讀取數(shù)據(jù)時,解析傳輸至數(shù)據(jù)寫入緩存模塊的數(shù)據(jù)包,去除數(shù)據(jù)包頭、數(shù)據(jù)包尾和數(shù)據(jù)校驗信息;向上位機寫入數(shù)據(jù)時,將從數(shù)據(jù)讀出緩存模塊中讀取的數(shù)據(jù)添加數(shù)據(jù)包頭、數(shù)據(jù)包尾和校驗信息。數(shù)據(jù)寫入緩存模塊104,用于緩存待壓縮的數(shù)據(jù)。例如,從模塊的接口寫入待壓縮的數(shù)據(jù),經(jīng)過數(shù)據(jù)寫入緩存模塊104,可以以乒乓方式讀取待壓縮的數(shù)據(jù),減少待壓縮數(shù)據(jù)的讀取時間。壓縮算法模塊105,用于將實現(xiàn)重復字符串的查找,計算重復字符串的匹配長度,進行LZ77編碼。例如,從數(shù)據(jù)緩存模塊104中讀取一定量得字符串數(shù)據(jù),對字符串進行哈希變換,從字典模塊106中查找,根據(jù)字典模塊106的反饋信號判斷索取字符串數(shù)據(jù)是否為重復字符串,若是則尋找最大的匹配長度并編碼輸出,若不是,則以新字符編碼輸出;同時,根據(jù)字典模塊106的反饋信號,從字典模塊106中讀取數(shù)據(jù)以獲得最大的匹配長度,或者向字典模塊106中寫入最新的字典信息,完成字典模塊106中數(shù)據(jù)的更新。字典模塊106,用于存儲歷史字符串。例如,一定量的字符串數(shù)據(jù)經(jīng)過壓縮算法模塊105之后,會產(chǎn)生相應的控制信號,與字典模塊106之間進行數(shù)據(jù)通信,將最新的字典信息存儲在字典模塊106中。非定長碼元拼接模塊107,用于將非定長的編碼高速拼接程定長的數(shù)據(jù)塊。例如,一定量的字符串數(shù)據(jù)經(jīng)過壓縮算法模塊105后變成了非定長的LZ77編碼,非定長碼元拼接模塊107會將這些非定長的LZ77編碼高速拼接成定長的數(shù)據(jù)。數(shù)據(jù)讀出緩存模塊108,用于緩存壓縮后的數(shù)據(jù)。例如,一個數(shù)據(jù)塊已經(jīng)完成數(shù)據(jù)壓縮,利用讀出數(shù)據(jù)多路選擇器,選擇讀出對應的數(shù)據(jù)存儲裝置中的數(shù)據(jù),同時,利用寫入數(shù)據(jù)多路選擇器,選擇將壓縮后的數(shù)據(jù)寫入到另外一個數(shù)據(jù)存儲裝置中,利用兩個存儲裝置的交替讀寫實現(xiàn)了讀出壓縮數(shù)據(jù)的乒乓操作。圖2為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)系統(tǒng)的一個具體實施方式
的結(jié)構(gòu)示意圖。如圖2所示,硬件LZ77壓縮實現(xiàn)系統(tǒng)200包括:PCIE接口模塊201、數(shù)據(jù)直接訪問模塊(DMA) 202、數(shù)據(jù)打包解包模塊203、數(shù)據(jù)寫入緩存模塊204、壓縮算法模塊205、字典模塊206、非定長碼元拼接模塊207、數(shù)據(jù)讀出緩存模塊208 ;其中PCIE接口模塊201、數(shù)據(jù)直接訪問模塊(DMA) 202、數(shù)據(jù)打包解包模塊203、壓縮算法模塊205、字典模塊206、非定長碼元拼接模塊207、數(shù)據(jù)讀出緩存模塊208可以分別和圖1C中所示的PCIE接口模塊101、數(shù)據(jù)直接訪問模塊(DMA) 102、數(shù)據(jù)打包解包模塊103、壓縮算法模塊105、字典模塊106、非定長碼元拼接模塊107、數(shù)據(jù)讀出緩存模塊108具有相同的結(jié)構(gòu),這里不再過多的闡述其具體的技術(shù)內(nèi)容。如圖2所示,數(shù)據(jù)寫入緩存模塊204進一步的包括:數(shù)據(jù)存儲裝置2041、數(shù)據(jù)存儲裝置2042和多路選擇器2043。其中,數(shù)據(jù)存儲裝置2041和數(shù)據(jù)存儲裝置2042,用于存儲待壓縮的數(shù)據(jù)。例如,可以采用隨機存取存儲器(RAM)或先入先出存儲器(FIFO)等本專業(yè)認識所熟知的數(shù)據(jù)存儲裝置實現(xiàn),數(shù)據(jù)存儲裝置的數(shù)據(jù)寬度(Width)和數(shù)據(jù)深度(D印th)可根據(jù)數(shù)據(jù)要求配置。多路選擇器2043,用于選擇將壓縮后的數(shù)據(jù)寫入兩個數(shù)據(jù)存儲裝置中的其中一個數(shù)據(jù)存儲裝置。例如,通過多路選擇器2043將數(shù)據(jù)交替的寫入數(shù)據(jù)存儲裝置2041和數(shù)據(jù)存儲裝置2042中,以實現(xiàn)數(shù)據(jù)寫入的乒乓操作。圖3為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)系統(tǒng)的一個具體實施實例中數(shù)據(jù)寫入緩存模塊的具體實施方式
結(jié)構(gòu)示意圖。如圖3所示,數(shù)據(jù)寫入緩存300模塊包括:數(shù)據(jù)存儲裝置301、數(shù)據(jù)存儲裝置302和多路選擇器303。再實施實例中具體的操作為,當硬件LZ77壓縮系統(tǒng)初始化后,系統(tǒng)將開始向數(shù)據(jù)寫入緩存模塊300接口處寫入待壓縮數(shù)據(jù),通過多路選擇器(MUX)303選擇將待壓縮數(shù)據(jù)寫入到兩個數(shù)據(jù)存儲裝置中的一個,當一個數(shù)據(jù)存儲裝置已經(jīng)數(shù)據(jù)寫滿,同時另一個數(shù)據(jù)存儲裝置已經(jīng)數(shù)據(jù)讀空時,向另一個數(shù)據(jù)存儲裝置中寫入新的待壓縮數(shù)據(jù),如此的交替循環(huán)向兩個數(shù)據(jù)存儲裝置中寫入數(shù)據(jù),以實現(xiàn)數(shù)據(jù)寫入的乒乓操作,這個過程將持續(xù)到所有的數(shù)據(jù)塊全部傳輸完畢為止。從上述敘述中可見,通過數(shù)據(jù)寫入緩存300可以實現(xiàn)數(shù)據(jù)寫入的高度連續(xù)性,提高了在數(shù)據(jù)壓縮時針對數(shù)據(jù)讀操作的效率。圖4為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)系統(tǒng)的另一個具體實施方式
的結(jié)構(gòu)示意圖。如圖4所示,硬件LZ77壓縮實現(xiàn)系統(tǒng)400包括:PCIE接口模塊401、數(shù)據(jù)直接訪問模塊(DMA) 402、數(shù)據(jù)打包解包模塊403、數(shù)據(jù)寫入緩存模塊404、壓縮算法模塊405、字典模塊406、非定長碼元拼接模塊407、數(shù)據(jù)讀出緩存模塊408 ;其中PCIE接口模塊401、數(shù)據(jù)直接訪問模塊(DMA) 402、數(shù)據(jù)打包解包模塊403、數(shù)據(jù)寫入緩存模塊404、字典模塊406、非定長碼元拼接模塊407、數(shù)據(jù)讀出緩存模塊408可以分別和圖1C中所示的PCIE接口模塊101、數(shù)據(jù)直接訪問模塊(DMA) 102、數(shù)據(jù)打包解包模塊103、數(shù)據(jù)寫入緩存模塊104、字典模塊106、非定長碼元拼接模塊107、數(shù)據(jù)讀出緩存模塊108具有相同的結(jié)構(gòu),這里不再過多的闡述其具體的技術(shù)內(nèi)容。如圖4所示,壓縮算法模塊405進一步包括:數(shù)據(jù)暫存模塊4051、字典讀取模塊4052、最大長度匹配模塊4053、LZ77編碼模塊4054和字典更新模塊4055。其中,數(shù)據(jù)暫存模塊4051,用于臨時暫存一定量的數(shù)據(jù)。例如,讀取m Byte的數(shù)據(jù)暫存在數(shù)據(jù)暫存模塊4051中,便于壓縮算法模塊405的高效哈希變換。字典讀取模塊4052,用于產(chǎn)生字典的讀控制信號和讀取字典中的數(shù)據(jù)。例如,對數(shù)據(jù)暫存模塊4051中的數(shù)據(jù)進行哈希變換后,產(chǎn)生對應的控制信號和地址信號,讀取字典中指定位置的信息,根據(jù)字典的反饋信息判斷數(shù)據(jù)暫存模塊4051中的數(shù)據(jù)是否為重復字符串,若是,則進行壓縮處理;若不是,則進行不壓縮處理。最大長度匹配模塊4053,用于計算出現(xiàn)字符串時的最大重復長度。例如,已經(jīng)壓縮過的數(shù)據(jù)中有“ab”和“abcde”,待壓縮的數(shù)據(jù)為“abcde”,則通過最大長度匹配模塊可以計算出重復字符串的最大重復長度,一定程度上提高了壓縮的性能。LZ77編碼模塊4054,用于對待壓縮的數(shù)據(jù)進行相應的編碼。例如,當字典讀取模塊4052反饋信號判定數(shù)據(jù)為重復字符串,同時由最大長度匹配模塊4053計算出了最大匹配長度,則LZ77編碼模塊4054用重復字符串對應的編碼方式進行編碼替代原來的數(shù)據(jù);當字典讀取模塊4052反饋信號判定數(shù)據(jù)為新字符時,則LZ77編碼模塊4054用新字符對應的編碼代替原來的數(shù)據(jù)。字典更新模塊4055,用于產(chǎn)生字典的寫控制信號和更新字典中的數(shù)據(jù)。例如,當確定字符為新字符或者字符串為重復字符串后,需要將字符或字符串的信息更新到字典中,字典更新模塊產(chǎn)生字典的寫控制信號,將字符或者字符串的信息寫到相應字典的指定位置中。圖5為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)系統(tǒng)的一個具體實施實例中壓縮算法模塊的具體實施方式
的結(jié)構(gòu)示意圖。如圖5所示,壓縮算法模塊500包括:數(shù)據(jù)暫存模塊501、字典讀取模塊502、最大長度匹配模塊503、LZ77編碼模塊504和字典更新模塊505。數(shù)據(jù)暫存模塊501中存儲一定量的數(shù)據(jù),由字典讀取模塊502針對其中的數(shù)據(jù)進行哈希變換后,產(chǎn)生相應的控制信號從字典中讀取數(shù)據(jù),根據(jù)字典反饋的信號判定數(shù)據(jù)是否為重復字符串,若是,則啟動最大長度匹配模塊503,計算重復字符串的最大重復長度,啟動LZ77編碼模塊504進行重復字符串編碼,若不是,則啟動LZ77編碼模塊504進行新字符編碼,同時,根據(jù)字典反饋的信號向字典中寫入所需數(shù)量的更新數(shù)據(jù)。由上述可見在壓縮算法模塊500中,對數(shù)據(jù)的讀寫操作及其的頻繁,數(shù)據(jù)暫存模塊501在一定的程度上減少了部分數(shù)據(jù)的讀寫操作,提高了哈希變換的效率,同時壓縮算法模塊500是一個相對較為獨立的模塊可以與其他的模塊并行運行,因此將寫入數(shù)據(jù)緩存300的功能發(fā)揮到了一個比較理想的狀態(tài)。圖6為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)系統(tǒng)的另一個具體實施方式
的結(jié)構(gòu)示意圖。如圖6所示,硬件LZ77壓縮實現(xiàn)系統(tǒng)600包括士(:^接口模塊601、數(shù)據(jù)直接訪問模塊(DMA) 602、數(shù)據(jù)打包解包模塊603、數(shù)據(jù)寫入緩存模塊604、壓縮算法模塊605、字典模塊606、非定長碼元拼接模塊607、數(shù)據(jù)讀出緩存模塊608 ;其中PCIE接口模塊601、數(shù)據(jù)直接訪問模塊(DMA) 602、數(shù)據(jù)打包解包模塊603、數(shù)據(jù)寫入緩存模塊604、壓縮算法模塊605、非定長碼元拼接模塊607、數(shù)據(jù)讀出緩存模塊608可以分別和圖1C中所示的PCIE接口模塊101、數(shù)據(jù)直接訪問模塊(DMA) 102、數(shù)據(jù)打包解包模塊103、數(shù)據(jù)寫入緩存模塊104、壓縮算法模塊105、非定長碼元拼接模塊107、數(shù)據(jù)讀出緩存模塊108具有相同的結(jié)構(gòu),這里不再過多的闡述其具體的技術(shù)內(nèi)容。如圖6所示,字典模塊606進一步包括:哈希表模塊6061、字典鏈表模塊6062、索引初始化模塊6063和鏈表初始化模塊6064。其中,哈希表模塊6061,用于存儲最新的歷史字典信息。例如,“ab”[l]是之前壓縮過的數(shù)據(jù),而“ab” [2]是剛壓縮好的數(shù)據(jù),則哈希表模塊6061會將最新的ab的信息即“ab” [2]的信息更新到哈希表模塊6061中指定存儲裝置的指定位置。字典鏈表模塊6062,用于存儲其他的歷史字典信息。例如,“ab” [I]是之前壓縮過的數(shù)據(jù),而“ab” [2]是剛壓縮好的數(shù)據(jù),則哈希表模塊6061會丟棄較舊的ab的信息即“ ab ” [ I]的信息,此時字典鏈表模塊6062接收哈希表模塊6061丟棄的ab的信息即“ ab ” [ I]的信息,將其存儲到字典鏈表模塊6062中指定存儲裝置的指定位置。索引初始化模塊6063,用于初始化哈希表模塊6061。例如,當完成一個數(shù)據(jù)塊的壓縮,需要壓縮另一個數(shù)據(jù)塊時,需 要對哈希表進行清空操作,此時索引初始化模塊6063相應的對哈希表模塊6061進行清空初始化操作。鏈表初始化模塊6064,用于初始化字典鏈表模塊6062。例如,當完成一個數(shù)據(jù)塊的壓縮,需要壓縮另一個數(shù)據(jù)塊時,需要對字典鏈表進行清空操作,此時鏈表初始化模塊6064相應的對字典鏈表模塊6062進行清空初始化操作。
圖7為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)系統(tǒng)的一個具體實施實例中字典模塊的具體實施方式
的結(jié)構(gòu)示意圖。如圖7所示,字典模塊700包括:哈希表模塊701、字典鏈表模塊702、索引初始化模塊703和鏈表初始化模塊704。壓縮數(shù)據(jù)時,哈希表模塊701反饋數(shù)據(jù),用以判斷待壓縮的數(shù)據(jù)時新字符還是重復字符串,一旦確定后,哈希表模塊701接收最新的字典信息,將較舊的字典信息丟棄;字典鏈表模塊702接收哈希表模塊701丟棄的數(shù)據(jù),并將其存儲作為其他的歷史字典信息;當硬件LZ77壓縮系統(tǒng)初始化或者當完成一個數(shù)據(jù)塊壓縮時,索引初始化模塊703和鏈表初始化模塊704啟動,將哈希表模塊701和字典鏈表模塊702中的數(shù)據(jù)清空。圖8為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)系統(tǒng)的另一個具體實施方式
的結(jié)構(gòu)示意圖。如圖8所示,硬件LZ77壓縮實現(xiàn)系統(tǒng)800包括士(:^接口模塊801、數(shù)據(jù)直接訪問模塊(DMA) 802、數(shù)據(jù)打包解包模塊803、數(shù)據(jù)寫入緩存模塊804、壓縮算法模塊805、字典模塊806、非定長碼元拼接模塊807、數(shù)據(jù)讀出緩存模塊808 ;其中PCIE接口模塊801、數(shù)據(jù)直接訪問模塊(DMA) 802、數(shù)據(jù)打包解包模塊803、數(shù)據(jù)寫入緩存模塊804、壓縮算法模塊805、字典模塊806、數(shù)據(jù)讀出緩存模塊808可以分別和圖1C中所示的PCIE接口模塊101、數(shù)據(jù)直接訪問模塊(DMA) 102、數(shù)據(jù)打包解包模塊103、數(shù)據(jù)寫入緩存模塊104、壓縮算法模塊105、字典模塊106、數(shù)據(jù)讀出緩存模塊108具有相同的結(jié)構(gòu),這里不再過多的闡述其具體的技術(shù)內(nèi)容。如圖8所示,非定長碼元拼接模塊800進一步包括:非定長碼元到定長碼元轉(zhuǎn)換模塊8071、文件大小計算模塊8072、壓縮模式選擇模塊8073和數(shù)據(jù)直接存儲模塊8074。其中,非定長碼元到定長碼元轉(zhuǎn)換模塊8071,用于將非定長的數(shù)據(jù)編碼拼接程定長的數(shù)據(jù)。例如,有非定長的數(shù)據(jù)編碼A和B,其中A編碼長度為16,B編碼長度為20,則經(jīng)過非定長碼元到定長碼元轉(zhuǎn)換模塊8071可變成定長的數(shù)據(jù)和剩余的編碼,定長的數(shù)據(jù)可以是8位、32位或者64位等,同時在壓縮后的數(shù)據(jù)塊前添加數(shù)據(jù)塊頭,并且當數(shù)據(jù)塊尾字節(jié)不對齊時補齊,使數(shù)據(jù)字節(jié)對齊。文件大小計算模塊8072,用于計算文件壓縮后的數(shù)據(jù)個數(shù),并與壓縮前的文件數(shù)據(jù)個數(shù)比較。例如,文件數(shù)據(jù)壓縮前的數(shù)據(jù)個數(shù)為32K,而壓縮后的數(shù)據(jù)個數(shù)為20K。對以上的兩個信息進行比較,反饋相應的狀態(tài)和信號給壓縮模式選擇模塊8073.
壓縮模式選擇模塊8073,用于根據(jù)文件壓縮前和壓縮后的數(shù)據(jù)個數(shù)的多少選取壓縮模式。例如,如果數(shù)據(jù)壓縮前的數(shù)據(jù)個數(shù)為32K,壓縮后的數(shù)據(jù)個數(shù)為20K,則選取壓縮存儲模式;如果壓縮前的數(shù)據(jù)個數(shù)為1K,壓縮后的數(shù)據(jù)個數(shù)為2K,則選取直接存儲模式。數(shù)據(jù)直接存儲模塊8074,用于選擇直接存儲壓縮模式壓縮數(shù)據(jù)時對數(shù)據(jù)的操作。例如,如果壓縮前得數(shù)據(jù)個數(shù)為1K,壓縮后的數(shù)據(jù)個數(shù)為2K,壓縮模式選擇模塊8073選擇直接存儲模式,數(shù)據(jù)直接存儲模塊8074啟動,直接從數(shù)據(jù)寫入緩存模塊中讀取對應的數(shù)據(jù),并添加相應的數(shù)據(jù)塊頭。圖9為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)系統(tǒng)的一個具體實施實例中非定長碼元拼接模塊的具體實施方式
的結(jié)構(gòu)示意圖。如圖9所示,非定長碼元拼接模塊900包括: 非定長碼元到定長碼元轉(zhuǎn)換模塊901、文件大小計算模塊902、壓縮模式選擇模塊903和數(shù)據(jù)直接存儲模塊904。當有非定長碼元從非定長碼元拼接模塊900的接口輸入時,非定長碼元到定長碼元轉(zhuǎn)換模塊901將非定長碼元進行暫存和拼接操作直至能夠組成定長碼元時輸出,同時文件大小計算模塊902計算出經(jīng)過非定長碼元到定長碼元轉(zhuǎn)換模塊901處理后的數(shù)據(jù)的個數(shù),并與壓縮前的數(shù)據(jù)個數(shù)進行比較,把結(jié)果告訴壓縮模式選擇模塊903,選取合適的壓縮模式,如果壓縮模式選擇模塊903選取的是直接存儲模式,啟動數(shù)據(jù)直接存儲模塊904。通過上述的內(nèi)容可見,非定長碼元拼接模塊900與壓縮算法模塊之間完全是一個并行運行的流水線結(jié)構(gòu),這樣大大的加快了數(shù)據(jù)壓縮的效率。圖10為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)系統(tǒng)的另一個具體實施方式
的結(jié)構(gòu)示意圖。如圖10所示,硬件LZ77壓縮實現(xiàn)系統(tǒng)1000包括:PCIE接口模塊1001、數(shù)據(jù)直接訪問模塊(DMA) 1002、數(shù)據(jù)打包解包模塊1003、數(shù)據(jù)寫入緩存模塊1004、壓縮算法模塊1005、字典模塊1006、非定長碼元拼接模塊1007、數(shù)據(jù)讀出緩存模塊1008 ;其中PCIE接口模塊1001、數(shù)據(jù)直接訪問模塊(DMA) 1002、數(shù)據(jù)打包解包模塊1003、數(shù)據(jù)寫入緩存模塊1004、壓縮算法模塊1005、字典模塊1006、非定長碼元拼接模塊1007可以分別和圖1C中所示的PCIE接口模塊101、數(shù)據(jù)直接訪問模塊(DMA) 102、數(shù)據(jù)打包解包模塊103、數(shù)據(jù)寫入緩存模塊104、壓縮算法模塊105、字典模塊106、非定長碼元拼接模塊107具有相同的結(jié)構(gòu),這里不再過多的闡述其具體的技術(shù)內(nèi)容。如圖10所示,數(shù)據(jù)讀出緩存模塊1008包括:數(shù)據(jù)存儲裝置10081、數(shù)據(jù)存儲裝置10082、寫入數(shù)據(jù)多路選擇器10083和讀出數(shù)據(jù)多路選擇器10084。其中,數(shù)據(jù)存儲裝置10081和數(shù)據(jù)存儲裝置10082,用于存儲壓縮后的數(shù)據(jù),可以采用隨機存取存儲器(RAM)或者先入先出存儲器(FIFO)等本專業(yè)人士所熟知的存儲裝置實現(xiàn)。寫入數(shù)據(jù)多路選擇器10083,用于選擇將壓縮后的數(shù)據(jù)寫入兩個數(shù)據(jù)存儲裝置中的其中一個數(shù)據(jù)存儲裝置。例如,要將壓縮后數(shù)據(jù)存入數(shù)據(jù)存儲裝置10081,則寫入數(shù)據(jù)多路選擇器10083選通數(shù)據(jù)接口和數(shù)據(jù)存儲裝置10081之間的信號和數(shù)據(jù)通路,從而可向數(shù)據(jù)存儲裝置10081中寫入壓縮后的數(shù)據(jù)。讀出數(shù)據(jù)多路選擇器10084,用于選擇讀出兩個數(shù)據(jù)存儲裝置中的其中一個數(shù)據(jù)存儲裝置中的數(shù)據(jù)。例如,當前正在向數(shù)據(jù)存儲裝置10081中寫入壓縮后的數(shù)據(jù),同時,有數(shù)據(jù)讀出信號產(chǎn)生,則將數(shù)據(jù)存儲裝置10082中的數(shù)據(jù)讀出;同樣如果正在向數(shù)據(jù)存儲裝置10082中寫入壓縮后的數(shù)據(jù),同時,有數(shù)據(jù)讀出信號產(chǎn)生,則將數(shù)據(jù)存儲裝置10081中的數(shù)據(jù)讀出。圖11為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)系統(tǒng)的一個具體實施實例中數(shù)據(jù)讀出緩存模塊的具體實施方式
的結(jié)構(gòu)示意圖。如圖11所示,數(shù)據(jù)讀出緩存模塊1100包括:數(shù)據(jù)存儲裝置1101、數(shù)據(jù)存儲裝置1102、寫入多路選擇器1103和讀出多路選擇器1104。當正在執(zhí)行數(shù)據(jù)壓縮時,由寫入多路選擇器1103選擇數(shù)據(jù)存儲裝置1101或數(shù)據(jù)存儲裝置1102用來存儲壓縮后的數(shù)據(jù),同時若有數(shù)據(jù)讀出信號產(chǎn)生,則由讀出多路選擇器1104選擇另外一個數(shù)據(jù)存儲裝置,并讀取該數(shù)據(jù)存儲裝置中的數(shù)據(jù)。例如,寫入多路選擇器1103選擇數(shù)據(jù)存儲裝置1101用于存儲壓縮后的數(shù)據(jù),若此時有讀出信號產(chǎn)生,則由讀出多路選擇器1104選擇數(shù)據(jù)存儲裝置1102,并將其中的數(shù)據(jù)讀出,當數(shù)據(jù)存儲裝置1102中的數(shù)據(jù)全部讀出,等待完成一個數(shù)據(jù)塊得壓縮,即數(shù)據(jù)存儲裝置中1101中的數(shù)據(jù)已準備好可以讀出時,寫入多路選擇器1103轉(zhuǎn)而選擇數(shù)據(jù)存儲器1102用于存儲壓縮后的數(shù)據(jù),如此反復,實現(xiàn)了數(shù)據(jù)讀出的乒乓,提高了數(shù)據(jù)讀出時的效率。由上述過程可見,數(shù)據(jù)讀出緩存模塊1100與壓縮算法模塊和非定長碼元拼接模塊也是并行運行的,這也從一定程度上加速了壓縮的效率。圖12為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)系統(tǒng)的另一個具體實施方式
的結(jié)構(gòu)示意圖。如圖12所示,硬件LZ77壓縮實現(xiàn)系統(tǒng)1200包括:PCIE接口模塊1201、數(shù)據(jù)直接訪問模塊(DMA) 1202、數(shù)據(jù)打包解包模塊1203、數(shù)據(jù)寫入緩存模塊1204、壓縮算法模塊1205、哈希表模塊12061、字典鏈表模塊12062、索引初始化模塊12063、鏈表初始化模塊12064、非定長碼元拼接模塊1207、數(shù)據(jù)讀出緩存模塊1208 ;其中PCIE接口模塊1201、數(shù)據(jù)直接訪問模塊(DMA) 1202、數(shù)據(jù)打包解包模塊1203、數(shù)據(jù)寫入緩存模塊1204、壓縮算法模塊1205、索引初始化模塊12063、鏈表初始化模塊12064、非定長碼元拼接模塊1207、數(shù)據(jù)讀出緩存模塊1208可以分別和圖6中所示的PCIE接口模塊601、數(shù)據(jù)直接訪問模塊(DMA)602、數(shù)據(jù)打包解包模塊603、數(shù)據(jù)寫入緩存模塊604、壓縮算法模塊605、索引初始化模塊6063、鏈表初始化模塊6064、非定長碼元拼接模塊607、數(shù)據(jù)讀出緩存模塊608具有相同的結(jié)構(gòu),這里不再過多的闡述其具體的技術(shù)內(nèi)容。如圖12所示,哈希表模塊12061進一步包括:數(shù)據(jù)存儲裝置120611、數(shù)據(jù)存儲裝置120612、多路選擇器120613和初始化多路選擇器120614 ;字典鏈表模塊12062進一步包括:數(shù)據(jù)存儲裝置120621、數(shù)據(jù)存儲裝置120622、多路選擇器120623和初始化多路選擇器120624。其中數(shù)據(jù)存儲裝置120611和數(shù)據(jù)存儲裝置120612,用于存儲最新的歷史字典信息。數(shù)據(jù)存儲裝置120621和數(shù)據(jù)存儲裝置120622,用于存儲字典的其他歷史字典信息。多路選擇器120613,用于選擇使用兩個數(shù)據(jù)存儲裝置中的其中的一個數(shù)據(jù)存儲裝置存儲最新的歷史字典信息;多路選擇器120623,用于選擇使用兩個數(shù)據(jù)存儲裝置中的其中一個數(shù)據(jù)存儲裝置存儲其他的歷史字典信息。初始化多選擇器120614,用于選擇初始換兩個數(shù)據(jù)存儲裝置中的一個數(shù)據(jù)存儲裝置,交替初始化兩個數(shù)據(jù)存儲裝置,提高壓縮的效率;同樣初始化多路選擇器120624也是起到這個作用。圖13為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)系統(tǒng)的一個具體實施實例中哈希表模塊或者字典鏈表模塊的具體實施方式
的結(jié)構(gòu)示意圖。如圖13所示,哈希表模塊或者字典鏈表模塊1300包括:數(shù)據(jù)存儲裝置1301、數(shù)據(jù)存儲裝置1302、多路選擇器1303和初始化所路選擇器1304。壓縮數(shù)據(jù)時,多路選擇器1303選擇需要使用的數(shù)據(jù)存儲裝置1301或數(shù)據(jù)存儲裝置1302,用選擇的數(shù)據(jù)存儲裝置存儲字典信息,同時初始化多路選擇器1304選擇另一個數(shù)據(jù)存儲裝置對數(shù)據(jù)存儲裝置中的字典信息進行清空操作。由上述的過程可見,在壓縮的過程中通過兩對字典數(shù)據(jù)的交替使用和初始化,力口塊了壓縮的效率。圖14為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)系統(tǒng)的另一個具體實施方式
的結(jié)構(gòu)示意圖。如圖14所示,硬件LZ77壓縮實現(xiàn)系統(tǒng)1400包括士(:^接口模塊14()1、數(shù)據(jù)直接訪問模塊(DMA) 1402、數(shù)據(jù)打包解包模塊1403、數(shù)據(jù)寫入緩存模塊1404、壓縮算法模塊1405、字典模塊1406、非定長碼元到定長碼元轉(zhuǎn)換模塊14071、文件大小計算模塊14072、壓縮模式選擇模塊14073、數(shù)據(jù)直接存儲模塊14074、數(shù)據(jù)讀出緩存模塊1408 ;其中PCIE接口模塊1401、數(shù)據(jù)直接訪問模塊(DMA) 1402、數(shù)據(jù)打包解包模塊1403、數(shù)據(jù)寫入緩存模塊1404、壓縮算法模塊1405、字典模塊1406、文件大小計算模塊14072、壓縮模式選擇模塊14073、數(shù)據(jù)直接存儲模塊14074、數(shù)據(jù)讀出緩存模塊1408可以分別和圖8中所示的PCIE接口模塊801、數(shù)據(jù)直接訪問模塊(DMA) 802、數(shù)據(jù)打包解包模塊803、數(shù)據(jù)寫入緩存模塊804、壓縮算法模塊805、字典模塊806、文件大小計算模塊8072、壓縮模式選擇模塊8073、數(shù)據(jù)直接存儲模塊8074、、數(shù)據(jù)讀出緩存模塊808具有相同的結(jié)構(gòu),這里不再過多的闡述其具體的技術(shù)內(nèi)容。如圖14所示,非定長碼元到定長碼元轉(zhuǎn)換模塊14071進一步包括:非定長碼元拼接成較短定長數(shù)據(jù)模塊140711和較短數(shù)據(jù)拼接成較長數(shù)據(jù)模塊140712。其中,非定長碼元拼接成較短定長數(shù)據(jù)模塊140711,用于將壓縮算法模塊輸出的非定長編碼拼接成較短的定長數(shù)據(jù)。例如,壓縮算法模塊輸出編碼中分別有:1比特、3比特、5比特、7比特、16bit,需要將這些數(shù)據(jù)拼接成8比特的整字型數(shù)據(jù)。較短數(shù)據(jù)拼接成較長數(shù)據(jù)模塊140712,用于將非定長碼元拼接成較短定長數(shù)據(jù)模塊140711輸出的較短定長數(shù)據(jù)拼 接成較長的數(shù)據(jù)。例如,將8比特的數(shù)據(jù)拼接成32比特或者64比特的數(shù)據(jù)。圖15為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)系統(tǒng)的一個具體實施實例中非定長碼元到定長碼元轉(zhuǎn)換模塊的具體實施方式
的結(jié)構(gòu)示意圖。如圖15所示,非定長碼元到定長碼元轉(zhuǎn)換模塊1500包括:非定長碼元拼接成較短定長數(shù)據(jù)模塊1501和較短數(shù)據(jù)拼接成較長數(shù)據(jù)模塊1502。進行非定長碼元到定長碼元的拼接時,非定長數(shù)據(jù)傳至非定長碼元到定長碼元轉(zhuǎn)換模塊1500的數(shù)據(jù)輸入接口,先由非定長碼元拼接成較短定長數(shù)據(jù)模塊1501將非定長的編碼拼接成較短的定長數(shù)據(jù),再有較短數(shù)據(jù)拼接成較長數(shù)據(jù)模塊1502將較短的定長數(shù)據(jù)拼接成較長的符合數(shù)據(jù)傳輸格式要求的定長數(shù)據(jù)輸出,這個過程中,數(shù)據(jù)的拼接是流水化的,具有高速拼接的功能,與此同時也大大的減少了硬件資源的消耗。圖16為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)方法的流程圖。如圖16所示硬件LZ77壓縮實現(xiàn)方法的流程1600包括:步驟1601、步驟1602、步驟1603和步驟1604。其中,步驟1601,緩存待壓縮的數(shù)據(jù)。例如,利用多路選擇器303、數(shù)據(jù)存儲裝置301和數(shù)據(jù)存儲裝置302實現(xiàn)數(shù)據(jù)乒乓寫入的操作。步驟1602,對字符串數(shù)據(jù)進行編碼。例如,從暫存數(shù)據(jù)模塊501中取數(shù)據(jù)送入字典讀取模502中進行哈希變換,根據(jù)哈希表模塊701的反饋信號判斷所取數(shù)據(jù)是新字符還是重復字符串,結(jié)合最大長度匹配模塊503和字典鏈表模塊702計算得出最大的匹配長度和最大匹配字符串的指針后,送入LZ77編碼模塊504中進行LZ77非定長編碼輸出;同時,字典更新模塊505將壓縮了的數(shù)據(jù)信息,更新到哈希表模塊701和字典鏈表數(shù)據(jù)模塊702中。步驟1603,拼接非定長的數(shù)據(jù)。例如,非定長數(shù)據(jù)送至非定長碼元拼接成較短定長數(shù)據(jù)模塊1501輸出較短定長數(shù)據(jù),再由較短數(shù)據(jù)拼接成較長數(shù)據(jù)模塊1502輸出傳輸數(shù)據(jù)指定的數(shù)據(jù)長度,結(jié)合文件大小計算模塊902、壓縮模式選擇模塊903和數(shù)據(jù)直接存儲模塊904選擇適當?shù)膲嚎s模式輸出壓縮后的數(shù)據(jù),同時,由文件大小計算模塊902向壓縮后的數(shù)據(jù)中添加數(shù)據(jù)塊頭信息,由壓縮模式選擇模塊903將數(shù)據(jù)塊尾進行字節(jié)對齊處理。步驟1604,緩存壓縮后的數(shù)據(jù)。例如,壓縮后的數(shù)據(jù)送至讀出數(shù)據(jù)緩存模塊,由寫入多路選擇器1103選擇將壓縮后的數(shù)據(jù)存儲在數(shù)據(jù)存儲裝置1101或者數(shù)據(jù)存儲裝置1102中;同時,由讀出多路選擇器1104選擇將數(shù)據(jù)存儲裝置1101或者數(shù)據(jù)存儲裝置1102中壓縮后的數(shù)據(jù)讀出。圖17為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)方法的另一個實施實力的流程圖。如圖17所示,硬件LZ77壓縮實現(xiàn)方法的流程包括:步驟17011、步驟1702、步驟1703和步驟1704,其中步驟1702、步驟1703和步驟1704分別與圖16所示的步驟1602、步驟1603和步驟1604進行相同或者相似的操作,在此不再進行過多的敘述。步驟17011,使用數(shù)據(jù)多路選擇器選擇將待壓縮的數(shù)據(jù)寫入到兩個數(shù)據(jù)存儲裝置中的其中一個數(shù)據(jù)存儲裝置中。例如,數(shù)據(jù)剛開始壓縮,數(shù)據(jù)多路選擇器303將待壓縮的數(shù)據(jù)寫入到數(shù)據(jù)存儲裝置301中,等到數(shù)據(jù)存儲裝置301中的數(shù)據(jù)寫入完成時,數(shù)據(jù)多路選擇器303將下個待壓縮數(shù)據(jù)塊寫入到數(shù)據(jù)存儲裝置302中,等到數(shù)據(jù)存儲裝置302中的數(shù)據(jù)寫入完成和數(shù)據(jù)存儲裝置301中的數(shù)據(jù)壓縮完成,則多路選擇器將數(shù)據(jù)寫入到數(shù)據(jù)存儲裝置301中;或者在壓縮過程中,正在壓縮數(shù)據(jù)存儲裝置301中的待壓縮數(shù)據(jù)時,多路選擇器303將下一個待壓縮的數(shù)據(jù)塊寫入到數(shù)據(jù)存儲裝置302中,等到數(shù)據(jù)存儲裝置302中的數(shù)據(jù)寫入完成和數(shù)據(jù)存儲裝置301中的數(shù)據(jù)壓縮完成,則多路選擇器將數(shù)據(jù)寫入到數(shù)據(jù)存儲裝置301中。如此的反復循環(huán)知道待壓縮的數(shù)據(jù)全部傳輸完成,這一過程實現(xiàn)了數(shù)據(jù)傳輸?shù)钠古也僮?,提高了壓縮的效率。圖18為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)方法的另一個實施實例的流程圖。如圖18所示,硬件LZ77壓縮實現(xiàn)方法的流程1800包括:步驟1801、步驟18021、步驟18022、步驟18023、步驟1803和步驟1804,其中步驟1801、步驟步驟1803和步驟1804分別圖16中的步驟1601、步驟1603和步驟1604進行相同或者相似的操作,在此不再進行過多的敘述。步驟18021,壓縮數(shù)據(jù)時,取一定量的數(shù)據(jù)進行哈希變換,在哈希表中查找,若找至IJ,則所取的一定量的數(shù)據(jù)是新字符,以新字符編碼輸出非定長編碼,若找到,則所取的一定量的數(shù)據(jù)時重復字符串,以此為數(shù)據(jù)頭尋找最大的匹配長度,以重復字符串編碼輸出非定長編碼。例如,從暫存數(shù)據(jù)模塊501中取數(shù)據(jù)送入字典讀取模502中進行哈希變換,根據(jù)哈希表模塊701的反饋信號判斷所取數(shù)據(jù)是新字符還是重復字符串,結(jié)合最大長度匹配模塊503和字典鏈表模塊702計算得出最大的匹配長度和最大匹配字符串的指針后,送入LZ77編碼模塊504中進行LZ77非定長編碼輸出。步驟18022,壓縮過程中,根據(jù)哈希表和字典鏈表的反饋信號,對待壓縮的數(shù)據(jù)進行相應的讀取操作,對哈希表和字典鏈表中的數(shù)據(jù)進行相應的更新。例如,當經(jīng)過哈希變換后確定字符是新字符時,字典更新模塊505控制向哈希表模塊701和字典鏈表模塊702中更新字典信息;同時結(jié)合數(shù)據(jù)暫存模塊501從數(shù)據(jù)存儲模塊301或者數(shù)據(jù)存儲模塊302中再次讀取一定量的數(shù)據(jù)。步驟18023,壓縮過程中,交替初始化和使用兩個哈希表和字典鏈表。例如,當哈希表模塊701或者字典鏈表模塊702中的多路選擇器1303選擇使用數(shù)據(jù)存儲裝置1301存儲字典數(shù)據(jù),則索引初始化模塊703和鏈表初始化模塊704分別對哈希表模塊701和字典鏈表模塊702中的數(shù)據(jù)存儲裝置1302進行清空或者初始化操作;當數(shù)據(jù)塊壓縮完成,要進行下一個數(shù)據(jù)塊的壓縮時,則初始化數(shù)據(jù)存儲裝置1301,選取數(shù)據(jù)存儲裝置1302用于字典存儲。由上述過程見,通過交替初始化和使用兩個哈希表和字典鏈表可以實現(xiàn)字典的乒乓操作使用,提高了壓縮的效率。圖19為本發(fā)明提供的一種硬件LZ77壓縮實現(xiàn)方法的另一個實施實例的流程圖。如圖19所示硬件LZ77壓縮實現(xiàn)方法的流程1900包括:步驟1901、步驟1902、步驟19031、步驟19032、步驟19033、步驟19034和步驟1904,其中步驟1901、步驟1902和步驟1904分別與圖16中的步驟1601、步驟1602和步驟1604進行相同或者相似的操作,在此不再進行過多的敘述。步驟19031,利用移位寄存器將非定長的數(shù)據(jù)拼接成定長的數(shù)據(jù)。例如,非定長的數(shù)據(jù)送入非定長碼元拼接成較短定長數(shù)據(jù)模塊1501中拼接成8比特或者16比特的數(shù)據(jù)輸出,再經(jīng)過較短數(shù)據(jù)拼接成較長數(shù)據(jù)模塊1502將較短的數(shù)據(jù)拼接成滿足數(shù)據(jù)傳輸要求長度的較長定長數(shù)據(jù)。步驟19032,計算壓縮后的數(shù)據(jù)個數(shù),預壓縮前數(shù)據(jù)個數(shù)比較,選取適當?shù)膲嚎s模式,若壓縮后的數(shù)據(jù)個數(shù)多于壓縮前的數(shù)據(jù)個數(shù),選取直接存儲方式,從緩存待壓縮的數(shù)據(jù)中讀取,若壓縮后的數(shù)據(jù)個數(shù)不多于壓縮前的數(shù)據(jù)格式,選取壓縮存儲的方式。例如,經(jīng)過文件大小計算模塊902的計算后,壓縮前的數(shù)據(jù)為1K,而壓縮后的數(shù)據(jù)變?yōu)?K,則壓縮模式選擇模塊903選擇啟動數(shù)據(jù)直接存儲模塊904從數(shù)據(jù)寫入緩存模塊中的數(shù)據(jù)存儲裝置301或者數(shù)據(jù)存儲裝置302中直接讀取數(shù)據(jù);但如果壓縮前的數(shù)據(jù)為32K,壓縮后的數(shù)據(jù)為20K,則壓縮模式選擇模塊903選擇壓縮存儲模式。步驟19033,添加壓縮后的數(shù)據(jù)塊頭。由文件大小計算模塊902將數(shù)據(jù)頭信息添加在壓縮后的數(shù)據(jù)塊的最前面。步驟19034,對壓縮后的數(shù)據(jù)尾部進行字節(jié)對齊處理。例如,假設壓縮后的數(shù)據(jù)最后一個數(shù)據(jù)不滿一個字節(jié)為“ 11 ”,則由壓縮模式選擇模塊903對數(shù)據(jù)尾部進行字節(jié)對齊操作,將 “ 11 ” 補齊為 “ 11001100 ”。上述的過程與圖16中的步驟1602是并行執(zhí)行的,可見,這樣的結(jié)構(gòu)可以大大的提
高壓縮的效率。圖20為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)方法的另一個實施實例的流程圖。如圖20所示,硬件LZ77壓縮實現(xiàn)方法的流程2000包括:步驟2001、步驟2002、步驟2003、步驟20041和步驟20042,其中步驟2001、步驟2002和步驟2003分別和圖16中的步驟1601、步驟1602和步驟1603進行相同或者相似的操作,在此不再進行過多的闡述。步驟20041,使用寫入數(shù)據(jù)多路選擇器,選擇壓縮后的數(shù)據(jù)寫入兩個數(shù)據(jù)存儲裝置中的其中一個數(shù)據(jù)存儲裝置。例如,數(shù)據(jù)壓縮時,寫入數(shù)據(jù)多路選擇器1103將壓縮后的數(shù)據(jù)寫入到數(shù)據(jù)存儲裝置1101中,等到該數(shù)據(jù)塊中的數(shù)據(jù)全部壓縮完成時,寫入數(shù)據(jù)多路選擇器1103將選擇數(shù)據(jù)存儲裝置1102用于壓縮后的數(shù)據(jù)的存儲,同時如果有讀出信號產(chǎn)生則讀出數(shù)據(jù)存儲器1101中的數(shù)據(jù),等到數(shù)據(jù)存儲裝置1101中的數(shù)據(jù)讀出完成和數(shù)據(jù)塊壓縮再次完成,則多路選擇器將壓縮后的數(shù)據(jù)寫入到數(shù)據(jù)存儲裝置1101中。如此的反復循環(huán)知道待壓縮的數(shù)據(jù)全部傳輸完成,這一過程實現(xiàn)了數(shù)據(jù)傳輸?shù)钠古也僮?,提高了壓縮的效率。步驟20042,當一個數(shù)據(jù)塊已經(jīng)完成壓縮,則利用讀出多路選擇器,選擇讀出對應的數(shù)據(jù)存儲裝置中的數(shù)據(jù)。例如,數(shù)據(jù)壓縮時,當有讀出信號產(chǎn)生時,數(shù)據(jù)存儲裝置1101在被寫入多路選擇器1103使用時,讀出數(shù)據(jù)多路選擇器1104選擇讀取數(shù)據(jù)存儲裝置1102中的數(shù)據(jù)。如此的反復循環(huán)知道待壓縮的數(shù)據(jù)全部傳輸完成,這一過程實現(xiàn)了數(shù)據(jù)傳輸?shù)钠古也僮?,提高了壓縮的效率。圖21為本發(fā)明提供的硬件LZ77壓縮實現(xiàn)方法的一個具體應用實例的流程圖。如圖21所示,硬件LZ77壓縮實現(xiàn)方法的流程2100包括:步驟2101、步驟2102、步驟2103、步驟2104、步驟2105、步驟2106、步驟2107、步驟2108、步驟2109和步驟2010。步驟2101,使用數(shù)據(jù)多路選擇器選擇將待壓縮的數(shù)據(jù)寫入到兩個數(shù)據(jù)存儲裝置中的其中一個數(shù)據(jù)存儲裝置中。例如,數(shù)據(jù)剛開始壓縮,數(shù)據(jù)多路選擇器303將待壓縮的數(shù)據(jù)寫入到數(shù)據(jù)存儲裝置301中,等到數(shù)據(jù)存儲裝置301中的數(shù)據(jù)寫入完成時,數(shù)據(jù)多路選擇器303將下個待壓縮數(shù)據(jù)塊寫入到數(shù)據(jù)存儲裝置302中,等到數(shù)據(jù)存儲裝置302中的數(shù)據(jù)寫入完成和數(shù)據(jù)存儲裝置301中的數(shù)據(jù)壓縮完成,則多路選擇器將數(shù)據(jù)寫入到數(shù)據(jù)存儲裝置301中;或者在壓縮過程中,正在壓縮數(shù)據(jù)存儲裝置301中的待壓縮數(shù)據(jù)時,多路選擇器303將下一個待壓縮的數(shù)據(jù)塊寫入到數(shù)據(jù)存儲裝置302中,等到數(shù)據(jù)存儲裝置302中的數(shù)據(jù)寫入完成和數(shù)據(jù)存儲裝置301中的數(shù)據(jù)壓縮完成,則多路選擇器將數(shù)據(jù)寫入到數(shù)據(jù)存儲裝置301中。如此的反復循環(huán)知道待壓縮的數(shù)據(jù)全部傳輸完成,這一過程實現(xiàn)了數(shù)據(jù)傳輸?shù)钠古也僮?,提高了壓縮的效率。步驟2102,壓縮數(shù)據(jù)時,取一定量的數(shù)據(jù)進行哈希變換,在哈希表中查找,若找到,則所取的一定量的數(shù)據(jù)是新字符,以新字符編碼輸出非定長編碼,若找到,則所取的一定量的數(shù)據(jù)時重復字符串,以此為數(shù)據(jù)頭尋找最大的匹配長度,以重復字符串編碼輸出非定長編碼。例如,從暫存數(shù)據(jù)模塊501中取數(shù)據(jù)送入字典讀取模502中進行哈希變換,根據(jù)哈希表模塊701的反饋信號判斷所取數(shù)據(jù)是新字符還是重復字符串,結(jié)合最大長度匹配模塊503和字典鏈表模塊702計算得出最大的匹配長度和最大匹配字符串的指針后,送入LZ77編碼模塊504中進行LZ77非定長編碼輸出。步驟2103,壓縮過程中,根據(jù)哈希表和字典鏈表的反饋信號,對待壓縮的數(shù)據(jù)進行相應的讀取操作,對哈希表和字典鏈表中的數(shù)據(jù)進行相應的更新。例如,當經(jīng)過哈希變換后確定字符是新字符時,字典更新模塊505控制向哈希表模塊701和字典鏈表模塊702中更新字典信息;同時結(jié)合數(shù)據(jù)暫存模塊501從數(shù)據(jù)存儲模塊301或者數(shù)據(jù)存儲模塊302中再次讀取一定量的數(shù)據(jù)。步驟2104,壓縮過程中,交替初始化和使用兩個哈希表和字典鏈表。例如,當哈希表模塊701或者字典鏈表模塊702中的多路選擇器1303選擇使用數(shù)據(jù)存儲裝置1301存儲字典數(shù)據(jù),則索引初始化模塊703和鏈表初始化模塊704分別對哈希表模塊701和字典鏈表模塊702中的數(shù)據(jù)存儲裝置1302進行清空或者初始化操作;當數(shù)據(jù)塊壓縮完成,要進行下一個數(shù)據(jù)塊的壓縮時,則初始化數(shù)據(jù)存儲裝置1301,選取數(shù)據(jù)存儲裝置1302用于字典存儲。步驟2105,利用移位寄存器將非定長的數(shù)據(jù)拼接成定長的數(shù)據(jù)。例如,非定長的數(shù)據(jù)送入非定長碼元拼接成較短定長數(shù)據(jù)模塊1501中拼接成8比特或者16比特的數(shù)據(jù)輸出,再經(jīng)過較短數(shù)據(jù)拼接成較長數(shù)據(jù)模塊1502將較短的數(shù)據(jù)拼接成滿足數(shù)據(jù)傳輸要求長度的較長定長數(shù)據(jù)。步驟2106,計算壓縮后的數(shù)據(jù)個數(shù),預壓縮前數(shù)據(jù)個數(shù)比較,選取適當?shù)膲嚎s模式,若壓縮后的數(shù)據(jù)個數(shù)多于壓縮前的數(shù)據(jù)個數(shù),選取直接存儲方式,從緩存待壓縮的數(shù)據(jù)中讀取,若壓縮后的數(shù)據(jù)個數(shù)不多于壓縮前的數(shù)據(jù)格式,選取壓縮存儲的方式。例如,經(jīng)過文件大小計算模塊902的計算后,壓縮前的數(shù)據(jù)為1K,而壓縮后的數(shù)據(jù)變?yōu)?K,則壓縮模式選擇模塊903選擇啟動數(shù)據(jù)直接存儲模塊904從數(shù)據(jù)寫入緩存模塊中的數(shù)據(jù)存儲裝置301或者數(shù)據(jù)存儲裝置302中直接讀取數(shù)據(jù);但如果壓縮前的數(shù)據(jù)為32K,壓縮后的數(shù)據(jù)為20K,則壓縮模式選擇模塊903選擇壓縮存儲模式。步驟2107,添加壓縮后的數(shù)據(jù)塊頭。由文件大小計算模塊902將數(shù)據(jù)頭信息添加在壓縮后的數(shù)據(jù)塊的最前面。步驟2108,對壓縮后的數(shù)據(jù)尾部進行字節(jié)對齊處理。例如,假設壓縮后的數(shù)據(jù)最后一個數(shù)據(jù)不滿一個字節(jié)為“ 11 ”,則由壓縮模式選擇模塊903對數(shù)據(jù)尾部進行字節(jié)對齊操作,將 “ 11 ” 補齊為 “ 11001100 ”。步驟2109,使用寫入數(shù)據(jù)多路選擇器,選擇壓縮后的數(shù)據(jù)寫入兩個數(shù)據(jù)存儲裝置中的其中一個數(shù)據(jù)存儲裝置。例如,數(shù)據(jù)壓縮時,寫入數(shù)據(jù)多路選擇器1103將壓縮后的數(shù)據(jù)寫入到數(shù)據(jù)存儲裝置1101中,等到該數(shù)據(jù)塊中的數(shù)據(jù)全部壓縮完成時,寫入數(shù)據(jù)多路選擇器1103將選擇數(shù)據(jù)存儲裝置1102用于壓縮后的數(shù)據(jù)的存儲,同時如果有讀出信號產(chǎn)生則讀出數(shù)據(jù)存儲器1101中的數(shù)據(jù),等到數(shù)據(jù)存儲裝置1101中的數(shù)據(jù)讀出完成和數(shù)據(jù)塊壓縮再次完成,則多路選擇器將壓縮后的數(shù)據(jù)寫入到數(shù)據(jù)存儲裝置1101中。如此的反復循環(huán)知道待壓縮的數(shù)據(jù)全部傳輸完成,這一過程實現(xiàn)了數(shù)據(jù)傳輸?shù)钠古也僮?,提高了壓縮的效率。步驟2110,當一個數(shù)據(jù)塊已經(jīng)完成壓縮,則利用讀出多路選擇器,選擇讀出對應的數(shù)據(jù)存儲裝置中的數(shù)據(jù)。例如,數(shù)據(jù)壓縮時,當有讀出信號產(chǎn)生時,數(shù)據(jù)存儲裝置1101在被寫入多路選擇器1103使用時,讀出數(shù)據(jù)多路選擇器1104選擇讀取數(shù)據(jù)存儲裝置1102中的數(shù)據(jù)。如此的反復循環(huán)知道待壓縮的數(shù)據(jù)全部傳輸完成,這一過程實現(xiàn)了數(shù)據(jù)傳輸?shù)钠古也僮?,提高了壓縮的效率。當然,本發(fā)明還可有其它多種實施例,在不背離本發(fā)明精神及其實質(zhì)的情況下,熟悉本領(lǐng)域的技術(shù)人員當可根據(jù)本發(fā)明作出各種相應的改變和變形,但這些相應的改變和變形都應屬于本發(fā)明所附的權(quán)利要求的保護范圍。
權(quán)利要求
1.一種硬件LZ77的壓縮實現(xiàn)系統(tǒng),其特征在于,所述系統(tǒng)包括: 數(shù)據(jù)寫入緩存模塊,緩存待壓縮的數(shù)據(jù); 壓縮處理模塊,利用乒乓操作提取所述待壓縮的數(shù)據(jù),并交替使用哈希表和字典鏈表對其進行壓縮編碼; 拼接處理模塊,對壓縮編碼后的數(shù)據(jù)中的非定長數(shù)據(jù)進行拼接處理; 數(shù)據(jù)讀出緩存模塊,緩存壓縮后的數(shù)據(jù)和拼接處理后的數(shù)據(jù)。
2.根據(jù)權(quán)利要求1所述的壓縮實現(xiàn)系統(tǒng),其特征在于,所述數(shù)據(jù)寫入緩存模塊包括: 使用多路選擇器將待壓縮的數(shù)據(jù),存儲到兩個數(shù)據(jù)存儲裝置中。
3.根據(jù)權(quán)利要求1所述的壓縮實現(xiàn)系統(tǒng),其特征在于,所述壓縮處理模塊包括: 交替壓縮模塊,取部分數(shù)據(jù)進行哈希變換,在哈希表中查找,若未找到,則所述部分數(shù)據(jù)是新字符,以新字符編碼輸出非定長數(shù)據(jù),若找到,則所述部分數(shù)據(jù)是重復字符,結(jié)合字典鏈表以此為數(shù)據(jù)頭尋找最大的匹配長度,以重復字符編碼輸出非定長數(shù)據(jù); 數(shù)據(jù)更新模塊,壓縮過程中,根據(jù)哈希表和字典鏈表反饋的信號,對待壓縮的數(shù)據(jù)進行相應的讀取操作,對哈希表和字典鏈表中的數(shù)據(jù)進行相應的更新。
4.根據(jù)權(quán)利要求1所述的壓縮實現(xiàn)系統(tǒng),其特征在于,所述拼接處理模塊包括: 轉(zhuǎn)換處理模塊,利用移位寄存器將所述非定長數(shù)據(jù)拼接成定長數(shù)據(jù); 計算處理模塊,計算壓縮后的數(shù)據(jù)個數(shù),與壓縮前數(shù)據(jù)個數(shù)比較,若壓縮后的數(shù)據(jù)個數(shù)多于壓縮前的數(shù)據(jù)個數(shù),選取直接存儲的方式,若壓縮后的數(shù)據(jù)個數(shù)少于壓縮前的數(shù)據(jù)個數(shù),選取壓縮存儲 的方式; 對齊處理模塊,添加壓縮后的數(shù)據(jù)塊頭,并對壓縮后的數(shù)據(jù)尾部進行字節(jié)對齊處理。
5.根據(jù)權(quán)利要求1所述的壓縮實現(xiàn)系統(tǒng),其特征在于,所述數(shù)據(jù)讀出緩存模塊中: 若一個數(shù)據(jù)塊未完成壓縮,則使用寫入數(shù)據(jù)多路選擇器,選擇將壓縮后的數(shù)據(jù)寫入數(shù)據(jù)存儲裝置; 若一個數(shù)據(jù)塊完成壓縮,則利用讀出數(shù)據(jù)多路選擇器,選擇讀出對應的數(shù)據(jù)存儲裝置中的數(shù)據(jù)。
6.一種硬件LZ77的壓縮實現(xiàn)方法,其特征在于,所述的方法包括: 步驟I,緩存待壓縮的數(shù)據(jù); 步驟2,利用乒乓操作提取所述待壓縮的數(shù)據(jù),并交替使用哈希表和字典鏈表對其進行壓縮編碼; 步驟3,對壓縮編碼后的數(shù)據(jù)中的非定長數(shù)據(jù)進行拼接處理; 步驟4,緩存壓縮后的數(shù)據(jù)和拼接處理后的數(shù)據(jù)。
7.根據(jù)權(quán)利要求6所述的壓縮實現(xiàn)方法,其特征在于,所述步驟I包括: 使用多路選擇器將待壓縮的數(shù)據(jù),存儲到兩個數(shù)據(jù)存儲裝置中。
8.根據(jù)權(quán)利要求6所述的壓縮實現(xiàn)方法,其特征在于,所述步驟2包括: 步驟21,取部分數(shù)據(jù)進行哈希變換,在哈希表中查找,若未找到,則所述部分數(shù)據(jù)是新字符,以新字符編碼輸出非定長數(shù)據(jù),若找到,則所述部分數(shù)據(jù)是重復字符,結(jié)合字典鏈表以此為數(shù)據(jù)頭尋找最大的匹配長度,以重復字符編碼輸出非定長數(shù)據(jù); 步驟22,壓縮過程中,根據(jù)哈希表和字典鏈表反饋的信號,對待壓縮的數(shù)據(jù)進行相應的讀取操作,對哈希表和字典鏈表中的數(shù)據(jù)進行相應的更新。
9.根據(jù)權(quán)利要求6所述的壓縮實現(xiàn)方法,其特征在于,所述步驟3包括: 步驟31,利用移位寄存器將所述非定長數(shù)據(jù)拼接成定長數(shù)據(jù); 步驟32,計算壓縮后的數(shù)據(jù)個數(shù),與壓縮前數(shù)據(jù)個數(shù)比較,若壓縮后的數(shù)據(jù)個數(shù)多于壓縮前的數(shù)據(jù)個數(shù),選取直接存儲的方式,若壓縮后的數(shù)據(jù)個數(shù)少于壓縮前的數(shù)據(jù)個數(shù),選取壓縮存儲的方式; 步驟33,添加壓縮后的數(shù)據(jù)塊頭,并對壓縮后的數(shù)據(jù)尾部進行字節(jié)對齊處理。
10.根據(jù)權(quán)利要求6所述的壓縮實現(xiàn)方法,其特征在于,所述步驟4中: 若一個數(shù)據(jù)塊未完成壓縮,則使用寫入數(shù)據(jù)多路選擇器,選擇將壓縮后的數(shù)據(jù)寫入數(shù)據(jù)存儲裝置; 若一個數(shù)據(jù)塊完成壓縮,則利用讀出數(shù)據(jù)多路選擇器,選擇讀出對應的數(shù)據(jù)存儲裝置中的數(shù)據(jù) 。
全文摘要
本發(fā)明提供一種硬件LZ77的壓縮實現(xiàn)系統(tǒng)及方法,該方法包括步驟1.緩存待壓縮的數(shù)據(jù);步驟2.利用乒乓操作提取所述待壓縮的數(shù)據(jù),并交替使用哈希表和字典鏈表對其進行壓縮編碼;步驟3.對壓縮編碼后的數(shù)據(jù)中的非定長數(shù)據(jù)進行拼接處理;步驟4.緩存壓縮后的數(shù)據(jù)和拼接處理后的數(shù)據(jù)。本發(fā)明采用FPGA實現(xiàn)LZ77壓縮功能,通過采用數(shù)據(jù)寫入緩存模塊和數(shù)據(jù)寫出緩存模塊實現(xiàn)數(shù)據(jù)的乒乓寫入和乒乓讀取功能,采用字典模塊實現(xiàn)字典的交替更新和使用,從而使得LZ77壓縮算法模塊達到最高的效率,并且通過壓縮算法模塊和非定長碼元拼接模塊的并行操作,提高現(xiàn)有的LZ77壓縮算法的處理效率。
文檔編號H03M7/30GK103095305SQ20131000314
公開日2013年5月8日 申請日期2013年1月6日 優(yōu)先權(quán)日2013年1月6日
發(fā)明者張 林, 隋秀峰, 狄永清, 李冰 申請人:中國科學院計算技術(shù)研究所