数据处理装置的制作方法

文档序号:11288487阅读:227来源:国知局
数据处理装置的制造方法

本发明涉及能够进行故障检测的数据处理装置。



背景技术:

作为提高数据处理装置的可靠性的方法,存在如下的锁步(lockstep):设cpu(centralprocessingunit:中央处理单元)为冗余结构,比较双方的输出来检测故障。在通常的锁步中,在二个cpu执行同一程序的同时比较双方的输出,如果不一致,则检测为故障。

但是,仅比较二个cpu的输出时,无法判断是哪个cpu发生了故障,因此无法继续处理。此外,在将cpu设为三个以上的情况下,虽然能够通过多数决定来选择正常的输出,但硬件成本增大。

在专利文献1中提出了如下方法:在冗余结构的要素的内部具备具有故障检测单元的要素,在从某个要素检测出故障的情况下,选择并输出未检测出故障的要素的输出。

在专利文献2中,在以锁步的方式进行动作的cpu内部检测到该cpu的内置ram(randomaccessmemory:随机存取存储器)的故障的情况下,通过抑制作为cpu输出的比较器的不一致输出并修复内置ram的障碍,提高了系统的可靠性。

在专利文献3中公开了如下方法:在双重系统中产生比较错误并检测出在一个系统中产生异常时,将未检测出异常的系统的存储装置的数据传送到检测出异常的系统的存储装置来修复故障。

现有技术文献

专利文献

专利文献1:wo2011-099233号公报

专利文献2:日本特开平08-063365号公报

专利文献3:日本特开平02-301836号公报



技术实现要素:

发明要解决的课题

在专利文献1中,在检测出故障时选择并输出正常的数据,因此能够继续处理,但不进行故障的修复。因此,存在如下课题:在检测出故障后丧失冗余性,可靠性下降。

在专利文献2中,在修复故障的期间内无法继续此前执行的处理,因此,存在无法应用到要求实时性的组装系统的课题。

在专利文献3中,在产生比较错误时不会将异常的数据纠正成正常的数据,因此,导致cpu接收到在产生比较错误时cpu读出的数据。因此,在为了继续处理而修复了故障后,需要再次读出产生了比较错误的数据。

本发明正是为了解决上述问题而完成的,其目的在于提供一种数据处理装置,即使在cpu内产生了故障的情况下,也能够继续要求实时性的处理,并且能够维持高可靠性。

用于解决课题的手段

本发明的一个方式的数据处理装置的特征在于,具有:存储器,其存储程序和数据;以及第一cpu和第二cpu,它们具有命令处理部、缓存、错误检测部和纠错部,所述命令处理部对命令进行处理,所述缓存存储所述存储器的程序和数据的一部分,所述错误检测部检测所述缓存中存储的数据的错误并输出错误通知,所述纠错部根据所述缓存中存储的数据和所述错误通知,纠正所述缓存中存储的数据,并将纠正后的数据输出到所述命令处理部,所述第一cpu的纠错部输入所述第一cpu的缓存中存储的数据、所述第一cpu的错误检测部输出的错误通知、所述第二cpu的缓存中存储的数据和所述第二cpu的错误检测部输出的错误通知,在所述第一cpu的错误检测部输出的错误通知为错误且所述第二cpu的错误检测部输出的错误通知不为错误的情况下,将所述第二cpu的缓存中存储的数据输出到所述第一cpu的命令处理部,在除此以外的情况下,将所述第一cpu的缓存中存储的数据输出到所述第一cpu的命令处理部。

发明效果

根据本发明,具有:存储器,其存储程序和数据;以及第一cpu和第二cpu,它们具有命令处理部、缓存、错误检测部和纠错部,所述命令处理部对命令进行处理,所述缓存存储所述存储器的程序和数据的一部分,所述错误检测部检测所述缓存中存储的数据的错误并输出错误通知,所述纠错部根据所述缓存中存储的数据和所述错误通知,纠正所述缓存中存储的数据,并将纠正后的数据输出到所述命令处理部,所述第一cpu的纠错部输入所述第一cpu的缓存中存储的数据、所述第一cpu的错误检测部输出的错误通知、所述第二cpu的缓存中存储的数据和所述第二cpu的错误检测部输出的错误通知,在所述第一cpu的错误检测部输出的错误通知为错误且所述第二cpu的错误检测部输出的错误通知不为错误的情况下,将所述第二cpu的缓存中存储的数据输出到所述第一cpu的命令处理部,在除此以外的情况下,将所述第一cpu的缓存中存储的数据输出到所述第一cpu的命令处理部。因此,即使在cpu内产生了故障的情况下,也能够继续处理,并且能够维持高可靠性。

附图说明

图1是示出本实施方式1中的硬件结构的图。

图2是本实施方式1中的纠错部的电路结构图。

图3是示出本实施方式1中的纠错部输出纠正数据的条件的表。

图4是本实施方式2中的命令处理部执行的程序的流程图。

图5是本实施方式2中的错误修复处理的流程图。

具体实施方式

实施方式1

图1是示出本发明的硬件结构的图。

在图1中,100a、100b是同一结构的cpu,与系统总线200连接。仅cpu100a的输出与系统总线200连接。另外,在本实施方式中,cpu100a和cpu100b为相同结构,但只要在本实施方式中叙述的结构要素相同,则cpu100a和cpu100b也可以具有不同的结构要素。

比较器300将cpu100a的输出和cpu100b的输出作为输入,将比较双方而得到的结果输出到比较错误信号400。

接着,说明cpu100a的内部结构。另外,cpu100b的内部结构也与cpu100a的内部结构相同。

cpu100a具有:处理命令的命令处理部101a;存储由命令处理部101a进行处理的命令码和数据的本地存储器(存储器)104a;临时存储本地存储器104a的数据的缓存(cache)102a;在缓存102a中检测出错误的情况下纠正数据的数据纠正部106a;存储cpu100a和cpu100b的错误检测信号的寄存器107a;以及修复缓存102a输出的数据的修复处理部108a。

缓存102a和本地存储器104a通过总线105a连接。另外,在本实施方式中,将存储器设为cpu100a内部的本地存储器104a,但也可以是cpu100a外部的例如与总线200连接的存储器或外部存储装置。

缓存102a具有:表示数据的存储状态的标志1021a;表示存储着的数据的地址的标签1022a;存储本地存储器104a的数据的一部分的数据区域1023a;存储与数据区域1023a对应的奇偶校验位的奇偶校验位区域1024a;以及从数据区域1023a和奇偶校验位区域1024a检查是否产生奇偶校验位错误的错误检测部1025a。另外,在本实施方式中,将错误检测部1025a设为缓存102a内部的结构要素,但例如也可以设为缓存102a外部的结构要素并由命令处理部101a执行。

错误检测部1025a将表示有无产生奇偶校验位错误的错误检测信号1026a输出到纠错部106a,并且存储到寄存器107a中。

另外,在寄存器107a中还存储有从cpu100b的错误检测部1025b输出的错误检测信号1026b的信号值。

纠错部106a将cpu100a的错误检测信号1026a、缓存102a输出的数据1027a、cpu100b的错误检测信号1026b、cpu100b的缓存102b输出的数据1027b作为输入,进行数据的纠正。

纠错部106a将纠正后的数据1028a输出到命令处理部101a和总线105a。

修复处理部108a参照寄存器107a,在检测出错误的情况下,修复缓存102a输出的数据1027a。另外,在本实施方式中,将修复处理部108a设为cpu100a内部的结构要素,但修复处理部108a例如也可以是本地存储器104a上的程序,还可以是与总线200连接的存储器(未图示)或外部存储装置上的程序。

接着说明cpu100a的动作。

命令处理部101a从本地存储器104a中读出应执行的命令或执行所需的数据。此时,命令处理部101a的读出请求首先被传递到缓存102a,确认在缓存102a内的数据区域1023a中是否存储有要读出的数据。

缓存102a根据标志1021a和标签1022a的信息,确认在数据区域1023a中是否存储有存在读出请求的数据。

在数据区域1023a中存在相应数据的情况下,缓存102a读出与数据区域1023a的相应数据对应的奇偶校验位区域1024a,并输入到错误检测部1025a。

在数据区域1023a中不存在相应数据且在用于存储相应数据的区域中存储有与本地存储器104a相同的数据的情况(标志1021a中的dirty比特(d)为0的情况)下,缓存102a在使用于存储相应数据的区域无效后,经由总线105a对本地存储器104a请求读出,读入能够存储到缓存102a的大小的数据。

缓存102a将从本地存储器104a读出的数据存储到数据区域1023a中,并且更新标志1021a和标签1022a。

此外,缓存102a生成与数据的值对应的奇偶校验位并存储到奇偶校验位区域1024a中。

此外,缓存102a将存储着的数据和奇偶校验位输出到错误检测部1025a。

错误检测部1025a检查输入的数据与奇偶校验位是否一致。

在奇偶校验位不一致的情况下,错误检测部1025a向错误检测信号1026a输出“1”(有错误)。

在数据与奇偶校验位一致的情况下,错误检测部1025a向错误检测信号1026a输出“0”(无错误)。

缓存102a除了将错误检测信号1026a输出到纠错部106a和寄存器107a以外,还将错误检测信号1026a输出到另一个cpu100b的纠错部106b和寄存器107b。

此外,缓存102a除了将由命令处理部101a请求读出的数据1027a输出到错误检测部106a以外,还将该数据1027a输出到另一个cpu100b的纠错部106b。

使用图2和图3说明纠错部106a的详情。

图2是纠错部106a的电路结构,图3是示出纠正后的数据1028a的输出条件的表。

图2的10261表示“非”门,10262表示“与”门,10263表示选择器。

选择器10263在“与”门10262的输出为0的情况下,输出作为自身cpu的cpu100a的数据1027a,在“与”门10262的输出为1的情况下,输出作为另一个(另一方)cpu的cpu100b的数据1027b。输出的数据作为纠正后的数据1028a被输出到命令处理部101a。

另外,在数据区域1023a不存在相应数据且在用于存储相应数据的区域中存储有比本地存储器104a新的数据的情况(标志1021a中的dirty比特(d)为0的情况)下,缓存102a将用于存储相应数据的区域内的数据写出到本地存储器104a。

缓存102a从数据区域1023a和奇偶校验位1024a读出要写入到本地存储器104a的数据,并将读出的数据和奇偶校验位输出到错误检测部1025a。

错误检测部1025a检查输入的数据与奇偶校验位是否一致。

在奇偶校验位不一致的情况下,错误检测部1025a向错误检测信号1026a输出“1”(有错误)。

在数据与奇偶校验位一致的情况下,错误检测部1025a向错误检测信号1026a输出“0”(无错误)。

缓存102a除了将错误检测信号1026a输出到纠错部106a以外,还将错误检测信号1026a输出到另一个cpu100b的纠错部106b。

此外,缓存102a将要写入到本地存储器104a的数据1027a输出到纠错部106b。

纠错部106a除了将从缓存102a输出的错误检测信号1026a和数据1027a作为输入以外,还将从cpu100b的缓存102b输出的错误检测信号1026b和数据1027b作为输入来进行纠正。

纠错部106a经由总线105a将纠正后的数据1028a输出到本地存储器104a。在通过上述动作写出到本地存储器104a后,请求从本地存储器104a读出,读入能够存储到缓存102a的大小的数据。

缓存102a将从本地存储器104a读出的数据存储到数据区域1023a中,并且更新标志1021a和标签1022a。

此外,缓存102a生成与数据的值对应的奇偶校验位并存储到奇偶校验位区域1024a中。

此外,缓存102a将存储着的数据和奇偶校验位输出到错误检测部1025a。

错误检测部1025a检查输入的数据与奇偶校验位是否一致。

在奇偶校验位不一致的情况下,错误检测部1025a向错误检测信号1026a输出“1”(有错误)。

在数据与奇偶校验位一致的情况下,错误检测部1025a向错误检测信号1026a输出“0”(无错误)。

缓存102a除了将错误检测信号1026a输出到纠错部106a和寄存器107a以外,还将错误检测信号1026a输出到另一个cpu100b的纠错部106b和寄存器107b。

此外,缓存102a将由命令处理部101a请求读出的数据1027a输出到纠错部106b。

纠错部106a除了将从缓存102a输出的错误检测信号1026a和数据1027a作为输入以外,还将从cpu100b的缓存102b输出的错误检测信号1026b和数据1027b作为输入来进行纠正。

纠错部106a输出纠正后的数据1028a。

纠错部106a在自身cpu100a的缓存102a输出的错误检测信号1026a为“0”的情况下,由于未产生错误,因此对纠正后的数据1028a输出数据1027a的值。

此外,在错误检测信号1026a、错误检测信号1026b均为“1”的情况下,由于在双方的cpu100a、cpu100b内均产生错误,任何数据都不正确,因此,对纠正后的数据1028a输出自身cpu100a的数据1027a的值。

另一方面,错误检测信号1026a为“1”且错误检测信号1026b为“0”的情况是指,在cpu100a内产生错误,在cpu100b内未产生错误。

因此,估计数据1027a是异常的值且数据1027b是正常的值,因此,对纠正后的数据1028a输出数据1027b的值。

寄存器107a分别存储从缓存102a输出的错误检测信号1026a和从cpu100b的缓存102b输出的错误检测信号1026b的值。

在各信号输出1的情况下保持该值。修复处理部108a能够确认在读出寄存器107a的值时是否产生了错误。

纠错部106a将纠正后的数据1028a输出到命令处理部101a。

命令处理部101a根据纠错部106a输出的数据继续处理。

以上为cpu100a的动作。cpu100b的动作也与cpu100a的动作相同。

对本实施方式的效果进行叙述。

以往,在cpu100a的缓存102a的数据区域1023a的值中的1比特产生反转错误的情况下,错误检测部1025a检测出奇偶校验位错误,但无法纠正数据,因此,进行了数据读出的命令处理部101a无法接收到正确的值,从而难以继续正常的处理,相对于此,在本实施方式中,如上所述,纠错部106a将未产生错误的cpu100b的数据1027b作为纠正后的数据1028a输出到命令处理部101a,因此,命令处理部101a能够接收到正常的数据,从而与未产生错误的情况同样地继续处理。

实施方式2

在本实施方式中,对包含产生了错误的数据的区域的缓存的修复处理进行说明。

在本实施方式中,作为通常的处理,说明反复执行处理1~3的例子。分别设处理1、2、3的优先度为100、200、300,编号越小,优先度越高。

此外,设处理1为系统动作所必需的处理,设处理2、3为用于实现系统的高功能化的附加处理。因此,在产生了异常的情况下,只要能够继续处理1,则虽然功能受到限制,但作为系统能够继续运转。

另外,处理1、处理2和处理3可以是本地存储器104a上的程序,也可以是与总线200连接的存储器(未图示)或外部存储装置上的程序。

图4示出在本实施方式中由命令处理部101a执行的程序的流程图。

对图4的流程图的动作进行说明。

在将cpu复位而开始处理后,首先开始执行初始化处理(s1)。在初始化处理中,进行存储器、io的初始化以及h/w的错误检查。

在初始化处理完成时,执行处理1(s2)。

在处理1的执行完成时,接着进行错误检查处理(s3)。

在错误检查处理中,读出寄存器107a中存储的cpu100a、100b的错误检测信号1026a、1026b的值。

此时,在错误检测信号1026a、1026b的值均为“0”而不为错误的情况(s4的条件为“否”的情况)下,执行处理2(s5),然后执行处理3(s6)。

在处理3的执行完成时,再次执行处理1(返回s2)。

另一方面,在错误检测信号1026a、1026b中的任意一方或双方的值为“1”,即产生了错误的情况(s4的条件为“是”的情况)下,确认是否在双方的cpu中产生了错误(s7)。

在双方的cpu中产生了错误的情况(s7的条件为“是”的情况)下,实施错误处理(s9)。

在错误处理中,实施产生了缓存102a的奇偶校验位错误时的错误处理。这里,将cpu复位,从初始化处理(s1)起再次实施处理,但也可以是在系统中定义的错误产生时的错误处理。

在仅cpu100a、cpu100b中的任意一方产生了错误的情况下,即在仅错误检测信号1026a、1026b中的任意一方为“1”而另一方为“0”的情况(s7的条件为“否”的情况)下,由修复处理部108a进行错误修复处理(s8)。

在错误修复处理完成时,再次执行处理1(返回s2)。

在本实施方式中,在如图4的流程图所示,错误检测部1025a和错误检测部1025b中的任意一方检测到错误时,命令处理部101a不执行处理2(s5)、处理3(s6),而仅执行处理1(s2)和错误修复处理(s8)。在有时间制约的组装系统中,存在要在确定的时间内执行的处理,在该处理的执行未完成的情况下,有时系统停止。因此,在错误检测时仅执行错误修复处理(s8)的情况下,cpu100a执行的系统停止。

此外,在除了处理1、处理2、处理3以外不存在执行其它处理的余裕的情况下,无法执行错误修复处理(s8)。

但是,如上所述,在设处理1为系统动作所必需的处理,设处理2、3为用于实现系统的高功能化的附加处理时,只要能够至少继续执行处理1,则作为系统能够继续运转。在本发明中,在错误检测时仅执行系统的动作所必需的处理1,确保执行错误修复处理(s8)的时间,由此,能够实现系统的动作继续和可靠性的提高。

接着,使用图5的流程图说明错误修复处理(s8)。

在错误修复处理中,首先对缓存102a发出使包含产生了错误的数据的区域的缓存无效的命令(s101)。

然后,等待至缓存的无效化完成为止(在s102为“否”的期间内反复处理),如果无效化完成(s102为“是”),则清空寄存器107a的值(s103)。另外,在清空寄存器107a的值时,例如可以设定0。

然后,再次对缓存102a发出使缓存有效的命令(s104)。

在s101中使缓存102a无效时的缓存102a的动作与以往的缓存的无效化动作相同。

缓存102a在接收到利用程序使缓存无效的命令时,将标志1021a中的表示存储状态的valid比特(v)设为0(无效),舍弃内容。

在缓存102a为直写式缓存的情况下,与缓存中存储的数据相同的值也被存储在本地存储器104a中,因此,仅将标志1021a的valid比特(v)设为0即可。

但是,在缓存102a为回写式缓存的情况下,当产生从命令处理部101a向本地存储器104a的写入时,虽然写入到缓存102a的数据区域1023a,但不写入到本地存储器104a。

因此,有时需要将使缓存102a无效时存储在数据区域1023a中的最新的值写入到本地存储器104a中。

根据标志1021a中的dirty比特(d)是否为1,判断是在本地存储器104a中存储有最新的值还是已写入到缓存102a的数据中。

在dirty比特为0的情况下,数据区域1023a中存储的值与本地存储器104a中存储的值相同,因此,缓存102a将标志1021a的valid比特设为0。

在dirty比特为1的情况下,数据区域1023a中存储的值与本地存储器104a中存储的值不同,因此,缓存102a读出数据区域1023a的数据,并且读出对应的奇偶校验位区域1024a的奇偶校验位,在由错误检测部1025a进行奇偶校验后,将错误检测信号1026a和数据1027a输出到纠错部106a。

纠错部106a将缓存102a输出的错误检测信号1026a和数据1027a作为输入,进行错误的纠正。

此时,cpu100b也正进行相同的动作,因此,向纠错部106a还输入错误检测信号1026b和数据1027b的值。

纠错部106a除了将从缓存102a输出的错误检测信号1026a和数据1027a作为输入以外,还将从cpu100b的缓存102b输出的错误检测信号1026b和数据1027b作为输入来进行纠正,纠正后的数据1028a经由总线105a被输出到(被写入到)本地存储器104a中。

这样,在dirty比特为1的情况下,纠错部106a在将数据区域1023a中存储的数据写入到本地存储器104a后,将dirty比特和valid比特均设为0。

对本实施方式的效果进行叙述。

以往,在产生了上述比特的反转错误的状态下命令处理部101a读出该数据时,纠错部106a始终输出cpu101b的数据1027b,作为纠正后的数据1028a。

因此,在该状态下进一步产生cpu101b的数据区域1023b的比特反转的错误时,无法进行错误的纠正,可靠性下降。

在本实施方式中,当错误检测部1025a检测到错误时,命令处理部101a执行的程序进行错误修复处理(s8),尝试修复数据区域1023a的比特反转错误。

由此,在数据区域1023a的比特反转错误为软件错误这样的临时性错误的情况下,只要将值从本地存储器104a再次写入到数据区域1023a,则能够修复数据。

因此,命令处理部101a在程序的错误修复处理(s8)中使缓存102a一度无效后使其再次有效,由此,在数据区域1023a中再次写入本地存储器104a的值,因此,能够在错误产生后返回到高可靠性的状态。

另外,在不是临时性错误的情况下,在数据修复后,错误检测部1025a再次检测错误。但是,纠错部106a将cpu101b的数据1027b作为纠正后的数据1028a输出到命令处理部101a,因此,产生仅在cpu101b的一个系统中继续动作这样的可靠性下降,但命令处理部101a能够接收正常的数据而继续处理。

此外,在本实施方式中,由同一硬件(纠错部106a)进行在由命令处理部101a请求读出时回送正确值的处理、和在缓存无效化时向本地存储器104a回送正确值的处理的双方。

如图2所示,纠错部106a仅由选择器和逻辑电路构成,硬件量较少,选择器输出自身cpu100a的数据1027a和另一cpu100b的数据1027b中的任意数据,作为纠正后的数据1028a,逻辑电路根据错误检测信号1026a、1026b的值,决定选择哪个数据。

这样,在本发明中,能够以较少的硬件量实现错误产生时的错误纠正和从错误状态的修复。

标号说明

100a:cpu内核;100b:cpu内核;101a:命令处理部;101b:命令处理部;102a:缓存;102b:缓存;104a:本地存储器;104b:本地存储器;105a:总线;105b:总线;106a:纠错部;106b:纠错部;107a:寄存器;107b:寄存器;108a:修复处理部;108b:修复处理部;200:总线;300:比较器;400:比较错误信号;1021a:标志;1021b:标志;1022a:标签;1022b:标签;1023a:数据;1023b:数据;1024a:奇偶校验位;1024b:奇偶校验位;1025a:错误检测部;1025b:错误检测部;1026a:错误检测信号;1026b:错误检测信号;1027a:缓存102a输出的数据;1027b:缓存102b输出的数据;1028a:纠正后的数据;1028b:纠正后的数据。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1