新聞中心

        EEPW首頁 > EDA/PCB > 設計應用 > LZW改進壓縮算法的FPGA實現

        LZW改進壓縮算法的FPGA實現

        作者: 時間:2011-03-25 來源:網絡 收藏


        傳統的采用8位數據輸入,固定長度編碼輸出,隨著字典內容的不斷增多,輸出編碼的位數不斷增加勢必造成資源的浪費,也會損失壓縮率。另外,由于字典的容量有限,隨著壓縮過程的進行,字典會被填滿,若是簡單的不再向字典中增加內容,那么后面的壓縮率就會降低,而如果將字典全部清除重新建立字典,在字典建立初期壓縮率也是很低的。針對以上不足,文獻對算法做以下改進:采用12位數據作為壓縮輸入,變長度的碼字輸出。
        壓縮字典最多可容納16 384個碼,共分為三部分,其中0~4 095為12位輸出,4 096~8 191為13位,8 192~16 383為14位。每當輸出長度變化時,同時輸出一個變長標識,便于解碼器解碼。

        2 算法實現
        2.1 算法實現硬件結構

        LZW數據硬件實現,其內部功能模塊劃分如圖2所示。


        2.2 各功能模塊說明
        輸入/輸出數據緩存模塊完成所有數據傳輸工作,為了保證異步時鐘域數據同步,使用FPGA片內的Block RAM構成一個FIFO對輸入數據進行緩存。
        字典存儲器模塊需要存放字典項的三部分內容:字典項編碼、前綴碼、當前碼。將存儲器的容量設計為1K。采用FPGA內部宏單元lpm-ram-dp(單口RAM)設計字典存儲器。
        算法實現模塊要實現匹配串的查找、判斷字典相應地址內容是否為空、比較字典地址相應內容是否匹配或沖突、沖突時重新生成地址、壓縮編碼輸出控制、壓縮結束控制等功能。
        外接閃存數據寬度為8位,所以壓縮后輸出數據位數需要轉換。數據轉換模塊就是實現壓縮后數據由13位向8位的轉換。
        時鐘處理與控制模塊主要完成時鐘的匹配與控制,對各個功能模塊分配時鐘,并初始化各使能端信號。
        2.3 仿真結果
        清空字典存儲器模塊,初始化信號,將可能出現的單字符存入字典,壓縮時新傳續存地址為4096,新字符串輸入時產生相應的哈希表地址與偏移量;然后讀字典存儲器相應地址的內容,如內容為空則輸出輸入的數據,并把相應內容存入字典,如內容匹配,則繼續輸入下一數據,否則(即發生沖突)產生新的哈希表地址,重新讀取字典,進行判斷、比較。仿真時序如圖3所示。


        仿真結果:輸入數據為5,6,7,8,9,5,6,7,8,9,5,6,7,…;輸出數據為5,6,7,8,9,4 098,4 100,4 102,…。仿真結果與理論計算值一致。

        3 結 論
        LZW算法邏輯簡單,實現速度快,擅長于壓縮重復出現的字符串;無需事先統計各字符的出現概率,一次掃描即可;相對于其他算法,更有利于硬件實現。本文利用FPGA實現了改進的LZW,仿真證明其算法具有很高壓縮率,適合工程的實際應用。


        上一頁 1 2 下一頁

        關鍵詞: FPGA LZW 壓縮算法

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 漳浦县| 冀州市| 嘉峪关市| 丽江市| 西林县| 怀柔区| 松滋市| 普定县| 大足县| 罗定市| 资源县| 揭东县| 余姚市| 汪清县| 新绛县| 崇信县| 鄂托克前旗| 中方县| 林西县| 岳池县| 青铜峡市| 五莲县| 河北省| 德兴市| 淳化县| 武强县| 桦甸市| 双峰县| 金川县| 云龙县| 尖扎县| 康保县| 抚宁县| 朝阳区| 河北省| 台湾省| 武胜县| 洞口县| 海阳市| 盖州市| 晴隆县|