一種基于sparc v8體系結(jié)構(gòu)的分類式混合分支預(yù)測系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種基于SPARCV8體系結(jié)構(gòu)的分類式混合分支預(yù)測系統(tǒng),特別是針對航天領(lǐng)域廣泛應(yīng)用的SPARC處理器給出了一種基于SPARC V8體系結(jié)構(gòu)的分類式混合分支預(yù)測系統(tǒng),即采用指令分類式的混合分支預(yù)測方案。
【背景技術(shù)】
[0002]在處理器領(lǐng)域中,SPARC體系結(jié)構(gòu)作為RISC處理器的經(jīng)典代表之一,占有十分重要的地位?;赟PARC架構(gòu)的微處理器具有良好的可擴(kuò)展性,目前已被廣泛的應(yīng)用于航空、通信以及各種嵌入式應(yīng)用領(lǐng)域。因此開發(fā)出具有更高性能的能夠面向各種目標(biāo)客戶應(yīng)用需求的SPARC處理器具有很好的應(yīng)用前景。
[0003]目前處理器體系結(jié)構(gòu)研究取得了很大的發(fā)展,流水線技術(shù)很大程度上提高了指令級并行度(Instruct1n Level Parallelism),但是隨著應(yīng)用需求的不斷復(fù)雜,高性能處理器的研究依舊是學(xué)術(shù)界研究的熱點(diǎn)。束縛高性能處理器發(fā)展的因素有很多種,其中關(guān)于指令級并行的研究是開發(fā)高性能處理器的關(guān)鍵因素之一,而影響指令級并行度的一個(gè)關(guān)鍵因素就是程序中存在的分支指令。
[0004]分支指令對處理器流水線中程序的執(zhí)行具有重要影響,發(fā)生跳轉(zhuǎn)的分支指令將重新改變流水線中指令流的方向,這將會(huì)在流水線中引入更多的氣泡(bubble),在現(xiàn)代處理器體系結(jié)構(gòu)中,分支指令帶來的硬件成本和功耗損失也隨著流水線深度和流水線發(fā)射指令的寬度(issue width)的增大而增加。因此關(guān)于分支預(yù)測技術(shù)的研究一直是熱門的研究熱點(diǎn)之一O
[0005]分支預(yù)測技術(shù)是提高處理器性能的重要手段,它的目的是削弱指令間的控制相關(guān)性(control dependence),從而提高指令級并行度,提高處理器性能。流水線深度的增加將會(huì)加深分支指令對流水線性能的影響,再加上指令多發(fā)射技術(shù)(MultipIe Instruct1nLaunch)的應(yīng)用,分支指令對流水線性能的影響進(jìn)一步增加,因此分支預(yù)測技術(shù)的發(fā)展是一種必然。
[0006]推動(dòng)分支預(yù)測技術(shù)發(fā)展的主要因素有:1、新應(yīng)用的出現(xiàn)以及新的處理器結(jié)構(gòu)的提出需要適合它們的新的預(yù)測機(jī)制。2、隨著深亞微米工藝的發(fā)展,處理器功耗的問題越來越重要,這就需要在處理器分支預(yù)測的效率和功耗之間進(jìn)行權(quán)衡。3、超流水和超標(biāo)量等新技術(shù)的應(yīng)用使得處理器對分支預(yù)測精度的需求依然很大。
[0007]分支預(yù)測技術(shù)不僅要考慮它的預(yù)測正確率,還要考慮它給處理器帶來的硬件開銷和時(shí)鐘延遲的影響,現(xiàn)有的分支預(yù)測技術(shù)經(jīng)常由于硬件規(guī)模太大、預(yù)測算法過于復(fù)雜、分支預(yù)測正確率不高等原因制約了處理器性能的提高。
【發(fā)明內(nèi)容】
[0008]本發(fā)明的技術(shù)解決問題是:克服現(xiàn)有技術(shù)的不足,提出一種基于SPARCV8體系結(jié)構(gòu)的分類式混合分支預(yù)測系統(tǒng),即可以提高分支指令預(yù)測的正確率,又能減小硬件規(guī)模,不使預(yù)測算法過于復(fù)雜。
[0009]本發(fā)明的技術(shù)解決方案是:
[0010]本發(fā)明有以下幾個(gè)模塊組成:PC管理模塊、分支指令查詢模塊、分支指令預(yù)測模塊、分支指令信息記錄模塊、分支指令預(yù)測結(jié)果判斷模塊,無條件分支目標(biāo)緩存UBTB(Uncondit1nal Branch Target Buffer)、條件分支目標(biāo)緩存CBTB(Condit1nal BranchTarget Buff er)、返回地址堆桟RAS(Return Address Stack)、間接分支目標(biāo)緩存IBTB(Indirect Branch Target Buffer)、模式歷史表 PHT(Patter History Table)、預(yù)測信息^PIT(Predict1n Info Table);
[0011]無條件分支目標(biāo)緩存UBTB(Uncondit1nalBranch Target Buffer)存儲(chǔ)了無條件跳轉(zhuǎn)分支指令PC值對應(yīng)的分支指令類型信息,以及無條件跳轉(zhuǎn)分支指令PC值對應(yīng)的跳轉(zhuǎn)目標(biāo)地址;
[0012]條件分支目標(biāo)緩存CBTB(Condit1nal Branch Target Buffer)存儲(chǔ)了條件跳轉(zhuǎn)分支指令PC值對應(yīng)的分支指令類型信息,以及條件跳轉(zhuǎn)分支指令PC值對應(yīng)的跳轉(zhuǎn)目標(biāo)地址;
[0013]返回地址堆桟RAS(Return Address Stack)存儲(chǔ)了返回分支指令PC值對應(yīng)的返回目標(biāo)地址;
[0014]間接分支目標(biāo)緩存IBTB(Indirect Branch Target Buffer)存儲(chǔ)了間接分支指令PC值對應(yīng)的跳轉(zhuǎn)目標(biāo)地址;
[0015]模式歷史表PHT(Patter History Table)存儲(chǔ)了間接分支指令PC值對應(yīng)的分支跳轉(zhuǎn)方向;
[0016]預(yù)測信息表PIT(Predict1n Info Table)存儲(chǔ)了分支指令PC值對應(yīng)的預(yù)測信息;
[0017]PC管理模塊,接收外部輸入的指令PC值、分支指令預(yù)測模塊送來的分支預(yù)測結(jié)果、更新及錯(cuò)誤糾正模塊送來的分支預(yù)測結(jié)果反饋信息。其中分支指令預(yù)測模塊送來的分支預(yù)測結(jié)果,包括,分支指令預(yù)測跳轉(zhuǎn)與否、分支指令預(yù)測跳轉(zhuǎn)目標(biāo)地址,更新及錯(cuò)誤糾正模塊送來的分支預(yù)測結(jié)果反饋信息,包括分支指令PC值、分支預(yù)測結(jié)果正確與否、分支指令跳轉(zhuǎn)與否、分支指令跳轉(zhuǎn)目標(biāo)地址,在分支預(yù)測系統(tǒng)初始運(yùn)行時(shí),PC管理模塊根據(jù)外部輸入指令PC值加上一個(gè)固定的數(shù)值N計(jì)算產(chǎn)生下一條指令PC值,這個(gè)固定的數(shù)值N跟處理器所能處理的指令長度,以及采取的分支預(yù)測算法有關(guān),然后把下一條指令PC值送入分支指令查詢模塊;如果更新及錯(cuò)誤糾正模塊送來的分支預(yù)測結(jié)果反饋信息中分支預(yù)測結(jié)果錯(cuò)誤,則舍棄分支指令預(yù)測模塊送來的分支預(yù)測結(jié)果,然后判斷如果更新及錯(cuò)誤糾正模塊送來的分支預(yù)測結(jié)果反饋信息中分支指令跳轉(zhuǎn),則把更新及錯(cuò)誤糾正模塊送來的分支預(yù)測結(jié)果反饋信息中分支指令跳轉(zhuǎn)目標(biāo)地址作為下一條指令PC值送入分支指令查詢模塊;如果更新及錯(cuò)誤糾正模塊送來的分支預(yù)測結(jié)果反饋信息中分支預(yù)測結(jié)果錯(cuò)誤,則舍棄分支指令預(yù)測模塊送來的分支預(yù)測結(jié)果,然后判斷如果更新及錯(cuò)誤糾正模塊送來的分支預(yù)測結(jié)果反饋信息中分支指令不跳轉(zhuǎn),則把更新及錯(cuò)誤糾正模塊送來的分支預(yù)測結(jié)果反饋信息中分支指令PC值加上前面所說的固定的數(shù)值N計(jì)算產(chǎn)生下一條指令PC值,并把它送入分支指令查詢模塊;如果更新及錯(cuò)誤糾正模塊送來的分支預(yù)測結(jié)果反饋信息中分支預(yù)測結(jié)果正確,然后判斷如果分支指令預(yù)測模塊送來的分支預(yù)測結(jié)果中分支指令預(yù)測跳轉(zhuǎn),則把分支指令預(yù)測模塊送來的分支預(yù)測結(jié)果中分支指令預(yù)測跳轉(zhuǎn)目標(biāo)地址作為下一條指令PC值送入分支指令查詢模塊;如果更新及錯(cuò)誤糾正模塊送來的分支預(yù)測結(jié)果反饋信息中分支預(yù)測結(jié)果正確,然后判斷如果分支指令預(yù)測模塊送來的分支預(yù)測結(jié)果中分支指令預(yù)測不跳轉(zhuǎn),則把外部送入的指令PC值加上前面所說的固定的數(shù)值N計(jì)算產(chǎn)生下一條指令PC值,并把它送入分支指令查詢模塊;同時(shí)將下一條指令PC值送至外部對該指令PC值對應(yīng)的指令進(jìn)行譯碼,將譯碼后的指令譯碼信息送回分支指令譯碼信息記錄模塊,外部將該指令PC值對應(yīng)的指令譯碼信息送入外部指令執(zhí)行單元進(jìn)行執(zhí)行,把執(zhí)行結(jié)果信息送入分支指令預(yù)測結(jié)果判斷模塊;
[0018]分支指令查詢模塊,接收PC管理模塊送來的指令PC值,根據(jù)無條件分支目標(biāo)緩存UBTB(Uncondit1nal Branch Target Buffer)和條件分支目標(biāo)緩存CBTB(Condit1nalBranch Target Buffer)存儲(chǔ)的指令PC值與該指令PC值對應(yīng)的分支指令類型,得到與PC管理模塊送來的指令PC值對應(yīng)的分支指令類型信息,然后將指令PC值以及分支指令類型信息送入分支指令預(yù)測模塊;
[0019]分支指令預(yù)測模塊,接收分支指令查詢模塊送來的指令PC值以及分支指令類型信息,如果分支指令類型信息表明當(dāng)前指令PC值對應(yīng)的分支指令,是無條件跳轉(zhuǎn)且分支目標(biāo)地址為直接跳轉(zhuǎn)的分支指令,則該分支指令預(yù)測跳轉(zhuǎn),然后通過查詢無條件分支目標(biāo)緩存UBTB(Uncondit1nal Branch Target Buffer),得到與該指令PC值對應(yīng)的分支指令預(yù)測跳轉(zhuǎn)目標(biāo)地址,同時(shí)根據(jù)該指令PC值加上PC管理模塊中使用的固定的數(shù)值N得到與該分支指令對應(yīng)的返回地址,然后把返回地址記錄在返回地址堆桟RAS(Return Address Stack)中;如果分支指令類型信息表明當(dāng)前指令PC值對應(yīng)的分支指令,是返回類型的分支指令,則從返回地址堆桟RAS(Return Address Stack)中取出一條返回地址作為該返回類型的分支指令預(yù)測跳轉(zhuǎn)目標(biāo)地址;如果分支指令類型信息表明當(dāng)前指令PC值對應(yīng)的分支指令,是間接分支指令,則該間接分支指令預(yù)測跳轉(zhuǎn),然后從間接分支目標(biāo)緩存IBTB(Indirect BranchTarget Buffer)中讀取該指令PC值對應(yīng)的分支指令預(yù)測跳轉(zhuǎn)目標(biāo)地址,如果沒有在間接分支目標(biāo)緩存IBTB(Indirect Branch Target Buffer)中讀取到該指令PC值對應(yīng)的分支指令預(yù)測跳轉(zhuǎn)目標(biāo)地址即IBTB(Indirect Branch Target Buffer)預(yù)測失敗時(shí),然后從無條件分支目標(biāo)緩存UBTB(Uncondit1nal Branch Target Buffer)中讀取該指令PC值對應(yīng)的分支指令預(yù)測跳轉(zhuǎn)目標(biāo)地址,這種方式稱作補(bǔ)充預(yù)測;如果分支指令類型信息表明當(dāng)前指令PC值對應(yīng)的分支指令,是條件分支指令,則通過查詢模式歷史表PHT(Patter HistoryTable)得到與該指令PC值對應(yīng)的分支指令預(yù)測跳轉(zhuǎn)方向,然后通過查詢條件分支目標(biāo)緩存CBTB(Condit1nal Branch Target Buffer)得到與該指令PC值對應(yīng)的分支指令預(yù)測跳轉(zhuǎn)目標(biāo)地址;把分支指令預(yù)測模塊中的指令PC值、該指令PC值對應(yīng)的分支指令預(yù)測跳轉(zhuǎn)方向以及分支指令預(yù)測跳轉(zhuǎn)目標(biāo)地址送入分支指令信息記錄模塊,同時(shí)把分支指令預(yù)測模塊中的指令PC值、該指令PC值對應(yīng)的分支指令預(yù)測跳轉(zhuǎn)方向以及分支指令預(yù)測跳轉(zhuǎn)目標(biāo)地址送入PC管理模塊;
[0020]分支指令信息記錄模塊,接收分支指令預(yù)測模塊送來的指令PC值、該指令PC值對應(yīng)的分支指令預(yù)測跳轉(zhuǎn)方向以及分支指令預(yù)測跳轉(zhuǎn)目標(biāo)地址,接收外部輸入的指令PC值對應(yīng)指令譯碼信息,根據(jù)指令PC值對應(yīng)的指令譯碼信息判斷當(dāng)前指令是否是分支指令,且是否已經(jīng)進(jìn)行分支指令跳轉(zhuǎn)方向以及分支指令跳轉(zhuǎn)目標(biāo)地址的預(yù)測,并把信息記錄在預(yù)測