处理系统及其操作方法.pdf

上传人:a2 文档编号:993025 上传时间:2018-03-24 格式:PDF 页数:62 大小:2.21MB
返回 下载 相关 举报
摘要
申请专利号:

CN95101691.1

申请日:

1995.01.16

公开号:

CN1121210A

公开日:

1996.04.24

当前法律状态:

终止

有效性:

无权

法律详情:

专利权的终止(未缴年费专利权终止)授权公告日:2003.1.15|||授权|||公开|||

IPC分类号:

G06F15/00

主分类号:

G06F15/00

申请人:

国际商业机器公司;

发明人:

宋承润

地址:

美国纽约州

优先权:

1994.03.31 US 220,993

专利代理机构:

中国专利代理(香港)有限公司

代理人:

杜有文;马铁良

PDF下载: PDF下载
内容摘要

提供了一个处理系统及其操作方法。其中先调度一条特定的指令到执行电路执行。在调度完该指令之后,于结束该指令的执行之前,即往执行电路中调度另外一条执行串行化的指令。

权利要求书

1: 一种操作一个处理系统的方法,其特征在于包括下述步骤: 调度一条特定的指令到执行电路执行;并且 在调度完所述特定指令之后,于结束所述特定指令的执行之前, 调度一条执行串行化指令到所述的执行电路。
2: 根据权利要求1的方法,其特征在于包括了至少将所述已调 度的执行串行化指令的执行延迟到结束所述特定指令的执行的步 骤。
3: 根据权利要求2的方法,其特征在于包括了在调度所述执行 串行化指令之后,于结束所述特定指令的执行之前,调度另一条指令 到所述的执行电路的步骤。
4: 根据权利要求3的方法,其特征在于包括了在结束所述特定 指令的执行之前,就开始所述另一条指令的执行的步骤。
5: 根据权利要求1的方法,其特征在于调度所述执行串行化指 令的所述步骤里包括调度所述执行串行化指令到所述执行电路的一 个备用站的步骤。
6: 根据权利要求1的方法,其特征在于调度所述执行串行化指 令的所述步骤还包括向所述执行电路输出一个指示信息以防止所述 执行电路执行所述调度的执行串行化指令的步骤。
7: 根据权利要求6的方法,其特征在于包括在所述特定指令结 束执行之后,向所述执行电路输出另一个指示信息以启动所述执行 电路对所述调度的执行串行化指令的执行的步骤。
8: 根据权利要求1的方法,其特征在于所述执行串行化指令不 可按随意的顺序执行。
9: 根据权利要求8的方法,其特征在于所述执行串行化指令的 结果直接写向某一存储单元,而勿须一重命名缓冲单元缓存。
10: 根据权利要求1的方法,其特征在于所述执行串行化指令 的执行一直延迟到其所有的源操作数信息可用且有效时为止。
11: 根据权利要求10的方法,其特征在于所述执行串行化指令 至少要指定一个未传送的源操作数。
12: 一个处理系统,其特征在于包括: 用于执行指令的执行电路;经及 与所述执行电路耦合的调度电路用以: 调度一条特定的指令到所述执行电路执行;以及 在调度所述特定指令之后,于结束所述特定指令的执行之前,调 度一条执行串行化指令到所述执行电路。
13: 根据权利要求12的系统,其特征在于:所述执行电路还包 括用以延迟所述调度给它的执行串行化指令的执行至少到结束所述 特定指令的执行的电路。
14: 根据权利要求13的系统,其特征在于:所述调度电路还可 在调度所述执行串行化指令之后,于结束所述特定指令的执行之前, 再调度另一条指令到前述执行电路。
15: 根据权利要求14的系统,其特征在于:所述执行电路还包 括用以在结束执行所述特定指令之前启动所述另一条指令的执行的 电路。
16: 根据权利要求12的系统,其特征在于:所述执行电路还包 括至少一个备用站,所述调度电路调度所述执行串行化指令到该备 用站。
17: 根据权利要求12的系统,其特征在于:所述调度电路向所 述执行电路输出一个指示信息,以阻止所述执行电路执行所述调度 给它的执行串行化指令。
18: 根据权利要求17的系统,其特征在于:所述执行电路还包 括用以在结束所述特定指令的执行之后启动所述调度给它的执行串 行化指令的执行的电路。
19: 根据权利要求12的系统,其特征在于:所述执行串行化指 令不可按随意的顺序执行。
20: 根据权利要求19的系统,其特征在于:所述执行电路将所 述执行串行化指令的结果直接写向某一存储单元,中间勿须某一重 命名缓冲单元缓存。
21: 根据权利要求12的系统,其特征在于:所述执行电路将所 述执行串行化指令的执行一直延迟到其所有的源操作数信息可用且 有效时为止。
22: 根据权利要求21的系统,其特征在于:所述执行串行化指 令至少要指定一个未传送的源操作数。
23: 根据权利要求12的系统,其特征在于:所述执行电路包括 用于执行所述特定指令的第一执行电路和用于执行所述执行串行化 指令的第二执行电路。

说明书


处理系统及其操作方法

    本专利申请通常涉及信息处理系统,尤其是一个处理系统及其操作方法。

    一个超标量处理系统包括多个执行部件,用于同时执行多条指令。在一些处理系统中,指令的执行顺序和它们在指令流中的程序顺序可以有所不同。但是,有些指令的执行结果受其执行顺序的影响,只能按照程序顺序执行,才会得到正确的执行结果。根据以前的常用技术,这种串行化的指令的执行通常会对程序中后续指令的执行产生不利的影响。

    因此,需要开发一种处理系统及其操作方法,在该系统中,串行化的指令的执行将对程序中后续指令的执行产生较小的不利影响。

    在一个处理系统及其操作方法中,首先将某一指令调度到执行电路中执行,然后在该指令执行完以前,将一条串行化的指令也调度到该执行电路中。

    本发明的一个技术优点是:串行化的指令的执行将对程序中后续指令的执行产生较小的不利影响。

    参照附后地一些图表以及下面对它们所作的说明,可以更好地来理解本发明的一个典型的实施例及其优点。其中:

    图1是根据较佳实施例的用于处理信息的一个处理器的框图;

    图2是图1中处理器的一个定点执行部件的框图;

    图3是图1中处理器的一个定序部件的框图;

    图4是图3中定序部件的一个排序缓冲器的概念性示意图。

    图5a-b是图1中处理器所处理的指令的各个阶段的示意图;

    图6是图1中处理器的一个排序缓冲器的概念性示意图;

    图7是图6中四条指令的各个阶段的示意图;

    图8a-d是图1中处理器的重命名缓冲器的概念性示意图;

    图9是在不具备较佳实施例的显著特征的情况下,四条指令的各个阶段的示意图;

    图10a-d是依据图9的一个处理器的重命名缓冲器的概念性示意图;

    图11是图1中处理器的重命名缓冲器的另一实施例的框图,

    图12a-c是图1中处理器的一个排序缓冲器的概念性示意图;

    图13图12a-c中五条指令的各个阶段的示意图;

    图14a-f是图1中处理器的重命名缓冲器的概念性示意图;

    图15是在不具备较佳实施例的显著特征的情况下,图12a-c中五条指令的各个阶段的示意图;

    图16a-h是在图15所示的指令处理的各个周期中,图1中处理器的重命名缓冲器的概念性示意图。

    通过参照图1-16h,我们可以更好地来理解本发明的一个典型的实施例。附图中使用同类数码来标识相应的同类图表。

    图1是依据较佳实施例的一个信息处理器10的结构图。在较佳实施例中,处理器10是一个单片集成电路的超标量微处理器。如下所述,它包括各种处理部件,寄存器,缓冲器,存贮器等,所有这些都由集成电路构成。再者,在较佳实施例中,处理器10根据精简指令集计算技术(RISC)进行操作。如图1所示,系统总线11与处理器10的一个总线接口部件(BIU)12相连。BIU12控制处理器10和系统总线11之间的信息传输。

    BIU12与处理器10的一个指令高速缓存14及一个数据高速缓存16相连。指令高速缓存14将指令输出到定序部件18。定序部件18对来自指令高速缓存14的指令作出响应,有选择地将指令输出到处理器10的其他执行电路。

    除了定序部件18外,在较佳实施例中,处理器10的执行电路还包括多个执行部件,即:分支部件20,定点部件A(FXUA)22,定点部件B(FXUB)24,复杂定点部件(complex fixed point unit-CFXU)26,存数/取数部件(LSU)28和浮点部件(FPU)30。FXUA22、FXUB24、CFXU26和LSU28从通用体系寄存器(general purposearchitectural register-GPRs)32和定点重命名缓冲器34读入它们的源操作数信息。此外,FXUA22和FXUB24从进位寄存器(CA)42处获得进位。FXUA22、FXUB24、CFXU26和LSU28将它们操作的结果(目的操作数信息)输出到定点重命名缓冲器34的指定单元中存贮起来。再者,CFXU26从专用寄存器(SPRs)40输入源操作数信息并向它输出目的操作数信息。

    FPU30从浮点体系寄存器(floating point architecturalregister-FPRs)36和浮点重命名缓冲器38读入它的源操作数信息,并将它的操作结果(目的操作数信息)输出到浮点重命名缓冲器38的指定单元中存贮起来。

    为响应取数指令,LSU28从数据高速缓存16中输入信息,并将该信息复制到重命名缓冲器34和38的指定的一个中。如果数据高速缓存16中没有存贮该信息,数据高速缓存16则通过BIU12和系统总线11从连接在系统总线11上的系统存贮器39中读入该信息。此外,数据高速缓存能够通过BIU12和系统总线11将信息从数据高速缓存16传送到连在系统总线11上的系统存贮器39中。为响应存数指令,LSU28从GPRs32和FPRs36的指定的一个中读出信息;并将该信息复制到数据高速缓存16中。

    定序部件18从/向GPRs32和FPRs36输入/输出信息。分支部件20从定序部件18输入指令和指示处理器10当前状态的信号。为响应该指令和信号,分支部件20向定序部件18输出指示适当内存地址的信号,该地址所指向的内存空间存贮了一个将由处理器10来执行的指令序列。为响应这些从分支部件20发出的信号,定序部件18从指令高速缓存14中读入所指向的指令序列。如果指令序列中的一条或多条指令没有存贮在指令高速缓存14中,指令高速缓存14则(通过BIU12和系统总线11)从连接在系统总线上的系统存贮器39中读入该指令。

    为响应从指令高速缓存14中读入的指令,定序部件18有选择地将指令分派到相应的执行部件20、22、24、26、28或30中。每个执行部件执行某一特定指令类的一条或多条指令。例如,FXUA22和FXUB24对源操作数执行第一类定点数学运算,如加、减、与、或以及异或;CFXU26对源操作数执行第二类定点数学运算,如定点乘法和除法;FPU30对源操作数执行浮点运算,如浮点乘法和除法。

    当信息存放在重命名缓冲器34的某一选定的单元里时,该信息与指令指定的某一存贮单元(例如,GPRs32的某一单元或CA寄存器42)相关联,而所选定的重命名缓冲器正是为此指令而分配的。为响应从定序部件18中来的信号,存放在重命名缓冲器34中指定单元里的信息被复制到与其相关的GPRs32的某一单元(或CA寄存器42)中。正如后面将结合图6-10所深入讨论的那样,响应产生该信息的指令后完成,定序部件18操纵了对存放在重命名缓冲器34中某一选定单元里的信息的这种复制过程。该复制过程被称作“回写”。

    当信息存放在重命名缓冲器38中某一选定的单元里时,该信息与FPRs36中某一单元相关联。为响应从定序部件18中来的信号,存放在重命名缓冲器38中某一选定单元里的信息被复制到与其相关的FPRs36中的某一单元中。响应产生该信息的指令的完成,定序部件18操纵了对存放在重命名缓冲器38中某一选定单元里的信息的这种复制过程。

    通过在各个执行部件20、22、24、26、28和30中同时处理多条指令,处理器10可以获得很高的性能。相应地,每条指令都按照各阶段的序列来处理,这些阶段都可以与其他指令的阶段并行地执行。这一技术被称作“流水线操作”。本发明的较佳实施例的一个显著特点是,一条指令通常按六个阶段来处理,即,取指、解码、调度、执行、完成和回写。

    在取指阶段,定序部件18根据存放指令序列的一个或多个内存地址,有选择地从指令高速缓存14中读入一条或多条指令,这一点我们已经在上面的叙述中结合分支部件20和定序部件18做过详细的讨论。

    在解码阶段,定序部件18对取到的多至四条的指令进行解码。

    在调度阶段,定序部件18为每条被调度指令的结果(目的操作数信息)保留一个重命名缓冲器单元,然后响应解码阶段的解码,有选择地将经过解码的多至四条的指令调度到相应的执行部件20、22、24、26、28或30中。在调度阶段,还将为每个所选定的执行部件提供相应指令的操作数信息。处理器10按照指令的编程顺序对它们进行调度。

    在执行阶段,执行部件执行调度给它们的相应指令,并象前面所详细讨论过的那样,将运算结果(目的操作数信息)输出到重命名缓冲器34和38中的所选择单元里。通过这种方式,处理器10可以不按照指令的编程顺序来执行指令。

    在完成阶段,定序部件18指出指令已经执行完毕,这将在下面的叙述中结合图3-4进行更为详细的讨论。处理器10按照指令的编程顺序完成对指令的执行过程。

    在回写阶段,定序部件18分别操纵从重命名缓冲器34和38到GPRs32和FPRs36的信息复制过程。在下面的叙述中,我们将结合图6-10,对该过程作更为详细的讨论。同样是在某一特定指令的回写阶段,处理器10为响应该指令,将对其体系状态进行更新。处理器10按照指令的编程顺序完成各条指令的回写阶段。正如下面将结合图6-10所详细讨论的那样,在某些特定的情形下,处理器10将不无益处地把指令的完成阶段和回写阶段合二为一。

    在较佳实施例中,每条指令需要一个机器周期的时间来完成指令处理过程中的一个阶段。但是,某些指令(如由CFXU26所执行的复杂定点指令)可能需要多于一个周期的时间。因此,相应于先前指令完成所需时间的变化,在特定指令的执行和完成阶段之间可能会产生一个可变的延迟。

    图2是处理器10的执行部件FXUA22的结构图。FXUA22包括两个备用站,如50a和50b所示。同样,分支部件20、FXUB24、CFXU26、LSU28和FPU30也各自拥有自己的备用站。为简明起见,下面我们仅以FXUA22为例讨论其它执行部件的操作及其各自的备用站。

    备用站5a和5b都能存放从定序部件18分派来的、要求FXUA22执行的某条指令的信息。每个备用站包含一个目的寄存器域、操作数A域、操作数B域和操作码域。此外,作为本发明的较佳实施例的一个显著特点,每个备用站另外还包含一个相应的允许执行(EOK)域。

    在目的寄存器域,备用站至少为其相应的指令确定一个目的寄存器(如定序部件18所指定的)。类似地,在各自的操作数A和操作数B域,备用站为其相应的指令存放源操作数信息(自GPRs32、重命名缓冲器34、FXUB24、CFXU26或LSU28)。在操作码域,备用站根据其相应的指令存放一操作码(如定序部件18所指定的),该操作码指出FXUA22应对源操作数信息执行何种操作。

    为响应从控制逻辑56来的信号,执行逻辑54从某一备用站的操作数A和操作数B域读入源操作数信息,并立即执行某一运算(由备用站中存放的操作码指出)。该运算的结果信息从执行逻辑54输出到重命名缓冲器34、FXUB24、CFXU26和LSU28中。该信息存放在重命名缓冲器34中某一选定的单元里。根据由多路转换器58的输出所确定的某一目的寄存器,存放在选定重命名缓冲器里的信息将与GPRs32中的某一单元相关联。

    本发明的较佳实施例的一个显著特点是,备用站还在它的EOK域存放EOK信息(如定序部件18所指定的)。该EOK信息有利于包含处理器10延迟一条串行指令的执行的某些情况。执行串行化是在诸如处理器10之类的多流水线、无序执行处理器中延迟指令执行过程的一种技术。处理器10延迟一条串行指令的执行的第一种情况是该指令必须按一定的顺序执行。处理器10延迟一条串行指令的执行的第二种情况是该指令必须等到其源操作数信息可用并且有效后方可开始执行。

    就第一种情况而言(指令必须按一定的顺序执行),处理器10通常按照随机的顺序执行指令,为此,指令就没有按照它在指令流中的程序顺序来执行。相应地,指令的结果(目的操作数信息)也就没有必要按照指令的编程顺序出现。但是,处理器10是按照指令的编程顺序往体系寄存器(即GPRs32和FPRs36)中回写指令的结果的。因此,处理器10中设置了相应的重命名缓冲器34和38,这些缓冲器用于临时存放指令的结果,一直到某一合适的时间(即执行完没有异常情况的所有前驱指令),将存放的中间结果往体系寄存器中回写时为止。

    不过,作为较佳实施例中的一个例子,某些指令在SPRs40(图1)上进行操作,这时直接将指令的结果写到SPRs40中,中间不需要经过重命名缓冲器。关于这种指令的一个例子是Move To指令,在该指令中,CFXU26将信息从GPRs32中的某一单元里移动到SPRs40中的某一单元里。如图1所示,CFXU26是和SPRs40相连的。Move To指令在执行过程中刷新SPRs40中的某一单元。作为另外一个例子,一条存数指令的执行结果是将数据直接写到数据高速缓存16中的某一存贮单元里,中间不需要再经过重命名缓冲器。

    处理器10不按照随机顺序执行这种类型的指令(其中指令的结果不经过重命名缓冲器而直接写到某一体系寄存器或存贮单元里),以便能够获得精确的中断和异常处理。此外,因为指令的结果是直接写到体系寄存器或存贮单元里的,中间勿需经过重命名缓冲器暂存,所以该指令在执行过程中没有回写阶段。相应地,为了确保指令的完成阶段和回写阶段按顺序地完成,处理器10延迟对该指令的执行过程,一直等到其所有的前驱指令都执行完为止。

    就第二种情况而言(指令必须等到其所有的源操作数信息可用并且有效后方可开始执行),参照图2,有一备用站在定序部件将指令调度时为尚未获得源操作数信息的相应指令临时保存信息。为响应自某一执行部件来的关于源操作数信息可用的信号,该备用站读入并且保存该源操作数信息。备用站于某个适当的时刻将这些源操作数信息转送到执行逻辑54中。

    在本发明的较佳实施例中,大多数的指令指定一个或多个GPRs32或FPRs36作为其源操作数。相应地,在本发明的较佳实施例中,备用站包含用于转送从执行部件来的信息的电路。

    但是,在本发明的较佳实施例中,备用站并不包含用于转送从其他类型的源操作数,如CA寄存器42或SPRs40来的信息的电路。这是因为,这种电路的尺寸和花费跟需要无转送源操作数的指令的出现频度比较起来,设置这种电路是很不合算的。为此,处理器10至少将这种无转送源操作数类型的指令的执行过程延迟至所有的前驱指令执行完为止。在所有的前驱指令执行完以后,即从体系寄存器(如SPRs40)的指定单元中读出相应的无转送源操作数。关于这种类型的指令的例子有:(1)读CA寄存器42的扩展算术运算指令,和(2)将信息从SPRs40的某一单元传送至GPRs32的某一单元的Move From指令。

    综上所述,处理器10在两种情况下至少将一条串行指令的执行过程延迟至其所有的前驱指令执行完为止。第一种情况是指令不能随机执行。第二种情况是指令至少指定了一个处理器10没有为之提供转送电路的源操作数。通过定序部件18指定EOK信息,并将之存放在备用站里,可以比较好地适应这种情况。

    如果某条指令受其执行串行化的影响,那么定序部件18会在该指令往FXUA22中调度时将其EOK位(在存放于备用站的EOK域的EOK信息中)清为逻辑0。通过将EOK位清为逻辑0,定序部件18可以阻止FXUA22执行该指令(即使该指令已经准备就绪也不例外)。因此,FXUA22只有在定序部件18通过线路60输出一个信号时,才能开始执行该指行串行化指令,这点将在下面做更进一步的讨论。

    如果一条指令不受其执行串行化的影响,那么定序部件会在该指令往FXUA22中调度时将其EOK位置为逻辑1。通过将EOK位置为逻辑1,只要指令的源操作数信息可用并且有效,定序部件18允许FXUA22立即执行该指令。

    图3是定序部件18的结构图。如上面所进一步讨论的那样,在取指阶段,定序部件18有选择地从指令高速缓存14中读入多至四条指令,并将这些指令存放在指令缓冲器70中。在解码阶段,解码逻辑72从指令缓冲器70中读入取到的多至四条的指令,并对其解码。在调度阶段,调度逻辑74有选择地将多至四条经过解码的指令分别调度到选定的(相应于解码阶段的解码结果)执行部件20、22、24、26、28或30中。

    图4是本实施例的定序部件18的一个排序缓冲器76的概念性示意图。如图4所示,排序缓冲器76共有16个单元,分别按缓冲器号0-15标记。每个单元有五个域,即“指令类型”域、“目的GPR数”域、“目的FPR数”域、“完成”域和“异常”域。另外,指令类型域还有一个“执行部件”子域和一个“EOK”子域。

    参照图3,当调度逻辑74往某个执行部件调度一条指令时,定序部件18将该指令分配给排序缓冲器76中的某一相关单元。定序部件18本着先进先出的原则以循环方式把排序缓冲器76中的单元分配给所调度的指令,即定序部件18首先分配0号单元,接着按顺序分配单元1-15,然后回过来再分配0号单元。因为所调度的指令已经在排序缓冲器76中分配到了一个相关的单元,调度逻辑74就把与该指令相关的信息输出存放到排序缓冲器76中相关单元的各个域和子域中。

    例如,在图4的0号单元中,排序缓冲器76指出该指令已调度给FXUA22。此外,单元0指出被调度的指令是串行化的,其EOK=0,处理器10至少将该指令的执行延迟至其所有的前驱指令执行完为止。再者,在1号单元,排序缓冲器76指出另一条后续指令也是串行化的,同样其EOK=0。

    本发明的较佳实施例的另外一些显著特征是,0号单元进一步指出被调度的指令具有一个目的GPR寄存器(从而“目的GPR数”=1)和零个目的FPR寄存器(故“目的FPR数”=0),并且还没有执行完(故“完成”=0),也没有引起什么异常(故“异常”=0)。

    在执行部件执行一条分配给它的指令时,该执行部件会对排序缓冲器76中与指令相关联的单元进行修改。特别是,为响应指令执行完毕这一信号,执行部件将修改相应单元的“完成”域(即使“完成”=1)。如果在执行指令的过程中,执行部件遇到一个异常信号,它将修改相应单元的“异常”域(即使“异常”=1)。

    让我们回过来再看一看图3,排序缓冲器76的单元由定序部件18的完成逻辑80和异常逻辑82来读取。此外,本发明的较佳实施例的一个显著特征是,排序缓冲器76的单元还由定序部件18的执行串行化逻辑84来读取。异常逻辑82根据排序缓冲器76中的“异常”域来处理在执行指令的过程中所遇到的异常。

    根据排序缓冲器76中的“完成”域和“异常”域,完成逻辑80向调度逻辑74、执行串行化逻辑84和排序缓冲器76中输出相应的信号。通过这些信号,完成逻辑80按编程顺序指出所执行的指令已经完成。完成逻辑80指出一条指令已经完成,如果该指令满足以下条件:

    条件1:执行单元已经完成对该指令的执行(从而使得排序缓冲器76中与该指令相关联的单元里“完成”=1);

    条件2:在处理该指令的任何阶段都没有遇到异常(即在排序缓中器76中与该指令相关联的单元里“异常”=0);

    条件3:任何前面已经调度过的指令都满足条件1和条件2。

    调度逻辑74根据排序缓冲器76中的信息决定增加需调度的指令的合适条数。

    本发明的较佳实施例的一个显著特征是,为响应从完成逻辑80来的信号,执行串行化逻辑84通过线路60有选择地往FXUA22输出一个信号。如果与调度到FXUA22的指令相关的EOK位(在排序缓冲器76中与该指令相关联的单元的“指令类型”域里)已被清为逻辑0,那么,为响应该被调度指令的所有前驱指令都已完成这一事件,执行串行化逻辑84将通过线路60输出该信号。FXUA22只有在执行串行化逻辑84通过线路60发出该信号时才执行调度给它的指令;当执行串行化逻辑84通过线路60输出该信号时,上述调度的指令(与其相关联的EOK位已清为逻辑0)将成为FXUA22的备用站50a-b中等待最久的一条指令,因为指令是按照它们的编程顺序“完成”的。

    同样,执行串行化逻辑84通过线路86、88、90、92和94向分别与其相连的执行部件20、24、26、28和30有选择地输出信号。

    图5a-b是指令的各个阶段的示意图。参照图5a,一条执行串行化的指令INST n+1(例如一条Move To指令或一条Move From指令)的执行(周期6)一直要延迟到所有的前驱指令都完成为止(例如在前驱指令INST n的周期5之后)。但是,处理器10并不延迟位于执行串行化指令INSt n+1之后的指令INST n+2的调度(周期3)或执行(周期4)过程。通过这种方式,处理器10可以连续地调度位于一条执行串行化指令(如INST n+1)之后的指令(如INSTn+2)。并且,处理器10的一个执行部件还可以不按顺序将指令从该执行部件的备用站发送到其执行逻辑(如图2中的执行逻辑54),即使在执行部件的备用站中等待最久的指令可能受执行串行化的影响。

    较佳实施例中的处理器10能够获得比其他方案更高的性能。如图5b所示,根据某一方案,响应对一条受执行串行化影响的指令INST i+1的解码(周期2),指令INSt i+2的调度(周期8)过程必须延迟。在这种方案中,只有在所有前面已经调度的指令都已“完成”之后(例如在前面执行串行化指令INST i+1的周期7之后),才能开始指令INST i+2的调度(周期8)过程。这种方案的一个缺点是,对于任何位于某一执行串行化指令(如INST i+1)之后的指令(如INST i+2)来说,其执行过程必须延迟。

    如前所述,处理器10可以连续地调度位于一条执行串行化指令之后的指令。一条Move From指令是一条执行串行化指令,因此,它将受益于本较佳实施例的执行串行化技术。此外,本较佳实施例的另外一个显著特征是,处理器10还包含用于将一条Move From指令的结果(目的操作数信息)在往GPRs32的相应单元回写之前输送到某一选定的重命名缓冲器中存放起来的电路。

    处理器10支持这种重命名,而不管Move From指令的目的寄存器是否是GPRs32之一。通过这种方式,处理器10使用其备用站中已有的转送电路,连同用于搜寻重命名缓冲器的电路,以正确地将(Move From指令的)目的操作数信息与Move From指令之后调度的一条指令的某个源寄存器进行匹配。因此,其它位于Move From指令之后的指令可以在该指令调度完之后的任何时间内进行调度。对于Move From指令来说,如果不使用这种电路,在该指令完成之前,其它位于该指令之后的指令都将无法进行调度,因为其它指令可能需要使用该指令的目的操作数信息(作为它们的源操作数信息)。

    本较佳实施例的另外一个显著特征是,处理器10通过使用一种便利的方式响应与取指和解码相关的异常(“IFDRE”),从而将指令的调度过程进行流水线式调度。如果异常条件完全可以从指令和处理器10的状态中检测到,处理器10将在取指或解码阶段检测到一个与取指和解码相关的异常。这种与取指和解码相关的异常的例子有指令访问缺页、指令访问违反存贮保护、违犯特权指令和非法指令。

    较为有利的是,定序部件18根据对这种与取指或解码相关的异常的检测将引起IFDRE的指令调度到某个执行部件的一个备用站中,并将其EOK位清为逻辑0(如前面结合图2-4所详细讨论的那样)。此外,定序部件18还通过将排序缓冲器76中与该引起IFDRE指令相关联的单元里的“异常”域设置为1(同时保持“完成”域为0)的方式来保存IFDRE条件的指示。这种指示指出该指令是一条引起IFDRE的指令。

    如前结合图2-4所述,通过将EOK位清为逻辑0,定序部件18可以阻止执行部件执行已经调度给它的指令,即使指令已经准备就绪也不例外。因此,执行部件只有在定序部件18通过线路60、86、88、90、92或94中一条与其相连的线路输出一个信号时,才能执行该指令。

    但是,在引起IFDRE的指令的所有前驱指令都已完成之后,定序部件18将直接处理这一与取指或解码相关的异常,而不是通过相应相连的线路60、86、88、90、92或94中的一条向执行部件发出一个信号。因此,引起IFDRE的指令从不由执行部件来执行。根据排序缓冲器76中与引起IFD RE指令的相关联的单元“异常”=1且“完成”=0,定序部件18即认为该指令是一条引起IFDRE的指令。

    在这种方式中,处理器10使用调度逻辑74(图3)来流水化调度和加速指令的调度过程。调度逻辑在一超标量处理器中是速度方面极为关键的电路。因此,本较佳实施例中的处理器10能够获得比其他设计方案要高的性能。根据其它的方案,处理器从不调度引起IFDRE的指令。这类替代方案的调度过程通常都很复杂并且速度很慢,因为对每条指令来说,在决定是否调度它之前,处理器必须检测所有与取指和解码相关的异常情况。例如在这种方案中,处理器必须根据第n条指令或前面n-1条前驱指令是否有一与取指或解码相关的异常情况来决定是否调度第n条指令。

    比较起来,在本较佳实施例中,调度逻辑74(图3)能够独立地来处理与取指或解码相关的异常情况。即使最后已经决定将指令调度到执行部件,定序部件18还要判断该指令是否存在一IFDRE情况。如果定序部件18断定该指令中存在IFDRE情况,它将输出一个关于IFDRE的信号,以禁止执行部件对于该指令的执行。具体来说,一旦定序部件18断定存在一个有关该指令的IFDRE情况,它将在实际调度过程中通过下述手段输出一个这样的信号:(1)将排序缓冲器76中与该引起IFDRE的指令的相关的单元里的“异常”域置为1(同时保持“完成”=0);(2)将该引起IFDRE的指令的备用站中的EOK位清为逻辑0。

    这一点是很有好处的,因为在决定调度某条指令之后,如果再想挽回这一决定所造成的影响并撤销对该指令的调度,通常是不现实的。另外,在调度这个周期里,决定调度该指令之后还会执行一些附加的操作。因此,处理器10在决定是否调度某条指令之前勿需去检测任何异常情况。这对于定序部件18希望在处理器10的单一周期中同时调度多条指令来说是特别有用的。

    图6是排序缓冲器76的概念性示意图,其中给出了四条指令,这四条指令在处理器10的同一周期里完成了指令的执行阶段(“完成”=1)。图7是图6中四条指令的各个阶段的示意图。图8a-d是处理器10中重命名缓冲器34的概念性示意图。

    参照图6-8,本较佳实施例的一个显著特征是,回写和指令的完成是相互独立的,故由处理器10所处理的指令的回写阶段和完成阶段是可以相互分开的。通过这种把回写和完成分开的方式,处理器10在重命名缓冲器和体系寄存器之间使用较少的回写端口即可获得很高的执行效率。例如,如图1所示,本较佳实施例的处理器10在重命名缓冲器34和GPRs32之间及重命名缓冲器38和FPRs36之间各包含两个回写端口。由于使用了较少的回写端口,这样就缩小了重命名缓冲器34和38及体系寄存器32和36的物理尺寸。此外,完成逻辑80(图3)更为流畅,从而处理器10可以更快地判定一条特定的指令是否能在当前指令周期“完成”。

    在本较佳实施例中,处理器10每个周期可以“完成”多达四条指令,并且每条指令可以拥有多达两个目的操作数。因此,如果处理器10不支持回写和完成的分离,为能在某一周期同时完成四条指令(如果每条指令有两个目的操作数),它必须(在重命名缓冲器34和GPRs32之间)设置八个回写端口。这是因为一条指令的“完成”需要为该指令的每个目的操作数设置一个回写端口,这些操作数需从重命名缓冲器中复制到某一与其关联的体系寄存器中。

    在具有较少的回写端口的情况下,当需要在同一周期考虑更多指令的回写时,回写端口的有效性验证问题就变得更为复杂。这是因为,在某一周期里,对某一指令来说,一个回写端口的有效性依赖于在本周期或先行周期中用于前驱指令的回写端口的个数。

    将回写和完成分开之后,处理器10中的完成逻辑80(图3)就变得更为流畅了。这是因为,一条指令的“完成”依赖于下面的条件:

    条件1:执行部件已完成了该指令的执行过程;

    条件2:在处理该指令的每个阶段都没有遇到任何异常;以及

    条件3:所有前面已调度的指令都满足条件1和条件2。

    在完成和回写分开的情况下,于某一周期中,如果有回写端口可供使用,则处理器10将一条已完成的指令的目的操作数从重命名缓冲器复制到某一体系寄存器中保存起来。如果在该周期中没有可以使用的回写端口,那么处理器10将推迟这一复制过程,直至在稍后的某个周期里有一回写端口可用时为止。

    参照图6,排序缓冲器76中保存了在处理器10的同一周期里执行完成的四条指令的一些相关信息。图7给出了分别与图6中排序缓冲器7、8、9和10相关联的四条指令INST X、INST X+1、INSTX+2和INST X+3的各个阶段。从图6中可以看出,指令INST X和指令INST X+1都只有一个目的操作数(“目的GPR数”=1),而指令INST X+2和指令INST X+3各拥有两个目的操作数(“目的GPR数”=2)。如图7所示,指令INST X、INST X+1、INST X+2和INST X+3都在周期4结束时完成其执行过程。

    图8a-d是处理器10中重命名缓冲器34的概念性示意图。为清楚起见,下面的讨论仅以定点重命名缓冲器34的操作为例,对于浮点重命名缓冲器38的情况可以以此类推。如图8a-d所示,重命名缓冲器34包括12个单元,分别按0到11编号。定序部件18本着先进先出的原则以循环方式为已调度的指令分配重命名缓冲器的各个单元,即首先分配0号单元,接着按顺序分配1到11号单元,然后回起来再分配0号单元。

    参照图8a-d,重命名缓冲器中的单元2和单元3已分别分配给指令INST X和INST X+1,用以存放目的操作数信息。因为指令INST X+2有两个目的操作数,所以给它分配了4和5两个单元用以存放目的操作数信息。类似地,给指令INST X+3分配了6和7两个单元。

    图8a指出在图7的周期4和周期5开始时分配指针80、回写指针82和完成指针84的状态。处理器10设置这些指针的目的是为了更好地控制重命名缓冲器34的读写过程。分配指针80用以指示一个缓冲单元是否已分配给某一特定的指令。如图8a所示,分配指针80指向第8号单元,因此8号单元即是下一个将要分配给某一指令的缓冲单元。

    本较佳实施例的一个显著特征是,处理器10还维护回写指针82用以指示一个重命名缓冲单元(前面已分配给某一指令)是否可以再分配给另外一条指令。如图8a所示,回写指针82指向单元2,因此处理器10下一个将从单元2中将目的操作数信息(存放在图8a中重命名缓冲器的“信息”域里)复制到GPRs32的某一单元里(如图8a中重命名缓冲器的“寄存器号”域所指出的)。

    相应地,处理器10将指令的结果(目的操作数信息)从重命名缓冲器复制到体系寄存器之后,即将回写指针82进行移动(越过前面已经分配给某条指令的一个命名缓冲单元)。通过这种方式,处理器10保留一个已分配的重命名缓冲单元用以存放相应指令的结果(目的操作数信息),直到它将该结果复制到某一体系寄存器里为止。

    另外,处理器10还维持完成指针84用以指示(对先前已经分配给某一指令的一个重命名缓冲单元)相应的指令是否满足下述条件:

    条件1:相应的执行部件已经完成该指令的执行过程;

    条件2:在处理该指令的各个阶段都没有遇到任何异常;以及

    条件3:所有先前已调度的指令都满足条件1和条件2。

    如图8a所示,完成指针84指向重命名缓冲器的单元2,因此单元2即是下一个可以满足条件1、2和3的重命名缓冲单元。本较佳实施例的一个显著特点是,处理器10维护完成指针84时,不受指令的结果是否已从重命名缓冲器复制到体系寄存器这一条件的制约。

    因此,“重命名项”可以定义为从完成指针84所指的缓冲器单元以及该重命名缓冲单元之前由分配指针80所指的另一重命名缓冲器单元。“回写项”可以定义为从回写指针82所指的缓冲器单元以及该重命名缓冲单元之前完成指针84所指的另一重命名缓冲器单元。回写项存放那些已经“完成”但其结果尚未从重命名缓冲器复制到体系寄存器(例如由于通向体系寄存器的写端口无一可用)的指令的结果。

    从概念上讲,回写项位于重命名项和体系寄存器之间。非常有用的是,如果一条指令在完成阶段发现有一回写端口可用,其结果可以越过回写项而直接写入体系寄存器。另外,如重命名项一样,如果一个执行部件正在执行一条指定了某一体系寄存器的指令,并且该寄存器与相应回写项中的信息有关联,则处理器10将操纵回写项往相应的执行部件中输出该信息。

    例如,图8b给出了在图7的周期6开始时分配指针80、回写指针82和完成指针84的状态。如图8b所示,分配指针80仍未变化,因为处理器10尚未调度新的指令。但完成指针已从单元2往前移动到了单元8,这表明在周期5中完成了总共有六个目的操作数的四条指令INST X、INST X+1、INST X+2和INST X+3。

    另外,在图8b中回写指针82从单元2往前移动到了单元4,这表明在周期5中已为指令INST X和INST X+1完成了目的操作数信息的回写过程。图7中“完成/回写”表示指令INST X和INST X+1的完成和回写过程都在周期5中进行。通过这种方式,指令INST X和指令INST X+1的结果(在重命名缓冲器的2号和3号单元里)可以越过回写项而直接写入GPRs 32,因为在周期5开始时有两个回写端口可以使用。在图8b中,回写指针82没有移动超过重命名缓冲单元4,因为在周期5中两个回写端口都要用于指令INST X和INST X+1的结果的回写过程。

    图8C给出了图7中分配指针80、回写指针82和完成指针84在周期7开始时的状态。如图7和8C所示,在周期6中,两个回写端口都用来回写指令INST X+2的两个结果。因此,回写指针82从单元4移到了单元6。分配指针80仍保持不动,因为处理器10尚没有调度新的指令。同样,完成指针84也没有变化,因为处理器10此间没有完成另外的指令。

    图8d给出了图7中分配指针80、回写指针82和完成指针84在周期8开始时的状态。如图7和8d所示,在周期7中,两个回写端口都用来回写指令INST X+3的两个结果。因此,回写指针82从单元6移到了单元8。分配指针80仍保持不动,因为处理器10尚没有调度新的指令。同样,完成指针84也没有变化,因为处理器10尚没有完成新的指令。

    图9是在不具备本较佳实施例的显著特征的情况下,四条指令的各个阶段的示意图。其中处理器10分开处理完成和回写阶段,指令INST Y、INST Y+1、INST Y+2和INST Y+3分别与图6中排序缓冲单元7、8、9和10相关联。

    图10a-d是依据图9的一个处理器的重命名缓冲器的概念性示意图。具体来说,图10a至图10d分别给出了图9中分配指针90和完成指针94在周期4和5开始时、在周期6开始时、在周期7开始时及在周期8开始时的状态。

    如图10a-d所示,在不具备本较佳实施例的显著特征且处理器10分开处理完成和回写阶段的情况下,一条指令(拥有一个已分配给它的重命名缓冲器)只有在其结果确实已从相应的重命名缓冲器转贮到某一体系寄存器后才算完成。比较起来,在具备本较佳实施例的显著特征且处理器10分开处理完成和回写阶段的情况下,处理器10另外还维护一个回写指针82用以指示一个重命名缓冲单元(先前已分配某一指令)是否可以再分配给另外一条指令。此外,处理器10“完成”一条指令时并不考虑该指令的结果是否确实已从相应的重命名缓冲器转贮到某一体系寄存器。因此,处理器10仅在一个周期中就可“完成”多至四条指令,即使每条指令可能有两个目的操作数,以及较少目的操作数在该周期内转贮到GPRs 32中。

    图11是重命名缓冲器34的一个可选实施例的结构图,其中“回写项”与“重命名项”分开存放在缓冲器110中,而“重命名项”存放在缓冲器112中。在某一特定的周期中,为响应某条指令(为该指令分配一“重命名项”)的完成,缓冲器112将分配给该指令的“重命名项”中的信息转贮到缓冲器110的某一“回写项”中。在某一特定的周期中,为响应该周期中通向GPRs32的两个回写端口中某一端口的可用性,缓冲器110将“回写项”中的信息转送到GPRs32中的某一单元里存放起来。

    如图11所示,缓冲器112可以通过八个端口中的任一个向缓冲器110输出信息,这样,缓冲器112能在处理器10的任何一个周期中从最多可达八个的“重命名项”向缓冲器110输送信息。因此,处理器10在某一周期中能同时完成最多可达四条的指令,即使每条指令都可能有两个目的操作数以及只有较少的目的操作数在该周期内转贮到GPRs32中。比较有利的是,如果在完成阶段有一回写端口可用,结果(目的操作数信息)可以越过缓冲器110的“回写项”而直接写到GPRs32中。如图11所示,处理器10通过适当地操纵多路转换器113a和113b来实现这一越过。这两个多路转换器按图11中的方式与缓冲器110和112及GPRs32相连。

    图11中重命名缓冲器34的另一实施例的一个优点是在完成了(仍在回写之前)先前与缓冲器112中某一重命名项相关的某一指令(先前已将该重命名项分配给该指令)之后,该重命名项可以再分配给另外一条指令,因为在先前关联的指令完成时,重命名项中的信息即刻便转贮到缓冲器110中的回写项中了。另一方面,在图11中,如果某一执行部件执行一条指定了某一体系寄存器的指令,则多路转换器114会适时地从缓冲器110向该执行部件输出选定的与相应体系寄存器相关的信息。虽然本较佳实施例中处理器10在重命名缓冲器和体系寄存器之间设置了两个回写端口,但对一个具体的实施例来说,回写端口的合适数量其实是能使得重命名项和回写项变满从而延迟指令调度的一个似然函数。

    如前面结合图2-5所仔细讨论的那样,处理器10在两种情况下至少将一条串行化指令的执行过程延迟至其所有的前驱指令都已执行完为止。第一种情况是指令不能按照随机方式来执行。第二种情况是指令至少指定了一个处理器10没有为之提供转送电路的源操作数。

    关于第一种情况,有些指令对专用体系寄存器SPRs40(图1)进行操作,指令的结果直接写入SPRs40,中间勿需再经重命名缓冲器缓存。关于这种指令的一个例子是一条Move To指令,该指令将信息从GPRs32中的某一单元转送到SPRs40中的某一单元。如图1所示,该Move To指令由CFXU26来执行,它在执行时即时更新SPRs40中的某一单元。类似地,一条Store指令在执行时即时更新数据高速缓存16中的某一存贮单元。处理器10并不试探地去执行这种类型的指令(这类指令结果不需经过重命名缓冲器的暂存而直接写至体系寄存器或内存单元),以便能够实现精确的中断和异常。因此,为确保按顺序完成和回写,处理器10将延迟Move To指令或Store指令的执行,直到其所有的先行指令完成时为止。

    如果与调度给某个执行部件的指令相关联的EOK位(在排序缓冲器76中与该指令相关联的单元的“指令类型”域)清成了逻辑0,那么在该指令的所有先行指令都已完成后执行串行化逻辑84将通过与该执行部件相连的相应线路60、86、88、90、92或94输出一个信号。执行部件只有在执行串行化逻辑84输出该信号时才执行该指令。

    图12a-c是排序缓冲器76的概念性示意图。图13是图12a-c中五条指令的各个阶段的示意图。图14a-f是处理器10中重命名缓冲器34的概念性示意图。

    图12a给出了图13中周期4开始时排序缓冲器76的状态。因此,在图12a中,排序缓冲器76为图13中周期3期间所调度的四条指令存贮了信息。图13中给出了INST a、INST a+1、INST a+2和INST a+3四条指令的各个阶段,这四条指令分别与图12a中的排序缓冲器单元3、4、5和6相关联。

    如图12a所示,指令INST a被调度给FXUA22,它有两个目的操作数(“目的GPR数”=2)。指令INST a+1被调度给FXUB24,它有一个目的操作数(“目的GPR数”=1)。指令INST a+2是一条存数指令,它被调度给LSU28并且没有目的操作数(“目的GPR数”=0);另外,一旦指令INST a+2被串行化执行,排序缓冲器单元5(与指令INST a+2相关联)的EOK位即被清零。指令INST a+3被调度给CFXU26,它有一个目的操作数(“目的GPR数”=1)。

    本较佳实施例的一个显著特征是由定序部件18来判断一条指令的执行是否会引起某种异常。定序部件18在指令执行之前做出这一判断。如果一条指令不可能引起异常,定序部件18不无益处地置与该指令相关的排序缓冲器单元的“完成”为1(在调度该指令时),而不管处理器10是否确实已完成了该指令的执行。

    另外,在这种情况下,处理器10完成所有的先行指令后即“完成”该指令,而不管它是否确实已执行完这一不可能引起异常的指令。因此,在判定一条指令及其编程序列中所有的先行指令都不会引起异常后,处理器10即“完成”该指令,而不管它是否已执行完这些不可能引起异常的指令。所以,这种指令的完成阶段完全有可能先于其执行阶段;处理器10通过这种方式来支持这类指令的“提前完成”。

    通过支持“提前完成”,处理器10能够更快地来执行其后的执行串行化指令(如Move To指令或Store指令),该指令的结果勿需经过中间重命名缓冲器的缓存而直接写入某一体系寄存器或存储单元。这一点并不会降低处理器10捕获精确中断和异常的能力。这是因为所有的先行指令要么(1)已经没有异常地执行完毕,要么(2)将要没有异常地执行完。处理器10使用这种技术继续确保按顺序的完成和顺序的回写。

    例如,在图12a中,指令INST a+1和INST a+3不可能引起某一异常,故而排序缓冲单元4和6中的“完成”皆为1。图14a给出了图13中周期4开始时重命名缓冲器34的分配指针(AL)80、回写指针(WB)82和完成指针(CO)84的状态。故图14a对应于图12a。如图14a所示,WB82和CO84指向单元2,AL80指向单元6。单元2和3分配给了指令INST a。单元4和5分别分配给指令INST a+1和INST a+3。值得注意的是,这里没有给指令INST a+2分配重命名缓冲单元,因为指令INST a+2没有目的操作数。在单元2-5中,“信息有效”=0,说明这些缓冲单元的“信息”域没有存放有效数据。在周期4开始时(图13)“信息有效”=0是因为指令INST a、INSTa+1、INST a+2和INST a+3还没有执行完毕。

    在重命名缓冲单元4中,“进位有效”=1说明INST a+1修改了CA寄存器42。值得注意的是,如前所述,指令INST a+1不会引起某一异常,故排序缓冲单元4(图12a)中的“完成”=1。因此,处理器10支持修改CA寄存器42的指令的“提前完成”。

    如图14a-g所示,CA位信息暂时存放在重命名缓冲器34中。但是,本较佳实施例中的处理器10并没有包含用于将这种CA位信息从重命名缓冲器34传送到执行部件的电路。如果一条指令的源操作数信息包括CA寄存器42,那么该指令具有一个依赖于一条修改CA寄存器42的先行指令(如果有的话)的结果的源操作数信息。

    图12b给出了图13中周期5开始时排序缓冲器76的状态,其中图13中周期4期间调度的指令INST a+4的信息存放在排序缓冲器76中。图13给出了指令INST a+4的各个阶段,该指令与排序缓冲单元7相关联。如图12b所示,指令INST a+4调度给了FXUA22并且有一个目的操作数(“目的GPR数”=1);另外,排序缓冲单元7(与指令INST a+4相关联)置其EOK=0以响应指令INSTa+4被执行串行化。

    另外,因为指令INST a在周期4中执行完毕,所以图12b中排序缓冲单元3的“完成”=1。参见图13,指令INST a+2是一条Store指令。在周期4中,LSU28完成了该指令的第一个执行阶段EXECA。在EXECA阶段,LSU28翻译该指令并对其进行存储保护检查。因此,图12b中排序缓冲单元5的“完成”=1。

    图14b给出了图13中周期5开始时重命名缓冲器34的分配指针(AL)80、回写指针(WB)82和完成指针(CO)84的状态。故图14b对应于图12b。如图14b所示,WB82和CO84继续指向单元2,而AL80已从单元6向前移动到了单元7。因此,单元6也就分配给了指令INST a+4。

    在重命名缓冲单元6中,“信息有效”=0说明该单元的“信息”域尚未存放有效数据。在周期5(图13)开始时,单元6中的“信息有效”=0是因为指令INST a+4还没有执行完。另一方面,因图13中指令INST a和INST a+1已在周期4中执行完,重命名缓冲单元2和3中“信息有效”=1,这表明单元2和3的“信息”域里存放了有效数据(在图14b的“信息”域中表示为“DATA”)。

    在重命名缓冲单元6中,“进位有效”=1说明INST a+4修改了CA寄存器42。此外,指令INST a+4的源操作数信息包含CA寄存器42,从而INST a+4是一条执行串行化指令,该执行串行化指令具有一个依赖于修改了CA寄存器42的先行指令INST a+1的结果的源操作数信息。虽然指令INST a+3并没有修改CA寄存器42,但它同样具有一个依赖于先行指令INST a+1结果的源操作数信息,如图13中的箭头100所指。

    图12c给出了图13中周期6开始时排序缓冲器76的状态。图14c给出了图13中周期6开始时重命名缓冲器34中分配指针(AL)80、回写指针(WB)82和完成指针(CO)84的状态。故图14c对应于图12c。

    如图12c所示,响应图13中指令INST a、INST a+1、INST a+2和INST a+3在周期5中“完成”,排序缓冲单元3、4、5和6中的信息已被删除。值得注意的是,如图13中由“提前完成/执行”所示,在周期5中,指令INST a+1的“提前完成”要先于它的结束执行;指令INST a+1是需要处理器10用多于一个周期的时间来执行的一类指令中的一员。

    参看图14c,处理器10为响应所有先行指令(如INST a、INSTa+1和INST a+2)的完成,将CO84从先前分配给某一指令(如INST a+3)的重命名缓冲单元向前移动一个单元(如在周期6开始之前从单元5向前移动),而不管处理器10是否确实已执行完该指令(如INST a+3继续在周期6-8中执行)。

    此外,在周期5中,执行串行化逻辑84(图3)在指令INST a和INST a+1完成时通过与LSU28相连的线路92输出一个信号;这是由于指令INST a+2(已在周期3调度给LSU28)在排序缓冲单元5中相关联的EOK位已被清为逻辑O。

    在周期5中,存数指令a+2因其已经无异常地执行完阶段EXEC A(周期4)且其先行指令INST a和INST a+1也已完成,其自身也可“完成”。在执行的第二阶段EXEC B,LSU28才确实将信息写入数据高速缓存16的某一存储单元。LSU28只有在执行串行化逻辑84通过线路92输出相应的信号后才执行Store指令INSTa+2的执行阶段EXECB。

    如图14c所示,AL80继续指向重命名缓冲单元7,CO84已因先行指令INST a、INST a+1和INST a+3在周期5中“完成”而从单元2向前移动到了单元6。另外,如图13所示,指令INST a的两个结果已在周期5中从重命名缓冲单元2和3复制到了GPRs32(图1)。因此,如图14c所示,WB82已从单元2向前移动指向了单元4;并且,因指令INST a的两个结果已在周期5从单元2和3复制到了GPRs32(图1),故此处删去了单元2和3中保存的信息。

    在图14c中,重命名缓冲单元4的“信息有效”=1以响应图13中指令INST a+1在周期5中执行完毕。这表明单元4的“信息”域和“进位”域中都存放了有效数据(在图14c中分别以“信息”域里的“DATA”和“进位”域里的“CA”来表示)。因为INST a+4是一条执行串行化指令,该指令具有一个依赖于修改CA寄存器42的指令INST a+1的结果的源操作数信息,并且重命名缓冲器34中的“进位”域尚未向前传送,所以处理器10延迟执行指令INST a+4,直到在周期6中指令INST a+1的回写阶段(WBACK)其“进位”结果已从重命名缓冲单元4复制到GPRs32(图1)时为止。

    作为对比,指令INST a+3也有一个依赖于指令INST a+1的DATA结果的源操作数信息,但不同的是重命名缓冲器34中的该“信息”域已传送了。因此,为响应重命名缓冲单元4中的“信息有效”=1(表明指令INST a+1在周期5中执行完毕),处理器10在指令INST a+1的回写阶段完成之前于周期6中开始指令INST a+3的执行过程。

    图14d给出了图13中周期7开始时重命名缓冲器34中分配指针(AL)80、回写指针(WB)82和完成指针(CO)84的状态。如图14d所示,AL80继续指向单元7,CO84继续指向单元6。如图13所示,指令INST a+1的结果已在周期6期间从单元4复制到了GPRs32(图1)。因此,如图14d所示,WB82已从单元4向前移动指向了单元5;此外,因指令INST a+1的结果已在周期6期间从单元4复制到了GPRs32(图1),故此处删去了单元4中保存的信息。

    在本较佳实施例中,对于一条具有一个依赖于某个尚未向前传送的操作数(如CA位信息的目的地是CA寄存器42)的源操作数信息的执行串行化指令(如INST a+4),处理器10在重命名缓冲器34包含以下信息时即执行该执行串行化指令(如INST a+4):

    (1)所有的先行指令都已“完成”;并且

    (2)对任何已“完成”的先行指令来说,如果其回写阶段尚未结束,则不修改上述未传送的操作数。

    因此,在图14d中,CO84指向单元6表明对指令INST a+4来说其所有的先行指令都已“完成”。此外,WB82指向单元5表明虽然已“完成”的先行指令INST a+3的回写阶段尚未结束,但指令INSTa+3并没有修改任何将要传送到CA寄存器42的未传送信息(因为单元5中的“进位有效”=0)。于是,处理器10在周期7中执行指令INST a+4。

    在一个可选的实施例中,对于一条具有一个依赖于某个尚未向前传送的操作数(如CA位信息的目的地是CA寄存器42)的源操作数信息的执行串行化指令(如INST a+4),处理器10在重命名缓冲器34包含以下信息时即执行该指令(如INST a+4):

    (1)所有的先行指令都已“完成”;并且

    (2)所有已“完成”的先行指令的回写阶段都已结束,从而WB82和CO84指向同一个重命名缓冲单元。

    图14e给出了图13中周期8开始时重命名缓冲器34中分配指针、(AL)80、回写指针(WB)82和完成指针(CO)84的状态。如图14e所示,AL80继续指向单元7,WB82继续指向单元5。在周期7中,指令INST a+4结束执行要先于其“完成”,如图13中“执行/完成”所示。因此,如图14e所示,CO84已从单元6向前移动指向了单元7。

    比较有利的是,处理器10为响应所有先行指令(如INST a、INST a+1、INST a+2和INST a+3)的完成,将CO84从先前分配给某一指令(如INST a+4)的重命名缓冲单元向前移动一个单元(如在周期8开始之前从单元6向前移动),而不管处理器10是否确实已执行完所有的先行指令(如INST a+3继续在周期8中执行)。

    在图14e中,重命名缓冲单元6中“信息有效”=1以响应图13中周期7期间指令INST a+4结束执行。这表明单元6的“信息”域和“进位”域中都存放了有效数据(在图14e中分别以“信息”域里的“DATA”和“进位”域里的“CA”来表示)。

    图14f给出了图13中周期9开始时重命名缓冲器34中分配指针(AL)80、回写指针(WB)82和完成指针(CO)84的状态。如图14f所示,AL80和CO84继续指向单元7,WB82继续指向单元5。在图14f中,单元5里“信息有效”=1以响应指令INST a+3于周期8结束执行。这表明单元5的“信息”域里存放了有效数据(在图14e中以“信息”域里的“DATA”来表示)。

    图14g给出了图13中周期10开始时重命名缓冲器34中分配指针(AL)80、回写指针(WB)82和完成指针(CO)84的状态。如图14g所示,AL80和CO84继续指向单元7。如图13所示,指令INSTa+3和INST a+4的结果在周期9期间分别从单元5和6复制到GPRs 32中(图1)。因此,如图14g所示,WB82已从单元5向前移动指向了单元7;此外,因指令INST a+3和INSTa+4的结果已在周期9从单元5和6复制到了GPRs32(图1),故此处已删去了单元5和6中的信息。

    图15是某一不具备本较佳实施例的“提前完成”特征的另一实施例中图12a-c中五条指令的各个阶段的示意图。图16a-h是图15中所示指令处理的各个周期里处理器10的重命名缓冲器34的概念性示意图。如图15所示,在不具备本较佳实施例的“提前完成”特征的情况下,指令INST a+4的执行要延迟到周期10,而其结果的完成/回写阶段则要等到周期11。这是由于指令INST a+4是一条执行串行化指令,必须要等到其所有的先行指令完成时方可开始执行。在不具备本较佳实施例的“提前完成”特征的情况下,指令INSTa+3要等到周期9才能完成,故指令INST a+4的执行必须得等到周期10。

    而比较起来,在图13中,指令INST a+3于周期5“提前完成”,指令INST a+4于周期7执行。指令INST a+4是一条具有一个依赖于其先行指令INST a+1的结果的源操作数信息的执行串行化指令,其中指令INST a+1修改将要送往CA寄存器42的未传送CA位信息。但是,在图13中,指令INST a+4的执行发生在周期7,其结果的完成/回写发生在周期9。因此,在图13中,在具有本较佳实施例的“提前完成”特征的情况下,指令INST a+4的执行、完成和回写阶段要比图15中没有“提前完成”特征的情况下发生的早。

    处理器10将一条指定了未传送源操作数(如SPRs40和CA寄存器42)的指令的执行过程至少延迟到其所有的先行指令完成时为止。这是因为,如果该指令指定了未传送源操作数,则它的执行必须要受体系寄存器中的这些源操作数信息可用并且有效的影响。关于这种指令的例子有(1)一条读CA寄存器42的扩展算术指令和(2)一条将信息从SPRs40的某个单元传送到GPRs32的某个单元的Move From指令。

    即使所有的先行指令都已“完成”,对某条先行指令来说也有可能它是“提前完成”的,从而其完成阶段先于其执行阶段。如上面结合图1-5所详细讨论的那样,处理器10包含用于将信息从GPRs32、FPRs36、重命名缓冲器34和38及控制寄存器传送到执行部件的传送电路。如果一条指令具有一个依赖于某条“提前完成”的先行指令的结果的源操作数信息,并且该源操作数信息有处理器10的传送电路的支持,那么处理器10将延迟该指令的执行,直到它结束了前述“提前完成”指令的执行阶段为止(此时该指令的结果已出现在某一重命名缓冲单元中并且有效)。

    比较起来,如果该源操作数信息没有处理器10的这种传送电路的支持,那么处理器10将延迟该指令的执行直到它结束了前述“提前完成”指令的回写阶段时为止(此时“提前完成”指令的结果在体系寄存器中出现并且有效)。如果一条“提前完成”的指令尚未结束执行阶段,那么该指令的结果(目的操作数信息)尚未出现。在这种情况下,处理器10相应地延迟该指令的回写阶段直至它结束执行阶段时为止。

    如果一条指令受提前完成的影响,那么定序部件18在调度该指令到与其相关联的执行部件时输出一个指示信号。接到该信号后,相关联的执行部件不再去修改排序缓冲器76中分配给该指令的单元。这是因为,一旦完成了与排序缓冲单元相关联的指令,该排序缓冲单元须再分配给另外一条指令,从而该单元中的信息不再有效。

    因此,如果一条指令受提前完成的影响,那么在该指令的执行部件结束其执行阶段之前,分配给该指令的排序缓冲单元可能已经无效。在本较佳实施例中,于处理器10的某一个周期,定序部件18检查具有有效信息的排序缓冲单元中资格最老的四个,这样就有四条候选指令可以在一个周期内同时完成。

    在本较佳实施例中,一条Move From指令从某一SPR输入信息,一个SPR仅能由一条Move To指令来修改。比较有利的是,处理器10在所有先行指令完成后即执行一条Move From指令,即使其中一条或多条先行指令是“提前完成”的。这一点是可能的,因为处理器10并不“提前完成”一条不能被随机地执行的指令(如一条MoveTo指令或一条Store指令)。如果所有的先行指令都已“完成”,那么处理器10确实已结束了所有的先行Move To指令的执行阶段。因此,处理器10在所有的先行指令完成之后即可开始执行一条MoveFrom指令,因为在这种情况下处理器10实际上已结束了所有的先行More To指令的执行阶段。

    本较佳实施例的另外一个显著特征是,处理器10支持一种非精确的不可恢复的浮点异常模式。当在这种模式下运行时,对于引起异常情况的浮点指令处理器10以不精确的方式来报告浮点异常情况,处理器10在处理这种异常时,允许其自身处于下述状态,即它已完成除引起该异常的浮点指令之外的一定数量的指令。当在这种模式下运行时,对于那些不太关心浮点指令引起异常时中断程序执行的精确位置的指令序列来说,处理器10可以获得更高的执行效率。

    当在精确的浮点异常模式下运行时,即使所有的先行指令都已完成,处理器10也不在结束一条浮点指令的执行阶段之前“提前完成”该指令。

    比较起来,当在非精确的不可恢复的浮点异常模式下运行时,处理器10在所有的先行指令都已完成后,于一条浮点指令结束执行阶段之前,“提前完成”该指令。在非精确的不可恢复的浮点异常模式下,“提前完成”的浮点指令与其他类型的“提前完成”的指令有所不同,因为即使一条浮点指令的执行可能会引起一个浮点异常情况,处理器10还是“提前完成”该指令。每个排序缓冲单元都指出与其相关联的指令是否是一条浮点指令。

    在一条浮点指令结束其执行和完成阶段之后,其结果暂存到浮点重命名缓冲器38中,并一直要存到所有前面的浮点指令的结果都已复制到FPRs36时为止。通过这种方式,处理器10按照浮点指令的编程顺序来处理其相应的“回写”阶段。

    重命名缓冲器38暂存以后将复制到FPRs36的浮点指令的结果。另外,重命名缓冲器38还存放用于适时修改某一体系浮点状态和控制寄存器(FPSCR)(未给出)的状态信息。在从重命名缓冲器38往FPRs36和FPSCR中复制结果期间的检测到一个浮点异常(由被设置的FPSCR中的一个FEX位指出)时,处理器10报告该异常情况。

    当在非精确的不可恢复的浮点异常模式下运行时,对于引起该异常情况的浮点指令处理器10以不精确的方式来报告浮点异常情况。在这种情况下,比较有利的是,本较佳实施例中的处理器10按下述方式报告一个异常。

    首先,处理器10在检测到浮点异常的那个周期停止指令的完成。具体在那一条指令处理器10停止了完成并不重要,只要处理器10的状态精确反映了所有先于处理器10停止完成阶段时的所停止那一指令的已完成指令的效果即可。

    第二,处理器10结束所有“提前完成”的先行指令的执行阶段。此外,处理器10还将这些指令的结果复制到体系寄存器中,从而使得重命名缓冲器34和38中的所有回写项都变成空。

    第三,处理器10报告该浮点异常。在非精确的不可恢复的浮点异常模式下,“提前完成”的浮点指令与其它类型的“提前完成”的指令有所不同,因为即使一条浮点指令的执行可能会引起一个浮点异常情况,处理器10还是“提前完成”该指令。因此,没有由其他“提前完成”或确实已完成的指令所引起的其他异常产生。

    在检测出一个由非浮点指令引起的异常后,处理器10延迟报告这一非浮点异常,直到它结束了所有“提前完成”的先行浮点指令的执行阶段而没有遇到任何浮点异常时为止。在这种情况下,比较有利的是,在本较佳实施例中的处理器10按下述方式报告一个异常:

    首先,处理器10在检测到非浮点异常的那个周期停止指令的完成。处理器10在引起这一非浮点异常的指令处停止指令的完成,所以该指令尚未完成。

    第二,处理器10结束所有“提前完成”的先行指令的执行。这决定处理器10是否能够不遇任何浮点异常地结束所有“提前完成”的先行浮点指令。另外,处理器10将这些指令的结果复制到体系寄存器中,从而使得重命名缓冲器34和38中的所有回写项都变成空。通过这种方式,处理器10在报告这一异常时仍能维持一种稳定的状态。此外,在检测出有异常后,处理器10保持稳定的处理器状态一直等待直到其他的回写缓冲器都变成空时为止。

    第三,如果处理器10没有检测到浮点异常,则报告精确的非浮点异常。相反,如果处理器10检测到了一个浮点异常,则报告非精确的不可恢复的浮点异常。

    上面我们仔细描述了本发明的一个示范实施例及其优点。但是应当注意的是这些描述仅仅作为例子而非限制。在不脱离本发明的外延、范围和精神的情况下,该示范实施例中可以有各种变化、替换和改造。本发明的外延、范围和精神不应受该示范实施例的限制,而应当结合下述权利要求及其等价物来定义。

处理系统及其操作方法.pdf_第1页
第1页 / 共62页
处理系统及其操作方法.pdf_第2页
第2页 / 共62页
处理系统及其操作方法.pdf_第3页
第3页 / 共62页
点击查看更多>>
资源描述

《处理系统及其操作方法.pdf》由会员分享,可在线阅读,更多相关《处理系统及其操作方法.pdf(62页珍藏版)》请在专利查询网上搜索。

提供了一个处理系统及其操作方法。其中先调度一条特定的指令到执行电路执行。在调度完该指令之后,于结束该指令的执行之前,即往执行电路中调度另外一条执行串行化的指令。 。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1