具体实施方式
存储器系统
图1示意性例示适合于实施本发明的存储器系统的主要硬件组件。存储器系统90通常通过主机接口与主机80一起操作。存储器系统通常是存储卡或者嵌入的存储器系统的形式。存储器系统90包括与存储器控制器100协作的存储器200。存储器200包括分布在一个或多个集成电路芯片上的非易失性存储器单元的一个或多个阵列210。每个存储器阵列210具有在可由字线和位线分别经由行解码器220和列解码器230访问的行和列中布置的存储器单元201。一组感测放大器240允许相应组的存储器单元经由其位线被并行感测。相应组的数据锁存器250与该组感测放大器240协作以临时存储从存储器读取的数据或者存储要被写到存储器的阶段数据。在并行操作中,一次锁存一页数据。I/O电路通常允许串行数据移入该组数据锁存器250中或从该组数据锁存器250中移出。
通常体现为状态机的芯片上控制器270用于控制存储器阵列和外围电路的基础操作。基础编程和读取以及擦除操作由该状态机控制。
存储器控制器100包括接口110、处理器120、可选的协处理器121、ROM122(只读存储器)、RAM130(随机存取存储器)和可选地可编程的非易失性存储器124。接口110具有将控制器接口到主机的一个组件112以及接口到存储器200的另一组件114。固件123被存储在由ROM122和可选地可编程的非易失性存储器124提供的存储器中。固件提供用于处理器120实现控制器100的功能的代码。而且,本发明的各个特征优选地被实现在固件123中或者与芯片上控制器270的状态机组合实现。错误校正码可以由担当ECC编码器和解码器的处理器120或者可选的协处理器121来处理。在一个替换实施例中,在主机内实现控制器100的较简单的实施例。
MLC存储器的例子
图2(A)-2(D)例示能够每单元存储两位的示例MLC存储器。该存储器中的存储器单元可以被编程到从VMIN跨度到VMAX的阈值电压窗中的一个范围的阈值电压中的任意阈值电压。单元的阈值电压随着增加的编程而增加。在此2位例子中,阈值窗被三个参考或分界电压V1、V2和V3划分为四个电压带。这四个电压带是从VMIN到V1、从V1到V2、从V2到V3以及从V3到VMAX。
图2(A)示意性例示作为对于快闪单元的集合的读取阈值电压的分布的单元电压分布(CVD)的柱状图。单元的读取阈值电压统计地分布在其各自的电压带的中心的周围。
当根据这样的划分方案将数据实际存储(编程)在存储器中时,三个分界电压V1、V2和V3是所谓的“硬”参考阈值或者“整数”参考阈值。这些参考阈值将阈值窗划分为由两个硬位“较高位、较低位”或者“HB2、HB1”编码的四个电压带。
由于历史原因,向快闪单元写数据被称为“编程”该快闪单元。这通过以下来完成:向该单元施加电压脉冲,以将来自单元的硅衬底的电子经过单元的氧化物层注入到单元的浮置栅极中,直到该单元的阈值电压高于与期望的位样式的表示相关联的“验证”电压电平为止。(该验证电压电平被称为“验证”电压电平是因为对单元编程包括验证该单元的阈值电压超过此电平。)在许多实现方式中,验证电压电平处于从整数参考阈值的正偏移,以便将读取阈值电压放置在与被编程的验证电压相比较低的电压,从而为单元松弛现象留出空间,以便在编程之后单元的读取阈值电压降低。
VMIN和V1之间的阈值电压被认为是“被擦除”或“E”状态,并且由位样式“11”表示。V1和V2之间的阈值电压被认为是第一被编程状态“A”并且由位样式“01”表示。V2和V3之间的阈值电压被认为是第二被编程状态“B”并且由位样式“00”表示。V3和VMAX之间的阈值电压被认为是第三被编程状态“C”并且由位样式“10”表示。通常,每单元m位的存储器的电压窗被2m-1个分界划分为2m个电压带。其他编码方案也是可能的。例如,在具有如图2(A)中的阈值电压分布的2位存储器的m=2的例子中,如果位样式“01”和“10”互换,可以得到另一方案。
在其中每个存储器单元存储m位数据的MLC存储器中,用p个感测放大器并行读取一组存储器单元。读取单元是为了确定该单元的已编程阈值与2m-1个电压带中的哪个有关。存在两种方式来读取该组存储器单元。
第一方式是“全序列读取”。通过比较多达阈值窗中的所有2m-1个参考电压,确定包含单元的阈值的电压带。一旦包含单元的已编程阈值的带被找到,在给出位编码方案的情况下,可以获得该单元的所有m位。
图2(B)例示具有如图2(A)中的阈值电压分布的2位存储器的全序列读取。被读取的单元的已编程阈值与多达所有的读取单元电平V1、V2和V3比较,以便查找其处于哪个电压带。当并行读取一组存储器单元时,获得两个逻辑页。较低逻辑页将由该页的每个单元的HB1构成,并且较高逻辑页将由该页的每个单元的HB2构成。
通常,对于m位存储器,当并行读取一组单元时,在全序列读取操作中获得m个二进制页。但是,全序列读取对数据锁存器有要求,因为它们必须具有足够的容量来缓存所有的m位。
第二方式是“逐步”读取。通常优选地具有其中一次用位样式的一个位来编程快闪存储器的编程和编码方案。例如,HB1的较低页首先被编程。在这之后稍后是HB2的较高页。
为了读回,位样式将通过“逐步位读取”方法来读取。通过多遍读取逐个位地读取位样式,每遍仅比较2m-1个参考电压中的一些比较。读取存储了m位的位样式的单元需要m个这样的遍。在每遍读取时,从组的单元的每个单元读取一位。
实质上,以参考阈值形式的读取阈值被布置为分阶二进制树,将阈值窗划分为多个阶(stage)的间隔截断(interval chopping)。在每遍读取时,相对于分阶二进制树的一阶的读取阈值的子集,确定单元的已编程阈值。在每遍读取时,仅读出该组的每个单元的m位中的一位。在m遍读取中,访问该分阶二进制树的所有m阶,并且读出该组的每个单元的所有m位。因此,逐个页地读出m个二进制页。这是优选地因为数据锁存器仅需要存储一位而不是m位。从编程的视角,逐页模式也是优选的,因为只要由存储器从主机接收到价值一页的数据,就可以将其立即写到存储器。但是,注意,为了一次仅编程一页,对于某些每单元“m”位的存储,需要设计相应的映射以便允许这样的操作。显然,不是所有的映射方案都允许这样的逐页编程方法。
图2(C)例示具有如图2(A)中的阈值电压分布的2位存储器的第一遍读取,其中读取具有HB1的较低逻辑页。实质上,参考阈值V2用于将阈值窗划分为两个一半的带。每个单元的已编程阈值电压与V2比较。如果其落在其左边的带中,则HB1=1,并且如果落在其右边的带中,则HB1=0。
图2(D)例示具有如图2(A)中的阈值电压分布的2位存储器的第二遍读取,其中读取具有HB2的较高逻辑页。实质上,第一遍中的两个一半的带的每个进一步被划分为两个另外的带。依赖于HB1的值,每个单元的已编程阈值电压与V1或V3比较。如果HB1=1,并且如果已编程阈值小于V1,则HB2=1;否则,HB2=0。另一方面,如果HB1=0,并且如果已编程阈值小于V3,则HB2=0;否则,HB2=1。在此情况下用于逐步读取的另一选择是当读取HB2时忽略在V2处的第一读取。通过此方法,直接在V1和V3处读取每个单元。如果单元读取阈值位于V1以下,则HB2=1,如果其小于V3但是大于V1,则HB2=0,如果读取阈值在V3以上,则也是HB2=1。第二方法的优点是当读取HB2时不需要保持HB1的锁存器,并且此外根本不需要在V2处感测该阵列以便读取HB2。
对于非整数参考阈值和软位的考虑
如之前所述,关于将各个电压带分界的整数参考阈值来编程存储器,该各个电压带划分该阈值窗。如果该存储器配置为具有每个存储m位数据的存储器单元,则阈值窗被划分为由2x-1个整数参考电压分界的2x个带。原则上,如果将已编程阈值与2x-1个整数参考阈值比较,可以确定x位(硬位)。
之前的方案已经描述了当读取感测的数量不一定是2x-1的形式、而按非均匀的方式进行读取电平的布置时的情况。
图3例示对于具有如图2(A)中的阈值电压分布的2位存储器的除了整数参考电压之外的非整数参考电压的使用。例如,在图2(A)中,对于x=2,跨过阈值窗的三个均匀布置的读取电平V1、V2和V3足够产生在MLC型快闪器件上的两个HB。在图3中,除了用作读取阈值的3个整数参考电压V1-V3之外,存在用于读取阈值V4-V21的18个非整数参考电压,组成21个读取阈值(V1-V21)的总集。
尽管3个整数参考电压产生2个硬位(HB),但是另外的19个非整数读取阈值不均匀地位于阈值窗上,并且产生至少两个软位(“SB”)。更具体地,阈值电压集中在表示相邻状态的CVD(Cell,Voltage Distribution,单元电压分布)的重叠区域周围。可以示出通过应用此集中,闪存信道的容量度量最大化,因此,从快闪器件读取的可靠性量度改进了能够利用这些可靠性量度的软输入解码器的错误校正能力。在直接的方式中,当具有21个分界点并且因此具有22个电压带时,将需要总共5位来表示它们,因此假设在这5个位中,2个提供硬信息(HB1和HB2),留下3个软位使得它们一起表示相应的电压带。稍后将示出通过本申请正给出的新方法,可以仅提取再多两个位而不是3个。优点是从快闪存储器(200)向存储器控制器(100)传送更少的信息,因此加速了读取操作。
当读取阈值V4-V21在单元的阈值窗内不均匀地对齐的情况被表示为非均匀SB读取。在对于每个数量的读取点(Vth)使用SB(软位)的非均匀读取时,可以独立地优化实际的读取阈值。
本方案提出其中配置并从快闪器件读取读取阈值的具体集合的具体优化方式。
采用其中硬位不嵌套在软位内的读取阈值的集合的存储器
根据本发明的第一方面,在具有阈值窗的并且关于用于将阈值窗划分为阈值电压带的第一集合的参考阈值的第一集合而可编程的存储器中,读取存储器的方案包括提供跨过阈值窗而非均匀地分布、用于将阈值窗划分为阈值电压带的第二集合的参考阈值的第二集合,以便其中更多数量的错误发生的阈值窗的区域具有更高的参考阈值密度,并且参考阈值的第一集合不是参考阈值的第二集合的子集。读取存储器的该方案还包括相对于阈值电压带的第二集合中的一个阈值电压带来确定存储器的已编程阈值。
该方案相当于与定义在编程期间的阈值窗的划分逻辑地相关联的硬位不嵌套在与在读取期间的阈值窗的更细化的和非均匀的划分相关联的软位内。定义在编程期间的阈值窗的第一划分的参考阈值的第一集合不是定义在读取期间的阈值窗的第二划分的参考阈值的第二集合的子集。该第二子集可以不包括第一集合的参考阈值或者仅包括第一集合的参考阈值的一些。
为此,该方案提出用于设置读取阈值以便包括多个特征的具体方式。第一特征是非均匀的SB(软位)读取。这允许在阈值窗内的单元错误率(CER)的至少两个不同区域。在每个区域中,需要软位(SB)的不同的分辨率,例如,为了成功解码属于高CER区域中的字线(WL)的单元中存储的位而所需的读取感测的数量大于为了成功解码属于较低CER区域中的WL的单元中存储的位而所需的读取感测的数量。
这表明更高CER区域中的参考阈值的集中度更高。例如,在图3中,读取阈值(V4-V21)在单元的电压窗内不均匀地对齐。它们聚集在其中CER较高的带之间的每个迁移(transition)周围。
因此,在对于每个数量的读取点(Vth)使用SB(软位)的非均匀读取时,可以独立地优化实际的读取阈值。
例如,因此,在诸如图2(A)所示的MLC器件(每单元2位)的正常读取中,选择3个最佳阈值V1、V2、V3的集合。这三个阈值电压在4个状态之间区分,因此帮助决定在每个单元中哪个状态被编程。当做出正确的区分时,由被编程的状态表示的两个位被正确重构,并且这两个位被称为硬位(HB)。在由于之前给出的原因而选择了错误的状态的情况下,则重构两个位的错误集合,导致读取操作中的错误。
通常,ECC解码器被应用于读取位集合的流以校正这样的错误。ECC解码器包括ECC变换层,其根据从其中存储了HB的单元读取的其相应的HB+SB信息来计算每个HB的LLR(对数似然比),然后这些LLR由ECC核心解码器处理以解码HB。为了降低由所述ECC采用的冗余位/单元的数量,希望最小化解码器被设计为处理的错误位/单元的数量,并为ECC解码器提供最佳读取阈值,以便在为其操作而在闪存中分配的有限冗余位/单元的情况下最大化其校正能力。
用于最大化快闪器件的该能力的一种这样的公知的度量是在被编程状态(X)和读取阈值电压(Y)之间的相互(mutual)信息I(X;Y)。测量和计算相互信息的一般方式是通过分别测量每个状态的CVD(也称为逐个状态的CVD),然后计算状态迁移矩阵P(Y|X),以便X表示被编程状态的向量,Y表示由位的集合表示的读取电压区域的向量。使用P(Y|X)相互信息由等式(1.1)给出:
I(X;Y)=D[P(X,Y),P(X)·P(Y)] (1.1)
在此,D(z)是Kullback-Leibler距离,如在C.E.Shannon,“A mathematicaltheory of communications”,Bell Syst.Tech.J.,vol.2,379-423页,623-656页,1948年中详述的。
在以上例子中,当从闪存中读取仅硬位(HB)时,则进行3个感测操作,并且由控制器接收2个位。结果是当选择在以上例子中的3个读取阈值使得BER/CER最小化时,例如,阈值V1被放置在状态“ER”和“A”之间以最小化CER,即最小化被编程到“ER”状态并且被读取为“A”状态的单元的数量加上被编程到状态“A”并且被读取为“ER”状态的单元的数量,等式(1.1)接近于其最大化值。以类似的方式,V2被放置在状态“A”和“B”之间,而V3被放置在状态“B”和“C”之间。
逐步读取和嵌套的位
这样的方案的一个有用的特性是可以分阶完成感测操作。甚至在区域(高/中/低)未知的程度上,当在解码时解码器不知道快闪单元表现出的CER时,此特性是有利的。因此,为了避免不必要的读取感测以及信息从快闪器件到控制器的传送,利用来自ECC的中间反馈来分阶完成哪些感测操作以及哪些数据要被发送到控制器的决定。此策略已经在Simon Litsyn,Eran S.&Idan A.的“Error Correction decoding by trial and error”中公开。
图4(A)-4(D)例示在“嵌套的SB读取方案”中使用15个读取点来读取具有如图2(A)中的阈值电压分布的2位MLC存储器的例子。图4(A)例示对于类似于图2(A)的一批存储器单元的已编程阈值的2位分布。将两个连续的读取点之间的距离保持为常数由均匀SB读取来表示。15个读取点提供了可以由4位表示的总共16个电压区域。在3个感测周期中进行15个读取点。
图4(B)例示采用读取点AR、BR和CR(对应于图2(A)中的整数参考点V1、V2和V3)来产生硬位HB1和HB2的第一感测周期。
图4(C)例示采用读取点ER1、AR1、BR1和CR1来产生软位SB1的第二感测周期。
图4(D)例示采用读取点ER21、ER22、AR21、AR22、BR21、BR22、CR21和CR22来产生软位SB2的第三感测周期。
因此,初始地,仅进行3个感测点以得到2个HB(表示为AR、BR和CR)。如结合图2(C)和图2(D)所述,优选地,在两遍逐步的读取中获得这两个HB并且在读取每位之后将其传输到存储器控制器。(来自每个单元的)这两位然后被馈送到存储器控制器中的ECC解码器以开始解码。在指示出现错误的解码(即解码器在预设的时间帧中失败或终止而不收敛)的情况下,则获得下一软位SB1。这通过利用4个读取点ER1、AR1、BR1和CR1的第二遍读取来完成。然后,可以用原始的两个HB+额外的SB1来激活ECC。
以类似的方式,如果解码失败或者终止了W/O收敛,则获得下一软位SB2。这通过利用另外8个读取点ER12、ER22、AR12、AR22、BR12、BR22、CR12、CR22的第三遍读取来完成。现在利用先前的HB+SB1以及新的额外的SB2来激活ECC解码器。
这样的方案被表示为“嵌套的SB读取方案”,意味着任意HB和SB读取是逐步的并且嵌套在当稍后读取更多的HB或SB时采用的HB+SB的集合中。注意,此方案甚至被嵌套在HB内。如之前所述,此方案是希望的,因为感测操作可以被解析到逐位水平,由此允许使用更少的数据锁存器以及更优的流水线操作。
但是,本发明观察到,当需要SB超过HB(以便允许解码器应对更高的CER)并且同时读取点或阈值(Vth)被优化以最大化等式(1.1)时,则在某些情况下,不再能够维持嵌套特性。这些情况依赖于为了提取足够信息以便ECC解码器成功而需要的感测阈值的数量。
图5例示使用对于其中CER=3%的所有4个状态的CVD的高斯模型而优化的7个读取点的例子。7个读取点将阈值窗划分为可以由3位编码的8个非均匀的电压带。可以观察到,当在此方案中输出3位时,HB不再被嵌套在为每个区域提供的这3位中。
例如,假设对于具体单元,从此设计方案的电路中出来的3位是“100”(“顶部,中间,底部”,见图5中的集合-2)。不清楚对于2位单元,较高页位是0还是1(见图4中的HB1和HB2)。图4的较高页以某种方式对应于图5的中间位。读取方案返回“0”,但是根据哪个状态被编程,状态“ER”和状态“A”的概率相同。
而且在图5中,除了与BR一致的读取点V4之外,其他的6个读取点不与图4(B)所示的AR或CR重叠。这意味着,在非嵌套的读取方案中,对应于硬位的整数读取点不一定与任何其他读取点一致。
在一个实施例中,存储器系统具有保持跟踪器件中的块的可靠性的后台处理。一个例子是通过其热计数来跟踪块的可靠性,该热计数是块经过计数数量的擦除周期而已经经受的磨损量的度量。热计数提供了对于块的CER的度量。在包括这样的处理的快闪器件中,块的可靠性被认为是在读取时已知的,这样的处理可以将块的可靠性分类为几组不同的CER。在读取块时,所需的校正能力已知是先验的(priori),并且这被转换为读取所需的SB的数量。结果是,在读取时,至少在某种程度上已知错误校正量。该已知允许控制器选择适当的SB方案。
在其中即使这样的后台处理不存在时单元可靠性也已知的另一实施例中,当进行顺序的读取并且在第一WL上激活试错方案时,而对于相同块中的所有其他WL,采用从第一WL上的试错处理获取的决定。在此具体情况下,对于随后的WL(在第一读取WL之后),控制器知道要使用的所需SB的数量是什么。
因此,当所需的SB的量在读取时已知时,则不再需要嵌套的SB方案,使用非嵌套的SB(或根据闪存可靠性的读取感测的不同集合)允许最大化了错误校正性能的非均匀SB读取的情况。
通过非均匀SB读取,并且对于每个CER情况,应用适当的读取点或阈值的集合。因此,对根据SB读取量的感测操作的某个具体数量不再有限制。例如,对于2位的单元,对于SB1,根据器件中的CER可以选取在5和7之间的任意数量的读取点。显然,随着读取感测操作的数量增加,解码器的校正能力也增加,假设对于每个这种数量的读取感测操作,对其位置进行单独的优化。
再次,对于2位单元,并且对于两个SB的情况,可以选取在8和15之间的任意数量的读取阈值。以此方式,随着CER估计的准确性增加,需要的感测操作的量的估计的准确性也增加,因此可以更准确地估计要使用的适当的读取方案。优点是,根据在快闪器件的寿命期间读取数据的情况,更好地调整读取速度和消耗的能量。
更具体地,对于1个软位的情况,可以采用从4(定义了5个电压区)到高达7个读取点(表示8个电压区)的任意数量的读取阈值。例如,将这些阈值表示为V1、V2、……、Vj,使得3<j<8。当优化这些阈值以最大化单元性能(或最大化校正能力)时,可能正好是存在至少一个Vk使得对于Vk≠Vth1、Vk≠Vth2和Vk≠Vth3的任意j值,k∈{1,2,…,j}的情况(如图5中所见)。在此,Vth1、Vth2和Vth3表示用于正好获得硬位信息的最佳读取阈值。将此情况定义为“非嵌套的阈值”。现在,当计算SB-1时,则读取的总数量是至少“j-2”(对于2位存储器的情况),并且通常是“j”,即,当获得SB时,需要重复所有的读取感测操作。对于j=7的嵌套的阈值的情况(图4中示出),在产生两个HB(硬位)的前3个读取操作之后,仅需要4个另外的读取以便产生额外的SB1。因此,在计数了3个感测位置之后对于j=7使用较低的限制,总共需要至少5个以便最小是2(7-2-3),但是在图4(C)的示例情况下,使用4。
在非嵌套的情况下,从新的7个读取(或一般地“j”个读取)产生3位的新集合,其中对于3个位向量的所有值在HB和SB之间不再有清楚的区分。3个位的每个集合定义了电压带,该电压带又被转换为馈送到被设置以解码存储在快闪器件中的原始信息的软输入ECC解码器中的可靠性度量的集合(在该例子中,该3位表示每个单元)。
图6例示其中在将读取位馈送到ECC用于进一步处理之前将其馈送到交叉耦合消除器(Cross Coupling Canceller)的另一实施例。例如,3位(以2位的MLC以及SB1)被馈送到CCC(交叉耦合消除器)310。然后,CCC的输出被馈送到ECC解码器320用于进一步处理以获得校正的被编程位。在US7,551,237题为“Post-facto correction for cross coupling in a flash memory”中描述了CCC,其全部公开通过引用合并于此。
具有在硬读取点周围的非对称软读取点的非易失性存储器和系统
根据本发明的另一方面,关于L-1个读取点(参考阈值)读取具有阈值窗的存储器,其中“L”是被编程到器件的不同状态的总数,并且通过2x>=L与被编程到每个单元的位“x”的数量有关(例如,对于每单元2位,L=4,对于每单元3位的器件,L=8)。跨过阈值窗定义与硬位“x”和软位“y”相关联的读取阈值的集合,该集合与参考阈值L+M-1的集合相关联,使得2(x+y)>=L+M。该参考阈值L+M-1的集合被布置到通过整数偏移量与每个其他子集相关的类似的读取阈值子集中。
与位(HB+SB)或者“x+y”位相关联的读取参考阈值的集合通常引起总共“L+M-1”个感测操作。在硬位和软位之间不再存在清晰的间隔。参考阈值的集合被设计用于分组为类似的子集,以便关于一个子集的读取的读取周期产生x+y位中的一位。这表明与软位相关联的集合中的参考阈值不对称地位于硬位的参考阈值周围。
在优选实施例中,在L-1个参考阈值的集合内的不同读取点阈值(Vth)之间的距离优选地对于L-1个感测周期的每个集合保持相同,而在不同感测周期之间的阈值的移动或偏移是定义为ΔR的基本单位移动的整数倍。
在其他实施例中,在感测周期内的每个随后的读取阈值水平之间的距离不需要相同。
优点是可以在每个读取周期内逐位地获得“x+y”位,由此每单元使用一个锁存器。此外,子集的每个读取周期符合类似的格式和算法,由此允许使用简单的标准化的读取电路。用于实现分别与硬位和软位(HB+SB)或“x+y”位相关联的读取阈值的集合的产生的方法通常对应于总共L+M-1个感测操作,其中2x=L并且2x+y=L+M。
挑战是维持设计的简单化以及数据锁存器的最小数量。因此,公开了具体系列的电路设计方法以处理不同数量的需要的读取感测操作。此电路对于实现需要最小数量的锁存器是很高效和简单的。
如之前结合图1所述,闪存中的锁存器是分配给每个感测放大器的存储器元件。因此,当存在例如100,00个感测放大器时,一个锁存器等同于100,000个存储器元件。因为其操作(读取数据和向闪存写入数据)所需要的这些锁存器存在于快闪存储器器件内部,希望将锁存器的数量保持在最小以便降低对存储器芯片大小的影响。
使用锁存器的主要优点是,在短期时间中,可以在整个锁存器上并行地定义操作。或者,最大化在处理一个WL(字线)上的所有单元中的并行性因子。通过以上例子,100,000个存储器元件并行地锁定一个值。
基本思想是同时提供一页的位,因此充分采用可用的锁存器。一旦已知对于相同WL上的所有单元的“x”的向量中的位(每单元的位),被存储在锁存器中的(WL上的所有单元的)数据被发送到控制器并且释放该锁存器。
图7(A)-(E)例示对于其中软位的读取电平相对于硬位不对称地定位的2位存储器的读取电平和阈值电压分布的第一实施例。将看出,获得4位(2HB+2SB)的操作涉及读取3个读取点加上反相XOR的4个重复的操作。
图7(A)例示对于类似于图4(A)的一批存储器单元的已编程阈值的2-位分布。将看出,对于HB的参考阈值与图4(A)的参考阈值不一致。在此情况下,存在具有3个读取点的两个准HB和两个非均匀SB读取,一个具有3个读取点,另一个具有3个读取点的2个集合。在此例子中,仅一个锁存器是足够的。当读取电路支持要对锁存器加上感测的数据进行的反相XOR操作时,实现此特性,而结果被置于相同的锁存器。
图7(B)例示(利用读取点AR’、BR’、CR’)进行前3个读取以确定前两个准硬位。这前两个位实际上是准HB,因为它们不处于与图4(A)所示的AR、BR和CR相同的电平。
第一准位(表示为HB1)由在BR’处的第一读取提供。如果单元正导电,则该位被设置为“1”(该单元的阈值电压低于BR’),否则,该位被设置为“0”(该单元的阈值电压高于BR’)。此感测的位被存储在锁存器中。然后,保持对于WL中的所有单元的此位的锁存器的内容被发送到控制器以便释放该锁存器。
第二准位(表示为HB2)通过第二读取来提供,并且依赖于HB1的值而在读取点AR’或者读取点CR’进行(参见图2(2.2))。例如,HB1=1意味着单元的阈值位于阈值窗的左半,因此其进一步的分辨率将与AR’有关。类似地,如果HB1=0,则CR’将是相关的。因为并行读取一组存储器单元,所以一些单元很可能具有需要以AR’读取的HB1值,而其他单元需要以CR’读取。从操作观点来看,AR’和CR’两者将需要被访问。因此,一个也可以对与读取点AR’有关的整组单元进行第二读取,然后与读取点CR’有关的第三读取。然后采用对来自第二和第三读取的结果的逻辑操作的集合,以为其阈值在阈值窗的左半/右半的那些单元解析出分别与AR’/CR’有关的读取。
另一方式是通过读取AR’然后以CR’读取同时对这两个结果进行NXOR而与第一准位独立地准备好第二准位。这通过逻辑操作集来完成,其中来自以CR’的读取的结果被取非(negate)(或反相),然后与来自以AR’的读取的结果进行XOR。注意,仅使用一个锁存器以便实施这样的操作是足够的,因为CR’感测操作的输出可以被取非,并且与保持着以AR’的感测操作的结果的单个锁存器进行XOR,同时XOR操作的结果被放置在相同的锁存器中。因为NXOR操作可与其输入互换,替换地,来自CR’感测的结果可以与放置在保持着以AR’的感测的锁存器中的反相的数据进行XOR,例如NOT(AR’)XOR CR’=AR’XOR NOT(CR’)=NOT(AR’XOR CR’)。
例如,对于处于AR’的读取点,如果单元的阈值电压小于AR’,则该单元正导电,则位被设置为“1”,否则其高于AR’,并且该位被设置为“0”。来自以AR’的感测的该位暂时被存储在锁存器中,同时在读取点CR’处的第三读取正在发生。再次,如果单元的阈值小于CR’,则该单元正导电,则该位被设置为“1”,否则该位被设置为“0”(该单元的阈值电压高于CR’)。但是,这次,来自以CR’的感测的该位不直接传送到锁存器,而是被取非,然后与已经存储在该锁存器中的来自AR’的位进行XOR。在XOR操作之后,结果被存储在对于每个单元相同的锁存器中,盖写对于AR’的位。此结果表示HB2或者实际上是准HB2。
该位从阵列的该最后的“在闪存中的(in-flash)”处理到锁存器操作被表示为NOT/XOR(或反相XOR,如在图7(E)中所示)。实质上,对于具有比CR’阈值电压低的电荷的那些单元的位将是“1”,并且在取非之后,其将是“0”。因此,这不改变当进行就地的XOR时已经出现在锁存器中的“0”,因为0XOR0=0。对于具有比CR’高的阈值电压的单元,取非操作将从快闪阵列接收的位从“0”翻转为“1”,因此对于阈值电压在CR’以上的所有单元,在取非之后获得的“1”与已经放置在锁存器中的“0”进行XOR以提供正确的准较高页位(或HB2)。
因此,对于被并行读取的该组单元,来自每个单元的HB1将形成“准较低页”,且HB2将形成“准较高页”。类似地,如以下将描述的,SB1将形成准SB1页,并且SB2将形成准SB2页。对给定数量的位而整体进行读取点的优化。在此例子中,仅在将所有4位提供给控制器之后,控制器才可以使用它们。这4个位的子集不提供在子集方面的最佳采样,并且仅作为一组,它们提供对于从2位存储器读取的数据的必需的可靠性。
图7(C)例示用于获得第一软位SB1的读取,此步骤是提供准SB1。在此,进行L-1个读取感测的另一集合,其中读取点从AR’、BR’和CR’偏移了2ΔR。因此,第一读取阈值位于AR’+2ΔR,使得分别以BR’+2ΔR和CR’+2ΔR进行随后的读取。通过这三个读取操作,重复与对准较高页(或HB2)进行的相同的过程,这次通过3个感测操作而不是两个。这意味着,锁存器首先存储有从以AR’+2ΔR的感测得到的位。然后,在BR’+2ΔR感测之后,从感测放大器接收的位与锁存器中的来自AR’的位“就地”进行NOT/XOR。然后,再次,在CR’+2ΔR感测操作之后,从感测放大器接收的位与已经放置在锁存器中的位“就地(in place)”进行NOT/XOR。以此方式,再次,仅需要一个锁存器来存储准SB1。
注意,在最后的感测操作之前,具有在BR’+2ΔR和CR’+2ΔR之间的阈值电压的单元保持值“1”。从在此区域中的单元的快闪阵列接收的位是“1”,并且在取非之后,其被设置为“0”,因此XOR不改变该组单元的此位。对于具有在CR’+2ΔR以上的阈值电压的单元,在第二感测操作之后,锁存器也保持“1”。但是,在(以CR’+2ΔR的)最后的感测操作中,从快闪阵列接收的位变为“0”,在取非之后其是“1”,并且XOR操作将锁存器中的“1”变换为“0”(1XOR1=0)。
图7(C)例示跨过阈值窗的各个电压带的准SB1的编码,一旦准SB1准备好,就可以将其传送到存储器控制器以释放锁存器。类似对于用于获得HB1和HB2的读取操作。
图7(D)例示用于获得第二软位SB2的读取。这是在3个读取的两个集合中提供准SB2。在此方法中,以与生成准SB1相同的方式重复两个连续的读取,一次利用设置在AR’-ΔR、BR’-ΔR、CR’-ΔR的阈值,然后利用设置在AR’+ΔR、BR’+ΔR、CR’+ΔR的阈值。将从这两个集合的得到的页分别表示为SB21和SB22。将看出,需要另外的锁存器。SB21可以被存储在一个锁存器中,而SB22被存储在另一锁存器中。图7(E)例示如下创建SB2:SB2=SB21XOR NOT(SB22)。意味着,激活用于在两个已有的锁存器之间的NOT/XOR的相同的接口电路。
因此,可以看出,在具有引起4位的12个读取点的2位存储器示例的以上例子中,该方案能够提供用于高效错误校正的12个读取点的最佳布置。同时,其具有仅采用包括NOT/XOR接口的被设计用于多个感测周期的一个简单的电路/算法。此电路仅由在需要时可以调整的一个参数ΔR而参数化。该方案不是传统的之处在于,基于从用于在编程期间定义阈值窗的划分的传统的读取参考阈值稍微偏移的读取参考阈值,硬位现在是准硬位。甚至更不传统的是,软位具有在准硬位的读取点周围不对称地聚集的读取点(参考阈值)。如果按以下顺序使用连续的6个感测操作产生SB2:AR’-ΔR、AR’+ΔR、BR’-ΔR、BR’+ΔR、CR’-ΔR和CR’+ΔR,则代替两个锁存器,该相同的方案也可以通过仅一个锁存器来操作。在此,如在先前的情况中那样,对于每个感测,该结果被NOT/XOR门控(gated)就地放置到单个锁存器中。但是,在此情况下,对于每个连续的感测,改变ΔR的符号,因此这样的实现方式所需的电路更复杂,另一方面,去除了整个锁存器,帮助降低了快闪控制电路的成本。
图8(A)-(D)例示仅采用9个读取点来产生2HB和“1.5SB”的2位存储器的读取电平和阈值电压分布的另一例子。尽管实际上获得4位并将其传送到存储器控制器,但是在对由9个读取点分界的10个电压带的划分进行感测的感测中,其被称为1.5SB。在此例子中,尽管HB被嵌套有SB,但是SB1不被嵌套到SB2中。具有可编程参数AR的3个感测操作的集合以及(3个读取点的)每个集合中的读取阈值电平之间的固定距离(或者利用正偏移和负偏移而使用的或者根本未使用的固定的AR和常数ΔR参数)保持如之前那样。
在此例子中,采用对于偏移的交替的(-ΔR,+ΔR)值,即感测阈值被设置为AR’-ΔR、AR’+ΔR、BR’-ΔR、BR’+ΔR、CR’-ΔR、CR’+ΔR,但是,NOT/XOR序列保持未改变。因此,一个锁存器将被塞满6个顺序的读取以及NOT/XOR“就地”存储。
图8(A)例示对于类似于图4(A)的一批存储器单元的已编程阈值的2位分布。
图8(B)例示与图4(A)的读取点一致的硬位的读取点。在此例子中,读取点AR、BR和CR与在编程期间定义阈值窗的划分的那些读取点相同。不像准硬位,它们是原始硬位。如图4(B)中那样,通过相对于AR、BR和CR的3个读取获得HB1和HB2。因为HB读取电平与用于没有软位的读取的相同,所以当仍存储在存储器控制器中,可以再使用它们。
图8(C)和图8(D)分别例示用于软位SB1和SB2的读取点。对于SB1的读取点类似于对于HB的读取点,但是偏移了-ΔR,即:AR-ΔR、BR-ΔR和CR-ΔR。可以在这三个读取点处的读取之后获得SB1。对于SB1,每个单元需要一个锁存器。当具有SB1的页准备好时,其可以被移出到存储器控制器,由此释放锁存器。类似地,对于SB2的读取点与对于HB的读取点类似,但是偏移了+ΔR,即:AR+ΔR、BR+ΔR和CR+ΔR。得到的SB2可以被存储在一个锁存器中,当具有SB2的页准备好时,其可以被移出到存储器控制器,由此释放锁存器。
与图7(D)-7(E)中所示的例子比较,每个感测放大器仅需要一个锁存器而不是两个锁存器。注意,在图8所示的例子中,为了处理SB,被设计为存储SB22的图7(D)-7(E)中的例子的第二锁存器可以被省略,并且由6个顺序的读取来替代。在此实施例中,采用对于偏移的交替的值(-ΔR,+ΔR),即,感测阈值被设置为AR’-ΔR、AR’+ΔR、BR’-ΔR、BR’+ΔR、CR’-ΔR、CR’+ΔR,但是NOT/XOR序列保持未改变。然而,具有在图7中给出的SB方案的ECC(相同解码器和编码)校正能力与在图8中给出的方案相比更高,即使它们都得到ECC接收每个读取单元的4位,假设ΔR在这两种情况下被单独优化以最大化该相互信息。原因是通过图7的方案,与图8相比更多的信息被发送到控制器,因为在图7中,在总共13个电压带之间存在区别,而在图8中给出的方案中,仅存在10个。
用于简化读取电路的虚(dummy)读取点
图9(A)-9(D)例示具有15个读取点的2位存储器的读取电平和阈值电压分布的例子。在此情况下,存在两个准HB和两个非对称SB。将看出,存在4个读取周期。第一个具有3个读取点,第二个、第三个和第四个每个具有4个读取点。通过在第一读取周期中添加虚读取,所有四个读取周期将具有4个读取点,并且可以由一般的读取电路/算法均一地服务。
图9(A)例示对于类似于图4(A)的一批存储器单元的已编程阈值的2位分布。
图9(B)示出类似于之前地由在AR’、BR’、CR’处的读取点定义的两个准HB。准SB1需要以阈值电压AR’-2ΔR、BR’-2ΔR、BR’+2ΔR、CR’+2ΔR的4个感测操作,而使用8个顺序的感测操作AR’-3ΔR、AR’-ΔR、AR’+ΔR、BR’-ΔR、BR’+ΔR、CR’-ΔR、CR’+ΔR、CR’+3ΔR来产生准SB2。因此,此方案指定在3个读取点处的读取以得到HB1和HB2、在另外4个读取点处的读取以得到SB1以及在另外4+4个读取点处的进一步的读取以得到SB2。
如之前所述,为了使得NOT/XOR操作更对称,由此使能够在快闪存储器内部使用更简单设计的电路,优选地甚至对HB实现在4个读取点处的读取。这将允许通过重复包括NOT/XOR操作的4个读取点的读取的相同的操作来获得所有位。在一个优选实施例中,对于HB的另外的读取通过对于HB的虚读取来实现(在图9(B)中标记为虚箭头)。此另外的读取点处于阈值窗的低端以便其将总是在整个锁存器上产生“1”。以此方式,在对于HB感测操作的所有3个非虚读取点上激活NOT/XOR。
“虚读取”的另一应用是在均匀SB读取的情况下。公知地,为了提供对于擦除状态的SB读取(例如图4(D)中的ER1和ER21),需要负感测。不幸的是,负感测被限于快闪阵列感测机制在阈值窗中能达到多低,因此在该情况下,感测操作的序列可以简单地忽视它们,即避开这些感测操作以便节省感测时间。只要控制器中的ECC解码器知道此感测方案,就可以采用此方案,因此当产生可靠性度量并且因此将其馈送到软输入ECC解码器时,可以考虑此方案。已经发现,忽略擦除状态中的边缘感测(比如以上图4(D)中的ER1和ER21)以及忽略较高状态中的边缘感测操作(例如CR1和CR22)对软输入ECC解码器校正能力具有可忽略的影响。幸运的是,当考虑优化的非均匀SB时,由于所有感测集中在状态之间(例如图9(A)中的“ER”状态和“A”状态之间)的重叠区域周围的事实,通常不需要忽略任何感测操作,因此完全不需要深度负感测。
总之,对所有这些方案共同的基本构建块在某些参考读取阈值上是+/-αΔR偏移(α是整数值)。例如,对于2位存储器,参考读取阈值是定义HB或准HB的AR、BR、CR或AR’、BR’、CR’。然后,对于软位的读取阈值由在这些参考读取电压阈值周围的整数偏移量定义。为了获得读取点的最佳集合,对于HB的参考读取阈值的集合不需要一定与定义关于编程的存储器划分的集合一致。此外,对于软位的读取点通常不对称地位于对于硬位的读取点的周围。
利用对于耦合的DLA补偿的在读取硬位时的软位读取
通常,并行读取当前字线WLn上的一组存储器单元。为了在给定读取点(读取阈值电平)读取,阈值电压电平被施加到字线WLn。对于具有NAND架构的存储器,相邻字线WLn+1被设置为Vread以便将相邻的、菊链连接的存储器单元导通到全通(pass-through)状态。因此,WLn+1被保持在恒定的Vread,而WLn步经不同的读取点。
在之前所述的实施例中,通过对WLn上的Vth的调制产生硬位和软位,而WLn+1的Vread保持不改变。
根据本发明的另一方面,通过对当前字线WLn上的电压的第一调制和对相邻字线WLn+1上的电压的第二调制的组合来产生软位。例如,通过调制WLn来设置用于硬位的读取点V1、V2、……、Vi的第一集合,而WLn+1被设置到诸如Vread的第一预定电压。还通过将WLn+1调制到不同的Vread值将用于软位的读取点的第二集合设置为从第一集合的偏移。
本发明的此方面尤其与称为DLA(“直接预测(Direct Look-ahead)”)读取的已知读取技术相互促进。该方案调制WLn+1上的Vread以便读取当前字线WLn上的存储器单元的硬位。对于4个状态以及每单元两位(例如D2)的情况,当读取操作采用DLA时,则WLn上的每个感测操作进行4次。例如,在WLn上的以3个读取参考点Vth1、Vth2和Vth3的每个的读取被重复4次,每次在WLn+1上具有不同的Vread。根据被编程到WLn+1的状态为WLn中的每个单元分别选择这些感测操作中的仅一个,以便确定WLn中的单元的状态。
例如,如果相邻字线WLn+1上的存储器单元各自被编程到状态“E”、“A”、“B”和“C”的任意一个,则这些单元对WLn上的相应相邻单元具有变化的干扰度。“E”状态在单元的浮置栅极上没有电荷,“A”状态具有更多的电荷,且“C”状态具有最多的电荷,具有到当前字线WLn上的相应相邻单元的浮置栅极的增加的耦合电平。耦合电平越高,WLn中的单元在被感测时其表面(apparent)阈值将偏移得更多。DLA技术在感测WLn上的单元期间向WLn+1上的Vread施加偏移偏压,以便创建相反耦合来消除位于WLn+1上的相邻单元的耦合电平的影响。因此,在感测WLn时,在WLn+1上分别施加偏压电压VreadE、VreadA、VreadB和VreadC将消除来自相邻的WLn+1上的状态“E”、“A”、“B”和“C”的相应耦合电平。
美国专利No.7,436,733公开了用于补偿由于来自相邻字线处的单元的浮置栅极上的电荷的干扰引起的读取错误的DLA技术。该技术解决了由于在当前单元被编程验证时不具有电荷并且随后变得被编程有更多电荷的相邻单元的干扰产生的读取错误。另外的相邻电荷具有使得当前单元具有比在其被编程验证时更高的阈值的影响。这导致其阈值电平被读取为比其被编程验证时更高。DLA读取首先读取WLn上的相邻单元的被编程状态,并高效地调整在读取WLn上的单元时的读取阈值。这通过读取相邻字线WLn+1并相应地偏压在WLn+1上的电压Vread以补偿当前字线WLn上的读取来实现。实质上,高编程的相邻状态将向上偏移当前单元的表面阈值。当读取当前单元时,WLn+1上的Vread的更高偏压将帮助将表面阈值移回到其应该处于之处。
根据在WLn的读取操作之前被读取的、被编程到WLn+1的状态来进行所选的感测。由于在WLn和WLn+1之间的CC(交叉耦合)的大的变化,此方法的结果是减小相邻WL之间的耦合。实质上,其通过考虑到由于在读取时相邻单元引起的干扰而工作,以便重构在单元的编程期间由单元的控制栅极所见的场条件。但是,不对应于在编程期间施加到WLn+1的Vread的所有那些感测操作在DLA读取操作期间被丢弃。
本发明的当前方面利用那些否则就被浪费的感测操作以便产生替代的SB而不是丢弃这些感测操作所携带的信息。产生SB的此方式被称为“使用DLA输出作为软位”。
将通过使用12个读取点来产生对于并行地读取的WLn中的组的每个单元的4位、通过2位存储器来例示此发明方面。但是,该技术同样可应用于任意数量的BPC(每单元的位)以及高达并包括BPC的任意数量的SB。这意味着,对于2位存储器,可以得到2个准硬位上的、另外2个软位。对于3位存储器,可以得到每单元3个准硬位上的、另外3个SB等等。
图10(A)-10(D)例示使用12个读取点的2位存储器的读取电平和阈值电压分布的例子,其中读取点通过WLn和WLn+1的电压调制的组合来设置。图10(A)例示WLn中的单元的CVD,对于该单元的在WLn+1中的相同BL中的相邻单元被编程到“E”(擦除)状态。这是其中没有WLn+1干扰的情况。根据依次进行的可能的读取的集合,通过12个读取点即:S1、S2、……、S12来产生HB和SB。可以从要被施加到WLn的一组3个参考点Vth1、Vth2和Vth3中产生12个读取点的该集合。这些值依赖于WLn+1上的Vread的值而被进一步偏移。
图10(B)例示在WLn+1上的电压Vread被设置为与WLn+1上的被编程状态“A”对应的预定值时分别利用Vth1、Vth2和Vth3对WLn进行的在S1、S2和S3上的前三个读取。此Vread值将被表示为Vread[A]。在完成第三个读取时,以与“正常读取”过程类似的方式产生两个准HB(硬位)。这两个位被表示为准HB。它们仅使用对WLn的调制,而对施加到WLn+1的Vread没有任何改变。
此外,WLn中的4个状态的CVD依赖于WLn+1的调制。可以在以下图11到图13中观察到此最后的依赖性。对于在WLn+1中的相同BL上的其相邻单元被编程到状态“A”、“B”和“C”的单元的情况,关于相同的3个感测操作的CVD的位置分别被绘出在图11(B)、图12(B)和图13(B)中。将看出,对WLn+1上的增加地编程的状态,表面阈值分布逐步偏移到更低的阈值。例如,因为WLn+1中的状态较高,看起来就像WLn的阈值看起来在相同的CVD分布上较低。
图10(C)到图13(C)例示分别对于作为“ER”、“A”、“B”和“C”的WLn+1上的相邻状态的在S4-S6的读取。在WLn+1上的Vread被设置到与WLn+1上的被编程状态“C”对应的预定值时,在WLn上分别用Vth1、Vth2和Vth3产生在S4、S5和S6处的读取。将此最后的Vread值表示为Vread[C]。锁存器L1被填充了用于在此第四感测操作上导通的所有单元的“1”。在WLn+1上的Vread被设置为Vread[C]时,在WLn上用S5产生在S5处的读取。锁存器L2被填充了用于在此第五感测操作上导通的所有单元的“1”。锁存器中的最终结果被填充了两个值“L1”和“L2”之间的NOT/XOR。注意,代替使用L1和L2,可以使用单个锁存器,同时首先以相同的方式将其填充L1,然后在感测S5之后,来自感测放大器的结果用已经设置的单个锁存器上的NOT直接XOR。
在WLn+1上的Vread被设置为Vread[C]时,在WLn上以S6产生在S6处的读取。以与在S5感测操作之后相同的方式、例如使用NOT/XOR操作来更新该锁存器。在这点,快闪存储器可以仅使用一个锁存器和以上所述的NOT/XOR逻辑来提供表示为“B3”的第一准SB。B3数据可以被发送到控制器(存储器处理器/解码器),然后清空锁存器。
图10(D)到图13(D)例示分别对于作为“ER”、“A”、“B”和“C”的在WLn+1上的相邻状态的在S7-S12处的读取。在WLn+1上的Vread被设置为与WLn+1上的被编程状态“ER”对应的预定值时,在WLn上分别用Vth1、Vth2和Vth3产生在S7、S9和S11处的读取。在WLn+1上的Vread被设置为与WLn+1上的被编程状态“B”对应的预定值时,在WLn上分别用Vth1、Vth2和Vth3产生在S8、S10和S12处的读取。
因此,在WLn+1上的Vread被设置为与WLn+1上的被编程状态“ER”对应的预定值时,在WLn上用Vth1产生在S7处的第七感测操作。将此最后的Vread值表示为Vread[E]。如之前,在此感测之后,锁存器被填充了对于导通的所有单元的“1”。在WLn+1上的Vread被设置为与WLn+1上的被编程状态“B”对应的预定值时,在WLn上用Vth1产生在S8处的第八感测操作。将此最后的Vread值表示为Vread[B]。以与在第五感测操作之后相同的方式、例如使用NOT/XOR例程更新锁存器。
在WLn+1上的Vread被设置为Vread[E]时,在WLn上用Vth2产生在S9处的第九感测操作。以与在第五感测操作之后相同的方式、例如使用NOT/XOR例程更新锁存器。在WLn+1上的Vread被设置为Vread[B]时,在WLn上用Vth2产生在S10的第十感测操作。以与在第五感测操作之后相同的方式、例如使用NOT/XOR例程更新锁存器。
在WLn+1上的Vread被设置为Vread[E]时,在WLn上用Vth3产生在S11处的第十一感测操作。以与在第五感测操作之后相同的方式、例如使用NOT/XOR例程更新锁存器。在WLn+1上的Vread被设置为Vread[B]时,在WLn上用Vth3产生在S12处的第十二感测操作。以与在第五感测操作之后相同的方式、例如使用NOT/XOR例程更新锁存器。在这点,表示为B4的4位中的最后的位可以从闪存发送到控制器用于解码。在用于快闪器件的感测电路的一些实现方式中,存在不改变WLn+1和WLn上的Vread的优点。在这些情况下,当首先将WLn+1上的Vread设置到Vread[E]、然后用S7、S9和S11更新单个锁存器时,可以实现相同的结果。在这之后,将WLn+1上的Vread改变为Vread[B],并根据S8、S10和S12填充第二锁存器。然后,对锁存器对、例如第一和第二锁存器应用NOT/XOR操作,将结果放置在这些锁存器之一中(或放置在第三锁存器上),同时,仅该结果被传送到控制器。在此情况下,需要另一锁存器,但是使得感测电路更简单。以下关于图14-图17提供此方案的更多细节。
注意,以上感测操作的顺序不是在灰度编码中产生4位的集合的唯一方式。在表1中绘出了对于灰度编码的以上选择。
B1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
B2 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
B3 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
B4 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
表1:作为DLA输出编码的SB
上述实施例的优点在于简化以及仅需要快闪器件中的一个锁存器。此外,采用灰度编码的事实增加了在读取期间从一个状态到另一状态的迁移的情况下的可靠性(最小化位错误的数量)。此实施例的另一优点是,还使得调制更容易,因为在对于WLn+1的Vread保持在Vread[A]不改变时,将前三个感测操作调制到在WLn上的Vth1、Vth2、Vth3。然后,在这次将WLn+1保持在Vread[C]时,利用在WLn上的相同的Vth1、Vth2、Vth3进行另3个感测操作。在WLn+1在Vread[E]和Vread[B]之间交替Vread时,通过将每个Vth重复两次、即通过Vth1、Vth1、Vth2、Vth2、Vth3、Vth3来进行最后的6个感测操作的集合。
为了使得此方法甚至更简单,将希望对于被指定为填充一个锁存器直到其被清空并且被发送用于进一步的数字处理的感测操作的每个集合,仅调制WLn上的Vth而无需改变在之间的WLn+1上的调制。
图14到17例示在WLn处以Vth1、Vth2、Vth3的每个读取时在处理软位时使用另外的锁存器以便避免改变在WLn+1上的调制的另一实施例。该方法类似于结合图7所述的方法,但是使用DLA输出,例如,其调制WLn+1上的Vread不是仅调制WLn的Vth值。
图14(A)-(C)到图17(A)-(C)与图10(A)-(C)到图13(A)-(C)相同。与图10(D)到图13(D)相比,差别在图14(D)-(E)到图17(D)-(E)中。图10(D)到图13(D)中的最后的6个感测操作的周期在图14(D)-(F)到图17(D)-(F)被划分为两个子周期。
图14(D)-17(D)例示对于准B2的读取的第一子周期。在以Vth1、Vth2和Vth3调制WLn时,WLn+1上的Vread保持在Vread[E]。
图14(E)-17(E)例示对于准B2的读取的第二子周期。在以Vth1、Vth2和Vth3调制WLn时,WLn+1上的Vread保持在Vread[B]。
图14(F)-17(F)例示如下创建准SB2:准SB2=(准SB2部分-1)XOR NOT(准SB2部分-2)。
以此方式,在对于4个周期的每个将不同的Vread施加到WLn+1时,以Vth1、Vth2、Vth3每周期3个感测操作对所有周期重复统一的感测方案。按以下顺序施加这四个Vread值:Vread[A]、Vread[C]、Vread[E]、Vread[B]。此方案进一步简化了实现方式而不增加锁存器的总数量,因此是对于2位快闪存储器的例子的优选实施例。
很清楚,使用DLA输出来产生SB的此方法属于非嵌套SB产生的系列。显然的原因是在从4位中取出仅前两位或前3位时,不像在DLA情况中那样提供最佳的读取HB。在保持相同数量的感测操作(在此情况下12个)时,仅4个位的整个集合(在以上例子中)提供比操作用于软输入解码器的正常DLA读取操作更优的估计。
有利地使用这些读取(在快闪器件的正常DLA读取操作中它们被丢弃)以增加软输入ECC解码器的校正能力,因此,得到系统方面增加了读取操作的可靠性。以下是利用此信息的许多方式之一的简单例子。
除了由以上示例方案提供的4位之外,解码器还接收关于对WLn+1上的每个单元的估计的被编程状态的信息。解码器在这点可以对WLn中的每个单元使用6位。该方法依赖于在设计或生产期间做出的对快闪器件的实验测量。在器件的寿命期间也可以作为后台处理来更新该测量和LLR设置。
对于WLn+1中的每个相邻的状态单独地取WLn中的所有单元。例如,在WLn中的具有在相同BL中的并且在WLn+1中被编程到“ER”的相邻单元的所有单元被分组在一起。这产生四组单元,表示为Eg、Ag、Bg、Cg。
例如,如果WL总共存在64K个单元,则每组保持近似16K个单元。“Eg”涉及在WLn中的、具有被编程到状态“ER”的在WLn+1中的相邻单元的单元组。“Ag”涉及在WLn中的、具有被编程到状态“A”的在WLn+1中的相邻单元的单元组。“Bg”涉及在WLn中的、具有被编程到状态“B”的在WLn+1中的相邻单元的单元组。“Cg”涉及在WLn中的、具有被编程到状态“C”的在WLn+1中的相邻单元的单元组。
现在,对于每个这样的组,根据被编程到WLn的状态,单元进一步被划分为4组。例如,Eg组被划分为Ege、Ega、Egb和Egc。在这点,每组中的每个单元的4位的值被用于建立4行和13列的状态迁移矩阵,该矩阵保持每个单元被编程到在列“k”(从0到12)中要被读取的行“j”(从0到3)中表示的状态的概率。
例如,假设在“Ega”组中存在4K个单元(4,000个单元),则在对应于被读取为“1011”(见以上表1中的第四列)的“m1”单元的位置j=1(对应于被编程到状态A的WLn)和列k=3处,在行1和列3处的迁移矩阵中的项被设置为m1/4K。
用于阐明此迁移矩阵中的另一项的创建的另一例子将是对组“Egc”中的被编程到WLn作为“C”状态(例如j=3)的单元的数量计数,然后使用以上读取操作。接收的4位是对应于以上表1中的列k=8(以0开始)的“0011”。如果此计数是m2并且组“Egc”中的单元的数量也是4K,则在行3和列8处的迁移矩阵中的项被设置为m2/4K。
注意,为四个组Eg、Ag、Bg和Cg的每个产生大小为4x13的单独迁移矩阵。现在采用该状态迁移矩阵来产生对于13列的每列的2个可靠性值。表示此可靠性值的一个选项是LLR(对数似然比)的形式。
这意味着计算值LLR=log2(Pr0/Pr1)。在此,在根据以上的“使用DLA输出作为SB”过程从单元读取的4位的情况下,Pr0指对于WLn的单元中将是“0”的相应位的概率之和,而Pr1指该位将是“1”的相同位的概率之和。
例如,如果在4x13迁移矩阵中,列“j”保持概率Q0、Q1、Q2、Q3,并且WLn中的目标单元到位的映射是如表2中的标准灰度映射:
[MS位 LS位] |
状态迁移矩阵的列“k”中的概率 |
11 |
Q0 |
10 |
Q1 |
00 |
Q2 |
01 |
Q3 |
表2:示例列
则MS位和LS位的LLR分别是log2([Q2+Q3]/[Q1+Q0])和log2([Q2+Q1]/[Q3+Q0])。注意,使用在以上3段中所述的方法实验地测量Q0、Q1、Q2、Q3(在该例子中,对于j=1,例如,在列3中Q1=m0/4K,j=3,例如在列8中Q3=m1/4K,……)。在完成此离线计算之后,提供具有13个项的表,并且每项中有两个LLR。为以上的4x13个迁移矩阵的每个单独产生这样的表,得到13x2个值的总共4个表。
因为13列中的值是以灰度编码,所以需要16项的表,在该16项中,仅采用13项。使用以上表2的例子并将B1定义为MS位以及将B4定义为LS位,那些项是:15、14、10、11、9、8、0、1、3、2、6、7、5。
使用所述的每个有16x2个值的4个表,在解码处理中如下进行:
首先,以正常的旧式方式在WLn+1的控制栅极上施加Vth1、Vth2、Vth3,读取WLn+1,为每个单元产生两位。将这些位表示为“D1D0”。“D”表示这两位代表的从0到3的整数。
现在,如上所述例如调制WLn的Vth和WLn+1的Vread两者,从WLn上的每个单元读取4位。对于WLn中的每个单元,将这些位表示为“B3B2B1B0”。“B”表示这四位代表的在0和15之间的整数(仅具有13个有效选择)(根据表1)。
使用“D”来指向4个LLR表中的一个。使用“B”来选取位于地址“B”处的表“D”中的两个LLR。提取表示WLn的单元中的位的可靠性的这两个LLR并将它们馈送到软输入解码器,该软输入解码器被定义在WLn中的大量单元上以重构被编程到WLn中的那些单元的位。因为可以分别对较高和较低页的每个构建代码,则在另一实施例中,对于具体页解码操作采用这两个LLR值中的仅一个,而当解码第二页时,使用另一LLR值。显然,这将意味着,在两个LLR的每次计算时,丢弃一个。
本发明的优点是当将控制器的所需校正能力更好地匹配于位于快闪器件中的数据时读取速度的增加以及降低的能量消耗。另一积极结果是提供了此优点,当数字技术根据平版印刷术一代中的进步而缩小时,不像降低成本的控制器中的数字电路,W/O以较高成本增加了在快闪器件中所需的数字电路。
为了例示和描述的目的给出了本发明的以上详细描述。尽管使用2位存储器来例示原理,但是本发明同样适用于能够存储3位、4位或其他位的数据的存储器。不意图穷尽本发明或将其限制到所公开的精确形式。根据以上教导,许多修改和变化是可能的。选取所述实施例以便最佳地说明本发明的原理及其实际应用,由此是对本领域技术人员在各个实施例中以及利用适合于预期的具体使用的各种修改最佳地利用本发明。意图本发明的范围有附于此的权利要求书限定。