为处理器中的指令提供源操作数的方法和装置的制作方法

文档序号:6656975阅读:252来源:国知局
专利名称:为处理器中的指令提供源操作数的方法和装置的制作方法
技术领域
本发明的实施例总体上涉及计算机处理器中的指令流水线。
背景计算机系统中的处理器一般以一系列的阶段来执行指令,这一系列阶段可称作流水线。这些阶段的每一阶段可以由处理器的不同部分执行。例如,指令可以由解码器解码,随后,经解码的指令由一个功能单元执行。在“无序的”体系结构中,指令可以由执行单元按照与从中得到这些指令的程序所规定的顺序不同的顺序执行。在这样的情况下,指令可以被派发器(dispatcher)派发到调度器(scheduler),调度器可决定向执行指令的功能单元发送指令的顺序。
处理器执行的指令一般用寄存器来存储数据。指令可以有一个或多个源操作数,它们可以存储在寄存器中;指令可以产生一个结果,它也可以存储在寄存器中。如果指令的源操作数被存储在一个寄存器中(即从寄存器读出),或者一个结果被存储在那个寄存器中(即向寄存器写入),则可以说指令使用该寄存器。例如,对于一个给定的指令来说,处理器可以从寄存器R0读出一个数据操作数,从寄存器R3读出一个数据操作数,将这些数据操作数相加,然后将结果存回到寄存器R4中。有些现有技术的体系结构可以有一个寄存器高速缓存,在这样的体系结构中,可以从寄存器高速缓存中获得源操作数,或者,如果高速缓存失误,则从寄存器文件单元获得源操作数。在现有的体系结构中,流水线中的每个指令必须流经寄存器文件单元(或相关联的寄存器高速缓存)。例如,有些现有技术的无序体系结构是在主流水线中调度器之后具有寄存器文件单元(在这种情况下,可以在指令被调度器调出并发往功能单元时访问寄存器文件单元);或者是在主流水线中调度器之前具有寄存器文件单元(在这种情况下,可以在指令进入调度器时,访问寄存器文件单元)。
附图简述

图1是按照本发明实施例向调度器提供源操作数的处理器的简化框图2是按照本发明实施例把指令派发到调度器中和请求读寄存器的方法的简化流程图;图3是表示按照本发明另一个实施例的具有寄存器文件单元和与调度器耦接的功能单元的处理器的细节的简化框图;图4是表示按照本发明另一个实施例的具有与调度器耦接的寄存器文件单元和功能单元的处理器的细节的简化框图。
详细说明本发明的实施例涉及用于为处理器流水线中的指令提供源操作数的方法和装置。在有些实施例中,处理器具有一个与功能单元并行地实现的寄存器文件单元,用于为调度器中的指令提供数据操作数,并可被看作如同是功能单元那样提供数据操作数。在有些实施例中,可以派发一个具有要从寄存器读出的数据操作数的指令而不用向该寄存器发送一个读请求——如果该源操作数有一个产生指令正在运行中(in-flight)的话,并且,即使没有,也可以在向该寄存器的读请求得到结果之前派发该指令。按照有些实施例,多个指令对同一个物理寄存器的多个读出请求可以被压缩成一个单一的寄存器文件读出,这样,该单一的寄存器文件读出可以将其数据汇集到1到n个在调度器内的等待指令。在有些实施例中,可以将处理器设计得能容忍具有不同延迟的寄存器文件的访问。应当理解,本文所述的例子的各种修改和变体可由下文提供的教导所覆盖并且处在后附的权利要求的范围内。
图1是按照本发明实施例向调度器提供源操作数的处理器的简化框图。图1显示的处理器100包括退役顺序(retirement order)缓冲器110、派发器120、运行中的存储器125、调度器130、读队列140、寄存器文件单元150和功能单元160。处理器100可以是用于计算机系统的任何类型的处理器,诸如位于美国加州Santa Clara的英特尔公司的奔腾类微处理器。图1中所示的各单元,可以例如以硬件、固件或者硬件与固件的某种组合的形式实现。尽管图1显示了处理器100的一个指令流水线,在其它实施例中指令流水线可含有更多的单元、不同的单元和/或额外的单元。
如图1中所示,退役顺序缓冲器110存储多条指令,诸如指令15-17。这些指令,例如可以是要由处理器100例如按照已知指令处理技术执行的一组程序指令的经解码的微指令。这些指令也可以是宏指令,微指令和宏指令的某种组合,等等。例如,指令15可以是一个执行“ADD R0=R3,R4”的指令,该指令要求把寄存器0中存储的数据操作数与寄存器3中存储的数据操作数相加,将其结果存入寄存器4。当然,退役顺序缓冲器110可以存储多于三条的要被执行的指令。在所示实施例中,指令并非是与指令要使用的数据操作数一起存储在退役顺序缓冲器110中的,数据是由流水线中更远的单元提供的。
退役顺序缓冲器110与派发器120耦接,可以向派发器120提供指令。本文中,如果两个物体直接或者间接地相连,则可将他们称作是“耦接的”。在有些实施例中,如图1中所示,派发器120与读队列140耦接,后者又与寄存器文件单元150耦接。在图1所示的实施例中,寄存器文件单元150含有第一寄存器组151和第二寄存器组152,读队列140对应地含有第一存储单元组141和第二存储单元组142。例如,可以将队列分组(banked)成偶数的和奇数的组。在其它实施例中,寄存器文件单元150和读队列140可以不分组,或者可以含有不同数目的组。在有些实施例中,处理器可包括一个2组寄存器文件单元,每个组有两个读端口,用简单SRAM单元实现,这样每个周期总共多达4个读结果。在所示实施例中,派发器120可以向读队列140发送一个请求,要求读寄存器文件单元150中的一个寄存器提供一个要被某指令使用的数据操作数,读队列140可以缓存这样的请求,并将其传递到寄存器文件单元150中适当的寄存器。例如,如果派发器120正在派发一条要从寄存器R3中读一个数据操作数的指令,则派发器120可以向读队列140发送一个请求读取寄存器R3的请求121。在有些实施例中,如果没有正在等待的请求,则可以绕过读队列。读队列140可以是实现队列的任何类型的存储器器件。可以将读队列设计得例如吸收最坏情况的读请求速率,并且可以以寄存器文件单元的读路径(portage)所支持的速率(例如通过在对应的组中可用的寄存器读端口)被排出。在有些实施例中,寄存器读请求可以把寄存器读请求的流速率平滑到稳定的状态水平。
寄存器文件单元150含有一组寄存器R0到Rn,如众所周知的那样,可以用来存储由处理器100执行的指令所用的数据操作数。寄存器文件单元150可以是任何类型的存储器单元,诸如一组静态随机存取存储器(SRAM)单元,一组动态随机存取存储器(DRAM)单元,或者是传统的寄存器单元。寄存器文件单元150可以含任何数量的寄存器,例如512个82位寄存器。在有些实施例中,可以用例如高密度、低功率的SRAM单元实现海量物理寄存器(例如在数据高速缓存中)。结构性和推测性的寄存器状态可以混合在同一个物理寄存器文件中。在这样的实施例中,结构性和推测性寄存器重命名可以随着指令的退出而重命名指针,以保留正确的结构性状态。在有些寄存器中,寄存器文件单元中的寄存器有少量的端口。例如在一个实施例中,利用4位宽的派发机(4-wide dispatch machine)上的2个读和1个写SRAM高速缓存单元,可以将寄存器实现为一个具有总共4个读端口和总共2个写端口的、划分为两个组的寄存器文件单元。例如,寄存器文件单元可以有512个寄存器和4个输出端口。
派发器120与调度器130耦接,后者又与功能单元160耦接。在其它实施例中,处理器可以有多个调度器,例如每个功能单元有一个调度器,或者一个功能单元簇有一个调度器。派发器120可以将指令例如指令13派发到调度器130中。调度器130可以存储若干条正在等待调度、供功能单元之一执行的指令,诸如指令11-12。调度器130可以存储一个指令而不存储要由该指令使用的操作数(如调度器130中所示的空列所表示的那样)。在有些实施例中,指令一旦被派发到调度器130中,就可开始有一个“运行中”的状态,并且可继续处于运行中的状态,直到数据结果被(例如由寄存器文件单元或功能单元—如下文所讨论的那样)传递给该寄存器并且不再是可获得的(例如从功能单元或旁路网络)。功能单元160可以是一个或多个执行指令的单元,诸如算术逻辑单元、浮点执行单元、整数执行单元、分支执行单元等等。当要执行一个指令时,它被传递到功能单元160中一个适当的功能单元,该功能单元执行该指令。调度器130可以是一个无序调度器,因为指令可以按与它们出现的顺序不同的顺序执行。例如,指令12可以在指令11之前执行,尽管指令11是在指令12之前派发的。调度器130可以通过执行任何调度算法来调度指令。
如图1中所示,寄存器文件单元150的输出端口(这里是通过一个多路转接器)耦接到调度器130的输入端口。此外,功能单元160也有与调度器130的输入端口耦接的输出端口。按照有些实施例,可以将指定要从寄存器中读取数据操作数的指令在操作数可得到之前派发到调度器而不带源操作数。在有些实施例中,调度器130存储具有用以指定寄存器的源操作数的指令,并根据该指令的源操作数到达调度器而调度该指令。在有些实施例中,将一条指令的源操作数提供到调度器,这与向调度器派发新指令是异步的,这意味着,在把指令派发到调度器与源操作数到达调度器的时间之间没有相关性。因此,指令到达调度器与该指令的操作数到达调度器这两者可以是去耦的。如下文参照图2将要更详细说明的那样,在调度器中等待的指令要用的源操作数可以从寄存器文件150或功能单元160提供给调度器。例如,假设指令12是一个要使用要从某个寄存器中读取的源操作数153的指令,而且该指令12是在该源操作数可用之前被派发到调度器130的,则可以或者从寄存器文件150或者从功能单元将源操作数153提供给调度器130,供由等待的指令12使用。
图1也显示一个与派发器120耦接的运行中的存储器125。如图所示,运行存储器125含有多个1比特的存储器位置,为了说明,这些位置在图1中被标记为项(entry)1到n。在所示实施例中,运行存储器125存储一个数组或表,用于表明寄存器文件单元中的一个寄存器是否要被一个运行中指令使用。在其余实施例中,可以采用其它元素/机制来表明寄存器文件单元中的一个寄存器是否要被一个运行中的指令使用,诸如内容可寻址的存储器、各种比较器等等。在图1所示的例子中,运行存储器125中的0号项含有值“1”,这可以表明寄存器0要被一个运行中的指令使用,1号记录含有值“0”,这可以表明没有运行中的指令要使用寄存器1。在有些实施例中,可以对这样一个运行表进行更新,以反映已经被派发到调度器的所有产生器指令。在有些实施例中,也可以为寄存器读请求设置运行状态,因为寄存器文件单元是物理寄存器的产生器。如下文所讨论的那样,派发器120可以用存储在运行存储器125中的信息来确定是否要向读队列140生成一个请求,以要求派发一条指令(即,要求生成一个要从被指定为该指令的源操作数的位置的寄存器读数据的请求)。如果生成了这样一个请求,派发器120可以在读请求完成之前把指令派发到调度器130。在有些实施例中,运行存储器125中的各单元可以是完全连接端口的(ported)或者部分连接端口的。
图2是按照本发明实施例把指令派发到调度器中和请求读寄存器的方法的简化流程图。这个方法将参照图1中所示的装置加以讨论,但是该方法也可以用任何其他合适的装置来执行。指令可以流过诸如处理器100的处理器的流水线,并且例如可以被存储在退役顺序缓冲器110中。可以检查新的指令,并可以确定该指令是否有一个要从寄存器读取的源操作数(201)。例如,派发器120可以从退役顺序缓冲器获得一个指令,并且确定该指令是“ADD R0=R3,R4”指令,在这种情况下必须从寄存器0和寄存器3读取源操作数。在另一个例子中,如果新指令没有从寄存器读取的源操作数,则可以只是把新指令传递到调度器中用于调度,这是熟悉本技术领域的人员都明白的。
如果新指令真的有从寄存器读取的源操作数,则按照所示的实施例,就要确定是否有任何运行中指令使用与该新指令所要读取的相同的寄存器(202)。在有些实施例中,如果某运行中指令读取与被新指令所读取的同一个寄存器或者写入该同一个寄存器,则认为该运行中指令使用与被新指令所读取的同一个寄存器。在有些实施例中,对运行中指令使用与被新指令所读取的相同的寄存器的确定,包含检查存储器中的一个数组,以确定是否有任何运行中指令要被从与新指令相同的寄存器读取或者写到该相同的寄存器。例如,如果派发器120收到的指令14是一个要读取寄存器0和寄存器3的“ADD R0=R3,R4”指令,派发器120可以检查存储器125,看看是否有任何运行中指令要使用寄存器0和寄存器3。在图1中所示的例子中,运行存储器125中的项0(它对应于寄存器0)含有值“1”,这可能表明有一个运行中的指令(例如指令11)要使用寄存器0。
如果一个运行中指令使用与该新指令所要读取的同一个寄存器,则可以将该新指令派发到调度器中,而不向该寄存器发送一个要求读取源操作数的请求(203)。在这种情况下,可以将来自该运行中的指令的结果操作数提供到调度器,以供新指令作为源操作数使用(204)。在上面讨论的例子中,如果指令14要使用一个存储在寄存器0中的源操作数,但是指令11是在运行中并且要对寄存器读或写,则可以将指令14派发到调度器130,而不向寄存器文件单元150发送一个要求读寄存器0的读请求。如果指令11只是读取寄存器0,从寄存器读得的操作数(诸如图1中的操作数153)可以从寄存器的输出端口提供给调度器130的输入,此时,可以将操作数存储在调度器130,供将来要执行指令14时由该指令使用。如果指令11改变了寄存器0的值(例如写一个结果到寄存器0),则功能单元160在执行指令11时所产生的结果(诸如图1中的操作数153)可以从功能单元的输出端口提供到调度器130的输入,如刚刚讨论的那样,供将来由指令14使用。当然,这假设了将不会安排新指令在与其相关的运行中的指令之前执行。因此,按照有些实施例,在产生器指令可能是被功能单元或者寄存器文件单元执行的产生指令的情况下,如果产生器指令是运行中的,则不生成读请求。
如果没有运行中的指令使用与该新指令所要读取的相同的寄存器,则可以生成一个请求以便从含有新指令用的源操作数的寄存器中读出(205)。在上面的例子中,如果运行存储器125表明没有使用寄存器0的运行中指令,则派发器120可以生成一个读寄存器0的请求121。在有些实施例中,生成读寄存器的请求包含向该寄存器的一个读队列(例如读队列140)发送以一个要从该寄存器读取源操作数的请求。因此,按照有些实施例,即使寄存器文件中没有足够的端口可用来接收读请求,派发器也可以继续将指令派发到指令调度器中。在图2所示的实施例中,在接收到所生成的读请求的结果之前就将新指令派发到调度器中(206)。在上面的例子中,即使尚未响应读请求121而读取寄存器0,也可以将指令14派发到调度器130中。如图2中所示,在读请求完成时,可以把新指令用的源操作数从寄存器提供到调度器,供新指令使用(207)。例如,指令12可在调度器130中等待着操作数153响应于读请求121而从寄存器0被提供到调度器130。
在有些实施例中,可以用内容可寻址的存储器(CAM)将寄存器文件结果装载到调度器中,这样可以被处理器功能单元使用。在有些实施例中,可以或者从寄存器的输出端口或者从功能单元的输出端口将新指令的源操作数提供到调度器的端口,其中寄存器文件单元与功能单元共享调度器的输入端口。在有些实施例中,在调度器中等待的指令可能对寄存器文件数据值何时到达是不敏感的。因此,调度器可在功能单元和寄存器文件单元产生它们的结果时捕获源操作数数据。当调度器有了用于特定指令的所要求的所有源操作数数据时,调度器可以把该值令发布到正确的功能单元。在有些实施例中,不需要寄存器读出数值的那些后继指令可以立即进入调度器,以便在那些需要寄存器读出数值的指令周围被调度。因此,可以与新指令的派发异步地向调度器提供源操作数,调度器可以在调度新指令供执行之前,等待源操作数被提供到调度器。
图3是表示按照本发明另一个实施例的具有寄存器文件单元和与调度器耦接的功能单元的一个处理器的细节的简化框图。图3表示的处理器100包含图1中所示一些部件。特别地,图3显示有图1的调度器130、寄存器文件单元150和功能单元160。在图3所示的实施例中,处理器也有一个耦接到调度器130的旁路网络310、寄存器文件单元150和功能单元160。特别地,旁路网络310的输出端口耦接到调度器130的输入端口,并且(这里是通过一个多路转接器)耦接到功能单元160的输入端口。此外,寄存器文件单元150和功能单元160的输出端口还耦接到旁路网络310的输入端口。在有些实施例中,可以将来自寄存器文件单元150和功能单元160的输出数据转发到调度器130或功能单元160,供将来的指令使用。在有些实施例中,旁路网络310可以含有缓冲器,用于暂时存储数据操作数。当然,旁路网络310的输出端口可以耦接到(通过寄存器文件端口)寄存器文件单元150中的每一个寄存器,以及耦接到功能单元160中的一组功能单元。在有些实施例中,旁路网络可以含有在结果已经被产生后暂时存储结果的队列或缓冲器,并且在有些实施例中,只要这样一个指令所产生的结果在旁路网络中仍然是可用的,则可认为该指令有一个在运行中的状态。在有些实施例中,使用这样的缓冲器可导致较少的来自寄存器文件单元的通信量(traffic)。
在图3所示的实施例中,处理器100也有一个写队列320耦接到寄存器文件单元150、功能单元160和旁路网络310。特别地,写队列320可有一个与寄存器文件单元150的输入端口耦接的输出端口,一个通过旁路网络315耦接到旁路网络310的输出端口,以及一个耦接到寄存器文件单元150和功能单元160的地输出端口的输入端口。按照有些实施例,寄存器写入可以在写队列320中被缓冲,并在后台运行时被写入寄存器文件单元。在有些实施例中,如果某指令要读取寄存器,而在写队列320中该寄存器的一个写操作尚在等待,则可以通过旁路网络315将数据从写队列提供到调度器130。与寄存器文件单元150一样,在有些实施例中,写队列320可以有多个组。当然,写队列320的输出端口可以耦接到寄存器文件单元150中的每一个寄存器。在有些实施例中,如果有寄存器文件写-读冲突,可以将尚未写入的寄存器值从写队列旁路到寄存器读数据路径中。
图4是表示按照本发明另一个实施例的具有与调度器耦接的寄存器文件单元和功能单元的一个处理器的细节的简化框图。在有些实施例中,可以用总线和旁路多路转接器将寄存器数据传递到功能单元/调度器/旁路网络。按照上述的处理器的实施例,可以用额外的到执行单元调度器的CAM端口来方便从寄存器文件单元向调度器提供数据。在有些实施例中,并且如图4中所示,功能单元结果总线和选定数量的执行单元的CAM端口可以被过载/与寄存器文件读结果总线共享。
图4显示具有图1中所示的一些部件的处理器100。特别地,图4显示有图1的调度器130、寄存器文件单元150和功能单元160。在图4中所示的实施例中,寄存器文件单元150包含四个读端口RP0至RP3,功能单元160包含两个存储器功能单元(M0和M1)和两个整数功能单元(I0和I1)。当然,在其它实施例中,寄存器文件单元可以含有更多或更少的读端口,并且可以有更多、更少、以及/或者不同的功能单元。如图4中所示,调度器130有多个输入端口。如图所示,寄存器文件单元读端口RP0可以通过总线RB0耦接到调度器130的一个输入端口。此外,从寄存器文件单元来的寄存器文件单元读端口RP1和功能单元M0的输出端口二者都可以通过一个共享总线(图4中标记为A)耦接到调度器130中的第二(共享)输入端口。寄存器文件单元读端口RP2可以通过总线RB2耦接到调度器130的第三输入端口。寄存器文件单元读端口RP3和功能单元M1的输出端口二者都可以通过一个共享总线(图4中标记为B)耦接到调度器130中的第四(共享)输入端口。最后,整数功能单元0的输出端口可以通过总线C耦接到调度器130中的第五输入端口,整数功能单元1的输出端口可以通过总线D耦接到调度器130中的第六输入端口。
因此,在有些实施例中,一个与调度器耦接的总线可以被功能单元和寄存器共享,并且/或者调度器的一个CAM输入端口可以被功能单元和寄存器共享。在有些实施例中,在功能单元与寄存器文件单元之间过载结果总线可以使寄存器文件单元对旁路网络和调度器的影响最小化。如图4中所示,来自寄存器文件单元和功能单元的总线的每个都可以向调度器130提供一个操作数,如操作数153,例如如上文参照图1-3所述的那样。
在有些实施例中,功能单元结果和寄存器文件结果的高峰载荷时间可能是正交的。例如,在平稳状态的执行期间,功能单元可能正在提供新结果,大多数指令可能从运行中指令(例如通过旁路网络)获得它们所需要的源操作数结果。在这种情况下,所需的寄存器文件读出可能不频繁。相反,在重启动之后,功能单元可能进入空闲状态,不在结果总线上放置数据,而寄存器读则可能处于高峰,以便为进入机器的新指令服务。在共享结果总线和CAM端口时可以考虑这种正交性。
下表表示在与图4中所示的处理器类似的一个示例处理器中的所有执行单元的结果总线。尽管图4中的处理器有两个存储器执行单元(M0和M1)和两个整数执行单元(I0和I1),下表中的处理器有一个第三整数执行单元(I2)、浮点执行单元(F)和分支执行单元(Br)。在下表中,最左边的列中列出作为产生器的这些单元,顶部的行中列出要把结果送往的消费器。在该表中,这些结果总线,从结果总线‘A’上的存储器端口0到结果总线‘F’上的浮点端口都已被任意地命名,这与图4中所示的类似。在这个实施例中,可以为这个配置假设某些宏指令的分解(decomposition)。这样,在本例中,可以把由存储器单元0和由读端口1产生的结果通过总线A提供到功能单元的每一个(和调度器)。类似地,由存储器单元1和由读端口2产生的结果可以通过总线C被提供到功能单元的每一个(和调度器)。注意有一些功能单元可能不消费来自任何产生器(诸如分支单元)的数据或者仅仅消费来自产生器的一个子集的数据。
上表中中列出了读端口0到读端口0。读端口0和1可共享组0。读端口2和3可共享组1。在一个实施例中,带下划线的表项表示为支持这个寄存器文件配置而增加的CAM端口。该该表所描述的处理器例子中,通过增加两个全CAM端口来支持寄存器文件读端口,以及通过与存储器结果总线共享其余两个寄存器文件读端口,可以使对性能的影响最小化。这在表中表示,其中读端口1共享结果总线A(存储器端口0),读端口3共享结果总线B(存储器端口1)。可以这样来选择读端口1和3,以使得两个读出同时在相同的寄存器组上激活的这种较不通常的情况中只需要一个执行结果总线。在其它实施例中,并且根据性能要求,所有的或部分的总线可能会过载或者根本不过载任何总线。
在上表所示的例子中,是存储器端口而不是整数端口被过载,因为整数指令可能更常用,并且因为存储器端口有更长的延迟。在有些实施例中,一个与寄存器文件共享其结果总线的执行单元将在一个有效指令将要产生结果的时候发信号通知寄存器文件。在这样的实施例中,执行单元应当有足够的延迟,以便能够足够早地发出这个通知,以阻止一个寄存器读出从而被发布到寄存器文件查找表以及防止与执行结果冲突。如果一个寄存器读出被延迟,操作数可以等待从寄存器文件单元读队列发出,直到例如下一个时钟周期。如果延迟太短,读请求可能会被从读队列中取出并插入到寄存器文件查找流水线,这可能导致可能的结果总线冲突。因为上面所讨论的处理器的实施例可以容忍不同的延迟,可以延迟寄存器文件读出的发布,而不抑制被派发到调度器中的或者被发布到功能单元中的指令。
在有些实施例中,如果浮点端口到达不了足够的端口(与读端口相比,读端口可到达所有的执行端口)并且如果可能有浮点基准性能的考虑,则可以在选择要被过载的端口时忽略浮点端口,如上表所示的例子一样。在有些实施例中,可以将存储器端口扩展以便到达分支端口,从而支持与寄存器读端口的共享。
以上详细讨论了某些实施例。当然权利要求的范围要覆盖上述的实施例和它们等同物以外的实施例。例如,所讨论的指令格式和寄存器名称仅仅是示意性的,在其它情况中可以使用任何指令格式和/或寄存器。类似地,另外一个例子是,处理器可以不使用读队列。
权利要求
1.一种处理器,包括含有多个寄存器的寄存器文件单元;和用于调度指令的调度器,其中,调度器要接收一个要被调度的指令,其中调度器要从寄存器文件单元接收一个用于所接收的要被调度的指令的源操作数,并且其中调度器要异步地接收指令和源操作数。
2.权利要求1的处理器,进一步包含用于表明寄存器文件单元中的一个寄存器是否要被一个在运行中的指令使用的单元。
3.权利要求1的处理器,其中该单元进一步包含存储器或者多个比较器的其中之一。
4.权利要求2的处理器,其中该处理器进一步包含用与向调度器派发指令的派发器,其中,派发器要根据该单元确定是否要生成一个要从被指定为要被派发的指令源操作数的位置的寄存器中读取数据的请求,并且,如果生成了这样一个请求,则在该读请求完成之前派发该指令。
5.权利要求1的处理器,进一步包含一个读队列,以便将从寄存器文件单元的寄存器中读取数据的读请求进行缓存。
6.权利要求5的处理器,其中读队列包含多组存储器单元。
7.权利要求6的处理器,其中寄存器文件单元包含多个静态随机存储器单元。
8.权利要求1的处理器,其中寄存器文件单元中的多个寄存器被安排成多个组。
9.权利要求8的处理器,其中处理器进一步包含与寄存器文件单元耦接的写队列,用于对寄存器文件单元的写排队,并且其中写队列包含多个组。
10.权利要求1的处理器,其中寄存器文件单元包含四个端口。
11.权利要求1的处理器,其中处理器进一步包含功能单元和总线,其中总线耦接到调度器的输入端口、功能单元的输出端口、以及多个寄存器的第一寄存器的输出端口,并且其中总线由功能单元和第一寄存器共享。
12.权利要求11的处理器,其中调度器的输入端口由功能单元和第一寄存器共享。
13.权利要求1的处理器,其中处理器进一步包含功能单元,其中处理器进一步包含旁路网络,它具有与寄存器文件单元耦接的输入端口并且具有与功能单元耦接的输出端口,并且其中一个指令具有在运行中的状态,其中在旁路网络中可得到该指令的源操作数。
14.一种处理器,包含用于调度指令的调度器;包含多个寄存器的寄存器文件单元;和派发器,用于向调度器派发用于指定要从多个寄存器之一中读取的源操作数的新指令,其中,如果要被新指令读取的寄存器也要被在先的一个运行中的指令使用,则派发器就派发该新指令而不用生成要为该新指令从该寄存器中读取该源操作数的请求。
15.权利要求14的处理器,其中,如果要被新指令读取的寄存器也要被在先的一个运行中的指令使用,则调度器要为新指令接收作为该在先指令的结果的源操作数。
16.权利要求15的处理器,其中,新指令的源操作数是从一个旁路网络提供到调度器的。
17.权利要求14的处理器,其中,其中处理器进一步包含一个要存储一个数组的存储器,其中数组中的一个项为寄存器文件单元中的一个寄存器表明是否有一个运行中指令要使用该寄存器。
18.权利要求17的处理器,进一步包含一个读队列以便对从寄存器文件单元的寄存器中读取数据的读请求进行缓存。
19.权利要求18的处理器,其中读队列包含多组存储器单元。
20.权利要求14的处理器,其中寄存器文件单元中的多个寄存器被安排成多个组。
21.权利要求14的处理器,其中处理器进一步包含与寄存器文件单元耦接的写队列,用于对寄存器文件单元的写入进行排队,并且其中写队列包含多个组。
22.权利要求14的处理器,其中处理器进一步包含一个具有与调度器的输入端口耦接的输出端口的功能单元,并且其中寄存器文件单元中的第一寄存器的输出端口像该功能单元那样耦接到调度器的同一个输入端口。
23.权利要求22的处理器,其中处理器进一步包含一个用于耦接功能单元的输出端口与调度器的输入端口的共享总线,其中共享总线也耦接第一寄存器的输出端口与调度器的输入端。
24.一种系统,包含一个包含多个寄存器的寄存器文件单元;用于调度指令的调度器;派发器,用于向调度器派发一个具有要从多个寄存器之一中读取的源操作数的指令;和用于向派发器表明是否可以从在先的指令获得源操作数的单元。
25.权利要求24的系统,其中,寄存器文件单元与调度器耦接,以向调度器提供在调度器中等待的指令的源操作数。
26.权利要求24的系统,其中处理器进一步包含功能单元和总线,其中总线耦接到调度器的输入端口、功能单元的输出端口、以及寄存器单元的第一寄存器的输出端口,并且其中总线由功能单元和第一寄存器共享。
27.权利要求26的系统,其中调度器的输入端口由功能单元和第一寄存器共享。
28.权利要求24的系统,进一步包含一个读队列,以便对从寄存器文件单元的寄存器中读取数据的读请求进行缓存。
29.权利要求28的系统,其中读队列包含多组静态随机存取存储器单元。
30.一种方法,包含确定一个新指令具有一个要从一个寄存器读取的源操作数;确定一个运行中的指令是否要使用与该新指令要读取的相同的寄存器;和如果一个运行中的指令要使用与该新指令要读取的同一个寄存器,则将新指令派发到一个调度器中而不用向寄存器发送一个要读取源操作数的请求。
31.权利要求30的方法,其中该方法进一步包含使用被在先的指令从寄存器读的结果向调度器提供源操作数,以供新指令使用。
32.权利要求30的方法,其中,如果一个运行中指令读取与新指令所读取的相同寄存器或者写入该相同的寄存器,则认为该运行中指令要使用与新指令所读取的相同的寄存器。
33.权利要求30的方法,其中,所述确定一个运行中指令是否要使用与新指令要读取的相同的寄存器包含检查存储器中的一个数组,以确定是否有任何运行中指令要从与新指令相同的寄存器读取或者写入到该相同的寄存器。
34.权利要求30的方法,该方法进一步包含确定没有运行中指令要使用与新指令所要读取的相同的寄存器;生成一个读取该相同寄存器的请求;和在接收到所生成的读取该相同的寄存器的请求的结果之前将新指令派发到调度器中。
35.权利要求34的方法,其中生成读取该寄存器的请求包含向该寄存器的读队列发送一个从该寄存器读取源操作数的请求。
36.权利要求30的方法,该方法进一步包含或者从寄存器的一个输出端口或者从一个功能单元的输出端口向调度器的一个输入端口为新指令提供源操作数,其中寄存器和功能单元共享调度器输入端口。
37.一种方法,包含确定一个新指令具有一个要从一个寄存器读取的源操作数;将新指令派发到一个调度器;和与向调度器派发新指令异步地向调度器提供源操作数。
38.权利要求37的方法,其中该方法进一步包含调度新指令以供执行之用,其中调度器在调度新指令以供执行之前要等待源操作数被提供到调度器。
39.权利要求37的方法,其中该方法进一步包含使用一个在先的指令从寄存器读取的结果来向调度器提供源操作数以供新指令使用。
40.权利要求37的方法,其中该方法进一步包含或者从寄存器的一个输出端口或者从一个功能单元的输出端口向调度器的一个输入端口提供用于新指令的源操作数,其中寄存器和功能单元共享调度器输入端口。
全文摘要
用于向要在处理器执行的指令提供源操作数的方法和装置。一些实施例可包括一个具有寄存器的寄存器文件单元和用于调度指令的调度器。在一些实施例中,调度器要异步地接收指令和该指令的源操作数,源操作数是从寄存器文件单元中接收的。
文档编号G06F9/38GK101036119SQ200580033435
公开日2007年9月12日 申请日期2005年9月30日 优先权日2004年9月30日
发明者G·哈蒙德, C·斯卡费迪, J·克劳福德 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1