|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
6 ~* Z E8 [. N1 X6 t6 {0 t- j
基于 FPGA 的压缩算法加速实现: O8 L; C ~) a7 H
第一部分 设计概述 /Design Introduction; m M: u1 W7 X5 U
1.1设计目的
# u, \; t0 g% k z$ I# _本设计中,计划实现对文件的压缩及解压,同时优化压缩中所涉及的信号处理和计算密集型功能,实现对其的加速处理。本设计的最终目标是证明在充分并行化的硬件体系结构 FPGA 上实现该算法时,可以大大提高该算法的速度。我们将首先使用C语言进行代码实现,然后在Vivado HLS中综合实现,并最终在FPGA板(pynq-z2)上进行硬件实现,同时于jupyter notebook中使用python来进行功能验证。
% n9 U. V4 v! E' @) c* {( Y为使代码可综合同时又需要较少的硬件,我们已进行了许多改进,包括以下方面:5 `0 w$ ?, ?, c. V: H% q! B1 ` w
将所有浮点变量进行量化处理,量化为Q16.16定点,以简化算术运算。与定点相反,浮点型变量需要更多的硬件来执行某些操作。
% a$ e% H9 f: [4 d% m% j3 z将余弦矩阵实现为8×8查找表,从而消除了对昂贵的CORDIC引擎的需求。
9 B$ ~ q) l6 M0 `在顶层封装时选用AXILITE接口,用于将文件从处理器传输给FPGA并读回。这是PS端和PL端进行数据传输所必须的功能。1 T3 [ e/ B: ^4 S" l7 @
在各个功能函数分别进行流水线化,展开循环和内联功能,以最大程度地减少延迟并最大程度地提高吞吐量。0 O6 T" i$ B& g& M. }, v! U6 [" u
$ Q' w; W6 c' m& K2 Z
1.2 掌握技能; ]$ i t- O8 r" L6 e8 ?" N# r
在本项目中,学习到了如下:8 M3 F6 y, P+ Z9 O, M5 ~+ R" N
学习gzip的文件格式,及deflate压缩算法。能够使用deflate算法对文件进行压缩处理,同时将其封装为gzip型文件。% p0 R# | D) [ i# c0 O) E
学习了hls和python语言的使用。能够通过hls进行相关的IP核开发,同时能够使用python语言来对pynq-z2进行调试。$ R. R+ C$ n+ x; ?* D7 f
学习了vivado的使用核功能实现。能够灵活利用HLS和vivado来进行功能开发。
( j9 \/ `. t$ P1 Q* d" |% O1 v6 H0 l% p! Y
1.3 应用方向3 u' B5 f$ T% S, d- P
随着大数据时代来临,大量信息需要通过互联网进行传输,占用的网络资源急剧增加,给网络传输带来极大的压力。数据压缩技术能够节约数据存储空间、传输时间和带宽,从而缓解传输压力。无损压缩 Gzip 是目前最常用的一种压缩工具,被广泛应用在网络资料的下载和数据备份等领域。其中开源代码 zlib 是 Gzip 算法最著名的实现版本,但因其算法本身计算量较大,导致压缩的数据吞吐率较低。
. J5 \* x3 _! Y3 n6 D5 QFPGA 在数据处理速度上有着通用处理器无法比拟的巨大优势,能够大大提升Gzip的处理速度,减小CPU的开销。& P( D! t( l# @! G8 y4 o
& v ^% u& D9 g* ~6 ^) p
1.5 作品展示
/ P3 X1 X' o" [6 j% s整体功能已经实现,能够在pynq z2上通过gzip压缩方式对txt文件或大段字符串进行压缩。具体展示如图1,左侧是在hls仿真是产生的结果,右侧是通过jupyter notebook在pynq z2上进行调试的结果,两者是一致的,压缩功能能够正常运行。图2是jupyter notebook上部分python代码。
; J! h! k1 |. Q! m# ^
- `" y2 k0 Q0 _$ G( B& q% a
5 I3 I. |5 C8 k
第二部分 系统组成及功能说明 /System Construction & Function Description$ H; m" P* u. A+ W+ t1 q9 n
2.1 系统的功能实现6 C, _* H+ s1 m+ |' J% j$ d, ?
本设计中,在pynq-z2 FPGA平台上使用Gzip对文件进行了压缩算法的加速实现。整体分为两部分,硬件部分采用静态霍夫曼编码,使用deflate对文件进行压缩操作。Python模块将FPGA硬件的deflate输出进行封装,将其封装为gzip格式。
* |9 X( w* R8 ?+ X8 K6 D. N, U3 p- k7 b) ?6 Q- X9 {4 t
2.2 项目系统框图4 {2 E _7 a$ i3 H! g
系统结构框图如图3所示。& K5 g+ S' i8 O% [! Z8 C. r! ~
+ N- \. x4 O* [! O; X; L% S3 @5 ?$ f, q6 n2 f
2.3 gzip的基本组成. A, y" m" s' N9 I+ S
Gzip 压缩是广泛使用的数据压缩方案,核心是 Deflate算法,主要包括 LZ77 编码和哈夫曼编码两大部分。
, C- Y1 r" r, F9 i8 r u; k+ o6 T
7 h4 u3 d( s2 F* i- v2.3.1 gzip文件头的基本组成
% w- P) t* s8 K' d$ d9 g' ]0 Y+ H, E文件头部分结构如图4:. i+ v6 W# {) ` M8 q7 ?. G
. q4 Y- a/ ~' s l* ?. x上面两个“+”之间的内容代表一个字节,所以上面除了MTIME使用四个字节之外,其他只占用一个字节。
( y. ~) I) Z! L( M! EID1 和ID2(IDentification) :这两个字节用于标识gzip文件,其中,ID1 = 31(0x1f,\037),ID2 = 139(0x8b,\213),如果判断某文件以这两个字节开头,那么可以初步认为这是gzip文件,但具体是不是,必须该文件格式完全符合gzip文件格式才行;8 ]6 R0 `) v; A* |
CM (CompressionMethod):该字段用于标识当前gzip压缩文件内部的压缩结果所使用的压缩方法,取值范围[0,8],其中,[0,7]保留,目前只用8,即gzip使用deflate压缩方法;
! _7 v3 V# w+ `1 I% NFLG (FLaGs):标记位,该标记位中的每一比特分别代表后面对应扩展位是否存在,各比特位含义不在此处列举;1 _% t; M; G2 d1 y
MTIME (ModificationTIME):该字段给出了被压缩的原始文件最近被修改的时间。该时间使用Unix格式,即,自1970年1月1日0时起到现在的秒数。
/ X5 Y6 E5 v8 l' q O$ P$ O- N6 SXFL (eXtraFLags):该字段是用来记录gzip文件中所使用的压缩方法,由于当前gzip只使用一种压缩算法,即deflate,所以针对deflate,该字段有如下含义,
: G& V+ W4 D6 X& hXFL= 2 – 压缩率最大但是压缩速度最慢(的那个压缩级别);# F6 L8 t6 j* ~* L% e
XFL= 4 – 最快的压缩(级别);
: [ X: ~' b' \+ G4 i! k2 O/ w9 M+ WOS (OperatingSystem):该字段表示执行压缩操作的文件系统。该字段用于识别和确定确定文本文件的行结束标志。 |
|