数据处理的方法、装置和设备

申请号 CN201410449184.X 申请日 2014-09-04 公开(公告)号 CN104424046B 公开(公告)日 2017-07-28
申请人 英飞凌科技股份有限公司; 发明人 J·奥特斯泰特; R·戈伊特弗特;
摘要 本 发明 公开了 数据处理 的方法、装置和设备。 实施例 涉及用于数据处理的方法,该数据处理包括数据读取和确定该数据的每个部分的状态,该数据包括开销信息和有效 载荷 信息,其中该状态是第一二进制状态、第二二进制状态和未定义状态其中的一种。该方法还包括对具有未定义状态的数据的至少一个部分基于其 位置 并且基于开销信息进行解码。
权利要求

1.一种用于数据处理的方法,包括:
读取数据,所述数据包括开销信息和有效载荷信息;
确定所述数据的每个部分的状态,其中所述状态包括第一二进制状态、第二二进制状态和未限定状态中的至少一种;以及
对具有未限定状态的数据的至少一个部分基于其位置并且基于所述开销信息进行解码。
2.如权利要求1所述的方法,
其中解码数据的至少一个部分包括确定所述有效载荷信息。
3.如权利要求1所述的方法,
其中解码数据的至少一个部分包括基于错误纠正代码的错误检测。
4.如权利要求3所述的方法,
其中所述错误纠正代码是以下项中的一个:奇偶校验码、汉明码、扩展汉明码、循环码以及分组码。
5.如权利要求1所述的方法,
其中所述数据的每个部分是比特并且所述开销信息包括至少一个比特。
6.如权利要求1所述的方法,
其中所述数据的所述部分对应于存储器单元。
7.如权利要求6所述的方法,
其中所述存储器单元是非易失性存储器的存储器单元。
8.如权利要求6所述的方法,
其中所述存储器单元是在差分读取存储器中使用的两个存储器单元的一部分。
9.如权利要求8所述的方法,
其中所述存储器单元的未限定状态由显示相同逻辑状态的所述差分读取存储器的成对的存储器单元确定。
10.如权利要求8所述的方法,进一步包括
基于在所述差分读取存储器中产生不同比特的不同概率,解码数据的至少一个部分。
11.如权利要求8所述的方法,
其中所述差分读取存储器包括以下项中的至少一种:浮置栅极单元、PCRAM、RRAM、MRAM、MONOS器件、纳米晶体单元、RAM以及ROM。
12.如权利要求1所述的方法,
其中解码包括基于所述开销信息并且基于所述数据的至少一个部分的所述未限定状态检测错误。
13.如权利要求12所述的方法,进一步包括
基于所述开销信息并且基于数据的显示未限定状态的所述部分的位置纠正错误。
14.如权利要求1所述的方法,
其中读取包括读取具有n比特、k比特的有效载荷信息D和一比特的开销信息r0的数据Y,其中确定包括确定所述数据Y的每个比特的状态,以及
其中解码包括:
如果Y的全部n比特具有[“0”,“1”]中的值,则采用以下项:
如果r0=Parity(D),则所述有效载荷信息D=(d0…dk-1)被假定是正确的;
如果所述有效载荷信息的比特d0…dk-1中的k-1比特加所述开销信息r0是[“0”,“1”]中的值,并且如果一个比特df具有未限定状态“X”,则设置df’=Parity(d0…dk-1,r0)|df=0,并且经纠正的有效载荷信息被确定为D’=(d0…df’…dk-1);
如果所述有效载荷信息d0…dk-1中的全部比特均是[“0”,“1”]中的值并且r0具有未限定状态“X”,则所述有效载荷信息D=(d0…dk-1)被假定是正确的。
15.如权利要求1所述的方法,基于具有汉明码的生成矩阵A、所述汉明码的奇偶校验矩阵H的所述汉明码,其中H=[A I],I是单位矩阵,
其中读取包括读取具有n比特、k比特的有效载荷信息D和r比特的开销信息R=(r0…rr-1)的数据Y,
其中确定包括确定所述数据Y的每个比特的状态,以及
其中解码包括:
如果Y的全部n比特具有[“0”,“1”]中的值,则采用以下项:
如果校正子S满足条件
S=H YT==0,
则所述有效载荷信息D=(d0…dk-1)被假定是正确的;
否则:如果所述校正子S≠0等于H的列i,则单个已翻转比特被假定并且通过倒置Y的比特i被纠正;
否则:作为选项,如果所述校正子S≠0不等于H的任何列,则不可恢复的数据错误被确定;
如果Y的n-1比特具有[“0”,“1”]中的值,并且一个比特yf具有所述未限定状态“X”,则采用以下项:
如果校正子S满足条件
S=H YT|yf=sv==0,其中sv=[“0”,“1”]
则设置yf’=sv,
否则:如果所述校正子S≠0等于H的列f,则设置yf’=1-sv;
否则:作为选项,不可恢复的数据错误被确定;
如果Y的n-2比特具有[“0”,“1”]中的值,并且两个比特yf1和yf2是未限定状态“X”,则采用以下项:
如果校正子S满足条件
S=H YT|yf1=sv1;yf2=sv2==0,其中sv1和sv2=[“0”,“1”]
则设置yf1’=sv1并且yf2’=sv2;
否则:如果所述校正子S≠0等于H的列f1,则设置yf1’=1-sv1并且yf2’=sv2;
否则:如果所述校正子S≠0等于H的列f2,则设置yf1’=sv1并且yf2’=1-sv2;
否则:如果所述校正子S≠0等于H的所述列f1和所述列f2的模2总和,则设置yf1’=1-sv1并且yf2’=1-sv2;
否则:作为选项,不可恢复的数据错误被确定。
16.如权利要求1所述的方法,基于具有扩展汉明码的生成矩阵A、所述扩展汉明码的奇偶校验矩阵H的所述扩展汉明码,其中H=[A I],I是单位矩阵,
其中读取包括读取具有n比特、k比特的有效载荷信息D和r比特的开销信息R=(r0…rr-1)的数据Y,
其中确定包括确定所述数据Y的每个比特的状态,以及
其中解码包括:
如果Y的全部n比特具有[“0”,“1”]中的值,则采用以下项:
如果校正子S满足条件
S=H YT==0,
则所述有效载荷信息D=(d0…dk-1)被假定是正确的;
否则:如果所述校正子S≠0等于H的列i,则单个已翻转比特被假定并且通过倒置Y的比特i被纠正;
否则:作为选项,如果所述校正子S≠0且不等于H的任何列,不可恢复的数据错误被确定;
如果Y的n-1比特均是[“0”,“1”]中的值,并且一个比特yf具有所述未限定状态“X”,则采用以下项:
如果校正子S满足条件
T
S=H Y|yf=sv==0,sv=[“0”,“1”]
则设yf’=0,
否则:如果所述校正子S≠0等于H的列f,则设yf’=1-sv;
否则:如果所述校正子S≠0等于H的列i,则设yf’=sv并且翻转Y的比特i;
否则:如果所述校正子S≠0等于H的所述列f和所述列i的模2总和,则设置yf’=1-sv并且翻转Y的比特i;
否则:作为选项,不可恢复的数据错误被确定;
如果Y的n-2比特具有[“0”,“1”]中的值,并且两个比特yf1和yf2是未限定状态“X”,则采用以下项:
如果校正子S满足条件
S=H YT|yf1=sv1;yf2=sv2==0,其中sv1和sv2=[“0”,“1”]
则设置yf1’=sv1和yf2’=sv2;
否则:如果所述校正子S≠0等于H的列f1,则设置yf1’=1-sv1和yf2’=sv2;
否则:如果所述校正子S≠0等于H的列f2,则设置yf1’=sv1和yf2’=1-sv2;
否则:如果所述校正子S≠0等于H的所述列f1和所述列f2的模2总和,则设置yf1’=1-sv1和yf2’=1-sv2;
否则:作为选项,不可恢复的数据错误被确定;
如果Y中的n-3比特具有[“0”,“1”]中的值,并且三个比特yf1、yf2和yf3是“X”,则:
如果校正子S满足条件
S=H YT|yf1=sv1;yf2=sv2;yf3=sv3==0,
其中sv1、sv2和sv3=[“0”,“1”],
其中sva是svi其中的一个,i=1…3,
即sv1、sv2和sv3其中的一个,
其中svb是svi其中的一个,但不同于sva,
其中sv(≠a)指具有i≠a的其他svi,
其中sv(≠a≠b)指具有i≠a并且i≠b的其他svi,
则设置yf1’=sv1且yf2’=sv2且yf3’=sv3;
否则:如果所述校正子S≠0等于H的列fa(a=1,2,3)中的一个,则设置yfa’=1-sva且另外两个yf(≠a)’=sv(≠a);
否则:如果所述校正子S≠0等于H的两个列fa和列fb的模2总和,则设置yfa’=1-sva且yfb’=1-svb和另一个yf(≠a≠b)’=sv(≠a≠b);
否则:如果所述校正子S≠0等于H的全部三个列f1、f2和f3的模2总和,则设置yf1’=1-sv1且yf2’=1-sv2且yf3’=1-sv3;
否则:作为选项,不可恢复的数据错误被确定。
17.如权利要求1所述的方法,
其中所述数据的至少一个部分对应于通过总线线路传输的信号
18.如权利要求17所述的方法,
其中所述总线线路是总线系统的两个总线线路的一部分,所述总线系统利用所述两个总线线路作为差分总线线路。
19.如权利要求18所述的方法,
其中所述未限定状态对应于示出相同或者基本相同的逻辑信号值的总线线路对。
20.一种包括处理单元的、用于数据处理的装置,所述处理单元被配置为:
读取数据,所述数据包括开销信息和有效载荷信息;
确定所述数据的每个部分的状态,其中所述状态包括第一二进制状态、第二二进制状态和未限定状态中的至少一种;以及
对具有未限定状态的数据的至少一个部分基于其位置并且基于所述开销信息进行解码。
21.如权利要求20所述的装置,
其中所述数据的每个部分由易失性或者非易失性存储器的比特或单元表示。
22.如权利要求20所述的装置,
其中所述数据的每个部分由成对的易失性或者非易失性存储器的单元表示,其中所述数据的一部分的所述未限定状态由示出相同逻辑状态的成对的所述存储器单元确定。
23.如权利要求20所述的装置,
其中所述数据的每个部分由易失性或者非易失性存储器的至少两个单元表示,其中所述数据的一部分的所述未限定状态由显示在无错误运行中未被使用的状态的所述存储器单元确定。
24.如权利要求21所述的装置,
其中所述存储器包括以下项中的至少一种:浮置栅极单元、PCRAM、RRAM、MRAM、MONOS器件、纳米晶体单元、RAM以及ROM。
25.一种用于数据处理的设备,特别是用于错误检测和错误纠正的设备,所述设备包括:
用于读取数据的装置,所述数据包括开销信息和有效载荷信息;
用于检测所述数据的每个部分的状态的装置,其中所述状态包括第一二进制状态、第二二进制状态和未限定状态中的至少一种;以及
对具有未限定状态的数据的至少一个部分基于其位置并且基于所述开销信息进行解码的装置。

说明书全文

数据处理的方法、装置和设备

技术领域

[0001] 本公开的实施例涉及错误检测和错误纠正的延伸,特别是涉及利用和增强错误纠正机制和错误纠正代码。

背景技术

[0002] 现有技术中,存在多种用于数据处理中的错误检测、纠正的方法,但这些数据处理的技术往往存在过程消耗、效率、速度等等方面的问题。
[0003] 因此,亟需能对上述问题进行改进的数据处理方法。发明内容
[0004] 第一个实施例涉及用于数据处理的方法,该方法包括读取数据以及确定该数据每个部分的状态,该数据包括开销信息(overhead information)和有效载荷信息(payload information),其中该状态包括第一二进制状态、第二二进制状态和未定义状态中的至少一种。该方法进一步包括对具有未定义状态的数据的至少一个部分基于其位置并且基于开销信息进行解码。
[0005] 第二个实施例涉及用于数据处理的装置,其中该装置包括配置为读取数据的处理单元,该数据包括开销信息和有效载荷信息。该处理单元进一步配置为确定该数据的每个部分的状态,其中该状态包括第一二进制状态、第二二进制状态和未定义状态中的至少一种。该处理单元还进一步配置为对具有未定义状态的数据的至少一个部分基于其位置并基于开销信息进行解码。
[0006] 第三个实施例涉及用于数据处理的设备,特别是用于错误检测和错误纠正的设备。该设备包括用于读取数据的装置以及用于确定该数据的每个部分的状态的方法,该数据包括开销信息和有效载荷信息,其中该状态包括第一二进制状态、第二二进制状态和未定义状态中的至少一种。该设备进一步包括对具有未定义状态的数据的至少一个部分基于其位置并且基于开销信息进行解码的装置。附图说明
[0007] 参考附图,实施例被示出并说明。附图用于说明基本原理,因此仅描述了对理解基本原理所必须的方面。附图不是按比例的。在附图中,相同附图标记表示相似特征。
[0008] 图1A和图1B各自示出了总结差分读取存储器器件的单元对的电位状态“0”、“1”和“X”的表格;
[0009] 图2示出了代码和属性的汇总表;
[0010] 图3示出了包括了适用于差分读取非易失性存储器(NVM)的单元对的如图2所示的相同代码的表格。

具体实施方式

[0011] 介绍的示例特别地涉及在读取期间具有未定义的比特指示(bit indication)的特征的存储器。
[0012] 当被读取时,这种存储器不仅为每个比特指示两个二进制状态“0”和“1”,而且为未定义的比特(undefined bit,即不能够基于有效信息的或者读取结果(非常)不确定的比特)额外地生成指示“X”。
[0013] 由指示“X”给出的附加信息可以被利用来优化错误纠正代码。
[0014] 示例可应用于具有差分读取的非易失性存储器(NVM)。然而,这个构思可与任何存储器或者甚至在总线等之上发送的任何数据集(data set)结合使用,此时附加的未定义的比特指示能够被利用。
[0015] 在VNM中(例如,甚至是在大量的写入/清除周期之后)差分读取的引入提高了可靠性,但是每个数据比特(data bit)需要两个NVM单元(也称为单元对)。
[0016] 根据该单元对的两个单元(即,具有t=真(true)和c=补(complement)的cell_t和cell_c)的状态,被存储的数据比特的状态可基于图1A所示的表格确定。图1B示出了不同编码方案的可选的示例。在下文中使用了依照图1A所示的示例的编码方案。
[0017] 因此,通常存储器的两个相关联的NVM单元存储互补的信息,即它们具有相反的状态。如图1所示,仅具有互补单元的比特能被成功地解码,即单元对的两个单元其中的一个必须处于被写入状态并且另一个必须处于被擦除状态,以允许成功的数据解码。
[0018] 在出现错误的情况下,单元中的一个可能已翻转(flipped)其状态(或者单元其中的一个的读出已被扰乱,使效果看起来像是该单元已经翻转其状态),这可能导致被解码的“X”状态。应该注意的是,两个单元均可已经翻转它们的状态至相反方向,并且因此该比特数据(bit data)被翻转。这种情况在下面进行讨论。
[0019] 如果没有“X”指示,针对故障比特(failing bit),来自[“0”,“1”]的随机值被读取,并且后续的ECC单元可用来确定该故障比特的位置和它的正确值。
[0020] 根据本文提供的示例,对“X”的利用允许鉴别故障比特的位置。这种认识能用于具有较少开销的改进ECC或者用于较高的纠正能
[0021] 如示例实施例,三种不同的ECC类型将被介绍。但是,提出的解决方案可用于这些实施例和其他的实施,从而提高纠正能力。
[0022] (a)具有1个未定义比特(1-undefined-bit)纠正能力的奇偶校验(parity check):
[0023] 采用仅使用“1”和“0”的常规编码方案,奇偶校验码(parity code)仅能够检测出单个比特已翻转;基于本文描述的利用未定义比特“X”状态的方法,另外地该单个未定义比特能够被纠正。
[0024] (b)具有2个未定义比特纠正能力的汉明码(Hamming Code):
[0025] 采用仅使用“1”和“0”的常规编码方案,汉明码仅能够纠正单个已翻转比特;基于本文描述的方法,在其他情况下,一个或者两个未定义比特能够被纠正。
[0026] (c)具有3个未定义比特纠正能力的扩展汉明码(extended Hamming Code):
[0027] 采用仅使用“1”和“0”的常规编码方案,扩展海明码仅能够纠正单个已翻转比特和检测出两个比特已翻转;基于本文描述的方法,在其他情况下一个、两个或三个未定义比特或者一个已翻转比特加一个未定义比特能够被纠正。
[0028] 下文中,随着示例使用情况,三个不同ECC类型将更详细地进行讨论。
[0029] 具有1个未定义比特纠正能力的奇偶校验
[0030] 当向存储器中写入k比特数据字(data word)D=(d0…dk-1)时,另外地,一个额外比特r0=Parity(D)被写入。总计,n=k+1比特被存储。
[0031] 当从存储器中读取数据字D时,Y=(d0…dk-1,r0)中的全部n比特被读出,每个比特结果是[“0”,“1”,“X”]中的值。对此,Y包括数据字D和额外比特(奇偶校验信息)。
[0032] 如果Y中的全部n个比特具有来自[“0”,“1”]的值,则如下应用:–如果r0=Parity(D),则数据D=(d0…dk-1)被假定是正确的;否则可指示不可恢复的数据错误。
[0033] 如果来自比特d0…dk-1中的k-1个比特加r0具有来自[“0”,“1”]的值,并且如果一个比特df是“X”,则设df’=Parity(d0…dk-1,r0)|df=0,并且D’=(d0…df’…dk-1)被假定是正确的。
[0034] 如果比特d0…dk-1中的全部比特具有来自[“0”,“1”]的值并且r0是“X”,则数据D=(d0…dk-1)被假定是正确的。
[0035] 如果Y中不止一个比特具有值“X”,则可指示不可恢复的数据错误。
[0036] 与不止一个已翻转比特=[“0”,“1”]一起被读取的数据字可耗尽该ECC机制并且导致未指示该比特的错误数据。此外,与单个已翻转比特=[“0”,“1”]和一个未定义比特“X”一起被读取的数据字可耗尽该ECC机制并且导致未指示该比特的错误数据。
[0037] 在下文中,奇偶校验示例提供为被存储的k=8比特的数据字和n=9比特。数据字是:
[0038] D=(1 0 0 0 0 0 0 0)
[0039] 和奇偶校验比特(parity bit)r0=1,这可导致如下情形:
[0040] (1)情形1:如下信息被读出:
[0041] Y=(1 0 0 0 0 0 0 0 1)
[0042] 读取的数据字的奇偶校验信息被确定如下:
[0043] Parity(1 0 0 0 0 0 0 0)=1
[0044] 其对应于奇偶校验比特r0。因此,不需要纠正。
[0045] (2)情形2:如下信息被读出:
[0046] Y=(1 0 10 0 0 0 0 1),
[0047] 其中第三比特(bit 2,因为第一位表示为bit 0)数值等于“1”是个错误。读取的数据字的奇偶校验信息被确定如下:
[0048] Parity(1 0 1 0 0 0 0 0)=0
[0049] 其不同于r0。因此,检测出不可恢复的错误。
[0050] (3)情形3a:如下信息被读出:
[0051] Y=(1 X 0 0 0 0 0 0 1)→f=1
[0052] 指示在位置f=1(数据字的第二位)处的未定义比特“X”。如果在位置f=1处的比特被设置为“0”,能获得如下纠正过的数据字D’:
[0053] df=Parity(1 0 0 0 0 0 0 0 1)=0
[0054] D’=(1 0 0 0 0 0 0 0)。
[0055] 应该注意的是将位置f=1处的比特设置为“1”,不会导致奇偶校验比特r0为1,这仅使将位置f=1处的bit 1设置为“0”成为可能。
[0056] (4)情形3b:如下信息被读出:
[0057] Y=(X 0 0 0 0 0 0 0 1)→f=0
[0058] 指示在位置f=0(数据字的第一位)处的未定义比特“X”。如果仅在位置f=0处的bit 0被设置为“1”,能获得如下纠正过的数据字D’:df=Parity(0 0 0 0 0 0 0 0 1)=0[0059] D’=(1 0 0 0 0 0 0 0)
[0060] (5)情形4:如下信息被读出:
[0061] Y=(X 0 0 0 0 0 0 X 1)
[0062] 指示在数据字D的位置f=0处的未定义比特“X”和位置f=7处的另一个未定义比特“X”。由于只有单一的奇偶校验比特r0,该错误不能被解决。但是,由于未定义比特“X”被检测到的事实,它能被检测到。
[0063] 具有2个未定义比特纠正能力的汉明码
[0064] 关于汉明码的详细信息,例如参考:
[0065] http://en.wikipedia.org/wiki/Hamming_code。
[0066] 在该示例方案中,系统的汉明码与以下项一起使用:
[0067] –汉明码的生成矩阵A;
[0068] –汉明码的奇偶校验矩阵H,其中
[0069] H=[A I],I是单位矩阵(identity matrix)。
[0070] 当向存储器中写入k个比特数据字D=(d0…dk-1)时,r个额外比特的R=(r0…rr-1)被写入。总计,n=k+r比特被存储。
[0071] 该r额外比特(即开销比特数)对应于条件:
[0072] r≥[ln(n+1)]=[ln(k+r+1)]
[0073] 通常,如下应用:
[0074] r≥[ln(n+1)]=[ln(k+r+1)]
[0075] 另外,如下定义可应用:
[0076] R=DAT。
[0077] 当从存储器中读取数据字D时,
[0078] Y=(d0…dk-1,r0…rr-1)的全部n比特
[0079] 被读取,每一个结果是来自[“0”,“1”]的值。
[0080] 如果Y的全部n个比特具有来自[“0”,“1”]的值,如下应用:
[0081] –如果校正子(syndrome)
[0082] S=H YT==0,
[0083] 则假定数据D=(d0…dk-1)是正确的。
[0084] –否则:如果校正子S≠0等于H的列i,则假定是单个已翻转比特并且该单个已翻转比特通过翻转Y的bit i来纠正。
[0085] –否则:如果校正子S≠0不等于H的任何列,可指示不可恢复的数据错误。这可以是用于截短码(shortened code)的选项。
[0086] 如果来自Y的n-1个比特具有来自[“0”,“1”]的值,并且一个比特yf(在位置f处)是“X”,如下应用:
[0087] –如果校正子
[0088] S=H YT|yf=0==0,
[0089] 则设置yf’=0,
[0090] –否则:如果校正子S≠0等于H的列f,则设置yf’=1,
[0091] –否则:可指示不可恢复的数据错误。这可以是用于截短码的选项。
[0092] –纠正过的数据D’为Y’的第一k比特被假定是正确的,其中Y’=(y0…yf’…yn-1)。
[0093] 或者:如果来自Y的n-1个比特具有来自[“0”,“1”]的值,并且一个比特yf(在位置f处)是“X”,如下应用:
[0094] –如果校正子
[0095] S=H YT|yf=1==0,
[0096] 则设yf’=1,
[0097] –否则:如果校正子S≠0等于H的列f,则设yf’=0,
[0098] –否则:可指示不可恢复的数据错误。这可以是用于截短码的选项。
[0099] –纠正过的数据D’为Y’的第一k比特被假定是正确的,其中,Y’=(y0…yf’…yn-1)。
[0100] 另外或者作为另一个选择,可考虑如下方案:如果来自Y的n-1比特具有来自[“0”,“1”]的值,并且一个比特yf(在位置f处)是“X”,如下应用:
[0101] –依次地(例如,在一个循环中),yf被设置为来自[“0”,“1”]的全部可能值sv,[0102] –如果校正子
[0103] S=H YT|yf=sv==0,
[0104] 则设置yf’=sv并且结束该循环,
[0105] –否则:为yf选择下一个值sv直至已尝试全部的值sv,
[0106] –如果通过为yf选择不同的值sv的迭代没能发现适当的sv值,可指示不可恢复的数据错误。这可以是用于截短码的选项。
[0107] –纠正过的数据D’为Y’的第一k比特被假定是正确的,其中,Y’=(y0…yf’…yn-1)。
[0108] 应该注意的是,在下文中设yf=1的或者是与yf1=1或yf2=1或yf3=1结合的各替代方案未进行更详细的描述。因此,没有描述选择yf1和yf2或者yf1、yf2和yf3的全部可能组合。然而,这些设置可以用以确定是否校正子S等于0。
[0109] 如果来自Y的n-2比特具有来自[“0”,“1”]的值,并且两比特yf1和yf2(分别地在位置f1和f2处)均是“X”,如下应用:
[0110] –如果校正子
[0111] S=H YT|yf1=yf2=0==0,
[0112] 则设置yf1’=yf2’=0,
[0113] –否则:如果校正子S≠0等于H的列f1,
[0114] 则设yf1’=1和yf2’=0,
[0115] –否则:如果校正子S≠0等于H的列f2,
[0116] 则设yf1’=0和yf2’=1,
[0117] –否则:如果校正子S≠0等于H的列f1和f2的模2总和(modulo-2sum),则设yf1’=yf2’=1,
[0118] –否则可指示不可恢复的数据错误。这可以是用于截短码的选项。
[0119] –纠正过的数据D’为Y’的第一k比特被假定是正确的,其中Y’=(y0…yf1’…yf2’…yn-1)。
[0120] 如果来自Y的不止2比特是未定义比特“X”,则可指示不可恢复的数据错误。
[0121] 具有不止一个来自[“0”,“1”]的翻转比特的读取的数据字可该耗尽ECC机制并且导致未被指示的错误数据。具有来自[“0”,“1”]的一个翻转比特和一个未定义比特“X”的被读取的数据字可耗尽该ECC机制并且导致未被指示的错误数据。
[0122] 下文中,具有2个未定义比特纠正能力的汉明码示例被提供为具有k=8比特的数据字、r=4额外比特和n=12比特被存储(截短汉明码)。该数据字为:
[0123] D=(1 0 0 0 0 0 0 0)
[0124] 并且额外比特等于
[0125] R=D AT=(1 1 0 0)。
[0126] 汉明码的生成矩阵A和奇偶校验矩阵H可定义如下:
[0127]
[0128]
[0129] 这可导致如下情形:
[0130] (1)情形1:如下信息被读取:
[0131] Y=(1 0 0 0 0 0 0 0 1 1 0 0)
[0132] 校正子S结果是:
[0133] S=H YT=(0 0 0 0)T
[0134] 因此,不需要纠正。
[0135] (2)情形2:如下信息被读取:
[0136] Y=(1 1 0 0 0 0 0 0 1 1 0 0)
[0137] 其中第二比特等于“1”指示出错误。校正子S被确定如下:
[0138] S=H YT=(1 0 1 0)T
[0139] 从而指示矩阵H中的第二列。因此,第二比特被从“1”倒置为“0”,
[0140] 以获取纠正过的数据字D’。
[0141] (3)情形3:如下信息被读取:
[0142] Y=(1 0 1 0 0 0 0 0 1 0 0 0 )
[0143] 其中数据字D的第三比特是“1”指示出第一个错误,以及额外比特的第二比特“0”指示出第二个错误。校正子S被确定如下:
[0144] S=H YT=(1 1 0 1)T。
[0145] 向量(1 1 0 1)T不对应于矩阵H的任何列。因此,该错误不能被恢复,但能被检测到。
[0146] (4)情形4a:如下信息被读取:
[0147] Y=(1 X 0 0 0 0 0 0 1 1 0 0)→f=1
[0148] 指示在位置f=1(数据字D的第二位)处的未定义比特“X”。如果Y(即其第二比特被确定为未定义比特“X”)的比特1被设置为“0”,能够获取纠正过的数据字D’,导致如下校正子S:
[0149] S=H YT|yf=0=(0 0 0 0)T
[0150] (5)情形4b:如下信息被读取:
[0151] Y=(X 0 0 0 0 0 0 0 1 1 0 0)→f=0
[0152] 指示在位置f=0(数据字D的第一位)处的未定义比特“X”。设Y(即其第一比特被确定为未定义比特“X”)的比特0为“0”,导致如下校正子S:
[0153] S=H YT|yf=0=(1 1 0 0)T,
[0154] 其指示在数据字的由向量(1 1 0 0)T鉴别出的位置处的错误,即对应于数据字的第一位的第一列。换言之,向量(1 1 0 0)T还鉴别出矩阵H的列f=0。因此,Y的比特0被设置为“1”,以获取纠正过的数据字D’。(6)情形5a:如下信息被读取:
[0155] Y=(1 X X 0 0 0 0 0 1 1 0 0)→f1=1,f2=2
[0156] 指示在位置f1=1和f2=2(数据字D的第二位和第三位)处的未定义比特“X”。
[0157] 两个比特(比特1和比特2)均被设置为“0”,并且校正子S被确定如下:
[0158] S=H YT|yf1=yf2=0=(0 0 0 0 )T。
[0159] 因此,bit 1和bit 2被正确地设置为“0”,从而获得纠正过的数据字D’。
[0160] (7)情形5b:如下信息被读取:
[0161] Y=(X 0 0 X 0 0 0 0 1 1 0 0)→f1=0,f2=3
[0162] 指示在位置f1=0和f2=3(数据字D的第一位和第四位)处的未定义比特“X”。两个比特(比特0和比特3)均被设置为“0”,并且校正子S被确定如下:
[0163] S=H YT|yf1=yf2=0=(1 1 0 0)T。
[0164] 校正子S还鉴别出矩阵H的第一列(即,列f1=0)。
[0165] 因此,bit 3仍然为“0”并且比特1被设置为“1”,以获得纠正过的数据字D’。
[0166] (8)情形5c:如下信息被读取:
[0167] Y=(X 0 0 0 0 0 0 0 1 X 0 0)→f1=0,f2=9
[0168] 指示在位置f1=0和f2=9处的未定义比特“X”。两个比特(比特0和比特9)均被设置为“0”,并且校正子S被确定如下:
[0169] S=H YT|yf1=yf2=0=(1 0 0 0)T=(1 1 0 0)T+(0 1 0 0)T。
[0170] 校正子S还鉴别出矩阵H的列f1=0和列f2=9。因此,比特0被设置为“1”并且比特9被设置为“1”,以获得纠正过的数据字D’。
[0171] (9)情形6:如下信息被读取:
[0172] Y=(X 0 0 0 0 0 0 1 1 X 0 0)→f1=0,f2=9
[0173] 指示除在比特7处的错误之外,在位置f1=0和f2=9处的未定义比特“X”。
[0174] 两个未定义比特(比特0和比特9)均被设置为“0”,并且校正子S被确定如下:
[0175] S=HYT|yf1=yf2=0=(0 0 1 1)T≠(1 1 0 0)T并且≠(0 1 0 0)T并且≠(1 1 0 0)T+(0 1 0 0)T
[0176] 该结果未确定矩阵H的列0和列9的任何组合。
[0177] 因此,错误可以被检测到,但该错误是不可恢复的。
[0178] (10)情形7:如下信息被读取:
[0179] Y=(X 0 0 0 0 0 0 X 1 X 0 0)
[0180] 指示在位置f1=0和f2=7和f2=9处的未定义比特“X”。这导致不可恢复的错误。
[0181] 具有3个未定义比特纠正能力的扩展汉明码
[0182] 关于扩展汉明码的详细信息,例如参考:
[0183] http://en.wikipedia.org/wiki/Hamming_code#Hamming_codes_with_additio nal_parity_.28SECDED.29。
[0184] 在本示例方案中,系统性的扩展汉明码与下列项一起使用:
[0185] –扩展汉明码的生成矩阵A,相较于上面描述的汉明码的生成矩阵,其包括另外的奇偶校验行(parity row);
[0186] –扩展汉明码的奇偶校验矩阵H,其中:
[0187] H=[A I],I是单位矩阵。
[0188] 当向存储器中写入k比特的数据字D=(d0…dk-1)时,r个额外比特R=(r0…rr-1)被写入。总计,n=k+r比特被存储。
[0189] 该r额外比特对应于条件:
[0190] r≥[ln(n)]+1=[ln(k+r)]+1
[0191] 通常,如下应用:
[0192] r≥[ln(n)]+1=[ln(k+r)]+1
[0193] 另外,如下定义可应用:
[0194] R=D AT。
[0195] 当从存储器中读取数据字D时,Y=(d0…dk-1,r0…rr-1)的全部n比特被读取,每一个结果均是[“0”,“1”,“X”]中的值。
[0196] 如果Y的全部n比特具有来自[“0”,“1”]的值,则采用以下项:
[0197] –如果校正子
[0198] S=H YT==0,
[0199] 则数据D=(d0…dk-1)被假定是正确的。
[0200] –否则:如果校正子S≠0等于H的列i,则单个已翻转比特被假定并且通过翻转Y的比特i来被纠正。
[0201] –否则:如果校正子S≠0不等于H的任何列,可指示不可恢复的数据错误。
[0202] 如果Y的n-1比特是[“0”,“1”]中的值,并且一个比特yf(在位置f处)是“X”,则采用以下项:
[0203] –如果校正子
[0204] S=H YT|yf=0==0,
[0205] 则设yf’=0,
[0206] –否则:如果校正子S≠0等于H的列f,则设yf’=1,
[0207] –否则:如果校正子S≠0等于H的列i,
[0208] 则yf’=0并且Y的比特i被翻转。
[0209] –否则:如果校正子S≠0等于H的列f和列i的模2总和,则设yf’=1并且Y的比特i被翻转,
[0210] –否则指示不可恢复的数据错误。
[0211] –具有如上面指示的可能被翻转的比特i的被纠正过的数据D’为Y’的第一k比特被假定是正确的,其中Y’=(y0…yf’…yn-1)。
[0212] 如果Y中的n-2比特具有来自[“0”,“1”]的值,并且两比特yf1和yf2(分别地在位置f1和f2处)是“X”,则采用以下项:
[0213] –如果校正子
[0214] S=H YT|yf1=yf2=0==0,
[0215] 则设置yf1’=yf2’=0,
[0216] –否则:如果校正子S≠0等于H的列f1,
[0217] 则设置yf1’=1和yf2’=0,
[0218] –否则:如果校正子S≠0等于H的列f2,
[0219] 则设置yf1’=0和yf2’=1,
[0220] –否则:如果校正子S≠0等于H的列f1和列f2的模2总和,则设置yf1’=yf2’=1,[0221] –否则指示不可恢复的数据错误。
[0222] –纠正过的数据D’为Y’的第一k比特被假定是正确的,其中,Y’=(y0…yf1’…yf2’…yn-1)。
[0223] 如果Y的n-3比特具有来自[“0”,“1”]的值,并且三比特yf1、yf2和yf3(分别地在位置f1、f2和f3处)是“X”,则:
[0224] –如果校正子
[0225] S=H YT|yf1=yf2=yf3=0==0,
[0226] 则设置yf1’=yf2’=yf3’=0,
[0227] –否则:如果校正子S≠0等于H的列fa(a=1,2,3)其中的一个,则设置yfa’=1并且两个另外的yf(≠a)’=0,
[0228] –否则:如果校正子S≠0等于H的两个列fa和列fb的模2总和,则设置yfa’=yfb’=1并且yf(≠a,≠b)’=0,
[0229] –否则:如果校正子S≠0等于H的全部三个列f1、f2和f3的模2总和,则设置yf1’=yf2’=yf3’=1,
[0230] –否则指示不可恢复的数据错误。
[0231] –纠正过的数据D’=Y’的第一k比特被假定是正确的,其中,=Y’=(y0…yf1’…yf2’…yn-1)。
[0232] 如果来自Y的超过3比特是未定义比特“X”,可指示不可恢复的数据错误。
[0233] 具有来自[“0”,“1”]的不止两个翻转比特的读取的数据字可耗尽该ECC机制并且导致未被指示的错误数据。具有来自[“0”,“1”]的两个翻转比特和一个或两个未定义比特“X”的被读取的数据字可耗尽该ECC机制并且导致未被指示的错误数据。具有来自[“0”,“1”]的一个已翻转比特和三个未定义比特“X”的被读取的数据字可耗尽该ECC机制并且导致未被指示的错误数据。
[0234] 下文中,提供具有3个未定义比特纠正能力的扩展汉明码示例,其具有k=8比特的数据字、r=5额外比特和n=13比特被存储(截短汉明码)。该数据字为:
[0235] D=(1 0 0 0 0 0 0 0)
[0236] 且额外比特等于
[0237] R=D AT=(1 1 0 0 1)
[0238] 扩展汉明码的生成矩阵A和奇偶校验矩阵H可定义如下:
[0239]
[0240]
[0241] 这可导致如下情形:
[0242] (1)情形1:如下信息被读取:
[0243] Y=(1 0 0 0 0 0 0 0 1 1 0 0 1)
[0244] 校正子S结果是:
[0245] S=H YT=(0 0 0 0 0)T
[0246] 因此,不需要纠正。
[0247] (2)情形2:如下信息被读取:
[0248] Y=(1 1 0 0 0 0 0 0 1 1 0 0 1)
[0249] 其中第二比特(比特1)是“1”,这是错误。校正子S被确定如下:
[0250] S=H YT=(1 0 1 0 1)T,
[0251] 其中向量(1 0 1 0 1)T指矩阵H中列1(第二列)。因此,Y的比特1被从“1”翻转为“0”,以获取纠正过的数据字D’。
[0252] (3)情形3:如下信息被读取:
[0253] Y=(1 0 1 0 0 0 0 0 1 0 0 0 1)
[0254] 具有比特2处的错误(“1”代替“0”)和比特9处的另一个错误(“0”代替“1”)。校正子S结果是
[0255] S=H YT=(1 1 0 1 1)T,
[0256] 其未对应于矩阵H的任何列。因此,该错误被检测出但不能被恢复。
[0257] (4)情形4a:如下信息被读取:
[0258] Y=(1 X 0 0 0 0 0 0 1 1 0 0 1)→f=1
[0259] 指示在位置f=1(数据字D的第二位)处的未定义比特“X”。在位置f=1处的比特1被设置为“0”,并且校正子S被确定为:
[0260] S=H YT|yf=0=(0 0 0 0 0)T,
[0261] 指示出“0”是比特1的正确值,从而获得纠正过的数据字D’。
[0262] (5)情形4b:如下信息被读取:
[0263] Y=(X 0 0 0 0 0 0 0 1 1 0 0 1)→f=0
[0264] 指示在位置f=0(数据字D的第一位)处的未定义比特“X”。在位置f=0处的bit 0被设置为“0”,并且校正子S被确定为:
[0265] S=H YT|yf=0=(1 1 0 0 1)T,
[0266] 其也指示出在矩阵H的列0中的错误。因此,Y的比特0被设置为“1”,以获得纠正的数据字D’。
[0267] (6)情形5a:如下信息被读取:
[0268] Y=(1 X X 0 0 0 0 0 1 1 0 0 1)→f1=1,f2=2
[0269] 指示在位置f1=1和f2=2(数据字D的第二位和第三位)处的未定义比特“X”。这些比特(比特1和比特2)被设置为“0”,并且校正子S被确定为:
[0270] S=H YT|yf1=yf2=0=(0 0 0 0 0)T,
[0271] 指示出“0”是比特1和比特2的正确值,从而获得纠正过的数据字D’。
[0272] (7)情形5b:如下信息被读取:
[0273] Y=(X 0 0 X 0 0 0 0 1 1 0 0 1)→f1=0,f2=3
[0274] 指示在位置f1=0和f2=3(数据字D的第一位和第四位)处的未定义比特“X”。两个比特(比特0和比特3)均被设置为“0”,并且校正子S被确定如下:
[0275] S=H YT|yf1=yf2=0=(1 1 0 0 1)T。
[0276] 校正子S还识别出矩阵H的第一列(即列f1=0)。因此,比特3仍然为“0”并且比特0被设置为“1”,以获得纠正过的数据字D’。
[0277] (8)情形5c:如下信息被读取:
[0278] Y=(X 0 0 0 0 0 0 0 1 X 0 0 1)→f1=0,f2=9
[0279] 指示在位置f1=0和f2=9处的未定义比特“X”。两个比特(比特0和比特9)均被设置为“0”,并且校正子S被确定如下:
[0280] S=H YT|yf1=yf2=0=(1 0 0 0 1)T=(1 1 0 0 1)T+(0 1 0 0 0)T。
[0281] 校正子S还识别出矩阵H的列0和列9。因此,比特0被设置为“1”并且比特9被设置为“1”,以获得纠正过的数据字D’。
[0282] (9)情形6a:如下信息被读取:
[0283] Y=(1 X 0 0 0 0 0 1 1 1 0 0 1)→f=1
[0284] 指示在位置f=1处的未定义比特“X”和比特7处的错误。在位置f=1处的比特被设置为“0”,并且校正子S被确定为:
[0285] S=H YT|yf=0=(1 0 1 1 0)T,
[0286] 其中向量(1 0 1 1 0)T指矩阵H的列7。因此,Y的比特7被从“1”翻转为“0”并且比特1被正确地设置为“0”,以获得纠正的数据字D’。
[0287] (10)情形6b:如下信息被读取:
[0288] Y=(0 0 0 0 0 0 0 0 1 X 0 0 1)→f=9
[0289] 指示在位置f=9处的未定义比特“X”和比特0处的错误。在位置f=9处的比特被设置为“0”,并且校正子S被确定为:
[0290] S=H YT|yf=0=(1 0 0 0 1)T=(1 1 0 0 1)T+(0 1 0 0 0)T。
[0291] 校正子S还识别出矩阵H的列9和附加的列0。因此,比特0被翻转为“1”并且比特9被设置为“1”,以获得纠正过的数据字D’。
[0292] (11)情形7:如下信息被读取:
[0293] Y=(0 0 0 0 0 0 0 0 X X 0 0 1)→f1=8,f2=9
[0294] 指示在位置f1=8和f2=9处的两个未定义比特“X”。另外,在比特0处发生错误。在位置f1=8和f2=9处的两个比特均被设置为“0”,并且校正子S被确定为:
[0295] S=H YT|yf=0=(0 0 0 0 1)T≠(0 0 0 0 0)T并且≠(1 0 0 0 0)T并且≠(0 1 0 0 0)T并且≠(1 0 0 0 0)T+(0 1 0 0 0)T
[0296] 该结果未识别出矩阵H的列8和列9的任何组合。因此,该错误是不可恢复的。
[0297] (12)情形8a:如下信息被读取:
[0298] Y=(1 X X X 0 0 0 0 1 1 0 0 1)→f1=1,f2=2,f3=3
[0299] 指示在位置f1=1、f2=2和f3=3处的三个未定义比特“X”。这些位置处的比特被设置为“0”,并且校正子S被确定为:
[0300] S=H YT|yf1=yf2=yf3=0=(0 0 0 0 0)T
[0301] 指示“0”是Y的比特1、比特2和比特3的正确值,从而获取纠正过的数据字D’。
[0302] (13)情形8b:如下信息被读取:
[0303] Y=(X 0 X X 0 0 0 0 1 1 0 0 1)→f1=0,f2=2,f3=3
[0304] 指示在位置f1=0、f2=2和f3=3处的三个未定义比特“X”。这些位置处的比特被设置为“0”,并且校正子S被确定为:
[0305] S=H YT|yf1=yf2=yf3=0=(1 1 0 0 1)T,
[0306] 其中向量(1 1 0 0 1)T还指矩阵H的列0。因此,Y的比特1被设置为“1”并且比特2和比特3被正确地设置为“0”,以获取纠正过的数据字D’。
[0307] (14)情形8c:如下信息被读取:
[0308] Y=(X 0 X 0 0 0 0 0 X 1 0 0 1)→f1=0,f2=2,f3=8
[0309] 指示在位置f1=0、f2=2和f3=8处的三个未定义比特“X”。这些位置处的比特被设置为“0”,并且校正子S被确定为:
[0310] S=H YT|yf1=yf2=yf3=0=(0 1 0 0 1)T=(1 1 0 0 1)T+(1 0 0 0 0)T。
[0311] 校正子S还识别出矩阵H的列0和列8。因此,比特0和比特8被设置为“1”并且比特2被设置为“0”,以获取纠正过的数据字D’。
[0312] (15)情形8d:如下信息被读取:
[0313] Y=(X 0 0 0 0 0 0 0 X X 0 0 1)→f1=0,f2=8,f3=9
[0314] 指示在位置f1=0、f2=8和f3=9处的三个未定义比特“X”。这些位置处的比特被设置为“0”,并且校正子S被确定为:
[0315] S=H YT|yf1=yf2=yf3=0=(0 0 0 0 1)T=(1 1 0 0 1)T+(1 0 0 0 0)T+(0 1 0 0 0T) =H的列f1+H的列f2+H的列f3→设Y的比特0、比特8和比特9为“1”
[0316] 校正子S还鉴别出矩阵H的列0、列8和列9。因此,比特0、比特8和比特9被设置为“1”,以获取纠正过的数据字D’。
[0317] (16)情形9:如下信息被读取:
[0318] Y=(X 0 0 0 X 0 0 X 1 X 0 0 0)
[0319] 指示在位置f1=0和f2=4和f3=7和f4=9处的四个未定义比特“X”。这导致不可恢复的错误。
[0320] 图2示出了代码和属性的汇总表:
[0321] (a)如果是奇偶校验码(parity code),则开销为单个开销比特。
[0322] 没有任何未定义比特“X”的奇偶校验码允许对单个翻转比特“f”(从“0”翻转为“1”,反之亦然)的检测。
[0323] 在具有至少一个未定义比特“X”的奇偶校验码示例中,采用如下项:单个的未定义比特“X”能(被检测到并且)被纠正。在另外的情况下,单个的已翻转比特能被检测到。
[0324] (b)如果是汉明码,开销比特量等于[ln(n+1)](n是被存储的比特量)。
[0325] 没有任何未定义比特“X”的汉明码允许对单个已翻转比特“f”的(检测和)纠正。
[0326] 在具有至少一个未定义比特“X”的汉明码示例中,采用如下项:单个翻转比特“f”或者单个未定义比特“X”或者两个未定义比特“X”能(被检测到并且)被纠正。在另外的情况下,有可能检测到三个或者更多的未定义比特“X”加任何其他数量的已翻转比特。
[0327] (c)如果是扩展汉明码,开销比特量等于[ln(n+1)]+1(n是被存储的比特量)。
[0328] 扩展汉明码(没有任何未定义比特“X”)允许对单个已翻转比特“f”的(检测和)纠正以及对两个已翻转比特“f”的检测。
[0329] 在具有至少一个未定义比特“X”的扩展汉明码示例中,下面的情形能(被检测到并且)被纠正:单个已翻转比特“f”、单个未定义比特“X”、两个未定义比特“X”、单个已翻转比特“f”加一个未定义比特“X”以及三个未定义比特“X”。在其它的情况下,有可能检测到两个已翻转比特“f”、一个已翻转比特“f”加两个未定义比特“X”、至少四个未定义比特“X”加任何其他数量的已翻转比特“f”。
[0330] 图3示出了如图2所示的相同代码的表格,其中该方案被用于特别是在具有差分读取的非易失性存储器(NVM)的情况下,其中每个单元是一对单元(单元对,差分单元)的一部分,并且其中“X”指示单元对的未定义状态。
[0331] (a)如果是奇偶校验码,开销等于单个开销比特。
[0332] 没有任何未定义比特“X”的奇偶校验码允许对任何单个单元对故障的检测。
[0333] 具有至少一个未定义比特“X”的奇偶校验码示例中,采用如下项:
[0334] 任何一个单元故障能(被检测到并且)被纠正。如果仅单元对的一个单元示出故障并且单元对的另一个单元具有正确值,这对应于单元对的状态“X”或者对应于由该特别的单元对表示的未定义比特“X”。根据该奇偶校验比特的值,它能确定是否“X”应该读取“0”或者“1”。因此,单元对的哪一个单元具有不正确的状态能够被确定。
[0335] 另外,任何2单元故障以及具有至少两个未定义比特“X”的所有的多个单元故障均能被检测到:该2单元故障包括当单元对的两个单元均显示错误状态(指示由该单元对表示的已翻转比特)的情况。该单个已翻转比特能基于奇偶校验比特被检测到。
[0336] 而且,两个或者更多的未定义比特“X”能被检测到,其中每个未定义比特“X”是基于单元对的,其中该单元对的单元的其中的一个具有错误状态。这能通过允许检测一比特“X”状态的功能被检测到,该比特由差分存储器的两个单元表示。
[0337] (b)如果是汉明码,开销比特量等于[ln(n+1)](n是被存储的比特量)。
[0338] 没有任何未定义比特“X”的汉明码允许对任何一个单元对故障的(检测和)纠正。
[0339] 在具有至少一个未定义比特“X”的汉明码示例中,采用如下项:
[0340] 任何1单元故障和任何2单元故障能被检测到并且被纠正。该2单元故障可以是在单元对的两个单元中的故障(导致已翻转比特)。该2单元故障还可以是导致两个未定义比特“X”的在不同单元对的两个单元中的故障。两者均能通过汉明码被纠正。
[0341] 另外,具有至少三个未定义比特“X”的全部的多单元故障能被检测到。
[0342] 而且,超过三个未定义比特“X”能被检测到。
[0343] (c)如果是扩展汉明码,开销比特量等于[ln(n+1)]+1(n是被存储的比特量)。
[0344] 扩展汉明码(没有任何未定义比特“X”)允许对任何一个单元对故障的(检测和)纠正以及对任何两个单元对故障的检测。
[0345] 在具有至少一个未定义比特“X”的扩展汉明码示例中,采用如下项:
[0346] 任何一个单元故障、任何两个单元故障和任何三个单元故障能被检测到并且被纠正。
[0347] 另外,任何4单元故障和具有至少四个未定义比特“X”的全部的多个单元故障能被检测到。4单元故障可以是在2个单元对、3个单元对或者4个单元对之间分布的4个错误的单个单元的任何结合,该任意结合导致如下任一结果:两个已翻转比特、一个已翻转比特结合两个未定义比特或者四个未定义比特。
[0348] 而且,超过四个未定义比特“X”能被检测到。
[0349] 因此,使用扩展汉明码,所有的一个单元、两个单元或者三个单元的单元故障均能被1-比特纠正代码/2-比特检测代码纠正,这对应于少量的开销比特。
[0350] 不同状态的概率
[0351] 作为选择,在差分读取存储器NVM中不同比特发生的概率能被考虑进来。例如,未定义比特“X”的概率P(“X”)和已翻转比特“f”的概率P(“f”)可以是基本上不同的,因为未定义比特“X”仅需要单元对的一个单元故障,然而已翻转比特“f”要求同一个单元对的两个单元均故障进入相反的方向。因此,在被读取的数据字中,已翻转比特的概率可小于两个未定义比特的概率P(2XW),即
[0352] P("f")<
[0353] 另外,由于不同的基本物理机制(underlying physical mechanisms),错误单元的概率可以是不同的。因此,从“1”变为“0”的概率P(1→0)可不同于从“0”变为“1”的概率P(0→1)。从概率P(2XW)看来,这效应进一步地减小了概率P(“f”)。
[0354] 在极端不对称的情况下,即在下面情况下
[0355] P(0→1)=0或者
[0356] P(1→0)=0
[0357] 概率P(“f”)结果为0。因此,没有已翻转比特,但是未定义状态“X”是有可能的。这允许至少用于对全部的单元故障的检测(和可能的纠正),即不存在未被检测到的单元故障,因为在数据字中没有“X”的任何组合或者数量能保持未被检测到。
[0358] 进一步的优点和示例
[0359] 本文介绍的解决方案能应用于具有差分读取的NVM,特别是应用于像以下类型的NVM单元:浮置栅极(Floating Gate)、相变随机存取存储器(PCRAM)、电阻随机存取存储器(RRAM)、磁阻随机存取存储器(MRAM)、金属-化物-氮化物-氧化物-(MONOS)器件、纳米晶体单元等。该解决方案能应用于全部的存储器类型,特别是RAM和只读存储器(ROM)。
[0360] 该解决方案能在各种类型的应用(例如,指向数据传输、数据存储的)中实施,特别是在存储器器件(例如硬盘)上。
[0361] 该解决方案还能结合各种类型的错误检测方案和/或错误纠正方案,例如分组码(block code)、循环码(cyclic code)、BCH码等。
[0362] 本文中提出的示例特别地可以是基于下列解决方案中的至少一种。特别地,下列特征的结合能被利用,以求达到期望的结果。方法的特征能与设备或者系统的任何特征结合,反之亦然。
[0363] 一种方法被提供来用于数据处理(该数据包括开销信息和有效载荷信息),该数据处理包括读取数据以及确定该数据的每个部分的状态,其中该状态包括第一二进制状态、第二二进制状态和未定义状态中的至少一种。该方法进一步包括对具有未定义状态的数据的至少一个部分基于其位置并且基于所述开销信息进行解码。
[0364] 应当注意的是,数据处理特别地可包括错误检测和/或错误纠正。具体地,解码包括错误检测和/或错误纠正。对此,错误纠正可包括错误检测。未定义状态“X”能被确定,其还揭示了附加信息、未定义状态发生在哪处(即,位置),即哪个bit或者哪个存储器单元显示了这个未定义状态“X”。解码特别地包括为数据的一部分(例如,与该未定义状态“X”相关联的比特或者单元)确定正确值。
[0365] 因此,在这个意义上“位置”允许确定信息的哪一部分显示了未定义状态。该附加信息能被利用于现有的错误纠正代码中,以得到至少一个数据的这种未定义部分的正确值和/或检测出除此以外仍然隐藏的另外的错误。
[0366] 根据实施例,解码数据的至少一个部分包括检测有效载荷信息。
[0367] 根据实施例,解码数据的至少一个部分包括基于错误纠正代码的错误检测。
[0368] 根据实施例,错误纠正代码是以下项中的一种:奇偶校验码、汉明码、扩展汉明码、循环码和分组码。
[0369] 根据实施例,数据的每个部分是比特并且开销信息包括至少一比特。
[0370] 根据实施例,数据的一部分对应于存储器单元。
[0371] 根据实施例,存储器单元是非易失性存储器的存储器单元。
[0372] 根据实施例,存储器单元是用在差分读取存储器中的两个存储器单元的一部分。
[0373] 差分读取存储器包括数个单元对,每个单元对包括具有相反值的单元。如果单元对的存储器单元不显示相反值,这可指示未定义状态“X”。
[0374] 根据实施例,存储器单元的未定义状态是由显示相同逻辑状态的差分读取存储器的成对的存储器单元确定。
[0375] 根据实施例,该方法包括基于差分读取存储器中发生不同比特的不同概率,对数据的至少一个部分的解码。
[0376] 例如,基于物理影响(例如,具有差分读取特征的NVM器件的物理影响),与已翻转单元对(单元对的两个单元均已翻转,从而指示由该单元对表示的比特的错误值)相比,未定义状态“X”的概率可高得多。这种不对称概率分布能通过错误纠正机制被加以考虑。例如,如果单元的不被需要的变化(例如从“1”到“0”,反之亦然)能够被避免,表示错误值的已翻转单元的概率将等于0。
[0377] 根据实施例,差分读取存储器包括以下项的至少一种:浮置栅极单元、PCRAM、RRAM、MRAM、MONOS器件、纳米晶体单元、RAM和ROM。
[0378] 根据实施例,解码包括基于开销信号和基于数据的至少一个部分的未定义状态对错误的检测。
[0379] 根据实施例,该方法包括基于开销信号和基于数据显示未定义状态的部分的位置纠正错误。
[0380] 根据实施例,该方法包括读取具有n比特、k比特的有效载荷信息D和一比特的开销信息r0的数据Y,以及确定数据Y的每个比特的状态。如果Y的全部n比特具有来自[“0”,“1”]的值,则采用以下项:
[0381] –如果r0=Parity(D),则有效载荷信息D=(d0…dk-1)被假定是正确的;
[0382] –如果来自有效载荷信息的比特d0…dk-1中的k-1比特加上开销信息r0具有[“0”,“1”]中的值,并且如果一个比特df具有未定义状态“X”,则设df’=Parity(d0…dk-1,r0)|df=0,并且纠正过的有效载荷信息被确定为D’=(d0…df’…dk-1);以及
[0383] –如果有效载荷信息d0…dk-1中的全部比特具有来自[“0”,“1”]的值并且r0具有未定义状态“X”,则有效载荷信息D=(d0…dk-1)被假定是正确的。
[0384] 应当注意的是,比特可对应于存储器(特别是NVM)的单个单元的值,其中每个单元是差分读取存储器的单元对的一部分。因此,单元的未定义状态对应于示出相同的逻辑状态的该单元对的两个单元。因此,信息“未定义状态X”能够来源于在正常情况下应当指示相反状态的单元对。
[0385] 根据实施例,基于具有汉明码生成矩阵A、汉明码奇偶校验矩阵H的汉明码,其中H=[A I],I是单位矩阵,该方法包括读取具有n比特、k比特的有效载荷信息D和r比特的开销信息R=(r0…rr-1)的数据Y,以及确定数据Y的每个比特的状态。如果Y的全部n比特具有[“0”,“1”]中的值,采用以下项:
[0386] –如果校正子S满足条件
[0387] S=H YT==0,
[0388] 则有效载荷信息D=(d0…dk-1)被假定是正确的;
[0389] –否则:如果校正子S≠0等于H的列i,则单个已翻转比特被假定并且该单个已翻转比特通过倒置Y的比特i被纠正;
[0390] –否则,作为选项,如果校正子S≠0不等于H的任何列,不可恢复的数据错误被确定;
[0391] –如果Y的n-1比特具有来自[“0”,“1”]的值,并且一个比特yf具有未定义状态“X”,采用以下项:
[0392] –如果校正子S满足条件
[0393] S=H YT|yf=sv==0,其中sv=[“0”,“1”]
[0394] 则设置yf’=sv,
[0395] –否则:如果校正子S≠0等于H的列f,则设置yf’=1-sv;
[0396] –否则:作为选项,不可恢复的数据错误被确定;
[0397] –如果Y的n-2比特具有[“0”,“1”]中的值,并且两比特yf1和yf2是未定义状态“X”,采用以下项:
[0398] –如果校正子S满足条件
[0399] S=H YT|yf1=sv1,yf2=sv2==0,其中sv1和sv2=[“0”,“1”]
[0400] 则设置yf1’=sv1和yf2’=sv2;
[0401] –否则:如果校正子S≠0等于H的列f1,则设置yf1’=1-sv1和yf2’=sv2;
[0402] –否则:如果校正子S≠0等于H的列f2,则设置yf1’=sv1和yf2’=1-sv2;
[0403] –否则:如果校正子S≠0等于H的列f1和列f2的模2总和,则设置yf1’=1-sv1和yf2’=1-sv2;
[0404] –否则:作为选项,不可恢复的数据错误被确定。
[0405] 根据实施例,基于具有扩展汉明码生成矩阵A、扩展汉明码奇偶校验矩阵H的扩展汉明码,其中H=[A I],I是单位矩阵,该方法包括读取具有n比特、k比特的有效载荷信息D和r比特的开销信息R=(r0…rr-1)的数据Y,以及确定数据Y的每个比特的状态。如果Y的全部n比特具有来自[“0”,“1”]的值,采用以下项:
[0406] –如果校正子S满足条件
[0407] S=H YT==0,
[0408] 则有效载荷信息D=(d0…dk-1)被假定是正确的;
[0409] –否则:如果校正子S≠0等于H的列i,则假定是单个已翻转比特并且该单个已翻转比特通过倒置Y的bit i被纠正;
[0410] –否则,作为选项,如果校正子S≠0不等于H的任何列,不可恢复的数据错误被确定;
[0411] –如果Y的n-1比特具有来自[“0”,“1”]的值,并且一个比特yf具有未定义状态“X”,如下应用:
[0412] –如果校正子S满足条件
[0413] S=H YT|yf=sv==0,sv=[“0”,“1”]
[0414] 则设yf’=0,
[0415] –否则:如果校正子S≠0等于H的列f,则设yf’=1-sv;
[0416] –否则:如果校正子S≠0等于H的列i,则设yf’=sv并且倒置Y的比特i;
[0417] –否则:如果校正子S≠0等于H的列f和列i的模2总和,则设yf’=1-sv并且倒置Y的比特i;
[0418] –否则:作为选项,不可恢复的数据错误被确定;
[0419] –如果Y的n-2比特具有来自[“0”,“1”]的值,并且两比特yf1和yf2具有未定义状态“X”,如下应用:
[0420] –如果校正子S满足条件
[0421] S=H YT|yf1=sv1,yf2=sv2==0,其中sv1和sv2=[“0”,“1”]
[0422] 则设置yf1’=sv1和yf2’=sv2;
[0423] –否则:如果校正子S≠0等于H的列f1,则设置yf1’=1-sv1和yf2’=sv2;
[0424] –否则:如果校正子S≠0等于H的列f2,则设置yf1’=sv1和yf2’=1-sv2;
[0425] –否则:如果校正子S≠0等于H的列f1和列f2的模2总和,则设置yf1’=1-sv1和yf2’=1-sv2;
[0426] –否则:作为选项,不可恢复的数据错误被确定;
[0427] –如果来自Y的n-3比特具有[“0”,“1”]中的值,并且三个比特yf1、yf2和yf3是“X”,则:
[0428] –如果校正子S满足条件
[0429] S=H YT|yf1=sv1;yf2=sv2;yf3=sv3==0,
[0430] sv1、sv2和sv3=[“0”,“1”],
[0431] 其中sva是来自svi其中的一个,i=1…3,
[0432] 即来自sv1、sv2和sv3其中的一个,
[0433] 其中svb是来自svi其中的一个,但不同于sva,
[0434] 其中sv≠a指具有i≠a的其他svi,
[0435] 其中sv≠a≠b指具有i≠a并且i≠b的其他svi,
[0436] 则设置yf1’=sv1和yf2’=sv2和yf3’=sv3;
[0437] –否则:如果校正子S≠0等于H的列fa(a=1,2,3)其中的一个,则设置yfa’=1-sva并且设另两个yf(≠a)’=sv(≠a);
[0438] –否则:如果校正子S≠0等于H的两个列fa和列fb的模2总和,则设置yfa’=1-sva和yfb’=1-svb并且设另一个yf(≠a≠b)’=sv(≠a≠b);
[0439] –否则:如果校正子S≠0等于H的全部三个列f1、列f2和列f3的模2总和,则设置yf1’=1-sv1和yf2’=1-sv2和yf3’=1-sv3;
[0440] –否则:作为选项,不可恢复的数据错误被确定。
[0441] 根据实施例,该数据的至少一部分对应于通过总线线路传输的信号。
[0442] 根据实施例,总线线路是总线系统的两个总线线路的一部分,该总线系统利用该两个总线线路作为差分总线线路。
[0443] 该总线系统可特别地利用数对总线线路对(pairs of bus lines)来支持差分总线读取模式,每个线路对承载具有相反的值的信号。如果线路对的信号不示为相反的值,这可对应于未定义状态“X”。
[0444] 根据实施例,未定义状态对应于示出相同的或者基本相同的逻辑信号值的总线线路对。
[0445] 一种装置被提供来用于数据处理,该装置包括配置为读取数据以及确定该数据的每个部分的状态的数据处理单元,该数据包括开销信息和有效载荷信息,其中该状态包括第一二进制状态、第二二进制状态和未定义状态中的至少一种。该处理单元进一步配置为对具有未定义状态的数据的至少一个部分基于其位置并且基于所述开销信息进行解码。
[0446] 根据实施例,数据的每个部分由比特表示,或者由易失性或者非易失性存储器的比特或单元来表示。
[0447] 根据实施例,数据的每个部分由易失性存储器的或者非易失性存储器的单元对来表示,其中数据的一部分的未定义状态由示出相同逻辑状态的成对的存储器单元确定。
[0448] 根据实施例,数据的每个部分由易失性存储器的或者非易失性存储器的至少两个单元来表示,其中数据的一部分的未定义状态由示出一种状态的存储器单元确定,该状态在无错误运行中未被使用过。
[0449] 根据实施例,存储器包括以下项中的至少一种:浮置栅极单元、PCRAM、RRAM、MRAM、MONOS器件、纳米晶体单元、RAM以及ROM。
[0450] 提供了一种用于数据处理的设备,特别是用于错误检测和错误纠正的设备。该设备包括用于读取数据的装置以及用于确定该数据的每个部分的状态的装置,该数据包括开销信息和有效载荷信息,其中该状态包括第一二进制状态、第二二进制状态和未定义状态中的至少一种。该设备进一步包括对具有未定义状态的数据的至少一个部分基于其位置并且基于所述开销信息进行解码的装置。
[0451] 虽然本公开的各种示例实施例已被揭露,但本领域的技术人员不脱离本公开的精神和范围,显然能够做出将能达到本公开的一些优点的各种变化和修改。对那些本领域相当熟练的技术人员,显然执行相同功能的其他部件可被适当地代替。应当提及的是,参考特定附图说明的特征可与其他附图的特征结合,甚至是在那些未被明确提及的情况下。此外,本公开的方法可使用适当的处理器指令全部在软件中实施,或者利用硬件逻辑和软件逻辑的结合在混合实施中达到相同结果。这种对本发明构思的修改旨在被所附权利要求覆盖
QQ群二维码
意见反馈