專利名稱:在以正常模式執(zhí)行指令期間執(zhí)行硬件測(cè)試的處理器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般涉及數(shù)據(jù)處理,尤其是涉及在一個(gè)處理器內(nèi)部的硬件錯(cuò)誤檢測(cè)。更加特別地,本發(fā)明涉及一種在正常模式下操作時(shí)響應(yīng)于一條指令自我測(cè)試硬件錯(cuò)誤的處理器。
背景技術(shù):
一個(gè)典型的超標(biāo)量處理器由一個(gè)數(shù)字集成電路構(gòu)成,例如包含一個(gè)用于存儲(chǔ)指令的指令高速緩存、一個(gè)或多個(gè)用于執(zhí)行連續(xù)指令的執(zhí)行單元、一個(gè)用于執(zhí)行分支指令的分支單元、用于向各個(gè)執(zhí)行單元傳送指令的指令序列邏輯、以及用于存儲(chǔ)操作數(shù)和結(jié)果數(shù)據(jù)的寄存器。為了檢驗(yàn)復(fù)雜數(shù)字電路例如上面描述的傳統(tǒng)超標(biāo)量處理器在正常功能操作期間的正確操作,在電路設(shè)計(jì)中包含奇偶校驗(yàn)電路是眾所周知的。然而,考慮到對(duì)一超標(biāo)量處理器的每個(gè)計(jì)算電路進(jìn)行奇偶校驗(yàn)所涉及的費(fèi)用和復(fù)雜性,通常僅僅為存儲(chǔ)電路實(shí)現(xiàn)奇偶校驗(yàn)電路,例如處理器寄存器文件和芯片內(nèi)超高速緩存。因此,一個(gè)傳統(tǒng)處理器的計(jì)算電路在正常功能操作期間是經(jīng)常保持未經(jīng)測(cè)試的。因此,由一個(gè)硬件故障引起的計(jì)算錯(cuò)誤可能保持未被檢出的狀態(tài),這會(huì)導(dǎo)致數(shù)據(jù)損壞或系統(tǒng)故障。
發(fā)明內(nèi)容
著眼于本技術(shù)領(lǐng)域內(nèi)的上述及其他缺陷,本發(fā)明提供了一種利用空操作(或其他預(yù)定的)指令周期執(zhí)行一個(gè)處理器電路的硬件測(cè)試而不需要復(fù)雜奇偶校驗(yàn)電路的處理器。
根據(jù)本發(fā)明,一種能夠自我測(cè)試的處理器包含指令序列邏輯、執(zhí)行電路、與該執(zhí)行電路相連的數(shù)據(jù)存儲(chǔ)器、以及測(cè)試電路。在響應(yīng)于由指令序列邏輯提供的一個(gè)指令流內(nèi)的一個(gè)指令而進(jìn)行的處理器正常功能操作期間,測(cè)試電路檢測(cè)指令序列邏輯、執(zhí)行電路、以及數(shù)據(jù)存儲(chǔ)器中某一個(gè)內(nèi)的硬件錯(cuò)誤。在一個(gè)實(shí)施例中,通過(guò)比較由執(zhí)行相同功能的冗余電路響應(yīng)一個(gè)測(cè)試指令而輸出的值,就能夠檢測(cè)到一個(gè)硬件錯(cuò)誤。做為選擇或者另外,根據(jù)測(cè)試指令,通過(guò)執(zhí)行一個(gè)具有一個(gè)已知結(jié)果的算術(shù)或者邏輯操作(例如,乘以1,加0,等等),也能夠檢測(cè)出一個(gè)硬件錯(cuò)誤。
通過(guò)以下的詳細(xì)描述,本發(fā)明的所有目的、特征、以及優(yōu)點(diǎn)將變得顯而易見(jiàn)。
本發(fā)明的創(chuàng)新特征將在附加的權(quán)利要求書(shū)中加以闡明。然而發(fā)明本身、以及一個(gè)最佳使用方式、其中進(jìn)一步的目的和優(yōu)點(diǎn),通過(guò)結(jié)合附圖參考以下一個(gè)說(shuō)明性實(shí)施例的詳細(xì)描述,可得到最好的理解,其中附圖包括圖1描繪了一個(gè)數(shù)據(jù)處理系統(tǒng)的說(shuō)明實(shí)施例,其中可以有利地使用本發(fā)明的方法和系統(tǒng);圖2A和2B說(shuō)明了根據(jù)本發(fā)明的一個(gè)最佳實(shí)施例把一個(gè)指令流內(nèi)部的空操作指令轉(zhuǎn)變成測(cè)試指令;圖3描繪了圖1所示的測(cè)試電路的一個(gè)更詳細(xì)框圖;圖4A是根據(jù)本發(fā)明的一個(gè)測(cè)試狀態(tài)機(jī)的第一示例;以及圖4B是根據(jù)本發(fā)明的一個(gè)測(cè)試狀態(tài)機(jī)的第二示例。
具體實(shí)施例方式
現(xiàn)在參考附圖,特別是參考圖1,圖中描繪了根據(jù)本發(fā)明的一個(gè)處理器的說(shuō)明性實(shí)施例的一個(gè)高級(jí)框圖,該處理器通常用10指示,用于處理指令和數(shù)據(jù)。尤其是,通過(guò)根據(jù)測(cè)試指令執(zhí)行一個(gè)硬件自檢,處理器10提供了改進(jìn)的硬件故障檢測(cè)功能。
處理器10由單個(gè)集成電路超標(biāo)量處理器構(gòu)成,如下面進(jìn)一步論述那樣,該超標(biāo)量處理器包含各種執(zhí)行單元、寄存器、緩沖器、存儲(chǔ)器、及其他功能單元,這些都是由集成電路設(shè)備形成的。如圖1所示,處理器10可以和其它設(shè)備,如一個(gè)系統(tǒng)存儲(chǔ)器12和一個(gè)第二處理器10,通過(guò)一個(gè)互連結(jié)構(gòu)14連在一起,以形成一個(gè)更大的數(shù)據(jù)處理系統(tǒng),例如一個(gè)工作站計(jì)算機(jī)系統(tǒng)。處理器10還包含一個(gè)芯片內(nèi)多級(jí)高速緩存分層結(jié)構(gòu),它分別包含一個(gè)統(tǒng)一的二級(jí)(L2)高速緩存16和分為二支的的一級(jí)(L1)指令(I)和數(shù)據(jù)(D)高速緩存18和20。如本領(lǐng)域技術(shù)人員公知的那樣,高速緩存16、18和20提供了對(duì)高速緩存線的低延遲訪問(wèn),該線對(duì)應(yīng)于在系統(tǒng)存儲(chǔ)器12中的存儲(chǔ)單元。
由處理器10內(nèi)的指令序列邏輯13讀取并排列指令用于處理。在所描繪的實(shí)施例中,指令序列邏輯13包含一個(gè)讀取指令地址寄存器(IFAR)30,它包含一個(gè)有效地址(EA)用來(lái)指示從L1 I-高速緩存18讀取、用于處理的高速緩存線指令。在每個(gè)周期內(nèi),可以從以下三個(gè)來(lái)源的某一個(gè)中載入新的讀取指令地址到IFAR30中,它們是分支預(yù)測(cè)單元(BPU)36,提供由條件轉(zhuǎn)移指令預(yù)測(cè)產(chǎn)生的推測(cè)性目標(biāo)路徑地址;全局完成列表(GCT)38,提供連續(xù)的路徑地址;以及分支執(zhí)行單元(BEU)92,提供由確定推測(cè)的條件轉(zhuǎn)移指令所產(chǎn)生的非推測(cè)性地址。在有效-到-實(shí)際地址轉(zhuǎn)換器(ERAT)32把包含在IFAR 30中的EA進(jìn)行轉(zhuǎn)換、并在I-高速緩存目錄34中查找實(shí)際地址(RA)之后,如果命中/丟失邏輯22確定對(duì)應(yīng)于IFAR 30中EA的高速緩存線指令沒(méi)有存在于L1 I-高速緩存18中,則命中/丟失邏輯22經(jīng)由I-高速緩存請(qǐng)求總線24把RA作為一個(gè)請(qǐng)求地址提供給L2高速緩存16。這種請(qǐng)求地址也可以通過(guò)L2高速緩存16內(nèi)的預(yù)取邏輯基于最近訪問(wèn)模式產(chǎn)生。做為對(duì)一個(gè)請(qǐng)求地址的響應(yīng),L2高速緩存16輸出一個(gè)高速緩存線指令,這些指令可能在經(jīng)過(guò)可選的預(yù)解碼邏輯144(如下所述)之后,經(jīng)由I-高速緩存重載總線26載入到預(yù)取緩沖器(PB)28和L1 I-高速緩存18中。
一旦由IFAR 30中的EA指定的高速緩存線駐留在L1高速緩存18中時(shí),L1 I-高速緩存18把該高速緩存線輸出到分支預(yù)測(cè)單元(BPU)36和讀取指令緩沖器(IFB)40中。BPU 36搜索該高速緩存線指令中的分支指令,如果有的話,就預(yù)測(cè)條件轉(zhuǎn)移指令的結(jié)果。在一個(gè)分支預(yù)測(cè)之后,正如以上討論那樣,BPU 36向IFAR 30提供一個(gè)推測(cè)性讀取指令地址,并將該預(yù)測(cè)傳遞到分支指令隊(duì)列64中,以便當(dāng)隨后由分支執(zhí)行單元92處理該條件轉(zhuǎn)移指令時(shí),能夠確定該預(yù)測(cè)的準(zhǔn)確性。
在該高速緩存線指令能夠被指令轉(zhuǎn)換單元(ITU)42轉(zhuǎn)換之前,IFB 40臨時(shí)地緩存從L1 I-高速緩存18接收的該高速緩存線的指令。在處理器10的說(shuō)明性實(shí)施例中,ITU 42把指令從用戶指令集結(jié)構(gòu)(UISA)指令(例如PowerPC指令)轉(zhuǎn)換成一個(gè)可能不同數(shù)目的內(nèi)部ISA(IISA)指令,該指令可以被處理器10的執(zhí)行單元直接執(zhí)行。例如這種轉(zhuǎn)換可以通過(guò)參考保存在一個(gè)只讀存儲(chǔ)器(ROM)模板中的微碼來(lái)執(zhí)行。在至少某些實(shí)施例中,UISA到IISA的轉(zhuǎn)換會(huì)產(chǎn)生一個(gè)和UISA指令不同數(shù)目的IISA指令,和/或與相應(yīng)的UISA指令有不同長(zhǎng)度的IISA指令。然后通過(guò)全局完成列表38將產(chǎn)生的IISA指令賦值到一個(gè)指令組中,該指令組的成員允許彼此之間相互無(wú)順序地執(zhí)行。全局完成列表38跟蹤每個(gè)還有待于通過(guò)至少一個(gè)相關(guān)的EA完成執(zhí)行的指令組,該EA最好是在該指令組中最早指令的EA。
在UISA到IISA指令轉(zhuǎn)換之后,依據(jù)指令類型將指令按次序發(fā)送給鎖存器44、46、48和50中的某一個(gè)。也就是說(shuō),將分支指令及其他條件寄存器(CR)修改指令發(fā)送給鎖存器44;將定點(diǎn)和載入-存儲(chǔ)指令發(fā)送給鎖存器46和48中的任何一個(gè);以及將浮點(diǎn)指令發(fā)送給鎖存器50。然后通過(guò)CR映射程序52、連接和計(jì)數(shù)(LC)寄存器映射程序54、異常寄存器(XER)映射程序56、通用寄存器(GPR)映射程序58、以及浮點(diǎn)寄存器(FPR)映射程序60中的適當(dāng)一個(gè),向每條需要一個(gè)重命名寄存器用于臨時(shí)存儲(chǔ)執(zhí)行結(jié)果的指令,分配一個(gè)或多個(gè)在一個(gè)寄存器文件內(nèi)的寄存器。
然后將這些發(fā)送的指令臨時(shí)存放在CR發(fā)布隊(duì)列(CRIQ)62、分支發(fā)布隊(duì)列(BIQ)64、定點(diǎn)發(fā)布隊(duì)列(FXIQ)66和68、以及浮點(diǎn)發(fā)布隊(duì)列(FPIQ)70和72中適當(dāng)?shù)囊粋€(gè)中。來(lái)自發(fā)布隊(duì)列62、64、66、68、70以及72的指令能夠隨機(jī)(即,可能是無(wú)序的)發(fā)布到處理器10的執(zhí)行單元中用于執(zhí)行。然而,在這些指令的執(zhí)行完成之前,一直在發(fā)布隊(duì)列62-72中保留這些指令,而且如果這些指令中的任何一個(gè)需要重新發(fā)布的話,如果存在任何結(jié)果,則寫(xiě)回該結(jié)果數(shù)據(jù)。
作為說(shuō)明,處理器10的執(zhí)行單元包括一個(gè)用于執(zhí)行CR修改指令的CR單元(CRU)90;一個(gè)用于執(zhí)行分支指令的分支執(zhí)行單元(BEU)92;兩個(gè)用于執(zhí)行定點(diǎn)指令的定點(diǎn)單元(FXU)94和100;兩個(gè)用于執(zhí)行載入和存儲(chǔ)指令的載入-存儲(chǔ)單元(LSU)96和98;以及兩個(gè)用于執(zhí)行浮點(diǎn)指令的浮點(diǎn)單元(FPU)102和104。每一個(gè)執(zhí)行單元90-104最好是做為一個(gè)具有若干流水線階段的執(zhí)行流水線來(lái)實(shí)現(xiàn)。
在某一執(zhí)行單元90-104內(nèi)執(zhí)行期間,如果存在操作數(shù),則一條指令從與該執(zhí)行單元相連的一個(gè)寄存器文件內(nèi)的一個(gè)或多個(gè)結(jié)構(gòu)化及/或重命名寄存器中接收該操作數(shù)。當(dāng)執(zhí)行CR修改或者CR相關(guān)指令時(shí),CRU 90和BEU 92訪問(wèn)該CR寄存器文件80,在一個(gè)最佳實(shí)施例中,該文件包含一個(gè)CR和多個(gè)CR重命名寄存器,這些寄存器中的每一個(gè)包含許多由一個(gè)或多個(gè)比特形成的明確字段。在這些字段當(dāng)中,LT、GT、和EQ字段分別指示是否有一個(gè)值(一般為一條指令的結(jié)果或者操作數(shù))小于零、大于零、或者等于零。連接和計(jì)數(shù)寄存器(LCR)的寄存器文件82包含一個(gè)計(jì)數(shù)寄存器(CTR)、一個(gè)連接寄存器(LR)、和每一個(gè)重命名寄存器,通過(guò)它們BEU 92還可以確定條件轉(zhuǎn)移以獲得一個(gè)路徑地址。通用寄存器文件(GPR)84和86是同步的、重復(fù)的寄存器文件,用于存儲(chǔ)由FXU 94和100、以及LSU 96和98訪問(wèn)并產(chǎn)生的定點(diǎn)以及整數(shù)值。浮點(diǎn)寄存器文件(FPR)88,類似于GPR 84和86,也可以作為同步寄存器的重復(fù)集合實(shí)現(xiàn),該文件包含執(zhí)行FPU 102和104的浮點(diǎn)指令、以及LSU 96和98的浮點(diǎn)載入指令所產(chǎn)生的浮點(diǎn)值。
在一個(gè)執(zhí)行單元完成一條指令的執(zhí)行之后,該執(zhí)行通知以程序次序調(diào)度指令完成的GCT 38。為了完成由CRU 90、FXU 94和100或者FPU 102和104中的某一個(gè)執(zhí)行的一條指令,GCT 38給適當(dāng)?shù)挠成涑绦虬l(fā)信號(hào),該映射程序設(shè)置一個(gè)指示來(lái)指明分配給該指令的寄存器文件寄存器現(xiàn)在包含該寄存器的結(jié)構(gòu)狀態(tài)。然后將該指令從發(fā)布隊(duì)列中刪除,并且一旦該指令組內(nèi)的全部指令已經(jīng)完成,就從GCT 38中刪除該指令。然而,其它類型的指令是以不同方式完成的。
當(dāng)BEU 92完成了一條條件轉(zhuǎn)移指令并且確定了應(yīng)該獲取的執(zhí)行路徑的路徑地址時(shí),就將該路徑地址和BPU 36所預(yù)測(cè)的推測(cè)性路徑地址相比較。如果兩個(gè)路徑地址相匹配,就不需要進(jìn)一步處理了。然而,如果計(jì)算出來(lái)的路徑地址和預(yù)測(cè)的路徑地址不匹配,則BEU 92向IFAR 30提供正確的路徑地址。無(wú)論在哪個(gè)事件中,然后能從BIQ64中刪除分支指令,并且當(dāng)同一個(gè)指令組內(nèi)的全部其它指令已經(jīng)完成時(shí),從GCT 38中刪除該指令。
在一條載入指令(包括一條載入-保留指令)執(zhí)行之后,由執(zhí)行該載入指令所計(jì)算出來(lái)的有效地址通過(guò)一個(gè)數(shù)據(jù)ERAT(未顯示)轉(zhuǎn)換成為一個(gè)實(shí)際地址,然后做為一個(gè)請(qǐng)求地址提供給L1 D-高速緩存20。在這一點(diǎn)上,在指示的載入執(zhí)行之前,從FXIQ 66或者68中刪除載入操作,并將其放入載入數(shù)據(jù)隊(duì)列(LDQ)114中。如果該請(qǐng)求地址不在L1 D-高速緩存20中,就將該請(qǐng)求地址放入載入遺漏隊(duì)列(LMQ)116中,由它從L2高速緩存16中獲取請(qǐng)求數(shù)據(jù),并且如果丟失的話,就從另一個(gè)處理器10或者從系統(tǒng)存儲(chǔ)器12中獲取請(qǐng)求數(shù)據(jù)。
存儲(chǔ)指令(包括條件-存儲(chǔ)指令)利用一個(gè)存儲(chǔ)隊(duì)列(STQ) 110類似地完成,在存儲(chǔ)指令執(zhí)行之后,在該隊(duì)列中載入用于存儲(chǔ)的有效地址。在該目標(biāo)地址的等效-到-實(shí)際轉(zhuǎn)換之后,來(lái)自STQ 110的數(shù)據(jù)能夠存儲(chǔ)到L1 D-高速緩存20和L2高速緩存16的任意一個(gè)或者是全部?jī)蓚€(gè)里。
如同其它任何電路一樣,如上所述的處理器10的集成電路容易遇到硬件故障,例如,由于制造過(guò)程不正?;蛘攮h(huán)境條件而引起的。因此,在制造和包裝過(guò)程中,為了確定處理器10是否已經(jīng)遇到了一個(gè)硬件故障,處理器10一般將經(jīng)受多次傳統(tǒng)的環(huán)境和電的測(cè)試,包括設(shè)備測(cè)試和系統(tǒng)(例如,主板)測(cè)試。為便于這種測(cè)試,處理器10可包含一個(gè)連接在圖1所示的內(nèi)部邏輯和芯片封裝的輸入/輸出(I/O)管腳之間遵從IEEE標(biāo)準(zhǔn)1149.1的邊界掃描接口(未顯示)。如本領(lǐng)域技術(shù)人員所公知的那樣,IEEE標(biāo)準(zhǔn)1149.1接口還定義了一個(gè)測(cè)試通路端口(TAP)控制器,它對(duì)各種測(cè)試指令做出響應(yīng),把處理器10置入一個(gè)測(cè)試模式中,在這里測(cè)試模式定義為設(shè)備的一個(gè)狀態(tài),其中的管腳、測(cè)試電路、和內(nèi)部邏輯配置用于測(cè)試而不是正常的系統(tǒng)操作。在測(cè)試模式下,TAP控制器可以執(zhí)行一條指令(例如,EXTEST指令)來(lái)僅僅測(cè)試輸出管腳,或者做為選擇可以執(zhí)行測(cè)試指令(例如,INTEST或者RUNBIST指令)以測(cè)試處理器10的內(nèi)部邏輯。關(guān)于該IEEE標(biāo)準(zhǔn)1149.1TAP控制器和它相關(guān)測(cè)試指令的更多信息,可以在“Standard Test Access Port and Boundary-ScanArchitecture”、電機(jī)及電子工程師協(xié)會(huì)(1990年五月21日)以及1149.1b-1994補(bǔ)充說(shuō)明中找到,在這里參考了這兩篇文獻(xiàn)。
盡管由IEEE標(biāo)準(zhǔn)1149.1定義的設(shè)備和主板測(cè)試允許檢測(cè)硬件故障,但是這樣的檢測(cè)局限于只有當(dāng)被測(cè)設(shè)備(DUT)或者被測(cè)主板配置在測(cè)試模式下時(shí),才能夠檢測(cè)到硬件故障。一般來(lái)說(shuō),即使有的話,一個(gè)設(shè)備或者主板也很少置于測(cè)試模式中以允許檢測(cè)出它最終用途下的硬件故障。換句話說(shuō),在部署以后,在重要數(shù)據(jù)損壞或者系統(tǒng)故障出現(xiàn)之前,一般不能檢測(cè)出傳統(tǒng)系統(tǒng)中的硬件故障。
本發(fā)明通過(guò)檢測(cè)發(fā)生在處理器操作的正常模式期間的硬件故障,提供了改進(jìn)的硬件故障檢測(cè)功能,因而允許及早地進(jìn)行糾正動(dòng)作,或許是在系統(tǒng)故障或者重要數(shù)據(jù)損壞之前。在此使用的“正常模式”(或者“正常操作”)定義為一個(gè)非測(cè)試模式操作,其中由一個(gè)處理器執(zhí)行一個(gè)處理器的UISA或者IISA內(nèi)的指令從而執(zhí)行有用的作業(yè)。根據(jù)本發(fā)明,實(shí)現(xiàn)正常模式下的硬件故障檢測(cè),是通過(guò)在一個(gè)指令流中插入或者指定一個(gè)或多個(gè)指令作為測(cè)試指令,然后在該指令流內(nèi)的指令執(zhí)行期間,對(duì)這種測(cè)試指令做出響應(yīng),執(zhí)行該處理器的指令序列邏輯13、執(zhí)行電路(例如,執(zhí)行單元90-104)、和/或數(shù)據(jù)存儲(chǔ)器(例如,寄存器文件80-88)的硬件故障測(cè)試。在這種方式下,如果在部署之后發(fā)生處理器故障,則該故障就不會(huì)檢測(cè)不到,而且通過(guò)在正常操作期間對(duì)該處理器元件的系統(tǒng)測(cè)試,將最終發(fā)現(xiàn)該故障。
盡管根據(jù)本發(fā)明的一個(gè)或多個(gè)測(cè)試指令能夠在處理器10的UISA或者IISA內(nèi)明確地定義,但是根據(jù)本發(fā)明的一個(gè)最佳實(shí)施例將UISA或者IISA的空操作(“no-op”)指令指定為測(cè)試初始指令是有利的,其中空操作指令不執(zhí)行有用的作業(yè)并且不修改處理器狀態(tài)。雖然傳統(tǒng)的空操作指令就移動(dòng)或者處理數(shù)據(jù)而言不執(zhí)行有用的作業(yè),空操作指令經(jīng)常用于其它原因,例如填充軟件內(nèi)的定時(shí)循環(huán)、在高速緩存線邊界上完成指令排列、實(shí)現(xiàn)期望的指令序列等等。根據(jù)本發(fā)明的最佳實(shí)施例,在以正常操作模式處理期間,這些空操作測(cè)試初始指令動(dòng)態(tài)地被選定的測(cè)試指令所替代。通過(guò)用測(cè)試指令替換空操作測(cè)試初始指令,能夠在正常操作模式內(nèi)執(zhí)行硬件故障檢測(cè)而幾乎沒(méi)有降低處理器的性能,同時(shí)還保留了空操作指令的其它有用目的。
考慮上文,將意識(shí)到測(cè)試指令能夠以多種不同方式包含在由處理器10的指令序列邏輯13所構(gòu)造的指令流中。例如,預(yù)解碼邏輯144可以在把指令存入L1 I-高速緩存18之前,把從L2高速緩存16讀取的UISA空操作(或者其它選定的)指令轉(zhuǎn)化為UISA或者IISA測(cè)試指令。然而對(duì)圖1所描繪的實(shí)施例來(lái)說(shuō),更可取的是,將測(cè)試指令指定或者插入到指令流中,并由ITU 42進(jìn)行指令轉(zhuǎn)換。為了易于理解,如圖1所示,用于在指令流中指定或插入測(cè)試指令的電路,是獨(dú)立的測(cè)試電路120。然而,應(yīng)意識(shí)到這種測(cè)試電路120能夠在處理器10的指令處理流水線的不同位置實(shí)現(xiàn),并且也可以包含在ITU42和/或預(yù)解碼邏輯144內(nèi)。
現(xiàn)在參考圖2A和2B,圖中說(shuō)明了把一個(gè)示例指令流內(nèi)的空操作指令轉(zhuǎn)換為測(cè)試指令。在圖2A中,示例指令流130a包括按程序順序從最早到最后,一個(gè)載入指令132、一個(gè)加法指令134、兩個(gè)空操作指令136和138、一個(gè)整數(shù)乘法指令140以及一個(gè)減法指令142。如省略號(hào)表示所指示的那樣,該指令流還可包含許多附加指令。
根據(jù)本發(fā)明的一個(gè)最佳實(shí)施例,空操作指令136和138可以已經(jīng)存在于UISA指令中,其中UISA指令是從L1 I-高速緩存18處讀取或者通過(guò)ITU 42插入到指令流130a中以取得期望的指令序列或者指令組,這些空操作指令被測(cè)試電路120用測(cè)試指令、例如圖2B指令流130b中的測(cè)試指令150和152所替代。測(cè)試指令,諸如測(cè)試指令150和152,最好是用IISA操作碼中的一個(gè)設(shè)置位作標(biāo)記,來(lái)指示這些指令的計(jì)算結(jié)果不能成為該處理器結(jié)構(gòu)狀態(tài)的一部分。在所描述的實(shí)施例中,測(cè)試指令150是一個(gè)浮點(diǎn)乘法指令,用于測(cè)試FPU 102和104中的一個(gè)或兩個(gè)中的硬件故障。另一方面,測(cè)試指令152是一個(gè)條件碼設(shè)置指令,用來(lái)測(cè)試CRU 90的硬件故障。如以下進(jìn)一步所討論的那樣,測(cè)試指令的操作碼、由該測(cè)試指令使用的執(zhí)行電路或指令序列電路、以及由該測(cè)試指令引用的寄存器,最好是在操作期間可以改變,以提供更廣的檢測(cè)范圍。
現(xiàn)在參考圖3,它描述了圖1中測(cè)試電路120的一個(gè)更為詳細(xì)的框圖。如圖所示,測(cè)試電路120有三個(gè)主要元件一個(gè)指令譯碼器160、一個(gè)狀態(tài)機(jī)170以及一個(gè)故障檢測(cè)器180。指令譯碼器160與IFB 40和/或ITU 42相連,這樣指令譯碼器160就能夠檢測(cè)到由ITU42構(gòu)造的指令流中的空操作(或者其它選定的)UISA或者IISA測(cè)試初始指令。對(duì)在指令流中檢測(cè)一個(gè)測(cè)試初始指令做出響應(yīng),指令譯碼器160會(huì)通知狀態(tài)機(jī)170。
如下面參考圖4A和4B進(jìn)一步描述的那樣,狀態(tài)機(jī)170為每個(gè)檢測(cè)到的測(cè)試初始(例如,空操作)指令,選擇一個(gè)IISA測(cè)試指令操作碼、一個(gè)或多個(gè)該測(cè)試指令的目標(biāo)執(zhí)行單元、和由該測(cè)試指令引用的操作數(shù)寄存器。然后狀態(tài)機(jī)170將該測(cè)試指令提供給ITU 42用于發(fā)送和執(zhí)行。最佳情況為,這樣選擇測(cè)試指令操作碼,以便使每個(gè)測(cè)試指令都具有一個(gè)已知的結(jié)果,該結(jié)果要么是預(yù)定的(即常數(shù)),要么是不需要有關(guān)該測(cè)試指令的先驗(yàn)信息就能夠由處理器10動(dòng)態(tài)地驗(yàn)證的。在后面這種情況下,通過(guò)將該輸出結(jié)果和一個(gè)輸入操作數(shù)比較、或者通過(guò)比較冗余處理器硬件的輸出來(lái)動(dòng)態(tài)地驗(yàn)證該結(jié)果。因此,如果該測(cè)試指令是用來(lái)測(cè)試冗余執(zhí)行單元如FXU 94和100,則能夠把該測(cè)試指令(例如,一個(gè)整數(shù)加法)發(fā)送給兩個(gè)鎖存器46和48用于由FXU94和100執(zhí)行,然后能夠比較(通過(guò)故障檢測(cè)器180)通過(guò)執(zhí)行兩個(gè)整數(shù)加法指令所產(chǎn)生的和,來(lái)確定在FXU 94和100中的某一個(gè)是否發(fā)生了一個(gè)硬件故障。
應(yīng)當(dāng)注意到一個(gè)測(cè)試指令的多個(gè)實(shí)例能夠以多種不同的方式產(chǎn)生。首先,能夠?qū)TU 42中的發(fā)送邏輯配置為如果測(cè)試指令的目標(biāo)硬件中存在冗余情況的話,自動(dòng)地向不同的執(zhí)行單元發(fā)送同一測(cè)試指令的多個(gè)拷貝。第二,測(cè)試指令的操作碼中的一位能夠由狀態(tài)機(jī)170所設(shè)置,用來(lái)指示該測(cè)試指令應(yīng)該發(fā)送兩次。第三,狀態(tài)機(jī)170能夠簡(jiǎn)單地插入多個(gè)相同的IISA測(cè)試指令到ITU 42中的指令流內(nèi)。
仍然參考圖3,在一個(gè)測(cè)試指令執(zhí)行之后,在測(cè)試電路120內(nèi)的故障檢測(cè)器通過(guò)查閱該測(cè)試指令的執(zhí)行結(jié)果來(lái)檢測(cè)是否存在一個(gè)硬件故障。一個(gè)硬件故障的檢測(cè)包含四個(gè)基本功能,在說(shuō)明的實(shí)施例中,其通過(guò)多路復(fù)用器182-184以及比較器186執(zhí)行。首先,如多路復(fù)用器182所表示,故障檢測(cè)器180根據(jù)一個(gè)或多個(gè)指示狀態(tài)機(jī)170相應(yīng)狀態(tài)的選擇信號(hào)188,選擇該測(cè)試指令執(zhí)行結(jié)果(R1)的恰當(dāng)來(lái)源。執(zhí)行結(jié)果的來(lái)源最好包含至少所有的執(zhí)行單元90-104和/或寄存器文件80-88的輸出。其次,比較器186根據(jù)一個(gè)或多個(gè)選擇信號(hào)188,選擇一個(gè)恰當(dāng)?shù)钠谕蹬c測(cè)試指令的執(zhí)行結(jié)果(R1)相比較。作為說(shuō)明,可能的值最好包括至少0、1、一個(gè)輸入操作數(shù)值、以及R2,其中R2是由冗余處理器硬件的第二實(shí)例產(chǎn)生的執(zhí)行結(jié)果。第三,用比較器186表示,故障檢測(cè)器180通過(guò)把多路復(fù)用器182輸出的測(cè)試指令的執(zhí)行結(jié)果(R1)和由多路復(fù)用器184選定的預(yù)期值相比較來(lái)檢測(cè)一個(gè)硬件故障。第四,如果由多路復(fù)用器184選定的預(yù)期值和執(zhí)行結(jié)果R1不相等,則故障檢測(cè)器180就為一個(gè)硬件故障發(fā)信號(hào)。在說(shuō)明實(shí)施例中,故障檢測(cè)器180通過(guò)比較器186在信號(hào)線190上要求一個(gè)高優(yōu)先級(jí)硬件故障中斷來(lái)發(fā)信號(hào)通知檢測(cè)到一個(gè)硬件故障。為了向中斷處理程序提供有關(guān)檢測(cè)到的硬件故障的附加信息,當(dāng)比較器186要求一個(gè)硬件故障中斷時(shí),狀態(tài)機(jī)170將檢測(cè)到硬件故障狀態(tài)的一個(gè)指示存儲(chǔ)到一個(gè)軟件-可存取的故障狀態(tài)寄存器162中。然后中斷處理程序例程就可以處理檢測(cè)到的硬件故障,例如,通過(guò)使操作系統(tǒng)不再向處理器10調(diào)度一定類型的處理或者操作,或者是通過(guò)停用處理器10。
現(xiàn)在參考圖4A,說(shuō)明了根據(jù)本發(fā)明的一個(gè)狀態(tài)機(jī)170a的第一示范性實(shí)施例的狀態(tài)圖。在第一示范性實(shí)施例中,狀態(tài)機(jī)170a包括5個(gè)基本狀態(tài)200-208,每一個(gè)狀態(tài)分別對(duì)應(yīng)于一個(gè)唯一的執(zhí)行單元類型。作為說(shuō)明,基本狀態(tài)200對(duì)應(yīng)于CRU 90;基本狀態(tài)202對(duì)應(yīng)于BEU 92;基本狀態(tài)204對(duì)應(yīng)于FXU 94和100;基本狀態(tài)206對(duì)應(yīng)于LSU 96和98;以及基本狀態(tài)208對(duì)應(yīng)于FPU 102和104。通過(guò)指令譯碼器160對(duì)指令流中一個(gè)空操作(其它選定的)測(cè)試初始指令的檢測(cè)會(huì)導(dǎo)致?tīng)顟B(tài)機(jī)170a從一個(gè)先前的基本狀態(tài)向一個(gè)當(dāng)前基本狀態(tài)轉(zhuǎn)換,用使基本狀態(tài)200-208相互連接的箭頭表示。
當(dāng)前基本狀態(tài)指示哪一種執(zhí)行單元被選為當(dāng)前測(cè)試指令的目標(biāo)。如果由當(dāng)前基本狀態(tài)所指示的執(zhí)行單元類型具有冗余實(shí)例,則該測(cè)試指令將要至少由兩個(gè)冗余實(shí)例執(zhí)行,這樣就可以比較結(jié)果。另一方面,如果處理器10僅僅包含單個(gè)由當(dāng)前基本狀態(tài)所指示的執(zhí)行單元類型的實(shí)例,則執(zhí)行結(jié)果(R1)將要與一個(gè)預(yù)定值(例如,0、1、或者一個(gè)輸入操作數(shù))相比較。
如圖4A中進(jìn)一步說(shuō)明所示,基本狀態(tài)200-208中的每一個(gè)分別具有一個(gè)相關(guān)的操作碼狀態(tài)機(jī)220-228,用于選擇一個(gè)測(cè)試指令操作碼。操作碼狀態(tài)機(jī)220-228中的每一個(gè)都包含一個(gè)或多個(gè)操作碼狀態(tài),每一個(gè)狀態(tài)分別表示對(duì)應(yīng)于相關(guān)基本狀態(tài)的執(zhí)行單元類型所支持的一個(gè)IISA操作碼。因此,例如,操作碼狀態(tài)機(jī)224可以包含操作碼狀態(tài)225a-225n,對(duì)應(yīng)于由FXU 94和100所支持的整數(shù)運(yùn)算操作(加、減、乘、除)以及整數(shù)邏輯操作(滾動(dòng)、1的補(bǔ)碼、2的補(bǔ)碼、OR、AND)。相似地,操作碼狀態(tài)機(jī)228的操作碼狀態(tài)表示各種由FPU102和104所支持的浮點(diǎn)運(yùn)算和邏輯操作,而且操作碼狀態(tài)機(jī)220的操作碼狀態(tài)的每一個(gè)分別表示由CRU 90執(zhí)行的一個(gè)條件-代碼-設(shè)置指令。雖然可以實(shí)現(xiàn)許多狀態(tài)轉(zhuǎn)換方案,但是最好是,每次在基礎(chǔ)的基本狀態(tài)之間進(jìn)行轉(zhuǎn)換時(shí),就更新一個(gè)操作碼狀態(tài)機(jī)的當(dāng)前狀態(tài)。
如上面簡(jiǎn)要提到的那樣,對(duì)于那些僅僅由單個(gè)執(zhí)行單元所執(zhí)行的測(cè)試指令,選擇這些測(cè)試指令的操作碼和操作數(shù)時(shí)最好使執(zhí)行結(jié)果已知。滿足這個(gè)限制的算術(shù)和邏輯操作例子如下表1所示。
表1
狀態(tài)機(jī)170a的每個(gè)基本狀態(tài)200-208還分別具有一個(gè)相關(guān)的一個(gè)寄存器狀態(tài)機(jī)230-238,該狀態(tài)機(jī)指定在由相關(guān)操作碼狀態(tài)機(jī)選定的測(cè)試指令執(zhí)行期間將要訪問(wèn)的寄存器。因此每個(gè)寄存器狀態(tài)機(jī)包含多個(gè)狀態(tài),每個(gè)狀態(tài)分別對(duì)應(yīng)于寄存器文件內(nèi)的一個(gè)寄存器,該寄存器能夠被對(duì)應(yīng)于相關(guān)的某個(gè)基本狀態(tài)200-208的執(zhí)行單元類型所訪問(wèn)。就操作碼狀態(tài)機(jī)220-228來(lái)說(shuō),最好在每次轉(zhuǎn)換到相關(guān)的一個(gè)基本狀態(tài)200-208時(shí),更新寄存器狀態(tài)機(jī)230-238的當(dāng)前狀態(tài)。
寄存器狀態(tài)機(jī)230-238(以及操作碼狀態(tài)機(jī)220-228)中的每一個(gè)能夠以多種不同的方式獨(dú)立地實(shí)現(xiàn),這取決于期望的測(cè)試范圍和寄存器文件端口和寄存器的使用。例如,為了最小化用于硬件故障檢測(cè)的寄存器文件端口的使用,可以期望一般將操作碼狀態(tài)機(jī)220-228內(nèi)的操作碼限制在那些具有單個(gè)寄存器操作數(shù)的操作碼中(即,僅僅具有單個(gè)操作數(shù)或者具有一個(gè)或多個(gè)立即操作數(shù))。照這樣,通過(guò)限制每周期中為測(cè)試目的而訪問(wèn)的寄存器文件端口的數(shù)量,減少測(cè)試指令對(duì)處理器性能的影響。
此外,能夠?qū)崿F(xiàn)寄存器狀態(tài)機(jī)230-238中的每一個(gè)用于分配目標(biāo)寄存器以保持測(cè)試指令結(jié)果,或者不向測(cè)試指令分配目標(biāo)寄存器。如果測(cè)試指令沒(méi)有指定目標(biāo)寄存器,則測(cè)試就簡(jiǎn)化了,且處理器資源消耗得更少,這意味著更多的寄存器可用于執(zhí)行指令流中的其它指令。然而,如果把目標(biāo)寄存器分配給測(cè)試指令的話,就可以獲得更大的測(cè)試范圍,并且測(cè)試指令的執(zhí)行結(jié)果從寄存器文件80-88而不是直接從執(zhí)行單元90-104提供給故障檢測(cè)器180的多路復(fù)用器182。當(dāng)然,一個(gè)測(cè)試指令的執(zhí)行結(jié)果不允許改變處理器10的結(jié)構(gòu)狀態(tài)。因此,如果寄存器狀態(tài)機(jī)230-238的實(shí)現(xiàn)是使目標(biāo)寄存器分配給測(cè)試指令的話,就必須將保持測(cè)試指令執(zhí)行結(jié)果的目標(biāo)寄存器標(biāo)記為無(wú)效,例如,通過(guò)當(dāng)傳送一個(gè)測(cè)試指令執(zhí)行結(jié)果到一個(gè)寄存器里時(shí)清除一個(gè)寄存器的有效位。
現(xiàn)在參考圖4B,這里描述了根據(jù)該本發(fā)明的一個(gè)狀態(tài)機(jī)170b的第二示范性實(shí)施例。除了在狀態(tài)機(jī)170b中每一個(gè)執(zhí)行單元90-104分別具有它自己相應(yīng)的基本狀態(tài)以外,狀態(tài)機(jī)170b與圖4A的狀態(tài)機(jī)170a是相同的。這個(gè)差別表示即使處理器10有目標(biāo)執(zhí)行單元的冗余實(shí)例,每一測(cè)試指令也僅僅由一個(gè)目標(biāo)執(zhí)行單元執(zhí)行。當(dāng)然,還可能實(shí)現(xiàn)狀態(tài)機(jī)170a和170b之間的一個(gè)混合體,在多個(gè)執(zhí)行單元中執(zhí)行某些測(cè)試指令,并且僅僅在多個(gè)冗余執(zhí)行單元中的一個(gè)中執(zhí)行其它的測(cè)試指令。
如上所述,本發(fā)明提供了一種改進(jìn)的方法和系統(tǒng),用于在以處理器的正常操作模式執(zhí)行指令期間測(cè)試處理器硬件故障。為了最小化這種測(cè)試對(duì)處理器性能的影響,本發(fā)明有利地使用了空操作指令循環(huán)用于測(cè)試。由于硬件故障測(cè)試是在正常操作模式下執(zhí)行的,因此能夠檢測(cè)和處理在處理器部署之后產(chǎn)生的硬件故障。
雖然結(jié)合一個(gè)最佳實(shí)施例已經(jīng)詳細(xì)地顯示和描述了本發(fā)明,但是本領(lǐng)域技術(shù)人員將會(huì)明白在這里可以進(jìn)行各種形式和細(xì)節(jié)上的變化而不背離本發(fā)明的精神和范圍。例如本發(fā)明不局限于一個(gè)特定的處理器體系結(jié)構(gòu)或是使用指令轉(zhuǎn)換的處理器體系結(jié)構(gòu),而是適用于任何處理器體系結(jié)構(gòu)。類似地,雖然本發(fā)明的上述描述采用對(duì)每個(gè)空操作或者其它選定的測(cè)試指令做出響應(yīng)而處理硬件檢測(cè),但是應(yīng)當(dāng)明白在本發(fā)明的某些實(shí)施例中,例如,通過(guò)在一個(gè)處理器控制寄存器中設(shè)置和清除一個(gè)軟件可存取位,就能夠打開(kāi)或者關(guān)閉由測(cè)試電路120執(zhí)行的硬件測(cè)試。
權(quán)利要求
1.一個(gè)處理器,包含指令序列邏輯,提供一個(gè)用于執(zhí)行包含一個(gè)測(cè)試初始指令的指令流;執(zhí)行電路;和所述的執(zhí)行電路相連的數(shù)據(jù)存儲(chǔ)器;以及測(cè)試電路,用于在由所述執(zhí)行電路以一個(gè)正常操作模式執(zhí)行所述指令流期間,對(duì)所述的測(cè)試初試指令做出響應(yīng),檢測(cè)在所述指令序列邏輯、所述執(zhí)行電路、以及所述數(shù)據(jù)存儲(chǔ)器中的某一個(gè)的硬件錯(cuò)誤。
2.如權(quán)利要求1所述的處理器,其特征在于所述的測(cè)試初始指令是一個(gè)空操作指令。
3.如權(quán)利要求1所述的處理器,其特征在于所述的測(cè)試電路在所述的指令流中插入一個(gè)測(cè)試指令代替所述的檢測(cè)開(kāi)始指令。
4.如權(quán)利要求1所述的處理器,其特征在于所述指令序列邏輯、所述執(zhí)行電路、以及所述數(shù)據(jù)存儲(chǔ)器中至少有一個(gè)包含第一電路和第二電路,它們響應(yīng)所述的測(cè)試指令執(zhí)行一個(gè)同樣的功能;以及所述的測(cè)試電路通過(guò)比較由所述第一電路和所述第二電路響應(yīng)所述測(cè)試指令而輸出的值,來(lái)檢測(cè)一個(gè)硬件錯(cuò)誤。
5.如權(quán)利要求4所述的處理器,其中所述第一電路包含第一數(shù)據(jù)存儲(chǔ)器,向所述測(cè)試電路輸出一個(gè)第一值;其中所述第二電路包含第二數(shù)據(jù)存儲(chǔ)器, 向所述測(cè)試電路輸出一個(gè)第二值。
6.如權(quán)利要求5所述的處理器,其特征在于所述第一數(shù)據(jù)存儲(chǔ)器和所述第二數(shù)據(jù)存儲(chǔ)器每一個(gè)都包含一個(gè)寄存器組。
7.如權(quán)利要求4所述的處理器,其中所述第一電路和所述第二電路的每一個(gè)都能夠執(zhí)行至少一個(gè)第一計(jì)算功能和一個(gè)不同的第二計(jì)算功能;所述測(cè)試指令包含一個(gè)第一測(cè)試指令,以及所述指令流包含一個(gè)第二測(cè)試指令,其中所述第一和第二電路都響應(yīng)于所述第一測(cè)試指令執(zhí)行所述的第一計(jì)算功能,并且都響應(yīng)于所述第二測(cè)試指令執(zhí)行所述的第二計(jì)算功能。
8.如權(quán)利要求1所述的處理器,其特征在于所述的執(zhí)行電路響應(yīng)于所述測(cè)試指令,執(zhí)行一個(gè)帶有一個(gè)預(yù)定結(jié)果的算術(shù)或者邏輯操作。
9.如權(quán)利要求8所述的處理器,其特征在于所述執(zhí)行電路在所述數(shù)據(jù)存儲(chǔ)器中存儲(chǔ)一個(gè)所述算術(shù)或邏輯操作的結(jié)果,而且所述測(cè)試電路通過(guò)測(cè)試保存在所述數(shù)據(jù)存儲(chǔ)器中的結(jié)果,檢測(cè)一個(gè)硬件結(jié)果。
10.如權(quán)利要求1所述的處理器,其特征在于所述測(cè)試電路對(duì)檢測(cè)到一個(gè)硬件錯(cuò)誤做出響應(yīng),要求一個(gè)中斷。
全文摘要
一個(gè)處理器包含指令序列邏輯、執(zhí)行電路、和該執(zhí)行電路相連的數(shù)據(jù)存儲(chǔ)器、以及測(cè)試電路。做為對(duì)由指令序列邏輯提供的一個(gè)指令流內(nèi)的一個(gè)指令的響應(yīng),在進(jìn)行處理器功能操作期間,測(cè)試電路檢測(cè)在指令序列邏輯、執(zhí)行電路、以及存儲(chǔ)數(shù)據(jù)中某一個(gè)的一個(gè)硬件錯(cuò)誤。在一個(gè)實(shí)施例中,通過(guò)比較由執(zhí)行相同功能的冗余電路響應(yīng)一個(gè)測(cè)試指令而輸出的結(jié)果,就能夠檢測(cè)到一個(gè)硬件錯(cuò)誤。做為選擇或者另外地,響應(yīng)于該測(cè)試指令,通過(guò)執(zhí)行一個(gè)具有一個(gè)已知結(jié)果的算術(shù)或者邏輯操作(例如,乘以1,加0,等等),也能夠檢測(cè)出一個(gè)硬件錯(cuò)誤。
文檔編號(hào)G06F9/30GK1336587SQ01123080
公開(kāi)日2002年2月20日 申請(qǐng)日期2001年7月25日 優(yōu)先權(quán)日2000年7月26日
發(fā)明者C·R·穆?tīng)?申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司