掌桥专利:专业的专利平台
掌桥专利
首页

数据错误检查纠正方法及闪存

文献发布时间:2023-06-19 19:14:59



技术领域

本申请涉及数据处理技术领域,具体涉及一种数据错误检查纠正方法及闪存。

背景技术

在校验数据的过程中,校验数据的校验技术例如可以为ECC(Error CorrectingCode,错误检查和纠正)技术,由于配置各ECC的计算公式的过程中存在差异,在应用到NorFlash中擦除后的检验结果容易出现错误。

发明内容

本申请提供一种数据错误检查纠正方法及闪存,以缓解Nor Flash中擦除后的检验结果容易出现错误的技术问题。

第一方面,本申请提供一种数据错误检查纠正方法,该数据错误检查纠正方法包括:配置纠错码包括非标志纠错码;构造每个非标志纠错码的计算公式均包括偶数个校验因子,每一校验因子为一数据位、一校验位或者一虚拟位。

第二方面,本申请提供一种数据错误检查纠正方法,该数据错误检查纠正方法包括:配置纠错码包括非标志纠错码;构造每个非标志纠错码的计算公式均包括相同数量的校验因子,每一校验因子为一数据位、一校验位或者一虚拟位。

第三方面,本申请提供一种数据错误检查纠正方法,该数据错误检查纠正方法包括:根据待校验数据中数据位的位宽,确定与待校验数据对应的校验位的数量、纠错码的数量;基于纠错码的排列结果的权重增序,确定排列结果与校验位、数据位之间的映射关系;基于编码位置、映射关系确定纠错码的计算公式;根据纠错码的计算结果得到待校验数据的校验结果。

在其中一些实施方式中,基于纠错码的排列结果的权重增序,确定排列结果与校验位、数据位之间的映射关系的步骤包括:获取各排列结果中1的数量;根据各排列结果中1的数量得到每一排列结果对应的权重系数,每一排列结果中1的数量越多,权重系数越高;根据多个权重系数由低到高的排序得到权重增序。

在其中一些实施方式中,基于纠错码的排列结果的权重增序,确定排列结果与校验位、数据位之间的映射关系的步骤还包括:构造每一校验位与一包含一个1的排列结果一一对应;构造每一数据位按照编码增序与一包含多个1的排列结果一一对应,编码增序为排列结果由小到大的排列次序。

在其中一些实施方式中,构造每一校验位与一包含一个1的排列结果一一对应的步骤包括:配置校验位包括最低校验位至最高校验位;配置最低校验位至最高校验位依次分别按照编码增序与一排列结果一一对应。

在其中一些实施方式中,构造每一数据位按照编码增序与一包含多个1的排列结果一一对应,编码增序为排列结果由小到大的排列次序的步骤包括:配置数据位包括最低数据位至最高数据位;最低数据位至最高数据位依次分别按照编码增序与一排列结果一一对应。

在其中一些实施方式中,基于编码位置、映射关系确定纠错码的计算公式的步骤包括:配置纠错码包括一标志纠错码和多个非标志纠错码;构造每个非标志纠错码的计算公式均包括偶数个相同数量的校验因子,每一校验因子为一数据位、一校验位或者一虚拟位。

在其中一些实施方式中,构造每个非标志纠错码的计算公式均包括偶数个相同数量的校验因子,每一校验因子为一数据位、一校验位或者一虚拟位的步骤包括:配置不同的非标志纠错码的计算公式中均包括1个校验位、偶数个虚拟位以及互不相同的奇数个数据位;基于每一非标志纠错码的计算公式的中间计算数据、计算结果,确定标志纠错码的计算公式。

在其中一些实施方式中,基于编码位置、映射关系确定纠错码的计算公式的步骤还包括:根据纠错码的排列结果由小到大的排列次序得到编码增序;根据编码增序确定校验位、数据位的编码位置。

在其中一些实施方式中,基于编码位置、映射关系确定纠错码的计算公式的步骤还包括:配置校验位包括一标志校验位和多个非标志校验位;基于多个非标志校验位的依次排布、编码位置以及映射关系,确定每一非标志纠错码的计算公式。

在其中一些实施方式中,基于多个非标志校验位的依次排布、编码位置以及映射关系,确定每一非标志纠错码的计算公式的步骤包括:构造一非标志纠错码的计算公式中的校验因子包括一非标志校验位;构造标志纠错码的计算公式中的校验因子包括标志校验位。

在其中一些实施方式中,构造每个非标志纠错码的计算公式均包括偶数个相同数量的校验因子,每一校验因子为一数据位、一校验位或者一虚拟位的步骤还包括:编码时构造每一校验位的数据为0;构造每一虚拟位的数据为0。第四方面,本申请提供一种闪存,该闪存在擦除操作后执行上述至少一实施方式中的数据错误检查纠正方法。

本申请提供的数据错误检查纠正方法及闪存,通过构造每个非标志纠错码的计算公式均包括偶数个校验因子,当待校验数据中各数据位均为1即擦除正确的情况下,使得各纠错码所表示的校验结果均为0,意味着待校验数据的擦除没有错误,这提高了Nor Flash中擦除后的检验结果的准确性。

附图说明

下面结合附图,通过对本申请的具体实施方式详细描述,将使本申请的技术方案及其它有益效果显而易见。

图1为相关技术中汉明码的算法示意图。

图2为相关技术中Hsiao码的算法示意图。

图3为相关技术中ECC校验的算法示意图。

图4为本申请实施例提供的数据错误检查纠正方法的流程示意图。

图5为本申请实施例提供的16位数据错误检查纠正方法的算法示意图。

图6为本申请实施例提供的纠错码的数量确定的结构示意图。

图7为本申请实施例提供的纠错码与数据位、校验位之间的映射关系图。

图8为本申请实施例提供的32位数据错误检查纠正方法的一种算法示意图。

图9为本申请实施例提供的32位数据错误检查纠正方法的另一种算法示意图。

图10为图9所示32位数据错误检查纠正方法中E5-E0的计算公式的电路示意图。

图11为图10所示32位数据错误检查纠正方法中E5-E0对应电路的封装示意图。

图12为图9所示32位数据错误检查纠正方法中E6的计算公式的电路示意图。

图13为图12所示32位数据错误检查纠正方法中E6的计算公式的电路的封装示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

在某些应用场合(尤其是车载应用中)中,为了进一步提高可靠性,校验技术/功能(例如ECC)已经成为其一个必备功能。SEC-DED(Single Error Correction-Double ErrorDetection)具有纠错一位数据或检测两位错误的功能。常见的SEC-DED实现方式有图1所示的汉明码和图2所示的Hsiao编码。

具体地,图1为相关技术中汉明码的算法示意图,以32位数据(如图1中所示的D0-D31)+7位校验位(P0-P6)为例。其中,32位数据作为待校验数据,在进行SEC-DED校验的过程中待校验数据(32位数据/D0-D31)、校验码P0-P5按照图1所示的编码后数据位置即数据位置1-38依次排列。图1所示的对号“V”用于表示奇偶校验位(校验位)的覆盖情况,并基于该奇偶校验位的覆盖情况确定七位纠错码E6-E0为如下所示:

E0=P0^D0^D1^D3^D4^D6^D8^D10^D11^D13^D15^D17^D19^D21^D23^D25^D26^D28^D30

E1=P1^D0^D2^D3^D5^D6^D9^D10^D12^D13^D16^D17^D20^D21^D24^D25^D27^D28^D31

E2=P2^D1^D2^D3^D7^D9^D9^D10^D14^D15^D16^D17^D22^D23^D24^D25^D29^D30^D31

E3=P3^D4^D5^D6^D7^D8^D9^D10^D18^D19^D20^D21^D22^D23^D24^D25

E4=P4^D11^D12^D13^D14^D15^D16^D17^D18^D19^D20^D21^D22^D23^D24^D25

E5=P5^D26^D27^D28^D29^D30^D31

E6=P0^P1^P2^P3^P4^P5^P6^D0^D1^D2^D3^D4^D5^D6^D7^D8^D9^D10^D11^D12^D13^D14^D15^D16^D17^D18^D19^D20^D21^D22^D23^D24^D25^D26^D27^D28^D29^D30^D31

其中,“^”表示异或运算,每个“^”需要通过一个异或门实现。P6表示另一个校验码。编码时,将P6~0置为全0,计算结果E6~0即为对应的校验码。解码时,若E6~0为全0,则没有错误;若E5~0不为全0,且E6为1,则发生1个错误,并根据E5~0修改对应的待校验数据或者校验位;若E5~0不为全0,且E6为0,则发生2个错误。

需要进行说明的是,图1所示的汉明码算法共需90+38个异或门,经过5级门延时(gate delay)才能够得以实现。

图2为相关技术中Hsiao码的算法示意图,同样以32位数据(如图1中所示的D0-D31)+7位校验位(P0-P6)为例。其中,32位数据作为待校验数据,在进行SEC-DED校验的过程中待校验数据(32位数据/D0-D31)、校验码P0-P6按照图1所示的编码后数据位置即数据位置1-39依次排列。图1所示的对号“V”用于表示奇偶校验位(校验位)的覆盖情况,并基于该奇偶校验位的覆盖情况确定六位纠错码E6-E0为如下所示:

E0=P0^D0^D1^D2^D4^D5^D7^D10^D11^D12^D18^D19^D23^D27

E1=P1^D0^D1^D3^D4^D6^D8^D10^D13^D15^D18^D20^D22^D24^D28

E2=P2^D0^D2^D3^D5^D6^D9^D11^D14^D16^D19^D20^D25^D29

E3=P3^D1^D2^D3^D7^D8^D9^D12^D13^D14^D17^D21^D22^D26^D30

E4=P4^D4^D5^D6^D7^D8^D9^D15^D16^D17^D23^D24^D25^D26^D31

E5=P5^D10^D11^D12^D13^D14^D15^D16^D17^D27^D28^D29^D30^D31

E6=P6^D18^D19^D20^D21^D22^D23^D24^D25^D26^D27^D28^D29^D30^D31

C=E0^E1^E2^E3^E4^E5^E6

其中,“^”表示异或运算,每个“^”需要通过一个异或门实现。编码时,将P6~0置为全0,计算结果E6~0即为对应的校验码。解码时,若E6~0为全0且C也为0,则没有错误;若E6~0不为全0,且C为1,则发生1个错误,并根据E6~0修改对应的数据位或检验位的值;若E6~0不为全0,且E6为0,则发生2个错误。由于Hsiao码纠错检错能力的限制,这里只分析错误在2个及2个以内的情况。

需要进行说明的是,图2所示的Hsiao码算法共需96+6个异或门,经过4级门延时(gate delay)才能够得以实现。

经过图1、图2的比较可知,图1所示的汉明码具有编码解码简单的优点,但是面积大、速度慢;Hsiao码具有面积小、速度快的优点,但是编码解码复杂。

在又一相关技术中,以16位待校验数据(D0-D15)+5位校验位(P0-P4)为例,自闪存的所有存储单元(cell)读出来的值均取反,之后再经过ECC进行数据计算。由于ECC计算公式是对数据位进行异或运算,当cell值均为1时,则为全0,经过ECC算法得到的结果必然是全0。纠错码E0-E4的计算公式如下所示:

E0=~P0^~D0^~D1^~D3^~D4^~D6^~D8^~D10^~D11^~D13^~D15

E1=~P1^~D0^~D2^~D3^~D5^~D6^~D9^~D10^~D12^~D13

E2=~P2^~D1^~D2^~D3^~D7^~D8^~D9^~D10^~D14^~D15

E3=~P3^~D4^~D5^~D6^~D7^~D9^~D9^~D10

E4=~P4^~D11^~D12^~D13^~D14^~D15

其中,“~”表示取反,“^”表示异或。

需要进行说明的是,该相关技术中的ECC算法共需40个异或门和45个反相器,并经过5级门延迟(gate delay)才能够得以实现。

图3为相关技术中ECC校验的算法示意图,同样以16位待校验数据(D0-D15)+5位校验位(P0-P4)为例。其中,在进行ECC校验的过程中待校验数据(16位数据/D0-D15)、校验码P0-P4按照图3所示的编码后数据位置即数据位置1-21依次排列。图3所示的对号“V”用于表示奇偶校验位(校验位)的覆盖情况,并基于该奇偶校验位的覆盖情况确定五位纠错码E4-E0为如下所示:

E0=~(P0^D0^D1^D3^D4^D6^D8^D10^D11^D13^D15)

E1=P1^D0^D2^D3^D5^D6^D9^D10^D12^D13

E2=P2^D1^D2^D3^D7^D8^D9^D10^D14^D15

E3=P3^D4^D5^D6^D7^D9^D9^D10

E4=P4^D11^D12^D13^D14^D15

其中,“~”表示取反,“^”表示异或。

需要进行说明的是,图3所示的ECC计算,假设数据位和校验位数据均为1,将ECC每位计算结果为1(例如E0)的取反,为0(例如E1-E4)的保持不变。也就是说,该相关技术中的ECC算法共需40个异或门和1个反相器,并经过5级门延迟(gate delay)才能够得以实现。

其中,之所以需要增加额外的反相器,是因为擦除后cell全为1的情况下,异或运算会导致ECC出错。

有鉴于上述提及的校验技术所需的逻辑器件的数量较多导致占用面积较大的技术问题,本实施例提供了一种数据错误检查纠正方法,请参阅图4至图13,如图4所示,该数据错误检查纠正方法包括以下步骤:

步骤S10:根据待校验数据中数据位的位宽,确定与待校验数据对应的校验位的数量、纠错码的数量。

步骤S20:基于纠错码的排列结果的权重增序,确定排列结果与校验位、数据位之间的映射关系。

步骤S30:基于编码位置、映射关系确定纠错码的计算公式。

步骤S40:根据纠错码的计算结果得到待校验数据的校验结果。

可以理解的是,本实施例提供的数据错误检查纠正方法,通过先根据待校验数据中数据位的位宽确定与待校验数据对应的校验位的数量、纠错码的数量,再基于纠错码的排列结果的权重增序确定排列结果与校验位、数据位之间的映射关系,然后基于编码位置、映射关系确定纠错码的计算公式,不仅能够根据纠错码的计算结果得到待校验数据的校验结果,而且基于纠错码的排列结果的权重增序确定排列结果与校验位、数据位之间的映射关系,可以简化映射关系中的逻辑运算,进而减少逻辑器件的使用数量,从而减小占用面积。

需要进行说明的是,本实施例可以应用于不同的数据校验中,例如车载应用中,尤其是车载应用中的存储产品,不仅可以提高存储产品的可靠性,还可以减小存储产品的面积。另外,本申请提供的数据错误检查纠正方法所针对的待校验数据的位宽并不作具体限定,其可以适用于任何位宽的待校验数据,具体地,待校验数据的位宽可以为整数个,例如,4位、8位、16位、32位、64位、128位或者256位...等等。

其中,纠错码E3-E0的排列结果可以如图6、图7所示的从0000至1111,每个排列结果均是由二进制的0和/或1组成的,定义权重系数随着排列结果中1的数量的增多而增大,那么,权重增序就是权重系数由低到高的一个排序,例如,0000的权重系数小于0001的权重系数,0001的权重系数小于0011的权重系数,0001的权重系数等于0010的权重系数...等等依次类推。映射关系例如可以是排列结果(E3-E0)0001与校验位P0对应,或者,排列结果(E3-E0)0011与数据位D0对应。编码位置可以如图8、图9中所示的编码后数据位置即P0、P1、D0、P2、D1、D2、P3、D3-D8、P4、D9-D18、P5、D19至D31。

在其中一个实施例中,基于纠错码的排列结果的权重增序,确定排列结果与校验位、数据位之间的映射关系的步骤包括:获取各排列结果中1的数量。根据各排列结果中1的数量得到每一排列结果对应的权重系数,每一排列结果中1的数量越多,权重系数越高。根据多个权重系数由低到高的排序得到权重增序。

需要进行说明的是,各排列结果中的每个1对应一个逻辑器件,以实现对应的逻辑运算。例如,一个异或门实现对应的一个异或运算。因此,在映射关系中校验位、数据位对应的排列结果的权重系数越低,则排列结果中1的数量也越少,这样在数据错误检查纠正方法中所使用的逻辑器件也越少,所占用的面积也越小。

例如,在图6、图7中,排列结果0011的权重系数高于排列结果0001的权重系数。逻辑器件可以但不限于为异或门,也可以是其他能够适用的器件。

在其中一个实施例中,基于纠错码的排列结果的权重增序,确定排列结果与校验位、数据位之间的映射关系的步骤还包括:构造每一校验位与一包含一个1的排列结果一一对应。构造每一数据位按照编码增序与一包含多个1的排列结果一一对应,编码增序为排列结果由小到大的排列次序。

需要进行说明的是,本实施例进一步构造各校验位与只有一个1的排列结果对应,而将各数据位与权重系数更高的排列结果对应,这样各排列结果中1的总数量也最少,在数据错误检查纠正方法中所使用的逻辑器件也最少,所占用的面积也最小。

在其中一个实施例中,构造每一校验位与一包含一个1的排列结果一一对应的步骤包括:配置校验位包括最低校验位至最高校验位。配置最低校验位至最高校验位依次分别按照编码增序与一排列结果一一对应。

需要进行说明的是,本实施例提供了一种各校验位与各排列结果之间的对应关系,但不限于这一种对应关系,也可以是其他可以实现的方案,例如,配置最高校验位至最低校验位依次分别按照编码增序与一排列结果一一对应,这种对应关系也是可以的。

其中,最低校验位可以为图5、图8以及图9中的P0,最高校验位可以为16位待校验数据的ECC算法中的P5,也可以为32位待校验数据的ECC算法中的P6。

在其中一个实施例中,构造每一数据位按照编码增序与一包含多个1的排列结果一一对应,编码增序为排列结果由小到大的排列次序的步骤包括:配置数据位包括最低数据位至最高数据位。最低数据位至最高数据位依次分别按照编码增序与一排列结果一一对应。

需要进行说明的是,本实施例提供了一种各数据位与各排列结果之间的对应关系,但不限于这一种对应关系,也可以是其他可以实现的方案,例如,配置最高数据位至最低数据位依次分别按照编码增序与一排列结果一一对应,这种对应关系也是可以的。

其中,在图6、图7中,纠错码E3-E0的排列结果从0000至1111,用十进制数据表示的话即为从0至15,也就是说,排列结果在十进制数据表示的情况下是增大的,即为上述的编码增序。

其中,最低数据位可以为图5、图8以及图9中的D0,最高数据位可以为图5中的D15,也可以为图8以及图9中的D31。

在其中一个实施例中,基于编码位置、映射关系确定纠错码的计算公式的步骤包括:配置纠错码包括一标志纠错码和多个非标志纠错码。构造每个非标志纠错码的计算公式均包括偶数个相同数量的校验因子,每一校验因子为一数据位、一校验位或者一虚拟位。

需要进行说明的是,构造每个非标志纠错码的计算公式均包括偶数个相同数量的校验因子,不仅可以在所有数据位、校验位均为1且虚拟位为0(如有的话)的情况下得到每个非标志纠错码为的结果,以适用于擦除结果的验证;而且可以实现每个非标志纠错码的计算公式均相同,也就是说,每个非标志纠错码的计算公式均可以相同拓扑结构的逻辑电路来实现,这样仅需要完成一个非标志纠错码的电路版图设计,其他非标志纠错码的电路版图设计改变对应的输入连接线即可,不仅简化了版图工艺,而且由于各非标志纠错码的电路结构相同,那么各非标志纠错码的输出延时也相同,相较于各非标志纠错码的计算公式具有不同数量的校验因子,导致具有较多校验因子的非标志纠错码的计算公式的输出延时较长,进而导致纠错码的整体输出结果延时过长,本实施例由于各非标志纠错码的输出延时相同,进而能够缩短纠错码的整体输出时间,提高了校验速度。

其中,为了每个非标志纠错码的计算公式均包括偶数个相同数量的校验因子,当同一非标志纠错码的计算公式中数据位、校验位的数量不足以满足需求时,可以通过新增的虚拟位来实现。

其中,标志纠错码可以为图8或者图9所示实施例中的纠错码E6,非标志纠错码可以为图8或者图9所示实施例中的纠错码E5-E0中的任一个。

在其中一个实施例中,构造每个非标志纠错码的计算公式均包括偶数个相同数量的校验因子,每一校验因子为一数据位、一校验位或者一虚拟位的步骤包括:配置不同的非标志纠错码的计算公式中均包括1个校验位、偶数个虚拟位以及互不相同且在数量上相近的奇数个数据位。基于每一非标志纠错码的计算公式的中间计算数据、计算结果,确定标志纠错码的计算公式。

需要进行说明的是,同一非标志纠错码的计算公式中包括互不相同且在数量上相近的多个数据位,不仅有利于减小各非标志纠错码的计算公式中校验因子的数量,还有利于标志纠错码的计算公式能够基于非标志纠错码的计算公式的中间计算数据、计算结果来实现,进而可以节省一些逻辑器件,能够进一步减小面积。

此外,由于每个非标志纠错码的计算公式均包括奇数个数量的数据位和一位校验位,当闪存执行完擦除操作后,该数据错误检查纠正方法仍旧适用。

在其中一个实施例中,基于编码位置、映射关系确定纠错码的计算公式的步骤还包括:根据纠错码的排列结果由小到大的排列次序得到编码增序。根据编码增序确定校验位、数据位的编码位置。

需要进行说明的是,编码增序为在图6、图7中排列结果自0000增加至1111的序列,其中,排列结果(E3-E0)1111大于排列结果(E3-E0)0000。

在其中一个实施例中,基于编码位置、映射关系确定纠错码的计算公式的步骤还包括:配置校验位包括一标志校验位和多个非标志校验位。基于多个非标志校验位的依次排布、编码位置以及映射关系,确定每一非标志纠错码的计算公式。

需要进行说明的是,标志校验位可以为一些实施例中的校验码P6,非标志校验位可以为图8或者图9所示实施例中的校验码P5-P0中的任一个。

在其中一个实施例中,基于多个非标志校验位的依次排布、编码位置以及映射关系,确定每一非标志纠错码的计算公式的步骤包括:构造一非标志纠错码的计算公式中的校验因子包括一非标志校验位。构造标志纠错码的计算公式中的校验因子包括标志校验位。

需要进行说明的是,多个非标志校验位的依次排布可以为图8、图9中所示P0-P5的纵向成列排布。

在其中一个实施例中,构造每个非标志纠错码的计算公式均包括偶数个相同数量的校验因子,每一校验因子为一数据位、一校验位或者一虚拟位的步骤还包括:编码时构造每一校验位的数据为0。构造每一虚拟位的数据为0。

需要进行说明的是,校验位的数据不恒为1。具体地,编码时,将检验位设为全0,得到的最终纠错码即为该输入数据所对应的校验码,并将校验码和输入数据一起存放进闪存中;解码时,从闪存中读出所有的数据(包括用户的输入数据和编码产生的校验码),并用来计算得到纠错码,根据纠错码的值知道数据是否有错、错1位还是2位、错1位自动纠错。本实施例可以针对各数据位均为1的待校验数据进行SEC-DED校验。

下面结合具体案例对上述构思进行具体说明,图5为16位数据错误检查纠正方法的算法示意图,以16位的待校验数据进行ECC校验为例,同样需要5位校验位(P0-P4)。其中,在进行ECC校验的过程中待校验数据(16位数据/D0-D15)、校验码P0-P4按照图5所示的编码后数据位置即数据位置1-21依次排列。图5所示的对号“V”用于表示奇偶校验位(校验位)的覆盖情况,并基于该奇偶校验位的覆盖情况确定五位纠错码E4-E0为如下所示:

E0=P0^D0^D1^D3^D4^D6^D9^D14

E1=P1^D0^D2^D3^D5^D6^D8^D10^D13^D14

E2=P2^D1^D2^D3^D7^D8^D11^D15

E3=P3^D4^D5^D6^D7^D8^D12^D13^D14^D15

E4=P4^D9^D10^D11^D12^D13^D14^D15

其中,“^”表示异或运算,每个“^”需要一个异或门来实现。重新编排各数据位、校验位的数据位置和权重系数,使得每个纠错码的计算公式中校验因子的数量对应为偶数个,以最大化每个异或门的使用效率,进而有利于减少异或门的使用数量。

需要进行说明的是,为了减小最终面积并提高速度,各数据位及校验位优先与纠错码中权重系数较低的排列结果形成一一对应关系。

可以理解的是,相较于上述16位待校验数据进行ECC校验,本实施例共需39个异或门,经过4级门延迟(gate delay)即可实现。不仅由于采用的逻辑器件数量更少而减小了占用面积,而且由于经过的门延迟更少而提高了速度。

图6为纠错码的数量确定的结构示意图,为了实现位宽为8的待校验数据进行ECC校验,需要确定校验位的长度,假设待校验数据的长度为k,校验位的长度为r,整个长度n=k+r,由于E3-E0为0000的排列结果用于指示ECC校验没有错误以及其他排列结果需要对应所有的数据位及校验位,因此,r与k应该满足如下关系式:

2

其中,r可以有多个取值选择,为了减少不必要的浪费,r通常选用能够满足上述关系式的最小整数值。因此,当k为8时,r取值为4。也就是说,8位的待校验数据需要4位校验码即P<3:0>(P3-P0),由于校验码的数量与纠错码的数量相等,那么对应地,也需要4位纠错码即E<3:0>(E3-E0)。

需要进行说明的是,若需要具有2位错误的检测能力,即实现SEC-DED功能,校验位的长度还需要增加1位。

为了实现ECC校验的结果说明,定义E3-E0为0000的排列结果指示待校验数据没有发生错误。

然后需要设计各纠错码的计算公式:假设希望E3-E0最终的计算结果为0011时可以修补数据位D0。

如图7所示,由于D0的数据正确时,汉明码的计算结果E3-E0为0000,所以D0与E3、E2无关,D0只会影响E1、E0的值。当D0的数据发生错误时(0变1,或1变0),E1、E0同样从0变成1。

类似的,E0只与数据位D0、D1、D3、D4、D6以及校验位P0有关。其中,P0为编码时D0、D1、D3、D4、D6的奇偶校验结果;E0为解码时D0、D1、D3、D4、D6、P0的奇偶校验结果。

那么E3-E0的其他排列结果或者计算结果对应用于指示ECC校验的其他结果说明。例如图6、图7所示,E3-E0的排列结果0001、0010、0100、1000依次分别用于指示修补校验位P0-P3,E3-E0的排列结果0011、0101、0110、0111、1001-1100依次分别用于指示修补数据位D0-D7,至此E3-E0的排列结果还有16-1-4-8=3个状态没有存在对应关系,也就是说,该3个未被使用的排列结果还可以再指示三个数据位的修补信息。

图8为本申请实施例提供的32位数据错误检查纠正方法的一种算法示意图,以32位数据(如图8中所示的D0-D31)+7位校验位(P0-P6)为例。其中,32位数据作为待校验数据,在进行SEC-DED校验的过程中待校验数据(32位数据/D0-D31)、校验码P0-P5按照图8所示的编码后数据位置即数据位置1-38依次排列。图8所示的对号“V”用于表示奇偶校验位(校验位)的覆盖情况,并基于该奇偶校验位的覆盖情况确定六位纠错码E6-E0为如下所示:

E0=(P0^D0^D1^D3^D4)^D6^D8^D10^D12^D14^D17^D19^D24^D28^Dm

E1=(P1^D5^D6^D9^D11)^D0^D2^D3^D12^D15^D18^D20^D22^D25^D29

E2=(P2^D2^D7^D13^Dm)^D1^D3^D8^D9^D14^D15^D21^D22^D26^D30

E3=(P3^D8^D16^D17^D18)^D4^D5^D6^D7^D9^D23^D24^D25^D26^D31

E4=(P4^D10^D12^D14^D15)^D11^D13^D16^D17^D18^D27^D28^D29^D30^D31

E5=(P5^D19^D20^D21^D22)^D23^D24^D25^D26^D27^D28^D29^D30^D31^Dm

E6=E5^S0^S1^S2^S3^S4

其中,Dm=1’b0(一位二进制数据0)

S0=(P0^D0^D1^D3^D4)

S1=(P1^D5^D6^D9^D11)

S2=(P2^D2^D7^D13^Dm)

S3=(P3^D8^D16^D17^D18)

S4=(P4^D10^D12^D14^D15)

需要进行说明的是,本实施例在如图6、图7所示的对应关系的基础上对各数据位、校验位的数据位置和权重系数进行了重新编排,优先采用权重低的纠错码作为数据位,以最大化每个异或门的使用效率,进而有利于减少异或门的使用数量。其中,作为优选地,每个计算公式中选择的数据位的个数比较相近。为了使得每个纠错码的计算公式中校验因子的数量相等,新增了虚拟位Dm,该虚拟位Dm的数据为0。

同时,为了减小最终面积并提高速度,各数据位及校验位优先与纠错码中权重系数较低的排列结果形成一一对应关系。

可以理解的是,相较于图1、图2所示的32位待校验数据进行SEC-DED校验,本实施例共需84+5个异或门,经过4级门延迟(gate delay)即可实现。不仅由于采用的逻辑器件数量更少而减小了占用面积,而且由于经过的门延迟更少而提高了速度。

其中,E6的计算公式是从E5~E0的计算公式中扣取相同数量的校验因子而组成,且E5~E0的计算公式中校验因子的数量均相同。

其中,S0、S1、S2、S3以及S4作为上述中间计算数据的一部分,直接被应用于纠错码E6的计算公式中。

图9为本申请实施例提供的32位数据错误检查纠正方法的另一种算法示意图,与图8不同的是,奇偶校验位的覆盖情况发生了变化,也就是说每个纠错码的计算公式中的校验因子发生了变化,确定后的六位纠错码E6-E0的计算公式具体如下所示:

E0=((P0^D0^D1^D3)^D5^D7^D9^D11)^D13^D16^D19^D20^D24^D28^Dm^Dm

E1=((P1^D4^D10^D11)^D0^D2^D5^D8)^D14^D17^D20^D22^D25^D29^Dm^Dm

E2=((P2^D2^D6^D12^D13^D14^D18^Dm)^D1^D7^D8^D21^D22^D26^D30^Dm

E3=((P3^D5^D7^D8)^D3^D4^D6^D15)^D16^D17^D18^D23^D24^D25^D26^D31

E4=((P4^D15^D16^D17)^D9^D10^D11^D12)^D13^D14^D18^D27^D28^D29^D30^D31

E5=((P5^D19^D20^D21)^D22^D23^D24^D25)^D26^D27^D28^D29^D30^D31^Dm^Dm

E6=P6^E5^S0^S1^Q2^S3^S4

其中,Dm=1’b0(一位二进制数据0)

S0=(P0^D0^D1^D3),Q0=S0^D5^D7^D9^D11

S1=(P1^D4^D10^D11),Q1=S1^D0^D2^D5^D8

S2=(P2^D12^D13^D14),Q2=S2^D13^D14^D18^Dm

S3=(P3^D5^D7^D8),Q3=S3^D3^D4^D6^D15

S4=(P4^D15^D16^D17),Q4=S4^D9^D10^D11^D12

需要进行说明的是,本实施例相较于图1、图2所示的32位待校验数据进行SEC-DED校验,本实施例共需90+6个异或门,经过4级门延迟(gate delay)即可实现。不仅由于采用的逻辑器件数量更少而减小了占用面积,而且由于经过的门延迟更少而提高了速度。

其中,S0-S4、Q0-Q4均作为上述中间计算数据的一部分,部分地被直接应用于纠错码E6的计算公式中。

具体地,图10为图9所示32位数据错误检查纠正方法中E5-E0的计算公式的电路示意图,E5-E0中每个纠错码的计算公式均可以采用如图10所示的电路,该电路具有16个输入端(IN0-IN15)、三个输出端(PART1、PART2、OUT)以及15个异或门。

图11为图10所示32位数据错误检查纠正方法中E5-E0对应电路的封装示意图,其中,纠错码E0的计算公式对应的封装模块CAL0,该封装模块CAL0的具体构造如图10所示,其中,输入端IN0-IN15依次分别接入P0、D0、D1、D3、D5、D7、D9、D11、D13、D16、D19、D20、D24、D28、Dm、Dm,输出端PART1、PART2、OUT依次分别输出S0、Q0、E0。

纠错码E1的计算公式对应的封装模块CAL1,该封装模块CAL1的具体构造如图10所示,其中,输入端IN0-IN15依次分别接入P1、D4、D10、D11、D0、D2、D5、D8、D14、D17、D20、D22、D25、D29、Dm、Dm,输出端PART1、PART2、OUT依次分别输出S1、Q1、E1。

纠错码E2的计算公式对应的封装模块CAL2,该封装模块CAL2的具体构造如图10所示,其中,输入端IN0-IN15依次分别接入P2、D2、D6、D12、D13、D14、D18、Dm、D1、D7、D8、D21、D22、D26、D30、Dm,输出端PART1、PART2、OUT依次分别输出S2、Q2、E2。

纠错码E3的计算公式对应的封装模块CAL3,该封装模块CAL3的具体构造如图10所示,其中,输入端IN0-IN15依次分别接入P3、D5、D7、D8、D3、D4、D6、D15、D16、D17、D18、D23、D24、D25、D26、D31,输出端PART1、PART2、OUT依次分别输出S3、Q3、E3。

纠错码E4的计算公式对应的封装模块CAL4,该封装模块CAL4的具体构造如图10所示,其中,输入端IN0-IN15依次分别接入P4、D15、D16、D17、D9、D10、D11、D12、D13、D14、D18、D27、D28、D29、D30、D31,输出端PART1、PART2、OUT依次分别输出S4、Q4、E4。

纠错码E5的计算公式对应的封装模块CAL5,该封装模块CAL5的具体构造如图10所示,其中,输入端IN0-IN15依次分别接入P5、D19、D20、D21、D22、D23、D24、D25、D26、D27、D28、D29、D30、D31、Dm、Dm,输出端PART1、PART2、OUT依次分别输出S5、Q5、E5。

图12为图9所示32位数据错误检查纠正方法中E6的计算公式的电路示意图,该电路包括七个输入端(IN0-IN6)、一个输出端(OUT)以及6个异或门。

图13为图12所示32位数据错误检查纠正方法中E6的计算公式的电路的封装示意图,纠错码E6的计算公式对应的封装模块CAL6,该封装模块CAL6的具体构造如图12所示,其中,输入端IN0-IN6依次分别接入E5、S0、S1、Q2、S3、S4、P6,输出端OUT输出E6。

需要进行说明的是,本实施例对待校验数据的校验结果为:编码时,将P6~0置为全0,计算结果E6~0即为对应的校验码。解码时,若E6~0为全0,则没有错误;若E5~0不为全0,且E6为1,则发生1个错误,并根据E5~0修改对应的数据位或者校验位;若E5~0不为全0,且E6为0,则发生2个错误。

本实施例所具备的优势如下:

1)与图1所示的汉明码相比,本实施例所需要的异或门更少,面积就更小;图1所示的汉明码中各纠错码经过的异或门有多有少,速度被最长的一条路径所限制,而本实施例中纠错码E5-E0经过的异或门是一致的,因此,二者相比,本实施例的速度会更快。

2)与图2所示的Hsiao码相比,本实施例所需要的异或门更少,面积就更小;以32位待校验数据为例,两者速度是一致的,但由于Hsiao码所需要的异或门更多,随着待校验数据的位数增加,本实施例的算法速度会比Hsiao码更快;且解码时,由于Hsiao码多了一位,面积也会更加大点。

3)Nor Flash应用中,在执行完擦除指令或者擦除操作之后,所有的数据位和校验位均为“1”,此时由于所有纠错码E6-E0的计算公式中校验因子的数量均为偶数,计算结果为全0,意味着没有错误;若采用传统的汉明码或Hsiao码,为了实现这一功能,还需添加额外的反相器。

4)本实施例的算法中,纠错码E6只是个标志位,它与纠错码E5~0的值一起判定当前这笔数据错误了几位,不影响最终数据的输出,所以也不影响速度。

基于上述分析,本实施例又提供了一种数据错误检查纠正方法,该数据错误检查纠正方法包括:配置纠错码包括非标志纠错码;构造每个非标志纠错码的计算公式均包括偶数个校验因子,每一校验因子为一数据位、一校验位或者一虚拟位。

可以理解的是,本实施例提供的数据错误检查纠正方法,通过构造每个非标志纠错码的计算公式均包括偶数个校验因子,当待校验数据中各数据位均为1即擦除正确的情况下,使得各纠错码所表示的校验结果均为0,意味着待校验数据的擦除没有错误,这提高了Nor Flash中擦除后的检验结果的准确性。

基于上述分析,本实施例再提供了一种数据错误检查纠正方法,该数据错误检查纠正方法包括:配置纠错码包括非标志纠错码;构造每个非标志纠错码的计算公式均包括相同数量的校验因子,每一校验因子为一数据位、一校验位或者一虚拟位。

可以理解的是,本实施例提供的数据错误检查纠正方法,不仅通过构造每个非标志纠错码的计算公式均包括偶数个校验因子,当待校验数据中各数据位均为1即擦除正确的情况下,使得各纠错码所表示的校验结果均为0,意味着待校验数据的擦除没有错误,这提高了Nor Flash中擦除后的检验结果的准确性;而且每个非标志纠错码的计算公式均可以相同拓扑结构的逻辑电路来实现,这样仅需要完成一个非标志纠错码的电路版图设计,其他非标志纠错码的电路版图设计改变对应的输入连接线即可,不仅简化了版图工艺,而且由于各非标志纠错码的电路结构相同,那么各非标志纠错码的输出延时也相同,相较于各非标志纠错码的计算公式具有不同数量的校验因子,导致具有较多校验因子的非标志纠错码的计算公式的输出延时较长,进而导致纠错码的整体输出结果延时过长,本实施例由于各非标志纠错码的输出延时相同,进而能够缩短纠错码的整体输出时间,提高了校验速度。

在其中一个实施例中,本实施例提供一种闪存,该闪存在擦除操作后执行上述至少一实施例中的数据错误检查纠正方法。

可以理解的是,本实施例提供的闪存,通过构造每个非标志纠错码的计算公式均包括偶数个校验因子,当待校验数据中各数据位均为1即擦除正确的情况下,使得各纠错码所表示的校验结果均为0,意味着待校验数据的擦除没有错误,这提高了Nor Flash中擦除后的检验结果的准确性。

而且每个非标志纠错码的计算公式均可以相同拓扑结构的逻辑电路来实现,这样仅需要完成一个非标志纠错码的电路版图设计,其他非标志纠错码的电路版图设计改变对应的输入连接线即可,不仅简化了版图工艺,而且由于各非标志纠错码的电路结构相同,那么各非标志纠错码的输出延时也相同,相较于各非标志纠错码的计算公式具有不同数量的校验因子,导致具有较多校验因子的非标志纠错码的计算公式的输出延时较长,进而导致纠错码的整体输出结果延时过长,本实施例由于各非标志纠错码的输出延时相同,进而能够缩短纠错码的整体输出时间,提高了校验速度。

可以理解的是,本实施例提供的闪存,通过先根据待校验数据中数据位的位宽确定与待校验数据对应的校验位的数量、纠错码的数量,再基于纠错码的排列结果的权重增序确定排列结果与校验位、数据位之间的映射关系,然后基于编码位置、映射关系确定纠错码的计算公式,不仅能够根据纠错码的计算结果得到待校验数据的校验结果,而且基于纠错码的排列结果的权重增序确定排列结果与校验位、数据位之间的映射关系,可以简化映射关系中的逻辑运算,进而减少逻辑器件的使用数量,从而减小占用面积。

需要进行说明的是,上述闪存可以优选为Nor Flash,由于Nor Flash是整块擦除的,经过擦除后,所有存储单元(cell)中的值均为1,ECC必须在这种特殊情况下,仍能正常工作(即在所有cell值为1的情况下,ECC校验结果为全0,认为数据没有错误)。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

以上对本申请实施例所提供的数据错误检查纠正方法及闪存进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的技术方案及其核心思想;本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例的技术方案的范围。

相关技术
  • 数据错误处理方法、数据错误检查和纠正装置及系统
  • 闪存错误检查及纠正修复方法
技术分类

06120115847367