專利名稱:計算機系統(tǒng)內(nèi)部處理指令的裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機系統(tǒng),特別是計算機系統(tǒng)內(nèi)部處理指令的裝置。
背景技術(shù):
通常,在計算機內(nèi)部,執(zhí)行從指令存儲器中取出指令,存儲到緩沖器內(nèi),并向1個或多個中央處理裝置(CPU)傳送。圖10A~圖10C是1次最多可以執(zhí)行4個指令的現(xiàn)有的系統(tǒng)。其中,各個指令按照程序的順序標以字母。如圖10A所示的那樣,指令緩沖器10內(nèi)含有多個指令串14A-C,各指令串包含4個指令。存儲在指令緩沖器10內(nèi)的指令為了執(zhí)行它們,在分配發(fā)送(以下稱為調(diào)度)之前,裝入由4個寄存器構(gòu)成的調(diào)度寄存器內(nèi)。當(dāng)4個指令從調(diào)度寄存器18同時被調(diào)度時,另外的4個指令從指令緩沖器10裝入調(diào)度寄存器18內(nèi),繼續(xù)進行處理。但是,由于資源的競爭及其他原因,有時不能同時調(diào)度4個指令。圖10B是同時只調(diào)度2個指令的情況。在現(xiàn)有的計算機系統(tǒng)中,不論在何時,由于對可裝入指令類型及代碼配置的限制,在從指令緩沖器10再次將指令向調(diào)度寄存器18傳送之前,系統(tǒng)必須等待到調(diào)度寄存器18成為全空狀態(tài)。結(jié)果,在該例中,在下1個循環(huán)中最多只能調(diào)度2個指令(C、D),然后,調(diào)度寄存器18再行裝入(4個指令E、F、G及H)。特別是幾個新的指令(例如E、F)在調(diào)度先行的指令集(A、B)之后,如果考慮也可以將它們與留在調(diào)度寄存器內(nèi)的指令(C、D)一起進行調(diào)度,則對這些新的指令向調(diào)度寄存器18裝入的限制,將大大縮小該系統(tǒng)的功能。
對現(xiàn)有的計算機系統(tǒng)的其他限制,關(guān)系到把處理轉(zhuǎn)到指令存儲器后續(xù)指令以外的指令那樣的轉(zhuǎn)移指令的處理。通常,指令取出之后,按照具有多個階段的流水線順序進行處理。因此,通常在流水線內(nèi)處于下一個序號的指令與轉(zhuǎn)移指令接續(xù)。例如,當(dāng)整個流水線的后面階段滿足轉(zhuǎn)移條件時,便中止執(zhí)行指令,轉(zhuǎn)移指令的后續(xù)指令在流水線內(nèi)部必須無效。并且,必須從指令存儲器取出適當(dāng)?shù)闹噶?,從流水線的開頭開始進行處理。因此,從滿足轉(zhuǎn)移條件開始到開始執(zhí)行適當(dāng)?shù)闹噶睿枰欢ǖ臅r間。
發(fā)明內(nèi)容
本發(fā)明的目的旨在提供一種在計算機內(nèi)部處理指令的裝置,該裝置不論剛剛調(diào)度的指令數(shù)和指令的類型及其配置如何,總是能夠調(diào)度4個指令。
在本發(fā)明的一個實施例中,計算機系統(tǒng)具有第1和第2指令存儲電路,各存儲電路為了并行輸出而存儲著N個指令。與第1指令存儲電路連接的指令調(diào)度電路調(diào)度第1指令存儲電路存儲的L個指令,這里,L等于或小于N。與第1和第2指令存儲電路連接的指令裝入電路在從第1指令存儲電路調(diào)度了L個指令之后、以及進一步從第1指令存儲電路調(diào)度別的指令之前,將L個指令從第2指令存儲電路裝入第1指令存儲電路。
本發(fā)明的另一個目的在于提供一種在計算機系統(tǒng)內(nèi)部處理指令的裝置,該裝置在取出指令的時刻進行轉(zhuǎn)移的預(yù)測,通過立即取出轉(zhuǎn)移目的指令,在執(zhí)行轉(zhuǎn)移指令之后準備轉(zhuǎn)移目的指令。
在本發(fā)明的一個實施例中,指令存儲器存儲著多個指令串,轉(zhuǎn)移存儲器存儲著多個轉(zhuǎn)移預(yù)測入口。各轉(zhuǎn)移預(yù)測入口含有執(zhí)行指令存儲器的轉(zhuǎn)移指令時用于預(yù)測由該轉(zhuǎn)移指令指定的轉(zhuǎn)移是否成功的信息。各轉(zhuǎn)移預(yù)測入口包括表示含有轉(zhuǎn)移成功時執(zhí)行的轉(zhuǎn)移目的指令的行所具有的轉(zhuǎn)移目的地址的轉(zhuǎn)移目的字段、表示轉(zhuǎn)移目的指令在由轉(zhuǎn)移目的地址指示的行內(nèi)位于何處的目的字段和表示轉(zhuǎn)移指令在與轉(zhuǎn)移目的地址對應(yīng)的行內(nèi)位于何處的源字段。計數(shù)器保持用于使指令存儲器定址的地址值,增量電路用于在正常操作時為將指令存儲器內(nèi)的行順序定址而增加計數(shù)器的地址值。當(dāng)由指令存儲器內(nèi)的轉(zhuǎn)移指令指示的轉(zhuǎn)移由轉(zhuǎn)移預(yù)測入口進行了該轉(zhuǎn)移指令執(zhí)行時成功的預(yù)測時,計數(shù)器加載電路就將轉(zhuǎn)移目的地址裝入計數(shù)器內(nèi)。這樣,在包含轉(zhuǎn)移指令的行之后,便取出包含轉(zhuǎn)移目的指令的行,并進行并行運行。無效化電路用于使位于轉(zhuǎn)移指令之后并且包含該轉(zhuǎn)移指令的行所包含的指令和位于轉(zhuǎn)移目的指令之前并且包含該轉(zhuǎn)移目的指令的行所包含的指令無效。
為了達到上述目的,本發(fā)明的在計算機系統(tǒng)內(nèi)部處理指令的裝置具有第1及第2指令存儲電路、指令調(diào)度電路和指令裝入電路。第1及第2指令存儲電路用于分別存儲可以并行輸出的N個指令;指令調(diào)度電路與上述第1指令存儲電路連接,用于調(diào)度上述第1指令存儲電路存儲的L個指令,并設(shè)L等于或小于上述N;指令裝入電路與上述第1及第2指令存儲電路連接,用于在L個指令從上述第1指令存儲電路中調(diào)度出之后并且在別的指令從上述第1指令存儲電路中調(diào)度出之前將L個指令從上述第2指令存儲電路裝入上述第1指令存儲電路。
另外,本發(fā)明的在計算機系統(tǒng)內(nèi)部處理指令的另一種裝置具有指令存儲電路、指令調(diào)度電路、指令排隊電路和指令裝入電路。指令存儲電路用于存儲可以并行輸出的N個指令;指令調(diào)度電路與上述指令存儲電路連接,用于調(diào)度上述指令存儲電路存儲的L個指令,并設(shè)L等于或小于N;指令排隊器用于從指令存儲器內(nèi)存儲N個指令的M個行;指令裝入電路與上述指令存儲電路和上述指令排隊器連接,用于在L個指令從上述指令存儲電路中調(diào)度出之后并且別的指令從上述指令存儲電路中調(diào)度出之前將L個指令從上述指令排隊器裝入到上述指令存儲電路。
另外,本發(fā)明的又一種在計算機系統(tǒng)內(nèi)部處理指令的裝置具有指令存儲器和轉(zhuǎn)移存儲器。指令存儲器用于存儲多個指令串;轉(zhuǎn)移存儲器用于在執(zhí)行指令存儲器的轉(zhuǎn)移指令時存儲多個含有用于預(yù)測由該轉(zhuǎn)移指令指定的轉(zhuǎn)移是否成功的信息的轉(zhuǎn)移預(yù)測入口。
按照本發(fā)明,不論剛剛調(diào)度的指令數(shù)和指令的類型及其配置如何,總是可以調(diào)度4個指令。
另外,在指令取出的時刻進行轉(zhuǎn)移的預(yù)測,通過立即取出轉(zhuǎn)移目的指令,在執(zhí)行轉(zhuǎn)移指令之后就準備轉(zhuǎn)移目的指令。
圖1是本發(fā)明實施例的計算機系統(tǒng)中的取出和調(diào)度的框圖。
圖2是本發(fā)明的實施例用于進行取出和調(diào)度的裝置的框圖。
圖3是表示圖2所示的指令排隊電路的動作的框圖。
圖4是本發(fā)明的另一個實施例用于進行取出和調(diào)度的裝置的框圖。
圖5是本發(fā)明的實施例用于進行轉(zhuǎn)移預(yù)測的裝置的框圖。
圖6是表示圖4所示的轉(zhuǎn)移高速緩沖器入口的實施例的框圖。
圖7是本發(fā)明實施例的指令流水線取出(F)階段的框圖。
圖8是本發(fā)明實施例的指令流水線譯碼(D)階段和地址生成(AD)階段的框圖。
圖9是本發(fā)明實施例的指令流水線執(zhí)行(E)階段和寫(W)階段的框圖。
圖10是現(xiàn)有的計算機系統(tǒng)的取出和調(diào)度的框圖。
具體實施例方式
圖1A-D是本發(fā)明實施例的計算機系統(tǒng)的指令的取出和調(diào)度的框圖。和圖10A-D所示的例子一樣,這里也假定開始調(diào)度2個指令(A、B)。但是,與圖10A-D所示的例子不同的是如圖1B所示的那樣,調(diào)度出的2個指令立刻置換為后續(xù)的2個指令(E、F)。因此,在下一個時鐘周期內(nèi),就可以調(diào)度4個指令。另外,為了表示按程序順序接在先行調(diào)度的指令后面的指令位置,使用了指針26。這里,如果如圖1C所示的那樣在下一個時鐘周期內(nèi)調(diào)度3個指令時,適當(dāng)?shù)募拇嫫?2A、22C、22D有效,由圖1B的指針26所示的指令和2個后續(xù)指令一起開放。之后,調(diào)度寄存器18按照程序順序利用后續(xù)的指令緩沖器10的3個指令進行裝入。
這里,為了向調(diào)度寄存器18供給指令,應(yīng)注意需要指令緩沖器的2個指令串。例如,如圖1C所示的那樣,指令串14C將指令(G、H)供給調(diào)度寄存器18,指令串14B將指令(I)供給調(diào)度寄存器18。如1個指令串有4個指令,則將包含應(yīng)向調(diào)度寄存器18裝入的下一個指令的指令串稱為“開頭四組”,將包含應(yīng)完成傳送處理、同時應(yīng)向調(diào)度寄存器18裝入的指令的下一個指令串稱為“后續(xù)四組”。當(dāng)開頭的四組經(jīng)傳送處理成為空的時候,如圖1D所示的那樣,B串的內(nèi)容更新。在圖1D中,2個指令(F、G)調(diào)度后,另外2個指令(J、K)裝入到該位置上。
圖2是本發(fā)明實施例進行指令的取出和調(diào)度的裝置30的框圖。裝置30包括指令高速緩沖器34,該緩沖存儲器34具有由通信路徑38的地址值所示的指令構(gòu)成的多個指令串。在本實施例中,各指令串存儲著4個32位指令,通過通信路徑46將1個指令串的所有指令傳送給預(yù)譯碼電路42。預(yù)譯碼電路將4個指令進行部分地譯碼,并通過通信路徑54將該部分地譯碼后的4個指令傳送給指令排隊器50,通過排隊旁路路徑62向多路轉(zhuǎn)換器58A-D調(diào)度。
指令排隊器50包括按各指令串的各指令設(shè)置的4個排隊部分66A-D。由于4個排隊部分都具有相同的結(jié)構(gòu),所有,只示出了排隊部分66A的內(nèi)部。排隊部分66A包括多個(例如6個)串聯(lián)連接的指令緩沖器IBUF0-IBUF5。各指令緩沖器通過對應(yīng)的多路轉(zhuǎn)換輸入路徑70A-F與多路轉(zhuǎn)換器68連接。多路轉(zhuǎn)換器68響應(yīng)通過信號線72A輸入的信號,選擇指令緩沖器IBUF0-IBUF5中的1個指令,通過通信路徑74A將所選擇的這條指令傳送給調(diào)度多路轉(zhuǎn)換器58A。存儲在寄存器22A內(nèi)的指令通過反饋通信路徑7 6A傳送給調(diào)度多路轉(zhuǎn)換器58A的輸入端。調(diào)度多路轉(zhuǎn)換器58A響應(yīng)通過Q0MXSEL信號線80輸入的信號,從多路轉(zhuǎn)換器68的輸出、排隊旁路62或反饋通信路徑76A中選擇1個指令,通過通信路徑82A向寄存器22A傳送。寄存器22A響應(yīng)加在其上的時鐘信號,裝入接收的值,如果該指令可行,將進行調(diào)度。另外,時鐘寄存器分別用各寄存器左側(cè)的三角形表示。
排隊部分66B-D分別響應(yīng)通過信號線72B-D接收的信號,從這些串聯(lián)連接的1個緩沖部分中選擇指令,分別通過通信路徑74B-C將所選擇的指令向多路轉(zhuǎn)換器58B-D調(diào)度。調(diào)度多路轉(zhuǎn)換器58B-D將把根據(jù)通過Q1MXSEL-Q3MXSEL信號線接收的信號所選擇的指令,通過通信路徑82B-D分別傳送給各寄存器22B-D。
裝置30按照如下方式選擇將哪個指令向調(diào)度寄存器18調(diào)度。開始,指令排隊器50是空的,當(dāng)從指令高速緩沖器34內(nèi)取出1個指令串時,調(diào)度多路轉(zhuǎn)換器58A-D就從排隊旁路62中選擇指令。并且,調(diào)度指令,并從指令高速緩沖器34中讀出新的指令串。
通常,新的指令串在各時鐘周期從指令高速緩沖器34讀出。如果在每個時鐘周期讀出4個指令,則調(diào)度寄存器便總是從排隊旁路路徑62裝入。但是,不論在何處,在各周期都可以調(diào)度到0~4個指令。因此,如果不是調(diào)度所有的指令,就可以根據(jù)該時刻所調(diào)度的指令數(shù)而從排隊旁路路徑62只裝入寄存器22A-D中的某幾個。因此,上次讀出后剩下的指令串就分別從各排隊部分66A-D的IBUF0裝入,并從指令高速緩沖器34讀出新的指令串。例如,在開始的周期內(nèi)調(diào)度2個指令時,寄存器22A-B就按照排隊旁路路徑62的指令裝入,相同的指令通過反饋通信路徑76C-D裝入寄存器22C-D,上次讀出的指令裝入排隊部66A-D的IBUF0,新的指令串從指令高速緩沖器34讀出。在下一個時鐘周期內(nèi),只調(diào)度1個指令時,排隊部66C的IBUF0的指令裝入寄存器22C,相同的指令通過反饋通信路徑76A、76B、76D再次裝入寄存器22A、22B、22D,存儲在排隊部66A-D的各IBUF0內(nèi)的指令串進入各排隊部的IBUF1,上次讀出的指令串裝入排隊部66A-D的IBUF0,新的指令串從指令高速緩沖器34讀出。指令串在排隊部66A-D內(nèi)前進,直至緩沖器填滿為止。此時,裝置停止向以上的排隊部分裝入指令。利用這一方法將指令的預(yù)取出動作與調(diào)度動作分離。
為了控制指令排隊緩沖器50的動作,RDPTR寄存器86保持I-STATE[40]的值。STATE[42]用于決定各排隊部分66A-D的緩沖器IBUF0-IBUF5的某一個將下一個指令供給寄存器22A-D,STATE[10]的功能是用作圖1A-1C所示的指針26(模4計數(shù)器),表示接著調(diào)度哪個指令。F-INST寄存器90保持INST-CONSUME的值,表示每個周期內(nèi)消費多少指令(即,不論有效的排隊寄存器時鐘的總合如何或有效無效,從調(diào)度寄存器18調(diào)度的指令數(shù)的總合)。該INST-CONSUME在后面與圖8一起說明。該INST-CONSUME由加法器92與STATE[40]進行加法運算后,表示應(yīng)調(diào)度的指令。STATE[42]每當(dāng)裝入調(diào)度寄存器18所使用的指令串排隊前進時遞增。STATE[40]更新后的值返回RDPTR寄存器86,進行裝入,并通過通信路徑98A、98B傳送給排隊器MUX(多路轉(zhuǎn)換)選擇電路98。如果令STATE[42]=“101”(=5),則指令緩沖器是滿的,裝置停止向由此以上的排隊部分裝入指令。
排隊器MUX選擇電路98根據(jù)STATE[42]和STATE[10]的值將后面的(按程序順序)連續(xù)的指令傳送給調(diào)度寄存器18。圖3和表1對于STATE[10]的不同值給出了各排隊部分66A-D的哪個緩沖器將后面的指令傳送給對應(yīng)的寄存器22A-D。
表1
STATE[10]Q0MXSEL Q1MXSEL Q2MXSEL Q3MXSEL0STATE[42] STATE[42]STATE[42]STATE[42]1STATE[42]-1 STATE[42]STATE[42]STATE[42]2STATE[42]-1 STATE[42]-1 STATE[42]STATE[42]3STATE[42]-1 STATE[42]-1 STATE[42]-1 STATE[42]因此,在STATE[10]=2時,如果STATE[42]=3,則寄存器22C-22D給出開頭的四組(IBUF3)的最后2個指令,寄存器22A-22B給出后續(xù)的四組(IBUF2)的開始的2個指令。
這里記載的用于指令取出和調(diào)度的裝置,根據(jù)需要進行適當(dāng)?shù)男拚?,可以在很多環(huán)境下使用。例如,設(shè)整數(shù)、存儲器、定點用的指令存儲在指令高速緩沖器34內(nèi),則它們有可能包含在1個指令串內(nèi)。如果有資源競爭問題,如對指令或指令的類型(例如定點指令)有數(shù)據(jù)依賴關(guān)系,則這些指令將向其他排隊部分調(diào)度,因此,由于資源競爭及數(shù)據(jù)的依賴關(guān)系,便成為不停止其他指令的調(diào)度的待機狀態(tài)。
圖4是本發(fā)明的另一個實施例用于從圖2的調(diào)度寄存器18進行想要預(yù)先調(diào)度的定點指令的取出和調(diào)度裝置104的框圖。一看便知裝置104除了為處理從整數(shù)寄存器裝入的定點寄存器的數(shù)據(jù)或整數(shù)存儲數(shù)據(jù)而與指令一起存儲數(shù)據(jù)外,和圖2的裝置30類似。
在上述裝置中,在本發(fā)明的計算機系統(tǒng)中,也改良了指令的處理。因此,在指令取出的時刻預(yù)測轉(zhuǎn)移,并立即取出預(yù)測的轉(zhuǎn)移目的指令,在執(zhí)行轉(zhuǎn)移指令之后準備轉(zhuǎn)移目的指令。圖5是本發(fā)明用于轉(zhuǎn)移預(yù)測的裝置110的1個實施例的框圖。轉(zhuǎn)移高速緩沖器114用于預(yù)測存儲在指令高速緩沖器34內(nèi)的轉(zhuǎn)移指令的結(jié)果。例如,指令高速緩沖器34是16KB的直接映射高速緩沖器,則如上述那樣,每一個周期輸出4個指令。在本實施例中,轉(zhuǎn)移高速緩沖器114也是直接映射高速緩沖器,具有1K的入口(對于指令高速緩沖器34的4個指令,有1個入口)。指令高速緩沖器34和轉(zhuǎn)移高速緩沖器114通過輸入計數(shù)器116標志值(地址)的通信路徑38,按照流水線的取出階段進行并行存取。當(dāng)然,根據(jù)需要指令高速緩沖器34和轉(zhuǎn)移高速緩沖器114也可以按不同的地址進行存取。
圖6是轉(zhuǎn)移高速緩沖器114的采樣入口120和轉(zhuǎn)移預(yù)測的例子。入口120包括預(yù)測轉(zhuǎn)移是否成立的有效性字段124(0表示不預(yù)測,1表示進行預(yù)測)、作為轉(zhuǎn)移目的指令的指令高速緩沖器標志的標志字段128、表示包含該轉(zhuǎn)移指令的指令串內(nèi)應(yīng)執(zhí)行的最后指令位置的源字段(SRC)132和表示按照高速緩沖器標志取出的指令串內(nèi)的轉(zhuǎn)移目的指令位置的目的字段(DRC)134。
在本實施例中,各轉(zhuǎn)移指令實際上由2個指令串構(gòu)成。稱為開頭轉(zhuǎn)移指令的開始指令,計算轉(zhuǎn)移目的地和轉(zhuǎn)移條件。稱為延遲指令的下一個指令位于開頭轉(zhuǎn)移指令之后,實際上用于將程序的流向改變?yōu)檗D(zhuǎn)移目的指令。因此,源字段132如圖6所示的那樣,表示指令內(nèi)的延遲指令位置。
計數(shù)器116的地址值傳送給增量電路138。增量電路138使計數(shù)器的值增加4(因每個指令串有4個指令),并將增加后的值通過通信路徑144傳送給多路轉(zhuǎn)換器142。轉(zhuǎn)移高速緩沖器入口的標志字段128的值通過通信路徑148傳送給多路轉(zhuǎn)換器142。有效性字段124的值用于控制多路轉(zhuǎn)換器142的動作。因此,如果轉(zhuǎn)移預(yù)測成立(V=1),則在下一個周期內(nèi),指令高速緩沖器34就按指示字段128的值進行存取。如果轉(zhuǎn)移預(yù)測不成立(V=0),則指令高速緩沖器34按由增量電路138決定的下一個指令串進行存取。
源字段132的值通過“或”門電路150傳送給有效性掩模148。如果進行轉(zhuǎn)移預(yù)測,有效性掩模148就使位于該轉(zhuǎn)移的延遲指令之后的指令串的所有指令無效。這是因為這些指令在進行轉(zhuǎn)移時是不執(zhí)行的。例如,如圖6所示的那樣,當(dāng)延遲指令是指令串的第3個指令時,就使第4個指令無效。在下一個時鐘周期中,(包括所有成為無效的指令的)指令串傳送給指令高速緩沖器50和排隊旁路路徑62(圖2),目的字段的值裝入寄存器152,計數(shù)器116的值成為標志字段128的值,指令高速緩沖器34進行存取,取出包含預(yù)測過轉(zhuǎn)移目的指令的指令串。寄存器152的目的字段通過“或”門電路150傳送給有效性掩模148,使位于該指令串的轉(zhuǎn)移目的指令之前的指令無效。例如,轉(zhuǎn)移目的指令位于該指令串的第2個指令的位置時,有效性掩模148就使該指令串的開始的指令無效。該指令串傳送給指令排隊器50和排隊旁路路徑62。
在本實施例中,所有的轉(zhuǎn)移預(yù)測高速緩沖器入口都用0對有效性字段124進行初始化(轉(zhuǎn)移未進行預(yù)測)。當(dāng)開始執(zhí)行程序時,各轉(zhuǎn)移指令的結(jié)果通過設(shè)定適當(dāng)?shù)臉酥局?、源值和目的值,并使表示有效性的位?,(如果需要)用于更新轉(zhuǎn)移預(yù)測高速緩沖器入口。因此,轉(zhuǎn)移預(yù)測便在此后進行。如果上次成立的轉(zhuǎn)移此后不成立時,或者上次不成立的轉(zhuǎn)移此后成立時,(如后面說明的那樣)轉(zhuǎn)移預(yù)測高速緩沖器入口就更新為上述的情況(并且,取出正確的指令)。
調(diào)度寄存器18保持存儲在該處并位于轉(zhuǎn)移預(yù)測過的延遲指令之后的超級標量指令,防止轉(zhuǎn)移目的指令與現(xiàn)在的指令發(fā)生交錯。并且,當(dāng)2個轉(zhuǎn)移指令保持在調(diào)度寄存器18內(nèi)時,調(diào)度寄存器18就保持與第2個轉(zhuǎn)移對應(yīng)的超級標量指令,以使一次只執(zhí)行1個轉(zhuǎn)移指令。
圖7~圖9是表示本發(fā)明的指令流水線的要點的1個實施例的框圖,示出了轉(zhuǎn)移預(yù)測如何進行。這里,只要可能,作為參照序號都利用以前的序號。如所周知,調(diào)度寄存器18由指令存儲器和特征存儲器構(gòu)成。指令存儲器部分存儲著指令串(行),特征存儲器存儲著與指令存儲器的各指令串對應(yīng)的虛擬地址特征(和控制信息)。這里,只示出了指令高速緩沖器34的特征存儲器部分34A。特征存儲器部分34A存儲著應(yīng)用特定ID字段(asid[70])、指令高速緩沖器特征(tag[330]、對應(yīng)的虛擬地址的高34位)、表示有效性的位(V)和表示指令的地址空間的區(qū)域字段(r[10])。
圖7是指令流水線的取出(F)階段。計數(shù)器116A和計數(shù)器116B構(gòu)成將特征存儲器部分34A和轉(zhuǎn)移高速緩沖器114進行定址的主F階段程序計數(shù)器。作為特征存儲器部分34A的行的標志即計數(shù)器116的值(fpc[134])通過通信路徑38A傳送給特征存儲器部分34A和增量電路138。增量電路138將計數(shù)器值加1,并通過通信路徑144將增加后的值傳送給多路轉(zhuǎn)換器142A和多路轉(zhuǎn)換器142B。多路轉(zhuǎn)換器142A和多路轉(zhuǎn)換器142B通過通信路徑148從轉(zhuǎn)移高速緩沖器114接收標志字段,通過通信路徑160(如以下所示的那樣)接收修正地址。通信路徑160的值(pc-jam-bus[132])用于修正錯誤的轉(zhuǎn)移預(yù)測及高速緩沖器錯誤和其他錯誤。多路轉(zhuǎn)換器142B接收轉(zhuǎn)移高速緩沖器寫入地址(bcwdr[134])。用于更新轉(zhuǎn)移高速緩沖器114的數(shù)據(jù)(be-wdata[141])通過通信路徑168傳送給寄存器164。多路轉(zhuǎn)換器142A和142B選擇適當(dāng)?shù)牡刂?,分別傳送給計數(shù)器116A和116B。
寄存器172用于存儲表示計數(shù)器116A和116B是否按照由增量電路138增加后的值進行裝入和計數(shù)器116A和116B是否從通信路徑148和通信路徑160進行裝入的并行裝入位(f-pld),寄存器176存儲與轉(zhuǎn)移高速緩沖器114入口的目的字段(通信路徑148的bc[143]的位[43])對應(yīng)的值(fpc[32])。寄存器116A、172、176的值與特征存儲器34A的輸出組合后存儲到排隊寄存器TBUF0內(nèi)。排隊寄存器TBUF0是與指令排隊緩沖器50的6個指令緩沖器IBUF0-IBUF5對應(yīng)的6個寄存器(TBUF0-TBUF5)之一。各寄存器TBUF0-TBUF5在指令排隊緩沖器50中,分別與選擇開頭四組及后續(xù)四組對應(yīng)寄存器的多路轉(zhuǎn)換器180和184連接。開頭四組的特征存儲器信息通過通信路徑188傳送給流水線的下一個階段。并且,后續(xù)四組的特征存儲器信息通過通信路徑190傳送給流水線的下一個階段。
圖8是指令流水線的譯碼(D)階段和地址生成(AD)階段。在D階段,特征存儲器部分34A的開頭四組信息的位[562]存儲到寄存器200內(nèi),特征存儲器部分34A的后續(xù)四組信息存儲到DLTAG寄存器204內(nèi)。如果有開頭四組信息的轉(zhuǎn)移高速緩沖器114入口的目的字段(fpc[32]),就傳送給多路轉(zhuǎn)換器208。多路轉(zhuǎn)換器208的另一輸入與加法器214的輸出通信路徑210連接,加法器214包含按照通常順序執(zhí)行期間應(yīng)調(diào)度的下一個指針值。多路轉(zhuǎn)換器208選擇目的值或者下一個指令值,并將選擇的值傳送給DLTAG寄存器200的輸出通信路徑216。通信路徑216與多路轉(zhuǎn)換器218的輸入連接。
存儲在DLTAG寄存器204內(nèi)的后續(xù)四組特征存儲器信息傳送給多路轉(zhuǎn)換器218,并通過通信路徑224傳送給比較電路220。多路轉(zhuǎn)換器218選擇與下一次應(yīng)執(zhí)行的開始的指令對應(yīng)的特征信息,并將在該通信路徑226上選擇的信息輸出到流水線A階段的ATAG寄存器。調(diào)度寄存器指針值通過通信路徑228傳送給加法器214,特征存儲器信息通過通信路徑230傳送給比較電路220,指令高速緩沖器的標志傳送給比較電路234。
比較電路220將開頭四組特征與后續(xù)四組特征進行比較。如果它們不一致,則開頭四組指令和后續(xù)四組指令就是前后關(guān)系不同的指令,因此,這些指令就不應(yīng)同時調(diào)度。當(dāng)發(fā)生這種情況時,為了停止超級標量指令,將序號向通信路徑238輸出。
比較電路234將指令高速緩沖器標志與16進制值“FFF”進行比較,確定指令高速緩沖器的最后如何定址。如果是最后的地址,則希望在高速緩沖器行的最后停止超級標量指令,并按照其目的將信號輸給通信路徑242。
加法器214通過通信路徑250接收表示調(diào)度的有效指令總合的值,該值用于增加在該時刻的調(diào)度寄存器指針值,在通信路徑加法器214上生成更新的調(diào)度寄存器指針值。
在D階段,表示消費的指令數(shù)(包括有效指令和無效指令)的值裝入寄存器90(參見圖2),如和圖2一起說明的那樣,該值用于控制指令排隊器50的動作。
在A階段,生成實際的轉(zhuǎn)移地址。各轉(zhuǎn)移指令由開頭轉(zhuǎn)移指令和與其接續(xù)的延遲指令構(gòu)成,由于實際的轉(zhuǎn)移在延遲指令之后進行,所以,轉(zhuǎn)移目的地址必須對延遲指令進行計算。因此,與包含轉(zhuǎn)移指令的行對應(yīng)的特征信息存儲到ATAG寄存器227內(nèi),表示行內(nèi)的特征存儲器相對位置的值由多路轉(zhuǎn)換器250進行選擇,并通過通信路徑258存儲到RELDLY寄存器254內(nèi)。相對的延遲值通過通信路徑264傳送給轉(zhuǎn)移目的加法器260。轉(zhuǎn)移目的加法器260通過通信路徑268接收ATAG寄存器227的值(行的開始的指令的地址),通過通信路徑276接收AOFFSET寄存器272的偏移值。AOFFSET寄存器272通過通信路徑280從轉(zhuǎn)移指令接收26位的偏移值,(如果需要)在將偏移值輸入轉(zhuǎn)移目的加法器260之前,利用符號擴展電路284對偏移值的位[172]進行符號擴展。將26位的偏移值傳送給通過通信路徑292接收由AOFFSET寄存器272或轉(zhuǎn)移目的加法器260計算的轉(zhuǎn)移目的地址位[272]的多路轉(zhuǎn)換器288。多路轉(zhuǎn)換器288利用存儲在AOFFSET寄存器272中的偏移值置換計算的轉(zhuǎn)移目的地址的位[272]。
轉(zhuǎn)移目的加法器260的輸出傳送給多路轉(zhuǎn)換器289的1個輸入端。多路轉(zhuǎn)換器289的另一個輸入端是通過與通用寄存器文件連接的通信路徑296輸入的JUMP(轉(zhuǎn)移)或JUMP REGISTER(轉(zhuǎn)移寄存器)指令的轉(zhuǎn)移目的地址。因此,如果轉(zhuǎn)移不是由JUMP或JUMP REGISTER指令發(fā)生的,則所選擇的轉(zhuǎn)移目的指令便成為(可能由多路轉(zhuǎn)換器289修飾過的)轉(zhuǎn)移目的加法器260的輸出,這時,在適當(dāng)?shù)募拇嫫髦兴镜牡刂穬?yōu)先。
采取這種特定結(jié)構(gòu)的轉(zhuǎn)移目的地址計算電路的理由在于根據(jù)一般轉(zhuǎn)移指令、JUMP或JUMP REGSTER指令這樣的不同類型轉(zhuǎn)移指令計算轉(zhuǎn)移目的地址的方法。按照一般轉(zhuǎn)移指令,是將相對的延遲寄存器值、ATAG寄存器值和偏移值相加后,生成轉(zhuǎn)移目的地址。按照JUMP轉(zhuǎn)移指令,是REL-DLY寄存器值和ATAG寄存器值相加后,將偏移值加到總合上。按照JUMP REGISTER轉(zhuǎn)移指令,為了生成轉(zhuǎn)移目的地址,使用通信路徑296的寄存器值。
ATAG寄存器227和RELDLY寄存器254的值還傳送給返回地址加法器300。返回地址加法器300在子程序執(zhí)行中的轉(zhuǎn)移時,用于計算返回地址。當(dāng)子程序結(jié)束時,希望將其返回到調(diào)用指令之后的指令。因此,返回地址加法器300就在特征、標志和相對延遲之和上加上+1,生成調(diào)用子程序的轉(zhuǎn)移指令的延遲時間段之后的指令地址。返回地址輸出到通信路徑304。
圖9示出了流水線的執(zhí)行(E)階段和寫(W)階段。ATAG寄存器227的內(nèi)容通過通信路徑308傳送給ETAG寄存器318,通過通信路徑309傳送給比較電路341。RELDLY寄存器254的內(nèi)容通過通信路徑312傳送給E-REL-DLY寄存器322,返回地址加法器300計算的返回地址通過通信路徑304傳送給鏈路值(LNVAL)寄存器326。并且,多路轉(zhuǎn)換器289選擇的轉(zhuǎn)移目的地址通過通信路徑314傳送給BR-TARG寄存器330。EPC寄存器334存儲程序擬在E階段執(zhí)行的指令的實際地址,ASID寄存器存儲表示在該指令中使用的數(shù)據(jù)是否可高速緩存的相關(guān)值和應(yīng)執(zhí)行指令的程序控制ASID。
(與取出的M對應(yīng)的)存儲在ETAG寄存器318內(nèi)的ASID和特征與(與實際要執(zhí)行的指令對應(yīng)的)ASID寄存器338和EPC寄存器334的ASID和特征,由比較電路339進行比較,判斷(根據(jù)程序)執(zhí)行預(yù)測的實際指令是否為從指令高速緩沖器中取出的指令。如果數(shù)值不一致,就將指令高速緩沖器錯誤信號傳送到通信路徑340。
這時,ATAG寄存器227的值與包含預(yù)測的轉(zhuǎn)移目的指令的行對應(yīng),TARG寄存器330的值與實際的轉(zhuǎn)移目的地址對應(yīng)。因此,通過通信路徑309從ATAG寄存器227接收的標志字段和目的字段(預(yù)測的轉(zhuǎn)移目的地址),由比較電路341與通過通信路徑343從TARG寄存器330接收的計算轉(zhuǎn)移目的地址進行比較,判斷執(zhí)行預(yù)測的實際轉(zhuǎn)移指令是否為實際從指令高速緩沖器中取出的預(yù)測轉(zhuǎn)移目的指令。如果數(shù)值不一致,就將轉(zhuǎn)移高速緩沖器錯誤(轉(zhuǎn)移預(yù)測錯誤)信號傳送到通信路徑345。
EPC寄存器334的值傳送給流水線寫階段的WPC寄存器354,并通過通信路徑358傳送給多路轉(zhuǎn)換器362的1個輸入端。多路轉(zhuǎn)換器362的另一輸入端通過通信路徑366接收WPC寄存器354的值(延遲1個周期的EPC寄存器334的原來值)。多路轉(zhuǎn)換器362選擇這些值中的1個值,將所選擇的值傳送給EPC加法器360的1個輸入端。EPC加法器360在正常操作中具有更新EPC寄存器334的值的作用。EPC寄存器334的值按正常操作選擇,WPC寄存器354的值按異常操作選擇。
EPC加法器360的另一輸入端與多路轉(zhuǎn)換器366連接。向多路轉(zhuǎn)換器366一邊輸入的是從調(diào)度寄存器18調(diào)度的有效的指令數(shù),另一輸入是異常調(diào)整值369(-1~+3)。在正常操作中,EPC寄存器334的值按從調(diào)度寄存器18中調(diào)度的有效指令數(shù)增加,并轉(zhuǎn)向應(yīng)執(zhí)行EPC寄存器334值的下一個指令。當(dāng)發(fā)生異常情況時(陷阱、指令高速緩沖器錯誤、其他情況),異常調(diào)整值就加到WPC寄存器354的值上,表示發(fā)生異常的指令。當(dāng)在延遲指令中發(fā)生異常時,就使用-1的值。這是因為這時希望將指針轉(zhuǎn)向此前的轉(zhuǎn)移指令。哪個指令表示發(fā)生異常的值存儲到EPC-COP寄存器370內(nèi)。EPC-COP寄存器370通過多路轉(zhuǎn)換器374按其現(xiàn)行值再次裝入,直至發(fā)生其他的異常為止。TRAP-BASE寄存器376在發(fā)生異常時保持程序應(yīng)移動的地址,并將該值傳送給多路轉(zhuǎn)換器377。向多路轉(zhuǎn)換器377的其他輸入是復(fù)位矢量值。選擇這些值中的一個向通信路徑379輸出。
多路轉(zhuǎn)換器380在從異常返回時,通過通信路徑384接收EPC-COP寄存器370的值、在異常狀態(tài)下的通信路徑379的矢量地址vector-add[470]、為了轉(zhuǎn)移而通過通信路徑388計算的轉(zhuǎn)移目的地址、在指令高速緩沖器錯誤中用于保持EPC值而來自通信路徑358的EPC值以及通過通信路徑396更新的EPC值。所選擇的值輸出到通信路徑430(PC-JAM-BUS[470]),該通信路徑的位[132]如圖8所示的那樣是供給F階段的修正值,這樣,便可將標志輸送到指令高速緩沖器、特征存儲器部34A和轉(zhuǎn)移高速緩沖器114。
在正常操作中,更新的EPC值由多路轉(zhuǎn)換器380進行選擇,并裝入EPC寄存器334。當(dāng)發(fā)生轉(zhuǎn)移高速緩沖器錯誤時,多路轉(zhuǎn)換器380就選擇計算的轉(zhuǎn)移目的地址,并通過通信路徑160將新的轉(zhuǎn)移目的地址傳送給轉(zhuǎn)移高速緩沖器114(圖8)。為了更新轉(zhuǎn)移高速緩沖器114而使用的寫入地址由轉(zhuǎn)移高速緩沖器地址加法器400進行計算,該轉(zhuǎn)移高速緩沖器地址加法器400將EPC寄存器334的值加到E-REL-DLY寄存器322的值上,在通信路徑404上生成寫入地址。應(yīng)該注意到通信路徑404的位值與延遲指令的位置對應(yīng),并作為轉(zhuǎn)移預(yù)測高速緩沖器入口的源字段使用。通信路徑168的其余的寫入數(shù)據(jù)由計算的轉(zhuǎn)移目的地址的位構(gòu)成,該轉(zhuǎn)移目的地址就是更新過的標志和目的字段入口。
以上是本發(fā)明的極佳的實施例,在本發(fā)明的主旨范圍內(nèi),可以有各種變形。因此,本發(fā)明的范圍應(yīng)由權(quán)利要求的范圍決定。
按照本發(fā)明,不論剛剛調(diào)度的指令數(shù)和指令的類型及其配置如何,總是可以準備好調(diào)度4個指令,并可以順利地進行指令的供給,從而可以提高執(zhí)行速度。
另外,在取出指令的時刻進行轉(zhuǎn)移的預(yù)測,通過立即取出轉(zhuǎn)移目的指令,在執(zhí)行轉(zhuǎn)移指令之后便可準備轉(zhuǎn)移目的指令,所以,因轉(zhuǎn)移而引起的執(zhí)行速度降低可以減小到最小。
權(quán)利要求
1.一種在計算機系統(tǒng)內(nèi)部處理指令的裝置,其特征在于具有指令存儲器和轉(zhuǎn)換存儲器,指令存儲器用于存儲多個指令串;轉(zhuǎn)移存儲器用于在執(zhí)行指令存儲器的轉(zhuǎn)移指令時存儲多個包含用于預(yù)測由該轉(zhuǎn)移指令指定的轉(zhuǎn)移是否成功的信息的轉(zhuǎn)移預(yù)測入口。
2.按權(quán)利要求1所述的裝置的特征在于各轉(zhuǎn)移預(yù)測入口包括轉(zhuǎn)移目的字段,該轉(zhuǎn)移目的字段表示含有轉(zhuǎn)移成功時執(zhí)行的轉(zhuǎn)移目的指令的行所具有的轉(zhuǎn)移目的地址。
3.按權(quán)利要求1所述的裝置的特征在于各轉(zhuǎn)移預(yù)測入口包括1位的轉(zhuǎn)移預(yù)測字段,該1位的轉(zhuǎn)移預(yù)測字段表示執(zhí)行轉(zhuǎn)移指令時由存儲在指令存儲器內(nèi)的轉(zhuǎn)移指令所示的轉(zhuǎn)移是否成功。
4.按權(quán)利要求1所述的裝置的特征在于各轉(zhuǎn)移預(yù)測入口與指令存儲器的1個行對應(yīng)。
5.按權(quán)利要求4所述的裝置的特征在于各轉(zhuǎn)移預(yù)測入口包括轉(zhuǎn)移目的字段,該轉(zhuǎn)移目的字段表示含有轉(zhuǎn)移成功時執(zhí)行的轉(zhuǎn)移目的指令的行所具有的轉(zhuǎn)移目的地址。
6.按權(quán)利要求5所述的裝置的特征在于各轉(zhuǎn)移預(yù)測入口包括目的字段,該目的字段表示轉(zhuǎn)移目的指令在由轉(zhuǎn)移目的地址指示的行內(nèi)位于何處。
7.按權(quán)利要求5所述的裝置的特征在于各轉(zhuǎn)移預(yù)測入口包括源字段,該源字段表示轉(zhuǎn)移指令在與轉(zhuǎn)移目的地址對應(yīng)的行內(nèi)位于何處。
8.按權(quán)利要求7所述的裝置的特征在于還具有計數(shù)器、增量電路和計數(shù)器裝入電路。計數(shù)器用于保持將指令存儲器定址所使用的地址值;增量電路用于在正常操作時為了順序?qū)⒅噶畲鎯ζ鲀?nèi)的行定址而使計數(shù)器的地址值遞增;計數(shù)器裝入電路用于在由指令存儲器內(nèi)的轉(zhuǎn)移指令所指示的轉(zhuǎn)移當(dāng)以轉(zhuǎn)移預(yù)測入口預(yù)測該轉(zhuǎn)移指令執(zhí)行成功時,將轉(zhuǎn)移目的地址裝入計數(shù)器。
9.按權(quán)利要求8所述的裝置的特征在于還具有無效化電路,用于響應(yīng)源字段,使由上述地址值定址的行內(nèi)的指令無效。
10.按權(quán)利要求8所述的裝置的特征在于還具有無效化電路,用于響應(yīng)目的字段,使由上述地址值定址的行內(nèi)的指令無效。
11.按權(quán)利要求8所述的裝置的特征在于還具有無效化電路,用于響應(yīng)源字段,使位于由上述地址值定址的行內(nèi)的轉(zhuǎn)移指令之后的指令無效;響應(yīng)目的字段,使位于由上述地址值定址的行內(nèi)的轉(zhuǎn)移目的指令之前的指令無效。
全文摘要
計算機系統(tǒng)具有第1及第2指令存儲電路,各指令存儲電路存儲用于并行輸出的N個指令。與第1指令存儲電路連接的指令調(diào)度電路調(diào)度存儲在第1指令存儲電路內(nèi)的L個指令,這里,L等于或小于N。與第1及第2指令存儲電路連接的指令裝入電路在L個指令從第1指令存儲電路內(nèi)調(diào)度出之后并且別的指令還未從第1指令存儲電路調(diào)度之前將L個指令從第2指令存儲電路裝入第1指令存儲電路。
文檔編號G06F9/32GK1492319SQ0214076
公開日2004年4月28日 申請日期1994年12月15日 優(yōu)先權(quán)日1993年12月15日
發(fā)明者錢達·S·喬希, 保羅·羅德曼, 彼得·蘇顏特, 莫尼卡·R·諾法爾, R 諾法爾, 羅德曼, 蘇顏特, 錢達 S 喬希 申請人:硅圖像有限公司, 株式會社東芝