TWI621065B - 處理器和將架構指令轉譯成微指令的方法 - Google Patents
處理器和將架構指令轉譯成微指令的方法 Download PDFInfo
- Publication number
- TWI621065B TWI621065B TW105139477A TW105139477A TWI621065B TW I621065 B TWI621065 B TW I621065B TW 105139477 A TW105139477 A TW 105139477A TW 105139477 A TW105139477 A TW 105139477A TW I621065 B TWI621065 B TW I621065B
- Authority
- TW
- Taiwan
- Prior art keywords
- microcode
- instruction
- instructions
- call
- branch
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims description 24
- 230000015654 memory Effects 0.000 claims abstract description 39
- 239000000872 buffer Substances 0.000 claims description 18
- 230000004044 response Effects 0.000 claims description 14
- 238000010586 diagram Methods 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 238000013519 translation Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011010 flushing procedure Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 239000000523 sample Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000008685 targeting Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/22—Microcontrol or microprogram arrangements
- G06F9/28—Enhancement of operational speed, e.g. by using several microcontrol devices operating in parallel
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/22—Microcontrol or microprogram arrangements
- G06F9/223—Execution means for microinstructions irrespective of the microinstruction function, e.g. decoding of microinstructions and nanoinstructions; timing of microinstructions; programmable logic arrays; delays and fan-out problems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30058—Conditional branch instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/324—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address using program counter relative addressing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3814—Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3818—Decoding for concurrent execution
- G06F9/3822—Parallel decoding, e.g. parallel decode units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Abstract
一處理器具有執行微指令的執行管線和將架構指令轉譯成為微指令的指令轉譯器。指令轉譯器具有:記憶體,保持微碼指令且每時脈週期提供多個微碼指令;佇列,保持記憶體所提供的微碼指令;分支解碼器,對微碼指令解碼以檢測局部分支指令,使得要將讀取的多條微碼指令中直到程式順序首位局部分支指令為止但不包括程式順序首位局部分支指令的微碼指令寫入佇列,並防止將程式順序首位局部分支指令及其後續微碼指令寫入佇列。局部分支指令由指令轉譯器進行解析。微碼轉譯器將每時脈週期從佇列接收到的多個微碼指令轉譯成微指令以提供至執行管線。
Description
本發明是有關於程式處理器之相關技術,尤其是有關於一種處理器和一種將架構指令轉譯成微指令的方法。
一直以來都存在針對儲存程式處理器的性能改進的恒定需求,其中這些程式處理器通常被稱為中央處理單元(CPU)和微處理器。歷史上,一些處理器已經包括了用以實現處理器的指令集架構(Instruction Set Architecture, ISA)的至少一些架構指令以及用以服務於例外的微碼。傳統的處理器每時脈週期從處理器的微碼記憶體獲取單個微碼指令,這樣特別是在具有每時脈處理多個指令的能力的處理器中可能會限制微編碼架構指令和/或例外服務常式的性能。
本發明提供一種處理器,其具有指令集架構即ISA,所述處理器包括:執行管線,其具有執行微指令的多個執行單元;以及指令轉譯器,用於將所述ISA所定義的架構指令轉譯成微指令,所述指令轉譯器包括:記憶體,用於保持微碼指令並且每時脈週期回應於位址提供多個微碼指令;佇列,用於保持所述記憶體所提供的微碼指令;分支解碼器,其耦接在所述記憶體和所述佇列之間,用於對所述記憶體所提供的所述多個微碼指令進行解碼以檢測所述多個微碼指令中的一個或多個局部分支指令,使得要將所述多個微碼指令中的直到所述一個或多個局部分支指令的程式順序首位局部分支指令為止但不包括所述程式順序首位局部分支指令的微碼指令寫入所述佇列,並且防止將所述多個微碼指令中的所述程式順序首位局部分支指令及其後續微碼指令寫入所述佇列,其中,局部分支指令由所述指令轉譯器而非所述執行管線進行解析;以及多個微碼轉譯器,用於將每時脈週期從所述佇列接收到的多個微碼指令轉譯成多個微指令以提供至所述執行管線。
本發明還提供一種用於將架構指令轉譯成微指令以供執行管線執行的方法,所述架構指令是由處理器的指令集架構即ISA所定義的,所述執行管線具有多個執行單元,所述方法包括以下步驟:通過記憶體來每時脈週期回應於位址而提供多個微碼指令;通過耦接在所述記憶體和佇列之間的分支解碼器來對所述記憶體所提供的所述多個微碼指令進行解碼,以檢測所述多個微碼指令中的一個或多個局部分支指令;使得要將所述多個微碼指令中直到所述一個或多個局部分支指令的程式順序首位局部分支指令為止但不包括所述程式順序首位局部分支指令的微碼指令寫入所述佇列;並且防止將所述多個微碼指令中的所述程式順序首位局部分支指令及其後續微碼指令寫入所述佇列;其中,所述局部分支指令由所述分支解碼器而非由所述執行管線進行解析;以及通過多個微碼轉譯器將每時脈週期從所述佇列接收到的所述多個微碼指令轉譯成多個微指令以提供至所述執行管線。
局部分支指令(local branch instruction)是由指令轉譯器(instruction translator)而非由處理器的執行管線進行解析的分支指令。局部分支指令可以是諸如無條件跳轉指令、呼叫指令或返回指令等的目標位址可以從指令轉譯器的呼叫/返回堆疊獲得的無條件分支指令。局部分支指令還可以是條件分支指令,其中該條件分支指令的條件(諸如靜態條件等)可以由指令轉譯器進行解析,因此無需由執行管線進行解析。
非局部分支指令(non-local branch instruction)是由處理器的執行管線進行解析的分支指令。
微碼(microcode)是作為非架構指令的指令的常式或程式執行緒,其中,該非架構指令在處理器的非架構記憶體中儲存、用於實現架構指令執行和/或服務於例外。由微碼來實現執行的架構指令通常是複雜的和/或不頻繁執行的。微碼所服務的例外可以是架構例外和/或微架構例外。微碼常式可以包括一個或多個分支指令。
微指令(microinstruction)是由處理器的一個或多個執行單元來執行並且由與處理器的ISA定義的指令集不同的指令集所定義的指令。處理器的ISA的示例是x86 ISA。架構指令被轉譯成一個或多個微指令。執行單元所進行的一個或多個微指令的統一執行實現了架構指令,即,進行產生如ISA所定義的架構指令的結果所需的操作。
現在參考圖1,示出用於例示處理器100的方塊圖。處理器100包括指令快取記憶體102、指令轉譯器104和超標量非循序執行管線192。指令快取記憶體102基於架構程式計數器(未示出)對來自系統記憶體的架構指令進行快取記憶體並且將架構指令178提供至指令轉譯器104。指令轉譯器104將架構指令178轉譯成提供至執行管線192的微指令138。執行管線192執行微指令138以產生轉譯後的如處理器100的ISA所定義的架構指令178的結果。在一個實施例中,處理器100 ISA是x86 ISA。指令轉譯器104每時脈週期獲取多個微碼指令(例如參見圖2的微碼指令272)以轉譯成微指令138,從而如這裡更詳細地說明那樣,相對於每時脈週期獲取單個微碼指令的傳統處理器的輸送量而言,增加每時脈週期向執行管線192提供的微指令138的輸送量。這相對於每時脈週期獲取單個微碼指令的傳統處理器而言,潛在地改進了服務於諸如中斷等的例外的微碼的性能。
執行管線192包括重命名單元106、保留站108、執行單元112、架構暫存器116、重排序緩衝器118和記憶體子系統122。執行單元112執行微指令138。在一個實施例中,執行單元112包括一個或多個整數單元、一個或多個媒體/浮點單元、一個或多個分支單元以及一個或多個載入/儲存單元。例如,記憶體子系統122包括記憶體順序緩衝器、一個或多個快取記憶體(例如,一級指令快取記憶體、一級資料快取記憶體)、轉譯後備緩衝器、表查找引擎、一個或多個資料預取器、寫入合併緩衝器以及諸如載入佇列、儲存佇列、探測佇列和填充佇列等的各種請求佇列。
指令轉譯器104按程式順序向重命名單元106提供微指令138。重命名單元106從指令轉譯器104接收微指令138並且按程式順序針對各微指令138分配重排序緩衝器118中的條目。例如,重排序緩衝器118是迴圈佇列,並且分配重排序緩衝器118中的條目以保持微指令138的程式順序。執行單元112不按程式循序執行微指令138。然而,重命名單元106檢查微指令138之間的依賴性並且將依賴性資訊與微指令138一起沿著執行管線192發送。保留站108保持微指令138,直到準備好執行微指令138為止。保留站108和調度器(未示出)使用依賴性資訊來確保在準備好執行微指令138之前不向執行單元112發出微指令138以進行執行。在執行單元112可以執行微指令138的情況下並且在微指令138的所有源運算元均可用的情況下,準備好執行微指令138。更具體地,在執行了微指令138所依賴於的任何微指令138並且產生了其結果作為源運算元的情況下,微指令138的源運算元可用。
在一個實施例中,重排序緩衝器118在各條目中包括用於儲存所執行的微指令138的結果的區域。在已經執行了微指令138並且產生了該微指令138的結果以在結果匯流排上提供從而提供至重排序緩衝器118的情況下,將該微指令138的重排序緩衝器118條目標記為已執行。然而,可以不使微指令138提交,即,微指令138的結果可以不被置於架構狀態,直到該微指令138是執行管線192中最老的微指令138。因而,儘管執行單元112不按程式循序執行微指令138,但重命名單元106和重排序緩衝器118一起運行以確保微指令138按程式順序提交。還可根據需要將這些結果經由轉發匯流排轉發回執行單元112以在下一時脈週期中使用。執行管線192可被配置為每時脈週期使4個最老的微指令138提交。在架構指令178所轉換成的所有微指令138均已提交之後,則架構指令178提交。例如,在作為實現架構指令178的微碼常式的最後一個微指令138的微指令138提交的情況下,使架構指令178提交。
在重排序緩衝器118條目包括各微指令138的結果所用的記憶體的實施例中,使微指令138提交包括將結果寫入適當的架構暫存器116。在可供候選的實施例中,執行管線192包括作為架構暫存器116所用的記憶體的實體暫存器檔(未示出),並且重排序緩衝器118條目不包括結果所用的記憶體。作為替代,重命名單元106針對各微指令138的結果分配實體暫存器檔中的暫存器,並且重命名單元106基於所分配到的實體暫存器檔中的暫存器來檢查依賴性。重命名單元106還維持表示實體暫存器檔中的各暫存器的狀態的表。更具體地,在微指令138提交的情況下,重命名單元106對保持微指令138的結果的實體暫存器檔的暫存器的狀態進行更新,以表示實體暫存器檔現在包含相關聯的架構暫存器116的架構狀態。
指令轉譯器104包括快速轉譯器154、微碼單元156和多工器(mux) 152。快速轉譯器154將架構指令178轉譯成微指令136。微碼單元156將架構指令178轉譯成微指令134。多工器152根據指令轉譯器104的模式選擇來自快速轉譯器154的微指令136或來自微碼單元156的微指令134,以作為微指令138提供至執行管線。在一個實施例中,佇列(未示出)對微指令138進行緩衝以提供至執行管線192。
快速轉譯器154轉譯相對簡單和/或頻繁執行的架構指令178。例如,快速轉譯器154包括如下的可程式設計邏輯陣列的集合,這些可程式設計邏輯陣列針對架構指令178的子集,可在單個時脈週期中將各架構指令178轉譯成一個或多個微指令136。在一個實施例中,快速轉譯器154每時脈週期能夠轉譯多達4個架構指令178並且每時脈週期能夠提供多達6個微指令136。在快速轉譯器154能夠轉譯架構指令178的情況下,指令轉譯器104維持快速轉譯狀態,在這種情況下,多工器152選擇快速轉譯器154所產生的微指令136。
然而,在快速轉譯器154遇到微編碼的架構指令178或者被通知了例外條件的情況下,快速轉譯器154停止轉譯架構指令178並且將控制轉移至微碼單元156並改變成微碼模式,在這種情況下,多工器152選擇微碼單元156所產生的微指令134。在這種情況下,快速轉譯器154提供微碼ROM 202 (參見圖2)中所儲存的進行微編碼架構指令178或服務於例外的微碼常式的位址。以下參考其餘的圖來更詳細地說明微碼單元156及其操作。
在一個實施例中,某些架構指令178是混合的。也就是說,快速轉譯器154提供微碼指令136的一部分並且其餘的架構指令178是微編碼的,即,快速轉譯器154在快速轉譯模式下提供微指令136的頭部,然後模式改變為微碼模式並將控制轉移至微碼單元156,以使得微碼常式能夠經由微碼單元156所提供的微指令134來進行架構指令178的其餘功能。
例如,如以下更詳細地說明那樣,指令轉譯器104每時脈週期獲取多個微碼指令,以增加提供至執行管線192的微指令138的輸送量,從而針對微編碼的架構指令178和/或微編碼的例外服務常式利用執行管線192的超標量能力並提高該超標量能力的利用率。
現在參考圖2,示出用於更詳細地示出圖1的處理器100的指令轉譯器104的方塊圖。指令轉譯器104包括位址產生器206、微碼ROM 202、分支解碼器208、微碼指令佇列212、佇列控制器214、多個微碼轉譯器216和呼叫/返回單元222 (CRU)。微碼ROM 202是包括4個可分開定址的儲存體(bank)(統稱為儲存體204以及單獨稱為儲存體204的儲存體A 204A、儲存體B 204B、儲存體C 204C和儲存體D 204D)的儲存體型記憶體。以這種方式,微碼ROM 202每時脈週期可向分支解碼器208提供4個微碼指令272。如圖所示,微碼ROM 202將4個微碼指令272分別在標記為0~3的4個通道上提供至分支解碼器208。通道0按程式順序提供第一微碼指令272,通道1按程式順序提供第二微碼指令272,通道2按程式順序提供第三微碼指令272,並且通道3按程式順序提供第四微碼指令272。根據一個實施例,各儲存體204有利地具有單個讀取埠以使得該儲存體204的大小和功耗最小化。
位址產生器206產生提供至微碼ROM 202的微碼取指位址268。第一加法器224-1使取指位址268遞增1,第二加法器224-2使取指位址268遞增2,並且第三加法器224-3使取指位址268遞增3,並且將遞增後的各位址與取指位址268一起分別提供至微碼ROM 202。將4個位址各自提供至微碼ROM 202的相應儲存體204以實現4個順次微碼指令272的獲取。微碼ROM 202包括將4個位址各自引導至4個儲存體204中的適當儲存體204的第一組多工器(未示出)以及根據取指位址268的2個最低有效位元將4個儲存體204所提供的4個微碼指令272各自引導至分支解碼器208的適當通道的第二組多工器(未示出)。如果取指位址268的最低兩位的值是0,則將取指位址268提供至儲存體A 204A,將遞增1的位址提供至儲存體B 204B,將遞增2的位址提供至儲存體C 204C,並且將遞增3的位址提供至儲存體D 204D;如果取指位址268的最低兩位的值是1,則將取指位址268提供至儲存體B 204B,將遞增1的位址提供至儲存體C 204C,將遞增2的位址提供至儲存體D 204D,並且將遞增3的位址提供至儲存體A 204A;如果取指位址268的最低兩位的值是2,則將取指位址268提供至儲存體C 204C,將遞增1的位址提供至儲存體D 204D,將遞增2的位址提供至儲存體A 204A,並且將遞增3的位址提供至儲存體B 204B;以及如果取指位址268的最低兩位的值是3,則將取指位址268提供至儲存體D 204D,將遞增1的位址提供至儲存體A 204A,將遞增2的位址提供至儲存體B 204B,將遞增3的位址提供至儲存體C 204C。類似地,將儲存體A 204A的輸出提供至分支解碼器208的與取指位址268對4取模數的最低兩位的值相對應的通道;將儲存體B 204B的輸出提供至分支解碼器208的與取指位址268加1並對4取模數的最低兩位的值相對應的通道;將儲存體C 204C的輸出提供至分支解碼器208的與取指位址268加2並對4取模數的最低兩位的值相對應的通道;並且將儲存體D 204D的輸出提供至分支解碼器208的與取指位址268加3並對4取模數的最低兩位的值相對應的通道。
取指位址268保持在微碼程式計數器(未示出)中。最初,即,在快速轉譯器154切換至微碼模式時,微碼程式計數器載入有快速轉譯器154所提供的微碼常式的位址。如上所述,局部分支指令是由指令轉譯器104、更具體地由微碼單元156而非由執行管線192進行解析的分支指令。與此相對,非局部分支指令是必須發出至執行管線192以進行解析並且不能由微碼單元156進行解析的分支指令。對分支指令進行解析意味著判斷是否採用分支指令,以及如果採用分支指令則確定分支指令的目標位址。每當從微碼ROM 202獲取到微碼指令272序列時,更新取指位址268(即,微碼程式計數器)。如果分支解碼器208判斷為微碼指令272序列中沒有任何局部分支指令,則位址產生器206使得獲取下一順次指令。更具體地,加法器226使取指位址268遞增4,即,進行增量為微碼指令272數量的遞增。然而,如果分支解碼器208在微碼指令272序列中檢測到局部分支指令,則分支解碼器208對該局部分支指令進行解析,並且如果採用了該分支指令的方向,則分支解碼器208向位址產生器206提供解析後的目標位址266以更新微碼程式計數器,從而獲取解析後的目標位址266處的下一微碼指令272序列。
在調用微碼指令的情況下,始終採用該方向,並且分支解碼器208所計算出的目標位址266是呼叫指令之後的下一順次位址,如以下更詳細說明的那樣,該下一順次位址是提供至呼叫/返回單元222並被推入當前呼叫/返回堆疊254的返回位址。調用微碼指令由微碼單元156進行解析,因而是局部分支指令。在返回微碼指令的情況下,始終採用該方向,並且如以下更詳細說明的那樣,從當前呼叫/返回堆疊254彈出返回位址298,並且將返回位址298提供至位址產生器206以更新微碼程式計數器。返回微碼指令由微碼單元156進行解析,因而是局部分支指令。始終採用無條件跳轉微碼指令,並且無條件跳轉微碼指令可以是局部分支或非局部分支。在局部無條件跳轉的情況下,在指令本身中指定目標位址266,而執行管線192計算非局部無條件跳轉的目標位址。類似地,條件跳轉微碼指令可以是局部或非局部的。在局部條件跳轉微碼指令的情況下,微碼單元156對方向進行解析並且目標位址266包括在指令本身中,而執行管線192對方向進行解析並且計算非局部條件跳轉的目標位址。優選地,微碼單元156有效地預測到不採用任何非局部分支指令,並且不基於微碼指令272序列中非局部分支指令的存在而中斷順次獲取處理。結果,如果執行管線192將非局部分支指令解析為已採用,則沖刷(flush)包括微碼指令佇列212的微碼單元156管線,並且執行管線192提供新的目標位址以更新微碼程式計數器。
分支解碼器208從微碼ROM 202接收微碼指令272序列並且使微碼指令272通過作為微碼指令274。分支解碼器208對微碼指令272序列進行解碼以查找局部分支指令和非局部分支指令這兩者。特別地,分支解碼器208在從0至3即按程式順序的通道搜索接收到的微碼指令272序列,並且檢測到具有局部分支指令的第一個通道(如果存在),這裡將該局部分支指令稱為“程式順序首位的局部分支指令”。分支解碼器208還確定以下通道中的微碼指令272序列中的非局部分支的數量,其中該通道在具有程式順序首位的局部分支指令的通道之前,並且分支解碼器208將該數量在信號num_non-local_br 282上輸出至呼叫/返回單元222。分支解碼器208還判斷程式順序首位的局部分支指令是否為呼叫指令,並且如果是呼叫指令,則使得被提供至呼叫/返回單元222的推入信號有效。分支解碼器208還判斷程式順序首位的局部分支指令是否為返回指令,並且如果是返回指令,則使得被提供至呼叫/返回單元222的彈出信號286有效。
分支解碼器208還將信號num_valid_instrs 288提供至佇列控制器214,該信號表示微碼指令272序列中要寫入佇列212中的指令的數量。更具體地,如果num_valid_instrs 288的值是N,則將分支解碼器208所提供的前N個微碼指令274寫入佇列212。佇列控制器214對微碼指令274向佇列212中由提供至佇列212的寫入指標244所指定的位置的寫入進行控制。佇列控制器214通過使當前寫入指標244的值進行增量為num_valid_instrs 288對佇列212的大小(即,佇列212中的條目的數量)取模數的遞增,來更新寫入指標244。最後,分支解碼器208將程式順序首位的局部分支指令的目標位址266提供給位址產生器206。num_valid_instrs 288是微碼指令272序列中處於程式順序首位的局部分支指令之前但不包括程式順序首位的局部分支指令的指令的數量。因而,如果不存在局部分支指令,則num_valid_instrs 288為4;如果程式順序首位的局部分支指令處於通道3中,則num_valid_instrs 288為3;如果程式順序首位的局部分支指令處於通道2中,則num_valid_instrs 288為2;如果程式順序首位的局部分支指令處於通道1中,則num_valid_instrs 288為1;以及如果程式順序首位的局部分支指令處於通道0中,則num_valid_instrs 288為0。因而,在分支解碼器208在微碼指令272序列中檢測到局部分支指令的情況下,分支解碼器208有效地丟棄程式順序首位的局部分支指令之後且包括順序首位的局部分支指令的微碼指令274,即,分支解碼器208使得不將這些微碼指令274寫入佇列212。
在功能上將分支解碼器208放置在微碼ROM 202和佇列212之間,以使得分支解碼器208在微碼指令272序列被寫入至佇列212之前對微碼指令272序列進行解碼,這相對於在功能上將分支解碼器208放置在佇列212之後而言具有優點。首先,這使得能夠僅將微碼指令272序列中直到程式順序首位的局部分支指令但不包括程式順序首位的局部分支指令的微碼指令寫入佇列212,並且不將跟隨在程式順序首位的局部分支指令之後的微碼指令寫入佇列212。這樣可以省電。此外,在分支解碼器208對局部分支進行了解碼的情況下,這避免了對佇列212進行使性能下降的沖刷的需求。
在微碼指令274填滿佇列212的情況下,佇列212使得至位址產生器206的已滿264有效,這引起位址產生器206停止從微碼ROM 202獲取指令。然而,有利地,只要佇列212未滿,則即使在例如由於執行管線192暫停而使得執行管線192不能從指令轉譯器104接收微指令138的情況下,位址產生器206也繼續進行獲取並且用微碼指令274來填充佇列212。此外,佇列212可以減少與微碼單元156管線的長度相關聯的性能損失,其中在一個實施例中,微碼單元156管線包括4個管線級,由此引起從存取微碼ROM 202起到向執行管線192提供根據微碼ROM 202轉譯得到的微指令134的4個時脈週期。
在佇列212中沒有微碼指令274的情況下,佇列212使得至微碼轉譯器216的為空262有效,這引起微碼轉譯器216停止將微碼指令276轉譯成圖1的微指令134。然而,有利地,只要佇列212不為空,則微碼轉譯器216每時脈週期從佇列212讀取微碼指令276並將這些微碼指令276轉譯成微指令134。優選地,佇列212隨著各微碼指令276提供用以表示各微碼指令276是否有效的有效信號,以使得微碼轉譯器216不轉譯無效的微碼指令276。例如,如果佇列212僅包含兩個微碼指令276,則佇列212將這兩個微碼指令276提供在通道0和1上並且使得與通道0和1相關聯的有效信號有效,而使得與通道2和3相關聯的有效信號無效。優選地,佇列控制器214將佇列212中的微碼指令276的數量確定為寫入指標244的值減去下述的讀取指標242的值的差。
微碼轉譯器216將表示給定時脈週期內轉譯成微指令134的微碼指令276的數量的num_translated信號246提供至佇列控制器214。佇列控制器214對來自佇列中的由提供至佇列212的讀取指標242所指定的位置的微碼指令276的讀取進行控制。佇列控制器214通過使當前讀取指標242進行增量為num_traslated信號246的值對佇列212的大小(即,佇列212中的條目的數量)取模數的遞增來更新讀取指標242。
在一個實施例中,可以根據微碼指令276的複雜度將微碼指令276轉譯成1~4個微指令。優選地,存在各自能夠將微碼指令276轉譯成不同數量的微指令的4個微碼轉譯器216。優選地,通道0的轉譯器216能夠將任何類型的微碼指令276轉譯成要求數量(即,多達4個)的微指令;通道1的轉譯器216能夠對要求1~3個微指令的類型的微碼指令276進行轉譯;通道2的轉譯器216能夠對要求1~2個微指令的類型的微碼指令276進行轉譯;以及通道3的轉譯器216能夠對要求僅一個微指令的類型的微碼指令276進行轉譯。微碼轉譯器216包括接收4個微碼轉譯器216的輸出的複用矩陣(未示出),並且選擇有效的微指令以作為微指令134提供至圖1的多工器152。因而,例如,在給定時脈週期內,通道0的微碼轉譯器216可能會遇到該轉譯器轉譯成單個微指令134的微碼指令276,通道1的微碼轉譯器216可能會遇到要求轉譯成4個微指令134的微碼指令276,在這種情況下,這些微碼轉譯器216將僅提供從通道0中的微碼指令276轉譯得到的單個微指令134,這是由於僅存在供微指令134用的3個剩餘槽,而不是4個。然而,有利地,微碼指令佇列212提供緩衝器以潛在地改善由於微碼指令流的複雜度、以及指令流內的可變複雜度微碼指令相對於彼此的位置的可變性而引起的每時脈週期所轉譯的微碼指令的數量的可變性的影響。
呼叫/返回單元222包括推測指標258、非推測指標256、多個呼叫/返回堆疊254以及與呼叫/返回堆疊254相關聯的相應多個計數器252。推測指標258指向當前呼叫/返回堆疊254,即,回應於調用/返回微碼指令而推入/彈出返回位址的呼叫/返回堆疊254。推測指標258還指向與當前呼叫/返回堆疊254相關聯的計數器252。非推測指標256指向非推測呼叫/返回堆疊254和關聯的計數器252,其中在要採用由執行管線192進行解析的非局部分支指令(即,隱含錯誤地預測為不採用微碼單元156的非局部分支指令)的情況下,微碼單元156使該計數器252恢復。也就是說,非預測呼叫/返回堆疊254保持與處理器100中不存在未解析的非局部分支指令的情況下分支解碼器208所遇到的呼叫指令相關聯的返回位址。在這種情況下,推測指標258載入有非推測指標256的值,即,更新推測指標258以指向非推測呼叫/返回堆疊254。
各計數器252對從分配到相應的呼叫/返回堆疊254起分支解碼器208所遇到的非局部分支指令的數量進行計數。在分支解碼器208從遇到了一個或多個非局部分支指令起(這是由當前計數器252的值為非零所表示的)遇到第一個呼叫/返回指令的情況下(即,在分支解碼器208使推入284/彈出286有效的情況下),呼叫/返回單元222分配新的呼叫/返回堆疊254。在這種情況下,呼叫/返回單元222在將返回位址推入/彈出新分配的呼叫/返回堆疊254之前,將當前呼叫/返回堆疊254的內容複製到新分配的呼叫/返回堆疊254並且將推測指標258更新為指向新分配的呼叫/返回堆疊254,以使得新分配的呼叫/返回堆疊254成為當前呼叫/返回堆疊254。與新分配的呼叫/返回堆疊254相關聯的計數器252清零。注意,呼叫/返回指令之前的一個或多個非局部分支指令可以存在於同一微碼指令272序列中,在這種情況下,呼叫/返回單元222使當前計數器252遞增並且分配推入/彈出返回位址的新的呼叫/返回堆疊254。每當執行管線192解析非局部分支指令時,呼叫/返回單元222使非推測計數器252遞減。在非推測計數器252遞減至0的情況下,這表示不存在更多與非推測呼叫/返回堆疊254相關聯的未解析的非局部分支指令,因此呼叫/返回單元222使非推測指標256遞增以指向下一呼叫/返回堆疊254。
在一個實施例中,呼叫/返回單元222以與為了所有目的通過引用包含於此的美國專利號7,975,132中所述的微碼單元的快速呼叫/返回堆疊單元類似的方式運行,但呼叫/返回單元222被修改為容納每時脈週期來自微碼ROM的多個微碼指令的獲取而非每時脈週期單個微碼指令的獲取。更具體地,如上所述,分支解碼器208檢測微碼指令272序列中處於程式順序首位的局部分支指令之前的非局部分支指令的數量,並且呼叫/返回單元222使當前計數器252進行該數量而非1的遞增。
優選地,微碼單元156還包括可由系統軟體(例如,BIOS或作業系統,例如,經由x86寫入模型專用暫存器(WRMSR)架構指令)進行寫入以修補微碼的修補隨機存取記憶體(RAM)(未示出)和修補內容可定址記憶體(CAM)。修補CAM接收取指位址268及其3個遞增值。如果取指位址268或者其遞增值中的任何遞增值與修補CAM中的位址發生碰撞,則修補CAM向修補RAM提供位址。回應於此,修補RAM提供微碼指令,並且多工器(未示出)從修補RAM而非來自微碼ROM 202的微碼指令272中選擇微碼指令。
儘管描述了每時脈週期從微碼ROM 202獲取到的微碼指令272的數量是4的實施例,但考慮到該數量多於或少於4但至少為2的其它實施例。此外,儘管描述了每時脈週期微碼轉譯器216所轉譯的微碼指令276的數量多達4個的實施例,但考慮到該數量多於或少於4但至少為2的其它實施例。最後,儘管描述了每時脈週期指令轉譯器104向執行管線192提供的微指令134的數量多達4個的實施例,但考慮到該數量多於或少於4但至少為2的其它實施例。
現在參考圖3,示出用於例示圖2的微碼單元156的操作的流程圖。流程從區塊302開始。
在區塊302中,位址產生器206將取指位址268提供至微碼ROM 202,微碼ROM 202回應於此將4個微碼指令272的微碼指令272序列提供至分支解碼器208。流程進入區塊304。
在區塊304中,分支解碼器208對微碼指令272序列進行解碼以檢測局部和非局部分支指令(如果存在)。流程進入區塊306。
在區塊306中,分支解碼器208向呼叫/返回單元222提供微碼指令272序列中按程式順序出現在程式順序首位的局部分支指令之前的非局部分支指令的數量,其中該數量可以為零。回應於此,呼叫/返回單元222使當前計數器252進行該數量的遞增。流程進入決定區塊308。
在決定區塊308中,分支解碼器208判斷程式順序首位的局部分支指令是否為呼叫/返回指令。如果不是,則流程進入區塊314;否則,流程進入區塊312。
在區塊312中,如果程式順序首位的局部分支指令是呼叫指令,則分支解碼器208使得至呼叫/返回單元222的推入信號284有效,呼叫/返回單元222響應於此將目標位址266推入當前呼叫/返回堆疊254以提供至位址產生器206。然而,如果程式順序首位的局部分支指令是返回指令,則分支解碼器使得至呼叫/返回單元222的彈出信號286有效,呼叫/返回單元222回應於此將返回位址298彈出當前呼叫/返回堆疊254以提供至位址產生器206。流程進入區塊314。
在區塊314中,分支解碼器向微碼指令佇列212表示要將微碼指令272序列中的哪些微碼指令寫入佇列212。更具體地,如上所述,僅將微碼指令272序列中直到程式順序首位的局部分支指令為止但不包括程式順序首位的局部分支指令的微碼指令寫入佇列212。流程進入區塊316。
在區塊316中,分支解碼器208對程式順序首位的局部分支指令(如果存在)進行解析,並且將取指位址268更新為所解析的程式順序首位的局部分支指令的目標位址266。否則,位址產生器206使取指位址268遞增4。只要佇列212不為空,則流程返回至區塊302以將下一微碼指令272序列獲取到佇列212中。
現在參考圖4,示出用於例示圖2的微碼單元156的操作的流程圖。流程從區塊402開始。
在區塊402中,與圖3中的從微碼ROM獲取微碼指令的微碼指令272序列、由分支解碼器208對該微碼指令272序列進行解碼以及在局部分支指令的情況下對該微碼指令272序列進行解析、並且只要佇列212不為空則將該微碼指令272序列寫入佇列212的操作並行地,微碼轉譯器216從佇列212讀取微碼指令並且將這些微碼指令轉譯成微指令以提供至執行管線192。流程結束於區塊402。
儘管這裡已經說明了本發明的各種實施例,但應理解,這些實施例僅是以示例而非限制性的方式所呈現的。對於電腦相關領域的技術人員應顯而易見,在沒有背離本發明的範圍的情況下,可以對本發明進行形式和細節方面的各種修改。例如,軟體例如可以啟用這裡所述的設備和方法的功能、製造、建模、類比、說明和/或測試。這可以經由一般程式設計語言(例如,C、C++)、包括Verilog HDL、VHDL等的硬體描述語言(HDL)或其它可用程式的使用來實現。這些軟體可以放置在諸如磁帶、半導體、磁片或光碟(例如,CD-ROM、DVD-ROM等)等的任何已知的電腦可用介質、網路、配線或其它通信介質中。這裡所述的設備和方法的實施例可以包括在諸如(例如,以HDL實現或指定的)處理器核心等的半導體智慧財產權核心中並且在生產積體電路時轉換成硬體。此外,這裡所述的設備和方法可以作為硬體和軟體的組合來實現。因而,本發明不應侷限於這裡所述的任何典型實施例,而應僅根據所附申請專利範圍及其均等物來限定。具體地,本發明可以在通用電腦中能夠使用的處理器裝置中實現。最後,本領域技術人員應理解,在沒有背離由所附申請專利範圍限定的本發明的範圍的情況下,他們可以容易地使用所公開的概念和特定實施例作為用於設計或修改其它結構的基礎,以實施與本發明的目的相同的目的。
100‧‧‧處理器
102‧‧‧指令快取記憶體
104‧‧‧指令轉譯器
106‧‧‧重命名單元
108‧‧‧保留站
112‧‧‧執行單元
116‧‧‧架構暫存器
118‧‧‧重排序緩衝器
122‧‧‧記憶體子系統
134、136、138‧‧‧微指令
152‧‧‧多工器
154‧‧‧快速轉譯器
156‧‧‧微碼單元
178‧‧‧架構指令
192‧‧‧超標量非循序執行管線
202‧‧‧微碼ROM
204A‧‧‧儲存體A
204B‧‧‧儲存體B
204C‧‧‧儲存體C
204D‧‧‧儲存體D
206‧‧‧位址產生器
208‧‧‧分支解碼器
212‧‧‧微碼指令佇列
214‧‧‧佇列控制器
216‧‧‧微碼轉譯器
222‧‧‧呼叫/返回單元
224-1‧‧‧第一加法器
224-2‧‧‧第二加法器
224-3‧‧‧第三加法器
226‧‧‧加法器
242‧‧‧讀取指標
244‧‧‧寫入指標
246‧‧‧num_traslated信號
252‧‧‧計數器
254‧‧‧呼叫/返回堆疊
256‧‧‧非推測指標
258‧‧‧推測指標
262‧‧‧為空
264‧‧‧已滿
266‧‧‧目標位址
268‧‧‧取指位址
272、274、276‧‧‧微碼指令
282‧‧‧信號num_non-local_br
284‧‧‧推入
286‧‧‧彈出
288‧‧‧信號num_valid_instrs
298‧‧‧返回位址
3 圖1是示出處理器的方塊圖; 4 圖2是更詳細地示出圖1的處理器的指令轉譯器的方塊圖; 5 圖3是示出圖2的微碼單元的操作的流程圖; 6 圖4是示出圖2的微碼單元的操作的流程圖。
Claims (20)
- 一種處理器,其具有指令集架構(ISA),該處理器包括:一執行管線,其具有執行微指令的多個執行單元;以及一指令轉譯器,用於將所述ISA所定義的架構指令轉譯成所述微指令,該指令轉譯器包括:一記憶體,用於保持微碼指令並且每時脈週期回應於一位址提供多個微碼指令;一佇列,用於保持該記憶體所提供的微碼指令;一分支解碼器,其耦接在該記憶體和該佇列之間,用於對該記憶體所提供的該些微碼指令進行解碼以檢測該些微碼指令中的一個或多個局部分支指令,使得要將該些微碼指令中的直到所述一個或多個局部分支指令的程式順序首位局部分支指令為止但不包括所述程式順序首位局部分支指令的微碼指令寫入該佇列,並且防止將該些微碼指令中的所述程式順序首位局部分支指令及其後續微碼指令寫入該佇列,其中,該些局部分支指令由該指令轉譯器而非該執行管線進行解析;以及多個微碼轉譯器,用於將每時脈週期從該佇列接收到的多個微碼指令轉譯成多個微指令以提供至該執行管線。
- 如申請專利範圍第1項所述的處理器,其中,該記憶體每時脈週期所提供的該些微碼指令為至少4個。
- 如申請專利範圍第1項所述的處理器,其中,該指令轉譯器還包括一呼叫/返回單元,該呼叫/返回單元具有多個呼叫/返回堆疊,該些呼叫/返回堆疊用於保持與已經由該分支解碼器進行了解碼的呼叫指令相關聯並且相對應的返回指令尚未由該分支解碼器進行解碼的返回位址;以及 其中,在所述程式順序首位局部分支指令是呼叫/返回指令的情況下,該分支解碼器指示該呼叫/返回單元將返回位址推入/彈出該些呼叫/返回堆疊中的當前呼叫/返回堆疊。
- 如申請專利範圍第3項所述的處理器,其中,該呼叫/返回單元還包括與該些呼叫/返回堆疊相對應的多個計數器,其中,該些計數器中的各計數器在該些呼叫/返回堆疊中的相對應的呼叫/返回堆疊是該些呼叫/返回堆疊中的當前呼叫/返回堆疊的情況下,保持尚未由該執行管線進行解析而由該分支解碼器進行了解碼的非局部分支指令的計數;以及其中,該分支解碼器對處於該些微碼指令內的所述程式順序首位局部分支指令之前的非局部分支指令的數量進行計數,並且該呼叫/返回單元將所計數的數量添加至該些計數器中與該些呼叫/返回堆疊中的當前呼叫/返回堆疊相對應的計數器,其中,所述非局部分支指令由該執行管線而非由該指令轉譯器進行解析。
- 如申請專利範圍第1項所述的處理器,其中,該記憶體每時脈週期回應於位址而提供的該些微碼指令是N個微碼指令;該記憶體包括N個儲存體,並且所述N個儲存體中的各儲存體具有單個讀取埠;所述N個儲存體中的第一個儲存體回應於所述位址而提供該些微碼指令中的第一個微碼指令;以及其餘N-1個儲存體中的各儲存體回應於所述位址的各遞增位址而提供該些微碼指令中的相應微碼指令;其中,N為大於1的正整數。
- 如申請專利範圍第1項所述的處理器,其中,還包括: 一寫入指標,其指向每時脈週期寫入微碼指令的該佇列中的位置;以及一佇列控制器,用於使該寫入指標每時脈週期進行增量為寫入該佇列的微碼指令的數量的遞增。
- 如申請專利範圍第1項所述的處理器,其中,還包括:一讀取指標,其指向該些微碼轉譯器讀取微碼指令的該佇列中的位置;以及一佇列控制器,用於使該讀取指標每時脈週期進行增量為該些微碼轉譯器所轉譯的微碼指令的數量的遞增。
- 如申請專利範圍第1項所述的處理器,其中,該處理器是x86 ISA處理器。
- 如申請專利範圍第1項所述的處理器,其中,該指令轉譯器被配置為即使在該執行管線當前不能從該指令轉譯器接收微指令的情況下也繼續從該記憶體獲取微碼指令以提供至該佇列,直到該佇列已滿為止。
- 如申請專利範圍第1項所述的處理器,其中,在該些微碼指令包括局部分支指令的情況下,所述位址更新為由所述程式順序首位局部分支指令所指定的目標位址。
- 如申請專利範圍第1項所述的處理器,其中,在該些微碼指令中沒有局部分支指令的情況下,所述位址遞增N,其中,N是該記憶體每時脈週期所提供的該些微碼指令的數量,且N為大於1的正整數。
- 如申請專利範圍第1項所述的處理器,其中,該些微碼轉譯器各自被配置為將微碼指令轉譯成最大數量不同的微指令。
- 一種用於將架構指令轉譯成微指令以供執行管線執行的方法,所述架構指令是由處理器的指令集架構(ISA)所定義的,該執行管線具有多個執行單元,所述方法包括以下步驟:通過一記憶體來每時脈週期回應於位址而提供多個微碼指令;通過耦接在該記憶體和一佇列之間的一分支解碼器來對該記憶體所提供的該些微碼指令進行解碼,以檢測該些微碼指令中的一個或多個局部分支指令;使得要將該些微碼指令中的直到所述一個或多個局部分支指令的程式順序首位局部分支指令為止但不包括所述程式順序首位局部分支指令的微碼指令寫入該佇列,並且防止將該些微碼指令中的所述程式順序首位局部分支指令及其後續微碼指令寫入該佇列;其中,該些局部分支指令由該分支解碼器而非由該執行管線進行解析;以及通過多個微碼轉譯器將每時脈週期從該佇列接收到的多個微碼指令轉譯成多個微指令以提供至該執行管線。
- 如申請專利範圍第13項所述的方法,其中,該記憶體每時脈週期所提供的所述多個微碼指令為至少4個。
- 如申請專利範圍第13項所述的方法,其中,該處理器還包括一呼叫/返回單元,該呼叫/返回單元具有多個呼叫/返回堆疊,該些呼叫/返回堆疊用於保持與已經由該分支解碼器進行了解碼的呼叫指令相關聯並且相對應的返回指令尚未由該分支解碼器進行解碼的返回位址;以及所述方法還包括:在所述程式順序首位局部分支指令是呼叫/返回指令的情況下:通過該分支解碼器來指示該呼叫/返回單元將返回位址推入/彈出該 些呼叫/返回堆疊中的當前呼叫/返回堆疊。
- 如申請專利範圍第15項所述的方法,其中,該呼叫/返回單元還包括與該些呼叫/返回堆疊相對應的多個計數器,其中,該些計數器中的各計數器在該些呼叫/返回堆疊中的相對應的呼叫/返回堆疊是該些呼叫/返回堆疊中的當前呼叫/返回堆疊的情況下,保持尚未由該執行管線進行解析而由該分支解碼器進行了解碼的非局部分支指令的計數;以及所述方法還包括:通過該分支解碼器來對處於該些微碼指令內的在所述程式順序首位局部分支指令之前的非局部分支指令的數量進行計數;通過該呼叫/返回單元將所計數的數量添加至該些計數器中與該些呼叫/返回堆疊中的當前呼叫/返回堆疊相對應的計數器;以及其中,所述非局部分支指令由該執行管線而非由該分支解碼器進行解析。
- 如申請專利範圍第13項所述的方法,其中,還包括:該記憶體每時脈週期回應於位址而提供的該些微碼指令是N個微碼指令;該記憶體包括N個儲存體,並且所述N個儲存體中的各儲存體具有單個讀取埠;通過所述N個儲存體中的第一個儲存體來回應於所述位址而提供該些微碼指令中的第一個微碼指令;以及通過其餘N-1個儲存體中的各儲存體來回應於所述位址的各遞增位址而提供該些微碼指令中的相應微碼指令;其中,N為大於1的正整數。
- 如申請專利範圍第13項所述的方法,其中,還包括: 通過一寫入指標來指向每時脈週期寫入微碼指令的該佇列中的位置;以及使該寫入指標每時脈週期進行增量為寫入該佇列的微碼指令的數量的遞增。
- 如申請專利範圍第13項所述的方法,其中,還包括:通過一讀取指標來指向該些微碼轉譯器讀取微碼指令的該佇列中的位置;以及使該讀取指標每時脈週期進行增量為該些微碼轉譯器所轉譯的微碼指令的數量的遞增。
- 如申請專利範圍第13項所述的方法,其中,還包括:即使在該執行管線當前不能接收微指令的情況下也繼續從該記憶體獲取微碼指令以提供至該佇列,直到該佇列已滿為止。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610875658.6A CN106406814B (zh) | 2016-09-30 | 2016-09-30 | 处理器和将架构指令转译成微指令的方法 |
??201610875658.6 | 2016-09-30 |
Publications (2)
Publication Number | Publication Date |
---|---|
TWI621065B true TWI621065B (zh) | 2018-04-11 |
TW201814501A TW201814501A (zh) | 2018-04-16 |
Family
ID=57256176
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW105139477A TWI621065B (zh) | 2016-09-30 | 2016-11-30 | 處理器和將架構指令轉譯成微指令的方法 |
Country Status (6)
Country | Link |
---|---|
US (1) | US10073698B2 (zh) |
EP (1) | EP3301566B1 (zh) |
JP (1) | JP6856358B2 (zh) |
KR (1) | KR102601858B1 (zh) |
CN (1) | CN106406814B (zh) |
TW (1) | TWI621065B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113553102A (zh) * | 2021-08-11 | 2021-10-26 | 成都海光微电子技术有限公司 | 微码取指方法、微码存储组合产生方法、装置、设备 |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108228239B (zh) * | 2016-12-13 | 2021-04-20 | 龙芯中科技术股份有限公司 | 基于快速模拟器qemu的分支指令抓取方法和装置 |
US20180203703A1 (en) * | 2017-01-13 | 2018-07-19 | Optimum Semiconductor Technologies, Inc. | Implementation of register renaming, call-return prediction and prefetch |
GB2563384B (en) | 2017-06-07 | 2019-12-25 | Advanced Risc Mach Ltd | Programmable instruction buffering |
US11467838B2 (en) * | 2018-05-22 | 2022-10-11 | Advanced Micro Devices, Inc. | Fastpath microcode sequencer |
US11016763B2 (en) | 2019-03-08 | 2021-05-25 | Advanced Micro Devices, Inc. | Implementing a micro-operation cache with compaction |
US10929129B2 (en) * | 2019-06-29 | 2021-02-23 | Intel Corporation | Apparatus and method for modifying addresses, data, or program code associated with offloaded instructions |
US11016766B2 (en) | 2019-06-29 | 2021-05-25 | Intel Corporation | Apparatus and method for compiler hints for inter-core offload |
US11321144B2 (en) | 2019-06-29 | 2022-05-03 | Intel Corporation | Method and apparatus for efficiently managing offload work between processing units |
US10983796B2 (en) | 2019-06-29 | 2021-04-20 | Intel Corporation | Core-to-core end “offload” instruction(s) |
US11182208B2 (en) | 2019-06-29 | 2021-11-23 | Intel Corporation | Core-to-core start “offload” instruction(s) |
US11030000B2 (en) | 2019-06-29 | 2021-06-08 | Intel Corporation | Core advertisement of availability |
US11372711B2 (en) | 2019-06-29 | 2022-06-28 | Intel Corporation | Apparatus and method for fault handling of an offload transaction |
US11775467B2 (en) * | 2021-01-14 | 2023-10-03 | Nxp Usa, Inc. | System and method for ordering transactions in system-on-chips |
CN113961247B (zh) * | 2021-09-24 | 2022-10-11 | 北京睿芯众核科技有限公司 | 一种基于risc-v处理器的向量存/取指令执行方法、系统及装置 |
CN114090077B (zh) * | 2021-11-24 | 2023-01-31 | 海光信息技术股份有限公司 | 调取指令的方法及装置、处理装置及存储介质 |
US11995443B2 (en) * | 2022-10-04 | 2024-05-28 | Microsoft Technology Licensing, Llc | Reuse of branch information queue entries for multiple instances of predicted control instructions in captured loops in a processor |
CN115525344B (zh) * | 2022-10-31 | 2023-06-27 | 海光信息技术股份有限公司 | 一种译码方法、处理器、芯片及电子设备 |
CN115629807B (zh) * | 2022-10-31 | 2023-04-14 | 海光信息技术股份有限公司 | 多线程处理器的译码方法、处理器、芯片及电子设备 |
CN117008977B (zh) * | 2023-08-08 | 2024-03-19 | 上海合芯数字科技有限公司 | 一种可变执行周期的指令执行方法、系统和计算机设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6094716A (en) * | 1998-07-14 | 2000-07-25 | Advanced Micro Devices, Inc. | Register renaming in which moves are accomplished by swapping rename tags |
US6338136B1 (en) * | 1999-05-18 | 2002-01-08 | Ip-First, Llc | Pairing of load-ALU-store with conditional branch |
US20050081017A1 (en) * | 2003-10-14 | 2005-04-14 | Jeffrey Rupley | Method and apparatus for predication using micro-operations |
US20090260013A1 (en) * | 2008-04-14 | 2009-10-15 | International Business Machines Corporation | Computer Processors With Plural, Pipelined Hardware Threads Of Execution |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS5896349A (ja) * | 1981-12-02 | 1983-06-08 | Hitachi Ltd | マイクロ命令制御のデータ処理装置 |
JP3720371B2 (ja) * | 1995-10-06 | 2005-11-24 | アドバンスト・マイクロ・デバイシズ・インコーポレイテッド | スーパースケーラープロセッサにおけるout−of−order実行のための統一化された機能オペレーションスケジューラ |
US5964869A (en) * | 1997-06-19 | 1999-10-12 | Sun Microsystems, Inc. | Instruction fetch mechanism with simultaneous prediction of control-flow instructions |
US6691305B1 (en) * | 1999-11-10 | 2004-02-10 | Nec Corporation | Object code compression using different schemes for different instruction types |
US6766441B2 (en) * | 2001-01-19 | 2004-07-20 | International Business Machines Corporation | Prefetching instructions in mis-predicted path for low confidence branches |
US6968446B1 (en) * | 2001-08-09 | 2005-11-22 | Advanced Micro Devices, Inc. | Flags handling for system call instructions |
US6898697B1 (en) * | 2002-03-29 | 2005-05-24 | Advanced Micro Devices, Inc. | Efficient method for mode change detection and synchronization |
US7802078B2 (en) * | 2008-09-09 | 2010-09-21 | Via Technologies, Inc. | REP MOVE string instruction execution by selecting loop microinstruction sequence or unrolled sequence based on flag state indicative of low count repeat |
US8521996B2 (en) * | 2009-02-12 | 2013-08-27 | Via Technologies, Inc. | Pipelined microprocessor with fast non-selective correct conditional branch instruction resolution |
US8423751B2 (en) * | 2009-03-04 | 2013-04-16 | Via Technologies, Inc. | Microprocessor with fast execution of call and return instructions |
CN101866279B (zh) * | 2009-08-14 | 2012-05-30 | 威盛电子股份有限公司 | 微处理器及其相关方法 |
EP2508979B1 (en) * | 2011-04-07 | 2018-10-10 | VIA Technologies, Inc. | Efficient conditional alu instruction in read-port limited register file microprocessor |
CN102707988B (zh) * | 2011-04-07 | 2015-09-09 | 威盛电子股份有限公司 | 微处理器及其操作方法 |
US8880851B2 (en) * | 2011-04-07 | 2014-11-04 | Via Technologies, Inc. | Microprocessor that performs X86 ISA and arm ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline |
US8959320B2 (en) * | 2011-12-07 | 2015-02-17 | Apple Inc. | Preventing update training of first predictor with mismatching second predictor for branch instructions with alternating pattern hysteresis |
US9898418B2 (en) * | 2015-05-21 | 2018-02-20 | Via Alliance Semiconductor Co., Ltd. | Processor including single invalidate page instruction |
-
2016
- 2016-09-30 CN CN201610875658.6A patent/CN106406814B/zh active Active
- 2016-10-24 US US15/332,403 patent/US10073698B2/en active Active
- 2016-11-09 EP EP16197864.8A patent/EP3301566B1/en active Active
- 2016-11-17 JP JP2016223778A patent/JP6856358B2/ja active Active
- 2016-11-21 KR KR1020160154923A patent/KR102601858B1/ko active IP Right Grant
- 2016-11-30 TW TW105139477A patent/TWI621065B/zh active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6094716A (en) * | 1998-07-14 | 2000-07-25 | Advanced Micro Devices, Inc. | Register renaming in which moves are accomplished by swapping rename tags |
US6338136B1 (en) * | 1999-05-18 | 2002-01-08 | Ip-First, Llc | Pairing of load-ALU-store with conditional branch |
US20050081017A1 (en) * | 2003-10-14 | 2005-04-14 | Jeffrey Rupley | Method and apparatus for predication using micro-operations |
US20090260013A1 (en) * | 2008-04-14 | 2009-10-15 | International Business Machines Corporation | Computer Processors With Plural, Pipelined Hardware Threads Of Execution |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113553102A (zh) * | 2021-08-11 | 2021-10-26 | 成都海光微电子技术有限公司 | 微码取指方法、微码存储组合产生方法、装置、设备 |
CN113553102B (zh) * | 2021-08-11 | 2022-07-05 | 成都海光微电子技术有限公司 | 微码取指方法、微码存储组合产生方法、装置、设备 |
Also Published As
Publication number | Publication date |
---|---|
EP3301566A1 (en) | 2018-04-04 |
TW201814501A (zh) | 2018-04-16 |
EP3301566B1 (en) | 2023-05-10 |
CN106406814B (zh) | 2019-06-14 |
KR20180036490A (ko) | 2018-04-09 |
JP2018060491A (ja) | 2018-04-12 |
US10073698B2 (en) | 2018-09-11 |
JP6856358B2 (ja) | 2021-04-07 |
KR102601858B1 (ko) | 2023-11-13 |
US20180095753A1 (en) | 2018-04-05 |
CN106406814A (zh) | 2017-02-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI621065B (zh) | 處理器和將架構指令轉譯成微指令的方法 | |
US7437537B2 (en) | Methods and apparatus for predicting unaligned memory access | |
US7478225B1 (en) | Apparatus and method to support pipelining of differing-latency instructions in a multithreaded processor | |
US8069336B2 (en) | Transitioning from instruction cache to trace cache on label boundaries | |
US6907520B2 (en) | Threshold-based load address prediction and new thread identification in a multithreaded microprocessor | |
JP3907809B2 (ja) | 複合分岐予測およびキャッシュ先取りをするマイクロプロセッサ | |
US6151662A (en) | Data transaction typing for improved caching and prefetching characteristics | |
US10310859B2 (en) | System and method of speculative parallel execution of cache line unaligned load instructions | |
US20120290821A1 (en) | Low-latency branch target cache | |
JPH0334024A (ja) | 分岐予測の方法とそのための装置 | |
EP3321811B1 (en) | Processor with instruction cache that performs zero clock retires | |
US10503506B2 (en) | Apparatus and method for accessing data in a cache in response to an unaligned load instruction | |
JP2011100454A (ja) | 分岐誤予測バッファを用いるためのシステム及び方法 | |
US6457117B1 (en) | Processor configured to predecode relative control transfer instructions and replace displacements therein with a target address | |
US7373489B1 (en) | Apparatus and method for floating-point exception prediction and recovery | |
US7437538B1 (en) | Apparatus and method for reducing execution latency of floating point operations having special case operands | |
US7343474B1 (en) | Minimal address state in a fine grain multithreaded processor | |
US7216216B1 (en) | Register window management using first pipeline to change current window and second pipeline to read operand from old window and write operand to new window | |
TW202221702A (zh) | 推測分支模式更新方法和微處理器 | |
TW202219744A (zh) | 微處理器和分支預測控制方法 | |
US6175909B1 (en) | Forwarding instruction byte blocks to parallel scanning units using instruction cache associated table storing scan block boundary information for faster alignment | |
JP2001356905A (ja) | スタックに基づいたパイプライン型プロセッサにおけるレジスタ依存性を取扱うシステム及び方法 | |
EP3321810B1 (en) | Processor with instruction cache that performs zero clock retires | |
US6219784B1 (en) | Processor with N adders for parallel target addresses calculation | |
US5895497A (en) | Microprocessor with pipelining, memory size evaluation, micro-op code and tags |