用于通过数据反演来提高数据存储的设备和方法转让专利

申请号 : CN201510042539.8

文献号 : CN104900271B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : M.格泽尔K.霍夫曼T.柯恩

申请人 : 英飞凌科技股份有限公司

摘要 :

本发明涉及用于通过数据反演来提高数据存储的设备和方法。一种设备包括处理单元和内存。处理单元被构造为对多个位进行编码以获得多个编码位,处理单元被构造为确定反演决定。当反演决定指示编码位的子集不应该被反演时,处理单元被构造为将第一码字的位存储在内存中作为存储字。当反演决定指示编码位的子集应该被反演时,处理单元被构造为反演编码位的子集的每个编码位以获得第二码字并且将第二码字存储在内存中。

权利要求 :

1.一种用于将数据存储在内存中的设备,包括:

处理单元;和

内存,

其中所述处理单元被构造为通过采用线性纠错码来对多个位进行编码以获得多个编码位,所述多个位包括数据位和指示位,其中所述多个编码位中的每一个具有位值,其中线性纠错码具有至少3的码距,并且其中所述多个编码位形成线性纠错码的第一码字,其中处理单元被构造为根据所述内存中位错误的内存错误或根据用于把数据存储到所述内存中的功耗来确定反演决定,其中所述反演决定根据编码位的子集指示编码位的子集是否应该被反演,其中所述子集包括所述多个编码位中的至少三个编码位,其中所述处理单元被构造为根据所述反演决定来确定所述指示位的所述位值,其中当反演决定指示编码位的子集不应该被反演时,处理单元被构造为将第一码字的位存储到内存中作为存储字,其中存储在内存中的第一码字的位包括具有第一预定义位值的所述指示位,并且其中当反演决定指示编码位的子集应该被反演时,处理单元被构造为通过单独经由改变编码位的子集的每个编码位的位值反演编码位的子集的每个编码位来修改线性纠错码的第一码字以获得线性纠错码的第二码字,并且被构造为将第二码字的位存储到内存中作为存储字,其中第二码字的位包括所述指示位,所述指示位被反演,以使得所述指示位具有不同于第一预定义位值的第二预定义位值。

2.如权利要求1所述的设备,其中所述设备是电路。

3.如权利要求1所述的设备,其中所述编码位的子集包括所述多个编码位中的所有编码位。

4.如权利要求1所述的设备,其中所述编码位的子集不包括所述多个编码位中的所有编码位。

5.如权利要求1所述的设备,

其中所述第一预定义位值是第一常数二进制位值bf,

其中第二预定义位值是第二常数二进制位值 ,并且

其中处理单元被构造为从内存读取存储字,并且其中处理单元被构造为在读出存储字之后当已从内存中的已存储所述指示位的位位置读出的位值等于第二常数二进制位值时反演已被直接地或反演地写到内存中的位的子集的位,并且被构造为当已从内存中的已存储所述指示位的位位置读出的位值等于第一常数二进制位值bf时不反演。

6.如权利要求1所述的设备,

其中所述第一预定义位值是第一常数二进制位值bf,

其中第二预定义位值是第二常数二进制位值 ,

并且其中处理单元被构造为从内存读出存储字,其中处理单元被构造为在存储字的一个或多个位错误的情况下通过使用线性纠错码来校正所述一个或多个位,其中如果至少已被存储在已写入所述指示位的位位置的位是错误的,则校正所述位,并且其中在读出存储字之后并且在校正所述一个或多个位之后,处理单元被构造为当已从内存中的已存储所述指示位的位位置读出的位值等于第二常数二进制位值 时反演已被直接地或反演地写到内存中的位的子集的位,并且被构造为当已从内存中的已存储所述指示位的位位置读出的位值等于第一常数二进制位值bf时不反演。

7.如权利要求6所述的设备,其中所述线性纠错码包括奇偶校验矩阵H,并且其中奇偶校验矩阵H的列或行的每个分量的一的数量是偶数。

8.如权利要求1所述的设备,其中所述内存是寄存器或寄存器阵列或可寻址内存。

9.如权利要求1所述的设备,其中所述内存是可寻址内存,并且其中处理单元被构造为通过采用线性纠错码并且通过使用地址位用于编码或解码来对所述多个位进行编码以获得所述多个编码位。

10.如权利要求1所述的设备,其中所述处理单元被构造为根据编码位的子集的零的数量或编码位的子集的一的数量确定反演决定。

11.如权利要求1所述的设备,其中,当在将写值写入到内存中之后、在随后从内存读出写值以获得读值之后并且在比较写入的写值和读取的写值之后未发生错误时,处理单元被构造为确定反演决定以使得反演决定指示编码位的子集不应该被反演。

12.如权利要求1所述的设备,其中,当在将写值写入到内存中之后、在随后从内存读出写值以获得读值之后并且在比较写入的写值和读取的写值之后至多发生T个错误并且其中T小于能够由线性纠错码校正的错误的数量时,处理单元被构造为确定反演决定以使得反演决定指示编码位的子集不应该被反演。

13.如权利要求1所述的设备,其中,当在将位的子集的反演写值写入到内存中之后、在随后从内存读出写入的反演写值以获得读值之后并且在比较写入的反演写值和读取的反演写值之后至多发生与在直接写入和读出的值和写入的未反演值的比较之后发生的错误一样多的错误时,处理单元被构造为确定反演决定以使得反演决定指示编码位的子集应该被反演。

14.如权利要求1所述的设备,其中,当在将位的子集的反演写值写入到内存中之后、在随后从内存读出写入的反演写值以获得读取的反演写值之后并且在比较写入的反演写值和读值之后至多发生T个错误并且其中T小于能够由线性纠错码校正的错误的数量时,处理单元被构造为确定反演决定以使得反演决定指示编码位的子集应该被反演。

15.如权利要求1所述的设备,其中所述内存是闪存,其中内存是磁性随机存取存储器或者其中内存是电阻随机存取存储器。

16.如权利要求1所述的设备,其中所述线性纠错码包括生成矩阵,并且

其中处理单元被构造为通过将具有其系统形式的生成矩阵用于编码来对所述多个位进行编码。

17.如权利要求1所述的设备,其中所述线性纠错码是汉明码或截短汉明码,或者其中线性纠错码是Hsiao码或截短Hsiao码,或者其中线性纠错码是BCH码或截短BCH码。

18.如权利要求1所述的设备,其中所述处理单元被构造为根据编码位的另一子集确定指示所述编码位的另一子集是否应该被反演的另一反演决定。

19.一种用于将位存储在内存中的设备,其中所述位被利用线性纠错码C编码,线性纠错码C具有至少3的码距,其中根据内存中位错误的内存错误或根据用于把数据存储到所述内存中的功耗确定利用线性纠错码C编码的位的子集是被直接写到内存中还是被以逐位反演方式写到内存中,并且其中线性纠错码C包括H矩阵,其中所述设备包括:处理单元;和

所述内存,

其中直接地或反演地写到内存中的位的子集包括至少一个二进制常数值,所述至少一个二进制常数值与用于编码的数据位一起形成线性纠错码C的码字,其中处理单元被构造为当位的各子集的位被直接地写到内存中时将该二进制常数值作为二进制值bf写到内存中,并且其中处理单元被构造为当位的各子集的位被反演地写到内存中时将该二进制常数值作为反演值 写到内存中,并且其中处理单元被构造为当直接地或反演地写到内存中的位的子集被反演时将线性纠错码C的码字转换成相同代码的码字,并且形成线性纠错码C的H矩阵,从而与直接地或反演地写到内存中的位的子集对应的H矩阵的列的每个分量的一的数量是偶数,其中处理单元被构造为当从内存读出时通过使用线性纠错码C来校正从内存读出的可能错误的位,其中当位的各子集已被直接地写到内存中时至少校正在已写入常数二进制值bf的位位置处的那个位,或者当位的各子集已被反演地写到内存中时至少校正在已写入常数二进制值 的位位置处的那个位,并且其中处理单元被构造为在读出之后当已在已存储常数值bf或反演常数值 的位位置处读出的校正值等于 时反演已被直接地或反演地写到内存中的位的子集的位,并且当校正值等于bf时不反演。

20.一种用于将数据存储在内存中的方法,包括:

使用编码器通过采用线性纠错码来对多个位进行编码以获得多个编码位,所述多个位包括数据位和指示位,其中所述多个编码位中的每一个具有位值,其中线性纠错码具有至少3的码距,并且其中所述多个编码位形成线性纠错码的第一码字,使用处理单元根据所述内存中位错误的内存错误或根据用于把数据存储到所述内存中的功耗确定反演决定,其中所述反演决定根据编码位的子集指示编码位的子集是否应该被反演,其中所述子集包括所述多个编码位中的至少三个编码位,其中根据所述反演决定来确定所述指示位的所述位值,当反演决定指示编码位的子集不应该被反演时,将第一码字的位存储到内存中作为存储字,其中存储在内存中的第一码字的位包括具有第一预定义位值的指示位,并且当反演决定指示编码位的子集应该被反演时,通过单独经由改变编码位的子集的每个编码位的位值反演编码位的子集的每个编码位来修改线性纠错码的第一码字以获得线性纠错码的第二码字,并且将第二码字的位存储到内存中作为存储字,其中第二码字的位包括所述指示位,所述指示位被反演,以使得指示位具有不同于第一预定义位值的第二预定义位值。

说明书 :

用于通过数据反演来提高数据存储的设备和方法

技术领域

[0001] 本公开涉及一种用于通过数据反演来提高数据存储的设备和方法。

背景技术

[0002] 如果将会提供改进的多位校正的概念,则这将会是非常有益的。
[0003] 增加内存的可靠性变得越来越重要,并且减少新出现类型内存中的功耗也变得越来越重要。
[0004] 许多类型的内存(例如,MRAM(磁阻随机存取存储器)、R-RAM(电阻随机存取存储器))针对永久错误和过错表现出不对称行为。例如,许多内存通常表现出比卡1内存错误多的卡0内存错误。其它内存通常表现出比卡0内存错误多的卡1内存错误。
[0005] 例如,针对用于写1或0的功耗,闪存是不对称的。换句话说,与当0被写到内存中时相比,当1被写到内存中时,功耗不同。在R-RAM中,错误是单向的,主要地,发生卡零错误,而非卡一错误。此外,关于MRAM,主要发生卡0错误,而非卡1错误。
[0006] 如果将会提供改进的数据存储的概念,则这将会是非常有益的。

发明内容

[0007] 提供一种包括处理单元和内存的设备。处理单元被构造为通过采用线性纠错码来对多个位进行编码以获得多个编码位,其中所述多个编码位中的每一个具有位值,其中线性纠错码具有至少3的码距,并且其中所述多个编码位形成线性纠错码的第一码字。另外,处理单元被构造为根据编码位的子集确定指示编码位的子集是否应该被反演的反演决定,其中所述子集包括所述多个编码位中的至少三个编码位。当反演决定指示编码位的子集不应该被反演时,处理单元被构造为将第一码字的位存储在内存中作为存储字,其中存储在内存中的第一码字的位包括具有第一预定义位值的指示位。并且当反演决定指示编码位的子集应该被反演时,处理单元被构造为通过经由改变编码位的子集的每个编码位的位值反演编码位的子集的每个编码位来修改线性纠错码的第一码字以获得线性纠错码的第二码字,并且被构造为将第二码字的位存储在内存中作为存储字,其中第二码字的位包括指示位,指示位被反演,以使得指示位具有不同于第一预定义位值的第二预定义位值。
[0008] 提供一种方法。所述方法包括:使用编码器通过采用线性纠错码来对多个位进行编码以获得多个编码位,其中所述多个编码位中的每一个具有位值,其中线性纠错码具有至少3的码距,并且其中所述多个编码位形成线性纠错码的第一码字,使用处理单元根据编码位的子集确定指示编码位的子集是否应该被反演的反演决定,其中所述子集包括所述多个编码位中的至少三个编码位,当反演决定指示编码位的子集不应该被反演时,将第一码字的位存储在内存中作为存储字,其中存储在内存中的第一码字的位包括具有第一预定义位值的指示位,并且当反演决定指示编码位的子集应该被反演时,通过经由改变编码位的子集的每个编码位的位值反演编码位的子集的每个编码位来修改线性纠错码的第一码字以获得线性纠错码的第二码字,并且将第二码字的位存储在内存中作为存储字,其中第二码字的位包括指示位,指示位被反演,以使得指示位具有不同于第一预定义位值的第二预定义位值。
[0009] 提供一种包括处理单元和内存的设备。处理单元被构造为对多个位进行编码以获得多个编码位,并且处理单元还被构造为确定反演决定。当反演决定指示编码位的子集不应该被反演时,处理单元被构造为将第一码字的位存储在内存中作为存储字。当反演决定指示编码位的子集应该被反演时,处理单元被构造为反演编码位的子集的每个编码位以获得第二码字并且将第二码字存储在内存中。
[0010] 提供一种设备。所述设备包括处理单元和内存。处理单元被构造为通过采用线性纠错码来对多个位进行编码以获得多个编码位,其中所述多个编码位中的每一个具有位值,其中纠错码具有至少3的码距,并且其中所述多个编码位形成线性纠错码的第一码字。此外,处理单元被构造为根据编码位的子集确定指示编码位的子集是否应该被反演的反演决定,其中确定编码位的子集,从而如果子集的所有位被反演,则纠错码的第一码字被变换成纠错码的第二码字,并且其中所述子集包括所述多个编码位中的所有编码位或者包括所述多个编码位中的至少三个编码位,并且其中编码位的子集的编码位是指示位,其中指示位的位值等于第一预定义位值。当反演决定指示编码位的子集不应该被反演时,处理单元被构造为将第一码字的位存储在内存中作为存储字,其中存储在内存中的第一码字的位包括具有第一预定义位值的指示位。当反演决定指示编码位的子集应该被反演时,处理单元被构造为通过经由改变编码位的子集的每个编码位的位值反演编码位的子集的每个编码位来修改线性纠错码的第一码字以获得线性纠错码的第二码字,并且被构造为将第二码字存储在内存中作为存储字,其中第二码字包括指示位,指示位被反演,以使得指示位的位值等于不同于第一预定义位值的第二预定义位值。
[0011] 此外,提供另一实施例。所述设备包括处理单元和内存。在这种另一实施例中,处理单元被构造为由具有常数值的l位bf1,…,bfl补充将要被存储在可寻址内存中的地址a的净荷数据位x1,…,xn,其中l≥1。
[0012] 处理单元被构造为利用校正至少1位错误的线性码C将具有常数值的位bf1,…,bfl和净荷数据位x1,…,xn编码为码字c1,…,cm,bf1,…,bfl,x1,…,xn,其中c1,…,cm是当从地址位获得的位未被用于形成码字时从bf1,…,bfl,x1,…,xn确定的校验位,并且利用校正至少1位错误的线性码C将位bf1,…,bfl,,x1,…,xn,A1,…,Ak编码为码字c1,…,cm,bf1,…,bfl,,x1,…,xn,A1,…,Ak,其中c1,…,cm是当从地址位a1,…,ar获得的位A1,…,Ak被用于编码时从bf1,…,bfl,,x1,…,xn,A1,…,Ak确定的校验位,并且A1,…,Ak = f(a1,…,ar)由函数f : 0,1r → {0,1}k从地址位确定。
[0013] 此外,处理单元被构造为定义将要被直接地或反演地存储的位c1,…,cm,bf1,…,bfl,x1,…,xn的位的K个组Y1,…,Yk,以使得定义的位bf1,…,bfl的子集被唯一地分配给这些组中的每一组,其中K≥1。
[0014] 另外,处理单元被构造为选择组Y1,…,Yk的位的哪个组被以反演或非反演方式存储在内存中。
[0015] 处理单元被构造为在地址a将位c1,…,cm,bf1,…,bfl,x1,…,xn写到内存中,其中属于反演地写到内存中的位的组的位在写入之前被反演,并且不属于其位被反演的组的位被以非反演方式写到内存中,
[0016] 此外,处理单元被构造为读出在地址a存储在内存中的位。
[0017] 如果从地址位获得的位未被用于形成码字,则处理单元被构造为基于纠错码C校正至少在已直接地或反演地存储常数值bf1,…,bfl的位位置从内存读出的位,所述从内存读出的位可能由于错误而不同于写到相同地址的值。
[0018] 如果从地址位获得的位被用于形成码字,则处理单元被构造为基于纠错码C校正至少在已直接地或反演地存储常数值bf1,…,bfl的位位置通过使用从可能错误的地址位获得的也可能错误的位 ,…, 从内存读出的可能错误的值。
[0019] 处理单元被构造为从通过使用唯一地分配给各位组的代码C校正的读出的常数值确定位组是已被直接地写到内存中还是已被反演地写到内存中以及哪个位组已被直接地或反演地写到内存中。
[0020] 处理单元被构造为反演已在前一步骤中被确定为其位已在写入期间被反演的位组的位组的读出并且校正的位。
[0021] 在实施例中,k = r和(A1,…,Ak) = (a1,…,ar)适用。
[0022] 根据实施例,k = 1,A1 = f(a1,…,ar) = a1 + a2 + … + ar适用并且A1是地址位a1,…,ar的奇偶性。
[0023] 此外,提供这样的另一实施例:直接地或反演地将形成校正至少1位错误的线性码C的码字的位的子集直接地或反演地写到内存基元的内存中,以及从直接地或反演地存储的从内存可能错误地读出的位读取和恢复写到内存中的位。所述设备包括处理单元和内存。
[0024] 在这种另一实施例中,处理单元被构造为定义能够被直接地或反演地写到内存中的利用校正至少1位错误的线性码C编码的位的子集的数量K,其中K≥1。
[0025] 处理单元被构造为提供将要在地址a = a1,…,ar被存储为校正至少1位错误的线性系统码的码字的子字的n个净荷数据位x1,…,xn,r≥2,
[0026] 处理单元被构造为形成代码C的信息位u1,…,uN,其中如果地址a未被用于形成代码C的码字,则由l个定义的二进制值bf1,…,bfl补充数据位x1,…,xn,以使得
[0027] u1,…,uN = bf1,…,bfl,x1,…,xn
[0028] N= l + n适用,并且如果地址a被用于形成代码C的码字,则由l个定义的二进制值bf1,…,bfl补充数据位x1,…,xn和从地址位a1,…,ar获得的位A1,…,Ak,以使得[0029] u1,…,uN = bf1,…,bfl,x1,…,xn,A1,…,Ak
[0030] N = l + n + k适用,其中
[0031] A1,…,Ak = f(a1,…,ar)
[0032] 是由函数f从r个地址位a1,…,ar的值唯一地确定的二进制值,l≥1和1≤k≤r,[0033] 其中如果地址位未被用于错误检测或错误校正,则处理单元被构造为形成代码C的码字y,…,yP,其中C是具有系统形式的生成矩阵G和H矩阵H的线性系统码,其中[0034] y = y1,…,yP = (u1,…,uN) G· = c1,…,cm, bf1,…,bfl,x1,…,xn
[0035] 适用并且c1,…,cm m是校验位,生成矩阵G是(N,P)矩阵并且H矩阵H = (h1,…,hP)是([P - N],P)矩阵,以使得H矩阵的所有列两两不同并且不等于0,并且m = P – N和N = n + l适用,
[0036] 其中处理单元被构造为确定位y1,…,yP = c1,…,cm,bf1,…,bfl,x1,…,xn的K个子集Y1={y1,1,…,y1,q1},…,YK = {yK,1,…,yK,qK},
[0037] 以使得位bf1,…,bfl的子集被唯一地分配给每个子集Y1,…,Yk,
[0038] 以使得如果 是位 的二进制值,则 是代码C的码字,当k = 1,…,K并且j = 1,…,P时,如果yj是子集Yk的元素,则  = 1,并且如果yj不是子集Yk的元素,则  = 0,以使得
[0039] 适用并且H是代码C的H矩阵,
[0040] 其中处理单元被构造为定义位的组Y1,…,Yk中的哪一组被直接地或反演地写到内存中,
[0041] 其中处理单元被构造为形成将要被写到内存中的P位d1,…,dP,其中对于1,…P,当yi属于其位被反演地写到内存中的组时,di=  ,并且当yi不属于其位被反演地写到内存中的任何组时,di = yi,
[0042] 其中处理单元被构造为在地址a将位d1,…,dP写到内存中,
[0043] 其中处理单元被构造为创建地址a并且读出源自写在地址a的值d1,…,dP的存储在地址a的由于可能的错误导致的可能错误的值 ,…, ,
[0044] 其中处理单元被构造为定义将要在错误值的情况下通过使用代码C校正的将要由代码C校正的L个位位置k1,…,kL,l≤P并且{k1,…,kL} {1,…,P},其中已直接地或反演地存储bf1,…,bfl的位位置属于将要被校正的位位置,
[0045] 其中处理单元被构造为确定基于代码C校正可由代码C校正的错误的定义的L个位位置k1,…,kL的二进制校正值 ,
[0046] 其中处理单元被构造为至少在已直接地或反演地存储值bf1,…,bfl的位位置形成校正位 ,其中op是唯一可逆布尔运算,
[0047] 其中处理单元被构造为基于已知的插入值bf1,…,bfl和通过使用代码C校正的各读出值确定位的哪个组Y1,…,Yk已被直接地或反演地存储,
[0048] 其中处理单元被构造为在 属于其位已被直接地写到内存中的位的组的情况下输出位 ,并且在 属于已在写到内存期间被反演地写到内存中的位的组的情况下输出位 ,其中“op”是二进制唯一可逆布尔运算,
[0049] 其中如果地址位被用于错误检测和错误校正,则处理单元被构造为形成代码C的码字y = y1,…,yP,其中C是具有系统形式的生成矩阵G和H矩阵H的线性系统码,其中[0050] y = y1,…,yP = (u1,…,uN) · G =
[0051] = c1,…,cm,bf1,…,bfl,x1,…,xn,A1,…,Ak
[0052] 适用,生成矩阵G是(N,P)矩阵并且H矩阵H = (h1,…,hP)是([P - N],P)矩阵,以使得H矩阵的所有列两两不同并且不等于0,并且P = n + l + m + k,并且c1,…,cm是校验位,(N通过P代替)
[0053] 其中处理单元被构造为确定位y1,…,yn+l,yn+l+k+1,…,yP = c1,…,cm,bf1,…,bfl,x1,…,xn的K个子集Y1 = {y1,1,…,y1,q1},…,YK = {yK,1,…,yK,qK},
[0054] 以使得位bf1,…,bfl的每个位仅属于子集Y1,…,Yk之一,并且以使得如果是位y1,…,yP的二进制值,则 是代码C的码字,对于k = 1,…,K并且对于j = 1,…,P,适用:
[0055] 如果yj是子集Yk的元素,则  = 1,并且如果yj不是子集Yk的元素,则  = 0,以使得
[0056] 适用并且H是代码C的H矩阵,
[0057] 其中处理单元被构造为定义位的哪一组Y1,…,Yk被直接地或反演地写到内存中,[0058] 其中处理单元被构造为形成将要被写到内存中的P – k位d1,…,dm+l+n,其中i = 1,…,m + n + l,
[0059] 当yi属于其位被直接地写到内存中的组时,di = yi,并且
[0060] 当yi属于其位被反演地写到内存中的组时,di =  ,
[0061] 其中处理单元被构造为在地址a将位d1,…,dm+n+l写到内存中,
[0062] 其中处理单元被构造为创建地址a并且读出源自写在地址a的值d1,…,dn+l,dn+k+1,…,dP的存储在地址a的由于可能的错误导致的可能错误的值 ,…, ,
[0063] 其中处理单元被构造为定义在错误值的情况下通过使用代码C校正的将要由代码C校正的L个位位置k1,…,kL,L≤P - k并且{k1,…,kL} {1,…,n + l,n + l + k + 1,P},其中已直接地或反演地存储bf1,…,bfl的位位置属于将要被校正的位位置,
[0064] 其中处理单元被构造为确定针对可由代码C校正的错误的定义的L个位位置k1,…,kL的二进制校正值 ,
[0065] 其中处理单元被构造为至少在已直接地或反演地存储值bf1,…,bfl的位位置形成校正位 ,其中“op”是二进制清楚地可逆的运算,
[0066] 其中处理单元被构造为基于已知的插入值bf1,…,bfl和读出并且通过使用代码C校正的对应正确值确定位的哪个组Y1,…,Yk的位已被直接地或反演地存储,
[0067] 其中处理单元被构造为在 属于其位已被直接地写到内存中的位的组的情况下输出位 ,并且
[0068] 在 属于已在写到内存期间被反演地写到内存中的位的组的情况下输出位,其中“op”是二进制唯一可逆布尔运算。
[0069] 根据另一实施例,提供一种用于将位存储在内存中的设备,其中所述位被利用线性纠错码C编码,线性纠错码C具有至少3的码距,其中确定利用线性纠错码C编码的位的子集是被直接写到内存中还是被以逐位反演方式写到内存中,并且其中代码C包括H矩阵H,其中所述设备包括处理单元和内存。直接地或反演地写到内存中的位的子集包括至少一个二进制常数值,所述至少一个二进制常数值与用于编码的净荷数据位一起形成线性码C的码字。处理单元被构造为当位的各子集的位被直接地写到内存中时将该二进制常数值作为二进制值bf写到内存中。处理单元被构造为当位的各子集的位被反演地写到内存中时将该二进制常数值作为反演值 写到内存中。
[0070] 处理单元被构造为当直接地或反演地写到内存中的位的子集被反演时将代码C的码字转换成相同代码的码字,并且形成代码的H矩阵,从而与直接地或反演地写到内存中的位的子集对应的H矩阵的列的每个分量的一的数量是偶数。
[0071] 此外,处理单元被构造为当从内存读出时通过使用线性纠错码C来校正从内存读出的可能错误的位,其中当位的各子集已被直接地写到内存中时至少校正在已写入常数二进制值bf的位位置的位,或者当位的各子集已被反演地写到内存中时至少校正在已写入常数二进制值 的位位置的位。
[0072] 另外,处理单元被构造为在读出之后当已在已存储常数值bf或反演常数值 的位位置读出的校正值等于 时反演已被直接地或反演地写到内存中的位的子集的位,并且当这个值等于bf时不反演。
[0073] 根据另一实施例,提供一种方法。所述方法包括:
[0074] 通过采用线性纠错码来对多个位进行编码以获得多个编码位,其中所述多个编码位中的每一个具有位值,其中纠错码具有至少3的码距,并且其中所述多个编码位形成线性纠错码的第一码字。
[0075] 根据编码位的子集确定指示编码位的子集是否应该被反演的反演决定,其中确定编码位的子集,从而如果子集的所有位被反演,则纠错码的第一码字被变换成纠错码的第二码字,并且其中所述子集包括所述多个编码位中的所有编码位或者包括所述多个编码位中的至少三个编码位,并且其中编码位的子集的编码位是指示位,其中指示位的位值等于第一预定义位值,
[0076] 当反演决定指示编码位的子集不应该被反演时,将第一码字的位存储在内存中作为存储字,其中存储在内存中的第一码字的位包括具有第一预定义位值的指示位。
[0077] 当反演决定指示编码位的子集应该被反演时,通过经由改变编码位的子集的每个编码位的位值反演编码位的子集的每个编码位来修改线性纠错码的第一码字以获得线性纠错码的第二码字,并且将第二码字存储在内存中作为存储字,其中第二码字包括指示位,指示位被反演,以使得指示位的位值等于不同于第一预定义位值的第二预定义位值。
[0078] 实施例基于发现:数据反演可被用于数据存储。根据实施例,数据反演允许掩蔽永久错误。当内存相对较新时,当误码率相对较高时,这尤其有用。
[0079] 如果卡0错误发生在数据位置,如果将要被存储在这个位置的位是0,则不发生错误。但如果将要被存储的位是1,则发生错误。如果将要被存储的位是1,则对于反演数据,将要被存储在这个位置的位是0,并且如果该位被反演地存储,则不发生错误。
[0080] 根据实施例,如果存在几个卡住错误,则分别反演或不反演数据字中的数据的不同组是非常有用的。通过如此操作,存储数据能够通过反演数据的组而适应于发生的错误。
[0081] 此外,例如,如果存储1需要比存储零多的能量,则数据反演允许减少功耗,反之亦然。
[0082] 例如,如果擦除状态由1表示,则对于写0,可能需要比写1多得多的能量。或者,例如,如果数据字中的0的数量大于1的数量,则在存储之前反演数据是有用的。
[0083] 根据实施例,如果数据被以成组方式反演,则能够实现更好的适应。
[0084] 根据实施例,数据反演被用于减小误码率。如果错误单向地发生,例如,将要被存储的1例如通过卡0错误而被改变为0,则等于0的位将不会被改变为错误状态。
[0085] 如果数据字中的1的数量大于0的数量,则当存在比卡1错误多的卡0错误时,在存储之前反演数据是有用的。然后,在反演之后,0的数量大于1的数量,并且可能的错误的数量减少。
[0086] 如果数据被以成组方式反演,则能够实现更好的适应。
[0087] 根据实施例,“固定位”被添加到数据位。数据位和固定位被共同地用作纠错线性码C的信息位,并且从信息位(即,数据位和固定位)确定校验位。
[0088] 根据实施例,选择代码C,从而如果字w是码字,则反演码字 也是码字。在实施例中,码字被直接地或反演地存储。
[0089] 根据实施例,如果发生错误位,则也使用纠错码C校正固定位。在校正之后,校正的固定位指示存储在内存中的数据是否将要被反演。根据实施例,固定位由相同的线性码C校正,数据位和校验位也由相同的线性码C校正。
[0090] 在实施例中,码字的位的组或子集被反演。指示组被反演或不被反演的固定位被分派给每个子组。所有这些固定位是用于确定校验位的信息位的一部分。
[0091] 根据实施例,选择子组,从而子组的位的反演将代码C的码字变换成C的码字。
[0092] 在一些实施例中,地址位是码字的一部分,但不被存储,并且地址位不被反演。
[0093] 根据实施例,固定位(反演标记位)是由线性码执行的错误校正的一部分。
[0094] 在一些实施例中,位的子组被反演。
[0095] 根据实施例,选择代码,从而子组的位的反演将码字变换成码字。
[0096] 在一些实施例中,地址被包括在校验位的确定中,但不被反演。
[0097] 在使用附图详细地描述实施例之前,应该指出,相同或在功能上等同的元件在附图中被给予相同的标号,并且省略对具有相同标号的元件的重复描述。因此,为具有相同标号的元件提供的描述是可相互交换的。

附图说明

[0098] 图1表示根据实施例的设备,
[0099] 图2表示根据另一实施例的设备,
[0100] 图3表示根据另一实施例的设备,
[0101] 图4表示根据另一实施例的设备,
[0102] 图5表示根据另一实施例的设备,和
[0103] 图6表示根据另一实施例的设备。

具体实施方式

[0104] 提供一种包括处理单元和内存的设备。处理单元被构造为对多个位进行编码以获得多个编码位,处理单元被构造为确定反演决定。当反演决定指示编码位的子集不应该被反演时,处理单元被构造为将第一码字的位存储在内存中作为存储字。当反演决定指示编码位的子集应该被反演时,处理单元被构造为反演第一码字的编码位的子集的每个编码位以获得第二码字并且将第二码字存储在内存中。
[0105] 图1表示根据实施例的设备。所述设备包括处理单元120和内存110。处理单元120被构造为通过采用线性纠错码来对多个位进行编码以获得多个编码位,其中所述多个编码位中的每一个具有位值,其中纠错码具有至少3的码距,并且其中所述多个编码位形成线性纠错码的第一码字。此外,处理单元120被构造为根据编码位的子集确定指示编码位的子集是否应该被反演的反演决定,其中确定编码位的子集,从而如果子集的所有位被反演,则纠错码的第一码字被变换成纠错码的第二码字,并且其中所述子集包括所述多个编码位中的所有编码位或者包括所述多个编码位中的至少三个编码位,并且其中编码位的子集的编码位是指示位,其中指示位的位值等于第一预定义位值。当反演决定指示编码位的子集不应该被反演时,处理单元120被构造为将第一码字的位存储在内存110中作为存储字,其中存储在内存110中的第一码字的位包括具有第一预定义位值的指示位。当反演决定指示编码位的子集应该被反演时,处理单元120被构造为通过经由改变编码位的子集的每个编码位的位值反演编码位的子集的每个编码位来修改线性纠错码的第一码字以获得线性纠错码的第二码字,并且被构造为将第二码字存储在内存110中作为存储字,其中第二码字包括指示位,指示位被反演,以使得指示位的位值等于不同于第一预定义位值的第二预定义位值。
[0106] 如上所述,所述多个编码位形成线性纠错码的第一码字。这意味着:所述多个所有编码位的编码位形成纠错码的第一码字。
[0107] 在实施例中,所述处理单元可例如被构造为产生决定信号作为反演决定,其中决定信号可例如指示编码位的子集是否应该被反演。
[0108] 根据实施例,所述设备可以是电路。
[0109] 在实施例中,所述编码位的子集包括所述多个编码位中的所有编码位。
[0110] 根据实施例,所述编码位的子集不包括所述多个编码位中的所有编码位。
[0111] 在实施例中,纠错码是线性纠错码C,其中第一预定义值是第一常数二进制值bf,其中第二预定义值是第二常数二进制值 ,其中处理单元120 被构造为从内存110读取存储字,并且其中处理单元120被构造为在读出存储字之后当已从内存 110中的已存储指示位的位位置读出的位值等于第二常数二进制值 时反演已被直接地或反演地写到内存110中的位的子集的位,并且被构造为当已从内存110中的已存储指示位的位位置读出的位值等于第一常数二进制值bf时不反演。
[0112] 根据实施例,纠错码是线性纠错码C,其中第一预定义值是第一常数二进制值bf,其中第二预定义值是第二常数二进制值 ,并且并且其中处理单元120被构造为从内存110读出存储字,其中处理单元120被构造为在存储字的一个或多个位错误的情况下通过使用线性纠错码C来校正所述一个或多个位,其中如果至少已被存储在已写入指示位的位位置的位是错误的,则校正所述位,并且其中在读出存储字之后并且在校正所述一个或多个位之后,处理单元120被构造为当已从内存110中的已存储指示位的位位置读出的位值等于第二常数二进制值 时反演已被直接地或反演地写到内存110中的位的子集的位,并且被构造为当已从内存110中的已存储指示位的位位置读出的位值等于第一常数二进制值bf时不反演。
[0113] 在实施例中,所述线性纠错码C包括奇偶校验矩阵H,并且其中奇偶校验矩阵H的列的每个分量的一的数量是偶数。
[0114] 根据实施例,所述内存110是寄存器或寄存器阵列或可寻址内存110。
[0115] 在实施例中,所述内存是可寻址内存,并且处理单元120被构造为通过采用线性纠错码并且通过使用地址位来对所述多个位进行编码以获得所述多个编码位。
[0116] 根据实施例,所述处理单元120被构造为根据编码位的子集的零的数量或编码位的子集的一的数量确定反演决定。
[0117] 在实施例中,当在将写值写到内存中之后、在随后从内存读出写值以获得读值之后并且在比较写值和读值之后未发生错误时,处理单元被构造为确定反演决定以使得反演决定指示编码位的子集不应该被反演。
[0118] 在实施例中,当在将写值写到内存中之后、在随后从内存读出写值以获得读值之后并且在比较写值和读值之后至多发生T个错误并且其中T小于能够由线性纠错码校正的错误的数量时,处理单元被构造为确定反演决定以使得反演决定指示编码位的子集不应该被反演。
[0119] 在实施例中,当在将位的子集的反演写值写到内存110中之后、在随后从内存110读出写入的反演写值以获得读值之后并且在比较写入的反演写值和读值之后至多发生与在直接写入和读出的值和写入的值的比较之后发生的错误一样多的错误时,处理单元120被构造为确定反演决定以使得反演决定指示编码位的子集应该被反演。
[0120] 根据实施例,当在将位的子集的反演写值写到内存110中之后、在随后从内存110读出写入的反演写值以获得读值之后并且在比较写入的反演写值和读值之后至多发生T个错误并且其中T小于能够由代码C校正的错误的数量时,处理单元120被构造为确定反演决定以使得反演决定指示编码位的子集应该被反演。
[0121] 在实施例中,所述内存110是闪存110。
[0122] 根据另一实施例,所述内存110是M-RAM或者其中内存110是R-RAM。
[0123] 在实施例中,所述纠错码包括生成矩阵,并且其中处理单元120被构造为通过将具有其系统形式的生成矩阵用于编码来对所述多个位进行编码。
[0124] 根据另一实施例,所述代码C是汉明(Hamming)码或截短汉明码。
[0125] 在实施例中,所述纠错码是Hsiao码或截短Hsiao码。
[0126] 根据另一实施例,所述代码C是BCH码或截短BCH码。
[0127] 此外,提供另一实施例。在这种另一实施例中,处理单元120被构造为由具有常数值的l位bf1,…,bfl补充将要被存储在可寻址内存110中的地址a的净荷数据位x1,…,xn,其中l≥1。
[0128] 处理单元120被构造为利用校正至少1位错误的线性码C将具有常数值的位bf1,…,bfl和净荷数据位x1,…,xn编码为码字c1,…,cm,bf1,…,bfl,x1,…,xn,其中c1,…,cm是当从地址位获得的位未被包括用于形成码字时从bf1,…,bfl,x1,…,xn确定的校验位,并且利用校正至少1位错误的线性码C将位bf1,…,bfl,,x1,…,xn,A1,…,Ak编码为码字c1,…,cm,bf1,…,bfl,,x1,…,xn,A1,…,Ak,其中c1,…,cm是当从地址位a1,…,ar获得的位A1,…,Ak被用于编码时从bf1,…,bfl,,x1,…,xn,A1,…,Ak确定的校验位,并且A1,…,Ak = f(a1,…,ar)由函数f : {0,r k1} → {0,1}从地址位唯一地确定。
[0129] 此外,处理单元120被构造为定义将要被直接地或反演地存储的位c1,…,cm,bf1,…,bfl,x1,…,xn的位的K个组Y1,…,Yk,以使得定义的位bf1,…,bfl的子集被唯一地分派给这些组中的每一组,其中K≥1。
[0130] 处理单元120被构造为确定位的组Y1,…,Yk,从而如果组Yj,j = 1,…,K的所有位被反演,则线性码C的第一码字被变换成线性码C的第二码字,并且其中处理单元被构造为选择组Y1,…,Yk的位的哪个组被以反演或非反演方式存储在内存中。
[0131] 处理单元120被构造为在地址a将位c1,…,cm,bf1,…,bfl,x1,…,xn写到内存中,其中属于反演地写到内存110中的位的组的位在写入之前被反演,并且不属于其位被反演的组的位被以非反演方式写到内存110中。
[0132] 此外,处理单元120被构造为读出在地址a存储在内存110中的位。
[0133] 如果从地址位获得的位未被用于形成码字,则处理单元120被构造为基于纠错码C校正至少在已直接地或反演地存储常数值bf1,…,bfl的位位置从内存110读出的位,所述从内存110读出的位可能由于错误而不同于写到相同地址的值。
[0134] 如果从地址位获得的位被用于形成码字,则处理单元120被构造为基于纠错码C校正至少在已直接地或反演地存储常数值bf1,…,bfl的位位置通过使用从可能错误的地址位获得的也可能错误的位 ,…,  从内存110读出的可能错误的值。
[0135] 处理单元120被构造为从通过使用唯一地分派给各位组的代码C校正的读出的常数值确定位组是已被直接地写到内存中还是已被反演地写到内存中以及哪个位组已被直接地或反演地写到内存中。
[0136] 处理单元120被构造为反演已在前一步骤中被确定为其位已在写入期间被反演的位组的位组的读出并且校正的位。
[0137] 在实施例中,k = r和(A1,…,Ak) = (a1,…,ar)适用。
[0138] 根据实施例,k = 1,A1 = f(a1,…,ar) = a1 + a2 + … + ar适用并且A1是地址位a1,…,ar的奇偶性。
[0139] 此外,提供这样的另一实施例:直接地或反演地将形成校正至少1位错误的线性码C的码字的位的子集直接地或反演地写到内存基元的内存110中,以及从直接地或反演地存储的从内存110可能错误地读出的位读取和恢复写到内存110中的位。在这种另一实施例中,处理单元120被构造为定义能够被直接地或反演地写到内存110中的利用校正至少1位错误的线性码C编码的位的子集的数量K,其中K≥1。
[0140] 处理单元120被构造为提供将要在地址a = a1,…,ar被存储为校正至少1位错误的线性系统码的码字的子字的n个净荷数据位x1,…,xn,r≥2,
[0141] 处理单元120被构造为形成代码C的信息位u1,…,uN,其中如果地址a未被用于形成代码C的码字,则由l个定义的二进制值bf1,…,bfl补充数据位x1,…,xn,以使得[0142] u1,…,uN = bf1,…,bfl,x1,…,xn
[0143] N= l + n适用,并且如果地址a被用于形成代码C的码字,则由l个定义的二进制值bf1,…,bfl补充数据位x1,…,xn和从地址位a1,…,ar获得的位A1,…,Ak,以使得[0144] u1,…,uN = bf1,…,bfl,x1,…,xn,A1,…,Ak
[0145] N = l + n + k适用,其中
[0146] A1,…,Ak = f(a1,…,ar)
[0147] 是由函数f从r个地址位a1,…,ar的值唯一地确定的二进制值,l≥1和1≤k≥r,[0148] 其中,如果地址位未被用于错误检测或错误校正。则处理单元120被构造为形成代码C的码字y,…,yP,其中C是具有系统形式的生成矩阵G和H矩阵H的线性系统码,其中[0149] y = y1,…,yP = (u1,…,uN) G· = c1,…,cm, bf1,…,bfl,x1,…,xn
[0150] 适用并且c1,…,cm m是校验位,生成矩阵G是(N,P)矩阵并且H矩阵H = (h1,…,hP)是([P - N],P)矩阵,以使得H矩阵的所有列两两不同并且不等于0,并且m = P – N和N = n + l和P = n + m + l适用,
[0151] 其中处理单元120被构造为确定位y1,…,yN = c1,…,cm,bf1,…,bfl,x1,…,xn的K个子集Y1 = {y1,1,…,y1,q1},…,YK = {yK,1,…,yK,qK},
[0152] 以使得位bf1,…,bfl的子集被清楚地分配给每个子集Y1,…,Yk,
[0153] 以使得如果 是位y1,…,yP的二进制值,则 是代码C的码字,当k = 1,…,K并且j = 1,…,P时,如果yj是子集Yk的元素,则  = 1,并且如果yj不是子集Yk的元素,则  = 0,以使得
[0154]
[0155] 适用并且H是代码C的H矩阵,
[0156] 其中处理单元120被构造为定义位的组Y1,…,Yk中的哪一组被直接地或反演地写到内存110中,
[0157] 其中处理单元120被构造为形成将要被写到内存110中的P位d1,…,dP,其中对于1,…P,当yi属于其位被反演地写到内存110中的组时,di =  ,并且当yi不属于其位被反演地写到内存110中的任何组时,di = yi,
[0158] 其中处理单元120被构造为在地址a将位d1,…,dP写到内存110中,
[0159] 其中处理单元120被构造为创建地址a并且读出源自写在地址a的值d1,…,dP的存储在地址a的由于可能的错误导致的可能错误的值 ,…, ,
[0160] 其中处理单元120被构造为定义将要在错误值的情况下通过使用代码C校正的将要由代码C校正的L个位位置k1,…,kL,l≤P并且{k1,…,kL} {1,…,P},其中已直接地或反演地存储bf1,…,bfl的位位置属于将要被校正的位位置,
[0161] 其中处理单元120被构造为确定基于代码C校正可由代码C校正的错误的定义的L个位位置k1,…,kL的二进制校正值 ,
[0162] 其中处理单元120被构造为至少在已直接地或反演地存储值bf1,…,bfl的位位置形成校正位 ,其中op是唯一可逆布尔运算,
[0163] 其中处理单元120被构造为基于已知的插入值bf1,…,bfl和通过使用代码C校正的各读出值确定位的哪个组Y1,…,Yk已被直接地或反演地存储,
[0164] 其中处理单元120被构造为在 属于其位已被直接地写到内存110中的位的组的情况下输出位 ,并且在 属于已在写到内存110期间被反演地写到内存110中的位的组的情况下输出位 ,其中“op”是二进制唯一可逆布尔运算,
[0165] 其中如果地址位被用于错误检测和错误校正,则处理单元120被构造为形成代码C的码字y = y1,…,yP,其中C是具有系统形式的生成矩阵G和H矩阵H的线性系统码,其中[0166] y = y1,…,yP = (u1,…,uN) · G = = c1,…,cm,bf1,…,bfl,x1,…,xn,A1,…,Ak[0167] 适用,生成矩阵G是(N,P)矩阵并且H矩阵H = (h1,…,hP)是([P - N],P)矩阵,以使得H矩阵的所有列两两不同并且不等于0,并且P = n + l + m + k,N = n + l + k成立,并且c1,…,cm 是校验位,
[0168] 其中处理单元120被构造为确定位y1,…,yn+l,yn+l+k+1,…,yP = c1,…,cm,bf1,…,bfl,x1,…,xn的K个子集Y1 = {y1,1,…,y1,q1},…,YK = {yK,1,…,yK,qK},
[0169] 以使得位bf1,…,bfl的每个位仅属于子集Y1,…,Yk之一,并且以使得如果是位y1,…,yP的二进制值,则 是代码C的码字,对于k = 1,…,K并且对于j = 1,…,P,适用:
[0170] 如果yj是子集Yk的元素,则  = 1,并且如果yj不是子集Yk的元素,则  = 0,以使得
[0171]
[0172] 适用并且H是代码C的H矩阵,
[0173] 其中处理单元120被构造为定义位的组Y1,…,Yk中的哪一组被直接地或反演地写到内存110中,
[0174] 其中处理单元120被构造为形成将要被写到内存110中的P – k位d1,…,dm+l+n,其中i = 1,…,m + n + l,
[0175] 当yi属于其位被直接地写到内存110中的组时,di = yi,并且
[0176] 当yi属于其位被反演地写到内存110中的组时,di =  ,
[0177] 其中处理单元120被构造为在地址a将位d1,…,dm+n+l写到内存110中,
[0178] 其中处理单元120被构造为创建地址a并且读出源自写在地址a的值d1,…,dn+l,dn+k+1,…,dP的存储在地址a的由于可能的错误导致的可能错误的值 ,…, ,
[0179] 其中处理单元120被构造为定义在错误值的情况下通过使用代码C校正的L个位位置k1,…,kL,L ≤ P - K,其中已直接地或反演地存储bf1,…,bfl的位位置属于将要被校正的位位置,
[0180] 其中处理单元120被构造为确定针对可由代码C校正的错误的定义的L个位位置k1,…,kL的二进制校正值 ,
[0181] 其中处理单元120被构造为至少在已直接地或反演地存储值bf1,…,bfl的位位置形成校正位  ,其中“op”是二进制唯一可逆运算,
[0182] 其中处理单元120被构造为基于已知的插入值bf1,…,bfl和读出并且通过使用代码C校正的对应正确值确定位的哪个组Y1,…,Yk的位已被直接地或反演地存储,
[0183] 其中处理单元120被构造为在 属于其位已被直接地写到内存110中的位的组的情况下输出位 ,并且在 属于已在写到内存110期间被反演地写到内存110中的位的组的情况下输出位 ,其中“op”是二位可逆唯一布尔运算。
[0184] 根据另一实施例,提供一种用于将位存储在内存110中的设备,其中所述位被利用线性纠错码C编码,线性纠错码C具有至少3的码距,其中确定利用线性纠错码C编码的位的子集是被直接写到内存中还是被以逐位反演方式写到内存中,并且其中代码C包括H矩阵H,其中所述设备包括处理单元120和内存110。直接地或反演地写到内存110中的位的子集包括至少一个二进制常数值,所述至少一个二进制常数值与用于编码的净荷数据位一起形成线性码C的码字。处理单元120被构造为当位的各子集的位被直接地写到内存110中时将该二进制常数值作为二进制值bf写到内存110中。处理单元120被构造为当位的各子集的位被反演地写到内存110中时将该二进制常数值作为反演值 写到内存110中。
[0185] 处理单元120被构造为当直接地或反演地写到内存110中的位的子集被反演时将代码C的码字转换成相同代码的码字,并且形成代码的H矩阵,从而与直接地或反演地写到内存110中的位的子集对应的H矩阵的列的每个分量的一的数量是偶数。
[0186] 此外,处理单元120被构造为当从内存110读出时通过使用线性纠错码C来校正从内存110读出的可能错误的位,其中当位的各子集已被直接地写到内存110中时至少校正在已写入常数二进制值bf的位位置的位,或者当位的各子集已被反演地写到内存110中时至少校正在已写入常数二进制值 的位位置的位。
[0187] 另外,处理单元120被构造为在读出之后当已在已存储常数值bf或反演常数值的位位置读出的校正值等于 时反演已被直接地或反演地写到内存110中的位的子集的位,并且当这个值等于bf时不反演。
[0188] 根据另一实施例,提供一种方法。所述方法包括:
[0189] 通过采用线性纠错码来对多个位进行编码以获得多个编码位,其中所述多个编码位中的每一个具有位值,其中纠错码具有至少3的码距,并且其中所述多个编码位形成线性纠错码的第一码字。
[0190] 根据编码位的子集确定指示编码位的子集是否应该被反演的反演决定,其中确定编码位的子集,从而如果子集的所有位被反演,则纠错码的第一码字被变换成纠错码的第二码字,并且其中所述子集包括所述多个编码位中的所有编码位或者包括所述多个编码位中的至少三个编码位,并且其中编码位的子集的编码位是指示位,其中指示位的位值等于第一预定义位值。
[0191] 当反演决定指示编码位的子集不应该被反演时,将第一码字的位存储在内存中作为存储字,其中存储在内存中的第一码字的位包括具有第一预定义位值的指示位。并且:
[0192] 当反演决定指示编码位的子集应该被反演时,通过经由改变编码位的子集的每个编码位的位值反演编码位的子集的每个编码位来修改线性纠错码的第一码字以获得线性纠错码的第二码字,并且将第二码字存储在内存中作为存储字,其中第二码字包括指示位,指示位被反演,以使得指示位的位值等于不同于第一预定义位值的第二预定义位值。
[0193] 在下面,描述实施例的基本原理。
[0194] 实施例涉及将数据写到内存中以及从内存读取数据。实施例允许以有效的方式直接地或反演地将应该存储的位的子集或组写到内存中,并且还允许当从内存读取它们时以它们的原始形式恢复它们。
[0195] 位的子集或组是被直接地写到内存中还是被反演地写到内存中可例如由子集的位的值确定,或者可例如由内存的针对错误或能耗的特性确定,或者可例如由其它特性确定。
[0196] 例如,对于与具有值1的内存错误相比更多地表现出具有值0的永久内存错误的内存,能够有益地直接地将待存储的位写到内存中(因为它们具有比一多的零),因为随后与值1被写到这种内存基元中的概率相比,其中位卡0的表现出永久内存错误的值0将会被写到内存基元中的概率将会更高。由此,永久内存错误导致错误行为的概率能够减小。
[0197] 也可暂时直接地将位写到内存中并且随后反演地将位写到内存中,并且随后决定已发生较少错误的变型。
[0198] 许多非易失性存储器概念(诸如,经典浮栅存储器(例如,EEPROM=电可擦除可编程只读存储器、闪存)或电荷捕获存储器(例如,MONOS、纳米点))以及新的存储器概念(诸如,MRAM=磁阻随机存取存储器、R-RAM、PCRAM或CBRAM(导电桥接随机存取存储器))已针对基元的可靠性或者针对写入期间的电流消耗内在地给出优选值。例如,经典浮栅表现出本领域技术人员公知的不稳定位,其中不稳定位指示当利用低截止电压对状态进行编程时的数据损坏。在读取或写入期间的电流消耗显著取决于待编程/待读取的数据模式。与利用高截止电压的读取相比,利用低截止电压的基元的读取固有地需要显著更大的电流。当编程时,情况可能是相反的。例如,当热载流子编程时,仅必须利用高截止电压进入状态的基元需要编程电流。对于电荷捕获概念,情况是类似的。同样地,对于表现出磁各向异性能的能量不对称性的新的内存(例如,MRAM),与具有较低能量的状态相比,较高能量状态在数据存储方面更加危险。然而,实施例可不仅被用于非易失性存储器,还能够被用于例如永久错误或针对SRAM或DRAM内的特定状态更加频繁地发生的错误。
[0199] 如果在写入第一二进制值b1期间的能耗高于在写入第二二进制值b2= 期间的能耗,则将会可根据待写入的位是包括更多值b1还是更多值b2直接地或反演地将数据写到内存中。以这种方式,可写入至多与值b2的数量相同的数量的值b1,以使得能耗减少。
[0200] 基于值b1的数量或基于位的组的位的子集的位b2的数量,能够决定该组的位是被反演地写到内存中还是被直接地写到内存中。通过如此操作,能够减少用于确定位的子集是被直接地写到内存中还是被反演地写到内存中的工作。
[0201] 在实施例中,将要被存储的位应该例如通过使用具有生成矩阵G和H矩阵或奇偶校验矩阵H的线性纠错码C而被编码,其中指示将要在哪里存储位的地址位可被用于编码,但不需要被用于编码。例如,可有益地利用具有系统形式的生成矩阵G执行编码,其中G矩阵包括单位矩阵作为子矩阵,其中H矩阵在一些实施例中可表现出系统形式并且在其它实施例中可表现出非系统形式。为了当从内存读出位时检查位的子集的位是被直接地写到内存中还是被反演地写到内存中,由常数二进制值补充位(位可例如稍后再次被存储)。这里,补充的常数二进制值被用于形成线性码的各码字。
[0202] 形成直接地或反演地写到内存中的位的子集,从而当能够被反演地或直接地写到内存中的位的子集的位被反演时,已由非反演位形成的代码C的码字被转变为代码C的另一码字。
[0203] 这个特征有益地允许基于纠错码C执行从内存读出的位的校正并且可执行错误位的校正,而不必为了从内存读出的位的校正而知道来自读出的位的子集的位是已被直接地写到内存中还是已被反演地写到内存中。
[0204] 当从内存读出数据时,然后,在通过使用在已直接地或反演地写入具有常数值的位的位位置的校正位校正数据之后,能够发现位的子集或组的位是已被直接地写到内存中还是已被反演地写到内存中。
[0205] 本领域技术人员已知的线性纠错码被用作纠错码。这种代码的例子是汉明码、Hsiao码、BCH码等。频繁地,使用截短码(诸如,截短汉明码、截短Hsiao码或截短BCH码),以使代码适应于必要的将要被存储的数据的位宽度。能够通过删除各H矩阵的不与校验位对应的列来从未截短码获得截短码。
[0206] 为了更好的理解使用的术语和实施例的描述,将在下面简要地描述代码的几个基本术语。
[0207] 线性码C包括生成矩阵或G矩阵G和H矩阵H。如果C是(Q,N)码,则码字包括Q位,其中码字由y = y1,…,yQ指定,并且存在N个信息位,被称为u = u1,…,uN,其中Q > N适用。
[0208] G矩阵是具有N行和Q列的(N,Q)矩阵,H矩阵是(m,Q)矩阵,其中m = Q – N适用。从信息位u,根据关系y = u · G确定码字y。
[0209] 如果代码C是系统码,则生成矩阵G具有形式
[0210] G = (PN,m,IN), m = Q – N,
[0211] 其中IN是N维单位矩阵,并且PN,m是奇偶矩阵。
[0212] 分派的H矩阵可被定义为
[0213] H = (Im, ),
[0214] 其中Im是m维单位矩阵,并且 是奇偶矩阵PN,m的转置,其中行和列交换。如果N、Q、m的值不被具体地提及,或者如果从上下文知道这些值,则简单地写成G = (P,I)和H = (I,PT)。
[0215] 已知具有系统形式的G矩阵和H矩阵也被用作G = (I,P)和H = (PT,I),这具有这样的效果:校验位被布置在码字内的信息位的左侧,或者校验位被布置在码字内的信息位的右侧。
[0216] G矩阵的N个行是代码C的码字。
[0217] 在系统码C中,
[0218] y = y1,…,yQ = (u1,…,un) · G = c1,…,cm,u1,…,uN
[0219] 适用,其中c1,…,cm,u1,…,uN · P是码字y1,…,yQ的校验位。信息位u1,…,uN是码字的未修改部分,其中校验位被添加到信息位。由于错误,码字y = y1,…,yQ能够被损坏为不同字y' =  , …, ,其中具有e = e1,…,eQ = y1 +  ,…,yQ +   = y + y'的e[0220] 被称为错误向量,并且其中“+”指示按照分量加法模2或XOR运算。
[0221] 字y'的错误校验子s是
[0222] s = H · y',
[0223] 其中s = s1,…,sm包括m个分量。如果y*是代码C的码字,则字y*的错误校验子正好等于0。
[0224] 如果y是码字并且如果y'是由错误导致的错误字并且其中y + y' = e,则下面的等式适用,
[0225] H · (y') = H · (0 + y') = H · (y + y') = H · e
[0226] 并且字y'的错误校验子仅取决于错误向量e,y' 通过错误向量e而不同于码字y。
[0227] 如果存在i位错误,则错误向量e的正好i位等于1,并且所有其它分量等于0。如果例如错误向量e的正好一个分量等于1,则在e的分量等于1的位中存在1位错误。
[0228] 如果代码C是1位纠错码,则所有1位错误的错误校验子两两不同并且不同于0,并且特定1位错误随后被唯一地分配给这些错误校验子中的每一个。实现为解码器电路的解码器随后从应用于它的输入的错误校验子确定哪个位位置将要被反演/校正。
[0229] 如果代码C是2位纠错码,则所有2位错误和所有1位错误的错误校验子两两不同并且也不同于0,并且确定的2位错误或1位错误被唯一地分配给这些错误校验子中的每一个。实现为解码器电路的解码器随后从应用于它的输入的错误校验子确定哪个位位置被反演/校正。各陈述适用于3位纠错码、4位纠错码、…等。
[0230] 错误校验子可例如由校验子产生器确定,校验子产生器例如通过使用XOR门针对字w = w1,…,wQ实现关系s(w) = H · w。
[0231] 如果y = y1,…,yQ和v = v1,…,vQ是代码C的码字,则y + v也是代码C的码字。
[0232] 另外,下面的情况适用:
[0233] 如果y = y1,…,yQ是代码C的码字并且w = w1,…,wQ是具有错误校验子s(w) = H · w的字,则字w + y的错误校验子等于字w的错误校验子s(w),因为
[0234] H · (y + w) = H · y + H · w = s(w)
[0235] 适用,并且因为当码字通过与字的按照分量加法而被相加模2时字的错误校验子不改变。将码字y = y1,…,yQ与字w = w1,…,wQ相加意味着:w的这些分量被反演,其中y的分量等于1。
[0236] 如果具体 地讲 是 代码C的码字 ,则对于y  =  y1 ,… ,yQ ,同样是代码C的码字,并且当w的所有分量被反演时,字w = 
w1,…,wQ的校验子s(w)不改变。
[0237] 如果M是其位被直接地或反演地写到内存中的纠错码C的码字y = y1,…,yQ的位的子集,则当字 ,对于 , ,并且对于 , 是代码C的码字时,它是有益的。
[0238] 如果 属于集 合M的 码字y 1 ,… ,yQ 的位 被反演 ,则所获 得的 字也是码字。独立于无论是原始码字y1,…,yQ还是在属于集合M的位中反演的码字被写到内存中,在两种情况下,代码C的码字都被写到内存中。当读出存储的可能错误的码字y' =  ,…, 或(y+yM)'时,能够基于由y'或(y + y)'形成的错误校验子执行利用代码C的读出的位的校正,而不必知道是y还是在属于集合M的位中反演的码字y + yM已被写到内存中,因为错误校验子仅取决于发生的错误,例如,仅取决于发生的错误向量e,而不取决于哪个码字已被写到内存中。可例如有益地:在已写入常数二进制值bf1,…,bf1的位位置读出的值能够在读出之后被校正,并且在利用代码C的校正之后,能够随后基于这些已经校正的值确定码字y是已被直接地存储还是已被存储在属于M的位中。
[0239] 此外,有益地,常数二进制值被利用相同代码C(诸如,存储的净荷数据位)校正,其中校验位的数量通常不通过这个校正而增加。如果 是代码C的码字,则当地址位未被用于编码时,位的子集M能够包括码字y = y1,…,yQ的所有位。
[0240] 能够容易地确定码字能够被反演的位Mi的组并且i = 1,2,…,其中在Mi的位中反演的码字也是代码C的码字。
[0241] 能够容易地确定在子集的位中反演的代码C的码字也是代码C的码字的位的组或子集,因为等于1的代码C的任意码字的位的子集形成这种子集。
[0242] 由于能够针对每个码字确定这种位的子集,所以存在多个合适的位的子集。
[0243] 现在将描述特定实施例。
[0244] 在第一实施例中,作为纠错码C的例子,将会考虑具有N = 11个信息位的长度Q = 15的1位纠错(15, 11)汉明码。
[0245] 考虑的代码C的H矩阵是
[0246]  (1)
[0247] 变量 从左到右对应于公式(1)的H矩阵的列。
[0248] 由于H矩阵的四行中的每一行包括8个一并且8是偶数,所以 是代码C的码字,并且在所有它的15位中以按照分量方式反演的码字也是代码C的码字。
[0249] 选择包括码字的所有位的K = 1和子集M1 = M = {y1,…,y15}。
[0250] 提供10个净荷数据位x1,…,x10,净荷数据位x1,…,x10由常数二进制值bf1补充为11个信息位
[0251] u = u1,…,u11 = bf1,x1,…,x10
[0252] 在实施例中,常数二进制值被定义为bf1 = 0。代码C包括四个校验位c1,…,c4。编码位y1,…,y15通过使用代码C的G矩阵G而被确定为y1,…,y15 = c1,…,c4,bf1,x1,…,x10 = (bf1,x1,…,x10) · G。由此,G矩阵是矩阵G = (I11,P11,5),其中I11是11维单位矩阵,对于P11,5
[0253]  (2)
[0254] 适用,并且
[0255]
[0256]
[0257]
[0258]  (3)
[0259] 适用。
[0260] 编码器根据在公式(3)中定义的关系从信息位bf1,x1,…,x10形成校验位c1,…,c4。例如,可利用XOR门或通过使用常见合成工具实现编码器。K = 1适用,并且仅存在将要被反演的一个子集Y1 = { y1,…,y15}。
[0261] 由于 是代码C的码字,因此对于y = y1,…,y15, 也是代码C的码字,因为具有Q = 15的所有位y1,…,yQ属于Y1。
[0262] 作为特定码字,现在将会考虑由数据位x1, x2,…,x10 = 1,0,1,1,0,1,1,1,1,1和常数二进制值bf1 = 0形成的码字。根据公式(3), c1 = 1,c2 = 0,c3 = 1和c4 = 0,以使得各码字是
[0263] y1,…,y15 = 1,0,1,0,0,1,0,1,1,0,1,1,1,1,1
[0264] 该码字具有10个一和5个零。考虑这样的例子:有益地将尽可能多的零写到内存中。存储值0可较少地损坏为存储值1,反之亦然,这能够是MRAM中的情况。写值0也可需要比写值1少的能量,这能够是闪存中的情况。永久错误也可存在于内存中的一个或几个位置。因此,卡0错误可存在于位yQ = y15的位置。如果字1,0,1,0,0,1,0,1,1,0,1,1,1,1,1被示例性地写到内存中(这能够是当写到闪存中时的情况),并且如果写入的值被与读出的值比较,则能够看出,在y15的位置,存在卡0错误,因为当y15 = 1已被写到内存中时,替代于写入的值1,读出值0。然而,如果决定例如Y1的位(在这种情况下,所有位)被反演地写到内存中,则
[0265] d1,…,d15= ,…,  = 1,0,1,1,1,0,0,1,0,0,0,0,0
[0266] 在地址a被写到内存中,并且第15位中的可能的卡0错误没有影响。如果不存在另外的错误并且如果在地址a执行读出
[0267]  = 1,0,1,1,1,0,0,1,0,0,0,0,0,
[0268] 则例如通过确定读出的字的错误校验子s = H · (1,0,1,1,1,0,0,1,0,0,0,0,0) = 0能够看出,
[0269] 代码C的码字已被读出,并且不需要错误校正。
[0270] 能够从值  = 1推断,字已被反演地写到内存中。为了恢复原始字,所有读出的位 将要被反演,以使得 适用。
[0271] 如果例如存在将读出的值 从1损坏为0的错误,则这个错误随后由相同代码C校正为1,该代码C也如以下更详细所述校正其它位中的错误。
[0272] 有益地,用于错误校正的工作较少。仅需要具有常数值的一个另外的位指示码字的位是已被直接地写到内存中还是已被间接地(反演地)写到内存中。
[0273] 由此,内存能够例如是寄存器、寄存器阵列、RAM、M-RAM或闪存。
[0274] 现在将使用可寻址内存作为例子参照图2讨论写到内存。
[0275] 在图2中,具有n = 10的数据位x1,…,xn和传送常数值(例如,值0)的位bf1被提供给编码器Cod 11的输入,实现编码器Cod 11,从而编码器Cod 11根据在编码器Cod 11的15位宽输出输出的y = y1,…,y15 = c1,…,c4,bf1,x1,…,x10 = (bf1,x1,…,x10) · G形成具有Q = 15的码字y = y1,…,yQ。
[0276] 这里,假设以其系统形式给出代码C。编码器11的输出被提供给具有第一15位宽输入的XOR电路12。此外,XOR电路12包括第二1位宽输入,二进制反演信号Inv被应用于第二1位宽输入。另外,XOR电路12包括15位宽输出,该15位宽输出传送值d1,…,d15并且连接到内存Mem 13的15位宽数据输入。
[0277] 在图2中,XOR电路12可例如包括15个XOR门,其中15个XOR门中的每一个具有两个输入和一个输出,其中这些XOR门中的每一个的第一输入连接到编码器Cod 11的15个二进制输出线之一,而15个XOR门中的每一个的第二输入连接到传送反演信号Inv的XOR电路12的第二输入。
[0278] 如果Inv = 0,则d1,…,d15 = y1,…,y15适用,而如果Inv = 1,则d1,…,d15 =,…, 适用,以使得根据反演信号,由编码器输出的位被直接地(未修改/不修改)或反演地写到内存中。
[0279] 当写数据时,内存Mem 13被提供写地址a,并且应用于内存Mem 13的数据输入的数据被存储在地址a。
[0280] 当应用读地址a'时,并且当读取数据时,存储在读地址a'的数据被读取。如果写地址a等于读地址a'(即,当a = a'时),则将会在数据输出输出值 。写在地址a的数据d1,…,d15和从相同地址a读出的数据 可能由于错误而不同。
[0281] 从从内存Mem 13读出的值,具有s = (s1,s2,s3,s4)的错误校验子S = H · ()和
[0282] (4)
[0283] 适用。错误校验子s = (s1,s2,s3,s4)由实现公式(4)的校验子产生器Syn(图2中未示出)确定。例如,可通过使用合成工具来执行实现公式(4)。从公式(4)能够读出,如表1中所示,校验子被以唯一可逆方式分配给待校正的位 中的每一个。
[0284] 表1:
[0285]s1 s2 s3 s4 待校正的位
0 0 0 0 -
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
0 1 0 1
0 1 1 0
0 1 1 1
1 0 0 0
1 0 0 1
1 0 1 0
1 0 1 1
1 1 0 0
1 1 0 1
1 1 1 0
1 1 1 1
[0286] 如果具有反演为d1,…,d15 = 0,1,0,1,1,0,1,0,0,1,0,0,0,0,0的y5 = bf1 = 0的码字y1,…,y15 = 1,0,1,0,0,1,0,1,1,0,1,1,1,1,1已被写到内存Mem 13中,并且如果读出的位 是  = 0,1,0,1,1,0,1,0,0,1,0,0,0,0,0,则根据公式(4),s1 = 0、s2 = 0、s3 = 0和s4 = 0适用,并且读出的值不被校正。由于  = 1和常数值bf1 = 0已被直接地或反演地存储在第五位中,所以读出的字将会被按照分量反演,以使得
适用。
[0287] 如果位 被错误地损坏为0,则  = 0,1,0,1,0,0,1,0,0,1,0,0,0,0,0被从内存Mem 13读出,并且校验子产生器根据方程(4)确定错误校验子s = (1,1,1,1)。根据表1中的最后一行,值 被校正为 。校正值1确定输出的校
正字0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0被反演,以使得由电路输出 1,
0,1,0,0,1,1,0,1,1,0,1,1,1,1,1。
[0288] 在下面,将会考虑数据位中的错误。如果例如值 错误地等于1,则字  = 0,1,0,1,1,0,1,0,0,1,0,0,0,0,1将会被从内存Mem 13读出。校验子产生器根据公式(4)形成错误校验子s = (0,1,1,1),由解码器将待校正的位 分配给错误校验子s = (0,1,1,
1),以使得根据 形成校正字 ,
[0289] 并且以使得校正字是  = 0,1,0,1,1,0,1,0,0,0,1,0,0,0,0,0。
[0290] 由于  = 1适用,所以字将要被反演,以使得
[0291]  = 101001011011111
[0292] 适用,并且由电路输出适当地校正的字。
[0293] 图3表示用于读出可能错误的数据 、用于校正错误数据并且在数据在写入之前已被反演的情况下用于反演数据的根据实施例的设备。
[0294] 像图2中一样,该设备包括内存Mem 13,数据d1,…,d15已被写到内存Mem 13中。
[0295] 在图3中,假设内存是可寻址内存,在写入期间创建写地址a,并且在读取期间创建读地址a'。这里,写地址a能够与读地址a'相同。一些实施例包括内存Mem 13的另外的控制信号,诸如用于写和读的使能信号。
[0296] 在一些实施例中,内存Mem 13可以是寄存器,该寄存器可例如包括15个内存元件。内存元件可例如是触发器或锁存器。
[0297] 当创建读取地址a´时,在内存Mem 13的15个数据输出输出可能错误的位d' = 。可假设:a' = a适用并且在写地址a写到内存Mem 13中的数据被从相同读地址a读出。读出的位 可例如不同于写入的位d1,…,d15,因为读出的位能够由于内存错误或由于数据线上的错误而是错误的。
[0298] 读出到内存Mem 13的数据输出上的位 被提供给校验子产生器Synd 21的15位宽输入并且还被提供给XOR电路23的15位宽第一输入。实现校验子产生器Synd 21,从而所述校验子产生器Synd 21根据公式(4)形成错误校验子s = s1,s2,s3,s4。在校验子产生器Synd 21的4位宽输出提供所述错误校验子,其中所述输出连接到解码器Dec 22的4位宽输入。解码器Dec 22在它的15位宽输出输出校正信号e = e1,…,e15。构造解码器Dec 22,从而它根据表1形成校正信号。XOR电路23例如包括15个XOR门XOR1,…,XOR15,其中15个XOR门中的每一个具有两个输入和一个输出。
[0299] 对于i = 1,…,15,值 被提供给XOR电路23的XOR门XORi的第一输入,并且值ei被提供给XOR门XORi的第二输入,以使得在XOR门XORi的输出输出值 。由于已选择bf1 = 0,所以传送值 的XOR电路23的XOR门XOR5的输出被直接地提供给可例如包括15个XOR门 ,…, 的XOR电路26的第一1位宽输入,其中15个XOR门中的每一个具有二进制输出和两个二进制输入。
[0300] XOR电路23的15位宽输出连接到XOR电路26的第二15位宽输入。
[0301] 对于i = 1,…,15,值 被提供给XOR门 的第一输入,而XOR门XORi的输出连接到这个门的第二输入,所述输出传送信号 。因此,如果d5cor = 1,则校正值d1cor,...,d15cor被反演,并且如果d5cor = 0,则校正值d1cor,...,d15cor不被反演。校验子产生器Synd 21、解码器Dec 22和XOR电路23形成校正器24,如图3中所示。
[0302] 如果由校正器24独立于是y = y1,…,y15还是 已被写到内存中执行从内存Mem 13读出的值d'=  的校正,则这是有益的。此外,有益地,能够被用于决定数据是已被直接地写到内存Mem 13中还是已被反演地写到内存Mem 13中的常数二进制值被用于由线性码C执行的从内存Mem 13读出的可能错误的位 的校正,以使得校正不需要另外的位(例如,另外的校验位)。
[0303] 根据图3的施例,解码器Dec15产生二进制校正值e = e1,…,e15,以使得在表示的情况下,如果位是错误的并且如果错误可由代码C校正,则校正所有15位 。
[0304] 然而,根据一些实施例,仅位的一部分被校正,例如与数据位对应的位和与常数二进制值bf1对应的位 。在一些实施例中,仅校正分配给数据位的值的一部分。
[0305] 图3表示bf1被设置为bf1 = 0的情况。也可将bf1设置为bf1 = 1。然后,传送应用于XOR电路26的第一输入的值 的数据线将要被反演。
[0306] 图4表示采用错误检测器FE 31的实施例。
[0307] 与图3的电路部分对应的电路部分由与图3相同的标号指示,并且将不会被再次描述。
[0308] 在图4中,传送错误校验子s = s1,s2,s3,s4的校验子产生器Synd 21的输出连接到解码器Dec 22的输入并且另外连接到错误检测器FE 31的4位宽输入,错误检测器FE 31在它的输出输出q位宽错误信号E,其中q≥1。
[0309] 可实现错误检测器FE 31,从而如果校验子s是s ≠ 0,则错误检测器FE 31输出1位宽错误信号E = 1,并且以使得如果校验子s是s = 0,则错误检测器FE 31输出E = 0。然后,错误检测器FE 31能够由具有4个输入和一个输出的OR门实现。
[0310] 在实施例中,q = 2。在这种实施例中,当s = 0时,输出E = (E1,E2) = 0, 0;当s等于代码C的H矩阵的一个列时,输出E = 1, 0;并且当s ≠ 0并且不等于H矩阵的一个列时,输出E = 0, 1。
[0311] 如果E = 1, 0,则检测到可由代码C校正的错误。如果E = 0, 1,则检测到不可由代码C校正的错误。如果E = 0, 0,这意味着不存在可检测到的错误。
[0312] 根据一些实施例,可实现错误检测器FE 31,从而q = 2适用,并且例如E = 0, 0和E = 1, 1指示不存在错误,并且E = 0, 1或E = 1, 0指示存在错误。
[0313] 在下面,将解释另外的实施例,其中代码C具有8个数据位x1,…,x8和6个校验位c1,…,c6。
[0314] 定义:形成能够被直接地或反演地写到内存Mem 13中的位的K = 2个子集Y1,Y2。8个数据位x1,…,x8由两个常数二进制值bf1,bf2补充以形成10个信息位u1,…,u10,以使得[0315] u1,…,u10 = bf1,bf2, x1,…,x8。
[0316] 考虑的代码C的H矩阵可例如被定义为
[0317]  (5)
[0318] 从左到右的变量 分别对应于从左到右的H矩阵(5)的列,以使得c1对应于第一列, c2对应于第二列等。
[0319] 这个实施例的代码C是截短Hsiao码。H矩阵的所有列两两不同并且每个列具有奇数个一,因为每个列具有一个或三个一。
[0320] 由于H矩阵的每一行包括偶数个一,所以 是代码C的代码向量,并且因此,如果y = y1,…,y16是代码C的码字,则 也是代码C的码字,因为线性码的两个码字的按照分量XOR合也是这个代码的码字。
[0321] 作为例子,集合Y1 = {c1,c2,c3,c4,c5,c6,bf1,x4}被选择为直接地或反演地写到内存中的位的第一子集Y1,并且集合Y2={bf2,x1,x2,x3,x5,x6,x7,x8}被选择为第二子集。
[0322] 相应地,H矩阵的第1至第7和第12列被分配给集合Y1。在这些列中的每一列的分量中,存在2个一,以使得H矩阵的这些列的按照分量模2和等于0,其中
[0323] h1 + h2 + h3 + h4 + h5 + h6 + h7 + h12 = 0,
[0324] 其中
[0325] H · (1,1,1,1,1,1,1,0,0,0,0,1,0,0,0,0)T = 0
[0326] 适用,并且其中(1,1,1,1,1,1,1,0,0,0,0,1,0,0,0,0,)是码字。
[0327] H矩阵的第8至第11和第13至第16列被分配给集合Y2。在这些列中的每一列的分量中,存在4个一,以使得H矩阵的这些列的按照分量模2合等于0,其中
[0328] h8 + h9 + h10 + h11 + h13 + h14 + h15 + h16 = 0,
[0329] 其中
[0330] H · (0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1)T = 0
[0331] 适用,并且其中(0,0,0,0,0,0,0,1,1,1,1,0,1,1,1,1,)也是考虑的代码的码字。
[0332] 集合Y1和Y2是分离的并且它们的并集包括码字的所有16个分量。
[0333] 这里,也可选择能够被直接地或反演地写到内存Mem 13中的位的第三子集Y3。这种集合Y3可包括码字的所有位。已从内存读出的校正值 和 确定哪些位的子集已被反演地写到内存Mem 13中并且哪些位的子集已被直接地写到内存Mem 13中。
[0334] 在这种实施例中,存在直接地、以部分反演方式或以完全反演方式将码字y1,…,y16写到内存中的四个不同选择。假设:y7和y8被设置为常数二进制值y7 = bf1 = 0,y8 = bf2 = 0。
[0335] 可将字
[0336]
[0337]
[0338] 或
[0339] ,
[0340] 写到内存中。
[0341] 因为如果c1,c2,c3,c4,c5,c6,0,0, x1,x2,x3,x4,x5,x6,x7,x8是代码C的码字,则写到内存中的值d1,…,d16是代码C的码字,而不管哪些位的子集已被反演,所以能够通过使用代码C来校正从内存读出的可能错误的值 ,而不必知道哪些位组已被直接地写到内存中并且哪些位组已被反演地写到内存中。
[0342] 特别地,读出的值 能够被校正为 ,其中
[0343]  = 0,0指示没有位组的位已被反演,  = 1,0指示位组Y1的位已被反演,  = 0,1指示位组Y2的位已被反演,  = 1,1指示位组Y3 = Y1 ∪ Y2
的位已被反演。
[0344] 现在将参照下面的实施例讨论一个方面。考虑具有4个校验位(c1,c2,c3,c4)、6个数据位(x1,x2,x3,x4,x5,x6)和两个常数二进制值(bf1,bf2)和一个H矩阵H的1位纠错码C,其中
[0345]  (6)
[0346] 并且其中变量 对应于H矩阵(6)H的列。
[0347] 如果y = y1,…,y12 = c1,…,c4,bf1,bf2,x1,…,x6是代码C的码字,则H矩阵的第三列和第四列的一的数量是奇数并且 不是码字。定义:位的两个子集Y1和Y2能够被直接地或反演地写到内存中。这里, 不必是代码C的代码向量。
[0348] 子集Y1可例如被定义为
[0349] Y1 = {c1,c2,c3,c4,bf1,x1}
[0350] 并且子集Y2可例如被定义为
[0351] Y2 = {c3, c4,bf2,x3,x4,x5,x6}。
[0352] 集合Y1和Y2不是分离的,因为它们具有共同的位c3和c4。
[0353] 下面的情况适用:如果y = y1,…,y12是代码C的码字,则通过反演属于Y1的位从y获得的字也是码字。
[0354] 同样地,下面的情况适用:如果y = y1,…,y12是代码C的码字,则通过反演属于Y2的位从y获得的字也是码字。
[0355] 在下面,考虑这样的情况:码字y* = 1,0,1,1,1,1,1,1,0,1,0,1将要被直接地或反演地存储在内存中,例如存储在地址a。假设:在测试中,已例如确定第12位y*12具有卡0错误。然后,替代于码字 y* = 1,0,1,1,1,1,1,1,0,1,0,1 = c1,c2,c3,c4,bf1,bf2,x1,x2,x3,x4,x5,x6,码字能够被存储在内存中,该码字在子集Y2的位中被反演并且其在第12位中的值等于0。通过如此操作,在这个位位置的卡0错误没有影响。
[0356] 如果不发生另外的错误,则当在地址a读取时,将会读出字   = 100010101010。由于 是代码C的码字,所以 并且
的值指示子集Y2的位已被反演,以使得
[0357]
[0358] = 101111110101
[0359] 适用。通过将在子集Y2的位中反演的位写到内存中并且通过基于常数二进制值反转执行的反演,能够容忍(卡0)错误而没有影响。
[0360] 这里,可如已经所述,错误已通过测试而被检测。
[0361] 根据实施例,码字y1,…,yQ被直接地写到内存中,并且随后,各值被读出并且与写入的值比较以确定是否发生了错误以及在哪里发生了错误。
[0362] 如果存在错误检测器,则能够如下继续进行:
[0363] 如果在将码字y1,…,yQ写在地址a之后当在地址a读出时错误检测器未指示错误,则没有新的字将会被写在地址a。如果错误检测器指示错误,则在Y1的位中反演的字在地址a被写到内存中。如果当在该地址读出时错误检测器现在未指示错误,则没有另外的字被写到内存中。如果当读出存储在地址a的字时错误检测器指示错误,则在Y2的位中反演的字被写到内存中。如果当在该地址读出时错误检测器现在未指示错误,则没有另外的字被写到内存中。这种情况持续,直至在读出期间未指示错误或者直至不存在反演位的另外的子集Yk。
[0364] 另外,可实现下面的过程:
[0365] 在地址a,码字y1,…,yQ或在子集Yi的位中反演的码字被写到内存中,并且当错误检测器指示一定数量的错误时当可由代码C校正所述数量的错误时,保持这个写入的字。
[0366] 也可在错误检测器指示未超过错误的某个数量时保持写到内存中的位。如果代码C是2位纠错码,则当错误检测器指示至多1位错误时能够保持写到内存中的位,因为随后仍然能够校正另一随机错误。
[0367] 对于错误处理,有益地,存在具有k > 1的几个不同子集Y1,…,Yk,其位能够被分别直接地或反演地写到内存中,这允许良好地适应于不同的可能的永久错误。
[0368] 在下面,将会讨论另外的实施例。
[0369] 具有在地址a = a1,….,a5被直接地或反演地存储在内存中的5个校验位c1,…,c5和8个净荷数据位x1,…,x8和常数二进制值bf1的截短汉明码将会被视为代码C。在这种实施例中,地址位a1,….,a5被用于编码。
[0370] 代码的H矩阵H是
[0371]  (7)
[0372] 其 中 H 矩 阵 的 列 被 称 为 h 1 , … , h 1 4 。 变 量对应于从左到右的H矩阵(7)的各
列。具有其系统形式的对应G矩阵G是
[0373] G = (P14,5,I14),
[0374] 其中I14是14维单位矩阵,并且P14,5具有形式
[0375]  (8)
[0376] 当通过采用数据被写到内存中的内存地址的地址位a1,….,a5写到内存时,代码C的码字被定义为
[0377]  (9)
[0378] 其中
[0379]
[0380]
[0381]
[0382]
[0383]
[0384] 适用,并且其中a1,….,a5被称为写地址。
[0385] 定义位的集合 ,以使得这个集合的位能够被直接地或反演地写到内存中。bf1被设置为常数值bf1 = 1。
[0386] 如果
[0387]
[0388] 是代码C的码字,则
[0389] 也是代码C的码字。
[0390] 在地址a = a1,….,a5,当位被直接地存储时,位
[0391]被写
到内存中,
[0392] 或者在地址a ,位
[0393]被写到内存中。
[0394] 然后,当在读地址a'从内存读取时,当a = a'并且不存在错误时,对于i = 1,…,14,读出位  =  ,并且位 , a1,…,a5形成代码C的码字。
[0395] 如果能够由代码C校正的错误存在于位 中,则字 , a1,…,a5的错误被校正为 ,并且基于值 确定数据是已被直接地写到内存中还
是已被反演地写到内存中。例如,如果  = 1,则数据已被直接地写到内存中,并且如果
 = 0,则数据已被反演地写到内存中。地址位中的错误未被校正。当可由代码C检测到错误时,检测它们。
[0396] 如果例如1位错误存在于地址位a1中,则关联的错误校验子是[1,0,0,1,0]T。由于HT矩阵的列h1,…,h14都不等于[1,0,0,1,0] ,所以不执行位 之一的校正,并且错误被指示为不可校正错误。通过如此操作,能够例如检测到:读地址和写地址不匹配,并且不同之处在于可由代码C校正的错误。
[0397] 图5显示这样的实施例:地址位a = a1,….,a5如何被用于对待存储的数据进行编码。图5的电路包括具有9位宽第一输入、5位宽第二输入和14位宽输出的编码器Cod 41。此外,图5的电路包括具有14位宽第一输入和1位宽第二输入和14位宽输出的反演电路42。另外,图5的电路包括具有14个数据输入、14个数据输出和用于写地址和读地址的5位宽地址输入的可寻址内存Mem 43。
[0398] 例如,8个净荷数据位x1,…,x8将要被存储。净荷数据位由传送常数二进制值的位bf1补充,其中,这里,常数值是例如bf1 = 1。
[0399] 位bf1,x1,…,x8被应用于编码器Cod 41的9位宽第一输入,而写地址的位a1,….,a5被应用于编码器Cod 41的5位宽第二输入。
[0400] 构造编码器Cod 41,从而编码器Cod 41在它的14个输出输出码字c1,…,c5,bf1 = 1,x1,… ,x8 ,a1 ,…,a5的位c1 ,… ,c5 ,bf1  =  1,x1 ,… ,x8,其中根据
形成码字,
[0401] 其中G是考虑的代码的生成矩阵。
[0402] 假设:以其系统形式提供代码C。
[0403] 编码器Cod 41的14位宽输出被引导至XOR电路42的第一14位宽输入,反演信号Inv被应用于XOR电路42的第二1位宽输入。
[0404] 传送值d1,…,d14的XOR电路12的14位宽输出连接到内存Mem 43的14位宽数据输入。
[0405] 这里,XOR电路42包括分别具有两个输入和一个输出的14个XOR门,其中这些XOR门的第一输入分别连接到编码器Cod 41的14个二进制输出线之一,而这些XOR门的第二输入分别连接到传送反演信号Inv的XOR电路42的第二输入。
[0406] 对于Inv = 0,d1,…,d14 = c1,…,c5,1,x1,…,x8适用,而对于Inv = 1,则适用,以使得根据反演信号,由编码器输出的位被直接地(即,未修改地)或反演地写到内存中。
[0407] 这里,根据实施例,实现编码器,从而当
[0408]
[0409] 是代码C的码字时,则
[0410]
[0411] 也是代码C的码字。
[0412] 在实施例中,当写数据时,内存Mem 43被提供写地址a,并且应用于它的数据输入的数据被存储在地址a = a1,….,a5。写地址的位a1,….,a5是代码的信息位u1,…,u14 = bf1,x1,…,x8,a1,…,a5的一部分。
[0413] 当读取数据时,当应用读地址a'时,从内存读取存储在读地址a' =  ,…, 的数据。
[0414] 如果写地址a和读地址a'匹配(即,当a = a'时),则将会在数据输出输出值。写在地址a的数据d1,…,d15和从相同地址a读出的数据 可能由于错误而不同。如果未发生错误,则读出的值 指示数据是已被直接地写到内存中还是已被反演地写到内存中。如果发生可由代码校正的错误,则当错误可由代码C校正时,能够根据从内存读出并且基于d6cor校正的数据检测到数据是已被反演地写到内存中还是已被直接地写到内存中。
[0415] 作为图5的设备的补充,图6描述用于读出可能错误的位 、用于校正错误位并且在位在写到内存中之前已被反演的情况下用于反演位的根据实施例的设备。如已经参照图5所解释,地址位a1,…,a5已被用于形成代码C的码字。位d1,…,d14被写到内存Mem 43中。
[0416] 读地址a'被提供给内存Mem 43,并且可能错误的位d' =  被读取。在内存Mem 43的14个二进制数据输出上输出可能错误的位d' =  。可假设:a = a'适用并且写在写地址a的位被从相同地址a' = a读出。由于读出的位d'能够例如由于永久或非永久或瞬态内存错误而是错误的,所以读出的位 不必等于写入的位d1,…,d14。
[0417] 如果不存在错误,则
[0418]
[0419] 是代码C的码字。
[0420] 如果(d',a')不是该代码的码字,则错误存在于内存Mem 43中或者当确定地址时已发生错误。
[0421] 在内存43的数据输出上输出的位 同时被提供给校验子产生器Synd 51的14位宽第一输入,读地址a'的位 被提供给校验子产生器Synd 51的5位宽第二输入。
校验子产生器Synd 51在它的5位宽输出上输出5位宽错误校验子s = (s1,…,s5)。这里,构造校验子产生器Synd 51,从而校验子产生器Synd 51根据 形成错
误校验子s,
[0422] 其中可例如使用公式(7)的H矩阵H。读取地址a'被用于校验子形成。
[0423] 校验子产生器Synd 51的5位宽输出连接到解码器Dec 52的5位宽输入,可例如实现解码器Dec 52,从而校验子产生器Synd 51形成包括用于从内存读出的位 '的校正位e6,e7,…,e14的校正向量e = (e6,e7,…,e14)。
[0424] 当校验位也将要被校正时,校正器还可另外形成校正信号e1,…,e5。
[0425] 另外,校正器还可形成用于地址位 的校正位,其中用于地址位的不同于0的校正信号指示存在地址错误,并且在错误地址a'读出的位将不会被进一步使用。
[0426] 在图6中,XOR电路53可例如包括9个XOR门XOR6,…,XOR14,其中九个XOR门中的每一个具有两个输入和一个输出(九个个体XOR门未被示出在图6中)。对于i = 6,…,14,值 被提供给XOR门XORi的第一输入,并且值ei被提供给第二输入,以使得在第i XOR门XORi的输出输出值 。校验子产生器Synd 51、解码器Dec 52和XOR电路53可被视为一起形成校正器54的电路部分。校正器54还可包括错误检测器FE 57,如图6中所示。
[0427] XOR电路53的最低有效输出(即,传送值d6cor的XOR门XOR6的输出)被提供给反演器55的输入,反演器55在它的输出输出值 。XOR电路53的8个更高有效输出(即,传送值 的XOR门XOR7,…,XOR14的输出)连接到反演电路54的第一8位宽输入,在图6中,反演电路54包括分别具有两个输入和一个输出的8个XOR门 ,…, ,而反演
电路54的第二1位宽输入连接到反演器55的输出。
[0428] 对于i = 7,…,14,值 被应用于XOR门 的第一输入,而由反演器55输出的值 被提供给第二输入。XOR门 在它的输出输出值 。
[0429] 图6显示存储常数二进制值bf1和净荷数据位x1,…,x8的位位置被校正。
[0430] 另外的位(例如,校验位)也可被校正,或者仅净荷数据位的子集也可被校正。
[0431] 在图6中示出的实施例中,存在错误检测器FE 57,其5位宽输入连接到校验子产生器51的输出并且错误检测器FE 57在它的q位宽输出输出错误信号E,其中q≥1适用。
[0432] 已示出:对于实施例,具有r = 5的写地址a的位a1,…,ar和读地址的位 ,…, 被用于编码和解码,以使得例如根据 从信息位确定校验位。
[0433] 也可由具有t < r的函数f : {0,1}r→ {0,1}t从地址位a1,…,ar获得位,其中确定所述获得的位 ,以使得 形成线性码C的信息位。因此,例如,可以t= 1,并且根据 定义的A1是地址
位的奇偶性。
[0434] 现在将针对BCH码讨论实施例的另一方面。
[0435] 能够校正1位和2位错误的(15,7) BCH码C的H矩阵是(参见Lin,S.和Costello, D. Error Control Coding, Prentice Hall, 1983, 页码149)H矩阵H
[0436]  (10)
[0437] 变量y1,…,y15被分配给从左到右的H矩阵的列。
[0438] 由于这个BCH码C的H矩阵的每一行包括6、8或12个一,因此偶数个一 1是代码C的码字,并且可形成能够被直接地或反演地写到内存中作为位d1,…,d15的所有位的集合= {y1,…,y15}。由于公式(10)的H矩阵具有8行,所以BCH码具有8个校验位和7个信息位。如果y15 = bf1被选择为常数值,则能够存储6个净荷数据位。 在从内存读出可能错误的位之后,1位和2位错误能够由BCH码校正。如果例如 是错误的,则即使另外的位是错误的, 也将会被校正为正确的值 。
[0439] 实施例可实现另一方面:为了识别直接地或反演地写到内存中的位的集合Yi,使用具有t > 1的t常数值bf1,...,bft。在根据纠错码C校正从内存读出的值 ,  ,  ,…之后,能够从与常数值bf1,...,bft对应的校正位决定位组Yi的位是否将要被反演。通过如此操作,能够增加关于Yi的位是否将要被反演的语句的可靠性。
[0440] 例如,t = 3,并且代码C可以是具有码距5的2位纠错码。对于子集Yi的常数二进制值bfi1,bfi2,bfi3,能够应用bfi1 = bfi2 = bfi3= 0。在1位错误或2位错误的情况下,不能发生这样的情况,即并非在已直接地或反演地存储常数二进制值的位位置的所有位是相同的,因为所有1位和所有2位错误由代码C校正。由此,有益地,Yi的位是已被直接地写到内存中还是已被反演地写到内存中的决定尤其可靠。
[0441] 在下面,描述实施例的随后的方法步骤,其中地址位未被用于编码:
[0442] 提供待存储的数据位并且由常数二进制值补充数据位。
[0443] 利用纠错码C对数据位和常数二进制值进行编码。
[0444] 通过下述步骤形成待存储的位:
[0445] 确定待存储的位的子集的位是否将要被反演
[0446] 当位的子集的位将要被反演时,反演子集的位
[0447] 当位的子集的位将不会被反演时,不反演子集的位
[0448] 4.将待存储的位写到内存中。
[0449] 5.从内存读取存储的可能错误的位。
[0450] 6.通过使用纠错码C来校正读取的可能错误的位,其中如果发生的错误可由代码C校正,则已存储常数二进制值的位位置和已存储数据位的至少一个位位置被校正。
[0451] 7.反演或不反演存储位的值,其中基于在已存储常数值的位位置的校正位决定位的子集是将要被反演还是将不会被反演。
[0452] 在下面,描述另一实施例的随后的方法步骤,其中地址位被用于编码:
[0453] 提供待存储的数据位并且由常数二进制值补充数据位。
[0454] 利用纠错码C对数据位、常数二进制值和写地址的地址位进行编码。
[0455] 通过下述步骤形成待存储的位,其中地址位不属于待存储的位,
[0456] 确定待存储的位的子集的位是否将要被反演
[0457] 当位的子集的位将要被反演时,反演子集的位
[0458] 当位的子集的位将不会被反演时,不反演子集的位
[0459] 4.在用于编码的写地址将待存储的位写到内存中。
[0460] 5.在读地址从内存读取存储的可能错误的位。
[0461] 6.通过使用纠错码C考虑到读地址校正读取的可能错误的位,其中如果发生的错误可由代码C校正,则已存储常数二进制值的位位置和已存储数据位的至少一个位位置被校正。
[0462] 7.反演或不反演存储位的值,其中基于在已存储常数值的位位置的校正位决定位的子集是将要被反演还是将不会被反演。
[0463] 在下面,总结实施例:
[0464] 根据实施例,提供一种用于将位存储在内存中的方法,其中所述位被利用线性纠错码C编码,线性纠错码C具有至少3的码距,其中确定利用线性纠错码C编码的位的子集是被直接地写到内存中还是被以逐位反演方式写到内存中,并且其中代码C包括H矩阵H,其中:
[0465] 直接地或反演地写到内存中的位的子集包括至少一个二进制常数值,所述至少一个二进制常数值与用于编码的净荷数据位一起形成线性码C的码字,其中当位的各子集的位被直接地写到内存中时将该二进制常数值作为二进制值bf写到内存中,并且其中当位的各子集的位被反演地写到内存中时将该二进制常数值bf作为反演值 写到内存中,[0466] 其中当直接地或反演地写到内存中的位的子集被反演时,代码C的码字被转换成相同代码的码字,并且形成代码的H矩阵,从而与直接地或反演地写到内存中的位的子集对应的H矩阵的列的每个分量的一的数量是偶数,
[0467] 2.当从内存读出时,通过使用线性纠错码C来校正从内存读出的可能错误的位,其中当位的各子集已被直接地写到内存中时至少校正在已写入常数二进制值bf的位位置的位,或者当位的各子集已被反演地写到内存中时至少校正在已写入常数二进制值 的位位置的位,并且
[0468] 3.在读出之后当已在已存储常数值bf或反演常数值 的位位置读出的校正值等于 时反演已被直接地或反演地写到内存中的位的子集的位,并且当这个值等于bf时不反演。
[0469] 根据实施例,内存是寄存器。
[0470] 根据另一实施例,内存是寄存器阵列。
[0471] 根据另一实施例,内存是可寻址内存。
[0472] 在实施例中,通过使用地址位来对利用纠错码C编码的位进行编码。
[0473] 根据实施例,直接地或反演地写到内存中的位的子集的位的子集中的零的数量或一的数量确定子集是被直接地写到内存中还是被反演地写到内存中。
[0474] 在实施例中,当在直接写入、随后的读出以及写入的值和读出的值的比较之后未发生错误时,位的子集被直接地写到内存中。
[0475] 根据实施例,当在直接写入、随后的读出以及写入的值和读出的值的比较之后至多发生T个错误并且其中T小于能够由代码C校正的错误的数量时,位的子集被直接地写到内存中。
[0476] 在实施例中,当在反演写入、随后的读出以及写入的值和读出的值的比较之后至多发生与在直接写入和读出的值和写入的值的比较之后发生的错误一样多的错误时,位的子集被反演地写到内存中。
[0477] 根据实施例,当在反演写入、随后的读出以及写入的值和读出的值的比较之后至多发生T个错误并且其中T小于能够由代码C校正的错误的数量时,位的子集被反演地写到内存中。
[0478] 此外,根据另一实施例,提供另一方法。所述方法包括:
[0479] 由具有常数值的l位bf1,…,bfl补充将要被存储在可寻址内存中的地址a的净荷数据位x1,…,xn,其中l≥1。
[0480] 利用校正至少1位错误的线性码C将具有常数值的位bf1,…,bfl和净荷数据位x1,…,xn编码为码字c1,…,cm,bf1,…,bfl,x1,…,xn,其中c1,…,cm是当从地址位获得的位未被用于形成码字时从bf1,…,bfl,x1,…,xn确定的校验位,并且利用校正至少1位错误的线性码C将位bf1,…,bfl,,x1,…,xn,A1,…,Ak编码为码字c1,…,cm,bf1,…,bfl,,x1,…,xn,A1,…,Ak,其中c1,…,cm是当从地址位a1,…,ar获得的位A1,…,Ak被用于编码时从bf1,…,bfl,x1,…,xn,A1,…,Ak确定的校验位,并且A1,…,Ak = f(a1,…,ar)由函数f : {0,1}r → {0,1}k 从地址位唯一地确定。
[0481] 定义将要被直接地或反演地存储的位c1,…,cm,bf1,…,bfl,x1,…,xn的位的K个组Y1,…,Yk,以使得定义的位bf1,…,bfl的子集被唯一地分配给这些组中的每一组,其中K≥1,[0482] 选择组Y1,…,Yk的位的哪个组被以反演或非反演方式存储在内存中。
[0483] 在地址a将位c1,…,cm,bf1,…,bfl,x1,…,xn写到内存中,其中属于反演地写到内存中的位的组的位在写入之前被反演,并且不属于其位被反演的组的位被直接地(即,以非反演方式)写到内存中。
[0484] 读出在地址a存储在内存中的位。
[0485] 如果从地址位获得的位未被用于形成码字,则在8继续,并且如果从地址位获得的位被用于形成码字,则在10继续。
[0486] 基于纠错码C校正至少在已直接地或反演地存储常数值bf1,…,bfl的位位置从内存读出的位,所述从内存读出的位可能由于错误而不同于写到相同地址的值。
[0487] 在11继续。
[0488] 基于纠错码C校正至少在已直接地或反演地存储常数值bf1,…,bfl的位位置通过使用从可能错误的地址位获得的也可能错误的位 ,…,  从内存读出的可能错误的值。
[0489] 从通过使用唯一地分派给各位组的代码C校正的读出的常数值确定位组是已被直接地写到内存中还是已被反演地写到内存中以及哪个位组已被直接地或反演地写到内存中。
[0490] 反演已在前一步骤中被确定为其位已在写入期间被反演的位组的位组的读出并且校正的位。
[0491] 方法的结束
[0492] 另外,根据另一实施例,提供这样的方法:直接地或反演地将形成校正至少1位错误的线性码C的码字的位的子集直接地或反演地写到内存基元的内存中,以及从直接地或反演地存储的从内存可能错误地读出的位读取和恢复写到内存中的位,其中所述方法包括下述步骤:
[0493] 定义能够被直接地或反演地写到内存中的利用校正至少1位错误的线性码C编码的位的子集的数量K,其中K≥1。
[0494] 提供将要在地址a = a1,…,ar被存储为校正至少1位错误的线性系统码的码字的子字的n个净荷数据位x1,…,xn,r≥2。
[0495] 形成代码C的信息位u1,…,uN,其中如果地址a未被用于形成代码C的码字,则由l个定义的二进制值bf1,…,bfl补充数据位x1,…,xn,以使得
[0496] u1,…,uN = bf1,…,bfl,x1,…,xn
[0497] N= l + n适用,并且如果地址a被用于形成代码C的码字,则由l个定义的二进制值bf1,…,bfl补充数据位x1,…,xn和从地址位a1,…,ar获得的位A1,…,Ak,以使得[0498] u1,…,uN = bf1,…,bfl,x1,…,xn,A1,…,Ak
[0499] N = l + n + k适用,其中
[0500] A1,…,Ak = f(a1,…,ar)
[0501] 是由函数f从r个地址位a1,…,ar的值唯一地确定的二进制值,l≥1和1≤k≤r。
[0502] 4.如果地址a未被用于错误检测或错误校正,则继续执行该方法的步骤5,并且如果该地址被用于错误检测或错误校正,则继续执行该方法的步骤16。
[0503] 5.形成代码C的码字y1,…,yP,其中C是具有系统形式的生成矩阵G和H矩阵H的线性系统码,其中
[0504] y = y1,…,yP = (u1,…,uN) G· = c1,…,cm, bf1,…,bfl,x1,…,xn
[0505] 适用并且c1,…,cm m是校验位,生成矩阵G是(N,P)矩阵并且H矩阵H = (h1,…,hP)是([P - N],P)矩阵,以使得H矩阵的所有列两两不同并且不等于0,并且P = n + m + l,m = P – N,N = n + l和m = P – N适用。
[0506] 6.确定位y1,…,yP = c1,…,cm,bf1,…,bfl,x1,…,xn的K个子集Y1 = {y1,1,…,y1,q1},…,YK = {yK,1,…,yK,qK},
[0507] 以使得下面的情况适用:
[0508] 具有其第一预定义值的一个位或多个位bf1,…,bfl被一一对应分派给每个子集Y1,…,Yk。
[0509] 如果 是位y1,…,yP的二进制值,则 是代码C的码字,对于j = 1,…,P并且对于具有K ≥ q ≥ 1的每个子集Yq,下面的情况适用:如果yj是子集Yq的元素,则  = 1,并且如果yj不是子集Yq的元素,则  = 0。
[0510] 7.定义位的组Y1,…,Yk中的哪一组被直接地或反演地写到内存中。
[0511] 8.形成将要被写到内存中的P位d1,…,dP,其中对于1,…,P,下面的情况适用:
[0512] 当yi属于其位被反演地写到内存中的组时,di =  。
[0513] 当yi不属于其位被反演地写到内存中的任何组时,di = yi。
[0514] 9.在地址a将位d1,…,dP写到内存中。
[0515] 读取:
[0516] 10.创建地址a并且读出源自写在地址a的值d1,…,dP的存储在地址a的由于可能的错误导致的可能错误的值 ,…, 。
[0517] 11.定义将要在错误值的情况下通过使用代码C校正的将要由代码C校正的L个位位置k1,…,kL,L≤P并且{k1,…,kL}  {1,…,P},其中已直接地或反演地存储bf1,…,bfl的位位置属于将要被校正的位位置。
[0518] 12.确定基于代码C校正可由代码C校正的错误的定义的L个位位置k1,…,kL的二进制校正值 。
[0519] 13.至少在已直接地或反演地存储值bf1,…,bfl的位位置形成校正位,其中op是唯一可逆布尔运算。
[0520] 14.基于已知的插入值bf1,…,bfl和通过使用代码C校正的各读出值确定位的哪个组Y1,…,Yk已被直接地或反演地存储。
[0521] 15.如果 属于其位已被直接地写到内存中的位的组,则输出位,并且如果 属于已在写到内存期间被反演地写到内存中的位的组,则输出位
,其中“op”是二进制唯一可逆布尔运算,并且该方法结束。
[0522] 16.形成代码C的码字y = y1,…,yP,其中C是具有系统形式的生成矩阵G和H矩阵H的线性系统码,其中
[0523] y = y1,…,yP = (u1,…,uN) · G == c1,…,cm,bf1,…,bfl,x1,…,xn,A1,…,Ak[0524] 适用,生成矩阵G是(N,P)矩阵并且H矩阵H = (h1,…,hP)是([P - N],P)矩阵,以使得H矩阵的所有列两两不同并且不等于0,并且P = n + l + m + k,N = n + l + k,并且c1,…,cm是m = P-N个校验位。
[0525] 17.确定位y1,…,yn+l+m = c1,…,cm,bf1,…,bfl,x1,…,xn的K个子集Y1 = {y1,1,…,y1,q1},…,YK = {yK,1,…,yK,qK},以使得下面的情况适用:
[0526] 具有其第一预定义值的一个位或多个位bf1,…,bfl被一一对应分派给每个子集Y1,…,Yk。
[0527] 如果 是位y1,…,yP的二进制值,则 是代码C的码字,对于j = 1,…,P并且对于具有K ≥ q ≥ 1的每个子集Yq,下面的情况适用:如果 是子集Yq的元素,则  = 1,并且如果 不是子集Yq的元素,则  = 0。
[0528] 18.定义位的哪一组Y1,…,Yk被直接地或反演地写到内存中。
[0529] 19.形成将要被写到内存中的P – k位d1,…,dm+l+n,其中对于i = 1,…,m + n + l,下面的情况适用:
[0530] 当yi属于其位被直接地写到内存中的组时,di = yi,
[0531] 当yi属于其位被反演地写到内存中的组时,di =  ,
[0532] 20.在地址a将位d1,…,dm+n+l写到内存中。
[0533] 读取:
[0534] 21.创建地址a并且读出源自写在地址a的值d1,…,dn+m+l的存储在地址a的由于可能的错误导致的可能错误的值 ,…, 。
[0535] 22.定义将要在错误值的情况下通过使用代码C校正的将要由代码C校正的L个位位置k1,…,kL,L≤P – k并且{k1,…,kL}  {1,  ..., n + m+ l },其中已直接地或反演地存储bf1,…,bfl的位位置属于将要被校正的位位置。
[0536] 23.确定可由代码C校正的错误的定义的L个位位置k1,…,kL的二进制校正值。
[0537] 24.至少在已直接地或反演地存储值bf1,…,bfl的位位置形成校正位,其中“op”是二进制唯一可逆运算。
[0538] 25.基于已知的插入值bf1,…,bfl和读出并且通过使用代码C校正的对应值确定位的哪个组Y1,…,Yk的位已被直接地或反演地存储。
[0539] 26 .如果 属于其位已被直接地写到内存中的位的组,则输出位,如果 属于已在写到内存期间被反演地写到内存中的位的组,则输出
位 =,其中“op”是二进制唯一可逆布尔运算,并且该方法结束。
[0540] 根据实施例,内存是闪存。
[0541] 根据另一实施例,内存是M-RAM。
[0542] 根据另一实施例,内存是R-RAM。
[0543] 在实施例中,具有其系统形式的代码C的生成矩阵用于编码。
[0544] 根据另一实施例,代码C是汉明码或截短汉明码。
[0545] 在另一实施例中,代码C是Hsiao码或截短Hsiao码。
[0546] 根据另一实施例,代码C是BCH码或截短BCH码。
[0547] 在另一实施例中,k = r和(A1,…,Ak) = (a1,…,ar)适用。
[0548] 根据另一实施例,k = 1和A1 = f(a1,…,ar) = a1 + a2 + … + ar适用并且A1是地址位a1,…,ar的奇偶性。
[0549] 根据第一方面,一种设备包括:处理单元;和内存,其中所述处理单元被构造为通过采用线性纠错码来对多个位进行编码以获得多个编码位,其中所述多个编码位中的每一个具有位值,其中线性纠错码具有至少3的码距,并且其中所述多个编码位形成线性纠错码的第一码字,其中处理单元被构造为根据编码位的子集确定指示编码位的子集是否应该被反演的反演决定,其中确定编码位的子集,从而如果子集的所有位被反演,则线性纠错码的第一码字被变换成纠错码的第二码字,并且其中所述子集包括所述多个编码位中的所有编码位或者包括所述多个编码位中的至少三个编码位,并且其中编码位的子集的编码位是指示位,其中指示位的位值等于第一预定义位值,其中当反演决定指示编码位的子集不应该被反演时,处理单元被构造为将第一码字的位存储在内存中作为存储字,其中存储在内存中的第一码字的位包括具有第一预定义位值的指示位,并且其中当反演决定指示编码位的子集应该被反演时,处理单元被构造为通过经由改变编码位的子集的每个编码位的位值反演编码位的子集的每个编码位来修改线性纠错码的第一码字以获得线性纠错码的第二码字,并且被构造为将第二码字存储在内存中作为存储字,其中第二码字包括指示位,指示位被反演,以使得指示位的位值等于不同于第一预定义位值的第二预定义位值。
[0550] 根据第二方面,当返回参照第一方面时,所述设备是电路。
[0551] 根据第三方面,当返回参照第一方面时,所述编码位的子集包括所述多个编码位中的所有编码位。
[0552] 根据第四方面,当返回参照第一方面时,所述编码位的子集不包括所述多个编码位中的所有编码位。
[0553] 根据第五方面,当返回参照第一方面时,所述第一预定义值是第一常数二进制值bf,其中第二预定义值是第二常数二进制值 ,并且其中处理单元被构造为从内存读取存储字,并且其中处理单元被构造为在读出存储字之后当已从内存中的已存储指示位的位位置读出的位值等于第二常数二进制值 时反演已被直接地或反演地写到内存中的位的子集的位,并且被构造为当已从内存中的已存储指示位的位位置读出的位值等于第一常数二进制值bf时不反演。
[0554] 根据第六方面,当返回参照第一方面时,所述第一预定义值是第一常数二进制值bf,其中第二预定义值是第二常数二进制值 ,并且其中处理单元被构造为从内存读出存储字,其中处理单元被构造为在存储字的一个或多个位错误的情况下通过使用线性纠错码来校正所述一个或多个位,其中如果至少已被存储在已写入指示位的位位置的位是错误的,则校正所述位,并且其中在读出存储字之后并且在校正所述一个或多个位之后,处理单元被构造为当已从内存中的已存储指示位的位位置读出的位值等于第二常数二进制值时反演已被直接地或反演地写到内存中的位的子集的位,并且被构造为当已从内存中的已存储指示位的位位置读出的位值等于第一常数二进制值bf时不反演。
[0555] 根据第七方面,当返回参照第一方面时,所述线性纠错码包括奇偶校验矩阵H,并且其中奇偶校验矩阵H的列的每个分量的一的数量是偶数。
[0556] 根据第八第六方面,当返回参照第一方面时,所述内存是寄存器或寄存器阵列或可寻址内存。
[0557] 根据第九方面,当返回参照第一方面时,所述内存是可寻址内存,并且其中处理单元被构造为通过采用线性纠错码并且通过使用地址位来对所述多个位进行编码以获得所述多个编码位。
[0558] 根据第十方面,当返回参照第一方面时,所述处理单元被构造为根据编码位的子集的零的数量或编码位的子集的一的数量确定反演决定。
[0559] 根据第十一方面,当返回参照第一方面时,当在将写值写到内存中之后、在随后从内存读出写值以获得读值之后并且在比较写入的写值和读取的写值之后未发生错误时,处理单元被构造为确定反演决定以使得反演决定指示编码位的子集不应该被反演。
[0560] 根据第十二方面,当返回参照第一方面时,当在将写值写到内存中之后、在随后从内存读出写值以获得读值之后并且在比较写入的写值和读取的写值之后至多发生T个错误并且其中T小于能够由线性纠错码校正的错误的数量时,处理单元被构造为确定反演决定以使得反演决定指示编码位的子集不应该被反演。
[0561] 根据第十三方面,当返回参照第一方面时,当在将位的子集的反演写值写到内存中之后、在随后从内存读出写入的反演写值以获得读值之后并且在比较写入的反演写值和读取的反演写值之后至多发生与在直接写入和读出的值和写入的未反演值的比较之后发生的错误一样多的错误时,处理单元被构造为确定反演决定以使得反演决定指示编码位的子集应该被反演。
[0562] 根据第十四方面,当返回参照第一方面时,当在将位的子集的反演写值写到内存中之后、在随后从内存读出写入的反演写值以获得读取的反演写值之后并且在比较写入的反演写值和读值之后至多发生T个错误并且其中T小于能够由线性纠错码校正的错误的数量时,处理单元被构造为确定反演决定以使得反演决定指示编码位的子集应该被反演。
[0563] 根据第十五方面,当返回参照第一方面时,所述内存是闪存,内存是磁性随机存取存储器(M-RAM)或者内存是电阻随机存取存储器(R-RAM)。
[0564] 根据第十六方面,当返回参照第一方面时,所述线性纠错码包括生成矩阵,并且处理单元被构造为通过将具有其系统形式的生成矩阵用于编码来对所述多个位进行编码。
[0565] 根据第十七方面,当返回参照第一方面时,所述线性纠错码是汉明码或截短汉明码。
[0566] 根据第十八方面,当返回参照第一方面时,所述线性纠错码是Hsiao码或截短Hsiao码。
[0567] 根据第十九方面,当返回参照第一方面时,所述线性纠错码是BCH码或截短BCH码。
[0568] 根据第二十方面,当返回参照第一方面时,所述处理单元被构造为根据编码位的另一子集确定指示所述编码位的另一子集是否应该被反演的另一反演决定。
[0569] 根据第二十一方面,一种设备包括:处理单元;和内存,其中处理单元被构造为由具有常数值的l位bf1,…,bfl补充将要被存储在内存中的地址a的净荷数据位x1,…,xn,其中l≥1,其中处理单元被构造为利用校正至少1位错误的线性码C将具有常数值的位bf1,…,bfl和净荷数据位x1,…,xn编码为码字c1,…,cm,bf1,…,bfl,x1,…,xn,其中c1,…,cm是当从地址位获得的位未被包括用于形成码字时从bf1,…,bfl,x1,…,xn确定的校验位,并且利用校正至少1位错误的线性纠错码C将位bf1,…,bfl,,x1,…,xn,A1,…,Ak编码为码字c1,…,cm,bf1,…,bfl,,x1,…,xn,A1,…,Ak,其中c1,…,cm是当从地址位a1,…,ar获得的位A1,…,Ak被用于编码时从bf1,…,bfl, x1,…,xn,A1,…,Ak确定的校验位,并且A1,…,Ak = f(a1,…,ar)由函数f : {0,1}r → {0,1}k从地址位唯一地确定,其中处理单元被构造为定义将要被直接地或反演地存储的位c1,…,cm,bf1,…,bfl,x1,…,xn的位的K个组Y1,…,Yk,以使得定义的位bf1,…,bfl的子集被唯一地分派给这些组中的每一组,其中K≥1,其中处理单元被构造为确定位的组Y1,…,Yk,从而如果组Yj, j = 1,…,K的所有位被反演,则线性纠错码C的第一码字被变换成线性纠错码C的第二码字,并且其中处理单元被构造为选择组Y1,…,Yk的位的哪个组被以反演或非反演方式存储在内存中,其中处理单元被构造为在地址a将位c1,…,cm,bf1,…,bfl,x1,…,xn写到内存中,其中属于反演地写到内存中的位的组的位在写入之前被反演,并且不属于其位被反演的组的位被以非反演方式写到内存中,其中处理单元被构造为读出在地址a存储在内存中的位,其中如果从地址位获得的位未被用于形成码字,则处理单元被构造为基于线性纠错码C校正至少在已直接地或反演地存储常数值bf1,…,bfl的位位置从内存读出的位,所述从内存读出的位可能由于错误而不同于写到相同地址的值,其中如果从地址位获得的位被用于形成码字,则处理单元被构造为基于线性纠错码C校正至少在已直接地或反演地存储常数值bf1,…,bfl的位位置通过使用从可能错误的地址位获得的也可能错误的位 ,…, 从内存读出的可能错误的值,其中处理单元被构造为从通过使用唯一地分派给各位组的线性纠错码C校正的读出的常数值确定位组是已被直接地写到内存中还是已被反演地写到内存中以及哪个位组已被直接地或反演地写到内存中,并且其中处理单元被构造为反演已在前一步骤中被确定为其位已在写入期间被反演的位组的位组的读出并且校正的位。
[0570] 根据第二十二方面,当返回参照第二十一方面时,k = r和(A1,…,Ak) = (a1,…,ar)适用。
[0571] 根据第二十三方面,当返回参照第二十一方面时,k = 1和A1 = f(a1,…,ar) = a1 + a2 + … + ar适用并且其中A1是地址位a1,…,ar的奇偶性。
[0572] 根据第二十四方面,一种用于将位存储在内存中的设备,其中所述位被利用线性纠错码C编码,线性纠错码C具有至少3的码距,其中确定利用线性纠错码C编码的位的子集是被直接写到内存中还是被以逐位反演方式写到内存中,并且其中线性纠错码C包括H矩阵H,所述设备包括:处理单元;和内存,其中直接地或反演地写到内存中的位的子集包括至少一个二进制常数值,所述至少一个二进制常数值与用于编码的数据位一起形成线性纠错码C的码字,其中处理单元被构造为当位的各子集的位被直接地写到内存中时将该二进制常数值作为二进制值bf写到内存中,并且其中处理单元被构造为当位的各子集的位被反演地写到内存中时将该二进制常数值作为反演值 写到内存中,其中处理单元被构造为当直接地或反演地写到内存中的位的子集被反演时将线性纠错码C的码字转换成相同代码的码字,并且形成线性纠错码C的H矩阵,从而与直接地或反演地写到内存中的位的子集对应的H矩阵的列的每个分量的一的数量是偶数,其中处理单元被构造为当从内存读出时通过使用线性纠错码C来校正从内存读出的可能错误的位,其中当位的各子集已被直接地写到内存中时至少校正在已写入常数二进制值bf的位位置的位,或者当位的各子集已被反演地写到内存中时至少校正在已写入常数二进制值 的位位置的位,并且其中处理单元被构造为在读出之后当已在已存储常数值bf或反演常数值 的位位置读出的校正值等于 时反演已被直接地或反演地写到内存中的位的子集的位,并且当这个值等于bf时不反演。
[0573] 根据第二十五方面,一种方法包括:使用编码器通过采用线性纠错码来对多个位进行编码以获得多个编码位,其中所述多个编码位中的每一个具有位值,其中线性纠错码具有至少3的码距,并且其中所述多个编码位形成线性纠错码的第一码字,使用处理单元根据编码位的子集确定指示编码位的子集是否应该被反演的反演决定,其中确定编码位的子集,从而如果子集的所有位被反演,则线性纠错码的第一码字被变换成纠错码的第二码字,并且其中所述子集包括所述多个编码位中的所有编码位或者包括所述多个编码位中的至少三个编码位,并且其中编码位的子集的编码位是指示位,其中指示位的位值等于第一预定义位值,当反演决定指示编码位的子集不应该被反演时,将第一码字的位存储在内存中作为存储字,其中存储在内存中的第一码字的位包括具有第一预定义位值的指示位,并且当反演决定指示编码位的子集应该被反演时,通过经由改变编码位的子集的每个编码位的位值反演编码位的子集的每个编码位来修改线性纠错码的第一码字以获得线性纠错码的第二码字,并且将第二码字存储在内存中作为存储字,其中第二码字包括指示位,指示位被反演,以使得指示位的位值等于不同于第一预定义位值的第二预定义位值。
[0574] 根据第二十六方面,一种方法包括:由具有常数值的l位bf1,…,bfl补充将要被存储在可寻址内存中的地址a的净荷数据位x1,…,xn,其中l≥1,利用校正至少1位错误的线性纠错码C将具有常数值的位bf1,…,bfl和净荷数据位x1,…,xn编码为码字c1,…,cm,bf1,…,bfl,x1,…,xn,其中c1,…,cm是当从地址位获得的位未被用于形成码字时从bf1,…,bfl,x1,…,xn确定的校验位,并且利用校正至少1位错误的线性纠错码C将位bf1,…,bfl,,x1,…,xn,A1,…,Ak编码为码字c1,…,cm,bf1,…,bfl,,x1,…,xn,A1,…,Ak,其中c1,…,cm是当从地址位a1,…,ar获得的位A1,…,Ak被用于编码时从bf1,…,bfl, x1,…,xn,A1,…,Ak确定的校验位,并且A1,…,Ak = f(a1,…,ar)由函数f : {0,1}r → {0,1}k从地址位清楚地确定,使用处理单元定义将要被直接地或反演地存储的位c1,…,cm,bf1,…,bfl,x1,…,xn的位的K个组Y1,…,Yk,以使得定义的位bf1,…,bfl的子集被唯一地分派给这些组中的每一组,其中K≥1,并且从而如果位的组的位被反演,则线性纠错码C的第一码字被变换成线性纠错码C的第二码字,使用处理单元选择组Y1,…,Yk的位的哪个组被以反演或非反演方式存储在内存中,使用处理单元在地址a将位c1,…,cm,bf1,…,bfl,x1,…,xn写到内存中,其中属于反演地写到内存中的位的组的位在写入之前被反演,并且不属于其位被反演的组的位被直接地(即,以非反演方式)写到内存中,使用处理单元读出在地址a存储在内存中的位,如果从地址位获得的位未被用于形成码字,则在h)继续,并且如果从地址位获得的位被用于形成码字,则在j)继续,使用处理单元基于线性纠错码C校正至少在已直接地或反演地存储常数值bf1,…,bfl的位位置从内存读出的位,所述从内存读出的位可能由于错误而不同于写到相同地址的值,在k)继续,使用处理单元基于线性纠错码C校正至少在已直接地或反演地存储常数值bf1,…,bfl的位位置通过使用从可能错误的地址位获得的也可能错误的位 ,…, 从内存读出的可能错误的值,使用处理单元从通过使用唯一地分派给各位组的线性纠错码C校正的读出的常数值确定位组是已被直接地写到内存中还是已被反演地写到内存中以及哪个位组已被直接地或反演地写到内存中,并且使用处理单元反演已在前一步骤中被确定为其位已在写入期间被反演的位组的位组的读出并且校正的位。
[0575] 根据第二十七方面,一种用于直接地或反演地将形成校正至少1位错误的线性纠错码C的码字的位的子集直接地或反演地写到内存基元的内存中以及用于从直接地或反演地存储的从内存可能错误地读出的位读取和恢复写到内存中的位的方法包括:使用处理单元定义能够被直接地或反演地写到内存中的利用校正至少1位错误的线性纠错码C编码的位的子集的数量K,其中K≥1,使用处理单元提供将要在地址a = a1,…,ar被存储为校正至少1位错误的线性系统码的码字的子字的n个净荷数据位x1,…,xn,r≥2,使用处理单元形成线性纠错码C的信息位u1,…,uN,其中如果地址a未被用于形成线性纠错码C的码字,则由l个定义的二进制值bf1,…,bfl补充数据位x1,…,xn,以使得u1,…,uN = bf1,…,bfl,x1,…,xn,N = l + n适用,并且如果地址a被用于形成线性纠错码C的码字,则由l个定义的二进制值bf1,…,bfl补充数据位x1,…,xn和从地址位a1,…,ar获得的位A1,…,Ak,以使得u1,…,uN = bf1,…,bfl,x1,…,xn,A1,…,Ak,N = l + n + k适用,其中A1,…,Ak = f(a1,…,ar)是由函数f从r个地址位a1,…,ar的值唯一地确定的二进制值,l≥1和1≤k≤r,d)如果地址a未被用于错误检测或错误校正,则继续执行该方法的步骤e),并且如果该地址被用于错误检测或错误校正,则继续执行该方法的步骤p),e)使用处理单元形成线性纠错码C的码字y1,…,yP,其中C是具有系统形式的生成矩阵G和H矩阵H的线性系统码,其中y = y1,…,yP = (u1,…,uN) G· = c1,…,cm, bf1,…,bfl,x1,…,xn适用并且c1,…,cm m是校验位,生成矩阵G是(N,P)矩阵并且H矩阵H = (h1,…,hP)是([P - N],P)矩阵,以使得H矩阵的所有列两两不同并且不等于0,并且P = n + m + l,m = P – N,N = n + l和m = P – N适用,f)使用处理单元确定位y1,…,yP = c1,…,cm,bf1,…,bfl,x1,…,xn的K个子集Y1 = {y1,1,…,y1,q1},…,YK = {yK,1,…,yK,qK},以使得下面的情况适用:具有其第一预定义值的一个位或多个位bf1,…,bfl被一一对应分派给每个子集Y1,…,Yk,如果 是位y1,…,yP的二进制值,则是线性纠错码C的码字,对于j = 1,…,P并且对于具有K ≥ q ≥ 1的每个子集Yq,下面的情况适用:如果yj是子集Yq的元素,则  = 1,并且如果yj不是子集Yq的元素,则  = 0,g)使用处理单元定义位的组Y1,…,Yk中的哪一组被直接地或反演地写到内存中,h)使用处理单元形成将要被写到内存中的P位d1,…,dP,其中对于1,…,P,下面的情况适用:当yi属于其位被反演地写到内存中的组时,di =  ,当yi不属于其位被反演地写到内存中的任何组时,di = yi,使用处理单元在地址a将位d1,…,dP写到内存中,读取:使用处理单元创建地址a并且读出源自写在地址a的值d1,…,dP的存储在地址a的由于可能的错误导致的可能错误的值 ,…, ,使用处理单元定义将要在错误值的情况下通过使用线性纠错码C校正的将要由线性纠错码C校正的L个位位置k1,…,kL,L≤P并且{k1,…,kL}   {1,…,P},其中已直接地或反演地存储bf1,…,bfl的位位置属于将要被校正的位位置,使用处理单元确定基于线性纠错码C校正可由线性纠错码C校正的错误的定义的L个位位置k1,…,kL的二进制校正值 ,使用处理单元至少在已直接地或反演地存储值bf1,…,bfl的位位置形成校正位 ,其中op是唯一可逆布尔运算,使用处理单元基于已知的插入值bf1,…,bfl
和通过使用代码C校正的各读出值确定位的哪个组Y1,…,Yk已被直接地或反演地存储,如果属于其位已被直接地写到内存中的位的组,则输出位 ,并且如果
属于已在写到内存期间被反演地写到内存中的位的组,则输出位 ,其中
“op”是二进制唯一可逆布尔运算,并且该方法结束,使用处理单元形成线性纠错码C的码字y = y1,…,yP,其中C是具有系统形式的生成矩阵G和H矩阵H的线性系统码,其中y = y1,…,yP = (u1,…,uN) · G = c1,…,cm,bf1,…,bfl,x1,…,xn,A1,…,Ak适用,生成矩阵G是(N,P)矩阵并且H矩阵H = (h1,…,hP)是([P - N],P)矩阵,以使得H矩阵的所有列两两不同并且不等于0,并且P = n + l + m + k,N = n + l + k,并且c1,…,cm是m = P-N个校验位,使用处理单元确定位y1,…,yn+l+m = c1,…,cm,bf1,…,bfl,x1,…,xn的K个子集Y1 = {y1,1,…,y1,q1},…,YK = {yK,1,…,yK,qK},以使得下面的情况适用:具有其第一预定义值的一个位或多个位bf1,…,bfl被一一对应分派给每个子集Y1,…,Yk,如果 是位y1,…,yP的二进制值,则 是线性纠错码C的码字,对于j = 1,…,P并且对于具有K ≥ q ≥ 1的每个子集Yq,下面的情况适用:如果 是子集Yq的元素,则  = 1,并且如果 不是子集Yq的元素,则  = 0,使用处理单元定义位的哪一组Y1,…,Yk被直接地或反演地写到内存中,使用处理单元形成将要被写到内存中的P – k位d1,…,dm+l+n,其中对于i = 1,…,m + n + l,下面的情况适用:当yi属于其位被直接地写到内存中的组时,di = yi,当yi属于其位被反演地写到内存中的组时,di =  ,使用处理单元在地址a将位d1,…,dm+n+l写到内存中,读取:使用处理单元创建地址a并且读出源自写在地址a的值d1,…,dn+m+l的存储在地址a的由于可能的错误导致的可能错误的值 ,…, ,使用处理单元定义将要在错误值的情况下通过使用线性纠错码C校正的将要由线性纠错码C校正的L个位位置k1,…,kL,L≤P – k并且{k1,…,kL}  {1,  ..., n + m+ l },其中已直接地或反演地存储bf1,…,bfl的位位置属于将要被校正的位位置,使用处理单元确定可由线性纠错码C校正的错误的定义的L个位位置k1,…,kL的二进制校正值 ,使用处理单元至少在已直接地或反演地存储值bf1,…,bfl的位位置形成校正位 ,其中“op”是二进制唯一可逆运算,使用处理单元
基于已知的插入值bf1,…,bfl和读出并且通过使用代码C校正的对应值确定位的哪个组Y1,…,Yk的位已被直接地或反演地存储,如果 属于其位已被直接地写到内存中的位的组,则输出位 ,并且如果 属于已在写到内存期间被反演地写到内存中
的位的组,则输出位 ,其中“op”是二进制唯一可逆布尔运算,并且该方法
结束。
[0576] 虽然已在设备的情况下描述一些方面,但清楚的是,这些方面也代表对应方法的描述,其中块或装置对应于方法步骤或方法步骤的特征。类似地,在方法步骤的情况下描述的各方面也代表对应设备的对应单元或项或特征的描述。
[0577] 本发明的分解信号能够被存储在数字存储介质上,或者能够在传输介质(诸如,无线传输介质或有线传输介质(诸如,互联网))上传输。
[0578] 根据某些实现要求,实施例的实施例能够被实现于硬件或软件。能够使用存储有以电子方式可读的控制信号的数字存储介质(例如,软盘、DVD、CD、ROM、PROM、EPROM、EEPROM或闪存)执行实现方式,所述以电子方式可读的控制信号与可编程计算机系统协作(或能够与可编程计算机系统协作)从而执行各方法。
[0579] 根据实施例的一些实施例包括具有以电子方式可读的控制信号的非暂态数据载体,所述以电子方式可读的控制信号能够与可编程计算机系统协作,从而执行这里描述的方法之一。
[0580] 通常,本发明的实施例能够被实现为具有程序代码的计算机程序产品,当计算机程序产品在计算机上运行时,程序代码用于执行方法之一。程序代码可例如被存储在机器可读载体上。
[0581] 其它实施例包括存储在机器可读载体上的用于执行这里描述的方法之一的计算机程序。
[0582] 换句话说,本发明的方法的实施例因此是一种具有程序代码的计算机程序,当计算机程序在计算机上运行时,所述程序代码用于执行这里描述的方法之一。
[0583] 本发明的方法的另一实施例因此是一种数据载体(或数字存储介质或计算机可读介质),所述数据载体包括记录在它上面的用于执行这里描述的方法之一的计算机程序。
[0584] 本发明的方法的另一实施例因此是一种数据流或信号的序列,所述数据流或信号的序列代表用于执行这里描述的方法之一的计算机程序。数据流或信号的序列可例如被构造为经数据通信连接(例如,经互联网)被传送。
[0585] 另一实施例包括一种处理装置(例如,计算机或可编程逻辑器件),所述处理装置被构造为或适应于执行这里描述的方法之一。
[0586] 另一实施例包括一种计算机,所述计算机已在它上面安装用于执行这里描述的方法之一的计算机程序。
[0587] 在一些实施例中,可编程逻辑器件(例如,现场可编程门阵列)可被用于执行这里描述的方法的一些或全部功能。在一些实施例中,现场可编程门阵列可与微处理器协作以便执行这里描述的方法之一。通常,这些方法由任何硬件设备执行。
[0588] 尽管已根据几个有益的实施例描述本公开,但存在落在本公开的范围内的改变、排列和等同物。还应该注意的是,存在许多替代的实现这些方法的方式和本发明的构成。因此,下面的所附权利要求应该被解释为包括落在本发明的真正精神和范围内的所有这种修改、排列和等同物。
[0589] 上述实施例仅用于说明本发明的原理。应该理解,这里描述的装置和细节的修改和变化将会对于本领域技术人员而言是清楚的。因此,应该仅由即将发生的专利权利要求的范围限制,而非由作为这里的实施例的描述和解释提供的特定细节限制。
[0590] 虽然每个要求仅引用一个权利要求,但本公开也包括权利要求的任何想得到的组合。