发明内容
本发明所要解决的技术问题是需要提供一种ECC校验模块是否存在硬件缺陷的检测技术,以解决对ECC校验模块进行硬件缺陷检测的技术问题。
为了解决上述技术问题,本发明提供了一种检错/纠错校验模块的检测装置,所述检错/纠错(ECC)校验模块包括锁存器以及校验电路;所述锁存器用于存储ECC码字的数据组;所述校验电路用于对所述数据组进行实时校验,生成校验位;
所述检测装置包括输入端口(300)、选择输入电路(310)以及比较电路(320),其中:
所述输入端口(300),用于接收外部输入的校验码字,将所述校验码字的数据组写入到所述锁存器中;所述校验码字还包含原始校验位;
所述选择输入电路(310),用于将所述校验电路对所述校验码字的数据组进行实时校验所生成的新生校验位进行存储;
所述比较电路(320),用于将存储的所述新生校验位与所述原始校验位进行比较,获得比较结果。
优选地,所述检测装置进一步包括:
输出端口(200),用于将存储的所述新生校验位输出给所述比较电路(320)。
优选地,所述输出端口(200)用于以字节为单位输出所述新生校验位;
其中,所述新生校验位不足一个字节时,字节中除所述新生校验位外的其余位任意设置。
优选地,所述ECC校验模块包括写缓冲器;
所述选择输入电路(310)将所述新生校验位发送给所述写缓冲器进行所述存储。
优选地,所述锁存器进一步将所述校验码字的数据组发送给所述写缓冲器。
优选地,所述输入端口(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。如图3所示,本实施例的检测装置包括输入端口300、选择输入电路(MUX1)310、输出端口(MUX2)200、比较电路320、识别电路330以及显示器340,其中:
输入端口300,与检错/纠错校验模块的锁存器130相连,用于接收外部输入的校验码字,在地址选择信号A[1:0]及第二使能信号Load_din的作用下,将校验码字的数据组以字节为单位写入到检错/纠错校验模块的锁存器130中;该校验码字还包含原始校验位;本实施例中该校验码字的数据组为32位,原始校验位为6位;
选择输入电路310,与检错/纠错校验模块的写缓冲器110及校验电路140相连,用于将检错/纠错校验模块的校验电路140对校验码字的数据组进行实时校验所生成的新生校验位(6位)发送给检错/纠错校验模块的写缓冲器110;对于该校验电路140而言,该校验码字的数据组与该新生校验位是相应的;
输出端口200,与检错/纠错校验模块的写缓冲器110相连,用于输出写缓冲器110中存储的根据该校验码字的数据组新生成的新生校验位;
比较电路320,与输入端口300及输出端口200相连,用于将该新生校验位与校验码字的原始校验位进行比较,获得比较结果;
识别电路330,与该比较电路320相连,用于根据该比较结果识别校验电路140是否存在硬件缺陷,获得检测结果;
显示器340,与该识别电路330相连,用于根据显示该比较结果。
实际上,本实施例中比较电路320获得该比较结果时,就已经完成了校验电路140是否存在硬件缺陷的检测。识别电路330及显示器340是为了将校验电路140是否存在硬件缺陷的检测结果显示给用户,便于用户直观了解校验电路是否存在硬件缺陷。
本实施例中,检错/纠错校验模块的锁存器130还将校验码字的数据组发送到检错/纠错校验模块的写缓冲器110中,这样写缓冲器110中就存储有由校验码字的数据组以及与根据该数据组新生成的新生校验位所组成的新的ECC码字。
上述输出端口200用于以字节为单位输出写缓冲器110中存储的根据该校验码字的数据组所新生成的新生校验位;需要说明的是,由于该新生校验位并不一定是一个完整的字节,比如对于一个38位的ECC码字,其中数据组为32位,相应的检验位为6位,因此输出时是以一个字节的高6位或者低6位输出该新生校验位,相应的低2位或者高2位可以任意设置。
本实施例的检测机制是,如果校验电路不存在硬件缺陷的话,那么对于任意的ECC码字中的数据组所生成的新生校验位,就应该与该ECC码字中的原始校验位相同。如果校验电路存在硬件缺陷的话,那么对于部分ECC码字,根据其数据组所生成的新生校验位或许与其原始校验位相同(生成新生校验位时可能并没有触发该硬件缺陷),也可能不同(生成新生校验位时可能触发了该硬件缺陷)。这样,通过预设一些特定的ECC校验码字,通过其数据组实现校验电路的“故障覆盖”,前述的“故障覆盖”指的是根据数据组生成新生校验位覆盖了校验电路的每个逻辑门,或者说根据这些特定的ECC校验码字的数据组生成新生校验位,校验电路的每个逻辑门均会产生翻转(至少会翻转一次);对于每一个逻辑门而言,这些特定的ECC校验码字中至少会有一个ECC码字的数据组能够使其逻辑值翻转;这样就可以实现校验电路是否存在硬件缺陷的检测,在此基础上还可以进一步对硬件缺陷进行定位。
图4示出了用于生成校验码字的矩阵。如图4所示,每一行的d0-d31,对应一个校验码字数据组的32位数据位(共有六行,分别表示六个校验码字的数据组);wc0-wc5分别对应根据六个校验码字的数据组所生成的新生校验位。
根据上述图4所示矩阵所生成的一部分校验码字列举如下:
D<31:0>=00,00,00,00h;相应的原始校验位C<5:0>=00h;
D<31:0>=FF,FF,FF,FFh;相应的原始校验位C<5:0>=3Fh;
D<31:0>=01,00,00,00h;相应的原始校验位C<5:0>=3Ah;
D<31:0>=FE,FF,FF,FFh;相应的原始校验位C<5:0>=05h。
其中,上述D<31:0>表示校验码字中的32位的数据组,C<5:0>表示相应的6位校验位。
本实施例是将新生校验位存储在写缓冲器110中,其他实施例中也可以将新生校验位存储在其他存储介质中。
需要说明的是,图3所示的检错/纠错校验模块并不是完整的结构,仅示出了本实施例检测方法相关的组成部分。检错/纠错校验模块的完整结构,请结合图1所示实施例理解。
在实际应用中,选择输入电路310还可以与输入端口300相连,主要用于选择将从输入端口300输入的ECC码字所包含的原始校验位写入到写缓冲器110中。选择输入电路310可以在选通信号(Set_Test)的控制下进行工作,选择是将从输入端口300输入的ECC码字所包含的原始校验位写入到写缓冲器110中,还是将校验电路140所生成的新生校验位写入到写缓冲器110中。
实施例三、检错/纠错校验模块的检测方法
本实施例中的检错/纠错校验模块主要包括如前述实施例一中的写缓冲器、锁存器以及校验电路。施行该检测方法的检测装置请参考图3,包括如上述实施例二所述的输入端口300、选择输入电路(MUX1)310、输出端口(MUX2)200、比较电路320、识别电路330以及显示器340,如图5所示,本实施例主要包括如下步骤:
步骤S510,通过输入端口300接收外部输入的校验码字,在地址选择信号A[1:0]及第二使能信号Load_din的作用下,将校验码字的数据组以字节为单位写入到检错/纠错校验模块的锁存器130中;校验码字还包含原始校验位;本实施例中该校验码字的数据组为32位,原始校验位为6位;
步骤S520,检错/纠错校验模块的校验电路140对校验码字的数据组进行实时校验,生成与该校验码字的数据组相应的新生校验位(6位);
步骤S530,将所生成的与该校验码字的数据组相应的新生校验位发送给检错/纠错校验模块的写缓冲器110进行存储;
步骤S540,输出写缓冲器110中存储的根据该校验码字的数据组新生成的新生校验位;
步骤S550,将新生成的新生校验位与校验码字的原始校验位进行比较,获得比较结果;
步骤S560,根据该比较结果识别检错/纠错校验模块中的校验电路140是否存在硬件缺陷,获得检测结果并显示。
实际上,本实施例中步骤S550获得该比较结果时,就已经完成了校验电路是否存在硬件缺陷的检测。步骤S560是为了将校验电路是否存在硬件缺陷的检测结果显示给用户,便于用户直观了解校验电路是否存在硬件缺陷。
本实施例中,检错/纠错校验模块的锁存器130还将校验码字的数据组发送到检错/纠错校验模块的写缓冲器110中,这样写缓冲器110中就存储有由校验码字的数据组以及与根据该数据组新生成的新生校验位所组成的新的ECC码字。
输出端口200以字节为单位输出写缓冲器110中存储的根据该校验码字的数据组所新生成的新生校验位;需要说明的是,由于该新生校验位并不一定是一个完整的字节,比如对于一个38位的ECC码字,其中数据组为32位,相应的检验位为6位,因此输出时是以一个字节的高6位或者低6位输出该新生校验位,相应的低2位或者高2位可以任意设置。
本实施例中的该校验码字,通过预先设计可以使得ECC校验模块中校验电路的每个逻辑门都能够实现至少一次翻转,因此可以应用该些校验码字来进行ECC校验模块中校验电路的硬件缺陷检测。
因此,本实施例中,如果校验电路140所生成的新生校验位与校验码字的原始校验位相同,则说明该检验电路140对该校验码字的数据组所进行的校验是正确的;相应地,如果所生成的新生校验位与原始校验位不同,则说明该校验电路140对校验码字的数据组所进行的校验是错误的,并没有根据该数据组生成一个正确的校验位,由此可以断定校验电路140存在硬件缺陷。
由此可见,本实施例通过预先设置合适的校验码字,就可以识别出ECC校验模块中的校验电路是否存在硬件缺陷,以及在ECC校验模块中的校验电路存在硬件缺陷时,通过所设置的校验码字,还能够具体定位出ECC校验模块中的校验电路具体哪个逻辑门(比如某晶体管)存在硬件缺陷。
虽然本发明所揭露的实施方式如上,但所述的内容只是为了便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属技术领域内的技术人员,在不脱离本发明所揭露的精神和范围的前提下,可以在实施的形式上及细节上作任何的修改与变化,但本发明的专利保护范围,仍须以所附的权利要求书所界定的范围为准。