專利名稱:可減少管線延遲的處理器、管線與指令處理方法
技術(shù)領(lǐng)域:
本發(fā)明披露一種處理器管線(pipeline)的系統(tǒng)以及方法,特別是一種可減少處理器管線的延遲(stall)的系統(tǒng)與方法,以提高處理器效能。
背景技術(shù):
圖1為傳統(tǒng)處理電路10的方塊圖,其可整合至例如手持式電子裝置或計(jì)算機(jī)內(nèi)。處理電路10包含一處理器12、存儲(chǔ)器14與一些輸入/輸出(I/O)裝置16,且彼此間通過(guò)一總線接口18來(lái)聯(lián)系溝通。由于處理器12的效能與操作速率會(huì)影響處理電路10整個(gè)系統(tǒng)的電能消耗以及操作功能,因此電路設(shè)計(jì)者需要投入大量時(shí)間來(lái)改善處理器12的速率與效能,以消除造成效率不佳的肇因,特別是缺乏效率的處理器管線。
圖2顯示傳統(tǒng)處理器12的處理器管線20的方塊圖。于此圖示中,管線20具有五個(gè)階段,包含一擷取階段(fetchs tage)22、一譯碼階段(decodestage)24、一執(zhí)行階段(execute stage)26、一存儲(chǔ)器存取階段(memoryaccess stage)28與一寫回階段(write-back stage)30。處理器管線20的結(jié)構(gòu)可允許五個(gè)指令同時(shí)執(zhí)行,而運(yùn)作方法近似于裝配線(assembly line)。例如,當(dāng)擷取階段22擷取一指令時(shí),譯碼階段24則是對(duì)先前擷取的指令進(jìn)行譯碼。處理器管線20的每一階段皆可對(duì)一指令執(zhí)行該階段預(yù)期達(dá)成的工作,接著將指令傳送至下一階段,再自前一階段接收另一指令,依此類推。藉此方式,這些階段得以對(duì)多個(gè)指令執(zhí)行的不同功能,使得管線20整體上可同時(shí)執(zhí)行多個(gè)指令;相對(duì)于每次僅操作單一指令的處理器而言,此種處理器管線具有更大的時(shí)間效益。此外,處理器管線20可包含各種適當(dāng)?shù)碾A段數(shù)量。有些處理器僅具有簡(jiǎn)單的四階段管線構(gòu)造,而有些處理器則可能具有多達(dá)二十個(gè)階段的管線結(jié)構(gòu)。一般而言,處理器管線主要包含至少以下階段一擷取階段、一譯碼階段、一執(zhí)行階段、一存儲(chǔ)器存取階段與一寫回階段,或是這些主要階段的變化型態(tài)。
從電路設(shè)計(jì)的另一角度來(lái)看,處理器管線20具有操作“模式”。操作模式一般包含一標(biāo)準(zhǔn)模式以及一些中斷模式(或標(biāo)準(zhǔn)模式以外的例外模式)。處理器可于一般的狀態(tài)下使用標(biāo)準(zhǔn)模式,但也可根據(jù)程序代碼的指令或基于處理器的狀態(tài),而切換至其它的例外模式。
再者,根據(jù)所選擇的模式,處理器管線20于處理期間使用一些可供存取的“寄存器”以儲(chǔ)存數(shù)據(jù)、指令與/或地址。有些寄存器的使用不必考慮操作模式,但有些寄存器則為特定的操作模式所保留使用。由于寄存器的使用系根據(jù)不同的操作模式,因此當(dāng)模式變更時(shí),某一模式所使用的寄存器就可能變成無(wú)法使用。例如,譯碼階段24可能譯碼到一用于變更模式的指令,但其僅能檢測(cè)出模式會(huì)發(fā)生變更,而不能得知變更后的新模式為何。譯碼階段24將譯碼后的模式變更指令傳遞至執(zhí)行階段26,再經(jīng)執(zhí)行階段26執(zhí)行該指令,才真正的有效地變更至新模式。執(zhí)行階段26會(huì)送出一“exec_mode”訊號(hào)(用以表示新模式)至譯碼階段24,以使這兩個(gè)階段進(jìn)入同一模式,且使用相同的寄存器。然而,于此情況下仍有一時(shí)鐘周期的時(shí)間,譯碼階段24尚使用舊模式處理接續(xù)的新指令,而未與執(zhí)行階段26同步進(jìn)入新模式。如果新指令所使用的寄存器在前一模式中無(wú)法存取(或相反的情形),則發(fā)生模式錯(cuò)誤。因此,電路設(shè)計(jì)者必須放置額外的邏輯電路與/或硬件于處理器管線20中,以避免發(fā)生模式錯(cuò)誤。一般的作法是在管線中產(chǎn)生一延遲狀態(tài)(stall condition),直到模式變更指令已于執(zhí)行階段進(jìn)行處理,且其它階段(從譯碼階段至執(zhí)行階段)也已得知新模式。
然而,并非所有的模式變更皆會(huì)使用到不同的寄存器。亦極有可能于模式變更時(shí),并不需要使用到無(wú)法存取的寄存器。另外,還有可能于模式變更時(shí),不需要使用到新的寄存器。由于傳統(tǒng)的處理器管線一檢測(cè)到模式變更,即會(huì)產(chǎn)生管線延遲,因此常造成處理器管線許多不必要延遲。為解決上述的缺點(diǎn),亟需提供一種于模式變更時(shí),可以檢測(cè)是否需要使用到無(wú)法存取的寄存器。藉由加入可檢測(cè)模式錯(cuò)誤的檢測(cè)電路,則可以減少不必要的延遲。
發(fā)明內(nèi)容
本發(fā)明披露一種適用于處理器管線,以減少管線中非必要延遲的系統(tǒng)及方法。于本發(fā)明的處理器管線的一實(shí)施例中,其包含一擷取階段、一譯碼階段以及一執(zhí)行階段。擷取階段系用以擷取將于處理器管線中進(jìn)行處理的指令;譯碼階段用以對(duì)擷取來(lái)的指令進(jìn)行譯碼;執(zhí)行階段則用以執(zhí)行譯碼后的指令。其中該譯碼階段在對(duì)指令進(jìn)行譯碼之前,將指令儲(chǔ)存于一暫時(shí)緩沖器。
處理器管線可包含一譯碼階段,當(dāng)執(zhí)行階段檢測(cè)到因處理器管線的操作模式變更所導(dǎo)致的錯(cuò)誤(error)發(fā)生時(shí),譯碼階段即對(duì)擷取階段進(jìn)行延遲。當(dāng)現(xiàn)行操作模式的一個(gè)或多個(gè)寄存器于新操作模式中被判定為無(wú)法存取時(shí),則執(zhí)行階段即檢測(cè)其為錯(cuò)誤。
于本發(fā)明的另一實(shí)施例,披露了一種包含處理器管線的處理器,該處理器管線包含至少一譯碼階段及一執(zhí)行階段。處理器還包含一儲(chǔ)存模塊,連通于譯碼階段,用以暫時(shí)儲(chǔ)存指令。在此實(shí)施例中,譯碼階段將一第一指令儲(chǔ)存于儲(chǔ)存模塊,且對(duì)第一指令進(jìn)行譯碼。而處理器管線即使在操作模式改變被檢測(cè)到時(shí),仍可無(wú)延遲地處理多個(gè)指令。
本發(fā)明的又一實(shí)施例披露了一種可減少管線延遲的處理器管線的指令處理方法,其可包含譯碼一處理器管線的操作模式變更指令;以及儲(chǔ)存至少一個(gè)接續(xù)于模式變更指令之后的指令。此外,此方法還包含檢測(cè)操作模式變更指令是否造成一模式變更錯(cuò)誤(mode change error),延遲譯碼接續(xù)于于模式變更指令之后的至少一指令。然而,當(dāng)檢測(cè)到模式變更錯(cuò)誤時(shí),本發(fā)明方法還包含延遲一譯碼階段之前的先前階段;以及對(duì)至少一個(gè)已儲(chǔ)存的指令進(jìn)行譯碼。
下面的實(shí)施方式的詳細(xì)說(shuō)明及相關(guān)附圖可使本領(lǐng)域的技術(shù)人員更為了解本發(fā)明系統(tǒng)、方法、特征及其優(yōu)點(diǎn),其屬于本發(fā)明說(shuō)明書的一部份并受到權(quán)利要求的保護(hù)。
圖1顯示傳統(tǒng)處理系統(tǒng)的方塊圖。
圖2顯示傳統(tǒng)處理系統(tǒng)的管線方塊圖。
圖3顯示能防止模式變更錯(cuò)誤的9個(gè)階段處理器管線的具體實(shí)施例方塊圖。
圖4A-4D顯示流經(jīng)圖3處理器管線的指令流程。
圖5顯示具有9個(gè)階段處理器管線的實(shí)施例方塊圖。
圖6顯示圖5的解碼階段的實(shí)施例方塊圖。
圖7顯示圖5的執(zhí)行階段的實(shí)施例方塊圖。
圖8A-8D顯示圖5的處理器管線的指令流程,在此例示中模式改變未造成模式錯(cuò)誤。
圖9A-9F顯示圖5的處理器管線的指令流程,在此例示中模式改變?cè)斐闪四J藉e(cuò)誤。
附圖符號(hào)說(shuō)明10處理電路12處理器14存儲(chǔ)器16輸入/輸出(I/O)裝置18總線接口20處理器管線22擷取階段24解碼階段26執(zhí)行階段28存儲(chǔ)器存取階段30寫回階段32處理器管線34指令地址產(chǎn)生階段36指令擷取階段38指令擷取隊(duì)列階段40解碼階段42寄存器數(shù)據(jù)存取階段44執(zhí)行階段46第一數(shù)據(jù)存取階段48第二數(shù)據(jù)存取階段50除役階段60處理器管線62指令地址產(chǎn)生階段64指令擷取階段66指令擷取隊(duì)列階段68解碼階段
70寄存器數(shù)據(jù)存取階段72執(zhí)行階段74第一數(shù)據(jù)存取階段76第二數(shù)據(jù)存取階段78除役階段80緩沖器86通訊線路88通訊線路90指令轉(zhuǎn)換模塊92控制模塊94譯碼模塊96執(zhí)行模塊98模式處理模塊100模式/寄存器表具體實(shí)施方式
圖3顯示處理器管線32的一實(shí)施例的方塊圖,其包含有9個(gè)階段。圖3所示的管線32的階段包含一“指令地址產(chǎn)生”(instruction addressgeneration,IAG)階段34、一“指令擷取”(instruction fetch,IF)階段36、一“指令擷取隊(duì)列”(instruction fetch queue,IFQ)階段38、一“解碼”(decode,DEC)階段40、一“寄存器數(shù)據(jù)存取”(register fileaccess,RFA)階段42、一“執(zhí)行”(execute,EXE)階段44、一“第一數(shù)據(jù)存取”dataaccess 1,DA1)階段46、一“第二數(shù)據(jù)存取”(data access 2,DA2)階段48與一“除役”(retirement,RTR)階段50。然而,該處理器管線32也可包含更多或更少的階段。再者,各階段名稱與功能可以隨著需求不同而改變。本發(fā)明主要是關(guān)于處理器管線中的譯碼階段以及執(zhí)行階段(例如譯碼階段40以及執(zhí)行階段44),亦可以應(yīng)用于其它具備譯碼階段以及執(zhí)行階段(或其它類似功能階段)的處理器管線的實(shí)施例,或依據(jù)本發(fā)明的精神所為的變形與修改。
有些精簡(jiǎn)指令集計(jì)算機(jī)(reduced instruction set computer,RISC)處理器使用不同模式以管理標(biāo)準(zhǔn)模式的例外(exception)操作。例如,當(dāng)一指令呼叫中斷時(shí),處理器停止正規(guī)程序的運(yùn)作以服務(wù)該中斷,其操作模式則自一標(biāo)準(zhǔn)操作模式切換至中斷模式。在中斷模式期間,該處理器將正規(guī)程序的下一個(gè)地址儲(chǔ)存于一“連結(jié)”(link)寄存器,當(dāng)中斷處理完成時(shí),處理器會(huì)回到該地址。使用者模式(如標(biāo)準(zhǔn)操作模式)以及用以服務(wù)此中斷的中斷模式所共享的寄存器可儲(chǔ)存于存儲(chǔ)器內(nèi),其起始位置是由一“堆棧(Stack)寄存器”所決定。其它的例外處理模式也可使用相同的程序。根據(jù)此種作法,每個(gè)例外處理模式需用到兩個(gè)專用的寄存器以完成返回先前的標(biāo)準(zhǔn)操作模式。
于起始階段34、36及38之后,一指令進(jìn)入譯碼(DEC)階段40、寄存器數(shù)據(jù)存取(RFA)階段42、執(zhí)行(EXE)階段44、第一數(shù)據(jù)存取(DA1)階段46、第二數(shù)據(jù)存取(DA2)階段48與除役(RTR)階段50,這些階段可以存取一些寄存器(未顯示)。于一實(shí)施例中,管線32可以存取三十二個(gè)寄存器,舉例而言,其中十六個(gè)寄存器可被指定為一般用途寄存器,至于其它的十六個(gè)寄存器則使用于處理器的不同操作模式期間。寄存器群組的使用是依據(jù)處理器管線32的操作模式而決定。于此實(shí)施例中,操作模式包含一“使用者(user)”模式、“系統(tǒng)(system)”模式、“管理者”(supervisor,SVC)模式、“放棄”(abort,ABT)模式、“未定義”(undefined,UND)模式、“中斷請(qǐng)求”(interrupt request,IRQ)模式與“快速中斷請(qǐng)求”(fast interruptrequest,F(xiàn)IQ)模式等。使用者模式為一般的標(biāo)準(zhǔn)操作模式,中斷請(qǐng)求模式則為標(biāo)準(zhǔn)中斷模式。此外,根據(jù)特殊的處理器設(shè)計(jì),也可以使用其它型式的模式(例如各種的中斷模式)。
處理器可指定寄存器(例如R0-R15)同時(shí)使用于使用者模式與系統(tǒng)模式。由于使用者模式以及系統(tǒng)模式共享相同的寄存器,因此在這兩種模式中作切換并不會(huì)變更寄存器的可存取性。于“例外”模式時(shí)(例如管理者(SVC)模式、放棄(ABT)模式、未定義(UND)模式、中斷請(qǐng)求(IRQ)模式),盡管大部份的寄存器(例如R0-R12以及R15)可以共享,然而其中一部份的寄存器卻無(wú)法使用。雖然于使用者模式以及系統(tǒng)模式時(shí)可共享R13與R14,然而于管理者(SVC)模式時(shí),是存取額外的R13_svc與R14_svc寄存器。于其它實(shí)施例中還有類似的情形,例如放棄(ABT)模式可存取R13_abt與R14_abt寄存器、未定義(UND)模式可存取R13_und與R14_und寄存器、中斷請(qǐng)求(IRQ)模式可存取R13_irq與R14_irq寄存器。就此觀點(diǎn)而言,十六個(gè)寄存器當(dāng)中僅有兩個(gè)與使用者模式或系統(tǒng)模式不同,其它的十四個(gè)寄存器則不受模式變更的影響。
至于快速中斷請(qǐng)求模式(FIQ),則使用稍微不同的方式。快速中斷請(qǐng)求模式除了可與所有模式共享存取R0-R7與R15之外,也存取額外的R8_fiq至R14_fiq寄存器,而非R8至R14。寄存器R13_fiq與R14_fiq的使用類似于其它例外處理模式的方式。另外,五個(gè)額外的寄存器R8_fiq至R12_fiq則特別用于快速中斷請(qǐng)求模式中,以于進(jìn)行不需要自外部存儲(chǔ)器讀寫的快速數(shù)據(jù)存取時(shí),節(jié)省使用者模式寄存器,以提供更快的中斷服務(wù)。同樣的,上述所提到的R13與R14寄存器也可當(dāng)作連結(jié)與堆棧寄存器使用。
如上面所提到,進(jìn)入管線32的指令可能為變更模式的指令。在此情況下,當(dāng)執(zhí)行階段44決定一新模式時(shí),譯碼階段40與寄存器數(shù)據(jù)存取階段42正在使用的某些寄存器很可能于新模式中無(wú)法使用。例如,若管線32正處于使用者模式,且寄存器R13包含有效的信息,此時(shí)若有一指令進(jìn)入管線32而使得模式變更(例如變更為管理者模式,其使用的寄存器群組不包含寄存器R13),則會(huì)產(chǎn)生模式錯(cuò)誤。在此例子中,當(dāng)模式變更為新模式后,寄存器R13無(wú)法被存取。如前所述,傳統(tǒng)作法系使用延遲來(lái)解決上述問(wèn)題,但是卻因此而阻擋了新指令的進(jìn)入,一直等到譯碼階段及執(zhí)行階段進(jìn)入相同的模式為止。在此情況下,因使用的寄存器不同而導(dǎo)致的錯(cuò)誤,其發(fā)生的機(jī)率非常小。
再次參閱圖3,執(zhí)行階段44會(huì)送出“執(zhí)行模式(exe_mode)”訊號(hào)至譯碼階段40,以指示執(zhí)行階段44的模式為何。當(dāng)譯碼階段40檢測(cè)到變更模式的指令后,會(huì)傳送一“延遲”(stall)訊號(hào)至指令地址產(chǎn)生(IAG)階段、指令擷取(IF)階段、與指令擷取隊(duì)列(IFQ)階段,使這些階段暫時(shí)等待,直到模式變更指令自譯碼階段40進(jìn)入執(zhí)行階段44以決定該新模式。在本發(fā)明不同的實(shí)施例中,上述的原理可應(yīng)用于不同階段架構(gòu)的系統(tǒng)。例如,譯碼階段40可傳送延遲訊號(hào)至譯碼階段40前面的任一或全部階段。
圖4A-4D顯示流經(jīng)圖3的處理器管線32的指令流程。該些指令分別標(biāo)示為n、n+1、n+2,等等。在此例中,指令n已到達(dá)管線32的末端除役(RTR)階段50,而新指令n+8由指令地址產(chǎn)生(IAG)階段34所接收。于圖4A中,當(dāng)一模式變更指令,例如指令n+5由譯碼階段40所接收,譯碼階段40會(huì)檢測(cè)是否有模式錯(cuò)誤產(chǎn)生。如果有的話,譯碼階段40會(huì)傳送一延遲訊號(hào)至先前的階段(如指令地址產(chǎn)生階段、指令擷取1階段與指令擷取隊(duì)列階段),使得這些階段于下個(gè)時(shí)鐘周期產(chǎn)生延遲(如圖4B所示)。因此,指令n+8、n+7與n+6仍分別停留在指令地址產(chǎn)生階段34、指令擷取1階段36與指令擷取隊(duì)列階段38中。同時(shí),譯碼階段40產(chǎn)生一“無(wú)執(zhí)行”(no operation,nop)訊號(hào),用以傳遞于管線32中。此種無(wú)執(zhí)行(nop)訊號(hào)又稱為管線的氣泡(bubble),其并未攜帶任何有效指令,因此會(huì)被管線32后面各階段舍棄或忽略。
于圖4C,解碼階段40于第二周期再次延遲先前的階段,并產(chǎn)生另一無(wú)執(zhí)行訊號(hào)。另外,執(zhí)行階段44接收n+5指令以檢測(cè)新模式并執(zhí)行變更。之后,執(zhí)行階段44傳送執(zhí)行模式(exe_mode)訊號(hào)至譯碼階段40以指示新模式。此時(shí),譯碼階段40將其本身設(shè)定為執(zhí)行模式訊號(hào)所指示的模式。接著,移除延遲訊號(hào)(如圖4D所示),而前面各階段則持續(xù)處理更多的指令。由此例可得知,管線因嵌入二個(gè)無(wú)執(zhí)行訊號(hào)而使得處理器延遲或減速。延遲周期的數(shù)目取決于從譯碼階段40至執(zhí)行階段44其間的階段數(shù)目(包括譯碼階段40以及介于譯碼階段40及執(zhí)行階段44之間的任一中間階段)。在此例子中,由于譯碼階段40至執(zhí)行階段44之間的階段數(shù)目為二,所以管線總共延遲兩個(gè)時(shí)鐘周期。藉由圖3的實(shí)施例可知,當(dāng)檢測(cè)到模式變更時(shí)即嵌入延遲的方式,可有效地降低因寄存器無(wú)法存取所造成的模式錯(cuò)誤機(jī)率。
圖5顯示另一實(shí)施例的處理器管線60的方塊圖,其可用以減少延遲數(shù)量。于此實(shí)施例中,處理器管線60包含一指令地址產(chǎn)生(IAG)階段62、一指令擷取(IF)階段64、一指令擷取隊(duì)列(IFQ)階段66、一解碼(DEC)階段68、一寄存器數(shù)據(jù)存取(RFA)階段70、一執(zhí)行(EXE)階段72、一第一數(shù)據(jù)存取(DA1)階段74、一第二數(shù)據(jù)存取(DA2)階段76及一除役(RTR)階段78,與圖3實(shí)施例的階段結(jié)構(gòu)相似。不過(guò),譯碼階段68及執(zhí)行階段72包含額外電路和/或邏輯電路(將于下面詳述),用以減少管線60的延遲數(shù)目。此外,該處理器管線60與圖3不同之處還包含一緩沖器80,用以儲(chǔ)存譯碼階段68的部份指令。緩沖器80可設(shè)置為一先進(jìn)先出(first-in first-out,F(xiàn)IFO)儲(chǔ)存組件。另外,緩沖器80可儲(chǔ)存兩個(gè)64位的項(xiàng)目(entry),于每一個(gè)項(xiàng)目中,32位用以儲(chǔ)存指令,另外的32位則用以儲(chǔ)存地址信息。于其它實(shí)施例中,緩沖器80可儲(chǔ)存的項(xiàng)目數(shù)目決定于譯碼階段至執(zhí)行階段的階段數(shù)目(包括譯碼階段以及任一中間階段)。
譯碼階段68可傳送指令并儲(chǔ)存于緩沖器80中。于此實(shí)施例中,由于緩沖器80只能儲(chǔ)存兩個(gè)指令,當(dāng)?shù)谌齻€(gè)指令寫入至緩沖器80時(shí),沒(méi)有用途的最舊一筆指令會(huì)被最新的指令所取代。依此種方式,緩沖器80可于需要時(shí)提供最新兩個(gè)指令。另一種作法是,譯碼階段68只有在碰到變更模式指令之后,才會(huì)儲(chǔ)存復(fù)制兩個(gè)指令(假設(shè)譯碼階段至執(zhí)行階段之間具有兩階段)。于本實(shí)施例中,由于指令n+5為模式變更指令,因此指令n+6與n+7被存入緩沖器80中。
譯碼階段68可藉由通訊線路82傳送”延遲”訊號(hào)至指令地址產(chǎn)生(IAG)階段62、指令擷取(IF)階段64以及指令擷取隊(duì)列(IFQ)階段66。執(zhí)行階段72可藉由通訊線路84傳送“模式清除”(mode_flush)訊號(hào)至譯碼(DEC)階段68以及寄存器數(shù)據(jù)存取(RFA)階段70。執(zhí)行階段72還可藉由通訊線路86傳送“執(zhí)行模式(exe_mode)”訊號(hào),及藉由通訊線路88傳送“模式錯(cuò)誤(mode_error)”訊號(hào)至譯碼階段68。
于操作時(shí),處理器管線60可以檢測(cè)到模式的變更。管線60也能檢測(cè)到模式改變是否會(huì)導(dǎo)致模式改變錯(cuò)誤(mode change error),例如于舊模式所使用的寄存器,于新模式中無(wú)法存取。若未檢測(cè)到模式變更錯(cuò)誤,則處理器管線60不會(huì)中斷或延遲指令流程,允許指令正常的執(zhí)行。若檢測(cè)到模式變更錯(cuò)誤,則處理器管線60會(huì)延遲指令流程,并嵌入無(wú)執(zhí)行訊號(hào)。因此,相較于先前作法,處理器管線60于檢測(cè)到模式變更時(shí)并不會(huì)自動(dòng)的延遲,僅有在檢測(cè)到模式變更錯(cuò)誤時(shí)才會(huì)進(jìn)行延遲。
處理器管線60自譯碼階段68儲(chǔ)存指令到緩沖器80,并繼續(xù)進(jìn)行一般的流程。譯碼階段68可將每個(gè)指令儲(chǔ)存至緩沖器80,或者僅儲(chǔ)存接續(xù)在模式變更指令之后的指令,直到譯碼階段及執(zhí)行階段的模式相同為止。若執(zhí)行階段72檢測(cè)到因模式變更所產(chǎn)生的錯(cuò)誤,則執(zhí)行階段72隨即傳送模式錯(cuò)誤(mode_error)訊號(hào)至譯碼階段68,以示意模式錯(cuò)誤的產(chǎn)生。根據(jù)模式錯(cuò)誤訊號(hào),譯碼階段68延遲先前階段。另外,執(zhí)行階段72傳送模式清除(mode_flush)訊號(hào)至譯碼階段68及寄存器數(shù)據(jù)存取階段70,用以清除這些階段的內(nèi)容,并嵌入無(wú)執(zhí)行訊號(hào)。之所以要進(jìn)行清除功能,是因?yàn)楣芫€60于檢測(cè)到模式變更后,仍然會(huì)繼續(xù)進(jìn)行并無(wú)延遲。另一個(gè)原因是,執(zhí)行階段可判斷譯碼階段68及寄存器數(shù)據(jù)存取階段70是否根據(jù)舊模式的無(wú)效處理指令來(lái)持續(xù)進(jìn)行。當(dāng)模式變更指令進(jìn)入執(zhí)行階段72并開(kāi)始執(zhí)行之后,緩沖器80于無(wú)執(zhí)行訊號(hào)之后,提供其所儲(chǔ)存的指令給譯碼階段68,使這些儲(chǔ)存的指令得以根據(jù)新模式及相對(duì)應(yīng)寄存器,得到適當(dāng)?shù)膱?zhí)行。藉由此系統(tǒng),當(dāng)錯(cuò)誤發(fā)生時(shí),會(huì)有相同數(shù)量的無(wú)執(zhí)行訊號(hào)被嵌入。然而如前所述,當(dāng)模式發(fā)生變更但未檢測(cè)到模式錯(cuò)誤時(shí),則指令的執(zhí)行是不需要加入延遲與無(wú)執(zhí)行訊號(hào)的。因此,不會(huì)有無(wú)謂的延遲(或氣泡)被嵌入管線60中。
圖6顯示圖5的解碼階段68的實(shí)施例方塊圖。在本實(shí)施例中,譯碼階段68包含一指令轉(zhuǎn)換模塊90、一控制模塊92及一譯碼模塊94。指令轉(zhuǎn)換模塊90自先前階段(例如指令擷取隊(duì)列階段66)接收指令,并自緩沖器80進(jìn)行讀寫。指令轉(zhuǎn)換模塊90所包含的邏輯電路可選擇在管線60無(wú)延遲發(fā)生時(shí),自指令擷取隊(duì)列階段66接收指令;若管線60有延遲發(fā)生時(shí),則至緩沖器80擷取指令。指令轉(zhuǎn)換模塊90隨即將所選擇的指令送至譯碼模塊94。譯碼模塊94可提供標(biāo)準(zhǔn)譯碼功能以譯碼現(xiàn)階段的指令。另外,當(dāng)檢測(cè)到變更模式指令時(shí),譯碼模塊94會(huì)傳送訊號(hào)至控制模塊92,以指示模式的變更,并且將模式變更指令的相關(guān)訊息傳送至下一階段(例如寄存器數(shù)據(jù)存取階段70)。
控制模塊92藉由通訊線路86與88自執(zhí)行階段72接收訊號(hào),以及自譯碼模塊94接收一訊號(hào)以指示模式變更指令的檢測(cè)。當(dāng)控制模塊92自譯碼模塊94接收到模式變更的指示后,控制模塊92將示意指令轉(zhuǎn)換模塊90儲(chǔ)存接續(xù)的下兩個(gè)指令于緩沖器80中。上述的功能為選擇性的,亦即,指令轉(zhuǎn)換模塊90可自行將每個(gè)指令儲(chǔ)存于緩沖器80中。不管使用哪一種方式,當(dāng)這些指令需要使用時(shí),緩沖器80將儲(chǔ)存至少兩個(gè)來(lái)自譯碼階段68的指令。在本實(shí)施例中,控制模塊92還包含邏輯或電路用以檢測(cè)執(zhí)行階段72所判定的模式,如執(zhí)行模式訊號(hào)所示,是否與譯碼模塊94的現(xiàn)階段模式相同。如前所述,緩沖器80可根據(jù)譯碼階段至執(zhí)行階段間的階段數(shù)目(包含譯碼階段以及任何中間階段),儲(chǔ)存較多或較少的項(xiàng)目。
當(dāng)接收到來(lái)自執(zhí)行階段72的模式錯(cuò)誤(mode_error)訊號(hào),指示已產(chǎn)生模式錯(cuò)誤時(shí),控制模塊92命令譯碼模塊94以無(wú)執(zhí)行(nop)訊號(hào)取代目前指令,以傳送至下一階段。當(dāng)先前階段被延遲時(shí),控制模塊92還進(jìn)一步命令指令轉(zhuǎn)換模塊90在下兩個(gè)周期自緩沖器80選擇或讀取指令,以傳送至譯碼模塊94。藉此,事先儲(chǔ)存的指令即可依據(jù)新檢測(cè)到的模式交由譯碼模塊94來(lái)處理。當(dāng)指令自緩沖器80中讀取時(shí),控制模塊92命令指令轉(zhuǎn)換模塊90自緩沖器80選擇訊號(hào),并且傳送延遲訊號(hào)給譯碼階段之前的各階段。
圖7顯示圖5的執(zhí)行階段72的實(shí)施例方塊圖。在本實(shí)施例中,執(zhí)行階段72包含一執(zhí)行模塊96、一模式處理模塊98及一模式/寄存器表100。執(zhí)行模塊96用以提供標(biāo)準(zhǔn)執(zhí)行功能,以執(zhí)行現(xiàn)階段指令,并將執(zhí)行過(guò)的指令傳送至下一階段(例如第一數(shù)據(jù)存取階段74),已執(zhí)行的指令同時(shí)也被傳送至模式處理模塊98。若該指令為模式改變指令,則模式處理模塊98即會(huì)據(jù)以反應(yīng)。模式處理模塊98儲(chǔ)存先前時(shí)鐘周期的模式,并將新模式與先前模式作比較。此外,模式處理模塊98可使用窗體(例如模式/寄存器表100)以及與譯碼階段68、寄存器數(shù)據(jù)存取階段70目前所使用寄存器相關(guān)的訊息,來(lái)判斷此模式改變是否可能造成模式錯(cuò)誤,此模式錯(cuò)誤系基于寄存器的可存取性的變更所造成的沖突。模式/寄存器表100包含各個(gè)模式以及每一模式下寄存器的可存取性之間的關(guān)連性。若模式處理模塊98判定可能因模式變更而產(chǎn)生錯(cuò)誤,則隨即傳送模式錯(cuò)誤(mode_error)訊號(hào)至譯碼階段68。此外,若有模式錯(cuò)誤時(shí),模式處理模塊98傳送模式清除(mode_flush)訊號(hào)至譯碼階段到執(zhí)行階段之間的各階段,用以清除這些階段的指令。于此例中,由于被清除的信息系基于模式改變不會(huì)造成寄存器存取性沖突的假設(shè),被清除的階段會(huì)嵌入無(wú)執(zhí)行訊號(hào)。如上述圖6所述,譯碼階段68接收模式錯(cuò)誤訊號(hào)以及模式清除訊號(hào)以處理錯(cuò)誤狀態(tài)。關(guān)于模式錯(cuò)誤期間所進(jìn)行的處理將于圖9中加以詳述。
圖8A-8D顯示圖5的處理器管線60的指令流程,在此實(shí)施例中模式改變未造成模式錯(cuò)誤。于圖8A中,譯碼階段68檢測(cè)到指令n+5,其欲變更管線60的操作模式。圖8B顯示于下一個(gè)時(shí)鐘周期中,譯碼階段68自指令擷取隊(duì)列階段66接收指令n+6,并將此指令儲(chǔ)存于緩沖器80。此時(shí),該譯碼階段68未延遲先前階段,而是如常處理指令n+6。于圖8C中,譯碼階段68儲(chǔ)存指令n+7于緩沖器80。在此時(shí)鐘周期內(nèi),執(zhí)行階段72檢測(cè)模式改變是否會(huì)造成一個(gè)或多個(gè)寄存器無(wú)法存取的模式錯(cuò)誤。于圖8的實(shí)施例中,執(zhí)行階段72判定模式變更并未造成模式錯(cuò)誤,因此允許指令通過(guò)管線而不需延遲(圖8D)。
值得注意的是,管線60基本上是假設(shè)模式變更并不會(huì)造成模式錯(cuò)誤,因而流程可以持續(xù)進(jìn)行而不需加入延遲。由于大多數(shù)的寄存器于某一模式下的使用方式與在另一模式時(shí)是相同的,因此當(dāng)發(fā)生模式變更時(shí)很可能不會(huì)發(fā)生錯(cuò)誤或沖突。然而,為了以防萬(wàn)一,管線60仍然將指令儲(chǔ)存于緩沖器80中,避免當(dāng)上述假設(shè)錯(cuò)誤,模式變更造成模式錯(cuò)誤。即使檢測(cè)到模式錯(cuò)誤時(shí),管線60可回復(fù)指令,并以先前的解決方法使用相同數(shù)量的延遲。關(guān)于自緩沖器80回復(fù)指令將詳述于圖9A-9F。
圖9A-9F顯示圖5的處理器管線60的指令流程,在此實(shí)施例中模式改變?cè)斐闪四J藉e(cuò)誤,亦即管線60的操作模式變更時(shí),會(huì)造成部份現(xiàn)行的寄存器無(wú)法存取。圖9A類似于圖8A,譯碼階段68接收到模式變更指令n+5。圖9B類似于圖8B,該緩沖器80儲(chǔ)存來(lái)自譯碼階段68的指令n+6,且指令流程持續(xù)無(wú)須延遲。于圖9C中,緩沖器80儲(chǔ)存指令n+7,且執(zhí)行階段72檢測(cè)到因模式變更所造成的錯(cuò)誤。于此實(shí)施例中,執(zhí)行階段72藉由通訊線路88傳送模式錯(cuò)誤(mode_error)訊號(hào)以指示有錯(cuò)誤發(fā)生。針對(duì)此指示,管線60即進(jìn)入一回復(fù)(recovery)狀態(tài),用以將譯碼階段68及寄存器數(shù)據(jù)存取階段70因寄存器新舊模式?jīng)_突而不當(dāng)處理的指令予以回復(fù)。
當(dāng)執(zhí)行階段72檢測(cè)到模式變更指令n+5自一模式變更到另一模式而造成錯(cuò)誤時(shí),執(zhí)行階段72提供訊號(hào)至先前階段以回復(fù)管線60。執(zhí)行階段72使用模式清除(mode-flush)訊號(hào)來(lái)清除譯碼(DEC)階段以及寄存器數(shù)據(jù)存取(RFA)階段中的指令。由于指令n+7以及n+6已在這些階段中根據(jù)不正確的模式作了處理,因此模式清除(mode-flush)訊號(hào)指示譯碼階段與寄存器數(shù)據(jù)存取階段進(jìn)行指令清除,并以無(wú)執(zhí)行(nop)訊號(hào)來(lái)取代這些指令。執(zhí)行階段72也藉由通訊線路88傳送模式錯(cuò)誤(mode_error)訊號(hào)至譯碼階段68。此訊號(hào)命令譯碼階段68于下一個(gè)時(shí)鐘周期時(shí)對(duì)先前階段進(jìn)行延遲(第9D圖)。
于圖9D中,解碼階段68延遲先前階段,并且自緩沖器80接收指令n+6,而非從指令擷取隊(duì)列階段66接收新指令。據(jù)此可知,緩沖器80用以提供兩個(gè)周期前所儲(chǔ)存的指令n+6(根據(jù)先進(jìn)先出原則),接著譯碼階段68處理指令n+6,而前一周期的譯碼(DEC)階段、寄存器數(shù)據(jù)存取(RFA)階段的無(wú)執(zhí)行(nop)訊號(hào)則往下傳送。于圖9E中,解碼階段同樣地延遲先前階段,并自緩沖器80中接收指令n+7。此時(shí),管線60已經(jīng)回復(fù),且指令n+6以及n+7也根據(jù)新模式來(lái)進(jìn)行正確的處理。于圖9F中,該管線繼續(xù)進(jìn)行一般的運(yùn)作,且移除了延遲訊號(hào),以使指令地址產(chǎn)生(IAG)階段、指令擷取(IF)階段及指令擷取隊(duì)列(IFQ)階段得以處理新指令。
以上所述僅為本發(fā)明的實(shí)施例而已。其它未脫離發(fā)明所揭示的原則所完成的等效改變或修飾,均應(yīng)包含在本發(fā)明的權(quán)利要求的范圍內(nèi)。
權(quán)利要求
1.一種可減少延遲的處理器管線,包含一擷取階段,用以擷取將于該處理器管線中進(jìn)行處理的多個(gè)指令;一譯碼階段,用以譯碼所述指令;以及一執(zhí)行階段,用以執(zhí)行譯碼后的所述指令;其中該譯碼階段于譯碼所述指令之前,將所述指令儲(chǔ)存于一暫時(shí)緩沖器,該執(zhí)行階段檢測(cè)到因?yàn)樵撎幚砥鞴芫€的操作模式變更,使現(xiàn)行操作模式所使用的至少一個(gè)寄存器于新操作模式中被判定為無(wú)法存取而導(dǎo)致的一錯(cuò)誤發(fā)生時(shí),該譯碼階段對(duì)該擷取階段進(jìn)行延遲。
2.如權(quán)利要求1所述的處理器管線,還包含多個(gè)位于該譯碼階段前面的先前階段,其中該執(zhí)行階段檢測(cè)到該錯(cuò)誤時(shí),該譯碼階段延遲所述先前階段。
3.如權(quán)利要求1所述的處理器管線,其中該執(zhí)行階段檢測(cè)到因該處理器管線的操作模式變更而導(dǎo)致的該錯(cuò)誤時(shí),指示該譯碼階段產(chǎn)生一“無(wú)執(zhí)行”訊號(hào)。
4.如權(quán)利要求3所述的處理器管線,還包含至少一個(gè)位于該譯碼階段與該執(zhí)行階段之間的中間階段,其中該執(zhí)行階段檢測(cè)到該錯(cuò)誤時(shí),指示該譯碼階段與該執(zhí)行階段之間的該中間階段產(chǎn)生一無(wú)執(zhí)行訊號(hào)。
5.如權(quán)利要求1所述的處理器管線,其中該解碼階段對(duì)擷取自該擷取階段或該暫時(shí)緩沖器的該指令進(jìn)行譯碼。
6.如權(quán)利要求5所述的處理器管線,其中該解碼階段的所述先前階段被延遲時(shí),則該譯碼階段自該暫時(shí)緩沖器接收該指令。
7.如權(quán)利要求1所述的處理器管線,其中該操作模式變更指令未導(dǎo)致該錯(cuò)誤產(chǎn)生時(shí),則該處理器管線不作延遲繼續(xù)處理。
8.一種可減少管線延遲的處理器,包含一處理器管線,包含至少一譯碼階段與一執(zhí)行階段;以及一儲(chǔ)存裝置,連通于該譯碼階段,用以暫時(shí)儲(chǔ)存至少一指令;其中該譯碼階段將一第一指令儲(chǔ)存于該儲(chǔ)存裝置,且對(duì)該第一指令進(jìn)行譯碼,該處理器管線檢測(cè)到操作模式改變時(shí),仍可無(wú)延遲地處理多個(gè)指令。
9.如權(quán)利要求8所述的處理器,其中該處理器管線于操作模式改變未造成一寄存器于新模式下無(wú)法存取時(shí),無(wú)延遲地處理指令。
10.如權(quán)利要求8所述的處理器,其中該解碼階段包含一轉(zhuǎn)換裝置,用以轉(zhuǎn)換指令;一譯碼裝置,用以對(duì)指令進(jìn)行譯碼;以及一控制模塊;其中該轉(zhuǎn)換裝置選擇自該譯碼階段的先前階段或者自該儲(chǔ)存裝置接收指令以傳送該至譯碼裝置。
11.如權(quán)利要求8所述的處理器,其中該執(zhí)行階段包含一執(zhí)行裝置,用以執(zhí)行指令;一處理裝置,用以處理操作模式的狀態(tài);以及一寄存器裝置,用以儲(chǔ)存與操作模式和寄存器組之間關(guān)連性相關(guān)的訊息。
12.一種可減少管線延遲的指令處理方法,包含譯碼一操作模式變更指令;儲(chǔ)存接續(xù)于該操作模式變更指令之后的至少一個(gè)指令;以及檢測(cè)該操作模式變更指令是否造成一模式變更錯(cuò)誤;其中未檢測(cè)到該模式變更錯(cuò)誤時(shí),忽略已儲(chǔ)存的該指令,且無(wú)延遲地繼續(xù)譯碼指令。
13.如權(quán)利要求12所述的指令處理方法,還包含延遲譯碼接續(xù)于該操作模式變更指令之后的至少一指令。
14.如權(quán)利要求12所述的指令處理方法,還包含檢測(cè)到該模式變更錯(cuò)誤時(shí)延遲一解碼階段之前的一先前階段;以及對(duì)已儲(chǔ)存的該指令進(jìn)行譯碼。
15.如權(quán)利要求14所述的指令處理方法,其中該譯碼階段之前的該先前階段被延遲的周期數(shù)量相同于該譯碼階段至一執(zhí)行階段之間的階段數(shù)量。
全文摘要
一種處理器管線的指令處理系統(tǒng)及方法,用以減少延遲(stall)數(shù)量。在一實(shí)施例中,處理器管線包含一擷取階段,用以擷取指令并于處理器管線中進(jìn)行處理;一譯碼階段,用以對(duì)擷取來(lái)的指令進(jìn)行譯碼;及一執(zhí)行階段,用以執(zhí)行譯碼完的指令,其中該譯碼階段于執(zhí)行指令譯碼之前,可將指令儲(chǔ)存于一暫時(shí)緩沖器。藉此方式,當(dāng)執(zhí)行階段檢測(cè)到由于處理器管線的操作模式變更導(dǎo)致的錯(cuò)誤(error)發(fā)生時(shí),譯碼階段即對(duì)擷取階段進(jìn)行延遲。上述的錯(cuò)誤可能導(dǎo)致現(xiàn)行操作模式的一個(gè)或多個(gè)寄存器,于新操作模式中被判定為無(wú)法存取。
文檔編號(hào)G06F9/38GK101017431SQ200710084950
公開(kāi)日2007年8月15日 申請(qǐng)日期2007年2月16日 優(yōu)先權(quán)日2006年7月18日
發(fā)明者季諾·朱瑟弗維克 申請(qǐng)人:威盛電子股份有限公司