專利名稱:流水線處理一系列處理指令的方法和設(shè)備的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種流水線處理一系列處理指令的方法和設(shè)備,特別是轉(zhuǎn)送精簡指令集計算機(RISC)體系結(jié)構(gòu)邏輯的指令時間表和結(jié)果。
背景技術(shù):
處理器指令流水線,將單條指令的處理分成幾個(次)級,并且減少每個級的復雜度,同時提高時鐘速度,這是精簡指令集計算機(RISC)體系結(jié)構(gòu)的典型特征。這樣的流水線具有每周期處理通過一條指令,但每條指令有幾個或“n”個周期的延遲。這種情況導致與本發(fā)明相關(guān)的兩個結(jié)論A)如果連續(xù)指令流中的特定指令產(chǎn)生其需要作為它直接后繼的一個或多個指令的操作數(shù)的結(jié)果,該后繼指令的處理必須等待(即,不能進入流水線并因此使流水線級空閑)直到前一指令的處理在相應(yīng)流水線級中產(chǎn)生結(jié)果為止。這種處理情況用寫后讀(RAW)流水線故障(hazard)表示。B)操作數(shù)一般從所謂的寄存器堆中讀取。然而,處理結(jié)果產(chǎn)生之后,通?;ㄙM一或兩個另外的周期或級,直到確實將這些結(jié)果存儲在寄存器堆里為止。因為所有的處理單元必須在同一級中寫回以確保精確中斷,所以如果處理單元具有不同的等待時間(例如,加載操作通常能夠比浮點操作處理的更快),則結(jié)果的產(chǎn)生和寄存器堆存取之間的延遲增加。但是,一旦結(jié)果實際產(chǎn)生,通過旁路寄存器堆而從后繼的流水線級直接讀取結(jié)果也是有可能的。這種處理叫作“結(jié)果轉(zhuǎn)送”。
RAW故障可以通過采用“記分板”來避免,所述記分板典型的特征是,每個上述寄存器堆的地址有獨立的入口。一旦指令進入流水線,就在這個特定指令的目的地址(即,所述結(jié)果地址)的地址上設(shè)置標記。該標記表明流水線內(nèi)的指令需要將其結(jié)果寫入相應(yīng)的寄存器地址。因此,只要設(shè)置了標記,所述結(jié)果就不可用。顯然指令處理之后,成功地將結(jié)果寫到寄存器堆中。任何隨后的需要進入流水線的指令必須檢查,用于它的源(即操作數(shù))寄存器地址中的至少一個是否設(shè)置了標記。只要這些標記未清除,所述指令就不允許進入流水線。因此,在每個周期都必須訪問記分板。
例如,John L.Hennessy,David A.Patterson“ComputerArchitectureA Quantitative Approach”,出版者MorganKaufmann,ISBN1558605967,2002年5月15日第3版,其中對記分板的體系結(jié)構(gòu)作了詳細描述。
發(fā)明內(nèi)容
已知的記分板解決方案的缺點是,它們采用轉(zhuǎn)送和指令表邏輯的較昂貴和通信密集的低速實現(xiàn)。為了實現(xiàn)針對想要進入流水線的每個指令的轉(zhuǎn)送,必須檢查每個操作數(shù),看操作數(shù)地址是否作為目的寄存器出現(xiàn)在結(jié)果產(chǎn)生之后的流水線級之一中。尤其是,在以不同延遲為特征的處理單元的情況下,相當多的流水線級攜帶有適于轉(zhuǎn)送的結(jié)果。公知的轉(zhuǎn)送操作需要與所有的流水線級進行并行通信。
根據(jù)本發(fā)明,不僅是流水線級的單個標記(single flag)而且編號,或相應(yīng)的代碼字,通常都攜帶有需要將其結(jié)果(或操作數(shù))寫入特定寄存器堆地址的指令,并且各自的指令(或操作數(shù),借此這種類型可以是二進制編碼代碼字)類型存儲在位于特定指令(或操作數(shù))的目的地址(即結(jié)果地址)的地址的相應(yīng)記分板或寄存器堆地址中。一方面,這個特征需要記分板中的稍多一些的存儲空間,但是另一方面,它簡化了RAW故障檢測,尤其是指令轉(zhuǎn)送。
換句話說,雖然公知的記分板體系結(jié)構(gòu)采用單個位,來標記特定目的寄存器地址被用于指令流水線中當前處理的指令,但本發(fā)明使用更為復雜的數(shù)據(jù)項,用來標明各指令的當前流水線級編號及類型。有利地,這個特定信息項能夠用來計算所需的停止循環(huán)數(shù),以防止從其可以轉(zhuǎn)送結(jié)果的RAW故障和/或流水線級(或操作數(shù))。
否則,需要監(jiān)控用于轉(zhuǎn)送的所有流水線級的結(jié)果(或操作數(shù)),并且在每個周期,問題邏輯都需要訪問記分板以檢測各標記是否被設(shè)置。這些目的所需的邏輯和配線是昂貴的,且處理速度慢。本發(fā)明所解決的問題有利于在流水線處理中提高處理速度。這個問題可通過權(quán)利要求1所述的方法解決。權(quán)利要求2記載了運用上述方法的設(shè)備。
有利地,省略了RISC體系結(jié)構(gòu)中用于結(jié)果轉(zhuǎn)送的昂貴且可能低速的總線探測邏輯。寫后讀(RAW)流水線故障檢測的效率也就提高了。
原則上,本發(fā)明的方法適用于流水線處理一系列處理指令,包括以下步驟—處理一系列連續(xù)的流水線級中的所述指令,其中,將部分或中間第一流水線處理操作數(shù)或結(jié)果,暫時地(intermediately)或永久地存儲在操作數(shù)/結(jié)果存儲器,如寄存器堆中,以進一步在適當?shù)臅r刻通過一個或多個所述流水線級存取,以及,其中,在適當?shù)臅r刻,通過一個或多個其它所述流水線級,存取在一個或多個所述流水線級中有效的部分或中間第二流水線處理操作數(shù)或結(jié)果,而不對所述操作數(shù)/結(jié)果存儲器進行存取,以及其中,記分板用來存儲信息,該信息關(guān)于后續(xù)的流水線處理所需的特定的所述部分或中間第一流水線處理操作數(shù)或結(jié)果中的特定操作數(shù)或結(jié)果存在或不存在,其中所述記分板數(shù)據(jù)被存儲并更新,所述數(shù)據(jù)關(guān)于在一個或多個所述流水線級中,當前需要的操作數(shù)或結(jié)果處于有效,以用于一個或多個其它的所述流水線級,以及其中,關(guān)于指令類型,存儲并更新所述記分板數(shù)據(jù),所述指令涉及所述當前所需的操作數(shù)或結(jié)果,其中,所述的一個或多個其它的流水線級利用關(guān)于位置的所述數(shù)據(jù)和關(guān)于指令類型的所述數(shù)據(jù),以直接存取所述當前所需的操作數(shù)或結(jié)果,而沒有必要存取存儲在所述操作數(shù)/結(jié)果存儲器中的數(shù)據(jù)。
原則上,本發(fā)明的設(shè)備適用于流水線處理一系列的處理指令,且包括—操作數(shù)/結(jié)果存儲器;—一系列連續(xù)的流水線級,處理所述指令,從而將部分或中間第一流水線級處理操作數(shù)或結(jié)果暫時地或永久地存儲在所述操作數(shù)/結(jié)果存儲器,如寄存器堆中,以進一步在適當?shù)臅r刻通過一個或多個所述流水線級存取,以及其中在適當?shù)臅r刻,通過一個或多個其它流水線級,存取在一個或多個所述流水線級中有效的部分或中間第二流水線處理操作數(shù)或結(jié)果,而不對所述操作數(shù)/結(jié)果存儲器進行存取;—記分板,其中,在所述記分板中存儲并更新數(shù)據(jù),所述數(shù)據(jù)關(guān)于在一個或多個所述流水線級中,當前需要的操作數(shù)或結(jié)果處于有效,以用于一個或多個其它的流水線級,以及存儲并更新關(guān)于指令類型的數(shù)據(jù),所述指令涉及所述當前所需的操作數(shù)或結(jié)果,以及所述的一個或多個其它的流水線級利用關(guān)于位置的所述數(shù)據(jù)和指令類型的所述數(shù)據(jù),以直接存取所述所需的操作數(shù)或結(jié)果,而沒有必要存取存儲在所述操作數(shù)/結(jié)果存儲器中的數(shù)據(jù)。
本發(fā)明優(yōu)選的附加實施例記載在相應(yīng)的從屬權(quán)利要求中。
參考附圖,對本發(fā)明的具體實施例進行說明,圖示為圖1寄存器堆/流水線/記分板設(shè)置;圖2圖1寄存器堆/流水線級/記分板設(shè)置中的尺寸為n的示例記分板。
具體實施例方式
在圖1中,(順序)指令流進入一系列的n個流水線處理級STG0至STGN-1的第一級STG0。這些級每個均包括如一系列寄存器和適當?shù)奶幚硌b置,其執(zhí)行在CPU或微處理器中執(zhí)行的典型的計算或操作。例如,級STG3到STGn-2能夠轉(zhuǎn)送中間或部分結(jié)果給轉(zhuǎn)送總線FWDB,或給多路轉(zhuǎn)送總線。但是,根據(jù)本申請,級STG2和/或STG1可以,或另外的接下來的級STG4,STG5,…,也可以不轉(zhuǎn)送中間或部分結(jié)果給FWDB總線。級STG0至STGn-2能夠轉(zhuǎn)送中間流水線處理結(jié)果給相應(yīng)的后續(xù)級,以作進一步處理。第一級STG0能夠從總線FWDB和/或從寄存器堆REGF中讀取中間或部分結(jié)果。最后級STGn-1將最終結(jié)果寫入到寄存器堆REGF中,并且最終寫入總線FWDB。STG0級將上述流水線級的代表編號和上述指令類型的代表編號寫入記分板SCB。從級STG3-STGNn-1到FWDB總線的FWDB總線輸出的轉(zhuǎn)送由各級輸出控制信號STG30C到STGN-10C控制,而所述的級輸出控制信號由記分板SCB提供。由于流水線處理的一般原則,所以對于級STG1和STG2轉(zhuǎn)送任何中間或部分結(jié)果到總線FWDB,通常不作檢測。但是,根據(jù)本申請,如上所述,級STG2,STG1,STG4,STG5,…,的任何一個級,可以額外地伴隨有或可以不伴隨有各級輸出控制信號STG20C,STG10C,STC40C,STG50C,…。
圖2更詳細地示出了記分板SCB可能的操作。將級STG0的輸出信號ISTG0提供給控制級CTRL。這個控制級STRL提供復位信號Res給一系列的級計數(shù)寄存器STGCR0至STGCRM-1。通常M不等于N。級CTRL也提供由如位A至D組成的類型編碼信號給一系列的指令類型寄存器ITR0至ITRM-1。寄存器STGCR0至STGCRM-1和ITR0至ITRM-1進一步由系統(tǒng)或周期時鐘CLK以及來自CTRL的使能信號ENB控制。將寄存器STGCR0至STGCRM-1和寄存器ITR0至ITRM-1的輸出信號提供給控制級CTRL。
例如,只要指令進入流水線(流水線級STG0),記分板SCB的目的寄存器地址上就寫入值“0”。如果流水線級沒有停止,如由于RAW故障,則每一個新的周期,涉及先前已經(jīng)進入第一流水線級的指令的目的寄存器地址的所有級計數(shù)器入口就會增加。因此,當前級編號一直不斷地更新。當相應(yīng)的指令離開流水線(流水線級STGn-1)時,計數(shù)器增加到值“n”。入口值“n”不增加。
換句話說,當前流水線級計數(shù)編號不斷更新,且一旦處理過的處理指令離開流水線級系列中的最后的流水線級STGNn-1,流水線級計數(shù)編號就被設(shè)定不再增加的最終值。
這種處理能夠通過在用于每個寄存器地址的CTRL中采用單獨的增量器來執(zhí)行??刂萍塖TRL提供與圖1有關(guān)的上述控制信號STG30C至STGN-10C。
將x作為產(chǎn)生結(jié)果的流水線級的最后編號,將取決于指令類型的編號存儲在記分板SCB中。
將y作為要進入流水線的指令的操作數(shù)地址的記分板入口。然后,僅僅從x中減去y,就能容易地計算出必需的停止循環(huán)次數(shù)。如果結(jié)果小于或等于“0”,則不需要停止循環(huán)。如果y不等于n,則必須轉(zhuǎn)送。實際轉(zhuǎn)送結(jié)果的流水線級通過y直接指向信號,即信號OCSTGy。
因此,沒有與單獨流水線級的通信需要轉(zhuǎn)送。記分板SCB僅通過級STG0存取。所有通信保留在本地,其節(jié)約了全程配線(在現(xiàn)代亞μ硅技術(shù)中這樣的配線使處理較慢)。也節(jié)約了可能昂貴且低速的通信邏輯。
例如,SPARC V8 RISC處理器能夠用來實現(xiàn)本發(fā)明,借此,浮點單元的內(nèi)部接口能夠根據(jù)本發(fā)明重新設(shè)計,以得到更好的性能。浮點流水線能夠具有八個級的長度,其中浮點操作能夠在第6級產(chǎn)生它們的結(jié)果,并且在第2級載入操作就已發(fā)生。因此,特殊地,載入指令需要廣泛的轉(zhuǎn)送。該實現(xiàn)已經(jīng)通過使用VHDL在寄存器轉(zhuǎn)移級上的模擬,以及通過FPGA板上的快速樣機研究實現(xiàn)得到了全面的證實。
優(yōu)選地,電子和/或自動地執(zhí)行本發(fā)明的流水線處理。
代替硬件,本發(fā)明也能夠通過采用相應(yīng)的軟件來實現(xiàn)。
權(quán)利要求
1.一種用于流水線處理一系列處理指令(SIS)的方法,包括以下步驟—處理一系列連續(xù)的流水線級(STG0-STGn-1)中的所述指令(SIS),其中,將部分或中間的第一流水線級處理操作數(shù)或結(jié)果暫時地或永久地存儲在操作數(shù)/結(jié)果存儲器(REGF),如寄存器堆中,以在適當?shù)臅r刻通過一個或多個所述流水線級(STG0-STGn-1)進一步進行存取,以及,其中,在適當?shù)臅r刻,通過一個或多個其它的流水線級,存取在一個或多個流水線級中有效的部分或中間的第二流水線處理操作數(shù)或結(jié)果,而不對所述操作數(shù)/結(jié)果存儲器(REGF)進行存取,以及其中,記分板(SCB)用來存儲信息,該信息關(guān)于后續(xù)的流水線處理所需的特定部分或中間的第一流水線級操作數(shù)或結(jié)果存在或不存在,其特征在于其中,在所述記分板(SCB)中,存儲并更新數(shù)據(jù),所述數(shù)據(jù)關(guān)于在一個或多個所述流水線級中,當前所需的操作數(shù)或結(jié)果處于有效,以用于一個或多個其它的流水線級,以及其中,在所述記分板(SCB)中,存儲并更新關(guān)于指令類型的數(shù)據(jù),所述指令涉及所述當前所需的操作數(shù)或結(jié)果,其中,所述的一個或多個其它的流水線級利用關(guān)于位置的所述數(shù)據(jù)和關(guān)于指令類型的所述數(shù)據(jù),以直接存取所述當前所需的操作數(shù)或結(jié)果,而沒有必要存取存儲在所述操作數(shù)/結(jié)果存儲器中的數(shù)據(jù)。
2.一種流水線處理一系列處理指令(SIS)的裝置,包括—操作數(shù)/結(jié)果存儲器(REGF);—一系列連續(xù)的流水線級(STG0-STGn-1),處理所述指令(SIS),從而將部分或中間第一流水線級處理操作數(shù)或結(jié)果暫時地或永久地存儲在所述操作數(shù)/結(jié)果存儲器(REGF),如寄存器堆中,以進一步在適當?shù)臅r刻通過一個或多個所述流水線級(STG0-STGn-1)存取,以及其中,在適當?shù)臅r刻,通過一個或多個其它流水線級,存取在一個或多個所述流水線級中有效的部分或中間第二流水線處理操作數(shù)或結(jié)果,而不對所述操作數(shù)/結(jié)果存儲器(REGF)進行存取;—記分板(SCB),其中,在所述記分板中存儲并更新數(shù)據(jù),所述數(shù)據(jù)關(guān)于在一個或多個所述流水線級中,當前需要的操作數(shù)或結(jié)果處于有效,以用于一個或多個其它的流水線級,以及其中,存儲并更新關(guān)于指令類型的數(shù)據(jù),所述指令涉及所述當前所需的操作數(shù)或結(jié)果,以及其中,所述的一個或多個其它的流水線級利用關(guān)于位置的所述數(shù)據(jù)和指令類型的所述數(shù)據(jù),以直接存取所述所需的操作數(shù)或結(jié)果,而沒有必要存取存儲在所述操作數(shù)/結(jié)果存儲器中的數(shù)據(jù)。
3.如權(quán)利要求1或2所述的方法或裝置,其特征在于所述記分板(SCB)包含單獨的增量器,用于所述操作數(shù)/結(jié)果存儲器中的寄存器的每個地址。
4.如權(quán)利要求3所述的方法或裝置,其特征在于,一旦處理指令進入所述第一流水線級(STG0),第一流水線級(STG0)在所述記分板(SCB)中的目的寄存器的地址上寫入零值,并且,如果相應(yīng)的流水線沒有停止,每個新的周期所有級的計數(shù)器將加1,所述級計數(shù)器涉及先前進入第一流水線級的處理指令,這樣當前流水線級計數(shù)值不斷更新,并且,一旦處理過的處理指令離開所述系列流水線級的最后流水線級(STGn-1),所述流水線級計數(shù)值就會被設(shè)置為不再增加的最終值(n)。
5.如權(quán)利要求1至4之一所述的方法或裝置,其特征在于,所述流水線級系列,除了第一(STG0)和最后(STGn-1)流水線級,將在一個或多個所述流水線級中有效的部分或中間的第二流水線處理操作數(shù)或結(jié)果提供給公共總線(FWDB),在適當?shù)臅r刻,通過一個或多個其它的所述流水線級,從所述公共總線(FWDB)存取部分或中間的第二流水線處理操作數(shù)或結(jié)果,而不對所述操作數(shù)/結(jié)果存儲器(REGF)進行存取。
全文摘要
處理器指令流水線是精簡指令集計算機(RISC)體系結(jié)構(gòu)的典型特征。從寄存器堆中讀出處理需要的操作數(shù)。在流水線處理中的寫后讀存取問題,能夠通過采用具有寄存器堆每個地址單獨入口的記分板來避免。一旦指令進入流水線,在這個特定指令的目的地址的地址設(shè)置標記。這個標記表明流水線內(nèi)的指令需要將其結(jié)果寫入相應(yīng)的寄存器地址。因此,只要設(shè)置了標記所述結(jié)果就不可用。顯然,指令處理之后,成功地將結(jié)果寫到寄存器堆。根據(jù)本發(fā)明,不僅將單個標記而且將流水線級的編號以及各指令的類型存儲在特定指令的相應(yīng)記分板地址中,所述流水線級的編號當前攜帶著需要將其結(jié)果寫入特定寄存器堆地址的指令。
文檔編號G06F9/38GK1534462SQ20041003876
公開日2004年10月6日 申請日期2004年3月29日 優(yōu)先權(quán)日2003年3月29日
發(fā)明者延斯·維滕貝格, 蒂姆·尼格邁爾, 尼格邁爾, 延斯 維滕貝格 申請人:湯姆森許可貿(mào)易公司