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