高性能的推测性字符串/多重操作的制作方法

文档序号:6416208阅读:272来源:国知局
专利名称:高性能的推测性字符串/多重操作的制作方法
技术领域
本发明一般涉及计算机处理器领域,特别涉及集成在一个微处理器芯片上的处理器。本发明尤其涉及推测性地处理在一个数据高速缓冲存储器和一个寄存器文件之间进行数据传递的字符串/多重操作。
提供速度更高的微处理器是当前处理器设计的主要目标之一。已经采用多种不同的技术来提高处理器性能。其中一种能够大大提高处理器性能的技术就是使用高速缓冲存储器。高速缓冲存储器是指一组形成于微处理器本身之上的存储器单元,因此,与分离于微处理器芯片的其他类型的存储器,如RAM或磁盘相比,它具有更短的存取时间。通过将频繁使用的数据存入高速缓冲存储器中,处理器能够在需要该数据时访问高速缓冲存储器,而不必“离开芯片”去获取信息,从而大大增强了处理器的性能。
与常规的标量处理器相比,超标量处理器能够达到更好的性能,因为它可以不按照编程顺序来执行指令。以这种方式,在一个执行较慢的指令被挂起的同时,受阻的指令不会阻塞后面那些可以利用处理器上的其他资源而执行的指令。
但是,在超标量处理器试图采用高速缓冲存储器的全部优点时会产生一些问题。其中一个问题产生于某些复杂类型的写入和存储指令的处理过程中。现有的多种技术用于处理简单的写入或存储指令,指令和从数据高速缓冲存储器到体系寄存器的传输(transfer)之间的关系是一一对应的,反之亦然。一个高速缓冲存储器存取指令的例子为一个写入指令,它将数据从高速缓冲存储器的一个单元送入到一个重命名寄存器中,其中重命名文件中的寄存器宽度同于从高速缓冲存储器传输的数据的长度。这样,对于向寄存器文件中的每次传送,都有一个写入指令。但是,这对于实现一个允许复杂写入指令,如多重写入指令或字符串写入指令,将数据从数据高速缓冲存储器送入到一组重命名或体系寄存器中的数据处理器来说,就更加困难了。这是由于指令和数据的物理传输之间的一一对应关系不再存在,以及通过处理器来跟踪指令的进度和保证令人满意地完成该指令变得更加困难了。
一种用于在超标量处理器中处理复杂的写入或存储指令的技术是调度单元一旦检测到复杂的写入或存储指令的调度,就异常终止指令的进一步调度。该技术在现被引用作为参考的授予Burgess的美国专利No.5,664,215中有所描述。在该技术中,然后允许完成处理器中所有被挂起的指令。然后处理器以标量模式调度和执行复杂的写入或存储指令。在完成了复杂指令后,处理器继续执行指令的调度。虽然这样确保了复杂的写入或存储指令的执行将被正确地完成,但这是在损耗处理器性能的情况下完成的。因此,本发明的一个目的是提供一种数据处理器,它提供了能够推测性地处理复杂的写入和存储操作的高性能。本发明的其它目的和有益效果将在下面的描述中变得显而易见。
本发明的一个方面涉及一种用于操作一个超标量处理器的方法,该处理器包括一个指令高速缓冲存储器,一个定序单元,一个写入/存储单元,一个数据高速缓冲存储器,一个体系寄存器文件和一个重命名寄存器文件。在一个实施例中,该方法包括步骤从指令高速缓冲存储器向定序单元传送一个指令,该指令对于多个目标体系寄存器是可操作的;根据传送的指令产生多个原始指令,其中一个单独的原始指令可访问一个单独的体系寄存器;以及按顺序地发送原始指令以在数据高速缓冲存储器和重命名寄存器文件之间传送数据。
本发明的另一方面涉及一个用于在超标量处理器中处理高速缓冲存储器存取指令的电路,该超标量处理器包括一个指令高速缓冲存储器,一个定序单元,一个写入/存储单元,一个数据高速缓冲存储器,一个体系寄存器文件和一个重命名寄存器文件。在一个实施例中,该电路包括一个用于从指令高速缓冲存储器向定序单元传送一个指令的装置,其中该指令可对多个目标体系寄存器进行操作;一个用于根据传送的指令产生多个原始指令的装置,其中一个单独的原始指令可访问一个单独的体系寄存器;以及一个用于按顺序发送原始指令以在数据高速缓冲存储器和重命名寄存器文件之间传送数据的装置。
本发明再一方面涉及一种用于在超标量处理器中处理高速缓冲存储器存取指令的方法,该超标量处理器包括一个指令高速缓冲存储器,一个定序单元,至少一个写入/存储单元,一个数据高速缓冲存储器,一个体系寄存器文件,一个重命名寄存器文件以及一个完成单元。在一个实施例中,该方法包括步骤从指令高速缓冲存储器向定序单元传送一个高速缓冲存储器存取指令;将高速缓冲存储器存取指令传送到写入/存储单元;以及在定序单元和写入/存储单元中并行产生多个原始指令。


图1是本发明实施例中所用的数据处理器的方框图;图2是依据本发明实施例的用于处理指令的电路的方框图;图3是用于说明依据本发明实施例而生成的原始写入指令的图表;图4是处理带有更新指令的写入指令的常规电路的简图;图5是依据本发明实施例的电路的简图;图5A是图5所示的简图的数据流图;图5B示出了一个依据本发明实施例的记录缓冲器,该缓冲器已经被更新为LDU指令的一个项目(entry);图5C是说明依据本发明实施例的重命名寄存器的格式的图表;图5D示出了依据本发明实施例的排序缓冲器的内容,该缓冲器带有一个已写入其中的项目;图5E示出了在依据本发明实施例执行了一个多重写入指令之后的排序缓冲器的内容;图5F示出了依据本发明实施例的重命名寄存器的操作;图5G和5H示出了依据本发明实施例的字符串受阻计数器(string stall counter)的操作;图5I示出了依据本发明实施例的排序缓冲器的操作;图6是依据本发明实施例的写入/存储单元的简图;图6A是说明数据高速缓冲存储器中的未对准数据的图表;图6B是说明依据本发明实施例处理未对准的写入指令的图表;图7是依据本发明实施例的字符串受阻计数器的方框图;图8A-8C示出了依据本发明另一个实施例的排序缓冲器和重命名寄存器文件的操作。
图1是一个依据本发明对信息进行处理的处理器系统10的方框图。在最佳实施例中,处理器10是一个集成电路超标量微处理器,如IBM公司的PowerPCTM,Austin,TX。因此,如下所述,处理器10包括构成集成电路的各种单元、寄存器、缓冲器、存储器和其他部件。而且,在最佳实施例中,处理器10依据精简指令集计算(“RISC”)技术而工作。如图1所示,一条系统总线11与处理器10的一个总线接口单元(“BIU”)12相连。BIU12控制处理器10和系统总线11之间的信息传输。
BIU12与处理器10的一个指令高速缓冲存储器14和一个数据高速缓冲存储器16相连。指令高速缓冲存储器14向一个定序单元18输出指令。响应于来自指令高速缓冲存储器14的指令,定序单元18有选择地向处理器10的其他执行电路输出指令。
除了包括一个调度单元46和一个完成单元48的定序单元18以外,在最佳实施例中,处理器10的执行电路还包括多个执行单元,即一个分支单元(branch unit)20,一个定点单元A(“FXUA”)22,一个定点单元B(“FXUB”)24,一个复杂定点单元(“CFXU”)26,一个写入/存储单元(“LSU”)28和一个浮点单元(“FPU”)30。从通用体系寄存器(“GPRs”)32和一个定点重命名缓冲器34向FXUA22,FXUB24,CFXU26和LSU28输入各自的源操作数信息。而且,从一个进位位(“CA”)寄存器42向FXUA22和FXUB24输入一个“进位位”。FXUA22,FXUB24,CFXU26和LSU28输出各自的操作结果(目的操作数信息)以存储在定点重命名缓冲器34中的选定项目中。CFXU26还向和从专用寄存器(“SPRs”)40输入和输出源操作数信息和目的操作数信息。
从浮点体系寄存器(“FPRs”)26和浮点重命名缓冲器38向FPU30输入其源操作数信息。FPU30输出其操作结果(目的操作数信息)以存储在浮点重命名缓冲器38中的选定项目中。
定序单元18向和从GPRs32及FPRs36输入和输出信息。从定序单元18向分支单元20输入表示处理器10当前状态的指令和信号。响应于这样的指令和信号,分支单元20(向定序单元18)输出表示用于存储处理器10所执行的指令序列的存储器地址的信号。响应于这样的来自分支单元20的信号,从指令高速缓冲存储器14向定序单元18输入指定的指令序列。如果指令高速缓冲存储器14中并未存有一个或多个指令序列,就从与系统总线11相连的系统存储器39向指令高速缓冲存储器14输入这样的指令(通过BIU12和系统总线11)。
响应于从指令高速缓冲存储器14输入的指令,定序单元18通过一个调度单元46有选择地将这些指令分别发送到选定的执行单元20、22、24、26、28和30中。每个执行单元执行一个或多个某特定类别的指令。例如,FXUA22和FXUB24执行以源操作数为基础的第一类定点算术运算,如加、减、与、或和异或。CFXU26执行以源操作数为基础的第二类定点算术运算,如定点乘和除。FPU30执行以源操作数为基础的浮点算术运算,如浮点乘和除。
通过在各个不同的执行单元20、22、24、26、28和30中同时处理多个指令,处理器10能够达到高性能。因此,每个指令按照级的顺序被处理,每个级的指令能够与其他级的指令并行执行。这种技术被称为“流水线”技术。最佳实施例中的一个主要观点就是通常将一个指令分成六级来进行处理,即读取,译码/调度,执行,结束(finish),完成(complete)和回写。
在最佳实施例中,每个指令需要一个机器周期来完成指令处理的每一级。然而,一些指令(如由CFXU26执行的复杂定点指令)可能需要多于一个周期。因此,相应于完成前一指令所用的时间不同,在一特定指令的执行和完成级之间出现了不同的延迟。
响应于一个写入指令,从数据高速缓冲存储器16向LSU28输入信息并将该信息复制到选定的重命名缓冲器34和38之一。如果该信息没有存在数据高速缓冲存储器16中,就从一个与系统总线11相连的系统存储器39向数据高速缓冲存储器16输入该信息(通过BIU12和系统总线11)。而且,数据高速缓冲存储器16能够向与系统总线11相连的系统存储器39输出信息(通过BIU12和系统总线11)。响应于一个存储指令,从GPRs32和FPRs36中选定的一个向LSU28输入信息并将该信息复制到数据高速缓冲存储器16或存储器中。
作为在执行单元,如FXUA22,FXUB24,重命名缓冲器34和调度单元46之间进行交互作用的例子,从调度单元46将一个指令“add c,a,b”发送到FXUA22。调度单元36向FXUA22提供用于操作数“a”和“b”的标记以告诉FXUA22去哪里取出用作操作数的数据,正如所属技术领域的技术人员所理解的那样。例如,在具有六个重命名缓冲器的系统中,调度单元46用一个六位标记100000标记操作数“a”位于重命名缓冲器1中。而标记010000可能被用于表示操作数“b”位于重命名缓冲器2中。由于FXUA22没有写入GPRs32,所以调度单元46必须用一个表示操作目标的重命名缓冲器标记,如001000,来表示“add”指令的结果被放在重命名缓冲器3中。
现参照图2,示出了一个用于依据本发明的一个实施例处理字符串/多重指令的电路200的方框图。在这种情况下,电路200包括一个向调度单元或序列发生器(sequencer)204发送指令的指令高速缓冲存储器202。序列发生器204对来自指令高速缓冲存储器的指令进行译码并将译码后的指令数据传送到写入/存储单元206和208。同时,序列发生器204在完成表220和重命名寄存器文件218中生成项目以保存在指令处理过程中所生成的数据。更具体地说,电路200对于包括多重写入/存储指令和字符串写入/存储指令在内的复杂形式的写入/存储指令是有益的。在各种体系结构中都支持这种复杂的写入/存储指令,如IBM公司的POWER PC体系结构。POWER PC体系结构已在各种出版物中有所描述,如这里所引用的来自IBM Microelectronics的公开号为No.MPRPPCFPE-01的“Power PCMicroprocessor Familythe Programming Environment”。
例如,依照POWER PC体系结构,一个多重写入指令将n个连续字(32位每字)的内容从数据高速缓冲存储器214送入GPR文件224的n个连续寄存器中,其中n是等于32减去由指令指定的起始目标寄存器(“RT”)号(number)后的整数。按惯例,GPR文件224的32个寄存器以0到31为编号。GPR文件224的每个寄存器为4字节或一个字宽。一个多重写入指令的格式为LM RT,RA+D,其中LM为操作码并且由多重写入指令读出的数据起始于由寄存器RA(操作数A)和字段D(操作数B)之和指定的存储器地址。该数据被送入以RT指定的寄存器为起始的寄存器序列中。
一个存储多重指令表示如下STM RS,RA+D。一个STM指令将GPR文件224的n个连续寄存器的内容存入数据高速缓冲存储器214的n个连续字中,其中n是一个等于(32-RS)的整数。多重存储指令起始于由寄存器RA(操作数A)和字段D(操作数B)之和指定的存储器地址。该数据被存入以GPR中的RS所指定的存储器单元为起始并由(RA+0)编址的高速缓冲存储器单元序列中。
一个写入字符串字(string word)立即指令将NB个连续的存储器字节的内容送入GPR文件224的连续寄存器中。写入字符串字立即指令起始于由寄存器RA的内容所指定的存储器字节地址和由RT指定的寄存器。
一个存储字符串字立即指令将GPR文件224的连续寄存器的内容存入高速缓冲存储器中。存储字符串字立即指令起始于由寄存器RA的内容所指定的存储器地址。
一个写入字符串字变址指令将M个连续的存储器字节的内容送入GPR文件224的(M/4四舍五入后的整数)个连续的寄存器中。M是一个专用寄存器(图中未示出)中的一个字段。写入字符串字变址指令起始于由寄存器RA和寄存器RB的内容之和所指定的存储器字节地址以及由RT指定的寄存器。在其他情况下,写入字符串字变址指令相似于写入字符串字立即指令。
一个存储字符串字变址指令将GPR文件224的(M/4四舍五入后的整数)个连续寄存器中的内容存入M个连续的存储器字节中。M是一个专用寄存器中的一个字段。存储字符串字变址指令起始于由寄存器RA和寄存器RB的内容之和所指定的存储器地址以及由RS指定的寄存器。在其他情况下,存储字符串字变址指令相似于存储字符串字立即指令。当然,正如所属技术领域的技术人员所清楚的,电路200对于其他类型的指令以及在不同的体系结构中也是有益的。
在序列发生器204接收到一个上述复杂的写入或存储指令之后,它在指令的调度级过程中将该指令“展开”,以生成一系列“原始”写入或存储指令。一个原始写入指令是一个访问高速缓冲存储器214中的一个字并将其写入GPR224中的一个寄存器的指令,一个原始存储指令亦是如此。
下面将参照图3详细描述指令的展开。图3是说明多重写入指令LM R15,RA+D的展开的图表,其中LM是一个多重写入指令,R15是一个用于GPR寄存器文件224中所指的起始字的目标寄存器,RA+D是包含了高速缓冲存储器214中存储单元的有效地址的操作数,多重写入指令从该地址开始进行访问。对于所属技术领域的技术人员来说,该指令将对17个寄存器,即GPR寄存器文件224的寄存器15-31,进行写入是清楚的。从而,序列发生器204将该指令展开成17个原始写入指令。
如图3所示,序列发生器204为每个原始指令分配一个指令识别标记(“IID”)。当然,象在现有的超标量处理器中一样,来自高速缓冲存储器的数据不会被直接送入GPR文件中,而是被送入一个重命名寄存器文件218直至该指令被无异常地完成。然后,从完成表220向GPR文件控制逻辑发送一个回写信号,使得用于该指令的数据从重命名寄存器文件218写至GPR寄存器文件中。从而,在序列发生器204如图3所示产生每个原始写入指令时,它向重命名寄存器文件218发送信号以产生空间以便于接收来自相应的原始写入指令的数据。然后重命名寄存器文件218向LSU单元206和208传达报告,重命名寄存器被分配用于该特定的原始写入指令。在这种情况下,假设重命名寄存器文件218分配重命名项目0以获取来自原始写入指令目标GPR寄存器15的数据。而且为简便起见,假设序列发生器204同时将一个完成IID0分配给该写入指令。这样,重命名寄存器文件218向LSU206和208报告返回重命名寄存器项目0,并如后所详细描述的那样,通过处理器200跟踪该项目。
在调度周期中,序列发生器204在完成表220中为原始写入指令产生项目。应当理解依据本发明,必须按顺序完成每个原始写入指令。完成表220中的每个项目都包含多个数据字段。一个数据字段包含用于产生该项目的指令的IID。另一个字段包含在指令完成时被传送给用于GPR文件224的控制逻辑的回写向量。这告知了在回写过程中重命名文件218中的寄存器的GPR文件224被访问。每个完成表项目中另一个字段是异常字段。如果一个指令在执行过程中发生异常,则在完成时,无论在指令的执行过程中产生什么样的问题,处理器都检测该异常位以确定如何处理。完成表中的每个项目还包含一个结束字段,它用于在数据已从高速缓冲存储器写至格式器之后标记该指令的结束,如后面更详细的描述。
尽管序列发生器204将原始指令分配给LSU206和208是可能的,但本发明优先利用LSU206来与序列发生器204并行地将多重写入指令同时展开成一系列原始写入指令。这是由于能使LSU206与LSU208一前一后地工作以便于在每个机器周期发送两个指令,后面将更详细地进行说明。
LSU206带有加法器226,用于计算原始写入指令所需的数据高速缓冲存储器214的有效地址。更具体地,由于高速缓冲存储器中的每个字为32位,所以对高速缓冲存储器214进行的每次顺序存取为从前面最后一个指令的有效地址开始的4个字节。换言之,再参照图3,在周期0,高速缓冲存储器214的第一地址位于存储单元A。下一个原始写入指令(IID=1)将访问高速缓冲存储器214中位于A+4处的单元。第三原始写入指令(IID=2)将访问高速缓冲存储器214中位于A+8处的单元,依次类推。同样地,每个原始写入指令的目标寄存器从前一原始写入指令的目标寄存器号加1。
如前所述,LSU206具有用于产生有效地址的加法器226。LSU206随同重命名寄存器文件218所提供的目标重命名寄存器一起,向数据高速缓冲存储器214传递或发送有效地址。同时,在误队列(mis-queue)表222中生成一个项目以存储处理原始写入指令所需的信息。误队列表222中的每一项都包含多个字段。一个字段包含与原始指令相关的IID。其他字段包含用于该指令的重命名寄存器,该指令的有效地址和实际地址,用于对高速缓冲存储器的未对准访问情况下的各个标记位,一个表明该操作是否为字符串操作的位和一个“最后”位,用于表明该特定的原始写入指令是否为用以完成一个多重写入操作或字符串写入操作的最后一个写入指令。所有的指令都通过误队列。如果在高速缓冲存储器中找到一个指令,则误队列表中的该项目只在两个周期内存在。但是,如果在高速缓冲存储器中没有找到该项目,则该项目将一直保存在误队列表中,直到该指令的数据从片外存储器返回并写入重命名寄存器文件218中为止。
在发送过程中,LSU206向高速缓冲存储器214发送有效地址和目标重命名(target rename)。如果需要,高速缓冲存储器214就向格式器212传递用于该指令的数据以重组该数据。适用的格式器为现有技术中所公知的技术,在此除了说明本发明实施例的操作所必需的描述之外,不再进行更详细的说明。
在格式器212接收和处理了该数据之后,数据被传递到重命名寄存器文件218中的修正项目中。同时,随着在处理指令的同时产生一些异常位,与格式器212相关的结束逻辑213向包含用于结束指令的IID在内的完成表发送一个信号。这使得该指令的结束位被设置到完成表220中的相应项目中。如果所有前向指令在被无异常结束之前都已被发送,则该指令将准备完成。在该指令准备完成时,完成表220向对重命名寄存器文件218中的项目进行访问的GPR224发送一个回写信号并将其存入目标GPR项目,从而改变机器的状态。
字符串和最后标记位从写入/存储单元被送至数据高速缓冲存储器控制单元(DCMMU)。写入/存储单元按照编程顺序向DCMMU提交有效地址。DCMMU利用字符串位来判断其误队列中的相邻项目是否来自一个指令,该指令为字符串操作或多重操作。在发生这种情况时,DCMMU控制单元必须迫使数据通过格式器按顺序返回。“最后”位用于标记字符串或多重传输的结尾。这使得DCMMU能够判断字符串和/或多重请求传输的结束。
如果该请求未被对准,则按编程顺序返回数据防止了合并锁存的恶化。它还防止了提前结束对同一IID进行两次请求的“伪”指令。
依据本发明的另一个实施例,电路200还通过在一个周期内完成两个原始写入指令而实现了更好的性能。在一个实施例中,这是通过利用与LSU206同时使用的第二LSU208而实现的。下面将以POWERPC体系结构为例对本发明的实施例进行说明。POWERPC体系结构支持诸如能够进行更新的写入(“LDU”)指令之类的指令格式。能够进行更新的写入指令不同于上述具有两个目标GPR单元的原始写入指令。更具体地,一个LDU指令的格式如下LDU RT,(RA)+D其中RT为目标GPR寄存器,RA为用于计算写入指令有效地址的源GPR寄存器。但是,除了从该地址向RT发写入据以外,LDU指令还将计算出的有效地址,即RA+D回写到提供RA的源GPR单元中。这样,通过利用一个LDU指令,最终可以将两个字的数据从格式器212或210写入重命名寄存器文件218中。但是,要使一个LDU指令能够将两个字从高速缓冲存储器214写入重命名寄存器218,就必须对电路200进行改进。这将参照图4进行更详细的描述。
图4是一个与高速缓冲存储器404,格式器406和重命名寄存器文件408相连的写入/存储单元400的方框图。当该写入/存储单元执行一个LDU指令时,利用加法器402将取自GPR寄存器的操作数RA和操作数D相加而计算出有效地址。这个有效地址被发送到高速缓冲存储器404,该高速缓冲存储器404通过格式器406向目标寄存器RT412和重命名寄存器文件408传送信息。同时,还将该有效地址从加法器402传送到寄存器文件408中的寄存器RD410。这样,在一个周期内就将两个字的数据写入了重命名寄存器文件410中。但是,应当注意只有一个字的数据来自高速缓冲存储器404。
为了使来自高速缓冲存储器的两个字的数据被写入重命名寄存器文件218,图2所示的LSU206和208被串联到一起并具有图5所示的连接逻辑。图5分别示出了由每个LSU206和208产生和输入到高速缓冲存储器214中的有效地址行。应当注意此实施例中的高速缓冲存储器214具有两个输入端口和两个输出端口,以便于能够将两个字写入寄存器文件218中的两个不同寄存器。高速缓冲存储器214的一个输出端口向格式器212传写入据,该格式器212向重命名寄存器文件218写入。高速缓冲存储器214的另一个输出端口在与重命名寄存器文件218相耦合之前向格式器212传写入据。在寄存器文件218上设有四个写端口W0-W3,以便于从EA0和EA1接收来自LSU的数据高速缓冲存储器的数据。
在本发明中,调度单元将LMW类型的指令“展开”成类似于LDU指令(LDU原始指令)的原始操作。这使得调度单元能够利用一个已有机构来控制完成表(也被称为“排序缓冲器”)上的项目数目以及重命名寄存器文件中所登记的寄存器数目。为了在结束时间与完成表单元接口,写入/存储单元将LMW类型的指令“展开”为类似于“LDU原始指令”的指令,为了产生地址和与数据高速缓冲存储器单元接口,写入/存储单元将LMW类型的指令“展开”为“写入原始指令”。这个专用写入指令如下所述LDU R15,R1+D在这个指令中,由(R1+D)编址的存储单元的内容被送入寄存器R15中,并且R1+D的有效地址被送入寄存器R1中。
在调度时,LDU指令被置于排序缓冲器上,如图5B所示。在本例中,假设该指令被分配给IID0。应当注意,此操作与一次常规的原始写入操作之间的主要区别是对该指令在排序缓冲器项目上记录两次回写。
在调度周期中,在重命名寄存器文件中为上述LDU指令登记两个单元,以便于在完成的同时,重命名寄存器中的空间可以用来存储LDU指令的两次回写所需的数据。由重命名寄存器控制逻辑进行分配用以包含LDU指令的目标寄存器所指定的数据在内的两个重命名寄存器都被传送到写入/存储单元,如图5C所示。更具体地,在图5C中,寄存器R15被重命名为重命名寄存器0(“RR0”)而寄存器R1被重命名为重命名寄存器1(“RR1”)。这样,重命名寄存器的项目0相应于体系寄存器15,而重命名寄存器的项目1相应于体系寄存器1。
在调度周期之后,产生该指令的地址。这里将其视为“AGEN”周期。在AGEN周期内,由包含在写入/存储单元中的加法器生成有效地址。加法器将寄存器R1和D的内容相加。然后这个数据沿着图5A所示的路径RA0被锁存到重命名寄存器文件218中位于地址RR1的端口W0处。有效地址被传送到用于数据存取的高速缓冲存储器214。
在AGEN周期之后,处理器开始高速缓冲存储器存取周期。假设存在一个数据高速缓冲存储器,则数据从高速缓冲存储器214被传递到格式器212,然后沿着路径RT0传递到重命名寄存器文件218中位于地址RR0的端口W1处。最后,在结束周期,一旦数据已被正确地写入重命名寄存器文件218中,该指令就准备结束。指令ID标记(IID=0)随同一些异常信息一起从LSU控制逻辑被传递到排序缓冲器。假设没有异常信息,则排序表如图5D所示被更新。具体地,在排序表中的IID0的项目中断言(assert)了一个结束位,而没有断言需要处理器根据发生的异常种类执行一些异常处理程序的异常位。
在完成周期,当排序表中所有其他前序操作已被无异常完成时,LSU指令IID=0就可以被完成了。在完成过程中,排序缓冲器首先检查与IID0相关的项目中的异常情况。如果没有异常情况,则排序缓冲器向重命名寄存器文件的控制逻辑发送一个信号,该信号指示重命名寄存器文件向GPR寄存器文件传递下两个单元,即RR0和RR1。在后续的周期(回写周期)中,重命名寄存器文件218从排序缓冲器接收一个对下两个后序单元进行写操作的信号。此时,位于RR0的数据被物理地写至GPR单元R15而位于RR1的数据被物理地写至GPR单元R1。从而永久地改变了处理器的状态。
利用上述想法,参照下述多重写入操作详细说明本发明的一个实施例的操作LMW RT,RA+D
其中向体系寄存器中送入从存储单元RA+D起始的数据,体系寄存器号从目标寄存器RT开始直到体系寄存器文件末尾结束。假设RT为27,则多重写入指令将被展开为多个LDU指令。例如,第一指令如下所示LMW R27,R1+D这样,寄存器R27至R31被更新如下R27←存储单元(R1+D)R28←存储单元(R1+D+4)R29←存储单元(R1+D+8)R30←存储单元(R1+D+12)R31←存储单元(R1+D+16)在调度周期中,在第一周期,调度单元识别多重写入操作。多重写入操作被置于排序缓冲器上并被标记为一个“伪”操作。在重命名寄存器文件中登记一个单元。分配用于体系寄存器的重命名寄存器(也被称为“重命名标记”)随同多重写入操作码一起被传递到写入/存储单元。一个寄存器重命名计数值(RRC)被发送到写入/存储单元字符串受阻计数器(SSC)。此时,由于只有一个寄存器被重命名,所以用于LDU指令的计数值1被传送到SSC。图7是依据本发明的一个实施例的字符串受阻计数器的方框图。下面将更详细地进行说明。
在第二周期中,调度单元将多重写入指令译码成一个带有更新原始指令的写入指令,如下所示LDU R28,R29+D应当理解上述指令在技术上不是一个象从指令队列中发送出的指令一样的“带有更新的写入指令”。相反,它是一个如上所述的原始指令并且由调度单元生成作为“展开”的多重写入指令的一部分。排序缓冲器将IID=1分配给上述伪操作。由于在重命名寄存器文件中登记了两个单元(RR1和RR2),所以排序项目中的回写字段被设置为2。为2的RRC被发送到SSC。
在第三周期,调度单元进一步展开多重写入指令以生成如下所示的带有更新原始指令的写入指令LDU R30,R31+D排序缓冲器将等于2的IID分配给这个伪操作。由于在重命名寄存器文件中保留了两个单元(RR3和RR4),所以排序项目中的回写字段被设置为2。为2的RRC再次被发送到SSC。然后调度单元检测到这是多重写入操作的结尾。从而,当前排序缓冲器如图5E所示。此外,重命名寄存器文件如图5F所示。
现参照图7,更详细地描述字符串受阻计数器(“SSC”)。在一个实施例中,SSC是常规的升/降计数器702。调度单元704分别根据线710或712是否被断言来向SSC702发送信号使之加1或加2。写入/存储单元也向SSC702发送信号。写入/存储单元706分别根据线724或722是否被断言来使SSC702减1或减2。此外,SSC702能够向写入/存储单元706发信号以阻止字符串。
调度单元704沿着路径710,712向SSC702发出有关所分配的重命名次数的信号,在本实施例中为一次或两次。写入/存储单元沿着路径722,724向SSC702发出关于与每个有效地址相关的重命名次数的信号。
如果SSC中的计数值为0,则SSC阻止写入/存储单元706。如果计数值为1,则一个写入/存储单元可以继续其操作。如果计数值为2或大于2,则两个写入/存储单元都可以继续操作。这个计数器阻止了写入/存储单元向还没有被调度的指令发送结束报告和数据。
在经过调度之后,开始写入多重指令的AGEN周期。写入/存储单元中的调度逻辑(scheduler logic)识别当前指令是一个多重写入指令。因此,两个写入/存储单元都被允许完成任何未决的操作。然后调度逻辑(图中未示出)向LSU208发送多重写入操作,如图2所示。当然,在设计上也可以将LSU206作为选择。下面将参照图6更详细地描述LSU208和206。
图6是说明依据本发明的一个实施例的、用于生成原始写入指令的有效地址的写入/存储单元的逻辑部分的简图。此时,第一写入/存储单元包括一个生成有效地址EA0的加法器501。从锁存器A0503和B0505向加法器501提供数据。从信号连乘器(multiplexor)A0507和A0509依次向锁存器A0和B0提供数据。LDU指令的RA和RB操作数提供了这些信号连乘器的输入。信号连乘器507还具有常数值输入+4和+8,使得在每个周期有效地址增加适当的字节数。控制逻辑511用于操作信号连乘器507和509。
同样地,第二写入/存储单元带有加法器502,该加法器接收来自锁存器B0和B1(锁存器504和506)的数据。数据被连乘后,从信号连乘器508和510输入到锁存器B0和B1中。操作数RA1和RB1向信号连乘器508和510提供数据,并且信号连乘器508还具有一个常数值+8输入信号,用以增加有效地址。控制逻辑512用于控制信号连乘器508和510。加法器502的输出为有效地址EA1。通过在控制单元511控制之下的信号连乘器507,将来自LDU原始指令的R1操作数锁存到锁存器A0503中。通过在控制单元511控制之下的信号连乘器509,D操作数也被锁存到锁存器B0505中。
在AGEN的第一周期内,通过加法器501计算R1+D而生成有效地址0(EA0)。EA0被发送到进行数据存取的高速缓冲存储器214中。目标重命名标记RR0随同EA0一起被发送到高速缓冲存储器214的误队列中。在本发明的本实施例中,应当理解所有的高速缓冲存储器访问都经过误队列缓冲器(图中未示出)。IID0随同EA0一起被发送到高速缓冲存储器214的误队列中。通过由控制单元511操作的信号连乘器509,EA0还被锁存到锁存器B0505中。通过由控制单元511控制的信号连乘器507,常数+4被锁存到锁存器A0503中。
同时,EA0还被传送到第二写入/存储单元并通过信号连乘器510被锁存到锁存器B1506中。控制单元512控制信号连乘器510的操作。常数+8经过信号连乘器508被锁存到锁存器B0504中。然后,SSC发送一个减1的信号。同时,一个多重结束位(“Mfin”)随同一个IID的最后一次出现而被发送,如图6所示。
在AGEN的第二周期中,由加法器501将锁存器A0503和锁存器B0505的内容相加而生成EA0。EA0被发送到进行数据存取的高速缓冲存储器214。同时,EA0被锁存到锁存器B0505且常数+8被锁存到锁存器A0503中。
在同一周期中,由加法器502将锁存器A1504和锁存器B1506的内容相加而生成EA1。EA1被发送到进行数据存取的高速缓冲存储器214。目标重命名标记1(RR0+1)随同EA0一起被发送到高速缓冲存储器214的误队列中。EA1也被锁存到锁存器B1506且常数+8被锁存到锁存器A1504中。
类似于有效地址数据流的一个数据流允许进行IID标记和重命名分配的计算,使得一个IID和重命名标记被发送到数据控制单元中,如图5G所示。此时SSC发送一个减2的信号。第三周期与第二周期相似。从而在这些周期结束时,有效地址、重命名标记IID和Mfinn如图5G所示。
在高速缓冲存储器访问周期中,高速缓冲存储器传递以表5H中指定的地址为索引的数据。数据高速缓冲存储器单元必须保证图5H中所示的数据按顺序返回。在高速缓冲存储器访问周期中从高速缓冲存储器发写入据之后,处理器开始该指令的结束周期。换言之,一旦数据已被正确地写入重命名寄存器文件218中,就结束该指令。以一个Mfinn标志为标记的IID可以被结束。然后,更新排序表。图5I中示出了依据本实施例的排序表。在完成周期中,当排序表中的所有其他前序操作都已完成时,IID0被完成。排序缓冲器检查项目0中的异常情况,如果没有异常情况发生,就指示重命名寄存器文件向GPR寄存器文件传递下一个单元。在后续的周期中,以回写因子为2而完成IID1,以此类推。
最后,在回写周期,重命名寄存器文件218从排序缓冲器获取对IID0的下一个顺序存储单元进行写操作的信号。在后面的周期中,当完成IID1时,对两个GPR进行写操作直至完成多重写入指令为止。
当然,应当认识到上述实施例假设数据高速缓冲存储器中的数据排列在高速缓冲存储器的边界位置上。依据本发明的另一个实施例将解决与未对准(misalign)的高速缓冲存储器访问相关的问题。现参照图6A,图中示出了一个具有未对准字A,B,C和D的数据高速缓冲存储器600的逻辑内容。如图所示,未对准字A由四个字节a0-a3构成。字B,C和D的情况与A相类似。“x”表示“不必考虑”的数据。为了取出要送入一个重命名寄存器中的字A,需要对高速缓冲存储器600进行两次存取。由共享同一IID的一对原始写入指令执行该存取。这使得在将整个字写入适当的重命名寄存器中之后,完成表只退出一个指令项目。从而在现有的处理器中,对高速缓冲存储器线602的第一次高速缓冲存储器访问将返回字节x,x,a0和a1。这些字节将在格式器中循环并被存储在一个合并锁存器中。在后面的周期中,对高速缓冲存储器线604的第二次高速缓冲存储器访问将返回字节a2,a3,b0和b1。这些字节也是循环的并且按照顺序与存在合并锁存器中的数据进行重新组合而形成由a0,a1,a2和a3构成的字。然后重新组合而成的字将被传递到目标重命名寄存器。为了取出字B,高速缓冲存储器线604和606将以同样的方式被访问和重新组合。但是,应当清楚需要8个时钟周期才能够得到全部的四个字。本发明通过利用合并锁存器来存储对不同的字进行访问之间的数据而着手解决此缺陷。更具体地说,就是在LSU206中提供逻辑使得在LSU识别出用于一个复杂写入指令的数据未对准时,它能够向格式器发出信号来保持和合并位于合并锁存器中连续指令的数据,而不管这些指令具有不同的IID的事实。因此,字A的取操作将与上面所描述的一样是连续的。但是在重新组合字A之后,并不废除合并锁存器中的包括字节b0和b1的数据。而是在处理与当前指令的数据进行合并的前序指令的过程中读取高速缓冲存储器线604并指示格式器对存在合并锁存器中数据进行组合。这就避免了重新访问高速缓冲存储器线604的必要性。显然,本发明提供了一种无须为未对准数据进行2n次高速缓冲存储器访问,其中n为被写入的重命名寄存器的个数,而是只需进行n+1次高速缓冲存储器访问就能向相同数目的寄存器中写入的方法。在图6B中进一步说明了本发明的这一方面。在周期0中,两个LDU原始指令被发送,其中每一个的目标寄存器为RT且分配给每一个指令的IID等于0。这个指令还附加了一个状态位,用于指示格式器该指令是对高速缓冲存储器进行第一次访问还是第二次访问。但是,在完成表中只为这一对指令生成一个项目。只有在发生了第二次访问时,格式器中的逻辑单元才在完成表中产生该指令IID=0的结束信号,并将重新组合的数据写入重命名寄存器中。保存在合并锁存器中的来自指令IID=0的数据与来自指令IID=1的数据合并,并被传递到重命名寄存器RT+1。对于IID1到IID2,执行类似的操作。
依据本发明的另一个实施例,存储队列216用于在执行复杂存储指令时提供改进后的处理程序。具体地,就是将存储多重或存储字符串指令展开成原始存储指令。存储指令的展开与写入指令的展开基本相似,在此就不再予以详细描述了。在现有的处理器中,在完成每个原始存储指令时,处理器必须将数据从GPR寄存器文件224移到数据高速缓冲存储器214中。这将导致出现等候完成的原始存储指令的瓶颈现象,因为必须经常在多个冲突的请求之间为对GPR文件的多次访问进行公断。
依据本发明的一个实施例,通过在结束每个指令时将原始存储指令的数据写入存储队列216中来解决上述问题。然后在完成表220中将该指令标记成结束。当该指令在完成表220中为将被完成时,仅将数据从存储队列216传至数据高速缓冲存储器214即可,而无须从GPR文件224中进行读取。这就为处理器提供了在一个周期内完成多重存储指令的能力。这是由于能够在结束时或结束之前将来自GPR文件224或重命名寄存器文件218的数据传输到存储队列216中并将其写入存储队列中,以及在一个给定指令的完成周期之后的后续周期中将来自存储队列216的数据传输到数据高速缓冲存储器214中。
依据本发明的另一个实施例,如上面对多重写入指令所述的一样,对多重存储指令执行相似的处理。为了便于说明,假设处理器执行下述存储指令STWD RS,RA+D在此例中,存储指令将寄存器RS的内容存入地址为RA+D的存储单元。表示如下存储单元(RA+D)<---(RS)假设具体指令为STWD R15,R1+D,就是将GPR寄存器R15的内容送入存储单元(R1+D)。
在调度周期,将存储字指令置于排序缓冲器上,如图8A所示。应当注意这个存储操作项目与一个常规写入操作项目之间的主要区别是在排序缓冲器上没有回写记录。
在调度周期中,查找RS存储单元,即R15,如图8B所示。如果发现已被登记到重命名文件中,就将一个标记地址和有效重命名信号传递到写入/存储单元中。如果没有在重命名文件中登记,则该单元存在于GPR寄存器文件中并且不再需要重命名标记地址。在本特定实施例中,假设将R15分配给重命名目标寄存器0。
在AGEN周期中,写入/存储单元通过对(R1+D)求和而生成有效地址。这个有效地址被发送到用于转换该有效地址的存储器管理单元(MMU)中。在AGEN周期之后,存储操作和控制位被发送到存储队列216。一旦送入存储队列216中,如果经过存储的重命名标记中的有效重命名位为接通状态(ON),控制逻辑就连续地向重命名寄存器文件请求存储数据,或者如果有效重命名位为未接通状态,就从GPR寄存器文件中读取数据。
在结束周期,一旦该数据已被接收到存储队列中,就发送一个结束信号。将IID0随同任一异常信息一起发送到排序缓冲器。然后排序表被更新,并如图8C所示。
在完成周期,当排序表中的所有其他前序指令都已完成时,IID0也被完成了。排序缓冲器检查项目0中的异常情况。如果没有异常情况,就向存储队列发出对高速缓冲存储器进行写操作的信号。
将上述实施例应用到一个多重存储操作中,例如STMW RS,RA+D,应当注意存储单元RA+D被分配给RS,存储单元(RA+D+4)被分配给RS+1,以此类推。除了没有将寄存器登记到重命名寄存器文件中,而是以查找寄存器为改进的指令操作以外,该指令的展开与多重写入指令的展开相似。另外,同时以同于上述多重写入操作的方式,将该操作展开成LSU指令。
但是,必须通知写入/存储单元所分配的RS重命名标记是什么以及是否被有效重命名信号标记为有效。这是通过将每个STM伪操作置于指令缓冲器中的LSU之上来实现的。当然,有效重命名位和重命名分配标记也位于这个队列中。
在LSU展开该指令时,检查指令队列中的可用伪操作并得到该指令的重命名标记和控制信息。一旦已经得到该控制信息,就不再需要指令队列中的伪操作。如果该伪操作还没有被调度到指令队列中,则LSU必须等待,从而实现了与LMW展开中的计数器相同的功能。
尽管参照上述具体实施例对本发明进行了说明,但可以理解所属技术领域的技术人员可以在不偏离本发明范围和构思的情况下,对本发明的形式和细节进行改进。例如,本发明可以容易地扩展到包括多个GPR文件,允许对附加LDU原始操作进行调度,以及扩展用于上述/存储单元的数据流路径和数据高速缓冲存储器。
权利要求
1.一种用于操作一个超标量处理器的方法,所述超标量处理器包括一个指令高速缓冲存储器,一个定序单元,一个写入/存储单元,一个高速缓冲存储器,一个体系寄存器文件以及一个重命名寄存器文件,其特征在于该方法包括从指令高速缓冲存储器向可访问多个体系寄存器的定序单元传送一个指令;相应于所传送的指令而生成多个原始指令,其中每个原始指令可访问一个体系寄存器;顺序地发送原始指令以在数据高速缓冲存储器和重命名寄存器文件之间传送数据。
2.如权利要求1所述的方法,其特征在于传送一个指令的步骤包括传送一个多重写入指令,该指令可从数据高速缓冲存储器向多个体系寄存器中传输数据。
3.如权利要求2所述的方法,其特征在于生成多个原始指令的步骤包括至少生成一个单独的写入指令,该指令可从高速缓冲存储器向一个与该写入指令相关的特定重命名寄存器传送数据。
4.如权利要求2所述的方法,其特征在于生成多个原始指令的步骤包括至少生成一个单独的写入指令,该指令可从高速缓冲存储器向多个与该写入指令相关的重命名寄存器传送数据。
5.如权利要求1所述的方法,其特征在于传送一个指令的步骤包括传送一个多重存储指令,该指令可从多个体系寄存器向高速缓冲存储器传输数据。
6.如权利要求5所述的方法,其特征在于生成多个原始指令的步骤包括至少生成一个单独的存储指令,该指令可从一个与该指令相关的特定重命名寄存器向高速缓冲存储器传送数据。
7.一种用于在超标量处理器中处理高速缓冲存储器存取指令的电路,所述超标量处理器包括一个指令高速缓冲存储器,一个定序单元,一个写入/存储单元,一个高速缓冲存储器,一个体系寄存器文件以及一个重命名寄存器文件,其特征在于该电路包括用于从指令高速缓冲存储器向可访问多个体系寄存器的定序单元传送一个指令的装置;用于相应于所传送的指令而生成多个原始指令的装置,其中每个单独的原始指令可访问一个单独的体系寄存器;用于顺序地发送原始指令以在数据高速缓冲存储器和重命名寄存器文件之间传送数据的装置。
8.如权利要求7所述的电路,其特征在于用于传送一个指令的装置包括用于传送一个多重写入指令的装置,该指令可从数据高速缓冲存储器向多个体系寄存器中传输数据。
9.如权利要求8所述的电路,其特征在于用于生成多个原始指令的装置包括用于至少生成一个单独的写入指令的装置,该指令可从高速缓冲存储器向一个与该单独写入指令相关的特定重命名寄存器传送数据。
10.如权利要求8所述的电路,其特征在于用于生成多个原始指令的装置包括用于至少生成一个单独的写入指令的装置,该指令可从高速缓冲存储器向多个与该写入指令相关的重命名寄存器传送数据。
11.如权利要求7所述的电路,其特征在于用于传送一个指令的装置包括用于传送一个存储多重指令的装置,该指令可从多个体系寄存器向高速缓冲存储器传输数据。
12.如权利要求11所述的电路,其特征在于用于生成多个原始指令的装置包括用于至少生成一个单独存储指令的装置,该指令可从一个与该单独指令相关的特定重命名寄存器向高速缓冲存储器传送数据。
13.一种用于在一个超标量处理器中处理高速缓冲存储器访问指令的方法,所述超标量处理器包括一个指令高速缓冲存储器,一个定序单元,一个写入/存储单元,一个高速缓冲存储器,一个体系寄存器文件,一个重命名寄存器文件以及一个完成单元,其特征在于该方法包括从指令高速缓冲存储器向定序单元传送一个高速缓冲存储器访问指令;将该高速缓冲存储器访问指令传送到写入/存储单元;生成多个并列于定序单元和写入/存储单元中的原始指令。
14.如权利要求13所述的方法,其特征在于传送一个高速缓冲存储器访问指令的步骤包括传送一个写入多重指令。
15.如权利要求14所述的方法,其特征在于生成多个原始指令的步骤包括生成多个写入指令,该写入指令从高速缓冲存储器向与一个一对一指令相关的特定重命名寄存器传送数据。
16.如权利要求15所述的方法,其特征在于还包括将一个指令ID分配给写入指令中的至少一个。
17.如权利要求16所述的方法,其特征在于还包括在完成单元中为每个写入指令生成一个项目。
18.如权利要求14所述的方法,其特征在于生成多个原始指令的步骤包括生成多个写入指令,该写入指令将数据传送到与该指令相关的多个重命名寄存器中。
19.如权利要求18所述的方法,其特征在于在同一周期中至少处理多个写入指令中的两个,以便于由其中一个指令指定的数据高速缓冲存储器中的数据被传送到第一重命名寄存器中,由另一个指令指定的数据高速缓冲存储器中的数据被传送到与第一重命名寄存器逻辑相邻的第二重命名寄存器中。
20.如权利要求19所述的方法,其特征在于由第一写入/存储单元处理其中一个指令,而由第二写入/存储单元处理另一个指令。
全文摘要
本发明的一个方面涉及一种用于操作一个超标量处理器的方法,所述超标量处理器包括一个指令高速缓冲存储器,一个定序单元,一个写入/存储单元,一个高速缓冲存储器,一个体系寄存器文件以及一个重命名寄存器文件。在本发明的一个特定方案中,该方法包括步骤:从指令高速缓冲存储器向可访问多个体系寄存器的定序单元传送一个指令;相应于所传送的指令而生成多个原始指令,其中每个原始指令可访问一个体系寄存器;以及顺序地发送原始指令以在数据高速缓冲存储器和重命名寄存器文件之间传送数据。
文档编号G06F9/38GK1226699SQ9910130
公开日1999年8月25日 申请日期1999年1月15日 优先权日1998年2月17日
发明者D·S·雷, K·A·哈尔特, 小A·J·范诺斯特罗, D·A·施罗特, B·D·威廉森 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1