发明背景
参照图1,表示早期微处理器100的四级单完成指令流水线的框图。流水线级包括:1)取;2)算术运算(ALU);3)存储器存取;以及4)回写。在操作中,微处理器在周期1中取指令用于执行,在周期2中执行该指令,在周期3中执行对存储器的读或写,以及在周期4将ALU运算(从周期2)或者存储器读取(从周期3)的结果写入其寄存器文件。如果每个流水线级需要一个处理器时钟来完成其功能,则在四级流水线中,指令需要四个时钟来完成执行。在本例中,流水线的执行速率为每四个时钟周期一个指令。
微处理器设计领域的技术人员会知道,图1的单完成指令流水线的问题之一在于,在任何给定时钟周期,只有流水线级之一被用于指令执行。例如,在时钟周期1,取级正忙于取指令用于执行,但ALU、存储器和写级则基本上空闲。空闲处理级被认为是低效的,因此在处理系统中是不希望的。
对上述空闲的矫正如图2所示,下面针对这一方面进行说明。图2包括与图1所示相似的四级流水线微处理器200。但是,在微处理器200中,不是在可以取下一条指令之前等待一条指令的完成(四个时钟周期),而是每个时钟周期取一条新指令。在此四级流水线中,四条指令同时处于执行过程中,流水线的每级一个。虽然第一指令完成仍然需要四个时钟周期,但此后每个时钟周期均完成一条新指令。因此,以上图1所示的空闲已经被消除,以及整体处理效率得到提高。
但是,在图2的并行流水线中,当某条指令在它可开始之前依靠前一条指令的完成或解决时,产生一个问题。这个问题如图3所示,下面针对这个方面进行说明。
图3说明如图2所示的并行流水线微处理器300。但是,在此图中,指令2在可开始之前依靠指令1的解决。例如,假定指令1为LOAD REG1,MEM的形式。即,指令1使得来自存储单元MEM的值从存储器中取出,并存储在微处理器300的寄存器REG1中。这时,假定指令2为ADD REG1,2的形式。即,指令2将REG1寄存器的内容与数值2相加,并将结果存储在REG1寄存器中。在四级流水线300中,指令1在时钟周期3结束之前未取回存储单元MEM的内容。而且,存储单元MEM的取回内容在时钟周期4结束之前没有存储到寄存器REG1。如果允许指令2在时钟周期3进入流水线的ALU级,则要被加入值2的REG1寄存器的内容尚未采用来自MEM的内容进行更新。因此,加法的结果或者是未知的或者完全不正确。在本例中,确保采用寄存器REG1的正确内容执行指令2的唯一方法是将指令2的执行保持或停止至少两个时钟周期。
图3中所示的只是称作流水线冒险的情况的一个实例。一般来说,有两种流水线冒险:1)执行冒险;以及2)指令冒险。执行冒险是执行一条指令造成的并通过执行另一条指令所看到的冒险,如图3所示。指令冒险是执行一条指令造成的并通过另一条指令的取指令所看到的冒险。例如,第一指令可能更新TLB表中的TLB条目,以及第二指令将采用更新的TLB条目来取指令。如果第二指令试图在更新之前从TLB条目中取指令,则会提取不正确的指令。在任一种情况下,为了确保所有指令在流水线微处理器中正确执行,必须保证依靠前一条指令的解决的指令至少在它所依靠的指令完成之前被停止或延迟。用来确保相关指令的正确执行的方法称作冒险保护或冒险清除。
冒险保护通常以硬件或者以软件方式执行。当冒险保护是以硬件方式提供时,微处理器的一部分专门用于跟踪要执行的每条指令,以便检测指令相关性。当检测到指令相关性时,硬件对相关指令产生互锁,从而停止相关指令,直到它所依靠的指令完成执行为止。设计微处理器来结合硬件冒险保护的一个益处在于,使软件程序员免于与指令执行相关联的错综复杂性。也就是说,程序员不必担心在开始第二相关指令之前让第一指令得到解决需要多少级。她/他可以只按照执行所需的顺序编写指令,并且相信微处理器中的冒险硬件将确保正确执行。以硬件方式提供冒险保护的一个不利之处在于,这种硬件对微处理器增加了大量复杂度,并且影响微处理器的设计成本和最终成本。另外,在冒险硬件中必须考虑体系结构中影响执行顺序、流水线中的级数或执行定时的设计变化,从而使冒险硬件中的设计变化是必需的。对于许多类型的微处理器,与通过硬件提供冒险保护相关的附加复杂度被认为是不适当的。对于这些微处理器,冒险保护通常经由软件提供。
软件冒险保护将防止冒险的负担放到软件程序员或者软件程序员所用的编译程序的设计人员身上。为了说明软件程序员如何解决图3所示的冒险,考虑以下程序:
LOAD REG1,MEM
NOP
NOP
ADD REG1,2
了解微处理器300的流水线结构的程序员理解,指令2依靠指令1的解决,以及在指令1与指令2之间要解决此相关性,需要两个附加的时钟周期。因此,她/他将两个NOP(空操作)指令插入指令1与指令2之间。或者,如果程序员采用专门为微处理器300设计的编译程序,则她/他可相信编译程序会检测指令1与指令2之间的相关性,以及会在这两条指令之间插入必要数量的NOP指令。从微处理器300的角度来看,仅仅是每个时钟周期取一条指令,并将所取指令沿流水线传递下去以便执行。微处理器300不需要任何附加硬件来解决冒险,但仍然防止了冒险。
对于软件冒险清除的一个问题在于,它将了解特定微处理器实现中指令执行的细微差别的负担放到程序员或者放到微处理器的编译程序的设计人员身上。虽然这种负担在现代微处理器领域内普遍存在,但仍然是一个明显的问题。程序员不仅必须了解她/他正在为之编码的处理器的实现,她/他还必须了解多少延迟与其它指令所依靠的每个指令关联。在深层流水线微处理器(12级或更多级)中,程序员必须在相关指令之间插入1至10个NOP,这取决于相关指令在程序中分隔的距离,以及取决于第一指令在它被解决之前在流水线中必须继续进行多远。为了对深层流水线微处理器正确编码,程序员必须非常精通处理器的实现冒险。
对于采用软件冒险清除的另一个问题在于,一旦对微处理器开发了程序,该程序未经大量重新编写便在以后数代微处理器上工作是不可能的。例如,如果微处理器从具有五级流水线发展到具有十二级流水线,则用于五级流水线的任何冒险清除方法将在十二级流水线中正确工作是不可能的。即使五级和十二级流水线的软件体系结构(即指令)相同,情况也是这样。
本发明的发明人非常清楚,需要一种冒险清除机制,它可由程序员或编译程序的设计人员使用,可在多代微处理器体系结构上实现,消除了对于数代处理器之间重新编写冒险清除代码的需要,以及减轻了程序员理解特定微处理器冒险的细微差别的负担。
还需要一种方法及设备,它允许程序员指定应当清除冒险的时间,而不考虑冒险与相关指令之间的级数。
还需要一种用于冒险清除的方法及设备,它可与硬件冒险跟踪结合使用。
概述
本发明提供用于采用跳转操作覆盖冒险清除的方法及设备。
在一个方面,本发明提供一种流水线微处理器,用于执行与执行跳转结合来清除指令冒险的指令。流水线微处理器包括发出控制以及具有冒险障碍跟踪逻辑的跳转。发出控制发出由流水线微处理器执行的指令,并且具有在接收到停止指示信号时在n个周期停止发出指令的能力。具有冒险障碍跟踪逻辑的跳转耦合到发出控制,以及检测何时将执行与执行跳转结合来清除指令冒险的指令。当情况是这样时,它向发出控制提供停止指示信号。
在另一个方面,本发明提供一种具有冒险清除逻辑的流水线微处理器。流水线微处理器包括转移预测逻辑以及具有冒险障碍跟踪逻辑的跳转。转移预测逻辑预测使流水线微处理器在跳转指令完成执行之前跳转到预测目标地址的转移目标地址。具有冒险障碍跟踪逻辑的跳转耦合到转移预测逻辑,以及检测跳转指令表明要清除冒险的时间。当跳转指令表明要清除冒险时,跟踪逻辑发信号通知转移预测逻辑禁用跳转指令的转移预测。
在另一个方面,以上两种设备还包括状态变化跟踪逻辑,以便确定产生指令冒险的指令是否正在流水线微处理器中执行。如果没有任何产生指令冒险的指令正执行,则冒险跟踪逻辑的作用被取消。
在另一个方面,本发明提供一种在流水线微处理器上执行的具有冒险障碍指令的跳转。具有冒险障碍指令的跳转包括操作码字段、寄存器字段以及冒险障碍提示字段。操作码字段指定到目标地址的跳转操作。寄存器字段指定包含用来确定目标地址的值的寄存器。冒险障碍提示字段指明作为跳转指令执行的组成部分,指令冒险将被清除。
在又一个方面,本发明提供一种与执行跳转操作结合来清除流水线微处理器中的指令冒险的方法。该方法包括:确定是否要执行跳转操作;如果是这样,则确定跳转操作是否指定是否要清除指令冒险;以及如果是这样,则作为跳转操作的组成部分清除指令冒险。该方法可包括检测是否造成指令冒险的任何指令正在流水线微处理器中执行,如果不是,则取消清除操作。
在另一个方面,本发明提供一种与计算装置配合使用的计算机程序产品。计算机程序产品包括计算机可用媒体,其中具有包含在媒体中的计算机可读程序代码,使得提供具有冒险清除机制的流水线微处理器。计算机可读程序代码包括:第一程序代码,提供用于发出由流水线微处理器执行的指令的发出控制逻辑,发出控制逻辑在接收到停止指示信号时在n个周期停止发出指令;第二程序代码,提供具有冒险障碍跟踪逻辑的跳转,该跳转耦合到发出控制,用于检测何时要执行与执行跳转结合来清除指令冒险的指令,以及在这时,用于向发出控制提供停止指示信号。
在又一个方面,本发明提供一种包含在传输媒体中的计算机数据信号,其中包括计算机可读程序代码,用于提供具有冒险清除逻辑的流水线微处理器。程序代码包括:第一程序代码,用于提供预测目标地址以及在跳转指令完成执行之前使流水线微处理器跳转到预测目标地址的转移预测逻辑;第二程序代码,用于提供具有冒险障碍跟踪逻辑的跳转,该跳转耦合到转移预测逻辑,用于检测跳转指令表明要清除冒险的时间,以及当跳转指令表明要清除冒险时,用于发信号通知转移预测逻辑禁用跳转指令的转移预测。
通过阅读说明及附图的其余部分,本发明的其它特征和优点将变得非常明显。
详细说明
虽然以下所述的发明在许多不同的流水线微处理器中得到应用,但为了更好地理解本概念,将以它在MIPS32体系结构(MIPSTechnologies,Inc.of Mountain View,CA)中实现来具体描述。更具体来说,本发明将明确的冒险清除指令加入MIPS32体系结构。冒险清除指令覆盖在现有调用和返回指令之上,同时具体指明应当清除冒险的时间。微处理器中的执行逻辑检测调用和返回涉及到冒险的时间,并在注意到这种情况时采取动作以有效地清除冒险。作为处理器的体系结构的组成部分的指令在多代体系结构中实行冒险清除,而不需要程序员理解处理器对于冒险的细微差别,以及不需要插入预定数量的NOP。
在提供新的冒险清除指令之前,首先提供对于MIPS32体系结构中出现的冒险类型的概述。
执行冒险
执行冒险是执行一条指令造成的并通过另一条指令的执行所看到的那些冒险。图4提供MIPS32体系结构中的执行冒险的列表。“生产商”是程序中的一条指令,它在执行时,对以下指令-“消费者”造成冒险。关于所列出的每个指令的完整描述,读者可参照从www.mips.com可获取的“MIPS32 Architecture for ProgrammersVolume II:The MIPS32 Instruction Set”。本领域的技术人员会理解,大部分执行冒险是在进行至/自协处理器0的移动时造成的(MIPS处理器支持虚拟存储系统的部分处理异常情况等)。
指令冒险
指令冒险是执行一条指令造成的并通过另一条指令的取指令所看到的冒险。图5提供MIPS32体系结构中的指令冒险的列表。这些指令的描述也可见于“MIPS32 Architecture for Programmers Volume II:The MIPS32 Instruction Set”。
冒险障碍跳转指令
在MIPS32体系结构微处理器中,一直要求程序员在生产商指令与消费者指令之间插入例如图4和图5中列出的那些NOP(SSNOP)指令,以便克服这些指令之间的冒险。另外,如以上“背景”中所述,所需的NOP的数量取决于微处理器中的级数、“生产商”与“消费者”之间的间隔、以及其中解决“生产商”指令的级。
下面参照图6,引入第一新指令JALR.HB 600,它采用跳转指令覆盖冒险清除指示符。本领域的技术人员会理解,为了本发明,转移和跳转在这种指令的含义方面是等效的。现在描述这个新32位指令。
采用前一个JALR指令的提示字段的位10对JALR.HB指令编码。选择这种编码以便与现有MIPS实现兼容,包括许多早于MIPS32体系结构的实现。JALR.HB指令的目的是执行对寄存器中的指令地址的过程调用,以及作为过程调用的组成部分清除所有执行和指令冒险。指令的格式为JALR.HBrs(暗含rd=31),或者JALR.HBrd,rs。当这个指令执行时,返回地址(return_addr)存储在通用寄存器rd中,以及rs寄存器中指定的值存储到程序计数器(PC)中。在MIPS32体系结构中,返回地址为紧接JALR.HB指令的第二指令的地址。另外,对于比特位置10中的“1”值,JALR.HB指令还清除所有执行和指令冒险。
更具体来说,JALR.HB指令实现一种软件障碍,它解决了协处理器0状态变化造成的所有执行和指令冒险。从JALR.HB指令跳转到的目标地址处取指令和指令解码开始,看到这种障碍的作用。
JALR.HB指令以及它对冒险清除的作用可通过许多方式来实现。以下论述提供对本发明的两个实施例的描述。在一个实施例中,处理器在看到JALR.HB指令时,在n个周期停止发出进一步的指令,直到所有先前协处理器0指令已经完成执行,包括影响紧接JALR.HB之后的指令的协处理器0状态的更新。处理器被停止的周期数取决于结合了本发明的流水线的长度。在第二实施例中,冒险指示符用来暂时禁用转移预测机制、取指令等,否则会改变程序顺序执行。也就是说,冒险指示符使处理器先行放弃从与跳转关联的预测目标地址取指令。相反,处理器继续它的取指令,最终在JALR.HB指令完成执行时冲洗流水线。
现在参照图7,表示结合了冒险清除发明的各方面的流水线微处理器700的框图。处理器700包括N深度流水线,其中包括:取级702,用于取指令;解码级704,用于对所取指令解码;ALU级706,用于执行逻辑和算术运算;以及回写级708,用于把结果写入存储器或者写入处理器700中的寄存器。本领域的技术人员会理解,可存在其它级,它们在取级702之前,或者分别在取、解码或ALU级702、704、706之后。处理器700中所示的各级只是表示现代深层流水线微处理器中的一些级,因为它们提供了更好地理解本发明的上下文。
在一个实施例中,冒险清除逻辑710设置在处理器700的取级702内。其它实施例可能将冒险清除逻辑710设置在处理器700的其它级,例如在取级702之后。冒险清除逻辑710包括:具有冒险障碍跟踪逻辑的跳转712;状态变化跟踪逻辑714;以及发出控制716。冒险清除逻辑710的操作参照以下指令序列、尤其是该序列的最后两个指令来描述:
操作码 | 操作数 | 注释 |
mfc0 | vo,C0_EntryHi | 读取当前ASID |
li | v1,-M_EntryHiASID | 获取字段的负掩码 |
and | vo,vo,v1 | 清除当前ASID值 |
or | vo,vo,a0 | 新ASID值中的OR |
mtc0 | vo,C0_EntryHi | 用新ASID改写EntryHi |
jalr.hb | a1 | 调用例程,清除冒险 |
nop | | |
上述序列用来修改协处理器0中的ASID,然后调用已建立新映射的例程。新ASID存储在寄存器a0中,并用于对要调用的例程寻址。
在新ASID值替换现有ASID值之后,指令MTC0被提取到处理器700的取级702。MTC0指令将ASID的新值移入协处理器0寄存器。当MTC0指令在取级702中时,状态变化跟踪逻辑714检测MTC0指令,以及注意到,这个指令属于将通过会对消费指令造成冒险的方式改变处理器700的状态的类型。级变化跟踪逻辑714理解让MTC0指令完成执行需要多少周期,并监测后续时钟周期以“跟踪”MTC0指令,直到它可将该指令标记为完成为止。本领域的技术人员会理解,许多备选方案可用来通过处理器700的N级流水线检测及跟踪生产商“类型”指令。
在第二时钟周期中,指令MTC0进入流水线中的下一级,以及取指令JALR.HB。这时,具有冒险障碍跟踪逻辑的跳转712检测这个指令。具有冒险障碍跟踪逻辑的跳转耦合到状态变化跟踪逻辑,以便确定这时是否检测到JALR.HB指令;将会影响处理器700的状态的一个或多个指令仍然在流水线中。如果是这样,则具有冒险障碍跟踪逻辑的跳转712(或者状态变化跟踪逻辑714)使发出控制逻辑716停止JALR.HB指令,直到改变处理器700的状态的先前指令已经完成为止。当这些指令完成时,发出控制716释放JALR.HB指令,并允许它与后续指令一起沿流水线继续进行。如果具有冒险障碍跟踪逻辑的跳转712发信号通知发出控制逻辑716,则通过利用信号线718向所述发出控制提供停止指示信号来进行。发出控制逻辑716则在n个周期停止发出JALR.HB指令。如果状态变化跟踪逻辑714发信号通知发出控制716,则它在信号线720上进行。
在一个实施例中,发出控制716在接收到停止指示信号时,在n个周期自动停止JALR.HB指令。在一个备选实施例中,发出控制716在接收到停止指示信号718以及通过信号线720来自状态变化跟踪逻辑的信号时,只停止JALR.HB指令。这样,当状态变化跟踪逻辑714确定已经清除所有冒险时,它停止向发出控制716发信号通知,从而允许JALR.HB指令继续进行。在又一个实施例中,当已经清除所有冒险创建指令时,来自状态变化跟踪逻辑的信号用来禁用来自冒险障碍跟踪逻辑712的停止指示信号的作用。
应当理解,没有JALR.HB指令中的清除任何未解决冒险的指示,则空操作之后的指令、大概是由JALR.HB指令跳转到的序列中的第一指令将会不正确地执行。或者,N个NOP必须设置在MTC0指令与JALR指令之间(或者在新例程的前几个指令空间中),以便确保正确执行。但是,通过采用跳转指令覆盖清除冒险指示符,本发明允许程序员确保冒险被清除,而不需要具体了解处理器700中的流水线级、或者MTC0指令造成的特定冒险。
现在参照图8,表示一个流程图,说明根据本发明清除冒险的方法。流程在框802开始,并进入判定框804。
在判定框804,确定是否要执行跳转指令。如果不是,则流程进入框814,在其中,允许指令沿流水线继续执行。已经执行指令时,流程进入框816。在框816,指令已经完成执行。但是,如果要执行跳转指令,则流程进入判定框806。
在判定框806,确定跳转指令是否包括冒险障碍指示符。如果没有,则流程进入框814,在其中,允许跳转指令沿流水线继续执行,如上所述。但是,如果跳转指令确实包含冒险障碍指示符,则流程进入判定框808。
在判定框808,确定在跳转指令之前的任何冒险产生指令是否仍然在处理器中执行。如果不是,则流程进入框814,其中,允许具有冒险指示符的跳转指令沿流水线继续执行。但是,如果任何冒险产生指令仍然在流水线中执行,则流程进入框810。
在框810,在一个时钟周期停止具有冒险指示符的跳转指令。然后,流程进入判定框812。注意:框810可在与参照以下图9所述的实施例结合使用时禁用转移预测。
在判定框812,确定任何冒险产生指令是否仍然在处理器中执行。如果不是,则流程进入框814,在其中,允许具有冒险指示符的跳转指令沿流水线继续执行。但是,如果任何冒险产生指令仍然在流水线中执行,则流程回到框810。流程在框810与判定框812之间继续进行,直到流水线中的所有冒险产生指令已经完成执行。一旦所有冒险产生指令已经完成执行,则允许具有冒险指示符的跳转指令沿流水线继续进行。
在一个备选实施例中,不是停止具有冒险指示符的跳转指令直到所有冒险产生指令已经完成执行,本发明人认识到,如果它们只允许跳转指令沿流水线继续进行,则当处理器实际上进行该指令所指定的跳转时,作为跳转的组成部分,跳转之后的其它所有级都将被冲洗,并且跳转之后的指令的执行将开始。如果跳转是在流水线的后续级之一中进行,则到它进行时,所有冒险产生指令都将已经完成执行。另外,由于跳转之后的所有指令都因跳转而被冲洗,因此没有任何应当执行的指令会有时间使用不正确状态开始执行。
但是,这种方法存在的一个问题是,在跳转指令实际执行之前的很长时间,大部分现代处理器、尤其是深度流水线微处理器都采用转移预测机制来预测跳转的目标地址以及从预测目标地址提取并执行指令。这种转移预测机制的论述超出了本论述的范围。但是,应当理解,这些机制设计成消除与在新目标地址取指令之前冲洗流水线相关的延迟。但是,如果这些转移预测机制与具有冒险指示符的跳转指令结合使用,则不会出现预期结果(流水线的冲洗)。因此,在具有冒险指示符的跳转指令的执行过程中,本发明的发明人在本发明的跳转指令中采用冒险指示符有效地禁用与预测目标地址相关的取指令。这样一种实施例如图9所示,下面针对这个方面进行说明。
图9表示与参照图7所述相似的流水线微处理器900。相似的数字具有相同参考,百位由9取代。现在采用以上参照图7提供的指令序列来提供对处理器900的操作的描述。
在第一时钟周期中,取MTC0指令。状态变化跟踪逻辑914检测MTC0指令是否属于可能对后续指令产生冒险的类型。
在第二时钟周期中,取JALR.HB指令。具有冒险障碍跟踪逻辑的跳转912把这个指令检测为也希望清除任何先前冒险的跳转指令。如果跳转指令没有表明要清除冒险,则转移预测逻辑916将使处理器900的程序计数器开始从预测目标地址取指令。这样,处理器900的流水线中的跳转指令之后的指令是与预测目标地址关联的新指令流,而不是存储器中按顺序排列在跳转指令之后的指令。如上所述,这通常是有益的。
但是,如果程序员希望确保作为跳转的组成部分清除冒险,则她/他采用具有冒险清除指示符的跳转指令。具有冒险障碍跟踪逻辑的跳转912检测这个需求,以及如果状态变化跟踪逻辑914表明冒险产生指令仍然正在执行,则对当前跳转禁用转移预测逻辑916。然后,允许该跳转沿流水线继续进行,之后跟随当跳转执行时最终将从管道中冲洗出去的指令。另外,如上所述,到跳转最后执行、且流水线被冲洗时,将已经清除MTC0指令造成的所有冒险。
在这一点上,本领域的技术人员应当理解,如参照图7-9所述的本发明不需要采用状态变化跟踪逻辑714、914。相反,具有冒险障碍跟踪的跳转712、912可单独指定N个周期的停止(参照图7),或者可禁用转移预测916(参照图9),而不管先前指令是否造成冒险。也就是说,在没有实现状态变化跟踪逻辑的情况下,具有冒险障碍跟踪逻辑的跳转将使发出控制停止n个周期,或者使转移预测对当前跳转指令禁用,而不考虑冒险当前是否在处理器的流水线中。这样一种实施例将简化本发明的实现,以及不需要与冒险产生指令的跟踪相关的硬件。但是,状态变化跟踪逻辑714、914的应用使本发明优化为仅在冒险产生指令正在执行时才产生作用。否则,冒险障碍指示符仅象没有冒险障碍指示符的跳转指令一样执行。
现在参照图10,表示采用跳转指令覆盖冒险清除的附加指令JR.HB的框图1000。JR.HB指令的形式为JR.HBrs,执行到寄存器rs中指定的指令地址的转移,并清除所有执行和指令冒险。JR.HB指令完全和上述JALR.HB指令一样执行。但是,不是自动指定返回链接地址(如JALR.HB指令中那样),而是为程序员提供了采用另一个JR.HB指令来指定他自己的返回地址的选择。
以上参照图4-10的描述已经说明了备选实施例以及用于采用跳转操作覆盖冒险清除指示符的方法。虽然已经详细描述了本发明及其目的、特征和优点,但本发明还包含其它实施例。除了本发明采用硬件的实现之外,本发明还可通过放置在配置成存储代码的计算机可用(例如可读)媒体中的计算机可读程序代码(例如软件)来实施。代码使本文所公开的本发明的功能、制造、建模、模拟和/或测试得以实现。例如,这可通过采用通用编程语言(如C、C++等)、GDSII、包括VerilogHDL、VHDL、AHDL(Altera硬件描述语言)等硬件描述语言(HDL)、或者本领域可得到的其它数据库、编程和/或电路(即原理图)捕捉工具的形式的计算机可读程序代码来实现。代码可放置在任何已知的计算机可用媒体中,其中包括半导体存储器、磁盘、光盘(例如CD-ROM、DVD-ROM等),以及作为计算机数据信号包含在计算机可用(如可读)传输媒体(例如载波或其它任何媒体,包括基于数字、光或模拟的媒体)中。因此,代码可通过通信网络、包括因特网和内联网传送。应当理解,以上所述的本发明所实现的功能和/或所提供的结构可通过以代码(例如HDL、GDSII等)实施的处理器来表示,以及可传送给作为集成电路制造的一部分的硬件。另外,本发明可作为硬件和代码的组合来实施。
另外,本领域的技术人员会理解,图7-9所示的原理框图虽然表示为耦合到微处理器的取级,但也可共同设置在微处理器的另一级中,或者可被单独设置在不同的处理级。也就是说,转移预测逻辑可位于处理器的取级,而具有冒险障碍跟踪的跳转则可位于处理器的解码级。重要的是,具有冒险障碍跟踪逻辑的跳转能够实现作为跳转操作的组成部分的冒险清除的功能性,如以上所述。
最后,本领域的技术人员应当知道,可以方便地使用所公开的概念及特定实施例作为设计或修改用于实现本发明的相同目的的其它结构的基础,而没有背离所附权利要求定义的本发明的精神和范围。