亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

將多余的分支目標(biāo)地址高速緩存項目無效化的裝置及方法

文檔序號:6380645閱讀:222來源:國知局
專利名稱:將多余的分支目標(biāo)地址高速緩存項目無效化的裝置及方法
技術(shù)領(lǐng)域
本發(fā)明關(guān)于微處理器的分支預(yù)測(branch prediction)領(lǐng)域,特別是關(guān)于使用假想分支目標(biāo)地址高速緩存的分支預(yù)測,即用以將多余的分支目標(biāo)地址高速緩存項目無效化的裝置及方法。
背景技術(shù)
現(xiàn)代的微處理器均為管線化微處理器。亦即,在微處理器的不同區(qū)塊或管線階段內(nèi),可同時執(zhí)行好幾個指令。Hennessy與Patterson將管線執(zhí)行定義為多個指令可重迭執(zhí)行的實作技術(shù)。參見計算器結(jié)構(gòu)量化方法(第二版),1996年由加州舊金山的Morgan Kaufmann出版公司印行,John L.Hennessy與David A.Patterson所著。接著,他們對管線執(zhí)行做了以下精彩的解說管線與組裝線類似。在汽車組裝線中,有許多步驟,每個步驟對于汽車的建造都有某些貢獻(xiàn)。每個步驟雖然是在不同的汽車上進(jìn)行,但會與其它步驟并行地運作。在計算機管線中,每個步驟會完成指令的一部份。如同組裝線,不同步驟會并行地完成不同指令的不同部份。這些步驟的每一個稱為管線階段或管線區(qū)段。這些階段會將一個階段連接至下個階段,而形成管道--指令會從一端進(jìn)入,經(jīng)過這些階段,并從另一端離開,就如同組裝線中的汽車。
同步微處理器是根據(jù)時脈周期來運作。通常,每經(jīng)過一時脈周期,指令就從微處理器管線的一個階段傳至另一階段。在汽車組裝線中,若某個階段的工人因為沒有汽車要組裝而處于閑置狀態(tài),則此組裝線的產(chǎn)能或效能便會降低。同樣地,若微處理器階段因未有指令要進(jìn)行,而在一時脈周期處于閑置狀態(tài)(通常稱為管線泡沫(pipeline bubble)),則處理器的效能會降低。
管線泡沫的一個可能因素為分支指令。當(dāng)處理器碰到一分支指令時,其必須決定此分支指令的目標(biāo)地址,并從目標(biāo)地址而非此分支指令后的下個循序地址開始提取指令。再有,若此分支指令為條件分支指令(即分支是否被采行,是依據(jù)一特定條件是否存在而定),則除了決定目標(biāo)地址外,處理器必須判斷是否采行此分支指令。由于最后解析目標(biāo)地址和/或分支結(jié)果(即分支是否被采行)的管線階段,通常都遠(yuǎn)遠(yuǎn)位于提取指令的階段之后,泡沫便可能產(chǎn)生。
為解決這個問題,現(xiàn)代的微處理器一般都使用分支預(yù)測機制,以在管線早期預(yù)測目標(biāo)地址及分支結(jié)果。分支預(yù)測機制的一個例子是分支目標(biāo)地址高速緩存(BTAC),可在從微處理器的指令高速緩存提取指令的同時,預(yù)測分支結(jié)果與目標(biāo)地址。當(dāng)微處理器執(zhí)行一分支指令,且明確決定要采行此分支及其目標(biāo)地址時,此分支指令的地址及其目標(biāo)地址會被寫入BTAC。在下次從指令高速緩存提取此分支指令時,分支指令地址會命中BTAC,而BTAC在管線早期便可提供此分支指令的目標(biāo)地址。
一個有效的BTAC可通過消除或減少泡沫的數(shù)量,來增進(jìn)處理器的效能,否則處理器將因這些泡沫而浪費許多時間于等待分支指令的解析上。然而,當(dāng)BTAC做了錯誤的預(yù)測時,管線中具有被錯誤提取指令的階段皆會被清空,以利提取正確的指令,而在進(jìn)行清空及提取的動作時,便會將泡沫引進(jìn)管線。隨著微處理器的管線愈做愈深,BTAC的效率對效能而言就變得非常關(guān)鍵。
BTAC的效率主要視BTAC的命中率而定。影響B(tài)TAC命中率的一項因素是,BTAC所儲存的不同分支指令的目標(biāo)地址數(shù)量。所儲存的分支指令的目標(biāo)地址愈多,BTAC愈有效率。然而,微處理器的晶粒大小總是有限,因此其內(nèi)部功能方框如BTAC,便得做得愈小愈好。影響B(tài)TAC實際大小的一項因素,為BTAC內(nèi)儲存目標(biāo)地址及相關(guān)信息的儲存格大小。特別是,單端口的儲存格一般比多端口儲存格小。在一特定時脈周期內(nèi),由單端口儲存格所組成的BTAC僅能被讀取或?qū)懭?,但兩者不能同時進(jìn)行,而多端口儲存格所組成的BTAC則可同時被讀取及寫入。然而,多端口BTAC實際上比單端口BTAC來得大。這意味著,以相同的尺寸來說,多端口BTAC所能儲存的目標(biāo)地址數(shù)會比單端口BTAC少,因而降低BTAC的效率。因此,就此而言,單端口BTAC是較為理想的。
然而,單端口BTAC在一時脈周期內(nèi)僅能讀或?qū)?,而不能同時讀寫,可能會因為失誤(miss)而降低BTAC的效率。若一單端口BTAC在其需要被讀取的周期內(nèi)被寫入,像是以一個新的目標(biāo)地址更新BTAC,或是將一目標(biāo)地址無效化,則一個失誤就產(chǎn)生了。在這種情況下,BTAC必須產(chǎn)生一讀取的失誤,因為其無法提供目標(biāo)地址。不過,此目標(biāo)地址仍有可能存在于BTAC中,因為BTAC在此時是被寫入中。
因此,所需要的是一種可降低單端口BTAC中的失誤的方法及裝置。
另外一個會降低BTAC效率的現(xiàn)象,為BTAC重復(fù)儲存同一個分支指令的目標(biāo)地址。這現(xiàn)象可能發(fā)生在多路集合關(guān)聯(lián)(multi-way set-associative)的BTAC。被重復(fù)儲存所占用的BTAC項目,原本可用來儲存其它分支指令的目標(biāo)地址,現(xiàn)在卻不行,由于BTAC的空間是有限的,如此將降低BTAC的效率。管線愈長,即階段數(shù)愈多,BTAC就愈有可能儲存重復(fù)的目標(biāo)地址。
同一個分支指令被重復(fù)快取于BTAC的現(xiàn)象,最常發(fā)生在程序代碼循環(huán)很小的情形。舉例來說,一分支指令第一次被執(zhí)行,由于BTAC的第2路是最近最少使用(least recently used)的路,所以分支指令的目標(biāo)地址被寫入第2路。然而,在目標(biāo)地址被寫到BTAC前,又再碰到此分支指令,亦即,由于目標(biāo)地址尚未被寫入BTAC,BTAC會因快取失誤而查詢指令高速緩存的提取地址。因此,目標(biāo)地址會第二次被寫入BTAC。若在這中間有插入另一不同分支指令讀取BTAC的動作,使得第2路不再是最近最少使用的路,則會選取不同的路如第1路,第二次將目標(biāo)地址寫入BTAC?,F(xiàn)在同一分支指令的目標(biāo)地址就在BTAC中出現(xiàn)兩次。如此會浪費BTAC的空間,且降低BTAC的效率,因為非常有可能第二次寫入的動作取代掉另一個分支指令的有效目標(biāo)地址。
因此,所需要的一種可避免浪費寶貴的BTAC空間的方法及裝置,其中此種浪費是由于重復(fù)快取了相同分支指令的目標(biāo)地址。
再者,與BTAC假想特質(zhì)相關(guān)的現(xiàn)象的特定組合,會導(dǎo)致微處理器產(chǎn)生死結(jié)(deadlock)的情形。BTAC的假想分支預(yù)測、分支指令橫跨不同指令快取線及提取假想指令的處理器總線作業(yè)會產(chǎn)生錯誤,這些現(xiàn)象的組合在某些情況下會造成死結(jié)。

發(fā)明內(nèi)容
本發(fā)明的目的是提供一種可防止有使用假想BTAC的微處理器產(chǎn)生死結(jié)的方法及裝置。
本發(fā)明提供一種可將BTAC中對同一分支指令所儲存的多余項目無效化的方法及裝置,以避免浪費BTAC的空間。為達(dá)到上述目的,本發(fā)明提供一種可將集合關(guān)聯(lián)分支目標(biāo)地址高速緩存(BTAC)中對同一分支指令所儲存的一多余項目無效化的裝置。此裝置包括一狀態(tài)指示器,其顯示一指令高速緩存提取地址所選取BTAC的一集合中,是否至少有兩路包含同一分支指令的有效分支目標(biāo)地址。此裝置亦包括一控制邏輯,耦接至該狀態(tài)指示器,用以在狀態(tài)指示器顯示所選取的集合中,至少有兩路包含同一分支指令的有效分支目標(biāo)地址時,將該至少兩路的其中一路無效化。
另一方面,本發(fā)明亦提供一種可將分支目標(biāo)地址高速緩存(BTAC)中對同一分支指令所儲存的多余項目無效化的裝置。此裝置包括一偵測邏輯,可偵測BTAC的一選取集合的復(fù)數(shù)個路中,是否有一個以上有效的路儲存同一分支指令的目標(biāo)地址。此裝置亦包括一無效化邏輯,耦接至該偵測邏輯,對于此選取集合中的該一個以上有效的路,保留其中一個,而將所有其它的路無效化。
另一方面,本發(fā)明提供一種管線化微處理器。此微處理器包括一指令高速緩存,其具有一地址輸入端,以接收一地址,選取包含一分支指令的快取線。此微處理器亦包括一分支目標(biāo)地址高速緩存(BTAC),耦接至該指令高速緩存,可響應(yīng)該地址而產(chǎn)生復(fù)數(shù)個指示信號。每一這些指示信號顯示該地址所選取的BTAC的一集合中一對應(yīng)路是否儲存該分支指令的一有效目標(biāo)地址。此微處理器亦包括一邏輯,耦接至BTAC,組態(tài)為在這些指示信號顯示這些路其中二或更多個路儲存該分支指令的有效目標(biāo)地址時,將該選取集合的這些路其中一或更多個路無效化。
另一方面,本發(fā)明提供一種可將集合關(guān)聯(lián)分支目標(biāo)地址高速緩存(BTAC)中對同一分支指令所儲存的多余項目無效化的方法。此方法包括判斷一指令高速緩存提取地址的索引部分所選取的BTAC集合中,是否有一個以上的路的標(biāo)記吻合該指令高速緩存提取地址的標(biāo)記部分,及是否有效。此方法亦包括若該選取集合中有一個以上的路有效且吻合,則保留該選取集合其中一個路,而將所有其它的路無效化。
另一方面,本發(fā)明提供一種可將N路集合關(guān)聯(lián)分支目標(biāo)地址高速緩存(BTAC)的同一集合中,對同一分支指令所儲存的一多余項目無效化的方法。此方法包括依照一指令提取地址的較低部分選取BTAC的一N路集合。此方法亦包括將該N路集合的N個對應(yīng)路的N個地址標(biāo)記與該指令提取地址的較高部分作比較。此方法亦包括判斷該N個地址標(biāo)記中是否有二或更多個標(biāo)記吻合該較高部分且為有效。此方法亦包括若該N個地址標(biāo)記中,有二或更多個標(biāo)記吻合該較高部分且為有效,則將該有效的N個地址標(biāo)記中,吻合該較高部分的該二或更多個標(biāo)記所對應(yīng)的該N路的一或更多個路無效化。
另一方面,本發(fā)明提供一種內(nèi)含于傳輸媒介中的計算機數(shù)據(jù)信號。此計算機數(shù)據(jù)信號包括計算機可讀取程序代碼,以提供一種管線化微處理器。此程序代碼包括第一程序代碼,以提供一指令高速緩存,其具有一地址輸入端,以接收一地址,選取包含一分支指令的快取線。此程序代碼亦包括第二程序代碼,以提供一分支目標(biāo)地址高速緩存(BTAC),耦接至該指令高速緩存,可響應(yīng)該地址而產(chǎn)生復(fù)數(shù)個指示信號。每一這些指示信號顯示該地址所選取的BTAC的一集合中一對應(yīng)路是否儲存該分支指令的一有效目標(biāo)地址。此程序代碼亦包括第三程序代碼,以提供一邏輯,耦接至BTAC,組態(tài)為在這些指示信號顯示這些路其中二或更多個路儲存該分支指令的有效目標(biāo)地址時,將該選取集合的這些路其中一或更多個路無效化。
本發(fā)明的一項優(yōu)點是,可藉由消除相同分支指令的多余目標(biāo)地址,使BTAC可快取更多分支指令的目標(biāo)地址,而增進(jìn)BTAC的效率。
本發(fā)明的其它特征及優(yōu)點,在配合下列說明及附圖后,將更能突顯出來。


圖1是本發(fā)明的微處理器的方框圖。
圖2是更詳細(xì)繪示本發(fā)明圖1的部分微處理器的方框圖。
圖3是依本發(fā)明更詳細(xì)繪示圖1的BTAC的方框圖。
圖4是本發(fā)明圖3的目標(biāo)地址數(shù)組項目的內(nèi)容的方框圖。
圖5是本發(fā)明圖3的標(biāo)記數(shù)組項目的內(nèi)容的方框圖。
圖6是本發(fā)明圖3的計數(shù)器數(shù)組項目的內(nèi)容的方框圖。
圖7是本發(fā)明圖1的BTAC寫入要求的內(nèi)容的方框圖。
圖8是本發(fā)明圖1的BTAC寫入隊列的方框圖。
圖9是本發(fā)明圖1的BTAC寫入隊列的運作流程圖。
圖10是本發(fā)明微處理器內(nèi),用以將圖1的BTAC中的多余目標(biāo)地址無效化的邏輯的方框圖。
圖11是本發(fā)明圖10的多余目標(biāo)地址裝置的運作流程圖。
圖12是本發(fā)明圖1微處理器內(nèi)的死結(jié)避免邏輯的方框圖。
圖13是本發(fā)明圖12的死結(jié)避免邏輯的運作流程圖。
其中,附圖標(biāo)記說明如下100微處理器 102指令提取器104指令高速緩存 106指令緩沖器108指令格式化器 112格式化指令隊列114指令轉(zhuǎn)譯器 116轉(zhuǎn)譯指令隊列118寄存器階段 122地址階段124資料階段 126執(zhí)行階段128儲存階段 132回寫階段134加法器 136多任務(wù)器138指令142分支目標(biāo)地址高速緩存(BTAC)144BTAC寫入隊列(BWQ)146隊列深度148多任務(wù)器 152分支預(yù)測錯誤154預(yù)測取代信號 156指令緩沖器充滿信號158指令高速緩存閑置信號 162現(xiàn)行提取地址164BTAC預(yù)測目標(biāo)地址 166下個循序提取地址168現(xiàn)行指令指針 172正確地址174取代預(yù)測目標(biāo)地址 176BTAC寫入要求178BTAC寫入隊列地址 182地址信號202仲裁器 206多任務(wù)器212BTAC讀取要求信號 214多余TA要求信號216死結(jié)要求信號 218BWQ非空信號222BWQ充滿信號 234多余TA地址236死結(jié)地址244多余TA數(shù)據(jù)信號 246死結(jié)數(shù)據(jù)信號
248BWQ數(shù)據(jù)信號252控制信號256數(shù)據(jù)信號 258控制信號262控制信號302目標(biāo)地址數(shù)組 304標(biāo)記數(shù)組306計數(shù)器數(shù)組 312目標(biāo)地址數(shù)組項目314標(biāo)記數(shù)組項目 316計數(shù)器數(shù)組項目402目標(biāo)地址(TA) 404起始字段406橫跨位502標(biāo)記 504A有效位506B有效位508lru字段602預(yù)測狀態(tài)A計數(shù)器604預(yù)測狀態(tài)B計數(shù)器606A/B lru位702分支指令地址字段 706目標(biāo)地址708起始字段 712橫跨位714寫入致能-A字段 716寫入致能-B字段718無效化-A字段 722無效化-B字段724路字段802BTAC寫入要求項目 804有效位806控制邏輯902~922BTAC寫入隊列的運作流程1002Atag0 1002Btag11002Ctag2 1002Dtag31004valid[7:0]1006Amatch01006Bmatch1 1006Cmatch21006Dmatch3 1012比較器1014控制邏輯1022多余TA無效化數(shù)據(jù)寄存器1024多余TA標(biāo)志寄存器1026多余TA地址寄存器1102~1112多余目標(biāo)地址裝置的運作流程
1024多余TA標(biāo)志寄存器1026多余TA地址寄存器1102~1112多余目標(biāo)地址裝置的運作流程1202F_wrap信號 1204控制信號1206失誤信號 1208假想信號1212T/NT信號 1214F_wrap信號1222死結(jié)無效化數(shù)據(jù)寄存器 1224死結(jié)標(biāo)志寄存器1226死結(jié)地址寄存器1302~1322死結(jié)避免邏輯的運作流程具體實施方式
現(xiàn)請參照圖1,是本發(fā)明的微處理器100的方框圖。微處理器100包括一管線化處理器。
微處理器100包括一指令提取器102。指令提取器102從耦接至微處理器100的內(nèi)存,如系統(tǒng)內(nèi)存,提取指令138。在一實施例中,指令提取器102從內(nèi)存提取總長為快取線大小的倍數(shù)的指令138。在一實施例中,指令138是具有可變長度的指令。亦即,在微處理器100的指令集中,所有指令的長度并非相同。在一實施例中,微處理器100包括一微處理器,其指令集實質(zhì)上符合x86架構(gòu)指令集,后者的指令長度為可變的。
微處理器100亦包括一指令高速緩存104,耦接至指令提取器102。指令高速緩存104從指令提取器102接收包含指令字節(jié)的快取線,并快取指令快取線,以供微處理器100后續(xù)使用。在一實施例中,指令高速緩存104包含一64KB的四路集合關(guān)聯(lián)第一階高速緩存(level-1 cache)。當(dāng)某個指令在指令高速緩存104中找不到,指令高速緩存104會告知指令提取器102,后者即從內(nèi)存提取包含該指令的快取線。一現(xiàn)行提取地址162會被送入指令高速緩存104,以選取其中的一條快取線。在一實施例中,指令高速緩存104的快取線包含32個字節(jié)。指令高速緩存104亦產(chǎn)生一指令高速緩存閑置信號158。指令高速緩存104處于閑置狀態(tài)時,指令高速緩存104會產(chǎn)生真值的指令高速緩存閑置信號158。當(dāng)指令高速緩存104未被讀取時,即處于閑置令緩沖器106從指令高速緩存104接收包含指令字節(jié)的快取線,并緩沖這些快取線,直到其可被格式化為個別指令,由微處理器100執(zhí)行為止。在一實施例中,指令緩沖器106包含四個項目,最多可儲存四條快取線。指令緩沖器106并產(chǎn)生一指令緩沖器充滿信號156。當(dāng)指令緩沖器106已滿時,指令緩沖器106會產(chǎn)生真值的指令緩沖器充滿信號156。在一實施例中,若指令緩沖器106已滿,BTAC 142即不被讀取。
在一實施例中,微處理器100亦包括一指令格式化器(instructionformatter)108,其耦接至指令緩沖器106。指令格式化器108會從指令緩沖器106接收指令字節(jié),并從中產(chǎn)生格式化指令。亦即,指令格式化器108會查看指令緩沖器106中的一串指令字節(jié),判斷哪個字節(jié)包括下個指令以及下個指令的長度,并輸出下個指令及其長度。在一實施例中,格式化指令包括實質(zhì)上符合x86架構(gòu)指令集的指令。
指令格式化器108亦包括用以產(chǎn)生分支目標(biāo)地址的邏輯,而此分支目標(biāo)地址稱為取代預(yù)測目標(biāo)地址(override predicted target address)174。在一實施例中,該分支目標(biāo)地址產(chǎn)生邏輯包括一加法器,用以將一相關(guān)分支指令的偏移量加到一分支指令地址,以產(chǎn)生取代預(yù)測目標(biāo)地址174。在另一實施例中,該邏輯包含一呼叫/返回堆棧,以產(chǎn)生呼叫與返回指令的目標(biāo)地址。指令格式化器108亦產(chǎn)生一預(yù)測取代信號154。指令格式化器108產(chǎn)生真值的預(yù)測取代信號154,以取代微處理器100中的分支目標(biāo)地址高速緩存(BTAC)142所做的分支預(yù)測,下文將詳細(xì)敘述。亦即,若指令格式化器108中的該邏輯所產(chǎn)生的目標(biāo)地址不吻合BTAC 142所產(chǎn)生的目標(biāo)地址,則指令格式化器108產(chǎn)生真值的預(yù)測取代信號154,以使得因BTAC 142的預(yù)測所提取的指令被清空,并使微處理器100分支至取代預(yù)測目標(biāo)地址174。在一實施例中,在指令被清空且微處理器100分支至取代預(yù)測目標(biāo)地址174的一部分期間,BTAC 142不被讀取。
微處理器100亦包括一格式化指令隊列112,耦接至指令格式化器108。格式化指令隊列112從指令格式化器108接收格式化指令,并予以緩沖,直到其被轉(zhuǎn)譯成微指令為止。在一實施例中,格式化指令隊列112包含復(fù)數(shù)個項目,最多可儲存12個格式化指令,雖然圖12僅顯示了四個項目。
微處理器100亦包括一指令轉(zhuǎn)譯器114,耦接至格式化指令隊列112。指令轉(zhuǎn)譯器114將格式化指令隊列112所儲存的格式化巨指令轉(zhuǎn)譯成微指令。在一實施例中,微處理器100包括一精簡指令集計算機(RISC)核心,可執(zhí)行原生(native)或精簡指令集的微指令。
微處理器100亦包括一轉(zhuǎn)譯指令隊列116,耦接至指令轉(zhuǎn)譯器114。轉(zhuǎn)譯指令隊列116從指令轉(zhuǎn)譯器114接收轉(zhuǎn)譯微指令,并予以緩沖,直到其可由微處理器管線的其余部分執(zhí)行為止。
微處理器100亦包括一寄存器階段118,耦接至轉(zhuǎn)譯指令隊列116。寄存器階段118包含復(fù)數(shù)個寄存器,以儲存指令操作數(shù)及結(jié)果。寄存器階段118包含一使用者可見寄存器檔案,以儲存微處理器100的使用者可見狀態(tài)。
微處理器100亦包括一地址階段122,耦接至寄存器階段118。地址階段122包含地址產(chǎn)生邏輯,可為需存取內(nèi)存的指令產(chǎn)生內(nèi)存地址,如加載或儲存指令及分支指令。
微處理器100亦包括數(shù)據(jù)階段124,耦接至地址階段122。數(shù)據(jù)階段124包括用以從內(nèi)存加載數(shù)據(jù)的邏輯,以及用以快取從內(nèi)存所加載數(shù)據(jù)的一或更多個高速緩存。
微處理器100亦包括執(zhí)行階段126,耦接至數(shù)據(jù)階段124。執(zhí)行階段126包括用以執(zhí)行指令的執(zhí)行單元,如執(zhí)行算術(shù)與邏輯指令的算術(shù)與邏輯單元。在一實施例中,執(zhí)行階段126包含一整數(shù)執(zhí)行單元、一浮點執(zhí)行單元、一MMX執(zhí)行單元以及一SSE執(zhí)行單元。執(zhí)行階段126亦包含用以解析分支指令的邏輯。特別是,執(zhí)行階段126會判斷一分支指令是否被采行,以及BTAC142先前是否曾錯誤預(yù)測該分支指令會被采行。此外,執(zhí)行階段126會判斷BTAC 142先前所預(yù)測的分支目標(biāo)地址,是否被BTAC 142錯誤地預(yù)測,亦即是否錯誤。若執(zhí)行階段126判斷-先前的分支預(yù)測為錯誤,則執(zhí)行階段126會產(chǎn)生真值的分支預(yù)測錯誤信號152,以使得因BTAC 142的錯誤預(yù)測所提取的指令被清空,并使微處理器100分支至正確地址172。在一實施例中,在指令被清空且微處理器100分支至正確地址172的一部分期間,BTAC 142不被讀取。
微處理器100亦包括一儲存階段128,耦接至執(zhí)行階段126。儲存階段128包含可響應(yīng)儲存微指令以儲存數(shù)據(jù)至內(nèi)存的邏輯。儲存階段128產(chǎn)生一正確地址172。正確地址172是用以更正由分支預(yù)測錯誤信號152所指出的先前錯誤的分支預(yù)測。正確地址172包含一分支指令的正確分支目標(biāo)地址。亦即,正確地址172是一分支指令的非假想(non-speculative)目標(biāo)地址。當(dāng)一分支指令被執(zhí)行與解析時,正確地址172亦被寫入BTAC 142中,如下文所詳述的。儲存階段128亦產(chǎn)生一BTAC寫入要求176,以更新BTAC 142。BTAC寫入要求176在下文關(guān)于圖7部分將做更詳細(xì)地說明。
微處理器100亦包括一回寫階段132,耦接至儲存階段128。回寫階段132包含用以將指令結(jié)果寫入寄存器階段118的邏輯。
微處理器100亦包括BTAC 142。BTAC 142包含一高速緩存,以快取目標(biāo)地址及其它分支預(yù)測信息。BTAC 142可響應(yīng)從一多任務(wù)器148所接收的地址182,產(chǎn)生一預(yù)測目標(biāo)地址164。在一實施例中,BTAC 142包含一單端口高速緩存,BTAC 142的讀取與寫入動作必須分享其存取權(quán),如此可能會產(chǎn)生BTAC 142的假失誤。BTAC 142與多任務(wù)器148將在下文做更詳細(xì)說明。
微處理器100亦包括一耦接至BTAC 142的多任務(wù)器136。多任務(wù)器136選取其六個輸入中的某一個,作為現(xiàn)行提取地址162而輸出。其中一個輸入是由一加法器134所產(chǎn)生的下個循序提取地址166,加法器134是將現(xiàn)行提取地址162遞增一條快取線的大小,而產(chǎn)生下個循序提取地址166。在從指令高速緩存104正常提取一快取線后,多任務(wù)器136選取下個循序提取地址166,以輸出作為現(xiàn)行提取地址162。另一個輸入是現(xiàn)行提取地址162。另一個輸入是BTAC預(yù)測目標(biāo)地址164,若BTAC 142指出有一分支指令存在于由現(xiàn)行提取地址162從指令高速緩存104所選取的快取線中,且BTAC 142預(yù)測該分支指令將被采行,則多任務(wù)器136會選取此BTAC預(yù)測目標(biāo)地址164。另一個輸入是從儲存階段128所接收的正確地址172,多任務(wù)器136選取此輸入以更正一錯誤的分支預(yù)測。另一個輸入是從指令格式化器108接收的取代預(yù)測目標(biāo)地址174,多任務(wù)器136選取此輸入以取代BTAC預(yù)測目標(biāo)地址164。另一個輸入是現(xiàn)行指令指針168,其指出現(xiàn)在正被指令格式化器108格式化的指令的地址。多任務(wù)器136會選取現(xiàn)行指令指針168,以避免死結(jié)的情形,如下所述。
微處理器100亦包括一耦接至BTAC 142的BTAC寫入隊列(BWQ)144。BTAC寫入隊列144包含復(fù)數(shù)個儲存組件,以緩沖BTAC寫入要求176,直到其可被寫入BTAC 142。BTAC寫入隊列144可接收分支預(yù)測錯誤信號152、預(yù)測取代信號154、指令緩沖器充滿信號156及指令高速緩存閑置信號158。較佳者,BTAC寫入隊列144會延遲以BTAC寫入要求176更新BTAC 142的動作,直到一適當(dāng)時刻為止,亦即當(dāng)BTAC 142不被讀取時,此如輸入信號152至158所顯示的。藉此,可增加BTAC 142的效率,下文將更詳細(xì)敘述。
BTAC寫入隊列144產(chǎn)生一BTAC寫入隊列地址178,以作為多任務(wù)器148的一個輸入。BTAC寫入隊列144亦包括一個儲存目前隊列深度146的寄存器。隊列深度146指出目前儲存于BTAC寫入隊列144中的有效BTAC寫入要求176的數(shù)量。隊列深度的初始值為零。每當(dāng)有一BTAC寫入要求176被收入BTAC寫入隊列144,隊列深度146即隨之遞增。而每當(dāng)有一BTAC寫入要求176從BTAC寫入隊列144移除,隊列深度146即隨之遞減。BTAC寫入隊列144在下文會做更詳細(xì)描述。
圖2是依本發(fā)明更詳細(xì)繪示圖1的部分微處理器100的方框圖。圖2除了顯示出耦接于BTAC寫入隊列144與BTAC 142間的仲裁器202及具三輸入端的多任務(wù)器206,還顯示圖1的BTAC寫入隊列144、BTAC 142及多任務(wù)器148。雖然多任務(wù)器148在圖1中僅顯示了兩個輸入端,其實際上是具有四個輸入端的多任務(wù)器,如圖2所示。圖2中,BTAC 142包括一讀/寫輸入端、一地址輸入端及一數(shù)據(jù)輸入端。
如圖1所示,多任務(wù)器148會接收現(xiàn)行提取地址162與BWQ地址178。此外,多任務(wù)器148會接收一多余TA地址234與一死結(jié)地址236,這些分別在下文關(guān)于圖10-11與圖12-13的部分做更詳細(xì)地說明。多任務(wù)器148選取四個輸入其中之一,而輸出圖1的地址信號182,其是依據(jù)仲裁器202所產(chǎn)生的控制信號258,而送至BTAC 142的地址輸入端。
多任務(wù)器206會接收一多余TA數(shù)據(jù)信號244與一死結(jié)數(shù)據(jù)信號246作為輸入,這些分別在下文關(guān)于圖10-11與圖12-13的部分做更詳細(xì)地說明。多任務(wù)器206亦從BTAC寫入隊列144接收一BWQ數(shù)據(jù)信號248作為輸入,此信號248為目前BTAC寫入隊列144的要求的數(shù)據(jù),用以更新BTAC 142。多任務(wù)器206選取三個輸入其中之一,而輸出一數(shù)據(jù)信號256,其是依據(jù)仲裁器202所產(chǎn)生的控制信號262,而送至BTAC 142的數(shù)據(jù)輸入端。
仲裁器202在復(fù)數(shù)個要求存取BTAC 142的資源間做仲裁。仲裁器202產(chǎn)生一信號252,其于BTAC 142被讀取或?qū)懭霑r,被送至BTAC 142的讀/寫輸入端。仲裁器202接收一BTAC讀取要求信號212,其顯示一個使用現(xiàn)行提取地址162讀取BTAC 142的要求,此要求是與一個也使用現(xiàn)行提取地址162讀取指令高速緩存104的要求同時并行。仲裁器202也接收一多余目標(biāo)地址(TA)要求信號214,其顯示的要求,是要在BTAC 142中,將多余目標(biāo)地址234所選取集合中的相同分支指令的多余項目無效化。仲裁器202亦接收一死結(jié)要求信號216,其顯示一個要將BTAC 142的一項目無效化的要求,此項目是錯誤地預(yù)測在死結(jié)地址236所選取集合中之一分支指令并未橫跨一快取線邊界,如下所述。仲裁器202亦從BTAC寫入隊列144接收一BWQ非空信號216,其顯示至少有一要求,等待著要更新BTAC 142中,由BWQ地址178所選取集合中的一個項目,如下所述。仲裁器202亦從BTAC寫入隊列144接收一BWQ充滿信號222,其顯示BTAC寫入隊列144是充滿了要求,等待要更新BTAC 142中,由BWQ地址178所選取集合中的一個項目,如下所述。
在一實施例中,仲裁器202依下表1所示來分派優(yōu)先級,其中1為最高優(yōu)先序,而5為最低優(yōu)先序。
1-死結(jié)要求2162-BWQ充滿2223-BTAC讀取要求2124-多余TA要求2145-BWQ非空218表1圖3是依本發(fā)明更詳細(xì)繪示圖1的BTAC 142的方框圖。如圖3所示,BTAC 142包括一目標(biāo)地址數(shù)組302、一標(biāo)記數(shù)組304及一計數(shù)器數(shù)組306。每個數(shù)組皆接收圖1的地址182。圖3的實施例是顯示一個四路集合關(guān)聯(lián)的BTAC 142高速緩存。在另一實施例中,BTAC 142包含一個雙路集合關(guān)聯(lián)高速緩存。在一實施例中,目標(biāo)地址數(shù)組302與標(biāo)記數(shù)組304為單端口數(shù)組;然而,計數(shù)器數(shù)組306為雙端口數(shù)組,具有一讀取端口與一寫入端口,此因計數(shù)器數(shù)組306比起目標(biāo)地址數(shù)組302與標(biāo)記數(shù)組304,更需要經(jīng)常更新。
目標(biāo)地址數(shù)組302包含一儲存組件數(shù)組,以儲存目標(biāo)地址數(shù)組項目312,這些項目是用來快取分支目標(biāo)地址與相關(guān)分支預(yù)測信息。目標(biāo)地址數(shù)組項目312的內(nèi)容將在下文圖4部分做說明。標(biāo)記數(shù)組304包含一儲存組件數(shù)組,以儲存標(biāo)記數(shù)組項目314,這些項目是用來快取地址標(biāo)記與相關(guān)分支預(yù)測信息。標(biāo)記數(shù)組項目314的內(nèi)容將在下文圖5部分做說明。計數(shù)器數(shù)組306包含一儲存組件數(shù)組,以儲存計數(shù)器數(shù)組項目316,這些項目是用來儲存分支結(jié)果預(yù)測信息。計數(shù)器數(shù)組項目316的內(nèi)容將在下文圖6部分做說明。
前述每個數(shù)組皆配置為四路,標(biāo)示為路0、路1、路2及路3。較佳的是,目標(biāo)地址數(shù)組302的每一路皆儲存兩個項目或部分,標(biāo)示為A與B,用以快取一分支目標(biāo)地址與假想分支信息,如此若有兩個分支指令存在于一快取線中,則BTAC 142可對適當(dāng)?shù)姆种е噶钭龀鲱A(yù)測。
前述每個數(shù)組是由圖1的地址182做索引。地址182的較低有效位會在每個數(shù)組中選取一快取線。在一實施例中,每個數(shù)組包含128個集合。由于128個集合各有四路,每一路各存兩個,所以BTAC 142最多可快取1024個目標(biāo)地址。較佳的是,每個數(shù)組是以地址182的位[11:5]做索引,以選取BTAC142中的一四路集合。
圖4是依本發(fā)明繪示圖3的目標(biāo)地址數(shù)組項目312的內(nèi)容的方框圖。
目標(biāo)地址數(shù)組項目312包括一分支目標(biāo)地址(TA)402。在一實施例中,目標(biāo)地址402包含一32位的地址,其是前次執(zhí)行一分支指令后所快取的。BTAC 142于預(yù)測TA輸出164中,提供目標(biāo)地址402。
目標(biāo)地址數(shù)組項目312亦包括一起始字段404。起始字段404指出,該分支指令的第一個字節(jié),在指令高速緩存104響應(yīng)現(xiàn)行提取地址162所輸出的快取線中的字節(jié)偏移量。在一實施例中,一快取線包含32個字節(jié);因此,起始字段404包含5個位。
目標(biāo)地址數(shù)組項目312亦包括一橫跨位406。若所預(yù)測的分支指令橫跨指令高速緩存104的兩條快取線,則橫跨位406為真。BTAC 142是于一B_wrap信號1214中提供橫跨位406,此將于下文圖12部分說明。
圖5是依本發(fā)明繪示圖3的標(biāo)記數(shù)組項目314的內(nèi)容的方框圖。
標(biāo)記數(shù)組項目314包含一標(biāo)記502。在一實施例中,標(biāo)記502包含該分支指令的地址較高的20個位,而目標(biāo)地址數(shù)組302中該分支指令的對應(yīng)項目,則儲存一預(yù)測目標(biāo)地址402。BTAC 142會將標(biāo)記502與圖1的地址182較高的20個位作比較,以判斷該對應(yīng)項目是否吻合地址182,亦即地址182是否命中BTAC 142,若該項目為有效的話。
標(biāo)記數(shù)組項目314亦包含一A有效位504,若目標(biāo)地址數(shù)組302中的對應(yīng)項目的A部分所存的目標(biāo)地址402為有效,則此A有效位504為真。標(biāo)記數(shù)組項目314亦包含一B有效位506,若目標(biāo)地址數(shù)組302中的對應(yīng)項目的B部分所存的目標(biāo)地址402為有效,則此B有效位506為真。
標(biāo)記數(shù)組項目314亦包括一個三位的lru字段508,以指出在所選取集合的四路中,哪一路是最近最少被使用的。在一實施例中,BTAC 142只在一BTAC分支被執(zhí)行時,才更新lru字段508。亦即,BTAC 142只在BTAC 142預(yù)測一分支指令將被采行,且微處理器100依據(jù)此預(yù)測,分支至BTAC 142所提供的預(yù)測目標(biāo)地址164時,才更新lru字段508。BTAC 142是于該BTAC分支正被執(zhí)行時更新lru字段508,在此期間BTAC 142并未被讀取,且并未要求使用BTAC寫入隊列144。
圖6是依本發(fā)明繪示圖3的計數(shù)器數(shù)組項目316的內(nèi)容的方框圖。
計數(shù)器數(shù)組項目316包括一預(yù)測狀態(tài)A計數(shù)器602。在一實施例中,預(yù)測狀態(tài)A計數(shù)器602為一個兩位的飽和計數(shù)器,每次當(dāng)微處理器100判斷出相關(guān)分支指令要被采行,即往上數(shù),而每次當(dāng)判斷出相關(guān)分支指令不被采行,即往下數(shù)。預(yù)測狀態(tài)A計數(shù)器602在往上數(shù)時,會飽和于b’11的二進(jìn)制值,往下數(shù)時則飽和于b’00的二進(jìn)制值。在一實施例中,若預(yù)測狀態(tài)A計數(shù)器602的值為b’11或b’10,則BTAC 142會預(yù)測所選取目標(biāo)地址數(shù)組項目312的A部分的相關(guān)分支指令要被采行;否則,BTAC 142會預(yù)測此相關(guān)分支指令不被采行。計數(shù)器數(shù)組項目316亦包括一預(yù)測狀態(tài)B計數(shù)器604,運作方式近似于預(yù)測狀態(tài)A計數(shù)器602,不過其是相關(guān)于所選取目標(biāo)地址數(shù)組項目312的B部分來運作。
計數(shù)器數(shù)組項目316亦包括一A/B lru位606。二進(jìn)制值為b’1的A/B lru位606,表示所選取目標(biāo)地址數(shù)組項目312的A部分為最近最少被使用的;否則,所選取目標(biāo)地址數(shù)組項目312的B部分為最近最少被使用的。在一實施例中,當(dāng)分支指令抵達(dá)判斷分支結(jié)果(亦即此分支是否被采行)的儲存階段128時,A/B lru位606會隨著預(yù)測狀態(tài)A與B計數(shù)器602與604被更新。在一實施例中,更新計數(shù)器數(shù)組項目316并不需使用BTAC寫入隊列144,因為計數(shù)器數(shù)組306包括一讀取端口與一寫入端口,如前文圖3部分所述。
圖7是依本發(fā)明繪示圖1的BTAC寫入要求176的內(nèi)容的方框圖。圖7顯示了儲存階段128所產(chǎn)生的用來更新一BTAC 142項目的信息,此信息包含于BTAC寫入要求信號176而送至BTAC寫入隊列144,且亦為一個BTAC寫入隊列144的項目的內(nèi)容,如圖8所示。
BTAC寫入要求176包括一分支指令地址字段702,其是一先前執(zhí)行的分支指令的地址,BTAC 142則因該分支指令而將被更新。當(dāng)寫入要求176隨后更新BTAC 142時,分支指令地址702較高的20個位即被存入圖5的標(biāo)記數(shù)組項目314的標(biāo)記字段502。分支指令地址702較低的7個位[11:5]則作為BTAC 142的索引使用。在一實施例中,分支指令地址702為一32位的字段。
BTAC寫入要求176亦包括一目標(biāo)地址706,用以存入圖4的目標(biāo)地址字段402。
BTAC寫入要求176亦包括一起始字段708,用以存入圖4的起始字段404。BTAC寫入要求176亦包括一橫跨位712,用以存入圖4的橫跨位406。
BTAC寫入要求176亦包括一寫入致能-A字段714,其指定是否要以BTAC寫入要求176所指定的信息,來更新所選取的目標(biāo)地址數(shù)組項目312的A部分。BTAC寫入要求176亦包括一寫入致能-B字段716,其指定是否要以BTAC寫入要求176所指定的信息,來更新所選取的目標(biāo)地址數(shù)組項目312的B部分。
BTAC寫入要求176亦包括一無效化-A字段718,其指定是否要將所選取的目標(biāo)地址數(shù)組項目312的A部分無效化。將所選取目標(biāo)地址數(shù)組項目312的A部分無效化的動作,包含清除圖5的A有效位504。BTAC寫入要求176亦包括一無效化-B字段722,其指定是否要將所選取的目標(biāo)地址數(shù)組項目312的B部分無效化。將所選取目標(biāo)地址數(shù)組項目312的B部分無效化的動作,包含清除圖5的B有效位506。
BTAC寫入要求176亦包括一個4位的路字段724,其指定要更新所選取集合的哪一路。路字段724是被完全譯碼的。在一實施例中,當(dāng)微處理器100讀取BTAC 142以取得一分支預(yù)測時,微處理器100即決定要存入路字段724的值,并將此值順著管線階段傳送至儲存階段128,以包含在BTAC寫入要求176之中。若微處理器100正在更新BTAC 142的一即存項目,例如,若現(xiàn)行提取地址162命中BTAC 142,則微處理器100將該即存項目所在的路,存入路字段724。若微處理器100正在寫入BTAC 142的一新項目,例如,由于一新的分支指令而進(jìn)行寫入,則微處理器100將所選取的BTAC142集合的最近最少被使用的路,存入路字段724。在一實施例中,當(dāng)微處理器100讀取BTAC 142以取得該分支預(yù)測時,微處理器100即從圖5的lru字段508,判斷出最近最少被使用的路。
圖8是依本發(fā)明繪示圖1的BTAC寫入隊列144的方框圖。
BTAC寫入隊列144包括復(fù)數(shù)個儲存組件802,以儲存圖7的BTAC寫入要求176。在一實施例中,BTAC寫入隊列144包括六個儲存組件802,以儲存六個BTAC寫入要求176。
對于每個BTAC寫入要求項目802,BTAC寫入隊列144亦包括一對應(yīng)的有效位804,其值在對應(yīng)項目為有效時為真,無效時為假。
BTAC寫入隊列144亦包括一控制邏輯806,耦接至儲存組件802與有效位804。控制邏輯806亦耦接至隊列深度寄存器146。當(dāng)一BTAC寫入要求176被加載BTAC寫入隊列144時,控制邏輯806將隊列深度146遞增,而當(dāng)一BTAC寫入要求176被移出BTAC寫入隊列144時,則將隊列深度146遞減??刂七壿?06從圖1的儲存階段128接收BTAC寫入要求信號176,并將接收到的要求存入項目802??刂七壿?06亦接收圖1的分支預(yù)測錯誤信號152、預(yù)測取代信號154、指令緩沖器充滿信號156及指令高速緩存閑置信號158。每當(dāng)隊列深度146大于零時,控制邏輯806即產(chǎn)生真值的圖2的BWQ非空信號218。每當(dāng)隊列深度146的值等于項目802的總數(shù)(在圖8的實施例中為六),控制邏輯806即產(chǎn)生真值的圖2的BWQ充滿信號222。當(dāng)控制邏輯806產(chǎn)生真值的BWQ非空信號218時,控制邏輯806亦在圖1的BWQ地址信號178中,提供BTAC寫入隊列144的最老(或底部)項目802的圖7的分支指令地址702。此外,當(dāng)控制邏輯806產(chǎn)生真值的BWQ非空信號218時,控制邏輯806亦在BWQ數(shù)據(jù)信號248中,提供BTAC寫入隊列144的最老(或底部)項目802的圖7的字段706至724。
圖9是依本發(fā)明繪示圖1的BTAC寫入隊列144的運作流程圖。流程開始于判斷方框902。
于判斷方框902中,BTAC寫入隊列144藉由判斷圖1的隊列深度146是否等于BTAC寫入隊列144的項目總數(shù),來判斷其是否已滿。若是,則流程進(jìn)行至方框918,以更新BTAC 142;否則,流程進(jìn)行至判斷方框904。
于判斷方框904中,BTAC寫入隊列144藉由檢查指令高速緩存閑置信號158,來判斷圖1的指令高速緩存104是否閑置。若是,則流程進(jìn)行至判斷方框922,以在必要時更新BTAC 142,因為BTAC 142此時很可能不被讀?。环駝t,流程進(jìn)行至判斷方框906。
于判斷方框906中,BTAC寫入隊列144藉由檢查指令緩沖器充滿信號156,來判斷圖1的指令緩沖器106是否已滿。若是,則流程進(jìn)行至判斷方框922,以在必要時更新BTAC 142,因為BTAC 142此時很可能不被讀取;否則,流程進(jìn)行至判斷方框908。
于判斷方框908中,BTAC寫入隊列144藉由檢查預(yù)測取代信號154,來判斷一BTAC 142分支預(yù)測是否已被取代。若是,則流程進(jìn)行至判斷方框922,以在必要時更新BTAC 142,因為BTAC 142此時很可能不被讀??;否則,流程進(jìn)行至判斷方框912。
于判斷方框912中,BTAC寫入隊列144藉由檢查分支預(yù)測錯誤信號152,來判斷一BTAC 142分支預(yù)測是否已被更正。若是,則流程進(jìn)行至判斷方框922,以在必要時更新BTAC 142,因為BTAC 142此時很可能不被讀取;否則,流程進(jìn)行至判斷方框914。
于判斷方框914中,BTAC寫入隊列144判斷是否已產(chǎn)生一BTAC寫入要求176。若否,則流程返回至判斷方框902;否則,流程進(jìn)行至方框916。
于方框916中,BTAC寫入隊列144 BTAC加載該BTAC寫入要求176,并將隊列深度146遞增。該BTAC寫入要求176被加載BTAC寫入隊列144中最頂端的無效項目,而后該項目即被標(biāo)示為有效。流程接著返回至判斷方框902。
于方框918中,BTAC寫入隊列144以其最老(或底部)項目來更新BTAC142,并將隊列深度146遞減。BTAC寫入隊列144接著向下移動一個項目。BTAC寫入隊列144藉由在BWQ地址信號178中,提供該最老項目的圖7的分支指令地址字段702的值,并藉由在BWQ數(shù)據(jù)信號248中,提供該最老的BTAC寫入要求176項目的其余部分,而以該最老項目來更新BTAC142。此外,BTAC寫入隊列144將BWQ非空信號218設(shè)為真值,送至圖2的仲裁器202。若方框918是從判斷方框902抵達(dá),則BTAC寫入隊列144亦將BWQ充滿信號222設(shè)為真值,送至圖2的仲裁器202。流程從方框918進(jìn)行至判斷方框914。
需注意的是,在BTAC讀取要求信號212等待處理的一個時脈周期中,若BTAC寫入隊列144將BWQ充滿信號222設(shè)為真,且仲裁器202準(zhǔn)許BTAC寫入隊列144存取BTAC 142,則BTAC 142將發(fā)出信號表示有一失誤產(chǎn)生。若事實上在BTAC 142中,對于現(xiàn)行提取地址162所指定的快取線中BTAC 142預(yù)測要被采行的分支指令,有存在一有效的目標(biāo)地址,則前述失誤即可能是假失誤。然而,有利的是,由于在大部分情況下,BTAC 142的寫入動作可以延遲到BTAC 142不被讀取時,因而BTAC寫入隊列144可降低BTAC 142產(chǎn)生假失誤的機會。
于判斷方框922中,BTAC寫入隊列144藉由判斷隊列深度是否等于零,來判斷BTAC寫入隊列144是否為空。若是,則流程進(jìn)行至判斷方框914;否則,流程進(jìn)行至判斷方框918,以在必要時更新BTAC 142,因為BTAC 142此時很可能不被讀取。
圖10是依本發(fā)明繪示微處理器100內(nèi),用以將圖1的BTAC 142中的多余目標(biāo)地址無效化的邏輯的方框圖。
圖10顯示了圖3的BTAC 142標(biāo)記數(shù)組304接收圖1的地址182,并響應(yīng)產(chǎn)生四個標(biāo)記tag0 1002A、tag1 1002B、tag2 1002C及tag3 1002D,總稱為標(biāo)記1002。標(biāo)記1002包含圖5的一標(biāo)記502,其從標(biāo)記數(shù)組304的四路的每一路而來。此外,標(biāo)記數(shù)組響應(yīng)地產(chǎn)生標(biāo)示為1004的八個valid[7:0]位,其為從標(biāo)記數(shù)組304的四路的每一路而來的A有效位504與B有效位506。
微處理器100亦包括可接收地址182的比較器1012,其耦接至標(biāo)記數(shù)組304。在圖10的實施例中,比較器1012包含四個20位的比較器,每個比較器用以將地址182較高的20個位與一對應(yīng)的標(biāo)記1002做比較,以產(chǎn)生四個對應(yīng)的吻合信號match0 1006A、match1 1006B、match2 1006C及match31006D,總稱為1006。若地址182吻合標(biāo)記1002中對應(yīng)的一個,則對應(yīng)的比較器1012產(chǎn)生真值的對應(yīng)吻合信號1006。
微處理器100亦包括可接收吻合信號1006與有效信號1004的控制邏輯1014,其耦接至比較器1012。若所選取的標(biāo)記數(shù)組304的集合中,有一個以上的路具有一真值的吻合信號1006,及至少一真值的有效位1004,則控制邏輯1014會儲存一真值于一多余TA標(biāo)志寄存器1024,以顯示同一分支指令有多于一個的有效目標(biāo)地址存于BTAC 142中。此外,控制邏輯1014會使地址182被加載一多余TA寄存器1026。最后,控制邏輯1014將多余TA無效化數(shù)據(jù)加載一多余TA無效化數(shù)據(jù)寄存器1022。在一實施例中,儲存于多余TA無效化數(shù)據(jù)寄存器1022中的數(shù)據(jù),近似于圖7的一BTAC寫入要求176,除了分支指令地址702并未儲存,此因分支指令的地址儲存于多余TA地址寄存器1026中;目標(biāo)地址706、起始位708及橫跨位712亦未儲存,此因在一無效的BTAC 142項目中,這些字段都是毋須在意的;因此,當(dāng)一多余TA無效化的動作執(zhí)行時,目標(biāo)地址數(shù)組302并未被寫入,僅有標(biāo)記數(shù)組304被更新,以將多余的BTAC 142項目無效化。多余TA無效化數(shù)據(jù)寄存器1022的輸出包含圖2的多余TA數(shù)據(jù)信號244。多余TA標(biāo)志寄存器1024的輸出包含圖2的多余TA要求214。多余TA地址寄存器1026的輸出則包含圖2的多余TA地址234。在一實施例中,用以產(chǎn)生儲存于多余TA無效化數(shù)據(jù)寄存器1022與多余TA標(biāo)志寄存器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
則包含Avalid
504與B valid
506的邏輯“或”運算。
redundantInvalWay[3]=(valid[3]&match[3])&((valid
&match
)|(valid[1]&match[1])|(valid[2]&match[2]));redundantInvalWay[2]=(valid[2]&match[2])&((valid
&match
)|(valid[1]&match[1]));redundantInvalWay[1]=(valid[1]&match[1])&(valid
&match
);redundantInvalWay
=0;/*路0不會被無效化*/redundantTAFlag=((valid[3]&match[3])&(valid[2]&match[2]))|((valid[3]&match[3])&(valid[1]&match[1]))|
((valid[3]&match[3])&(valid
&match
))|((valid[2]&match[2])&(valid[1]&match[1]))|((valid[2]&match[2])&(valid
&match
))|((valid[1]&match[1])&(valid
&match
));表2為了正確了解圖10的多余目標(biāo)地址無效化邏輯的運作,如下文圖11部分所述,以下將以一種執(zhí)行指令的順序為例,來描述可能在BTAC 142中產(chǎn)生相同分支指令的多余目標(biāo)地址項目的情形。
圖1的第一現(xiàn)行提取地址162被送入指令高速緩存104與BTAC 142。由第一現(xiàn)行提取地址162所選取的快取線中,包含一分支指令,稱為分支-A。第一現(xiàn)行提取地址162選取了BTAC 142的一集合,稱為集合N。集合N的所有路中,并無任何標(biāo)記1002吻合第一現(xiàn)行提取地址162;因此,BTAC 142產(chǎn)生了一個失誤。在此例中,lru值508所顯示的最近最少被使用的路為2。因此,解析分支-A所得的用來更新BTAC 142的信息,就隨著分支-A指出路2需被更新的信息,皆沿管線而下。
接著,第二現(xiàn)行提取地址162被送入指令高速緩存104與BTAC 142。由第二現(xiàn)行提取地址162所選取的快取線中,包含一分支指令,稱為分支-B。第二現(xiàn)行提取地址162亦選取集合N,并命中集合N的路3;因此,BTAC 142產(chǎn)生了一個命中。此外,BTAC 142更新集合N的lru值508為路1。
接著,由于分支-A在一小程序代碼循環(huán)中,第一現(xiàn)行提取地址162再次被送入指令高速緩存104與BTAC 142,并再次選取集合N。因為分支-A的第一次執(zhí)行還未抵達(dá)圖1的儲存階段128,所以并未以分支-A的目標(biāo)地址來更新BTAC 142。因此,BTAC 142再次產(chǎn)生失誤。然而,這次lru值508所顯示的最近最少被使用的路為1,此乃由于lru 508已因分支-B的命中而被更新。因此,解析第二次執(zhí)行分支-A所得的用來更新BTAC 142的信息,就隨著第二個分支-A指出路1需被更新的信息,沿著管線而下。
接著,第一個分支-A抵達(dá)儲存階段128,并產(chǎn)生一BTAC寫入要求176,以使用分支-A的目標(biāo)地址來更新集合N的路2,分支-A隨后即被執(zhí)行。
接著,第二個分支-A抵達(dá)儲存階段128,并產(chǎn)生一BTAC寫入要求176,以使用分支-A的目標(biāo)地址來更新集合N的路1,分支-A隨后即被執(zhí)行。結(jié)果是,對于相同的分支指令,分支-A,BTAC 142中存在有兩個有效項目。其中一個項目是多余的,會使BTAC 142在使用上缺乏效率,因為多余的項目原本可用于另一分支指令,且/或可能取代掉別的分支指令的有效目標(biāo)地址。
圖11是依本發(fā)明圖10的多余目標(biāo)地址裝置的運作流程圖。流程開始于方框1102。
于方框1102中,仲裁器202準(zhǔn)許圖2的BTAC讀取要求212存取BTAC142,使得多任務(wù)器148選取現(xiàn)行提取地址162,以提供于圖1的地址信號182中,并產(chǎn)生圖2的控制信號252,以顯示要進(jìn)行BTAC 142的讀取。因此,現(xiàn)行提取地址162的較低有效位是經(jīng)由地址182作為索引使用,以選取BTAC 142的一集合。流程進(jìn)行至方框1104。
于方框1104中,比較器1012將所選取的BTAC 142集合的所有四路的圖10的標(biāo)記1002,與地址信號182中所提供的現(xiàn)行提取地址162的較高有效位作比較,以產(chǎn)生圖10的吻合信號1006。控制邏輯1014會接收圖10的吻合信號1006與有效位1004。流程進(jìn)行至判斷方框1106。
于判斷方框1106中,控制邏輯1014判斷是否有一個以上的有效標(biāo)記吻合的情形產(chǎn)生。亦即,控制邏輯1014依據(jù)有效位1004與吻合信號1006,判斷在現(xiàn)行提取地址162所選取的BTAC 142集合中,是否有二或更多路具有一有效的吻合標(biāo)記1002。若是,則流程進(jìn)行至方框1108;否則流程結(jié)束。
于方框1108中,控制邏輯1014將一真值儲存于多余TA標(biāo)志寄存器1024中,且將地址182儲存于多余TA地址寄存器1026,并將無效化數(shù)據(jù)存于多余TA無效化數(shù)據(jù)寄存器1022。尤其,控制邏輯1014將真值的we-A 714、we-B 716、inv-A 718及inv-B 722存入多余TA無效化數(shù)據(jù)寄存器1022。此外,控制邏輯1014還把依據(jù)前文圖10部分所述的表2所得的值,存入多余TA無效化數(shù)據(jù)寄存器1022的路字段724。流程進(jìn)行至方框1112。
于方框1112中,仲裁器202準(zhǔn)許圖2的多余TA要求214存取BTAC 142,使得多任務(wù)器148選取多余TA地址234,以提供于地址信號182中,并產(chǎn)生圖2的控制信號252,以顯示要進(jìn)行BTAC 142的寫入。因此,多余TA地址234的較低有效位經(jīng)由地址182作為索引使用,以選取BTAC 142的一集合。BTAC 142從多余TA數(shù)據(jù)寄存器1022所提供的多余TA數(shù)據(jù)信號244接收數(shù)據(jù),并將所選取集合中由路字段724指定的路無效化。流程結(jié)束于方框1112。
圖12是依本發(fā)明繪示圖1微處理器100內(nèi)的死結(jié)避免邏輯的方框圖。
圖12顯示了圖1的BTAC 142、指令高速緩存104、指令緩沖器106、指令格式化器108、格式化指令隊列112與多任務(wù)器136,以及圖10的控制邏輯1014。
如圖12所示,微處理器100亦包括一死結(jié)無效化數(shù)據(jù)寄存器1222、一死結(jié)標(biāo)志寄存器1224及一死結(jié)地址寄存器1226。
指令格式化器108會譯碼存于指令緩沖器106的指令,并在譯碼一個橫跨兩條快取線的分支指令時,產(chǎn)生真值的F_wrap信號1202。特別是,若指令格式化器108譯碼一個橫跨兩條快取線的分支指令,指令格式化器108在譯碼該橫跨分支指令的第一部份時,產(chǎn)生真值的F_wrap信號1202,其中此第一部份儲存于指令緩沖器106的第一快取線中,且此時并不管指令格式化器108是否已譯碼該橫跨分支指令的其余部份,而該其余部分位于第二快取線,其可能還未存在于指令緩沖器106中。F_wrap信號1202會被送至控制邏輯1014。
當(dāng)現(xiàn)行提取地址162在指令高速緩存104中產(chǎn)生失誤時,指令高速緩存104即產(chǎn)生真值的失誤信號1206。失誤信號1206會被送至控制邏輯1014。
當(dāng)送至指令高速緩存104的現(xiàn)行提取地址162為假想時,亦即現(xiàn)行提取地址162是一預(yù)測地址,如多任務(wù)器136選取BTAC預(yù)測目標(biāo)地址164作為現(xiàn)行提取地址162時,控制邏輯1014即產(chǎn)生真值的假想信號1208。假想信號1208會被送至指令高速緩存104。在一實施例中,指令高速緩存104將假想信號1208轉(zhuǎn)送至圖1的指令提取器102,以使指令提取器102可利用一假想內(nèi)存地址,預(yù)先從內(nèi)存提取在指令高速緩存104中找不到的快取線,其理由在下文圖13部分會加以說明。
BTAC 142會產(chǎn)生一采行/不采行(T/NT)信號1212,送至控制邏輯1014。真值的T/NT信號1212表示地址182命中BTAC 142;BTAC 142預(yù)測有一分支指令包含于指令高速緩存104響應(yīng)現(xiàn)行提取地址162而提供的快取線中,且該分支指令將被采行;以及BTAC 142會在BTAC預(yù)測目標(biāo)地址信號164中,提供該分支指令的一目標(biāo)地址。BTAC 142依據(jù)圖6的預(yù)測狀態(tài)A 602或預(yù)測狀態(tài)B 604的值,來產(chǎn)生T/NT信號1212,依據(jù)何者則視BTAC 142做預(yù)測時,使用部分A或B而定。
BTAC 142亦產(chǎn)生一B_wrap信號1214,送至控制邏輯1014。在B_wrap信號1214中,提供了所選取的BTAC目標(biāo)地址數(shù)組項目312的圖4橫跨位406的值。因此,假值的B_wpap信號1214表示,BTAC 142預(yù)測該分支指令并未橫跨兩條快取線。在一實施例中,控制邏輯1014會將B_wrap信號1214暫存,以保留從前次BTAC 142存取而得的B_wrap 1214的值。
控制邏輯1014亦產(chǎn)生圖1的現(xiàn)行指令指針168??刂七壿?014亦產(chǎn)生一控制信號1204,其為多任務(wù)器136的輸入選取信號。
若控制邏輯1014偵測到一死結(jié)情形(下文將詳述,亦即假值的暫存B_wrap信號1214,與真值的F_wrap信號1202、失誤信號1206及假想信號1208),則控制邏輯1014儲存一真值于死結(jié)標(biāo)志寄存器1224,以表示有一死結(jié)情形存在,因此BTAC 142中導(dǎo)致此死結(jié)情形的項目將被無效化。此外,控制邏輯1014會使地址182被加載死結(jié)地址寄存器1226。最后,控制邏輯1014會將死結(jié)無效化數(shù)據(jù)加載死結(jié)無效化數(shù)據(jù)寄存器1222。在一實施例中,儲存于死結(jié)無效化數(shù)據(jù)寄存器1222中的數(shù)據(jù),近似于圖7的一BTAC寫入要求176,除了分支指令地址702并未儲存,此因分支指令的地址儲存于死結(jié)地址寄存器1226中;目標(biāo)地址706、起始位708及橫跨位712亦未儲存,此因在一無效的BTAC 142項目中,這些字段都是毋須在意的;因此,當(dāng)一死結(jié)無效化的動作執(zhí)行時,目標(biāo)地址數(shù)組302并未被寫入,僅有標(biāo)記數(shù)組304被更新,以將預(yù)測錯誤的BTAC 142項目無效化。死結(jié)無效化數(shù)據(jù)寄存器1222的輸出包含圖2的死結(jié)數(shù)據(jù)信號246。死結(jié)標(biāo)志寄存器1224的輸出包含圖2的死結(jié)要求216。死結(jié)地址寄存器1226的輸出則包含圖2的死結(jié)地址236。存于死結(jié)無效化數(shù)據(jù)寄存器1222的路值724,則以導(dǎo)致死結(jié)情形的BTAC142項目所在的路寫入。
若控制邏輯1014偵測到死結(jié)情形,則在將預(yù)測錯誤的項目無效化之后,控制邏輯1014亦產(chǎn)生一值于控制信號1204中,以使多任務(wù)器136選取現(xiàn)行指令指針168,將微處理器100分支過去,如此包含預(yù)測錯誤的分支指令的快取線,就能被重新提取。
圖13是依本發(fā)明繪示圖12的死結(jié)避免邏輯的運作流程圖。流程開始于方框1302。
于方框1302中,現(xiàn)行提取地址162經(jīng)由地址信號182被送入指令高速緩存104與BTAC 142。在圖13中,現(xiàn)行提取地址162被稱為提取地址A。流程進(jìn)行至方框1304。
于方框1304中,提供由提取地址A所指定的一條快取線至指令緩沖器106,稱為快取線A,其包含一分支指令的第一部份,但非該分支指令的全部。流程進(jìn)行至方框1306。
于方框1306中,BTAC 142響應(yīng)提取地址A,而在T/NT信號1212中預(yù)測快取線A的該分支指令是否要被采行,并產(chǎn)生假值的B_wrap信號1214,且在BTAC預(yù)測目標(biāo)地址164中提供一假想目標(biāo)地址。流程進(jìn)行至方框1308。
于方框1308中,控制邏輯1014控制多任務(wù)器136選取BTAC預(yù)測目標(biāo)地址164,以作為下個現(xiàn)行提取地址162,稱為提取地址B??刂七壿嬕喈a(chǎn)生真值的假想信號1208,因為BTAC預(yù)測目標(biāo)地址164為假想的。流程進(jìn)行至方框1312。
于方框1312中,指令高速緩存104產(chǎn)生真值的失誤信號1206,以表示提取地址B在指令高速緩存104中產(chǎn)生失誤。正常情況下,指令提取器102會從內(nèi)存提取遺失的快取線;然而,因為假想信號1208為真,指令格式化器108并不會從內(nèi)存提取遺失的快取線,理由如下所述。流程進(jìn)行至方框1314。
于方框1314中,指令格式化器108譯碼指令緩沖器106中的快取線A,并產(chǎn)生真值的F_wrap信號1202,因為該分支指令橫跨兩條快取線。指令格式化器108會等待下條快取線被存入指令緩沖器106,如此其可完成格式化該分支指令的動作,以送至格式化指令隊列112。流程進(jìn)行至判斷方框1316。
于判斷方框1316中,控制邏輯1014判斷B_wrap信號1214是否為假、F_wrap信號1202是否為真、失誤信號1206是否為真及假想信號1208是否為真。這些構(gòu)成一死結(jié)情形,下文將加以討論。若是,則流程進(jìn)行至方框1318;否則,流程結(jié)束。
于方框1318中,控制邏輯1014將導(dǎo)致死結(jié)情形的BTAC 142項目無效化,如前文圖12部分所述。因此,下次提取地址A被送入BTAC 142時,BTAC 142將產(chǎn)生失誤,因為此時導(dǎo)致死結(jié)情形的項目已無效。流程進(jìn)行至方框1322。
于方框1322中,控制邏輯1014控制多任務(wù)器136分支至現(xiàn)行指令指針168,如前文圖12部分所述。此外,控制邏輯在控制多任務(wù)器136選取現(xiàn)行指令指針168時,會產(chǎn)生假值的假想信號1208,因為現(xiàn)行指令指針168并非假想的內(nèi)存地址?,F(xiàn)行指令指針168非常有可能會命中指令高速緩存104;然而,若沒有命中,指令提取器102仍可從內(nèi)存提取現(xiàn)行指令指針168所指定的快取線,因為假想信號1208指出現(xiàn)行指令指針168并非假想的。流程結(jié)束于方框1322。
在判斷方框1316為真時,死結(jié)情形即存在的理由是,導(dǎo)致死結(jié)所需的條件成立。第一個導(dǎo)致死結(jié)的條件是,有一多字節(jié)的分支指令橫跨兩條不同的快取線。也就是,該分支指令字節(jié)的第一部份位于一第一快取線的尾部,而該分支指令字節(jié)的第二部份則位于下條循序快取線的頭部。由于可能出現(xiàn)橫跨的分支指令,BTAC 142必須儲存預(yù)測一分支指令是否橫跨快取線的信息,如此控制邏輯1014才能在從目標(biāo)地址164提取快取線之前,知道是否要提取下條循序快取線,以取得該分支指令字節(jié)的第二部分。若BTAC 142儲存有不正確的預(yù)測信息,則BTAC 142可能會錯誤地預(yù)測該分支指令并未橫跨,而實際上卻非如此。在這種情況下,指令格式化器108會譯碼帶有該分支指令的第一部份的快取線,并偵測是否存在一分支指令,但并非該分支指令的所有字節(jié)皆已取得以進(jìn)行譯碼。所以指令格式化器108會等待下條快取線。管線的運作將一直停頓,以等待更多的指令被格式化,以便執(zhí)行。
第二個導(dǎo)致死結(jié)的條件是,由于BTAC 142預(yù)測分支指令并未橫跨,分支控制邏輯1014即從BTAC 142所提供的目標(biāo)地址164處提取快取線(而非提取下條循序快取線)。然而,目標(biāo)地址164在指令高速緩存104中產(chǎn)生失誤。因此,指令格式化器108所等待的下條快取線必須從內(nèi)存提取。
第三個導(dǎo)致死結(jié)的條件是,存在有不希望從某些內(nèi)存地址范圍提取指令的微處理器芯片組,若該微處理器從這些地址范圍提取指令,即可能使系統(tǒng)當(dāng)機,或造成其它不理想的系統(tǒng)狀態(tài)。一假想地址,如BTAC 142所提供的目標(biāo)地址164,即可能導(dǎo)致從此種內(nèi)存地址范圍提取指令。因而,微處理器100并不會依據(jù)此假想的BTAC預(yù)測目標(biāo)地址164,從內(nèi)存提取一遺失的快取線。
因此,指令格式化器108與管線的其余部分皆暫停運作,以等待另一條快取線。同時,指令提取器亦暫停運作,以等待管線告知其進(jìn)行非假想的提取動作。在非死結(jié)的情形下,像是目標(biāo)地址164命中指令高速緩存104時,指令格式化器108將格式化分支指令(雖然是以錯誤的字節(jié)進(jìn)行),并把格式化的分支指令送至管線的執(zhí)行階段,其將偵測出預(yù)測錯誤,并更正BTAC 142的錯誤預(yù)測,藉以使假想信號1208變?yōu)榧?。然而,在死結(jié)的情形下,由于指令格式化器108在等待下條快取線,所以并不會提供分支指令至執(zhí)行階段,于是執(zhí)行階段就無法偵測到預(yù)測錯誤。因此,死結(jié)的情況就產(chǎn)生了。然而,圖12的死結(jié)避免邏輯有利地避免死結(jié)的產(chǎn)生,如圖12及13所述,使微處理器100能適當(dāng)?shù)剡\作。
雖然本發(fā)明及其目的、特征與優(yōu)點已詳細(xì)敘述,其它實施例亦可包含在本發(fā)明的范圍內(nèi)。例如,雖然寫入隊列依單端口BTAC的情形敘述,但某些微處理器組態(tài)中,假失誤仍可能發(fā)生在多端口BTAC的情形,盡管發(fā)生頻率較低。因此,亦可使用寫入隊列,以降低一多端口BTAC的假失誤率。此外,除了此處所敘述的之外,其它BTAC未被讀取的情形也可能存在于某些微處理器中,其中排在寫入隊列中的要求可能會被寫入BTAC。
再有,雖然本發(fā)明及其目的、特征與優(yōu)點已詳細(xì)敘述,其它實施例亦可包含在本發(fā)明的范圍內(nèi)。本發(fā)明除了利用硬件來實施外,也可實施于計算機可使用(如可讀取)媒介所內(nèi)含的計算機可讀取碼(如計算機可讀取程序代碼、數(shù)據(jù)等)中。計算機碼使本發(fā)明所揭示的功能或架構(gòu)(或兩者)成為可行。例如,這可藉由使用一般程序語言(如C、C++、JAVA及類似的程序語言);GDSII數(shù)據(jù)庫;包括Verilog HDL、VHDL、Altera HDL(AHDL)等的硬件描述語言(HDL);或此技術(shù)領(lǐng)域中其它可用的程序化及/或電路記錄工具來達(dá)到。計算機碼可置于任何已知的計算機可使用(如可讀取)媒介,包括半導(dǎo)體內(nèi)存、磁盤、光盤(如CD-ROM、DVD-ROM及類似物),并可作為計算機數(shù)據(jù)信號,內(nèi)含于計算機可使用(如可讀取)傳輸媒介(如載波或任何其它媒介,包括數(shù)字、光學(xué)或運用模擬信號的媒介)中。就此而言,計算機碼可在通訊網(wǎng)路(包括因特網(wǎng)及內(nèi)部網(wǎng)絡(luò))上傳輸。要了解到的是,本發(fā)明可實施于計算機碼(如智能財產(chǎn)權(quán)(IP)核心(如微處理器核心)的一部份,或如系統(tǒng)層級的設(shè)計(如系統(tǒng)單芯片(SOC)))中,并且可轉(zhuǎn)換成硬件,作為集成電路制造的一部份。再有,本發(fā)明亦可作為硬件及計算機碼的組合。
總之,以上所述,僅為本發(fā)明的較佳實施例而已,不能以之限定本發(fā)明所實施的范圍。凡依本發(fā)明權(quán)利要求所作的均等變化與修飾,皆應(yīng)屬于本發(fā)明專利涵蓋的范圍內(nèi)。
權(quán)利要求
1.一種可將一集合關(guān)聯(lián)分支目標(biāo)地址高速緩存中對同一分支指令所儲存的一多余項目無效化的裝置,其特征在于包括一狀態(tài)指示器,用以指出一指令高速緩存提取地址所選取該分支目標(biāo)地址高速緩存的一集合中,是否有至少兩路包含同一分支指令的一有效分支目標(biāo)地址;以及一控制邏輯,耦接至該狀態(tài)指示器,用以在該狀態(tài)指示器指出該選取集合中,有至少兩路包含同一分支指令的一有效分支目標(biāo)地址時,將該選取集合的該至少兩路的其中一路無效化。
2.如權(quán)利要求1所述的裝置,其特征在于還包括一寄存器,耦接至該控制邏輯,用以儲存該指令高速緩存提取地址,供該控制邏輯使用,以將該選取集合的該至少兩路的該其中一路無效化。
3.如權(quán)利要求1所述的裝置,其特征在于該選取集合是通過該指令高速緩存提取地址的一索引部分所選取。
4.如權(quán)利要求1所述的裝置,其特征在于該控制邏輯在將該選取集合的該至少兩路的其中一路無效化后,清除該狀態(tài)指示器。
5.如權(quán)利要求1所述的裝置,其特征在于還包括一寄存器,耦接至該控制邏輯,可儲存數(shù)據(jù),以指定所要無效化的該選取集合的該至少兩路的該其中一路,用于將該選取集合的該至少兩路的該其中一路無效化。
6.如權(quán)利要求1所述的裝置,其特征在于還包括至少兩個有效信號,耦接至該控制邏輯,每個有效信號用以指出,該選取集合的該至少兩路的一對應(yīng)路是否包含一有效分支目標(biāo)地址。
7.如權(quán)利要求1所述的裝置,其特征在于還包括至少兩個吻合信號,耦接至該控制邏輯,每個吻合信號用以指出,該指令高速緩存提取地址的一標(biāo)記部分是否吻合該選取集合的該至少兩路的一對應(yīng)路所儲存的一標(biāo)記。
8.如權(quán)利要求7所述的裝置,其特征在于還包括至少兩個比較器,耦接至該控制邏輯,每個比較器用以將該指令高速緩存提取地址的該標(biāo)記部分與該選取集合的該至少兩路的該對應(yīng)路所存的該標(biāo)記作比較,并且響應(yīng)該比較動作,產(chǎn)生該至少兩個吻合信號中的一對應(yīng)信號。
9.一種可將一分支目標(biāo)地址高速緩存中對同一分支指令所儲存的多余項目無效化的裝置,其特征在于包括一偵測邏輯,用以偵測該分支目標(biāo)地址高速緩存的一選取集合的多個路中,是否有一個以上有效的路儲存同一分支指令的一目標(biāo)地址;以及一無效化邏輯,耦接至該偵測邏輯,對于該選取集合中的該一個以上有效的路,保留其中一個,并將其它的路無效化。
10.如權(quán)利要求9所述的裝置,其特征在于還包括一寄存器,耦接至該無效化邏輯,用以儲存一指令高速緩存提取地址;其中該選取集合藉由該指令高速緩存提取地址的一索引部分所選取,其中該無效化邏輯使用儲存于該寄存器的該指令高速緩存提取地址,以將該選取集合中的該一個以上有效的路的該其中一個予以保留,并將其它的路無效化。
11.如權(quán)利要求10所述的裝置,其特征在于該偵測邏輯組態(tài)為對該選取集合的這些路的每一路接收一對應(yīng)的吻合信號,該吻合信號指出,該對應(yīng)路的一地址標(biāo)記是否吻合該指令高速緩存提取地址的一地址標(biāo)記部分。
12.如權(quán)利要求11所述的裝置,其特征在于該偵測邏輯更組態(tài)為對該選取集合的這些路的每一路接收一對應(yīng)的有效指示信號,該有效指示信號指出該對應(yīng)路是否有效。
13.如權(quán)利要求12所述的裝置,其特征在于包括一標(biāo)志,耦接至該偵測邏輯,用以指出該分支目標(biāo)地址高速緩存的一選取集合的多個路中,是否有一個以上有效的路儲存同一分支指令的一目標(biāo)地址,其中若這些路中有一個以上的路的該吻合信號與該有效指示信號為真,則該偵測邏輯將該標(biāo)志設(shè)為一真值。
14.如權(quán)利要求13所述的裝置,其特征在于若該標(biāo)志為真,則該無效化邏輯將該選取集合的該一個以上有效的路的該一個無效化。
15.一種管線化微處理器,其特征在于包括一指令高速緩存,具有一地址輸入端,以接收一地址,選取包含一分支指令的一快取線;一分支目標(biāo)地址高速緩存,耦接至該指令高速緩存,可響應(yīng)該地址而產(chǎn)生復(fù)數(shù)個指示信號,每一這些指示信號指出該地址所選取的該分支目標(biāo)地址高速緩存的一集合中一對應(yīng)路是否儲存該分支指令的一有效目標(biāo)地址;以及一邏輯,耦接至該分支目標(biāo)地址高速緩存,組態(tài)為在這些指示信號指出這些路其中二或更多個路儲存有該分支指令的一有效目標(biāo)地址時,將該選取集合的這些路其中一或更多個路無效化。
16.如權(quán)利要求15所述的微處理器,其特征在于還包括一第一管線階段,其中該分支目標(biāo)地址高速緩存指出在該第一管線階段中該地址的一失誤,且其中該分支目標(biāo)地址高速緩存指定這些路其中之一,用以儲存該目標(biāo)地址;以及一第二管線階段,位于該第一管線階段之后,用以要求該分支目標(biāo)地址高速緩存,將該分支指令的一解析目標(biāo)地址寫入該分支目標(biāo)地址高速緩存于該第一管線階段所指定的這些路的其中之一。
17.如權(quán)利要求16所述的微處理器,其特征在于該第一與第二管線階段相隔至少三個管線階段。
18.如權(quán)利要求16所述的微處理器,其特征在于一個后續(xù)從該指令高速緩存提取該分支指令的動作,其可能在一個先前提取該分支指令的動作抵達(dá)該第二階段之前,即抵達(dá)該第一階段,以使得該分支目標(biāo)地址高速緩存的該選取集合在這些路的二或更多個路中,儲存有該分支指令的一有效目標(biāo)地址。
19.一種可將一集合關(guān)聯(lián)分支目標(biāo)地址高速緩存中對同一分支指令所儲存的多余項目無效化的方法,其特征在于包括判斷一指令高速緩存提取地址的一索引部分所選取的該分支目標(biāo)地址高速緩存的一集合中,是否有一個以上的路的標(biāo)記吻合該指令高速緩存提取地址的一標(biāo)記部分,及是否有效;以及若該選取集合中有一個以上的路有效且吻合,則保留該選取集合其中一個路,并將其它的路無效化。
20.如權(quán)利要求19所述的方法,其特征在于還包括響應(yīng)該判斷動作,儲存一指示,以指出一指令高速緩存提取地址的一索引部分所選取的該分支目標(biāo)地址高速緩存的一集合中,有一個以上的路的標(biāo)記吻合該指令高速緩存提取地址的一標(biāo)記部分,且為有效。
21.如權(quán)利要求19所述的方法,其特征在于還包括響應(yīng)該判斷動作,儲存該指令高速緩存提取地址。
22.如權(quán)利要求19所述的方法,其中更包括響應(yīng)該判斷動作,儲存一指示,以指出該選取集合中除了其中一路,其它的路要被無效化。
23.一種可將一N路集合關(guān)聯(lián)分支目標(biāo)地址高速緩存的同一集合中,對同一分支指令所儲存的一多余項目無效化的方法,其特征在于包括依照一指令提取地址的一較低部分選取該分支目標(biāo)地址高速緩存的一N路集合;將該N路集合的N個對應(yīng)路的N個地址標(biāo)記與該指令提取地址的一較高部分作比較;判斷該N個地址標(biāo)記中是否有二或更多個標(biāo)記吻合該較高部分且為有效;以及若該N個地址標(biāo)記中,有二或更多個標(biāo)記吻合該較高部分且為有效,則將該有效的N個地址標(biāo)記中,吻合該較高部分的該二或更多個標(biāo)記所對應(yīng)的該N路的一或更多個路無效化。
24.一種內(nèi)含于一傳輸媒介中的計算機數(shù)據(jù)信號,其特征在于包括計算機可讀取程序代碼,用以提供一管線化微處理器,該程序代碼包括第一程序代碼,用以提供一指令高速緩存,其具有一地址輸入端,以接收一地址,選取包含一分支指令的一快取線;第二程序代碼,用以提供一分支目標(biāo)地址高速緩存,耦接至該指令高速緩存,可響應(yīng)該地址而產(chǎn)生復(fù)數(shù)個指示信號,每一這些指示信號指出該地址所選取的該分支目標(biāo)地址高速緩存的一集合中一對應(yīng)路是否儲存該分支指令的一有效目標(biāo)地址;以及第三程序代碼,用以提供一邏輯,耦接至該分支目標(biāo)地址高速緩存,組態(tài)為在這些指示信號指出這些路其中二或更多個路儲存有該分支指令的一有效目標(biāo)地址時,將該選取集合的這些路其中一或更多個路無效化。
全文摘要
本發(fā)明公開了一種可將N路集合關(guān)聯(lián)分支目標(biāo)地址高速緩存(BTAC)中對同一分支指令所儲存的多余項目無效化的裝置及方法。一指令高速緩存提取地址的索引部分會被送入BTAC,以選取其中一具有N路的集合??刂七壿媱t偵測該選取集合的N路中,是否有一個以上的路包含吻合該提取地址的標(biāo)記部分的一個有效標(biāo)記。一標(biāo)志會被設(shè)定,以顯示上述情況是否發(fā)生,而該提取地址則儲存于一寄存器中??刂七壿嬰S后對于該N路中包含吻合該提取地址標(biāo)記的有效標(biāo)記的路,保留其中一路,其它路則予以無效化。由此可消除相同分支指令的多余目標(biāo)地址,使BTAC可快取更多分支指令的目標(biāo)地址,而增進(jìn)BTAC的效率。
文檔編號G06F12/08GK1558325SQ20041000327
公開日2004年12月29日 申請日期2004年2月3日 優(yōu)先權(quán)日2004年2月3日
發(fā)明者湯瑪斯·麥當(dāng)勞, 湯瑪斯 麥當(dāng)勞 申請人:智慧第一公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1