專利名稱:多指令集映射的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及到數(shù)據(jù)處理領(lǐng)域。尤其是,本發(fā)明涉及到采用多個程序指令字集的數(shù)據(jù)處理領(lǐng)域。
在數(shù)據(jù)處理系統(tǒng)的操作過程中,一個處理器核心在程序指令字的控制下工作。程序指令字在譯碼后用來產(chǎn)生核心控制信號以控制處理器中的不同單元,從而執(zhí)行必要的操作以完成程序指令字中所指定的處理。
提供運行多于一個指令集的系統(tǒng)是眾所周知的(例如,數(shù)據(jù)設(shè)備公司的VAX11計算機(jī)具有一種VAX11指令模式和一種兼容模式,該兼容模式允許VAX11計算機(jī)對早期的PDP11計算機(jī)指令進(jìn)行譯碼)。這樣的系統(tǒng)典型地為每個指令集都設(shè)一個獨立的指令譯碼器。指令譯碼器成為比較復(fù)雜且龐大的電路元件。
集成電路所占用的空間大小是非常重要的一個方面。集成電路的規(guī)模越小,生產(chǎn)成本越低,產(chǎn)量越高.另外,額外的空間被用來做其它電路元件使用的集成電路。降低集成電路規(guī)模的措施是相當(dāng)有益的。
從一方面看,本發(fā)明提供了一種處理數(shù)據(jù)的器件,所述器件含有一個處理器核心,用來響應(yīng)大量的核心控制信號;譯碼機(jī)構(gòu),用來譯碼第一指令集中的X-位程序指令字中的P位,從而產(chǎn)生所述的核心控制信號;一條指令流水線,程序指令字通過該流水線到達(dá)所述譯碼機(jī)構(gòu);第一映射機(jī)構(gòu),它響應(yīng)通過所述指令流水線的第二指令集中的Y-位程序指令字,用來把所述Y-位程序指令字中的Q位映射到相應(yīng)X-位程序指令字中的所述P位,以供所述譯碼機(jī)構(gòu)譯碼,其中,Y小于X,且所述第二指令集是所述第一指令集的子集。
本發(fā)明的作用靠含有指令流水線的系統(tǒng)來實現(xiàn)。當(dāng)指令通過流水線時,該系統(tǒng)用來將第二指令集的指令映射到第一指令集。將第二指令集中的程序指令字翻譯成第一指令集中的程序指令字避免了對第二指令譯碼器的需要,并允許將處理器核心的其余部分實現(xiàn)得更為簡單且有效。本發(fā)明認(rèn)識到,如果將第二指令集做成第一指令集的子集,那么實現(xiàn)一一映射是可能的并且也許能借助一種相當(dāng)普通且快速的手段,以避免限制系統(tǒng)性能。另外,本發(fā)明還認(rèn)識到,為實際地驅(qū)動譯碼機(jī)構(gòu),第二指令集的指令中只有某些位才有必要映射到第一指令集的指令字的對應(yīng)位。這樣就提高了映射的執(zhí)行速度。
在較佳實施例中通過提供一個指令寄存器來提高指令譯碼速度。該寄存器保存一條正在被所述處理器核心執(zhí)行的X-位指令,所述處理器核心從所述指令寄存器中讀取操作數(shù)。
采用這種方式,指令中不需指令譯碼器譯碼而僅需處理器核心運算的操作數(shù)便可以從指令中被直接讀取而不必通過指令譯碼器。
為了便于需要驅(qū)動譯碼機(jī)構(gòu)的關(guān)鍵的P位能夠迅速產(chǎn)生,繼而產(chǎn)生整個X-位程序指令字以不加修改地被處理器核心使用,本發(fā)明的較佳實施例含有第二映射機(jī)構(gòu),用以將處于所述指令流水線中的所述Y-位程序指令字中的操作數(shù)映射到所述對應(yīng)X-位程序指令字中的對應(yīng)位置,并將所述被映射的操作數(shù)保存到所述指令寄存器中,以供所述處理器核心使用。
第二映射機(jī)構(gòu)只能用來映射處理器核心所需要的那些操作數(shù)。然而,指令譯碼器的設(shè)計可以與處理器核心的設(shè)計有效地分隔開來,這樣就便于二者將來進(jìn)行不依賴于對方的變動,其前提是所述第二映射機(jī)構(gòu)將所述Y-位程序指令字映射成所述對應(yīng)X-位程序指令字的完整形式,并將所述對應(yīng)X-位程序指令字的所述完整形式保存到所述指令寄存器中。
通常,當(dāng)程序指令字通過指令流水線時,需要給譯碼機(jī)構(gòu)加一定的時間限制。為了更容易地與現(xiàn)有硬件進(jìn)行集成,在較佳實施例中,程序指令字經(jīng)過許多處理器周期才通過所述指令流水線,其中一個周期是譯碼周期,在該周期操作所述譯碼機(jī)構(gòu),以在所述譯碼周期的末尾產(chǎn)生所述核心控制信號,同時還操作所述第一映射機(jī)構(gòu),以在所述譯碼周期的第一階段產(chǎn)生所述對應(yīng)X-位程序指令字中的所述P位,從而允許所述譯碼機(jī)構(gòu)在所述譯碼周期的末尾仍能夠產(chǎn)生所述核心控制信號。
為驅(qū)動譯碼機(jī)構(gòu),Y-位程序指令字中只有某些位才有必要被影射,這一特性使得上述的時間要求得到滿足。
何時操作數(shù)必須可用是一個不太嚴(yán)格的相關(guān)要求。本發(fā)明的較佳實施例利用了這個比較寬松的要求,基于的假設(shè)是可操作所述第二映射機(jī)構(gòu)在所述譯碼周期的末尾將所述被映射的操作數(shù)保存到所述指令寄存器中。
使第一映射機(jī)構(gòu)的操作與第二映射機(jī)構(gòu)的操作做到相互獨立是很有價值的。如果它們并行操作,系統(tǒng)總的性能將隨之得到提高。
為使第二指令集中的程序指令字長度縮小,要求對可能提供的功能進(jìn)行修改。最好將系統(tǒng)設(shè)計成這樣,即所述處理器核心帶有大量的寄存器,這些寄存器被所述第一指令集使用,并被定義成某些所述X-位程序指令字中的寄存器操作數(shù);同時,所述第二指令集使用所述寄存器的一個子集,該子集被定義成某些所述Y-位程序指令字中的寄存器操作數(shù)。
令第二指令集使用第一指令集所用寄存器的一個子集,這一特性允許在尚未取到的指令間建立一一映射,同時還能使第二指令集的指令長度縮短。
為了解決對兩種指令集需采取不同的方式操縱寄存器這一問題,所述第二映射機(jī)構(gòu)對所述Y-位程序指令字中的所述寄存器操作數(shù)進(jìn)行擴(kuò)展,以產(chǎn)生所述X-位程序指令字中的所述寄存器操作數(shù)。
類似地,第二指令集中的其它操作數(shù)與第一指令集中的操作數(shù)相比,表示范圍較小,并且當(dāng)被第二映射機(jī)構(gòu)映射時,對其高位用零進(jìn)行擴(kuò)展。
從另一方面看,本發(fā)明提供了一種處理數(shù)據(jù)的的方法,所述方法包括下面的步驟一個處理器核心,用來響應(yīng)大量的核心控制信號;利用一個譯碼機(jī)構(gòu)對第一指令集中的X-位程序指令字中的P位進(jìn)行譯碼,從而產(chǎn)生核心控制信號以控制處理器核心;使程序指令字通過一條流水線到達(dá)所述譯碼機(jī)構(gòu);將通過所述指令流水線的第二指令集中Y-位程序指令字的Q位映射到相應(yīng)X-位程序指令字中的所述P位,以供所述譯碼機(jī)構(gòu)譯碼,其中,Y小于X,且所述第二指令集是所述第一指令集的子集。
下面將只通過例子描述本發(fā)明的一個實施例,參考的附圖如下
圖1示意了一個數(shù)據(jù)處理器件,它含有一個處理器核心和一個存貯器系統(tǒng);圖2示意了具有單個指令集的系統(tǒng)中的一條指令和一個指令譯碼器;圖3示意了具有兩個指令集的系統(tǒng)中的一條指令流水線和一個指令譯碼器;圖4示意了對一個X-位程序指令字的譯碼過程;圖5和圖6示意了從Y-位程序指令字到X-位程序指令字的映射;圖7示意了一個X-位指令集;圖8示意了一個Y-位指令集;圖9示意了可用于第一指令集和第二指令集的處理寄存器。
圖1示意了一個數(shù)據(jù)處理系統(tǒng)(由一個集成電路的一部分構(gòu)成),該數(shù)據(jù)處理系統(tǒng)包含一個與Y-位存貯器系統(tǒng)4相配的處理器核心2。在這個例子中,Y等于16。
處理器核心2含有一個寄存器組6,一個Booths乘法器8,一個桶移位器10,一個32-位算術(shù)邏輯單元12和一個寫數(shù)據(jù)寄存器14。在處理器核心2和存貯器系統(tǒng)4之間是一條指令流水線16,一個指令譯碼器18和一個讀數(shù)據(jù)寄存器20。圖中顯示了作為處理器核心2一部分的一個程序計數(shù)寄存器22對存貯器系統(tǒng)4進(jìn)行尋址。在每條指令被執(zhí)行而一條新指令必須被取至指令流水線16時,一個程序計數(shù)增值器24用來增加程序計數(shù)寄存器22中的程序計數(shù)值。
處理器核心2在各功能單元之間采用了N-位數(shù)據(jù)通道(在這個例子中為32位數(shù)據(jù)通道)。在運轉(zhuǎn)時,指令流水線16中的指令被指令譯碼器18譯碼,從而產(chǎn)生各種核心控制信號,并被傳輸至處理器核心2中的不同功能單元。作為對這些核心控制信號的響應(yīng),處理器核心的不同部分實施32-位處理操作,例如32-位乘法,32-位加法和32-位邏輯運算。
寄存器組6包含一個當(dāng)前程序狀態(tài)寄存器26和一個保存程序狀態(tài)寄存器28。當(dāng)前程序狀態(tài)寄存器26為處理器核心2保存各種條件和狀態(tài)標(biāo)志。這些標(biāo)志包括處理模式標(biāo)志(如系統(tǒng)模式,用戶模式,存貯器中止模式等),以及表示出現(xiàn)算術(shù)運算結(jié)果為零、出現(xiàn)進(jìn)位等等的標(biāo)志。保存程序狀態(tài)寄存器28(可以是成組的這種保存程序狀態(tài)寄存器中的一個)用來在一個異常出現(xiàn)而引起處理器模式切換時暫存當(dāng)前程序狀態(tài)寄存器26的內(nèi)容。這樣可以使對異常的處理更快更有效。
當(dāng)前程序狀態(tài)寄存器26中含有一個指令集標(biāo)志T。該指令集標(biāo)志被傳送給指令譯碼器18和程序計數(shù)增值器24。當(dāng)該指令集標(biāo)志T被置位時,系統(tǒng)操作第二指令集中的指令(即Y-位程序指令字,在這個例子中為16-位程序指令字)。該指令集標(biāo)志T控制程序計數(shù)增值器24,使之在第二指令集被操作時采用一個較小的增量步長。這與第二指令集的程序指令字字長較短,以至在存貯器系統(tǒng)4的存貯位置中,指令間具有更小間距是相一致的。
前面提到,存貯器系統(tǒng)4是一個16-位存貯器系統(tǒng),通過16-位數(shù)據(jù)總線與讀數(shù)據(jù)寄存器20和指令流水線16相連。相對于高性能的32-位存貯器系統(tǒng),這種16-位存貯器系統(tǒng)較為簡單和廉價。使用這種16-位存貯器系統(tǒng),可以在一個周期內(nèi)取到16-位程序指令字。然而,如果需要使用一條第二指令集中的32-位指令(由指令集標(biāo)志T指示),那么,需要進(jìn)行兩次取指,從而還原一條32-位指令并將之提供給指令流水線16。
一旦所需的程序指令字已從存貯器系統(tǒng)4被還原,它們即被指令譯碼器18譯碼,同時,不管該指令是16-位指令還是32-位指令,在處理器核心2中均開始32-位處理過程。
指令譯碼器18在圖1中被示意為一個方框。然而,為了處理一個以上的指令集,指令譯碼器18具有更為復(fù)雜的結(jié)構(gòu),這將結(jié)合圖2和圖3進(jìn)行闡述。
圖2示意了指令流水線16和一個處理單指令集的指令譯碼器18。在這個例子中,指令譯碼器18只含有一個第一譯碼機(jī)構(gòu)30,用以譯碼32-位指令。該譯碼機(jī)構(gòu)30使用一個可編程邏輯陣列(PLA)對第一指令集(ARM指令集)進(jìn)行譯碼,從而產(chǎn)生大量的核心控制信號32并將之傳輸?shù)教幚砥骱诵?。當(dāng)前被譯碼(即產(chǎn)生當(dāng)前的核心控制信號32)的程序指令字還保存在一個指令寄存器34中。處理器核心2中的功能部件(如Booths乘法器8或寄存器組6)直接從這個指令寄存器34中讀取各自處理操作所需的操作數(shù)。
基于這種設(shè)計下的操作過程具有這樣一個特征,即第一譯碼機(jī)構(gòu)30要求其輸入(由流水線階段PipeC所輸出的、以實線標(biāo)示出的P位輸入)必須在第一譯碼機(jī)構(gòu)開始操作的時鐘周期的開始階段達(dá)到穩(wěn)定。這是為了保證核心控制信號32能被及時產(chǎn)生,以便驅(qū)動處理器核心2中的必要部件。第一譯碼機(jī)構(gòu)30是一個相對較大且較慢的可編程邏輯陣列結(jié)構(gòu),所以這種對時間的考慮是有重要意義的。
這種用可編程邏輯陣列結(jié)構(gòu)來完成指令譯碼的設(shè)計是本領(lǐng)域中的一種傳統(tǒng)方法。該方法首先定義一個輸入集合以及由這些輸入產(chǎn)生的所需輸出,然后使用市場上已提供的軟件來設(shè)計這種能夠從指定的輸入集合產(chǎn)生指定的輸出集合的PLA結(jié)構(gòu)。
圖3示意了圖2中的系統(tǒng)經(jīng)修改后的結(jié)構(gòu),它用來完成對第一指令集和第二指令集的譯碼。當(dāng)通過指令集標(biāo)志T選擇第一指令集時,系統(tǒng)將按照以上結(jié)合圖2所介紹過的過程運轉(zhuǎn)。當(dāng)指令集標(biāo)志T指示指令流水線16中的指令是來自第二指令集時,第二譯碼機(jī)構(gòu)36將變?yōu)榛顒訝顟B(tài)。
該第二譯碼機(jī)構(gòu)采用一個快速PLA38和一個并行慢速PLA40對16-位指令(Thumb指令)進(jìn)行譯碼。快速PLA38用來將16-位Thumb指令的各二進(jìn)制位的一個子集(Q位)映射到用以驅(qū)動第一譯碼機(jī)構(gòu)的對應(yīng)32-位ARM指令的P位。因為僅有相對較少的位數(shù)需要進(jìn)行這種映射,快速PLA38可以相對較淺,于是可以足夠迅速地操作,以提供第一譯碼機(jī)構(gòu)足夠的時間來響應(yīng)PipeC的內(nèi)容產(chǎn)生核心控制信號32??梢哉J(rèn)為快速PLA38是在為第一譯碼機(jī)構(gòu)“偽造”一個對應(yīng)32-位指令的關(guān)鍵位,而沒有花費任何不必要的時間來映射整條指令。
然而,如果使處理器核心2在不做根本性改變和不添加重要附加電路部件的基礎(chǔ)上能夠工作時,那么完整的32-位指令仍然是需要的。在快速PLA38正在進(jìn)行關(guān)鍵映射的同時,并行相連的慢速PLA40用來將16-位指令映射到對應(yīng)的32-位指令,并將之放置于指令寄存器34中。這個更為復(fù)雜的映射將貫穿于快速PLA38和第一譯碼機(jī)構(gòu)進(jìn)行操作的整個過程之中。有一點非常重要,那就是,該32-位指令必須在指令寄存器34中就位充分長的時間,這樣使得為了響應(yīng)核心控制信號32對處理器核心2產(chǎn)生控制,任意操作數(shù)均可從指令寄存器34中讀取。
比較好的情況是,圖3中的系統(tǒng)在譯碼第二指令集時的全部動作是當(dāng)?shù)诙噶罴械?6-位指令通過指令流水線16時將其翻譯成第一指令集中的32-位指令。使這一點成為現(xiàn)實可行的措施是將第二指令集做成第一指令集的一個子集,以便保證在第二指令集中的指令和第一指令集中的指令之間存在一個一一映射。
提供指令集標(biāo)志T使得第二指令集與第一指令集為非正交的關(guān)系。這一點在第一指令集是一個已存在的指令集,且沒有任何空余位可用來使正交的其它指令集被檢測和譯碼的情況下是特別有用的。
圖4示意了一條32-位指令的譯碼過程。在圖4上部所示的連續(xù)的處理器時鐘周期中,完成了一個取操作、一個譯碼操作以及最后的一個執(zhí)行操作。如果要執(zhí)行的是一條特殊的指令(如一條乘法指令),那么需要增加一個或多個附加的周期。
一條32-位指令由許多不同的域組成。后面結(jié)合圖7將要介紹,對于不同的指令,這些域的界限也將不同。
指令42中某些位要求在一個初級譯碼階段被譯碼。這些P位是位4至7,位20,和位22至27。正是這些位被第一譯碼機(jī)構(gòu)30所要求,且必須被快速PLA38所“偽造”。這些位必須輸入到第一譯碼機(jī)構(gòu)并在其中譯碼,以便在譯碼周期的第一階段結(jié)束之前產(chǎn)生適當(dāng)?shù)暮诵目刂菩盘?2。如果需要的話,對整條指令的譯碼將持續(xù)到譯碼周期的末尾。在譯碼周期的末尾,處理器2在執(zhí)行周期中從指令寄存器34中讀取指令中的操作數(shù)。這些操作數(shù)可以是寄存器號、偏移量或其它變量。
圖5示意了作為例子的16-位指令到32-位指令的映射。粗線起源處為16-位指令中的Q位,它們需要被映射到32-位指令中的P位,以便被輸入到第一譯碼機(jī)構(gòu)30??梢钥闯?,這些位中的大部分或是直接被復(fù)制過去,或是經(jīng)過一個簡單的映射。操作數(shù)Rn,Rd和16-位指令中的立即數(shù)需要在其最高有效端用零填充,以填滿32-位指令。由于32-位指令的操作數(shù)范圍要比16-位指令的大,所以上述的填充是必需的。
從圖5下部給出的32-位指令通用結(jié)構(gòu)中可以看出,32-位指令比由16-位指令所代表的它本身的子集提供更多的靈活性。例如,32-位指令首部是條件碼Cond,它使該指令成為條件可執(zhí)行。相反,16-位指令中不帶有任何條件碼,它們所映射到的32-位指令中的條件碼被置為“1110”,這個值相當(dāng)于條件執(zhí)行狀態(tài)“總是”。
圖6示意了另一種指令映射。在這個例子中,16-位指令是一個與圖5中所示指令類型不同的取數(shù)/存數(shù)指令。不過,該指令仍然是32-位指令集中簡單數(shù)據(jù)傳輸指令的一個子集。
圖7用圖表方式示意了32-位指令集中的11種不同類型指令的格式。這些指令依次是1.數(shù)據(jù)處理PSR傳輸;2.乘法;3.簡單數(shù)據(jù)交換;4.簡單數(shù)據(jù)傳輸;5.未定義;6.塊數(shù)據(jù)傳輸;7.分支;8.協(xié)處理器數(shù)據(jù)傳輸;9.協(xié)處理器數(shù)據(jù)操作;以及10.協(xié)處理器寄存器傳輸。
11.軟件中斷。
對該指令集的完整說明可以在先進(jìn)RISC機(jī)器有限公司(Advanced RISC Machines Limited)生產(chǎn)的ARM6處理器的數(shù)據(jù)表中找到。圖7中所突出強(qiáng)調(diào)的指令是圖5和圖6中所示的指令。
圖8示意了除32-位指令集之外的16-位指令集。在該指令集中所突出強(qiáng)調(diào)的指令分別在圖5和圖6中做了示意。該16-位指令集中的指令經(jīng)過某種選擇,以使它們均可被映射到單條32-位指令,從而形成該32-位指令集的一個子集。
下面所說明的格式依次對應(yīng)于該指令集中各條指令。格式1Op=0,1兩種操作均置條件碼標(biāo)志。
0ADD Rd,Rs,#立即數(shù)31SUB Rd,Rs,#立即數(shù)3格式2Op=0,1兩種操作均置條件碼標(biāo)志。
0ADD Rd,Rm,Rn1SUB Rd,Rm,Rn格式33個操作碼。用來生成大的立即數(shù)。
1=ADD Rd,Rd,#立即數(shù)8<<82=ADD Rd,Rd,#立即數(shù)8<<163=ADD Rd,Rd,#立即數(shù)8<<24格式4Op給出3個操作碼,所有操作均是MOVS Rd,Rs SHIFT#立即數(shù)5,其中SHIFT為0為LSL1為LSR2為ASR如ARM所定義的那樣,用零進(jìn)行移位。格式5Op1*8+Op2給出32個ALU操作碼,Rd=Rd op Rn.所有操作均置條件碼標(biāo)志。這些操作是AND,OR,EOR,BIC(AND NOT),NEGATE,CMP,CMN,MUL,TST,TEQ,MOV,MVN(NOT),LSL,LSR,ASR,ROR丟失ADC,SBC,MULL如ARM所定義的那樣,用零進(jìn)行移位并且大于318個特殊操作碼,LO指定寄存器0-7,HI指定寄存器8-15SPECLAL是CPSR或SPSRMOV HI,LO(移動隱藏寄存器到可見寄存器)MOV LO,HI(移動可見寄存器到隱藏寄存器)MOV HI,HI(如過程返回)MOVS HI,HI(如異常返回)MOVS HI,LO(如中斷返回,可以是SUBS HI,HI,#4)MOV SPECLAL,LO(MSR)MOV LO,SPECLAL(MRS)CMP HI,HI(堆棧界限檢查)8個空余操作碼格式6Op給出4個操作碼,所有操作均置條件碼標(biāo)志0MOV Rd,#立即數(shù)81CMP Rs,#立即數(shù)82ADD Rd,Rd,#立即數(shù)8有可能用ADD Rd,Rs,#立即數(shù)5來替換ADD指令格式7取一個PC+偏移處的字(256字,1024字節(jié))。注意,偏移必須字對齊。
LDR Rd,[pc,#+1024]該指令用來訪問下一個字符區(qū),讀取常數(shù)、地址等等。格式8從SP(r7)+256個字(1024字節(jié))中存取字從SP(r7)+256個字節(jié)中存取字節(jié)LDR Rd,[SP,#+1024)LDRB Rd,[SP,#+256]這些指令用于堆棧和框架訪問格式9以帶符號的3位立即數(shù)偏移量(遲后增/減)存取字(或字節(jié)),強(qiáng)迫回寫L代表存/取,U代表上/下(加/減偏移量),B代表字節(jié)/字LDR{B}Rd,[Rb],#+/-Offset3STR{B}Rd,[Rb],#+/-Offet3這些指令用于數(shù)組的訪問偏移量編碼為0-7時代表字節(jié),編碼為0,4-28時代表字格式10以帶符號的寄存器偏移量(預(yù)先增/減)存取字(或字節(jié)),無回寫L代表存/取,U代表上/下(加/減偏移量),B代表字節(jié)/字LDR Rd,[Rb,+/-Ro,LSL#21STR Rd,[Rb,+/-R0,LSL#2]LDRB Rd,[Rb,+/-R0]STRB Rd,[Rb,+/-R0]這些指令用于“基址+偏移量”型指針的訪問,并且與8-位MOV,ADD,SUB結(jié)合時將帶來相當(dāng)快速的立即數(shù)偏移量的訪問格式11以帶符號的5位立即數(shù)偏移量(預(yù)先增/減)存取字(或字節(jié)),無回寫L代表存/取,B代表字節(jié)/字LDR{B}Rd,[Rb,#+Offset5]STR{B}Rd,[Rb,#+Offet5]這些指令用于結(jié)構(gòu)的訪問偏移量編碼為0-31時代表字節(jié),編碼為0,4-124時代表字格式12多重存取(強(qiáng)迫回寫)LDMIA Rb!,{RIist}STMIA Rb!,{RIist}Rlist指定寄存器r0-r7
這些指令的一個子類是一對子程序調(diào)用和返回指令對于LDM,如果r7是基址,而rlist中的位7置位,則PC被取到對于STM,如果r7是基址,而rlist中的位7置位,則LR被存起來如果r7被用作基址寄存器,則以sp取而帶之那么在這兩種情況下,將實現(xiàn)一個全下行堆棧,即LDM類似ARM的LDMFD, STM類似ARM的STMFD因而對塊拷貝,將r7用作結(jié)束指針如果r7不是基址寄存器,LDM和STM類似ARM的LDMIA,STMIA格式13取地址。該指令將8位無符號常數(shù)與PC或堆棧指針相加,并將結(jié)果存于目的寄存器中ADD Rd,sp,+256字節(jié)ADD Rd,pc,+256字(1024字節(jié))SP位表明SP或PC哪一個是源如果SP是源,而r7被指定為目的寄存器,則SP被用作目的寄存器格式14條件分支跳轉(zhuǎn),+/-128個字節(jié),其中,cond定義了條件碼(象ARM中的那樣),cond=15編碼為SWI(僅256,應(yīng)該足夠)格式15設(shè)置一個長跳轉(zhuǎn)和連接中的位2212。MOVlr,#offset<<12。格式16完成一個長跳轉(zhuǎn)和連接。操作為SUB newlr,pc#4;ORR pc,oldlr,#offset<<1。newlr和oldlr代表在該操作之前和之后的1r寄存器。
如前所述,與32-位指令集相比,16-位指令集操作數(shù)的范圍縮小了。相應(yīng)地,16-位指令集使用了寄存器6(參看圖1)的一個子集,而該寄存器6是提供給全32-位指令集用的。圖9示意了16-位指令集所使用的寄存器子集。
權(quán)利要求
1.用于處理數(shù)據(jù)的器件,所述器件含有一個處理器核心,用來響應(yīng)大量的核心控制信號;譯碼機(jī)構(gòu),用來譯碼第一指令集中的X-位程序指令字中的P位,從而產(chǎn)生所述的核心控制信號;一條指令流水線,程序指令字通過該流水線到達(dá)所述譯碼機(jī)構(gòu);第一映射機(jī)構(gòu),它響應(yīng)通過所述指令流水線的第二指令集中的Y-位程序指令字,用來把所述Y-位程序指令字中的Q位映射到相應(yīng)X-位程序指令字中的所述P位,以供所述譯碼機(jī)構(gòu)譯碼,其中,Y小于X,且所述第二指令集是所述第一指令集的子集。
2.根據(jù)權(quán)利要求1的器件,含有一個寄存器,所述寄存器保存一個正在被所述處理器核心執(zhí)行的X-位指令,所述處理器核心從所述指令寄存器中讀取操作數(shù)。
3.根據(jù)權(quán)利要求2的器件,含有第二映射機(jī)構(gòu),用以將處于所述指令流水線中的所述Y-位程序指令字中的操作數(shù)映射到所述對應(yīng)X-位程序指令字中的對應(yīng)位置,并將所述被映射的操作數(shù)保存到所述指令寄存器中,以供所述處理器核心使用。
4.根據(jù)權(quán)利要求3的器件,其中,所述第二映射機(jī)構(gòu)將所述Y-位程序指令字映射成所述對應(yīng)X-位程序指令字的完整形式,并將所述對應(yīng)X-位程序指令字的所述完整形式保存到所述指令寄存器中。
5.根據(jù)前述任一權(quán)利要求的器件,其中,程序指令字經(jīng)過許多處理器周期才通過所述指令流水線,其中一個周期是譯碼周期,在該周期操作所述譯碼機(jī)構(gòu),以在所述譯碼周期的末尾產(chǎn)生所述核心控制信號,同時還操作所述第一映射機(jī)構(gòu),以在所述譯碼周期的第一階段產(chǎn)生所述對應(yīng)X-位程序指令字中的所述P位,從而允許所述譯碼機(jī)構(gòu)在所述譯碼周期的末尾仍能夠產(chǎn)生所述核心控制信號。
6.根據(jù)權(quán)利要求3和5的器件,其中,可操作所述第二映射機(jī)構(gòu)在所述譯碼周期的末尾將所述被映射的操作數(shù)保存到所述指令寄存器中。
7.根據(jù)權(quán)利要求3的器件,其中,所述第二映射機(jī)構(gòu)可以與所述第一映射機(jī)構(gòu)并行操作。
8.根據(jù)前述任一權(quán)利要求的器件,其中,所述處理器核心帶有大量的寄存器,這些寄存器被所述第一指令集使用,并被定義成某些所述X-位程序指令字中的寄存器操作數(shù);同時,所述第二指令集使用所述寄存器的一個子集,該子集被定義成某些所述Y-位程序指令字中的寄存器操作數(shù)。
9.根據(jù)權(quán)利要求3和8的器件,其中,所述第二映射機(jī)構(gòu)對所述Y-位程序指令字中的所述寄存器操作數(shù)進(jìn)行擴(kuò)展,以產(chǎn)生所述X-位程序指令字中的所述寄存器操作數(shù)。
10.根據(jù)權(quán)利要求3的器件,其中,所述X-位程序指令字中的操作數(shù)的范圍要比所述Y-位程序指令字中的操作數(shù)的范圍大,并且,所述第二映射機(jī)構(gòu)對所述Y-位程序指令字中的所述操作數(shù)的高位用零進(jìn)行擴(kuò)展,以產(chǎn)生所述X-位程序指令字中的所述操作數(shù)。
11.根據(jù)前述任一權(quán)利要求的器件,其中,P小于X。
12.根據(jù)前述任一權(quán)利要求的器件,其中,Q小于或等于P。
13.根據(jù)前述任一權(quán)利要求的器件,其中,X等于32,Y等于16。
14.根據(jù)前述任一權(quán)利要求的器件,其中,所述器件是一個集成電路。
15.一種處理數(shù)據(jù)的方法,所述方法含有下面的步驟一個處理器核心,用來響應(yīng)大量的核心控制信號;利用一個譯碼機(jī)構(gòu)來譯碼第一指令集中的X-位程序指令字中的P位,從而產(chǎn)生所述的核心控制信號;程序指令字通過一條指令流水線到達(dá)所述譯碼機(jī)構(gòu);將通過所述指令流水線的所述Y-位程序指令字中的Q位映射到相應(yīng)X-位程序指令字中的所述P位,以供所述譯碼機(jī)構(gòu)譯碼,其中,Y小于X,且所述第二指令集是所述第一指令集的子集。
全文摘要
本發(fā)明描述了一種采用多指令集的數(shù)據(jù)處理系統(tǒng)。程序指令字通過指令流水線(6)進(jìn)入處理器核心(2),當(dāng)?shù)诙噶罴械某绦蛑噶钭滞ㄟ^指令流水線時,它們將被映射為第一指令集中的程序指令字。第二指令集中的程序指令字比第一指令集中的程序指令字的字長要小,并且第二指令集是第一指令集的子集。字長小提高了代碼密度,同時,第二指令集是第一指令集的子集這一特性允許有效地實現(xiàn)一一映射,因而無需第二指令集專用的指令譯碼器。
文檔編號G06F9/30GK1147306SQ95192829
公開日1997年4月9日 申請日期1995年2月15日 優(yōu)先權(quán)日1994年5月3日
發(fā)明者D·V·賈加 申請人:先進(jìn)Risc機(jī)器有限公司