高性能指令緩存系統(tǒng)和方法【專利摘要】一種高性能指令緩存系統(tǒng)和方法,應(yīng)用于處理器領(lǐng)域時能在處理器核執(zhí)行指令前,將所述指令填充到所述處理器核能直接訪問的高速存儲器中,幾乎使所述處理器核每次都能在所述高速存儲器中獲取到需要的指令,達(dá)到極高的緩存命中率?!緦@f明】高性能指令緩存系統(tǒng)和方法【
技術(shù)領(lǐng)域:
】[0001]本發(fā)明涉及計(jì)算機(jī),通訊及集成電路領(lǐng)域。【
背景技術(shù):
】[0002]通常緩存的作用是將更低級存儲器中的部分內(nèi)容復(fù)制在其中,使這些內(nèi)容能被更高級存儲器或處理器核快速存取,以保證流水線的持續(xù)運(yùn)行。[0003]現(xiàn)行緩存的尋址都基于以下方式,用地址中的索引段尋址讀出標(biāo)簽存儲器中的標(biāo)簽與地址中的標(biāo)簽段進(jìn)行匹配;用地址中索引段與塊內(nèi)位移段共同尋址讀出緩存中的內(nèi)容。如果從標(biāo)簽存儲器中讀出的標(biāo)簽與地址中的標(biāo)簽段相同,那么從緩存中讀出的內(nèi)容有效,稱為緩存命中。否則,如果從標(biāo)簽存儲器中讀出的標(biāo)簽與地址中的標(biāo)簽段不相同,稱為緩存缺失,從緩存中讀出的內(nèi)容無效。對于多路組相聯(lián)的緩存,同時對各個路組并行進(jìn)行上述操作,以檢測哪個路組緩存命中。命中路組對應(yīng)的讀出內(nèi)容為有效內(nèi)容。若所有路組都為缺失,則所有讀出內(nèi)容都無效。緩存缺失之后,緩存控制邏輯將低級存儲媒介中的內(nèi)容填充到緩存中。[0004]現(xiàn)有技術(shù)中,受限于功耗及速度限制(如因?yàn)槎嗦方M相聯(lián)緩存結(jié)構(gòu)要求將所有路組由同一索引尋址的內(nèi)容及標(biāo)簽同時讀出并比較),為了達(dá)到更高的性能,一般采用低層次緩存路組數(shù)大于高層次緩存路組數(shù)的組成方式。此外,緩存缺失可分為三類狀況:強(qiáng)制缺失、沖突缺失和容量缺失。在現(xiàn)有技術(shù)中,除了預(yù)取成功的小部分外,強(qiáng)制缺失是不可避免的。[0005]現(xiàn)代的緩存系統(tǒng)通常由多路組相連的多層次緩存構(gòu)成。新的緩存結(jié)構(gòu),如:犧牲緩存、跟蹤緩存以及預(yù)取等都是基于上述基本緩存結(jié)構(gòu)并改善上述結(jié)構(gòu)。然而,隨著日漸擴(kuò)大的處理器/存儲器速度鴻溝,現(xiàn)行體系結(jié)構(gòu),特別是多種緩存缺失,已成為是制約現(xiàn)代處理器性能提升的最嚴(yán)重瓶頸。[0006]本發(fā)明提出的方法與系統(tǒng)裝置能直接解決上述或其他的一個或多個困難?!?br/>發(fā)明內(nèi)容】[0007]本發(fā)明提出了一種高性能指令緩存方法,其特征在于,處理器核連接一個包含可執(zhí)行指令的第一存儲器、一個比第一存儲器速度更快的第二存儲器;所述方法包括:對正被從第二存儲器填充到第一存儲器的指令進(jìn)行審查,從而提取出至少包括分支信息的指令信息;根據(jù)提取出的指令信息建立復(fù)數(shù)條軌道;根據(jù)復(fù)數(shù)條指令軌道中的一條或多條軌道將至少一條或多條指令可能被處理器核執(zhí)行的指令從第一存儲器填充到第二存儲器;所述方法進(jìn)一步包括,第二存儲器采用全相聯(lián)的方式構(gòu)成,第一存儲器由組相聯(lián)的方式構(gòu)成。[0008]可選的,將軌道與第二存儲器中的指令塊--對應(yīng)。[0009]可選的,通過一級塊號對目標(biāo)地址進(jìn)行尋址,從而確定該目標(biāo)指令是否屬于第一存儲器的某個指令塊。[0010]可選的,通過匹配,將二級塊號寫入軌道表,等到第一存儲器中的指令填充到第二存儲器中時,將其更改為一級塊號。[0011]可選的,對軌道進(jìn)行掃描,一旦發(fā)現(xiàn)有對主動表塊號的引用就將主動表對應(yīng)塊號的標(biāo)志位置位;同時依次將主動表中各個塊號的標(biāo)志位復(fù)位,從而用已置位的標(biāo)志位表示當(dāng)前被軌道引用的塊號,使之不會被替換出主動表。[0012]本發(fā)明還提出了一種高性能指令緩存系統(tǒng),其特征在于,所述系統(tǒng)包括:處理器核,所述處理器核用以執(zhí)行指令;第一存儲器,所述第一存儲器用以存儲所述處理器核所需指令;第二存儲器,所述第二存儲器用以存儲所述處理器核所需指令,且所述第二存儲器的速度比所述第一存儲器更快;掃描器,所述掃描器用以對正被從第二存儲器填充到第一存儲器的指令進(jìn)行審查,從而提取出至少包括分支信息的指令信息;軌道表,所述軌道表用以存儲根據(jù)提取出的指令信息建立的復(fù)數(shù)條軌道;所述系統(tǒng)進(jìn)一步包括:第二存儲器采用全相聯(lián)的方式構(gòu)成;和第一存儲器由組相聯(lián)的方式構(gòu)成。[0013]可選的,將軌道表中的軌道與第二存儲器中的指令塊--對應(yīng)。[0014]可選的,第一存儲器中的每個指令塊對應(yīng)一個一級塊號。[0015]可選的,在所述方法中,對正被從第一存儲器填充到第二存儲器的指令進(jìn)行審查,從而提取出至少包括分支信息的指令信息;根據(jù)提取出的指令信息建立復(fù)數(shù)條軌道;根據(jù)復(fù)數(shù)條指令軌道中的一條或多條軌道將至少一條或多條指令可能被處理器核執(zhí)行的指令從第一存儲器填充到第二存儲器;通過一級塊號對目標(biāo)地址進(jìn)行尋址,從而確定該目標(biāo)指令是否屬于第二存儲器的某個指令塊。[0016]可選的,在所述方法中,當(dāng)?shù)谝淮鎯ζ髦幸粋€指令塊對應(yīng)的順序地址的前一指令塊或后一指令塊已經(jīng)存儲在第一存儲器中時,主動表中存儲了該指令塊對應(yīng)的所述前一指令塊或后一指令塊在第一存儲器中的存儲位置信息。[0017]可選的,在所述方法中,當(dāng)指令位于第一存儲器中當(dāng)前指令塊的前一指令塊或后一指令塊中時,可以根據(jù)存儲在主動表中的所述前一指令塊或后一指令塊的位置信息,直接在第一存儲器中找到該指令。[0018]可選的,在所述方法中,對分支目標(biāo)指令地址進(jìn)行邊界判斷;根據(jù)所述判斷結(jié)果,對位于不同位置的分支目標(biāo)指令給予不同格式的地址。[0019]可選的,在所述方法中,若分支目標(biāo)指令地址位于分支指令在第一存儲器中所在指令塊的前一或后一指令塊中,則以該分支指令所在指令塊的前一或后一指令塊的二級塊號作為該分支目標(biāo)指令的二級塊號,以該分支目標(biāo)指令地址中對應(yīng)第一存儲器的地址偏移量部分作為該分支目標(biāo)指令的偏移量。[0020]可選的,在所述方法中,將正被從第一存儲器填充到第二存儲器的指令對應(yīng)的主動表內(nèi)容存儲在微型主動表中;若審查發(fā)現(xiàn)分支目標(biāo)指令位于分支指令的同一個二級指令塊中的不同一級指令塊、且該一級指令塊在微型主動表中對應(yīng)的一級塊號有效時,直接以從微型主動表中讀出的所述一級塊號作為所述分支目標(biāo)指令的一級塊號;若審查發(fā)現(xiàn)分支目標(biāo)指令位于分支指令的同一個二級指令塊中的不同一級指令塊、但該一級指令塊在微型主動表中對應(yīng)的一級塊號無效時,直接以所述分支指令的二級塊號作為所述分支目標(biāo)指令的二級塊號;若審查發(fā)現(xiàn)分支目標(biāo)指令位于分支指令的前一個或后一個二級指令塊、且該前一個或后一個二級指令塊在微型主動表中對應(yīng)的二級塊號有效時,直接以從微型主動表中讀出的所述二級塊號作為所述分支目標(biāo)指令的二級塊號。[0021]可選的,在所述方法中,將復(fù)數(shù)個二級塊號及這些塊號在主動表中對應(yīng)的內(nèi)容存儲在微型主動表中;在若審查發(fā)現(xiàn)分支目標(biāo)指令時,首先將分支目標(biāo)指令地址在所述微型主動表中匹配,若匹配成功,則直接以從微型主動表中讀出的一級塊號或二級塊號作為所述分支目標(biāo)指令的一級塊號或二級塊號;若匹配不成功,則再將分支目標(biāo)指令地址送往主動表匹配。[0022]可選的,所述系統(tǒng)包括:處理器核,所述處理器核用以執(zhí)行指令;第一存儲器,所述第一存儲器用以存儲所述處理器核所需指令;第二存儲器,所述第二存儲器用以存儲所述處理器核所需指令,且所述第二存儲器的速度比所述第一存儲器更快;掃描器,所述掃描器用以對正被從第一存儲器填充到第二存儲器的指令進(jìn)行審查,從而提取出至少包括分支信息的指令信息;軌道表,所述軌道表用以存儲根據(jù)提取出的指令信息建立的復(fù)數(shù)條軌道;第二存儲器中的每個指令塊對應(yīng)一個一級塊號。[0023]可選的,在所述系統(tǒng)中,主動表的表項(xiàng)與第一存儲器中的指令塊對應(yīng),每個表項(xiàng)存儲了第一存儲器中相應(yīng)指令塊的塊地址;且當(dāng)?shù)谝淮鎯ζ髦幸粋€指令塊對應(yīng)的順序地址的前一指令塊或后一指令塊已經(jīng)存儲在第一存儲器中時,主動表中還存儲了該指令塊對應(yīng)的所述前一指令塊或后一指令塊在第一存儲器中的存儲位置信息。[0024]可選的,在所述系統(tǒng)中,對分支目標(biāo)指令地址進(jìn)行邊界判斷;根據(jù)所述判斷結(jié)果,對位于不同位置的分支目標(biāo)指令給予不同格式的地址。[0025]可選的,所述系統(tǒng)包含單數(shù)個或復(fù)數(shù)個加法器;所述加法器用于對分支指令本身在第一存儲器對應(yīng)的偏移量以外部分中的低位與分支轉(zhuǎn)移距離中的相應(yīng)位相加,判斷所述分支目標(biāo)指令是否位于第一存儲器中所述分支指令所在的指令塊順序地址的前一個或后一個指令塊中;當(dāng)分支目標(biāo)指令位于第一存儲器中當(dāng)前指令塊的前一指令塊或后一指令塊中時,可以根據(jù)存儲在主動表中的所述前一指令塊或后一指令塊的位置信息,直接在第一存儲器中找到該指令。[0026]可選的,所述系統(tǒng)還包括微型主動表;所述微型主動表用于存儲正被從第一存儲器填充到第二存儲器的指令對應(yīng)的主動表內(nèi)容;當(dāng)掃描器若審查發(fā)現(xiàn)分支目標(biāo)指令位于分支指令的冋Iv~■級指令塊中的不冋一級指令塊、且該一級指令塊在微型王動表中對應(yīng)的一級塊號有效時,直接以從微型主動表中讀出的所述一級塊號作為所述分支目標(biāo)指令的一級塊號;若審查發(fā)現(xiàn)分支目標(biāo)指令位于分支指令的同一個二級指令塊中的不同一級指令塊、但該一級指令塊在微型主動表中對應(yīng)的一級塊號無效時,直接以所述分支指令的二級塊號作為所述分支目標(biāo)指令的二級塊號;若審查發(fā)現(xiàn)分支目標(biāo)指令位于分支指令的前一個或后一個二級指令塊、且該前一個或后一個二級指令塊在微型主動表中對應(yīng)的二級塊號有效時,直接以從微型主動表中讀出的所述二級塊號作為所述分支目標(biāo)指令的二級塊號。[0027]可選的,所述系統(tǒng)還包括微型主動表;所述微型主動表用于存儲復(fù)數(shù)個二級塊號及這些塊號在主動表中對應(yīng)的內(nèi)容;當(dāng)掃描器若審查發(fā)現(xiàn)分支目標(biāo)指令時,首先將分支目標(biāo)指令地址在所述微型主動表中匹配,若匹配成功,則直接以從微型主動表中讀出的一級塊號或二級塊號作為所述分支目標(biāo)指令的一級塊號或二級塊號;若匹配不成功,則再將分支目標(biāo)指令地址送往主動表匹配。可選的,對軌道表進(jìn)行掃描,一旦發(fā)現(xiàn)有對主動表塊號的引用就將主動表對應(yīng)塊號的標(biāo)志位置位;同時依次將主動表中各個塊號的標(biāo)志位復(fù)位,從而用已置位的標(biāo)志位表示當(dāng)前被軌道表引用的塊號,使之不會被替換出主動表。[0028]對于本領(lǐng)域?qū)I(yè)人士,還可以在本發(fā)明的說明、權(quán)利要求和附圖的啟發(fā)下,理解、領(lǐng)會本發(fā)明所包含其他方面內(nèi)容。[0029]有益效果[0030]本發(fā)明所述系統(tǒng)和方法可以為數(shù)字系統(tǒng)使用的緩存結(jié)構(gòu)提供基本的解決方案。與傳統(tǒng)緩存系統(tǒng)僅在緩存缺失后才填充的機(jī)制不同,本發(fā)明所述的系統(tǒng)和方法在處理器執(zhí)行一條指令之前就對指令緩存進(jìn)行填充,可以充分地隱藏強(qiáng)制缺失。此外,本發(fā)明所述系統(tǒng)和方法在本質(zhì)上是一個一級緩存采用全相聯(lián)的結(jié)構(gòu),二級緩存采用組相聯(lián)的結(jié)構(gòu),實(shí)質(zhì)上達(dá)到了近似于全相聯(lián)結(jié)構(gòu)的效果,避免了容量缺失,同時也提高了處理器的運(yùn)行速度。由于本發(fā)明所述的系統(tǒng)和方法需要的匹配操作次數(shù)較少,并且缺失率較低,因此功耗也比傳統(tǒng)緩存系統(tǒng)顯著降低。對于本領(lǐng)域?qū)I(yè)人士而言,本發(fā)明的其他優(yōu)點(diǎn)和應(yīng)用是顯見的?!緦@綀D】【附圖說明】[0031]圖1是本發(fā)明所述的二級緩存采用多路組形式構(gòu)成的指令預(yù)取結(jié)構(gòu)圖。[0032]圖2是本發(fā)明所述循跡器讀指針移動的實(shí)施例。[0033]圖3是是本發(fā)明所述一級指令塊、二級指令塊及相應(yīng)存儲單元之間關(guān)系的實(shí)施例。[0034]圖4是本發(fā)明所述的二級緩存采用二路組形式構(gòu)成的具體實(shí)施例。[0035]圖5是本發(fā)明所述二級緩存采用二路組形式構(gòu)成的另一具體實(shí)施例。[0036]圖6是本發(fā)明所述二級緩存結(jié)構(gòu)中掃描器構(gòu)成的另一具體實(shí)施例。[0037]圖7是按全相聯(lián)方式組織的微型主動表中使用的存儲器及格式。[0038]圖8是全相聯(lián)的微型主動表的一個實(shí)施例?!揪唧w實(shí)施方式】[0039]以下結(jié)合附圖和具體實(shí)施例對本發(fā)明提出的高性能緩存系統(tǒng)和方法作進(jìn)一步詳細(xì)說明。根據(jù)下面說明和權(quán)利要求書,本發(fā)明的優(yōu)點(diǎn)和特征將更清楚。需說明的是,附圖均采用非常簡化的形式且均使用非精準(zhǔn)的比例,僅用以方便、明晰地輔助說明本發(fā)明實(shí)施例的目的。[0040]需說明的是,為了清楚地說明本發(fā)明的內(nèi)容,本發(fā)明特舉多個實(shí)施例以進(jìn)一步闡釋本發(fā)明的不同實(shí)現(xiàn)方式,其中,該多個實(shí)施例是列舉式并非窮舉式。此外,為了說明的簡潔,前實(shí)施例中已提及的內(nèi)容往往在后實(shí)施例中予以省略,因此,后實(shí)施例中未提及的內(nèi)容可相應(yīng)參考前實(shí)施例。[0041]雖然該發(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)換和修改。同樣的元器件號碼可能被用于所有附圖以代表相同的或類似的部分。[0042]此外,在本說明書中以包含處理器核的緩存系統(tǒng)為例進(jìn)行說明,但本發(fā)明技術(shù)方案也可以被應(yīng)用于包含任何合適的處理器(Processor)的緩存系統(tǒng)。例如,所述處理器可以是通用處理器(GeneralProcessor)中央處理器(CPU)、微控制器(MCU)、數(shù)字信號處理器(DSP)、圖象處理器(GPU)、片上系統(tǒng)(SOC)、專用集成電路(ASIC)等。[0043]圖1是本發(fā)明所述的二級緩存采用多路組形式構(gòu)成的指令預(yù)取結(jié)構(gòu)圖100。如圖1所示,結(jié)構(gòu)圖100包含一個主動表(Activelist)104、一個掃描器108、一個軌道表(Tracktable)110、一個循跡器(Tracker)114、一個二級指令緩存(L2Cache)106、一個一級指令緩存(LICache)112和一個處理器核116(CPUCore)。應(yīng)當(dāng)理解的是,這里列出各種部件的目的是為了便于描述,還可以包含其他部件,而某些部件可以被省略。這里的各種部件可以分布在多個系統(tǒng)中,可以是物理上存在的或是虛擬的,可以是硬件實(shí)現(xiàn)(如:集成電路)、軟件實(shí)現(xiàn)或由硬件和軟件組合實(shí)現(xiàn)。[0044]本發(fā)明所述的指令地址(Instruct1nAddress)指的是指令在主存儲器中的存儲地址,即可以根據(jù)該地址在主存儲器中找到這條指令。在此為簡單明了起見,均假設(shè)虛擬地址等于物理地址,對于需要進(jìn)行地址映射的情況,本發(fā)明所述方法也可適用。[0045]在本發(fā)明中,分支指令(BranchInstrutr1n)或分支源(BranchSource)指的是任何適當(dāng)?shù)哪軐?dǎo)致處理器核116改變執(zhí)行流(Execut1nFlow)(如:非按順序執(zhí)行一條指令)的指令形式。分支源地址(BranchSouceAddress)可以是分支指令本身的指令地址;分支目標(biāo)(BranchTarget)指的是分支指令造成的分支轉(zhuǎn)移所轉(zhuǎn)向的目標(biāo)指令,分支目標(biāo)地址(BranchTargetAddress)可以指當(dāng)分支指令的分支轉(zhuǎn)移成功發(fā)生時轉(zhuǎn)移進(jìn)入的地址,也就是分支目標(biāo)指令的指令地址;當(dāng)前指令可以指當(dāng)前正在被處理器核執(zhí)行或獲取的指令;當(dāng)前指令塊可以指含有當(dāng)前正被處理器執(zhí)行的指令的指令塊。[0046]在本實(shí)施例中,一級指令緩存112采用全相聯(lián)的形式構(gòu)成,一級指令緩存112的每一存儲行稱為一級指令塊,一級指令緩存112中存儲了至少一個包含當(dāng)前指令在內(nèi)的一段連續(xù)指令的一級指令塊。一級指令緩存112中包含復(fù)數(shù)個一級指令塊,每個一級指令塊包含復(fù)數(shù)條指令,存儲在一級指令緩存112中的每個一級指令塊都有一個一級塊號(BNXl),一級塊號BNXl就是一級指令塊所在一級指令緩存112中的行號。二級指令緩存106由兩個相同的存儲器126和128構(gòu)成,每個存儲器構(gòu)成一個路組,每個路組行數(shù)相同,即采用二路組形式構(gòu)成。存儲器126和128的每一存儲行稱為二級指令塊,每個二級指令塊有一個二級塊號(BNX2),它由二級指令塊所在二級指令緩存中的行號和所在的緩存路組決定的,即指令行地址的索引(index)位加上指示該指令所在的緩存路組位。每個二級指令塊包含復(fù)數(shù)個一級指令塊。本發(fā)明所述的二級塊號指的就是二級指令塊在二級指令緩存106中的位置。[0047]二級指令緩存106和一級指令緩存112可以包含任何合適的存儲設(shè)備,如:寄存器(register)或寄存器堆(registerfile)、靜態(tài)存儲器(SRAM)、動態(tài)存儲器(DRAM)、閃存存儲器(flashmemory)、硬盤、固態(tài)磁盤(SolidStateDisk)以及任何一種合適的存儲器件或未來的新形態(tài)存儲器。二級指令緩存106可以作為系統(tǒng)的一個緩存工作,或當(dāng)有其他緩存存在時作為一級緩存工作;且可以被分割成復(fù)數(shù)個被稱為存儲塊(MemoryBlock)的存儲片段的用于存儲處理器核116要訪問的數(shù)據(jù),如在指令塊(Instruct1nBlock)中的指令。[0048]主動表104中包含兩個標(biāo)簽陣列118和120以及兩個存儲一級塊號BNXl的存儲陣列122和124。由于二級指令緩存106采用二路組形式構(gòu)成,因此主動表也采用二路組形式構(gòu)成。主動表104中的一個標(biāo)簽陣列及存儲陣列與二級指令緩存106的一個路組對應(yīng),即標(biāo)簽陣列118、存儲陣列122和二級緩存路組126對應(yīng),標(biāo)簽陣列120、存儲陣列124和二級緩存路組128對應(yīng)。構(gòu)成存儲陣列122和124的元素稱為表項(xiàng),每個表項(xiàng)用于存儲一級塊號BNXl和有效位(Validbit),以保存一級指令塊在一級指令緩存和二級指令緩存中的關(guān)系。由于每個二級指令塊包含復(fù)數(shù)個一級指令塊,因此主動表104中的存儲陣列122和124的每一行包含復(fù)數(shù)個表項(xiàng),表項(xiàng)中存有在二級指令塊中的一級指令塊在一級指令緩存112中所處的行號BNXl。[0049]掃描器108審查從二級指令緩存106填進(jìn)一級指令緩存112中的一級指令塊,獲取指令類型信息,判斷指令為分支指令還是非分支指令。若判斷得到所述指令為分支指令,則計(jì)算分支指令的目標(biāo)地址。計(jì)算方法包括通過一加法器將當(dāng)前指令地址加上分支轉(zhuǎn)移距離,得到分支指令的目標(biāo)地址。然后將計(jì)算得到的分支指令的目標(biāo)地址送到主動表104中進(jìn)行匹配。[0050]在本實(shí)施例中,軌道表110的每行與一級指令緩存112的每行--對應(yīng),且都由同一行指針指向。軌道表I1的每一行包含復(fù)數(shù)個軌跡點(diǎn)(TrackPoint),每個軌跡點(diǎn)對應(yīng)一級指令緩存112—行中的一條指令,即軌道表中每行的軌跡點(diǎn)個數(shù)與一級指令緩存中每行的指令條數(shù)一致。一個軌跡點(diǎn)是軌道表中的一個表項(xiàng),可含有至少一條指令的信息,比如指令類別信息、分支目標(biāo)地址等。在本發(fā)明中軌跡點(diǎn)本身的軌跡表地址與該軌跡點(diǎn)所代表指令的指令地址相關(guān)(Correspond);而分支指令軌跡點(diǎn)中含有分支目標(biāo)的地址,且該地址與分支目標(biāo)指令地址相關(guān)。與一級指令緩存112中一系列連續(xù)指令所構(gòu)成的一個指令塊相對應(yīng)的復(fù)數(shù)個連續(xù)的軌跡點(diǎn)稱為一條軌道。該指令塊與相應(yīng)的軌道由同一個一級塊號(BNXl)指示。一條軌道中的總的軌跡點(diǎn)數(shù)可以等于軌道表110中一行中的表項(xiàng)總數(shù)。軌道表110也可以有其它的組織形式。[0051]當(dāng)處理器核116根據(jù)需求從一級指令緩存112中取指令時,假設(shè)此時該指令沒有存儲在一級指令緩存112和二級指令緩存106中,那么根據(jù)指令地址(PC),將指令從低層次存儲器中填充到二級指令緩存106中由替換算法(如LRU)確定的二級塊號BNX2指向的二級指令塊中;再根據(jù)處理器核116的需求,將二級緩存106中的相應(yīng)一級指令塊填充到一級指令緩存112中由替換算法(如LRU)確定的BNXl指向的存儲行中。替換算法也可以采用先進(jìn)先出算法(FIFO)、最近最少使用算法(LRU)、隨機(jī)替換算法(Random)等現(xiàn)有算法。在此過程中,掃描器108審查該一級指令塊中的指令類型,提取出其中分支指令的分支信息,并計(jì)算分支指令目標(biāo)地址。計(jì)算方法包括通過一加法器將當(dāng)前指令地址加上分支轉(zhuǎn)移距離,得到分支指令的目標(biāo)地址。在這里,術(shù)語“填充(Fill)”表示將指令從較低層次的存儲器移動到較高層次的存儲器中。[0052]可以通過將掃描器108審查、計(jì)算得到的分支目標(biāo)指令地址與主動表104中存儲的指令行地址匹配確定該分支目標(biāo)指令是否已經(jīng)存儲在二級指令存儲器106中。首先用計(jì)算得到的分支目標(biāo)指令地址的索引位讀出存儲在主動表中的兩個標(biāo)簽,然后將這兩個標(biāo)簽與計(jì)算出的目標(biāo)分支指令地址的標(biāo)簽位進(jìn)行比較,如果其中一個匹配成功,用計(jì)算出的分支目標(biāo)地址的塊偏移量選出匹配成功的路組中該指令所對應(yīng)的表項(xiàng),如果存儲在該表項(xiàng)中的一級塊號(BNXl)有效,表明該目標(biāo)分支指令已經(jīng)存儲在一級指令緩存112中,那么將存儲在主動表中的該一級塊號BNXl和計(jì)算出的分支目標(biāo)地址的偏移量(Offset)—起寫進(jìn)軌道表,寫入位置為分支源地址所對應(yīng)的軌道表的軌跡點(diǎn)中;如果存儲在該表項(xiàng)中的一級塊號(BNXl)無效,表明該目標(biāo)分支指令沒有存儲在一級指令緩存112中,而是僅存儲在二級指令緩存106中,那么將該指令對應(yīng)的二級塊號BNX2和計(jì)算出的分支目標(biāo)地址的塊偏移量以及分支目標(biāo)地址偏移量一起寫入軌道表中,寫入位置為分支源地址所對應(yīng)的軌道表的軌跡點(diǎn)中;如果兩個標(biāo)簽匹配都不成功,表明分支目標(biāo)信息所在的指令行尚未被填充到二級指令存儲器106中,那么根據(jù)計(jì)算出的分支目標(biāo)指令地址將指令從低層次存儲器中填充到二級指令緩存106中由替換算法(如LRU)確定的二級塊號BNX2指向的二級指令塊中,并將該二級塊號BNX2和計(jì)算出的分支目標(biāo)地址的塊偏移量以及分支目標(biāo)地址偏移量一起寫入軌道表中,寫入位置為分支源地址所對應(yīng)的軌道表的軌跡點(diǎn)中。本發(fā)明所述的匹配(Match),指的是對兩個值進(jìn)行比較,當(dāng)兩者相同或相等時為‘匹配成功(Match)’,否則為‘匹配不成功(NotMatch),。[0053]可以用第一地址和第二地址來表示軌跡點(diǎn)(指令)在軌道表中的位置信息;其中第一地址表示該軌跡點(diǎn)對應(yīng)指令的塊號(指向軌道表中一條軌道及一級指令緩存中相應(yīng)的一個一級指令塊),第二地址表示該軌跡點(diǎn)(即對應(yīng)指令)在該軌道(存儲塊)中的相對位置(偏移量,AddressOffset)。一組第一地址及第二地址對應(yīng)軌道表中的一個軌跡點(diǎn),即可以根據(jù)一組第一地址及第二地址從軌道表中找到對應(yīng)的軌跡點(diǎn)。如果該軌跡點(diǎn)的類型代表一條分支指令,可以根據(jù)軌道表中該表項(xiàng)存儲的內(nèi)容中含的第一地址確定分支目標(biāo)的軌道,并根據(jù)第二地址確定目標(biāo)軌道的一個特定的軌跡點(diǎn)。這樣,軌道表就成為一個以軌道表項(xiàng)地址對應(yīng)分支源地址、表項(xiàng)內(nèi)容對應(yīng)分支目標(biāo)地址來代表一條分支指令的表。[0054]為了在軌道表110的一條軌道中建立與順序執(zhí)行下一條軌道的聯(lián)系,在每條軌道代表最后一條指令的軌跡點(diǎn)后再設(shè)一個結(jié)束軌跡點(diǎn),其中存放順序執(zhí)行下一條軌道(指令塊)的第一地址。如果一級指令緩存112中可以存儲多個指令塊,在當(dāng)前指令塊被執(zhí)行時,把順序執(zhí)行下一個指令塊也取到指令讀緩沖中以備處理器核116讀取執(zhí)行。下一指令塊的指令地址可以用當(dāng)前指令塊的指令地址加上一個指令塊的地址長度來求得。該地址如前述被送到主動表104匹配,獲得的指令塊被填進(jìn)由替換算法所指示的一級指令緩存112的指令塊中。新存進(jìn)一級指令緩存112的下一指令塊中的指令也被掃描器108掃描,提取信息填充由該一級塊號BNXl指出的軌道如前所述。替換算法也可以采用先進(jìn)先出算法(FIFO)、最近最少使用算法(LRU)、隨機(jī)替換算法(Random)等現(xiàn)有算法。[0055]循跡器114主要由選擇器130、寄存器132和增量器134構(gòu)成。循跡器114的讀指針指向軌道表110中當(dāng)前指令所在軌道中位于當(dāng)前指令之后的第一個分支指令軌跡點(diǎn);或在該軌道上當(dāng)前指令后沒有分支軌跡點(diǎn)的情況下指向該軌道的結(jié)束軌跡點(diǎn)。循跡器114的讀指針由第一地址指針和第二地址指針組成,其中第一地址指針的值為當(dāng)前指令所在一級指令塊的一級塊號,即行指針;第二地址指針指向該軌道上當(dāng)前指令后的第一個分支指令軌跡點(diǎn)或結(jié)束軌跡點(diǎn)。[0056]當(dāng)處理器核116根據(jù)需求從一級指令緩存112中取指令時,由循跡器114提供一級塊號BNXl用于對一級指令塊尋址,由處理器提供偏移量取出相應(yīng)的指令,并向循跡器114提供BRANCH信號和TAKEN信號。BRANCH信號指明該指令是否是分支指令,TAKEN信號用于控制選擇器的輸出。循跡器114用于指明當(dāng)前指令后的第一個分支指令,或在該軌道上當(dāng)前指令后沒有分支軌跡點(diǎn)的情況下指向該軌道的結(jié)束軌跡點(diǎn),并給處理器核116提供當(dāng)前指令的一級塊號BNXl。[0057]當(dāng)循跡器114的讀指針指向的軌跡點(diǎn)存儲的內(nèi)容包含一個一級塊號BNX1,那么表明對應(yīng)的指令已經(jīng)存儲在一級指令緩存112中,等執(zhí)行到該條指令時,處理器核116直接從一級指令緩存112中取出指令。當(dāng)讀指針指向的軌跡點(diǎn)存儲的內(nèi)容包含一個二級塊號BNX2,那么以二級塊號BNX2作為主動表地址查找主動表。如果存儲在對應(yīng)于該二級塊號的表項(xiàng)中的一級塊號BNXl已經(jīng)有效,那么表明在執(zhí)行到該指令前已經(jīng)有其他分支指令的目標(biāo)地址是與該二級塊號對應(yīng)的指令地址相同,且已經(jīng)將該目標(biāo)指令取進(jìn)一級指令緩存112中,因此將該一級塊號BNXl寫入該軌跡點(diǎn)中,等執(zhí)行到該條指令時,處理器核116直接到一級指令緩存112中取出指令;如果存儲在對應(yīng)于該二級塊號的表項(xiàng)中的一級塊號BNXl是無效的,表明該目標(biāo)指令不在一級指令緩存112中,那么根據(jù)替換策略,確定一級塊號BNX1,將目標(biāo)指令行從二級指令緩存106中取出,填充進(jìn)一級指令緩存112對應(yīng)的一級指令塊中,并將該一級塊號BNXl寫入主動表104的存儲陣列122和124對應(yīng)的表項(xiàng)中,等執(zhí)行到該條指令時,處理器核116直接到一級指令緩存112中取出指令。[0058]若循跡器114指向的分支指令沒有發(fā)生分支轉(zhuǎn)移,則循跡器114的讀指針指向該分支指令后的第一個分支指令軌跡點(diǎn),或在該分支指令后的軌跡點(diǎn)中沒有分支指令軌跡點(diǎn)的情況下指向該軌道的結(jié)束軌跡點(diǎn)。處理器核讀取分支指令后的順序指令執(zhí)行。[0059]若循跡器114指向的分支指令成功發(fā)生分支轉(zhuǎn)移,則將上述從指令存儲器106讀出的分支目標(biāo)指令塊存儲到指令讀緩沖112中緩沖替換邏輯指定的指令塊中,并在軌道表110的相應(yīng)軌道中填入掃描器108已產(chǎn)生的新軌道信息。此時上述分支目標(biāo)第一地址和第二地址成為新的循跡器地址指針,指向軌道表中的分支目標(biāo)對應(yīng)的軌跡點(diǎn)。該新循跡器地址指針也指向新填充的分支指令塊,使其成為新的當(dāng)前指令塊。處理器核從新的當(dāng)前指令塊中用指令地址(PC)的偏移量位選出需要的指令。此后循跡器114移動讀指針指向新的當(dāng)前指令塊對應(yīng)軌道中該分支目標(biāo)指令之后的第一個分支指令軌跡點(diǎn),或在該分支目標(biāo)指令后的軌跡點(diǎn)中沒有分支指令軌跡點(diǎn)的情況下指向該軌道的結(jié)束軌跡點(diǎn)。[0060]若循跡器114指向的是軌道中的結(jié)束軌跡點(diǎn),循跡器114的讀指針更新為該結(jié)束軌跡點(diǎn)中的位置內(nèi)容值,即指向下一軌道的第一個軌跡點(diǎn),從而指向新的當(dāng)前指令塊。之后循跡器114移動讀指針指向新的當(dāng)前指令塊對應(yīng)軌道中的第一個分支指令軌跡點(diǎn),或在該軌道沒有分支指令軌跡點(diǎn)的情況下指向該軌道的結(jié)束軌跡點(diǎn)。依次重復(fù)上述過程,即可在處理器核116執(zhí)行指令前將該指令填充到指令讀緩沖112中,使得處理器核116在對該指令進(jìn)行取指時不需要等待,從而提高處理器性能。[0061]圖2是本發(fā)明所述循跡器讀指針移動的實(shí)施例200。在本實(shí)施例中,循跡器讀指針越過軌道表中的非分支指令,移動到軌道表中下一分支點(diǎn)并等待處理器核116分支判斷結(jié)果。為便于說明,圖2中省略了與本實(shí)施例說明內(nèi)容無關(guān)的部分部件。在本實(shí)施例中,假設(shè)軌道表110中存儲的指令類型及其存儲的指令信息均按指令地址從小到大從左到右排列,即當(dāng)按順序執(zhí)行這些指令時,各個指令信息及相應(yīng)指令類型的訪問順序?yàn)閺淖笙蛴?。另假設(shè)軌道表110中指令類型為“O”代表軌道表110中相對應(yīng)的指令為非分支指令,指令類型為“I”代表相對應(yīng)的指令為分支指令。任一時刻可以讀出軌道表110中由第一地址214(—級塊號BNX1)指出的一條軌道中由第二地址216(偏移量,BNY)指出的代表指令類型的表項(xiàng)。任一時刻也可以讀出軌道表110中由第一地址214指出的一條軌道中代表指令類型的復(fù)數(shù)個表項(xiàng)甚至所有表項(xiàng)。[0062]在軌道表110中每一行中指令地址最大的一條指令的表項(xiàng)的右方再增設(shè)一個結(jié)束表項(xiàng)以存放順序執(zhí)行下一條指令的地址。結(jié)束表項(xiàng)的指令類型總是被設(shè)定為“I”。結(jié)束表項(xiàng)中指令信息的第一地址是下一條指令的指令塊號,第二地址(BNY)恒定為零,指向該指令軌道的第一項(xiàng)。結(jié)束表項(xiàng)被定義為等同于一個無條件分支指令。當(dāng)循跡器指向一個結(jié)束表項(xiàng)時總會產(chǎn)生一個內(nèi)部控制信號使選擇器208選擇軌道表110的輸出230;也會產(chǎn)生一個內(nèi)部控制信號使寄存器210更新。該內(nèi)部信號可以由軌道表110中結(jié)束表項(xiàng)中含有的特殊位觸發(fā);也可以由第二地址216指向結(jié)束表項(xiàng)來觸發(fā)。[0063]在圖2中,循跡器114中主要包括了移位器202、前導(dǎo)零記數(shù)器204、加法器206、選擇器208和寄存器210。其中移位器202將從軌道表110讀出的代表復(fù)數(shù)條指令的復(fù)數(shù)個指令類型218向左移位,其移動位數(shù)由寄存器210輸出的第二地址指針216決定。移位器202輸出的移位后指令類型224的最左邊一位是步進(jìn)位(STEPBit)。該步進(jìn)位的信號與從處理器核來的BRANCH信號共同決定寄存器210的更新。選擇器208由控制信號TAKEN控制,其輸出232為下一地址(NextAddress),其中含有第一地址部分及第二地址部分。當(dāng)TAKEN為“I”(分支成功)時,選擇器208選擇軌道表110的輸出230(含有分支目標(biāo)的第一地址及第二地址)做為輸出232。當(dāng)TAKEN為“O”(分支不成功)時,選擇器208選擇現(xiàn)第一地址214作為輸出232第一地址部分,加法器輸出228做為輸出232第二地址部分。指令類型224被送到前導(dǎo)零計(jì)數(shù)器204以計(jì)算下一個“I”指令類型(代表相應(yīng)指令為分支指令)前有多少個“O”指令類型(代表相應(yīng)指令為非分支指令),其中不管步進(jìn)位是“O”或“I”都被計(jì)算為一位“O”。得出的前導(dǎo)“O”的數(shù)目226(步進(jìn)數(shù)STEPNumber)則被送到加法器206與寄存器210輸出的第二地址216相加以得出下一分支源地址(NextBranchAddress)228。此下一分支源地址就是當(dāng)前指令下一條分支指令的第二地址,而在此之前的非分支指令則會被循跡器114跳(Skip)過。[0064]當(dāng)?shù)诙刂?16指向代表一條指令的表項(xiàng)時,受第二地址控制的移位器也將軌道表110輸出的復(fù)數(shù)條指令類型統(tǒng)一向左移位。此時代表軌道表110所讀出指令的指令類型被移位到指令類型224中的最左面的步進(jìn)位。移位指令類型224被送入前導(dǎo)零計(jì)數(shù)器計(jì)算下一條分支指令之前指令的條數(shù)。此時前導(dǎo)零計(jì)數(shù)器204的輸出226即是循跡器應(yīng)該前進(jìn)的步長。此步長與第二地址216由加法器206相加后即得出下一分支指令地址228。[0065]當(dāng)移位后指令類型224中的步進(jìn)位信號為“O”時,這表示第二地址216所指向的軌道表110中的表項(xiàng)為非分支指令,此時該步進(jìn)位信號控制寄存器210更新,而選擇器208在為“O”的TAKEN信號222控制下選擇下一分支源地址228成為第二地址216,第一地址214保持不變。此時新的第一第二地址指向同一軌道中的下一條分支指令,此分支指令前的非分支指令均被越過。新的第二地址控制移位器216將指令類型218移位,使代表此分支指令的指令類型位落到224的步進(jìn)位上供下一步操作。[0066]當(dāng)移位后指令類型224中的步進(jìn)位信號為“I”時,這表示第二地址所指向的軌道表I1中的表項(xiàng)代表分支指令。此時該步進(jìn)位信號不影響寄存器210更新,寄存器210由處理器核來的BRANCH信號234控制更新。此時加法器輸出228是當(dāng)前分支指令同一軌道上的下一條分支指令的地址,同時存儲器輸出230是當(dāng)前分支指令的目標(biāo)地址。[0067]當(dāng)BRANCH信號為“I”時,選擇器208的輸出232更新寄存器210。如果此時處理器核來的TAKEN信號222為“O”時,代表處理器核決定在這個分支點(diǎn)選擇順序執(zhí)行,此時選擇器208選擇下一分支源地址228。此時寄存器210輸出的第一地址214不變,下一分支源地址228成為新的第二地址216。此時新的第一第二地址指向同一軌道中的下一條分支指令。新的第二地址控制移位器216將指令類型218移位,使代表此分支指令的指令類型位落到224的步進(jìn)位上供下一步操作。[0068]如果此時處理器核來的TAKEN信號222為“I”時,代表處理器核決定在這個分支點(diǎn)選擇程序跳轉(zhuǎn)到分支目標(biāo),此時選擇器選擇從軌道表110中讀出的分支目標(biāo)地址230成為由寄存器210輸出的第一地址214及未來第二地址226。此時BRANCH信號234控制寄存器210鎖存上述第一第二地址成為新的第一第二地址。該新的第一第二地址指向可能不在同一軌道上的分支目標(biāo)地址。新的第二地址控制移位器216將指令類型218移位,使代表此分支指令的指令類型位落到224的步進(jìn)位上供下一步操作。[0069]當(dāng)?shù)诙刂分赶蜍壽E表結(jié)束表項(xiàng)(下一行表項(xiàng))時,如前所述內(nèi)部控制信號控制選擇器208選擇軌道表110的輸出230,并更新寄存器210。此時新的第一地址214為軌道表110的結(jié)束表項(xiàng)中記載的下一軌道的第一地址,第二地址為零。此時第二地址控制控制移位器216將指令類型218移零位,開始下一步操作。如此周而復(fù)始,循跡器114與軌道表110配合,會跳過軌道表中的非分支指令而總是指向分支指令。[0070]圖3是本發(fā)明所述一級指令塊、二級指令塊及尋址關(guān)系的實(shí)施例300。在圖3中,假設(shè)指令地址301的長度為40位,即最高位為第39位,最低位為第O位,且每一個指令地址對應(yīng)一個字節(jié)(Byte)。因此,指令地址301的最低兩位302(即第1、0位)對應(yīng)一個指令字(Instruct1nWord)中的4個字節(jié)。假設(shè)在本實(shí)施例中,指令行301的高8位是進(jìn)程標(biāo)識位(PID)310表示當(dāng)前執(zhí)行的是哪一進(jìn)程。通過進(jìn)程標(biāo)識位310可以確定當(dāng)前執(zhí)行的進(jìn)程是否存儲在指令緩存中,如果不在,可以通過整個行地址301進(jìn)行預(yù)取,從而避免指令在指令緩存中的缺失。在指令地址301中也可以不包含進(jìn)程標(biāo)識位310,那么指令地址的長度就是32位。為了便于說明,下面將指令地址的最低兩位302和最高8位310去掉,以剩下的30位(即第31位到第2位)構(gòu)成一個新指令行地址312進(jìn)行說明。[0071]在本實(shí)施例中,假設(shè)一個一級指令塊包含了16條指令,因此指令行地址312中的偏移量(offset)303有4位,用此偏移量可以確定一條指令在一級指令塊中的位置。該偏移量303對應(yīng)圖1所述的第二地址(BNY),因此也可以用此偏移量確定該指令對應(yīng)軌道表中的哪一個軌跡點(diǎn)。又假設(shè)軌道表有512行,那么一級塊號BNXl就有9位,其值由所在的行號決定。所以,如果根據(jù)處理器116的需求將一級指令塊從二級指令緩存106填充到一級指令指令緩存112的過程中,根據(jù)前述方法確定出分支指令的分支目標(biāo)指令已經(jīng)存儲在一級指令緩存112中,那么就將存儲在主動表104中的相應(yīng)的一級塊號加上偏移量303—起寫入軌道表與分支源指令相對應(yīng)的軌道表的軌跡點(diǎn)中,等處理器核116執(zhí)行到該分支指令時,可以直接從一級指令緩存112中直接讀取該指令。[0072]在本實(shí)施例中,指令行地址312中的標(biāo)簽位311存儲在主動表104的一個路組中的標(biāo)簽陣列118或120中,用于和掃描器108產(chǎn)生的目標(biāo)指令地址進(jìn)行比較,得到匹配信息。假設(shè)在本實(shí)施例中,主動表104與二級指令緩存塊126和128都有1024行,那么對應(yīng)的指令行地址312的索引位307就有10位(即第17位到第8位)。索引位307用于檢索二級指令塊位于二級指令緩存的哪一行中,也可以用于將存儲在主動表104的每個路組中對應(yīng)的標(biāo)簽陣列118和標(biāo)簽陣列120中的標(biāo)簽和存儲在主動表104的每一路組對應(yīng)表項(xiàng)中的有效值讀出。又假設(shè)存儲在二級指令緩存塊126或128中的一個二級指令塊對應(yīng)4個連續(xù)的一級指令塊,那么塊偏移量(Block-offset)306就有兩位,即第6、7位。塊偏移量306用于選出存儲在二級緩存106中的二級指令塊中的一級指令塊,即用于選出對應(yīng)于主動表中的哪一個表項(xiàng)中的有效值。因此,二級指令塊所在二級指令緩存106的路組號加上指令行地址312的索引位307就構(gòu)成了一個二級塊號BNX2。如果根據(jù)處理器需求將一級指令塊從二級指令緩存106填充到一級指令指令緩存112的過程中,根據(jù)前述方法確定出分支指令的分支目標(biāo)指令沒有存儲在一級指令緩存112中但已存儲在二級指令緩存106中,那么就將對應(yīng)的二級塊號BNX2加上該分支指令的分支目標(biāo)地址的塊偏移量306和偏移量303一起寫入軌道表與分支源指令相對應(yīng)的軌道表的軌跡點(diǎn)中,等到循跡器指針指向該軌跡點(diǎn)時,將對應(yīng)的一級指令塊從二級指令緩存106中填充進(jìn)一級指令緩存112中根據(jù)替換策略(如LRU)確定的一級塊號BNXl指向的一級緩存塊中,等處理器核116執(zhí)行到該分支指令時,可以直接從一級指令緩存112中直接讀取該指令。[0073]根據(jù)本發(fā)明方案,可以建立指令在一級指令緩存和二級指令緩存中的映射關(guān)系??梢杂靡患墘K號BNXl加上行地址312的偏移量303確定指令在存儲在一級指令緩存112中的一級指令塊中的位置;而用指令行地址312中的塊偏移量306就可以確定一級指令塊在存儲在二級指令緩存106中的二級指令塊中的位置;指令行地址312中的索引位307加上二級指令塊所在的緩存路組號(即二級塊號BNX2)就可以確定二級指令塊在二級指令緩存106中的位置。需要說明的是,雖然一級塊號BNXl和二級塊號BNX2沒有必然的映射關(guān)系,但是一級塊號BNXl是由一級指令塊從二級指令緩存106中填充到一級指令緩存112中時,由替換算法(如LRU算法)確定的,且指明指令在一級指令緩存和二級指令緩存中的位置的第二地址(BNY)都是相同的,即為指令行地址312的偏移量303。這樣,通過前述尋址方式,可以建立指令在一級指令緩存和二級指令緩存中的映射關(guān)系。[0074]圖4是本發(fā)明所述二級緩存采用二路組形式構(gòu)成的具體實(shí)施例400。根據(jù)本發(fā)明技術(shù)方案,可以將掃描器108計(jì)算得到的目標(biāo)指令地址與主動表中存儲的指令地址進(jìn)行匹配,從而得到與該指令地址匹配信息,然后將二級塊號BNX2或一級塊號BNXl寫入軌道表中,從而生成新的軌道。[0075]為了便于說明,在本實(shí)施例中,目標(biāo)指令地址312采用了完整指令地址的一部分進(jìn)行說明。目標(biāo)指令地址312包括標(biāo)簽位311、索引位307、塊偏移量306和偏移量303。標(biāo)簽位311用于與主動表104中的標(biāo)簽302和304進(jìn)行比較,得到匹配信息;索引位307用于檢索該地址對應(yīng)于主動表中的哪一行;塊偏移量306用于選出二級指令塊中所對應(yīng)的一級指令塊;偏移量303用于確定目標(biāo)指令在一級指令行中的位置,即提供第二地址(BNY)。[0076]在本實(shí)施例中,二級指令緩存106由兩塊存儲塊126和128構(gòu)成,兩塊存儲塊包含的行數(shù)目一致,即采用二路組形式構(gòu)成。相應(yīng)的,主動表也采用二路組形式構(gòu)成。主動表104由第一部分標(biāo)簽陣列118和120以及第二部分存儲塊408和410構(gòu)成。第一部分標(biāo)簽陣列118和120用于匹配掃描器108計(jì)算出的分支目標(biāo)地址,第二部分用于存儲一級塊號BNX1。由于二級緩存106的每個路組中的二級指令塊對應(yīng)4個一級指令塊,所以主動表104中每個路組的一行對應(yīng)4個表項(xiàng)408或410。軌道表與主動表的行數(shù)一致,都是1024行。一級指令緩存112的每一行包含16條指令,即一級指令塊包含16條指令,因此軌道表110中每一行有16個表項(xiàng)。[0077]在本實(shí)施例中,假設(shè)從二級指令緩存106中取出的一級指令塊根據(jù)LRU替換策略填充到一級指令緩存112的第3行中,該一級指令塊包含3條分支指令,這3條分支指令位于該一級指令塊的第4條、第7條和第11條。在本實(shí)施例中,假設(shè)數(shù)值“1654”存儲在主動表104的路組O的第14行的標(biāo)簽中,數(shù)值“2526”存儲在主動表104的路組I的第14行的標(biāo)簽中。又假設(shè),主動表中路組O的第14行對應(yīng)的表項(xiàng)2的有效位為“I”,表項(xiàng)3的有效位為“0”,而路組I的第14行對應(yīng)的表項(xiàng)2的有效位為“O”。[0078]當(dāng)掃描器108掃描該一級指令塊,計(jì)算得出第一條分支指令的目標(biāo)指令地址為“1654|14|2|3”,即對應(yīng)目標(biāo)指令地址312的標(biāo)簽位311的值為“1654”,索引位307的值為“14”,塊偏移量306的值為“2”,偏移量303的值為“3”。首先根據(jù)現(xiàn)有技術(shù),用索引位307將存于主動表中的第14行中的兩個有效標(biāo)簽都讀出,然后將讀出的標(biāo)簽分別送到比較器420和比較器422中,與掃描器108計(jì)算出的分支目標(biāo)指令地址312的標(biāo)簽位311進(jìn)行比較,路組“O”匹配成功。再用該分支目標(biāo)地址312的塊偏移量位306選出主動表中的對應(yīng)表項(xiàng)2,此時有效位為“1”,那么就將存儲在其中的值“5”寫入軌道表中的第3行第4表項(xiàng),同時將偏移量(BNY)的值“3”寫入軌道表中的第3行第4表項(xiàng)中,即將“5|3”寫入軌道表中的第3行第4表項(xiàng)中。[0079]當(dāng)掃描器108計(jì)算得出第二條分支指令的目標(biāo)地址為“1654|14|3|5”,標(biāo)簽位和索引位與前述值一致,塊偏移量306的值為“3”,偏移量303的值為“5”,通過上述方法選擇出主動表中路組O的第14行對應(yīng)的表項(xiàng)3的值。而此時,表項(xiàng)2的有效位為“0”,表明該分支指令不在一級指令緩存112中,那么將其在主動表中的路組號加上目標(biāo)指令地址312的索引位307作為一個二級塊號(BNX2)和塊偏移量306以及偏移量(BNY)303的值一起寫進(jìn)軌道表中,即將“O114I3I5”寫入軌道表的第3行第7表項(xiàng)中?!癘”表明該指令對應(yīng)在主動表的路組O中,“14”表明該目標(biāo)指令在對應(yīng)主動表的第14行,“3”表明該指令在對應(yīng)主動表的第3個表項(xiàng)中,“5”表明該指令對應(yīng)一級指令塊中的第5條指令。[0080]當(dāng)掃描器108計(jì)算得出的第三條分支指令的目標(biāo)地址為“3546|14|2|8”,即表明該目標(biāo)指令地址312的標(biāo)簽位311的值為“3546”,索引位307的值為“14”,塊偏移量306的值為“2”,偏移量303的值為“8”。通過前述方法不能與主動表中的任意一項(xiàng)匹配成功,表明該指令不在二級緩存中,那么根據(jù)該目標(biāo)地址將對應(yīng)的指令塊取進(jìn)二級緩存106中,根據(jù)LRU替換算法,將指令塊取到二級緩存的路組I中的第14行第2表項(xiàng)中。那么將其在主動表中的路組號加上目標(biāo)指令地址312的索引位307作為一個二級塊號(BNX2)和塊偏移量306以及偏移量出階)303的值一起寫進(jìn)軌道表中,即將“1|14|2|8”寫入軌道表的第3行第11表項(xiàng)中。替換算法也可以采用先進(jìn)先出算法(FIFO)、最近最少使用算法(LRU)、隨機(jī)替換算法(Random)等現(xiàn)有算法。[0081]當(dāng)循跡器114的讀指針指向軌道表的第3行第4表項(xiàng)時,讀出存儲在該軌跡點(diǎn)的值“5|3”包含一個一級塊號,表明該分支指令的目標(biāo)指令已經(jīng)存儲在一級緩存112的第5行中,那么等到執(zhí)行到該指令時,處理器核116可以直接從一級指令緩存112的第5行中直接讀取指令供處理器核116使用。[0082]在本實(shí)施例中,假設(shè)某條分支指令的目標(biāo)指令地址是“1654I14|3|5”,且該指令已經(jīng)被執(zhí)行,那么表明該指令已經(jīng)被填充進(jìn)了一級指令緩存112中。又假設(shè)該目標(biāo)指令已經(jīng)被存儲在一級指令緩存112的第9行中,那么將數(shù)值“9”寫進(jìn)主動表路組O的第14行第3表項(xiàng)中,并將該表項(xiàng)的有效位設(shè)為“I”。[0083]因此,當(dāng)循跡器114的讀指針指向軌道表的第3行第7表項(xiàng)時,讀出存儲在該軌跡點(diǎn)的值“O114I3I5”包含一個二級塊號BNX2,那么根據(jù)路組號“O”找到主動表的路組0,根據(jù)索引號和塊偏移量找到主動表的第14行第3表項(xiàng),發(fā)現(xiàn)此時存儲在該表項(xiàng)中的一級塊號BNXl已經(jīng)有效。那么可以根據(jù)該一級塊號BNXl直接從一級緩存中第9行中讀取指令,而不再需要從二級緩存中重復(fù)讀取。同時將該表項(xiàng)中存儲的一級塊號值“9”寫入軌道表的第3行第7表項(xiàng)中,即在軌道表110的第3行第7項(xiàng)中存儲一個包含一級塊號BNXl信息的值“9I5”完成軌道表的更新。等到執(zhí)行到該條指令時,處理器核116可以直接從一級指令緩存112的第9行中直接讀取指令供處理器核116使用。[0084]當(dāng)循跡器114的讀指針指向軌道表的第3行第11表項(xiàng)時,讀出存儲在該軌跡點(diǎn)的值“1114I2I8”包含二級塊號BNX2,那么根據(jù)前述方法以二級塊號加上塊偏移量306的值作為主動表地址查找到主動表104的路組I中第14行第2表項(xiàng)中存儲的一級塊號BNXl是無效的,那么表明對應(yīng)的分支目標(biāo)指令不在一級指令緩存112中。因此,將存儲在二級緩存106中對應(yīng)的一級指令塊填充進(jìn)根據(jù)替換算法確定的一級塊號BNXl的值為38指向的一級指令塊中,即將存儲在二級指令緩存106中的對應(yīng)一級指令塊填充進(jìn)一級指令緩存112的第38行中,同時將值“38”寫進(jìn)主動表的路組I的第14行第2表項(xiàng)中,并將主動表104中路組I的第14行第2表項(xiàng)的有效位設(shè)為“I”,同時將包含包含一級塊號BNXl信息的值“38|8”寫進(jìn)軌道表110的第3行第11表項(xiàng)中,完成主動表和軌道表更新。替換算法也可以采用先進(jìn)先出算法(FIFO)、最近最少使用算法(LRU)、隨機(jī)替換算法(Random)等現(xiàn)有算法。[0085]根據(jù)本發(fā)明技術(shù)方案,還可以在主動表的表項(xiàng)中增加用于存儲該表項(xiàng)對應(yīng)的二級指令塊的順序地址前一個二級指令塊的二級塊號中的路組號的存儲域P和順序地址后一個二級指令塊的二級塊號中的路組號的存儲域N。這樣,當(dāng)掃描器審查發(fā)現(xiàn)被審查的分支指令的分支目標(biāo)指令位于所述分支指令所在的二級指令塊的順序地址的前一個或后一個二級指令塊時,可以直接根據(jù)被審查的分支指令對應(yīng)的二級塊號從主動表中讀出相應(yīng)的前一個或后一個二級指令塊的路組號,所述路組號與被審查的分支指令對應(yīng)的索引位減一或增一的結(jié)果拼接即可得到相應(yīng)的前一個或后一個二級指令塊的二級塊號,從而避免將所述分支目標(biāo)指令地址送往主動表進(jìn)行匹配的操作。[0086]在本發(fā)明中,當(dāng)掃描器對一級指令塊(簡稱為當(dāng)前一級指令塊)審查時,如果當(dāng)前一級指令塊是其所在的二級指令塊(簡稱為當(dāng)前二級指令塊)中的最后一個一級指令塊,那么如前建立當(dāng)前一級指令塊對應(yīng)的結(jié)束軌跡點(diǎn)。若當(dāng)前一級指令塊的順序地址下一個一級指令塊所在的二級指令塊(簡稱為后一個二級指令塊)已經(jīng)存儲在二級緩存中,則直接將該后一個二級指令塊對應(yīng)的二級塊號作為軌跡點(diǎn)內(nèi)容填入所述結(jié)束軌跡點(diǎn)中;若所述后一個二級指令塊尚未存儲在二級緩存中,則如前所述將該后一個二級指令塊填充到二級緩存中由替換算法確定的位置中,并將相應(yīng)的二級塊號作為軌跡點(diǎn)內(nèi)容填入所述結(jié)束軌跡點(diǎn)中。此時所述當(dāng)前二級指令塊的順序地址后一個二級指令塊的二級塊號就是所述后一個二級指令塊的二級塊號,可以將所述二級塊號中的路組號作為存儲域內(nèi)容填充到所述當(dāng)前二級指令塊對應(yīng)的二級塊號(簡稱為當(dāng)前二級塊號)指向的主動表表項(xiàng)中的存儲域N中;同時所述后一個二級指令塊的順序地址前一個二級指令塊的二級塊號就是所述當(dāng)前二級塊號,可以將所述二級塊號中的路組號作為存儲域內(nèi)容填充到所述后一個二級指令塊對應(yīng)的二級塊號指向的主動表表項(xiàng)中的存儲域P中。[0087]此外,還可以通過如下操作填充或更新主動表表項(xiàng)中的存儲域P和N。當(dāng)有新的二級指令塊被填充到二級緩存時,由于當(dāng)前二級指令塊與其順序地址的前一個或后一個二級指令塊的標(biāo)簽相同,索引位相差‘I’,因此可以對該二級指令塊地址的索引位分別減一和增一,從而得到該二級指令塊的順序地址前一個二級指令塊和后一個二級指令塊的索引位值,并根據(jù)所述計(jì)算得到的索引位值從主動表中讀出對應(yīng)位置的所有路組中存儲的內(nèi)容。再將讀出內(nèi)容中的所有標(biāo)簽與當(dāng)前二級指令塊的標(biāo)簽比較,若在當(dāng)前二級指令塊索引位減一的所有路組中有標(biāo)簽匹配,則該匹配表項(xiàng)中的路組號就可以作為存儲域內(nèi)容填充到當(dāng)前二級塊號指向的主動表表項(xiàng)中的存儲域P中,并將當(dāng)前二級塊號中的路組號作為存儲域內(nèi)容填充到所述匹配表項(xiàng)中的存儲域N中;若在當(dāng)前二級指令塊索引位增一的所有路組中有標(biāo)簽匹配,則該匹配表項(xiàng)中的路組號就可以作為存儲域內(nèi)容填充到當(dāng)前二級塊號指向的主動表表項(xiàng)中的存儲域N中,并將當(dāng)前二級塊號中的路組號作為存儲域內(nèi)容填充到所述匹配表項(xiàng)中的存儲域P中。[0088]圖5是本發(fā)明所述二級緩存采用二路組形式構(gòu)成的另一具體實(shí)施例500。在本實(shí)施例中,目標(biāo)指令地址312采用了完整指令地址的一部分進(jìn)行說明。假設(shè)一個一級指令塊包含4條指令,因此指令行地址312中的偏移量303有2位,用此偏移量可以確定一條指令在一級指令塊中的位置,稱為BN1Y。又假設(shè)軌道表有128行,那么一級塊號BNlX(即前述BNXI)就有7位,其值由所在的行號決定。BNlX拼接上BNlY稱為BNl,由此可以確定該指令在一級指令緩存112中的位置。由于一個二級指令塊包含4個一級指令塊,那么塊偏移量306為2位。塊偏移量306拼接上偏移量303稱為BN2Y。又假設(shè)主動表有1024行,那么索引位307為10位,加上對應(yīng)的路組號稱為二級塊號BN2X(與前述BNX2—致)。[0089]本實(shí)施例的結(jié)構(gòu)與圖4中基本一致,唯一的變動是主動表104中的每一行都增加了存儲本行所代表的指令塊的前一個指令塊地址與下一個指令塊地址的表項(xiàng),以及服務(wù)上述新增表項(xiàng)的選擇器。在104中左面的陣列中每行(代表一個二級緩存塊)除圖4中原有的存儲標(biāo)簽的表項(xiàng)118,存儲該行中的4個一級緩存塊地址的4個表項(xiàng)408以外,新增了存儲按地址順序前一個二級緩存塊地址的表項(xiàng)501,及存儲順序下一個二級緩存塊地址的表項(xiàng)503。相應(yīng)地,該左面陣列的輸出,表項(xiàng)408的輸出仍由原有的選擇器521選擇,選擇器521的輸出以及新增表項(xiàng)501,503的輸出另由新增的選擇器531選擇。同理,右側(cè)陣列新增了存儲前一個二級緩存塊地址的表項(xiàng)501,及存儲下一個二級緩存塊地址的表項(xiàng)503,以及對應(yīng)于選擇器531的選擇器532。[0090]如同在圖4中一樣,比較器420控制一個三態(tài)門將選擇器531的輸出放上總線送往軌道表110中存儲;比較器422控制另一個三態(tài)門將選擇器532的輸出放上同一條總線送往軌道表110中存儲。標(biāo)簽118,標(biāo)簽120與輸入地址比較的結(jié)果決定哪個選擇器的輸出(哪一路的指令地址)被送入軌道表110存儲。[0091]由于本實(shí)施例中緩存器的組織形式是組相連。當(dāng)前二級指令塊的前一個或者后一個二級指令塊的索引地址可以通過當(dāng)前二級指令塊的索引地址(即圖4中307)減I或者加I得到,那么在新增的存儲前一塊地址的表項(xiàng)501、502和后一塊地址的表項(xiàng)503、504中,只需要存儲當(dāng)前二級指令塊的前一個或者后一個二級指令塊所在路組的路號(waynumber)即可。為了便于描述,在之后的實(shí)施例中,若無特別說明,“分支源指令”均為直接分支指令。[0092]當(dāng)二級緩存106中的一個二級指令子塊根據(jù)LRU替換策略填充進(jìn)一級緩存112中時,掃描器108對從二級緩存106送往一級緩存112的二級指令子塊進(jìn)行審查,當(dāng)發(fā)現(xiàn)該二級指令子塊中的某條指令是分支指令,即計(jì)算該分支源指令的分支目標(biāo)地址。[0093]為了降低功耗,即減少主動表104的訪問次數(shù),在掃描器108中判斷出分支目標(biāo)指令所在位置是否超出一級指令塊邊界、當(dāng)前二級指令塊邊界及當(dāng)前二級指令塊的前一個或者后一個二級指令塊邊界的方法來降低訪問主動表104的頻率。[0094]在本實(shí)施例中,用分支地址偏移量與基地址的低位相加的方法來確定分支目標(biāo)地址的地址邊界判斷情況。如圖5所示,將分支偏移量(OFFSET)571與基地址低位581相加,從加法器的三個邊界上提取進(jìn)位信號(574、575和576),該三個信號用優(yōu)先權(quán)邏輯處理使得有效的代表最大數(shù)據(jù)塊的‘界內(nèi)’信號會使得代表較小的數(shù)據(jù)塊的界內(nèi)信號無效。[0095]如圖5所示,將基地址低位581分成3部分,第一部分為基地址311的偏移量303,第二部分為塊偏移量306,第三部分579為地址中比塊偏移量306高一位。將分支偏移量571分成兩部分,低位部分573對應(yīng)基地址311的低位部分581,剩下的為高位部分572。同理,也將產(chǎn)生的和值582按照與基地址相同的邊界劃分成3部分,在每個邊界上產(chǎn)生進(jìn)位信號574,575和576。[0096]以分支偏移量571是正數(shù)為例,確定地址邊界判斷情況的方法如下:[0097]1、若分支偏移量571的高位部分572不全是‘0’,則加法器計(jì)算出的分支目標(biāo)地址超出當(dāng)前二級指令塊的后一個二級指令塊。此情況稱為情況I。[0098]2、若分支偏移量571的高位部分572全是‘0’,且進(jìn)位信號574、575和576都為‘0’,表明分支目標(biāo)地址在分支源指令所在一級指令塊中。此情況稱為情況2。[0099]3、若分支偏移量571的高位部分572全是‘0’,且進(jìn)位信號574為‘I’,而進(jìn)位信號575和576為‘0’,表明分支目標(biāo)地址在分支源指令所在二級指令塊中。此情況稱為情況3。[0100]4、若分支偏移量571的高位部分572全是‘0’,且進(jìn)位信號575為‘I’,而進(jìn)位信號576為‘0’,表明分支目標(biāo)地址在分支源指令所在二級指令塊的后一個二級指令塊中。此情況稱為情況4。[0101]5、若分支偏移量571的高位部分572全是‘0’,且進(jìn)位信號576為‘I’,表明分支目標(biāo)地址在分支源指令所在二級指令塊的后一個二級指令塊之外。此情況與情況I一致,也稱為情況I。[0102]對于分支偏移量571是負(fù)數(shù)的情況,也可按照前述方法確定地址邊界判斷情況。不同之處在于,首先判斷分支偏移量571的高位部分572是否為全‘I’。若分支偏移量571的高位部分572不全是‘I’,即為前述情況I;若分支偏移量571的高位部分572全是‘I’,且進(jìn)位信號574、575和576都為‘0’,即為前述情況2;若分支偏移量571的高位部分572全是‘I’,且進(jìn)位信號574為‘I’,而進(jìn)位信號575和576為‘0’,即為前述情況3;若分支偏移量571的高位部分572全是‘1’,且進(jìn)位信號575為‘1’,而進(jìn)位信號576為‘0’,即為前述情況4;若分支偏移量571的高位部分572全是‘I’,且進(jìn)位信號576為‘1’,即為前述情況I。[0103]因此可以基于上述關(guān)系減少對主動表的訪問頻率。當(dāng)掃描器108掃描一個指令段時,以被暫存在掃描器中的該指令段的BNlX基地址及PC地址計(jì)算分支目標(biāo)指令地址,計(jì)算所得的分支目標(biāo)所在位置有如下幾種情況。[0104]當(dāng)掃描器108審查得到地址邊界判斷情況I時,將掃描器108計(jì)算得到的分支目標(biāo)指令地址經(jīng)總線507送到主動表104,根據(jù)其中的索引位讀出相應(yīng)行,并將讀出的標(biāo)簽與掃描器108計(jì)算得到的分支目標(biāo)指令地址的標(biāo)簽進(jìn)行匹配,若匹配成功,后續(xù)操作與前述一致。若匹配不成功,根據(jù)計(jì)算得到的分支目標(biāo)地址從更低層次的存儲器中取出相應(yīng)指令塊填充到由替換策略確定的二級緩存塊中,后續(xù)操作與前述一致。[0105]當(dāng)掃描器108審查得到地址邊界判斷情況2時,分支目標(biāo)地址和分支源地址在同一個一級指令塊中,即分支目標(biāo)指令和分支源指令有相同的BN1X。此時,強(qiáng)制所有路組的三態(tài)門(如三態(tài)門541等)關(guān)斷,并將存儲在掃描器中的分支源BNlX和計(jì)算得到的偏移量303(即分支目標(biāo)BN1Y)合并為BNl經(jīng)總線505寫進(jìn)由掃描器108中暫存的分支源BNlX和BNlY指向的軌道表110的表項(xiàng)中,待執(zhí)行到該分支源指令時,處理器116可以直接從一級緩存112中直接讀取指令供處理器116使用。[0106]當(dāng)掃描器108審查得到地址邊界判斷情況3時,分支目標(biāo)地址和分支源地址在同一個二級指令塊中,即分支目標(biāo)指令和分支源指令有相同的BN2X。此時,將存儲在掃描器中的分支源指令所在指令塊的BN2X(包括路組號和索引位)經(jīng)總線507索引讀出主動表104相應(yīng)表項(xiàng)中的第二存儲塊(如第二存儲塊408或410),并用計(jì)算得到的塊偏移量306(Block-offset)選出該第二存儲塊中對應(yīng)存儲域的內(nèi)容。若存儲在所述存儲域中的BNlX值有效,則強(qiáng)制所述分支源BN2X中路組號對應(yīng)的路組的三態(tài)門導(dǎo)通,其他路組的三態(tài)門關(guān)斷,將該BNlX值經(jīng)總線508送到軌道表110,同時將計(jì)算得到的分支目標(biāo)BN2Y值去掉塊偏移量306后得到的分支目標(biāo)BNlY經(jīng)總線505送到軌道表110,兩者合并為分支目標(biāo)BNl寫進(jìn)軌道表110中由掃描器108中暫存的分支源BNlX和BNlY指向的表項(xiàng)中。若存儲在所述存儲域中的BNlX值無效,則強(qiáng)制所有路組的三態(tài)門關(guān)斷,并將存儲在掃描器108中的分支源BN2X和計(jì)算得到的分支目標(biāo)BN2Y合并為BN2經(jīng)總線505寫進(jìn)軌道表110中由掃描器108中暫存的分支源BNlX和BNlY指向的表項(xiàng)中。后續(xù)操作與前述一致。[0107]當(dāng)掃描器108審查得到地址邊界判斷情況4時,分支目標(biāo)地址在分支源地址的前一個二級指令塊或后一個二級指令塊中,即分支目標(biāo)指令的索引位值與分支源指令的索引位值相差‘±1’(即前一個二級指令塊的索引位值與分支源指令的索引位值相差‘-1’,后一個二級指令塊索引位的值與分支源指令索引位的值相差‘+I’)。此時,將存儲在掃描器中的分支源BN2X(包括路組號和索引位)經(jīng)總線507索引讀出主動表104相應(yīng)表項(xiàng)中的第三存儲塊(如第三存儲塊501、502或502、504),并根據(jù)所述地址邊界判斷結(jié)果,當(dāng)分支目標(biāo)地址在分支源地址的前一個二級指令塊時選擇相應(yīng)的存儲域P(如第三存儲塊501或50),當(dāng)分支目標(biāo)地址在分支源地址的后一個二級指令塊時選擇相應(yīng)的存儲域N(如第三存儲塊503或504中)。若被選出的存儲域中存儲的路組號有效,則強(qiáng)制所述分支源BN2X中路組號對應(yīng)的路組的三態(tài)門導(dǎo)通,其他路組的三態(tài)門關(guān)斷,將該路組號經(jīng)總線508送到軌道表110,同時將存儲在掃描器108中的分支源索引位進(jìn)行減一或增一操作后得到的新的索引位的值和計(jì)算得到的分支目標(biāo)BN2Y值經(jīng)總線505送到軌道表110,兩者合并為分支目標(biāo)BN2寫進(jìn)軌道表110中掃描器108中暫存的分支源BNlX和BNlY指向的表項(xiàng)中。若被選出的存儲域中存儲的路組號無效,則根據(jù)掃描器108計(jì)算得到的分支目標(biāo)地址經(jīng)總線506送到主動表104中進(jìn)行索引匹配,后續(xù)操作與前述地址邊界判斷情況I的操作一致。[0108]上述實(shí)施例中減少了讀取主動表104中標(biāo)簽與地址相比較的頻率,但是在情況2與3中還需要以路組號,索引地址307直接查找圖5中主動表104中的一行中408,410表項(xiàng)以獲得同一個二級指令塊中的第一指令地址,或501,502表項(xiàng)中的前一第二地址,或503,504表項(xiàng)中的下一第二地址。如果在掃描器108掃描從低層緩存器126或128向高層緩存器112填充的指令塊時,將與該指令塊相應(yīng)的主動表(104)行(與上述指令塊同一路組號,同一索引地址)中的上述表項(xiàng)填入掃描器108中暫存,即可進(jìn)一步減少對主動表104的訪問頻率。更進(jìn)一步地,當(dāng)上述掃描器108中的暫存器具有多個獨(dú)立的讀口,則正在被掃描的指令段中的復(fù)數(shù)條分支指令可以同時根據(jù)各自的分支目標(biāo)指令的地址邊界判斷情況,獨(dú)立通過訪問分配給該指令的讀口以映射得到該指令分支目標(biāo)的BNl或BN2形式地址,以便存放入軌道表110。[0109]圖6是本發(fā)明所述二級緩存結(jié)構(gòu)中掃描器構(gòu)成的另一具體實(shí)施例600。在本實(shí)施例中,高層緩存器112每個指令塊含有4條指令,即偏移量303BNY地址為兩位;低層緩存器126或128每個緩存塊含有4個高層緩存塊,即塊偏移306地址也為兩位。軌道表104中一行對應(yīng)一個低層緩存塊,行中含有如408中的4個存儲BNlX地址的表項(xiàng),及如501存儲前一低層地址塊的路組號的表項(xiàng),及如503存儲下一低層地址塊的路組號的表項(xiàng)。每次從低層指令緩存器126或128填充一個高層緩存塊共4條指令到高層緩存器112。掃描器108中相應(yīng)有一個譯碼和判斷模塊601,其中包4個指令譯碼和判斷字塊,每個子塊含有一個指令譯碼器及一個加法器如607。掃描器108還包含一個微型主動塊660。整個掃描器608可以代入圖5中掃描器108,其他項(xiàng)層結(jié)構(gòu)與圖5中相同,在圖中只顯示了軌道表110。[0110]當(dāng)一個高層指令塊被送到掃描器608掃描時,其相應(yīng)主動表行被同時從主動表104讀出,連同該行的路組號,索引值307(即該指令塊的低層緩存塊號),塊偏移306都被送到掃描器108暫存。其中掃描器108中存儲主動表行中的標(biāo)簽表項(xiàng)118,以及上述306的存儲器都未在圖6中顯示。掃描器608中的微型主動塊660含有620,621,622,623個存儲表項(xiàng),以存儲主動表104中如408表項(xiàng)中的4個BNlX地址。660中還含有624,625及626共3個表項(xiàng),其中624表項(xiàng)存儲如104中501表項(xiàng)的前一低層緩存塊的路組號,625表項(xiàng)存儲當(dāng)前低層緩存塊的路組號以及索引地址,626表項(xiàng)存儲如104中503表項(xiàng)中的下一低層緩存塊的路組號。其中625表項(xiàng)中存儲的就是正被掃描的指令塊的二級地址路組號以及索引地址307,與指令塊同時讀進(jìn)掃描器608。[0111]微型主動塊中還有5個選擇器570-574,其中4個570-573是同樣結(jié)構(gòu),按照相應(yīng)譯碼和判斷子塊產(chǎn)生的地址邊界判斷情況選擇表項(xiàng)630-636的內(nèi)容直接或經(jīng)運(yùn)算后產(chǎn)生BNlX或BN2X地址,連同加法器如607等算出的地址偏移量303,做為被掃描指令的分支目標(biāo)地址存入軌道表中對應(yīng)被掃描指令的表項(xiàng)。第5個選擇器574選擇表項(xiàng)630-636的內(nèi)容填充軌道中的結(jié)束軌跡點(diǎn),其選擇控制與選擇器570-573的有所不同。[0112]譯碼和判斷模塊601每個譯碼和判斷子塊對應(yīng)4條指令中的一條,子塊中的指令譯碼器對其負(fù)責(zé)的指令進(jìn)行譯碼,如指令類型不是分支指令,則該子塊譯碼產(chǎn)生的指令類型被存入軌道表中與該指令對應(yīng)的表項(xiàng),掃描器不為該指令計(jì)算分支地址。如指令類型是分支指令(該指令以下被稱為分支源指令),則該子塊如前例產(chǎn)生一個地址邊界判斷,用以選擇分支目標(biāo)地址,與譯碼產(chǎn)生的指令種類一同填充軌道表110中分支源指令對應(yīng)的表項(xiàng)。以下的例子講述子塊譯碼的指令為分支指令時的情況。[0113]以下都以分支偏移量為正數(shù)說明以便于理解。分支偏移量為負(fù)數(shù)可以此類推。如前例各子塊先對該指令的分支偏移量571中高位572進(jìn)行是否全‘0’的判斷,如非全‘0’,則地址邊界判斷為情況I。在此判斷下,將該指令分支偏移量與該指令的基地址相加?;刂芳磼呙杵髦袝捍娴臉?biāo)簽(來自主動表104中408表項(xiàng)),索引值(即存在625表項(xiàng)中的307),塊偏移306,及偏移量303BNY合并。指令塊4條指令各自的基地址其前3個部分都相同,只有BNY各自不同。按指令順序第I條指令的BNY為‘0’,之后3條指令的BNY依次為‘1’,‘2’,‘3’。相加后的和即為分支目標(biāo)的存儲器地址,以這個存儲器地址中的索引部分307為地址讀出主動表104中左右陣列中的各一行。由存儲器地址中的塊偏移306控制選擇器521選擇行中4個表項(xiàng)408中一個中存儲的BN1X,經(jīng)選擇器531選擇(在地址邊界判斷情況I下固定選擇521的輸出)送往三態(tài)門541。行中的標(biāo)簽表項(xiàng)118與分支目標(biāo)的存儲器地址中的標(biāo)簽部分311在比較器420中比較,如結(jié)果為相同,則相同的比較結(jié)果使能(enable)三態(tài)門541,三態(tài)門541的輸出與存儲器地址中的303偏移量BNY合并送往軌道表中該被掃描指令的對應(yīng)表項(xiàng)存儲。如果是右面陣列的標(biāo)簽表項(xiàng)120與分支目標(biāo)的存儲器地址中的標(biāo)簽部分311在比較器422中比較結(jié)果為相同,則最后送往軌道表存儲的地址中的BNlX來自表項(xiàng)410,原理相同,不再贅述。以下講述分支偏移量中高位是全‘0’的情況。[0114]各譯碼和判斷子塊將各自負(fù)責(zé)處理的分支指令的中分支偏移量571與該指令基地址中的塊偏移量306,偏移量303由子塊內(nèi)的加法器如607相加(基地址中的更高位如索引位722,標(biāo)簽721被棄用)。每個子塊根據(jù)相加時產(chǎn)生的進(jìn)位信號依前述方法產(chǎn)生地址邊界判斷,并根據(jù)地址邊界判斷產(chǎn)生控制信號控制選擇器選擇適當(dāng)?shù)拇鎯ζ鞅眄?xiàng)620-626中的值供填充軌道表。以被掃描的指令塊中的順序第一條指令為例,該指令中的分支偏移量571與該指令中的塊偏移量306,偏移量303(對順序第一條指令其偏移量303為‘0’)在加法器607中相加。如該子塊的地址邊界判斷為情況1,則如上述同樣做法,計(jì)算分支目標(biāo)的存儲器地址由掃描器608送往主動表104映射為一級緩存地址BNl后存入軌道表中分支源指令對應(yīng)表項(xiàng)中。[0115]如地址邊界判斷為情況2或情況3,則該地址邊界判斷將加法器607產(chǎn)生的和中的塊偏移量306放上控制線610以控制選擇器670。如塊偏移量306為‘00’,則選擇器670選擇存儲表項(xiàng)620中的內(nèi)容,如該內(nèi)容的有效位為‘有效’時,選擇器670輸出存儲表項(xiàng)620中的BNlX地址;當(dāng)存儲表項(xiàng)620中的內(nèi)容中的有效位為‘無效’時,選擇器670輸出存儲表項(xiàng)625中存儲的路組號,索引位307。該輸出的路組號,索引位307與加法器607產(chǎn)生的和中的塊偏移量306,偏移量303(BNY)合并后被送到軌道表110中一條軌道中的第一個表項(xiàng)。該軌道是正被掃描的指令塊被存入的一級緩存器中的一級緩存塊的對應(yīng)軌道。當(dāng)加法器607產(chǎn)生的和中的塊偏移量306為‘01’,‘10’,及‘11’時,則選擇器670相應(yīng)選擇存儲表項(xiàng)621,622,及623中的內(nèi)容,如內(nèi)容無效,則選表項(xiàng)625,與上述相同。[0116]如地址邊界判斷為情況4,且分支目標(biāo)指令在前一個二級緩存塊中時,則控制線610控制選擇器670選擇存儲表項(xiàng)624讀出其中的路組號,選擇存儲表項(xiàng)625讀出其中的索引307。以表項(xiàng)624的上塊路組號,表項(xiàng)625中的索引307減‘I’,加法器607產(chǎn)生的和中的塊偏移量306,偏移量303合并成BN2地址存入上述軌道中的第一個表項(xiàng)。如地址邊界判斷為情況4,且分支目標(biāo)指令在下一個二級緩存塊中時,則控制線610控制選擇器670選擇存儲表項(xiàng)626讀出其中的路組號,選擇存儲表項(xiàng)625讀出其中的索引307。以表項(xiàng)626的下塊路組號,表項(xiàng)625中的索引307加‘I’,加法器607產(chǎn)生的和中的塊偏移量306,偏移量303合并成BN2地址存入上述軌道中的第一個表項(xiàng)。[0117]處理其他3條指令的其他3個子塊也按上述方式對各自指令獨(dú)立進(jìn)行操作,獨(dú)立作出該指令的地址邊界判斷,根據(jù)判斷經(jīng)控制線611,612,613分別控制選擇器671,672,673選取存儲表項(xiàng)620-626中內(nèi)容,連響應(yīng)子塊中加法器產(chǎn)生的和中的部分,分別填充軌道中的2,3,4表項(xiàng)。[0118]軌道中最后一個表項(xiàng),即結(jié)束軌跡點(diǎn),由選擇器674的輸出填充。選擇器由該指令段的基地址614中的塊偏移量306直接控制。當(dāng)塊偏移量306為‘00’時,選擇器674選擇存儲表項(xiàng)621。當(dāng)存儲表項(xiàng)621中的有效位為‘有效’時,選擇器674輸出存儲表項(xiàng)631中的BNlX地址;當(dāng)存儲表項(xiàng)621中的內(nèi)容中的有效位為‘無效’時,選擇器674輸出存儲表項(xiàng)625中存儲的路組號,索引位307。該輸出與加法器607產(chǎn)生的和中的塊偏移量306加‘I’,偏移量303(BNY)合并后被送到軌道表110中一條軌道中的結(jié)束表項(xiàng)。當(dāng)基地址中的塊偏移量306為‘01’,‘10’,時,則選擇器674相應(yīng)選擇存儲表項(xiàng)622,及623中的內(nèi)容,如內(nèi)容無效,則選表項(xiàng)625,與上述相同。當(dāng)基地址中的塊偏移量306為‘11’時,選擇器674選擇存儲表項(xiàng)626讀出其中的路組號,選擇存儲表項(xiàng)625讀出其中的索引307。以表項(xiàng)626的下塊路組號,表項(xiàng)625中的索引307加‘1’,加法器607產(chǎn)生的和中的塊偏移量306,偏移量303合并成BN2地址存入上述軌道中的結(jié)束軌跡點(diǎn)表項(xiàng)。[0119]在本實(shí)施例中,主動表104也可以采用多端口讀寫的方式構(gòu)成,以實(shí)現(xiàn)多個分支目標(biāo)地址同時對主動表的訪問。[0120]圖7是按全相聯(lián)方式組織的微型軌道表中使用的存儲器及格式。請看圖7A,其為全相聯(lián)的微型軌道塊中一個存儲器820的結(jié)構(gòu)。存儲器820中含有6個表項(xiàng),對應(yīng)一個含有4個一級指令塊的二級指令塊。其中表項(xiàng)710存有對應(yīng)于二級指令塊中塊內(nèi)位移為‘00’的一級指令塊的一級指令塊號BNlX及其有效信號;表項(xiàng)711,712,713相應(yīng)存有塊內(nèi)位移分別為‘01’,‘10’,‘11’的一級指令塊的一級指令塊號。表項(xiàng)714存有本二級指令塊的路組號(Waynumber)及索引地址307(index)。表項(xiàng)715存有下塊二級緩存塊的路組號。[0121]請看圖8,其為全相聯(lián)的微型軌道表的一個實(shí)施例,其中模塊110為軌道表,模塊808為掃描器,可代提圖5中掃描器108。功能塊801是類似圖6實(shí)施例中指令譯碼和判斷模塊601的,對經(jīng)過掃描器的一個指令塊中的復(fù)數(shù)條指令進(jìn)行獨(dú)立指令譯碼及計(jì)算分支目標(biāo)地址的功能塊。功能塊801將每條譯碼結(jié)果為分支指令的指令基地址(BaseAddress,如圖6中所述,該復(fù)數(shù)條指令的基地址的高位相同,但此例中基地址最低兩位隨指令在指令塊內(nèi)的位置有所不同)與該指令的分支位移(BranchOffset,即分支地址偏移量)相加,其和即分支目標(biāo)地址,以此地址控制對微型主動塊881內(nèi)容的選擇。請見圖7B,這些分支目標(biāo)地址可以被劃分為4部分,從高位往低位按減序排列,分別是微標(biāo)簽部分(Tag)721,微索引(Index)722,塊偏移量(BlockOffset)306及偏移量303。微標(biāo)簽721,微索引722與本公開的其他實(shí)施例中的標(biāo)簽311,索引307不同。其中微索引722只有兩位,因?yàn)槊總€微型主動塊只含有4條與二級指令塊對應(yīng)的主動表行,對應(yīng)一個二級指令塊中有4個一級指令塊,微索引值等于主動表索引307的最低兩位。因此主動表索引307中的其他位被合并到微標(biāo)簽721中。地址是一樣的,只是本實(shí)施例在地址的不同位上劃分標(biāo)簽與索引。微標(biāo)簽721中含標(biāo)簽311及主動表索引307除最低兩位之外的其他位。[0122]其中前3部分721,722與306經(jīng)總線810,811,812,813送到各微型主動塊(如微型主動塊881,883)用以控制其中的選擇器;偏移量303則是與對應(yīng)選擇器輸出的BNX合并成完整的BN地址以填充軌道表110中表項(xiàng)。回到圖8,微型主動塊881中包含存儲軌道表表項(xiàng)的存儲器820,821,822,823及多路選擇器870,871,872,873,874。其中存儲器820等存儲器即為圖7A中結(jié)構(gòu)。[0123]微型主動塊881中有一個微標(biāo)簽寄存器851,其中存有與微型主動塊881中所存的主動表表項(xiàng)對應(yīng)的一段連續(xù)指令的基地址。另有4個比較器860,861,862,863。該4個比較器的一個輸入與寄存器851的輸出連接,另一個輸入分別連接上述4個分支目標(biāo)地址810,811,812,813。4個分支目標(biāo)地址810,811,812,813被分別送到微型主動塊881,883(與微型主動塊881同樣結(jié)構(gòu))與其中微標(biāo)簽寄存器中的微標(biāo)簽比較。在微型主動塊881中,設(shè)分支目標(biāo)地址810中微標(biāo)簽部分721經(jīng)比較器860比較,與微寄存器851中的微標(biāo)簽相同。比較器860以分支目標(biāo)地址810中微索引307及塊偏移量306控制選擇器870。其中微索引307選擇4個存儲器中的一個,當(dāng)微索引為‘00’選擇820,當(dāng)微索引為‘01’,‘10’,‘11’,分別選擇存儲器821,822,823。而塊偏移量306從被選中的存儲器中選擇其中4組BNlX地址及有效位中的一組;當(dāng)該被選中的組中的有效位為‘有效’時,選擇器870輸出該被選中組中的BNlX地址;當(dāng)該被選中的組中的有效位為‘無效’時,選擇器870輸出存儲器820表項(xiàng)724中存儲的路組號,索引位307,連同分支目標(biāo)地址810上的塊偏移量306—同輸出。該輸出與來自另一微型主動塊883的同一輸出端經(jīng)或門840或操作后,與來自加法器607的偏移量303合并送往軌道表110寫入由地址總線505指向的軌道中的第一個表項(xiàng)。[0124]在微型主動塊881中,設(shè)分支目標(biāo)地址811中微標(biāo)簽部分721經(jīng)比較器861比較,其結(jié)果與微標(biāo)簽寄存器851中的微標(biāo)簽不同,此時比較器861送出信號控制選擇器871輸出全‘0’輸出,使其不影響其他微型主動塊(如微型主動塊883)中的相應(yīng)輸出。如分支目標(biāo)地址811中的微標(biāo)簽721與所有微型主動塊中存儲的微標(biāo)簽比較都不匹配,則將分支目標(biāo)811送往主動表104讀取分支目標(biāo)地址811指向的表項(xiàng)讀取該表項(xiàng)填入軌道表中由地址總線505指向的軌道上的第2個表項(xiàng)。同理,其余2個分支目標(biāo)指令地址812,813各自控制選擇器872,873選擇16個BNl中的I個;或者路組號及索引位307,連同目標(biāo)指令地址上的塊偏移量306;或者全‘0’輸出。該輸出與相應(yīng)的BNlY合并后,與來自微型主動塊883的相應(yīng)輸出進(jìn)行或操作后,送往軌道表110寫入上述軌道的3,4表項(xiàng)存儲。如果一條指令不是分支指令,指令譯碼控制該指令相應(yīng)的比較器不做比較,如指令892不是分支指令,分支目標(biāo)地址812的有效位為‘無效’,因此各微型主動塊881,883中的相應(yīng)比較器862不做比較。指令譯碼產(chǎn)生的非分支指令類型被存入軌道表110中上述軌道的第3表項(xiàng)。[0125]存儲到該軌道中結(jié)束軌跡點(diǎn)中的下塊地址通過相似的比較,譯碼選擇功能提供。選擇器874與存儲器820等的連接方式與選擇器870-873的連接方式有所不同,在同樣的地址控制下選擇器874選擇870-873的順序下一個地址的輸入。如地址的微索引722及塊偏移306位為‘0000’時,選擇器870-873選擇存儲器820中表項(xiàng)710,但根據(jù)同樣的地址選擇器874選擇存儲器820中表項(xiàng)711;如地址的微索引722及塊偏移306為‘0011’時,選擇器870-873選擇存儲器820中表項(xiàng)713,但選擇器874選擇存儲器821中表項(xiàng)710。如地址的微索引及塊偏移量306為‘1111’時比較特殊,選擇器870-873選擇存儲器823中表項(xiàng)713,但選擇器874選擇存儲器823中表項(xiàng)715中的路組號及表項(xiàng)714中的二級指令塊號加‘1’,連同地址中的塊偏移306—起作為下塊地址。本塊地址814(即正被處理的指令塊的基地址)中的微標(biāo)簽721被送到各微型主動塊中與其中存儲的微標(biāo)簽比較。設(shè)微型主動塊881中比較器864比較本塊地址814上的微微與微標(biāo)簽寄存器851的輸出,其比較結(jié)果相同,則比較器864以本塊地址814上的索引722及塊偏移量306部分控制選擇器874。當(dāng)選中的一級指令塊地址BNlX其有效位為‘有效’時,將表項(xiàng)輸出。當(dāng)選中的一級指令塊地址BNlX其有效位為‘無效’時,選擇器874選擇該存儲器中823中表項(xiàng)724中的路組碼,索引地址307與地址814上的塊偏移量306—同輸出。如果需要的下塊地址不在各微型主動塊中而在主動表110中,也按相似方式將其填入軌道的結(jié)束軌跡點(diǎn)。如此完成對整條軌道的填充。請看圖7C,其為軌道表中的地址格式。其中地址格式760為一級緩存地址格式,由BNlX761及偏移量BNY303組成。其中地址格式780為二級緩存地址格式,由路組號781,索引地址307,塊偏移量306,偏移量BNY303組成。[0126]回到圖8,進(jìn)一步地,當(dāng)上述分支目標(biāo)810,811,812,813及本塊地址814中的微標(biāo)簽,在掃描器800中與中所有的微型主動塊(如微型主動塊881,883)等都未匹配,如本實(shí)施例中將分支目標(biāo)地址811送往主動表104中讀取表項(xiàng)以供填充軌道表110時,分支目標(biāo)地址811指向的行可以被填充到由掃描器800中的置換邏輯(如LRU,圖中未顯示)指定的一個微型主動塊(如微型主動塊883)中的由分支目標(biāo)811中的微索引位722指定的存儲器,替換原有的表項(xiàng),比如當(dāng)微索引位為‘10’,則替換微型主動塊883中存儲器822內(nèi)容。其方式是將分支目標(biāo)811指向的主動表104中一行中的4個BNlX及其有效信號依次填入表項(xiàng)710,711,712,713;將該主動表行的路組號及索引號307填入表項(xiàng)714作為本塊的二級緩存塊號;將該主動表行中下塊表項(xiàng)如503中的路組號填入表項(xiàng)715。另將分支目標(biāo)811中微標(biāo)簽存入微型主動塊883中的微標(biāo)簽寄存器851;及將存儲器820,821,823中的有效位置為‘無效’。此后可以在主動表未被訪問的周期將存儲器820,821,823中的各表項(xiàng)更新。[0127]置換邏輯可根據(jù)特定算法指定一個微型主動塊作為置換對象。以LRU為例,在每個微型主動塊中存儲有一個有復(fù)數(shù)位的計(jì)數(shù)值,其最低位在右方。每當(dāng)塊中任何一個比較器匹配時該計(jì)數(shù)值就左移I位,并在最低位填充‘I’。置換邏輯觀察所有各塊中的計(jì)數(shù)值,如有任意一個計(jì)數(shù)值的最低位為‘0’,則以該計(jì)數(shù)值所在的微型主動塊為被置換對象。如所有計(jì)數(shù)值都不為‘0’,則置換邏輯控制所有各微型主動塊中的計(jì)數(shù)值都各右移一位,直到有一個計(jì)數(shù)值最低位為‘0’,即以該計(jì)數(shù)值所在的微型主動塊為被置換對象。[0128]本發(fā)明還可以用組相連結(jié)構(gòu)的微型主動塊支持對掃描器108正在掃描的一個指令塊中的全部指令同時進(jìn)行地址映射。組相連結(jié)構(gòu)的微型主動塊其結(jié)構(gòu)類似一個縮小的主動表104,比如列數(shù),表項(xiàng)一樣但只有8行,且有4個讀口對應(yīng)一個指令塊中最多4條指令。每個讀口對應(yīng)軌道表110中一個表項(xiàng)。此外圖5中選擇器521,531,比較器420,三態(tài)門541等都是4套。4條分支指令的4個分支地址用于對組相連結(jié)構(gòu)的微型主動塊尋址。其中4個微索引(此例中為3位)分別從2路組的兩個陣列中各4個讀口讀出8行內(nèi)容,其中的8組BNlX地址各由4個分支地址中的塊偏移量306從每組中選擇一個;8個微標(biāo)簽(較標(biāo)簽311長,因包括索引307中除最低3位以外的位)在8個比較器中分別與4個分支地址中的微標(biāo)簽比較。一個讀口兩路中比較結(jié)果相同的一路驅(qū)動其3態(tài)門將該讀口該路中上述由306選中的BNlX寫入軌道表中該讀口對應(yīng)的表項(xiàng)。4個讀口各寫軌道中一個表項(xiàng)。[0129]需要說明的是,本發(fā)明所述全部技術(shù)方案還可以被擴(kuò)展到更多層次的緩存系統(tǒng)中。[0130]根據(jù)本發(fā)明技術(shù)方案和構(gòu)思,還可以有其他任何合適的改動。對于本領(lǐng)域普通技術(shù)人員來說,所有這些替換、調(diào)整和改進(jìn)都應(yīng)屬于本發(fā)明所附權(quán)利要求的保護(hù)范圍?!緳?quán)利要求】1.一種高性能指令緩存方法,其特征在于,處理器核連接一個包含可執(zhí)行指令的第一存儲器、一個比第一存儲器速度更快的第二存儲器;所述方法包括:對正被從第一存儲器填充到第二存儲器的指令進(jìn)行審查,從而提取出至少包括分支信息的指令信息;根據(jù)提取出的指令信息建立復(fù)數(shù)條軌道;根據(jù)復(fù)數(shù)條指令軌道中的一條或多條軌道將至少一條或多條指令可能被處理器核執(zhí)行的指令從第一存儲器填充到第二存儲器;所述方法進(jìn)一步包括,第二存儲器采用全相聯(lián)的方式構(gòu)成,第一存儲器由組相聯(lián)的方式構(gòu)成。2.根據(jù)權(quán)利要求1所述方法,其特征在于,將軌道與第二存儲器中的指令塊一一對應(yīng)。3.根據(jù)權(quán)利要求1所述方法,其特征在于,通過一級塊號對目標(biāo)地址進(jìn)行尋址,從而確定該目標(biāo)指令是否屬于第二存儲器的某個指令塊。4.根據(jù)權(quán)利要求1所述方法,其特征在于,通過匹配,將二級塊號寫入軌道表,等到第一存儲器中的指令填充到第二存儲器中時,將其更改為一級塊號。5.根據(jù)權(quán)利要求1所述方法,其特征在于,對軌道進(jìn)行掃描,一旦發(fā)現(xiàn)有對主動表塊號的引用就將主動表對應(yīng)塊號的標(biāo)志位置位;同時依次將主動表中各個塊號的標(biāo)志位復(fù)位,從而用已置位的標(biāo)志位表示當(dāng)前被軌道引用的塊號,使之不會被替換出主動表。6.一種高性能指令緩存系統(tǒng),其特征在于,所述系統(tǒng)包括:處理器核,所述處理器核用以執(zhí)行指令;第一存儲器,所述第一存儲器用以存儲所述處理器核所需指令;第二存儲器,所述第二存儲器用以存儲所述處理器核所需指令,且所述第二存儲器的速度比所述第一存儲器更快;掃描器,所述掃描器用以對正被從第一存儲器填充到第二存儲器的指令進(jìn)行審查,從而提取出至少包括分支信息的指令信息;軌道表,所述軌道表用以存儲根據(jù)提取出的指令信息建立的復(fù)數(shù)條軌道;所述系統(tǒng)進(jìn)一步包括:第二存儲器采用全相聯(lián)的方式構(gòu)成;和第一存儲器由組相聯(lián)的方式構(gòu)成。7.根據(jù)權(quán)利要求6所述系統(tǒng),其特征在于,將軌道表中的軌道與第二存儲器中的指令塊--對應(yīng)。8.根據(jù)權(quán)利要求6所述系統(tǒng),其特征在于,第二存儲器中的每個指令塊對應(yīng)一個一級塊號。9.根據(jù)權(quán)利要求6所述系統(tǒng),其特征在于,對軌道表進(jìn)行掃描,一旦發(fā)現(xiàn)有對主動表塊號的引用就將主動表對應(yīng)塊號的標(biāo)志位置位;同時依次將主動表中各個塊號的標(biāo)志位復(fù)位,從而用已置位的標(biāo)志位表示當(dāng)前被軌道表引用的塊號,使之不會被替換出主動表。10.根據(jù)權(quán)利要求1所述方法,其特征在于,當(dāng)?shù)谝淮鎯ζ髦幸粋€指令塊對應(yīng)的順序地址的前一指令塊或后一指令塊已經(jīng)存儲在第一存儲器中時,主動表中存儲了該指令塊對應(yīng)的所述前一指令塊或后一指令塊在第一存儲器中的存儲位置信息。11.根據(jù)權(quán)利要求10所述方法,其特征在于,當(dāng)指令位于第一存儲器中當(dāng)前指令塊的前一指令塊或后一指令塊中時,可以根據(jù)存儲在主動表中的所述前一指令塊或后一指令塊的位置信息,直接在第一存儲器中找到該指令。12.根據(jù)權(quán)利要求10所述方法,其特征在于,對分支目標(biāo)指令地址進(jìn)行邊界判斷;根據(jù)所述判斷結(jié)果,對位于不同位置的分支目標(biāo)指令給予不同格式的地址。13.根據(jù)權(quán)利要求12所述方法,其特征在于,若分支目標(biāo)指令地址位于分支指令在第一存儲器中所在指令塊的前一或后一指令塊中,則以該分支指令所在指令塊的前一或后一指令塊的二級塊號作為該分支目標(biāo)指令的二級塊號,以該分支目標(biāo)指令地址中對應(yīng)第一存儲器的地址偏移量部分作為該分支目標(biāo)指令的偏移量。14.根據(jù)權(quán)利要求1、10所述方法,其特征在于,將正被從第一存儲器填充到第二存儲器的指令對應(yīng)的主動表內(nèi)容存儲在微型主動表中;若審查發(fā)現(xiàn)分支目標(biāo)指令位于分支指令的同一個二級指令塊中的不同一級指令塊、且該一級指令塊在微型主動表中對應(yīng)的一級塊號有效時,直接以從微型主動表中讀出的所述一級塊號作為所述分支目標(biāo)指令的一級塊號;若審查發(fā)現(xiàn)分支目標(biāo)指令位于分支指令的同一個二級指令塊中的不同一級指令塊、但該一級指令塊在微型主動表中對應(yīng)的一級塊號無效時,直接以所述分支指令的二級塊號作為所述分支目標(biāo)指令的二級塊號;若審查發(fā)現(xiàn)分支目標(biāo)指令位于分支指令的前一個或后一個二級指令塊、且該前一個或后一個二級指令塊在微型主動表中對應(yīng)的二級塊號有效時,直接以從微型主動表中讀出的所述二級塊號作為所述分支目標(biāo)指令的二級塊號。15.根據(jù)權(quán)利要求1、10所述方法,其特征在于,將復(fù)數(shù)個二級塊號及這些塊號在主動表中對應(yīng)的內(nèi)各存儲在微型王動表中;在若申查發(fā)現(xiàn)分支目標(biāo)指令時,首先將分支目標(biāo)指令地址在所述微型主動表中匹配,若匹配成功,則直接以從微型主動表中讀出的一級塊號或二級塊號作為所述分支目標(biāo)指令的一級塊號或二級塊號;若匹配不成功,則再將分支目標(biāo)指令地址送往主動表匹配。16.根據(jù)權(quán)利要求6所述系統(tǒng),其特征在于,主動表的表項(xiàng)與第一存儲器中的指令塊一一對應(yīng),每個表項(xiàng)存儲了第一存儲器中相應(yīng)指令塊的塊地址;且當(dāng)?shù)谝淮鎯ζ髦幸粋€指令塊對應(yīng)的順序地址的前一指令塊或后一指令塊已經(jīng)存儲在第一存儲器中時,主動表中還存儲了該指令塊對應(yīng)的所述前一指令塊或后一指令塊在第一存儲器中的存儲位置信息。17.根據(jù)權(quán)利要求16所述方法,其特征在于,對分支目標(biāo)指令地址進(jìn)行邊界判斷;根據(jù)所述判斷結(jié)果,對位于不同位置的分支目標(biāo)指令給予不同格式的地址。18.根據(jù)權(quán)利要求17所述系統(tǒng),其特征在于,所述系統(tǒng)包含單數(shù)個或復(fù)數(shù)個加法器;所述加法器用于對分支指令本身在第一存儲器對應(yīng)的偏移量以外部分中的低位與分支轉(zhuǎn)移距離中的相應(yīng)位相加,判斷所述分支目標(biāo)指令是否位于第一存儲器中所述分支指令所在的指令塊順序地址的前一個或后一個指令塊中;當(dāng)分支目標(biāo)指令位于第一存儲器中當(dāng)前指令塊的前一指令塊或后一指令塊中時,可以根據(jù)存儲在主動表中的所述前一指令塊或后一指令塊的位置信息,直接在第一存儲器中找到該指令。19.根據(jù)權(quán)利要求6、16所述系統(tǒng),其特征在于,所述系統(tǒng)還包括微型主動表;所述微型主動表用于存儲正被從第一存儲器填充到第二存儲器的指令對應(yīng)的主動表內(nèi)容;當(dāng)掃描器若審查發(fā)現(xiàn)分支目標(biāo)指令位于分支指令的同一個二級指令塊中的不同一級指令塊、且該一級指令塊在微型主動表中對應(yīng)的一級塊號有效時,直接以從微型主動表中讀出的所述一級塊號作為所述分支目標(biāo)指令的一級塊號;若審查發(fā)現(xiàn)分支目標(biāo)指令位于分支指令的同一個二級指令塊中的不同一級指令塊、但該一級指令塊在微型主動表中對應(yīng)的一級塊號無效時,直接以所述分支指令的二級塊號作為所述分支目標(biāo)指令的二級塊號;若審查發(fā)現(xiàn)分支目標(biāo)指令位于分支指令的前一個或后一個二級指令塊、且該前一個或后一個二級指令塊在微型主動表中對應(yīng)的二級塊號有效時,直接以從微型主動表中讀出的所述二級塊號作為所述分支目標(biāo)指令的二級塊號。20.根據(jù)權(quán)利要求6、16所述方法,其特征在于,所述系統(tǒng)還包括微型主動表;所述微型主動表用于存儲復(fù)數(shù)個二級塊號及這些塊號在主動表中對應(yīng)的內(nèi)容;當(dāng)掃描器若審查發(fā)現(xiàn)分支目標(biāo)指令時,首先將分支目標(biāo)指令地址在所述微型主動表中匹配,若匹配成功,則直接以從微型主動表中讀出的一級塊號或二級塊號作為所述分支目標(biāo)指令的一級塊號或二級塊號;若匹配不成功,則再將分支目標(biāo)指令地址送往主動表匹配?!疚臋n編號】G06F12/08GK104424132SQ201410430931【公開日】2015年3月18日申請日期:2014年8月22日優(yōu)先權(quán)日:2013年8月23日【發(fā)明者】林正浩申請人:上海芯豪微電子有限公司