首页> 中国专利> 将多余的分支目标地址高速缓存项目无效化的装置及方法

将多余的分支目标地址高速缓存项目无效化的装置及方法

摘要

本发明公开了一种可将N路集合关联分支目标地址高速缓存(BTAC)中对同一分支指令所储存的多余项目无效化的装置及方法。一指令高速缓存提取地址的索引部分会被送入BTAC,以选取其中一具有N路的集合。控制逻辑则侦测该选取集合的N路中,是否有一个以上的路包含吻合该提取地址的标记部分的一个有效标记。一标志会被设定,以显示上述情况是否发生,而该提取地址则储存于一寄存器中。控制逻辑随后对于该N路中包含吻合该提取地址标记的有效标记的路,保留其中一路,其它路则予以无效化。由此可消除相同分支指令的多余目标地址,使BTAC可快取更多分支指令的目标地址,而增进BTAC的效率。

著录项

  • 公开/公告号CN1558325A

    专利类型发明专利

  • 公开/公告日2004-12-29

    原文格式PDF

  • 申请/专利权人 智慧第一公司;

    申请/专利号CN200410003271.9

  • 发明设计人 汤玛斯·麦当劳;

    申请日2004-02-03

  • 分类号G06F9/38;G06F12/08;

  • 代理机构隆天国际知识产权代理有限公司;

  • 代理人经志强

  • 地址 美国加利福尼亚佛蒙特市

  • 入库时间 2023-12-17 15:43:15

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2007-09-26

    授权

    授权

  • 2005-03-02

    实质审查的生效

    实质审查的生效

  • 2004-12-29

    公开

    公开

说明书

技术领域

本发明关于微处理器的分支预测(branch prediction)领域,特别是关于使用假想分支目标地址高速缓存的分支预测,即用以将多余的分支目标地址高速缓存项目无效化的装置及方法。

背景技术

现代的微处理器均为管线化微处理器。亦即,在微处理器的不同区块或管线阶段内,可同时执行好几个指令。Hennessy与Patterson将管线执行定义为多个指令可重迭执行的实作技术。参见计算器结构:量化方法(第二版),1996年由加州旧金山的Morgan Kaufmann出版公司印行,John L.Hennessy与David A.Patterson所著。接着,他们对管线执行做了以下精彩的解说:

管线与组装线类似。在汽车组装线中,有许多步骤,每个步骤对于汽车的建造都有某些贡献。每个步骤虽然是在不同的汽车上进行,但会与其它步骤并行地运作。在计算机管线中,每个步骤会完成指令的一部份。如同组装线,不同步骤会并行地完成不同指令的不同部份。这些步骤的每一个称为管线阶段或管线区段。这些阶段会将一个阶段连接至下个阶段,而形成管道--指令会从一端进入,经过这些阶段,并从另一端离开,就如同组装线中的汽车。

同步微处理器是根据时脉周期来运作。通常,每经过一时脉周期,指令就从微处理器管线的一个阶段传至另一阶段。在汽车组装线中,若某个阶段的工人因为没有汽车要组装而处于闲置状态,则此组装线的产能或效能便会降低。同样地,若微处理器阶段因未有指令要进行,而在一时脉周期处于闲置状态(通常称为管线泡沫(pipeline bubble)),则处理器的效能会降低。

管线泡沫的一个可能因素为分支指令。当处理器碰到一分支指令时,其必须决定此分支指令的目标地址,并从目标地址而非此分支指令后的下个循序地址开始提取指令。再有,若此分支指令为条件分支指令(即分支是否被采行,是依据一特定条件是否存在而定),则除了决定目标地址外,处理器必须判断是否采行此分支指令。由于最后解析目标地址和/或分支结果(即分支是否被采行)的管线阶段,通常都远远位于提取指令的阶段之后,泡沫便可能产生。

为解决这个问题,现代的微处理器一般都使用分支预测机制,以在管线早期预测目标地址及分支结果。分支预测机制的一个例子是分支目标地址高速缓存(BTAC),可在从微处理器的指令高速缓存提取指令的同时,预测分支结果与目标地址。当微处理器执行一分支指令,且明确决定要采行此分支及其目标地址时,此分支指令的地址及其目标地址会被写入BTAC。在下次从指令高速缓存提取此分支指令时,分支指令地址会命中BTAC,而BTAC在管线早期便可提供此分支指令的目标地址。

一个有效的BTAC可通过消除或减少泡沫的数量,来增进处理器的效能,否则处理器将因这些泡沫而浪费许多时间于等待分支指令的解析上。然而,当BTAC做了错误的预测时,管线中具有被错误提取指令的阶段皆会被清空,以利提取正确的指令,而在进行清空及提取的动作时,便会将泡沫引进管线。随着微处理器的管线愈做愈深,BTAC的效率对效能而言就变得非常关键。

BTAC的效率主要视BTAC的命中率而定。影响BTAC命中率的一项因素是,BTAC所储存的不同分支指令的目标地址数量。所储存的分支指令的目标地址愈多,BTAC愈有效率。然而,微处理器的晶粒大小总是有限,因此其内部功能方框如BTAC,便得做得愈小愈好。影响BTAC实际大小的一项因素,为BTAC内储存目标地址及相关信息的储存格大小。特别是,单端口的储存格一般比多端口储存格小。在一特定时脉周期内,由单端口储存格所组成的BTAC仅能被读取或写入,但两者不能同时进行,而多端口储存格所组成的BTAC则可同时被读取及写入。然而,多端口BTAC实际上比单端口BTAC来得大。这意味着,以相同的尺寸来说,多端口BTAC所能储存的目标地址数会比单端口BTAC少,因而降低BTAC的效率。因此,就此而言,单端口BTAC是较为理想的。

然而,单端口BTAC在一时脉周期内仅能读或写,而不能同时读写,可能会因为失误(miss)而降低BTAC的效率。若一单端口BTAC在其需要被读取的周期内被写入,像是以一个新的目标地址更新BTAC,或是将一目标地址无效化,则一个失误就产生了。在这种情况下,BTAC必须产生一读取的失误,因为其无法提供目标地址。不过,此目标地址仍有可能存在于BTAC中,因为BTAC在此时是被写入中。

因此,所需要的是一种可降低单端口BTAC中的失误的方法及装置。

另外一个会降低BTAC效率的现象,为BTAC重复储存同一个分支指令的目标地址。这现象可能发生在多路集合关联(multi-way set-associative)的BTAC。被重复储存所占用的BTAC项目,原本可用来储存其它分支指令的目标地址,现在却不行,由于BTAC的空间是有限的,如此将降低BTAC的效率。管线愈长,即阶段数愈多,BTAC就愈有可能储存重复的目标地址。

同一个分支指令被重复快取于BTAC的现象,最常发生在程序代码循环很小的情形。举例来说,一分支指令第一次被执行,由于BTAC的第2路是最近最少使用(least recently used)的路,所以分支指令的目标地址被写入第2路。然而,在目标地址被写到BTAC前,又再碰到此分支指令,亦即,由于目标地址尚未被写入BTAC,BTAC会因快取失误而查询指令高速缓存的提取地址。因此,目标地址会第二次被写入BTAC。若在这中间有插入另一不同分支指令读取BTAC的动作,使得第2路不再是最近最少使用的路,则会选取不同的路如第1路,第二次将目标地址写入BTAC。现在同一分支指令的目标地址就在BTAC中出现两次。如此会浪费BTAC的空间,且降低BTAC的效率,因为非常有可能第二次写入的动作取代掉另一个分支指令的有效目标地址。

因此,所需要的一种可避免浪费宝贵的BTAC空间的方法及装置,其中此种浪费是由于重复快取了相同分支指令的目标地址。

再者,与BTAC假想特质相关的现象的特定组合,会导致微处理器产生死结(deadlock)的情形。BTAC的假想分支预测、分支指令横跨不同指令快取线及提取假想指令的处理器总线作业会产生错误,这些现象的组合在某些情况下会造成死结。

发明内容

本发明的目的是提供一种可防止有使用假想BTAC的微处理器产生死结的方法及装置。

本发明提供一种可将BTAC中对同一分支指令所储存的多余项目无效化的方法及装置,以避免浪费BTAC的空间。为达到上述目的,本发明提供一种可将集合关联分支目标地址高速缓存(BTAC)中对同一分支指令所储存的一多余项目无效化的装置。此装置包括一状态指示器,其显示一指令高速缓存提取地址所选取BTAC的一集合中,是否至少有两路包含同一分支指令的有效分支目标地址。此装置亦包括一控制逻辑,耦接至该状态指示器,用以在状态指示器显示所选取的集合中,至少有两路包含同一分支指令的有效分支目标地址时,将该至少两路的其中一路无效化。

另一方面,本发明亦提供一种可将分支目标地址高速缓存(BTAC)中对同一分支指令所储存的多余项目无效化的装置。此装置包括一侦测逻辑,可侦测BTAC的一选取集合的复数个路中,是否有一个以上有效的路储存同一分支指令的目标地址。此装置亦包括一无效化逻辑,耦接至该侦测逻辑,对于此选取集合中的该一个以上有效的路,保留其中一个,而将所有其它的路无效化。

另一方面,本发明提供一种管线化微处理器。此微处理器包括一指令高速缓存,其具有一地址输入端,以接收一地址,选取包含一分支指令的快取线。此微处理器亦包括一分支目标地址高速缓存(BTAC),耦接至该指令高速缓存,可响应该地址而产生复数个指示信号。每一这些指示信号显示该地址所选取的BTAC的一集合中一对应路是否储存该分支指令的一有效目标地址。此微处理器亦包括一逻辑,耦接至BTAC,组态为在这些指示信号显示这些路其中二或更多个路储存该分支指令的有效目标地址时,将该选取集合的这些路其中一或更多个路无效化。

另一方面,本发明提供一种可将集合关联分支目标地址高速缓存(BTAC)中对同一分支指令所储存的多余项目无效化的方法。此方法包括判断一指令高速缓存提取地址的索引部分所选取的BTAC集合中,是否有一个以上的路的标记吻合该指令高速缓存提取地址的标记部分,及是否有效。此方法亦包括若该选取集合中有一个以上的路有效且吻合,则保留该选取集合其中一个路,而将所有其它的路无效化。

另一方面,本发明提供一种可将N路集合关联分支目标地址高速缓存(BTAC)的同一集合中,对同一分支指令所储存的一多余项目无效化的方法。此方法包括依照一指令提取地址的较低部分选取BTAC的一N路集合。此方法亦包括将该N路集合的N个对应路的N个地址标记与该指令提取地址的较高部分作比较。此方法亦包括判断该N个地址标记中是否有二或更多个标记吻合该较高部分且为有效。此方法亦包括若该N个地址标记中,有二或更多个标记吻合该较高部分且为有效,则将该有效的N个地址标记中,吻合该较高部分的该二或更多个标记所对应的该N路的一或更多个路无效化。

另一方面,本发明提供一种内含于传输媒介中的计算机数据信号。此计算机数据信号包括计算机可读取程序代码,以提供一种管线化微处理器。此程序代码包括第一程序代码,以提供一指令高速缓存,其具有一地址输入端,以接收一地址,选取包含一分支指令的快取线。此程序代码亦包括第二程序代码,以提供一分支目标地址高速缓存(BTAC),耦接至该指令高速缓存,可响应该地址而产生复数个指示信号。每一这些指示信号显示该地址所选取的BTAC的一集合中一对应路是否储存该分支指令的一有效目标地址。此程序代码亦包括第三程序代码,以提供一逻辑,耦接至BTAC,组态为在这些指示信号显示这些路其中二或更多个路储存该分支指令的有效目标地址时,将该选取集合的这些路其中一或更多个路无效化。

本发明的一项优点是,可藉由消除相同分支指令的多余目标地址,使BTAC可快取更多分支指令的目标地址,而增进BTAC的效率。

本发明的其它特征及优点,在配合下列说明及附图后,将更能突显出来。

附图说明

图1是本发明的微处理器的方框图。

图2是更详细绘示本发明图1的部分微处理器的方框图。

图3是依本发明更详细绘示图1的BTAC的方框图。

图4是本发明图3的目标地址数组项目的内容的方框图。

图5是本发明图3的标记数组项目的内容的方框图。

图6是本发明图3的计数器数组项目的内容的方框图。

图7是本发明图1的BTAC写入要求的内容的方框图。

图8是本发明图1的BTAC写入队列的方框图。

图9是本发明图1的BTAC写入队列的运作流程图。

图10是本发明微处理器内,用以将图1的BTAC中的多余目标地址无效化的逻辑的方框图。

图11是本发明图10的多余目标地址装置的运作流程图。

图12是本发明图1微处理器内的死结避免逻辑的方框图。

图13是本发明图12的死结避免逻辑的运作流程图。

其中,附图标记说明如下:

100:微处理器                 102:指令提取器

104:指令高速缓存             106:指令缓冲器

108:指令格式化器             112:格式化指令队列

114:指令转译器               116:转译指令队列

118:寄存器阶段               122:地址阶段

124:资料阶段                 126:执行阶段

128:储存阶段                 132:回写阶段

134:加法器                   136:多任务器

138:指令

142:分支目标地址高速缓存(BTAC)

144:BTAC写入队列(BWQ)        146:队列深度

148:多任务器                 152:分支预测错误

154:预测取代信号             156:指令缓冲器充满信号

158:指令高速缓存闲置信号     162:现行提取地址

164:BTAC预测目标地址         166:下个循序提取地址

168:现行指令指针             172:正确地址

174:取代预测目标地址         176:BTAC写入要求

178:BTAC写入队列地址         182:地址信号

202:仲裁器                   206:多任务器

212:BTAC读取要求信号         214:多余TA要求信号

216:死结要求信号             218:BWQ非空信号

222:BWQ充满信号              234:多余TA地址

236:死结地址

244:多余TA数据信号           246:死结数据信号

248:BWQ数据信号            252:控制信号

256:数据信号               258:控制信号

262:控制信号

302:目标地址数组           304:标记数组

306:计数器数组             312:目标地址数组项目

314:标记数组项目           316:计数器数组项目

402:目标地址(TA)           404:起始字段

406:横跨位

502:标记                   504:A有效位

506:B有效位                508:lru字段

602:预测状态A计数器        604:预测状态B计数器

606:A/B lru位

702:分支指令地址字段       706:目标地址

708:起始字段               712:横跨位

714:写入致能-A字段         716:写入致能-B字段

718:无效化-A字段           722:无效化-B字段

724:路字段

802:BTAC写入要求项目       804:有效位

806:控制逻辑

902~922:BTAC写入队列的运作流程

1002A:tag0                 1002B:tag1

1002C:tag2                 1002D:tag3

1004:valid[7:0]            1006A:match0

1006B:match1               1006C:match2

1006D:match3               1012:比较器

1014:控制逻辑

1022:多余TA无效化数据寄存器

1024:多余TA标志寄存器

1026:多余TA地址寄存器

1102~1112:多余目标地址装置的运作流程

1024:多余TA标志寄存器

1026:多余TA地址寄存器

1102~1112:多余目标地址装置的运作流程

1202:F_wrap信号                 1204:控制信号

1206:失误信号                   1208:假想信号

1212:T/NT信号                   1214:F_wrap信号

1222:死结无效化数据寄存器       1224:死结标志寄存器

1226:死结地址寄存器

1302~1322:死结避免逻辑的运作流程

具体实施方式

现请参照图1,是本发明的微处理器100的方框图。微处理器100包括一管线化处理器。

微处理器100包括一指令提取器102。指令提取器102从耦接至微处理器100的内存,如系统内存,提取指令138。在一实施例中,指令提取器102从内存提取总长为快取线大小的倍数的指令138。在一实施例中,指令138是具有可变长度的指令。亦即,在微处理器100的指令集中,所有指令的长度并非相同。在一实施例中,微处理器100包括一微处理器,其指令集实质上符合x86架构指令集,后者的指令长度为可变的。

微处理器100亦包括一指令高速缓存104,耦接至指令提取器102。指令高速缓存104从指令提取器102接收包含指令字节的快取线,并快取指令快取线,以供微处理器100后续使用。在一实施例中,指令高速缓存104包含一64KB的四路集合关联第一阶高速缓存(level-1 cache)。当某个指令在指令高速缓存104中找不到,指令高速缓存104会告知指令提取器102,后者即从内存提取包含该指令的快取线。一现行提取地址162会被送入指令高速缓存104,以选取其中的一条快取线。在一实施例中,指令高速缓存104的快取线包含32个字节。指令高速缓存104亦产生一指令高速缓存闲置信号158。指令高速缓存104处于闲置状态时,指令高速缓存104会产生真值的指令高速缓存闲置信号158。当指令高速缓存104未被读取时,即处于闲置令缓冲器106从指令高速缓存104接收包含指令字节的快取线,并缓冲这些快取线,直到其可被格式化为个别指令,由微处理器100执行为止。在一实施例中,指令缓冲器106包含四个项目,最多可储存四条快取线。指令缓冲器106并产生一指令缓冲器充满信号156。当指令缓冲器106已满时,指令缓冲器106会产生真值的指令缓冲器充满信号156。在一实施例中,若指令缓冲器106已满,BTAC 142即不被读取。

在一实施例中,微处理器100亦包括一指令格式化器(instructionformatter)108,其耦接至指令缓冲器106。指令格式化器108会从指令缓冲器106接收指令字节,并从中产生格式化指令。亦即,指令格式化器108会查看指令缓冲器106中的一串指令字节,判断哪个字节包括下个指令以及下个指令的长度,并输出下个指令及其长度。在一实施例中,格式化指令包括实质上符合x86架构指令集的指令。

指令格式化器108亦包括用以产生分支目标地址的逻辑,而此分支目标地址称为取代预测目标地址(override predicted target address)174。在一实施例中,该分支目标地址产生逻辑包括一加法器,用以将一相关分支指令的偏移量加到一分支指令地址,以产生取代预测目标地址174。在另一实施例中,该逻辑包含一呼叫/返回堆栈,以产生呼叫与返回指令的目标地址。指令格式化器108亦产生一预测取代信号154。指令格式化器108产生真值的预测取代信号154,以取代微处理器100中的分支目标地址高速缓存(BTAC)142所做的分支预测,下文将详细叙述。亦即,若指令格式化器108中的该逻辑所产生的目标地址不吻合BTAC 142所产生的目标地址,则指令格式化器108产生真值的预测取代信号154,以使得因BTAC 142的预测所提取的指令被清空,并使微处理器100分支至取代预测目标地址174。在一实施例中,在指令被清空且微处理器100分支至取代预测目标地址174的一部分期间,BTAC 142不被读取。

微处理器100亦包括一格式化指令队列112,耦接至指令格式化器108。格式化指令队列112从指令格式化器108接收格式化指令,并予以缓冲,直到其被转译成微指令为止。在一实施例中,格式化指令队列112包含复数个项目,最多可储存12个格式化指令,虽然图12仅显示了四个项目。

微处理器100亦包括一指令转译器114,耦接至格式化指令队列112。指令转译器114将格式化指令队列112所储存的格式化巨指令转译成微指令。在一实施例中,微处理器100包括一精简指令集计算机(RISC)核心,可执行原生(native)或精简指令集的微指令。

微处理器100亦包括一转译指令队列116,耦接至指令转译器114。转译指令队列116从指令转译器114接收转译微指令,并予以缓冲,直到其可由微处理器管线的其余部分执行为止。

微处理器100亦包括一寄存器阶段118,耦接至转译指令队列116。寄存器阶段118包含复数个寄存器,以储存指令操作数及结果。寄存器阶段118包含一使用者可见寄存器档案,以储存微处理器100的使用者可见状态。

微处理器100亦包括一地址阶段122,耦接至寄存器阶段118。地址阶段122包含地址产生逻辑,可为需存取内存的指令产生内存地址,如加载或储存指令及分支指令。

微处理器100亦包括数据阶段124,耦接至地址阶段122。数据阶段124包括用以从内存加载数据的逻辑,以及用以快取从内存所加载数据的一或更多个高速缓存。

微处理器100亦包括执行阶段126,耦接至数据阶段124。执行阶段126包括用以执行指令的执行单元,如执行算术与逻辑指令的算术与逻辑单元。在一实施例中,执行阶段126包含一整数执行单元、一浮点执行单元、一MMX执行单元以及一SSE执行单元。执行阶段126亦包含用以解析分支指令的逻辑。特别是,执行阶段126会判断一分支指令是否被采行,以及BTAC142先前是否曾错误预测该分支指令会被采行。此外,执行阶段126会判断BTAC 142先前所预测的分支目标地址,是否被BTAC 142错误地预测,亦即是否错误。若执行阶段126判断-先前的分支预测为错误,则执行阶段126会产生真值的分支预测错误信号152,以使得因BTAC 142的错误预测所提取的指令被清空,并使微处理器100分支至正确地址172。在一实施例中,在指令被清空且微处理器100分支至正确地址172的一部分期间,BTAC 142不被读取。

微处理器100亦包括一储存阶段128,耦接至执行阶段126。储存阶段128包含可响应储存微指令以储存数据至内存的逻辑。储存阶段128产生一正确地址172。正确地址172是用以更正由分支预测错误信号152所指出的先前错误的分支预测。正确地址172包含一分支指令的正确分支目标地址。亦即,正确地址172是一分支指令的非假想(non-speculative)目标地址。当一分支指令被执行与解析时,正确地址172亦被写入BTAC 142中,如下文所详述的。储存阶段128亦产生一BTAC写入要求176,以更新BTAC 142。BTAC写入要求176在下文关于图7部分将做更详细地说明。

微处理器100亦包括一回写阶段132,耦接至储存阶段128。回写阶段132包含用以将指令结果写入寄存器阶段118的逻辑。

微处理器100亦包括BTAC 142。BTAC 142包含一高速缓存,以快取目标地址及其它分支预测信息。BTAC 142可响应从一多任务器148所接收的地址182,产生一预测目标地址164。在一实施例中,BTAC 142包含一单端口高速缓存,BTAC 142的读取与写入动作必须分享其存取权,如此可能会产生BTAC 142的假失误。BTAC 142与多任务器148将在下文做更详细说明。

微处理器100亦包括一耦接至BTAC 142的多任务器136。多任务器136选取其六个输入中的某一个,作为现行提取地址162而输出。其中一个输入是由一加法器134所产生的下个循序提取地址166,加法器134是将现行提取地址162递增一条快取线的大小,而产生下个循序提取地址166。在从指令高速缓存104正常提取一快取线后,多任务器136选取下个循序提取地址166,以输出作为现行提取地址162。另一个输入是现行提取地址162。另一个输入是BTAC预测目标地址164,若BTAC 142指出有一分支指令存在于由现行提取地址162从指令高速缓存104所选取的快取线中,且BTAC 142预测该分支指令将被采行,则多任务器136会选取此BTAC预测目标地址164。另一个输入是从储存阶段128所接收的正确地址172,多任务器136选取此输入以更正一错误的分支预测。另一个输入是从指令格式化器108接收的取代预测目标地址174,多任务器136选取此输入以取代BTAC预测目标地址164。另一个输入是现行指令指针168,其指出现在正被指令格式化器108格式化的指令的地址。多任务器136会选取现行指令指针168,以避免死结的情形,如下所述。

微处理器100亦包括一耦接至BTAC 142的BTAC写入队列(BWQ)144。BTAC写入队列144包含复数个储存组件,以缓冲BTAC写入要求176,直到其可被写入BTAC 142。BTAC写入队列144可接收分支预测错误信号152、预测取代信号154、指令缓冲器充满信号156及指令高速缓存闲置信号158。较佳者,BTAC写入队列144会延迟以BTAC写入要求176更新BTAC 142的动作,直到一适当时刻为止,亦即当BTAC 142不被读取时,此如输入信号152至158所显示的。藉此,可增加BTAC 142的效率,下文将更详细叙述。

BTAC写入队列144产生一BTAC写入队列地址178,以作为多任务器148的一个输入。BTAC写入队列144亦包括一个储存目前队列深度146的寄存器。队列深度146指出目前储存于BTAC写入队列144中的有效BTAC写入要求176的数量。队列深度的初始值为零。每当有一BTAC写入要求176被收入BTAC写入队列144,队列深度146即随之递增。而每当有一BTAC写入要求176从BTAC写入队列144移除,队列深度146即随之递减。BTAC写入队列144在下文会做更详细描述。

图2是依本发明更详细绘示图1的部分微处理器100的方框图。图2除了显示出耦接于BTAC写入队列144与BTAC 142间的仲裁器202及具三输入端的多任务器206,还显示图1的BTAC写入队列144、BTAC 142及多任务器148。虽然多任务器148在图1中仅显示了两个输入端,其实际上是具有四个输入端的多任务器,如图2所示。图2中,BTAC 142包括一读/写输入端、一地址输入端及一数据输入端。

如图1所示,多任务器148会接收现行提取地址162与BWQ地址178。此外,多任务器148会接收一多余TA地址234与一死结地址236,这些分别在下文关于图10-11与图12-13的部分做更详细地说明。多任务器148选取四个输入其中之一,而输出图1的地址信号182,其是依据仲裁器202所产生的控制信号258,而送至BTAC 142的地址输入端。

多任务器206会接收一多余TA数据信号244与一死结数据信号246作为输入,这些分别在下文关于图10-11与图12-13的部分做更详细地说明。多任务器206亦从BTAC写入队列144接收一BWQ数据信号248作为输入,此信号248为目前BTAC写入队列144的要求的数据,用以更新BTAC 142。多任务器206选取三个输入其中之一,而输出一数据信号256,其是依据仲裁器202所产生的控制信号262,而送至BTAC 142的数据输入端。

仲裁器202在复数个要求存取BTAC 142的资源间做仲裁。仲裁器202产生一信号252,其于BTAC 142被读取或写入时,被送至BTAC 142的读/写输入端。仲裁器202接收一BTAC读取要求信号212,其显示一个使用现行提取地址162读取BTAC 142的要求,此要求是与一个也使用现行提取地址162读取指令高速缓存104的要求同时并行。仲裁器202也接收一多余目标地址(TA)要求信号214,其显示的要求,是要在BTAC 142中,将多余目标地址234所选取集合中的相同分支指令的多余项目无效化。仲裁器202亦接收一死结要求信号216,其显示一个要将BTAC 142的一项目无效化的要求,此项目是错误地预测在死结地址236所选取集合中之一分支指令并未横跨一快取线边界,如下所述。仲裁器202亦从BTAC写入队列144接收一BWQ非空信号216,其显示至少有一要求,等待着要更新BTAC 142中,由BWQ地址178所选取集合中的一个项目,如下所述。仲裁器202亦从BTAC写入队列144接收一BWQ充满信号222,其显示BTAC写入队列144是充满了要求,等待要更新BTAC 142中,由BWQ地址178所选取集合中的一个项目,如下所述。

在一实施例中,仲裁器202依下表1所示来分派优先级,其中1为最高优先序,而5为最低优先序。

                1-死结要求216

                2-BWQ充满222

                3-BTAC读取要求212

                4-多余TA要求214

                5-BWQ非空218

                     表1

图3是依本发明更详细绘示图1的BTAC 142的方框图。如图3所示,BTAC 142包括一目标地址数组302、一标记数组304及一计数器数组306。每个数组皆接收图1的地址182。图3的实施例是显示一个四路集合关联的BTAC 142高速缓存。在另一实施例中,BTAC 142包含一个双路集合关联高速缓存。在一实施例中,目标地址数组302与标记数组304为单端口数组;然而,计数器数组306为双端口数组,具有一读取端口与一写入端口,此因计数器数组306比起目标地址数组302与标记数组304,更需要经常更新。

目标地址数组302包含一储存组件数组,以储存目标地址数组项目312,这些项目是用来快取分支目标地址与相关分支预测信息。目标地址数组项目312的内容将在下文图4部分做说明。标记数组304包含一储存组件数组,以储存标记数组项目314,这些项目是用来快取地址标记与相关分支预测信息。标记数组项目314的内容将在下文图5部分做说明。计数器数组306包含一储存组件数组,以储存计数器数组项目316,这些项目是用来储存分支结果预测信息。计数器数组项目316的内容将在下文图6部分做说明。

前述每个数组皆配置为四路,标示为路0、路1、路2及路3。较佳的是,目标地址数组302的每一路皆储存两个项目或部分,标示为A与B,用以快取一分支目标地址与假想分支信息,如此若有两个分支指令存在于一快取线中,则BTAC 142可对适当的分支指令做出预测。

前述每个数组是由图1的地址182做索引。地址182的较低有效位会在每个数组中选取一快取线。在一实施例中,每个数组包含128个集合。由于128个集合各有四路,每一路各存两个,所以BTAC 142最多可快取1024个目标地址。较佳的是,每个数组是以地址182的位[11:5]做索引,以选取BTAC142中的一四路集合。

图4是依本发明绘示图3的目标地址数组项目312的内容的方框图。

目标地址数组项目312包括一分支目标地址(TA)402。在一实施例中,目标地址402包含一32位的地址,其是前次执行一分支指令后所快取的。BTAC 142于预测TA输出164中,提供目标地址402。

目标地址数组项目312亦包括一起始字段404。起始字段404指出,该分支指令的第一个字节,在指令高速缓存104响应现行提取地址162所输出的快取线中的字节偏移量。在一实施例中,一快取线包含32个字节;因此,起始字段404包含5个位。

目标地址数组项目312亦包括一横跨位406。若所预测的分支指令横跨指令高速缓存104的两条快取线,则横跨位406为真。BTAC 142是于一B_wrap信号1214中提供横跨位406,此将于下文图12部分说明。

图5是依本发明绘示图3的标记数组项目314的内容的方框图。

标记数组项目314包含一标记502。在一实施例中,标记502包含该分支指令的地址较高的20个位,而目标地址数组302中该分支指令的对应项目,则储存一预测目标地址402。BTAC 142会将标记502与图1的地址182较高的20个位作比较,以判断该对应项目是否吻合地址182,亦即地址182是否命中BTAC 142,若该项目为有效的话。

标记数组项目314亦包含一A有效位504,若目标地址数组302中的对应项目的A部分所存的目标地址402为有效,则此A有效位504为真。标记数组项目314亦包含一B有效位506,若目标地址数组302中的对应项目的B部分所存的目标地址402为有效,则此B有效位506为真。

标记数组项目314亦包括一个三位的lru字段508,以指出在所选取集合的四路中,哪一路是最近最少被使用的。在一实施例中,BTAC 142只在一BTAC分支被执行时,才更新lru字段508。亦即,BTAC 142只在BTAC 142预测一分支指令将被采行,且微处理器100依据此预测,分支至BTAC 142所提供的预测目标地址164时,才更新lru字段508。BTAC 142是于该BTAC分支正被执行时更新lru字段508,在此期间BTAC 142并未被读取,且并未要求使用BTAC写入队列144。

图6是依本发明绘示图3的计数器数组项目316的内容的方框图。

计数器数组项目316包括一预测状态A计数器602。在一实施例中,预测状态A计数器602为一个两位的饱和计数器,每次当微处理器100判断出相关分支指令要被采行,即往上数,而每次当判断出相关分支指令不被采行,即往下数。预测状态A计数器602在往上数时,会饱和于b’11的二进制值,往下数时则饱和于b’00的二进制值。在一实施例中,若预测状态A计数器602的值为b’11或b’10,则BTAC 142会预测所选取目标地址数组项目312的A部分的相关分支指令要被采行;否则,BTAC 142会预测此相关分支指令不被采行。计数器数组项目316亦包括一预测状态B计数器604,运作方式近似于预测状态A计数器602,不过其是相关于所选取目标地址数组项目312的B部分来运作。

计数器数组项目316亦包括一A/B lru位606。二进制值为b’1的A/B lru位606,表示所选取目标地址数组项目312的A部分为最近最少被使用的;否则,所选取目标地址数组项目312的B部分为最近最少被使用的。在一实施例中,当分支指令抵达判断分支结果(亦即此分支是否被采行)的储存阶段128时,A/B lru位606会随着预测状态A与B计数器602与604被更新。在一实施例中,更新计数器数组项目316并不需使用BTAC写入队列144,因为计数器数组306包括一读取端口与一写入端口,如前文图3部分所述。

图7是依本发明绘示图1的BTAC写入要求176的内容的方框图。图7显示了储存阶段128所产生的用来更新一BTAC 142项目的信息,此信息包含于BTAC写入要求信号176而送至BTAC写入队列144,且亦为一个BTAC写入队列144的项目的内容,如图8所示。

BTAC写入要求176包括一分支指令地址字段702,其是一先前执行的分支指令的地址,BTAC 142则因该分支指令而将被更新。当写入要求176随后更新BTAC 142时,分支指令地址702较高的20个位即被存入图5的标记数组项目314的标记字段502。分支指令地址702较低的7个位[11:5]则作为BTAC 142的索引使用。在一实施例中,分支指令地址702为一32位的字段。

BTAC写入要求176亦包括一目标地址706,用以存入图4的目标地址字段402。

BTAC写入要求176亦包括一起始字段708,用以存入图4的起始字段404。BTAC写入要求176亦包括一横跨位712,用以存入图4的横跨位406。

BTAC写入要求176亦包括一写入致能-A字段714,其指定是否要以BTAC写入要求176所指定的信息,来更新所选取的目标地址数组项目312的A部分。BTAC写入要求176亦包括一写入致能-B字段716,其指定是否要以BTAC写入要求176所指定的信息,来更新所选取的目标地址数组项目312的B部分。

BTAC写入要求176亦包括一无效化-A字段718,其指定是否要将所选取的目标地址数组项目312的A部分无效化。将所选取目标地址数组项目312的A部分无效化的动作,包含清除图5的A有效位504。BTAC写入要求176亦包括一无效化-B字段722,其指定是否要将所选取的目标地址数组项目312的B部分无效化。将所选取目标地址数组项目312的B部分无效化的动作,包含清除图5的B有效位506。

BTAC写入要求176亦包括一个4位的路字段724,其指定要更新所选取集合的哪一路。路字段724是被完全译码的。在一实施例中,当微处理器100读取BTAC 142以取得一分支预测时,微处理器100即决定要存入路字段724的值,并将此值顺着管线阶段传送至储存阶段128,以包含在BTAC写入要求176之中。若微处理器100正在更新BTAC 142的一即存项目,例如,若现行提取地址162命中BTAC 142,则微处理器100将该即存项目所在的路,存入路字段724。若微处理器100正在写入BTAC 142的一新项目,例如,由于一新的分支指令而进行写入,则微处理器100将所选取的BTAC142集合的最近最少被使用的路,存入路字段724。在一实施例中,当微处理器100读取BTAC 142以取得该分支预测时,微处理器100即从图5的lru字段508,判断出最近最少被使用的路。

图8是依本发明绘示图1的BTAC写入队列144的方框图。

BTAC写入队列144包括复数个储存组件802,以储存图7的BTAC写入要求176。在一实施例中,BTAC写入队列144包括六个储存组件802,以储存六个BTAC写入要求176。

对于每个BTAC写入要求项目802,BTAC写入队列144亦包括一对应的有效位804,其值在对应项目为有效时为真,无效时为假。

BTAC写入队列144亦包括一控制逻辑806,耦接至储存组件802与有效位804。控制逻辑806亦耦接至队列深度寄存器146。当一BTAC写入要求176被加载BTAC写入队列144时,控制逻辑806将队列深度146递增,而当一BTAC写入要求176被移出BTAC写入队列144时,则将队列深度146递减。控制逻辑806从图1的储存阶段128接收BTAC写入要求信号176,并将接收到的要求存入项目802。控制逻辑806亦接收图1的分支预测错误信号152、预测取代信号154、指令缓冲器充满信号156及指令高速缓存闲置信号158。每当队列深度146大于零时,控制逻辑806即产生真值的图2的BWQ非空信号218。每当队列深度146的值等于项目802的总数(在图8的实施例中为六),控制逻辑806即产生真值的图2的BWQ充满信号222。当控制逻辑806产生真值的BWQ非空信号218时,控制逻辑806亦在图1的BWQ地址信号178中,提供BTAC写入队列144的最老(或底部)项目802的图7的分支指令地址702。此外,当控制逻辑806产生真值的BWQ非空信号218时,控制逻辑806亦在BWQ数据信号248中,提供BTAC写入队列144的最老(或底部)项目802的图7的字段706至724。

图9是依本发明绘示图1的BTAC写入队列144的运作流程图。流程开始于判断方框902。

于判断方框902中,BTAC写入队列144藉由判断图1的队列深度146是否等于BTAC写入队列144的项目总数,来判断其是否已满。若是,则流程进行至方框918,以更新BTAC 142;否则,流程进行至判断方框904。

于判断方框904中,BTAC写入队列144藉由检查指令高速缓存闲置信号158,来判断图1的指令高速缓存104是否闲置。若是,则流程进行至判断方框922,以在必要时更新BTAC 142,因为BTAC 142此时很可能不被读取;否则,流程进行至判断方框906。

于判断方框906中,BTAC写入队列144藉由检查指令缓冲器充满信号156,来判断图1的指令缓冲器106是否已满。若是,则流程进行至判断方框922,以在必要时更新BTAC 142,因为BTAC 142此时很可能不被读取;否则,流程进行至判断方框908。

于判断方框908中,BTAC写入队列144藉由检查预测取代信号154,来判断一BTAC 142分支预测是否已被取代。若是,则流程进行至判断方框922,以在必要时更新BTAC 142,因为BTAC 142此时很可能不被读取;否则,流程进行至判断方框912。

于判断方框912中,BTAC写入队列144藉由检查分支预测错误信号152,来判断一BTAC 142分支预测是否已被更正。若是,则流程进行至判断方框922,以在必要时更新BTAC 142,因为BTAC 142此时很可能不被读取;否则,流程进行至判断方框914。

于判断方框914中,BTAC写入队列144判断是否已产生一BTAC写入要求176。若否,则流程返回至判断方框902;否则,流程进行至方框916。

于方框916中,BTAC写入队列144 BTAC加载该BTAC写入要求176,并将队列深度146递增。该BTAC写入要求176被加载BTAC写入队列144中最顶端的无效项目,而后该项目即被标示为有效。流程接着返回至判断方框902。

于方框918中,BTAC写入队列144以其最老(或底部)项目来更新BTAC142,并将队列深度146递减。BTAC写入队列144接着向下移动一个项目。BTAC写入队列144藉由在BWQ地址信号178中,提供该最老项目的图7的分支指令地址字段702的值,并藉由在BWQ数据信号248中,提供该最老的BTAC写入要求176项目的其余部分,而以该最老项目来更新BTAC142。此外,BTAC写入队列144将BWQ非空信号218设为真值,送至图2的仲裁器202。若方框918是从判断方框902抵达,则BTAC写入队列144亦将BWQ充满信号222设为真值,送至图2的仲裁器202。流程从方框918进行至判断方框914。

需注意的是,在BTAC读取要求信号212等待处理的一个时脉周期中,若BTAC写入队列144将BWQ充满信号222设为真,且仲裁器202准许BTAC写入队列144存取BTAC 142,则BTAC 142将发出信号表示有一失误产生。若事实上在BTAC 142中,对于现行提取地址162所指定的快取线中BTAC 142预测要被采行的分支指令,有存在一有效的目标地址,则前述失误即可能是假失误。然而,有利的是,由于在大部分情况下,BTAC 142的写入动作可以延迟到BTAC 142不被读取时,因而BTAC写入队列144可降低BTAC 142产生假失误的机会。

于判断方框922中,BTAC写入队列144藉由判断队列深度是否等于零,来判断BTAC写入队列144是否为空。若是,则流程进行至判断方框914;否则,流程进行至判断方框918,以在必要时更新BTAC 142,因为BTAC 142此时很可能不被读取。

图10是依本发明绘示微处理器100内,用以将图1的BTAC 142中的多余目标地址无效化的逻辑的方框图。

图10显示了图3的BTAC 142标记数组304接收图1的地址182,并响应产生四个标记:tag0 1002A、tag1 1002B、tag2 1002C及tag3 1002D,总称为标记1002。标记1002包含图5的一标记502,其从标记数组304的四路的每一路而来。此外,标记数组响应地产生标示为1004的八个valid[7:0]位,其为从标记数组304的四路的每一路而来的A有效位504与B有效位506。

微处理器100亦包括可接收地址182的比较器1012,其耦接至标记数组304。在图10的实施例中,比较器1012包含四个20位的比较器,每个比较器用以将地址182较高的20个位与一对应的标记1002做比较,以产生四个对应的吻合信号:match0 1006A、match1 1006B、match2 1006C及match31006D,总称为1006。若地址182吻合标记1002中对应的一个,则对应的比较器1012产生真值的对应吻合信号1006。

微处理器100亦包括可接收吻合信号1006与有效信号1004的控制逻辑1014,其耦接至比较器1012。若所选取的标记数组304的集合中,有一个以上的路具有一真值的吻合信号1006,及至少一真值的有效位1004,则控制逻辑1014会储存一真值于一多余TA标志寄存器1024,以显示同一分支指令有多于一个的有效目标地址存于BTAC 142中。此外,控制逻辑1014会使地址182被加载一多余TA寄存器1026。最后,控制逻辑1014将多余TA无效化数据加载一多余TA无效化数据寄存器1022。在一实施例中,储存于多余TA无效化数据寄存器1022中的数据,近似于图7的一BTAC写入要求176,除了分支指令地址702并未储存,此因分支指令的地址储存于多余TA地址寄存器1026中;目标地址706、起始位708及横跨位712亦未储存,此因在一无效的BTAC 142项目中,这些字段都是毋须在意的;因此,当一多余TA无效化的动作执行时,目标地址数组302并未被写入,仅有标记数组304被更新,以将多余的BTAC 142项目无效化。多余TA无效化数据寄存器1022的输出包含图2的多余TA数据信号244。多余TA标志寄存器1024的输出包含图2的多余TA要求214。多余TA地址寄存器1026的输出则包含图2的多余TA地址234。在一实施例中,用以产生储存于多余TA无效化数据寄存器1022与多余TA标志寄存器1024的路值724的等式,如下表2所示。在表2中,valid[3]包含A valid[3]504与B valid[3]506的逻辑“或”运算;valid[2]包含A valid[2]504与B valid[2]506的逻辑“或”运算;valid[1]包含A valid[1]504与B valid[1]506的逻辑“或”运算;valid[0]则包含Avalid[0]504与B valid[0]506的逻辑“或”运算。

redundantInvalWay[3]=(valid[3]&match[3])&((valid[0]&match[0])|(valid[1]&match[1])|(valid[2]&match[2]));

redundantInvalWay[2]=(valid[2]&match[2])&((valid[0]&match[0])|(valid[1]&match[1]));

redundantInvalWay[1]=(valid[1]&match[1])&(valid[0]&match[0]);

redundantInvalWay[0]=0;/*路0不会被无效化*/

redundantTAFlag=((valid[3]&match[3])&(valid[2]&match[2]))|

((valid[3]&match[3])&(valid[1]&match[1]))|

((valid[3]&match[3])&(valid[0]&match[0]))|

((valid[2]&match[2])&(valid[1]&match[1]))|

((valid[2]&match[2])&(valid[0]&match[0]))|

((valid[1]&match[1])&(valid[0]&match[0]));

                            表2

为了正确了解图10的多余目标地址无效化逻辑的运作,如下文图11部分所述,以下将以一种执行指令的顺序为例,来描述可能在BTAC 142中产生相同分支指令的多余目标地址项目的情形。

图1的第一现行提取地址162被送入指令高速缓存104与BTAC 142。由第一现行提取地址162所选取的快取线中,包含一分支指令,称为分支-A。第一现行提取地址162选取了BTAC 142的一集合,称为集合N。集合N的所有路中,并无任何标记1002吻合第一现行提取地址162;因此,BTAC 142产生了一个失误。在此例中,lru值508所显示的最近最少被使用的路为2。因此,解析分支-A所得的用来更新BTAC 142的信息,就随着分支-A指出路2需被更新的信息,皆沿管线而下。

接着,第二现行提取地址162被送入指令高速缓存104与BTAC 142。由第二现行提取地址162所选取的快取线中,包含一分支指令,称为分支-B。第二现行提取地址162亦选取集合N,并命中集合N的路3;因此,BTAC 142产生了一个命中。此外,BTAC 142更新集合N的lru值508为路1。

接着,由于分支-A在一小程序代码循环中,第一现行提取地址162再次被送入指令高速缓存104与BTAC 142,并再次选取集合N。因为分支-A的第一次执行还未抵达图1的储存阶段128,所以并未以分支-A的目标地址来更新BTAC 142。因此,BTAC 142再次产生失误。然而,这次lru值508所显示的最近最少被使用的路为1,此乃由于lru 508已因分支-B的命中而被更新。因此,解析第二次执行分支-A所得的用来更新BTAC 142的信息,就随着第二个分支-A指出路1需被更新的信息,沿着管线而下。

接着,第一个分支-A抵达储存阶段128,并产生一BTAC写入要求176,以使用分支-A的目标地址来更新集合N的路2,分支-A随后即被执行。

接着,第二个分支-A抵达储存阶段128,并产生一BTAC写入要求176,以使用分支-A的目标地址来更新集合N的路1,分支-A随后即被执行。结果是,对于相同的分支指令,分支-A,BTAC 142中存在有两个有效项目。其中一个项目是多余的,会使BTAC 142在使用上缺乏效率,因为多余的项目原本可用于另一分支指令,且/或可能取代掉别的分支指令的有效目标地址。

图11是依本发明图10的多余目标地址装置的运作流程图。流程开始于方框1102。

于方框1102中,仲裁器202准许图2的BTAC读取要求212存取BTAC142,使得多任务器148选取现行提取地址162,以提供于图1的地址信号182中,并产生图2的控制信号252,以显示要进行BTAC 142的读取。因此,现行提取地址162的较低有效位是经由地址182作为索引使用,以选取BTAC 142的一集合。流程进行至方框1104。

于方框1104中,比较器1012将所选取的BTAC 142集合的所有四路的图10的标记1002,与地址信号182中所提供的现行提取地址162的较高有效位作比较,以产生图10的吻合信号1006。控制逻辑1014会接收图10的吻合信号1006与有效位1004。流程进行至判断方框1106。

于判断方框1106中,控制逻辑1014判断是否有一个以上的有效标记吻合的情形产生。亦即,控制逻辑1014依据有效位1004与吻合信号1006,判断在现行提取地址162所选取的BTAC 142集合中,是否有二或更多路具有一有效的吻合标记1002。若是,则流程进行至方框1108;否则流程结束。

于方框1108中,控制逻辑1014将一真值储存于多余TA标志寄存器1024中,且将地址182储存于多余TA地址寄存器1026,并将无效化数据存于多余TA无效化数据寄存器1022。尤其,控制逻辑1014将真值的we-A 714、we-B 716、inv-A 718及inv-B 722存入多余TA无效化数据寄存器1022。此外,控制逻辑1014还把依据前文图10部分所述的表2所得的值,存入多余TA无效化数据寄存器1022的路字段724。流程进行至方框1112。

于方框1112中,仲裁器202准许图2的多余TA要求214存取BTAC 142,使得多任务器148选取多余TA地址234,以提供于地址信号182中,并产生图2的控制信号252,以显示要进行BTAC 142的写入。因此,多余TA地址234的较低有效位经由地址182作为索引使用,以选取BTAC 142的一集合。BTAC 142从多余TA数据寄存器1022所提供的多余TA数据信号244接收数据,并将所选取集合中由路字段724指定的路无效化。流程结束于方框1112。

图12是依本发明绘示图1微处理器100内的死结避免逻辑的方框图。

图12显示了图1的BTAC 142、指令高速缓存104、指令缓冲器106、指令格式化器108、格式化指令队列112与多任务器136,以及图10的控制逻辑1014。

如图12所示,微处理器100亦包括一死结无效化数据寄存器1222、一死结标志寄存器1224及一死结地址寄存器1226。

指令格式化器108会译码存于指令缓冲器106的指令,并在译码一个横跨两条快取线的分支指令时,产生真值的F_wrap信号1202。特别是,若指令格式化器108译码一个横跨两条快取线的分支指令,指令格式化器108在译码该横跨分支指令的第一部份时,产生真值的F_wrap信号1202,其中此第一部份储存于指令缓冲器106的第一快取线中,且此时并不管指令格式化器108是否已译码该横跨分支指令的其余部份,而该其余部分位于第二快取线,其可能还未存在于指令缓冲器106中。F_wrap信号1202会被送至控制逻辑1014。

当现行提取地址162在指令高速缓存104中产生失误时,指令高速缓存104即产生真值的失误信号1206。失误信号1206会被送至控制逻辑1014。

当送至指令高速缓存104的现行提取地址162为假想时,亦即现行提取地址162是一预测地址,如多任务器136选取BTAC预测目标地址164作为现行提取地址162时,控制逻辑1014即产生真值的假想信号1208。假想信号1208会被送至指令高速缓存104。在一实施例中,指令高速缓存104将假想信号1208转送至图1的指令提取器102,以使指令提取器102可利用一假想内存地址,预先从内存提取在指令高速缓存104中找不到的快取线,其理由在下文图13部分会加以说明。

BTAC 142会产生一采行/不采行(T/NT)信号1212,送至控制逻辑1014。真值的T/NT信号1212表示:地址182命中BTAC 142;BTAC 142预测有一分支指令包含于指令高速缓存104响应现行提取地址162而提供的快取线中,且该分支指令将被采行;以及BTAC 142会在BTAC预测目标地址信号164中,提供该分支指令的一目标地址。BTAC 142依据图6的预测状态A 602或预测状态B 604的值,来产生T/NT信号1212,依据何者则视BTAC 142做预测时,使用部分A或B而定。

BTAC 142亦产生一B_wrap信号1214,送至控制逻辑1014。在B_wrap信号1214中,提供了所选取的BTAC目标地址数组项目312的图4横跨位406的值。因此,假值的B_wpap信号1214表示,BTAC 142预测该分支指令并未横跨两条快取线。在一实施例中,控制逻辑1014会将B_wrap信号1214暂存,以保留从前次BTAC 142存取而得的B_wrap 1214的值。

控制逻辑1014亦产生图1的现行指令指针168。控制逻辑1014亦产生一控制信号1204,其为多任务器136的输入选取信号。

若控制逻辑1014侦测到一死结情形(下文将详述,亦即假值的暂存B_wrap信号1214,与真值的F_wrap信号1202、失误信号1206及假想信号1208),则控制逻辑1014储存一真值于死结标志寄存器1224,以表示有一死结情形存在,因此BTAC 142中导致此死结情形的项目将被无效化。此外,控制逻辑1014会使地址182被加载死结地址寄存器1226。最后,控制逻辑1014会将死结无效化数据加载死结无效化数据寄存器1222。在一实施例中,储存于死结无效化数据寄存器1222中的数据,近似于图7的一BTAC写入要求176,除了分支指令地址702并未储存,此因分支指令的地址储存于死结地址寄存器1226中;目标地址706、起始位708及横跨位712亦未储存,此因在一无效的BTAC 142项目中,这些字段都是毋须在意的;因此,当一死结无效化的动作执行时,目标地址数组302并未被写入,仅有标记数组304被更新,以将预测错误的BTAC 142项目无效化。死结无效化数据寄存器1222的输出包含图2的死结数据信号246。死结标志寄存器1224的输出包含图2的死结要求216。死结地址寄存器1226的输出则包含图2的死结地址236。存于死结无效化数据寄存器1222的路值724,则以导致死结情形的BTAC142项目所在的路写入。

若控制逻辑1014侦测到死结情形,则在将预测错误的项目无效化之后,控制逻辑1014亦产生一值于控制信号1204中,以使多任务器136选取现行指令指针168,将微处理器100分支过去,如此包含预测错误的分支指令的快取线,就能被重新提取。

图13是依本发明绘示图12的死结避免逻辑的运作流程图。流程开始于方框1302。

于方框1302中,现行提取地址162经由地址信号182被送入指令高速缓存104与BTAC 142。在图13中,现行提取地址162被称为提取地址A。流程进行至方框1304。

于方框1304中,提供由提取地址A所指定的一条快取线至指令缓冲器106,称为快取线A,其包含一分支指令的第一部份,但非该分支指令的全部。流程进行至方框1306。

于方框1306中,BTAC 142响应提取地址A,而在T/NT信号1212中预测快取线A的该分支指令是否要被采行,并产生假值的B_wrap信号1214,且在BTAC预测目标地址164中提供一假想目标地址。流程进行至方框1308。

于方框1308中,控制逻辑1014控制多任务器136选取BTAC预测目标地址164,以作为下个现行提取地址162,称为提取地址B。控制逻辑亦产生真值的假想信号1208,因为BTAC预测目标地址164为假想的。流程进行至方框1312。

于方框1312中,指令高速缓存104产生真值的失误信号1206,以表示提取地址B在指令高速缓存104中产生失误。正常情况下,指令提取器102会从内存提取遗失的快取线;然而,因为假想信号1208为真,指令格式化器108并不会从内存提取遗失的快取线,理由如下所述。流程进行至方框1314。

于方框1314中,指令格式化器108译码指令缓冲器106中的快取线A,并产生真值的F_wrap信号1202,因为该分支指令横跨两条快取线。指令格式化器108会等待下条快取线被存入指令缓冲器106,如此其可完成格式化该分支指令的动作,以送至格式化指令队列112。流程进行至判断方框1316。

于判断方框1316中,控制逻辑1014判断B_wrap信号1214是否为假、F_wrap信号1202是否为真、失误信号1206是否为真及假想信号1208是否为真。这些构成一死结情形,下文将加以讨论。若是,则流程进行至方框1318;否则,流程结束。

于方框1318中,控制逻辑1014将导致死结情形的BTAC 142项目无效化,如前文图12部分所述。因此,下次提取地址A被送入BTAC 142时,BTAC 142将产生失误,因为此时导致死结情形的项目已无效。流程进行至方框1322。

于方框1322中,控制逻辑1014控制多任务器136分支至现行指令指针168,如前文图12部分所述。此外,控制逻辑在控制多任务器136选取现行指令指针168时,会产生假值的假想信号1208,因为现行指令指针168并非假想的内存地址。现行指令指针168非常有可能会命中指令高速缓存104;然而,若没有命中,指令提取器102仍可从内存提取现行指令指针168所指定的快取线,因为假想信号1208指出现行指令指针168并非假想的。流程结束于方框1322。

在判断方框1316为真时,死结情形即存在的理由是,导致死结所需的条件成立。第一个导致死结的条件是,有一多字节的分支指令横跨两条不同的快取线。也就是,该分支指令字节的第一部份位于一第一快取线的尾部,而该分支指令字节的第二部份则位于下条循序快取线的头部。由于可能出现横跨的分支指令,BTAC 142必须储存预测一分支指令是否横跨快取线的信息,如此控制逻辑1014才能在从目标地址164提取快取线之前,知道是否要提取下条循序快取线,以取得该分支指令字节的第二部分。若BTAC 142储存有不正确的预测信息,则BTAC 142可能会错误地预测该分支指令并未横跨,而实际上却非如此。在这种情况下,指令格式化器108会译码带有该分支指令的第一部份的快取线,并侦测是否存在一分支指令,但并非该分支指令的所有字节皆已取得以进行译码。所以指令格式化器108会等待下条快取线。管线的运作将一直停顿,以等待更多的指令被格式化,以便执行。

第二个导致死结的条件是,由于BTAC 142预测分支指令并未横跨,分支控制逻辑1014即从BTAC 142所提供的目标地址164处提取快取线(而非提取下条循序快取线)。然而,目标地址164在指令高速缓存104中产生失误。因此,指令格式化器108所等待的下条快取线必须从内存提取。

第三个导致死结的条件是,存在有不希望从某些内存地址范围提取指令的微处理器芯片组,若该微处理器从这些地址范围提取指令,即可能使系统当机,或造成其它不理想的系统状态。一假想地址,如BTAC 142所提供的目标地址164,即可能导致从此种内存地址范围提取指令。因而,微处理器100并不会依据此假想的BTAC预测目标地址164,从内存提取一遗失的快取线。

因此,指令格式化器108与管线的其余部分皆暂停运作,以等待另一条快取线。同时,指令提取器亦暂停运作,以等待管线告知其进行非假想的提取动作。在非死结的情形下,像是目标地址164命中指令高速缓存104时,指令格式化器108将格式化分支指令(虽然是以错误的字节进行),并把格式化的分支指令送至管线的执行阶段,其将侦测出预测错误,并更正BTAC 142的错误预测,藉以使假想信号1208变为假。然而,在死结的情形下,由于指令格式化器108在等待下条快取线,所以并不会提供分支指令至执行阶段,于是执行阶段就无法侦测到预测错误。因此,死结的情况就产生了。然而,图12的死结避免逻辑有利地避免死结的产生,如图12及13所述,使微处理器100能适当地运作。

虽然本发明及其目的、特征与优点已详细叙述,其它实施例亦可包含在本发明的范围内。例如,虽然写入队列依单端口BTAC的情形叙述,但某些微处理器组态中,假失误仍可能发生在多端口BTAC的情形,尽管发生频率较低。因此,亦可使用写入队列,以降低一多端口BTAC的假失误率。此外,除了此处所叙述的之外,其它BTAC未被读取的情形也可能存在于某些微处理器中,其中排在写入队列中的要求可能会被写入BTAC。

再有,虽然本发明及其目的、特征与优点已详细叙述,其它实施例亦可包含在本发明的范围内。本发明除了利用硬件来实施外,也可实施于计算机可使用(如可读取)媒介所内含的计算机可读取码(如计算机可读取程序代码、数据等)中。计算机码使本发明所揭示的功能或架构(或两者)成为可行。例如,这可藉由使用一般程序语言(如C、C++、JAVA及类似的程序语言);GDSII数据库;包括Verilog HDL、VHDL、Altera HDL(AHDL)等的硬件描述语言(HDL);或此技术领域中其它可用的程序化及/或电路记录工具来达到。计算机码可置于任何已知的计算机可使用(如可读取)媒介,包括半导体内存、磁盘、光盘(如CD-ROM、DVD-ROM及类似物),并可作为计算机数据信号,内含于计算机可使用(如可读取)传输媒介(如载波或任何其它媒介,包括数字、光学或运用模拟信号的媒介)中。就此而言,计算机码可在通讯网路(包括因特网及内部网络)上传输。要了解到的是,本发明可实施于计算机码(如智能财产权(IP)核心(如微处理器核心)的一部份,或如系统层级的设计(如系统单芯片(SOC)))中,并且可转换成硬件,作为集成电路制造的一部份。再有,本发明亦可作为硬件及计算机码的组合。

总之,以上所述,仅为本发明的较佳实施例而已,不能以之限定本发明所实施的范围。凡依本发明权利要求所作的均等变化与修饰,皆应属于本发明专利涵盖的范围内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号