基于lz77算法的数据压缩的方法和装置的制作方法

文档序号:7505171阅读:230来源:国知局
专利名称:基于lz77算法的数据压缩的方法和装置的制作方法
技术领域
本发明涉及数据压缩,特别是″LZ1″数据压缩。
背景技术
在数据压缩领域,Lempel-Ziv算法是众所周知的。特别是其″历史缓冲区″版本,即所谓LZ1算法,在需要编码数据无损压缩的硬件实现中已经非常普遍地应用,因为其相对适中的缓冲区要求和可预知的性能,使它能够良好地适用于大多数技术。
LZ1算法通过考察输入的字符串并记录它所看到的字符来工作。这样,当发现一个串此前已经存在于近期历史记录中时,就在输出串中用一个″标记″代替它,该″标记″是一个指明该串过去的出现位置和长度的代码。压缩器和解压缩器二者都必须使用规定长度的″历史缓冲区″,除此之外不需要在它们之间传送更多信息。
值得处理的串中的、以前未见到过的字符被编码为″基本文字(literal)″。这导致所需位数的增加,但是在大多数数据类型中,标记替代(从而压缩)的机会超过不可压缩的数据,所以实现了总体压缩。一般来说,压缩率分布于2∶1到约10∶1之间。
近年来出现了基本LZ1算法的一些变型,但其改进都是渐进式的。
因为LZ1算法是以字节为单位工作的,所以在压缩输入流的时候,传统的硬件实现一次只考察一个字节。当输入每个字节时,用例如内容可寻址存储器(CAM)扫描″历史缓冲区″以找出该字节的所有出现。因为单字节不是进行串替代的有效候选,所以在进行标记替代之前,任何发现的匹配都要补充以连续匹配。
后续输入的每个字节也要在历史缓冲区中进行查找,然而只有那些跟随在已经存在的匹配后面的匹配才被报告。最后,该串匹配会结束(再也不能发现与已知匹配相邻的匹配时),并且将保持下来的″串匹配″编码以进行替换。匹配越长,节省的位数就越多。
在当前ASIC(专用集成电路)技术的常见时钟速率条件下,每个时钟周期处理一个字节的LZ1算法的简单实现被限于大约100-200MB/s。然而,对于某些针对单数据流需要高带宽的应用(举例来说,诸如存储器压缩、光网络和RAID磁盘阵列)来说,这个速度可能是不够的。为了提高性能,也就是每秒可压缩的字节数,要么必须减小″周期时间″(输入字节并找出所有匹配所花费的时间),要么必须修改CAM以便一次寻找一个以上的字节。鉴于设计多路输入CAM的难度,性能的改进一般都集中于缩短CAM的存取时间,从而也就减小了周期时间。当然,两个方面的改进并非互相排斥的;多字节CAM获得的性能改进将超过任何减小周期时间所获得的性能改进。
在美国专利5,771,011和5,929,791(后者是前者的分案)中可以发现每个周期一个以上字节的压缩的尝试,其中每个周期匹配两个字节。虽然这些专利声称指出了将其技术扩展到两个以上字节所需的步骤,但是他们的教导在有关如何实施方式是不完整和不可实现的虽然他们给出了一个确定其每周期N字节压缩的技术中需要的等式的数目的公式,但并没有指明等式本身是如何推演得来的。他们也没有透露怎样改造所用到的″循环缓冲区″以适合于处理每个周期的更多输入字节。
较早的一个美国专利5,179,378使用不同的技术来比较输入字节和历史缓冲区。不象前述现有技术专利中那样一次输入一个字节并且在每个时钟周期内使用全并行比较(该字节与整个历史缓冲区内容的比较),美国专利5,179,378将比较分成使用″脉动(systolic)阵列″流水线的阶段。然而,该专利的技术并没有取得每个周期一个以上输入字节的处理速率,甚至可能还做不到每个周期一个字节的处理。
因此需要一种能够减轻上述缺点的数据压缩方法和装置。

发明内容
按照本发明的第一个方面,给出一种如权利要求1所述的用于数据串LZ1压缩的装置。
按照本发明的第二个方面,给出一种如权利要求10所述的用于数据串LZ1压缩的方法。


现在参照附图并通过单纯的例子来描述引入本发明的数据压缩方法和装置,附图中图1示出了在使用本发明的压缩装置中所用到比较矩阵的示意方框图;图2的示意方框图详细说明了附图1的压缩装置的比较单元;图3的示意图说明了附图1的压缩装置的压缩运算。
图4的示意方框图详细说明了附图1的压缩装置中所用的压缩单元矩阵的一个具体实现。
具体实施例方式
下面的优选实施例是以属于IBM、被称为″IBMLZ1″的LZ1变型为背景来描述的,但是可以明白,给出的技术适用于LZ1算法的所有版本。该技术可以扩充到每个周期任意数目的字节,或任意长度的历史缓冲区,但是利用一个每周期12字节、带有一个512字节历史缓冲区的设计来说明。
现在参照附图1,压缩装置100包括分别为512字节锁存器110和120的两个组(L1和L2),一组512个进位锁存器130,一个12字节输入缓冲区140,一个MAX功能/优先级编码器150,一个标记编码器160以及比较单元200(下面将非常详细描述)的512×12矩阵170。
L2锁存器组120被分别连接到矩阵170的第一行中的512个比较单元,并且每向下一行便沿对角线顺序向右错位地连接到比较单元,下面将要详细解释。L1锁存器组110和相关的进位锁存器130分别连接到矩阵170的最后一行中的512个比较单元。输入缓冲区140的12个字节被分别连接到矩阵170的最左列中的12行比较单元。MAX功能/优先级编码器150和标记编码器160连接到矩阵170的12行比较单元。
在寻找匹配的时候,12个输入字节必须与整个历史缓冲区相比较。然而,某些输入字节本身就构成了″历史″的一部分。必须假定,在12字节的输入缓冲区中,每个字节都是以时间为序的(chronological order),即使它们都在一个周期内进入。这样,就认为输入缓冲区的一端是″最近的″,而另一端是″最早的″,其中最先进入处理的字节是″最早的″。对每个字节,必须将输入缓冲区中″较早的″字节视作历史的一部分,并且相应加以比较。
将输入字节与历史缓冲区中的字节和输入缓冲区中的较早字节进行比较的方式如附图1所示。考察图左侧的输入缓冲区140,如果是常规类型的处理-一次一个字节-那么顶端的字节就会第一个进入,而底部的字节就会最后一个进入;但是,在本实现中,所有的字节都是在同一时间输入的。可以看到,输入缓冲区所有12个字节的输出被连接到矩阵170中各行的所有比较单元200的输入。在每个时钟周期中,历史缓冲区全部512个字节的内容都要下传,以便与输入缓冲区的第一个(最早的)字节作比较,并且接着沿对角线向下穿过,以便与输入缓冲区中的最近字节相比较。
可以理解,因为历史缓冲区中的每一个字节都必须同时可用,所以不能用常规RAM作为历史缓冲区。在本实现中,历史缓冲区利用寄存器构成,其被安排为电平敏感扫描设计(LSSD)的L1-L2对。在每个时钟周期结束时,12个输入字节被移送到历史缓冲区,而历史缓冲区中的旧内容也随着移动12个字节(如附图1所示右移),最旧的12个字节被丢弃。
在附图1中用剪角方框表示的比较单元200是本设计的基础元件。在附图2中示出了比较单元的展开图。每个模块的任务就是比较两个输入字节的值,将匹配字节的计数加1以及向控制逻辑报告胜选的匹配。
矩阵170中的比较单元200包括一个字节比较器210,用以为比较而接收两个字节值一个是来自该行的输入缓冲区的字节位置的字节值,一个是从对角线左上方单元传送过来的历史缓冲区字节值。设置增量器220从矩阵的同列正上方单元接收″计数输入″值并加″1″。设置选择器230以接收加1后的计数值和″0″值,并在它们之间根据比较器210的输出进行选择。如果比较器210指示匹配,则选择器230就输出递增的计数值;否则输出″0″值。选择器的输出作为一个″计数输出″值传送给同列的正下方单元;选择器的输出还传送给矩阵中处于同一行的MFPE。如加粗的短划线所示,选择器210的输入字节值传送给同行正右方的单元以及对角线右下方的单元。
附图2表明,除了要比较的字节以外,单元200还得到来自它的上方单元的″计数″以及相同行的输入缓冲区140的字节以作为输入,该″计数″代表迄今为止已经见到的串的长度。如果两个输入字节匹配,则比较单元递增该计数,并把新计数传送给它下方的单元。如果两个字节不匹配,则不管输入计数值为何值,均将输出计数置为零。
该计数值还从每个比较单元的右侧输出,并且传送给本行的末端的″MAX功能/优先级编码器″(MFPE)逻辑150。压缩器100的12行中的每一行都有一个这样的MFPE单元。MFPE的功能是决定在该行的512个比较单元中,哪个(些)报告了最长的串(也就是最大的计数MAX功能),并且对在本行中的位置进行编码。如果不止一个列产生了同样大的计数,则MFPE(强制地)编码最左边的值(优先级编码功能)。然而要注意到,MFPE产生的值不一定是将要编码的串,因为串可能继续到该行之外。
在第12行(矩阵170的最后一行)仍然未结束的串匹配可持续到下一个周期。附图1底部的进位锁存器130存储来自该行的任何未结束串的位置。(该串的长度—″计数″—被存在没有示出的分立的单独锁存器中。)在下一个周期中,进位被送到第一行比较单元的″计数输入″中。应该注意到,能够被LZ1算法编码的串长度是有限的,其受到标记中的位数的制约。(在IBMLZ1中,该限制是271个字符。)在达到这个最大数时,发出一个标记,并且串必须从零开始。应当理解,标记编码器160的工作方式与现有技术相同,其结构和功能都无须任何进一步的详述。
(MFPE 150所报告的)每一行的最大串值和它们的编码位置被传送给标记编码器(TE)160。TE检查每一行所报告的长度,决定对于这一批12个字节在何处对串进行编码。如果串将被编码,TE利用MFPE所报告的位置和串长度分别作为标记的一部分。注意,当一个长串跨越一个以上周期时,该长度可能会上升到12以上。当这种情况发生时,在TE中累加计数,以准备在串结束时进行编码。
如果没有发现串(注意,仅有一个字节的匹配是不值得编码的),或者12个字节中有某些是不匹配的,则TE必须输出基本文字。为此,TE直接从输入缓冲区140中取得数据。
附图3示出了压缩运算300的一个瞬间情况。前一个的句子作为输入,并且为简单起见,在附图中只示出了5个输入字节和27个历史缓冲区字节。实心圆圈(位于列310、320、330、340和350)指出在那里检测到匹配;在当前输入字节″ion″的列320处可以看到一个有用的串匹配。该行中列320的位置将被传递以用于编码。
在附图4中示出了比较单元的一种可能实现400。比较单元400(图中举例为矩阵170中行3的单元)有一个比较器410,如同前述,它接收要比较的两个字节值。三个AND门422、424和426在其输入中各有一个被连接以接收比较器410的输出,并且所述AND门还将其其它输入连接,以从同一列正上方的比较单元接收三个位线(携带3位的″输入计数″值)中的相应位线。AND门422、424和426的输出,与比较器410的输出(载有4位的″输出计数″值)一起连接到同一列正下方的比较单元。最左边的三条″输出计数″位线分别连接到三个AND门432、434和436的输入。AND门432、434和436的输出,与AND门426的输出一起连接到4输入OR门440的输入。
OR门440的输出(与矩阵170第3行中的其它比较单元400的输出一起)在MFPE 500中连接到512输入优先级编码器510的输入。同样,在MFPE 500中,AND门422、424和426的输出(与矩阵170第3行中其它比较单元400的AND门的输出一起)连接到512输入OR门522、524和526的相应输入。OR门522、524和526的输出反向连接到矩阵170第3行中每个比较单元400中的AND门432、434和436的输入。
比较器410与前述比较单元200中的比较器210是一样的,只不过在比较单元400中,″计数″由一个N位向量保存。该向量的各个位的编号是1到N,如果计数是n,就用位1到n都为″1″来表示。向量中的其余各位都是″ 0″。因此,零计数就是所有的位都是″0″。在本设计中,这是一个有用的计数方法,因为
1.所需要的位数,N,只需要和行号一样大(行1只需1位,行12需12位);2.″计数″可容易递增,只不过是向右移位同时用″1″填充;3.容易实现MAX功能,只要对所有向量的对应位一起进行OR操作。
利用比较单元中的少量额外的逻辑(具有AND门432、434和436,以及OR门440的形式),也能使优先级编码器变得简单。
在附图4的比较单元400的运算中,其工作如下所述。输入计数用一个3位向量表示,可以表示4个值

如果比较器410在本行(第3行)、本列检测到一个匹配,它将计数加1,从单元底部产生一个4位的向量″输出计数″。通过把输入向量有效右移一位,并且在左边加入″1″,完成了计数递增。如果此处无匹配,则AND门422、424和426全部关闭,并且″输出计数″清除为零。
如附图4所示,4位计数的一个修改版本被输出到本行末端的MFPE中的逻辑电路510、522、524和526。三个512输入OR门522、524和526决定本行的最大计数(不采用低阶位,因为它表示只有一个字节的计数)。该最大值用于使小于胜出计数的所有计数失效,为此要用到不对该最大计数产生贡献的列的比较单元400中的AND门432、434和436。出现最大计数的那些比较单元在编码器的输入上声明其侯选地位,而优先级编码器则对它们之中最靠左的单元的位置进行编码。在底行的比较单元中的OR门440的″胜选″输出包括存储用于下个周期的512个″进位″位。
尽管以上描述已经说明了在一个周期中发生的所有运算,但是该设计并不排除流水线的某些元件。关键因素是每行的进位都必须在一个周期内成功存储,以备下一个周期的计算所用。
这里,为下一周期产生有效进位的关键定时路径由最多12个AND门(根据具有12个匹配的串)组成,其通过512输入OR门(其可能有几个级联门),然后通过另外两个AND门完成进位。
这样,总共大约20个门的延迟决定了本设计的最高运算频率。可以利用先行(look-ahead)技术来减小12个AND门的延迟,虽然这要增加门的数量。
可以看出,在矩阵170中,越是下面的行,其中的比较单元400就按比例具有更多的门,因此可以理解,门的总数随着每周期处理的字节的数目的平方而增加。
同样可以理解,以上所描述的装置和方法一般将以例如集成电路(没有示出)的硬件形式实现,比如ASIC(专用集成电路)。
总而言之,可以理解,以上描述已经说明了怎样构成一个能够在每个周期内处理任意个字节的LZ1压缩器,所述字节数目的限制在于门的数量和定时条件。
可以理解,以上描述的数据压缩技术可以用于广泛的存储器和通信应用中。
可以理解,以上描述的数据压缩技术具有的优点是,它可以扩展到每周期任意字节数,或任意长度的历史缓冲区,故能在任何期望的带宽上工作(如前已提到的,限制只在于门的数量和定时条件)。
可以理解,对于本技术领域的一般技术人员来说,不难对以上描述的本发明优选实施例做出另外的变化。
权利要求
1.一种用于数据串的LZ1压缩的装置(100),该装置包括输入缓冲区装置(140),用于保存数据串的第一字节序列;历史缓冲区装置(110、120),用于保存数据串的第二字节序列;矩阵比较装置(170),连接到输入缓冲区装置和历史缓冲区装置,并且具有多个行和列的比较单元(200),该比较单元用于比较保持在输入缓冲区装置中的字节与保持在历史缓冲区装置中的字节,历史缓冲区装置的字节连接到矩阵比较装置中沿对角线错位的比较单元;检测装置(150),用于在每一行中检测这样的列其中在该行的比较单元与同一列中前面的比较单元中发生了最大数目的连续字节匹配;和装置(160),用于将检测装置检测到的匹配字节序列编码为标记。
2.如权利要求1所述的装置,其中矩阵比较装置(170)包括计数装置(220、230),用于在每个比较单元(200)处产生有关在该比较单元和同一列中前面的比较单元处所发生的连续字节匹配的数目的计数;并且检测装置(150)包括用于在每一行中检测产生最大计数的列的装置。
3.如权利要求2所述的装置,其中每个比较单元包括比较器装置(210),用于比较来自输入缓冲区装置和历史缓冲区装置的字节;增量器装置(220),用于接收和递增来自同一列中另一个比较单元的计数值;选择器装置(230),用于接收比较器装置的输出,并据此选择增量器装置的输出或者零值,以传送给同一列的另一个比较单元。
4.如权利要求2所述的装置,其中每个比较单元(400)包括比较器装置(410),用于比较来自输入缓冲区装置和历史缓冲区装置的字节;用于接收具有若干位的值,所述若干位表示来自同一列中另一个比较单元的计数值,以及接收比较器装置的输出并据此将该值置零,或通过移位并添入附加位将该值递增的逻辑装置(422、424、426)。
5.如权利要求4所述的装置,其中检测装置(500)包括用于接收所述值的各个位以作为输入,并且对其执行逻辑OR运算以产生该值的最大值的逻辑装置(522、524、526)。
6.如上述任何一个权利要求所述的装置,其中历史缓冲区装置包括第一移位寄存器装置,连接到矩阵比较装置的第一侧的一行中的比较单元;和第二移位寄存器装置,连接到矩阵比较装置的与第一侧相对的第二侧的一行中的比较单元。
7.如权利要求6所述的装置,其中第一移位寄存器装置和第二移位寄存器装置包括位于同一移位寄存器中的电平敏感扫描设计(LSSD)对。
8.如以上任何一个权利要求所述的装置,其中第一字节序列和第二字节序列在数据串内是连续的。
9.如以上任何权利一个要求所述的装置,进一步包括进位装置(130),用于存储根据用输入缓冲区装置与历史缓冲区装置中第一配置的数据进行的比较而得到的列进位信息,以便用于通过输入缓冲区装置与历史缓冲区装置中第二配置的数据所进行的比较。
10.一种用于数据串的LZ1压缩的方法(300),包括在输入缓冲区(140)中保存数据串的第一字节序列;在历史缓冲区(110、120)中保存数据串的第二字节序列;在矩阵比较装置中比较(170)保持在输入缓冲区中的字节与保持在历史缓冲区中的字节,该矩阵比较装置与输入缓冲区和历史缓冲区相连接,并且具有多个行和列的比较单元(200),历史缓冲区的字节连接到连接到矩阵比较装置中沿对角线错位的比较单元;在每一行中检测(150)这样的列其中该行的比较单元与同一列中前面的比较单元处产生最大数目的连续字节匹配;把在检测步骤(150)中检测到的匹配字节序列编码(160)为标记。
11.如权利要求10所述的方法,其中比较步骤(170)包括在每个比较单元(200)处产生(220、230)有关发生在所述比较单元和同一列中前面的比较单元的连续字节匹配的数目的计数;并且检测步骤(150)包括在每一行中检测产生最大计数的列。
12.如权利要求11所述的方法,其中在每个比较单元中,比较步骤包括在比较器装置中比较(210)来自输入缓冲区装置和历史缓冲区装置的字节;在增量器装置中将接收自同一列中另一个比较单元的计数值递增(220);根据比较器装置的输出,选择(230)增量器装置的输出或零值以传送到同列中的另一个比较单元。
13.如权利要求11所述的方法,其中在每个比较单元(400)中,比较步骤包括在比较器装置(410)中比较来自输入缓冲区和历史缓冲区的字节;接收(422、424、426)具有若干位的值,所述若干位表示来自同一列中另一个比较单元的计数值,接收比较器装置的输出并据此将该值置零,或者通过移位并添入附加位来递增该值。
14.如权利要求13所述的方法,其中检测装置(500)的步骤包括接收(522、524、526)该值的各个位并对其执行逻辑OR运算,以产生该值的最大值。
15.如上述权利要求10-14中任何一个所述的方法,其中历史缓冲区包括第一移位寄存器装置,连接到矩阵比较装置的第一侧的一行中的比较单元;和第二移位寄存器装置,连接到矩阵比较装置的与第一侧相对的第二侧的一行中的比较单元。
16.如权利要求15所述的方法,其中第一移位寄存器装置和第二移位寄存器装置包括位于同一移位寄存器中的电平敏感扫描设计(LSSD)对。
17.如上述权利要求10-16中任何一个所述的方法,其中第一字节序列和第二字节序列在数据串内是连续的。
18.如上述权利要求10-17中任何一个所述的方法,还包括存储根据用输入缓冲区装置与历史缓冲区装置中第一配置的数据进行的比较而得到的列进位信息,以便用于通过输入缓冲区装置与历史缓冲区装置中第二配置的数据所进行的比较。
19.一种集成电路,包括如权利要求1-9中任何一个所述的装置。
20.如权利要求19所述的集成电路,其中集成电路是专用集成电路(ASIC)。
全文摘要
数据串LZ1压缩的一种方法和装置,其中多路输入符号与历史缓冲区以如下方式进行并行比较在输入缓冲区(140)中保存数据串的第一字节序列;在历史缓冲区(110、120)中保存数据串的第二字节序列;在矩阵比较装置中,对存于输入缓冲区的字节与存于历史缓冲区的字节进行比较(170),矩阵比较装置连接到输入缓冲区和历史缓冲区并具有多个行和列的比较单元(200),历史缓冲区的字节被连接到矩阵比较器件中的对角错位的比较单元;在各行中检测(150)这样的列在本行处的比较单元和同列中前面各比较单元中出现最大数量的连续字节匹配;把在检测步骤(150)中检测到的匹配字节序列编码(160)为一个标记。
文档编号H03M7/40GK1552127SQ03800988
公开日2004年12月1日 申请日期2003年1月30日 优先权日2002年5月9日
发明者高登·科克伯恩, 亚德里安·约汉·豪伊斯, 安 约汉 豪伊斯, 高登 科克伯恩 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1