乱序处理器中的分布式记分板调度的制作方法

文档序号:6454097阅读:308来源:国知局

专利名称::乱序处理器中的分布式记分板调度的制作方法
技术领域
:本发明一般涉及微处理器。更特别地,本发明涉及乱序处理器。
背景技术
:许多微处理器是相对简单的有序机器。在有序处理器中,取指令并且如果该指令的源操作数在处理器的寄存器文件中是可用的(available)那么该指令被发送到合适的功能单元。指令发送典型地指的是发送指令到功能单元(例如执行单元)以便处理。在有序处理器中,依照程序顺序发送和执行指令。在流水线有序处理器中,流水线(pipeline)被停止直到指令的操作数可用。在乱序处理器中,取指令并分派指令到指令分派緩冲区。该指令在緩沖区中等待直到它们的操作数准备好,并且在较新或较老的指令之前发送该指令,且打乱了程序的顺序。接着结果在緩冲区中(例如在完成緩沖区(completionbuffer)中)排队。完成緩冲区保持指令的程序顺序的轨迹并且在较老的指令将它们的结果写入寄存器文件之后,较新的指令将它们的结果写入寄存器文件。在乱序处理器中,脱离了程序顺序来执行指令而它们的结杲依照程序顺序被写入寄存器文件。流水线乱序处理器允许指令的执行被安排在将使流水线有序处理器停止的危险附近。典型地,指令包括一个或多个源操作数和一个目的操作数。指令的目的操作数通常至少部分的基于源操作数被修改。修改目的操作数的指令典型地称为它修改了其源操作数的另一个指令的生产者(producer)。其源操作数被生产者指令修改的指令典型地称为消费者(consumer)。消费者的源操作数典型地是生产者的目的操作数。生产者在它们相应的消费者被处理之前由处理器的执行单元处理。生产者指令可以是其它生产者的消费者,并且消费者可以是其它消费者指令的生产者。对于源操作数,消费者可以具有它依赖的多于一个的生产者。可以从生产者指令设旁路到消费者指令的源操作数。旁路指的是在生产者指令将它的结果写入寄存器文件之前(即在生产者更新架构状态(architecturalstate)之前)由生产者指令^"改的操作数的值向消费者指令的传送。处理器的旁路策略决定了由生产者指令修改的一个或多个操作数的值何时以及从哪里可以向消费者指令发送。只有当所有源操作数的值都可用(例如在寄存器文件中或通过来自生产者指令的旁路)的时候指令可以;故发送到处理器的执行单元。因此,旁路策略可以决定指令可以被发送的最早时间。一些乱序处理器使用称为记分板的技术以在存在足够的可用的计算资源以及对源操作数没有数据相关性的时候允许指令乱序执行。集中式记分板用于检查指令的操作数可用性。集中式记分板存储处理器中每一个寄存器的状态并且每一个指令查找该集中式记分板以确定它们的操作数是否可用。在使用记分板的乱序处理器中,每一个指令搜查集中式记分板,其中在集中式记分板中创建了指令的源操作数的数据相关性的记录。集中式记分板确定了指令何时可以读取它的操作数以及开始执行。如果集中式记分板判定指令由于它的源操作数不可用所以不能立即执行,则该集中式记分板监视系统状态的改变并且判定操作数何时准备好。如果源操作数的值准备好被读取,则集中式记分板确定指令何时可以被发送。因此所有的危险检测和决定(resolution)都被集中在记分板内。集中式记分板不得不与处理器的所有功能单元通信,因为仅有有限数量的用于通信的总线,因此这表现出了结构危险。集中式记分板实现需要芯片上的较大面积。而且,查找集中式记分板可能是耗时的。集中式记分板存储每一个寄存器的状态。指令典型地需要访问一个或两个操作数的值并且查找一个或两个寄存器的状态。当集中式记分板被访问以确定操作数的可用性时,记分板中的一个或两个寄存器从处理器中的所有寄存器中被逸出。这等效于寄存器文件的查找耗时。同样,如果多个指令试图同时查找记分板,则需要复杂的布线。记分板的尺寸和到记分板的总线的数量可以:敗增加,这消耗宝贵的芯片有效面积并且同样具有时序纠葛(implication)。查找集中式记分板的复杂性同样延迟了指令发送。所需要的是用于减小乱序微处理器中的集中式记分板的复杂性的新技术,该新技术克服了上面指出的不足。
发明内容本发明提供了一种处理器核以及一种用于乱序处理器中的分布式记分板调度的方法。在实施例中,控制逻辑将操作数可用性位(operandavailabilitybits)附加于每一个指令。所附的操作数可用性位形成每一个指令的分布式记分板。所附的操作数可用性位与指令一起被传送经过处理器流水线的多个级。指令分派緩沖区存储指令和操作数可用性位。分派控制器确定指令何时将被发送。该确定至少部分基于存储于指令分派緩冲区内的操作数可用性位。在实施例中,指令的操作数可用性位包括用于确定由生产者指令修改的操作数何时可以被旁路到消费者指令的计数器值。操作数可用性位包括一位,用于当生产者指令被发送到处理器的执行单元内时触发消费者指令的计数器。生产者指令被附加有唤醒使能值,该唤醒使能值用于当生产者指令被发送到处理器的执行单元内时触发消费者指令的计数器。当生产者指令被发送到处理器的执行单元内时,消费者指令的计数器开始减小它的值。当计数器计数下降到零时,由生产者指令修改的操作数可以被旁路到消费者指令。因此,消费者指令不必等待生产者指令将修改的操作数写入处理器的寄存器文件内,在它可以被访问之前。这加速了指令发送并且由此增加了指令吞吐量。在实施例中,使用唤醒使能值,生产者指令可以延迟计数器的启动从而控制消费者指令何时被发送。操作数可用性位包括一个值,用于指示操作数是否存在在处理器的寄存器文件内。操作数可用性位还包括一个值,用于指示操作数是否在处理器中预知可用。在本发明的实施例中,改进的重命名映射表(renamingmap)还存储操作数可用性位。在本发明的一个实施例中,处理器核包括流水线,该流水线包括多个并行的处理路径,其中每一个并行的处理路径中的指令都包括附加的操作数可用性位。本发明的其它实施例、特征和优点,以及本发明的各种实施例的结构和操作将参考附图在下面详细描述。在这里并入的并且形成本说明书的一部分的了本发明并且与说明书一同进一步用来解释本发明的原理和用来使本领域技术人员能够实现和使用本发明。在附图中,相同的附图标记指示同样的或者功能类似的元件。另外,附图标记的最左边一位数指示该附图标记最先出现在哪个附图中。图l是根据本发明的第一实施例的处理器核的示意图。图2是根据本发明的第二实施例的处理器核的示意图。图3是处理器的流水线级的示意图。图4是处理器的流水线级的更详细的示意图。图5是根据本发明实施例的处理器的重命名和分派级的流水线级的示意图。图6是说明根据本发明实施例的寄存器重命名映射表的示意图。图7是说明根据本发明实施例的指令分派緩冲区的示意图。图8是说明根据本发明实施例的组合逻辑的示意图。图9是说明根据本发明实施例的状态机的示意图。图10是说明根据本发明实施例的移位寄存器计数器的示意图。具体实施方式本发明提供了一种处理器核以及一种用于实现乱序处理器中的分布式记分板调度的方法。在接下来的本发明的详细描述中,涉及"一个实施例"、"实施例"、"示例实施例"等说法是指示描述的实施例可以包括特殊的特征、结构或特性,但是每一个实施例都可以不必包括该特殊的特征、结构或特性。而且,这样的短语不必指相同的实施例。此外,当结合实施例描述特殊的特征、结构或特性时,应该认为本领域技术人员理解无论是否明确地描述都可以结合其它实施例实现这样的特征、结构或特性。虽然参照流水线乱序处理器描述实施例,但是本领域技术人员理解可以在非流水线的处理器或部分流水线的处理器中实现实施例。图1是根据本发明实施例的处理器100的示意图。处理器100包括处理器核102、指令存储器104和寄存器文件106。处理器核102具有流水线,该流水线包括指令分派单元IIO。如图1所示,处理器核102的指令分派单元110包括分派控制器130、解码器132、重命名器(renamer)122和指令分派器(ID)124。根据实施例,重命名器122包括控制逻辑(未示出),该控制逻辑将操作数可用性位附加于指令,该指令从指令读取緩沖区116被读取并且由解码器132解码。在实施例中,处理器核102可以包括多个流水线级。由重命名器122附加于指令的操作数可用性位可以与该指令一起被传送经过多个流水线级。指令分派器124包括指令分派緩冲区(IDB)700(这里没有显示但是在下面描述),该指令分派緩冲区700存储指令和大部分的附加的操作数可用性位。分派控制器130基于存储于指令分派緩冲区700内的附加的操作数可用性位,动态地调度由ALU1"执行的指令。在实施例中,消费者指令的操作数可用性位包括计数器值,用于确定由生产者指令修改的操作数何时可以被旁路到消费者指令。该操作数可用性位包括一位,用于当生产者指令被发送到处理器ioo的ALU126中时触发消费者指令的计数器。生产者指令被附加有唤醒使能值,用于当生产者指令被发送到ALU126中时触发消费者指令的计数器。当生产者指令被发送到ALU126中时,该计数器开始减小它的值。当该计数器计数下降到零时,该消费者指令可以被发送使得它可以接收来自生产者指令的旁路的操作数。因此,消费者指令不必等待生产者指令将修改的操作数在它可以被访问之前写入寄存器文件106内。计数器的使用以确定指令的一个或多个操作数是否可以在它们被写入寄存器文件106之前被访问,导致更快速的指令发送以及增加的指令吞吐量。在实施例中,使用唤醒使能值,生产者指令可以延迟计数器的启动从而控制消费者指令何时被发送。在实施例中,操作数可用性位包括一个值,用于指示操作数是否存在于处理器的寄存器文件内。操作数可用性位同样包括一个值,用于指示操作数是否在处理器100中预知可用。例如,如果加载(Ioad)指令具有高速緩存失败(cachemiss),则它不得不从主存储器或硬盘访问数据。从主存储器或硬盘的数据访问时间是不可预测的。一旦从主存储器或硬盘访问数据并且该数据在处理器100的一个功能单元内是可用的,则该数据是预知可用的。一有加载失败(loadmiss)时则该位^皮设置为0而当待加载的值在处理器100内是预知可用时,该位被设置为l。使用附加于指令的操作数可用性位的形式的分布式记分板,消除了如在传统乱序处理器中那样持续访问集中式记分板以确定指令是否可以被发送的需要。处理器核102同样包括程序计数器(PC)选择器112、可选的重编码器(recoder)114、分支预测器118以及流水线控制逻辑120。程序计数器选择器112选择用于从存储器读取程序指令的地址或程序计数器值。在一个实施例中,PC选择器112可以选择连续增加的程序计数器值、重定向程序计数器值、或新程序线程的程序计数器值。处理器核102优选地能够执行标准宽度的指令(例如32位指令)和压缩格式宽度的指令(例如16位指令)。因此,在一个实施例中,处理器核102包括可选的重编码器114。如果从指令存储器104中读取压缩格式指令,则该指令由重编码器114重新编码到可以被解码器132解码和被算术逻辑单元126执行的格式宽度。在一个实施例中,标准宽度指令和压缩格式宽度指令都由重编码器114重新编码到具有比标准宽度指令更多位的指令宽度。指令从可选的重编码器114被传送到指令緩沖区116。指令緩冲区116能够保持多个指令。在一个实施例中,其中处理器核102实现多线程,来自不同程序线程的指令被存储,例如,在指令緩冲区116的各自的部分内。多线程指的是同时执行程序的不同部分(叫做线程)的操作系统的能力。在另一个实施例中,其中处理器核102实现多线程,来自不同程序线程的指令被存储在各自的指令緩冲区内,例如,每一个程序线程有一个指令緩冲区。处理器核102优选地每个读取周期读取多个指令。在控制转移指令(例如分支指令或跳转指令)从指令存储器104读取的情况下,分支预测器118预测与控制转移指令相关的有条件的分支是实行还是不实行。任何已知的分支预测算法可以被使用。指令从指令緩冲区116被读取并且由解码器132解码。解码器132执行对指令进行解码的功能。重命名器122执行更新寄存器重命名映射表600(这里没有显示但是在下面描述)的功能。在解码和重命名处理期间,每一个指令都关联/分配一个指令标识(IID)标签。IID是分配给每一个指令的独特的标识符。指令的源和目的操作数的每一个都被分配一个完成緩冲区标识(CBID)标签。目的操作数的CBID决定了在完成緩冲区128中的其中算术逻辑单元126可以写入指令的计算结果的位置。源操作数的CBID是在完成緩沖区128中的其中源操作数的值可以被定位的位置。在一个实施例中,指令标识标签连续地被生成多位的值。生成的位数取决于同时执行多少指令。在一个实施例中,其中处理器核102实现多线程,指令标识标签以每一个线程为基础被生成并且被分配。指令根据由分派控制器130决定的调度而从指令分派器124读取并且由算术逻辑单元(ALU)126执行。一旦指令的操作数准备好,分派控制器130就调度该指令以便执行并且优选地根据指令的年龄(age)来调度。指令的年龄由程序决定。例如,在程序顺序中较早的指令比程序顺序中较晚的指令要"老"。在乱序处理器100中,如果较老的指令和较年轻的指令的操作数都是可用的,那么较老的指令优选地在较年轻的指令之前被发送。在实施例中,指令分派緩沖区124按照它接收到指令的顺序来存储指令。在指令分派緩冲区124中的队列的顶部的指令是较老的指令。具有可用操作数的较老的指令,在指令分派緩沖区124队列中的较低的指令之前,由指令分派器124分派。在实施例中,分派控制器130可以是ID124或者流水线控制逻辑120的部分。算术逻辑单元126的结果被写到完成緩冲区128并且被存储直到指令结束且它们的结果被写到寄存器文件106。指令存储器104是对于处理器核102可访问的任何存储器,例如指令高速緩存器、高速暂存存储器、环形緩冲区等等。在一个实施例中,存储器104包括多个存储器和/或多个类型的存储器。寄存器文件106包括多个通用目的寄存器(未示出),该通用目的寄存器对程序员是可见的。图2是根据本发明的另一个实施例的处理器200的示意图。处理器200包括处理器核202、指令存储器104、以及寄存器文件106。处理器核202具有包括指令分派单元210的流水线。如图2所示,处理器核202的指令分派单元210包括分派控制器130、解码器132、重命名器122。在图2所示的实施例中,存在两个流水线,一个用于ALU126b,而另一个用于地址生成(AGEN)126a。除了微处理器200包括两个并行的指令执行流水线,微处理器200操作与微处理器100类似。这两个指令执行流水线可以是相似的,或者可以使它们专用于执行挑选的指令。在一个实施例中,由指令分派器124a、AGEN126a、以及完成緩冲区128a表示的流水线用于执行控制转移指令例如分支、跳转和返回指令以及加载、存储、预取、高速緩存指令。由指令分派器124b、ALU126b以及完成緩冲区128b表示的流水线用于执行算术指令,例如加、减等等。因为存在两个流水线,指令分派单元210具有两个指令分派器,即指令分派器124a和指令分派器124b。根据实施例,在指令分派单元210内的重命名器122包括控制逻辑(未示出),该控制逻辑将操作数可用性位附加于指令,其中该指令从指令读取緩冲区116读取并且由解码器132解码。指令分派器124a和124b的每一个都包括指令分派緩冲区(未示出),与IDB700类似,该指令分派緩冲区存储指令和大部分的附加的操作数可用性位。分派控制器130基于存储于指令分派器124a和124b各自的指令緩冲区内的附加于指令的操作数可用性位,决定何时将指令发送到ALU126b或者AGEN126a。如图2所示,处理器核202包括程序计数器(PC)选择器112、可选的重编码器114、指令緩冲区116、分支预测器118以及流水线控制逻辑220。处理器核202包括与AGEN126a和ALU126b的每一个相关的两个完成緩沖区128a和128b。调度器130动态地调度指令以便由处理器核202的两个并行的流水线执行。在实施例中,处理器200可以包括多个并行的流水线级。由重命名器122附加于指令的操作数可用性位可以与该指令一起被传送经过多个并行的流水线级。操作数可用性位可以被修改以适应并行的流水线级。如这里描述的相关领域的技术人员应当理解的,操作数可用性位对于并行的流水线级可以被修改。同样应当理解虽然这里给出的示例使用单流水线,但是作为替换的实施例不限于单流水线。例如,在包括多于两个流水线的处理器中,可以使用多于两个的指令分派器和相关的功能单元。在另一个示例中,单指令分派器可以用于多个流水线。如这里描述的相关领域的技术人员应当理解的,功能单元的数目可以才艮据实现方式而变化。图3是说明处理器(例如处理器100或处理器200)的示例流水线级划分的示意图。在图3所示的实施例中,处理器100被划分为四个流水线级。这四个流水线级是示意性的并且不希望限制本发明。在其它实施例中,处理器100可以多于或者少于四个流水线级。在本发明的任何实施例中实现的流水线级的数目是设计选择。如图3所示,处理器100的四个流水线级是指令读取级302、指令重命名和分派级304、指令执行级306和写寄存器文件级308。级302典型地包括PC选择器112、重编码器114和指令读取緩冲区116。在级302中,PC选择器112在多种程序计数器值之中选择以用于从指令存储器104读取指令。检查与将要从指令存储器104中读取的指令相关的指令标签。从指令存储器104中读取一个或多个指令。压缩格式指令由重编码器114重新编码成为可以被解码和被执行的格式。所有指令被写入指令緩沖区116。在一个多线程实施例中,处理器100包括用于每个程序线程的一个指令緩冲区。在一个实施例中,指令可以被直接分派到解码器132。级304典型地包括解码器132、重命名器122、指令分派器124和分派控制器130。重命名器122包括重命名映射表600和重命名控制逻辑(未示出)。指令分派器124包括指令分派緩冲区(IDB)700和指令分派控制逻辑(未示出)。在示例中,对于并行的流水线,如在处理器200中,级304包括指令分派器124a和124b。在级304中,指令被解码、重命名和分派。并行于使用解码器132进行解码,重命名器122更新寄存器重命名映射表600。寄存器重命名映射表是保持程序员可见的结构寄存器(architecturalregisters)与内部物理寄存器之间的映射信息的结构。根据实施例,重命名映射表600被修改以包括处理器100中每一个寄存器的可用性位。重命名映射表600同样具有对应于处理器100中每一个寄存器的最新提供者(provider)的CBID。对于每一个指令,重命名器122将操作数可用性位附加于指令。然后指令可以带着来自重命名映射表600的该可用性位经过流水线,从而生成分布式记分板,该分布式记分板确定操作数何时可用。使用重命名映射表600来获得操作数可用性位消除了对集中式记分板的需要和对反复查找集中式记分板以确定操作数何时可用的指令的需要。根据实施例,指令分派单元110内的重命名器122包括重命名控制逻辑(未示出),该重命名控制逻辑将操作数可用性位附加于指令,该指令从指令读取緩冲区116中取出并且由解码器132解码。指令分派器124包括指令分派緩冲区700,该指令分派緩沖区700存储指令和大部分的附加的操作数可用性位,分派控制器130基于存储于指令分派器124的IDB700内的操作数可用性位,决定何时将指令发送到处理器核102的ALU126。在一个实施例中,其中处理器100包括累加器寄存器(未示出)、数字信号处理器(DSP)寄存器(未示出)和协处理器寄存器(未示出),对于不同的寄存器类型维持各自的重命名映射表。这些重命名映射表与为通用目的寄存器维持的重命名映射表600类似。在另一个实施例中,重命名映射表600可以用于所有的寄存器。如在这里指出的,对目的寄存器进行寄存器重命名以去除输出相关性并且确保在任何特定的时刻在处理器核102存储器在特定寄存器的单一生产者。源寄存器被重命名使得在最早的时机从生产者获得数据而不是等待处理器的状态被更新。这同样帮助减小例如与算术逻辑单元126耦连的任何协处理器内的相关性检查的复杂性。在级304内指令收到指令标识(IID)标签和完成緩冲区标识(CBID)标签。指令的目的操作数具有与分配给它的指令的相同的CBID。目的操作数的CBID决定了在完成緩冲区128中的其中算术逻辑单元126可以写入指令的计算结果的位置。指令的源操作数被分配它们对应的生产者指令的CBID。源操作数在重命名映射表600中查找它们对应的生产者指令的CBID。在一个实施例中,每一个指令标识标签是唯一地确定指令的程序顺序的线程专有的连续生成的值。在级304的末端,被解码和被重命名的指令被放置于指令分派器124的指令分派緩冲区700内。分派控制器130选择位于指令緩冲区内的指令以便由算术逻辑单元126执行。级306典型地包括ALU126。在另一个示例中,级306可以具有并行的流水线级,例如AGEN126a。在级306内,指令由算术逻辑单元126执行并且分解控制转移指令诸如,例如,分支指令和跳转指令。在一个实施例中,所选的指令(诸如,例如浮点指令)由与算术逻辑单元126耦连的协处理器(未示出)处理。在级308内,由ALU126和/或协处理器生成的结果#皮写到完成緩冲区128。如上面所指出的,在级304内,指令的目的操作数被分配CBID数。作为指令完成执行,它们相应的完成緩冲区完成位被设置,从而使指令能够结束并且释放它们相关的CBID数。当指令结束并且寄存器重命名映射表被更新时,将结果从完成緩冲区128写到寄存器文件106。每个指令优选地根据程序顺序而结束。图4是说明图3中的一些流水线级的更进一步的流水线级划分的示意图。在图4中所示的实施例中,指令解码级被划分为N級D广Dn。指令执行级306被划分为并行的级306a和306b。级306a可以包括AGEN126a而级306b可以包括ALU126b。指令执行级306a被划分成M级A广Am而指令执行级306b被划分成R级E广Er。回写级308被划分成K级W广Wk。这些流水线级是示意性的而不希望限制本发明。在其它实施例中,处理器核102可以具有更多或者更少的流水线级。在本发明的任何实施例中实现的流水线级的数目是设计选择。图4中所示的流水线级说明了生产者指令与消费者指令之间的操作数的旁路。典型地,指令包括一个或多个源操作数和一个目的操作数。指令的目的操作数通常至少部分的基于源操作数而被修改。修改目的操作数的指令典型地称为它修改了其源操作数的另一个指令的生产者。其源操作数被生产者指令修改的指令典型地称为消费者。消费者的源操作数典型地是生产者的目的操作数。生产者在它们相应的消费者被处理之前由处理器的执行单元处理。生产者指令可以是其它生产者的消费者并且消费者可以是其它消费者指令的生产者。消费者可以具有它依赖的多于一个的生产者用于源操作数。可以从生产者指令旁路到消费者指令的源操作数。旁路指的是在生产者指令将它的结果写入寄存器文件之前(即在生产者更新架构状态之前)由生产者指令修改的操作数的值向消费者指令的传送。处理器的旁路策略决定了由生产者指令修改的一个或多个操作数的值何时以及从哪里可以被发送到消费者指令。只有当所有源操作数的值都可用时指令可以被发送到处理器的执行单元。因此,旁路策略可以决定指令可以被发送的最早时间。典型地,当消费者指令的操作数在寄存器文件106内可用的时候该消费者指令被发送。通过给消费者指令的源操作数的值设旁路,消费者指令可以在它的操作数值在寄存器文件106内可用之前发送。消费者指令何时可以被发送由它的生产者指令何时被发送以及操作数可以从处理器中的何处通过旁路到消费者来决定。当从生产者指令到消费者指令的操作数值的旁路可以发生时,生产者和消费者之间的流水线级的最小数目(即流水线级差距)被用作初始的计数器值。当重命名生产者指令时由重命名器122将该计数器值存储于重命名映射表700内。在实施例中,计数器值可以是当从生产者到消费者的旁路可以发生时在生产者指令发送之后的时钟周期的最小数目。计数器值与消费者指令一起传送经过多个流水线级。在实施例中,计数器值仅被传送经过重命名和分派级304。在该实施例中,执行级M6不需要流水线化,因为操作数可用性位仅被传送到重命名和分派级304。计数器值的使用使得消费者指令在不必重复查找集中式记分板的情况下确定它的操作数是否可用成为可能。计数器值的使用同样消除了在消费者指令可以被发送到指令执行级306之前等待该消费者指令的操作数在寄存器文件106内可用的要求。在操作数在寄存器文件106内可用之前就发送消费者指令,增加了指令呑吐量。在图4所示的示例中,操作数值可以从Wl级旁路到A3级。Wl与A3之间的级数可以是3级。在另一个示例中,操作数可以从Am级旁路到A2级。Am与A2之间的级数可以是2级。操作数同样可以从与流水线级Al到Am并行的流水线级之一被旁路。例如,操作数可以从与级306a并行的级306b被旁路。操作数可以从流水线级E3旁路到流水线级A3。E3与A3之间的级数可以是0。对于将要被生产者指令修改的单个操作数,因为当生产者由重命名器122处理的时候消费者指令的类型和旁路级是未知的,因此多个计数器值可以由重命名器124存储到重命名映射表600中。例如,生产者加载指令可以从级E3将一个值通过旁路到达级A2的消费者加法指令。在这种情况下,因为级E3与级A2之间的差距是2,因此计数器值是2。如果同样的生产者加载指令从级E4将一个操作数值通过旁路到达级E1的消费者指令,那么因为级E4与El之间的距离是3个时间周期,因此计数器值是3。生产者可以从该级旁路的级是与实现方式有关的。生产者指令的类型决定了它可以从该级旁路的流水线级而消费者指令的类型决定了它可以接收到旁路值的流水线级。一旦重命名则生产者指令的类型已知,但是消费者指令类型未知,因为它还没有被重命名。在实施例中,根据生产者指令的类型,在重命名映射表600中存储两个计数器值。当消费者指令被重命名时,它的类型已知并且选择这两个计数器值中的一个。在另一个实施例中,消费者指令的类型可以是无关的而计数器值仅仅基于生产者指令的类型和它可以从哪里为一个值设旁路。在实施例中,为了限制计数器值减小的计数器的尺寸,计数器值限制在两位。唤醒使能位(下面描述)可以由生产者指令使用以延迟计数器的启动从而间接地增加计数器值。表1,在下面显示了基于操作数被旁路的级和操作数被旁路到的级的示例计数器值。表1可以存储在重命名器122内。_<formula>formulaseeoriginaldocumentpage18</formula>表l从表1得到,从级Wl旁路操作数到A3的计数器值是3,从Wl旁路到E3的值是3并且从W1旁路到E2的值是4。因此,对于可以从级Wl旁路操作数值的生产者指令,两个计数器值是3和4。根据实现方式,生产者指令可以仅在到达特定流水线级之后旁路。在到达该级之后,根据实现方式,生产者可以从其后的任何一级旁路。在一个实施例中,计数器值基于生产者指令可以从该级为操作数值设旁路的最早的级。在另一个实施例中,计数器值基于晚于生产者指令可以从该级为操作数值设旁路的最早级的级。表l中所示的值是出于示例的目的而并不限制这里提出的实施例。当生产者指令由指令分派器124发送到指令执行级306时,与相应的消费者指令的操作数相关的计数器被触发。当该计数器计数减小到0,并且消费者指令的所有其它操作数可以被访问或者可以被旁路时,该消费者指令准备发送。例如,如果生产者指令可以使操作数从级Am旁路到达级A2内的消费者指令,并且流水线级Am和A2之间的差距是2级,那么消费者指令的相应操作数的计数器值是2。当生产者在级DN内被发送时,消费者的计数器被触发并且开始减小值。当生产者到达级A2时,消费者的操作数的计数器为0。如果消费者指令的其它操作数同样是预知可用的,那么消费者指令被发送。当消费者指令到达级A2时,生产者指令在级AM内并且生产者指令将操作数值旁路到达级A2内的消费者指令。如这里描述的相关领域的技术人员应当理解的,其中操作数值可以从该级旁路的级、操作数值可以被旁路到的级以及当旁路可以发生时生产者与消费者之间的最小流水线级差距可以根据实现方式而变化。计数器值、其它操作数可用性位以及相关的控制逻辑在下面详细描述。图5是说明根据本发明的实施例的指令重命名和分派级304的示意图。出于简化说明的目的,没有在图5中显示级304的所有功能单元。在本实施例中,级304已经被划分成四个流水线级D1D4,并包括流水线寄存器500-508。级D1包括重命名器122,级D2包括选择控制逻辑510,而级D3包括指令分派器124。在实施例中,选择控制逻辑510可以是分派控制器130、流水线控制逻辑120或者处理器100内的其它控制逻辑的部分。流水线寄存器500接收并存储来自指令读取级302内的指令读取緩沖区116的指令512。重命名器122将操作数可用性位附加于指令512。在实施例中,操作数可用性位包括可预测的可用性(avail)位、寄存器文件内(inRF)位、第一计数器值(CNT_1)、第二计数器值(CNT_2)、第一旁路使能位(BP_1)和第二旁路使能位(BP_2)以及用于指令512的每一个操作数的active(活动)位。指令512和附加的操作数可用性位被传送到寄存器502。avail位指示操作数值在处理器100内是否预测可用,即操作数值是否可以立即在处理器100的功能单元中的一个内被访问。一旦重新命名指令512就由重命名器122将avail位典型地设置为1作为默认值。在实施例中,如果生产者是具有高速緩存失败并且必须从主存储器或者硬盘取回数据的加载指令,则avail位被设置为0。因为从主存储器或者硬盘取回数据所需要的时钟周期数是不可预测的,所以avail位被设置为0直到数据在处理器100内可以预测可用。当加载指令为高速緩存失败时,在加载指令从主存储器或者硬盘取出数据的同时inRF位可以被设置为1。inRF位用于指示操作数数据在寄存器文件106内的可用性。如果操作数数据不在寄存器文件106内,则在级Dl内重命名器122将inRF设置为0,而如果操作数数据在寄存器文件106内,则在级Dl内重命名器122将inRF设置为1。在实施例中,当想要的操作数值的生产者一旦写到寄存器文件106就广播相应的CBID时,重命名器122确定指令的操作数值是否在寄存器文件106内。重命名器122将存储在重命名映射表600内的源操作数CBID与广播的CBID相比较,并且如果两个CBID匹配,则重命名器122将inRF设置为1。这里使用的术语"广播"指的是一个信号或者多个信号,该信号指示事件(诸如,指令被发送到执行级304内、指令写到完成緩沖区128或者指令写到寄存器文件106)的发生。在实施例中,广播被传送到处理器IOO内的每一个流水线级。广播典型地包括关于事件的信息,诸如寄存器的CBID或者与唤醒使能值(如果可用)一起的指令的IID。BP—1位和BP_2位,对应于CNT—1和CNT—2,用于指示如果指令512被发送,指令512的操作数是否将通过来自生产者指令的旁路而可用。典型地,BPj和BP—2由重命名器122i殳置为0。当CNT一1计数减小到0时BP_1被设置为1,而当CNT—2计数减小到0时BP—2被设置为1。当指令512的操作数的旁路使能位(BP_1或者BP—2)被设置为1时,那么它指示了如果指令512被发送,操作数值将通过旁路而可用。active位用于触发计数器,该计数器减小CNT—1和CNT—2的值。典型地,一旦重新命名指令512时重命名器122就将active位设置为0。当指令512的生产者一旦被发送到指令执行级306内就广播CBID和唤醒使能位(wakeup—enbit)时,重命名器122将广播的CBID与存储在它的重命名映射表600内的CBID相比较并且如果存在CBID匹配则设置active位。当设置active位时,相应的CNT—1和CNT_2值开始减小。示例移位寄存器计数器在图10中说明并且在下面描述。CNT—1和CNT—2是基于当旁路能够发生时生产者与消费者之间的流水线级差距由重命名器122确定的计数器值。生产者指令的类型决定了它可以从该级设旁路的流水线级而消费者指令的类型决定了它可以接收到旁路值的流水线级。因为消费者指令类型未知,所以当重命名器122重新命名生产者指令时,在重命名映射表600中存储两个计数器CNT—1和CNT—2。当消费者指令由重命名器122重命名时,该消费者指令的类型已知并且只可以选择计数器值中的一个(CNT—1或者CNT_2)。时序约束可以阻止重命名器122选择计数器值来附加于指令。在这种情况下,如图5所示,计数器值CNT_1和CNT_2以及旁路使能位BP_1和BP_2都被附加于指令。在级D2内选择这两个计数器值中的一个(CNT_1或者CNT_2)以及相应的旁路使能位中的一个(BP—1或者BP—2)。在实施例中,在级D1内,重命名器122选择并且附加仅一个计数器值(CNT—1或者CNT—2)和一个相应的旁路使能位(BP_1或者BP一2)到从流水线寄存器500接收的指令。如这里描述的相关领域的技术人员应当理解的,计数器值的数量、每一个计数器值的位数以及用来确定哪一个计数器值被附加于指令的策略可以根据实现方式而变化。在实施例中,计数器值可以基于如表l的预定的查找表而被确定。应当理解,为了说明的简单,图5说明了指令512的仅仅一个操作数的操作数可用性位,但是流水线寄存器502-508包括指令512的两个操作数的操作数可用性位。在级D2内,选择控制逻辑510从流水线寄存器502接收操作数可用性位avail、inRF、BP—1、BP—2、CNT—1、CNT—2和active。选过的操作数可用^位传送到寄存器504。"'选择控制逻辑510监视来自生产者指令的CBID广播。如果修改指令512的操作数的生产者指令被发送到执行级306内,那么该生产者指令广播相应的CBID和wakeup_en位,这导致选择控制逻辑510将相应的active位i殳置为1。选择控制逻辑510选择作为两个计数器值CNT_1和CNT—2中的一个的CNT,并且选择作为两个相应的旁路使能位BP—1和BP一2中的一个的BP。选择控制逻辑510将CNT和BP附加于指令512。在一个实施例中,选择控制逻辑510基于如在表1中的查找表而选择两个计数器CNT—1和CNT^2值中的一个。如果active位为l,那么控制逻辑减小该所选的计数器值。如果从级Dl接收到的active位已经被设置为1,则选择控制逻辑510继续减小所选的计数值。如果在级D2内该所选的计数器值计数减小到0,那么选择控制逻辑510将相应的BP位设置为1。如果选择控制逻辑510接收到指令512的操作数值已经被写入寄存器文件106的广播,则选择控制逻辑510将inRF设置为1。如果选择控制逻辑510接收到指令512的操作数值在处理器100内是预知可用的广播,则选择控制逻辑510也将avail设置为1。广播同样可以包括在处理器100内该操作数的位置。在处理了操作数可用性位之后,选择控制逻辑510将它们传送到寄存器504。从流水线寄存器504接收指令512和该指令附加的avail、inRF、BP、CNT和active位。指令分派器124在指令分派緩冲区700存储器储指令512和该指令相应的avail、inRF、BP、CNT和active位。当指令512的所有操作数可以被访问时,分派控制器130通过流水线寄存器506将指令512发送到级D4内。在级D3内,ID124监视来自生产者指令的CBID广播。如果修改指令512的操作数的生产者指令被发送到执行级306内,那么该生产者指令广播相应的CBID和wakeup一en位,这导致ID124在IDB700内将相应的active位设置为1。如果从级D2接收到的active位已经被设置为1,则ID124继续减小相应的计数值。如果在级D2内所选的计数器值计数减小到0,那么ID124将BP设置为1。在级D3内,如果操作数的BP位为1那么它指示如果消费者被发送,它将能够接收到来自生产者的旁路操作数。在级D3内,如果ID124从级D2接收到的inRF位被设置为1,那么该操作数值在寄存器文件106内可用。如果inRF是0,则只有当ID124接收到指令512的操作数值已经被写入寄存器文件106的广播时ID124才将inRF设置为1。如果avail位是1,则它指示指令512的操作数值在处理器100内是预知可用的。如果,例如,生产者指令是具有高速緩存失败的加载并且必须从主存储器或者硬盘访问数据,那么avail位被设置为0。当操作数数据在处理器100内是预知可用的时,例如当数据从主存储器或者硬盘取出时,相应的寄存器标识号的广播导致ID124将avail设置为1。在实施例中,CBID或者IID可以被广播以指示avail设置为1的预知可用性。在实施例中,指令分派器124基于下面的公式来确定指令512的操作数是否可以被访问Operand_ready=(inRFORBP)ANDavail--------(1)当指令的所有操作数值可以被访问时该指令准备好被发送。如果指令512有两个操作数,则ID124根据下面的公式2来确定指令是否准备好被发送Issue_ready=Operand_ready0perandiANDOperand—readyoperand2--------(2)如果指令512有N个操作数,则发送准备就绪(readiness)由下面公式来确定Issue—ready-Operand—readyoperandiANDOperand—ready0perand2AND".Operandready0perandn--------(3)用来实现issue_ready的示例控制逻辑在下面参考图8来描迷。在实施例中,对于存储在指令分派器124的IDB700中的指令的每一个操作数,操作数准备就绪和发送准备就绪由下面公式来确定Operandready=f,(inRF,BP,avail)--------(4)其中f,是第一函数。Issue—ready=f2(inRF,BP,avail)--------(4)其中f2是第二函数。基于上述公式,当指令512的所有操作数可用时,分派控制器130发送指令512。在一个实施例中,如果在指令分派緩冲区700内多个指令准备好被发送,则指令分派器124结合分派控制器130基于程序顺序或者指令的年龄(即具有可用操作数的最老的指令首先被发送)发送指令。在实施例中,指令分派器124和分派控制器U0可以被合并为单个单元。如果指令512是另一个指令的生产者,则指令分派器124将唤醒使能(wakeup_en)位附加于指令512。当指令512发送到执行级306内时指令512广播该wakeup—en位,从而导致相应的消费者指令的active位被设置并且从而启动该消费者指令的计数器。当指令512的所有操作数可以被访问时,分派控制器130通过流水线寄存器506将指令512连同附加的wakeup_en位一起发送到级D4内。在级D4内,可以是分派控制器130或者流水线控制逻辑l加的部分的控制逻辑(未示出)广播指令512发送到指令执行级306内。该广播可以包括指令512的IID、CBID和wakeup_en位。指令512在级D4内的广播用于处理在级D1、D2和D3内的相应的消费者指令的操作数可用性位。在另一个实施例中,当指令512到达特定的级时指令512的广播可以发生。如果指令512写到完成緩沖区128并且同样当指令512写寄存器文件106时指令512再次广播它的CBID和IID。图6是说明根据本发明实施例的重命名映射表600的示意图。重命名映射表600是重命名器122的部分。在本实施例中,重命名映射表600包括每一个条目的字段CBID、寄存器标识(ID)、inRF、avail、BP—1、BP_2、active、CNT—1和CNT_2。重命名映射表600可以包括H个条目602a到602h(602a-h)。在实施例中,H是寄存器文件106内的寄存器的数量。寄存器由寄存器ID来标识。在实施例中,寄存器ID是逻辑的寄存器号。每一个寄存器都有唯一的寄存器ID。重命名映射表600内的条目600a-h中的每一个都有两个相关的计数器,计数器604a-h和计数器606a-h。计数器600a-h和计数器606a-h是重命名器122和/或重命名控制逻辑(未示出)的部分。CBID是5位,寄存器ID是5位,inRF是l位,avail是1位,active是1位,CNT—l是2位,CNT—2是2位以及BP—1和BP—2每一个1位。如这里描述的相关领域的技术人员应当理解的,在重命名映射表600内的每一个字段的位数都是任意的并且取决于实现方式。在实施例中,计数器604a-h和计数器606a-h是重命名控制逻辑(未示出)的部分。重命名映射表600可以包括其它字段(未示出)。重命名映射表600的使用有助于減小乱序处理器100的相关性检查的复杂性。由重命名器122来进行寄存器的重命名从而避免在试图在寄存器文件106内写相同寄存器的不同指令之间的沖突。使用寄存器重命名的处理器典型地具有一组内部寄存器(诸如完成緩冲区128)以在结果被写入寄存器文件(诸如寄存器文件106)之前将该结果排队。寄存器重命名允许对寄存器文件106内相同寄存器的多个访问被映射到完成緩沖区128内的不同的内部寄存器,从而解决冲突。重命名映射表600内的每一个重命名条目都具有寄存器的最新提供者的CBID并且因此每一个消费者都知道它的操作数将来自于哪一个生产者。如所述的,在这里,重命名映射表600被修改以便存储操作数可用性位从而消除集中式记分板的需求。当消费者指令传送通过级Dl时适当的操作数可用性位被附加于该消费者指令。当指令512进入级D1(图5中所示)时,重命名器122从指令512中提取目的寄存器ID。CBID同样被分配给目的寄存器ID。重命名器122在重命名映射表600内查找相应的寄存器ID并且更新具有目^!寄存器的CBID的条目,将avail设置为l(假设数据将是预测可用的),inRF设为0(因为指令512没有写到寄存器文件512内的目的寄存器),active设为0(因为指令512还没有被发送到执行级306内),BP-1和BP_2都设为0(因为与目的寄存器相关的计数器还没有开始计数),以及CNT-1和CNT_2从表1内的值初始化。对于指令512的源操作数,重命名器122在重命名映射表600内查找相应的寄存器ID并且将指令512的每一个源操作数的相应的avail、inRF、active、BP、CNT一1和CNT_2值附加上。在实施例中,重命名器122同样将相应的CBID附加于指令512。如果指令没有源操作数(例如具有即时值(immediatevalue)的存储指令),那么没有位被附加于指令512。图7是说明根据本发明实施例的指令分派緩沖区(IDB)700的示意图。IDB700是指令分派器124的部分。在本实施例中,IDB700包括指令的第一操作数的inRFl、availl、activel、CNT1和BP1字段以及指令的第二操作数的inRF2、avail2、active2、CNT2和BP2字段,指令标识字段(IID)以及唤醒使能(wakeup—en)字段。IDB700可以包括J个条目702a到702j(702a-j)。在实施例中,IDB700同时保持6个指令并且J是6。指令通过IID来标识。每一个指令都有唯一的IID,该IID在例如级D1(在图5中)内被分配。IDB700同样可以包括每一个指令的源和目的操作数的CBID的字段(未示出)。IDB700内的每一个指令被分配条目702a-j中的一个。IDB700内的条目702a-j中的每一个都有相应的计数器704a-j和组合逻辑70"小计数器7(Ma-j和組合逻辑706a-j可以是指令分派器124或者指令分派控制逻辑(未示出)的部分。1ID是5位,inRFl、inRF2、availl、avail2、BP1、BP2、activel和active2中的每一个1位,CNT1、CNT2和wakeup_en中的每一个2位。如这里描述的相关领域的净支术人员应当理解的,在IDB700内的每一个字段的位数是任意的并且取决于实现方式。IDB700可以包括其它字段(未示出)。当指令进入级D3(图5中所示)时,ID124在IDB700存储器储指令相应的操作数可用性位。基于IID组织IDB700。ID124基于指令是否是生产者以及指令是否是在那时操作数的最新的生产者而将wakeup_en值分配给IDB700内的每一个指令条目。指令可以不是生产者或者指令可以不是它修改的操作数的最新的生产者。wakeup_en的示例在下面描述。IDB700存储指令,该指令正在等待由分派控制器130发送。IDB700内的指令被存储直到它们的操作数可用并且直到分派控制器130调度它们以发送。下面的表2基于avail、inRF和BP位说明了操作数的示例状态。<table>tableseeoriginaldocumentpage27</column></row><table>表2在处理器200的情况下,存在2个IDB,每一个分别在ID124a和ID124b内。在处理器200内,一个IDB(未示出)与AGEN126a流水线相关而另一个IDB(未示出)与ALU126b流水线相关。在IDB700内等待被发送的指令在每一个时针周期都被测试操作数可用性。在实施例中,使用公式(2)的inRF、avail和BP位的逻辑组合决定了操作数是否可用并且指令是否准备好被发送。实现公式(2)以测试操作数和分派准备就绪的示例组合逻辑在图8中说明。IDB700内最老的指令由分派控制器130从IDB700内所有具有可用的操作数的指令中选出来。或者,分派控制器130可以基于不同的方案(scheme)来调度指令发送。在实施例中,分派控制器130是ID124的部分。一旦指令发送到执行级306内,该指令就唤醒IDB700、重命名映射表600和级D2(图5中所示)内的它的消费者指令的计数器。这通过广播所发送的指令的相应CBID和wakeup_en位来完成。如果在各自的流水线级内,消费者指令的操作数的相应CBID与广播的CBID相匹配,那么作为广播的结果,级Dl内的重命名器122、级D2内的选择控制逻辑510和级D3内的IDB700将active位设置为1。当active被置为1时,相应的计数器将开始计数并且当它到达零时,相应的BP位被置为1,并且操作数可以旁路。在写寄存器文件级308内,生产者指令的目的操作数数据从CBID128被写入寄存器文件106。写寄存器文件308导致所写的寄存器的CBID和寄存器ID的广播从而改变在级Dl内的IDB700、级D2内的重命名映射表600和级D3内的相应条目的操作数可用性位。如果在源操作数CBID与被写到寄存器文件106的寄存器的广播CBID之间存在匹配,那么因为操作数现在在寄存器文件106内是可用的,IDB700将相应的源操作数的inRF位设置为1。在实施例中,IDB700、重命名器124和选择控制逻辑510将在它们各自的流水线级内的源操作数CBID与指令写完成緩沖区128时广播的CBID进行比较。如果在源操作数CBID与广播的CBID之间存在匹配,那么因为操作数现在是预知可用的(即使它们还没有被写到寄存器文件106),IDB700、重命名器124和选择控制逻辑510将相应源操作数的inRF和avail位设置为1。对于具有长的完成等待时间的生产者指令(诸如乘法指令),重命名器122在重命名映射表600内将长等待时间指令要修改的操作数的avail位设置为0。只有当由长等待时间生产者修改的操作数在处理器IOO内是预知可用的以及长等待时间生产者的广播指示了操作数的预知可用性时,avail位在IDB700、重命名映射表600内以及在级D2内才被设置为1。存储在IDB700内的用于每一个指令的wakeup_en值都通过ID124附加于指令。当分派控制器130将指令从IDB700发送时,wakeup一en位与该指令一起被传送。例如,在图5中,指令512,皮附加有wakeup_en值并且通过寄存器508被传送到级D4内。wakeup_en,连同相应的CBID—起,由进入指令执行级306的生产者指令广播。wakeup_en的广播将IDB700、重命名映射表600内以及级D2内的相应的源操作数的active位设置为1。才艮据wakeup—en的值,active位可以根本不被设置或者active位的i殳置可以被延迟。例如,如果wakeup—en是00,那么计数器不起动。如果wakeup—en是01,在相同周期内active位被设置为1并且计数器净皮启动。如果wakeup一en是10那么计数器在一预定时间段之后被启动并且在该预定时间段(例如两个时钟周期)之后将active位同样i殳置为1。如果wakeup—en是11,则计数器在另一预定时间段之后被启动并且在该预定时间段(例如四个时钟周期)之后将active位设置为1。active位设置为1的延迟将相应计数器的触发延迟且因此延迟了消费者指令的发送。在实施例中,ID124基于生产者指令的类型查找wakeup_en值的表,如下面表3中的一样<table>tableseeoriginaldocumentpage30</column></row><table>表3指令的wake叩一en值可以在它通过ID124发送后改变。例如,如果生产者指令是无效的,则它的wakeup一en可以由例如流水线控制逻辑120设置为00。在实施例中,长等待时间指令广播wakeup一en位的值以延迟相应的消费者源操作数的active位的设置。典型地,长等待时间指4^一旦发送到执行级306内就广播它的wakeup—en值和相应的CBID。在不可预测的生产者指令的情况下(例如具有高速緩存失败的加载指令),相应的CBID广播导致在IDB700、重命名映射表600和级D2内的相应消费者源操作数的avail位被设置为0以指示加栽已经失败并且操作数值是不可用的。IDB700同样由于指令取消(kill)而更新。例如如果分支预测错误或者发生异常时,指令取消可以发生。在多线程的情况下,指令取消使指令在该线程内无效。对于非多线程的情况,IDB700内的所有条目在流水线刷新(flush)时被移除并且重命名映射表600被复位。在多线程的情况下,某些线程可以被取消并且它们在IDB700内相应的条目和相应的重命名映射表被复位。图8是说明根据本发明实施例的电路800的示意图。电路800是组合逻辑706的示例实现。电路800用于测试指令是否准备好通过ID124发送。电路800可以用于实现公式2。电路800包括用于确定指令的源操作数是否可用的电路802和804。电路802和804中的每一个都可以用于实现〃^式1。电路802包括或门806和与门808。或门806从IDB700接收指令的第一源操作数的inRFl和BP1的输入。或门806的结果作为输入被供给到与门808。与门808同样从IDB700接收availl作为输入。与门808的输出816指示指令的第一源操作数的可用性。在示例中,如果输出816是0,则它指示该第一源操作数是不可用的;而如果输出816是1,则它指示该第一源操作数是可用的。与电路802类似,电路804包括或门810和与门812。或门810从IDB700接收指令的第二源操作数的inRF2和BP2的输入。或门810的结果作为输入被供给与门812。与门812同样从IDB700接收avail2作为输入。与门812的输出820指示指令的第二源操作数的可用性。在示例中,如果输出820是0,则它指示该第二源操作数是不可用的;而如果输出820是1,则它指示该第二源操作数是可用的。电路802和804各自的输出816和820作为输入4皮供给与门814。与门814的输出822指示指令是否准备好被发送。图9说明了根据本发明实施例的用于控制消费者指令的active和BP位的状态机900。状态机900可以是ID124的部分并且净皮复制用于IDB700内的每一个条目。状态机900同样可以是重命名器700和选择控制逻辑510的部分。状态机900包括三个状态902、904和906。在状态902中,当start(起动标记)为假(false)时active为0且BP为0。Start是基于wakeup_en值的标^己。作为默iMistart为假并且是取决于生产者指令的wakeup—en广播的。例如,如果生产者广播wakeup一en为00,贝寸start保持为假。如果广播wakeup—en为01,则在相同时钟周期内start被设置为真(true)。如果wakeup—en为10,则在收到该广播之后2个时钟周期start被设置为真。如果wakeup—en为11,则在收到该广播之后四个时钟周期start被i殳置为真。周期数和示例wakeup_en值是任意的并且可以根据实现方式而改变。当start被设为真时,控制转移到状态卯4。在状态904中,相应的源操作数的active位被设置为1并且相应的计数器被触发。该计数器每一个周期都减小相应的计数值(CNT)。下面参考图IO描述了示例计数器。当CNT大于0时控制保持在状态904,在状态904中旁路使能位BP同样为0。当CNT为0时,控制转移到状态906。在状态906中,因为CNT为0,所以BP被设为1并且相应的消费者指令可以被发送使得在执行之前从生产者指令接收到旁路的操作数值。控制保持在状态卯6直到为了下一个指令它被复位回到状态902。状态机900可以在硬件、软件和固件或者它们的任何组合中实现。图10是说明根据本发明实施例的计数器1000的示例实施例的示意图。计数器1000可以被用在重命名器600、IDB700和选择控制逻辑510中以在收到来自相应的生产者指令的广播时对消费者源操作数的计数值进行向下计数。计数器1000由重命名器600或者在级D2内由控制逻辑510进行初始化以具有初始的计数值。计数器1000包括四个移位寄存器1002a-d。每一个移位寄存器1002都包括置位输入(S)、复位输入(R)、时钟输入(CLK)、数据输入(IN)和数据输出(Q)。在本实施例中,每一个移位寄存器IOOO都接收相同的时钟信号CLK_IN1006。每一个移位寄存器都可以通过数据输入(IN)或者通过置位和复位输入进行初始化以具有初始的计数值。一旦计数器1000被触发它就通过每个周期向右移动一位来减小计数值。在实施例中,当最低有效位的移位寄存器1002d收到1并且移位寄存器1002a-c是0时,相应的BP位被设为1。在这里提出的实施例中,示例指令有两个源操作数和一个目的操作数。在其它实施例中,指令有一个或多个源操作数和多个目的操作数。操作数可用性位avail、inRF、active、BP和计数器值也4皮称为局部的或者分布式记分板,这是因为它们被附加于指令并且被传送经过处理器IOO的多个流水线级。虽然为了简化说明而没有示出,但是应当理解源操作数和目的操作数的CBID、HD和寄存器ID同样可以被传送经过多个流水线级。在实施例中,生产者指令的广播可以包括指令的CBID以及所修改的操作数的CBID。在这里提出的示例中,计数值是2位以限制计数器和寄存器的大小。应当理解计数值的大小是任意的并且取决于实现方式。虽然前面完整描述了本发明的示例性实施例,但是应当明白可以作出并且使用各种修改、替代方案和等效物。同样应当理解这里所提供的本发明的详细描述(不是
发明内容和摘要部分),希望用于解释权利要求。
发明内容和摘要部分可以陈述如发明人所预期的一个或多个但是不是所有的本发明的示例性实施例。例如,除了使用硬件的实现(例如耦连到中央处理器("CPU")或位于其中、微处理器、微控制器、数字信号处理器、处理器核、片上系统("soc")、或者任何其它可编程的或电子的器件)之外,各实施方式同样可以用例如配置为存储软件的计算机可用的(例如,可读的)介质内设置的软件(例如,计算机可读代码、程序代;碼、指令和/或以诸如源、对象或机器语言的任何形式设置的数据)来实现。这样的软件可以实现例如这里所描述的装置和方法的功能、制造、建模、仿真、描述、和/或测试。例如,这可以通过使用通用编程语言(例如,C、C++)、GDSII数据库、包括VerilogHDL、VHDL等的硬件描述语言(HDL)、或者其它可用的程序、数据库、和/或电路(即示意图)捕捉工具(capturetool)来实现。这样的软件可以被i殳置在包括半导体、磁盘、光盘(例如,CD-ROM、DVD-ROM等)的任何已知的计算机可用的介质内并且作为在计算机可用的(例如,可读的)传输介质(例如,载波或者包括基于数字的、光学的、或模拟的介质的任何其它的介质)中实现的计算机数据信号。同样的,该软件可以通过包括互联网和内联网的通信网络来传输。应当理解,这里所描述的装置和方法的实施例可以被包括在诸如微处理器核的半导体知识产权核内(例如,用HDL实现)并且被转换为集成电路产品中的硬件。另外,这里所描迷的装置和方法可以被实现为硬件和软件的组合。因此,本发明不应该被任何上述的示例性实施例所限制,而应该仅根据下面的权利要求和它们的等效物来限定。权利要求1.一种处理器的指令分派单元,包括控制逻辑,将多个操作数可用性位附加于指令;指令缓冲区,存储指令和多个操作数可用性位;以及指令分派器,至少部分基于存储在该指令缓冲区内的多个操作数可用性位而确定指令何时被发送到处理器的执行单元。2.权利要求l的指令分派单元,其中操作数可用性位与指令一同被传送经过多个流水线级。3.权利要求l的指令分派单元,其中多个操作数可用性位包括计数器值。4.权利要求l的指令分派单元,其中多个操作数可用性位包括用于触发计数器的值。5.权利要求l的指令分派单元,其中多个操作数可用性位包括用于指示在寄存器内指令的源操作数的可用性的值。6.权利要求5的指令分派单元,其中寄存器是通用寄存器、累加器寄存器和协处理器寄存器中的一个。7.权利要求l的指令分派单元,其中多个操作数可用性位包括用于指示在完成緩冲区内指令的源操作数的预知可用性的值。8.权利要求l的指令分派单元,其中控制逻辑包括重命名映射表。9.一种处理器核,包括指令分派单元,其包括控制逻辑,将多个操作数可用性位附加于指令;指令緩冲区,存储指令和多个操作数可用性位;以及指令分派器,至少部分基于存储在该指令緩冲区内的多个操作数可用性位而确定指令何时被发送到处理器的执行单元。10.权利要求9的处理器核,其中操作数可用性位与指令一同被传送经过多个流水线级。11.权利要求9的处理器核,其中多个操作数可用性位包括计数器值。12.权利要求9的处理器核,其中多个操作数可用性位包括用于触发计数器的值。13.权利要求9的处理器核,其中多个操作数可用性位包括用于指示在寄存器内指令的源操作数的可用性的值。14.权利要求13的处理器核,其中寄存器是通用寄存器、累加器寄存器和协处理器寄存器中的一个。15.权利要求9的处理器核,其中多个操作数可用性位包括用于指示在完成緩冲区内指令的源操作数的预知可用性的值。16.权利要求9的处理器核,其中控制逻辑包括重命名映射表。17.—种计算机可读存储介质,包括用软件实现的具有乱序流水线的处理器核,该处理器核包括指令分派单元,其包括控制逻辑,将多个操作数可用性位附加于指令;指令緩沖区,存储指令和多个操作数可用性位;以及指令分派器,至少部分基于存储在该指令緩沖区内的多个操作数可用性位而确定指令何时被发送到处理器的执行单元。18.权利要求17的计算机可读存储介质,其'中操作数可用性位与指令一同被传送经过多个流水线级。19.权利要求17的计算机可读存储介质,其中多个操作数可用性位包括计数器值。20.权利要求17的计算机可读存储介质,其中多个操作数可用性位包括用于触发计数器的值。21.权利要求17的计算机可读存储介质,其中多个操作数可用性位包括用于指示在寄存器内指令的源操作数的可用性的值。22.权利要求21的计算机可读存储介质,其中寄存器是通用寄存器、累加器寄存器和协处理器寄存器中的一个。23.权利要求17的计算机可读存储介质,其中多个操作数可用性位包括用于指示在完成緩冲区内的指令的源操作数的预知可用性的值。24,权利要求17的计算机可读存储介质,其中控制逻辑包括重命名映射表。25.权利要求17的计算机可读存储介质,其中处理器核用》更件描述语言软件实现。26.权利要求17的计算机可读存储介质,其中该处理器核用Verilog硬件描述语言软件实现。27.权利要求17的计算机可读存储介质,其中该处理器核用VHDL硬件描述语言软件实现。全文摘要一种用于乱序处理器流水线中的分布式记分板调度的处理器核和方法。在实施例中,控制逻辑将操作数可用性位附加于每一个指令。所附加的操作数可用性位形成每一个指令的一个分布式记分板。所附加的操作数可用性位与该指令一同被传送经过多个处理器流水线级。指令分派缓冲区存储指令和操作数可用性位。分派控制器确定指令何时将被发送。该确定至少部分基于存储在指令分派缓冲区内的操作数可用性位。文档编号G06F9/38GK101395573SQ200780007020公开日2009年3月25日申请日期2007年2月12日优先权日2006年2月28日发明者江醒玉申请人:Mips技术公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1