用于加速压缩和解压缩操作的设备以及方法_3

文档序号:9510125阅读:来源:国知局
信息必须是距离。如此,指令执行单元接下来跳转到图5b中的D表502,以在从图5a的表501接收到长度的条目之后解码距离信息。
[0048]在图5的实施例中,为字段513预留了 4比特(以便可以指定高达16比特的经解码的输出大小,注意,条目520的字段513的值提供八的值,以指示条目520的已编码的输入511是八比特大小),为字段514预留了 2比特(00 = EOB ;01 =数据符号;10 =长度,并且额外比特不适用;11 =长度,并且额外比特适用);为包含用于长度的“基(base)”解码(即,在没有额外比特的情况下的长度的解码)的字段515预留了 6比特;以及,为指定有多少额外比特适用的字段516预留了 4比特(若字段514= 11)。在一个实施例中,实际条目被构建为使得字段512的内容物理地重叠字段515以及516的内容(例如,在数据符号的情况下,条目中的相同10比特提供解码的数据符号,或在长度的情况下,6比特基以及4比特额外比特信息)。
[0049]如此,在解码的符号对应于长度的情况下,指令硬件被告知额外比特是否跟随长度基,并且若是的话,有多少。作为响应,如果没有额外的比特,则保留在字段515中的基长度值对应于作为结果返回的解码的长度值。如果有额外比特,则硬件将另外从数据流中获取正确数量的额外比特(因为它们在已编码的数据流中紧跟基长度)并结合从LL表格返回的基长度使用额外比特,以确定在结果中返回的最终完整长度。如上面间接提到,一旦确定了特定长度,由硬件执行的跟随操作将是执行向D表502的第二查询。这里,由于距离在DEFLATE压缩中跟随长度,因此,指令逻辑将获取最初作为输入操作数向指令执行单元呈现的DEFLATE编码信息的部分中的下一分段的比特流。指令执行硬件将输入DEFLATE编码信息的下一段应用到D表502。
[0050]在一个实施例中,如图5b所不,D表502中的条目与LL表长度条目格式相同/类似。具体而言,由于距离具有基值并且也可以具有额外比特,因此,D表502中的条目类似于图5a的条目257到284中的那些。类型值530指示额外比特是否适用(O =没有额外比特;1 =额外比特)。如果没有额外比特适用,则基解码的距离字段531提供解码的距离作为结果。如果额外比特适用,则字段533将适用的额外比特的数量通知给硬件。然后,指令硬件从已编码数据流获取额外比特,并结合基值来提供与解码的结果相同的距离。
[0051]图6示出了由指令执行单元硬件执行的上文所描述的第一过程。如在图6中观察到的,在接收到指向DEFLATE编码流的开始部分的指针601作为输入操作数(以及,例如,可以在系统存储器中查找到编码流的地址)之后,指令执行单元获取DEFLATE编码流602的部分,并将它作为输入参数呈现到具有LL表603的第一 CAM电路。LL表返回指示该部分的前沿是包含数据符号还是长度604的条目。
[0052]如果前沿包含数据符号,则LL表也返回数据符号的解码值,以及由编码的数据符号消耗的比特数量。指针被递增比特的数量,以便有效地指向流605中的待解码信息的新前沿。然后,作为结果606,返回解码的数据符号和新指针。
[0053]如果前沿包含长度,则LL表返回基解码的长度,以及有多少额外比特适用(若有的话)。执行单元递增指针607,以计及解码的长度基出比特)以及额外比特(若有的话)两者,如此,新指针值指向未编码信息的前沿,该前沿如上文所讨论的指向距离值。注意,额外比特的存在,不仅在刚刚解码的长度中,而且潜在地在待解码的距离中,编码的DEFLATE信息的量可能超出最初由指令执行单元获取的DEFLATE信息的部分。基本上,如果新指针指向需要被获取的信息,则指令执行单元将向系统存储器发出对于附加信息的读取请求。在一个实施例中,由于已知距离值跟随长度值,因此,执行单元将把长度的额外比特以外的信息获取到至少随后的距离的基值中,并相应地调整指针。
[0054]无论是否获取附加DEFLATE编码信息,在从编码的DEFLATE流中获取编码的长度的所有信息之后,在第一 ROM中执行查询,以将由霍夫曼编码引入的基长度和额外比特(若有的话)转换回LZ77编码的长度608。
[0055]还自动地执行向D表609的查询(回顾作为长度的解码的过程的一部分,指针递增到距离值607的开始处,并且甚至可以获取长度以外的编码的DEFLATE信息以及其额外比特(若有的话),以至少捕捉随后的编码的距离值的基分量,并相应地更新指针)。然后,向D表呈现DEFLATE编码的距离信息的部分,该D表返回解码的距离基和额外比特的数量(若有的话)609。然后,指令执行单元获取额外的DEFLATE编码的信息,以至少包含额外比特(若有的话),并相应地更新指针。当获得了编码的基和额外比特并且指针已经被更新以指向距离编码信息之后的DEFLATE流中的下一编码符号的开始处610时,执行单元执行向板载ROM的查询,以将霍夫曼距离解码为LZ77距离611。
[0056]一旦已经获得LZ77长度和距离,执行单元可以连同指向跟随距离信息612的下一符号的开始处的已更新的指针值一起返回这些值作为结果。
[0057]在一个实施例中,指令旨在被包括到“循环”指令的多个迭代的软件中,其中指令对由紧前面的指令产生的作为结果的指针值进行操作。在又一实施例中,循环的每一迭代都包含此处所描述的指令的一次执行,后面跟着存储器写入指令,以将已解码的结果(LZ77信息)写入到系统存储器中。下一循环重复使用由前一循环产生的指针来作为其输入操作数。编译器可以通过将指令引入到根据此方法构建中的代码,来构建代码。
[0058]在又一实施例中,执行单元被设计成将标志写入到控制寄存器空间,以指示:1)长度/距离对已被作为结果返回;2)遇到EOB ;3)指令的任何部分需要重放吗?稍后的标志对应于指令执行单元的“部分进展”能力。具体而言,由指令执行单元执行的存储器访问有可能会产生某种错误。在此情况下,指令执行单元将返回解码过程应该重新开始之处的指针值作为其结果。在一个实施例中,此指针值可以是当指令能够成功地解码长度时的距离值的开始。
[0059]图7示出了执行单元700的逻辑设计的实施例。如在图7中观察到的,逻辑包括监督/导致上文所描述的各种方法的执行的状态机逻辑电路701。状态机701从寄存器空间接收输入指针,作为输入操作数。指令执行单元包括存储器请求逻辑702,用于发出对系统存储器中的已编码的DEFLATE信息的接下来的诸部分的存储器读取请求。指令执行单元还包括第一和第二 CAM电路703,704,用于实现如前所述的LL和D表。指令执行单元还包括第一和第二 ROM电路705,706,用于实现上文所描述的霍夫曼到LZ77的转换。执行单元还包括指针更新逻辑电路707,用于更新符合以上讨论的指针值。执行单元的结果被回写到寄存器空间。状态机可以作为专用逻辑电路、微代码或其某种组合来植入。
[0060]图8示出了利用半导体芯片上的逻辑电路实现的处理核800的高级别图示。处理核包括流水线801。流水线包括多级,每一级都被设计为执行用于完全执行程序代码指令所需的多步骤过程中的特定步骤。这些通常包括至少:1)指令获取和解码;2)数据获取;3)执行;4)回写。执行级对由同一个指令所标识并在另一先前级(例如,上面的步骤2)获取的数据执行由在前级(例如,在上面的步骤I)中获取和解码的指令所标识的特定操作。被操作的数据通常是从(通用)寄存器存储空间802获取的。在操作完成时创建的新的数据也通常被“写回”到寄存器存储空间(例如,在上面的级4))。
[0061]与执行级相关联的逻辑电路通常由多个“执行单元”或“功能单元”803_1到803_N组成,它们各自被设计为执行其自己的唯一操作子集(例如,第一
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1