双重误差校验码系统 【发明背景】
总的来说,本发明有关基于处理器的系统和基于处理器的系统中的内存,具体的,有关纠正储存于这些系统中的数据的系统。
在电子系统中,数据可以存储在内存中,在某些情况下,在存储或传输期间,数据可能会发生损坏。因此,希望能够确定数据是否损坏,如果可能,希望能纠正损坏的数据。已经开发出了附加在所存储数据中的误差校验码。在读取数据时,利用一个判据来确定所读取的这个数据是否是正确的。该判据是基于附加的误差校验码。在某些情况下,如果存储的数据是错误的,数据可以被纠正。
例如,一种常规的误差校验码是汉明码。标准的汉明码只有纠正单一错误的能力,最多能发现双重错误。如果双重错误被发现,这就意味着数据损坏了,一般来说,除了重复发送数据外,没有其它方法能够纠正错误。结果是数据必须重新发送,拖延了系统的运行并且消耗资源。
简单地重复发送数据并不能解决在硬错误的情况下所出现的问题。当数据被错误地调制(例如,由于噪音的原因)时,会产生硬错误。因而,需要一种前向误差校验系统以减少数据地重复发送。
如果能够纠正被发现的双重错误,至少在某些情况下,可以减少重复发送数据的频率,增加系统的速度和减少因双重错误而产生的系统负荷。
因此,有必要找到与误差校验码有关的纠正双重错误的方法。
附图概要
图1是本发明一个实例的逻辑描述;
图2是本发明一个实例的流程图;
图3是本发明另一个实例的流程图;
图4是本发明另一个实例的流程图;
图5是图4流程图的续图;
图6对单独使用汉明码和使用本发明实例进行了比较;
图7是本发明一个实例的示意图。
发明详述
如图1所示,用于误差纠正的数据单元10的逻辑描述包括在水平方向延伸的行12(用字母R表示)和横向的列(用在C方向延伸的箭头表示)。因而,数据单元10可以看作带误差校验行12和误差校验列的二维数据结构。然而,在本文中的“误差校验行”和“误差校验列”术语不是指逻辑上的行和列,与常规存储设备上的物理行和列无关。
单元10包含一些行12和列。除了最后的行12c,所有的行12都包含用户数据。因此,在一个实例中,行12a和行12b是用户行,行12c可以是奇偶校验行。奇偶校验行12c包含奇偶校验数据。每一个行12,包含用户行12a和12b以及奇偶校验行12c,都包含一些用户位16和汉明校验位18。
当然,我们希望图1的描述是纯粹的逻辑示意图,位16和位18可以以任何物理形式储存在存储介质中。此外,尽管我们参考的是汉明校验位18和奇偶校验行12c,本发明的一些实例中仍然可能使用了其它的误差校验算法。因此,可以在行12中使用汉明校验位18,在列中使用其它误差校验算法,并在本发明的一些实例中使用一个奇偶校验行,该行使用不同于汉明校验位的误差校验算法。在本发明的另一个实例中,可以使用不同于汉明和奇偶算法的算法。
汉明方案是在固定数量的数据上操作的。即,在例证实例中,在行12上使用汉明码。在每一个行12上的汉明校验位18保护每行上的16个用户位。每一个行12实现了一个单误差校验,双重错误检测方案。奇偶行12c就象用户行12a和12b一样被汉明码检查处理。也就是说,按本发明的一个实例,如奇偶行12c上的18所表示的那样,奇偶校验位也受汉明码保护。
误差校验方案并不完美,很小部分的错误会躲过任何方案的检查,或者被检测到但没有纠正或没有被检测到。如果在任意一个行12中出现两个错误,在没有更多的信息时,汉明方案只能侦测到错误而不能纠正它,因为这个方案没有办法知道这两个错误在行12的什么地方。换句话说,汉明算法知道有错误但是因为无法定位而不能纠正错误。
奇偶行12c中的每一位都是被编排好的,所以,正如所期望的那样,列C的权(即:1的数量)应该为偶数或奇数。因而,每一个列C实现了一个奇偶校验方案。借助于奇偶行12c,可以被定位并从而修复误差校验行12上的双重错误。
在一个实例中,所有的单误差都可以被纠正,如果有双重误差,则随后可以纠正该双重误差。因此在一些实例中,可以使用两次检查。在第一次检查时纠正所有的单一错误,在第二次检查时纠正单一的双重错误。由于常规系统中双重错误的出现将导致数据损坏,这个方案与现存的方案相比有相当的优势。
如图2所示,一开始,双重误差校验运算方法20判断是否在任何行上有两个错误,如菱形框22所示。如果有,则检查奇偶行12c,如方框24所示。利用奇偶行12c,确定有错误的列,如方框26所示。然后,一旦它们的位置被定位,这些错误可以被修正,如方框28所示。
如图3所示,一开始,编码算法30判断缓冲区中是否接收到了数据,如菱形框32所示。数据可能串行或并行地到达一个单元10大小的数据缓冲区。当接收到相当一个行大小的数据时,汉明校验位18将被计算并被发送到缓冲区,如方框34所示。当所有的用户行12都被接收到并且各自的汉明校验位18都已被计算,则计算并保存奇偶行12c,如菱形框38和方框40所示。最后,奇偶行12c的汉明校验位被计算和保存在缓冲区中,如方框42所示。
数据单元10现在可以被写入存储介质。例如对于闪存,一个内置状态机可以开始其从数据缓冲器写数据单元10到闪存单元的算法。如方框44所示。
在另一个实例中,在接收行数据和计算汉明校验位的同时,计算奇偶位。在接收行12时,在包含锁存器和反馈逻辑的时序电路中可以得到每一列的累积加权。这样,在接收并存储了最后的用户行12之后,立即可以将奇偶行12c写入缓冲区。
参照图4,一开始,译码算法从存储介质(例如闪存排列)读取数据单元10,如方框52所示。每一个行12都被送到一个误差校验码解码器(ECC),以纠正单一的错误,如方框54所示。如果发现一个错误,如菱形框56所示,将检查此错误是否为单一错误,如菱形框58所示。如果是,则如方框60所示,利用包含该错误的行12的汉明方案,可以立即纠正该单一错误。随后,如方框62所示,保存该纠正后的数据。
如果该错误不是单一错误,那么将检查其是否为双重错误,如菱形框64所示。如果是,则将行号保存在一组名为错误地址累加器的锁存器中,如方框66所示。同时一个错误计数器被递增,如方框68所示,其目的是记录包含双重错误的行的行号。如果错误既不是单一的也不是双重的,将产生一个错误信息,如方框65所示。
同时进行解码过程,单元10的垂直方向奇偶位被计算和累加。最后被读取的行12是奇偶行12c,该行是在先前的编码阶段保存的。如果有必要,奇偶行12c也是经汉明校验的,并且其数据与其它块一起被积累而生成奇偶校正码。
随后,如菱形框70所示,判断是否已处理了最后的行和列。如果是,继续执行图5,如方框72所示。
参照图5,如方框74所示,检查错误计数器和地址累加器,判断是否有单个的行包含一个双重错误。在菱形框76中,如果没有双重错误,奇偶校正码将被设为0,如方框78所示。如果只有一行包含双重错误,如菱形框80所示,则相应位的位置反映在奇偶校正码上,如方框84所示。否则将产生一个错误信息,如方框82所示。因为行号保存在错误累加器中,这个方案可以知道那一行包含了双重错误。从而,如先前描述的那样,奇偶校验码和错误地址累加器使得双重错误能被纠正。
利用本发明的实例,可以纠正双重错误。汉明方案只有有限的错误纠错能力。然而,汉明纠正系统的编码和解码简单性使它在许多应用场合都极具吸引力。汉明方案是可配置的,以具备各种各样的纠错能力,但是,以相同数量的用户位所需的附加校验位的数量来衡量,汉明方案的成本将随着纠错能力的增加而增加。在本发明的一些实例中,通过使用两维纠错,在单元10的每行中提供附加的双重误差校正,纠错能力可以被大幅度提高。
如图6所示,利用二维误差校验方案,ECC之后的记录误差率明显降低。在例证实例中,单元10有65个行12和一个奇偶行12c,每一个行包括72个位16和位18。图中显示了分别使用简单汉明纠错方案和本发明的一个实例,ECC后的错误率(由N位中有一个错误来表示,其中N是错误率)与ECC前的错误率之间的函数关系。在相近成本下,后者陡峭的斜线显示其纠错能力远大于单独使用汉明。因为两条线分叉,当使用ECC前的错误率增加时,这一点尤为明显。在百万分(在X轴上的6)之一的输入错误率上,本发明的一个实例所提供的输出错误率四倍数量级优于单独使用汉明。
在本发明的一些实例中,其它误差校验方案(如Bose-Chaudhuri-Hocquenghem(BCH)码)在相似成本上提供的纠错能力与本方案类似。不过,在一些实例中,它们在译码方面更为复杂,可能需要好几万的门电路和其它的专用器件,并且经常需要几百个处理器周期。在本发明的一些实例中,达到了低成本,复杂性和纠错能力的好的折衷。
本发明可以应用于一系列包括闪存在内的内存。在一些实例中,由于提高了误差校验能力,每个单元中的比特数更多了。例如,可以使用本发明的实例,实现每单元4位的闪存。
最后如图7,举例说明了按本发明的一个实例的硬件系统90。其中缓冲器96被缓冲地址发生器92和接收复位(RST)信号和开始信号的解码器94所控制。一个读取(RD)信号被送给一个双重错误地址累加器100。该双重错误地址累加器100保存了具有双重错误的任何行的地址。列奇偶校验累加器102保存了每列的列奇偶数据。双重错误纠错单元104执行双重误差校验。编码和解码由ECC编码/解码器106执行。编码/解码器106接收时钟信号(CLK),数据,读(RD)信号和写(WD)信号。一个双重错误计数器98记录双重错误的数量。当校正了单个错误和任何双重错误之后,缓冲器96传输该数据,以便在存储器108中保存。
尽管此处只参照有限数量的实例描述了本发明,但本技术专业人员可以对其进行许多改动。这意味着附加的权利要求包含所有的在本发明的本质和范围内的这类修改和更改。