发明内容
(一)要解决的技术问题
本发明提供一种内存的在线故障检测方法和装置,以解决现有技术中的内存检测方法不适用于7×24小时不间断工作的设备的技术问题。
(二)技术方案
为解决上述技术问题,本发明提供一种内存的在线故障检测方法,包括:
将CPU中的数据同时写入工作内存和映像内存;
将CPU写入所述工作内存和所述映像内存中的数据通过比较单元进行实时逐位比较:当内存比较结果一致时,判断内存正常工作;当内存比较结果不一致时,判断内存故障并进行相应的处理;
利用CPU向内存空间以外的虚拟空间和所述映像内存中同时写入不同的数据,通过比较单元进行实时逐位比较实现比较单元自检:当自检比较结果一致时,判断比较单元故障;当自检比较结果不一致时,判断比较单元正常工作。
进一步地,所述方法还包括:
在CPU和所述映像内存间接入缓冲器,当所述映像内存输出数据时,令所述缓冲器处于高阻态,所述映像内存输出的数据无法到达CPU。
进一步地,
所述将CPU写入所述工作内存和所述映像内存中的数据通过比较单元进行实时逐位比较包括:将CPU写入所述工作内存和所述映像内存中的数据的每个数据位进行实时的异或比较,输出内存比较结果;
所述通过比较单元进行实时逐位比较实现比较单元自检包括:通过比较单元对每个数据位进行实时的异或比较,输出自检比较结果。
进一步地,所述判断内存故障并进行相应的处理包括:
输出内存故障结果;
和/或,进行内存故障报警;
和/或,对CPU进行断电处理。
进一步地,所述利用CPU向内存空间以外的虚拟空间和所述映像内存中写入不同的数据包括:
针对每一个数据位,均利用CPU向虚拟空间和所述映像内存写入只有该数据位不同的数据。
另一方面,本发明还提供一种内存的在线故障检测装置,包括:
写入单元,用于将CPU中的数据同时写入工作内存和映像内存;还用于利用CPU将不同的数据同时写入内存空间以外的虚拟空间和所述映像内存;
比较单元,用于将CPU写入所述工作内存和所述映像内存中的数据进行实时逐位比较,输出内存比较结果;还用于将CPU写入所述虚拟空间和所述映像内存中的数据进行实时逐位比较,输出自检比较结果;
内存故障判断单元,用于判断内存工作状态,当所述内存比较结果一致时,判断内存正常工作;当所述内存比较结果不一致时,判断内存故障并进行相应的处理;
自检单元,用于判断比较单元工作状态,当所述自检比较结果一致时,判断比较单元故障;当所述自检比较结果不一致时,判断比较单元正常工作。
进一步地,所述装置还包括:
缓冲器,连接在CPU和所述映像内存之间,用于防止所述映像内存的数据到达CPU,当所述映像内存输出数据时,所述缓冲器处于高阻态,所述映像内存输出的数据无法到达CPU。
进一步地,所述比较单元包括:
内存比较子单元,用于将CPU写入所述工作内存和所述映像内存中的数据的每个数据位进行实时的异或比较,输出内存比较结果;
自检比较子单元,用于将CPU写入所述虚拟空间和所述映像内存中的数据的每个数据位进行实时的异或比较,输出自检比较结果。
进一步地,所述内存故障判断单元包括:
故障输出子单元,用于输出内存故障结果;
和/或,报警子单元,用于进行内存故障报警;
和/或,断电子单元,用于对CPU进行断电处理。
进一步地,所述写入单元包括:
自检写入子单元,用于针对每一个数据位,均利用CPU向虚拟空间和所述映像内存写入只有该数据位不同的数据。
(三)有益效果
可见,在本发明提供的内存的在线故障检测方法和装置中,使用两个内存实时存储相同的数据进行比较,对于内存出现的故障可以在微妙级别识别出来,提高了内存故障检测的及时性,降低了内存故障造成危害的可能性。本发明的方法简单,不影响程序的执行时间,且对软件没有特殊需求,开发难度大大降低。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例首先提供一种内存的在线故障检测方法,参见图1,包括:
步骤101:将CPU中的数据同时写入工作内存和映像内存。
步骤102:将CPU写入所述工作内存和所述映像内存中的数据通过比较单元进行实时逐位比较:当内存比较结果一致时,判断内存正常工作;当内存比较结果不一致时,判断内存故障并进行相应的处理。
步骤103:利用CPU向内存空间以外的虚拟空间和所述映像内存中同时写入不同的数据,通过比较单元进行实时逐位比较实现比较单元自检:当自检比较结果一致时,判断比较单元故障;当自检比较结果不一致时,判断比较单元正常工作。
可见,在本发明实施例提供的内存的在线故障检测方法中,使用两个内存实时存储相同的数据进行比较,对于内存出现的故障可以在微妙级别识别出来,提高了内存故障检测的及时性,降低了内存故障造成危害的可能性。本发明实施例的方法简单,不影响程序的执行时间,且对软件没有特殊需求,开发难度大大降低。
为了保证CPU和工作内存之间正常的数据读写,不影响工作内存的正常工作,在本发明的一个实施例中,优选地,在CPU和映像内存间可以接入缓冲器Buffer,当所述映像内存输出数据时,令缓冲器处于高阻态,所述映像内存输出的数据无法到达CPU。
在本发明的另一个实施例中,优选地,将CPU写入工作内存和映像内存中的数据通过比较单元进行实时逐位比较可以包括:将CPU写入所述工作内存和所述映像内存中的数据的每个数据位D0、D1…Dn进行实时的异或比较,将所有位数的比较结果连接到或门上,只要有一位输出不一致,或门就会输出不一致的内存比较结果。
同理,优选地,通过比较单元进行实时逐位比较实现比较单元自检也可以包括:通过比较单元对每个数据位进行实时的异或比较,输出自检比较结果。
在本发明的一个实施例中,优选地,判断内存故障并进行相应的处理可以包括:输出内存故障结果;和/或,进行内存故障报警;和/或,对CPU进行断电处理。
为了对比较单元的每一位数据位都能够执行自检过程,在本发明的另一个实施例中,优选地,利用CPU向内存空间以外的虚拟空间和映像内存中写入不同的数据可以包括:针对每一个数据位,均利用CPU向虚拟空间和所述映像内存写入只有该数据位不同的数据。利用这种循环数据位方式的比较和自检结果输出,可以识别出每一位数据位的故障。
下面以对32位数据总线的系统进行内存在线故障检测为例,来详细说明本发明实施例的具体实现过程,参见图2。
步骤201:将CPU中的数据同时写入工作内存和映像内存。
图3为本发明实施例的内存检测电路示意图,根据CPU的典型电路,将CPU的片选信号CS、读写信号W/R、地址总线A[0..n]、数据总线D[0..n]直接连接到工作内存上,保证CPU可以正常工作的同时,再将CS、W/R、A[0..n]、D[0..n]信号通过缓冲区Buffer连接到映像内存上。当CPU向工作内存和映像内存同时写入数据时,由W/R、CS信号控制Buffer导通,数据D[0..n]可以同时写入工作内存、映像内存中。当CPU读取数据时,CS、W/R、A[0..n]信号可以正常访问映像内存,再通过W/R、CS信号控制Buffer处于高阻态,映像内存的数据可以正常输出,但是由于Buffer处于高阻态,映像内存的数据并不会到达CPU,不影响工作内存的正常工作。
步骤202:将CPU所述工作内存和映像内存中的数据通过比较单元进行实时逐位比较。
本步骤中,将工作内存、映像内存连接到比较单元上,比较单元在CS信号的控制下对工作内存、映像内存的数据总线进行逐位比较,参见图4的比较单元示意图。对两个内存数据总线的每个数据位D0、D1…D32进行异或比较,相同的话输出0,不相同的输出1,所有位数比较的结果连接到或门上,只要有一位输出不一致,或门就会输出1信号。比较的结果最终通过CS信号锁存,根据不同的CPU的时序,可以选择上升沿或者下降沿锁存。比较单元通过逻辑器件实现,当然,也可以利用FPGA等实现。
步骤203:输出内存比较结果。
本步骤中,可以通过输出的内存比较结果判断内存故障并进行相应的处理。当内存比较结果一致时,判断内存正常工作;当内存比较结果不一致时,进行相应的处理,本发明实施例中,将输出内存比较结果并对CPU断电。
步骤204:进行比较单元自检。
当比较单元故障一直输出比较结果正确时,会导致内存真正故障时检测不到,因此需要适时对比较单元进行检查。本发明实施例中,通过程序模拟数据比较不一致的情况,来判断比较单元是否能够输出比较不一致信号:利用CPU通过高位地址向内存空间以外的虚拟空间写入数据,利用该高位地址线控制Buffer处于高阻态,同时将Buffer后的数据总线上拉,在高阻态下表现为高电平。
令CPU向高位地址写数据的格式为从D0~D32开始依次输出0,其他位输出1,而向映像内存的所有的数据位都输出1,也即从D0=0,Dn=1(n≠0),D1=0,Dn=1(n≠1),依次到D32=0,Dn=1(n≠32)。这样比较单元就可以识别出来每一位数据位对应的故障。比较单元自检过程对于32位数据总线只需要执行32次,基本不占应用程序执行时间。
至此,则完成了本发明实施例内存的在线故障检测方法全过程。
本发明实施例还提供了一种内存的在线故障检测装置,参见图5,包括:
写入单元501,用于将CPU中的数据同时写入工作内存和映像内存;还用于利用CPU将不同的数据同时写入内存空间以外的虚拟空间和所述映像内存;
比较单元502,用于将CPU写入所述工作内存和所述映像内存中的数据进行实时逐位比较,输出内存比较结果;还用于将CPU写入所述虚拟空间和所述映像内存中的数据进行实时逐位比较,输出自检比较结果;
内存故障判断单元503,用于判断内存工作状态,当所述内存比较结果一致时,判断内存正常工作;当所述内存比较结果不一致时,判断内存故障并进行相应的处理;
自检单元504,用于判断比较单元工作状态,当所述自检比较结果一致时,判断比较单元故障;当所述自检比较结果不一致时,判断比较单元正常工作。
在本发明的一个实施例中,优选地,检测装置还可以包括:缓冲器,连接在CPU和所述映像内存之间,用于防止映像内存的数据到达CPU,当映像内存输出数据时,缓冲器处于高阻态,映像内存输出的数据无法到达CPU。
在本发明的另一个实施例中,优选地,比较单元502可以包括:
内存比较子单元,用于将CPU写入所述工作内存和所述映像内存中的数据的每个数据位进行实时的异或比较,输出内存比较结果;
自检比较子单元,用于将CPU写入所述虚拟空间和所述映像内存中的数据的每个数据位进行实时的异或比较,输出自检比较结果。
在本发明的一个实施例中,优选地,内存故障判断单元503可以包括:
故障输出子单元,用于输出内存故障结果;
和/或,报警子单元,用于进行内存故障报警;
和/或,断电子单元,用于对CPU进行断电处理。
在本发明的另一个实施例中,优选地,写入单元501可以包括:
自检写入子单元,用于针对每一个数据位,均利用CPU向虚拟空间和所述映像内存写入只有该数据位不同的数据。
可见,本发明实施例具有如下有益效果:
在本发明实施例提供的内存的在线故障检测方法和装置中,使用两个内存实时存储相同的数据进行比较,对于内存出现的故障可以在微妙级别识别出来,提高了内存故障检测的及时性,降低了内存故障造成危害的可能性。本发明实施例的方法简单,不影响程序的执行时间,且对软件没有特殊需求,开发难度大大降低。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。