一種Gzip硬件壓縮方法
【專(zhuān)利摘要】本發(fā)明公開(kāi)了一種Gzip硬件壓縮方法,包含DMA模塊和Gzip壓縮模塊,首先對(duì)DMA進(jìn)行配置完成后,DMA向外部CPU發(fā)送請(qǐng)求數(shù)據(jù)信息,外部CPU到相應(yīng)的地址中取數(shù)據(jù)發(fā)送給DMA,DMA將接收的數(shù)據(jù)傳送給Gzip壓縮模塊,Gzip壓縮模塊完成數(shù)據(jù)壓縮后,向DMA發(fā)起寫(xiě)請(qǐng)求,DMA將數(shù)據(jù)傳輸?shù)絇C中。本發(fā)明能夠有效節(jié)省CPU時(shí)間、提供數(shù)據(jù)速率、并且提高壓縮效率,具有較大的實(shí)用價(jià)值。
【專(zhuān)利說(shuō)明】一種Gz ip硬件壓縮方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)壓縮中數(shù)據(jù)通道的技術(shù)。尤其涉及一種Gzip硬件壓縮系方法?!颈尘凹夹g(shù)】
[0002]隨著現(xiàn)代科學(xué)技術(shù)的發(fā)展,特別是在云計(jì)算的研究越來(lái)越大眾化,大數(shù)據(jù)的傳輸與處理越來(lái)越成為焦點(diǎn),一種有效的方法是使用壓縮技術(shù)將數(shù)據(jù)壓縮后在傳輸,而傳統(tǒng)的壓縮都是軟件實(shí)現(xiàn)的,軟件實(shí)現(xiàn)的最大的問(wèn)題就是浪費(fèi)CPU寶貴資源。而解決這類(lèi)問(wèn)題有效的方法是用硬件資源來(lái)實(shí)現(xiàn)軟件壓縮的功能,這可以代替CPU進(jìn)行數(shù)據(jù)處理,從而使CPU處理其他程序。
[0003]目前,數(shù)據(jù)壓縮分為兩種:有損壓縮和無(wú)損壓縮。有損壓縮包括脈沖編碼調(diào)制、預(yù)測(cè)編碼、變換編碼、小波編碼,無(wú)損壓縮包括LZW、LZO、LZMA、Gzip。有損壓縮雖然是原始數(shù)據(jù)得到大幅度的壓縮,但是解壓縮的數(shù)據(jù)與原始數(shù)據(jù)不一致,不可修復(fù),數(shù)據(jù)出現(xiàn)損失,而無(wú)損壓縮能夠很好彌補(bǔ)有損壓縮這一缺點(diǎn)。無(wú)損壓縮是可逆的,數(shù)據(jù)在壓縮過(guò)程中不丟失。其中Gzip算法在壓縮速率和和壓縮率都比較好,但是,在FPGA測(cè)試時(shí)候則遇到PC的存儲(chǔ)器與FPGA上數(shù)據(jù)傳輸?shù)膯?wèn)題。常用的數(shù)據(jù)傳輸方式包括程序控制、中斷控制、DMA (DirectMemory Access)方式。一般的數(shù)據(jù)傳送(包括程序控制方式、中斷方式)是在CPU (CentralProcessing Unit)的控制下進(jìn)行的,即CPU向地址總線和控制總線發(fā)出雙方的地址和控制信息,再將要傳送的數(shù)據(jù)送到數(shù)據(jù)總線并經(jīng)過(guò)CPU的累加器轉(zhuǎn)送到存儲(chǔ)單元或外部設(shè)備端口。且每次傳送的位數(shù)有限(最多不超過(guò)CPU數(shù)據(jù)線寬度),其數(shù)據(jù)傳送速度要比內(nèi)存的存儲(chǔ)速度低得多。經(jīng)CPU進(jìn)行大批量的數(shù)據(jù)傳送是很不經(jīng)濟(jì)的,尤其是不適合要求實(shí)時(shí)傳送數(shù)據(jù)的場(chǎng)景。而DMA技術(shù)只需要CPU完成對(duì)其配置就能夠自動(dòng)根據(jù)配置信息傳輸數(shù)據(jù),從而使CPU解放出來(lái),處理其他進(jìn)程。
[0004]本發(fā)明針對(duì)Gzip硬件壓縮的特性定制了數(shù)據(jù)傳輸?shù)姆椒?,從而使Gzip硬件壓縮的效率得到提升。
【發(fā)明內(nèi)容】
[0005]本發(fā)明所要解決的技術(shù)問(wèn)題是針對(duì)【背景技術(shù)】中的缺陷,提供一種有效節(jié)省CPU時(shí)間、提供數(shù)據(jù)速率、并且提高壓縮效率的Gzip硬件壓縮方法。
[0006]本發(fā)明為解決上述技術(shù)問(wèn)題采用以下技術(shù)方案:
一種Gzip硬件壓縮方法,包含DMA模塊和Gzip壓縮模塊,具體步驟如下:
步驟I ),對(duì)DMA模塊的寄存器和Gzip壓縮模塊的寄存器進(jìn)行配置;
步驟2),DMA模塊向外部CPU發(fā)送數(shù)據(jù)請(qǐng)求包;
步驟3),DMA模塊接收CPU發(fā)送的數(shù)據(jù)包,并解析該數(shù)據(jù)包;
步驟4),DMA模塊將解析數(shù)據(jù)包得到的需要壓縮的數(shù)據(jù)傳輸給Gzip壓縮模塊;
步驟5),Gzip壓縮模塊將需要壓縮的數(shù)據(jù)進(jìn)行壓縮后,向DMA模塊發(fā)出寫(xiě)數(shù)據(jù)請(qǐng)求; 步驟6),DMA模塊接收壓縮的數(shù)據(jù),并將其封裝成DMA寫(xiě)請(qǐng)求包發(fā)送給外部CPU。[0007]作為本發(fā)明一種Gzip硬件壓縮方法進(jìn)一步的優(yōu)化方案,步驟I)中所述DMA模塊的寄存器包含第一復(fù)位寄存器、DMA寫(xiě)寄存器組、DMA讀寄存器組、中斷使能寄存器和中斷屏蔽寄存器,所述Gzip壓縮模塊的寄存器包含第二復(fù)位寄存器、Gzip壓縮模式寄存器和Gzip壓縮使能寄存器。
[0008]作為本發(fā)明一種Gzip硬件壓縮方法進(jìn)一步的優(yōu)化方案,所述DMA寫(xiě)寄存器組包含DMA寫(xiě)狀態(tài)寄存器、DMA寫(xiě)地址寄存器和DMA寫(xiě)數(shù)據(jù)長(zhǎng)度寄存器,所述DMA讀寄存器組包含DMA讀狀態(tài)寄存器、DMA讀地址寄存器和DMA讀數(shù)據(jù)長(zhǎng)度寄存器。
[0009]作為本發(fā)明一種Gzip硬件壓縮方法進(jìn)一步的優(yōu)化方案,步驟I)中所述對(duì)DMA模塊的寄存器進(jìn)行配置的詳細(xì)步驟如下:
步驟1.1), DMA模塊接收外部CPU的存儲(chǔ)器寫(xiě)請(qǐng)求,解析存儲(chǔ)器寫(xiě)請(qǐng)求,將存儲(chǔ)器寫(xiě)請(qǐng)求包中的數(shù)據(jù)和地址解析出來(lái),并將數(shù)據(jù)寫(xiě)到相應(yīng)的地址中;
步驟1.2),DMA模塊接收外部CPU的存儲(chǔ)器讀請(qǐng)求,將存儲(chǔ)器讀請(qǐng)求包中的數(shù)據(jù)發(fā)送給外部CPU,供外部CPU確認(rèn)存儲(chǔ)器寫(xiě)請(qǐng)求已被執(zhí)行。
[0010]作為本發(fā)明一種Gzip硬件壓縮方法進(jìn)一步的優(yōu)化方案,所述的存儲(chǔ)器寫(xiě)請(qǐng)求包、存儲(chǔ)器讀請(qǐng)求包采用PCIe協(xié)議格式。
[0011]作為本發(fā)明一種Gzip硬件壓縮方法進(jìn)一步的優(yōu)化方案,步驟2)中所述DMA模塊向外部CPU發(fā)送數(shù)據(jù)請(qǐng)求包的具體步驟是:
DMA模塊根據(jù)存儲(chǔ)器寫(xiě)請(qǐng)求中的地址和數(shù)據(jù),構(gòu)造PCIe存儲(chǔ)器讀報(bào)文,向外部CPU申請(qǐng)數(shù)據(jù)。
[0012]本發(fā)明采用以上技術(shù)方案與現(xiàn)有技術(shù)相比,具有以下技術(shù)效果:
1.不僅實(shí)現(xiàn)在不占用處理器資源情況下數(shù)據(jù)傳輸功能,而且解決了Gzip硬件壓縮系統(tǒng)數(shù)據(jù)傳輸功能;
2.滿足PCIExpress總線協(xié)議。支持傳輸完成中斷、錯(cuò)誤中斷機(jī)制;
3.對(duì)發(fā)送讀請(qǐng)求事務(wù)包能夠亂序回收;
4.使Gzip壓縮模塊一直處于工作狀態(tài),提高Gzip硬件壓縮的效率。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0013]圖1是本發(fā)明的實(shí)施步驟;
圖2是本發(fā)明第二步流程圖;
圖3是本發(fā)明第二步中數(shù)據(jù)封裝格式;
圖4是本發(fā)明第四步中數(shù)據(jù)封裝格式。
【具體實(shí)施方式】
[0014]下面結(jié)合附圖對(duì)本發(fā)明的技術(shù)方案做進(jìn)一步的詳細(xì)說(shuō)明:
如圖1所示,本發(fā)明公開(kāi)了一種GziP硬件壓縮方法,包含DMA模塊和Gzip壓縮模塊,具體步驟如下:
第一步,PC對(duì)DMA內(nèi)部寄存器和控制Gzip壓縮模塊寄存器進(jìn)行配置。DMA在接收到PC發(fā)送的存儲(chǔ)器寫(xiě)請(qǐng)求包,將寫(xiě)請(qǐng)求包中配置地址和配置數(shù)據(jù)提取出來(lái)。然后將數(shù)據(jù)寫(xiě)到對(duì)應(yīng)的地址中。[0015]其中,配置的寄存器包括復(fù)位寄存器、Gzip壓縮模式寄存器、DMA寫(xiě)寄存器、DMA讀寄存器等。
[0016]第二步,讀取DMA讀寄存器中請(qǐng)求數(shù)據(jù)長(zhǎng)度和請(qǐng)求的首地址,開(kāi)始組織DMA讀請(qǐng)求包。讀請(qǐng)求包的格式按照PCIe讀事務(wù)包格式進(jìn)行封裝。圖2為數(shù)據(jù)封裝過(guò)程。
[0017]首先,判斷讀請(qǐng)求數(shù)據(jù)長(zhǎng)度是否大于128字節(jié),如果大于,則進(jìn)行分片處理,每個(gè)片包除了最后一個(gè)包,其余片包的請(qǐng)求數(shù)據(jù)長(zhǎng)度均為128字節(jié)。最后一個(gè)片包請(qǐng)求的數(shù)據(jù)長(zhǎng)度為總的數(shù)據(jù)長(zhǎng)度減去,片包個(gè)數(shù)減1.所得結(jié)果乘與128字節(jié)。
[0018]然后,申請(qǐng)tag號(hào)。每發(fā)送片包之前先申請(qǐng)tag號(hào),確定有tag可以使用時(shí)候,開(kāi)始準(zhǔn)備封裝當(dāng)前片包包頭。tag的值每發(fā)送一次自加I。
[0019]最后,根據(jù)當(dāng)前片包請(qǐng)求的長(zhǎng)度,確定包頭中l(wèi)ength、FBE、LBE字段的值。Length表示片包請(qǐng)求數(shù)據(jù)的長(zhǎng)度,位寬為IObit ;FBE表示數(shù)據(jù)包中第一拍數(shù)據(jù)有效字節(jié)使能位,位寬為4bit,每一 bit對(duì)應(yīng)相應(yīng)字節(jié)是否有效;LBE表示數(shù)據(jù)包中最后一拍數(shù)據(jù)有效字節(jié)使能位,位寬為4bit,每一位對(duì)應(yīng)相應(yīng)字節(jié)是否有效。
[0020]Length字段除了最后一個(gè)片包外,其余片包中該字段一直為32。對(duì)于最后一個(gè)片包,總的長(zhǎng)度除于128,得到的結(jié)果。如果結(jié)果是4的整數(shù)倍,則length的長(zhǎng)度為結(jié)果除于4 ;如果結(jié)果不是4的整數(shù)倍,則length的長(zhǎng)度為結(jié)果除于4的值加I。
[0021]FBE字段和LBE除了最后一個(gè)片包外,其余片包中該字段一直為4'bllll,表示第一拍數(shù)據(jù)字節(jié)都有效。對(duì)于最后一個(gè)片包,該字段的值與該片包請(qǐng)求數(shù)據(jù)長(zhǎng)度有關(guān)。如果該片請(qǐng)求數(shù)據(jù)長(zhǎng)度超過(guò)32字節(jié),則FBE字段為4'bllll,LBE字段則根據(jù)數(shù)據(jù)長(zhǎng)度低2bit確定。如果該片請(qǐng)求數(shù)據(jù)長(zhǎng)度小于32字節(jié),則FBE字段根據(jù)數(shù)據(jù)長(zhǎng)度低2bit確定,LBE字段為 4'b0000。
[0022]Address字段確定讀數(shù)據(jù)的首地址,DMA內(nèi)部寄存器存放該地址,在進(jìn)行分片時(shí)。第一片包Addres字段為DMA內(nèi)部寄存器的值,第二片包Address的值自加128,依次類(lèi)推,直至所有讀片包請(qǐng)求都發(fā)送完成。
[0023]完成上述操作后,按照?qǐng)D3數(shù)據(jù)格式進(jìn)行封裝。
[0024]第三步,接收PC發(fā)送的完成包,該完成包是響應(yīng)第二步發(fā)送讀事務(wù)包請(qǐng)求的。該數(shù)據(jù)包包頭長(zhǎng)度為12字節(jié),在第二拍的數(shù)據(jù)中低32位中將第一次出現(xiàn)數(shù)據(jù)。將第一拍中tag字段解析出來(lái),由該tag值來(lái)確定該包存放的基地址。這是由于PCIe設(shè)備相應(yīng)讀請(qǐng)求時(shí)候不是按順序的,這將導(dǎo)致接收的完成包不是順序的。同時(shí),對(duì)于接收的數(shù)據(jù)需要重新組合再發(fā)送到Gzip壓縮模塊。將前一拍數(shù)據(jù)的低32位放在高32位,當(dāng)拍數(shù)據(jù)的高32位放在低32位,組織完成后通過(guò)64bit數(shù)據(jù)總線發(fā)送給Gzip壓縮模塊。
[0025]第四步,在Gzip壓縮模塊處理完數(shù)據(jù)后,向DMA發(fā)出寫(xiě)數(shù)據(jù)請(qǐng)求,DMA把數(shù)據(jù)封裝成DMA寫(xiě)請(qǐng)求包發(fā)送給PC。具體過(guò)程如下。
[0026] Gzip壓縮模塊在完成數(shù)據(jù)壓縮后將通知DMA,有數(shù)據(jù)準(zhǔn)備上傳,此時(shí)判斷DMA是否空閑。如果空閑,則響應(yīng)Gzip壓縮模塊請(qǐng)求,同時(shí)將讀取數(shù)據(jù)大小寫(xiě)到DMA寫(xiě)數(shù)據(jù)長(zhǎng)度寄存器中,開(kāi)始讀數(shù)據(jù)。如果讀取數(shù)據(jù)長(zhǎng)度大于128字節(jié)時(shí),則進(jìn)行多次寫(xiě)事務(wù)包發(fā)送直至所有數(shù)據(jù)都發(fā)送完成。除最后一片包,其余片包攜帶的數(shù)據(jù)長(zhǎng)度為128字節(jié)。每個(gè)片包按照DMA寫(xiě)事務(wù)包的格式進(jìn)行封裝。如圖4所示。?1^、了7?6字段寫(xiě)入2飛10、5'130;1'(:、了03?、Attr、Requester ID、Tag都填入固定值。下面對(duì)Length、LBE、FBE、Address字段產(chǎn)生進(jìn)行闡述。
[0027]Length字段除了最后一個(gè)片包外,其余片包中該字段一直為32。具體過(guò)程與第三步Length字段產(chǎn)生一致,這里不再贅述。
[0028]FBE字段和LBE除了最后一個(gè)片包外,其余片包中該字段一直為4'bllll。具體過(guò)程與第三步FBE、LBE、字段產(chǎn)生一致,這里不再贅述。
[0029]Addess字段產(chǎn)生與第三步Address字段產(chǎn)生一致,這里不再贅述。
[0030]DMA寫(xiě)請(qǐng)求完成后,則觸發(fā)寫(xiě)完成中斷,PC響應(yīng)該中斷后,讀取中斷寄存器,然后回到第一步,如此循環(huán)下去。
【權(quán)利要求】
1.一種Gzip硬件壓縮方法,其特征在于,包含DMA模塊和Gzip壓縮模塊,具體步驟如下: 步驟1 ),對(duì)DMA模塊的寄存器和Gzip壓縮模塊的寄存器進(jìn)行配置; 步驟2),DMA模塊向外部CPU發(fā)送數(shù)據(jù)請(qǐng)求包; 步驟3),DMA模塊接收外部CPU發(fā)送的數(shù)據(jù)包,并解析該數(shù)據(jù)包; 步驟4),DMA模 塊將解析數(shù)據(jù)包得到的需要壓縮的數(shù)據(jù)傳輸給Gzip壓縮模塊; 步驟5),Gzip壓縮模塊將需要壓縮的數(shù)據(jù)進(jìn)行壓縮后,向DMA模塊發(fā)出寫(xiě)數(shù)據(jù)請(qǐng)求; 步驟6),DMA模塊接收壓縮的數(shù)據(jù),并將其封裝成DMA寫(xiě)請(qǐng)求包發(fā)送給外部CPU。
2.根據(jù)權(quán)利要求1所述的一種Gzip硬件壓縮方法,其特征在于,步驟I)中所述DMA模塊的寄存器包含第一復(fù)位寄存器、DMA寫(xiě)寄存器組、DMA讀寄存器組、中斷使能寄存器和中斷屏蔽寄存器,所述Gzip壓縮模塊的寄存器包含第二復(fù)位寄存器、Gzip壓縮模式寄存器和Gzip壓縮使能寄存器。
3.根據(jù)權(quán)利要求2所述的一種Gzip硬件壓縮方法,其特征在于,所述DMA寫(xiě)寄存器組包含DMA寫(xiě)狀態(tài)寄存器、DMA寫(xiě)地址寄存器和DMA寫(xiě)數(shù)據(jù)長(zhǎng)度寄存器,所述DMA讀寄存器組包含DMA讀狀態(tài)寄存器、DMA讀地址寄存器和DMA讀數(shù)據(jù)長(zhǎng)度寄存器。
4.根據(jù)權(quán)利要求2所述的一種Gzip硬件壓縮方法,其特征在于,步驟I)中所述對(duì)DMA模塊的寄存器進(jìn)行配置的詳細(xì)步驟如下: 步驟1.1), DMA模塊接收外部CPU的存儲(chǔ)器寫(xiě)請(qǐng)求,解析存儲(chǔ)器寫(xiě)請(qǐng)求,將存儲(chǔ)器寫(xiě)請(qǐng)求包中的數(shù)據(jù)和地址解析出來(lái),并將數(shù)據(jù)寫(xiě)到相應(yīng)的地址中; 步驟1.2),DMA模塊接收外部CPU的存儲(chǔ)器讀請(qǐng)求,將存儲(chǔ)器讀請(qǐng)求包中的數(shù)據(jù)發(fā)送給外部CPU,供外部CPU確認(rèn)存儲(chǔ)器寫(xiě)請(qǐng)求已被執(zhí)行。
5.根據(jù)權(quán)利要求4所述的一種Gzip硬件壓縮方法,其特征在于,所述的存儲(chǔ)器寫(xiě)請(qǐng)求包、存儲(chǔ)器讀請(qǐng)求包采用PCIe協(xié)議格式。
6.根據(jù)權(quán)利要求4所述的一種Gzip硬件壓縮方法,其特征在于,步驟2)中所述DMA模塊向外部CPU發(fā)送數(shù)據(jù)請(qǐng)求包的具體步驟是: DMA模塊根據(jù)存儲(chǔ)器寫(xiě)請(qǐng)求中的地址和數(shù)據(jù),構(gòu)造PCIe存儲(chǔ)器讀報(bào)文,向外部CPU申請(qǐng)數(shù)據(jù)。
【文檔編號(hào)】H03M7/30GK103957013SQ201410197092
【公開(kāi)日】2014年7月30日 申請(qǐng)日期:2014年5月12日 優(yōu)先權(quán)日:2014年5月12日
【發(fā)明者】李冰, 史曙光, 許立峰, 董乾, 趙霞, 劉勇, 王剛, 陸清茹, 陳德斌 申請(qǐng)人:東南大學(xué)成賢學(xué)院