專利名稱::微處理器及其執(zhí)行方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及非循序執(zhí)行的微處理器領(lǐng)域,特別涉及其分支指令的執(zhí)行。
背景技術(shù):
:超標(biāo)量微處理器(superscalarmicroprocessors)具有多個(gè)執(zhí)行單元(executionunits),用以執(zhí)行微處理器的指令集(instructionset)。超標(biāo)量微處理器通過多重執(zhí)行單元(multipleexecutionunit)來改善處理效能,因此超標(biāo)量微處理器能夠在每一個(gè)時(shí)鐘周期中同時(shí)地執(zhí)行多重指令。使得超標(biāo)量微處理器具有這種潛在效能改善的關(guān)鍵是必須讓指令持續(xù)地供應(yīng)給執(zhí)行單元來執(zhí)行;否則,超標(biāo)量微處理器的效能并不會(huì)比標(biāo)量微處理器的效能更好,并且超標(biāo)量微處理器會(huì)比標(biāo)量微處理器花費(fèi)更多的硬件成本。舉例而言,執(zhí)行單元用以載入并存儲(chǔ)指令運(yùn)算元(instructionoperands)、計(jì)算地址、執(zhí)行邏輯和計(jì)算操作,以及解析(resolve)分支指令(branchinstructions)0如果使用愈多數(shù)量及類型的執(zhí)行單元,在每一個(gè)時(shí)鐘周期,微處理器要為每一個(gè)執(zhí)行單元找回指令的程序指令串流(programinstructionstream)的范圍也愈大。這通常稱為微處理器的預(yù)尋找能力(lookaheadcapability)。有一種方法已經(jīng)被用來改善微處理器的預(yù)尋找能力,其允許指令不依照程序的順序執(zhí)行,并且通稱為非循序執(zhí)行微處理器(out-of-orderexecutionmicroprocessor)。雖然指令可以非循序地執(zhí)行,但是多數(shù)微處理器架構(gòu)仍需將指令依照程序順序引退(retiredinprogramorder)。換句話說,被指令結(jié)果影響的微處理器架構(gòu)的狀態(tài)僅能依照程序順序被更新。非循序執(zhí)行暨循序引退微處理器通常包括相當(dāng)多的管線級(jí)(pipelinestages),所以有時(shí)候稱為超級(jí)管線化(super-pipelining)。微處理器具有這么多管線級(jí)的原因之一是若微處理器的指令集架構(gòu)允許指令改變長度,則在管線前端通常便需要相當(dāng)多的管線級(jí),用以將未差異化指令字節(jié)(undifferentiatedinstructionbytes)的串流作語法分析(parse),并且將已語法分析的指令(parsedinstructions)轉(zhuǎn)譯成微指令。雖然在微處理器設(shè)計(jì)領(lǐng)域,使用分支預(yù)測器對(duì)效能是有助益的,但在超級(jí)管線化的微處理器中,發(fā)生分支指令對(duì)效能的不利影響是眾所皆知的。具體而言,在用以根據(jù)分支預(yù)測器所提供的預(yù)測分支目標(biāo)地址(predictedbranchtargetaddress)提取指令的級(jí),與使得提取器(fetcher)在不同于預(yù)測分支目標(biāo)地址的解析出的目標(biāo)地址(resolvedtargetaddress)開始提取指令的級(jí)之間,如果管線級(jí)的數(shù)量越多,則相關(guān)于分支錯(cuò)誤預(yù)測(branchmispredictions)的效能損失(penalty)也越大。因此,亟需一種有效的執(zhí)行方法,用以在非循序執(zhí)行暨循序引退的微處理器內(nèi)執(zhí)行分支指令。
發(fā)明內(nèi)容本發(fā)明一實(shí)施例提供一種管線化非循序執(zhí)行暨循序引退的微處理器,包括分支預(yù)測器、提取單元以及至少一執(zhí)行單元。分支預(yù)測器用以預(yù)測分支指令的預(yù)測目標(biāo)地址。提取單元耦接于分支預(yù)測器,用以從上述預(yù)測目標(biāo)地址提取分支指令。執(zhí)行單元,耦接于提取單元,用以解析分支指令的目標(biāo)地址,并且預(yù)測目標(biāo)地址與所解析出的目標(biāo)地址是否不同;當(dāng)預(yù)測目標(biāo)地址與所解析出的目標(biāo)地址不同時(shí),判斷是否具有程序順序較舊于分支指令且需要被校正的未引退指令;若沒有程序順序較舊于分支指令且需要被校正的未引退指令,則清除由預(yù)測目標(biāo)地址所提取的錯(cuò)誤預(yù)測的分支指令,并使得提取單元由所解析出的目標(biāo)地址進(jìn)行提取,以便執(zhí)行分支指令;以及若有程序順序較舊于上述分支指令且需要被校正的指令,則暫緩執(zhí)行分支指令。本發(fā)明另一實(shí)施例提供一種執(zhí)行方法,用以在管線化非循序執(zhí)行暨循序引退微的處理器中執(zhí)行分支指令,包括預(yù)測分支指令將被解析至第一提取路徑且根據(jù)上述預(yù)測由第一提取路徑提取分支指令;在上述預(yù)測和提取步驟之后,解析分支指令至第二提取路徑,第二提取路徑不同于第一提取路徑;判斷是否具有程序順序較舊于分支指令且需要被校正的未引退指令;若沒有程序順序較舊于分支指令且需要被校正的未引退指令,則清除由第一提取路徑所提取的錯(cuò)誤預(yù)測分支指令,并改由第二提取路徑提取分支指令,以執(zhí)行分支指令;以及若有程序順序較舊于分支指令且需要被校正的未引退指令,則暫緩執(zhí)行分支指令。圖1為根據(jù)本發(fā)明的微處理器的方塊圖;圖2為圖1微處理器的操作流程圖,其用以說明非循序微處理器的選擇性執(zhí)行。主要元件符號(hào)說明100微處理器;102指令快取存儲(chǔ)器;124指令格式器;126已格式化指令隊(duì)列;104指令轉(zhuǎn)譯器;128已轉(zhuǎn)譯指令隊(duì)列;106寄存器別名表;108保留站;166載入單元;164執(zhí)行邏輯單元;162分支指令比對(duì)邏輯單元;158控制邏輯單元;152、154、156寄存器;112執(zhí)行單元;114引退單元;118分支預(yù)測器;116重整緩沖器;122提取單元;172加法器;170、174提取地址;176預(yù)測目標(biāo)地址;138重新執(zhí)行指令;136正確分支地址;134分支校正信號(hào);178指令;146載入指令錯(cuò)失標(biāo)簽;144整數(shù)指令重新執(zhí)行標(biāo)簽;142分支指令錯(cuò)誤預(yù)測標(biāo)簽;132清除信號(hào)。具體實(shí)施例方式圖1為本發(fā)明的微處理器100的方塊圖。微處理器100包括由多個(gè)級(jí)(stages)或功能單元(functionalunits)所構(gòu)成的管線,此管線包括提取單元(instructionfetchunit)122、指令快取存儲(chǔ)器(instructioncache)102、指令格式器(instructionformatter)124,已格式化指令隊(duì)列(formattedinstructionqueue)1洸、指令轉(zhuǎn)譯器(instructiontranslator)104、已轉(zhuǎn)譯指令隊(duì)列(translatedinstructionqueue)128、寄存器別名表(registeraliastable)106、保留站(reservationstation)108、執(zhí)行單元(executionunit)112,以及引退單元(retireunit)114。微處理器100還包括分支預(yù)測器(branchpredictor)118,耦接到提取單元122。微處理器100還包括重整緩沖器(reorderbuffer)116,耦接到寄存器別名表106、保留站108、執(zhí)行單元112以及引退單元114。執(zhí)行單元112包括載入單元(loadunit)166、執(zhí)行邏輯單元(executionlogic)164,以及分支指令比對(duì)邏輯單元(branchcheckinglogic)162,上述每一個(gè)均耦接至控制邏輯單元(controllogic)158.執(zhí)行單元112也包括寄存器(register)156、寄存器154,以及寄存器152。寄存器156用以存儲(chǔ)最舊的錯(cuò)失的載入指令(oldestmissingloadinstruction)的重整緩沖器標(biāo)簽(ROBtag);寄存器154用以存儲(chǔ)最舊的被重新執(zhí)行的整數(shù)指令(oldestreplayingintegerinstruction)的重整緩沖器標(biāo)簽;寄存器152用以存儲(chǔ)最舊的被錯(cuò)誤預(yù)測的分支指令(oldestmispredictedbranchinstruction)的重整緩沖器標(biāo)簽,上述每一個(gè)寄存器均耦接至控制邏輯單元158??刂七壿媶卧?58產(chǎn)生正確分支地址(correctbranchaddress)136至提取單元122??刂七壿媶卧?58也產(chǎn)生分支校正信號(hào)(branchcorrectsignal)134至提取單元122、指令格式器124、已格式化指令隊(duì)列126、指令轉(zhuǎn)譯器104、已轉(zhuǎn)譯指令隊(duì)列128,以及寄存器別名表106。在一實(shí)施例中,執(zhí)行單元112中除了載入單元166之外所有的單元均包括于單一的執(zhí)行單元(即多個(gè)整數(shù)單元(integerunit)中的一個(gè))內(nèi),而載入單元166是與整數(shù)單元分立的執(zhí)行單元112。在一實(shí)施例中,微處理器100為x86架構(gòu)微處理器。能夠正確地執(zhí)行為x86架構(gòu)微處理器設(shè)計(jì)的大部分應(yīng)用程序的微處理器稱為x86架構(gòu)微處理器。如果微處理器希望得到正確的結(jié)果,則應(yīng)用程序需要被正確地執(zhí)行。微處理器100將指令非循序地執(zhí)行且循序地引退。因此,即使執(zhí)行單元112非循序地產(chǎn)生指令的結(jié)果,引退單元114會(huì)等到該指令是微處理器100中最舊的完成的指令為止,才會(huì)通過指令的結(jié)果來更新微處理器100的架構(gòu)狀態(tài)。提取單元122提供提取地址170至指令快取存儲(chǔ)器102,用以指定下一個(gè)提取地址而從指令快取存儲(chǔ)器102提取指令。加法器172將提取地址170增量(increment)以產(chǎn)生接續(xù)于提取地址170的下一個(gè)接續(xù)的提取地址174,提取地址174被提供至提取單元122。提取單元122也從分支預(yù)測器118接收預(yù)測目標(biāo)地址(predictedtargetaddress)176。提取單元122也從執(zhí)行單元112接收正確分支地址136。如下所述,提取單元122由前述所提供的多個(gè)地址中選擇一者作為提供至指令快取存儲(chǔ)器102的提取地址170。若控制邏輯單元158發(fā)出分支校正信號(hào)134,則提取單元122選擇正確分支地址136;若分支預(yù)測器118預(yù)測分支方向已經(jīng)發(fā)生,則提取單元122選擇預(yù)測目標(biāo)地址176;否則,提取單元122選擇接續(xù)的提取地址174。分支指令的預(yù)測分支地址是隨著沿管線而下的分支指令而被提供。如果分支預(yù)測器118預(yù)測分支不發(fā)生,則預(yù)測分支地址即為接續(xù)的提取地址174;若分支預(yù)測器118預(yù)測分支發(fā)生,則預(yù)測分支地址即為預(yù)測目標(biāo)地址176。分支預(yù)測器118可能會(huì)錯(cuò)誤預(yù)測(mispredict)分支指令,故需微處理器100以校正該錯(cuò)誤預(yù)測,使得正確的指令能夠被提取并執(zhí)行。如果執(zhí)行單元112接著校正分支(如稍后的討論),則預(yù)測分支地址變成正確分支地址136。預(yù)測分支地址是隨著分支指令和有關(guān)于指令178的其他信息而被提供至執(zhí)行單元112。在微處理器100中,有益于校正錯(cuò)誤預(yù)測的分支指令的技術(shù)方案可由以下步驟分別描述。步驟1執(zhí)行單元112解析分支指令。換句話說,執(zhí)行單元112接收用以解析分支指令的輸入運(yùn)算元(inputoperands)并根據(jù)輸入運(yùn)算元來判斷分支方向和分支地址。具體而言,執(zhí)行單元112檢查分支指令所指定的條件碼(conditioncode),以判斷該條件碼是否符合由分支指令所指定的分支條件而使得分支即將發(fā)生或不會(huì)發(fā)生,并且執(zhí)行單元112亦根據(jù)分支指令所指定的來源運(yùn)算元(sourceoperands)來計(jì)算分支指令的目標(biāo)地址。在解析分支指令的分支方向和目標(biāo)地址后,無論因?yàn)榉种ьA(yù)測器118預(yù)測了錯(cuò)誤的方向(分支發(fā)生或不發(fā)生)和/或錯(cuò)誤的分支目標(biāo)地址,執(zhí)行單元112都會(huì)判斷出分支預(yù)測器118錯(cuò)誤預(yù)測了分支。為了簡化說明,以下說明假設(shè)分支預(yù)測器118預(yù)測路徑A(pathA)并且提取單元122由路徑A提?。坏?,路徑B(pathB)才是正確的路徑。步驟2:接著,執(zhí)行單元112執(zhí)行分支指令。換句話說,執(zhí)行單元112:(1)通知(tell)寄存器別名表106停止派送(dispatch)指令;(2)清除(flush)管線前端;以及(3)由執(zhí)行單元112提供的正確分支地址136指出正確的路徑B,以通知提取單元122在正確的路徑B開始提取。寄存器別名表106是管線的最后一級(jí)(laststages),并依照程序順序接收指令。管線的前端即為在寄存器別名表106之前的部分。在很多情況中,微處理器100經(jīng)常具有很多較舊于(older)錯(cuò)誤預(yù)測的分支指令的指令,必須在錯(cuò)誤預(yù)測的分支指令成為最舊的指令并被引退之前先依照程序順序被引退。因此,在分支指令成為最舊的指令的期間,微處理器100提取并處理良好(good)的指令(提取自正確的路徑B的指令),并以此填滿管線的前端。步驟3最后,因?yàn)楣芫€的末端包括不應(yīng)該被執(zhí)行的指令(因?yàn)樘崛∽藻e(cuò)誤的路徑A),引退單元114將分支指令引退并清除管線的末端。管線的末端即為在寄存器別名表106之后的部分。步驟4引退單元114通知寄存器別名表106再次開始派送指令,即當(dāng)執(zhí)行單元112在步驟2執(zhí)行分支指令時(shí)由正確的路徑B提取并處理的指令。因?yàn)樵谝藛卧?14將錯(cuò)誤預(yù)測的分支指令引退前,微處理器100也許就可以在管線前端中的正確分支地址136開始提取并處理指令,故步驟2中所述的分支指令若能不依照程序順序地被執(zhí)行(即錯(cuò)誤預(yù)測的早期校正)是有助益的。換句話說,由正確的路徑B提取的指令將被執(zhí)行的N個(gè)時(shí)鐘周期會(huì)短于執(zhí)行單元112并未根據(jù)錯(cuò)誤預(yù)測而執(zhí)行分支指令,卻空等著直到分支指令準(zhǔn)備好要引退為止的時(shí)間。N的最大值由當(dāng)微處理器100開始執(zhí)行分支指令(即校正錯(cuò)誤預(yù)測)開始算起,直到來自『正確的』分支路徑B的第一個(gè)指令到達(dá)寄存器別名表106為止的時(shí)鐘周期。在一實(shí)施例中,因?yàn)榉种p失(branchpenalty)高達(dá)17個(gè)時(shí)鐘周期,故這么作是特別有助益的。具體而言,在一實(shí)施例中,一旦提取地址170被重新導(dǎo)向(redirected)至新的分支路徑,直到來自于新分支路徑的第一個(gè)指令到達(dá)寄存器別名表106為止,需花費(fèi)10個(gè)時(shí)鐘周期。換句話說,通過早期校正,分支損失的時(shí)鐘周期被隱藏(hidden)了;要注意的是,微處理器100會(huì)將介于校正開始與引退單元114備妥要引退錯(cuò)誤預(yù)測的指令之間的時(shí)鐘數(shù)目隱藏起來。然而,非循序地執(zhí)行/校正分支指令并不一定是有助益的。以下說明微處理器100非循序地執(zhí)行/校正分支指令卻未產(chǎn)生助益的情況。具體而言,此情況為分支預(yù)測器118確實(shí)已正確地預(yù)測分支指令,然而執(zhí)行單元112卻因?yàn)榻邮盏讲徽_的輸入運(yùn)算元(例如條件碼和/或目標(biāo)地址計(jì)算運(yùn)算元),而不正確地解析分支指令。接著,執(zhí)行單元112錯(cuò)誤地認(rèn)定分支預(yù)測器118錯(cuò)誤預(yù)測分支(即執(zhí)行單元112判斷預(yù)測的分支方向和/或分支地址不符合已解析的分支方向和/或分支地址),并執(zhí)行/校正該分支。執(zhí)行單元112之所以接收到錯(cuò)誤的輸入運(yùn)算元,是因?yàn)榉种е噶畈徽撌侵苯踊蜷g接通過相關(guān)性的鏈結(jié)(chainofdependencies)與較舊的分支指令的條件碼和/或來源運(yùn)算元有關(guān),而沒有提供正確的輸入運(yùn)算元給執(zhí)行單元112。舉例而言,較舊的載入指令在數(shù)據(jù)快取存儲(chǔ)器內(nèi)的相關(guān)性鏈結(jié)的某處被錯(cuò)失而提供過期數(shù)據(jù)(staledata)。為了簡化說明無助益的技術(shù)方案,以下假設(shè)分支預(yù)測器118正確地預(yù)測路徑A并且提取單元122由路徑A提取,其步驟分述如下步驟1如同上述有助益的技術(shù)方案的步驟1,即執(zhí)行單元112解析了分支指令指向路徑B。步驟2如同上述有助益的技術(shù)方案的步驟2,即執(zhí)行單元112執(zhí)行/校正分支指令至路徑B。步驟3接續(xù)在步驟2的執(zhí)行/校正,比步驟1和2的已執(zhí)行/已校正分支指令舊的指令成為最舊的指令,并且引退單元114開始重新執(zhí)行(r印lay)重整緩沖器116中最舊的指令和所有較新的指令,其中包括已執(zhí)行/已校正的分支指令。重新執(zhí)行表示引退單元114清除管線的末端,以及從重整緩沖器116發(fā)送重新執(zhí)行指令138至保留站108,亦即將重整緩沖器116中全部有效的指令循序地重新派送(re-dispatch)至保留站108。(若被重新執(zhí)行的較舊的指令是錯(cuò)誤預(yù)測的分支指令,則當(dāng)執(zhí)行單元112執(zhí)行/校正目前正重新執(zhí)行中的較舊的分支指令時(shí),管線的前端也會(huì)被清除)步驟4在重新執(zhí)行步驟2中被執(zhí)行/校正的相同的分支指令時(shí),執(zhí)行單元112解析分支指令后判斷路徑A是正確的路徑而非路徑B。這表示在步驟2中,由管線前端被清除的指令實(shí)際上即為正確地被提取的指令。很不幸地,這也表示微處理器100現(xiàn)在必須校正在步驟2中執(zhí)行的『校正』。(要注意的是,在重新執(zhí)行中,執(zhí)行單元112見到的『預(yù)測』為路徑B,即執(zhí)行單元112在步驟2中所校正的路徑;然而,往路徑B的『預(yù)測』卻不是分支預(yù)測器118所預(yù)測的;確切地說,該『預(yù)測』是由執(zhí)行單元112在步驟2中當(dāng)其執(zhí)行/校正該分支指令時(shí)所預(yù)測的。)步驟5類似于上述步驟2,根據(jù)步驟4中重新執(zhí)行所作的解析,執(zhí)行單元112執(zhí)行/校正分支。然而,在步驟4中,執(zhí)行單元112是將路徑校正為路徑A。因此步驟2所作的執(zhí)行/校正是個(gè)缺點(diǎn),這是因?yàn)椴襟E2所作的執(zhí)行/校正造成微處理器100清除了那些分支預(yù)測器在步驟1之前已經(jīng)正確地預(yù)測路徑A,且已經(jīng)開始提取和處理的指令,而那些相同的指令現(xiàn)在必須在管線前端被重新提取(re-fetched)和重新處理(re-processed)。以下摘要說明上述無助益的校正錯(cuò)誤預(yù)測分支指令的技術(shù)方案,即分支預(yù)測器9118首先預(yù)測路徑A,而提取單元122由路徑A提取分支指令。接著,執(zhí)行單元112解析分支為路徑B,事實(shí)上因?yàn)閳?zhí)行單元112接收錯(cuò)誤的輸入運(yùn)算元,所以路徑B是不正確的,并且在步驟2執(zhí)行/校正,使得提取單元122由(錯(cuò)誤的)路徑B提取分支指令。然而,分支指令仍被重新執(zhí)行(因?yàn)檩^舊的一個(gè)指令使其如此),并且在重新執(zhí)行期間,執(zhí)行單元112解析分支為路徑A,其中路徑A是正確的路徑。因?yàn)閳?zhí)行單元112在重新執(zhí)行期間接收到分支指令的正確的輸入運(yùn)算元,所以執(zhí)行單元112在重新執(zhí)行期間解析分支為路徑A。這是因?yàn)樵诘谝淮谓馕鲋袥]有提供正確結(jié)果的相關(guān)性鏈結(jié)內(nèi)的指令現(xiàn)在產(chǎn)生正確結(jié)果,而正確結(jié)果被提供給執(zhí)行單元112,用以解析分支指令。換句話說,相較于執(zhí)行單元112第一次解析分支,在本次重新執(zhí)行中所用的條件碼標(biāo)志和/或目標(biāo)地址計(jì)算運(yùn)算元是不同的。因此,執(zhí)行單元112執(zhí)行/校正使得提取單元122能夠由路徑A提取分支指令。針對(duì)此問題(既能享有有助益的方案的優(yōu)點(diǎn),也能減少無助益的方案的可能性),微處理器100通常會(huì)非循序地執(zhí)行錯(cuò)誤預(yù)測的分支;然而,微處理器100也會(huì)試圖分辨(identify)一些最常見地將分支指令錯(cuò)誤地解析為錯(cuò)誤預(yù)測(即分支預(yù)測器118正確地預(yù)測)的狀況,并且微處理器100在這些狀況中并不會(huì)非循序地執(zhí)行/校正已解析的『錯(cuò)誤預(yù)測的』分支。更具體地說,微處理器100會(huì)試圖分辨出這些分支指令將必須被重新執(zhí)行,而在重新執(zhí)行中卻被解析為已經(jīng)正確地預(yù)測的最常見的情況。在一實(shí)施例中,上述最常見的情況發(fā)生在較舊于分支指令的一個(gè)指令將被重新執(zhí)行時(shí),即(1)一個(gè)較舊的分支被解析為錯(cuò)誤預(yù)測的(2)一個(gè)較舊的載入指令是被錯(cuò)失的(missed)(3)一個(gè)較舊的整數(shù)指令是錯(cuò)誤的(faulted)通過暫緩執(zhí)行已解析的『錯(cuò)誤預(yù)測的』分支,微處理器100不需在管線前端重新提取和重新處理相同的指令,因?yàn)槠湟呀?jīng)在分支第一次被預(yù)測時(shí)被提取和處理過了。何種情況會(huì)被納入考量是在設(shè)計(jì)上可決定的,而該決定權(quán)衡于因?yàn)榭剂恳粋€(gè)給定的情況而使得復(fù)雜度/操作速度/功率消耗增加且成本增加,以及因?yàn)椴豢剂可鲜銮闆r而使得效能不佳之間的得失,其中上述得失本質(zhì)上是與在一些時(shí)鐘周期中其發(fā)生頻率和平均的效能損失有關(guān)。參考圖1,重整緩沖器116被組織成一環(huán)形隊(duì)列(circularqueue)并且具有多個(gè)項(xiàng)目(entry)分配給每個(gè)由寄存器別名表106派送至保留站108的指令。重整緩沖器116中每個(gè)項(xiàng)目都有一個(gè)相關(guān)的索引(index),其值的范圍為0至(n-1),其中n為重整緩沖器116中項(xiàng)目的數(shù)目。寄存器別名表106依照程序順序?yàn)槊總€(gè)指令循序地指派(allocates)重整緩沖器116中的項(xiàng)目。因此,可對(duì)重整緩沖器116中兩個(gè)指令的索引或標(biāo)簽作比較,并且判斷何者在程序的順序上是最舊的。微處理器100執(zhí)行載入指令的預(yù)測執(zhí)行(speculativeexecution)。換句話說,微處理器100假設(shè)載入指令總是會(huì)命中(hit)數(shù)據(jù)快取存儲(chǔ)器。接著,在不知道是否能夠取得正確的載入數(shù)據(jù)的情況下,保留站108發(fā)出使用載入數(shù)據(jù)作為來源運(yùn)算元的指令至執(zhí)行單元112。因此,指令(例如分支指令)可能會(huì)接收到不正確的數(shù)據(jù),這是直接或間接地歸因于較舊的指令使用了錯(cuò)誤的載入數(shù)據(jù)。當(dāng)載入單元166在檢測到載入指令(loadinstruction)在數(shù)據(jù)快取存儲(chǔ)器中錯(cuò)失了,且必須將載入指令重新執(zhí)行時(shí),載入單元166將在數(shù)據(jù)快取存儲(chǔ)器所錯(cuò)失的載入指令的載入指令錯(cuò)失標(biāo)簽146輸出至控制邏輯單元158,而載入指令錯(cuò)失標(biāo)簽146為重整緩沖器的標(biāo)簽??刂七壿媶卧?58將寄存器156內(nèi)的標(biāo)簽(最舊的錯(cuò)失的載入指令的標(biāo)簽)與載入指令錯(cuò)失標(biāo)簽146作比較。如果載入指令錯(cuò)失標(biāo)簽146是比較舊的,則控制邏輯單元158以載入指令錯(cuò)失標(biāo)簽146更新寄存器156??刂七壿媶卧?58藉此維持微處理器100內(nèi)最舊的被錯(cuò)失的載入指令的標(biāo)簽。類似地,當(dāng)執(zhí)行邏輯單元164檢測到一個(gè)整數(shù)指令(integerinstruction)需要被重新執(zhí)行時(shí),執(zhí)行邏輯單元164將需要被重新執(zhí)行的整數(shù)指令的整數(shù)指令重新執(zhí)行標(biāo)簽144輸出至控制邏輯單元158,而且整數(shù)指令重新執(zhí)行標(biāo)簽144為重整緩沖器的標(biāo)簽??刂七壿媶卧?58將寄存器154內(nèi)的標(biāo)簽(最舊的被重新執(zhí)行的整數(shù)指令的標(biāo)簽)與整數(shù)指令重新執(zhí)行標(biāo)簽144作比較。如果整數(shù)指令重新執(zhí)行標(biāo)簽144是比較舊的,則控制邏輯單元158以整數(shù)指令重新執(zhí)行標(biāo)簽144更新寄存器154。控制邏輯單元158藉此維持微處理器100內(nèi)最舊的被重新執(zhí)行的整數(shù)指令的標(biāo)簽。再者,當(dāng)分支指令被解析且被分支指令比對(duì)邏輯單元162檢測到是錯(cuò)誤預(yù)測時(shí),分支指令比對(duì)邏輯單元162將被錯(cuò)誤預(yù)測的分支指令的分支指令錯(cuò)誤預(yù)測標(biāo)簽142輸出至控制邏輯單元158,而分支指令錯(cuò)誤預(yù)測標(biāo)簽142為重整緩沖器的標(biāo)簽??刂七壿媶卧?58將寄存器152內(nèi)的標(biāo)簽(最舊的被錯(cuò)誤預(yù)測的分支指令的標(biāo)簽)與分支指令錯(cuò)誤預(yù)測標(biāo)簽142作比較。如果分支指令錯(cuò)誤預(yù)測標(biāo)簽142是比較舊的,則控制邏輯單元158以分支指令錯(cuò)誤預(yù)測標(biāo)簽142更新寄存器152??刂七壿媶卧?58藉此維持微處理器100內(nèi)最舊的被錯(cuò)誤預(yù)測的分支指令的標(biāo)簽。根據(jù)本發(fā)明,圖2為圖1微處理器100的操作流程圖,其用以說明微處理器100選擇性地非循序執(zhí)行分支指令的操作。流程始在步驟202。在步驟202,執(zhí)行單元112解析分支指令且判斷其為錯(cuò)誤預(yù)測的。流程前進(jìn)至判斷步驟204。在判斷步驟204,執(zhí)行單元112將分支指令錯(cuò)誤預(yù)測標(biāo)簽142與寄存器152內(nèi)的標(biāo)簽(最舊的被錯(cuò)誤預(yù)測的分支指令的標(biāo)簽)作比較,用以判斷是否有較舊的未引退的分支指令是錯(cuò)誤預(yù)測且因此需要校正的。如果有,則流程前進(jìn)至步驟206;否則,流程前進(jìn)至判斷步驟208。在步驟206,執(zhí)行單元112會(huì)暫緩去非循序地校正/執(zhí)行在步驟202中被解析為錯(cuò)誤預(yù)測的較新的(newer)分支指令。在步驟202中被解析為錯(cuò)誤預(yù)測的較新的分支指令將不會(huì)被引退,因?yàn)樵谳^新的錯(cuò)誤預(yù)測的分支指令有機(jī)會(huì)成為最舊的錯(cuò)誤預(yù)測的分支指令之前,較舊的錯(cuò)誤預(yù)測的分支指令會(huì)使得較新的錯(cuò)誤預(yù)測的分支指令于管線末端被清除。本發(fā)明的優(yōu)點(diǎn)在于通過暫緩非循序地校正/執(zhí)行在步驟202中被解析為錯(cuò)誤預(yù)測的分支指令,微處理器100能夠避免上述較差的技術(shù)方案的缺點(diǎn)。換句話說,如果證明分支預(yù)測器118已經(jīng)正確地預(yù)測分支指令的路徑,則從正確預(yù)測的路徑提取的指令不需在管線前端被重新提取和重新處理。流程終止在步驟206。在判斷步驟208,執(zhí)行單元112將寄存器156內(nèi)的標(biāo)簽(最舊的錯(cuò)失的載入指令的標(biāo)簽)與錯(cuò)誤預(yù)測分支的載入指令錯(cuò)失標(biāo)簽146作比較,用以判斷是否有較舊于錯(cuò)誤預(yù)測分支的載入指令被錯(cuò)失。如果有,流程前進(jìn)至步驟212;否則,流程前進(jìn)至判斷步驟214。在步驟212,執(zhí)行單元112會(huì)暫緩去非循序地校正/執(zhí)行在步驟202中被解析為錯(cuò)誤預(yù)測的分支指令。在步驟202中被解析為錯(cuò)誤預(yù)測的分支指令將不會(huì)被引退,因?yàn)樵阱e(cuò)誤預(yù)測的分支指令有機(jī)會(huì)成為最舊的指令前,錯(cuò)失的載入指令在計(jì)算機(jī)中成為最舊的指令時(shí)會(huì)使錯(cuò)誤預(yù)測的分支指令重新執(zhí)行。本發(fā)明的優(yōu)點(diǎn)在于通過暫緩非循序地校正/執(zhí)行在步驟202中被解析為錯(cuò)誤預(yù)測的分支指令,微處理器100能夠避免上述較差的技術(shù)方案的缺點(diǎn)。流程終止在步驟212。在判斷步驟214,執(zhí)行單元112將寄存器154內(nèi)的標(biāo)簽(最舊的被重新執(zhí)行的整數(shù)指令的標(biāo)簽)與錯(cuò)誤預(yù)測分支的整數(shù)指令重新執(zhí)行標(biāo)簽144作比較,用以判斷是否有為了重新執(zhí)行而被標(biāo)記(marked)且較舊于錯(cuò)誤預(yù)測的分支指令的整數(shù)指令。如果有,流程前進(jìn)至步驟216;否則,流程前進(jìn)至步驟218。在步驟216,執(zhí)行單元112會(huì)暫緩去非循序地校正/執(zhí)行在步驟202中被解析為錯(cuò)誤預(yù)測的分支指令。在步驟202中被解析為錯(cuò)誤預(yù)測的分支指令將不會(huì)被引退,因?yàn)樵阱e(cuò)誤預(yù)測的分支指令有機(jī)會(huì)成為最舊的指令前,重新執(zhí)行的整數(shù)指令在計(jì)算機(jī)中成為最舊的指令時(shí)會(huì)使錯(cuò)誤預(yù)測的分支指令重新執(zhí)行。本發(fā)明的優(yōu)點(diǎn)在于通過暫緩去非循序地校正/執(zhí)行在步驟202中被解析為錯(cuò)誤預(yù)測的分支指令,微處理器100能夠避免上述較差的技術(shù)方案的缺點(diǎn)。流程終止在步驟216。在步驟218,執(zhí)行單元112的控制邏輯單元158提供正確分支地址136至提取單元122??刂七壿媶卧?58也發(fā)出分支校正信號(hào)134,其中分支校正信號(hào)134使提取單元122選擇正確分支地址136作為下一個(gè)提取地址170,并且使管線前端校正在步驟202中被解析為錯(cuò)誤預(yù)測的分支指令。換句話說,通過發(fā)出分支校正信號(hào)134,控制邏輯單元158使錯(cuò)誤預(yù)測的分支指令是非循序地被執(zhí)行,并藉此實(shí)現(xiàn)關(guān)于有助益的技術(shù)方案的上述優(yōu)點(diǎn)。流程前進(jìn)至步驟222。在步驟222,寄存器別名表106會(huì)根據(jù)所發(fā)出的分支校正信號(hào)134停止配送指令。流程前進(jìn)至步驟224。在步驟224,在寄存器別名表106之前的部分管線根據(jù)所發(fā)出的分支校正信號(hào)134將所有指令清除(flush)(或無效化(invalidate)),并在正確分支地址136上提取指令和處理指令。流程前進(jìn)至步驟226。在步驟226,引退單元114判斷出錯(cuò)誤預(yù)測的分支指令現(xiàn)在已經(jīng)準(zhǔn)備好要引退(即被錯(cuò)誤預(yù)測的分支指令為計(jì)算機(jī)中最舊的指令),因此發(fā)出清除信號(hào)132以清除寄存器別名表106之后的所有指令,即引退單元114清除較新于被錯(cuò)誤預(yù)測的分支指令的所有指令。所發(fā)出的清除信號(hào)132也提供至寄存器別名表106,以通知寄存器別名表106目前情況。流程前進(jìn)至步驟228。在步驟228,寄存器別名表106根據(jù)所發(fā)出的清除信號(hào)132重新派送指令。流程終止在步驟228。雖然本發(fā)明已經(jīng)由數(shù)種實(shí)施例公開如上,但其僅用以作為例子,并非用以限定本發(fā)明。本領(lǐng)域技術(shù)人員應(yīng)能理解,在不脫離本發(fā)明的精神的前提下,當(dāng)可對(duì)本發(fā)明作些許更動(dòng)。舉例而言,軟件能夠致能本發(fā)明的裝置和方法的功能、制造、模型建立、模擬、各種性質(zhì),和/或測試。其能夠通過不同的程序語言而達(dá)成,例如程序語言(如C、C++)、硬件描述語言(hardwaredescriptionlanguage,HDL,如VerilogHDL、VHDL),或是其他可能的程序語言。上述軟件能夠設(shè)置于任何已知的計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)(computerusablemedium),例如半導(dǎo)體、磁盤,或光盤(如⑶-ROM、DVD-ROM)。本發(fā)明的裝置和方法可能包括于任何半導(dǎo)體智慧財(cái)產(chǎn)核心(semiconductorIPcore)之內(nèi),例如(以HDL嵌入的)微處理器核心,或是當(dāng)集成電路制造時(shí),轉(zhuǎn)移至硬件。此外,本發(fā)明可能通過硬件和軟件的組合而實(shí)現(xiàn)。因此,本發(fā)明不應(yīng)被此處所述的任何實(shí)施例所限制,本發(fā)明應(yīng)該是根據(jù)所附申請(qǐng)專利范圍與其等效的裝置/方法而被定義。特別的是,本發(fā)明能夠設(shè)置于一般用途計(jì)算機(jī)的微處理器裝置內(nèi)。最后,本領(lǐng)域技術(shù)人員應(yīng)能理解到在不脫離由權(quán)利要求書定義的本發(fā)明范圍的前提下,其能夠以本發(fā)明公開的概念和特定的實(shí)施例作為基礎(chǔ),用以設(shè)計(jì)或修改其他架構(gòu)來執(zhí)行與本發(fā)明相同的目的。權(quán)利要求一種微處理器,用以非循序執(zhí)行暨循序引退指令,包括一分支預(yù)測器,用以預(yù)測一分支指令的一預(yù)測目標(biāo)地址;一提取單元,耦接于上述分支預(yù)測器,用以從上述預(yù)測目標(biāo)地址提取上述分支指令;以及至少一執(zhí)行單元,耦接于上述提取單元,用以解析上述分支指令的目標(biāo)地址,并且檢測上述預(yù)測目標(biāo)地址與所解析出的目標(biāo)地址是否不同;當(dāng)上述預(yù)測目標(biāo)地址與上述所解析出的目標(biāo)地址不同時(shí),判斷是否具有程序順序較舊于上述分支指令且需要被校正的一未引退指令;如果沒有程序順序較舊于上述分支指令且需要被校正的上述未引退指令,則清除由上述預(yù)測目標(biāo)地址所提取的一錯(cuò)誤預(yù)測的分支指令,并使得上述提取單元由上述所解析出的目標(biāo)地址進(jìn)行提取,以便執(zhí)行上述分支指令;以及如果有程序順序較舊于上述分支指令且需要被校正的上述未引退指令,則暫緩執(zhí)行上述分支指令。2.如權(quán)利要求1所述的微處理器,其中上述執(zhí)行單元通過下列條件中的一個(gè)判斷是否具有程序順序較舊于上述分支指令且需要被校正的上述未引退指令是否上述分支預(yù)測器已預(yù)測出程序順序較舊于上述分支指令的一未引退分支指令的目標(biāo)地址,且上述提取單元已從所預(yù)測的上述未引退分支指令的目標(biāo)地址提取指令,且上述執(zhí)行單元已解析出上述未引退分支指令的目標(biāo)地址,并且檢測到所解析出的上述未引退分支指令的目標(biāo)地址與所預(yù)測的上述未引退分支指令的目標(biāo)地址不同;在上述微處理器的一快取存儲(chǔ)器內(nèi)是否有程序順序較舊于上述分支指令的一未引退載入指令被錯(cuò)失;以及是否具有程序順序較舊于上述分支指令之一未引退整數(shù)指令需要被重新執(zhí)行。3.如權(quán)利要求1所述的微處理器,還包括一存儲(chǔ)元件,用以存放在程序順序上最舊且需要被校正的未引退指令的重整緩沖器標(biāo)簽,其中上述執(zhí)行單元通過比較上述分支指令的重整緩沖器標(biāo)簽與上述在程序順序上最舊且需要被校正的未引退指令的重整緩沖器標(biāo)簽,以判斷是否具有程序順序較舊于上述分支指令且需要被校正的上述未引退指令。4.如權(quán)利要求3所述的微處理器,其中上述存儲(chǔ)元件用以為多個(gè)指令類型的每一個(gè)存放上述在程序順序上最舊且需要被校正的未引退指令的重整緩沖器標(biāo)簽,其中上述執(zhí)行單元通過為上述指令類型的每一個(gè)比較上述分支指令的重整緩沖器標(biāo)簽與上述在程序順序上最舊且需要被校正的未引退指令的重整緩沖器標(biāo)簽,以判斷是否具有程序順序較舊于上述分支指令且需要被校正的上述未引退指令。5.如權(quán)利要求4所述的微處理器,其中上述多個(gè)指令類型包括下列指令類型的至少一個(gè)一第一指令類型,用以表示一載入指令在上述微處理器的一指令快取存儲(chǔ)器發(fā)生錯(cuò)失;一第二指令類型,用以表示上述分支預(yù)測器對(duì)上述分支指令所預(yù)測到的目標(biāo)地址與上述執(zhí)行單元對(duì)上述分支指令所解析出的目標(biāo)地址是不同的;以及一第三指令類型,用以表示一整數(shù)指令需要被重新執(zhí)行。6.如權(quán)利要求1所述的微處理器,還包括一寄存器別名表,用以依照程序順序地接收多個(gè)程序指令,并且將上述程序指令派送至上述微處理器的多個(gè)上述執(zhí)行單元以便進(jìn)行非循序執(zhí)行;以及第一多個(gè)管線級(jí),位于上述寄存器別名表之前,上述第一多個(gè)管線級(jí)包括上述分支預(yù)測器與上述提取單元,其中上述執(zhí)行單元通過提供上述所解析出的目標(biāo)地址至上述提取單元以及發(fā)出一信號(hào)來執(zhí)行上述分支指令,上述寄存器別名表根據(jù)上述信號(hào)停止派送指令,上述第一多個(gè)管線級(jí)根據(jù)上述信號(hào)清除其內(nèi)所有的指令,并且上述提取單元根據(jù)上述信號(hào)由上述所解析出的目標(biāo)地址開始提取指令。7.如權(quán)利要求6所述的微處理器,還包括一引退單元,用以依照程序順序地引退上述程序指令;以及第二多個(gè)管線級(jí),位于上述寄存器別名表之后,包括多個(gè)上述執(zhí)行單元和上述引退單元,其中當(dāng)上述引退單元判斷出上述分支指令為上述微處理器內(nèi)的最舊的未引退指令時(shí),上述引退單元使上述第二多個(gè)管線級(jí)的所有程序指令被清除,并且在上述引退單元使上述第二多個(gè)管線級(jí)的所有程序指令被清除之后,上述寄存器別名表開始派送程序指令至多個(gè)上述執(zhí)行單元。8.一種執(zhí)行方法,用以在一管線化非循序執(zhí)行暨循序引退的微處理器中執(zhí)行一分支指令,包括預(yù)測上述分支指令將被解析至一第一提取路徑且根據(jù)上述預(yù)測由上述第一提取路徑提取上述分支指令;在上述預(yù)測和提取步驟之后,解析上述分支指令至一第二提取路徑,上述第二提取路徑不同于上述第一提取路徑;判斷是否具有程序順序較舊于上述分支指令且需要被校正的一未引退指令;如果沒有程序順序較舊于上述分支指令且需要被校正的上述未引退指令,則清除由上述第一提取路徑所提取的一錯(cuò)誤預(yù)測的分支指令,并改由上述第二提取路徑提取上述分支指令,以執(zhí)行上述分支指令;以及如果有程序順序較舊于上述分支指令且需要被校正的上述未引退指令,則暫緩執(zhí)行上述分支指令。9.如權(quán)利要求8所述的執(zhí)行方法,其中上述判斷是否具有程序順序較舊于上述分支指令且需要被校正的上述未引退指令的步驟包括下列步驟中的一個(gè)判斷是否有程序順序較舊于上述分支指令的一未引退分支指令被解析至不同于一第三提取路徑的一第四提取路徑,且上述微處理器先前是預(yù)測上述第三提取路徑并由上述第三提取路徑提取上述未引退分支指令;判斷在上述微處理器的一快取存儲(chǔ)器內(nèi)是否有程序順序較舊于上述分支指令的一未引退戴入指令被錯(cuò)失;以及判斷是否有程序順序較舊于上述分支指令的一未引退整數(shù)指令需要被重新執(zhí)行。10.如權(quán)利要求8所述的執(zhí)行方法,還包括存放在程序順序上最舊且需要被校正的未引退指令的重整緩沖器標(biāo)簽,其中上述判斷是否具有程序順序較舊于上述分支指令且需要被校正的上述未引退指令的步驟包括通過比較上述分支指令的重整緩沖器標(biāo)簽與上述在程序順序上最舊且需要被校正的未引退指令的重整緩沖器標(biāo)簽,以判斷是否具有程序順序較舊于上述分支指令且需要被校正的上述未引退指令。11.如權(quán)利要求10所述的執(zhí)行方法,其中上述存放在程序順序上最舊且需要被校正的未引退指令的重整緩沖器標(biāo)簽是為了多個(gè)指令類型的每一個(gè)而存放,并且上述判斷是否具有程序順序較舊于上述分支指令且需要被校正的上述未引退指令的步驟包括通過為上述指令類型的每一個(gè)分別比較上述分支指令的重整緩沖器標(biāo)簽與上述在程序順序上最舊且需要被校正的未引退指令的重整緩沖器標(biāo)簽,以判斷是否具有程序順序較舊于上述分支指令且需要被校正的上述未引退指令。12.如權(quán)利要求11所述的執(zhí)行方法,其中上述多個(gè)指令類型包括下列指令類型的至少一個(gè)一第一指令類型,用以表示一載入指令在上述微處理器的一指令快取存儲(chǔ)器發(fā)生錯(cuò)失;一第二指令類型,用以表示上述分支指令所被預(yù)測到的上述第一提取路徑與所解析出的上述第二提取路徑是不同的;以及一第三指令類型,用以表示一整數(shù)指令需要被重新執(zhí)行。13.如權(quán)利要求8所述的執(zhí)行方法,其中上述執(zhí)行上述分支指令的步驟還包括停止派送指令;以及清除在上述微處理器的管線級(jí)內(nèi)位于派送指令的節(jié)點(diǎn)以上的所有指令。14.如權(quán)利要求13所述的執(zhí)行方法,還包括在清除在上述微處理器的管線級(jí)內(nèi)位于派送指令的節(jié)點(diǎn)之前的所有指令之后,判斷上述分支指令是否為上述微處理器內(nèi)最舊的未引退指令;當(dāng)上述分支指令為上述微處理器內(nèi)最舊的未引退指令時(shí),使在上述微處理器的管線級(jí)內(nèi)位于派送指令的節(jié)點(diǎn)之后的所有指令被清除;以及上述微處理器的管線級(jí)內(nèi)位于派送指令的節(jié)點(diǎn)之后的所有指令被清除之后,重新開始派送指令。全文摘要微處理器及其執(zhí)行方法,用于管線化非循序執(zhí)行暨循序引退。該微處理器,包括分支預(yù)測器、提取單元以及執(zhí)行單元。分支預(yù)測器預(yù)測分支指令的預(yù)測目標(biāo)地址。提取單元在預(yù)測目標(biāo)地址上提取指令。執(zhí)行單元解析分支指令的目標(biāo)地址,并且檢測預(yù)測目標(biāo)地址與所解析出的目標(biāo)地址是否不同;當(dāng)預(yù)測目標(biāo)地址與所解析出的目標(biāo)地址不同時(shí),判斷是否具有程序順序較舊于分支指令且需要被校正的未引退指令;若沒有,則清除由預(yù)測目標(biāo)地址所提取的錯(cuò)誤預(yù)測的分支指令,并使得提取單元由所解析出的目標(biāo)地址進(jìn)行提取,以便執(zhí)行分支指令;若有,則暫緩分支指令的執(zhí)行。文檔編號(hào)G06F9/38GK101866280SQ20101018559公開日2010年10月20日申請(qǐng)日期2010年5月19日優(yōu)先權(quán)日2009年5月29日發(fā)明者布萊恩·W·伯格,杰拉德·M·卡爾,羅德尼·E·虎克申請(qǐng)人:威盛電子股份有限公司