发明内容
本发明所要解决的技术问题是需要提供一种ECC校验模块是否存在硬件缺陷的检测技术,以解决对ECC校验模块的硬件缺陷进行检测的技术问题。
为了解决上述技术问题,本发明提供了一种检错/纠错校验模块的检测装置,所述检错/纠错(ECC)校验模块包括锁存器、校验电路以及检错/纠错电路;所述锁存器用于存储ECC码字的数据组;所述校验电路用于对所述数据组进行实时校验,生成校验位;所述检错/纠错电路用于采用所述校验位对所述数据组进行检错/纠错;
所述检测装置包括输入端口(300)、判断电路(310)、选择输入电路(320)及比较电路(330),其中:
所述输入端口(300),用于接收校验码字;所述校验码字包含待测数据组及待测校验位,所述待测数据组或者待测校验位中包含错误位;
所述判断电路(310),用于将所述待测数据组发送给所述锁存器,还用于判断所述错误位在所述待测数据组中还是在所述待测校验位中;
所述选择输入电路(320),用于所述错误位在所述待测数据组中时存储所述校验电路对所述待测数据组进行校验生成的新生校验位,所述错误位在所述待测校验位中时存储所述待测校验位;
所述比较电路(330),用于将所述检错/纠错电路利用所述新生校验位或者待测校验位对所述待测数据组进行检错/纠错所获得的新生数据组与预期数据组进行比较,获得比较结果;
其中,所述预期数据组为对应于所述待测数据组经过正确的纠错/检错后获得的数据组。
优选地,该检测装置进一步包括:
输出端口,用于在所述检错/纠错电路获得所述新生数据组后,将所述新生数据组发送给所述比较电路(330)。
优选地,所述选择输入电路(320)用于将所述新生校验位或者待测校验位存储到写缓冲器中;
其中,所述检错/纠错校验模块包括所述写缓冲器。
优选地,所述输入端口(300)用于接收所述待测数据组或者待测校验位中包含一位所述错误位的所述校验码字。
优选地,所述输入端口(300)用于接收外部输入的若干校验码字;
其中,所述检错/纠错电路利用所述新生校验位或者待测校验位对所述待测数据组进行所述检错/纠错时,所述若干校验码字中的每个所述校验码字使所述检错/纠错电路的至少一个逻辑门产生翻转。
优选地,所述检错/纠错电路利用所述若干校验码字进行所述检错/纠错时,所述检错/纠错电路的每个逻辑门产生翻转。
为了解决上述技术问题,本发明还提供了一种检错/纠错校验模块的检测方法,所述检错/纠错(ECC)校验模块包括锁存器、校验电路以及检错/纠错电路;所述锁存器用于存储ECC码字的数据组;所述校验电路用于对所述数据组进行实时校验,生成校验位;所述检错/纠错电路用于采用所述校验位对所述数据组进行检错/纠错;
其中,该方法包括:
接收校验码字;所述校验码字包含待测数据位及待测校验位,所述待测数据组或者待测校验位中包含错误位;
将所述待测数据组发送给所述锁存器;
判断所述错误位在所述待测数据组中还是所述待测校验位中;
所述错误位在所述待测数据组中时存储所述校验电路对所述待测数据组进行校验生成的新生校验位,所述错误位在所述待测校验位中时存储所述待测校验位;
将所述检错/纠错电路利用所述新生校验位或者待测校验位对所述待测数据组进行检错/纠错所获得的新生数据组与预期数据组进行比较,获比较结果;
其中,所述预期数据组为对应于所述待测数据组经过正确的纠错/检错后获得的数据组。
优选地,在所述检错/纠错电路获得所述新生数据组后,输出所述新生数据组以进行所述比较。
优选地,将所述新生校验位或者待测校验位存储到写缓冲器中;
其中,所述检错/纠错校验模块包括所述写缓冲器。
优选地,接收所述待测数据组或者待测校验位中包含一位所述错误位的所述校验码字。
优选地,接收外部输入的若干校验码字;
其中,所述检错/纠错电路利用所述新生校验位或者待测校验位对所述待测数据组进行所述检错/纠错时,所述若干校验码字中的每个所述校验码字使所述检错/纠错电路的至少一个逻辑门产生翻转。
优选地,所述检错/纠错电路利用所述若干校验码字进行所述检错/纠错时,所述检错/纠错电路的每个逻辑门产生翻转。
与现有技术相比,本发明通过在ECC码字的数据位或者校验位中引入错误位,来对ECC校验模块中的检错/纠错电路进行硬件缺陷检测,无论是在ECC码字中的数据位还是校验位中预设错误位,都可以检测出检错/纠错电路是否存在硬件缺陷。本发明的技术方案进一步构造特定的含有错误位的ECC数据组来对检错/纠错电路是否存在硬件缺陷进行检测,提高了检测效率,保障了检测的准确度和精度。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
具体实施方式
以下将结合附图及实施例来详细说明本发明的实施方式,借此对本发明如何应用技术手段来解决技术问题,并达成技术效果的实现过程能充分理解并据以实施。
为了便于说明本发明方法,以下先说明本发明方法所涉及的ECC校验模块。
实施例一、一种检错/纠错(ECC)校验模块10,包括写缓冲器(Writebuffer)110、检错/纠错电路(Decoder_ECC)120、锁存器(Latch)130以及校验电路(Encoder_ECC)140,如图1所示,在读数据的过程(图中以虚线表示数据走向)中:
检错/纠错电路120,用于获取存储阵列(Main Array)100中的ECC码字,并采用该ECC码字中的校验位对该ECC码字中的ECC数据组进行检错/纠错,获得正确的ECC数据组(以下简称为检错/纠错后的ECC数据组)并发送给外部的输出端口200;ECC码字包括ECC数据组(ECC data set)和校验位;
输出端口200,用于以字节(byte)为单位输出该检错/纠错后的ECC数据组(以字节为单位输出),图中的输出信号以Dout示出。
本实施例中,该输出端口200为一四选一多路选择器,以实现以字节为单位输出32位的检错/纠错后的ECC数据组。在其他实施例中,输出端口200也可以是以其他长度为单位输出检错/纠错后的ECC数据组,本发明的技术方案将这种以预定长度为单位输出检错/纠错后的ECC数据组称之为“部分输出”。
在其他实施例中,如果一个ECC数据组包括的字节为其他数量,则可以根据该数量选用相应的多路选择器,比如一个ECC数据组包含8个字节,此时就可以选用八选一多路选择器作为该输出端口200。总之,输出端口200选用多路选择器时,该选用的多路选择器的类型,根据一次所能输出的数据长度占ECC数据组的比例来确定。
在图1所示的本实施例中,一个ECC码字共有38位(bit),包括ECC数据组(ECC data set)和校验位,其中ECC数据组为32位,校验位为6位。ECC数据组以8位为1个字节(byte),共有4个字节。以下如未特别声明,本申请下述各实施例中1个ECC数据组包含4个字节,1字节包含8位,相应的校验位为6位。
上述实施例所示出的检错/纠错(ECC)校验模块10,如图1所示,在写数据的过程(图中以实线表示数据走向)中:
检错/纠错电路120,用于根据读操作指令从存储阵列(Main Array)100中获取ECC码字,并采用该ECC码字中的校验位对该ECC码字中的ECC数据组进行检错/纠错,获得正确的ECC数据组(以下简称为检错/纠错后的ECC数据组)并发送给外部的输出端口200;ECC码字包括ECC数据组(ECCdata set)和校验位;其中,根据该读操作指令从存储阵列100中获取ECC码字的地址,可以根据写数据的操作指令来确定;
锁存器130,与该检错/纠错电路120及输入端口300相连,用于在第一使能信号Load_cd的控制下,存储该检错/纠错后的ECC数据组,并在地址选择信号A[1:0]及第二使能信号Load_din的作用下,将通过该输入端口300输入的外部数据以字节为单位替换到该检错/纠错后的ECC数据组中,形成待写入ECC数据组发送给该写缓冲器110及校验电路140;其中该地址选择信号A[[1:0]确定将外部数据写入到ECC数据组的哪个字节位置上;在该第一使能信号Load_cd使能时,允许将检错/纠错后的ECC数据组存储到该锁存器130中;在该第二使能信号Load_din使能时,允许将外部数据存储到该锁存器130中;
校验电路140,与该锁存器130相连,用于对该待写入ECC数据组进行实时校验,生成与该待写入ECC数据组相应的校验位发送给该写入写缓冲器110;
写缓冲器110,与该锁存器130及校验电路140相连,用于缓存该锁存器发送的待写入ECC数据组,以及该校验电路140发送的与该待写入ECC数据组相应的校验位,将该待写入ECC数据组以及与其相应的校验位以ECC码字的形式写入到存储阵列100中;
其中,上述输入端口300用于以字节为单位接收外部数据,图中以Din示出。本实施例中,该输入端口300是以字节为单位接收外部数据,在其他实施例中,输入端口300也可以是以其他长度为单位接收外部数据,本发明的技术方案将这种以预定长度为单位接收外部数据的输入称之为“部分输入”。
如图2所示,在本实施例的一个具体应用中,该输入端口300接收了一个字节的外部数据,锁存器130将该一个字节的外部数据写入到一检错/纠错后的ECC数据组的第二个字节中,这样产生一个新的ECC数据组,其中该新的ECC数据组中的第一、三和四个字节,为该检错/纠错后的ECC数据组的第一、三和四个字节(即从存储阵列100中读出并待回写的字节),该新的ECC数据组中的第二个字节,为该输入端口300所接收并待写入的一个字节。
本实施例中的写缓冲器110的容量一般较大,可缓存多个ECC码字,避免每获得一个待写入的ECC码字就立即写入到存储阵列100中,避免了频繁擦写存储阵列100。本实施例中的写缓冲器110的宽度与存储阵列100的宽度相等,一次最多可写入一页(page)数据量。
本实施例中,由于32位的ECC数据组需要6位校验位,因此在本实施例中,校验电路140所生成的该校验位为6位。
另外,本发明的实施例是以一个ECC码字包含一个ECC数据组及相应的校验位,且一个ECC数据组包含4个字节、一字节为8bits为例进行说明的,并不构成对ECC码字或者字节的限制,一个ECC码字具体包含多少字节、或者一个字节包含多少bits,以及相应的该ECC码字中包含多少数据位和多少校验位,本发明并没有限定。
实施例二、一种检错/纠错校验模块的检测装置
检错/纠错校验模块包括写缓冲器110、锁存器130、校验电路140以及检错/纠错电路120;如图3所示,本实施例的检测装置主要包括输入端口300、判断电路310、选择输入电路320、输出端口200、比较电路330、识别电路340及显示器350,其中:
输入端口300,用于接收外部输入的校验码字;本实施例中该校验码字的长度为38位;其中每个校验码字包含32位的待测数据组和6位的待测校验位;每个校验码字均存在一位预设的错误位,使得每个特定的数据向量都能引起检错/纠错电路中至少一个逻辑门产生翻转;该一位预设的错误位,可能是32位的待测数据组中的一位,也可能是6位的待测校验位中的一位;
判断电路310,与输入端口300相连,用于将校验码字的待测数据组以字节为单位发送给检错/纠错校验模块的锁存器130,还用于判断错误位是在校验码字的待测数据组中还是待测校验位中;
选择输入电路320,与判断电路310相连,
用于在判断电路310判断出错误位在校验码字的待测数据组中时,在选通信号Set_Test的控制下,将校验电路140对待测数据组进行实时校验所生成的新生校验位发送给写缓冲器110;在这其中,锁存器130将校验码字的待测数据组发送给写缓冲器110以及校验电路140;校验电路140对锁存器130发送的待测数据组进行实时校验,生成与该校验码字的待测数据组相应的新生校验位(6位)并发送给选择输入电路320;
还用于在判断电路310判断出错误位在校验码字的待测校验位中时,在选通信号Set_Test的控制下,将待测校验位发送给写缓冲器110;在这其中,锁存器130将校验码字的待测数据组发送给写缓冲器110;
输出端口200,用于输出检错/纠错电路120采用写缓冲器110中的新生校验位或者待测校验位对待测数据组进行检错/纠错处理后获得的新生数据组;在这其中:
错误位在校验码字的待测数据组中时,
从写缓冲器110中输出该待测数据组及新生校验位至检错/纠错电路120,检错/纠错电路120采用新生校验位对相应的待测数据组进行检错/纠错处理,获得32位的新生数据组;该新生数据组是检错/纠错电路120采用该新生校验位对该待测数据组进行检错/纠错处理所得的检错/纠错处理结果;
错误位在校验码字的待测校验位中时,
从写缓冲器110中输出该待测数据组及待测校验位至检错/纠错电路120,检错/纠错电路120采用待测校验位对待测数据组进行检错/纠错处理,获得32位的新生数据组并输出;该新生数据组是检错/纠错电路120采用该待测校验位对该待测数据组进行检错/纠错处理所得的检错/纠错处理结果;
比较电路330,与该输出端口200相连,用于将该新生数据组与一预期数据组进行比较,获得一比较结果;其中该预期数据组是对应于该校验码字的待测数据组经过正确的检错/纠错获得的正确的数据组,也即一没有故障的检错/纠错电路利用与该待测数据组相应的校验位对该待测数据组经过检错/纠错处理,就应该得到该预期数据组;
识别电路340,与该比较电路330相连,用于根据该比较结果识别该ECC模块中的检错/纠错电路120是否存在硬件缺陷,获得检测结果;
显示器350,与该识别电路电路340相连,用于显示该检测结果。
实际上,本实施例中比较电路330获得该比较结果时,就已经完成了检错/纠错电路120是否存在硬件缺陷的检测,识别电路340及显示器350是为了将检错/纠错电路120是否存在硬件缺陷的检测结果显示给用户,便于用户直观了解检错/纠错电路是否存在硬件缺陷。
本实施例中的选通信号,对于错误位在待测数据组中的校验码字,指示选择输入电路320将校验电路140所生成的新生校验位发送给写缓冲器110;对于错误位在待测校验位中的校验码字,指示选择输入电路320将待测校验位发送给写缓冲器110。
识别电路340用于获得指示新生数据组与预期数据组不同逻辑值的数据位置的检测结果;据此可以对检错/纠错电路的缺陷位置进行准确的定位。
本实施例中,输入端口(300)用于接收外部输入的若干校验码字;检错/纠错电路利用新生校验位或者待测校验位对待测数据组进行所述检错/纠错时,每个校验码字均会使其至少一个逻辑门产生翻转。
图4示出了用于生成校验码字的矩阵。如图4所示,每一行的d0-d31,对应一个校验码字数据组的32位数据位(共有六行,分别表示六个校验码字的数据组);c0-c5分别对应相应的校验位;s0-s5用于指示新生数据组与预期数据组不同逻辑值的数据位置。
根据上述图4所示矩阵所生成的一部分校验码字列举如下:
D<31:0>=00,00,00,01h;C<5:0>=00h;
D<31:0>=FF,FF,FF,FEh;C<5:0>=3Fh;
D<31:0>=00,00,00,02h;C<5:0>=00h;
D<31:0>=FF,FF,FF,FDh;C<5:0>=3Fh。
其中,上述D<31:0>表32位数据,C<5:0>表6位校验位。
本实施例是将新生校验位或者待测校验位存储在写缓冲器110中,其他实施例中也可以将新生校验位或者待测校验位存储在其他存储介质中。
实施例三、检错/纠错校验模块的检测方法
该检错/纠错校验模块包括写缓冲器110、锁存器130、校验电路140以及检错/纠错电路120;结合图3所示的本发明检测装置,如图5所示,本实施例主要包括如下步骤:
步骤S510,接收外部输入的若干个校验码字,本实施例中该校验码字的长度为38位;其中每个38位的校验码字是特定的数据向量(pattern),其包含32位的待测数据组和6位的待测校验位;每个校验码字均存在一位预设的错误位,使得每个特定的数据向量都能引起检错/纠错电路中至少一个逻辑门翻转;该一位预设的错误位,可能是32位的待测数据组中的一位,也可能是6位的待测校验位中的一位;
步骤S520,判断错误位是在校验码字的待测数据组中还是在校验码字的待测校验位中;对于错误位在待测数据组中的校验码字,转步骤S530,对于错误位在待测校验位中的校验码字,转步骤S560;
步骤S530,对错误位在待测数据组中的校验码字,判断电路310将校验码字的待测数据组以字节为单位发送给检错/纠错校验模块的锁存器130;
步骤S535,锁存器130将校验码字的待测数据组发送给写缓冲器110以及校验电路140;
步骤S540,检错/纠错校验模块的校验电路140对锁存器130发送的待测数据组进行实时校验,生成与该校验码字的待测数据组相应的新生校验位(6位)并发送给选择输入电路320;
步骤S545,选择输入电路320在选通信号Set_Test的控制下,将所生成的与该校验码字的待测数据组相应的新生校验位发送给检错/纠错校验模块的写缓冲器110;此时写缓冲器110中的待测数据组及该新生校验位组成38位的新的ECC码字;
步骤S550,输出该待测数据组及新生校验位至检错/纠错校验模块的检错/纠错电路120,检错/纠错电路120采用新生校验位对相应的待测数据组进行检错/纠错处理,获得32位的新生数据组并输出;该新生数据组是检错/纠错电路120采用该新生校验位对该待测数据组进行检错/纠错处理所得的检错/纠错处理结果;转步骤S580;
步骤S560,对错误位在待测校验位中的校验码字,判断电路310将校验码字的待测数据组以字节为单位发送给检错/纠错校验模块的锁存器130,并将待测校验位发送给选择输入电路320;
步骤S565,选择输入电路320在选通信号Set_Test的控制下,将待测校验位发送给写缓冲器110;
步骤S570,锁存器130将校验码字的待测数据组发送给写缓冲器110;
需要说明的是,步骤S565和步骤S570的执行,校验码字就存储在了写缓冲器110中;
步骤S575,从写缓冲器中输出该校验码字至检错/纠错校验模块的检错/纠错电路120,检错/纠错电路120采用待测校验位对待测数据组进行检错/纠错处理,获得32位的新生数据组并输出;该新生数据组是检错/纠错电路120采用该待测校验位对该待测数据组进行检错/纠错处理所得的检错/纠错处理结果;转步骤S580;
步骤S580,将该新生数据组与预期数据组进行比较,获得比较结果;其中的该预期数据组是对应于该校验码字的待测数据组经过正确的检错/纠错获得的正确的数据组,也即一没有故障的检错/纠错电路利用与该待测数据组相应的校验位对该待测数据组经过检错/纠错处理,就应该得到该预期数据组;
本步骤中,将该新生数据组与该预期数据组进行比较的过程,指示新生数据组与预期数据组不同逻辑值的数据位置(新生数据组中与预期数据组逻辑值不相同的数据位所在的位置);
步骤S590,根据该些校验码字相对应的比较结果,识别该ECC模块中的检错/纠错电路是否存在硬件缺陷,获得检测结果并显示。
实际上,本实施例中步骤S580获得该比较结果时,就已经完成了检错/纠错电路是否存在硬件缺陷的检测,步骤S590是为了将检错/纠错电路是否存在硬件缺陷的检测结果显示给用户,便于用户直观了解检错/纠错电路是否存在硬件缺陷。
本实施例中的选通信号,对于错误位在待测数据组中的校验码字,指示选择输入电路320将校验电路140所生成的新生校验位发送给写缓冲器110;对于错误位在待测校验位中的校验码字,指示选择输入电路320将待测校验位发送给写缓冲器110。
本实施例的检测机制是,如果检错/纠错电路不存在硬件缺陷的话,对于存在一位错误位(无论是位于数据组还是位于校验位),都可以通过检错/纠错电路的错误位定位以及正确地检错/纠错,从而得到正确的数据组(所引入的错误位会翻转逻辑值)。所以,如果检错/纠错电路存在硬件缺陷,则这种错误定位就发生偏差,并且检错/纠错处理后出现翻转的逻辑值不是应该翻转的那一位。出现数据翻转得到有可能是数据组某位,也有可能是校验位中的某位。对于存在故障的检错/纠错电路而言,发生纠错偏差未必在所生成的新生数据组中体现出来,本发明中通过对新生数据组进行比较获得检测结果,所以可以采用多个校验码字进行“故障覆盖”处理,前述的“故障覆盖”指的是在对多个校验码字的待测数据组进行检错/纠错处理时,检错/纠错过程会覆盖检错/纠错电路的每个逻辑门,或者说根据对这些校验码字的待测数据组进行检错/纠错处理,检错/纠错电路的每个逻辑门均会产生翻转(至少会翻转一次);对于每一个逻辑门而言,这些校验码字中至少会有一个码字的待测数据组能够使其逻辑值翻转,这样就可以实现检错/纠错电路是否存在硬件缺陷的检测,在此基础上还可以进一步对硬件缺陷进行定位。
因此,只要ECC码字中存在错误位且检错/纠错电路存在硬件缺陷,通过检错/纠错电路的检错/纠错处理,就会因硬件缺陷而在检错/纠错后的新生数据组中体现出定位偏差,从而无法得到正确的与预期数据组相同的数据组。
对于错误位在待测数据组中的情形,如果该新生数据组与该预期数据组相同,则说明该ECC模块中的检错/纠错电路对该校验码字中的数据组所进行的检错/纠错是正确的,是把一个故意设置有一位错误位的校验码字中的数据组,如实纠正成了一个正确的与预期数据组相同的数据组。相应地,如果该新生数据组与该预期数据组不同,则说明该ECC模块中的检错/纠错电路对该校验码字中的数据组所进行的检错/纠错是错误的,是把一个故意设置有一位错误位的校验码字中的数据组,纠正成了另一个与预期数据组不相同的数据组。
需要说明的是,如果预设的错误位是校验位中的一位时,新生数据组也可能与相应的预期数据组相同(也可能与相应的预期数据组不相同),但是所指出的错误位的位置并不准确,所以单从新生数据组的数据值是否与相应的预期数据组的数据值是否相同,可能还难以检测出检错/纠错电路是否存在硬件缺陷以及对硬件缺陷进行准确的定位,还需要通过对新生数据组与预期数据组的不同之处进行指示,才能获知检错/纠错电路是否存在硬件缺陷以及对缺陷进行准确定位。
当错误位位于校验码字的待测校验位中时,可以根据选通信号Set_test选择将待测校验位跟随校验码字中的待测数据组一同写入到写缓冲区中,从而使得检错/纠错电路可以利用该含有错误位的待测检验位对不含错误位的待测数据组进行检错/纠错处理。
当错误位位于校验码字的待测数据组中时,写缓冲器存储的与待测数据组相应的校验位是根据校验码字的待测数据组生成的,检错/纠错电路用该生成的新生校验位对包含有错误位的待测数据组进行检错/纠错。错误位位于校验码字的校验位中时,写缓冲器存储的与数据组相应的校验位,为校验码字的待测检验位。
本实施例通过预设若干个特定的数据向量,可以使得ECC模块中检错/纠错电路的所有逻辑门都至少翻转一次,从而能够全面检测检错/纠错电路的所有逻辑门是否存在硬件缺陷,并在存在硬件缺陷时可以对该缺陷进行准确的定位。
本发明的其他实施例,也可以不采用若干校验码字来进行测试,而是采用海量的数据向量来检测,同样可以检测出ECC模块中检错/纠错电路是否存在硬件缺陷,以及存在硬件缺陷时对该硬件缺陷进行准确的定位。
由此可见,本实施例通过引错机制选择合适的校验码字,就可以迅速高效地识别出ECC模块中的检错/纠错电路是否存在硬件缺陷,以及在ECC模块中的检错/纠错电路存在硬件缺陷时,能够具体定位出ECC模块中的检错/纠错电路具体哪个位置存在硬件(比如检错/纠错电路中的晶体管)缺陷。
虽然本发明所揭露的实施方式如上,但所述的内容只是为了便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属技术领域内的技术人员,在不脱离本发明所揭露的精神和范围的前提下,可以在实施的形式上及细节上作任何的修改与变化,但本发明的专利保护范围,仍须以所附的权利要求书所界定的范围为准。