999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

LZMA壓縮算法FPGA硬件實現

2015-12-20 05:30:32李冰張林劉勇
北京航空航天大學學報 2015年3期

李冰,張林,劉勇

(1.東南大學 集成電路學院,南京210018;2.東南大學 成賢學院,南京210018)

隨著信息和通信技術的迅猛發展,龐大的數據必須進行有效的壓縮,才能減少數據交換量,最大限度地利用有限的數據傳輸帶寬.無損壓縮要求對壓縮的數據進行重構(解壓縮)后原來的數據完全相同,具有高保真性的無損壓縮被大量應用到服務器和工作站等大數據處理系統中,IBM和百度等公司均對其做過積極研究.LZMA壓縮算法是LZ77壓縮算法的一個改進版本,由Pavlov于1998年發明,目前在7zip壓縮算法中被作為默認的壓縮算法[1-2].

雖然LZMA能夠提供較高的壓縮率,但處理過程中需要大量的隨機訪問存儲器(RAM,Random Access Memory),并且會耗費較多CPU資源.對海量數據進行處理時,長時間占用大量CPU資源,使得在執行LZMA數據壓縮的同時進行其他操作變成了難題.

目前一個高性能FPGA中包含了上千個獨立的雙端口RAM塊,一個或多個的內嵌處理器以及海量的可配置資源.盡管這些資源相比CPU的工作頻率要慢很多,但卻可以提供高性能的并行運算,從而使得加速LZMA壓縮算法成為了可能.雖然國內外已有眾多的關于數據無損壓縮加速的電路實現方案,但卻不能在支持高壓縮帶寬的同時,提供很好的壓縮比.本文主要針對LZMA算法的FPGA硬件實現進行了研究,在高速壓縮的同時提供更好的壓縮比例.

1 LZMA算法

LZMA壓縮算法的結構與Deflate算法極其相似[3-4],只是將其中的Huffman編碼替代成了區間編碼,值得注意的是區間編碼是一種基于整數運算的概率編碼,其壓縮效果十分接近數據的熵值.在LZMA算法中,首先由LZ77壓縮算法在搜索緩存(search buffer)中尋找與前向緩存(look-ahead buffer)中匹配最長的字符串,然后輸出一個關于(DIS,LEN,LIT)的標識.其中,DIS代表了 lookahead buffer中與search buffer中相匹配的兩組數據首個字節之間的距離,最大的值取決于search buffer的大小;LEN代表了最大的匹配長度,通常是一個較小的數值;LIT代表下一個字符,通常是一個ASCII編碼值[5-7].當LZ77壓縮算法完成對數據的第1次壓縮后,區間編碼根據不同的輸出數據流采用不同的壓縮策略,以便解壓的時候識別[8].

如圖1所示,是一臺核心為 Core i3-2100 CPU@3.1 GHz,內存為4 GB的工作站全負荷運算時,LZMA-SDK_4.26[9]的數據吞吐測試結果曲線圖,其平均的壓縮速率僅為10~20 Mb/s.

圖1 LZMA軟件算法性能測試圖Fig.1 Performance testing image of software-based LZMA algorithm

在LZMA壓縮中,數據流都是比特形式的,數據流被分成不同種類的數據包,經過區間編碼后變成限定區間內的某一個數據后輸出.如表1所示,在LZMA算法中共有7種數據類型,為了將資源消耗控制在可接受的范圍內,本文限定LZMA壓縮的數據格式僅為前2種.

表1 LZMA文件包數據類型Table1 Data types in LZMA packages

2 硬件設計

根據LZMA的壓縮流程,本文將實現電路劃分為3個部分:LZ77壓縮控制器、區間編碼控制器和數據讀出控制器.

如圖2所示,LZ77壓縮控制器將寫入的數據進行第1次壓縮,并將壓縮后的編碼數據流向后傳輸;區間編碼控制器按照既定壓縮編碼進一步壓縮數據;數據讀出控制器將區間編碼控制器輸出的數據拼接成更合理的數據格式,以適應外部高速總線,并在數據讀出控制器中添加了數據緩沖存儲,保證了外部高速總線的高利用率.

圖2 LZMA硬件電路結構圖Fig.2 Structure image of LZMA hardware circuit

2.1 LZ77壓縮控制器

如圖3所示,LZ77壓縮控制器包括:數據讀入緩存、Hash表存儲模塊和LZ77壓縮算法控制模塊.

數據讀入緩存:采取了乒乓RAM的方式對需要壓縮的數據進行讀取.當一個數據塊中的數據正在被壓縮時,通過握手信號通知外部總線,向另一個數據塊存儲區域中寫入下一個將壓縮的數據信息,通過交替的向數據讀入緩存中寫入數據,保證LZ77壓縮算法控制模塊不需要等待數據,實現不間斷地對數據進行處理.Hash表存儲模塊:存儲已編碼字符的信息.一系列的測試結果[10]表明在搜索深度為4時,LZ77壓縮算法的效率已經達到極限范圍.因此,設計中沒有采用兩個RAM實現多級鏈表(以往的目的是減少資源),而是使用4個Read-First模式的RAM級聯,這樣可以在同一個讀周期內讀取多個Hash值,減少多次搜索對RAM進行操作的時間,從而達到加速的目的;并且可以根據搜索深度的配置使能相關的RAM.LZ77壓縮算法控制模塊:產生上述兩個模塊的控制信號,對數據流按照LZ77算法進行壓縮.

圖3 LZ77壓縮控制器電路結構Fig.3 Circuit structure of LZ77 compress controller

圖4所示為LZ77壓縮算法控制模塊中狀態機的狀態跳轉圖,在該狀態機中主要包括以下的8個狀態.

圖4 LZ77_FSM狀態跳轉圖Fig.4 State transition image of LZ77_FSM

1)INIT:LZ77壓縮算法控制器進行復位的周期,用于對Hash表存儲模塊進行初始化,該狀態同步輸出區間編碼控制器的初始化信號.

2)WAIT_DMA:LZ77壓縮算法控制模塊等待外部接口信號握手信號,當握手信號有效時進行下一步操作,否則在該狀態下繼續等待.

3)WAIT_SIZE:從總線上讀取數據,用于獲取輸入數據塊的大小.

4)LZ77_BEGIN:根據壓縮的當前位置向look-ahead buffer中填充新字符,并對前3個字節進行Hash變換,根據Hash存儲模塊的返回值區分當前的是新字符還是重復字符串.

5)LZ77_COMPLETE:當壓縮位置等于或者超出了壓縮數據塊大小的時候,則跳轉到該狀態,若此時數據交換接口通知已完成數據壓縮,則跳轉到INIT狀態,否則跳轉到WAIT_SIZE狀態.

6)LAST_BYTE:當前壓縮的位置為最后一個字節,直接進行新字符輸出,并且不對字典進行相關的更新,跳轉到LZ77_COMPLETE狀態.

7)REPEAT:跳轉到該狀態下,表示是一個重復字串,在該狀態下進行字符串的匹配,首先讀取當前指針所在區間的8 B數據,并且按照指針對齊進行匹配,在這個地方有可能只能匹配1 B,而后的過程中從數據讀入緩存中每次讀取8 B的數據(本設計中總線寬度是64,所以設定數據讀入緩存的數據寬度也為64,即8 B),與 look-ahead buffer中的數據進行比對,并根據比對結果決定是否繼續;在該過程中根據搜索深度進行相應次數的搜索,并在匹配的同時對Hash表存儲模塊中的數據進行更新;當找尋到最佳匹配長度時則生成相應的FLAG_repeat,LEN,DIS信息輸出(信號MATCH_BYTE和PREV_BYTE是區間編碼需要的).

8)NEW:跳轉到該狀態下,表示當前處理的是一個新字符,輸出信號 FLAG_new和 NEW_char;若上次輸出的是重復字串編碼,此時輸出信號 FLAG_new_after_repeat和 NEW_char.

2.2 區間編碼控制器

在LZ77壓縮控制器輸出壓縮的編碼后由區間編碼控制器進一步對數據流進行二次壓縮[11],如圖5所示為區間編碼控制器的結構圖,其中區間編碼算法控制模塊用于進一步的壓縮和編碼,RANGE_RAM模塊則是用于存儲相關的編碼概率信息,關于 RANGE_RAM區間分配如表2所示.

圖5 區間編碼控制電路結構圖Fig.5 Structure image of range encoder controller circuit

表2 RANGE_RAM中區間分配Table2 Interval distribution in RANGE_RAM

圖6所示是區間編碼算法控制模塊工作的簡要流程圖,各個狀態進行的操作以及狀態間跳轉關系如下所述.

1)CHOOSE:根據緩存中的LZ77編碼選擇進一步編碼的方式,當前指針對應字符是新字符時,則跳轉到LIT_ENC狀態下;當前指針對應字符是新字符,且上一狀態FLAG_repeat信號有效時,則跳轉到 LITMATCHED_ENC狀態下;當FLAG_repeat信號有效時,即當前指針為首地址的字符串為重復字串,則跳轉到LEN_ENC狀態;當所有的編碼結束后則跳轉到FLUSH狀態下.

2)LIT_ENC:對新字符進行壓縮編碼,首先對isMatch進行編碼,進一步的根據litprobs和當前的NEW_cha進行區間編碼,編碼完成后重新跳回到CHOOSE狀態.其中litprobs按照如下的關系計算:

圖6 區間編碼控制器狀態轉變Fig.6 State transition of range encoder controller

litprobs=PREV_BYTE?5*0x300

3)LITMATCHED_ENC:用于對重復字串后的新字符進行壓縮編碼,編碼根據PREV_BYTE、MATCH_BYTE和當前的NEW_char進行區間編碼,編碼完成后重新跳回到CHOOSE狀態下.

4)LEN_ENC:對重復長度LEN進行壓縮編碼.首先針對isMatch和isRep進行編碼,進一步地根據LEN值選擇choice1或choice2進行編碼,并且同時確定采用LOW,MID和HIGH中的一種編碼,編碼完成后跳轉到posSlot_ENC狀態下.

5)posSlot_ENC:對DIS進行變換,并對返回值posSlot進行編碼.根據 DIS變換的返回值posSlot有選擇地進行狀態跳轉:當4≤posSlot<14時,跳轉到posEncoder狀態;當posSlot≥14時,則跳轉到DIRECTBITS_ENC和posAlignEncoder狀態;若 posSlot不滿足上述情況,跳回 CHOOSE狀態.

6)posEncoder:根據 posSlot計算 footerBits,base和posReduced;并且編碼posReduced,編碼完成后跳轉到CHOOSE狀態下.其中footerBits,base和posReduced按照如下的關系計算:

footerBits=((posSlot?1)-1)

base=((2|(posSlot&1))?footerBits)

posReduced=pos-base

7)DIRECTBITS_ENC和 posAlignEncoder:根據 posSlot計算 footerBits,base 和 posReduced;并且編碼posReduced低四位的值,編碼完成后跳轉到CHOOSE狀態.

8)Flush:最后進行區間編碼器編碼輸出.

9)BIT_ENC:按照比特進行編碼,當區間值小于0xFFFFFF時,跳轉到ShiftLow狀態中,并且此時記憶當前的狀態.

10)ShiftLow:當區間下邊界小于0xFF000000或大于0xFFFFFFFF時,輸出區間的低八位作為區間編碼,當完成輸出后跳回到之前記憶的狀態中繼續執行.

2.3 數據讀出控制器

LZMA壓縮后的數據是按照字節輸出的,需要進一步將數據進行處理,轉換成適合在外部數據總線上傳輸的格式.圖7所示是將字節型數據組包成64 b位寬的數據讀出控制器.數據讀出控制器中添加了數據讀出緩存,與數據讀入緩存一樣,其中的數據讀出緩存中使用了乒乓方式對壓縮后的數據進行讀出,使壓縮可以不間斷地執行;只有當數據滿足可傳輸的條件時,控制器才會通知外部接口對數據進行讀出操作,這樣不需一直占用外部總線用以數據傳輸,可以有效地提高外部總線利用率.

圖7 數據讀出控制電路結構圖Fig.7 Structure image of read-out controller circuit

數據讀出需要滿足的條件:

1)一個數據緩存裝置中數據已存儲滿,輸出握手信號,通知外部接口可以從SEND_OUT數據總線上讀出數據,同時輸出本次讀出數據的大小;

2)當前對于輸入文件的壓縮已經結束,不管當前的數據存儲裝置中數據是否已滿,都將數據全部讀出,輸出握手信號,通知外部接口從SEND_OUT數據總線上讀出數據,同時輸出本次讀出數據的大小,并且通過壓縮完成信號,通知外部接口本次壓縮已經結束.

2.4 LZMA壓縮電路結構

圖8所示的LZMA壓縮電路是由上述3個子模塊組成,圖中相關信號定義和描述如表3所示.模塊采用硬件Verilog開發,使用Virtex-6 FPGA ML605開發套件[12-13]作為實驗平臺,能夠運行的最高頻率為159 MHz.

圖8 LZMA硬件電路結構圖Fig.8 Structure image of LZMA hardware circuit

表3 LZMA壓縮電路端口列表Table3 Ports lists of LZMA compression circuit

3 測試與性能

圖9是本文提出的LZMA壓縮算法硬件實現的一種典型應用系統,LZMA作為系統的一個協處理器,當進行數據壓縮時,PC通過PCIE高速總線接口由DMA_1向LZMA壓縮電路中寫入待壓縮的數據,當完成數據的壓縮后,將數據緩存到DMA_2中,經由PCIE向PC請求數據存儲,將壓縮的數據以LZMA的標準格式存儲到磁盤中的指定位置[14].在壓縮的過程中PC只需要在壓縮的初期對源文件和目標文件進行指定的配置即可,不會大量占用CPU資源;并且只在需要數據總線時才會請求獨占數據總線,不會影響系統中其他應用的正常運行.

選取Virtex-6 FPGA實驗平臺,測試了本文中LZMA算法硬件實現電路的功能和性能,所設計的硬件電路綜合后的最大主頻為159 MHz,集成了PCIE接口與 DMA功能,設定工作頻率為125 MHz,采用 Calgary Corpus標準測試文件[15]和一些其他文本文件測試;與之相比的是在一臺核心為Intel Corei3-2100 CPU@3.10 GHz工作站上全負荷運行的軟件LZMA算法.表4中的測試數據表明,在獲取同等壓縮率的同時,LZMA算法硬件實現電路取得了更快的壓縮速率,平均的壓縮速率約比基于軟件的LZMA壓縮算法快了10倍,以時鐘作為衡量標準時,相比軟件單時鐘可以處理高達200倍的數據.測試表明所設計的LZMA算法硬件實現電路不僅有效解決了現有軟件LZMA壓縮算法存在的問題,同時也大大的降低了功耗.

圖9 LZMA硬件電路典型應用Fig.9 Typical applications of LZMA hardware circuit

表4 LZMA算法硬件實現電路性能測試表Table4 Performance testing table of hardware implementation circuit of LZMA algorithm

4 結束語

本文在分析LZMA壓縮算法的基礎上,提出了一種基于FPGA實現的LZMA壓縮算法硬件電路,經實驗驗證表明:

1)與其他現有的數據硬件壓縮方式相比擁有更高的壓縮率;

2)在取得等同壓縮速率的同時能夠更為有效地節約有限的數據帶寬,更加符合大數據處理中對于存儲和傳輸帶寬的需求;

3)本文通過合理利用FPGA中的雙端口RAM、流水線結構等實現LZMA硬件電路,其壓縮速率比軟件LZMA算法的壓縮速率提高了10倍;

4)完全兼容標準的7zip文件格式,可以靈活地集成到其他的系統中.

到目前為止,只是完成了基于FPGA的驗證,并且所提出的LZMA算法硬件實現方式中,區間編碼控制器按照比特方式進行編碼,因此編碼效率較低,沒有完全體現LZ77壓縮控制器的性能.今后將進一步提升區間編碼控制器的性能,并選取合適的工藝庫,采用片上集成的硬件電路來驗證所提出的LZMA算法的硬件實現方式的性能.

References)

[1] Salomon D.Data compression:the complete reference[M].4th ed.London:Springer,2007:241-246.

[2] Pavlov I.7z format[EB/OL].US:Igor Pavlov,2013[2014-03-10].http://www.7-zip.org/7z.html.

[3] Klausman.Gzip,Bzip2 and LZMA compared[EB/OL].US:CEST,2008[2014-03-10].http://blog.i-no.de/archives/2008/05/08/.

[4] Rigler S,Bishop W,Kennings A.FPGA-based lossless data compression using Huffman and LZ77 algorithms[C]//Electrical and Computer Engineering.Canada:CCECE,2007:1235-1238.

[5] Ziv J,Lempel A.Universal algorithm for sequential data compression[J].IEEE Transactions on Information Theory,1977,IT-23(3):337-343.

[6] Ranganathan N,Henriques S.High-speed VLSI designs for Lempel-Ziv-based data compression[J].IEEE Transactions on Circuits and Systems II:Analog and Digital Signal Processing,1993,40(2):96-106.

[7] Shcherbakov I,Weis C,Wehn N.A high-performance FPGA-based implementation of the LZSS compression algorithm[C]//Data Compression Conference(DCC).Washington,DC:IEEE,2012:449-453.

[8] Martin G N N.Range encoding:an algorithm for removing redundancy from a digitized message[C]//IERE Conference Proceedings.London:IERE,1979,43:187-197.

[9] Pavlov I.LZMA SDK[EB/OL].US:Igor Pavlov,2013[2014-03-10].http://www.7zip.org/sdk.html.

[10] 孫圣.一種基于FPGA的Defalte壓縮算法研究與實現[D].桂林:桂林理工大學,2010.Sun S.A research and implementation of Deflate compression algorithm on FPGA[D].Guilin:Guilin University of Technology,2010(in Chinese).

[11] Shcherbakov I,Weis C,When N.A parallel adaptive range coding compressor:algorithm,FPGA prototype,evaluation[C]//Data Compression Conference(DCC).Piscataway,NJ:IEEE,2012,119-128.

[12] Xilinx.Xilinx FPGA[EB/OL].US:Xilinx,2011[2014-03-10].http://www.xilinx.com/products/silicon-devices/fpga/index.htm.

[13] Xilinx.ML605 Hardware User Guide[EB/OL].US:Xilinx,2011[2014-03-10].http://www.xilinx.com/support/documentation/boards_and_kits/ug534.pdf

[14] Leavline E J,Singh D A A G.Hardware implementation of LZMA data compression algorithm[J].International Journal of Applied Information Systems(IJAIS),2013,5(4):449-453.

[15] Calgary Corpus.Calgary corpus database[EB/OL].US:Calgary Corpus,1987[2014-03-10].http://en.wikipedia.org/wiki/Calgary_Corpus.

主站蜘蛛池模板: 成年人视频一区二区| 91亚洲精选| 国产欧美日韩专区发布| 亚洲欧美人成人让影院| 免费国产好深啊好涨好硬视频| 欧洲高清无码在线| 欧美日韩高清在线| 日韩欧美国产另类| 亚洲中文字幕在线观看| 丝袜国产一区| 欧美日韩在线成人| 国产欧美日韩91| 亚洲综合天堂网| 欧美区一区二区三| 国产真实乱子伦视频播放| 91成人精品视频| 国产在线视频自拍| 欧美精品一区在线看| 538精品在线观看| 99久久亚洲综合精品TS| 美女被躁出白浆视频播放| 黑人巨大精品欧美一区二区区| 久久黄色一级片| 无码啪啪精品天堂浪潮av| 国产精品视频第一专区| 国产在线自在拍91精品黑人| 国产99精品视频| 九色视频在线免费观看| 亚洲成年人网| 国产成+人+综合+亚洲欧美| 高潮毛片无遮挡高清视频播放| 国产成人久久综合777777麻豆| 亚洲午夜片| 国产精品污视频| 国产成人凹凸视频在线| 麻豆国产精品一二三在线观看| 日韩在线成年视频人网站观看| 福利一区三区| 成人看片欧美一区二区| 国产精品视频猛进猛出| 91精品aⅴ无码中文字字幕蜜桃| 3p叠罗汉国产精品久久| 国产综合色在线视频播放线视| 国产精品香蕉| 美女潮喷出白浆在线观看视频| 99视频在线免费观看| 国产乱人伦AV在线A| 久久久91人妻无码精品蜜桃HD| 成人免费视频一区二区三区| 亚洲欧美日韩精品专区| 人与鲁专区| 亚洲大尺码专区影院| 久久99热这里只有精品免费看| 国产91蝌蚪窝| 久热这里只有精品6| 色天堂无毒不卡| a级毛片网| 91色在线视频| 欧美一区中文字幕| 青青青视频免费一区二区| 综合人妻久久一区二区精品| 久久综合一个色综合网| 日韩免费无码人妻系列| 国产精品福利一区二区久久| 国产精品精品视频| 先锋资源久久| 午夜啪啪网| 免费一极毛片| 精品一区国产精品| 欧美精品亚洲二区| 狠狠操夜夜爽| 91人人妻人人做人人爽男同| 一级全黄毛片| 2020久久国产综合精品swag| 国产午夜人做人免费视频中文| 欧美日韩国产精品综合| 午夜不卡视频| 一级毛片免费播放视频| 99热6这里只有精品| 国产av一码二码三码无码| 四虎成人精品| 欧美亚洲一区二区三区导航 |