專利名稱:能夠減少轉移故障的具有小尺寸電路的流水線處理器的制作方法
技術領域:
本發明涉及一種用來利用流水線處理執行機器語言指令序列的處理器,特別是涉及一種用來高速執行轉移處理的處理器。
背景技術:
流水線處理是一種已知的通過一中央處理單元(CPU后面稱之為處理器)來實現高速處理的基本技術。在流水線處理中,涉及一指令的處理被分成若干較小的級(流水線級),每一級均被并行處理以加速其處理。但是,由于可能出現一失速(stall)而使這種技術在執行循環中所使用的轉移指令時并不是有效的。這種現象稱之為轉移故障。由于轉移故障,流水線處理的工作特性不能達到一最佳值。
下面給出了其中將出現一轉移故障的程序的一特殊例子。在所示單獨指令內容的分號后面寫有附注。
(指令1)mov 0,i;將0轉移到i。
L ;示出一轉移目標的標記。
(指令2)add a,b,c;將a+b轉移到C。
(指令3)mul a,b,d;將a×b轉移到d。
(指令4)add i,l,i;i加l。
(指令5)cmp i,3;i與3進行比較。
(指令6)bccL ;如果i<3則轉移到L。
當執行上述程序時,指令2-5中的步驟被循環三次。在該程序中,在下面三個周期里指令6的執行的后面是取數、譯碼和執行指令2三級。其結果是在指令b的執行和指令2的執行之間的二個周期里出現轉移故障。
作為用于避免轉移故障的一種技術,在日本待審專利申請No.8-314719中披露了一種處理器。
在這種技術中,在陔循環剛剛開始之前包括該循環的第一指令的代碼被存貯到一緩沖器中。當該程序從最后循環指令轉移到第一指令時,該代碼從緩沖器中被取回并且該第一指令被譯碼和被執行。利用這樣一種配置,第一指令就不必在每次執行循環時從一外部存貯器中取出,這樣就可避免該轉移故障。
但是,上述常規處理器具有這樣一個缺點,即因為該處理器需要用來避免轉移故障的特殊電路,所以它的電路的尺寸較大。
首先,該處理器裝備有一加法器,該加法器專用于計算一跟隨包括該循環第一指令代碼的代碼取出地址并且恰恰在開始該循環之前將包括第一指令的代碼存貯到該緩沖之中。被計算的取出地址被存貯到一地址緩沖器中。
該處理器還裝置有一減法器,該減法器專用于當從最后指令轉移到第一指令時利用從該地址緩沖器取回的取出地址計算被譯碼的第一指令的地址。
由于包括了該加法器和減法器,其結果使得上述常規處理器的硬件尺寸增加了。
發明內容
本發明的目的是提供一種具有小尺寸電路的可減少轉移故障的流水線處理器。
上述目的可以利用一使用一程序循環之前立即被設置的寄存指令和一在該程序循環結束時被設置的循環指令以高速執行一程序循環的處理器來實現,該處理器包括一取出單元,用來從一存貯器中取出代碼;一譯碼單元,用來對包含在該取出代碼中的一指令譯碼;一執行單元,用來執行該被譯碼的指令,該譯碼單元包括有一用來存貯和更新一指明已被譯碼的指令的指針的譯碼指令計數器,該指針是一固定的位移值和被譯碼的該指令的一地址之和,該執行單元包括一存貯單元,用來當譯碼單元對該寄存指令譯碼時,將在該程序循環開始由該取出單元所取出的代碼存貯到第一緩沖器中和將在譯碼指令計數器中所存貯的該指針存貯到第二緩沖器中;和一高速轉移單元,用來當該循環指令由譯碼單元譯嗎和一轉移條件被滿足時使取出單元從相應于在第二緩沖器中所存貯的該指針的一地址開始取出代碼和用來使譯碼單元對在第一緩沖器中存貯的該代碼進行譯碼,其中該固定位移值被確定以便在第三緩沖器中的指針相應于跟隨在第一緩沖器中所存貯的代碼之后的一代碼的地址。
這里,該固定位移值可以等于第一緩沖器的一存貯尺寸。
這里,該譯碼指令計數器當被初始化時可以存貯一開始地址和該固定位移值之和。
利用這種構型,因為該指針是當前譯碼指令地址和在該譯碼指令計數器中所存貯的固定值之和,所以當執行一寄存器指令時不必再執行相加操作而當執行一循環指令時不必再執行相減操作。由于不必包括特定的加法器或特定的減法器,所以可減小處理器的硬件尺寸。另外,因為不再需要上述地址計算,所以當執行寄存器指令和循環指令時該處理器的速度可提高。
這里,該執行單元可以進一步包括一轉移單元,用來當一轉移指令具有一由該譯碼單元譯碼的絕對地址時將該絕對地址傳送到在該取出單元中的一取出指令計數器中和將一通過將該固定移位加到該絕對地址所得到的值傳送給該譯碼指令計數器。
這里,當一轉移指令具有一由該譯碼單元譯碼的相對地址時,該轉移單元可以傳送一通過將該相對值加到在該譯碼指令計數器中所存貯的指針所得到的值傳送給該譯碼指令計數器并且將一通過從被傳送到譯碼指令計數器的該值中減去該固定移位值所得到的值傳送到取出指令計數器。
利用這種構型,利用在該譯碼指令計數器中所存貯的指針來執行具有一絕對地址和一相對地址的轉移指令。
這里,該取出指令計數器可以包括一用來存貯一取出地址的寄存器和一用來增加在該寄存器中所存貯的取出地址的加法器,其中,當該轉移指令具有由譯碼單元譯碼的絕對地址時,該轉移單元具有的在取出指令單元中的加法器將該固定位移值加到該絕對地址上并且將相加的結果傳送到該譯碼指令計數器。
利用這種構型,當執行一具有一絕對地址的轉移指令時,在該譯碼指令計數器中存貯的該指針的計算可以不通過該執行單元來執行而是通過在取出指令計數器中的該加法來執行的。
本發明的這些和其它的目的、優點和特征通過下面結合附圖對本發明的一個特定實施例的說明可以得到清楚的理解。在該附圖中圖1是本發明的第一實施例的處理器的構成的一框圖;圖2示出了該譯碼指令計數器151的詳細構成;圖3的流程圖示出了在該指令執行級中的處理;圖4的框圖示出了選擇單元143和轉移器目標指令寄存器171的詳細構成;
圖5示出了選擇單元143的選擇邏輯;圖6示出了轉移指令的操作內容;圖7示出了處理器執行循環時所構成的流水線的流程;圖8的框圖示出了本發明第二實施例的處理器的構成;圖9的框圖示出了取出指令計數器241和譯碼指令計數器251的詳細構成;圖10示出了轉移指令的操作內容;圖11的時序圖示出了簡單的轉移指令“branch rel-adrs”的處理圖12示出了在圖4中所示的隊列171a的一修改的例子;和而圖13示出了在圖12中所示的選擇器121a-121d的選擇邏輯。
具體實施方式
第一實施例下面是結合附圖對本發明的實施例的處理器的詳細說明。
圖1的框圖示出了本發明的第一實施例的處理器的構成。該圖述示出了一存貯由處理器13所處理的指令序列(程序)的外部存貯器11。
處理器13從外部存貯器11中取出至少一個指令,并一個接一個地譯碼和執行這些指令。處理器13以高速執行循環和具有小尺寸硬件這樣一種方式構成。該循環是由一轉移目標信息寄存器指令(后面稱之為寄存器指令)和一高速循環指令的組合所規定的。
這里,該寄存指令在該循環的第一指令之前被立即地設置并且指示該處理器將包括在被置于該循環的開始的至少一指令中的寄存代碼送入該處理器中。這里,術語“代碼”指的是表示該指令的代碼。該高速循環指令被置于該循環的末尾并且指示如果滿足包含在該高速循環指令中的條件時該處理器轉移到該循環的第一指令,其中該第一指令是根據寄存指令被存貯在該處理器中。該寄存指令和高速循環指令分別以助記符形式寫為“setlb”和“Icc”。
處理器13包括一指令取出單元14、一指令譯碼單元15、一指令執行單元16、和一轉移器標信息存貯單元17。處理器13的每一部件都以與來自一時鐘發生器(未示出)的一時鐘信息同步地操作。該指令取出單元14、指令譯碼單元15、和指令執行單元16組成一指令流水線,這里每一單元與時鐘信息同步地并行工作。
指令取出單元14從外部存貯器11中取出代碼,將其存貯到一取出指令緩沖器142中,并將存貯的代碼傳送到指令譯碼單元15。該指令取出單元14包括一取出指令計數器(FIC)141、取出指令緩沖器(FIB)142,和一選擇單元143。
FIC141存貯一用于被取出代碼的取出地址并且將該取出地址傳送到外部存貯器11中。在該代碼被取出之后,FIC141被遞增以更新該取出地址。當執行高速循環指令時,根據來自指令譯碼單元15的控制信號在FIC141中的該取出地址被更新為一從轉移器標信息存貯單元17傳送的地址。
該FIB142是一用來存貯從外部存貯器11所取出的代碼的FIFO(先入先出)存貯器。
選擇單元143當執行高速循環指令時僅選擇在該轉移目標信息存貯單元17中存貯的代碼。當執行其它指令時,選擇單元143選擇在FIB142中的代碼。選擇單元143隨后向指令譯碼單元15輸出被選擇的代碼。
指令譯碼單元15對包含在自指令取出單元14傳送的代碼中的一指令進行譯碼并且輸出譯碼結果,該譯碼結果是由用來控制指令出單元14、指令譯碼單元15、指令執行單元16和轉移目標信息存貯單元17的操作的控制信號所組成。該指令譯碼單元15包括一譯碼指令計數器(DIC)151、一譯碼指令緩沖器(DIB)152、和一指令譯碼器153。
該DIC151存貯和更新一指針,該指針是被譯碼的一指令的一地址和一予置的位移值之和。當復位時,例如電源接通時,DIC151被初始化為一開始地址和位移值4之和的值。當一非轉移指令被譯碼時,DIC151由該譯碼指令的字長度所遞增并且作為一結果更新一指針,該指針為下一個被譯碼的指令的一地址和位移值4之和。當該高速循環指令被譯碼時,根據來自指令譯碼單元15的控制信號在DIC151中的指針被更新為從轉移目標信息存貯單元17所傳送的一地址。應注意的是,該位移值必須等于在轉移目標信息存貯單元17中的一轉移目標指令寄存器171的一存貯尺寸(字節數)。例如,如果該轉移目標指令寄存器171的存貯尺寸是8字節,則在DIC151中該指針將為目前被譯碼的指令地址和該位移值8的和。
DIB152是一用來存貯從FIB142傳送并被譯碼的一指令的寄存器。
指令譯碼器153對在DIB152中存貯的指令譯碼并且輸出根據該譯碼結果用來控制指令取出單元14、指令譯碼單元15、指令執行單元16、和轉移目標信息存貯單元17的控制信號。當該譯碼指令與在DIC151中的一指針有關時,該指令譯碼器153根據該指令的內容通過適當地加/減該位移值4控制指令執行單元16以調整在DIC151中的指針。但是,當高速循環指令被譯碼時不必進行上述調整。
指令執行單元16由一ALD(算術邏輯單元)、一位移器和其它部件所組成,并且根據從指令譯碼單元15所傳送的控制信號對處理器13的各部件執行操作和控制。指令執行單元16還在與處理器13相連接的信號線(未示出)上輸入/輸出控制信號。
當指令譯碼單元15對該寄存指令譯碼時,轉移目標信息存貯單元17存貯轉移目標信息。這里,該轉移目標信息意指從在FIB142中存貯的該循環的第一指令開始到被轉移的該循環的最后指令的代碼(在本實施例中為4字節)。該轉移目標信息存貯單元17包括轉移目標信息寄存器(BIR)171和轉移目標取出地址寄存器(BAR)172。
BIR171是當指令譯碼單元15譯碼該寄存指令時用來存貯來自FIB142的代碼的第一個4字節的寄存器。為此,該循環的第一個4字節被存貯在該BIR171中。該BIR171還被稱之為循環指令緩沖器。
BAR172是當指令譯碼單元15譯碼該寄存指令時用來存貯來自下一個周期中的DIC151的一指針的寄存器。這個指針是當前譯碼指令地址和BIR171(4字節)的存貯尺寸之和并且因此相應于一跟隨在BIR171中所存貯的代碼的一代碼地址。也就是說,在BAR172中存貯的該指針是一來自高速循環指令的轉移被執行之后由指令取出單元14所取出的代碼的一取出地址。該BAR172還被稱之為循環地址緩沖器。
<譯碼指令計數器151的詳細構成>
圖2示出了DIC151的構成的一個例子。如該圖所示,該DIC151包括一加法器31、一寄存器32和選擇器33及34。
當DIC151被初始化時,例如在復位時,加法器31將固定值4加到寄存器32的開始地址中。
加法器31通常將一譯碼指令的字長(字節數)加到寄存器32中的一指針中。這樣做使得,寄存器32更新一指針為“(被譯碼的一指令的地址)+4”。當執行一轉移指令時,在寄存器32中的該指針被更新為通過選擇器33輸入的一轉移目標地址。
<寄存指令和高速循環指令的處理>
圖3示出了寄存指令、高速循環指令和其它指令的處理,該寄存指令是在該循環之前被設置的,該高速循環指令是在該循環結束處被設置的。
當由指令譯碼器153的譯碼結果是寄存指令(setlb)時(步驟S31),代碼的第一個4字節被從FIB142傳送到BIR171(步驟S32),并且隨后在DIC151中的指針被送到BAR172(步驟S33)。其結果,BIR171存貯該循環的代碼的第一個4字節,同時BAR172存貯跟隨代碼的第一個4字節之后的該代碼的地址。在完成該寄存指令的執行時,處理器13處理下一個指令執行級(步驟S34)。
當由指令譯碼器153的譯碼結果是高速循環指令(Icc)時(步驟S31),它判斷一轉移條件是否滿足(步驟S35)。在該轉移處理中,該循環的代碼的第一個4字節從BIR171被傳送到DIB152(步驟S36),并且該地址被從BAR172傳送到DIC151(步驟S37)和FIC141(步驟S38)。其結果,FIC141存貯了跟隨代碼的第一個4字節之后的該代碼的取出地址,同時DIC151存貯一是當前譯碼指令(第一指令)和4之和的指針。因為指令取出單元14不需要取出是該轉移目標的第一指令,所以不會出現轉移故障。另外,該FIC141無須產生特殊的地址計算就可以容易地得到來自BAR172的跟隨代碼的第一個4字節之后的代碼的地址。
<選擇單元143和轉移目標指令寄存器171的詳細構成>
圖4的框圖示出了選擇單元143和BIR171的詳細構成。該圖還示出了FIB142。應注意的是該程序的每一指令具有一可變字長(8位的一整數倍)。
FIB142是由在8位的單元中位移取出代碼的一隊列所構成,該隊列最好具有超過16級。在該指令譯碼級的每一周期中FIB142通過選擇單元143將該隊列的第一個4字節輸出到DIB152。指令譯碼單元15對代碼的4字節譯碼并通知該FIB142指令字長(表示從代碼的4字節的開始的一指令開始的一字節數)。FIB14通過所通知的字長將該代碼朝向該隊列的前面移位并且因而選擇被譯碼的指令。通過這樣做,一指令的第一字節通常是在該隊列的前面(來自高速循環指令的一轉移被執行之后緊接著的情況未必是這樣)。
BIR171包括隊列171a和選擇控制單元171b。
該隊列171a是由在8位的單元中循環地移位代碼的4級隊列所構成。當寄存指令被譯碼和執行時,隊列171a存貯該FIB142的代碼的第一個4字節,然后在高速循環指令被譯碼之后通過選擇單元143被輸出到DIB152。指令譯碼單元15對代碼的4字節譯碼并通過選擇控制單元171b通知隊列171a指令字長。隊列171a利用通知的字長循環地朝向該隊列的前面移位該代碼。隊列171a重復該移位直至該4字節被移位一周,這樣根據寄存指令恢復該4字節在隊列171a中被存貯的原始狀態。下次來自高速循環指令的一轉移被執行時再次執行這種操作。
當來自該高速循環指令的一轉移被執行時,選擇控制單元171b控制選擇單元143以選擇在隊列171a中存貯的代碼的4字節來替代在FIB142中存貯的代碼的4字節。在這種控制處理中,選擇控制單元171b具有在該轉移之后立即通過選擇單元143向指令譯碼單元15輸出所有代碼的4字節的隊列171a。指令譯碼單元15譯碼該代碼并且通知隊列171a指令字長。選擇控制單元171b具有通過所通知的字長循環地移位該代碼的隊列171a并且對在該隊列171a中的有效代碼字節數進行計數。隨后在下一個指令譯碼級中根據該有效字節數該選擇控制單元171b控制選擇單元143。
選擇單元143包括有選擇器143a-143d。當該高速循環指令被執行并且利用指令譯碼單元15譯碼自BIR171所傳送的代碼的4字節時,選擇單元143選擇跟隨在其后的由在隊列171a中的有效代碼和在FIB142中的后繼代碼所組合的代碼的4字節。
圖5示出了選擇器143a-143d的選擇邏輯。根據選擇控制單元171b所通知的有效字節數,選擇器143a-143d輸出由在隊列171a中的有效代碼和在FIB142中的后繼代碼所組合的代碼的4字節。應注意的是,在圖5所示的情況中當使用四個5輸入-1輸出(“5至1”)8位選擇器時,可交替地使用“2至1”、“3至1”、“4至1”和“5至1”選擇器的一組合。
<轉移指令處理>
如上所述,DIC151存貯一是當前譯碼指令地址和固定值4之和的指針。因此,當執行用來從DIC151讀取或向DIC151寫入的指令時,它必須通過加上或減去值4來調整該指針。當執行除高速循環指令之外的尋址指令時這種調整是必須的。
圖6示出了轉移指令的操作內容。在該圖中,簡單轉移指令“branch abs-adrs”、子程序調用指令“Call abs-adrs”和子程序返回指令“ret”是用于絕對尋址的典型指令,同時該簡單轉移指令“branch rel-adrs”是用于相對尋址的典型指令。代碼“abs-adrs”表示-32位絕對地址,同時代碼“rel-adrs”表示8位或16位相對地址。
當處理該簡單轉移指令“branch abs-adrs”時,指令執行單元16將絕對地址“abs-adrs”存貯到FIC141中(操作601),將固定值4加到絕對地址“abs-adrs”,并將該總和存貯到DIC151中(操作602)。這樣做就使得該取出、譯碼和執行處理將通過由絕對地址“abs-adrs”所指定的一指定開始。因此,為了執行通過絕對尋址指定一轉移目標的轉移指令,在DIC151中設置將4加到絕對地址所得到的值。
當執行子程序調用指令“call abs-adrs”時,指令執行單元16將絕對地址“abs-adrs”存貯到FIC141中(操作603),將一譯碼指令字長加到在DIC151中的指針中(操作604),從該總和中減去4,將相減的結果壓入一堆棧(未示出)中(操作605),并將絕對地址“abs-adrs”和4的和存貯到DIC151中(操作606)。該相減的結果相應于一在子程序調用指令“call abs-adrs”的執行期間被譯碼的一指令的地址。換句話說,該相減結果相應于在子程序調用指令“call abs-adrs”以后的一指令的地址。因此,為了執行一絕對調用指令,將從在DIC151中的指針減去4所得的值壓入該堆棧中。
當處理子程序返回指令“ret”時,該指令執行單元16從堆棧中彈出跟隨子程序調用指令“call abs-adrs”之后的指令地址,將該地址存入FIC141中(操作607),將該地址加4,并且將其和存入DIC151中(操作608)。因而從一子程序中執行了一返回指令,將該值的和壓入堆棧中并將4返回定到DIC151中。
當執行該簡單轉移指令“branch vel-adrs”時,指令執行單元16將相對地址“rel-adrs”加到DIC151的指針中,將其和存貯到DIC151中(操作609),從該和中減去4,并將相減的結果存貯到FIC141中(操作610)。因此,為了執行由相對地址所指定的轉移目標的一轉移指令,在FIC141中設置從在DIC151中的新指針減去4所得到的值。應注意的是,當執行高速循環指令時,沒有必要將從在DIC151中的指針減去4的結果去設置在FIC141中的該地址。
如上所述,當執行一具有絕對地址的轉移指令時,該DIC151可簡單地被更新為該絕對地址和4的總和,同時FIC141可被更新為該絕對地址。
另外,當執行一具有相對地址的轉移指令時,該DIC151可簡單地更新為相對地址和在DIC151中的指針的總和,同時FIC141可更新為從該總和中減去4所得到的值。
利用固定值4的上述相加和相減是由在指令執行單元16中的ALU來執行的。因此,該指令執行單元16執行除高速循環指令之外的所有轉移指令的地址計算。
<操作>
下面說明使用一例子程序的本實施例的該處理器的操作。
圖7示出了當執行如下所示程序時所形成的一流水線的流程。
(例子程序)
在這個例子程序中,“指令地址”表示在16進制中一32位地址的最低16位,“地址”是以助記符形式寫出的,和“注釋”表示了指令內容。
在該程序中,從跟隨寄存指令(setlb)之后的指令(add a,b,c)到高速循環指令(Icc)的處理是一被重復三次的一循環。
在圖7中,水平軸表示以周期單位示出的時間,兩垂直軸表示IF、DEC和EX三個流水線級。“IF級”表示在FIB142的前面的一指令,通過它示出了在周期8,9,13和14中該BIR171的前面的一指令。“DEC級”表示在DIB152中存貯的一當前被譯碼的指令。“EX級”表示當前由指令執行單元16所執行的一指令。
當在周期3該寄存指令“Setlb”被譯碼時,代碼(”add a,b,c和“mul a,b,c”)的4字節被從FIB142傳送到BIR171。在周期4,寄存指令“Setlb”被執行,并且是當前被譯碼指令“add a,b,c”的地址和4的總和的一指針從DIC151被傳送到BAR172。其結果,是指令“add i,l,i”的地址的地址的值1007(1003+4)被存貯在BAR172中。
接著,當執行在跟隨在周期8中的譯碼級的周期9中的高速循環指令“Icc L”時,代碼的該4字節從BIR171傳送到DIB152,并且指令“add i,l,i”的地址從BAR172傳送到FIC141。其結果,跟隨在BIR171中的代碼的4字節之后的指令“add,i,l,i”的地址作為一般出地址被設置在FIC141中。
當在周期13中該高速循環指令“1CC L”被譯碼和在周期14中被執行時則執行相同的操作。
在本實施例的處理器中,DIC151中存貯了一是當前被譯碼指令地址和位移值4之和的一指針。因此,當執行寄存指令“satlb”時它沒有必要設置一專用于通過將4加到轉移目標指令地址來計算跟隨該轉移目標信息之后的代碼的取出地址的加法器。
另外,當執行來自該高速循環指令“1cc L”的一轉移時,FIC141和DIC151接收來自BAR172的相同地址。它沒有必要執行專用于FIC141和DIC151的地址計算,這樣該處理器就沒有必要配置一專門的減法器。
<第二實施例>
圖8的方框圖示出了本發明第二實施例的處理器的構成。
與圖1中所示的第一實施例的處理器13的不同之處在于用FIC214替代了FIC141和用DIC251替代了DIC151。第二實施例的處理器13的構成使得當執行一轉移指令時通過一指令取出單元24來計算在DIC251中存貯的一指針,而在第一實施例中是通過指令執行單元16來計算該指針的。下面的說明集中在這種不同之處。
<取出指令計數器241的詳細構成>
圖9的框圖示出了FIC241和DIC251的詳細構成。
FIC241包括一加法器91、一鎖存器92、和一選擇器93。
循環電路由加法器91、鎖存器92和包含一由4遞增的計數器的選擇器93所組成。當FIB142具有4字節或更多字節的空閑區域時,指令取出單元24取出代碼的4字節并且遞增該FIC241。
當執行一未轉移指令時,選擇器93選擇加法器91的輸出。當執行除高速循環指令之外的一轉移指令時,選擇器93選擇從指令執行單元16傳送的一轉移目標地址。另一方面,當執行高速循環指令時,選擇器93選擇從BAR172傳送的一地址。選擇器93隨后向加法器91輸出被選擇的地址。鎖存器92的輸出被作為一取出地址被傳送給外部存貯器11。
<譯碼指令計數器251的詳細構成>
在圖9中,DIC251包括一加法器101、一鎖存器102、和選擇器103有104。
循環電路由加法器101、鎖存器102和含有一在每一指令譯碼級中由一譯碼指令的字長而遞增的計數器的選擇器103所組成。
當一非轉移指令被譯碼時,在該指令譯碼級的第二個一半期間加法器101將被譯碼指令的字長加到鎖存器102中的指令中。當執行與在DIC251中的指針有關的一轉移指令(高速循環指令除外)時,加法器101將“-4”加到在鎖存器102中的指針中。
鎖存器102存貯是當前譯碼指令地址和位移值4之和的一指針。初始化時,鎖存器102存貯從FIC241傳送的“(開始地址)+4”。
選擇器103通常選擇由指令譯碼單元25所提供的被譯碼指令的字長。當諸如具有一相對地址的轉移指令或子程序調用指令之類的一指令被執行時,選擇器103選擇“-4”以調整該指針。
當執行一非轉移指令時,選擇器104選擇加法器101的輸出。當執行高速循環指令時,選擇器104選擇BAR172的輸出。當執行除高速循環指令之外的轉移指令時,選擇器104選擇在FIC241中的加法器91的輸出“(轉移目標地址)+4”。
<轉移目標地址的計算>
圖10示出了如圖6所示的相同尋址指令,即簡單轉移指令“branch abs-adrs”、子程序調用指令“call abs-adrs”、子程序返回指令“ret”和簡單轉移指令“branchrel-adrs”的操作內容。應注意的是,在點線上面所寫的操作是在指令譯碼級實施的,而在點線下面所寫的操作是在指令執行級實施的。
當處理簡單轉移指令“branch abs-adrs”時,指令執行單元16將絕對地址“abs-adrs”存貯到FIC241中(操作1001),并且在指令取出單元24將4加到在FIC241中存貯的地址中,然后將總和存貯到DIC251中(操作1002)。因此,當處理由絕對尋址所指定的一轉移目標的轉移指令時,在FIC241中的加法器91用來相加該位移值4以便計算在DIC251中的指針。
當處理子程序調用指令“call abs-adrs”時,指令執行單元16將絕對地址“abs-adrs”存貯到該FIC241中(操作1003)。在DIC251中的加法器101將指令字長加到指針中(操作1004)并從在DIC251中的相加結果中減去4。指令執行單元16將相減結果壓入一堆棧(操作1005)。在FIC241中的加法器91將在FIC241中存貯的絕對地址“abs-adrs”加4,然后將該總和存貯到DIC251中(操作1006)。因此,在DIC251中的加法器101用來減去位移值4以便計算一被壓入該堆棧中的返回地址,同時在FIC241中的加法器91用來加上該位移值4以便計算在DIC251中的指針。
當執行子程序返回指令“ret”時,指令執行單元16彈出該返回地址,也就是來自該堆棧的跟隨子程序調用指令“call abs-adrs”之后的一指令的地址并用將該返回地址存貯到FIC241中(操作1007)。在FIC241中的加法器91將4加到該返回地址中,然后將總和存貯到DCI251中(操作1008)。因此,當處理一返回指令時,在該FIC241中的加法器91被用來相加該位移值4以便計算在DIC251中的指針。
當處理簡單轉移指令“branch rel-adrs”時,指令執行單元16將相對地址“rel-adrs”加到通過加法器101從DIC251中指針減去4所得到的值中并且將該總和存貯到FIC241中(操作1009)。然后加法器91將4加到在FIC241中存貯的地址中并且將這個總和存貯到DIC251中(操作1010)。因此,當執行一由相對地址所規定的一轉移目標的一轉移指令時,在DIC251中的加法器101用來減去位移值4而在FIC241中的加法器91用來相加位移值4。
如上所述,在第二實施例的處理器13中,在操作1002、1006、1008和1010中的位移值4的相加是通過FIC241中的加法器91來執行的,而在操作1005和1009中的位移值4的相減是通過在DIC251中的加法器101來執行的。
<轉移指令處理的定時>
圖11是簡單轉移指令“branch rel-adrs”的處理的時序。
在該圖中,簡單轉移指令“branch rel-adrs”在周期T1和T2分別被譯碼和執行,而在周期T3和T4一轉移目標指令被取出和譯碼。
在周期T1,加法器101從在DIC251中的指針中減去4。在周期T2,指令執行單元16被相對地址“rel-adrs”加到該相減的結果中,從而計算一轉移目標地址BA并將其存貯到FIC241中。
在周期T3,轉移目標地址BA從FIC241輸出到外部存貯器11以取出一轉移目標指令的代碼(4字節)。在周期T3的第二個半周期中加法器91將4加到在FIC241中的該轉移目標地址中。
在周期T4,由加法器91所得到的總和被存貯到FIC241和DIC251中。
雖然在上述實施例中該處理器的處理單元被置為32位,但本發明并不限于此。因此,該處理器還可處理16或64位單位的數據。另外,雖然在上述實施例中BIR171的存貯尺寸是4字節(32位),但只要在跟隨高速循環指令的譯碼之后的周期內通過指令譯碼器完成這種尺寸的轉移目標指令代碼的譯碼而可取出至少一個指令則其它的存貯尺寸也可應用。
雖然在上述實施例中所使用的程序包括可變字長度的指令,但本發明還可應用于固定字長度的指令。在這種情況中,DIC151和選擇單143的構成可進一步被簡化。
另外,雖然該隊列171a(環形緩沖器)被用在圖4所示的BIR171中,但該BIR171還可選擇來構成,即在BIR171中存貯的代碼的4字節的任何字節可作為該代碼的開始而被設置。圖12示出了該隊列171a的這種修改的一個例子。在該圖中,如圖4所示的隊列171a由一4字節寄存器120和在BIR171中的選擇器121a-121d來替代。選擇器121a-121d的選擇邏輯如圖13所示。例如,寄存器120存貯代碼A、B、C和D的4字節。如果有效字節數為4,則通過如圖4所示的選擇器143a-143d該選擇器121a-121d以“ABCD”的頃序輸出4字節。
另一方面,如果有效字節數為3,則選擇器121a-121d以“BCDA”的順序輸出4字節。在接收4字節時,在指令取出單元中的選擇器143a-143d選擇有效3字節“BCD”并且將作為高位字節的有效3字節和從FIB142所接收的作為低位字節的1字節相結合以向DIB152輸出代碼的4字節。當有效字節數是2或1時該選擇以相同方式執行。
與如圖4所示的當執行位移時的情況相比圖12所示的構成啟動該轉移目標指令寄存器使得它的處理速度得以進一步提高。
權利要求
1.一種使用設置在程序循環之前的寄存指令和設置在程序循環末尾的循環指令用來高速執行一程序循環的處理器,該處理器包括一用來從一存貯器取出代碼的取出單元;一用來對一包括在該所取出代碼中的一指令譯碼的譯碼單元;以及一個用以執行經過譯碼的指令的執行單元,該譯碼單元包括一譯碼指令計數器,用來存貯和更新一指明一被譯碼的指令的指針,該指針是一固定位移值和被譯碼的指令的一地址的總和,和該執行單元包括第一緩沖器,具有存貯代碼的區域;第二緩沖器,具有存貯地址的區域;存貯裝置,用來當譯碼單元譯碼該寄存指令時將由取出單元所取出的在程序循環的開始處的代碼存貯到上述第一緩沖器和將在譯碼指令計數器中存貯的指針存貯到上述第二緩沖器;和高速轉移裝置,用來當該循環指令由譯碼單元譯碼和一轉移條件滿足時使該取出單元將從與在上述第二緩沖器中存貯的指針對應的地址開始的指令取出和使該譯碼單元譯碼在上述第一緩沖器中存貯的代碼,其中固定位移值被決定以使在上述第二緩沖器中的指針對應于跟隨在上述第一緩沖器中存貯的代碼之后的代碼的地址。
2.如權利要求
1的處理器,其特征在于該固定位移值等于第一緩沖器的一存貯尺寸。
3.如權利要求
2的處理器,其特征在于當初始化時該譯碼指令計數器存貯一開始地址和固定位移值的總和。
4.如權利要求
3的處理器,其特征在于該取出單元包括一用該固定位移值來使來自被取出代碼的一取出地址遞增的加法器;和其中的譯碼指令計數器當該取出地址被初始化為開始地址時存貯該加法器的一輸出作為該指針。
5.如權利要求
1的處理器,其特征在于該執行單元進一步包括通常的轉移裝置,用來當具有一絕對地址的轉移指令由譯碼單元譯碼時將該絕對地址傳送到在該取出單元中的一取出指令計數器中并且將通過將該固定位移值加到絕對地址所得到的一值傳送到譯碼指令計數器中。
6.如權利要求
5的處理器,其特征在于,當由譯碼單元譯碼一具有相對地址的轉移指令時,該轉移裝置將通過將該相對地址加到在譯碼指令計數器中所存貯的該指針中所得到的一值傳送到第二指令計數器中并且將通過從被傳送到譯碼指令計數器的該值中減去固定值所得到的一值傳送到取出指令計數器中。
7.如權利要求
5的處理器,其特征在于該取出指令計數器包括一用來存貯一取出地址的寄存器和一用來使在該寄存器中存貯的取出地址遞增的加法器,和其中,具有絕對地址的一轉移指令由譯碼單元譯碼時,該轉移裝置具有的在取出指令計數器中的加法器將該固定位移值加到該絕對地址中并且將一相加結果傳送到該譯碼指令計數器中。
8.如權利要求
1的處理器,執行具有至少三級的流水線處理;上述三級包括取出級、譯碼級和執行級,上述取出單元,在取出級中取出代碼;上述譯碼單元,將包括在譯碼級中的取出代碼中的指令譯碼;上述執行單元,執行執行級中的被譯碼指令;上述取出單元包括取出指令計數器,用來存貯和更新取出地址;和取出指令緩沖器,用來存貯該取出代碼,該譯碼單元還包括譯碼指令緩沖器,用來存貯被譯碼中的指令,該指令包括在該取出代碼中;上述譯碼指令計數器,通過將存貯在譯碼指令緩沖器中的指令的地址和固定位移值相加,而更新指針;上述存貯裝置,當該寄存指令由譯碼單元譯碼時,將在該取出指令緩沖器中存貯的代碼存貯到第一緩沖器中,和將在譯碼指令計數器中存貯的指針存貯到第二緩沖器中;在第一緩沖器中存貯的代碼是在該程序循環的開始處的代碼,該固定位移值等于第一緩沖器的存貯量;和在第二緩沖器中存貯的指針對應于跟隨在第一緩沖器中存貯的該代碼之后的一代碼的地址;和上述高速轉移裝置,當上述循環指令由譯碼單元譯碼并且滿足一轉移條件時將存貯在第二緩沖器中的指針傳送到取出指令計數器,使上述取出部取出從對應指針的地址開始的代碼,并將該代碼從第一緩沖器傳送至譯碼指令緩沖器,而使譯碼單元譯碼該代碼。
9.如權利要求
8的處理器,其特征在于當初始化時該譯碼指令計數器存貯開始地址和上述固定位移值的總和。
10.如權利要求
9的處理器,其特征在于該取出指令計數器包括一通過該固定位移值使該轉移地址增加的加法器;和其中當該取出地址被初始化為開始地址時譯碼指令計數器存貯加法器的輸出作為該指針。
11.如權利要求
9的處理器,其特征在于該程序循環包括有多個具有可變字長的指令,其中該處理器進一步包括選擇裝置,用來選擇其總量等效于來自第一緩沖器和來自取出指令緩沖器的譯碼指令緩沖器的一存貯尺寸的代碼并且將所選擇代碼輸出到譯碼指令緩沖器;和一選擇控制單元,用來控制該選擇裝置以選擇首先來自第一緩沖器和然后來自取出指令緩沖器的代碼,其中當該循環指令被譯碼和滿足轉移條件時該高速轉移裝置啟動該選擇控制單元,和其中當選擇控制單元未啟動時選擇裝置選擇來自取出指令緩沖器的代碼。
12.如權利要求
8的處理器,其特征在于該執行單元進一步包括轉移裝置,當一具有絕對地址的轉移指令由該譯碼單元譯碼時用來將該絕對地址傳送到取出指令計數器和將通過將固定位移值加到絕對地址所得到的一值傳送到譯碼指令計數器。
13.如權利要求
12的處理器,其特征在于,當具有相對地址的一轉移指令由譯碼單元譯碼時,該轉移裝置將一通過將相對地址加到在譯碼指令計數器中所存貯的指針中所得到的值傳送到譯碼指令計數器并且將一通過從被傳送到譯碼指令計數器的值中減去固定位移值所得到的值傳送到取出指令計數器中。
14.如權利要求
12的處理器,其特征在于該取出指令計數器包括一用來存貯該取出地址的寄存器和一用來使在該寄存器中存貯的取出地址增加的加法器,和其中,當具有絕對地址的轉移指令由譯碼單元譯碼時,該轉移裝置具有的在該取出指令計數器中的加法器將該固定位移值加到絕對地址中并且將一相加結果傳送到譯碼指令計數器中。
15.如權利要求
13的處理器,其特征在于該取出指令計數器包括一地址寄存器,用來存貯該取出地址;和一第一加法器,用來通過一予置值增加在地址寄存器中的取出地址,其中該譯碼指令計數器包括一指針寄存器,用來存貯該指針;和一第二加法器,用來通過一譯碼指令的字長度使在指針寄存器中的該指針增加,其中,當具有相對地址的轉移指令被譯碼單元譯碼時,該轉移裝置具有從在指針寄存器中的該指針減去固定位移值的第二加法器;將相減結果和相對地址之和作為一轉移目標地址存貯到該地址寄存器中;具有將予置值加到在地址寄存器中存貯的該轉移目標地址中的第一加法器,該予定值是固定位移值;和將相加結果存貯到指針寄存器中。
專利摘要
高速執行一程序循環的處理器。當該轉移目標信息寄存指令由一指令譯碼器譯碼時,在一取出指令緩沖器中的代碼被傳送到一轉移目標指令寄存器中,并且在一譯碼指令計數器中的一被位移指針被傳送到一轉移目標取出地址寄存器中。在高速循環指令由指令譯碼器譯碼并且滿足一轉移條件時,在轉移目標取出地址寄存器中的指針被傳送到一取出指令計數器和譯碼指令寄存器而在轉移目標指令寄存器中的代碼被傳送到一譯碼指令緩沖器中。
文檔編號G06F9/32GKCN1105350SQ98103178
公開日2003年4月9日 申請日期1998年6月29日
發明者小椋里, 尾崎伸治 申請人:松下電器產業株式會社導出引文BiBTeX, EndNote, RefMan專利引用 (4),