專(zhuān)利名稱:錯(cuò)誤處理方法和信息處理裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般地涉及錯(cuò)誤處理方法和信息處理裝置,更具體地,涉及用 于處理在指令總線或數(shù)據(jù)總線中生成的總線錯(cuò)誤的錯(cuò)誤處理方法,以及配備有具有哈佛結(jié)構(gòu)(Harvard architecture)的CPU等的信息處理裝置。
技術(shù)背景對(duì)于在車(chē)輛等中的應(yīng)用,要求為微處理器的CPU中的存儲(chǔ)器部分提供 奇偶校驗(yàn)或者ECC校驗(yàn)功能。在傳統(tǒng)的CPU中,如果在總線訪問(wèn)(bus access)的過(guò)程中生成了錯(cuò)誤,則無(wú)法將正確的指令代碼提供到CPU,并 且CPU不得不停止工作。避免CPU這樣停止工作的一種方法是當(dāng)在總線 訪問(wèn)的過(guò)程中生成錯(cuò)誤時(shí)向CPU輸入外部中斷,但是根據(jù)該方法,有可能 在轉(zhuǎn)移到中斷例程(interrupt routine)之前執(zhí)行了產(chǎn)生總線錯(cuò)誤的指令代 碼。另外,因?yàn)镃PU并不總是執(zhí)行如轉(zhuǎn)移指令的情況中的進(jìn)行總線訪問(wèn)的 指令代碼,所以有可能生成毫無(wú)意義的中斷。此外,在CPU具有指令總線和數(shù)據(jù)總線相分立的哈佛結(jié)構(gòu)的情況下, 在指令總線上生成針對(duì)某指令的總線錯(cuò)誤之后,有可能生成針對(duì)在該指令 之前執(zhí)行的指令的數(shù)據(jù)總線錯(cuò)誤。由于這個(gè)原因,有必要優(yōu)先于指令總線 錯(cuò)誤來(lái)處理數(shù)據(jù)總線錯(cuò)誤。例如,由日本富士通有限公司制造的FR系列 精簡(jiǎn)指令集計(jì)算機(jī)(RISC)微型計(jì)算機(jī)是配備了具有哈佛結(jié)構(gòu)的CPU的 微處理器的一個(gè)示例。在這樣的CPU中,如果生成了未定義的指令,則指 令譯碼器部分的指令定序器(sequencer)中的異常處理器(exceptionhandler)被啟動(dòng),從而通過(guò)異常中斷陷阱(Exception Interrupt Trap, EIT)過(guò)程,生成用于獲取未定義的中斷例程的起始地址的指令以及用于 保存指示CPU狀態(tài)的處理器狀態(tài)(Processor Status, PS)寄存器以及程序 計(jì)數(shù)(ProgramCounter, PC)寄存器的內(nèi)容的指令,并轉(zhuǎn)移到中斷例程。 圖1是示出了傳統(tǒng)CPU的重要部分的結(jié)構(gòu)的系統(tǒng)框圖。圖l所示的傳統(tǒng)CPU—般地包括獲取部分(F部分)101、譯碼部分(D部分)102、執(zhí) 行部分(E部分)1Q3、存儲(chǔ)器存取部分(M部分)104以及通用寄存器部 分105。F部分101執(zhí)行指令獲取,以使用內(nèi)部指令總線Ibus來(lái)獲得指令代 碼。所獲得的指令代碼被設(shè)置在中間寄存器Tf中,并且此狀態(tài)中的地址被 設(shè)置在中間寄存器Tia—f中。F部分101包括Ibus訪問(wèn)控制器111。D部分102解釋所獲得的指令代碼,并為將由E部分103執(zhí)行的運(yùn)算 (或計(jì)算)和運(yùn)算模式(加法、減法等)準(zhǔn)備必要的數(shù)據(jù)。更具體地,從 所獲得的指令代碼中譯碼出在E部分103中的運(yùn)算單元(ALU) 132的運(yùn) 算模式,并將用于所述的運(yùn)算的寄存器值設(shè)置在中間寄存器Ta和Tb中。 當(dāng)經(jīng)由內(nèi)部數(shù)據(jù)總線Dbus來(lái)寫(xiě)入時(shí),將被寫(xiě)入的值被設(shè)置在中間寄存器 Tdd中。當(dāng)由外部中斷所引起的內(nèi)部錯(cuò)誤、未定義的指令等被生成時(shí),指 令定序器121內(nèi)的異常處理器122轉(zhuǎn)移到中斷例程,因此,D部分102自 動(dòng)地提供用于讀取中斷向量表并存儲(chǔ)通用寄存器部分105的PS寄存器和 PC寄存器的內(nèi)容的指令。在指令定序器121中提供了譯碼器123和多路轉(zhuǎn) 換器124。 D部分102包括用于鎖存由指令定序器121譯碼得到的運(yùn)算模 式的中間寄存器Tdec、矩陣(或選擇器)125和多路轉(zhuǎn)換器126。圖2是用于說(shuō)明傳統(tǒng)CPU的D部分102中的指令定序器121的操作 的流程圖。在新獲得指令代碼之后,該指令代碼被輸入到D部分102 (步 驟Sl),并且該指令代碼被譯碼(步驟S2)。如果作為譯碼結(jié)果的指令 代碼是正常的,則指令的運(yùn)算模式和通用寄存器部分105的對(duì)于所述運(yùn)算 有必要的內(nèi)容被設(shè)置在中間寄存器Tdec、 Ta、 Tb和Tdd中,并且被提供 到E部分103 (步驟S3)。此后,在下一個(gè)周期中,下一個(gè)指令被輸入并 且開(kāi)始譯碼。如果譯碼結(jié)果是未定義指令或者外部中斷,則從向量表中獲得向量地 址,以使得轉(zhuǎn)移到異常中斷的例程,并且用于計(jì)算轉(zhuǎn)移地址的運(yùn)算模式和 通用寄存器部分105的對(duì)于運(yùn)算有必要的內(nèi)容被提供到E部分103 (步驟 S4)。因?yàn)橄蛄勘韮?nèi)的每一個(gè)地址的數(shù)據(jù)指向相應(yīng)異常處理的起始地址,
所以使用向量表的技術(shù)通常被用作轉(zhuǎn)移到異常處理的方法,并且每一個(gè)地 址的數(shù)據(jù)還被稱作向量地址。在下一個(gè)周期中,用于存儲(chǔ)PS寄存器的內(nèi) 容的運(yùn)算模式以及通用寄存器部分105的對(duì)于運(yùn)算有必要的內(nèi)容被提供到E部分103 (步驟S5)。此后,用于存儲(chǔ)PC寄存器內(nèi)容的運(yùn)算模式和通 用寄存器部分105的對(duì)于運(yùn)算有必要的內(nèi)容被提供到E部分103 (步驟 S6)。步驟S4到S6形成了 EIT過(guò)程。此后,進(jìn)行檢查,以判斷是否存在 其它中斷或錯(cuò)誤(步驟S7),如果不存在其它中斷或錯(cuò)誤(步驟S7中的 否),則對(duì)下一指令進(jìn)行譯碼。另一方面,如果存在其它中斷或錯(cuò)誤(步 驟S7中的是),則重復(fù)通過(guò)EIT過(guò)程來(lái)進(jìn)行的向量地址的獲取。E部分103從D部分102接收運(yùn)算模式信號(hào)和運(yùn)算數(shù)據(jù),并執(zhí)行運(yùn) 算。更具體地,E部分103執(zhí)行指令運(yùn)算,并將由運(yùn)算單元132獲得的結(jié) 果設(shè)置在中間寄存器Te中。如果由于指令的組合導(dǎo)致發(fā)生寄存器冒險(xiǎn) (register hazard),則E部分103使用寄存器旁路路線131直接從運(yùn)算單 元132的輸出來(lái)設(shè)置中間寄存器Ta或Tb和Tdd用來(lái)對(duì)E部分103進(jìn)行輸 入。E部分103包括利用D部分102內(nèi)的中間寄存器Tdd的輸出來(lái)設(shè)置的 中間寄存器Ted。M部分104從E部分103接收數(shù)據(jù),并使用內(nèi)部數(shù)據(jù)總線Dbus來(lái)進(jìn) 行針對(duì)存儲(chǔ)器部分的讀和寫(xiě)。更具體地,M部分104進(jìn)行用于指令運(yùn)算結(jié) 果的存儲(chǔ)器部分、通用寄存器部分105 (PC、 RO到R15)等的讀和寫(xiě)。M 部分104包括中間寄存器Tia—m和Dbus訪問(wèn)控制器141。通用寄存器部分105形成CPU的內(nèi)部寄存器,并包括PC寄存器、PS 寄存器、運(yùn)算寄存器R0到R15以及多路轉(zhuǎn)換器151。在圖1中,ID表示指令代碼,IA表示指令代碼的地址,而iaccess、 irdy、 IRDY和ISZE分別表示指令代碼的存取請(qǐng)求、指令代碼的可用輸 出、指令代碼的可用輸入和指令代碼的大小。另外,DA、 DDout和DDin 分別表示數(shù)據(jù)地址、輸出數(shù)據(jù)和輸入數(shù)據(jù)。此外,daccess、 drdy、 DRDY 和DSIZE分別表示數(shù)據(jù)的存取請(qǐng)求、數(shù)據(jù)的就緒輸出、數(shù)據(jù)的就緒輸入和 數(shù)據(jù)的大小。指令的地址被存儲(chǔ)在各部分101到104的中間寄存器Tia—f —Tia一dec
—Tia—e — Tia一m中。如果對(duì)于某指令,運(yùn)算結(jié)果被設(shè)置在運(yùn)算寄存器Ri (1=0到15)中,并且運(yùn)算寄存器Ri將被用于下一個(gè)指令,則設(shè)置在運(yùn)算 寄存器Ri中的運(yùn)算結(jié)果將無(wú)法及時(shí)地到達(dá)D部分102。由于這個(gè)原因,提 供了允許將運(yùn)算單元132的輸出設(shè)置在中間寄存器Ta或Tb中的路線, 即,寄存器旁路路線131。按CPU獲取指令的順序來(lái)執(zhí)行指令的處理。每輸入一個(gè)時(shí)鐘,就有一 個(gè)指令被順序地傳送到F部分101、 D部分102、 E部分103和M部分 104,并且CPU根據(jù)該指令來(lái)操作。如果指令I(lǐng)1被F部分101獲得,并且 響應(yīng)于下一個(gè)時(shí)鐘,這個(gè)指令I(lǐng)1被傳送到D部分102,則F部分101響應(yīng) 于所述的下一時(shí)鐘同時(shí)獲得指令12。如圖3到圖8所示,這種操作被重 復(fù),并且指令I(lǐng)I到15的流水線處理被進(jìn)行。圖3是用于說(shuō)明傳統(tǒng)CPU的 操作的時(shí)序圖。圖4是用于說(shuō)明圖3所示的狀態(tài)(1)的示圖,圖5是用于 說(shuō)明圖3所示的狀態(tài)(2)的示圖,圖6是用于說(shuō)明圖3所示的狀態(tài)(3) 的示圖,圖7是用于說(shuō)明圖3所示的狀態(tài)(4)的示圖,以及圖8是用于說(shuō) 明圖3所示的狀態(tài)(5)的示圖。在圖4到圖8中,nop表示"不操作"。傳統(tǒng)的CPU不具有總線錯(cuò)誤輸入裝置。因此,如果在存儲(chǔ)器部分中生 成諸如奇偶校驗(yàn)錯(cuò)誤之類(lèi)的錯(cuò)誤,則無(wú)法從外部來(lái)準(zhǔn)備CPU可執(zhí)行的指 令,并且CPU停止工作。另外,如果CPU獲得指令,檢測(cè)出奇偶校驗(yàn)錯(cuò) 誤,并使用外部中斷來(lái)指示該奇偶校驗(yàn)錯(cuò)誤的檢出,則有可能執(zhí)行產(chǎn)生總 線錯(cuò)誤的指令。此外,即使CPU獲取指令并檢測(cè)出奇偶校驗(yàn)錯(cuò)誤,當(dāng)由于 轉(zhuǎn)移指令等的執(zhí)行而使得沒(méi)有執(zhí)行所獲取的指令時(shí),也將生成毫無(wú)意義的 中斷。此外,如果在指令總線上生成總線錯(cuò)誤,則隨后將生成針對(duì)剛剛在 前的指令的數(shù)據(jù)總線錯(cuò)誤,因此,有必要考慮處理的優(yōu)先級(jí)順序。例如,日本專(zhuān)利申請(qǐng)?jiān)缙诠_(kāi)No. 6-242977提出了一種單片微處理 器,該單片微處理器被構(gòu)造用于檢測(cè)數(shù)據(jù)地址的奇偶校驗(yàn)錯(cuò)誤。因此,根據(jù)具有哈佛結(jié)構(gòu)的傳統(tǒng)CPU,存在這樣的一種問(wèn)題很難對(duì) 在指令總線或數(shù)據(jù)總線上生成的總線錯(cuò)誤進(jìn)行適當(dāng)?shù)奶幚怼0l(fā)明內(nèi)容因此,本發(fā)明的一般性目的是提供解決上述問(wèn)題的新穎有用的錯(cuò)誤處 理方法和信息處理裝置。本發(fā)明的另一個(gè)更具體的目的是提供能夠?qū)υ谥噶羁偩€或數(shù)據(jù)總線上 生成的總線錯(cuò)誤進(jìn)行適當(dāng)?shù)奶幚淼腻e(cuò)誤處理方法和信息處理裝置。本發(fā)明的又一個(gè)目的是提供一種用于對(duì)在CPU的總線上生成的錯(cuò)誤進(jìn) 行處理的錯(cuò)誤處理方法,該方法包括以下步驟(a)通過(guò)總線錯(cuò)誤輸入 部分向CPU輸入在CPU的指令總線和數(shù)據(jù)總線中的至少一個(gè)上生成的總 線錯(cuò)誤;(b)通過(guò)CPU的總線錯(cuò)誤計(jì)數(shù)器部分來(lái)對(duì)總線錯(cuò)誤計(jì)數(shù);以及 (c)基于總線錯(cuò)誤計(jì)數(shù)器部分的值來(lái)指定與CPU相耦合的存儲(chǔ)器部分的區(qū)域。根據(jù)本發(fā)明的錯(cuò)誤處理方法,可以對(duì)在指令總線或數(shù)據(jù)總線上生成 的總線錯(cuò)誤進(jìn)行適當(dāng)?shù)奶幚?。本發(fā)明的又一個(gè)目的是提供一種信息處理裝置,該裝置包括CPU; 與CPU相耦合的存儲(chǔ)器部分;總線錯(cuò)誤輸入部分,被配置用于向CPU輸 入在CPU的指令總線和數(shù)據(jù)總線中的至少一個(gè)上生成的總線錯(cuò)誤;總線錯(cuò) 誤計(jì)數(shù)器部分,被配置用于對(duì)在CPU中生成的總線錯(cuò)誤進(jìn)行計(jì)數(shù);以及指 定部分,被配置用于基于總線錯(cuò)誤計(jì)數(shù)器部分的值來(lái)指定存儲(chǔ)器部分的區(qū) 域。根據(jù)本發(fā)明的信息處理裝置,可以對(duì)在指令總線或數(shù)據(jù)總線上生成的 總線錯(cuò)誤進(jìn)行適當(dāng)?shù)奶幚?。?dāng)結(jié)合附圖來(lái)閱讀以下的詳細(xì)描述時(shí),本發(fā)明的其它目的和另外的特 征將變得一目了然。
圖1是示出了傳統(tǒng)CPU的重要部分的結(jié)構(gòu)的系統(tǒng)框圖;圖2是用于說(shuō)明在傳統(tǒng)CPU的譯碼部分內(nèi)的指令定序器的操作的流程圖;圖3是用于說(shuō)明傳統(tǒng)CPU的操作的時(shí)序圖; 圖4是用于說(shuō)明狀態(tài)(1)的示圖; 圖5是用于說(shuō)明狀態(tài)(2)的示圖; 圖6是用于說(shuō)明狀態(tài)(3)的示圖; 圖7是用于說(shuō)明狀態(tài)(4)的示圖8是用于說(shuō)明狀態(tài)(5)的示圖;圖9是示出了應(yīng)用本發(fā)明的微處理的重要部分的系統(tǒng)框圖; 圖IO是示出了存儲(chǔ)器部分的結(jié)構(gòu)的系統(tǒng)框圖;圖11是示出了存儲(chǔ)器部分的寫(xiě)信號(hào)、讀信號(hào)和控制信號(hào)之間的關(guān)系 的示圖;圖12是示出了本發(fā)明的第一實(shí)施例的重要部分的系統(tǒng)框圖;圖13是用于說(shuō)明第一實(shí)施例的指令定序器的操作的流程圖;圖14是用于說(shuō)明在指令總線上生成錯(cuò)誤的情況下的操作的時(shí)序圖;圖15是用于說(shuō)明在數(shù)據(jù)總線上生成錯(cuò)誤的情況下的操作的時(shí)序圖;圖16是用于說(shuō)明在EIT過(guò)程期間在數(shù)據(jù)總線上生成錯(cuò)誤的情況下的 操作的時(shí)序圖;圖n是示出了本發(fā)明的第二實(shí)施例的重要部分的系統(tǒng)框圖;圖18是用于說(shuō)明第二實(shí)施例的指令定序器的操作的流程圖;圖19是用于說(shuō)明在指令總線上生成錯(cuò)誤的情況下的操作的時(shí)序圖;圖20是用于說(shuō)明在數(shù)據(jù)總線上生成錯(cuò)誤的情況下的操作的時(shí)序圖。
具體實(shí)施方式
在本發(fā)明中,提供了針對(duì)CPU的指令總線和數(shù)據(jù)總線的總線錯(cuò)誤輸入 部分或裝置。另外,在CPU中提供了總線錯(cuò)誤計(jì)數(shù)器部分或裝置,并且該總線錯(cuò)誤計(jì)數(shù)器部分或裝置的內(nèi)容被輸出用于指定存儲(chǔ)器部分的頁(yè)面(page)。例如,如果在指令總線上生成總線錯(cuò)誤,或者在數(shù)據(jù)總線上生 成總線錯(cuò)誤,則當(dāng)做出判斷以轉(zhuǎn)移到未定義指令的異常向量時(shí),總線錯(cuò)誤 計(jì)數(shù)器部分或裝置被更新。當(dāng)在指令總線上生成總線錯(cuò)誤時(shí),對(duì)未定義指 令的處理可以在確認(rèn)在數(shù)據(jù)總線上針對(duì)剛剛在前的指令沒(méi)有生成總線錯(cuò)誤 之后再進(jìn)行。當(dāng)在數(shù)據(jù)總線上生成總線錯(cuò)誤時(shí),可以通過(guò)禁止通用寄存器 部分被未定義指令之后的指令進(jìn)行設(shè)置,來(lái)進(jìn)行對(duì)未定義指令的處理。當(dāng)獲得指令時(shí)在指令總線上生成奇偶校驗(yàn)錯(cuò)誤的情況下,指令總線錯(cuò) 誤信號(hào)被輸入到指令總線錯(cuò)誤輸入部分或裝置。因此,當(dāng)做出判斷以執(zhí)行 生成錯(cuò)誤的指令時(shí),在這種情況下的CPU可以執(zhí)行EIT過(guò)程,并轉(zhuǎn)移到
錯(cuò)誤處理的例程。另外,在數(shù)據(jù)總線上生成奇偶校驗(yàn)錯(cuò)誤的情況下,數(shù)據(jù) 錯(cuò)誤信號(hào)被輸入到數(shù)據(jù)總線錯(cuò)誤輸入部分或裝置。因此,在這種情況下可 以取消對(duì)隨后的指令的處理。因此,可以通過(guò)硬件處理來(lái)處理針對(duì)在指令 總線和數(shù)據(jù)總線上生成的錯(cuò)誤的錯(cuò)誤處理的優(yōu)先級(jí)順序,從而使得沒(méi)有必 要考慮通過(guò)軟件處理的錯(cuò)誤處理。通過(guò)參考圖9及隨后的附圖,以下將給出對(duì)根據(jù)本發(fā)明的錯(cuò)誤處理方 法和信息處理裝置的實(shí)施例的說(shuō)明。[第一實(shí)施例]圖9是示出了應(yīng)用本發(fā)明的微處理器的重要部分的系統(tǒng)框圖。圖9所示的微處理器1具有CPU 2和存儲(chǔ)器部分3和4。例如,存儲(chǔ)器部分3是 由閃存存儲(chǔ)器(Flash)形成的,而存儲(chǔ)器部分4是由RAM形成的。CPU 2和存儲(chǔ)器部分3經(jīng)由指令總線5連接,而CPU 2和存儲(chǔ)器部分4經(jīng)由數(shù) 據(jù)總線6連接。指令總線5包括指令存取大小信號(hào)線ISIZE、指令地址線 IA、指令數(shù)據(jù)線ID、就緒信號(hào)線IRDY、指令總線錯(cuò)誤信號(hào)線IBERR以 及指令總線錯(cuò)誤計(jì)數(shù)信號(hào)線IBER—CNTR。數(shù)據(jù)總線6包括數(shù)據(jù)存取大小 信號(hào)線DSIZE、數(shù)據(jù)地址線DA、數(shù)據(jù)線DD、就緒信號(hào)線DRDY、數(shù)據(jù) 總線錯(cuò)誤信號(hào)線DBERR和數(shù)據(jù)總線錯(cuò)誤計(jì)數(shù)信號(hào)線DBER—CNTR。指令 總線錯(cuò)誤信號(hào)線IBERR和數(shù)據(jù)總線錯(cuò)誤信號(hào)線DBERR形成了如上所述的 總線錯(cuò)誤輸入部分或裝置。圖10是示出了存儲(chǔ)器部分3的結(jié)構(gòu)的系統(tǒng)框圖。存儲(chǔ)器部分4可以具 有與存儲(chǔ)器部分3相同的結(jié)構(gòu)。存儲(chǔ)器部分3 (或存儲(chǔ)器部分4)具有邏 輯電路31、頁(yè)存儲(chǔ)器(page memory)部分32和奇偶校驗(yàn)器33。例如, 頁(yè)存儲(chǔ)器部分32由頁(yè)存儲(chǔ)器0到4組成。在圖10中,AD表示指令或數(shù) 據(jù)的地址,R/WX表示讀信號(hào)或?qū)懶盘?hào),CSOX到CSOX表示從邏輯電路 31輸出的片選信號(hào),IBERR/DBERR表示從奇偶校驗(yàn)器33輸出的指令總 線錯(cuò)誤信號(hào)或數(shù)據(jù)總線錯(cuò)誤信號(hào),以及IDout/DDout表示從頁(yè)存儲(chǔ)器部分 32輸出的指令輸出或數(shù)據(jù)輸出。邏輯電路31基于錯(cuò)誤計(jì)數(shù)信號(hào) ER—CNTR、指令或數(shù)據(jù)的地址AD以及讀或?qū)懶盘?hào)R/WX來(lái)生成片選信 號(hào)CS0X到CS3X。當(dāng)然,形成頁(yè)存儲(chǔ)器部分32的頁(yè)存儲(chǔ)器的數(shù)目并不限 于4。圖ll是示出了讀信號(hào)、寫(xiě)信號(hào)和控制信號(hào)的關(guān)系的示圖,所述的控制信號(hào)即存儲(chǔ)器部分3 (或存儲(chǔ)器部分4)的片選信號(hào)CS0X到CS3X。在圖 11中,符合"0"指示控制信號(hào)的激活邏輯電平,而符號(hào)"X"指示控制 信號(hào)的非激活邏輯電平。如圖11所示,在寫(xiě)的過(guò)程中,針對(duì)存儲(chǔ)器部分 32的所有頁(yè)存儲(chǔ)器0到3,指令或數(shù)據(jù)被寫(xiě)入。另一方面,在讀的過(guò)程 中,指令或數(shù)據(jù)被從由錯(cuò)誤計(jì)數(shù)信號(hào)ER—CNTR指示的頁(yè)存儲(chǔ)器部分32的 一個(gè)頁(yè)存儲(chǔ)器中讀出。圖12是示出了本發(fā)明的第一實(shí)施例的重要部分的系統(tǒng)框圖。CPU2 — 般地包括獲取部分(F部分)51、譯碼部分(D部分)52、執(zhí)行部分(E 部分)53、存儲(chǔ)器存取部分(M部分)54和通用寄存器部分55。F部分51執(zhí)行指令獲取以使用內(nèi)部指令總線Ibus來(lái)獲得指令代碼。所 獲得的指令代碼被設(shè)置在中間寄存器Tf中,并且此狀態(tài)中的地址被設(shè)置在 中間寄存器Tia—f中。F部分51包括Ibus訪問(wèn)控制器511。D部分52解釋所獲得的指令代碼,并準(zhǔn)備對(duì)將由E部分53執(zhí)行的運(yùn) 算(或計(jì)算)以及運(yùn)算模式(加法、減法等)有必要的數(shù)據(jù)。更具體地, 在E部分53內(nèi)的運(yùn)算單元(ALU) 532的運(yùn)算模式被從所獲得的指令代碼 中譯碼得到,并且將用于所述運(yùn)算的寄存器值被設(shè)置在中間寄存器Ta和 Tb中。當(dāng)經(jīng)由內(nèi)部數(shù)據(jù)總線Dbus來(lái)寫(xiě)入時(shí),要被寫(xiě)入的值被設(shè)置在中間 寄存器Tdd中。當(dāng)產(chǎn)生了由外部中斷所導(dǎo)致的內(nèi)部錯(cuò)誤、未定義指令等 時(shí),指令定序器521內(nèi)的異常處理器522轉(zhuǎn)移到中斷例程,從而D部分52 自動(dòng)地提供用于讀取中斷向量表和保存通用寄存器部分55的PS寄存器和 PC寄存器的內(nèi)容的指令。指令定序器521內(nèi)具有譯碼器523和多路轉(zhuǎn)換器 524。 D部分52包括中間寄存器Tdec、矩陣(或選擇器)525和多路轉(zhuǎn)換 器526,其中中間寄存器Tdec用于鎖存由指令定序器521譯碼的運(yùn)算模 式。M部分54從E部分接收數(shù)據(jù),并使用內(nèi)部數(shù)據(jù)總線Dbus來(lái)針對(duì)存儲(chǔ) 器部分進(jìn)行讀或?qū)?。更具體地,M部分54對(duì)存儲(chǔ)器部分、通用寄存器部 分55 (PC, R0到R15)等進(jìn)行針對(duì)指令運(yùn)算結(jié)果的讀或?qū)?。M部分54包
括中間寄存器Tia_m和Dbus訪問(wèn)控制器541 。通用寄存器部分55形成CPU2的內(nèi)部寄存器,并包括PC寄存器、PS 寄存器、BEAR寄存器、BEDR寄存器、數(shù)據(jù)總線錯(cuò)誤計(jì)數(shù)器 DBER_CNTR、指令總線錯(cuò)誤計(jì)數(shù)器IBER—CNTR、運(yùn)算寄存器R0到R15 以及多路轉(zhuǎn)換器551。在本實(shí)施例中,PS寄存器存儲(chǔ)指令總線錯(cuò)誤IBER 和數(shù)據(jù)總線錯(cuò)誤DBER,并指示總線錯(cuò)誤BERR的生成。BEAR寄存器存 儲(chǔ)總線錯(cuò)誤BERR被生成時(shí)的地址。BEDR寄存器存儲(chǔ)總線錯(cuò)誤BERR被 生成時(shí)的數(shù)據(jù)。數(shù)據(jù)總線錯(cuò)誤計(jì)數(shù)器DBER—CNTR對(duì)數(shù)據(jù)總線錯(cuò)誤 DBERR進(jìn)行計(jì)數(shù),而指令總線錯(cuò)誤計(jì)數(shù)器IBER—CNTR對(duì)指令總線錯(cuò)誤 IBERR進(jìn)行計(jì)數(shù)。指令總線錯(cuò)誤計(jì)數(shù)器IBER—CNTR和數(shù)據(jù)總線錯(cuò)誤計(jì)數(shù) 器DBER—CNTR形成總線錯(cuò)誤計(jì)數(shù)器部分或裝置。在圖12中,ID表示指令代碼,IA表示指令代碼的地址,iberr表示內(nèi) 部指令總線錯(cuò)誤輸出,IBERR表示來(lái)自圖10所示的奇偶校驗(yàn)器33的指令 總線錯(cuò)誤信號(hào)輸入。另外,iaccess、 irdy、 IRDY和ISIZE分別表示指令代 碼的內(nèi)部存取請(qǐng)求、指令代碼的內(nèi)部就緒信號(hào)輸出、來(lái)自存儲(chǔ)器部分3的 指令代碼的就緒信號(hào)輸入和輸出到存儲(chǔ)器部分3的指令代碼的大小。此 外,DA、 DDout和DDin分別表示數(shù)據(jù)地址、輸出數(shù)據(jù)和輸入數(shù)據(jù),dberr 表示內(nèi)部數(shù)據(jù)總線錯(cuò)誤信號(hào)輸出,而DBERR表示來(lái)自圖IO所示的奇偶校 驗(yàn)器33的數(shù)據(jù)總線錯(cuò)誤信號(hào)輸入。此外,daccess、 drdy、 DRDY和 DSIZE分別表示數(shù)據(jù)的內(nèi)部存取請(qǐng)求、數(shù)據(jù)的內(nèi)部就緒信號(hào)輸出、來(lái)自存 儲(chǔ)器部分4的數(shù)據(jù)的就緒信號(hào)輸入和輸出到存儲(chǔ)器部分4的數(shù)據(jù)的大小。指令的地址被接連存儲(chǔ)在部分51到54的中間寄存器Tia—f —Tia—dec —Tia一e — Tia—m中。如果對(duì)于某指令,運(yùn)算結(jié)果被設(shè)置在運(yùn)算寄存器Ri (i二0到15)中,并且該運(yùn)算寄存器Ri將被用于下一個(gè)指令,則設(shè)置在運(yùn) 算寄存器Ri中的運(yùn)算結(jié)果將不會(huì)及時(shí)地到達(dá)D部分52。由于這個(gè)原因, 提供了允許將運(yùn)算單元532的輸出設(shè)置在中間寄存器Ta或Tb中的路線, 即,寄存器旁路路線531。按CPU2獲取指令的順序來(lái)執(zhí)行指令的處理。每輸入一個(gè)時(shí)鐘,每個(gè) 指令就被接連地傳送到F部分51、 D部分52、 E部分53和M部分54,并
且CPU 2根據(jù)指令來(lái)操作。如果F部分51獲得指令I(lǐng)I,并且響應(yīng)于下一 個(gè)時(shí)鐘這個(gè)指令I(lǐng)I被傳送到D部分52,則F部分51響應(yīng)于所述的下一時(shí) 鐘同時(shí)獲得指令12。這種操作被重復(fù),從而進(jìn)行對(duì)指令I(lǐng)I到15的流水線 處理。在本實(shí)施例中,當(dāng)生成指令總線錯(cuò)誤IBERR或數(shù)據(jù)總線錯(cuò)誤DBERR 時(shí),執(zhí)行總線錯(cuò)誤處理以在不執(zhí)行重試處理的情況下(除了其中執(zhí)行EIT 過(guò)程的情況之外)對(duì)總線錯(cuò)誤進(jìn)行處理。首先,將給出對(duì)生成指令總線錯(cuò)誤IBERR的情況的描述。在這種情況 下,當(dāng)在指令獲取過(guò)程中生成指令總線錯(cuò)誤IBERR時(shí),為了維持指令的連 續(xù)性,D部分52等待,直到確認(rèn)在剛剛在前的指令處沒(méi)有生成數(shù)據(jù)總線錯(cuò) 誤DBERR。如果在剛剛在前的指令處沒(méi)有生成數(shù)據(jù)總線錯(cuò)誤DBERR,則 本實(shí)施例的異常處理器522在下一個(gè)周期中提供用于轉(zhuǎn)移到未定義異常的 指令,隨后,指令總線錯(cuò)誤計(jì)數(shù)器IBER—CNTR的值被向上計(jì)數(shù)。接下來(lái),將給出對(duì)生成數(shù)據(jù)總線錯(cuò)誤DBERR的情況的描述。在這種 情況下,當(dāng)在M部分54中生成數(shù)據(jù)總線錯(cuò)誤DBERR時(shí),在M部分54的 M階段中禁止將值設(shè)置在通用寄存器部分55內(nèi)的運(yùn)算寄存器RO到R15 中。在生成數(shù)據(jù)總線錯(cuò)誤DBERR的指令之后,在中斷向量被讀取前,在 運(yùn)算寄存器ro到r15中的值的設(shè)置被禁止,直到在m部分54中對(duì)所獲 得的指令的處理結(jié)束。在生成數(shù)據(jù)總線錯(cuò)誤DBERR之后,異常處理器 522在下一個(gè)周期中提供EIT過(guò)程的指令。圖13是用于說(shuō)明本第一實(shí)施例的指令定序器521的操作的流程圖。在 新獲得指令代碼之后,指令代碼被輸入到D部分52 (步驟Sll),然后指 令代碼被譯碼(步驟S12)。如果譯碼結(jié)果為指令代碼是正常的,則指令 的運(yùn)算模式以及通用寄存器部分55中對(duì)運(yùn)算有必要的內(nèi)容被設(shè)置在中間 寄存器Tdec、 Ta、 Tb和Tdd中,并提供到E部分53 (步驟S13)。此 后,在下一周期中,下一個(gè)指令被輸入并且譯碼被啟動(dòng)。如果譯碼結(jié)果是未定義的指令或外部中斷,則執(zhí)行根據(jù)總線錯(cuò)誤的處 理或者根據(jù)所述中斷的處理。如果生成指令總線錯(cuò)誤IBERR,則處理前進(jìn) 到步驟S14。如果生成數(shù)據(jù)總線錯(cuò)誤DBERR,則處理前進(jìn)到步驟S23或S26。如果數(shù)據(jù)總線錯(cuò)誤DBERR是在向量存取的過(guò)程中被生成的,或者數(shù) 據(jù)總線錯(cuò)誤DBERR是在保存PS寄存器的內(nèi)容的過(guò)程中被生成的,則處理 前進(jìn)到步驟S23。另一方面,如果數(shù)據(jù)總線錯(cuò)誤DBERR是在保存PC寄存 器的內(nèi)容的過(guò)程中被生成的,則處理前進(jìn)到步驟S26。如果生成其它中 斷,則處理前進(jìn)到步驟S29。步驟S14判斷數(shù)據(jù)總線錯(cuò)誤輸出dberr是否被輸入了,并且如果在步 驟S14中的判斷結(jié)果為否,則步驟S15插入不操作(NOP)。步驟S16對(duì) 判斷數(shù)據(jù)總線錯(cuò)誤輸出dberr是否被輸入,并且如果在步驟S16中的判斷 結(jié)果為否,則步驟S17插入NOP。如果在步驟S14或步驟S16中的判斷結(jié) 果為是,則處理返回到步驟S14。為了轉(zhuǎn)移到異常中斷的例程,g卩,指令 總線錯(cuò)誤IBERR的中斷例程,步驟S18從向量表獲取向量地址,并向E 部分53提供用于計(jì)算地址的運(yùn)算模式以及通用寄存器部分55的對(duì)于運(yùn)算 有必要的內(nèi)容。在下一周期中,步驟S19向E部分53提供用于保存PS寄 存器的內(nèi)容的運(yùn)算模式以及通用寄存器部分55的對(duì)于運(yùn)算有必要的內(nèi) 容。步驟S20向E部分53提供用于保存PC寄存器的內(nèi)容的運(yùn)算模式以及 通用寄存器55的對(duì)于運(yùn)算有必要的內(nèi)容。步驟S18到S20構(gòu)成了 EIT過(guò) 程。此后,步驟S21判斷數(shù)據(jù)總線錯(cuò)誤輸出dberr是否被輸入。如果在步 驟S21中的判斷結(jié)果為否,則步驟S22對(duì)是否存在其它中斷或錯(cuò)誤進(jìn)行判 斷。如果不存在其它中斷或錯(cuò)誤并且步驟S22的判斷結(jié)果為否,則處理返 回到步驟Sll以對(duì)下一指令進(jìn)行譯碼。如果步驟S21或S22中的判斷結(jié)果 為是,則處理返回到步驟S14。為了轉(zhuǎn)移到異常中斷的例程,即數(shù)據(jù)總線錯(cuò)誤DBERR的中斷例程, 步驟S23從向量表獲得向量地址,并向E部分53提供用于計(jì)算地址的運(yùn) 算模式以及通用寄存器部分55的對(duì)于運(yùn)算有必要的內(nèi)容。在下一周期 中,步驟S24向E部分53提供用于保存PS寄存器的內(nèi)容的運(yùn)算模式以及 通用寄存器部分55的對(duì)于運(yùn)算有必要的內(nèi)容。步驟S25向E部分53提供 用于保存PC寄存器的內(nèi)容的運(yùn)算模式以及通用寄存器部分55的對(duì)于運(yùn)算 有必要的內(nèi)容,然后處理前進(jìn)到步驟S21。步驟S23到步驟S25構(gòu)成了 EIT過(guò)程。 為了轉(zhuǎn)移到異常中斷的例程,即數(shù)據(jù)總線錯(cuò)誤DBERR的中斷例程, 步驟S26從向量表獲得向量地址,并向E部分53提供用于計(jì)算地址的運(yùn) 算模式以及通用寄存器部分55的對(duì)于運(yùn)算有必要的內(nèi)容。步驟S27在下 一周期中插入NOP。步驟S28向E部分53提供用于保存PC寄存器的內(nèi) 容的運(yùn)算模式以及通用寄存器部分55的對(duì)于運(yùn)算有必要的內(nèi)容,然后處 理前進(jìn)到步驟S21。步驟S26到步驟S28構(gòu)成了 EIT過(guò)程。為了轉(zhuǎn)移到其它中斷的例程,步驟S293從向量表獲得向量地址,并 向E部分53提供用于計(jì)算地址的運(yùn)算模式以及通用寄存器部分55的對(duì)于 運(yùn)算有必要的內(nèi)容。在下一周期中,步驟S30向E部分53提供用于保存 PS寄存器的內(nèi)容的運(yùn)算模式以及通用寄存器部分55的對(duì)于運(yùn)算有必要的 內(nèi)容。步驟S31向E部分53提供用于保存PC寄存器的內(nèi)容的運(yùn)算模式以 及通用寄存器部分55的對(duì)于運(yùn)算有必要的內(nèi)容,然后處理前進(jìn)到步驟 S21。步驟S29到步驟S31構(gòu)成了EIT過(guò)程。因此,在輸入到指令定序器521的指令代碼為正常的情況下,類(lèi)似于 傳統(tǒng)CPU的處理被執(zhí)行。但是,如果在譯碼的過(guò)程中生成指令總線錯(cuò)誤 IBERR,則插入NOP直到確認(rèn)在剛剛在前的指令處沒(méi)有生成數(shù)據(jù)總線 Dbus錯(cuò)誤為止。該確認(rèn)最多花費(fèi)2個(gè)周期的時(shí)間。此后,與指令總線錯(cuò)誤 IBERR相對(duì)應(yīng)的EIT過(guò)程的指令被輸入。另一方面,如果在譯碼過(guò)程中生 成數(shù)據(jù)總線錯(cuò)誤DBERR,則與數(shù)據(jù)總線錯(cuò)誤DBERR相對(duì)應(yīng)的EIT過(guò)程的 指令被輸入,并且當(dāng)在EIT過(guò)程期間生成數(shù)據(jù)總線錯(cuò)誤DBERR、在向量 存取過(guò)程中生成數(shù)據(jù)總線錯(cuò)誤DBERR以及在保存PS寄存器的內(nèi)容的過(guò)程 中生成數(shù)據(jù)總線錯(cuò)誤DBERR時(shí),相同的操作被執(zhí)行。如果在保存PC寄 存器的內(nèi)容的過(guò)程中生成數(shù)據(jù)總線錯(cuò)誤DBERR,則處理經(jīng)過(guò)一序列路 線,該序列路線執(zhí)行向量存取以及PC寄存器的內(nèi)容的保存的重試。圖14是用于說(shuō)明在指令總線Ibus上生成錯(cuò)誤的情況下的操作的時(shí)序 圖。在圖14以及隨后將描述的圖15、圖16、圖19和圖20中,F(xiàn)、 D、 E 和M分別指示F部分51 、 D部分52、 E部分53和M部分54 (即,F(xiàn)階 段、D階段、E階段和M階段的處理),ED表示在D階段中的EIT過(guò) 程,EE表示在E階段中的EIT過(guò)程,而EM表示在M階段中的EIT過(guò)
程。另外,縱向延伸的矩形標(biāo)記指示寄存器的處理,由四個(gè)矩形構(gòu)成的四 方形標(biāo)記指示譯碼器的處理,具有"+ "符號(hào)的環(huán)形標(biāo)記指示ALU的處理,nop指示不操作(NOP) , LD指示加載(LoaD)指令,而ST指示存 儲(chǔ)(STore)指令。此外,在圖14到圖16中,與圖12中的相應(yīng)部分相同 的那些部分由相同的標(biāo)號(hào)來(lái)指定。如圖14所示,在各個(gè)周期cyclel到cycle9中執(zhí)行以下處理。周期cyclel是指令I(lǐng)I的獲取周期。這個(gè)指令I(lǐng)I是生成指令總線錯(cuò)誤 IBERR的指令的剛剛在前的指令。周期cycle2是指令I(lǐng)I的譯碼周期,并且還是指令12的獲取周期。在 這個(gè)周期cyde2中,指令總線錯(cuò)誤IBERR被輸入到CPU 2。在周期cycle3中,通過(guò)鎖存指令總線錯(cuò)誤IBERR (外部信號(hào)),指令 總線錯(cuò)誤iberr (內(nèi)部信號(hào))被獲得,并且被輸入到指令定序器521。因 此,指令定序器521向E部分53提供與NOP指令相對(duì)應(yīng)的運(yùn)算模式信 號(hào),直到確認(rèn)不存在剛剛在前的指令I(lǐng)l的數(shù)據(jù)總線錯(cuò)誤DBERR。在周期cycle4中,D部分52繼續(xù)向E部分53提供與NOP指令相對(duì)應(yīng) 的運(yùn)算模式信號(hào)。這時(shí),在M部分54中產(chǎn)生指令I(lǐng)I的數(shù)據(jù)總線Dbus存 取,并且沒(méi)有生成數(shù)據(jù)總線錯(cuò)誤DBERR。于是,在周期cycle5的開(kāi)始 處,指令總線錯(cuò)誤計(jì)數(shù)器IBER一CNTR計(jì)數(shù),并且存儲(chǔ)器部分3 (或存儲(chǔ) 器部分4)被切換。如果在周期cycle4中生成了數(shù)據(jù)總線錯(cuò)誤DBERR,則 執(zhí)行針對(duì)生成了數(shù)據(jù)總線錯(cuò)誤的情況的操作,如隨后將結(jié)合圖15來(lái)描述 的。在周期cycle5中,為了響應(yīng)于在針對(duì)數(shù)據(jù)總線Dbus的指令I(lǐng)I的存取 周期中生成的錯(cuò)誤而轉(zhuǎn)移到指令總線Ibus的錯(cuò)誤處理的例程,D部分52 將用于計(jì)算向量地址的運(yùn)算模式以及通用寄存器部分55的內(nèi)容設(shè)置到中 間寄存器Ta和Tb,并將其提供到E部分53。通用寄存器55的內(nèi)容包括 表示向量表的起始地址的TBR,以及表示中斷號(hào)并指示從向量表的起始點(diǎn) 開(kāi)始的地址位置的VectNo。在周期cycle6中,E部分53對(duì)存在針對(duì)指令總線Ibus的錯(cuò)誤處理例 程的向量地址的地址進(jìn)行計(jì)算。與此同時(shí),D部分52通過(guò)指令定序器521
在中間寄存器Ta和Tb中設(shè)置用于保存PS寄存器的內(nèi)容的運(yùn)算模式以及 通用寄存器部分55的內(nèi)容,并將其提供到E部分53。在周期cycle7中,經(jīng)由數(shù)據(jù)總線Dbiis來(lái)獲得向量地址,并且在周期 cycle7之后,所述向量地址被加載到PC寄存器。E部分53對(duì)PS寄存器的 內(nèi)容將被寫(xiě)入的地址進(jìn)行計(jì)算,并將所述地址設(shè)置在中間寄存器Te中。D 部分52向E部分53提供用于對(duì)保存發(fā)生錯(cuò)誤的PC寄存器的值(EPC寄 存器的內(nèi)容)的地址進(jìn)行計(jì)算的運(yùn)算模式以及通用寄存器部分55的內(nèi) 容。在周期cycle8中,從向量表加載到指令總線Ibus的PC寄存器的值被 輸出作為指令總線Ibus的地址IA,并且指令被從針對(duì)指令總線Ibus的錯(cuò) 誤處理例程的地址中獲得。對(duì)于數(shù)據(jù)總線Dbus, PS寄存器的值被寫(xiě)入存 儲(chǔ)器部分3 (或存儲(chǔ)器部分4),并且運(yùn)算寄存器R15的值被更新。E部 分53對(duì)用于保存發(fā)生錯(cuò)誤的PC寄存器的值(EPC寄存器的內(nèi)容)的地址 進(jìn)行計(jì)算。D部分52檢査以確定是否存在接下來(lái)將被接受的中斷等,并且 如果不存在接下來(lái)將被接受的中斷等,則插入NOP。另一方面,如果存在 接下來(lái)將被接受的中斷等,D部分52則對(duì)用于獲取所述中斷的向量地址的 運(yùn)算模式以及通用寄存器部分55的內(nèi)容進(jìn)行準(zhǔn)備。為了方便起見(jiàn),圖14 示出了不存在接下來(lái)將被接受的中斷等的情況。在周期cycle9中,發(fā)生錯(cuò)誤的PC寄存器的值(EPC寄存器的內(nèi)容) 被從數(shù)據(jù)總線Dbus保存到存儲(chǔ)器部分3 (或存儲(chǔ)器部分4)中,并且運(yùn)算 寄存器R15的值被更新。E部分53執(zhí)行NOP。 D部分52對(duì)指令總線Ibus 的錯(cuò)誤處理例程的指令進(jìn)行譯碼。在周期cycle9之后,針對(duì)指令的正常處 理被執(zhí)行。因此,當(dāng)生成指令總線錯(cuò)誤IBERR并且針對(duì)剛剛在前的指令沒(méi)有生成 數(shù)據(jù)總線錯(cuò)誤DBERR時(shí),指令總線錯(cuò)誤計(jì)數(shù)器IBER_CNTR計(jì)數(shù)。如果 當(dāng)所有位都為"1"(全"1")時(shí)指令總線錯(cuò)誤IBERR被生成,則并非所 有位都變?yōu)?0"(全"0"),并且CPU 2輸出HALT (停止工作)信號(hào) 并呈現(xiàn)停止工作的狀態(tài)。僅當(dāng)CPU2被復(fù)位時(shí),指令總線錯(cuò)誤計(jì)數(shù)器 IBER—CNTR才被復(fù)位。
圖15是用于說(shuō)明在數(shù)據(jù)總線Dbus上生成錯(cuò)誤的情況下的操作的時(shí)序 圖。在圖15中,步驟S101執(zhí)行"LD @Rj, Ri",步驟S102取消指令I(lǐng)I 并且步驟S103取消指令12。步驟S104執(zhí)行"LD @(TBR, VectNo), PC",步驟S105執(zhí)行"ST PS, @-R15",并且步驟S106執(zhí)行"ST EPC, @-R15"。步驟S107執(zhí)行"N0P1",并且如果存在下一個(gè)EIT過(guò)程,則 重復(fù)步驟S104到S106。步驟S108執(zhí)行異常程序的指令。TBR表示向量 表的起始地址,VectNo.表示中斷號(hào)并指示從向量表的起始開(kāi)始的地址位 置。如圖15所示,在各個(gè)周期cyclel到cycle9中執(zhí)行以下處理。周期cyclel是在數(shù)據(jù)總線Dbus的存取周期中針對(duì)其生成了數(shù)據(jù)總線 錯(cuò)誤DBERR的指令I(lǐng)I的獲取周期。這個(gè)指令I(lǐng)I是用于經(jīng)由數(shù)據(jù)總線 Dbus從存儲(chǔ)器部分3 (或存儲(chǔ)器部分4)讀取數(shù)據(jù)的指令。在周期cycle2中,指令12 (或指令I(lǐng)I)被獲得。D部分52對(duì)指令I(lǐng)I 進(jìn)行譯碼。在周期cycle3中,E部分53計(jì)算指令I(lǐng)I的地址。D部分52對(duì)指令12 進(jìn)行譯碼。F部分51獲取指令13。在周期cycle4中,對(duì)指令I(lǐng)I的讀取訪問(wèn)經(jīng)由數(shù)據(jù)總線Dbus來(lái)進(jìn)行, 但是錯(cuò)誤被生成,并且數(shù)據(jù)總線錯(cuò)誤DBERR被輸入到CPU 2。因此,所 讀取的數(shù)據(jù)并沒(méi)有被設(shè)置在通用寄存器部分55 (Ri)中。另外,通過(guò)數(shù)據(jù) 總線Dbus的訪問(wèn)而在通用寄存器部分55中進(jìn)行的值的設(shè)置被禁止,直到 周期cycle6。 E部分53執(zhí)行指令I(lǐng)2,而D部分52對(duì)指令13進(jìn)行譯碼。在周期cycle5中,指令12的訪問(wèn)經(jīng)由數(shù)據(jù)總線Dbus來(lái)進(jìn)行,但是通 過(guò)訪問(wèn)而獲得的數(shù)據(jù)并沒(méi)有被加載到通用寄存器部分55。換句話說(shuō),指令 12被取消。數(shù)據(jù)總線錯(cuò)誤計(jì)數(shù)器DBER—CNTR響應(yīng)于數(shù)據(jù)總線錯(cuò)誤 DBERR而計(jì)數(shù),并且存儲(chǔ)器部分3 (或存儲(chǔ)器部分4)被切換。E部分53 執(zhí)行指令13,并且D部分52基于數(shù)據(jù)總線錯(cuò)誤dberr來(lái)向E部分53提供 用于獲取向量地址的運(yùn)算模式以及通用寄存器部分55的對(duì)所述運(yùn)算模式 有必要的值,所述數(shù)據(jù)總線錯(cuò)誤dberr是通過(guò)鎖存作為外部信號(hào)的數(shù)據(jù)總 線錯(cuò)誤DBERR而獲得的內(nèi)部信號(hào)。在這種狀態(tài)下,在周期cycle4中獲得 的指令被丟棄。
在周期cyde6中,指令13的周期經(jīng)由數(shù)據(jù)總線Dbus來(lái)執(zhí)行,但是其 結(jié)果沒(méi)有被反映到通用寄存器部分55。 E部分53計(jì)算向量地址。D部分 52將用于保存PS寄存器的內(nèi)容的運(yùn)算模式以及通用寄存器部分55的對(duì)所 述運(yùn)算模式有必要的內(nèi)容設(shè)置在中間寄存器中。在周期cycle7中,向量被經(jīng)由數(shù)據(jù)總線Dbus從向量地址中讀取,并 且所讀取的向量被設(shè)置在PC寄存器中。E部分53計(jì)算用于保存PS寄存 器的內(nèi)容的地址。D部分52將用于對(duì)保存發(fā)生了錯(cuò)誤的PC寄存器的值的 地址進(jìn)行計(jì)算的運(yùn)算模式以及通用寄存器部分55的針對(duì)所述運(yùn)算模式的 內(nèi)容保存在中間寄存器中。在周期cycle8中,指令代碼經(jīng)由指令總線Ibus通過(guò)設(shè)置在PC寄存器 中的地址被獲得,并獲得錯(cuò)誤處理例程的起始地址。PS寄存器的內(nèi)容經(jīng)由 數(shù)據(jù)總線Dbus被寫(xiě)入存儲(chǔ)器部分3 (或存儲(chǔ)器部分4) 。 E部分53計(jì)算用 于保存發(fā)生了錯(cuò)誤的PC寄存器的值的地址。在D部分52中,如果存在其 它異常中斷,則指令定序器521執(zhí)行EIT過(guò)程,但是如果不存在其它異常 中斷,則插入NOP。為了方便起見(jiàn),圖15示出了插入NOP的情況。在周期cycle9中,發(fā)生了錯(cuò)誤的PC寄存器的值經(jīng)由數(shù)據(jù)總線Dbus被 寫(xiě)入存儲(chǔ)器部分3 (或存儲(chǔ)器部分4),并且E部分53執(zhí)行NOP。 D部分 53執(zhí)行步驟S108的譯碼,并且在周期cycle9之后,針對(duì)指令的正常的處 理被執(zhí)行。因此,當(dāng)在數(shù)據(jù)總線Dbus上生成數(shù)據(jù)總線錯(cuò)誤DBERR時(shí),數(shù)據(jù)總線 錯(cuò)誤計(jì)數(shù)器DBER—CNTR進(jìn)行計(jì)數(shù)。如果當(dāng)所有位都為"1"(全"1") 時(shí)生成數(shù)據(jù)總線錯(cuò)誤DBERR,則并不是所有位都變?yōu)?0"(全 "0"),并且CPU2輸出HALT信號(hào)并呈現(xiàn)停止工作的狀態(tài)。僅當(dāng)CPU 2被復(fù)位時(shí),數(shù)據(jù)總線錯(cuò)誤計(jì)數(shù)器DBER—CNTR才被復(fù)位。圖16是用于說(shuō)明在EIT過(guò)程期間在數(shù)據(jù)總線上生成錯(cuò)誤的情況下的操 作的時(shí)序圖。如圖16所示,在各個(gè)周期cyclel到cyclel3中執(zhí)行了以下處 理。周期cyclel到cycle8對(duì)應(yīng)于如下序列其中由于在針對(duì)數(shù)據(jù)總線 Dbus的正常指令的存取周期中生成的數(shù)據(jù)總線錯(cuò)誤DBERR而執(zhí)行向量獲 取、PS寄存器內(nèi)容的保存以及PC寄存器內(nèi)容的保存。在周期cycle9中,在數(shù)據(jù)總線Dbus的存取周期中,按PC寄存器的內(nèi) 容被保存的順序,數(shù)據(jù)總線錯(cuò)誤DBERR被生成。由于這個(gè)原因,對(duì)運(yùn)算 寄存器R15進(jìn)行的寄存器值的更新被禁止。在周期cycly10中,數(shù)據(jù)總線錯(cuò)誤計(jì)數(shù)器DBER—CNTR的值被向上計(jì) 數(shù),存儲(chǔ)器部分3 (或存儲(chǔ)器部分4)被切換。由于不存在其它中斷,所 以在數(shù)據(jù)總線Dbus上沒(méi)有操作(NOP)被執(zhí)行。E部分53執(zhí)行已經(jīng)被讀 取的轉(zhuǎn)移(JMP)指令的操作。D部分52不對(duì)JMP指令12進(jìn)行譯碼,但 在中間寄存器中對(duì)用于重試向量獲取的運(yùn)算模式和寄存器值進(jìn)行設(shè)置。在周期cyclyll中,JMP指令I(lǐng)I周期在數(shù)據(jù)總線Dbus上執(zhí)行,但是 這個(gè)周期的結(jié)果并沒(méi)有被設(shè)置在通用寄存器部分55中。E部分53對(duì)所重 試的地址獲取的地址進(jìn)行計(jì)算。D部分52對(duì)是否存在其它中斷進(jìn)行檢査, 如果不存在其它中斷則插入NOP。在周期cyclel2中,在數(shù)據(jù)總線Dbus上進(jìn)行向量獲取的存取,并且這 個(gè)周期的結(jié)果被設(shè)置在PC寄存器中。因?yàn)椴淮嫫髌渌袛?,所以E部分 53執(zhí)行NOP。 D部分52將用于保存發(fā)生錯(cuò)誤的PC寄存器的值的運(yùn)算模 式以及通用寄存器部分55的對(duì)于該運(yùn)算模式有必要的內(nèi)容設(shè)置在中間寄 存器中。在周期cyclel3和隨后的周期中,由向量獲取所讀取的PC寄存器的值 被加載,發(fā)生錯(cuò)誤的PC寄存器的值被經(jīng)由數(shù)據(jù)總線Dbus來(lái)寫(xiě)入存儲(chǔ)器部 分3 (或存儲(chǔ)器部分4),并且指令被順序地執(zhí)行。[第二實(shí)施例]圖17是示出了本發(fā)明的第二實(shí)施例的重要部分的系統(tǒng)框圖。在圖17 中,與圖12中的相應(yīng)部分相同的那些部分被用相同的標(biāo)號(hào)來(lái)指示,并將 省略對(duì)它們的描述。在CPU 2A的F部分51A中提供了未定義代碼替換部 分512。這個(gè)未定義代碼替換部分512可以由選擇器來(lái)形成。在本實(shí)施例中,如果生成指令總線錯(cuò)誤IBERR或者數(shù)據(jù)總線錯(cuò)誤 DBERR,則執(zhí)行重試,并且如果總線錯(cuò)誤仍然被生成,則執(zhí)行總線錯(cuò)誤處 理。
首先,將給出對(duì)生成指令總線錯(cuò)誤IBERR的情況的描述。當(dāng)在指令獲取過(guò)程中生成指令總線錯(cuò)誤IBERR時(shí),所有流水線階段都被重新執(zhí)行,F(xiàn) 部分51的F階段的重試被執(zhí)行,并且指令總線錯(cuò)誤計(jì)數(shù)器IBER一CNTR的 值被更新。如果即使在執(zhí)行了指定次數(shù)的重試之后還是生成指令總線錯(cuò)誤 IBERR,則異常處理器522執(zhí)行對(duì)未定義異常的EIT過(guò)程。當(dāng)針對(duì)發(fā)生指 令總線錯(cuò)誤IBERR的指令的剛剛在前的指令而生成數(shù)據(jù)總線錯(cuò)誤DBERR 時(shí),取消對(duì)未定義異常的處理。接下來(lái),將給出對(duì)生成數(shù)據(jù)總線錯(cuò)誤DBERR的情況的描述。當(dāng)在M 部分54中生成數(shù)據(jù)總線錯(cuò)誤DBERR時(shí),在M部分54的M階段中禁止將 值設(shè)置在通用寄存器部分55內(nèi)的運(yùn)算寄存器R0到R15中。另外,所有的 流水線階段被重新執(zhí)行,M部分54的M階段的重試被執(zhí)行,并且數(shù)據(jù)總 線錯(cuò)誤計(jì)數(shù)器DBER—CNTR的值被更新。如果即使在執(zhí)行了指定次數(shù)的重 試之后還是生成數(shù)據(jù)總線錯(cuò)誤DBERR,則異常處理器522執(zhí)行對(duì)未定義 異常的EIT過(guò)程。在本實(shí)施例中,當(dāng)在一周期中生成數(shù)據(jù)總線錯(cuò)誤 DBERR時(shí),異常處理器522在這一周期中提供EIT過(guò)程的指令。如果在EIT過(guò)程的期間生成數(shù)據(jù)總線錯(cuò)誤DBERR,則執(zhí)行EIT過(guò)程 的重試。這種重試的生成模式可以與如上所述的第一實(shí)施例的相同。圖18是用于說(shuō)明本第二實(shí)施例的指令定序器521的操作的流程圖。在圖18中,與圖13中的相應(yīng)步驟相同的那些步驟被用相同的標(biāo)號(hào)來(lái)指示, 并將省略對(duì)它們的描述。在圖18中,如果譯碼所得的結(jié)果是未定義指 令,或者接受了外部(或其它)中斷,則執(zhí)行根據(jù)總線錯(cuò)誤的處理或者根 據(jù)中斷的處理。如果生成了數(shù)據(jù)總線錯(cuò)誤DBERR,則處理前進(jìn)到步驟S23 或S26。如果在向量存取過(guò)程中或者在保存PS寄存器內(nèi)容的過(guò)程中生成數(shù) 據(jù)總線錯(cuò)誤DBER,則處理前進(jìn)到步驟S23。另一方面,如果在保存PC 寄存器內(nèi)容的過(guò)程中生成數(shù)據(jù)總線錯(cuò)誤DBERR,則處理前進(jìn)到步驟S26。 如果生成了其它中斷,則處理前進(jìn)到步驟S29。在步驟S25或S28或S31之后,步驟S41對(duì)是否存在其它中斷或錯(cuò)誤 進(jìn)行判斷。如果既不存在中斷也不存在錯(cuò)誤并且步驟S41中的判斷結(jié)果為 否,則處理返回到步驟Sll以對(duì)下一指令進(jìn)行譯碼。如果在步驟S41中的
判斷結(jié)果為是,則處理返回到當(dāng)在步驟S12中的判斷結(jié)果為否時(shí)所執(zhí)行的 處理。因此,在輸入到指令定序器521的指令代碼為正常的情況下,執(zhí)行類(lèi) 似于傳統(tǒng)CPU的處理。但是,如果在譯碼過(guò)程中生成指令總線錯(cuò)誤,則 未定義指令替換部分512在F部分51和D部分52之間用未定義指令來(lái)替 換所述指令,而不是由指令定序器521來(lái)進(jìn)行復(fù)制,并且指令定序器521 并不對(duì)該指令進(jìn)行處理。對(duì)于生成數(shù)據(jù)總線錯(cuò)誤DBERR的情況的處理與 如上所述的第一實(shí)施例的相同。圖19是用于說(shuō)明在指令總線Ibus上生成錯(cuò)誤的情況的操作的時(shí)序 圖。如圖19所示,以下處理被在各個(gè)周期cyclel到cycle7中執(zhí)行。在周期cyclel中,開(kāi)始指令I(lǐng)I的獲取周期。如果在周期cycle2中開(kāi)始指令12的獲取周期卻生成了指令總線錯(cuò)誤 IBERR,并且在周期cycle3中響應(yīng)于其而更新了指令總線錯(cuò)誤計(jì)數(shù)器 IBER—CNTR的值,則從存儲(chǔ)器部分3 (或存儲(chǔ)器部分4)的相同地址重新 獲取指令12。在這種狀態(tài)下,指令I(lǐng)I的譯碼所得的信息保留被存儲(chǔ)在D 部分52的中間寄存器Tdec、 Ta、 Tb和Tdd中。在周期cycle4中,因?yàn)楫?dāng)在周期cycle3中指令總線錯(cuò)誤計(jì)數(shù)器 IBER—CNTR的所有位都為"1"(全"1")時(shí)生成了指令總線錯(cuò)誤 IBERR,所以輸入到D部分52 (譯碼器523)的指令代碼被未定義指令代 碼取代。因此,提供給E部分53的運(yùn)算信息是設(shè)置在中間寄存器中的用 于執(zhí)行未定義指令中斷的向量獲取的運(yùn)算信息。在周期cycle5中,經(jīng)由數(shù)據(jù)總線Dbus來(lái)執(zhí)行指令I(lǐng)I的周期,沒(méi)有生 成數(shù)據(jù)總線錯(cuò)誤DBERR,并且沒(méi)有取消下一指令。E部分53對(duì)用于向量 獲取的地址進(jìn)行計(jì)算。D部分52將用于保存PS寄存器的內(nèi)容的運(yùn)算信息 設(shè)置在中間寄存器中。在周期cycle6中,經(jīng)由數(shù)據(jù)總線Dbus來(lái)執(zhí)行向量獲取,并且從存儲(chǔ) 器部分3 (或存儲(chǔ)器部分4)讀取的數(shù)據(jù)被設(shè)置在PC寄存器中。E部分53 對(duì)用于保存PC寄存器內(nèi)容的地址進(jìn)行計(jì)算。D部分52將用于對(duì)用于保存 發(fā)生了錯(cuò)誤的PC寄存器的值(EPC寄存器的內(nèi)容)的地址進(jìn)行計(jì)算的運(yùn)
算信息設(shè)置到中間寄存器中。在周期cyde7和隨后的周期中,設(shè)置在PC寄存器中的值被作為地址 值來(lái)輸出在指令總線Ibus上,并且在錯(cuò)誤處理的例程的起始處的指令被獲 取。PS寄存器的內(nèi)容被經(jīng)由數(shù)據(jù)總線Dbus來(lái)存儲(chǔ)在存儲(chǔ)器部分3 (或存 儲(chǔ)器部分4)中,并且運(yùn)算寄存器R15的值被更新。E部分53對(duì)用于保存 EPC寄存器的內(nèi)容的地址進(jìn)行計(jì)算。如果存在其它中斷,則D部分52將 該中斷的向量獲取的運(yùn)算信息設(shè)置到中間寄存器中。圖19示出了不存在 其它中斷的情況,這樣NOP被插入。此后執(zhí)行的周期與在普通的或傳統(tǒng) 的CPU中的對(duì)指令的流水線處理的那些周期相同。圖20是用于說(shuō)明針對(duì)在數(shù)據(jù)總線Dbus上生成錯(cuò)誤的情況的操作的時(shí) 序圖。在圖20中,步驟S201執(zhí)行"LD @Rj, Ri",步驟S202取消指令 II,而步驟S203取消指令12并且執(zhí)行"LD @ (TBR, VectNo), PC"。步驟S204執(zhí)行"ST PS, @-R15",而步驟S205執(zhí)行"ST EPC, @-R15"。步驟S206執(zhí)行"N0P1",并且如果存在下一個(gè)EIT過(guò)程則重 復(fù)步驟S203到S205。步驟S207執(zhí)行異常程序的指令。如圖20所示,以 下處理被在各個(gè)周期cyclel到cycle8中執(zhí)行。在周期cyclel到cycle4中,通過(guò)流水線處理來(lái)順序地執(zhí)行對(duì)針對(duì)其而 在數(shù)據(jù)總線Dbns上生成錯(cuò)誤的加載(LD)指令、下一個(gè)指令I(lǐng)1和指令I(lǐng)2 的處理。為了方便起見(jiàn),假設(shè)在圖20中數(shù)據(jù)總線錯(cuò)誤DBERR是在周期 cycle4中針對(duì)LD指令而在數(shù)據(jù)總線Dbus上生成的。在周期cycle5中,因?yàn)樵谥芷赾yde4中生成了數(shù)據(jù)總線錯(cuò)誤 DBERR,所以數(shù)據(jù)總線錯(cuò)誤計(jì)數(shù)器DBER—CNTR進(jìn)行計(jì)數(shù),并且在周期 cycle5中執(zhí)行了數(shù)據(jù)總線Dbus的周期的重試。在這種狀態(tài)下,指令總線 Ibus、 D部分52和E部分53上的結(jié)果并沒(méi)有被加載到中間寄存器,并且值被按其原來(lái)的樣子來(lái)存儲(chǔ)。如果當(dāng)數(shù)據(jù)總線錯(cuò)誤計(jì)數(shù)器dberj:ntr的所有位都為"1"(全"1")時(shí)生成數(shù)據(jù)總線錯(cuò)誤DBERR,則執(zhí)行對(duì)該 數(shù)據(jù)總線錯(cuò)誤DBERR的EIT過(guò)程。通過(guò)不將M部分54的M階段的結(jié)果 反映給在通用寄存器部分55內(nèi)的運(yùn)算寄存器R0到R15,發(fā)生數(shù)據(jù)總線錯(cuò) 誤DBERR的指令的下一指令(指令I(lǐng)I)被取消。另外,指令定序器521
利用用于在D部分52中進(jìn)行向量獲取的指令來(lái)替換下一指令12,并且將 用于對(duì)向量地址的地址進(jìn)行計(jì)算的信息提供給E部分53。在周期cycle6中,E部分53對(duì)向量地址的地址進(jìn)行計(jì)算。另外,用于 保存PS寄存器的內(nèi)容的運(yùn)算信息被設(shè)置在中間寄存器中。在周期cycle7中,向量地址被經(jīng)由數(shù)據(jù)總線Dbus來(lái)讀取,并且針對(duì) 數(shù)據(jù)總線錯(cuò)誤DBERR的錯(cuò)誤處理例程的起始地址被讀取并設(shè)置在PC寄 存器中。E部分53對(duì)用于保存PS寄存器的內(nèi)容的地址進(jìn)行計(jì)算。D部分 52將用于保存發(fā)生了錯(cuò)誤的PC寄存器的值(EPC寄存器的內(nèi)容)的運(yùn)算 信息提供給E部分53。在周期cyde8和隨后的周期中,經(jīng)由指令總線Ibus來(lái)從在PC寄存器 中的新值的地址中讀取指令。PS寄存器的內(nèi)容被經(jīng)由數(shù)據(jù)總線Dbus來(lái)保 存在存儲(chǔ)器部分3 (或存儲(chǔ)器部分4)中。E部分53對(duì)用于保存EPC寄存 器的內(nèi)容的地址進(jìn)行計(jì)算。此后執(zhí)行的操作與由普通的或傳統(tǒng)的CPU所進(jìn) 行的存取操作相同。因此,根據(jù)在此之前描述的各個(gè)實(shí)施例,在CPU中提供了總線錯(cuò)誤輸 入部分或裝置,或者總線錯(cuò)誤信號(hào)線。由于這個(gè)原因,即使當(dāng)在存儲(chǔ)器部 分中發(fā)生了諸如奇偶校驗(yàn)錯(cuò)誤之類(lèi)的錯(cuò)誤時(shí),也可以執(zhí)行錯(cuò)誤處理并繼續(xù) CPU的運(yùn)行。另外,當(dāng)CPU獲得指令并檢測(cè)到奇偶校驗(yàn)錯(cuò)誤時(shí),發(fā)生了 奇偶校驗(yàn)錯(cuò)誤的指令將不被執(zhí)行。即使CPU獲得指令,檢測(cè)到奇偶校驗(yàn)錯(cuò) 誤并且沒(méi)有執(zhí)行該指令,也不會(huì)生成毫無(wú)意義的異常。此外,即使在指令 總線上生成了總線錯(cuò)誤,并在此后針對(duì)剛剛在前的指令生成了數(shù)據(jù)總線錯(cuò) 誤,也沒(méi)有必要考慮軟件處理的優(yōu)先級(jí)順序。可以在生成總線錯(cuò)誤之后立 即由總線錯(cuò)誤計(jì)數(shù)器部分或裝置來(lái)切換存儲(chǔ)器部分。本申請(qǐng)要求在2Q06年9月29日于日本專(zhuān)利局提出的日本專(zhuān)利申請(qǐng) No.2006-269635的優(yōu)先權(quán),該申請(qǐng)公開(kāi)的內(nèi)容通過(guò)引用而結(jié)合于此。此外,本發(fā)明并不限于這些實(shí)施例,在不脫離本發(fā)明的范圍的情況下 可以做出各種變化和修改。
權(quán)利要求
1.一種用于處理在CPU的總線上生成的錯(cuò)誤的錯(cuò)誤處理方法,包括以下步驟a)通過(guò)總線錯(cuò)誤輸入部分,向所述CPU輸入在所述CPU的指令總線和數(shù)據(jù)總線中的至少一個(gè)上生成的總線錯(cuò)誤;b)通過(guò)所述CPU的總線錯(cuò)誤計(jì)數(shù)器部分來(lái)對(duì)總線錯(cuò)誤計(jì)數(shù);以及c)基于所述總線錯(cuò)誤計(jì)數(shù)器部分的值,指定與所述CPU相耦合的存儲(chǔ)器部分的區(qū)域。
2. 如權(quán)利要求1所述的錯(cuò)誤處理方法,包括d) 如果在所述指令總線上生成所述總線錯(cuò)誤并做出判斷以轉(zhuǎn)移到未 定義指令的異常向量,或者如果在所述數(shù)據(jù)總線上生成了所述總線錯(cuò)誤, 則當(dāng)生成所述總線錯(cuò)誤時(shí),更新所述總線錯(cuò)誤計(jì)數(shù)器部分的值。
3. 如權(quán)利要求l所述的錯(cuò)誤處理方法,包括e) 如果在所述數(shù)據(jù)總線上生成所述總線錯(cuò)誤,則當(dāng)生成所述總線錯(cuò) 誤時(shí),更新所述總線錯(cuò)誤計(jì)數(shù)器部分的值。
4. 如權(quán)利要求1所述的錯(cuò)誤處理方法,包括f) 當(dāng)在所述指令總線上生成所述總線錯(cuò)誤時(shí),在確認(rèn)針對(duì)剛剛在前的 指令沒(méi)有生成總線錯(cuò)誤之后,執(zhí)行未定義指令的處理。
5. 如權(quán)利要求1所述的錯(cuò)誤處理方法,包括g) 當(dāng)在所述數(shù)據(jù)總線上生成所述總線錯(cuò)誤時(shí),通過(guò)禁止由隨后的指 令對(duì)通用寄存器部分進(jìn)行設(shè)置來(lái)執(zhí)行未定義指令的處理。
6. 如權(quán)利要求1所述的錯(cuò)誤處理方法,包括h) 當(dāng)獲得指令時(shí)在所述存儲(chǔ)器部分中生成奇偶校驗(yàn)錯(cuò)誤的時(shí)候,向所述總線錯(cuò)誤輸入部分輸入錯(cuò)誤信號(hào),其中,當(dāng)所述CPU做出判斷以執(zhí)行生成了錯(cuò)誤的指令時(shí),所述CPU 執(zhí)行異常中斷陷阱(EIT)過(guò)程,并轉(zhuǎn)移到錯(cuò)誤處理的例程。
7. 如權(quán)利要求1所述的錯(cuò)誤處理方法,包括i) 當(dāng)在所述數(shù)據(jù)總線上生成奇偶校驗(yàn)錯(cuò)誤并且錯(cuò)誤信號(hào)通過(guò)所述總線錯(cuò)誤輸入部分被輸入到所述CPU時(shí),取消對(duì)隨后指令的處理。
8. 如權(quán)利要求1所述的錯(cuò)誤處理方法,其中,所述的步驟C)基于所 述總線錯(cuò)誤計(jì)數(shù)器部分的值、指令或數(shù)據(jù)的地址以及讀或?qū)懶盘?hào)來(lái)指定與 所述CPU相耦合的所述存儲(chǔ)器部分的頁(yè)。
9. 如權(quán)利要求1所述的錯(cuò)誤處理方法,包括j)通過(guò)將指令總線錯(cuò)誤和數(shù)據(jù)總線錯(cuò)誤存儲(chǔ)在指示所述CPU的狀態(tài) 的處理器狀態(tài)寄存器中,來(lái)指示所述總線錯(cuò)誤的生成。
10. 如權(quán)利要求1所述的錯(cuò)誤處理方法,包括k)當(dāng)生成指令總線錯(cuò)誤或數(shù)據(jù)總線錯(cuò)誤時(shí)執(zhí)行重試,并且如果即使 在所述重試之后還是生成總線錯(cuò)誤,則執(zhí)行總線錯(cuò)誤處理。
11. 一種信息處理裝置,包括 CPU;存儲(chǔ)器部分,所述存儲(chǔ)器部分與所述CPU相耦合;總線錯(cuò)誤輸入部分,所述總線錯(cuò)誤輸入部分被配置用于向所述CPU輸 入在所述CPU的指令總線和數(shù)據(jù)總線中的至少一個(gè)上生成的總線錯(cuò)誤;總線錯(cuò)誤計(jì)數(shù)器部分,所述總線錯(cuò)誤計(jì)數(shù)器部分被配置用于對(duì)在所述 CPU中生成的所述總線錯(cuò)誤進(jìn)行計(jì)數(shù);以及指定部分,所述指定部分被配置用于基于所述總線錯(cuò)誤計(jì)數(shù)器部分的 值來(lái)指定所述存儲(chǔ)器部分的區(qū)域。
12. 如權(quán)利要求ll所述的信息處理裝置,包括更新部分,所述更新部分被配置用于如果在所述指令總線上生成所 述總線錯(cuò)誤并做出判斷以轉(zhuǎn)移到未定義指令的異常向量,或者如果在所述 數(shù)據(jù)總線上生成了所述總線錯(cuò)誤,則當(dāng)所述總線錯(cuò)誤被生成時(shí),更新所述 總線錯(cuò)誤計(jì)數(shù)器部分的值。
13. 如權(quán)利要求ll所述的信息處理裝置,包括更新部分,所述更新部分被配置用于如果在所述數(shù)據(jù)總線上生成所 述總線錯(cuò)誤,則當(dāng)所述總線錯(cuò)誤被生成時(shí),更新所述總線錯(cuò)誤計(jì)數(shù)器部分 的值。
14. 如權(quán)利要求ll所述的信息處理裝置,包括被配置用于當(dāng)所述總線錯(cuò)誤在所述指令總線上生成時(shí),在確認(rèn)針對(duì)剛 剛在前的指令沒(méi)有生成總線錯(cuò)誤之后,執(zhí)行未定義指令的處理的部分。
15. 如權(quán)利要求ll所述的信息處理裝置,包括通用寄存器部分,所述通用寄存器部分包括所述總線錯(cuò)誤計(jì)數(shù)器部 分;以及被配置用于當(dāng)所述總線錯(cuò)誤在所述數(shù)據(jù)總線上生成時(shí),通過(guò)禁止由隨 后的指令對(duì)所述通用寄存器部分進(jìn)行設(shè)置來(lái)執(zhí)行未定義指令的處理的部 分。
16. 如權(quán)利要求ll所述的信息處理裝置,包括被配置用于當(dāng)指令被獲得時(shí)奇偶校驗(yàn)錯(cuò)誤在所述存儲(chǔ)器部分中被生成 的時(shí)候,向所述總線錯(cuò)誤輸入部分輸入錯(cuò)誤信號(hào)的部分,其中,在所述CPU做出判斷以執(zhí)行生成了錯(cuò)誤的指令時(shí),所述CPU 執(zhí)行異常中斷陷阱(EIT)過(guò)程,并轉(zhuǎn)移到錯(cuò)誤處理的例程。
17. 如權(quán)利要求ll所述的信息處理裝置,包括被配置用于當(dāng)奇偶校驗(yàn)錯(cuò)誤在所述數(shù)據(jù)總線上被生成并且錯(cuò)誤信號(hào)通過(guò)所述總線錯(cuò)誤輸入部分被輸入到所述CPU時(shí),取消對(duì)隨后指令的處理部分。
18. 如權(quán)利要求11所述的信息處理裝置,其中,所述的指定部分基于所述總線錯(cuò)誤計(jì)數(shù)器部分的值、指令或數(shù)據(jù)的地址以及讀或?qū)懶盘?hào)來(lái)指定與所述CPU相耦合的所述存儲(chǔ)器部分的頁(yè)。
19. 如權(quán)利要求ll所述的信息處理裝置,包括處理器狀態(tài)寄存器,所述處理器狀態(tài)寄存器被配置用于指示所述CPU的狀態(tài),其中,所述總線錯(cuò)誤的生成是通過(guò)將指令總線錯(cuò)誤和數(shù)據(jù)總線錯(cuò)誤存 儲(chǔ)在所述處理器狀態(tài)寄存器中來(lái)指示的。
20. 如權(quán)利要求ll所述的信息處理裝置,包括被配置用于當(dāng)指令總線錯(cuò)誤或數(shù)據(jù)總線錯(cuò)誤被生成時(shí)執(zhí)行重試,并且 如果即使在所述重試之后還是生成總線錯(cuò)誤則執(zhí)行總線錯(cuò)誤處理的部分。
全文摘要
本發(fā)明提供了一種錯(cuò)誤處理方法和信息處理裝置。錯(cuò)誤處理方法通過(guò)以下步驟來(lái)對(duì)在CPU的總線上生成的錯(cuò)誤進(jìn)行處理通過(guò)總線錯(cuò)誤輸入部分向CPU輸入在CPU的指令總線和數(shù)據(jù)總線中的至少一個(gè)上生成的總線錯(cuò)誤;通過(guò)CPU的總線錯(cuò)誤計(jì)數(shù)器部分對(duì)總線錯(cuò)誤計(jì)數(shù);以及基于總線錯(cuò)誤計(jì)數(shù)器部分的值來(lái)指定與CPU相耦合的存儲(chǔ)器部分的區(qū)域。
文檔編號(hào)G06F11/00GK101154171SQ20071014202
公開(kāi)日2008年4月2日 申請(qǐng)日期2007年8月20日 優(yōu)先權(quán)日2006年9月29日
發(fā)明者笹崎勛 申請(qǐng)人:富士通株式會(huì)社