具体实施方式
在许多非易失性存储器中,从存储器阵列读取的数据可能具有错误。即,被编程到存储器阵列的输入数据的个别位稍后可能被读取为处于不同逻辑值。图1展示指示存储器单元状态的物理参数(阈值电压,VT)与存储器单元可编程到的逻辑值之间的关系。在此实例中,仅两个状态存储于单元中。因此,所述单元存储一个数据位。被编程到逻辑0状态的单元通常具有比处于逻辑1(未经编程)状态的单元高的阈值电压。在替代方案中,逻辑1状态是存储器单元的未经编程状态。图1的垂直轴指示以基于预期阈值电压分布的任何特定阈值电压来读取单元的似然性。针对被编程到逻辑1的单元展示第一似然函数,且针对被编程到逻辑0的单元展示第二似然函数。然而,这些函数之间具有某一程度的重叠。区分电压VD在读取此些单元中使用。具有低于VD的阈值电压的单元被视为处于状态1,而具有高于VD的阈值电压的单元被视为处于状态0。如图1展示,这种情况可能不总是正确的。因为函数之间的重叠,所以存在被编程到逻辑1状态的存储器单元将被读取为具有大于VD的阈值电压且因此将被读取为处于逻辑0状态的非零似然性。类似地,存在被编程到逻辑0状态的存储器单元将被读取为具有逻辑1状态的非零似然性。
函数之间的重叠由于许多原因而发生,包含存储器阵列中的物理缺陷,以及存储器阵列中以后的编程或读取操作对经编程单元造成的干扰。重叠还可能由于普遍缺乏使较大数目的单元保持在非常紧密的阈值电压范围内的能力而发生。某些编程技术可允许阈值电压的函数变窄(具有较小的标准偏差)。然而,此编程可能花费较多的时间。在一些存储器系统中,一个以上位存储在存储器单元中。一般来说,希望在存储器单元中存储尽可能多的位。为了高效地使用可用阈值电压范围,用于邻近状态的函数可使得其显著重叠。
非易失性存储器系统通常使用ECC方法来克服从存储器阵列读取的数据中所出现的错误。此些方法通常根据编码系统从待存储在存储器阵列中的输入数据计算一些额外ECC位。其它ECC方案可以更复杂的方式将输入数据映射到输出数据。ECC位通常是连同输入数据一起存储,但可单独存储。输入数据和ECC位稍后一起被从非易失性存储器阵列读取,且解码器使用所述数据和ECC位两者来检查是否存在任何错误。在一些情况下,此些ECC位还可用于识别出错的位。接着通过改变错误位的状态(从“0”变为“1”或从“1”变为“0”)来校正所述错误位。将ECC位附加到数据位并不是在将数据存储在非易失性存储器中之前对所述数据进行编码的唯一方式。举例来说,可根据提供以下变换的方案来对数据位进行编码:00到1111、01到1100、10到0011和11到0000。
图2展示正存储在存储器系统200中的输入数据的实例。输入数据首先由包含编码器203的ECC单元201接收。输入数据可以是待存储在存储器系统200中的主机数据,或可以是由存储器控制器产生的数据。图2的实例展示四个输入数据位1001。编码器203接着使用编码方案从输入数据位计算ECC位(1111)。编码方案的一个实例是产生ECC位,所述ECC位是选定的数据位群组的奇偶位。
接着将输入数据位和ECC位两者发送到调制/解调单元205,其包含调制器207。调制器207将ECC单元201所发送的数字数据转换成其被写入存储器阵列209中的形式。在一个方案中,将数字数据转换成多个存储器单元中的多个阈值电压值。因此,用于将数字数据转换成存储器单元中存储的阈值电压的各种电路可被视为形成调制器。在图2的实例中,每一存储器单元可保存一个数据位。因此,每一存储器单元可具有在两个范围中的一者中的阈值电压,一个范围表示逻辑“1”状态,且另一范围表示逻辑“0”状态,如图1中所示。存储逻辑“1”状态的存储器单元具有小于VD(<VD)的阈值电压,而存储逻辑“0”状态的存储器单元具有大于VD(>VD)的阈值电压。单元可被编程到高于VD的标称阈值电压且经验证,以确保至少在最初,被编程到所述两个逻辑状态的单元之间存在某一优选分离。
数据可存储在存储器阵列209中历时某一时间周期。在此时间期间,各种事件可能发生,以致使存储器单元的阈值电压改变。明确地说,涉及编程和读取的操作可能要求以影响其它先前经编程单元的方式向字线和位线施加电压。在装置的尺寸减小而使得邻近单元之间的相互作用显著的情况下,此些干扰是特别常见的。经过较长的时间周期,电荷也可能丢失。此些数据保持故障还可能致使数据在被读取时改变。由于此些改变,数据位可能被读出为与原始编程的数据位具有不同的状态。在图2的实例中,一个输入数据位211被读取为具有小于VD(<VD)的阈值,当所述输入数据位原始被写入时,其具有大于VD(>VD)的阈值。
通过调制/解调单元205中的解调器213将存储器单元的阈值电压转换成数据位。这是调制器所执行的过程的反过程。解调器213可包含读出放大器,其从存储器阵列209中的存储器单元读取电压或电流,且从所述读取导出所述单元的状态。在图2的实例中,具有小于VD(<VD)的阈值电压的存储器单元给出经解调的输出“1”,且具有大于VD(>VD)的阈值电压的存储器单元给出经解调的输出“0”。这给出如图所示的输出序列11011111。此序列的第二个位208由于存储在存储器阵列209中而出错。
将解调器213的输出发送到ECC单元201中的解码器215。解码器215从数据位和ECC位确定是否存在任何错误。如果存在较小数目的错误(在码的校正能力内),那么所述错误被校正。如果存在较大数目的错误,如果它们在码的检测能力内,那么所述错误可被识别但不能被校正。如果错误的数目超过码的检测能力,那么所述错误不能被检测,或可能导致错误的校正。在图2的实例中,第二个位中的错误被检测且被校正。此提供来自解码器215的输出(1001),其与输入序列相同。存储器系统200的解码被视为硬输入硬输出解码,因为解码器215仅接收表示输入数据位和ECC位的数据位,且解码器215输出对应于输入数据位的经校正的数据位序列(或如果错误的数目过高,那么无法给出输出)。
图3和图4中展示存储器系统200的替代存储器系统。图3展示与图1的VD=0且低于VD的阈值电压表示逻辑0且高于VD的电压表示逻辑1的函数类似的函数。代替于展示将阈值电压分成两个不同范围的单个电压VD,此处阈值电压由实际电压数字来指示。对应于逻辑“1”的函数的中心高于0伏,且对应于逻辑“0”的函数的中心低于0伏。
图4展示存储器系统421,其使用类似于具有不同读取过程的存储器系统200(使用相同的输入数据位和ECC位)的数据存储过程的数据存储过程。明确地说,代替于简单地确定阈值电压是高于还是低于特定值,存储器系统421读取阈值电压,如图3中所示。将理解,不一定读取实际阈值电压。可使用其它单元操作方法来存储和检索数据(例如,电流感测)。电压感测仅用作一实例。通常,阈值电压指代晶体管以之接通的栅极电压。图4展示比先前实例提供更详细信息的读取发生。此读取可被视为具有比图2的读取高的分辨率(和分解比用于编程的状态多的状态的分辨率)的读取。如在先前实例中,错误出现在读取数据中。此处,对应于第二和第三个位的读数出错。第二和第三个位为逻辑“0”,且通过将单元编程为以具有小于VD的阈值电压而存储,但单元被读取为具有0.05伏和0.10伏的阈值电压,其高于VD(VD=0伏)。
通过一系列读取操作从图4的存储器阵列423读取的原始电压被发送到调制/解调单元427中的解调器425。所述原始电压具有由模拟到数字转换的分辨率规定的有限分辨率。此处,将原始数据转换成似然性数据。明确而言,将每一单元读数转换成对应位为一或零的似然性。来自存储器阵列的读取系列(0.75、0.05、0.10、0.15、1.25、1.0、3.0和0.5伏)不仅可指示单元的状态,而且可用于提供关于所述状态的确定性程度。这可表达为存储器单元被以特定位编程的似然性。因此,接近0伏的读数可给出较低的似然性值,而较远离0伏的读数给出较高的似然性值。所示的似然性值是对数似然比率(下文详细阐释)。这针对处于逻辑0状态的单元提供负数,且针对处于逻辑1状态的单元提供正数,其中数字的量值指示状态被正确识别的似然性。第二和第三似然性值(0.1、0.2)指示逻辑“1”。第二和第三值指示相当低的似然性。
将似然性值发送到ECC单元431中的解码器429(在一些情况下,从原始值获得似然性值可被视为在解码器中执行)。ECC单元431还包含编码器432。解码器429对似然性值执行解码操作。此解码器可被视为软输入解码器。一般来说,软输入指代包含与待解码的数据有关的一些质量信息的输入。作为软输入而提供的额外信息通常允许解码器获得更佳的结果。解码器可使用软输入来执行解码计算,以提供计算出的似然性值作为输出。所述输出被视为软输出,且此解码器被视为软输入软输出(SISO)解码器。此输出接着可再次被用作对SISO解码器的输入,以迭代所述解码并改进结果。SISO解码器可形成向另一单元提供硬输出的较大解码器的一部分。SISO解码器通常提供较佳的性能,且在一些情况下,可提供比用硬输入硬输出解码可能实现的性能更佳的性能。明确地说,对于相同量的额外开销(ECC位的数目),SISO解码器可提供更大的错误校正能力。为了高效地使用SISO解码器,可实施合适的编码/解码方案,且解调适合于高效地获得软输入而无过度复杂性且从存储器阵列读取数据无需过多时间。
在一个实施例中,通过以分解比对存储器进行编程中所使用的状态更大数目的状态的分辨率读取非易失性存储器阵列中的数据,来提供用于SISO解码器的软输入。因此,可通过将存储器单元编程到两个阈值电压范围中的一者来写入数据,且随后通过分解三个或三个以上阈值电压范围来读取所述数据。通常,读取中所使用的阈值电压范围的数目将是编程中所使用的阈值电压范围数目的某一倍数(例如,两倍那么多)。然而,情况并不总是这样。
ECC单元可形成为专用电路,或此功能可由控制器中的固件执行。通常,控制器是专用集成电路(ASIC),其具有为特定功能(例如ECC)而设计的电路,且还具有用以管理控制器操作的固件。因此,编码器/解码器可由存储器控制器中的硬件与固件的组合形成。编码器/解码器(ECC单元)可替代地位于存储器芯片上。调制/解调单元可位于存储器芯片上、控制器芯片上、单独的芯片上或某一组合上。通常,调制/解调单元将包含存储器芯片上的至少一些组件(例如,连接到存储器阵列的外围电路)。虽然图4指示阈值电压被读取达到较高分辨率(模拟读取),但所选分辨率的程度可取决于包含所使用的非易失性存储器的类型在内的许多因素。
图5展示ECC单元431(尤其是解码器429)的更详细视图。解码器429包含SISO解码器532和软-硬转换器534。SISO解码器通常接受原始似然性数据,且对原始似然性数据执行ECC计算,以提供计算出的似然性数据。计算出的似然性数据可被视为软输出。在许多情况下,此软输出接着被提供为对SISO解码器的输入,使得第二解码迭代被执行。SISO解码器可执行相继迭代,直到实现至少一个预定条件为止。举例来说,预定条件可以是所有位都具有大于某一最小值的似然性。预定条件还可以是似然性值的集合,例如平均似然性值。预定条件可以是从一个迭代到下一个迭代的结果的收敛(即,保持迭代,直到只有很小的改进来自额外迭代为止)。预定条件可以是完成预定数目的迭代。还可使用这些条件的组合。使用作为在数据被存储之前编码器432对所述数据执行的解码的结果的数据中的经编码模式来执行解码。编码器432和解码器429两者都被视为ECC单元431的部分。
高效的解码取决于具有合适的编码/解码方案。用于以适合SISO解码器(例如SISO解码器532)中的后续解码的方式对数据进行编码的各种方案是已知的。编码/解码方案包含(但不限于)涡轮码、乘积码、BCH码、瑞得一赛勒曼码(Reed-Solomon code)、卷积码(见第11/383,401号和第11/383,405号美国专利申请案)、汉明码和低密度奇偶校验(LDPC)码。标题为“用于非易失性存储器的软输入软输出解码器(Soft-inputsoft-output decoder for nonvolatile memory)”的第11/536,286号美国专利申请案和标题为“用于非易失性存储器的软输入软输出解码方法(Methods of soft-input soft-outputdecoding for nonvolatile memory)”的第11/536,327号美国专利申请案中提供LDPC码和涡轮码以及其可如何与SISO解码一起使用的详细描述,上述两个美国专利申请案都是在2006年9月28日申请的。
在一些情况下,可收集关于ECC解码器所进行的校正的统计资料。此些统计资料可用于在存储器阵列的操作参数中作出调整。2006年9月28日申请的第11/536,347号和第11/536,372号美国专利申请案描述具有经调整的操作参数的非易失性存储器系统和用于调整此等参数的方法。
非易失性存储器的可被调整的操作参数的一个实例是经编程存储器状态之间的区分电压。图6展示被编程到逻辑1和被编程到逻辑0的单元的读取阈值电压的似然函数635a、635b。在提供较大数目的错误的位置处展示第一区分电压VD,因为具有高于VD的阈值电压的任何单元都被视为被编程到逻辑0,但如图6所述,存在此单元实际上被编程到逻辑1的显著似然性。使用VD作为区分电压意味着相当大数目的单元被读取为处于逻辑0,但它们是被编程到逻辑1。此些数据位通常由ECC校正。被编程到逻辑0的单元将被读取为具有逻辑1的似然性非常低,所以此些位的ECC校正是罕见的。因此,在此情况下,ECC解码器将执行的0到1校正比1到0校正多。
在逻辑1函数与逻辑0函数相交的阈值电压处展示第二区分电压VD′。因此,在单元具有阈值电压VD′处,单元被编程到逻辑1的似然性与被编程到逻辑0的似然性相等。这对于区分电压来说是最佳位置。即使在区分电压位于VD′的情况下,也存在单元的阈值电压将指示错误的逻辑状态的某一似然性。然而,所述似然性较低,且被编程到逻辑0的随后被读取为具有逻辑1的单元的数目等于被编程到逻辑1的随后被读取为具有逻辑0的单元的数目。当区分电压并不位于其最佳值(例如,位于VD)时,可能希望调整所述区分电压,以使其到达其最佳值(例如VD′),或至少使其较靠近其最佳值。检测区分电压并非位于其最佳值的一种方式是来自ECC解码器对对应于区分电压的任一侧上的存储器状态的位所进行的校正。
ECC解码通常可根据在区分的任一侧上的逻辑状态之间所作出的校正的数目来指示区分电压是否位于最佳位置。如果区分电压并非位于其最佳位置,那么ECC解码可指示(根据来自区分电压任一侧上的状态的校正的数目)区分电压应移动的方向。ECC解码还可根据相应的校正数目而指示与从较低状态到较高状态的校正相比,应从较高状态(在此实例中为逻辑0)向较低状态(在此实例中为逻辑1)将区分电压移动多少。可使用合适的电路来根据使用初始区分电压对读取的数据的ECC校正而确定是否应调整区分电压。如果将作出此些调整,那么所述电路可指示应在哪一方向上调整它们,且还可指示应将它们调整多少。
虽然图6仅展示表示所存储数据的一个位的两个经编程状态,但在一些配置中,可将存储器单元编程到表示所存储数据的一个以上位的三个或三个以上状态。图7A展示存储器单元的阈值电压范围(阈值窗口)被分成个别地表示经编程状态的八个子范围的实例。三个数据位存储在此一单元中。在将单元的阈值电压与七个区分电压Va到Vg相比的第一遍读取(R1)期间,单元被读取为位于八个子范围737a到737h中的一者中。区分电压Va到Vg位于预期相邻状态的似然函数将相交的位置处。除将单元的阈值电压与区分电压Va到Vg进行比较之外,在第二遍读取(R2)中还将阈值电压与中间电压Vh到Vo进行比较。中间电压Vh到Vo在区分电压Va到Vg之间,且在第一遍读取R1的每一子范围737a到737h内提供进一步分辨率。使用在子范围737a到737h内进一步分解的额外中间电压Vp到Vee来执行第三遍读取(R3)。在一些情况下,可执行更多遍的读取来实现较高分辨率。两遍或两遍以上读取的结果可用于提供存储器单元的具有较高分辨率的阈值电压。这可被视为一种形式的模拟到数字转换。每一读取的结果可锁存在寄存器中,所述寄存器形成为存储器阵列的外围电路。当已执行了所有的必要读取时,使用寄存器的内容来提供发送到其它电路(例如ECC解码器)的阈值电压值(或均等物)。或者,可将来自每一读取的输出从存储器芯片发送到在执行模拟到数字转换的其它地方(例如,控制器ASIC中)的电路。发送此数据可与进一步读取并行完成以获得效率。
在一些存储器系统中,可响应于ECC校正而作出其它调整。举例来说,在使用查找表来使阈值电压与和特定位相关联的概率值相关的情况下,可调整所述查找表,以平衡从一个状态到另一状态的校正的数目。因此,根据ECC校正的观察而动态地更新阈值电压与概率的相关。
如同图6的双状态存储器单元一样,可调整图7A的实例中的区分电压以平衡邻近状态之间的校正。举例来说,可调整区分电压Vc,使得从100状态到101状态的校正的数目与从101状态到100状态的校正的数目更均等。一般来说,在区分电压被调整的情况下,第二遍读取R2和第三遍读取R3的中间电压也被调整。通常,此些中间电压以一模式布置,以获得关于单元的阈值电压的有用信息。此信息可用于提供关于存储器单元的状态的概率值。执行单独遍的读取(例如R1、R2和R3)并不总是必要的,且在一些情况下,将单个电压比较序列执行为包含区分电压和中间电压的单次读取。在另一实例中,可执行二进位搜索。
因为图7A的实例中存在两个以上存储器状态,所以ECC所进行的校正以及对此校正的分析可能较复杂。仅监视从1到0和从0到1的位的校正的数目通常是不够的。在每单元三个位的情况下,1到0校正比0到1校正多可能意味着在一些情况下应增加区分电压,或在其它情况下应减小区分电压,视位到存储器状态的映射而定。举例来说,为了调整100状态与101状态之间的区分电压,仅需要考虑最低有效位的校正,因为其它位对于这两个状态是相同的。从0到1的校正的数目高于从1到0的校正的数目(对于具有1和0作为较高位的单元中的最低有效位)将指示阈值电压Vc过高且应降低。统计单元可相对于用于表示经校正位和未经校正位的存储器状态而跟踪校正,使得可进行适当的调整。
图7B展示围绕区分电压Vreadn而布置的中间读取电压V1到V6的模式的一个实例。明确地说,图7B展示在Vreadn的任一侧上处于电压差δ处的中间电压V1和V2、在Vreadn的任一侧上处于电压差2δ处的中间电压V3和V4以及在Vreadn的任一侧上处于电压差3δ处的中间电压V5和V6。单元的阈值电压可在如图7A中的具有增加分辨率的读取中与Vreadn和V1到V6进行比较,或可以增加或减小电压的次序或以任一其它便利次序进行比较。通常,在Vreadn被调整以平衡邻近状态之间的ECC校正的情况下,中间电压V1到V6将经相应地调整以维持从Vreadn的相同偏移。
可根据ECC解码器所进行的校正而在任一方向上进行对区分电压的调整。因此,与特定经编程状态相关联的阈值电压范围可变宽或变窄,且可电压上移或电压下移。一般来说,在快闪存储器中,用于特定经编程状态的似然函数随着存储器使用而变宽。图8展示用于同一单元的两个似然函数839a到839b,函数839a展示随阈值电压VT而变的似然性的寿命分布的开始,且函数839b展示随阈值电压VT而变的似然性的寿命分布的结尾。如图所示,寿命分布的开始839a比寿命分布的结尾839b窄。将理解,来自存储器单元的真实数据展示与图8的分布类似的分布,其中y轴指示以不同阈值电压读取的单元的数目。在本描述内容中,似然性用于y轴。
图9A和图9B中展示处理与经编程存储器状态相关联的似然性分布随存储器被使用而加宽的一种方式。图9A展示与存储器寿命中早期的四个经编程状态相关联的四个似然性分布941a到941d。区分电压V7、V8和V9位于分布941a到941d之间。图9A展示邻近分布941a到941d之间无显著重叠,指示在此情况下使用较大的裕度且误读单元的可能性较低。
图9B展示与同一单元在存储器寿命中单元已经历许多存储器操作(例如读取、编程和擦除)之后的较晚阶段的相同四个经编程状态相关联的似然性分布943a到943d。分布943a到943d与分布941a到941d相比已变宽,且展示某种重叠,使得可能存在误读所存储数据的显著似然性。区分电压V7到V9用于如前所述区分存储器状态。因此,存储器状态仍映射到相同的阈值窗口(V10到V11),且个别存储器状态仍映射到阈值窗口V10到V11内的相同子范围。在分布继续变宽的情况下,在某一点处,从存储器读取的数据中错误的数目超过ECC解码器的能力,且存储器不再可用。在此实例中,最初以提供大于所需的裕度的电平来设置区分电压V7到V9。这在存储器寿命中始终使用阈值窗口V10到V11。然而,使用此较宽阈值窗口可能不必要地对存储器造成压力,因为需要较高的电压来将存储器单元编程到较高阈值窗口,例如在V9与V11之间。
图10A和图10B展示最初使用较小的阈值窗口V15到V16且在存储器寿命的后期使用较大的阈值窗口V15′到V16′的替代布置。最初,存储器单元状态映射到较窄的阈值窗口(总阈值电压范围)V15到V16,且随后存储器单元状态映射到较宽的阈值窗口(总阈值电压范围)V15′到V16′。图10A展示比图9A的类似存储器状态941a到941d更靠近在一起的四个存储器状态的似然函数1045a到1045d。这是向较靠近在一起而布置的目标电压编程的结果。编程目标电压是编程操作期间存储器单元被验证为实现的存储器单元阈值电压(通常,一旦存储器单元被验证为达到目标电压,就禁止对所述单元的进一步编程,而其它单元被进一步编程)。编程目标电压(明确地说,最高编程目标电压)比图9A中低,所以编程电压(例如,分别向“与非”存储器中的选定字线和未选定字线供应的Vprog和Vpass)可减小。区分电压V12到V14在读取期间为每一存储器状态界定较窄的阈值电压子范围。因此,存储器状态所映射到的阈值窗口V15到V16在此实例中比阈值窗口V10到V11窄。
在存储器已投入使用某一时间之后,似然函数变得较宽,从而产生图10B的似然函数1047a到1047d。因此,如果编程目标电压和区分电压保持相同,那么似然函数之间将出现高度重叠,且将导致较大数目的错误。为了克服此问题,图10B展示与区分电压V12到V14相比间距更宽的经调整的区分电压V12′到V14′。在图10B中,与存储器状态早期所映射到阈值窗口(V15到V16)相比,所述存储器状态映射到较宽的阈值窗口(V15′到V16′)。因此,图10A和图10B的存储器通过增加存储器状态所映射到的总阈值电压范围来补偿个别存储器状态的变宽的似然性分布。此方案的一个优点是在存储器寿命的早期,使用较低的电压来进行编程和读取,且这些较低电压对正被读取和编程的存储器单元造成较小压力。此些减小的压力可减慢存储器单元的耗损,且增加产品寿命。将存储器状态重新映射到阈值窗口可包含调整编程目标电压以及读取电压。随着存储器系统用完其寿命,编程目标电压的间距越来越宽。
图10A和图10B展示读取操作期间所使用的区分电压V12到V14和V12′到V14′,但还可使用其它读取电压来给出如上文所述的在与存储器状态相关联的阈值电压子范围内分解的高分辨率读取。通常,编程目标电压和读取电压全部可根据预定方案一起被调整,或可以响应性方式(例如响应于来自ECC解码器的信息)而个别地调整。调整可贯穿存储器的寿命以较小的增量发生,或可在存储器寿命期间仅发生有限的次数。在一个实例中,读取电压和编程目标电压响应于数据质量处于阈值等级的确定而增加预定的量。举例来说,所述阈值等级可取决于所需校正的数目、迭代解码器所进行的迭代的数目或当执行高分辨率读取时存储器状态的概率值。
在另一实例中,可响应于被执行的擦除操作的阈值数目而作出调整。在擦除计数针对每一区块而维持的情况下,当到达某一擦除计数时,用于区块的编程和读取电压可改变。在此系统中,不同区块使用不同的编程和读取电压,且存储器系统使用区块内的额外开销位或控制器所维持的表,或使用专用电路、控制器的一部分或其它合适结构以某一其它合适方式来跟踪哪一区块具有经调整的电压。此系统不一定具有确定数据质量的ECC解码器。
读取电压和编程目标电压可随存储器的寿命而一起改变。然而,可在不改变目标电压的情况下对读取电压作出某些改变。举例来说,可在总体校正速率可接受的情况下对区分电压作出改变,以平衡邻近状态之间的错误校正。
一般来说,当读取电压被调整时,其保持于经调整的电压,直到作出随后的调整为止。然而,在一些情况下,可能希望在读取电压中作出临时调整。举例来说,在数据被从存储器读取且被发现具有较差质量(例如,较低概率值或由ECC指示的较高错误数目)的情况下,可以由对较差质量数据的ECC校正所确定的方式来调整一个或一个以上读取电压,且可再次读取所述数据。这可允许获得较佳质量的数据,使得所述数据可被解码。然而,可能没有必要使此些读取电压保持在其经调整的电平。此方案可用于从存储器检索原本无法检索的数据。通常,接着将此数据重新写入到另一位置,使得其不再进一步降级。接着擦除原始区块。这可以是由存储器控制器进行的刷洗(scrub)操作的一部分,或可作为常规读取操作的一部分而发生(例如,响应于主机读取命令)。编程目标电压在此类调整期间通常保持不变。第5,657,332号和第6,751,766号美国专利中给出错误处理的实例。
图11展示根据本发明一实施例的存储器系统1149,其包含ECC模块1151,ECC模块1151具有ECC编码器1153、ECC解码器1155和统计单元1157。统计单元1157收集关于ECC解码器1155所进行的校正的统计信息。ECC解码器1155可包含SISO解码器或硬输入硬输出解码器,或可包含上述两种解码器。在一个实例中,SISO解码器与硬输入硬输出解码器串联(统计单元可收集关于上述两种解码器所进行的解码的统计资料)。可使用两个编码方案,例如用于SISO解码的LDPC码和用于硬输入硬输出解码的BCH码。统计单元可收集指示数据的总体质量的统计资料,且所述统计资料还可指示ECC解码系统所进行的校正的数目,或可指示不同存储器状态之间的校正的比率。向调制/解调电路1161中的调整单元1159提供统计单元的输出。调整单元1159对调制器1163在将数据编程到存储器阵列1167中所使用的操作参数(例如,用于特定存储器状态的目标电压)和解调器1165在从存储器阵列1167读取数据中所使用的操作参数(例如,读取电压)作出适当的改变。
上述各个实例涉及快闪存储器。然而,各种其它非易失性存储器目前也在使用中,且本文所描述的技术可应用于任何合适的非易失性存储器系统。此些存储器系统可包含(但不限于)基于铁电存储的存储器系统(FRAM或FeRAM),基于磁阻存储的存储器系统(MRAM)以及基于相变的存储器(PRAM或“双向统一存储器(OUM)”)。
本文所引用的所有专利、专利申请案、文章、书籍、说明书、其它公开物、文献等都特此出于所有目的以全文引用的方式并入本文中。在一个术语在所并入的公开物、文献等中的任何一者与本文献的文本之间的定义或使用中存在任何矛盾或冲突的情况下,所述术语在本文献中的定义或使用应占优。
尽管已相对于某些优选实施例而描述了本发明的各个方面,但应了解,本发明有权在所附权利要求书的整个范围内受到保护。