專利名稱:一種cpu中低開銷的支持精確異常模型的地址存儲方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種CPU中低開銷的支持精確異常模型的地址存儲方法。
背景技術(shù):
異常處理(包括指令異常和外部中斷)是處理器的一項重要技術(shù),在某些異常事件產(chǎn)生時,用來使處理器轉(zhuǎn)入對這些事件的處理。這些事件包括硬件錯誤,指令執(zhí)行錯誤,和用戶請求服務(wù)等等。異常處理能力是處理器的一項重要技術(shù)指標(biāo),它直接影響著處理器設(shè)計方案的可靠性和指令的運算性能?,F(xiàn)代CPU要求能及時響應(yīng)異常,并減小異常處理的開銷。異常處理的關(guān)鍵就是在異常發(fā)生時,保存CPU當(dāng)前運行指令的狀態(tài),在退出異常處理時恢復(fù)異常處理前的狀態(tài)。
現(xiàn)代CPU處理異常一般使用精確異常模型。精確異常模型的特征是指異常處理要保證指令的原子操作,并且不改變原來的指令流。為了做到這一點,異常在指令的邊界上被處理,即CPU在指令退休時響應(yīng)中斷,并保存退出異常處理時下一條被執(zhí)行的指令的地址。為了異常處理不影響CPU的性能,CPU在異常處理結(jié)束后要避免重復(fù)執(zhí)行以前的指令。異常服務(wù)返回的地址可能是響應(yīng)異常時被中斷的指令的地址,也可能是它的下一條指令的地址。因而在指令退休前,這兩個地址都需要提供,異常類型和被中斷的指令類型決定把哪個地址存儲在異常地址寄存器中。例如,如果異常事件是外部中斷服務(wù)請求,被中斷的指令將正常退休并改變CPU的狀態(tài),它的下一條指令的地址將被保存在異常地址寄存器中作為中斷返回時指令的入口;如果異常事件是由除以零的除法指令產(chǎn)生的,因為這條指令不能完成,它將異常退休但不改變CPU的狀態(tài)(即不改變寄存器的值),這條除法指令的地址將被保存在異常地址寄存器中,CPU從中斷服務(wù)程序返回時繼續(xù)執(zhí)行這條除法指令。
異常的產(chǎn)生是無法預(yù)測的,每一條指令都可能產(chǎn)生。一般為了實現(xiàn)精確異常模型,CPU需要把這兩個地址保存起來。隨著CPU流水線中發(fā)射指令的增多,同時存儲這兩個地址的物理開銷會增大,也增加了功耗。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種CPU中低開銷的支持精確異常模型的地址存儲方法。
它的實施步驟如下
1)在CPU的退休緩沖器中為每一條指令定義一個域存儲下一條指令的地址;2)在CPU的退休控制器中定義一個退休地址寄存器;3)在退休緩沖器中定義一個域記錄指令是否完成;4)非跳轉(zhuǎn)指令發(fā)射時,把它的下一條指令的地址寫入退休緩沖器相應(yīng)的域中;5)對于跳轉(zhuǎn)指令,在執(zhí)行階段,把它的下一條指令的地址寫入緩沖器相應(yīng)的域中;6)指令退休時,把退休緩沖器中指令地址轉(zhuǎn)移到退休地址寄存器中;7)CPU響應(yīng)異常時,選擇合適的地址送到CPU的異常處理單元。
本發(fā)明的優(yōu)點是電路的硬件開銷比較低,數(shù)據(jù)通道少,避免了為保存每條指令保存兩個地址而使用很多的寄存器和多路選擇器;控制電路比較簡單,異常被響應(yīng)時,CPU很容易存儲異常服務(wù)結(jié)束時返回的地址,保證了異常事件的快速響應(yīng)。
圖1顯示了簡化的支持精確異常模型的CPU結(jié)構(gòu);圖2顯示了存儲地址的流水線示意圖。
具體實施例方式
低開銷的支持精確模型的地址存儲方法。它的實施方法如下1)在CPU的退休緩沖器中,為緩沖器的每一個入口定義一個32位寬的寄存器(對32位寬的地址總線而言)保存指令的地址;2)在CPU的退休控制器中定義一個32位寬的寄存器用于存儲將退休的指令的地址;3)在退休緩沖器中定義一個域記錄指令是否完成;4)對于跳轉(zhuǎn)指令,在執(zhí)行階段,把它的下一條指令的地址寫入緩沖器相應(yīng)的域中;5)對于其它的指令,它的下一條指令的地址在譯碼的階段就可以確定,在指令發(fā)射時,把這個地址寫入退休緩沖器相應(yīng)的域中;6)指令退休時,把退休緩沖器中下一條指令的地址存儲到退休控制器的退休地址寄存器中;7)CPU響應(yīng)異常時,根據(jù)正在退休的指令是否完成決定是把退休指令的地址還是把它的下一條指令的地址存儲到異常地址寄存器中。
為了清楚地說明這種方法,我們將根據(jù)它的結(jié)構(gòu)圖解釋這種方法,這種方法對各類支持精確異常模型的CPU有通用性。
圖1顯示了一個簡要的CPU結(jié)構(gòu),各個部分的功能簡介如下1)取指單元負(fù)責(zé)從存儲器中取指令,交給譯碼和指令發(fā)射單元;2)譯碼和指令發(fā)射單元把取回來的指令進(jìn)行譯碼并決定什么時候發(fā)射和發(fā)射到那個功能單元,并在退休緩沖器中分配一個入口;3)功能單元負(fù)責(zé)執(zhí)行指令,常見的功能單元有算術(shù)邏輯運算單元,移位運算單元,乘除法運算單元,和跳轉(zhuǎn)指令處理單元等等;4)退休緩沖器負(fù)責(zé)記錄每一條發(fā)射了但還沒有退休的指令的信息,圖1中退休緩沖器有四個入口可以存放四條指令。entry_vld標(biāo)志這個入口是否分配給指令,complete標(biāo)志這個入口的指令是否完成了,next_pc則用于存放下一條指令的地址;5)退休控制器負(fù)責(zé)指令的退休操作和異常處理;6)CPU狀態(tài)控制器負(fù)責(zé)當(dāng)指令退休時更新CPU的狀態(tài)。
通常CPU采取流水線結(jié)構(gòu)的指令執(zhí)行方式。圖2顯示了圖1的CPU的指令流水線操作,其中,IF指令提取;DE指令譯碼和發(fā)射;EX指令運算;WB結(jié)果寫回。
下面將以這個結(jié)構(gòu)圖為主線詳細(xì)介紹支持精確異常模型的地址存儲方法。
本發(fā)明是在發(fā)射指令時把它的下一條指令的地址存儲在退休緩沖器中,而不存儲當(dāng)前被發(fā)射的指令的地址。如圖2中所示的指令1和指令2。
一條指令經(jīng)過譯碼后,下一條指令的地址由指令的類型決定。對于非跳轉(zhuǎn)指令,它的下一條指令的地址是當(dāng)前指令的地址加2(對16位指令集)或加4(對32位指令集);對于條件跳轉(zhuǎn)和一些絕對跳轉(zhuǎn)指令,它的下一條指令的地址只有在執(zhí)行階段才能確定的,在執(zhí)行階段這個地址被寫到退休緩沖器中。如圖2中所示的指令3。
當(dāng)指令退休時,在退休緩沖器中的下一條指令的地址存到退休地址寄存器中作為下一條指令的當(dāng)前地址。盡管下一條指令可能還沒有被發(fā)射,但當(dāng)前一條指令退休時,它的地址是確定的。除非異常事件發(fā)生,下一條指令是異常服務(wù)程序的第一條指令。當(dāng)這第一條指令被發(fā)射時,下一條指令的地址不僅要寫入退休緩沖器,它的地址也要寫入退休地址寄存器。這樣就保證了在任何一條指令退休時,它的地址和下一條指令的地址都提供了,CPU可以實現(xiàn)精確異常模型,減小了在指令發(fā)射時存儲兩個地址的物理開銷。如果在指令發(fā)射時退休緩沖器只存儲當(dāng)前指令的地址,那么退休控制器還要跟蹤下一條指令的入口標(biāo)簽,控制邏輯相對比較復(fù)雜,而且在數(shù)據(jù)通路上引入了更多的多路選擇器。
當(dāng)退休控制器捕捉到了異常事件時,如果正在退休的指令已經(jīng)完成了,那么它的下一條指令的地址被存入異常地址寄存器中;否則退休指令的地址被存入異常地址寄存器。CPU退出異常服務(wù)程序后,用異常地址寄存器的值作為下一條指令的地址進(jìn)行取指。
權(quán)利要求
1.一種CPU中低開銷的支持精確異常模型的地址存儲方法,其特征在于,它的步驟1)在CPU的退休緩沖器中為每一條指令定義一個域存儲下一條指令的地址;2)在CPU的退休控制器中定義一個退休地址寄存器;3)在退休緩沖器中定義一個域記錄指令是否完成;4)非跳轉(zhuǎn)指令發(fā)射時,把它的下一條指令的地址寫入退休緩沖器相應(yīng)的域中;5)對于跳轉(zhuǎn)指令,在執(zhí)行階段,把它的下一條指令的地址寫入緩沖器相應(yīng)的域中;6)指令退休時,把退休緩沖器中指令地址轉(zhuǎn)移到退休地址寄存器中;7)CPU響應(yīng)異常時,選擇合適的地址送到CPU的異常處理單元。
2.根據(jù)權(quán)利要求1所述的一種CPU中低開銷的支持精確異常模型的地址存儲方法,其特征在于所說退休緩沖器的每一個入口定義了一個32位寬的寄存器,它記錄了每一條發(fā)射的但沒有退休的指令的下一條指令的地址。
3.根據(jù)權(quán)利要求1所述的一種CPU中低開銷的支持精確異常模型的地址存儲方法,其特征在于所說退休控制器中定義一個32位寬的退休地址寄存器,它記錄了正在退休的指令的地址。
4.根據(jù)權(quán)利要求1所述的一種CPU中低開銷的支持精確異常模型的地址存儲方法,其特征在于所說所有的指令是按序發(fā)射,非序完成,在退休緩沖器中定義一個域記錄指令是否完成,以決定指令能否退休和異常響應(yīng)時控制異常地址的選擇。
5.根據(jù)權(quán)利要求1所述的一種CPU中低開銷的支持精確異常模型的地址存儲方法,其特征在于對于非跳轉(zhuǎn)指令,當(dāng)它們發(fā)射時,它的下一條指令的地址是可以確定的,并被寫入退休緩沖器相應(yīng)的域中。
6.根據(jù)權(quán)利要求1所述的一種CPU中低開銷的支持精確異常模型的地址存儲方法,其特征在于對于跳轉(zhuǎn)指令,它的下一條指令的地址在執(zhí)行階段才能確定。這一類指令將在執(zhí)行階段向退休緩沖器請求寫入下一條指令的地址。
7.根據(jù)權(quán)利要求1所述的一種CPU中低開銷的支持精確異常模型的地址存儲方法,其特征在于所有退休的指令,它的下一條指令的地址將寫入退休地址寄存器中作為下一條將要退休的指令的地址。如果退休緩沖器是空的,將發(fā)射指令的地址直接存儲到退休地址寄存器中。
8.根據(jù)權(quán)利要求1所述的一種CPU中低開銷的支持精確異常模型的地址存儲方法,其特征在于響應(yīng)異常時,若退休的指令完成了,下一條指令的地址寫入異常地址寄存器;否則退休的指令的地址寫入異常地址寄存器。
全文摘要
本發(fā)明公開了一種設(shè)計在CPU里支持精確異常模型的指令地址存儲的方法。這種方法的特點是當(dāng)指令發(fā)射時只保存它的下一條指令的地址,并通過一些其它的邏輯電路保證在任何情況下當(dāng)任意一條指令退休時,它的地址和它的下一條指令的地址都能被提供給CPU的異常處理單元,從而實現(xiàn)精確異常模型.這種方法的優(yōu)點是電路的硬件開銷比較低,數(shù)據(jù)通道少,避免為每條指令保存兩個地址而使用很多的寄存器和多路選擇器;另外一個優(yōu)點是控制電路比較簡單,異常被響應(yīng)時,CPU很容易存儲異常服務(wù)結(jié)束時返回的地址。
文檔編號G06F9/32GK1514356SQ0311613
公開日2004年7月21日 申請日期2003年3月31日 優(yōu)先權(quán)日2003年3月31日
發(fā)明者余龍理, 王界兵 申請人:杭州中天微系統(tǒng)有限公司