TWI522910B - 微處理器、選擇性解壓縮微程式碼方法、產生選擇性壓縮微程式碼方法、產生描述方法以及電腦程式產品 - Google Patents

微處理器、選擇性解壓縮微程式碼方法、產生選擇性壓縮微程式碼方法、產生描述方法以及電腦程式產品 Download PDF

Info

Publication number
TWI522910B
TWI522910B TW103125973A TW103125973A TWI522910B TW I522910 B TWI522910 B TW I522910B TW 103125973 A TW103125973 A TW 103125973A TW 103125973 A TW103125973 A TW 103125973A TW I522910 B TWI522910 B TW I522910B
Authority
TW
Taiwan
Prior art keywords
microcode
memory
core
compressed
instructions
Prior art date
Application number
TW103125973A
Other languages
English (en)
Other versions
TW201516861A (zh
Inventor
G 葛蘭 亨利
泰瑞 派克斯
布蘭特 比恩
Original Assignee
威盛電子股份有限公司
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US14/088,565 external-priority patent/US9361097B2/en
Priority claimed from US14/088,620 external-priority patent/US9372696B2/en
Application filed by 威盛電子股份有限公司 filed Critical 威盛電子股份有限公司
Publication of TW201516861A publication Critical patent/TW201516861A/zh
Application granted granted Critical
Publication of TWI522910B publication Critical patent/TWI522910B/zh

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30178Runtime instruction translation, e.g. macros of compressed or encrypted instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/328Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for runtime instruction patching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • G06F9/3891Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute organised in groups of units sharing resources, e.g. clusters

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)

Description

微處理器、選擇性解壓縮微程式碼方法、產生選擇性壓縮微程式碼方法、產生描述方法以及電腦程式產品
本發明係有關於選擇性壓縮以及解壓縮微程式碼指令。
現代先進的微處理器通常包括執行複雜及/或微處理器指令集架構之不常執行的指令微程式碼。以微程式碼實現指令集架構一些指令之好處為可降低微處理器其他功能單元(如執行單元)之複雜度。當指令集架構的指令數目以及複雜度增加時也需要微程式碼,基於這項需求,微處理器會額外以非揮發性記憶體(如唯讀記憶體(ROM))來儲存微程式碼。然而,增加記憶體會消耗微處理器的實體資源,而這個問題將隨著多核心微處理器的核心數目增加而加劇,因其中每一個核心皆具有記憶體用以儲存微程式碼。
根據本發明之一實施例,本發明提出一種微處理 器。上述微處理器包括一或多記憶體,每一上述之一或多記憶體用以持有複數微程式碼指令。至少一第一上述記憶體用以提供複數壓縮微程式碼指令之M位元寬微程式碼字組,至少一第二上述記憶體用以提供複數未壓縮微程式碼指令之N位元寬微程式碼字組,M以及N為大於零之整數,且N大於M。微處理器也包括一解壓縮單元,在上述壓縮微程式碼指令自至少一上述第一記憶體存取之後以及在上述壓縮微程式碼指令被執行之前,上述解壓縮單元用以解壓縮上述壓縮微程式碼指令。
根據本發明之另一實施例,本發明提出一種選擇性解壓縮微程式碼之方法。上述選擇性解壓縮微程式碼之方法包括接收來自一記憶體之一第一N位元寬微程式碼字組。上述選擇性解壓縮微程式碼之方法也包括,判斷上述第一N位元寬微程式碼字組之一既定部份是否為一既定數值。上述選擇性解壓縮微程式碼之方法也包括,若上述既定部份並非上述既定數值,解壓縮上述第一N位元寬微程式碼字組而產生一M位元寬微程式碼字組,其中M及N為大於零之整數,且M大於N。上述選擇性解壓縮微程式碼之方法也包括,若上述既定部份為上述既定數值,接收來自上述記憶體之一第二N位元寬微程式碼字組,並組合部份之上述第一N位元寬微程式碼字組以及上述第二N位元寬微程式碼字組而產生上述M位元寬微程式碼字組。
根據本發明之另一實施例,本發明提出一種產生選擇性壓縮微程式碼之方法。上述產生選擇性壓縮微程式碼之方法包括接收一來源碼,上述來源碼包括複數微程式碼組合語言指令,其中部分之上述微程式碼組合語言指令之每一者皆以 上述來源碼之一指示所標示。產生選擇性壓縮微程式碼之方法也包括,對於上述微程式碼組合語言指令之每一者,若並非以上述指示所標示,則產生上述微程式碼組合語言指令之一單一字組壓縮二進制表示式,若由上述指示所標示,則產生上述微程式碼組合語言指令之一多字組未壓縮二進制表示式。
根據本發明之另一實施例,本發明更提出一種產生描述方法,適用於產生一解壓縮微程式碼裝置之一描述。上述產生描述方法包括,接收一來源碼,其中上述來源碼包括複數微程式碼組合邏輯語言指令。上述產生描述方法也包括,對於上述微程式碼組合邏輯語言指令之每一者,產生一未壓縮二進制表示式。上述產生描述方法也包括,對於上述微程式碼組合語言指令之每一唯一指令,產生上述唯一指令之對應之上述未壓縮二進制表示式之部分對應至一壓縮二進制表示式之一對應關係。
根據本發明之另一實施例,本發明更提出一種微處理器。上述微處理器包括複數記憶體,上述記憶體之每一者用以持有複數微程式碼指令。上述記憶體之至少一第一記憶體用以提供複數壓縮微程式碼指令之複數M位元寬微程式碼字組,並且上述記憶體之至少一第二記憶體用以提供複數未壓縮微程式碼指令之複數N位元寬微程式碼字組,其中M以及N為大於零之整數,且N大於M。上述微處理器也包括一解壓縮單元,在上述壓縮微程式碼指令自至少上述第一記憶體存取之後且於執行上述壓縮微程式碼指令之前,上述解壓縮單元用以解壓縮上述壓縮微程式碼指令。
根據本發明之另一實施例,本發明更提出一種選擇性解壓縮微程式碼之方法,上述選擇性解壓縮微程式碼之方法適用於解壓縮具有複數記憶體之一微處理器中之複數微程式碼指令,上述記憶體之每一者用以持有上述微程式碼指令。上述選擇性解壓縮微程式碼之方法包括,自上述記憶體之至少一第一記憶體存取上述壓縮微程式碼指令之複數M位元寬微程式碼字組。上述選擇性解壓縮微程式碼之方法也包括,自上述記憶體之至少一第二記憶體存取複數未壓縮微程式碼指令之複數N位元寬微程式碼字組,其中M以及N係大於零之整數且N大於M。上述選擇性解壓縮微程式碼之方法也包括,解壓縮自上述第一記憶體所存取之上述壓縮微程式碼指令。上述選擇性解壓縮微程式碼方法也包括,傳送上述未壓縮微程式指令而不需解壓縮。
根據本發明之另一實施例,本發明更提出一種電腦程式產品,編程於至少一非暫態電腦可使用媒體並與一計算裝置一併使用。上述電腦程式產品包括,一電腦可用程式碼體現於上述非暫態電腦可使用媒體以指定一微處理器。上述電腦可用程式碼包括,一第一程式碼,指定複數記憶體,每一上述記憶體用以持有複數微程式碼指令,其中上述記憶體之至少一第一記憶體用以提供複數壓縮微程式碼指令之複數M位元寬微程式碼字組。上述記憶體之至少一第二記憶體用以提供複數未壓縮微程式碼指令之複數N位元寬微程式碼字組,其中M以及N為大於零之整數且N大於M。上述電腦可用程式碼也包括,一第二程式碼,指定一解壓縮單元,在上述壓縮微程式碼指令 自上述第一記憶體被存取後以及上述壓縮微程式碼指令被執行前,上述解壓縮單元用以解壓縮上述壓縮微程式碼指令。
100‧‧‧微處理器
102‧‧‧處理核心
104‧‧‧核心微程式碼唯讀記憶體
106‧‧‧仲裁邏輯
108‧‧‧非核心唯讀記憶體
112‧‧‧匯流排
114‧‧‧非核心微程式碼修補隨機存取記憶體
202‧‧‧指令快取
204‧‧‧簡單指令轉譯器
206‧‧‧暫存器別名表
208‧‧‧保留站
212‧‧‧執行單元
214‧‧‧引退單元
216‧‧‧指令存取單元
218‧‧‧結構程式計數器
222‧‧‧第一多工器
224‧‧‧目標位址
226‧‧‧微指令
232‧‧‧非結構微程式碼程式計數器
235‧‧‧指令間接暫存器
236‧‧‧微程序
237‧‧‧微轉譯器
239‧‧‧解壓縮單元
242‧‧‧結構指令
244‧‧‧第一微指令
245‧‧‧選擇控制輸入
246‧‧‧第二微指令
247‧‧‧第一微程式碼指令
248‧‧‧選擇控制輸入
251‧‧‧第二微程式碼指令
252‧‧‧微程式碼位址
253‧‧‧未壓縮微程式碼指令
254‧‧‧非結構微程式碼存取位址
255‧‧‧微指令資訊
262‧‧‧記憶體子系統
264‧‧‧暫存器
292‧‧‧第二多工器
294‧‧‧指令轉譯器
296‧‧‧複雜指令轉譯器
306‧‧‧修補內容可尋址記憶體
308‧‧‧修補位址
353‧‧‧未壓縮微程式碼指令
355‧‧‧38位元結果
392‧‧‧三端輸入多工器
394‧‧‧解壓縮器
396‧‧‧控制邏輯
398‧‧‧緩衝器
402‧‧‧第一微程式碼組合語言指令
412‧‧‧第一逃離指標
414‧‧‧第二微程式碼組合語言指令
432‧‧‧第二逃離指標
434‧‧‧下16位元
436‧‧‧上6位元
438‧‧‧上22位元
1299‧‧‧核心修補隨機存取記憶體
502‧‧‧來源碼
504‧‧‧組合語言
506‧‧‧選擇性壓縮二進制微程式碼
508‧‧‧所有微程式碼指令之列表
512‧‧‧壓縮程式
514‧‧‧壓縮表
516‧‧‧解壓縮描述
518‧‧‧邏輯產生程式(ESPRESSO)
524‧‧‧解壓縮器暫存器傳遞語言檔案
602~612、702~714‧‧‧步驟
第1圖顯示根據本發明一實施例所述之多核心微處理器之方塊圖;第2圖顯示根據本發明第1圖實施例所述之處理核心之詳細方塊圖;第3圖顯示根據本發明第2圖實施例所述之解壓縮單元之詳細方塊圖;第4圖顯示根據本發明一實施例所述之由組合程式選擇性壓縮微程式碼指令之流程圖;第5圖顯示根據本發明一實施例所述之建立選擇性壓縮微程式碼之流程圖;第6圖顯示根據本發明一實施例所述之由組合程式組合微程式碼之流程圖;第7圖顯示根據本發明一實施例所述第2圖之複雜指令轉譯器(尤其是第3圖之解壓縮單元)之動作流程圖;第8-13圖顯示根據本發明另一實施例所述之具有微程式碼記憶體之微處理器持有不同組合之壓縮與解壓縮的微程式碼指令之方塊圖。
在此所述之微處理器,大多但非全部的微程式碼指令係壓縮且維持於微程式碼記憶體中。微處理器包括一解壓 縮單元,用以選擇性地對選擇的壓縮微程式碼指令解壓縮,例如第2圖之解壓縮單元239。根據本發明之一實施例,維持於記憶體之微程式碼指令並未壓縮,因而較記憶體所維持之字元寬度更長。在此情況下,微程式碼指令分為兩個部份,並分別儲存於記憶體不同的兩個字組中。在這些狀況下,一既定數值(在此稱為「跳出(escape)指標」)放置(例如,藉由微程式碼組合程式)於兩字組序列第一字組的一既定部份。當解壓縮單元偵測跳出指標存在於由記憶體所讀取之第一字組時,解壓縮單元結合兩字組之適當部份而產生未壓縮微程式碼指令。此方式有利於提供大多數維持於記憶體中的微程式碼指令能夠被壓縮,並使其寬度較不包括於選擇性壓縮機制之實現方式為短。
再者,許多實施例描述具有多個微程式碼記憶體之微處理器,至少一微程式碼記憶體具有壓縮之微程式碼指令之寬度以提供壓縮微程式碼指令,至少一微程式碼記憶體為具有非壓縮微程式碼指令之寬度以提供非壓縮微程式碼指令。在此詳述壓縮寬度以及非壓縮寬度之核心、非核心以及修補微程式碼記憶體之各種組合。
請參考第1圖,第1圖顯示根據本發明一實施例所述之多核心微處理器100之方塊圖。微處理器100係實體位於一積體電路上,微處理器100包括許多處理核心100、由許多處理核心102所共用之非核心唯讀記憶體(ROM)108、由許多處理核心102所共用之非核心微程式碼修補隨機存取記憶體(RAM)114、以及耦接處理核心102至非核心唯讀記憶體108和非核心微程式碼修補隨機存取記憶體114之仲裁邏輯106(也稱為控制 邏輯)。每一處理核心102包括對應之核心微程式碼唯讀記憶體104,此對應之核心微程式碼唯讀記憶體104並不與其他處理核心102分享,而是專屬於各自的處理核心102。每一處理核心102經由對應之匯流排112耦接至仲裁邏輯106。非核心唯讀記憶體108、非核心微程式碼修補隨機存取記憶體114、以及核心微程式碼唯讀記憶體104皆為持有微程式碼指令。
微處理器100包括稱之為非核心的部份。該非核心部分為微處理器100之一部分但不屬於任何處理核心102之部分。非核心唯讀記憶體108以及非核心微程式碼修補隨機存取記憶體114位於微處理器100之非核心部份。在一實施例中,處理核心102係單一設計並重複複製。第1圖之實施例中顯示四個處理核心102,而其他實施例則具有不同數目之處理核心102。仲裁邏輯106也安置於微處理器100之非核心部份,當數個處理核心102要求存取非核心唯讀記憶體108或非核心微程式碼修補隨機存取記憶體114時,由仲裁邏輯106執行仲裁決定。
非核心唯讀記憶體108提供某數量之字組(稱為「J」)來儲存微程式碼指令,並可被所有處理核心102所存取。每一核心微程式碼唯讀記憶體104提供某數量之字組(稱為「K」)來儲存微程式碼指令,並只能被對應的處理核心102所存取。非核心唯讀記憶體108之J個字組與對應之核心微程式碼唯讀記憶體104之K個字組,係位於不同於處理核心之微程式碼記憶體位址空間的位址空間上。總括來說,對於每一處理核心,其對應之核心微程式碼唯讀記憶體104與非核心唯讀記憶體108,提供J+K字組之儲存空間給可被處理核心102所存取之微程式碼 指令。
在一實施例中,非核心唯讀記憶體108具有J個可定址之記憶體位置,每一個可定址之記憶體位置皆為壓縮微程式碼指令之寬度。在一實施例中,每一非核心唯讀記憶體108具有K個可定址之記憶體位置,每一個可定址之記憶體位置皆為壓縮微程式碼指令之寬度。在一實施例中,壓縮微程式碼指定之寬度為28位元,而非壓縮或解壓縮之微程式碼指令之寬度為38位元。
根據本發明之一實施例,非核心唯讀記憶體108包括為所有處理核心102共用之單一讀取埠,以及根據仲裁演算法用以授權處理核心102使用讀取埠之仲裁邏輯106。根據本發明之一實施例,若在一既定要求週期內僅有一處理核心102要求存取非核心唯讀記憶體108時,則仲裁邏輯106允許此處理核心102之要求;若在一既定要求週期內有數個處理核心102要求存取非核心唯讀記憶體108時,則仲裁邏輯106依輪流法(round-robin)之順序准予存取,但其他仲裁演算法亦可運用在本發明中。其他實施例中,可使非核心唯讀記憶體108對於每一處理核心102均包括一讀取埠。然而,應注意的是,當非核心唯讀記憶體108包括更多的讀取埠時將增加更大的晶粒面積,因此與晶粒面積相關的技術功效就會降低。
利用非核心唯讀記憶體108的優點為,當從非核心唯讀記憶體108存取微程式碼指令時,其可能以增加延遲時間的方式,作為降低微處理器100面積之代價。延遲時間的增加會造成每一處理核心102之微程式碼單元至非核心唯讀記憶體 108之間更大的距離,也就是傳送延遲會因額外的距離而增加,因而需要額外的管線級以及相關之額外時脈週期。此外,延遲時間的增加亦可歸咎於因非核心唯讀記憶體108係共用資源且必須分配給每個處理核心102,並當數個處理核心102要求存取非核心唯讀記憶體108時所造成之現象。再者,非核心唯讀記憶體108之共享本質可能導致變動的存取延遲時間,不像核心微程式碼唯讀記憶體104具有固定的延遲時間。然而,在一些實施例中,增加及/或變動的延遲時間係作為降低晶粒面積之代價。有利的是,非核心唯讀記憶體108之大小可利用在實施例所述之選擇性微程式碼壓縮而進一步降低。
參考第2圖,第2圖顯示根據本發明第1圖實施例所述之處理核心102之詳細方塊圖。處理核心102包括一管線級,該管線級包括許多功能單元。在一實施例中,處理核心102為一超純量(superscalar)、非循序執行(out-of-order execution)、管線化資料之處理核心。處理核心102包括指令存取單元216、其再耦接至指令快取202、其再耦接至指令轉譯器294、其再耦接至暫存器別名表(RAT)206、其再耦接至保留站208、其再耦接至執行單元212、其再耦接至引退單元214。執行單元212自暫存器264(結構的或非結構的)以及記憶體子系統262接收運算元。引退單元214引退微指令結果至暫存器264以及記憶體子系統262。指令轉譯器294經由第1圖之匯流排112,耦接至仲裁邏輯106。存取單元216包括處理核心102之結構程式計數器218,當引退單元214引退指令時,引退單元214更新結構程式計數器218。存取單元216提供結構指令存取位址至指令快取 202。根據結構程式計數器218,存取單元216產生結構存取位址。此外,執行單元212可執行分支指令,且提供分支目標位址至存取單元216,用以產生結構存取位址。最後,存取單元216之分支預測器(圖中並未顯示)可提供預測分支目標位址,用以產生結構存取位址。結構程式計數器218與由指令轉譯器294所維持之指令非結構微程式碼程式計數器224不同,並且由存取單元216所產生而傳送至指令快取202之結構存取位址,與由存取單元216之微程序236(也稱為控制邏輯)所產生之非結構微程式碼存取位址254亦不同,這些將在以下詳述。
指令快取202所快取之結構指令242,也稱為微指令或ISA指令,係由微處理器100(例如:x86、ARM、SPARC等等)之指令集架構所定義。指令轉譯器294翻譯結構指令242成為處理核心102微架構之微指令226,指令轉譯器294通常具有精簡指令集(RISC)體系相關之特徵。
指令轉譯器294以程式順序提供微指令至暫存器別名表206。暫存器別名表206在引退單元214之重新排列緩衝器中,以程式順序分配微指令之項目。暫存器別名表206執行暫存器264之重新命名。暫存器別名表206提供微指令至保留站208,當每一微指令之來源運算元可獲得,且執行單元212能夠執行該微指令時,微指令從保留站208被發送至執行單元212且以非循序方式來執行。引退單元214藉由將執行單元212所執行微指令的結果,以程式順序引退指令至處理核心102之架構狀態。執行單元212可包括載入單元、儲存單元、整數單元、浮點數單元、分支單元、單一指令多重資料流電腦模組(Single instruction,rmultiple data,SIMD)單元等等。載入單元自第一階(level-1,L1)資料快取中讀出資料,儲存單元將資料寫入至第一階資料快取。第二階(level-2,L2)資料快取可做為第一階資料快取以及指令快取202之備用儲存裝置。
指令轉譯器294自第2圖指令快取202接收結構指令242之複數區塊。結構指令242也稱為微指令242或ISA指令242。指令轉譯器294轉譯結構指令242為提供至暫存器別名表206之實現微指令226。指令轉譯器294包括簡單指令轉譯器(SIT)204、複雜指令轉譯器(CIT)296以及第二多工器292。簡單指令轉譯器204輸出實現第一微指令244以及微程式碼位址252。複雜指令轉譯器296,也稱為微程式碼單元296,接收微程式碼位址252,並提供實現第二微指令246。第二多工器292以一輸入端自簡單指令轉譯器204接收第一微指令244,並以另一輸入端自複雜指令轉譯器296接收第二微指令246,且根據選擇控制輸入248提供實現微指令226至第2圖之執行單元212。
複雜指令轉譯器296包括微程序236、第1圖之核心微程式碼唯讀記憶體104、指令間接暫存器(IIR)235、第一多工器222、解壓縮單元239以及微轉譯器237。微程序236接收微程式碼位址252,且維持非結構微程式碼程式計數器(micro-PC)232。核心微程式碼唯讀記憶體104接收根據非結構微程式碼程式計數器232所存取之位址254。此外,非核心唯讀記憶體108亦經由匯流排112,接收非結構微程式碼存取位址254。第一多工器222之第一輸入端接收來自非共用之核心微程式碼唯讀記憶體104之微程式指令251,第二輸入端則接收來自 共用之非核心唯讀記憶體108之微程式碼指令249(經由匯流排112),並根據由微程序236所產生之選擇控制輸入245而輸出第一微程式碼指令247。解壓縮單元239接收來自第一多工器222之第一微程式碼指令247,並且選擇性地解壓縮第一微程式碼指令247,以產生未壓縮微程式碼指令253。微轉譯器237轉譯由解壓縮單元239接收之未壓縮微程式碼指令253,以產生由複雜指令轉譯器296所輸出之實現第二微指令246。由簡單指令轉譯器204所產生之實現第一微指令244以及由複雜指令轉譯器296所產生之實現第二微指令246,皆為微處理器100微架構之微指令集之微指令226,並可由執行單元212管線執行。
第二多工器292係由選擇控制輸入248所控制。通常第二多工器292選擇來自簡單指令轉譯器204之第一微指令244;然而,當簡單指令轉譯器204遇到複雜結構指令242並轉移控制權至(或經由設陷(traps)移轉至)複雜指令轉譯器296時,簡單指令轉譯器204控制選擇控制輸入248,而使得第二多工器292選擇來自複雜指令轉譯器296之第二微指令246。當暫存器別名表206遭遇具有特殊位元組之微指令226,以指出其係在順序執行複雜結構指令242過程中最後之微指令226時(在此表示為「.T」位元),暫存器別名表206控制選擇控制輸入248而使得第二多工器292回到選擇來自簡單指令轉譯器204之第一微指令244。此外,當引退單元214準備好引退微指令226但其狀態指示此微指令226已造成一例外情況時,引退單元214控制選擇控制輸入248而使得第二多工器292選擇來自複雜指令轉譯器296之第二微指令246。
簡單指令轉譯器204接收結構指令242且將其解碼,以決定結構指令242為簡單微指令或複雜微指令。簡單結構指令242係簡單指令轉譯器204可為其發出所有實現微指令226以實現結構指令242者,亦即複雜指令轉譯器296不為簡單結構指令242提供任何實現微指令。相反的,複雜結構指令242要求複雜指令轉譯器296提供若非全部、也是至少一部分之實現微指令226。在一實施例中,對結構指令242之子集合而言,簡單指令轉譯器204發出實現結構指令242之第一部分微指令244以實現結構指令242,然後轉移控制權至複雜指令轉譯器296,最後發出剩下微指令246來實現結構指令242。受控的第二多工器292首先將來自簡單指令轉譯器204之實現微指令244轉換成微指令226並提供至執行單元212,其次將來自複雜指令轉譯器296之實現微指令246轉換成為微指令226並提供至執行單元212。簡單執行轉譯器204知道由複雜指令轉譯器294所採用之各種微程式碼程序之起始微程式碼位址並用來產生各種複雜結構指令242之實現微指令226,並當簡單指令轉譯器204解碼一複雜結構指令242時,提供相關的微程式碼位址252至複雜指令轉譯器296之非結構微程式碼程式計數器232。簡單指令轉譯器204發出的所有第一微指令244係被相對高比例執行之結構指令242,特別是結構指令242傾向由ISA機器語言程式以頻繁的方式所執行者,而僅有相對小比例需要複雜指令轉譯器296提供第二微指令246。在一實施例中,簡單指令轉譯器204係利用眾所周知的合成工具所合成之布林邏輯閘方塊。
複雜指令轉譯器296輸出實現第二微指令246序列 至第二多工器292。核心微程式碼唯讀記憶體104或非核心唯讀記憶體108,係儲存微程式碼程序之選擇性壓縮第二微程式碼指令251以及選擇性壓縮微程式碼指令249。核心微程式碼唯讀記憶體104/非核心唯讀記憶體108輸出選擇性壓縮第二微程式碼指令251/選擇性壓縮微程式碼指令249以回應非結構微程式碼存取位址254,其中非結構微程式碼存取位址254儲存於非結構微程式碼程式計數器232。通常,非結構微程式碼程式計數器232自簡單指令轉譯器204接收微程式碼位址252之初始值,以回應簡單指令轉譯器204所解碼之複雜結構指令242。在其他情況下,比如回應一重置或例外時,非結構微程式碼程式計數器232分別接收重置微程式碼程序位址或適當的微程式碼例外處理位址。一般來說,微程序236藉由微程式碼指令之大小(根據本發明之一實施例,微程式碼指令之大小為核心微程式碼唯讀記憶體104或非核心唯讀記憶體108中字組之大小)來遞增非結構微程式碼程式計數器232,用以依序通過微程式碼程序。另外,微程序236依據由微轉譯器237所產生之目標位址224來更新非結構微程式碼程式計數器232,以回應解碼控制類型微程式碼指令(例如分支指令);或回應控制類型微指令226之執行而由執行單元212所產生之目標位址來更新非結構微程式碼程式計數器232;或是以位於核心微程式碼唯讀記憶體104或非核心唯讀記憶體108之非序列位置來更新非結構微程式碼程式計數器232以啟動分支。核心微程式碼唯讀記憶體104以及非核心唯讀記憶體108被製造於與微處理器100相同之半導體晶粒上。
除了實現複雜結構指令242之部分之簡單結構指 令242的第一微指令244,簡單指令轉譯器204也產生微指令資訊255,微指令資訊255係寫入至指令間接暫存器(IIR)235。儲存於指令間接暫存器235之微指令資訊255包括有關結構指令242被轉譯之資訊,例如辨別由結構指令242所指定之來源以及目標暫存器以及結構指令242之格式,諸如結構指令242是否操作於記憶體之運算元或於微處理器100之一架構暫存器264。這樣允許微程式碼程序成為通用,也就是每一不同的來源及/或目標架構暫存器264不需要具有不同微程式碼程序。特別的是,簡單指令轉譯器204知道暫存器檔案264,並在轉譯由結構指令242所提供之暫存器資訊後,經由微指令資訊255提供至暫存器檔案264之適當暫存器中。微指令資訊255也包括位移域、即時域、常數域、對於每一來源運算元以及微指令226本身之重新命名資訊、指出實現結構指令242之微指令226序列之第一以及最後一個微指令之資訊、以及由簡單指令轉譯器204解碼結構指令242時所收集之有用資訊的其他位元。
微轉譯器237接收來自解壓縮單元239的未壓縮微程式碼指令253以及指令間接暫存器235之內容,並產生實現第二微指令246做回應。微轉譯器237根據指令間接暫存器235所接收之資訊,例如根據結構指令242之格式以及由其指定之來源及/或目標架構暫存器264之組合,來轉譯某些未壓縮微程式碼指令253至微指令246之不同的序列。在一些狀況下,大部分的微指令資訊255與未壓縮微程式碼指令253做合併以產生實現第二微指令246。在一實施例中,每一未壓縮微程式碼指令253為38位元寬,且每一第二微指令246大約為200位元寬。在 一實施例中,微轉譯器237能夠自未壓縮微程式碼指令253,產生最多三個第二微指令246。微轉譯器237包括產生實現第二微指令246之布林邏輯閘。
由於簡單指令轉譯器204產生微指令資訊255,故核心微程式碼唯讀記憶體104與非核心唯讀記憶體108不需要儲存由指令間接暫存器235所提供之微指令資訊255,因此微轉譯器237所提供之一個優點為可減少核心微程式碼唯讀記憶體104與非核心唯讀記憶體108之大小。再者,微程式碼程序可包括較少的條件分支指令,因微程式碼程序不需要包括針對每一不同微指令格式、以及針對每一來源及/或目標架構暫存器264之組合的個別程序。例如,若複雜結構指令242為記憶體型式,簡單指令轉譯器204可產生第一微指令244為開端,其包括第一微指令244以載入來自記憶體之來源運算元而進入暫時暫存器264,而微轉譯器237可產生第二微指令246以從暫時暫存器將結果儲存於記憶體;若複雜結構指令242為暫存器格式,做為開端之第一微指令244可從結構指令242指定之來源暫存器移動來源運算元至暫時暫存器264,而微轉譯器237可產生第二微指令246以移動來自暫時暫存器之結果至由指令間接暫存器235所指定之架構目標暫存器264。在一實施例中,微轉譯器237在許多方面與申請日為2010年4月23日之美國專利案號US 12/766,244中所述之微轉譯器237相似,該美國專利請求優先權至2009年8月14日之美國臨時申請案號US61/234,008,其在2011年2月17號公開為美國公開號US2011/0040953之專利,每一個在此通過引用將其整體併入本文,並供各方面說明之用。
在另一實施例中,指令轉譯器294不包括微轉譯器237,而自核心微程式碼唯讀記憶體104以及非核心唯讀記憶體108所存取之第二微程式碼指令251以及微程式碼指令249則在選擇性解壓縮之後,成為可由執行單元212執行之微指令。
應注意的是,非結構微程式碼程式計數器232與結構程式計數器218不同;也就是,非結構微程式碼程式計數器232不能維持結構指令242之位址,而維持於非結構微程式碼程式計數器232之位址並不在系統記憶體位址空間之內。
如上所述,第一微程式碼指令247為儲存於微處理器100之一或多者之核心微程式碼唯讀記憶體104以及非核心唯讀記憶體108之非結構指令,且第一微程式碼指令247係處理核心102根據儲存於非結構微程式碼程式計數器232之非結構微程式碼存取位址254所存取與使用,進而實現微處理器100之指令及結構指令242。未壓縮微程式碼指令253由微轉譯器237轉譯成第二微指令246而由執行單元212執行,或在本發明之另一實施例中,未壓縮微程式碼指令253係直接由執行單元212執行(在此為第二微指令246)。未壓縮微程式碼指令253為非結構指令的意思為其並非微處理器100之指令集(ISA)結構之指令,而是根據與結構指令集不同之指令集所編碼的。非結構微程式碼程式計數器232並非由微處理器100之指令集結構所定義,且與結構定義程式計數器218有所不同。微程式碼用以實現以下所述微處理器之指令集結構之某些或所有指令。回應於解碼微程式碼實現結構指令242,微處理器100,特別是簡單指令轉譯器294,將轉移控制權至與結構指令242相關之微程式碼 程序。微程式碼程序包括微程式碼指令。執行單元212執行未壓縮微程式碼指令253,或根據第2圖之實施例,未壓縮微程式碼指令253更轉譯成第二微指令246而被執行單元212所執行。由執行單元212執行未壓縮微程式碼指令253(或由未壓縮微程式碼指令253轉譯之第二微指令246)之結果係由結構指令242所定義之結果。因此,由執行單元212集體執行之關於結構指令242之微程式碼程序(或由執行單元212集體執行之微程式碼程序指令所轉譯之第二微指令246)來執行結構指令242;也就是由執行單元212集體執行之實現未壓縮微程式碼指令253(或由執行單元212集體執行之未壓縮微程式碼指令253轉譯之第二微指令246),執行結構指令242所指定之動作於結構指令242所指定之輸入值,而產生結構指令242所定義之結果。此外,當為了調整微處理器而重置微處理器時,微程式碼指令可被執行(或轉譯成被執行之微指令)。
根據本發明之一實施例,第1圖之仲裁邏輯106包括要求佇列(圖中並未顯示),其持有接收自處理核心102並對非核心唯讀記憶體108或非核心微程式碼修補隨機存取記憶體114進行存取之要求。根據本發明之一實施例,每一介於仲裁邏輯106以及處理核心102之匯流排112包括要求部份以及回應部份。關於要求部份,處理核心102指定所要求之微程式指令字組之非結構微程式碼存取位址254。關於回應部份,仲裁邏輯106提供微程式碼指令字組、位址、核心編號以及有效指標。微程式碼指令字組、位址以及核心編號僅於有效指標指示有效時才為有效。核心編號指定仲裁邏輯106提供一回應至先前要 求存取非核心唯讀記憶體108或非核心微程式碼修補隨機存取記憶體114之處理核心102。位址指定由非核心唯讀記憶體108或非核心微程式碼修補隨機存取記憶體114所存取之微程式碼指令字組之位址。根據本發明之一實施例,仲裁邏輯106於匯流排112設置延遲(Stall)信號至處理核心102,用以指出仲裁邏輯106不能接收更多來自處理核心102要求存取非核心唯讀記憶體108之請求。只要能夠再次接收請求,仲裁邏輯106取消設置延遲信號。根據本發明之一實施例,若暫存器別名表206設置延遲信號至指令轉譯器294以指示無法接收更多的微指令226時,則指令轉譯器294清除任何正在進行之存取非核心唯讀記憶體108之動作。只要暫存器別名表取消設置延遲信號,微程序236會在傳送至暫存器別名表206之最後微指令226的位址後的下一位址開始存取微程式碼指令。根據本發明之另一實施例,指令轉譯器294儲存正在存取非核心唯讀記憶體108或非核心微程式碼修補隨機存取記憶體114之狀態,以便能避免重新存取相關的正在存取之微程式碼指令。
非核心唯讀記憶體108之存取延遲大於對每一核心微程式碼唯讀記憶體104之存取延遲。根據本發明之一實施例,核心微程式碼唯讀記憶體104具有三個週期的存取延遲,並且非核心唯讀記憶體108之存取延遲在實施例中係可變的,其中其讀取埠係與複數處理核心102相共用。
參考第3圖之方塊圖,其更詳細顯示根據本發明第2圖實施例所述之解壓縮單元239,同樣顯示於第3圖的是修補內容可尋址記憶體(CAM)306。當非結構微程式碼存取位址 254符合修補內容可尋址記憶體306中項目之一者的內容時,持有修補位址308的可尋址記憶體306會將修補位址308從可尋址記憶體306輸出至微程序236,以回應非結構微程式碼存取位址254。這種情況下,微程序236輸出修補位址308作為非結構微程式碼存取位址254而不是下一序列存取位址(或目標位址224),以回應非核心微程式碼修補隨機存取記憶體114在匯流排112上輸出修補微程式碼指令249。這樣將引發從非核心微程式碼修補隨機存取記憶體114擷取修補微程式碼指令249,而不是分別從非核心唯讀記憶體108或核心微程式碼唯讀記憶體104擷取不想要的微程式碼指令249或第二微程式碼指令251。另一種做法是將可尋址記憶體306以及非核心微程式碼修補隨機存取記憶體114的內容在回應包括系統軟體之結構指令時加以載入,這些軟體可以是基本輸入輸出系統(BIOS)或運作於微處理器100之作業系統。解壓縮單元239包括解壓縮器394、緩衝器298、三端輸入多工器392以及控制邏輯396。
解壓縮器394自第2圖之第一多工器222接收壓縮之第一微程式碼指令247,並解壓縮此壓縮之第一微程式碼指令247而成未壓縮微程式碼指令353,且提供至三端輸入多工器392之第一輸入端。根據本發明之一實施例,解壓縮器394包括由暫存器傳遞語言(RTL)碼(如硬體描述(Verilog)碼)所合成之可程式邏輯陣列(PLA),並由第6圖之可程式邏輯陣列產生器616自動產生。解壓縮器394對壓縮之第一微程式碼指令247解壓縮之方式的實施例,將於下文中詳細敘述。
若控制邏輯396要求緩衝器398接收並載入28位元 之第一微程式碼指令247之位元[15:0],則緩衝器398遵循其要求而執行之,否則緩衝器398維持其先前之數值。根據本發明之一實施例,在28位元第一微程式碼指令247之位元[15:0]載入至緩衝器398之時脈週期後的下一個時脈週期中,緩衝器398之內容加上目前28位元微程式碼字組247之位元[21:0],以產生三端輸入多工器392之第二輸入端之38位元結果355。
控制邏輯396接收微程式碼字組247之位元[27:16],並決定其數值是否為既定之逃離指標數值。根據本發明之一實施例,既定逃離指標數值為0x3FF。若是如此,控制邏輯396控制暫存器398載入28位元第一微程式碼指令247之位元[15:0]。此外,當第一多工器222提供下一個28位元微程式碼字組247時,控制邏輯396控制三端輸入多工器392選擇其第二輸入端以提供未壓縮微程式碼指令253至微轉譯器237,也就是選擇合併緩衝器398之16位元內容與28位元之微程式碼字組247之位元[21:0]之38位元結果355。下一個28位元微程式碼字組247會是由非核心唯讀記憶體108/核心微程式碼唯讀記憶體104所擷取之後續字組之微程式碼指令249/後續字組之第二微程式碼指令251,其係跟隨在載入至緩衝器398之字組247後面。
根據本發明之另一實施例,解壓縮單元239可於相同時脈週期中接收具有逃離指標之微程式字組,以及兩段未壓縮微程式碼指令。在此實施例中,緩衝器398被省略,且在該時脈週期時該相鄰字組之適當部份被合併,並且提供至三端輸入多工器392之第二輸入端,而控制邏輯396則控制三端輸入多工器392選擇其第二輸入端。
三端輸入多工器392在第三輸入端接收38位元微程式碼字組112,例如來自非核心微程式碼修補隨機存取記憶體114者。若目前微程式碼指令之來源係38位元寬之記憶體,例如來自非核心微程式碼修補隨機存取記憶體114者,控制邏輯396控制三端輸入多工器392以選擇其第三輸入端(也就是38位元之微程式碼字組112),否則控制邏輯396控制三端輸入多工器392選擇其第一輸入端或第二輸入端。若目前微程式碼指令之來源是28位元寬之記憶體時,例如儲存(除了壓縮微程式碼指令外)要求合併之未壓縮微程式碼字組之分離部份之非核心唯讀記憶體108或核心微程式碼唯讀記憶體104、以及若先前字組包括逃離指標(即第4圖之第二逃離指標432)時,控制邏輯396控制三端輸入多工器392選擇其第二輸入端(也就是38位元結果355)。若目前微程式碼指令之來源為儲存壓縮微程式碼指令(除了未壓縮微程式碼字組之分離部份以及逃離指標外)之28位元寬之記憶體,而且目前字組並未包括逃離指標時,控制邏輯控制三端輸入多工器392選擇其第一輸入端(也就是解壓縮器394之38位元之未壓縮微程式指令353)。
根據本發明之一實施例,由三端輸入多工器392提供至微轉譯器237之38位元未壓縮微程式碼指令253包括:根據一些指令格式,且通常為非立即指令之13位元操作碼域、5位元之第一來源運算元位址域、5位元之第二來源運算元位址域、5位元之目標運算元位址域、指定運算元大小之4位元大小域、指定每一5位元運算元暫存器域如何由微轉譯器237進行解碼之4位元域、指定微程式碼指令在執行x86指令之連續微程式 碼指令中是否為最後指令之一位元「.T」域、以及一額外位元。通常為立即指令之其他38位元未壓縮微程式碼指令253之格式包括:包括16位元即時數值之16位元即時域,例如一即時運算元或跳躍指令之目標位址、以及上述其他域之子集合,如除了5位元第二運算元域以外之域以及較小的操作碼域。
請參考第4圖,其顯示由組合程式選擇性壓縮微程式碼指令之流程圖。第4圖包括兩個流程圖,說明將第一微程式碼組合語言指令402組合進單一字組壓縮二進制指令404之範例,以及將由第一逃離指標412表示之第二微程式碼組合語言指令414與包括逃離指標之多字組未壓縮二進制指令進行組合之範例。
第一流程圖說明將第一微程式碼組合語言指令402組合進以單一字組儲存於微程式碼記憶體之壓縮二進制指令404,微程式碼記憶體如核心微程式碼唯讀記憶體104或非核心唯讀記憶體108。第4圖之實施例中,單一字組為28位元寬,也就是如圖所示之核心微程式碼唯讀記憶體104或非核心唯讀記憶體108之寬度。當單一字組壓縮二進制指令404由核心微程式碼唯讀記憶體104或非核心唯讀記憶體108讀取出來時,如本發明所述,將經由第3圖之解壓縮器394來解壓縮為未壓縮微程式碼指令。在第4圖之實施例中。第一微程式碼組合語言指令402將第一通用暫存器R2以及第二通用暫存器R3之內容相加,並將結果寫入第三通用暫存器R4。在此實施例中,此為在組合之時存在壓縮表項目之微程式碼指令,其允許組合語言將其壓縮,並在下文終將有詳細描述。
第二流程圖說明冠有第一逃離指標412之第二組合語言微程式碼指令414組合至多字組未壓縮二進制指令424之情形,多字組未壓縮二進制指令424係分離成兩個28位元字組。第一字組包括位於第一字組之既定位元之第二逃離指標432。第二逃離指標432為第2圖之解壓縮單元239(特別是控制邏輯396)用以回應與辨識,以將包含第二逃離指標432之字組的剩下部份434,與來自核心微程式碼唯讀記憶體104或非核心唯讀記憶體108之下個字組之一部分438相結合。在本發明之一實施例中,逃離指標既定數值為0x3FF,第一字組之既定位元係位元[27:16]。然而既定位元以及既定數值並非限定於實施例,而其他的實施例則為具有不同既定數值以及不同既定位元。逃離指標為一既定字串(如:第4圖所示之「ESCAPE」),程式設計者可在微程式碼來源碼檔案中,在微程式碼指令前插入一行,這樣會使得組合語言不會壓縮隨後之微程式碼指令,但會分離該指令為兩個具有壓縮指令之長度的字組,且於二進制字組之開頭包含第二逃離指標432。
第一字組之下16位元為多字組未壓縮二進制指令424之下16位元434,第二字組之上22位元為多字組未壓縮二進制指令424之上22位元438。當控制邏輯396於第一字組中偵測到第二逃離指標432位於開頭之位置時,下16位元434以及上22位元438將由解壓縮單元239加以組合。在實際操作上,第二字組之上6位元436可全為零。在第4圖之實施例中,第二微程式碼組合語言微程式碼指令414將第二通用暫存器R3以及結構暫存器(例如,x86結構暫存器ESI)之內容相加,並將結果寫入 第三通用暫存器R4。在此實施例中,該微程式碼指令在組合操作進行時壓縮表項目並不存在,故需要包括第一逃離指標412以避免產生組合錯誤,這部分將於下文中做更詳細的說明。
請參考第5圖之流程圖,其說明建立選擇性壓縮微程式碼之流程。流程開始於來源碼502,其中來源碼502係由微程式碼設計者所開發,而來源微程式碼502可包括第一逃離指標412。組合程式504接收來源碼502以及壓縮表514。在一實施例中,壓縮表514可包含於由以下所述之壓縮程式512所產生之檔案中。組合程式504使用壓縮表514來組合來源碼502,以產生選擇性壓縮二進制微程式碼506。選擇性壓縮二進制微程式碼506包括單一字組壓縮二進制指令(如第4圖之單一字組壓縮二進制指令404)以及多字組未壓縮二進制指令,多字組未壓縮二進制指令包括第二逃離指標432,如第4圖之多字組未壓縮二進制指令424。來源碼502通常包括多來源碼檔案,多來源碼檔案經由組合程式504之組合而產生選擇性壓縮二進制微程式碼506。
組合程式504也產生所有微程式碼指令之列表508,所有微程式碼指令之列表508包含於選擇性壓縮二進制微程式碼506之中。在一實施例中,所有微程式碼指令之列表508係人類可讀之清單,該清單包括在選擇性壓縮二進制微程式碼506中之每一微程式碼指令之項目。對於每一微程式碼指令,該項目指定了:(1)其於核心微程式碼唯讀記憶體104或非核心唯讀記憶體108之相關位址;(2)其未壓縮二進制表示式,例如其38位元二進制表示式;以及(3)一種與其組合語言表 示式相似但經修正以方便壓縮程式512產生壓縮表514。根據微程式碼指令是否由來源碼502之第一逃離指標412所標示之微程式碼指令,38位元數值之未壓縮二進制表示式,若非壓縮為單一字組壓縮二進制指定404,就是分離成第4圖之多字組未壓縮二進制指令424之下16位元434以及上22位元438。
壓縮程式512接收所有微程式碼指令之列表508,並藉此產生壓縮表514。壓縮表514為組合程式504之輸入,隨後組合程式504組合來源碼502而成為選擇性壓縮二進制微程式碼506。通常,隨後的組合為新的或修改後的來源碼502。此外,隨後的組合可與原來用以產生壓縮表514之來源微程式碼502相同,例如當壓縮表一開始是空的時候。
壓縮程式512檢查所有微程式碼指令之列表508,並產生唯一指令表。舉例來說,所有微程式碼指令之列表508可包括多個具有一個指令之實例,其將R2減去R1並將結果放置於R3;然而,當產生唯一指令表時,壓縮程式512將這些實例都當作一單一與唯一的微程式碼。一個使得壓縮微程式碼有極高可能性的事實在於,對於許多微程式碼指令而言,多個具有相同指令之實例可存在來源碼502中。使微程式碼指令單一化之的準則可根據不同實施例使用之壓縮方法而改變,以下將透過一實施例做詳細說明。在一實施例中,壓縮程式512係以Python語言所撰寫之程式。
在產生唯一指令表之後,壓縮程式512指定每一唯一微程式碼指令一對應之唯一數值。壓縮表514包括一對一對應之唯一微程式碼指令以及唯一壓縮數值。在隨後的組合實例 中,組合程式504利用此對應關係來壓縮並未由逃離指標標示之來源碼502組合語言指令而成為壓縮指令404。壓縮數值係變成單一字組壓縮二進制指令404(或成為壓縮二進制指令之一部分),解壓縮器394解壓縮該二進制數值而成為未壓縮微程式指令353(或其一部分係未壓縮微程式指令)。在一實施例中,僅對38位元未壓縮二進制表示式之一部分進行壓縮,而剩下的位元並未壓縮。在一實施例中,將38位元未壓縮二進制表示法之22個位元,壓縮成28位元壓縮二進制指令404中之12個位元,38位元未壓縮二進制表示式之剩下的16個位元跳過未壓縮程序而成為28位元壓縮二進制指令404之16位元。如下所述,解壓縮器394執行相反的相似流程。
在一實施例中,壓縮器512產生三個壓縮表514。壓縮表514之一者指定唯一壓縮數值對應至即時跳躍微程式碼指令;壓縮表514之一者指定唯一壓縮數值對應至即時非跳躍微程式碼指令;以及壓縮表514之一者指定唯一壓縮數值對應至所有其他微程式碼指令,在此稱為「雜項(miscellaneous)」微程式碼指令。在一實施例中,壓縮之即時跳躍指令之28位元壓縮二進制指令404具有二進制「1」之數值於首位位元(亦即位元[27]),然而即時非跳躍微程式碼指令以及雜項微程式碼指令之28位元壓縮二進制指令404具有二進制「0」之數值於首位位元,即時非跳躍微程式碼指令之28位元壓縮二進制指令404在位元[26:16]中之數值為0x000至0x2FF之間,而位於雜項微程式碼指令之28位元壓縮二進制指令404之位元[26:16]中之數值為0x300至0x7FF之間。在一實施例中,即時跳躍以及非即時跳 躍之28位元壓縮二進制指令404之即時數值位於28位元微程式碼字組247之位元[15:0]中。
壓縮器512也產生解壓縮描述516。解壓縮描述516在概念上可理解為壓縮表514之逆轉,亦即解壓縮描述516包括壓縮表514之唯一壓縮數值與唯一未壓縮微程式碼指令二進制表示式之一對一對應關係(或其一部份)。如上所述,解壓縮器394可跳過壓縮第一微程式碼指令247之部分位元(在一實施例為16位元),使得解壓縮描述516僅需包括部份之唯一12位元壓縮數值與未壓縮微程式碼指令二進制表示式之唯一22位元之一對一對應關係。解壓縮器394將唯一22位元部份與跳過之16位元部份結合以產生最終提供至微轉譯器237之38位元未壓縮微程式碼指令253。因此,在一實施例中,解壓縮描述516對應壓縮表514之唯一12位元壓縮數值至唯一22位元數值,且該對應關係用於製造或模擬輸出唯一22位元數值作為未壓縮微程式碼指令353之一部分,以回應接收對應之壓縮第一微程式碼指令247之唯一12位元壓縮數值之位元[27:16]。
邏輯產生程式518(如眾所皆知的ESPRESSO logic minimizer program)將解壓縮描述516轉變成解壓縮器暫存器傳遞語言檔案524,解壓縮器暫存器傳遞語言檔案524可用以製造或模擬解壓縮器394。在一實施例中,解壓縮器暫存器傳遞語言檔案524可合成至形成解壓縮器394之可程式邏輯陣列中。
一旦微處理器100之實例,特別是硬體的解壓縮器394,利用解壓縮器暫存器傳遞語言檔案524所給定實例而被製造或模擬時,則由微處理器100之實例所執行之隨後選擇性壓 縮二進制微程式碼506,必須由組合程式504利用壓縮表514進行組合,其中壓縮表514對應至產生解壓縮器暫存器傳遞語言檔案524之解壓縮描述516。否則,解壓縮器394可能不正確地解壓縮選擇性壓縮二進制微程式碼506。
舉例來說,由微處理器100之模擬軟體所執行之選擇性壓縮二進制微程式碼506,必須由組合程式504利用壓縮表514進行組合,其中壓縮表514對應於在模擬軟體中使用解壓縮器暫存器傳遞語言檔案524而產生之解壓縮器描述516。根據另一實施例,其中載入至非核心微程式碼修補隨機存取記憶體114之修補微程式碼被選擇性地壓縮,選擇性壓縮二進制微程式碼506必須由組合程式504利用壓縮表514進行組合,其中壓縮表514對應至解壓縮器暫存器傳遞語言檔案524所產生之解壓縮器描述516,並且解壓縮器描述516用以製造微處理器100之實例。
根據另一實施例,微處理器具有許多半導體層,而通常核心微程式碼唯讀記憶體104與非核心唯讀記憶體108被製造於最後一層,這樣可提供微程式碼開發者一個繼續發展微程式碼的機會,儘管微處理器100需要先被製造之半導體層(通常包括解壓縮器394)已被製造完成。在此狀況下,必須由組合程式504利用壓縮表514做組合,其中壓縮表514對應至解壓縮描述516,而解壓縮描述516利用解壓縮器暫存器傳遞語言檔案524來製造微處理器100之實例。這點特別有利,因為能夠在某些情況提供微程式碼設計者在硬體設計者完成後數週的時間內繼續開發微程式碼。在此狀況下,來源碼502可包括 未在所有微程式碼指令之列表508中之新微程式碼指令,其中所有微程式碼指令之列表508用以自微處理器100之實例製造而產生解壓縮器暫存器傳遞語言檔案524。在此狀況下,微程式碼設計者需要在新微程式碼指令之前插入第一逃離指標412至來源碼502,如以下對第6圖步驟608之描述。
第6圖所示之流程圖係說明利用組合程式組合微程式碼之流程。流程開始於步驟602。
在步驟602中,組合程式504接收第5圖之來源碼502以及壓縮表514。組合程式504利用壓縮表514組合來源碼502,來源碼可包含逃離指標412。在組合實例開始時,壓縮表514可為空的。要注意的是,微程式碼開發者可能不知是否他已經插入了一新的微程式碼指令至來源碼502,例如在目前壓縮表514並未具有一微程式碼指令之對應關係。在此情況下,當組合程式504組合來源碼502時就會產生相關的錯誤。流程則前進至步驟604。
在步驟604中,若組合程式504判斷步驟602在組合中發生錯誤則流程前進至步驟606,否則流程前進至步驟612。特別的是,組合錯誤可能因為壓縮表514不包括來源碼502微程式碼指令之對應關係所造成,其中來源碼502微程式碼指令並未由第一逃離指標412所標示。
步驟606中,組合程式504輸出所有微程式碼指令之列表508給來源碼502,流程前進至步驟608。
步驟608中,在組合程式504因壓縮表514並未包括對應關係而產生錯誤之該微程式碼指令之前面,插入第一逃離 指標412至來源碼502中。在一實施例中,係由微程式碼設計者插入第一逃離指標412。在一實施例中,可透過一程式利用由組合程式504所產生之錯誤訊息,自動插入第一逃離指標412。在另一組合來源碼502之實例中流程將回到步驟602,直到沒有錯誤產生為止。應注意的是,壓縮表514在來源碼502第一次被組合時是空的,在此狀態下,組合程式504會對來源碼502之所有微程式指令產生錯誤;然而,因為組合程式已產生所有微程式碼指令之列表508,因此壓縮器512可執行用以產生壓縮表514,而相同的來源碼502(沒有插入第一逃離指標412者)可被重新組合而產生可由微處理器100之實例所執行之選擇性壓縮二進制微程式碼506,其中微處理器100之實例包括解壓縮器394之實例,在第二實例中,解壓縮描述516產生解壓縮器暫存器傳遞語言檔案524,解壓縮器暫存器傳遞語言檔案524產生解壓縮器394之實例,而解壓縮描述516則由壓縮器512所產生。
在步驟612中,組合程式504輸出可用以製造微處理器100之所有微程式碼指令之列表508、以及選擇性壓縮二進制微程式碼506。具體而言,選擇性壓縮二進制微程式碼506包括位於非核心唯讀記憶體108、核心微程式碼唯讀記憶體104及/或非核心微程式碼修補隨機存取記憶體114之單一字組壓縮二進制指令404以及多字組未壓縮二進制指令424。流程結束於步驟612。
參考第7圖,所示之流程圖說明第2圖之複雜指令轉譯器296之動作,尤其是第3圖之解壓縮單元239之動作。流程開始於步驟702。
在步驟702中,第3圖之控制邏輯396接收第2圖之28位元之壓縮第一微程式碼指令247的位元[27:16],並對其解碼。流程繼續至步驟704。
在步驟704中,控制邏輯396判斷是否在步驟702解碼之目前28位元之壓縮第一微程式碼指令247包括逃離指標。在一實施例中,若28位元之壓縮第一微程式碼指令247之既定位元等於一既定數值時,控制邏輯判斷目前28位元之壓縮第一微程式碼指令247包括逃離指標。在一實施例中,既定位元為位元[27:16],而既定數值為0x3FF,然而既定位元以及既定數值並非做限定實施例之用。若目前28位元之壓縮第一微程式碼指令247包括逃離指標,流程進行至步驟706;否則流程進行至步驟712。
在步驟706中,控制邏輯396控制緩衝器398載入28位元之壓縮第一微程式碼指令247之位元[15:0]。流程進行至步驟708。
在步驟708中,當下一28位元之壓縮第一微程式碼指令247(例如,來自核心微程式碼唯讀記憶體104或非核心唯讀記憶體108)到達時,控制邏輯396控制三端輸入多工器392以選擇由緩衝器398所輸出的16位元輸出(例如,於步驟702解碼之28位元之壓縮第一微程式碼指令247之位元[15:0])以及下一28位元之壓縮第一微程式碼指令247之位元[21:0]兩者所結合之38位元結果355,並輸出此38位元結果355作為38位元未壓縮微程式碼指令253,其中此38位元未壓縮微程式碼指令253在此情況下為未壓縮的。在一實施例中,因為管線延遲或與其他 處理核心102爭奪使用非核心唯讀記憶體108之故,下一28位元之壓縮第一微程式碼指令247並未在一相對較大數量之時脈週期內到達。流程前進至步驟714。
在步驟712中,解壓縮器394解壓縮28位元之壓縮第一微程式碼指令247成為38位元之未壓縮微程式碼指令353。如上所述,在一實施例中,解壓縮器394將28位元之壓縮第一微程式碼指令247之12位元對應至38位元之未壓縮微程式碼指令353之22位元,解壓縮器394跳過28位元之壓縮第一微程式碼指令247剩下之16位元不進行對應,但這16位元與對應之22位元相結合而產生38位元之未壓縮微程式碼指令353。在一實施例中,解壓縮器394也包括複數多工器,其中複數多工器將對應之22位元以及跳過的16位元之每一位元,導向至38位元之未壓縮微程式碼指令353之各個位元位置,以回應由解碼28位元之壓縮第一微程式碼指令247之邏輯所產生之選擇信號。舉例來說,在此實例中,壓縮器512產生三個壓縮表514以對應即時跳躍、即時非跳躍以及雜項微程式碼指令,多工器直接根據三種類型之微程式碼指令中,哪一種微程式碼指令被壓縮,而將對應之22位元以及通過的16位元導向至38位元之未壓縮微程式碼指令353。舉例來說,在一實施例中,在即時類型之微程式碼指令之狀態下,複數多工器將跳過的16位元直接指向38位元之未壓縮微程式碼指令353之即時域,儘管跳躍以及非跳躍之未壓縮微程式碼指令353之即時域位置不相同;然而在雜項指令之情況下,複數多工器將跳過之16位元之子集合指向非即時之未壓縮微程式碼指令353之不同區域及/或子區域;並 且多工器根據三種類型之壓縮第一微程式碼指令247之何者被解壓縮,而將對應之22位元之子集合指向不同的38位元之未壓縮微程式碼指令353之區域及/或子區域。控制邏輯396控制三端輸入多工器392自解壓縮器394選擇38位元之未壓縮微程式碼指令353,並且輸出選擇結果353作為選擇性壓縮之38位元未壓縮微程式碼指令253,在此情況下為對目前28位元之壓縮第一微程式碼指令247解壓縮,其中壓縮第一微程式碼指令247係為步驟702所編碼者。流程前進制步驟714。
在步驟714,微轉譯器237轉譯選擇性解壓縮38位元未壓縮微程式碼指令253成為第二微指令246,其中第二微指令246可由微處理器100之執行單元212所執行,流程結束於步驟714。
第8圖顯示一實施例中非核心唯讀記憶體108為28位元寬並維持壓縮之微程式碼字組,核心微程式碼唯讀記憶體104為28位元寬並維持壓縮微程式碼字組,以及非核心微程式碼修補隨機存取記憶體114為38位元寬並維持非壓縮微程式碼字組。在另一實施例中,非核心唯讀記憶體108為38位元寬並維持未壓縮之微程式碼字組而非壓縮之微程式碼字組,如第9、11、13圖所示,在此情況下三端輸入多工器392可於一輸入端接收來自非核心唯讀記憶體108之38位元微程式碼字組。在另一實施例,核心微程式碼唯讀記憶體104為38位元寬並維持非壓縮微程式碼字組而非壓縮之微程式碼字組,如第10圖所示,其中三端輸入多工器392可於一輸入端接收來自核心微程式碼唯讀記憶體104之38位元之微程式碼字組。在另一實施例 中,非核心微程式碼修補隨機存取記憶體114為28位元寬並維持壓縮微程式碼字組而不是非壓縮程式碼字組,如第9圖所示,在此情況下來自非核心微程式碼修補隨機存取記憶體114之28位元微程式碼字組可提供至第一多工器222之一輸入端,並選擇以供應給三端輸入多工器392、解壓縮器394、控制邏輯396以及緩衝器398。再者,根據本發明之另一實施例,每一處理核心102包括核心修補隨機存取記憶體1299,核心修補隨機存取記憶體1299之功能與非核心微程式碼修補隨機存取記憶體114,除了核心修補隨機存取記憶體1299並非共用於複數處理核心102而是各自對應至相對的處理核心102,如第12、13圖所示。在第12圖之實施例中,核心修補隨機存取記憶體1299為38位元寬並維持未壓縮微程式字組,在此情況下三端輸入多工器392可於一輸入端接收來自核心修補隨機存取記憶體1299之38位元微程式碼字組。在第13圖之實施例中,核心修補隨機存取記憶體1299為28位元寬並維持壓縮微程式碼字組,在此情況下第一多工器222可在一輸入端接收來自核心修補隨機存取記憶體1299之28位元微程式碼字組。如上所述,在每一實施例中微程式碼記憶體為28位元寬並維持壓縮微程式碼字組,微程式碼記憶體也可包括多字組未壓縮二進制指令424,多字組未壓縮二進制指令424可分為兩個28位元之字組。
在此所述之選擇性壓縮微程式碼之性能的另一個優點,就是作為儲存微程式碼於微處理器之可程式非揮發記憶體越來越成為商業上可行的方式,微程式碼可一直被開發直到微處理器100的零件之微程式碼記憶體的時間可被編程為止。 再者,若零件/記憶體可在現場被編程的,例如由使用者或現場技術人員,則使用者或技術人員更可在現場重新編程零件以修復錯誤。在任一情況中,新的來源微程式碼502可能必須包括逃離指標,因為硬體之解壓縮器394於該時間點被修復。
儘管所述之複數實施例中微程式碼字組以及記憶體皆被指定寬度,其中以範例敘述之三個實施例,其他實施例中之微程式碼字組以及記憶體可為不同寬度。再者,儘管在此所述之實施例中,壓縮微程式碼指令之寬度為特定寬度,並且未壓縮微程式碼指令之寬度為特定寬度,而這些實施例以範例的方式敘述,而其他實施例中各自之壓縮以及非壓縮微程式碼指令可具有不同寬度。再者,儘管在此所述之複數實施例中使用選擇性壓縮微程式碼指令於多核心處理器,其他實施例包括單一微處理器,其中單一微處理器用以選擇性壓縮微程式碼並包括具有壓縮微程式碼指令之微程式碼記憶體,而微程式碼記憶體具有未壓縮微程式碼指令亦可運用本發明而得以實施。最後,儘管在此所述之實施例在未壓縮二進制表示式以及壓縮二進制表示式之間具有特定對應關係,其他具有不同的對應關係之實施例則可能需要不同的微程式碼指令集。特別的是,位元的數目則多少與解壓縮硬體可接受的延遲範圍之需求有關。
當在此描述本發明之許多實施例,要知道這些實施例僅以範例的方式呈現而非限定於此。電腦相關領域具有技能者皆瞭解,各種型式以及細節上的變形能夠在不背離本發明之範圍的情況下產生。舉例來說,軟體能夠致能功能、製造、模擬、擬真、描述及/或測試在此所述之裝置以及方法。這可 經由使用一般的程式語言(例如:C、C++)、包括Verilog HDL、VHDL等等之硬體描述語言(hardware description languages,HDL)、或其他可得之程式語言。該軟體可放置於任何已知的電腦可讀媒體,例如磁帶(magnetic tape)、半導體、磁碟(magnetic disk)、或光碟(optical disc)(例如:CD-ROM、DVD-ROM等等),或是網路、有線、無線或其他通訊媒體。在此描述之裝置以及方法之實施例可包含於半導體智慧財產權核心中,例如微處理器處理核心(如體現或指定於硬體描述語言)以及轉換製積體電路產品之硬體。此外,在此所述之裝置以及方法可體現為硬體以及軟體之組合。因此,本發明不應限定於任何在此所述之實施例,而應僅根據以下申請專利範圍及其相似物來定義。特別的是,本發明可實現於微處理器裝置,其中微處理器裝置可用於通用電腦中。最後,該領域具有技能者能夠瞭解,他們能夠使用揭露之概念以及特定之實施例最為基礎而設計或調整其他架構,在不背離本發明於申請專利範圍所定義之範圍的情況下實現並完成本發明之相同目的。
100‧‧‧微處理器
102‧‧‧處理核心
104‧‧‧核心微程式碼唯讀記憶體
106‧‧‧仲裁邏輯
108‧‧‧非核心唯讀記憶體
112‧‧‧匯流排
114‧‧‧非核心微程式碼修補隨機存取記憶體

Claims (40)

  1. 一種微處理器,包括:一或多記憶體,用以維持複數微程式碼指令,其中至少一部份之上述微程式碼指令被壓縮;以及一解壓縮單元,用以在上述複數微程式碼指令自上述一或多記憶體之存取後且於被執行之前,由上述解壓縮單元解壓縮被壓縮之上述微程式碼指令,其中上述解壓縮單元用以判斷從上述一或多記憶體存取之上述微程式碼字組是否包括一壓縮微程式碼指令或一未壓縮微程式碼指令之一第一部份,其中上述未壓縮微程式碼指令具有包含於一相鄰字組中之一第二部份。
  2. 如申請專利範圍第1項所述之微處理器,其中上述一或多記憶體用以提供複數微程式碼字組以回應一位址輸入,其中上述微程式碼字組包括上述微程式碼指令,其中至少一部份之上述微程式碼指令被壓縮;以及其中上述解壓縮單元用以解壓縮上述壓縮微程式碼指令而成為複數未壓縮微程式碼指令,並且將上述未壓縮微程式碼指令與上述未壓縮微程式碼指令之上述第一部份以及上述第二部份合併而成為複數未壓縮微程式碼指令。
  3. 如申請專利範圍第2項所述之微處理器,其中判斷存取自上述一或多記憶體之上述微程式碼字組是否包括一壓縮微程式碼指令或一未壓縮微程式碼指令之一第一部份,上述解壓縮單元用以判斷上述微程式碼字組之一既定部份是否即為一既定數值。
  4. 如申請專利範圍第3項所述之微處理器,其中壓縮之上述微程式碼字組之每一者為N位元寬,其中解壓縮壓縮之複數微程式碼指令而成為複數未壓縮微程式碼指令中,上述解壓縮單元用以解壓縮N位元寬之上述微程式碼字組以產生一M位元寬微程式碼字組,其中M以及N為大於零之整數,而M大於N。
  5. 如申請專利範圍第4項所述之微處理器,其中解壓縮N位元寬之上述微程式碼字組以產生上述M位元寬微程式碼字組,上述解壓縮單元用以:根據一既定對應關係輸出複數唯一L位元數值,以回應包含於N位元寬之上述微程式碼字組之一既定K位元之複數唯一數值,其中K為大於零之整數且小於N,L為大於零之整數且小於M;以及通過N位元寬之上述微程式碼字組之剩下複數(N-K)位元,作為上述M位元寬微程式碼字組之剩下複數(M-L)位元。
  6. 如申請專利範圍第5項所述之微處理器,其中通過的上述(N-K)位元包括上述壓縮微程式碼指令之一即時數值域。
  7. 一種微處理器,包括:一或多記憶體,用以維持複數微程式碼指令,其中至少一部份之上述微程式碼指令被壓縮;以及一解壓縮單元,用以在上述複數微程式碼指令自上述一或多記憶體之存取後且於被執行之前,由上述解壓縮單元解壓縮被壓縮之上述微程式碼指令,其中上述一或多記憶體之一第一記憶體用以維持由上述第一記憶體所提供之複數 壓縮微程式碼指令作為複數N位元寬微程式碼字組,其中上述一或多記憶體之一第二記憶體用以維持由上述第二記憶體所提供之複數未壓縮微程式碼指令作為複數M字元寬微程式碼字組,其中M以及N為大於零之整數,且M大於N。
  8. 如申請專利範圍第7項所述之微處理器,其中上述一或多記憶體之上述第二記憶體用以維持包括上述未壓縮微程式碼指令,其中上述未壓縮微程式碼指令包括一或多修補至由上述第一記憶體所提供之上述壓縮微程式碼指令。
  9. 一種微處理器,包括:一或多記憶體,用以維持複數微程式碼指令,其中至少一部份之上述微程式碼指令被壓縮;一解壓縮單元,用以在上述複數微程式碼指令自上述一或多記憶體之存取後且於被執行之前,由上述解壓縮單元解壓縮被壓縮之上述微程式碼指令;複數處理核心,每一上述處理核心包括一微程式碼記憶體,上述微程式碼記憶體係用以維持被壓縮之上述微程式碼指令之一部分之上述一或多記憶體之一者;以及一非核心微程式碼記憶體,共用於上述處理核心,用以維持被壓縮之上述微程式碼指令之一部分。
  10. 一種選擇性解壓縮微程式碼方法,包括:接收來自一記憶體之一第一N位元寬微程式碼字組;判斷上述第一N位元寬微程式碼字組之一既定部份是否為一既定數值;若上述既定部份並非為上述既定數值,解壓縮上述第一N位 元寬微程式碼字組而產生一M位元寬微程式碼字組,其中M及N為大於零之整數;以及若上述既定部份係為上述既定數值,接收來自上述記憶體之一第二N位元寬微程式碼字組,並組合部份之上述第一N位元寬微程式碼字組以及上述第二N位元寬微程式碼字組而產生上述M位元寬微程式碼字組。
  11. 如申請專利範圍第10項所述之選擇性解壓縮微程式碼方法,其中上述第一N位元寬微程式碼字組之上述既定部份與上述M位元寬微程式碼字組係互斥,上述M位元寬微程式碼字組為上述第一N位元寬微程式碼字組之部分與上述第二N位元寬微程式碼字組結合所產生。
  12. 如申請專利範圍第10項所述之選擇性解壓縮微程式碼方法,其中上述第二N位元寬微程式碼字組位於上述記憶體與上述第一N位元寬微程式碼字組相鄰之一鄰近位址。
  13. 如申請專利範圍第10項所述之選擇性解壓縮微程式碼方法,其中若上述既定部份並非上述既定數值,解壓縮上述第一N位元寬微程式碼字組而產生一M位元寬微程式碼字組包括:解壓縮上述第一N位元寬微程式碼字組之複數K位元,並通過上述第一N位元寬微程式碼字組之複數(N-K)位元,其中K為大於零之整數,且N大於K。
  14. 如申請專利範圍第13項所述之選擇性解壓縮微程式碼方法,其中上述解壓縮上述第一N位元寬微程式碼字組之複數K位元包括: 根據一既定對應關係輸出複數唯一L位元數值,以回應複數唯一數值,上述唯一數值包含於上述N位元寬微程式碼字組之一既定K位元,K為大於零之整數且小於M。
  15. 一種產生選擇性壓縮微程式碼方法,包括:接收一來源碼,上述來源碼包括複數微程式碼組合語言指令,其中部分之上述微程式碼組合語言指令之每一者皆以上述來源碼之一指示所標示;若並非以上述指示所標示,對於上述微程式碼組合語言指令之每一者,產生上述微程式碼組合語言指令之一單一字組壓縮二進制表示式,若由上述指示所標示則產生上述微程式碼組合語言指令之一多字組未壓縮二進制表示式。
  16. 如申請專利範圍第15項所述之產生選擇性壓縮微程式碼方法,其中上述單一字組未壓縮二進制表示式以及上述多字組未壓縮二進制表示式之每一字組,係儲存於一微處理器之一記憶體之一寬度。
  17. 如申請專利範圍第15項所述之產生選擇性壓縮微程式碼方法,更包括:接收一對應關係,對於上述來源碼之並未由上述指示標示之唯一微程式碼指令之每一者,上述對應關係對應上述唯一微程式碼指令至一唯一壓縮數值,其中上述產生上述單一自組二進制表示式係根據上述對應關係而執行。
  18. 如申請專利範圍第17項所述之產生選擇性壓縮微程式碼方法,其中上述唯一壓縮數值對應至上述唯一微程式碼指令之何者,僅包括產生至上述微程式碼組合語言指令之上述 單一字組壓縮二進制表示式之複數位元之一子集合。
  19. 一種產生描述方法,適用產生一解壓縮微程式碼裝置之一描述,產生描述方法包括:接收一來源碼,其中上述來源碼包括複數微程式碼組合邏輯語言指令;對於上述微程式碼組合邏輯語言指令之每一者,產生一未壓縮二進制表示式;以及對於上述微程式碼組合語言指令之每一唯一指令,產生上述唯一指令之對應之上述未壓縮二進制表示式之部分對應至一壓縮二進制表示式之一對應關係。
  20. 如申請專利範圍第19項所述之產生描述方法,更包括:利用上述對應關係,產生上述解壓縮微程式碼裝置之一暫存器傳遞語言表示式。
  21. 一種微處理器,包括:複數記憶體,上述記憶體之每一者用以維持複數微程式碼指令;其中上述記憶體之至少一第一記憶體用以提供複數壓縮微程式碼指令之複數M位元寬微程式碼字組;其中上述記憶體之至少一第二記憶體用以提供複數未壓縮微程式碼指令之複數N位元寬微程式碼字組,其中M以及N為大於零之整數且N大於M;以及一解壓縮單元,在上述壓縮微程式碼指令自至少上述第一記憶體存取之後且在執行前,由上述解壓縮單元用以解壓縮上述壓縮微程式碼指令。
  22. 如申請專利範圍第21項所述之微處理器,更包括:複數處理核心,上述處理核心之每一者包括一核心微程式碼記憶體;一非核心微程式碼記憶體,共用於上述處理核心;以及其中上述非核心微程式碼記憶體以及上述核心微程式碼記憶體之每一者係為上述記憶體之一者,用以維持上述微程式碼指令。
  23. 如申請專利範圍第22項所述之微處理器,其中上述核心微程式碼記憶體之每一者係用以提供上述壓縮微程式碼指令之上述第一記憶體之一者;以及其中上述非核心微程式碼記憶體係用以提供上述未壓縮微程式碼指令之上述N位元寬微程式碼字組之上述第二記憶體之一者。
  24. 如申請專利範圍第23項所述之微處理器,其中上述非核心微程式碼記憶體為可寫入,且用以提供複數修補微程式碼指令之微程式碼字組,上述修補微程式碼指令用以修補上述核心微程式碼記憶體之一或多上述壓縮微程式碼指令。
  25. 如申請專利範圍第24項所述之微處理器,更包括:一第二非核心微程式碼記憶體,共用於上述處理核心;以及其中上述第一非核心微程式碼記憶體更用以提供上述修補微程式碼指令之微程式碼字組,上述修補微程式碼指令用以修補上述第二非核心微程式碼記憶體之一或多上述壓縮微程式碼指令。
  26. 如申請專利範圍第22項所述之微處理器,其中上述核心微程式碼記憶體之每一者係用以提供上述未壓縮微程式碼指令之上述第二記憶體之一者;以及其中上述非核心微程式碼記憶體係用以提供上述壓縮微程式碼指令之微程式碼字組之上述第一記憶體之一者。
  27. 如申請專利範圍第21項所述之微處理器,其中上述記憶體之至少一者為可寫入,且用以提供複數修補微程式碼指令之微程式碼字組以修補其他上述記憶體之一或多上述微程式碼指令之一修補微程式碼記憶體。
  28. 如申請專利範圍第27項所述之微處理器,其中上述修補微程式碼記憶體為上述第二記憶體之一部分,用以提供複數未壓縮微程式指令之複數微程式碼字組;以及其中上述記憶體之另一者為至少一第一記憶體之一者,用以提供複數壓縮微程式碼指令。
  29. 如申請專利範圍第21項所述之微處理器,其中上述解壓縮單元用以傳送上述未壓縮微程式碼指令而不需解壓縮。
  30. 一種選擇性解壓縮微程式碼方法,適用於具有複數記憶體之每一者用以維持複數微程式碼指令之一微處理器,選擇性解壓縮微程式碼方法包括:自上述記憶體之至少一第一記憶體存取複數壓縮微程式碼指令之複數M位元寬微程式碼字組;自上述記憶體之至少一第二記憶體存取複數未壓縮微程式碼指令之複數N位元寬微程式碼字組,其中M以及N為大於 零之整數且N大於M;解壓縮自上述第一記憶體存取之上述壓縮微程式碼指令;以及傳送上述未解壓縮微程式指令而不需解壓縮。
  31. 如申請專利範圍第30項所述之選擇性解壓縮微程式碼方法,其中上述微處理器更包括複數處理核心,上述處理核心之每一者包括一核心微程式碼記憶體以及由上述處理核心所共用之一非核心微程式碼記憶體,其中上述非核心微程式碼記憶體以及上述核心微程式碼記憶體之每一者用以維持複數微程式碼指令。
  32. 如申請專利範圍第31項所述之選擇性解壓縮微程式碼方法,其中上述自上述記憶體之至少一第一記憶體存取複數壓縮微程式碼指令之上述M位元寬微程式碼字組包括自上述核心微程式碼記憶體之每一者存取上述壓縮微程式碼指令之上述M位元寬微程式碼字組;以及其中上述自上述記憶體之至少一第二記憶體存取複數未壓縮微程式碼指令之複數N位元寬微程式碼字組包括自上述非核心微程式碼記憶體存取上述未壓縮微程式碼指令之上述N位元寬微程式碼字組。
  33. 如申請專利範圍第32項所述之選擇性解壓縮微程式碼方法,其中上述非核心微程式碼記憶體為可寫入,選擇性解壓縮微程式碼方法更包括:自上述非核心微程式碼記憶體存取複數修補微程式碼指令 之微程式碼字組,以修補上述核心微程式碼記憶體之一或多上述壓縮微程式碼指令。
  34. 如申請專利範圍第33項所述之選擇性解壓縮微程式碼方法,其中上述微處理器包括一第二非核心微程式碼記憶體,上述第二非核心微程式碼記憶體係共用於複數處理核心,選擇性解壓縮微程式碼方法更包括:自上述第一非核心微程式碼記憶體存取上述修補微程式碼指令之微程式碼字組,以修補上述第二非核心微程式碼記憶體之一或多上述微程式碼指令。
  35. 如申請專利範圍第31項所述之選擇性解壓縮微程式碼方法,其中上述自上述記憶體之至少一第二記憶體存取複數未壓縮微程式碼指令之複數N位元寬微程式碼字組包括自上述核心微程式碼記憶體之每一者存取上上述未壓縮微程式碼指令之上述N位元寬微程式碼字組,上述核心微程式碼記憶體之每一者係用以提供上述未壓縮微程式碼指令之上述第二記憶體之一者;以及其中上述自上述記憶體之至少一第一記憶體存取複數壓縮微程式碼指令之複數M位元寬微程式碼字組包括自上述非核心微程式碼記憶體存取上述壓縮微程式碼指令之上述M位元寬微程式碼字組,上述非核心微程式碼記憶體係用以提供上述壓縮微程式碼指令之上述第一記憶體之一者。
  36. 如申請專利範圍第30項所述之選擇性解壓縮微程式碼方法,更包括: 自至少一上述記憶體中存取複數修補微程式碼指令之微程式碼字組,以修補另一上述記憶體之一或多上述微程式碼指令。
  37. 如申請專利範圍第36項所述之選擇性解壓縮微程式碼方法,其中另一上述記憶體為上述第一記憶體之一者,其中上述自上述記憶體之至少一者存取上述修補微程式碼指令之微程式碼字組,包括自上述記憶體之至少一者存取上述微程式碼指令之複數未壓縮微程式碼字組,以修補另一上述記憶體之一或多上述壓縮微程式碼指令。
  38. 一種電腦程式產品,編程於至少一非暫時電腦可使用媒體並與一計算裝置一併使用,電腦程式產品包括:一電腦可用程式碼,體現於上述非暫時電腦可使用媒體以指定一微處理器,上述電腦可用程式碼包括:一第一程式碼,指定複數記憶體,每一上述記憶體用以維持複數微程式碼指令;其中上述記憶體之至少一第一記憶體用以提供複數壓縮微程式碼指令之複數M位元寬微程式碼字組;其中上述記憶體之至少一第二記憶體用以提供複數未壓縮微程式碼指令之複數N位元寬微程式碼字組,其中M以及N為大於零之整數且N大於M;以及一第二程式碼,指定一解壓縮單元,在上述壓縮微程式碼指令自上述第一記憶體存取之後以及執行之前,上述解壓縮單元用以解壓縮上述壓縮微程式碼指令。
  39. 如申請專利範圍第38項所述之電腦程式產品,其中上述非 暫時電腦可使用媒體係為一磁碟、磁帶、或其他電磁、光學或電子儲存媒體之組合。
  40. 如申請專利範圍第38項所述之電腦程式產品,其中上述電腦可用程式碼更包括:一第三程式碼,指定複數處理核心,上述處理核心之每一者具有一核心微程式碼記憶體;一第四程式碼,指令一非核心微程式碼記憶體,上述非核心微程式碼記憶體共用於上述處理核心;以及其中上述非核心微程式碼記憶體以及上述核心微程式碼記憶體之每一者係用以維持複數微程式碼指令之上述記憶體之一者。
TW103125973A 2013-10-18 2014-07-30 微處理器、選擇性解壓縮微程式碼方法、產生選擇性壓縮微程式碼方法、產生描述方法以及電腦程式產品 TWI522910B (zh)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201361893126P 2013-10-18 2013-10-18
US201361897327P 2013-10-30 2013-10-30
US14/088,565 US9361097B2 (en) 2013-10-18 2013-11-25 Selectively compressed microcode
US14/088,620 US9372696B2 (en) 2013-10-18 2013-11-25 Microprocessor with compressed and uncompressed microcode memories

Publications (2)

Publication Number Publication Date
TW201516861A TW201516861A (zh) 2015-05-01
TWI522910B true TWI522910B (zh) 2016-02-21

Family

ID=52098223

Family Applications (1)

Application Number Title Priority Date Filing Date
TW103125973A TWI522910B (zh) 2013-10-18 2014-07-30 微處理器、選擇性解壓縮微程式碼方法、產生選擇性壓縮微程式碼方法、產生描述方法以及電腦程式產品

Country Status (2)

Country Link
CN (3) CN107085513B (zh)
TW (1) TWI522910B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE112016000726B4 (de) * 2015-02-13 2024-08-01 Google LLC (n.d.Ges.d. Staates Delaware) Transparente hardwareunterstützte speicherdekompression
TWI582586B (zh) * 2016-06-01 2017-05-11 神雲科技股份有限公司 輸出電腦系統的機器檢查例外資訊的方法
CN107656854A (zh) * 2016-07-26 2018-02-02 佛山市顺德区顺达电脑厂有限公司 输出计算机系统的机器检查例外信息的方法
CN111384965B (zh) * 2018-12-28 2022-06-17 上海寒武纪信息科技有限公司 数据压缩解压装置和数据解压方法
US11262938B2 (en) * 2020-05-05 2022-03-01 Silicon Motion, Inc. Method and apparatus for performing access management of a memory device with aid of dedicated bit information

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB9406666D0 (en) * 1994-04-05 1994-05-25 Communicate Ltd Computer system
US6199126B1 (en) * 1997-09-23 2001-03-06 International Business Machines Corporation Processor transparent on-the-fly instruction stream decompression
US6691305B1 (en) * 1999-11-10 2004-02-10 Nec Corporation Object code compression using different schemes for different instruction types
CN101398752B (zh) * 2007-09-29 2011-08-31 国际商业机器公司 重叠指令存取单元和重叠指令存取方法
CN101866279B (zh) * 2009-08-14 2012-05-30 威盛电子股份有限公司 微处理器及其相关方法
US8621153B2 (en) * 2009-12-26 2013-12-31 Intel Corporation Microcode refactoring and caching

Also Published As

Publication number Publication date
TW201516861A (zh) 2015-05-01
CN107092464A (zh) 2017-08-25
CN104216682A (zh) 2014-12-17
CN107085513B (zh) 2020-06-12
CN104216682B (zh) 2017-04-19
CN107092464B (zh) 2020-06-23
CN107085513A (zh) 2017-08-22

Similar Documents

Publication Publication Date Title
EP3462307B1 (en) Microprocessor with compressed and uncompressed microcode memories
US20210026634A1 (en) Apparatus with reduced hardware register set using register-emulating memory location to emulate architectural register
EP3435240B1 (en) Systems and methods for performing memory compression
JP6849274B2 (ja) 融合された単一のサイクルのインクリメント−比較−ジャンプを実施するための命令及びロジック
JP6761565B2 (ja) アウトオブオーダーハードウェアソフトウェア協調設計プロセッサにおいてスタック同期命令を用いてプレディケート値のスタックを実装し維持する方法および装置
TWI522910B (zh) 微處理器、選擇性解壓縮微程式碼方法、產生選擇性壓縮微程式碼方法、產生描述方法以及電腦程式產品
KR101839479B1 (ko) 더 넓은 레지스터에의 모드 의존형 부분 폭 로드 프로세서들, 방법들, 및 시스템들
US7802078B2 (en) REP MOVE string instruction execution by selecting loop microinstruction sequence or unrolled sequence based on flag state indicative of low count repeat
JP5869125B2 (ja) エントロピ符号化命令シーケンスの記憶および実行可能な形式への変換のための方法および装置
TW201800948A (zh) 提取資料至具保證完成指示快取階之處理器、方法、系統及指令
KR20160075639A (ko) 이미디에이트 핸들링 및 플래그 핸들링을 위한 프로세서 및 방법
US9830155B2 (en) Microprocessor using compressed and uncompressed microcode storage
TWI502498B (zh) 微處理器、積體電路、計算機程式產品與提供微碼指令儲存空間的方法
KR20220091361A (ko) 내용 어드레싱 가능 데이터 구조들을 사용한 효율적인 디플레이트 압축 해제 방법 및 장치
TW200417926A (en) Selective interrupt suppression
CN116340034A (zh) 用于压缩操作期间的常量检测的装置和方法
JPH0769805B2 (ja) データ処理装置