專利名稱:多線程流水線指令解碼器的方法和設(shè)備的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般涉及計算機(jī)處理器的指令解碼,具體涉及微處理器流水線指令解碼器。
背景技術(shù):
基本的指令解碼器和指令解碼技術(shù)應(yīng)用在中央處理器和微處理器中已經(jīng)是眾所周知的。隨著設(shè)計的進(jìn)步,指令解碼器變得更為復(fù)雜,不僅包括順序處理指令的流水線寄存器,還具備緩沖器,暫時存儲先被解碼的指令,同時使得其它指令繼續(xù)被處理。但是,緩沖器容量受到限制并且能夠被填滿,因此更多的指令不能被存進(jìn)去。在現(xiàn)有技術(shù)中,當(dāng)一個緩沖器裝滿后,整個指令解碼流水線將被延遲。在微處理器中,延遲也可以因為其它原因發(fā)生,如當(dāng)一個子系統(tǒng)不能夠處理在前的子系統(tǒng)提供的大量數(shù)據(jù)時,這樣數(shù)據(jù)不會丟失。實質(zhì)上,當(dāng)在指令解碼流水線上不能解碼更多的指令時,一個指令解碼流水線被延遲。
現(xiàn)有技術(shù)的處理器中,如果一個指令解碼器流水線上的指令失效或者無效時,就像出現(xiàn)在超高速緩沖存儲器中一樣的問題,指令需要被清除。清除實際上是使指令無效,以便他們能夠被有效的指令覆蓋或者被忽視。現(xiàn)有技術(shù)中的處理器中,全部指令包括有效指令在指令解碼流水線上以整體被清除(也就是被無效)。在這種情況下,被清除的有效指令必須重新輸入到指令解碼流水線的開始部分,重新開始解碼處理。當(dāng)在現(xiàn)有技術(shù)的處理器流水線中中出現(xiàn)無效或失效時,象這樣的整體的清除易于延遲執(zhí)行處理。
減少處理器功率消耗是一個主要的考慮因素。在現(xiàn)有技術(shù)中為了節(jié)省功率,關(guān)閉運(yùn)行單元中的同步電路的全部功能塊的時鐘。就是說,這些時鐘信號在全部功能塊中被設(shè)置成一個穩(wěn)定的狀態(tài)。為了完成上述操作,在現(xiàn)有技術(shù)中使用電源關(guān)閉控制邏輯決定什么時候整個功能塊是空閑的并且能夠關(guān)閉時鐘。因為關(guān)閉同步電路的時鐘,包括時鐘信號在內(nèi)的全部信號都不會改變狀態(tài)。在這種情況下,晶體管不必對信號線上的相關(guān)電容充電和放電,這樣就節(jié)省了功率。然而,因為整個功能塊中的時鐘都被關(guān)閉,現(xiàn)有技術(shù)中的處理器必須等待直到這些功能塊的所有功能被完成。這使得現(xiàn)有技術(shù)的處理器幾乎不可能關(guān)閉功能塊的時鐘,整個期間功率很少被節(jié)省。
克服現(xiàn)有技術(shù)中處理器的這些和其他一些限制是被希望的。
發(fā)明概述本發(fā)明包括如同權(quán)利要求描述的方法,設(shè)備和系統(tǒng)。
本發(fā)明一個實施例中簡要的說明,微處理器包括一個指令解碼器,解碼指令多線程。指令解碼器包括一個指令解碼流水線。指令解碼流水線解碼每個與每個線程相關(guān)的輸入指令。指令解碼流水線還保存一個線程指示和一個與在指令解碼流水線上被解碼的每個指令平行的有效指示。
在這里,其它的具體實施例也被表示,描述和要求。
幅圖說明附
圖1說明使用本發(fā)明的典型計算機(jī)的框圖;附圖2說明使用本發(fā)明的典型中央處理器的框圖;附圖3說明本發(fā)明中包括多線程流水線指令解碼器的微處理器的框圖;附圖4說明本發(fā)明多線程流水線指令解碼器的框圖;附圖5說明本發(fā)明指令解碼流水線的框圖;附圖6說明映像流水線和清除控制,延遲和關(guān)閉如附圖5中所示的指令解碼流水線中流水線階段的控制邏輯的框圖;附圖7說明在本發(fā)明中控制邏輯的控制運(yùn)算方程式;附圖8說明在本發(fā)明中指令解碼器執(zhí)行的一個氣泡擠壓示例的時序圖;附圖9說明在本發(fā)明中指令解碼器執(zhí)行的一個非阻塞延遲示例的時序圖;附圖10說明在本發(fā)明中指令解碼器執(zhí)行的一個線程清除示例的時序圖;附圖11A說明在本發(fā)明中指令解碼器執(zhí)行的機(jī)會的電源關(guān)閉的第一個示例的時序圖;附圖11B說明在本發(fā)明中指令解碼器執(zhí)行的機(jī)會的電源關(guān)閉的第二個示例的時序圖;具體描述下面具體描述本發(fā)明,給出了大量具體的描述以提供對整個發(fā)明的完整的理解。然而,對于本領(lǐng)域的技術(shù)人員來說是顯而易見的,沒有這些具體的描述本發(fā)明也可以實現(xiàn)。在其它實例中眾所周知的方法,設(shè)備,裝置和電路不在這里具體描述,以免造本發(fā)明的不清楚。
本發(fā)明提供了一種對多線程系統(tǒng)的多線程流水線指令解碼器進(jìn)行計時,清除和延遲的算法方法,可以獲得最佳的性能和最小的功耗。一個線程是一個被執(zhí)行的軟件的一個過程。軟件編譯器能夠編譯軟件程序的一部分,將它們分裂成可執(zhí)行代碼的多個平行的數(shù)據(jù)流或者是可同時執(zhí)行的多個不同的程序。每一個可執(zhí)行代碼的多個平行的數(shù)據(jù)流是一個線程。多線程平行的被執(zhí)行提供了多個任務(wù)或是提高了性能。本發(fā)明提供了指令解碼流水線,指令線程標(biāo)識的映像流水線和映像指令解碼流水線的指令有效位。線程標(biāo)識和有效位用于控制每個流水線階段的清除,計時和延遲。與一個線程相關(guān)的指令能被清除或者被延遲而不影響在解碼流水線中的其它線程指令。本發(fā)明中,僅僅當(dāng)有效指令因為需要最小化功率消耗和延遲而提高時,計時流水線階段。一個有效指令是被執(zhí)行單元決定可執(zhí)行的指令。一個無效指令是被決定不可執(zhí)行的指令,或是一個出錯的指令,或是有一個異常的情況要求不被執(zhí)行。
參照附圖1,說明使用本發(fā)明的計算機(jī)100的框圖。計算機(jī)100包括一個中央處理器(CPU)101,輸入/輸出外圍設(shè)備102,例如鍵盤,調(diào)制解調(diào)器,打印機(jī),外部存儲設(shè)備,監(jiān)視設(shè)備103,例如示波器或是圖形顯示器。監(jiān)視設(shè)備103以人們可以理解的格式提供計算機(jī)信息,例如以視覺的或是音頻的格式。
參照附圖2,一個使用本發(fā)明中的典型的中央處理器單元101的框圖。中央處理器101包括一個微處理器201,一個盤存儲設(shè)備203和一個存儲程序指令的存儲器204,上述設(shè)備耦合在一起。盤存儲設(shè)備203可以是一個軟盤,壓縮格式盤,DVD盤,硬盤,可重寫光盤,閃存或是其它不穩(wěn)定的存儲設(shè)備。微處理器201和盤存儲設(shè)備203都能通過存儲器總線205從存儲器204中讀或是寫信息。因此,微處理器201和盤存儲設(shè)備203都能夠在整個程序的執(zhí)行階段改變存儲器204的存儲單元。為了盤存儲器203直接的做上述工作,包括一個具有直接存取存儲器的盤控制器,該控制器可以執(zhí)行存儲器的存儲和修改代碼。因為控制器可以直接對存儲器存取,它是一個直接存取存儲器代理的例子。其它的可以直接將信息存入存儲器的設(shè)備也是直接存取存儲器代理。存儲器204是典型的動態(tài)隨機(jī)存取存儲器或是其它類型的可重寫存儲器。因為用于存儲程序指令,在這里存儲器也可以作為程序存儲器。在初始化存儲在盤存儲器203或是存儲在其它設(shè)備例如輸入/輸出設(shè)備102中的程序執(zhí)行時,微處理器201讀存儲在盤存儲器203或是其它設(shè)備中的程序指令,將它們寫入存儲器204。存儲在存儲器204中的程序指令中的一個或多個頁或者片斷被微處理器201讀出(也就是,被取出),初步解碼,并將其存入指令高速緩沖存儲器中(沒有在附圖2中表示出來)準(zhǔn)備執(zhí)行。存儲在指令緩沖器中的一些程序指令可能被讀入一個指令流水線(沒有在附圖2中表示出來)中被微處理器201執(zhí)行。
參照附圖3,其表示通過存儲器總線205將微處理器201耦合到存儲器204的框圖。微處理器201包括下一指令處理器(IP)310,一個指令轉(zhuǎn)換旁視緩沖器(ITLB)312,一個存儲器控制器313,一個跟蹤高指令速緩沖存儲器314,一個跟蹤下一指令處理器(IP)315,一個指令解碼器316,一個執(zhí)行單元318,退役單元320和其它被微處理器考慮的指令流水線中的指令存儲器單元。下一指令處理器(IP)310將下一組處理的指令從存儲器204中取出,經(jīng)解碼器316解碼后,存入跟蹤高速緩沖存儲器314中。微處理器201最好是一個多線程設(shè)備。這就是說,指令多線程能夠被微處理器201解碼和執(zhí)行,以支持多任務(wù)。
指令轉(zhuǎn)換旁視緩沖區(qū)(ITLB)312包含頁表地址,將地址從線性轉(zhuǎn)換成物理地址存入存儲器204中,以便得到一個虛擬存儲器。頁表地址轉(zhuǎn)換將存儲在物理存儲器204中的指令與存儲在跟蹤高速緩沖存儲器314中的指令關(guān)聯(lián)。通常地,ITLB312接收一個輸入線性地址,返回一個與存儲器204中指令單元有關(guān)的物理地址。
跟蹤指令高速緩沖存儲器314能存儲多個序列,或是跟蹤不同程序的已解碼的指令以提供多任務(wù)處理。在一個跟蹤指令高速緩沖存儲器中,一個程序(一個跟蹤痕跡)的一串指令中僅僅第一個指令有相關(guān)的地址。一串存儲在跟蹤高速緩沖存儲器中的相關(guān)指令時常地被稱為指令的一個“跟蹤痕跡”。其它的在第一個指令后面的指令被存儲在高速緩沖存儲器314中,而沒有相關(guān)的外部地址。跟蹤指令高速緩沖存儲器314包含能被執(zhí)行單元318使用的指令來執(zhí)行一些功能或處理。如果功能或是過程需要的指令不在指令高速緩沖存儲器314中,會發(fā)生一個失誤,指令必須從存儲器204中取出。存儲器控制器313和跟蹤指令高速緩沖存儲器314接口,以便在其中存儲指令。在失誤的情形,存儲器控制器313通過ITLB312和指令解碼器316從存儲器204中取出希望得到的指令,將其提供給跟蹤指令高速緩沖存儲器314。
參照附圖4,說明在本發(fā)明中多線程流水線指令解碼器316的框圖。指令解碼器316包括一個指令解碼流水線400,控制邏輯401,一個映像流水線402。指令解碼器316支持指令的多線程。通常的,指令解碼器316中的指令解碼流水線400接受一個輸入的指令或操作碼,將這些數(shù)據(jù)塊分成完全獨(dú)立的指令或操作碼,解碼每個指令或操作碼,執(zhí)行必須的指令處理將上述數(shù)據(jù)形成能被執(zhí)行單元理解和執(zhí)行的微操作碼(UOP),例如執(zhí)行單元318。UOP從指令解碼器316中輸出的UOP耦合到跟蹤指令高速緩沖存儲器314中,被執(zhí)行之前的暫時存儲。通常的,指令解碼流水線400包括一個或多個寄存器R1-RN,一個或多個緩沖器B1-BP和在寄存器R1-RN與緩沖器B1-BP之中放置的一個或多個邏輯階段L1-L0。寄存器R1-RN可以由D型觸發(fā)器或是有合適時鐘信號的透明鎖存器組成。邏輯階段L1-L0對操作碼進(jìn)行解碼和必須的指令處理,形成UOP。緩沖器BP在附圖4中表示,和指令解碼流水線400相關(guān),并且或許被考慮為指令高速緩沖存儲器的部分。
同輸入到指令解碼流水線400中的指令相關(guān)的是指令線程標(biāo)識和指令有效位。映像流水線402包含一個指令線程標(biāo)識管道支持多線程,一個用于指令有效位的管道。在首選的實施例中,指令線程標(biāo)識是一個單獨(dú)的數(shù)據(jù)位,表示和指令解碼流水線中前一個線程和后一個線程不同的指令線程。在優(yōu)選的實施例中,一個單獨(dú)的位或信標(biāo)可以被表示一個線程標(biāo)識0(Id0)和一個線程標(biāo)識1(Id1)。多個數(shù)據(jù)位用于提供更復(fù)雜的多線程標(biāo)識,支持一個更復(fù)雜指令流水線。有效位和線程標(biāo)識位可以共同編碼,依次將指令有效位流水線和映像流水線的指令線程標(biāo)識流水線合并。指令線程標(biāo)識和指令有效位流經(jīng)過映像流水線402,同每一個在指令解碼流水線402中解碼的指令平行。映像流水線402為了完成這些工作,它通過包括指令線程標(biāo)識和指令有效位的寄存器R1’-RN’和緩沖器B1’-BP’,將指令解碼流水線400中的指令存儲單元(寄存器,緩沖器等等)鏡像。寄存器Rl’-RN’和緩沖器Bl’-BP’提供與R1-RN和B1-BP各自相同的存儲單元,設(shè)置在指令解碼流水線400上。寄存器R1’-RN’和緩沖器B1’-BP’可以由與寄存器R1-RN匹配的D型觸發(fā)器或是有合適時鐘信號的透明鎖存器組成。映像流水線402不需要可以將指令從一個階段變成下一個階段的邏輯階段L1-L0。指令線程標(biāo)識和指令有效位通過鎖存器,寄存器或是緩沖器和指令處理并行的從一個流水線階段進(jìn)入下一個流水線階段,同時控制邏輯401進(jìn)行讀取??刂七壿?01向寄存器R1-RN,R1’-RN’和緩沖器B1-BP,B1’-BP’提供時鐘信號。同一個時鐘信號被分別提供給該指令解碼流水線400和映像流水線402上的每個指令存儲單元(寄存器,緩沖器等等)。本發(fā)明中延遲和機(jī)會的電源關(guān)閉都會影響指令解碼流水線和映像流水線的計時。附圖4清楚地表示了指令解碼流水線400不同于映像流水線,它們可以被集成為一條流水線,被同一個時鐘信號計時。這樣,指令有效位和指令線程標(biāo)識被和在一起并與在一個流水線上的指令平行,同指令一樣在流水線的每一個流水線階段被解碼。指令有效位和指令線程標(biāo)識同指令一起以某種方式被編碼,以便在整個指令解碼過程中合并在一起。
使用一個單獨(dú)數(shù)據(jù)作為線程標(biāo)識,本發(fā)明通過允許將在每個流水線階段之間指令解碼流水線400中不同線程的指令混合起來,支持多線程。使用多個數(shù)據(jù)位作為線程標(biāo)識,為了同時支持在解碼流水線的每個流水線階段的多于兩個的線程,本發(fā)明將增加難度和附加可能兩倍的硬件設(shè)備。任何一種情況,使用單獨(dú)一個指令解碼器能夠支持多個線程。
參照附圖5,描述了實施例中指令解碼流水線400’的詳細(xì)框圖。優(yōu)選實施例中,一組指令或者操作碼通常是Intel X86型的指令,這些指令與被高級Intel微處理器支持的與其它具體的指令或者操作碼相關(guān)的軟件相兼容。優(yōu)選實施例中,指令或者操作碼是Intel X86型的與軟件相兼容的指令,并被解碼成被高級執(zhí)行單元318執(zhí)行的微操作碼UOP。指令解碼流水線400’從一個緩沖器(沒有示出)中接收這些指令或者操作碼,將其轉(zhuǎn)換成被執(zhí)行單元318執(zhí)行的微操作碼UOP。通過持續(xù)的對Intel X86型的指令解碼,微處理器201保持了軟件向后的兼容性。
在優(yōu)選實施例中,指令解碼流水線400’有七個指令存儲單元,一個將被解碼的指令使用七個時鐘周期,并在流水線的末尾處產(chǎn)生一個微操作碼UOP。當(dāng)然,指令解碼流水線400’可以具備提供不同長度的不同數(shù)量存儲單元。假設(shè),映像流水線402有匹配的存儲單元,以便指令線程標(biāo)識和指令有效位在處理方面與指令平行。優(yōu)選實施例中,指令解碼流水線能夠在給定的時間,在流水線上的第一個線程被解碼之后順序的處理多個線程。
指令解碼流水線中400’的指令存儲單元包括邏輯塊之間的五個寄存器501A-505E,和兩個緩沖器502A,502B。寄存器501A-505E可以由D型觸發(fā)器或是有合適時鐘信號的透明鎖存器組成。緩沖器502A,502B是存儲大量數(shù)據(jù)字節(jié)的數(shù)據(jù)緩沖器。優(yōu)選實施例中,指令解碼流水線400’中的邏輯功能性包括一個第一長度解碼器511,第二長度解碼器512,一個指令定位器513,一個故障/前綴檢測器和字段定位器/提取器514,一個指令翻譯器515,一個指令別名器516,一個微操作碼UOP調(diào)度程序517。
優(yōu)選實施例中,緩沖器502A和502B是專用于線程的緩沖器。實質(zhì)上,緩沖器502A和502B在指令解碼流水線400上形成了兩個中斷點(diǎn),因為它們能夠以可變的速率輸出其內(nèi)容(也就是,空的)。緩沖器502A置于第二長度解碼器512和指令定位器513之間。緩沖器502B置于指令解碼流水線400的末尾。也可以被認(rèn)為是跟蹤指令高速緩沖存儲器314的組成部分。然而,緩沖器被表示為指令解碼流水線400的組成部分,來理解本發(fā)明要解決的全部問題。優(yōu)選實施例中,寄存器501A-505E是以每個不同于下一個周期的周期計時的D型觸發(fā)器。
輸入到指令解碼流水線400’的輸入指令410可以是非常長的指令語句(VLIW)。VLIW輸入指令410被輸入到第一長度解碼器511和第二長度解碼器512中,被解碼和劃分成多個過程或者功能(也就是指令),被存入緩沖器502A中。優(yōu)選實施例中,緩沖器502A累積全部或者一部分可變長度的X86指令。緩沖器502B,在指令解碼流水線400’的輸出,用于累積被存入跟蹤緩沖存儲器314中之前退出指令解碼流水線400’中的固定數(shù)量的微操作碼UOP。當(dāng)一個緩沖器存滿時,這個緩沖器不能接收多余的指令,指令解碼流水線400’必須延遲以阻止指令的丟失。緩沖器502A和502B的每一個都能產(chǎn)生一個具有延遲線程標(biāo)識的延遲信號,延遲指令解碼流水線400’。
如果必須,緩沖器502B還能夠產(chǎn)生一個具有清除線程標(biāo)識的清除信號,使指令解碼流水線400’上的與清除標(biāo)識相關(guān)的指令無效。具有清除線程標(biāo)識的清除信號也可以在外部被從微處理器的前一個處理塊或是后面的處理塊傳入到指令解碼器。如果決定了一個不能被執(zhí)行單元118執(zhí)行的指令是無效的,故障/前綴檢測器和字段定位器/提取器514也可以產(chǎn)生具有清除線程標(biāo)識的清除信號,而不考慮進(jìn)一步解碼的需要。另外,故障/前綴檢測器和字段定位器/提取器514或許需要附加的周期對一個給定的指令作決定。這種情況下,故障/前綴檢測器和字段定位器/提取器514可以產(chǎn)生一個具有延遲線程標(biāo)識的延遲信號。
緩沖器502A,作為一個操作緩沖器,存有為具有一個給定線程標(biāo)識的給定線程的VLIW輸入指令410的多個過程或者功能(也就是指令)。優(yōu)選實施例中,輸入指令解碼流水線400’的輸入指令410以指令的8字節(jié)塊被送入緩沖器502A。緩沖器502A接收并在三個8字節(jié)寄存器中保存三個八字節(jié)塊指令,平行的提供信息的24個字節(jié),在它的輸出提供一個指令。優(yōu)選實施例中,緩沖器502A輸出完整的IntelX86指令。被緩沖器502A產(chǎn)生的Intel X86指令可以是1個字節(jié)至15個字節(jié)之間任何長度。因為Intel X86的指令長度可變,數(shù)據(jù)能夠被緩沖器502A以比輸出速率更多的不同輸出速率接收。緩沖器502A在給定的8字節(jié)寄存器存儲一樣的指令塊,直到這些在寄存器中存儲的指令被處理。這就是說,為了將指令的每個8字節(jié)的塊寫入緩沖器502A中,必須花費(fèi)8個周期的讀出一個指令,可以花費(fèi)1個周期讀出一個指令,或者為了完成一個完整指令的輸出,緩沖器必須等待接收一個或者多個指令的8個字節(jié)塊。因此,緩沖器502A中的一個8個字節(jié)寄存器可能在有時是空閑的,同時緩沖器中502A中的三個8字節(jié)寄存器可能在其它情況時都立刻空閑。VLIW輸入指令410的多個過程或是功能(也就是指令)被緩沖器502A輸出,好像以一種類似移位寄存器先入先出FIFO方式的指令410’。多路復(fù)用器用于從存儲在緩沖器502A中的大量過程或者功能中為一個給定的VLIW輸入指令選擇過程或者功能,以便不必安裝一個實際存在的移位寄存器。被多路復(fù)用處理選擇的輸出指令410’被提供給指令定位器513。因為指令410’為相同的線程輸出,每一個輸出指令的線程標(biāo)識被復(fù)制,直到指令的線程被完成或是從緩沖器502A中清除。緩沖器502A發(fā)出一個具有線程標(biāo)識的延遲信號,直到在緩沖器502A中一個給定輸入指令410所有的過程和功能及線程被輸出到指令定位器513中或是被無效。被緩沖器502A啟動的延遲可能延遲在前的流水線階段,第一長度解碼器511和第二長度解碼器512。被緩沖器502A啟動的延遲不能延遲后面的流水線階段513-517。
UOP調(diào)度程序517調(diào)度的微操作碼在存入跟蹤指令緩沖存儲器314之前被緩沖器502B保存。因此,緩沖器502B經(jīng)常被稱作跟蹤緩沖緩沖器填滿緩沖器,并被認(rèn)為是跟蹤緩沖存儲器314的組成部分而不是指令解碼器316的組成部分。如果緩沖器502B存滿,一個延遲可被緩沖器502B啟動。被緩沖器502B啟動的延遲可能延遲一個或多個在前的流水線階段513-517,緩沖器502A和在前的流水線階段511和512。
根據(jù)在前的描述,第一長度解碼器511和第二長度解碼器512將指令410解碼和劃分成多個過程或者功能(也就是被包含在VLIW中的指令)。緩沖器502A將這些一個或多個過程或者功能作為指令410’輸出。指令定位器513為了指令解碼器進(jìn)一步的執(zhí)行處理,將指令410’定位成多個適當(dāng)?shù)谋忍囟?。故?前綴檢測器和字段定位器/提取器514決定是否被解碼的指令能夠被執(zhí)行單元318執(zhí)行。如果可能,指令翻譯器515將X86指令轉(zhuǎn)換成一個微操作碼。指令別名器516能為一個指令別名,使解碼邏輯更簡單。微操作碼調(diào)度程序517將微操作碼輸出到緩沖器502B中。微操作碼調(diào)度程序517最后檢查決定在前的指令流水線階段是否提供了一個有效的指令。
參照附圖6,表示了控制邏輯401和映像流水線402的詳細(xì)的框圖。映像流水線402包括指令有效映像流水線601和線程標(biāo)識映像流水線602。附圖6中表示的控制邏輯401包括電源關(guān)閉邏輯603,時鐘控制邏輯604,清除邏輯605A-605M,M個清除邏輯對應(yīng)于M個流水線階段,線程選擇多路復(fù)用器606A-605M,M個線程選擇多路復(fù)用器對應(yīng)于M個流水線階段。指令有效映像流水線601包括M個可復(fù)位D型鎖存器/觸發(fā)器611A-611M,如附圖6所示串聯(lián)的耦合在一起,M個可復(fù)位D型鎖存器/觸發(fā)器對應(yīng)于M個流水線階段。線程標(biāo)識映像流水線602包括M個D型鎖存器/觸發(fā)器612A-612M,如附圖6所示串聯(lián)的耦合在一起,每個對應(yīng)一個流水線階段。鎖存器/觸發(fā)器611A-611M和鎖存器612A-612M可以由D型觸發(fā)器或是有合適的時鐘信號的透明鎖存器組成,以與寄存器501A-501E和緩沖器502A-502B匹配。映像流水線402提供在一條指令解碼流水線401上具有指令的多線程的必須的裝置。映像流水線402中的D型鎖存器/觸發(fā)器611A-611M和D型鎖存器/觸發(fā)器612A-612M,保持指令解碼流水線401中每個流水線階段的每個指令各自的指令有效位416和指令線程標(biāo)識418。優(yōu)選實施例中,M的值是7,完成一個指令解碼需要至少M(fèi)個時鐘周期。
本發(fā)明中控制邏輯401實現(xiàn)的支持流水線指令解碼器400’的多線程的控制算法,具三個主要的功能部分1)有效延遲和氣泡擠壓,2)指定線程的清除,3)機(jī)會的電源關(guān)閉。參照附圖6和7,附圖7表示在附圖6中表示的控制邏輯401所執(zhí)行的控制運(yùn)算方程式。附圖6中表示的電源關(guān)閉邏輯603,對每個流水線階段執(zhí)行“任何一個流水線階段X的電源關(guān)閉”的方程式。為了執(zhí)行上述功能,電源關(guān)閉邏輯603輸入每個流水線階段的指令有效位。另外,附圖7表示了電源關(guān)閉邏輯603執(zhí)行“最后一個流水階段的前一階段的延遲(NLP)”方程和“為任何流水線階段X的延遲”的方程。為了執(zhí)行上述功能,電源關(guān)閉邏輯603還接收一個具有延遲線程標(biāo)識的線程延遲信號,決定是否最后一個流水階段的前一階段的指令解碼流水線應(yīng)該被延遲。電源關(guān)閉邏輯603通過將給定的流水線階段的指令有效位與隨后的流水線的指令有效位作與運(yùn)算,處理每個流水線階段的延遲條件,進(jìn)一步用這些結(jié)果和是否最后一個流水階段的前一階段被延遲的決定作與運(yùn)算。電源關(guān)閉邏輯將每一個階段的延遲條件送入時鐘控制邏輯604。時鐘控制邏輯按照附圖7所示的“任何流水線階段X的時鐘使能”的方程選擇每個流水線階段的時鐘停止或是運(yùn)行。如果給定的流水線階段沒有延遲并且沒有電源關(guān)閉,那么給定流水線階段使得其時鐘使能,以便能在下一個周期被計時。
附圖6表示的每個流水線階段的清除邏輯605A-605M,執(zhí)行如附圖7表示的“清除任何流水線階段X”的邏輯方程。在除了最后一個流水階段的前一階段外的每個流水線階段,計算方程式?jīng)Q定是否在指令解碼流水線上平行的流水線階段應(yīng)該通過清除或是設(shè)置指令有效位指示一個無效指令而被無效。輸入到多路復(fù)用器606A-606M中的選擇信號選擇Clear(X)方程式的Clock(X)項還是NOT Clock(X)項被估計,Clear(X)方程式被計算為每個流水線階段產(chǎn)生清除信號。從多路復(fù)用器606A-606M中每個輸出的每個流水線階段的清除信號被耦合進(jìn)入每個可復(fù)位D型鎖存器/觸發(fā)器611A-611M的復(fù)位端。在為給定流水線階段產(chǎn)生一個清除信號時,結(jié)構(gòu)有效位被設(shè)置或是復(fù)位,指示一個在指令解碼流水線中平行的流水線階段中的無效指令。清除邏輯605A-605M的每個接收一個輸入的給定流水線階段的指令線程標(biāo)識和一個在前流水線階段的指令線程標(biāo)識,計算Clear(X)方程式的項。另外,所有清除邏輯605A-605M接收具有清除線程標(biāo)識的清除線程信號。
舉例說明有效延遲和氣泡擠壓的功能,附圖8-10,11A,11B描述了指定線程的清除,機(jī)會的電源關(guān)閉運(yùn)算。附圖8-10,11A,11B的表示與附圖5中所示的緩沖器502A和502B之間的指令解碼流水線400’的控制相關(guān),流水線階段513-517被稱作如下面描述的流水線階段PS1-PS5,通過使用本發(fā)明中的算法歸納一個指令解碼器中任意指令解碼流水線的控制。有效延遲和氣泡擠壓延遲一般發(fā)生在當(dāng)微處理器中任何子系統(tǒng)不再進(jìn)一步處理來自于其它子系統(tǒng)的數(shù)據(jù)時。為了避免丟失數(shù)據(jù),現(xiàn)有的微處理器子系統(tǒng)必須延遲,在指令解碼器中,延遲發(fā)生在當(dāng)在指令解碼流水線中給定的流水線階段沒有指令能被解碼時。一個阻塞延遲是指,不管線程標(biāo)識或是流水線上的指令的有效性而停止指令解碼流水線上每個流水線階段。一個非阻塞延遲是指,指定的線程或者考慮指令的有效位。非阻塞延遲那些在將被延遲的線程標(biāo)識的因素和流水線階段具有有效位的因素。例如,如果一個延遲發(fā)生在線程標(biāo)識是1時,一個指令在線程標(biāo)識是0時被執(zhí)行,線程標(biāo)識是0的指令將繼續(xù)執(zhí)行,線程標(biāo)識是0的指令將繼續(xù)被指令解碼器解碼,直到一個線程標(biāo)識是1的指令進(jìn)入指令解碼流水線。一旦一個線程標(biāo)識是1的指令進(jìn)入指令解碼流水線,其被執(zhí)行延遲。阻塞延遲不考慮指令的線程標(biāo)識,有效的延遲在本發(fā)明中是被指令解碼器執(zhí)行的運(yùn)算,用來減少任何延遲的影響。
一個氣泡是位于指令解碼器中的大量無效的指令。通常,氣泡是被混合入指令解碼流水線中其它指令線程的整個指令線程變?yōu)闊o效產(chǎn)生的結(jié)果。產(chǎn)生這種情況的一個例子是一個錯誤連接的支路。本發(fā)明中,執(zhí)行氣泡擠壓運(yùn)算,通常擠出指令解碼流水線上的指令的氣泡。氣泡擠壓運(yùn)算實質(zhì)上是通過繼續(xù)計時指令被標(biāo)識無效的流水線階段直到接收一個有效的指令來完成的。對包括有效指令的一個流水線階段的計時暫時停止,直到延遲的原因被清除。無效的指令最終通過將存儲在流水線階段上的無效指令改寫成有效指令而被擠出。氣泡擠壓運(yùn)算繼續(xù)運(yùn)行指令解碼流水線,降低流水線其它線程的指令而不是執(zhí)行一個非智能的或是阻塞延遲。氣泡擠壓在指令解碼器中提供更高的吞吐量。
有效延遲和氣泡擠壓的運(yùn)算處理包括由可變消耗的緩沖器產(chǎn)生的指定的線程延遲。通過使用線程標(biāo)識流水線上的線程標(biāo)識和指令有效流水線上的指令有效位,算法決定是否一個與延遲相符的線程標(biāo)識的有效指令應(yīng)該在下一個周期出現(xiàn)在緩沖器中。如果是,那么在進(jìn)行緩存之前,最后一個流水線階段之前的一個階段被延遲(防止出現(xiàn)更多的指令)。在優(yōu)選實施例中,使用最后一個流水線階段之前的一個階段而不是最后的流水線階段,以便提供一個計算的周期時間。在可選的實施例中,最后一個流水線階段可以代替最后一個流水線階段之前的一個階段。任何沒有有效指令的指令解碼流水線階段不被延遲,任何在緩沖器之后的流水線階段也不被延遲。這樣允許流水線中的指令進(jìn)行直到流水線滿,同時,仍然延遲最后一個流水線階段之前的一個階段以阻止指令的丟失,增加全部解碼的帶寬。如果將要進(jìn)入緩沖器中的指令數(shù)據(jù)不具有同延遲的線程一樣的線程,那么保持時鐘繼續(xù)運(yùn)行。這樣防止了有其它線程的指令被延遲,允許指令解碼流水線上的后面的有同一線程的指令繼續(xù)進(jìn)行,因此進(jìn)一步增加指令解碼器的帶寬。
參照附圖8,表示了本發(fā)明中被多線程流水線指令解碼器執(zhí)行的一個氣泡擠壓示例的時序圖。附圖8中波形801,802和803在時間上被分開一個時鐘周期。波形801是描述在time1過程中流水線階段中的指令狀態(tài)的時序圖。波形802是描述在time2中流水線階段中的指令狀態(tài)的時序圖。波形803是描述在time3中流水線階段中的指令狀態(tài)的時序圖。流水線階段中指令的指令狀態(tài)被表示超出了波形的每一個周期,一個標(biāo)記表示了線程標(biāo)識和包含在映像流水線中每個流水線階段的指令有效位。狀態(tài)X表示一個給定流水線階段的無效指令。狀態(tài)T0(標(biāo)記0),作為一個T0標(biāo)識的指令表示流水線階段的有效指令并具有為0的指令線程標(biāo)識(thread-ID=0;ID=0)。狀態(tài)T1(標(biāo)記1),稱作T1的指令表示流水線階段的有效指令并具有為1的指令線程標(biāo)識(thread-ID=1;ID=1)。與標(biāo)識T0或是T1中每一個相關(guān)的指令具有表示狀態(tài)。一個或多個省略符同指令狀態(tài)一起表示指令的期限或者一個給定流水線階段的有效條件的期限。
附圖8中,波形801有一個無效指令的氣泡,狀態(tài)X,出現(xiàn)在time1開始的流水線階段PS1和PS2中。一個指令410’,一個標(biāo)識為1(T1)的T1指令輸入到指令解碼流水線中。假設(shè)從接收到一個具有線程標(biāo)識為0的延遲信號開始一個T0的指定線程發(fā)生延遲,開始一個時鐘周期,產(chǎn)生波形802。波形802中,流水線階段PS4和PS5延遲各自的時鐘。流水線階段PS4,最后一個流水線階段的前一個階段的延遲條件能夠被如附圖7所示的“最后一個流水線階段之前的一個階段的延遲”的方程式計算,其中因為PS4所以NLP取值為4。優(yōu)選實施例中,使用最后一個流水線階段之前的一個階段來替代最后一個流水線階段,以便在指令解碼器處理一個指令之前提供計算的周期時間。在可選的實施例中,在方程式“最后一個流水線階段之前的一個階段的延遲”中,最后最后一個流水線階段之前的一個階段替代下一個流水線階段,其中因為PS5所以NLP取值為5。從附圖7中看出Stall(NLP)=Valid Instruction in Pipe(NLP)AND(ThreadID(NLP)=ThreadID of stall)因為流水線階段PS4中標(biāo)記T0的指令是一個有效指令,和指定的T0線程延遲關(guān)聯(lián)(ThreadID=0=ThreadID of stall),存在于流水線階段PS4中存在一個延遲條件。流水線階段PS4的時鐘因此在下一個時鐘關(guān)閉,以保持指令。這些能被附圖7表示的“任何流水線階段的時鐘使能”的方程式的計算得到。
Clock(X)=NOT Stall(X)AND NOT Powerdown(X)
因為延遲條件存在于流水線階段PS4中,它的時鐘使能信號低以停止下一個時鐘周期的時鐘。
流水線階段PS5的延遲條件,能從被附圖7表示的“延遲任何其它流水線階段X”的方程式的計算得到,其中對于PS5,X為5。
Stall(X)=Valid Instruction in Pipe(X)AND Valid Instructionin Pipe(X+1)AND StallNLP因為流水線階段PS5有一個有效的T0指令,估計在前的周期有一個有效的指令調(diào)度和一個延遲(NLP)條件存在;流水線階段PS5也存在延遲條件。流水線階段PS5的時鐘因此在下一個時鐘關(guān)閉同樣保持T0指令。因為流水線階段PS5中存在延遲條件,它的由方程式“為任何流水線階段X的時鐘使能”的計算得到的時鐘使能信號為低,以停止下一個時鐘周期的時鐘。因此,流水線階段PS4和PS5中的T0指令不會在指令解碼流水線中前進(jìn),而是被保持在流水線階段中,UOP調(diào)度程序517不調(diào)度微操作碼UOP。然而,被標(biāo)記T1表示的和一個不同線程有關(guān)的T1指令,能夠在指令解碼流水線中前進(jìn)。流水線階段PS1、PS2和PS3中的時鐘不被延遲,在time2中流水線階段PS1中的T1指令在指令解碼流水線上向前進(jìn)入波形802的流水線階段PS2。一個延遲條件不存在于波形802的time2中的流水線階段PS2中,因為在隨后的流水線階段PS3有無效的指令。如同波形802的表示,先前在流水線階段PS2中發(fā)現(xiàn)的無效指令已經(jīng)被一個T1指令改寫。因為在流水線階段PS3指令解碼流水線上仍然存在一個無效的指令,另一個T1指令410’能夠在下一個時鐘周期從流水線階段PS1向前進(jìn)。又一個時鐘周期之后,產(chǎn)生波形803。波形803中,當(dāng)一個T1指令從流水線階段PS1向前進(jìn)入流水線階段PS2的同時,先前在流水線階段PS2的T1指令向前進(jìn)入下一個流水線階段PS3。因此,波形802中存在于流水線階段PS3中的先前的第二個無效指令被從指令解碼流水線中擠壓出去。波形803中看到,因為指令解碼流水線現(xiàn)在是滿的,整個指令解碼流水線被延遲,任何流水線階段的時鐘不會計時,直到T0指定的線程延遲被清除以允許UOP被調(diào)度。以這種方式,無效指令的氣泡能夠從指令解碼器中擠壓出去。
參考附圖9,表示本發(fā)明中能夠被指令解碼器執(zhí)行的一個非阻塞延遲或者有效延遲的時序圖。附圖9中波形901,902和903在時間上被分開一個時鐘周期。波形901,902和903是描述在time1,time2和time3中流水線階段中的如上述波形指示的指令狀態(tài)時序圖。指令狀態(tài)同在前的附圖8中描述的指令狀態(tài)有一致的意思。
附圖9中,指令解碼流水線中的流水線階段包含具有線程標(biāo)識是1的線程的T1指令,具有線程標(biāo)識是0的線程的T0指令,每一個被上述波形901中的標(biāo)記表示。波形901中,一個T1指令410’進(jìn)入流水線階段PS1中,另一個T1指令以一個解碼的形式被存入流水線階段PS2中。波形901中,T0指令被存入流水線階段PS3,PS4和PS5中。在又一個時鐘周期之后,波形902產(chǎn)生。波形901表示的流水線階段的每個指令都在指令解碼流水線向前進(jìn)。波形901中流水線階段PS5中在前的T0指令被流水線階段PS5在time2中分配。在波形902中,一個T1指令410’進(jìn)入流水線階段PS1中,其它的T1指令以一個解碼的形式被存入流水線階段PS2和PS3中。在波形902中,T0指令被存入流水線階段PS4和PS5中?,F(xiàn)在假設(shè)一個T1指令線程延遲信號被控制邏輯401接收,在下一個時鐘周期產(chǎn)生波形903。在波形903中,一個T0指令被存入流水線階段PS5中同時另一個T0指令被分配。在波形903中,T1指令占據(jù)流水線階段PS1,PS2,PS3和PS4。因為在指令解碼流水線后面的流水線階段中的指令是T0指令而不是T1指令,流水線繼續(xù)計時直到一個與指定的T1線程延遲相關(guān)的T1指令到達(dá)最后一個流水線階段之前的一個流水線階段PS4。當(dāng)一個T1指令到達(dá)最后一個流水線階段之前的一個流水線階段PS4,方程式“最后一個流水線階段之前的一個流水線階段(NLP)的延遲”計算的延遲條件被滿足。占據(jù)PS5的T0指令被分配進(jìn)入跟蹤高速緩沖存儲器。以這種方式,延遲能夠被指令解碼器智能的處理。線程特定清除指令可能會因為許多原因需要被清除。實質(zhì)上,清除是使那些無效的指令無效,以便它們能被忽略或是被有效指令重寫。清除指令可能無效與指定線程標(biāo)識相關(guān)的指令的整個線程。涉及的清除的這些類型被作為指定線程的清除。線程具體的對無效指令的清除能被包括存儲器子系統(tǒng)(例如,本身修改代碼)的微處理器中大量功能塊,指令解碼流水線本身(例如,分支地址計算器或者X86解碼錯誤)和退役單元320或微處理器的其它后端功能塊產(chǎn)生。本發(fā)明中,線程具體的清除運(yùn)算法則僅僅清除這些指令,必須來自于指令解碼流水線并除去其中的有效指令,實現(xiàn)繼續(xù)的解碼和微處理器的執(zhí)行。本發(fā)明中,線程具體的清除算法使用指令的有效位416和映像流水線402中指令具體線程標(biāo)識418,來為包含對應(yīng)于被清除線程的指令的這些流水線階段產(chǎn)生清除信號。這些清除信號將無效那些包含在指令解碼流水線的每個的流水線階段的對應(yīng)于被無效的線程的這些指令的有效位。一個指令解碼流水線的線程具體的清除信號允許清除指令的一個線程同時保持其它指令線程的完整無恙。完整的指令可以在指令解碼流水線上越過這些因為被無效而被清除的指令向前進(jìn)。線程特定清除指令在一個延遲中被執(zhí)行,如果引起延遲的指令被清除即消除了延遲條件。在一個基于處理器設(shè)計的周期,指令解碼流水線的流水線階段被分析決定是否被延遲或是不執(zhí)行線程特定清除來消除延遲條件。實質(zhì)上,線程特定清除移除在指令解碼流水線上阻擋其它線程的線程。這樣解決了在共享同一硬件的多線程機(jī)器中發(fā)生的所謂死鎖條件的問題。一個死鎖條件的例子是,一個線程標(biāo)識為0的指令被延遲,等待線程標(biāo)識為1的指令執(zhí)行而線程標(biāo)識為0的指令又阻止線程標(biāo)識為1的指令使用資源,例如跟蹤高速緩沖存儲器。如果整個流水線在這種死鎖條件下被清除,將不能保證同一個條件不重現(xiàn)。線程特定清除只清除這些具有多線程共享一個硬件資源的必須被使能的流水線階段。另外,有一個全部線程清除信號,通過有效的從流水線上移除所有有效指令來影響所有線程。
參考附圖10,表示本發(fā)明中能被指令解碼器執(zhí)行的一個線程指定清除的時序圖。波形1001,1002和1003在時間上彼此分開一個時鐘周期。波形1001,1002和1003是描述在time1,time2和time3中的流水線階段中的指令狀態(tài)時序圖。流水線階段的狀態(tài)被表示在每個波形周期的上面,并且和先前參考圖8的討論具有同樣的含義。
附圖10中,波形1001在流水線階段中具有兩個線程的指令T1和T0指令,如同標(biāo)記1(T1)狀態(tài)和標(biāo)記0(T0)狀態(tài)表示的。波形1001中,T0指令在流水線階段PS2和PS4。Time1時間,T1指令在流水線階段PS3和PS5。一個新指令410’,一個T1指令被輸入到指令解碼流水線中第一個流水線階段pS1中。在波形1001中,在指令解碼流水線上流水線階段PS1-PS5中所有的指令在time1中都是有效的。假設(shè)一個T1線程特定清除被接收,T1指令,這些與標(biāo)記T1表示的線程相關(guān)的指令在指令解碼流水線上的流水線階段中被無效。指令通過設(shè)置或是清除在映像流水線中適當(dāng)?shù)牧魉€階段的指令有效位被無效。波形1002中,流水線階段全部被計時,將指令從波形1001中的階段移到相繼的下一個流水線階段。在流水線階段PS2和PS4中就是保持T1指令的流水線階段中的指令,現(xiàn)在都屬于如X表示的無效狀態(tài)。這能通過分析如附圖7表示的方程式“對任何流水線階段X的清除”來計算。
Clear(X)={Clock(X)AND[(ClearThread(ID0)AND(ThreadlD(X-1))=ID1))OR(ClearThread(ID1))AND(ThreadTD(X-1)=ID))OR{NOT Clock(X)AND[(ClearThread(ID0))AND(ThreadID(X)=IDO))OR(ClearThread(ID0)AND(ThreadID(X)=ID1))這個方程式有兩項,一個Clock(X)項,另一個NOT Clock(X)項。作為假如時鐘不被延遲的結(jié)果,兩項中的Clock(X)項是可能引起清除的項。如果一個流水線階段被延遲,相關(guān)的兩個項中的一個NOT Clock(X)項將計算以決定是否發(fā)生一個清除條件。在這個方程式中,清除線程(ID0)是一個線程標(biāo)識為0的線程特定清除。清除線程(ID1)是一個線程標(biāo)識為1的線程特定清除。流水線階段PS2被清除,因為波形1001中time1的流水線階段PS1是T1指令并且一個T1線程特定清除被接收,所以在下一個時鐘周期PS2階段被清除,其指令無效為X。就是說清除線程(ID1)是T1線程特定清除,time1的PS1中指令標(biāo)識是1,所以一個清除條件存在導(dǎo)致PS2在下一個時鐘周期被清除。Time2的流水線階段PS4的清除可以被同樣的解釋,參照在前的Time1的流水線階段PS3中保持的數(shù)值。
波形1002中,流水線階段PS3和PS4保持T0指令。因為一個T1線程特定清除發(fā)生,Time1的流水線階段PS5中的指令,作為一個T1指令被清除,因此,在Time2中UOP調(diào)度程序517不調(diào)度任何微操作碼。下一個時鐘周期之后,波形1003產(chǎn)生。波形1003中,流水線階段全部被計時,將指令從波形1002移到相繼的下一個流水線階段。一個新的與標(biāo)記0(T0)相關(guān)的指令的線程,T0指令進(jìn)入第一個流水線階段PS1。一個被X表示的無效指令已經(jīng)移動進(jìn)入了流水線階段PS3和PS5。T0指令被保持在流水線階段PS2和PS4中,同時在Time3中一個T0指令被UOP調(diào)度程序517調(diào)度。這種方式,發(fā)生指令解碼器中流水線階段中線程特定清除。關(guān)于其它線程的指令能夠保持在流水線階段并被沒有任何延遲的進(jìn)一步解碼。機(jī)會的電源關(guān)閉機(jī)會的電源關(guān)閉算法一方面停止電路的整個流水線階段(每個流水線)的時鐘,以便節(jié)省功率,此不同于僅僅一個功能塊。另一方面,機(jī)會的電源關(guān)閉運(yùn)算法則停止在電路上任何流水線階段的時鐘,保持指令中將被清除的線程(每個線程)以便保持功率的線程。另一方面,機(jī)會的電源關(guān)閉算法停止整個指令解碼器和任何先前電路的時鐘,如果指令解碼器中沒有有效的指令,或者在前電路向指令解碼器提供指令(每個流水線)。時鐘控制電路能夠檢測這些條件,來決定什么時候禁止時鐘使能信號來關(guān)閉電路中一個或多個流水線階段的時鐘。因為電源關(guān)閉對于用戶來說是透明的,不會有任何性能或功能的損害,運(yùn)算是機(jī)會的。對用戶來說,機(jī)會電源關(guān)閉運(yùn)算帶來得唯一的可見效果是電源的節(jié)省。
本發(fā)明中機(jī)會電源關(guān)閉運(yùn)算使周指令有效流水線決定是否計時一個特殊的流水線階段。如果緊接在一個流水線階段前的有效指令將進(jìn)入該階段,那么接收有效指令的流水線階段被計時。如果沒有有效的指令等待,或直接在前的指令是無效的,接收無效指令的流水線階段的時鐘被關(guān)閉(就是說時鐘被停止)以節(jié)省功率。同樣的,通過檢查映像流水線的每個流水線階段中指令的有效性的信息,能夠得知什么時間整個指令流水線的每個流水線階段沒有工作,時鐘控制邏輯的信號是整體關(guān)閉指令解碼流水線的時鐘還是部分的關(guān)閉。通過以這種方式停止時鐘,指令解碼器的功耗被減少。
參考附圖11A和11B,表示本發(fā)明中指令解碼器執(zhí)行的機(jī)會的電源關(guān)閉示例的時序圖。波形1101,1102和1103是描述在time1,time2和time3中的流水線階段的狀態(tài)時序圖,彼此在時間上分開一個時鐘周期。波形1111,1112,1113,1114和1115是描述在time1,time2,time3,time4和time5各個中的流水線階段的狀態(tài)時序圖,在時間上彼此分開的一個時鐘周期。指令狀態(tài)同在前的附圖8中描述的指令狀態(tài)有一致的意思。
在附圖11A中,波形1101在流水線階段上有具有兩種線程的指令,如同標(biāo)記1(T1)狀態(tài)和標(biāo)記0(T0)狀態(tài)表示的。在波形1101中,T0指令,與線程標(biāo)記0(T0)相關(guān)的線程的指令,在流水線階段PS2和PS4中。T1指令,具有線程標(biāo)記為1的線程的指令,在流水線階段PS3和PS5中。一個新的指令410’,一個T1指令被輸入流水線階段PS1中。因為波形1101表示的在指令解碼流水線上所有的指令在time中是有效的,所以每個流水線階段的時鐘運(yùn)行產(chǎn)生下一個周期?,F(xiàn)在假設(shè)T1線程具體的清除已經(jīng)被接收,以便T1指令將要在下一個周期接收這些指令的流水線階段上被無效。
另一個時鐘周期產(chǎn)生之后,波形1102在time2形成。在波形1102中,所有流水線階段都被從波形1101計時,以將指令移向相繼的下一個流水線階段。因為T1線程特定清除,本應(yīng)當(dāng)保持T1指令的流水線階段PS2和PS4,現(xiàn)在保持了被無效狀態(tài)X表示的無效指令。因為一個T1線程特定清除的發(fā)生,波形1101表示的流水線上的最后一個指令是T1指令,因此被清除,因此在time2中沒有指令被UOP調(diào)度程序517調(diào)度。
為了使在指令解碼器中的機(jī)會電源關(guān)閉運(yùn)算法則起作用,一個或多個流水線階段需要包含無效的指令。如果在直接在前的流水線階段[Pipe(x-1)]的指令中包含一個無效指令,給定的流水線階段[Pipe(x)]電源被關(guān)閉。附圖7清楚地說明了對任何流水線階段X而關(guān)閉電源的方程式。
Powerdown(X)=NOT Valid Instruction in Pipe(X-1)一個給定的流水線階段通過關(guān)閉時鐘被關(guān)閉電源。在給定的流水線階段隨后有一個無效的指令的情況下,在下一個周期計時流水線階段接收無效指令將多余的消耗功率。波形1102中,因為流水線階段PS2和PS4各自有如標(biāo)記X表示的無效指令,流水線階段PS3和PS5在下一個周期停止各自的時鐘。當(dāng)然,如果一個延遲條件不存在,為了進(jìn)行有效指令,緊接行時鐘停止計時的段流水線階段之后的流水線階段[Pipe(x+1)]使時鐘開始計時。波形1102中,流水線階段PS4使時鐘在下一個周期運(yùn)行,緩沖器502B將在下一個周期接收一個調(diào)度輸出。這些可以從附圖7表示為任何流水線階段X的時鐘使能的方程式中看出。
Clock(X)= NOT Stall(X)AND NOT Powerdown(X)
有無效指令的流水線階段,在有有效指令的給定流水線階段之前的,有無效指令的流水線階段被繼續(xù)計時,直到一個有效指令包含在其中。
波形1102中,因為在這些流水線階段存在如X狀態(tài)表示的無效指令,流水線階段PS2和PS4的計時將在下一個周期運(yùn)行。以這種方式,指令解碼器繼續(xù)解碼直到有效指令被解碼為這些流水線階段。因為他們保持如標(biāo)記T0表示的有效指令,流水線階段PS3和PS5關(guān)閉時鐘。
又一個時鐘周期之后,波形1103在time3中形成。波形1103中,因為在這些流水線階段有一個如標(biāo)記T0’狀態(tài)表示的舊指令,流水線階段PS3和PS5的時鐘將運(yùn)行產(chǎn)生下一周期,因為T0指令已經(jīng)前進(jìn)進(jìn)入下一個流水線階段。一個舊指令被一個或多個省字號表示,取決于它在同一流水線階段中被保留多少個周期。舊指令和無效指令的相同點(diǎn)是能被重寫或放棄。這與一個延遲的指令是不同的,延遲指令仍然有效并且不能被改寫。以這種方式,指令解碼器繼續(xù)解碼直到在流水線中解碼了有效指令。波形1103中,因為保持了如標(biāo)記T0表示的有效指令,流水線階段PS2和PS4在下一個周期使其時鐘停止計時。因為如波形1102所示流水線階段PS5在前一個時鐘周期保持了一個有效的T0指令,T0指令被UOP調(diào)度程序517調(diào)度。被輸入到流水線階段PS1中的指令410’在波形中是如X表示無效的。因此,第一流水線階段PS1的時鐘被停止以避免在下一個時鐘周期讀無效指令。
參考附圖11B,表示機(jī)會電源關(guān)閉的第二示例的時序圖。波形1111中流水線階段的指令有兩個線程,標(biāo)記1(T1)狀態(tài)和標(biāo)記0(T0)狀態(tài)。波形1111中,T0指令,與標(biāo)記0(T0)相關(guān)的線程的指令在流水線階段PS4中。T1指令,與標(biāo)記1(T1)相關(guān)的線程指令在流水線階段PS2,PS3和PS5中。一個新的指令410’,T1指令被輸入到流水線階段PS1中。因為所以的指令如波形1111 time1所示在指令解碼流水線是有效的指令,每個流水線上的時鐘運(yùn)行產(chǎn)生下一個周期?,F(xiàn)在假設(shè)一個T1線程特定清除已經(jīng)被接收,以便T1指令在將要在下一個周期接收這些指令的流水線階段上被無效。
又一個時鐘周期之后,波形1112在time2中形成。波形1112中,流水線階段全部被計時,將指令從波形1111中的階段移到相繼的下一個流水線階段。因為T1線程特定清除,否則將保持T1指令的流水線階段PS2,PS3和PS4,現(xiàn)在保持如無效狀態(tài)X表示的無效指令。因為發(fā)生的T1線程特定清除,波形1111表示的流水線上最后一個指令,是一個T1指令,被清除,因此在time2中UOP調(diào)度程序517不調(diào)度任何操作碼。波形1112中,因為流水線階段PS2,PS3和PS4各自有如標(biāo)記X表示的無效指令,流水線階段PS2,PS3和PS4在下一個周期停止各自的時鐘。流水線階段PS2使自己的時鐘運(yùn)行,為了接收一個進(jìn)入波形1112中第一流水線階段的有效的T0指令。因為流水線階段PS5的T0指令是有效的,緩沖器502B將在下一個周期接收一個調(diào)度輸出。
又一個時鐘周期之后,波形1113在time3中形成。波形1113中,因為在流水線階段PS3有一個如標(biāo)記X’狀態(tài)表示的舊指令,其引起了在流水線階段PS2的T0指令前進(jìn)進(jìn)入下一個流水線階段,流水線階段PS3的時鐘將運(yùn)行產(chǎn)生下一周期。波形1113中,流水線階段PS2的時鐘將運(yùn)行產(chǎn)生下一周期,以接收新的目前從指令輸入410’輸入第一流水線階段PS1的T0指令。因為在其之前沒有有效指令,流水線階段PS4和PS5的時鐘保持停止。在流水線階段PS4和PS5上的指令在下一周期分別老化為X’和TO’。
又一個時鐘周期之后,波形1114在時間4形成。波形1114中,因為在流水線階段PS4有一個如標(biāo)記X”狀態(tài)表示的舊指令,其引起了在流水線階段PS3的T0指令前進(jìn)進(jìn)入下一個流水線階段。波形1114中,流水線階段PS2和PS3的時鐘將運(yùn)行產(chǎn)生下一周期,以接收來自于在前流水線階段的新的經(jīng)過從指令輸入410’輸入第一流水線階段PS1的T0指令。因為在流水線階段PS4之前沒有有效指令,流水線階段PS5時鐘保持停止。在流水線階段PS5上的指令在下一周期老化為T0”。
又一個時鐘周期之后,波形1115在time5中形成。因為在流水線階段PS5有一個如標(biāo)記T0”’狀態(tài)表示的舊指令,其引起了在流水線階段PS4的T0指令前進(jìn)進(jìn)入下一個流水線階段,流水線階段PS5的時鐘將運(yùn)行產(chǎn)生下一周期。波形1115中,流水線階段PS2,PS3和PS4的時鐘將運(yùn)行產(chǎn)生下一周期以接收來自于在前流水線階段的新的經(jīng)過從指令輸入410’輸入第一流水線階段PS1的T0指令。在此實施例中,流水線階段PS5能保持自身時鐘以機(jī)會電源關(guān)閉的狀態(tài)停止三個周期,流水線階段PS4能保持自身時鐘以機(jī)會電源關(guān)閉的狀態(tài)停止兩個周期,流水線階段PS3能保持自身時鐘以機(jī)會電源關(guān)閉的狀態(tài)停止一個周期,機(jī)會電源關(guān)閉條件的其它情況,功率被或多或少的保存。
有效延遲和氣泡擠壓,線程特定清除和機(jī)會電源關(guān)閉的運(yùn)算法則是有內(nèi)在聯(lián)系的。例如,使用線程特定清除信號清除一個指定的流水線階段能引起給定流水線階段的延遲被消除。另外,一個線程特定清除可以無效在某個流水線階段上的指令以提供一個機(jī)會電源關(guān)閉條件。
本發(fā)明有許多比現(xiàn)有技術(shù)先進(jìn)的地方。本發(fā)明一個先進(jìn)之處是,在處理器前端的延遲很少發(fā)生。本發(fā)明另一個先進(jìn)之處是,無效指令的“氣泡”能從指令流中擠壓出去。本發(fā)明另一個先進(jìn)之處是,能夠清除在指令解碼流水線上的一個線程指令的同時使另一個指令線程完整。本發(fā)明另一個先進(jìn)之處是,網(wǎng)絡(luò)的解碼帶寬增加。本發(fā)明另一個先進(jìn)之處是,指令解碼流水線上的流水線階段僅僅在需要前進(jìn)一個指令時被計時,因此節(jié)省了功率。本發(fā)明另一個先進(jìn)之處是,指令的多線程共享同一個指令解碼器,以低的操作花費(fèi)提高了每個線程的執(zhí)行。
這些可效仿的實施例被描述并以相應(yīng)附圖表示,應(yīng)當(dāng)理解這些實施例僅僅被表示不局限于本發(fā)明的范圍,本發(fā)明不限制在這里描述的具體的結(jié)構(gòu)和安排,普通的本領(lǐng)域技術(shù)人員應(yīng)理解各種其它修改可能發(fā)生。例如,本發(fā)明不限制在其應(yīng)用僅在于Intel X86指令解碼而是應(yīng)用于任何多線程流水線解碼器。更進(jìn)一步,本發(fā)明可適合于支持多線程的微處理器中其它的功能部分或者模塊。以便減少大量的硬件支持多線程,減少功耗,減少執(zhí)行延遲的負(fù)面影響。另外,可能在硬件,固件或是結(jié)合裝置上執(zhí)行本發(fā)明或者其特征的其中一些,處理器的可讀存儲媒體提供所需軟件,例如,磁性的,光的或是半導(dǎo)體存儲器。
權(quán)利要求
1.一個微處理器包括一個解碼指令多線程的指令解碼器,該指令解碼器包括,一個指令解碼流水線,用于解碼與每個線程相關(guān)的輸入指令,一個與指令解碼流水線平行操作的映像流水線,該映像流水線包括,一個指令線程標(biāo)識流水線,將每個在指令解碼器流水線中被解碼的指令和線程標(biāo)識聯(lián)系起來,一個指令有效流水線,把每個在指令解碼流水線中被解碼的指令和一個有效指示聯(lián)系起來。
2.根據(jù)權(quán)利要求1所述的微處理器,其中所述的指令解碼流水線和映像流水線在物理上被合成一條流水線集成在一塊微處理器集成電路上。
3.根據(jù)權(quán)利要求1所述的微處理器,其中所述的指令解碼器包括,一個流水線控制器,與指令解碼流水線和映像流水線耦合,該流水線控制器平行地控制每個指令解碼流水線的流水線階段和每個映像流水線的流水線階段的定時。
4.根據(jù)權(quán)利要求3所述的微處理器,其中接收所述的指定線程的清除指令,流水線控制器使僅僅在指令解碼流水線的每個延遲的流水線階段的指令無效,上述流水線的線程標(biāo)識與指定線程的清除線程標(biāo)識一樣。
5.根據(jù)權(quán)利要求4所述的微處理器,其中所述的流水線控制器通過在指令有效的流水線中平行的流水線階段設(shè)置或者清除有效的標(biāo)識來使每個流水線階段的指令無效。
6.根據(jù)權(quán)利要求3所述的微處理器,其中接收所述的指定線程的清除指令,當(dāng)每個被定時流水線階段之前的流水線階段具有與指定線程的清除線程標(biāo)識時,流水線控制器僅僅使被輸入到指令解碼流水線的每個計時的流水線階段的指令無效。
7.根據(jù)權(quán)利要求6所述的微處理器,其中,所述的流水線控制器通過在指令有效流水線中平行的流水線階段設(shè)置或者清除有效的標(biāo)識來使每個流水線階段的指令無效。
8.根據(jù)權(quán)利要求3所述的微處理器,其中,接收所述的與一個線程標(biāo)識相關(guān)的延遲,流水線控制器決定與延遲相關(guān)的線程標(biāo)識與指令解碼流水線中最后一個流水線階段的前一個流水線階段的有效指令的線程標(biāo)識匹配,流水線控制器通過在下一個周期停止對最后一個流水線階段之前的一個流水線階段的定時,延遲最后一個流水線之前的一個流水線階段,得以保持包含在其中的有效的指令。
9.根據(jù)權(quán)利要求8所述的微處理器,所述的流水線控制器還決定一個有效的指令被包含在所述的指令解碼流水線中第一個流水線階段而不是最后一個流水線階段前的階段,一個有效的指令被包含在所述的第二個緊接著第一個流水階段的流水線階段,流水線控制器通過下一個周期停止第一個流水線階段定時,延遲第一流水線階段以保持包含在其中的有效的指令。
10.根據(jù)權(quán)利要求9所述的微處理器,其中流水線控制器通過分析每個流水線階段中指令有效流水線的有效的指示決定一個指令的有效性。
11.根據(jù)權(quán)利要求3所述的微處理器,其中所述的流水線控制器還決定一個無效的指令被包含在直接在指令解碼器流水線第二個流水線階段之前的第一個流水線階段,流水線控制器通過停止第二個流水線階段的計時來關(guān)閉第二個流水線階段,直到一個有效指令被包含在第一個流水線階段來保持功率。
12.一個多線程流水線指令解碼器包括一個指令解碼流水線,解碼與大量指令線程相關(guān)的指令;一個與指令解碼器流水線并行操作的映像流水線,映像流水線包括一個指令線程標(biāo)識流水線,把每個流水線階段的線程標(biāo)識與在指令解碼流水線中被解碼的指令聯(lián)系起來;一個指令有效流水線,把每一個流水線階段的有效指示與在指令解碼流水線中被解碼的指令聯(lián)系起來。
13.根據(jù)權(quán)利要求12所述的多線程傳輸?shù)闹噶罱獯a器,它還包括一個流水線控制器,與指令解碼流水線和映像流水線耦合,流水線控制器并行的控制每個指令解碼流水線的流水線階段和每個映像流水線的流水線階段的計時。
14.根據(jù)權(quán)利要求13所述的多線程指令解碼器,其中所述的流水線控制器還通過在指令有效流水線的每個流水線階段設(shè)置有效的指示來指示一個無效的指令,控制每個指令解碼流水線的流水線階段指令的無效。
15.根據(jù)權(quán)利要求13所述的多線程指令解碼器,其中流水線控制器電源關(guān)閉邏輯,通過分析每個流水線階段的有效指示來決定是否下一個流水線階段能夠被關(guān)閉,和決定是否每個流水線階段應(yīng)該被延遲,流水線控制器還包括時鐘控制邏輯電路,決定是否指令解碼流水線中每個流水線階段和映像流水線的一個時鐘信號能夠被停止,以保持功率或者在一個延遲中保持?jǐn)?shù)據(jù)。
16.根據(jù)權(quán)利要求15所述的多線程指令解碼器,其中通過分析每個流水線階段的有效指示決定是否下一個流水線階段能被關(guān)閉的流水線控制器的電源關(guān)閉邏輯包括,一個反相器,在每個流水線階段反相有效的指示,來決定是否下一個流水線階段能夠在下一個時鐘周期被關(guān)閉。
17.根據(jù)權(quán)利要求15所述的多線程指令解碼器,其中通過分析每個流水線階段的有效指示決定是否每個流水線階段應(yīng)該被延遲的流水線控制器的電源關(guān)閉邏輯包括,一個對最后一個流水線階段前的一個階段的延遲條件的決定,一個異或門,將最后一個流水線階段的前一個流水線階段的線程標(biāo)識與延遲的線程標(biāo)識作或運(yùn)算,決定上述兩者是否匹配,第一與門,將最后一個流水線階段的前一階段的有效指示與來自異或門的輸出作與運(yùn)算,決定是否最后一個流水線階段之前的流水線階段應(yīng)該被延遲。
18.根據(jù)權(quán)利要求17所述的多線程傳輸?shù)闹噶罱獯a器,其中所述的通過分析每個流水線階段的有效指示決定是否每個流水線階段應(yīng)該被延遲的流水線控制器的電源關(guān)閉邏輯包括,一個對除了最后一個流水線階段的前一個流水線階段的其它流水線階段的延遲條件的決定,第二與門,將已經(jīng)做過決定的流水線階段的有效指示與下一個流水線階段的有效指示作與運(yùn)算,第三與門,將第二與門的輸出與第一與門的輸出作與運(yùn)算,決定除了最后一個流水線階段前的一個階段的其它流水線階段是否應(yīng)該被延遲。
19.一個解碼指令多線程的方法,包括將具有指令的第一個線程的指令,第一個指令線程標(biāo)識,第一個指令的有效指示輸入到平行的一個流水線;解碼指令的第一個線程的指令;在解碼指令的第一個線程的指令期間保持第一個線程的指令,第一個指令線程標(biāo)識與第一個指令的有效指示之間的平行關(guān)系;將指令的第二個線程的指令,第二個指令線程標(biāo)識,第二個指令的有效指示輸入到平行的一個流水線;解碼指令的第二個線程的指令;在解碼指令的第二個線程的指令期間保持第二個線程的指令,第二個指令線程標(biāo)識與第二個指令的有效指示之間的平行關(guān)系。
20.根據(jù)權(quán)利要求19所述的方法,進(jìn)一步包括當(dāng)一個對第一個指令線程的指定線程的清除指令被接收時,僅僅使那些在流水線中有第一個指令線程標(biāo)識的指令無效。
21.根據(jù)權(quán)利要求20所述的方法,通過清除在流水線中指令的第一個線程的每個指令的第一個指令有效指示來使指令無效。
22.根據(jù)權(quán)利要求19所述的方法,進(jìn)一步包括當(dāng)包含在最后一個流水線階段的前一階段的指令有效指示指示一個有效的指令,并且一個指定線程的延遲的線程標(biāo)識與包含在最后一個流水線階段的前一階段的指令線程標(biāo)識匹配時,禁止在流水線中最后一個流水線階段之前的階段的時鐘信號。
23.根據(jù)權(quán)利要求19所述的方法,進(jìn)一步包括當(dāng)包含在被評估的流水線階段的指令有效指示指示一個有效的指令,并且下一個流水線階段指令的指令有效指示指示一個有效的指令和最后一個流水線階段的前一個階段被延遲時,禁止流水線中除了最后一個流水線階段的前一個階段之外的階段的時鐘信號。
24.根據(jù)權(quán)利要求19所述的方法,進(jìn)一步包括當(dāng)流水線階段沒有被延遲且流水線階段沒有被關(guān)閉時,啟動流水線階段的時鐘信號。
25.根據(jù)權(quán)利要求19所述的方法,進(jìn)一步包括當(dāng)一個在前的流水線階段包含一個被指令的有效指示指示是無效指令時,禁止一個流水線階段的時鐘信號,用于保持功率。
26.一個計算機(jī)包括一個內(nèi)存,一個微處理器,微處理器包括解碼指令多線程的指令解碼器,指令解碼器包括一個解碼與每個線程相關(guān)的輸入指令的指令解碼流水線,一個與指令解碼器流水線并行操作的映像流水線,映像流水線包括一個指令線程標(biāo)識流水線,把流水線階段的線程標(biāo)識與在指令解碼流水線中被解碼的每個指令聯(lián)系起來,一個指令有效流水線,把有效指令與在指令解碼流水線中被解碼的每個指令聯(lián)系起來。
27.在一個指令解碼器中消除無效指令的方法包括從一條流水線接收指定線程的清除指令,指示要被清除的指令的線程標(biāo)識ID,比較流水線每個流水線階段中的每個指令的線程標(biāo)識,決定上述標(biāo)識是否和將被從流水線上清除的指令的線程標(biāo)識匹配;使與將被從流水線上清除的指令的線程標(biāo)識匹配的每個指令的一個有效位無效。
28.根據(jù)權(quán)利要求17所述的方法,進(jìn)一步包括計時流水線的每個流水線階段,繼續(xù)解碼被有效位指示的流水線中的有效指令。
29.一個微處理器包括一個解碼指令多線程的指令解碼器,指令解碼器包括一個指令解碼流水線,指令解碼流水線解碼和每個線程相關(guān)的每個輸入指令,指令解碼流水線保持一個線程標(biāo)識和一個有效指示,該有效指示和指令解碼流水線中被解碼的每個指令平行。
30.根據(jù)權(quán)利要求29的微處理器,其中,指令解碼流水線包括在一塊微處理器集成電路上的一系列寄存器。
31.根據(jù)權(quán)利要求29的微處理器,其中,指令解碼器進(jìn)一步包括,一個和指令解碼流水線耦合的流水線控制器,流水線控制器控制指令解碼流水線的每個流水線階段的計時。
32.根據(jù)權(quán)利要求31的微處理器,其中,接收指定線程的清除指令,流水線控制器僅僅使在指令解碼流水線的每個延遲的流水線階段的指令無效,上述流水線的線程標(biāo)識與指定線程的清除線程標(biāo)識一樣。
33.根據(jù)權(quán)利要求31的微處理器,其中接收指定線程的清除指令,當(dāng)每個被定時流水線階段的前一個階段具有與指定線程的清除線程標(biāo)識一樣的線程標(biāo)識時,流水線控制器僅僅使被輸入到指令解碼流水線的每個計時的所述的流水線階段的指令無效。
34.根據(jù)權(quán)利要求31的微處理器,其中接收與一個線程標(biāo)識相關(guān)的延遲,流水線控制器決定與延遲相關(guān)的線程標(biāo)識與指令解碼流水線中最后一個流水線階段的前一個流水線階段的有效指令的線程標(biāo)識匹配,流水線控制器通過在下一個周期停止對最后一個流水線階段的前一階段定時,延遲最后一個流水線階段的前一個流水線階段,以保持包含在其中的有效的指令。
35.根據(jù)權(quán)利要求31的微處理器,其中流水線控制器還決定一個有效的指令被包含在指令解碼流水線的第一流水線階段,而不是最后一個流水線階段的前一個階段,一個有效的指令被包含在所述的第二個緊接著第一個流水階段的流水線階段,流水線控制器通過下一個周期停止第一個流水線階段定時,以保持包含在其中的有效的指令。
36.根據(jù)權(quán)利要求31的微處理器,其中流水線控制器還決定一個無效指令被包含在直接在指令解碼器流水線中第二個流水線階段之前的第一個流水線階段,流水線控制器通過停止第二個流水線階段的計時來關(guān)閉第二個流水線階段,直到一個有效指令被包含在第一個流水線階段來保持功率。
全文摘要
使用多線程傳輸?shù)闹噶罱獯a器計時、清除和延遲多線程機(jī)器中解碼流水線的指令,可以獲得最佳的性能和最小的功耗。一個映像流水線映像保持線程標(biāo)識的指令解碼流水線和指令解碼器每個流水線階段有效指令比特。線程標(biāo)識和有效的比特用于控制對指令解碼器中每個流水線階段的計時、清除和延遲。一個線程指令能夠被清除而不與在解碼流水線的其它線程指令發(fā)生沖突,在一些情況下,一個線程的指令能夠被延遲而不與在解碼流水線的其它線程指令發(fā)生沖突。本發(fā)明中,僅僅當(dāng)有效指令需要前進(jìn)以便保持功率和最小化延遲時計時流水線階段。
文檔編號G06F9/38GK1437725SQ00819259
公開日2003年8月20日 申請日期2000年11月6日 優(yōu)先權(quán)日1999年12月30日
發(fā)明者J·P·杜格拉斯, D·J·德勒加尼斯, J·D·哈德利 申請人:英特爾公司