專利名稱:具有轉(zhuǎn)移預(yù)測的數(shù)據(jù)處理及其操作方法
技術(shù)領(lǐng)域:
本發(fā)明屬數(shù)字計(jì)算系統(tǒng)技術(shù)領(lǐng)域。具體地說,本發(fā)明提出了一種具有轉(zhuǎn)移預(yù)測能力的數(shù)據(jù)處理機(jī)。
轉(zhuǎn)移預(yù)測技術(shù)改善了數(shù)據(jù)處理機(jī)的性能。采用轉(zhuǎn)移預(yù)測技術(shù)的數(shù)據(jù)處理機(jī)每當(dāng)接收到一個(gè)轉(zhuǎn)移指令時(shí),就作出一個(gè)“推測”,根據(jù)這一個(gè)推測進(jìn)行動(dòng)作,然后通過執(zhí)行這個(gè)轉(zhuǎn)移指令確定所作的這個(gè)推測是否正確。這種數(shù)據(jù)處理機(jī)推測最終將采取轉(zhuǎn)移跳到一個(gè)新的指令地址,還是會“失敗”而執(zhí)行下一個(gè)順序指令。對轉(zhuǎn)移指令進(jìn)行預(yù)測的數(shù)據(jù)處理機(jī)由于能比完全執(zhí)行轉(zhuǎn)移指令更快地作出精確推測,因此性能得到了提高。這種數(shù)據(jù)處理機(jī)需要的只是對錯(cuò)誤的推測加以校正。
通常,數(shù)據(jù)處理機(jī)在進(jìn)行“推測”時(shí)可以采用兩種轉(zhuǎn)移預(yù)測技術(shù)中的一種技術(shù)。首先,數(shù)據(jù)處理機(jī)可以采用靜態(tài)轉(zhuǎn)移預(yù)測方法。在一種靜態(tài)轉(zhuǎn)移預(yù)測方法中,每個(gè)轉(zhuǎn)移指令都有一位或幾位用來確定是否應(yīng)采取轉(zhuǎn)移。這些位在程序編輯時(shí)全都設(shè)置好了,因此是靜態(tài)的。其次,數(shù)據(jù)處理機(jī)也可以采用動(dòng)態(tài)轉(zhuǎn)移預(yù)測方法。在一種動(dòng)態(tài)轉(zhuǎn)移預(yù)測方法中,為每個(gè)轉(zhuǎn)移指令分別規(guī)定了一個(gè)反映這個(gè)轉(zhuǎn)移指令過去轉(zhuǎn)移情況的狀態(tài)。最簡單的狀態(tài)是上次轉(zhuǎn)移或上次沒有轉(zhuǎn)移。一個(gè)特定轉(zhuǎn)移指令的狀態(tài)確定了下次數(shù)據(jù)處理機(jī)執(zhí)行這個(gè)轉(zhuǎn)移指令時(shí)是否應(yīng)轉(zhuǎn)移。一個(gè)特定轉(zhuǎn)移指令的狀態(tài)在這個(gè)指令完成后可以加以修改,以反映是否已采取了轉(zhuǎn)移。
這兩種轉(zhuǎn)移預(yù)測方法各有優(yōu)缺點(diǎn)。例如,在程序員的洞察力提高或至少保持一定預(yù)測精度的情況下,與動(dòng)態(tài)轉(zhuǎn)移預(yù)測相比,靜態(tài)轉(zhuǎn)移預(yù)測的優(yōu)點(diǎn)是程序較短。在這些情況下,采用動(dòng)態(tài)轉(zhuǎn)移預(yù)測的數(shù)據(jù)處理機(jī)或許在程序完成前不能精確地規(guī)定每個(gè)可能轉(zhuǎn)移指令的轉(zhuǎn)移狀態(tài)。相反,在一些復(fù)雜的軟件程序中,為了預(yù)測轉(zhuǎn)移指令動(dòng)態(tài)轉(zhuǎn)移預(yù)測可能是唯一的選擇。在這些情況下,可以用一個(gè)比較復(fù)雜的模型確定各轉(zhuǎn)移的狀態(tài)。這種模型可以提高采用這種方法的數(shù)據(jù)處理的總的轉(zhuǎn)移預(yù)測精度。
本發(fā)明所提出的具有轉(zhuǎn)移預(yù)測的數(shù)據(jù)處理機(jī)基本上消除了現(xiàn)有的數(shù)據(jù)處理機(jī)的缺點(diǎn)。
這種數(shù)據(jù)處理機(jī)具有第一轉(zhuǎn)移計(jì)算電路、第二轉(zhuǎn)移計(jì)算電路、第一存儲裝置、以及轉(zhuǎn)移預(yù)測電路。第一和第二轉(zhuǎn)移計(jì)算電路分別根據(jù)一個(gè)指令的地址和這個(gè)指令本身產(chǎn)生一個(gè)第一取指(讀取指令)地址和一個(gè)第二取指地址。第一存儲裝置存儲了一組轉(zhuǎn)移狀態(tài),這組轉(zhuǎn)移狀態(tài)與一組轉(zhuǎn)移指令中不同的一個(gè)相聯(lián)。轉(zhuǎn)移預(yù)測電路在第一工作模式根據(jù)轉(zhuǎn)移指令或在第二工作模式根據(jù)相應(yīng)的一個(gè)轉(zhuǎn)移狀態(tài)從第一和第二取指地址中選擇一個(gè)取指地址輸出。
本發(fā)明提出的操作數(shù)據(jù)處理機(jī)的方法其特征在于首先包括接收一條第一轉(zhuǎn)移指令,產(chǎn)生一個(gè)第一取指地址,產(chǎn)生一個(gè)第二取指地址,根據(jù)這條第一轉(zhuǎn)移指令選擇第一或第二取指地址,以及讀取由選中的取指地址指向的指令。這種方法其次包括接收一條第二轉(zhuǎn)移指令,產(chǎn)生一個(gè)第三取指地址,產(chǎn)生一個(gè)第四取指地址,根據(jù)存儲在一個(gè)第一存儲裝置中的一個(gè)相應(yīng)的轉(zhuǎn)移狀態(tài)從第三和第四取指地址中選擇一個(gè)取指地址,以及讀取由選中的取指地址指向的指令。
本發(fā)明的特征和優(yōu)點(diǎn)從以下結(jié)合附圖所作的詳細(xì)說明中可以更為清楚地看出。在這些附圖中相同的標(biāo)記數(shù)字標(biāo)記是相同或相當(dāng)?shù)牟考?,其?br>
圖1示出了按照本發(fā)明構(gòu)成的數(shù)據(jù)處理機(jī)的方框圖;圖2示出了圖1中的轉(zhuǎn)移單元的方框圖;圖3示出了圖2中的轉(zhuǎn)移送指/執(zhí)行單元的方框圖;以及圖4示出了一個(gè)示例性的轉(zhuǎn)移指令的狀態(tài)轉(zhuǎn)換圖。
圖1是一個(gè)按照本發(fā)明構(gòu)成的數(shù)據(jù)處理機(jī)10的方框圖。數(shù)據(jù)處理機(jī)10是一個(gè)性能得到改善的數(shù)據(jù)處理機(jī),它結(jié)合了靜態(tài)和動(dòng)態(tài)的轉(zhuǎn)移預(yù)測方法。如上所述,數(shù)據(jù)處理機(jī)10對每個(gè)轉(zhuǎn)移指令是否會導(dǎo)致轉(zhuǎn)移進(jìn)行預(yù)測后,讀取在預(yù)測地址的指令,開始執(zhí)行這些指令。此后,數(shù)據(jù)處理機(jī)10分析是否應(yīng)該采取轉(zhuǎn)移,如果前面預(yù)測不正確,則執(zhí)行校正。按照本發(fā)明,數(shù)據(jù)處理機(jī)10可以工作在靜態(tài)的或動(dòng)態(tài)的轉(zhuǎn)移預(yù)測模式。此外,數(shù)據(jù)處理機(jī)10在靜態(tài)轉(zhuǎn)移預(yù)測模式可以按照一個(gè)可編程的位對轉(zhuǎn)移歷程表中各轉(zhuǎn)移指令的轉(zhuǎn)移狀態(tài)進(jìn)行更新或不進(jìn)行更新。數(shù)據(jù)處理機(jī)10可以例如在首次執(zhí)行程序代碼時(shí)將轉(zhuǎn)移歷程表“填”好。
由圖1可見,總線接口單元(以下簡稱為BIU)12控制了數(shù)據(jù)處理機(jī)10與數(shù)據(jù)處理系統(tǒng)其他部件(未示出)之間數(shù)據(jù)流。BIU12接到指令高速緩沖存儲器(高速緩存)14和數(shù)據(jù)高速緩存16上。指令高速緩存14向轉(zhuǎn)移單元18和完成/送指單元20提供一個(gè)指令流。轉(zhuǎn)移單元18將在以后結(jié)合圖2和圖3詳細(xì)加以說明。完成/送指單元20逐個(gè)將指令送到適當(dāng)?shù)膱?zhí)行單元。數(shù)據(jù)處理機(jī)10有一個(gè)定點(diǎn)執(zhí)行單元22、一個(gè)裝入/存儲執(zhí)行單元24和一個(gè)浮點(diǎn)執(zhí)行單元26。定點(diǎn)執(zhí)行單元22和裝入/存儲執(zhí)行單元24對一個(gè)通用體系結(jié)構(gòu)(architectural)寄存器文件(以下簡稱為GPR文件)28和一個(gè)第一更名緩存30進(jìn)行讀寫。浮點(diǎn)執(zhí)行單元26和裝入/存儲執(zhí)行單元24對一個(gè)浮點(diǎn)結(jié)構(gòu)寄存器文件(以下簡稱為FPR文件)32和一個(gè)第二更名緩存34進(jìn)行讀寫。
如果沒有采用本發(fā)明的轉(zhuǎn)移預(yù)測方法的數(shù)據(jù)處理機(jī)10的工作情況是這個(gè)領(lǐng)域中所周知的。通常,轉(zhuǎn)移單元18確定哪個(gè)編程指令順序適合給出的某些數(shù)據(jù)寄存器的內(nèi)容和各程序步本身。完成/送指單元將單個(gè)的指令分發(fā)到各執(zhí)行單元22、24和26。每個(gè)執(zhí)行單元執(zhí)行一特定類指令中的一個(gè)或幾個(gè)指令。每個(gè)執(zhí)行單元可執(zhí)行的指令的特定類別由這個(gè)執(zhí)行單元的名稱表示。例如,浮點(diǎn)執(zhí)行單元26執(zhí)行的是浮點(diǎn)算術(shù)指令。
定點(diǎn)執(zhí)行單元22將其操作結(jié)果返回給第一更名緩沖器30的指定入口。第一更名緩沖器30周期性地在產(chǎn)生這個(gè)結(jié)果的指令前的所有指令已經(jīng)更新了各自的GPR文件入口后用第一更名緩沖器30的一個(gè)入口更新GPR文件28的一個(gè)入口。完成/送指單元20對這種更新進(jìn)行協(xié)調(diào)。第一更名緩沖器30和GPR文件28都能向定點(diǎn)執(zhí)行單元22提供操作數(shù)。相反,浮點(diǎn)執(zhí)行單元26將其操作結(jié)果返回給第二更名緩沖器34的指定入口。第二更名緩沖器34周期性地在產(chǎn)生這個(gè)結(jié)果的指令前的所有指令已經(jīng)更新了各自的FPR文件入口后,用第二更名緩沖器34的一個(gè)入口更新FPR文件32的一個(gè)入口。完成/送指單元20也對這種更新進(jìn)行協(xié)調(diào)。第二更名緩存34和FPR文件32都能向浮點(diǎn)執(zhí)行單元26提供操作數(shù)。
裝入/存儲單元24讀取存儲在GPR文件28、第一更名緩沖器30、FPR32或第二更名緩沖器34中的數(shù)據(jù),并將所讀出的數(shù)據(jù)寫入數(shù)據(jù)高速緩存16。這數(shù)據(jù)也可以根據(jù)與所分開的本發(fā)明無關(guān)的數(shù)據(jù)處理機(jī)10的操作特點(diǎn)寫入到一個(gè)外存儲系統(tǒng)(未示出)。相反,裝入/存儲單元24讀取存儲在數(shù)據(jù)高速緩存16中的數(shù)據(jù),并將所讀出的數(shù)據(jù)寫入GPR文件28、第一更名緩沖器30、FPR文件32或第二更名緩沖器34。
下面結(jié)合圖2至圖4說明采用本發(fā)明的轉(zhuǎn)移預(yù)測方法的數(shù)據(jù)處理機(jī)10的工作情況。一般說來,數(shù)據(jù)處理機(jī)10是一個(gè)指令集經(jīng)壓縮的計(jì)算機(jī)(“RISC”)。數(shù)據(jù)處理機(jī)10是通過將每個(gè)指令劃分為一系列小步的序列、每步在時(shí)間上可與其他指令的各步重疊的方式達(dá)到高性能的。這種提高性能的策略就是所謂的“流水線(pipelining)”。
在所述的本實(shí)施例中,每個(gè)指令都劃分為五個(gè)分立的步驟取指、送指、執(zhí)行、返寫和完成。指令高速緩存14內(nèi)的存儲器管理電路(未示出)在取指階段檢索出在一個(gè)由轉(zhuǎn)移單元18識別的存儲器地址開始的一條或幾條指令。在送指階段,完成/送指單元20在確定并無不允許的數(shù)據(jù)相關(guān)和為指令結(jié)果保留一個(gè)更名緩沖器入口后,將每條指令發(fā)送給適當(dāng)?shù)膱?zhí)行單元。各具體執(zhí)行單元在執(zhí)行階段執(zhí)行它的編程指令,并在返寫階段將它的結(jié)果(如果有的話)寫入所保留的更名緩沖器入口。最后,在完成階段,完成/送指單元20在這具體指令前的各指令已經(jīng)更新了體系結(jié)構(gòu)寄存器文件后,用存儲在更名緩沖器中的具體指令結(jié)果更新體系結(jié)構(gòu)寄存器文件。通常,每個(gè)指令階段要占用一個(gè)機(jī)器時(shí)鐘周期。然而,某些指令需要占用一個(gè)以上的時(shí)鐘周期,而另一些指令不需要占用所有這五個(gè)階段。由于完成各種指令所需的時(shí)鐘周期數(shù)不同,因此對于一個(gè)具體的指令來說,在回寫階段與完成階段之間可能有延遲。
圖2示出了圖1中轉(zhuǎn)移單元18的方框圖。轉(zhuǎn)移單元18產(chǎn)生要從存儲器讀取的下一條指令的地址(標(biāo)為發(fā)至存儲器的地址)和接收從指令高速緩存14讀取的下一條指令(標(biāo)為取自存儲器的指令)。轉(zhuǎn)移單元18將接收到的指令鎖存在一個(gè)送指緩沖器44內(nèi)。在這個(gè)實(shí)施例中,轉(zhuǎn)移單元18每個(gè)時(shí)鐘周期接收四條指令一條存在發(fā)出的地址(讀取地址)上的指令和三條存在緊接著讀取地址的三個(gè)地址上的指令。因此,第一轉(zhuǎn)移檢測器46識別出在每組四條被鎖存的指令中的第一條轉(zhuǎn)移指令(如果有的話)。
鎖存在送指緩沖器44內(nèi)的第一條轉(zhuǎn)移指令(第一指令)的地址發(fā)送給轉(zhuǎn)移取指單元48、轉(zhuǎn)移送指/執(zhí)行單元50和轉(zhuǎn)移完成單元52。轉(zhuǎn)移取指單元48、轉(zhuǎn)移送指/執(zhí)行單元50和轉(zhuǎn)移完成單元52分別在不同的指令階段產(chǎn)生一個(gè)要讀取的下一條指令的地址。轉(zhuǎn)移送指/執(zhí)行單元50還接收第一轉(zhuǎn)移檢測器46的輸出。這三個(gè)單元的工作情況在后面將加以說明。多路復(fù)用器(標(biāo)為MUX)54根據(jù)地址選擇器56的輸出信號輸出這三個(gè)存儲器地址中的一個(gè)存儲器地址。地址選擇器56接收轉(zhuǎn)移取指單元48、轉(zhuǎn)移送指/執(zhí)行單元50和轉(zhuǎn)移完成單元52發(fā)來的各控制信號,經(jīng)解碼后確定應(yīng)該輸出這三個(gè)存儲器地址中的哪一個(gè)存儲器地址信號。取指地址寄存器(標(biāo)為IFAR)58將MUX54的輸出鎖存起來。IFAR58輸出的信號標(biāo)為發(fā)至存儲器的地址。
轉(zhuǎn)移取指單元48在IFAR58一旦鎖定了一個(gè)當(dāng)前取指地址后就為一條具體轉(zhuǎn)移指令計(jì)算出兩個(gè)新的取指地址。計(jì)算是在這具體轉(zhuǎn)移指令的取指階段進(jìn)行的。這個(gè)(些)由取指地址指向的具體指令在它的取指階段還是不知道的。轉(zhuǎn)移取指單元48向MUX54輸出這兩個(gè)地址中的一個(gè)。當(dāng)與現(xiàn)行取指地址關(guān)聯(lián)的那條轉(zhuǎn)移指令假設(shè)為在不采取轉(zhuǎn)移(也就是“失敗”而取下一個(gè)順序地址)時(shí),輸出第一個(gè)地址。當(dāng)與現(xiàn)行取指地址關(guān)聯(lián)的那條轉(zhuǎn)移指令假設(shè)為采取轉(zhuǎn)移(也就是指令流“跳轉(zhuǎn)”到一個(gè)新的位置)時(shí),輸出第二個(gè)地址。
轉(zhuǎn)移取址單元48有兩條內(nèi)部流水線,分別計(jì)算這兩個(gè)新的取指地址。轉(zhuǎn)移取指單元第一流水線通過增加IFAR58鎖存的地址計(jì)算出一個(gè)順序地址。在本實(shí)施例中,轉(zhuǎn)移取指單元第一流水線是在IFAR58的內(nèi)容上加四個(gè)指令的長度。轉(zhuǎn)移取指單元第二流水線利用IFAR58的內(nèi)容的一部分來檢索隨機(jī)存取存儲器(RAM)高速緩存器的一個(gè)第一存儲塊,這個(gè)存儲塊稱為轉(zhuǎn)移目標(biāo)地址高速緩存(BTAC)60。在本實(shí)施例中,轉(zhuǎn)移取址單元48為許多現(xiàn)行轉(zhuǎn)移指令在BTAC60中存儲了轉(zhuǎn)移目標(biāo)地址(取指地址)和與這些取指地址關(guān)聯(lián)的轉(zhuǎn)移指令的地址的子集。
在本實(shí)施例中,BTAC60是一個(gè)二路(tioo—wert)組相聯(lián)高速緩存。BTAC60利用鎖存在IFAR58的地址的一個(gè)子集來檢索BTAC60的兩個(gè)入口。轉(zhuǎn)移取指單元48將這索引地址的剩余位與存儲在檢索到的BTAC60的兩個(gè)入口的每個(gè)入口的地址位的子集進(jìn)行比較。如果有一個(gè)比較的結(jié)果是匹配的,則BTAC“成功”,轉(zhuǎn)移取指單元48輸出與這個(gè)匹配的地址位的子集關(guān)聯(lián)的“轉(zhuǎn)移”的取指地址。如果這兩上比較的結(jié)果沒有一個(gè)是匹配的,則BTAC“失敗”,轉(zhuǎn)移取指單元48向MUX54輸出經(jīng)增加的IFAR58的內(nèi)容,也就是“不轉(zhuǎn)移”的取指地址。
轉(zhuǎn)移送指/執(zhí)行單元50在它一接到由IFAR58的內(nèi)容可指向的具體指令和第一轉(zhuǎn)移檢測器46在可讀取的四個(gè)指令中識別出第一轉(zhuǎn)移指令(如果有的話)時(shí),計(jì)算兩個(gè)取指地址。轉(zhuǎn)移送指/執(zhí)行單元50在一個(gè)具體的轉(zhuǎn)移指令的送指階段為這個(gè)具體的轉(zhuǎn)移指令計(jì)算兩個(gè)地址。這兩個(gè)地址分別與不轉(zhuǎn)移和轉(zhuǎn)移條件相應(yīng)。轉(zhuǎn)移送指/執(zhí)行單元50向MUX54僅輸出其中一個(gè)地址。應(yīng)該注意,轉(zhuǎn)移取指單元48已經(jīng)在前面的時(shí)鐘周期根據(jù)這同一轉(zhuǎn)移指令向MUX54輸出了一個(gè)新的取指地址。根據(jù)在轉(zhuǎn)移送指/執(zhí)行單元50或轉(zhuǎn)移完成單元52中同時(shí)執(zhí)行的各轉(zhuǎn)移指令的輸出情況,IFAR58可以裝入這兩個(gè)單元中的一個(gè)單元的輸出。在這種情況下,數(shù)據(jù)處理機(jī)10將讀取在這個(gè)地址開始的各指令。
轉(zhuǎn)移送指/執(zhí)行單元50也有兩條計(jì)算它的兩個(gè)取地址的內(nèi)部流水線。第一流水線通過用一條指令增加轉(zhuǎn)移指令地址來計(jì)算一個(gè)順序地址。第一轉(zhuǎn)移檢測器46在每組四個(gè)讀取的指令中檢測出第一轉(zhuǎn)移指令地址(如果有的話)。轉(zhuǎn)移送指/執(zhí)行單元的第二流水線按照這條具體轉(zhuǎn)移指令計(jì)算取指地址。例如,這條流水線可以在轉(zhuǎn)移指令上加一個(gè)嵌在指令內(nèi)的偏移量。
一條轉(zhuǎn)移指令是否要轉(zhuǎn)移與轉(zhuǎn)移時(shí)跳轉(zhuǎn)到哪里無關(guān)。條件轉(zhuǎn)移指令是一類取決于指令結(jié)果的轉(zhuǎn)移指令,而這結(jié)果在類轉(zhuǎn)移指令的送指/執(zhí)行階段通常是不知道的。這條件決定了是否要進(jìn)行轉(zhuǎn)移,但并不確定取指地址是什么。因此,轉(zhuǎn)移送指/執(zhí)行單元50按照動(dòng)態(tài)轉(zhuǎn)移預(yù)測方法或靜態(tài)轉(zhuǎn)移預(yù)測方法從它所計(jì)算的兩個(gè)取指地址中選擇一個(gè)。用戶可以通過對某個(gè)專用寄存器(未示出)的某些位的位置控制要采用哪種具體的預(yù)測方法。
當(dāng)按照動(dòng)態(tài)轉(zhuǎn)移預(yù)測方法進(jìn)行操作時(shí),轉(zhuǎn)移送指/執(zhí)行單元50利用IFAR58的部分內(nèi)容來檢索RAM的一個(gè)第二存儲區(qū),該區(qū)稱為轉(zhuǎn)移歷程表(BHT)62。轉(zhuǎn)移送指/執(zhí)行單元50為每條轉(zhuǎn)移指令或轉(zhuǎn)移指令的某些子集規(guī)定轉(zhuǎn)移狀態(tài)。一條具體轉(zhuǎn)移指令的轉(zhuǎn)移狀態(tài)確定是否要進(jìn)行轉(zhuǎn)移。轉(zhuǎn)移送指/執(zhí)行單元50在一條具體轉(zhuǎn)移指令完成后更新這條指令的轉(zhuǎn)移狀態(tài)。本實(shí)施例的轉(zhuǎn)移狀態(tài)模型稍后將結(jié)合圖4加以說明。
當(dāng)按照靜態(tài)轉(zhuǎn)移預(yù)測方法進(jìn)行操作時(shí),轉(zhuǎn)移送指/執(zhí)行單元50利用嵌在轉(zhuǎn)移指令本身內(nèi)的一位或幾位來確定是否要進(jìn)行轉(zhuǎn)移。這些位在在編譯含有轉(zhuǎn)移指令的程序時(shí)就都設(shè)置好了。
轉(zhuǎn)移送指/執(zhí)行單元50在按照靜態(tài)轉(zhuǎn)移預(yù)測操作時(shí)可以更新BHT62,也可以不更新BHT62。是否要更新BHT62是一個(gè)策略問題。例如,數(shù)據(jù)處理機(jī)10在啟動(dòng)一個(gè)程序后可以工作在更新BHT的靜態(tài)轉(zhuǎn)移預(yù)測模式。一旦執(zhí)行了一定數(shù)量的轉(zhuǎn)移指令、BHT62填充了數(shù)據(jù),數(shù)據(jù)處理機(jī)10就可以轉(zhuǎn)移到動(dòng)態(tài)轉(zhuǎn)移預(yù)測模式。此外,在從一個(gè)第一程序轉(zhuǎn)到一個(gè)第二程序再要返回的情況下,如果第二程序很短或不如第一程序重要,那么從動(dòng)態(tài)轉(zhuǎn)移預(yù)測轉(zhuǎn)到不帶更新的靜態(tài)轉(zhuǎn)移預(yù)測再返回可能就比較好,因?yàn)檫@樣避免了與第二程序關(guān)聯(lián)的數(shù)據(jù)對BHT62的污染。
轉(zhuǎn)移完成單元52在完成一條具體轉(zhuǎn)移指令后為這條指令只產(chǎn)生一個(gè)地址。象其他指令一樣,一條轉(zhuǎn)移指令也是在它以前的所有指令已經(jīng)將它們的結(jié)果寫入適當(dāng)?shù)捏w系寄存器時(shí)完成的。此時(shí),轉(zhuǎn)移指令的轉(zhuǎn)移條件是已知的。應(yīng)當(dāng)注意的是,轉(zhuǎn)移取指單元48已經(jīng)在同一轉(zhuǎn)移指令的取指階段向MUX54輸出根據(jù)同一轉(zhuǎn)移指令得到的一個(gè)指令讀取地址,而轉(zhuǎn)移送指/執(zhí)行單元50可能已經(jīng)在同一指令的送指/執(zhí)行階段向MUX54輸出一個(gè)第二指令讀取地址。
轉(zhuǎn)移完成單元52含有一個(gè)先進(jìn)先出隊(duì)列或轉(zhuǎn)移隊(duì)列64。在這個(gè)隊(duì)列中存儲有關(guān)每個(gè)所執(zhí)行的轉(zhuǎn)移指令的數(shù)據(jù)。轉(zhuǎn)移完成單元52通過一組數(shù)據(jù)/控制信號66接收從轉(zhuǎn)移送指/執(zhí)行單元50發(fā)來的一些有關(guān)每個(gè)轉(zhuǎn)移指令的數(shù)據(jù)(1)轉(zhuǎn)移送指/執(zhí)行單元50產(chǎn)生的而沒有向MUX54輸出的取指地址(“未選通路”PATH);(2)在送指/執(zhí)行階段據(jù)以計(jì)算是否轉(zhuǎn)移的轉(zhuǎn)移條件的預(yù)測值;以及(3)本轉(zhuǎn)移指令的轉(zhuǎn)移狀態(tài)。轉(zhuǎn)移完成單元52還將每個(gè)轉(zhuǎn)移指令的地址存儲在轉(zhuǎn)移隊(duì)列64中。轉(zhuǎn)移完成單元52從完成/送指單元20(未示出)接收一個(gè)指示每個(gè)轉(zhuǎn)移指令完成時(shí)刻的控制信號。
在一個(gè)轉(zhuǎn)移指令完成后,轉(zhuǎn)移完成單元52接收到轉(zhuǎn)移送指/執(zhí)行單元50據(jù)以產(chǎn)生取指地址的轉(zhuǎn)移條件的實(shí)際值。通常,這轉(zhuǎn)移條件是一個(gè)專用寄存器(條件寄存器)中可由其他指令修改的一位。如果這條件的實(shí)際值與存儲在轉(zhuǎn)移隊(duì)列64中的預(yù)測值不同,則說明轉(zhuǎn)移送指/執(zhí)行單元50所作的轉(zhuǎn)移預(yù)測是錯(cuò)誤的。在這種情況下,轉(zhuǎn)移完成單元52輸出所存儲的與這個(gè)轉(zhuǎn)移指令關(guān)聯(lián)的地址。這個(gè)地址原是未被轉(zhuǎn)移送指/執(zhí)行單元50選中的那個(gè)通路。如果這條件的實(shí)際值與存儲在轉(zhuǎn)移隊(duì)列64中的預(yù)測值相同,則說明轉(zhuǎn)移送指/執(zhí)行單元50所作的轉(zhuǎn)移預(yù)測是正確的。在這種情況下,轉(zhuǎn)移完成單元52除了使轉(zhuǎn)移隊(duì)列64中與所完成的這條轉(zhuǎn)移指令關(guān)聯(lián)的入口無效備用外不進(jìn)行其他操作。無論是哪種情況,轉(zhuǎn)移完成單元52都要根據(jù)對預(yù)測轉(zhuǎn)移條件和實(shí)際轉(zhuǎn)移條件的比較和根據(jù)所存儲的轉(zhuǎn)移狀態(tài)為這條轉(zhuǎn)移指令產(chǎn)生一個(gè)新的轉(zhuǎn)移狀態(tài)。轉(zhuǎn)移完成單元52用所存儲的轉(zhuǎn)移地址對BHT62檢索,將這個(gè)新的轉(zhuǎn)移狀態(tài)存入BHT62。
地址選擇器56確定應(yīng)該使MUX54將多至三個(gè)輸出地址中的哪一個(gè)地址輸出給IFAR58。地址選擇器56接收從轉(zhuǎn)移取指單元48輸出的取指地址、從轉(zhuǎn)移送指/執(zhí)行單元50輸出的取指地址和從轉(zhuǎn)移完成單元52發(fā)來的一個(gè)控制信號。如果轉(zhuǎn)移條件的預(yù)測值與實(shí)際值不同,則轉(zhuǎn)移完成單元52就認(rèn)定這個(gè)控制信號有效,如果轉(zhuǎn)移定成單元52認(rèn)定其控制信號,則地址選擇器56使MUX54輸出由轉(zhuǎn)移完成單元52產(chǎn)生的地址。如果轉(zhuǎn)移完成單元52沒有認(rèn)定的控制信號,而轉(zhuǎn)移送指/執(zhí)行單元50產(chǎn)生的地址又與轉(zhuǎn)移取指單元48在前一個(gè)時(shí)鐘周期產(chǎn)生的地址不同的話,則地址選擇器56使MUX54輸出轉(zhuǎn)移送指/執(zhí)行單元50產(chǎn)生的地址。否則,地址選擇器56使MUX54輸出轉(zhuǎn)移取指單元48產(chǎn)生的地址。應(yīng)該理解,地址選擇器56可在任何給定時(shí)刻從多至三個(gè)由三條不同的轉(zhuǎn)移指令產(chǎn)生的不同地址中選出一個(gè)地址。
圖3是在圖2中的轉(zhuǎn)移送指/執(zhí)行單元50的方框圖。轉(zhuǎn)移送指/執(zhí)行單元50有一個(gè)多路復(fù)用器(MUX)68,它通過TOMUX54通路向圖2中的MUX54輸出兩個(gè)地址中的一個(gè)地址。轉(zhuǎn)移預(yù)測邏輯單元70選定兩個(gè)地址中的哪一個(gè)地址將由MUX68輸出。轉(zhuǎn)移預(yù)測邏輯單元70稍后再加以說明。
MUX68接收由順序地址計(jì)算器72發(fā)來的第一地址。順序地址計(jì)算器72在送指階段接收轉(zhuǎn)移指令的地址,用一個(gè)指令增加這個(gè)二進(jìn)制數(shù)。順序地址計(jì)算器72產(chǎn)生預(yù)測這條轉(zhuǎn)移指令不采取轉(zhuǎn)移時(shí)從存儲器讀取下條指令的地址。
MUX68接收由轉(zhuǎn)移地址計(jì)算器74發(fā)來的第二地址。轉(zhuǎn)移地址計(jì)算器74按照所接收的轉(zhuǎn)移指令和所接收的轉(zhuǎn)移指令地址產(chǎn)生一個(gè)取指地址。例如,轉(zhuǎn)移地址計(jì)算器74可以轉(zhuǎn)移指令地址上加上或減去一個(gè)嵌在轉(zhuǎn)移指令內(nèi)的偏移量,或者直接將一個(gè)嵌在轉(zhuǎn)移指令內(nèi)的絕對地址送給MUX68。轉(zhuǎn)移地址計(jì)算器74產(chǎn)生當(dāng)預(yù)測這條轉(zhuǎn)移指令會引起轉(zhuǎn)移時(shí)從存儲器讀取下條指令的地址。
轉(zhuǎn)移預(yù)測邏輯單元70按照模式位(MODE BITS)輸入信號可以工作在三種模式(1)動(dòng)態(tài)轉(zhuǎn)移預(yù)測;(2)BHT更新的靜態(tài)轉(zhuǎn)移預(yù)測;以及(3)BHT不更新的靜態(tài)轉(zhuǎn)移預(yù)測。在這個(gè)優(yōu)選實(shí)施例中,模式位輸入信號是從一個(gè)用戶可編程的專用寄存器(未示出)發(fā)出的。
在動(dòng)態(tài)轉(zhuǎn)移預(yù)測模式,用存儲在IFAR58中的地址對BHT62進(jìn)行檢索。BHT62輸出與相應(yīng)轉(zhuǎn)移指令關(guān)聯(lián)的一位或幾位的轉(zhuǎn)移狀態(tài)。在本實(shí)施例中,每個(gè)轉(zhuǎn)移指令都有四個(gè)轉(zhuǎn)移狀態(tài)。如果轉(zhuǎn)移指令定義為兩個(gè)第一狀態(tài)中的一個(gè)狀態(tài),轉(zhuǎn)移預(yù)測邏輯單元70將選擇由順序地址計(jì)算器72產(chǎn)生的地址。如果轉(zhuǎn)移指令定義為兩個(gè)第二狀態(tài)中的一個(gè)狀態(tài),則轉(zhuǎn)移預(yù)測邏輯單元70將選擇由轉(zhuǎn)移地址計(jì)算器74產(chǎn)生的地址。轉(zhuǎn)移狀態(tài)稍后將結(jié)合圖4說明。在這個(gè)模式,轉(zhuǎn)移預(yù)測邏輯單元70認(rèn)定更新模式(UPDATEMODE)控制信號有效。與門76接收分別來自轉(zhuǎn)移預(yù)測邏輯單元70和轉(zhuǎn)移完成單元52的更新模式控制信號和BHT更新控制(BHTUPDATE)信號。與門72的輸出端產(chǎn)生一個(gè)BHT62的寫入允許信號(標(biāo)為WE)。當(dāng)更新模式和BHT更新這兩個(gè)控制信號都被認(rèn)定時(shí),轉(zhuǎn)移完成單元64就可以將一個(gè)新的轉(zhuǎn)移狀態(tài)寫入BHT62。轉(zhuǎn)移完成單元64在轉(zhuǎn)移指令的完成階段通過認(rèn)定BHT更新控制信號有效和分別將轉(zhuǎn)移地址和新轉(zhuǎn)移狀態(tài)加到BHT地址和新轉(zhuǎn)移狀態(tài)的數(shù)據(jù)通路的操作將一個(gè)新的轉(zhuǎn)移狀態(tài)寫入BHT62。
在BHT更新的靜態(tài)轉(zhuǎn)移預(yù)測模式,轉(zhuǎn)移預(yù)測邏輯單元70通過轉(zhuǎn)移指令的數(shù)據(jù)通路接收這條轉(zhuǎn)移指令本身的一位或幾位。在本實(shí)施例中,用兩位在靜態(tài)轉(zhuǎn)移預(yù)測模式對轉(zhuǎn)移指令進(jìn)行預(yù)測。其中一位是符號位,一般指示轉(zhuǎn)移地址計(jì)算器74應(yīng)該加兩個(gè)數(shù)來產(chǎn)生取指地址還是減兩個(gè)數(shù)來產(chǎn)生取指地址(向前轉(zhuǎn)移或向回轉(zhuǎn)移)。第二位是轉(zhuǎn)移預(yù)測位,指示是否應(yīng)該轉(zhuǎn)移。轉(zhuǎn)移預(yù)測位的邏輯狀態(tài)和產(chǎn)生的作用之間的關(guān)系在符號位被觸發(fā)相反。無論如何,符號位和轉(zhuǎn)移預(yù)測位解碼成一個(gè)單個(gè)轉(zhuǎn)移/不轉(zhuǎn)移位。如果這單個(gè)轉(zhuǎn)移/不轉(zhuǎn)移位邏輯上相當(dāng)于第一狀態(tài),則轉(zhuǎn)移預(yù)測邏輯單元70將選擇由順序地址計(jì)算器72產(chǎn)生的地址。如果這單個(gè)轉(zhuǎn)移/不轉(zhuǎn)移位邏輯上相當(dāng)于第二狀態(tài),則轉(zhuǎn)移預(yù)測邏輯單元70將選擇由轉(zhuǎn)移地址計(jì)算器74產(chǎn)生的地址。轉(zhuǎn)移預(yù)測邏輯單元70在這個(gè)模式也認(rèn)定更新模式控制信號有效。
在BHT不更新的靜態(tài)轉(zhuǎn)移預(yù)測模式,轉(zhuǎn)移預(yù)測邏輯單元70的工作情況與在BHT更新的靜態(tài)轉(zhuǎn)移預(yù)測模式相同,只是在這個(gè)模式不使更新模式控制信號有效,因而轉(zhuǎn)移完成單元52不能更新BHT62。
轉(zhuǎn)移送指/執(zhí)行單元50具有某些對于所有這三種轉(zhuǎn)移預(yù)測模式來說是公共的工作特點(diǎn)。MUX68向數(shù)據(jù)通路PATH輸出未被選中的取指地址。轉(zhuǎn)移預(yù)測邏輯單元70向數(shù)據(jù)通路<CR>輸出轉(zhuǎn)移條件的假設(shè)值。BHT62向原轉(zhuǎn)移狀態(tài)數(shù)據(jù)通路輸出轉(zhuǎn)移指令的轉(zhuǎn)移狀態(tài)。如上所述,未被選中的取指地址、轉(zhuǎn)移條件的假設(shè)值、轉(zhuǎn)移指令的轉(zhuǎn)移狀態(tài)與轉(zhuǎn)移指令的地址一起都保存在轉(zhuǎn)移隊(duì)列52內(nèi),直至這轉(zhuǎn)移指令完成為止。在完成階段,轉(zhuǎn)移完成單元52確定轉(zhuǎn)移送指/執(zhí)行單元50是否作了正確的預(yù)測。此時(shí),如有必要,所存儲的這些數(shù)據(jù)值用來產(chǎn)生一個(gè)得到校正的取指地址和BHT62的一個(gè)新的轉(zhuǎn)移狀態(tài)。
圖4示出了一個(gè)典型的轉(zhuǎn)移指令的狀態(tài)轉(zhuǎn)移圖。每條轉(zhuǎn)移指令或轉(zhuǎn)移指令子集中的每條轉(zhuǎn)移指令都有一個(gè)為它規(guī)定的轉(zhuǎn)移狀態(tài)。這些轉(zhuǎn)移狀態(tài)存儲在BHT62中,用轉(zhuǎn)移指令的地址檢索。每條轉(zhuǎn)移指令的轉(zhuǎn)移狀態(tài)可以是四個(gè)狀態(tài)(標(biāo)為強(qiáng)不轉(zhuǎn)移、弱不轉(zhuǎn)移、弱轉(zhuǎn)移和強(qiáng)轉(zhuǎn)移)中的一個(gè)也僅是一個(gè)狀態(tài)。數(shù)據(jù)處理機(jī)10復(fù)位時(shí),使各轉(zhuǎn)移狀態(tài)分別設(shè)置在相應(yīng)的預(yù)定轉(zhuǎn)移狀態(tài)。以后,轉(zhuǎn)移完成單元52在每條具體轉(zhuǎn)移指令完成時(shí)就修改這條具體轉(zhuǎn)移指令的轉(zhuǎn)移狀態(tài)。
如果一條轉(zhuǎn)移指令的轉(zhuǎn)移狀態(tài)是強(qiáng)不轉(zhuǎn)移或弱不轉(zhuǎn)移,則轉(zhuǎn)移送指/執(zhí)行單元50就預(yù)測這條轉(zhuǎn)移指令不會引起轉(zhuǎn)移。如果一條轉(zhuǎn)移指令的轉(zhuǎn)移狀態(tài)是強(qiáng)轉(zhuǎn)移或弱轉(zhuǎn)移,則轉(zhuǎn)移送指/執(zhí)行單元50預(yù)測這條轉(zhuǎn)移指令會引起轉(zhuǎn)移。如上所述,轉(zhuǎn)移完成單元52在一條轉(zhuǎn)移指令完成后將改變這條轉(zhuǎn)移指令的轉(zhuǎn)移狀態(tài)。
如果一條轉(zhuǎn)移指令的轉(zhuǎn)移狀態(tài)對應(yīng)于強(qiáng)不轉(zhuǎn)移,而指令執(zhí)行結(jié)果卻是采取了轉(zhuǎn)移,則轉(zhuǎn)移完成單元52就將這個(gè)轉(zhuǎn)移狀態(tài)改為弱不轉(zhuǎn)移。一條轉(zhuǎn)移指令處在強(qiáng)不轉(zhuǎn)移或弱不轉(zhuǎn)移狀態(tài),在指令完成時(shí)如果預(yù)測轉(zhuǎn)移條件與實(shí)際轉(zhuǎn)移條件不等,則判為采取轉(zhuǎn)移。否則,轉(zhuǎn)移完成單元52就將相同的轉(zhuǎn)移狀態(tài)—強(qiáng)不轉(zhuǎn)移寫入用轉(zhuǎn)移地址檢索的BHT入口。
如果一條指令的轉(zhuǎn)移狀態(tài)是弱不轉(zhuǎn)移,而指令執(zhí)行結(jié)果是采取了轉(zhuǎn)移,則轉(zhuǎn)移完成單元52就將這個(gè)轉(zhuǎn)移狀態(tài)改為弱轉(zhuǎn)移。然而,如果一條指令的轉(zhuǎn)移狀態(tài)是弱不轉(zhuǎn)移,而指令執(zhí)行結(jié)果也是不采取轉(zhuǎn)移,則轉(zhuǎn)移完成單元52就將轉(zhuǎn)移狀態(tài)改為強(qiáng)不轉(zhuǎn)移。一條轉(zhuǎn)移指令處在強(qiáng)不轉(zhuǎn)移或弱不轉(zhuǎn)移狀態(tài),在指令完成時(shí)如果預(yù)測轉(zhuǎn)移條件與實(shí)際條件相等,則判為不采取轉(zhuǎn)移。
如果一條指令的轉(zhuǎn)移狀態(tài)是對應(yīng)弱轉(zhuǎn)移,而指令執(zhí)行結(jié)果也是采取了轉(zhuǎn)移,則轉(zhuǎn)移完成單元52就將這個(gè)轉(zhuǎn)移狀態(tài)改為強(qiáng)轉(zhuǎn)移。一條轉(zhuǎn)移指令處在弱轉(zhuǎn)移或強(qiáng)轉(zhuǎn)移狀態(tài),在指令完成時(shí)如果預(yù)測轉(zhuǎn)移條件與實(shí)際轉(zhuǎn)移條件相等,則判為采取轉(zhuǎn)移。然而,如果一條指令的轉(zhuǎn)移狀態(tài)是對應(yīng)弱轉(zhuǎn)移,而指令執(zhí)行結(jié)果卻是不采取轉(zhuǎn)移,則轉(zhuǎn)移完成單元52就將這個(gè)轉(zhuǎn)移狀態(tài)改為弱不轉(zhuǎn)移。一條轉(zhuǎn)移指令處在弱轉(zhuǎn)移或強(qiáng)轉(zhuǎn)移狀態(tài),在指令完成時(shí)如果預(yù)測轉(zhuǎn)移條件與實(shí)際轉(zhuǎn)移條件不等,則判為不采取轉(zhuǎn)移。
如果一條指令的轉(zhuǎn)移狀態(tài)是對應(yīng)強(qiáng)轉(zhuǎn)移,而指令執(zhí)行結(jié)果卻是不采取轉(zhuǎn)移,則轉(zhuǎn)移完成單元52就將這個(gè)轉(zhuǎn)移狀態(tài)改為弱轉(zhuǎn)移。否則,轉(zhuǎn)移完成單元52將相同的轉(zhuǎn)移狀態(tài)—強(qiáng)轉(zhuǎn)移寫入用轉(zhuǎn)移地址檢索的BHT入口。
雖然以上結(jié)合具體實(shí)施例對本發(fā)明作了說明,但對于熟悉該技術(shù)的人員來說,在此基礎(chǔ)上的一些改動(dòng)和完善是很顯然的。例如,本發(fā)明可以結(jié)合到傳統(tǒng)上歸為復(fù)雜指令系統(tǒng)計(jì)算機(jī)(CISC機(jī))的數(shù)據(jù)處理機(jī)中。此外,某些功能單元在一些實(shí)施例中可以省去或劃重新定位到數(shù)據(jù)處理機(jī)10的其他區(qū)域。因此可以理解,本發(fā)明包括了所有不背離所附權(quán)利要求所規(guī)定的本發(fā)明的精神實(shí)質(zhì)和保護(hù)范圍的各種改型。
權(quán)利要求
1.一種具有轉(zhuǎn)移預(yù)測的數(shù)據(jù)處理機(jī),其特征是所述數(shù)據(jù)處理機(jī)包括根據(jù)一條轉(zhuǎn)移指令的地址產(chǎn)生一個(gè)第一取指地址的第一轉(zhuǎn)移計(jì)算電路;根據(jù)這條轉(zhuǎn)移指令產(chǎn)生一個(gè)第二取指地址的第二轉(zhuǎn)移計(jì)算電路,這條轉(zhuǎn)移指令的結(jié)果是根據(jù)一個(gè)條件預(yù)測的;存儲一個(gè)轉(zhuǎn)移狀態(tài)組的第一存儲裝置,這個(gè)轉(zhuǎn)移狀態(tài)組的各轉(zhuǎn)移狀態(tài)分別與一個(gè)包括這條轉(zhuǎn)移指令在內(nèi)的轉(zhuǎn)移指令組的不同的(differing)轉(zhuǎn)移指令關(guān)聯(lián);以及與第一、第二轉(zhuǎn)移計(jì)算電路和第一存儲裝置連接的轉(zhuǎn)移預(yù)測電路,該電路在第一工作模式根據(jù)轉(zhuǎn)移指令而在第二工作模式根據(jù)轉(zhuǎn)移狀態(tài)組中一個(gè)相應(yīng)轉(zhuǎn)移狀態(tài)從第一、第二取指地址中選擇一個(gè)取指地址輸出。
2.權(quán)利要求1所提出的數(shù)據(jù)處理機(jī),其特征是所述數(shù)據(jù)處理機(jī)還包括與第一存儲裝置和轉(zhuǎn)移預(yù)測電路連接的轉(zhuǎn)移完成電路,該電路根據(jù)接收條件的情況輸出一個(gè)第三取指地址,這個(gè)第三取指地址邏輯上等于未被轉(zhuǎn)移預(yù)測電路輸出的第一或第二取指地址中的一個(gè)。
3.權(quán)利要求2所提出的數(shù)據(jù)處理機(jī),其中所述轉(zhuǎn)移完成電路的特征在于產(chǎn)生轉(zhuǎn)移狀態(tài)組的電路,轉(zhuǎn)移狀態(tài)組的每個(gè)轉(zhuǎn)移狀態(tài)對應(yīng)轉(zhuǎn)移狀態(tài)組的原先存儲的一個(gè)相應(yīng)轉(zhuǎn)移狀態(tài)和條件;其中轉(zhuǎn)移預(yù)測電路還包括在第三模式將轉(zhuǎn)移狀態(tài)組存儲在第一存儲裝置內(nèi)而在第四模式不存儲轉(zhuǎn)移狀態(tài)組的電路。
4.權(quán)利要求3所提出的數(shù)據(jù)處理機(jī),其特征是所述數(shù)據(jù)處理機(jī)還包括根據(jù)第一轉(zhuǎn)移指令的地址產(chǎn)生一個(gè)第四取指地址的第三轉(zhuǎn)移計(jì)算電路;根據(jù)一個(gè)輸入地址輸出一組地址中的一個(gè)地址或不輸出地址的第二存儲裝置,這組地址的各地址分別與一組地址索引的不同的地址索引關(guān)聯(lián),而這個(gè)輸入地址等于第一轉(zhuǎn)移指令的地址的一部分;以及與第三轉(zhuǎn)移計(jì)算電路和第二存儲裝置連接的輸出電路,該電路在第二存儲裝置匹配失敗時(shí)輸出第四取指地址,而在第二存儲裝置匹配成功時(shí)輸出地址組中的一個(gè)或不輸出地址。
5.權(quán)利要求2所提出的數(shù)據(jù)處理機(jī),其特征是所述數(shù)據(jù)處理機(jī)還包括根據(jù)第一轉(zhuǎn)移指令的地址產(chǎn)生一個(gè)第四取指地址的第三轉(zhuǎn)移計(jì)算電路;根據(jù)一個(gè)輸入地址輸出一組地址中的一個(gè)地址或不輸出地址的第三存儲裝置,這組地址的各地址與一組地址索引的不同的地址索引關(guān)聯(lián),而這個(gè)輸入地址等于第一轉(zhuǎn)移指令的地址的一部分;以及與第三轉(zhuǎn)移計(jì)算電路和第二存儲裝置連接的輸出電路,該電路在第二存儲裝置匹配失敗時(shí)輸出第四取指地址,而在第二存儲裝置匹配成功時(shí)輸出地址組中的一個(gè)或不輸出地址。
6.一種操作數(shù)據(jù)處理機(jī)的方法,其特征是所述方法包括下列各步在第一時(shí)間段接收數(shù)據(jù)處理機(jī)的第一和第二轉(zhuǎn)移計(jì)算電路中的一條第一轉(zhuǎn)移指令;在第一轉(zhuǎn)移計(jì)算電路中根據(jù)第一轉(zhuǎn)移指令的地址產(chǎn)生一個(gè)第一取指地址;在第二轉(zhuǎn)移計(jì)算電路中根據(jù)第一轉(zhuǎn)移指令產(chǎn)生一個(gè)第二取指地址;通過與第一和第二轉(zhuǎn)移計(jì)算電路連接的轉(zhuǎn)移預(yù)測電路根據(jù)第一轉(zhuǎn)移指令從第一和第二取指地址中選擇一個(gè)取指地址;讀取由選中的第一或第二取指地址指向的指令;在第二時(shí)間段接收第一和第二轉(zhuǎn)移計(jì)算電路中的一條第二轉(zhuǎn)移指令;在第一轉(zhuǎn)移計(jì)算電路中根據(jù)第二轉(zhuǎn)移指令的地址產(chǎn)生一個(gè)第三取指地址;在第二轉(zhuǎn)移計(jì)算電路中根據(jù)第二轉(zhuǎn)移指令產(chǎn)生一個(gè)第四取指地址;通過轉(zhuǎn)移預(yù)測電路根據(jù)一個(gè)轉(zhuǎn)移狀態(tài)組中的一個(gè)第一選中轉(zhuǎn)移狀態(tài)從第三和第四取指地址中選擇一個(gè)取指地址,轉(zhuǎn)移狀態(tài)組存儲在第一存儲裝置內(nèi),轉(zhuǎn)移狀態(tài)組的各轉(zhuǎn)移狀態(tài)分別與一個(gè)包括第二轉(zhuǎn)移指令在內(nèi)的轉(zhuǎn)移指令組的不同的一個(gè)轉(zhuǎn)移指令關(guān)聯(lián);以及讀取由選中的第三或第四取指地址指向的指令。
7.權(quán)利要求6所提出的方法,其特征是其中所述從第三和第四取指地址中選擇一個(gè)取指地址這一步要早于從第一和第二取指地址中選擇一個(gè)取指地址這一步。
8.權(quán)利要求7所提出的方法,其特征是其中所述從第三和第四取指地址中選擇一個(gè)取指地址這一步包括產(chǎn)生一個(gè)第一轉(zhuǎn)移狀態(tài);以及將第一轉(zhuǎn)移狀態(tài)存儲在第一存儲裝置內(nèi)。
9.權(quán)利要求8所提出的方法,其特征是所述方法還包括下列各步在第一時(shí)間段后的第三時(shí)間段接收第一和第二轉(zhuǎn)移計(jì)算電路中的一條第三轉(zhuǎn)移指令;在第一轉(zhuǎn)移計(jì)算電路中根據(jù)第三轉(zhuǎn)移指令的地址產(chǎn)生一個(gè)第五取指地址;在第二轉(zhuǎn)移計(jì)算電路中根據(jù)第三轉(zhuǎn)移指令產(chǎn)生一個(gè)第六取指地址;根據(jù)轉(zhuǎn)移狀態(tài)組中的一個(gè)第二選中轉(zhuǎn)移狀態(tài)從第五和第六取指地址中選擇一個(gè)取指地址;讀取由選中的第五或第六取指地址指向的指令;產(chǎn)生一個(gè)第二轉(zhuǎn)移狀態(tài);以及將第二轉(zhuǎn)移狀態(tài)存儲在第一存儲裝置內(nèi)。
10.權(quán)利要求9所提出的方法,其特征是其中所述從第一和第二取指地址中選擇一個(gè)取指地址這一步包括產(chǎn)生一個(gè)轉(zhuǎn)移狀態(tài);以及將這個(gè)轉(zhuǎn)移狀態(tài)存儲在第一存儲裝置內(nèi)。
11.權(quán)利要求10所提出的方法,其特征是所述方法還包括下列各步在第一時(shí)間段前的第四時(shí)間段在一個(gè)第五轉(zhuǎn)移計(jì)算電路中根據(jù)第一轉(zhuǎn)移指令的地址產(chǎn)生一個(gè)第七取指地址;根據(jù)第一轉(zhuǎn)移指令的地址從一個(gè)第三存儲裝置輸出一組地址中的一個(gè)地址和一組地址標(biāo)記中的一個(gè)地址標(biāo)記;根據(jù)地址標(biāo)記組的這個(gè)地址標(biāo)記與第一轉(zhuǎn)移指令的地址的邏輯比較從第七取指地址和地址組的這個(gè)地址中選擇一個(gè);以及讀取由選中的第七取指地址或地址組的這個(gè)地址指向的指令。
12.權(quán)利要求8所提出的方法,其特征是其中所述從第一和第二取指地址中選擇一個(gè)取指地址這一步包括產(chǎn)生一個(gè)轉(zhuǎn)移狀態(tài);以及將這個(gè)轉(zhuǎn)移狀態(tài)存儲在第一存儲裝置內(nèi)。
13.權(quán)利要求6所提出的方法,其特征是其中所述從第一和第二取指地址中選擇一個(gè)取指地址這一步包括產(chǎn)生一個(gè)轉(zhuǎn)移狀態(tài);以及將這個(gè)轉(zhuǎn)移狀態(tài)存儲在第一存儲裝置內(nèi)。
全文摘要
數(shù)據(jù)處理機(jī)具有預(yù)測條件轉(zhuǎn)移指令的轉(zhuǎn)移預(yù)測電路。轉(zhuǎn)移預(yù)測電路可以工作在兩種由用戶選擇的模式(1)動(dòng)態(tài)轉(zhuǎn)移預(yù)測模式;或(2)靜態(tài)轉(zhuǎn)移預(yù)測模式。在動(dòng)態(tài)轉(zhuǎn)移預(yù)測模式,預(yù)測根據(jù)各轉(zhuǎn)移指令的轉(zhuǎn)移狀態(tài)進(jìn)行。每個(gè)轉(zhuǎn)移狀態(tài)可以在數(shù)據(jù)處理機(jī)確定預(yù)測是否正確后加以更新。在靜態(tài)轉(zhuǎn)移預(yù)測模式,轉(zhuǎn)移預(yù)測根據(jù)嵌在轉(zhuǎn)移指令內(nèi)的一位或幾位進(jìn)行。數(shù)據(jù)處理機(jī)工作在這個(gè)第二模式期間可以根據(jù)用戶需要更新或不更新各轉(zhuǎn)移指令的轉(zhuǎn)移狀態(tài)。
文檔編號G06F9/38GK1117618SQ94113738
公開日1996年2月28日 申請日期1994年10月31日 優(yōu)先權(quán)日1993年11月2日
發(fā)明者保爾·C·羅斯芭馳, 大衛(wèi)·S·萊咸坦 申請人:摩托羅拉公司