《電子技術(shù)應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 組合壓縮在存儲測試系統(tǒng)中的應用
組合壓縮在存儲測試系統(tǒng)中的應用
來源:電子技術(shù)應用2011年第5期
裴東興,任武林
中北大學 儀器科學與動態(tài)測試教育部重點實驗室,,山西 太原 030051
摘要: 在某些特殊的測試環(huán)境中,,存儲測試系統(tǒng)中既要求大容量數(shù)據(jù)存儲又要求微體積。為解決這一矛盾,在研究了游程壓縮和LZW兩種算法的基礎上,,提出了以FPGA為核心實現(xiàn)兩種算法的無損組合壓縮,利用FPGA芯片內(nèi)的RAM來建立字典,用VHDL語言和狀態(tài)機實現(xiàn)該壓縮算法。仿真和綜合驗證表明,通過FPGA實現(xiàn)該組合算法,,壓縮效果顯著,壓縮性能與壓縮速度均滿足系統(tǒng)要求。
中圖分類號: TP274.2
文獻標識碼: A
文章編號: 0258-7998(2011)05-0146-03
Application of combinational compression in storage test system
Pei Dongxing, Ren Wulin
Key Laboratory of Instrumentation Science & Dynamic Measurement, Ministry of Education, North University of China, Taiyuan 030051, China
Abstract: In some special test environment, storage test system is limited by high capacity data storage and small size. In order to solve above all, lossless combinational compression is implemented by FPGA on the basic of studying the run-length compression and LZW algorithm. A dictionary is established by internal memory of FPGA and the algorithm is achieved by VHDL and state machine. Simulation and verification indicate that combinational compression is an efficient algorithm, and compression performance and speed meets system requirements.
Key words : storage test system,;FPGA,;combinational compression;VHDL


    存儲測試系統(tǒng)是為完成特殊環(huán)境下測試而設計的電子物理系統(tǒng),它可在高溫,、高壓,、強沖擊振動、高過載等惡劣環(huán)境下自動完成被測信息的實時采集與存儲記憶[1],。在某些星載,、彈載測試系統(tǒng)中,測試環(huán)境惡劣,、測試時間長,,所需記錄的數(shù)據(jù)量較大。但測試裝置受到體積的限制,要在現(xiàn)有存儲容量基礎上獲取更多的信息,就需要進行相關的數(shù)據(jù)處理,。數(shù)據(jù)壓縮是減少數(shù)據(jù)量的有效手段之一,。數(shù)據(jù)壓縮通常分為有損壓縮和無損壓縮兩大類。為準確恢復出原始數(shù)據(jù)并結(jié)合測試數(shù)據(jù)的特點,,本文選用游程(RLE)和LZW兩種無損壓縮算法對數(shù)據(jù)進行組合壓縮,。
1 數(shù)據(jù)壓縮理論
    存儲測試系統(tǒng)作為一種信息采集系統(tǒng),目的是向使用者傳遞信息,。由于A/D轉(zhuǎn)換的位數(shù)是有限的,,所以信息采集系統(tǒng)只能產(chǎn)生有限的數(shù)據(jù),可以把數(shù)據(jù)采集系統(tǒng)看作是一種離散信源,。根據(jù)香農(nóng)信息論[2],,某離散消息xi所攜帶的信息量:

    平均信息量也稱為信息熵,是在采用無損壓縮時所能達到的壓縮的最小極限,。
 實際上,,消息序列的符號間往往還存在著一定的統(tǒng)計相關性[3],這將使得消息序列攜帶的信息量減少,。例如,,對一個標準余弦函數(shù)進行數(shù)據(jù)采集,不論采樣的數(shù)據(jù)量有多大,只需要知道這個函數(shù)的幅度,、頻率和起始相位就可以精確地表示這一數(shù)據(jù),。這在具體數(shù)據(jù)中就表現(xiàn)為重復出現(xiàn)的數(shù)據(jù)串,消除這些重復串,,降低數(shù)據(jù)中的統(tǒng)計相關性,,也是數(shù)據(jù)壓縮算法一般遵循的準則。實際的壓縮器在設計上往往不是單獨采用統(tǒng)計式或字典式壓縮法,,一般將幾種算法結(jié)合起來,,以達到高效率的壓縮比。
2 算法設計
2.1 算法選擇

  在對多組實測的數(shù)據(jù)進行分析后,,可以看出測試數(shù)據(jù)有一些典型的特征,。圖1是一典型的石油井下壓力測試數(shù)據(jù),由圖可以看出,測試數(shù)據(jù)一般都具有以下特征:
  (1)測試數(shù)據(jù)幅值比較連續(xù),相鄰數(shù)據(jù)差值較小,具有很強的統(tǒng)計相關性,。
  (2)大部分數(shù)據(jù)波動不大,只有少部分數(shù)據(jù)變化輻度較大。

    針對上述的測試數(shù)據(jù)(12 bit的AD轉(zhuǎn)換器)大部分波動很小(高4位數(shù)據(jù)基本保持不變),這樣的大量重復數(shù)據(jù)非常適合游程壓縮,。對于低8 bit數(shù)據(jù),雖然相鄰時刻的值不可能完全相同,但其值會在測試過程中多次出現(xiàn),。無損數(shù)據(jù)壓縮中,LZW是基于字典模型的一種壓縮算法,具有自適應的特點,非常適合這種數(shù)據(jù)的壓縮。表1是兩種算法組合與單獨使用LZW算法的對比,。從表1中可以看出,,采用這兩種算法結(jié)合的方式對數(shù)據(jù)進行組合壓縮可以獲得較好的壓縮效果。

2.2 游程壓縮算法
    游程編碼(RLE)是一種相對比較簡單的數(shù)據(jù)壓縮技術(shù),,容易以硬件實現(xiàn)壓縮,。實現(xiàn)游程編碼分為定長游程編碼和變長游程編碼兩種。本文采用8 bit定長游程編碼,,編碼流程如下:
    (1)初始化計數(shù)器cnt=1,,輸入首字節(jié)P;
    (2)判斷文件是否結(jié)束,。若結(jié)束,,輸出P和cnt,壓縮完成,;若沒有結(jié)束,,輸入次字節(jié)C,如果P=C且cnt<255,,cnt=cnt+1,則重復步驟(2),;如果P&ne;C,則輸出P和cnt,,重復步驟(1),。直到壓縮完成。
2.3 LZW壓縮算法
    LZW算法是一種面向通用數(shù)據(jù)的即時、高效,、簡單,易于實現(xiàn)的一種無損數(shù)據(jù)壓縮算法,不依賴于任何數(shù)據(jù)格式,具有很大的應用范圍,且是基于字典模型的算法實現(xiàn)的關鍵在于字典的建立和查找,。LZW算法的粗略描述如下[4]:
  Initialize Table
    STRING = get input character
    WHILE there are still input characters DO
       CHARACTER = get input character
         IF STRING+CHARACTER is in the string table then
           STRING = STRING+character
         ELSE
           Output the code for STRING
           Add STRING+CHARACTER to the string table
           STRING = CHARACTER
         END of IF
    END of WHILE
    Output the code for STRING
    Output End_flag
    由算法描述可見,LZW算法邏輯過程簡單,,能夠得到較快的壓縮速度,,易于硬件壓縮。
3 硬件實現(xiàn)
3.1 系統(tǒng)整體設計

    Cyclone II是Altera公司推出的新一代低成本系列FPGA器件[5],,本設計選用Cyclone II系列的EP2C5T144I8芯片來實現(xiàn)數(shù)據(jù)的組合壓縮,。EP2C5T144I8芯片具有4 608個LE(邏輯單元)、26個M4 K的RAM,、13個嵌入式乘法器,、2個PLL(鎖相環(huán))和158個用戶I/O引腳。系統(tǒng)的整體框圖如圖2所示,。傳感器采集到信號后,,經(jīng)過模擬適配電路進行濾波、放大后進入AD轉(zhuǎn)換器,由AD轉(zhuǎn)換器轉(zhuǎn)換輸出12 bit的數(shù)據(jù)流輸入到FPGA進行壓縮,。高4 bit數(shù)據(jù)進行游程壓縮,,低8 bit數(shù)據(jù)進行LZW壓縮,最后將壓縮后的輸出數(shù)據(jù)流存儲到外部存儲器中,。采集完成后,,通過USB專用接口電路將壓縮后的數(shù)據(jù)從外部存儲器中讀入計算機保存下來,然后用專用軟件對壓縮后的數(shù)據(jù)進行解壓,,還原出原始采集到的數(shù)據(jù)以便進一步進行分析處理,。

 

 

3.2 算法的FPGA實現(xiàn)
    系統(tǒng)的設計核心是壓縮算法實現(xiàn)。由于游程壓縮實現(xiàn)簡單,,下面重點討論LZW算法的實現(xiàn),。用FPGA實現(xiàn)LZW算法要解決以下幾個問題[6]:
    (1)壓縮過程中字典的緩存。因為所有數(shù)據(jù)處理和傳輸工作都是由FPGA 完成,字典的緩存必須使用FPGA內(nèi)部有限RAM 資源,。(2)字典的建立與更新,。字典的建立使用FPGA 片內(nèi)資源來完成, 大容量字典雖然會提高壓縮比,但必須考慮到FPGA內(nèi)部的資源量,。因此選用9 bit的定長編碼方式對數(shù)據(jù)進行處理,。(3)壓縮后輸出數(shù)據(jù)流的傳輸和存儲。由于壓縮后是9 bit的數(shù)據(jù)流,,不利于數(shù)據(jù)的存儲,。因此需將9 bit的數(shù)據(jù)流轉(zhuǎn)換成8 bit的數(shù)據(jù)流進行傳輸和存儲。FPGA設計過程中模塊劃分非常重要,好的模塊劃分能夠大大減少邏輯所消耗的面積和優(yōu)化功能的時序關鍵路徑,。LZW算法實現(xiàn)劃分了8個模塊,,各個模塊相互之間的連接如圖3所示,。整個壓縮過程都是在狀態(tài)機控制模塊(U5)下進行的。

3.3 結(jié)果與分析
    本文對所實現(xiàn)壓縮算法進行了綜合與仿真驗證,使用開發(fā)工具為Altera公司的QuartusII 7.2,使用Modelsim SE 6.1f仿真工具,用圖4所示的字符串作為輸入碼流進行測試,。圖中datain表示輸入數(shù)據(jù),dataout表示壓縮輸出碼流,,以16進制表示,用于驗證壓縮的正確性,。仿真結(jié)果與通過計算機軟件壓縮的結(jié)果完全一致,。如圖4所示,本設計完全可行,。
    經(jīng)過綜合, 算法的實現(xiàn)使用了20個引腳,,占用了13%的邏輯單元,使用了33%的內(nèi)部RAM存儲容量,綜合所得最高時鐘工作頻率為80 MHz,,實時壓縮速度達到8 MB,。表2是一組實測數(shù)據(jù)的壓縮效果。
    本文介紹的在以FPGA為核心的存儲測試系統(tǒng), 實現(xiàn)了數(shù)據(jù)的無損組合壓縮,。通過相關仿真和綜合驗證, 壓縮效果顯著,,大大減少了對存儲空間的要求,實現(xiàn)了壓縮性能與壓縮速度的統(tǒng)一,。算法主體結(jié)構(gòu)用VHDL語言編寫, 具有可移植性,,可廣泛地應用于各種基于FPGA的數(shù)據(jù)壓縮系統(tǒng)中,有很大的應用價值,。
參考文獻
[1] 張文棟.存儲測試系統(tǒng)的設計理論及其應用[M].北京:高等教育出版社, 2002.
[2] 吳家安.數(shù)據(jù)壓縮技術(shù)及應用[M].北京:科學出版社, 2009.
[3] 朱琳,羅家融,田一海.核聚變實驗數(shù)據(jù)采集系統(tǒng)中數(shù)據(jù)壓縮算法的研究[J].計算機工程,2003,2(29):11-12.
[4] MARK N. LZW data compression[EB/OL].1989.http:marknelson.us/lzw-data-compression/.1989-10-01.
[5] Altera Corporation. Cyclone II device handbook,volume 1. 2007.
[6] 陳晉敏,黃春明,周軍.激光雷達數(shù)據(jù)無損壓縮的FPGA實現(xiàn)[J].計算機測量與控制,2007,15(1):100-102.

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載,。