一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用于解压缩系统的具有多个字符串复制引擎的命令处理器的制作方法

2022-06-22 20:08:13 来源:中国专利 TAG:

用于解压缩系统的具有多个字符串复制引擎的命令处理器


背景技术:

1.相关技术
2.一些电子装置执行用于将数据(诸如用户或系统文件、数据流或序列等)压缩的操作。电子装置可将数据压缩以减小数据的大小,以使得数据能够更高效地存储在存储器中、使得数据能够经由网络在电子装置之间的传输等。例如,电子装置可使用字典编码标准(诸如lempel ziv-77(lz77)、lz78或lempel-ziv-welch(lzw))来从原始数据生成压缩数据。
3.尽管将数据压缩可提高存储和处理数据的效率,但是压缩数据在用于许多操作之前必须进行解压缩。这意味着在可执行此类操作之前,电子装置必须执行操作来扭转压缩操作的效应,并且因此重新存储或重新创建原始数据。在许多电子装置中,使用软件(即,软件例程、应用程序等)对压缩数据进行解压缩。使用软件对压缩数据进行解压缩典型地要求诸如中央处理单元(cpu)的通用处理器执行大量的解压缩操作和相关联的存储器访问。由于大量的解压缩操作和存储器访问,使用软件进行解压缩是低效的。
附图说明
4.图1呈现了示出根据一些实施方案的压缩数据的框图。
5.图2呈现了示出根据一些实施方案的文字写入命令的框图。
6.图3呈现了示出根据一些实施方案的字符串复制命令的框图。
7.图4呈现了示出根据一些实施方案的电子装置的框图。
8.图5呈现了示出根据一些实施方案的解压缩子系统的框图。
9.图6呈现了示出根据一些实施方案的命令处理器的框图。
10.图7呈现了示出根据一些实施方案的来自暂存器阵列的行和对应的字节有效指示符的框图。
11.图8呈现了示出根据一些实施方案的用于对压缩输入数据进行解压缩的过程的流程图。
12.图9呈现了示出根据一些实施方案的用于将重新创建的原始数据存储在暂存器阵列和历史缓冲器中的过程的流程图。
13.图10呈现了示出根据一些实施方案的用于检查字符串复制命令的依赖关系的过程的流程图。
14.在整个附图和描述中,相似的附图标记指代相同的附图元件。
具体实施方式
15.呈现以下描述以使得本领域任何技术人员能够制造和使用所描述的实施方案,并且在特定应用及其要求的背景下提供以下描述。对所描述的实施方案的各种修改对于本领域技术人员来说将显而易见,并且本文定义的一般原理可应用于其他实施方案和应用。因此,所描述的实施方案不限于所示出的实施方案,而是要被赋予与本文公开的原理和特征一致的最宽范围。
16.术语
17.在以下描述中,使用各种术语来描述实施方案。以下是对这些术语中的一者的简化且一般的描述。应注意,该术语可具有重要的附加方面,为了清楚和简洁起见,在本文中没有陈述这些附加方面,并且因此该描述不旨在限制术语。
18.功能块:功能块是指一个或多个互相关联的电路元件(诸如集成电路元件、分立电路元件等)的组、集合和/或集。电路元件是“互相关联的”,因为电路元件共享至少一种性质。例如,互相关联的电路元件可被包括在特定的集成电路芯片或其部分中、制造在特定的集成电路芯片或其部分上或以其他方式耦合到特定的集成电路芯片或其部分,可参与执行给定的功能(计算或处理功能、存储器功能等),可由共同控制元件和/或共同块来控制等。功能块可包括任何数量的电路元件,从单个电路元件(例如,单个集成电路逻辑门)至数百万或数十亿的电路元件(例如,集成电路存储器)。
19.压缩数据
20.在所描述的实施方案中,对压缩数据执行操作并且使用该压缩数据执行操作。一般来讲,压缩数据是对原始数据的一个或多个压缩和/或其他操作的输出,该一个或多个压缩和/或其他操作造成原始数据中的至少一些被命令和/或可用于重新创建原始数据的其他值替代。在所描述的实施方案中,可将各种类型的数据压缩,所述数据包括用户或系统文件(例如,音频和/或视频文件、文档文件、可执行文件、操作系统文件等)、数据流或序列(例如,音频和/或视频数据流、经由网络接口接收的数据序列等)、从传感器(例如,相机和/或麦克风、温度计、振动传感器等)捕获的数据等。在所描述的实施方案中,众多压缩标准、算法或格式或它们的组合可用于将数据压缩,包括字典编码标准,诸如lempel ziv-77(lz77)、lz78或lempel-ziv-welch(lzw)等。
21.如本文所使用的术语“压缩数据”和“压缩”广泛地应用于对原始数据的操作,该操作造成原始数据中的至少一些被命令和/或可用于重新创建原始数据的其他值替代。如上所述,这些操作包括各种编码标准、算法或格式或它们的组合。因此,这些术语不应当被解译为仅限于诸如字典编码压缩和/或有时可被视为“压缩”操作的其他操作的操作。
22.图1呈现了示出根据一些实施方案的压缩数据的框图。如在图1中可见,压缩数据100包括一组(即,系列、序列等)数据102,所述压缩数据可以是文件、数据流或序列等或被包括在文件、数据流或序列等中。一般来讲,命令102中的每个命令包括、标识和/或指代可用于获取和/或生成字符串(即,位、字符、数字等)的信息,所述字符串也被称为“符号”,所述字符串将在解压缩操作期间附加到重新创建的原始数据。在一些实施方案中,每个命令包括被组织来表示和/或标识可用来获取和/或生成该命令的字符串的信息的一组位。在一些实施方案中,命令中的信息是指在命令之外的信息,例如关于要从中获取命令值的单独来源的信息、将用于与命令相关联的计算的信息、对表的引用、记录或其他数据结构等。
23.在一些实施方案中,命令包括文字写入命令和字符串复制命令。图2呈现了示出根据一些实施方案的文字写入命令200的框图。文字写入命令200包括命令标识符(cmd),该命令标识符在解压缩子系统中处理时致使解压缩子系统获取指定长度(长度)(例如,以位、字节等为单位)的文字(文字)并且将文字附加到重新创建的原始数据。(尽管被示为图2中的文字写入命令200的部分,但在一些实施方案中,文字可单独地存储,诸如在压缩数据100的另一个部分或块中。)对于图1中的示例,l1文字写入命令致使解压缩子系统获取第一一字
节字符串,例如字符a,并且将该第一一字节字符串附加到重新创建的输出数据。如本文所使用的“附加”指示将给定的字符串添加到先前创建的原始数据(使用图2中未示出的命令重新创建)的序列的末尾,或者将其用作新重新创建的数据中的初始字符串(当命令是压缩数据中的第一命令时)。继续图1中的示例,l2至l5文字写入命令致使获取第二至第五一字节字符串,例如字符b、c、d和e,并且在对应的位置将其附加到重新创建的原始数据。
24.图3呈现了示出根据一些实施方案的字符串复制命令300的框图。字符串复制命令300包括命令标识符(cmd),该命令标识符在解压缩子系统中处理时致使解压缩子系统获取从在先前重新创建的原始数据中往回一定距离(距离)(例如,以位、字节等为单位)的指定长度(长度)(例如,以位、字节等为单位)的字符串并且将数据附加到重新创建的原始数据。一般来讲,字符串复制命令使得解压缩子系统能够从早前在先前创建的原始数据复制各种长度(可能从最小字符串长度到最大字符串长度)的字符串并且将字符串的复本添加到重新创建的原始数据的末尾。对于图1的示例,s1字符串复制命令致使解压缩子系统复制包括由文字写入命令l2和l3在先前重新创建的原始数据中往回三个字节附加到重新创建的原始数据的文字的组合的字符串(即,b和c),并且将所复制的字符串附加到重新创建的原始数据(在由文字写入命令l4附加到重新创建的数据的文字之后的位置)。在处理s1字符串复制命令之后,重新创建的原始数据如下:abcdbc。s2字符串复制命令致使解压缩子系统获取包括l4文字和s1字符串的字符串的复本(即,dbc)并且将该字符串的复本添加到重新创建的原始数据。在处理s2字符串复制命令之后,重新创建的原始数据如下:abcdbcedbc。s3字符串复制命令致使解压缩子系统获取包括l5文字和s2字符串的字符串的复本(即,edbc)并且将该字符串的复本添加到重新创建的原始数据。在处理s3字符串复制命令之后,重新创建的原始数据如下:abcdbcedbcedbc。如从图1中的示例可见,可使用字符串复制命令将文字和先前字符串两者单独或组合地复制并附加到重新创建的原始数据。
25.尽管在压缩数据100中示出了特定序列的命令,但在一些实施方案中,压缩数据中可包括不同序列和/或类型的命令。一般来讲,压缩数据100包括足够的命令来实现本文描述的操作。另外,尽管各种字段和信息被示出为包括在文字写入命令200和字符串复制命令300中,但在一些实施方案中,文字写入命令200和字符串复制命令300包括不同信息和/或不同地布置的信息。一般来讲,文字写入命令200和字符串复制命令300包括足够的信息来实现本文描述的操作。另外,尽管在描述图1时将一字节文字用作示例,但可使用其他长度的文字。例如,在一些实施方案中,准许文字达到两字节。另外,在一些实施方案中,根据压缩标准、算法或格式或它们的组合和/或出于其他原因,将最小字符串长度用于字符串复制命令。例如,在一些实施方案中,最小字符串长度是三字节(并且因此,最短准许字符串是三字节)。
26.在一些实施方案中,准许字符串复制命令从由有限量的重新创建的原始数据定义且因此包括有限量的重新创建的原始数据的“字典”复制字符串。在这些实施方案中,对于字符串复制命令,存在关于在字符串不再是字典的部分之前字符串可在重新创建的原始数据中往回多远的限制。例如,在一些实施方案中,字典包括32kb、1kb或另一个量的先前重新创建的原始数据的滑动窗口。换句话说,并且假设64kb字典,甚至在存在多于64kb的先前重新创建的原始数据的情况下,只能获取重新创建的原始数据的最近生成的64kb内的字符串来处理字符串复制命令。
27.在一些实施方案中,在压缩操作期间,电子装置通过使用滑动窗口(例如,32kb滑动窗口)经过片段中的原始数据并确定包括该片段中的数据的每个片段的字典来从原始数据生成压缩数据(例如,压缩数据100)。作为每个片段的压缩数据,电子装置然后生成文字写入命令的序列,所述文字写入命令将唯一字符串的文字值附加到重新创建的原始数据,和/或生成字符串复制命令,所述字符串复制命令获取先前重新创建的原始数据(即,字典)中的字符串的复本并且将字符串的复本附加到重新创建的原始数据。在一些实施方案中,并且如上所述,在解压缩操作期间,从压缩数据检索命令并且用来使用相同的字典/滑动窗口/片段重新创建原始数据。
28.概述
29.在所描述的实施方案中,电子装置包括解压缩子系统功能块,该解压缩子系统功能块执行用于对压缩数据进行解压缩以便重新创建从中生成压缩数据的原始数据的操作。解压缩子系统包括命令处理器功能块,该命令处理器功能块执行用于处理命令(诸如文字写入命令和字符串复制命令)以重新创建原始数据的操作。命令处理器包括两个或更多个单独的字符串复制引擎功能块,该字符串复制引擎功能块使得命令处理器能够基本上并行地(即,完全地或部分地同时)执行两个或更多个字符串复制操作。因此,所描述的实施方案在处理字符串复制命令时可高效地生成字符串以对压缩数据进行解压缩。由于字符串复制命令可从重新创建的原始数据复制由先前的字符串复制命令附加到重新创建的原始数据的字符串,因此在两个或更多个字符串复制引擎中基本上并行地执行的两个或更多个字符串复制命令之间可存在依赖关系。因此,命令处理器还包括用于确保字符串复制命令之间的依赖关系被两个或更多个单独的字符串复制引擎适当地处理的机制。
30.在所描述的实施方案中,使用字典编码标准(例如,lz77、lz78等)将数据压缩,其中字符串复制操作可从先前重新创建的原始数据获取长于指定的最小长度的字符串的复本并且将字符串的复本附加到重新创建的原始数据。例如,图1中的字符串复制命令s1从先前重新创建的原始数据复制字符串bc并且将字符串附加到重新创建的原始数据。在一些实施方案中,字符串复制操作被限于先前重新创建的数据的用于获取字符串的指定块或部分,有时被称为“字典”。例如,在一些实施方案中,将k字节滑动窗口(例如,32kb、1kb等)用作字典,这意味着仅可从重新创建的原始数据中往回远至k个字节复制字符串。在一些实施方案中,命令处理器包括用于本地存储当前在字典中的字符串的复本的机制。这些机制包括暂存器阵列和历史缓冲器,其中字符串存储在n字节行(例如,32字节行、50字节行等)中。仅存储最近向重新创建的原始数据写入的n字节行中的几个(例如,4个、6个等)的暂存器阵列使用更直接地耦合到字符串引擎的顺序逻辑存储元件(例如,触发器、锁存器等)来实现。因此,字符串复制引擎可快速地从存储在暂存器阵列中的n字节行中的字符串复制字节,例如仅仅在控制时钟的单个周期内。存储n字节行中的剩余部分(例如,1020个、1200个等)的历史缓冲器使用存储器元件(例如,同步随机存取(sram)存储器元件、动态随机存取存储器(dram)元件等)来实现。从历史缓冲器中的n字节行复制字符串比从暂存器阵列复制字符串慢(例如,控制时钟的六个周期),但比使用远程存储器(诸如电子装置中的主存储器)来存储和从字典复制n字节行快。
31.在一些实施方案中,在操作期间,由于将来自处理文字写入命令的文字值或来自处理字符串复制命令的复制的字符串附加到重新创建的原始数据,因此重新创建的原始数
据从暂存器阵列流到或前进到历史缓冲器并且然后进入电子装置的主存储器。换句话说,由于由命令处理器将文字值或字符串附加到重新创建的原始数据,因此命令处理器将文字值或字符串的各个字节存储到暂存器阵列中的一个或多个n字节行中。当暂存器阵列中的n字节行满了时,命令处理器以先进先出次序将重新创建的原始数据的字节从暂存器阵列中的一个或多个n字节行移动(或“迁移”)到历史缓冲器中的可用n字节行。将行从暂存器阵列移动释放暂存器阵列中的一个或多个n字节行,以用于存储由命令处理器生成的后续文字值或复制的字符串。当历史缓冲器中的n字节行满了时,命令处理器以先进先出次序将重新创建的原始数据的字节从历史缓冲器中的一个或多个n字节行移动(或“迁移”)到存储器。这释放历史缓冲器中的一个或多个n字节行,以用于存储从暂存器阵列接收的重新创建的原始数据。在一些实施方案中,n字节行立即从历史缓冲器复制到存储器(且因此这些实施方案不等待历史缓冲器填满再向存储器写入行),但被保留在历史缓冲器中,直到当历史缓冲器充满n字节行时被其他n字节行覆写为止。这些实施方案可避免由存储器系统繁忙或将行从历史缓冲器移动到存储器的其他延迟引起的复杂问题。
32.在一些实施方案中,在重新创建的原始数据通过暂存器阵列和历史缓冲器流到或前进到存储器时,使用跟踪机制来跟踪以下项:(1)已经从暂存器阵列移动到历史缓冲器的n字节行的数量,以及(2)当前存储有效数据的暂存器阵列中的字节。跟踪机制包括存储行计数的行计数器,该行计数指示重新创建的原始数据的已经从暂存器阵列移动到历史缓冲器的n字节行的数量。在每个n字节行从暂存器阵列移动到历史缓冲器时,行计数器使行计数增加。因此,行计数指示先前重新创建的原始数据中的当前存储在历史缓冲器和存储器中的n字节行的总数量。跟踪机制还包括字节有效跟踪器,该字节有效跟踪器存储一组字节有效指示符,其中字节有效指示符中的一者与暂存器阵列中的n字节行中的每个字节相关联。在将重新创建的原始数据写入暂存器阵列中的每个字节时,命令处理器设置对应的字节有效指示符以指示有效的重新创建的原始数据存在于该字节中。在将重新创建的数据从暂存器阵列移动到历史缓冲器时,命令处理器清除对应的字节有效指示符以指示该字节中不存在有效的重新创建的原始数据(并且因此该字节是空的、无效的等)。
33.如上所述,在字符串复制命令之间可出现依赖关系。一般来讲,出现依赖关系是因为字符串复制命令可基本上并行地执行,并且因此字符串复制命令可复制由尚未完成处理的早前的字符串复制命令和/或文字写入命令附加到重新创建的原始数据的字符串。当字符串复制命令从重新创建的原始数据复制由早前的字符串复制命令附加到重新创建的原始数据的字符串时,出现“直接”依赖关系。当字符串复制命令从重新创建的原始数据复制由在早前的字符串复制命令完成处理时停止的文字写入命令附加到重新创建的原始数据的字符串(并且因此字符串复制命令间接地依赖于早前的字符串复制命令)时,出现“间接”依赖关系。
34.上述跟踪机制用于确保适当地处理字符串复制命令之间的依赖关系。字符串复制引擎使用行计数来快速地确定要由字符串复制命令从在重新创建的原始数据中往回指定的距离复制的字符串是否存在于历史缓冲器和/或暂存器阵列中,并且因此在字符串复制命令与先前的字符串复制命令之间不存在尚未解决的依赖关系。字符串复制引擎还使用字节有效阵列中的字节有效指示符来确保适当地处理依赖关系。更具体地,假设行计数指示适当数量的行存在于暂存器阵列和历史缓冲器中,字符串复制引擎使用字节有效指示符来
确定要由字符串复制命令从暂存器阵列复制的字符串是否存在并准备好从暂存器阵列复制。
35.通过将硬件解压缩子系统与命令处理器一起使用,该命令处理器包括用于基本上并行地处理两个或更多个字符串复制命令的字符串复制引擎,所描述的实施方案使用硬件来高效地且快速地执行现有装置使用软件执行的解压缩操作。与使用软件实体来执行相同操作相比,解压缩子系统更快且更高效(例如,要求更少的存储器访问、使用更少的电力等)。另外,使用行计数和字节有效指示符,所描述的实施方案能够高效地检测和处理字符串复制命令之间的依赖关系,这使得能够在字符串复制引擎中基本上并行地处理字符串复制命令。使用解压缩子系统释放电子装置中的其他功能块(例如,处理子系统等)以执行其他操作。因此,解压缩子系统提高了电子装置的总体性能,这进而提高用户满意度。
36.电子装置
37.图4呈现了示出根据一些实施方案的电子装置400的框图。如在图4中可见,电子装置400包括处理器402和存储器404。处理器402是执行电子装置400中的计算、解压缩和其他操作的功能块。处理器402包括处理子系统406和解压缩子系统408。处理子系统406包括执行通用计算、解压缩和其他操作的一个或多个功能块,诸如中央处理单元(cpu)核心、图形处理单元(gpu)核心、嵌入式处理器和/或专用集成电路(asic)。
38.解压缩子系统408是执行用于对压缩输入数据进行解压缩的操作的功能块。一般来讲,解压缩子系统408将基于原始数据生成的压缩输入数据作为输入,并且返回用于重新创建原始数据的诸如一个或多个位、字符、数字等的序列的字符串(或符号)作为输出。基于在解压缩子系统408内的内部元件的布置(例如,在解压缩子系统408中的多个单独的字符串复制引擎和/或命令缓冲器),解压缩子系统408在每一时间段从压缩数据的块生成多达指定数量的字符串(例如,每一时钟周期两个字符串、每333ps三个字符串等)。以下更详细地描述了解压缩子系统408。
39.存储器404是执行电子装置400中的存储器(例如,主存储器)的操作的功能块。存储器404包括:存储器电路(即,存储元件、访问元件等),该存储器电路用于存储数据和指令以供电子装置400中的功能块使用;以及控制电路,该控制电路用于处理对存储器电路中的数据和指令的访问(例如,读取、写入、检查、删除、使无效等)。存储器404中的存储器电路包括计算机可读存储器电路,诸如第四代双倍数据速率同步动态随机存取存储器(ddr4 sdram)、静态随机存取存储器(sram)或它们的组合。
40.电子装置400被示出为使用特定数量和布置的元件(例如,功能块和装置,诸如处理器402、存储器404等)。然而,出于说明性目的,简化了电子装置400。在一些实施方案中,在电子装置400中存在不同数量或布置的元件。例如,电子装置400可包括电源子系统、显示器等。一般来讲,电子装置400包括足够的元件来执行本文描述的操作。
41.尽管解压缩子系统408在图2中被示出为包括在处理器402中,但是在一些实施方案中,解压缩子系统408是单独和/或独立的功能块。例如,解压缩子系统408可在独立的集成电路芯片等上实现(自行实现或与支持电路元件和功能块一起实现)。一般来讲,在所描述的实施方案中,解压缩子系统408合适地安置在电子装置400中以使得能够执行本文描述的操作。
42.电子装置400可以是执行数据解压缩或其他操作的任何电子装置或可被包括在执
行数据解压缩或其他操作的任何电子装置中。例如,电子装置400可以是电子装置或可被包括在电子装置中,所述电子装置诸如台式计算机、膝上型计算机、可穿戴电子装置、平板计算机、智能电话、服务器、人工智能设备、虚拟或增强现实设备、网络器具、玩具、视听设备、家用电器、控制器、车辆等和/或它们的组合。
43.解压缩子系统
44.在所描述的实施方案中,电子装置中的解压缩系统执行用于对压缩输入数据进行解压缩(即,用于重新创建从中生成压缩输入数据的原始数据)的操作。图5呈现了示出根据一些实施方案的解压缩子系统408的框图。如在图5中可见,解压缩子系统408包括命令生成器500和命令处理器502。命令生成器500是执行用于从压缩输入数据504提取命令506和文字508并且将命令506和文字508提供到命令处理器502的操作的功能块。命令处理器502是执行用于处理从命令生成器500接收的命令506和文字508以生成被提供到接收实体(例如,处理子系统406、存储器404、网络子系统、传感器子系统等)的重新创建的原始数据510的对应字符串或符号的操作的功能块。
45.在操作期间,命令生成器500从源实体(例如,处理子系统406、存储器404、网络子系统、io装置等)接收压缩输入数据504。压缩输入数据504是或包括具有用于生成、获取和/或检索命令506和文字508的信息的位的序列或流。例如,在一些实施方案中,压缩输入数据504与压缩输入100类似地布置。命令生成器500然后执行用于从压缩输入数据504生成、获取和/或检索命令506和文字508的操作。换句话说,命令生成器500处理压缩输入数据504以从压缩输入数据504提取命令506和文字508,或者以其他方式生成、获取或检索命令506和文字508。
46.在一些实施方案中,对于每个文字写入命令或字符串复制命令,命令生成器500找到压缩输入数据504中的命令标识符,诸如在压缩输入数据504中的初始位置的指定的一组位中或在压缩输入数据504中的每个命令的开头。基于由命令标识符指示的命令的类型,命令生成器500从压缩输入数据504提取命令的剩余信息。例如,对于文字写入命令(例如,文字写入命令200),在一些实施方案中,命令处理器502确定命令标识符将该命令标识为文字写入命令(例如,包括指定布置的位)。命令处理器502然后从压缩输入数据504中的后续位提取或获取文字的长度和文字本身的字符串或符号(该字符串或符号可以是一个或多个字节,直到指定的极限)。命令生成器500然后例如经由一个或多个并行或串行通信信号线或线路将命令506和文字508(如果有的话)传达到命令处理器502。例如,假设命令是字符串复制命令300,命令生成器500向命令处理器502传达命令是字符串复制命令的指示、在从中复制字符串的重新创建的原始数据中往回的距离(例如,位或字节的数量、用于计算位或字节的数量的数字、偏移等)以及字符串的长度(例如,位或字节的数量、用于计算位或字节的数量的数字、偏移等)。
47.在一些实施方案中,命令生成器500计算或确定要存储由文字写入命令或字符串复制命令提供的重新创建的原始数据的地址或位置。例如,在一些实施方案中,命令生成器500保持对重新创建的原始数据的已经由命令处理器502输出的字节的连续记录,并且使用该连续记录来确定要储存将由给定的命令写入的第一字节的地址或位置。在这些实施方案中,命令生成器500可标记或以其他方式将第一字节的地址或位置提供到命令处理器502以供使用。例如,命令生成器500可提供特定字节的标识符、用于计算特定字节的数字、偏移
等。命令生成器502可使用将该地址或位置用于操作,诸如确定给定的字符串复制命令是否存在尚未解决的依赖关系等。
48.在一些实施方案中,命令生成器500执行用于基于压缩输入数据504和/或其他信息来生成、获取和/或检索命令506和文字508的其他操作。例如,在一些实施方案中,在使用字典编码标准进行压缩之后,使用编码标准(诸如前缀编码标准(例如,霍夫曼编码))对压缩数据进行编码。在这些实施方案中,命令生成器500在生成、获取和/或检索命令之前对压缩输入数据504进行解码。一般来讲,命令生成器500可执行用于解析命令506和文字508以传达到命令处理器502的任何数量的操作。
49.在从命令生成器500接收到命令506和文字508后,命令处理器502执行用于处理命令506和文字508的操作。图6呈现了示出根据一些实施方案的命令处理器502的框图。如在图6中可见,命令处理器502包括命令缓冲器600、多个字符串复制引擎602、暂存器阵列604和历史缓冲器606。命令缓冲器600是执行用于将要处理的每个命令辨识为文字写入命令或字符串复制命令并且本地处理该命令或将该命令转发到字符串复制引擎以在其中处理的操作的功能块。例如,命令缓冲器600可经由来自命令生成器500的专用信号线、经由串行或并行信号线上的一个或多个位等来接收命令类型信号或指示符,并且基于此来确定命令是文字写入命令还是字符串复制命令。
50.当命令是文字写入命令时,在一些实施方案中,命令缓冲器600本地处理命令(即,处理命令本身)。为了处理文字写入命令,命令缓冲器600基于命令506和文字508以及重新创建的原始数据的上述持续记录来生成文字写入请求(req)608。命令缓冲器600然后将文字写入请求608以及文字数据和地址(数据/地址)610转发到暂存器阵列604。文字写入请求608是致使暂存器阵列604从由该地址(重新创建的原始数据中的绝对或相对地址或字节位置)标识的字节开始将文字数据(回想一下,该文字数据可以是一个或多个字节)存储在重新创建的原始数据中的字节中的信号、消息或其他请求。
51.一般来讲,从由该地址标识的字节开始将文字“存储”在重新创建的原始数据中涉及将文字附加到在执行文字写入命令之前的命令之后存在(或将存在)的重新创建的原始数据。换句话说,将文字添加到如由先前的命令生成的重新创建的原始数据的末尾。应注意,在一些实施方案中,一些或全部先前的命令仍可被处理(在字符串复制引擎602等中),并且因此文字可在指定的位置添加到重新创建的原始数据(在暂存器阵列604中的存储元件中),而将其他/之前的位置留空以用于储存由先前的命令生成的文字或字符串。换句话说,可不按次序但在适当的位置将来自文字写入命令的文字写入重新创建的原始数据。
52.当命令是字符串复制命令时,命令缓冲器600将用于处理字符串复制命令的信息转发到字符串复制引擎602以在其中处理。对于这个操作,命令缓冲器600从多个字符串复制引擎中选择要向其转发字符串复制命令以进行处理的字符串复制引擎602。例如,在一些实施方案中,命令缓冲器600以循环模式选择字符串复制引擎以处理来自字符串复制命令的序列的单独字符串复制命令。作为另一个示例,在一些实施方案中,在字符串复制引擎变得可用于处理来自字符串复制命令的序列的单独字符串复制命令时,命令缓冲器600选择字符串复制引擎。在这些实施方案中,给定的字符串复制引擎可基本上与仅处理一个字符串复制命令的另一个字符串复制引擎并行地处理两个或更多个连续的字符串复制命令。
53.当将字符串复制命令转发到字符串复制引擎602时,命令缓冲器600转发各种单独
的信息项以用于处理字符串复制命令。如在图6中可见,信息项包括字符串命令612、距离614、长度616以及到选定的字符串复制引擎602的地址618。字符串命令612包括向字符串复制引擎通知字符串复制命令在等待处理(且因此致使字符串复制引擎处理字符串复制命令)的一个或多个位。在一些实施方案中,每个字符串复制引擎602具有单独的字符串命令612(例如,连接到专用信号线等),并且因此,命令缓冲器600可转发字符串命令612上的信号以向特定的字符串复制引擎602通知字符串复制命令在等待处理。距离614是在要复制的字符串所在的先前重新创建的原始数据中往回的位、字节等的数量的标识。长度616是以位、字节等为单位的要复制的字符串的长度的表示。地址618标识要存储字符串的重新创建的原始数据中的位置(重新创建的原始数据中的绝对或相对地址或字节位置),该字符串是命令生成器500使用重新创建的原始数据的上述持续记录计算的。基于从命令缓冲器600接收到的值,字符串复制引擎602生成字符串写入请求620。字符串复制引擎602然后将字符串写入请求620以及字符串数据和地址(数据/地址)622转发到暂存器阵列604。字符串写入请求620是致使暂存器阵列604从由该地址标识的字节开始将字符串(回想一下,该字符串可以是一个或多个字节)存储在重新创建的原始数据中的字节中的信号、消息或其他请求。
54.一般来讲,从由该地址标识的字节开始将字符串“存储”在重新创建的原始数据中涉及将字符串附加到在执行字符串复制命令之前的命令之后存在(或将存在)的重新创建的原始数据。换句话说,将字符串添加到如由先前的命令生成的重新创建的原始数据的末尾。应注意,在一些实施方案中,一些或全部先前的命令仍可被处理(在字符串复制引擎602等中),并且因此字符串可在指定的位置添加到重新创建的原始数据(在暂存器阵列604中的存储元件中),而将其他/之前的位置留空以用于储存由先前的命令生成的文字或字符串。换句话说,可不按次序但在适当的位置将来自字符串复制命令的字符串写入重新创建的原始数据。这种情况的示例可在图7中看出,该图呈现了示出根据一些实施方案的暂存器阵列行700的框图。对于图7中的示例,重新创建的原始数据(rod)被写入暂存器阵列行700中的四个位置(例如,字节)中的第一个和第三个,但第二位置(空)尚未被写入,并且因此第三位置的重新创建的原始数据已经“附加”到最终将由先前的命令产生的重新创建的原始数据。
55.尽管图6中未示出,但在一些实施方案中,先入先出缓冲器位于命令缓冲器600与暂存器阵列604。在这些实施方案中,代替将文字写入请求608以及与文字写入命令相关联的文字数据和地址610直接转发到暂存器阵列604,命令缓冲器600将文字写入请求608以及用于这些文字写入命令的文字数据和地址610写入先入先出缓冲器。值保留在先入先出缓冲器中直到文字写入请求被处理为止,并且然后释放到暂存器阵列。在这些实施方案中,代替在先前的命令(例如,更长的字符串复制命令等)完成执行时保留文字写入命令,命令缓冲器600可将文字写入请求608以及用于这些文字写入命令的文字数据和地址610转发到先入先出缓冲器并且继续进行后续的命令。例如,命令缓冲器600可处理后续的字符串复制命令并将其转发到字符串复制引擎以在其中处理。尽管后续的字符串复制引擎可在先前的命令和文字写入命令完成其对暂存器阵列的写入时停止,但字符串复制引擎有机会继续进行处理后续字符串复制命令可能需要的任何历史缓冲器读取。
56.暂存器阵列604是包括用于存储从命令缓冲器600和字符串复制引擎602转发的文字或字符串(或符号)的顺序逻辑存储元件(例如,触发器、锁存器等)的功能块。暂存器阵列
604是更快访问的存储,其中存储重新创建的原始数据的少量n字节(例如,32行、60字节等)行以使得字符串复制引擎602能够在处理字符串复制命令时快速地访问其中存储的字符串。存储阵列604中的顺序逻辑存储元件接近字符串复制引擎602并且通过相对直接的信号线路耦合到字符串复制引擎602。例如,在一些实施方案中,顺序逻辑存储元件靠近或邻近半导体布局中的字符串复制引擎(或字符串复制引擎中所包括的字符串复制功能块),其中制造出命令处理器并且经由半导体布局中的相对直接通信线路将其耦合到电路。
57.选择暂存器阵列604中的n字节行的特定数量以引起重新创建的原始数据的有用部分快速地可用于字符串复制引擎602,而暂存器阵列604无需过大(即,需要太多的布局区域)、消耗太多电力等。例如,在一些实施方案中,使用(例如,由设计者等使用)要由字符串复制引擎602的字节数量的测量、估计或计算的简档来选择暂存器阵列604中的n字节行的数量。在一些实施方案中,暂存器阵列604包括四个、六个或另一个数量的n字节行。
58.历史缓冲器606是包括用于存储从命令缓冲器600和字符串复制引擎602转发的文字和字符串(或符号)的存储器元件(例如,sram存储器元件、dram存储器元件等)的功能块。历史缓冲器606是更慢访问的存储(相对于暂存器阵列604而言),其中存储重新创建的原始数据的大量n字节行以使得字符串复制引擎602能够在处理字符串复制命令时访问其中存储的字符串。在一些实施方案中,基于用于生成压缩输入数据504的字典编码标准的字典大小来设置历史缓冲器606(和暂存器阵列604)中包括的n字节行的数量。例如,在这些实施方案中,假设字典大小是32kb,n字节行的大小是32字节并且暂存器阵列604具有四个32字节行,历史缓冲器具有用于1020个单独的32字节行(即,在字典中的总共1024个32字节行中)的存储。历史缓冲器606典型地比暂存器阵列604具有字典中的n字节行中的更大部分。
59.在操作期间,在一些实施方案中,由于将来自处理文字写入命令的文字值或来自处理字符串复制命令的复制的字符串附加到重新创建的原始数据,因此重新创建的原始数据从暂存器阵列604流到或前进到历史缓冲器606并且然后进入存储器404。换句话说,由于分别由命令缓冲器600或字符串复制引擎602将文字值或字符串附加到重新创建的原始数据,因此暂存器阵列604最初将文字值或字符串的各个字节存储到暂存器阵列604中的一个或多个n字节行中。由于继续将文字和字符串附加到重新创建的原始数据,因此暂存器阵列604中的n字节行最终变满。当n字节行变满时,暂存器阵列604以先进先出次序将重新创建的原始数据的字节从暂存器阵列604中的一个或多个n字节行移动到历史缓冲器606中的可用n字节行。换句话说,暂存器阵列604经由写入请求624和写入数据626将旧的重新创建的原始数据从暂存器阵列604“迁移”到历史缓冲器606。以此方式将重新创建的原始数据的字节从来自暂存器阵列604的n字节行移动释放暂存器阵列604中的一个或多个n字节行,以用于存储由命令缓冲器600或字符串复制引擎602生成的后续文字值或复制的字符串。当历史缓冲器606中的n字节行变成填满迁移的重新创建的原始数据时,历史缓冲器606以先进先出次序将重新创建的原始数据的字节从历史缓冲器606中的一个或多个n字节行移动到存储器404。换句话说,历史缓冲器606经由写入数据628将旧的重新创建的原始数据从历史缓冲器606“迁移”到存储器404。这释放历史缓冲器606中的一个或多个n字节行,以用于存储后续从暂存器阵列604接收/迁移的重新创建的原始数据。
60.在一些实施方案中,历史缓冲器606不等到历史缓冲器606变满之后再将n字节行写入存储器404。在这些实施方案中,历史缓冲器606将n字节行复制到存储器404,因为n字
节行最初从暂存器阵列604迁移到历史缓冲器606(即,以类似于电子装置中的直写式高速缓存存储器的方式)。然而,n字节行被保留在历史缓冲器606中,直到已经向历史缓冲器606写入足够的后续n字节行以覆写n字节行为止。换句话说,尽管n字节行的复本被存储在存储器404中,但n字节行仍在历史缓冲器606中并且可如本文所述那样使用,直到被后续数据覆写为止。在这些实施方案中,可避免在历史缓冲器606填满(例如,存储器系统繁忙等)时将n字节行写回存储器的问题。
61.在一些实施方案中,使用一个或多个数据末尾机制来处理基于文字写入命令和字符串复制命令生成的更靠近原本将被后续重新创建的原始数据推出暂存器阵列和/或历史缓冲器的压缩数据的末尾的重新创建的原始数据的n字节行。一般来讲,一个或多个数据末尾机制确保所有重新创建的原始数据最终存储在存储器404中,而不卡在暂存器阵列604和/或历史缓冲器606中。例如,在一些实施方案中,重新创建的原始数据基于暂存器阵列604和/或历史缓冲器606中的重新创建的原始数据的年限或寿命而流过或继续通过暂存器阵列604和历史缓冲器606。在这些实施方案中,在数据达到给定的年限或寿命时,暂存器阵列604和/或历史缓冲器606自动地将数据分别迁移到历史缓冲器606和存储器404。作为另一个示例,在一些实施方案中,在压缩数据的末尾(例如,作为最后的字符、命令、符号等)处或附近,压缩数据包括“数据末尾”(“文件末尾”等)字符、命令、符号等。数据末尾字符、命令、符号等致使命令处理器触发暂存器阵列604和/或历史缓冲器606自动地将数据分别迁移到历史缓冲器606和存储器404。以此方式,重新创建的原始数据最终将流到或前进到存储器404,即使位于压缩数据的末尾。
62.在一些实施方案中,暂存器阵列604和历史缓冲器606包括使得能够确定关于先前重新创建的原始数据的信息的机制。这些机制保持跟踪关于在处理先前的文字写入命令和字符串复制命令时生成的重新创建的原始数据并与其相关联的信息。在一些实施方案中,机制包括行计数器630和字节有效(bv)跟踪器634。行计数器630是执行用于维持行计数632的操作的功能块,该行计数指示在处理文字写入命令和字符串复制命令时已经从暂存器阵列604迁移到历史缓冲器606(直到当前时间)的n字节行的数量。在每个n字节行从暂存器阵列604移动/迁移到历史缓冲器606时,行计数器630使行计数632增加。因此,行计数632指示当前存储在历史缓冲器606和存储器404中(和/或提供到另一个实体,诸如处理子系统406、网络接口、传感器等)的先前重新创建的原始数据的n字节行的总数量。在一些实施方案中,行计数632存储在通过相对直接的信号线路耦合到字符串复制引擎602的存储器元件中,并且因此可由字符串复制引擎602快速地访问。
63.字节有效跟踪器634是执行用于将一组字节有效指示符(ind)638维持在字节有效阵列636中的操作的功能块。字节有效阵列636中的单独字节有效指示符638与暂存器阵列604中的n字节行中的每个字节相关联。在将重新创建的原始数据写入暂存器阵列604中的每个字节时,字节有效跟踪器634设置对应的字节有效指示符638以指示有效的重新创建的原始数据存在于该字节中。在将重新创建的数据的字节从暂存器阵列604移动/迁移到历史缓冲器606(或者将暂存器阵列604中的字节初始化、清除、无效等)时,字节有效跟踪器634清除对应的字节有效指示符638以指示该字节中不存在有效的重新创建的原始数据。字节有效指示符638的示例在图7中呈现。如在图7中可见,作为来自暂存器阵列604的n字节行的示例的暂存器阵列行700在第一和第三字节具有有效数据。将作为来自字节有效阵列636的
字节有效指示符638的示例的字节有效指示符702中的对应(即,第一和第三)字节有效指示符638设置为1以指示在这些字节中数据是有效的,并且否则设置为0。在一些实施方案中,字节有效阵列634接近字符串复制引擎602,并且各个字节有效指示符638通过相对直接的信号线路耦合到字符串复制引擎602。因此,字符串复制引擎602可快速地访问字节有效指示符638以确定相关联的字节是否包含有效的重新创建的原始数据。
64.如上所述,在字符串复制命令之间可出现依赖关系(或相反,尚未解决的依赖关系)。当字符串复制命令从重新创建的原始数据复制由早前的字符串复制命令附加到重新创建的原始数据的字符串时,出现直接依赖关系。当字符串复制命令从重新创建的原始数据复制由在早前的字符串复制命令完成处理时停止的文字写入命令附加到重新创建的原始数据的字符串(并且因此字符串复制命令间接地依赖于早前的字符串复制命令)时,出现间接依赖关系。
65.字符串复制引擎602使用行计数632和字节有效阵列636来确保适当地处理字符串复制命令之间的依赖关系。字符串复制引擎602使用行计数632来确定要由字符串复制命令从在重新创建的原始数据中往回指定的数据复制的字符串是否存在于暂存器阵列604和/或历史缓冲器606中(回想一下,相同的多字节字符串的部分可存储在暂存器阵列604和历史缓冲器606中的n字节行中)。例如,字符串复制引擎602可将来自字符串复制命令的距离的相对值与行计数632进行比较,并且当差大于阈值时确定存在尚未解决的依赖关系。例如,假设暂存器阵列604保留四个n字节行,如果行计数632指示四个n字节行存在于历史缓冲器606中,则存在于暂存器阵列604和历史缓冲器606中的全部n字节行的最大数量是八(然而,回想一下,暂存器阵列604中的n字节行中的一些可能因为进行中的字符串复制命令和/或其后续的文字写入命令而尚未保留有效数据)。在这种情况下,当字符串复制命令从第十n字节行复制数据并且因此距离与行计数632之间的差是二且大于阈值零时,字符串复制引擎602确定存在尚未解决的依赖关系。换句话说,由于先前的字符串复制命令和/或文字写入命令尚未完成处理,因此已经将比使得能够从重新创建的原始数据复制用于字符串复制命令的一些或全部字符串所需的更少数量的n字节行添加到暂存器阵列604和/或历史缓冲器606中的重新创建的原始数据。在这种情况下,先前的字符串复制命令和/或一个或多个文字写入命令的处理应在字符串复制引擎602继续处理字符串复制命令之前完成。因此,字符串复制引擎602临时地停止字符串复制命令的处理,以允许先前的字符串复制命令和/或一个或多个文字写入命令的处理在字符串复制引擎602继续处理字符串复制命令之前完成。
66.字符串复制引擎602使用字节有效指示符638来确定要由字符串复制命令从暂存器阵列604复制的字符串是否存在并准备好从暂存器阵列604复制。换句话说,先前的字符串复制命令和/或文字写入命令可能尚未将必要的重新创建的原始数据写入暂存器阵列604,并且因此暂存器阵列604中的特定字节仍是无效的。因此,字符串复制引擎602检查字节有效指示符是否指示必要的数据存在于暂存器阵列604中的n字节行的字节中。如果数据尚未存在,则字符串复制引擎602临时地停止字符串复制命令的处理,以允许先前的字符串复制命令和/或一个或多个文字写入命令的处理在字符串复制引擎602继续处理字符串复制命令之前完成。
67.在一些实施方案中,成对地完成行计数632和字节有效指示符638的上述检查,其
中根据需要一个接着另一个。在这些实施方案中,当处理字符串复制命令时,字符串复制引擎602检查如上所述的行计数632以确保给定的n字节行在暂存器阵列604中(同样,n字节行可能因进行中的字符串复制命令和/或其后续的文字写入命令而尚未被完全写入)。然后,如果行计数632指示给定的n字节行存在于暂存器阵列604中,则字符串复制引擎602检查字节有效指示符638以确保n字节行的特定字节存在于暂存器阵列604中。如果这些检查中的任一者失败(即,表明n字节行不存在于暂存器阵列604中或特定字节尚未存在于暂存器阵列604中),则字符串复制引擎602临时地停止字符串复制命令的处理,以允许先前的字符串复制命令和/或一个或多个文字写入命令的处理在字符串复制引擎602继续处理字符串复制命令之前完成。
68.在字符串复制引擎602已经确保没有尚未解决的依赖关系阻止处理字符串复制命令之后,字符串复制引擎602处理字符串复制命令。一般来讲,处理字符串复制命令涉及从暂存器阵列604和/或历史缓冲器606获取先前重新创建的原始数据的字符串(即,一个或多个字节)并且将该字符串附加到重新创建的原始数据。为了获取字符串,字符串复制引擎602使用距离614来确定暂存器阵列604或历史缓冲器606中的要开始字符串复制的位置(例如,要读取的第一字节)。字符串复制引擎602还使用长度616来确定要从暂存器阵列604和/或历史缓冲器606读取的重新创建的原始数据的字节数量。从暂存器阵列604或历史缓冲器606中的位置开始,字符串复制引擎602然后例如经由暂存数据640和读取数据642来按顺序从暂存器阵列和/或历史缓冲器读取重新创建的原始数据的该数量的字节。对于读取操作,字符串复制引擎602可直接读取暂存器阵列604中的顺序逻辑存储元件,但执行用于读取历史缓冲器606中的存储器元件的典型存储器读取操作(例如,在使用sram实现历史缓冲器606时的sram存储器读取操作等)。为了将字符串附加到重新创建的原始数据,字符串复制引擎602将字符串(即,从暂存器阵列604和历史缓冲器606读取的重新创建的原始数据的字节)写入暂存器阵列604和/或历史缓冲器606中的位置,如由地址618所标识。应注意,足够长的多字节字符串的单独部分可存储在暂存器阵列604和历史缓冲器606中,并且因此字符串的部分可从暂存器阵列604和历史缓冲器606读取并写入所述暂存器阵列和所述历史缓冲器,如上所述(即,数据可从暂存器阵列604迁移到历史缓冲器606以在暂存器阵列604中为更长的字符串让出空间)。
69.尽管在图5至图7中的解压缩子系统408和命令处理器502中呈现了特定数量和布置的功能块,但在一些实施方案中,解压缩子系统408和命令处理器502中存在不同数量和/或布置的功能块。例如,在一些实施方案中,命令处理器502包括两个或更多个命令缓冲器和/或三个或更多个字符串复制引擎,如使用图5中的多个框所示。作为另一个示例,在一些实施方案中,历史缓冲器606被“虚拟化”,并且上文描述为存储在历史缓冲器606中的重新创建的原始数据中的至少一些反而存储在存储器404中。在这些实施方案中,将重新创建的原始数据写入历史缓冲器606的至少一些部分和从中读取先前重新创建的原始数据涉及在存储器404中执行虚拟历史缓冲器访问644。应注意,将历史缓冲器606虚拟化意味着历史缓冲器606需要更少的存储器元件,并且因此历史缓冲器606可在布局大小方面更小、使用更少的电力等,但对于存储在存储器404中的重新创建的原始数据的访问时间增加。
70.用于对压缩输入数据进行解压缩的过程
71.在所描述的实施方案中,包括命令生成器和命令处理器(例如,命令生成器500和
命令处理器502)的解压缩子系统(例如,解压缩子系统408)执行用于对压缩输入数据(例如,压缩输入数据504)进行解压缩以生成重新创建的原始数据(例如,重新创建的原始数据510)的操作。图8呈现了示出根据一些实施方案的用于对压缩输入数据进行解压缩的过程的流程图。应注意,图8示出的操作被呈现为由一些实施方案执行的操作的一般示例。由其他实施方案执行的操作包括不同的操作、以不同的次序执行的操作和/或由不同的实体或功能块执行的操作。
72.对于图8示出的过程,假设解压缩子系统接收来自源(诸如文件、数据流等)的压缩输入数据。换句话说,压缩输入数据的各个位正在由解压缩子系统接收,并且因此可供解压缩子系统中的命令生成器和命令处理器进行操作。在一些实施方案中,解压缩子系统简单地(并且可能仅)对由另一个实体(例如,处理子系统、存储器)提供到解压缩子系统的压缩输入数据进行解压缩,以生成字符串来重新创建从中创建出压缩输入数据的原始数据。换句话说,在这些实施方案中,解压缩子系统不执行除了输出从提供到解压缩子系统的压缩输入数据生成的重新创建的原始数据外的操作。然而,在一些实施方案中,解压缩子系统包括用于执行诸如从存储器和/或其他位置或实体(例如,处理子系统、网络接口、io装置等)检索数据的其他操作、用于将重新创建的原始数据的字符串存储在存储器中和/或将重新创建的原始数据的字符串提供到其他实体等的功能块。
73.对于图8中的示例,第一字符串复制引擎和第二字符串复制引擎“基本上并行地”执行某些操作,因为这些操作大致在相同时间执行。这在图8中可被视为流程图的并行分支(即,包括步骤802至804的分支和包括步骤806至812的分支)。这些操作大致在相同时间执行,因为操作在相同时间或差不多相同时间开始,例如在仅具有一个命令缓冲器(例如,命令缓冲器600)的实施方案中的控制时钟的连续周期中、在具有两个或更多个命令缓冲器的实施方案中的相同时钟周期中等。另外,尽管图8中未示出,但第一字符串复制引擎最初检查第一字符串复制命令与先前的字符串复制命令的尚未解决的依赖关系(关于图10更详细地描述依赖关系检查)。对于图8的示例,假设未发现尚未解决的依赖关系,并且因此第一字符串复制引擎继续处理第一字符串复制命令。
74.如在图8中可见,该过程在命令处理器将第一字符串复制命令转发到第一字符串复制引擎并且将第二字符串复制命令转发到第二字符串复制引擎时开始(步骤800)。对于该操作,命令处理器中的一个或多个命令缓冲器(例如,命令缓冲器600)从命令生成器(例如,命令生成器500)接收信息(例如,距离614、长度616和地址618)以用于处理第一字符串复制命令和第二字符串复制命令中的每一者。一个或多个命令缓冲器然后将适当的信息转发到第一字符串复制引擎以处理第一字符串复制命令并且转发到第二字符串复制引擎以处理第二字符串复制命令。
75.在接收到第一字符串复制命令时,第一字符串复制引擎从重新创建的原始数据获取第一字符串(步骤802)。对于该操作,第一字符串复制引擎基于距离来确定暂存器阵列(例如,暂存器阵列604)或历史缓冲器(例如,历史缓冲器606)中的要从中读取第一字符串的位置,并且因此确定要针对第一字符串获取的特定重新创建的原始数据。例如,第一字符串复制引擎可使用该距离来计算暂存器阵列或历史缓冲器中的开始从中读取第一字符串的n字节行中的特定字节。第一字符串复制引擎然后基于字符串的长度从暂存器阵列或历史缓冲器中的该位置开始按顺序从暂存器阵列和/或历史缓冲器读取第一字符串的一个或
多个字节。在该操作结束时,第一字符串复制引擎具有第一字符串的一个或多个字节的复本。
76.第一字符串复制引擎然后将第一字符串附加到重新创建的原始数据(步骤804)。对于该操作,第一字符串复制引擎将第一字符串(其为重新创建的原始数据)的各个字节从暂存器阵列中的由地址指示的位置开始写入暂存器阵列中的位置。应注意,一个或多个先前的字符串复制命令和/或文字写入命令可能没有完成其向暂存器阵列的相应写入,并且因此第一字符串命令可将数据写入暂存器阵列中的超过暂存器阵列中的重新创建的原始数据的当前末尾的字节。然而,对于附加操作,第一字符串复制引擎可能只是将重新创建的原始数据添加到现有的重新创建的原始数据的末尾。另外,当第一字符串足够长和/或暂存器阵列已经足够地填满先前重新创建的原始数据时,暂存器阵列可按先入先出次序将重新创建的原始数据迁移到历史缓冲器以释放一个或多个n字节行,以供第一字符串复制引擎继续将重新创建的原始数据写入暂存器阵列。
77.在接收到第二字符串复制命令时,第二字符串复制引擎检查第二字符串复制命令对第一字符串的直接或间接依赖关系(步骤806)。如上所述,可出现尚未解决的直接或间接依赖关系,因为第一字符串复制命令和第二字符串复制命令基本上并行地执行并且第一字符串复制命令尚未将重新创建的原始数据写入暂存器阵列和/或数据尚未从暂存器阵列迁移到要针对第二字符串复制的历史缓冲器。对于该操作,第二字符串复制引擎检查这些尚未解决的依赖关系(关于图10更详细地描述依赖关系检查)。当发现直接或间接依赖关系(即,尚未解决的依赖关系)时,第二字符串复制引擎停止第二字符串复制命令的进一步处理,直到解决了依赖关系为止(步骤808)。对于该操作,第二字符串复制引擎停止或以其他方式延迟处理第二字符串复制命令,直到第一字符串复制命令已经将第二字符串所需的第一字符串的部分写入暂存器阵列和/或历史缓冲器中为止。
78.第二字符串复制引擎然后从重新创建的原始数据获取第二字符串(步骤810)。对于该操作(或对于依赖关系的早前确定),第二字符串复制引擎基于距离来确定暂存器阵列或历史缓冲器中的要从中读取第二字符串的位置,并且因此确定要针对第二字符串获取的特定重新创建的原始数据。例如,第二字符串复制引擎可使用该距离来计算暂存器阵列或历史缓冲器中的开始从中读取第二字符串的n字节行中的特定字节。第二字符串复制引擎然后基于第二字符串的长度从暂存器阵列或历史缓冲器中的该位置开始按顺序从暂存器阵列和/或历史缓冲器读取第二字符串的一个或多个字节。在该操作结束时,第二字符串复制引擎具有第二字符串的一个或多个字节的复本。
79.第二字符串复制引擎然后将第二字符串附加到重新创建的原始数据(步骤812)。对于该操作,第二字符串复制引擎将第二字符串(其为重新创建的原始数据)的各个字节写入暂存器阵列中的位置。应注意,一个或多个先前的字符串复制命令和/或文字写入命令可能没有完成其向字符串复制引擎的相应写入,并且因此第二字符串命令可将数据写入暂存器阵列中的超过暂存器阵列中的重新创建的原始数据的当前末尾的字节。然而,对于附加操作,第二字符串复制引擎可能只是将重新创建的原始数据添加到现有的重新创建的原始数据的末尾。另外,当第二字符串足够长和/或暂存器阵列已经足够地填满先前重新创建的原始数据时,暂存器阵列可按先入先出次序将重新创建的原始数据迁移到历史缓冲器以释放一个或多个n字节行,以供第二字符串复制引擎继续将重新创建的原始数据写入暂存器
阵列。
80.用于处理暂存器阵列和历史缓冲器中的重新创建的原始数据的过程
81.在所描述的实施方案中,解码子系统中的命令缓冲器和字符串复制引擎将重新创建的原始数据(即,文字和字符串)分别写入暂存器阵列和历史缓冲器。由于重新创建的原始数据被写入暂存器阵列和历史缓冲器,因此数据通过暂存器阵列和历史缓冲器前进到或流到存储器。图9呈现了示出根据一些实施方案的用于将重新创建的原始数据存储在暂存器阵列和历史缓冲器中的过程的流程图。应注意,图9示出的操作被呈现为由一些实施方案执行的操作的一般示例。由其他实施方案执行的操作包括不同的操作、以不同的次序执行的操作和/或由不同的实体或功能块执行的操作。
82.对于图9的示例,在命令缓冲器或字符串复制引擎准备输出重新创建的原始数据的字节时,执行用于移动或迁移暂存器阵列和/或历史缓冲器中的数据的操作。然而,在一些实施方案中,图9的操作可在任何时间执行。例如,在一些实施方案中,图9的操作动态地执行,在重新创建的原始数据被写入暂存器阵列和/或历史缓冲器中的特定位置时,重新创建的原始数据从其他位置移动以准备其他位置来接收重新创建的原始数据。以此方式,暂存器阵列和/或历史缓冲器准备“即时”接收重新创建的原始数据。一般来讲,在所描述的实施方案中,根据需要使位置可用于将重新创建的原始数据的字节存储在暂存器阵列和/或历史缓冲器中。另外,对于图9中的示例,重新创建的原始数据被描述为前进到或流到存储器,但这仅仅是示例。在一些实施方案中,重新创建的原始数据前进到或流到另一个目的地,诸如处理子系统、网络接口、io装置等。应注意,在压缩输入数据被解压缩时,所有重新创建的原始数据最终通过暂存器阵列和历史缓冲器前进到或流到存储器(或另一个实体),重新创建的原始数据存储在那里以用于其他操作,并且暂存器阵列和历史缓冲器最终将是空的。
83.如在图9中可见,该过程在命令缓冲器或字符串复制引擎准备输出重新创建的原始数据的字节时开始(步骤900)。例如,命令缓冲器可将文字附加到重新创建的原始数据,或者字符串复制命令可将字符串附加到重新创建的原始数据。
84.在重新创建的原始数据可被写入暂存器阵列和/或历史缓冲器之前,解压缩子系统(例如,在暂存器阵列和/或历史缓冲器中或与其相关联的控制器等)确保暂存器阵列和/或历史缓冲器中有足够的空间来存储数据。对于该操作,解压缩子系统确定暂存器阵列中的所有n字节行是否是满的(填满先前重新创建的原始数据)(步骤902)。当先前的文字写入命令和/或字符串复制命令已经致使命令缓冲器和/或字符串复制引擎将足够的输入写入暂存器阵列以填满暂存器阵列中的相对少量的n字节行时,可出现这种情况。当暂存器阵列中的所有行是满的时,解压缩子系统确定历史缓冲器中的所有行是否是满的(步骤904)。当历史缓冲器中的所有行是满的(步骤904)时,解压缩子系统将数据的字节从历史缓冲器中的一个或多个n字节行移动或迁移到存储器(例如,存储器404)以释放历史缓冲器中的一个或多个n字节行(步骤906)。解压缩子系统将数据的字节从暂存器阵列中的一个或多个n字节行移动或迁移到历史缓冲器中的一个或多个n字节行(步骤908)。在该操作结束时,暂存器阵列和/或历史缓冲器中有足够的空间来存储重新创建的原始数据的字节。
85.命令缓冲器或字符串复制引擎然后将重新创建的原始数据的字节存储到暂存器阵列中的给定的n字节行的下一字节(步骤910)。对于该操作,命令缓冲器或字符串复制引
擎按顺序将重新创建的原始数据的字节存储到暂存器阵列中的给定的n字节行中(回想一下,来自先前的字符串复制命令和/或其后续的文字写入命令的所有重新创建的原始数据可能尚未被写入n字节行的先前字节中,并且因此重新创建的原始数据“按顺序”从一个或多个尚未有效的字节之后的特定位置写入n字节行中)。如果将字节写入暂存器阵列中的给定的n字节行填满给定的n字节行(步骤912),即,如果给定的n字节行中的所有字节是满的,则将暂存器阵列中的下一n字节行用作给定的n字节行(步骤914)。换句话说,在暂存器阵列中的特定n字节行填满时,重新创建的原始数据的后续字节将被写入暂存器阵列中的下一n字节行。如果没有更多的字节要附加到暂存器阵列或历史缓冲器中的重新创建的原始数据(即,如果重新创建的原始数据的所有字节已经被命令缓冲器或字符串复制引擎输出)(步骤916),则该过程结束。否则,如果存在重新创建的原始数据的更多字节(步骤916),则该过程返回到步骤902,其中先检查暂存器阵列和/或历史缓冲器的填满情况(步骤902至908),然后再将下一字节附加到重新创建的原始数据(步骤910)。
86.用于检查依赖关系的过程
87.在所描述的实施方案中,在由先前的文字写入命令和字符串复制命令写入暂存器阵列和/或历史缓冲器的字符串上检查字符串复制命令的依赖关系。图10呈现了示出根据一些实施方案的用于检查字符串复制命令的依赖关系的过程的流程图。应注意,图10示出的操作被呈现为由一些实施方案执行的操作的一般示例。由其他实施方案执行的操作包括不同的操作、以不同的次序执行的操作和/或由不同的实体或功能块执行的操作。
88.图10中的过程在解压缩中的功能块维持用于确定依赖关系的记录时开始。更具体地,在将重新创建的原始数据的一个或多个字节存储到暂存器阵列中的一个或多个n字节行中的字节中时,字节有效跟踪器(例如,字节有效跟踪器634)设置与一个或多个字节中的每一者相关联的字节有效指示符(例如,字节有效指示符638)来指示相关联的字节在存储重新创建的原始数据(步骤1000)。对于该操作,字节有效跟踪器在字节有效阵列(例如,字节有效阵列636)中将字节有效指示符设置为诸如1的值,以指示暂存器阵列中的对应字节存储有效的重新创建的原始数据。另外,在将重新创建的原始数据的n字节从暂存器阵列中的字节行移动到历史缓冲器中的n字节行时,行计数器(例如,行计数器630)使指示先前附加到重新创建的原始数据的n字节行的数量的行计数增加(步骤1002)。对于该操作,在值得重新创建的原始数据的每个n字节行从暂存器阵列迁移到历史缓冲器时,行计数器使行计数增加,从而更新行计数以保留存在于历史缓冲器和存储器中的n字节行的数量(对于从历史缓冲器迁移到存储器的行)。
89.解压缩子系统然后使用记录(即,行计数和字节有效指示符)来确定字符串复制命令是否存在尚未解决的依赖关系。换句话说,字符串复制引擎(或另一个实体)使用字节有效指示符和/或行计数来检查字符串复制命令对重新创建的原始数据的先前字符串的直接或间接依赖关系(步骤1004)。对于该操作,对于给定的字符串复制命令,字符串复制引擎将要获取的先前重新创建的原始数据的字符串的距离和长度与行计数的值进行比较以确定包括所需数据的n字节行是存在于(还是不存在于)暂存器阵列和/或历史缓冲器中。当行计数表明比所需更少的重新创建的原始数据已经被写入暂存器阵列和/或历史缓冲器(并且因此n字节行尚未存在于暂存器阵列和/或历史缓冲器中)时,字符串复制引擎检测到尚未解决的依赖关系。另外,当字节指示符表明字符串复制命令所需的重新创建的原始数据的
字节尚未存在于暂存器阵列中时,字符串复制引擎检测到尚未解决的依赖关系。如上所述,在检测到尚未解决的依赖关系时,字符串复制引擎停止处理字符串复制命令来使得所需的重新创建的原始数据能够写入暂存器阵列和/或历史缓冲器。在一些实施方案中,停止指定的时间,直到特定字节被检测为存在(例如,通过周期性地重新检查字节有效指示符和/或行计数等)为止、直到先前的文字写入命令和/或字符串复制命令退出为止等。
90.在一些实施方案中,至少一个电子装置(例如,电子装置400)使用存储在非暂时性计算机可读存储介质上的代码和/或数据来执行本文描述的操作中的一些或全部。更具体地,当执行所描述的操作时,至少一个电子装置从计算机可读存储介质读取代码和/或数据并且执行该代码和/或使用该数据。计算机可读存储介质可以是存储代码和/或数据以供电子装置使用的任何装置、介质或它们的组合。例如,计算机可读存储介质可包括但不限于易失性和/或非易失性存储器,包括快闪存储器、随机存取存储器(例如,edram、ram、sram、dram、ddr4 sdram等)、非易失性ram(例如,相变存储器、铁电随机存取存储器、自旋转移矩随机存取存储器、磁阻随机存取存储器等)、只读存储器(rom)和/或磁性或光学存储介质(例如,磁盘驱动器、磁带、cd、dvd等)。
91.在一些实施方案中,一个或多个硬件模块执行本文描述的操作。例如,硬件模块可包括但不限于一个或多个处理器/核心/中央处理单元(cpu)、专用集成电路(asic)芯片、神经网络处理器或加速器、现场可编程门阵列(fpga)、解压缩和/或解码子系统、计算单元、嵌入式处理器、图形处理器(gpu)/图形核心、流水线、加速处理单元(apu)、功能块、控制器、加速器和/或其他可编程逻辑装置。当此类硬件模块被激活时,硬件模块执行操作中的一些或全部。在一些实施方案中,硬件模块包括一个或多个通用电路,该一个或多个通用电路通过执行指令(程序代码、固件等)以执行操作来进行配置。
92.在一些实施方案中,表示本文描述的结构和机制(例如,电子装置400或其某一部分)中的一些或全部的数据结构存储在非暂时性计算机可读存储介质上,该非暂时性计算机可读存储介质包括可由电子装置读取并且直接地或间接地使用以制造包括该结构和机制的硬件的数据库或其他数据结构。例如,数据结构可以是以高级设计语言(hdl)(诸如verilog或vhdl)对硬件功能的行为级描述或寄存器传送级(rtl)描述。该描述可由综合工具读取,该综合工具可综合该描述以产生网表,该网表包括来自综合库的表示包括上述结构和机制的硬件的功能的门/电路元件的列表。然后,可放置并且路由网表以产生描述要应用于掩模的几何形状的数据集。然后,可在各种半导体制造步骤中使用掩模来生产对应于上述结构和机制的一个或多个半导体电路(例如,集成电路)。可选地,在计算机可存取存储介质上的数据库根据需要可以是网表(具有或没有综合库)或数据集,或者图形数据系统(gds)ii数据。
93.在本说明书中,变量或未指定的值(即,在没有值的特定实例的情况下对值的一般描述)由字母(诸如n、m和x)表示。如本文所使用,尽管在本说明书中的不同位置可能使用类似的字母,但是在每种情况下的变量和未指定的值不一定相同,即,一般的变量和未指定的值中的一些或全部可能预期有不同的可变量和值。换句话说,在本说明书中,用于表示变量和未指定的值的n和任何其他字母彼此不一定相关。
94.如本文所使用的表达“等”旨在呈现一者和/或案例,即,列表中与等相关联的要素中的“至少一者”的等同物。例如,在语句“电子装置执行第一操作、第二操作等”中,电子装
置执行第一操作、第二操作和其他操作中的至少一者。此外,列表中与等相关联的要素仅仅是来自一组示例中的示例,并且在一些实施方案中,这些示例中的至少一些可能不出现。
95.仅出于说明和描述的目的呈现了对实施方案的前述描述。该前述描述不旨在是详尽的或将实施方案限制于所公开的形式。相应地,许多修改和变化对本领域技术人员来说将显而易见。另外地,以上公开内容不旨在限制实施方案。实施方案的范围由所附权利要求书限定。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献