用于解码的并行霍夫曼数据解码器、设计结构和方法

文档序号:10660419阅读:441来源:国知局
用于解码的并行霍夫曼数据解码器、设计结构和方法
【专利摘要】在保持寄存器中保持主数据输入和超前输入。向多个即M个半解码器提供所述主数据输入和所述超前输入的连续的重叠部分,所述半解码器包括霍夫曼码的频繁出现的码字的子集。当没有遇到在所述半解码器中不可获取的码字时,所述半解码器并行地在单个时钟周期中将所述频繁出现的码字中的M个解码。当遇到在所述半解码器中不可获取的码字时,将意图用于所述半解码器中的对应的一个的输入施加到以三态内容可寻址存储器实现的全解码器的输入,该意图用于所述半解码器中的对应的一个的输入包括在所述半解码器中的所述对应的一个中不可获取的所述码字。所述全解码器包括所述霍夫曼码的全部码字。
【专利说明】
用于解码的并行霍夫曼数据解码器、设计结构和方法
技术领域
[0001] 本发明涉及电气、电子和计算机领域,并且更具体地涉及系统架构等。
【背景技术】
[0002] 霍夫曼码是使用由David A.Huffman开发的算法发现的最优前缀码。更常见的符 号通常使用比更不常见的符号更少的比特表示。DEFLATE是使用LZ77算法和霍夫曼编码的 组合的数据压缩算法,并且在RFC 1951中规定。在DEFLATE RFC 1951中定义一个示例霍夫 曼解码器。

【发明内容】

[0003] 本发明的原理提供用于并行霍夫曼解码器的技术。在一个方面中,用于将根据霍 夫曼码编码的数据解码的并行霍夫曼数据解码器包括:保持寄存器,其具有保持主数据输 入的主部分、保持超前输入的超前部分、以及多个输出;以及多个即Μ个半解码器,每一个半 解码器具有输入和输出,所述输入耦接到所述保持寄存器的所述多个输出中的对应的一 个。所述输入各自从所述保持寄存器的所述输出获得所述保持寄存器的所述主部分和所述 超前部分中的数据的连续的重叠部分。还包括以三态内容可寻址存储器实现的全解码器。 所述全解码器具有输入和输出,所述输入可选择性地连接以获得数据的所述重叠部分中的 给定一个。进一步的元件包括解码器选择和排序单元,其具有多个输入、选择输出和多个输 出通道(lane),所述多个输入耦接到所述半解码器的所述输出和所述全解码器的所述输 出,所述选择输出控制所述全解码器输入的选择性连接。所述全解码器包括所述霍夫曼码 的全部码字;所述半解码器包括所述霍夫曼码的频繁出现的码字的子集;以及当没有遇到 在所述半解码器中不可获取的码字时,所述半解码器并行地在单个时钟周期中将所述频繁 出现的码字中的Μ个解码。当遇到在所述半解码器中不可获取的码字时,所述解码器选择和 排序单元使得意图用于所述半解码器中的对应的一个的输入被施加到所述全解码器的所 述输入,该意图用于所述半解码器中的对应的一个的输入包括在所述半解码器中的所述对 应的一个中不可获取的所述码字。
[0004] 在另一方面中,一种设计结构被有形地实施在非临时性机器可读介质中,所述设 计结构用于设计、制造或测试集成电路,并且所述设计结构包括如刚才所述的并行霍夫曼 数据解码器。
[0005] 在再一方面中,一种用于并行地将根据霍夫曼码编码的数据解码的示例方法包括 在保持寄存器中保持主数据输入和超前输入;并且向多个即Μ个半解码器提供所述主数据 输入和所述超前输入的连续的重叠部分。所述半解码器包括所述霍夫曼码的频繁出现的码 字的子集。当没有遇到在所述半解码器中不可获取的码字时,进一步的步骤包括并行地在 单个时钟周期中将所述频繁出现的码字中的Μ个解码。当遇到在所述半解码器中不可获取 的码字时,进一步的步骤包括将意图用于所述半解码器中的对应的一个的输入施加到以三 态内容可寻址存储器实现的全解码器的输入,该意图用于所述半解码器中的对应的一个的 输入包括在所述半解码器中的所述对应的一个中不可获取的所述码字,所述全解码器包括 所述霍夫曼码的全部码字。
[0006] 如这里使用的,"促成"动作包括执行所述动作、使得所述动作更容易、帮助进行所 述动作、或使得所述动作被执行。因此,通过示例而非限制的方式,通过发送适当的数据或 命令以使得或帮助执行由在远程处理器上执行的指令进行的动作,在一个处理器上执行的 指令可以促成所述动作。为了避免疑惑,在动作器通过除了执行动作之外促成所述动作时, 所述动作仍然由某一实体或实体的组合执行。
[0007] 可以使用计算机程序产品来实现多个设计结构方面,所述计算机程序产品包括具 有计算机可用程序代码的计算机可读存储介质。此外,可以经由包括存储器和耦接到所述 存储器并且可操作以实现设计结构或设计过程的至少一个处理器的系统(或装置)来实现 所述设计结构或过程。
[0008] 本发明的技术可以提供大量有益技术效果;例如,通过使用半解码器而非全解码 器,比先前的技术需要更少的硬件资源和/或更少的芯片面积。注意,如这里所使用的,"半 解码器"不一定精确地是全解码器的大小的1/2。
[0009] 根据结合附图阅读的对本发明的示例性实施例的下列详细描述,本发明的这些和 其他特征和优点将变得清楚。
【附图说明】
[0010] 图1示出从现有技术中已知的霍夫曼编码的多个方面;
[0011] 图2示出根据本发明的一方面的示例性的基于三态内容可寻址存储器(TCAM)的解 码器;
[0012] 图3示出根据本发明的一方面的并行霍夫曼解码器的实施例;
[0013] 图4示出根据本发明的一方面的并行霍夫曼解码器的进一步的多个方面;
[0014] 图5和6不出根据本发明的多个方面的符号分布;
[0015] 图7示出根据本发明的一方面的用于处置不由半解码器处理的码字的技术;
[0016] 图8示出本发明的进一步的半解码器方面;
[0017]图9示出根据本发明的一方面的示例执行数据;以及
[0018] 图10是在半导体设计、制造和/或测试中使用的设计过程的流程图。
【具体实施方式】
[0019] 如所述,霍夫曼码是使用由David A.Huffman开发的算法发现的最优前缀码。更常 见的符号通常使用比更不常见的符号更少的比特表示。DEFLATE是使用LZ77算法和霍夫曼 编码的组合的数据压缩算法,并且在RFC 1951中规定。在DEFLATE RFC 1951中定义一个示 例霍夫曼解码器。
[0020] 此外,在该方面中,数据被编码成块,如下:
[0021] 〈块 >〈块 >〈块 >···
[0022]例如,在每一个块中可以存在3比特的首标(header)。如果给定的块是块的序列中 的最后的块,则第1比特可以具有值1,否则(即,在预计更多的块的情况下)具有值0。第2和 第3比特对于原始的块可以使得值00存储在块中,对于固定的霍夫曼表(事先商定的)可以 使得值01存储在块中,对于动态霍夫曼表可以使得值10被存储在块中。
[0023]通过重复串消除(LZ编码)和使用加权的符号树(霍夫曼编码)来实现压缩。关于重 复串消除,考虑以下:
[0025]如由箭头指示的,重复的串由返回所述串的第一次出现的指针替代。保留所述串 的第一个副本。这里,由返回"S"的第一次出现的指针替代"S"的随后的出现,并且由返回 "P"的第一次出现的指针替代"P"的随后的出现。指针将包括诸如"回溯1〇〇个字符并且复制 10个字节"的信息。指针比原始数据更小,并且因此可以实现压缩。对文件进行"拉链压缩 (zipping)"是非限制性示例。这是第一阶段;在第二阶段执行霍夫曼编码。
[0026] 编码的串具有从3到258字节的长度和从1到32768字节的距离(滑动窗口)。
[0027] 现在参考图1,霍夫曼编码使用更少的比特来编码更常见的符号。码的比特序列长 度与符号频率成反比。例如,可以如下编码符号A、B、P和Q:
[0028] 符号:码=A:0,B:10,P:110,Q:111。
[0029] 霍夫曼编码是无前缀的;即,没有码的比特序列是另一个码的比特序列的前缀。因 此,B:10-C:101是不可能的。
[0030]此外,关于无前缀属性,当编码的比特被级联时,关于一个符号何时开始和结束不 存在模糊性。因此,不需要分开符号的记号。序列PABQ可以因此被编码为110010111。然而, 这使得并行解码器的构造变得复杂,因为它是比特串行处理。
[0031]此外,关于DEFLATE,霍夫曼编码器将符号编码为码。288个符号将文字和指针长度 编码,如下:
[0032] #0-255:文字(例如原始ASCII将在这里)
[0033] #256:deflate块的结束(终结符号)
[0034] #257-285:3-258字节的匹配长度+额外的比特(不是文字,而是将跟随在该码字 之后的指针的串(匹配)长度)。
[0035] 下列表示出串匹配长度:
[0038]注意,符号首先被"霍夫曼化",并且随后附加额外的比特以将匹配长(match len) (长度)编码。
[0039] 关于距离,对于指针编码,〈匹配长度〉之后总是跟随有〈距离〉。存在32个距离编 码,如下:
[0041 ]图2示出示例性的基于TCAM的解码器。可以使用任何类型的TCAM实现一个或多个 实施例。输入是比特序列110010111,其前三个符号是PAB。这被用作查询内容可寻址存储器 (CAM)的关键字。CAM条目有具有0、1或"不关心"(X)的值的"三态数字"。CAM中的第一个"命 中(hit)"针对对应于符号P、具有3比特长度的110XXX。所述输入随后向左移位3比特,并且 下一个"命中"针对对应于符号A、具有1比特长度的0ΧΧΧΧΧ。所述输入随后向左移位1比特, 并且下一个"命中"针对对应于符号B、具有2比特长度的10XXXX。
[0042]现在考虑CAM数组(array)宽度。注意,"比特"具有0或1的值,而在该上下文中的 (三态)"数字"可以具有〇、1或不关心(X)的值。DEFLATE最大比特序列长度是15比特。可以期 望的是使用数字〇(表示这是"MatchLen"(匹配长度)码)或1(表示这是距离码)作为每一个 CAM字的前缀一也就是说,文字/长(Len)和距离表二者是否都被存储在相同的TCAM中。因 此,不包括任何错误校正码(ECC)在内,TCAM部分应该是至少16个数字宽。
[0043] 现在考虑CAM和RAM数组长度。具有288个文字/长度符号和32个距离符号,288+32 = 320个条目,意味着512个TCAM条目(向上舍入到2的下一次幂)。注意,向上舍入是可选的; 大多数技术是以2的幂来确定大小,然而,这不是要求的,并且技术人员将理解分数大小 (fractional sizing)是可用的,不一定需要向上舍入。
[0044]现在,关于RAM数组宽度,在一个或多个非限制实施例中,如果在RAM中存储符号和 码比特长度,假设9比特用于288个文字/长(len)符号("长(len)"在这里用作"长度"的简略 表达方法),假设5比特用于距离符号,并且RAM字将包含文字/长或距离-ma X(9,5) =9比 特。使用1比特前缀来将文字/长与距离符号区分开,因此,10比特将足以识别文字/长和距 离符号。输入移位值也可以被存储在RAM中。在该方面中,CAM字(霍夫曼码)的最大比特长度 = 15,而额外的13比特被用于距离码;因此,15+13 = 28比特。这意味着输入可以被移位28个 位置或更少l〇g2(28) = 5比特(向上舍入到最近的整数)以存储在RAM条目中。因此,不包括 ECC在内,总共是10+5 = 15比特用于RAM。在一些实例中,可能需要额外的RAM比特;例如,用 于控制解码器状态机等。
[0045] 如果符号和码比特长度被存储在分开的SRAM中,则仅需要存储分开的SRAM的地 址,意味着不包括ECC在内,log2(512) = 9比特是TCAM的RAM部分。
[0046] 现在考虑将诸如以下比特序列的比特序列解码的问题:
[0047] 110010101011001100100100100101001111
[0048] 由于可变长度编码(VLC),不容易识别数据边界。简单的串行解码器从左到右一次 解码1比特,这太慢。一个或多个实施例有利地在单个周期中解码例如多达128比特的串。
[0049] 现在将参考图3。数据399是包含在霍夫曼编码的符号中的比特的流,所述霍夫曼 编码的符号具有可变长度(比方说,1-15比特,或当包括某些额外的比特时可能28比特)。因 为所述码是可变长度,事先不知道边界在哪里。不知道一个符号在哪里停止和另一个符号 在哪里开始;确定这些边界是解码过程的一部分。因为所述符号是可变长度,并且因为所述 符号一个时钟周期接一个时钟周期地进入,符号可能跨越时钟边界。符号可以在一个"字" 中开始,并且在另一个"字"中结束,其中所述字仅是每一个时钟周期提取的数据的样本。在 非限制性示例中,如果提取数据399的128比特宽的样本(即M=128),并且假设(纯粹用于示 例性目的,因为符号事实上具有可变长度)每一个编码的符号是10比特宽,整数数目的10比 特的符号将不适合于128比特的数据片段(slice);将会存在12个10比特的符号和下一符号 的8比特;该符号的剩余的2比特将在下一时钟周期的输入中到达。这在一个或多个实施例 中经由超前抽头(tap)389来处理。具体地,假设最大码大小N是28比特。在最坏的情况下,符 号可以在Μ(例如128)比特的最后的比特开始,并且继续N-1(例如27)比特进入下一时钟周 期。因此,采用N-l = 27比特的超前抽头。因此在Μ(例如128)比特宽的块(chunk)中采样输入 数据399,其中比特被编号为0到M-1 (例如0到127),并且抽取(tap)被编号为0到N-2(例如,0 到26)的N-1超前比特。
[0050] 数据399的Μ(例如128)比特宽的样本被馈送到超前寄存器397,其保持所述样本一 个时钟周期,使得当所述样本到达保持寄存器395时,它将与未在超前寄存器397中被延迟 的、来自抽头389的超前数据是同时的。被编号为391的包括数据399的Μ(例如128)比特宽的 样本的保持寄存器395中的数据以及被编号为393的来自超前抽头389的数据被馈送到半解 码器302、304、306、……308。在保持寄存器395中,被编号为391的数据399的Μ(例如128)比 特宽的样本中的比特被编号为〇到Μ-1 (例如0到127),而被编号为393的来自超前抽头389的 数据中的比特被编号为Μ到Μ+Ν-1 (例如128到155)。
[0051 ] 半解码器302、304、306、……308包含最常见的码字(在全部解码器上被复制的内 容)。全解码器310包含全部码字。第一半解码器302被接线到保持寄存器395的比特0到Ν-1 (例如27),并且下一半解码器304被接线到保持寄存器395的比特1到Ν(例如28),依此类推。 在常见情况下,全部半解码器同时解码它们的输入片段。每一个片段是Ν(例如28)比特长, 与左边的片段重叠1比特。在非限制性示例中,存在128个半解码器。解码是推测性的,因为 事先不知道码边界。
[0052] SRAM与TCAM相比更便宜、更小并且使用更少的电力,因此使得使用基于SRAM的半 解码器是有利的。给予这里的教导,技术人员将能够以例如SRAM或动态随机存取存储器 (DRAM)实现半解码器,并且以TCAM实现全解码器。
[0053]现在将参考图9。半解码器将存储第一级数据(常发现的码)。根据本发明的实施 例,较少发现的码将仅被包括在将被存储在全解码器中的第二级数据中。图9的表示出了码 将不会在第一级中被发现的频率。例如,对于inp_alice29_txt.gz基准(benchmark),98% 的时间,对于(9,6)表的情况,码将在第一级长度码查找中被发现,而仅2%的时间依赖于必 要的第二级查找。图9示出用于三个不同基准的两个不同示例。在(9,6)表的示例中,第一级 表是具有2 9个文字/长度的条目和26个距离的条目的SRAM,而在(10,7)表的示例中,第一级 表是具有2 1()个文字/长度的条目和27个距离的条目的SRAM。在(10,7)表的示例中,在第二 列、第二行中的值397意味着平均来说,输入的每397字节,解码器需要查阅第二级文字/长 度表。注意,":1即_&1;[0629_111:.82"是当压缩文本时常用的基准,并且指示的其他.82文件 也是已知的基准。
[0054]如图4中所见,如果诸如306的半解码器不能完成它的工作(错误解码,因为在关于 图9刚才讨论的示例中,其是在第一等级中没有发现的2%的码中的一个),则它的输入片段 被复用到全解码器(见时间T1的"未命中")。右边的剩余的半解码器输出(这里308)被声明 为无效,因为它们的开始比特位置取决于不完整的解码器输出。全解码器在下一周期中将 被错误解码的输入片段解码。
[0055] 注意,仅单个输入被示出为到复用器312,但事实上,包括超前比特的保持寄存器 的整个输出宽度可用于复用器312,并且基于来自选择单元314的选择信号选择适当的比特 (对应于未命中的半解码器),并且将所述适当的比特路由到全解码器310。在图4的底部,在 时间T0处,指示的半解码器成功("命中卩,码被发现并且输出是有效的。在时间T1处,未 发现所述码的半解码器306指示"未命中",这要求将它的输入发送到全解码器310。右边的 解码器(例如,308)不能继续进行,因为由于半解码器306的失败,码边界未知。全解码器310 提供答案,并且随后在时间T2中,右边的剩余的半解码器可以继续。
[0056] -旦全解码器完成,剩余的半解码器就跟着做(在与全解码器相同的周期或之后 的周期中)。
[0057]解码器选择单元314从左到右识别许多解码中的有效解码,消除跨越数据边界的 "伪,,解码。
[0058]图3因此描绘示例并行霍夫曼数据解码器,其包括使用静态随机存取存储器 (SRAM)构造的多个(在非限制性示例中128个)半解码器302、304、306、308(仅示出少数以避 免混乱)以及使用三态CAM(TCAM)构造的一个全解码器310。图3的并行解码器在一个时钟周 期中并行地推测性地解码多达128个码字(相较于在当前系统中每周期仅少数比特)。半解 码器302、304、306、308是使用31^1构造的,通常具有仅使用512到1024个常见码字的9-10个 地址输入。全码字解码器310是使用包含全部码字的三态CAM(TCAM)构造的,所述全部码字 包括不常见以及常见码字。注意,全霍夫曼解码器表中的条目的总数(在第一和第二级中) 将为如下(基于在zlib点net处发现的zlib源代码,被呈现为"点"以避免包括浏览器可 执行代码)。
[0059] · (9,6)情况:用于长度/文字的852+用于距离的592 =总共1444;将其与需要2**9 +2**6 =总共576的半解码器相比较;
[0060] · (1〇,7)情况:用于长度文字的1332+用于距离的400 =总共1732;将其与需要2** 10+2#7 =总共1152的半解码器相比较。
[0061 ] 半解码器302、304、306、308每一个具有以1比特的重叠间隔采样128比特数据的28 比特输入,因此使得推测成为可能。
[0062]全解码器310具有经由复用器312从来自Μ比特数据的Μ个28比特的间隔中的一个 复用的28比特输入,而Μ比特数据被具有来自下一数据周期的数据的27比特扩展,以能够解 码跨越Μ比特边界的28比特数据。当半解码器不能解码码字时,半解码器通过复用器312将 它的输入有效地转发到全解码器;解码器选择单元314从许多解码中选择有效的解码后的 码字。(如上讨论的,包括超前比特的保持寄存器的整个输出宽度对复用器312是可用的,并 且基于来自选择单元314的选择信号选择适当的比特(对应于未命中的半解码器),并且将 所述适当的比特路由到全解码器310。
[0063]注意,在通常情况下,128、28和27的示例值可以分别使用Μ(输入数据的块的宽 度)、Ν(到每一个半解码器的输入的大小)和Κ(Ν-1,超前比特的数目)的任意值替代。因此, 输入数据流399的被编号为0到Μ-1的Μ比特被馈送到超前寄存器397,并且随后被馈送到保 持寄存器395。在图3和4的非限制示例中,Μ= 128。同时,从输入流399将0到Ν-2的Ν-1比特 (在图3和4的非限制性示例中Ν = 28)抽取到保持寄存器395的超前部分393。保持寄存器395 的主部分391因此包括输入数据流399的0到Μ-1比特,而超前抽头绕过超前寄存器397,并且 因此保持寄存器395的超前部分393包括来自下一周期的0到Ν-2的Ν-1比特(在图3和4的非 限制性示例中Ν=28),因为超前寄存器397被所述抽头绕过。这些是Μ到Μ+Ν-1比特,即,在非 限制性示例中的129到155比特。同样,为了避免混淆,注意半解码器片段是28比特宽,但是 仅有27个超前比特加上1个重叠比特。
[0064]在一些实施例中,半解码器每一个具有以1比特的重叠间隔采样128比特数据的28 比特输入,因此使得推测成为可能;并且全解码器具有来自Μ比特数据的Μ个28比特的间隔 中的一个复用的28比特输入,而所述Μ比特数据被具有来自下一数据周期的数据的27比特 扩展,以能够解码跨越Μ比特边界的28比特数据。当半解码器不能解码码字时,半解码器通 过复用器将它的输入转发到全解码器。因此,在图3的非限制性示例中,半解码器302具有0 到N-l(27)的输入比特,半解码器304具有1到Ν(28)的输入比特,半解码器306具有Ρ到Ν+Ρ-1 的输入比特,依此类推。
[0065] 可变长度码字由全解码器(按需)以及由半解码器302、304、306、308解码为固定长 度码并且被放置在准备用于LZ字典查找的单独的通道(这里,0到15的16个通道)中。
[0066] 图5示出示例编码树。存在16384+8192+."+1+1 =总共32768次出现;64+32+."+1+1 = 128个长于8比特的码字的出现;以及32+16+…+1+1 = 64个长于9比特的码字的出现。对于 2 ~ 8的SRAM,16个半解码器在相同周期中完成的概率= 94%,而对于2~9的SRAM,16半解码器 在相同周期中完成的概率= 97%。注意,许多符号分布可以导致更平衡的树,并且码字的更 大部分可以落在半解码器的SRAM外。因此,可能期望2~10个条目或更大的表。因为这是全部 数据相关的,所以给予这里的教导,技术人员可以使用基准文件选择表大小。与虚线上面的 码相比较,虚线下面的码不常出现;在半解码器中发现虚线上面的码,而仅在全解码器中发 现在虚线下面的码。
[0067]图6示出更平衡的树的示例。数据在其中具有256个符号;25%的符号每个出现400 次;25%出现200次;并且50%每个出现100次。8个符号意味着4的深度,而256个符号意味着 9的深度。因此,最大9比特将对256个符号的整个集合进行编码。如果采用8比特的表,那将 使得(100+100)/800 = 25%的符号在表外。同样,与虚线上面的码相比较,虚线下面的码不 常出现;在半解码器中发现虚线上面的码,而仅在全解码器中发现在虚线下面的码。这里,8 比特的表可能导致太多的未命中,使得9比特的表是优选的。
[0068]现在考虑图2中更详细地示出的图3和4的全解码器310。其包含整个霍夫曼表,具 有多达288个文字/长度符号和多达32个距离符号。每一个条目指示解码后的符号(9比特); 码字比特(1-15)的数目(4比特);以及适当的控制字符(例如无效码字)。可以存在多达13个 额外的比特,其是码的增强(arguments); 15+13 = 28。如所述,对于288个文字/长度符号和 多达32个距离符号,288+32小于512(2的次最高次幂),意味着512个TCAM条目应该是足够 的。输入是对应于符号PABQ的比特序列110010111。这被用作用于查询内容可寻址存储器 (CAM)的关键字。对于每一个"三态数字",CAM条目(码字)可以具有0、1或"不关心"(X)的值。 对应的RAM条目包括符号及其长度。CAM中的第一个"命中"针对对应于符号P、具有3比特长 度的110XXX。所述输入随后向左移位3比特,并且下一个"命中"针对对应于符号A、具有1比 特长度的0ΧΧΧΧΧ。所述输入随后向左移位1比特,并且下一个"命中"针对对应于符号B、具有 2比特长度的10XXXX。
[0069] 现在考虑半解码器302、304、306、308。每一个半解码器包含霍夫曼表的一部分并 且是基于SRAM的。每一个半解码器存储常见的长度/文字符号,并且存储常见的距离符号。 在一个或多个非限制性实施例中,被解码的码字是8-10比特宽,这导致2~8到2~10个条目的 SRAM。每一个条目指示:
[0070] ?符号(9比特)
[0071] ?码字比特(0-10)的数目(4比特)
[0072] ?控制字符(例如无效码字)。
[0073] 宽的SRAM是期望的,因为每比特的面积最小,并且可以快速加载霍夫曼表。出于相 同原因,10比特码字将导致少于2~10次写入。霍夫曼编码工作良好,例如,如果在行内选择 "不关心"的比特,则可以在一个周期中写入用于每一行的SRAM条目。例如,对于输入码字 lOOOOOxxx,SRAM位置100000,条目0-7全部包含相同符号、符号长(SymLen)……。在最好的 情况下,对128x144的SRAM的128次写入将加载所述表。
[0074] 参考图7,对于未由半解码器处理的码字,长码字进行索引的SRAM条目将具有告诉 系统去其他地方寻找(如上讨论的,经由由块314控制的复用器路由到全解码器的该半解码 器的比特)的控制比特。半解码器可以具有例如2 9或21()个条目。参考755,半解码器将因此只 看输入的开头的9或10比特。因为最常见的符号使用最小数目的比特,并且因为半解码器仅 包括更频繁地出现的符号,半解码器将能够发现其能够通过只看开头的9或10比特译码的 码字。当未定义开头的9或10比特时,如上所述,所述比特被路由到全解码器。
[0075] 此外,关于半解码器,现在将注意力给予到图8。如其中所见,文字和距离可以被存 储在分开的表899、897中。从外部来看,其看上去像仅单个表。逻辑(到复用器895的选择信 号)选择一个表或其他表。通过上下文选择距离码:如果前面的符号是长度,则所述逻辑告 诉复用器选择距离表897;如果前面的符号是文字,则所述逻辑告诉复用器选择文字长度表 899。复用器输出视情况包括符号、符号长(len)和任何控制比特。
[0076] 各种优化是可能的。例如,可以基于期望的压缩率减少半解码器的数目。如果期望 2:1的压缩率,则以1/2的输出速率取得输入,因此多达1/2的半解码器可能是必要的;例如, 8字节的输入宽度和16字节的输出宽度。对于未压缩的数据,输出速率将下降到输入速率。
[0077] 图9示出上面讨论的非限制性示例性能数据。
[0078] -个或多个实施例有利地使用TCAM和SRAM每周期解码多个码。这应该与先前的技 术相区别,在先前的技术中并行获得N个结果,但是仅一个结果可以是有效码,使得在这种 现有系统中,实际上每周期仅一个霍夫曼符号被解码。
[0079] DEFLATE标准(更一般地,动态的基于树的霍夫曼码)需要是基于表的;因此,一个 或多个实施例采用SRAM或TCAM或两者。
[0080] 注意,相对于解码每周期每个流1个符号地解码的多个独立流,一个或多个实施例 并行解码单个流。
[0081] -个或多个实施例因此提供并行霍夫曼数据解码器,其包括使用SRAM构造的至少 一个半解码器和使用三态CAM(TCAM)构造的至少一个全解码器、以及从多个解码中选择有 效的解码后的码字的解码器选择单元。如所述,128、28、27的示例霍夫曼解码器值可以分别 使用M、N和K的任意值替代。在一个或多个实施例中,并行解码器在一个时钟周期中并行地 推测性地解码多达128个码字;半解码器是使用SRAM构造的,通常具有仅使用512到1024个 常见码字的9-10个地址输入;并且全码字解码器是使用包含全部码字的三态CAM(TCAM)构 造的,所述全部码字也包括不常见的码字。
[0082]在一些实施例中,半解码器每一个具有以1比特的重叠间隔采样128比特数据的28 比特输入,因此使得推测成为可能;并且全解码器具有从Μ比特数据的Μ个28比特的间隔中 的一个复用的28比特输入,而Μ比特数据被通过具有来自下一数据周期的数据的27比特扩 展以能够解码跨越Μ比特边界的28比特数据。当半解码器不能解码码字时,半解码器通过复 用器将它的输入转发到全解码器。
[0083]图中的元素通常用硬件实现。在一个或多个实施例中,超前寄存器397和保持寄存 器395是可以使用已知技术实现的硬件寄存器;以TCAM实现全解码器;以SRAM(或可替换地, DRAM)实现半解码器;使用已知的复用电路实现复用器312;并且以硬件状态机和随机逻辑 实现选择单元314。
[0084]给予迄今为止的讨论,将理解,一般地说,根据本发明的一方面的用于将根据霍夫 曼码编码的数据解码的示例并行霍夫曼数据解码器包括:保持寄存器395,其具有保持主数 据输入的主部分391、保持超前输入的超前部分393、以及多个输出。还包括多个即Μ个半解 码器302、304、306、308,每一个半解码器具有输入和输出,所述输入耦接到所述保持寄存器 的所述多个输出中的对应的一个。所述输入各自从所述保持寄存器的所述输出获得所述保 持寄存器的所述主部分和所述超前部分中的数据的连续的重叠部分。另一元件是以三态内 容可寻址存储器实现的全解码器310。所述全解码器具有输入和输出,所述输入可选择性地 连接以获得数据的所述重叠部分中的给定一个。解码器选择和排序单元314具有多个输入、 选择输出和多个输出通道,所述多个输入耦接到所述半解码器的所述输出和所述全解码器 的所述输出,所述选择输出控制所述全解码器输入的所述选择性连接。所述全解码器包括 所述霍夫曼码的全部码字,而所述半解码器包括所述霍夫曼码的频繁出现的码字的子集。 当没有遇到在所述半解码器中不可获取的码字时,所述半解码器并行地在单个时钟周期中 将所述频繁出现的码字中的Μ个解码。当遇到在所述半解码器中不可获取的码字时(见图 4),所述解码器选择和排序单元314使得意图用于所述半解码器中的对应的一个(例如, 306)的输入被施加到所述全解码器310的所述输入,该意图用于所述半解码器中的对应的 一个的输入包括在所述半解码器中的所述对应的一个中不可获取的所述码字。
[0085] 在一个或多个实施例中,所述半解码器以诸如SRAM或DRAM的、比所述三态内容可 寻址存储器更便宜的技术实现。
[0086] 一些实施例进一步包括超前寄存器397,其具有数据输入以获得数据流399,并且 具有耦接到所述保持寄存器395的所述主部分391的输出。如在389所见,所述保持寄存器通 过抽取所述数据流和绕过所述超前寄存器来获得所述超前输入。
[0087] 一些实施例进一步包括复用器312,其具有耦接到所述保持寄存器395的第一输 入、选择输入以及耦接到所述全解码器310的所述输入的输出。所述解码器选择和排序单元 314通过发送选择信号到所述复用器312的所述选择输入,使得意图用于所述半解码器中的 对应的一个(例如,306)的所述输入被施加到所述全解码器310的所述输入,该意图用于所 述半解码器中的对应的一个的所述输入包括在所述半解码器中的所述对应的一个中不可 获取的所述码字。
[0088]在一个或多个实施例中,数据的所述重叠部分重叠 1比特。
[0089]此外,给予迄今为止的讨论,将理解,根据本发明的另一方面的用于并行地将根据 霍夫曼码编码的数据解码的示例方法包括:在保持寄存器395中保持主数据输入391和超前 输入393;并且向多个即Μ个半解码器302、304、306、308提供所述主数据输入和所述超前输 入的连续的重叠部分。所述半解码器包括所述霍夫曼码的频繁出现的码字的子集。当没有 遇到在所述半解码器中不可获取的码字时,进一步的步骤包括并行地在单个时钟周期中将 所述频繁出现的码字中的Μ个解码。另一方面,当遇到在所述半解码器中不可获取的码字 时,进一步的步骤包括将意图用于所述半解码器中的对应的一个(例如306)的输入施加到 以三态内容可寻址存储器实现的全解码器310的输入,该意图用于所述半解码器中的对应 的一个的输入包括在所述半解码器中的所述对应的一个中不可获取的所述码字。所述全解 码器包括所述霍夫曼码的全部码字。
[0090] 在一些情况下的进一步的步骤包括以诸如SRAM或DRAM的比所述三态内容可寻址 存储器更便宜的技术实现所述半解码器。
[0091] 在一些实施例中,进一步的步骤包括在超前寄存器397中保持所述主数据输入,而 所述超前输入(见389)绕过所述超前寄存器。
[0092] 在一些实施例中,使用复用器312实现将意图用于所述半解码器中的对应的一个 的输入施加到所述全解码器的输入。
[0093] 示例性集成电路和设计结构细节
[0094] 这里描述的一个或多个示例性方法可以用在集成电路芯片的制造、测试或操作 中。集成电路芯片可以由制造者以未加工的晶圆形式(即,作为具有多个未封装的芯片的单 个晶圆)作为空裸芯(bare die)分发,或以封装的形式分发。在后者的情况下,芯片被安装 在单个芯片封装(诸如塑料载体,具有附接到母板或其他更高级载体的导线)中或在多芯片 封装(诸如陶瓷载体,其具有表面互连或埋入式互连中的任一个或两者)中。在任何情况下, 随后将芯片与其他芯片、分立的电路元件和/或其他信号处理设备集成为(a)诸如母板的中 间产品或(b)最终产品的一部分。最终产品可以是包括集成电路芯片的任何产品。
[0095] 图10示出了例如在半导体1C逻辑设计、仿真、测试、布图和制造中使用的示例性设 计流程1900的方块图。设计流程1900包括用于处理设计结构或器件以产生上述以及图2、3、 4、7和8中示出的设计结构和/或器件的逻辑上或其他功能上等效表示的过程、机器和/或机 制。由设计流程1900处理和/或产生的设计结构可以在机器可读传输或存储介质上被编码 以包括数据和/或指令,所述数据和/或指令在数据处理系统上执行或以其他方式处理时, 产生硬件组件、电路、器件或系统的逻辑上、结构上、机械上或其他功能上的等效表示。机器 包括但不限于用于1C设计过程(例如设计、制造或仿真电路、组件、器件或系统)的任何机 器。例如,机器可以包括:用于产生掩模的光刻机、机器和/或设备(例如电子束直写仪)、用 于仿真设计结构的计算机或设备、用于制造或测试过程的任何装置,或用于将所述设计结 构的功能上的等效表示编程到任何介质中的任何机器(例如,用于对可编程门阵列进行编 程的机器)。
[0096] 设计流程1900可随被设计的表示类型而不同。例如,用于构建专用IC(ASIC)的设 计流程1900可能不同于用于设计标准组件的设计流程1900,或不同于用于将设计实例化到 可编程阵列(例如,由Altera? Inc.或Xilinx? Inc.提供的可编程门阵列(PGA)或现场可编 程门阵列(FPGA))中的设计流程1900。
[0097]图10示出了多个此类设计结构,其中包括优选地由设计过程1910处理的输入设计 结构1920。设计结构1920可以是由设计过程1910生成和处理以产生硬件器件的逻辑上等效 的功能表示的逻辑仿真设计结构。设计结构1920还可以或备选地包括数据和/或程序指令, 所述数据和/或程序指令由设计过程1910处理时,生成硬件器件的物理结构的功能表示。无 论表示功能和/或结构设计特性,均可以使用例如由核心开发人员/设计人员实施的电子计 算机辅助设计(ECAD)生成设计结构1920。当编码在机器可读数据传输、门阵列或存储介质 上时,设计结构1920可以由设计过程1910内的一个或多个硬件和/或软件模块访问和处理 以仿真或以其他方式在功能上表示例如图2、3、4、7和8中示出的那些电子组件、电路、电子 或逻辑模块、装置、器件或系统。因此,设计结构1920可以包括文件或其他数据结构,其中包 括人类和/或机器可读源代码、编译结构和计算机可执行代码结构,当所述文件或其他数据 结构由设计或仿真数据处理系统处理时,在功能上仿真或以其他方式表示电路或其他级别 的硬件逻辑设计。此类数据结构可以包括硬件描述语言(HDL)设计实体或遵循和/或兼容低 级HDL设计语言(例如Veri log和VHDL)和/或高级设计语言(例如C或C++)的其他数据结构。
[0098]设计过程1910优选地采用和结合硬件和/或软件模块,所述模块用于合成、转换或 以其他方式处理图2、3、4、7和8中示出的组件、电路、器件或逻辑结构的设计/仿真功能等价 物以生成可以包含设计结构(例如设计结构1920)的网表1980。网表1980例如可以包括编译 或以其他方式处理的数据结构,所述数据结构表示描述与集成电路设计中的其他元件和电 路的连接的线缆、分离组件、逻辑门、控制电路、I/O设备、模型等的列表。网表1980可以使用 迭代过程合成,其中网表1980被重新合成一次或多次,具体取决于器件的设计规范和参数。 对于在此所述的其他设计结构类型,网表1980可以记录在机器可读数据存储介质上或编程 到可编程门阵列中。所述介质可以是非易失性存储介质,例如磁或光盘驱动器、可编程门阵 列、压缩闪存或其他闪存。此外或备选地,所述介质可以是可在其上经由因特网或其他适合 联网手段传输和中间存储数据分组的系统或高速缓冲存储器、缓冲器空间或导电或光导器 件和材料。
[0099] 设计过程1910可以包括用于处理包括网表1980在内的各种输入数据结构类型的 硬件和软件模块。此类数据结构类型例如可以驻留在库元件1930内并包括一组常用元件、 电路和器件,其中包括给定制造技术(例如,不同的技术节点,32纳米、45纳米、90纳米等)的 模型、布图和符号表示。所述数据结构类型还可包括设计规范1940、特征数据1950、检验数 据1960、设计规则1970和测试数据文件1985,它们可以包括输入测试模式、输出测试结果和 其他测试信息。设计过程1910还可例如包括标准机械设计过程,例如用于诸如铸造、成型和 模压成形等操作的应力分析、热分析、机械事件仿真、过程仿真。机械设计领域的技术人员 可以在不偏离本发明的范围和精神的情况下理解在设计过程1910中使用的可能机械设计 工具和应用的范围。设计过程1910还可包括用于执行诸如定时分析、检验、设计规则检查、 放置和路由操作之类的标准电路设计过程的模块。
[0100] 设计过程1910采用和结合逻辑和物理设计工具(例如HDL编译器)以及仿真建模工 具以便与任何其他机械设计或数据(如果适用)一起处理设计结构1920连同示出的部分或 全部支持数据结构,从而生成第二设计结构1990。设计结构1990以用于机械设备和结构的 数据交换的数据格式(例如以IGES、DXF、Parasolid XT、JT、DRC或任何其他用于存储或呈现 此类机械设计结构的适合格式)驻留在存储介质或可编程门阵列上。类似于设计结构1920, 设计结构1990优选地包括一个或多个文件、数据结构或其他计算机编码的数据或指令,它 们驻留在传输或数据存储介质上,并且由ECAD系统处理时生成图2、3、4、7和8中示出的本发 明的一个或多个实施例的逻辑上或以其他方式在功能上等效的形式。在一个实施例中,设 计结构1990可以包括在功能上仿真图2、3、4、7和8中示出的器件的编译后的可执行HDL仿真 模型。
[0101] 设计结构1990还可以采用用于集成电路的布图数据交换的数据格式和/或符号数 据格式(例如以GDSII(GDS2)、GL1、0ASIS、图文件或任何其他用于存储此类设计数据结构的 适合格式存储的信息)。设计结构1990可以包括信息,例如符号数据、图文件、测试数据文 件、设计内容文件、制造数据、布图参数、线缆、金属级别、通孔、形状、用于在整个生产线中 路由的数据,以及制造商或其他设计人员/开发人员制造上述以及图2、3、4、7和8中示出的 器件或结构所需的任何其他数据。设计结构1990然后可以继续到阶段1995,例如,在阶段 1995,设计结构1990:继续到流片(tape-out ),被发布到制造公司、被发布到掩模室(mask house )、被发送到其他设计室,被发回给客户等。
[0102] 这里使用的术语仅用于描述特定实施例的目的,并且无意限制本发明。如这里使 用的,单数形式"一"和"该/所述"也意图包括复数形式,除非上下文清楚地另外指示。将进 一步理解的是,当在本说明书中使用时,术语"包括"和/或"包含"指明所陈述的特征、整体、 步骤、操作、元件和/或组件的存在,但不排除存在或增加一个或多个其它特征、整体、步骤、 操作、元件、组件和/或它们的组。
[0103] 在所附权利要求中的对应的结构、材料、动作、和全部部件或步骤加功能元素的等 同物意图包括用于结合如具体要求保护的其他要求保护的元素执行所述功能的任何结构、 材料、或动作。
[0104] 本发明的各种实施例的描述为了说明的目的而被呈现,但意图不是穷尽性的或限 于所公开的实施例。在不背离所描述的实施例的范围和精神的情况下,许多修改和变化对 本领域普通技术人员来说将是清楚的。选择这里使用的术语以便最好地解释实施例的原 理、实际应用或相对于市场中找到的技术的技术改进,或以便使得其它本领域普通技术人 员能够理解这里公开的实施例。
【主权项】
1. 一种用于将根据霍夫曼码编码的数据解码的并行霍夫曼数据解码器,所述并行霍夫 曼数据解码器包括: 保持寄存器,其具有保持主数据输入的主部分、保持超前输入的超前部分、以及多个输 出; 多个即Μ个半解码器,每一个半解码器具有输入和输出,所述输入耦接到所述保持寄存 器的所述多个输出中的对应的一个,所述输入各自从所述保持寄存器的所述输出获得所述 保持寄存器的所述主部分和所述超前部分中的数据的连续的重叠部分; 全解码器,其以三态内容可寻址存储器实现,所述全解码器具有可选择性地连接以获 得数据的所述重叠部分中的给定一个的输入、和输出; 解码器选择和排序单元,其具有耦接到所述半解码器的所述输出和所述全解码器的所 述输出的多个输入、控制所述全解码器输入的所述选择性连接的选择输出、和多个输出通 道; 其中: 所述全解码器包括所述霍夫曼码的全部码字; 所述半解码器包括所述霍夫曼码的频繁出现的码字的子集; 当没有遇到在所述半解码器中不可获取的码字时,所述半解码器并行地在单个时钟周 期中将所述频繁出现的码字中的Μ个解码;以及 当遇到在所述半解码器中不可获取的码字时,所述解码器选择和排序单元使得意图用 于所述半解码器中的对应的一个的输入被施加到所述全解码器的所述输入,该意图用于所 述半解码器中的对应的一个的输入包括在所述半解码器中的所述对应的一个中不可获取 的所述码字。2. 如权利要求1所述的并行霍夫曼数据解码器,其中,以比所述三态内容可寻址存储器 更便宜的技术实现所述半解码器。3. 如权利要求2所述的并行霍夫曼数据解码器,其中,所述更便宜的技术包括静态随机 存取存储器。4. 如权利要求2所述的并行霍夫曼数据解码器,其中,所述更便宜的技术包括动态随机 存取存储器。5. 如权利要求1所述的并行霍夫曼数据解码器,进一步包括超前寄存器,其具有获得数 据流的数据输入,并且具有耦接到所述保持寄存器的所述主部分的输出,其中所述保持寄 存器通过抽取所述数据流和绕过所述超前寄存器来获得所述超前输入。6. 如权利要求1所述的并行霍夫曼数据解码器,进一步包括复用器,其具有耦接到所述 保持寄存器的第一输入、选择输入、以及耦接到所述全解码器的所述输入的输出,其中所述 解码器选择和排序单元通过发送选择信号到所述选择输入来使得意图用于所述半解码器 中的所述对应的一个的所述输入被施加到所述全解码器的所述输入,该意图用于所述半解 码器中的所述对应的一个的所述输入包括在所述半解码器中的所述对应的一个中不可获 取的所述码字。7. 如权利要求1所述的并行霍夫曼数据解码器,其中,数据的所述重叠部分重叠1比特。8. -种有形地在非临时性机器可读介质中实施的设计结构,用于设计、制造或测试集 成电路,所述设计结构包括用于将根据霍夫曼码编码的数据解码的并行霍夫曼数据解码 器,所述并行霍夫曼数据解码器继而包括: 保持寄存器,其具有保持主数据输入的主部分、持超前输入的超前部分、及多个输出; 多个即Μ个半解码器,每一个半解码器具有输入和输出,所述输入耦接到所述保持寄存 器的所述多个输出中的对应的一个,所述输入各自从所述保持寄存器的所述输出获得所述 保持寄存器的所述主部分和所述超前部分中的数据的连续的重叠部分; 全解码器,其以三态内容可寻址存储器实现,所述全解码器具有可选择性地连接以获 得数据的所述重叠部分中的给定一个的输入、和输出; 解码器选择和排序单元,其具有耦接到所述半解码器的所述输出和所述全解码器的所 述输出的多个输入、控制所述全解码器输入的所述选择性连接的选择输出、和多个输出通 道; 其中: 所述全解码器包括所述霍夫曼码的全部码字; 所述半解码器包括所述霍夫曼码的频繁出现的码字的子集; 当没有遇到在所述半解码器中不可获取的码字时,所述半解码器并行地在单个时钟周 期中将所述频繁出现的码字中的Μ个解码;以及 当遇到在所述半解码器中不可获取的码字时,所述解码器选择和排序单元使得意图用 于所述半解码器中的对应的一个的输入被施加到所述全解码器的所述输入,该意图用于所 述半解码器中的对应的一个的输入包括在所述半解码器中的所述对应的一个中不可获取 的所述码字。9. 如权利要求8所述的设计结构,其中,在所述并行霍夫曼数据解码器中,所述半解码 器以比所述三态内容可寻址存储器更便宜的技术实现。10. 如权利要求9所述的设计结构,其中,在所述并行霍夫曼数据解码器中,所述更便宜 的技术包括静态随机存取存储器。11. 如权利要求9所述的设计结构,其中,在所述并行霍夫曼数据解码器中,所述更便宜 的技术包括动态随机存取存储器。12. 如权利要求8所述的设计结构,其中,所述并行霍夫曼数据解码器进一步包括超前 寄存器,其具有获得数据流的数据输入,并且具有耦接到所述保持寄存器的所述主部分的 输出,其中所述保持寄存器通过抽取所述数据流和绕过所述超前寄存器来获得所述超前输 入。13. 如权利要求8所述的设计结构,其中,所述并行霍夫曼数据解码器进一步包括复用 器,其具有耦接到所述保持寄存器的第一输入、选择输入以及耦接到所述全解码器的所述 输入的输出,其中所述解码器选择和排序单元通过发送选择信号到所述选择输入来使得意 图用于所述半解码器中的所述对应的一个的所述输入被施加到所述全解码器的所述输入, 该意图用于所述半解码器中的所述对应的一个的所述输入包括在所述半解码器中的所述 对应的一个中不可获取的所述码字。14. 如权利要求8所述的设计结构,其中,在所述并行霍夫曼数据解码器中,数据的所述 重叠部分重叠1比特。15. -种用于并行地将根据霍夫曼码编码的数据解码的方法,所述方法包括: 在保持寄存器中保持主数据输入和超前输入; 向多个即Μ个半解码器提供所述主数据输入和所述超前输入的连续的重叠部分,所述 半解码器包括所述霍夫曼码的频繁出现的码字的子集; 当没有遇到在所述半解码器中不可获取的码字时,并行地在单个时钟周期中将所述频 繁出现的码字中的Μ个解码; 当遇到在所述半解码器中不可获取的码字时,将意图用于所述半解码器中的对应的一 个的输入施加到以三态内容可寻址存储器实现的全解码器的输入,该意图用于所述半解码 器中的对应的一个的输入包括在所述半解码器中的所述对应的一个中不可获取的所述码 字,所述全解码器包括所述霍夫曼码的全部码字。16. 如权利要求15所述的方法,进一步包括以比所述三态内容可寻址存储器更便宜的 技术实现所述半解码器。17. 如权利要求15所述的方法,进一步包括以静态随机存取存储器实现所述半解码器。18. 如权利要求15所述的方法,进一步包括以动态随机存取存储器实现所述半解码器。19. 如权利要求15所述的方法,进一步包括在超前寄存器中保持所述主数据输入,而所 述超前输入绕过所述超前寄存器。20. 如权利要求15所述的方法,其中,使用复用器实现所述将意图用于所述半解码器中 的所述对应的一个的所述输入施加到所述全解码器的所述输入。
【文档编号】H03M7/40GK106027066SQ201610181740
【公开日】2016年10月12日
【申请日】2016年3月28日
【发明人】B.阿巴利, B.布拉纳
【申请人】国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1