前视分支目标地址高速缓存的制作方法

文档序号:6567272阅读:277来源:国知局
专利名称:前视分支目标地址高速缓存的制作方法
技术领域
本发明的教示涉及用于尤其通过相对于提取经高速缓存的分支指令而预先提取经高 速缓存的目标地址来高速缓存分支指令目标地址的技术,且涉及使用此类技术的处理器。
背景技术
现代微处理器和其它可编程处理器电路通常依赖于管线处理结构来改进执行速度。 管线处理器包含多个处理级,以用于当每一指令移动通过管线时依次处理所述指令。当 一个级正处理一指令时,沿着管线的其它级同时处理其它指令。管线的每一级执行每一程序指令的整个处理过程中所必要的不同功能。尽管次序和/ 或功能可能略有变化,但典型的简单管线包含指令提取级、指令解码级、存储器存取或 读出级、指令执行级和结果回写级。较先进的处理器设计将这些级的一些或全部分解为 若干单独的级,以用于执行这些功能的子部分。超标量设计将功能进一步分解和/或提供复制功能,以在具有类似深度的并行管线中执行操作。在操作中,指令提取级在当前执行的程序中提取下一指令。通常,下一指令是处于 下一连续存储器地址位置处的指令。 一些指令的处理可能导致分支操作,在此情况下,下一指令处于由解码和执行期间决定采取目标分支进行后续处理而产生的非连续目标地 址处。存在两种常见分支指令,有条件和无条件的。处理器依据在处理指令时是否满足分 支的条件来决定是否采取条件分支指令。每当处理器执行指令时,处理器采取无条件分 支。通过基于特定分支指令进行计算来确定分支指令(即,指令的目标地址)之后接下 来待处理的指令。尤其对于条件分支,直到处理器确定满足分支条件才可能确定地了解 分支结果的目标地址。对于给定的提取操作,提取级初始试图从指令高速缓冲存储器(iCache)提取寻址 的指令。如果指令尚未包含在iCache中,那么提取级从较高级存储器(例如,二级指令 高速缓冲存储器或系统的主存储器)中将其提取。如果从较高级存储器中提取,那么指 令加载到iCache中。提取级将每一提取的指令提供到指令解码级。指令解码级的逻辑对接收到的指令字
节进行解码并将结果供应到管线的下一级,即供应到简单标量管线中的读出级。如果指 令是分支指令,那么解码处理的一部分可涉及计算分支目标地址。读出级的逻辑存取存 储器或其它资源以获得操作数数据用于根据指令进行处理。将指令和操作数数据传递到 执行级,执行级对检索到的数据执行特定指令并产生结果。典型的执行级可实施算术逻 辑单元(ALU)。第五级将执行结果回写到寄存器或到存储器。在此类操作中,执行级将不时地接收和处理分支指令中的一者。当处理分支指令时, 执行级的逻辑确定是否应采取分支,例如是否满足条件分支操作的条件。如果采取,那 么结果的一部分是目标地址(通常由指令解码级计算出),提取级将利用所述目标地址作 为指令地址以用于提取下一指令来通过管线进行处理。为了增强性能。目标地址可以类 似于指令的高速缓存处理的方式而被高速缓存。举例来说,对于采取的分支,计算出的 目标地址可通常与产生目标地址的分支指令的地址相关联而存储在分支目标地址高速缓 冲存储器(BTAC)中。对于每一提取操作,提取级使用新的指令地址并试图用所述提取地址来存取iCache 和BTAC两者。假定指令已加载到iCache中,iCache将把所寻址的指令供应到提取级逻 辑。如果地址对应于分支指令且先前采取分支,那么BTAC中将存在"命中(hit)",因 为BTAC将存储有针对所述指令地址的目标地址,且BTAC将把高速缓存的目标地址供 应到提取逻辑。如果当前提取地址不对应于分支指令或分支尚未被采取,那么不存在命 中,因为BTAC将不存储有针对当前提取指令地址的目标地址。当存在BTAC命中时,逻辑可预测分支是否有可能被再次采取。如果是,那么将目 标地址应用于提取逻辑以用作下一地址(而不是下一连续地址)。因此,提取分支指令之 后的下一提取操作使用从BTAC检索到的高速缓存的目标地址来提取对应于目标地址的 指令。随着处理器速度增加,给定级具有较少时间来执行其功能。为了维持或进一步改进 性能,将每一级细分。每一新级在给定循环期间执行较少工作,但存在更多以较高时钟 速率同时操作的级。因为存储器和处理器已改进,所以指令的长度和指令地址的长度增 加。在许多管线处理器中,所述提取操作被分解并分布在两个或两个以上级之中,且从 iCache提取指令以及从BTAC提取目标地址花费两个或两个以上处理循环。因此,可能 花费许多循环来确定BTAC提取过程中是否存在命中,在此期间执行iCache提取的级已 继续前进并开始对一个或一个以上后续iCache提取进行提取操作。在多循环提取操作中, 当检测到BTAC命中时,必须放弃后续提取处理,因为下一提取操作将利用BTAC中识
别的地址。所述放弃导致延迟并减少BTAC高速缓存的益处。随着BTAC提取所需的循 环数目增加,性能的降级增加。因此,需要进一步改进分支目标地址高速缓存技术,尤 其是因为所述改进可能帮助减少或消除在BTAC命中的情况下iCache级的不必要的处 理。发明内容从背景论述中将了解,通常操作使用同一地址在指令提取期间同时存取指令高速缓 冲存储器和分支目标地址高速缓冲存储器(BTAC)。为了进一步改进性能,BTAC提取 操作提前,也就是说在从指令高速缓冲存储器提取指令之前进行提取。在所揭示的实例 中,BTAC提取通过使用将来指令地址或因为目标以较早的地址值被写入到BTAC而提 前于iCache提取。这些教示的各方面涉及方法和处理器两者。第一种用于管线处理器的提取指令的此类方法包含从指令高速缓冲存储器中提取指 令,和在每次提取指令期间同时存取分支目标地址高速缓冲存储器(BTAC)。 BTAC存 取确定BTAC是否存储分支目标地址。每次存取BTAC花费至少两个处理循环。所述方 法还包含使存取操作相对于提取操作偏移预定量,以在启始分支指令的提取之前至少一 个循环开始关于分支指令而存取BTAC。在下文详细论述的各种实例中,所述偏移足以从BTAC中提取对应于分支指令的分支目标地址,以在后续指令提取过程中使用,所述后续指令提取过程在紧接着开始提取 分支指令的处理循环之后的处理循环中开始。此方法的特定实例提供用于BTAC提取的 地址的递增作为提取操作的一部分,或提供用于将分支目标写入到BTAC的地址的递减。 后一选择不需要在提取操作本身期间实施,而是可在管线处理的稍后级的一者或一者以 上中的处理期间实施或响应于所述处理而实施。偏移的量足以实现从BTAC中提取对应于分支指令的分支目标地址,以在后续指令 提取过程中使用,所述后续指令提取过程在紧接着开始提取分支指令的循环之后的处理 循环中开始。在实例中,偏移量包括指令高速缓冲存储器与BTAC之间的地址差,其比 每次存取BTAC所需的循环的数目少一。另一种用于管线处理器的提取指令的方法需要开始从指令高速缓冲存储器提取第一 指令并同时启始BTAC中的提取。BTAC存取是用于提取对应于第一指令之后的分支指 令的目标地址。此方法还包含开始从指令高速缓冲存储器提取分支指令。开始提取分支 指令之后,使用对应于分支指令的目标地址来启始从指令高速缓冲存储器提取目标指令。
根据本发明教示的处理器包括指令高速缓冲存储器、分支目标地址高速缓冲存储器 和处理级。所存储的指令之一是分支指令,且分支目标地址高速缓冲存储器存储对应于 所述指令的分支目标地址。处理级包含提取级和至少一个后续处理级,以用于根据提取 的指令执行一个或一个以上处理功能。提取级从指令高速缓冲存储器提取指令,并从分 支目标地址高速缓冲存储器提取分支目标地址。处理器还包含偏移逻辑。所述逻辑使从 分支目标地址高速缓冲存储器的提取偏移在从指令高速缓冲存储器提取指令之前一量, 所述量与完成每次从分支目标地址高速缓冲存储器提取所需的处理循环的数目相关。在实例中,前视偏移量比完成每次从分支目标地址高速缓冲存储器提取所需的处理 循环的数目少一。偏移逻辑可与提取级相关联(例如)以递增指令提取地址,从而允许 提取级使用提前地址来从分支目标地址高速缓冲存储器进行提取。或者,偏移逻辑可使 用递减的指令地址值将分支目标写入到分支目标地址高速缓冲存储器中。示范性处理器是通常具有五个或五个以上级的管线处理器。后续处理级可包含指令 解码级、读出级,和指令执行级及结果回写级。当然,这些级的每一者可分解或形成管 线。并且,提取级可形成管线以便包括多个处理级。在一个实例中,用于BTAC提取的地址提前于指令高速缓冲存储器提取中使用的地 址一偏移量,所述偏移量意图补偿在命中的情况下从BTAC提取时的延迟。如果在提取 期间实施,那么这需要递增提取地址。或者,当写入到高速缓冲存储器时,BTAC写入 地址可提前于用于将分支指令存储在指令高速缓冲存储器中的地址适当的偏移量。由于 其在写入操作时实施,但意图促使在相应的指令高速缓冲存储器提取之前进行读取或提 取,所以写入操作递减用于将目标地址写入到BTAC中的地址。以下描述内容中将部分陈述额外的目的、优点和新颖特征,且所属领域的技术人员 将在阅读下文和附图后部分了解,或可通过制作或操作实例而了解。可通过实践或使用 所附权利要求书中明确指出的方法、手段和组合来实现和达成本发明教示的目的和优点。


附图仅以举例方式而并非限制方式来描绘根据本发明教示的一个或一个以上实施方 案。图中,相同参考标号指代相同或相似元件。图1是管线处理器的简单实例的功能方框图,其中从分支目标地址高速缓冲存储器 的提取在从指令高速缓冲存储器的相应提取之前具有前视偏移。图2是管线处理器的提取和解码级的简单实例的功能方框图,所述管线处理器实施
两循环(或两级)提取。图3是有助于解释图2的提取级中的循环时序的表,其中从指令高速缓冲存储器的 提取与从分支目标地址高速缓冲存储器的相应提取之间不存在偏移。图4是有助于解释图2的提取级中的循环时序的表,其中从分支目标地址高速缓冲 存储器的提取与从指令高速缓冲存储器的相应提取之间存在偏移,其中所述偏移与实施 目标地址提取的循环的数目或级的数目相关(例如,比所述数目少一)。图5是管线处理器的提取和解码级的简单实例的功能方框图,所述管线处理器实施 三循环(或三级)提取。图6是有助于解释图5的提取级中的循环时序的表,其中从分支目标地址高速缓冲 存储器的提取与从指令高速缓冲存储器的相应提取之间存在偏移,其中所述偏移与实施 目标地址提取的循环的数目或级的数目相关(例如,比所述数目少一)。图7是有助于理解将偏移实施为指令提取地址的递增的实例的局部方框图和流程图。图8是有助于理解将偏移实施为用于将目标地址写入到分支目标地址高速缓冲存储 器的指令地址的实例的局部方框图和流程图。
具体实施方式
在以下具体实施方式
中,以举例方式陈述许多特定细节,以便提供对相关教示的彻 底理解。然而,所属领域的技术人员应了解,可在没有此类细节的情况下实践本发明教 示。在其它例子中,已相对概括而不是详细地描述众所周知的方法、程序、组件和电路, 以免不必要地混淆本发明教示的各方面。本文揭示的各种技术涉及分支目标地址提取提前于相应的指令提取的有利时序,尤 其是当在管线型处理过程中执行此类提取时。现详细参看附图中说明以及下文论述的实 例。图1是管线处理器10的简化方框图。简化的管线包含五个级。处理器10中管线的第一级是指令提取级11。提取级获得指令以供由稍后的级进行处 理。提取级11将每一指令供应到解码级13。指令解码级13的逻辑对接收到的指令字节 进行解码并将结果供应到管线的下一级。在简单的实例中,下一级是数据存取或读出级 15。读出级15的逻辑对存储器或其它资源(未图示)进行存取以获得操作数数据,以用 于根据指令进行处理。将指令和操作数数据传递到执行级17,执行级17对检索到的数 据执行特定指令并产生结果。第五级19将结果回写到寄存器和/或存储器(未图示)。
以此方式使处理结构形成管线允许级11-19同时对连续指令进行操作。现代实施方 案(尤其对于高性能应用)通常将这些级分解为许多子级。超标量设计利用大体上具有 相同深度的同时并行操作的两个或两个以上管线。然而,为了便于论述,我们将继续使 实例与如处理器10中的简单的五级管线实例相联系。提取级逻辑通常将包含或介接到指令高速缓冲存储器(iCache) 21。当提取由地址 识别的指令时,提取级11的逻辑将首先査看iCache 21以检索所述指令。如果所寻址的 指令尚不在iCache中,那么提取级11的逻辑将从其它资源(例如,二级(L2)高速缓 冲存储器23或主存储器25)将指令提取到iCache 21中。指令和地址均存储在iCache 21 中。提取级逻辑接着可从iCache21提取指令。如果随后需要,指令也将在iCache 21中 可用。许多指令的执行导致从程序序列中的当前位置向另一指令,即向存储在存储器中的 不同位置(且对应于非连续地址)的指令形成分支。处理分支指令包含分支到目标地址 的计算。为了加速提取操作,提取级逻辑通常将包含或介接到分支目标地址高速缓冲存 储器(BTAC) 27,所述BTAC27用于以类似于iCache21的功能的方式高速缓存目标地 址。根据本发明教示,从BTAC 27检索到的目标地址从iCache 21中的相应指令的地址 偏移(29处),使得BTAC査找处理在iCache21中相应分支指令的查找之前一个或一个 以上循环开始,以补偿从BTAC 27检索目标地址的过程中的任何等待时间。29处实施的偏移可依据时间来表达,表达为一个或一个以上时钟或处理循环、表达 为地址编号偏移等。下文论述一实例,其中偏移识别与用于从iCache提取指令的提取地 址相比在时间上或指令序列中略微提前(递增)的提取地址。替代实例以适当的偏移量 (递减量)将分支目标地址写入到BTAC中,使得两个提取使用同一地址,但BTAC提 取仍提前于iCache提取所需的偏移量。在任一实例中,如果BTAC 27中存在分支目标地 址,那么将所述分支地址应用于提取级的逻辑,以便紧接着分支指令之后开始提取目标 指令。对于先前未复制到iCache 21的分支指令,BTAC 27将不包含用于分支操作的目标地 址。可能存在如下一些情形尽管iCache21包含分支指令,但(例如)因为处理尚未采 取所述特定分支而导致BTAC 27将不包含目标地址。在目标分支地址不包含在BTAC 27 中的任一此类情况下,指令解码逻辑的部分31将在解码级13中处理分支指令期间计算 目标地址。当作为解码逻辑的一部分而计算时,处理器可将计算出的目标地址写入到BTAC 27。
然而,(例如)因为不满足条件分支指令的条件,所以并非采取所有分支。执行级17的 逻辑将包含逻辑33以确定是否应采取分支。如果是,那么处理将包含写入操作(35处 所示的逻辑)以将计算出的分支目标地址写入到BTAC27中。尽管未单独图示,但采取 特定分支的执行结果将包含将目标地址提供到提取级逻辑,以提取目标指令用于通过管 线进行后续处理。正常操作或BTAC存取消耗单一提取循环的操作使用同一地址,以在指令提取期间 同时存取iCache 21和BTAC 27两者。在BTAC存取需要多个循环的情况下,为了进一 步改进性能,BTAC提取操作基于图1中29处实施的偏移而提前于iCache中提取的指令 进行提取。BTAC提取所需的循环数目决定前视偏移所需的循环数目或长度。如果BTAC存取 花费两个循环,那么BTAC提取应提前于iCache提取一个提取循环。如果BTAC存取花 费三个循环,那么BTAC提取应提前于iCache提取两个提取循环,等等。注意到,如果 BTAC存^仅需要一个提取循环,那么可能不需要偏移。 '在一个实例中,用于BTAC提取的地址提前于iCache提取中使用的地址一偏移量, 所述偏移量意图补偿在命中的情况下从BTAC提取时的延迟。如果在提取期间实施,那 么这需要递增提取地址。或者,当写入到高速缓冲存储器时,BTAC写入地址可提前于 用于将分支指令存储在iCache中的地址适当的偏移量。由于其在写入操作时实施,但意 图促使在相应的iCache提取之前进行读取或提取,所以写入操作递减用于将目标地址写 入到BTAC中的地址。为了完全理解前视操作,考虑一些实例可能会有帮助。参看图2到图4,假定BTAC 提取需要两个处理循环。尽管用于两个提取的循环可能并非始终相同,但为了便于论述, 在此实例中,从iCache进行指令提取同样需要两个循环。本质上,可认为提取级lh形 成了管线。尽管提取级可进行组合,但对于此实例,假定每一类型的提取在两个单独管 线级中执行,且iCache提取管线与形成BTAC提取管线的级并行运作。因此,管线的每 一者由两个级组成。提取管线112的每一级执行每一程序指令的整个处理过程中必要的不同功能。与指令 提取处理相关的第一级(iCacheFl)接收指令地址(iAddress),执行其功能处理以开始 提取所寻址的指令,并将其结果传递到与指令提取处理相关的第二级(iCacheF2)。在下 一循环期间,iCacheFl接收另一指令地址,同时iCache F2完成关于第一地址的提取处 理并将结果(即,所提取的指令)传递到解码级13。
并行地,与目标地址(BTAC)提取处理相关的第一级(BTACF1)接收BTAC提取 地址,执行其功能处理以开始从BTAC进行提取,并将其结果传递到与指令提取处理相 关的第二级(BTACF2)。在下一循环期间,BTACF1级接收另一指令地址,同时iCache F2完成关于第一地址的提取处理并将结果(如果存在的话)传递到解码级13。如果BTAC 处理从BTAC27提取分支目标地址,那么第二BTAC管线级(BTACF2)将命中结果提 供到与指令提取处理相关的第一级(iCacheFl),使得下一新的指令提取将利用来自高速 缓冲存储器27的适当目标分支地址。图3是表示2循环提取级(例如,图2所示的级112)中的循环时序和相关联处理的 表或时序图。表中的字母字符表示指令地址。举例来说,A、 B和C是连续地址,因为 其可能在应用程序开始时被处理。Z表示目标地址,即在处理采取的分支指令后下一待 处理的指令。在图3的实例中,出于论述的目的,假定iCache提取级与BTAC提取级的处理之间 不存在偏移。因此,fe处理循环l期间,iCacheFl级关于第一地址A执1于其提取相关处 理,且BTAC Fl级关于第一地址A执行其提取相关处理。两个F1级将各自结果传递到 相应的F2级,用于在第二循环中处理。在第二循环期间,iCache Fl级关于第二地址B 执行其提取相关处理,且BTAC Fl级关于第二地址B执行其提取相关处理。两个F2级 均在第三循环结束时完成关于第二地址B的处理。然而,在所述第三循环期间,两个F1 级均在处理第三连续指令C。现假定第二指令B是分支指令,BTAC 27为所述分支指令存储目标分支地址Z。BTAC 管线的第二级(BTACF2)发现命中并在第三循环中提供目标地址Z。在下一处理循环中 (即,在第四循环中),在iCacheFl级中,目标地址Z变得可用并作为指令提取地址被 处理。然而,如图所示,两个F1级在第三循环中均开始处理连续地址(如画圈地址C所表 示)。此处理是无关的且任何结果必须从管线中清除。下一 (第四)处理循环中可能发生 类似处理且需要从F2级中清除(再次由画圈地址C表示)。第三连续地址的不必要的处 理浪费处理时间,且需要清除任何相关数据的级会引发延迟并降低性能。图4是表示2循环提取级(例如,图2所示的级112)中的循环时序和相关联的处理 的表或时序图,其中提取级112实施BTAC提取相对于iCache提取的前视偏移。图4的 表类似于图3的表,因为两者使用相同符号。然而,图4中表示的偏移消除了浪费的iCache 提取处理循环。 在图4的实例中,iCache提取级与BTAC提取级的处理之间的偏移对应于一个指令 地址。出于论述的目的,所述偏移由提取地址递增表示。如上文注意到,通过BTAC写 入地址的递减偏移可实现相同结果。在处理循环1期间,iCache Fl级执行关于第一地址A的与其提取相关的处理,然而, BTAC Fl级执行关于第二地址B的与其提取相关的处理。两个F1级将各自结果传递到 相应的F2级,用于在第二循环中分别进行关于A和B的处理。在第二循环期间,iCache Fl级执行关于第二地址B的与其提取相关的处理,且BTAC Fl级执行关于第三地址C 的与其提取相关的处理。BTACF2级在第二循环结束时完成其关于第二地址B的处理。由于在此实例中,第 二指令B是分支指令,BTAC 27为所述分支指令存储目标分支地址Z,所以BTAC管线 的BTACF2级发现命中并在第二循环中提供目标地址Z。在下一处理循环中(即,在第 三循环中),在iCacheFl级中,目标地址Z变得可用并作为指令提取地址被处理。因此, iCache管线级可立即处理对应手目标分支地址的指令,而不会不适当地开始处理下一连 续地址。在BTAC管线级中可能仍存在对下一连续地址的某一不必要的处理(如画圈地址C 所表示)。然而,由于分支指令(尤其是背对背分支采取的指令)发生的频率较低,所以 清除BTAC管线中用于此类不必要的处理的数据对总体处理器性能具有相对较少的影 响。通过审阅图2和4中的简单实例应了解,启动时,在初始循环中从iCache21提取的 对应于偏移的指令不具有相应的BTAC提取。通常,第一指令不是分支,因此这不存在 问题。然而,随着BTAC提取的循环数目增加且伴随的偏移增加,可能可行的是在BTAC 偏移的第一次通过之前避免第一系列的指令中的分支操作。图5和图6展示BTAC提取操作需要三个处理循环的处理器的管线处理和相关联的 时序。尽管iCache和BTAC循环可能并非始终相同,但为了便于论述,在此实例中,从 iCache进行指令提取同样需要三个循环。本质上,可认为提取级113形成了管线。尽管 提取级可进行组合,但-对于此实例,假定每一类型的提取在两个单独管线级中执行,且 iCache提取管线与形成BTAC提取管线的级并行运作。因此,管线的每一者由三个级组 成。提取管线113的每一级执行每一程序指令的整个处理过程中必要的不同功能。与指令 提取处理相关的第一级(iCacheFl)接收指令地址(iAddress),执行其功能处理以开始
提取所寻址的指令并将其结果传递到与指令提取处理相关的第二级(iCacheF2)。在下一 循环期间,iCache Fl接收另一指令地址,而iCache F2级执行其关于第一地址的提取处 理并将结果传递到下一级。在第三循环期间,iCacheFl级接收另一指令地址,而iCache F2级执行其关于第二地址的提取处理,且与指令提取处理相关的第三级(iCacheF3)完 成关于第一指令地址的处理并将结果传递到解码级13。并行地,与目标地址(BTAC)提取处理相关的第一级(BTACF1)接收BTAC提取 地址,执行其功能处理并将其结果传递到与指令提取处理相关的第二级(BTACF2)。在 下一循环期间,级BTAC Fl接收另一指令地址,而BTAC F2级执行其关于第一地址的 提取处理并将结果传递到下一级。在第三循环期间,BTACF1级接收又一指令地址,而 BTAC F2执行其关于第二 BTAC地址的提取处理,且与指令提取处理相关的第三级 (BTAC F3)完成关于第一 BTAC地址的处理并将结果传递到解码级13。图6是表示3循环提取级(例如,图5所示的提取级)中的循环时序和相关联的处 理的表或时序图,其中提取级管线113实施BTAC提取相对于iCache提取的对应于两个 地址的前视偏移。图6的表类似于图4的表,因为其使用类似符号。在此3循环实例中, 为了方便,假定第三连续指令C是分支指令,已为其将目标地址存储在BTAC27中。在图6的实例中,iCache提取级与BTAC提取级的处理之间的偏移对应于两个指令 地址。出于论述的目的,所述偏移由提取地址递增表示。如上文注意到,BTAC写入地 址的递减偏移可实现相同结果。在处理循环1期间,iCacheFl级关于第一地址A执行其提取相关处理,然而,BTAC Fl级关于第一地址C执行其提取相关处理。两个Fl级将各自结果传递到相应的F2级' 用于在第二循环中分别关于A和C进行处理。在第二循环期间,iCacheFl级关于第二地 址B执行其提取相关处理,且iCache F2级关于第一地址A执行其提取相关处理。在所 述同一循环期间,BTAC F2级关于地址C执行其提取相关处理。在第三处理循环中,iCache Fl级处理第三地址C, iCache F2级关于地址B执行其 提取相关处理,且iCache F3级关于地址A执行其提取相关处理。同时,在BTAC管线 中,BTACF3级即将完成关于地址C的处理。在此实例中,此处理产生命中且BTAC提 取提取目标地址Z (表的底线)。由于指令C是分支指令,BTAC 27为所述分支指令存储目标分支地址Z,所以BTAC 管线的BTACF3级发现命中并在第三循环中提供目标地址Z。在下一处理循环中(即, 在我们的实例的第四循环中),在iCacheFl级中,目标地址Z变得可用并作为指令提取
地址被处理。因此,iCache管线级可立即处理对应于目标分支地址的指令,而不会不适 当地开始处理下一连续地址。应注意,前视BTAC提取可实施在具有iCache和BTAC的任何管线处理器中。提取 级无需形成管线,或者如果形成管线,那么提取级无需一定以图2和图5的实例中所示 的方式形成管线。用于实现前视BTAC提取的偏移的优点可实施在提取操作需要两个或 两个以上处理循环的任何处理器中。在实例中,提取级开始iCache提取的处理循环跟在相应的BTAC提取之后(或BTAC 提取提前于iCache提取)由偏移界定的一个或一个以上处理循环,也就是说比执行BTAC 提取所需的处理循环少一个。举例来说,图4中,iCacheFl级在循环2中开始提取分支 指令B,这是在BTACF1级相应地开始提取B目标地址之后一个循环。在所述第一实例 中,BTAC提取需要两个循环。类似地,图6中,iCacheFl级在循环3中开始提取分支 指令C,这是在BTACF1级相应地开始提取C目标地址之后两个循环。在图5和图6的 实杏ij中,BTAC提取需要三个处理循环。在每一情况卞,iCache提取处理过程中均不存 在不必要的中间处理。在上述图2-图6的实例中,假定了偏移涉及前于或提前于用于iCache提取的地址的 用于BTAC提取的地址。为了在提取处理期间实施此操作,提取逻辑将实施地址递增。 本质上,当提取级11接收用于指令提取的地址时,其使用所述地址作为iCache指令地 址,但逻辑递增所述地址以产生用于BTAC提取的地址。图7是此提取操作中涉及的元 件的功能方框图,其涉及递增提取地址以获得用于BTAC提取的地址。为了便于论述, 已省略管线的其它元件。如图所示,提取级中的逻辑71提供提取地址以用于存取iCache 21和BTAC 27两者。 来自逻辑71的提取地址直接用作用于存取iCache的地址。在正常处理过程中,提取级 将经过两个或两个以上处理循环以从iCache 21获得相应的指令。来自iCache 21的指令 加载到寄存器73中和/或提供到逻辑71,用于转移到解码级。如之前注意到,指令解码 逻辑的部分31将在解码级13中处理指令期间计算目标地址;且执行级17的逻辑将包含 逻辑33以确定是否应采取分支。如果是,那么处理将包含写入操作(图1中35处所示 的逻辑)以将计算出的分支目标地址写入到BTAC27中。在此实例中,未修改写入操作。然而,提取级包含逻辑电路29i(包含在提取级逻辑71中或与提取级逻辑71相关联), 用于使提取地址递增适当的偏移量以产生BTAC提取地址。在图2和图4的2循环提取 实例中,电路29i将使提取地址递增一个地址值,使得BTAC提取将提前于iCache提取
一个循环。在图5和图6的3循环提取实例中,电路29i将使提取地址递增两个地址值, 使得BTAC提取将提前于iCache提取两个循环。以此方式,提取级将经过两个或两个以 上处理循环,以确定是否存在对应于适当的将来指令的BTAC命中,且如果是,那么从 BTAC 27中检索高速缓存的分支目标地址。目标地址加载到寄存器75中并提供到逻辑 71。逻辑71足够早地接收到分支目标地址,以在下一提取处理循环中将所述地址用作下 一提取地址(例如,见图4和图6)。尽管为了方便未展示所述路径,但所产生的目标地 址通常还与相应的分支指令一起被转移到解码级,以有助于沿着管线向下进一步处理分 支指令。作为在提取操作期间递增地址的替代方法,但仍提供所需的前视BTAC提取,还可 在将分支目标数据写入到BTAC 27时修改所述数据的BTAC地址。如果当相关联的指令 地址和分支目标地址写入到存储器中时递减所述相关联的指令地址,那么基于当前指令 地址从BTAC进行的随后提取将提前于从iCache提取分支指令。如果地址递减量适当, 即地址偏移量te BTAC提取所需的循环数目少一,那么从iCaclie 21提取指令以及从 BTAC 27提取任何相关联的目标地址将与先前实例中完全相同。实践中,通过当执行期 间存在采取的分支时修改写入地址而不是在提取操作期间每次都递增提取地址来实施偏 移通常更容易。图8是此提取操作中涉及的元件的功能方框图,其涉及当将计算出的分支目标写入 BTAC时递减目标数据的地址。为了便于论述,已省略管线的其它元件。如图所示,提 取级中的逻辑71提供提取地址,以用于存取iCache21和BTAC27两者。在此实例中, 两个提取使用同一地址,即用于从iCache21提取指令以及用于存取BTAC 27两者。提取级将经过两个或两个以上处理循环以从iCache21获得相应的指令。来自iCache 21的指令被加载到寄存器73中和/或提供到逻辑71,供转移到解码级。如前文所述,指 令解码逻辑的部分31将在解码级13中处理指令期间计算目标地址;且执行级17的逻辑 将包含逻辑33以确定是否应采取分支。如果是,那么处理将包含写入操作,以将计算出 的分支目标地址写入到BTAC 27中。在此实例中,修改写入操作。明确地说,执行级中的写入逻辑包含递减(-)偏移逻 辑电路292。通常,用于将目标地址数据写入到BTAC 27的写入地址是曾产生分支地址 的分支指令的地址。然而,在图8的实例中,电路292使所述地址递减适当的偏移量。 对于实施2循环提取的管线处理器,电路292将使写入地址递减一个地址值。对于实施3 循环提取的处理器,电路292将使写入地址递减两个地址。现再次考虑提取操作。当逻辑71产生提取地址时,所述地址指向iCache 21中的当 前所需的指令。然而,由于用于将目标数据写入到BTAC27中的写入地址递减,所以提 取过程中使用的地址实际上对应于稍后的指令地址,这由偏移量决定。如果偏移量是一 个地址值,那么提取地址实际上指向针对待从iCache21牵出的下一指令的可能的BTAC 命中。类似地,如果偏移量是两个地址,那么提取地址实际上指向针对提前于当前正从 iCache21牵出的指令的两个指令的可能的BTAC命中。以此方式,提取级将经过两个或两个以上处理循环以确定是否存在对应于适当的将 来指令的BTAC命中,且如果是,那么从BTAC27中检索高速缓存的分支目标地址。目 标地址加载到寄存器75中并提供到逻辑71。逻辑71足够早地接收到分支目标地址,以 在其启始对于相应的分支指令的iCache提取之后下一提取处理循环中将所述地址用作下 一提取地址(例如,见图4和图6)。尽管为了方便未展示所述路径,但所产生的目标地 址通常还与相应的分支指令一起被转移到解码级,以有助于沿着管线向下进一步处理分 支指令。 ' 尽管实例已叙述两个和三个循环BTAC提取处理以及相应的偏移,但所属领域的技 术人员将了解,所述教示容易适于BTAC提取涉及更大数目的循环的提取处理。在每一 情况下,最佳偏移量均将比BTAC提取中的循环数目少一。然而,在提取序列开始时, 对应于偏移量的某一数目的指令不应包含分支指令,以免跳过BTAC命中。如果较早地 包含分支指令,那么程序的首次运行将把分支指令作为不存在BTAC命中(分支先前未 采取)的分支指令来处理,且程序将以正常方式运行,但没有原本将通过检测到BTAC 命中而提供的性能改进。尽管上文已描述了被认为是最佳模式的内容和/或其它实例,但应了解,可在其中作 出各种修改且本文揭示的主题可以各种形式和实例实施,且所述教示可应用于许多应用, 本文中仅描述了其中某些应用。所附权利要求书用来主张那些落入本发明教示的真正范 围内的任何和所有的应用、修改及变化。
权利要求
1.一种用于管线处理器中的提取指令的方法,其包括从指令高速缓冲存储器提取指令;在每次提取指令期间,同时存取分支目标地址高速缓冲存储器(BTAC)以确定所述BTAC是否存储分支目标地址,其中每次存取所述BTAC包括至少两个处理循环;以及使所述存取操作相对于所述提取操作偏移预定量,以在启始从所述指令高速缓冲存储器提取分支指令之前至少一个循环开始与所述分支指令相关地存取所述BTAC。
2. 根据权利要求l所述的方法,其中-每次从所述指令高速缓冲存储器进行提取包括为待提取的指令产生提取地址; 所述偏移包括使每一提取地址递增所述预定量;且每次存取所述BTAC包括使用由所述偏移产生的递增的提取地址从所述BTAC进 行提取。
3. 根据权利要求1所述的方法,其中所述偏移包括递减所述分支指令的地址并将所述分支目标地址和所述递减的地 址写入到所述BTAC;所述方法进一步包括,在每一循环期间为待提取的指令产生提取地址;且 在每一循环中开始的提取和存取两者均使用所述循环期间产生的所述提取地址。
4. 根据权利要求1所述的方法,其中所述偏移的所述预定量足以实现从所述BTAC提 取对应于所述分支指令的分支目标地址以在后续指令提取过程中使用,所述后续指 令提取过程开始于紧接着其中指令的提取开始提取所述分支指令的处理循环之后 的处理循环中。
5. 根据权利要求4所述的方法,其中所述预定量包括从所述指令高速缓冲存储器提取 与存取所述BTAC之间的地址差,其等于比每次存取所述BTAC时的循环数目少一。
6. 根据权利要求5所述的方法,其中每次存取所述BTAC由两个处理循环组成;且所述预定量包括所述从所述指令高速缓冲存储器提取指令与所述存取所述BTAC 之间的地址差,其等于一个指令地址。
7. 根据权利要求5所述的方法,其中-每次存取所述BTAC由三个处理循环组成;且所述预定量包括所述从所述指令高速缓冲存储器提取指令与所述存取所述BTAC 之间的地址差,其等于两个指令地址。
8. —种用于管线处理器中的提取指令的方法,其包括开始从指令高速缓冲存储器提取第一指令;与所述开始提取所述第一指令同时,启始分支目标地址高速缓冲存储器(BTAC) 中的提取,以提取对应于所述第一指令之后的分支指令的目标地址, 开始从所述指令高速缓冲存储器提取所述分支指令;在开始提取所述分支指令之后,使用对应于所述分支指令的所述目标地址来开始 从所述指令高速缓冲存储器提取目标指令。
9. 根据权利要求8所述的方法,其中所述BTAC中的提取需要两个或两个以上处理循 环。
10. 根据权利要求9所述的方法,其中所述启始所述BTAC中的提取提前于所述开始从 所述指令高速缓冲存储器提取所述分支指令一个或一个以上处理循环。
11. 根据权利要求10所述的方法,其中所述BTAC中的提取提前于所述开始从所述指 令高速缓冲存储器提取所述分支指令所述一个或一个以上处理循环为比所述BTAC 中的提取所需的所述两个或两个以上处理循环少一。
12. 根据权利要求8所述的方法,其中所述提取所述第一指令使用提取地址;且 所述BTAC中的提取使用相对于所述提取地址递增的地址。
13. 根据权利要求8所述的方法,其中所述提取所述第一指令使用提取地址;且所述BTAC中的同时提取使用所述提取地址,所述分支地址已以递减的地址写入 到所述BTAC以对应于所述提取地址。
14. 一种用于管线处理器中的提取指令的方法,其包括在第一处理循环中,开始从指令高速缓冲存储器提取第一指令;在所述第一处理循环中,启始分支目标地址高速缓冲存储器(BTAC)中的提取, 以提取对应于在所述第一指令之后预定量的分支指令的目标地址,在迟于所述第一处理循环的第二处理循环中,开始从所述指令髙速缓冲存储器提 取所述分支指令并完成所述从所述BTAC提取所述目标地址;在迟于所述第二处理循环的第三处理循环中,使用对应于所述分支指令的所述目 标地址来开始从所述指令高速缓冲存储器提取目标指令。
15. 根据权利要求14所述的方法,其中所述第二处理循环在所述第一处理循环之后一 个或一个以上数目的处理循环,所述数目比完成所述从所述BTAC提取所需的两个 或两个以上数目的处理循环少一。
16. 根据权利要求14所述的方法,其中所述启始所述BTAC中的提取的步骤包括-使在所述第一处理循环中开始从所述指令高速缓冲存储器提取所述第一指令时 使用的指令地址递增所述预定量;以及使用所述递增的地址来开始所述BTAC中的提取,以提取对应于所述分支指令的 所述目标地址。
17. 根据权利要求16所述的方法,其中每一递增是一个或一个以上数目的地址,其比 完成所述从所述BTAC提取所需的两个或两个以上数目的处理循环少一。
18. 根据权利要求14所述的方法,其中所述在所述第一处理循环中启始所述BTAC中的提取的步骤包括使用在所述第 一处理循环中开始从所述指令高速缓冲存储器提取所述第一指令时使用的指令地 址来存取所述BTAC;且用于将所述分支目标地址写入到所述BTAC的地址先前从用于将所述分支指令写 入到所述指令高速缓冲存储器的指令地址递减了所述预定量,使得所述BTAC中的 目标地址的地址对应于在所述第一处理循环中开始从所述指令高速缓冲存储器提 取所述第一指令时使用的所述指令地址。
19. 根据权利要求18所述的方法,其中所述递减是一个或一个以上数目的地址,其比 完成所述从所述BTAC提取所需的两个或两个以上数目的处理循环少一。
20. —种处理器,其包括指令高速缓冲存储器,其用于存储指令;分支目标地址高速缓冲存储器,其用于存储对应于所述存储的指令中的包括分支 指令的一者的分支目标地址;提取级,其用于从所述指令高速缓冲存储器提取指令,并用于从所述分支目标地 址高速缓冲存储器提取所述分支目标地址;至少一个后续处理级,其用于根据所述提取的指令执行一个或一个以上处理功 能;以及偏移逻辑,其用于使从所述分支目标地址高速缓冲存储器的提取比从所述指令高 速缓冲存储器提取指令偏移一提前量,所述量与完成每次从所述分支目标地址高速 缓冲存储器提取所需的处理循环的数目相关。
21. 根据权利要求20所述的处理器,其中所述量的数目比完成每次从所述分支目标地 址高速缓冲存储器提取所需的处理循环的数目少一。
22. 根据权利要求20所述的处理器,其中所述逻辑包括与所述提取级相关联以用于递增所述提取级用以从所述指令高速 缓冲存储器进行提取的地址的逻辑;且所述提取级使用所述递增的地址来从所述分支目标地址高速缓冲存储器进行提 取。
23. 根据权利要求20所述的处理器,其中 所述提取级同时使用指令地址从所述指令高速缓冲存储器进行提取以及从所述 分支目标地址高速缓冲存储器进行提取;且所述逻辑包括用于递减所述分支指令的地址并使用所述递减的地址将所述分支 目标地址写入到所述分支目标地址高速缓冲存储器的逻辑。
24. 根据权利要求23所述的处理器,其中所述用于递减的逻辑与所述至少一个后续处 理级相关联。
25. 根据权利要求20所述的处理器,其中所述提取级包括许多管线处理级。
26. 根据权利要求25所述的处理器,其中所述完成每次从所述分支目标地址高速缓冲 存储器提取所需的处理循环的数目等于所述管线处理级的数目。
27. 根据权利要求20所述的处理器,其中所述至少一个后续处理级包括指令解码级; 读出级;指令执行级;以及 结果回写级。
28. —种管线处理器,其包括提取级,其用于从指令高速缓冲存储器提取指令,其中所述指令中的一者是分支指令,且用于从分支目标地址高速缓冲存储器提取对应于所述分支指令的分支目标 地址;至少一个后续处理级,其用于根据所述提取的指令执行一个或一个以上处理功 能;以及偏移装置,其用于使从所述分支目标地址高速缓冲存储器的提取偏移以提前于所 述从所述指令高速缓冲存储器提取指令,以补偿完成每次从所述分支目标地址高速 缓冲存储器提取所需的处理循环的数目。
29. 根据权利要求28所述的管线处理器,其中所述提取级包括许多管线处理级。
30.根据权利要求28所述的管线处理器,其中所述至少一个后续处理级包括: 指令解码级; 读出级;指令执行级;以及 结果回写级。
全文摘要
一种管线处理器包括指令高速缓冲存储器(iCache)、分支目标地址高速缓冲存储器(BTAC)和处理级,所述处理级包含用于从所述iCache和所述BTAC进行提取的级。为了补偿从所述BTAC提取分支目标地址所需的循环的数目,所述从所述BTAC提取比从所述iCache提取分支指令提前一量,所述量与从所述BTAC提取所需的所述循环相关。所揭示的实例以实质上对应于比BTAC提取所需循环少一的量递减所述BTAC的写入地址或递增所述BTAC的提取地址。
文档编号G06F9/38GK101164043SQ200680013854
公开日2008年4月16日 申请日期2006年3月3日 优先权日2005年3月4日
发明者布赖恩·迈克尔·斯坦普尔, 托马斯·安德鲁·萨托里乌斯, 杰弗里·托德·布里奇斯, 罗德尼·韦恩·史密斯, 詹姆斯·诺里斯·迪芬德尔费尔 申请人:高通股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1