技术领域
[0001] 本实用新型涉及数据压缩,特别是采用乒乓操作的硬件LZ77压缩实现系统及其实现方法。
相关背景技术
[0002] 随着信息和通信技术的迅猛发展,数据交换量日益增大,大规模的数据处理也变的更加的繁杂。对于如此庞大的数据必须进行有效的压缩,才能够有效的减少数据的存储量,最大限度的合理利用有限的数据传输带宽。除此之外,压缩后的数据在一定程度上是对原始数据的加密,能够更好的保护数据。
[0003] 数据压缩可分成两种类型,一种叫做无损压缩,另一种叫做有损压缩。
[0004] 无损压缩是指使用压缩后的数据进行重构(或者叫做还原,解压缩),重构后的数据与原来的数据完全相同;无损压缩用于要求重构的信号与原始信号完全一致的场合。一个很常见的例子是磁盘文件的压缩。根据目前的技术水平,无损压缩算法一般可以把普通文件的数据压缩到原来的1/2~1/4。大多数压缩程序使用基于自适应字典的LZ算法来缩小文件。“LZ”指的是此算法的实用新型者Lempel和Ziv,“字典”指的是对数据块进行归类的方法。
[0005] 目前,绝大部分的压缩还是有软件实现,对数据的压缩处理操作仍然是由中央处理器(CPU)来完成的,当面对海量数据处理时,必然会占用大量的CPU资源,使得在进行数据压缩的同时进行其他操作变成了难题。除此之外,软件压缩是一种顺序进行的操作,无法取得高效率的并行运算。
[0006] 因此,如何有效的提高压缩算法的效率,减轻海量数据压缩给CPU带来的压力成为了现有的软件压缩解压缩技术的主要问题。实用新型内容
[0007] 本实用新型要解决的一个技术问题是提供一种硬件LZ77压缩实现系统和方法,能够有效的提高LZ77压缩算法的效率,将CPU从海量数据压缩中解脱出来。
[0008] 本实用新型为实现上述目的,采用如下技术方案:
[0009] 一种硬件LZ77压缩实现系统,其特征在于,该系统包括:
[0010] PCIE接口模块,用于实现与上位机的通信;
[0011] 数据直接访问模块DMA,用于实现数据的直接访问;
[0012] 数据打包解包模块,用于实现数据通信时对数据的组包和解包操作;
[0013] 数据写入缓存模块,用于缓存待压缩的数据;
[0014] 压缩算法模块,用于实现重复字符串的查找,计算重复字符串的匹配长度,进行LZ77编码;
[0015] 字典模块,用于存储历史字符串;
[0016] 非定长码元拼接模块,用于将非定长的编码高速拼接成定长的数据块;
[0017] 数据读出缓存模块,用于缓存压缩后的数据。
[0018] 其进一步特征在于,所述的数据写入缓存模块包括:
[0019] 两个如随机存取存储器RAM或者先入先出存储器FIFO的数据存储装置,用于存储待压缩的数据;
[0020] 多路选择器,用于选择将待压缩的数据存储在两个数据存储装置中的其中一个数据存储装置;
[0021] 通过多路选择器和两个数据存储装置实现数据写入的乒乓操作。
[0022] 所述的压缩算法模块包括:
[0023] 数据暂存模块,用于临时暂存一定量的数据;
[0024] 字典读取模块,用于产生字典的读控制信号和读取字典中的数据;
[0025] 最大长度匹配模块,用于计算出现重复字符串时的最大重复长度;
[0026] LZ77编码模块,用于对待压缩数据进行相应的编码;
[0027] 字典更新模块,用于产生字典的写控制信号和更新字典中的数据。
[0028] 根据权利要求1所述的硬件LZ77压缩实现系统,其特征在于,所述的字典模块包括:
[0029] 哈希表模块,用于存储最新的历史字典信息;
[0030] 字典链表模块,用于存储其他的历史字典信息;
[0031] 索引初始化模块,用于初始化哈希表模块;
[0032] 链表初始化模块,用于初始化字典链表模块。
[0033] 所述的非定长码元拼接模块包括:
[0034] 非定长码元到定长码元转换模块,用于将非定长的数据编码拼接成定长的数据;
[0035] 文件大小计算模块,用于计算文件压缩后的数据个数,并与压缩前的文件数据个数比较;
[0036] 压缩模式选择模块,根据文件压缩前和压缩后的数据个数的多少选取压缩模式;
[0037] 数据直接存储模块,用于当数据选择直接存储压缩模式时对数据的操作。
[0038] 所述的数据读出缓存模块包括:
[0039] 两个如随机存取存储器RAM或者先入先出存储器FIFO的数据存储装置,用于存储压缩后的数据;
[0040] 写入数据多路选择器,用于选择将压缩后的数据写入两个数据存储装置中的其中一个数据存储装置;
[0041] 读出数据多路选择器,用于选择读出两个数据存储装置中的其中一个数据存储装置中的数据。
[0042] 进一步的,上述字典模块的哈希表模块包括:
[0043] 两个如随机存取存储器RAM或者内容可寻址存储器CAM的数据存储装置,用于存储最新的历史字典信息;
[0044] 写入多路选择器,用于选择使用两个数据存储装置中的其中一个数据存储装置存储最新的历史字典信息;
[0045] 读出多路选择器,用于选择读取两个数据存储装置中的其中一个数据存储装置中的字典信息;
[0046] 初始化多路选择器,用于选择初始化两个数据存储装置中的一个数据存储装置,交替初始化两个数据存储装置,提高压缩的效率。
[0047] 上述字典模块的字典链表模块包括:
[0048] 两个如随机存取存储器RAM或者内容可寻址存储器CAM的数据存储装置,用于存储其他的历史字典信息;
[0049] 写入多路选择器,用于选择使用两个数据存储装置中的其中一个数据存储装置存储最新的历史字典信息;
[0050] 读出多路选择器,用于选择读取两个数据存储装置中的其中一个数据存储装置中的字典信息;
[0051] 初始化多路选择器,用于选择初始化两个数据存储装置中的一个数据存储装置,交替初始化两个数据存储装置,提高压缩的效率。
[0052] 上述非定长码元拼接模块的非定长码元到定长码元转换模块包括:
[0053] 非定长码元拼接成较短定长数据模块,用于将压缩算法模块输出的非定长编码拼接成较短的定长数据;
[0054] 较短数据拼接成较长数据模块,用于将非定长码元拼接成较短定长数据模块输出的较短数据拼接成较长的数据,与非定长码元拼接成较短定长数据模块并行运行,加速了拼接的过程。
[0055] 一种硬件LZ77压缩实现方法,包括下述步骤:
[0056] (1)缓存待压缩的数据;
[0057] (2)对字符串数据进行压缩编码;
[0058] (3)拼接非定长的数据;
[0059] (4)缓存压缩后的数据。
[0060] 其进一步特征在于,所述步骤(1)缓存待压缩的数据使用多路选择器控制待压缩的数据存储到两个数据存储装置中。
[0061] 所述步骤(2)对字符串数据进行压缩编码过程包括:
[0062] 压缩数据时,取一定量的数据进行哈希变换,在哈希表中查找,若未找到,则所取的一定量的数据是新字符,以新字符编码输出非定长编码,若找到,则所取的一定量的数据是重复字符串,以此为数据头寻找最大的匹配长度,以重复字符串编码输出非定长编码;
[0063] 压缩过程中,根据哈希表和字典链表反馈的信号,对待压缩的数据进行相应的读取操作,对哈希表和字典链表中的数据进行相应的更新;
[0064] 压缩过程中交替初始化和使用两个哈希表和两个字典链表。
[0065] 所述步骤(3)的拼接非定长的数据过程包括:
[0066] 利用移位寄存器将非定长的数据拼接成定长数据;
[0067] 计算压缩后的数据个数,与压缩前数据个数比较,选取适当的压缩模式,若压缩后的数据个数多于压缩前的数据个数,选取直接存储的方式,从缓存待压缩的数据中读取,若压缩后的数据个数不多于压缩前的数据个数,选取压缩存储的方式;
[0068] 添加压缩后的数据块头;
[0069] 对压缩后的数据尾部进行字节对齐处理;
[0070] 与压缩数据并行操作处理,提高了压缩的效率。
[0071] 所述步骤(4)缓存压缩后的数据过程包括:
[0072] 使用写入数据多路选择器,选择将压缩后的数据写入两个数据存储装置中的其中一个数据存储装置;
[0073] 若一个数据块已经完成压缩,则利用读出数据多路选择器,选择读出对应的数据存储装置中的数据。
[0074] 本实用新型通过一种硬件来实现LZ77压缩,能够有效的提高LZ77压缩算法的效率,将CPU从海量数据压缩中解脱出来。