找回密码
 注册
关于网站域名变更的通知
查看: 182|回复: 2
打印 上一主题 下一主题

基于FPGA的压缩算法加速实现

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-5-27 10:44 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
% d; g5 O: W( Q. L  B/ ^( r
基于 FPGA 的压缩算法加速实现
( }: r0 u0 q# Z8 y& _; m1 \2 V& k第一部分 设计概述 /Design Introduction
- N! l: D% F3 O: ?0 H2 q- D1.1设计目的! D5 e1 C/ B0 y: |% G
本设计中,计划实现对文件的压缩及解压,同时优化压缩中所涉及的信号处理和计算密集型功能,实现对其的加速处理。本设计的最终目标是证明在充分并行化的硬件体系结构 FPGA 上实现该算法时,可以大大提高该算法的速度。我们将首先使用C语言进行代码实现,然后在Vivado HLS中综合实现,并最终在FPGA板(pynq-z2)上进行硬件实现,同时于jupyter notebook中使用python来进行功能验证。/ H4 U, \/ q' _! U7 g- r! r
为使代码可综合同时又需要较少的硬件,我们已进行了许多改进,包括以下方面:; w; m6 w3 _, a+ z9 z7 p, L
将所有浮点变量进行量化处理,量化为Q16.16定点,以简化算术运算。与定点相反,浮点型变量需要更多的硬件来执行某些操作。! D- a1 {$ |0 q% ^; T
将余弦矩阵实现为8×8查找表,从而消除了对昂贵的CORDIC引擎的需求。
* U6 b) N* Z" A0 {在顶层封装时选用AXILITE接口,用于将文件从处理器传输给FPGA并读回。这是PS端和PL端进行数据传输所必须的功能。
3 S& n6 |& D; _  m在各个功能函数分别进行流水线化,展开循环和内联功能,以最大程度地减少延迟并最大程度地提高吞吐量。$ G% c- u: t; R$ b9 p

0 Q/ Y* Y( o# @/ z4 T( v7 j2 O% ?* _1.2 掌握技能
. ~$ J( s# H/ k. p, z' a) ^: }在本项目中,学习到了如下:1 k- |" g! y! t8 I8 w5 k
学习gzip的文件格式,及deflate压缩算法。能够使用deflate算法对文件进行压缩处理,同时将其封装为gzip型文件。' a8 Q9 M1 S2 v7 c- J. h6 s
学习了hls和python语言的使用。能够通过hls进行相关的IP核开发,同时能够使用python语言来对pynq-z2进行调试。" k" i/ Y. I0 _/ D* Z% A9 R8 q
学习了vivado的使用核功能实现。能够灵活利用HLS和vivado来进行功能开发。4 D' ]2 @7 E3 ^' C: y  V( E

7 x) C* C$ a; t1.3 应用方向. F0 b+ s& q' L" Y) P! Q! M
随着大数据时代来临,大量信息需要通过互联网进行传输,占用的网络资源急剧增加,给网络传输带来极大的压力。数据压缩技术能够节约数据存储空间、传输时间和带宽,从而缓解传输压力。无损压缩 Gzip 是目前最常用的一种压缩工具,被广泛应用在网络资料的下载和数据备份等领域。其中开源代码 zlib 是 Gzip 算法最著名的实现版本,但因其算法本身计算量较大,导致压缩的数据吞吐率较低。- e- _# l$ i  J6 l1 o
FPGA 在数据处理速度上有着通用处理器无法比拟的巨大优势,能够大大提升Gzip的处理速度,减小CPU的开销。
8 h, e1 T4 n2 Z5 q2 I+ V, z" H) p" I% c8 Z4 E4 F* e
1.5 作品展示0 Y. s4 _. ?: B9 B# D2 Y. R
整体功能已经实现,能够在pynq z2上通过gzip压缩方式对txt文件或大段字符串进行压缩。具体展示如图1,左侧是在hls仿真是产生的结果,右侧是通过jupyter notebook在pynq z2上进行调试的结果,两者是一致的,压缩功能能够正常运行。图2是jupyter notebook上部分python代码。
: \& {6 a, k' a0 z/ L, {$ o7 z9 o 0 p2 B/ r5 P2 Y9 j& f

9 L, Y2 O0 i2 A# e% D& y第二部分 系统组成及功能说明 /System Construction & Function Description
  U7 @8 E: e" ?2.1 系统的功能实现
& C4 j# ]1 u/ j+ w本设计中,在pynq-z2 FPGA平台上使用Gzip对文件进行了压缩算法的加速实现。整体分为两部分,硬件部分采用静态霍夫曼编码,使用deflate对文件进行压缩操作。Python模块将FPGA硬件的deflate输出进行封装,将其封装为gzip格式。- J7 b, l) u7 i. |: N; @2 G

4 h" ^8 F- [8 f2.2 项目系统框图) o+ }% {. u4 x3 T
系统结构框图如图3所示。: N2 g" J- T7 L' H: C/ k
2 @3 p: u9 s! Z& C  z$ c
' z: Q& L; K3 a# h; w" b
2.3 gzip的基本组成5 r/ D* G# w: P6 D4 `: _8 B2 p3 ]
Gzip 压缩是广泛使用的数据压缩方案,核心是 Deflate算法,主要包括 LZ77 编码和哈夫曼编码两大部分。. ?3 i3 v2 N) ^# _! e2 `
- y/ Q: M( A( _' F5 q
2.3.1 gzip文件头的基本组成
+ e7 a, w* e4 s: b文件头部分结构如图4:
2 X' S2 ?* n6 \0 L% F/ E) k; D( h . A+ E  s7 J4 W# l) E; Z- t
上面两个“+”之间的内容代表一个字节,所以上面除了MTIME使用四个字节之外,其他只占用一个字节。. r: ^. o4 O2 U; P
ID1 和ID2(IDentification) :这两个字节用于标识gzip文件,其中,ID1 = 31(0x1f,\037),ID2 = 139(0x8b,\213),如果判断某文件以这两个字节开头,那么可以初步认为这是gzip文件,但具体是不是,必须该文件格式完全符合gzip文件格式才行;
) O: e1 q' a# T0 Q+ pCM (CompressionMethod):该字段用于标识当前gzip压缩文件内部的压缩结果所使用的压缩方法,取值范围[0,8],其中,[0,7]保留,目前只用8,即gzip使用deflate压缩方法;! \. }! q* ~: Z+ D0 O  L
FLG (FLaGs):标记位,该标记位中的每一比特分别代表后面对应扩展位是否存在,各比特位含义不在此处列举;
$ v1 `9 d/ k+ ?* O3 a: D1 b+ d3 wMTIME (ModificationTIME):该字段给出了被压缩的原始文件最近被修改的时间。该时间使用Unix格式,即,自1970年1月1日0时起到现在的秒数。
* g: d; a0 ^9 n7 E8 X3 u3 A1 L8 S5 QXFL (eXtraFLags):该字段是用来记录gzip文件中所使用的压缩方法,由于当前gzip只使用一种压缩算法,即deflate,所以针对deflate,该字段有如下含义,
& P% @; w- M  j- t6 Y: `XFL= 2 – 压缩率最大但是压缩速度最慢(的那个压缩级别);
, }$ X( h6 n6 K. I+ d  ~. w) @XFL= 4 – 最快的压缩(级别);
0 w' w5 @% k. X% M# @* b& b% YOS (OperatingSystem):该字段表示执行压缩操作的文件系统。该字段用于识别和确定确定文本文件的行结束标志。

该用户从未签到

2#
发表于 2022-5-27 14:01 | 只看该作者
数据压缩后,还能进行计算和处理吗,这听起来很厉害啊。

该用户从未签到

3#
发表于 2022-5-27 15:48 | 只看该作者
厉害厉害,学习学习。笑嘻嘻
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-4 10:22 , Processed in 0.156250 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表