在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于FPGA的壓縮算法設計

FPGA技術江湖 ? 來源:FPGA技術江湖 ? 作者:FPGA技術江湖 ? 2025-07-10 11:09 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

第一部分 設計概述 /Design Introduction

1.1設計目的

1804e918-5ac7-11f0-baa5-92fbcf53809c.png

本設計中,計劃實現對文件的壓縮及解壓,同時優化壓縮中所涉及的信號處理和計算密集型功能,實現對其的加速處理。本設計的最終目標是證明在充分并行化的硬件體系結構 FPGA 上實現該算法時,可以大大提高該算法的速度。我們將首先使用C語言進行代碼實現,然后在Vivado HLS中綜合實現,并最終在FPGA板(pynq-z2)上進行硬件實現,同時于jupyter notebook中使用python來進行功能驗證。

為使代碼可綜合同時又需要較少的硬件,我們已進行了許多改進,包括以下方面:

將所有浮點變量進行量化處理,量化為Q16.16定點,以簡化算術運算。與定點相反,浮點型變量需要更多的硬件來執行某些操作。

將余弦矩陣實現為8×8查找表,從而消除了對昂貴的CORDIC引擎的需求。

在頂層封裝時選用AXILITE接口,用于將文件從處理器傳輸給FPGA并讀回。這是PS端和PL端進行數據傳輸所必須的功能。

在各個功能函數分別進行流水線化,展開循環和內聯功能,以最大程度地減少延遲并最大程度地提高吞吐量。

1.2 掌握技能

在本項目中,學習到了如下:

學習gzip的文件格式,及deflate壓縮算法。能夠使用deflate算法對文件進行壓縮處理,同時將其封裝為gzip型文件。

學習了hls和python語言的使用。能夠通過hls進行相關的IP核開發,同時能夠使用python語言來對pynq-z2進行調試。

學習了vivado的使用核功能實現。能夠靈活利用HLS和vivado來進行功能開發。

1.3 應用方向

隨著大數據時代來臨,大量信息需要通過互聯網進行傳輸,占用的網絡資源急劇增加,給網絡傳輸帶來極大的壓力。數據壓縮技術能夠節約數據存儲空間、傳輸時間和帶寬,從而緩解傳輸壓力。無損壓縮 Gzip 是目前最常用的一種壓縮工具,被廣泛應用在網絡資料的下載和數據備份等領域。其中開源代碼 zlib 是 Gzip 算法最著名的實現版本,但因其算法本身計算量較大,導致壓縮的數據吞吐率較低。

FPGA 在數據處理速度上有著通用處理器無法比擬的巨大優勢,能夠大大提升Gzip的處理速度,減小CPU的開銷。

1.4 團隊分工

李佩琦負責hls和vivado實現,同時使用python進行功能驗證。

馮一飛負責資料查找,同時負責協助李佩琦進行功能實現和功能測試。

1.5 作品展示

整體功能已經實現,能夠在pynq z2上通過gzip壓縮方式對txt文件或大段字符串進行壓縮。具體展示如圖1,左側是在hls仿真是產生的結果,右側是通過jupyter notebook在pynq z2上進行調試的結果,兩者是一致的,壓縮功能能夠正常運行。圖2是jupyter notebook上部分python代碼。

18149d4a-5ac7-11f0-baa5-92fbcf53809c.png

圖 1

18250446-5ac7-11f0-baa5-92fbcf53809c.png

圖2

第二部分 系統組成及功能說明 /System Construction & Function Description

2.1 系統的功能實現

本設計中,在pynq-z2 FPGA平臺上使用Gzip對文件進行了壓縮算法的加速實現。整體分為兩部分,硬件部分采用靜態霍夫曼編碼,使用deflate對文件進行壓縮操作。Python模塊將FPGA硬件的deflate輸出進行封裝,將其封裝為gzip格式。

2.2 項目系統框圖

系統結構框圖如圖3所示。

1804e918-5ac7-11f0-baa5-92fbcf53809c.png

圖3

2.3 gzip的基本組成

Gzip 壓縮是廣泛使用的數據壓縮方案,核心是 Deflate算法,主要包括 LZ77 編碼和哈夫曼編碼兩大部分。

2.3.1 gzip文件頭的基本組成

文件頭部分結構如圖4:

18b44a20-5ac7-11f0-baa5-92fbcf53809c.png

圖4

上面兩個“+”之間的內容代表一個字節,所以上面除了MTIME使用四個字節之外,其他只占用一個字節。

ID1 和ID2(IDentification) :這兩個字節用于標識gzip文件,其中,ID1 = 31(0x1f,?37),ID2 = 139(0x8b,213),如果判斷某文件以這兩個字節開頭,那么可以初步認為這是gzip文件,但具體是不是,必須該文件格式完全符合gzip文件格式才行;

CM (CompressionMethod):該字段用于標識當前gzip壓縮文件內部的壓縮結果所使用的壓縮方法,取值范圍[0,8],其中,[0,7]保留,目前只用8,即gzip使用deflate壓縮方法;

FLG (FLaGs):標記位,該標記位中的每一比特分別代表后面對應擴展位是否存在,各比特位含義不在此處列舉;

MTIME (ModificationTIME):該字段給出了被壓縮的原始文件最近被修改的時間。該時間使用Unix格式,即,自1970年1月1日0時起到現在的秒數。

XFL (eXtraFLags):該字段是用來記錄gzip文件中所使用的壓縮方法,由于當前gzip只使用一種壓縮算法,即deflate,所以針對deflate,該字段有如下含義,

XFL= 2 – 壓縮率最大但是壓縮速度最慢(的那個壓縮級別);

XFL= 4 – 最快的壓縮(級別);

OS (OperatingSystem):該字段表示執行壓縮操作的文件系統。該字段用于識別和確定確定文本文件的行結束標志。

2.3.2 gzip文件尾和文件體的基本組成

相比gzip文件頭,gzip文件尾較簡單,只由四個字節構成,結構如圖5:

18cabc38-5ac7-11f0-baa5-92fbcf53809c.png

圖 5

CRC32 (Cyclic Redundancy Check):用標準循環冗余校驗算法對原始數據進行計算的結果。

ISIZE (InputSIZE):將原始數據大小對2^32取模的結果。

上面已經將整個gzip文件的基本文件格式分析完畢,下面簡單介紹gzip文件的文件體。該文件體主要與壓縮算法deflate相關。因為只要用到deflate的文件格式,該部分都是一樣的,比如gzip的文件體和PKzip的文件體“基本”是一樣的,因為它們都使用deflate進行壓縮。

2.4 DEFLATE 算法原理

DEFLATE 算法標準是由兩個壓縮算法聯合構成的,壓縮流程如6圖所示,其中主要包含 LZ77 和哈夫曼編碼。首先利用 LZ77 算法進行字典查找替代,消除重復信息,然后進行哈夫曼編碼構造平均長度最短的壓縮碼流。

18d72c20-5ac7-11f0-baa5-92fbcf53809c.png

圖6

2.5 LZ77 算法

LZ77 算法是一種基于字典模型的壓縮算法。DEFLATE 算法中用到的 LZ77 算法是在原始 LZ77 算法的基礎上略加改進得到的,但算法基本思想保持不變。其基本原理為:將先輸入的數據作為字典信息進行保存,利用數據中存在字符串重復帶來的數據冗余性,根據字典中存儲的歷史數據對后續數據進行替換達到壓縮的目的。

具體在 Gzip 壓縮的參考軟件代碼 zlib 中實現 LZ77 算法的流程為:首先讀入緩存窗口大小 CHUNK 的數據,其中窗口的大小與匹配最大距離 MAX_MATCH 有關;依次計算輸入字符串的哈希值,將哈希值的作為字典地址的索引值,將字符串的位置信息依次存放在由哈希鏈表組成的字典中其哈希值對應的位置上;然后對當前的字符串根據索引值查找可能匹配的歷史字符串并進行最長匹配查找,判斷是否滿足匹配條件,若滿足則進行匹配對的替換;若不滿足則按照原始字符串輸出。對于 LZ77 壓縮算法的實現關鍵點在于歷史字符串的存儲、當前字符串的匹配查找、以及最長匹配選擇。

2.6 Huffman 編碼

哈夫曼編碼( Huffman coding )在數據壓縮的分類中提到,是一種基于統計模型的壓縮算法。其編碼理論依據是統計符號出現的概率,對符號按照概率從小到大進行排序,將其中出現概率最小的符號分配最長的編碼長度,按照這樣的規則進行變長編碼,達到平均編碼長度最小。具體編碼過程為:首先統計不同符號出現的概率,然后根據概率構建哈夫曼樹,最后根據哈夫曼樹得到每個符號的哈夫曼編碼。具體步驟如下:

步驟 1:統計 n 個不同信源符號出現的概率;

步驟 2:將概率按照從大到小的順序進行排列,并將其作為節點數為 1的子樹;

18eb6b4a-5ac7-11f0-baa5-92fbcf53809c.png

圖7

步驟 3:選出概率最小的兩個信源符號所在的子樹構成新的子樹,并且新合成的子樹概率為這兩個信源符號的概率相加;

步驟 4:重復步驟 3,直到所有信源符號的所在子樹均被加入到同一樹中;

步驟 5. 對構建的樹所有父節點的左結點標記為 0,右結點標記為 1;

步驟 6. 統計根節點到每個子節點的路徑,按照步驟 5 中 0-1 標記的路徑就是對應葉節點信源的哈夫曼編碼。

18fe38d8-5ac7-11f0-baa5-92fbcf53809c.png

圖8

另外,在 Gzip 壓縮中,哈夫曼編碼的實現有兩種:分別為靜態哈夫曼編碼和動態哈夫曼編碼。其中靜態哈夫曼編碼不需要對編碼的字符做頻率統計,而是直接根據預先定義的編碼規范表查找進行編碼;似的,在解碼的過程中也不需要統計頻率而直接使用與編碼一致的編碼規范表進行解碼。對于動態哈夫曼編碼則遵循哈夫曼編碼的原理,需要對出現的字符進行頻率統計,生成哈夫曼樹,再據此生成編碼表進行編碼。

在本設計中,我們采用靜態哈夫曼編碼來進行實現。

第三部分 完成情況及性能參數 /Final Design & Performance Parameters

整體功能已經實現。并具備一定的加速效果,相比純arm進行壓縮速度提高了1.6倍。Vivado硬件工程能夠通過綜合、應用、生成比特流。最后通過Jupyter Notebook在pynq z2平臺上進行功能驗證。具體展示如圖9,左側是在hls仿真是產生的結果,右側是通過jupyter notebook在pynq z2上進行調試的結果,兩者是一致的,壓縮功能能夠正常運行。

18149d4a-5ac7-11f0-baa5-92fbcf53809c.png

圖9

圖10,圖11中,hls正常進行仿真,首先通過壓縮算法對txt文件或字符串進行壓縮,接著進行解壓操作,將解壓后的代碼與源代碼進行比較,如果結果一致,則能夠驗證壓縮算法本身功能的準確性。

1923d17e-5ac7-11f0-baa5-92fbcf53809c.png

圖10

194515f0-5ac7-11f0-baa5-92fbcf53809c.png

圖11

在圖12,圖13中,我們展示了部分壓縮算法代碼及優化指令,整體設計的源代碼為github上的開源代碼,在優化后我們外部的接口采用hls::stream的形式,內部使用到了pipeline,unroll等。

1957a800-5ac7-11f0-baa5-92fbcf53809c.png

圖12

1966b886-5ac7-11f0-baa5-92fbcf53809c.png

圖 13

在圖14,15中我們展示資源占比情況和時序分析,進行優化后實現了部分流水。

19772c48-5ac7-11f0-baa5-92fbcf53809c.png

圖14

198e92ac-5ac7-11f0-baa5-92fbcf53809c.png

圖15

圖16中,vivado電路設計圖中hls生成的gzip ip核通過dma與ps端進行數據交互。

19a12390-5ac7-11f0-baa5-92fbcf53809c.png

圖16

圖17中,我們展示notebook部分調試代碼,為了方便查看對部分輸出結果進行輸出,與HLS仿真結果進行對比發現結果正確,達到了最初的設計要求。

19b9fa96-5ac7-11f0-baa5-92fbcf53809c.png

18149d4a-5ac7-11f0-baa5-92fbcf53809c.png

圖17

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19882

    瀏覽量

    234950
  • FPGA
    +關注

    關注

    1645

    文章

    22034

    瀏覽量

    617979
  • C語言
    +關注

    關注

    180

    文章

    7632

    瀏覽量

    141527
  • 壓縮算法
    +關注

    關注

    1

    文章

    22

    瀏覽量

    10630

原文標題:基于 FPGA 的壓縮算法加速實現

文章出處:【微信號:HXSLH1010101010,微信公眾號:FPGA技術江湖】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    FPGA實現滑動平均濾波算法和LZW壓縮算法

    采集數據中的量化噪聲,在進行數據壓縮前采用濾波的預處理技術。介紹LZW算法和滑動濾波算法的基本理論,詳細闡述用單片FPGA實現兩種算法的方法
    發表于 04-24 09:05

    基于FPGA的數字脈沖壓縮技術

    基于FPGA的數字脈沖壓縮技術1.數字脈沖壓縮實現原理2.電路設計2.1APEX2OKE系列FPGA 簡介2.2 基于FPGA
    發表于 03-02 09:41

    語音壓縮算法研究

    希望廣大DSP大俠們幫我出出主意,怎么才能寫一個好的音頻壓縮算法,最好是在時域的壓縮。頻域的壓縮發現都相對比較復雜。大家好,我是做語音芯片的。最近想研究一種
    發表于 09-18 17:38

    FPGA圖像壓縮設計開發

    FPGA 2支持算法SPIHT 3壓縮性能支持有損壓縮和無損壓縮 4數據處理能力數據率:≥30M samples/s 5圖像數據支持串行和1
    發表于 08-01 15:27

    什么是壓縮算法呢?壓縮算法又是怎么定義的呢?

    認識壓縮算法想必都有過壓縮和解壓縮文件的經歷,當文件太大時,我們會使用文件壓縮來降低文件的占用空間。比如微信上傳文件的限制是100MB,有個
    發表于 07-28 07:22

    認識壓縮算法

    壓縮算法認識壓縮算法我們想必都有過壓縮和 解壓縮文件的經歷,當文件太大時,我們會使用文件
    發表于 07-28 08:12

    壓縮算法是怎么定義的呢

    什么是壓縮算法呢?壓縮算法又是怎么定義的呢?文件是如何存儲的?
    發表于 10-19 07:01

    基于LZW算法的數據無損壓縮硬件實現

    本文利用FPGA實現了改進的LZW壓縮算法,仿真證明其算法具有很高壓縮率,適合工程的實際應用。
    發表于 04-02 10:59 ?4094次閱讀
    基于LZW<b class='flag-5'>算法</b>的數據無損<b class='flag-5'>壓縮</b>硬件實現

    一種圖像動態范圍壓縮算法及其FPGA實現

    一種圖像動態范圍壓縮算法及其FPGA實現,感興趣的小伙伴們可以看一看。
    發表于 09-14 17:17 ?5次下載

    神經網絡圖像壓縮算法FPGA實現技術研究

    神經網絡圖像壓縮算法FPGA實現技術研究,下來看看
    發表于 09-17 07:29 ?19次下載

    空間圖像CCSDS壓縮算法研究與FPGA實現

    空間圖像CCSDS壓縮算法研究與FPGA實現,感興趣小伙伴們可以瞧一瞧。
    發表于 09-18 14:57 ?17次下載

    FPGA實現滑動平均濾波算法和LZW壓縮算法的論文資料說明

    針對數據采集系統高速長時間的采樣和后端數據傳榆及存儲能力有限的問題,提出基于FPGA的數據壓縮解決方案。同時為平滑采集數據中的量化噪聲,在進行數據壓縮前采用濾波的預處理技術。介紹LZW算法
    發表于 01-25 14:26 ?4次下載
    <b class='flag-5'>FPGA</b>實現滑動平均濾波<b class='flag-5'>算法</b>和LZW<b class='flag-5'>壓縮</b><b class='flag-5'>算法</b>的論文資料說明

    如何使用FPGA實現空間圖像CCSDS壓縮算法的設計

    的存儲容量和傳輸帶寬,它的研究對于遙感圖像的應用具有重要的現實意義。CCSDS圖像壓縮算法是空間數據系統咨詢委員會(CCSDS)提出的圖像數據壓縮算法。該
    發表于 02-05 15:54 ?6次下載
    如何使用<b class='flag-5'>FPGA</b>實現空間圖像CCSDS<b class='flag-5'>壓縮</b><b class='flag-5'>算法</b>的設計

    如何使用FPGA實現圖像動態范圍壓縮算法

    灰度動態范圍壓縮是一種基本的圖像增強處理方法,廣泛應用于圖像識別,視頻監控等領域中。結合這一應用,提出了一種基于非線性變換的動態范圍壓縮算法,并且以FPGA為基礎,針對一幅圖像的處理進
    發表于 02-05 17:00 ?22次下載
    如何使用<b class='flag-5'>FPGA</b>實現圖像動態范圍<b class='flag-5'>壓縮</b><b class='flag-5'>算法</b>

    FPGA壓縮算法有哪些

    在圖像壓縮算法中可以采用哈夫曼編碼的方式對編碼冗余的信息進行壓縮,可以采用預測的方式來減少像素間冗余,可以采用量化的方式完成心理視覺冗余信息的去除
    的頭像 發表于 04-15 11:48 ?1057次閱讀
    <b class='flag-5'>FPGA</b><b class='flag-5'>壓縮</b><b class='flag-5'>算法</b>有哪些
    主站蜘蛛池模板: 成人狠狠色综合 | 手机看片福利盒子久久青 | 日产精品卡二卡三卡四卡乱码视频 | 丁香六月综合网 | 日韩精品视频免费观看 | 1314酒色网| 女人张开腿男人猛桶视频 | 亚洲 欧美 另类 吹潮 | аⅴ资源天堂8在线 | www.五月婷婷.com | youjizz国产 | 天堂在线观看视频观看www | 一区二区三区在线观看免费 | 国漫在线观看 | 男女全黄做爰视频 | 大香交伊人 | 狠狠色狠狠色狠狠五月ady | 成人在线黄色 | 国产情侣真实露脸在线最新 | 午夜欧美视频 | 国产成人精品亚洲日本在线 | 全部在线播放免费毛片 | 韩国午夜精品理论片西瓜 | 色视频免费版高清在线观看 | freesex性欧美炮机喷潮 | 天堂在线www| 午夜看片 | 激情5月婷婷 | 国产h在线播放 | 4438全国最大成人免费高清 | 美女扒开尿口给男人看的让 | 2020国产v亚洲v天堂高清 | 日本免费黄色片 | 成人免费看黄页网址大全 | 成人a一级毛片免费看 | 国产黄色小视频网站 | 亚洲www网站| 综合免费视频 | 九九热视频免费在线观看 | 欧美一级片免费观看 | 久久精品99无色码中文字幕 |