CN107534446B - 用于高带宽lz77解压缩的asic块 - Google Patents
用于高带宽lz77解压缩的asic块 Download PDFInfo
- Publication number
- CN107534446B CN107534446B CN201680020551.1A CN201680020551A CN107534446B CN 107534446 B CN107534446 B CN 107534446B CN 201680020551 A CN201680020551 A CN 201680020551A CN 107534446 B CN107534446 B CN 107534446B
- Authority
- CN
- China
- Prior art keywords
- word
- symbol
- stage
- distance
- symbols
- 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.)
- Active
Links
Images
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/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
- H03M7/3086—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing a sliding window, e.g. LZ77
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
- G06F3/0641—De-duplication techniques
-
- 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/6029—Pipelining
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
公开了具有解压缩块的集成电路。解压缩块被配置为可以包括长度模块(200)和距离模块(800)的流水线。长度模块评估每个符号的长度。距离模块可以解析至少一个长度‑距离对中的距离。长度模块(200)可以包括移位器级(230),该移位器级(230)被配置为存储两个连续字,并且控制符号的滑动窗口,以便提取文字或距离。长度模块(200)可以包括配置成将文字或距离映射到输出流中的位置的映射器级(240)。距离模块(800)可以包括指针替代级(810)和分辨率级(820)。指针替代级(810)被配置为用字或指向先前字的其它指针来替代表示为输出字内的指针的距离。分辨率级(820)被配置为用文字替代其它指针,并输出文字(807)。
Description
背景技术
本公开涉及压缩数据流的解压缩。本公开涉及对具有长度和距离或偏移量、编码的压缩数据的解压缩,诸如LZ77压缩技术。本公开包括解压缩硬件,其被描述为作为片上系统(SOC)的一部分集成到专用集成电路(ASIC)中的功能块。解压缩硬件可以应用于存储在计算机系统的主存储器中的数据的解压缩。解压缩硬件可以利用现有的硬件组件。解压缩技术适用于软件或混合软件和硬件实施。
LZ77是一种已知的压缩技术,其通过将输入流内重复的字节串替代为相同字节的先前实例的引用或指针来从字节流中移除冗余。引用被编码为<length,distance>对,其中长度是要替代的字节数目,距离是在先前实例发生的输入流中先前的字节数目。LZ77压缩的输出是表示文字字节或<length,distance>对的符号序列。
LZ77技术适合于顺序解压缩,因为任何符号产生的字节可能取决于任何先前符号产生的字节。解压缩过程的顺序本质对可以执行解压缩的速率施加限制。
估计在软件中实施的LZ77解压缩可以实现约lGB/s。
一些操作系统提供使用主存储器的一部分作为交换设备的特征。例如,在要存储的数据量大并且期望限制主存储器的大小的情况下,需要压缩数据以存储在交换设备中。交换设备用于存储最近未使用的数据。交换设备可用于压缩和存储最近还未被使用的数据,因为数据在不久的将来更不可能被使用。随后,当页面故障发生时,通过解压缩处理的方式从交换设备获得所需的数据。期望尽可能快地进行这样的解压缩处理,以避免引发将否定使用压缩来在主存储器中存储数据的好处的重大损失。
已经设计了各种方法来加速解压缩,包括使用LZ77压缩技术对已经被压缩的数据的解压缩。在一个示例中,解码器被配置为一次解码多达4个码字,保证4F符号或字节/秒的最小吞吐量,其中F是时钟频率。
然而,为了对保持在主存储器的一部分中的数据进行解压缩,认为有必要获得比已知方法高得多的解压缩速率以及最大化带宽。预期所公开的发明的示例实施例将实现16GB/s的解压缩速率。
发明内容
本发明内容以简化的形式介绍了概念的选择,以提供对本公开的一些方面的基本理解。本发明内容不是对本公开的广泛概述,并且不旨在识别本公开的主要或关键元素或描述本公开的范围。本发明内容只是将本公开的一些概念作为下面提供的具体实施方式的前序。
本公开一般涉及用于将符号流解压缩成原始文字的集成电路和方法。
一个方面是一种集成电路,包括解压缩块,解压缩块接收由M个字中的符号组成的压缩输入流作为输入,每个字最多具有N个符号,其中M和N是正整数,并且所述解压缩块输出由文字数组组成的未压缩的输出流,文字数组是压缩前的原始文字;解压缩块被配置为包括长度模块和距离模块的流水线,长度模块评估每个符号的长度,距离模块解析至少一个长度距离对中的距离;长度模块包括移位器级,移位器级被配置为存储两个连续字,并且根据结束字值控制S个符号的滑动窗口,其中S是正整数,以便提取文字或距离,结束字值表示第一符号的开始和当前符号的结束之间的未压缩字的数目;映射器级,映射器级被配置为接收来自滑动窗口的文字或距离,并使用结束字节值将文字或距离映射到输出流中的位置,结束字节值表示输出流中给定符号结束的绝对位置;距离模块包括指针替代级,指针替换级被配置为用文字或指向先前字的其它指针来替代表示为输出字内的指针的距离;分辨率级,分辨率级被配置为用文字替代其它指针,并且将文字和替代文字输出到未压缩的输出流。
在另一方面,长度模块进一步包括结束值流水线,结束值流水线具有多个级,多个级针对N个符号中的每一个计算结束值,作为在N个符号数的所述组中从第一个符号到第N个符号的累积长度;以及符号位置级,符号位置级将来自以前字的最后一个符号的结束字节加法到每个符号的累积长度,并且将每个结束值分成为结束字节和结束字,以获得所述结束字节值和所述结束字值。
在另一方面,结束值被分成两个相等大小的字段。
在另一方面,结束值流水线中的多个级包括基于较早级加法器的结果来执行累积加法的加法器,其中加法器被分开跨级中的两个或更多个。
在另一方面,移位器级使用结束字值来确定滑动窗口中的剩余位从两个连续字中的第二连续字中读取,并且确定新字需要从先前级被接受。
在另一方面,指针替代级和分辨率级是流水线。
在另一方面,分辨率级中的流水线具有Depth+1级,其中Depth是以字节为单位的字典大小除以16。
在另一方面,分辨率级具有两个步骤,其中在第一步骤中长于预定距离的指针通过在外部存储器中查找而被解析,并且第二步骤解析流水线中的指针。
一个方面是一种对符号的压缩输入流进行解压缩以产生文字的输出流的方法,包括对输入流执行长度操作以产生文字字节和距离数组;执行距离操作以从文字字节和距离数组产生文字数组,其中长度操作包括从符号的输入流接收字,字包括N个符号;执行移位器级,移位器级存储来自所述输入流的两个连续字,并且根据结束字值控制S个符号的滑动窗口,其中S是正整数,以便提取文字或距离,结束字值表示第一符号的开始和当前符号的结束之间的未压缩字的数目;执行映射器级以从滑动窗口接收文字或距离,并使用结束字节值将文字或距离映射到输出流中的位置,结束字节值表示输出流中给定符号结束的绝对位置;其中距离操作包括执行指针替代级来用文字或先前字的其它指针来替代表示为在输出字内的指针的距离;执行分辨率级以用文字替代其它指针;以及基于替代的指针向输出流输出文字数组。
在另一方面,长度操作进一步包括针对N个符号中的每一个计算结束值作为在N个符号的数组中从第一符号到第N个符号的累积长度的;将来自以前字的最后一个符号的结束字节加法到每个符号的累积长度;以及将每个结束值分成结束字节和结束字,以获得结束字节值和结束字值。
从下面的具体实施方法,本公开的方法和系统的适用性的进一步范围将变得显而易见。然而,应当理解的是,具体实施方式和具体示例虽然指出了方法和系统的实施方式,但是仅以说明的方式给出,因为从该具体实施方式中在本文公开的概念的精神和范围内的各种改变和修改对于本领域技术人员将变得显而易见。
本公开的方法和系统的进一步适用范围将变为显而易见。相对于附图描述了这些和其它方面。通过结合附图考虑以下详细描述,可以容易地理解所公开的申请的教导。
附图说明
本公开的这些和其它目的、特征和特性对于本领域的技术人员从以下具体实施方式结合所附权利要求和附图(所有这些都构成本说明书的一部分)研究中将变得更加显而易见。
图1是组成要集成的块的模块的框图;
图2是示出在模块中提供的流水线级的框图;
图3是长度模块的框图;
图4是长度模块中结束值(End_Values)级的框图;
图5是长度模块中的符号定位级的框图;
图6是长度模块中移位器级的框图;
图7是长度模块中的映射器级的框图;
图8是距离模块的框图;
图9是用于解析距离模块中的字内的引用的级的框图;
图10是用于解析对先前字的引用的距离模块中的级的框图;
图11是长度模块的流程图;
图12是距离模块的流程图;
图13是用于将设计转换成可以制造的形式的典型ASIC流程;以及
图14是图示出示例通用计算设备的框图。
本公开的方法和系统的适用性的进一步范围将变得显而易见。附图仅为了说明的目的描绘本发明的实施例。本领域技术人员将从以下讨论中认识到,在不脱离本文所述的本发明的原理的情况下,可以采用本文所示的结构和方法的替换实施例。
具体实施方式
以下描述参照附图。以下描述并不旨在限制范围。相反,范围由所附权利要求限定。
在示例实施例中,计算机系统的主存储器中的交换设备的数据被压缩成4K页。在页面故障的情况下,存储在交换设备中的数据被形成为用于解压缩集成电路的输入流。在示例实施例中,字典可以是256字节。在一个示例性实施例中,公开了一种功能块,其将表示为压缩流中的下一个16个符号的16个符号的数组作为输入,并且产生表示为未压缩流中的下一个16个字节的16个字节的数组作为输出。
本公开不限于16个符号的数组大小。数组大小可以通过例如2的幂来调整,但是可以是任意的宽度。
此外,还可以将输出的大小设置为大于输入的大小。在这种情况下,压缩将导致比输出字节少的输入符号。
用于压缩交换设备的数据的技术是LZ77压缩算法。LZ77是一种无损压缩技术,其产生表示文字字节或<length,distance>对的符号序列作为输出。长度表示被替代的字节数。距离表示在先前实例发生的输入流中先前的字节数目。
例如,序列“AABCBBABC”可以被压缩为:
<len=0,dist=0>
<literal A>
<len=1,dist=1>
<len=0,dist=0>
<literal B>
<len=0,dist=0>
<literal C>
<length=1,dist=2>
<len=1,dist=1>
<len3,dist=5>
在该压缩序列中,最后的长度-距离对意味着从流中较早5个字节的以前序列重复序列ABC。
符号序列有可能具有比距离长的长度。例如,序列“ABABABAB”将被编码为<literal A>,<literal B>,<len=6,dist=2>。
提供长度-距离对和文字的压缩流作为所公开的实施例的输入流。输出流将包含原始的文字序列。用于解压缩的功能块的实施例将从输入流中的16个符号的数组作为输入。
<ASIC的功能块>
图1图示出了功能块100的示例实施例的框图。示例性实施例可以是硬件描述语言的形式,并且特别地是寄存器传送水平(RTL)代码。所公开的方法避免了高度系列化的方法并且显着地加快了解压缩速率。在所公开的方法中,解压缩功能块(IP解压缩集成电路100)被排列为将解压缩划分成长度模块200和距离模块800的流水线。长度模块200执行扩展长度的操作,距离模块800执行解析距离的操作。换句话说,长度模块200处理输入流的长度-距离对中的长度,而距离模块800处理距离。
长度模块200在流水线的级处理之前确定每个符号的字节宽度。长度模块200确定正在处理的当前字中的每个符号的end_byte(结束字节)和end_word(结束字)。此外,距离模块800将距离转换成指针,并且涉及其中将指针解析为新指针的步骤,在最终被解析为文字之前。这些特征有助于对流水线中的处理进行控制,使得能够实现非常高的解压缩速率和最大带宽。
功能块100包括用于控制符号集传送定时的控制输入和输出。in_avail输入和in_ready输出控制将新的符号集传送到功能块100。当在输入流中存在更多符号时,设置in_avail。当流水线准备好为另一符号集时,in_ready被设置。out_avail输出和out_ready输入控制从功能块100中的字节传输。当输出流准备好接受更多的解压缩数据时,out_ready被设置。当数据从流水线可用时,out_avail被设置。
功能块100的实施例可以包括作为片上系统(SOC)的一部分的知识产权(IP)核心。
<流水线>
图2是示出流水线中的高水平的级的框图。功能块100可以被实施为流水线结构。在示例实施例中,功能块接受16个符号的数组作为输入,表示由压缩导致的符号的输入流201中的接下来的16个符号。
级210本身是流水线(以下称为“P”流水线)。P流水线计算16个符号中的每一个的结束值。结束值表示从16符号字中的第一符号的累积长度。流水线在多个级执行此计算。在16符号字的情况下,P流水线有五个级。
级220被称为符号定位级。级220将end_byte从以前字的最后一个符号添加到每个符号的累积长度。然后,级220将结束值与级210分开成end_byte和end_word。end_byte是结束值的位[N:0],指示给定符号结束的输出中的绝对位置(加1mod 16);N是整数,例如3。剩余的位是end_word,其指示在当前16符号压缩字之前,从前16字节符号的结束到完成的未压缩的16字节字的数目。
级230被称为移位器级,包括上移位寄存器230a和下移位寄存器230b。移位器级保存两个连续的16个符号字。滑动窗口提取产生下一个16字节输出字所需的符号,并将提取的符号发送到下一级240。移位器级的逻辑使得随着滑动窗口移动到构成输出字的符号集它可以在两个移位寄存器中与符号重叠。换句话说,在输出字的一部分存在于移位寄存器的末端的情况下,包含两个移位寄存器230a,230b的移位状态使得滑动窗口能够读取经过一个寄存器的末端。
级240被称为映射器级。映射器级从滑动窗口接收符号和end_byte值,并将符号映射到它们输出流中的适当位置,必要时重复符号。映射器级的结果是每个符号只表示一个字节,所有符号都是文字字节或距离(指向较早的需要重复的符号)。
级810是距离模块800中的第一级。级820是距离模块800中的第二级。注意到可以逆转这两个级的次序。
级810本身是流水线(以下称为“E”流水线)。E流水线解析相同输出字中的指针,并包括多个流水线级。此级将指针解析为文字值或先前字的指针。在示例实施例中,E流水线中有四个级。
级820也是流水线(以下称为“F”流水线)。F流水线解析先前输出字的指针。F流水线使用DEPTH+1级流水线解析指针,其中DEPTH表示最大距离除以每个输出字的字节数。对于256字节和16字节输出字的示例字典,F流水线中的级数为17。F流水线的最后级输出文字。
F流水线更新指针,因为引用的字节从流水线的末端离开。替选的方法是将最近的字节保存在数组中,并使用数组中的查找端口来解析指针。后一种方法将需要附加的数组寄存器,控制复杂性和性能降级来解析对数组条目的同时引用。
将从该设计生成的集成电路中的门数目与级数成比例。此外,更多的级数导致延迟的增加。因此,最好使级最小化(硬件复杂度)。级210至810的排列将以最小数目的级完成解压缩过程。因此,图2中的流水线的排列被认为是最优的。
<长度模块-功能排列>
图3图示出了长度模块200的示例实施例的框图。长度模块200通过在流水线中的级集的处理来扩展长度。在该模块中,长度从长度距离对中移除,使它们成为<distance>符号。长度模块200中的第一级本身是流水线(级1:end-value pipeline 210)。除了符号数组201的输入之外,长度模块200将时钟信号、复位信号、in_avail信号和out_ready信号作为输入,并作为输出生成in_ready信号和out_available信号。
在由end_value流水线处理开始之前,宽度计算电路202计算每个数据符号的字节宽度。无效符号为零字节宽度,文字符号为1字节宽度,<length,distance>符号为长度字节宽度。特别地,宽度计算电路202将每个符号的长度插入到每个相应符号的p_end_reg寄存器204中。
长度模块200是流水线,所述流水线包括级1:end_value 210,级2:符号定位220,级3:移位器230和级4:映射器240。长度模块200产生映射到输出流中的相应位置的文字字节或距离作为输出。
图4是图示出长度模块200的级1(210)的框图。在级1中,在流水线级中计算字中的16个符号中的每一个的end_value。end_value表示从1个6符号字中的第一个符号的累积长度。end_values以大约log2(WIDTH)级计算。
特别地,级1流水线210从字的开始(符号0)到字内的每个符号的结尾生成累积长度。因为级1是流水线,所以这个流水线的级被称为子级。
子级零(403)将偶数符号的p_end_reg添加到奇数符号的p_end_reg。
子级1(405)将p_end_reg[1]添加到p_end_reg[2]和p_end_reg[3],将p_end_reg[5]添加到p_end_reg[6]和p_end_reg[7],依此类推。
子级2(407)通过p_end_reg[7]将p_end_reg[3]添加到p_end_reg[4],并通过p_end_reg[15]将p_end_reg[11]添加到p_end_reg[12]。
这继续到其中通过p_end_reg[WIDTH-1]将p_end_reg[WIDTH/2-1]添加到p_end_reg[WIDTH/2]的子级log2(WIDTH)(409)。在这个级之后,每个符号的p_end_reg保存累积长度。
在示例实施例中,为了减小时序压力并使加法器尽可能小,可以在两个相等大小的块中进行添加,同时更重要位的添加发生周期迟。特别地,每个添加操作可以被分成跨2个或更多个流水线级。
例如,结束值可以被分成两个相等大小的字段。在第一流水线子级1中,来自子级零的所有加法在较低位完成,从而保存进位位。在子级1中,子级零的所有加法在高位加上保存的进位位完成。同样在子级1中,子级2的加法在低位上完成。
长度模块200的级1中的end_value流水线的结果是包含累积长度410的每个符号的向量p_end_reg。
图5是图示出了长度模块200中的级2:符号定位220的框图。级2将end_values分开成end_bytes和end_words。得到的end_byte指示给定符号结束的输出流中的绝对位置。end_word指示未压缩的16字节目标字的数目在符号0的开始和当前符号的结尾之间。
在符号定位级,在步骤503,将以前源字的剩余字节偏移量(来自以前字的end_byte[15])添加到(end_value[n])以获得(end_value(new)[n])来将end_bytes与目标字中的绝对字节位置对齐。符号定位级220然后将每个符号的end_val分成end_byte(505)和end_word(507)。假设16符号字,end_byte是end_value的Bits[3:0]。但是,end_byte取决于WIDTH(每个字符的符号数)。对于2次幂宽度,end_byte为log2(WIDTH)。对于非2次幂的宽度,end_byte需要mod(余数)操作。end_word是end_val的剩余位。
最后在步骤509,符号位置级计算目标字之间的边界将在哪里。特别地,通过确定end_word改变的位置来检测目标字之间的边界。
图6是图示出级3:移相器230的框图。在示例实施例中,移位器级230包括移位寄存器610,其保存两个连续的16个符号源字,移位寄存器610的上位字601,以及移位寄存器610的下位字603。滑动窗口选择要传送到映射器240的符号组。在步骤605,滑动窗口从下位字603选择多达WIDTH个符号,但不跨越目标字之间的边界(在符号定位级220中确定的),并且在步骤607将所选择的符号传送到映射器级240。滑动窗口继续选择(步骤609),因为存储在下位字603中的来自第一源字的所有符号被消耗。因为在这个级的符号可以是各种长度,所以连续字之间可能有重叠。滑动窗口移向到上位字的末端。当检测到移位寄存器610的末端时,第二源字移动到下位字603中,并且从符号定位级重新加载新的第二源字。
在移位器230的示例性实施例中,保持每个符号的状态。特别地,除了为每个符号保持的end_word和end_byte值之外,每个符号有三种可能的状态:
a.“完成”:符号的处理已经完成;
b.“非零”:符号的处理尚未完成,并且end_word值不为零;以及
c.“0”:符号的处理尚未完成,并且end_word值为零。
基于在符号定位级220中计算的end_word值,随着字被传送到移位寄存器610的上位字601中,状态被初始化为“0”或“非零”。
下位字603和上位字601中的符号状态可以具有以下性质:移位寄存器610的下位字603以符号零开始并以符号WIDTH-1结尾,在“完成”状态中包含零个或多个符号,随后是“0”状态中的零个或多个符号,随后是“非零”状态中零个或多个的符号。下位字603的最后一个符号将不会转换到“完成”状态。移位寄存器610的上位字601以符号零开始并以符号WIDTH-1结尾,在“0”状态中包含零个或多个符号,随后在“非零”状态下的零个或多个符号。
实施例不限于将状态编码为“0”、“完成”或“非零”,并且可以对状态进行不同地编码,或者可以保持可从符号和相邻符号的end_word,end_byte和状态值导出的附加状态。
用于滑动窗口的符号的选择由符号的状态来控制。下位字603中的符号在处于“0”状态时或紧接在“0”状态的符号之后可被选择在滑动窗口中。在以下情况下,可以将上位字601中的符号选择在滑动窗口中:
下位字603中的最后一个符号处于“0”状态;
上位字601中的符号与在“完成”状态的下位字603中的符号处于相同位置。
上位字601中的符号处于“0”状态,或是紧接在“0”状态之后的符号,或是符号0。
滑动窗可以根据以下条件进行操作。滑动窗口中的第一个符号将是来自不在“完成”状态中的移位寄存器的下位字603的第一个符号。所选择的符号是邻近的:移位寄存器的上位字601的第一个符号紧接在下位字603的最后一个符号之后。存在移位寄存器的下位字603的单个符号,如它不处于“完成”状态的符号0,或者不处于“完成”状态并且紧接在处于“完成”状态的符号之后的另一个符号。该单个符号的位置控制将所选择的符号引导到映射器级240的多路复用器。
在由滑动窗口选择的符号组被传送到映射器级240之后,移位寄存器被更新。如果下位字603的最后一个符号处于“0”状态,或者如果下位字603的最后一个符号的“end_word”值为1,“end_byte”值为0,则移位寄存器前进:上位字601的内容被移动到下位字603,并且上位字601从符号定位级220加载。随着移位寄存器前进时,来自上位字601的符号的状态被修改:如果符号位于滑动窗口并处于“0”状态,或者如果符号在滑动窗口中,并且end_word值为1,end_byte值为0,则符号转换到“完成”状态。如果符号处于“非零”状态,并且滑动窗口的最后一个符号处于“非零”状态,则end_word值递减,并基于end_word的新值更新状态。
如果移位寄存器没有前进,则下位字603中的符号的状态被修改(以类似的方式):如果符号处于“0”状态或符号的end_word值为1并且end_byte值为0,则符号转换到“完成”状态。如果符号处于“非零”状态,并且滑动窗口的最后一个符号处于“非零”状态,则end_word值递减,并基于end_word的新值更新状态。
图7是示出长度模块200的级4:映射器240的框图。映射器240在两个级中被处理,映射器1(710)和映射器2(720)。映射器1(710)构造一个矩阵(mapper_matrix),该矩阵用于控制目标字加载到Mapper2级(720)中。
在步骤711,映射器1级(710)捕获符号作为源符号以及由滑动窗口提取的相关联的end_byte值。在步骤713,end_byte值用于构造矩阵,以将源符号映射到目标符号(输出流中的适当位置处的符号)。映射器2级(720)累加目标符号,直到接收到完整的字。映射器级240的结果是包括文字字节或到要被重复的较早前符号的符号。
<距离模块-功能排列>
流水线中的剩余级在距离模块800中。距离模块800解析距离来自长度模块的距离符号的距离。
距离模块800通过将它们作为指针来解析距离。在一个实施例中,使用指针的技术采取多个步骤,其中在较早的步骤中,通过用新指针替代指针可以解析指针。步骤的次序是这样的,新的指针将在以后再次被解析,并且在最后一步所有的指针都可以解析回文字。这种替代指针而不是使用例如相对距离的技术避免了使用加法器的需要。
图8图示出了距离模块800中的级。在进入级之前,提供转换电路801以将距离转换成包含字节字段和字字段的指针。字节字段表示输出流内的绝对字节位置。字字段表示相对字位置。因此,转换电路801将符号转换为包括文字字节或<word,byte>指针的符号。
距离模块800使用两个流水线级来解析距离。级5(810)解析输出字内的指针。级6(820)解析指向先前输出字的指针。
图9是级5(810)的框图。
级5(810)跨多个流水线插槽来解析相同输出字(例如,字字段=0)内的指针。指针被解析为文字值或指向先前字的指针。级5(810)使用以下级解析指针:
a.子级5-0(801):从符号1到符号0、3至2、5至4、7至6、9至8、11至10、13至12以及15至14的指针被解析。通过将目标符号复制到引用器来解析指针。例如,如果符号1是具有<word=0,byte=0>的指针,则将符号0复制到符号1中。
b.子级5-1(803):从符号2或3到0或1、6或7至4或5、10或11至8或9以及14或15至12或13的指针被解析。
c.子级5-2(805):从符号4至7到0至3以及12至15到8至11的指针被解析。
d.子级5-3(807):从符号8至15至0至7的指针被解析。
因此,级5(810)产生符号,其为具有word>0的文字或指针。
图10是级6(820)的框图。
级6(820)解析对先前输出字的引用。级6(820)是DEPTH+1级流水线,其中DEPTH表示最大距离/16。第6级流水线内的级被称为子级。作为示例,对于最大距离128,DEPTH将为8。在具有256字节的字典的实施例中,将存在17个级。
下一个字被传送(1001)到该级中。在除了最后一个之外的每个子级中,对于每个符号,子级(1011)通过解码符号是否是指针并检查字值来检测符号是否是最终子级中的字的指针。如果是,则子级(1011)基于指针字节值、通过在适当的符号中复用来在最后的子级中用适当的符号来更新其符号。至最后的子级(1017),所有符号都是文字,并作为未压缩字节输出(1020)。
从级6输出的文字可以直接呈现给输出流。
此外,级6使用流水线来随着被指向的字节从流水线的末端离开来更新指针。随后,级6不需要保存数组中最近的字节,及使用数组中的查找端口来解析指针。
<长度模块-操作>
将描述功能块100的操作。该操作表示使用LZ77技术用于压缩的数据的解压缩方法。长度模块200扩展<length,distance>对符号中的长度。
图11是用于扩展长度的长度模块的操作的流程图。图12是用于解析距离的距离模块的操作的流程图。
在图11中,步骤S1101是计算每个数据符号的宽度(以字节为单位)的初步步骤。无效的符号被指派为零字节的宽度。文字符号为1字节宽度。长度距离符号是长度字节宽度。可以从长度距离对中移除长度,使得符号是<distance>。
在步骤S1103中,计算每个数据符号的end_value。end_value表示从字中第一符号的累积长度。
在步骤S1105中,将以前字中的最后一个符号的end_byte添加到结束值,并将所得的结束值分成end_byte和end_word。end_bytes和end_words用于后续步骤中的移位和映射操作的控制。此外,计算目标字之间的边界。
在步骤S1107至S1119中,执行移位操作以将符号一次传送到映射步骤S1121,直到WIDTH个符号。移位操作在执行符号选择时使用滑动窗口。
特别地,在步骤S1107中,移位操作最初获得两个连续的源字,一个新的字和一个旧的字,并且随后将旧的字传送到新的字寄存器,并将一个新的字传送到新的字寄存器。
在步骤S1109中,滑动窗口选择多达WIDTH个符号。由于可以具有不同长度的无效符号和<distance>符号,WIDTH可能会有所不同。随后,滑动窗口可以在选择WIDTH符号时到达从旧字的一部分和新字的一部分读取符号的点。字的末端的检测由end_words控制。在步骤S1111中,提取所选择的符号以传送到映射步骤S1123。在步骤S1113,执行将滑动窗口移动到下一WIDTH符号集合的操作。在移动滑动窗口时,在步骤S1115中,检查end_word以确定是否需要超越本字的末端获得附加符号。重复选择符号的操作。
在步骤S1117,通过将先前的新字移动到旧字寄存器来传送新字,并且在步骤S1119中,如果有更多字,则步骤S1121,将新字传送到新字寄存器。
在步骤S1123,从滑动窗口接收所选择的符号和相关联的end_byte值,并将其映射到输出流中的它们适当的位置。在此步骤之后,符号是文字字节或距离。
<距离模块-操作>
图12是用于操作距离模块800的流程图。如上所述,距离模块800解析距离。通过将它们视为指针来解析距离。该步骤需要多个步骤,在较早的步骤中,通过用不同的指针替代指针可能会“解析”指针。步骤的次序是这样的,新的指针将在以后再次解析,并且在最后一步所有的指针都可以解析回文字。这种替代指针而不是使用例如相对距离的技术避免了使用加法步骤的需要。
在步骤S1201中,将距离转换成包含字节字段和字字段的指针。结果符号是文字字节或<word,byte>指针。字节字段表示输出流内的绝对字节位置。字字段表示相对字位置。
在步骤S1203中,相同输出字内的指针被解析为文字字节或指向先前字的指针。
在步骤S1205中,解析先前字的指针,直到所有符号都是文字。
<专用集成电路设计流程>
本公开涉及执行解压缩的功能块,特别是用于RTL代码水平的规范,被集成到集成电路(ASIC)中。集成电路具有用于片上系统(SOC)的IP核中的预期应用,特别是用于在计算机系统中执行主存储器的硬件加速压缩/解压缩。在这种情况下,工业标准ASIC流程适用于制造本公开。
本公开适用于RTL中的编码。功能块的一个版本已在Verilog RTL中实施。如本领域已知的,Verilog RTL,以及其它硬件描述语言,使用通用计算机运行。图13是图示出通用ASIC流程的流程图。在本公开的情况下,假设已经执行了规范(S1)、高层设计(S2)和低层设计(S3)的步骤。RTL编码(S4)、模拟/验证(S5,S7)、RTL合成(S6)以及布局和布线(S8)的步骤也可以使用通用计算机来执行。最终制造步骤(S9)在真实环境中执行。RTL合成(S6)步骤产生网表。位置和路由工具采用该网表,并产生用于ASIC文件的制造。
<替代实施例>
上述实施例假定具有16个符号的字。然而,本发明不限于处理16个符号字的功能块。功能块100可以被修改为处理字中的两次幂符号。可以使用更多数目的流水线级来实现更大数目的符号。可以通过调整end_byte和end_word的生成来适应非二次幂的符号。
也可以修改功能块100以产生比输入更宽的输出。在这种情况下,将根据输入宽度来设计直到并包括移位器级230a,230b的级。剩余的级将被设计为输出宽度。
流水线中的最后级820可以延伸到多个步骤,以便在较长距离处解析字的指针。这可以通过在RAM中查找较长距离的字指针(例如,在大于预定距离的距离处)来实现。第二步可以在上述F流水线的级完成。
<计算机系统实现>
本文描述的装置和技术涉及用于在硬件中解压缩的专用集成电路中的功能块的设计。然而,本领域普通技术人员将理解,功能块中使用的用于解压缩的技术可应用于其它形式的实施,例如在软件或固件中。
图14是示出例如根据图11和图12中的方法来执行解压缩技术的示例性通用计算设备1400的框图。在非常基本的配置1401中,计算设备1400通常包括一个或多个处理器1410和系统存储器1420。存储器总线1430可以用于在处理器1410和系统存储器1420之间的通信。
根据所需的配置,处理器1410可以是任何类型的,包括但不限于微处理器(μP)、微控制器(μC),数字信号处理器(DSP)或其任何组合。处理器1410可以包括一个多级缓存,例如一级缓存1411和二级缓存1412,处理器核心1413和寄存器1414。处理器核心1413可以包括算术逻辑单元(ALU)、浮点单元(FPU)、数字信号处理核心(DSP Core)或其任何组合。存储器控制器1415也可以与处理器1410一起使用,或者在一些实施中,存储器控制器1415可以是处理器1410的内部部分。
根据期望的配置,系统存储器1420可以是任何类型的,包括但不限于易失性存储器(诸如RAM)、非易失性存储器(例如ROM、闪速存储器等)或其任何组合。系统存储器1420通常包括操作系统1421、一个或多个应用1422和程序数据1424。应用1422包括解压缩算法1423。如上所述,程序数据1424包括压缩数据1425。在一些实施例中,应用1422可以被布置为与操作系统1421上的程序数据1424一起操作。该基本配置在图1中由虚线1401内的那些部件示出。
计算设备1400可以具有附加特征或功能,以及用于促进基本配置1401和任何所需设备和接口之间的通信的附加接口。例如,可以使用总线/接口控制器1440来促进基本配置1401和经由存储接口总线1441的一个或多个数据存储设备1450之间的通信。数据存储设备1450可以是可移除存储设备1451、不可移除存储设备1452或其组合。可移除存储和不可移除存储设备的示例包括诸如软盘驱动器和硬盘驱动器(HDD)的磁盘设备,诸如光盘(CD)驱动器或数字通用盘(DVD)驱动器的光盘驱动器,固态驱动器(SSD)和磁带机等等。示例性计算机存储介质可以包括以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据的信息的、在任何方法或技术中实施的易失性和非易失性、可移动和不可移动介质。
系统存储器1420,可移除存储器1451和不可移除存储器1452都是计算机存储介质的示例。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪速存储器或其它存储器技术,CD-ROM、数字通用盘(DVD)或其它光学存储器,磁带盒、磁带、磁盘存储器或其它磁存储设备,或可用于存储所期望信息并且可被计算设备1400访问的任何其它介质。任何这样的计算机存储介质可以是设备1400的一部分。
计算设备1400还可以包括用于促进从各种接口设备(例如,输出接口、外围接口和通信接口)经由总线/接口控制器1440到基本配置1401的通信的接口总线1442。示例性输出设备1460包括图形处理单元1461和音频处理单元1462,其可被配置为经由一个或多个A/V端口1463与诸如显示器或扬声器的各种外部设备进行通信。示例性外围接口1470包括串行接口控制器1471或并行接口控制器1472,其可以被配置为经由一个或多个I/O端口1473与诸如输入设备(例如,键盘、鼠标、笔、语音输入设备、触摸输入设备等)或其它外围设备(例如,打印机、扫描仪等)的外部设备进行通信。示例性通信设备1480包括网络控制器1481,其可以被排列以促进经由一个或多个通信端口1482通过网络通信与一个或多个其它计算设备1490通信。通信连接是通信介质的一个示例。通信介质通常可以通过计算机可读指令、数据结构、程序模块或诸如载波或其它传输机制的调制数据信号中的其它数据来体现,并且包括任何信息传递介质。“调制数据信号”可以是以对信号中的信息进行编码的方式设置或改变的其特性集中的一个或多个的信号。作为示例而非限制,通信介质可以包括诸如有线网络或直接有线连接的有线介质,以及诸如声学、射频(RF)、红外(IR)和其它无线介质的无线介质。这里使用的术语计算机可读介质可以包括存储介质和通信介质两者。
计算设备1400可以被实施为小型便携式(或移动式)电子设备的一部分,诸如蜂窝电话、个人数字助理(PDA)、个人媒体播放器设备、无线web表设备、个人耳机设备、专用设备或包括上述任何功能的混合设备。计算设备1400也可以实施为包括膝上型计算机和非膝上型计算机配置的个人计算机。
在系统方面的硬件和软件实施之间几乎没有区别;硬件或软件的使用通常是(但不总是,在某些情况下,硬件和软件之间的选择可能变得重要),表示成本与效率折衷的设计选择。虽然上述功能块100用于硬件实施,但优选的载体(例如,硬件、软件和/或固件)将随着部署过程和/或系统和/或其它技术的场境而变化。例如,如果实施者确定速度和准确性是至关重要的,则实施者可以主要选择硬件和/或固件载体;如果灵活性至关重要,实施者可以主要选择软件实施;或者,再次替换地,实施者可以选择硬件、软件和/或固件的某些组合。
上述详细描述经由使用框图、流程图和/或示例来阐述设备和/或过程的各种实施例。只要这些框图、流程图和/或示例包含一个或多个功能和/或操作,本领域技术人员将会理解,可以通过各种硬件、软件、固件或其实际上的任何组合单独地和/或共同地进行实施这些框图、流程图或示例内的每个功能和/或操作。在一个实施例中,本文描述的主题的几个部分可以通过专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)或其它集成格式来实施。然而,本领域技术人员将认识到,公开的实施例的一些方面整体或部分的可以等同地实施在集成电路中,作为在一个或多个计算机上运行的一个或多个计算机程序(例如,作为一个或多个计算机系统上运行的一个或多个程序),作为在一个或多个处理器上运行的一个或多个程序(例如,作为在一个或多个微处理器上运行的一个或多个程序),作为固件或其几乎任何组合,以及根据本公开,设计电路和/或为软件和/或固件编写代码将是本领域技术人员的技能范围内的。此外,本领域技术人员将理解,本文描述的主题的机制能够作为多种形式的程序产品分发,并且无论用于实际执行分发的信号承载介质的具体类型,本文描述的主题的说明性实施例都也可应用。信号承载介质的示例包括但不限于以下:
a.诸如软盘、硬盘驱动器、压缩光盘(CD)、数字视频盘(DVD)、数字磁带、计算机存储器等的可记录型介质;以及
b.诸如数字和/或模拟通信介质(例如,光纤电缆、波导、有线通信链路、无线通信链路等)的传输类型介质。
本领域技术人员将认识到,在本领域中以本文所阐述的方式描述设备和/或过程是常见的,并且此后使用工程实践来将这种所描述的设备和/或过程集成到数据处理系统中。也就是说,本文所描述的设备和/或过程的至少一部分可以经由合理的实验量被集成到数据处理系统中。本领域技术人员将认识到,典型的数据处理系统通常包括以下的一个或多个:系统单元外壳、视频显示设备、诸如易失性和非易失性存储器的存储器、诸如微处理器和数字信号处理器的处理器、诸如操作系统、驱动器、图形用户界面和应用程序的计算实体、诸如触摸板或屏幕的一个或多个交互设备和/或包括反馈回路和控制电动机的控制系统(例如,用于感测位置和/或速度的反馈;用于移动和/或调整部件和/或数量的控制电动机)。典型的数据处理系统可以利用任何合适的商业可用组件(诸如通常在数据计算/通信和/或网络计算/通信系统中找到的组件)来实施。
对于本文中基本上任何复数和/或单数术语的使用,本领域技术人员可以从复数形式转换为单数形式和/或从单数形式转换为复数形式,如适用于场境和/或应用。为了清楚起见,可以在此明确阐述各种单数/复数排列。
尽管本文已经公开了各种方面和实施例,但是其它方面和实施例对于本领域技术人员将是显而易见的。本文公开的各个方面和实施例是为了说明的目的而不是限制性的,其真实范围和精神由所附权利要求指出。
Claims (10)
1.一种集成电路,包括:
解压缩块,所述解压缩块接收由M个字中的符号组成的压缩输入流(201)作为输入,每个字最多具有N个符号,其中M和N是正整数,并且所述解压缩块输出由文字数组组成的未压缩的输出流,所述文字数组是压缩前的原始文字;
所述解压缩块被配置为包括长度模块(200)、转换电路(801)和距离模块(800)的流水线,所述长度模块评估每个符号的长度,所述转换电路(801)将距离转换成指针,并且所述距离模块将所述指针解析成文字;
所述长度模块(200)包括:
移位器级(230),所述移位器级(230)被配置为存储两个连续字,并且根据结束字值控制S个符号的滑动窗口(605-609),其中S是正整数,以便提取文字或距离,所述结束字值表示第一符号的开始和当前符号的结束之间的未压缩字的数目;
映射器级(240),所述映射器级(240)被配置为接收来自所述滑动窗口的所述文字或距离(711),并使用结束字节值将所述文字或距离映射到所述输出流中的位置,所述结束字节值表示所述输出流中给定符号结束的绝对位置;
所述距离模块(800)包括:
指针替代级(810),所述指针替代级(810)被配置为用文字或指向先前字的其它指针来替代表示为输出字内的指针的距离;
分辨率级(820),所述分辨率级(820)被配置为用文字替代指向先前字的所述其它指针,并且将文字和替代文字输出到所述未压缩的输出流(807)。
2.根据权利要求1所述的集成电路,其中所述长度模块进一步包括:
结束值流水线,所述结束值流水线具有多个级,所述多个级针对所述N个符号中的每一个计算结束值,作为在N个符号的所述数组中从第一个符号到第N个符号的累积长度;以及
符号位置级,所述符号位置级将来自以前字的最后一个符号的结束字节添加到每个符号的所述累积长度,并且将每个结束值分成为结束字节和结束字,以获得所述结束字节值和所述结束字值。
3.根据权利要求2所述的集成电路,其中所述结束值被分成两个相等大小的字段。
4.根据权利要求3所述的集成电路,其中,所述结束值流水线中的所述多个级包括基于较早级加法器的结果来执行累积加法的加法器,其中加法器被分成跨所述级中的两个或更多个。
5.根据权利要求1所述的集成电路,其中所述移位器级使用所述结束字值,确定所述滑动窗口中的剩余位从所述两个连续字中的第二连续字中读取,并且确定新字需要从先前级被接受。
6.根据权利要求1所述的集成电路,其中所述指针替代级和所述分辨率级是流水线。
7.根据权利要求6所述的集成电路,其中所述分辨率级中的所述流水线具有Depth+1级,其中Depth是以字节为单位的字典大小除以16。
8.根据权利要求1所述的集成电路,其中所述分辨率级具有两个步骤,其中在第一步骤中长于预定距离的指针通过在外部存储器中查找而被解析,并且在第二步骤中指针在流水线中被解析。
9.一种对符号的压缩输入流进行解压缩以产生文字的输出流的方法,所述方法包括:
对所述输入流执行长度操作以产生文字字节和距离数组(200);
执行转换操作以将距离转换成指针;
执行距离操作以从所述文字字节和距离数组产生文字数组(800),
其中所述长度操作(200)包括:
接收来自所述符号的输入流的字,所述字包括N个符号(201);
执行移位器级,所述移位器级存储来自所述输入流的两个连续字,并且根据结束字值控制S个符号的滑动窗口,其中S是正整数,以便提取文字或距离,所述结束字值表示第一符号的开始和当前符号的结束之间的未压缩字的数目(S1117);
执行映射器级以接收来自所述滑动窗口的所述文字或距离,并使用结束字节值将所述文字或距离映射到所述输出流中的位置,所述结束字节值表示所述输出流中给定符号结束的绝对位置(S1123);
其中所述距离操作(800)包括:
执行指针替代级来用文字或指向先前字的其它指针来替代表示为在输出字内的指针的距离(S1203);
执行分辨率级以用文字替代所述其它指针(S1205);以及
基于所替代的指针将文字数组输出到所述输出流(807)。
10.根据权利要求9所述的方法,其中所述长度操作进一步包括:
针对所述N个符号中的每一个计算结束值作为在N个符号的所述数组中从第一个符号到第N个符号的累积长度;
将来自以前字的最后一个符号的结束字节添加到每个符号的所述累积长度;以及
将每个结束值分成结束字节和结束字,以获得所述结束字节值和所述结束字值。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/702,420 | 2015-05-01 | ||
US14/702,420 US9287893B1 (en) | 2015-05-01 | 2015-05-01 | ASIC block for high bandwidth LZ77 decompression |
PCT/US2016/028630 WO2016178826A1 (en) | 2015-05-01 | 2016-04-21 | Asic block for high bandwidth lz77 decompression |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107534446A CN107534446A (zh) | 2018-01-02 |
CN107534446B true CN107534446B (zh) | 2020-09-22 |
Family
ID=55450264
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680020551.1A Active CN107534446B (zh) | 2015-05-01 | 2016-04-21 | 用于高带宽lz77解压缩的asic块 |
Country Status (3)
Country | Link |
---|---|
US (1) | US9287893B1 (zh) |
CN (1) | CN107534446B (zh) |
WO (1) | WO2016178826A1 (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9614544B2 (en) * | 2015-03-27 | 2017-04-04 | Intel Corporation | Systems, methods, and apparatuses for decompression using hardware and software |
US10958414B2 (en) | 2016-02-23 | 2021-03-23 | Google Llc | Clock period randomization for defense against cryptographic attacks |
US10120581B2 (en) | 2016-03-30 | 2018-11-06 | Qualcomm Incorporated | Generating compressed data streams with lookback pre-fetch instructions for pre-fetching decompressed data from a lookback buffer |
US11188338B2 (en) * | 2019-06-13 | 2021-11-30 | Fungible, Inc. | Context value retrieval prior to or parallel with expansion of previous symbol for context-decoding in range decoder |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101331449A (zh) * | 2005-10-20 | 2008-12-24 | 高通股份有限公司 | 用于可缩放可编程的循环式缓冲器的指针计算方法及系统 |
CN100591089C (zh) * | 2008-09-03 | 2010-02-17 | 广西师范大学 | 一种jpeg图像的无损压缩与解压缩方法 |
US8456331B2 (en) * | 2011-04-15 | 2013-06-04 | Cavium, Inc. | System and method of compression and decompression |
CN103532984A (zh) * | 2013-11-01 | 2014-01-22 | 中国联合网络通信集团有限公司 | websocket协议的数据传输方法、设备和系统 |
CN104113345A (zh) * | 2013-04-16 | 2014-10-22 | 晨星半导体股份有限公司 | 解压缩电路与相关的解压缩方法 |
CN104300990A (zh) * | 2013-03-15 | 2015-01-21 | 英特尔公司 | 用于高速高度压缩lz77令牌化的并行装置和用于紧缩压缩的霍夫曼编码 |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5532694A (en) * | 1989-01-13 | 1996-07-02 | Stac Electronics, Inc. | Data compression apparatus and method using matching string searching and Huffman encoding |
US5521597A (en) | 1993-08-02 | 1996-05-28 | Mircosoft Corporation | Data compression for network transport |
US5525982A (en) * | 1994-04-15 | 1996-06-11 | International Business Machines Corporation | Method and means for character string pattern matching for compression and the like using minimal cycles per character |
US6002411A (en) | 1994-11-16 | 1999-12-14 | Interactive Silicon, Inc. | Integrated video and memory controller with data processing and graphical processing capabilities |
US6145069A (en) | 1999-01-29 | 2000-11-07 | Interactive Silicon, Inc. | Parallel decompression and compression system and method for improving storage density and access speed for non-volatile memory and embedded memory devices |
US6262675B1 (en) | 1999-12-21 | 2001-07-17 | International Business Machines Corporation | Method of compressing data with an alphabet |
US6883037B2 (en) | 2001-03-21 | 2005-04-19 | Microsoft Corporation | Fast data decoder that operates with reduced output buffer bounds checking |
GB0213687D0 (en) * | 2002-06-14 | 2002-07-24 | Ibm | Multi-byte lempel-ziv 1 (LZ1) decompression |
US8106799B1 (en) | 2009-03-23 | 2012-01-31 | Marvell International Ltd. | Data compression and decompression using parallel processing |
US8350732B2 (en) * | 2011-05-11 | 2013-01-08 | Cavium, Inc. | Compression with adjustable quality/bandwidth capability |
GB2513987B (en) * | 2013-03-15 | 2016-01-06 | Intel Corp | Parallel apparatus for high-speed, highly compressed LZ77 tokenization and huffman encoding for deflate compression |
TWI498891B (zh) | 2013-04-02 | 2015-09-01 | Mstar Semiconductor Inc | 解壓縮電路與相關的壓縮方法與解壓縮方法 |
US8947270B2 (en) | 2013-06-29 | 2015-02-03 | Intel Corporation | Apparatus and method to accelerate compression and decompression operations |
US8933824B1 (en) | 2013-08-28 | 2015-01-13 | International Business Machines Corporation | Hardware decompression of deflate encoded data with multiple blocks |
-
2015
- 2015-05-01 US US14/702,420 patent/US9287893B1/en not_active Expired - Fee Related
-
2016
- 2016-04-21 CN CN201680020551.1A patent/CN107534446B/zh active Active
- 2016-04-21 WO PCT/US2016/028630 patent/WO2016178826A1/en active Application Filing
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101331449A (zh) * | 2005-10-20 | 2008-12-24 | 高通股份有限公司 | 用于可缩放可编程的循环式缓冲器的指针计算方法及系统 |
CN100591089C (zh) * | 2008-09-03 | 2010-02-17 | 广西师范大学 | 一种jpeg图像的无损压缩与解压缩方法 |
US8456331B2 (en) * | 2011-04-15 | 2013-06-04 | Cavium, Inc. | System and method of compression and decompression |
CN104300990A (zh) * | 2013-03-15 | 2015-01-21 | 英特尔公司 | 用于高速高度压缩lz77令牌化的并行装置和用于紧缩压缩的霍夫曼编码 |
CN104113345A (zh) * | 2013-04-16 | 2014-10-22 | 晨星半导体股份有限公司 | 解压缩电路与相关的解压缩方法 |
CN103532984A (zh) * | 2013-11-01 | 2014-01-22 | 中国联合网络通信集团有限公司 | websocket协议的数据传输方法、设备和系统 |
Non-Patent Citations (2)
Title |
---|
"Application Note //Hardware GZIP Decompression";Celoxica;《http://www.mcs.anl.gov/~hereld/PXRF/CeloxicaTraining/GZIP%20App%20Note.pdf》;20011231;第1-11页 * |
"Decompression dual core for SoPC applications in high speed FPGA";Jesus Lazaro等;《The 33rd Annual Conference of the IEEE Industrial Electronics Society(IECON)》;20071231;第738-743页 * |
Also Published As
Publication number | Publication date |
---|---|
CN107534446A (zh) | 2018-01-02 |
US9287893B1 (en) | 2016-03-15 |
WO2016178826A1 (en) | 2016-11-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107534446B (zh) | 用于高带宽lz77解压缩的asic块 | |
EP4012928B1 (en) | Methods, devices and systems for semantic-value data compression and decompression | |
JP5878644B2 (ja) | データ処理システムにおいて、可変長符号化データ・ストリームを復号するための方法、コンピュータ・プログラム、および、装置 | |
US8988257B2 (en) | Data compression utilizing variable and limited length codes | |
US6885319B2 (en) | System and method for generating optimally compressed data from a plurality of data compression/decompression engines implementing different data compression algorithms | |
US7872598B2 (en) | Accelerated decompression | |
JP6381546B2 (ja) | 多バイト・フレームのパイプライン化圧縮のための方法、符号化データ・ストリームへの高帯域圧縮のための装置、およびコンピュータ・プログラム製品 | |
US9094039B2 (en) | Efficient deflate decompression | |
JP6425709B2 (ja) | 復元中に予備拡張辞書を利用するデータ復元 | |
JP7425526B2 (ja) | 動的ハフマン表生成のためのハードウェア領域を節約するためのラッチカウントの削減 | |
US9479194B2 (en) | Data compression apparatus and data decompression apparatus | |
US10230392B2 (en) | Techniques for parallel data decompression | |
CN109937537B (zh) | 编码可变长度符号以实现并行解码 | |
US8542137B2 (en) | Decoding encoded data | |
KR20220054651A (ko) | 다중 심볼 디코더 | |
WO2010044099A1 (en) | Lossless content encoding | |
CN101754020A (zh) | 用于编码的视频压缩的方法和系统 | |
US20100246983A1 (en) | Data compression method | |
Doshi et al. | “Quad-Byte Transformation as a Pre-processing to Arithmetic Coding | |
JPH11205154A (ja) | 可変長コードの整列化装置 | |
Banerjee et al. | An Intelligent Lossless Data Compressor Implementation using Reconfigurable Hardware. | |
KR20230021567A (ko) | 데이터를 인코딩 및/또는 디코딩하기 위한 방법 및 장치 | |
AU2006235766A1 (en) | Path Compression |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: American California Applicant after: Google limited liability company Address before: American California Applicant before: Google Inc. |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |