发明内容
针对上述问题,本发明提供了一种基于二维纠错码的内存加固方法及电路,该方法及电路既可以对抗SEU引起的故障率范围内的影响,又可以评估信息存储器的故障类型和纠错手段纠错能力,可以保证存储器在正常工作时,绝大部分故障都可以被纠正,进而保证系统有较高的工作效率,又可以在存储器产生了严重故障,不能由加固技术的容错方法纠正时,向CPU发出报警信号。
本发明的另一个目的在于提出一种基于二维纠错码的内存加固方法及电路,该方法及电路实现简便,安全可靠,低功耗、高效率,且不影响运算效率,适应高速存储器的应用。
为实现上述目的,本发明的技术方案为:
一种基于二维纠错码的内存加固方法,该方法将存储器分为程序存储区和数据存储区,对它们进行了分区加固,并根据存储区的各自特点通过存储器自诊断技术(MemorySelf-diagnose Method,MSDM)实现对存储内容的诊断和对错误的纠正,进行纠错报警。在纠错过程中,MSDM既可以纠正任意给定宽度内的连续故障和非连续故障;又可以判断存储器是否产生了超过纠错码纠错能力的故障。当存储器产生纠错码不能纠正的错误时,MSDM产生报警信号。
MSDM(Memory Self-diagnose Method,MSDM)利用程序和数据的不同特点,将存储器划分成不同的区,并将程序和数据存储在不同的区块中,一个被称为程序存储区,另一个是数据存储区。
MSDM方法在写数据和读数据时实现不同的功能,并对两个存储区,采用相异的处理报警流程。MSDM的过程可以分为:MSDM写流程、程序存储区MSDM读流程和数据存储区MSDM读流程。
对于程序存储区和数据存储区,MSDM在写数据时先计算数据的纠错码,再将数据和纠错码存入存储区的相应区域。MSDM在读数据时计算读出数据的纠错码,并和写数据时存储的纠错码一起评估当前数据的故障类型和纠错能力,再判断数据的故障类型是否超过了纠错能力。如果没有超过,则表示故障可以被纠正,纠正数据,并将纠正后的数据从存储区中读出。否则,表示故障类型超过了纠错码的纠错能力,故障不能被纠正,发出报警信号。
对程序存储区和数据存储区,MSDM采用了相异的方法来响应和处理报警信号。
由于程序存储区的故障对FPGA的重构过程有严重影响,所以,MSDM在发出报警信号后,关闭程序存储区的读写权限,并将程序存储区清零,等待程序重新加载。程序存储区MSDM读流程如下:
101、读出数据;
102、计算二维纠错码;
103、评估故障类型和纠错能力;
104、判断是否超过纠错能力,如果没超过,则进行纠错,纠正数据,进行正确数据的读出;如果超过纠错能力,则进行下一步;
105、发出报警信号,关闭程序存储区读写权限;
106、程序存储区清零,判断是否需要重新加载;
107、重新加载程序。
与程序故障会引起CPU产生难以预料的操作不同,数据故障会在控制流上传播,导致结果错误、路径错误等错误,这些错误可以被追踪、回溯并纠正,不需要产生报警信号时立刻终止重构过程。而且,数据在重构过程中不停变化,如果对数据存储区采用和程序存储区一样的方法来响应报警信号,会影响系统的效率。所以,对于数据存储区,MSDM在发出报警信号的同时读出有故障的数据。CPU接到报警后可以继续执行,也可以跳转到前面一个能够正确执行的检查点重新执行。为了判断数据存储区的故障是否影响多个存储单元的严重错误,MSDM自动检测相邻存储单元中的数据是否有故障,如果其他数据没有故障,则说明故障的影响较小,系统将继续执行,如果检测到若干个存储单元的故障都不可纠正,则可以判断该故障为严重故障。MSDM给CPU发出报警信号,同时对存储器中的数据清零,结束对FPGA的重构,并等待重新加载数据。数据存储区MSDM读流程具体如下:
201、读出数据;
202、计算二维纠错码;
203、评估故障类型和纠错能力;
204、判断是否超过纠错能力,如果没超过,则进行纠错,纠正数据,进行正确数据的读出;如果超过纠错能力,则进行下一步;
205、发出报警信号,读出数据;
206、检测相邻的多个存储单元;
207、判断有无多个报警,无则结束,有则继续下一步;
208、数据存储区清零,进行攻击报警;
209、判断是否需要重新加载数据;
210、重新加载数据。
MSDM是利用二维纠错码纠正多位错误,同时评估故障模型和纠错能力,并产生报警信号,且MSDM采用的二维纠错码以数据位宽为单位计算纠错码。与传统二维纠错码相比,以数据位宽为单位的优点是可以一次计算出二维纠错码所需要的所有校验码,而不需要为了计算列纠错码在写数据之前先读出存储单元原有的数据。
进一步,所述二维纠错码的生成过程包括数据分组、矩阵表示、行列确定和纠错码生成四个步骤:
1、数据分组;将数据以数据位宽为单位进行分组,把在物理上相邻的存储单元分到不同的逻辑组中。分组可以将多比特故障分散到不同组中,使系统在正常工作时每组数据一般只有一个比特故障,从而实现纠正多位故障。
由于分组后故障点分散到不同的组中,使每一组数据中都最多有一个比特有故障。如果有一组数据出现了其它故障类型,则说明该故障不在正常工作时的故障模型之内,也超出了二维纠错码的纠错能力。
2、矩阵表示,采用矩阵的方式表示数据分组;矩阵表示数据分组后,在逻辑上将每一组的数据看作是一个(m,n)的矩阵,其中m代表行数,n代表列数;数据表示成矩阵形式后可以利用行号和列号对所有比特进行定位。
3、行列确定;根据每一组数据的多少合理的确定矩阵的m和n的大小。m和n的选择以最小化硬件代价为目标。在设计二维纠错码时可以对m和n的值进行遍历,选取总校验位最少的一组m和n的值作为矩阵的m和n。
4、纠错码生成;二维纠错码生成对每一个矩阵的每一行和每一列都生成一个奇偶校验码。
用pm0、pm1、pm2等表示行校验码。它们由矩阵中一行的比特计算,其生成公式为:
用pn0、pn1、pn2等表示列校验码。它们由矩阵中一列的比特计算,其生成公式为:
当矩阵内有且只有一个比特故障时,行校验码可以显示故障比特所在的行,列校验码可以显示故障比特所在的列。由行校验码和列校验码可以定位并纠正故障比特。由于分组的作用,该二维纠错码可以纠正数据中l个比特范围内的所有连续和不连续故障,从而保证存储器的正常工作。当矩阵内有多余一个比特故障时,可以由行校验码和列校验码对故障类型进行识别,并发出警报。不会将错误的纠正数据当作正确的纠正数据执行,从而避免因此导致系统失效。
当矩阵内有且只有1位故障时,在矩阵内最多有一个行校验位和一个列校验位显示数据有故障,且它们所代表的直线相交于一点,这个交叉点就是有故障的比特,通过对该比特取反可以得到正确的数据值。
二维纠错码可以纠正的单比特错误在校验码上的表现形式只有一种,即当行、列校验码都有且只有一位显示数据有故障时,故障可以被定位和纠正。由于按照故障率分组,所以MSDM加固方法可以纠正集成电路在正常工作时的故障。
一种于二维纠错码的内存加固电路,该电路为存储器多位错误纠正和判断电路,所述存储器多位错误纠正和判断电路包括有数据行模块,纠错码模块,译码器,计算纠错码模块,计算检验、纠正因子模块,纠正数据模块和列I/O,所述译码器连接于数据行模块,并通过列I/O进行输出,纠错码模块也通过I/O进行输出,计算纠错码模块,计算检验、纠正因子模块分别连接于列I/O,且计算纠错码模块也连接于计算检验、纠正因子模块,纠正数据模块连接于计算纠错码模块,计算检验、纠正因子模块;计算检验、纠正因子模块将报警信号传输给报警信号模块,进行报警;其中,纠错码可以存储在存储器中,也可以和数据内容分开存储。
进一步,所述计算纠错码模块包含8个4输入异或门。
进一步,所述计算检验、纠正因子模块,包含8个2输入异或门、10个4输入与门、16个2输入与门。
进一步,所述纠正数据模块包含16个2输入异或门。
进一步,所述报警信号模块包含2个2输入与门、2个4输入或门、1个2输入或非门。
本发明所实现的方法及电路,既可以对抗SEU引起的故障率范围内的影响,又可以评估信息存储器的故障类型和纠错手段纠错能力,可以保证存储器在正常工作时,绝大部分故障都可以被纠正,进而保证系统有较高的工作效率,又可以在存储器产生了严重故障,不能由加固技术的容错方法纠正时,向CPU发出报警信号。
同时,该方法及电路实现简便,安全可靠,低功耗、高效率,且不影响运算效率,适应高速存储器的应用。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明所实现的基于二维纠错码的内存加固方法,是将存储器分为程序存储区和数据存储区,对它们进行了分区加固,并根据存储区的各自特点通过存储器自诊断技术(Memory Self-diagnose Method,MSDM)实现对存储内容的诊断和对错误的纠正,进行纠错报警。在纠错过程中,MSDM既可以纠正任意给定宽度内的连续故障和非连续故障;又可以判断存储器是否产生了超过纠错码纠错能力的故障。当存储器产生纠错码不能纠正的错误时,MSDM产生报警信号。
在系统中,程序是CPU要执行的指令集合,是固定不变的。如果程序有意外的变化,CPU会执行错误的指令,后果难以预料,甚至导致系统失效。所以,程序是无论如何不能有变化的。在系统中,数据在程序的执行过程中会经常读出、修改或写入等。所以,数据经常变化。如果数据流有故障,也会使系统产生错误的结果,甚至系统执行错误。数据是无论如何不能有故障的。
MSDM(Memory Self-diagnose Method,MSDM)利用程序和数据的不同特点,将存储器划分成不同的区,并将程序和数据存储在不同的区块中,一个被称为程序存储区,另一个是数据存储区。
MSDM方法在写数据和读数据时实现不同的功能,并对两个存储区,采用相异的处理报警流程。MSDM的过程可以分为:MSDM写流程、程序存储区MSDM读流程和数据存储区MSDM读流程。
对于程序存储区和数据存储区,MSDM在写数据时先计算数据的纠错码,再将数据和纠错码存入存储区的相应区域。其写流程如图1所示。
MSDM在读数据时计算读出数据的纠错码,并和写数据时存储的纠错码一起评估当前数据的故障类型和纠错能力,再判断数据的故障类型是否超过了纠错能力。如果没有超过,则表示故障可以被纠正,纠正数据,并将纠正后的数据从存储区中读出。否则,表示故障类型超过了纠错码的纠错能力,故障不能被纠正,发出报警信号。
对程序存储区和数据存储区,MSDM采用了相异的方法来响应和处理报警信号。
由于程序存储区的故障对FPGA的重构过程有严重影响,所以,MSDM在发出报警信号后,关闭程序存储区的读写权限,并将程序存储区清零,等待程序重新加载。程序存储区MSDM读流程如图2所示,其具体的步骤为:
101、读出数据;
102、计算二维纠错码;
103、评估故障类型和纠错能力;
104、判断是否超过纠错能力,如果没超过,则进行纠错,纠正数据,进行正确数据的读出;如果超过纠错能力,则进行下一步;
105、发出报警信号,关闭程序存储区读写权限;
106、程序存储区清零,判断是否需要重新加载;
107、重新加载程序。
与程序故障会引起CPU产生难以预料的操作不同,数据故障会在控制流上传播,导致结果错误、路径错误等错误。这些错误可以被追踪、回溯并纠正,不需要产生报警信号时立刻终止重构过程。而且,数据在重构过程中不停变化,如果对数据存储区采用和程序存储区一样的方法来响应报警信号,会影响系统的效率。所以,对于数据存储区,MSDM在发出报警信号的同时读出有故障的数据。CPU接到报警后可以继续执行,也可以跳转到前面一个能够正确执行的检查点重新执行。为了判断数据存储区的故障是否影响多个存储单元的严重错误,MSDM自动检测相邻存储单元中的数据是否有故障,如果其他数据没有故障,则说明故障的影响较小,系统将继续执行,如果检测到若干个存储单元的故障都不可纠正,则可以判断该故障为严重故障。MSDM给CPU发出报警信号,同时对存储器中的数据清零,结束对FPGA的重构,并等待重新加载数据。数据存储区MSDM读流程如图3所示,具体流程为:
201、读出数据;
202、计算二维纠错码;
203、评估故障类型和纠错能力;
204、判断是否超过纠错能力,如果没超过,则进行纠错,纠正数据,进行正确数据的读出;如果超过纠错能力,则进行下一步;
205、发出报警信号,读出数据;
206、检测相邻的多个存储单元;
207、判断有无多个报警,无则结束,有则继续下一步;
208、数据存储区清零,进行攻击报警;
209、判断是否需要重新加载数据;
210、重新加载数据。
MSDM是利用二维纠错码纠正多位错误,同时评估故障模型和纠错能力,并产生报警信号。所以二维纠错码的选择在MSDM加固技术中有着非常重要的地位。
随着存储器的多比特故障越来越多,要求纠错码可以检测多位错误。对故障类型和纠错能力的评估,要求纠错码可以对错误进行准确定位。基于以上要求,选择二维纠错码作为信息存储器的纠错码。
MSDM采用的二维纠错码以数据位宽为单位计算纠错码。与传统二维纠错码相比,以数据位宽为单位的优点是可以一次计算出二维纠错码所需要的所有校验码,而不需要为了计算列纠错码在写数据之前先读出存储单元原有的数据。可以看出,MSDM对效率没有损害,适应高速存储器的应用。
MSDM利用二维纠错码纠正多位故障,并评估故障类型和纠错能力。为了实现上述功能,二维纠错码的生成过程包括数据分组、矩阵表示、行列确定和纠错码生成四个步骤。
1、数据分组为了采用简单、易于实现的纠错码纠正多比特故障,将数据以数据位宽为单位进行分组,把在物理上相邻的存储单元分到不同的逻辑组中。分组可以将多比特故障分散到不同组中,使系统在正常工作时每组数据一般只有一个比特故障,从而实现纠正多位故障。分组的依据是存储器在正常工作环境下的故障率。设L是故障率,即一次辐射事件引起的多比特故障的最大错误数;l是分组数,根据L将数据分成l组。由于二维纠错码一次可以纠正一组中的单比特故障,所以,在保证L≤l时,可以保证二维纠错码可以纠正正常工作环境下的大多数故障,满足系统正常工作时的容错需要。
由于分组后故障点分散到不同的组中,使每一组数据中都最多有一个比特有故障。如果有一组数据出现了其它故障类型,则说明该故障不在正常工作时的故障模型之内,也超出了二维纠错码的纠错能力。
设数据为{d0,d1,…,dn},其中d0,d1,…,dn表示组成数据的比特,故障率是L。根据L≤l的条件,将数据分成l组,并将物理上相邻的比特分入不同的组。则有,第一组:{d0,d1,d2l,…};第二组:{d1,dl+1,d2l+1,…};第三组:{d2,dl+2,d2l+2,…}等等。与交错(interleaving)方法不同,这种分组方法没有改变存储单元的物理位置,不会使存储器的字、列选择布线变长,增加面积、数据存取时间和功耗等。因而,该方法具有低功耗、高效率的特点。
2、矩阵表示,采用矩阵的方式表示数据分组;矩阵表示数据分组后,在逻辑上将每一组的数据看作是一个(m,n)的矩阵,其中m代表行数,n代表列数。数据表示成矩阵形式后可以利用行号和列号对所有比特进行定位。定位是评估故障类型和纠错能力的基础。同时,定位的另一个优点是可以用简单的奇偶校验码纠正每组中一位故障。奇偶校验码的实现和电路都很简单,硬件代价小,面积、功耗都少,而且还具有计算校验位的延时短、执行速度快等优点。所以,MSDM适用于绝大多数类型的存储器,包括低功耗的高速存储器。数据分组后的矩阵表示如图4所示。
3、行列确定;行m和列n的值不同会影响二维纠错码中校验位的个数,带来不同的硬件冗余代价。根据每一组数据的多少合理的确定矩阵的m和n的大小。m和n的选择以最小化硬件代价为目标。在设计二维纠错码时可以对m和n的值进行遍历,选取总校验位最少的一组m和n的值作为矩阵的m和n。
由于当系统固定之后,它的数据位宽就已经确定了,所以,对于一个系统来说l、m和n在设计电路时确定。在工作时,l、m和n的值固定,不需要动态计算,不影响系统效率,适用于高速系统。
4、二维纠错码生成对每一个矩阵的每一行和每一列都生成一个奇偶校验码。用pm0、pm1、pm2等表示行校验码。它们由矩阵中一行的比特计算,其生成公式为:
用pn0、pn1、pn2等表示列校验码。它们由矩阵中一列的比特计算,其生成公式为:
当矩阵内有且只有一个比特故障时,行校验码可以显示故障比特所在的行,列校验码可以显示故障比特所在的列。由行校验码和列校验码可以定位并纠正故障比特。由于分组的作用,该二维纠错码可以纠正数据中l个比特范围内的所有连续和不连续故障,从而保证存储器的正常工作。当矩阵内有多余一个比特故障时,可以由行校验码和列校验码对故障类型进行识别,并发出警报。不会将错误的纠正数据当作正确的纠正数据执行,从而避免因此导致系统失效。
以存储器的数据位宽为64位、故障率L将数据分成l组。因为L=4,所以将数据分成4组,即l=4,每组数据有16个比特,并将物理上相邻的比特分配到不同的组。设数据为:data={d0,d1,…,d63},其中d0,d1,…,d63表示组成数据的比特。则第一组数据表示为:data1={d0,d4,…,d60};第二组数据表示为:data2={d1,d5,…,d61};第三组数据表示为:data3={d2,d6,…,d62};第四组数据表示为:data4={d3,d7,…,d63}。
分组后将每组数据表示成矩阵形式。并用遍历的方式确定行数m和列数n,目标是校验位最少。如m=2,n=8时,行列校验码共10位;m=4,n=4时,行列校验码共8位。所以选择m=4,n=4。数据分组的第一组数据的矩阵表示如图5所示。
对每一个矩阵的每一行和每一列都生成一个奇偶校验码。以第一组数据为例,校验码如图6所示。
图6中,pm0、pm1、pm2、pm3是行校验码,由矩阵中一行的比特计算。它们的生成公式为:
pn0、pn1、pn2、pn3是列校验码,由矩阵中一列的比特计算。它们的生成公式为:
其它组的校验码生成和第一组相同。对于一个64比特的数据,有32个比特的校验码来保护。
对于矩阵数据来说,矩阵中的单比特故障,可以利用行、列校验码定位,如图7所示。
图7中,设d20比特有故障,则导致行校验码pm1和列校验码pn1都有效。可以看出,pm1和pn1所代表的行和列相交于一点,则这点就是有故障的比特。
当矩阵内有且只有1位故障时,在矩阵内最多有一个行校验位和一个列校验位显示数据有故障,且它们所代表的直线相交于一点。这个交叉点就是有故障的比特。通过对该比特取反可以得到正确的数据值。
能够导致行校验码pm1和列校验码pn1都显示有错误的情况不止图7所表示的单点故障,还有其它故障类型,如图8所示的故障类型也表现为行校验码pm1和列校验码pn1都显示数据有错误。
图8中所示错误表示干扰或攻击引起的故障最少在21个比特的范围内引起5个以上比特的错误。这种故障出现的可能性很小,不在考虑的范围之内。
可以看出,二维纠错码可以纠正的单比特错误在校验码上的表现形式只有一种,即当行、列校验码都有且只有一位显示数据有故障时,故障可以被定位和纠正。由于按照故障率分组,所以MSDM加固方法可以纠正集成电路在正常工作时的故障。
在数据写入存储器时计算pmj和pnj,并保存在内存中,其中j={0,1,2,3}。在数据读出存储器时重新计算二维纠错码,记为p′mj和p′nj。比较pmj、pnj和p′mj、p′nj,得到检验因子Cmj和Cnj。
式中:j={0,1,2,3}。
任意检验因子Cmj和Cnj有效表示小组有故障。
用位置因子Li表示故障数据的位置,其中i={0,1,…,9}。位置因子可以用检验因子来计算。
当i={0,…,3}时,Li表示行校验码有且只有一位显示数据有故障。当i={4,…,7}时,Li表示列校验码有且只有一位显示数据有故障。当i=8时,Li表示行校验码没有显示数据有故障。当i=9时,Li表示列校验码没有显示数据有故障。
用纠正因子Sk表示有故障数据的位置,计算如下,其中k={0,…,63}:
根据纠正因子纠正错误比特。
此例中的二维纠错码可以纠正4比特范围内的任意比特的连续和不连续的错误。
二维纠错码不仅可以纠正一个矩阵内的一位故障,即物理上相邻的l比特范围内的任意连续和非连续故障。也可以识别任何超过这个范围的故障类型,并给出报警信号。
可以被纠正的故障是行、列校验码都有且只有一位显示有故障。除了这种故障模型外的其它形式都表示该矩阵内存在纠错码纠正不了的故障。如只有一位或多位行校验码表示数据有故障且没有列校验码表示数据有故障;只有一位或多位列校验码表示数据有故障且没有行校验码表示数据有故障;有多于一位的行校验码和列校验码表示数据有故障等。这些情况表示该矩阵内存在不止一个比特故障,则可以判断该故障类型超过了MSDM的二维纠错码的纠错能力。
基于此,存储器多位错误纠正和判断的电路设计如图9所示。图中,存储器多位错误纠正和判断电路包括有数据行模块,纠错码模块,译码器,计算纠错码模块,计算检验、纠正因子模块,纠正数据模块和列I/O,所述译码器连接于数据行模块,并通过列I/O进行输出,纠错码模块也通过I/O进行输出,计算纠错码模块,计算检验、纠正因子模块分别连接于列I/O,且计算纠错码模块也连接于计算检验、纠正因子模块,纠正数据模块连接于计算纠错码模块,计算检验、纠正因子模块;其中,纠错码可以存储在存储器中,也可以和数据内容分开存储。
在写入数据时,译码器和列I/O根据地址信号选定数据单元。数据写入选定的数据单元。同时数据经过计算纠错码模块,计算行、列校验码Pmj、pnj。并根据地址信号将校验码存入存储器的相应区域。
在读出数据时,数据通过列I/O进入计算纠错码模块,计算读出数据的行、列校验码p′mj和p′nj。它们和存储在存储器中的校验码pmj和pnj都输入给计算检验、纠正因子模块,得到检验因子Cmj和Cnj。根据检验因子计算位置因子和报警信号。在报警信号无效时,根据位置因子计算纠正因子Sk。纠正因子和数据一起输入给纠正数据模块,得到正确的输出数据。
计算纠错码模块由公式(3)和公式(4)确定,包含8个4输入异或门,是组合电路,如图10所示。
计算检验、纠正因子模块由公式(5)-公式(7)确定,包含8个2输入异或门、10个4输入与门、16个2输入与门,是组合电路,如图11所示。
纠正数据模块由公式(8)确定,包含16个2输入异或门,是组合电路,如图12所示。
报警信号模块由公式(9)确定,包含2个2输入与门、2个4输入或门、1个2输入或非门,是组合电路,如图13所示。
MSDM加固方法采用组合电路实现,且硬件实现简单,具有速度快、面积小、功耗小的优点,适用于高速系统。
总之,本本发明所实现的方法及电路,既可以对抗SEU引起的故障率范围内的影响,又可以评估信息存储器的故障类型和纠错手段纠错能力,可以保证存储器在正常工作时,绝大部分故障都可以被纠正,进而保证系统有较高的工作效率,又可以在存储器产生了严重故障,不能由加固技术的容错方法纠正时,向CPU发出报警信号。
同时,该方法及电路实现简便,安全可靠,低功耗、高效率,且不影响运算效率,适应高速存储器的应用。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。