首页 / 国际专利分类库 / 物理 / 信息存储 / 针对非易失性存储装置的非对称状态检测

针对非易失性存储装置的非对称状态检测

申请号 CN201480069387.4 申请日 2014-12-05 公开(公告)号 CN105830163B 公开(公告)日 2019-08-02
申请人 桑迪士克科技有限责任公司; 发明人 罗汉·帕特尔; 保-灵·葛; 尤金·塔姆;
摘要 本文中公开了用于确定是否存在由于对非易失性存储元件进行编程而发生的 缺陷 的技术。示例缺陷包括:断开的字线、控制栅与衬底的 短路 、字线与字线的短路、双重写入等。可以将 存储器 单元编程,使得存在存储器单元在不同数据状态中的基本上均匀的分布。在进行编程之后,以一个或更多个参考电平对存储器单元进行感测。基于该感测,策略性地形成存储器单元的两个子组,以使得能够以简单且高效的方式对缺陷进行检测。子组可以具有对数据状态的一定程度的分隔,以避免漏掉缺陷。将一个子组中的存储器单元的数目与另一子组中的存储器单元的数目进行比较。如果在两个子组之间存在显著的 不平衡 ,则检测到缺陷。
权利要求

1.一种用于检测与将数据编程到非易失性存储元件中的缺陷的方法,包括:
将数据编程到与所选字线相关联的非易失性存储元件组中,所述非易失性存储元件组位于存储器管芯上,所述编程如果成功则引起所述非易失性存储元件在多个数据状态中的均匀的分布;
在将所述数据编程到所述非易失性存储元件组中之后,以将两个相邻的数据状态分隔开的一个参考电平或以多于一个的不同的参考电平对所述非易失性存储元件组进行感测,所述多于一个的不同的参考电平各自将两个相邻的数据状态分隔开;
基于所述感测来形成所述非易失性存储元件的第一子组和所述非易失性存储元件的第二子组,每个子组包括所述数据状态中的至少两个数据状态,所述第一子组或所述第二子组中的至少一个子组包括被另一子组中的数据状态分隔开的两个数据状态;
对所述第一子组中的非易失性存储元件的数目与所述第二子组中的非易失性存储元件的数目的差的累积总计进行跟踪,所述跟踪是由位于所述存储器管芯上的逻辑电路装置来执行的;以及
响应于确定出所述差大于阈值,确定出存在与将所述数据编程到所述非易失性存储元件组中相关联的缺陷。
2.根据权利要求1所述的方法,其中,在所述第一子组和所述第二子组中均不存在相邻的数据状态,其中所述多个数据状态中的每一个数据状态在所述第一子组中或在所述第二子组中。
3.根据权利要求1所述的方法,其中,在所述第一子组或所述第二子组中存在相邻的数据状态,其中所述多个数据状态中的每一个数据状态在所述第一子组中或在所述第二子组中。
4.根据权利要求1至3中任一项所述的方法,还包括:
基于以多个不同的参考电平对所述非易失性存储元件组进行感测,形成所述非易失性存储元件的第三子组和所述非易失性存储元件的第四子组,所述第三子组和所述第四子组各自包括至少两个数据状态,所述第三子组或所述第四子组中的至少一个子组包括被所述第三子组或所述第四子组中的另一子组中的数据状态分隔开的两个数据状态(1522);
确定所述第三子组中的存储元件的数目与所述第四子组中的存储元件的数目之间的差是否大于第二阈值(1524);以及
响应于确定出所述差大于所述第二阈值,确定出存在与将所述数据编程到所述非易失性存储元件组中相关联的缺陷。
5.根据权利要求1所述的方法,其中,基于所述感测来形成所述非易失性存储元件的所述第一子组和所述非易失性存储元件的所述第二子组包括:将以所述多个参考电平中的第一参考电平和第二参考电平进行感测的结果进行组合,将所述结果进行组合是在以所述多个参考电平中的第三参考电平进行感测时执行的。
6.根据权利要求1至3和5中任一项所述的方法,其中,所述缺陷包括断开的字线、控制栅与衬底的短路、字线与字线的短路或双重写入中的一个或更多个。
7.根据权利要求1至3和5中任一项所述的方法,其中,所述非易失性存储元件组与同一字线相关联,所述方法还包括:
确定对与所述所选字线相邻的字线的编程具有未通过的状态;
响应于所述第一子组中的存储元件的数目与所述第二子组中的存储元件的数目之间的所述差大于所述阈值,确定所述所选字线和相邻的字线被短接在一起(1712或1718)。
8.根据权利要求1至3和5中任一项所述的方法,其中,将数据编程到非易失性存储元件组中以使得如果成功则引起所述非易失性存储元件在多个数据状态中的均匀的分布包括:
对要被编程到所述非易失性存储元件组中的数据执行随机加扰或伪随机加扰(1002)。
9.根据权利要求1至3和5中任一项所述的方法,其中,对所述第一子组中的非易失性存储元件的数目与所述第二子组中的非易失性存储元件的数目的差的累积总计进行跟踪包括:
在对所述第一子组和所述第二子组中的所有存储元件进行比较之前,响应于确定出所述差大于所述阈值,停止对所述累积总计进行的跟踪(1310)。
10.一种非易失性存储器装置,包括:
位于存储器管芯上的多个非易失性存储元件(323至326,343至346,363至366);
多条字线(WL0,WL1,……),所述多条字线与所述非易失性存储元件相关联;以及一个或更多个管理电路(520,530,540,542,544),所述一个或更多个管理电路与所述多条字线和所述多个非易失性存储元件进行通信,所述一个或更多个管理电路包括位于所述存储器管芯上的逻辑电路装置,所述一个或更多个管理电路将数据编程到与所选字线相关联的非易失性存储元件组中,所述数据被编程,使得如果成功则引起所述非易失性存储元件在多个数据状态中的每个数据状态中的相等的数量,所述一个或更多个管理电路在将所述数据编程到所述非易失性存储元件组中之后以将两个相邻的数据状态分隔开的一个参考电平或以多于一个的不同的参考电平对与所述所选字线相关联的所述非易失性存储元件进行感测,其中所述多于一个的不同的参考电平各自将两个相邻的数据状态分隔开,所述一个或更多个管理电路基于给定的存储元件根据所述感测而呈现出所处的一个或更多个数据状态的范围来形成与所述所选字线相关联的所述非易失性存储元件的第一子组和与所述所选字线相关联的所述非易失性存储元件的第二子组,其中,所述子组中的每个子组包括用于所述数据状态中的至少两个数据状态的存储元件,所述第一子组或所述第二子组中的至少一个子组包括用于被另一子组中的数据状态分隔开的两个数据状态的存储元件,所述逻辑电路装置对所述第一子组中的非易失性存储元件的数目与所述第二子组中的非易失性存储元件的数目的差的累积总计进行跟踪,所述一个或更多个管理电路响应于确定出所述差大于阈值而确定出存在与对所述数据进行编程相关联的缺陷。
11.根据权利要求10所述的非易失性存储器装置,其中,在所述第一子组和所述第二子组中均不存在具有相邻的数据状态的存储元件,其中所述多个数据状态中的每一个数据状态表现在所述第一子组或所述第二子组中。
12.根据权利要求10所述的非易失性存储器装置,其中,在所述第一子组或所述第二子组中存在具有相邻的数据状态的存储元件,其中所述多个数据状态中的每一个数据状态表现在所述第一子组或所述第二子组中。
13.根据权利要求10至12中任一项所述的非易失性存储器装置,其中,所述非易失性存储元件被布置成NAND串。

说明书全文

针对非易失性存储装置的非对称状态检测

背景技术

[0001] 本公开涉及针对非易失性存储器的技术。
[0002] 半导体存储器变得日益普遍地用在各种电子装置中。例如,非易失性半导体存储器被用在蜂窝电话、数码相机个人数字助理、移动计算装置、非移动计算装置及其他装置。电可擦除可编程只读存储器(EEPROM)和闪速存储器属于最普遍的非易失性半导体存储器。
与传统的全功能EEPROM相比,使用闪速存储器(也是一种EEPROM),可以在一个步骤中擦除整个存储器阵列的内容或存储器的一部分的内容。
[0003] 传统的EEPROM和闪速存储器两者都利用浮置栅,浮置栅位于半导体衬底中的沟道区上方并且与该沟道区绝缘。浮置栅位于源极区与漏极区之间。控制栅设置在浮置栅上方并且与该浮置栅绝缘。由此所形成的晶体管的阈值电压(VTH)由浮置栅上所保持的电荷量来控制。也就是说,在晶体管被接通之前必须施加给控制栅的用于允许在晶体管的源极与漏极之间传导的最小电压量由浮置栅上的电荷电平来控制。
[0004] 一些EEPROM和闪速存储器装置具有用于存储两个范围的电荷的浮置栅,因此,可以在两个状态例如擦除状态和编程状态之间对存储器元件进行编程/擦除。这样的闪速存储器装置有时被称为二进制闪速存储器装置,原因在于每个存储器元件可以存储一位数据。
[0005] 通过标识多个不同的容许/有效编程阈值电压范围来实现多态(也称为多级)闪速存储器装置。每个不同的阈值电压范围与在存储器装置中被编码的数据位集合的预定值对应。例如,当存储器元件可以被放置在与四个不同的阈值电压范围对应的四个离散的电荷带中的一个中时,每个存储器元件可以存储两位数据。
[0006] 通常,以幅度随时间增加的一系列脉冲来施加在编程操作期间施加于控制栅的编程电压VPGM。在一种可行的方法中,脉冲的幅度随着每个相继脉冲以预定步长例如0.2V至0.4V增加。VPGM可以施加于闪速存储器元件的控制栅。在编程脉冲之间的时间段中,执行验证操作。也就是说,在相继编程脉冲之间读取被并行编程的元件组中的每个元件的编程电平,以确定该编程电平是否等于或大于元件被编程所达到的验证电平。对于多态闪速存储器元件阵列而言,会对元件的每个状态执行验证步骤以确定该元件是否达到其与数据相关联的验证电平。例如,能够以四个状态存储数据的多态存储器元件会需要对三个比较点执行验证操作。
[0007] 此外,当对EEPROM或闪速存储器装置例如NAND串中的NAND闪速存储器装置进行编程时,通常对控制栅施加VPGM并且将位线接地,从而使得来自单元或存储器元件例如存储元件的沟道的电子被注入到浮置栅中。当电子在浮置栅中累积时,浮置栅变得带负电荷并且存储器元件的阈值电压升高,使得存储器元件被认为处于编程状态。
[0008] 然而,仍未确定的一个问题是存储器装置的可靠性。附图说明
[0009] 图1是NAND串的俯视图。
[0010] 图2是图1的NAND串的等效电路图。
[0011] 图3是NAND闪速存储元件阵列的框图
[0012] 图4描绘出在衬底上形成的NAND串的截面视图。
[0013] 图5图示出可以包括一个或更多个存储器管芯(die)或芯片的非易失性存储装置。
[0014] 图6A描绘出存储器单元阵列的示例性结构。
[0015] 图6B是描绘出感测的一个实施例的框图。
[0016] 图7A是描述编程处理的一个实施例的流程图,该编程处理包括一个或更多个验证步骤。
[0017] 图7B图示出在每个存储器单元存储两位数据的情况下与针对存储器单元阵列的数据状态对应的示例Vt分布。
[0018] 图7C示出每个存储元件存储三位的存储元件的阈值电压分布的示例。
[0019] 图7D是示出具有编程缺陷的器件的阈值电压分布的示图。
[0020] 图8A描绘出由存储系统中的控制器执行的加扰,在该存储系统中,非用户数据和用户数据被存储在不同存储器位置的对应部分中。
[0021] 图8B描绘出由存储系统中的控制器执行的解扰,在该存储系统中,非用户数据和用户数据被存储在不同存储器位置的对应部分中。
[0022] 图9A描绘出由存储系统中的使用密钥生成器的片上电路装置执行的加扰。
[0023] 图9B描绘出由存储系统中的使用密钥生成器的片上电路装置执行的解扰。
[0024] 图10描绘出确定是否存在与将数据编程到所选非易失性存储元件中相关联的缺陷的处理的一个实施例的流程图。
[0025] 图11是确定在对非易失性存储元件进行编程时是否存在缺陷的处理的一个实施例的流程图。
[0026] 图12A至图12D表示在图11的处理期间与存储元件中之一相关联的数据存器的使用。
[0027] 图13是在缺陷确定处理期间对数据进行计数的处理的一个实施例的流程图。
[0028] 图14A和图14B描绘出随着更多的存储器单元被认为处于检测缺陷的处理中“1”的数目和“0”的数目可以如何偏离的示例。
[0029] 图15是当每个存储器单元对三位进行编程时检测编程缺陷的处理的一个实施例的流程图。
[0030] 图16是当每个存储器单元对两位进行编程时检测编程缺陷的处理的一个实施例的流程图。
[0031] 图17是确定两条字线短接在一起的处理1700的一个实施例的流程图。

具体实施方式

[0032] 本文中公开了用于确定存在由于对非易失性存储元件进行编程而发生的缺陷的技术。该缺陷不限于任何特定的缺陷。缺陷的示例包括但不限于:断开的字线、控制栅与衬底短路、字线与字线短路、双重写入等。检测这些缺陷和其他缺陷提出了许多挑战。一个挑战在于:在不使编程时间增加太多的情况下检测缺陷。一些传统的技术会需要执行大量的感测操作,这会增加总的编程时间。另一挑战在于:一些传统技术会漏掉一些类型的缺陷。又一挑战在于:在存储器装置上通常存在有限量的逻辑器件(如锁存器)。在有限量的逻辑器件的情况下检测缺陷可能具有挑战性。
[0033] 在一个实施例中,以这样的方式来对存储器单元进行编程:如果编程成功,则在不同数据状态中将存在基本上均匀的存储器单元分布。例如,当每个存储器单元对两位进行编程时,在四个数据状态中的每个数据状态中存在约25%的存储器单元。实现该基本上均匀的分布的一种方式为:在进行编程之前使数据随机化。然而,可以使用其他技术。
[0034] 在编程完成之后(结果为成功或失败),在一个或更多个参考电平对存储器单元进行感测。策略性地形成存储器单元的两个子组以使得能够以简单且高效的方式检测缺陷。这两个子组可以表示所有数据状态——每个子组中表示一半数据状态。将一个子组中的存储器单元的数目与另一子组中的存储器单元的数目进行比较。所期望的是,在每个子组中应当存在大约相同的数目。如果不存在大约相同的数目,则检测到缺陷。
[0035] 可以很高效地来执行对两组的比较。虽然可以使用各种技术,但是在一个实施例中,在累积寄存器中保持对子组中的存储器单元的数目的不平衡的累积总计。可以由存储器管芯上的逻辑电路装置来跟踪该总计。在一个实施例中,处理包括多次通过(pass),其中,每次通过处理不同的子组。使用多次通过可以有助于更快地检测到问题并且还提供对子组的各种组合的测试。
[0036] 在一个实施例中,执行并行处理以有助于加速检测处理。例如,形成子组可以包括将感测操作的结果进行组合。可以与组合较早的感测操作结果并行地执行感测操作。
[0037] 而且,子组的形成可以是策略性的,以防止掩盖缺陷。在一个实施例中,形成子组,使得数据状态存在一定程度的分隔。作为一个示例,子组中的至少一个子组包括被另一子组中的数据状态分隔开的两个数据状态。作为另一示例,在第一子组或第二子组中均不存在相邻的数据状态。
[0038] 适用于实现本发明的存储器系统的一个示例使用NAND闪速存储器结构,该NAND闪速存储器结构包括在两个选择栅之间布置多个串联的晶体管。注意,用于缺陷检测的技术不限于NAND体系结构。选择栅和串联的晶体管被称为NAND串。图1是示出一个NAND串的俯视图。图2是该NAND串的等效电路。图1和图2中所描绘的NAND串包括夹在第一选择栅120与第二选择栅122之间并且串联的四个晶体管100、102、104和106。选择栅120对NAND串连接至位线126进行控。选择栅122对NAND串连接至源极线128进行门控。通过向控制栅120CG施加适当的电压来控制选择栅120。通过向控制栅122CG施加适当的电压来控制选择栅122。晶体管100、102、104和106中的每个晶体管均具有控制栅和浮置栅。晶体管100具有控制栅100CG和浮置栅100FG。晶体管102包括控制栅102CG和浮置栅102FG。晶体管104包括控制栅104CG和浮置栅104FG。晶体管106包括控制栅106CG和浮置栅106FG。控制栅100CG连接至字线WL3,控制栅102CG连接至字线WL2,控制栅104CG连接至字线WL1以及控制栅106CG连接至字线WL0。控制栅还可以被设置成字线的一部分。在一个实施例中,晶体管100、102、104、106均是存储元件,也被称为存储器单元。在其他实施例中,存储元件可以包括多个晶体管或者可以不同于图1和图2所描绘的存储元件。选择栅120连接至选择线SGD(漏极选择栅)。选择栅122连接至选择线SGS(源极选择栅)。
[0039] 图3是描绘三个NAND串的电路图。使用NAND结构的闪速存储器系统的典型体系结构将包括若干NAND串。例如,三个NAND串320、340和360在具有更多NAND串的存储器阵列中被示出。NAND串中的每个NAND串包括两个选择栅和四个存储元件。尽管为了简单起见图示出四个存储元件,但现代的NAND串可以具有例如多达三十二个或六十四个存储元件。
[0040] 例如,NAND串320包括选择栅322和327以及存储元件323至326,NAND串340包括选择栅342和347以及存储元件343至346,NAND串360包括选择栅362和367以及存储元件363至366。每个NAND串通过其选择栅(例如选择栅327、347或367)连接至源极线。选择线SGS用于控制源极侧选择栅。各个NAND串320、340和360通过选择栅322、342、362等中的选择晶体管来连接至相应的位线321、341和361。这些选择晶体管是由漏极选择线SGD来控制的。在其他实施例中,选择线不一定需要在NAND串之间为公共的;也就是说,可以针对不同的NAND串设置不同的选择线。字线WL3连接至用于存储元件323、343和363的控制栅。字线WL2连接至用于存储元件324、344和364的控制栅。字线WL1连接至用于存储元件325、345和365的控制栅。
字线WL0连接至用于存储元件326、346和366的控制栅。如可以看到的,每条位线和相应的NAND串包括存储元件阵列或集合的列。字线(WL3、WL2、WL1和WL0)包括阵列或集合的行。每条字线将该行的每个存储元件的控制栅进行连接。或者,可以由字线自身来提供控制栅。例如,字线WL2提供用于存储元件324、344和364的控制栅。实际上,在一条字线上可以存在数千存储元件。
[0041] 每个存储元件可以存储数据。例如,当存储一位数字数据时,存储元件的可行的阈值电压(VTH)的范围被分成分配有逻辑数据“1”和“0”的两个范围。在NAND型闪速存储器的一个示例中,VTH在存储元件被擦除之后为负并且被限定成逻辑“1”。在编程操作之后的VTH为正并且被限定成逻辑“0”。当VTH为负并且尝试读取时,存储元件将接通以指示逻辑“1”被存储。当VTH为正并且尝试读取操作时,存储元件将不接通,这指示逻辑“0”被存储。存储元件还可以存储多级信息例如数字数据的多个位。在该情况下,VTH值的范围被分成许多级数据。例如,如果存储信息的四级,则将存在被分配给数据值“11”、“10”、“01”和“00”的四个VTH范围。在NAND型存储器的一个示例中,擦除操作之后的VTH为负并且被限定成“11”。正的VTH值用于“10”、“01”和“00”的状态。被编程到存储元件中的数据与该元件的阈值电压范围之间的特定关系取决于针对存储元件所采用的数据编码方案。例如,美国专利6,222,762和美国专利
7,237,074描述了用于多态闪速存储元件的各种数据编码方案,这两个美国专利的全部内容通过引用被并入本文中。
[0042] 当对闪速存储元件进行编程时,向存储元件的控制栅施加编程电压并且将与存储元件相关联的位线接地。来自沟道的电子被注入进浮置栅中。当电子在浮置栅中累积时,浮置栅变得带负电荷并且存储元件的VTH升高。为了向正被编程的存储元件的控制栅施加编程电压,在适当的字线上施加该编程电压。如上文所论述的那样,NAND串中的每个NAND串中的一个存储元件共享同一字线。例如,当对图3的存储元件324进行编程时,还向存储元件344和364的控制栅施加编程电压。
[0043] 图4描绘出在衬底上形成的NAND串的截面视图。该视图是简化的并且不是等比例的。NAND串400包括在衬底490上形成的源极侧选择栅406、漏极侧选择栅424和八个存储元件408、410、412、414、416、418、420和422。在每个存储元件和选择栅406与424的两侧设置了许多源极/漏极区,源极/漏极区的一个示例为源极/漏极区430。在一种方法中,衬底490采用三阱技术,该三阱技术包括在n阱区494内p阱区492,n阱区494又在P型衬底区496内。NAND串与其非易失性存储元件可以至少部分地形成在p阱区上。除具有电势VBL的位线426之外,还设置了具有电势VSOURCE的源极供给线404。在一种可行的方法中,可以经由端子402向p阱区492施加电压。还可以经由端子403向n阱区494施加电压。
[0044] 在包括擦除-验证操作的读取或验证操作——在其中存储元件的条件如存储元件的阈值电压被确定——期间,在与所选存储元件相关联的所选字线上提供VCGR。此外,回顾上文,存储元件的控制栅可以被设置成字线的一部分。例如,WL0、WL1、WL2、WL3、WL4、WL5、WL6和WL7可以分别经由存储元件408、410、412、414、416、418、420和422的控制栅延伸。在一个可行的升压方案中,可以向与NAND串400相关联的未选择的字线施加读取通过电压VREAD。其他升压方案向一些字线施加VREAD并且向其他字线施加更低的电压。分别向选择栅406和
424施加VSGS和VSGD。
[0045] 图5图示出可以包括一个或更多个存储器管芯或芯片512的非易失性存储装置510。存储器管芯512包括(二维或三维的)存储器单元阵列500、控制电路装置520以及读/写电路530A和530B的阵列。在一个实施例中,在阵列的相对侧以对称的方式来实现通过各种外围电路对存储器阵列500的访问,使得每一侧的访问线路和电路装置的密度减半。读/写电路530A和530B包括多个感测块300,多个感测块300使得能够对一页存储器单元进行并行读取或编程。存储器阵列500可以经由行译码器540A和540B通过字线并且经由列译码器
542A和542B通过位线进行寻址。在典型的实施例中,控制器544与一个或更多个存储器管芯
512被包括在同一存储器装置510(可移动存储卡或封装)中。命令和数据经由线532在主机与控制器544之间传输并且经由线534在控制器与一个或更多个存储器管芯512之间传输。
一种实现方式可以包括多个芯片512。
[0046] 控制电路装置520与读/写电路530A和530B协作,以对存储器阵列500执行存储器操作。控制电路装置520包括状态机522、片上地址译码器524和电制模块526。状态机522提供对存储器操作的芯片级控制。片上地址译码器524提供用于在由主机或存储器控制器使用的地址与由译码器540A、540B、542A和542B使用的硬件地址之间进行转换的地址接口。电力控制模块526控制在存储器操作期间向字线和位线供给的电力和电压。在一个实施例中,电力控制模块526包括可以建立比供给电压更大的电压的一个或更多个电荷
[0047] 在一个实施例中,控制电路装置520、电力控制电路526、译码器电路524、状态机电路522、译码器电路542A、译码器电路542B、译码器电路540A、译码器电路540B、读/写电路530A、读/写电路530B和/或控制器544中之一或任意组合可以被称为一个或更多个管理电路。
[0048] 在一个实施例中,存储器管芯512具有计数逻辑器件503和累积寄存器501。累积寄存器501可以是带符号的寄存器。在一个实施例中,当确定是否存在编程方面的缺陷时使用计数逻辑器件503。在一个实施例中,计数逻辑器件503对累积寄存器501中的计数进行累积并且确定存在该计数超出标准(例如,阈值)的缺陷。在下文中论述进一步的细节。
[0049] 图6A描绘出存储器单元阵列500的示例性结构。在一个实施例中,存储器单元阵列被划分成M块存储器单元。如对于闪速EEPROM系统常见的,块是擦除单位。也就是说,每个块包含被一起擦除的最小数目的存储器单元。每个块通常被分成许多页。页是编程单位。一页或更多页的数据通常存储在存储器单元的一行中。页可以存储一个或更多个扇区。扇区包括用户数据和开销数据。开销数据通常包括根据扇区的用户数据计算出的纠错码(ECC)的奇偶校验位。(下文所描述的)控制器的一部分在数据正被编程到阵列中时计算ECC奇偶性,并且还在数据正被从阵列读取时校验ECC奇偶性。可选地,ECC和/或其他开销数据存储在与ECC和/或其他开销数据所属的用户数据不同的页或者甚至不同的块中。用户数据的扇区通常为512字节,与磁盘驱动中的扇区的大小对应。大量的页形成块,其中,大量的页指从8页例如到多达32、64、128或更多页的任何数量。还可以使用不同大小的块和布置。
[0050] 在另一实施例中,将位线分成奇数位线和偶数位线。在奇数/偶数位线体系结构中,在一个时刻对沿公共字线并且连接至奇数位线的存储器单元进行编程,而在另一时刻对沿公共字线并且连接至偶数位线的存储器单元进行编程。
[0051] 图6A还示出存储器阵列500的块i的更多细节。块i包括X+1条位线和X+1个NAND串。块i还包括64条数据字线(WL0至WL63)、两条虚设字线(WL_d0和WL_d1)、漏极侧选择线(SGD)和源极侧选择线(SGS)。每个NAND串的一个端子经由(连接至选择线SGD的)漏极选择栅连接至对应的位线,而另一端子经由(连接至选择线SGS的)源极选择栅连接至源极线。因为存在有六十四条数据字线和两条虚设字线,所以每个NAND串包括六十四个数据存储器单元和两个虚设存储器单元。在其他实施例中,NAND串可以具有比64个数据存储器单元更多或更少的数据存储器单元以及更多或更少的虚设存储器单元。数据存储器单元可以存储用户数据或系统数据。虚设存储器单元通常不用于存储用户数据或系统数据。一些实施例不包括虚设存储器单元。
[0052] 图6B是描绘出感测块300的一个实施例的框图。单个感测块300被分割成公共部分690和被称为感测模块680的核心部分。在一个实施例中,针对每条位线存在单独的感测模块680,并且针对多个感测模块的集合680存在一个公共部分690。在一个示例中,感测块300包括一个公共部分690和八个感测模块680。成组的感测模块中的每个感测模块经由数据总线672与关联的公共部分进行通信。
[0053] 感测模块680包括感测电路装置670,感测电路装置670确定所连接的位线中的传导电流高于还是低于预定阈值电平。感测模块680还包括用于对所连接的位线设置电压条件的位线锁存器682。例如,位线锁存器682中锁存的预定状态将引起所连接的位线被拉至指定编程禁止(例如1.5V至3V)的状态。作为示例,标志=0可以禁止编程,而标志=1不禁止编程。
[0054] 公共部分690包括处理器692、数据锁存器694的三个示例集合以及耦接在数据锁存器的集合694与数据总线621之间的I/O接口698。可以针对每个感测模块提供数据锁存器的一个集合,并且可以针对每个集合提供由DL1、DL2和DL3标识的三个数据锁存器。下文进一步讨论数据锁存器的用途。
[0055] 处理器692执行计算。例如,处理器692的功能之一是确定所感测的存储元件中存储的数据并且将所确定的数据存储在数据锁存器的集合中。数据锁存器的集合(例如,694)中的至少一些数据锁存器用于存储在读取操作期间由处理器692确定的数据位。数据锁存器的集合中的至少一些数据锁存器还用于存储在编程操作期间从数据总线621导入的数据位。所导入的数据位表示要被编程到存储器中的写入数据。I/O接口698提供数据锁存器694至697与数据总线621之间的接口。
[0056] 处理器692可以执行用于在编程期间检测缺陷的一些逻辑。例如,如下文所论述的那样,处理器692可以将感测操作的结果进行组合以形成子组。数据锁存器DL1至DL3可以用于存储在检测这样的缺陷时的中间结果。
[0057] 在一个实施例中,在编程操作开始时,将数据存储在DL1锁存器和DL2锁存器中。例如,可以将低页数据存储在DL1中,并且可以将高页数据存储在DL2中。在一个实施例中,将在IDL期间从存储器单元读取的低页数据存储在DL1锁存器中。DL3可以用于存储编程期间的验证状态,例如锁定状态。例如,当存储器单元的Vt经验证达到其目标电平时,DL3锁存器可以被设置成指示上述情况,以使得可以禁止对存储器单元的进一步编程。注意,这描述了每个存储器单元对两位进行编程。在一个实施例中,在读取操作期间,DL1锁存器和DL2锁存器用于存储从存储器单元读取的两位。注意,每个存储器单元也可以有多于两位。针对每个存储器单元可以存在用于要存储的每个附加位的一个附加锁存器。
[0058] 在读取或其他感测期间,状态机622控制向所寻址的存储元件供给不同控制栅电压。随着控制栅电压在与存储器所支持的各种存储器状态对应的各种控制栅电压间进行阶跃,感测模块680可能在这些电压中之一处跳变(trip),并且输出将经由总线672从感测模块680被提供至处理器692。就此,处理器692通过考虑感测模块的一个或更多个跳变事件以及与经由输入线693从状态机施加的控制栅电压有关的信息来确定作为结果的存储器状态。然后,处理器692计算针对该存储器状态的二进制编码并且将作为结果的数据位存储到数据锁存器(例如,694)中。在核心部分的另一实施例中,位线锁存器682提供双重用途:既作为用于锁存感测模块680的输出的锁存器,还作为如上所述的位线锁存器。
[0059] 一些实现方式可以包括多个处理器692。在一个实施例中,每个处理器692包括输出线(未描绘),使得输出线中的每条输出线被一起进行线或(wired-OR)。在一些实施例中,在输出线连接至线或线之前使输出线反相。因为接收线或的状态机可以确定正在被编程的所有位何时达到期望平,所以该配置使得在编程验证处理期间能够快速确定编程处理何时已经完成。例如,当每个位已经达到其期望水平时,针对该位的逻辑0将被发送至线或线(或者数据1被反相)。当所有位输出数据0(或数据1被反相)时,则状态机知道要终止编程处理。因为每个处理器与八个感测模块进行通信,所以状态机需要对线或线读取八次,或者逻辑被添加至处理器692以累积关联的位线的结果,使得状态机仅需要对线或线读取一次。类似地,通过正确地选择逻辑电平,全局状态机可以检测第一位何时改变其状态并且可以相应地改变算法
[0060] 在编程或验证期间,将要被编程的数据从数据总线621存储进数据锁存器的集合694至697中。在状态机的控制下的编程操作包括对所寻址的存储元件的控制栅施加的一连串编程电压脉冲。在每个编程脉冲之后进行读回(验证),以确定是否已经将存储元件编程至期望的存储器状态。处理器692相对期望的存储器状态来监测读回的存储器状态。当上述两个状态一致时,处理器692设置位线锁存器682,以使该位线被拉至指定编程禁止的状态。
这样做禁止与位线耦接的存储元件被进一步编程,即使在存储元件的控制栅上出现编程脉冲也是如此。在其他实施例中,处理器最初加载位线锁存器682,并且感测电路装置在验证处理期间将位线锁存器682设置成禁止值。
[0061] 在一个实施例中,数据锁存器堆栈的每个集合694至697包含与感测模块680对应的数据锁存器的堆栈。在一个实施例中,每个感测模块680具有三个数据锁存器。与m个存储元件的读/写块对应的所有DL1数据锁存器和DL2数据锁存器可以被链接在一起以形成块移位寄存器,使得数据块可以通过串行传输被输入或输出。
[0062] 在一个实施例中,DL1锁存器和DL2锁存器的一个目的是存储要被编程到存储元件中的数据。例如,存储元件可以每个存储元件存储两位。在一个实施例中,最初将低页数据存储在DL1锁存器中,以及最初将高页数据存储在DL2锁存器中。
[0063] 在一个实施例中,存储元件能够每个存储元件存储三位。在该情况下,可以存在用于最初存储要被编程到存储元件中的第三位数据的附加数据锁存器(图6B未描绘出)。在一个实施例中,存储元件能够每个存储元件存储四位,在该情况下,可以存在用于最初存储要被编程到存储元件中的第三位数据和第四位数据的两个附加数据锁存器(图6B未描绘出)。存储元件可以每个存储元件存储多于四位,在该情况下,可以针对每个位存在一个数据锁存器。
[0064] 可以在下述参考文献中找到与读取操作和感测放大器有关的附加信息:(1)美国专利7,196,931,“Non-Volatile Memory And Method With Reduced Source Line Bias Errors”;(2)美国专利7,023,736,“Non-Volatile Memory And Method with Improved Sensing”;(3)美国专利申请公报第2005/0169082号;(4)美国专利7,196,928,“Compensating for Coupling During Read Operations of Non-Volatile Memory”;以及(5)于2006年7月20日公开的美国专利申请公报第2006/0158947,“Reference Sense Amplifier For Non-Volatile Memory”。上面刚列出的所有五个专利文献的全部内容通过引用被并入本文中。
[0065] 图7A是描述编程处理700的一个实施例的流程图,编程处理700包括一个或更多个验证步骤。可以使用本文所描述的编程顺序中的任意顺序以及其他编程顺序。
[0066] 在步骤706中,将编程电压(Vpgm)设置成初始值。而且,在步骤706中,将编程计数器(PC)初始化为0。在步骤720中,施加编程脉冲。
[0067] 在步骤722中,执行验证处理。在步骤724中,确定存储器单元是否已验证:存储器单元的阈值电压处于该存储器单元的最终目标电压。注意,验证给定状态的每个存储器单元处于适当的阈值电压不是必需的。纠错能够针对低于其目标阈值电压的一些存储器单元进行纠正。纠错能够针对被过度编程的一些存储器单元进行纠正。步骤724涉及完成了编程的所有状态。
[0068] 如果验证通过,则在步骤726中编程处理成功完成(状态=通过)。如果存储器单元中的所有存储器单元没有被全部验证,则确定编程计数器(PC)是否小于最大值例如20。如果编程计数器(PC)不小于最大值(步骤728),则编程处理未通过(步骤730)。如果编程计数器(PC)小于最大值(例如,20),则在步骤732中使编程计数器(PC)递增1并且使编程电压阶跃式升高至下一脉冲。在步骤732之后,处理循环回到步骤720并且向存储器单元施加下一编程脉冲。
[0069] 在成功的编程处理(具有验证)结束时,存储器单元的阈值电压应该根据情况处于用于被编程的存储器单元的阈值电压的一个或更多个分布内或者处于用于被擦除的存储器单元的阈值电压的分布内。图7B图示出在每个存储器单元存储两位数据时与存储器单元阵列的数据状态对应的示例Vt分布。然而,其他实施例可以使用每个存储器单元多于或少于三位数据。图7B示出与擦除状态和编程状态A至C对应的四个Vt分布。在一个实施例中,擦除状态中的阈值电压为负而编程状态A至C中的阈值电压为正。然而,编程状态A至C中的一个或更多个编程状态中的阈值电压可以为负。擦除状态中的一些或所有阈值电压可以为正。
[0070] 在每个数据状态擦除(Erase)至C之间是用于读取来自存储器单元的数据的读取参考电压电平。例如,图7B示出擦除状态与A状态之间的读取参考电压VrA、A状态与B状态之间的VrB以及B状态与C状态之间的VrC。通过测试给定的存储器单元的阈值电压高于还是低于相应的读取参考电压,系统可以确定存储器单元处于什么状态。
[0071] 在每个编程状态的下沿处或在每个编程状态的下沿附近是验证参考电压。例如,图7B示出针对A状态的VvA、针对B状态的VvB以及针对C状态的VvC。当将存储器单元编程到给定状态时,系统将测试这些存储器单元是否具有大于或等于验证参考电压的阈值电压。
[0072] 图7C示出每个存储元件存储三个位的存储元件的阈值电压分布的示例。在该情况下,存在八个状态,即,擦除以及A至G。描绘了用于对A状态至G状态进行验证的验证电平VvA至VvG。描绘了在各种状态之间的读取参考电压VrA至VrG。
[0073] 注意,Vt分布可以部分交叠,这是因为纠错算法可以处理一定百分比的错误单元。还要注意,与所描绘的阈值电压分布的相等间隔/宽度相反,各种分布可以具有不同的宽度/间隔,以便适应对数据保持丢失的敏感度的变化量。
[0074] 在一些实施例中,在假设编程不具有缺陷的情况下,处于每个状态中的存储器单元的数目大约相同。例如,对于图7B的示例而言,每个状态具有约25%的存储器单元。对于图7C的示例而言,每个状态具有约12.5%的存储器单元。
[0075] 然而,注意,如果编程具有缺陷,则状态之间分布可能是不均匀的。图7D描绘出存在编程缺陷的存储器单元的一个可能的阈值分布的示例。注意,仅描绘出与状态A至C对应的部分。这可以是针对诸如断开的字线的缺陷或一些其他的编程缺陷。虚线表示在不存在缺陷并且在建立均匀的分布时编程是成功的情况下的VTH分布。线723表示由于编程缺陷导致VTH分布可能在状态之间并不均匀的示例。
[0076] 用于实现相等分布的一种技术为在将数据编程在存储元件中之前使数据随机化。数据加扰是用于使数据随机化的一种技术。因此,数据加扰是用于实现非易失性存储元件在各数据状态中的基本均匀分布的一种技术。然而,还可以使用数据加扰以外的技术。以下是可以被执行以使数据随机化的数据加扰的一些示例,但是可以使用其他数据加扰技术。
[0077] 数据加扰
[0078] 针对非易失性存储器例如NAND存储器的数据加扰在解决系统可靠性问题方面变得日益重要,系统可靠性问题固有地易受到对最坏情况数据模式的设计的影响,该最坏情况数据模式引发存储器编程故障。引起存储器故障的数据模式被称为最坏情况模式。因为纠错码(ECC)译码由于编程干扰而不可纠正,所以这样的故障是毁灭性的。而且,编程干扰问题取决于相邻字线和一系列字线中的存储器位线单元的状态。最坏情况模式包括固定的重复数据例如可以在控制数据和文件访问表(FAT)区域中找到的固定的重复数据。FAT数据与文件系统数据有关并且与如何组织文件名、文件夹等有关。最坏情况模式还可以由其他因素引起。例如,具有越多的低状态存储元件的字线会被具有越多的高状态单元的字线干扰。数据加扰使存储元件中的数据状态的分布随机化,使得避免了最坏情况数据模式。数据加扰和解扰对于用户而言应当是易懂的。
[0079] 在一些实施例中,数据加扰引起存储元件在不同数据状态中的基本均衡的(或均匀的)数量。可以在存储器管芯上或存储器管芯外执行数据加扰。
[0080] 图8A描绘出由存储系统中的控制器执行的加扰,在该存储系统中,非用户数据和用户数据被存储在不同存储器位置的对应部分。一种方法包括在片外控制器电路处对数据执行加扰和解扰,其中,非用户数据被片上存储,并且使用非用户数据编码的用户数据也被片上存储。芯片是指在其上形成有存储器阵列的存储器管芯。非用户数据可以是用于对用户数据进行加扰的数据的预定随机模式或伪随机模式,或者可以是任意模式例如测试模式。例如,可以使用全部是0或所有1的纯模式。该模式不需要是随机的或伪随机的。
[0081] 将非用户数据存储在存储器阵列中是有利的,这是因为这使得能够存储大量数据例如数兆字节。与长度为若干位的定长密钥相比,这样大量的数据可以更随机。此外,因为非用户数据不必须通过特定方式例如通过密钥移位来生成,所以非用户数据可以更随机。可以在制造时例如使用任意技术来生成非用户数据。非用户数据可以被存储在存储器阵列的一部分例如块中并且可以被存储器阵列的许多其他部分例如其他块使用,以对要被存储在其他块中的用户数据进行编码或加扰。类似地,在反向译码处理期间,使用相同的非用户数据来对经加扰或者经其他方式编码的用户数据进行解扰或者以其他方式进行译码。
[0082] 注意,加扰被认为是编码的一种形式,而解扰被认为是译码的一种形式。术语加扰和解扰等将用于本文的特定示例中,在本文的特定示例中,使用随机数据或伪随机数据对用户数据进行编码或译码。然而,编码或译码的一般处理可以分别由加扰和解扰来替代。
[0083] 存储器装置800包括存储器管芯808,在存储器管芯808上形成有许多存储器位置。存储器装置800可以在例如可移动存储卡或USB闪速驱动上形成,可移动存储卡或USB闪速驱动被插入到主机装置例如膝上型计算机、数码相机、个人数字助理(PDA)、数字音频播放器或移动(蜂窝)电话中。这样的卡可以包括整个存储器装置。或者,控制器和存储器阵列以及关联的外围电路可以被设置在分开的卡中。或者,存储器装置800可以被嵌入作为主机系统的一部分。主机装置可以具有其自身的控制器820,其用于与存储器装置800交互,例如以便读取或写入用户数据。例如,主机控制器820可以向存储器装置发送命令以写入或读取数据。存储器装置控制器802将这样的命令转换成能够由存储器装置中的控制电路装置解释和执行的命令信号。控制器802还可以包含用于临时存储被写入存储器阵列或从存储器阵列读取的用户数据的缓冲存储器807。
[0084] 存储器管芯808上可以形成有具有许多块存储元件的存储器阵列809。描绘出可以是相应块的存储器阵列的示例存储器位置M1 810和M2812。片外控制器802是存储器装置800的一部分并且包括编码器/译码器804和加扰器/解扰器806。在写入处理中,控制器802接收来自主机控制器820的写入命令和用户数据。写入命令可以指定存储器阵列中的用于存储用户数据的地址。当控制器802接收到写入命令(cmd)和用户数据时,控制器802向第一存储器位置M1 810提供读取命令以读取非用户数据。加扰器/解扰器806使用非用户数据来对用户数据进行加扰,从而提供经修改的用户数据,经修改的用户数据被写入第二存储器位置M2 812。在进行加扰之前,编码器/译码器804可以例如通过执行ECC编码并且添加开销数据如ECC奇偶校验位来对用户数据进行编码。
[0085] 存储有非用户数据的存储器位置可以与存储有用户数据的存储器位置是相同类型或者是不同类型。例如,非用户数据可以存储在例如一旦写入便永久存储数据的反熔丝中或者存储在可擦除非易失性存储元件中。
[0086] 可以通过非用户数据的对应部分来对用户数据的不同部分进行加扰或者以其他方式进行编码。例如,可以通过存储在存储器位置M1中的第n条字线上的非用户数据来对存储在存储器位置M2中的第n条字线上的用户数据的一部分进行加扰或者以其他方式进行编码。可以通过M1中的第i页上的非用户数据来对M2中的第i页上的用户数据的一部分进行加扰或者以其他方式进行编码。每条字线可以具有一页或更多页。此外,一页可以由多个子页组成,使得可以通过M1中的第j子页上的非用户数据来对M2中的第j子页上的用户数据的一部分进行加扰或者以其他方式进行编码。例如,每条字线可以具有多个子页。通常,用户数据的任意单位可以通过非用户数据的对应单位来进行加扰或者以其他方式进行编码,其中,经加扰的用户数据和经加扰的非用户数据存储在其相应块中的对应位置中。经加扰的用户数据可以存储在M2中的与在M1中存储对应非用户数据的位置相同的位置中,或者经加扰的用户数据可以存储在M2中的下述位置中,M2中的该位置例如通过使用偏移量而基于M1中的对应非用户数据的位置但与M1中的对应非用户数据的位置不同,例如,非用户数据存储在M1中的WL1上,而用户数据存储在M2中的WL2上,或者,非用户数据存储在M1中的第n页上,而用户数据存储在M2中的第n+1页上。各种其他方法也是可行的。
[0087] 而且,可以使用同一块的非用户数据来对多个块的用户数据进行加扰。这降低了存储非用户数据的相对开销成本。例如,假设主机请求写入存储器阵列的用户数据足够大使得以多个块来存储该用户数据。在该情况下,可以使用非用户数据的同一部分对每个块的相应部分中的用户数据的每个部分进行加扰。例如,使用块M1的WL1的非用户数据对块M2的WL1的用户数据和附加块M3的WL1的用户数据进行加扰。另一选择是例如通过使非用户数据移位来改变用于对每个块进行编码的非用户数据,例如,使用存储器位置M1中的WL1的非用户数据对存储器位置M2中的WL1的用户数据进行加扰、使用存储器位置M1中的WL1的非用户数据对存储器位置M3中的WL2的用户数据进行加扰,等等。或者,使用存储器位置M1中的WL1的非用户数据对存储器位置M2中的WL1的用户数据进行加扰、使用存储器位置M1中的WL2的非用户数据对存储器位置M3中的WL21的用户数据进行加扰,等等。通常,因为数据模式故障最受块内数据模式的影响,所以在块内提供随机加扰或伪随机加扰是足够的。然而,提供跨块的随机化也可以是满足需要的。
[0088] 在写入处理期间,控制器802通过对用户数据进行编码、加扰并写入存储器阵列来响应来自主机控制器820的写入命令。在一种可行的方法中,控制器800将用户数据存储在缓冲器807中、将用户数据进行处理并写入存储器阵列809、以及通知主机控制器820附加的数据可以被接收;在这时,控制器将附加的用户数据存储在缓冲器807中、将附加的用户数据进行处理并写入存储器阵列809,等等。控制器802可以写入用户数据中的某些部分,所述某些部分小于在来自主机控制器820的写入命令中被请求写入的用户数据,或者控制器802可以写入非用户数据中的某些部分,所述某些部分与主机控制器820请求写入的非用户数据相同。例如,控制器802可以接收要被写入的一页数据。作为响应,控制器802从存储器位置M1读取一页非用户数据、将该页非用户数据存储在控制器802的具有用户数据的工作存储器805中、对用户数据进行加扰以提供经修改的用户数据——其也存储在控制器802的工作存储器805中、以及将该页经修改的用户数据写入存储器位置M2。在另一方法中,控制器802以比一页更小的单位对用户数据进行处理,使得多次重复执行读取非用户数据、加扰用户数据以及写入经加扰的用户数据。在另一方法中,控制器802读取一页非用户数据,但多次重复执行加扰用户数据以及写入经加扰的用户数据。
[0089] 通常,当控制器802可以接收要被写入的附加用户数据时,控制器802通知主机控制器820。主机控制器820可以通过向存储器装置发送另一写入命令以及关联的用户数据来进行响应。例如,可以逐页写入数据。
[0090] 加扰器/解扰器806的加扰处理可以包括:执行一个或更多个逻辑运算,例如涉及用户数据和非用户数据的“与”、“异或”和/或“或非”运算。在一种方法中,控制器802可以读取非用户数据的连续部分,以对用户数据的对应连续部分每次一部分地进行加扰。控制器可以具有处理器、工作存储器805和执行期望功能所需要的其他部件。在一种方法中,控制器802将用户数据和非用户数据加载到相应的锁存器、执行涉及用户数据和非用户数据的逻辑运算、以及将运算的结果存储在另一锁存器中作为要被写入存储器阵列809的经加扰的用户数据。
[0091] 图8B描绘出由存储系统中的控制器执行的解扰,在该存储系统中,非用户数据和用户数据存储在不同存储器位置的对应部分中。在图8A的处理的反向处理中,从存储器阵列809读取经加扰的数据。例如,主机控制器820可以向控制器802提供读取命令,该读取命令指定要被读取的用户数据的地址。响应于该读取命令,控制器802例如从存储器位置M2读取经加扰的形式的对应用户数据。控制器802还从存储器位置M1读取与用户数据对应的非用户数据并且对用户数据进行解扰。也可以执行译码例如ECC译码,以获得主机控制器820能够访问的形式的用户数据。特别地,控制器802可以将经译码的用户数据存储在缓冲器807中并且通知主机控制器820:该数据可用于以主机控制器能够接受的格式来读取。在读取该数据之后,主机控制器820可以向控制器802发出另一读取命令。
[0092] 通过与先前所论述的写入处理进行类比,从存储器阵列中的相应位置读取经加扰或者经其他方式修改的用户数据的部分,并且使用从存储器阵列中的对应的相应位置读取的非用户数据来对该用户数据的部分进行解扰。例如,可以通过M1中的第i页上的非用户数据来对M2中的第i页上的用户数据的一部分进行解扰或者以其他方式进行译码。每条字线可以具有一页或更多页。此外,一页可以由子页组成,使得可以通过M1中的第j子页上的非用户数据来对M2中的第j子页上的用户数据的一部分进行解扰或者以其他方式进行译码。
[0093] 而且,控制器802可以读取用户数据中的某些部分,所述某些部分小于在来自主机控制器820的读取命令中被请求读取的用户数据,或者控制器802可以读取非用户数据中的某些部分,所述某些部分与主机控制器820请求读取的非用户数据相同。
[0094] 解扰处理可以包括:执行涉及经加扰或者经其他方式修改的用户数据和非用户数据的一个或更多个逻辑运算例如“与”、“异或”和/或“或非”。在一种方法中,控制器可以读取非用户数据的连续部分,以对用户数据的对应连续部分每次一部分地进行解扰。控制器可以具有处理器、工作存储器805和执行期望功能所需要的其他部件。在一种方法中,控制器802将用户数据和非用户数据加载到相应的锁存器、执行涉及用户数据和非用户数据的逻辑运算、以及将运算的结果存储在另一锁存器中作为经解扰的用户数据——其在缓冲器807中使得对于主机控制器820可用。如所提及的那样,经解扰的用户数据可以经历附加的译码例如ECC译码。
[0095] 图8A和图8B的存储系统的替选是提供控制器802中的存储器位置M1的非用户数据而不是存储器阵列中的存储器位置M1的非用户数据。在该情况下,控制器802可以在不需要传输来自存储器管芯的相对大量的数据的情况下快速地将用户数据与非用户数据进行组合以提供经加扰的数据。这降低了由这样的数据传输引起的开销成本。然而,在控制器处需要附加的存储器来存储非用户数据。在该方法中,控制器802可以使用非易失性存储器例如反熔丝。
[0096] 图9A描绘出由存储系统中的使用密钥生成器的片上电路装置执行的加扰。在该方法中,加扰器/解扰器912位于存储器管芯908上而不是位于存储器装置900的控制器902中。该方法提供存储器管芯的可移植性,使得存储器管芯可以与例如由不同的制造商制造的不同的控制器一起使用。例如,加扰器/解扰器912可以是状态机。在一种可行的方法中,主机控制器920向控制器902提供写入命令和关联的用户数据,控制器902进而将一个或更多个对应的写入命令和用户数据传输至存储器管芯908上的加扰器/解扰器912。控制器902可以例如通过在编码器/译码器904处执行ECC编码并且添加开销数据来处理用户数据。对于该方法,还使用用户数据对开销数据进行加扰。这有助于避免报头和ECC类型的数据模式故障。加扰器/解扰器912可以使用密钥生成器914来生成不同的随机密钥或伪随机密钥,其中,每个密钥用于对用户数据的不同部分进行加扰。然后,将经加扰的用户数据写入存储器位置910。控制器902可以具有工作存储器905和缓冲器907。正如图8A的方法那样,可以在比由主机提供的数据量要小的连续部分中或者以与由主机提供的单位相同的单个单位加扰并且写入用户数据。
[0097] 图9B描绘出由存储系统中的使用密钥生成器的片上电路装置执行的解扰。在与图9A所描绘的处理反向的处理中,控制器接收来自主机控制器920的读取命令。该读取命令可以指定存储有所请求的用户数据的地址。控制器902向加扰器/解扰器912提供一个或更多个对应的读取命令。加扰器/解扰器912可以使用密钥生成器914来生成用于进行加扰的不同随机密钥或伪随机密钥,其中,每个密钥用于对用户数据的不同部分进行解扰。然后,经解扰的用户数据被提供给控制器902并且被存储在缓冲器907中,以用于由主机控制器920来读出。正如图8B的方法那样,可以在比由主机请求的数据量要小的连续部分中或者以与由主机请求的单位相同的单个单位读取并且解扰用户数据。
[0098] 通常,期望的是,使每条字线以及字线的每个集合随机化。在执行加扰操作之后,经加扰的用户数据可以存储在例如大小为4,096字节的锁存器中并且被写入指定的存储器位置。
[0099] 图10描绘出确定是否存在与将数据编程到所选非易失性存储元件中相关联的缺陷的处理1000的一个实施例的流程图。在步骤1002中,使要被编程到存储元件中的数据随机化。对数据加扰是用于使数据随机化的一种技术。可以使用本文所描述的加扰技术,但处理1000不限于这些加扰技术。可以在芯片上或芯片外执行随机化。可以以与图10所描绘的顺序不同的顺序来执行步骤。
[0100] 在步骤1004中,将数据编程到所选非易失性存储元件中。作为一个示例,对与所选字线相关联的存储元件进行编程。这可以是与该字线相关联的所有存储元件或与该字线相关联的存储元件的某个子集。图7A的处理可以用于对数据进行编程。可以将存储元件编程成任意数目的数据状态,任意数目的数据状态包括但不限于两个数据状态、四个数据状态、八个数据状态和十六个数据状态。注意,在处理700之后,状态可以是通过或未通过。任一结果对于步骤1004均为有效的结束。下面的步骤将寻找在编程期间发生的缺陷。无论编程处理以通过的状态还是未通过的状态结束都可以检测到缺陷。
[0101] 在一个实施例中,步骤1004的结果是将数据编程到非易失性存储元件组中,如果成功,则结果是非易失性存储元件在不同数据状态中的基本上均匀的分布。注意,使数据随机化以满足上述情况不是必要条件。也就是说,只要分布在状态之间基本上均匀,就不需要使数据随机化。
[0102] 在步骤1006中,对存储元件进行感测。在一个实施例中,以多个参考电平对存储元件进行感测。在一个实施例中,以单个参考电平对存储元件进行感测。在一个实施例中,以给定参考电平进行感测包括向所选字线施加给定的参考电压电平并且然后确定每个相应的存储元件是否作为响应而传导电流。
[0103] 作为一个示例,以三个参考电平对存储元件进行感测。对于存储元件每个存储两个位的情况而言,三个参考电平可以是读取参考电平VrA、VrB和VrC。在该示例中,对于状态中的两个状态之间的每个“间隔”,存在读取参考电平。参考电平不必是与在为了读取操作而对存储元件进行感测时所使用的完全相同的参考电平。
[0104] 注意,步骤1006也可以应用于每个存储器单元存储三个位的情况。在该情况下,可以以三个参考电平例如VrB、VrD和VrF对单元进行感测。然而,可以使用不同的参考电平。而且,步骤1006可以包括以多于三个的参考电平进行感测。例如,感测可以以读取参考电平VrA至VrG来进行。同样地,步骤1006中使用的参考电平不必是在读取操作期间所使用的完全相同的参考电平。
[0105] 在步骤1008中,基于步骤1006的感测结果来形成存储器单元的两个子组。出于论述起见,将存储器单元的两个子组称为第一子组和第二子组。在每个子组中应当存在相同数目的状态。在一个实施例中,每个子组包括数据状态中的至少两个数据状态。在一个实施例中,每个子组包含单个数据状态。首先描述存储器单元为每个单元存储两个位的示例。在该示例中,第一子组可以为状态(Er,B)而第二子组可以为(A,C)。例如,如果感测结果使得呈现出存储器单元的阈值电压处于擦除状态或B状态,则将存储器单元放置到第一子组中。注意,字线方面的缺陷可能使得呈现出存储器单元的VTH不是存储器单元的实际上的VTH。例如,字线缺陷可能引起读取参考电压未被实际上施加于某一存储器单元。注意,如本文所论述的那样,表述例如“子组包括数据状态”等意味着子组包括呈现出基于感测结果具有与数据状态对应的阈值电压的存储器单元。
[0106] 注意,在该示例中,子组中的每个子组包括被另一子组中的数据状态分隔开的两个数据状态。参照图7B,Er和B被A分隔开。同样地,A和C被B分隔开。还是在该情况下,在第一子组或第二子组中均不存在相邻的数据状态。例如,Er与B不相邻。同样地,A与C不相邻。形成组,使得存在对数据状态的分隔有助于更好地检测缺陷。否则,一些缺陷很可能被掩盖。而且,所有数据状态在第一子组或第二子组中。这意味着可以在简单的比较操作中测试所有数据状态。
[0107] 总体上,对数据状态的分隔不需要对于两个子组都成立。这种情况的示例为针对第一子组为(Er,C)而针对第二子组为(A,B)。在该示例中,第一子组包括被另一组的数据状态(A状态或B状态)分隔开的两个数据状态。然而,对数据状态的分隔对于第二子组(A,B)并不成立。
[0108] 接着,将论述存储器单元为每个存储器单元存储三个位的示例。第一子组可以是(Er,A,F,G)而第二子组可以是(B,C,D,E)。在该示例中,第一子组包括被另一组中的数据状态分隔开的两个数据状态。作为一个示例,A状态和F状态被B状态、C状态、D状态和E状态中的任一状态分隔开。然而,在该示例中,第二组中没有一个状态被第一组中的状态分隔开。下面将论述在存在八个数据状态时形成子组的另一示例。
[0109] 第一子组的另一示例可以是(Er,B,D,F)而第二子组的另一示例可以是(A,C,E,G)。在该情况下,在第一子组或第二子组中均不存在相邻的数据状态。而且,所有数据状态在第一子组或第二子组中。
[0110] 在步骤1010中,确定第一子组中的存储元件的数目与第二子组中的存储元件的数目之间的差是否大于阈值。在一个实施例中,该确定包括:对第一子组中的存储元件的数目与第二子组中的存储元件的数目之间的差的累积总计进行跟踪。如果该累积总计超过阈值,则可以停止跟踪累积总计,无需比较这两个组中的剩余存储元件。可以由存储器管芯512上的逻辑电路装置来执行该跟踪。
[0111] 如果在步骤1012中确定出该差大于阈值,则这指示存在与对数据进行编程相关联的缺陷。步骤1014指示作出该确定。在一个实施例中,该确定由存储器芯片512上的逻辑器件来作出,尽管可以在芯片外作出该确定。可以向例如控制器544报告该缺陷。在一个实施例中,控制器544位于存储器芯片外。报告缺陷不需要指明准确的缺陷。
[0112] 步骤1016确定是否应当形成附加的子组。因此,处理1000可以执行多次通过。在下一次通过,在步骤1008处形成两个不同的子组。在一些实施例中,执行一个或更多个附加的感测操作来收集数据以形成接下来的子组。也就是说,可以以一个或更多个读取参考电平对存储元件进行感测。然而,也可以使用先前的感测结果。在一个实施例中,基于先前感测结果和新的感测结果的组合来形成接下来的两个子组。
[0113] 处理1000能够检测出缺陷,所述缺陷包括但不限于:断开的字线、控制栅与衬底的短路、字线与字线的短路、双重写入。处理可以使用比一些传统技术的感测操作更少的感测操作。处理可以检测到传统技术可能漏掉的一些缺陷。例如,一些传统技术可能漏掉控制栅与衬底的弱短路或双重写入。
[0114] 注意,处理1000提供了很高效的缺陷测试方式。因为所有存储器单元可以被放置在一个子组或另一子组中,所以这使得使用单次比较能够测试所有状态(以及所有存储器单元)。而且,比较自身很高效,原因在于可以通过采用第一子组与第二子组之间的不平衡的累积总计来执行该比较。注意,不需要确定具体多少存储器单元处于给定状态。甚至也不需要确定每个子组中具体存在多少存储器单元。注意,可能难以对存储器芯片自身作出这样的确定。例如,逻辑电路装置会需要计数至非常大的数目的能力。而且,进行这样的计数会是耗时的,尤其是在芯片外进行计数的情况下。
[0115] 图11是确定当对非易失性存储元件进行编程时是否存在缺陷的处理1100的一个实施例的流程图。该实施例涉及存在四个数据状态的情况。处理1100是处理1000的步骤1006至1014的一个实施例。因此,可以在将数据编程到存储元件中之后执行处理1100。图
12A至图12D表示在处理1100期间与存储元件中之一相关联的数据锁存器的使用,并且将在整个论述被参考。
[0116] 在步骤1102中,以VrB对存储元件进行感测。VrB是意在确定存储元件的Vt是否至少与B状态的Vt同样高的读取参考电平。根据存储元件的表观Vt,以该电平进行感测的结果是与给定的存储元件相关联的数据锁存器存储“1”或“0”。也就是说,根据存储元件是否响应于施加于所选字线的VrB而传导电流,存储“1”或“0”。字线方面的缺陷可能引起感测操作未能检测到给定的存储元件的实际Vt。而且,字线方面的缺陷可能引起存储元件未能达到存储元件的预期Vt。
[0117] 图12A表示被存储到数据锁存器中的对存储元件进行感测的结果。图12A中示出了三个数据锁存器1202、1204、1206。这些数据锁存器可以是感测块300的一部分。使用哪三个数据锁存器不是关键。在一个实施例中,位线锁存器682可以用于最初存储以VrB进行感测的结果。然后,可以将该结果传输至另一锁存器,使得在位线锁存器682用于随后的感测步骤时该结果被保存。
[0118] 在步骤1104中,对在步骤1102处进行感测的结果进行处理(例如计数)。在一个实施例中,步骤1104访问在前面提及的数据锁存器中存储的结果并且对“1”的数目与“0”的数目进行比较。在一个实施例中,保持对差的累积总计。如果“1”的数目比“0”的数目超出一个阈值,则对此进行标记。同样地,如果“0”的数目比“1”的数目超出一个阈值,则对此进行标记。系统可以沿字线向下访问与每个存储元件相关联的B读取数据,并且保持对存在更多“1”还是存在更多“0”的累积总计。随后论述的图13描述用于进行计数的一个实施例。
[0119] 步骤1106是确定步骤1104的处理是否检测到缺陷。如果超过阈值则检测到缺陷。如果情况如此,则可以在步骤1108中例如向控制器544报告检测到缺陷的事实。如果检测到缺陷,一个选择是结束处理。然而,处理可以继续进行。
[0120] 步骤1110是以VrA对存储元件进行感测。注意,步骤1110可以在以Vrb进行感测(步骤1102)之后但在处理Vrb读取的结果(步骤1104)完成之前开始。时机并不关键,但更早地开始以VrA进行读取(或感测)有助于加速缺陷检测处理。图12B表示对B状态数据的计数以及对以Vra进行感测的结果的存储。可以使用各种技术来对B状态数据进行计数。每个存储元件具有一位B读取数据。
[0121] 步骤1112为将以VrA进行感测的结果与以VrB进行感测的结果进行组合。在一个实施例中,在VrA数据与VrB数据之间执行异或(exclusive OR)。步骤1112形成第一数据集。在一个实施例中,该第一数据集包含针对存储元件中的每个存储元件的1个位。该步骤根据感测操作来确定哪些存储元件呈现为处于A状态中。在一个实施例中,呈现为处于A状态的存储元件将具有“1”而所有其他存储元件将具有“0”。
[0122] 步骤1114是以VrC对存储元件进行感测。注意,步骤1114可以在以VrA进行读取(步骤1110)之后但在步骤1112完成之前开始。时机并不关键,但更早地开始以VrC进行读取有助于加速缺陷检测处理。图12C表示在将以VrA进行感测的结果与以VrB进行感测的结果进行组合时存储以VrC进行感测的结果。如所描绘的那样,(使用逻辑器件1208)对一位A读取数据与一位B读取数据执行异或并且将其存储为BAX。描绘了用于存储BAX的单独的锁存器1210。然而,可以通过将BAX存储在用于存储B读取数据的锁存器或用于存储A读取数据的锁存器中来节省锁存器。
[0123] 步骤1116为将以VrC进行感测的结果与第一数据集进行组合以形成第二数据集。在一个实施例中,在VrC数据与第一数据集之间执行异或。该步骤形成存储元件的两个子组。一个子组是(Er,B);另一子组是(A,C)。在一个实施例中,根据感测操作而呈现为处于Er状态或B状态中的存储元件具有“1”,呈现为处于A状态或C状态的存储元件具有“0”。
[0124] 图12D表示步骤1116。如所描绘的那样,对一位C读取数据与一位BAX(一位BAX为前面提及的“第一数据集”的一位)执行异或。为了便于图示,描绘了用于存储结果的单独的锁存器1212。然而,可以通过将结果存储在包含不再需要的数据的锁存器中来节省锁存器。针对所有存储元件的结果(C异或BAX)被称为“第二数据集”。
[0125] 步骤1118为对步骤1116的结果进行处理。在一个实施例中,步骤1118访问针对每个存储元件的“C异或BAX”结果,并且对“1”的数目与“0”的数目进行比较。在一个实施例中,保持对差的累积总计。如果“1”的数目比“0”的数目超出一个阈值,则对称进行标记。同样地,如果“0”的数目比“1”的数目超出,则对此进行标记。系统可以沿字线向下访问与每个存储元件相关联的“C异或BAX”结果并且保持对存在更多“1”还是存在更多“0”的累积总计。随后论述的图13描述用于进行计数的一个实施例。
[0126] 步骤1120为用于确定步骤1118的计数是否越过阈值并且从而确定是否检测到缺陷的判定框。该处理报告缺陷(步骤1122)或者在没有报告缺陷(可选地,可以报告未发生缺陷的事实)的情况下结束。
[0127] 图13是在缺陷确定处理期间对数据进行计数的处理1300的一个实施例的流程图。例如,这可以在步骤1010、步骤1104和/或1118期间使用。可以通过图5所描绘的计数逻辑器件503来部分地执行处理1300。
[0128] 在步骤1302中,访问来自与刚被编程的存储元件相关联的锁存器的一个字节数据。这可以是访问来自八个存储元件的B读取数据。图12B示出了针对计数访问来自一个存储元件的B读取数据。这可以是访问来自八个存储元件的“C异或BAX”数据。图12D示出了针对计数访问来自一个存储元件的“C异或BAX”数据。注意,存在访问什么数据的许多其他可能性。因此,这些示例应当被认为是许多可能性中的仅两种可能性的代表。
[0129] 步骤1304为对该字节中的零进行计数并且减去4。步骤1306为将步骤1304的结果存储在带符号的累积寄存器501中。实际上,根据存在更多的“1”还是存在更多的“0”,带符号的寄存器501包含为正或为负的结果。
[0130] 在步骤1308中,确定带符号的累积寄存器501中的计数是否超过与编程处理的缺陷相关联的阈值。因为该累积寄存器501可以是带符号的寄存器,所以如本文中使用的术语“超过阈值”意味着寄存器501中的正值大于正阈值或者寄存器501中的负值小于负阈值。正阈值和负阈值的绝对值可以相同,但绝对值也可以不同。在一个实施例中,是“1”超过“0”还是“0”超过“1”并不重要。然而,对于当“1”超过“0”与当“0”超过“1”的情况可以使用不同的阈值。
[0131] 如果超过阈值,则在步骤1310中报告缺陷。然后,处理1300可以结束。因此,一旦超过阈值,则不需要检查附加存储元件的结果。如果未超过阈值,则处理返回至步骤1302以访问来自八个不同的存储元件的另一字节数据。
[0132] 图14A描绘出随着更多的存储单元被认为处于检测缺陷的处理中“1”的数目和“0”的数目可以如何偏离的示例。该图描绘出针对四种不同情形的累积总计。曲线1401和1402是未检测到缺陷的字线。曲线1403和1404是检测到缺陷的字线。曲线1401和1403是第一次通过例如在步骤1104中对B读取数据进行计数。曲线1402和1404是第二次通过,例如在步骤1118中对数据进行计数。
[0133] y轴表示对存在更多“1”还是存在更多“0”的累积总计。例如,正的y轴值意味着存在更多“1”。相反地,负的y轴值意味着存在更多“0”。x轴表示被计数的存储器单元。
[0134] 对于正常字线,相对于“1”和“0”的准确相等可以存在小偏离。因此,曲线1401和1402可以略微从零偏离。在该示例中,曲线1401和1402均被描绘成在零下方略微偏移。然而,曲线1401和1402可以在零上方略微偏移,或者在零上方与下方之间摆动。显然,从零起的偏离不大于阈值。因此,对于不具有缺陷的字线而言,累积总计应当不会超过阈值量。
[0135] 然而,曲线1403和1404均从零显著偏离,这指示字线具有缺陷。在该示例中,第一次通过和第二次通过二者均从零偏离。对于一些情况而言,这些通过中的一次通过可以不从零偏离。例如,可能是第一次通过不显著地从零偏离,但第二次通过显著地从零偏离。在该示例中,第一次通过1403在零下方偏离而第二次通过1404在零上方偏离。然而,两次通过可以在同一方向上偏离。
[0136] 本文所描述的各种处理指出阈值用于确定是否存在编程缺陷(针对对“1”和“0”计数)。可以通过研究实际存储器装置中的缺陷来凭经验地确定合适的阈值。可以以另一方式来确定阈值。例如,可以基于某个缺陷对计数的预期影响来确定阈值。作为一个具体示例,可以预期断开的字线对字线具有一定的物理影响,可以分析该物理影响来确定对“1”和“0”的计数的预期影响。然而,注意,针对给定缺陷的曲线并不总是相同的。例如,对于断开的字线,断开的字线的位置可能影响曲线的性质。
[0137] 还要注意,针对不同类型的缺陷的曲线可以具有不同的形状和/或斜率。例如,针对断开的字线的曲线可以在形状和/或斜率上与针对字线与字线的短路的曲线通常不同。针对不同缺陷的阈值可以至少大体上不同。可以选择被设计成检测一种或更多种类型的缺陷的集合的合适阈值。不需要区别检测到了什么类型的缺陷。因此,阈值可以被设置成足够低以检测集合中的所有类型的缺陷。
[0138] 图14B描绘出当每个存储器单元对三个位进行编程时随着更多的存储器单元被认为处于检测缺陷的处理中“1”的数目和“0”的数目可以如何偏离的示例。该曲线图类似于图14C中的曲线图。在该情况下,不同之处在于使用三次通过。曲线1501至1503是没有缺陷的字线的三次通过。曲线1504至1506是具有缺陷的字线的三次通过。曲线是示例性的。下面的示例将阐明可以如何使用三次通过。
[0139] 图15是当每个存储器单元对三个位进行编程时检测编程缺陷的处理1500的一个实施例的流程图。处理1500是处理1000的一个实施例。处理1500具有三次“通过”,三次通过中的每次通过均可以生成通过/未通过响应。然而,处理1500可以被修改成跳过一次或更多次通过。在将数据编程到存储器单元中之后处理1500开始。注意,编程可以在通过状态或未通过状态的情况下结束。为了图示,处理1500将参照图7C的示例阈值分布和参考电平。
[0140] 在步骤1502中,以VrD对存储器单元进行感测。在一个实施例中,该感测操作包括向所选字线施加VrD并且作为响应对存储器单元进行感测(例如,确定存储器单元是否传导电流)。可以以类似的方式来执行处理1500中的其他的感测操作。
[0141] 针对每个存储器单元的结果可以存储在例如感测块300中的锁存器中。在步骤1504中,对来自步骤1502的数据进行处理以确定编程是否存在缺陷。步骤1504可以与图11的步骤1104类似,其中,针对每个存储器单元两位的示例对根据以VrB进行读取的数据进行了处理。因此,步骤1504可以将“1”与“0”进行比较以确定是否一个比另一个超出了预先确定的量以上。可以保持累积总计。返回参照图14B,该图描绘出针对有缺陷的字线(或其他编程缺陷例如双重写入)的累积总计会如何随着更多的存储器单元被计数而增加。可以选择阈值,使得针对有缺陷的字线的累积总计最终超过该阈值,但针对正常(没有缺陷)的字线的累积总计不超过该阈值。步骤1506是确定是否找到了缺陷。如果找到了缺陷,则在步骤
1508中向例如控制器544报告缺陷。注意,步骤1506和1508是可选的。
[0142] 步骤1510为以电平VrB和VrF对存储器单元进行感测。这些通常作为两个单独的感测操作来执行。这些感测操作的结果可以存储在锁存器中,该锁存器可以位于感测块300中。
[0143] 在步骤1512中,根据步骤1512的感测操作形成两个子组。一个子组可以是(Er,A,F,G)、另一子组可以是(C,D,E,F)。在一个实施例中,被放置在一个组中的存储器单元被分配“1”,而被放置在另一组中的存储器单元被分配“0”。注意,在该示例中,第一子组包括被另一子组中的数据状态分隔开的数据状态。参照图7C,状态C、状态D、状态E和状态F将另一子组中的数据状态中的一些数据状态分隔开。如果没有该分隔,则可能掩盖一些缺陷。
[0144] 感测步骤1512针对每个存储器单元提供两位信息(每次读取一位)。可以对这两位进行处理以将存储器单元放置在适当的组中。换言之,可以对VrB读取和VrF读取的结果进行处理以形成子组。可以使用如结合图11和图12A至图12D所描述的技术。例如,可以对VrB读取和VrF读取的结果使用各种逻辑运算例如“异或”、“或”、“与”、“与非”、“非”等。
[0145] 步骤1514是比较两个子组以确定一个组中的存储器单元的数目是否比另一组中的存储器单元的数目超出了预先确定的量以上,该预先确定的量与编程缺陷相关联。步骤1514包括对“1”的数目与“0”的数目的差的累积总计进行跟踪,其中,“1”和“0”与子组对应。
可以以与使用累积寄存器的处理1300类似的方式来执行步骤1514。
[0146] 步骤1516是确定步骤1514的比较是否引起超过阈值。如果超过阈值,则在步骤1518中报告缺陷。否则,处理继续进行至步骤1520。
[0147] 在步骤1520中,以VrA、VrC、VrE、和VrG对存储器单元进行感测。每次感测操作的结果可以存储在例如感测块300中的锁存器中。因此,该步骤可以针对这些感测操作中的每个感测操作记录“1”或“0”。
[0148] 步骤1522是根据先前的读取形成两个子组。在一个实施例中,步骤1522使用所有七次读取操作(例如,VrA至VrG)的结果。子组的示例为(Er,B,D,F)和(A,C,E,G)。在该示例中,每个子组包括被另一子组中的数据状态分隔开的两个数据状态。换言之,数据状态在两个子组之间交替。形成组,使得存在对数据状态的这种分隔有助于更好地检测缺陷。否则,则可能掩盖一些缺陷。可以使用如结合图11和图12A至图12D所描述的技术来形成子组。例如,可以对所有七次感测操作(VrA至VrG)的结果使用各种逻辑运算例如“异或”、“或”、“与”、“与非”等。
[0149] 步骤1524为比较两个子组以确定一个组中的存储器单元的数目是否比另一组中的存储器单元的数目超出了预先确定的量以上,该预先确定的量与字线缺陷相关联。步骤1524包括对“1”的数目与“0”的数目的差的累积总计进行跟踪,其中,“1”和“0”与步骤1522中形成的子组对应。可以以与使用累积寄存器的处理1300类似的方式来执行步骤1524。
[0150] 步骤1526是确定步骤1524的比较是否引起超过阈值。如果超过阈值,则在步骤1528中报告缺陷。否则,处理结束。如果未检测到缺陷,则可以可选地报告未检测到缺陷。
[0151] 形成的子组可以与处理1500中所描述的子组不同。另一示例是在步骤1522处形成不同的子组。作为另一示例,子组可以是(Er,C,D,G)和(A,B,E,F)。注意,形成这些子组不需要以所有七个读取参考电平进行感测。因此,如果不需要执行处理1500中所示的其他缺陷确定中的一些,则可以跳过感测操作中的一些感测操作。可以使用如结合图11和图12A至图12D所描述的技术来形成子组。例如,可以对所有七次感测操作(VrA至VrG)的结果使用各种逻辑运算例如“异或”、“或”、“与”、“与非”等。在形成子组(Er,C,D,G)和(A,B,E,F)之后,可以以与步骤1524至1528中所论述的方式类似的方式来比较子组(Er,C,D,G)和(A,B,E,F)。
一个选择是形成子组(Er,C,D,G)和(A,B,E,F)而非(Er,B,D,F)和(A,C,E,G)。另一选择是形成并且分析(Er,C,D,G)和(A,B,E,F)以及(Er,B,D,F)和(A,C,E,G)。
[0152] 图16是在每个存储器单元对两个位进行编程时检测编程缺陷的处理1600的一个实施例的流程图。该处理1600与处理1100具有一定相似性,但形成不同的子组。可选地,处理1600可以以读取参考电平VrB进行读取来开始,但并不要求这样。因此,可以在开始时可选地执行步骤例如1102至1108。
[0153] 在步骤1610处,执行以读取参考电平VrA进行的读取。这些结果可以存储在例如感测块300中的锁存器中。在步骤1612处,执行以读取参考电平VrC进行的读取。这些结果可以存储在例如感测块300中的锁存器中。
[0154] 在步骤1614中,组合这两次感测操作的结果以形成存储器单元的两个子组。这些子组可以是(Er,C)和(A,B)。可以通过对存储在锁存器中的结果执行各种逻辑运算例如“异或”、“或”、“与”、“与非”等来形成这些组。
[0155] 在步骤1616中,比较子组以确定一个组中的存储器单元的数目是否比另一组中的存储器单元的数目超出了预先确定的量以上,该预先确定的量与字线缺陷相关联。步骤1616包括对“1”的数目与“0”的数目的差的累积总计进行跟踪,其中,“1”和“0”与步骤1614中形成的子组对应。可以以与使用累积寄存器的处理1300类似的方式来执行步骤1616。
[0156] 步骤1618为确定步骤1616的比较是否引起超过阈值。如果超过阈值,则在步骤1620中报告缺陷。否则,处理结束。如果未检测到缺陷,则可以可选地报告未检测到缺陷。
[0157] 可以通过本文所描述的技术来确定许多类型的缺陷。示例包括但不限于:断开的字线、控制栅与衬底的短路、字线与字线的短路或双重写入。双重写入是未被擦除的存储器单元再次被写入的情况。如上面所提及,不需要报告具体缺陷。然而,在一些情况下,可以报告缺陷的类型。图17是确定两条字线被短接在一起的处理1700的一个实施例的流程图。该技术快速地作出该确定并且可以在存储器芯片512上被执行。因此,控制器544不需要执行特别的操作以确定哪两条字线被短接在一起。
[0158] 在步骤1702中,对WLn进行编程。在可选步骤1704中,针对缺陷对WLn进行测试。本文所描述的技术中的任一技术可以用于针对缺陷进行测试。如果不存在缺陷(步骤1706=否),则处理结束。在一个实施例中,并非针对缺陷进行测试,而是简单地确定对WLn的编程以未通过的状态结束。例如,处理700以“状态=未通过”的步骤730结束。
[0159] 如果存在缺陷或者如果对WLn的编程以状态=未通过结束,则针对缺陷对WLn-1和WLn+1进行测试。本文所描述的技术中的任一技术可以用于针对缺陷进行测试。出于论述起见,假设WLn-1和WLn+1已经被编程。如果WLn-1和WLn+1未被编程,则可以将针对短路的测试推迟直至相应的字线被编程为止。当然,可以在WLn+1未被编程的情况下使用本文所描述的技术来测试WLn。
[0160] 在步骤1708中,使用本文所公开的技术中的任一技术针对缺陷对WLn-1进行测试。如果检测到缺陷(步骤1710=是),则在步骤1712中报告WLn被短接至WLn-1。然后,处理可以结束。否则,处理继续进行至步骤1714。
[0161] 在步骤1714中,使用本文所公开的技术中的任一技术针对缺陷对WLn+1进行测试。如果检测到缺陷(步骤1716=是),则在步骤1718中报告WLn被短接至WLn+1。然后,处理可以结束。如果对于WLn-1和WLn+1均未检测到缺陷,则确定不存在涉及WLn的字线与字线的短路。
[0162] 本文所公开的一个实施例包括一种用于确定是否存在与将数据编程到非易失性存储元件组中相关联的缺陷的方法。该方法包括将数据编程到非易失性存储元件组中,如果成功则引起非易失性存储元件在多个数据状态中的基本上均匀的分布。以一个或更多个不同的参考电平对该组进行感测,其中,一个或更多个不同的参考电平各自将两个相邻的数据状态分隔开。基于感测来形成非易失性存储元件的第一子组和非易失性存储元件的第二子组。对第一组中的非易失性存储元件的数目与第二组中的非易失性存储元件的数目的差的累积总计进行跟踪。由位于存储器管芯上的逻辑电路装置来执行该跟踪。响应于确定出差大于阈值,确定出存在与将数据编程到组中相关联的缺陷。
[0163] 本文所公开的一个实施例包括一种非易失性存储器装置,该非易失性存储器装置包括:多个非易失性存储元件;多条字线,多条字线与非易失性存储元件相关联;以及一个或更多个管理电路,一个或更多个管理电路与多条字线和多个非易失性存储元件进行通信。一个或更多个管理电路将数据编程到与所选字线相关联的非易失性存储元件中。对数据编程,使得如果成功则引起非易失性存储元件在多个数据状态中的每个数据状态中的基本上相等的数量。一个或更多个管理电路以一个或更多个不同的参考电平对与所选字线相关联的非易失性存储元件进行感测,其中,一个或更多个不同的参考电平各自将两个相邻的数据状态分隔开。一个或更多个管理电路基于给定的存储元件根据一个或更多个数据状态的范围而呈现出的所处的数据状态来形成与所选字线相关联的非易失性存储元件的第一子组和与所选字线相关联的非易失性存储元件的第二子组,给定的存储元件基于感测呈现出处于所述一个或更多个数据状态的范围中。存储器管芯上的逻辑器件对第一组中的非易失性存储元件的数目与第二组中的非易失性存储元件的数目的差的累积总计进行跟踪。一个或更多个管理电路响应于确定出该差大于阈值而确定出存在与对数据编程相关联的缺陷。
[0164] 一个实施例公开了一种用于检测是否存在与将经随机化的数据编程到非易失性存储元件组中相关联的缺陷的方法。该方法包括使数据随机化并且将经随机化的数据编程到与所选字线相关联的非易失性存储元件组中。将该组编程成多个数据状态。向所选字线施加三个不同的读取参考电平。读取参考电平中的每个读取参考电平将两个相邻的数据状态分隔开。确定组中的相应非易失性存储元件是否响应于施加三个不同的读取参考电平中的每个读取参考电平而传导电流。基于给定的非易失性存储元件根据读取而呈现为所处于的数据状态中的一个或更多个数据状态来形成与所选字线相关联的非易失性存储元件的第一子组和与所选字线相关联的非易失性存储元件的第二子组。所有数据状态表现在第一子组或第二子组中。在第一子组或第二子组中均未表现出相邻的数据状态。确定第一子组中的存储元件的数目与第二子组中的存储元件的数目之间的差是否大于阈值。基于该差是否大于阈值来检测是否存在与将经随机化的数据编程到组中相关联的缺陷。
[0165] 一个实施例包括一种非易失性存储器装置,该非易失性存储器装置包括:多个非易失性存储元件;多条字线,多条字线与非易失性存储元件相关联;以及一个或更多个管理电路,一个或更多个管理电路与多条字线和多个非易失性存储元件进行通信。一个或更多个管理电路使数据随机化。一个或更多个管理电路将经随机化的数据编程到与所选字线相关联的非易失性存储元件组中。一个或更多个管理电路在将该数据编程到该组中之后向所选字线施加三个不同的读取参考电平。三个不同的读取参考电平各自将两个相邻的数据状态分隔开。一个或更多个管理电路确定该组中的相应非易失性存储元件是否响应于施加三个不同的读取参考电平中的每个读取参考电平而传导电流。一个或更多个管理电路基于是否传导电流来形成与所选字线相关联的非易失性存储元件的第一子组和与所选字线相关联的非易失性存储元件的第二子组。所有数据状态在第一子组或第二子组中。在第一子组或第二子组中均不存在相邻的数据状态。一个或更多个管理电路确定第一子组中的存储元件的数目与第二子组中的存储元件的数目之间的差是否大于阈值。一个或更多个管理电路基于该差是否大于阈值来确定是否存在与对数据编程相关联的缺陷。
[0166] 出于说明和描述的目的呈现了对本发明的前述详细描述。该描述不意在是穷举的或将本发明限制成所公开的具体形式。根据以上教示,许多修改和变型是可行的。选择所描述的实施例是为了最佳地解释本发明的原理及本发明的实际应用,从而使本领域技术人员能够在适合于所设想的特定用途的各种实施例中和各种修改中最佳地利用本发明。意在由所附权利要求限定本发明的范围。
QQ群二维码
意见反馈