本申請是申請日為2014年9月4日、申請?zhí)枮?01410447345.1、發(fā)明名稱為“微處理器以及選擇性解壓縮微程序碼的相關(guān)方法”的申請的分案申請。
本發(fā)明有關(guān)于選擇性壓縮以及解壓縮微程序碼指令。
背景技術(shù):
現(xiàn)代先進(jìn)的微處理器通常包括執(zhí)行復(fù)雜及/或微處理器指令集架構(gòu)的不常執(zhí)行的指令微程序碼。以微程序碼實(shí)現(xiàn)指令集架構(gòu)一些指令的好處為可降低微處理器其他功能單元(如執(zhí)行單元)的復(fù)雜度。當(dāng)指令集架構(gòu)的指令數(shù)目以及復(fù)雜度增加時(shí)也需要微程序碼,基于這項(xiàng)需求,微處理器會額外以非易失性存儲器(如只讀存儲器(rom))來儲存微程序碼。然而,增加存儲器會消耗微處理器的實(shí)體資源,而這個(gè)問題將隨著多核微處理器的核數(shù)目增加而加劇,因其中每一個(gè)核皆具有存儲器用以儲存微程序碼。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提出一種微處理器。上述微處理器包括一或多個(gè)存儲器,每一上述的一或多個(gè)存儲器用以持有多個(gè)微程序碼指令。至少一第一上述存儲器用以提供多個(gè)壓縮微程序碼指令的m位寬微程序碼字組,至少一第二上述存儲器用以提供多個(gè)未壓縮微程序碼指令的n位寬微程序碼字組,m以及n為大于零的整數(shù),且n大于m。微處理器也包括一解壓縮單元,在上述壓縮微程序碼指令自至少一上述第一存儲器存取之后以及在上述壓縮微程序碼指令被執(zhí)行之前,上述解壓縮單元用以解壓縮上述壓縮微程序碼指令。
本發(fā)明還提出一種選擇性解壓縮微程序碼的方法。上述選擇性解壓縮微程序碼的方法包括接收來自一存儲器的一第一n位寬微程序碼字組。上述選擇性解壓縮微程序碼的方法也包括,判斷上述第一n位寬微程序碼字組的一既定部分是否為一既定數(shù)值。上述選擇性解壓縮微程序碼的方法也包括,若上述既定部分并非上述既定數(shù)值,解壓縮上述第一n位寬微程序碼字組而產(chǎn)生一m位寬微程序碼字組,其中m及n為大于零的整數(shù),且m大于n。上述選擇性解壓縮微程序碼的方法也包括,若上述既定部分為上述既定數(shù)值,接收來自上述存儲器的一第二n位寬微程序碼字組,并組合部分的上述第一n位寬微程序碼字組以及上述第二n位寬微程序碼字組而產(chǎn)生上述m位寬微程序碼字組。
本發(fā)明還提出一種產(chǎn)生選擇性壓縮微程序碼的方法。上述產(chǎn)生選擇性壓縮微程序碼的方法包括接收一來源碼,上述來源碼包括多個(gè)微程序碼組合語言指令,其中部分的上述微程序碼組合語言指令的每一個(gè)皆以上述來源碼的一指示所標(biāo)示。產(chǎn)生選擇性壓縮微程序碼的方法也包括,對于上述微程序碼組合語言指令的每一個(gè),若并非以上述指示所標(biāo)示,則產(chǎn)生上述微程序碼組合語言指令的一單一字組壓縮二進(jìn)制表示式,若由上述指示所標(biāo)示,則產(chǎn)生上述微程序碼組合語言指令的一多字組未壓縮二進(jìn)制表示式。
本發(fā)明還提出一種產(chǎn)生描述方法,適用于產(chǎn)生一解壓縮微程序碼裝置的一描述。上述產(chǎn)生描述方法包括,接收一來源碼,其中上述來源碼包括多個(gè)微程序碼組合邏輯語言指令。上述產(chǎn)生描述方法也包括,對于上述微程序碼組合邏輯語言指令的每一個(gè),產(chǎn)生一未壓縮二進(jìn)制表示式。上述產(chǎn)生描述方法也包括,對于上述微程序碼組合語言指令的每一唯一指令,產(chǎn)生上述唯一指令的對應(yīng)的上述未壓縮二進(jìn)制表示式的部分對應(yīng)至一壓縮二進(jìn)制表示式的一對應(yīng)關(guān)系。
本發(fā)明還提出一種微處理器。上述微處理器包括多個(gè)存儲器,上述存儲器的每一個(gè)用以持有多個(gè)微程序碼指令。上述存儲器的至少一第一存儲器用以提供多個(gè)壓縮微程序碼指令的多個(gè)m位寬微程序碼字組,并且上述存儲器的至少一第二存儲器用以提供多個(gè)未壓縮微程序碼指令的多個(gè)n位寬微程序碼字組,其中m以及n為大于零的整數(shù),且n大于m。上述微處理器也包括一解壓縮單元,在上述壓縮微程序碼指令自至少上述第一存儲器存取之后且于執(zhí)行上述壓縮微程序碼指令之前,上述解壓縮單元用以解壓縮上述壓縮微程序碼指令。
本發(fā)明還提出一種選擇性解壓縮微程序碼的方法,上述選擇性解壓縮微程序碼的方法適用于解壓縮具有多個(gè)存儲器的一微處理器中的多個(gè)微程序碼指令,上述存儲器的每一個(gè)用以持有上述微程序碼指令。上述選擇性解壓縮微程序碼的方法包括,自上述存儲器的至少一第一存儲器存取上述壓縮微程序碼指令的多個(gè)m位寬微程序碼字組。上述選擇性解壓縮微程序碼的方法也包括,自上述存儲器的至少一第二存儲器存取多個(gè)未壓縮微程序碼指令的多個(gè)n位寬微程序碼字組,其中m以及n是大于零的整數(shù)且n大于m。上述選擇性解壓縮微程序碼的方法也包括,解壓縮自上述第一存儲器所存取的上述壓縮微程序碼指令。上述選擇性解壓縮微程序碼的方法也包括,傳送上述未壓縮微程序指令而不需解壓縮。
本發(fā)明還提出一種計(jì)算機(jī)程序產(chǎn)品,編程于至少一非暫態(tài)計(jì)算機(jī)可使用介質(zhì)并與一計(jì)算裝置一并使用。上述計(jì)算機(jī)程序產(chǎn)品包括,一計(jì)算機(jī)可用程序碼體現(xiàn)于上述非暫態(tài)計(jì)算機(jī)可使用介質(zhì)以指定一微處理器。上述計(jì)算機(jī)可用程序碼包括,一第一程序碼,指定多個(gè)存儲器,每一上述存儲器用以持有多個(gè)微程序碼指令,其中上述存儲器的至少一第一存儲器用以提供多個(gè)壓縮微程序碼指令的多個(gè)m位寬微程序碼字組。上述存儲器的至少一第二存儲器用以提供多個(gè)未壓縮微程序碼指令的多個(gè)n位寬微程序碼字組,其中m以及n為大于零的整數(shù)且n大于m。上述計(jì)算機(jī)可用程序碼也包括,一第二程序碼,指定一解壓縮單元,在上述壓縮微程序碼指令自上述第一存儲器被存取后以及上述壓縮微程序碼指令被執(zhí)行前,上述解壓縮單元用以解壓縮上述壓縮微程序碼指令。
本發(fā)明能夠降低微處理器的復(fù)雜度、減小微處理器的體積。
附圖說明
圖1顯示根據(jù)本發(fā)明一實(shí)施例所述的多核微處理器的方塊圖。
圖2顯示根據(jù)本發(fā)明圖1實(shí)施例所述的處理核的詳細(xì)方塊圖。
圖3顯示根據(jù)本發(fā)明圖2實(shí)施例所述的解壓縮單元的詳細(xì)方塊圖。
圖4顯示根據(jù)本發(fā)明一實(shí)施例所述的由組合程序選擇性壓縮微程序碼指令的流程圖。
圖5顯示根據(jù)本發(fā)明一實(shí)施例所述的建立選擇性壓縮微程序碼的流程圖。
圖6顯示根據(jù)本發(fā)明一實(shí)施例所述的由組合程序組合微程序碼的流程圖。
圖7顯示根據(jù)本發(fā)明一實(shí)施例所述圖2的復(fù)雜指令轉(zhuǎn)譯器(尤其是圖3的解壓縮單元)的動作流程圖。
圖8-圖13顯示根據(jù)本發(fā)明另一實(shí)施例所述的具有微程序碼存儲器的微處理器持有不同組合的壓縮與解壓縮的微程序碼指令的方塊圖。
其中,附圖中符號的簡單說明如下:
100微處理器
102處理核
104核微程序碼只讀存儲器
106仲裁邏輯
108非核只讀存儲器
114非核微程序碼修補(bǔ)隨機(jī)存取存儲器
202指令快取
204簡單指令轉(zhuǎn)譯器
206暫存器別名表
208保留站
212執(zhí)行單元
214引退單元
216指令存取單元
218結(jié)構(gòu)程序計(jì)數(shù)器
222第一多工器
224目標(biāo)地址
226微指令
232非結(jié)構(gòu)微程序碼程序計(jì)數(shù)器
235指令間接暫存器
236微程序
237微轉(zhuǎn)譯器
239解壓縮單元
242結(jié)構(gòu)指令
244第一微指令
245選擇控制輸入
246第二微指令
247第一微程序碼指令
248選擇控制輸入
251第二微程序碼指令
252微程序碼地址
253未壓縮微程序碼指令
254非結(jié)構(gòu)微程序碼存取地址
255微指令信息
262存儲器子系統(tǒng)
264暫存器
292第二多工器
294指令轉(zhuǎn)譯器
296復(fù)雜指令轉(zhuǎn)譯器
306修補(bǔ)內(nèi)容可尋址存儲器
308修補(bǔ)地址
353未壓縮微程序碼指令
35538位結(jié)果
392三端輸入多工器
394解壓縮器
396控制邏輯
398緩沖器
402第一微程序碼組合語言指令
412第一逃離指針
414第二微程序碼組合語言指令
432第二逃離指針
434下16位
436上6位
438上22位
1299核修補(bǔ)隨機(jī)存取存儲器
502來源碼
504組合語言
506選擇性壓縮二進(jìn)制微程序碼
508所有微程序碼指令的列表
512壓縮程序
514壓縮表
516解壓縮描述
518邏輯產(chǎn)生程序(espresso)
524解壓縮器暫存器傳遞語言文件
602~612、702~714步驟。
具體實(shí)施方式
在此所述的微處理器,大多但非全部的微程序碼指令壓縮且維持于微程序碼存儲器中。微處理器包括一解壓縮單元,用以選擇性地對選擇的壓縮微程序碼指令解壓縮,例如圖2的解壓縮單元239。根據(jù)本發(fā)明的一實(shí)施例,維持于存儲器的微程序碼指令并未壓縮,因而較存儲器所維持的字節(jié)寬度更長。在此情況下,微程序碼指令分為兩個(gè)部分,并分別儲存于存儲器不同的兩個(gè)字組中。在這些狀況下,一既定數(shù)值(在此稱為“跳出(escape)指針”)放置(例如,通過微程序碼組合程序)于兩字組序列第一字組的一既定部分。當(dāng)解壓縮單元偵測跳出指針存在于由存儲器所讀取的第一字組時(shí),解壓縮單元結(jié)合兩字組的適當(dāng)部分而產(chǎn)生未壓縮微程序碼指令。此方式有利于提供大多數(shù)維持于存儲器中的微程序碼指令能夠被壓縮,并使其寬度較不包括于選擇性壓縮機(jī)制的實(shí)現(xiàn)方式為短。
再者,許多實(shí)施例描述具有多個(gè)微程序碼存儲器的微處理器,至少一微程序碼存儲器具有壓縮的微程序碼指令的寬度以提供壓縮微程序碼指令,至少一微程序碼存儲器為具有非壓縮微程序碼指令的寬度以提供非壓縮微程序碼指令。在此詳述壓縮寬度以及非壓縮寬度的核、非核以及修補(bǔ)微程序碼存儲器的各種組合。
請參考圖1,圖1顯示根據(jù)本發(fā)明一實(shí)施例所述的多核微處理器100的方塊圖。微處理器100的實(shí)體位于一集成電路上,微處理器100包括許多處理核100、由許多處理核102所共用的非核只讀存儲器(rom)108、由許多處理核102所共用的非核微程序碼修補(bǔ)隨機(jī)存取存儲器(ram)114、以及耦接處理核102至非核只讀存儲器108和非核微程序碼修補(bǔ)隨機(jī)存取存儲器114的仲裁邏輯106(也稱為控制邏輯)。每一處理核102包括對應(yīng)的核微程序碼只讀存儲器104,此對應(yīng)的核微程序碼只讀存儲器104并不與其他處理核102分享,而是專屬于各自的處理核102。每一處理核102經(jīng)由對應(yīng)的總線112耦接至仲裁邏輯106。非核只讀存儲器108、非核微程序碼修補(bǔ)隨機(jī)存取存儲器114、以及核微程序碼只讀存儲器104皆為持有微程序碼指令。
微處理器100包括稱之為非核的部分。該非核部分為微處理器100的一部分但不屬于任何處理核102的部分。非核只讀存儲器108以及非核微程序碼修補(bǔ)隨機(jī)存取存儲器114位于微處理器100的非核部分。在一實(shí)施例中,處理核102是單一設(shè)計(jì)并重復(fù)復(fù)制。圖1的實(shí)施例中顯示四個(gè)處理核102,而其他實(shí)施例則具有不同數(shù)目的處理核102。仲裁邏輯106也安置于微處理器100的非核部分,當(dāng)多個(gè)處理核102要求存取非核只讀存儲器108或非核微程序碼修補(bǔ)隨機(jī)存取存儲器114時(shí),由仲裁邏輯106執(zhí)行仲裁決定。
非核只讀存儲器108提供某數(shù)量的字組(稱為“j”)來儲存微程序碼指令,并可被所有處理核102所存取。每一核微程序碼只讀存儲器104提供某數(shù)量的字組(稱為“k”)來儲存微程序碼指令,并只能被對應(yīng)的處理核102所存取。非核只讀存儲器108的j個(gè)字組與對應(yīng)的核微程序碼只讀存儲器104的k個(gè)字組,位于不同于處理核的微程序碼存儲器地址空間的地址空間上??偫▉碚f,對于每一處理核,其對應(yīng)的核微程序碼只讀存儲器104與非核只讀存儲器108,提供j+k字組的儲存空間給可被處理核102所存取的微程序碼指令。
在一實(shí)施例中,非核只讀存儲器108具有j個(gè)可定址的存儲器位置,每一個(gè)可定址的存儲器位置皆為壓縮微程序碼指令的寬度。在一實(shí)施例中,每一非核只讀存儲器108具有k個(gè)可定址的存儲器位置,每一個(gè)可定址的存儲器位置皆為壓縮微程序碼指令的寬度。在一實(shí)施例中,壓縮微程序碼指定的寬度為28位,而非壓縮或解壓縮的微程序碼指令的寬度為38位。
根據(jù)本發(fā)明的一實(shí)施例,非核只讀存儲器108包括為所有處理核102共用的單一讀取端口,以及根據(jù)仲裁演算法用以授權(quán)處理核102使用讀取端口的仲裁邏輯106。根據(jù)本發(fā)明的一實(shí)施例,若在一既定要求周期內(nèi)僅有一處理核102要求存取非核只讀存儲器108時(shí),則仲裁邏輯106允許此處理核102的要求;若在一既定要求周期內(nèi)有多個(gè)處理核102要求存取非核只讀存儲器108時(shí),則仲裁邏輯106依輪流法(round-robin)的順序準(zhǔn)予存取,但其他仲裁演算法亦可運(yùn)用在本發(fā)明中。其他實(shí)施例中,可使非核只讀存儲器108對于每一處理核102均包括一讀取端口。然而,應(yīng)注意的是,當(dāng)非核只讀存儲器108包括更多的讀取端口時(shí)將增加更大的晶粒面積,因此與晶粒面積相關(guān)的技術(shù)功效就會降低。
利用非核只讀存儲器108的優(yōu)點(diǎn)為,當(dāng)從非核只讀存儲器108存取微程序碼指令時(shí),其可能以增加延遲時(shí)間的方式,作為降低微處理器100面積的代價(jià)。延遲時(shí)間的增加會造成每一處理核102的微程序碼單元至非核只讀存儲器108之間更大的距離,也就是傳送延遲會因額外的距離而增加,因而需要額外的管線級以及相關(guān)的額外時(shí)脈周期。此外,延遲時(shí)間的增加亦可歸咎于因非核只讀存儲器108共用資源且必須分配給每個(gè)處理核102,并當(dāng)多個(gè)處理核102要求存取非核只讀存儲器108時(shí)所造成的現(xiàn)象。再者,非核只讀存儲器108的共享本質(zhì)可能導(dǎo)致變動的存取延遲時(shí)間,不像核微程序碼只讀存儲器104具有固定的延遲時(shí)間。然而,在一些實(shí)施例中,增加及/或變動的延遲時(shí)間作為降低晶粒面積的代價(jià)。有利的是,非核只讀存儲器108的大小可利用在實(shí)施例所述的選擇性微程序碼壓縮而進(jìn)一步降低。
參考圖2,圖2顯示根據(jù)本發(fā)明圖1實(shí)施例所述的處理核102的詳細(xì)方塊圖。處理核102包括一管線級,該管線級包括許多功能單元。在一實(shí)施例中,處理核102為一超純量(superscalar)、非循序執(zhí)行(out-of-orderexecution)、管線化數(shù)據(jù)的處理核。處理核102包括指令存取單元216、其再耦接至指令快取202、其再耦接至指令轉(zhuǎn)譯器294、其再耦接至?xí)捍嫫鲃e名表(rat)206、其再耦接至保留站208、其再耦接至執(zhí)行單元212、其再耦接至引退單元214。執(zhí)行單元212自暫存器264(結(jié)構(gòu)的或非結(jié)構(gòu)的)以及存儲器子系統(tǒng)262接收運(yùn)算元。引退單元214引退微指令結(jié)果至?xí)捍嫫?64以及存儲器子系統(tǒng)262。指令轉(zhuǎn)譯器294經(jīng)由圖1的總線112,耦接至仲裁邏輯106。存取單元216包括處理核102的結(jié)構(gòu)程序計(jì)數(shù)器218,當(dāng)引退單元214引退指令時(shí),引退單元214更新結(jié)構(gòu)程序計(jì)數(shù)器218。存取單元216提供結(jié)構(gòu)指令存取地址至指令快取202。根據(jù)結(jié)構(gòu)程序計(jì)數(shù)器218,存取單元216產(chǎn)生結(jié)構(gòu)存取地址。此外,執(zhí)行單元212可執(zhí)行分支指令,且提供分支目標(biāo)地址至存取單元216,用以產(chǎn)生結(jié)構(gòu)存取地址。最后,存取單元216的分支預(yù)測器(圖中并未顯示)可提供預(yù)測分支目標(biāo)地址,用以產(chǎn)生結(jié)構(gòu)存取地址。結(jié)構(gòu)程序計(jì)數(shù)器218與由指令轉(zhuǎn)譯器294所維持的指令非結(jié)構(gòu)微程序碼程序計(jì)數(shù)器224不同,并且由存取單元216所產(chǎn)生而傳送至指令快取202的結(jié)構(gòu)存取地址,與由存取單元216的微程序236(也稱為控制邏輯)所產(chǎn)生的非結(jié)構(gòu)微程序碼存取地址254亦不同,這些將在以下詳述。
指令快取202所快取的結(jié)構(gòu)指令242,也稱為微指令或isa指令,由微處理器100(例如:x86、arm、sparc等等)的指令集架構(gòu)所定義。指令轉(zhuǎn)譯器294翻譯結(jié)構(gòu)指令242成為處理核102微架構(gòu)的微指令226,指令轉(zhuǎn)譯器294通常具有精簡指令集(risc)體系相關(guān)的特征。
指令轉(zhuǎn)譯器294以程序順序提供微指令至?xí)捍嫫鲃e名表206。暫存器別名表206在引退單元214的重新排列緩沖器中,以程序順序分配微指令的項(xiàng)目。暫存器別名表206執(zhí)行暫存器264的重新命名。暫存器別名表206提供微指令至保留站208,當(dāng)每一微指令的來源運(yùn)算元可獲得,且執(zhí)行單元212能夠執(zhí)行該微指令時(shí),微指令從保留站208被發(fā)送至執(zhí)行單元212且以非循序方式來執(zhí)行。引退單元214通過將執(zhí)行單元212所執(zhí)行微指令的結(jié)果,以程序順序引退指令至處理核102的架構(gòu)狀態(tài)。執(zhí)行單元212可包括載入單元、儲存單元、整數(shù)單元、浮點(diǎn)數(shù)單元、分支單元、單一指令多重?cái)?shù)據(jù)流計(jì)算機(jī)模組(singleinstruction,multipledata,simd)單元等等。載入單元自第一階(level-1,l1)數(shù)據(jù)快取中讀出數(shù)據(jù),儲存單元將數(shù)據(jù)寫入至第一階數(shù)據(jù)快取。第二階(level-2,l2)數(shù)據(jù)快取可作為第一階數(shù)據(jù)快取以及指令快取202的備用儲存裝置。
指令轉(zhuǎn)譯器294自圖2的指令快取202接收結(jié)構(gòu)指令242的多個(gè)區(qū)塊。結(jié)構(gòu)指令242也稱為微指令242或isa指令242。指令轉(zhuǎn)譯器294轉(zhuǎn)譯結(jié)構(gòu)指令242為提供至?xí)捍嫫鲃e名表206的實(shí)現(xiàn)微指令226。指令轉(zhuǎn)譯器294包括簡單指令轉(zhuǎn)譯器(sit)204、復(fù)雜指令轉(zhuǎn)譯器(cit)296以及第二多工器292。簡單指令轉(zhuǎn)譯器204輸出實(shí)現(xiàn)第一微指令244以及微程序碼地址252。復(fù)雜指令轉(zhuǎn)譯器296,也稱為微程序碼單元296,接收微程序碼地址252,并提供實(shí)現(xiàn)第二微指令246。第二多工器292以一輸入端自簡單指令轉(zhuǎn)譯器204接收第一微指令244,并以另一輸入端自復(fù)雜指令轉(zhuǎn)譯器296接收第二微指令246,且根據(jù)選擇控制輸入248提供實(shí)現(xiàn)微指令226至圖2的執(zhí)行單元212。
復(fù)雜指令轉(zhuǎn)譯器296包括微程序236、圖1的核微程序碼只讀存儲器104、指令間接暫存器(iir)235、第一多工器222、解壓縮單元239以及微轉(zhuǎn)譯器237。微程序236接收微程序碼地址252,且維持非結(jié)構(gòu)微程序碼程序計(jì)數(shù)器(micro-pc)232。核微程序碼只讀存儲器104接收根據(jù)非結(jié)構(gòu)微程序碼程序計(jì)數(shù)器232所存取的地址254。此外,非核只讀存儲器108也經(jīng)由總線112,接收非結(jié)構(gòu)微程序碼存取地址254。第一多工器222的第一輸入端接收來自非共用的核微程序碼只讀存儲器104的微程序指令251,第二輸入端則接收來自共用的非核只讀存儲器108的微程序碼指令249(經(jīng)由總線112),并根據(jù)由微程序236所產(chǎn)生的選擇控制輸入245而輸出第一微程序碼指令247。解壓縮單元239接收來自第一多工器222的第一微程序碼指令247,并且選擇性地解壓縮第一微程序碼指令247,以產(chǎn)生未壓縮微程序碼指令253。微轉(zhuǎn)譯器237轉(zhuǎn)譯由解壓縮單元239接收的未壓縮微程序碼指令253,以產(chǎn)生由復(fù)雜指令轉(zhuǎn)譯器296所輸出的實(shí)現(xiàn)第二微指令246。由簡單指令轉(zhuǎn)譯器204所產(chǎn)生的實(shí)現(xiàn)第一微指令244以及由復(fù)雜指令轉(zhuǎn)譯器296所產(chǎn)生的實(shí)現(xiàn)第二微指令246,皆為微處理器100微架構(gòu)的微指令集的微指令226,并可由執(zhí)行單元212管線執(zhí)行。
第二多工器292由選擇控制輸入248所控制。通常第二多工器292選擇來自簡單指令轉(zhuǎn)譯器204的第一微指令244;然而,當(dāng)簡單指令轉(zhuǎn)譯器204遇到復(fù)雜結(jié)構(gòu)指令242并轉(zhuǎn)移控制權(quán)至(或經(jīng)由設(shè)陷(traps)移轉(zhuǎn)至)復(fù)雜指令轉(zhuǎn)譯器296時(shí),簡單指令轉(zhuǎn)譯器204控制選擇控制輸入248,而使得第二多工器292選擇來自復(fù)雜指令轉(zhuǎn)譯器296的第二微指令246。當(dāng)暫存器別名表206遭遇具有特殊位組的微指令226,以指出其是在順序執(zhí)行復(fù)雜結(jié)構(gòu)指令242過程中最后的微指令226時(shí)(在此表示為“.t”位),暫存器別名表206控制選擇控制輸入248而使得第二多工器292回到選擇來自簡單指令轉(zhuǎn)譯器204的第一微指令244。此外,當(dāng)引退單元214準(zhǔn)備好引退微指令226但其狀態(tài)指示此微指令226已造成一例外情況時(shí),引退單元214控制選擇控制輸入248而使得第二多工器292選擇來自復(fù)雜指令轉(zhuǎn)譯器296的第二微指令246。
簡單指令轉(zhuǎn)譯器204接收結(jié)構(gòu)指令242且將其解碼,以決定結(jié)構(gòu)指令242為簡單微指令或復(fù)雜微指令。簡單結(jié)構(gòu)指令242是簡單指令轉(zhuǎn)譯器204可為其發(fā)出所有實(shí)現(xiàn)微指令226以實(shí)現(xiàn)結(jié)構(gòu)指令242的指令,亦即復(fù)雜指令轉(zhuǎn)譯器296不為簡單結(jié)構(gòu)指令242提供任何實(shí)現(xiàn)微指令。相反的,復(fù)雜結(jié)構(gòu)指令242要求復(fù)雜指令轉(zhuǎn)譯器296提供若非全部、也是至少一部分的實(shí)現(xiàn)微指令226。在一實(shí)施例中,對結(jié)構(gòu)指令242的子集合而言,簡單指令轉(zhuǎn)譯器204發(fā)出實(shí)現(xiàn)結(jié)構(gòu)指令242的第一部分微指令244以實(shí)現(xiàn)結(jié)構(gòu)指令242,然后轉(zhuǎn)移控制權(quán)至復(fù)雜指令轉(zhuǎn)譯器296,最后發(fā)出剩下微指令246來實(shí)現(xiàn)結(jié)構(gòu)指令242。受控的第二多工器292首先將來自簡單指令轉(zhuǎn)譯器204的實(shí)現(xiàn)微指令244轉(zhuǎn)換成微指令226并提供至執(zhí)行單元212,其次將來自復(fù)雜指令轉(zhuǎn)譯器296的實(shí)現(xiàn)微指令246轉(zhuǎn)換成為微指令226并提供至執(zhí)行單元212。簡單執(zhí)行轉(zhuǎn)譯器204知道由復(fù)雜指令轉(zhuǎn)譯器294所采用的各種微程序碼程序的起始微程序碼地址并用來產(chǎn)生各種復(fù)雜結(jié)構(gòu)指令242的實(shí)現(xiàn)微指令226,并當(dāng)簡單指令轉(zhuǎn)譯器204解碼一復(fù)雜結(jié)構(gòu)指令242時(shí),提供相關(guān)的微程序碼地址252至復(fù)雜指令轉(zhuǎn)譯器296的非結(jié)構(gòu)微程序碼程序計(jì)數(shù)器232。簡單指令轉(zhuǎn)譯器204發(fā)出的所有第一微指令244是被相對高比例執(zhí)行的結(jié)構(gòu)指令242,特別是結(jié)構(gòu)指令242傾向由isa機(jī)器語言程序以頻繁的方式所執(zhí)行,而僅有相對小比例需要復(fù)雜指令轉(zhuǎn)譯器296提供第二微指令246。在一實(shí)施例中,簡單指令轉(zhuǎn)譯器204是利用眾所周知的合成工具所合成的布林邏輯門方塊。
復(fù)雜指令轉(zhuǎn)譯器296輸出實(shí)現(xiàn)第二微指令246序列至第二多工器292。核微程序碼只讀存儲器104或非核只讀存儲器108,儲存微程序碼程序的選擇性壓縮第二微程序碼指令251以及選擇性壓縮微程序碼指令249。核微程序碼只讀存儲器104/非核只讀存儲器108輸出選擇性壓縮第二微程序碼指令251/選擇性壓縮微程序碼指令249以響應(yīng)非結(jié)構(gòu)微程序碼存取地址254,其中非結(jié)構(gòu)微程序碼存取地址254儲存于非結(jié)構(gòu)微程序碼程序計(jì)數(shù)器232。通常,非結(jié)構(gòu)微程序碼程序計(jì)數(shù)器232自簡單指令轉(zhuǎn)譯器204接收微程序碼地址252的初始值,以響應(yīng)簡單指令轉(zhuǎn)譯器204所解碼的復(fù)雜結(jié)構(gòu)指令242。在其他情況下,比如響應(yīng)一重置或例外時(shí),非結(jié)構(gòu)微程序碼程序計(jì)數(shù)器232分別接收重置微程序碼程序地址或適當(dāng)?shù)奈⒊绦虼a例外處理地址。一般來說,微程序236通過微程序碼指令的大小(根據(jù)本發(fā)明的一實(shí)施例,微程序碼指令的大小為核微程序碼只讀存儲器104或非核只讀存儲器108中字組的大小)來遞增非結(jié)構(gòu)微程序碼程序計(jì)數(shù)器232,用以依序通過微程序碼程序。另外,微程序236依據(jù)由微轉(zhuǎn)譯器237所產(chǎn)生的目標(biāo)地址224來更新非結(jié)構(gòu)微程序碼程序計(jì)數(shù)器232,以響應(yīng)解碼控制類型微程序碼指令(例如分支指令);或響應(yīng)控制類型微指令226的執(zhí)行而由執(zhí)行單元212所產(chǎn)生的目標(biāo)地址來更新非結(jié)構(gòu)微程序碼程序計(jì)數(shù)器232;或是以位于核微程序碼只讀存儲器104或非核只讀存儲器108的非序列位置來更新非結(jié)構(gòu)微程序碼程序計(jì)數(shù)器232以啟動分支。核微程序碼只讀存儲器104以及非核只讀存儲器108被制造于與微處理器100相同的半導(dǎo)體晶粒上。
除了實(shí)現(xiàn)復(fù)雜結(jié)構(gòu)指令242的部分的簡單結(jié)構(gòu)指令242的第一微指令244,簡單指令轉(zhuǎn)譯器204也產(chǎn)生微指令信息255,微指令信息255寫入至指令間接暫存器(iir)235。儲存于指令間接暫存器235的微指令信息255包括有關(guān)結(jié)構(gòu)指令242被轉(zhuǎn)譯的信息,例如辨別由結(jié)構(gòu)指令242所指定的來源以及目標(biāo)暫存器以及結(jié)構(gòu)指令242的格式,諸如結(jié)構(gòu)指令242是否操作于存儲器的運(yùn)算元或于微處理器100的一架構(gòu)暫存器264。這樣允許微程序碼程序成為通用,也就是每一不同的來源及/或目標(biāo)架構(gòu)暫存器264不需要具有不同微程序碼程序。特別的是,簡單指令轉(zhuǎn)譯器204知道暫存器264,并在轉(zhuǎn)譯由結(jié)構(gòu)指令242所提供的暫存器信息后,經(jīng)由微指令信息255提供至?xí)捍嫫?64的適當(dāng)暫存器中。微指令信息255也包括位移域、即時(shí)域、常數(shù)域、對于每一來源運(yùn)算元以及微指令226本身的重新命名信息、指出實(shí)現(xiàn)結(jié)構(gòu)指令242的微指令226序列的第一以及最后一個(gè)微指令的信息、以及由簡單指令轉(zhuǎn)譯器204解碼結(jié)構(gòu)指令242時(shí)所收集的有用信息的其他位。
微轉(zhuǎn)譯器237接收來自解壓縮單元239的未壓縮微程序碼指令253以及指令間接暫存器235的內(nèi)容,并產(chǎn)生實(shí)現(xiàn)第二微指令246做響應(yīng)。微轉(zhuǎn)譯器237根據(jù)指令間接暫存器235所接收的信息,例如根據(jù)結(jié)構(gòu)指令242的格式以及由其指定的來源及/或目標(biāo)架構(gòu)暫存器264的組合,來轉(zhuǎn)譯某些未壓縮微程序碼指令253至微指令246的不同的序列。在一些狀況下,大部分的微指令信息255與未壓縮微程序碼指令253做合并以產(chǎn)生實(shí)現(xiàn)第二微指令246。在一實(shí)施例中,每一未壓縮微程序碼指令253為38位寬,且每一第二微指令246大約為200位寬。在一實(shí)施例中,微轉(zhuǎn)譯器237能夠自未壓縮微程序碼指令253,產(chǎn)生最多三個(gè)第二微指令246。微轉(zhuǎn)譯器237包括產(chǎn)生實(shí)現(xiàn)第二微指令246的布林邏輯門。
由于簡單指令轉(zhuǎn)譯器204產(chǎn)生微指令信息255,故核微程序碼只讀存儲器104與非核只讀存儲器108不需要儲存由指令間接暫存器235所提供的微指令信息255,因此微轉(zhuǎn)譯器237所提供的一個(gè)優(yōu)點(diǎn)為可減少核微程序碼只讀存儲器104與非核只讀存儲器108的大小。再者,微程序碼程序可包括較少的條件分支指令,因微程序碼程序不需要包括針對每一不同微指令格式、以及針對每一來源及/或目標(biāo)架構(gòu)暫存器264的組合的個(gè)別程序。例如,若復(fù)雜結(jié)構(gòu)指令242為存儲器型式,簡單指令轉(zhuǎn)譯器204可產(chǎn)生第一微指令244為開端,其包括第一微指令244以載入來自存儲器的來源運(yùn)算元而進(jìn)入暫時(shí)暫存器264,而微轉(zhuǎn)譯器237可產(chǎn)生第二微指令246以從暫時(shí)暫存器將結(jié)果儲存于存儲器;若復(fù)雜結(jié)構(gòu)指令242為暫存器格式,作為開端的第一微指令244可從結(jié)構(gòu)指令242指定的來源暫存器移動來源運(yùn)算元至?xí)簳r(shí)暫存器264,而微轉(zhuǎn)譯器237可產(chǎn)生第二微指令246以移動來自暫時(shí)暫存器的結(jié)果至由指令間接暫存器235所指定的架構(gòu)目標(biāo)暫存器264。在一實(shí)施例中,微轉(zhuǎn)譯器237在許多方面與申請日為2010年4月23日的美國專利案us12/766,244中所述的微轉(zhuǎn)譯器237相似,該美國專利請求優(yōu)先權(quán)至2009年8月14日的美國臨時(shí)申請案號us61/234,008,其在2011年2月17號公開為美國公開號us2011/0040953的專利,每一個(gè)在此通過引用將其整體并入本文,并供各方面說明之用。
在另一實(shí)施例中,指令轉(zhuǎn)譯器294不包括微轉(zhuǎn)譯器237,而自核微程序碼只讀存儲器104以及非核只讀存儲器108所存取的第二微程序碼指令251以及微程序碼指令249則在選擇性解壓縮的后,成為可由執(zhí)行單元212執(zhí)行的微指令。
應(yīng)注意的是,非結(jié)構(gòu)微程序碼程序計(jì)數(shù)器232與結(jié)構(gòu)程序計(jì)數(shù)器218不同;也就是,非結(jié)構(gòu)微程序碼程序計(jì)數(shù)器232不能維持結(jié)構(gòu)指令242的地址,而維持于非結(jié)構(gòu)微程序碼程序計(jì)數(shù)器232的地址并不在系統(tǒng)存儲器地址空間之內(nèi)。
如上所述,第一微程序碼指令247為儲存于微處理器100的一或多個(gè)的核微程序碼只讀存儲器104以及非核只讀存儲器108的非結(jié)構(gòu)指令,且第一微程序碼指令247是處理核102根據(jù)儲存于非結(jié)構(gòu)微程序碼程序計(jì)數(shù)器232的非結(jié)構(gòu)微程序碼存取地址254所存取與使用,進(jìn)而實(shí)現(xiàn)微處理器100的指令及結(jié)構(gòu)指令242。未壓縮微程序碼指令253由微轉(zhuǎn)譯器237轉(zhuǎn)譯成第二微指令246而由執(zhí)行單元212執(zhí)行,或在本發(fā)明的另一實(shí)施例中,未壓縮微程序碼指令253直接由執(zhí)行單元212執(zhí)行(在此為第二微指令246)。未壓縮微程序碼指令253為非結(jié)構(gòu)指令的意思為其并非微處理器100的指令集(isa)結(jié)構(gòu)的指令,而是根據(jù)與結(jié)構(gòu)指令集不同的指令集所編碼的。非結(jié)構(gòu)微程序碼程序計(jì)數(shù)器232并非由微處理器100的指令集結(jié)構(gòu)所定義,且與結(jié)構(gòu)定義程序計(jì)數(shù)器218有所不同。微程序碼用以實(shí)現(xiàn)以下所述微處理器的指令集結(jié)構(gòu)的某些或所有指令。響應(yīng)于解碼微程序碼實(shí)現(xiàn)結(jié)構(gòu)指令242,微處理器100,特別是簡單指令轉(zhuǎn)譯器294,將轉(zhuǎn)移控制權(quán)至與結(jié)構(gòu)指令242相關(guān)的微程序碼程序。微程序碼程序包括微程序碼指令。執(zhí)行單元212執(zhí)行未壓縮微程序碼指令253,或根據(jù)圖2的實(shí)施例,未壓縮微程序碼指令253還轉(zhuǎn)譯成第二微指令246而被執(zhí)行單元212所執(zhí)行。由執(zhí)行單元212執(zhí)行未壓縮微程序碼指令253(或由未壓縮微程序碼指令253轉(zhuǎn)譯的第二微指令246)的結(jié)果是由結(jié)構(gòu)指令242所定義的結(jié)果。因此,由執(zhí)行單元212集體執(zhí)行的關(guān)于結(jié)構(gòu)指令242的微程序碼程序(或由執(zhí)行單元212集體執(zhí)行的微程序碼程序指令所轉(zhuǎn)譯的第二微指令246)來執(zhí)行結(jié)構(gòu)指令242;也就是由執(zhí)行單元212集體執(zhí)行的實(shí)現(xiàn)未壓縮微程序碼指令253(或由執(zhí)行單元212集體執(zhí)行的未壓縮微程序碼指令253轉(zhuǎn)譯的第二微指令246),執(zhí)行結(jié)構(gòu)指令242所指定的動作于結(jié)構(gòu)指令242所指定的輸入值,而產(chǎn)生結(jié)構(gòu)指令242所定義的結(jié)果。此外,當(dāng)為了調(diào)整微處理器而重置微處理器時(shí),微程序碼指令可被執(zhí)行(或轉(zhuǎn)譯成被執(zhí)行的微指令)。
根據(jù)本發(fā)明的一實(shí)施例,圖1的仲裁邏輯106包括要求佇列(圖中并未顯示),其持有接收自處理核102并對非核只讀存儲器108或非核微程序碼修補(bǔ)隨機(jī)存取存儲器114進(jìn)行存取的要求。根據(jù)本發(fā)明的一實(shí)施例,每一介于仲裁邏輯106以及處理核102的總線112包括要求部分以及響應(yīng)部分。關(guān)于要求部分,處理核102指定所要求的微程序指令字組的非結(jié)構(gòu)微程序碼存取地址254。關(guān)于響應(yīng)部分,仲裁邏輯106提供微程序碼指令字組、地址、核編號以及有效指針。微程序碼指令字組、地址以及核編號僅于有效指針指示有效時(shí)才為有效。核編號指定仲裁邏輯106提供一響應(yīng)至先前要求存取非核只讀存儲器108或非核微程序碼修補(bǔ)隨機(jī)存取存儲器114的處理核102。地址指定由非核只讀存儲器108或非核微程序碼修補(bǔ)隨機(jī)存取存儲器114所存取的微程序碼指令字組的地址。根據(jù)本發(fā)明的一實(shí)施例,仲裁邏輯106于總線112設(shè)置延遲(stall)信號至處理核102,用以指出仲裁邏輯106不能接收更多來自處理核102要求存取非核只讀存儲器108的請求。只要能夠再次接收請求,仲裁邏輯106取消設(shè)置延遲信號。根據(jù)本發(fā)明的一實(shí)施例,若暫存器別名表206設(shè)置延遲信號至指令轉(zhuǎn)譯器294以指示無法接收更多的微指令226時(shí),則指令轉(zhuǎn)譯器294清除任何正在進(jìn)行的存取非核只讀存儲器108的動作。只要暫存器別名表取消設(shè)置延遲信號,微程序236會在傳送至?xí)捍嫫鲃e名表206的最后微指令226的地址后的下一地址開始存取微程序碼指令。根據(jù)本發(fā)明的另一實(shí)施例,指令轉(zhuǎn)譯器294儲存正在存取非核只讀存儲器108或非核微程序碼修補(bǔ)隨機(jī)存取存儲器114的狀態(tài),以便能避免重新存取相關(guān)的正在存取的微程序碼指令。
非核只讀存儲器108的存取延遲大于對每一核微程序碼只讀存儲器104的存取延遲。根據(jù)本發(fā)明的一實(shí)施例,核微程序碼只讀存儲器104具有三個(gè)周期的存取延遲,并且非核只讀存儲器108的存取延遲在實(shí)施例中是可變的,其中其讀取端口與多個(gè)處理核102相共用。
參考圖3的方塊圖,其更詳細(xì)顯示根據(jù)本發(fā)明圖2實(shí)施例所述的解壓縮單元239,同樣顯示于圖3的是修補(bǔ)內(nèi)容可尋址存儲器(cam)306。當(dāng)非結(jié)構(gòu)微程序碼存取地址254符合修補(bǔ)內(nèi)容可尋址存儲器306中項(xiàng)目之一的內(nèi)容時(shí),持有修補(bǔ)地址308的可尋址存儲器306會將修補(bǔ)地址308從可尋址存儲器306輸出至微程序236,以響應(yīng)非結(jié)構(gòu)微程序碼存取地址254。這種情況下,微程序236輸出修補(bǔ)地址308作為非結(jié)構(gòu)微程序碼存取地址254而不是下一序列存取地址(或目標(biāo)地址224),以響應(yīng)非核微程序碼修補(bǔ)隨機(jī)存取存儲器114在總線112上輸出修補(bǔ)微程序碼指令249。這樣將引發(fā)從非核微程序碼修補(bǔ)隨機(jī)存取存儲器114擷取修補(bǔ)微程序碼指令249,而不是分別從非核只讀存儲器108或核微程序碼只讀存儲器104擷取不想要的微程序碼指令249或第二微程序碼指令251。另一種做法是將可尋址存儲器306以及非核微程序碼修補(bǔ)隨機(jī)存取存儲器114的內(nèi)容在響應(yīng)包括系統(tǒng)軟件的結(jié)構(gòu)指令時(shí)加以載入,這些軟件可以是基本輸入輸出系統(tǒng)(bios)或運(yùn)作于微處理器100的操作系統(tǒng)。解壓縮單元239包括解壓縮器394、緩沖器398、三端輸入多工器392以及控制邏輯396。
解壓縮器394自圖2的第一多工器222接收壓縮的第一微程序碼指令247,并解壓縮此壓縮的第一微程序碼指令247而成未壓縮微程序碼指令353,且提供至三端輸入多工器392的第一輸入端。根據(jù)本發(fā)明的一實(shí)施例,解壓縮器394包括由暫存器傳遞語言(rtl)碼(如硬件描述(verilog)碼)所合成的可程序邏輯陣列(pla),并由圖6的可程序邏輯陣列產(chǎn)生器616自動產(chǎn)生。解壓縮器394對壓縮的第一微程序碼指令247解壓縮的方式的實(shí)施例,將于下文中詳細(xì)敘述。
若控制邏輯396要求緩沖器398接收并載入28位的第一微程序碼指令247的位[15:0],則緩沖器398遵循其要求而執(zhí)行,否則緩沖器398維持其先前的數(shù)值。根據(jù)本發(fā)明的一實(shí)施例,在28位第一微程序碼指令247的位[15:0]載入至緩沖器398的時(shí)脈周期后的下一個(gè)時(shí)脈周期中,緩沖器398的內(nèi)容加上目前28位微程序碼字組247的位[21:0],以產(chǎn)生三端輸入多工器392的第二輸入端的38位結(jié)果355。
控制邏輯396接收微程序碼字組247的位[27:16],并決定其數(shù)值是否為既定的逃離指針數(shù)值。根據(jù)本發(fā)明的一實(shí)施例,既定逃離指針數(shù)值為0x3ff。若是如此,控制邏輯396控制暫存器398載入28位第一微程序碼指令247的位[15:0]。此外,當(dāng)?shù)谝欢喙て?22提供下一個(gè)28位微程序碼字組247時(shí),控制邏輯396控制三端輸入多工器392選擇其第二輸入端以提供未壓縮微程序碼指令253至微轉(zhuǎn)譯器237,也就是選擇合并緩沖器398的16位內(nèi)容與28位的微程序碼字組247的位[21:0]的38位結(jié)果355。下一個(gè)28位微程序碼字組247會是由非核只讀存儲器108/核微程序碼只讀存儲器104所擷取的后續(xù)字組的微程序碼指令249/后續(xù)字組的第二微程序碼指令251,其跟隨在載入至緩沖器398的字組247后面。
根據(jù)本發(fā)明的另一實(shí)施例,解壓縮單元239可于相同時(shí)脈周期中接收具有逃離指針的微程序字組,以及兩段未壓縮微程序碼指令。在此實(shí)施例中,緩沖器398被省略,且在該時(shí)脈周期時(shí)該相鄰字組的適當(dāng)部分被合并,并且提供至三端輸入多工器392的第二輸入端,而控制邏輯396則控制三端輸入多工器392選擇其第二輸入端。
三端輸入多工器392在第三輸入端接收38位微程序碼字組112,例如來自非核微程序碼修補(bǔ)隨機(jī)存取存儲器114。若目前微程序碼指令的來源是38位寬的存儲器,例如來自非核微程序碼修補(bǔ)隨機(jī)存取存儲器114,控制邏輯396控制三端輸入多工器392以選擇其第三輸入端(也就是38位的微程序碼字組112),否則控制邏輯396控制三端輸入多工器392選擇其第一輸入端或第二輸入端。若目前微程序碼指令的來源是28位寬的存儲器時(shí),例如儲存(除了壓縮微程序碼指令外)要求合并的未壓縮微程序碼字組的分離部分的非核只讀存儲器108或核微程序碼只讀存儲器104、以及若先前字組包括逃離指針(即圖4的第二逃離指針432)時(shí),控制邏輯396控制三端輸入多工器392選擇其第二輸入端(也就是38位的結(jié)果355)。若目前微程序碼指令的來源為儲存壓縮微程序碼指令(除了未壓縮微程序碼字組的分離部分以及逃離指針外)的28位寬的存儲器,而且目前字組并未包括逃離指針時(shí),控制邏輯控制三端輸入多工器392選擇其第一輸入端(也就是解壓縮器394的38位的未壓縮微程序指令353)。
根據(jù)本發(fā)明的一實(shí)施例,由三端輸入多工器392提供至微轉(zhuǎn)譯器237的38位未壓縮微程序碼指令253包括:根據(jù)一些指令格式,且通常為非立即指令的13位操作碼域、5位的第一來源運(yùn)算元地址域、5位的第二來源運(yùn)算元地址域、5位的目標(biāo)運(yùn)算元地址域、指定運(yùn)算元大小的4位大小域、指定每一5位運(yùn)算元暫存器域如何由微轉(zhuǎn)譯器237進(jìn)行解碼的4位域、指定微程序碼指令在執(zhí)行x86指令的連續(xù)微程序碼指令中是否為最后指令的一位“.t”域、以及一額外位。通常為立即指令的其他38位未壓縮微程序碼指令253的格式包括:包括16位即時(shí)數(shù)值的16位即時(shí)域,例如一即時(shí)運(yùn)算元或跳躍指令的目標(biāo)地址、以及上述其他域的子集合,如除了5位第二運(yùn)算元域以外的域以及較小的操作碼域。
請參考圖4,其顯示由組合程序選擇性壓縮微程序碼指令的流程圖。圖4包括兩個(gè)流程圖,說明將第一微程序碼組合語言指令402組合進(jìn)單一字組壓縮二進(jìn)制指令404的范例,以及將由第一逃離指針412表示的第二微程序碼組合語言指令414與包括逃離指針的多字組未壓縮二進(jìn)制指令進(jìn)行組合的范例。
第一流程圖說明將第一微程序碼組合語言指令402組合進(jìn)以單一字組儲存于微程序碼存儲器的壓縮二進(jìn)制指令404,微程序碼存儲器如核微程序碼只讀存儲器104或非核只讀存儲器108。圖4的實(shí)施例中,單一字組為28位寬,也就是如圖所示的核微程序碼只讀存儲器104或非核只讀存儲器108的寬度。當(dāng)單一字組壓縮二進(jìn)制指令404由核微程序碼只讀存儲器104或非核只讀存儲器108讀取出來時(shí),如本發(fā)明所述,將經(jīng)由圖3的解壓縮器394來解壓縮為未壓縮微程序碼指令。在圖4的實(shí)施例中。第一微程序碼組合語言指令402將第一通用暫存器r2以及第二通用暫存器r3的內(nèi)容相加,并將結(jié)果寫入第三通用暫存器r4。在此實(shí)施例中,此為在組合之時(shí)存在壓縮表項(xiàng)目的微程序碼指令,其允許組合語言將其壓縮,并在下文終將有詳細(xì)描述。
第二流程圖說明冠有第一逃離指針412的第二組合語言微程序碼指令414組合至多字組未壓縮二進(jìn)制指令424的情形,多字組未壓縮二進(jìn)制指令424分離成兩個(gè)28位字組。第一字組包括位于第一字組的既定位的第二逃離指針432。第二逃離指針432為圖2的解壓縮單元239(特別是控制邏輯396)用以響應(yīng)與辨識,以將包含第二逃離指針432的字組的剩下部分434,與來自核微程序碼只讀存儲器104或非核只讀存儲器108的下個(gè)字組的一部分438相結(jié)合。在本發(fā)明的一實(shí)施例中,逃離指針既定數(shù)值為0x3ff,第一字組的既定位是位[27:16]。然而既定位以及既定數(shù)值并非限定于實(shí)施例,而其他的實(shí)施例則為具有不同既定數(shù)值以及不同既定位。逃離指針為一既定字串(如:圖4所示的“escape”),程序設(shè)計(jì)者可在微程序碼來源碼文件中,在微程序碼指令前插入一行,這樣會使得組合語言不會壓縮隨后的微程序碼指令,但會分離該指令為兩個(gè)具有壓縮指令的長度的字組,且于二進(jìn)制字組的開頭包含第二逃離指針432。
第一字組的下16位為多字組未壓縮二進(jìn)制指令424的下16位434,第二字組的上22位為多字組未壓縮二進(jìn)制指令424的上22位438。當(dāng)控制邏輯396于第一字組中偵測到第二逃離指針432位于開頭的位置時(shí),下16位434以及上22位438將由解壓縮單元239加以組合。在實(shí)際操作上,第二字組的上6位436可全為零。在圖4的實(shí)施例中,第二微程序碼組合語言微程序碼指令414將第二通用暫存器r3以及結(jié)構(gòu)暫存器(例如,x86結(jié)構(gòu)暫存器esi)的內(nèi)容相加,并將結(jié)果寫入第三通用暫存器r4。在此實(shí)施例中,該微程序碼指令在組合操作進(jìn)行時(shí)壓縮表項(xiàng)目并不存在,故需要包括第一逃離指針412以避免產(chǎn)生組合錯(cuò)誤,這部分將于下文中做更詳細(xì)的說明。
請參考圖5的流程圖,其說明建立選擇性壓縮微程序碼的流程。流程開始于來源碼502,其中來源碼502由微程序碼設(shè)計(jì)者所開發(fā),而來源微程序碼502可包括第一逃離指針412。組合程序504接收來源碼502以及壓縮表514。在一實(shí)施例中,壓縮表514可包含于由以下所述的壓縮程序512所產(chǎn)生的文件中。組合程序504使用壓縮表514來組合來源碼502,以產(chǎn)生選擇性壓縮二進(jìn)制微程序碼506。選擇性壓縮二進(jìn)制微程序碼506包括單一字組壓縮二進(jìn)制指令(如圖4的單一字組壓縮二進(jìn)制指令404)以及多字組未壓縮二進(jìn)制指令,多字組未壓縮二進(jìn)制指令包括第二逃離指針432,如圖4的多字組未壓縮二進(jìn)制指令424。來源碼502通常包括多來源碼文件,多來源碼文件經(jīng)由組合程序504的組合而產(chǎn)生選擇性壓縮二進(jìn)制微程序碼506。
組合程序504也產(chǎn)生所有微程序碼指令的列表508,所有微程序碼指令的列表508包含于選擇性壓縮二進(jìn)制微程序碼506之中。在一實(shí)施例中,所有微程序碼指令的列表508是人類可讀的清單,該清單包括在選擇性壓縮二進(jìn)制微程序碼506中的每一微程序碼指令的項(xiàng)目。對于每一微程序碼指令,該項(xiàng)目指定了:(1)其于核微程序碼只讀存儲器104或非核只讀存儲器108的相關(guān)地址;(2)其未壓縮二進(jìn)制表示式,例如其38位二進(jìn)制表示式;以及(3)一種與其組合語言表示式相似但經(jīng)修正以方便壓縮程序512產(chǎn)生壓縮表514。根據(jù)微程序碼指令是否由來源碼502的第一逃離指針412所標(biāo)示的微程序碼指令,38位數(shù)值的未壓縮二進(jìn)制表示式,若非壓縮為單一字組壓縮二進(jìn)制指定404,就是分離成圖4的多字組未壓縮二進(jìn)制指令424的下16位434以及上22位438。
壓縮程序512接收所有微程序碼指令的列表508,并借此產(chǎn)生壓縮表514。壓縮表514為組合程序504的輸入,隨后組合程序504組合來源碼502而成為選擇性壓縮二進(jìn)制微程序碼506。通常,隨后的組合為新的或修改后的來源碼502。此外,隨后的組合可與原來用以產(chǎn)生壓縮表514的來源微程序碼502相同,例如當(dāng)壓縮表一開始是空的時(shí)候。
壓縮程序512檢查所有微程序碼指令的列表508,并產(chǎn)生唯一指令表。舉例來說,所有微程序碼指令的列表508可包括多個(gè)具有一個(gè)指令的實(shí)例,其將r2減去r1并將結(jié)果放置于r3;然而,當(dāng)產(chǎn)生唯一指令表時(shí),壓縮程序512將這些實(shí)例都當(dāng)作一單一與唯一的微程序碼。一個(gè)使得壓縮微程序碼有極高可能性的事實(shí)在于,對于許多微程序碼指令而言,多個(gè)具有相同指令的實(shí)例可存在來源碼502中。使微程序碼指令單一化的的準(zhǔn)則可根據(jù)不同實(shí)施例使用的壓縮方法而改變,以下將通過一實(shí)施例做詳細(xì)說明。在一實(shí)施例中,壓縮程序512是以python語言所撰寫的程序。
在產(chǎn)生唯一指令表之后,壓縮程序512指定每一唯一微程序碼指令一對應(yīng)的唯一數(shù)值。壓縮表514包括一對一對應(yīng)的唯一微程序碼指令以及唯一壓縮數(shù)值。在隨后的組合實(shí)例中,組合程序504利用此對應(yīng)關(guān)系來壓縮并未由逃離指針標(biāo)示的來源碼502組合語言指令而成為壓縮指令404。壓縮數(shù)值變成單一字組壓縮二進(jìn)制指令404(或成為壓縮二進(jìn)制指令的一部分),解壓縮器394解壓縮該二進(jìn)制數(shù)值而成為未壓縮微程序指令353(或其一部分是未壓縮微程序指令)。在一實(shí)施例中,僅對38位未壓縮二進(jìn)制表示式的一部分進(jìn)行壓縮,而剩下的位并未壓縮。在一實(shí)施例中,將38位未壓縮二進(jìn)制表示法的22個(gè)位,壓縮成28位壓縮二進(jìn)制指令404中的12個(gè)位,38位未壓縮二進(jìn)制表示式的剩下的16個(gè)位跳過未壓縮程序而成為28位壓縮二進(jìn)制指令404的16位。如下所述,解壓縮器394執(zhí)行相反的相似流程。
在一實(shí)施例中,壓縮器512產(chǎn)生三個(gè)壓縮表514。壓縮表514之一指定唯一壓縮數(shù)值對應(yīng)至即時(shí)跳躍微程序碼指令;壓縮表514之一指定唯一壓縮數(shù)值對應(yīng)至即時(shí)非跳躍微程序碼指令;以及壓縮表514之一指定唯一壓縮數(shù)值對應(yīng)至所有其他微程序碼指令,在此稱為“雜項(xiàng)(miscellaneous)”微程序碼指令。在一實(shí)施例中,壓縮的即時(shí)跳躍指令的28位壓縮二進(jìn)制指令404具有二進(jìn)制“1”的數(shù)值于首位位(亦即位[27]),然而即時(shí)非跳躍微程序碼指令以及雜項(xiàng)微程序碼指令的28位壓縮二進(jìn)制指令404具有二進(jìn)制“0”的數(shù)值于首位位,即時(shí)非跳躍微程序碼指令的28位壓縮二進(jìn)制指令404在位[26:16]中的數(shù)值為0x000至0x2ff之間,而位于雜項(xiàng)微程序碼指令的28位壓縮二進(jìn)制指令404的位[26:16]中的數(shù)值為0x300至0x7ff之間。在一實(shí)施例中,即時(shí)跳躍以及非即時(shí)跳躍的28位壓縮二進(jìn)制指令404的即時(shí)數(shù)值位于28位微程序碼字組247的位[15:0]中。
壓縮器512也產(chǎn)生解壓縮描述516。解壓縮描述516在概念上可理解為壓縮表514的逆轉(zhuǎn),亦即解壓縮描述516包括壓縮表514的唯一壓縮數(shù)值與唯一未壓縮微程序碼指令二進(jìn)制表示式的一對一對應(yīng)關(guān)系(或其一部分)。如上所述,解壓縮器394可跳過壓縮第一微程序碼指令247的部分位(在一實(shí)施例為16位),使得解壓縮描述516僅需包括部分的唯一12位壓縮數(shù)值與未壓縮微程序碼指令二進(jìn)制表示式的唯一22位的一對一對應(yīng)關(guān)系。解壓縮器394將唯一22位部分與跳過的16位部分結(jié)合以產(chǎn)生最終提供至微轉(zhuǎn)譯器237的38位未壓縮微程序碼指令253。因此,在一實(shí)施例中,解壓縮描述516對應(yīng)壓縮表514的唯一12位壓縮數(shù)值至唯一22位數(shù)值,且該對應(yīng)關(guān)系用于制造或模擬輸出唯一22位數(shù)值作為未壓縮微程序碼指令353的一部分,以響應(yīng)接收對應(yīng)的壓縮第一微程序碼指令247的唯一12位壓縮數(shù)值的位[27:16]。
邏輯產(chǎn)生程序518(如眾所皆知的espressologicminimizerprogram)將解壓縮描述516轉(zhuǎn)變成解壓縮器暫存器傳遞語言文件524,解壓縮器暫存器傳遞語言文件524可用以制造或模擬解壓縮器394。在一實(shí)施例中,解壓縮器暫存器傳遞語言文件524可合成至形成解壓縮器394的可程序邏輯陣列中。
一旦微處理器100的實(shí)例,特別是硬件的解壓縮器394,利用解壓縮器暫存器傳遞語言文件524所給定實(shí)例而被制造或模擬時(shí),則由微處理器100的實(shí)例所執(zhí)行的隨后選擇性壓縮二進(jìn)制微程序碼506,必須由組合程序504利用壓縮表514進(jìn)行組合,其中壓縮表514對應(yīng)至產(chǎn)生解壓縮器暫存器傳遞語言文件524的解壓縮描述516。否則,解壓縮器394可能不正確地解壓縮選擇性壓縮二進(jìn)制微程序碼506。
舉例來說,由微處理器100的模擬軟件所執(zhí)行的選擇性壓縮二進(jìn)制微程序碼506,必須由組合程序504利用壓縮表514進(jìn)行組合,其中壓縮表514對應(yīng)于在模擬軟件中使用解壓縮器暫存器傳遞語言文件524而產(chǎn)生的解壓縮器描述516。根據(jù)另一實(shí)施例,其中載入至非核微程序碼修補(bǔ)隨機(jī)存取存儲器114的修補(bǔ)微程序碼被選擇性地壓縮,選擇性壓縮二進(jìn)制微程序碼506必須由組合程序504利用壓縮表514進(jìn)行組合,其中壓縮表514對應(yīng)至解壓縮器暫存器傳遞語言文件524所產(chǎn)生的解壓縮器描述516,并且解壓縮器描述516用以制造微處理器100的實(shí)例。
根據(jù)另一實(shí)施例,微處理器具有許多半導(dǎo)體層,而通常核微程序碼只讀存儲器104與非核只讀存儲器108被制造于最后一層,這樣可提供給微程序碼開發(fā)者一個(gè)繼續(xù)發(fā)展微程序碼的機(jī)會,盡管微處理器100需要先被制造的半導(dǎo)體層(通常包括解壓縮器394)已被制造完成。在此狀況下,必須由組合程序504利用壓縮表514做組合,其中壓縮表514對應(yīng)至解壓縮描述516,而解壓縮描述516利用解壓縮器暫存器傳遞語言文件524來制造微處理器100的實(shí)例。這點(diǎn)特別有利,因?yàn)槟軌蛟谀承┣闆r提供微程序碼設(shè)計(jì)者在硬件設(shè)計(jì)者完成后數(shù)周的時(shí)間內(nèi)繼續(xù)開發(fā)微程序碼。在此狀況下,來源碼502可包括未在所有微程序碼指令的列表508中的新微程序碼指令,其中所有微程序碼指令的列表508用以自微處理器100的實(shí)例制造而產(chǎn)生解壓縮器暫存器傳遞語言文件524。在此狀況下,微程序碼設(shè)計(jì)者需要在新微程序碼指令之前插入第一逃離指針412至來源碼502,如以下對圖6步驟608的描述。
圖6所示的流程圖說明利用組合程序組合微程序碼的流程。流程開始于步驟602。
在步驟602中,組合程序504接收圖5的來源碼502以及壓縮表514。組合程序504利用壓縮表514組合來源碼502,來源碼可包含逃離指針412。在組合實(shí)例開始時(shí),壓縮表514可為空的。要注意的是,微程序碼開發(fā)者可能不知是否他已經(jīng)插入了一新的微程序碼指令至來源碼502,例如在目前壓縮表514并未具有一微程序碼指令的對應(yīng)關(guān)系。在此情況下,當(dāng)組合程序504組合來源碼502時(shí)就會產(chǎn)生相關(guān)的錯(cuò)誤。流程則前進(jìn)至步驟604。
在步驟604中,若組合程序504判斷步驟602在組合中發(fā)生錯(cuò)誤則流程前進(jìn)至步驟606,否則流程前進(jìn)至步驟612。特別的是,組合錯(cuò)誤可能因?yàn)閴嚎s表514不包括來源碼502微程序碼指令的對應(yīng)關(guān)系所造成,其中來源碼502微程序碼指令并未由第一逃離指針412所標(biāo)示。
步驟606中,組合程序504輸出所有微程序碼指令的列表508給來源碼502,流程前進(jìn)至步驟608。
步驟608中,在組合程序504因壓縮表514并未包括對應(yīng)關(guān)系而產(chǎn)生錯(cuò)誤的該微程序碼指令的前面,插入第一逃離指針412至來源碼502中。在一實(shí)施例中,由微程序碼設(shè)計(jì)者插入第一逃離指針412。在一實(shí)施例中,可通過一程序利用由組合程序504所產(chǎn)生的錯(cuò)誤信息,自動插入第一逃離指針412。在另一組合來源碼502的實(shí)例中流程將回到步驟602,直到?jīng)]有錯(cuò)誤產(chǎn)生為止。應(yīng)注意的是,壓縮表514在來源碼502第一次被組合時(shí)是空的,在此狀態(tài)下,組合程序504會對來源碼502的所有微程序指令產(chǎn)生錯(cuò)誤;然而,因?yàn)榻M合程序已產(chǎn)生所有微程序碼指令的列表508,因此壓縮器512可執(zhí)行用以產(chǎn)生壓縮表514,而相同的來源碼502(沒有插入第一逃離指針412的)可被重新組合而產(chǎn)生可由微處理器100的實(shí)例所執(zhí)行的選擇性壓縮二進(jìn)制微程序碼506,其中微處理器100的實(shí)例包括解壓縮器394的實(shí)例,在第二實(shí)例中,解壓縮描述516產(chǎn)生解壓縮器暫存器傳遞語言文件524,解壓縮器暫存器傳遞語言文件524產(chǎn)生解壓縮器394的實(shí)例,而解壓縮描述516則由壓縮器512所產(chǎn)生。
在步驟612中,組合程序504輸出可用以制造微處理器100的所有微程序碼指令的列表508、以及選擇性壓縮二進(jìn)制微程序碼506。具體而言,選擇性壓縮二進(jìn)制微程序碼506包括位于非核只讀存儲器108、核微程序碼只讀存儲器104及/或非核微程序碼修補(bǔ)隨機(jī)存取存儲器114的單一字組壓縮二進(jìn)制指令404以及多字組未壓縮二進(jìn)制指令424。流程結(jié)束于步驟612。
參考圖7,所示的流程圖說明圖2的復(fù)雜指令轉(zhuǎn)譯器296的動作,尤其是圖3的解壓縮單元239的動作。流程開始于步驟702。
在步驟702中,圖3的控制邏輯396接收圖2的28位的壓縮第一微程序碼指令247的位[27:16],并對其解碼。流程繼續(xù)至步驟704。
在步驟704中,控制邏輯396判斷是否在步驟702解碼的目前28位的壓縮第一微程序碼指令247包括逃離指針。在一實(shí)施例中,若28位的壓縮第一微程序碼指令247的既定位等于一既定數(shù)值時(shí),控制邏輯判斷目前28位的壓縮第一微程序碼指令247包括逃離指針。在一實(shí)施例中,既定位為位[27:16],而既定數(shù)值為0x3ff,然而既定位以及既定數(shù)值并非做限定實(shí)施例之用。若目前28位的壓縮第一微程序碼指令247包括逃離指針,流程進(jìn)行至步驟706;否則流程進(jìn)行至步驟712。
在步驟706中,控制邏輯396控制緩沖器398載入28位的壓縮第一微程序碼指令247的位[15:0]。流程進(jìn)行至步驟708。
在步驟708中,當(dāng)下一28位的壓縮第一微程序碼指令247(例如,來自核微程序碼只讀存儲器104或非核只讀存儲器108)到達(dá)時(shí),控制邏輯396控制三端輸入多工器392以選擇由緩沖器398所輸出的16位輸出(例如,于步驟702解碼的28位的壓縮第一微程序碼指令247的位[15:0])以及下一28位的壓縮第一微程序碼指令247的位[21:0]兩者所結(jié)合的38位結(jié)果355,并輸出此38位結(jié)果355作為38位未壓縮微程序碼指令253,其中此38位未壓縮微程序碼指令253在此情況下為未壓縮的。在一實(shí)施例中,因?yàn)楣芫€延遲或與其他處理核102爭奪使用非核只讀存儲器108之故,下一28位的壓縮第一微程序碼指令247并未在一相對較大數(shù)量的時(shí)脈周期內(nèi)到達(dá)。流程前進(jìn)至步驟714。
在步驟712中,解壓縮器394解壓縮28位的壓縮第一微程序碼指令247成為38位的未壓縮微程序碼指令353。如上所述,在一實(shí)施例中,解壓縮器394將28位的壓縮第一微程序碼指令247的12位對應(yīng)至38位的未壓縮微程序碼指令353的22位,解壓縮器394跳過28位的壓縮第一微程序碼指令247剩下的16位不進(jìn)行對應(yīng),但這16位與對應(yīng)的22位相結(jié)合而產(chǎn)生38位的未壓縮微程序碼指令353。在一實(shí)施例中,解壓縮器394也包括多個(gè)多工器,其中多個(gè)多工器將對應(yīng)的22位以及跳過的16位的每一位,導(dǎo)向至38位的未壓縮微程序碼指令353的各個(gè)位位置,以響應(yīng)由解碼28位的壓縮第一微程序碼指令247的邏輯所產(chǎn)生的選擇信號。舉例來說,在此實(shí)例中,壓縮器512產(chǎn)生三個(gè)壓縮表514以對應(yīng)即時(shí)跳躍、即時(shí)非跳躍以及雜項(xiàng)微程序碼指令,多工器直接根據(jù)三種類型的微程序碼指令中,哪一種微程序碼指令被壓縮,而將對應(yīng)的22位以及通過的16位導(dǎo)向至38位的未壓縮微程序碼指令353。舉例來說,在一實(shí)施例中,在即時(shí)類型的微程序碼指令的狀態(tài)下,多個(gè)多工器將跳過的16位直接指向38位的未壓縮微程序碼指令353的即時(shí)域,盡管跳躍以及非跳躍的未壓縮微程序碼指令353的即時(shí)域位置不相同;然而在雜項(xiàng)指令的情況下,多個(gè)多工器將跳過的16位的子集合指向非即時(shí)的未壓縮微程序碼指令353的不同區(qū)域及/或子區(qū)域;并且多工器根據(jù)三種類型的壓縮第一微程序碼指令247的何者被解壓縮,而將對應(yīng)的22位的子集合指向不同的38位的未壓縮微程序碼指令353的區(qū)域及/或子區(qū)域??刂七壿?96控制三端輸入多工器392自解壓縮器394選擇38位的未壓縮微程序碼指令353,并且輸出選擇結(jié)果353作為選擇性壓縮的38位未壓縮微程序碼指令253,在此情況下為對目前28位的壓縮第一微程序碼指令247解壓縮,其中壓縮第一微程序碼指令247為步驟702所編碼。流程前進(jìn)制步驟714。
在步驟714,微轉(zhuǎn)譯器237轉(zhuǎn)譯選擇性解壓縮38位未壓縮微程序碼指令253成為第二微指令246,其中第二微指令246可由微處理器100的執(zhí)行單元212所執(zhí)行,流程結(jié)束于步驟714。
圖8顯示一實(shí)施例中非核只讀存儲器108為28位寬并維持壓縮的微程序碼字組,核微程序碼只讀存儲器104為28位寬并維持壓縮微程序碼字組,以及非核微程序碼修補(bǔ)隨機(jī)存取存儲器114為38位寬并維持非壓縮微程序碼字組。在另一實(shí)施例中,非核只讀存儲器108為38位寬并維持未壓縮的微程序碼字組而非壓縮的微程序碼字組,如圖9、11、13所示,在此情況下三端輸入多工器392可于一輸入端接收來自非核只讀存儲器108的38位微程序碼字組。在另一實(shí)施例,核微程序碼只讀存儲器104為38位寬并維持非壓縮微程序碼字組而非壓縮的微程序碼字組,如圖10所示,其中三端輸入多工器392可于一輸入端接收來自核微程序碼只讀存儲器104的38位的微程序碼字組。在另一實(shí)施例中,非核微程序碼修補(bǔ)隨機(jī)存取存儲器114為28位寬并維持壓縮微程序碼字組而不是非壓縮程序碼字組,如圖9所示,在此情況下來自非核微程序碼修補(bǔ)隨機(jī)存取存儲器114的28位微程序碼字組可提供至第一多工器222的一輸入端,并選擇以供應(yīng)給三端輸入多工器392、解壓縮器394、控制邏輯396以及緩沖器398。再者,根據(jù)本發(fā)明的另一實(shí)施例,每一處理核102包括核修補(bǔ)隨機(jī)存取存儲器1299,核修補(bǔ)隨機(jī)存取存儲器1299的功能與非核微程序碼修補(bǔ)隨機(jī)存取存儲器114,除了核修補(bǔ)隨機(jī)存取存儲器1299并非共用于多個(gè)處理核102而是各自對應(yīng)至相對的處理核102,如圖12、13所示。在圖12的實(shí)施例中,核修補(bǔ)隨機(jī)存取存儲器1299為38位寬并維持未壓縮微程序字組,在此情況下三端輸入多工器392可于一輸入端接收來自核修補(bǔ)隨機(jī)存取存儲器1299的38位微程序碼字組。在圖13的實(shí)施例中,核修補(bǔ)隨機(jī)存取存儲器1299為28位寬并維持壓縮微程序碼字組,在此情況下第一多工器222可在一輸入端接收來自核修補(bǔ)隨機(jī)存取存儲器1299的28位微程序碼字組。如上所述,在每一實(shí)施例中微程序碼存儲器為28位寬并維持壓縮微程序碼字組,微程序碼存儲器也可包括多字組未壓縮二進(jìn)制指令424,多字組未壓縮二進(jìn)制指令424可分為兩個(gè)28位的字組。
在此所述的選擇性壓縮微程序碼的性能的另一個(gè)優(yōu)點(diǎn),就是作為儲存微程序碼于微處理器的可程序非易失存儲器越來越成為商業(yè)上可行的方式,微程序碼可一直被開發(fā)直到微處理器100的零件的微程序碼存儲器的時(shí)間可被編程為止。再者,若零件/存儲器可在現(xiàn)場被編程的,例如由使用者或現(xiàn)場技術(shù)人員,則使用者或技術(shù)人員還可在現(xiàn)場重新編程零件以修復(fù)錯(cuò)誤。在任一情況中,新的來源微程序碼502可能必須包括逃離指針,因?yàn)橛布慕鈮嚎s器394于該時(shí)間點(diǎn)被修復(fù)。
盡管所述的多個(gè)實(shí)施例中微程序碼字組以及存儲器皆被指定寬度,其中以范例敘述的三個(gè)實(shí)施例,其他實(shí)施例中的微程序碼字組以及存儲器可為不同寬度。再者,盡管在此所述的實(shí)施例中,壓縮微程序碼指令的寬度為特定寬度,并且未壓縮微程序碼指令的寬度為特定寬度,而這些實(shí)施例以范例的方式敘述,而其他實(shí)施例中各自的壓縮以及非壓縮微程序碼指令可具有不同寬度。再者,盡管在此所述的多個(gè)實(shí)施例中使用選擇性壓縮微程序碼指令于多核處理器,其他實(shí)施例包括單一微處理器,其中單一微處理器用以選擇性壓縮微程序碼并包括具有壓縮微程序碼指令的微程序碼存儲器,而微程序碼存儲器具有未壓縮微程序碼指令亦可運(yùn)用本發(fā)明而得以實(shí)施。最后,盡管在此所述的實(shí)施例在未壓縮二進(jìn)制表示式以及壓縮二進(jìn)制表示式之間具有特定對應(yīng)關(guān)系,其他具有不同的對應(yīng)關(guān)系的實(shí)施例則可能需要不同的微程序碼指令集。特別的是,位的數(shù)目則多少與解壓縮硬件可接受的延遲范圍的需求有關(guān)。
當(dāng)在此描述本發(fā)明的許多實(shí)施例,要知道這些實(shí)施例僅以范例的方式呈現(xiàn)而非限定于此。計(jì)算機(jī)相關(guān)領(lǐng)域技術(shù)人員皆了解,各種型式以及細(xì)節(jié)上的變形能夠在不背離本發(fā)明的范圍的情況下產(chǎn)生。舉例來說,軟件能夠致能功能、制造、模擬、擬真、描述及/或測試在此所述的裝置以及方法。這可經(jīng)由使用一般的程序語言(例如:c、c++)、包括veriloghdl、vhdl等等的硬件描述語言(hardwaredescriptionlanguages,hdl)、或其他可得的程序語言。該軟件可放置于任何已知的計(jì)算機(jī)可讀介質(zhì),例如磁帶(magnetictape)、半導(dǎo)體、磁盤(magneticdisk)、或光盤(opticaldisc)(例如:cd-rom、dvd-rom等等),或是網(wǎng)絡(luò)、有線、無線或其他通訊介質(zhì)。在此描述的裝置以及方法的實(shí)施例可包含于半導(dǎo)體智慧財(cái)產(chǎn)權(quán)核中,例如微處理器處理核(如體現(xiàn)或指定于硬件描述語言)以及轉(zhuǎn)換制集成電路產(chǎn)品的硬件。此外,在此所述的裝置以及方法可體現(xiàn)為硬件以及軟件的組合。因此,本發(fā)明不應(yīng)限定于任何在此所述的實(shí)施例,而應(yīng)僅根據(jù)權(quán)利要求書的范圍及其相似物來定義。特別的是,本發(fā)明可實(shí)現(xiàn)于微處理器裝置,其中微處理器裝置可用于通用計(jì)算機(jī)中。最后,該領(lǐng)域技術(shù)人員能夠了解,他們能夠使用揭露的概念以及特定的實(shí)施例最為基礎(chǔ)而設(shè)計(jì)或調(diào)整其他架構(gòu),在不背離本發(fā)明于申請專利范圍所定義的范圍的情況下實(shí)現(xiàn)并完成本發(fā)明的相同目的。