专利名称::具有推测指令取指的数据处理器及操作方法
技术领域:
:本发明一般性地涉及数字计算系统,更特别涉及具有猜测指令取指能力的数据处理器。分支预测是一种用来改进数据处理器性能的技术,用分支预测技术的数据处理器,每当它们接收一分支指令时总要进行猜测,实行猜测(未决定分支指令),并通过完成指令(决定分支指令)确定猜测是否正确。这种数据处理器猜测是否最终实现分支并转到新的指令地址(不是往下到另一顺序的指令。具有预测分支指令的数据处理器,因为它们形成正确猜测比完成分支指令更快而增加了其性能。这样这些数据处理器所需的仅仅是校正错误猜测。分支预测技术允许数据处理器尽可能快的在取下一个指令或指令组而增加数据处理器性能。因此,数据处理器总有连续指令流在执行。这种策略称“指令预取指”,因为数据处理器在它执行分支指令之前取指令以确定预取指令的地址。在某些数据处理系统中,统一的取指指令,对系统的整个性能可能不利。通常,在数据处理器的内部存储器的高速缓存中不包括预取指指令。在这种情况下,数据处理器必须从外部存储器系统取指。这种操作垄断同外部存储装置相连的总线,同时可使共用外部存储器装置的其它装置实现同系统存储器有关协议(探听操作)相符合的某些作用。另外,数据处理器直到接收居先的不正确指令才能请求其它的、可假定是正确的指令。其优点是只要可能,就使这些操作的次数变为最小。每个猜测的分支指令对所选的指令通道混有不正确的东西,因此可能有不需要的取指,例如有些分支预测方案,预测分支正确率可达90%不正确率为10%。经三次预测仍未决定分支,数据处理器沿正确指令流通道进行取指的机遇只有73%。继续用这例子,已知数据处理器同样猜测第一和第3分支预测,既可通过两个分支指令指示的地址(或者是在两个指令之后形成的顺序地址)预取指令亦可不预取指令,如上所述,若数据处理器不包括由分支指令返回的特殊指令,这两指令中每个都可以使数据处理器经系统总线存取外部存储器系统。其它相同时,宁可垄断系统总线取第一指令而不取第3指令。然而,以前数据处理器没有这种特性。根据本发明公布的具有推测指令取指的数据处理器,它实质上消除了已有的数据处理器缺点。所用具有外部存储系统的数据处理器,具有分支预测单元及与其相结合的指令取指电路。分支预测单元形成取指地址,存储一个表示前面未决定分支指令数目的信号及形成控制信号。在第一种操作方式中,控制信号所对应的第一种逻辑状态和第二种逻辑状态分别表示信号代表数小于等于第一预选择数或大于第一预选择数。在第二种操作方式中,控制信号对应的第一种逻辑状态和第二种逻辑状态分别表示信号代表数小于等于第二预选择数或大于第二预选择数。指令取指电路从外部存储器系统与控制信号的第一状态相对应的取指地址间址取指。用外部存储器系统的数据处理器的操作方法亦被说明,这种方法有在分支预测单元中有如下步,接收分支指令,对应于分支指令预测取指地址,存储未决定的分支指令数并形成控制信号。在第一种操作方式中,控制信号对应的第一种和第二种逻辑状态,分别对应于未决定的分支指令数小于等于第一预选择数及大于第一预选择数,在第二种操作方式中,控制信号对应的第一种和第二种逻辑状态分别对应于未决定的分支指令数小于等于第二预选择数及大于第二预选择数。这种方法还包括在同分支预测单元相联的指令取指电路中,对应于控制信号从外部存储系统中取指令的步骤。通过结合附图的译细说明将会清楚的了解。本发明的特点和优点这些图号对应的部件如下图1根据本发明描绘了数据处理系统的框图结构。图2描绘了在图1中描绘的数据处理器的框图。图3描绘了在图2中描绘的分支单元的方框图。图4描绘了在图2中描绘的指令高速缓存的框图。图5描绘了在图4中描绘的指令高速缓存逻辑单元的状态转换图。图6描绘了在图2中描绘的总线接口单元的框图。图1描绘了根据本发明构成的数据处理系统10的方框图。数据处理系统10由第一数据处理器块12,第二数据处理器块14,主存储器块16,总线仲裁块18和输入输出(以下称I/O)块20经地址总线和数据总线内部相连而成。如上所述第二数据处理块14有外部高速缓存块22(典型的二次或“L2”高速缓冲)。数据处理器12和14预测分支指令,预取通过分支单元28的返回地址所指示的指令,分支单元28以任意次序对应接收到的分支指令及后续无任何分支的指令,形成取指地址。而且,数据处理器12和14根据用户可编程位选择预取指令。每个数据处理器预取指令数取决于特定取指地址形成时有多少未决定的分支指令存在。每个数据处理器因此限制了经地址和数据总线存取主存储器块16的次数,例如当不正确分支猜测有高概率时。本发明形成的数据处理器在单处理器(未示出)和多处理器(MP)数据处理系统(示出)中性能良好,在单处理器环境下,一个数据处理器可以是唯一的主存储器用户。在这种情况下一个不正确取指仅推迟一个处理器取出正确指令,相反,在多处理器环境下,不正确的取指将推迟处理器之一取出正确指令并将阻止其他处理器使用公共总线。根据本发明的数据处理器可以编程使在每种数据处理系统中工作在最佳情况。图1描述的许多功能块在技术上已是熟知的。数据处理块12和14,利用存贮在主存储块16的数据和通过I/O块20接收的数据执行存储在主存储器块16中的指令。I/O块20提供从数据处理系统10到键盘,盘驱动器和电子网络等的接口,总线仲裁器18接收来自数据处理系统10的各块请求,以使数据和地址总线排它性使用,总线仲裁块18根据协议(与本发明无关)受理这些请求。数据处理器块14存储频繁使用的数据在高速缓冲块22中。图2描述了在图1描述的数据处理器12的方框图。数据处理器12和14实质上是相似的。因此,下面优选实施例将详细对数据处理器12来说明,必要时,说明它与数据处理器14的不同。继续看图2,总线接口单元(以后称BIU)23控制在数据处理器12和数据处理系统10的其余部分间的数据流。BIU23连到指令高速缓存24再到数据高速缓冲26。指令高速缓存24提供指令流到分支单元28,再到完成/调度单元30。完成/调度单元30进而把各个指令送到合适的执行单元。数据处理器12有定点执行单元32,装载/存储执行单元34和浮点执行单元36。定点执行单元32和装载/存储执行单元34将其结果读和写到通用目的结构寄存器堆38(标成GPRS以后称GPR堆)和第一更各缓冲器40,浮点执行单元36和装载/存储执行单元34读和写其结果到浮点结构寄存器堆42(标成FPRS以后称FPR堆)和第二更名缓中器44。数据处理器12的操作在技术上是熟知的,它没有用推断指令预取指方法。通常,BIU23同数据处理系统10通信,BIU23将结合图6详述。分支单元18决定在给定某些数据寄存器内容和程序步骤的情况下,什么编程指令序列是合适的。分支单元18结合图3在下面详述。分支单元38首先希望从指令高速缓存24中取指,若所请求的指令没有存在指令高速缓存24中,那么指令高速缓存24将发送一请求到BIU23,从主存16去取请求指令。指令高速缓存24将结合图4和图5在下面详述。完成/调度单元30对不同的执行单元32,34和36发各自的指令。每个执行单元实现一个或多个特殊指令类的指令。每个执行单元的特殊指令类用执行单元的名字表示,如浮点执行单元36执行浮点算术指令。定点执行单元32把操作的结果返回到第一更名缓冲器40,中指定的条目项。当形成结果指令之前的所有指令已经更新了它们的GPR或FDR堆条目时,第一更名缓冲器40用它自已条目周期性地更新GPR堆38的条目。完成/调度单元30通过在完成缓冲器46中保留的所有执行指令表协调这种更新。第一更名缓冲器40和GPR堆38均对定点执行单元32提供操作数,相反,浮点执行单元36将运算结果返回第二更名缓冲器44中指定的条目中。当形成结果的指令之前的所有指令已经更新它们的GPR或FPR堆条目时,第二更名缓中器44周期性用第二更名缓冲器44中条目更新FPP堆42的条目。完成/调度单元30也协调这种更新,第二更名缓冲器44和FPR堆42均对浮点执行单元36提供操作数。装载/存贮单元34读存于GPR堆38,第一更名缓冲器40,FPR堆42或第二更名缓冲器44中的数据并把选定的数据写到数据高速缓存26中。这些数据亦可以通过同本发明无关的数据处理器12的操作特性写到主存储器系统16中。相反,装载/存储单元34读出存于数据高速缓存26的数据并把这些读出数据写到GPR堆38,第一更名缓冲器40,FPR堆42或第二更名缓冲器44。公开的具有推测指令预取指方法的数据处理器12的操作下面,结合图3到图6说明,通常,数据处理器12是精简指令集计算机(“RISC”)。数据处理器12把每个指令断成一系列较小步,其中每步可以同其它指令在时间上重迭执行而得到高性能。这种操作策略称为“流水线技术”。数据处理器12亦可以通过把静态和动态分支预测方法相结合而得到高性能。数据处理器12可以用与用户编程值对应的静态或动态分支预测方式工作。而且,在用静态分支预测方法时。数据处理器12根据可编程位中一位,在分支历史表内更新或不更新每个分支指令的分支状态。在所述的实施例中,每个指令断成5个分离步取指,调度,执行,回写和完成。在指令高速缓存24中存储器管理电路(未示出)在取指阶段时期,按分支单元28标识的存储器地址的起点取出一个或多个指令。完成/调度单元30在确定无不允许的数据从属,并在调度阶段内对指令的结果保存更名缓冲器条目后发送每个指令到相应执行单元。每个执行单元在执行阶段执行程序指令并在回写阶段把结果(如果存在)写入被保留的更名缓冲器条目。最后,完成/调度单元30,在特殊指令之前的每指令已经这样更新结构寄存器信息以后,用存储在更名缓冲器中特殊指令的结果更新结构寄存器信息。通常,每个指令相位取一个机器时钟周期,然而有些指令当其它指令不需要5个阶段时需要多于一个时钟周期去执行。由于完成各种指令的时间有不同,在特殊指令的回写和完成阶段之间也就可以出现延迟。图3描绘了在图2中描绘的分支单元28的方框图、分支单元28形成下个指令地址以从存储器中取指(标记成ADDRESSTOIN-STRUCTIONCACHE24指令高速缓存24地址)并从指令高速缓存24(标记成INSTRUCTIONSFROMINSTRUCTIONCACHE24指令来自指令高速缓存24)接收下个取出的指令。分支单元28也形成控制信号GOTOBUS(到总线)和OVERRIDE(取代),以确定是否数据处理器12存取地址和数据总线,以取未存储在指令缓冲器24中的指令。分支单元28在调度缓冲器48中锁存接收的指令。在描绘实施例中,分支单元28的每个时钟周期接收4个指令处在前一地址(取指地址)上的指令和跟在取指地址后三个地址上居留的3个指令。调度缓冲器48形成控制信号DBEMPTY(DB空)。调度缓冲器48当调度缓冲器48为空时置位DBEMPTY。第一分支检测器50在4个锁存指令的每组内鉴别第一分支指令(如果存在)。第一分支检测器50形成控制信号INCOMINGBRANCH(引入分支)。第一分支检测器50当调度缓冲器48包含一个或多个分支指令时置位IN-COMINGBRANCH信号。锁存于调度缓冲器48中的第一指令地址被传送到分支取指单元52,分支调度/执行单元54及分支完成单元56,分支取指单元52,分支调度/执行单元54及分支完成单元56虽然处在不同的指令相位期,均形成一个地址,据此下一指令将被取出。分支调度/执行单元54也接收第一分支检测器50的输出。这三个单元的操作如下说明,多路开关选择器58(标为MUX)根据地址选择器60选择3个存储器地址之一输出。地址选择器60接收来自分支取指单元52,分支调度/执行单元54和分支完成单元56的控制信号,将其译码确定3个存储地址的那个地址输出。指令取指地址寄存器62(下文标成IFAR)锁存多路开关选择器58的输出,IFAR62形成标识为AD-DRESSTOMEMORY(到存储器的地址)的信号。一旦IFAR62锁存当前取指地址,分支取指单元52就为一特定分支指令计算2个新取指地址。这一计算发生在特定分支指令的取指阶段。由取指地址变址地特定指令在取指阶段并不能被知道。分支取指单元52输出这两个地址之一到多路开关选择器58,当与当前取指地址关联的分支指令被假定为不被接受或“归于失败”而分支指令到下一个顺序指令时,输出第一个地址。当与当前取指地址结合的分支指令被假设已被接受或指令流“跳到”一个新地址时,第二个地址被输出。分支取指单元52有两个内部流水线,每个流水线计算这两个新取指地址之一。第一个分支取指单元流水线通过增加由IFAR62锁存的地址计算顺序地址。在所描述实施例中这个第一分支取指单元流水线将4个指令长度加到IFAR62的内容上去。第二分支取指单元流水线利用IFAR62内容的一部分对被称为分支目标地址高速缓存64(以下称BTAC)的随机存取存储器(RAM)高速缓存的第一块进行变址。在描绘的实施例中,分支取指单元52存贮分支目标地址(取指地址)和与BTAC64中一些最近分支指令的取指地址相联系的分支指令的地址子集。在描绘的实施例中,BTAC64是一个二路相关的高速缓存。BTAC64利用锁存在IFAR62中的一个地址子集对BTAC64中的两个入口进行变址。然后分支取指单元60将变址地址的剩余位同存贮在BTAC64的两个变址项目中的每个里的地址位的子集进行比较。若两个比较中有一个匹配,那么出现一个BTAC“命中”,且分支取指单元52结合匹配的地址位子集输出“取分支”取指地址。若两个比较均不匹配,那么产生一个BTAC“未命中”,且分支取址单元60将已被增加的IFAR2的内容,输出到多路开关选择器58。分支调度/执行单元54当它接收到由IFAR62的内容变址的特定指令并且第一分支检测器50在四个取指指令中标识出第一分支指令时如果有的话立刻计算两个取指地址,分支调度/执行单元54在特定指令的调度阶段为特定分支指令计算两个地址。这两个取指地址相应于“不取分支”和“取分支”条件。分支调度/执行单元54仅将这两个地址之一输出到多路开关选择器58。应当注意。分支取指单元52已经在流水线阶段根据同一分支指令将一新取指地址输出给多路开关选择器58。根据在分支调度/执行单元54或分支完成单元56内同时被执行的分支指令的结果,IFAR62可以用这两单元之一的输出装载。在这种情况下,数据处理器12将在这地址的开始取指令。分支调度/执行单元54亦有两个内部流水线用以计算它的两个取指地址。第一流水线通过逐条增加分支指令地址来计算顺序地址。第一分支检测器50在每一包含4个被取指指令的组里计算第一分支指令地址,如果有的话。第二个分支调度/执行单元流水线根据特定分支指令计算取址地址。例如,这个流水线可以将一嵌入指令的偏移量加到分支指令地址中。一个分支预测单元(未示出)选择分支调度/执行单元54把两个地址中的一个输出到多路开关选择器58。分支预测逻辑单元对应于用户可编程控制位,以下列三个方式之一进行操作(1)动态分支预测;(2)用BHT更新的静态分支预测;(3)无BHT更新的静态分支预测。一个分支指令是否被取这同分支转到何处是无关的(若被取的话)。条件分支指令是分支指令的一类,它依靠一个在分支指令的调度/执行阶段通常是不知道的命令结果。这种依赖决定了分支是否被取,并不决定取指地址是什么,因此,分支调度/执行单元54根据动态分支预测方法或静态分支预测方法选择两个地址之一,这特定预测方法,通过在专用目的寄存器(未示出)设置某些位而使用户能控制。根据动态分支预测方法进行操作的同时,分支调度/执行单元54利用IFAR62内容的一部分对被称为分支历史表64(下文称BHT)的第二RAM块进行变址,分支调度/执行单元54为每个分支指令或某些分支指令子集定义一个分支状态。特定分支指令的状态决定分支是否被取出。所描述的实施例中用的分支状态方式是已为大家熟知的含4种状态的模式STRONG—NOT—TAKEN(强不取)WEAK—NOT—TAKEN(弱不取),WEAK—TAKEN(弱取)和STRONGTAKEN(强取)。若指令分支状态对应于强不取或弱不取,分支调度/执行单元54预测分支将不取出。分支调度/执行单元54,在指令完成后更新一特定分支指令的分支状态,若分支调度/执行单元54不正确地预测了分支指令,那么分支调度/执行单元54将更新BHT66中相应的条目,使其从一个状态变为同样的弱状态或从弱状态到相反的弱状态。相反,若分支调度/执行单元54正确地预测了分支指令,那么,分支调度/执行单元54将更新BHT66中相应条目,使其从一个弱状态变为相同强状态或从强状态变成同样的强状态。根据静态分支预测方法进行操作的同时,分支调度/执行单元54用一位或多位嵌入到分支指令位中,以确定分支是否被实现。这些位在包含有分支指令的程序被编译完成时一次设定。所述实施例中,在静态分支预测模式中二位被用于预测分支指令。这两位之一是一个符号位,通常表示在分支调度/执行单元54中,第二流水线是加2个数以形成取指地址还是减2个数以形成取指地址(向前取指还是向后取址)。第二位是一个分支预测位,它表示分支是否应被实现。当符号位被触发时,分支预测位的逻辑状态和所得到的动作之间的关系颠倒,不管怎样,符号位和分支预测位被解码成单一实现/不实现位。若单一实现/不实现位在逻辑上等于第一状态,那么分支预测逻辑单元将选择在分支调度/执行单元54中由第一流水线产生的地址。若单一实现/不实现位逻辑上等于第二状态,那么分支预测逻辑单元将选择在分支调度/执行单元54中由第二流水线生成的地址。当分支调度/执行单元54根据静态分支预测方法运行时,它可能会或可能不会更新BHT66。更新BHT66或不更新BHT66的决定是一个有重要意义的决定。分支完成单元56在特定分支指令被完成以后为一特定分支指令形成一个单一地址。同任何其它指令一样,当在分支指令之前的所有指令已把它的结果写到适当结构寄存器时,分支指令被完成。这时,分支指令所依据的条件,以及分支是否被实现已知道。须注意。分支取指单元52已在同一分支指令的取指阶段根据同一分支指令将一指令取指地址输出给多路器58。同时分支调度/执行单元54可能已在同一指令的调度/执行阶段将第二指令取指地址输出给多路开关选择器58。分支完成单元56在其内部有一先进先出队列,也就是分支队列68,其中存贮着有关每个被执行的分支指令的数据。分支完成单元56通过数据/控制信号集66分支调度/执行单元55接收有关每个指令的某些数据(1)由分支调度/执行单元54形成的但并不输出到多路开关选择器58(未选择通路)的取指地址;(2)在调度/执行阶段进行分支计算所依赖的条件的预测值;(3)分支指令的分支状态。分支完成单元56也存贮分支队列68中每个分支指令的地址。分支完成单元56从完成/调度单元20接收一个指示何时每个分支指令完成的控制信号。在分支指令完成后,分支完成单元56接收分支条件的实在值,此分支条件是调度/执行取指地址的基础(这分支指令被分解了)。典型的这种条件是一个专用目的寄存器(条件寄存器)中可以被其它指令来修改的一位。若条件的实际值与存储在分支队列68中的预测值不同,则由分支调度/执行单元54形成的分支预测有错。在这种情况下,分支完成单元56与分支指令相结合输出所存贮的地址。这地址是一开始未被分支调度/执行单元54选择的路径。若条件的实际值与存贮在分支队列68中预测值相同,那么由分支调度/执行单元54形成的分支预测是正确的。在这种情况下,分支完成单元56不需做任何事,除了与完成分支指令相结合作废在分支队列68中的条目以备后用。在任一种情况下,分支完成单元56根据预测与实际分支条件的比较和存贮的分支状态为分支指令产生一个新的分支状态,分支完成单元56以存贮的分支地址作为到BHT66的变址把新的分支状态传送到BHT66。分支完成单元56产生控制信号PEND-INGBRANCH(排起分支)该信号表示在分支队列68中如果有的话有多少未决定的分支指令。地址选择器60决定大约4个输出地址中哪一个应使多路开关选择器58输出到IFAR62。地址选择器60接收从分支取指单元52输出的取指地址,从分支调度/执行单元54输出的取指地址及从分支完成单元56来的控制信号,如果条件预测值和条件实际值不同分支完成单元56置位这个控制信号。若分支完成单元56置位其控制信号,那么地址选择器60会使多路开关选择器58输出由分支完成单元56形成的地址。若分支完成单元56没有置位其控制信号,且由分支调度/执行单元54生成的地址不同于在前面流水线阶段由分支取指单元52生成的地址,那么地址选择器60使多路开关选择器58输出由分支调度/执行单元54形成的地址。否则地址选择器60使多路开关选择器58输出由分支取指单元52形成的地址。若分支单元28发生故障;地址选择器将输出IFAR62的以前的值。应当明白的是在任何时侯,地址选择器60可以选择由4个不同分支指令形成的4个不同地址中一个。猜测预取指控制单元70,从完成/调度单元30接收控制信号EXCEPTION(例外)及COMPLETIONBUFFEREMPTY(完成缓冲器空),从调度缓冲器48接收DBEMPTY(DB空),从第一分支检测器50接收INCOMINGBRANCH(引入分支)从分支完成单元56接收PENDINGBRANCH(挂起分支),还接收地址选择器60的输出和三个预取指方式位。程序员所能存取的专用目的寄存器形成这三种方式位,猜测预取指控制单元70形成控制信号GOTOBUS(去总线)和OVERRIDE(取代)。完成/调度单元30在形成例外指令的写回阶段置位EXCEP-TION(例外)。当指令形成例外时数据处理器12立刻在存储器分支一地址,在存储器内常注例外操作子程序,在这些情况下,数据处理器12将不执行由IFAR62变址的指令,这样,它需要预取指这些指令。否则,完成/调度单元30复位EXCEPTION(例外)。当完成缓冲器46为空时,完成/调度单元30置位COMPLETIONBUFFEREMPT(完成缓冲空)否则,完成/调度单元30复位COMPLETIONBVFFEREMPTY)。第一或第0预取指方式位指示数据处理器12在实地址方式还是在虚地址方式。当在实地址方式时,数据处理器12直接用变址存储器生成地址,当在虚地址方式时,数据处理器12在变址存储器变址前先转换它的地址。第2和第3预取指方式指示允许分支指令数目超过数据处理器12可预取指令的数目。若这两位为“00”,数据处理器12仅预取分支队列68中没有挂起分支指令;若为“01”,反预取分支队列68中不多于一个的挂起分支指令;若为“10”,仅预取分支队列68中不多于2个的挂起分支指令,若为“11”仅预取分支队列68中不多于4个的挂起分支指令。在这4种方式中,第一分支检测器50必须复位INCOMINGBRANCH(引入分支)。猜测预取指控制单元70,当它适合对数据处理器12去预取指令时(如果请求指令不在指令高速缓存24中)。置位控制信号GOTOBUS。当预指取方式位第0位设置到高逻辑态(实地址方式),调度缓冲器40置位DBEMPTY,完成调度单元30置位COMPLETIONBUFFEREMPTY(完成缓冲器空)时,猜测预取指控制单元70置位GOTOBUS。否则推测预取指控制单元70复位GOTOBUS。在实地址寻址方式下,数据处理器12可能偶然地存取地址空间,这些空间一旦被存取将会永远改变(某些I/O设备)。因此,数据处理器12必须不在猜测存取这些地址空间。当预取指方式位第0位设置到低逻辑态时(虚地址方式),第一分支检测器50复位INCOMINGBRANCH且在PENDINGBRANCH小于或等于由第2和第3预取指方式位表示的值时,猜测预取指控制单元70置位GOTOBUS。否则,猜测预取指控制单元70复位GOTOBUS。当分支单元28装载一新的取指地址到IFAR62时,猜测预取指控制单元70置位控制信号OVERRIDE,这样优先使较早的流水线级输出。在这种情况下,前面取指地址不再需要。当地址选择器60从分支调度/执行单元54输出中或从分支完成单元56输出中选择一预取地址时,猜测预取指控制单元70置位OVERRIDE。当地址选择器60从IFAR62输出中或从分支取指单元52的输出中选择地址时,猜测预取指控制单元70复位OVERRIDE。图4显示了一个图2所示的指令高速缓冲存储器24的框图。指令高速缓存24具有一个含转换阵列74的存储器控制逻辑单元72,一个高速缓存的随机存贮器(RAM)76,一个ICACHE控制逻辑单元78和一比较器80。存储器控制逻辑单元72从IFAR62接收虚拟地址的高有效位,转换阵列74在与未被转换的虚拟地址的低有效位结合的情况下,将所接收虚拟地址的高有效位转换,形成物理地址。存储器控制逻辑单元72将已被转换的高有效位作为一个控制信号EXPECTEDTAG。存储器控制逻辑单元72在实模式中不对所接收到的虚拟地址进行转换。在此模式中,存储器控制逻辑单元72仅将所接收的地址传送给比较器80和ICACHE控制逻辑78。高速缓存76存贮大量频繁使用指令的数据和相关标签(tags)对。高速缓存76接收由IFAR62产生的虚拟地址的低有效位,并对一对指令数据和标签建立索引。在逻辑上被索引的标签与所存贮指令数据原始地址的物理地址的高有效位相等。比较器80从高速缓冲存贮器72接收被索引的存贮标签,从存储器控制逻辑单元72接收EXPECTEDTAG。如果这两个多位信号是相同的,则被IFAR62的内容变址的指令存在于指令高速缓存24中。数据处理器12不必从主存贮块16中取指令,在这种情况下,比较器80置位一个控制信号HIT/MISS(命中/未命中)。如果这两个多位信号不同,那么由IFAR62内容变化的指令不在指令缓存器24。在此情况下,比较器80复位一个控制信号HITMISS(命中/未命中)。同时,数据处理器12将必须从主存贮块16中取出这个指令。本发明所涉及的就是这一取操作的时序。ICACHE控制逻辑单元78控制着指令高速缓存16与BIU23的界面。更具体地说,ICACHE控制逻辑单元78将指令请求送至BIU23,从BIU23接收所请求的指令。并把接收到的指令存贮于高速缓存76(路径未示出)。ICACHE控制逻辑单元78产生控制信号AD-DRESS(地址),LOAD(装载),REQUEST(请求)和COMMIT,并从BIU23接收控制信号DATA(数据),DATAVALID(数据有效),DATACOMPLETE(数据完成)和CANCELENABLE(取消使能),I-CACHE控制逻辑单元78还从分支单元28接收GOTOBUS(去总载)和OVERRIDE(取代)信号,从存储器控制逻辑单元72接收EX-PECTEDTAG,比较器80接收HITMISS信号,从IFAR62接收所请求指令的虚拟地址。ICACHE控制逻辑单元78将EXPECTEDTAG与IFAR62的内容的低有效位连接以产生ADDRESS,一个不存贮于指令高速缓存24的指令的地址。当其有一有效的指令要求时,ICACHE控制逻辑单元78置位LOADREQUEST(装载请求)。当适合将请求传送到主存贮块16时,ICACHE控制逻辑单元置位COMMIT。下面将结合图5对LOADREQUEST(装载请求)和CMMIT进行说明。DATA包括一个来自主存贮块16的所请求的指令。DATAVALID(数据有效)指示DATA所含的数据是合法的。BIU在其将最后一节指指令数据传送至指令高速缓存24时置位DATACOMPLETE(数据完成)CAN-CELENABLE(取消使能)指示ICACHE控制逻辑单元78可以取消一个请求。CANCELENABLE在实施例中很有用,就如图1所示,在此数据处理器14在其向主存贮器单元16请求数据之前先从外部高速缓存器22请求数据。在此实施例中,外部高速缓存22和主存贮器单元16是通过独立的或成对的总线被存取的。在此实施例中,数据处理器14仅在所请求的指令不在外部高速缓存22中时垄断公共地址和数据总线。如上所述。分支单元28在某些情况下确定其不需要所请求的指令。在这些情况下,如果数据处理器14已经对所请求的指令寻找了外部高速缓存22但是未存取主存贮单元16,ICACHE控制逻辑单元78将复位LOADREQUEST(装载请求)。图5显示了图4所示的指令高速缓存逻辑单元78的状态转换图。ICACHE控制逻辑单元78保持在IDLE(闲置)状态,直到分支单元28请求一个不在指令高速缓存24中的指令,即一个“高速缓存未命中”。在高速缓存未命中之后,指令高速缓存逻辑单元78将请求一个新指令。如果比较器80复位HIT/MISS(命中/未命中)且猜测预取指令控制单元70复位GOTOBUS(去总线),则ICACHE控制逻辑单元78转换到MISSOUTSTANDING(明显未命中)状态、最终,指令高速缓存逻辑单元78将或者提交这个请求,如果预测预取指令控制单元70置位GOTOBUS(去总线),或者取消该请求,如果预测预取指令控制单元70置位OVERRIDE(取代)。应当明白的是,在某些场合,即使在预测预取指控制单元70置位OVERRIDE(取代)之后,主存贮单元16仍将把指令返回给数据处理器12。在这些场合下,ICACHE控制逻辑单元78将忽略来自主存贮单元16的指令数据。在那些指令高速缓存逻辑单元78确认请求的场合下,当预测预取指控制单元70置位GOTOBUS(去总线)时,ICACHE控制逻辑单元78从MISSOUTSTANDING(明显未命中)状态转换为COM-MITTED运行状态。如果比较器80复位HIT/MISS(命中/未命中)且预测预取指控制单元70置位GOTOBUS(去总线)ICACHE控制逻辑单元78可从IDLE(闲置)状态直接转换为COMMTTED运行状态。如果BIU23置位DATACOMPLETE(数据完成),ICACHE控制逻辑单元78将从COMMITTED(运行)状态变回IDLE(闲置)状态。在那些指令高速缓存逻辑单元78取消请求的场合,如果预测预取指控制单元70置位OVERRIDE(取代)且BIU23置位CANCELENABLE(取消使能),ICACHE控制逻辑单元78将从MISSOUT-STANDING(明显未击中)状态直接转换为IDLE(闲置)状态。当预测预取指控制单元70置位OVERRIDE(取代)且BIU23复位CAN-CELENABIE(取消使能)时,ICACHE控制逻辑单元78将从MISSOUTSTANDING(明显未击中)状态转换成OVER—RIDDEN(已被取代)状态。如果BIU23置位CANCELENABLE(取消使能)或DATACOMPLETE(数据完成),ICACHE控制逻辑单元78将从OVER—RIDDEN(已被取代)状态变回IDLE(闲置)状态。控制信号COMMIT和LOADREQUEST(装载请求)的逻辑状态由图5所示的状态转换图决定。更具体而言,ICACHE控制逻辑单元78在其处于COMMITTED(运行)状态时置位COMMIT(运行信号)。否则,ICACHE控制逻辑单元78复位COMMIT(运行信号)、当处于MISSOUTSTANDING(明显未击中)、COMMITTED(运行)或OVER—RIDDEN(已被取代)当中任一状态时,ICACHE控制逻辑单元78置位LOADREQUEST(装载请求)。当处于闲置状态时,I-CACHE控制逻辑单元78复位LOADREQUEST(装载请求)。图6显示了图2所示的BIU23的方块图。与本发明相关的BIU23的部分包括一个BIU仲裁器82,一个BIU控制逻辑单元84和一个多路器(标为MUX)86。BIU仲裁器82从指令高速缓存24、数据高速缓存26和由指令与数据高速缓存器共享的tablewalk电路(未示出)接收存取外部地址和数据总线的请求tablewalk电路将数据装载入用于地址转换的转换阵列74。BIU仲裁器82根据一个与本发明无关的协议决定哪个请求将在何时实际存取地址和数据总线。BIU仲裁器产生一个控制信号SELECT(选择),用于选择哪一个多路器86的输入被送往地址总线。一独立数据路径(未示出)把与数据高速缓冲装载或存贮操作相关的数据送到外部数据总线。多路器86从三个可能请求者中的每个接收一个地址。BIU控制逻辑84如同BIU仲裁器82所做的,接收相同的三个存取外部地址和数据总线的请求。BIU控制逻辑84还从地址和数据总线接收控制信号并产生与地址和数据总线相关的控制信号。举例说,BIU控制逻辑84产生一个输出给外部总线的数据有效信号BUSVALID(总线有效),并且从外部总线接收一个类似的信号。当三个可能请求者中的至少一个提出请求时,BIU控制逻辑单元84置位BUSVALID(总线有效)。同时,如果被选择的请求产生于指令高速缓存24,那么必须在BIU控制逻辑单元84置位BUSVALID(总线有效)之前同时置位LOADREQUEST(装载请求)和COMMIT(运行信号)。BIU控制逻辑单元84把从外部总线接收到的数据有效信号作为DATAVALID(数据有效)传送给指令高速缓存24。在本发明的第一个实施例中,BIU控制逻辑单元84总是置位CANCELEN-ABLE(取消使能)。最后,当其从外部总线接收到最后一节指数据时,BIU控制逻辑单元84置位DATACOMPLETE(数据完成)。如上所述,本发明可以插入这样一种具有一个需要通过不同于寻常的总线对才可存取的数据处理器和外部高速缓存的数据处理系统。在这种情况下,上述的某些信号和功能稍有不同。更具体地说,BIU控制逻辑单元84首先将IFAR62的内容传送至外部高速缓存块22而不理会分支队列68中未决定分支指令的个数。应当注意,指令高速缓冲存贮器24已经对IFAR62变化的指令进行了寻找。这一对独立总线的总线activity不会显著影响系统效能。在这一步中,BIU控制逻辑单元84置位一个控制信号SECONDARYCACHEVALID(二级高速缓存有效)。如果指令不在外部高速缓存存贮块22(一个“L2”未命中),那么BIU控制逻辑单元84将通过上述的公共总线存取主存贮块16。BIU控制逻辑单元84在数据处理器存取外部高速缓存之后置位CANCELENABLE(取消使能)。尽管本发明已参照特殊实施例而被说明,那些熟悉本领域技术的人仍可做进一步的改进和提高。例如,本发明可被插入那些习惯上被归为复杂指令集计算机或CISC机器的数据处理器。此外,某些功能单元可在某些实施例中被省略或是重新置于数据处理12的其它区域。所以应当明白,本发明包括了所有这些未偏离其精髓和附加权利要求所限定的发明的范围的改进。权利要求1.利用猜测指令取指的数据处理器,它使用外部存储系统,这种数据处理器其特征在于由分支预测单元形成取指地址,由分支预测单元存储一信号用以表示未决定分支指令数,由分支预测单元产生一控制信号,在第一种操作方式中若信号表示数量分别小于等于第一预选择数或大于第一预选择数时控制信号分别对应于第一逻辑状态及第二逻辑状态,在第二种操作方式中,若信号表示数分别小于等于第二预选择数或大于第二预选择数时,控制信号分别对应于第一逻辑状态及第二逻辑状态;指令取指电路连接到分支预测单元,指令取指电路取出一指令用来自外部存储器系统对应于控制信号的第一状态的取指地址变址。2.按权利要求1的数据处理器中分支预测单元其特征在于分支计算电路形成与分支指令对应的第一和第二地址;分支预测电路连到分支计算电路,分支预测电路输出取指地址取指地址对应于条件逻辑上等于第一或第二地址中选择的一个。分支完成电路用来存贮表示未决定分支指令数的信号。3.按权利要求2的数据处理器中分支完成电路其特征在于电路用来存贮逻辑上不等于取指地址的第一和第二地址中一个。4.按权利要求3的数据处理器其特征在于用高速缓存的存储器连到指令取指电路,高速缓存存储器装置存贮从外部存储系统接收的指令。5.按权利要求1的数据处理器其特征在于高速缓存存储器连到指令取指电路,高速缓存存储器装置存贮从外部存储系统接收的指令。6.带有外部存储器系统的数据处理器的工作方法其特征在于下面步骤接收,在数据处理器的分支预测单元中接收分支指令;预测,在分支预测单元中对应于分支指令预测一取指地址;存贮,在分支预测单元中,存贮一未决定分支指令的数目;生成,在分支预测单元中,形成控制信号,在第一种操作方式中,若未决定分支指令数分别小于等于第一预选数或大于第一预选数时,控制信号分别对应于第一种逻辑状态和第二种逻辑状态,在第二种操作方式中,若未决定分支指令数分别小于等于第二预选数或大于第二预选数时,控制信号分别对应于第一种逻辑状态和第二种逻辑状态;第一取指,用指令取指电路连到分支预测单元,根据控制信号从外部存储器系统取出指令。7.按权利要求6的方法中预测步骤其特征在于下面步骤生成,在分支计算电路中,根据分支指令,生成第一和第二地址;输出,用分支预测电路连到分支计算电路,输出的取指地址逻辑上等于所选择的第一或第二地址之一。8.按照权利要求7的方法中存贮步骤其特征在于存贮的第一或第二地址逻辑上不等于取指地址。9.按照权利要求8的方法其特征在于第二取指步在第一取指步之前,第二取指步经指令取指电路,从数据处理器的高速缓存存储器取指。10.按照权利要求6的方法其特征在于第二取指步在第一取指步之前,第二取指步经指令取指电路,从数据处理器的高速缓存存储器取指。全文摘要数据处理器(12)具有预测条件分支指令的分支预测单元(28)和监控未决定分支指令数的控制单元(70),控制单元根据未决定分支指令数有选择地允许数据处理器从外部存储器系统取由分支预测单元指定的指令,未决定分支指令的特点阈值数可由用户编程,数据处理器从而把其总线存取限制于那些可以确定需要指示指令的场合。文档编号G06F9/38GK1127899SQ9411953公开日1996年7月31日申请日期1994年12月17日优先权日1993年12月20日发明者丹恩·K·杰伊,戴维·S·莱维塔,保罗·C·罗斯巴赫申请人:摩托罗拉公司