CN106027066A - 用于解码的并行霍夫曼数据解码器、设计结构和方法 - Google Patents
用于解码的并行霍夫曼数据解码器、设计结构和方法 Download PDFInfo
- Publication number
- CN106027066A CN106027066A CN201610181740.9A CN201610181740A CN106027066A CN 106027066 A CN106027066 A CN 106027066A CN 201610181740 A CN201610181740 A CN 201610181740A CN 106027066 A CN106027066 A CN 106027066A
- Authority
- CN
- China
- Prior art keywords
- decoder
- input
- data
- code
- decoders
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000013461 design Methods 0.000 title claims description 72
- 238000000034 method Methods 0.000 title claims description 29
- 238000005516 engineering process Methods 0.000 claims description 18
- 238000012360 testing method Methods 0.000 claims description 11
- 238000004519 manufacturing process Methods 0.000 claims description 10
- 238000012163 sequencing technique Methods 0.000 claims description 9
- 230000003068 static effect Effects 0.000 claims description 4
- 230000000875 corresponding effect Effects 0.000 description 20
- 230000008569 process Effects 0.000 description 16
- 238000012938 design process Methods 0.000 description 14
- 230000009471 action Effects 0.000 description 13
- 238000003860 storage Methods 0.000 description 8
- 238000004422 calculation algorithm Methods 0.000 description 6
- 238000007906 compression Methods 0.000 description 6
- 230000006835 compression Effects 0.000 description 6
- 239000012634 fragment Substances 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 239000000047 product Substances 0.000 description 4
- 238000004088 simulation Methods 0.000 description 4
- 241001269238 Data Species 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 3
- 238000009826 distribution Methods 0.000 description 3
- 239000000463 material Substances 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 238000013144 data compression Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 230000005611 electricity Effects 0.000 description 2
- 238000005538 encapsulation Methods 0.000 description 2
- 230000014509 gene expression Effects 0.000 description 2
- 238000007689 inspection Methods 0.000 description 2
- 239000000203 mixture Substances 0.000 description 2
- 230000003466 anti-cipated effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 239000011469 building brick Substances 0.000 description 1
- 239000000969 carrier Substances 0.000 description 1
- 238000005266 casting Methods 0.000 description 1
- 239000000919 ceramic Substances 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000005094 computer simulation Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000001276 controlling effect Effects 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000010894 electron beam technology Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 239000013067 intermediate product Substances 0.000 description 1
- 238000012432 intermediate storage Methods 0.000 description 1
- 238000012804 iterative process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 239000002184 metal Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000000465 moulding Methods 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 238000004513 sizing Methods 0.000 description 1
- 238000000547 structure data Methods 0.000 description 1
- 230000026676 system process Effects 0.000 description 1
- 230000036962 time dependent Effects 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/4031—Fixed length to variable length coding
- H03M7/4037—Prefix coding
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/60—General implementation details not specific to a particular type of compression
- H03M7/6005—Decoder aspects
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/60—General implementation details not specific to a particular type of compression
- H03M7/6017—Methods or arrangements to increase the throughput
- H03M7/6023—Parallelization
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
在保持寄存器中保持主数据输入和超前输入。向多个即M个半解码器提供所述主数据输入和所述超前输入的连续的重叠部分,所述半解码器包括霍夫曼码的频繁出现的码字的子集。当没有遇到在所述半解码器中不可获取的码字时,所述半解码器并行地在单个时钟周期中将所述频繁出现的码字中的M个解码。当遇到在所述半解码器中不可获取的码字时,将意图用于所述半解码器中的对应的一个的输入施加到以三态内容可寻址存储器实现的全解码器的输入,该意图用于所述半解码器中的对应的一个的输入包括在所述半解码器中的所述对应的一个中不可获取的所述码字。所述全解码器包括所述霍夫曼码的全部码字。
Description
技术领域
本发明涉及电气、电子和计算机领域,并且更具体地涉及系统架构等。
背景技术
霍夫曼码是使用由David A.Huffman开发的算法发现的最优前缀码。更常见的符号通常使用比更不常见的符号更少的比特表示。DEFLATE是使用LZ77算法和霍夫曼编码的组合的数据压缩算法,并且在RFC 1951中规定。在DEFLATE RFC 1951中定义一个示例霍夫曼解码器。
发明内容
本发明的原理提供用于并行霍夫曼解码器的技术。在一个方面中,用于将根据霍夫曼码编码的数据解码的并行霍夫曼数据解码器包括:保持寄存器,其具有保持主数据输入的主部分、保持超前输入的超前部分、以及多个输出;以及多个即M个半解码器,每一个半解码器具有输入和输出,所述输入耦接到所述保持寄存器的所述多个输出中的对应的一个。所述输入各自从所述保持寄存器的所述输出获得所述保持寄存器的所述主部分和所述超前部分中的数据的连续的重叠部分。还包括以三态内容可寻址存储器实现的全解码器。所述全解码器具有输入和输出,所述输入可选择性地连接以获得数据的所述重叠部分中的给定一个。进一步的元件包括解码器选择和排序单元,其具有多个输入、选择输出和多个输出通道(lane),所述多个输入耦接到所述半解码器的所述输出和所述全解码器的所述输出,所述选择输出控制所述全解码器输入的选择性连接。所述全解码器包括所述霍夫曼码的全部码字;所述半解码器包括所述霍夫曼码的频繁出现的码字的子集;以及当没有遇到在所述半解码器中不可获取的码字时,所述半解码器并行地在单个时钟周期中将所述频繁出现的码字中的M个解码。当遇到在所述半解码器中不可获取的码字时,所述解码器选择和排序单元使得意图用于所述半解码器中的对应的一个的输入被施加到所述全解码器的所述输入,该意图用于所述半解码器中的对应的一个的输入包括在所述半解码器中的所述对应的一个中不可获取的所述码字。
在另一方面中,一种设计结构被有形地实施在非临时性机器可读介质中,所述设计结构用于设计、制造或测试集成电路,并且所述设计结构包括如刚才所述的并行霍夫曼数据解码器。
在再一方面中,一种用于并行地将根据霍夫曼码编码的数据解码的示例方法包括在保持寄存器中保持主数据输入和超前输入;并且向多个即M个半解码器提供所述主数据输入和所述超前输入的连续的重叠部分。所述半解码器包括所述霍夫曼码的频繁出现的码字的子集。当没有遇到在所述半解码器中不可获取的码字时,进一步的步骤包括并行地在单个时钟周期中将所述频繁出现的码字中的M个解码。当遇到在所述半解码器中不可获取的码字时,进一步的步骤包括将意图用于所述半解码器中的对应的一个的输入施加到以三态内容可寻址存储器实现的全解码器的输入,该意图用于所述半解码器中的对应的一个的输入包括在所述半解码器中的所述对应的一个中不可获取的所述码字,所述全解码器包括所述霍夫曼码的全部码字。
如这里使用的,“促成”动作包括执行所述动作、使得所述动作更容易、帮助进行所述动作、或使得所述动作被执行。因此,通过示例而非限制的方式,通过发送适当的数据或命令以使得或帮助执行由在远程处理器上执行的指令进行的动作,在一个处理器上执行的指令可以促成所述动作。为了避免疑惑,在动作器通过除了执行动作之外促成所述动作时,所述动作仍然由某一实体或实体的组合执行。
可以使用计算机程序产品来实现多个设计结构方面,所述计算机程序产品包括具有计算机可用程序代码的计算机可读存储介质。此外,可以经由包括存储器和耦接到所述存储器并且可操作以实现设计结构或设计过程的至少一个处理器的系统(或装置)来实现所述设计结构或过程。
本发明的技术可以提供大量有益技术效果;例如,通过使用半解码器而非全解码器,比先前的技术需要更少的硬件资源和/或更少的芯片面积。注意,如这里所使用的,“半解码器”不一定精确地是全解码器的大小的1/2。
根据结合附图阅读的对本发明的示例性实施例的下列详细描述,本发明的这些和其他特征和优点将变得清楚。
附图说明
图1示出从现有技术中已知的霍夫曼编码的多个方面;
图2示出根据本发明的一方面的示例性的基于三态内容可寻址存储器(TCAM)的解码器;
图3示出根据本发明的一方面的并行霍夫曼解码器的实施例;
图4示出根据本发明的一方面的并行霍夫曼解码器的进一步的多个方面;
图5和6示出根据本发明的多个方面的符号分布;
图7示出根据本发明的一方面的用于处置不由半解码器处理的码字的技术;
图8示出本发明的进一步的半解码器方面;
图9示出根据本发明的一方面的示例执行数据;以及
图10是在半导体设计、制造和/或测试中使用的设计过程的流程图。
具体实施方式
如所述,霍夫曼码是使用由David A.Huffman开发的算法发现的最优前缀码。更常见的符号通常使用比更不常见的符号更少的比特表示。DEFLATE是使用LZ77算法和霍夫曼编码的组合的数据压缩算法,并且在RFC 1951中规定。在DEFLATE RFC 1951中定义一个示例霍夫曼解码器。
此外,在该方面中,数据被编码成块,如下:
<块><块><块>…
例如,在每一个块中可以存在3比特的首标(header)。如果给定的块是块的序列中的最后的块,则第1比特可以具有值1,否则(即,在预计更多的块的情况下)具有值0。第2和第3比特对于原始的块可以使得值00存储在块中,对于固定的霍夫曼表(事先商定的)可以使得值01存储在块中,对于动态霍夫曼表可以使得值10被存储在块中。
通过重复串消除(LZ编码)和使用加权的符号树(霍夫曼编码)来实现压缩。关于重复串消除,考虑以下:
如由箭头指示的,重复的串由返回所述串的第一次出现的指针替代。保留所述串的第一个副本。这里,由返回“S”的第一次出现的指针替代“S”的随后的出现,并且由返回“P”的第一次出现的指针替代“P”的随后的出现。指针将包括诸如“回溯100个字符并且复制10个字节”的信息。指针比原始数据更小,并且因此可以实现压缩。对文件进行“拉链压缩(zipping)”是非限制性示例。这是第一阶段;在第二阶段执行霍夫曼编码。
编码的串具有从3到258字节的长度和从1到32768字节的距离(滑动窗口)。
现在参考图1,霍夫曼编码使用更少的比特来编码更常见的符号。码的比特序列长度与符号频率成反比。例如,可以如下编码符号A、B、P和Q:
符号:码=A:0,B:10,P:110,Q:111。
霍夫曼编码是无前缀的;即,没有码的比特序列是另一个码的比特序列的前缀。因此,B:10→C:101是不可能的。
此外,关于无前缀属性,当编码的比特被级联时,关于一个符号何时开始和结束不存在模糊性。因此,不需要分开符号的记号。序列PABQ可以因此被编码为110010111。然而,这使得并行解码器的构造变得复杂,因为它是比特串行处理。
此外,关于DEFLATE,霍夫曼编码器将符号编码为码。288个符号将文字和指针长度编码,如下:
●0-255:文字(例如原始ASCII将在这里)
●256:deflate块的结束(终结符号)
●257-285:3-258字节的匹配长度+额外的比特(不是文字,而是将跟随在该码字之后的指针的串(匹配)长度)。
下列表示出串匹配长度:
注意,符号首先被“霍夫曼化”,并且随后附加额外的比特以将匹配长(match len)(长度)编码。
关于距离,对于指针编码,<匹配长度>之后总是跟随有<距离>。存在32个距离编码,如下:
图2示出示例性的基于TCAM的解码器。可以使用任何类型的TCAM实现一个或多个实施例。输入是比特序列110010111,其前三个符号是PAB。这被用作查询内容可寻址存储器(CAM)的关键字。CAM条目有具有0、1或“不关心”(X)的值的“三态数字”。CAM中的第一个“命中(hit)”针对对应于符号P、具有3比特长度的110XXX。所述输入随后向左移位3比特,并且下一个“命中”针对对应于符号A、具有1比特长度的0XXXXX。所述输入随后向左移位1比特,并且下一个“命中”针对对应于符号B、具有2比特长度的10XXXX。
现在考虑CAM数组(array)宽度。注意,“比特”具有0或1的值,而在该上下文中的(三态)“数字”可以具有0、1或不关心(X)的值。DEFLATE最大比特序列长度是15比特。可以期望的是使用数字0(表示这是“MatchLen”(匹配长度)码)或1(表示这是距离码)作为每一个CAM字的前缀-也就是说,文字/长(Len)和距离表二者是否都被存储在相同的TCAM中。因此,不包括任何错误校正码(ECC)在内,TCAM部分应该是至少16个数字宽。
现在考虑CAM和RAM数组长度。具有288个文字/长度符号和32个距离符号,288+32=320个条目,意味着512个TCAM条目(向上舍入到2的下一次幂)。注意,向上舍入是可选的;大多数技术是以2的幂来确定大小,然而,这不是要求的,并且技术人员将理解分数大小(fractional sizing)是可用的,不一定需要向上舍入。
现在,关于RAM数组宽度,在一个或多个非限制实施例中,如果在RAM中存储符号和码比特长度,假设9比特用于288个文字/长(len)符号(“长(len)”在这里用作“长度”的简略表达方法),假设5比特用于距离符号,并且RAM字将包含文字/长或距离→max(9,5)=9比特。使用1比特前缀来将文字/长与距离符号区分开,因此,10比特将足以识别文字/长和距离符号。输入移位值也可以被存储在RAM中。在该方面中,CAM字(霍夫曼码)的最大比特长度=15,而额外的13比特被用于距离码;因此,15+13=28比特。这意味着输入可以被移位28个位置或更少log2(28)=5比特(向上舍入到最近的整数)以存储在RAM条目中。因此,不包括ECC在内,总共是10+5=15比特用于RAM。在一些实例中,可能需要额外的RAM比特;例如,用于控制解码器状态机等。
如果符号和码比特长度被存储在分开的SRAM中,则仅需要存储分开的SRAM的地址,意味着不包括ECC在内,log2(512)=9比特是TCAM的RAM部分。
现在考虑将诸如以下比特序列的比特序列解码的问题:
110010101011001100100100100101001111
由于可变长度编码(VLC),不容易识别数据边界。简单的串行解码器从左到右一次解码1比特,这太慢。一个或多个实施例有利地在单个周期中解码例如多达128比特的串。
现在将参考图3。数据399是包含在霍夫曼编码的符号中的比特的流,所述霍夫曼编码的符号具有可变长度(比方说,1-15比特,或当包括某些额外的比特时可能28比特)。因为所述码是可变长度,事先不知道边界在哪里。不知道一个符号在哪里停止和另一个符号在哪里开始;确定这些边界是解码过程的一部分。因为所述符号是可变长度,并且因为所述符号一个时钟周期接一个时钟周期地进入,符号可能跨越时钟边界。符号可以在一个“字”中开始,并且在另一个“字”中结束,其中所述字仅是每一个时钟周期提取的数据的样本。在非限制性示例中,如果提取数据399的128比特宽的样本(即M=128),并且假设(纯粹用于示例性目的,因为符号事实上具有可变长度)每一个编码的符号是10比特宽,整数数目的10比特的符号将不适合于128比特的数据片段(slice);将会存在12个10比特的符号和下一符号的8比特;该符号的剩余的2比特将在下一时钟周期的输入中到达。这在一个或多个实施例中经由超前抽头(tap)389来处理。具体地,假设最大码大小N是28比特。在最坏的情况下,符号可以在M(例如128)比特的最后的比特开始,并且继续N-1(例如27)比特进入下一时钟周期。因此,采用N-1=27比特的超前抽头。因此在M(例如128)比特宽的块(chunk)中采样输入数据399,其中比特被编号为0到M-1(例如0到127),并且抽取(tap)被编号为0到N-2(例如,0到26)的N-1超前比特。
数据399的M(例如128)比特宽的样本被馈送到超前寄存器397,其保持所述样本一个时钟周期,使得当所述样本到达保持寄存器395时,它将与未在超前寄存器397中被延迟的、来自抽头389的超前数据是同时的。被编号为391的包括数据399的M(例如128)比特宽的样本的保持寄存器395中的数据以及被编号为393的来自超前抽头389的数据被馈送到半解码器302、304、306、……308。在保持寄存器395中,被编号为391的数据399的M(例如128)比特宽的样本中的比特被编号为0到M-1(例如0到127),而被编号为393的来自超前抽头389的数据中的比特被编号为M到M+N-1(例如128到155)。
半解码器302、304、306、……308包含最常见的码字(在全部解码器上被复制的内容)。全解码器310包含全部码字。第一半解码器302被接线到保持寄存器395的比特0到N-1(例如27),并且下一半解码器304被接线到保持寄存器395的比特1到N(例如28),依此类推。在常见情况下,全部半解码器同时解码它们的输入片段。每一个片段是N(例如28)比特长,与左边的片段重叠1比特。在非限制性示例中,存在128个半解码器。解码是推测性的,因为事先不知道码边界。
SRAM与TCAM相比更便宜、更小并且使用更少的电力,因此使得使用基于SRAM的半解码器是有利的。给予这里的教导,技术人员将能够以例如SRAM或动态随机存取存储器(DRAM)实现半解码器,并且以TCAM实现全解码器。
现在将参考图9。半解码器将存储第一级数据(常发现的码)。根据本发明的实施例,较少发现的码将仅被包括在将被存储在全解码器中的第二级数据中。图9的表示出了码将不会在第一级中被发现的频率。例如,对于inp_alice29_txt.gz基准(benchmark),98%的时间,对于(9,6)表的情况,码将在第一级长度码查找中被发现,而仅2%的时间依赖于必要的第二级查找。图9示出用于三个不同基准的两个不同示例。在(9,6)表的示例中,第一级表是具有29个文字/长度的条目和26个距离的条目的SRAM,而在(10,7)表的示例中,第一级表是具有210个文字/长度的条目和27个距离的条目的SRAM。在(10,7)表的示例中,在第二列、第二行中的值397意味着平均来说,输入的每397字节,解码器需要查阅第二级文字/长度表。注意,“inp_alice29_txt.gz”是当压缩文本时常用的基准,并且指示的其他.gz文件也是已知的基准。
如图4中所见,如果诸如306的半解码器不能完成它的工作(错误解码,因为在关于图9刚才讨论的示例中,其是在第一等级中没有发现的2%的码中的一个),则它的输入片段被复用到全解码器(见时间T1的“未命中”)。右边的剩余的半解码器输出(这里308)被声明为无效,因为它们的开始比特位置取决于不完整的解码器输出。全解码器在下一周期中将被错误解码的输入片段解码。
注意,仅单个输入被示出为到复用器312,但事实上,包括超前比特的保持寄存器的整个输出宽度可用于复用器312,并且基于来自选择单元314的选择信号选择适当的比特(对应于未命中的半解码器),并且将所述适当的比特路由到全解码器310。在图4的底部,在时间T0处,指示的半解码器成功(“命中”);即,码被发现并且输出是有效的。在时间T1处,未发现所述码的半解码器306指示“未命中”,这要求将它的输入发送到全解码器310。右边的解码器(例如,308)不能继续进行,因为由于半解码器306的失败,码边界未知。全解码器310提供答案,并且随后在时间T2中,右边的剩余的半解码器可以继续。
一旦全解码器完成,剩余的半解码器就跟着做(在与全解码器相同的周期或之后的周期中)。
解码器选择单元314从左到右识别许多解码中的有效解码,消除跨越数据边界的“伪”解码。
图3因此描绘示例并行霍夫曼数据解码器,其包括使用静态随机存取存储器(SRAM)构造的多个(在非限制性示例中128个)半解码器302、304、306、308(仅示出少数以避免混乱)以及使用三态CAM(TCAM)构造的一个全解码器310。图3的并行解码器在一个时钟周期中并行地推测性地解码多达128个码字(相较于在当前系统中每周期仅少数比特)。半解码器302、304、306、308是使用SRAM构造的,通常具有仅使用512到1024个常见码字的9-10个地址输入。全码字解码器310是使用包含全部码字的三态CAM(TCAM)构造的,所述全部码字包括不常见以及常见码字。注意,全霍夫曼解码器表中的条目的总数(在第一和第二级中)将为如下(基于在zlib点net处发现的zlib源代码,“.”被呈现为“点”以避免包括浏览器可执行代码)。
·(9,6)情况:用于长度/文字的852+用于距离的592=总共1444;将其与需要2**9+2**6=总共576的半解码器相比较;
·(10,7)情况:用于长度文字的1332+用于距离的400=总共1732;将其与需要2**10+2**7=总共1152的半解码器相比较。
半解码器302、304、306、308每一个具有以1比特的重叠间隔采样128比特数据的28比特输入,因此使得推测成为可能。
全解码器310具有经由复用器312从来自M比特数据的M个28比特的间隔中的一个复用的28比特输入,而M比特数据被具有来自下一数据周期的数据的27比特扩展,以能够解码跨越M比特边界的28比特数据。当半解码器不能解码码字时,半解码器通过复用器312将它的输入有效地转发到全解码器;解码器选择单元314从许多解码中选择有效的解码后的码字。(如上讨论的,包括超前比特的保持寄存器的整个输出宽度对复用器312是可用的,并且基于来自选择单元314的选择信号选择适当的比特(对应于未命中的半解码器),并且将所述适当的比特路由到全解码器310。
注意,在通常情况下,128、28和27的示例值可以分别使用M(输入数据的块的宽度)、N(到每一个半解码器的输入的大小)和K(N-1,超前比特的数目)的任意值替代。因此,输入数据流399的被编号为0到M-1的M比特被馈送到超前寄存器397,并且随后被馈送到保持寄存器395。在图3和4的非限制示例中,M=128。同时,从输入流399将0到N-2的N-1比特(在图3和4的非限制性示例中N=28)抽取到保持寄存器395的超前部分393。保持寄存器395的主部分391因此包括输入数据流399的0到M-1比特,而超前抽头绕过超前寄存器397,并且因此保持寄存器395的超前部分393包括来自下一周期的0到N-2的N-1比特(在图3和4的非限制性示例中N=28),因为超前寄存器397被所述抽头绕过。这些是M到M+N-1比特,即,在非限制性示例中的129到155比特。同样,为了避免混淆,注意半解码器片段是28比特宽,但是仅有27个超前比特加上1个重叠比特。
在一些实施例中,半解码器每一个具有以1比特的重叠间隔采样128比特数据的28比特输入,因此使得推测成为可能;并且全解码器具有来自M比特数据的M个28比特的间隔中的一个复用的28比特输入,而所述M比特数据被具有来自下一数据周期的数据的27比特扩展,以能够解码跨越M比特边界的28比特数据。当半解码器不能解码码字时,半解码器通过复用器将它的输入转发到全解码器。因此,在图3的非限制性示例中,半解码器302具有0到N-1(27)的输入比特,半解码器304具有1到N(28)的输入比特,半解码器306具有P到N+P-1的输入比特,依此类推。
可变长度码字由全解码器(按需)以及由半解码器302、304、306、308解码为固定长度码并且被放置在准备用于LZ字典查找的单独的通道(这里,0到15的16个通道)中。
图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个条目或更大的表。因为这是全部数据相关的,所以给予这里的教导,技术人员可以使用基准文件选择表大小。与虚线上面的码相比较,虚线下面的码不常出现;在半解码器中发现虚线上面的码,而仅在全解码器中发现在虚线下面的码。
图6示出更平衡的树的示例。数据在其中具有256个符号;25%的符号每个出现400次;25%出现200次;并且50%每个出现100次。8个符号意味着4的深度,而256个符号意味着9的深度。因此,最大9比特将对256个符号的整个集合进行编码。如果采用8比特的表,那将使得(100+100)/800=25%的符号在表外。同样,与虚线上面的码相比较,虚线下面的码不常出现;在半解码器中发现虚线上面的码,而仅在全解码器中发现在虚线下面的码。这里,8比特的表可能导致太多的未命中,使得9比特的表是优选的。
现在考虑图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比特长度的0XXXXX。所述输入随后向左移位1比特,并且下一个“命中”针对对应于符号B、具有2比特长度的10XXXX。
现在考虑半解码器302、304、306、308。每一个半解码器包含霍夫曼表的一部分并且是基于SRAM的。每一个半解码器存储常见的长度/文字符号,并且存储常见的距离符号。在一个或多个非限制性实施例中,被解码的码字是8-10比特宽,这导致2^8到2^10个条目的SRAM。每一个条目指示:
·符号(9比特)
·码字比特(0-10)的数目(4比特)
·控制字符(例如无效码字)。
宽的SRAM是期望的,因为每比特的面积最小,并且可以快速加载霍夫曼表。出于相同原因,10比特码字将导致少于2^10次写入。霍夫曼编码工作良好,例如,如果在行内选择“不关心”的比特,则可以在一个周期中写入用于每一行的SRAM条目。例如,对于输入码字100000xxx,SRAM位置100000,条目0-7全部包含相同符号、符号长(SymLen)……。在最好的情况下,对128x144的SRAM的128次写入将加载所述表。
参考图7,对于未由半解码器处理的码字,长码字进行索引的SRAM条目将具有告诉系统去其他地方寻找(如上讨论的,经由由块314控制的复用器路由到全解码器的该半解码器的比特)的控制比特。半解码器可以具有例如29或210个条目。参考755,半解码器将因此只看输入的开头的9或10比特。因为最常见的符号使用最小数目的比特,并且因为半解码器仅包括更频繁地出现的符号,半解码器将能够发现其能够通过只看开头的9或10比特译码的码字。当未定义开头的9或10比特时,如上所述,所述比特被路由到全解码器。
此外,关于半解码器,现在将注意力给予到图8。如其中所见,文字和距离可以被存储在分开的表899、897中。从外部来看,其看上去像仅单个表。逻辑(到复用器895的选择信号)选择一个表或其他表。通过上下文选择距离码:如果前面的符号是长度,则所述逻辑告诉复用器选择距离表897;如果前面的符号是文字,则所述逻辑告诉复用器选择文字长度表899。复用器输出视情况包括符号、符号长(len)和任何控制比特。
各种优化是可能的。例如,可以基于期望的压缩率减少半解码器的数目。如果期望2:1的压缩率,则以1/2的输出速率取得输入,因此多达1/2的半解码器可能是必要的;例如,8字节的输入宽度和16字节的输出宽度。对于未压缩的数据,输出速率将下降到输入速率。
图9示出上面讨论的非限制性示例性能数据。
一个或多个实施例有利地使用TCAM和SRAM每周期解码多个码。这应该与先前的技术相区别,在先前的技术中并行获得N个结果,但是仅一个结果可以是有效码,使得在这种现有系统中,实际上每周期仅一个霍夫曼符号被解码。
DEFLATE标准(更一般地,动态的基于树的霍夫曼码)需要是基于表的;因此,一个或多个实施例采用SRAM或TCAM或两者。
注意,相对于解码每周期每个流1个符号地解码的多个独立流,一个或多个实施例并行解码单个流。
一个或多个实施例因此提供并行霍夫曼数据解码器,其包括使用SRAM构造的至少一个半解码器和使用三态CAM(TCAM)构造的至少一个全解码器、以及从多个解码中选择有效的解码后的码字的解码器选择单元。如所述,128、28、27的示例霍夫曼解码器值可以分别使用M、N和K的任意值替代。在一个或多个实施例中,并行解码器在一个时钟周期中并行地推测性地解码多达128个码字;半解码器是使用SRAM构造的,通常具有仅使用512到1024个常见码字的9-10个地址输入;并且全码字解码器是使用包含全部码字的三态CAM(TCAM)构造的,所述全部码字也包括不常见的码字。
在一些实施例中,半解码器每一个具有以1比特的重叠间隔采样128比特数据的28比特输入,因此使得推测成为可能;并且全解码器具有从M比特数据的M个28比特的间隔中的一个复用的28比特输入,而M比特数据被通过具有来自下一数据周期的数据的27比特扩展以能够解码跨越M比特边界的28比特数据。当半解码器不能解码码字时,半解码器通过复用器将它的输入转发到全解码器。
图中的元素通常用硬件实现。在一个或多个实施例中,超前寄存器397和保持寄存器395是可以使用已知技术实现的硬件寄存器;以TCAM实现全解码器;以SRAM(或可替换地,DRAM)实现半解码器;使用已知的复用电路实现复用器312;并且以硬件状态机和随机逻辑实现选择单元314。
给予迄今为止的讨论,将理解,一般地说,根据本发明的一方面的用于将根据霍夫曼码编码的数据解码的示例并行霍夫曼数据解码器包括:保持寄存器395,其具有保持主数据输入的主部分391、保持超前输入的超前部分393、以及多个输出。还包括多个即M个半解码器302、304、306、308,每一个半解码器具有输入和输出,所述输入耦接到所述保持寄存器的所述多个输出中的对应的一个。所述输入各自从所述保持寄存器的所述输出获得所述保持寄存器的所述主部分和所述超前部分中的数据的连续的重叠部分。另一元件是以三态内容可寻址存储器实现的全解码器310。所述全解码器具有输入和输出,所述输入可选择性地连接以获得数据的所述重叠部分中的给定一个。解码器选择和排序单元314具有多个输入、选择输出和多个输出通道,所述多个输入耦接到所述半解码器的所述输出和所述全解码器的所述输出,所述选择输出控制所述全解码器输入的所述选择性连接。所述全解码器包括所述霍夫曼码的全部码字,而所述半解码器包括所述霍夫曼码的频繁出现的码字的子集。当没有遇到在所述半解码器中不可获取的码字时,所述半解码器并行地在单个时钟周期中将所述频繁出现的码字中的M个解码。当遇到在所述半解码器中不可获取的码字时(见图4),所述解码器选择和排序单元314使得意图用于所述半解码器中的对应的一个(例如,306)的输入被施加到所述全解码器310的所述输入,该意图用于所述半解码器中的对应的一个的输入包括在所述半解码器中的所述对应的一个中不可获取的所述码字。
在一个或多个实施例中,所述半解码器以诸如SRAM或DRAM的、比所述三态内容可寻址存储器更便宜的技术实现。
一些实施例进一步包括超前寄存器397,其具有数据输入以获得数据流399,并且具有耦接到所述保持寄存器395的所述主部分391的输出。如在389所见,所述保持寄存器通过抽取所述数据流和绕过所述超前寄存器来获得所述超前输入。
一些实施例进一步包括复用器312,其具有耦接到所述保持寄存器395的第一输入、选择输入以及耦接到所述全解码器310的所述输入的输出。所述解码器选择和排序单元314通过发送选择信号到所述复用器312的所述选择输入,使得意图用于所述半解码器中的对应的一个(例如,306)的所述输入被施加到所述全解码器310的所述输入,该意图用于所述半解码器中的对应的一个的所述输入包括在所述半解码器中的所述对应的一个中不可获取的所述码字。
在一个或多个实施例中,数据的所述重叠部分重叠1比特。
此外,给予迄今为止的讨论,将理解,根据本发明的另一方面的用于并行地将根据霍夫曼码编码的数据解码的示例方法包括:在保持寄存器395中保持主数据输入391和超前输入393;并且向多个即M个半解码器302、304、306、308提供所述主数据输入和所述超前输入的连续的重叠部分。所述半解码器包括所述霍夫曼码的频繁出现的码字的子集。当没有遇到在所述半解码器中不可获取的码字时,进一步的步骤包括并行地在单个时钟周期中将所述频繁出现的码字中的M个解码。另一方面,当遇到在所述半解码器中不可获取的码字时,进一步的步骤包括将意图用于所述半解码器中的对应的一个(例如306)的输入施加到以三态内容可寻址存储器实现的全解码器310的输入,该意图用于所述半解码器中的对应的一个的输入包括在所述半解码器中的所述对应的一个中不可获取的所述码字。所述全解码器包括所述霍夫曼码的全部码字。
在一些情况下的进一步的步骤包括以诸如SRAM或DRAM的比所述三态内容可寻址存储器更便宜的技术实现所述半解码器。
在一些实施例中,进一步的步骤包括在超前寄存器397中保持所述主数据输入,而所述超前输入(见389)绕过所述超前寄存器。
在一些实施例中,使用复用器312实现将意图用于所述半解码器中的对应的一个的输入施加到所述全解码器的输入。
示例性集成电路和设计结构细节
这里描述的一个或多个示例性方法可以用在集成电路芯片的制造、测试或操作中。集成电路芯片可以由制造者以未加工的晶圆形式(即,作为具有多个未封装的芯片的单个晶圆)作为空裸芯(bare die)分发,或以封装的形式分发。在后者的情况下,芯片被安装在单个芯片封装(诸如塑料载体,具有附接到母板或其他更高级载体的导线)中或在多芯片封装(诸如陶瓷载体,其具有表面互连或埋入式互连中的任一个或两者)中。在任何情况下,随后将芯片与其他芯片、分立的电路元件和/或其他信号处理设备集成为(a)诸如母板的中间产品或(b)最终产品的一部分。最终产品可以是包括集成电路芯片的任何产品。
图10示出了例如在半导体IC逻辑设计、仿真、测试、布图和制造中使用的示例性设计流程1900的方块图。设计流程1900包括用于处理设计结构或器件以产生上述以及图2、3、4、7和8中示出的设计结构和/或器件的逻辑上或其他功能上等效表示的过程、机器和/或机制。由设计流程1900处理和/或产生的设计结构可以在机器可读传输或存储介质上被编码以包括数据和/或指令,所述数据和/或指令在数据处理系统上执行或以其他方式处理时,产生硬件组件、电路、器件或系统的逻辑上、结构上、机械上或其他功能上的等效表示。机器包括但不限于用于IC设计过程(例如设计、制造或仿真电路、组件、器件或系统)的任何机器。例如,机器可以包括:用于产生掩模的光刻机、机器和/或设备(例如电子束直写仪)、用于仿真设计结构的计算机或设备、用于制造或测试过程的任何装置,或用于将所述设计结构的功能上的等效表示编程到任何介质中的任何机器(例如,用于对可编程门阵列进行编程的机器)。
设计流程1900可随被设计的表示类型而不同。例如,用于构建专用IC(ASIC)的设计流程1900可能不同于用于设计标准组件的设计流程1900,或不同于用于将设计实例化到可编程阵列(例如,由Inc.或Inc.提供的可编程门阵列(PGA)或现场可编程门阵列(FPGA))中的设计流程1900。
图10示出了多个此类设计结构,其中包括优选地由设计过程1910处理的输入设计结构1920。设计结构1920可以是由设计过程1910生成和处理以产生硬件器件的逻辑上等效的功能表示的逻辑仿真设计结构。设计结构1920还可以或备选地包括数据和/或程序指令,所述数据和/或程序指令由设计过程1910处理时,生成硬件器件的物理结构的功能表示。无论表示功能和/或结构设计特性,均可以使用例如由核心开发人员/设计人员实施的电子计算机辅助设计(ECAD)生成设计结构1920。当编码在机器可读数据传输、门阵列或存储介质上时,设计结构1920可以由设计过程1910内的一个或多个硬件和/或软件模块访问和处理以仿真或以其他方式在功能上表示例如图2、3、4、7和8中示出的那些电子组件、电路、电子或逻辑模块、装置、器件或系统。因此,设计结构1920可以包括文件或其他数据结构,其中包括人类和/或机器可读源代码、编译结构和计算机可执行代码结构,当所述文件或其他数据结构由设计或仿真数据处理系统处理时,在功能上仿真或以其他方式表示电路或其他级别的硬件逻辑设计。此类数据结构可以包括硬件描述语言(HDL)设计实体或遵循和/或兼容低级HDL设计语言(例如Verilog和VHDL)和/或高级设计语言(例如C或C++)的其他数据结构。
设计过程1910优选地采用和结合硬件和/或软件模块,所述模块用于合成、转换或以其他方式处理图2、3、4、7和8中示出的组件、电路、器件或逻辑结构的设计/仿真功能等价物以生成可以包含设计结构(例如设计结构1920)的网表1980。网表1980例如可以包括编译或以其他方式处理的数据结构,所述数据结构表示描述与集成电路设计中的其他元件和电路的连接的线缆、分离组件、逻辑门、控制电路、I/O设备、模型等的列表。网表1980可以使用迭代过程合成,其中网表1980被重新合成一次或多次,具体取决于器件的设计规范和参数。对于在此所述的其他设计结构类型,网表1980可以记录在机器可读数据存储介质上或编程到可编程门阵列中。所述介质可以是非易失性存储介质,例如磁或光盘驱动器、可编程门阵列、压缩闪存或其他闪存。此外或备选地,所述介质可以是可在其上经由因特网或其他适合联网手段传输和中间存储数据分组的系统或高速缓冲存储器、缓冲器空间或导电或光导器件和材料。
设计过程1910可以包括用于处理包括网表1980在内的各种输入数据结构类型的硬件和软件模块。此类数据结构类型例如可以驻留在库元件1930内并包括一组常用元件、电路和器件,其中包括给定制造技术(例如,不同的技术节点,32纳米、45纳米、90纳米等)的模型、布图和符号表示。所述数据结构类型还可包括设计规范1940、特征数据1950、检验数据1960、设计规则1970和测试数据文件1985,它们可以包括输入测试模式、输出测试结果和其他测试信息。设计过程1910还可例如包括标准机械设计过程,例如用于诸如铸造、成型和模压成形等操作的应力分析、热分析、机械事件仿真、过程仿真。机械设计领域的技术人员可以在不偏离本发明的范围和精神的情况下理解在设计过程1910中使用的可能机械设计工具和应用的范围。设计过程1910还可包括用于执行诸如定时分析、检验、设计规则检查、放置和路由操作之类的标准电路设计过程的模块。
设计过程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仿真模型。
设计结构1990还可以采用用于集成电路的布图数据交换的数据格式和/或符号数据格式(例如以GDSII(GDS2)、GL1、OASIS、图文件或任何其他用于存储此类设计数据结构的适合格式存储的信息)。设计结构1990可以包括信息,例如符号数据、图文件、测试数据文件、设计内容文件、制造数据、布图参数、线缆、金属级别、通孔、形状、用于在整个生产线中路由的数据,以及制造商或其他设计人员/开发人员制造上述以及图2、3、4、7和8中示出的器件或结构所需的任何其他数据。设计结构1990然后可以继续到阶段1995,例如,在阶段1995,设计结构1990:继续到流片(tape-out),被发布到制造公司、被发布到掩模室(mask house)、被发送到其他设计室,被发回给客户等。
这里使用的术语仅用于描述特定实施例的目的,并且无意限制本发明。如这里使用的,单数形式“一”和“该/所述”也意图包括复数形式,除非上下文清楚地另外指示。将进一步理解的是,当在本说明书中使用时,术语“包括”和/或“包含”指明所陈述的特征、整体、步骤、操作、元件和/或组件的存在,但不排除存在或增加一个或多个其它特征、整体、步骤、操作、元件、组件和/或它们的组。
在所附权利要求中的对应的结构、材料、动作、和全部部件或步骤加功能元素的等同物意图包括用于结合如具体要求保护的其他要求保护的元素执行所述功能的任何结构、材料、或动作。
本发明的各种实施例的描述为了说明的目的而被呈现,但意图不是穷尽性的或限于所公开的实施例。在不背离所描述的实施例的范围和精神的情况下,许多修改和变化对本领域普通技术人员来说将是清楚的。选择这里使用的术语以便最好地解释实施例的原理、实际应用或相对于市场中找到的技术的技术改进,或以便使得其它本领域普通技术人员能够理解这里公开的实施例。
Claims (20)
1.一种用于将根据霍夫曼码编码的数据解码的并行霍夫曼数据解码器,所述并行霍夫曼数据解码器包括:
保持寄存器,其具有保持主数据输入的主部分、保持超前输入的超前部分、以及多个输出;
多个即M个半解码器,每一个半解码器具有输入和输出,所述输入耦接到所述保持寄存器的所述多个输出中的对应的一个,所述输入各自从所述保持寄存器的所述输出获得所述保持寄存器的所述主部分和所述超前部分中的数据的连续的重叠部分;
全解码器,其以三态内容可寻址存储器实现,所述全解码器具有可选择性地连接以获得数据的所述重叠部分中的给定一个的输入、和输出;
解码器选择和排序单元,其具有耦接到所述半解码器的所述输出和所述全解码器的所述输出的多个输入、控制所述全解码器输入的所述选择性连接的选择输出、和多个输出通道;
其中:
所述全解码器包括所述霍夫曼码的全部码字;
所述半解码器包括所述霍夫曼码的频繁出现的码字的子集;
当没有遇到在所述半解码器中不可获取的码字时,所述半解码器并行地在单个时钟周期中将所述频繁出现的码字中的M个解码;以及
当遇到在所述半解码器中不可获取的码字时,所述解码器选择和排序单元使得意图用于所述半解码器中的对应的一个的输入被施加到所述全解码器的所述输入,该意图用于所述半解码器中的对应的一个的输入包括在所述半解码器中的所述对应的一个中不可获取的所述码字。
2.如权利要求1所述的并行霍夫曼数据解码器,其中,以比所述三态内容可寻址存储器更便宜的技术实现所述半解码器。
3.如权利要求2所述的并行霍夫曼数据解码器,其中,所述更便宜的技术包括静态随机存取存储器。
4.如权利要求2所述的并行霍夫曼数据解码器,其中,所述更便宜的技术包括动态随机存取存储器。
5.如权利要求1所述的并行霍夫曼数据解码器,进一步包括超前寄存器,其具有获得数据流的数据输入,并且具有耦接到所述保持寄存器的所述主部分的输出,其中所述保持寄存器通过抽取所述数据流和绕过所述超前寄存器来获得所述超前输入。
6.如权利要求1所述的并行霍夫曼数据解码器,进一步包括复用器,其具有耦接到所述保持寄存器的第一输入、选择输入、以及耦接到所述全解码器的所述输入的输出,其中所述解码器选择和排序单元通过发送选择信号到所述选择输入来使得意图用于所述半解码器中的所述对应的一个的所述输入被施加到所述全解码器的所述输入,该意图用于所述半解码器中的所述对应的一个的所述输入包括在所述半解码器中的所述对应的一个中不可获取的所述码字。
7.如权利要求1所述的并行霍夫曼数据解码器,其中,数据的所述重叠部分重叠1比特。
8.一种有形地在非临时性机器可读介质中实施的设计结构,用于设计、制造或测试集成电路,所述设计结构包括用于将根据霍夫曼码编码的数据解码的并行霍夫曼数据解码器,所述并行霍夫曼数据解码器继而包括:
保持寄存器,其具有保持主数据输入的主部分、持超前输入的超前部分、及多个输出;
多个即M个半解码器,每一个半解码器具有输入和输出,所述输入耦接到所述保持寄存器的所述多个输出中的对应的一个,所述输入各自从所述保持寄存器的所述输出获得所述保持寄存器的所述主部分和所述超前部分中的数据的连续的重叠部分;
全解码器,其以三态内容可寻址存储器实现,所述全解码器具有可选择性地连接以获得数据的所述重叠部分中的给定一个的输入、和输出;
解码器选择和排序单元,其具有耦接到所述半解码器的所述输出和所述全解码器的所述输出的多个输入、控制所述全解码器输入的所述选择性连接的选择输出、和多个输出通道;
其中:
所述全解码器包括所述霍夫曼码的全部码字;
所述半解码器包括所述霍夫曼码的频繁出现的码字的子集;
当没有遇到在所述半解码器中不可获取的码字时,所述半解码器并行地在单个时钟周期中将所述频繁出现的码字中的M个解码;以及
当遇到在所述半解码器中不可获取的码字时,所述解码器选择和排序单元使得意图用于所述半解码器中的对应的一个的输入被施加到所述全解码器的所述输入,该意图用于所述半解码器中的对应的一个的输入包括在所述半解码器中的所述对应的一个中不可获取的所述码字。
9.如权利要求8所述的设计结构,其中,在所述并行霍夫曼数据解码器中,所述半解码器以比所述三态内容可寻址存储器更便宜的技术实现。
10.如权利要求9所述的设计结构,其中,在所述并行霍夫曼数据解码器中,所述更便宜的技术包括静态随机存取存储器。
11.如权利要求9所述的设计结构,其中,在所述并行霍夫曼数据解码器中,所述更便宜的技术包括动态随机存取存储器。
12.如权利要求8所述的设计结构,其中,所述并行霍夫曼数据解码器进一步包括超前寄存器,其具有获得数据流的数据输入,并且具有耦接到所述保持寄存器的所述主部分的输出,其中所述保持寄存器通过抽取所述数据流和绕过所述超前寄存器来获得所述超前输入。
13.如权利要求8所述的设计结构,其中,所述并行霍夫曼数据解码器进一步包括复用器,其具有耦接到所述保持寄存器的第一输入、选择输入以及耦接到所述全解码器的所述输入的输出,其中所述解码器选择和排序单元通过发送选择信号到所述选择输入来使得意图用于所述半解码器中的所述对应的一个的所述输入被施加到所述全解码器的所述输入,该意图用于所述半解码器中的所述对应的一个的所述输入包括在所述半解码器中的所述对应的一个中不可获取的所述码字。
14.如权利要求8所述的设计结构,其中,在所述并行霍夫曼数据解码器中,数据的所述重叠部分重叠1比特。
15.一种用于并行地将根据霍夫曼码编码的数据解码的方法,所述方法包括:
在保持寄存器中保持主数据输入和超前输入;
向多个即M个半解码器提供所述主数据输入和所述超前输入的连续的重叠部分,所述半解码器包括所述霍夫曼码的频繁出现的码字的子集;
当没有遇到在所述半解码器中不可获取的码字时,并行地在单个时钟周期中将所述频繁出现的码字中的M个解码;
当遇到在所述半解码器中不可获取的码字时,将意图用于所述半解码器中的对应的一个的输入施加到以三态内容可寻址存储器实现的全解码器的输入,该意图用于所述半解码器中的对应的一个的输入包括在所述半解码器中的所述对应的一个中不可获取的所述码字,所述全解码器包括所述霍夫曼码的全部码字。
16.如权利要求15所述的方法,进一步包括以比所述三态内容可寻址存储器更便宜的技术实现所述半解码器。
17.如权利要求15所述的方法,进一步包括以静态随机存取存储器实现所述半解码器。
18.如权利要求15所述的方法,进一步包括以动态随机存取存储器实现所述半解码器。
19.如权利要求15所述的方法,进一步包括在超前寄存器中保持所述主数据输入,而所述超前输入绕过所述超前寄存器。
20.如权利要求15所述的方法,其中,使用复用器实现所述将意图用于所述半解码器中的所述对应的一个的所述输入施加到所述全解码器的所述输入。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/672,135 | 2015-03-28 | ||
US14/672,135 US9252805B1 (en) | 2015-03-28 | 2015-03-28 | Parallel huffman decoder |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106027066A true CN106027066A (zh) | 2016-10-12 |
CN106027066B CN106027066B (zh) | 2019-06-04 |
Family
ID=55175063
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610181740.9A Expired - Fee Related CN106027066B (zh) | 2015-03-28 | 2016-03-28 | 用于解码的并行霍夫曼数据解码器、设计结构和方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US9252805B1 (zh) |
CN (1) | CN106027066B (zh) |
DE (1) | DE102016204602B4 (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106788451A (zh) * | 2016-11-30 | 2017-05-31 | 郑州云海信息技术有限公司 | 一种哈夫曼解码方法及其装置 |
CN107294539A (zh) * | 2017-05-23 | 2017-10-24 | 浙江大学 | 一种准动态霍夫曼硬件编码器及编码方法 |
CN107404654A (zh) * | 2017-08-23 | 2017-11-28 | 郑州云海信息技术有限公司 | 一种jpeg图像解压缩方法、装置及平台 |
CN113271107A (zh) * | 2020-09-30 | 2021-08-17 | 北京清微智能科技有限公司 | 一种Huffman硬件解码方法 |
CN113839678A (zh) * | 2021-08-31 | 2021-12-24 | 山东云海国创云计算装备产业创新中心有限公司 | 一种哈夫曼解码系统、方法、设备及计算机可读存储介质 |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9832287B2 (en) * | 2014-03-28 | 2017-11-28 | Comtech Ef Data Corp. | System and method for dynamic Huffman decoding |
US10034407B2 (en) * | 2016-07-22 | 2018-07-24 | Intel Corporation | Storage sled for a data center |
US9825649B1 (en) * | 2016-09-29 | 2017-11-21 | Intel Corporation | Efficient huffman decoder improvements |
US9906239B1 (en) * | 2017-06-28 | 2018-02-27 | Ati Technologies Ulc | GPU parallel huffman decoding |
US10361715B1 (en) * | 2018-06-04 | 2019-07-23 | Amazon Technologies, Inc. | Decompression circuit |
US10862513B2 (en) * | 2019-01-16 | 2020-12-08 | Fungible, Inc. | Data processing unit having hardware-based parallel variable-length codeword decoding |
US11561797B2 (en) * | 2019-08-19 | 2023-01-24 | Ati Technologies Ulc | Decompression engine for decompressing compressed input data that includes multiple streams of data |
CN113839679B (zh) * | 2021-08-31 | 2023-09-15 | 山东云海国创云计算装备产业创新中心有限公司 | 一种哈夫曼解码系统、方法、设备及计算机可读存储介质 |
US20230281164A1 (en) * | 2022-03-03 | 2023-09-07 | Fotonation Limited | Data decompression apparatus |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101036298A (zh) * | 2004-08-06 | 2007-09-12 | 模拟装置公司 | 静态赫夫曼解码的系统和方法 |
US20100079315A1 (en) * | 2008-04-07 | 2010-04-01 | Mediatek Inc. | Huffman decoding method and apparatus |
CN101729076A (zh) * | 2008-10-22 | 2010-06-09 | 安凯(广州)软件技术有限公司 | 一种基于非完备码表解析码长的哈夫曼解码方法 |
CN102255617A (zh) * | 2010-05-19 | 2011-11-23 | 鸿富锦精密工业(深圳)有限公司 | 哈夫曼树的存储方法及利用数组进行数据解码的方法 |
CN102422540A (zh) * | 2009-05-20 | 2012-04-18 | 日本电信电话株式会社 | 编码方法、编码装置、解码方法、解码装置、程序以及记录介质 |
CN102780493A (zh) * | 2011-05-09 | 2012-11-14 | 晨星软件研发(深圳)有限公司 | 霍夫曼解码器及其解码方法 |
US8412533B2 (en) * | 2009-06-19 | 2013-04-02 | Samsung Electronics Co., Ltd. | Context-based arithmetic encoding apparatus and method and context-based arithmetic decoding apparatus and method |
US20140375482A1 (en) * | 2013-06-20 | 2014-12-25 | International Business Machines Corporation | High throughput decoding of variable length data symbols |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5821885A (en) * | 1994-07-29 | 1998-10-13 | Discovision Associates | Video decompression |
JP3136796B2 (ja) * | 1992-09-24 | 2001-02-19 | ソニー株式会社 | 可変長符号デコーダ |
US5663725A (en) * | 1995-11-08 | 1997-09-02 | Industrial Technology Research Institute | VLC decoder with sign bit masking |
US5757295A (en) * | 1995-12-28 | 1998-05-26 | Philips Electronics North America Corporation | Variable length decoder with enhanced throughput due to parallel processing of contiguous code words of identical type |
JP3304745B2 (ja) * | 1996-03-11 | 2002-07-22 | 富士ゼロックス株式会社 | 可変長符号復号化器 |
US5841380A (en) * | 1996-03-29 | 1998-11-24 | Matsushita Electric Corporation Of America | Variable length decoder and method for decoding two codes per clock cycle |
US6311258B1 (en) * | 1997-04-03 | 2001-10-30 | Canon Kabushiki Kaisha | Data buffer apparatus and method for storing graphical data using data encoders and decoders |
US6043765A (en) | 1997-09-26 | 2000-03-28 | Silicon Engineering, Inc. | Method and apparatus for performing a parallel speculative Huffman decoding using both partial and full decoders |
US6636222B1 (en) | 1999-11-09 | 2003-10-21 | Broadcom Corporation | Video and graphics system with an MPEG video decoder for concurrent multi-row decoding |
JP2000323993A (ja) * | 1999-05-11 | 2000-11-24 | Mitsubishi Electric Corp | Mpeg1オーディオレイヤiii復号処理装置およびコンピュータをmpeg1オーディオレイヤiii復号処理装置として機能させるためのプログラムを記録したコンピュータ読取可能な記録媒体 |
US6603413B2 (en) * | 2001-02-07 | 2003-08-05 | Canon Kabushiki Kaisha | Variable-length decoding apparatus and method |
US7283591B2 (en) * | 2003-03-28 | 2007-10-16 | Tarari, Inc. | Parallelized dynamic Huffman decoder |
US7736946B2 (en) * | 2007-02-07 | 2010-06-15 | Honeywell International Inc. | System and method for sealing a MEMS device |
US20130054886A1 (en) | 2010-01-25 | 2013-02-28 | Idatamap Pty. Ltd. | Content addressable memory (cam) |
US8456331B2 (en) | 2011-04-15 | 2013-06-04 | Cavium, Inc. | System and method of compression and decompression |
-
2015
- 2015-03-28 US US14/672,135 patent/US9252805B1/en not_active Expired - Fee Related
-
2016
- 2016-03-21 DE DE102016204602.0A patent/DE102016204602B4/de active Active
- 2016-03-28 CN CN201610181740.9A patent/CN106027066B/zh not_active Expired - Fee Related
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101036298A (zh) * | 2004-08-06 | 2007-09-12 | 模拟装置公司 | 静态赫夫曼解码的系统和方法 |
US20100079315A1 (en) * | 2008-04-07 | 2010-04-01 | Mediatek Inc. | Huffman decoding method and apparatus |
CN101729076A (zh) * | 2008-10-22 | 2010-06-09 | 安凯(广州)软件技术有限公司 | 一种基于非完备码表解析码长的哈夫曼解码方法 |
CN102422540A (zh) * | 2009-05-20 | 2012-04-18 | 日本电信电话株式会社 | 编码方法、编码装置、解码方法、解码装置、程序以及记录介质 |
US8412533B2 (en) * | 2009-06-19 | 2013-04-02 | Samsung Electronics Co., Ltd. | Context-based arithmetic encoding apparatus and method and context-based arithmetic decoding apparatus and method |
CN102255617A (zh) * | 2010-05-19 | 2011-11-23 | 鸿富锦精密工业(深圳)有限公司 | 哈夫曼树的存储方法及利用数组进行数据解码的方法 |
CN102780493A (zh) * | 2011-05-09 | 2012-11-14 | 晨星软件研发(深圳)有限公司 | 霍夫曼解码器及其解码方法 |
US20140375482A1 (en) * | 2013-06-20 | 2014-12-25 | International Business Machines Corporation | High throughput decoding of variable length data symbols |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106788451A (zh) * | 2016-11-30 | 2017-05-31 | 郑州云海信息技术有限公司 | 一种哈夫曼解码方法及其装置 |
CN106788451B (zh) * | 2016-11-30 | 2021-03-09 | 苏州浪潮智能科技有限公司 | 一种哈夫曼解码方法及其装置 |
CN107294539A (zh) * | 2017-05-23 | 2017-10-24 | 浙江大学 | 一种准动态霍夫曼硬件编码器及编码方法 |
CN107294539B (zh) * | 2017-05-23 | 2020-04-28 | 浙江大学 | 一种准动态霍夫曼硬件编码器及编码方法 |
CN107404654A (zh) * | 2017-08-23 | 2017-11-28 | 郑州云海信息技术有限公司 | 一种jpeg图像解压缩方法、装置及平台 |
CN107404654B (zh) * | 2017-08-23 | 2020-09-18 | 苏州浪潮智能科技有限公司 | 一种jpeg图像解压缩方法、装置及平台 |
CN113271107A (zh) * | 2020-09-30 | 2021-08-17 | 北京清微智能科技有限公司 | 一种Huffman硬件解码方法 |
CN113271107B (zh) * | 2020-09-30 | 2024-04-26 | 北京清微智能科技有限公司 | 一种Huffman硬件解码方法 |
CN113839678A (zh) * | 2021-08-31 | 2021-12-24 | 山东云海国创云计算装备产业创新中心有限公司 | 一种哈夫曼解码系统、方法、设备及计算机可读存储介质 |
CN113839678B (zh) * | 2021-08-31 | 2023-11-03 | 山东云海国创云计算装备产业创新中心有限公司 | 一种哈夫曼解码系统、方法、设备及计算机可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
US9252805B1 (en) | 2016-02-02 |
DE102016204602A1 (de) | 2016-09-29 |
CN106027066B (zh) | 2019-06-04 |
DE102016204602B4 (de) | 2024-05-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106027066A (zh) | 用于解码的并行霍夫曼数据解码器、设计结构和方法 | |
US10972126B2 (en) | Data compression and storage | |
TWI591500B (zh) | 依據輸入區塊類型使用動態散列演算法之硬體資料壓縮器 | |
TWI606699B (zh) | 建構並使用動態初期霍夫曼編碼表之硬體資料壓縮器 | |
KR102165134B1 (ko) | 상태 기계 엔진에서 상태 벡터 데이터를 사용하기 위한 방법들 및 시스템들 | |
TW538599B (en) | A method of performing Huffman decoding | |
TW201706998A (zh) | 直接對lz77引擎輸出之標記進行霍夫曼編碼程序之硬體資料壓縮器 | |
KR20150037937A (ko) | 상태 기계 엔진에 의해 수신된 데이터를 핸들링하기 위한 방법들 및 시스템들 | |
JP2014507732A (ja) | グループ形式を用いた可変長データの改良型符号化および復号 | |
TWI598756B (zh) | 硬體資料壓縮器及其方法 | |
US10230392B2 (en) | Techniques for parallel data decompression | |
US20230153111A1 (en) | Decompression Engine for Decompressing Compressed Input Data that Includes Multiple Streams of Data | |
US11424761B2 (en) | Multiple symbol decoder | |
Yuan et al. | Test data compression for system-on-a-chip using count compatible pattern run-length coding | |
US20080127006A1 (en) | Real-Time Data Stream Decompressor | |
CN1870131B (zh) | 字符串检索电路和字符串检索方法 | |
Vohra et al. | Optimal selective count compatible runlength encoding for SOC test data compression | |
Culpepper et al. | Revisiting bounded context block‐sorting transformations | |
JP2022550042A (ja) | 圧縮データを生成するための最長一致処理を伴う圧縮システム | |
Ledwon | Design of FPGA-based accelerators for Deflate compression and decompression using high-level synthesis | |
JP5149454B1 (ja) | Ykm形式圧縮プログラムを記録した記録媒体 | |
Pence et al. | A Tiled-Table Convention for Compressing FITS Binary Tables | |
Wei et al. | Efficient VLSI Huffman encoder implementation and its application in high rate serial data encoding | |
Udayashekar | High-throughput, lossless data compression and decompression on FPGAs | |
Huang et al. | Hardware design for accelerating PNG decode |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20190604 |