首页> 中国专利> 在以正常模式执行指令期间执行硬件测试的处理器

在以正常模式执行指令期间执行硬件测试的处理器

摘要

一个处理器包含指令序列逻辑、执行电路、和该执行电路相连的数据存储器、以及测试电路。做为对由指令序列逻辑提供的一个指令流内的一个指令的响应,在进行处理器功能操作期间,测试电路检测在指令序列逻辑、执行电路、以及存储数据中某一个的一个硬件错误。在一个实施例中,通过比较由执行相同功能的冗余电路响应一个测试指令而输出的结果,就能够检测到一个硬件错误。做为选择或者另外地,响应于该测试指令,通过执行一个具有一个已知结果的算术或者逻辑操作(例如,乘以1,加0,等等),也能够检测出一个硬件错误。

著录项

  • 公开/公告号CN1336587A

    专利类型发明专利

  • 公开/公告日2002-02-20

    原文格式PDF

  • 申请/专利权人 国际商业机器公司;

    申请/专利号CN01123080.0

  • 发明设计人 C·R·穆尔;

    申请日2001-07-25

  • 分类号G06F11/22;

  • 代理机构中国专利代理(香港)有限公司;

  • 代理人王勇

  • 地址 美国纽约州

  • 入库时间 2023-12-17 14:10:59

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2010-10-06

    未缴年费专利权终止 IPC(主分类):G06F11/22 授权公告日:20050601 申请日:20010725

    专利权的终止

  • 2005-06-01

    授权

    授权

  • 2002-02-20

    公开

    公开

  • 2002-01-02

    实质审查的生效

    实质审查的生效

说明书

技术领域

本发明一般涉及数据处理,尤其是涉及在一个处理器内部的硬件错误检测。更加特别地,本发明涉及一种在正常模式下操作时响应于一条指令自我测试硬件错误的处理器。

背景技术

一个典型的超标量处理器由一个数字集成电路构成,例如包含一个用于存储指令的指令高速缓存、一个或多个用于执行连续指令的执行单元、一个用于执行分支指令的分支单元、用于向各个执行单元传送指令的指令序列逻辑、以及用于存储操作数和结果数据的寄存器。为了检验复杂数字电路例如上面描述的传统超标量处理器在正常功能操作期间的正确操作,在电路设计中包含奇偶校验电路是众所周知的。然而,考虑到对一超标量处理器的每个计算电路进行奇偶校验所涉及的费用和复杂性,通常仅仅为存储电路实现奇偶校验电路,例如处理器寄存器文件和芯片内超高速缓存。因此,一个传统处理器的计算电路在正常功能操作期间是经常保持未经测试的。因此,由一个硬件故障引起的计算错误可能保持未被检出的状态,这会导致数据损坏或系统故障。

发明内容

着眼于本技术领域内的上述及其他缺陷,本发明提供了一种利用空操作(或其他预定的)指令周期执行一个处理器电路的硬件测试而不需要复杂奇偶校验电路的处理器。

根据本发明,一种能够自我测试的处理器包含:指令序列逻辑、执行电路、与该执行电路相连的数据存储器、以及测试电路。在响应于由指令序列逻辑提供的一个指令流内的一个指令而进行的处理器正常功能操作期间,测试电路检测指令序列逻辑、执行电路、以及数据存储器中某一个内的硬件错误。在一个实施例中,通过比较由执行相同功能的冗余电路响应一个测试指令而输出的值,就能够检测到一个硬件错误。做为选择或者另外,根据测试指令,通过执行一个具有一个已知结果的算术或者逻辑操作(例如,乘以1,加0,等等),也能够检测出一个硬件错误。

通过以下的详细描述,本发明的所有目的、特征、以及优点将变得显而易见。

附图说明

本发明的创新特征将在附加的权利要求书中加以阐明。然而发明本身、以及一个最佳使用方式、其中进一步的目的和优点,通过结合附图参考以下一个说明性实施例的详细描述,可得到最好的理解,其中附图包括:

图1描绘了一个数据处理系统的说明实施例,其中可以有利地使用本发明的方法和系统;

图2A和2B说明了根据本发明的一个最佳实施例把一个指令流内部的空操作指令转变成测试指令;

图3描绘了图1所示的测试电路的一个更详细框图;

图4A是根据本发明的一个测试状态机的第一示例;以及

图4B是根据本发明的一个测试状态机的第二示例。

具体实施方式

现在参考附图,特别是参考图1,图中描绘了根据本发明的一个处理器的说明性实施例的一个高级框图,该处理器通常用10指示,用于处理指令和数据。尤其是,通过根据测试指令执行一个硬件自检,处理器10提供了改进的硬件故障检测功能。

处理器10由单个集成电路超标量处理器构成,如下面进一步论述那样,该超标量处理器包含各种执行单元、寄存器、缓冲器、存储器、及其他功能单元,这些都是由集成电路设备形成的。如图1所示,处理器10可以和其它设备,如一个系统存储器12和一个第二处理器10,通过一个互连结构14连在一起,以形成一个更大的数据处理系统,例如一个工作站计算机系统。处理器10还包含一个芯片内多级高速缓存分层结构,它分别包含一个统一的二级(L2)高速缓存16和分为二支的的一级(L1)指令(I)和数据(D)高速缓存18和20。如本领域技术人员公知的那样,高速缓存16、18和20提供了对高速缓存线的低延迟访问,该线对应于在系统存储器12中的存储单元。

由处理器10内的指令序列逻辑13读取并排列指令用于处理。在所描绘的实施例中,指令序列逻辑13包含一个读取指令地址寄存器(IFAR)30,它包含一个有效地址(EA)用来指示从L1 I-高速缓存18读取、用于处理的高速缓存线指令。在每个周期内,可以从以下三个来源的某一个中载入新的读取指令地址到IFAR30中,它们是:分支预测单元(BPU)36,提供由条件转移指令预测产生的推测性目标路径地址;全局完成列表(GCT)38,提供连续的路径地址;以及分支执行单元(BEU)92,提供由确定推测的条件转移指令所产生的非推测性地址。在有效-到-实际地址转换器(ERAT)32把包含在IFAR 30中的EA进行转换、并在I-高速缓存目录34中查找实际地址(RA)之后,如果命中/丢失逻辑22确定对应于IFAR 30中EA的高速缓存线指令没有存在于L1 I-高速缓存18中,则命中/丢失逻辑22经由I-高速缓存请求总线24把RA作为一个请求地址提供给L2高速缓存16。这种请求地址也可以通过L2高速缓存16内的预取逻辑基于最近访问模式产生。做为对一个请求地址的响应,L2高速缓存16输出一个高速缓存线指令,这些指令可能在经过可选的预解码逻辑144(如下所述)之后,经由I-高速缓存重载总线26载入到预取缓冲器(PB)28和L1 I-高速缓存18中。

一旦由IFAR 30中的EA指定的高速缓存线驻留在L1高速缓存18中时,L1 I-高速缓存18把该高速缓存线输出到分支预测单元(BPU)36和读取指令缓冲器(IFB)40中。BPU 36搜索该高速缓存线指令中的分支指令,如果有的话,就预测条件转移指令的结果。在一个分支预测之后,正如以上讨论那样,BPU 36向IFAR 30提供一个推测性读取指令地址,并将该预测传递到分支指令队列64中,以便当随后由分支执行单元92处理该条件转移指令时,能够确定该预测的准确性。

在该高速缓存线指令能够被指令转换单元(ITU)42转换之前,IFB 40临时地缓存从L1 I-高速缓存18接收的该高速缓存线的指令。在处理器10的说明性实施例中,ITU 42把指令从用户指令集结构(UISA)指令(例如PowerPC指令)转换成一个可能不同数目的内部ISA(IISA)指令,该指令可以被处理器10的执行单元直接执行。例如这种转换可以通过参考保存在一个只读存储器(ROM)模板中的微码来执行。在至少某些实施例中,UISA到IISA的转换会产生一个和UISA指令不同数目的IISA指令,和/或与相应的UISA指令有不同长度的IISA指令。然后通过全局完成列表38将产生的IISA指令赋值到一个指令组中,该指令组的成员允许彼此之间相互无顺序地执行。全局完成列表38跟踪每个还有待于通过至少一个相关的EA完成执行的指令组,该EA最好是在该指令组中最早指令的EA。

在UISA到IISA指令转换之后,依据指令类型将指令按次序发送给锁存器44、46、48和50中的某一个。也就是说,将分支指令及其他条件寄存器(CR)修改指令发送给锁存器44;将定点和载入-存储指令发送给锁存器46和48中的任何一个;以及将浮点指令发送给锁存器50。然后通过CR映射程序52、连接和计数(LC)寄存器映射程序54、异常寄存器(XER)映射程序56、通用寄存器(GPR)映射程序58、以及浮点寄存器(FPR)映射程序60中的适当一个,向每条需要一个重命名寄存器用于临时存储执行结果的指令,分配一个或多个在一个寄存器文件内的寄存器。

然后将这些发送的指令临时存放在CR发布队列(CRIQ)62、分支发布队列(BIQ)64、定点发布队列(FXIQ)66和68、以及浮点发布队列(FPIQ)70和72中适当的一个中。来自发布队列62、64、66、68、70以及72的指令能够随机(即,可能是无序的)发布到处理器10的执行单元中用于执行。然而,在这些指令的执行完成之前,一直在发布队列62-72中保留这些指令,而且如果这些指令中的任何一个需要重新发布的话,如果存在任何结果,则写回该结果数据。

作为说明,处理器10的执行单元包括:一个用于执行CR修改指令的CR单元(CRU)90;一个用于执行分支指令的分支执行单元(BEU)92;两个用于执行定点指令的定点单元(FXU)94和100;两个用于执行载入和存储指令的载入-存储单元(LSU)96和98;以及两个用于执行浮点指令的浮点单元(FPU)102和104。每一个执行单元90-104最好是做为一个具有若干流水线阶段的执行流水线来实现。

在某一执行单元90-104内执行期间,如果存在操作数,则一条指令从与该执行单元相连的一个寄存器文件内的一个或多个结构化及/或重命名寄存器中接收该操作数。当执行CR修改或者CR相关指令时,CRU 90和BEU 92访问该CR寄存器文件80,在一个最佳实施例中,该文件包含一个CR和多个CR重命名寄存器,这些寄存器中的每一个包含许多由一个或多个比特形成的明确字段。在这些字段当中,LT、GT、和EQ字段分别指示是否有一个值(一般为一条指令的结果或者操作数)小于零、大于零、或者等于零。连接和计数寄存器(LCR)的寄存器文件82包含一个计数寄存器(CTR)、一个连接寄存器(LR)、和每一个重命名寄存器,通过它们BEU 92还可以确定条件转移以获得一个路径地址。通用寄存器文件(GPR)84和86是同步的、重复的寄存器文件,用于存储由FXU 94和100、以及LSU 96和98访问并产生的定点以及整数值。浮点寄存器文件(FPR)88,类似于GPR 84和86,也可以作为同步寄存器的重复集合实现,该文件包含执行FPU 102和104的浮点指令、以及LSU 96和98的浮点载入指令所产生的浮点值。

在一个执行单元完成一条指令的执行之后,该执行通知以程序次序调度指令完成的GCT 38。为了完成由CRU 90、FXU 94和100或者FPU 102和104中的某一个执行的一条指令,GCT 38给适当的映射程序发信号,该映射程序设置一个指示来指明:分配给该指令的寄存器文件寄存器现在包含该寄存器的结构状态。然后将该指令从发布队列中删除,并且一旦该指令组内的全部指令已经完成,就从GCT 38中删除该指令。然而,其它类型的指令是以不同方式完成的。

当BEU 92完成了一条条件转移指令并且确定了应该获取的执行路径的路径地址时,就将该路径地址和BPU 36所预测的推测性路径地址相比较。如果两个路径地址相匹配,就不需要进一步处理了。然而,如果计算出来的路径地址和预测的路径地址不匹配,则BEU 92向IFAR 30提供正确的路径地址。无论在哪个事件中,然后能从BIQ64中删除分支指令,并且当同一个指令组内的全部其它指令已经完成时,从GCT 38中删除该指令。

在一条载入指令(包括一条载入-保留指令)执行之后,由执行该载入指令所计算出来的有效地址通过一个数据ERAT(未显示)转换成为一个实际地址,然后做为一个请求地址提供给L1 D-高速缓存20。在这一点上,在指示的载入执行之前,从FXIQ 66或者68中删除载入操作,并将其放入载入数据队列(LDQ)114中。如果该请求地址不在L1 D-高速缓存20中,就将该请求地址放入载入遗漏队列(LMQ)116中,由它从L2高速缓存16中获取请求数据,并且如果丢失的话,就从另一个处理器10或者从系统存储器12中获取请求数据。

存储指令(包括条件-存储指令)利用一个存储队列(STQ) 110类似地完成,在存储指令执行之后,在该队列中载入用于存储的有效地址。在该目标地址的等效-到-实际转换之后,来自STQ 110的数据能够存储到L1 D-高速缓存20和L2高速缓存16的任意一个或者是全部两个里。

如同其它任何电路一样,如上所述的处理器10的集成电路容易遇到硬件故障,例如,由于制造过程不正常或者环境条件而引起的。因此,在制造和包装过程中,为了确定处理器10是否已经遇到了一个硬件故障,处理器10一般将经受多次传统的环境和电的测试,包括设备测试和系统(例如,主板)测试。为便于这种测试,处理器10可包含一个连接在图1所示的内部逻辑和芯片封装的输入/输出(I/O)管脚之间遵从IEEE标准1149.1的边界扫描接口(未显示)。如本领域技术人员所公知的那样,IEEE标准1149.1接口还定义了一个测试通路端口(TAP)控制器,它对各种测试指令做出响应,把处理器10置入一个测试模式中,在这里测试模式定义为设备的一个状态,其中的管脚、测试电路、和内部逻辑配置用于测试而不是正常的系统操作。在测试模式下,TAP控制器可以执行一条指令(例如,EXTEST指令)来仅仅测试输出管脚,或者做为选择可以执行测试指令(例如,INTEST或者RUNBIST指令)以测试处理器10的内部逻辑。关于该IEEE标准1149.1TAP控制器和它相关测试指令的更多信息,可以在“Standard Test Access Port and Boundary-ScanArchitecture”、电机及电子工程师协会(1990年五月21日)以及1149.1b-1994补充说明中找到,在这里参考了这两篇文献。

尽管由IEEE标准1149.1定义的设备和主板测试允许检测硬件故障,但是这样的检测局限于:只有当被测设备(DUT)或者被测主板配置在测试模式下时,才能够检测到硬件故障。一般来说,即使有的话,一个设备或者主板也很少置于测试模式中以允许检测出它最终用途下的硬件故障。换句话说,在部署以后,在重要数据损坏或者系统故障出现之前,一般不能检测出传统系统中的硬件故障。

本发明通过检测发生在处理器操作的正常模式期间的硬件故障,提供了改进的硬件故障检测功能,因而允许及早地进行纠正动作,或许是在系统故障或者重要数据损坏之前。在此使用的“正常模式”(或者“正常操作”)定义为一个非测试模式操作,其中由一个处理器执行一个处理器的UISA或者IISA内的指令从而执行有用的作业。根据本发明,实现正常模式下的硬件故障检测,是通过在一个指令流中插入或者指定一个或多个指令作为测试指令,然后在该指令流内的指令执行期间,对这种测试指令做出响应,执行该处理器的指令序列逻辑13、执行电路(例如,执行单元90-104)、和/或数据存储器(例如,寄存器文件80-88)的硬件故障测试。在这种方式下,如果在部署之后发生处理器故障,则该故障就不会检测不到,而且通过在正常操作期间对该处理器元件的系统测试,将最终发现该故障。

尽管根据本发明的一个或多个测试指令能够在处理器10的UISA或者IISA内明确地定义,但是根据本发明的一个最佳实施例将UISA或者IISA的空操作(“no-op”)指令指定为测试初始指令是有利的,其中空操作指令不执行有用的作业并且不修改处理器状态。虽然传统的空操作指令就移动或者处理数据而言不执行有用的作业,空操作指令经常用于其它原因,例如填充软件内的定时循环、在高速缓存线边界上完成指令排列、实现期望的指令序列等等。根据本发明的最佳实施例,在以正常操作模式处理期间,这些空操作测试初始指令动态地被选定的测试指令所替代。通过用测试指令替换空操作测试初始指令,能够在正常操作模式内执行硬件故障检测而几乎没有降低处理器的性能,同时还保留了空操作指令的其它有用目的。

考虑上文,将意识到:测试指令能够以多种不同方式包含在由处理器10的指令序列逻辑13所构造的指令流中。例如,预解码逻辑144可以在把指令存入L1 I-高速缓存18之前,把从L2高速缓存16读取的UISA空操作(或者其它选定的)指令转化为UISA或者IISA测试指令。然而对图1所描绘的实施例来说,更可取的是,将测试指令指定或者插入到指令流中,并由ITU 42进行指令转换。为了易于理解,如图1所示,用于在指令流中指定或插入测试指令的电路,是独立的测试电路120。然而,应意识到:这种测试电路120能够在处理器10的指令处理流水线的不同位置实现,并且也可以包含在ITU42和/或预解码逻辑144内。

现在参考图2A和2B,图中说明了把一个示例指令流内的空操作指令转换为测试指令。在图2A中,示例指令流130a包括:按程序顺序从最早到最后,一个载入指令132、一个加法指令134、两个空操作指令136和138、一个整数乘法指令140以及一个减法指令142。如省略号表示所指示的那样,该指令流还可包含许多附加指令。

根据本发明的一个最佳实施例,空操作指令136和138可以已经存在于UISA指令中,其中UISA指令是从L1 I-高速缓存18处读取或者通过ITU 42插入到指令流130a中以取得期望的指令序列或者指令组,这些空操作指令被测试电路120用测试指令、例如图2B指令流130b中的测试指令150和152所替代。测试指令,诸如测试指令150和152,最好是用IISA操作码中的一个设置位作标记,来指示这些指令的计算结果不能成为该处理器结构状态的一部分。在所描述的实施例中,测试指令150是一个浮点乘法指令,用于测试FPU 102和104中的一个或两个中的硬件故障。另一方面,测试指令152是一个条件码设置指令,用来测试CRU 90的硬件故障。如以下进一步所讨论的那样,测试指令的操作码、由该测试指令使用的执行电路或指令序列电路、以及由该测试指令引用的寄存器,最好是在操作期间可以改变,以提供更广的检测范围。

现在参考图3,它描述了图1中测试电路120的一个更为详细的框图。如图所示,测试电路120有三个主要元件:一个指令译码器160、一个状态机170以及一个故障检测器180。指令译码器160与IFB 40和/或ITU 42相连,这样指令译码器160就能够检测到由ITU42构造的指令流中的空操作(或者其它选定的)UISA或者IISA测试初始指令。对在指令流中检测一个测试初始指令做出响应,指令译码器160会通知状态机170。

如下面参考图4A和4B进一步描述的那样,状态机170为每个检测到的测试初始(例如,空操作)指令,选择一个IISA测试指令操作码、一个或多个该测试指令的目标执行单元、和由该测试指令引用的操作数寄存器。然后状态机170将该测试指令提供给ITU 42用于发送和执行。最佳情况为,这样选择测试指令操作码,以便使每个测试指令都具有一个已知的结果,该结果要么是预定的(即常数),要么是不需要有关该测试指令的先验信息就能够由处理器10动态地验证的。在后面这种情况下,通过将该输出结果和一个输入操作数比较、或者通过比较冗余处理器硬件的输出来动态地验证该结果。因此,如果该测试指令是用来测试冗余执行单元如FXU 94和100,则能够把该测试指令(例如,一个整数加法)发送给两个锁存器46和48用于由FXU94和100执行,然后能够比较(通过故障检测器180)通过执行两个整数加法指令所产生的和,来确定在FXU 94和100中的某一个是否发生了一个硬件故障。

应当注意到:一个测试指令的多个实例能够以多种不同的方式产生。首先,能够将ITU 42中的发送逻辑配置为:如果测试指令的目标硬件中存在冗余情况的话,自动地向不同的执行单元发送同一测试指令的多个拷贝。第二,测试指令的操作码中的一位能够由状态机170所设置,用来指示该测试指令应该发送两次。第三,状态机170能够简单地插入多个相同的IISA测试指令到ITU 42中的指令流内。

仍然参考图3,在一个测试指令执行之后,在测试电路120内的故障检测器通过查阅该测试指令的执行结果来检测是否存在一个硬件故障。一个硬件故障的检测包含四个基本功能,在说明的实施例中,其通过多路复用器182-184以及比较器186执行。首先,如多路复用器182所表示,故障检测器180根据一个或多个指示状态机170相应状态的选择信号188,选择该测试指令执行结果(R1)的恰当来源。执行结果的来源最好包含至少所有的执行单元90-104和/或寄存器文件80-88的输出。其次,比较器186根据一个或多个选择信号188,选择一个恰当的期望值与测试指令的执行结果(R1)相比较。作为说明,可能的值最好包括至少0、1、一个输入操作数值、以及R2,其中R2是由冗余处理器硬件的第二实例产生的执行结果。第三,用比较器186表示,故障检测器180通过把多路复用器182输出的测试指令的执行结果(R1)和由多路复用器184选定的预期值相比较来检测一个硬件故障。第四,如果由多路复用器184选定的预期值和执行结果R1不相等,则故障检测器180就为一个硬件故障发信号。在说明实施例中,故障检测器180通过比较器186在信号线190上要求一个高优先级硬件故障中断来发信号通知检测到一个硬件故障。为了向中断处理程序提供有关检测到的硬件故障的附加信息,当比较器186要求一个硬件故障中断时,状态机170将检测到硬件故障状态的一个指示存储到一个软件-可存取的故障状态寄存器162中。然后中断处理程序例程就可以处理检测到的硬件故障,例如,通过使操作系统不再向处理器10调度一定类型的处理或者操作,或者是通过停用处理器10。

现在参考图4A,说明了根据本发明的一个状态机170a的第一示范性实施例的状态图。在第一示范性实施例中,状态机170a包括5个基本状态200-208,每一个状态分别对应于一个唯一的执行单元类型。作为说明,基本状态200对应于CRU 90;基本状态202对应于BEU 92;基本状态204对应于FXU 94和100;基本状态206对应于LSU 96和98;以及基本状态208对应于FPU 102和104。通过指令译码器160对指令流中一个空操作(其它选定的)测试初始指令的检测会导致状态机170a从一个先前的基本状态向一个当前基本状态转换,用使基本状态200-208相互连接的箭头表示。

当前基本状态指示哪一种执行单元被选为当前测试指令的目标。如果由当前基本状态所指示的执行单元类型具有冗余实例,则该测试指令将要至少由两个冗余实例执行,这样就可以比较结果。另一方面,如果处理器10仅仅包含单个由当前基本状态所指示的执行单元类型的实例,则执行结果(R1)将要与一个预定值(例如,0、1、或者一个输入操作数)相比较。

如图4A中进一步说明所示,基本状态200-208中的每一个分别具有一个相关的操作码状态机220-228,用于选择一个测试指令操作码。操作码状态机220-228中的每一个都包含一个或多个操作码状态,每一个状态分别表示对应于相关基本状态的执行单元类型所支持的一个IISA操作码。因此,例如,操作码状态机224可以包含操作码状态225a-225n,对应于由FXU 94和100所支持的整数运算操作(加、减、乘、除)以及整数逻辑操作(滚动、1的补码、2的补码、OR、AND)。相似地,操作码状态机228的操作码状态表示各种由FPU102和104所支持的浮点运算和逻辑操作,而且操作码状态机220的操作码状态的每一个分别表示由CRU 90执行的一个条件-代码-设置指令。虽然可以实现许多状态转换方案,但是最好是,每次在基础的基本状态之间进行转换时,就更新一个操作码状态机的当前状态。

如上面简要提到的那样,对于那些仅仅由单个执行单元所执行的测试指令,选择这些测试指令的操作码和操作数时最好使执行结果已知。满足这个限制的算术和逻辑操作例子如下表1所示。

表1

  操作  结果  操作数加0  操作数  操作数减0  操作数  操作数减去它本身  0  操作数乘1  操作数  操作数乘0  0  操作数除以1  操作数  操作数除以它本身  1  操作数0R它本身  操作数  操作数AND它本身  操作数  操作数XOR它本身  0

状态机170a的每个基本状态200-208还分别具有一个相关的一个寄存器状态机230-238,该状态机指定在由相关操作码状态机选定的测试指令执行期间将要访问的寄存器。因此每个寄存器状态机包含多个状态,每个状态分别对应于寄存器文件内的一个寄存器,该寄存器能够被对应于相关的某个基本状态200-208的执行单元类型所访问。就操作码状态机220-228来说,最好在每次转换到相关的一个基本状态200-208时,更新寄存器状态机230-238的当前状态。

寄存器状态机230-238(以及操作码状态机220-228)中的每一个能够以多种不同的方式独立地实现,这取决于期望的测试范围和寄存器文件端口和寄存器的使用。例如,为了最小化用于硬件故障检测的寄存器文件端口的使用,可以期望一般将操作码状态机220-228内的操作码限制在那些具有单个寄存器操作数的操作码中(即,仅仅具有单个操作数或者具有一个或多个立即操作数)。照这样,通过限制每周期中为测试目的而访问的寄存器文件端口的数量,减少测试指令对处理器性能的影响。

此外,能够实现寄存器状态机230-238中的每一个用于分配目标寄存器以保持测试指令结果,或者不向测试指令分配目标寄存器。如果测试指令没有指定目标寄存器,则测试就简化了,且处理器资源消耗得更少,这意味着更多的寄存器可用于执行指令流中的其它指令。然而,如果把目标寄存器分配给测试指令的话,就可以获得更大的测试范围,并且测试指令的执行结果从寄存器文件80-88而不是直接从执行单元90-104提供给故障检测器180的多路复用器182。当然,一个测试指令的执行结果不允许改变处理器10的结构状态。因此,如果寄存器状态机230-238的实现是使目标寄存器分配给测试指令的话,就必须将保持测试指令执行结果的目标寄存器标记为无效,例如,通过当传送一个测试指令执行结果到一个寄存器里时清除一个寄存器的有效位。

现在参考图4B,这里描述了根据该本发明的一个状态机170b的第二示范性实施例。除了在状态机170b中每一个执行单元90-104分别具有它自己相应的基本状态以外,状态机170b与图4A的状态机170a是相同的。这个差别表示:即使处理器10有目标执行单元的冗余实例,每一测试指令也仅仅由一个目标执行单元执行。当然,还可能实现状态机170a和170b之间的一个混合体,在多个执行单元中执行某些测试指令,并且仅仅在多个冗余执行单元中的一个中执行其它的测试指令。

如上所述,本发明提供了一种改进的方法和系统,用于在以处理器的正常操作模式执行指令期间测试处理器硬件故障。为了最小化这种测试对处理器性能的影响,本发明有利地使用了空操作指令循环用于测试。由于硬件故障测试是在正常操作模式下执行的,因此能够检测和处理在处理器部署之后产生的硬件故障。

虽然结合一个最佳实施例已经详细地显示和描述了本发明,但是本领域技术人员将会明白:在这里可以进行各种形式和细节上的变化而不背离本发明的精神和范围。例如本发明不局限于一个特定的处理器体系结构或是使用指令转换的处理器体系结构,而是适用于任何处理器体系结构。类似地,虽然本发明的上述描述采用对每个空操作或者其它选定的测试指令做出响应而处理硬件检测,但是应当明白:在本发明的某些实施例中,例如,通过在一个处理器控制寄存器中设置和清除一个软件可存取位,就能够打开或者关闭由测试电路120执行的硬件测试。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号