能够减少转移故障的具有小尺寸电路的流水线处理器的制作方法

文档序号:80798阅读:292来源:国知局
专利名称:能够减少转移故障的具有小尺寸电路的流水线处理器的制作方法
技术领域
本发明涉及一种用来利用流水线处理执行机器语言指令序列的处理器,特别是涉及一种用来高速执行转移处理的处理器。
背景技术
流水线处理是一种已知的通过一中央处理单元(CPU后面称之为处理器)来实现高速处理的基本技术。在流水线处理中,涉及一指令的处理被分成若干较小的级(流水线级),每一级均被并行处理以加速其处理。但是,由于可能出现一失速(stall)而使这种技术在执行循环中所使用的转移指令时并不是有效的。这种现象称之为转移故障。由于转移故障,流水线处理的工作特性不能达到一最佳值。
下面给出了其中将出现一转移故障的程序的一特殊例子。在所示单独指令内容的分号后面写有附注。
(指令1)mov 0,i;将0转移到i。
L ;示出一转移目标的标记。
(指令2)add a,b,c;将a+b转移到C。
(指令3)mul a,b,d;将a×b转移到d。
(指令4)add i,l,i;i加l。
(指令5)cmp i,3;i与3进行比较。
(指令6)bccL ;如果i<3则转移到L。
当执行上述程序时,指令2-5中的步骤被循环三次。在该程序中,在下面三个周期里指令6的执行的后面是取数、译码和执行指令2三级。其结果是在指令b的执行和指令2的执行之间的二个周期里出现转移故障。
作为用于避免转移故障的一种技术,在日本待审专利申请No.8-314719中披露了一种处理器。
在这种技术中,在陔循环刚刚开始之前包括该循环的第一指令的代码被存贮到一缓冲器中。当该程序从最后循环指令转移到第一指令时,该代码从缓冲器中被取回并且该第一指令被译码和被执行。利用这样一种配置,第一指令就不必在每次执行循环时从一外部存贮器中取出,这样就可避免该转移故障。
但是,上述常规处理器具有这样一个缺点,即因为该处理器需要用来避免转移故障的特殊电路,所以它的电路的尺寸较大。
首先,该处理器装备有一加法器,该加法器专用于计算一跟随包括该循环第一指令代码的代码取出地址并且恰恰在开始该循环之前将包括第一指令的代码存贮到该缓冲之中。被计算的取出地址被存贮到一地址缓冲器中。
该处理器还装置有一减法器,该减法器专用于当从最后指令转移到第一指令时利用从该地址缓冲器取回的取出地址计算被译码的第一指令的地址。
由于包括了该加法器和减法器,其结果使得上述常规处理器的硬件尺寸增加了。

发明内容
本发明的目的是提供一种具有小尺寸电路的可减少转移故障的流水线处理器。
上述目的可以利用一使用一程序循环之前立即被设置的寄存指令和一在该程序循环结束时被设置的循环指令以高速执行一程序循环的处理器来实现,该处理器包括一取出单元,用来从一存贮器中取出代码;一译码单元,用来对包含在该取出代码中的一指令译码;一执行单元,用来执行该被译码的指令,该译码单元包括有一用来存贮和更新一指明已被译码的指令的指针的译码指令计数器,该指针是一固定的位移值和被译码的该指令的一地址之和,该执行单元包括一存贮单元,用来当译码单元对该寄存指令译码时,将在该程序循环开始由该取出单元所取出的代码存贮到第一缓冲器中和将在译码指令计数器中所存贮的该指针存贮到第二缓冲器中;和一高速转移单元,用来当该循环指令由译码单元译吗和一转移条件被满足时使取出单元从相应于在第二缓冲器中所存贮的该指针的一地址开始取出代码和用来使译码单元对在第一缓冲器中存贮的该代码进行译码,其中该固定位移值被确定以便在第三缓冲器中的指针相应于跟随在第一缓冲器中所存贮的代码之后的一代码的地址。
这里,该固定位移值可以等于第一缓冲器的一存贮尺寸。
这里,该译码指令计数器当被初始化时可以存贮一开始地址和该固定位移值之和。
利用这种构型,因为该指针是当前译码指令地址和在该译码指令计数器中所存贮的固定值之和,所以当执行一寄存器指令时不必再执行相加操作而当执行一循环指令时不必再执行相减操作。由于不必包括特定的加法器或特定的减法器,所以可减小处理器的硬件尺寸。另外,因为不再需要上述地址计算,所以当执行寄存器指令和循环指令时该处理器的速度可提高。
这里,该执行单元可以进一步包括一转移单元,用来当一转移指令具有一由该译码单元译码的绝对地址时将该绝对地址传送到在该取出单元中的一取出指令计数器中和将一通过将该固定移位加到该绝对地址所得到的值传送给该译码指令计数器。
这里,当一转移指令具有一由该译码单元译码的相对地址时,该转移单元可以传送一通过将该相对值加到在该译码指令计数器中所存贮的指针所得到的值传送给该译码指令计数器并且将一通过从被传送到译码指令计数器的该值中减去该固定移位值所得到的值传送到取出指令计数器。
利用这种构型,利用在该译码指令计数器中所存贮的指针来执行具有一绝对地址和一相对地址的转移指令。
这里,该取出指令计数器可以包括一用来存贮一取出地址的寄存器和一用来增加在该寄存器中所存贮的取出地址的加法器,其中,当该转移指令具有由译码单元译码的绝对地址时,该转移单元具有的在取出指令单元中的加法器将该固定位移值加到该绝对地址上并且将相加的结果传送到该译码指令计数器。
利用这种构型,当执行一具有一绝对地址的转移指令时,在该译码指令计数器中存贮的该指针的计算可以不通过该执行单元来执行而是通过在取出指令计数器中的该加法来执行的。



本发明的这些和其它的目的、优点和特征通过下面结合附图对本发明的一个特定实施例的说明可以得到清楚的理解。在该附图中图1是本发明的第一实施例的处理器的构成的一框图;图2示出了该译码指令计数器151的详细构成;图3的流程图示出了在该指令执行级中的处理;图4的框图示出了选择单元143和转移器目标指令寄存器171的详细构成;
图5示出了选择单元143的选择逻辑;图6示出了转移指令的操作内容;图7示出了处理器执行循环时所构成的流水线的流程;图8的框图示出了本发明第二实施例的处理器的构成;图9的框图示出了取出指令计数器241和译码指令计数器251的详细构成;图10示出了转移指令的操作内容;图11的时序图示出了简单的转移指令“branch rel-adrs”的处理图12示出了在图4中所示的队列171a的一修改的例子;和而图13示出了在图12中所示的选择器121a-121d的选择逻辑。
具体实施方式
第一实施例下面是结合附图对本发明的实施例的处理器的详细说明。
图1的框图示出了本发明的第一实施例的处理器的构成。该图述示出了一存贮由处理器13所处理的指令序列(程序)的外部存贮器11。
处理器13从外部存贮器11中取出至少一个指令,并一个接一个地译码和执行这些指令。处理器13以高速执行循环和具有小尺寸硬件这样一种方式构成。该循环是由一转移目标信息寄存器指令(后面称之为寄存器指令)和一高速循环指令的组合所规定的。
这里,该寄存指令在该循环的第一指令之前被立即地设置并且指示该处理器将包括在被置于该循环的开始的至少一指令中的寄存代码送入该处理器中。这里,术语“代码”指的是表示该指令的代码。该高速循环指令被置于该循环的末尾并且指示如果满足包含在该高速循环指令中的条件时该处理器转移到该循环的第一指令,其中该第一指令是根据寄存指令被存贮在该处理器中。该寄存指令和高速循环指令分别以助记符形式写为“setlb”和“Icc”。
处理器13包括一指令取出单元14、一指令译码单元15、一指令执行单元16、和一转移器标信息存贮单元17。处理器13的每一部件都以与来自一时钟发生器(未示出)的一时钟信息同步地操作。该指令取出单元14、指令译码单元15、和指令执行单元16组成一指令流水线,这里每一单元与时钟信息同步地并行工作。
指令取出单元14从外部存贮器11中取出代码,将其存贮到一取出指令缓冲器142中,并将存贮的代码传送到指令译码单元15。该指令取出单元14包括一取出指令计数器(FIC)141、取出指令缓冲器(FIB)142,和一选择单元143。
FIC141存贮一用于被取出代码的取出地址并且将该取出地址传送到外部存贮器11中。在该代码被取出之后,FIC141被递增以更新该取出地址。当执行高速循环指令时,根据来自指令译码单元15的控制信号在FIC141中的该取出地址被更新为一从转移器标信息存贮单元17传送的地址。
该FIB142是一用来存贮从外部存贮器11所取出的代码的FIFO(先入先出)存贮器。
选择单元143当执行高速循环指令时仅选择在该转移目标信息存贮单元17中存贮的代码。当执行其它指令时,选择单元143选择在FIB142中的代码。选择单元143随后向指令译码单元15输出被选择的代码。
指令译码单元15对包含在自指令取出单元14传送的代码中的一指令进行译码并且输出译码结果,该译码结果是由用来控制指令出单元14、指令译码单元15、指令执行单元16和转移目标信息存贮单元17的操作的控制信号所组成。该指令译码单元15包括一译码指令计数器(DIC)151、一译码指令缓冲器(DIB)152、和一指令译码器153。
该DIC151存贮和更新一指针,该指针是被译码的一指令的一地址和一予置的位移值之和。当复位时,例如电源接通时,DIC151被初始化为一开始地址和位移值4之和的值。当一非转移指令被译码时,DIC151由该译码指令的字长度所递增并且作为一结果更新一指针,该指针为下一个被译码的指令的一地址和位移值4之和。当该高速循环指令被译码时,根据来自指令译码单元15的控制信号在DIC151中的指针被更新为从转移目标信息存贮单元17所传送的一地址。应注意的是,该位移值必须等于在转移目标信息存贮单元17中的一转移目标指令寄存器171的一存贮尺寸(字节数)。例如,如果该转移目标指令寄存器171的存贮尺寸是8字节,则在DIC151中该指针将为目前被译码的指令地址和该位移值8的和。
DIB152是一用来存贮从FIB142传送并被译码的一指令的寄存器。
指令译码器153对在DIB152中存贮的指令译码并且输出根据该译码结果用来控制指令取出单元14、指令译码单元15、指令执行单元16、和转移目标信息存贮单元17的控制信号。当该译码指令与在DIC151中的一指针有关时,该指令译码器153根据该指令的内容通过适当地加/减该位移值4控制指令执行单元16以调整在DIC151中的指针。但是,当高速循环指令被译码时不必进行上述调整。
指令执行单元16由一ALD(算术逻辑单元)、一位移器和其它部件所组成,并且根据从指令译码单元15所传送的控制信号对处理器13的各部件执行操作和控制。指令执行单元16还在与处理器13相连接的信号线(未示出)上输入/输出控制信号。
当指令译码单元15对该寄存指令译码时,转移目标信息存贮单元17存贮转移目标信息。这里,该转移目标信息意指从在FIB142中存贮的该循环的第一指令开始到被转移的该循环的最后指令的代码(在本实施例中为4字节)。该转移目标信息存贮单元17包括转移目标信息寄存器(BIR)171和转移目标取出地址寄存器(BAR)172。
BIR171是当指令译码单元15译码该寄存指令时用来存贮来自FIB142的代码的第一个4字节的寄存器。为此,该循环的第一个4字节被存贮在该BIR171中。该BIR171还被称之为循环指令缓冲器。
BAR172是当指令译码单元15译码该寄存指令时用来存贮来自下一个周期中的DIC151的一指针的寄存器。这个指针是当前译码指令地址和BIR171(4字节)的存贮尺寸之和并且因此相应于一跟随在BIR171中所存贮的代码的一代码地址。也就是说,在BAR172中存贮的该指针是一来自高速循环指令的转移被执行之后由指令取出单元14所取出的代码的一取出地址。该BAR172还被称之为循环地址缓冲器。
<译码指令计数器151的详细构成>
图2示出了DIC151的构成的一个例子。如该图所示,该DIC151包括一加法器31、一寄存器32和选择器33及34。
当DIC151被初始化时,例如在复位时,加法器31将固定值4加到寄存器32的开始地址中。
加法器31通常将一译码指令的字长(字节数)加到寄存器32中的一指针中。这样做使得,寄存器32更新一指针为“(被译码的一指令的地址)+4”。当执行一转移指令时,在寄存器32中的该指针被更新为通过选择器33输入的一转移目标地址。
<寄存指令和高速循环指令的处理>
图3示出了寄存指令、高速循环指令和其它指令的处理,该寄存指令是在该循环之前被设置的,该高速循环指令是在该循环结束处被设置的。
当由指令译码器153的译码结果是寄存指令(setlb)时(步骤S31),代码的第一个4字节被从FIB142传送到BIR171(步骤S32),并且随后在DIC151中的指针被送到BAR172(步骤S33)。其结果,BIR171存贮该循环的代码的第一个4字节,同时BAR172存贮跟随代码的第一个4字节之后的该代码的地址。在完成该寄存指令的执行时,处理器13处理下一个指令执行级(步骤S34)。
当由指令译码器153的译码结果是高速循环指令(Icc)时(步骤S31),它判断一转移条件是否满足(步骤S35)。在该转移处理中,该循环的代码的第一个4字节从BIR171被传送到DIB152(步骤S36),并且该地址被从BAR172传送到DIC151(步骤S37)和FIC141(步骤S38)。其结果,FIC141存贮了跟随代码的第一个4字节之后的该代码的取出地址,同时DIC151存贮一是当前译码指令(第一指令)和4之和的指针。因为指令取出单元14不需要取出是该转移目标的第一指令,所以不会出现转移故障。另外,该FIC141无须产生特殊的地址计算就可以容易地得到来自BAR172的跟随代码的第一个4字节之后的代码的地址。
<选择单元143和转移目标指令寄存器171的详细构成>
图4的框图示出了选择单元143和BIR171的详细构成。该图还示出了FIB142。应注意的是该程序的每一指令具有一可变字长(8位的一整数倍)。
FIB142是由在8位的单元中位移取出代码的一队列所构成,该队列最好具有超过16级。在该指令译码级的每一周期中FIB142通过选择单元143将该队列的第一个4字节输出到DIB152。指令译码单元15对代码的4字节译码并通知该FIB142指令字长(表示从代码的4字节的开始的一指令开始的一字节数)。FIB14通过所通知的字长将该代码朝向该队列的前面移位并且因而选择被译码的指令。通过这样做,一指令的第一字节通常是在该队列的前面(来自高速循环指令的一转移被执行之后紧接着的情况未必是这样)。
BIR171包括队列171a和选择控制单元171b。
该队列171a是由在8位的单元中循环地移位代码的4级队列所构成。当寄存指令被译码和执行时,队列171a存贮该FIB142的代码的第一个4字节,然后在高速循环指令被译码之后通过选择单元143被输出到DIB152。指令译码单元15对代码的4字节译码并通过选择控制单元171b通知队列171a指令字长。队列171a利用通知的字长循环地朝向该队列的前面移位该代码。队列171a重复该移位直至该4字节被移位一周,这样根据寄存指令恢复该4字节在队列171a中被存贮的原始状态。下次来自高速循环指令的一转移被执行时再次执行这种操作。
当来自该高速循环指令的一转移被执行时,选择控制单元171b控制选择单元143以选择在队列171a中存贮的代码的4字节来替代在FIB142中存贮的代码的4字节。在这种控制处理中,选择控制单元171b具有在该转移之后立即通过选择单元143向指令译码单元15输出所有代码的4字节的队列171a。指令译码单元15译码该代码并且通知队列171a指令字长。选择控制单元171b具有通过所通知的字长循环地移位该代码的队列171a并且对在该队列171a中的有效代码字节数进行计数。随后在下一个指令译码级中根据该有效字节数该选择控制单元171b控制选择单元143。
选择单元143包括有选择器143a-143d。当该高速循环指令被执行并且利用指令译码单元15译码自BIR171所传送的代码的4字节时,选择单元143选择跟随在其后的由在队列171a中的有效代码和在FIB142中的后继代码所组合的代码的4字节。
图5示出了选择器143a-143d的选择逻辑。根据选择控制单元171b所通知的有效字节数,选择器143a-143d输出由在队列171a中的有效代码和在FIB142中的后继代码所组合的代码的4字节。应注意的是,在图5所示的情况中当使用四个5输入-1输出(“5至1”)8位选择器时,可交替地使用“2至1”、“3至1”、“4至1”和“5至1”选择器的一组合。
<转移指令处理>
如上所述,DIC151存贮一是当前译码指令地址和固定值4之和的指针。因此,当执行用来从DIC151读取或向DIC151写入的指令时,它必须通过加上或减去值4来调整该指针。当执行除高速循环指令之外的寻址指令时这种调整是必须的。
图6示出了转移指令的操作内容。在该图中,简单转移指令“branch abs-adrs”、子程序调用指令“Call abs-adrs”和子程序返回指令“ret”是用于绝对寻址的典型指令,同时该简单转移指令“branch rel-adrs”是用于相对寻址的典型指令。代码“abs-adrs”表示-32位绝对地址,同时代码“rel-adrs”表示8位或16位相对地址。
当处理该简单转移指令“branch abs-adrs”时,指令执行单元16将绝对地址“abs-adrs”存贮到FIC141中(操作601),将固定值4加到绝对地址“abs-adrs”,并将该总和存贮到DIC151中(操作602)。这样做就使得该取出、译码和执行处理将通过由绝对地址“abs-adrs”所指定的一指定开始。因此,为了执行通过绝对寻址指定一转移目标的转移指令,在DIC151中设置将4加到绝对地址所得到的值。
当执行子程序调用指令“call abs-adrs”时,指令执行单元16将绝对地址“abs-adrs”存贮到FIC141中(操作603),将一译码指令字长加到在DIC151中的指针中(操作604),从该总和中减去4,将相减的结果压入一堆栈(未示出)中(操作605),并将绝对地址“abs-adrs”和4的和存贮到DIC151中(操作606)。该相减的结果相应于一在子程序调用指令“call abs-adrs”的执行期间被译码的一指令的地址。换句话说,该相减结果相应于在子程序调用指令“call abs-adrs”以后的一指令的地址。因此,为了执行一绝对调用指令,将从在DIC151中的指针减去4所得的值压入该堆栈中。
当处理子程序返回指令“ret”时,该指令执行单元16从堆栈中弹出跟随子程序调用指令“call abs-adrs”之后的指令地址,将该地址存入FIC141中(操作607),将该地址加4,并且将其和存入DIC151中(操作608)。因而从一子程序中执行了一返回指令,将该值的和压入堆栈中并将4返回定到DIC151中。
当执行该简单转移指令“branch vel-adrs”时,指令执行单元16将相对地址“rel-adrs”加到DIC151的指针中,将其和存贮到DIC151中(操作609),从该和中减去4,并将相减的结果存贮到FIC141中(操作610)。因此,为了执行由相对地址所指定的转移目标的一转移指令,在FIC141中设置从在DIC151中的新指针减去4所得到的值。应注意的是,当执行高速循环指令时,没有必要将从在DIC151中的指针减去4的结果去设置在FIC141中的该地址。
如上所述,当执行一具有绝对地址的转移指令时,该DIC151可简单地被更新为该绝对地址和4的总和,同时FIC141可被更新为该绝对地址。
另外,当执行一具有相对地址的转移指令时,该DIC151可简单地更新为相对地址和在DIC151中的指针的总和,同时FIC141可更新为从该总和中减去4所得到的值。
利用固定值4的上述相加和相减是由在指令执行单元16中的ALU来执行的。因此,该指令执行单元16执行除高速循环指令之外的所有转移指令的地址计算。
<操作>
下面说明使用一例子程序的本实施例的该处理器的操作。
图7示出了当执行如下所示程序时所形成的一流水线的流程。
(例子程序)


在这个例子程序中,“指令地址”表示在16进制中一32位地址的最低16位,“地址”是以助记符形式写出的,和“注释”表示了指令内容。
在该程序中,从跟随寄存指令(setlb)之后的指令(add a,b,c)到高速循环指令(Icc)的处理是一被重复三次的一循环。
在图7中,水平轴表示以周期单位示出的时间,两垂直轴表示IF、DEC和EX三个流水线级。“IF级”表示在FIB142的前面的一指令,通过它示出了在周期8,9,13和14中该BIR171的前面的一指令。“DEC级”表示在DIB152中存贮的一当前被译码的指令。“EX级”表示当前由指令执行单元16所执行的一指令。
当在周期3该寄存指令“Setlb”被译码时,代码(”add a,b,c和“mul a,b,c”)的4字节被从FIB142传送到BIR171。在周期4,寄存指令“Setlb”被执行,并且是当前被译码指令“add a,b,c”的地址和4的总和的一指针从DIC151被传送到BAR172。其结果,是指令“add i,l,i”的地址的地址的值1007(1003+4)被存贮在BAR172中。
接着,当执行在跟随在周期8中的译码级的周期9中的高速循环指令“Icc L”时,代码的该4字节从BIR171传送到DIB152,并且指令“add i,l,i”的地址从BAR172传送到FIC141。其结果,跟随在BIR171中的代码的4字节之后的指令“add,i,l,i”的地址作为一般出地址被设置在FIC141中。
当在周期13中该高速循环指令“1CC L”被译码和在周期14中被执行时则执行相同的操作。
在本实施例的处理器中,DIC151中存贮了一是当前被译码指令地址和位移值4之和的一指针。因此,当执行寄存指令“satlb”时它没有必要设置一专用于通过将4加到转移目标指令地址来计算跟随该转移目标信息之后的代码的取出地址的加法器。
另外,当执行来自该高速循环指令“1cc L”的一转移时,FIC141和DIC151接收来自BAR172的相同地址。它没有必要执行专用于FIC141和DIC151的地址计算,这样该处理器就没有必要配置一专门的减法器。
<第二实施例>
图8的方框图示出了本发明第二实施例的处理器的构成。
与图1中所示的第一实施例的处理器13的不同之处在于用FIC214替代了FIC141和用DIC251替代了DIC151。第二实施例的处理器13的构成使得当执行一转移指令时通过一指令取出单元24来计算在DIC251中存贮的一指针,而在第一实施例中是通过指令执行单元16来计算该指针的。下面的说明集中在这种不同之处。
<取出指令计数器241的详细构成>
图9的框图示出了FIC241和DIC251的详细构成。
FIC241包括一加法器91、一锁存器92、和一选择器93。
循环电路由加法器91、锁存器92和包含一由4递增的计数器的选择器93所组成。当FIB142具有4字节或更多字节的空闲区域时,指令取出单元24取出代码的4字节并且递增该FIC241。
当执行一未转移指令时,选择器93选择加法器91的输出。当执行除高速循环指令之外的一转移指令时,选择器93选择从指令执行单元16传送的一转移目标地址。另一方面,当执行高速循环指令时,选择器93选择从BAR172传送的一地址。选择器93随后向加法器91输出被选择的地址。锁存器92的输出被作为一取出地址被传送给外部存贮器11。
<译码指令计数器251的详细构成>
在图9中,DIC251包括一加法器101、一锁存器102、和选择器103有104。
循环电路由加法器101、锁存器102和含有一在每一指令译码级中由一译码指令的字长而递增的计数器的选择器103所组成。
当一非转移指令被译码时,在该指令译码级的第二个一半期间加法器101将被译码指令的字长加到锁存器102中的指令中。当执行与在DIC251中的指针有关的一转移指令(高速循环指令除外)时,加法器101将“-4”加到在锁存器102中的指针中。
锁存器102存贮是当前译码指令地址和位移值4之和的一指针。初始化时,锁存器102存贮从FIC241传送的“(开始地址)+4”。
选择器103通常选择由指令译码单元25所提供的被译码指令的字长。当诸如具有一相对地址的转移指令或子程序调用指令之类的一指令被执行时,选择器103选择“-4”以调整该指针。
当执行一非转移指令时,选择器104选择加法器101的输出。当执行高速循环指令时,选择器104选择BAR172的输出。当执行除高速循环指令之外的转移指令时,选择器104选择在FIC241中的加法器91的输出“(转移目标地址)+4”。
<转移目标地址的计算>
图10示出了如图6所示的相同寻址指令,即简单转移指令“branch abs-adrs”、子程序调用指令“call abs-adrs”、子程序返回指令“ret”和简单转移指令“branchrel-adrs”的操作内容。应注意的是,在点线上面所写的操作是在指令译码级实施的,而在点线下面所写的操作是在指令执行级实施的。
当处理简单转移指令“branch abs-adrs”时,指令执行单元16将绝对地址“abs-adrs”存贮到FIC241中(操作1001),并且在指令取出单元24将4加到在FIC241中存贮的地址中,然后将总和存贮到DIC251中(操作1002)。因此,当处理由绝对寻址所指定的一转移目标的转移指令时,在FIC241中的加法器91用来相加该位移值4以便计算在DIC251中的指针。
当处理子程序调用指令“call abs-adrs”时,指令执行单元16将绝对地址“abs-adrs”存贮到该FIC241中(操作1003)。在DIC251中的加法器101将指令字长加到指针中(操作1004)并从在DIC251中的相加结果中减去4。指令执行单元16将相减结果压入一堆栈(操作1005)。在FIC241中的加法器91将在FIC241中存贮的绝对地址“abs-adrs”加4,然后将该总和存贮到DIC251中(操作1006)。因此,在DIC251中的加法器101用来减去位移值4以便计算一被压入该堆栈中的返回地址,同时在FIC241中的加法器91用来加上该位移值4以便计算在DIC251中的指针。
当执行子程序返回指令“ret”时,指令执行单元16弹出该返回地址,也就是来自该堆栈的跟随子程序调用指令“call abs-adrs”之后的一指令的地址并用将该返回地址存贮到FIC241中(操作1007)。在FIC241中的加法器91将4加到该返回地址中,然后将总和存贮到DCI251中(操作1008)。因此,当处理一返回指令时,在该FIC241中的加法器91被用来相加该位移值4以便计算在DIC251中的指针。
当处理简单转移指令“branch rel-adrs”时,指令执行单元16将相对地址“rel-adrs”加到通过加法器101从DIC251中指针减去4所得到的值中并且将该总和存贮到FIC241中(操作1009)。然后加法器91将4加到在FIC241中存贮的地址中并且将这个总和存贮到DIC251中(操作1010)。因此,当执行一由相对地址所规定的一转移目标的一转移指令时,在DIC251中的加法器101用来减去位移值4而在FIC241中的加法器91用来相加位移值4。
如上所述,在第二实施例的处理器13中,在操作1002、1006、1008和1010中的位移值4的相加是通过FIC241中的加法器91来执行的,而在操作1005和1009中的位移值4的相减是通过在DIC251中的加法器101来执行的。
<转移指令处理的定时>
图11是简单转移指令“branch rel-adrs”的处理的时序。
在该图中,简单转移指令“branch rel-adrs”在周期T1和T2分别被译码和执行,而在周期T3和T4一转移目标指令被取出和译码。
在周期T1,加法器101从在DIC251中的指针中减去4。在周期T2,指令执行单元16被相对地址“rel-adrs”加到该相减的结果中,从而计算一转移目标地址BA并将其存贮到FIC241中。
在周期T3,转移目标地址BA从FIC241输出到外部存贮器11以取出一转移目标指令的代码(4字节)。在周期T3的第二个半周期中加法器91将4加到在FIC241中的该转移目标地址中。
在周期T4,由加法器91所得到的总和被存贮到FIC241和DIC251中。
虽然在上述实施例中该处理器的处理单元被置为32位,但本发明并不限于此。因此,该处理器还可处理16或64位单位的数据。另外,虽然在上述实施例中BIR171的存贮尺寸是4字节(32位),但只要在跟随高速循环指令的译码之后的周期内通过指令译码器完成这种尺寸的转移目标指令代码的译码而可取出至少一个指令则其它的存贮尺寸也可应用。
虽然在上述实施例中所使用的程序包括可变字长度的指令,但本发明还可应用于固定字长度的指令。在这种情况中,DIC151和选择单143的构成可进一步被简化。
另外,虽然该队列171a(环形缓冲器)被用在图4所示的BIR171中,但该BIR171还可选择来构成,即在BIR171中存贮的代码的4字节的任何字节可作为该代码的开始而被设置。图12示出了该队列171a的这种修改的一个例子。在该图中,如图4所示的队列171a由一4字节寄存器120和在BIR171中的选择器121a-121d来替代。选择器121a-121d的选择逻辑如图13所示。例如,寄存器120存贮代码A、B、C和D的4字节。如果有效字节数为4,则通过如图4所示的选择器143a-143d该选择器121a-121d以“ABCD”的顷序输出4字节。
另一方面,如果有效字节数为3,则选择器121a-121d以“BCDA”的顺序输出4字节。在接收4字节时,在指令取出单元中的选择器143a-143d选择有效3字节“BCD”并且将作为高位字节的有效3字节和从FIB142所接收的作为低位字节的1字节相结合以向DIB152输出代码的4字节。当有效字节数是2或1时该选择以相同方式执行。
与如图4所示的当执行位移时的情况相比图12所示的构成启动该转移目标指令寄存器使得它的处理速度得以进一步提高。
权利要求
1.一种使用设置在程序循环之前的寄存指令和设置在程序循环末尾的循环指令用来高速执行一程序循环的处理器,该处理器包括一用来从一存贮器取出代码的取出单元;一用来对一包括在该所取出代码中的一指令译码的译码单元;以及一个用以执行经过译码的指令的执行单元,该译码单元包括一译码指令计数器,用来存贮和更新一指明一被译码的指令的指针,该指针是一固定位移值和被译码的指令的一地址的总和,和该执行单元包括第一缓冲器,具有存贮代码的区域;第二缓冲器,具有存贮地址的区域;存贮装置,用来当译码单元译码该寄存指令时将由取出单元所取出的在程序循环的开始处的代码存贮到上述第一缓冲器和将在译码指令计数器中存贮的指针存贮到上述第二缓冲器;和高速转移装置,用来当该循环指令由译码单元译码和一转移条件满足时使该取出单元将从与在上述第二缓冲器中存贮的指针对应的地址开始的指令取出和使该译码单元译码在上述第一缓冲器中存贮的代码,其中固定位移值被决定以使在上述第二缓冲器中的指针对应于跟随在上述第一缓冲器中存贮的代码之后的代码的地址。
2.如权利要求
1的处理器,其特征在于该固定位移值等于第一缓冲器的一存贮尺寸。
3.如权利要求
2的处理器,其特征在于当初始化时该译码指令计数器存贮一开始地址和固定位移值的总和。
4.如权利要求
3的处理器,其特征在于该取出单元包括一用该固定位移值来使来自被取出代码的一取出地址递增的加法器;和其中的译码指令计数器当该取出地址被初始化为开始地址时存贮该加法器的一输出作为该指针。
5.如权利要求
1的处理器,其特征在于该执行单元进一步包括通常的转移装置,用来当具有一绝对地址的转移指令由译码单元译码时将该绝对地址传送到在该取出单元中的一取出指令计数器中并且将通过将该固定位移值加到绝对地址所得到的一值传送到译码指令计数器中。
6.如权利要求
5的处理器,其特征在于,当由译码单元译码一具有相对地址的转移指令时,该转移装置将通过将该相对地址加到在译码指令计数器中所存贮的该指针中所得到的一值传送到第二指令计数器中并且将通过从被传送到译码指令计数器的该值中减去固定值所得到的一值传送到取出指令计数器中。
7.如权利要求
5的处理器,其特征在于该取出指令计数器包括一用来存贮一取出地址的寄存器和一用来使在该寄存器中存贮的取出地址递增的加法器,和其中,具有绝对地址的一转移指令由译码单元译码时,该转移装置具有的在取出指令计数器中的加法器将该固定位移值加到该绝对地址中并且将一相加结果传送到该译码指令计数器中。
8.如权利要求
1的处理器,执行具有至少三级的流水线处理;上述三级包括取出级、译码级和执行级,上述取出单元,在取出级中取出代码;上述译码单元,将包括在译码级中的取出代码中的指令译码;上述执行单元,执行执行级中的被译码指令;上述取出单元包括取出指令计数器,用来存贮和更新取出地址;和取出指令缓冲器,用来存贮该取出代码,该译码单元还包括译码指令缓冲器,用来存贮被译码中的指令,该指令包括在该取出代码中;上述译码指令计数器,通过将存贮在译码指令缓冲器中的指令的地址和固定位移值相加,而更新指针;上述存贮装置,当该寄存指令由译码单元译码时,将在该取出指令缓冲器中存贮的代码存贮到第一缓冲器中,和将在译码指令计数器中存贮的指针存贮到第二缓冲器中;在第一缓冲器中存贮的代码是在该程序循环的开始处的代码,该固定位移值等于第一缓冲器的存贮量;和在第二缓冲器中存贮的指针对应于跟随在第一缓冲器中存贮的该代码之后的一代码的地址;和上述高速转移装置,当上述循环指令由译码单元译码并且满足一转移条件时将存贮在第二缓冲器中的指针传送到取出指令计数器,使上述取出部取出从对应指针的地址开始的代码,并将该代码从第一缓冲器传送至译码指令缓冲器,而使译码单元译码该代码。
9.如权利要求
8的处理器,其特征在于当初始化时该译码指令计数器存贮开始地址和上述固定位移值的总和。
10.如权利要求
9的处理器,其特征在于该取出指令计数器包括一通过该固定位移值使该转移地址增加的加法器;和其中当该取出地址被初始化为开始地址时译码指令计数器存贮加法器的输出作为该指针。
11.如权利要求
9的处理器,其特征在于该程序循环包括有多个具有可变字长的指令,其中该处理器进一步包括选择装置,用来选择其总量等效于来自第一缓冲器和来自取出指令缓冲器的译码指令缓冲器的一存贮尺寸的代码并且将所选择代码输出到译码指令缓冲器;和一选择控制单元,用来控制该选择装置以选择首先来自第一缓冲器和然后来自取出指令缓冲器的代码,其中当该循环指令被译码和满足转移条件时该高速转移装置启动该选择控制单元,和其中当选择控制单元未启动时选择装置选择来自取出指令缓冲器的代码。
12.如权利要求
8的处理器,其特征在于该执行单元进一步包括转移装置,当一具有绝对地址的转移指令由该译码单元译码时用来将该绝对地址传送到取出指令计数器和将通过将固定位移值加到绝对地址所得到的一值传送到译码指令计数器。
13.如权利要求
12的处理器,其特征在于,当具有相对地址的一转移指令由译码单元译码时,该转移装置将一通过将相对地址加到在译码指令计数器中所存贮的指针中所得到的值传送到译码指令计数器并且将一通过从被传送到译码指令计数器的值中减去固定位移值所得到的值传送到取出指令计数器中。
14.如权利要求
12的处理器,其特征在于该取出指令计数器包括一用来存贮该取出地址的寄存器和一用来使在该寄存器中存贮的取出地址增加的加法器,和其中,当具有绝对地址的转移指令由译码单元译码时,该转移装置具有的在该取出指令计数器中的加法器将该固定位移值加到绝对地址中并且将一相加结果传送到译码指令计数器中。
15.如权利要求
13的处理器,其特征在于该取出指令计数器包括一地址寄存器,用来存贮该取出地址;和一第一加法器,用来通过一予置值增加在地址寄存器中的取出地址,其中该译码指令计数器包括一指针寄存器,用来存贮该指针;和一第二加法器,用来通过一译码指令的字长度使在指针寄存器中的该指针增加,其中,当具有相对地址的转移指令被译码单元译码时,该转移装置具有从在指针寄存器中的该指针减去固定位移值的第二加法器;将相减结果和相对地址之和作为一转移目标地址存贮到该地址寄存器中;具有将予置值加到在地址寄存器中存贮的该转移目标地址中的第一加法器,该予定值是固定位移值;和将相加结果存贮到指针寄存器中。
专利摘要
高速执行一程序循环的处理器。当该转移目标信息寄存指令由一指令译码器译码时,在一取出指令缓冲器中的代码被传送到一转移目标指令寄存器中,并且在一译码指令计数器中的一被位移指针被传送到一转移目标取出地址寄存器中。在高速循环指令由指令译码器译码并且满足一转移条件时,在转移目标取出地址寄存器中的指针被传送到一取出指令计数器和译码指令寄存器而在转移目标指令寄存器中的代码被传送到一译码指令缓冲器中。
文档编号G06F9/32GKCN1105350SQ98103178
公开日2003年4月9日 申请日期1998年6月29日
发明者小椋里, 尾崎伸治 申请人:松下电器产业株式会社导出引文BiBTeX, EndNote, RefMan专利引用 (4),
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1