TWI809580B - 用於派發載入/儲存指令的微處理器和方法 - Google Patents
用於派發載入/儲存指令的微處理器和方法 Download PDFInfo
- Publication number
- TWI809580B TWI809580B TW110144944A TW110144944A TWI809580B TW I809580 B TWI809580 B TW I809580B TW 110144944 A TW110144944 A TW 110144944A TW 110144944 A TW110144944 A TW 110144944A TW I809580 B TWI809580 B TW I809580B
- Authority
- TW
- Taiwan
- Prior art keywords
- load
- instruction
- store
- scoreboard
- register
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 24
- 238000001514 detection method Methods 0.000 claims 2
- 238000012544 monitoring process Methods 0.000 claims 2
- 238000003491 array Methods 0.000 claims 1
- 239000000872 buffer Substances 0.000 description 16
- 230000008859 change Effects 0.000 description 16
- 238000010586 diagram Methods 0.000 description 14
- 230000001186 cumulative effect Effects 0.000 description 13
- 230000008569 process Effects 0.000 description 10
- 238000012545 processing Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 7
- 238000013507 mapping Methods 0.000 description 5
- 230000008901 benefit Effects 0.000 description 3
- 230000001360 synchronised effect Effects 0.000 description 3
- 238000013519 translation Methods 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 230000003247 decreasing effect Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000009825 accumulation Methods 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
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/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/3838—Dependency mechanisms, e.g. register scoreboarding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
-
- 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/30098—Register arrangements
-
- 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
-
- 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/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3834—Maintaining memory consistency
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Abstract
本發明介紹一種用於派發載入/儲存指令的微處理器和方法。微處理器包含解碼/發射單元、載入/儲存佇列、記分板以及載入/儲存單元。記分板包含多個記分板條目,其中每一記分板條目包含一個未定位元值和一個計數值,並且在發出指令時設置未定位元值或計數值。解碼/發射單元檢查來自記分板的WAR、WAW以及RAW數據相依性,用所記錄的記分板值將載入/儲存指令分派到載入/儲存佇列。載入/儲存佇列用以解決數據相依性,且將載入/儲存指令分派到載入/儲存單元以供執行。
Description
本發明是有關於一種微處理器,且特別是有關於一種能夠投機地發出載入/儲存指令的方法和微處理器。
超純量(Superscalar)微處理器通過每時脈週期執行多個指令且通過指令的亂序執行而實現高性能。指令必須有序回寫到暫存器組,以避免諸如分支誤預測、中斷以及精確例外事件等控制危障(control hazard)。例如重新排序緩衝器、暫存器重命名等臨時儲存裝置可用於暫存結果數據,直到可將之依序退役到暫存器組為止。此外,亦需要儲存裝置將來源運算元數據保持在執行佇列中,直到指令可由功能單元執行為止。這些儲存裝置通常為架構暫存器組的大小的數倍大,且這些儲存裝置的讀取/寫入消耗很多的電力。
以性能來看,管線(pipeline)架構的微處理器中以載入和儲存指令對性能影響最大,也最難優化。具有確定延遲和吞吐時間的指令可以安排在特定未來時間執行。然而,載入/儲存指令可能因為TLB未命中、快取未命中或衝突等原因而無法事先知道知道其延遲時間。對於載入指令,載入數據可在下一週期或許多週期後返回,且提早寫回載入數據會違反數據相依性,例如寫後寫(write-after-write;WAW)數據相依性和讀後寫(write-after-read;WAR)數據相依性。對於儲存指令,儲存數據會在下一週期或許多週期後從暫存器組讀取,且提早讀取儲存數據會違反數據相依性,例如寫後讀(read-after-write;RAW)數據相依性。當載入/儲存指令具有數據相依性時,載入/儲存指令會暫停在解碼/發射單元中,直到數據相依性被解開為止。在解碼/發射單元中暫停載入/儲存指令可能會降低微處理器的性能。
本發明描述一個以紀錄暫存器組的個別暫存器使用狀況的記分板來投機地發出載入/儲存指令的微處理器和方法。
本發明的微處理器包含一個記錄指令延遲和讀取時間的記分板用以追蹤所有具有確定延遲和讀取時間的指令。微處理器將指令連同從暫存器組的多個讀取埠讀取數據的預設讀取時間,以及將數據寫入到暫存器組的多個寫入埠派的預設寫入時間一起派發到執行佇列。有未定(unknown)延遲時間的載入指令可以被派發、執行並且運用專用寫入埠回寫到暫存器組。可能有未定讀取時間的儲存指令,可以被派發,且運用專用讀取埠從暫存器組讀取數據。如果存在WAW數據相依性、WAR數據相依性或RAW數據相依性,那麼記分板檢查數據相依性且在解碼/發射單元中暫停載入及儲存指令。在解碼/派發階段中被暫停的載入/儲存指令會阻止指令流前進。在本發明的實施例中,載入/儲存指令分派到載入/儲存執行佇列,並在其中監視讀取和寫入埠以便清除數據相依性狀態。而記分板的內容會被複製到載入/儲存執行佇列,從而允許指令流中的後續指令向前移動。後續指令只要不具有對載入/儲存指令的數據相依性即可被派發且執行,因此改進微處理器性能。載入/儲存指令在載入/儲存執行佇列中等待數據相依性解開,且一旦數據相依性解開,則將之分派到載入/儲存執行單元。在另一實施例中,載入/儲存指令包含向量載入/儲存指令,其中每一向量指令可具有多個微操作,且每一微操作可獨立地解開其自身數據相依性,以便分派到載入/儲存單元以供執行。其記分板內的未定欄位(unknown field)有多個位元。多位元的未定欄位得以將多個載入/儲存指令分派到執行佇列。
本發明的方法適用於包含一個記分板和一個載入/儲存佇列的微處理器,其中記分板包含多個記分板條目,且所述多個記分板條目中的每一項包括多個未定位元值(unknown bits value)和一個計數值(count value)。所述方法包含以下步驟:將載入/儲存指令連同依據載入/儲存指令的目的地暫存器或來源暫存器所查到的記分板的未定位元值和計數值派發到載入/儲存佇列。如果載入/儲存指令為一載入指令,那麼載入/儲存指令的派發是基於載入/儲存指令的目的地暫存器;且如果載入/儲存指令為一儲存指令,那麼載入/儲存指令的派發是基於載入/儲存指令的來源暫存器。
以下公開內容提供用於實施本發明的不同特徵的多個不同實施例或實例。更使用特定的元件實例和安排實例來簡化本發明。當然,這些僅是實例而非意圖限制本發明範圍。舉例來說,在以下描述中,兩個特徵的疊加可以包括兩個特徵直接接觸形成的實施例,也可包括兩個特徵之間可不直接接觸而透過附加特徵以疊加的實施例。另外,本發明會在各種實例中重複使用附圖標記和/或字母。此重複是出於簡單和清晰的目的,而非暗示所論述的各種實施例和/或配置之間的關係。
本發明介紹一種將指令安排(調度;schedule)在未來某時間執行而非暫停管線的微處理器。此處理器還可被稱作未來調度執行(future scheduling execution;FSE)微處理器。傳統上,如果指令使用的暫存器或功能單元尚未就緒(例如資源衝突,例如數據相依性、暫存器的讀取和寫入埠的可用狀態、功能單元的可用狀態等),那麼解碼/發射單元會暫停執行管線或將指令放置一旁,直到暫存器或功能單元的可用狀態確定為止。在FSE微處理器中,解碼/發射單元則仍然可以根據某未來時間會解除數據相依性、暫存器和功能單元的讀取和寫入埠的可用狀態,而將這些指令安排至該未來時間執行。
載入/儲存指令可因為暫存器的未定延遲(unknown latency)和讀取時間在解碼/發射單元中暫停。在本發明中,耦合於解碼/發射單元與載入/儲存單元之間的數據執行佇列配置成可以處理有未定存取(寫入或讀取)時間的載入/儲存指令。與其暫停管線,載入/儲存指令及其記分板的值可以一起派發至數據執行佇列以安排在未來執行。
參考圖1,這是根據一些實施例所繪製的,包含一個微處理器10和一個記憶體30的數據處理系統1的示意圖。其中微處理器10通過執行儲存於記憶體30中的指令來執行多種數據處理功能。記憶體30可包含2級(level 2,L2)快取和3級(level 3,L3)快取以及數據處理系統1的主記憶體,其中L2快取和L3快取具有比主記憶體快的存取時間。記憶體可包含隨機存取記憶體(random access memory,RAM)、動態隨機存取記憶體(dynamic random access memory,DRAM)、靜態隨機存取記憶體(static random access memory,SRAM)、唯讀記憶體(read only memory,ROM)、可程式化唯讀記憶體(programmable read only memory,PROM)、可擦拭可規劃式唯讀記憶體(Erasable programmable read only memory,EPROM)、電子抹除式可複寫唯讀記憶體(electrically erasable programmable read only memory,EEPROM)以及快閃記憶體中的至少一個。
微處理器10可以是一個在單個微處理器內實現指令層級平行的超純量微處理器。超純量微處理器通過每時脈週期執行多個指令而實現高性能。將多個指令分派到不同功能單元以供並行執行。超純量微處理器可採用亂序(out-of-order,OOO)執行,而可在第一指令之前執行對第一指令沒有任何相依性的第二指令。在傳統的亂序微處理器設計中,指令可亂序執行,但由於例如分支誤預測、中斷以及精確例外事件的控制危障,所述指令必須有序退休到微處理器的暫存器組。像重新排序緩衝器和暫存器重命名之類的臨時儲存裝置可用於暫存結果數據,直到指令從執行管線有序退休為止。在本發明中,只要指令沒有數據相依性和控制危障,微處理器10就可通過將結果數據不依序回寫到暫存器組而亂序執行和退休該指令。在實施例中,此FSE微處理器10不需要任何一個臨時暫存器,這是因為微處理器10配置成仍可通過調度與安排指令的未來執行時間而派發出有數據相依性或控制危障的指令。然而,此限制並非本發明的意圖。在一些其它實施例中,臨時暫存器還是可以使用。
參考圖1,微處理器10可包含指令快取11、分支預測單元(branch prediction unit,BPU)12、解碼/發射單元13、暫存器組14、記分板15、讀取/寫入控制單元16、載入/儲存單元17、數據快取18、多個執行佇列(execution queue;EQ)19A~19E,多個功能單元(functional unit,FUNT)20A~20C。微處理器10亦包含讀取匯流排31和結果匯流排32。讀取匯流排31耦合到載入/儲存單元17、功能單元20A-20C以及暫存器組14以用於將運算元數據從暫存器組14中的暫存器傳輸到載入/儲存單元17和功能單元20A~20C,這動作還可被稱作從暫存器組14讀取運算元數據(或在儲存指令的情況下為儲存數據)。結果匯流排32耦合到數據快取18、功能單元20A~20C以及暫存器組14以用於將數據從數據快取18或功能單元20A~20C傳輸到暫存器組14的暫存器,這動作還可被稱作將結果數據(或在載入指令的情況下為載入數據)回寫到暫存器組14。附圖內的元件的標記號碼如果為數字接一個字母,本文中以後將只引用數字標記來統稱這些元件。舉例而言,執行佇列19A-19E可統稱為執行佇列19。本發明的一些實施例可使用比圖1中所示出的元件更多、更少或不同的組件。
在一些實施例中,指令快取11耦合(未繪示)到記憶體30和解碼/發射單元13,且配置成儲存從記憶體30提取的指令並將所述指令分派到解碼/發射單元13。指令快取11儲存來自記憶體30的連續指令位元組中的許多快取列。快取列可組織為直接映射、完全關聯映射或組關聯映射等。直接映射、完全關聯映射以及組關聯映射在相關技術中是眾所周知的,因此省略關於以上映射的詳細描述。
指令快取11可包含標記陣列(未繪示)和數據陣列(未繪示)以用於分別儲存一部分由微處理器10頻繁使用的指令的位址和數據。標記陣列中的每一標記對應於數據陣列中的快取列。當微處理器10需要執行指令時,微處理器10首先通過將指令的位址與儲存於標記陣列中的標記進行比較來檢查指令是否在指令快取11中。如果指令位址與標記陣列中的一個標記匹配(即,命中快取),那麼從數據陣列提取對應快取列。如果指令位址未能與標記陣列中的任何條目匹配(即,未命中快取),那麼微處理器10可存取記憶體30以找到指令。在一些實施例中,微處理器10更包含一個耦合到指令快取11和解碼/發射單元13的指令佇列(未繪示),用於在將指令發送到解碼/發射單元13之前儲存來自指令快取11或記憶體30的指令。
BPU 12耦合到指令快取11且配置成投機地提取在分支指令之後的指令。BPU 12可基於分支指令的過往行為提供對分支指令的分支方向的預測(跳轉或不跳轉),且預測跳轉分支指令的分支目標位址。分支方向可為“跳轉”,則從該跳轉分支指令的分支目標位址提取後續指令。分支方向可為“不跳轉”,則從分支指令後面的連續記憶體位置提取後續指令。在一些實施例中,BPU 12使用基本塊分支預測,從基本塊的起始位址預測基本塊的結束位址。基本塊的起始位址(即基本塊的第一指令的位址)可為先前跳轉的分支指令的目標位址。基本塊的結束位址是在基本塊的最後一個指令之後的指令位址,該指令位址可為另一基本塊的起始位址。基本塊可包含多個指令,而結束於其中跳轉到另一基本塊的分支指令。
功能單元可包含分支執行單元(branch execution unit,BEU)(例如,耦合到分支預測單元12的功能單元20C,如圖1中所示),所述分支執行單元可執行分支指令且判斷所預測分支方向是否不正確(誤預測)。舉例而言,BEU可將所預測分支方向(跳轉或不跳轉)與實際執行的分支進行比較以判斷所預測分支方向是否正確。誤預測分支之後的指令不論在微處理器中的各單元內皆會被捨棄。分支誤預測還可來自解碼/發射單元13針對未由BPU 12預測的無條件分支指令(永遠跳轉的分支)解碼產生。解碼單元13和BEU 12可將更新資訊提供給BPU 12。在微處理器10中,在分支指令之後的指令必須等到分支指令執行之後才能回寫到暫存器組14。
解碼/發射單元13可對從指令快取11接收到的指令進行解碼。指令可包含以下欄位:操作代碼(或作業碼)、運算元(例如,來源運算元和目的地運算元)以及立即數據。操作碼可指定進行何種操作(例如,ADD、SUBTRACT、SHIFT、STORE、LOAD等)。運算元可指定暫存器組14中的暫存器的索引或位址,其中來源運算元指定將要從暫存器組讀取的暫存器,且目的地運算元指定暫存器組中將寫回結果數據的暫存器。這邊要指出,來源運算元和目的地運算元有時亦可稱作來源暫存器和目的地暫存器,在下文中會交換使用。在實施例中,一個運算元會需要5位元索引才能在一個具有32個暫存器的暫存器組中識別其中一個暫存器。一些指令可能使用指令中所指定的立即數據而不是暫存器數據。每一指令將在功能單元20或載入/儲存單元17中執行。基於由操作碼指定的操作類型和資源的可用狀態(例如,暫存器、功能單元等),每一指令皆有一個執行延遲時間和一個吞吐時間。執行延遲時間(或延遲時間)是指指令完成執行指定的操作並回寫結果數據的時間(即,時脈週期數)。吞吐時間是指下一道指令可進入功能單元20的時間(即,時脈週期數)。
在實施例中,在解碼/發射單元13中對指令進行解碼並根據操作碼獲得執行延遲時間、吞吐時間以及指令類型。多個指令可派發到一個執行佇列19,並在其中累計一個含括多個指令的吞吐時間的累積吞吐時間。累積吞吐時間是根據執行佇列19先前派發的指令所統計出來,下一指令可進入功能單元20執行的時間。指令可送至功能單元20的時間被稱作讀取時間(讀取暫存器組的時間),且指令由功能單元20完成的時間被稱作寫入時間(寫到暫存器組的時間)。指令派發到執行佇列19時,每一指令皆有安排好分派到功能單元20或載入/儲存單元17執行的讀取時間。累積吞吐時間為當前派發指令的讀取時間。當指令派發到執行佇列19的下一可用條目時,指令的指令延遲時間與累積吞吐時間相加以求得寫入時間。修改後的執行延遲時間在本文中將被稱作最近派發的指令的寫入時間,且修改後的開始時間在本文中將被稱作所派發指令的讀取時間。寫入時間和讀取時間還可被稱作存取時間,描述所派發指令從暫存器組14寫入或讀取一個暫存器的特定時間點。由於僅在時間上安排從暫存器組14即時讀取來源暫存器以供功能單元20執行的時間,所以執行佇列中不需要儲存來源暫存器的臨時暫存器,這與其它微處理器的一些實施例相比是個優點。如果與其它功能單元20或數據快取24存在衝突,由於可在時間上安排未來從功能單元20或數據快取24回寫到暫存器組14的目的地暫存器的確切時間以錯開衝突,所以不需要臨時暫存器來儲存結果數據,這與其它微處理器的一些實施例相比亦是個優點。對於多於一個指令的並行派發,可基於在第二指令之前派發的第一指令而進一步調整第二指令的寫入時間和讀取時間。在一些實施例中,解碼/發射單元13可將一個載入/儲存指令解碼為標記微操作和數據微操作組成的兩個微操作。
在實施例中,解碼/發射單元13配置成在派發指令之前檢查和解決所有可能衝突。指令可具有以下4種基本類型的衝突:(1)數據相依性,其包含讀後寫(WAR)、寫後讀(RAW)以及寫後寫(WAW);(2)用以從暫存器組讀取數據到功能單元的讀取埠的可用狀態;(3)用以從功能單元回寫數據到暫存器組的寫入埠的可用狀態;以及(4)用以執行數據的功能單元160的可用狀態。在指令可派發到執行佇列19之前,解碼/發射單元13可存取記分板15以檢查數據相依性。此外,暫存器組14具有有限數目個讀取和寫入埠,且所派發指令必須仲裁或保留讀取和寫入埠以在未來時間存取暫存器組14。解碼/發射單元13可存取讀取/寫入控制單元16以檢查暫存器組14的讀取埠和寫入埠的可用狀態,以便安排指令的存取時間(即,讀取和寫入時間)。在其它實施例中,寫入埠之一可專用於有未定執行延遲時間的指令以在不使用寫入埠控制的情況下寫回暫存器組14,且讀取埠之一可保留給具有未定讀取時間的指令,以從暫存器組14讀取數據而不使用讀取埠控制。暫存器組14的讀取埠的數目可動態保留(不專用)用於未定讀取操作。在這種情況下,功能單元20或載入/儲存單元17在試圖從暫存器組14讀取數據時必須確保讀取埠不忙碌。在實施例中,功能單元20的可用狀態可通過與執行佇列19協調其累積的排隊指令(即,先前發出到執行佇列的指令)的吞吐時間而解決。基於執行佇列中的累積吞吐時間,指令可分派到執行佇列19,在其中安排指令在功能單元20未來有空的特定時間發出到功能單元20。
圖2為根據本發明的一些實施例的暫存器14和記分板15所繪製的框圖。暫存器組14可包含多個暫存器R(0)-R(N)、讀取埠以及寫入埠(未繪示),其中N是大於1的整數。在實施例中,暫存器組14可包含純量暫存器組和向量暫存器組。本發明並沒有限制暫存器組14中的暫存器、讀取埠以及寫入埠的數目。記分板15包含多個條目150(0)到150(N),且每一記分板條目對應於暫存器組14中的一個暫存器且記錄與對應暫存器相關的資訊。在實施例中,記分板15具有與暫存器組14數目相同的條目(即,N個條目),但本發明並沒有限制記分板15中的條目數。
圖3A-3B是根據本發明一些實施例的記分板條目的各種結構的圖示。在實施例中,記分板15可包含一個用於處理到暫存器組14的回寫操作的第一記分板151和一個用於處理來自暫存器組14的讀取操作的第二記分板152。第一記分板151及第二記分板152可共存或不共存於微處理器10中。本發明並不做此限制。在其它實施例中,可將第一記分板151和第二記分板152實施為或查看為同時處置讀取和寫入操作的單一記分板15。圖3A示出用於所派發指令之目的地暫存器的第一記分板151。圖3B示出用於所派發指令之來源暫存器的第二記分板15。參考圖3A,第一記分板151的每一條目1510(0)到1510(N)包含未定欄位(“Unknown”)1511、計數欄位(“CNT”)1513以及功能單元欄位(“FUNIT”)1515。這些欄位紀錄所派發指令即將寫入的目的地暫存器有關的資訊。這些記分板條目的欄位在派發指令時設置。
未定欄位1511包含一個位元值用以指示對應於記分板條目的暫存器的寫入時間是確定(known)還是未定(unknown)。舉例來說,未定的載入欄位1511可包含一個位元,其中非零值指示暫存器有未定的寫入時間,而零值指示暫存器有確定寫入時間,如寫入計數欄位1513所示。在一些實施例中,未定欄位1511可包含任意數目的位元,用以指示有安排一或多個寫入時間未定的指令寫入暫存器。未定欄位1511可在指令的派發時間設置或修改且在未定暫存器寫入時間確定之後復位(清零)。復位操作可由解碼/發射單元13、載入/儲存單元17(例如,在數據命中之後)或功能單元20(例如,在INT DIV操作確定做除法運算所需的位數之後)以及微處理器中涉及執行寫入時間未定指令的任何其它單元來發起。在一些實施例中,未定欄位1511可包含兩個位元,有四個狀態可以額外記錄三個寫入暫存器時間未定的派發指令。在又一些其它實施例中,未定欄位1511可包含三個位元、四個位元等,以記錄多個有未定寫入時間的派發指令。
寫入計數欄位1513記錄下一(等待派發的)指令寫入暫存器之前所需的時脈週期數,此欄位還可被稱作記錄寫入計數值的寫入計數欄位。換句話說,寫入計數欄位1513記錄先前派發的指令完成操作且將結果數據回寫到暫存器所需的時脈週期數。寫入計數欄位1513的寫入計數值是根據派發指令時的寫入時間來設置。接著,計數值每一時脈週期皆向下計數(即,遞減一),直到計數值變為零為止(即,這是一個自復位計數器)。舉例來說,ADD指令的寫入時間為2個時脈週期,則寫入計數欄位1513的計數值在為目的地暫存器派發ADD指令時設置為2且在計數器欄位達到0時自復位(self-reset)。計數值3表示結果數據將在3個時脈週期後回寫到對應於記分板條目的暫存器,計數值1表示結果數據將在此時脈週期中回寫到暫存器,且計數值0表示存取該暫存器沒有數據相依性問題。
記分板條目的功能單元欄位1515紀錄將回寫到暫存器的功能單元20(由所發出指令指定)。舉例來說,功能單元欄位1515記錄為ALU表示結果數據將從ALU功能單元回寫到暫存器。在一些實施例中,功能單元欄位1515中所記錄的功能單元可在寫入計數欄位1513達到值1時將來自該功能單元的結果數據轉發到下一指令的來源運算元。
圖3B是根據本發明的一些實施例的記分板條目的結構的圖示。具有記分板條目1520(0)-1520(N)結構的第二記分板152被設計用以解決派發指令寫入到一暫存器而相對應的記分板條目紀錄有更前面的指令要讀取此暫存器的衝突,即WAR數據相依性的衝突。第二記分板還可被稱作處理WAR數據相依性的WAR記分板。記分板條目1520(0)-1520(N)中的每一個條目包含未定欄位1521和讀取計數欄位(還可被稱作計數欄位)1523。功能單元欄位在WAR記分板的實施方案中可以省略。未定欄位1521包含一個位元值,用以表示對應於記分板條目的暫存器的讀取時間是確定還是未定。未定欄位1521的操作和功能類似於未定欄位1511,因此,出於簡潔的目的省略其細節。讀取計數欄位1523記錄一個讀取計數值,用以表示先前的派發指令要讀取對應暫存器的時脈週期數。讀取計數欄位1523還可被稱作儲存讀取計數值的讀取計數欄位。類似於寫入計數欄位1513的寫入計數值,讀取計數值每一時脈週期皆向下計數,直到讀取計數值達到0為止。除非另外有描述,否則(讀取)計數欄位1523的操作和功能類似於(寫入)計數欄位1513,且因此省略其細節。
讀取/寫入控制單元16配置成記錄暫存器組14的讀取埠和/或寫入埠在未來的數個時脈週期內的可用狀態以用於安排待派發指令的存取。在派發指令時,基於指令所指定的存取時間,解碼/發射單元13存取讀取/寫入控制單元16以檢查暫存器組14的讀取埠和/或寫入埠的可用狀態。詳細地說,讀取/寫入控制單元16根據讀取埠的可用狀態選擇未來某一時間當作預定讀取時間以將來源運算元讀取到功能單元20,且根據寫入埠可用狀態選擇未來某一時間當作預定寫入時間以回寫來自功能單元20的結果數據。在實施例中,讀取/寫入控制單元16可包含一個讀取移位器161和一個寫入移位器163以如上文所述用於安排讀取埠和寫入埠的使用。
圖4是根據本發明的一些實施例中,與暫存器組的讀取埠配合的讀取移位器161的圖示。圖5為根據本發明的一些實施例中,與暫存器組的寫入埠配合的寫入移位器163的圖示。暫存器組14的每一個讀取埠皆有一個配合的讀取移位器161,且暫存器組14的每一個寫入埠皆有一個配合的寫入移位器163。在實施例中,多個讀取移位器161和多個寫入移位器163可包含於讀取/寫入控制單元16中。然而,本發明不限於此。在一些其它實施例中,讀取埠和寫入埠不是讀取/寫入控制單元16的一部分。專用讀取和寫入埠用於使未定讀取和寫入時間的指令能夠動態讀取和寫入暫存器組14。
參考圖4,讀取移位器161包含多個條目1610(1)~1610(M),其中每一條目可包含讀取有效欄位1611及位址欄位1613,且M為大於1的整數。條目1610(1)-1610(M)中的每一項各自代表未來的一個時脈週期,且記錄對應讀取埠在所述時脈週期中的可用狀態。舉例來說,條目1610(1)指示讀取埠在緊接著的下一個時脈週期的可用狀態,而條目1610(M)指示讀取埠在未來的第M個時脈週期中的可用狀態。參考圖4,條目1610(1)=1610(M)中,每一時脈周期最底下的條目將被移出,且對時間M分配一個新的條目。舉例來說,最底條目1610(1)將立即在下一時脈週期中移出。在實施例中,讀取有效欄位1611記錄一個讀取有效值(“rd”),用來標記對應的時脈週期中讀取埠的可用狀態。舉例來說,第X條目中的讀取有效欄位1611(X)若非零值,表示讀取埠在未來的第X個時脈週期處於忙碌狀態,其中X大於1且小於M。第X條目中的讀取有效欄位1611(X)若為零值表示對應讀取埠在未來的第X個時脈週期處於空閒狀態可以自由存取。位址欄位1613記錄從暫存器組14讀取數據的暫存器位址(“rd_addr”)。舉例來說,條目1610(1)表示相應的讀取埠在緊接的下一時脈週期會忙於從暫存器7(即,位址“r7”)讀取數據。在一些替代實施例中,讀取移位器161的每一條目中會存在更多或更少的欄位用於記錄其它資訊。
在派發指令之前,解碼/發射單元13檢查讀取/寫入控制單元16以判斷暫存器組14的讀取埠在指令的讀取時間的可用狀態。舉例來說,讀取時間為X個時脈週期。讀取/寫入控制單元16檢查讀取移位器161的第X條目以判斷在未來的第X個時脈週期處讀取埠是否空閒。如果可用讀取埠的數目在讀取時間大於或等於指令所需的讀取埠的數目,那麼解碼/發射單元13可派發並安排指令在第(X+1)個時脈週期執行。解碼/發射單元13將派發指令的每一來源暫存器所預約到的讀取埠發送到執行佇列19,使得執行佇列19知道將來源運算元數據提取到功能單元20的確切讀取埠。對派發指令的每一有效來源暫存器皆設定其讀取埠的讀取有效欄位1611和讀取位址1613。如果可用讀取埠的數目小於所需讀取埠的數目,那麼解碼/發射單元13可暫停指令且在下一時脈週期中重新檢查讀取移位器。在所安排的讀取時間,讀取移位器將讀取有效值rd和暫存器位址rd_addr提供給暫存器組14以讀取來源暫存器。
參考圖5,寫入移位器163(可被稱為延遲時間移位器)包含多個條目1630(1)-1630(P),其中每一條目包含回寫有效欄位(“wr”)1631、寫入位址欄位(“wr_addr”)1633以及功能單元欄位(“funit”)1635,其中P為大於1的整數。1630(1)-1630(M)中的每一個條目對應未來的一個時脈週期,且記錄對應寫入埠在所述時脈週期中的可用狀態。舉例來說,條目1630(1)表示寫入埠在緊接著的下一時脈週期的可用狀態,且條目1630(P)指示寫入埠在未來的第P個時脈週期中的狀態。參考圖5,條目1630(1)-1630(P)中每一個時脈周期都會移出最底部的條目。舉例來說,最底條目1630(1)將在緊接著的下一時脈週期中移出,且針對時間M配置一個新條目。在實施例中,回寫有效欄位1631記錄回寫有效值(“wr”),所述回寫有效值表示寫入埠在對應於所述條目的時脈週期的可用狀態。舉例來說,第Y條目中的回寫有效欄位1631(Y)中,非零值表示寫入埠在未來的第Y時脈週期將會是忙碌的,其中Y大於1且小於P。第Y條目中的讀取值欄位1631(Y)中,零值表示寫入埠在未來的第Y個時脈週期可以自由存取。寫入位址欄位1633紀錄暫存器組14中的暫存器的位址(“wr_addr”),以讓功能單元將結果數據回寫到所述暫存器。功能單元欄位1635紀錄將結果數據回寫到寫入埠的功能單元20或載入/儲存單元17(“funit”)。舉例來說,寫入移位器163的第一條目1630(1)表示寫入埠在緊接著的下一時脈週期中將為忙碌的,其中功能欄位1635記錄ALU 0將把結果數據回寫到寫入位址欄位1633所記錄的暫存器22(“r22”)內。
在派發指令之前,解碼/發射單元13檢查讀取/寫入控制單元以判斷暫存器組14的寫入埠在指令的寫入時間的可用狀態。舉例來說,寫入時間為Y個時脈週期。讀取/寫入控制單元16檢查寫入移位元器161的第Y條目以判斷在未來的第Y個時脈週期處寫入埠是否空閒。如果在寫入時間Y處可用寫入埠的數目大於或等於指令所需的寫入埠的數目,那麼解碼/發射單元13可派發並安排指令在第Y個時脈週期(即,所安排的寫入時間)執行完成。對所派發指令的每一有效目的地暫存器皆設定回寫有效欄位1631、功能單元1635以及目的地位址1633。如果可用寫入埠的數目小於所需寫入埠的數目,那麼解碼/發射單元13可暫停指令且在下一時脈週期中重新檢查寫入移位器。在所安排的寫入時間,讀取/寫入埠控制器根據記錄於功能單元欄位1635中的功能單元20取得來自該單元的結果數據,且將結果數據寫入到寫入位址欄位1633中所指定的暫存器。
參考圖1,執行佇列19配置成紀錄分派到功能單元20的已派發指令。功能單元20可包含但不限於:整數乘法、整數除法、算數邏輯單位(arithmetic logic unit,ALU)、浮點單元(floating-point unit,FPU)、分支執行單元(BEU)、一個接收經解碼指令且執行其操作的單元等。在實施例中,每一個執行佇列19皆耦合到或專用於一個功能單元20。在其它實施例中,一個執行佇列19可耦合到多個功能單元20。舉例來說,執行佇列19A耦合在解碼/發射單元13與對應功能單元20A之間以讓需要使用功能單元20A執行的指令排隊等候並分派之。類似地,執行佇列19B耦合在解碼/發射單元13與對應功能單元20B之間,且執行佇列19C耦合在解碼/發射單元13與對應功能單元20C之間。在實施例中,執行佇列19D、執行佇列19E耦合在解碼/發射單元13與載入/發射單元17之間以處理載入/儲存指令,細節稍後會詳細說明。執行佇列19D、執行佇列19E還可分別被稱作標記執行佇列(Tag-Execution Queue,TEQ)19D和數據執行佇列(Data-Execution Queue,DEQ)19E,這將在下文詳細地描述。
圖6是根據本發明的一些實施例的執行佇列19的圖示。執行佇列19可包含多個條目190(0)-190(Q),用於以將要發送到功能單元20的次序來記錄由解碼/發射單元13發出的指令的資訊,其中Q為大於0的整數。在一實例中,執行佇列19的每一條目包含有效欄位191、執行控制數據欄位193、數據欄位195以及讀取計數欄位197,在圖6中分別標記為“v”、“ex_ctrl”、“data”以及“rd_cnt”。在其它實施例中,執行佇列的每一條目可能記錄更多或更少的欄位,且數據欄位195除立即數據之外可具有其它數據。
有效欄位191表示條目是否有效(例如,“1”代表條目有效而“0”代表條目無效)。執行控制資訊欄位193和數據欄位195儲存功能單元20的執行控制資訊和指令的立即數據,其中立即數據由指令編碼求得。讀取計數欄位197記錄指令的讀取計數值rd_cnt,用以表示指令的讀取時間。儲存於讀取計數欄位197中的讀取時間每一時脈週期皆向下減一,直到讀取計數rd_cnt達到零為止。當讀取計數欄位197中的讀取時間為0時,執行佇列19將有效指令分派到功能單元20。
執行佇列19可包含或耦合到一個累積計數器199,用於儲存累積計數值acc_cnt,所述累積計數值每一時脈週期向下減一,直到計數值變成零為止。累積計數為零代表執行佇列19為空。累積計數器199的累積計數值acc_cnt代表未來可將下一指令分派到功能單元20或載入/儲存單元17的時間(即,時脈週期數)。解碼/發射單元13中的下一指令可以派發到執行佇列19時,根據累積計數器199的累積計數值安排此指令分派到功能單元20或載入/儲存單元17的時間。在一些實施例中,指令的讀取時間就是累積計數值,而下一指令的累積計數值可根據當前acc_cnt和指令吞吐時間的總和(acc_cnt = acc_cnt + inst_xput_time)來設置。在一些其它實施例中,讀取時間會需要調整(這時讀取時間大於當前累積計數),則下一指令的累積計數值需根據指令的讀取時間(rd_cnt)和指令的吞吐時間的總和(acc_cnt = rd_cnt + inst_xput_time)來設置。在一些實施例中,讀取移位器161和寫入移位器163設計成與執行佇列19同步。舉例來說,執行佇列19可將指令分派到功能單元20或載入/儲存單元17,同時根據讀取移位元器161從暫存器組14讀取來源暫存器,且來自功能單元20或載入/儲存單元17的結果數據也同時根據寫入移位元器163回寫到暫存器組14。
參考圖1,載入/儲存單元17耦合到解碼/發射單元13以處理載入和儲存指令。在實施例中,解碼/發射單元13將載入/儲存指令派發成兩個微操作,包含一個標記微操作和一個數據微操作。標記微操作被發送到TEQ 19D,而數據微操作被發送到DEQ 19E。在一些實施例中,載入/儲存指令的微操作的吞吐時間為1個時脈週期。TEQ 19D和DEQ 19E為獨立的操作,且TEQ 19D先發出用於標記操作的標記微操作,再由DEQ 19E發出用於數據操作的數據微操作。
數據快取18耦合到暫存器組14、記憶體30以及載入/儲存單元17,且配置成用以暫時儲存從記憶體30提取的數據。載入/儲存單元17存取數據快取18以用於載入數據或儲存數據。數據快取18儲存了包含來自記憶體30中連續數據位元組的許多快取列。數據快取18的快取列被組織為類似於指令快取11的直接映射、完全關聯映射或組關聯映射,但其映射方式不需要與指令快取11相同。
數據快取18可包含標記陣列(tag array,TA)22及數據陣列(data array,DA)24以用於分別儲存一部分由微處理器10頻繁使用的位址和數據。標記陣列22中的每一標記對應於一條數據陣列24中的快取列。當微處理器10需要執行載入/儲存指令時,微處理器10首先通過將載入/儲存位址與儲存於標記陣列22中的標記進行比較來檢查載入/儲存數據是否存在於數據快取18中。如果載入/儲存位址與標記陣列中的一個標記匹配(命中快取),那麼使用數據陣列24中對應的快取列做載入/儲存數據存取。載入指令從數據陣列24的快取列提取數據以寫入到暫存器組14的目的地暫存器,而儲存指令將來自暫存器組14的來源暫存器的數據寫入到數據陣列24中的快取列。如果載入/儲存位址沒有匹配到標記陣列22中的任何條目(未命中快取),那麼微處理器10可存取記憶體30以找到所需數據。在命中快取的情況下,載入/儲存指令的執行延遲時間為確定的(例如2個、3個、4個或任何數目個時脈週期)。在未命中快取的情況下,載入/儲存指令的執行延遲時間為6個時脈週期或更多。載入指令的執行延遲時間基本上是無法事先得知的,取決於是否命中快取以及記憶體30的延遲時間。
標記操作包含透過載入/儲存單元17中的位址產生單元(address generation unit,AGU)171計算位址,以及使用所計算的位址來存取標記陣列22和數據翻譯後備緩衝器(data translation look-aside buffer,數據TLB)(未繪示),後者用於虛擬位址與物理位址之間的轉譯。位址計算為一加法運算,使用來自暫存器組14的來源暫存器和來自圖6的數據欄位195的立即數據(“imm data”)相加。圖4的讀取移位器161從暫存器組14讀取來源暫存器的時機被安排與派發從TEQ 19D到AGU 171的標記操作的時機同步。在一些實施例中,虛擬位址和物理位址是相同的,所以不需要數據TLB。TEQ 19A將標記操作分派到載入/儲存單元17的位址產生單元(AGU)171以計算載入/儲存位址。載入/儲存位址用於存取數據快取18的標記陣列(TA)22。快取的命中與否和命中路線(組關聯映射)會被記住以便由DEQ 19B的數據操作運用此資訊以存取DA 24中的命中路線的快取列。如果同時存取DA 24與TA 22,那麼DA 24中的組關聯映射的所有路線皆需要讀取。在實施例中,先TA 22再DA 24的循序存取允許只讀取DA 24的單個路線,因此DA 24可節省相當大的功率且減少數據組的存取衝突。
對於載入指令,在快取命中的情況下,數據從DA 24提取且經過寫入移位器163的寫入控制而回寫到暫存器組14的目的地暫存器。在快取未命中的情況下,則將記分板15中的目的地暫存器的狀態更改為未定,且從記憶體30提取載入數據。隨後,來自記憶體30的載入數據經過專用寫入埠回寫到暫存器組14的目的地暫存器。實作上,來自記憶體30的載入數據會寫入到數據未命中緩衝器(未繪示),然後數據未命中緩衝器將回寫到暫存器組14的目的地暫存器且最終將快取列數據寫進數據快取24。
對於儲存指令,在快取命中的情況下,儲存數據由讀取移位器21安排成在需要寫入到DA 24前,即時從暫存器組14讀取。在快取未命中的情況下,可將儲存數據發送到載入/儲存單元17中的儲存未命中緩衝器(未繪示)。儲存指令傳統上的執行方式,可以同時從暫存器組14讀取用於標記位址的來源暫存器和用於儲存數據的來源暫存器,在此情況下,需要儲存緩衝器來保留儲存數據直到寫入到DA 24為止。在本發明中,將儲存數據寫入到DA 24的時間(假設快取命中)是確定的,因此,讀取埠控制安排成在需要寫入DA 24之前,“即時(just-in-time)”從暫存器組14讀取用於儲存數據的來源暫存器,因此不需要儲存緩衝器。當快取未命中,存放儲存數據的來源暫存器在需要將儲存數據寫入到數據快取前並不需事先從暫存器組14讀取,即這是所述來源暫存器的“及時”讀取。
對於快取未命中,載入/儲存單元17可允許多個送往記憶體30的待辦快取未命中請求。這些待辦未命中請求被放在載入/儲存單元17中的未命中請求佇列(未繪示)中。新的快取列從記憶體30提取到數據快取18中的未命中數據緩衝器(未繪示)中。未命中數據緩衝器可以有多個快取列。另外,數據快取18中被替換的快取列可能是髒的,這些髒的快取列必須在來自記憶體30的新快取列可寫入到數據快取18之前回寫到記憶體30。在驅逐到記憶體30之前,髒的快取列從數據快取18提取到驅逐緩衝器中。驅逐緩衝器可實做為未命中數據緩衝器的一部分。後續載入/儲存指令皆必須檢查逐出緩衝器、未命中請求佇列以及未命中數據緩衝器以偵測是否有所需數據在裡面並轉發之。
載入/儲存指令可具有精確例外事件,發生時必須將所有後續指令從執行管線捨棄。類似於分支指令,載入/儲存指令之後的所有後續指令無法回寫到暫存器組14,直到載入/儲存指令執行完為止。未命中快取的載入/儲存指令可以有數據錯誤例外事件,是一種不精確例外事件,處理方式是停止解碼/發射單元13繼續派發指令且等待所有在執行管線中的指令完成之後才觸發此例外事件。中斷類似於不精確例外事件,處理方式是停止解碼/發射單元13繼續派發指令且在所有執行管線中的指令完成之後才觸發中斷。
在下文中,將解釋使用記分板15、執行佇列19中的指令的累積吞吐時間以及讀取/寫入控制單元16以派發具有確定存取時間的指令的過程。
當解碼/發射單元13從指令快取11接收到指令時,解碼/發射單元13在派發所述指令之前存取記分板15以檢查任何數據相依性。確切地說,檢查對應於暫存器的記分板條目的未定欄位和計數欄位以用於判斷先前派發的指令是否具有確定存取時間。在一些實施例中,還可存取累積計數器199的當前累積計數值以用於檢查功能單元20的可用狀態。如果先前派發的指令(即,第一指令)和新接收待派發的指令(即,第二指令)存取同一暫存器,那麼第二指令會有數據相依性。第二指令會被接收下來並且在第一指令之後派發之。通常,數據相依性可分類為寫後寫(WAW)相依性、寫後讀(RAW)相依性以及讀後寫(WAR)相依性。WAW相依性是指在第二指令可寫入到暫存器之前第二指令必須等待第一指令將結果數據回寫到同一暫存器的狀況。RAW相依性是指在第二指令可從暫存器讀取數據之前第二指令必須等待第一指令回寫到同一暫存器的狀況。在RAW狀況下,可將回寫數據從功能單元轉發到第二指令。WAR相依性是指在第二指令可寫入到暫存器之前第二指令必須等待第一指令從同一暫存器讀取數據的狀況。通過上文所描述的記分板15和執行佇列19,具有確定存取時間的指令可以派發並安排在一個未來時間執行以避開這些數據相依性。
在處置RAW數據相依性的實施例中,如果寫入計數欄位1513的寫入計數值等於或小於待派發的指令的讀取時間(即,inst_read_time),那麼不存在RAW相依性,且解碼/發射單元可派發所述指令。如果寫入計數欄位1513的計數值大於指令讀取時間加1(即,inst_read_time+1),那麼存在RAW數據相依性,且解碼/發射單元13可暫停指令的派發。如果寫入計數欄位1513的寫入計數值等於指令讀取時間加1(即,inst_read_time+1),那麼可從功能單元欄位1515中所記錄的功能單元轉發結果數據。在此情況下,具有RAW數據相依性的指令仍可派發。功能單元欄位1515可用於轉發來自所記錄功能單元的結果數據到待派發指令的功能單元。在處置WAW數據相依性的實施例中,如果寫入計數欄位1513的寫入計數值大於或等於待派發的指令的寫入時間,那麼存在WAW數據相依性,且解碼/發射單元13可暫停指令的派發。在處置WAR數據相依性的實施例中,如果讀取計數欄位1523的讀取計數值大於指令(即,目前待派發的指令)的寫入時間,那麼存在WAR數據相依性,且解碼/發射單元13可能要暫停指令的派發。如果讀取計數欄位1523的讀取計數值小於或等於指令的寫入時間,就沒有WAR數據相依性,且解碼/發射單元13可派發所述指令。應注意,所派發指令儲放在執行佇列19中且安排在未來的一個讀取時間分派到功能單元20。
基於記分板15的計數欄位中的計數值,解碼/發射單元13可預期暫存器的可用狀態而將指令的執行安排存到執行佇列19中,而該執行佇列19可按照從解碼/發射單元13接收到排隊指令的次序將排隊指令分派到功能單元20。執行佇列19可累積執行佇列19中排隊指令的吞吐時間以預期功能單元20可用於執行下一指令的下一個可用時脈週期。解碼/發射單元13還可透過存取讀取/寫入控制單元16以在派發指令之前檢查暫存器組14的讀取埠和寫入埠的可用狀態而與暫存器組的讀取埠和寫入埠同步。舉例來說,執行佇列19中的第一指令的累積吞吐時間反映功能單元20將由第一指令佔據達11個時脈週期。如果第二指令的延遲時間是12個時脈週期,那麼結果數據將在未來的時間23(或從現在起的第23個時脈週期)處從功能單元20回寫到暫存器組14。換句話說,解碼/發射單元13將確保來源暫存器和讀取埠在第11個時脈週期處是可以使用的以及用於寫入目的地暫存器的寫入埠相對於第二指令派發時間的第23個時脈週期處是可以使用的。如果讀取埠或寫入埠在對應的時脈週期中為忙碌的,那麼解碼/發射單元13可暫停一個時脈週期再檢查暫存器和讀取/寫入埠的可用狀態。
在管線微處理器中,減少解碼/發射單元中任何指令(尤其是載入/儲存指令)的暫停是很重要的,因其阻止指令流向前移動。具有確定存取時間的指令可透過使用如上文所描述的記分板15、讀取/寫入控制單元16以及執行佇列19而派發到未來的特定時間。然而,因為數據相依性或指令存取暫存器的時間未定,具有未定存取時間的指令可能會在解碼/發射單元13中暫停。載入指令就是一個例子,它回寫到暫存器組14的目的地暫存器的執行延遲時間不能事先知道,而儲存指令是另一個例子,它讀取暫存器組14中的暫存器的讀取時間也不能事先得知。有許多因素導致存取時間不能事先確定,例如但不限於快取是否命中、TLB是否命中、數據記憶庫(data bank)衝突以及外部記憶體存取時間。舉例來說,載入指令的執行延遲時間取決於載入數據的位置,可能在數據快取或也可能在外部記憶體中。如果數據在數據快取中,可能需要2個時脈週期來載入。然而,如果數據在耦合到微處理器的記憶體(例如,RAM)中,那麼可能需要50個時脈週期到100個時脈週期來載入。指令管線就要在解碼/發射單元中暫停直到數據命中為止。下文描述一些實施例以說明FSE微處理器如何處置具有未定存取時間的載入/儲存指令。與其在指令解碼/派發階段暫停管線,FSE微處理器將載入/儲存指令安排到執行佇列19D、執行佇列19E內。
圖7是根據本發明的一些實施例的數據執行佇列(DEQ)19E的圖示。DEQ 19E包含多個DEQ條目190E(0)-190E(3),以接收載入/儲存指令的次序記錄排隊中的載入/儲存指令的各種資訊。也就是說,第一DEQ條目190E(0)中的排隊指令比第二條目190E(1)中的排隊指令先被接收到與安排派發到載入/儲存單元17。每一DEQ條目對應於一個排隊中的載入/儲存指令,且包含有效欄位191(“v”)、執行控制資訊欄位193(“ctrl/data”)、位址欄位192(“rd”)、未定載入欄位194(“unk_ld”)、未定儲存欄位196(“unk_st”)以及前置計數欄位197(“pre_cnt”)。這些DEQ條目的欄位在從解碼/發射單元13接收到載入/儲存指令時(即,在解碼/發射單元中的指令派發之後的第一時脈週期)設置。當對應的載入/儲存指令經確認並分派到載入/儲存單元17時,該DEQ條目可以復位(作廢)。有效欄位191指示條目是否有效(例如,“1”代表有效條目而“0”代表無效條目)。位址欄位192紀錄載入/儲存指令將要存取的暫存器。執行控制資訊欄位193記錄用於載入/儲存單元17的執行控制資訊和立即數據,這些值皆衍生自指令的機器碼。未定載入欄位194紀錄與先前載入指令有WAW或RAW數據相依性(按照定義載入指令具有未定寫入時間)。舉例來說,未定載入欄位194可在有WAW或RAW相依性的情況下設置。WAW數據相依性源自當前指令為載入指令的情況,而RAW數據相依性源自當前指令為儲存指令的情況。未定儲存欄位196紀錄與先前儲存指令的WAR數據相依性(按照定義儲存指令具有未定讀取時間)。未定載入欄位194和未定儲存欄位196的值與記分板條目1510和1520的未定欄位1511和未定欄位1521的值相關聯,稍後將詳細地解釋。如果當前載入/儲存指令具有與前一指令的WAW、WAR或RAW數據相依性,那麼對應於前一指令的記分板條目的計數值1513或計數值1523會被記錄在前置計數欄位197中。當前載入/儲存指令可具有多個數據相依性,在此情況下,將最差計數值(1513或1523)記錄在前置計數欄位197中(即,來自對應的記分板條目的最大計數值)。前置計數值每一時脈週期遞減一(即,圖7所圖示的“-1”方塊)直到達到0為止,然後在此時間點,當前載入/儲存指令相對於有確定存取時間的先前指令不再有數據相依性。應注意,當前載入/儲存指令可以同時與具有確定及未定存取時間的數個先前指令有多重數據相依性,在此情況下,欄位194、欄位196以及欄位197可能全部設置為非零值。DEQ 19E則必須等待到DEQ條目的未定載入欄位194中的未定載入計數、未定儲存欄位196中的未定儲存計數以及前置計數欄位197中的前置計數值達到0為止才能將對應於DEQ條目的載入/儲存指令分派到載入/儲存單元17。儘管圖7僅圖示了4個DEQ條目190E(0)~190E(3),但本發明並不意欲限制DEQ條目的數目。DEQ條目的數目可基於設計需求增加或減少。
在發出載入/儲存指令的過程中,在將載入/儲存指令發出到DEQ 19E之前,解碼/發射單元13存取記分板15以檢查載入/儲存指令將要存取的暫存器的狀態。在載入/儲存指令的派發時間,將對應記分板條目中代表WAW、WAR以及RAW數據相依性的值與載入/儲存指令一同發送到DEQ 19E。舉例來說,未定載入欄位1511和儲存欄位1521中的載入/儲存未定狀態以及寫入計數欄位1513和讀取計數欄位1523中的計數值可以連同載入/儲存指令一起發送到DEQ 19E。載入/儲存指令由解碼/發射單元13以含一個標記微操作和一個數據微操作的兩個微操作派發。標記微操作派發到TEQ 19D,而數據微操作派發到DEQ 19E。
如上文所描述,記分板條目的未定載入/儲存欄位1511和1521可有多個記錄位元以紀錄多個存取時間未定的載入/儲存指令,其中載入指令會寫到同一目的地暫存器或儲存指令會讀取同一來源暫存器。舉例來說,2位元最多可記錄3個具有存取時間未定的指令,其中0(“00”)代表沒有存取時間未定的指令派發到執行佇列19,1(“01”)代表有一個存取時間未定的指令在執行佇列19中排隊,而3(“11”)代表有3個存取同一暫存器時間未定的指令在執行佇列19中排隊。在2位元的實施例中,DEQ 19E可儲存(或解碼/發射單元13可派發到執行佇列)的存取時間未定的指令的最大數目是3,以下稱為事先決定好的未定數(或閾值)。如果存取時間未定的三個排隊指令中的任一個的存取時間確定之前,解碼/發射單元13收到存取時間未定的第四指令,那麼解碼/發射單元13可暫停管線。本發明並不意欲限制DEQ 19E儲存存取時間未定的指令的數目。在一些其它實施例中,記分板條目的未定欄位可包含3位元、4位元等,其中3位元可讓記分板條目有能力紀錄7個時間未定的指令已被派發且時間尚待確定。這裡使用派發載入/儲存指令時涉及RAW、WAW以及WAR數據相依性的實施例來說明載入/儲存指令的處理。在下文中,第一指令是指已經派發到DEQ 19E且在DEQ 19E中排隊的指令,其中與第一指令有關的資訊(即,表示讀取時間或寫入時間的未定載入/儲存值和確定計數值)記錄在記分板條目和DEQ 19E中。第二指令是指在第一指令之後將要由解碼/發射單元13派發到執行佇列19的指令。應注意,相對應的記分板條目的未定載入欄位1511、儲存欄位1521中的未定載入計數將個別受到檢查,以判斷未定載入計數或未定儲存計數在發出第二指令之前是否等於或大於事先決定好的未定數(例如,如果此欄位寬度為2位元,這個數可以為3)。如果記分板條目中的未定載入/儲存值中的一個等於或大於事先決定好的未定數,那麼解碼/發射單元13可暫停第二指令的派發。如果為否,記分板條目的未定載入/儲存值將在派發有數據相依性的第二指令,且此相依性的存取時間未定時,遞增1。
圖8為根據一些實施例中派發有確定存取時間的WAW數據相依性的載入指令的操作的圖示。在實施例中,通過解碼/發射單元13接收載入指令(即,第二指令),其中載入指令將載入數據回寫到暫存器R(Y)。在發出載入指令之前,解碼/發射單元13存取記分板條目1510(Y)以檢查數據相依性。記分板條目1510(Y)紀錄ALU指令(即,第一指令)將基於寫入計數欄位1513和功能單元欄位1515中的資訊在10個時脈週期內寫入暫存器組14的暫存器R(Y)。由於ALU指令具有確定存取時間,因此與ALU指令有WAW數據相依性的載入指令可被稱為存取時間確定的WAW數據相依性。在實施例中,解碼/發射單元13將該載入指令連同記分板151中的記分板條目1510(Y)中的記分板值派發到DEQ 19E的下一尚未使用的DEQ條目(例如,190E(0))。
在派發載入指令時,解碼/發射單元13將更新記分板條目1510(Y)的未定欄位1511以紀錄最新發出的指令為一載入指令,且此指令對於暫存器R(Y)的存取時間未定。圖8還繪示在發出載入指令之前和之後的記分板條目1510(Y)的更動。詳細地說,在發出載入指令之後,記分板條目1510(Y)中的未定欄位1511的未定值將遞增一,且功能單元欄位改變為“載入單元”。在實施例中,記分板條目1510(Y)中的寫入計數欄位1513中的寫入計數值不一定會更新。由於未定欄位1511被設定,因此下一指令存取對應於記分板條目1510(Y)的暫存器時將預期先前派發的指令是一個存取時間未定的指令。應注意,在派發載入指令前,寫入計數欄位1513的寫入計數值(即,“10”)將與第二指令一同派發到DEQ 19E。根據如圖8中的DEQ 19E例子,載入指令將放置於(下一個尚未使用的)DEQ條目190E(0)中,且DEQ條目190E(0)的欄位將根據載入指令和與載入指令一起派發的記分板值而配置。詳細地說,將有效欄位改為“1”以標示該條目使用中,執行控制資訊欄位193改為儲存載入指令的控制資訊,位址欄位192改為“r(Y)”以紀錄載入指令將回寫到暫存器R(Y)。將記分板151的記分板條目1510(Y)的未定欄位1511複製到DEQ條目190E(0)的未定載入欄位194,且DEQ條目190E(0)的未定儲存欄位196將為第二記分板152的條目1520(Y)的未定欄位1521的複本,在此實施例中假設為0。由於在載入指令之前的第一指令為具有確定存取時間的ALU指令,因此記分板151的計數欄位1515的計數值將(在派發之前)複製到DEQ條目190E(0)的前置計數欄位197。將前置計數欄位197中的前置計數值設置為9,此值從派發之前的記分板條目150(Y)中的計數值10衍算而來。由於DEQ條目190E(0)是在讀取寫入計數欄位1513中的寫入計數值10之後一個時脈週期後設定,因此當分配載入指令到DEQ條目190E(0)時,計數值10遞減一(即,9)。換句話說,DEQ條目190E(0)中的前置計數值記錄ALU指令將結果數據回寫到暫存器R(Y)的所需時脈週期數。DEQ條目190E(0)每一時脈週期皆將前置計數值向下減一,直到前置計數值達到0為止(代表此時不再有WAW數據相依性),然後將DEQ條目190E(0)中的載入指令派發到載入/儲存單元17。在另一實施例中,前置計數值197可進一步減掉載入指令的最小延遲時間,即,如果載入指令的最小延遲時間為3個週期(而不是1個週期),那麼前置計數值197設置為7。基本上,載入指令從派發時間起算,最早需要11個週期才會回寫到R(Y)。這邊要特別指出,TEQ 19D可以在DEQ 19E可根據DEQ條目190E(0)發出載入指令之前數個時脈周期就存取標記陣列以決定快取命中與否,如果快取命中,可提早數個時脈週期從DA 24取得載入數據,但必須在載入數據可透過專用寫入埠回寫到暫存器組14的暫存器R(Y)之前等待前置計數值降為零。TEQ 19D中只要快取未命中即可在DEQ 19E將載入指令分派到載入/儲存單元17之前啟動外部記憶體存取。載入指令有可能同時具有確定WAW和WAR數據相依性,在此情況下,pre_cnt欄位197設成第一記分板151和第二記分板152的寫入計數值1513和讀取計數值1523中的較大值。
圖9為根據一些實施例用以派發具有未定存取時間的WAW數據相依性的載入指令的操作的圖示。在實施例中,解碼/發射單元13收到一個載入指令(即,第二指令或第二載入指令),且此載入指令將載入數據回寫到暫存器R(X)。在發出載入指令之前,解碼/發射單元13存取記分板條目1510(X)以檢查數據相依性。根據記分板條目1510(X)的未定欄位1511(“1”),記分板條目1510(X)顯示有一個先前的載入指令(即,第一載入指令)會寫入到暫存器組14的暫存器R(X)。與第一載入指令有WAW數據相依性的第二載入指令可被稱作具有未定存取時間的WAW數據相依性。在實施例中,解碼/發射單元13將第二載入指令連同記分板151中的記分板條目1510(X)中的記分板值一起派發到DEQ 19E的下一個尚未使用的DEQ條目(即,190E(1))。應注意,實施例還可存取第二記分板152的記分板條目1520(X)以檢查暫存器R(X)的WAR數據相依性。實施例出於簡潔的目的僅假設存在WAW或WAR數據相依性。在其它實施例中,暫存器R(X)除上文所描述的WAW數據相依性之外還會有WAR數據相依性。在這類實施例中,第二記分板152的記分板條目1520(X)的值(即,未定值和讀取計數值)會與第二載入指令一起派發。
在第二載入指令派發時,解碼/發射單元13將更新記分板條目1510(X)的未定欄位1511以紀錄最新發出的指令為再一個對暫存器R(X)存取時間未定的載入指令,如圖9所示。詳細地說,在發出第二載入指令之後,記分板條目1510(X)中的未定欄位1511的未定值將遞增一(即,變成值“2”)。由於前一個存取暫存器R(X)的已派發指令也是載入指令,因此記分板條目1510(X)的功能單元欄位1515已經設為載入單元。因此,實施例可或可不將記分板條目1510(X)的功能單元欄位1515改變為“載入單元”,而具體規範此作法並非本發明的意圖。參考如圖9中所示的DEQ 19E,第二載入指令將放置於(下一個尚未使用的)DEQ條目190E(1)中,且DEQ條目190E(1)的欄位將根據第二載入指令和與第二載入指令一起派發的記分板值而設定。詳細地說,將有效欄位改變為“1”以標示該條目使用中,改變執行控制資訊欄位193以儲存第二載入指令的控制資訊,將位址欄位192改變為“r(X)”以紀錄第二載入指令將回寫到暫存器R(X)。記分板條目1510(X)的未定欄位1511(具有值“1”)將複製到DEQ條目190E(1)的未定載入欄位194,以紀錄在第二載入指令之前存在具有寫入時間未定的第一載入指令。由於第二載入指令還具有未定存取時間,因此在發出第二載入指令之後,記分板條目1510(X)的未定欄位1511的未定值將更新為“2”。190E(0)條目的未定儲存欄位196將是記分板152的條目1520(X)的未定欄位1521的副本,在此實施例中假設為0。詳細地說,DEQ條目190E(1)的未定載入欄位194的值將從“0”改變為“1”,以便紀錄在第二載入指令之前存在先前載入指令。在實施例中,由於第一載入指令具有未定存取時間,因此前置計數欄位197將為0。執行佇列19E維護未定載入計數且監視用於回寫到暫存器R(X)的專用寫入埠(結果匯流排32中的一個),從而遞減DEQ 19E中的未定載入計數,與記分板151作法一致。在一些實施例中,載入/儲存單元17可將回寫信號連同暫存器R(X)發送到DEQ 19E和記分板151以遞減未定載入計數。如之前所提到,在將對應於DEQ條目的載入/儲存指令分派到載入/儲存單元17之前,DEQ 19E要等到DEQ條目190E的未定載入欄位194中的未定載入計數、未定儲存欄位196中的未定儲存計數以及前置計數欄位197中的前置計數值達到0為止。
圖10A與圖10B為根據一些實施例,發出具有確定存取時間的RAW數據相依性的儲存指令的操作的圖示。參考圖10A,解碼/發射單元13收到一個儲存指令(即,第二指令),其中此儲存指令將從暫存器R(S)讀取儲存數據而將之儲存至(例如)記憶體30。如果儲存指令的來源運算元指定暫存器R(S),那麼儲存指令會與ALU指令有RAW數據相依性。在發出儲存指令之前,解碼/發射單元13存取第一記分板151以檢查數據相依性,例如基於第一記分板151中的未定欄位1511檢查是否有先前的載入指令有數據相依性或基於寫入計數欄位1513檢查是否有確定存取時間的其它指令(例如,ALU)。在實施例中,第一記分板151的記分板條目1510(S)基於寫入計數欄位1513和功能單元欄位1515中的資訊,紀錄ALU指令(即,第一指令)將在7個時脈週期內寫入到暫存器組14的暫存器R(S)。由於ALU指令具有確定存取時間,因此與ALU指令有RAW數據相依性的儲存指令可被稱為有確定存取時間的RAW數據相依性。在實施例中,解碼/發射單元13將儲存指令連同記分板151中的記分板條目1510(S)中的記分板值一起派發出到DEQ 19E的下一個尚未使用的DEQ條目(即,190E(2))。
參考圖10A中的DEQ 19E,儲存指令將放置於(下一個尚未使用的)DEQ條目190E(2)中,且DEQ條目190E(2)的欄位將根據儲存指令和與之一起派發的記分板值而設定。詳細地說,將有效欄位改變為“1”以標記此條目使用中,改變執行控制資訊欄位193以存放儲存指令的控制資訊,且將位址欄位192改變為“r(S)”以紀錄儲存指令將會讀取暫存器R(S)。由於儲存指令只會與寫入到R(S)的前一指令有RAW數據相依性,因此記錄在第一記分板151中的各種記分板值會連同儲存指令一起派發到DEQ 19E。這邊要特別指出,儲存指令不會有來自第二記分板152的數據相依性(即,RAR不構成數據相依性),所以執行佇列190E(2)的未定儲存欄位196中的未定儲存計數對於儲存指令而言會是0。舉例來說,記錄在第一記分板151中的未定欄位1511、寫入計數欄位1513中的值可以發送到DEQ 19E。第一記分板151的記分板條目1510(S)的未定欄位1511將複製到DEQ條目190E(2)的未定載入欄位194。由於儲存指令的前一道指令為具有確定存取時間的ALU指令,所以如圖10A所示,第一記分板151的計數欄位1515的寫入計數值(即,“7”)(派發之前)將與儲存指令一同發送到DEQ條目190E(2),用來設定DEQ條目190E(2)的前置計數欄位197。參考圖10A中的DEQ 19E,將前置計數值設定為6,此值是在派發之前從記分板條目1510(S)中的寫入計數值7衍算出來的。由於DEQ條目190E(2)在讀取寫入計數欄位1513中的寫入計數值7之後的一個時脈週期設定,因此當將儲存指令放置在DEQ條目190E(2)中時,計數值7已經被遞減一(即,變成6)。換句話說,DEQ條目190E(2)中的前置計數值記錄ALU指令未來還要多少時脈周期才會將結果數據回寫到暫存器R(S)。DEQ 190E(2)針對每一時脈週期將前置計數值向下計數一,直到前置計數值達到0為止,這時代表先前發出,有確定存取時間的指令不再有RAW數據相依性。DEQ 190E(2)中的儲存指令會在DEQ條目190E(2)的欄位194,196以及197為零時,才派發到載入/儲存單元17。在另一實施例中,前置計數197值1代表來自ALU的結果數據回寫到暫存器組14時,同時DEQ條目190E(2)可連同從ALU轉發的數據一起派發到載入/儲存單元17。DEQ條目190E(2)要派發到載入儲存單元17還必須滿足其它兩個條件:(1)未定載入欄位194中的未定載入計數應為零,和(2)必須有一個讀取埠可用於轉發ALU結果數據,這可由解碼/發射單元13先安排。在一些實施例中,DEQ 19E檢查讀取埠移位器161以獲得讀取埠的可用狀態。
參考圖10B,在派發儲存指令之後,解碼/發射單元13將更新第二記分板152中的記分板條目1520(S)的未定欄位1523以紀錄最新發出的指令是一個儲存指令,對暫存器R(S)具有未定讀取時間。詳細地說,記分板條目1520(S)中的未定欄位1521的未定值將加一(從“0”變為“1”,如圖10B中的第二記分板152(派發之後)的未定欄位1521所示)。
圖11A和圖11B為根據一些實施例用以派發具有未定存取時間的RAW數據相依性的儲存指令的操作的圖示。參考圖11A,解碼/發射單元13接收了一道儲存指令(即,第二指令),此儲存指令將從暫存器R(Z)讀取儲存數據以寫入到DA 24。在派發儲存指令之前,解碼/發射單元13存取第一記分板151(即,記分板條目1510(Z)以檢查數據相依性,例如基於第一記分板151中的未定欄位1511檢查是否有先前的載入指令或基於寫入計數欄位1513檢查是否有確定存取時間的其它指令。根據記分板條目1510(Z)的未定欄位1511(“2”),有兩個先前載入指令(即,第一指令)會寫入到暫存器組14的暫存器R(Z)且存取時間未定,並且記分板條目1520(Z)顯示有一個先前儲存指令(即,第一指令)會讀取暫存器組14的暫存器R(Z),且存取時間未定。儲存指令與先前載入指令有RAW數據相依性可被稱作具有未定存取時間的RAW數據相依性。在實施例中,解碼/發射單元13將儲存指令連同記分板151中的記分板條目1510(Z)中的記分板值一起派發到DEQ 19E的下一個尚未使用的DEQ條目(例如,190E(3))。
參考圖11A中的DEQ 19E,儲存指令將分配到(下一個尚未使用的)DEQ條目190E(3),且DEQ條目190E(3)的欄位將根據儲存指令和與儲存指令一起派發的記分板值而設定。詳細地說,將有效欄位改變為“1”以標記此條目使用中,改變執行控制資訊欄位193以儲存儲存指令的控制資訊,將位址欄位192改變為“r(Z)”以紀錄儲存指令將會讀取暫存器R(Z)。記分板151的寫入未定欄位1511和寫入計數欄位1513中的值用於設定DEQ條目190E(3)中的欄位194和欄位197。DEQ條目190E(3)中的欄位196對於儲存指令必須為0。詳細地說,將第一記分板151的寫入未定欄位1511中的值(即,值“2”)複製到未定載入欄位194作為未定載入計數。在實施例中,由於條目1510(Z)的未定欄位1511有設值,因此前置計數欄位197將為0。執行佇列19E維護未定載入計數且監視專用寫入埠(結果匯流排32中的一個)以偵測回寫到暫存器R(Z)的操作,從而以與第一記分板151相同的方式遞減DEQ 19E中的未定載入計數。在一些實施例中,載入/儲存單元17可將回寫信號連同暫存器R(Z)發送到DEQ 19E和第一記分板151以遞減未定載入計數。如上文所描述,在將對應於DEQ條目的載入/儲存指令分派到載入/儲存單元17之前,DEQ 19E必須等到DEQ條目的未定載入計數、未定儲存計數以及前置計數值達到0為止。在另一實施例中,來自載入/儲存單元17的回寫信號指示載入結果數據回寫到暫存器組14且同時DEQ條目190E(3)可從載入/儲存單元17轉發數據而派發到載入/儲存單元17。DEQ條目190E(3)要派發到載入儲存單元17還必須滿足兩個其它條件:(1)未定載入欄位194中的未定載入計數應為一,和(2)要有一個使用讀取埠或使用載入/儲存單元17的內部匯流排轉發載入結果數據的機制。在一些實施例中,DEQ 19E檢查讀取埠移位器161以獲得讀取埠的使用狀態。
參考圖11B,在發出儲存指令之後,解碼/發射單元13將更新記分板條目1520(Z)的未定欄位1521以紀錄最新發出的指令為一個對暫存器R(Z)讀取時間未定的儲存指令。詳細地說,記分板條目1520(Z)中的未定欄位1521的未定值將加一(即,其值變成“2”)。
下面解釋第二指令在以下條件派發的實施例:至少一個待由第二指令寫入的暫存器與在未來時間讀取至少一個暫存器的第一指令有WAR數據相依性,其中第一指令可具有確定讀取時間或未定讀取時間。一般來說,解碼/發射單元13將存取第一記分板151和第二記分板152,其中使用第二指令將來自第一記分板151和第二記分板152的記分板資訊發送到DEQ 19E以設定DEQ條目。在發出第二指令之後,可更新第一記分板151和第二記分板152的對應條目。在其中一個實施例中,僅更新第一記分板151中的寫入未定欄位1511以紀錄對應暫存器有一個先前派發過的指令,寫入時間未定,因為第二指令(載入指令)將會回寫到對應暫存器。然而,這並非本發明意欲規範限制的行為。在其它實施例中,記分板條目的更多欄位可一起更新以記錄所派發的第二指令的資訊。舉例來說,功能單元欄位1515還可更新以記錄寫到對應暫存器的載入指令具有未定存取時間。
圖12A和圖12B是根據一些實施例,派發一個存取時間確定,有WAR數據相依性的載入指令的操作的圖示。在處理WAR數據相依性的實施例中,解碼/發射單元13收到一條載入指令(即,第二指令),其中載入指令將載入數據寫到暫存器R(T),且T大於1且小於N。在發出載入指令之前,解碼/發射單元13存取記分板條目1510(T)、記分板條目1520(T)以檢查數據相依性。記分板條目1520(T)的讀取計數欄位1523顯示有一個被安排在8個時脈週期時讀取暫存器R(T)的先前派發指令(即,第一指令)。記分板條目1510(T)的寫入計數欄位1513顯示有安排另一個先前派發指令(亦稱作第一指令之一),在5個時脈週期後寫入暫存器R(T)。由於讀取時間大於寫入時間,因此派發指令是基於記分板條目1520(T)的讀取計數欄位1523且忽略記分板條目1510(T)的寫入計數欄位1513。這種情況可被稱作在載入指令派發時間有確定讀取時間的WAR數據相依性。在實施例中,解碼/發射單元13將第二記分板152(在圖12A中標為152(派發之前))中的記分板條目1520(T)中的記分板值與載入指令一同派發到DEQ 19E的下一個尚未使用的DEQ條目(例如190E(0))。
參考如圖12A中的DEQ 19E,載入指令將會被放置在(下一個尚未用的)DEQ條目190E(0),且DEQ條目190E(0)的欄位將根據載入指令和與載入指令一起配發的記分板值而設置。詳細地說,記分板條目1510(T)、記分板條目1520(T)的未定欄位1511、未定欄位1521中的未定值將分別複製到未定載入欄位194和未定儲存欄位196。由於載入指令寫入暫存器R(T)的時間未定,因此DEQ條目190E(0)的重點的是確保第一指令在載入指令寫入到暫存器R(T)之前已讀取暫存器R(T)。因此,派發出載入指令之前的讀取計數欄位1523的讀取計數值會用來設定DEQ條目190E(0)的前置計數欄位197。由於DEQ條目190E(0)是在讀取讀取計數欄位1523中的讀取計數值8之後的一個時脈週期設定,因此當將載入指令放置到DEQ條目190E(0)中時,讀取計數值8要減一(即,變成7)。換句話說,DEQ條目190E(0)中的前置計數值記錄第一指令未來還要多少個時脈週期才會從暫存器R(T)讀取數據。在另一實施例中,前置計數值197可進一步扣除載入指令的最小延遲時間,即,如果載入指令的最小延遲時間為3個週期(而不是1個週期),那麼前置計數值197設定為5。基本上,載入指令最早只會在派發時間算起的9個週期後才會寫回R(T)。如之前所提到,在將對應於DEQ條目的載入/儲存指令分派到載入/儲存單元17之前,DEQ 19E將必須等到DEQ條目的未定載入計數、未定儲存計數以及前置計數值皆為0。
參考圖12B,在派發載入指令之後,解碼/發射單元13將更新記分板條目1510(T)的未定欄位1511以紀錄剛剛派發的指令為一個會回寫到暫存器R(T),存取時間未定的載入指令。詳細地說,記分板條目1510(T)中的未定欄位1511的未定值將加一(即,變成值“1”)。功能單元欄位1515應改成“載入單元”,以紀錄第二指令的操作 。
圖13A到圖13B為根據一些實施例用以派發存取時間未定的WAR數據相依性的載入指令的操作的圖示。在實施例中,解碼/發射單元13收到一條載入指令(即,第二指令),而此載入指令將載入數據回寫到暫存器R(U)。在派發載入指令之前,解碼/發射單元13存取記分板條目1510(U)、記分板條目1520(U)以檢查數據相依性。基於記分板條目1510(U)的未定欄位1511(“2”),記分板條目1510(U)顯示有兩個先前載入指令(即,兩個第一指令)會寫入到暫存器組14的暫存器R(U),亦即待派發的載入指令與兩個先前載入指令有WAW數據相依性。基於記分板條目1520(U)的未定欄位1521(“1”),記分板條目1520(U)顯示存在一個先前儲存指令(即,一個第一指令)會讀取暫存器組14的暫存器R(U),亦即待派發的載入指令與先前儲存指令有WAR數據相依性。由於記分板條目1510(U)、記分板條目1520(U)皆記錄至少有一個先前指令有未定存取時間,因此寫入計數欄位1513、讀取計數欄位1523中的值不可用於設定DEQ條目190E(1)中的前置計數欄位197。在實施例中,解碼/發射單元13將載入指令連同第一記分板151及第二記分板152中的記分板條目1510(U)、記分板條目1520(U)中的記分板值一起派發到DEQ 19E的下一個尚未使用的DEQ條目(例如,190E(1))。
參考圖13A中的DEQ 19E,載入指令將配置到(下一個尚未使用的)DEQ條目190E(1),且DEQ條目190E(1)的欄位將根據載入指令和與載入指令一起發送的記分板值而設定。詳細地說,將有效欄位改變為“1”以標示該條目使用中,改變執行控制資訊欄位193以儲存載入指令的控制資訊,將位址欄位192改變為“r(U)”以紀錄第二載入指令將回寫到暫存器R(U)。記分板條目1510(U)的未定欄位1511中的未定值將複製到DEQ條目190E(1)的未定載入欄位194作為未定載入計數。記分板條目1520(U)的未定欄位1521中的未定值將複製到DEQ條目190E(1)的未定儲存欄位196作為未定儲存計數。在實施例中,因為記分板條目1510(U)、記分板條目1520(U)的未定欄位1511、未定欄位1521非零,所以先前載入和儲存指令各自有未定存取時間,因此前置計數欄位197要設為0。執行佇列19E監視預留的讀取匯流排31對暫存器R(U)的讀取操作以與記分板15相同方式遞減DEQ 19E中的未定儲存欄位196的未定儲存計數。執行佇列19E還監視預留的結果匯流排32對暫存器R(U)的寫入操作以與記分板151相同方式遞減DEQ 19E中的未定載入欄位194的未定載入計數。在一些實施例中,載入/儲存單元17可將讀取信號連同暫存器R(U)發送到DEQ 19E和記分板152以用於遞減未定儲存計數和未定讀取計數。如之前所提到,在將對應於DEQ條目的載入/儲存指令派發到載入/儲存單元17之前,DEQ 19E將必須等到DEQ條目的未定載入計數、未定儲存計數以及前置計數值遞減到0。
參考圖13B,在派發載入指令之後,解碼/發射單元13將更新記分板條目1510(U)的未定欄位1511以紀錄最新派發的指令為一條寫入暫存器R(U)時間未定的載入指令。詳細地說,記分板條目1510(U)中的未定欄位1511的未定值將遞增一(即,變成值“3”)。應注意,如果在圖13B中的151(派發之後)中的未定值為“3”的情況下解碼/發射單元13收到再一個寫暫存器R(U)的載入指令,那麼解碼/發射單元13可暫停派發新接收到的載入指令,這是由於未定欄位1511的未定寫入計數等於或大於一個事先設好的未定值(例如,“3”)。
圖14A到圖14C為根據本發明的一些實施例處理向量載入/儲存指令的圖示。數據執行佇列(DEQ)29E用於處理向量載入/儲存指令。記錄於DEQ 29E中的載入/儲存指令為有多個載入/儲存微操作的向量載入/儲存指令。每一個載入/儲存微操作被配置成對向量暫存器組的至少一個暫存器做載入或儲存操作。參考圖14A,DEQ 29E中有數個DEQ條目290E(0)到290E(3),用接收到載入/儲存指令的次序記錄排隊中的載入/儲存指令的各種資訊。應注意,限制DEQ條目的數目並非此實施例的意圖,其它實施例可包含更多或更少的DEQ條目。每一DEQ條目對應於一個排隊中的載入/儲存指令,且包含有效欄位291(“v”)、執行控制資訊欄位293(“ctrl/data”)、位址欄位292(“vd”)、未定載入欄位294(“unk ld”)、未定儲存欄位296(“unk st”)以及前置計數欄位297(“pre_cnt”),而這些欄位的功能和操作類似於如圖7中示的DEQ 19E的欄位。在實施例中,DEQ 29E更包含微操作欄位(“mop”)298以在每一載入/儲存指令中記錄多個微操作。DEQ條目的欄位在從解碼/發射單元13收到載入/儲存指令時(即,在解碼/發射單元派發指令之後的一個時脈週期)設定。圖7畫的執行佇列用於處理有1個微操作的載入/儲存指令,而執行圖14A到圖14C中畫的執行佇列是用於處理有多個微操作的向量載入/儲存指令。DEQ必須增加欄位以處理向量載入/儲存指令的每一微操作的確定和未定的數據相依性。向量載入/儲存指令的每一微操作的操作會類似圖8到圖13所示的操作和過程,且因出於簡潔的目的,此處將省略處理微操作的詳細描述。當將對應的載入/儲存指令(所有微操作)分派到載入/儲存單元17時,該DEQ條目即可清空(設定為未使用)。
參考圖14B到圖14C,每一DEQ條目290E(0)到290E(3)配置成用以記錄每一微操作的位址資訊、未定載入資訊以及未定儲存資訊。舉例來說,DEQ條目290E(0)中的載入/儲存指令包含8個微操作,且DEQ條目290E(1)中的載入/儲存指令有4個微操作。參考圖14B,位址欄位292(0)、未定載入欄位294(0)和未定欄位296(0)擴展成有8組數據以處理DEQ條目290E(0)中的8個微操作。參考圖14C,位址欄位292(1)、未定載入欄位294(1)和未定欄位296(1)擴展成有4組數據以處理DEQ條目290E(1)中的4個微操作。
類似於圖7中的DEQ 19E,位址欄位292記錄由向量載入/儲存指令存取的向量暫存器組(未繪示)中的向量暫存器的暫存器位址。向量暫存器比暫存器組14的純量暫存器寬得多。舉例來說,純量暫存器對於64位元的單一元素為64位元,而向量暫存器為512位元,可表示(舉例)8個64位元的元素或64個8位元的元素。微操作的數目指的是連續的向量暫存器的數目。舉例來說,DEQ條目290E(0)中的向量載入/儲存指令的位址欄位292中的暫存器值“v24”表示圖14B所示的8個微操作會存取暫存器位址v24到暫存器位址v31。DEQ條目290E(1)中的載入/儲存指令的位址欄位292中的暫存器值“v20”表示圖14C所示的4個微操作會存取暫存器位址v20到暫存器位址v23。DEQ 29E基於位址欄位292中所指定的第一向量暫存器v24及第一向量暫存器v20以及“mop”欄位298中的微操作的數目而算出其它有效向量暫存器。
在一些實施例中,將每個微操作視為獨立指令。參考圖14B和圖14C,每一微操作有位址欄位292(0)、位址欄位292(1)、未定載入欄位294(0)、未定載入欄位294(1)、未定儲存欄位296(0)、未定儲存欄位296(1)以及前置計數欄位297(0)、前置計數欄位297(1)。條目290E(0)和條目290E(1)中的每一微操作的計數欄位297(0)、計數欄位297(1)配置成記錄在向量載入/儲存指令的微操作會存取的暫存器當中(確定的RAW、WAW或WAR數據相依性)的最大計數值(例如,先前第一指令的寫入或讀取時間)。舉例來說,條目290E(0)的計數欄位297(0)可記錄8個計數值,所述計數值對應於記錄在DEQ條目290E(0)中的載入/儲存向量指令的8個載入/儲存微操作。記錄在計數欄位297(0)中的計數值沿每個時脈週期向下計數直到計數值達到0為止。載入/儲存佇列29E可基於對應於載入/儲存微操作的計數值將載入/儲存向量指令的載入/儲存微操作個別分派到載入/儲存單元17。應注意,用於每一微操作的未定欄位294(0)和未定欄位296(0)也必須為零才能將個別微操作分派到負載/儲存單元17。
在一個替代實施例中,條目290E(0)中的載入/儲存指令的8個計數欄位297(0)可合併起來只記錄單個最大確定前置計數值。也就是說,同一條目(例如,290E(0))中的所有微操作共用一個前置計數欄位297,所述欄位記錄所有微操作的最大確定數據相依性。計數值針對每一時脈週期向下減一,直到計數值達到0為止。載入/儲存向量指令的所有載入/儲存微操作可在計數值達到0時分派到載入/儲存單元17執行。應注意,未定欄位294(0)和未定欄位296(0)也必須為零才能將所有微操作分派到負載/儲存單元17。
在一些實施例中,記錄於載入/儲存佇列29E中的載入/儲存指令為載入/儲存向量指令,有數個存取特定暫存器的多個載入/儲存微操作,且特定暫存器上的數據相依性(例如,WAW、WAR、RAW數據相依性)為未定數據相依性。換句話說,用於解開數據相依性的時序是未定的。在DEQ 29E中,對每一DEQ條目中的微操作的每一暫存器,必須監視專用寫入埠(結果匯流排32的一部分)以偵測回寫到向量暫存器組的特定向量暫存器,然後以與記分板151相同的方式遞減未定載入欄位294。同理,每一DEQ條目中的每一微操作暫存器必須監視預留讀取匯流排31以偵測對向量暫存器組的特定向量暫存器的讀取,然後以與記分板152相同的方式遞減未定儲存欄位296。在一些實施例中,載入/儲存單元17可將回寫信號連同寫入暫存器以及讀取信號連同讀取暫存器發送到DEQ 29E、第一記分板151以及第二記分板152以遞減DEQ條目中的未定計數。舉例來說,圖14B中的第一條目190E(0)對8個向量暫存器(即,v24到v31)有8個監視器在結果匯流排32的專用寫入埠上偵測回寫到向量暫存器組的特定向量暫存器,並且在偵測到匹配時遞減未定載入欄位294(0)中的值。同時,圖14B中的第一條目290E(0) 對8個向量暫存器(即,v24到v31)有8個監視器在結果匯流排32的專用讀取埠上偵測對向量暫存器組的特定向量暫存器的讀取,並且在偵測到匹配時遞減未定儲存欄位296(0)中的值。如之前所提到,對應於載入/儲存單元17的載入/儲存微操作在分派之前,DEQ 29E(0)中的每一微操作必須等到DEQ條目290E(0)的未定載入計數294(0)、未定儲存計數296(0)以及前置計數值297(0)遞減到0。有4個有效條目的DEQ 29E可以在結果匯流排32的專用寫入埠上有至多32個監視器且在來自向量寄存器組的預留讀取匯流排31上有至多32個監視器。在一些實施例中,微操作會按照順序分派到載入/儲存單元17。當對應的第一未定載入欄位294(0)、第一未定儲存欄位296(0)以及前置計數欄位297(0)為零時,圖14B中的DEQ 29E的第一條目290E(0)派發載入向量暫存器v24的第一微操作。當派發第一微操作時,mop欄位298遞減1。當對應的第二未定載入欄位294(0)、第二未定儲存欄位296(0)以及前置計數欄位297(0)為零時,派發載入向量暫存器v25的第二微操作。當派發第二微操作時,mop欄位298遞減1。當mop欄位遞減到零時,來自第一條目290E(0)的所有8個微操作已全部分派到載入/儲存單元17所以第一條目可以註銷,然後當對應的未定載入欄位294(1)、未定載入欄位296(1)以及前置計數欄位297(1)為零時,可派發圖14C中第二條目290E(1)的微操作。
根據以上實施例,微處理器的記分板可包含未定欄位和計數欄位,其中未定欄位用於記錄寫入和讀取時間未定的指令,而計數欄位用於紀錄寫入和讀取時間確定的指令。對寫入和讀取時間確定的先前指令有數據相依性(例如,WAW、WAR、RAW數據相依性)的載入/儲存指令被稱作有確定數據相依性。對寫入和讀取時間未定的先前指令有數據相依性(例如,WAW、WAR、RAW數據相依性)的載入/儲存指令被稱作有未定數據相依性。具有這兩種類型數據相依性的載入/儲存指令皆可立即派發到載入/儲存佇列而不是暫停在解碼/發射單元中。透過此方式,微處理器的效能可以得到改進。另外,載入/儲存指令可為純量載入/儲存指令或者是包含多個載入/儲存微操作的載入/儲存向量指令。
前文已概述了若干實施例的特徵以使得本領域的技術人員可更好地理解以下詳細描述。本領域的技術人員應可理解到,他們可以容易地使用本發明作為設計或修改其他工藝和結構的基礎,以實現與本文介紹的實施例相同的目的和/或實現相同的優點。本領域技術人員也應該認識到,這樣的等效構造並不脫離本發明的精神和範圍,在不脫離本發明的精神和範圍的情況下,可以在本文中進行各種變化、替換和變更。
1:數據處理系統
10:微處理器
11:指令快取
12:分支預測單元(BPU)
13:解碼/發射單元
14:暫存器組
15:記分板
16:讀取/寫入控制單元
17:載入/儲存單元
18:數據快取
19,19A,19B,19C,19D,19E,EQ:執行佇列
20,20A,20B,20C,FUNT,FMAC:功能單元
22,TA:標記陣列
24,DA:數據陣列
29E, DEQ:數據執行佇列
30:記憶體
31:讀取匯流排
32:結果匯流排
150(0),150(N),150(Y),190(0),190(Q),1510,1510(0),1510(N),1510(S),1510(T),1510(U),1510(X),1510(Y),1510(Z),1520,1520(0),1520(N),1520(S),1520(T),1520(U),1520(Y),1520(Z),1610(1),1610(M),1630(1),1630(P):條目
151:第一記分板
152:第二記分板
161:讀取移位器
163:寫入移位器
171:位址產生單元
190E(0),190E(1),190E(2),190E(3),290E(0),290E(1),290E(2),290E(3):DEQ條目
191,291,v:有效欄位
192,292,292(0),292(1),1613,rd,vd:位址欄位
193,293,ex_ctrl,ctrl/data:執行控制資訊欄位
194,294,294(0),294(1),unk_ld:未定載入欄位
195,data:數據欄位
196,296,296(0),296(1),unk_st:未定儲存欄位
197,297,297(0),297(1),pre_cnt:前置計數欄位
199:累積計數器
298:微操作欄位
1511,1521:未定欄位
1513:寫入計數欄位
1515:功能單元欄位
1523:讀取計數欄位
1611:讀取有效欄位
1631,1631(Y),wr:回寫有效欄位
1633,wr_addr:寫入位址欄位
1635:功能單元欄位
acc_cnt:累積計數值
ALU:算數邏輯單位
cnt:計數欄位
ctrl:執行控制資訊
funit:功能單元欄位
R(0),R(N),R(S),R(T),R(U),R(X),R(Y),R(Z):暫存器
r2,r3,r5,r7,r10,r20,r22,r(S),r(X),r(Y):位址
rd:讀取有效值
rd_addr:暫存器位址
rd_cnt, read cnt:讀取時間
v20,v21,v22,v23,v24,v25,v26,v27,v28,v29,v30,v31:暫存器位址
配合附圖閱讀以下詳細描述可以最好地理解本發明的各方面。應注意,根據業界中的標準慣例,各個特徵未按比例繪製。實際上,為了論述清楚起見,各個特徵的尺寸可能會任意的增大或減小。
圖1是根據一些實施例所繪製的數據處理系統的框圖。
圖2是根據本發明的一些實施例的記分板和暫存器組的圖示。
圖3A到圖3B是根據本發明一些實施例的記分板條目的各種結構的圖示。
圖4是根據本發明的一些實施例中,與暫存器組的讀取埠配合的讀取移位器的圖示。
圖5是根據本發明的一些實施例中,與暫存器組的寫入埠配合的寫入移位器的圖示。
圖6是根據本發明的一些實施例的執行佇列的圖示。
圖7是根據本發明的一些實施例的數據執行佇列(data execution queue;DEQ)的圖示。
圖8是根據一些實施例對一個存取時間確定的WAW數據相依性的載入指令的派發操作的圖示。
圖9是根據一些實施例對一個存取時間未定的WAW數據相依性的載入指令的派發操作的圖示。
圖10A到圖10B是根據一些實施例對一個存取時間確定的RAW數據相依性的儲存指令的派發操作的圖示。
圖11A和圖11B是根據一些實施例對一個存取時間未定的RAW數據相依性的儲存指令的派發操作的圖示。
圖12A和圖12B是根據一些實施例對一個存取時間確定的WAR數據相依性的儲存指令的派發操作的圖示。
圖13A和圖13B是根據一些實施例對一個存取時間未定的RAW數據相依性的載入指令的派發操作的圖示。
圖14A到圖14C是根據本發明的一些實施例對向量載入/儲存指令排程的圖示。
1510(0),1510(N),1510(X),1510(Y):條目
151:第一記分板
1511:未定欄位
1513:寫入計數欄位
1515:功能單元欄位
ALU:算數邏輯單位
cnt:計數欄位
FMAC:功能單元
funit:功能單元欄位
Claims (20)
- 一種微處理器,包括:暫存器組,包括多個暫存器;記分板,包括多個記分板條目,其中所述多個記分板條目中的每一記分板條目對應於所述多個暫存器中的一個暫存器且所述每一記分板條目包括與對應的暫存器相關的記分板資訊,其中對應於第一暫存器的第一記分板條目包含的第一記分板資訊與已派發且安排好存取所述第一暫存器的第一指令相關;解碼/發射單元,耦接所述記分板,其中所述解碼/發射單元發出第二指令,所述第二指令存取已經安排所述第一指令存取的所述第一暫存器,其中所述第一記分板條目的所述第一記分板資訊會附在所述第二指令上;載入/儲存佇列,耦接所述解碼/發射單元,其中所述載入/儲存佇列從所述解碼/發射單元接收所述第二指令和所述第一暫存器的所述第一記分板資訊,且所述載入/儲存佇列基於所述第一暫存器的所述第一記分板資訊來解除所述第二指令與所述第一指令之間的數據相依性;以及載入/儲存單元,耦接所述載入/儲存佇列,其中所述載入/儲存單元接收並執行從所述載入/儲存佇列發出的所述第二指令。
- 如請求項1所述的微處理器,其中所述解碼/發射單元進一步配置成在所述第二指令發出到所述載入/儲存單元之後遞增 一未定值,所述未定值儲存在對應於所述第一暫存器的所述第一記分板條目內,以作為所述第一記分板資訊。
- 如請求項2所述的微處理器,其中所述第一記分板條目的所述未定值包含未定寫入值和未定讀取值,其中當所述第二指令為回寫到所述第一暫存器的載入指令時遞增所述未定寫入值,且當所述第二指令為讀取所述第一暫存器的儲存指令時遞增所述未定讀取值。
- 如請求項2所述的微處理器,其中所述第一指令包含在所述第二指令之前派發的多個第一指令,且所述解碼/發射單元進一步配置成只要所述第一記分板條目的所述未定值大於預定未定值就暫停所述第二指令的派發。
- 如請求項1所述的微處理器,其中連接到所述第二指令的所述第一記分板資訊包含表示所述第一指令具有用於存取所述第一暫存器的未定存取時間的未定值,以及所述載入/儲存佇列將連接到所述第二指令的所述第一記分板資訊的所述未定值作為未定計數記錄在對應於所述第二指令的載入/儲存佇列的佇列條目中,在檢測到回寫到所述第一暫存器的操作或檢測到讀取所述第一暫存器的操作時將所述未定計數遞減一,且在所述未定計數達到0時將所述第二指令分派到所述載入/儲存單元。
- 如請求項5所述的微處理器,其中所述記分板包含第一記分板和第二記分板,且所述記分板資訊包含來自所述第一記分板的第一未定值和來自所述第二記分板的第二未定值,其中所述佇列條目的所述未定計數包含未定載入計數和未定儲存計數,當所述第二指令為載入指令時,所述載入/儲存佇列將所述記分板資訊的所述第一未定值及所述第二未定值分別記錄為所述未定載入計數和所述未定儲存計數,以及其中當所述第二指令為儲存指令時,所述載入/儲存佇列將所述第一未定值記錄為所述未定載入計數。
- 如請求項5所述的微處理器,其中通過監視回寫匯流排偵測對所述第一暫存器的回寫操作,且通過監視讀取匯流排偵測所述讀取操作。
- 如請求項5所述的微處理器,其中所述微處理器中的功能單元提供一個回寫信號,以表示回寫到所述第一暫存器的操作,或是所述功能單元提供一個讀取信號,以表示讀取所述第一暫存器的操作。
- 如請求項1所述的微處理器,其中所述第一指令具有確定存取時間,與所述第二指令連接的所述第一記分板資訊更包含表示所述第一指令存取所述第一暫存器的時脈週期數的計數值,以及所述載入/儲存佇列基於所述計數值設置對應於所述第二指令的所述載入/儲存佇列的佇列條目中的前置計數值,針對每一時脈 週期將所述前置計數值遞減一,且根據所述前置計數值將所述第二指令分派到所述載入/儲存單元。
- 如請求項9所述的微處理器,其中所述第二指令為載入指令,所述載入/儲存佇列基於所述第一指令回寫所述第一暫存器的寫入時間、所述第一指令從所述第一暫存器讀取的讀取時間、或所述載入指令的最小延遲時間而設置對應於所述第二指令的所述載入/儲存佇列的佇列條目中的所述前置計數值,且在所述前置計數值達到0時將所述第二指令分派到所述載入/儲存單元。
- 如請求項9所述的微處理器,其中所述第二指令為儲存指令,所述前置計數值設成所述第一指令回寫到所述第一暫存器的寫入時間,且在所述前置計數值達到1時將所述第二指令分派到所述載入/儲存單元,在此情況下在下一時脈週期中,數據從對應於所述第一指令的功能單元轉發到所述載入/儲存單元。
- 如請求項1所述的微處理器,其中所述第二指令包括多個與存取時間確定的所述第一指令有數據相依性的微操作,其中所述載入/儲存佇列包括多個佇列條目,所述多個佇列條目中的每一個包含: 位址欄位,將所述多個微操作中的第一微操作的第一向量暫存器位址儲存在所述載入/儲存佇列中,且從所述第一向量暫存器位址計算後續微操作的後續位址,以及前置計數欄位,儲存前置計數值,其中所述前置計數值每一時脈週期皆遞減一直到達到0為止,其中當所述前置計數欄位中的所述前置計數值達到0時,所述載入/儲存佇列將多個載入/儲存微操作分派到所述載入/儲存單元。
- 如請求項12所述的微處理器,其中所述前置計數值包含對應於所述多個載入/儲存微操作的多個微操作的微操作前置計數值,其中每一個所述微操作前置計數值在每一時脈週期皆遞減一,直到所述微操作前置計數值達到0為止,其中每一個所述微操作前置計數值是對所述第一指令回寫所述第一暫存器的寫入時間、所述第一指令從所述第一暫存器讀取的讀取時間、或所述寫入時間和所述讀取時間的最大值,以及其中當所述微操作前置計數值達到0時,所述載入/儲存佇列將所述多個載入/儲存微操作中的一個分派到所述載入/儲存單元。
- 如請求項1所述的微處理器,其中所述第二指令包括多個與存取時間未定的所述第一指令有數據相依性的微操作, 其中所述載入/儲存佇列包括多個佇列條目,所述多個佇列條目中的每一個包含:未定載入欄位,記錄多個微操作未定寫入值,對應於多個載入/儲存微操作,以及所述載入/儲存佇列的未定儲存欄位,記錄多個微操作未定讀取值,對應於所述多個載入/儲存微操作,其中當所述對應微操作的所述微操作未定寫入值和所述微操作未定讀取值達到0時,所述載入/儲存佇列將所述多個載入/儲存微操作中的一個分派到所述載入/儲存單元。
- 如請求項1所述的微處理器,其中所述載入/儲存佇列包含標記執行佇列和數據執行佇列,其中發出所述第二指令作為包含第一微操作和第二微操作的多個微操作,將所述第一微操作分派到所述標記執行佇列以計算記憶體位址且存取數據快取的標記陣列,且將所述第二微操作分派到所述數據執行佇列以存取所述數據快取的數據陣列,其中所述標記執行佇列獨立於所述數據執行佇列,且所述數據執行佇列利用來自所述標記執行佇列中的所述第一微操作的所述快取命中或未命中狀態來存取所述數據快取的所述數據陣列。
- 一種派發存取時間未定的指令的方法,所述方法適用於使用記分板的微處理器,其中所述記分板包括多個記分板 條目,且所述多個記分板條目中的每一記分板條目對應於多個暫存器中的一個暫存器且所述每一記分板條目包括與先前派發且安排存取對應的暫存器的第一指令相關的資訊,所述方法包括:存取對應於由第二指令指定的暫存器的記分板條目;以及用對應於由所述第二指令指定的所述暫存器的所述記分板條目中記錄的所述資訊將所述第二指令發出到載入/儲存佇列。
- 如請求項16所述的派發存取時間未定的指令的方法,更包括:基於對應於由所述第二指令指定的所述暫存器的所述記分板條目中的未定值設置佇列條目中的未定欄位,偵測到讀取匯流排上對所述第二指令指定的所述暫存器讀取數據或偵測到結果匯流排上傳遞結果數據給所述第二指令指定的所述暫存器,便遞減所述佇列條目中的所述未定欄位,當所述佇列條目的所述未定欄位的值為0時,將所述第二指令分派到載入/儲存單元。
- 如請求項16所述的派發存取時間未定的指令的方法,更包括:基於所述第二指令所指定的所述暫存器對應的所述記分板條目中的計數值,設置佇列條目中的前置計數欄位;每一時脈週期將所述佇列條目的所述前置計數欄位遞減一; 當所述佇列條目的所述前置計數欄位的值為0時,將所述第二指令分派到載入/儲存單元。
- 如請求項18所述的派發存取時間未定的指令的方法,其中所述佇列條目中的所述前置計數欄位進一步基於所述第二指令的延遲時間而配置。
- 如請求項16所述的派發存取時間未定的指令的方法,更包括:當所述第二指令指定的所述暫存器對應的所述記分板條目中的未定值等於或大於預定未定值時,暫停所述第二指令的派發。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/329,181 US11687347B2 (en) | 2021-05-25 | 2021-05-25 | Microprocessor and method for speculatively issuing load/store instruction with non-deterministic access time using scoreboard |
US17/329,181 | 2021-05-25 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW202246974A TW202246974A (zh) | 2022-12-01 |
TWI809580B true TWI809580B (zh) | 2023-07-21 |
Family
ID=84115639
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW110144944A TWI809580B (zh) | 2021-05-25 | 2021-12-02 | 用於派發載入/儲存指令的微處理器和方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11687347B2 (zh) |
CN (1) | CN115390918A (zh) |
TW (1) | TWI809580B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012138957A1 (en) * | 2011-04-07 | 2012-10-11 | Via Technologies, Inc. | Microprocessor that translates conditional load/store instructions into variable number of microinstructions |
WO2016105967A1 (en) * | 2014-12-27 | 2016-06-30 | Intel Corporation | Mitigating traffic steering inefficiencies in distributed uncore fabric |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5630149A (en) * | 1993-10-18 | 1997-05-13 | Cyrix Corporation | Pipelined processor with register renaming hardware to accommodate multiple size registers |
EP0686912B1 (en) * | 1994-06-03 | 1998-12-16 | Motorola, Inc. | Data processor with an execution unit for performing load instructions and method of operation |
US7418575B2 (en) * | 2003-07-29 | 2008-08-26 | Stretch, Inc. | Long instruction word processing with instruction extensions |
US7721071B2 (en) * | 2006-02-28 | 2010-05-18 | Mips Technologies, Inc. | System and method for propagating operand availability prediction bits with instructions through a pipeline in an out-of-order processor |
GB2514618B (en) * | 2013-05-31 | 2020-11-11 | Advanced Risc Mach Ltd | Data processing systems |
US9612836B2 (en) * | 2014-02-03 | 2017-04-04 | Nvidia Corporation | System, method, and computer program product for implementing software-based scoreboarding |
US11132199B1 (en) | 2020-03-31 | 2021-09-28 | Andes Technology Corporation | Processor having latency shifter and controlling method using the same |
US11204770B2 (en) * | 2020-04-01 | 2021-12-21 | Andes Technology Corporation | Microprocessor having self-resetting register scoreboard |
US11163582B1 (en) * | 2020-04-20 | 2021-11-02 | Andes Technology Corporation | Microprocessor with pipeline control for executing of instruction at a preset future time |
-
2021
- 2021-05-25 US US17/329,181 patent/US11687347B2/en active Active
- 2021-12-02 TW TW110144944A patent/TWI809580B/zh active
-
2022
- 2022-02-16 CN CN202210143040.6A patent/CN115390918A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012138957A1 (en) * | 2011-04-07 | 2012-10-11 | Via Technologies, Inc. | Microprocessor that translates conditional load/store instructions into variable number of microinstructions |
WO2016105967A1 (en) * | 2014-12-27 | 2016-06-30 | Intel Corporation | Mitigating traffic steering inefficiencies in distributed uncore fabric |
CN107078959A (zh) * | 2014-12-27 | 2017-08-18 | 英特尔公司 | 减轻分布式非核结构中的业务量引导低效 |
Also Published As
Publication number | Publication date |
---|---|
US11687347B2 (en) | 2023-06-27 |
CN115390918A (zh) | 2022-11-25 |
US20220382547A1 (en) | 2022-12-01 |
TW202246974A (zh) | 2022-12-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9262171B2 (en) | Dependency matrix for the determination of load dependencies | |
JP5294632B2 (ja) | 読出しが以前の書込みに依存しているかどうかを予測する依存性メカニズムを備えたプロセッサ | |
US9058180B2 (en) | Unified high-frequency out-of-order pick queue with support for triggering early issue of speculative instructions | |
US6907520B2 (en) | Threshold-based load address prediction and new thread identification in a multithreaded microprocessor | |
US8230177B2 (en) | Store prefetching via store queue lookahead | |
US9086889B2 (en) | Reducing pipeline restart penalty | |
US5944815A (en) | Microprocessor configured to execute a prefetch instruction including an access count field defining an expected number of access | |
US9286075B2 (en) | Optimal deallocation of instructions from a unified pick queue | |
US8627044B2 (en) | Issuing instructions with unresolved data dependencies | |
US8006075B2 (en) | Dynamically allocated store queue for a multithreaded processor | |
US7962724B1 (en) | Branch loop performance enhancement | |
Kim et al. | Warped-preexecution: A GPU pre-execution approach for improving latency hiding | |
US20080126771A1 (en) | Branch Target Extension for an Instruction Cache | |
JP2007536626A (ja) | ロードオペレーションの投機的な結果をレジスタ値にリンクするメモリファイルを検証するためのシステムおよび方法 | |
US20040133769A1 (en) | Generating prefetches by speculatively executing code through hardware scout threading | |
EP3171264B1 (en) | System and method of speculative parallel execution of cache line unaligned load instructions | |
WO2005062167A2 (en) | Transitioning from instruction cache to trace cache on label boundaries | |
US20220382546A1 (en) | Apparatus and method for implementing vector mask in vector processing unit | |
US5727177A (en) | Reorder buffer circuit accommodating special instructions operating on odd-width results | |
TWI796755B (zh) | 微處理器、適用於微處理器的方法以及資料處理系統 | |
WO2004099977A2 (en) | System and method for operation replay within a data-speculative microprocessor | |
WO2005098613A2 (en) | Facilitating rapid progress while speculatively executing code in scout mode | |
US20040133767A1 (en) | Performing hardware scout threading in a system that supports simultaneous multithreading | |
TWI809580B (zh) | 用於派發載入/儲存指令的微處理器和方法 | |
WO2002029556A2 (en) | Incorporating local branch history when predicting multiple conditional branch outcomes |