一种基于gzip的压缩硬件系统的制作方法

文档序号:7529719阅读:226来源:国知局
专利名称:一种基于gzip的压缩硬件系统的制作方法
技术领域
本实用新型涉及一种基于GZIP压缩硬件系统;属于数据压缩技术领域。
背景技术
随着云计算技术的发展,海量数据存储和传输越来越严峻。因此,数据无损压缩技术得到广泛的应用以减少数据存储空间、提升数据传输效率。GZIPjPGNU 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编码单元中编码字符串的快速匹配查找;一个只读存储单元R0M,用于存放循环冗余校验码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树中所有的节
占.[0042]一个指回距离码字值缓存单元,用于存放指回距离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压缩的数据吞吐率,使得数据压缩过程中无需CPU的干预。

附加的并且形成说明书一部分的附图包括在本实用新型的特定方面的描写中。本实用新型以及本实用新型提供的系统的模块和流程的更清楚的概念,通过参考示例以及附图中示出非限制性的实施例将更容易理解。通过参考一个或多个附图结合本实用新型的描述可以更好的理解本实用新型。图1示出本实用新型实施例提供的一种GZIP压缩硬件系统实现结构图;图2示出本实用新型提供的一种GZIP压缩硬件系统实现的具体工作流程示意图;图3示出本实用新型提供的一种GZIP压缩硬件系统实现的一个实施例中写入缓存单元的具体实施方式
的结构示意图;图4示出本实用新型提供的一种GZIP压缩硬件系统实现的一个实施例中LZ77编码单元的具体实施方式
的结构示意图;图5示出本实用新型提供的一种GZIP压缩硬件系统实现的一个实施例中动态新字符/匹配长度Huffman编码频率统计控制单元的具体实施方式
的工作流程示意图;图6示出本实用新型提供的一种GZIP压缩硬件系统实现的一个实施例中动态指回距离Huffman编码频率统计控制单元的具体实施方式
的工作流程示意图;[0071]图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校验计算,并把计算的结果反馈给数据打包单元HO。动态新字符/匹配长度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。[0101]步骤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进一步包括:Headl Hash查找表401、Prevl Hash查找表402、Head2 Hash查找表403、Prev2 Hash查找表404、LZ77主控状态机单元405、ROM查找表406、新字符/匹配长度缓存单元407、指回距离缓存单元408。其中,HeadlHash 查找表 401、Prevl Hash 查找表 402、Head2 Hash 查找表 403、Prev2 Hash查找表404,主要是被LZ77主控状态机单元405用作Hash表进行快速的匹配字符搜索。LZ77 主控状态机单元 405,主要利用 Headl Hash 表 401、PrevI Hash402 表、Head2Hash表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编码频率统计控制单元的主控状态机将新字符/匹配长度频率缓存单元中对应的节点单元加I,进入步骤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树中每一个节点的深度,其中根节点的深度最大,叶子节点的深度是O。新字符/匹配长度父亲节点缓存单元711,主要是用来存放新字符/匹配长度Huf fman树中每一个节点的父亲节点,其中根节点除外。在新字符/匹配长度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。[0156]指回距离码字值缓存单元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树中每一个节点的深度,其中根节点的深度最大,叶子节点的深度是O。指回距离父亲节点缓存单元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树中每一个节点的深度,其中根节点的深度最大,叶子节点的深度是O。码字长度父亲节点缓存单元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编码的码字长度,设计中可以使用R0M,即只读存储器去加以实现。静态新字符/匹配长度码字值缓存单元1003,主要是用来存放新字符/匹配长度对应的Huffman编码的码字值,设计中可以使用R0M,即只读存储器加以实现。流水线乘法器单元1004,主要是用来计算对存放在LZ77编码单元中新字符/匹配长度缓存单元中的新字符/匹配长度进行静态Huffman编码之后数据的大小。在图10中,Literal_length[8:0]是读取的新字符或者是匹配长度,Code [8:0] >CodeJength [3:0]分别是用来输出新字符或者是匹配长度对应的静态Huffman码字值和码字长度,Static_literal_length[31:0]主要是输出待压缩数据经过静态新字符/匹配长度Huffman编码之后的大小。图11示出本实用新型提供的一种GZIP压缩硬件系统实现的一个实施例中静态指回距离Huffman编码单元的具体实施方式
的结构示意图。如图11所示,本实用新型提供的一种GZIP压缩硬件系统实现的一个实施例中静态指回距离Huffman编码单元的具体实施方式
的结构1100进一步包括:数据打包单元1101,主要完成对LZ77编码单元中存放在指回距离缓存单元中的指回距离进行静态Huffman编码。静态指回距离码字值缓存单元1102,主要是用来存放指回距离对应的Huffman编码的码字值,设计中可以使用R0M,即只读存储器加以实现。流水线乘法器单元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压缩硬件系统实现的一个实施例中数据打包单元的具体实施方式
的结构示意图。[0196]在图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加速方法的具体实施方式
结构进一步包括:Headl Hash 查找表 1401、Prev I Hash 查找表 1402、Head2 Hash 查找表 1404、Prev2 Hash查找表1405,主要是用来存放待压缩数据中出现的每一个字符的地址,每次使用之前都需要对Headl Hash查找表1401、Prev I Hash查找表1402、Head2 Hash查找表1404、Prev2 Hash查找表1405进行清空,然后再使用,这里的Headl Hash查找表1401、PrevI Hash 查找表 1402、Head2 Hash 查找表 1404、Prev2 Hash 查找表 1405 与图 4 中的 HeadlHash 查找表 401、Prevl Hash 查找表 402、Head2 Hash 查找表 403、Prev2 Hash 查找表 404是对应复用的。LZ77主控状态机单元1403,主要是利用Headl Hash查找表1401、Prev I Hash查找表1402、Head2 Hash查找表1404、Prev2 Hash查找表1405完成数据块的LZ77编码过程,与图4中的LZ77主控状态机单元405是复用的。图15示出本实用新型提供的一种GZIP压缩硬件系统加速方法中双Head/Prev加速方法的具体实施方式
的工作流程示意图。如图15所示,本实用新型提供的一种GZIP压缩硬件系统加速方法中双Head/Prev加速方法的具体实施方式
的工作流程1500进一步包括:步骤1501,清空Headl和Prevl,清空完成进入步骤1502。步骤1502,利用步骤1501中清空好的Headl Hash查找表和Prevl Hash查找表开始压缩第一个数据块,在压缩第一个数据块的同时,完成对Head2 Hash表和Prev2 Hash表的清空,处理完成之后就进入步骤1503。步骤1503,利用步骤1502中清空好的Head2 Hash表盒Prev2 Hash表开始压缩第二个数据块,在压缩第二个数据块的同时也完成对Headl Hash表和Prevl Hash表的清空,处理完成之后就进入步骤1504。步骤1504,开始利用步骤1503中清空好的Headl Hash表和Prevl Hash表对第三个数据块的压缩,在压缩的同时完成对Head2 Hash表和Prev2 Hash表的清空。[0227]按照上述的操作步骤,一直到所有的数据块都被压缩完毕,这里首次采用的双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压缩硬件实现较软件实现在数据吞吐率上有了大幅度的提升。尽管本实用新型此处具体化一些特定的例子示出和描述,然而本实用新型不限制于所示出的细节,因为在不偏离本实用新型的精神以及在权利要求的范围和等同范围内,可以作出多种改进和结构变化。因此,宽范围地并且如权利要求中所阐明的在某种意义上与本实用新型的范围一致地解释附加的权利要求是适当的。
权利要求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编码单元中相应的信息;变长码字打包单元,根据读取变长码字单元提供的信息从而获知针对当前数据块所采用的压缩模式。
专利摘要本实用新型公布了一种基于GZIP的压缩硬件系统,包括输入缓存单元,用于对输入数据进行缓存;LZ77编码单元;动态新字符/匹配长度Huffman编码频率统计控制单元;动态指回距离Huffman编码频率统计控制单元;动态新字符/匹配长度Huffman编码单元;动态指回距离Huffman编码单元;动态码字长度Huffman编码单元;静态新字符/匹配长度Huffman编码单元;静态指回距离Huffman编码单元;数据打包单元;输出缓存单元。本压缩硬件系统可实现GZIP压缩算法、做到与软件实现相兼容、提升GZIP压缩的数据吞吐率,使得数据压缩过程中无需CPU的干预。
文档编号H03M7/30GK202931290SQ20122060151
公开日2013年5月8日 申请日期2012年11月14日 优先权日2012年11月14日
发明者汤晓东, 狄永清, 李冰, 李玮 申请人:无锡芯响电子科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1