CN102970043A - 一种基于gzip的压缩硬件系统及其加速方法 - Google Patents

一种基于gzip的压缩硬件系统及其加速方法 Download PDF

Info

Publication number
CN102970043A
CN102970043A CN2012104586431A CN201210458643A CN102970043A CN 102970043 A CN102970043 A CN 102970043A CN 2012104586431 A CN2012104586431 A CN 2012104586431A CN 201210458643 A CN201210458643 A CN 201210458643A CN 102970043 A CN102970043 A CN 102970043A
Authority
CN
China
Prior art keywords
unit
code word
buffer unit
huffman
matching length
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2012104586431A
Other languages
English (en)
Other versions
CN102970043B (zh
Inventor
汤晓东
狄永清
李冰
李玮
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
WUXI XINXIANG ELECTRONIC TECHNOLOGY Co Ltd
Original Assignee
WUXI XINXIANG ELECTRONIC TECHNOLOGY Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by WUXI XINXIANG ELECTRONIC TECHNOLOGY Co Ltd filed Critical WUXI XINXIANG ELECTRONIC TECHNOLOGY Co Ltd
Priority to CN201210458643.1A priority Critical patent/CN102970043B/zh
Publication of CN102970043A publication Critical patent/CN102970043A/zh
Application granted granted Critical
Publication of CN102970043B publication Critical patent/CN102970043B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

本发明公布了一种基于GZIP的压缩硬件系统及其加速方法,包括输入缓存单元,用于对输入数据进行缓存;LZ77编码单元;动态新字符/匹配长度Huffman编码频率统计控制单元;动态指回距离Huffman编码频率统计控制单元;动态新字符/匹配长度Huffman编码单元;动态指回距离Huffman编码单元;动态码字长度Huffman编码单元;静态新字符/匹配长度Huffman编码单元;静态指回距离Huffman编码单元;数据打包单元;输出缓存单元。本压缩硬件系统可实现GZIP压缩算法、做到与软件实现相兼容、提升GZIP压缩的数据吞吐率,使得数据压缩过程中无需CPU的干预。

Description

一种基于GZIP的压缩硬件系统及其加速方法
 
技术领域
本发明涉及一种基于GZIP压缩硬件系统实现与加速方法;属于数据压缩技术领域。
背景技术
随着云计算技术的发展,海量数据存储和传输越来越严峻。因此,数据无损压缩技术得到广泛的应用以减少数据存储空间、提升数据传输效率。GZIP,即GNU ZIP压缩算法是非常著名的无损压缩算法,无专利保护,复杂度适中,适合硬件平台实现。
在传统的数据压缩领域中,基于软件平台的实现的方案得以广泛的运用,然而基于软件平台的实现方法中,占用太多CPU,即Central Processing Unit以及内存资源。
在本发明中,给出了一种全新的GZIP硬件实现结构并提出了多种加速方案来提升整个系统性能,可以显著的减少CPU以及内存资源的消耗。高性能系统总线PCIE2.0作为压缩卡与计算机之间进行通信桥梁,DMA,即Direct Memory Access通过PCIE2.0接口把计算机内存中的数据传输给GZIP压缩内核,在内核压缩完毕之后,DMA再将压缩过的数据传递到就算计的内存中,在数据传递和压缩过程中无需CPU干预。
发明内容
本发明目的是针对现有技术存在的缺陷提供一种可实现GZIP压缩算法、做到软件压缩相兼容、提升GZIP压缩的数据吞吐率,使得数据压缩过程中无需CPU的干预的GZIP压缩硬件系统实现与加速方法。
本发明为实现上述目的,采用如下技术方案:一种基于GZIP的压缩硬件系统,该系统包括:
一个输入缓存单元,用于对输入数据进行缓存;
一个LZ77编码单元,用于对输入数据进行LZ77编码;
一个动态新字符/匹配长度Huffman编码频率统计控制单元,用于对LZ77编码单元输出的新字符以及匹配长度进行统计;
一个动态指回距离Huffman编码频率统计控制单元,用于对LZ77编码单元输出的指回距离进行统计;
一个动态新字符/匹配长度Huffman编码单元,用于对LZ77编码单元输出的新字符以及匹配长度进行动态Huffman编码;
一个动态指回距离Huffman编码单元,用于对LZ77编码单元输出的指回距离进行动态Huffman编码;
一个动态码字长度Huffman编码单元,用于对动态新字符/匹配长度Huffman树的信息及对动态指回距离Huffman树的信息进行编码;
一个静态新字符/匹配长度Huffman编码单元,用于对LZ77编码单元输出之后的新字符/匹配长度进行静态Huffman编码;
一个静态指回距离Huffman编码单元,用于对LZ77编码单元输出之后的指回距离进行静态Huffman编码;
一个数据打包单元,用于判断采用直接存储、静态Huffman编码以及动态Huffman编码三种模式中的一种,并按照固定的格式进行编码输出;
一个输出缓存单元,用于缓存数据打包单元输出的压缩之后的数据。
优选的,所述输入缓存单元包括:
两个数据块缓存单元,用于存放待压缩的原始数据;
两个数据选择单元,用于控制数据块缓存单元的读写控制权。
优选的,所述LZ77编码单元包括:
两对Head/Prev Hash表,用于对LZ77编码单元中编码字符串的快速匹配查找;
一个只读存储单元ROM,用于存放循环冗余校验码CRC32校验计算时的常数表;
一个新字符/匹配长度缓存单元,用于存放LZ77编码单元输出之后的新字符或者是匹配长度;
一个指回距离缓存单元,用于存放LZ77编码单元输出之后的指回距离;
一个主控状态机单元,用于对数据块缓存单元中的数据进行数据读取。
优选的,所述动态新字符/匹配长度Huffman编码单元包括:
一个新字符/匹配长度频率缓存单元,用于存放LZ77编码单元输出之后新字符以及匹配长度的频率;
一个新字符/匹配长度父亲节点缓存单元,用于存放新字符以及匹配长度Huffman树中每一个节点的父亲节点,其中根节点除外;
一个新字符/匹配长度深度缓存单元,用于存放新字符以及匹配长度Huffman树中每一个节点在新字符以及匹配长度Huffman树中的深度;
一个新字符/匹配长度最小堆缓存单元,用于连续存放新字符以及匹配长度Huffman树中所有的节点;
一个新字符/匹配长度码字值缓存单元,用于存放新字符/匹配长度Huffman树中所有的叶子节点对应的Huffman编码的值;
一个新字符/匹配长度码字长度缓存单元,用于存放新字符以及匹配长度Huffman树中所有节点对应的一个Huffman编码的有效长度;
3个数据选择单元,分别用于控制新字符/匹配长度频率缓存单元、新字符/匹配长度码字值缓存单元、新字符/匹配长度码字长度缓存单元的控制权;
一个流水线乘法器单元,用于辅助计算数据块经过动态新字符以及匹配长度Huffman编码之后的大小;
一个主控状态机单元,用来根据新字符/匹配长度频率缓存单元中存放的待压缩数据块中每一个字符的频率信息,利用新字符/匹配长度父亲节点缓存单元、新字符/匹配长度深度缓存单元、新字符/匹配长度最小堆缓存单元去构造Huffman树,并将Huffman树的信息存放在新字符/匹配长度最小堆缓存单元中,在得到新字符/匹配长度Huffman树的信息之后,主控状态机单元遍历Huffman树得出Huffman树中每一个节点的码字长度,并对该节点加以判断;如果是叶子节点,则所述主控状态机单元继续从新字符/匹配长度缓存单元中读取该节点的频率,并利用流水线乘法器单元去计算出当前的这个字符经过Huffman编码之后的大小,再根据得出的Huffman树中每一个节点的码字长度去计算出Huffman树中每一个节点的码字值,主控状态机单元对这些节点加以判断,如果是叶子节点就将叶子节点的码字值存放进新字符/匹配长度码字值缓存单元中。
优选的,所述动态指回距离Huffman编码单元包括:
一个指回距离频率缓存单元,用于存放LZ77编码单元输出之后指回距离的频率;
一个指回距离父亲节点缓存单元,用于存放指回距离Huffman树中每一个节点的父亲节点,其中根节点除外;
一个指回距离深度缓存单元,用于存放指回距离Huffman树中每一个节点在指回距离Huffman树中的深度;
一个指回距离最小堆缓存单元,用于连续存放指回距离Huffman树中所有的节点;
一个指回距离码字值缓存单元,用于存放指回距离Huffman树中所有的叶子节点对应的Huffman编码的值;
一个指回距离码字长度缓存单元,用于存放指回距离Huffman树中所有节点对应的Huffman编码的有效长度;
3个数据选择单元,分别用于控制指回距离频率缓存单元、指回距离码字值缓存单元、指回距离码字长度缓存单元的控制权;
一个流水线乘法器单元,用于辅助计算数据块经过动态指回距离Huffman编码之后的大小;
一个主控状态机单元,用来根据指回距离频率缓存单元中存放的待压缩数据块中每一个字符的频率信息,并利用指回距离父亲节点缓存单元、指回距离深度缓存单元、指回距离最小堆缓存单元去构造Huffman树,并将Huffman树的信息存放在最小堆缓存单元中,在得到指回距离Huffman树的信息之后,主控状态机单元遍历Huffman树得出Huffman树中每一个节点的码字长度,并对该节点加以判断,如果是叶子节点,主控状态机单元将从新字符/匹配长度缓存单元中读取该节点的频率,利用流水线乘法器单元去计算出当前的这个字符经过Huffman编码之后的大小,再根据得出的Huffman树中每一个节点的码字长度去计算出Huffman树中每一个节点的码字值,主控状态机单元对这些节点加以判断,如果是叶子节点就将叶子节点的码字值存放进指回距离码字值缓存单元中。
优选的,所述的动态码字长度Huffman编码单元包括:
一个码字长度数据统计单元,用于统计新字符/匹配长度码字长度缓存单元和指回距离码字长度缓存单元中每一种码字长度出现的频率;
一个码字长度频率缓存单元,用于存放码字长度数据统计单元统计的结果;
一个码字长度父亲节点缓存单元,用于存放码字长度Huffman树中每一个节点的父亲节点;
一个码字长度深度缓存单元,用于存放码字长度Huffman树中每一个节点的深度;
一个码字长度小堆缓存单元,用于连续存放码字长度Huffman树中所有的节点;
一个码字长度码字值缓存单元,用于存放码字长度Huffman树中每一个叶子节点对应的Huffman编码的值;
一个码字长度的码字长度缓存单元,用于存放码字长度Huffman树中所有节点对应的Huffman编码的码字长度;
一个码字长度叶子节点缓存单元,用于存放对新字符/匹配长度码字长度缓存单元和指回距离码字长度缓存单元进行遍历之后得到的码字长度的叶子节点;
一个码字长度重复次数缓存单元,用于存放遍历之后码字长度的重复次数;
5个数据选择单元,分别用于控制码字长度频率缓存单元、码字长度码字值缓存单元、码字长度的码字长度缓存单元、码字长度叶子节点缓存单元、码字长度重复次数缓存单元的控制权;
一个流水线乘法器单元,用于计算数据块经过动态码字长度Huffman编码之后的大小;
一个码字长度主控状态机,用于完成新字符/匹配长度码字长度缓存单元和指回距离码字长度缓存单元中遍历所有叶子节点的码字长度,并将统计的结果存放在码字长度叶子节点缓存单元和码字长度重复次数缓存单元中,将每一个叶子节点的频率信息存放在码字长度频率缓存单元中。
优选的,所述的数据打包单元包括:
读取变长码字单元,用于读取LZ77编码单元、动态新字符/匹配长度Huffman编码单元、动态指回距离Huffman编码单元和动态码字长度Huffman编码单元中相应的信息;
变长码字打包单元,根据读取变长码字单元提供的信息从而获知针对当前数据块所采用的压缩模式。
一种如上所述的基于GZIP压缩硬件系统的加速方法,所述加速方法包括:
输入乒乓操作在GZIP压缩硬件系统中的应用,用于提升系统数据的吞吐率;
两对Head/Prev Hash表,分别是Head1/Prev1 Hash表方法和Head2/Prev2 Hash表方法,用来进一步提升系统数据的吞吐率;
Huffman编码统计提前,用于提升数据的吞吐率;
Huffman编码清空提前,用于提升数据的吞吐率;
CRC32校验穿插计算,利用LZ77编码单元缩减数据处理的时钟周期,提升数据的吞吐率。
本发明的有益效果:本压缩硬件系统及其加速方法可实现GZIP压缩算法、做到软件实现压缩相兼容、提升GZIP压缩的数据吞吐率,使得数据压缩过程中无需CPU的干预。
附图说明
附加的并且形成说明书一部分的附图包括在本发明的特定方面的描写中。本发明以及本发明提供的系统的模块和流程的更清楚的概念,通过参考示例以及附图中示出非限制性的实施例将更容易理解。通过参考一个或多个附图结合本发明的描述可以更好的理解本发明。
图1示出本发明实施例提供的一种GZIP压缩硬件系统实现结构图;
图2示出本发明提供的一种GZIP压缩硬件系统实现的具体工作流程示意图;
图3示出本发明提供的一种GZIP压缩硬件系统实现的一个实施例中写入缓存单元的具体实施方式的结构示意图;
图4示出本发明提供的一种GZIP压缩硬件系统实现的一个实施例中LZ77编码单元的具体实施方式的结构示意图;
图5示出本发明提供的一种GZIP压缩硬件系统实现的一个实施例中动态新字符/匹配长度Huffman编码频率统计控制单元的具体实施方式的工作流程示意图;
图6示出本发明提供的一种GZIP压缩硬件系统实现的一个实施例中动态指回距离Huffman编码频率统计控制单元的具体实施方式的工作流程示意图; 
图7示出本发明提供的一种GZIP压缩硬件系统实现的一个实施例中动态新字符/匹配长度Huffman编码单元的具体实施方式的结构示意图;
图8示出本发明提供的一种GZIP压缩硬件系统实现的一个实施例中动态指回距离Huffman编码单元的具体实施方式的示意图;
图9示出本发明提供的一种GZIP压缩硬件系统实现的一个实施例中动态码字长度Huffman编码单元的具体实施方式的结构示意图;
图10示出本发明提供的一种GZIP压缩硬件系统实现的一个实施例中静态新字符/匹配长度Huffman编码单元的具体实施方式的结构示意图;
图11示出本发明提供的一种GZIP压缩硬件系统实现的一个实施例中一个静态指回距离Huffman编码单元的具体实施方式的结构示意图;
图12示出本发明提供的一种GZIP压缩硬件系统实现的一个实施例中数据打包单元的具体实施方式的结构示意图;
图13示出本发明提供的一种GZIP压缩硬件系统实现的一个实施例中输出缓存单元的具体实施方式的结构示意图;
图14示出本发明提供的一种GZIP压缩硬件系统加速方法中双Head/Prev加速方法的具体实施方式结构示意图;
图15示出本发明提供的一种GZIP压缩硬件系统加速方法中双Head/Prev加速方法的具体实施方式的工作流程示意图;
图16示出本发明提供的一种GZIP压缩硬件系统加速方法中Huffman提前统计加速方法的具体实施方式的结构示意图;
图17示出本发明提供的一种GZIP压缩硬件系统加速方法中Huffman提前清空加速方法的具体实施方式的工作流程示意图;
图18示出本发明提供的一种GZIP压缩硬件系统加速方法中CRC32穿插计算的具体实施方式的工作流程示意图。
具体实施方式
下面参照附图用本发明的示例性实施例对本发明进行更加全面的描述和说明。
图1示出本发明实施例提供的一种GZIP压缩硬件系统实现结构图。
如图1所示,本发明提供的一种GZIP压缩硬件系统实现100主要包括:输入缓存单元101、新字符/匹配长度频率统计控制单元102、指回距离频率统计控制单元103、LZ77编码单元104、动态新字符/匹配长度Huffman编码单元105、动态指回距离Huffman编码单元106、静态新字符/匹配长度Huffman编码单元107、静态指回距离Huffman编码单元108、动态码字长度Huffman编码单元109、数据打包单元110、输出缓存单元111。
其中,输入缓存单元101,用于对待压缩的数据进行缓存,尤其是,原始数据经过数据缓存单元中两个数据存储单元可是实现数字电路设计中提升数据吞吐率的乒乓操作。
新字符/匹配长度频率统计控制单元102,主要是用于接收从LZ77编码单元104中输出的新字符/匹配长度,并作出进一步的判断,如果是新字符则之直接输出。否则,就是匹配长度,此时,新字符/匹配长度频率统计单元102从动态新字符/匹配长度Huffman树字符表将匹配长度映射到相应的范围再输出。
指回距离频率统计控制单元103,主要是用于接收从LZ77编码单元104中输出的指回距离,并查询动态指回距离Huffman树字符表将指回距离映射到相应的范围再输出。
LZ77编码单元104,首先,主要是用于对输入缓存单元101中的数据进行LZ77编码,并把编码的结果分别输出到新字符/匹配长度频率统计控制单元102及指回距离频率统计控制单元103。其次,LZ77编码单元104是要完成对原始数据的CRC32校验计算,并把计算的结果反馈给数据打包单元110。
动态新字符/匹配长度Huffman编码单元105,主要是用于对LZ77编码单元104输出的新字符/匹配长度进行动态Huffman编码。
动态指回距离Huffman编码单元106,主要是用于对LZ77编码单元104输出的指回距离进行动态Huffman编码。
静态字符/匹配长度Huffman编码单元107,主要用于对LZ77编码单元104输出的新字符/匹配长度进行静态Huffman编码。例如,在某些特殊的数据压缩场合之下,如音视频领域中,数据的统计特性变化范围很小。因此,为了提升Huffman编码的速度,需要对这些统计特性变化很小的数据提前做好Huffman编码,并将Huffman编码的结果固化在ROM中,在实际中,即使数据的统计特性有些波动影响到一些压缩率,但是压缩的速度却得以显著性的提升。
静态指回距离Huffman编码单元108,主要是用于对LZ77编码单元的输出的指回距离进行静态Huffman编码。
动态码字长度Huffman编码单元109,主要是用于对动态新字符/匹配长度Huffman编码的码字长度信息和动态指回距离Huffman编码的码字长度信息进行动态Huffman编码,以此来减小动态Huffman编码时树的信息以提升数据的压缩率。
数据打包单元110,根据LZ77编码单元104给出的原始数据的大小,动态新字符/匹配长度Huffman编码单元105、动态指回距离Huffman编码单元106、动态码字长度Huffman编码单元109给出的对原始数据块采用动态Huffman编码之后的大小,静态新字符/匹配长度Huffman编码单元107、静态指回距离Huffman编码单元108给出的对原始数据块进行静态Huffman编码之后的大小来决定采用的直接存储、动态Huffman编码、静态Huffman编码三种压缩模式中的一种对待压缩数据块进行压缩。
输出缓存单元111,主要是用于接收来自数据打包单元110输出的压缩之后的数据。
图2示出本发明提供的一种GZIP压缩硬件系统实现的具体工作流程。
如图2所示,本发明提供的一种GZIP压缩硬件系统实现的具体工作流程200主要包括:
步骤201,填充输入缓存单元中的一个数据缓存单元。用来接收待压缩的原始数据,如果原始数据可以分割成多个数据块,则交替使用输入数据缓存单元中两个数据存储单元,使得数据的传输和数据的处理并行的进行,以此来提升数据的吞吐率,填满之后进入步骤202。
步骤202,通知GZIP压缩单元中的LZ77编码单元数据已经填满。LZ77编码单元在接收到这个信息之后开始选择输入缓存单元中相应的数据缓存单元,进入步骤203。
步骤203,LZ77工作。LZ77在获得输入缓存单元中相应的数据缓存单元的控制权之后开始工作,并对当前的数据块进行CRC32校验计算,进入步骤204。
步骤204,判断LZ77工作是否完成。如果LZ77编码工作尚未完成就继续进行LZ77编码工作,进入步骤203,否则就开始准备启动后续的工作单元进入步骤205。
步骤205,动态新字符/匹配长度Huffman编码单元和动态指回距离Huffman编码单元开始工作。LZ77编码单元结束之后,就开始启动动态新字符/匹配长度Huffman编码单元对LZ77编码输出的新字符/匹配长度进行动态Huffman编码;同时,启动动态指回距离Huffman编码单元对LZ77编码输出的指回距离进行动态Huffman编码,接着进入步骤206。
步骤206,判断动态新字符/匹配长度Huffman编码单元和指回距离Huffman编码单元工作是否结束。如果没有结束就继续进行动态Huffman编码的过程205,否则,就准备进入步骤207。
步骤207,动态码字长度Huffman编码单元开始工作。如果动态新字符/匹配长度Huffman编码单元和动态指回距离Huffman编码单元都结束,则动态码字长度Huffman编码单元开始工作,进入步骤208。
步骤208,判断动态码字长度Huffman编码单元工作是否结束。如果没有结束,继续进行动态码字长度Huffman编码过程,否则,就进入步骤209。
步骤209,启动数据打包单元。在动态码字长度Huffman编码单元工作结束之后,数据打包单元开始启动,并根据LZ77编码单元给出的结果、动态新字符/匹配长度Huffman编码单元给出的结果、动态指回距离Huffman编码单元给出的结果、动态码字长度Huffman编码单元给出的结果进行判断,选择直接存储、动态Huffman编码、静态Huffman编码三种压缩模式中的一种对当前的数据块进行压缩,当前数据块编码完成之后直接进入步骤210。
步骤210,判断当前处理的数据块是不是最后一个数据块。如果是最后一个数据块,就表示数据压缩完毕,否则进入步骤201开始处理下一个数据块。
由此可见,原始待压缩的数据是分割成多个数据块进行压缩的,从而使得乒乓操作的实现成为可能。
图3示出本发明提供的一种GZIP压缩硬件系统实现的一个实施例中写入缓存单元的具体实施方式的结构示意图。
如图3所示,本发明提供的一种GZIP压缩硬件系统实现的一个实施例中写入缓存单元300的具体实施方式的结构进一步包括:数据选择单元301、数据缓存单元302、数据缓存单元303、数据选择单元304。
如图3所示,其中数据选择单元301,主要是用于控制数据缓存单元302和数据缓存单元303中的一个进行数据填充。
数据缓存单元302和数据缓存单元303,主要是用于缓存待压缩的数据,实际工作时,一个数据缓存单元用来进行数据编码,另一个数据缓存单元用来进行数据的填充,使得数据的填充和数据的编码并行的进行。
数据选择单元304,主要是用于选择数据缓存单元302和数据缓存单元303中的一个来进行数据的编码处理。
图4示出本发明提供的一种GZIP压缩硬件系统实现的一个实施例中LZ77编码单元的具体实施方式的结构示意图。
如图4所示,本发明提供的一种GZIP压缩硬件系统实现的一个实施例中LZ77编码单元的具体实施方式的结构400进一步包括:Head1 Hash查找表401、Prev1 Hash查找表402、Head2 Hash查找表403、Prev2 Hash查找表404、LZ77主控状态机单元405、ROM查找表406、新字符/匹配长度缓存单元407、指回距离缓存单元408。
其中,Head1 Hash查找表401、Prev1 Hash查找表402、Head2 Hash查找表403、Prev2 Hash查找表404,主要是被LZ77主控状态机单元405用作Hash表进行快速的匹配字符搜索。
LZ77主控状态机单元405,主要利用Head1 Hash表401、Prev1 Hash402表、Head2 Hash表403、Prev2 Hash表404完成对原始数据块的LZ77编码过程,并完成对原始数据块的CRC32校验过程并统计出原始文件的大小,LZ77主控状态机也为动态新字符/匹配长度Huffman编码单元、动态指回距离Huffman编码单元及数据打包单元提供必要的信息,主要包括CRC32校验的结果、原始数据块的大小、待压缩文件的大小。
ROM查找表单元406,在LZ77主控状态机单元405对原始数据块CRC32校验时,需要利用ROM中固化的数据进行计算。
新字符/匹配长度缓存单元407,主要用于存放LZ77对原始数据进行编码输出的新字符或者是匹配长度。
指回距离缓存单元408,主要用于存放LZ77对原始数据进行编码输出的指回距离。
图5示出本发明提供的一种GZIP压缩硬件系统实现的一个实施例中动态新字符/匹配长度Huffman编码频率统计控制单元的具体实施方式的工作流程示意图。
如图5所示,本发明提供的一种GZIP压缩硬件系统实现的一个实施例中动态新字符/匹配长度Huffman编码频率统计控制单元的具体实施方式的工作流程500进一步包括:
步骤501,动态新字符/匹配长度Huffman编码频率统计控制单元的主控状态机从LZ77编码模块中接收一个新字符/匹配长度,进入步骤502。
步骤502,动态新字符/匹配长度Huffman编码频率统计控制单元的主控状态机对接收到的这个新字符/匹配长度进行判断,如果接收到的是匹配长度进入步骤503,否则进入步骤504。
步骤503,将接收到的匹配长度查询动态新字符/匹配长度Huffman树字符表,将接收到的匹配长度映射到动态新字符/匹配长度Huffman树字符表中对应的叶子节点,进入步骤504。
步骤504,动态新字符/匹配长度Huffman编码频率统计控制单元的主控状态机将新字符/匹配长度频率缓存单元中对应的节点单元加1,进入步骤505。
步骤505,判断工作是否结束,如果没有结束就进入步骤501继续准备接收下一个字符,否则就进入结束状态。
图6示出本发明提供的一种GZIP压缩硬件系统实现的一个实施例中动态指回距离Huffman编码频率统计控制单元的具体实施方式的工作流程示意图。
如图6所示,本发明提供的一种GZIP压缩硬件系统实现的一个实施例中动态指回距离Huffman编码频率统计控制单元的具体实施方式的工作流程600进一步包括:
步骤601,动态指回距离Huffman编码频率统计控制单元的主控状态机从LZ77编码单元中接收一个指回距离,进入步骤602。前提是LZ77编码单元此时发现了匹配字符串,并输出了指回距离,否则该模块不工作。
步骤602,将接收到的指回距离用作索引查询动态指回距离Huffman树字符表,将指回距离映射到动态指回距离Huffman树字符表中的叶子节点,进入步骤603。
步骤603,动态指回距离Huffman编码频率统计控制单元的主控状态机将指回距离频率缓存单元中对应的单元加1,进入步骤604。
步骤604,判断工作过程是否结束,如果没有结束就进入步骤601开始接收下一个LZ77编码单元输出的指回距离,否则就进入结束状态。
图7示出本发明提供的一种GZIP压缩硬件系统实现的一个实施例中动态新字符/匹配长度Huffman编码单元的具体实施方式的结构示意图。
如图7所示,本发明提供的一种GZIP压缩硬件系统实现的一个实施例中动态新字符/匹配长度Huffman编码单元的具体实施方式的结构700进一步包括:
数据选择单元701,用来控制新字符/匹配长度频率缓存单元702的控制权,在字符的统计阶段,数据选择单元701选择动态新字符/匹配长度Huffman频率统计单元去控制新字符/匹配长度频率缓存单元702;在构建Huffman树阶段,数据选择单元701选择动态新字符/匹配长度Huffman编码主控状态机单元707去控制新字符/匹配长度频率缓存单元702。
新字符/匹配长度频率缓存单元702,用来存放动态新字符/匹配长度Huffman树中每一个节点的频率,包括叶子节点、中间节点和根节点。
数据选择单元703,用来控制新字符/匹配长度码字长度缓存单元704的控制权。在构建Huffman树的过程中,数据选择单元703选择动态新字符/匹配长度Huffman编码主控状态机707去控制新字符/匹配长度码字长度缓存单元704;在Huffman树、Huffman表构建完毕数据选择单元703选择数据打包单元去控制新字符/匹配长度码字长度缓存单元704。
新字符/匹配长度码字长度缓存单元704,主要用来存放动态新字符/匹配长度Huffman树中每一个节点的码字长度。
数据选择单元705,主要是用来控制新字符/匹配长度码字值缓存单元706的控制权。在构建Huffman树的过程中,数据选择单元705选择新字符/匹配长度Huffman编码主控状态机去控制码字值缓存单元706,在得到码字长度及码字值之后,数据选择单元去选择数据打包单元去控制新字符/匹配长度码字值缓存单元706。
新字符/匹配长度码字值缓存单元706,主要是用来存放新字符/匹配长度Huffman树中每一个叶子节点的码字值。
动态新字符/匹配长度Huffman编码主控状态机单元707,在新字符/匹配长度频率缓存单元702中得到Huffman树中每一个叶子的频率之后,动态新字符/匹配长度Huffman主控状态机单元707根据新字符/匹配长度频率缓存单元中存放的每一个字符频率,并利用新字符/匹配长度最小堆缓存单元709、新字符/匹配长度深度缓存单元710、新字符/匹配长度父亲节点缓存单元711去构建Huffman树,并计算出Huffman表,在这个过程中动态新字符/匹配长度Huffman编码主控状态机单元707还利用新字符/匹配长度频率缓存单元702中存放的每一个字符的频率信息和流水线乘法器单元708去计算待压缩数据经过动态新字符/匹配长度Huffman编码之后的大小。
流水线乘法器单元708,动态新字符/匹配长度主控状态机单元707主要用流水线乘法器单元708来计算存放在新字符/匹配长度频率缓存单元702中字符出现的频率和新字符/匹配长度码字长度缓存单元706中对应的Huffman编码的码字长度的乘法计算。
新字符/匹配长度最小堆缓存单元709,新字符/匹配长度最小堆缓存单元709前半部分主要用来维护新字符/匹配长度频率缓存单元702中出现的字符,使得这些字符在物理上呈现连续存储,在逻辑上构成一棵二叉树,并且这棵二叉树满足:左节点和右节点大于或者等于本节点,其中叶子节点除外。新字符/匹配长度最小堆缓存单元709的后半部分主要是用来存放新字符/匹配长度Huffman树。
新字符/匹配长度深度缓存单元710,主要是用来存放新字符/匹配长度Huffman树中每一个节点的深度,其中根节点的深度最大,叶子节点的深度是0。
新字符/匹配长度父亲节点缓存单元711,主要是用来存放新字符/匹配长度Huffman树中每一个节点的父亲节点,其中根节点除外。
在新字符/匹配长度Huffman工作结束,在新字符/匹配长度码字长度缓存单元704和码字值缓存单元706中得到了每一个叶子节点的码字长度和码字值,Huffman工作结束,此时新字符/匹配长度Huffman编码单元就把新字符/匹配长度码字长度缓存单元704和码字值缓存单元706的控制权交给数据打包单元。
图8示出本发明提供的一种GZIP压缩硬件系统实现的一个实施例中动态指回距离Huffman编码单元的具体实施方式的结构示意图。
如图8所示,本发明提供的一种GZIP压缩硬件系统实现的一个实施例中动态指回距离Huffman编码单元的具体实施方式的结构800进一步包括:
数据选择单元801,用来控制指回距离频率缓存单元802的控制权,在字符的统计阶段,数据选择单元801选择动态指回距离Huffman频率统计单元去控制指回距离频率缓存单元802;在构建Huffman树阶段,数据选择单元801选择动态指回距离Huffman编码主控状态机单元807去控制指回距离频率缓存单元802。
指回距离频率缓存单元802,用来存放动态指回距离Huffman树中每一个节点的频率,包括叶子节点、中间节点和根节点。
数据选择单元803,用来控制指回距离码字长度缓存单元804的控制权。在构建Huffman树的过程中,数据选择单元803选择动态指回距离Huffman编码主控状态机807去控制指回距离码字长度缓存单元804;在Huffman树、Huffman表构建完毕数据选择单元803选择数据打包单元去控制指回距离码字长度缓存单元804。
指回距离码字长度缓存单元804,主要用来存放动态指回距离Huffman树中每一个节点的码字长度。
数据选择单元805,主要是用来控制指回距离码字值缓存单元806的控制权。在构建Huffman树的过程中,数据选择单元805选择指回距离Huffman编码主控状态机去控制码字值缓存单元806,在得到码字长度及码字值之后,数据选择单元805选择数据打包单元去控制指回距离码字值缓存单元806。
指回距离码字值缓存单元806,主要是用来存放指回距离Huffman树中每一个叶子节点的码字值。
动态指回距离Huffman编码主控状态机单元807,在指回距离频率缓存单元802中得到Huffman树中每一个叶子的频率之后,动态指回距离Huffman主控状态机单元807根据指回距离频率缓存单元中存放的每一个字符频率,并利用指回距离最小堆缓存单元809、指回距离深度缓存单元810、指回距离父亲节点缓存单元811去构建Huffman树,并计算出Huffman表,在这个过程中动态指回距离Huffman编码主控状态机单元807还利用指回距离频率缓存单元802中存放的每一个字符的频率信息和流水线乘法器单元808去计算待压缩数据经过动态指回距离Huffman编码之后的大小。
流水线乘法器单元808,动态指回距离主控状态机单元807主要用流水线乘法器单元808来计算存放在指回距离频率缓存单元802中字符出现的频率和指回距离码字长度缓存单元806中对应的Huffman编码的码字长度的乘法计算。
指回距离最小堆缓存单元809,指回距离最小堆缓存单元809前半部分主要用来维护指回距离频率缓存单元802中出现的字符,使得这些字符在物理上呈现连续存储,在逻辑上构成一棵二叉树,并且这棵二叉树满足:左节点和右节点大于或者等于本节点,其中叶子节点除外。指回距离最小堆缓存单元809的后半部分主要是用来存放指回距离Huffman树。
指回距离深度缓存单元810,主要是用来存放指回距离Huffman树中每一个节点的深度,其中根节点的深度最大,叶子节点的深度是0。
指回距离父亲节点缓存单元811,主要是用来存放指回距离Huffman树中每一个节点的父亲节点,其中根节点除外。
在指回距离Huffman工作结束,在指回距离码字长度缓存单元804和码字值缓存单元806中得到了每一个叶子节点的码字长度和码字值,Huffman工作结束,此时指回距离Huffman编码单元就把指回距离码字长度缓存单元804和码字值缓存单元806的控制权交给数据打包单元。
图9示出本发明提供的一种GZIP压缩硬件系统实现的一个实施例中动态码字长度Huffman编码单元的具体实施方式的结构示意图。
如图9所示,本发明提供的一种GZIP压缩硬件系统实现的一个实施例中动态码字长度Huffman编码单元的具体实施方式的结构900进一步包括:
码字长度数据统计单元901,主要是用来从图7中新字符/匹配长度码字长度缓存单元704和图8中指回距离码字长度缓存单元804中读取每一个叶子节点的码字长度,并进行统计。
数据选择单元902,用来控制码字长度频率缓存单元903的控制权,在字符的统计阶段,数据选择单元902选择码字长度数据统计单元901去控制码字长度频率缓存单元903;在构建Huffman树阶段,数据选择单元902选择动态码字长度Huffman编码主控状态机单元910去控制码字长度频率缓存单元903。
码字长度频率缓存单元903,用来存放动态码字长度Huffman树中每一个节点的频率,包括叶子节点、中间节点和根节点。
数据选择单元904,用来控制码字长度的码字长度缓存单元905的控制权。在构建Huffman树的过程中,数据选择单元904选择动态码字长度Huffman编码主控状态机910去控制码字长度的码字长度缓存单元905;在Huffman树、Huffman表构建完毕数据选择单元904选择数据打包单元去控制码字长度的码字长度缓存单元905。
码字长度的码字长度缓存单元905,主要用来存放动态码字长度Huffman树中每一个节点的码字长度。
数据选择单元906,主要是用来控制码字长度码字值缓存单元907的控制权。在构建Huffman树的过程中,数据选择单元906选择码字长度Huffman编码主控状态机单元910去控制码字长度码字值缓存单元907,在得到码字长度及码字值之后,数据选择单元906选择数据打包单元去控制码字长度码字值缓存单元907。
码字长度码字值缓存单元907,主要是用来存放码字长度Huffman树中每一个叶子节点的码字值。
数据选择单元908,主要是用来选择码字长度叶子节点缓存单元909的控制权,在数据统计阶段,数据选择单元908选择动态码字长度Huffman编码主控状态机单元910去控制码字长度叶子节点缓存单元;在得到码字长度的码字长度及码字长度的码字值之后,数据选择单元908选择数据打包单元去控制码字长度叶子节点缓存单元909。
码字长度叶子节点缓存单元909,主要是用来存放码字长度Huffman树中所有的叶子节点。
动态码字长度Huffman编码主控状态机单元910,在码字长度频率缓存单元903中得到Huffman树中每一个叶子的频率之后,动态码字长度Huffman主控状态机单元910根据码字长度频率缓存单元903中存放的每一个字符频率,并利用码字长度最小堆缓存单元912、码字长度深度缓存单元913、码字长度父亲节点缓存单元914去构建Huffman树,并计算出Huffman表,在这个过程中动态码字长度Huffman编码主控状态机单元910还利用码字长度频率缓存单元903中存放的每一个字符的频率信息和流水线乘法器单元911去计算待压缩数据经过动态码字长度Huffman编码之后的大小。
流水线乘法器单元911,动态码字长度主控状态机单元910主要用流水线乘法器单元911来计算存放在码字长度频率缓存单元903中字符出现的频率和码字长度的码字长度缓存单元905中对应的Huffman编码的码字长度的乘法计算。
码字长度最小堆缓存单元912,码字长度最小堆缓存单元912前半部分主要用来维护码字长度频率缓存单元903中出现的字符,使得这些字符在物理上呈现连续存储,在逻辑上构成一棵二叉树,并且这棵二叉树满足:左节点和右节点大于或者等于本节点,其中叶子节点除外。码字长度最小堆缓存单元912的后半部分主要是用来存放码字长度Huffman树。
码字长度深度缓存单元913,主要是用来存放码字长度Huffman树中每一个节点的深度,其中根节点的深度最大,叶子节点的深度是0。
码字长度父亲节点缓存单元914,主要是用来存放码字长度Huffman树中每一个节点的父亲节点,其中根节点除外。
数据选择单元915,主要是用来控制码字长度重复次数缓存单元916的控制权,在构造Huffman树的过程中,数据选择单元915选择码字长度Huffman编码主控状态机单元910去控制码字长度重复次数缓存单元916,在码字长度Huffman树及码字长度Huffman表构建完毕,数据选择单元915选择数据打包单元去控制码字长度重复次数缓存单元。
码字长度重复次数缓存单元916,主要是用来存放码字长度Huffman树中每一个叶子节点的重复次数。
在码字长度Huffman工作结束,在码字长度的码字长度缓存单元905和码字值缓存单元907中得到了每一个叶子节点的码字长度和码字值,Huffman工作结束,此时码字长度Huffman编码单元就把码字长度的码字长度缓存单元905和码字值缓存单元907的控制权交给数据打包单元。
图10示出本发明提供的一种GZIP压缩硬件系统实现的一个实施例中静态新字符/匹配长度Huffman编码单元的具体实施方式的结构示意图。
如图10所示,本发明提供的一种GZIP压缩硬件系统实现的一个实施例中静态新字符/匹配长度Huffman编码单元的具体实施方式的结构1000进一步包括:
数据打包单元1001,主要完成对LZ77编码单元中存放在新字符/匹配长度缓存单元中的新字符/匹配长度进行静态Huffman编码。
静态新字符/匹配长度码字长度常数表单元1002,主要用来存放新字符/匹配长度对应的Huffman编码的码字长度,设计中可以使用ROM,即只读存储器去加以实现。
静态新字符/匹配长度码字值缓存单元1003,主要是用来存放新字符/匹配长度对应的Huffman编码的码字值,设计中可以使用ROM,即只读存储器加以实现。
流水线乘法器单元1004,主要是用来计算对存放在LZ77编码单元中新字符/匹配长度缓存单元中的新字符/匹配长度进行静态Huffman编码之后数据的大小。
在图10中,Literal_length[8:0]是读取的新字符或者是匹配长度,Code[8:0]、Code_length[3:0]分别是用来输出新字符或者是匹配长度对应的静态Huffman码字值和码字长度,Static_literal_length[31:0]主要是输出待压缩数据经过静态新字符/匹配长度Huffman编码之后的大小。
图11示出本发明提供的一种GZIP压缩硬件系统实现的一个实施例中静态指回距离Huffman编码单元的具体实施方式的结构示意图。
如图11所示,本发明提供的一种GZIP压缩硬件系统实现的一个实施例中静态指回距离Huffman编码单元的具体实施方式的结构1100进一步包括:
数据打包单元1101,主要完成对LZ77编码单元中存放在指回距离缓存单元中的指回距离进行静态Huffman编码。
静态指回距离码字值缓存单元1102,主要是用来存放指回距离对应的Huffman编码的码字值,设计中可以使用ROM,即只读存储器加以实现。
流水线乘法器单元1103,主要是用来计算对存放在LZ77编码单元中指回距离缓存单元中的指回距离进行静态指回距离Huffman编码之后数据的大小。
在图11中,Distance[14:0]是读取的指回距离,Code[4:0],Code_length[2:0]分别是用来输出指回距离对应的静态Huffman码字值和码字长度,在静态指回距离Huffman编码中码字长度固定为5比特位宽,Static_literal_length[31:0]主要是输出待压缩数据经过静态指回距离Huffman编码之后的大小。
图12示出本发明提供的一种GZIP压缩硬件系统实现的一个实施例中数据打包单元的具体实施方式的结构示意图。
在图12中,本发明提供的一种GZIP压缩硬件系统实现的一个实施例中数据打包单元的具体实施方式的结构1200进一步包括:
动态码字长度的码字长度缓存单元1201,主要是用来存放动态码字长度Huffman树中每一个节点的码字长度,与图9中的动态码字长度的码字长度缓存单元905是复用的。
动态码字长度码字值缓存单元1202,主要是用来存放动态码字长度Huffman树中每一个叶子节点的码字值,与图9中的动态码字长度码字值缓存单元907是复用的。
静态指回距离码字值缓存单元1203,主要是用来存放指回距离的静态Huffman编码值,与图11中的静态指回距离码字值单元1102是复用的。
输入数据缓存单元1204,主要是用来存放原始的待压缩的数据,与图3中的数据缓存单元303及304单元是复用的。
新字符/匹配长度缓存单元1205,主要是用来存放LZ77编码单元输出的新字符/匹配长度,与图4中新字符/匹配长度缓存单元407是复用的。
指回距离缓存单元1206,主要是用来存放LZ77编码单元输出的指回距离,与图4中的指回距离缓存单元408是复用的。
动态新字符/匹配长度码字值缓存单元1207,主要是用来存放动态新字符/匹配长度Huffman树中所有叶子节点的码字值,与图7中的动态新字符/匹配长度码字值缓存单元706是复用的。
动态新字符/匹配长度码字长度缓存单元1208,主要是用来存放动态新字符/匹配长度Huffman树中所有节点的码字长度,与图7中的动态新字符/匹配长度码字长度缓存单元704是复用的。
静态新字符/匹配长度码字值缓存单元1209,主用是用来存放新字符/匹配长度的静态Huffman编码的码字值,与图10中的静态新字符/匹配长度码字值缓存单元1003是复用的。
静态新字符/匹配长度码字长度缓存单元1210,主要是用来存放新字符/匹配长度的静态Huffman编码的码字长度,与图10中的静态新字符/匹配长度码字长度缓存单元1002是复用的。
动态指回距离码字值缓存单元1211,主要是用来存放动态指回距离Huffman树中所有叶子节点的码字值,与图8中的动态指回距离码字值缓存单元806是复用的。
变长码字打包单元1212,主要是接收读取变长码字单元送来的码字值及码字长度将这些变长码字打包成64比特位宽输出到输出缓存单元中。
动态指回距离码字长度缓存单元1213,主要是用来存放动态指回距离Huffman树中所有节点的码字长度,与图8中的动态指回距离码字长度缓存单元804是复用的。
动态码字长度重复次数缓存单元1214,主要是用来存放动态码字长度Huffman树中所有叶子节点的重复次数,与图9中动态码字长度重复次数缓存单元916是复用的。
动态码字长度叶子节点缓存单元1215,主要是用来存放动态码字长度Huffman树中所有的叶子节点,与图9中的动态码字长度叶子节点缓存单元909是复用的。
读取变长码字单元1216,主要是用来根据图4中LZ77编码单元、图7中动态新字符/匹配长度Huffman编码单元、图8中动态指回距离Huffman编码单元、图9中动态码字长度Huffman编码单元、图10中静态新字符/匹配长度Huffman编码单元、图11中静态指回距离Huffman编码单元送出的结果进行判断,根据判断的结果采用直接存储、动态Huffman编码、静态Huffman编码三种压缩模式中的一种对待压缩的数据块进行压缩,进而从数据缓存单元1201-1211,1213-1215中按照特定的顺序读取数据并将读取的变长码字交给变长码字打包单元输出。
图13示出本发明提供的一种GZIP压缩硬件系统实现的一个实施例中输出缓存单元的具体实施方式的结构示意图。
如图13所示,本发明提供的一种GZIP压缩硬件系统实现的一个实施例中输出缓存单元的具体实施方式的结构1300进一步包括:
FIFO缓存单元1301,主要是用来接收数据打包单元1302发送出来的压缩之后的数据。
数据打包单元1302,主要是用来编码输出数据,与图12中的数据打包单元是复用的。
图14示出本发明提供的一种GZIP压缩硬件系统加速方法中双Head/Prev加速方法的具体实施方式结构示意图。
如图14所示,本发明提供的一种GZIP压缩硬件系统加速方法中双Head/Prev加速方法的具体实施方式结构进一步包括:
Head1 Hash查找表1401、Prev 1 Hash查找表1402、Head2 Hash查找表1404、Prev2 Hash查找表1405,主要是用来存放待压缩数据中出现的每一个字符的地址,每次使用之前都需要对Head1 Hash查找表1401、Prev 1 Hash查找表1402、Head2 Hash查找表1404、Prev2 Hash查找表1405进行清空,然后再使用,这里的Head1 Hash查找表1401、Prev 1 Hash查找表1402、Head2 Hash查找表1404、Prev2 Hash查找表1405与图4中的Head1 Hash查找表401、Prev1 Hash查找表402、Head2 Hash查找表403、Prev2 Hash查找表404是对应复用的。
LZ77主控状态机单元1403,主要是利用Head1 Hash查找表1401、Prev 1 Hash查找表1402、Head2 Hash查找表1404、Prev2 Hash查找表1405完成数据块的LZ77编码过程,与图4中的LZ77主控状态机单元405是复用的。
图15示出本发明提供的一种GZIP压缩硬件系统加速方法中双Head/Prev加速方法的具体实施方式的工作流程示意图。
如图15所示,本发明提供的一种GZIP压缩硬件系统加速方法中双Head/Prev加速方法的具体实施方式的工作流程1500进一步包括:
步骤1501,清空Head1和Prev1,清空完成进入步骤1502。
步骤1502,利用步骤1501中清空好的Head1 Hash查找表和Prev1 Hash查找表开始压缩第一个数据块,在压缩第一个数据块的同时,完成对Head2 Hash表和Prev2 Hash表的清空,处理完成之后就进入步骤1503。
步骤1503,利用步骤1502中清空好的Head2 Hash表盒Prev2 Hash表开始压缩第二个数据块,在压缩第二个数据块的同时也完成对Head1 Hash表和Prev1 Hash表的清空,处理完成之后就进入步骤1504。
步骤1504,开始利用步骤1503中清空好的Head1 Hash表和Prev1 Hash表对第三个数据块的压缩,在压缩的同时完成对Head2 Hash表和Prev2 Hash表的清空。
按照上述的操作步骤,一直到所有的数据块都被压缩完毕,这里首次采用的双Head和Prev的结构去压缩数据,显著地提升了数据的吞吐率。
图16示出本发明提供的一种GZIP压缩硬件系统加速方法中Huffman提前统计加速方法的具体实施方式的结构示意图。
如图16所示,本发明提供的一种GZIP压缩硬件系统加速方法中Huffman提前统计加速方法的具体实施方式的结构1600进一步包括:
LZ77编码单元1601,主要完成对待压缩数据的LZ77编码,与图1中LZ77编码单元104是复用的。
新字符/匹配长度或者是指回距离缓存单元1602,主要是用来存放新字符/匹配长度或者是指回距离,与图4中的新字符/匹配长度缓存单元407或者是指回距离缓存单元408是复用的。
频率统计控制单元1603,主要是用来接收来自LZ77编码单元输出的新字符/匹配长度或者是指回距离,并进行统计,与图1中的动态新字符/匹配长度Huffman编码频率统计控制单元102或者是动态指回距离Huffman编码频率统计控制单元103是复用的。
频率缓存单元1604,主要是用来存放动态Huffman树中所有的节点的频率,与图7中新字符/匹配长度频率缓存单元702或者是图8中的指回距离频率缓存单元802是复用的。
由图16中可以看出,本发明提供的这种方法可以同时完成字符的存储及统计,完全并行的工作,从提升了Huffman编码的数据吞吐率。
图17示出本发明提供的一种GZIP压缩硬件系统加速方法中Huffman提前清空加速方法的具体实施方式的工作流程示意图。
如图17所示,本发明提供的一种GZIP压缩硬件系统加速方法中Huffman提前清空加速方法的具体实施方式的工作流程1700进一步包括:
步骤1701,在进行对第一个数据块进行Huffman编码之前完成对频率缓存单元的清空,清空好之后进入步骤1702。
步骤1702,主要是完成对待压缩数据中出现的字符进行统计,统计好之后进入步骤1705。
步骤1705,根据步骤1702统计的结果建立Huffman树,Huffman树建好之后就进入步骤1706。
步骤1706,根据步骤1705建立的Huffman树得出Huffman表,得到Huffman表之后存放在频率缓存单元中的数据就不再有用,接着同时完成步骤1703和步骤1704。
步骤1703,完成对待压缩数据块的Huffman编码过程。
步骤1704,完成频率缓存单元的清空,步骤1703和步骤1704是同时进行,在步骤1703和步骤1704都完成之后就进入步骤1702,开始准备处理下一个数据块。
从图17中可以看出,步骤1703与步骤1704是完全并行的工作,从而提升了Huffman编码的数据吞吐率。
图18示出本发明提供的一种GZIP压缩硬件系统加速方法中CRC32穿插计算的具体实施方式的工作流程示意图。
如图18所示,本发明提供的一种GZIP压缩硬件系统加速方法中CRC32穿插计算的具体实施方式的工作流程1800进一步包括:
步骤1801,读取一个字符,准备进行LZ77编码,进入步骤1802。
步骤1802,从当前的这个字符开始进行匹配字符串的查找过程,利用读取Hash表的时间去完成当前字符的CRC32校验计算,进而进入步骤1803。
步骤1803,判断处理是否结束,如果没有,继续执行步骤1801,否则就进入结束状态。
从图18中可以看出,重复利用了LZ77逐个处理字符的特性,且在编码的过程中会查询Hash表,利用这样的时间空隙完成CRC32校验计算,从而数据吞吐率得以提升。
参考前述本发明示例性的描述,本领域技术人员可以知晓本发明具有以下优点:
本发明提供了一种GZIP压缩硬件系统实现的方法,并在FPGA上实现了GZIP压缩的基本功能。
本发明提供了一种GZIP压缩硬件系统实现的方法,最终实现硬件实现与软件实现相兼容,硬件压缩之后,软件可以进行正确的解压。
在本发明中,采用乒乓操作、双Head和Prev Hash结构、Huffman提前统计、Huffman提前清空、CRC32穿插计算来提升GZIP压缩的数据吞吐率,测试结果表明,GZIP压缩硬件实现较软件实现在数据吞吐率上有了大幅度的提升。
尽管本发明此处具体化一些特定的例子示出和描述,然而本发明不限制于所示出的细节,因为在不偏离本发明的精神以及在权利要求的范围和等同范围内,可以作出多种改进和结构变化。因此,宽范围地并且如权利要求中所阐明的在某种意义上与本发明的范围一致地解释附加的权利要求是适当的。

Claims (8)

1.一种基于GZIP的压缩硬件系统,其特征在于,该系统包括:
一个输入缓存单元,用于对输入数据进行缓存;
一个LZ77编码单元,用于对输入数据进行LZ77编码;
一个动态新字符/匹配长度Huffman编码频率统计控制单元,用于对LZ77编码单元输出的新字符以及匹配长度进行统计;
一个动态指回距离Huffman编码频率统计控制单元,用于对LZ77编码单元输出的指回距离进行统计;
一个动态新字符/匹配长度Huffman编码单元,用于对LZ77编码单元输出的新字符以及匹配长度进行动态Huffman编码;
一个动态指回距离Huffman编码单元,用于对LZ77编码单元输出的指回距离进行动态Huffman编码;
一个动态码字长度Huffman编码单元,用于对动态新字符/匹配长度Huffman树的信息及对动态指回距离Huffman树的信息进行编码;
一个静态新字符/匹配长度Huffman编码单元,用于对LZ77编码单元输出之后的新字符/匹配长度进行静态Huffman编码;
一个静态指回距离Huffman编码单元,用于对LZ77编码单元输出之后的指回距离进行静态Huffman编码;
一个数据打包单元,用于判断采用直接存储、静态Huffman编码以及动态Huffman编码三种模式中的一种,并按照固定的格式进行编码输出;
一个输出缓存单元,用于缓存数据打包单元输出的压缩之后的数据。
2.根据权利要求1所述的基于GZIP的压缩硬件系统,其特征在于,所述输入缓存单元包括:
两个数据块缓存单元,用于存放待压缩的原始数据;
两个数据选择单元,用于控制数据块缓存单元的读写控制权。
3.根据权利要求1所述的基于GZIP的压缩硬件系统,其特征在于,所述LZ77编码单元包括:
两对Head/Prev Hash表,用于对LZ77编码单元中编码字符串的快速匹配查找;
一个只读存储单元ROM,用于存放循环冗余校验码CRC32校验计算时的常数表;
一个新字符/匹配长度缓存单元,用于存放LZ77编码单元输出之后的新字符或者是匹配长度;
一个指回距离缓存单元,用于存放LZ77编码单元输出之后的指回距离;
一个主控状态机单元,用于对数据块缓存单元中的数据进行数据读取。
4.根据权利要求1所述的基于GZIP的压缩硬件系统,其特征在于,所述动态新字符/匹配长度Huffman编码单元包括:
一个新字符/匹配长度频率缓存单元,用于存放LZ77编码单元输出之后新字符以及匹配长度的频率;
一个新字符/匹配长度父亲节点缓存单元,用于存放新字符以及匹配长度Huffman树中每一个节点的父亲节点,其中根节点除外;
一个新字符/匹配长度深度缓存单元,用于存放新字符以及匹配长度Huffman树中每一个节点在新字符以及匹配长度Huffman树中的深度;
一个新字符/匹配长度最小堆缓存单元,用于连续存放新字符以及匹配长度Huffman树中所有的节点;
一个新字符/匹配长度码字值缓存单元,用于存放新字符/匹配长度Huffman树中所有的叶子节点对应的Huffman编码的值;
一个新字符/匹配长度码字长度缓存单元,用于存放新字符以及匹配长度Huffman树中所有节点对应的一个Huffman编码的有效长度;
3个数据选择单元,分别用于控制新字符/匹配长度频率缓存单元、新字符/匹配长度码字值缓存单元、新字符/匹配长度码字长度缓存单元的控制权;
一个流水线乘法器单元,用于辅助计算数据块经过动态新字符以及匹配长度Huffman编码之后的大小;
一个主控状态机单元,用来根据新字符/匹配长度频率缓存单元中存放的待压缩数据块中每一个字符的频率信息,利用新字符/匹配长度父亲节点缓存单元、新字符/匹配长度深度缓存单元、新字符/匹配长度最小堆缓存单元去构造Huffman树,并将Huffman树的信息存放在新字符/匹配长度最小堆缓存单元中,在得到新字符/匹配长度Huffman树的信息之后,主控状态机单元遍历Huffman树得出Huffman树中每一个节点的码字长度,并对该节点加以判断;如果是叶子节点,则所述主控状态机单元继续从新字符/匹配长度缓存单元中读取该节点的频率,并利用流水线乘法器单元去计算出当前的这个字符经过Huffman编码之后的大小,再根据得出的Huffman树中每一个节点的码字长度去计算出Huffman树中每一个节点的码字值,主控状态机单元对这些节点加以判断,如果是叶子节点就将叶子节点的码字值存放进新字符/匹配长度码字值缓存单元中。
5.根据权利要求1所述的基于GZIP的压缩硬件系统,其特征在于,所述动态指回距离Huffman编码单元包括:
一个指回距离频率缓存单元,用于存放LZ77编码单元输出之后指回距离的频率;
一个指回距离父亲节点缓存单元,用于存放指回距离Huffman树中每一个节点的父亲节点,其中根节点除外;
一个指回距离深度缓存单元,用于存放指回距离Huffman树中每一个节点在指回距离Huffman树中的深度;
一个指回距离最小堆缓存单元,用于连续存放指回距离Huffman树中所有的节点;
一个指回距离码字值缓存单元,用于存放指回距离Huffman树中所有的叶子节点对应的Huffman编码的值;
一个指回距离码字长度缓存单元,用于存放指回距离Huffman树中所有节点对应的Huffman编码的有效长度;
3个数据选择单元,分别用于控制指回距离频率缓存单元、指回距离码字值缓存单元、指回距离码字长度缓存单元的控制权;
一个流水线乘法器单元,用于辅助计算数据块经过动态指回距离Huffman编码之后的大小;
一个主控状态机单元,用来根据指回距离频率缓存单元中存放的待压缩数据块中每一个字符的频率信息,并利用指回距离父亲节点缓存单元、指回距离深度缓存单元、指回距离最小堆缓存单元去构造Huffman树,并将Huffman树的信息存放在最小堆缓存单元中,在得到指回距离Huffman树的信息之后,主控状态机单元遍历Huffman树得出Huffman树中每一个节点的码字长度,并对该节点加以判断,如果是叶子节点,主控状态机单元将从新字符/匹配长度缓存单元中读取该节点的频率,利用流水线乘法器单元去计算出当前的这个字符经过Huffman编码之后的大小,再根据得出的Huffman树中每一个节点的码字长度去计算出Huffman树中每一个节点的码字值,主控状态机单元对这些节点加以判断,如果是叶子节点就将叶子节点的码字值存放进指回距离码字值缓存单元中。
6.根据权利要求1所述的基于GZIP的压缩硬件系统,其特征在于,所述的动态码字长度Huffman编码单元包括:
一个码字长度数据统计单元,用于统计新字符/匹配长度码字长度缓存单元和指回距离码字长度缓存单元中每一种码字长度出现的频率;
一个码字长度频率缓存单元,用于存放码字长度数据统计单元统计的结果;
一个码字长度父亲节点缓存单元,用于存放码字长度Huffman树中每一个节点的父亲节点;
一个码字长度深度缓存单元,用于存放码字长度Huffman树中每一个节点的深度;
一个码字长度小堆缓存单元,用于连续存放码字长度Huffman树中所有的节点;
一个码字长度码字值缓存单元,用于存放码字长度Huffman树中每一个叶子节点对应的Huffman编码的值;
一个码字长度的码字长度缓存单元,用于存放码字长度Huffman树中所有节点对应的Huffman编码的码字长度;
一个码字长度叶子节点缓存单元,用于存放对新字符/匹配长度码字长度缓存单元和指回距离码字长度缓存单元进行遍历之后得到的码字长度的叶子节点;
一个码字长度重复次数缓存单元,用于存放遍历之后码字长度的重复次数;
5个数据选择单元,分别用于控制码字长度频率缓存单元、码字长度码字值缓存单元、码字长度的码字长度缓存单元、码字长度叶子节点缓存单元、码字长度重复次数缓存单元的控制权;
一个流水线乘法器单元,用于计算数据块经过动态码字长度Huffman编码之后的大小;
一个码字长度主控状态机,用于完成新字符/匹配长度码字长度缓存单元和指回距离码字长度缓存单元中遍历所有叶子节点的码字长度,并将统计的结果存放在码字长度叶子节点缓存单元和码字长度重复次数缓存单元中,将每一个叶子节点的频率信息存放在码字长度频率缓存单元中。
7.根据权利要求1所述的基于GZIP的压缩硬件系统,其特征在于,所述的数据打包单元包括:
读取变长码字单元,用于读取LZ77编码单元、动态新字符/匹配长度Huffman编码单元、动态指回距离Huffman编码单元和动态码字长度Huffman编码单元中相应的信息;
变长码字打包单元,根据读取变长码字单元提供的信息从而获知针对当前数据块所采用的压缩模式。
8.一种如权利要求1所述的基于GZIP压缩硬件系统的加速方法,其特征在于,所述加速方法包括:
输入乒乓操作在GZIP压缩硬件系统中的应用,用于提升系统数据的吞吐率;
两对Head/Prev Hash表,分别是Head1/Prev1 Hash表方法和Head2/Prev2 Hash表方法,用来进一步提升系统数据的吞吐率;
Huffman编码统计提前,用于提升数据的吞吐率;
Huffman编码清空提前,用于提升数据的吞吐率;
CRC32校验穿插计算,利用LZ77编码单元缩减数据处理的时钟周期,提升数据的吞吐率。
CN201210458643.1A 2012-11-14 2012-11-14 一种基于gzip的压缩硬件系统及其加速方法 Active CN102970043B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210458643.1A CN102970043B (zh) 2012-11-14 2012-11-14 一种基于gzip的压缩硬件系统及其加速方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210458643.1A CN102970043B (zh) 2012-11-14 2012-11-14 一种基于gzip的压缩硬件系统及其加速方法

Publications (2)

Publication Number Publication Date
CN102970043A true CN102970043A (zh) 2013-03-13
CN102970043B CN102970043B (zh) 2016-03-30

Family

ID=47799949

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210458643.1A Active CN102970043B (zh) 2012-11-14 2012-11-14 一种基于gzip的压缩硬件系统及其加速方法

Country Status (1)

Country Link
CN (1) CN102970043B (zh)

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015058633A1 (en) * 2013-10-21 2015-04-30 International Business Machines Corporation Efficient one-pass cache-aware compression
CN105959013A (zh) * 2015-05-11 2016-09-21 上海兆芯集成电路有限公司 利用预先霍夫曼编码决定对匹配字符串或反向指针执行霍夫曼编码程序的硬件数据压缩器
CN106027063A (zh) * 2015-05-11 2016-10-12 上海兆芯集成电路有限公司 基于节点字符串匹配机率对散列链进行分类的硬件数据压缩器
CN110620637A (zh) * 2019-09-26 2019-12-27 上海仪电(集团)有限公司中央研究院 一种基于fpga的数据解压装置及方法
CN110728725A (zh) * 2019-10-22 2020-01-24 苏州速显微电子科技有限公司 一种硬件友好的面向实时系统无损纹理压缩算法
CN110995753A (zh) * 2019-12-19 2020-04-10 中国电力科学研究院有限公司 用电信息采集系统中远程通信报文的组合压缩方法
CN111159074A (zh) * 2019-12-31 2020-05-15 山东超越数控电子股份有限公司 一种基于FPGA的超大规模数据hash运算加速卡
CN111510156A (zh) * 2020-06-03 2020-08-07 合肥师范学院 一种基于分段的哈夫曼动态压缩及解压大文件的方法
CN111884660A (zh) * 2020-07-13 2020-11-03 山东云海国创云计算装备产业创新中心有限公司 一种哈夫曼编码设备
CN112217521A (zh) * 2020-10-13 2021-01-12 杭州天谷信息科技有限公司 一种基于gzip的大文件分布式压缩方法
US11144207B2 (en) 2019-11-07 2021-10-12 International Business Machines Corporation Accelerating memory compression of a physically scattered buffer
CN114157305A (zh) * 2021-11-18 2022-03-08 华中科技大学 一种基于硬件快速实现gzip压缩的方法及其应用
CN114401013A (zh) * 2022-03-25 2022-04-26 苏州浪潮智能科技有限公司 一种适用于deflate格式的Huffman压缩编码字符频率统计装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080201718A1 (en) * 2007-02-16 2008-08-21 Ofir Zohar Method, an apparatus and a system for managing a distributed compression system
CN101847998A (zh) * 2010-04-15 2010-09-29 同济大学 一种高性能gml流压缩方法
CN202931290U (zh) * 2012-11-14 2013-05-08 无锡芯响电子科技有限公司 一种基于gzip的压缩硬件系统

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080201718A1 (en) * 2007-02-16 2008-08-21 Ofir Zohar Method, an apparatus and a system for managing a distributed compression system
CN101847998A (zh) * 2010-04-15 2010-09-29 同济大学 一种高性能gml流压缩方法
CN202931290U (zh) * 2012-11-14 2013-05-08 无锡芯响电子科技有限公司 一种基于gzip的压缩硬件系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
汤维: "《32位压缩程序在64位平台上优化的研究与实现》", 《中国优秀硕士学位论文全文数据库》, no. 7, 15 July 2009 (2009-07-15), pages 1 - 54 *

Cited By (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9252807B2 (en) 2013-10-21 2016-02-02 Globalfoundries Inc. Efficient one-pass cache-aware compression
WO2015058633A1 (en) * 2013-10-21 2015-04-30 International Business Machines Corporation Efficient one-pass cache-aware compression
CN105959013A (zh) * 2015-05-11 2016-09-21 上海兆芯集成电路有限公司 利用预先霍夫曼编码决定对匹配字符串或反向指针执行霍夫曼编码程序的硬件数据压缩器
CN106027063A (zh) * 2015-05-11 2016-10-12 上海兆芯集成电路有限公司 基于节点字符串匹配机率对散列链进行分类的硬件数据压缩器
CN105959013B (zh) * 2015-05-11 2019-07-16 上海兆芯集成电路有限公司 利用预先霍夫曼编码决定对匹配字符串或反向指针执行霍夫曼编码程序的硬件数据压缩器
CN106027063B (zh) * 2015-05-11 2019-09-27 上海兆芯集成电路有限公司 基于节点字符串匹配机率对散列链进行分类的硬件数据压缩器
CN110620637A (zh) * 2019-09-26 2019-12-27 上海仪电(集团)有限公司中央研究院 一种基于fpga的数据解压装置及方法
CN110620637B (zh) * 2019-09-26 2023-02-03 上海仪电(集团)有限公司中央研究院 一种基于fpga的数据解压装置及方法
CN110728725A (zh) * 2019-10-22 2020-01-24 苏州速显微电子科技有限公司 一种硬件友好的面向实时系统无损纹理压缩算法
US11144207B2 (en) 2019-11-07 2021-10-12 International Business Machines Corporation Accelerating memory compression of a physically scattered buffer
CN110995753A (zh) * 2019-12-19 2020-04-10 中国电力科学研究院有限公司 用电信息采集系统中远程通信报文的组合压缩方法
CN111159074A (zh) * 2019-12-31 2020-05-15 山东超越数控电子股份有限公司 一种基于FPGA的超大规模数据hash运算加速卡
CN111510156A (zh) * 2020-06-03 2020-08-07 合肥师范学院 一种基于分段的哈夫曼动态压缩及解压大文件的方法
CN111884660A (zh) * 2020-07-13 2020-11-03 山东云海国创云计算装备产业创新中心有限公司 一种哈夫曼编码设备
CN112217521A (zh) * 2020-10-13 2021-01-12 杭州天谷信息科技有限公司 一种基于gzip的大文件分布式压缩方法
CN112217521B (zh) * 2020-10-13 2024-01-09 杭州天谷信息科技有限公司 一种基于gzip的大文件分布式压缩方法
CN114157305A (zh) * 2021-11-18 2022-03-08 华中科技大学 一种基于硬件快速实现gzip压缩的方法及其应用
CN114401013A (zh) * 2022-03-25 2022-04-26 苏州浪潮智能科技有限公司 一种适用于deflate格式的Huffman压缩编码字符频率统计装置

Also Published As

Publication number Publication date
CN102970043B (zh) 2016-03-30

Similar Documents

Publication Publication Date Title
CN102970043B (zh) 一种基于gzip的压缩硬件系统及其加速方法
CN102457283B (zh) 一种数据压缩、解压缩方法及设备
CN103236847B (zh) 基于多层哈希结构与游程编码的数据无损压缩方法
CN104202054A (zh) 一种硬件lzma压缩实现系统及方法
CN1183683C (zh) 使用前缀预测的位自适应编码方法
CN103997346B (zh) 一种基于流水线的数据匹配方法和装置
CN107027036A (zh) 一种fpga异构加速平台的解压缩方法、装置及系统
CN102244518A (zh) 并行解压缩的硬件实现的系统及方法
CN202931289U (zh) 一种硬件lz77压缩实现系统
CN103023509A (zh) 一种硬件lz77压缩实现系统及其实现方法
CN104199951B (zh) 网页处理方法及装置
CN111723059B (zh) 一种数据压缩方法、装置、终端设备及存储介质
CN104348490A (zh) 一种基于效果优选的组合数据压缩算法
CN103095305A (zh) 一种硬件lz77的压缩实现系统及方法
CN105187533A (zh) 一种数据传输的方法及装置
CN107565971A (zh) 一种数据压缩方法及装置
CN109428603A (zh) 一种数据编码方法、装置以及存储介质
CN202931290U (zh) 一种基于gzip的压缩硬件系统
CN103546161A (zh) 基于二进制位处理的无损压缩方法
CN103428494A (zh) 基于云计算平台的图像序列编码及恢复方法
CN108769694A (zh) 一种基于FPGA的Alpha通道编码的方法及装置
CN114157305B (zh) 一种基于硬件快速实现gzip压缩的方法及其应用
CN105302915A (zh) 基于内存计算的高性能数据处理系统
CN107251438A (zh) 数据压缩装置、数据解压缩装置、数据压缩方法、数据解压缩方法和程序
CN107193685A (zh) 基于闪存存储设备的纠删方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C53 Correction of patent of invention or patent application
CB02 Change of applicant information

Address after: Room E701 No. 20 building science and Technology Park Liye sensor network university 214000 Jiangsu province Wuxi City District Qingyuan Road

Applicant after: Wuxi Xinxiang Electronic Technology Co., Ltd.

Address before: 214000 Jiangsu Province, Wuxi City District Qingyuan Road Branch Park 530 building A room 512

Applicant before: Wuxi Xinxiang Electronic Technology Co., Ltd.

C14 Grant of patent or utility model
GR01 Patent grant