具有压缩指令的处理器及处理器指令的压缩方法

文档序号:6556829阅读:242来源:国知局
专利名称:具有压缩指令的处理器及处理器指令的压缩方法
技术领域
本发明涉及到具有压缩指令的处理器。尤其但不是专有地,本发明涉及到具有压缩指令的非常长的指令字(VLIW)处理器。本发明还涉及到压缩处理器的指令的方法。
一个VLIW指令程序可以包含许多只是在整个指令程序中填充空位的“无操作”(NOP)指令。由于把这种NOP存储在程序或程序存贮器中是一种浪费,理想的是提供一种以压缩的形式在程序存储器中存储VLIW的机制。


图1(A)表示了一个例子,初始(未压缩的)VLIW指令程序由三个VLIW包P0、P1、和P2组成。每个包由两个指令组成。因此,在这个例子中,执行该指令程序的处理器必须具有第一和第二执行单元,每个包的第一个指令(指令1)由第一执行单元执行,同时并行地,该指令包的第二个指令(指令2)由第二执行单元执行。
在图1(A)的例子中,程序中半数的位置含有NOP指令(位置1、2和4)。
图1(B)表示的是图1(A)中的指令程序是如何以其初始的未压缩形式存储于程序存储器中的。在图1(B)中,指令以按图1(A)的VLIW指令程序的从左至右并从上到下顺序扫描的方式出现。
图1(C)表示的是图1(A)中的指令程序是如何以其压缩(紧凑)形式存储于程序存储器中的。被压缩的程序的第一个字包含一个位向量,以下称为“解压缩密钥”。该解压缩密钥有多个分别对应于未压缩程序(图1(B))中的指令的位。如果密钥中的一个特定的位为0,则意味着对应于该位的指令是一个NOP指令。如果该位为1,则相应的指令是一个有用的(非NOP)指令。以这种方式,在程序的被压缩形式中的所有NOP指令可以被消除。
这样一种压缩机制在嵌入式处理环境中(在该情况下处理器被嵌入如一个移动通讯装置的系统)是非常有价值的,在该环境下,由于系统的资源如可用的程序存储器有限,高代码或指令密度是极为重要的。但是,这种压缩使并行执行指令的任务变得复杂。例如,当VLIW指令程序含有两个可以并行处理但被一些NOP指令所隔开的指令时,处理器将不得不对程序的压缩形式进行线性搜索以确定可被并行执行的指令。最重要地,在压缩后,一个指令与另一个指令之间的同时性可能不再象它们存储于程序存储器中那样,由通过观察一个指令相对于其他指令的位置而简单地确定。通常,VLIW处理(优于以并行方式发出的更复杂的指令如超标量处理)的主要优点之一是,在一个(未压缩的)VLIW指令程序中,当指令是彼此独立时(且因此可以被同时希望执行),指令有可能通过观察指令在程序中的相应位置而确定。相应地,希望的是便利独立性确定,即使是在指令程序以压缩形式存储于程序存储器的情况下。
当一个VLIW指令程序以压缩形式存储于程序存储器中时,在它们可以被提供给执行单元以执行其中所含的指令前,压缩的包当然要进行解压缩。理想的解压缩是“在空中”进行的,在指令程序的实际执行过程中进行的。为使这种“在空中”的解压缩成为可能,该解压缩必须要以一种计算上的复杂性低的方式进行并包括一个比较简单的硬件设备,以使根据损失的执行时间计算的由解压缩处理所产生的费用较小。
根据本发明的第一个方面,提供了一种用于执行以压缩形式存储于程序存储器中的程序指令的处理器,包括一个程序计数器,用于确定在所述程序存储器中的位置;一个指令高速缓冲存储器,具有多个高速缓冲存储块,每个都用于以解压缩形式存储所述程序的一个或多个指令;高速缓冲存储器加载装置,包括解压缩装置,可用于执行高速缓冲存储器的加载工作,其中一个或更多的压缩形式的指令从程序存储器的由程序计数器确定的位置读出并被解压缩并存储于指令高速缓冲存储器的一个所述缓冲存储块中;一个高速缓冲存储器指针,用于确定一个待取出执行的指令在所述指令高速缓冲存储器中的位置;指令提取装置,用于从由高速缓冲存储器指针所确定的位置取出一个待执行指令,并当由于在指令高速缓冲存储器中不存在待取出指令而发生缓冲失败时,使高速缓存加载装置执行这种缓冲器加载操作;以及更新装置,用于响应指令提取而更新程序计数器和高速缓冲存储器指针,以确保由所述的程序计数器确定的所述位置始终保持在所述程序存储器中这样的位置,即在该位置以压缩形式存储有待从指令高速缓冲存储器中取出的指令。
根据本发明的第二个方面,提供了一种压缩由处理器执行的程序的方法,其中存储于程序存储器中的压缩形式的指令在被发出之前被解压缩并存储到一个指令高速缓冲存储器中,该方法包括的步骤有把程序的一系列原指令转换成为一个相应系列的压缩形式的指令;根据所述的系列给这些原指令分配虚址,分配的虚址为当指令以解压缩形式保存在处理器的指令高速缓冲存储器中时指令被认为存在的虚址;以及将压缩形式的指令与由所述的指定的虚址确定的虚址信息一起存储到所述的程序存储器中,以便在将压缩形式的指令解压缩并由处理器加载到指令高速缓冲存储器中时,处理器可以给解压缩的指令分配特定的虚址。
根据本发明的第三个方面,提供了一种计算机程序,当该程序在计算机中运行时,它使计算机执行一个压缩待由一个处理器执行的处理器程序的方法,该处理器解压缩存储于程序存储器中的压缩形式的指令在发出该解压缩的指令之前把它的高速缓存到一个指令高速缓冲存储器中,该计算机程序包括一个转换部分,用于将该处理器程序的一系列原指令转换成为一个相应系列的这样的压缩形式的指令;一个分配部分,用于根据原指令的所述系列为该原指令指定虚址,该指定的虚址是当指令以解压缩形式保存在处理器的指令高速缓冲存储器中时被认为是指令所存在于的虚址;以及一个存储部分,用于将压缩形式的指令与指定所述的分配的虚址的虚址信息一起存储到所述的程序存储器中,以便在将压缩形式的指令解压缩并由处理器加载到指令高速缓冲存储器中时,处理器可以给解压缩的指令该指定的虚址。
现在将通过举例说明附图,其中
图1(A)、1(B)和1(C)显示的是图示VLIW指令程序的压缩的示意图;图2表示具体体现本发明的处理器的各组成部分;图3表示的是本发明的第一实施方案中一个指令发出装置的各组成部分;图4显示的是图示图3的实施方案中VLIW指令程序的压缩的示意图;图5是显示图3中的一个指令高速缓冲存储器的组成部分的内部结构图;图6是图3指令高速缓冲存储器的更详细的组成部分示意图;图7是表示图3的指令高速缓冲存储器中的高速缓存标识的示例格式图;图8表示的是本发明的第二实施方案中一个指令发出装置的各组成部分;图9是一个图示在虚存储器空间中分支的一个难点的示意图;图10表示的是一个应用事例中的压缩前的VLIW指令程序,用于图示图8的实施方案的工作;图11图示了图10的VLIW指令程序是如何被以压缩形式存储到程序存储器中的;且图12到20用于图示在图10的工作实例的不同阶段中,一个指令高速缓冲存储器状态和一个更新单元状态的相应的图形;以及图21表示了一个用于解释根据本发明的另一个方面的压缩指令方法的流程图。
图1表示实施本发明的一个处理器的几个部分。在该例中,处理器是一个非常长指令字(VLIW)处理器。处理器1包括一个指令发出单元10、一个程序存储单元12、第一、第二和第三执行单元14、16和18,以及一个寄存器文件20。指令发出单元10有三个槽口IS1、IS2和IS3分别与第一、第二和第三执行单元14、16和18相连。一个第一总线22将所有的三个执行单元14、16和18与寄存器文件20相连。一第二总线24将第一和第二执行单元14和16(但在本实施方案中不连接第三执行单元18)与存储器26相连,在本实施方案中该存储器是一个外置的随机存取存储器(RAM)。存储器26也可以是内置于处理器1中的RAM。
另外,虽然图1显示了共用的总线22和24将执行单元连接到寄存器文件20和存储器26,可以理解每一个执行单元也都可以有其自己与寄存器文件和存储器的独立连接。
处理器1执行一系列的处理循环。在每一个处理循环中,指令发出单元10可以向每一个发出槽口IS1到IS3发出一条指令。这些指令根据存储于程序存储单元12中的VLIW指令程序(如下面所述)而被发出。
指令发出单元10在不同的发出槽口所发出的指令由相应的执行单元14、16和18执行。在本实施方案中,每一个执行单元都可以同时执行一个以上的指令,所以一个新的指令可以在前一个发给有关的执行单元的指令完成前开始执行。
为执行指令,每个执行单元14、16和18都可通过第一总线22访问寄存器文件20。因此,在寄存器文件20中所保存的值可以被执行单元14、16和18读和写。第一和第二执行单元14和16还可经第二总线24访问外存储器26,以便能使存储在外存储器26中的存储位置的值也可以被读和写。第三执行单元18不访问外存储器26,所以在本实施方案中只能处理保存在寄存器文件20中的值。
图3是显示在本发明的第一实施方案中的图2所示的处理器的指令发出单元10的组成的一个框图。
在本实施方案中,指令发出单元10包括一个指令高速缓冲存储器40、一个具有解压缩寄存器44的高速缓存加载单元42、一个指令提取单元46、一个更新单元48及一个指令寄存器54。在本实施方案中的更新单元48包括三个寄存器一个程序计数寄存器(PC寄存器)50、一个压缩指令计数器寄存器(CC寄存器)51和一个高速缓冲存储器指针寄存器(VPC寄存器)52。
高速缓存加载单元42与程序存储单元12相连以从其接收压缩形式的VLIW指令VCS。高速缓存加载单元42也与指令提取单元46相连以从其接收控制信号LOAD,并还与PC寄存器50相连以接收其中保持的PC值。
指令高速缓冲存储器40与高速缓存加载单元42相连以从其接收解压缩指令DI以及与解压缩指令DI有关的一个压缩指令计数值(CC)。该指令高速缓冲存储器40也与指令提取单元46相连以从其接收控制信号FETCH并向其输出一个控制信号MISS。该指令高速缓冲存储器40还与更新单元48中的VPC寄存器52相连以从其接收其中所保持的VPC值。
指令寄存器54与指令高速缓冲存储器40相连以从其接收一个选定的处理器包PP。本实施方案的指令寄存器54有八个指令的宽度,提供八个发出槽口IS1到IS8。每一个发出槽口都被连接到分别对应的执行单元(未显示)。
指令提取单元46与更新单元48相连以向其施加一个控制信号UPDATE和上面所述的LOAD信号。
更新单元48中的VPC寄存器52也与高速缓存加载单元相连以从其接收一个提取的与解压缩指令DI有关的VPC值EVPC。更新单元48中的CC寄存器51与指令高速缓冲存储器40相连以从其接收一个存取的高速缓冲存储器块指令计数值ACC。
现在参考图4到7描述图3中所示各单元的工作过程。
图2中的处理器可以有选择地按两种模式工作标量模式和VLIW模式。在标量模式下,处理器执行来自特定指令程序的指令(它可以与也可以不与VLIW指令程序截然不同),但不试图以并行方式向发出槽口IS1到IS8发出指令。另一方面,在VLIW模式下,可以在每个指令循环以并行方式在8个发出槽口IS1到IS8发出多达8个指令,即,总的指令发出宽度都被利用了。
标量模式指令和VLIW模式指令都被存储于程序存储单元12中,其中VLIW指令以预定的压缩形式存储。保存在PC寄存器50中的程序计数(PC)值被用于确定标量模式和VLIW模式下程序存储单元12中所到达的存储的指令序列的位置。对于以标量模式的工作在此不作进一步的详细考虑。
图4表示的是以压缩形式存储于程序存储单元12中的VLIW指令的VCS段。这种压缩形式基本上与前面参考图1(A)到1(C)所描述的相同,所不同的是在图4的VCS段的第一个字是用于存储一个虚址的值(VPC值),如后面将做的更详细的解释。VCS段的第二个字是用于储存解压缩VCS段所存的指令所需的解压缩密钥KEY。VCS段的其余的字用于存储属于该区域的任何非NOP指令。因此,在VCS段不直接存有NOP指令。
当处理器试图执行压缩的VLIW指令的VCS段时,PC寄存器50将在开始时指向该段的开始位置。为确定在VCS段的哪个指令属于同一个处理器包(即,是必须在发出槽口IS1到IS8同时发出的指令),以及在包的哪个位置,该压缩的VCS段必须被解压缩。在图3的指令发出单元10中,VCS段被解压缩部分44解压缩,且解压缩的指令块DI被存储于指令高速缓冲存储器40中。因此,对应于VLIW压缩段VCS的、解压缩的指令块DI,即使在执行时,实际上也并不存储在程序存储单元12中,且在执行时解压缩的指令DI只是以“虚址空间”的形式存在于指令高速缓冲存储器40中。
压缩的VLIW的VCS段的起点的程序地址到其虚址的映象,由用于汇编/链接处理器的程序的汇编器/链接器产生。本实施方案的映象信息是图4中所示的VPC值,被存储于压缩的VCS段的第一个字中。因此,如图4所示,PC寄存器50指向程序存储单元(正常程序存储器)12中压缩的VLIW的VCS段的起点。在VCS段的第一个字上所保存的VPC值是一个指向虚存储器中的解压缩的指令块DI的起点的指针(即,一个进入解压缩块DI的入口点)。
在本实施方案中,如图4所示,解压缩块DI由32个字构成。这需要一个32位的解压缩密钥KEY。在一个32位的处理器中,这意味着该解压缩密钥KEY只占用压缩的VCS段的一个字,相应于解压缩块的大小的6.25%的压缩空间开销。当指令程序是紧凑的(即,只有很少的NOP)时,这种在压缩码上的开销将接近6.25%,这是一个可接受的值。但当程序是稀疏的时,压缩码上的开销相对于码的总值会高些,但是在存储器中的净节省还是显著的。如果v是没有NOP的程序中的指令的比值(即,v表示数码密度),则压缩的VCS段的大小SVCS将为SVCS=2+32v字,且当v<93.8%时,即,当多达32个指令的指令块中的任意两个或更多的指令是NOP时,净空间节省将被实现。
图5更详细地表示了本实施方案的指令高速缓冲存储器40的内部构造。如图5所示,指令高速缓冲存储器40以行与列的形式构成,每个行表示一个单独的处理器包PP,而每一列表示处理器包中的指令。指令高速缓冲存储器40也被再分成多个(在本例中为4个)高速缓存块(CB0到CB3)。在本例中,每个高速缓存块都由32个字组成。由于在每个处理器包中有八个指令,在指令高速缓冲存储器40中的每个高速缓存块都包括四个处理器包。
当前保存在VPC寄存器52中的VPC值,通常用于确定当前被发出,即加载到指令寄存器54的处理器包。
图6更详细地表示了本实施方案的指令高速缓冲存储器40的结构。指令高速缓冲存储器40包括一个指令存储单元410、一个标识单元420、一个索引提取单元430,以及一个高速缓存命中检测单元440。指令存储单元410被用于存储解压缩的指令并被包括在已参考图5所描述的高速缓存块中。指令存储单元410中的每个高速缓存块都有一个保存在标识单元420内的独立相关的高速缓存标识CT。图7中表示了各个高速缓存标识CT的一个例子。在该例中,高速缓存标识有三个场。第一个场(V-场)是一个单位场,用于指示标识的有效性。当V=0时,这表示相应的高速缓存块不含有效数据(指令)。当V=1时,表示相应的高速缓存块含有有效指令。
高速缓存标识CT的第二个场(CC)是一个5个位的场,用于储存表示相关的高速缓存块中的非NOP指令数的压缩的指令计数值(CC)。该场的目的将在后面的详细说明中更详细地解释。
第三个场(IBA场)用于储存一个有效地表示有关的高速缓存块在虚址空间中的地址的虚块地址(IBA),该虚址空间已参考图4在前面描述。IBA场的长度可以近似地为32位。
再参考图6,当指令储存单元410的高速缓存块将要被存取时,该块由从VPC寄存器52(图5)提供的虚址值(VPC值)标明。在本实施方案中,高速缓冲存储器40是一个直接映象的高速缓冲存储器,虚址空间中的任何特定的地址只能映象到高速缓冲存储器40的高速缓存块中的唯一的一个上。根据接收到的VPC值标明所需的高速缓存块的过程执行如下。
首先,索引提取单元430从接收到的VPC值中提取一个索引值INDEX。该索引值INDEX由一个从接收到的VPC值中预选的连续位组(位场)组成。INDEX中的位数是i,而2i是高速缓冲存储器40中的高速缓存块的总数。索引值INDEX被直接用于从保存在标识单元420内的高速缓存标识组中寻址一个高速缓存标识CT。
被访问的高速缓存标识CT的V和IBA场由标识单元420输出到高速缓存命中检测单元440。
当发现接收到的VPC值与保存在高速缓存标识的IBA场的IBA值相匹配,且V场指出相关的高速缓存块含有有效指令(V=1)时,高速缓存检测单元440确定一个高速缓存“命中”已经发生。在这种情况下,指令存储单元410中相关的高速缓存块所需寻址的高阶地址位由匹配的高速缓存标识的标识数TN直接提供。用这种方法,高速缓存块被确定。为从已确定的块中选择一个独立的处理器包,需要低阶地址位。例如,如果每个块包含四个处理器包(如图5),需要两个低阶地址位。这些低阶地址位可以直接从所接收的VPC值中的相应的低阶地址位获得。
如果没有具有与接收到的VPC值匹配的IBA值的高速缓存标识出现在标识单元420中,或者如果有这种匹配标识但标识的V场是0,则高速缓存拾取单元440产生MISS控制信号,指出发生了一个是高速缓存“未命中”(“miss”)。
另外,由于VPC值只是用于确定处理器包,与处理器包中的单独的指令或偶字节相反,VPC值(和各IBA)的z个最低有效位是0,其中2z是每个处理器包中的字节数。相应地,这些最低有效z位在VPC寄存器52或在每个高速缓存标识的IBA场中不被执行。进一步说,由于每个IBA值只是用于确定一个虚块地址,即,其中有解压缩指令DI的高速缓存块的中的起点的虚址,每个IBA的进一步的y个最低有效位也是0,其中y是每个高速缓存块中的处理器包数。这些进一步的y个位也不在每个高速缓存标识的IBA场中执行。
再参考图3,当FETCH控制信号被指令提取单元46提供给指令高速缓冲存储器40时,可能有两种结果高速缓存命中或高速缓存未命中。在高速缓存命中的情况下,由保存在VPC寄存器52中的VPC值确定的当前处理器包被直接加载到指令寄存器54,然后,UPDATE控制信号由指令提取单元46提供给更新单元48。保存在VPC寄存器52中的VPC值响应于UPDATE信号而被增值以指向指令高速缓冲存储器的下一个处理器包。当高速缓存命中响应于FETCH信号而发生时,保存在匹配高速缓存标识的CC场中的该值也被加载到CC寄存器。
如果高速缓存未命中响应于FETCH信号而发生时,高速缓存拾取单元440提供MISS信号到指令提取单元46。在这种情况下,在具有由当前VPC值确定的虚址的处理器包可以被提取到指令寄存器54中之前,需要执行一个高速缓冲存储器加载操作,以把一个包含该处理器包的解压缩指令块加载到指令高速缓冲存储器40的一个可用的高速缓存块。这样一个高速缓存加载由指令提取单元通过提供LOAD信号到高速缓存加载单元42而启动。
当发生高速缓存未命中时,包含在由保存在PC寄存器50中的PC值指向的程序存储单元12中的地址中的VPC值将总是与保存于VPC寄存器52中的现行VPC值相匹配。这意味着所需的VCS段压缩形式的VLIW码的加载可以从该地址直接开始。
首先,在借助索引提取单元430从当前VPC值中提取的INDEX值所寻址的高速缓存标识中,V场被设成1,且IBA场上加载了保存在VPC寄存器52中的当前VPC值的高阶位。用这种方式,与访问的高速缓存标识有关的高速缓存块得到预留,以用于储存相应于由PC寄存器指示的压缩的VCS段的解压缩指令。
其次,解压缩段44的内部计数值CC被设为0。
然后,由PC寄存器指向的压缩形式的VLIW码的解压缩密钥KEY被从程序储存单元12的PC+k存储位置读出,其中k是每个字中的字节数。解压缩密钥KEY被提供给解压缩段44。
解压缩段44检验解压缩密钥KEY的每个位。如果位是1,高速缓存加载单元42从程序存储单元12的由PC+k(CC+1)给定的地址加载压缩段VCS的一个指令字。该被加载的指令字随后被储存在所预留的高速缓存块中相应于该检验位的位置。内部计数值CC随之增加1。
另一方面,如果检验的位值为0,解压缩段44输出一个NOP指令字,该指令字被存储于确定的高速缓存块中相应于该检验位的位置。在这种情况下内部计数值CC不增加。
当解压缩密钥的所有位都以这种方式被检验完时,最终达到的内部计数值CC由高速缓存加载单元12输出并存储于与预留的高速缓存块有关的高速缓存标识CT的CC场中。这完成了高速缓存加载工作。
在高速缓存加载工作结束之后,最后一步是从新加载的高速缓存块把当前的处理器包PP加载到指令寄存器54。当该包加载到指令寄存器54中时,与新加载的高速缓存块有关的高速缓存标识的CC场作为ACC值被输出。该ACC值被存储于更新单元的CC寄存器51。
应当理解的是,在图3的指令发出单元10中,VLIW代码段的解压缩“在空中”发生,即当指令被加载到高速缓冲存储器中时发生。这种“在空中”的解压缩是复杂的,因为指令高速缓冲存储器40的容量受限制,且对于处理器来说切换处理并不少有,例如响应于中断的接收。结果,很有可能在两个连续的属于同一个高速缓存块的处理器包发出之间,有关的高速缓存块会被带进其自身的VLIW指令的另一个程序从高速缓冲存储器逐出。这意味着在实际工作中,对所有的高速缓冲存储器都有可能不命中。因此,在任何指令循环中,处理器必须有能力用属于未命中的高速缓存块的(解压缩的)指令对高速缓冲存储器进行再加载。这产生了一个实际问题,即保存在VPC寄存器中的VPC值(解压缩指令的虚址)在确定为获得的那些解压缩指令所需压缩段VCS中的用处很小,而且没有简单的函数可以从一个VPC值变换到一个PC值-在该PC值由VPC所指向的VLIW包以压缩形式被定位。
因为这个原因,在图3中的实施方案中,PC值和VPC值总是通过更新单元48彼此保持一致。以这种办式保证无论何时发生高速缓存未命中,PC都将指向由VPC指向的未命中高速缓存块的压缩表达的起点。这种一致性在本实施方案中通过储存下个段的定位信息(即一个PC值)而得到保证,该定位信息用于确定在该压缩段之后的下一个压缩段在程序存储器中的位置,该压缩段的相应的高速缓存块最近被存取以提取一个指令。
尤其是,每次指令高速缓冲存储器40中的一个高速缓存块被存取以提取一个指令时,CC寄存器51都被用下一段的定位信息更新,该定位信息用于确定相应于被存取的高速缓存块的压缩段之后的下一个压缩段的位置。在本实施方案中的该下一段的定位信息是相应于最近存取的高速缓存块的压缩段的压缩指令计数值(CC值)。该CC值代表相应于该最近存取的高速缓存块的压缩段的尺寸。
在本实施方案中,为使CC值对任何有效的高速缓存块都立即可用,与每个高速缓存块有关的高速缓存标识在其CC场中保存相应于有关高速缓存块的压缩段的CC值。储存在CC场的CC值由解压缩段44在高速缓存加载工作期间产生,在加载期间压缩段被加载到高速缓冲存储器。由于每个有效高速缓存块的CC值在高速缓冲存储器加载时产生并被保存于相关于该块的高速缓存标识的CC场中,当任何高速缓存块被存取以提取指令时,该块相应的压缩段VCS的CC值可以通过读取该CC场并把该CC值存储到CC寄存器51而立即获得。以这种方式,CC寄存器51将总是包含相应于最近存取的高速缓存块的压缩段的CC值。因此,当发生高速缓存不命中时,在该压缩段之后的下一压缩段在程序存储器中的位置可以通过简单地设定PC=PC+k(CC+2)而获得,其中k是每个字中的字节数。这使得当该块在提取属于该块的一对连续包之间已经被逐出时,可以高速地再加载任何高速缓存块。
可以理解的是,下一段定位信息可以采取CC值以外的许多其他形式。每个所储存的压缩段都能明显包括下一段的定位信息,例如一个大小值(如CC值)可以表示该段的大小乃至紧接着的压缩段起点的直接地址(PC值)。如果该下一段定位信息明显地保存在该压缩段中,则没有必要用解压缩段44在高速缓存加载工作期间产生这个信息。但是在这种情况下,该压缩段将包含更多的字,降低存储器的节省。
也没有必要用CC寄存器51保存相应于最近存取的高速缓存块的压缩段的CC值。只要最近存取的高速缓存块总可以用某种方法确定,与该块有关的高速缓存标识的CC场就可以“按需要”地得到访问,以提供下一段的定位信息,虽然存取CC寄存器更快。
图8表示根据本发明的第二实施方案的指令发出单元110的部分。第二实施方案用于在处理器中进行“在空中”解压缩,其程序被允许在程序的VLIW部分包含基本循环以及直线码。一个基本循环是一个没有其他跳转、支路或分离子程序呼叫的循环。
在图8的实施方案中,指令发出单元110以与图3所示的实施方案中的指令发出单元10基本相同的方式构成,且在图8中,指令发出单元110的组件与图3中所示组件相同或对应,并用同样的参考数字表示。
图8的实施例不同于图3的实施方案之处在于,图8的实施方案有一个更新单元148,该更新单元包括PC寄存器50、CC寄存器51和VPC寄存器52,并还包括五个更多的寄存器150到158。这五个寄存器特别提供以改善VLIW指令的基本循环性能的循环控制寄存器。
在一个基本循环中,通常(即除发生程序切换或其他例外外)下一待执行块是当前块以外的下一个块或是循环中第一个块的重复。在第二实施方案中,因为在由如图9所示的指令高速缓冲存储器40提供的虚址空间中执行一个任意关联的跳转的极其困难性,因此不允许有其他可能性。
在图9中,图的左部表示VLIW指令压缩前的一个初始区域UP。在本例中UP区域由三个基本块BB1到BB3组成。一个基本块是一序列具有单入点和单出点的指令。入点是作为支路、跳转或呼叫指令的目标的任何指令。出点是任何分支、跳转或呼叫指令,或任何跟有入点的指令。因此,图9中的第一基本块BB1有一个出点,在该处有一个“如果相等则分支”指令“BEG标签”。第二基本块BB2从该分支指令之后的第一指令开始并结束于刚好在BEQ指令的目标指令“标签”之前的指令,即第三基本块BB3的入点。
压缩后有关的程序部分UP的压缩形式CP被显示在图9的右边。压缩形式CP占有三个压缩段VCS1、VCS2和VCS3。每个这种压缩段VCS在解压缩后将占据指令高速缓冲存储器40的一个高速缓存块。但是,那些高速缓存块之间的界限并不相应于基本块BB1到BB3之间的界限,如图9所示。在压缩形式下,每个高速缓存块都被储存于程序存储器(程序储存单元),在压缩的高速缓存块的存储地址与VLIW码的原基本块之间没有线性关系。在基本块BB1末端的分支指令因此必须以这样的方式规定其目标地址,即可以发现基本块BB3并确定该块中目标指令的偏差。这是非常成问题的。例如,如果分支偏差被确定为虚存空间中的一个偏差,将需要进行一次压缩型CP的线性扫描以找到压缩段VCS所含的虚目标地址。相反地,如果分支目标被确定为(实际的)程序存储空间中的偏差,则在目标位置确定第一指令是没问题的,但是指令发生的高速缓存块不能被确定。在这种情况下,可以考虑的是,分支指令应该确定目标位置的实际地址和虚拟地址,但在实际上在流程包含了额外的运行时间使其变得不切实际。
考虑到在虚址中随机分支的困难性,图8中的实施方案打算用一种具有不允许这种任意相关跳转出现的限制编程模型的处理器。通过使用这种限制编程模型,只允许基本循环存在,也还存在如何转回到基本循环开始点的问题。这个问题在图8所示的实施方案中用循环控制寄存器150到158解决。具体地,这些寄存器是一个循环PC寄存器(LPC寄存器)150、一个循环VPC寄存器(LVPC寄存器)152、一个重复计数寄存器(IC寄存器)154、一个循环大小寄存器(LSIZE寄存器)156、以及一个循环计数寄存器(LCNT寄存器)158。
图8所示实施方案的工作过程如下。LVPC寄存器152用于储存VLIW指令的基本循环的第一个处理器包的虚址。LPC寄存器150用于储存与由LVPC寄存器152指向的高速缓存块相对应的压缩段VCS在程序储存单元12中的地址(虚址)。如果其已经在循环的任何一对连续的重复的开始之间被从指令高速缓冲存储器40中逐出,LPC与LVPC寄存器150和152被一起用于再次填充基本循环的第一个高速缓存块。
当进入基本循环时,包含在PC和VPC寄存器50和52中的PC和VPC的当前值分别被复制到LPC和LVPC寄存器150和152。该基本循环将由一个或更多预定的指令启动,这将导致IC寄存器154被载入待执行的循环回路操作的次数。这种循环启动指令也将导致LSIZE寄存器156被载入循环中所包含的处理器包的数目。LSIZE值的复本也被置于LCNT寄存器158中。
在基本循环的执行期间,当一个处理器包被执行时LCNT寄存器158被减1。当LCNT寄存器值变成0时,一个新的循环回路操作被启动。
当每个新的循环回路操作被启动,IC寄存器154被减1。如果它变为0,则所有的循环操作已经完成。否则,LCNT寄存器将用保存在LSIZE寄存器156中的值进行再加载,VPC寄存器52从LVPC寄存器152进行再加载,而PC寄存器50从LPC寄存器150进行再加载。
当基本循环完成时,VPC寄存器52将会指向循环块后面的第一处理器包。该处理器状态随后被更新以反映处理器不再执行基本循环,然后正常的VLIW处理从下一处理器数据继续执行。
接着,本发明的第二实施方案的工作过程将结合一个工作实例进行说明。在该工作实例中,待执行的VLIW程序部分在图10中以其原形式即压缩前的形式表示。假设本例中的处理器在每个循环可以发出四个指令。在图10中,“-”表示一个NOP指令。
如图10所示,本例中的程序部分包含20个有用的(非NOP)指令I1到I20,以及一个循环启动指令“循环8,r1”。这些指令被分配到虚址空间中从1000到10bf(用16进制表示)的地址。在本例中还可以假设,在指令高速缓冲存储器40中的每个高速缓存块由64字节组成,所以从1000到10bf的虚址空间相当于分别位于1000、1040和1080的三个高速缓存块。
在虚址1010的“循环8,r1”指令表明后面的在地址1020到1090的8个处理器包构成一个循环,且该循环应该被执行由寄存器r1的内容决定的次数。本例中的循环因此跨越了所有三个高速缓存块,但高速缓存块边界均未对准循环的起点或终点。
图11表示图10的程序部分在压缩后是如何储存在存储器中的。有三个压缩段VCS1、VCS2和VCS3。压缩的指令占据程序存储单元12中从2000到206b(也是用16进制表示)的地址(实址)。
每个压缩段VCS在第一个字位置有属于解压缩后的该区域的第一个指令的虚址,即,进入当该段被解压缩时产生的解压缩高速缓存块时的VPC值。
在每个压缩段VCS的第二个字位置包含解压缩有关的段所需的解压缩密钥。第三及随后的字包括属于该段的非NOP指令。
图12表示指令高速缓冲存储器40的启动状态和更新单元148中的控制寄存器。为便于解释,将假设该指令高速缓冲存储器非常小,只有两个高速缓存块CB0和CB1。每个高速缓存标识CT都具有如前面参考图7所描述的V、CC与IBA场。
在图12中所示的启动状态下,即在图11所示程序部分执行之前,高速缓存块CB0和CB1都不处于使用状态,并且与每个高速缓存块有关的高速缓存标识的V场被设为0。PC寄存器50指向刚好位于图11的程序部分之前的指令的地址1ffc。
当PC寄存器被增值达到2000时,进入图11的程序部分。在如图12所示的启动状态中,VPC寄存器52是空的。因此,指令提取单元46发送LOAD信号到高速缓存加载单元42,该单元42启动一个高速缓存加载工作,以把VCS1加载到高速缓冲存储器40。高速缓冲存储器加载单元42输出存储在段VSC1的第一个字中的VPC值,作为值EVPC。这对启动VPC寄存器52是需要的。
当VPC寄存器被启动,将用于储存VCS1段的解压缩指令的高速缓存块被预留。
出于解释的目的,图11所示并用于本例的VPC值(虚址)规定了精确到一字节的虚址。但是,应该可以理解,本例中每个处理器包是16字节(4个指令,每个4字节),为确定一个处理器包,不需要VPC的4个最低有效位(lsbs)。因此,在实际应用中,VPC寄存器不可实施其4个最低有效位。而且,每个高速缓存块包含64字节(每块4个处理器包),因此为提供一个虚块地址IBA,不需要VPC值的6个最低有效位。相应地,只需低至(并包括)7thlbs的VPC值的更高阶位以提供相应于VPC值的IBA。因此,相应于VPC值1000的IBA值是40(也为16进制表示)。
IBA值根据VPC值的预定位场被映象到唯一的一个高速缓存块。在本例中,其中只有两个高速缓存块,位场包括一个单个的位,它是一个VPC值的7thlbs。该位提供用于高速缓存标识寻址的INDEX值。当INDEX=0时(偶数的IBA值),高速缓存标识CT0被寻址,而当INDEX=1时(奇数的IBA值),高速缓存标识CT1被寻址。
在这种情况里,当IBA=40时,INDEX=0且高速缓存标识CT0被寻址。其V场设成1而其IBA场设为40,以便为VCS1指令保留高速缓存块CB0。高速缓存加载单元42随后从地址2008到2020读取指令I1到I6及VCS1中所含的“循环”指令,用储存在地址2004的解压缩密钥KEY1解压缩这些指令,并且在所保留的高速缓存块CB0的虚址1000到103f处存储解压缩后的指令(必要时包括NOP指令)。表示在刚刚加载的高速缓存块中的非NOP指令的数目的CC值(7)被高速缓存加载单元42输出并储存于高速缓存标识CT0的CC场中。因此,位于地址2000的压缩段VCS1已经被加载到高速缓存块CB0的虚址1000处。
现在高速缓存加载工作被完成,指令提取单元发出FETCH指令,以从由VPV寄存器50所指向的虚址1000提取一个处理器包。在此情况中,由于虚址相应于40的一个IBA,有高速缓冲存储器命中,其结果是在更新单元148中的CC寄存器51从相匹配的标识CT0中的CC场加载,含有指令I1到12的处理器包从高速缓存块CB0被读入到指令寄存器54。因此,指令I1和I2被并行发送到执行单元。
指令提取单元46随后发出UPDATE信号到更新单元148,更新单元增加VPC寄存器中的值,而该寄存器指向下一个处理器包的虚址1010。
在VPC寄存器被更新而指向地址1010之后,指令提取单元46再次发出FETCH信号。这又有一个高速缓存命中,且结果是含有“循环”指令的处理器包PP被置于指令寄存器54,从而使循环指令被发出。这产生了PC和VPC寄存器50和52中的值分别被复制到LPC和LVPC寄存器150和152。在被复制到LVPC寄存器之前,VPC被增值以指向含有“循环”指令的包之后的第一个处理器包,即在虚址1020的含有指令I3和I4的包。
此外,循环指令也导致IC寄存器154被加载了循环指令自身所指定的寄存器r1中所保持的值,本例中该值为42。循环中的包的数目在本例中是8,它也由循环指令自身确定并被加载到LSIZE寄存器156,且在LCNT寄存器158中也保存LSIZE的一个复本。指令高速缓冲存储器40和更新单元148中的寄存器的结果状态如图14所示。
在下一个指令循环的起点,指令提取单元46从由VPC寄存器52指向的虚址1020提取一个处理器包PP。有一个高速缓存命中(又是高速缓存块CB0),处理器包在虚址1020处的包括指令I3和I4的四个指令并行发送给执行单元。VPC寄存器52随后被增值以指向虚址1030,且LCNT寄存器中的值被减小1。
在下一个指令循环中,含有指令I5和I6的处理器包被发出。VPC随之增值到虚址1040,而LCNT再次减小1以具有值6。
在环的第一次重复的第三个循环中,指令提取单元46试图从保存在高速缓存块CB0的解压缩指令之外的虚址1040中提取一个处理器包。因为1040的VPC值相应于虚块地址41的IBA(它不包含在任何有效高速缓存标识中的IBA场中),所以这被检测出来。因此,指令高速缓冲存储器40通过发出MISS信号,响应该FETCH信号。响应该MISS信号,指令提取单元46发出LOAD信号,响应该信号,更新单元148更新PC寄存器50以具有值PC+4(CC+2),其中CC是保存在CC寄存器51中的值。因此,PC现在指向图11中压缩段VCS2的实址2024处的第一个指令。在PC寄存器50以这种方式更新之后,高速缓存加载工作由高速缓存加载单元42执行。指令高速缓冲存储器40和更新单元148中的寄存器的结果状态在图15中表示。
如图15所示,压缩段VCS2在解压缩之后被储存在高速缓存块CB1中(41的IBA使INDEX=1,它寻址高速缓存标识CT1),且有关的高速缓存标识CT1被初始化以具有一个为1的V场、一个为6的CC场(在VCS2中有6个非NOP指令I7到I12)以及一个41的IBA场。
随后继续指令的执行,指令提取单元从虚址1040、1050、1060和1070发出处理器包并每次得到高速缓存命中。LCNT寄存器158被减到值2。
当VPC寄存器52到达1080时,它再次超出当前保持在高速缓冲存储器的虚址范围,并产生一个高速缓存不命中。相应于虚址1080的IBA值是42。由于该高速缓冲存储器是一个直接映象的高速缓冲存储器,42的IBA(INDEX=0)必须被映象到高速缓存块CB0,其结果是被加载的第一个块(相应于压缩段VCS1)被VCS3的解压缩指令改写。所产生的高速缓冲存储器状态在图16中所示。与高速缓存块CB0有关的高速缓存标识CT0有一个为1的V场、一个为8的CC场(在VCS3中有8个非N0P指令I13到I20),以及一个42的IBA场。
处理器包随后在相继的指令周期中被从虚址1080、1090和10a0中提取并被发送给执行单元。每次提取一个包时,指令高速缓冲存储器输出与高速缓存块CB0(包从其被提取)有关的高速缓存标识CT0的值8,作为ACC值。
当处理器包在10a0被提取时,LCNT寄存器达到0,表示到了循环的第一个重复的终点。IC寄存器154被减值1。由于该值仍然大于0,更新单元从LPC寄存器150再加载PC寄存器50、从LVPC寄存器152再加载VPC寄存器52、以及从LSIZE寄存器156再加载LCNT寄存器158。其结果状态表示在图17中。
从图17中可以看出,当指令提取单元46试图从具有相应的IBA值40的虚址1020提取一个包时,将会有高速缓存不命中。因此,在从指令高速缓冲存储器40收到MISS信号之后,指令提取单元46把LOAD信号加到高速缓存加载单元42,其结果是在实址2000(由PC寄存器50所指向)的压缩段VCS1被解压缩并在高速缓存块CB0处被再加载到高速缓冲存储器中。因此,具有虚址1000到1030的处理器包被再次保持在高速缓存块CB0,且具有虚址1040到1070的处理器包被保持在高速缓存块CB1。其结果状态表示在图18中。
指令以这种方式继续执行直到循环的所有42次重复都被完成。在此时,IC寄存器154被减值到0。此时循环终止,指令提取单元46在最后一个循环体指令之后继续发出处理器包中的指令,即,包含在虚址10b0的指令I19和I20的处理器包。
再参考图18所示的状态,假设在第二次重复中具有虚址1020的处理器包发出之后立即发生中断。这种中断导致操作系统换出当前的过程并开始执行一个不同的过程。这可能干扰高速缓存块的内容,以致当返回原过程时不能保证属于原过程并在中断发生前被置于那里的的指令I1到I12仍然可以在高速缓存块中出现。
因此,在图8的实施方案中,当一个中断发生时,更新单元148的所有寄存器的内容都被操作系统所保存并在返回原过程重新执行之前被恢复,以恢复执行。指令高速缓冲存储器40的内容不被保存。
图19显示当原过程的执行在虚址1030被恢复时指令高速缓冲存储器和寄存器的状态。在本例中,假设在中断前出现的两个高速缓存块(分别相应于VCS1和VCS2)的内容,由于中断引起的处理而被逐出。为清楚的缘故,图示中的这些块因关于高速缓存标识的简单失效而被逐出并被清零。在实际应用中,其他的块有可能出现而高速缓冲存储器不会是空的,但净效果是一样的。
当指令提取单元46试图从虚址1030提取一个处理器包时,将发生一个高速缓存未命中。指令提取单元46随后将发出LOAD信号给高速缓存加载单元,后者加载由已恢复的PC寄存器(指到地址2000)所指向的压缩段VCS1。这是所需要的指令块,且其结果状态如图20所示。
如上所述,图8中的实施方案可以对抗随机的和意外的从高速缓冲存储器逐出,即使是在与硬件控制基本循环有关的简单控制传输工作存在的情况下。
在上面所描述的实施方案中,压缩段VCS包括用于属于该区域的指令的虚址。但是,应该理解,在每一个压缩段VCS中都包括这种虚址信息并不是必要的。例如,可以从除待执行程序的第一个段以外的所有压缩段忽略虚址信息。为使VPC寄存器被初始化(参见前面的图12),在第一个段中有虚址信息是必要的。但是,此后的VPC寄存器将总是与PC寄存器保持一致,程序的第二及后面的压缩段中所保存的VPC值是独立的。
出于误差检测的目的,在所有的压缩段或至少在一定的压缩段中包括虚址信息仍然是有利的。例如,当一个包括虚址信息的压缩段被载入高速缓冲存储器时,该段所包括的信息可以与更新单元独立计算的VPC值进行比较,如果压缩段的信息与计算所得的VPC值不一致,则可以标示出一个错误。
图21表示一个用于解释在本发明的一个实施方案中程序的原指令(未压缩指令)是如何被压缩的流程图。压缩的方法由诸如处理器的一个汇编器和/或链接器执行。
程序的一系列待压缩的原指令(例如图10)在第一步骤S1被转换成相应的一系列压缩形式的指令(如图11)。例如,这些指令可以被压缩以便从中去掉所有明显的NOP指令。
然后,在步骤S2原指令根据指令在压缩前出现的顺序,被指定了虚址(在参见图10)。所指定的虚址是当指令以解压缩形式保存在处理器的指令高速缓冲存储器中时,认为其所在的虚拟地址。
最后,在步骤S3,压缩形式的指令与指定在步骤2中所确定的虚指的虚址信息一起被储存在程序存储器中。用这种方式,当压缩形式的指令被解压缩并在执行时由处理器输入到指令高速缓冲存储器时,处理器可以给解压缩的指令指定所确定的虚址。当压缩形式的指令被储存在程序存储器的一个或多个压缩段中时,如前面第一和第二实施方案中所描述的,在解压缩时,属于每个区域的压缩形式的指令可以占据处理器指令高速缓冲存储器的一个块。在这种情况下,每个区域可以含有与该段的指令有关的虚址信息。该虚址信息可以例如确定在解压缩指令被保持在处理器的指令高速缓冲存储器时,与压缩段相应的第一个解压缩指令被认为所在于的虚址(imaginary address)。
应该理解,当在步骤S2分配虚址时,处理器的汇编器和/或链接器有责任为每个压缩段分配虚址空间的进入点,以便当解压缩时所有段在虚址空间内被拆开。汇编器/链接器较好地是分配这样的虚拟进入点,即它们不产生与可能共存于高速缓冲存储器中的解压缩指令块的高速缓存冲突。这里不需要处理器的校正工作,但将改善在执行时高速缓存命中与高速缓存未命中的比例。在虚址空间中的这些进入点必须都被到处理器包的边界上。
体现本发明的压缩方法可以用根据一种计算机程序运行的通用的计算机实施。该计算机程序可以用合适的载体介质如存储介质(如软盘或CD只读存储器)或一个信号来承载。这种载体信号可以通过通讯网络(如因特网)下载。所附的计算机程序权利要求可以被理解为以其自身或以上述的任何一种形式覆盖了一种计算机程序。
尽管上面通过实例所进行的描述涉及到一种VLIW处理器,可以理解,本发明也可以应用于其他不是VLIW处理器的处理器。体现本发明的一种处理器可以作为在高度集成的“芯片上的系统”(“system-on-a-chip”)(SOC)中的处理器的“核心”而被包括,它用于多媒体应用、网络路由器、视频移动电话、智能汽车、数字电视、语音识别、三维游戏等。
权利要求
1.一种处理器,用于执行以压缩形式存储于程序存储器中的一种程序的指令,包括一个程序计数器,用于标明在所述程序存储器中的一个位置;一个指令高速缓冲存储器,它具有多个高速缓存块,每个块用于以解压缩形式存储所述程序的一个或更多的指令;高速缓存加载装置,包括解压缩装置,用于执行一种高速缓存加载操作,在该操作中一个或多个压缩形式的指令从程序计数器所标明的程序存储器中的所述位置被读出,并被解压缩和存储于指令高速缓冲存储器的所述高速缓存块中的一个中;一个高速缓冲存储器指针,用于标明一个待提取执行的一个指令在所述指令高速缓冲存储器中的一个位置;指令提取装置,用于从该高速缓冲存储器指针所标明的该位置提取一个待执行指令,并当由于在该指令高速缓冲存储器中没有待提取指令而发生高速缓存不命中时,使高速缓存加载装置执行这样一种高速缓冲存储器加载操作;以及更新装置,用于响应指令的提取而更新程序计数器和高速缓冲存储器指针,以确保由所述的程序计数器标明的所述位置始终保持在所述程序存储器中的这样的位置,即待从指令高速缓冲存储器中提取的指令以压缩的形式存储在该位置。
2.如权利要求1所要求的处理器,其中一个所述待提取的指令在指令高速缓冲存储器中的位置由所述的高速缓冲存储器指针根据给指令指定的虚址来标明,该虚址是该指令以解压缩形式被保存于所述的高速缓存块之一中时被认为存在于其中的地址。
3.如权利要求2所要求的处理器,其中所述指令的虚址在所述程序的汇编/链接期间,根据压缩前原指令在程序中的顺序被指定给该指令。
4.如权利要求2或3所要求的处理器,其中的虚址信息-通过它可以推算出为每个指令所指定的虚址-与程序存储器中的压缩形式的指令一起被储存并应用到高速缓存加载操作中,以使有关的每个解压缩指令出现在指令高速缓冲存储器的所指定的虚址。
5.如上述权利要求中任一项所要求的处理器,其中压缩形式的指令被储存在程序存储器的一个或更多的压缩段中,属于每个区域的压缩形式的指令在解压缩时占据一个所述高速缓存块,且至少有一个区域还含有关于属于该区域指令的虚址信息;并且所述高速缓存加载装置是可用于在这样一个高速缓存加载操作中,为解压缩并输入到所述的把存储到程序存储器中由程序计数器所确定的位置的这样一个压缩段解压缩并加载到所述高速缓存块中的一个中。
6.如权利要求5所要求的处理器,其中所述的一个段的所述虚址信息确定了当解压缩指令被保存在一个高速缓存块中时相应于压缩段的第一解压缩指令被认为存在于其中的虚址。
7.如权利要求5或6所要求的处理器,其中在所述的高速缓存加载工作中,根据该块所包含的指定给一个指令的所述虚址,压缩段的解压缩指令被载入的高速缓存块被分配一个虚块地址。
8.如权利要求7所要求的处理器,其中每个所述的高速缓存块有一个相关的高速缓存标识,其中存有指定给高速缓存块的所述的虚块地址及有关的高速缓存标识。
9.如权利要求5到8中的任一个所要求的处理器,其中所述的虚址信息仅被包含在待加载的所述压缩段的第一个中。
10.如权利要求5到8中的任一个所要求的处理器,其中每个所述的压缩段包含虚址信息,该虚址信息与属于有关区域的指令有关。
11.如权利要求5到10中的任一个所要求的处理器,其中每个所述压缩段还包含一个解压缩密钥,它由所述解压缩装置使用以在高速缓存加载工作期间实现属于该区域的指令的解压缩。
12.如权利要求11所要求的处理器,其中所述的程序的指令包括压缩前预选的指令,它们不被显含地储存在任何所述压缩段,且每个压缩段的解压缩密钥确定当压缩段被解压缩时预选的指令在高速缓存块中出现的位置。
13.如权利要求12所要求的处理器,其中所述预选指令是“无操作”指令。
14.如权利要求5到13中的任一个所要求的处理器,其中所述的更新装置包括下一区域定位装置,用于在一个高速缓存未命中的情况下,使用储存于有关的高速缓存块的下一区域定位信息确定一个在相应于最近选取的高速缓存块的压缩段之后的下一压缩段在程序存储器中的位置。
15.如权利要求14所要求的处理器,其中下一区域定位信息被储存于有关的存有有效的解压缩指令的每个高速缓存块中,该被储存的信息被用于确定在相应于有关的高速缓存块的压缩段之后的下一压缩段在程序存储器中的位置。
16.如权利要求15所要求的处理器,其中下一区域定位信息当该块被载入到一个超高速加载工作中时被储存于有关的每个高速缓存块中。
17.如权利要求14到16中的任一个所要求的处理器,其中所述的与高速缓存块有关下一区域定位信息与相应于该块的压缩段的尺寸有关。
18.如权利要求17所要求的处理器,其中所述尺寸当在高速缓存工作中加载该高速缓存块中时由高速缓存加载装置确定。
19.如权利要求15所要求的处理器,其中的更新装置包括定位信息寄存器装置,用于储存与最近选取的高速缓存块有关的所述下一区域定位信息;以及复制装置,用于当提取在一个高速缓存块中的一个指令时,复制储存在有关块中的所述的下一区域定位信息到定位信息寄存器装置;所述下一区域定位装置,用于在一个高速缓存未命中的情况下,使用储存于有关的高速缓存块的下一区域定位信息确定一个在相应于最近选取的高速缓存块的压缩段之后的下一压缩段在程序存储器中的位置。
20.如作为权利要求12或13的从属权利要求的权利要求14到19中的任一个所要求的处理器,其中所述与该高速缓存块有关的下一区域定位信息代表保存在该高速缓存块中指令数,这些指令不是所述的预选的指令。
21.如权利要求20所要求的处理器,其中的解压缩装置包括计数装置,可用于在这样一个高速缓存加载工作中,计算不是所述的预选指令的解压缩指令数目。
22.如上述所以权利要求中所要求的处理器,用于执行一个硬件控制的循环,其中所述的更新装置还分别包括第一和第二循环控制寄存器,用于根据这样一种硬件控制的循环的执行的启动,产生待储存于所述的第一循环控制寄存器的程序计数器值及产生待储存于所述第二循环控制存储器中程序计数器值,并进一步用于根据在第一次重复之后循环的每次重复的开始,用保存在所述第一循环控制寄存器中的值再加载所述程序计数器并用保存在所述的第二循环控制寄存器中的值再加载所述的超高速高速缓存指针。
23.如上述所以权利要求中任一项所要求的处理器,其中所述程序的指令包括非常长的指令字(VLIW)指令。
24.如上述所以权利要求中任一项所要求的处理器,其中更新装置被用于当在程序执行中发生中断时,产生待保存的程序计数器值和超高速指针值,并且,当程序的指令被恢复时,产生在程序计数器和高速缓存指针中待恢复的保存值。
25.如权利要求14到21中的任一个所要求的处理器,其中更新装置被用于当在程序执行中发生中断时,产生与最近选取的保存中断信息的高速缓存块有关的所述的下一区域定位信息,并且,程序的执行恢复时产生保存的待恢复的下一区域定位信息。
26.如权利要求20所要求的处理器,其中的更新装置用于当在程序执行中发生中断时,产生与最近选取的保存中断信息的高速缓存块有关的所述的下一区域定位信息,并且,程序的执行恢复时产生保存的待恢复的下一区域定位信息。
27.一种压缩待由一个处理器执行的程序的方法,其中储存在一个程序存储器中的压缩形式的指令被解压缩并在被发出前被存储在一个指令高速缓冲存储器中,该方法包括如下步骤把该程序的一系列原始指令转换成相应的这种压缩形式的指令序列;根据该原始指令的所述序列为该原始指令指定虚址,该指定的虚址是当指令以解压缩形式存在于该处理器的所述指令高速缓冲存储器中时这些指令被认为存在于其处的虚址;以及在所述的程序存储器中与确定所述指定的虚址的虚址信息一起存储压缩形式的指令,以便当压缩形式的指令被解压缩并被该处理器载入到指令高速缓冲存储器时,该处理器可以给解压缩的指令指定所确定的虚址。
28.权利要求27中所要求的一种方法,其中所指定的虚址被适当选择以便在执行时可能在指令高速缓冲存储器中共存的指令不被映象到相同的高速缓存块。
29.权利要求27或28中所要求的一种方法,其中压缩形式的指令被以一个或更多压缩段储存在所述的程序存储器中,当解压缩时,属于每个区域的压缩形式的指令占据处理器的指令高速缓冲存储器的一个高速缓存块,且在至少一个压缩段还含有与该区域指令有关的虚址信息。
30.权利要求29中所要求的一种方法,其中所述的虚址信息确定当解压缩的指令被保存在所述的指令高速缓冲存储器中时相应于所述的一个压缩段解压缩指令考虑存在的虚址。
31.权利要求29或30中所要求的一种方法,其中所述的虚址信息仅被包括在所述的待加载的压缩段的第一个区域。
32.权利要求29或30中所要求的一种方法,其中每个所述的压缩段包含与属于有关区域有联系的指令的虚址信息。
33.权利要求29到32中的任一个所要求的一种方法,其中所述的压缩段还包含由处理器使用执行属于所述区域的指令的解压缩的解压缩密钥。
34.权利要求33中所要求的一种方法,其中所述程序的原始指令的系列包括不明显地储存在任何所述压缩段的预选的指令,并且所述的压缩段的解压缩密钥确定所述预选指令存在并出现于相应于该区域的指令的解压缩系列的位置。
35.权利要求34中所要求的一种方法,其中所述的预选的指令是“无效”指令。
36.一个计算机程序,当其在计算机中运行时,使计算机执行权利要求27到35中的任何一个压缩方法。
37.一个计算机程序,当其在计算机中运行时,使计算机执行压缩待由处理器执行的处理器程序的方法,该处理器用于解压缩储存于程序存储器的压缩形式的指令,并在发送前将该被压缩的指令存储到一个指令高速缓冲存储器中,该计算机程序包括一个转换部分,用于把处理器程序的一系列原始指令转换成一个相应系列的压缩形式的指令;一个指定部分,用于根据所述的系列指定该原始指令的虚址,指定的虚址是当指令以解压缩形式保存于所述的处理器的指令高速缓冲存储器中时该指令被认为存在于其中的虚址;以及一个存储部分,用于在所述的程序存储器中与确定所述指定的虚址的虚址信息一起存储压缩形式的指令,以便当压缩形式的指令被解压缩并被处理器载入到指令高速缓冲存储器时,处理器可以为解压缩的指令指定所确定的虚址。
38.如权利要求36或37中所要求的计算机程序,该程序由一种载体介质携带。
39.如在权利要求38中所要求的计算机程序,其中所述的载体介质是一种存储介质。
40.如在权利要求38中所要求的计算机程序,其中所述的载体介质是一种信号。
全文摘要
程序的指令以压缩形式被保存在程序存储器(12)中。在执行该指令的处理器中,一个程序计数器(50)标明程序存储器中的一个位置。一个指令高速缓冲存储器(40)有高速缓存块,其每一个都用于以解压缩形式存储程序的一个或更多指令。一个高速缓存加载单元(42)包括一个解压缩段(44),并执行一个高速缓存加载工作,在该区域一个或更多的压缩形式的指令被从程序存储器中由程序计数器确定的位置读出,并被解压缩和储存到所述指令高速缓冲存储器的高速缓存块中的一个。
文档编号G06F9/318GK1326132SQ01118969
公开日2001年12月12日 申请日期2001年5月25日 优先权日2000年5月25日
发明者尼格尔·彼德·托法姆 申请人:斯罗扬有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1