專利名稱:分支目標(biāo)緩沖器及其使用方法
技術(shù)領(lǐng)域:
本發(fā)明一般涉及具有分支預(yù)測單元的處理器,更具體地涉及分支預(yù)測單元內(nèi)的分支目標(biāo)緩沖器(branch target buffer,BTB)。本發(fā)明適于與具有流水線(pipeline)體系結(jié)構(gòu)的處理器一起使用,其中流水線體系結(jié)構(gòu)包括單流水線體系結(jié)構(gòu)和超標(biāo)量(superscalar)流水線體系結(jié)構(gòu)。
背景技術(shù):
早期的計算機(jī)被設(shè)計成按指令的順序在開始下一指令之前完成處理一條指令。多年過去了,這些早期設(shè)計有了很大的體系結(jié)構(gòu)上進(jìn)步,這極大提高了性能。流水線體系結(jié)構(gòu)和超標(biāo)量體系結(jié)構(gòu)是這些進(jìn)步的示例。
通過使用高速緩存(cashe)也增強(qiáng)了處理器的性能。高速緩存是用來存儲和提供頻繁使用的信息的存儲器元件。術(shù)語“信息”廣義上既包括數(shù)據(jù)也包括指令。與可能需要幾個周期的傳統(tǒng)存儲器訪問操作相比,高速緩存通常以單時鐘周期提供信息。所謂的分支目標(biāo)緩沖器(Branch Target Buffer,“BTB”)是處理器高速緩存的一個示例。
在流水線體系結(jié)構(gòu)的背景下,BTB的效用很容易理解?!傲魉€”(或也稱作“推測執(zhí)行(speculative execution)”)是一個術(shù)語,通常指其中使用一系列功能步驟或處理階段來處理指令序列的操作方法。每個處理階段通常在單個時鐘周期內(nèi)完成它的一個或多個構(gòu)成操作(constituent operation)。
與在開始下一指令之前將每條指令處理完成的非流水線處理器不同,流水線處理器在流水線的不同處理階段同時處理幾條指令。流水線階段可以由設(shè)計者任意指定,但是通常包括指令獲取(fetch)、指令譯碼、指令執(zhí)行、執(zhí)行解析(execution resolution)階段。
指令獲取階段從指令當(dāng)前被存儲的任何所在(例如,主系統(tǒng)存儲器或者指令隊列)檢索(retrieve)指令。一旦獲取,指令被傳遞到譯碼器階段,其通常確定指令地址和/或指令操作數(shù)。指令從譯碼器階段傳遞到執(zhí)行由指令指示的一個或多個操作的執(zhí)行階段。執(zhí)行解析階段通常涉及將通過執(zhí)行指令生成的結(jié)果(例如,結(jié)果數(shù)據(jù))回寫(write-back)到一個或多個寄存器或存儲器以備以后使用。
優(yōu)選地,在規(guī)定的周期期間指令從一個流水線階段傳遞到下一流水線階段。這樣在第一周期期間,指令獲取階段從存儲部件獲取第一指令并且在相關(guān)聯(lián)的硬件寄存器內(nèi)將其排好(align)以進(jìn)行譯碼。在第二周期期間,指令獲取階段從存儲部件獲取第二指令并且將其排好,同時指令譯碼器階段對第一指令進(jìn)行譯碼。在第三周期期間,第一指令在執(zhí)行階段啟動執(zhí)行操作(例如,邏輯、數(shù)學(xué)、尋址或索引操作),同時指令譯碼器階段對第二指令進(jìn)行譯碼,并且指令獲取階段獲取第三指令。流水線繼續(xù)到執(zhí)行解析,通過這種方式處理器的總體運(yùn)行速度比非流水線體系結(jié)構(gòu)有了大大改進(jìn)。
在超標(biāo)量體系結(jié)構(gòu)中,可以同時處理和/或執(zhí)行兩條或更多條指令。即,超標(biāo)量系統(tǒng)具有能夠并行地同時且獨(dú)立執(zhí)行多條指令的兩條或者更多條執(zhí)行(或譯碼/執(zhí)行)路徑。標(biāo)量系統(tǒng)在每個周期只可以執(zhí)行一條指令,不管該指令來自指令的流水線序列還是以非流水線方式被執(zhí)行。多條指令的同時執(zhí)行進(jìn)一步增強(qiáng)了處理器的性能。
流水線提供了毫無疑問的性能收益,只要待處理的指令序列保持高度線性或者可預(yù)測。不幸的是,大多數(shù)指令序列包含眾多的能夠引入非順序執(zhí)行路徑的指令。所謂的“分支指令”(包括,例如,跳轉(zhuǎn)(jump),返回(return)和條件分支指令)在流水線處理器中產(chǎn)生了顯著的性能損害(performancepenalty)-除非實(shí)現(xiàn)分支預(yù)測的有效形式。在未預(yù)測到(或錯誤預(yù)測)的分支指令引起偏離處理器內(nèi)當(dāng)前流水線中的指令序列時出現(xiàn)性能損害。如果發(fā)生這種情況,則當(dāng)前流水線指令序列就必須被扔掉或“清除(flush)”,而新的指令序列必須加載到流水線中。流水線清除浪費(fèi)了眾多時鐘周期并且通常使處理器的執(zhí)行變慢。
增加與分支指令相關(guān)聯(lián)的執(zhí)行性能的一種途徑是預(yù)測分支指令的出口,并且在緊隨分支指令之后立刻將預(yù)測的指令插入到流水線中。如果在處理器中成功實(shí)現(xiàn)這樣的分支預(yù)測機(jī)制,則僅當(dāng)不正確地預(yù)測了分支指令出口時才招致與流水線清除相關(guān)聯(lián)的性能損害。幸運(yùn)的是,現(xiàn)有的技術(shù)和分析已確定許多分支指令的出口是可以以高度的確定性正確預(yù)測的——對一些應(yīng)用接近80%。
結(jié)果,已研發(fā)了幾種現(xiàn)有類型的分支預(yù)測機(jī)制。一種類型的分支預(yù)測機(jī)制使用BTB來存儲眾多數(shù)據(jù)條目,其中每個數(shù)據(jù)條目與分支指令相關(guān)聯(lián)。BTB因此存儲了許多所謂的“分支地址標(biāo)簽(branch address tag)”,每個分支地址標(biāo)簽用作相應(yīng)分支指令分類的索引。除了分支地址標(biāo)簽外,每個BTB條目還可以包括目標(biāo)地址、指令操作碼(opcode)、分支歷史信息以及可能的其它數(shù)據(jù)。在使用BTB的處理器中,分支預(yù)測機(jī)制監(jiān)視進(jìn)入流水線的每條指令。通常,監(jiān)視指令地址,以及如果指令地址與BTB中的條目匹配,則該指令被標(biāo)識為分支指令。從相關(guān)聯(lián)的分支歷史信息,分支預(yù)測機(jī)制確定該分支是否可能發(fā)生。分支歷史信息通常由下述狀態(tài)機(jī)來確定,該狀態(tài)機(jī)監(jiān)視BTB中索引的每條分支指令并且關(guān)于在前面操作中該分支是否發(fā)生將所存儲的數(shù)據(jù)定義為分支歷史信息。
如果分支歷史信息指示該分支指令可能發(fā)生,則一條或多條預(yù)測指令被插入流水線中。按照慣例,每個BTB數(shù)據(jù)條目包括與關(guān)于其分支歷史信息被評估的分支指令相關(guān)聯(lián)的一個或多個操作碼?;趤碜苑种ьA(yù)測機(jī)制的適當(dāng)指示,該一個或多個操作碼可以被直接插入到流水線中。此外,每個BTB數(shù)據(jù)條目包括與正被評估的分支指令相關(guān)聯(lián)的“目標(biāo)地址”。同樣,基于來自分支預(yù)測機(jī)制的適當(dāng)指示,這些目標(biāo)地址被分支預(yù)測單元作為“預(yù)測地址”輸出并且用來獲取指令序列中的下一指令。
分支指令的處理和其后繼指令通過流水線前進(jìn)了幾個周期直到在執(zhí)行階段執(zhí)行了該分支指令。僅在該點(diǎn)才能知道分支預(yù)測的正確性。如果正確預(yù)測了分支指令的出口,則分支目標(biāo)地址已經(jīng)通過流水線被移動到其正當(dāng)?shù)捻樞?,因而處理器?zhí)行可以繼續(xù)而無需中斷。但是,如果不正確地預(yù)測了分支指令的出口,則清除流水線并且將在流水線中插入正確指令或指令序列。在具有處理多指令序列的兩個或多個流水線的超標(biāo)量處理器中,不正確的分支預(yù)測導(dǎo)致的性能損害甚至更大,這是因?yàn)樵诖蠖鄶?shù)情況下必須清除至少指令數(shù)目的兩倍。
圖1圖示了連接到分支預(yù)測邏輯2和相關(guān)硬件的現(xiàn)有BTB 1。BTB 1通常包括指令地址譯碼器3、存儲器陣列4、讀出放大器5。地址譯碼器3從指令獲取單元接收指令地址并且選擇與譯碼得到的指令地址相關(guān)聯(lián)的字線(wordline)。字線選擇是按慣例執(zhí)行的,但是通常包括將字線電壓施加給所選擇的字線。作為慣例,多個字線從地址譯碼器3以逐行的方式延伸穿過存儲器陣列4。
存儲器陣列4包括眾多存儲單元,每個存儲至少一個數(shù)據(jù)比特。每個包括多個數(shù)據(jù)比特的數(shù)據(jù)條目被便利地按行存儲,從而特定字線的選擇本質(zhì)上訪問相應(yīng)的數(shù)據(jù)條目。數(shù)據(jù)條目包含定義分支地址標(biāo)簽的至少一個數(shù)據(jù)字段和定義目標(biāo)地址的另一數(shù)據(jù)字段。按照慣例通過讀出放大器5從存儲器陣列4輸出經(jīng)字線選擇的數(shù)據(jù)條目。
分支地址標(biāo)簽從讀出放大器5被傳遞到也接收指令地址的標(biāo)簽比較寄存器6。來自讀出放大器5的目標(biāo)地址連同與非分支指令序列相關(guān)聯(lián)的地址(例如,對于32位指令字處理器的程序計數(shù)值+4)一起被傳送到多路復(fù)用器7。通過接收來自標(biāo)簽比較寄存器6的結(jié)果和來自分支預(yù)測邏輯2的發(fā)生(Taken)/不發(fā)生(Not-Taken)指示的邏輯門9的操作選擇這兩個多路復(fù)用器輸入之一以傳送到指令隊列(這里示出了PC多路復(fù)用器8)。
這種類型的現(xiàn)有BTB飽受多種缺陷之苦。首先,在圖1所示的配置的左側(cè),BTB的存儲器陣列將由每條分支指令訪問,而不考慮指令的可能出口。BTB訪問通常涉及執(zhí)行有關(guān)地址譯碼器所選擇的字線的傳統(tǒng)的讀操作。每個讀操作從電源吸取能量以使與所選擇的字線相關(guān)聯(lián)的多個存儲單元通電并且從這些存儲單元輸出數(shù)據(jù)。
響應(yīng)于此事務(wù)的浪費(fèi)狀態(tài),其它現(xiàn)有的BTB設(shè)計將使能線集成到存儲器陣列設(shè)計中。美國專利No.5,740,417是一個示例。如該文獻(xiàn)中所示出的,所提出的BTB包括使能線,其在讀操作期間使能或禁止與存儲器陣列相關(guān)聯(lián)的字線驅(qū)動器。字線驅(qū)動器是基于預(yù)測特定指令是否不可能發(fā)生的發(fā)生/不發(fā)生狀態(tài)而被使能或禁止的。例如,對于特定指令的發(fā)生/不發(fā)生狀態(tài)指示“強(qiáng)不發(fā)生”狀態(tài)的情況,則使能線轉(zhuǎn)變到無效電平(inactive level),由此禁止存儲器陣列字線驅(qū)動器。
不幸的是,該在BTB訪問操作期間節(jié)省能量的現(xiàn)有方法伴隨有高開銷。即,產(chǎn)生使能信號的分支預(yù)測機(jī)制既需要時間也需要資源來對指令“預(yù)譯碼(pre-decode)”、確定其分支歷史數(shù)據(jù)和發(fā)生/不發(fā)生狀態(tài)以及其后視必要改變使能信號的電平。
隨著指令執(zhí)行的速率和指令流水線的深度增加,分支預(yù)測的準(zhǔn)確性和速度變得越來越重要。認(rèn)識到該重要性,許多現(xiàn)有處理器引入擴(kuò)展的預(yù)譯碼方案,由此評估所有的指令、標(biāo)識分支指令、并且關(guān)于當(dāng)前正被評估和預(yù)譯碼的分支指令檢索或動態(tài)計算分支歷史信息。不用說,這樣的預(yù)測分支指令行為的方法花費(fèi)相當(dāng)多的時間且需要顯著的額外資源。指令序列處理中額外的延遲和復(fù)雜性是分支預(yù)測機(jī)制中不期望的屬性。然而,這確實(shí)是許多現(xiàn)有方法提供的。
能量消耗問題還使設(shè)計令人滿意(competent)的分支預(yù)測機(jī)制復(fù)雜化。毫不令人驚訝,當(dāng)代處理器正在發(fā)現(xiàn)應(yīng)用是以嚴(yán)格限制能量消耗為特征的設(shè)備范圍。膝上型計算機(jī)和移動設(shè)備,諸如手機(jī)和PDA,是包括優(yōu)選地消耗最少能量的處理器的設(shè)備的現(xiàn)成示例。
如上所提到的,BTB是存儲潛在眾多數(shù)據(jù)條目的高速緩存型存儲器。這樣,BTB在其核心部分具有存儲器陣列且優(yōu)選地具有易失性存儲器陣列。這樣的存儲器陣列,特別是足夠大以存儲眾多數(shù)據(jù)條目的存儲器陣列,是臭名昭著的能量渴求者。分支預(yù)測機(jī)制對BTB的每個訪問都意味著對BTB存儲器陣列的“讀”操作。人們公認(rèn)BTB訪問操作正在增加,并且某些評估者提出對BTB存儲器陣列的讀操作占現(xiàn)有處理器的全部能量消耗高達(dá)10%。
很清楚,需要實(shí)現(xiàn)新興處理器內(nèi)分支預(yù)測機(jī)制的更好方法。需要分支指令的冗長實(shí)時評估和/或分支歷史信息的動態(tài)檢索或計算的現(xiàn)有方法太復(fù)雜且太慢。此外,許多現(xiàn)有方法中不間斷地然而必要地訪問BTB存儲器陣列導(dǎo)致的能量消耗簡直是浪費(fèi)。
發(fā)明內(nèi)容
在一個實(shí)施例中,本發(fā)明提供了一種分支目標(biāo)緩沖器(BTB)存儲器陣列,其包括字線和相關(guān)聯(lián)的字線選通電路。該字線選通電路包括存儲字線選通值的存儲電路。
該存儲器陣列優(yōu)選地適于關(guān)于字線存儲數(shù)據(jù)條目。字線選通電路優(yōu)選地除了存儲字線選通值的存儲電路外還包括選通邏輯電路。在一個特定示例中,字線選通電路響應(yīng)于施加給字線的字線電壓和字線選通值以使能對數(shù)據(jù)條目的訪問操作。訪問操作可以是響應(yīng)于BTB中接收到的寫信號的寫操作,或關(guān)于字線施加到存儲器陣列的讀操作。
BTB存儲器陣列優(yōu)選地包括易失存儲單元陣列。在一個特定示例中,存儲器陣列包括SRAM陣列并且字線選通電路中的存儲電路包括1比特SRAM單元。
在相關(guān)的特定示例中,選通邏輯電路包括第一邏輯門,其接收字線電壓和所存儲的字線選通值作為輸入以產(chǎn)生第一邏輯輸出;以及第二邏輯門,其接收第一邏輯輸出和寫信號作為輸入以產(chǎn)生第二邏輯信號。
本發(fā)明還提供了一種響應(yīng)于寫操作存儲數(shù)據(jù)條目以及響應(yīng)于讀操作輸出數(shù)據(jù)條目的BTB存儲器陣列。該BTB存儲器陣列優(yōu)選地包括字線選通電路,該字線選通電路用于在寫操作期間使能對數(shù)據(jù)條目的訪問,以及用于在讀操作期間響應(yīng)于存儲在字線選通電路中的字線選通值有條件地使能對數(shù)據(jù)條目的訪問。在另一特定示例中,字線選通電路包括存儲電路,用于存儲字線選通值;以及選通邏輯電路,其接收寫信號和字線選通值作為輸入,以在寫操作期間基于寫信號的正指示使能對數(shù)據(jù)條目的訪問,以及在讀操作期間僅基于字線選通值的正指示有條件地使能對數(shù)據(jù)條目的訪問。
這些存儲器陣列實(shí)施例可以很容易地被合并到BTB中。例如,本發(fā)明的另一實(shí)施例提供了一種包括具有選通字線的存儲器陣列的分支目標(biāo)緩沖器。每個選通字線優(yōu)選地包括選擇字線部分、包括用于存儲字線選通值的存儲電路的字線選通電路、和選通字線部分。BTB通常還包括譯碼器,其接收指令地址以響應(yīng)于指令地址選擇選通字線之一;以及讀出放大器,其適于從響應(yīng)于譯碼器中接收的指令地址選擇的選通字線接收數(shù)據(jù)條目。
在相關(guān)的特定示例中,該讀出放大器包括用于將字線選通值傳送到與選通字線相關(guān)聯(lián)的相應(yīng)存儲電路的電路以及/或者用于將寫信號傳送到與選通字線相關(guān)聯(lián)的相應(yīng)字線選通電路的電路。
這些BTB實(shí)施例可以很容易地與分支預(yù)測單元合并。結(jié)果的分支預(yù)測單元的一個實(shí)施例包括分支歷史單元,用于存儲分支歷史數(shù)據(jù);分支預(yù)測邏輯,用于接收指令地址,提供預(yù)測地址,和更新分支歷史數(shù)據(jù);以及BTB,用于接收指令地址。該BTB優(yōu)選地包括存儲器陣列,存儲器陣列包括選通字線,每個選通字線存儲數(shù)據(jù)條目并且包括字線選通電路,字線選通電路包括存儲從分支歷史數(shù)據(jù)導(dǎo)出的字線選通值的存儲電路。
在相關(guān)的特定示例中,分支歷史單元包括狀態(tài)機(jī),該狀態(tài)機(jī)根據(jù)指令的過去的分支執(zhí)行歷史確定指令的分支歷史數(shù)據(jù)。
根據(jù)本發(fā)明的分支預(yù)測單元的另一實(shí)施例包括分支歷史單元,用于存儲分支歷史數(shù)據(jù);以及分支目標(biāo)緩沖器,其包括多個選通字線,每個選通字線通過字線選通電路來訪問,其中分支目標(biāo)緩沖器適于響應(yīng)于分支目標(biāo)緩沖器中所接收到的指令部分和從分支歷史數(shù)據(jù)導(dǎo)出的字線選通值來輸出數(shù)據(jù)條目。
根據(jù)本發(fā)明的分支預(yù)測單元的實(shí)施例可以很容易地合并到處理器中。例如處理器包括指令獲取單元,用于接收指令并且提供相應(yīng)的指令地址;分支預(yù)測單元,用于接收指令地址并且向指令獲取單元提供預(yù)測地址;以及指令譯碼器/執(zhí)行單元,用于接收指令、提供譯碼后的指令、響應(yīng)于譯碼后的指令提供更新后的地址。
在一個特定示例中,并入處理器中的分支預(yù)測單元包括分支歷史單元,用于存儲分支歷史數(shù)據(jù);分支預(yù)測邏輯,用于接收指令地址和更新后的地址,提供預(yù)測地址,更新分支歷史數(shù)據(jù);以及分支目標(biāo)緩沖器,用于接收指令地址并且輸出數(shù)據(jù)條目。該分支目標(biāo)緩沖器優(yōu)選地包括如同上述實(shí)施例那樣的存儲器陣列。
本發(fā)明很容易地可適用于超標(biāo)量處理器,其中前述譯碼器/執(zhí)行單元包括多個執(zhí)行路徑,每個包括單獨(dú)的譯碼器和執(zhí)行單元。超標(biāo)量處理器的示例包括但不限于向量處理器和單指令多數(shù)據(jù)(single-instruction-multiple-data,SIMD)處理器。
本發(fā)明還提供了各種方法。一種示例性方法使能對分支目標(biāo)緩沖器存儲器陣列中的選通字線的讀操作。該方法包括將字線選通值存儲在與選通字線相關(guān)的字線選通電路中,并且響應(yīng)于字線選通值有條件地使能讀操作。
在相關(guān)的實(shí)施例中,該方法還包括接收分支目標(biāo)緩沖器中的指令部分,響應(yīng)于指令部分選擇選通字線并且將字線電壓施加給所選擇的選通字線,以及響應(yīng)于字線電壓和字線選通值有條件地使能讀操作。
在另一相關(guān)實(shí)施例中,該方法還包括定義有關(guān)指令部分的分支歷史數(shù)據(jù),以及從分支歷史數(shù)據(jù)導(dǎo)出字線選通值。
在另一相關(guān)實(shí)施例中,該方法還包括響應(yīng)于被使能的讀操作從分支目標(biāo)緩沖器輸出數(shù)據(jù)條目。
本發(fā)明還在一個實(shí)施例中提供了與上述方法類似的操作BTB的方法。該方法優(yōu)選地包括對多條指令的每一條,將相應(yīng)的數(shù)據(jù)條目存儲在多個選通字線的一個中,以及將相應(yīng)的字線選通值存儲在與所述多個選通字線之一相關(guān)聯(lián)的字線選通電路中。一旦接收到從多條指令中選擇的當(dāng)前指令,BTB關(guān)于相應(yīng)的所存儲的字線選通值有條件地從BTB輸出相應(yīng)于當(dāng)前指令的數(shù)據(jù)條目。
在相關(guān)的實(shí)施例中,有條件地輸出數(shù)據(jù)條目還包括關(guān)于當(dāng)前指令從多個選通字線中選擇選通字線,將字線電壓施加給所選擇的選通字線,以及響應(yīng)于所存儲的字線選通值通過相關(guān)聯(lián)的字線選通電路選通字線電壓。
在指令執(zhí)行之后,優(yōu)選地更新至少一個字線選通值。
在另一實(shí)施例中本發(fā)明還提供了操作分支預(yù)測單元的方法。該方法優(yōu)選地包括在分支歷史單元中存儲指令的分支歷史數(shù)據(jù);從分支歷史數(shù)據(jù)導(dǎo)出字線選通值;將有關(guān)該指令的數(shù)據(jù)條目存儲在分支目標(biāo)緩沖器(BTB)存儲器陣列中,其中該數(shù)據(jù)條目是經(jīng)由選通字線在BTB存儲器陣列中訪問的;將字線選通值存儲在與選通字線相關(guān)聯(lián)的字線選通電路中;以及響應(yīng)于接收到分支預(yù)測單元中的指令以及關(guān)于所存儲的字線選通值有條件地使能從BTB存儲器陣列的數(shù)據(jù)條目的輸出。
在相關(guān)實(shí)施例中,該方法還包括隨著每條指令的執(zhí)行更新分支歷史數(shù)據(jù)和相應(yīng)的字線選通值。
關(guān)于附圖中圖示的幾個目前最優(yōu)的實(shí)施例描述了本發(fā)明。貫穿所有附圖類似的標(biāo)號指示類似的示例性元件、組件或步驟。在附圖中圖1圖示了現(xiàn)有的分支目標(biāo)緩沖器(BTB)和從BTB存儲器陣列輸出數(shù)據(jù)條目所需的相關(guān)組件;圖2是根據(jù)本發(fā)明很容易適應(yīng)于并入分支預(yù)測單元和/或相關(guān)方法的示例性處理器的框圖;圖3是根據(jù)本發(fā)明很容易適應(yīng)于并入分支預(yù)測單元和/或相關(guān)方法的示例性超標(biāo)量處理器的框圖;圖4是以某些額外的細(xì)節(jié)進(jìn)一步圖示根據(jù)本發(fā)明的分支預(yù)測單元的框圖;圖5是圖示根據(jù)本發(fā)明易于包含在分支歷史單元內(nèi)的狀態(tài)機(jī)的流程圖;圖6是圖示根據(jù)本發(fā)明的BTB存儲器陣列的一個實(shí)施例的框圖;圖7是進(jìn)一步圖示根據(jù)本發(fā)明的一個實(shí)施例的選通字線結(jié)構(gòu)的電路圖;圖8是圖示根據(jù)本發(fā)明操作分支預(yù)測單元的一種優(yōu)選方法的流程圖;圖9是圖示根據(jù)本發(fā)明的分支預(yù)測單元的基準(zhǔn)仿真結(jié)果的圖。
具體實(shí)施例方式
下面參考相應(yīng)附圖描述本發(fā)明的示例性實(shí)施例。這些實(shí)施例作為教導(dǎo)示例給出。本發(fā)明的實(shí)際范圍由所附的權(quán)利要求書定義。
在一般應(yīng)用中,本發(fā)明的實(shí)施例提供了一種分支目標(biāo)緩沖器(BTB),其使得能夠?qū)崿F(xiàn)和操作具有減少了的能量消耗、增加了的分支指令處理速度、減少了的總體復(fù)雜性的處理器。在一個方面,通過有條件地禁止對BTB的讀操作減少了處理器的能量消耗。在相關(guān)的方面,進(jìn)行處理器中的分支指令處理而沒有慣常由檢索和/或計算分支歷史信息所需的操作導(dǎo)致的延遲。在另一方面,處理器受益于構(gòu)成分支預(yù)測單元中減少了的復(fù)雜性。
術(shù)語“處理器”廣義上包括能夠執(zhí)行或響應(yīng)于指令序列的任何數(shù)字邏輯設(shè)備或系統(tǒng)。該術(shù)語包括作為所選擇的示例的中央處理單元(CPU)、微處理器、數(shù)字信號處理器(DSP)、精簡指令集計算機(jī)(reduced instruction setcomputer,RISC)處理器、向量處理器、單指令多數(shù)據(jù)(SIMD)處理器。
流水線處理器特別適于包括根據(jù)本發(fā)明示教設(shè)計的分支預(yù)測單元。因此,作為說明的工作示例和本發(fā)明的實(shí)現(xiàn)和使用以及本發(fā)明提供的一些優(yōu)點(diǎn)描述了多流水線處理器。圖2以方框級別示了第一示例性流水線處理器。
處理器10使用許多現(xiàn)有數(shù)據(jù)傳輸技術(shù)的任一種經(jīng)由總線14向/從主存儲器12傳送數(shù)據(jù)。假定存儲器12存儲了一個或多個軟件程序或例程,每個包括指令序列。還假定存儲器12存儲與指令序列有關(guān)的數(shù)據(jù)。該數(shù)據(jù)可以包括由處理器使用的輸入數(shù)據(jù)和/或由處理器10存儲在存儲器12中的結(jié)果數(shù)據(jù)。響應(yīng)于來自處理器的地址指示將指令從存儲器12返回到處理器10。地址指示可以采取許多形式,而程序計數(shù)器(program counter,PC)是一種廣泛了解的技術(shù),通過該技術(shù)處理器10向存儲器12指示存儲器中哪個位置(即存儲地址)存儲了要獲取的“下一個”指令。
如上面所討論的,當(dāng)指令的一個或多個是能夠在一種條件下指示一個下一地址或在另一條件下指令另一下一地址的分支指令時,指示要從存儲器檢索下一指令的簡單操作被大大復(fù)雜化了。對流水線處理器尤其如此。
回到圖2,流水線處理器10通常包括指令獲取單元13,其從存儲器12接收指令(IR)并且向存儲器12提供預(yù)測地址(例如,程序計數(shù)器值)。指令獲取單元13將指令提供給指令譯碼器單元15。指令譯碼器單元15對指令譯碼—通常至少將指令的操作碼部分提供給執(zhí)行單元17。執(zhí)行單元17中接收到的譯碼后的指令(或指令部分)啟動在執(zhí)行單元中的一個或多個操作。這樣的操作通常產(chǎn)生回寫到存儲器12或者系統(tǒng)中的某些其它位置的結(jié)果數(shù)據(jù)。
除了將指令提供給指令譯碼器15外,指令單元13還將指令部分提供給分支預(yù)測單元19。該指令部分通常包括指令地址,但是可以包括其它信息。指令預(yù)測單元19還從執(zhí)行單元17接收確定的“下一地址”指示。即,隨著指令的執(zhí)行,指令序列中要執(zhí)行的下一指令實(shí)際上已知了(即分支指令的條件確定了)。因此,下一地址指示被反饋給分支預(yù)測單元19。使用此信息,分支預(yù)測單元19確定先前預(yù)測的下一指令事實(shí)上是否是正確的下一指令。來自執(zhí)行單元17的下一地址指示通常是指令地址。
如果來自執(zhí)行單元17的下一地址指示匹配以前預(yù)測的指令地址(例如,“擊中(HIT)”條件),則處理器繼續(xù)向前處理流水線指令序列。但是,如果下一地址指示不匹配以前預(yù)測的指令地址(例如,“未擊中(MISS)”條件),則處理器清除流水線并且加載下一地址指示所指示的指令。
下一地址指示與以前預(yù)測的指令地址的比較優(yōu)選地在分支預(yù)測單元19中進(jìn)行。如下面以某些額外的細(xì)節(jié)敘述的,在流水線處理器10中還提供了分支預(yù)測單元19以將預(yù)測地址提供給指令獲取單元13。
在繼續(xù)進(jìn)行優(yōu)選實(shí)施例更詳細(xì)的敘述之前,應(yīng)該特別指出本發(fā)明也特別適于超標(biāo)量處理器。圖3中圖示了大大簡化了的超標(biāo)量處理器。這里,存儲器12同樣經(jīng)由總線14向超標(biāo)量處理器11輸入指令和/或數(shù)據(jù)。除指令獲取單元33給多條執(zhí)行路徑34、35、36提供指令外,分支預(yù)測單元39和指令獲取單元33通常如上述那樣運(yùn)行。類似地,每條執(zhí)行路徑34、35、36給分支預(yù)測單元39提供下一地址指示。
在超標(biāo)量處理器的圖示示例中,示出了3條執(zhí)行路徑,但是該數(shù)目僅是示例性的且是隨意選取的數(shù)目。此外每個執(zhí)行路徑的特征在于從公共的指令獲取單元接收指令的組合的譯碼器/執(zhí)行單元。
與圖示處理器的示例性階段相關(guān)聯(lián)的硬件和功能邊界完全是設(shè)計者例行設(shè)計選擇的問題。例如,可以很容易地以單片硬件(例如,集成電路(IC))或以多片、合作運(yùn)行IC執(zhí)行譯碼和執(zhí)行功能??梢杂布?、軟件、固件(firmware)或者這三種一般的平臺類型的任何組合來進(jìn)行譯碼和/或執(zhí)行。類似地,本實(shí)施例中的指令獲取單元、指令譯碼器單元和/或分支預(yù)測單元之間的硬件和/或功能邊界僅是說明性的。對示例性實(shí)施例的許多變更和修改預(yù)期在本發(fā)明的范圍之內(nèi)。
不管合并處理器類型如何,本發(fā)明優(yōu)選地提供了一種分支預(yù)測單元,其包括某種形式的分支預(yù)測邏輯、用于存儲與分支指令相關(guān)的數(shù)據(jù)條目的某種機(jī)制、某種形式的分支歷史數(shù)據(jù)存儲和/或計算。圖4還以框圖形式圖示了圖3中所示出的分支預(yù)測單元19。
在圖4中,分支預(yù)測邏輯20提供通常被輸出到至少指令獲取單元13的預(yù)測地址。分支預(yù)測邏輯20從指令獲取單元13接收指令地址并且一般與分支目標(biāo)緩沖器(BTB)22及分支歷史單元24交換信息。出于說明的目的選擇了這三個功能塊。本發(fā)明并不在硬件意義上受限于該特定元件分組。例如在本發(fā)明的實(shí)際實(shí)現(xiàn)中,與分支歷史單元24相關(guān)聯(lián)(下面對此進(jìn)行描述)的數(shù)據(jù)存儲功能可以被結(jié)合到與BTB 22相關(guān)聯(lián)的存儲器陣列或者與分支預(yù)測邏輯20相關(guān)聯(lián)的存儲設(shè)備中。類似地,與分支歷史單元24相關(guān)聯(lián)的計算功能可以使用分支預(yù)測邏輯20提供的硬件或軟件資源來實(shí)現(xiàn)。
更特別地,分支預(yù)測邏輯20從指令獲取單元13接收指令部分,通常是指令地址(例如當(dāng)前的程序計數(shù)器值),并且之后預(yù)測處理器將分支到與指令相關(guān)聯(lián)的目標(biāo)地址還是執(zhí)行指令隊列中的下一指令。術(shù)語“預(yù)測”通常指分支預(yù)測邏輯關(guān)于接收到的指令地址優(yōu)選地關(guān)于與接收到的指令地址相關(guān)聯(lián)的分支歷史信息做出的邏輯或計算輸出。這樣,分支預(yù)測邏輯20可以包括邏輯結(jié)構(gòu)、計算電路、數(shù)據(jù)寄存器、比較電路和/或類似的硬件資源以及用于驅(qū)動硬件資源的可能的嵌入控制器軟件的許多特定組合。
作為當(dāng)前優(yōu)選的,分支預(yù)測單元20給BTB 22提供寫信號。寫信號控制BTB 22中的寫操作。術(shù)語“讀”和“寫”這里用來一般地描述普通的存儲設(shè)備的操作中公知的相應(yīng)操作,所述普通的存儲設(shè)備諸如有靜態(tài)隨機(jī)存取存儲器(Static Random Access Memory,SRAM)和動態(tài)隨機(jī)存取存儲器(DynamicRandom Access Memory,DRAM)。
分支預(yù)測邏輯20做出的分支到目標(biāo)地址的決定被稱為“發(fā)生”條件。分支預(yù)測邏輯20做出的不分支而是執(zhí)行指令序列中下一指令的決定被稱為“不發(fā)生”條件。分支預(yù)測單元20預(yù)測發(fā)生條件還是不發(fā)生條件取決于與接收到的指令地址所指示的指令相關(guān)聯(lián)的分支歷史數(shù)據(jù)的狀態(tài)。
分支歷史單元24負(fù)責(zé)計算、存儲和/或?qū)⒎种v史數(shù)據(jù)提供給至少分支預(yù)測邏輯20。分支歷史數(shù)據(jù)是與對于給定的指令在發(fā)生(Taken)和不發(fā)生(Not-Taken)條件之間的預(yù)測相關(guān)的任何有用的數(shù)據(jù)。已經(jīng)給出了眾多的傳統(tǒng)的算法和方法論,其提出了計算指示分支指令是否發(fā)生的數(shù)據(jù)的不同途徑。本發(fā)明傾向于使用這些方法論的任何一種,只要該算法或方法提供了對分支指令行為的準(zhǔn)確預(yù)測。
分支歷史數(shù)據(jù)的存儲和供給優(yōu)選地由與分支歷史單元相關(guān)聯(lián)的存儲元件提供。具有存儲在BTB中的相應(yīng)數(shù)據(jù)條目的每條分支指令優(yōu)選地應(yīng)具有存儲在分支歷史單元中的某種形式的分支歷史數(shù)據(jù)。(但是,如上面提到的,分支歷史數(shù)據(jù)可以連同相應(yīng)的數(shù)據(jù)條目一起存儲在BTB中)。指令的分支歷史數(shù)據(jù)可以通過運(yùn)行包含該指令的一個或多個程序從而確定該指令實(shí)際上分支的頻率來用實(shí)驗(yàn)確定。一旦最初確定了,則該分支歷史數(shù)據(jù)被存儲在分支歷史單元中以供后續(xù)參考。作為當(dāng)前優(yōu)選的,初始確定的分支歷史數(shù)據(jù)(如果有的話)隨著每個后繼的指令執(zhí)行而視必要更新。通過這種方式,當(dāng)時的分支行為用于更新現(xiàn)有的分支歷史數(shù)據(jù)。當(dāng)然,分支歷史數(shù)據(jù)不需要通過某種方式預(yù)先確定,而是可以響應(yīng)于實(shí)際指令執(zhí)行而“實(shí)時(on-the-fly)”產(chǎn)生。
無論何時確定以及如何更新,分支歷史數(shù)據(jù)都可以使用狀態(tài)機(jī)來容易地確定。令人滿意的狀態(tài)機(jī)的復(fù)雜性和設(shè)計是例行設(shè)計選擇(routine designchoice)的問題。但是,作為當(dāng)前優(yōu)選的,本發(fā)明包括作為分支歷史單元24的計算部分的2比特、上/下飽和計數(shù)器(saturation counter)。圖5的流程圖中圖示了2比特、上/下飽和計數(shù)器的操作和使用。這里,隨著關(guān)于分支指令在執(zhí)行期間是事實(shí)上發(fā)生或不發(fā)生的該指令的執(zhí)行而增加或減少2比特分支歷史數(shù)據(jù)值。該分支歷史數(shù)據(jù)指示指令“發(fā)生(Taken-ness)”的特定程度。
例如,先前沒有發(fā)生的分支指令一旦發(fā)生就從“強(qiáng)不發(fā)生”狀態(tài)移動到“弱不發(fā)生”狀態(tài)。該狀態(tài)改變通過將相應(yīng)的分支歷史數(shù)據(jù)值從“00”增加到“01”來指示。跟隨在其中指令沒有發(fā)生的執(zhí)行周期之后通過減少相應(yīng)的分支歷史數(shù)據(jù)值將先前具有“強(qiáng)發(fā)生”狀態(tài)的指令改變到“弱發(fā)生”狀態(tài)。
在目前優(yōu)選的實(shí)施例中,認(rèn)為兩比特對大多數(shù)應(yīng)用已足以精確預(yù)測指令是否發(fā)生的可能性。但是,這對所有應(yīng)用未必都如此—一些應(yīng)用可能需要更大量(例如,更多數(shù)據(jù)比特)的分支歷史數(shù)據(jù)以做出準(zhǔn)確的發(fā)生/不發(fā)生決定。因此,分支歷史數(shù)據(jù)的特定定義連同計算分支歷史數(shù)據(jù)的算法的選擇和/或?qū)崿F(xiàn)所選擇算法的狀態(tài)機(jī)的定義一起是設(shè)計選擇的問題。
參考圖6以某些額外的細(xì)節(jié)描述圖4中所示的BTB。這里,譯碼器43接收指令部分,優(yōu)選地是指令地址,并且按照慣例選擇譯碼后的指令部分指示的字線。象傳統(tǒng)BTB那樣,多個字線從譯碼器43延伸穿過存儲器陣列40。但是,在本發(fā)明中改變了字線的特性、操作和實(shí)現(xiàn)。有關(guān)隨后描述本發(fā)明預(yù)期的字線的幾個實(shí)施例使用了術(shù)語“選通字線(gated word line)”。
存儲器陣列40優(yōu)選地是諸如SRAM的非易失存儲單元的陣列,但是可以使用其它形式的存儲單元。象傳統(tǒng)的BTB存儲器陣列那樣,本發(fā)明的存儲器陣列優(yōu)選地存儲多個數(shù)據(jù)條目,其中每個數(shù)據(jù)條目對應(yīng)于一條指令并且優(yōu)選地包括至少分支地址標(biāo)簽和目標(biāo)地址。在每個數(shù)據(jù)條目中可以關(guān)聯(lián)其它類型的數(shù)據(jù),但是一般而言,要求某種形式的分支地址標(biāo)簽和目標(biāo)地址。
圖7中示出了目前優(yōu)選的選通字線。選通字線通常包括字線70和字線選通電路60的組合。如圖6所示,字線選通電路優(yōu)選地一對一(one-for-one)地與相應(yīng)的字線相關(guān)聯(lián)。在存儲器陣列40內(nèi)優(yōu)選地以列的形式配置多個字線選通電路。該配置允許使用傳統(tǒng)的寫技術(shù)容易地更新存儲在字線選通電路中的相應(yīng)的字線選通值。在一個優(yōu)選實(shí)施例中,存儲器陣列40包括SRAM陣列,并且每個字線選通電路包括由單個比特SRAM單元形成的存儲電路。
不管字線選通電路的實(shí)際配置如何,每個字線選通電路作用來根據(jù)從與字線相關(guān)聯(lián)的指令的分支歷史數(shù)據(jù)導(dǎo)出的“字線選通值”使能或禁止對相應(yīng)字線的訪問。即,BTB 22中接收到的每個分支指令部分通過譯碼器43的操作選擇相應(yīng)的字線。該字線存儲包含至少關(guān)于接收到的分支指令部分的分支地址標(biāo)簽和目標(biāo)地址的數(shù)據(jù)條目。由譯碼器43選擇的相應(yīng)的字線是選通字線,即,只有通過相關(guān)聯(lián)的字線選通電路的操作才能夠訪問的字線,其中字線選通電路的操作由存儲在字線選通電路中的字線選通值來控制。該字線選通值從與指令相關(guān)聯(lián)的分支歷史數(shù)據(jù)導(dǎo)出。
對每個分支指令,字線選通值優(yōu)選地從與指令相關(guān)的分支歷史數(shù)據(jù)導(dǎo)出。將在上述實(shí)施例的背景下描述示例性的導(dǎo)出方法。該導(dǎo)出方法僅僅是示例??梢允褂迷S多不同方法來從分支歷史數(shù)據(jù)導(dǎo)出字線選通值,并且這些方法將根據(jù)分支歷史數(shù)據(jù)的特性、用來定義分支歷史數(shù)據(jù)的算法、字線選通值的大小(例如,比特數(shù))和/或字線選通電路的結(jié)構(gòu)及其構(gòu)成存儲電路而變化。
假定2比特分支歷史數(shù)據(jù)如同關(guān)于圖5描述的那樣,還假定單個比特存儲電路與每個字線選通電路相關(guān)聯(lián),則可以通過僅使用分支歷史數(shù)據(jù)的最高有效位(most significant bit)來導(dǎo)出令人滿意的字線選通值。在該示例中,最高有效位邏輯值“1”指示該指令的“強(qiáng)發(fā)生”或“弱發(fā)生”狀態(tài)。最高有效位邏輯值“0”指示該指令的“弱不發(fā)生”或“強(qiáng)不發(fā)生”狀態(tài)。通過將該比特值存儲在與字線選通電路相關(guān)聯(lián)的單個比特存儲單元中,對指令的發(fā)生程度的可接受準(zhǔn)確性的指示用來控制對選通字線的訪問。
回到圖7,由譯碼器選擇字線70,并且以傳統(tǒng)的方式將字線電壓施加給字線70。通常,所施加的字線電壓將提高沿著字線整個長度的電壓電勢。但是,在本發(fā)明中,通過相關(guān)聯(lián)的字線選通電路60有條件地使能沿著所選擇的字線的長度的字線電壓的施加。字線選通電路60優(yōu)選地包括存儲電路61和選通邏輯電路62。
將根據(jù)要存儲的字線控制值的大小來確定存儲電路60的大小。在圖示的示例中,存儲單個比特。但是,字線控制值的任何合理大小可以被存儲并且用來控制對選通字線的訪問。在圖7中,包括兩個P型晶體管和4個N型晶體管的傳統(tǒng)的SRAM存儲單元用于存儲字線選通值的存儲電路。
所存儲的字線選通值的邏輯值(“1”或“0”)用作選通邏輯電路62的輸入。特別地,施加字線選通值作為第一邏輯門82的一個輸入,該第一邏輯門82還接收來自分支預(yù)測邏輯的寫信號。由于第一邏輯門是或型邏輯門,所以任一輸入或者兩個輸入上的邏輯值“1”都將得到第一邏輯輸出“1”。第一邏輯輸出連同字線電壓值(即,由第二邏輯門分別解釋為邏輯“1”或“0”的高壓或低壓)被施加給第二邏輯門80。由于第二邏輯門是與型邏輯門,所以兩個輸入都必須是“1”才得到第二邏輯輸出“1”在優(yōu)選實(shí)施例中,來自第二邏輯門80的第二邏輯輸出用作字線選通電路60的操作“后”的字線部分70的字線電壓。
這樣,可以認(rèn)為字線70具有兩個不同部分;能夠被譯碼器響應(yīng)于指令地址選擇的選擇字線部分71和僅能夠通過字線選通電路的操作訪問的選通字線部分72。在一個實(shí)施例中,選擇字線部分適于從譯碼器接收字線電壓。該字線電壓可用作與字線70相關(guān)聯(lián)的字線選通電路的輸入。如果被存儲在字線選通電路60中的字線選通值有條件地使能,則該字線電壓被傳遞到相應(yīng)的選通字線部分72。
有條件地將字線電壓從選擇字線部分傳遞(即,“選通”)到相應(yīng)的選通字線部分優(yōu)選地僅與施加到字線的讀操作相關(guān)。即,如果字線選通值指示分支歷史數(shù)據(jù)預(yù)測分支指令很可能發(fā)生,則施加到所選擇字線的讀操作被使能。但是,如果字線選通值指示分支歷史數(shù)據(jù)預(yù)測分支指令不可能發(fā)生,則應(yīng)用到所選擇字線的讀操作不被使能。
在其中更新存儲在存儲器陣列40中的數(shù)據(jù)條目的寫操作中,這樣的有條件的“訪問操作”使能通常是不必要的。因此,當(dāng)譯碼器選擇了選通字線時將寫信號施加給第一邏輯門立刻允許對選通字線的訪問。即,寫操作繼續(xù)進(jìn)行而不考慮字線選通值。通過這種方式,利用最少的硬件資源有效地促進(jìn)了有條件的讀操作和無條件(就字線選通值而言)的寫操作兩者。
圖6所示的示例性BTB還包括讀出放大器45,其基于成功的(例如,被使能)的讀操作從存儲器陣列40接收數(shù)據(jù)條目。作為當(dāng)前優(yōu)選的,讀出放大器45也用作將字線控制值(word line control value,WLCV)加載(寫或更新)到與字線選通電路相關(guān)聯(lián)的相應(yīng)存儲電路中。
現(xiàn)將參考圖8描述根據(jù)本發(fā)明的用于分支預(yù)測單元的操作的示例性方法。將相應(yīng)于多條分支指令的數(shù)據(jù)條目存儲在BTB的存儲器陣列中(100)。使用令人滿意的算法逐漸生成每條指令的分支歷史數(shù)據(jù)(101)。從分支歷史數(shù)據(jù)導(dǎo)出每條指令的相應(yīng)字線選通值(WLGV)(102),然后將其存儲在相應(yīng)的字線選通電路的存儲電路中(103)。
數(shù)據(jù)條目和字線選通值存儲后,分支預(yù)測單元準(zhǔn)備好了接收指令部分,諸如指令地址(104)。對指令部分譯碼(105)并且選擇相應(yīng)的字線(106)。選擇字線之后,所存儲的字線選通值有條件地確定是否訪問字線的選通部分?!罢弊志€選通值指示(即,分支指令可能發(fā)生的指示)導(dǎo)致被使能的字線訪問(108)以及相應(yīng)數(shù)據(jù)條目的輸出(109)?!柏?fù)”字線選通值指示(即,分支指令可能不發(fā)生的指示)導(dǎo)致不能進(jìn)一步訪問以及存儲器的結(jié)果輸出(110)。上面提及的負(fù)指示和正指示將通常相應(yīng)于特定指令的標(biāo)識的發(fā)生/不發(fā)生狀態(tài)。
前述示例說明了通過利用根據(jù)本發(fā)明設(shè)計的分支預(yù)測單元的簡易和有效性,該分支預(yù)測單元能夠接收分支指令并且有條件地使能對存儲在BTB中的相應(yīng)數(shù)據(jù)條目的訪問。僅當(dāng)相應(yīng)的分支歷史數(shù)據(jù)指示可能需要數(shù)據(jù)條目時才從BTB讀取該數(shù)據(jù)條目。具有較低的“發(fā)生”分支可能性的指令不會導(dǎo)致對BTB的使能了的讀取操作。結(jié)果,節(jié)省了否則將消耗在不必要的讀取操作中的能量。
例如,圖9的示了使用根據(jù)本發(fā)明設(shè)計的分支預(yù)測單元的EEMBC基準(zhǔn)仿真(benchmark simulation)運(yùn)行結(jié)果。在沿著水平軸指示的一系列基準(zhǔn)例程上,示出了在預(yù)測的分支指令比率和實(shí)際的分支指令比率之間的比較。該特定仿真揭示出接近40%的分支指令與“不發(fā)生”狀態(tài)相關(guān)聯(lián),因而有關(guān)BTB存儲器陣列讀取操作的BTB能量消耗可以減少高達(dá)40%。
然而,本發(fā)明并不以增加的復(fù)雜度和減少的運(yùn)行速率為代價來提供能量節(jié)省。當(dāng)指令在分支預(yù)測單元中被接收時,該指令立刻由譯碼器處理,并且如果被使能的話,則其后立刻產(chǎn)生相應(yīng)的數(shù)據(jù)條目輸出。在對指令預(yù)編碼、檢索和/或計算該指令的分支歷史數(shù)據(jù)、并且僅在其后產(chǎn)生使能/禁止對BTB存儲器陣列的相應(yīng)讀操作的信號的指令的處理過程中沒有延遲。在本發(fā)明中不需要復(fù)雜的額外電路或功能以有條件地使能對BTB存儲器陣列的讀取操作。
相反,相應(yīng)的字線選通值“等待”接收BTB中的每條指令。簡單字線選通電路中字線選通值的施加使能/禁止對存儲與所接收到的指令相應(yīng)的數(shù)據(jù)條目的字線的訪問。隨著每條指令的執(zhí)行可以很容易地并準(zhǔn)確地在字線選通電路中更新字線選通值。
如整個前面的描述中所提及的,就所選擇的實(shí)施例而言,眾多的設(shè)計改變、適應(yīng)性調(diào)整、變更都是可能的。在整個前面的描述中使用了術(shù)語“優(yōu)選的”和“優(yōu)選地”。這樣的術(shù)語僅指示在教導(dǎo)實(shí)施例的環(huán)境下的當(dāng)前優(yōu)選。這些術(shù)語也認(rèn)可隨著技術(shù)不斷進(jìn)步,將出現(xiàn)藉之可以有效實(shí)現(xiàn)本發(fā)明的其它的電路、機(jī)制和方法。
權(quán)利要求
1.一種分支目標(biāo)緩沖器存儲器陣列,包括字線和相關(guān)聯(lián)的字線選通電路;該字線選通電路包括存儲字線選通值的存儲電路。
2.如權(quán)利要求1所述的存儲器陣列,所述存儲器陣列適于關(guān)于字線存儲數(shù)據(jù)條目。
3.如權(quán)利要求2所述的存儲器陣列,其中所述字線選通電路還包括選通邏輯電路。
4.如權(quán)利要求3所述的存儲器陣列,所述選通邏輯電路響應(yīng)于施加給字線的字線電壓和字線選通值來使能對數(shù)據(jù)條目的訪問操作。
5.如權(quán)利要求4所述的存儲器陣列,所述選通邏輯電路還響應(yīng)于寫信號。
6.如權(quán)利要求4所述的存儲器陣列,其中所述訪問操作是施加到字線的讀操作。
7.如權(quán)利要求5所述的存儲器陣列,其中所述訪問操作是施加到字線的寫操作。
8.如權(quán)利要求1所述的存儲器陣列,其中所述存儲器陣列包括非易失存儲單元陣列。
9.如權(quán)利要求8所述的存儲器陣列,其中所述存儲器陣列是靜態(tài)隨機(jī)訪問存儲器(SRAM)陣列。
10.如權(quán)利要求9所述的存儲器陣列,其中所述存儲電路包括1比特SRAM單元。
11.如權(quán)利要求2所述的存儲器陣列,其中所述數(shù)據(jù)條目包括分支目標(biāo)標(biāo)簽和目標(biāo)地址。
12.如權(quán)利要求5所述的存儲器陣列,其中所述存儲電路包括存儲字線選通值的1比特SRAM單元;以及,其中所述選通邏輯電路包括第一邏輯門,其接收寫信號和字線選通值作為輸入以產(chǎn)生第一邏輯輸出;以及,第二邏輯門,其接收第一邏輯輸出和字線電壓作為輸入以產(chǎn)生第二邏輯信號。
13.如權(quán)利要求5所述的存儲器陣列,其中所述字線包括接收字線電壓的選擇字線部分以及相應(yīng)的選通字線部分。
14.如權(quán)利要求13所述的存儲器陣列,其中所述選擇字線部分和選通字線部分通過字線選通電路電連接。
15.如權(quán)利要求12所述的存儲器陣列,其中所述字線包括接收字線電壓的選擇字線部分以及相應(yīng)的選通字線部分。
16.如權(quán)利要求15所述的存儲器陣列,其中所述選擇字線部分和選通字線部分通過字線選通電路電連接;以及,其中所述第二邏輯信號包括施加給選通字線部分的字線電壓。
17.一種響應(yīng)于寫操作存儲數(shù)據(jù)條目以及響應(yīng)于讀操作輸出數(shù)據(jù)條目的分支目標(biāo)緩沖器存儲器陣列,該存儲器陣列包括字線選通電路,用于在寫操作期間使能對數(shù)據(jù)條目的訪問,以及用于在讀操作期間響應(yīng)于存儲在字線選通電路中的字線選通值有條件地使能對數(shù)據(jù)條目的訪問。
18.如權(quán)利要求17所述的存儲器陣列,其中所述字線選通電路包括存儲電路,用于存儲字線選通值;以及,選通邏輯電路,其接收寫信號和字線選通值作為輸入,以在寫操作期間使能對數(shù)據(jù)條目的訪問,以及在讀操作期間僅基于字線選通值的正指示有條件地使能對數(shù)據(jù)條目的訪問。
19.如權(quán)利要求18的存儲器陣列,其中所述選通邏輯電路接收字線電壓作為輸入,以及其中所述選通邏輯電路在讀操作期間僅基于字線選通值的正指示和字線電壓有條件地使能對數(shù)據(jù)條目的訪問。
20.如權(quán)利要求19所述的存儲器陣列,其中所述存儲器陣列包括易失存儲單元陣列。
21.如權(quán)利要求20所述的存儲器陣列,其中所述存儲器陣列是SRAM陣列,且所述存儲電路是1比特SRAM單元。
22.一種分支目標(biāo)緩沖器,包括存儲器陣列,其包括選通字線,選通字線的每個包括選擇字線部分;字線選通電路,其包括用于存儲字線選通值的存儲電路;以及,選通字線部分;以及,譯碼器,其接收指令部分并且適于響應(yīng)于指令部分選擇選通字線之一。
23.如權(quán)利要求22所述的分支目標(biāo)緩沖器,所述譯碼器適于將字線電壓施加給譯碼器所選擇的選通字線的選擇字線部分。
24.如權(quán)利要求23所述的分支目標(biāo)緩沖器,其中所述字線選通電路還包括選通邏輯電路,其接收字線電壓和字線選通值作為輸入。
25.如權(quán)利要求24所述的分支目標(biāo)緩沖器,所述字線選通電路適于響應(yīng)于字線電壓和字線選通值有條件地使能對譯碼器所選擇的選通字線的選通字線部分的訪問操作。
26.如權(quán)利要求25所述的分支目標(biāo)緩沖器,其中所述訪問操作是讀操作。
27.如權(quán)利要求25所述的分支目標(biāo)緩沖器,所述字線選通電路適于接收寫信號作為輸入,并且其中所述訪問操作是寫操作。
28.如權(quán)利要求26所述的分支目標(biāo)緩沖器,其中所述存儲器陣列包括SRAM陣列,所述存儲電路包括1比特SRAM單元,以及所述選通邏輯電路包括或門,其接收寫信號和字線選通值作為輸入以輸出第一邏輯信號;以及,與門,其接收字線電壓和第一邏輯信號作為輸入以輸出第二邏輯信號。
29.如權(quán)利要求28所述的分支目標(biāo)緩沖器,其中所述第二邏輯信號是施加給由譯碼器所選擇的選通字線的選通字線部分的字線電壓。
30.如權(quán)利要求22所述的分支目標(biāo)緩沖器,還包括讀出放大器,其適于從譯碼器所選擇的選通字線接收數(shù)據(jù)條目。
31.如權(quán)利要求30所述的分支目標(biāo)緩沖器,其中所述讀出放大器包括用于將字線選通值傳送給與選通字線相關(guān)聯(lián)的相應(yīng)存儲電路的電路。
32.如權(quán)利要求31所述的分支目標(biāo)緩沖器,其中所述存儲器陣列包括SRAM陣列;以及,其中相應(yīng)存儲電路的每一個包括用于接收字線選通值的1比特SRAM單元。
33.如權(quán)利要求32所述的分支目標(biāo)緩沖器,其中相應(yīng)字線電路的每個包括或門,其接收寫信號和來自1比特SRAM單元的字線選通值作為輸入以輸出第一邏輯信號;以及與門,其接收字線電壓和第一邏輯信號作為輸入以輸出第二邏輯信號。
34.一種分支預(yù)測單元,包括分支歷史單元,用于存儲分支歷史數(shù)據(jù);分支預(yù)測邏輯,用于接收指令地址,提供預(yù)測地址,更新分支歷史數(shù)據(jù);以及分支目標(biāo)緩沖器,用于接收指令地址,并且包括存儲器陣列,其包括選通字線,每個選通字線存儲數(shù)據(jù)條目并且包括字線選通電路,該字線選通電路包括用于存儲從分支歷史數(shù)據(jù)導(dǎo)出的字線選通值的存儲電路。
35.如權(quán)利要求34所述的分支預(yù)測單元,其中所述分支預(yù)測邏輯向分支目標(biāo)緩沖器提供寫信號。
36.如權(quán)利要求35所述的分支預(yù)測單元,其中所述分支歷史單元包括狀態(tài)機(jī),其用于根據(jù)指令的分支執(zhí)行歷史計算該指令的分支歷史數(shù)據(jù)。
37.如權(quán)利要求36所述的分支預(yù)測單元,其中所述分支歷史單元包括存儲分支歷史數(shù)據(jù)的分支歷史表,并且其中所述狀態(tài)機(jī)包括2比特上/下飽和計數(shù)器。
38.如權(quán)利要求34所述的分支預(yù)測單元,其中所述存儲器陣列包括SRAM陣列,所述存儲電路包括1比特SRAM單元,并且所述字線選通值包括從分支歷史數(shù)據(jù)導(dǎo)出的單個數(shù)據(jù)比特。
39.如權(quán)利要求38所述的分支預(yù)測單元,其中所述分支目標(biāo)緩沖器還包括譯碼器,用于接收指令地址并且響應(yīng)于指令地址選擇選通字線;以及,讀出放大器,其適于從所選擇的選通字線接收數(shù)據(jù)條目,并且包括用于將字線選通值傳送到與選通字線相關(guān)聯(lián)的相應(yīng)字線選通電路的電路。
40.一種分支預(yù)測單元,包括分支歷史單元,用于存儲分支歷史數(shù)據(jù);以及分支目標(biāo)緩沖器,其包括多個選通字線,每個選通字線通過相應(yīng)字線選通電路的操作來訪問;所述分支目標(biāo)緩沖器適于響應(yīng)于分支目標(biāo)緩沖器中所接收到的指令部分和從分支歷史數(shù)據(jù)導(dǎo)出的字線選通值來輸出數(shù)據(jù)條目。
41.如權(quán)利要求40所述的分支預(yù)測單元,還包括分支預(yù)測邏輯,用于接收指令部分并且響應(yīng)于分支目標(biāo)緩沖器輸出的數(shù)據(jù)條目提供預(yù)測地址。
42.如權(quán)利要求41所述的分支預(yù)測單元,所述分支預(yù)測邏輯適于向分支目標(biāo)緩沖器提供寫信號。
43.如權(quán)利要求41所述的分支預(yù)測單元,其中所述分支歷史單元包括存儲分支歷史數(shù)據(jù)的分支歷史表。
44.如權(quán)利要求43所述的分支預(yù)測單元,其中所述存儲器陣列包括SRAM陣列,所述存儲電路包括1比特SRAM單元,并且所述字線選通值包括從分支歷史數(shù)據(jù)導(dǎo)出的單個數(shù)據(jù)比特。
45.一種處理器,包括指令獲取單元,用于接收指令并且提供相應(yīng)的指令地址;分支預(yù)測單元,用于接收指令地址并且向指令獲取單元提供預(yù)測地址;以及,指令譯碼器/執(zhí)行單元,用于接收指令,提供譯碼后的指令,響應(yīng)于譯碼后的指令的執(zhí)行提供更新后的地址;其中所述分支預(yù)測單元包括分支歷史單元,用于存儲分支歷史數(shù)據(jù);分支預(yù)測邏輯,用于接收指令地址和更新后的地址,提供預(yù)測地址,并更新分支歷史數(shù)據(jù);以及,分支目標(biāo)緩沖器,用于接收指令地址并且輸出數(shù)據(jù)條目,所述分支目標(biāo)緩沖器包括存儲器陣列,其包括選通字線,每個選通字線連接到相應(yīng)的字線選通電路,該字線選通電路包括用于存儲從分支歷史數(shù)據(jù)導(dǎo)出的字線選通值的存儲電路。
46.如權(quán)利要求45所述的處理器,其中所述譯碼器/執(zhí)行單元包括多個執(zhí)行路徑,每個執(zhí)行路徑包括譯碼器和執(zhí)行單元。
47.如權(quán)利要求46所述的處理器,其中所述處理器是超標(biāo)量處理器。
48.如權(quán)利要求47所述的處理器,其中所述處理器是向量處理器或單指令多數(shù)據(jù)處理器。
49.如權(quán)利要求45所述的處理器,其中所述分支預(yù)測邏輯向分支目標(biāo)緩沖器提供寫信號。
50.如權(quán)利要求49所述的處理器,其中所述分支歷史單元包括狀態(tài)機(jī),其根據(jù)指令的分支執(zhí)行歷史計算指令的分支歷史數(shù)據(jù)。
51.如權(quán)利要求50所述的處理器,其中所述分支歷史單元包括存儲分支歷史數(shù)據(jù)的分支歷史表。
52.如權(quán)利要求45所述的處理器,其中所述存儲器陣列包括SRAM陣列,所述存儲電路包括1比特SRAM單元,所述字線選通值包括從分支歷史數(shù)據(jù)導(dǎo)出的單個數(shù)據(jù)比特。
53.如權(quán)利要求52所述的處理器,其中所述分支目標(biāo)緩沖器還包括譯碼器,用于接收指令地址并且響應(yīng)于指令地址選擇選通字線;以及,讀出放大器,用于從所選擇的選通字線接收數(shù)據(jù)條目,并且包括用于將字線選通值傳送到與選通字線相關(guān)聯(lián)的相應(yīng)字線選通電路的電路。
全文摘要
公開了一種存儲與分支指令相關(guān)的數(shù)據(jù)條目的分支目標(biāo)緩沖器(BTB)。該BTB響應(yīng)于與BTB中的字線相關(guān)聯(lián)的字線選通電路有條件地使能對數(shù)據(jù)條目的訪問。該字線選通電路存儲從與指令相關(guān)的分支歷史數(shù)據(jù)導(dǎo)出的字線選通值。另外,公開了包含BTB的分支預(yù)測單元和處理器,以及用于操作BTB的方法。
文檔編號G06F12/00GK1725175SQ20051008466
公開日2006年1月25日 申請日期2005年7月15日 優(yōu)先權(quán)日2004年7月16日
發(fā)明者樸基豪 申請人:三星電子株式會社