專利名稱:高性能緩存系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及集成電路及計(jì)算機(jī)領(lǐng)域。
背景技術(shù):
通常而言,緩存的作用是將內(nèi)存中的一部分內(nèi)容復(fù)制在其中,使這些內(nèi)容能在短時(shí)間內(nèi)由處理器核快速存取,以保證流水線的持續(xù)運(yùn)行。現(xiàn)行緩存的尋址都基于以下方式,首先用地址中的索引段尋址讀出標(biāo)簽存儲器中的標(biāo)簽。同時(shí)用地址中索引段與塊內(nèi)位移段共同尋址讀出緩存中的內(nèi)容。此外,將標(biāo)簽存儲器中讀出的標(biāo)簽與地址中的標(biāo)簽段進(jìn)行匹配。如果從標(biāo)簽存儲器中讀出的標(biāo)簽與地址中 的標(biāo)簽段相同,那么從緩存中讀出的內(nèi)容有效,稱為緩存命中。否則,如果從標(biāo)簽存儲器中讀出的標(biāo)簽與地址中的標(biāo)簽段不相同,成為緩存缺失,從緩存中讀出的內(nèi)容無效。對于多路組相聯(lián)的緩存,同時(shí)對各個路組并行進(jìn)行上述操作,以檢測哪個路組緩存命中。命中路組對應(yīng)的讀出內(nèi)容為有效內(nèi)容。若所有路組都為缺失,則所有讀出內(nèi)容都無效。緩存缺失之后,緩存控制邏輯將低級存儲媒介中的內(nèi)容填充到緩存中。緩存缺失可分為三類狀況強(qiáng)制缺失、沖突缺失和容量缺失。在現(xiàn)有緩存結(jié)構(gòu)中,除了預(yù)取成功的小部分內(nèi)容外,強(qiáng)制缺失是不可避免的。但是,現(xiàn)有的預(yù)取操作會帶來不小的代價(jià)。此外,雖然多路組相聯(lián)緩存可以降低沖突缺失,但受制于功耗及速度限制(如因?yàn)槎嗦方M相聯(lián)緩存結(jié)構(gòu)要求將所有路組由同一索引尋址的內(nèi)容及標(biāo)簽同時(shí)讀出并比較),路組數(shù)難以超過一定數(shù)目。此外,為了使緩存的速度與處理器核的運(yùn)行速度匹配,很難增加緩存的容量。所以有多層次緩存的設(shè)置,低層次的緩存比高層次的緩存容量大但速度慢。因此,現(xiàn)代的緩存系統(tǒng)通常由多路組相連的多層次緩存構(gòu)成。新的緩存結(jié)構(gòu),如犧牲緩存、跟蹤緩存以及預(yù)取(取一個緩存塊時(shí)把下一個緩存塊也取來放在緩存緩沖器或使用預(yù)取指令)等被用來彌補(bǔ)現(xiàn)有的某些缺陷。然而,隨著日漸擴(kuò)大的處理器/存儲器速度鴻溝,現(xiàn)行體系結(jié)構(gòu),特別是多種多樣的緩存缺失的可能性,仍是制約現(xiàn)代處理器性能提升的最嚴(yán)重瓶頸。本發(fā)明提出的方法與系統(tǒng)裝置能直接解決上述或其他的一個或多個困難。
發(fā)明內(nèi)容
本發(fā)明提出一種數(shù)字系統(tǒng)。所述數(shù)字系統(tǒng)包括一個處理器核和一個緩存控制單元。所述處理器核連接一個包含數(shù)據(jù)的第一存儲器和一個比第一存儲器速度更快的第二存儲器,且所述處理器用于執(zhí)行一段包含至少一條使用一個基地址在第二存儲器中訪問數(shù)據(jù)的指令。所述緩存控制單元連接第一存儲器、第二存儲器和處理器核,用于在處理器核執(zhí)行訪問數(shù)據(jù)的指令前將數(shù)據(jù)從第一存儲器填充到第二存儲器中。此外,所述緩存控制單元可進(jìn)一步對指令段進(jìn)行審查并提取出至少包含數(shù)據(jù)訪問指令信息和最后更新寄存器指令信息的指令信息。此外,根據(jù)提取出的指令信息建立對應(yīng)指令段的軌道,在最后更新至少一條訪問數(shù)據(jù)的指令所用的寄存器的指令執(zhí)行后,根據(jù)指令段對應(yīng)的軌道將第一存儲器中的數(shù)據(jù)填充到第二存儲器中。本發(fā)明還提出一種用于輔助連接一個包含可執(zhí)行指令的第一存儲器和一個比第一存儲器速度更快的第二存儲器的處理器核運(yùn)行的方法。所述處理器核用于執(zhí)行至少包含一條使用一個基地址寄存器訪問第二存儲器中數(shù)據(jù)的指令的指令段。所述方法包括對指令段進(jìn)行審查,從而提取出至少包括數(shù)據(jù)訪問指令信息和最后寄存器更新指令信息的指令信息。所述方法還包括根據(jù)提取出的指令信息建立對應(yīng)該指令段的軌道。此外所述方法還包括在最后更新至少一條數(shù)據(jù)訪問指令所用的寄存器的指令執(zhí)行后且在處理器核執(zhí)行該數(shù)據(jù)訪問指令之前,根據(jù)指令段對應(yīng)的軌道將第一存儲器中的數(shù)據(jù)填充到第二存儲器中。對于本領(lǐng)域?qū)I(yè)人士,還可以在本發(fā)明的說明、權(quán)利要求和附圖的啟發(fā)下,理解、領(lǐng)會本發(fā)明所包含其他方面內(nèi)容。
圖I是本發(fā)明所述的計(jì)算環(huán)境的一個實(shí)施例;圖2A是根據(jù)本發(fā)明所述方法實(shí)現(xiàn)地址樹的一個實(shí)施例;圖2B是基于本發(fā)明所述地址樹運(yùn)行的的一個實(shí)施例;圖3A是本發(fā)明所述緩存系統(tǒng)的一個實(shí)施例;圖3B是本發(fā)明所述緩存系統(tǒng)的另一個實(shí)施例;圖4是本發(fā)明所述緩存系統(tǒng)的另一個實(shí)施例;圖5是本發(fā)明所述緩存系統(tǒng)的另一個實(shí)施例;圖6是本發(fā)明所述緩存系統(tǒng)的另一個實(shí)施例;圖7A是本發(fā)明所述緩存系統(tǒng)的另一個實(shí)施例;圖7B是本發(fā)明所述緩存系統(tǒng)中一個組成部分的實(shí)施例;圖8是本發(fā)明所述主動表的一個實(shí)施例;圖9是本發(fā)明所述建立新軌道的一個實(shí)施例;圖IOA是本發(fā)明所述緩存系統(tǒng)的另一個實(shí)施例;圖IOB是本發(fā)明所述緩存系統(tǒng)中一個組成部分的實(shí)施例;圖IlA是本發(fā)明所述用于多層緩存結(jié)構(gòu)的分配器或保留表的一個實(shí)施例;圖IlB是本發(fā)明所述用于多層緩存結(jié)構(gòu)的分配器或保留表的一個實(shí)施例;圖12是本發(fā)明所述建立新軌道的實(shí)施例;圖13是本發(fā)明所述交換器的一個實(shí)施例;圖14A是本發(fā)明所述緩存系統(tǒng)的另一個實(shí)施例;圖14B是本發(fā)明所述緩存系統(tǒng)中一個組成部分的實(shí)施例;圖15是本發(fā)明所述軌道表壓縮的實(shí)施例;圖16A-16B是本發(fā)明所述分支判斷結(jié)構(gòu)的實(shí)施例;圖17是使用本發(fā)明所述高性能緩存結(jié)構(gòu)的存儲器結(jié)構(gòu)的實(shí)施例;圖18A是基于本發(fā)明所述間接尋址的指令預(yù)填充的實(shí)施例;圖18B是基于本發(fā)明所述間接尋址的指令預(yù)填充的另一個實(shí)施例;圖19是本發(fā)明所述緩存系統(tǒng)的另一個實(shí)施例;圖20是數(shù)據(jù)操作和指令之間交互的實(shí)施例;
圖21A是本發(fā)明所述的用于存儲數(shù)據(jù)裝載信息的軌道表結(jié)構(gòu)的實(shí)施例;圖21B是本發(fā)明所述的基于軌道表結(jié)構(gòu)的數(shù)據(jù)預(yù)填充的實(shí)施例;圖21C是實(shí)現(xiàn)了數(shù)據(jù)預(yù)填充結(jié)構(gòu)緩存系統(tǒng)更多細(xì)節(jié)的實(shí)施例;圖22A是本發(fā)明所述的數(shù)據(jù)和指令軌道表的實(shí)施例;圖22B是本發(fā)明所述的指令軌道表和數(shù)據(jù)軌道表之間接口結(jié)構(gòu)的實(shí)施例;圖22C是本發(fā)明所述的帶有壓縮功能的指令軌道表和數(shù)據(jù)軌道表之間接口結(jié)構(gòu)的實(shí)施例;圖22D是本發(fā)明所述的帶有壓縮功能的指令軌道表和數(shù)據(jù)軌道表之間接口結(jié)構(gòu)的實(shí)施例; 圖23是軌道表的一行和信息類型的實(shí)施例;圖24是本發(fā)明所述緩存系統(tǒng)的一個實(shí)施例;圖25是本發(fā)明所述緩存系統(tǒng)的一個實(shí)施例;圖26是本發(fā)明所述緩存系統(tǒng)的一個實(shí)施例;圖27A是本發(fā)明所述實(shí)時(shí)緩存結(jié)構(gòu)的一個實(shí)施例;圖27B是本發(fā)明所述實(shí)時(shí)緩存結(jié)構(gòu)的一個實(shí)施例;圖28A-28B是本發(fā)明所述軌道表和相關(guān)表的實(shí)施例;和圖29是本發(fā)明所述緩存結(jié)構(gòu)的一個實(shí)施例。
具體實(shí)施例方式雖然該發(fā)明可以以多種形式的修改和替換來擴(kuò)展,說明書中也列出了一些具體的實(shí)施圖例并進(jìn)行詳細(xì)闡述。應(yīng)當(dāng)理解的是,發(fā)明者的出發(fā)點(diǎn)不是將該發(fā)明限于所闡述的特定實(shí)施例,正相反,發(fā)明者的出發(fā)點(diǎn)在于保護(hù)所有基于由本權(quán)利聲明定義的精神或范圍內(nèi)進(jìn)行的改進(jìn)、等效轉(zhuǎn)換和修改。同樣的元器件號碼也可以被用于所有附圖以代表相同的或類似的部分。圖I是本發(fā)明所述的計(jì)算環(huán)境的一個實(shí)施例。如圖I所示,計(jì)算環(huán)境1000包括一個處理器核125、一個高層次存儲器124、一個填充/生成器123、一個低級存儲器122和一個循跡引擎320。應(yīng)當(dāng)理解的是,圖中所示的部件或設(shè)備僅僅是為了說明而不是限制,可以省略某些部件或設(shè)備,也可以增加其他的部件或設(shè)備。此外,本實(shí)施例僅對用于讀取指令的裝置進(jìn)行描述,用于讀取數(shù)據(jù)和存儲數(shù)據(jù)的裝置與之類似。高層次存儲器124和低級存儲器122可以由任意合適的存儲設(shè)備構(gòu)成,例如靜態(tài)存儲器(SRAM)、動態(tài)存儲器(DRAM)和閃存(flash memory) 0在本實(shí)施例中,存儲器的層次表示其與處理器核在連接上的接近程度。越靠近處理器核的存儲器層次越高。此外,通常一個較高層次的存儲器在速度上越快,且面積越小。高層次存儲器124可以作為系統(tǒng)的緩存或當(dāng)有其他緩存存在時(shí)的一級緩存,也可以被分割為復(fù)數(shù)個被稱為塊(如存儲塊)的存儲片段,用于存儲處理器核125要訪問的數(shù)據(jù)(即指令和數(shù)據(jù))。處理器核125可以是能以流水線方式并與緩存系統(tǒng)協(xié)同工作的任意合適的處理器。處理器核125可以使用分開的指令緩存與數(shù)據(jù)緩存,并可以包含一些用于緩存操作的指令。當(dāng)處理器核125執(zhí)行一條指令時(shí),處理器核125首先需要從存儲器中讀入指令和/或數(shù)據(jù)。循跡引擎320和填充/生成器123用于將處理器核125將要執(zhí)行到的指令填充到高層次存儲器124中,使處理器核125能從高層次存儲器124中以非常低的緩存缺失率讀到所需的指令。在本實(shí)施例中,術(shù)語“填充”表示將數(shù)據(jù)/指令從較低層次的存儲器移動到較高層次的存儲器中,術(shù)語“訪問存儲器”表示處理器核125對最接近的存儲器(即高層次存儲器124或一級緩存)進(jìn)行讀或?qū)憽QE引擎320及諸如填充/生成器123其他部件可以作為處理器芯片的一部分實(shí)現(xiàn)在同一集成電路中,也可以是獨(dú)立的芯片,或作為程序在處理器芯片中運(yùn)行,或由軟件和硬件組合構(gòu)成。在本實(shí)施例中,循跡引擎(tracking engine) 320根據(jù)填充/生成器123和處理器核125發(fā)送來的信息,產(chǎn)生適當(dāng)?shù)牡刂酚糜讷@取所需指令或包含所需指令的指令塊。循跡引擎320還可以向填充/生成器123提供適當(dāng)?shù)牡刂?,使得填?生成器123能利用該地址從低級存儲器122中獲取對應(yīng)指令或包含對應(yīng)指令的指令塊,并將所述指令或指令塊存儲到存儲器124中。此外,循跡引擎320還可以產(chǎn)生對高層次指令存儲器124的塊號。所述塊號與處理器核125產(chǎn)生的塊內(nèi)偏移量可以一同構(gòu)成指令尋址地址,在不發(fā)生緩存缺失 的情況下,從高層次指令存儲器124中取得對應(yīng)的指令送往處理器核125。具體來說,填充/生成器123包括一個生成器130和一個填充引擎132。填充引擎132可以根據(jù)適當(dāng)?shù)牡刂帆@取指令或指令塊。生成器130可以對從低級存儲器122中獲取來的每一條指令進(jìn)行審查,并提取出某些信息,如指令類型、指令地址、分支指令的分支目標(biāo)信息。所述指令以及包含分之目標(biāo)信息的提取出的信息被送到循跡引擎320。在本實(shí)施例中一條分支指令或一個分支點(diǎn)指的是任何適當(dāng)?shù)哪軐?dǎo)致處理器核125改變執(zhí)行流(如非按順序執(zhí)行一條指令)的指令形式。循跡引擎320可以根據(jù)所述指令以及分支目標(biāo)信息確定地址信息,如指令類型、分支源地址和分支目標(biāo)地址信息。舉例而言,指令類型可以包括條件分支指令、無條件分支指令和其他指令等。具體地,可以認(rèn)為無條件分支指令是條件分支指令的一種特例,即條件總是成立。因此,指令類型可以分為分支指令和其他指令等。分支源地址可以指分支指令本身的地址,分支目標(biāo)地址可以指當(dāng)分支成功發(fā)生時(shí)將被轉(zhuǎn)移到的地址。此外,還可以包括其他信息。此外,循跡引擎320可以根據(jù)所確定的信息提供的用于填充高層次存儲器124的地址信息建立地址樹或軌道表。圖2A給出了根據(jù)本發(fā)明所述方法實(shí)現(xiàn)地址樹的一個實(shí)施例。如圖2A所示,地址樹300可以包括樹節(jié)點(diǎn)310和312,樹干301、302、304、305和307,以及樹支303和306。一個樹干對應(yīng)一段固定或可變長度的指令序列。一個樹節(jié)點(diǎn)可以是一條在該指令后可能發(fā)生轉(zhuǎn)移的分支指令。如果分支轉(zhuǎn)移成功發(fā)生,一個連接所述樹節(jié)點(diǎn)和分支目標(biāo)地址的樹支就被建立起來。舉例而言,301、302、304、305和307是對應(yīng)樹干的普通指令段;310和312是對應(yīng)樹節(jié)點(diǎn)的分支指令;311和313是分支目標(biāo),并能以此建立樹支303和306。此外,其他可能的結(jié)構(gòu)也可以被使用。在程序執(zhí)行過程中,地址樹300或地址樹300中的任意部分可以被用做處理器核125執(zhí)行的一個指令序列的軌跡或軌道。所述指令序列的第一條指令可以被認(rèn)為是軌跡頭(HOL)或軌道頭,且包括所述第一條指令的指令段被填充到高層次存儲器124中,以被處理器核125使用。在執(zhí)行過程中,當(dāng)前指令可以成為正在執(zhí)行的指令序列中的第一條指令,這樣HOL就沿軌跡移動。此外,還可以產(chǎn)生一個或多個預(yù)測軌跡頭(PHOL),用于指示處理器核125可能使用的指令序列。舉例而言,在一個樹節(jié)點(diǎn)(即,一條分支指令),根據(jù)分支是否發(fā)生,可能存在兩個PHOL。在執(zhí)行過程中,可以根據(jù)軌跡中的分支點(diǎn)移動所述PHOL,且PHOL通常領(lǐng)先于HOL。根據(jù)分支節(jié)點(diǎn)的層數(shù),地址樹300可以提供不同深度。舉例而言,一個一層地址樹可以僅支持一層分支(如下一個分支),一個兩層地址樹可以支持兩層分支(如當(dāng)?shù)谝粚臃种]有發(fā)生時(shí)的所述第一層分支之后的分支,或當(dāng)?shù)谝粚臃种Оl(fā)生時(shí)的所述第一層分支對應(yīng)分支目標(biāo)軌道上的分支);此外,一個多層地址樹可以支持多層分支。圖2B是基于本發(fā)明所述地址樹運(yùn)行的的一個實(shí)施例。如圖2B所示,直線表示程序,曲線表示轉(zhuǎn)移路徑,粗點(diǎn)表示分支指令,虛線表示對應(yīng)程序按固定長度或近似長度指令段的劃分(如指令段)。一開始,處理器核125執(zhí)行程序段30,直到條件分支指令31。若分支指令31的分 支轉(zhuǎn)移條件不成立,則處理器核125執(zhí)行程序段33,直到無條件分支指令36,之后沿轉(zhuǎn)移路徑34途徑無條件分支轉(zhuǎn)移至程序段37。另一方面,若在執(zhí)行條件分支指令31時(shí)分支轉(zhuǎn)移條件成立,則處理器核125執(zhí)行沿轉(zhuǎn)移路徑32轉(zhuǎn)移到的程序段35,之后再繼續(xù)執(zhí)行程序段37。在執(zhí)行完程序段37后,處理器核125執(zhí)行程序段38直到用于循環(huán)的條件分支指令39。若條件分支指令39的循環(huán)條件成立,則沿轉(zhuǎn)移路徑40再次執(zhí)行程序段38。重復(fù)多次執(zhí)行38段直至循環(huán)條件不成立,之后處理器核125執(zhí)行程序段41。所述多個程序段可以由指令段11、12、13、14、15、16和17表示,且每個指令段可以包含相同數(shù)目的指令或在變長指令集時(shí)的不同數(shù)目的指令。舉例而言,指令段11可以包括程序段30中的全部指令和程序段33中的一部分指令;指令段12可以包括程序段33中的另一部分指令;指令段13可以包括程序段35中的一部分指令;指令段14可以包括程序段35中的另一部分指令和程序段37中的一部分指令;指令段15可以包括對應(yīng)程序段37中的另一部分指令;指令段16可以包括程序段38中的一部分指令;指令段17可以包括程序段38中的另一部分指令和程序段41中的一部分指令??梢愿鶕?jù)應(yīng)用目標(biāo)或硬件資源確定每個指令段的大小。為便于描述,在本實(shí)施例中假設(shè)對指令段的填充可以不采用交替填充的方法,都是在一個指令段填充完成后再將下一個待填充指令段填充到高層次指令存儲器124中。此夕卜,假設(shè)地址樹300的深度為一層。即只有一層分支被用于將指令段填充到高層次存儲器124中。其他配置方法也可以被類似使用。在處理器核125運(yùn)行之初,填充/生成器123開始將指令段11填充到高層次存儲器124中,并掃描被填充到高層次存儲器124中的每條指令。在某些情況下,可以一次掃描兩條或更多指令,執(zhí)行一條指令,掃描到的指令領(lǐng)先于執(zhí)行到的指令。舉例而言,可以在一個時(shí)鐘周期內(nèi)審查兩條指令,同時(shí)處理器核125執(zhí)行一條指令;或在多發(fā)射處理器情況下,在一個時(shí)鐘周期內(nèi)審查八條指令,同時(shí)處理器核125執(zhí)行四條指令。其他配置方法也可以被用于在執(zhí)行前進(jìn)行掃描。此外,填充/生成器123掃描條件分支指令31后,填充/生成器123可以判斷出條件分支指令31是一條分支指令,且能提取出分支指令31的位于程序段35中的目標(biāo)地址。這樣,循跡引擎320控制填充/生成器123將所述目標(biāo)地址對應(yīng)的指令段,即指令段13,填充到高層次存儲器124中。這樣,指令段13在條件分支指令31被執(zhí)行前就被填充到高層次存儲器124中。此外,分支指令31對應(yīng)順序執(zhí)行的下一條指令所位于的指令段11已經(jīng)被填充到高層次存儲器124中,所以不需要額外填充操作。此外,當(dāng)執(zhí)行到分支指令31時(shí),假設(shè)分支轉(zhuǎn)移條件不成立,則繼續(xù)執(zhí)行指令段11。當(dāng)指令段11中的最后 一條指令被執(zhí)行時(shí),后一指令段12已經(jīng)被填充到高層次指令存儲器124中,使得指令段11中最后一條指令執(zhí)行完畢后能在不發(fā)生緩存缺失的情況下執(zhí)行后一條指令。在填充指令段12時(shí),對正在填充的指令進(jìn)行掃描。填充/生成器123可以發(fā)現(xiàn)指令段12的最后一條指令是分支指令(即無條件分支指令36)。這樣,分支指令36目標(biāo)地址對應(yīng)的指令段(即指令段14)被填充到高層次指令存儲器124中。同樣地,在指令段13中的最后一條指令被執(zhí)行完之前就已經(jīng)可以知道最后一條指令對應(yīng)的下一指令在指令段14中。由于指令段14已被填充,因此不需要額外填充操作。同理,在處理器核125執(zhí)行指令段15、16和17中的任意指令前,將指令段15、16和17填充到高層次指令存儲器124中。此外,當(dāng)掃描到指令段17中用于循環(huán)的分支指令39時(shí),由于目標(biāo)指令段(即指令段16)和順序執(zhí)行下一指令地址對應(yīng)的指令段都已經(jīng)被填充到高層次存儲器124中,因此不需要額外填充操作。當(dāng)指令39的分支轉(zhuǎn)移條件不再成立時(shí),循環(huán)結(jié)束,繼續(xù)執(zhí)行指令段17中的后續(xù)指令。綜上所述,循跡引擎320和其他部件可以根據(jù)地址樹的概念控制上述操作從而充分地降低緩存缺失率。循跡引擎320和其他部件(如填充/生成器123)也可以是指類似緩存控制器的面向多種部件的接口,從而充分地降低緩存缺失率。圖3A是本發(fā)明所述緩存系統(tǒng)的一個實(shí)施例2000。如圖3A所示,循跡引擎320包括一個軌道表126和一個循跡器170。軌道表可以包含處理器核125所需執(zhí)行的指令的軌道,循跡器170可以根據(jù)軌道表126提供多個地址。在本實(shí)施例中,一條軌道代表一個將被執(zhí)行的指令序列(如一個指令段)。這種表示方式也可以包括任意合適的數(shù)據(jù)類型,如地址、塊號,或其他數(shù)字。此外,當(dāng)一條軌道包含一個具有可能改變程序流或處于另一個不同的指令段中的分支目標(biāo)的分支點(diǎn)時(shí)建立一條新的軌道,所述分支目標(biāo)的情況例如下一指令段中的一條指令,一個異常處理程序,以及不同的程序線程等。所述指令序列可以包含相同數(shù)目的指令,也可以在例如應(yīng)用于變長指令集時(shí)包含不同數(shù)目的指令。軌道表126可以包含復(fù)數(shù)條軌道,軌道表126中的每條軌道對應(yīng)軌道表126中的一行,且具有一個對應(yīng)于存儲塊的行號或塊號。一條軌道可以包括復(fù)數(shù)個軌跡點(diǎn),每個軌跡點(diǎn)對應(yīng)一條單獨(dú)的地址。此外,如同一條軌道對應(yīng)軌道表126中的一個單獨(dú)的行一樣,一個軌跡點(diǎn)對應(yīng)軌道表126中對應(yīng)行的一個單獨(dú)的表項(xiàng)(如存儲單元)。這樣,軌道中的軌跡點(diǎn)總數(shù)可以等于軌道表126中一行的表項(xiàng)總數(shù)。此外,其他配置方法也可以被使用。一個軌跡點(diǎn)(即表項(xiàng)中的單獨(dú)一項(xiàng))可以包含一條分支指令的信息,所述分支指令的分支目標(biāo)可以在另一條軌道中。這樣,軌跡點(diǎn)的內(nèi)容可以包括軌跡點(diǎn)對應(yīng)的指令的信息和分支目標(biāo)地址的信息,所述分支目標(biāo)地址的信息可以包括所述目標(biāo)軌道的軌道號,以及用于定位表項(xiàng)在目標(biāo)軌道中位置的偏移量。通過檢查軌跡點(diǎn)內(nèi)容,可以根據(jù)軌道號確定目標(biāo)軌道,并根據(jù)偏移量確定目標(biāo)軌道中的一個特定的表項(xiàng)。這樣,軌道表就成為一個分支軌道表項(xiàng)地址對應(yīng)分支源地址、表項(xiàng)內(nèi)容對應(yīng)分支目標(biāo)地址的表。例如,在圖3A中,處理器核125使用(M+Z)位的指令地址讀取指令并運(yùn)行,其中M和Z都是整數(shù)。地址中M位部分可以被用于指示高位地址,Z位部分可以被只是偏移量。軌道表126可以包含2"行,即2m條軌道,且M位高位地址可以被用于對軌道表126中的軌道進(jìn)行尋址。每個行可以包含2Z個軌道表項(xiàng),即22個軌跡點(diǎn),且偏移量(Z位)可以被用于在對應(yīng)行中對一個特定的軌跡點(diǎn)(表項(xiàng))進(jìn)行尋址。當(dāng)新軌道被建立時(shí),可以將新建軌道放置在軌道表中的一個有效行中。如果所述新軌道包含一個分支軌跡點(diǎn)(對應(yīng)一條分支源指令),那么在所述行中的一個表項(xiàng)內(nèi)建立一個分支軌跡點(diǎn)??梢愿鶕?jù)分支源地址確定所述分支點(diǎn)在軌道表126中的行及表項(xiàng)的位置。舉例而言,可以根據(jù)分支源地址的高位地址確定行,并根據(jù)分支源地址的偏移量確定表項(xiàng)。 此外,行中的每個表項(xiàng)或軌跡點(diǎn)可以包含一種內(nèi)容格式,所述格式包括類型區(qū)域57、XADDR區(qū)域58和YADDR區(qū)域59。此外還可以包含其他區(qū)域。類型區(qū)域57可以表示軌跡點(diǎn)對應(yīng)的指令的類型。如之前所述,指令類型可以包括條件分支指令、無條件分支指令和其他指令。XADDR區(qū)域58可以包含M位地址,也被稱為第一維地址或簡稱為第一地址。YADDR區(qū)域59可以包含Z位地址,也被稱為第二維地址或簡稱為第二地址。此外,新軌跡點(diǎn)的內(nèi)容可以對應(yīng)分支目標(biāo)指令。換句話說,分支軌跡點(diǎn)的內(nèi)容存儲了分支目標(biāo)地址信息。舉例而言,軌道表126中的對應(yīng)與一條分支目標(biāo)指令的特定的行的行號或塊號被作為第一地址58存儲到所述分支軌跡點(diǎn)的內(nèi)容中。此外,所述分支目標(biāo)的偏移量被作為第二地址59存儲到所述分支軌跡點(diǎn)的內(nèi)容中。所述偏移量可以根據(jù)分支源指令地址和分支轉(zhuǎn)移位移(距離)計(jì)算得到。這樣,在對分支目標(biāo)進(jìn)行尋址時(shí),存儲在分支軌跡點(diǎn)(即所述分支源指令)中的第一地址XADDR 58被用做行地址,存儲在分支軌跡點(diǎn)中的第二地址YADDR 59被用做列地址。指令存儲器46可以是高層次存儲器124的一部分,用于指令訪問,并可以由任意合適的高性能存儲器構(gòu)成。指令存儲器46可以包含2m個存儲塊,每個存儲塊包含2Z個字節(jié)或字。循跡器170可以由多種部件或設(shè)備構(gòu)成,如寄存器、選擇器、棧和/或其他存儲模塊,用于確定處理器核125執(zhí)行的下一軌道。循跡器170可以根據(jù)軌道表126中的當(dāng)前軌道、軌跡點(diǎn)信息和是否因處理器核125的執(zhí)行發(fā)生分支轉(zhuǎn)移等信息確定下一軌道。舉例而言,在運(yùn)行過程中,總線55上傳遞了(M+Z)位的指令地址。M位地址通過總線56被作為第一地址或XADDR (或X地址)送到軌道表126,Z為地址通過總線53被作為第二地址或YADDR(或Y地址)送到軌道表126。根據(jù)所述第一地址和第二地址,可以找到軌道表中的一個表項(xiàng),并將它的內(nèi)容輸出到總線51上。若所述表項(xiàng)對應(yīng)一條分支指令(一個分支軌跡點(diǎn)或分支源指令),則表項(xiàng)內(nèi)容通過總線51被用做分支的目標(biāo)地址。如果所述分支指令的分支轉(zhuǎn)移條件不成立,那么分支轉(zhuǎn)移不發(fā)生,且處理器核125發(fā)出的所述分支轉(zhuǎn)移不發(fā)生信號控制選擇器49選擇總線53上的YADDR經(jīng)增一邏輯48增加一(I)個字節(jié)或字后得到總線54上的值作為新的第二地址,并在總線52上輸出所述新地址。寄存器50保持第一地址不變,由增一邏輯48不斷增一(I)直至指向當(dāng)前軌道上的下一個分支指令。此后,所述第一地址和第二地址被保持在寄存器50中并被提供到總線55上。另一方面,如果所述分支指令的分支轉(zhuǎn)移條件成立,那么分支轉(zhuǎn)移發(fā)生,且處理器核125發(fā)出的所述分支轉(zhuǎn)移繁盛信號控制選擇器49選擇總線51上的所述分支點(diǎn)對應(yīng)的軌道表項(xiàng)的內(nèi)容中存儲的新目標(biāo)地址作為輸出送到總線52上。寄存器50保持所述改變后的第一地址,并將(M+Z)位的新地址提供到總線55上。處理器核125發(fā)出的用于控制選擇器49的信號也被成為“發(fā)生(taken)”信號,用于表示分支是否發(fā)生這樣,當(dāng)處理器核125僅提供偏移量的同時(shí),循跡引擎320提供了一個總線56上的塊地址,從而實(shí)現(xiàn)了對指令存儲器46進(jìn)行尋址的目的。處理器核125向循跡器170反饋分支指令執(zhí)行情況(即“發(fā)生”信號),使得循跡器170能確定如何運(yùn)行。在新軌道被執(zhí)行前,所述軌道對應(yīng)的指令段已經(jīng)被填充到指令存儲器46中。這樣的過程被反復(fù)執(zhí)行,使得所有指令都能在不發(fā)生緩存缺失的情況下被處理器核125執(zhí)行。 此外,還可以使用兩層的指針(PHOL),從而對第一個分支點(diǎn)之后的兩個后續(xù)分至點(diǎn)進(jìn)行審查,且循跡器170和/或填充/生成器123可以將所述兩個分支點(diǎn)的兩條軌道對應(yīng)的指令段填充到指令存儲器46中,從而更進(jìn)一步隱藏填充緩存的時(shí)延。圖3B是本發(fā)明所述緩存系統(tǒng)的另一個實(shí)施例3000。本實(shí)施例省略了與圖3A實(shí)施例相似的部件。如圖3B所示,總線56上的用于對軌道表126和指令存儲器46進(jìn)行尋址的XADDR地址或塊地址可以有多個不同的來源。這就是說,循跡器170可以從復(fù)數(shù)個地址源中選擇軌道。舉例而言,用多路選擇器65代替了圖3A中的選擇器49,使得能從四個不同的來源中進(jìn)行選擇總線51上的當(dāng)前分支指令的目標(biāo)地址(軌道表內(nèi)容)、總線54上的第一地址不變且第二地址增一(I)產(chǎn)生的一個正常地址、在總線64上的來源于棧61的一個地址,以及在總線62上的對應(yīng)于異常處理程序入口的軌道位置。多路選擇器65根據(jù)當(dāng)前指令及運(yùn)行狀態(tài)選擇一條軌道(當(dāng)前軌道或新軌道)。舉例而言,如果第二地址對應(yīng)的軌跡點(diǎn)不是分支指令,那么第一地址保持不變,且增一邏輯48保持對第二地址的增一(I)直到下一分支指令。如果第二地址對應(yīng)的軌跡點(diǎn)是分支指令或到達(dá)了一個分之指令,且分支條件不滿足,那么第一地址仍然保持不變且第二地址增加直到下一個分支指令。另一方面,如果分支條件滿足,或所述分支是無條件的,那么目標(biāo)地址被用做新的第一地址從而到達(dá)一條新的軌道。最后,如果到達(dá)最后一條指令,之后也將進(jìn)入下一指令段對應(yīng)的一條新軌道。一些特殊的程序,如異常處理程序,也可以被填充到高層次存儲器124中并建立對應(yīng)軌道。這些特殊程序入口對應(yīng)的軌跡點(diǎn)地址可以被存儲到一些特殊的寄存器(如EXCP)中。當(dāng)一個時(shí)間發(fā)生時(shí)(如有一個異常發(fā)生),對應(yīng)于一個特殊程序(如一個異常處理程序)的軌跡點(diǎn)地址經(jīng)總線62被選擇器65選中,以進(jìn)入所述特殊程序。此外,棧61可以包含復(fù)數(shù)個單獨(dú)的棧。每個單獨(dú)的棧都可以提供棧操作,如將指令入棧,以及將指令出棧,從而保存線程內(nèi)容或保存“調(diào)用(CALL)”的路徑(ixnitine)狀態(tài)。當(dāng)一個程序調(diào)用一個路徑時(shí),對應(yīng)返回地址的軌跡點(diǎn)的地址和/或其他信息可以入棧,并且當(dāng)從一個調(diào)用路徑返回時(shí),所述被保存的軌跡點(diǎn)地址和/或其他信息可以出棧并根據(jù)所述軌跡點(diǎn)強(qiáng)制改變軌道(由選擇器65選擇64)。在某些情況中,處理器核125可以執(zhí)行一種“跳轉(zhuǎn)并鏈接”類型的指令(即當(dāng)路徑執(zhí)行完畢后分支轉(zhuǎn)移或調(diào)用到返回地址)。同樣地,一個??梢杂脕肀4孢@種類型指令的返回地址。此外,處理器核125可以執(zhí)行復(fù)數(shù)層嵌套的“調(diào)用”或“跳轉(zhuǎn)并鏈接”類型的指令。所述單獨(dú)??梢园瑥?fù)數(shù)層從而在不同的棧層次保存多個返回地址。此外,所述復(fù)數(shù)個??梢灾С侄嗑€程程序。軌道表126可以包含對應(yīng)于不同線程的復(fù)數(shù)個棧,且線程標(biāo)識器63可以被用來標(biāo)識當(dāng)前程序線程。此外,線程標(biāo)識器63指向支持當(dāng)前線程的當(dāng)前棧。其他的來源或排列也可以被用在本實(shí)施例中。這樣,通過使用復(fù)數(shù)個??梢灾С侄嗑€程程序,根據(jù)線程標(biāo)識器63的標(biāo)識,每個棧都可以被一個線程或程序單獨(dú)使用。圖4是本發(fā)明所述緩存系統(tǒng)的另一個實(shí)施例4000。實(shí)施例4000與圖3A中的實(shí)施例2000相似。然而,在本實(shí)施例中使用了指令存儲器78代替指令存儲器46。如圖4所示,指令存儲器78可以包含2n個存儲塊,其中N是整數(shù)且N < M。這就是說,指令存儲器78可以比指令存儲器46包含更少的存儲塊??偩€56上的第一地址也因此僅被用于對軌道表126尋址。此外,一個映射單元79可以將第一地址映射到N位長的塊號或塊地址80。這樣, 送往高層次存儲器的地址可以通過映射從而減小高層次存儲器的大小。由于處理器核125幾乎不可能用到整個地址空間中的全部指令地址,因此采用這種基于映射的方法可以不提供對應(yīng)于全部地址空間的存儲塊,從而減小指令存儲器78的大小。圖5是本發(fā)明所述緩存系統(tǒng)的另一個實(shí)施例5000。實(shí)施例5000與圖4中的實(shí)施例4000相似。然而,軌道表126可以只包含2N個行。這就是說,總線56上的第一地址經(jīng)映射單元82映射后同時(shí)對軌道表126和指令存儲器78進(jìn)行尋址,以減少對容量大小的要求。此外,在軌道表126和指令存儲器78中的總行數(shù)小于處理器核125全部可尋址空間的情況下,軌道表126中的行可以仍然使用M位作為第一地址并使用Z位作為第二地址,從而同時(shí)減少軌道表126和指令存儲器78的存儲器容量。圖6是本發(fā)明所述緩存系統(tǒng)的另一個實(shí)施例6000。實(shí)施例6000與圖5中的實(shí)施例5000相似。然而,如圖6所示,一個映射單元83被放置于軌道表126及指令存儲器78的外部,使得M位的第一地址84被軌道表126及指令存儲器78使用前被映射為N位的第一地址85。這樣,送到軌道表126、指令存儲器78和循跡器170的地址都經(jīng)過了映射以減
小容量。這樣,軌道表126中的行可以使用N位的第一地址和Z位的第二地址,軌道表126和指令存儲器78中的總行數(shù)可以小于處理器核125可尋址的全部地址空間,從而同時(shí)減少軌道表126和指令存儲器78的存儲器容量。此外,較短的第一地址可以提高整個系統(tǒng)的性倉泛。雖然上述的映射方法可以減少緩存和軌道表的容量,每一個指令段仍然可以對應(yīng)到一條軌道。額外的結(jié)構(gòu)也可以被用于在不丟棄已建軌道信息的情況下防止重復(fù)建立已建軌道。圖7A就是采用了上述一個或多個映射方法實(shí)現(xiàn)的本發(fā)明所述緩存系統(tǒng)的另一個實(shí)施例8000。如圖7A所示,緩存系統(tǒng)8000包含低級存儲器122、高層次指令存儲器124和處理器核125。此外,緩存系統(tǒng)8000還包含填充/生成器123、分配器1200、軌道表126和循跡器170。分配器1200、軌道表126和循跡器170構(gòu)成了循跡引擎320 (圖中未顯示)的主體部分。而且如之前所述,循跡引擎320、填充/生成器123和其他相關(guān)邏輯可以被用做一個緩存控制單元。應(yīng)當(dāng)理解的是,這里列出的多個部件只是為了便于描述,還可以包含其他部件,或某些部件可以被組合或省去。所述多個部件可以分布在多個系統(tǒng)中,可以是物理存在的或虛擬的,也可以用硬件實(shí)現(xiàn)(如集成電路)、用軟件實(shí)現(xiàn)或由軟硬件組合實(shí)現(xiàn)。此外,填充/生成器123可以包含一個填充引擎132、一個生成器130和地址翻譯單元131,且循跡器170可以包含一個多路選擇器137、寄存器138、增一邏輯136和棧135。還可以包含其他部件,或某些部件可以被組合或省去。為便于描述,根據(jù)特定的應(yīng)用和配置,高層次存儲器124可以被視為一個一級(LI)緩存,且低級存儲器122可以被視為一個二級(L2)緩存或主存儲器。如之前所述,生成器130提取分支指令(源)地址(分支指令對應(yīng)的軌道表地址)、分支類型,和分支目標(biāo)地址(分支軌跡點(diǎn)對應(yīng)的軌道表內(nèi)容),用以建立軌道表126。分配器1200可以被用于將存儲軌道信息或分配后存儲軌道信息以減少軌道表126和高層次存儲器124的容量大小要求。舉例而言,分配器1200可以包含一個主動表121。一個主動表可以存儲一條已建立的軌道的信息,并建立一個地址(或地址的一部分)與一個諸如軌道在軌道表126中占據(jù)的有效行所表示的塊號之間的映射。舉例而言,當(dāng)建立一條軌道時(shí),所述軌道的地址信息被存儲到主動表中。也可以采用其他的安置形式。 如圖7A所示,主動表121可以被用于存儲指令段在高層次存儲器124中的塊地址,且每個塊地址對應(yīng)一個塊號(BNX)。對應(yīng)一個特定地址的塊號可以通過對地址和主動表121中的表項(xiàng)進(jìn)行內(nèi)容匹配得到。所述匹配成功內(nèi)容所在位置可以被編碼得到一個塊號,所述塊號可以被用于索引軌道表中的一個行以及高層次存儲器124中的一個塊。如果匹配不成功,則意味著所述地址對應(yīng)的軌道還沒有建立起來。對應(yīng)所述地址的指令段被填充到高層次存儲器124中,一個新的軌道被建立在軌道表126里由地址指針129通過總線153索引的行中,且主動表121里由地址指針129通過總線153索引的項(xiàng)被更新(寫入)為對應(yīng)的塊地址。圖8是本發(fā)明所述主動表的一個實(shí)施例。如圖8所示,主動表121可以包括一個地址/數(shù)據(jù)雙向?qū)ぶ穯卧?00。在一個方向上,數(shù)據(jù)/地址雙向?qū)ぶ穯卧?00可以根據(jù)一個輸入的塊地址輸出一個BNX號。數(shù)據(jù)/地址雙向?qū)ぶ穯卧?00通過匹配輸入的塊(高位)地址和數(shù)據(jù)/地址雙向?qū)ぶ穯卧?00中的內(nèi)容產(chǎn)生一個對應(yīng)的BNX。在另一個方向上,數(shù)據(jù)/地址雙向?qū)ぶ穯卧?00可以根據(jù)一個輸入的BNX號輸出一個對應(yīng)的塊地址。所述輸入的BNX號可以索引到存儲所述塊地址的表項(xiàng)。此外,數(shù)據(jù)/地址雙向?qū)ぶ穯卧?00可以包括復(fù)數(shù)個表項(xiàng)101,每個表項(xiàng)101包含一個寄存器、一個比較器、一個標(biāo)志位111 (即V位)、一個標(biāo)志位112 (即A位)和一個標(biāo)志位113 (即U位)。比較器的結(jié)果可以被送到編碼器102用于產(chǎn)生一個匹配的表項(xiàng)號??刂七壿?07可以被用于控制讀/寫狀態(tài)。每一個表項(xiàng)101的V(有效)位可以被初始化為“0”,且每一個表項(xiàng)101的A(主動)位可以被寫入信號線119上的一個主動信號。一個寫指針105可以指向數(shù)據(jù)/地址雙向?qū)ぶ穯卧?00中的一個表項(xiàng),且所述指針由一個循環(huán)自增單元110(圖7A中的129)產(chǎn)生。循環(huán)自增單元110能產(chǎn)生的最大值等于表項(xiàng)101的總數(shù)。當(dāng)達(dá)到最大值后,循環(huán)自增單元110增一產(chǎn)生的下一個值從“O”重新開始,且不斷自增直到再次達(dá)到最大值。在運(yùn)行過程中,當(dāng)寫指針105指向一個當(dāng)前表項(xiàng)101時(shí),檢查當(dāng)前表項(xiàng)101的V位和A位。如果V位和A位都是“0”,那么當(dāng)前表項(xiàng)是空閑、可以被寫入的。當(dāng)寫操作完成后,循環(huán)自增單元110可以將指針增加一(I)從而指向下一個表項(xiàng)。然而,如果V位和A位中有一個不為“O”,那么當(dāng)前表項(xiàng)并不能被用于新的寫入,循環(huán)自增單元110可以將指針增加一 (I)從而指向下一個表項(xiàng),并檢查所述下一個表項(xiàng)的是否可以用于新的寫入。在匹配過程中,輸入的塊地址數(shù)據(jù)104和每個表項(xiàng)101的寄存器中的內(nèi)容進(jìn)行比較。所述寄存器中的內(nèi)容僅包含(對應(yīng)高層次存儲器124中存儲塊的)地址的高位。如果匹配成功,那么編碼器102將匹配結(jié)果編為一個表項(xiàng)號碼并將所述表項(xiàng)號碼送到匹配地址輸出109。如果匹配不成功,那么所述輸入的塊地址被寫入由指針105指向的表項(xiàng)里的寄存器101中,同時(shí)該表項(xiàng)里的V位被設(shè)為“1”,且所述表項(xiàng)號碼被從到匹配地址輸出109。所述輸出的表項(xiàng)號碼之后會被用于表示BNX(因?yàn)樗饕艘粋€存儲塊,因此也就是塊號)。所述輸入地址的低位(即一個存儲塊中的偏移量)之后會被用于表示BNY。所述BNX和BNY一起用于表不BN,所述BN之后會被存儲到一個軌道表項(xiàng)中,并被用于索弓I軌道表126、高層次存儲器124,和主動表121。雖然這里使用的“BN”通常指包含BNX和BNY的“塊號”,但在本領(lǐng)域技術(shù)人員能夠理解的前提下,在某些特殊的情況里,它也可以僅指地址的高位部分,即相當(dāng)于BNX。此外,循環(huán)自增單元110可以將指針BNY增加一(I)從而指向下一個表項(xiàng)。
對于讀操作,讀地址106被用于在多個表項(xiàng)101中選擇一個表項(xiàng),并將選中的表項(xiàng)里的寄存器的內(nèi)容讀出并送到數(shù)據(jù)輸出108,以及將所述選中的表項(xiàng)101的V位設(shè)置為“I”。一個表項(xiàng)101里的U位可以被用于表示存儲狀態(tài)。當(dāng)寫指針105指向一個表項(xiàng)101時(shí),所述被指向的表項(xiàng)里的U位被設(shè)置為“O”。當(dāng)讀取一個表項(xiàng)101時(shí),所述被讀出的表項(xiàng)里的U位被設(shè)置為“I”。此外,當(dāng)循環(huán)自增單元110產(chǎn)生一個寫指針105指向一個新的表項(xiàng)時(shí),檢查所述新表項(xiàng)里的U位。如果所述U位是“0”,那么所述新表項(xiàng)是可以被用于替換的,且為了完成可能的數(shù)據(jù)寫入操作,寫指針105停留在所述新表項(xiàng)。然而,如果所述U位是“1”,那么指針105進(jìn)一步指向下一個表項(xiàng)??蛇x地,一個窗口指針116可以被用來將其指向的表項(xiàng)里的U位設(shè)置為“0”,且窗口(清除)指針116位于寫指針105之前的N個表項(xiàng)的位置(N為一個整數(shù))??梢酝ㄟ^使用加法器115將寫指針105的值增加N得到窗口指針116的值。寫指針105和窗口指針116之間的N個表項(xiàng)可以被認(rèn)為是一個窗口。這樣,清除指針可以將一個表項(xiàng)里的U位設(shè)置為“O”。之后,對該表項(xiàng)的任意一次讀操作都會導(dǎo)致所述U位被設(shè)置為“I”。當(dāng)寫指針105指向所述表項(xiàng)時(shí),檢查所述U位。如果所述U位是“0”,即表示自從該表項(xiàng)被清除指針116清除后,該表項(xiàng)沒有被使用過,因此寫指針105停留在該表項(xiàng)并用于下一次的寫入。在另一方面,如果所述U位是“ I ”,即表示該表項(xiàng)最近被使用過,那么寫指針移動到下一個表項(xiàng)。可以通過改變窗口的大小(即改變N的值)改變表項(xiàng)101中的表項(xiàng)被替換的頻率。這種方法可以被用做一種基于使用率的替換策略以替換主動表121中的表項(xiàng)??蛇x地,所述U位可以超過一位,這樣就有多位U位。所述多位U位可以被寫指針105或窗口(清除)指針116清除,且每次讀操作可以將對應(yīng)的多位U位的值增加“I”。在寫操作過程中,將當(dāng)前表項(xiàng)里的U位與一個預(yù)先設(shè)定的數(shù)值。如果U位的值小于所述預(yù)先設(shè)定的數(shù)值,那么當(dāng)前表項(xiàng)是可以被替換的。如果U位的值大于所述預(yù)先設(shè)定的數(shù)值,那么指針105移動到下一個表項(xiàng)?;氐綀D7A,當(dāng)處理器核125開啟時(shí),一個重置信號(圖中未顯不)把主動表121中所有表項(xiàng)的有效位置為“O”。當(dāng)重置信號釋放時(shí),一個重置向量(重置起點(diǎn)的指令地址)被放上總線141以送到主動表121進(jìn)行匹配。因?yàn)樵谥鲃颖?21里表項(xiàng)的內(nèi)容中未尋到匹配,主動表121就把所述地址的高位部分(即重置向量)寫入指針129產(chǎn)生的WXADDR 153指向的主動表121中的表項(xiàng),將所述表項(xiàng)的有效位設(shè)置為“1”,并通過總線144將所述重置向量送到填充引擎132。填充引擎132根據(jù)重置向量對應(yīng)的指令地址通過總線154從低級存儲器122獲取所述指令。所述獲取到的指令被填充到高層次存儲器124中由指針129產(chǎn)生的WXADDR 153索引的存儲塊中。同時(shí),通過總線140從低級存儲器122獲取所述指令時(shí),生成器130可以掃描并審查所述指令。此外,所述指令對應(yīng)的軌跡信息被寫入對應(yīng)的表項(xiàng)或軌道表126中由WXADDR 153指向的行里的軌跡點(diǎn)中。 當(dāng)填充操作完成后,指針129移動到主動表121中的下一個可用表項(xiàng)??蛇x地,地址翻譯單元131可以對虛地址和實(shí)地址進(jìn)行翻譯轉(zhuǎn)換。地址翻譯單元131也可以被放置在低級存儲器122之外,從而減少從低級存儲器122獲取到高層次存儲器124的時(shí)延。生成器130掃描填充到高層次存儲器124的指令塊中每一條指令。當(dāng)生成器130找到一條分支指令時(shí),計(jì)算出分支指令的目標(biāo)地址。所述目標(biāo)地址可以由包含所述分支指令的指令段起始地址加上所述分支指令的偏移量,并再加上分支轉(zhuǎn)移到目標(biāo)指令的距離。所述目標(biāo)地址的低位部分就是所述分支目標(biāo)指令在其行中的偏移量(之后將用BNY表示)。所述計(jì)算得到的目標(biāo)地址的高位部分被用于與主動表121中的內(nèi)容匹配。如果匹配不成功,那么主動表121就把這個值通過總線144送到填充引擎132以實(shí)現(xiàn)填充操作。在另一方面,如果匹配成功,那么表示包含所述分支目標(biāo)的指令段已經(jīng)存儲在高層次存儲器124中,且匹配成功的行號碼(BNX)及分支目標(biāo)指令在行(BNX)中的偏移量(BNY)(即合并稱為BN)被送到總線149用于寫入一個軌道表項(xiàng)。所述表項(xiàng)由WXADDR153 (行地址)以及在總線143上的從生成器130 (列地址)來的表示分支指令在其所在指令段中偏移量的值共同索引。這樣,當(dāng)指令段中所有指令都被掃描、處理后,在主動表121、軌道表126和高層次存儲器124中對應(yīng)同一指令段的表項(xiàng)被同一個WXADDR索引。更特殊地,高層次存儲器124包含了將被處理器核125使用的整個指令段,主動表121包含了將與后續(xù)指令段進(jìn)行匹配的塊(高位)地址,且軌道表126包含了所述指令段中的全部分支軌跡點(diǎn),包括它們在指令段中的位置和它們的目標(biāo)地址的BN值。一個BN值包括一個行地址BNX和一個列地址BNY。圖9顯示了根據(jù)本發(fā)明技術(shù)方案使用軌道表126建立新軌道的方法的一個實(shí)施例。如圖9所示,一個已建立的軌道66(用BNXO表示)可以包含三條分支指令或分支點(diǎn)67、68和69。當(dāng)審查分支點(diǎn)67時(shí),一條新軌道70 (用BNXl表示的下一個可用行)被建立起來用于存儲分支點(diǎn)67的目標(biāo)指令,且軌道表126中的所述軌道的號碼或所述行號(即BNX1)被記錄在分支點(diǎn)67中作為第一地址。類似地,當(dāng)審查分支點(diǎn)68時(shí),在軌道表126中另一條新軌道71 (用BNX2)表示被建立起來,且軌道號碼被記錄在分支點(diǎn)68中;當(dāng)審查分支點(diǎn)69時(shí),在軌道表126中另一條新軌道72(用BNX3)表示被建立起來,且軌道號碼被記錄在分支點(diǎn)69中。這樣,單條軌道中對應(yīng)全部分支點(diǎn)的新軌道可以被建立起來。此外,軌道表126可以足夠大從而容納全部塊號,且新軌道的號碼可以通過對已使用的軌道中最大的軌道號碼加一(I)的方法得到??蛇x地,根據(jù)特定的軌道粒度,一條軌道對應(yīng)的指令數(shù)目可以是多種的(較高粒度可以允許一個單獨(dú)的軌道或行用較小的表項(xiàng)數(shù)目代表包含較大個數(shù)的指令的指令段)?;氐綀D7A,繼續(xù)之前的操作,循跡器170可以輸出一個BN 151用于對軌道表126和高層次存儲器124尋址。這就是說,循跡器170可以對軌道表126、高層次存儲器124和處理器核125提供坐標(biāo)操作。圖7B顯示了緩存系統(tǒng)8000中實(shí)現(xiàn)所述操作的一個組成部分的實(shí)施例。如圖7B所示,循跡器170包括一個棧135、一個自增器136、一個多路選擇器137、一個寄存器138和一個異常處理程序地址寄存器139。在操作過程中,循跡器170控制軌道表126的一個讀指針。也就是說,循跡器170輸出一個地址(即BN 151)用于對軌道表126和高層次存儲器124進(jìn)行尋址。BN 151包含BNX 152和BNY 156。BNX 152可以被用于對軌道表126中的一個行或一條軌道進(jìn)行尋址,并對高層次存儲器124中的一個存儲塊進(jìn)行尋址,此時(shí)BNY 156可以被用于對軌道表126中由BNX 152指向的軌道或行中的一個表項(xiàng)進(jìn)行尋址。
循跡器170可以通過多路選擇器137選擇從不同來源來的輸出BN 151。舉例而言,多路選擇器137可以有四個BN輸入來源通過總線164送來的存儲在棧135中的一個BN、通過總線165送來的由當(dāng)前BNX 151和經(jīng)自增器136對當(dāng)前BNY 156自增后的得到的BNY構(gòu)成的一個新BN、通過總線150送來的來源于軌道表126的一個BN、以及來源于異常處理程序地址寄存器139的一個BN。還可以有其他的來源。如之前所述,存儲在棧135中的BN可以是函數(shù)調(diào)用或返回時(shí)的程序地址對應(yīng)的BN值,存儲在異常處理程序地址寄存器139中的BN可以是異常處理程序的地址對應(yīng)的BN值。多路選擇器137輸出的所有BN值均包含 BNX 和 BNY。此外,多路選擇器137受來自處理器核125的信號381控制以選擇一個特定的BN送到輸出418。舉例而言,當(dāng)處理器核125發(fā)生異常時(shí),多路選擇器137受信號381控制,選擇異常處理程序地址寄存器139送來的BN作為輸出418 ;當(dāng)處理器核125進(jìn)行函數(shù)調(diào)用返回時(shí),多路選擇器137信號381控制,選擇棧135送來的BN作為輸出418 ;當(dāng)處理器核125進(jìn)行分支轉(zhuǎn)移時(shí)(信號381成為一個分支轉(zhuǎn)移信號),多路選擇器137信號381控制,選擇軌道表126送來的BN作為輸出418 ;以及當(dāng)處理器核125不進(jìn)行分支轉(zhuǎn)移或執(zhí)行其他普通操作時(shí),多路選擇器137受信號381控制選擇BN 165,即BNX 152保持不變、BNY經(jīng)自增器136增一后的BN作為輸出418。從多路選擇器137來的總線或輸出418 (即下一個BN)可以在處理器核125來的信號417的控制下被存儲到寄存器138中并被用于更新循跡器輸出的BN151。當(dāng)寄存器138受信號417控制保持當(dāng)前BN 151不變時(shí),寄存器138不會輸出所述輸出418。另一方面,當(dāng)寄存器138受信號417控制更新當(dāng)前BN 151時(shí),所述輸出418被送到總線151上成為當(dāng)前BN 151,從而更新 BNX 152 和 BNY 156。循跡器170提供的BNl51包含BNX 152和BNY 156。BNX 152被用于對指令段尋址,處理器核125則使用PC的偏移量獲取需要執(zhí)行的指令。而且,BNX152和BNY 156被送到軌道表126使得軌道表126能將下一個BN送到總線150上。如圖7B所示,為了描述軌道表126和循跡器170之間的相互關(guān)系,假設(shè)軌道表126包含了軌道(即行)410、411和412。每條軌道可以包含從O號到15號的16個表項(xiàng)或軌跡點(diǎn)。此外,軌跡點(diǎn)413 (軌道410中的第8項(xiàng))可以是一個分支目標(biāo)為軌跡點(diǎn)414 (軌道411中的第2項(xiàng))的分支點(diǎn),以及軌跡點(diǎn)415(軌道411中的第14項(xiàng))可以是另一個分支點(diǎn),其分支目標(biāo)是軌跡點(diǎn)416 (軌道412中的第5項(xiàng))。假設(shè)軌道410對應(yīng)的指令段已經(jīng)被填充在高層次存儲器124中,且處理器核125從軌道410的起始位置開始執(zhí)行指令。這就是說,處理器核125的程序計(jì)數(shù)器(PC)從軌道410中的第O項(xiàng)對應(yīng)的指令地址開始運(yùn)行。同時(shí),假設(shè)循跡器170也送出一個包含BNX和BNY的指向軌道表126中軌道410的第O項(xiàng)的讀指針151。軌道410中的其他表項(xiàng)也可以被用到??梢酝ㄟ^檢查所述表項(xiàng)中的內(nèi)容確定指令的類型信息和地址信息等。正如之前所述,當(dāng)從軌道410的第O項(xiàng)開始運(yùn)行時(shí),由于軌道410的第O項(xiàng)不是一個分支點(diǎn),循跡器170保持BNX 152不變并通過自增器136將BNY增加一,從而得到對應(yīng)軌道表126中軌道410中的下一個表項(xiàng)的下一個BN。循跡器170不斷增加BNY從而向軌道 410中的下一表項(xiàng)移動,直到到達(dá)一個分支點(diǎn),如軌跡點(diǎn)413(軌道410中的第8項(xiàng))。在這個過程中,由于BNX沒有變化,因此指令段地址沒有變化,處理器核125可以利用PC的偏移量從高層次存儲器124中不斷獲取指令。當(dāng)循跡器170到達(dá)軌跡點(diǎn)413 (軌道410中的第8項(xiàng))后,由于軌跡點(diǎn)413是一個分支點(diǎn),因此對源地址和目標(biāo)地址都進(jìn)行分析。如果包含所述分支點(diǎn)源地址的后一條指令的指令段和/或包含所述目標(biāo)地址的指令段還沒有被填充到高層次存儲器124中,那么將所述可能被處理器核125執(zhí)行的指令段填充到高層次存儲器124中。在某些情況下,由于是在建立軌道表行時(shí)才建立主動表121中的表項(xiàng),因此在循跡器170到達(dá)軌跡點(diǎn)413時(shí),包含所述源地址下一條指令的指令段和包含目標(biāo)地址的指令段可能已經(jīng)被填充到高層次存儲器124中。這樣,由于下一指令是軌道410中第9項(xiàng),且軌道410對應(yīng)的指令段已經(jīng)被填充到高層次存儲器124中,因此不需要對軌跡點(diǎn)413的下一條指令進(jìn)行填充。此外,由于軌跡點(diǎn)414已經(jīng)在軌道表126和主動表121中被建立起來,軌道411對應(yīng)的包含分支目標(biāo)(軌道411的第2項(xiàng))的指令段已經(jīng)被填充到高層次存儲器124 中。由于處理器核125執(zhí)行指令的速度比循跡器170沿對應(yīng)所述指令在內(nèi)的軌跡點(diǎn)移動的速度慢,循跡器170可以在分支點(diǎn)等待處理器核125或與處理器核125同步。此外,軌道表126可以將分支目標(biāo)作為總線150上的下一個BN(軌道411的第2項(xiàng)),即BNX為411及BNY為2,信號381可以在處理器核125執(zhí)行軌跡點(diǎn)413的分支指令時(shí)提供一個分支是否發(fā)生的標(biāo)識。如本實(shí)施例所示,當(dāng)分支發(fā)生時(shí),循跡器170將軌道表通過總線150送來得到下一個BN作為BN 151,即BNX指向軌道411及BNY指向軌道411的第2項(xiàng)。BNX也被用于在高層次存儲器124中對相應(yīng)指令段進(jìn)行尋址,這樣處理器核125可以從軌道411的第2項(xiàng)對應(yīng)的指令開始執(zhí)行。然而,如果分支沒有發(fā)生,將所述分支點(diǎn)簡單視為非分支點(diǎn),循跡器170向前移動。類似地,從軌道411的第2項(xiàng)開始,循跡器170找到下一個分支目標(biāo)為軌跡點(diǎn)416(軌道412的第5項(xiàng))的分支軌跡點(diǎn)415(軌道411的第14項(xiàng))。如之前所述,用類似的方法對軌跡點(diǎn)413進(jìn)行操作。如果針對分支軌跡點(diǎn)415 (軌道411的第14項(xiàng))的分支發(fā)生,處理器核125從軌跡點(diǎn)416開始執(zhí)行。另一方面,如果針對分支軌跡點(diǎn)415的分支不發(fā)生,循跡器170移動到軌道411的第15項(xiàng),即軌道411的最后一項(xiàng)。當(dāng)所述表項(xiàng)不是一個分支點(diǎn),但是所在軌道的最后一條指令時(shí),從位于下一軌道中的下一指令對應(yīng)的軌跡點(diǎn)開始運(yùn)行,循跡器170保持BNX 152不變并不斷對BNY 156增一(I),從而產(chǎn)生新的BNY直到一個新的BNY指向所述新軌道中的第一個分支點(diǎn)。這樣,可以在處理器核125實(shí)際執(zhí)行指令前建立軌道表126,使得指令可以被填充到高層次存儲器124中,從而避免或減少因緩存缺失造成的時(shí)延。其他的機(jī)制,如增加軌道表運(yùn)行速度、增大BNY的粒度、通過用軌道表中一個表項(xiàng)代表多條指令等方式減少軌道表中表項(xiàng)的數(shù)目等方法,可以單獨(dú)或組合應(yīng)用在上述實(shí)施例中。還可以在軌道表126中采用多層分支的方法進(jìn)一步改善緩存缺失率。舉例而言,當(dāng)從軌道表126中的一個表行讀取表項(xiàng)時(shí),發(fā)現(xiàn)一個分支軌跡點(diǎn)并將包含所述分支軌跡點(diǎn) 對應(yīng)的分支目標(biāo)指令的指令段填充到高層次存儲器124中。同時(shí)在軌道表126中建立一條新軌道(一級)。此外,所述新軌道也被檢測,找到新軌道中的第一個分支軌跡點(diǎn)并將包含新軌道中所述分支軌跡點(diǎn)對應(yīng)的分支目標(biāo)指令的指令段填充到高層次存儲器124中。由此,在軌跡表126中建立另一條新軌道(二級)。這樣,兩級分支點(diǎn)被用于填充高層次存儲器124,且對于處理器核125而言,所述填充操作被更進(jìn)一步地隱藏了。也可以對一級軌道的所有可能的執(zhí)行結(jié)果建立二級軌道。這樣,所述兩級軌道不單根據(jù)當(dāng)前分支點(diǎn)對應(yīng)的分支目標(biāo)指令新軌道中的第一個分支點(diǎn)建立,也根據(jù)當(dāng)前分支點(diǎn)之后的下一條指令對應(yīng)的新軌道的第一個分支點(diǎn)建立。此外,可以根據(jù)與當(dāng)前程序計(jì)數(shù)器(PC)之間的距離,建立一層或多層的可變層數(shù)的軌道。所述距離可以用領(lǐng)先與當(dāng)前處理器核125執(zhí)行的指令的指令數(shù)目表示。也就是說,無論為了保證已填充的指令按一個預(yù)先設(shè)定的值領(lǐng)先于正在執(zhí)行的指令而建立了多少層軌道,所述軌道都可以被建立起來以填充至少包含由所述距離決定的數(shù)目對應(yīng)的全部指令的指令段。所述距離也可以用從當(dāng)前分支點(diǎn)起的一個距離表示。也就是說,無論為了保證已填充的指令按一個預(yù)先設(shè)定的值領(lǐng)先于正在執(zhí)行的指令并掩蓋填充延遲而建立了多少層軌道,所述軌道都可以被建立起來以填充至少包含從分支點(diǎn)起對應(yīng)所述距離的指令的指令段。另外也可以使用其他參數(shù)。此外,在某些例子中,復(fù)數(shù)個存儲塊(如指令段和數(shù)據(jù)段)可以同時(shí)被填充到高層次存儲器124中。當(dāng)填充所述復(fù)數(shù)個指令段或數(shù)據(jù)段時(shí),每個段可以被分割為多個小片段,且可以對每個小片段設(shè)定一個優(yōu)先級。這樣,不需要一次性地填充整個單獨(dú)的段。可以基于處理器核125對每個小片段的需求設(shè)置優(yōu)先級,并根據(jù)每一個小片段的優(yōu)先級采用交替機(jī)制對不同段的小片段進(jìn)行填充。舉例而言,如果一個指令段為256個字(1024個字節(jié))長,該指令段可以被分割為四個小片段,每個小片段包含64個字(256個字節(jié))。這樣,對于一個從地址OxlFCOOOOO開始的指令段,四個小片段分別從0xlFC00000、0xlFC00100、0xlFC00200和0xlFC00300開始。如果處理器核125需要的指令位于第二個小片段OxlFCOOlOO,那么這個小片段OxlFCOOlOO的優(yōu)先級就可以被設(shè)置為高。這樣,填充所述指令段時(shí)的填充順序就可以是OxlFCOOlOO、0xlFC00200,0xlFC00300和OxlFCOOOOO。此外,如果在填充所述從OxlFCOOOOO開始的指令段時(shí),還需要填充另一個或第二個從0x90000000開始的指令段,那么所述第二個指令段也可以被分割為四個小片段,分別從0x90000000、0x90000100、0x90000200和0x90000300開始。如果處理器核125需要的指令在第四個小片段(0x90000300)中,那么所述第四個小片段可以被設(shè)置一個高的優(yōu)先級,且整個填充順序可以以一種交替的方式依次為0xlFC00100、0x90000300、0xlFC00200、0x90000000、0xlFC00300、0x90000100、0xlFC00000和0x90000200。此外,可以采用更多的段和小片段對高層次存儲器124進(jìn)行填充,而且還可以使用其他配置方式。雖然上述實(shí)施例描述的是指令段填充,但數(shù)據(jù)段填充也可以使用類似的方法。此外,指令段和數(shù)據(jù)段也可以一起被分段交替填充。圖IOA是本發(fā)明所述緩存系統(tǒng)的另一個實(shí)施例9000。緩存系統(tǒng)9000與圖7A中的緩存系統(tǒng)8000類似。然而,如圖IOA所示,緩存系統(tǒng)9000包含一個交換器133,且緩存系統(tǒng)9000中的分配器1200除包含一個主動表121外,還包含一個保留表120。保留表與主動表類似,并與主動表一同存儲程序中所有分支指令的軌道信息,從而降低主動表121和一級緩存的容量大小。更特殊地,當(dāng)一條對應(yīng)一個分支點(diǎn)的軌道已經(jīng)
被建立時(shí),所述分支點(diǎn)的分支目標(biāo)可以被存儲到保留表中??梢栽趫?zhí)行流接近于所述分支點(diǎn)時(shí),才根據(jù)存儲在保留表中的信息建立所述分支目標(biāo)軌道。在某些例子中,主動表存儲已建立的軌道(如對應(yīng)已經(jīng)被填充到高層次存儲器124中的指令段),而保留表存儲將建立的軌道(如對應(yīng)尚未被填充到高層次存儲器124中的指令段)。這樣,當(dāng)建立一條軌道時(shí),一個軌跡點(diǎn)可以對應(yīng)到主動表中的一個表項(xiàng)(如一個BN)或保留表中的一個表項(xiàng)(一個TBN)。這里使用的“TBN”,指的是“臨時(shí)塊號”或“臨時(shí)BN”,并代表了位于與BN所處的號碼空間不同的號碼空間中的一個號碼,因此保留表使用的號碼空間與主動表使用的號碼空間是相對的。這樣,就可以區(qū)分一個TBN和一個BN。舉例而言,可以用號碼的最高位區(qū)分一個TBN和一個BN。當(dāng)軌跡點(diǎn)(如一個分支點(diǎn))包含的內(nèi)容是BN時(shí),包含所述分支目標(biāo)指令的指令段已經(jīng)被填充到高層次存儲器124中。另一方面,當(dāng)軌跡點(diǎn)包含的內(nèi)容是TBN時(shí),包含所述分支目標(biāo)指令的指令段尚未被填充到高層次存儲器124中。這樣,當(dāng)一條軌道包含多個分支點(diǎn)時(shí),由于一些分支點(diǎn)可能永遠(yuǎn)不會被訪問到,因此使用TBN代替BN可以減少存儲器的填充量并節(jié)省一級緩存空間。這樣,一個保留表可以被用于提高系統(tǒng)性能并降低存儲容量要求。圖12是使用軌道表126、保留表120和主動表121建立新軌道的實(shí)施例。如圖12所示,已建立的軌道66 (BNXO)可以包含三個分支點(diǎn)67、68和69。為了便于描述,BNX號碼被用于標(biāo)記軌道表126中的軌道或行。當(dāng)審查分支點(diǎn)67時(shí),分支點(diǎn)67的目標(biāo)指令的地址被存儲到保留表120的表項(xiàng)73 (標(biāo)記為ΤΒΝΧ0)中,且表項(xiàng)73的號碼(即ΤΒΝΧ0)被作為第一地址存儲在分支點(diǎn)67中。當(dāng)審查到分支點(diǎn)68和分支點(diǎn)69時(shí),分支點(diǎn)68和分支點(diǎn)69的目標(biāo)指令的地址也被存儲到保留表120中(被標(biāo)記為TBNXl和TBNX2)。類似地,這兩個表項(xiàng)的號碼作為第一地址被分別存儲到分支點(diǎn)68和69中。此外,當(dāng)處理器核125即將執(zhí)行分支指令67時(shí),保留表120的表項(xiàng)73中的目標(biāo)地址被轉(zhuǎn)移到主動表121的表項(xiàng)74中。在某些實(shí)施例中,主動表121的表項(xiàng)總數(shù)等于軌道表126的總行數(shù),使得主動表121的表項(xiàng)與軌道表126的行能有建立一個一一對應(yīng)的關(guān)系。這樣,基于對應(yīng)關(guān)系75,可以根據(jù)主動表121中的對應(yīng)表項(xiàng)(BNXl)在軌道表126中建立一條包含分支點(diǎn)67的分支目標(biāo)新軌道70。分支點(diǎn)67中的TBNXO號碼也被替換為BNXl,使得下次這條指令將被執(zhí)行時(shí),所述BNXl可以在不用到保留表的情況下直接索引到目標(biāo)軌道以及相應(yīng)的存儲塊。因此,只有當(dāng)分支指令即將被執(zhí)行時(shí)才建立對應(yīng)的新軌道。這樣,在分支點(diǎn)67被執(zhí)行前,分支點(diǎn)68和69的目標(biāo)地址被存儲到保留表120中,并不建立分支點(diǎn)68和69對應(yīng)的新軌道?;氐綀D10A,當(dāng)處理器核(125)開啟時(shí),重置信號(圖中未顯不)把主動表121中各表項(xiàng)的有效位置‘O’。當(dāng)處理器核重置信號釋放時(shí),重置向量(重置起點(diǎn)的指令地址值)被放上總線141。因?yàn)樵诒A舯?20與主動表121中都未尋到匹配,保留表120就把所述地址值放到總線144上送到填充引擎132用于從低級存儲器122經(jīng)總線154獲取指令段(如
重置向量)。指針129通過總線153指向主動表121中當(dāng)前表項(xiàng),且指針129同時(shí)指向高層次存儲器124中的一條指令或存儲獲取來的指令段的存儲塊。 生成器130提取出所述指令段中指令相關(guān)的軌道信息,并寫入軌道表126中由指針129通過地址總線153指向的對應(yīng)表項(xiàng)。當(dāng)填充操作完成時(shí),主動表121當(dāng)前表項(xiàng)的有效位被置為‘I’。之后,指針129移向主動表121的下一個有效表項(xiàng)。生成器130掃描被填充到高層次存儲器124的指令塊中每一條指令。當(dāng)生成器130發(fā)現(xiàn)分支指令,則計(jì)算出所述分支指令的目標(biāo)地址。所述目標(biāo)地址可以表示為包含所述分支指令的指令段的起點(diǎn)地址(源指令段地址)加上所述轉(zhuǎn)移相距所述起點(diǎn)的位移,再加上從源指令到目標(biāo)指令的分支距離(通常就是分支偏移量)。計(jì)算得到的目標(biāo)地址的高位被用于與保留表120和主動表121中的內(nèi)容匹配。若在保留表120和主動表121均匹配不成功,則將所述高位地址寫入保留表120中由指針127所指示的表項(xiàng),同時(shí)把指針127的值和目標(biāo)地址的低位(目標(biāo)偏移地址)(兩者一同組成TBN)放入軌道表126中由總線153 (分支源行地址)及由總線143 (分支源偏移地址)指示的一個表項(xiàng)中??偩€143可以提供一個對應(yīng)所述分支指令在其所屬指令段中偏移量的列地址。若在保留表120中有匹配,則指向匹配項(xiàng)的指針127的值放和目標(biāo)偏移量一同作為TBN被寫入軌道表126中由總線153 (行地址)及總線143 (偏移量)確定的表項(xiàng)。若在主動表121中有匹配,貝U匹配的主動表項(xiàng)和偏移量一同作為BN被寫入軌道表126中由總線153 (行地址)及總線143 (偏移量)指示的表項(xiàng)。以TBN形式出現(xiàn)的目標(biāo)地址對應(yīng)的指令尚未被填充到高層次存儲器124中,而以BN形式出現(xiàn)的目標(biāo)地址對應(yīng)的指令已經(jīng)被填充到高層次存儲器中。重復(fù)上述過程,直到整個指令段都被獲取并填充到高層次存儲器124中。這樣,被動表120、主動表121和軌道表126包含了指令段有關(guān)信息,且高層次存儲器124包含了整個指令段供處理器核125執(zhí)行。主動表121包含了指令段的起始(段)地址值以供之后的指令段匹配,而軌道表126包含了該指令段中所有的分支點(diǎn)及對應(yīng)的目標(biāo)TBN或BN值。當(dāng)循跡器170輸出一個BN 151用于指不軌道表126中一個表項(xiàng)時(shí),所述表項(xiàng)的內(nèi)容經(jīng)讀口 161被讀出。如果所述內(nèi)容顯示不是一個分支點(diǎn)時(shí),那么后續(xù)操作與圖7A實(shí)施例中相應(yīng)操作相同。然而,如果所述內(nèi)容顯示為一個分支點(diǎn)時(shí),那么將分支目標(biāo)地址(BN或TBN)讀出送往交換器133。因?yàn)榉种繕?biāo)地址可以對應(yīng)保留表120中的一個表項(xiàng)(即一個TBN)或?qū)?yīng)主動表121中的一個表項(xiàng)(即一個BN),因此可以用交換器133對保留表120和主動表121中的表項(xiàng)進(jìn)行交換。交換器133將TBN通過總線180發(fā)送到保留表120以啟動從低級存儲器向高層次存儲器124填充存儲塊的操作,并在交換完成后輸出一個BN。這種預(yù)填充保證了當(dāng)處理器需要執(zhí)行指令時(shí)能在高層次存儲器124中找到它們。如圖13所示,交換器133包含一個TBNX表190和一個BNX表191。TBNX表190中的表項(xiàng)對應(yīng)主動表121中的表項(xiàng),可以被用于映射從主動表121轉(zhuǎn)移到保留表120中的表項(xiàng)。TBNX表190中每個表項(xiàng)的內(nèi)容可以包括對應(yīng)的表項(xiàng)在保留表120中的表項(xiàng)號和一個標(biāo)志位G位。BNX表191中的表項(xiàng)對應(yīng)保留表120中的表項(xiàng),可以被用于映射從保留表120中轉(zhuǎn)移到主動表中121中的表項(xiàng)。BNX表191中每個表項(xiàng)的內(nèi)容可以包括對應(yīng)的表項(xiàng)在主動表 121中的表項(xiàng)號(即BN)和一個有效位。此外,從軌道表126輸出到總線150上的軌道信息可以也包含一個與TBNX表190中的G位對應(yīng)的G位192,用于表示BNX值在當(dāng)前是真實(shí)存在于主動表中的,此時(shí)可以直接將所述BNX值輸出;否則需要進(jìn)行映射。當(dāng)主動表121中的一個表項(xiàng)被轉(zhuǎn)移到保留表120中時(shí),TBNX表190中對應(yīng)表項(xiàng)被用于記錄表項(xiàng)號(BN) 172。類似地,當(dāng)保留表120中的一個表項(xiàng)被轉(zhuǎn)移到主動表121中時(shí),BNX表191中對應(yīng)表項(xiàng)被用于記錄所述表項(xiàng)的表項(xiàng)號并將有效位置為有效。當(dāng)總線150上的軌跡點(diǎn)信息中包含的是保留表120的表項(xiàng)號時(shí),所述表項(xiàng)號TBNX被用作索引從BNX表191中讀出BNX值和有效位。若所述BNX值是有效的(即有效位被設(shè)為有效),則將所述BNX值輸出作為下一 BN 166中的BNX,并送到循跡器。另一方面,若該BNX值是無效的,則所述TBNX被用作索引通過總線180從保留表120中讀出內(nèi)容,并啟動從低級存儲器122向高層次存儲器124填充所述TBNX對應(yīng)的存儲塊的操作。當(dāng)總線150上的軌跡點(diǎn)信息中包含的是主動表121的表項(xiàng)號(即BN)時(shí),若總線150上的軌跡點(diǎn)信息中的G位與TBNX表190中對應(yīng)表項(xiàng)的G位相等時(shí),則將所述BNX值輸出作為下一 BN 166中的BNX。另一方面,若總線150上的軌跡點(diǎn)信息中的G位與TBNX表190中對應(yīng)表項(xiàng)的G位不等,則保留表120中的表項(xiàng)號從TBNX表190中讀出并被用作索引從BNX表191中對應(yīng)行讀出BNX值和有效位。若該BNX值是有效的,則將所述BNX值輸出作為下一 BN 166中的BNX。另一方面,若該BNX值是無效的,則將保留表120中的所述表項(xiàng)號作為索引通過總線180從保留表120中讀出內(nèi)容。這樣,只要TBNX表190和BNX表191中有有效的表項(xiàng),一個替換模塊193就保持對軌道表126的掃描,并從總線159上讀入軌跡點(diǎn)信息。若一個軌跡點(diǎn)的軌跡點(diǎn)信息包含主動表121的一個表項(xiàng)號,且該表項(xiàng)號對應(yīng)TBNX表190中的一個有效表項(xiàng),則通過總線158輸出保留表120的表項(xiàng)號,并將該軌跡點(diǎn)信息改為保留表120中的所述表項(xiàng)號。類似地,若一個軌跡點(diǎn)的軌跡點(diǎn)信息包含保留表120的一個表項(xiàng)號,且該表項(xiàng)號對應(yīng)BNX表191中的一個有效表項(xiàng),則通過總線158輸出主動表121的表項(xiàng)號,并將該軌跡點(diǎn)信息改為主動表121中的所述表項(xiàng)號。通過掃描整個軌道表,可以實(shí)現(xiàn)TBNX表190中表項(xiàng)與BNX表191中表項(xiàng)之間的交換。這樣的交換可以在各種時(shí)刻進(jìn)行。例如,如果主動表容量已滿,即表示高層次存儲器124容量已滿。高層次存儲器124中的某些存儲塊可以被替換,主動表中也是如此。主動表中被替換的表項(xiàng)可以被移動到保留表中,而軌道表中的BNX指引就需要被交換成新的TBNX指引。在交換過程完成后,TBNX表190和BNX表191中之前的表項(xiàng)可以被設(shè)為無效?;氐綀D10A,當(dāng)分支點(diǎn)內(nèi)容被送到交換器133,且交換器133完成對軌道表讀口 161的相應(yīng)操作時(shí),即意味著高層次存儲器124中已有包含分支目標(biāo)指令的指令段,那么結(jié)果BN就被直接輸出到循跡器170。后續(xù)操作與圖7A中的類似。圖IOB給出了緩存系統(tǒng)9000的一部分,顯示了使用被動表120和主動表121操作軌道表126、高層次存儲器124和處理器核125的實(shí)施例。如圖IOB所示,與圖7B類似,循跡器170包括自增器136、多路選擇器137、和寄存器138。為便于描述省略了其他部件。在操作過程中,循跡器170輸出一個地址(即BN151)用于對軌道表126和高層次存儲器124進(jìn)行尋址。BN 151包含BNX 152和BNY 156。BNX 152可以被用于對軌道表126中的一個行或一條軌道進(jìn)行尋址,并對高層次存儲器124中的一個存儲塊進(jìn)行尋址,此時(shí)BNY156可以被用于對軌道表126中由BNX 152指向的軌道或行中的一個表項(xiàng)進(jìn)行尋址。 此外,多路選擇器137受來自處理器核125的信號381控制以選擇來源于交換器133的下一 BN 166或來源于自增器136的BN作為輸出418。從多路選擇器137來的輸出418(即下一 BN)可以在處理器核125來的信號417的控制下被存儲到寄存器138中。當(dāng)寄存器138受信號417控制保持當(dāng)前BN 151不變時(shí),寄存器138不會更新輸出418。另一方面,當(dāng)寄存器138受信號417控制更新當(dāng)前BN 151時(shí),所述輸出418被送到總線151上成為當(dāng)前BN 151,從而更新BNX 152和BNY 156。為了描述軌道表126與循跡器170間的相互關(guān)系,與圖7B類似,假設(shè)軌道表126包含了軌道(即行)410、411和412。每條軌道可以包含從O號到15號的16個表項(xiàng)或軌跡點(diǎn)。此外,軌跡點(diǎn)413(軌道410中的第8項(xiàng))可以是一個分支目標(biāo)為軌跡點(diǎn)414(軌道411中的第2項(xiàng))的分支點(diǎn),以及軌跡點(diǎn)415(軌道411中的第14項(xiàng))可以是另一個分支點(diǎn),其分支目標(biāo)是軌跡點(diǎn)416 (軌道412中的第5項(xiàng))。假設(shè)軌道410對應(yīng)的指令段已經(jīng)被填充在高層次存儲器124中,且處理器核125從軌道410的起始位置開始執(zhí)行指令。這就是說,處理器核125的程序計(jì)數(shù)器(PC)從軌道410中的第O項(xiàng)對應(yīng)的指令地址開始運(yùn)行。同時(shí),假設(shè)循跡器170也送出一個包含BNX和BNY的指向軌道表126中軌道410的第O項(xiàng)的讀指針151。軌道410中的其他表項(xiàng)也可以被用到。可以通過檢查所述表項(xiàng)中的內(nèi)容確定指令的類型信息和地址信息等。正如之前所述,當(dāng)從軌道410的第O項(xiàng)開始運(yùn)行時(shí),由于軌道410的第O項(xiàng)不是一個分支點(diǎn),循跡器170保持BNX 152不變并通過自增器136將BNY增加一,從而得到對應(yīng)軌道表126中軌道410中的下一個表項(xiàng)的下一個BN。循跡器170不斷增加BNY從而向軌道410中的下一表項(xiàng)移動,直到到達(dá)一個分支點(diǎn),如軌跡點(diǎn)413 (軌道410中的第8項(xiàng))。在這個過程中,由于BNX沒有變化,因此指令段地址沒有變化。處理器核125可以利用PC的偏移量從高層次存儲器124中不斷獲取指令。當(dāng)循跡器170提供的指針151到達(dá)軌跡點(diǎn)413 (軌道410中的第8項(xiàng))后,由于軌跡點(diǎn)413是一個分支點(diǎn),因此對源地址(即指針151的值)和表項(xiàng)內(nèi)容即目標(biāo)地址都進(jìn)行分析。交換器133可以按BN形式或TBN形式對目標(biāo)地址進(jìn)行檢查。如果目標(biāo)地址是一個BN,那么所述目標(biāo)地址對應(yīng)的指令段已經(jīng)被填充到高層次存儲器124中并準(zhǔn)備被處理器核125讀取。另一方面,如果目標(biāo)地址是一個TBN,那么所述目標(biāo)地址對應(yīng)的指令段尚未被填充到高層次存儲器124中。這樣,如果TBN對應(yīng)的指令段不在高層次存儲器124中,那么所述指令段被填充到高層次存儲器124中。而且如之前所述,交換器133將TBNX轉(zhuǎn)換為BNX并將BNY的值設(shè)為TBNY的值。這樣,交換器133就能提供一個BN,所述BN被送出作為下一BN 166。無論表項(xiàng)內(nèi)容是BN還是TBN,交換器133都能提供一個BN作為下一 BN 166。此外,如果包含源地址下一指令的指令段尚未被填充到高層次存儲器124中,那么該指令段也被填充到高層次存儲器124中以供處理器核125可能的執(zhí)行。然而,對于軌跡點(diǎn)413,由于下一指令是軌道410的第9表項(xiàng)且對應(yīng)軌道410的指令段已經(jīng)被填充到高層次存儲器124中,因此軌跡點(diǎn)413的下一指令不需要填充。這樣,只有當(dāng)包含分支目標(biāo)(軌道411的第2表項(xiàng))的軌道411對應(yīng)的指令段尚未填充時(shí),才被填充到高層次存儲器124中。由于循跡器170沿所述指令軌跡點(diǎn)移動的速度比處理器核125執(zhí)行指令的速度, 處理器核125可能執(zhí)行的兩個指令段都能在處理器核125執(zhí)行這兩個指令段中任何指令之前被填充到高層次存儲器124中。這樣就不會發(fā)生緩存缺失。BNY 156可以被視為領(lǐng)先指針的一部分(BNX在同一軌道中不變)以在處理器核125執(zhí)行指令之前將處理器核125可能執(zhí)行的指令填充到高層次存儲器124中。這樣,由于保留表120中的TBNX不會自動填充高層次存儲器124,因此可以在短時(shí)間內(nèi)生成大量軌道或軌道表126中的表項(xiàng)。可以在執(zhí)行流接近所述指令(如分支目標(biāo)指令)時(shí)才將所述指令填充到高層次存儲器124中。此外,當(dāng)?shù)竭_(dá)軌跡點(diǎn)413且相關(guān)指令段已經(jīng)被填充到高層次存儲器124中時(shí),軌道表126或交換器133可以提供分支目標(biāo)BNX為411及BNY為2作為下一 BN 166 (軌道411的第2表項(xiàng)),且循跡器170可以等待軌跡點(diǎn)413的分支指令被處理器核125執(zhí)行時(shí)送來的表示分支轉(zhuǎn)移是否發(fā)生的信號381。若如本實(shí)施例中發(fā)生分支轉(zhuǎn)移,則軌道表126或交換器133將下一 BN 166作為BN 151供循跡器170使用,其中BNX指向軌道411且BNY指向軌道411的第2個表項(xiàng)。同時(shí)BNX也被用做一個對應(yīng)高層次存儲器124中指令段的地址,這樣處理器核125可以從軌道411的第2個表項(xiàng)開始執(zhí)行指令。然而,如果分支轉(zhuǎn)移沒有發(fā)生,循跡器170或領(lǐng)先指針如同將分支點(diǎn)簡單視為一個非分支點(diǎn)向前移動。類似地,從軌道411的第2個表項(xiàng)開始,循跡器170找到下一個分支目標(biāo)為軌跡點(diǎn)416 (軌道412的第5個表項(xiàng))的分支軌跡點(diǎn)415 (軌道411的第14個表項(xiàng))。接著,如果對應(yīng)軌道412的指令段尚未被填充到高層次存儲器124,則將該指令段填充到高層次存儲器124中,且如上所述,領(lǐng)先指針等待軌跡點(diǎn)415分支指令執(zhí)行。此外,上述討論基于的是一層的軌道操作。也就是說,領(lǐng)先指針聽在第一個分支點(diǎn),即對應(yīng)第一個分支點(diǎn)的兩個可能分支結(jié)果進(jìn)行相應(yīng)的填充操作。軌道表126也可以支持兩層的軌道操作或多層的軌道操作。例如,在一個兩層的軌道操作中,領(lǐng)先指針可以停在所述第一個分支點(diǎn)之后的第一個分支點(diǎn)。這樣,所述兩個分支點(diǎn)的四個可能結(jié)果對應(yīng)的指令都被填充到高層次存儲器124中。類似地,可以用多層的軌道操作填充更多的指令。可以理解的是,雖然保留表120、主動表121和交換器133被用來實(shí)現(xiàn)更為靈活和高效的填充高層次存儲器124的操作,但是正如之前所述,也可以用一個表或其他結(jié)構(gòu)實(shí)現(xiàn)。此外,回到圖10A,在操作中,更多的軌道可以被添加到軌道表126中,且對應(yīng)的指令被填充到高層次存儲器124中。然而,軌道表126和/或高層次存儲器124的容量是有限的。需要一個替換機(jī)制對軌道表126中的軌道和/或高層次存儲器124中的指令段進(jìn)行替換。例如,可以使用一個基于主動表121、保留表120和軌道表126的替換機(jī)制。具體地,可以確定主動表121中可被替換的表項(xiàng)。假設(shè)軌道表126通過總線180送來的內(nèi)容TBNX值‘118’被用于填充一個指令段到高層次存儲器124中,所述TBNX值‘118’對應(yīng)的指令段地址OxlFCO存儲在保留表120中,且主動表121中總線153指向的表項(xiàng)存有一個BNX值‘006’,其對應(yīng)的指令段地址為0x4000。這樣,讀出保留表120中的地址OxlFCO送到總線144用于替換主動表121中的地址0x4000,且地址OxlFCO被送到填充引擎132用于將從地址OxlFCO開始指令段填充到高
層次存儲器124中以替換從地址0x4000開始的指令段。此外,對應(yīng)地址0x4000的含有BNX值‘006’的表項(xiàng)被移動到保留表120中由指針127指向的表項(xiàng)中。也可以使用一種替換策略確定應(yīng)該替換軌道表126中哪個表項(xiàng)或存儲單元。例如可以采用最近最少使用策略或最少頻繁使用策略。當(dāng)采用最近最少使用策略時(shí),每個軌道或軌跡點(diǎn)包含一個使用位(U位);當(dāng)采用最少頻繁使用策略時(shí),每個軌道或軌跡點(diǎn)包含一個記錄使用次數(shù)的計(jì)數(shù)器。在某些情況下,可以使用超過一層的緩存結(jié)構(gòu)。分配器1200或主動表121可以被用于支持超過一層的緩存結(jié)構(gòu)。圖IlA顯示了用于多層緩存結(jié)構(gòu)的分配器或保留表的一個實(shí)施例。本實(shí)施例以三層存儲層次為例,分別為三級,二級與一級。為了便于說明,假設(shè)這三層存儲器都被用做指令存儲器(數(shù)據(jù)存儲器也類似)。二級存儲器的容量是一級存儲器容量的兩倍(即,一個二級存儲器塊可以包含兩個一級存儲器塊),三級存儲器容量是二級存儲器容量的兩倍(即,一個三級存儲器塊可以包含兩個二級存儲器塊或四個一級存儲器塊)。一級存儲器作為高層次存儲器直接連接至處理器核125。對于更多存儲層次的情況,也可用應(yīng)用本發(fā)明所述方法。此外,為便于描述,三級存儲器包含了二級存儲器和一級存儲器中的所有內(nèi)容,但二級存儲器不一定包含一級存儲器中的內(nèi)容。雖然沒有在圖中顯示,可以使用一個軌道表建立在這三層存儲器中的指令的軌道,且每個軌跡點(diǎn)(如分支點(diǎn))可以用圖IlA中所示的兩種格式之一表示。一種格式包括兩個部分,從高位到低位分別是一級存儲器索引地址的塊地址部分,和軌道內(nèi)或存儲塊內(nèi)的偏移量部分。另一種格式包括三個部分,分別是三級存儲器索引地址的塊地址部分、索引和偏移量部分。如圖IlA所示,分配器1200或保留表120可以包含一個內(nèi)容尋址存儲器(CAM) 87和一個隨機(jī)訪問存儲器(RAM) 98。CAM 87包含一列表項(xiàng),CAM中的每一個表項(xiàng)對應(yīng)一個三級存儲塊號碼BNX3。這樣,每個表項(xiàng)可以包含一個對應(yīng)特定的BNX3的三級存儲器存儲塊的地址。此外,RAM 98可以包含6列,其中兩列88用于存儲對應(yīng)特定三級存儲塊的兩個二級存儲塊號BNX2及有效位,其他四列89用于對應(yīng)所述三級存儲塊的四個一級軌道號BNXl及有效位。多路選擇器93可以根據(jù)索引位97選擇一個對應(yīng)所述三級存儲塊的特定的一級存儲塊號碼或軌道號。類似地,多路選擇器92可以根據(jù)索引位97,更準(zhǔn)確地說是索引位97中的高位LSBl 90選擇一個對應(yīng)所述三級存儲塊的特定的二級存儲塊號碼或軌道號。此表可以由兩種方式訪問。一種是利用存儲地址(如三級存儲塊地址)搜索CAM87。如果有地址匹配,那么選擇CAM中的匹配表項(xiàng),并將對應(yīng)的RAM 98中的內(nèi)容讀出。另一種是用三級存儲塊號TBN的第一地址BNX3 94在CAM 87和RAM 98中直接尋址,讀出CAM87和/或RAM 98中被選中的行的內(nèi)容。如之前例子所述,在將指令段從主存儲器或任何外部存儲器填充到這所有三級的存儲器中時(shí),掃描、檢測所述被填充的指令。當(dāng)檢測到分支指令時(shí),所述分支指令的分支目標(biāo)地址被用來與CAM 87中存的三級存儲器塊地址作比較。如果沒有找到匹配,這意味著在三級存儲器中還未包含所述分支目標(biāo)地址對應(yīng)的指令段。這時(shí)根據(jù)某種準(zhǔn)則,如替換策略,選定三級存儲器中一個三級存儲塊,把分支目標(biāo) 所在的指令段填充到該存儲塊。同時(shí),將所述選定的三級存儲器中存儲塊地址信息作為軌跡點(diǎn)內(nèi)容填入在一級軌道表中所述分支點(diǎn)的對應(yīng)表項(xiàng)。所述選定的三級存儲塊的塊號被用做第一地址BNX3 94,存儲地址中的索引部分被用做索引號97,且存儲地址中的偏移量部分被用做偏移量(BNY)96。此外,索引號97可以包含2位,其中的高位LSBl 90被用于區(qū)分二級存儲器中的兩個存儲塊,高位LSBl和低位LSBO 97 一起被用于區(qū)分一級存儲器中的四個存儲塊。另一方面,如果找到匹配,則表明至少在三級存儲器中存儲有所需的指令塊。這時(shí)將匹配到的BNX3和索引號、偏移量一同作為軌跡點(diǎn)內(nèi)容填入軌道表項(xiàng)。在運(yùn)行過程中,當(dāng)領(lǐng)先指針到達(dá)上述軌道表項(xiàng)時(shí),所述軌道表項(xiàng)或軌跡點(diǎn)顯示的分支目標(biāo)地址是三級存儲器的TBN??梢允褂迷揟BN中的第一地址94到CAM 87和/或RAM98尋址。具體地,可以使用一級軌道的第一地址94(BNX3)對RAM 98尋址并讀出對應(yīng)的兩個二級軌道號和有效位以及四個一級軌道號和有效位。多路選擇器93根據(jù)索引位97 (即LSBULSB0)和有效位V從四個一級塊號中選出一個有效的一級軌道號。此外,多路選擇器92根據(jù)索引高位90(即LSB1)和有效位V從兩個二級塊號中選出一個有效的二級軌道號。如果選出了一個有效的一級軌道號,說明所述目標(biāo)地址對應(yīng)的指令段已經(jīng)被填充到一級存儲器中,直接將所述有效的一級軌道號送到總線99以替換所述分支指令的第一地址。同時(shí),拋棄相應(yīng)的索引,塊內(nèi)偏移(BNY)不變。這樣TBN就成為了 BN。此外,由于一個三級存儲塊含有四個一級存儲塊,僅憑BNX394并不能確定一個一級存儲塊號。BNX3與索引97—起確定特定的一級存儲塊號。在四個一級存儲塊中,可以包含對應(yīng)三級存儲塊的零個、一個、兩個、三個或四個一級存儲塊。類似地,在兩個二級存儲塊中,可以包含對應(yīng)三級存儲塊中的零個、一個、或兩個一級存儲塊。另一方面,如果沒有有效的一級軌道號被選出,說明所述目標(biāo)地址對應(yīng)的指令段尚未被填充到一級存儲器中。如果一個有效的二級塊號被選出,那么意味著目標(biāo)地址對應(yīng)的指令段已經(jīng)被填充到二級存儲器中,則可以將有效的二級塊號送到總線91。這時(shí)可以從二級存儲器中將與這個二級存儲塊號對應(yīng)的指令段填充到一級存儲器中,同時(shí)更新RAM 98中相應(yīng)的一級存儲塊的塊號和有效位以對應(yīng)所述填入的指令段。例如,可以更新RAM 98中由BNX3和所述索引指向的表項(xiàng)中的一級塊號(BNXl)及其有效位,并將所述軌道表項(xiàng)內(nèi)容格式更新為使用一級軌道的BN號碼。所述BN號碼包含一個第一地址(即BNX1)和一個第二地址(即偏移量或BNY)。如果沒有有效的二級軌道號被選出,意味著目標(biāo)地址對應(yīng)的指令段尚未被填充到二級存儲器中,那么從三級存儲器中將所述三級軌道號對應(yīng)的指令段填充到二級存儲器與一級存儲器中。RAM 98中的相應(yīng)部分也要被更新以對應(yīng)一級存儲器和二級存儲器中的所述被填入的指令段。例如,可以更新RAM 98中由BNX3和所述索引指向的表項(xiàng)中的一級塊號(BNXl)及其有效位,并將所述軌道表項(xiàng)內(nèi)容格式更新為使用一級軌道的BN號碼。如果也填充了二級存儲塊,那么還可以更新RAM 98中由BNX3和所述索引指向的表項(xiàng)中的二級塊號(BNX2)及其有效位。當(dāng)指令段被填充時(shí),所述指令段可以先從三級存儲器填充到二級存儲器,再從二級存儲器填充到一級存儲器?;蛘?,在三級存儲器與一級存儲器之間有獨(dú)立通路的情況下,可以在將所述指令段從三級存儲器填充到二級存儲器的同時(shí),將所述指令段從三級存儲器 填充到一級存儲器。此外,如果一級存儲器中的軌跡點(diǎn)只包含一級軌道信息,也可以用與之前類似的方法進(jìn)行操作。圖IlB是圖IlA所述結(jié)構(gòu)的一個運(yùn)行實(shí)施例。如圖IlB所示,一個32位處理器核被用來描述該實(shí)施例,且該處理器核的指令地址空間為32位、每條指令長度為32位。此夕卜,假設(shè)一級存儲器中的每個指令段包含16條連續(xù)的指令,二級存儲器中的每個指令段包含32條連續(xù)的指令,三級存儲器中的每個指令段包含64條連續(xù)的指令。這樣,三級存儲器中的一個指令段對應(yīng)二級存儲器中連續(xù)的兩個指令段或一級存儲器中連續(xù)的四個指令段,以及二級存儲器中的一個指令段對應(yīng)一級存儲器中連續(xù)的兩個指令段。此外,一個32位的地址(第O位到第31位)可以根據(jù)不同的目的被分割成不同的部分。例如,可以將最低的兩位(LSBs),即第O位到第I位用于對指令中的單獨(dú)一個字進(jìn)行尋址。此外,第2位到第5位可以作為指令段中的偏移量,即圖IlA中的偏移量96,用于對指令段中的16條指令進(jìn)行尋址;第6位到第7位可以作為一個索引,即圖IlA中的索引97,用于對三級存儲器中的四個指令段進(jìn)行尋址(第6位也可以被用于對二級存儲器對應(yīng)于一級存儲器的兩個指令段進(jìn)行尋址,且第7位可以被用于對三級存儲器對應(yīng)于二級存儲器的兩個指令段進(jìn)行尋址);第8位到第31位可以被用于對三級存儲器中的指令段進(jìn)行尋址,即CAM 87中的地址。CAM 87中的表項(xiàng)號‘0’ (424)包含一個有效地址0xD5A00B,表示指令段1、2、3、4這四個指令段已經(jīng)被填充到三級存儲器中。然而,RAM 98中對應(yīng)的6個表項(xiàng)都是無效的(這些表項(xiàng)的有效位都為‘0’),表示三級存儲器中的這四個指令段并沒有被填充到二級存儲器和一級存儲器中。CAM 87中的表項(xiàng)號‘2’ (425)包含一個有效地址OxFFCOOO,表示四個指令段已經(jīng)被填充到三級存儲器中。此外,RAM 98中對應(yīng)的表項(xiàng)428是有效的,表示(四個指令段中的)指令段3、4已經(jīng)被填充到二級存儲器中,且對應(yīng)的二級存儲器軌道號‘2-11’被存儲到表項(xiàng)428中。RAM 98中對應(yīng)的表項(xiàng)433也是有效的,表示指令段3已經(jīng)被填充到一級存儲器中,且對應(yīng)的一級存儲器軌道號‘1-25’被存儲到表項(xiàng)433中。CAM 87中的表項(xiàng)號‘4’ (426)包含一個有效地址0x387005,表示四個指令段已經(jīng)被填充到三級存儲器中。此外,RAM 98中對應(yīng)的表項(xiàng)430和表項(xiàng)429都是有效的,表示四個指令段已經(jīng)被填充到二級存儲器中,且對應(yīng)的二級存儲器軌道號‘2-23’和‘2-7’被分別存儲到表項(xiàng)430和表項(xiàng)429中。RAM 98中對應(yīng)的表項(xiàng)432和表項(xiàng)434也是有效的,表示指令段4和指令段I已經(jīng)被填充到一級存儲器中,且對應(yīng)的一級存儲器軌道號‘1-60’和‘1-3’分別被存儲到表項(xiàng)432和表項(xiàng)434中。CAM 87中的表項(xiàng)號‘5’ (427)包含一個有效地址0x092001,表示四個指令段已經(jīng)被填充到三級存儲器中。此外,RAM 98中對應(yīng)的表項(xiàng)431是有效的,表示(四個指令段中的)指令段1、2已經(jīng)被填充到二級存儲器中,且對應(yīng)的二級存儲器軌道號‘2-43’被存儲到表項(xiàng)431中。RAM 98中對應(yīng)的一級存儲器表項(xiàng)是無效的,表示這四個指令段都沒有被填充到一級存儲器中??梢杂靡粭l分支指令的目標(biāo)地址作為與CAM 87中內(nèi)容進(jìn)行匹配的輸入,而CAM87和RAM 98中的內(nèi)容可以是三級軌道號(TBN)。當(dāng)生成器186掃描并分析被填充的指令時(shí),分支指令的目標(biāo)地址被用于與CAM 87中的內(nèi)容進(jìn)行匹配。具體地,目標(biāo)地址的第8位 到第31位被送到CAM 87與CAM 87中的所有內(nèi)容進(jìn)行匹配。如果匹配成功,表示目標(biāo)地址對應(yīng)的指令段已經(jīng)被填充到三級存儲器中。RAM 98中對應(yīng)的一級表項(xiàng)被讀出,且目標(biāo)地址中的索引位(即第6位到第7位)被送到選擇器93以選出表項(xiàng)的軌道號及有效位。如果選出的表項(xiàng)是有效的(有效位為‘I’),被選出的一級軌道號被作為分支指令軌跡點(diǎn)內(nèi)容中的第一維地址(如實(shí)際地址)。如果該一級軌道號是無效的,那么這個指令段還沒有被填充到一級存儲器中。該三級軌道號(TBN)就被作為分支指令軌跡點(diǎn)內(nèi)容中的第一維地址。另一方面,如果匹配不成功,表示該指令段還沒有被填充到三級存儲器中。正如之前所述,可以根據(jù)特定算法,如LRU(最近最少使用)算法,生成一個新的三級軌道號(TBN),之后將這個剛生成的三級軌道號(TBN)作為分支指令軌跡點(diǎn)內(nèi)容中的第一維地址。同時(shí),根據(jù)這個三級軌道號(TBN)將指令段填充到三級存儲器中。當(dāng)循跡器指針BNY指向分支指令軌跡點(diǎn),且該軌跡點(diǎn)內(nèi)容包含一個三級軌道號(TBN)時(shí),這個三級軌道號(TBN)被用于對RAM 98進(jìn)行檢索。例如,如果該三級軌道號(TBN)是‘4’且索引是‘I’,那么選擇器92的輸出91是表項(xiàng)430中的有效二級軌道號‘2-23’,而選擇器93的輸出99是表項(xiàng)435中的無效值。這就是說,已經(jīng)填充到二級存儲器中的指令段還沒有被填充到一級存儲器中。這樣,可以采用特定算法,如LRU算法,生成一個新的一級軌道號,并根據(jù)該新生成的軌道號BN將二級存儲器中由二級軌道號‘2-23’標(biāo)識的指令段填充到一級存儲器中,而這個一級軌道號BN也被存儲到表項(xiàng)435中。在填充指令段的同時(shí),該指令段也被掃描并分析,從而在軌道表中建立一個對應(yīng)的軌道。再例如,如果三級軌道號(TBN)是‘4’且索引是‘0’,那么選擇器93的輸出99是表項(xiàng)434中的有效軌道號‘1-3’。這就是說,指令段已經(jīng)被填充到一級存儲器中,且選擇器92的輸出91可以被忽略。再例如,如果三級軌道號(TBN)是‘0’且索引是‘2’,那么選擇器93的輸出99是表項(xiàng)437中的無效值。那么生成一個新的二級軌道號和一個新的一級軌道號,并將三級存儲器中由三級軌道號(TBN) ‘0’標(biāo)識的指令段根據(jù)新生成的一級軌道號和二級軌道號填充到一級存儲器和二級存儲器中。此外,該一級軌道號和二級軌道號也被分別存儲到對應(yīng)的表項(xiàng)437和436中。圖14A是本發(fā)明所述緩存系統(tǒng)的另一個實(shí)施例10000。緩存系統(tǒng)10000與圖IOA中的緩存系統(tǒng)9000類似。然而,緩存系統(tǒng)10000包含了用于支持多線程程序的某些特征。軌道表126中不同的軌道可以對應(yīng)一個線程或多個線程。由于在線程內(nèi)容切換時(shí)需要保存和恢復(fù)線程狀態(tài),因此使用了復(fù)數(shù)個棧135,用于分別保存線程壓棧的信息。一個線程標(biāo)識(PID) 188存儲了當(dāng)前線程標(biāo)識或線程號。當(dāng)循跡器170使用棧135時(shí),PID 188提供一個指向所述棧的指針,從而進(jìn)行正確的棧操作。此外,可以在低級存儲器122外提供一個第二填充/生成器187。填充/生成器187中的生成器186與填充生成器123中的生成器130類似,但比生成器130有更高的帶寬。也就是說,生成器186可以一次對更多的指令進(jìn)行掃描和審查。此外,填充/生成器187對保留表120的操作也與填充生成器123對主動表121的操作類似。這樣,填充引擎 185將對應(yīng)于保留表120中地址的指令段從更低層次存儲器(圖中未顯示)填充到低級存儲器122中。這樣,對應(yīng)于保留表120中地址的指令段就存儲在低級存儲器122中,從而減少或消除了等待處理器核125取指的時(shí)間。此外,不同的軌道可以對應(yīng)同一個指令段(同一個指令段可以因具有不同的虛擬地址而被存儲在不同的一級緩存存儲塊中)。填充/生成器187也可以包含一個位于填充引擎185之外的翻譯轉(zhuǎn)換緩沖(TLB) 131,使得低級存儲器122和高層次存儲器124中的指令都處于物理地址模式,而處理器核125可以在不進(jìn)行虛擬到物理地址轉(zhuǎn)換的情況下直接從高層次存儲器124獲取指令。圖14B顯示了緩存系統(tǒng)10000中一個組成部分。如圖14B所示,主動表121中的每一個表項(xiàng)可以對應(yīng)高層次存儲器124中的一個存儲塊或指令段,并對應(yīng)軌道表126中的一條軌道。這樣,可以通過主動表121管理高層次存儲器124。另一方面,低級存儲器122也可以作為緩存使用,并可以通過保留表120管理低級存儲器122。這樣,保留表120中的每一個表項(xiàng)可以對應(yīng)低級存儲器122中的一個存儲塊或指令段。此外,為便于描述,假設(shè)高層次存儲器124和低級存儲器122是互不包含的。換句話說,任何一個存儲地址對應(yīng)的內(nèi)容或存儲塊不會同時(shí)存在于高層次存儲器124和低級存儲器122中。當(dāng)指令被填充到高層次存儲器124中時(shí),生成器掃描并審查所述指令,并可能在軌道表126中建立一條包含分支點(diǎn)的軌道。將所述分支目標(biāo)地址與主動表121中的表項(xiàng)進(jìn)行匹配。如果匹配成功,表示已經(jīng)有一個相應(yīng)的存儲塊被填充到高層次存儲器124中,那么在軌道表126中以BN格式將高層次存儲器124中匹配成功的塊號記錄為分支目標(biāo)地址。然而,如果匹配不成功,表示相應(yīng)的存儲塊還沒有被填充到高層次存儲器124中,那么在保留表120中對分支目標(biāo)地址進(jìn)行匹配以開始填充過程。可選地,分支目標(biāo)地址可能同時(shí)在保留表120和主動表121的表項(xiàng)中同時(shí)匹配成功。如果在保留表120中匹配成功,表示相應(yīng)的指令段已經(jīng)被填充到低級存儲器122中,那么在軌道表126中以TBN格式將低級存儲器122中匹配成功的塊號記錄為分支目標(biāo)地址。如果在保留表120和主動表121中都沒有匹配成功,填充引擎185將相應(yīng)指令段從外部存儲器(圖中未顯示)通過總線423填充到低級存儲器122中。虛擬到物理地址轉(zhuǎn)換器131可以對虛擬地址和物理地址進(jìn)行轉(zhuǎn)換和翻譯。這樣,被填入低級存儲器122中的存儲塊包含了相應(yīng)的指令段,并在軌道表126中以TBN格式將低級存儲器122中的被填充的存儲塊號記錄為分支目標(biāo)地址。在運(yùn)行過程中,當(dāng)領(lǐng)先指針156到達(dá)軌道表126中的一個包含TBN格式的分支目標(biāo)地址的分支軌跡點(diǎn)時(shí),如之前所述,在主動表121中產(chǎn)生一個BN,并將相應(yīng)指令段從低級存儲器122填充到高層次存儲器124中。此外,軌道表126中的TBN被替換為所述BN,并清除存儲在保留表120中的對應(yīng)所述TBN的TBNX。這樣,當(dāng)對應(yīng)保留表120中表項(xiàng)的一個指令段被填充到高層次存儲器124中時(shí),相關(guān)的TBN被替換成BN。類似地,當(dāng)對應(yīng)主動表121中表項(xiàng)的一個指令段被替換或回填到低級存儲器122時(shí),相關(guān)的BN就被替換成TBN。通過對保留表120和主動表121中表項(xiàng)的交換,可以實(shí)現(xiàn)高效率的多層次緩存運(yùn)作。雖然在不同的附圖中分別給出了不同的實(shí)施例,這些實(shí)施例可以被獨(dú)立地實(shí)現(xiàn),也可以在某種組合的情況下被實(shí)現(xiàn)。這樣,在不背離本發(fā)明原則的前提下,這些實(shí)施例中的不同部件可以被單獨(dú)使用,也可以被組合使用。為便于描述,下面給出了一些具體的例子。 例如,生成器130可以被用于提取分支源地址,從而對軌道表126的寫入做地址索弓I。一個源地址(如一個指令的地址)可以被分析得到兩種格式。在一種格式中,用一個高位地址部分、一個索引部分和一個偏移量部分在具有多層緩存層次或存儲層次的情況下代表所述地址,在另一種格式中,用一個高位或塊地址部分和一個偏移量部分代表所述地址。在某些情況中,可以用一個高位地址部分、一個索引部分和一個偏移量部分代表所述分支源地址。此外,可以直接用BNY作為所述偏移量部分,而所述高位地址和索引被送到分配器1200轉(zhuǎn)換為一個塊號。生成器130也可以被用于提取指令類型(如無條件分支、條件分支、非分支(包括裝載、存儲指令等))。此外,生成器130可以被用來通過將分支源地址加上分支偏移的方法計(jì)算分支目標(biāo)地址,其中所述分支源地址可以是包含所述分支源指令的指令段的塊地址加上所述分支源指令在指令段中的偏移量,而所述分支偏移可以是一個跳轉(zhuǎn)的量。所述分支目標(biāo)地址的高位地址和索引被送到總線141與分配器1200(如主動表121、保留表120)中CAM的內(nèi)容進(jìn)行匹配。所述偏移地址被送到總線143WYADDR作為軌道表126的Y寫地址。一個針對軌道表126的寫地址可以是一個用于在軌道表126中建立軌跡點(diǎn)表項(xiàng)的地址,包含一個對應(yīng)于XADDR的行地址(X地址)和一個對應(yīng)于YADDR的列地址(Y地址)。這樣,生成器130提供了所述分支源地址作為軌道表126的寫地址,并提供了指令類型和分支目標(biāo)地址作為軌道表126的寫入內(nèi)容。生成器130生成除寫地址中X地址之外全部地址,而X地址由分配器1200修改或分配。所述X地址可以是一個對應(yīng)特定高位地址的塊號碼(BN),該高位地址本身可能太長且不連續(xù)。例如,一個18位的高位地址對應(yīng)了256K個不同的存儲塊,但用BNX號碼將該高位地址分配到256個塊則只需要8位即可。軌道表126可以被配置成一中二維表結(jié)構(gòu),其中,由X地址或第一地址BNX對每一行索引,對應(yīng)一個存儲塊或一個存儲行,由Y地址或第二地址BNY對每一列索引,對應(yīng)相應(yīng)指令(數(shù)據(jù))在存儲塊中的偏移量。簡單來說,軌道表的寫地址對應(yīng)分支源指令地址。此外,對于一個特定的分支源地址(如高位地址、索引、偏移量),分配器1200(即主動表121)根據(jù)所述高位地址和索引分配一個BNX到總線153,而BNY就等于所述偏移量。然后,所述BNX和BNY就可以組成一個指向被寫表項(xiàng)的寫地址。此外,對于分支點(diǎn),其分支目標(biāo)地址(高位地址、偏移量)被送到主動表121對高位地址進(jìn)行匹配,且主動表121可能分配一個BNX。所述分配的BNX與從生成器130來的指令類型和偏移量(BNY) —起,組成軌道表中所述分支源指令對應(yīng)表項(xiàng)的內(nèi)容。軌道表126也可以被用來實(shí)現(xiàn)其他目的。例如,在一個系統(tǒng)中,軌道表126可以被用來實(shí)現(xiàn)對處理器核125的自動功耗管理。例如,可以指定軌道表126中的一條軌道用于存儲一個當(dāng)處理器核125處于空轉(zhuǎn)狀態(tài)時(shí)執(zhí)行的空轉(zhuǎn)任務(wù)(即一條空轉(zhuǎn)軌道)。這樣,所述系統(tǒng)可以記錄空轉(zhuǎn)軌道被使用或訪問到的百分比。系統(tǒng)可以通過將該百分比與一個預(yù)先設(shè)置的值或一組預(yù)先設(shè)置的值比較,調(diào)整處理器核125和所述系統(tǒng)的功耗。調(diào)整方法可以包括改變時(shí)鐘頻率或調(diào)整對處理器核125及所述系統(tǒng)的供電電壓。循跡器170可以被用于向軌道表126提供一個讀指針151。讀指針151也可以是BNX和BNY的形式。由讀指針指向的軌道表項(xiàng)的內(nèi)容與所述表項(xiàng)的BNX和BNY (源BNX和源BNY) —起被讀出并被交換器133檢查。如果所述表項(xiàng)內(nèi)容包含的是一個TBN,那么其中TBNX被送到分配器1200處理或轉(zhuǎn)換為一個BNX并填充一級緩存,之后所述BN (BNY等于所述TBNY的值)被交換器133送到循跡器170。循跡器170可以根據(jù)所述內(nèi)容進(jìn)行多種不同步驟。例如,如果所述表項(xiàng)不是一個分支點(diǎn),循跡器170可以用新BNX等于源BNX、新BNY 等于源BNY加一的方法更新讀指針。如果所述表項(xiàng)是一個條件分支,循跡器170獲取到目標(biāo)BNX和BNY (即第一地址和第二地址),并將目標(biāo)BNX和BNY送到分配器1200 (即主動表121)以填充高層次存儲器124或一級緩存。此外,循跡器170可以等待處理器核125送來的對應(yīng)所述分支點(diǎn)的控制信號。如果所述控制信號表明該分支沒有發(fā)生,循跡器170可以用新BNX等于源BNX、新BNY等于源BNY加一的方法更新讀指針。然而,如果所述分支成功發(fā)生,循跡器170可以用新BNX等于目標(biāo)BNX、新BNY等于目標(biāo)BNY的方法更新讀指針。如果所述表項(xiàng)是一個無條件分支(或跳轉(zhuǎn)),循跡器170可以將其視為一個條件成立的條件分支,也就是用新BNX等于目標(biāo)BNX、新BNY等于目標(biāo)BNY的方法更新讀指針。此外,如果所述表項(xiàng)是一條“調(diào)用”指令,循跡器170可以將當(dāng)前指針的BNX和BNY對壓入一個棧,讀出表項(xiàng)內(nèi)容或表示對應(yīng)指令段已經(jīng)存儲在一級緩存中的目標(biāo)BNX。此外,如果所述表項(xiàng)是一個“返回”指令(如子程序的末尾),循跡器170可以從所述棧中彈出所述BNX和BNY對,并用新BNX等于出棧BNX、新BNY等于出棧BNY的方法更新讀指針。在某些情況下,如果子程序要求返回到“調(diào)用”指令的后一條指令,則此時(shí)新BNY等于出棧BNY加一。此外,如果所述表項(xiàng)是一個異常處理指令,循跡器170可以讀出保存在異常BN寄存器(EXCP)中的塊號BNX和偏移量BNY,并用新BNX等于異常BNX、新BNY等于異常BNY的方法更新讀指針。特定處理器的異常處理程序的起始地址通常是固定的,可以將異常處理程序的起始段填充到一級緩存中并在軌道表中建立相應(yīng)的軌道(兩者都可以設(shè)置為不被替換)。分配器1200可以由一個一維的多表項(xiàng)列表構(gòu)成。每個表項(xiàng)包括一個含高位地址的CAM和一個含BN、有效位、U位及其他標(biāo)志位的RAM。分配器1200包含一個自增器(APT) 129和一個加法器以指向一個表項(xiàng),所述列表可以被一個TBNX(如圖10A)索引(尋址)。當(dāng)需要進(jìn)行緩存填充時(shí),填充APT 129指向的表項(xiàng)、其對應(yīng)的存儲塊以及軌道表項(xiàng)。在某些情況下,分配器1200(如保留表120、主動表121等)可以被用于提供一個地址-BNX-TBNX的號碼映射關(guān)系。例如,TBNX可以被用于索引高位地址或BNX,高位地址可以被用于通過高位地址匹配找到BNX或TBNX。當(dāng)填充一級緩存時(shí),生成器130計(jì)算出分支目標(biāo)地址并將高位地址經(jīng)總線141送到保留表120的CAM部分以進(jìn)行高位地址匹配。如果匹配不成功,分配器1200可以將指針127指向的表項(xiàng)號碼作為TBNX,并使用該TBNX作為軌道表內(nèi)容。同時(shí),分配器1200可以填充所述TBNX對應(yīng)的二級緩存塊。另一方面,如果匹配成功,分配器1200可以找到對應(yīng)的TBNX,并將所述TBNX作為軌道表內(nèi)容。此外,在循跡器170的運(yùn)行過程中,當(dāng)軌道表讀指針151指向一個含有TBN的軌道表項(xiàng)時(shí),所述TBN被通過讀口 161讀出并被送到總線180以索引保留表120(即,檢查二級緩存中是否有相應(yīng)的指令段)。如果不存在有效BN,將APT129指向的BNX存儲到該TBN的RAM部分的表項(xiàng)中,且用所述BN替換軌道表126中的所述TBN。此外,二級緩存中相應(yīng)的指令段被填充到一級緩存由BN索引的緩存塊中。然而,如果存在有效BN,意味著在一級緩存中已經(jīng)存在該表項(xiàng)對應(yīng)的指令段,那么用所述有效的BN替換所述TBN。當(dāng)然,當(dāng)軌道表讀指針151指向一個內(nèi)容包含BN的表項(xiàng)時(shí),因?yàn)樗鱿鄳?yīng)的指令段已經(jīng)存儲在一級緩存中,因此分配器1200不需要進(jìn)行檢查。 此外,分配器1200也可以針對主動表121和保留表120支持不同的結(jié)構(gòu)。例如,對于主動表121和保留表120中表項(xiàng)的包含關(guān)系,分配器1200可以有兩種配置方式。在一種配置方式中,如圖13中描述的那樣,主動表121和保留表120之間產(chǎn)生一種不包含的關(guān)系。為廣生這種不包含關(guān)系,保留表120和主動表121各自擁有用于存儲聞位地址的CAM。從生成器130來的地址被同時(shí)送到主動表121和保留表120以匹配從而得到TBNX或BNX。然而,只可能在主動表121和保留表120中的一個匹配成功,而不可能在主動表121和保留表120中同時(shí)匹配成功,也就是說一條特定的指令只可能存在于一級緩存和二級緩存之一之中,而不可能同時(shí)存在于兩者之中。如圖11所示,保留表120由TBNX索引,其CAM存儲了高位地址,其RAM存儲了對應(yīng)的BNX號碼。可以用一個索引對同一行或表項(xiàng)中的多個BNX進(jìn)行選擇。此外,主動表121由BNX索引,其CAM存儲了高位地址,其RAM存儲了 TBNX號碼。在一種配置方式中,主動表121和保留表120之間產(chǎn)生一種包含的關(guān)系。在這種關(guān)系下,只有保留表120的CAM中存儲了聞位地址,保留表120可以由圖11中類似結(jié)構(gòu)組成。然而,主動表121并不具有CAM部分,因此生成器送來的一個地址只在保留表120中進(jìn)行匹配,這意味著如果一條特定的指令如果存在于一級緩存中,那么必然存在于二級緩存中。此外,主動表121由BNX索引,其內(nèi)容僅僅是TBNX。當(dāng)一個一級緩存塊被清除(或被替換)時(shí),所述舊的BNX被送到主動表121尋找一個TBNX以便存儲到軌道表126中。對于數(shù)據(jù)存儲器而言,一級緩存塊必須被存儲回保留表120對應(yīng)的緩存存儲器中。在某些情況下,可以使用一個一層緩存系統(tǒng)。這樣,保留表表項(xiàng)可以由對應(yīng)主存儲器而非緩存存儲器中一個存儲塊的TBNX索引,所述主存儲器地址的高位地址被存儲到對應(yīng)的CAM項(xiàng)中。與通常一樣,RAM部分包含BNX。這樣,TBNX被臨時(shí)保存在軌道表項(xiàng)中直到軌道表126的讀指針接近所述表項(xiàng),使得所述高位地址對應(yīng)的存儲塊可以被填充到緩存(一級緩存)中。之后,也可以指定一個BNX替換軌道表126中的所述TBNX。這個BNX也可以被保存在保留表項(xiàng)中由所述TBNX索引的RAM部分中。此外,分配器1200可以被用于輔助一級緩存替換策略的實(shí)現(xiàn)。例如,分配器1200可以支持最近最少使用策略和最少頻繁使用策略。在最近最少使用策略情況下,分配器1200可以使用一個由主指針129(APT)和清除指針構(gòu)成的最近最少使用窗口,以找到下一個可被替換的存儲塊。清除指針在主指針129(APT)之前N個表項(xiàng)的位置移動,其中N是可變量,清除指針用于清除指向的表項(xiàng)中的U位(設(shè)為‘0’)。另一方面,被訪問到的表項(xiàng)對應(yīng)的U位被重新設(shè)為‘I’。檢查主指針129 (APT)指向的表項(xiàng)的U位以決定是否替換該表項(xiàng)。如果U位為‘I’,表示該表項(xiàng)最近被訪問過,并不是最近最少使用的,那么主指針129增加并檢查下一個表項(xiàng)。如果U位為‘0’,主指針129可以停留在該表項(xiàng)進(jìn)行替換。在最少頻繁使用策略情況下,分配器1200可以使用如上述一樣的窗口,但使用一個記錄存儲訪問次數(shù)(表示訪問頻率)的計(jì)數(shù)器代替U位。將主指針129指向的表項(xiàng)中的計(jì)數(shù)器的值與處理器核125或其他設(shè)備設(shè)定的一個調(diào)整值進(jìn)行比較。如果計(jì)數(shù)結(jié)果小于調(diào)整值,主指針129可以停留在該表項(xiàng)進(jìn)行替換。交換器133可以被用于輔助軌道表126與分配器1200之間的交互。例如,在軌道表126中,當(dāng)分配一個BN以替換TBN時(shí)(例如,當(dāng)一個二級緩存塊被填充到一個一級緩存塊中時(shí)),或分配一個TBN以替換BN時(shí)(例如,當(dāng)由于一級緩存空間不足,一個一級緩存塊因并不存在與二級緩存中而被替換回二級緩存時(shí)),交換器133在舊的TBNX (BNX)被重新使用前,將軌道表126中所有舊的TBNX(BNX)替換為新的BNX(TBNX)。這樣,同一個BNX就不會對應(yīng)到兩個不同的PC地址。具體地,交換器133可以在分配操作開始的使用就存儲一組舊TBNX和新BNX對,交換器133沿軌道表移動到底,再從軌道表126的頂部開始直至到達(dá)出發(fā)點(diǎn),利用額外的讀端口總線159和額外的寫端口總線158,將所有舊的TBNX替換為新的BNX。同時(shí),交換器133在將BN送到循跡器170之前,將每一個讀出內(nèi)容中舊的TBNX替換為新的BNX。此外,軌道表126、主動表121和保留表120也可以被壓縮以節(jié)省各個表的存儲空間。圖15顯示了本發(fā)明所述的表壓縮結(jié)構(gòu)的實(shí)施例。如圖15所示,軌道表126可以包含一個壓縮的軌道表1262、一個映射表156和一個標(biāo)志表153。軌道表1262可以存儲分支目標(biāo)信息,但表項(xiàng)比原始軌道表少得多,且軌道表1262中的表項(xiàng)可以具有與原始軌道表126中表項(xiàng)相同的結(jié)構(gòu)。標(biāo)志表153是存儲了最后被寫入的軌道表1262中表項(xiàng)的號碼的表。表1262、156和153具有相同數(shù)目且互相對應(yīng)的行。此外,軌道表1262中的每行具有一個大于或等于每行可能擁有的分支指令的最大數(shù)目的第一數(shù)目列數(shù)。映射表156具有一個對應(yīng)于該行包含的指令總數(shù)加I的第二數(shù)目列數(shù),即增加了一個結(jié)尾列,使得每行結(jié)束時(shí)能跳轉(zhuǎn)到后續(xù)指令所在的行的起始。其中,標(biāo)志表153只有一列。這三張表一起構(gòu)成軌道表126。在操作中,初始化標(biāo)志表153的所有行使之為“ I ”。當(dāng)軌道表1262被填充時(shí),一個外部來源提供一個行地址BNX,一個列地址BNY和內(nèi)容(如分支目標(biāo)信息)。選擇表1262、156和153的相同行進(jìn)行合適的填充。表153中被選擇的行用于從表1262中選擇一個列以存儲分支信息,即,表1262中相關(guān)列的標(biāo)志。表153中被選擇的行的內(nèi)容被用于從軌道表1262中選擇一個列以存儲分支目標(biāo)信息(類型、目標(biāo)BNX,目標(biāo)BNY)。該列地址也被稱為MBNY(映射BNY)。該MBNY也被寫入表156被選擇的行中以列地址BNY索引的位置。由表156中被選擇的行的內(nèi)容標(biāo)志的軌道表1262中被選擇的行的相關(guān)列被選出以存儲分支目標(biāo)信息(即,軌道表內(nèi)容)。這樣,可以由映射表156對BNY和軌道表1262中列號碼之間的映射關(guān)系進(jìn)行維護(hù)。表153中被選擇的行的內(nèi)容被增加‘I’以指向表1262中的下一個有效列。在讀操作過程中,在表156中用BNX選擇一個行,并用BNY選擇一個列。表項(xiàng)中的內(nèi)容MBNY指向表1262中的一個列,是分支指令的表項(xiàng)點(diǎn)。當(dāng)進(jìn)行讀操作時(shí),BNX被用于從表1262、156和153中選擇一行,而BNY被用于從映射表156中選擇一個列。表156中由BNX和BNY指示的表項(xiàng)的內(nèi)容被讀出,該內(nèi)容指向表1262中的一個相應(yīng)的列。這樣,軌道表1262中的表項(xiàng)被讀出以獲取需要的分支目標(biāo)信息或之前存儲的其他信息。由于分支指令通常占指令總數(shù)的1/6,而表156中的表項(xiàng)只需要保存一個簡單的內(nèi)容(即,只需要表1262的列號碼),因此占用比表1262更少的存儲空間。因此,整個軌道表126的存儲大小可以被充分地減少,且由于領(lǐng)先指針直接從一個分支點(diǎn)到下一個分支點(diǎn),因此領(lǐng)先指針也可以移動得更快。在某些實(shí)施例中,軌道表1262中表項(xiàng)的內(nèi)容可以是不同格式,以加強(qiáng)軌道表的循跡(如通過循跡器170)。如圖15所示,軌道表1262的表項(xiàng)可以有如下格式631,包含一個類型,一個BNX和一個MBNY?!愋汀糠挚梢员硎疽粭l指令的類型,如一條分支指令、一條跳轉(zhuǎn)指令、一條讀/寫指令,或其他任何合適類型的指令?!甅BNY’部分可以表示一個映射 的BNY,即,軌道表1262中的一個由映射表156映射的偏移量。與將分支目標(biāo)偏移量直接以BNY的形式寫入軌道表1262不同,目標(biāo)BNX和偏移量被送到表156中以映射為一個MBNY。類型、目標(biāo)BNX和MBNY —起構(gòu)成軌道表1262的內(nèi)容。當(dāng)一個領(lǐng)先指針讀出表1262的內(nèi)容時(shí),目標(biāo)BNX和目標(biāo)MBNY構(gòu)成一個指向表1262中一個表項(xiàng)的地址。這就是說,在填寫操作中,BNX被用于選擇表1262、156和153中的一行,而BNY被用于選擇映射表156中的一列。讀出表156中由BNX和BNY指向的表項(xiàng)的內(nèi)容,該內(nèi)容指向表1262中的一個對應(yīng)列以存儲分支目標(biāo)信息。該列地址是一個MBNY,而這個MBNY也被寫入表156中由列地址BNY索引的一個列中。表153的內(nèi)容被增加I以指向軌道表1262中的下一個可用的列。在讀操作過程中,在映射表156中用BNX選擇一個行,并用BNY選擇一個列。該表項(xiàng)的內(nèi)容是一個指向軌道表1262中一個列的MBNY,即分支指令的進(jìn)入點(diǎn)。之后,軌道表1262中表項(xiàng)的MBNY就可以直接被用于在軌道表1262中尋找分支目標(biāo)地址。這就是說,該MBNY可以被替換為一個目標(biāo)MBNY。這就是說,分支目標(biāo)信息(即軌道表1262中的一個表項(xiàng)的內(nèi)容)可以包含類型、BNX和目標(biāo)MBNY。換句話講,與將分支目標(biāo)偏移量直接作為BNY寫入軌道表1262不同,BNX和分支目標(biāo)偏移量被送到映射表156以讀出映射表156中映射表項(xiàng)的內(nèi)容,即一個MBNY。類型、BNX和該MBNY構(gòu)成了軌道表1262中軌道表項(xiàng)的內(nèi)容。當(dāng)一個領(lǐng)先指針讀出軌道表1262中的一個表項(xiàng)時(shí),BNX和目標(biāo)MBNY,構(gòu)成了軌道表1262的一個地址。如圖15所示,表156中有些表項(xiàng)是空的,某種機(jī)制可用于解決分支目標(biāo)是在兩個分支源指令之間的問題。例如,如果一個分支的目標(biāo)是在BNX = I,BNY = 3,而表156中這個表項(xiàng)是空的,此時(shí)這種機(jī)制會求出這個表項(xiàng)的下一個分支源的映射地址MBNY等于3。又例如,如果一個分支的目標(biāo)是在表156中BNX = 2,BNY = 4,此時(shí)這種機(jī)制會給出這個表項(xiàng)的下一個分支源的映射地址MBNY等于2。此外,其他部件也可以被用于提供某些功能以支持上述實(shí)施例。例如,處理器核125可以提供一個控制信號‘TAKEN’以控制循跡器170中的選擇器137。
處理器核125還可以提供一個控制信號“BRANCH/JUMP”以控制循跡器中的寄存器138。讀指針151向前移動(如增加BNY)直到讀出的軌道表內(nèi)容是一個分支/跳轉(zhuǎn)類型,讀指針151停止在此處等待處理器核125趕上。同時(shí),根據(jù)該內(nèi)容中包含的分支目標(biāo)地址檢查填充一級緩存的必要性?!癇RANCH/JUMP”信號告訴循跡器170處理器核125已經(jīng)到達(dá)該分支指令,而此時(shí)的“TAKEN”信號是程序執(zhí)行產(chǎn)生的真實(shí)信號,并可以選擇正確的下一地址。這樣,通過檢測該“BRANCH/JUMP”信號,循跡器170使寄存器138更新以允許新地址進(jìn)入寄存器138并進(jìn)而表現(xiàn)為BN 151?!癟AKEN”信號或“BRANCH/JUMP”信號可以被用于表示分支或跳轉(zhuǎn)是否發(fā)生,而這樣的信號可以通過各種分支預(yù)測算法產(chǎn)生。圖16A-B顯示了本發(fā)明所述的分支判斷結(jié)構(gòu)。如圖16A所示,指令流3101包含一個指令序列,且執(zhí)行的順序?yàn)閺淖蟮接摇>唧w地,指令3102可以是一條分支指令,而指令3103、3104和3105是改變分支指令3102的分支條件的指令。指令3105是最后改變分支指令3102的分支條件的指令。與當(dāng)分支指令3102被執(zhí)行時(shí)判斷分支指令3102的分支條件是否滿足不同,這樣的判斷可以在最后改變 或影響該分支指令3102的分支條件的指令執(zhí)行之后即進(jìn)行。具體地,如圖16B所示,分支預(yù)測系統(tǒng)3200可以包含三個部分一個指令緩沖3201、預(yù)檢測控制單元3202和時(shí)間點(diǎn)測試單元3203。也可以包含其他設(shè)備。指令緩沖3201可以存儲一個指令序列,如指令3205正在被執(zhí)行,則其后續(xù)為指令3208、3209和3210等。時(shí)間點(diǎn)測試單元3203可以包含存儲每條分支指令的分支條件判斷時(shí)間點(diǎn)信息的本地寄存器,即,一個表示或被用于推導(dǎo)出一個分支條件是否滿足的標(biāo)志的值。根據(jù)處理器核執(zhí)行的指令集的類型,分支條件判斷時(shí)間點(diǎn)信息可以是一個通用寄存器、一個狀態(tài)寄存器,或一個特殊寄存器的一個或多個標(biāo)志位??梢愿鶕?jù)分支條件判斷時(shí)間點(diǎn)信息判斷分支條件時(shí)候滿足。例如,分支條件判斷時(shí)間點(diǎn)信息的不同值可以相互比較或分支條件判斷時(shí)間點(diǎn)信息可以與一個固定值進(jìn)行比較。預(yù)檢測控制單元3202控制一個領(lǐng)先指針3204沿指令緩沖3201從當(dāng)前指令3205以比處理器核程序計(jì)數(shù)器(PC)更快的速度移動。當(dāng)領(lǐng)先指針3204沿指令緩沖3201移動時(shí),掃描該指令緩沖3201中的每條指令,并停止在第一條分支指令3206。每條被掃描的指令可以被送到時(shí)間點(diǎn)測試單元203。由于對于一個處理器核中的分支條件判斷時(shí)間點(diǎn)信息的總數(shù)是有限的,時(shí)間點(diǎn)測試單元3203可以包含一個譯碼器3207以確定一條指令是否會改變?nèi)魏我粋€分支條件判斷時(shí)間點(diǎn)信息的值。如果一條指令被確認(rèn)為是改變分支條件判斷時(shí)間點(diǎn)信息的指令,那么這個或這些分支條件判斷時(shí)間點(diǎn)信息也可以被確定。此外,在掃描過程中,當(dāng)一條由領(lǐng)先指針3204指向的指令被發(fā)現(xiàn)改變分支條件判斷時(shí)間點(diǎn)信息值,那么這條指令的位置信息被寫入時(shí)間點(diǎn)測試單元3203中對應(yīng)該一個或多個分支條件判斷時(shí)間點(diǎn)信息的一個或多個本地寄存器中。為便于描述,在分支預(yù)測系統(tǒng)3200中只用到了兩個分支條件判斷時(shí)間點(diǎn)信息‘C0ND1’和‘C0ND2’。分支條件判斷時(shí)間點(diǎn)信息的任何號碼都可以用類似的方法處理。當(dāng)指令緩沖3201被掃描之后,在當(dāng)前指令3205和第一條分支指令3206之間有三條指令可以改變分支條件判斷時(shí)間點(diǎn)信息值指令3208、3209和3210。具體地,指令3208的位置是‘3’并改變分支條件判斷時(shí)間點(diǎn)信息‘C0ND1’的值;指令3209的位置是‘4’并改變分支條件判斷時(shí)間點(diǎn)信息‘C0ND2’的值;而指令3210的位置是‘7’并改變分支條件判斷時(shí)間點(diǎn)信息‘C0ND2’的值。當(dāng)領(lǐng)先指針3204指向指令3208時(shí),指令3208被讀出并通過總線3211送到譯碼器3207。在譯碼之后,可以判定指令3208改變‘C0ND1’的值。位置信息‘3’被寫入對應(yīng)分支條件判斷時(shí)間點(diǎn)信息‘C0ND1’的本地寄存器3212。類似地,當(dāng)領(lǐng)先指針3204指向指令3209時(shí),指令3209被讀出并通過總線3211送到譯碼器3207。在譯碼之后,可以判定指令3209改變‘C0ND2’的值。位置信息‘4’被寫入對應(yīng)分支條件判斷時(shí)間點(diǎn)信息‘C0ND2’的本地寄存器3213。此外,當(dāng)領(lǐng)先指針3204指向指令3210時(shí),指令3210被讀出并通過總線3211送到譯碼器3207。在譯碼之后,可以判定指令3210改變‘C0ND2’的值。位置信息‘V被寫入對應(yīng)分支條件判斷時(shí)間點(diǎn)信息‘C0ND2’的本地寄存器3213。原先的寫入值‘4’被替換為值‘7’。這樣,當(dāng)領(lǐng)先指針3204到達(dá)第一條分支指令3206時(shí),本地寄存器3212和3213在該第一條分支指令3206被執(zhí)行前分別存儲器了最后更新分支條件判斷時(shí)間點(diǎn)信息值的指令的位置信息。此外,當(dāng)領(lǐng)先指針3204到達(dá)分支指令3206時(shí),分支指令3206被讀出并被送到譯碼器3207。可以判定指令3206是一條分支指令,則產(chǎn)生一個停止信號并通過控制線 3216被送到預(yù)檢測控制單元3202,使得領(lǐng)先指針3204停止在分支指令3206。與此同時(shí),由于由領(lǐng)先指針3204指向的指令是分支指令,譯碼器3207可以通過控制線3215選擇一個或多個對應(yīng)分支指令用到的分支條件判斷時(shí)間點(diǎn)信息值的本地寄存器,并將被選中的寄存器的值輸出到比較器3218作為一個輸入。比較器3218的另一個輸入是處理器核正在執(zhí)行的當(dāng)前指令的位置信息3214。這樣,當(dāng)處理器核正在執(zhí)行的當(dāng)前指令的位置信息3214大于或等于已存儲的最后更新分支條件判斷時(shí)間點(diǎn)信息值的指令的位置信息,它可以表示該分支條件判斷時(shí)間點(diǎn)信息值已經(jīng)準(zhǔn)備好,可以進(jìn)行判斷分支條件是否滿足。比較器3218可以輸出一個“equal”結(jié)果到控制單元3219。當(dāng)分支指令需要的全部分支條件判斷時(shí)間點(diǎn)信息都更新后,控制單元3219可以發(fā)出一個“ready”信號3220以允許處理器核進(jìn)行分支轉(zhuǎn)移或跳轉(zhuǎn)是否發(fā)生的判斷,并確定分支目標(biāo)(如“TAKEN”信號或“BRANCH/JUMP”信號)。雖然沒有明示,時(shí)間點(diǎn)測試單元3202也可以從處理器核的寄存器、指令緩沖和其他合適的設(shè)備中獲取其他信息以產(chǎn)生“ready”信號3220。此外,時(shí)間點(diǎn)測試單元3203還可以發(fā)送信息到處理器核以產(chǎn)生“ready”信號3220。在某些實(shí)施例中,如當(dāng)處理器核不對指令進(jìn)行亂序執(zhí)行時(shí),并不是所有的對應(yīng)分支條件判斷時(shí)間點(diǎn)信息的本地寄存器都需要將它們的值發(fā)送到比較器3218。譯碼器3207可以產(chǎn)生一個控制信號在所有對應(yīng)分支條件判斷時(shí)間點(diǎn)信息的本地寄存器的值中選擇一個最大的位置值。這樣,當(dāng)比較器3218輸出“equal”信號到控制單元3219,或最大位置值小于或等于當(dāng)前正在被執(zhí)行的指令的位置值時(shí),更新所有分支條件判斷時(shí)間點(diǎn)信息的值。程序計(jì)數(shù)器(PC)也可以被用做當(dāng)前正在被執(zhí)行的指令的位置值。此外,處理器核125還可以提供一個部分地址“OFFSET”到一級緩存124在一個由BN 151中的BNX確定的指令段中索引指令。一級存儲器124或更高級別存儲器124可以被配置成由BNX索引的緩存塊或存儲塊。一級存儲器124可以包含一個寫端口以接收來自總線140的數(shù)據(jù)。對于寫地址,由分配器1200提供的X地址(WXADDR),由APT 129生成并來源于總線153,而Y地址(WYADDR,偏移地址)由獲取引擎提供(與被填充的數(shù)據(jù)同步)。一級存儲器124可以包含一個讀端口以輸出數(shù)據(jù)到處理器核125。對于讀地址,X地址(BNX)由循跡器170作為BN 151提供,而Y地址由處理器核125作為偏移量提供。圖17是使用本發(fā)明所述高性能緩存結(jié)構(gòu)實(shí)現(xiàn)存儲結(jié)構(gòu)的一個實(shí)施例。緩存結(jié)構(gòu)可以與之前所述的緩存控制單元類似。如圖17所示,處理器核201使用的存儲設(shè)備依次包括(從高速到低速)第一層次存儲器202、第二層次存儲器203、主存儲器204和硬盤存儲器205。通常地,第一層次存儲器202的容量比第二層次存儲器203的容量??;第二層次存儲器203的容量比主存儲器204的容量??;主存儲器204的容量比硬盤205的容量小。任何一個層次的存儲設(shè)備都可以有任意大小。此外,一個緩存結(jié)構(gòu)206被放置在處理器核201和第一層次存儲器202之間;一個緩存結(jié)構(gòu)207被放置在第一層次存儲器202和第二層次存儲器203之間;一個緩存結(jié)構(gòu)208被放置在第二層次存儲器203和主存儲器204之間;一個緩存結(jié)構(gòu)209被放置在主存儲器204和硬盤205之間。也可以使用其他的放置方法。這種多層的緩存結(jié)構(gòu)可以提高處理器核201的性能。例如,對于第一層次存儲器202和第二層次存儲器203之間的緩存結(jié)構(gòu)207,由于 處理器核201需要從第一層次存儲器202中獲取指令,而第一層次存儲器202中的指令來源于第二層次存儲器203。這樣,當(dāng)指令通過緩存結(jié)構(gòu)207傳遞時(shí),所述指令可以被掃描并分析,并在相關(guān)指令被執(zhí)行前將它們也獲取到第一層次存儲器202中,從而同時(shí)提高指令和數(shù)據(jù)的緩存命中率。緩存結(jié)構(gòu)207可以與緩存結(jié)構(gòu)206類似,緩存結(jié)構(gòu)207與第一層次存儲器的接口包括地址總線210、讀數(shù)據(jù)總線212和寫數(shù)據(jù)總線211,與第二層次存儲器203的接口包括地址總線213、讀數(shù)據(jù)總線214和寫數(shù)據(jù)總線215。這樣,緩存結(jié)構(gòu)207可以提高第一層次存儲器202的命中率。類似地,位于第二層次存儲器203和主存儲器204之間的緩存結(jié)構(gòu)208可以提高第二層次存儲器203的命中率,而位于主存儲器204和硬盤205之間的緩存結(jié)構(gòu)209可以提高主存儲器204的命中率。如果硬盤205包含了處理器核201所需的全部指令,那么通過這種多層次的緩存結(jié)構(gòu),處理器核201可以獲得高的命中率或性能。此外,較慢速度的存儲器之間的緩存結(jié)構(gòu)可以具有較寬的帶寬,即能一次獲取較多的指令或數(shù)據(jù)。例如,緩存結(jié)構(gòu)209的帶寬比緩存結(jié)構(gòu)208的帶寬更寬;緩存結(jié)構(gòu)208的帶寬比緩存結(jié)構(gòu)207的帶寬更寬;緩存結(jié)構(gòu)207的帶寬比緩存結(jié)構(gòu)206的帶寬更寬。也可以配置成其他形式。此外,可以在緩存結(jié)構(gòu)208和第一層次存儲器202之間提供一條獨(dú)立的旁路路徑216??梢詫⒅鞔鎯ζ?04中的指令或數(shù)據(jù)同時(shí)填充到第二層次存儲器203和第一層次存儲器202,從而進(jìn)一步提聞?wù)麄€系統(tǒng)的性能。上述各個實(shí)施例采用直接尋址的方式計(jì)算分支目標(biāo)地址并實(shí)現(xiàn)指令預(yù)取。然而,也可以使用間接尋址的方式。圖18A顯示了基于間接尋址的指令預(yù)取的一個實(shí)施例。當(dāng)采樣間接尋址方式時(shí),需要首先確定寄存器值(如基地址寄存器值),從而計(jì)算分支目標(biāo)地址。這樣,可以將對間接尋址用到的寄存器的任何更新都存儲到軌道表的對應(yīng)軌跡點(diǎn)中。如圖18A所示,軌道3501包含復(fù)數(shù)個軌跡點(diǎn)(0-14)。軌跡點(diǎn)14是一個使用寄存器Rl進(jìn)行間接尋址分支指令,其目標(biāo)地址為寄存器Rl的值加上偏移量。軌跡點(diǎn)3和12都會更新寄存器Rl的值。在運(yùn)行中,指令指針3551 (如BNY)從當(dāng)前指令指針360開始沿軌道3501向前移動。當(dāng)指針3551經(jīng)過軌道3501上每一個軌跡點(diǎn)時(shí),軌跡點(diǎn)的信息可以被讀出,而解碼器3641可以判斷出該軌跡點(diǎn)是否為一個間接尋址分支指令,且諸如軌跡點(diǎn)號碼和指令類型、基地址寄存器號、偏移量等指令信息的相關(guān)信息可以被存儲在設(shè)備3631中。指令指針3551繼續(xù)移動直到到達(dá)第一個間接尋址分支指令軌跡點(diǎn)。如圖18A所示,指針3551停止在軌跡點(diǎn)14(3541)。從指針3551移動到停止在軌跡點(diǎn)14的過程中,設(shè)備3631接收到更新該間接尋址分支指令所用基地址寄存器的軌跡點(diǎn)的信息。這樣,當(dāng)指針3551移動到軌跡點(diǎn)14(3541)時(shí),可以確定軌跡點(diǎn)3541的間接尋址分支指令所用的基地址寄存器的寄存器號,也可以確定在此間接尋址分支指令之前最后一次更新該基地址寄存器的軌跡點(diǎn)的號碼。例如,最后一次更新基地址寄存器Rl的軌跡點(diǎn)是軌跡點(diǎn)12(3531)。同時(shí),當(dāng)前指令指針360沿軌道3501移動,當(dāng)前指令指針360的值是正在被處理器核執(zhí)行的指令的軌跡點(diǎn)號碼。設(shè)備3631對當(dāng)前指令指針360和最后更新基地址寄存器軌跡點(diǎn)的軌跡點(diǎn)號碼進(jìn)行比較,并將比較結(jié)果輸出到總線3651上。如果當(dāng)前指令指針360 的值大于或等于最后更新基地址寄存器軌跡點(diǎn)的軌跡點(diǎn)號碼,那么可以表示該間接尋址分支指令所用的基地址寄存器已經(jīng)被更新,該寄存器號可以被送到處理器核以獲取該基地址寄存器更新后的值,用于計(jì)算分支目標(biāo)(如該基地址寄存器值加上偏移量)。根據(jù)實(shí)際分支指令的不同,分支目標(biāo)地址可以通過將基地址寄存器值加上一個偏移量的方法計(jì)算得至IJ,或通過直接使用該基地址寄存器值的方法得到。當(dāng)分支目標(biāo)計(jì)算完成后,可以如之前實(shí)施例所述將相應(yīng)的指令段填充到高層次存儲器中。圖18B顯示了基于間接尋址的指令預(yù)取的另一個實(shí)施例。為便于描述,假設(shè)處理器核指令集使用兩個基地址寄存器Rl和R2進(jìn)行指令的間接尋址,而單獨(dú)一個基地址寄存器的值可以被用做任何間接尋址分支指令的基地址。具有更多基地址寄存器時(shí)的情況也類似。此外,雖然只討論了間接尋址分支指令,其他分支指令也可以被包括進(jìn)來并被使用,從而實(shí)現(xiàn)多樣化的尋址模式。如圖18B所示,軌道3501存儲了間接尋址分支指令和更新基地址寄存器的指令等信息的相關(guān)信息。軌跡點(diǎn)3621可以是軌道3501上的一個表項(xiàng),且相關(guān)信息包括間接尋址分支指令所用基地址寄存器號、偏移量和更新基地址寄存器的指令等信息。當(dāng)程序流從表項(xiàng)3621進(jìn)入軌道3501時(shí)當(dāng)前指令指針360和指令指針3551都從表項(xiàng)3621開始移動,并將該表項(xiàng)的軌跡點(diǎn)號碼(或YADDR)作為初始值存儲到設(shè)備3631的相應(yīng)寄存器中。當(dāng)前指令指針360按處理器核執(zhí)行指令的速度沿軌道3501移動,同時(shí)指令指針3551以比當(dāng)前指令指針360更快的速度移動。當(dāng)指令指針3551沿著軌道3501移動時(shí),檢查經(jīng)過的軌跡點(diǎn)對應(yīng)的基地址寄存器相關(guān)信息。例如,如果一個軌跡點(diǎn)的指令會更新基地址相關(guān)寄存器(如R1或R2),那么該軌跡點(diǎn)的軌跡點(diǎn)號碼(或YADDR)被存儲到設(shè)備3631的相應(yīng)寄存器中。這樣,如圖18B所示,寄存器3561存儲了基地址寄存器Rl相關(guān)的軌跡點(diǎn)號碼,而寄存器3571存儲了基地址寄存器R2相關(guān)的軌跡點(diǎn)號碼。譯碼器3641可以接收由指令指針3551指向的軌跡點(diǎn)的內(nèi)容,并根據(jù)該內(nèi)容生成設(shè)備3631中各個寄存器的使能信號,及選擇器3591的選擇信號,用以控制對各個寄存器寫入的值以及輸出到比較器3611的值。
具體地,如圖18B所示,指針3551從軌跡點(diǎn)號碼‘I’開始移動,寄存器3561和寄存器3571存儲了該軌跡點(diǎn)號碼‘I’作為初始值。指針3551從左向右移動到軌跡點(diǎn)3 (3511),首先將軌跡點(diǎn)3(3511)的內(nèi)容讀出并將軌跡點(diǎn)號碼‘3’存儲到Rl寄存器3561中。然后指針355繼續(xù)移動到軌跡點(diǎn)5(3521),將軌跡點(diǎn)5(3521)的內(nèi)容讀出并將軌跡點(diǎn)號碼‘5’存儲到R2寄存器3571中。此外,指針3551繼續(xù)移動到軌跡點(diǎn)12 (3531),將軌跡點(diǎn)12的內(nèi)容讀出并將軌跡點(diǎn)號碼‘12’存儲到Rl寄存器3561中以替代原來的值‘3’。此后,指針3551繼續(xù)移動到位于軌跡點(diǎn)14(3541)的間接尋址分支指令,軌跡點(diǎn)14(3541)對應(yīng)的內(nèi)容表示基地址寄存器Rl被用于間接尋址。這樣,根據(jù)通過總線3581送來的軌跡點(diǎn)14(3541)的內(nèi)容,選擇器3591選擇Rl寄存器3561的值送到比較器3611。比較器3611的另一個輸入是當(dāng)前指令指針360的值(由當(dāng)前指令指針360指向的軌跡點(diǎn)的號碼)。當(dāng)比較器3611判斷出當(dāng)前指令指針360的值大于或等于Rl寄存器3561的值時(shí),表示該基地址寄存器Rl已經(jīng)更新為軌跡點(diǎn)14做需要的值,可以通過總線3651將一個信號送到另一個模塊以計(jì)算完整的分支目標(biāo)地址(如該基地址加上一個偏移量)。其他的方 法也可以被使用。圖19顯示了本發(fā)明所述緩存系統(tǒng)的另一個實(shí)施例11000。與圖IOA中的緩存系統(tǒng)9000類似,緩存系統(tǒng)11000可以被用于獲取數(shù)據(jù)而非指令。這樣,可以不需要保留表120和交換器133。用于數(shù)據(jù)存儲的主動表195具有與主動表121相同的結(jié)構(gòu)。主動表195中的每一個表項(xiàng)對應(yīng)高層次存儲器196中的一個數(shù)據(jù)段。此外,一個基地址指針存儲器197被用于存儲對應(yīng)基地址的數(shù)據(jù)段號。基地址指針存儲器197中的基地址指針數(shù)目與處理器核125用到的基地址數(shù)目相同,例如8。也可以使用其他數(shù)目。此外,處理器核125可以用基地址加偏移量的方式對高層次存儲器196尋址。所述偏移量可以保證地址數(shù)據(jù)不會超出基地址對應(yīng)的數(shù)據(jù)段的范圍。也可以支持多線程程序。例如,如前所述,復(fù)數(shù)個棧135可以被用于在多線程程序情況下填充指令,且復(fù)數(shù)個基地址指針存儲器197可以被用于在多線程程序情況下填充指令。這樣,PID 188可以指向一個當(dāng)前棧135及一個當(dāng)前基地址指針存儲器197。然而,如果只支持一個線程,可以只使用一個棧135和一個基地址指針存儲器197,可以不需要PID188。當(dāng)生成器130掃描、分析獲取到的指令時(shí),如果一條指令會改變數(shù)據(jù)的基地址,那么就要將對應(yīng)的基地址、立即數(shù)和寄存器號等信息存儲到軌跡表126的相應(yīng)軌跡點(diǎn)中。此夕卜,當(dāng)處理器核125執(zhí)行到所述指令時(shí),所述基地址或修改后的基地址可以被送到主動表195與其中的內(nèi)容進(jìn)行匹配。如果匹配成功,匹配成功項(xiàng)的表項(xiàng)號被作為基地址指針的內(nèi)容送到基地址存儲器197。由于主動表195中的表項(xiàng)對應(yīng)于高層次存儲器196中的數(shù)據(jù)段,因此當(dāng)前基地址指針存儲了對應(yīng)數(shù)據(jù)段在高層次存儲器196中的基地址。另一方面,如果匹配不成功,所述基地址被送到填充引擎132用于填充相應(yīng)數(shù)據(jù)段。當(dāng)所述基地址對應(yīng)的數(shù)據(jù)段被獲取時(shí),所述基地址被存儲到主動表195內(nèi)由指針198指向的一個表項(xiàng)中。主動表195中所述表項(xiàng)的表項(xiàng)號被存儲到基地址指針存儲器197內(nèi)一個對應(yīng)的基地址指針中。與填充指令類似,指針198移動到主動表195中的下一個有效表項(xiàng)。當(dāng)處理器核125執(zhí)行一條訪問高層次存儲器196中某個數(shù)據(jù)的指令時(shí),所述指令的基地址189被當(dāng)作索引從基地址指針存儲器197中讀出數(shù)據(jù)段號(DBN)。此外,數(shù)據(jù)讀寫地址偏移量194被當(dāng)作索引從所述數(shù)據(jù)段號(DBN)指向的數(shù)據(jù)段中找到一個數(shù)據(jù)項(xiàng)。處理器核125就可以對所述數(shù)據(jù)項(xiàng)進(jìn)行讀、寫操作了。此外,也可以在數(shù)據(jù)緩存上使用軌道表結(jié)構(gòu)。在運(yùn)行過程中,數(shù)據(jù)一直是與指令有關(guān)聯(lián)的,即由指令引起數(shù)據(jù)的讀取、處理或?qū)懟亍_@樣,在某些情況下,可以將數(shù)據(jù)操作關(guān)聯(lián)到某些指令,如讀/寫(裝載/存儲)指令和分支指令。為便于描述,以一種基地址加上偏移量的形式表示裝載/存儲指令和分支指令的目標(biāo)地址,而其他的地址形式也可以用類似的方法實(shí)現(xiàn)。圖18顯示了數(shù)據(jù)操作和指令之間的交互。如圖20所示,一個指令段403可以包含16條指令,指令O到指令15 (數(shù)字O、I、2……15與之前所述的BNY的值相等)。指令I(lǐng) (362)可以是進(jìn)入指令段403的一條目標(biāo)指令。指令7(352)是一條使用BPl作為基地址寄存器的裝載指令。由于指令7使用基地址寄存器BPl讀取數(shù)據(jù),任何在指令7之前執(zhí)行并改變BPl基地址寄存器值的指令與BPl基地址寄存器什么時(shí)候具有指令7所需的正確值是有關(guān)聯(lián)的。這就是說,可以采用本發(fā)明所述的系統(tǒng)和方法確定指令7所需的數(shù)據(jù)何時(shí)可以被填充到緩存(高層次存儲器)中。這樣,如圖20所示,對于使用BPl基地址寄存器裝載數(shù)據(jù)的指令7 (352)而言,指令I(lǐng) (362)和指令3 (351)是指令段403中在指令7 (352)之前被執(zhí)行的兩條指令,且都會更新BPl基地址寄存器。此外,雖然指令1 (362)會更新BPl基地址寄存器,但指令5 (351)在指令I(lǐng) (362)之后再一次更新了 BPl基地址寄存器。這樣,執(zhí)行指令7(352)時(shí)BPl基地址寄存器的值應(yīng)該是執(zhí)行指令5(351)之后的BPl基地址寄存器的值。類似地,指令12 (354)是一條使用BP2作為基地址寄存器的裝載指令。指令2 (383)和指令10(353)是指令段403中在指令12(354)之前被執(zhí)行的兩條指令,且都會更新BP2基地址寄存器。雖然指令2 (383)會更新BP2基地址寄存器,但指令10 (353)在指令2 (383)之后再一次更新了 BP2基地址寄存器。這樣,執(zhí)行指令12(354)時(shí)BP2基地址寄存器的值應(yīng)該是執(zhí)行指令10(353)之后的BP2基地址寄存器的值。此外,指令14(380)是指令段403進(jìn)入表項(xiàng)點(diǎn)之后的第一個分支指令,因此從進(jìn)入表項(xiàng)點(diǎn)開始直到指令14的所有指令都會被執(zhí)行。這樣,當(dāng)處理器核的執(zhí)行流從這個進(jìn)入指令段403的表項(xiàng)點(diǎn)(如指令I(lǐng) (362))開始執(zhí)行時(shí),可以在指令7(352)和指令12(354)被執(zhí)行之前將它們對應(yīng)的數(shù)據(jù)段填充到高層次存儲器124中。然而,必須在最后一次改變相應(yīng)基地址寄存器值的指令之后進(jìn)行預(yù)填充操作。例如,雖然指令I(lǐng)、2、11和13 (362、383、385、386)都更新了 BPl或BP2基地址寄存器的值,但它們都不是最后一次改變BPl或BP2基地址寄存器值的指令。其他指令更新了BP2、BP4、BP5及其他寄存器但不更新BPl或BP2基地址寄存器的值。這樣,為保證BPl基地址寄存器和BP2基地址寄存器中是正確的值,需要分析會更新基地址寄存器的指令,并識別出將基地址寄存器更新為正確值的指令。由于存在上述數(shù)據(jù)操作與指令之間的關(guān)聯(lián),可以使用一個類似的軌道表結(jié)構(gòu)用于數(shù)據(jù)操作。圖21A顯示了一個用于存儲數(shù)據(jù)裝載信息的軌道表結(jié)構(gòu)。
如圖21A所示,行350是軌道表中對應(yīng)指令段403的一個行??梢栽谲壍辣碇屑尤攵鄠€軌跡點(diǎn)以記錄數(shù)據(jù)預(yù)填充的相關(guān)信息。例如,可以將兩類信息記錄在一條相應(yīng)軌道的軌跡點(diǎn)的內(nèi)容中(I)讀/寫指令信息;(2)最后更新寄存器的指令信息。最后更新寄存器的指令指的是在讀/寫指令被執(zhí)行前最后一次更新該讀/寫指令所用的相應(yīng)基地址寄存器的值的指令。具體地,在軌道表行350中,存儲了裝載指令7 (352)、裝載指令12 (354)、指令3(351)和指令10(353)的信息。在這些指令中,裝載指令7 (352)和裝載指令12(354)是讀/寫指令,具有第一類信息,而指令3 (351)和指令10(353)是最后更新寄存器的指令,具有第二類信息。此外,可以用不同的格式存儲不同類型信息。例如,對于第一類信息而言,表項(xiàng)格式402可以包含一個讀/寫標(biāo)志395, —個基地址寄存器號394和一個偏移量392。此外, 對于第二類信息而言,表項(xiàng)格式401可以包含一個最后更新寄存器指令標(biāo)志393和一個基地址寄存器號394。其他格式也可以被使用。當(dāng)軌道表行350存儲了上述的各類信息后,可以在相應(yīng)指令被執(zhí)行前使用這些信息進(jìn)行數(shù)據(jù)段預(yù)填充。圖21B顯示了基于軌道表結(jié)構(gòu)的數(shù)據(jù)預(yù)填充的實(shí)施例。如圖21B所示,軌道350對應(yīng)的指令段403將要被執(zhí)行。這就是說,軌道350已經(jīng)被建立且指令段403已經(jīng)被填充到高層次存儲器中。此外,軌道350也被用于存儲數(shù)據(jù)段信息(如上面提到的信息類型)。例如,軌跡點(diǎn)362是進(jìn)入軌道350的表項(xiàng)點(diǎn),即,是另外一個軌跡點(diǎn)的目標(biāo)地址。在本實(shí)施例中,當(dāng)建立軌道350或分析任何一條讀/寫指令或間接尋址分支指令時(shí),會使用一個反向的掃描以限制存儲到軌道表350中或分析指令信息數(shù)量。例如,當(dāng)一條或多條讀/寫指令用到了特定的基地址寄存器時(shí),只有更新該特定基地址寄存器的指令的指令信息才會被存儲。這就是說,會先掃描這些指令,而在之后或第二輪再掃描影響這些寄存器的指令。此外,數(shù)據(jù)指針355被用于輔助相應(yīng)數(shù)據(jù)段的預(yù)填充,而寄存器組363被用于記錄基地址寄存器的值,如寄存器356和寄存器357 (BPl基地址寄存器和BP2基地址寄存器)的值。當(dāng)程序流從表項(xiàng)點(diǎn)362進(jìn)入軌道350時(shí),當(dāng)前指令指針360和數(shù)據(jù)指針355 —起從表項(xiàng)點(diǎn)362開始移動,寄存器356和357的值可以被設(shè)置為表項(xiàng)點(diǎn)362的軌跡點(diǎn)號碼或一個默認(rèn)值。當(dāng)前指令指針360按處理器執(zhí)行速度沿軌道350移動,而數(shù)據(jù)指針355以比當(dāng)前指令指針360快的速度移動。當(dāng)數(shù)據(jù)指針355沿軌道350移動時(shí),檢查所經(jīng)過的軌跡點(diǎn)的數(shù)據(jù)相關(guān)信息。例如,如果發(fā)現(xiàn)是第二類信息(最后更新寄存器指令),寄存器組363中的基地址寄存器值就可以被相應(yīng)更新。這樣,如圖21B所示,當(dāng)數(shù)據(jù)指針355經(jīng)過軌跡點(diǎn)352和353時(shí),寄存器356 (BPl寄存器)被更新為‘12’,而寄存器357 (BP2寄存器)被更新為‘5,。具體地,如圖21B所示,寄存器356存儲了最后更新BPl基地址寄存器的軌跡點(diǎn)的軌道號(BN或BNY),而寄存器357存儲了最后更新BP2基地址寄存器的軌跡點(diǎn)的軌道號(BN或BNY)。此外,根據(jù)從數(shù)據(jù)指針355指向的軌跡點(diǎn)354來的內(nèi)容358,譯碼器364為寄存器組363產(chǎn)生寫使能信號并為選擇器359產(chǎn)生選擇信號以控制寄存器組363的更新,并選擇寄存器組363中的一個寄存器的值送往比較器361。在執(zhí)行之初,數(shù)據(jù)指針355從軌跡點(diǎn)1 (362)開始移動,而寄存器356和寄存器357被初始化為數(shù)據(jù)指針355開始移動的軌跡點(diǎn)號碼值‘I’。之后,數(shù)據(jù)指針355從左向右移動到軌跡點(diǎn)3 (351),軌跡點(diǎn)3(351)的表項(xiàng)號被讀出,BPl寄存器的值被更新為當(dāng)前數(shù)據(jù)指針的值‘3’。數(shù)據(jù)指針355繼續(xù)移動到軌跡點(diǎn)5 (352),軌跡點(diǎn)5 (352)的表項(xiàng)號被讀出,BP2寄存器的值被更新為當(dāng)前數(shù)據(jù)指針的值‘5’。此外,數(shù)據(jù)指針355繼續(xù)移動到軌跡點(diǎn)10 (353),軌跡點(diǎn)10(353)的表項(xiàng)號被讀出,BPl寄存器的值被更新為當(dāng)前數(shù)據(jù)指針的值‘10’,以代替原來的值‘3’。然后,數(shù)據(jù)指針355移動到位于軌跡點(diǎn)12(354)的第一條讀/寫指令,軌跡點(diǎn)12(354)對應(yīng)表項(xiàng)表示BPl基地址寄存器被用來讀取數(shù)據(jù)。這樣,根據(jù)軌跡點(diǎn)12(354)的內(nèi)容,譯碼器364選擇對應(yīng)BPl基地址寄存器的寄存器356并將寄存器356的值通過選擇器359送到比較器361。比較器361的另一個輸入是當(dāng)前指令指針360的值(當(dāng)前指令指針 360指向的軌跡點(diǎn)的號碼)。當(dāng)比較器361判斷當(dāng)前指令指針360的值大于或等于寄存器356的值時(shí),表示基地址寄存器BPl已經(jīng)更新為軌跡點(diǎn)12需要的值,可以將一個信號通過總線365發(fā)送到另外的一個相關(guān)單元以計(jì)算用于存儲器讀/寫的完整地址(如基地址加上偏移量)。可以使用這個完整地址在該讀/寫執(zhí)行之前填充數(shù)據(jù)段。圖21C顯示了一個實(shí)現(xiàn)了數(shù)據(jù)預(yù)填充結(jié)構(gòu)的緩存系統(tǒng)的更多細(xì)節(jié)。如圖21C所示,在軌道表1261中建立了軌道350。當(dāng)進(jìn)入軌道350時(shí),即當(dāng)處理器核執(zhí)行進(jìn)入軌跡點(diǎn)(如軌跡點(diǎn)0(3801))時(shí),數(shù)據(jù)指針355指向軌跡點(diǎn)3801。之后,數(shù)據(jù)指針355向右移動(即進(jìn)入軌道350)并檢查指針移動經(jīng)過的軌跡點(diǎn)的內(nèi)容。數(shù)據(jù)指針355停止在第一個讀/寫指令(軌跡點(diǎn)352)。具體地,當(dāng)數(shù)據(jù)指針355從軌跡點(diǎn)3801 (即軌跡點(diǎn)O)開始移動時(shí),號碼‘0’被寫入寄存器379。此外,寄存器379的值每次通過自增器408增加一并將該增加后的值寫回寄存器379。這樣,數(shù)據(jù)指針355(即寄存器379的輸出值)可以每次增加一以向右移動。此夕卜,寄存器379可以受信號407控制暫時(shí)停止寫回(數(shù)據(jù)指針355停止),或受信號365控制恢復(fù)寫回(數(shù)據(jù)指針355移動)。此外,檢測模塊371包含寄存器356、寄存器357、選擇器359、比較器361、加法器372和譯碼器364。檢測模塊371和寄存器379、選擇器359、自增器408,以及主動表195共同將數(shù)據(jù)段填充到高層次數(shù)據(jù)存儲器196中。當(dāng)數(shù)據(jù)指針355移動到軌跡點(diǎn)3801時(shí),軌跡點(diǎn)3801的軌跡點(diǎn)號碼‘0’被通過總線358寫入到保存基地址相關(guān)的寄存器中,如對應(yīng)BPl基地址寄存器的寄存器356和對應(yīng)BP2基地址寄存器的寄存器357?;蛘?,可以將某個默認(rèn)值作為初始值寫入所有基地址相關(guān)的寄存器中。或不進(jìn)行初始花以保持寄存器中現(xiàn)有值不變。此外,當(dāng)數(shù)據(jù)指針355在軌道350上移動時(shí),檢測出軌跡點(diǎn)I (362)是一條更新基地址寄存器BPl的指令。這樣,當(dāng)數(shù)據(jù)指針355指向軌跡點(diǎn)362時(shí),軌跡點(diǎn)362的內(nèi)容通過總線358被送到譯碼器364,而譯碼器364生成一個寫使能信號387將軌跡點(diǎn)號碼‘I’寫入寄存器356。當(dāng)數(shù)據(jù)指針355到達(dá)軌跡點(diǎn)2(383)時(shí),檢測到該軌跡點(diǎn)是一條更新基地址寄存器BP2的指令,軌跡點(diǎn)383的內(nèi)容通過總線358被送到譯碼器364,而譯碼器364生成一個寫使能信號387將軌跡點(diǎn)號碼‘2’寫入寄存器357中。類似地,當(dāng)數(shù)據(jù)指針355到達(dá)軌跡點(diǎn)3(351)時(shí),檢測到該軌跡點(diǎn)是一條更新基地址寄存器BPl的指令,軌跡點(diǎn)號碼‘3’被寫入寄存器356中以代替原先的值‘I’。當(dāng)數(shù)據(jù)指針355到達(dá)軌跡點(diǎn)352,即一條讀/寫指令時(shí),軌跡點(diǎn)352的內(nèi)容通過總線358被送到譯碼器364,而譯碼器364生成一個控制信號407使得寄存器379停止更新(即數(shù)據(jù)指針355停止移動)。當(dāng)數(shù)據(jù)指針355停止在軌跡點(diǎn)352時(shí),譯碼器364生成一個選擇信號388從選擇器359中選出對應(yīng)于基地址寄存器BPl的寄存器356的值。寄存器356的值通過總線389被送到比較器361。與此同時(shí),當(dāng)前指令指針360隨程序流移動。當(dāng)前指令指針360表示指令段中正在被執(zhí)行的指令的位置信息。例如,該位置信息可以是程序計(jì)數(shù)器(PC)的低地址。當(dāng)前指針360指向的軌跡點(diǎn)的軌跡點(diǎn)號碼也被送到比較器361。當(dāng)比較器361判斷當(dāng)前指令指針360送來的號碼大于或等于總線389送來的號碼(即軌跡點(diǎn)號碼‘3’)時(shí),表示最后更新寄存器的指令已經(jīng)被執(zhí)行了,BPl基地址寄存器被更新為所需的值。此時(shí)從比較器361送往 加法器372的使能信號365是有效的。這樣,軌跡點(diǎn)7(352)中的基地址寄存器信息可以通過總線374被送到處理器核125,獲取來的基地址寄存器的值通過總線373被送到加法器372。軌跡點(diǎn)7 (352)中的偏移量信息可以通過總線358也被送到加法器372中。加法器372可以在使能控制信號365保持有效的時(shí)候通過將基地址寄存器的值與偏移量相加的方式完成數(shù)據(jù)地址計(jì)算,并將計(jì)算得到的數(shù)據(jù)地址通過總線375送到主動表195。主動表195進(jìn)行匹配操作。如果匹配操作不成功,那么生成一個新的數(shù)據(jù)段號碼(DBN),而數(shù)據(jù)地址通過總線1441被送到填充引擎132以從低級存儲器122中獲取相應(yīng)的數(shù)據(jù)段。與此同時(shí),新的DBN通過總線376被作為填充地址送到高層次存儲器196,從而將獲取來的數(shù)據(jù)段填充到高層次存儲器196中根據(jù)該新DBN決定的位置中。該新DBN還被送到DBN隊(duì)列370中。另一方面,如果匹配操作成功,那么可以直接將匹配到的DBN送到DBN隊(duì)列370中。當(dāng)填充軌跡點(diǎn)7 (352)對應(yīng)的數(shù)據(jù)段時(shí),寄存器379在控制信號365的控制下恢復(fù)更新。數(shù)據(jù)指針355繼續(xù)向右移動直到數(shù)據(jù)指針355指向軌跡點(diǎn)12 (354)。軌跡點(diǎn)12 (354)的內(nèi)容通過總線358被送到譯碼器364。譯碼器364生成控制信號407暫停寄存器379的更新。重復(fù)上述操作過程從而將軌跡點(diǎn)12(354)對應(yīng)的數(shù)據(jù)段填充到高層次數(shù)據(jù)存儲器196中,并將相應(yīng)的DBN送到DBN隊(duì)列370。此外,軌跡點(diǎn)352讀/寫指令和軌跡點(diǎn)354讀/寫指令對應(yīng)的DBN都在DBN隊(duì)列370中,當(dāng)處理器核125執(zhí)行這些讀/寫指令時(shí),可以通過總線377從DBN370隊(duì)列中獲一次取到一個對應(yīng)的DBN,這樣就可以確定對應(yīng)的數(shù)據(jù)段。再使用從處理器核通過總線378送來的偏移量,就可以在數(shù)據(jù)段中定位所需的數(shù)據(jù)。此外,如果從數(shù)據(jù)指針355進(jìn)入到軌道350直到到達(dá)一個讀/寫指令的過程中保存基地址BPl和BP2的相關(guān)寄存器的值都沒有被更新,那么表示讀/寫指令所需的基地址是已更新完畢的。此時(shí),由于在數(shù)據(jù)指針355進(jìn)入軌道350時(shí)保存基地址BPl和BP2的相關(guān)寄存器的值被寫為‘0’,因此只要當(dāng)前指令指針360指向的軌跡點(diǎn)號碼大于‘0’,就可以進(jìn)行數(shù)據(jù)段預(yù)填充。
在某些實(shí)施例中,用于數(shù)據(jù)的軌道表結(jié)構(gòu)可以集成在用于指令的軌道表結(jié)構(gòu)中。這就是說,單個的軌道表結(jié)構(gòu)(如軌道表126)可以同時(shí)用于數(shù)據(jù)和指令。在另外的實(shí)施例中,可以在有一個用于指令的軌道表以外,單獨(dú)使用一個用于數(shù)據(jù)的軌道表。圖22A顯示了數(shù)據(jù)和指令軌道表的實(shí)施例。如圖22A所不,軌道表330用于指令,軌道表331用于數(shù)據(jù)。軌道表330中的每一行對應(yīng)高層次指令存儲器中的一個存儲塊,行中的每一表項(xiàng)對應(yīng)存儲塊中的一條指令。該表項(xiàng)也是軌跡點(diǎn),包含了諸如指令類型(即該指令是否為分支指令)和當(dāng)該指令是分支指令時(shí)已經(jīng)計(jì)算得到的目標(biāo)地址等信息。數(shù)據(jù)軌道表331可以有與指令軌道表330類似的大小。此外,數(shù)據(jù)軌道表331中的表項(xiàng)與指令軌道表330中的表項(xiàng)對應(yīng)。為便于描述,軌道表330和331中相同位置表不軌道表330和331的對應(yīng)表項(xiàng)。如之前所述,數(shù)據(jù)軌道表331中的一個表項(xiàng)包含指令類型(即該指令是否為讀/寫指令)和當(dāng)該指令是讀/寫指令時(shí)用于計(jì)算數(shù)據(jù)地址的基地址寄存器和偏移量信息。
此外,當(dāng)前程序計(jì)數(shù)器(PC)332同時(shí)指向軌道表330和331中的相同位置。如果當(dāng)前程序計(jì)數(shù)器332指向軌道表330中的一個表行,那么該表行對應(yīng)的指令段已經(jīng)被填充到高層次指令存儲器中,且每條指令的指令類型均已識別并被存儲到軌道表330中。這樣,可以找到當(dāng)前程序計(jì)數(shù)器332之后的第一個分支指令,如分支指針333所指。對于一層的軌道結(jié)構(gòu),分支指令目標(biāo)地址對應(yīng)的指令段被填充到高層次存儲器中,并在軌道表330中建立相關(guān)軌道。然而,對于兩層的軌道結(jié)構(gòu),需要有更多的指針指向分支指針333指向的分支指令之后的第一個分支指令,以及分支指針333指向的分支指令目標(biāo)指令之后的第一個分支指令。之后,可以用類似方法填充高層次存儲器,并相應(yīng)地建立額外的軌道。還可以使用更多層次的軌道結(jié)構(gòu)。如果當(dāng)前程序計(jì)數(shù)器332和分支指針333重合,那么分支指令被執(zhí)行,且當(dāng)前程序計(jì)數(shù)器332將根據(jù)分支指令的執(zhí)行結(jié)果(即分支轉(zhuǎn)移是否發(fā)生)移動到一個新的當(dāng)前指令軌跡點(diǎn)。分支指針333也會隨當(dāng)前程序計(jì)數(shù)器332變化,指向新的當(dāng)前指令之后的第一個分支指令。重復(fù)該過程可以在執(zhí)行指令段之前將指令段填充到高層次存儲器中。類似地,當(dāng)指令段被填充到高層次存儲器中時(shí),數(shù)據(jù)相關(guān)信息(指令是否為讀/寫指令)也被存儲到軌道表331中。這樣,可以找到分支指針333指向的分支指令之后的第一個讀/寫指令,如數(shù)據(jù)訪問指針334所指。此外,軌道表331也存儲了最后更新該讀/寫指令相應(yīng)基地址寄存器的指令的信息。這樣,可以找到位于當(dāng)前程序計(jì)數(shù)器332之后且分支指針333指向的分支指令之前的那條最后更新寄存器指令,如基地址變化指針335所指。隨著當(dāng)前軌道上指令的執(zhí)行,如果當(dāng)前程序計(jì)數(shù)器332移動到基地址變化指針335指向的位置,那么可以計(jì)算出由數(shù)據(jù)訪問指針334指向的第一個讀/寫指令的讀/寫地址,并將該地址對應(yīng)的數(shù)據(jù)段填充到高層次數(shù)據(jù)存儲器中。與此同時(shí),對應(yīng)的基地址寄存器也被更新為新的值(如基地址變化指針335指向的指令的執(zhí)行結(jié)果)。如果基地址變化寄存器335不在當(dāng)前程序計(jì)數(shù)器332指向的軌跡點(diǎn)和數(shù)據(jù)訪問指針334指向的軌跡點(diǎn)之間,那么數(shù)據(jù)訪問指針334指向的讀/寫指令所需的基地址寄存器的值可以被認(rèn)為是一個有效的值??梢粤⒓从?jì)算出讀/寫地址并將計(jì)算得到的讀/寫地址對應(yīng)的數(shù)據(jù)段填充到高層次數(shù)據(jù)存儲器中。
此外,如果數(shù)據(jù)訪問指針334指向的讀/寫指令位于分支指針333指向的分支指令之后,那么由于在該分支指令執(zhí)行之前很難判斷出該讀/寫指令是否會被執(zhí)行,因此無論基地址變化指針335指向哪里,都不將數(shù)據(jù)段填充到高層次數(shù)據(jù)存儲器中。如果當(dāng)前程序計(jì)數(shù)器332和數(shù)據(jù)訪問指針334重合,那么表示該讀/寫指令正在被執(zhí)行。之后數(shù)據(jù)訪問指針334可以指向當(dāng)前程序計(jì)數(shù)器332之后且分支指針333之前的下一條讀/寫指令。與此同時(shí),基地址變化指針335也可以指向位于當(dāng)前程序計(jì)數(shù)器332之后且分支指針333之前的最后更新該下一條讀/寫指令用到的基地址寄存器的指令(如果這樣的指令不存在,那么數(shù)據(jù)訪問指針334新指向的讀/寫指令所需的基地址寄存器的值可以被認(rèn)為是一個有效的值)??梢灾貜?fù)該過程直到開始一條新的軌道,之后在此新軌道中同樣在訪問數(shù)據(jù)段的指令執(zhí)行之前將數(shù)據(jù)段填充到高層次數(shù)據(jù)存儲器中。當(dāng)然,如果基地址寄存器相應(yīng)的數(shù)據(jù)段已經(jīng)填充在高層次數(shù)據(jù)存儲器中,那么不需要重復(fù)填充該數(shù)據(jù)段。在這種情況下,之前所述的主動表195被用于匹配高層次數(shù)據(jù)存儲器中已存在的數(shù)據(jù)塊。 此外,在操作過程中,指令軌道表330和數(shù)據(jù)軌道表331可能需要通過指令軌道表330和數(shù)據(jù)軌道表331之間的某種接口進(jìn)行同步。圖22B顯示了指令軌道表330和數(shù)據(jù)軌道表331之間的接口結(jié)構(gòu)的實(shí)施例。如圖22B所示,指令軌道表330可以具有內(nèi)容格式630 :分支類型、目標(biāo)BNX和目標(biāo)BNY。指令軌道表330也連接到數(shù)據(jù)軌道表331。此外,鎖存器601、602和603連接在指令軌道表330和數(shù)據(jù)軌道表331之間。鎖存器602和603還分別具有自增器604和605。此外,指令軌道表330和數(shù)據(jù)軌道表331都使用相同的BNX,而指令軌道表330和數(shù)據(jù)軌道表331用到的BNY可以是不同的,分別被稱為IBNY和DBNY。在操作過程中,BNX621和IBNY 622被用于對指令軌道表330的表項(xiàng)進(jìn)行索引,將該表項(xiàng)內(nèi)容讀出并放到總線606和總線607。具體地,目標(biāo)BNX被輸出到總線606,而目標(biāo)BNY被輸出到總線607 (為簡化起見,這里沒有顯示分支類型)。此外,選擇器611、612和613分別被用于提供鎖存器601、602和603的輸入,并受同一個分支發(fā)生判斷信號(即“TAKEN”信號)控制。BNX 621和BNY 623被用于對數(shù)據(jù)軌道表331的表項(xiàng)進(jìn)行索引。當(dāng)分支轉(zhuǎn)移發(fā)生時(shí),所有選擇器選擇指令軌道表330來的輸入。BNX 621等于目標(biāo)BNX,而IBNY 622和DBNY 623等于目標(biāo)BNY。此外,總線606上的目標(biāo)BNX被鎖存到鎖存器601中,總線607上的目標(biāo)BNY被鎖存到鎖存器602和鎖存器603中。這樣,BNX 621和IBNY 622現(xiàn)在索引到一個指令軌道表項(xiàng),該表項(xiàng)的地址由分支轉(zhuǎn)移發(fā)生前的表項(xiàng)的內(nèi)容指定。BNX 621和DBNY 623現(xiàn)在索引到一個數(shù)據(jù)軌道表項(xiàng)。當(dāng)分支轉(zhuǎn)移發(fā)生后并從新的軌道開始時(shí),選擇器611和612都選擇不從指令軌道表來的輸入。BNX 621停止在同一個BNX,而BNY 622在每個時(shí)鐘周期自增直到遇見包含下一條分支指令的表項(xiàng)。之后,BNY 622可以停止在該下一條分支指令,使得當(dāng)下一次分支發(fā)生信號通過選擇器選擇并輸出到總線606和總線607上的分支目標(biāo)就是該BNY 622的表項(xiàng)內(nèi)容,并將它們分別鎖存在鎖存器601、602和603中?;蛘撸摲种繕?biāo)可以被保存在一個臨時(shí)存儲器(為簡便起見沒有顯示)中使分支可以正常進(jìn)行,BNY 622則可以進(jìn)一步向前移動以保證程序很快將需要的指令能存在于一級緩存中(如之前所述)。
對于數(shù)據(jù)軌道表,可以對應(yīng)指令分支進(jìn)行類似的操作。當(dāng)分支發(fā)生時(shí),BNX621被設(shè)為目標(biāo)BNX,DBNY 623被設(shè)為目標(biāo)BNY。從數(shù)據(jù)軌道表中該分支目標(biāo)的表項(xiàng)開始,DBNY623指針進(jìn)一步向前移動以保證程序需要的數(shù)據(jù)在不久之后能存在于一級緩存中(如之前所述)。當(dāng)然,軌道表壓縮結(jié)構(gòu)也可以應(yīng)用在指令軌道表330和數(shù)據(jù)軌道表331上。圖22C顯示了一個帶有壓縮功能的指令軌道表330和數(shù)據(jù)軌道表331之間的接口結(jié)構(gòu)的實(shí)施例。圖22C中的接口結(jié)構(gòu)與圖22B中的類似。然而,如圖22C所示,指令軌道表330增加了一個獨(dú)立的端口 /總線608以從指令軌道表330中輸出目標(biāo)數(shù)據(jù)BNY,即目標(biāo)DBNY。從BNY到MBNY的映射可以在填充軌道表330的表項(xiàng)時(shí)完成。圖22C可以包含圖22B和圖15中的結(jié)構(gòu)的組合。這就是說,映射表156和標(biāo)志表153可以被用于對指令軌道表330進(jìn)行表壓縮,而映射表656和標(biāo)志表653可以被用于對數(shù)據(jù)軌道表331進(jìn)行表壓縮。指令軌道表330的表項(xiàng)格式為格式632,包括類型、目標(biāo)BNX、目標(biāo)MBNY (指令映射BNY)和目標(biāo)DMBNY (數(shù)據(jù)映射BNY)。例如,假設(shè)指令軌道表330的軌道2正在被填充,且在行3、列2 (BNX = 3、BNY = 2)的位置上有一條分支指令,該分支指令指向的分支目標(biāo)在行I、列5 (BNX = UBNY = 5)。在行3、列2的表項(xiàng)(即分支源)可以生成如下。首先生成存放在指令軌道表330中的內(nèi)容。來源于指令(即分支源指令)譯碼可以生成類型,目標(biāo)BNX可以由分支目標(biāo)地址高位與主動表121匹配得到(如行I)。目標(biāo)地址的低位部分(BNY)(如5)和BNX —起索引到表156和表656中行I、列5的表項(xiàng)。表156表項(xiàng)的內(nèi)容(如2)是目標(biāo)MBNY,而表656表項(xiàng)的內(nèi)容(如4)是目標(biāo)DMBNY。這樣,目標(biāo)列地址(目標(biāo)BNY) 5被映射到目標(biāo)MBNY 2和目標(biāo)DMBNY 4。下一個步驟是確定在哪里填充已生成的內(nèi)容。由于分支源在行3、列2的表項(xiàng)中,因此檢查表153的行3以分配一個表330中的列號碼。在這里,表153的行3為I。因此,該內(nèi)容被填充到表330的行3、列I中,而MBNY I被填充到行3、列2。在上述操作完成后,表153的行3被增加為2。如果主動表匹配操作沒能在一級緩存中找到分支目標(biāo)存儲塊,即可能表示在軌道表330中沒有對應(yīng)的行,那么該內(nèi)容的類型部分可以被填充為“PC”以表示該鏈接在表項(xiàng)被作為一個分支目標(biāo)讀出時(shí)需要重新計(jì)算。在這種情況下,類型被標(biāo)記為“PC”,BNX無效,IMBNY和DMBNY被填充為分支源地址偏移量BNY (注意這個不是目標(biāo)BNY)。當(dāng)該表項(xiàng)作為分支目標(biāo)從表330中被讀出時(shí),該“PC”類型觸發(fā)系統(tǒng)計(jì)算分支目標(biāo)地址。用于計(jì)算分支目標(biāo)地址的源指令可以由存儲在MBNY和DMBNY部分的BNY從當(dāng)前存儲塊中索引得到。目標(biāo)存儲塊及其相應(yīng)信息被填充到一級緩存、表330、表156和表153中新分配的行中。當(dāng)此完成后,標(biāo)記為“PC”的表項(xiàng)被填充為更新后的分支目標(biāo)信息。表331的內(nèi)容可以不包含分支目標(biāo)信息??梢灾桓鶕?jù)指令譯碼結(jié)果生成該內(nèi)容,而不需要通過如表330內(nèi)容生成時(shí)的映射過程。此外,可以用填充表330類似的過程對表331進(jìn)行填充。這就是說,表156被檢查,表331和表656被填充。之后,表653中的表項(xiàng)值增加。當(dāng)指針621指向軌道表330的行3和列I時(shí),輸出對應(yīng)內(nèi)容。目標(biāo)BNX 622為1,目標(biāo)MBNY為2,而目標(biāo)DMBNY為4。如果分支轉(zhuǎn)移發(fā)生,那么表330中的行I、列2的內(nèi)容被讀出,而表331中的行I、列4的內(nèi)容被讀出。如果分支轉(zhuǎn)移不發(fā)生,那么當(dāng)前表項(xiàng)右側(cè)的表項(xiàng)被讀出。例如,表330中的行3、列2的表項(xiàng)被讀出。與圖22B類似,當(dāng)用于存儲為分支而準(zhǔn)備的分支目標(biāo)信息的臨時(shí)存儲器存在時(shí),指針622和623可以向前移動以保證很快可能要用到的指令和數(shù)據(jù)存在于一級緩存中。或者,可以在從表330中讀出內(nèi)容的同時(shí)進(jìn)行BNY到MBNY的映射,而不是在表330的表項(xiàng)被填充時(shí)進(jìn)行該映射。在 這種情況下,表330的內(nèi)容只包含類型、目標(biāo)BNX和目標(biāo)BNY。當(dāng)從表330中讀出目標(biāo)BNY時(shí),該目標(biāo)BNY與目標(biāo)BNX —起被送到表156和表656,以分別產(chǎn)生頂BNY和DMBNY。之后,該MBNY和DMBNY被送到選擇器612和選擇器613作為分支轉(zhuǎn)移發(fā)生時(shí)被選擇的輸入,如圖22D所不。格式633是表330的表項(xiàng)格式。此外,在某些實(shí)施例中,兩個軌道表330和331可以被集成到單獨(dú)一個軌道表中(如軌道表126)。這樣,指令軌道表的相關(guān)信息和數(shù)據(jù)軌道表的相關(guān)信息就可以被存儲到該集成軌道表中。圖23顯示了軌道表的一行和信息的類型。如圖23所示,行350是一個代碼段對應(yīng)的軌道表行。可以將多個種類的軌跡點(diǎn)添加到軌道表中以存儲數(shù)據(jù)段相關(guān)的信息。例如四種類型的信息可以被存儲到相應(yīng)軌道的軌跡點(diǎn)中(I)直接尋址分支指令信息;(2)間接尋址分支指令信息;(3)讀/寫指令信息;和(4)最后更新寄存器指令彳目息。具體地,在軌道表行350中,存儲了分支指令14(380)、分支指令12(354)、裝載指令7(352)、指令3(351)和指令10(353)的信息。在它們中,分支指令14(380)是一條具有第一類信息的直接尋址分支指令;分支指令12(354)是一條具有第二類信息的間接尋址分支指令;裝載指令7(352)是一條具有第三類信息的讀/寫指令;而指令3(351)和指令10(353)是具有第四類信息的最后更新寄存器指令。此外,在存儲時(shí)不同類型信息可以具有不同的格式。例如,對于第一類信息,表項(xiàng)格式400可以包括一個分支指令標(biāo)志391和一個BN或TBN形式(BN包括BNX和BNY)的目標(biāo)地址404。對于第二類信息,表項(xiàng)格式4021可以包括一個間接尋址分支指令標(biāo)志3951、一個基地址寄存器號394和一個偏移量392。對于第三類信息,表項(xiàng)格式402可以包括一個讀/寫指令標(biāo)志395、一個基地址寄存器號394和一個偏移量392。此外,對于第四類信息,表項(xiàng)格式401可以包括最后更新寄存器指令標(biāo)志393和一個基地址寄存器號394。也可以使用其他格式。在上述的各種類型信息被存儲到軌道表行350之后,可以在相應(yīng)指令執(zhí)行前使用這些信息填充數(shù)據(jù)段。圖24顯示了本發(fā)明所述的一個緩存系統(tǒng)實(shí)施例20000。圖24可以基于前述的緩存系統(tǒng)和數(shù)據(jù)/指令軌道表結(jié)構(gòu)。如圖24所示,緩存系統(tǒng)20000與圖19中的緩存系統(tǒng)11000類似,如交換器133和循跡器177被用于將指令填充到高層次存儲器(如存儲器124和196)中,且指令和數(shù)據(jù)都存儲在低級存儲器122中。緩存系統(tǒng)20000還包括一個數(shù)據(jù)指針模塊3791、一個檢測模塊371和一個數(shù)據(jù)塊號碼(DBN)隊(duì)列370。此外,緩存系統(tǒng)20000使用一個單個的軌道表126存儲指令和數(shù)據(jù)的軌道信息(即一個集成的軌道表)。
數(shù)據(jù)指針模塊3791被用于控制數(shù)據(jù)指針355的移動。檢測模塊371可以包括圖2IC中所示的結(jié)構(gòu),如寄存器組363 (如寄存器356和357)、選擇器359、譯碼器364和比較器361等。譯碼器364可以接收軌道表126中數(shù)據(jù)指針355指向的軌跡點(diǎn)的內(nèi)容358。此夕卜,處理器核125可以將基地址寄存器的值通過總線373送到操作單元372,軌道表126可以將偏移量的值通過總線374送到操作單元372。之后,操作單元372可以根據(jù)基地址寄存器值和偏移量值計(jì)算出讀/寫地址,并可以將該計(jì)算得到的讀/寫地址送到主動表195進(jìn)行匹配操作。主動表195可以對接收到的讀/寫地址和主動表195中的表項(xiàng)進(jìn)行匹配。如果匹配成功,即數(shù)據(jù)段已經(jīng)存儲在高層次存儲器196中,那么可以獲取到對應(yīng)的數(shù)據(jù)塊號碼(DBN),并通過總線376將該DBN送到DBN隊(duì)列370。另一方面,如果匹配不成功,即數(shù)據(jù)段尚未存儲在高層次存儲器中,那么與之前所 述的指令填充操作類似,生成數(shù)據(jù)塊號碼(DBN)并將該新DBN更新到主動表195和軌道表126中。該DBN通過總線376也被送到DBN隊(duì)列370,且該讀/寫地址被送到填充引擎132。之后將該讀/寫地址對應(yīng)的數(shù)據(jù)段填充到高層次存儲器196中。由于循跡器170根據(jù)軌道表的內(nèi)容決定執(zhí)行順序,因此DBN隊(duì)列中的每個DBN可以被關(guān)聯(lián)到該DBN地址對應(yīng)的指令。當(dāng)執(zhí)行一條讀/寫指令時(shí),可以從DBN隊(duì)列中獲取到正確的DBN從而通過總線377在高層次存儲器196中選出正確的數(shù)據(jù)段。與此同時(shí),使用從總線378來的該讀/寫地址的低地址(即偏移量)可以訪問到該數(shù)據(jù)段中的所需數(shù)據(jù),從而完成該讀/寫操作。如果DBN隊(duì)列中存儲了一個對應(yīng)第一條分支指令之后的讀/寫指令的DBN,那么當(dāng)該第一條分支指令被執(zhí)行并確定分支轉(zhuǎn)移成功發(fā)生時(shí),可以從DBN隊(duì)列370中清除這條因分支轉(zhuǎn)移發(fā)生而不會被執(zhí)行的讀/寫指令的DBN?;蛘?,DBN隊(duì)列370可以只存儲第一條分支指令之前的讀/寫指令對應(yīng)的DBN,從而避免隊(duì)列的清除操作。此外,用于計(jì)算讀/寫地址的偏移量值可以作為指令的一部分被存儲在高層次指令存儲器(如高層次存儲器124)中,而非存儲在軌道表126中。當(dāng)需要計(jì)算讀/寫地址時(shí),可以將該偏移量值從高層次指令存儲器中送到操作單元372。此外,在一個多線程程序環(huán)境中,當(dāng)切換線程時(shí),該DBN隊(duì)列可以將舊線程對應(yīng)的DBN清除并加入新線程對應(yīng)的DBN?;蛘逥BN隊(duì)列中的DBN可以包含一個由PID 188設(shè)置的正確線程標(biāo)志?;蛘?,也可以省去DBN隊(duì)列和主動表195。生成存儲器讀/寫地址并讀取該數(shù)據(jù)段后,可以在高層次存儲器196中使用一個標(biāo)簽-存儲器結(jié)構(gòu)將該數(shù)據(jù)段填充到高層次存儲器196中,并填充該地址標(biāo)簽。當(dāng)一個讀/寫指令被執(zhí)行時(shí),可以使用標(biāo)簽匹配的方法找到數(shù)據(jù)段。此外,雖然上述例子是針對讀/寫指令的,但對于間接尋址分支指令等其他指令也可以用類似的方式處理。圖25顯示了緩存系統(tǒng)20000的更多的細(xì)節(jié)和配置。如圖25所示,軌道表126中建立了軌道350。當(dāng)由于一條分支指令導(dǎo)致程序執(zhí)行流通過軌跡點(diǎn)表項(xiàng)3801進(jìn)入到軌道350時(shí),BNX 152指向軌道350及高層次指令存儲器124中的相應(yīng)指令塊,BNY 156指向軌跡點(diǎn)3801,而數(shù)據(jù)指針355也指向軌跡點(diǎn)3801。之后BNY指針156和數(shù)據(jù)指針355向右移動(即進(jìn)入到軌道350中)并檢查經(jīng)過的軌跡點(diǎn)的內(nèi)容。BNY指針156停止在第一條分支指令,而數(shù)據(jù)指針355停止在第一條讀/寫指令或間接尋址分支指令。
BNY指針156指向的軌跡點(diǎn)的內(nèi)容被送到交換器133。交換器133更新BN/TBN和循跡器170運(yùn)行的細(xì)節(jié)如之前所述,這里不再提及。BNY指針156向右移動停止在第一條分支指令軌跡點(diǎn)380。如果存儲在軌跡點(diǎn)380中的信息包含一個BN,那么該第一條分支指令的目標(biāo)地址對應(yīng)的指令段已經(jīng)被填充到高層次指令存儲器124中。如果存儲在軌跡點(diǎn)380中的信息包含一個TBN,那么該第一條分支指令的目標(biāo)地址對應(yīng)的指令段尚未被填充到高層次指令存儲器124中,并在該第一條分支指令被執(zhí)行前在低級存儲器122中找到這個指令段填充到高層次指令存儲器124中。在某些實(shí)施例中,當(dāng)不使用保留表時(shí),交換器133可以被省略。與此同時(shí),當(dāng)BNY指針156移動時(shí),數(shù)據(jù)指針355也向右移動并停止在第一條讀/寫指令軌跡點(diǎn)352。具體地,當(dāng)BNY指針156從軌跡點(diǎn)表項(xiàng)362 (即軌跡點(diǎn)O)開始移動時(shí),BNY指針指向的號碼‘0’被寫入寄存器379中。此外,寄存器379的值通過自增器408每次增加一并將該增加后的值寫回寄存器379。例如,如果軌道350包含16個軌跡點(diǎn),那么自增器408可以使用一個模16加I的邏輯(即對于值‘15’增加一得到的結(jié)果為‘0’)。這樣數(shù)據(jù)指針355(即寄存器379的輸出值)可以每次增加一從而向右移動并在一條新的軌道 重新開始。此外,寄存器379可以受信號407控制臨時(shí)停止寫回,或受信號365控制恢復(fù)寫回。如之前所示,當(dāng)數(shù)據(jù)指針355移動到軌跡點(diǎn)7 (352)時(shí),寄存器356中已經(jīng)存儲了軌跡點(diǎn)351的軌跡點(diǎn)號碼‘3’,軌跡點(diǎn)352的內(nèi)容通過總線358被送到譯碼器364,譯碼器364生成控制信號407送到寄存器379從而停止更新寄存器379 (即數(shù)據(jù)指針355停止移動)。此外,譯碼器364生成一個選擇信號388從選擇器359中選出對應(yīng)基地址寄存器BPl (356)的寄存器356的值。寄存器356的值通過總線389被送到比較器361。當(dāng)比較器361判斷當(dāng)前指令指針360送來的號碼大于或等于總線389送來的號碼(即軌跡點(diǎn)號碼‘3’ )時(shí),可以計(jì)算基地址寄存器值和偏移量,并使用之前例子所述方法進(jìn)行匹配和數(shù)據(jù)填充。當(dāng)軌跡點(diǎn)7 (352)對應(yīng)的數(shù)據(jù)段已經(jīng)被填充時(shí),寄存器379在信號365的控制下恢復(fù)更新。數(shù)據(jù)指針355繼續(xù)向右移動,并將軌跡點(diǎn)353的軌跡點(diǎn)號碼‘10’存儲到BP2基地址寄存器對應(yīng)的寄存器357中。此外,數(shù)據(jù)指針355向右移動直到到達(dá)軌跡點(diǎn)12(354)。軌跡點(diǎn)12(354)的內(nèi)容通過總線358被送到譯碼器364。譯碼器364生成控制信號407暫停寄存器379的更新。可以重復(fù)前述過程將軌跡點(diǎn)12(354)對應(yīng)的數(shù)據(jù)段填充到高層次數(shù)據(jù)存儲器中,并將相應(yīng)的DBN送到DBN隊(duì)列370。圖26顯示了緩存系統(tǒng)20000與圖25中不同的配置。如圖26所示,大多數(shù)結(jié)構(gòu)與圖25中的相同,如軌道表126 (包含軌道350)、主動表195、DBN隊(duì)列370、高層次指令存儲器124、高層次數(shù)據(jù)存儲器196、交換器133、循跡器170等。然而,圖26中的緩存系統(tǒng)20000并不包含自增器408、選擇器409、數(shù)據(jù)指針355和其他的一些相關(guān)邏輯。這就是說,指針156同時(shí)用于指令和數(shù)據(jù)操作(如預(yù)填充),這也會導(dǎo)致檢測模塊406與圖25中的檢測模塊371有所不同。例如,檢測模塊406包含一個隊(duì)列397。隊(duì)列397可以被用于存儲基地址寄存器更新信息,如更新基地址寄存器的指令的軌跡點(diǎn)號碼、基地址寄存器號碼和偏移量等。在操作過程中,當(dāng)執(zhí)行流通過軌跡點(diǎn)表項(xiàng)3801進(jìn)入軌道350時(shí),BNX指針152指向軌道350,BNY指針156指向軌跡點(diǎn)表項(xiàng)3801。BNY指針156在循跡器170的控制下向右移動并檢查經(jīng)過的軌跡點(diǎn)的內(nèi)容。如之前所述,BNY指針156停止在第一條分支指令軌跡點(diǎn),并如之前所述那樣進(jìn)行指令段填充操作。對于數(shù)據(jù),檢測模塊406和主動表195共同工作進(jìn)行數(shù)據(jù)段的填充。檢測模塊406包含基地址位置寄存器組363 (如寄存器356和寄存器357)、隊(duì)列397、選擇器359、比較器361、加法器372和譯碼器364等。當(dāng)BNY指針156從軌跡點(diǎn)表項(xiàng)3801 (即軌跡點(diǎn)O)開始移動時(shí),BNY指針156指向的號碼‘0’通過總線358被寫入寄存器組363中的寄存器356和357中。此外,當(dāng)BNY指針156沿軌道350移動時(shí),可以檢測到軌跡點(diǎn)3(351)是一條更新基地址寄存器BPl的指令。這樣,當(dāng)BNY指針156移動到軌跡點(diǎn)351時(shí),軌跡點(diǎn)351的內(nèi)容通過總線358被送到譯碼器364,譯碼器364生成一個寫使能信號387將軌跡點(diǎn)號碼‘3’寫入基地址寄存器BPl對應(yīng)的寄存器356。BNY指針繼續(xù)移動到軌跡點(diǎn)352,軌跡點(diǎn)352的內(nèi)容通過總線358被送到譯碼器364,譯碼器364生成一個選擇信號388從選擇器359中選出基地址寄存器BPl對應(yīng)的寄存 器356的值。寄存器356的值通過總線398被送到隊(duì)列397。與此同時(shí),譯碼器364也將基地址寄存器BPl號碼和軌跡點(diǎn)7(352)中的偏移量信息送到隊(duì)列397。由于使用了隊(duì)列397,BNY指針156不需要停留在軌跡點(diǎn)352,而是可以繼續(xù)向右移動直到到達(dá)第一條分支指令。當(dāng)BNY指針156停止在第一條分支指令軌跡點(diǎn)14 (380)時(shí),BPl基地址寄存器對應(yīng)的寄存器356的值已經(jīng)被更新為‘3’,BP2基地址寄存器對應(yīng)的寄存器357的值已經(jīng)被更新為‘10’。隊(duì)列397的第一個表項(xiàng)中的軌跡點(diǎn)號碼通過總線389被送到比較器361,該第一個表項(xiàng)中的基地址寄存器號碼(BPl)被送到處理器核125,該第一個表項(xiàng)中的偏移量通過總線382被送到加法器372。與此同時(shí),當(dāng)前指令指針360隨指令執(zhí)行流移動。當(dāng)前指令指針360表示指令段中正在被執(zhí)行的指令的位置信息。例如,該位置信息可以是程序計(jì)數(shù)(PC)的低地址。當(dāng)前指令指針360指向的軌跡點(diǎn)的軌跡號碼也被送到比較器361。當(dāng)比較器361判斷從當(dāng)前指令指針360來的號碼大于或等于從隊(duì)列397通過總線389送來的號碼(即軌跡點(diǎn)號碼‘3’ )時(shí),表示最后更新寄存器指令已經(jīng)被執(zhí)行,且BPl基地址寄存器已經(jīng)被更新為所需要的值。從比較器361送到加法器372的使能信號365被設(shè)為有效。這樣,從處理器核125來的基地址寄存器的值可以通過總線373被送到加法器372。加法器372可以通過基地址值加上偏移量的方式完成數(shù)據(jù)地址的計(jì)算,并將計(jì)算得到的數(shù)據(jù)地址通過總線375送到主動表195。之后,主動表195可以進(jìn)行匹配操作。后續(xù)的諸如數(shù)據(jù)填充等操作與之前所述類似。因此,隊(duì)列397被用于存儲讀/寫指令相關(guān)軌跡點(diǎn)的信息,如軌跡點(diǎn)3(351)、軌跡點(diǎn)7(352)、軌跡點(diǎn)10(353)和軌跡點(diǎn)12(354)等。也可以使用同一結(jié)構(gòu)在按順序完成相應(yīng)的指令段和數(shù)據(jù)段填充操作后更新或清除隊(duì)列397。在某些指令與/或數(shù)據(jù)緩存實(shí)施例中,軌道表126的尺寸可以是被大為縮小或者被完全取消,使得相關(guān)操作(比如掃描,匹配與預(yù)填充等)在需要用到時(shí)才實(shí)時(shí)進(jìn)行(Real time, on the fly)。圖27A顯示了一個實(shí)時(shí)(on the fly)緩存2700的實(shí)施例。如圖27A所示,緩存結(jié)構(gòu)2700中包括主動表121,生成器130,分支判斷單元502,緩沖器504,與選擇器508。也可能包括更多器件。高層次存儲器124里可以填有來自低層次存儲器或其他存儲器通過總線140輸入的指令。如前所述,高層次存儲器124可以由BNX 521尋址。高層次存儲器124也可以輸出一個存儲塊以填充緩沖器504或供處理器核125直接使用。高層次存儲器124中的每個存儲塊可以與主動表121中的表項(xiàng)對應(yīng)。緩充器504可以是一個多口存儲器。例如,緩沖器504可以有三個口,一個供高層次存儲器124將多條指令寫入緩沖器504的寫口,一個供生成器130從緩沖器504讀出指令以供掃描的第一讀口,還有一個CPU核125經(jīng)過選擇器508從緩沖器504讀指令的第二讀口。緩沖器504有合適的尺寸。比如緩沖器504的大小與一個存儲器塊,或者說指令塊相當(dāng)。處理器核125對從選擇器508而來的指令譯碼并執(zhí)行產(chǎn)生BNY 532。處理器核125也可以產(chǎn)生是否分支與/或跳轉(zhuǎn)信號528。選擇器508由信號529控制來選擇從高層次存儲器124或者緩沖器504來的指令。因?yàn)樘幚砥骱?25正在執(zhí)行的指令在緩沖器504中,生成器130可以在指令被處理器核125譯碼并執(zhí)行之前就從緩沖器504的第一讀口中掃描指令。因?yàn)榫彌_器504中 的內(nèi)容是相應(yīng)與高層次存儲器124中的一個存儲塊,掃描操作與之前描述過的緩存結(jié)構(gòu)相似,比如找出分支指令,計(jì)算分支目標(biāo)地址,并將分支目標(biāo)地址送往主動表121來進(jìn)行匹配
操作等等。當(dāng)生成器130找到一個分支指令,生成器130計(jì)算所找到分支指令的分支目標(biāo)地址將分支目標(biāo)地址送往主動表121。生成器130也將分支指令的類型(比如條件或非條件分支)送至分支判斷單元502。主動表121接收生成器130送來的分支目標(biāo)地址,并將分支目標(biāo)地址與主動表121的內(nèi)容匹配以尋找相應(yīng)的指令存儲塊號碼BNX 521。如果主動表121的內(nèi)容與從生成器130送來的分支目標(biāo)地址不匹配,分支目標(biāo)地址被送往低級存儲器(此處未顯示)取相應(yīng)的存儲塊并將取到的相應(yīng)存儲塊填充到高層次存儲器124。在主動表121中也新增與分支目標(biāo)地址相應(yīng)的一個表項(xiàng)。另一方面如果主動表121的內(nèi)容與從生成器130送來的分支目標(biāo)地址有匹配,主動表就將相應(yīng)的存儲器塊號BNX送往高層次存儲器124以尋址一個存儲器塊。這個存儲塊的內(nèi)容也可以被輸出到緩沖器504與/或處理器核125。處理器核125向高層次存儲器124與緩沖器504提供塊內(nèi)偏移量BNY 532來尋址塊內(nèi)的具體指令。處理器核125也提供信號528至分支判斷單元502以傳遞分支與否信息。進(jìn)一步,分支判斷單元502基于分支類型信號527與分支與否信號528產(chǎn)生信號529用以控制選擇器531,也選擇是否用高層次存儲器124輸出的指令塊替換緩沖器504的內(nèi)容。如果判斷結(jié)果是不進(jìn)行分支,那么信號509控制選擇器508選擇來自緩沖器504的輸出(分支指令后的指令)也控制緩沖器504保持現(xiàn)有內(nèi)容不變。在此情況下,處理器核125執(zhí)行分支指令后的指令。但是,如果判斷結(jié)果是進(jìn)行分支,那么信號509控制選擇器508選擇高層次存儲器124的輸出(分支目標(biāo))也控制緩沖器504用高層次存儲器124的輸出更新緩沖器504的內(nèi)容。在這個情況下,處理器核125執(zhí)行分支目標(biāo)指令及分支目標(biāo)指令后的指令。在上述兩種情況下,生成器130都在不斷尋找下一條分支指令并重復(fù)上述過程。因?yàn)樯善?30掃描指令的速度高于處理器核125執(zhí)行指令的速度,分支目標(biāo)指令可以在被執(zhí)行到之前就被填入高層次存儲器124。結(jié)構(gòu)2700可以被進(jìn)一步優(yōu)化。圖27B顯示了另外一個緩存結(jié)構(gòu)2750的例子。緩存結(jié)構(gòu)2750與圖27A的緩存結(jié)構(gòu)2700相似,但緩存結(jié)構(gòu)2750可含有一個額外的緩沖器506和一個選擇器507,如圖27B所示。這就是緩沖器504上帶有一個附加緩沖器506。緩沖器506可以存放一些有助于提高掃描速度的信息。更具體地說,當(dāng)主動表121找到一個匹配而產(chǎn)生一個相應(yīng)的塊號碼BNX 521時(shí),BNX 521不僅被用于尋址高層次存儲器124,它也被存于緩沖器506中與原來的分支指令相應(yīng)的一個表項(xiàng)。當(dāng)下一次生成器130掃描到這個表項(xiàng)時(shí),BNX可以直接從緩沖器506讀出并通過總線523送至選擇器507 (由這一個BNX的有效性控制)通過地址總線525去高層次存儲器124尋址。如此,減少了主動表121的匹配次數(shù)來降低功耗,降低延遲。另外,如 果高層次存儲器124本身是個多口的存儲器,那么這里緩沖器504與高層次存儲器124的功能可以由高層次存儲器124單獨(dú)完成。在操作過程中,由于軌道表中的總行數(shù)是有限的,可能需要將已經(jīng)存在的行替換為新的行。當(dāng)判斷哪個行被替換時(shí),通常而言,軌道表601可以使用一個類似LRU或LFU的策略以決定一個或多個行被替換,這也表示在一級緩存中的對應(yīng)指令/存儲塊和主動表121中的對應(yīng)表項(xiàng)也要被更新或替換。然而,當(dāng)一個存儲塊(和對應(yīng)的軌道表行)被替換時(shí),其他的軌道表行可能具有以被替換掉的行作為分支目標(biāo)的分支指令(軌道表中具有包含被替換掉的行的BNX的行)。在這種情況下,當(dāng)替換發(fā)生時(shí),以被替換掉的行作為分支目標(biāo)的分支指令會轉(zhuǎn)移到不同的指令塊從而導(dǎo)致錯誤??梢詫?shí)現(xiàn)某些機(jī)制以防止這樣的錯誤發(fā)生。圖28A-B顯示了根據(jù)本發(fā)明技術(shù)方法改進(jìn)的軌道表601的實(shí)施例。如圖28A所示,軌道表601可以包含行‘O’ - ‘3’,列‘Y0’- ‘Y7’和一個結(jié)尾列。軌道表601中的每個表項(xiàng)可以具有軌道表601能識別的各種類型中的一種類型。例如,包含對應(yīng)條件分支指令的‘BR’類型和對應(yīng)無條件分支指令的‘J’類型的各種類型,且分支指令類型‘BR’和‘J’都包含一個對應(yīng)表項(xiàng)的BNX值以表不分支目標(biāo)存儲塊號碼。各種類型也包含‘Null’以對應(yīng)非分支指令類型,和‘PC’表示尚沒有對應(yīng)表項(xiàng)的BNX的分支指令。這就是說,‘PC’類型表示一個還沒有被分配的BNX,且對應(yīng)的存儲塊需要被讀出以計(jì)算分支目標(biāo)地址。其他類型也可以被包含以實(shí)現(xiàn)其他操作,如數(shù)據(jù)緩存操作。當(dāng)建立一行或一條軌道時(shí),某些表項(xiàng)可以被標(biāo)記為PC。軌道表601中每行的結(jié)尾列具有一個跳轉(zhuǎn)類型及對應(yīng)的BNX值以表示后續(xù)指令被存儲在哪個存儲塊中。具體地,行‘ O ’可以具有一個為‘BR2 ’的表項(xiàng)602,表示是一條具有目標(biāo)BNX值‘ 2 ’的分支指令(即,行‘2’ );一個為‘BR1’的表項(xiàng)603,表示是一條具有目標(biāo)BNX值‘I’的分支指令;和一個為‘J1’的表項(xiàng)604,表示是一個后續(xù)指令在行‘I’的跳轉(zhuǎn)。行‘I’可以具有一個為‘BR3’的表項(xiàng)605,表示一條目標(biāo)BNX值為‘3’的分支指令;一個為‘BR2’的表項(xiàng)606 ;和一個為‘J2’的表項(xiàng)607。行‘2’可以具有一個為‘BR1’的表項(xiàng)608 ;—個為‘BR1’的表項(xiàng)609 ;和一個為‘J3’的表項(xiàng)610。此外,行‘3’可以具有一個為‘BR0’的表項(xiàng)611,表示是一條具有目標(biāo)BNX值‘0’的分支指令和一個為‘BR1’的表項(xiàng)612。也可以包含其他類型。相關(guān)表613可以具有與軌道表601中行數(shù)相同的行,而列數(shù)等于行數(shù)。這就是說,相關(guān)表613是一個N乘N的表,其中N對應(yīng)軌道表601行的數(shù)目。相關(guān)表613中每行對應(yīng)軌道表601中的每行。對于相關(guān)表613中的某一行,如果在軌道表601中的對應(yīng)行中有分支指令,那么相關(guān)表613中該行中以該分支指令的目標(biāo)BNX作為列地址的表項(xiàng)的值被設(shè)為‘I’。如果在軌道表601中的對應(yīng)行中有超過一條分支指令,那么相關(guān)表項(xiàng)的值也被類似地設(shè)為‘I’。在該相關(guān)表上,行上所有‘I’的項(xiàng)代表一個分支源,列上的任意為‘I’的項(xiàng)代表以該列號碼作為軌道表601中行號碼的行是分支目標(biāo)。具體地,由于軌道表601中的行‘0’包含兩條分支指令,‘BR2’和‘BR1’,相關(guān)表613中的兩個表項(xiàng)614和615,(0,1)和(0,2)被設(shè)為‘I’。類似地,表項(xiàng)616 (I,2),617 (I,3),618(2,I) ,620(3,0) ,621 (3,I)都被設(shè)為‘I’。把每個列上的各行值相加可以計(jì)算出一個總數(shù),這個總數(shù)就是能轉(zhuǎn)移進(jìn)入以該列號碼作為軌道表601中行號碼的行的行的總數(shù)目。總數(shù)目622、623、624和625分別為列‘O’、‘I’、‘2’、‘3’的總數(shù)目,分別為‘I’、‘3’、‘2’和‘2’。該總數(shù)目可以被用于在超過一行可以被替換時(shí),確定替換哪個行。此外,一個有效列626可以被用于表不相關(guān)表613中的行是否有效。該有效列626包含分別對應(yīng)相關(guān)表613 中各行的位627、位628、位629和位630。軌道表601中一個跳轉(zhuǎn)到本行的行不必一定表示在相關(guān)表613中。當(dāng)軌道表601中的一個行需要被替換時(shí)(如當(dāng)軌道表601中的所有行都已經(jīng)被填充,而新的內(nèi)容需要被填充到一級緩存和軌道表601中時(shí),根據(jù)LRU策略找到行‘O’。在行‘0’被替換前,或當(dāng)行‘0’被替換時(shí),訪問相關(guān)表613以找到軌道表601中會受這個替換影響的任何行。這就是說,用將被替換的行的號碼即‘0’ )作為列號碼在相關(guān)表613中查找。讀出相關(guān)表613的列‘0’,該列上所有具有值‘I’的表項(xiàng)對應(yīng)的行都會受該替換影響。具體地,在這里列‘0’,行‘3’的表項(xiàng)為‘1’,表示行‘3’具有一條以行‘0’為分支目標(biāo)的分支指令。檢測軌道表601的行‘3’,將該行中任何以行‘0’為分支目標(biāo)的表項(xiàng)替換為‘PC’,以表示此處沒有已知的分支目標(biāo)BNX值。當(dāng)循跡器(如領(lǐng)先指針)到達(dá)該表項(xiàng)時(shí),“PC”會觸發(fā)系統(tǒng)再次讀出相應(yīng)的分支指令塊并重新計(jì)算其分支目標(biāo),從而重新分配一個新BNX到該“PC”軌道表項(xiàng)中(這也包括對一級緩存、主動表和軌道表等的相應(yīng)填充)。如圖28B所示,當(dāng)所有受影響的行都處理(如替換為‘PC’)完畢之后,相關(guān)表613的行‘0’的表項(xiàng)被設(shè)為‘0’ ;相關(guān)表613中列‘0’的表項(xiàng)也被設(shè)為‘O’。此時(shí),軌道表601的行‘0’可以被新的內(nèi)容填充。圖29顯示了使用了圖28A-B中所述相關(guān)表的緩存結(jié)構(gòu)2900。如圖29所示,緩存結(jié)構(gòu)2900與之前所述的緩存結(jié)構(gòu)類似。然而,緩存結(jié)構(gòu)2900包含一個連接在軌道表126和主動表121之間的相關(guān)表557。此外,當(dāng)在軌道表126中到達(dá)一個‘PC’表項(xiàng)時(shí),生成器130可以掃描對應(yīng)的存儲塊而不是重新計(jì)算分支目標(biāo)地址。本發(fā)明所述系統(tǒng)和方法可以為數(shù)字系統(tǒng)使用的緩存結(jié)構(gòu)提供基本的解決方案。與傳統(tǒng)緩存系統(tǒng)僅在緩存缺失后才填充的機(jī)制不同,本發(fā)明所述的系統(tǒng)和方法在處理器執(zhí)行一條指令或訪問一個數(shù)據(jù)之前就對指令緩存和數(shù)據(jù)緩存進(jìn)行填充,可以避免或充分地隱藏強(qiáng)制缺失。這就是說,本發(fā)明所述緩存系統(tǒng)集成了預(yù)取過程,并消除了傳統(tǒng)緩存必須的標(biāo)簽比較過程。此外,本發(fā)明所述系統(tǒng)和方法在本質(zhì)上提供了一個全相聯(lián)的緩存結(jié)構(gòu),避免或充分隱藏了沖突缺失和容量缺失。此外,本發(fā)明所述的系統(tǒng)和方法支持同時(shí)搜索多層緩存結(jié)構(gòu),因此降低了多層緩存的缺失懲罰。本發(fā)明所述的系統(tǒng)和方法還因?yàn)楸苊饬嗽谠L問緩存的時(shí)延關(guān)鍵路徑上的標(biāo)簽匹配,所以能運(yùn)行在較高的時(shí)鐘頻率。由于本發(fā)明所述的系統(tǒng)和方法需要的匹配操作較少,并有較低的缺失率,因此單位功耗下的效率也比傳統(tǒng)緩存系統(tǒng)有顯著提高。此外,本發(fā)明所述系統(tǒng)和方法可以使用一個獨(dú)立的數(shù)據(jù)緩存控制 結(jié)構(gòu)或集成的指令/數(shù)據(jù)緩存控制結(jié)構(gòu)在需要訪問數(shù)據(jù)的指令執(zhí)行前將該數(shù)據(jù)填充到數(shù)據(jù)緩存中。對于本領(lǐng)域?qū)I(yè)人士而言,本發(fā)明的其他優(yōu)點(diǎn)和應(yīng)用是顯見的。
權(quán)利要求
1.一個數(shù)字系統(tǒng),包括 一個處理器核,所述處理器核連接一個包含數(shù)據(jù)的第一存儲器和一個比第一存儲器速度更快的第二存儲器,且所述處理器用于執(zhí)行一段包含至少一條使用一個基地址在第二存儲器中訪問數(shù)據(jù)的指令,和 一個緩存控制單元,所述緩存控制單元連接第一存儲器、第二存儲器和處理器核,用于在處理器核執(zhí)行訪問數(shù)據(jù)的指令前將數(shù)據(jù)從第一存儲器填充到第二存儲器中, 其特征在于所述緩存控制單元可進(jìn)一步用于 對指令段進(jìn)行審查,從而提取出至少包含數(shù)據(jù)訪問指令信息和最后更新寄存器指令信息的指令信息, 根據(jù)提取出的指令信息建立對應(yīng)指令段的軌道, 在最后更新至少一條訪問數(shù)據(jù)的指令所用的寄存器的指令執(zhí)行后,根據(jù)指令段對應(yīng)的軌道將第一存儲器中的數(shù)據(jù)填充到第二存儲器中。
2.根據(jù)權(quán)利要求I所述數(shù)字系統(tǒng),其特征在于 所述軌道包含復(fù)數(shù)個軌跡點(diǎn),每個對應(yīng)指令段中的一條指令。
3.根據(jù)權(quán)利要求2所述數(shù)字系統(tǒng),其特征在于 數(shù)據(jù)尋址格式為基地址寄存器加上偏移量的方式。
4.根據(jù)權(quán)利要求3所述數(shù)字系統(tǒng),其特征在于 數(shù)據(jù)訪問指令信息包含一個數(shù)據(jù)訪問指令標(biāo)志,一個基地址寄存器號和一個偏移量;和 寄存器更新指令信息包含一個寄存器更新指令標(biāo)志和一個基地址寄存器號。
5.根據(jù)權(quán)利要求I所述數(shù)字系統(tǒng),其特征在于緩存控制單元進(jìn)一步包括 一個沿指令段以比指向當(dāng)前正在被處理器核執(zhí)行的當(dāng)前指令指針更快速度移動的用以提取指令信息的數(shù)據(jù)指針,并停止在至少一條訪問數(shù)據(jù)的指令處。
6.根據(jù)權(quán)利要求5所述數(shù)字系統(tǒng),其特征在于緩存控制單元進(jìn)一步用于 將所有更新基地址寄存器的指令的位置信息存儲到相應(yīng)的基地址寄存器位置寄存器中; 對當(dāng)前指令指針和存儲在基地址寄存器位置寄存器中的對應(yīng)至少一條訪問數(shù)據(jù)指令的位置信息進(jìn)行比較;和 如果當(dāng)前指令指針大于或等于存儲在基地址寄存器位置寄存器中的位置信息,那么生成一個信號從而基于基地址產(chǎn)生完整數(shù)據(jù)地址。
7.根據(jù)權(quán)利要求6所述數(shù)字系統(tǒng),其特征在于緩存控制單元進(jìn)一步用于 根據(jù)完整的數(shù)據(jù)地址將數(shù)據(jù)從第一存儲器填充到第二存儲器。
8.根據(jù)權(quán)利要求6所述數(shù)字系統(tǒng),其特征在于緩存控制單元進(jìn)一步用于 對該完整地址和一個主動表中的表項(xiàng)進(jìn)行匹配以確定數(shù)據(jù)是否已經(jīng)在第二存儲器中; 當(dāng)沒有表項(xiàng)與該完整地址匹配成功時(shí),在主動表中建立一個包含該數(shù)據(jù)的數(shù)據(jù)塊號的新表項(xiàng),并使用這個數(shù)據(jù)塊號將數(shù)據(jù)填充到第二存儲器中;和 當(dāng)有一個表項(xiàng)與該完整地址匹配成功時(shí),從該表項(xiàng)中獲取該數(shù)據(jù)對應(yīng)的數(shù)據(jù)塊號。
9.根據(jù)權(quán)利要求6所述數(shù)字系統(tǒng),其特征在于緩存控制單元進(jìn)一步包括一個用于保存供處理器核按順序訪問復(fù)數(shù)個數(shù)據(jù)塊的對應(yīng)這復(fù)數(shù)個數(shù)據(jù)塊的復(fù)數(shù)個數(shù)據(jù)塊號的隊(duì)列。
10.根據(jù)權(quán)利要求I所述數(shù)字系統(tǒng),其特征在于 所述軌道也被用做指令段的軌道,用以將指令段填充到與第二存儲器中數(shù)據(jù)部分不同的部分。
11.根據(jù)權(quán)利要求10所述數(shù)字系統(tǒng),其特征在于指令信息進(jìn)一步包括分支指令信息,和緩存控制單元進(jìn)一步包括 一個沿指令段以比指向當(dāng)前正在被處理器核執(zhí)行的當(dāng)前指令指針更快速度運(yùn)行的用以提取指令信息的數(shù)據(jù)指針,并停止在第一條分支指令處,而不是停止在至少一條訪問數(shù)據(jù)的指令處。
12.根據(jù)權(quán)利要求11所述數(shù)字系統(tǒng),其特征在于 所述分支指令信息包括直接尋址分支指令信息和間接尋址分支指令信息。
13.一種用于輔助處理器核運(yùn)行的方法,所述處理器核連接一個包含可執(zhí)行指令的第一存儲器和一個比第一存儲器速度更快的第二存儲器,并用于執(zhí)行至少包含一條使用一個基地址寄存器訪問第二存儲器中數(shù)據(jù)的指令的指令段;所述方法包括 對指令段進(jìn)行審查,從而提取出至少包括數(shù)據(jù)訪問指令信息和最后寄存器更新指令信息的指令信息; 根據(jù)提取出的指令信息建立對應(yīng)該指令段的軌道; 在最后更新至少一條數(shù)據(jù)訪問指令所用的寄存器的指令執(zhí)行后且在處理器核執(zhí)行該數(shù)據(jù)訪問指令之前,根據(jù)指令段對應(yīng)的軌道將第一存儲器中的數(shù)據(jù)填充到第二存儲器中。
14.根據(jù)權(quán)利要求13所述方法,其特征在于 所述軌道包含復(fù)數(shù)個軌跡點(diǎn),每個對應(yīng)指令段中的一條指令;和 數(shù)據(jù)的尋址格式為基地址寄存器加上偏移量。
15.根據(jù)權(quán)利要求14所述方法,其特征在于 數(shù)據(jù)訪問指令信息包含一個數(shù)據(jù)訪問指令標(biāo)志,一個基地址寄存器號和一個偏移量;和 寄存器更新指令信息包含一個寄存器更新指令標(biāo)志和一個基地址寄存器號。
16.根據(jù)權(quán)利要求13所述方法,其特征在于進(jìn)一步包括 使用一個數(shù)據(jù)指針沿指令段以比指向當(dāng)前正在被處理器核執(zhí)行的當(dāng)前指令指針更快速度移動,從而提取指令信息,并停止在至少一條訪問數(shù)據(jù)的指令處。
17.根據(jù)權(quán)利要求16所述方法,其特征在于進(jìn)一步包括 將所有更新基地址寄存器的指令的位置信息存儲到相應(yīng)的基地址寄存器位置寄存器中; 對當(dāng)前指令指針和存儲在基地址寄存器位置寄存器中的對應(yīng)至少一條數(shù)據(jù)訪問指令的位置信息進(jìn)行比較;和 如果當(dāng)前指令指針大于或等于存儲在基地址寄存器位置寄存器中的位置信息,那么生成一個信號從而基于基地址產(chǎn)生完整數(shù)據(jù)地址。
18.根據(jù)權(quán)利要求17所述方法,其特征在于進(jìn)一步包括 根據(jù)完整的數(shù)據(jù)地址將數(shù)據(jù)從第一存儲器填充到第二存儲器。
19.根據(jù)權(quán)利要求17所述方法,其特征在于進(jìn)一步包括 對該完整地址和一個主動表中的表項(xiàng)進(jìn)行匹配以確定數(shù)據(jù)是否已經(jīng)在第二存儲器中; 當(dāng)沒有表項(xiàng)與該完整地址匹配成功時(shí),在主動表中建立一個包含該數(shù)據(jù)的數(shù)據(jù)塊號的新表項(xiàng),并使用這個數(shù)據(jù)塊號將數(shù)據(jù)填充到第二存儲器中;和 當(dāng)有一個表項(xiàng)與該完整地址匹配成功時(shí),從該表項(xiàng)中獲取該數(shù)據(jù)對應(yīng)的數(shù)據(jù)塊號。
20.根據(jù)權(quán)利要求13所述方法,其特征在于 所述軌道也被用做指令段的軌道,用以將指令段填充到與第二存儲器中數(shù)據(jù)部分不同的部分。
全文摘要
本發(fā)明給出了一個包含了一個處理器核和一個緩存控制單元數(shù)字系統(tǒng)。該處理器核連接一個包含數(shù)據(jù)的第一存儲器和一個比第一存儲器速度更快的第二存儲器,且該處理器用于執(zhí)行一段包含至少一條使用一個基地址寄存器在第二存儲器中訪問數(shù)據(jù)的指令。該緩存控制單元連接第一存儲器、第二存儲器和處理器核,用于在處理器核執(zhí)行訪問數(shù)據(jù)的指令前將數(shù)據(jù)從第一存儲器填充到第二存儲器中。此外,該緩存控制單元可進(jìn)一步用于對指令段進(jìn)行審查,從而提取出至少包含數(shù)據(jù)訪問指令信息和最后更新寄存器指令信息的指令信息,并根據(jù)提取出的指令信息建立對應(yīng)指令段的軌道,該緩存控制單元還可進(jìn)一步用于在最后更新至少一條訪問數(shù)據(jù)的指令所用的寄存器的指令執(zhí)行后,根據(jù)指令段對應(yīng)的軌道將第一存儲器中的數(shù)據(jù)填充到第二存儲器中。
文檔編號G06F13/16GK102841865SQ201110180079
公開日2012年12月26日 申請日期2011年6月24日 優(yōu)先權(quán)日2011年6月24日
發(fā)明者林正浩 申請人:上海芯豪微電子有限公司