亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

分支處理方法與系統(tǒng)與流程

文檔序號(hào):11653949閱讀:442來(lái)源:國(guó)知局
分支處理方法與系統(tǒng)與流程
本發(fā)明涉及電子計(jì)算機(jī)和微處理器體系結(jié)構(gòu)領(lǐng)域,具體涉及分支處理方法與系統(tǒng)。
背景技術(shù)
:控制相關(guān)(controlhazards)也稱為分支(branch),是流水線性能損失的一大原因。在處理分支指令時(shí),傳統(tǒng)處理器無(wú)法提前知道應(yīng)該從哪里獲取分支指令之后執(zhí)行的下一條指令,而是需要等到分支指令完成后才能知道,使得流水線中分支指令之后出現(xiàn)空周期。圖1是顯示了傳統(tǒng)流水線結(jié)構(gòu),其中的流水線段對(duì)應(yīng)了一條分支指令。表1分支指令的流水線段(分支轉(zhuǎn)移發(fā)生時(shí))順序iifidexmemwbi+1ifstallstallstall目標(biāo)ifidexmem目標(biāo)+1ifidex目標(biāo)+2ifid指令地址ii+1目標(biāo)目標(biāo)+1目標(biāo)+2目標(biāo)+3目標(biāo)+4獲取指令ii+1目標(biāo)目標(biāo)+1目標(biāo)+2目標(biāo)+3時(shí)鐘周期1234567結(jié)合圖1與表1一同說(shuō)明,表1中的列表示流水線中的時(shí)鐘周期,而行表示按順序的指令。指令地址是提供給指令存儲(chǔ)器用于在獲取指令時(shí)進(jìn)行尋址,之后指令存儲(chǔ)器的輸出被送到譯碼器對(duì)獲取到的指令進(jìn)行譯碼。該流水線包括指令獲取(if)、指令譯碼(id)、執(zhí)行(ex)、存儲(chǔ)器訪問(wèn)(mem)和寫回(wb)。停止(“stall”)表示流水線暫停或空周期。表1顯示了一個(gè)被標(biāo)記為‘i’的分支指令,該指令在時(shí)鐘周期‘1’被獲取到。此外,‘i+1’表示緊跟在該分支指令之后的指令,“目標(biāo)”表示該分支點(diǎn)的分支目標(biāo)指令,而“目標(biāo)+1”、“目標(biāo)+2”、“目標(biāo)+3”和“目標(biāo)+4”表示緊跟在該分支目標(biāo)指令之后的順序指令。如表1所示,在時(shí)鐘周期‘2’,處理器獲取到分支指令‘i’。在時(shí)鐘周期‘3’,處理器獲取到指令‘i+1’,并對(duì)分支指令‘i’進(jìn)行譯碼。假設(shè)在該分支指令譯碼段的結(jié)尾可以計(jì)算出分支目標(biāo)地址,并完成分支判定。如果分支判定為分支轉(zhuǎn)移發(fā)生,那么分支目標(biāo)地址就被保存為下一地址用于獲取下一指令。在時(shí)鐘周期‘4’,獲取分支目標(biāo)指令,并在之后周期進(jìn)行譯碼和執(zhí)行。從這里開(kāi)始,流水線處理分支目標(biāo)指令后面的指令。然而,在這種情況下,已經(jīng)被獲取到的緊跟在分支指令之后的指令‘i+1’是不應(yīng)該被執(zhí)行的,因此流水線會(huì)因?yàn)橹噶睢甶+1’而暫停。這樣,當(dāng)分支轉(zhuǎn)移成功發(fā)生時(shí),流水線會(huì)有一個(gè)時(shí)鐘周期的暫停,這會(huì)導(dǎo)致流水線操作性能明顯降低。為了減少分支處理對(duì)流水線性能的不利影響,已經(jīng)有各種靜態(tài)或動(dòng)態(tài)的分支預(yù)測(cè)方法被提出,如:延時(shí)槽、分支預(yù)測(cè)緩沖、分支目標(biāo)緩沖和跟蹤緩存(tracecache)等。然而,這些預(yù)測(cè)方法通常根據(jù)處理器之前的運(yùn)行結(jié)果進(jìn)行預(yù)測(cè),因此仍然會(huì)有預(yù)測(cè)錯(cuò)誤而導(dǎo)致的性能損失。本發(fā)明提出的方法與系統(tǒng)可用于解決上述一個(gè)或多個(gè)問(wèn)題,以及其他問(wèn)題。技術(shù)實(shí)現(xiàn)要素:本發(fā)明提出一種控制處理器流水線操作的方法。該處理器連接一個(gè)包含可執(zhí)行的計(jì)算機(jī)指令的存儲(chǔ)器。該方法包括判斷處理器即將執(zhí)行的指令是否是分支指令,并提供該分支指令的分支目標(biāo)指令地址和該分支指令在程序序列中的后一指令地址。該方法還包括至少根據(jù)分支目標(biāo)指令的地址對(duì)分支指令的分支判定,并根據(jù)該分支判斷,在分支指令到達(dá)其在流水線中的執(zhí)行段前,至少選擇分支目標(biāo)指令和后一指令中的一個(gè)作為執(zhí)行單元將要執(zhí)行的指令,使得無(wú)論分支指令的轉(zhuǎn)移是否發(fā)生都不會(huì)導(dǎo)致流水線操作的暫停。本發(fā)明還提出一種用于控制處理器流水線操作的流水線控制系統(tǒng)。該處理器連接一個(gè)包含可執(zhí)行的計(jì)算機(jī)指令的存儲(chǔ)器。該系統(tǒng)包括一個(gè)審查單元、一個(gè)尋址單元、一個(gè)分支邏輯單元和一個(gè)選擇器。該審查單元用于判斷處理器即將執(zhí)行的指令是否為分支指令。該尋址單元連接處理器,用于提供分支指令的分支目標(biāo)指令地址和分支指令在程序序列中的后一指令地址。此外,分支邏輯單元用于至少根據(jù)尋址單元提供的分支目標(biāo)指令地址決定關(guān)于該分支指令的分支判定。該選擇器用于根據(jù)分支邏輯單元提供的分支判斷,在分支指令到達(dá)其在流水線中的執(zhí)行段之前,至少選擇分支目標(biāo)指令和后一指令中的一個(gè)作為所述執(zhí)行單元將要執(zhí)行的指令,使得無(wú)論該分支指令的轉(zhuǎn)移是否發(fā)生都不會(huì)導(dǎo)致流水線操作的暫停。本發(fā)明還提出一種控制處理器流水線操作的方法。該處理器連接一個(gè)包含可執(zhí)行的計(jì)算機(jī)指令的存儲(chǔ)器。該方法包括判斷處理器即將執(zhí)行的指令是否是分支指令,并提供該分支指令的分支目標(biāo)指令地址和該分支指令在程序序列中的后一指令地址。該方法還包括根據(jù)分支目標(biāo)指令地址和后一指令地址分別獲取分支目標(biāo)指令和后一指令。此外,該方法還包括對(duì)獲取到的分支目標(biāo)指令和后一指令進(jìn)行譯碼,并根據(jù)處理器提供的分支判斷選擇分支目標(biāo)指令的譯碼結(jié)果和后一指令的譯碼結(jié)果送到執(zhí)行單元,使得無(wú)論分支指令的轉(zhuǎn)移是否發(fā)生都不會(huì)導(dǎo)致流水線操作的暫停。本發(fā)明還提出一種用于控制處理器流水線操作的流水線控制系統(tǒng)。該處理器連接一個(gè)包含可執(zhí)行的計(jì)算機(jī)指令的存儲(chǔ)器。該流水線控制系統(tǒng)包括一個(gè)連接處理器的尋址單元,用于提供分支指令的分支目標(biāo)指令地址和分支指令在程序序列中的后一指令地址。該流水線控制系統(tǒng)還包括一個(gè)連接在存儲(chǔ)器和處理器之間的讀緩沖,用于至少存儲(chǔ)分支指令的分支目標(biāo)指令和后一指令中的一個(gè)。此外,該讀緩沖還包括一個(gè)連接處理器的選擇器,用于在分支指令被執(zhí)行時(shí),向處理器提供分支目標(biāo)指令或后一指令中的一個(gè),使得無(wú)論分支指令的分支轉(zhuǎn)移是否發(fā)生都不會(huì)導(dǎo)致流水線操作的暫停。對(duì)于本領(lǐng)域?qū)I(yè)人士,還可以在本發(fā)明的說(shuō)明、權(quán)利要求和附圖的啟發(fā)下,理解、領(lǐng)會(huì)本發(fā)明所包含其他方面內(nèi)容。有益效果:本發(fā)明所述的系統(tǒng)和方法可以為流水線處理器的分支處理提供一種基本的解決方法。該系統(tǒng)和方法在分支點(diǎn)被執(zhí)行前獲取分支目標(biāo)指令的地址,并使用各種分支判斷邏輯以消除因錯(cuò)誤的分支預(yù)測(cè)而造成的效率損失。對(duì)于本領(lǐng)域技術(shù)人員而言,也可以推導(dǎo)出本發(fā)明的其他優(yōu)點(diǎn)和有益效果。附圖說(shuō)明圖1是現(xiàn)有普通流水線的控制結(jié)構(gòu);圖2是本發(fā)明所述的一個(gè)流水線控制結(jié)構(gòu)的實(shí)施例;圖3是本發(fā)明所述的一個(gè)處理器系統(tǒng)的實(shí)施例;圖4是本發(fā)明所述的軌道表的實(shí)施例;圖5a是本發(fā)明所述的另一個(gè)流水線控制結(jié)構(gòu)的實(shí)施例;圖5b是本發(fā)明所述的另一個(gè)流水線控制結(jié)構(gòu)的實(shí)施例;圖6是本發(fā)明所述的另一個(gè)處理器系統(tǒng)的實(shí)施例;圖7是本發(fā)明所述的另一個(gè)處理器系統(tǒng)的實(shí)施例;圖8是本發(fā)明所述的操作中的不同指令值的實(shí)施例;圖9是本發(fā)明所述的另一個(gè)流水線控制結(jié)構(gòu)的實(shí)施例;圖10是本發(fā)明所述的處理器環(huán)境的一個(gè)實(shí)施例;圖11是本發(fā)明所述的分支預(yù)測(cè)方法的一個(gè)示意圖;和圖12是本發(fā)明所述的分支預(yù)測(cè)的實(shí)施例。具體實(shí)施方式雖然該發(fā)明可以以多種形式的修改和替換來(lái)擴(kuò)展,說(shuō)明書(shū)中也列出了一些具體的實(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)換和修改。同樣的元器件號(hào)碼也可以被用于所有附圖以代表相同的或類似的部分。圖2顯示了一個(gè)與本公開(kāi)發(fā)明一致的流水線控制結(jié)構(gòu)1的例子。為了便于說(shuō)明,流水線操作包括取指令(if)、指令譯碼(id)、執(zhí)行(ex)、存儲(chǔ)器訪問(wèn)(mem)和寫回(wb)。也可以使用其它流水線結(jié)構(gòu)。如圖2所示,譯碼器11通過(guò)指令總線16從指令存儲(chǔ)器(或指令緩存)10取指令。譯碼器11將取得的指令譯碼并為后續(xù)操作準(zhǔn)備操作數(shù)。譯碼后的指令與操作數(shù)被送往執(zhí)行與程序計(jì)數(shù)器12(ex/pc)做執(zhí)行操作并計(jì)算程序系列中下條指令的地址21。下一條指令的地址21被作為選擇器20的輸入。同時(shí),如果一個(gè)取得的指令是一個(gè)分支點(diǎn),分支目標(biāo)的指令地址在程序計(jì)數(shù)器到達(dá)該分支點(diǎn)前已被預(yù)先算出,如后續(xù)的段落細(xì)節(jié)描述。預(yù)先算出的分支目標(biāo)指令地址被作為選擇器20的另一個(gè)輸入18。另外,一個(gè)分支判斷單元13提供了一個(gè)分支控制信號(hào)14用以控制選擇器20。可以基于分支類型與分支條件(或一個(gè)條件標(biāo)志)產(chǎn)生分支控制信號(hào)14。分支控制信號(hào)14控制選擇器20選擇輸出哪一路輸入被輸出到寄存器17和地址總線19。之后,總線19上的輸出被用于從指令存儲(chǔ)器10提取下條指令。圖3顯示了對(duì)應(yīng)本發(fā)明所述流水線控制結(jié)構(gòu)1的處理器環(huán)境300。如圖3所示,處理器環(huán)境300包含一個(gè)低層次存儲(chǔ)器122、一個(gè)高層次存儲(chǔ)器124和一個(gè)處理器核125。此外,處理器環(huán)境300包含一個(gè)填充/生成器123、一個(gè)主動(dòng)表121、一個(gè)軌道表126、一個(gè)循跡器170和一個(gè)分支判斷邏輯210(對(duì)應(yīng)于圖2中的分支判斷邏輯13)。應(yīng)當(dāng)理解的是,這里列出各種部件的目的是為了便于描述,還可以包含其他部件,而某些部件也可以被省略。這里的各種部件可以分布在多個(gè)系統(tǒng)中,可以是物理上存在的或是虛擬的,可以是硬件實(shí)現(xiàn)(如:集成電路)、軟件實(shí)現(xiàn)或由硬件和軟件組合實(shí)現(xiàn)。高層次存儲(chǔ)器124和低層次存儲(chǔ)器122可以包含任何合適的存儲(chǔ)設(shè)備,如:靜態(tài)存儲(chǔ)器(sram)、動(dòng)態(tài)存儲(chǔ)器(dram)和閃存存儲(chǔ)器(flashmemory)。在這里,存儲(chǔ)器的層次指的是存儲(chǔ)器與處理器核之間的接近程度。越接近處理器核的層次越高。此外,一個(gè)高層次的存儲(chǔ)器通常比低層次的存儲(chǔ)器速度快但容量小。高層次存儲(chǔ)器124可以作為系統(tǒng)的一個(gè)緩存工作,或當(dāng)有其他緩存存在時(shí)作為一級(jí)緩存工作,且可以被分割成復(fù)數(shù)個(gè)被稱為塊(如存儲(chǔ)塊)的用于存儲(chǔ)處理器核125要訪問(wèn)的數(shù)據(jù)(即在指令塊和數(shù)據(jù)塊中的指令和數(shù)據(jù))的存儲(chǔ)片段。處理器核125可以是能以流水線方式并與緩存系統(tǒng)協(xié)同工作的任意合適的處理器。處理器核125可以使用分開(kāi)的指令緩存與數(shù)據(jù)緩存,并可以包含一些用于緩存操作的指令。當(dāng)處理器核125執(zhí)行一條指令時(shí),處理器核125首先需要從存儲(chǔ)器中讀入指令和/或數(shù)據(jù)。主動(dòng)表121、軌道表126、循跡器170和填充/生成器123用于將處理器核125將要執(zhí)行到的指令填充到高層次存儲(chǔ)器124中,使處理器核125能從高層次存儲(chǔ)器124中以非常低的緩存缺失率讀到所需的指令。在本實(shí)施例中,術(shù)語(yǔ)“填充”表示將數(shù)據(jù)/指令從較低層次的存儲(chǔ)器移動(dòng)到較高層次的存儲(chǔ)器中,術(shù)語(yǔ)“存儲(chǔ)器訪問(wèn)”表示處理器核125對(duì)最接近的存儲(chǔ)器(即高層次存儲(chǔ)器124或一級(jí)緩存)進(jìn)行讀或?qū)?。此外,,填?生成器123可以根據(jù)適當(dāng)?shù)牡刂帆@取指令或指令塊,并可以對(duì)從低層次存儲(chǔ)器122中獲取來(lái)以填充到高層次存儲(chǔ)器124中的每一條指令進(jìn)行審查,并提取出某些信息,如:指令類型、指令地址和分支指令的分支目標(biāo)信息。該指令以及包含分支目標(biāo)信息的被提取出的信息被用于計(jì)算地址并送到其他模塊,如主動(dòng)表121和軌道表126。在本實(shí)施例中一條分支指令或一個(gè)分支點(diǎn)指的是任何適當(dāng)?shù)哪軐?dǎo)致處理器核125改變執(zhí)行流(如:非按順序執(zhí)行一條指令)的指令形式。如果分支目標(biāo)信息對(duì)應(yīng)的指令塊尚未被填充到高層次存儲(chǔ)器124中,那么在將該指令塊填充到高層次存儲(chǔ)器124中的同時(shí),建立對(duì)應(yīng)的軌道。軌道表126中的軌道和高層次存儲(chǔ)器124中的存儲(chǔ)塊一一對(duì)應(yīng),且都由同一指針152指向。處理器核125將要執(zhí)行的任何指令,都可以在執(zhí)行前被填充到高層次存儲(chǔ)器124中。填充/生成器123可以根據(jù)指令和分支目標(biāo)信息確定地址信息,如:指令類型、分支源地址和分支目標(biāo)地址信息。例如,指令類型可以包括條件分支指令、無(wú)條件分支指令和其他指令等。指令類別還可以包括條件分支指令的子類別,如相等時(shí)分支轉(zhuǎn)移、大于時(shí)分支轉(zhuǎn)移等。在某些情況下,可以認(rèn)為無(wú)條件分支指令是條件分支指令的一種特例,即條件總是成立。因此,指令類型可以分為分支指令和其他指令等。分支源地址可以指分支指令本身的地址,分支目標(biāo)地址可以指當(dāng)分支成功發(fā)生時(shí)將被轉(zhuǎn)移到的地址。此外,還可以包括其他信息。此外,可以基于預(yù)先計(jì)算的信息建立一個(gè)軌道表用于提供地址以填充高層次存儲(chǔ)器124。圖4是一個(gè)如本發(fā)明所公開(kāi)的軌道表操作的例子。如圖4所示,軌道表126與循跡器170相互作用以提供緩存與分支處理所需的地址。軌道表126可包含處理器核125執(zhí)行的指令的軌道,循跡器170基于軌道表126提供不同的地址,并為軌道表126提供一個(gè)讀取指針。這里說(shuō)的軌道的意思是對(duì)要被執(zhí)行的一系列指令(比如一個(gè)指令塊)的一種表達(dá)形式。這種表達(dá)形式可以包括任何適當(dāng)?shù)臄?shù)據(jù)類型,如地址,塊號(hào)碼,或者其它數(shù)字。此外,當(dāng)一個(gè)軌道包含一個(gè)分支點(diǎn),該分支點(diǎn)有一個(gè)改變了程序流向的分支目標(biāo)時(shí),或當(dāng)一條指令后的另一條指令是在一個(gè)不同的指令塊,比如是下一個(gè)指令塊中的一條指令、或一個(gè)異常程序、或另外一個(gè)程序線程等時(shí),可以建立一個(gè)新軌道。軌道表126可包括復(fù)數(shù)條軌道,其中軌道表126種每條軌道與軌道表中的標(biāo)有一個(gè)行號(hào)或者塊號(hào)(bn)的一行有對(duì)應(yīng)關(guān)系,該塊號(hào)指向一個(gè)相應(yīng)的存儲(chǔ)器塊。一條軌道可包括復(fù)數(shù)個(gè)軌跡點(diǎn),而一個(gè)軌跡點(diǎn)可以對(duì)應(yīng)于一條或多條指令。此外,由于一條軌道對(duì)應(yīng)于軌道表126中的一行,因此一個(gè)軌跡點(diǎn)對(duì)應(yīng)于軌道表126中一行的一個(gè)表項(xiàng)(比如一個(gè)存儲(chǔ)單元)。這樣,一條軌道中的總的軌跡點(diǎn)可以等于軌道表126中一行中的表項(xiàng)總數(shù)。也可用其它組織方式。一個(gè)軌跡點(diǎn)(即,在表的項(xiàng)中的一項(xiàng))可含有這個(gè)軌道中一條指令的信息,比如分支指令。這樣,一個(gè)軌跡點(diǎn)的內(nèi)容可以包含相應(yīng)指令的類別與分支目標(biāo)的信息。通過(guò)檢查一個(gè)軌跡點(diǎn)的內(nèi)容,基于其中的分支目標(biāo)地址可以確定一個(gè)分支目標(biāo)點(diǎn)。例如,如圖4所示,處理器核125可用一種(m+z)位的指令地址讀取操作用的指令,在此m與z是整數(shù)。地址中的m位部分可以被稱為高位地址,z位部分可被稱為偏移地址。軌跡表126可包含2m行,即總共2m個(gè)軌道,而高位地址可以被用于軌道表126的尋址每一行可包含2z個(gè)軌道項(xiàng),即總數(shù)為2z個(gè)軌跡點(diǎn),偏移地址可用于在相應(yīng)的行中尋址以確定一個(gè)特定的軌跡點(diǎn)。此外,行中的每個(gè)表項(xiàng)或軌跡點(diǎn)的內(nèi)容格式可以包括一個(gè)類別部分57、一個(gè)xaddr部分58和一個(gè)yaddr部分59。也可包含其它部分。類別部分57表示軌跡點(diǎn)對(duì)應(yīng)指令的類別。如前所述,指令類別可包括條件分支指令、非條件分支指令和其它指令。指令類別還可以包括條件分支指令的子類別,如相等時(shí)分支轉(zhuǎn)移、大于時(shí)分支轉(zhuǎn)移等。xaddr部分58可以包含m位地址,也可以被稱為一個(gè)第一維地址或者簡(jiǎn)稱為第一地址。yaddr部分59可以包含z位地址,也可以被稱為第二維地址或簡(jiǎn)稱為第二地址。當(dāng)一條包含一個(gè)分支點(diǎn)(一個(gè)分支軌跡點(diǎn))的新軌道被建立時(shí),該新軌道可以被建立在軌道表126的一個(gè)可用行中,而分支軌跡點(diǎn)可以被建立在該行的一個(gè)可用表項(xiàng)中。該行和該表項(xiàng)的位置由分支點(diǎn)的源地址(即分支源地址)確定。例如,可以根據(jù)分支源地址的高位地址確定該行號(hào)碼或塊號(hào)碼,根據(jù)分支源地址的偏移地址確定表項(xiàng)。此外,新軌跡點(diǎn)的內(nèi)容可以對(duì)應(yīng)分支目標(biāo)指令。換句話說(shuō),分支軌跡點(diǎn)的內(nèi)容存儲(chǔ)了分支目標(biāo)地址信息。例如,軌道表126中的對(duì)應(yīng)與一條分支目標(biāo)指令的特定的行的行號(hào)或塊號(hào)被作為第一地址存儲(chǔ)到分支軌跡點(diǎn)的內(nèi)容中。此外,偏移地址表示分支目標(biāo)指令在其軌道中的位置,而該偏移地址被作為第二地址存儲(chǔ)到該分支軌跡點(diǎn)的內(nèi)容中。這樣,在分支點(diǎn)的內(nèi)容中,第一地址被用做行地址,而第二地址被用做列地址對(duì)該行中的分支目標(biāo)軌跡點(diǎn)進(jìn)行尋址。指令存儲(chǔ)器46可以是高層次存儲(chǔ)器124的一部分,用于指令訪問(wèn),并可以由任意合適的高性能存儲(chǔ)器構(gòu)成。指令存儲(chǔ)器46可以包含2m個(gè)存儲(chǔ)塊,每個(gè)存儲(chǔ)塊包含2z個(gè)字節(jié)或字。這就是說(shuō),指令存儲(chǔ)器46可以存儲(chǔ)所有被m和z位(即指令地址)尋址的指令,使得這m位可以被用于對(duì)某個(gè)特定的存儲(chǔ)塊,而這z位可以被用于對(duì)該特定存儲(chǔ)塊中的特定字節(jié)或字進(jìn)行尋址。循跡器170可以由各種部件或設(shè)備構(gòu)成,如:寄存器、選擇器、棧和/或其他存儲(chǔ)模塊,用于確定處理器核125執(zhí)行的下一軌道。循跡器170可以根據(jù)軌道表126中的當(dāng)前軌道、軌跡點(diǎn)信息和是否因處理器核125的執(zhí)行發(fā)生分支轉(zhuǎn)移等信息確定下一軌道。例如,在運(yùn)行過(guò)程中,當(dāng)處理器核125執(zhí)行分支指令時(shí),總線55上傳遞了分支指令的(m+z)位指令地址。m位地址通過(guò)總線56被作為第一地址或xaddr(或x地址)送到軌道表126,z位地址通過(guò)總線53被作為第二地址或yaddr(或y地址)送到軌道表126。根據(jù)該第一地址和第二地址,軌道表126可以找到一個(gè)分支指令表項(xiàng),并將該分支指令的分支目標(biāo)地址輸出到總線51上。如果該分支指令的分支轉(zhuǎn)移條件不成立,那么分支轉(zhuǎn)移不發(fā)生,選擇器49選擇總線53上的yaddr經(jīng)增一邏輯48增加一(1)個(gè)字節(jié)或字后得到新的第二地址54,而第一地址保持不變,可以在總線52上輸出該新地址。根據(jù)處理器核125來(lái)的控制信號(hào)60(如:一個(gè)不成功的分支轉(zhuǎn)移),寄存器50保持第一地址不變,由增一邏輯48不斷對(duì)第二地址增一(1)直至指向當(dāng)前軌道表行上的下一個(gè)分支指令。另一方面,如果所述分支指令的分支轉(zhuǎn)移條件成立,那么分支轉(zhuǎn)移發(fā)生,選擇器49選擇總線51上的分支點(diǎn)對(duì)應(yīng)的軌道表項(xiàng)的內(nèi)容中存儲(chǔ)的分支目標(biāo)地址作為輸出送到總線52上。根據(jù)處理器核125來(lái)的控制信號(hào)60(如:一個(gè)成功的分支轉(zhuǎn)移),寄存器50保持該改變后的對(duì)應(yīng)新軌道的第一地址,并將(m+z)位的新地址提供到總線55上。這樣,為了進(jìn)行存儲(chǔ)器尋址,軌道表126和循跡器170提供了一個(gè)塊地址,而處理器核125只提供一個(gè)偏移量。處理器核125反饋分支指令執(zhí)行狀態(tài)使得循跡器170能夠進(jìn)行判斷操作。在執(zhí)行一條新軌道之前,對(duì)應(yīng)于該軌道的指令塊被填充到指令存儲(chǔ)器46中。重復(fù)該過(guò)程可以使處理器核125將要執(zhí)行的所有指令都不會(huì)發(fā)生緩存缺失。回到圖3,為了提升效率并減小存儲(chǔ)器容量,主動(dòng)表121可以被用于存儲(chǔ)任何已建立的軌道信息,并建立地址(或地址中一部分)與塊號(hào)碼之間的映射關(guān)系,使得可以使用軌道表126中的任何可用行建立軌道。例如,當(dāng)建立一條軌道時(shí),軌道中所有分支點(diǎn)的分支目標(biāo)地址信息都被存儲(chǔ)在主動(dòng)表121中。這樣,主動(dòng)表21可以存儲(chǔ)程序中所有分支目標(biāo)軌跡點(diǎn)的軌道的映射信息。也可以使用其他的配置結(jié)構(gòu)。這樣,主動(dòng)表121可以被用于存儲(chǔ)高層次存儲(chǔ)器124中指令塊的塊號(hào)。塊號(hào)也對(duì)應(yīng)于軌道表126中的行號(hào)。在審查過(guò)程中,可以通過(guò)對(duì)地址和主動(dòng)表121中表項(xiàng)進(jìn)行匹配的方式得到分支目標(biāo)地址的塊號(hào)。匹配成功的結(jié)果,即塊號(hào)(前述的第一地址)可以與指令在軌道中的偏移量(前述的第二地址)一起用于確定軌跡點(diǎn)的位置。如果匹配不成功,表示該地址對(duì)應(yīng)的軌道尚未建立。由主動(dòng)表121指定一個(gè)塊號(hào)并將該地址對(duì)應(yīng)的指令段填充到高層次存儲(chǔ)器124中由該塊號(hào)索引的位置中,在軌道表126中建立對(duì)應(yīng)這個(gè)塊號(hào)的一條新軌道,使得主動(dòng)表121可以表示這條已建立的軌道及相關(guān)地址。因此,之前所述主動(dòng)表121和填充/生成器123的操作可以在分支點(diǎn)被處理器核125獲取并執(zhí)行之前,將分支點(diǎn)的分支目標(biāo)指令對(duì)應(yīng)的指令段填充到緩存124(即高層次存儲(chǔ)器124)中。這樣,軌道表126可以被配置成一種二維表,其中,由第一地址bnx對(duì)每一行索引,對(duì)應(yīng)一個(gè)存儲(chǔ)塊或一個(gè)存儲(chǔ)行,而第二地址bny對(duì)每一列索引,對(duì)應(yīng)相應(yīng)指令(數(shù)據(jù))在存儲(chǔ)塊中的偏移量。簡(jiǎn)單來(lái)說(shuō),軌道表的寫地址對(duì)應(yīng)指令的源地址。此外,對(duì)于一個(gè)特定的分支源地址,由主動(dòng)表121根據(jù)高位地址分配一個(gè)bnx,而bny就等于偏移量。然后,bnx和bny就可以組成一個(gè)指向被寫表項(xiàng)的寫地址。此外,當(dāng)指令被填充到高層次存儲(chǔ)器124中時(shí),可以通過(guò)計(jì)算分支指令地址及分支目標(biāo)指令的分支偏移量之和的方法得到所有分支指令的分支目標(biāo)地址。該分支目標(biāo)地址(高位地址、偏移量)被送到主動(dòng)表121以對(duì)高位地址部分進(jìn)行匹配,而主動(dòng)表121可以分配一個(gè)bnx。該分配到的bnx與從生成器130來(lái)的指令類型以及偏移量(bny)一起構(gòu)成每個(gè)分支指令軌道表項(xiàng)內(nèi)容。該內(nèi)容被存儲(chǔ)在由相應(yīng)寫地址尋址的分支點(diǎn)中。此外,循跡器170可以被用于向軌道表126提供一個(gè)讀指針151。讀指針151也可以是bnx和bny的形式。由讀指針指向的軌道表項(xiàng)的內(nèi)容與該表項(xiàng)的bnx和bny(源bnx和源bny)一起被讀出并被循跡器170檢查。循跡器170可以根據(jù)該內(nèi)容進(jìn)行多種不同的讀指針更新操作。例如,如果該表項(xiàng)不是一個(gè)分支點(diǎn),循跡器170可以用新bnx=源bnx、新bny=源bny+1的方法更新讀指針。如果該表項(xiàng)是一個(gè)條件分支,循跡器170等待處理器核125送來(lái)的該分支點(diǎn)的分支指令被執(zhí)行時(shí)產(chǎn)生的控制信號(hào)(taken)。如果該控制信號(hào)表明分支轉(zhuǎn)移沒(méi)有發(fā)生,循跡器170可以用新bnx=源bnx、新bny=源bny+1的方法更新讀指針。然而,如果該分支成功發(fā)生,循跡器170可以用新bnx=目標(biāo)bnx、新bny=目標(biāo)bny的方法更新讀指針。如果該表項(xiàng)是一個(gè)無(wú)條件分支(或跳轉(zhuǎn)),循跡器170可以將其視為一個(gè)條件成立的條件分支,也就是在該分支指令被執(zhí)行時(shí)用新bnx=目標(biāo)bnx、新bny=目標(biāo)bny的方法更新讀指針。循跡器170與軌道表126及主動(dòng)表121一起實(shí)現(xiàn)基于軌道的操作。這樣,分支指令、分支目標(biāo)指令和緊跟分支指令之后的指令的地址信息都能事先確定。這些信息可以被流水線控制結(jié)構(gòu)1用于在不暫停流水線的情況下進(jìn)行分支處理操作。具體地,如圖3所示,當(dāng)讀指針151到達(dá)一個(gè)分支點(diǎn)時(shí),循跡器170接收到從軌道表126經(jīng)總線150來(lái)的分支目標(biāo)地址。該分支目標(biāo)地址的高位地址(目標(biāo)bnx)被作為一個(gè)選擇器的一個(gè)輸入,另一個(gè)輸入是當(dāng)前bnx(bn151的高位地址,或源bnx)。該選擇器的輸出是下一bnx。此外,該分支目標(biāo)地址的偏移量部分(目標(biāo)bny)被作為另一個(gè)選擇器的一個(gè)輸入,而另一個(gè)輸入是來(lái)源于處理器核125的pc偏移量155。該選擇器的輸出被用做高層次存儲(chǔ)器124的“偏移量1”地址,以對(duì)由bnx152確定的緩存塊中的指令進(jìn)行尋址。讀指針151(bnx152、bny153)以比pc更快的速度移動(dòng)(如:循跡器170運(yùn)行在更高的時(shí)鐘頻率等)。讀指針151沿軌道移動(dòng),當(dāng)從軌道表126的表項(xiàng)中讀出的內(nèi)容表示該表項(xiàng)是一條帶有分支目標(biāo)地址(bnx和bny)的分支指令時(shí),讀指針151停止移動(dòng),等待處理器核125執(zhí)行該分支點(diǎn),并等待從分支判斷邏輯210來(lái)的控制信號(hào)‘taken’信號(hào)212和‘branch/jump’信號(hào)213。處理器核125提供一個(gè)pc偏移量以對(duì)高層次存儲(chǔ)器124中的指令尋址,而循跡器170提供bny153以對(duì)軌道表126中的分支點(diǎn)尋址。這兩個(gè)信號(hào)也被送到分支判斷邏輯210進(jìn)行比較。如果pc偏移量155與bny153相等,那么表示處理器核125正在獲取該分支點(diǎn)。這就是說(shuō),bny153與pc偏移量155的匹配可以被用于控制分支處理的時(shí)機(jī),使得分支判斷邏輯210在pc偏移量155等于bny153時(shí)進(jìn)行分支判定?;蛘?,也可以在pc偏移量155離bny153還差預(yù)設(shè)數(shù)目條指令時(shí)就可以開(kāi)始進(jìn)行分支處理。當(dāng)pc偏移量155等于或離bny153還差預(yù)設(shè)數(shù)目條指令時(shí),處理器核125獲取分支點(diǎn)。分支判斷邏輯210可以對(duì)分支轉(zhuǎn)移是否發(fā)生進(jìn)行判定。在某些情況下,可以根據(jù)分支類型和分支條件(或條件標(biāo)志)進(jìn)行分支判定。分支類型211(來(lái)源于軌道表126)可以表示分支指令的特定類型,如:當(dāng)分支條件等于零時(shí)分支轉(zhuǎn)移或當(dāng)分支條件大于零時(shí)分支轉(zhuǎn)移等。分支條件可以由處理器核125的處理器操作產(chǎn)生。根據(jù)處理器結(jié)構(gòu)、分支指令和/或流水線操作的不同,一條特定的分支指令的分支條件可以在處理器核125的多個(gè)流水線段有效。分支判斷邏輯210可以包含任何合適的電路用以進(jìn)行分支判定。如之前所述,分支判斷邏輯210可以在pc偏移量155等于bny153或在pc偏移量155與bny153形成某種關(guān)系(如:大于)時(shí)進(jìn)行分支判定,該分支判定可以給出條件標(biāo)志已經(jīng)準(zhǔn)備好的信號(hào)。之后,分支判斷邏輯210的結(jié)果被作為‘taken’信號(hào)212和‘branch/jump’信號(hào)213。該‘branch/jump’信號(hào)通知循跡器170處理器核125已經(jīng)到達(dá)分支指令并使讀指針151能夠更新。該‘taken’信號(hào)是正在執(zhí)行的程序的真實(shí)結(jié)果并選擇正確的下一條該被執(zhí)行的指令。這樣,當(dāng)檢測(cè)到‘branch/jump’信號(hào)時(shí),如果分支轉(zhuǎn)移不發(fā)生,那么下一bnx=源bnx,而下一bny=源bny+1,這樣,選擇沒(méi)有改變的bnx152(源bnx)送到“塊選擇1”,并選擇來(lái)源于處理器核125的下條指令的指令地址偏移量(pc偏移量155)送到“偏移量1”以對(duì)該分支指令之后的指令進(jìn)行尋址。然而如果分支轉(zhuǎn)移發(fā)生,下一bnx=目標(biāo)bnx,而下一bny=目標(biāo)bny,這樣,選擇改變后的bnx152(目標(biāo)bnx)送到“塊選擇1”,并選擇來(lái)源與軌道表126的分支目標(biāo)指令的偏移量(目標(biāo)bny)送到“偏移量1”以對(duì)該分支指令的分支目標(biāo)指令進(jìn)行尋址。這樣,根據(jù)從軌道表126來(lái)的分支類型信息和從處理器核125來(lái)的分支條件標(biāo)志,可以在事先由軌道表126提供了分支目標(biāo)指令的地址信息,pc提供了分支指令之后的指令的地址信息,而分支判斷邏輯210對(duì)分支轉(zhuǎn)移進(jìn)行了判定。因此,如果分支轉(zhuǎn)移發(fā)生,那么處理器核125用于獲取分支目標(biāo)指令(目標(biāo)bnx152、目標(biāo)bny150)的正確地址已經(jīng)被準(zhǔn)備好提供到高層次存儲(chǔ)器124的端口“塊選擇1”和“偏移量1”。這樣,處理器核125可以在不等待的情況下繼續(xù)流水線操作。表2顯示了分支轉(zhuǎn)移成功發(fā)生時(shí)的流水線段示意。在表2中,被標(biāo)記為“指令地址”的行是對(duì)應(yīng)指令存儲(chǔ)器124“塊選擇1”(高位地址)和“偏移量1”(低位地址)的指令存儲(chǔ)地址,而標(biāo)記為“獲取指令”的行對(duì)應(yīng)高層次存儲(chǔ)器124“讀端口1”上的指令。這里假設(shè)從指令地址有效到指令有效需要一個(gè)時(shí)鐘周期的時(shí)延。此外,指令‘i’是分支指令,而‘目標(biāo)’是分支目標(biāo)指令,‘目標(biāo)+1’是分支目標(biāo)指令的后一條指令,依此類推。表2流水線段示意(分支轉(zhuǎn)移發(fā)生時(shí))順序iifidexmemwb目標(biāo)ifidexmemwb目標(biāo)+1ifidexmem目標(biāo)+2ifidex目標(biāo)+3ifid指令地址i目標(biāo)目標(biāo)+1目標(biāo)+2目標(biāo)+3目標(biāo)+4獲取指令i目標(biāo)目標(biāo)+1目標(biāo)+2目標(biāo)+3時(shí)鐘周期1234567另一方面,如果分支轉(zhuǎn)移不發(fā)生,那么處理器核125用于獲取緊跟在分支指令之后的指令的正確地址(源bnx152、pc偏移量155)也已經(jīng)準(zhǔn)備好提供到高層次存儲(chǔ)器124的端口“塊選擇1”和“偏移量1”。這樣,處理器核125可以在不等待的情況下繼續(xù)流水線操作。此外,循跡器170可以如之前所述,在控制信號(hào)的控制下使用讀指針獲取下一分支點(diǎn)以繼續(xù)分支處理。表3顯示了分支轉(zhuǎn)移不成功時(shí)的流水線段示意。指令‘i’是分支指令,‘i+1’是分支指令的后一條指令,依此類推。表3流水線段示意(分支轉(zhuǎn)移不發(fā)生時(shí))圖5a顯示了本發(fā)明所述的另一個(gè)流水線控制結(jié)構(gòu)2。如圖5a所示,譯碼器11對(duì)獲取到的指令進(jìn)行譯碼并提供執(zhí)行所需的操作數(shù)。得到的指令譯碼結(jié)果和操作數(shù)被送到執(zhí)行單元和程序計(jì)數(shù)器(ex/pc)以執(zhí)行并計(jì)算程序流中的下一指令地址21。然而,與圖2所述的流水線控制結(jié)構(gòu)1不同,下一指令地址21和分支目標(biāo)指令地址18通過(guò)寄存器24和23分別被送到指令存儲(chǔ)器(或指令緩存)22。指令存儲(chǔ)器22可以包含多個(gè)端口供讀/寫操作。這樣,指令存儲(chǔ)器22可以包含兩個(gè)地址端口用于輸出下一指令地址21和分支目標(biāo)指令地址18。當(dāng)接收到下一指令地址21和分支目標(biāo)指令地址18后,指令存儲(chǔ)器22可以分別在輸出端口28和29上提供相應(yīng)指令。此外,在輸出端口28和29上分別對(duì)應(yīng)下一指令地址21和分支目標(biāo)指令地址18的兩條指令被輸入到選擇器26,而分支判斷邏輯13可以向選擇器26提供一個(gè)控制信號(hào)14以選擇來(lái)源于端口28和29的輸入并送到譯碼器11。如果分支判斷邏輯13判定分支點(diǎn)轉(zhuǎn)移發(fā)生,輸出對(duì)應(yīng)分支目標(biāo)指令地址18的指令29到譯碼器11。如果分支判斷邏輯13判定分支點(diǎn)轉(zhuǎn)移不發(fā)生,輸出對(duì)應(yīng)下一指令地址21的指令28到譯碼器11。此外,由于分支判斷邏輯13在分支點(diǎn)到達(dá)其執(zhí)行段或在其后指令譯碼之前就進(jìn)行該判定,因此不會(huì)因?yàn)榈却种卸ǘ斐闪魉€的時(shí)鐘周期損失。圖6顯示了對(duì)應(yīng)流水線控制結(jié)構(gòu)2的處理器環(huán)境400的實(shí)施例。如圖6所示,處理器環(huán)境400與圖3中的處理器環(huán)境300類似。然而,處理器環(huán)境400與處理器環(huán)境300的不同點(diǎn)在于分支判斷邏輯被包含在處理器核125中,且高層次存儲(chǔ)器124提供兩個(gè)地址端口“塊選擇1、偏移量1”和“塊選擇2、偏移量2”,以及兩個(gè)讀端口“讀端口1”127和“讀端口2”128。如圖6所示,在處理分支指令時(shí),軌道表126可以向地址端口“塊選擇2、偏移量2”提供分支目標(biāo)指令地址目標(biāo)bnx201和目標(biāo)bny202。此外,讀指針151向“塊選擇1”提供下一指令的塊地址bnx152,而處理器核125向“偏移量1”提供下一指令的偏移地址。當(dāng)接收到分支目標(biāo)指令地址和下一指令地址時(shí),高層次存儲(chǔ)器124分別取出分支目標(biāo)指令和下一指令,并將獲取到的分支目標(biāo)指令和下一指令分別作為獲取到的指令204和獲取到的指令203送到“讀端口2”128和“讀端口1”127。獲取到的指令204和獲取到的指令203也是受控制信號(hào)207(即來(lái)源于處理器核125的taken信號(hào))控制的選擇器205的兩個(gè)輸入。此外,選擇器205根據(jù)taken信號(hào),在處理器核125對(duì)獲取到的指令進(jìn)行譯碼之前,選擇被獲取到的指令中的正確的一個(gè)作為輸出206送到處理器核125。如果分支轉(zhuǎn)移發(fā)生,那么選擇獲取到的分支目標(biāo)指令,而如果分支轉(zhuǎn)移不發(fā)生,那么選擇獲取到的下一指令。處理器核125還向循跡器170提供branch/jump信號(hào)用以表示處理器核125已經(jīng)到達(dá)一條分支指令,此時(shí)的taken信號(hào)是程序執(zhí)行的真實(shí)結(jié)果并選擇正確的下一條該被執(zhí)行的指令。這樣,當(dāng)檢測(cè)到branch/jump信號(hào)時(shí),循跡器170用新地址作為bn151。如果分支轉(zhuǎn)移發(fā)生,獲取到的對(duì)應(yīng)分支目標(biāo)指令的指令204(目標(biāo)bnx201,目標(biāo)bny202)已經(jīng)作為輸出206被送到處理器核125。這樣,處理器核125可以不間斷地繼續(xù)流水線操作。當(dāng)前,如果分支判斷是無(wú)條件的,該無(wú)條件分支指令可以被視為一個(gè)條件滿足、不需要進(jìn)一步判斷的特殊分支點(diǎn)。表4顯示了在分支轉(zhuǎn)移發(fā)生的情況下的流水線段的示意。在表4中,被標(biāo)記為“指令地址”的行是對(duì)應(yīng)指令存儲(chǔ)器124“塊選擇1”(高位地址)和“偏移量1”(低位地址)的指令存儲(chǔ)地址,而標(biāo)記為“獲取指令”的行對(duì)應(yīng)選擇器205的輸出206上的指令。表4流水線段示意(分支轉(zhuǎn)移發(fā)生時(shí))順序iifidexmemwb目標(biāo)ifidexmemwb目標(biāo)+1ifidexmem目標(biāo)+2ifidex目標(biāo)+3ifid指令地址ii+1目標(biāo)+1目標(biāo)+2目標(biāo)+3目標(biāo)+4讀端口1ii+1目標(biāo)+1目標(biāo)+2目標(biāo)+3目標(biāo)+4讀端口2目標(biāo)目標(biāo)目標(biāo)目標(biāo)新目標(biāo)新目標(biāo)新目標(biāo)新目標(biāo)獲取指令i目標(biāo)目標(biāo)+1目標(biāo)+2目標(biāo)+3目標(biāo)+4時(shí)鐘周期1234567在分支指令的譯碼段(時(shí)鐘周期3),分支目標(biāo)指令(“目標(biāo)”)與下一指令(“+1”)一起從高層次存儲(chǔ)器124中被獲取到,并在該譯碼段結(jié)束前進(jìn)行分支判定。由于兩條指令都被獲取到了,因此無(wú)論該分支轉(zhuǎn)移是否發(fā)生,正確的指令都可以被選出并在其譯碼段(時(shí)鐘周期4)使用。這就是說(shuō),分支點(diǎn)之后獲取到的指令總是一條有效的指令,且不需要暫停流水線。同樣地,如表4所示,“讀端口2”事先提供了下一分支目標(biāo)指令。當(dāng)分支轉(zhuǎn)移發(fā)生時(shí),在時(shí)鐘周期3選擇從“讀端口2”來(lái)的分支目標(biāo)指令作為在時(shí)鐘周期4進(jìn)入譯碼段的指令。同樣地,在時(shí)鐘周期3的結(jié)尾,將處理器核125程序計(jì)數(shù)器(pc)強(qiáng)制設(shè)為分支目標(biāo)指令的后一指令(目標(biāo)+1),而非分支目標(biāo)指令(目標(biāo))。循跡器170輸出源bnx152按正常方式驅(qū)動(dòng)“塊選擇1”,由于當(dāng)分支轉(zhuǎn)移發(fā)生時(shí),循跡器170將包含分支目標(biāo)地址信息的下一bn151傳送到bn152,因此源bnx152=目標(biāo)bnx。這樣保證了下一個(gè)“目標(biāo)+1”指令而非“目標(biāo)”指令在時(shí)鐘周期4能被獲取到。這樣,可以在不需要任何流水線暫停的情況下將程序流切換到分支目標(biāo)。此外,指令地址按正常方式增加,直到到達(dá)下一分支點(diǎn)地址。另一方面,如果分支轉(zhuǎn)移不發(fā)生,獲取到的對(duì)應(yīng)下一指令(源bnx152,pc偏移量155)的指令203作為輸出206被送到處理器核125。這樣,處理器核125不暫停而繼續(xù)流水線操作。表5顯示了分支轉(zhuǎn)移不發(fā)生時(shí)的流水線段的示意。表5流水線段示意(分支轉(zhuǎn)移不發(fā)生時(shí))順序iifidexmemwbi+1ifidexmemwbi+2ifidexmemi+3ifidexi+4ifid指令地址ii+1i+2i+3i+4i+5讀端口1ii+1i+2i+3i+4i+5讀端口2目標(biāo)目標(biāo)目標(biāo)目標(biāo)新目標(biāo)新目標(biāo)新目標(biāo)新目標(biāo)獲取指令ii+1i+2i+3i+4i+5時(shí)鐘周期1234567這樣,當(dāng)分支轉(zhuǎn)移不發(fā)生時(shí),在時(shí)鐘周期3選擇從“讀端口1”來(lái)的分支指令之后的指令“i+1”作為在時(shí)鐘周期4進(jìn)入譯碼段的指令。從這點(diǎn)以后,指令地址以正常方式增加直到到達(dá)下一個(gè)分支點(diǎn)。圖5b顯示了流水線控制結(jié)構(gòu)3的框圖。流水線控制結(jié)構(gòu)3是上述流水線控制結(jié)構(gòu)2以外的另一種選擇。流水線控制結(jié)構(gòu)3與流水線控制結(jié)構(gòu)2的不同點(diǎn)在于包含了一個(gè)額外的存儲(chǔ)器40。存儲(chǔ)器40可以包含與軌道表126的行數(shù)相同數(shù)目的存儲(chǔ)塊,每個(gè)存儲(chǔ)塊對(duì)應(yīng)軌道表126中的一行。此外,存儲(chǔ)器40中的每個(gè)存儲(chǔ)塊可以包含一個(gè)與軌道表126中一行的軌跡點(diǎn)或表項(xiàng)數(shù)目相同的存儲(chǔ)單元。這樣,當(dāng)一個(gè)軌跡點(diǎn)是分支點(diǎn)時(shí),分支目標(biāo)指令除了被存入指令存儲(chǔ)器22中對(duì)應(yīng)該分支目標(biāo)指令的存儲(chǔ)塊中,還被存入存儲(chǔ)器40相應(yīng)的存儲(chǔ)單元中。分支目標(biāo)地址18來(lái)源與軌道表126的表項(xiàng)。該表項(xiàng)的內(nèi)容就是該表項(xiàng)或該分支軌跡點(diǎn)對(duì)應(yīng)的分支目標(biāo)指令的bnx和bny。這樣,bnx和bny可以被用做索引以找到存儲(chǔ)在存儲(chǔ)器40中的相應(yīng)分支目標(biāo)指令。被選出的分支目標(biāo)指令可以通過(guò)總線29被送到選擇器26。此外,如之前所述,可以根據(jù)下一指令地址21從指令存儲(chǔ)器22獲取到下一指令,而該獲取到的下一指令也可以通過(guò)總線28被送到選擇器26。這樣,圖5b中的指令存儲(chǔ)器22可以是一個(gè)單端口的存儲(chǔ)設(shè)備,而不需要如圖5a所示的雙端口存儲(chǔ)設(shè)備??蛇x地,軌道表126中對(duì)應(yīng)分支點(diǎn)的表項(xiàng)本身可以存儲(chǔ)分支目標(biāo)指令。這就是說(shuō),分支軌跡點(diǎn)的內(nèi)容除了分支目標(biāo)指令的地址和偏移量外,還包括了分支目標(biāo)指令。這樣,軌道表126可以直接向選擇器26提供分支目標(biāo)指令以供來(lái)源于分支判斷邏輯13的控制信號(hào)14選擇。這種配置結(jié)構(gòu)可以被視為存儲(chǔ)器40集成在軌道表126中。這樣,如前所述,由于分支目標(biāo)指令地址可以事先確定,換句話說(shuō),由于分支目標(biāo)信息和分支類型已經(jīng)準(zhǔn)備好的,因此可以在分支條件標(biāo)志剛被處理器核操作設(shè)置完畢后就進(jìn)行分支判定。這樣,由于分支判定的主要功能就是計(jì)算分支目標(biāo)地址并根據(jù)分支指令的分支類型和條件標(biāo)志進(jìn)行分支判定,因此可以早于分支指令本身到達(dá)其正常執(zhí)行段時(shí)就進(jìn)行分支判定。通常地,越早完成分支判定,需要的額外硬件資源就可以越少。根據(jù)從分支判斷邏輯13來(lái)的預(yù)先分支判定,可以使用各種配置結(jié)構(gòu)使得處理分支轉(zhuǎn)移時(shí)流水線可以繼續(xù)進(jìn)行而不暫停。圖7顯示了本發(fā)明所述處理器環(huán)境600的一個(gè)實(shí)施例。在處理器環(huán)境600中,使用了一個(gè)讀緩沖用于提供處理器核125的程序流中一條分支指令的分支目標(biāo)指令和中緊跟在該分支指令之后的指令。處理器環(huán)境600與圖3中的處理器環(huán)境300類似,但有一些區(qū)別。如圖7所示,處理器環(huán)境600除了緩存124、處理器核125、軌道表126和循跡器170外,還包含一個(gè)讀緩沖229和一個(gè)選擇器225。讀緩沖229連接在緩存124和處理器核125之間,并包含一個(gè)存儲(chǔ)模塊216和一個(gè)選擇器214。存儲(chǔ)模塊216用于存儲(chǔ)某些指令。例如,讀緩沖229中的存儲(chǔ)模塊216存儲(chǔ)并向外提供分支目標(biāo)指令或后續(xù)指令中的一種,而另一種由緩存124直接提供,使得同樣的緩存結(jié)構(gòu)能提供更高的帶寬。讀緩沖229中的選擇器214被用于根據(jù)分支判斷選擇分支目標(biāo)指令和后續(xù)指令中的一種,使得在分支指令之后提供給處理器核125的指令是有效的或正確的。例如,選擇器214被用于選擇來(lái)源于存儲(chǔ)模塊216或緩存124的輸出之一作為輸出219送到處理器核125。此外,選擇器220被用于選擇來(lái)源于軌道表126或循跡器170的地址之一作為輸出224送到緩存124(一個(gè)塊地址);而選擇器225被用于選擇來(lái)源于軌道表126或來(lái)源于處理器125的pc(程序計(jì)數(shù)器)偏移量中的一個(gè)作為輸出224送到緩存124(一個(gè)偏移地址)。來(lái)源于循跡器170的控制信號(hào)215被用于控制選擇器220和225以及存儲(chǔ)模塊216,而‘taken’信號(hào)被用于控制選擇器214。在操作過(guò)程中,循跡器170提供bnx152和bny153使得軌道表126可以輸出一個(gè)對(duì)應(yīng)于該bnx152和bny153的軌跡點(diǎn)。該軌跡點(diǎn)被讀出的內(nèi)容中包含諸如指令類型和分支目標(biāo)地址等的信息。該內(nèi)容(如:指令類型和分支目標(biāo)地址)可以通過(guò)總線150被送到循跡器170。此外,分支目標(biāo)地址的高位部分(bnx)被送到選擇器220作為一個(gè)輸入。分支目標(biāo)地址的bny或該bny的一部分(如:最高兩位)也可以通過(guò)總線222被送到選擇器225。選擇器220的另一個(gè)輸入可以是由循跡器170提供的bnx,而選擇器225的另一個(gè)輸入可以是pc偏移量或pc偏移量的一部分(如:最高兩位)。存儲(chǔ)模塊216可以包含根據(jù)其他部件的容量而預(yù)設(shè)數(shù)量的存儲(chǔ)單元,用以存儲(chǔ)指令。例如,如果一個(gè)存儲(chǔ)塊(如:指令塊)總共包含16條指令,那么bny和pc偏移量的長(zhǎng)度可以是4位(4bit)。假設(shè)在一個(gè)時(shí)鐘周期內(nèi)從指令存儲(chǔ)器或緩存124中獲取4條指令,存儲(chǔ)模塊216可以存儲(chǔ)4條指令,且bny或pc偏移量的最高兩位可以被用于從由bnx指向的存儲(chǔ)塊中讀取4條指令,使用bny或pc偏移量的最低兩位從讀出的4條指令中選擇1條。為便于描述,在此一個(gè)時(shí)鐘周期獲取的指令總數(shù)為4,而對(duì)于單發(fā)射或多發(fā)射處理器,每個(gè)時(shí)鐘周期內(nèi)獲取的指令總數(shù)可以是任何合適的數(shù)目。此外,在一個(gè)時(shí)鐘周期內(nèi)獲取的指令總數(shù)(如:4)可以超過(guò)處理器核125在一個(gè)時(shí)鐘周期內(nèi)執(zhí)行指令的總數(shù)(如:1)。這樣,可以在某個(gè)時(shí)鐘周期使用軌道表126和其他相關(guān)部件裝載存儲(chǔ)模塊216或填充緩存124。在某些實(shí)施例中,緩存124可以包含一個(gè)帶寬大于處理器核125指令發(fā)射率的單端口存儲(chǔ)模塊,以支持循跡器170對(duì)存儲(chǔ)模塊216的填充,以及處理器核125的取指。當(dāng)循跡器170檢測(cè)到一條指令是分支指令時(shí),循跡器170暫停bny的自增。當(dāng)取指時(shí)間槽到來(lái)時(shí),指令類型信息可以被用做控制信號(hào)215作為寫使能信號(hào)控制存儲(chǔ)模塊216,將緩存124當(dāng)前輸出的4條指令通過(guò)總線217寫入存儲(chǔ)模塊216。與此同時(shí),根據(jù)指令類型信息(如:指令類型為分支指令),信號(hào)215可以控制選擇器220選擇總線221上的分支目標(biāo)指令的bnx作為指令塊地址,并控制選擇器225選擇總線222上的分支目標(biāo)地址的bny的高兩位在該指令塊中找到4條指令。這4條指令包含可以在下一個(gè)讀周期或下一時(shí)鐘周期被讀取的分支目標(biāo)指令。此外,這包含分支目標(biāo)指令在內(nèi)的4條指令被存入存儲(chǔ)模塊216,而pc偏移量被再次用于讀取下一指令。這樣,當(dāng)處理器核125執(zhí)行一個(gè)分支點(diǎn)對(duì)應(yīng)的分支指令時(shí),可以同時(shí)提供分支目標(biāo)指令和緊跟該分支點(diǎn)的后續(xù)指令,從而可以根據(jù)分支轉(zhuǎn)移是否發(fā)生取到正確的指令。圖8顯示了根據(jù)本發(fā)明技術(shù)方案在操作過(guò)程中讀出指令的實(shí)施例。如圖8所示,列226顯示了存儲(chǔ)模塊216的輸出218上的值,列227顯示了緩存124的輸出217上的值,而列228顯示了處理器核125獲取的當(dāng)前指令。此外,假設(shè)指令i0、i1、i2和i3是對(duì)應(yīng)同一pc偏移量的最高兩位的4條連續(xù)的指令,其中i2是一條分支指令。再假設(shè)分支指令i2的分支目標(biāo)指令是t1,而指令t0、t1、t2和t3是對(duì)應(yīng)同一pc偏移量的最高兩位的4條連續(xù)的指令。這里的行表示后續(xù)的時(shí)鐘周期或執(zhí)行周期(一個(gè)執(zhí)行周期可能包含超過(guò)一個(gè)時(shí)鐘周期)。4行分別對(duì)應(yīng)周期i、周期i+1、周期i+2和周期i+3。此外,假設(shè)在分支指令被獲取的后一個(gè)周期產(chǎn)生‘taken’信號(hào)(即:該分支指令的分支轉(zhuǎn)移是否發(fā)生)。在周期i,假設(shè)pc偏移量指向i0,讀指針到達(dá)對(duì)應(yīng)分支指令i2的軌跡點(diǎn)。在該周期,選擇器214選擇來(lái)源于緩存124的輸出作為輸出219,而pc偏移量的最低兩位可以被用于從4條連續(xù)的指令中選擇處理器核125所需的指令i0。如之前所述,讀指針停止在分支軌跡點(diǎn),從緩存124輸出的4條指令則被存入存儲(chǔ)模塊216,而分支目標(biāo)地址被用做下一周期(即周期i+1)的指令地址用于獲取包含分支目標(biāo)指令在內(nèi)的4條指令。在周期i+1,存儲(chǔ)模塊216存儲(chǔ)了指令i0、i1、i2和i3,而緩存124輸出的指令為t0、t1、t2和t3。在周期i+1中,選擇器214選擇存儲(chǔ)模塊216的輸出作為輸出219,最低兩位可以被用于從總線219上的4條指令中選擇處理器核125所需的指令i1。此外,在周期i+1中,4條指令t0、t1、t2和t3被寫入存儲(chǔ)模塊216,且讀指針指向的軌跡點(diǎn)的bnx和pc偏移量被用做下個(gè)周期的指令(即指令i2)地址。在周期i+2中,存儲(chǔ)模塊216存儲(chǔ)并輸出指令t0、t1、t2和t3,而緩存124輸出的是指令i0、i1、i2和i3。在這個(gè)周期中,選擇器214選擇緩存124的輸出作為輸出219,而pc騙移量的最低兩位可以被用于從總線219上的4條指令中選擇處理器核125所需的指令i2。下一條指令(即i3)的地址被用做下個(gè)周期的指令地址。在周期i+3中,存儲(chǔ)模塊216存儲(chǔ)并輸出指令t0、t1、t2和t3,而緩存124輸出的是指令i0、i1、i2和i3。在這個(gè)周期中,選擇器214根據(jù)分支指令的分支轉(zhuǎn)移是否發(fā)生,選擇來(lái)源于緩存124的輸出或來(lái)源于存儲(chǔ)模塊216的輸出之一作為輸出219。此外,還可以根據(jù)分支指令的分支轉(zhuǎn)移是否發(fā)生,使用分支目標(biāo)地址的bny的最低兩位或pc偏移量的最低兩位相應(yīng)選擇處理器核所需的指令t1或i3。這樣,該‘taken’信號(hào)(即分支指令的分支轉(zhuǎn)移是否發(fā)生)可以被用于選擇緩存124的輸出或存儲(chǔ)模塊216的輸出?;蛘?,可以分別使用分支目標(biāo)地址的bny的最低兩位和pc偏移量的最低兩位,從包含分支目標(biāo)指令在內(nèi)的4條指令中選擇一條指令,以及從包含下一指令在內(nèi)的4條指令中選擇另一條指令?;蛘?,可以同時(shí)向處理器核125提供指令i3和指令t1,而處理器核125可以對(duì)指令i3和指令t1進(jìn)行分別譯碼,并同時(shí)得到指令i3和指令t1的操作數(shù)。根據(jù)分支指令的分支轉(zhuǎn)移是否發(fā)生,處理器核125選擇指令t1的譯碼結(jié)果或指令i3的譯碼結(jié)果,以及正確的操作數(shù)。具體地,當(dāng)讀指針到達(dá)分支指令i2對(duì)應(yīng)的軌跡點(diǎn)時(shí),如果處理器核125正在獲取的指令離分支指令i2很近,如:正在獲取指令i1,當(dāng)指令i2被取到之后,緩存124就可以開(kāi)始輸出4條指令i0、i1、i2和i3。處理器核125可以仍然從緩存124和存儲(chǔ)模塊216分別獲取i3和t1。例如,可以使用一個(gè)異或邏輯使控制選擇器214的選擇信號(hào)的值取反,從而分別從緩存124的輸出中選擇分支目標(biāo)指令或包含分支目標(biāo)指令在內(nèi)的4條指令,或從存儲(chǔ)模塊216的輸出中選擇下一指令或包含下一指令在內(nèi)的4條指令。在這種情況下,無(wú)論分支轉(zhuǎn)移是否發(fā)生,4條指令t0、t1、t2和t3都不需要被存儲(chǔ)在存儲(chǔ)模塊216中。此外,圖9顯示了另一個(gè)本發(fā)明所述的流水線控制結(jié)構(gòu)4。流水線控制結(jié)構(gòu)4與圖5中的流水線控制結(jié)構(gòu)2類似。然而,流水線控制結(jié)構(gòu)4與流水線控制結(jié)構(gòu)2的不同點(diǎn)在于其包含兩個(gè)獨(dú)立的譯碼器:譯碼器25和譯碼器26,而不是只有一個(gè)譯碼器11。如圖9所示,從指令存儲(chǔ)器22獲取到的兩條指令進(jìn)一步分別被譯碼器25和譯碼器26譯碼,而指令譯碼結(jié)果31和指令譯碼結(jié)果32被送到選擇器33,由從分支判斷邏輯13來(lái)的控制信號(hào)14選擇。如果分支判斷邏輯13判定分支點(diǎn)轉(zhuǎn)移發(fā)生,那么選擇對(duì)應(yīng)分支目標(biāo)指令地址18的指令譯碼結(jié)果32送到執(zhí)行單元12。如果分支判斷邏輯13判定分支點(diǎn)轉(zhuǎn)移不發(fā)生,那么選擇下一指令地址21對(duì)應(yīng)的指令譯碼31送到執(zhí)行單元12。此外,由于分支判斷邏輯13可以在分支指令執(zhí)行段結(jié)尾且下一指令的執(zhí)行段之前完成該判定,因此流水線不會(huì)有任何等待分支結(jié)果而導(dǎo)致的時(shí)鐘周期損失。這樣,分支判斷邏輯13除了在執(zhí)行該分支點(diǎn)之前進(jìn)行分支轉(zhuǎn)移的判定外,還可以在一個(gè)正常的流水線段中對(duì)分支轉(zhuǎn)移進(jìn)行判定,如在分支指令執(zhí)行段的結(jié)尾進(jìn)行。由于在分支點(diǎn)之后所有可能被處理器核125執(zhí)行的指令都已經(jīng)被獲取并譯碼,且指令類型是已知的,因此不會(huì)有因分支判定而導(dǎo)致的流水線暫停。此外,雖然如之前所述處理器核125每次執(zhí)行一條指令,但處理器核125也可以每次執(zhí)行超過(guò)一條指令(即一個(gè)多發(fā)射處理器),對(duì)于上述例子也是可行的。類似地,雖然描述的是5段流水線操作,對(duì)于各種流水線結(jié)構(gòu)中任何其他數(shù)目的流水線級(jí)數(shù)的流水線操作也是可行的。此外,也可以通過(guò)對(duì)可執(zhí)行指令的預(yù)處理或使用預(yù)定義的指令減少因分支指令處理而導(dǎo)致的時(shí)鐘周期損失。例如,分支指令可以與非分支指令組合以構(gòu)成一條復(fù)合指令,從而可以在處理該非分支指令的同時(shí)處理該分支指令,使得該分支指令所需的時(shí)鐘周期代價(jià)被減少到零或最少。例如,處理器指令集中通常包含一些保留或未使用的指令,或某些非分支指令中有保留位或未使用的部分。這些非分支指令可以被用于包含分支指令的分支條件和分支目標(biāo)地址或偏移量等。這樣,當(dāng)執(zhí)行這些非分支指令時(shí),可以對(duì)分支條件進(jìn)行判定,并在該非分支指令執(zhí)行的過(guò)程中進(jìn)行分支轉(zhuǎn)移,從而實(shí)現(xiàn)零代價(jià)的分支處理。由于分支指令大致占處理器執(zhí)行的指令總數(shù)的20%,減少可執(zhí)行指令總數(shù)的20%可以顯著增加處理器的性能。例如,在一個(gè)32位指令集中,一類加法指令包含5位的指令碼,以4位寄存器號(hào)形式出現(xiàn)的兩個(gè)源操作數(shù)和一個(gè)目標(biāo)操作數(shù),這樣,在這種情況下,一條加法指令總共用掉了17位,而剩下的15位沒(méi)有被用到。另一方面,一類分支指令通過(guò)比較兩個(gè)寄存器的值進(jìn)行分支判定。作為一條獨(dú)立的指令,這類分支指令可以包含一個(gè)5位的指令碼,5位的分支偏移量,以及每個(gè)都是4位的寄存器號(hào)。這樣,該分支指令用掉了18位。然而,當(dāng)該加法指令和該分支指令組合在一起構(gòu)成一條復(fù)合指令(如:加法并分支)時(shí),可以對(duì)5位的指令碼增加1位以表示這條復(fù)合指令。這樣,這條“加法并分支”指令包含6位的指令碼,三個(gè)用于加法操作的寄存器號(hào)共占12位,兩個(gè)用于分支轉(zhuǎn)移的寄存器號(hào)共占8位,以及5位分支偏移量,總共為31位。這樣,在這個(gè)例子中,可以在該加法指令被執(zhí)行的同時(shí)執(zhí)行該分支指令,從而實(shí)現(xiàn)零代價(jià)的分支處理。該方法使得零代價(jià)的分支轉(zhuǎn)移成為可能。在其他32位指令集的例子中某些執(zhí)行類型的指令(如:加法、減法等)可以有一個(gè)6位的指令碼,以及三個(gè)每個(gè)為5位寄存器號(hào),總共為21位。這樣,為附加的分支操作留下了11位。這種分支操作可以是固定類型的,如當(dāng)某個(gè)特定寄存器的值非零時(shí)分支轉(zhuǎn)移發(fā)生。這11位中的1位可以被稱為分支位,而其他10位可以是分支偏移量。當(dāng)該分支位被設(shè)為“0”時(shí),該指令是一條普通的可執(zhí)行指令。當(dāng)該分支位被設(shè)為“1”時(shí),該指令除了具有執(zhí)行該可執(zhí)行操作(加法等)的功能外,還是一條分支指令。此外,如果寄存器內(nèi)容不等于零,該內(nèi)容被減1,而該執(zhí)行的結(jié)果是分支轉(zhuǎn)移到地址為分支偏移量加上該復(fù)合指令地址的指令。另一方面,如果該寄存器內(nèi)容等于零,那么分支轉(zhuǎn)移不發(fā)生,下一被執(zhí)行的指令為緊跟在該復(fù)合指令之后的指令。這種類型的指令能夠?yàn)槊看纬绦蜓h(huán)減少兩個(gè)時(shí)鐘周期。圖10顯示了本發(fā)明所述處理器環(huán)境1000的一個(gè)實(shí)施例。在處理器環(huán)境1000中,使用了一個(gè)讀緩沖229用于提供處理器核125的程序流中的一條分支指令和在該分支指令之后的后續(xù)指令。處理器環(huán)境與圖7中的處理器環(huán)境600類似,但有一些區(qū)別。如圖10所示,處理器環(huán)境1000除了緩存124、處理器核125、軌道表126和循跡器170外,還包含一個(gè)讀緩沖229。讀緩沖229連接在緩存124和處理器核125之間,并包含一個(gè)存儲(chǔ)模塊216和一個(gè)選擇器214。存儲(chǔ)模塊216用于存儲(chǔ)某些指令,比如在緩存124中一個(gè)存儲(chǔ)塊中的內(nèi)容。例如,讀緩沖229中的存儲(chǔ)模塊216存儲(chǔ)并向外提供分支目標(biāo)指令及后續(xù)指令,而分支目標(biāo)由緩存124直接提供,使得同樣的緩存器124能提供更高的帶寬。讀緩沖229中的選擇器214基于分支判斷選擇分支目標(biāo)指令(來(lái)自緩存124)或分支指令的后續(xù)指令(來(lái)自存儲(chǔ)模塊216)中的一種作為輸出219送到處理器核125,使得在分支指令之后提供給處理器核125的指令是有效的或正確的。此外,從軌道表126讀出的總線150中的分支目標(biāo)地址被送到緩存124作為塊地址及塊內(nèi)偏移地址;來(lái)源于處理器125的pc偏移量155(塊內(nèi)偏移地址)被送到緩存存儲(chǔ)模塊216。而來(lái)自存儲(chǔ)器125的‘taken’信號(hào)被用于控制選擇器214。在操作過(guò)程中,循跡器170提供bnx152和bny153尋址,使得軌道表126可以輸出一個(gè)對(duì)應(yīng)于該bnx152和bny153的軌跡點(diǎn)。該軌跡點(diǎn)被讀出的內(nèi)容中包含諸如指令類型和分支目標(biāo)地址等的信息。該內(nèi)容可以通過(guò)總線150被送到循跡器170。當(dāng)循跡器170檢測(cè)到一個(gè)軌跡點(diǎn)包含一條分支指令的信息時(shí),總線150上的分支目標(biāo)塊地址221(目標(biāo)bnx),及分支目標(biāo)偏移地址222(目標(biāo)bny)被送到緩存124,以從緩存124中取出該分支目標(biāo)指令(也可包括該分支目標(biāo)指令同一存儲(chǔ)塊上的其他指令)放到總線217上送到存儲(chǔ)模塊216的寫端口(writeport)以及選擇器214的一個(gè)輸入端。其中分支目標(biāo)塊地址221及分支目標(biāo)偏移地址222可被寄存器鎖存后再送往緩存124尋址。存儲(chǔ)模塊216可以包含特定數(shù)量的存儲(chǔ)單元,用以存儲(chǔ)指令。例如,包含一個(gè)存儲(chǔ)塊(如:指令塊)的所有指令。處理器核125向存儲(chǔ)模塊216提供塊內(nèi)偏移量(offset)155來(lái)尋址,從存儲(chǔ)模塊中存儲(chǔ)的指令中選擇單數(shù)或復(fù)數(shù)條處理器核將要執(zhí)行的指令送到選擇器214的另一個(gè)輸入端。處理器核125也提供‘taken’信號(hào)和‘branch/jump’信號(hào)至循跡器170以傳遞分支與否信息。其中‘taken’信號(hào)也被送至選擇器214作為選擇器214的輸入,也被送至存儲(chǔ)模塊216選擇是否用緩存124輸出的指令塊替換存儲(chǔ)模塊216的內(nèi)容。當(dāng)分支判斷時(shí)間槽到來(lái)時(shí),從存儲(chǔ)模塊216中被選出放在選擇器214的輸入端上的指令包含有分支指令后的單數(shù)或復(fù)數(shù)條指令。如果判斷結(jié)果是不進(jìn)行分支,那么‘taken’信號(hào)控制選擇器214選擇來(lái)自存儲(chǔ)模塊216的輸出(分支指令后的指令),也控制存儲(chǔ)模塊216保持現(xiàn)有內(nèi)容不變。在此情況下,處理器核125執(zhí)行分支指令后的指令。此時(shí)循跡器170移向軌道表同一行中下一個(gè)分支指令,重復(fù)以上操作。但是,如果判斷結(jié)果是進(jìn)行分支,那么‘taken’信號(hào)控制選擇器214選擇緩存124的輸出(分支目標(biāo)),也控制存儲(chǔ)模塊216用緩存124的輸出更新存儲(chǔ)模塊216的內(nèi)容。在這個(gè)情況下,處理器核125執(zhí)行分支目標(biāo)指令及分支目標(biāo)指令后的指令。此時(shí)循跡器170移向軌道表中分支目標(biāo)指令所在行的所在項(xiàng)。此后,pc偏移量155選擇存儲(chǔ)模塊216中的指令(分支目標(biāo)指令后的指令)供處理器核125執(zhí)行,循跡器170移向軌道表同一行中下一個(gè)分支指令,重復(fù)以上操作。如此,當(dāng)處理器核125執(zhí)行一個(gè)分支點(diǎn)對(duì)應(yīng)的分支指令時(shí),可以同時(shí)提供分支目標(biāo)指令和緊跟該分支點(diǎn)的后續(xù)指令,從而可以根據(jù)分支轉(zhuǎn)移是否發(fā)生取到正確的指令。可以在軌道中最后一條指令之后增加一個(gè)無(wú)條件轉(zhuǎn)移標(biāo)志,其轉(zhuǎn)移目標(biāo)指令就是程序流中緊跟在上述最后一條指令之后的指令。采用前述相同方法,可以在每條軌道上的指令執(zhí)行完畢后,在不暫停流水線操作的情況下執(zhí)行之后的指令。此外,還可以通過(guò)檢測(cè)使分支指令進(jìn)行分支條件判斷所需要的條件最終被確定的指令位置或時(shí)間點(diǎn),在該條件被確定之后就進(jìn)行分支判定,提前確定分支指令后應(yīng)執(zhí)行的指令的地址,從而在不使用現(xiàn)有分支預(yù)測(cè)方法的情況下,實(shí)現(xiàn)100%成功率的分支預(yù)測(cè)。圖11顯示了本發(fā)明所述分支預(yù)測(cè)方法的一個(gè)示意圖1100。如圖11所示,指令流1101為一系列順序執(zhí)行的指令構(gòu)成的指令流,且執(zhí)行順序?yàn)樽宰笙蛴摇V噶盍?101上的指令1102是分支指令。指令流1101上的指令1103、1104、1105均是改變分支指令1102分支條件(或條件標(biāo)志)的指令,其中指令1105為這些指令中最后一個(gè)改變分支指令1102分支條件(或條件標(biāo)志)的指令。與傳統(tǒng)處理器的做法(執(zhí)行到分支指令1102時(shí)再判斷轉(zhuǎn)移條件是否滿足)不同,在本實(shí)施例中,在執(zhí)行指令1105使得分支指令1102所需的分支條件(或條件標(biāo)志)均被確定后,即可對(duì)分支轉(zhuǎn)移條件是否滿足進(jìn)行判斷。圖12是本發(fā)明所述分支預(yù)測(cè)的實(shí)施例1200。分支預(yù)測(cè)系統(tǒng)1200由三部分組成:指令緩沖1201、預(yù)檢測(cè)控制單元1202和時(shí)間點(diǎn)檢測(cè)單元1203。指令緩沖1201中存儲(chǔ)了當(dāng)前正在執(zhí)行的指令1205和指令1205之后的后續(xù)指令。時(shí)間點(diǎn)檢測(cè)單元1203中包含了對(duì)應(yīng)每個(gè)分支轉(zhuǎn)移判斷條件(或條件標(biāo)志)的位置寄存器。根據(jù)處理器指令集體系結(jié)構(gòu)的不同,分支轉(zhuǎn)移判斷條件(或條件標(biāo)志)可以是通用寄存器、狀態(tài)寄存器或標(biāo)志位??梢酝ㄟ^(guò)不同分支轉(zhuǎn)移判斷條件(或條件標(biāo)志)進(jìn)行相互比較,以得到分支轉(zhuǎn)移是否發(fā)生的判定結(jié)果。也可以將分支轉(zhuǎn)移判斷條件(或條件標(biāo)志)與預(yù)設(shè)的值進(jìn)行比較,以得到分支轉(zhuǎn)移是否發(fā)生的判定結(jié)果。預(yù)檢測(cè)控制單元1202控制領(lǐng)先指針1204以比處理器程序計(jì)數(shù)器(pc)更快的速度自當(dāng)前指令1205沿指令緩沖掃描后續(xù)指令,直到到達(dá)第一個(gè)分支指令1206。在此過(guò)程中,讀出領(lǐng)先指針指向的指令,送到時(shí)間點(diǎn)檢測(cè)單元1203。由于處理器中可以用于分支轉(zhuǎn)移判斷的條件(或條件標(biāo)志)數(shù)量是有限的,因此經(jīng)時(shí)間點(diǎn)檢測(cè)單元1203中譯碼器1207譯碼可知領(lǐng)先指針1204指向的指令是否會(huì)改變這些條件(或條件標(biāo)志)中的一個(gè)或多個(gè)的值;如果該指令會(huì)改變分支轉(zhuǎn)移判斷的條件(或條件標(biāo)志)值,那么同時(shí)能知道該指令將改變哪一個(gè)或哪些條件(或條件標(biāo)志)的值。在掃描過(guò)程中,一旦發(fā)現(xiàn)領(lǐng)先指針1204指向的指令會(huì)改變分支轉(zhuǎn)移判斷條件(或條件標(biāo)志)的值,就將該指令的指令位置信息寫入時(shí)間點(diǎn)判斷單元1203中對(duì)應(yīng)被改變的那個(gè)或那些條件(或條件標(biāo)志)的位置寄存器中。為便于描述,分支預(yù)測(cè)系統(tǒng)1200以分支指令僅有兩種判斷條件(cond1和cond2)為例,當(dāng)具有更多判斷條件(或條件標(biāo)志)時(shí),也可以用同樣方法推廣實(shí)現(xiàn)。以分支預(yù)測(cè)系統(tǒng)1200為例,通過(guò)對(duì)指令緩沖的掃描,從當(dāng)前指令1205到第一條分支指令1206之間一共有三條指令會(huì)改變判斷條件,其中改變cond1值的指令1208的指令位置信息是‘3’,改變cond2值的指令1209的指令位置信息是‘4’,另一條改變cond2值的指令1210的指令位置信息是‘7’。當(dāng)領(lǐng)先指針1204指向指令1208時(shí),將指令1208讀出并通過(guò)總線1211送到譯碼單元1207,經(jīng)譯碼后,發(fā)現(xiàn)該指令會(huì)改變cond1的值。因此將指令1208的指令位置信息‘3’寫入cond1對(duì)應(yīng)的位置寄存器1212中。同理,當(dāng)領(lǐng)先指針1204先后指向指令1209和指令1210時(shí),將指令1209的指令位置信息‘4’和指令1210的指令位置信息‘7’先后寫入cond2對(duì)應(yīng)的位置寄存器1213中。這樣,當(dāng)領(lǐng)先指針1204到達(dá)分支指令1206時(shí),位置寄存器1212和1213中分別存儲(chǔ)了執(zhí)行分支指令1206前最后更新條件值的指令的位置信息。此外,當(dāng)領(lǐng)先指針1204到達(dá)指令1206處,該指令被讀出并通過(guò)總線1211送到譯碼單元1207,經(jīng)譯碼后發(fā)現(xiàn)是分支指令,則通過(guò)控制線1216將停止信號(hào)發(fā)送給預(yù)檢測(cè)控制單元1202,使得領(lǐng)先指針1204停留在分支指令1206處。同時(shí),由于領(lǐng)先指針1204指向的是分支指令,譯碼單元1207譯碼后通過(guò)控制線1215選擇所有分支條件對(duì)應(yīng)的位置寄存器中與分支指令1206所需判斷的條件相關(guān)的位置寄存器的值輸出到比較單元1218。比較單元1218的另一個(gè)用于比較的輸入為已完成條件值更新的當(dāng)前指令的當(dāng)前指令位置信息1214。由于該位置寄存器中存儲(chǔ)的是指令的位置信息,因此一旦執(zhí)行完畢位于分支指令1206前的最后更新某個(gè)分支判斷條件值的指令時(shí),送到比較單元1218的當(dāng)前指令位置信息1214的值就等于該指令的指令位置信息,即比較單元1218輸出“相等”的結(jié)果送到控制單元1219,表示該判斷條件值已被更新,可以被用于進(jìn)行分支轉(zhuǎn)移條件是否滿足的判斷。按此方法進(jìn)行,當(dāng)分支指令1206所需的全部判斷條件值均更新完畢時(shí),控制單元1219即可發(fā)出“可以判斷”的信號(hào)1220,允許處理器對(duì)分支指令1206進(jìn)行分支判定,從而提前確定分支指令后應(yīng)執(zhí)行的指令的地址,實(shí)現(xiàn)100%成功率的分支預(yù)測(cè)。雖然在圖中沒(méi)有明示,但是應(yīng)該理解,時(shí)間點(diǎn)檢測(cè)單元1203還可以從處理器中的寄存器、指令緩沖1201或其他任何合適的來(lái)源獲取必要的信息,以產(chǎn)生信號(hào)1220。同時(shí),時(shí)間點(diǎn)檢測(cè)單元1203還可以向處理器發(fā)送必要的信息,以產(chǎn)生信號(hào)1220。此外,在某些情況下,如處理器不進(jìn)行亂序執(zhí)行時(shí),也可以不將所需分支判斷條件對(duì)應(yīng)的全部位置寄存器的值送到比較單元1218,而是由譯碼單元1207譯碼后發(fā)出控制信號(hào),選擇所需分支判斷條件對(duì)應(yīng)的多個(gè)位置寄存器中最大的值(位置值)輸出到比較單元1218。這樣,當(dāng)比較單元1218輸出“相等”的結(jié)果送到控制單元1219,或該位置寄存器值大于等于當(dāng)前指令位置信息1214的值時(shí),分支指令所需的全部判斷條件值均更新完畢。此時(shí),也可以用程序計(jì)數(shù)器的值作為當(dāng)前指令位置信息1214的值。當(dāng)前第1頁(yè)12
當(dāng)前第1頁(yè)1 2 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1