用于数据压缩的电路和设备的制作方法

文档序号:7505312阅读:154来源:国知局
专利名称:用于数据压缩的电路和设备的制作方法
技术领域
本发明涉及数据压缩,尤其涉及‘LZ1’数据压缩。
背景技术
在数据压缩的领域中,Lempel-Ziv(莱佩尔齐夫)算法是众所周知的。尤其是被称为LZ1的“历史缓冲器”形式,由于其相对适中的缓冲器要求和可预测的性能使它良好地适合于大多数技术,已经在要求编码数据无损压缩的任何硬件实现中变得特别流行。
LZ1算法是通过检查输入字符串和保留已经看到过的字符记录工作的。然后,当在新近历史中出现以前已经出现过的串时,在输出串中用一个“记号”-指示该串过去出现的地方和有多长的代码替换它。压缩器和解压缩器两者必须使用规定长度的“历史缓冲器”,然而在别的方面却不再需要在它们之间传递任何更进一步的信息。
在有价值的串中以前没有看到过的字符被编码成“文字”。这相当于所需位数的扩大,但是,在大多数类型的数据中,记号替代(因此,压缩)的机会多于不可压缩数据,因此,总体上实现了压缩。典型的压缩比在从2∶1到大约10∶1的范围内。
数年来基本LZ1算法出现了一些变化,但这些改进是递增的。
由于LZ1算法以字节为单位工作,传统硬件实现在压缩输入流的时候仅仅考虑一个字节。随着每个字节被输入,对于字节的每一次出现,都利用,例如,内容可寻址存储器(CAM)扫描“历史缓冲器”。当单个字节不被认为是串替换的有效候选者时,必须在记号替代发生之前,用相邻匹配补充找到的任何匹配。
还在历史缓冲器中寻找输入的每个后续字节,但是,报告的匹配只是接在存在的匹配之后的那些。最后,串匹配可能终止(当再也找不到与已知匹配相邻的匹配时)并且编码残存的“串匹配”以便加以替代。匹配越长,节约的位就越多。
对于目前的ASIC(专用集成电路)技术,在典型时钟频率下,每个时钟周期处理一个字节的LZ1算法的简单实现局限于大约100-200MB/s(兆字节/秒)。但是,对于对单个数据流需要高带宽的一些应用(例如,存储器压缩、光纤网络和RAID(廉价磁盘冗余陈列)磁盘陈列)来说,这可能是不够的。为了提高性能即每秒可能压缩的字节数,必须缩短“周期时间”(输入字节和找到所有匹配所花费的时间),或者将CAM修改成每次搜索多于一个字节。由于设计多输入CAM的困难,性能改进通常集中在缩短CAM的访问时间,进而缩短其周期时间上。但是,理所当然,这两种改进不是相互排斥的,多字节CAM将获得超过周期时间的任何缩短所得的性能。
在相同申请人与本申请同时提出、申请人参考号为GB9-2001-0056、发明名称为“METHOD AND ARRANGEMENT FOR DATA COMPRESSION(数据压缩的方法和设备)”的GB专利申请(特此全文引用以供参考)中,描述了通过如下步骤对数据串进行LZ1压缩的方法和设备在输入缓冲器中保存数据串的第一列字节;在历史缓冲器中保存数据串的第二列字节;在与输入缓冲器和历史缓冲器耦合(couple)并含有数行数列比较单元的矩阵比较装置中,将保存在输入缓冲器中的字节与保存在历史缓冲器中的字节相比较,历史缓冲器的字节被耦合到矩阵比较装置中的对角移位比较单元;在每一行中检测这样的列,它在那一行中的比较单元和同一列中的前面比较单元上出现最大相继字节匹配数;和将在检测步骤中检测的一列匹配字节编码成一个记号。
然后,尽管这种技术可以推广到每个周期任意个字节,但在这种实现中消耗的逻辑门数随字节数的平方增加,因此,超过每个周期大约4个字节的设计都要付出高昂的代价。
因此,需要一种可以减轻上述缺点的数据压缩方法和设备。

发明内容
根据本发明的第一方面,提供了如权利要求1所述、用于对数据串进行LZ1压缩的比较矩阵的电路。
根据本发明的第二方面,提供了如权利要求7所述、对数据串进行LZ1压缩的设备。
根据本发明的第三方面,提供了如权利要求8所述、用于对数据串进行LZ1压缩的比较矩阵的方法。
根据本发明的第四方面,提供了如权利要求14所述、对数据串进行LZ1压缩的方法。


现在参照附图,只通过举例的方式描述包含本发明的一种数据压缩方法和设备,在附图中图1示出了用于利用本发明的压缩设备的比较矩阵的方块示意图;图2示出了详细例示图1的压缩设备的比较单元的方块示意图;图3示出了例示图1的压缩设备中的压缩操作的示意图;图4示出了详细例示用于图1的压缩设备的比较单元矩阵的具体实现的方块示意图;图5示出了例示利用本发明取得的门数量减少的示意图;图6示出了例示可能用于本发明的4-路击穿(4-way breakdown)的例子的方块示意图;图7示出了例示可能用在本发明中的延迟缩短的方块示意图;图8示出了例示可能用在本发明中的前视进位(look-ahead carry)的生成的方块示意图;图9示出了例示可能出现在本发明中的“前视进位令人失望(look-aheadcarry pessimism)”问题的例子的方块示意图;和图10示出了例示可以在本发明中获得的压缩效率的恢复的信号时序图方块。
具体实施例方式
下面在归属于IBM(美国国际商用机器公司)和称为“IBMLZ1”的LZ1变体的背景下描述优选实施例,但是,应该明白,所展示的技术可应用于LZ1算法的所有形式。这种技术可推广到每个周期任意个字节,或任意长度的历史缓冲器,但这里只利用具有512-字节历史缓冲器的12-字节每周期设计加以描述。
现在参照图1,压缩设备100包括两组(L1和L2)512-字节锁存器110和120、一组512进位锁存器130、一个12-字节输入缓冲器140、一个MAX函数/优先级编码器150、一个记号编码器160和压缩单元200(下面将更详细描述它)的512×12矩阵阵列170。
L2锁存器120分别与矩阵170的第1行中的512个比较单元耦合,并正如下面将更详细说明的那样与矩阵的每一较低行中逐个向右对角移位一个单元的比较单元耦合。L1锁存器110和相关进位锁存器130分别与矩阵170的最后一行的512个比较单元耦合。输入缓冲器140的12个字节分别与矩阵170的最左列中的比较单元的12个行耦合。MAX函数/优先级编码器150和记号编码器160与矩阵170中的比较单元的12个行耦合。
在搜索匹配时,必须将12个输入字节与整个历史缓冲器相比较。然而,一些输入字节本身构成“历史”部分。12-字节输入缓冲器必须假设每个字节也有先后之分,哪怕它们都是在一个周期内输入的。因此,输入缓冲器的一端被认为是“最近(last recent)”,另一端是“最早”,仿佛“最早(leastrecent)”字节首先进入进程似的。每个字节必须认为输入缓冲器中“较早”的那些是历史部分,据此加以比较。
将输入字节与历史缓冲器中的字节和输入缓冲器中的较早字节两者加以比较的方式显示在图1中。考虑图左侧的输入缓冲器140,如果处理是传统型的-每次一个字节,那么顶上的字节将首先进入和底下的字节最后进入,然后,在本实现中,所有字节是同时输入的。正如所看到的那样,输入缓冲器的输出-所有12个输入字节-与矩阵170的每一行中所有比较单元200的输入端连接。在每个时钟周期中,为了与输入缓冲器的第1(最早)字节相比较,向下馈入历史缓冲器的内容-它的所有512个字节,然后,为了与输入缓冲器的最近字节相比较,对角向下和在对面馈入历史缓冲器的内容-它的所有512个字节。
应该明白,由于历史缓冲器的每个字节必须立即可用,传统RAM不能用于历史缓冲器。在本实现中,利用被安排成电平敏感扫描设计(LSSD)L1-L2对的寄存器构造历史缓冲器。在每个时钟周期结束时,将12个输入字节移入历史缓冲器中,将历史缓冲器的老内容向前(向如图1所示的右侧)移动12个字节,并放弃最老的12个位。
在图1中用缺角正方形表示的比较单元200是这种设计的基本元素。比较单元的放大图显示在图2中。每个方块的工作是比较两个输入字节的值,总计达到匹配字节的计数,并且向控制逻辑块报告取胜匹配。
矩阵170中的比较单元200包括字节比较器210,字节比较器210被安排成接收来自那一行的输入缓冲器字节位置的字节值并从左上角的一个单元传递的历史缓冲器字节值以便加以比较。递增器220被安排成接收来自矩阵的同一列正上方的一个单元的‘计数输入’值并将其递增‘1’。选择器230被安排成接收递增的计数值和‘0’值,并取决于比较器210的输出,在它们之间作出选择。如果比较器210指示匹配,选择器230输出递增的计数值;否则,它输出‘0’值。将选择器的输出作为‘计数输出’值传递给同一列正下方的一个单元;还将选择器输出传递给处在矩阵的同一行的MF/PE。如粗虚线所示,输入到选择器210的字节值被传递给同一行正右方的一个单元和右下角的一个单元。
图2示出了除了要比较的字节之外,单元200还将指示到目前为止看到的串的长度的、来自上面的单元的“计数”和输入缓冲器140的同一行的字节取作输入。如果两个输入字节匹配,那么,比较单元将递增那个计数,并且将新计数传递给在它下面的单元。如果两个字节不匹配,那么,无论输入计数值是什么,输出计数都将被设置成0。
这个计数的值也是从每个比较单元的右侧输出的,并且被馈送到处在该行末端的“MAX函数/优先级编码器(MF/PE)”逻辑块150。这些MF/PE单元之一用于压缩器100的12行中的每一个。MF/PE的功能将决定那一行中的512个比较单元200的那个(些)比较单元200报告了最长串(即,最大计数-MAX函数),并编码在该行内的位置。如果多于一列生成同一大计数,那么MF/PE(任意)编码最左边的值(优先编码功能)。但是,应该注意到,MF/PE生成的值未必是将要编码的串,因为该串可能延续到那一行之外。
在第12行(矩阵170的最后一行)中仍然活着的串匹配可能延继到下一个周期。在图1的底部的进位锁存器130存储来自这一行的任何残存串的位置(那个串的长度-“计数”-被存储在未示出的分立的单个寄存器中)。使这个进位馈入针对下一个周期中的比较单元的第1行的“计数输入”。应该注意到,在记号中通过位数施加的、LZ1算法可以编码的串长度是有限度的(在IBMLZ1中,这个限度是271个字符)。当达到最大数时,发出一个记号,该串必须重新从零开始。应该认识到,记号编码器160以与现有技术中已知的相同方式操作,它的结构和功能无需作任何进一步详细描述。
将(MF/PE150报告的)每一行的最大串值和它们的编码位置馈送到记号编码器(TE)160。TE检查每一行的报告长度,并且为这批12个输入字节确定可以编码串的地方。在要编码串的地方,TE将MF/PE150报告的位置与串长度一起用作记号的一部分。注意,当长串横跨多于一个周期时,长度可能上升到多于12个。当发生这种情况时,在TE中积累计数,为串终止时的编码作好准备。
如果没有发现串(注意,仅仅一个字节的匹配不值得编码),或者如果12个字节中的一些不能匹配,那么,TE必须输出文字。为此,TE直接从输入缓冲器140中取出数据。
图3示出了压缩操作300的瞬像(snapshot)。前一句子用作输入,为了简单起见,只示出了5个输入字节和27个历史缓冲器字节。实心圆圈(在第310、320、330、340和350列)表示检测到匹配的地方。在当前输入字节“ion”中,在第320列上可以看到有用串匹配。将要为编码而转发的正是该行中第320列的位置。
比较单元的可能实现400显示在图4中。比较单元410(如图所示,它是矩阵170的第3行的一个单元)含有接收如上所述要加以比较的两个字节值的比较器410。三个AND(“与”)门422、424和426中的每一个都含有它们连接成接收比较器410的输出的输入端之一,并含有它们连接成从同一列正上方的比较单元接收三条位线(携带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的输出端一起)在MF/PE 500内被连接到512-输入优先级编码器510的输出端。此外,在MF/PE500内,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’。因此,零的计数通过所有位都是零来显示。在这种设计中,这是有用的计数方法,因为1.所需的位数N只需要与行数一样大(第1行只需要1个位,第12行需要12个位);2.“计数”易于递增,只不过右移一下,用‘1’填上即可;和3.MAX函数易于实现,一起对所有矢量的各自位进行OR操作即可。
利用比较单元中的少量额外逻辑块(AND门432、434、和436和OR门440的形式的),也使优先级编码器变得简单。
在图4的比较单元400的操作中,这个工作如下。输入计数用可以指示4个值的3-位矢量来表示。

如果比较器410检测到在这一行(第3行)的这个列中匹配,则使计数递增,以从单元的底部生成4-位矢量‘输出计数’。递增是通过有效地将输入矢量右移一个位,将‘1’加在左侧上取得的。如果这里没有匹配,则AND门422、424和426都关闭,‘输出计数’跌落成0。
将4-位计数的改进形式输出到也显示在图4中的、在该行的末端上的MF/PE 500中的逻辑电路510、522、524和526。三个512-输入OR门522、524和526决定这个行的最大计数(不使用低位,因为它代表只有1个位的计数)。借助于对这个最大计数没有贡献的列的比较单元400中的AND门432、434和436,这个最大值用于剥夺小于取胜计数的所有计数的资格。显示最大计数的那些比较单元在编码器输入端上声明它们的候选者,并且优先级编码器编码它们最左侧的位置。底行的比较单元中的OR门440的“取胜”输出端包括要为下一个周期存储的512个“进位”位。
尽管上面的描述已经显示了发生在单个周期中的所有操作,但该设计并不排除流水线操作的一些要素。关键因素是在一个周期内必须成功地存储每一行的进位,为包括在下一个周期的计算中作好准备。
生成下一个周期的有效进位的关键定时路径在这种情况下由多达12个AND门(来自12个匹配串)经由512-输入OR门(也许含有几个级联门),然后经由两个或更多个用于进位的AND门来组成。
因此,总共大约20个门延迟决定这种设计的最大操作频率。利用先行技术可以缩短12个AND门延迟,但这会使门数量增加。
应该明白,矩阵170的较低行中的比较单元400成比例地含有更多的门,因此,不言而喻,总门数随每个周期处理的字节数的平方增加。
减少门数量由于总门数随每个周期处理的字节数(N)的平方增加(按照N(N+1)/2),因此对于每个周期处理的较大字节数(例如,大于4个),总门数可能变得不可行。为了减少这种不可行性,可以将另外的技术用于减少总门数。
现在参照图5A,可以把比较矩阵170的每一列看做门的‘三角形’(600),在三角形顶端上数量较少。在三角形底端上的输出是指示最长残存串并为下一个周期存储的‘进位’。三角形的面积与使用的门数量成正比。
现在参照图5B,通过将每个三角形分解成排列640中相应较小总面积的较小三角形(610、620、630),可以取得较高的效率。将图5A的单个三角形分解成图5B的三个三角形610、620和630导致门从78个减少到30个。
每个较小三角形必须生成它自己输入到在下面的下一个三角形的‘进位’。这个进位存在于向最长当前串发信号的所有列上,因此,需要来自MAX函数/优先级编码器(MF/PE逻辑块)的反馈。因此,每个进位的生成都招致额外延迟,所有这些延迟的总和限制了该设计可以分解的三角形的数量,从而限制了可以做到的节省量。
更详细的例子显示在图6中。像图6A那样显示在图的左方和下方的原设计(与如图5A所示的三角形门排列相对应)是一种12字节每周期的设计,12*(12+1)/2或78个门用于串累积逻辑块。直到进位输出的时间大约是(12+1)=13个门延迟。缩减设计(其四分之一显示在像图6B那样的图的右上方上的虚线方框中)将它分解成3字节每周期的比较器的4重叠代(与具有3重叠代的图5B的排列相比),花费4*3*(3+1)/2或24个门,经过时间为4*(3+3)=24个门延迟。
缩短延迟尽管在图6B的排列中,门数量已经显著减少,但随之发生的延迟的增加对于所需的周期时间来说可能太大。为了抵消这种情况,可以应用一些流水线操作。
在图7A中,示出了图6B的简化形式,包括一个锁存器710和门的4个级或三角形720、730、740和750。图7B显示了如何进一步提高图6B的设计,以缩短每个周期的延迟。在图7B的排列中,图7A的进位链已分裂成两个,来自级730的前一半进位(B)的结果被锁存(在锁存器76中),为第2周期(D)作好准备。在第2周期中将锁存的进位向下传播给链的其余部分,而前一半处理下一个周期的进位。因此,所需周期时间缩减了一半。
然而,存在的复杂性在于,进位链的前一半需要前一个周期的完整进位作为输入(A)。这要求与从图7A的排列中生成的值相同的值。但是,前一个周期只生成来自链的前一半的进位,因为该周期太短难以生成整个进位。
为了解决这个问题,进位链的前一半必须生成用于生成整个链的进位的前视进位(C)。注意,不必对列数据进行全面处理(将由在锁存器760右面的逻辑块在第2周期内完成)。仅仅需要提供进位(具有最大残存串的一列或数列)。这种进位可以在比第二组门提供的全面处理少的门中生成。这个前视进位(C)是在级770中生成的。
前视进位图8示出了如何生成这个前视进位。六个较低比较器(三个来自级740和三个来自级750)的输出与从上块输出的进位(图7B中的信号‘B’)一起使用。与位于图6A底端的进位发生器相似的逻辑块确定第12行中的最佳残存串。这是适合用在下一个周期中的进位。
前视进位令人失望然而,虽然图9的先行逻辑块生成的进位是有效进位,但它可能给不出最佳压缩。因为它集中在第12行上(需要它是为了满足时序约束),所以可能失去一些其它串候选者。
图9示出了这种情况如何发生的例子。该图示出了出现在底下六行中的三个串(910、920和930)。长度为4的最左串(910)赢得了先行竞争,因为它比长度为3的最右串(930)长。但是,长度为3的中间串(920)(通过先行估计看不到的)生成三个当中来自上块的进位,并且在此点遮挡了最左串(910)。随着来自上块的进位消失,最左串(910)将开始出现在下一条线上,并且它的长度将降低为3。因此,在最后一条线上残存的两个串(910和930)将生成一个进位;最右串(930)最后可以容易地提供较长的匹配。
这种‘令人失望’的结果(假设最右串930不是最后胜者)是存储了较少的进位,这又意味着未找准在下一个周期中接近有效长度的串。这不会造成错误,但可能稍微降低编码器的压缩效率。
但是,压缩效率可以通过牺牲一些性能来恢复。前视进位发生器总是生成与完全解码一样多或比完全解码少一点点的进位。完全解码的结果在第2周期上得知对于全速操作来说这通常太晚。通过将前视进位的锁存值与从第2周期输出的完全进位相比较,可以确定第1周期进位是否不够。如果是的话,可以利用新进位设置重复该周期。
图10示出了如何操作的例子。该图示出了来自图7B的五个点A、B、C、D和E上的信号,它们是在各个级上生成的进位。信号上的号码指示生成那个特定进位的输入周期。问号示出生成的进位可能不正确,即,可能太令人失望了。
在第1周期中,在输入号1期间生成锁存的前视进位。在这个周期期间,顶块生成一个进位(B上的2),稍后生成前视进位(C上的2?)。在这一点上先行估计的质量是不肯定的,因此加上‘?’。同时,(D)具有来自输入号1的锁存的进位,并且为(E)上的数据的下一半生成进位。
在第2周期中,(A)具有锁存的不确定的前视进位。在(B)和(C)两者上生成的进位将是不确定的(如3?所示),因为它们两个都取决于(A)。但是,(D)和(E)示出了好进位,因为它们是从整个链导出的,尽管延迟了一个周期。
在第2周期末端(如1000′所指),将(A)上的锁存的前视进位与来自(E)的真正进位相比较。由于在本例中假设它们是相同的,锁存的前视进位(A上的2)是好的,因此,从它导出的进位(B上的3)也是好的。注意,在这个周期中生成的前视进位(C上的3?)还不值得信任(进位值可能要改进),因此,在下一个周期上它的锁存形式(A)仍然显示‘?’。
第3周期是相似的,除了假设在周期末端(如1000″所指)上的(A)和(E)之间的比较失败之外,锁存的前视进位(3?)太令人失望。因此,放弃从它导出的结果(两个4?),并根据(E)而不是(C)来锁存(A)。现在利用已知的好进位重复该周期,并生成新进位。
可以看出,当前视进位太令人失望时偶尔加上的额外周期将恢复整个效率。应该记住,没有这种检验的比较操作将仍然正确(将正确地解压缩),但可能显示不出一样大的压缩比。于是,上述技术的使用应该是可选择的,取决于希望速度还是希望高压缩比。
总结总而言之,应该明白,本发明提供了对较早的LZ1多字节压缩器的改进,这显著地减少了关于每个周期给定字节数所需的门数量。可以应用流水线操作来补偿额外延迟,这使前视进位发生器成为必需品。前视进位的不足可以通过性能的少量损失来校正。
还应该认识到,如上所述的设备和方法通常用硬件,例如,以诸如ASIC(专用集成电路)之类集成电路(未示出)的形式实现。
应该明白,如上所述的数据压缩技术可以用在各种各样的存储和通信应用中。
权利要求
1.一种用在比较矩阵(170)中的电路(640),该比较矩阵(170)通过将保存在输入缓冲器(140)中的字节与保存在历史缓冲器(110,120)中的字节相比较来对数据串进行LZ1压缩,该电路包括串联的数个逻辑门级(720,730,740,750),数个逻辑门级的每一个被安排成生成传递给该单元的输出端和数个逻辑门级的另一个之一的进位值,数个逻辑门级中的级数和数个逻辑门级的每一个中的逻辑门数的乘积小于具有单个逻辑电路级的等效电路所需的逻辑门数。
2.根据权利要求1所述的电路,进一步包括接收来自另一个进位值生成电路的进位值的、与该电路的输入端耦合的输入锁存器(710)。
3.根据权利要求1或2所述的电路,进一步包括生成前视进位值的、与数个逻辑门级的预定个耦合的装置(770)。
4.根据权利要求3所述的电路,进一步包括耦合成从与生成前视进位值的装置(770)耦合的逻辑门级接收进位值的中间锁存器(760)。
5.根据权利要求3或4所述的电路,其中,生成前视进位值的装置(770)包括通过逻辑门(800)与比较器的输出端耦合和被安排成与比较矩阵的其它列的比较单元耦合的逻辑装置(810)。
6.根据权利要求3、4或5所述的电路,进一步包括将在电路输出端生成的进位值与较早生成的前视进位值相比较,以确定是否要改进进位值的装置。
7.一种对数据串进行LZ1压缩的设备(100),该设备包括输入缓冲器(140),用于保存数据串的第一列字节;历史缓冲器(110,120),用于保存数据串的第二列字节;与输入缓冲器和历史缓冲器耦合和含有数行数列比较单元(400)的比较矩阵(170),用于将保存在输入缓冲器中的字节与保存在历史缓冲器中的字节相比较,历史缓冲器的字节被耦合到比较矩阵中的对角移位比较单元;检测装置(150),用于在每一行中检测这样的列,它在那一行中的比较单元和同一列中的前面比较单元上出现最大相继字节匹配数;和将检测装置(150)检测的一列匹配字节编码成一个记号的装置(160),比较单元包括基于权利要求1-6的任何一项的电路(640)。
8.一种用在比较矩阵(170)中的方法,该比较矩阵(170)通过将保存在输入缓冲器(140)中的字节与保存在历史缓冲器(110,120)中的字节相比较来对数据串进行LZ1压缩,该方法包括提供串联的数个逻辑门级(720,730,740,750),数个逻辑门级的每一个生成传递给该单元的输出端和数个逻辑门级的另一个之一的进位值,数个逻辑门级中的级数和数个逻辑门级的每一个中逻辑门数的乘积小于具有单个逻辑电路级的等效电路所需的逻辑门数。
9.根据权利要求8所述的方法,进一步包括提供与该单元的输入端耦合和在那里接收来自另一个进位值生成电路的进位值的输入锁存器(710)。
10.根据权利要求8或9所述的方法,进一步包括提供生成前视进位值、与数个逻辑门级的预定个耦合的装置(770)。
11.根据权利要求10所述的方法,进一步包括提供耦合到与生成前视进位值的装置(770)耦合的逻辑门级并从与生成前视进位值的装置(770)耦合的逻辑门级接收进位值的中间锁存器(760)。
12.根据权利要求10或11所述的方法,其中,生成(770)前视进位值的步骤包括提供与数个逻辑门级的预定个的比较器的输出端耦合和与比较矩阵的其它列的比较单元耦合的逻辑装置(810)。
13.根据权利要求10、11或12所述的方法,进一步包括将在该单元的输出端生成的进位值与较早生成的前视进位值相比较,以确定是否要改进进位值。
14.一种对数据串进行LZ1压缩的方法(300),该方法包括在输入缓冲器(140)中,保存数据串的第一列字节;在历史缓冲器(110,120)中,保存数据串的第二列字节;在与输入缓冲器和历史缓冲器耦合和含有数行数列比较单元(400)的比较矩阵中,将保存在输入缓冲器中的字节与保存在历史缓冲器中的字节相比较(170),历史缓冲器的字节被耦合到矩阵比较装置中的对角移位比较单元;在每一行中检测(150)这样的列,它在那一行中的比较单元和同一列中的前面比较单元上出现最大相继字节匹配数;和将在检测(150)步骤中检测的一列匹配字节编码(160)成一个记号,比较(170)步骤包括执行权利要求8-13的任何一项所述的方法。
15.一种包括根据权利要求1-6的任何一项所述的电路或根据权利要求7所述的设备的集成电路。
16.根据权利要求15所述的集成电路,其中,该集成电路是专用集成电路(ASIC)。
全文摘要
一种用在通过将保存在输入缓冲器(140)中的字节与保存在历史缓冲器(110,120)中的字节相比较,对数据串进行LZ1压缩的比较矩阵(170)的比较单元(400)中的电路(640)和方法,该方法包括提供串联的数个逻辑门级(720,730,740,750),数个逻辑门级的每一个生成传递给该单元的输出端和数个逻辑门级的另一个之一的进位值,数个逻辑门级中的级数和数个逻辑门级的每一个中逻辑门数的乘积小于具有单个逻辑电路级的等效电路所需的逻辑门数。进位值代表通过一系列逻辑门级检测的相邻匹配的个数。使用数个逻辑门级而导致的延迟可以利用前视进位值(770)来缩短。通过将在该单元的输出端生成的进位值与较早生成的前视进位值相比较,以确定是否要改进进位值,可以提高压缩效率。
文档编号H03M7/30GK1726645SQ03810464
公开日2006年1月25日 申请日期2003年1月30日 优先权日2002年5月9日
发明者戈登·科克伯恩, 阿德里安·J·霍斯 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1