專利名稱:一種指令異常處理方法
技術領域:
本發明涉及到一種帶有中斷功能的、采用指令流水線結構的微處理器。特別是一種指令集處理器中指令異常處理的方法。
背景技術:
眾所周知,微處理器泛指令集處理器(ISP,Instruction SetProcessor)。ISP執行預先定義指令集中的指令。微處理器的功能幾乎完全取決于指令集,從而通過指令集表明它的執行能力。所有運行于微處理器上的程序都要基于指令集進行編碼。
微處理器的發展一定程度上也是指令集系統的發展,從CISC指令集到RISC指令集,指令集經歷了一個從簡單到復雜,又從復雜回歸到簡單的一個螺旋上升的過程。
計算機結構通常是朝著更復雜的方向發展,如更大的指令集、更多的尋址方式、更多的專用寄存器和更強的指令計算功能等。這時使用的指令集主要是CISC指令集。然而,當CISC發展到一定程度,人們發現,一些過于復雜和深奧的指令很難也很少用到,把這樣的指令加到指令集反而使控制器的設計變得復雜,并占用了CPU芯片面積相當大的部分。于是,RISC指令集應運而生。現在已有眾多廠家生產RISC處理器,盡管它們的實現手段有所不同,但如下的RISC概念的基本要素是普遍贊同的(1)一個有限的簡單的指令集。
(2)強調寄存器的使用,或CPU配備大量的通用寄存器(常稱為寄存器文件),或以便意見書優化寄存器的使用。
(3)強調對指令流水線的優化。
指令流水線使用時間重疊技術,允許幾條指令同時被處理,從而全面改善處理器性能。現在,用于PC/工作站和并行計算機中的處理器,計劃全部采用了指令流水線結構。
微處理器設計單位按照預定義的指令集設計微處理器,在流片生產前必須要對所設計的微處理器進行測試,但是現在的測試機制并不能完全覆蓋所有情況,所以在流片生產后,設計單位還必須有專人對已生產出的微處理器進行長時間、大范圍、高覆蓋率的測試。
如果此時發現了某指令執行錯誤,現在一般的做法有兩種(1)廠家向用戶發放對該款處理器的勘誤表,提醒使用匯編語言的用戶不要使用某指令。如下例所示程序1AND T0,T1;將T0與T1作與操作,結果存于T1中OR T3,T2 ;將T3與T2作或操作,結果存于T2中NOT T0;將T0中的數據取反后存入T0中XOR T1,T2;將T1與T2作異或操作,結果存于T2中注T0,T1,T2,T3是臨時寄存器。
如測試中發現XOR指令執行時發生錯誤,那么繼續執行這段程序,程序員將得不到正確的或預期的結果。當程序員收到廠家的勘誤表后,就需要將他所寫程序中的所有使用該指令的地方用一個可以完成異或操作的程序段替換,如程序2所示程序2AND T0,Ti;將T0與T1作與操作,結果存于T1中OR T3,T2 ;將T3與T2作或操作,結果存于T2中NOT T0;將T0中的數據取反后存入T0中PUSH T0 ;保存現場PUSH T3 ;保存現場NOT T2,T3;將T2中的數據取反后存入T3中NOT T1,T0;將T1中的數據取反后存入T0中AND T1,T3;實現T1·T2,結果存入T3中AND T0,T2;實現T1·T2,結果存入T2中OR T3,T2 ;實現T1·T2+T1·T2。結果存入T2中POP T3;恢復現場POP T0;恢復現場可見,這種方式大大增加程序員的工作量和代碼量,而且這種方法對程序員的依賴性很大,并不保證質量。
(2)要求編譯器的生產者在編譯該款處理器的程序時回避該指令,然后要求用戶不斷升級編譯軟件和用戶平臺來適應該款處理器。
這兩種方法會給用戶使用帶來諸多不便。
如果有一種方法對用戶是透明的,不需改變程序,讓處理器本身來回避該指令,那么將大大減少程序員的工作量,減少人為引入錯誤的機會。
發明內容
本發明的目的是提供一種指令集處理器中指令異常處理的方法,它不需要升級硬件,不需要用戶更改程序,將減少程序員的工作量,減少人為引入錯誤的機會。
具體的技術方案如下本發明所述的指令異常處理的方法,主要應用于指令集處理器中,其特征在于,方法中所需的硬件結構主要為包括含有識別指令邏輯的程序控制單元、指令譯碼單元、執行單元、提交控制臺和三個專用的16位IO寄存器(以16位處理器為例)的處理器;以及還包括提供給用戶更新的導入程序;所述方法的內容為(1)處理器在讀入指令后,通過存放在預留的其中一個IO寄存器內的識別指令的編碼,對指令進行識別。該編碼所指的這條指令我們就稱為已標志出的指令。
(2)識別出已標志出的指令以后,就立即進入預先設定好的中斷服務程序,并將該指令對應的PC地址存入另外兩個預留的IO寄存器。
(3)在中斷服務程序中,通過讀取另外兩個預留的IO寄存器所存儲的被標志出的指令所在的PC地址,讀出完整的指令,并進一步識別其所使用的操作數信息,然后用其它指令或程序將其替換。
(4)替換結束后,返回原程序。
關于方法中所使用的中斷服務程序和新的導入程序,處理器芯片生產廠家會隨著指令的勘誤表一起提供給用戶,用戶只需將其替換原來的導入程序,并將該中斷服務程序添加到項目文件中,并更新中斷向量表即可使用。
本發明方法由于在實現時,要求所運行的處理器預留三個專用的16位IO寄存器(以16位處理器為例),并在程序流單元加入識別指令的邏輯。這樣使得生產廠家不需要重新流片來更新硬件,減少了用戶參與維護的操作,減少了為避免錯誤而導入錯誤的機會。
本發明在實現時,不需要依賴軟件環境,也不需要應用程序員干預,只需啟動內嵌程序,用戶及時更新廠家提供的初始化文件即可。
本發明有利于系統合理地安排數據流程,使之在微處理器的各執行單元間無沖突地順利執行。由于此方法沒有中斷已有的數據流和指令流,沒有打亂所有器件的并行執行機制,所以微處理器系統仍然在正常的運行,所以對講異常指令對系統的傷害降到了最底點。
圖1是現有處理器的一般工作流程框圖。
圖2是采用本發明的異常處理機制以后的流程圖。
具體實施例方式下面將結合附圖進一步闡述本發明。
根據上述所提供的本發明方法中的硬件與軟件配置環境,其具備達到處理器可以對出錯指令進行白行修復的功能。
為了便于對本發明技術的理解,首先闡述一下未使用本發明的處理器的一般工作流程。
如圖1所示,程序控制單元通過指令地址總線將指令地址給指令存儲器,通過指令數據總線讀入指令。讀入指令后,程序控制單元首先對指令進行識別,一般這里將識別出跳轉指令等程序控制指令,然后將運算指令交給譯碼單元進行譯碼,再由譯碼單元將譯碼后的結果分別交給地址產生單元和數據運算單元,地址產生單元通過譯碼單元所給的信息計算需訪問的存儲器地址,通過地址總線給數據存儲器接口,然后將數據通過數據總線送出,數據運算單元將運算后的結果和狀態寄存器的結果放到數據總線上,程序控制單元通過采樣數據總線上的數據和狀態寄存器的結果來監控運算單元的工作狀態。
根據本發明機制,其中所涉及的三個預留的16位IO寄存器的作用如下IO寄存器1存放需要識別的指令編碼;IO寄存器2存放被替換指令的PC地址高位;IO寄存器3存放被替換指令的PC地址低位。
如圖2所示,所述方法機制中的微處理器在讀入指令后,程序控制單元首先對指令進行識別,此時,程序控制單元不但要識別跳轉指令等程序控制指令,還要識別出已標志出的指令。我們在IO端口預留了三個寄存器給這種機制使用,其中一個就是用來存放需要識別的指令的編碼的,該編碼所指的這條指令我們就稱為已標志出的指令。程序控制單元通過識別指令編碼來識別這條指令,識別出以后,就立即進入預先設定好的中斷服務程序,并且將該指令對應的PC地址存入另外兩個預留的IO寄存器。在中斷服務程序中,通過讀取另外兩個預留的IO寄存器所存儲的被標志出的指令所在的PC地址,讀出完整的指令,并進一步識別其所使用的操作數信息,然后用其它指令或程序將其替換。替換結束后,返回原程序。這里所使用的中斷服務程序和新的導入程序,處理器芯片生產廠家會隨著指令的勘誤表一起提供給用戶,用戶只需將其替換原來的導入程序,并將該中斷服務程序添加到項目文件中,并更新中斷向量表即可使用。
以上是本發明的實施方式之一,對于本領域內的一般技術人員,不花費創造性的勞動,在上述實施例的基礎上可以做多種變化,同樣能夠實現本發明的目的。但是,這種變化顯然應該在本發明的權利要求書的保護范圍內。
權利要求
1.一種指令異常處理的方法,主要應用于指令集處理器中,其特征在于,方法中所需的硬件結構主要為包括含有識別指令邏輯的程序控制單元、指令譯碼單元、執行單元、提交控制臺和三個專用的16位IO寄存器的處理器;以及還包括提供給用戶更新的導入程序;所述方法的內容為(1)處理器在讀入指令后,通過存放在預留的其中一個IO寄存器內的識別指令的編碼,對指令進行識別。該編碼所指的這條指令我們就稱為已標志出的指令。(2)識別出已標志出的指令以后,就立即進入預先設定好的中斷服務程序,并將該指令對應的PC地址存入另外兩個預留的IO寄存器。(3)在中斷服務程序中,通過讀取另外兩個預留的IO寄存器所存儲的被標志出的指令所在的PC地址,讀出完整的指令,并進一步識別其所使用的操作數信息,然后用其它指令或程序將其替換。(5)替換結束后,返回原程序。
2.根據權利要求1的指令異常處理的方法,其特征在于,所述方法中所使用的中斷服務程序和新的導入程序,處理器芯片生產廠家會隨著指令的勘誤表一起提供給用戶,用戶只需將其替換原來的導入程序,并將該中斷服務程序添加到項目文件中,并更新中斷向量表即可使用。
全文摘要
本發明公開了一種指令異常處理方法,其主要應用于指令集處理器中,其硬件結構主要包括程序控制單元、指令譯碼單元、寄存器文件、執行單元、提交控制臺等各個部分。本發明利用程序控制單元和寄存器文件,將指定指令識別出,然后利用指定的中斷服務程序將其替換,回避該指定指令,實現在不改變硬件資源的條件下對異常指令的處理。
文檔編號G06F9/30GK101042670SQ20071003986
公開日2007年9月26日 申請日期2007年4月24日 優先權日2007年4月24日
發明者張達文, 李興仁, 金榮偉, 劉春暉, 林錦麟, 楊一茜 申請人:上海華龍信息技術開發中心