使用自适应编程验证方案的闪速存储器件和相关操作方法

文档序号:6769428阅读:190来源:国知局
专利名称:使用自适应编程验证方案的闪速存储器件和相关操作方法
技术领域
本发明原理的实施例一般地涉及半导体存储器件。更具体地,本发明原理的实施例涉及使用自适应编程验证方案的闪速存储器件和相关操作方法。
背景技术
半导体存储器在从卫星到消费产品的多种现代电子器件中扮演着重要角色。因此,半导体存储器技术的进步可以导致大量技术应用的显著提升。根据是否在断电时保持存储数据,可以将半导体存储器件粗略地划分为两个类另O。所述类别包括易失性半导体存储器件和非易失性半导体存储器件,其中易失性半导体存储器件在断电时丢失存储数据,而非易失性半导体存储器件在断电时保持存储数据。易失性存储器件的示例包括静态随机存取存储器(SRAM)器件和动态随机存取存储器(DRAM) 器件。非易失性存储器件的示例包括各种只读存储器(ROM),例如MROM、PROM、EPROM和 EEPROM。近年来,EEPROM形式的闪速存储器变得越来越普遍。与其他形式的非易失性存储器相比,闪速存储器较为廉价,并且能够提供较高性能和数据存储容量。此外,闪速存储器能够抗物理震动,使其特别广泛地用于便携式设备中,例如蜂窝电话、数码相机、笔记本计算机等。闪速存储器具有两种普通配置,包括NOR配置和NAND配置。具有这些配置的闪速存储器分别被称为NOR闪速存储器和NAND闪速存储器。与NAND闪速存储器相比,NOR闪速存储器可以提供更快的存取速度,但具有较低的存储容量。因此,NOR闪速存储器通常用于存储要求快速存取的信息(例如代码),而NAND闪速存储器通常用于提供针对诸如多媒体信息、数据文件等信息的大量数据存储能力。—些闪速存储器被设计为每个存储单元存储多于一比特数据。每个存储单元存储多于一比特数据的闪速存储器被称为多级单元(MLC)闪速存储器。一般使用称为步增脉冲编程(incremental step pulse programming) (ISPP)的技术对MLC闪速存储器编程。在步增脉冲编程中,利用多个编程循环(program loop)对选定的存储单元编程,其中每个编程循环包括向选定的存储单元施加编程电压以修改该存储单元的状态的编程执行部分,以及向选定的存储单元施加验证电压以确定该存储单元是否达到目标状态的验证部分。通过以此方式执行编程循环,逐步对选定的存储单元编程,并且可以防止某种类型的编程错误,例如重复编程(over-programming)。

发明内容
本发明原理的实施例提供使用自适应编程验证方案的闪速存储器件以及操作闪速存储器件的方法。 根据本发明原理的实施例,一种对闪速存储器件编程的方法包括(a)对选定的存储单元编程,(b)执行验证操作,以确定选定的存储单元的阈值电压是否达到了与目标编程状态相对应的验证电平,(c)根据与检测选定的存储单元中的初始合格比特(initial pass bit)相关联的参数,确定针对至少一个目标编程状态的验证起始点,和(d)根据与检测将多个选定的存储单元成功编程为最低的一个目标编程状态相关联的参数,确定针对至少一个目标编程状态的验证结束点。在特定实施例中,与检测初始合格比特相关联的参数是在检测到初始合格比特的编程循环中,用于对选定的存储单元编程的编程电压。在特定实施例中,验证起始点是验证起始循环(verification start loop)。在特定实施例中,验证起始点根据与初始编程状态相对应的第一阈值电压分布和与至少一个目标编程状态相对应的第二阈值电压分布之间的裕度(margin)而变化。在特定实施例中,验证起始点根据第一和第二阈值电压分布是否重叠而变化。在特定实施例中,在第一和第二阈值电压分布重叠的情况下,提高验证起始点。在特定实施例中,在第一和第二阈值电压分布不重叠的情况下,降低验证起始点。在特定实施例中,与检测将多个选定的存储单元成功编程为最低的一个目标编程状态相关联的参数包括在检测到所述多个选定的存储单元被成功编程为所述最低的一个目标编程状态的编程循环中使用的编程电压。在特定实施例中,确定验证结束点包括预测针对至少一个目标编程状态的合格点,以及从预测的合格点减去偏移值。在特定实施例中,从多个目标编程状态的预测的合格点减去相同的偏移值,以确定针对所述多个目标编程状态的验证结束点。


附图示出了本发明原理的选定的实施例。在附图中,相似的附图标记指示相似的特征。此外,特定元件的相对尺寸可能为了清楚起见而被放大。图1是示出根据本发明原理的实施例的闪速存储器件的框图。图2是示出包括存储单元阵列的闪速存储器件的框图,存储单元阵列包括具有全位线结构或奇_偶位线结构的存储块。图3A到3C是示出存储不同数量比特的存储单元的阈值电压分布的示意图。图4是示出用于对连接到选定的字线的存储单元编程的一系列编程脉冲的示意图。图5A到5C是示出根据本发明原理的实施例对闪速存储器件编程的方法的阈值电压示意图。图6和7是示出验证图5A的编程操作的方法的示意图。图8和9是示出验证图5B的编程操作的方法的示意图。图10和11是示出验证图5C的编程操作的方法的示意图。图12A到12C是示出用于图5A到5C的方法的编程电压和验证电压的电压示意图。图13是示出根据本发明原理的另一实施例对闪速存储器件编程的方法的示意图。图14是示出根据本发明原理的另一实施例对闪速存储器件编程的方法的示意图。

图15是示出根据本发明原理的另一实施例对闪速存储器件编程的方法的示意图。图16是示出根据本发明原理的另一实施例对闪速存储器件编程的方法的流程图。图17是针对存储多比特数据的存储单元的阈值电压示意图。图18是示出根据本发明原理的实施例用于图16的方法中的验证方案的示意图。图19是示出根据本发明原理的另一实施例用于图16的方法中的验证方案的示意图。图20是示出根据本发明原理的另一实施例对闪速存储器件编程的方法的流程图。图21是示出根据本发明原理的实施例用于图20的方法中的验证方案的示意图。图22是示出能够执行图20的方法的闪速存储器件的框图。图23A和23B是示出根据本发明原理的另一实施例对闪速存储器件编程的方法的流程图。图24A和24B是示出根据本发明原理的另一实施例对闪速存储器件编程的方法的流程图。图25A和25B是示出根据本发明原理的另一实施例对闪速存储器件编程的方法的流程图。图26A和26B是示出根据本发明原理的另一实施例对闪速存储器件编程的方法的流程图。图27是示出根据本发明原理的另一实施例对闪速存储器件编程的方法的流程图。图28是示出根据本发明原理的实施例用于图27的方法中的验证方案的示意图。图29是示出根据本发明原理的另一实施例对闪速存储器件编程的方法的流程图。图30是示出根据本发明原理的另一实施例对闪速存储器件编程的方法的流程图。图31是示出根据本发明原理的实施例用于图30的方法中的验证方案的示意图。图32是示出根据本发明原理的另一实施例对闪速存储器件编程的方法的流程图。图33是示出根据本发明原理的实施例包括闪速存储器件的集成电路卡的框图。图34是示出根据本发明原理的实施例包括闪速存储器件的计算系统的框图。图35是示出根据本发明原理的实施例的图34的计算系统的存储器控制器的框图。
具体实施例方式
以下参考附图描述本发明原理的实施例。提供这些实施例作为教导性示例,其不应被理解为限制本发明原理的范围。在下面的描述中,当称第一特征“连接到”第二特征时,第一特种可以“直接连接至IJ”第二特征,或经由中间特征“电连接”到第二特征。单数形式的术语包括复数形式,除非上下文指明相反情况。术语“包括”、“包含”指的是存在某特征,而不排除其他特征。图1是示出根据本发明原理的实施例的闪速存储器件的框图。为了说明的目的, 假设图1的闪速存储器件是NAND闪速存储器件。但是,本发明原理的实施例不限于NAND 闪速存储器件。参考图1,闪速存储器件包括存储单元阵列100,存储单元阵列100包括布置成连接到字线WL的行和连接到位线BL的列的存储单元。每个存储单元存储1比特数据或M比特数据,其中M是大于1的整数。每个存储单元可以使用诸如浮置栅极或电荷俘获层的电荷存储层、可变电阻器、或其他类型的存储元件来存储信息。可以利用单层阵列结构(称为二维阵列结构)或多层阵列结构(称为三层阵列结构)来实现存储单元阵列 100。题为“SEMICONDUCTOR MEMORY DEVICE WITH MEMORY CELLS ON MULTIPLE LAYERS” 的美国专利公开 No. 2008/0023747 和题为 “SEMICONDUCTOR DEVICE WITH THREE-DIMENSIONAL ARRAY STRUCTURE” 的美国专利公开 No. 2008/0084729 公开了三维阵列结构的示例,其相应公开通过引用包含于此。行解码器200执行针对存储单元阵列100的行的选择和驱动操作。电压生成器300 受控制逻辑装置400的控制,并生成用于编程、擦除和读取操作的电压(例如编程电压、合格电压、擦除电压和读取电压)。读/写电路500受控制逻辑装置400控制,并且根据闪速存储器件的各种操作模式,作为读出放大器或写驱动器操作。例如,在读操作中,读/写电路500作为用于从选定的行的选定的存储单元感测数据的读出放大器操作。输入/输出电路600从读/写电路500接收读数据,并将读数据发送到外部目的地。在编程操作中,读/ 写电路500作为写驱动器操作,以根据编程数据驱动选定的行的选定的存储单元。读/写电路500包括与相应的位线或位线对相对应的页缓冲器。在选定的存储单元存储多比特/ 多级数据时,读/写电路500的每个页缓冲器可以包括两个或更多个锁存器。输入/输出电路600 —般与诸如存储器控制器或主机等外部设备接口。控制逻辑装置400控制闪速存储器件的整体操作,并且包括合格比特检测器410、 合格/失败确定器420,和寄存器430。在验证操作中,合格比特检测器410接收已被读/写电路500读取的数据。然后,合格比特检测器410基于读/写电路500所读取的数据,确定是否至少一个选定的存储单元的阈值电压大于等于第一编程状态的验证电平(即所述至少一个选定的存储单元是否针对第一编程状态“编程合格”)。在确定至少一个选定的存储单元针对第一编程状态编程合格的情况下,控制逻辑装置400确定用于执行针对其他编程状态的验证操作的验证起始点。验证起始点是诸如特定编程循环等编程操作中的点,其中首先执行针对特定编程状态的验证操作。例如,针对选定的存储单元的编程状态P2的验证起始点可以是第一编程循环,在所述第一编程循环中执行验证操作以确定选定的存储单元是否被成功编程为状态 P2。在针对编程状态P2的验证起始点之前的编程循环中,省略针对编程状态P2的验证操作。在特定实施例中,针对编程状态P2的验证起始点是根据编程电压的保存值确定的,在编程电压的保存值处,第一选定的存储单元被检测为成功编程为编程状态P1。例如, 在一些实施例中,验证起始点是其中编程电压值等于保存值和预定值之和的编程循环。寄存器430存储来自控制逻辑装置400的合格比特信息,所述合格比特信息指示编程合格的循环。编程合格的循环是其中至少一个选定的存储单元针对特定编程状态被 编程合格的编程循环。合格比特信息确定针对随后编程状态的验证操作的起始点,如下所述。 还可以将合格比特信息提供给外部设备,例如存储器控制器。合格/失败确定器420基于在验证操作期间从读/写电路500提供的读数据,确定是否所有选定的存储单元都被成功编程。换言之,合格/失败确定操作确定是否所有选定的要被编程为特定程序状态的存储单元都达到了该状态。同时,合格比特检测操作检测是否至少一个选定的要被编程为特定编程状态的存储单元达到了该状态。在各种备选实施例中,合格/失败确定操作和合格比特检测操作的顺序可以改变。例如,在一些实施例中,可以在合格/失败确定操作之前执行合格比特检测操作,在另一些实施例中,在合格/失败确定操作之后执行合格比特检测操作。图2是示出包括存储单元阵列的闪速存储器件的示意图,存储单元阵列包括具有全位线结构或奇_偶位线结构的存储块。在图2的示例中,NAND闪速存储器设备包括具有 1024个存储块的存储单元阵列100。在存储单元阵列100中,存储在相同存储块中的数据被同时擦除。在每个存储块中,存储单元被布置在连接到相同位线(例如1KB位线)的列中。在全位线结构中,在读和编程操作期间,同时选择存储块的所有位线。因此,连接到公共字线和连接到所有位线的存储单元被同时编程。在图2的示例中,相同列中的存储单元被串联以形成NAND串111。NAND串111的一端通过由串选择线SSL控制的选择晶体管连接到相应位线,另一端通过由地选择线GSL控制的选择晶体管连接到公共源极线CSL。在奇-偶结构中,将位线划分为偶位线BLe和奇位线BLo。连接到公共字线并且连接到奇位线的存储单元被一起编程,而连接到公共字线并且连接到偶位线的存储单元被一起编程。可以将数据编程到不同存储块中,以及从不同存储块读取数据。可以同时执行这些操作。图3A到3C是示出存储不同数量比特的存储单元的阈值电压分布的示意图。具体地,图3A示出了针对存储2比特数据的存储单元的阈值电压分布,图3B示出了针对存储3 比特数据的存储单元的阈值电压分布,图3C示出了针对存储4比特数据的存储单元的阈值电压分布。图3A到3C的阈值电压分布对应于存储单元的编程状态。因此,在下面的描述中,有时将阈值电压分布称为编程状态。在将2比特数据(4级(4-level)数据或2页(2-page)数据)存储在一组存储单元中的情况下(如图3A所示),每个存储单元具有四个阈值电压分布10到13之一内的阈值电压。阈值电压分布10包括被擦除的存储单元的阈值电压,阈值电压分布11到13包括被编程的存储单元的阈值电压。电压VPl到VP3是用于确定存储单元是否被编程为相应阈值电压分布11到13的验证电压。
在将3比特数据(8级数据或3页数据)存储在一组存储单元中的情况下(如图 3B所示),每个存储单元具有八个阈值电压分布20到27之一内的阈值电压。阈值电压分布20包括被擦除的存储单元的阈值电压,阈值电压分布21到27包括被编程的存储单元的阈值电压。电压VPl到VP7是用于确定存储单元是否被相应地编程为阈值电压分布21到 27的验证电压。在将4比特数据(16级数据或4页数据)存储在一组存储单元中的情况下(如图 3C所示),每个存储单元具有16个阈值电压分布30到45之一内的阈值电压。阈值电压分布30包括被擦除的存储单元的阈值电压,阈值电压分布31到45包括被编程的存储单元的阈值电压。电压VPl到VP15是用于确定选定的存储单元是否被编程为阈值电压分布11到 13的验证电压。图4是示出用于对连接到选定的字线的选定的存储单元编程的一系列编程脉冲的示意图。图4的示例使用普通ISPP方案。本发明的特定实施例使用相对于图4的普通 ISPP方案有所修改的编程方案。在普通ISPP方案中,将编程电压Vpgm作为一系列编程脉冲施加到选定的存储单元的控制栅极。编程脉冲的电平以连续反复的方式提高。在编程脉冲之间的时间段中执行验证操作(或验证读操作)。验证操作确定选定的存储单元的阈值电压是否达到了验证电平。在诸如参考图3描述的多级闪速存储器单元的阵列中,执行验证操作以确定选定的存储单元是否达到了与期望逻辑状态相对应的阈值电压分布。例如,如图4所示,在4级 MLC中,使用验证电压VPl到VP3执行验证操作,以确定选定的存储单元是否已被成功编程为与阈值电压分布11到13之一相对应的逻辑状态。类似地,在8级MLC中,使用验证电压 VPl到VP7执行验证操作,在16级MLC中,使用15个验证电压VPl到VP15执行验证操作。使用图4的普通编程方案执行编程操作所需的时间会与选定的存储单元的编程状态数量成比例地增加。此外,在这些编程操作中,验证操作会占用总编程时间的大部分。 因此,根据本发明原理的特定实施例的闪速存储器件应用自适应验证方案,自适应验证方案即使在选定的存储单元的编程状态数量较大的情况下也能减少验证时间。图5A到5C是示出根据本发明原理的实施例对闪速存储器件编程的方法的示意图。在图5A到5C的实施例中,假设闪速存储器件在每个单元中存储4比特数据,并且根据 3步编程方案执行编程操作。 在图5A到5C的方法中,在连接到选定的字线的选定的存储单元中同时对第一和第二页数据编程。如图5A所示,根据要被编程的数据,具有与擦除状态E相对应的阈值电压分布的选定的存储单元被编程为与编程状态Ql到Q3相对应的阈值电压分布。接着,将第三和第四页数据同时存储在选定的存储单元中。如图5B所示,根据要被编程的数据,处于擦除状态E的选定的存储单元被编程为与编程状态ΡΓ到P3’相对应的阈值电压分布。根据要被编程的数据,图5A的处于编程状态Ql的选定的存储单元被编程为与编程状态P4’到P7’相对应的阈值电压分布。根据要被编程的数据,图5A的处于编程状态Q2的选定的存储单元被编程为与编程状态P8’到Ρ1Γ相对应的阈值电压分布。根据要被编程的数据,图5A的处于编程状态Q3的选定的存储单元被编程为与编程状态P12’ 到P15’相对应的阈值电压分布。
用于确定编程状态P1,到P15,的验证电压VP1,到VP15,低于用于确定最终编程状态Pl到P15的验证电压VPl到VP15(见图5C)。例如,用于确定编程状态P1’的验证电压VP1’低于用于确定相应的阈值电压分布Pl的验证电压VPl (见图5C)。将选定的存储单元编程为图5Β的阈值电压分布的操作称为粗编程操作。 在细编程操作(或再编程操作)中,将处于编程状态ΡΓ到Ρ15’的选定的存储单元编程为具有最终编程状态Pl到Ρ15。可以顺序地或非顺序地执行图5Α到5C的编程操作。这些编程操作可以具有用于确定选定的存储单元是否被编程为目标阈值电压分布的验证操作。图6和7是示出验证图5Α的编程操作的方法的示意图。参考图6,在将编程电压Vpgm施加到与选定的字线相连的选定的存储单元之后, 将用于验证编程状态Ql的验证电压施加到选定的字线。此时,如图6所示,不执行针对其他编程状态Q2和Q3的验证操作。然后,将验证电压施加到选定的字线,读/写电路500从存储单元读取数据。随后,控制逻辑装置400的合格比特检测器410基于读数据,检测是否至少一个选定的存储单元的阈值电压大于等于编程状态Ql的验证电压VQ1。在没有选定的存储单元的阈值电压大于等于验证电压VQl的情况下,编程电压Vpgm提高预定量,编程操作进行到下一编程循环。否则,闪速存储器件确定针对编程状态Q2和Q3的验证起始点。参考图7,在检测到至少一个选定的存储单元的阈值电压大于等于验证电压VQl 的情况下,控制逻辑装置400根据编程电压Vpgm的当前值设置编程状态Q2的验证起始点。具体地,控制逻辑装置400将验证起始点设置为以下编程循环该编程循环的编程电压 Vpgm的值等于编程电压Vpgm的当前值和验证电压VQl与VQ2之间的电压差Δ V之和。此夕卜,假设验证电压VQ2与VQ3之间的电压差也是△ V,则控制逻辑装置400将编程状态Q3的验证起始点设置为以下编程循环该编程循环的编程电压Vpgm的值等于编程电压Vpgm的当前值和2 △ V之和。如图6所示,在所确定的验证起始点之前,不执行编程状态Q2和Q3 的验证操作。在一些实施例中,将其中检测到合格比特的编程循环(或向被确定为合格比特的选定的存储单元施加的编程电压)存储在控制逻辑装置400的寄存器430中。或者,在控制逻辑装置400的控制下将编程循环(或编程电压)提供给外部设备,例如存储器控制器。如上所述,在执行合格比特检测之前或之后,可以由合格/失败确定器420执行合格/失败确定操作。在选定的存储单元被成功编程为其目标状态的情况下,在随后的编程循环中将编程禁止电压施加到选定的存储单元。图8和9是示出验证图5Β的编程操作的方法的示意图。参考图8,在将编程电压Vpgm施加到与选定的字线相连的选定的存储单元之后, 将用于验证编程状态ΡΓ的验证电压施加到选定的字线。此时,如图8所示,不执行针对其他编程状态Ρ2’到Ρ15’的验证操作。然后,将验证电压施加到选定的字线,读/写电路500 从选定的存储单元读取数据。随后,控制逻辑装置400的合格比特检测器410基于读数据, 检测是否至少一个选定的存储单元的阈值电压大于等于编程状态ΡΓ的验证电压VP1’。在没有选定的存储单元的阈值电压大于等于编程状态ΡΓ的验证电压VP1’的情况下,编程电压Vpgm提高预定量,编程操作进行到下一编程循环。否则,闪速存储器件确定针对编程状态Ρ2,到Ρ15,的验证起始点。
参考图9,在检测到至少一个选定的存储单元的阈值电压大于等于验证电压VP1’的情况下,控制逻辑装置400根据编程电压Vpgm的当前值设置编程状态P2,的验证起始点。 具体地,控制逻辑装置400将验证起始点设置为其编程电压Vpgm的值等于编程电压Vpgm 的当前值和验证电压VP1’与VP2’之间的电压差Δ Vl之和的编程循环。此外,假设验证电压VP2’与VP3’之间的电压差也是Δ VI,则控制逻辑装置400将编程状态Ρ3’的验证起始点设置为其编程电压Vpgm的值等于编程电压Vpgm的当前值和2 Δ Vl之和的编程循环。如图8所示,在相应的验证起始点之前,不执行编程状态Ρ2’到Ρ15’的验证操作。在一些实施例中,控制逻辑装置400的寄存器430在粗编程操作期间存储合格比特信息,例如其中检测到合格比特的编程循环或循环的编程电压。然后存储在寄存器430 中的合格比特信息可用于确定用于细编程操作的最终编程状态Pl到Ρ15的验证起始点。在一些实施例中,将合格比特信息输出到外部设备,例如存储器控制器。合格比特信息可用于执行针对选定的存储单元的细编程操作。图10和11是示出验证图5C的编程操作的方法的示意图。参考图10,控制逻辑装置400基于在先前编程操作中检测到的合格比特信息,确定编程状态Pl到Ρ15的验证起始点。例如可以从寄存器430访问合格比特信息。参考图 11,控制逻辑装置400基于指示在对选定的字线的先前页编程操作中检测到的合格比特的合格比特信息,确定编程状态Pl的验证起始点。控制逻辑装置400将编程状态Ρ2的验证起始点确定为以下编程循环在该编程循环中,编程电压Vpgm等于验证电压VPl与VP2之间的电压差△ V2和与在先前编程操作中检测到的合格比特信息相对应的编程电压Vpgm之和。此外,假设验证电压VP2与VP3之间的电压差也是Δ V2,则控制逻辑装置400将编程状态Q3的验证起始点设置为其编程电压Vpgm等于编程电压Vpgm的当前值和2 Δ V2之和的编程循环。如图10所示,在相对应的验证起始点之前,不执行编程状态Ρ2到Ρ15的验证操作。在上面参考图5描述的编程方法中,在相对应的验证起始点之前,不执行针对编程状态Pl到Ρ15的验证操作。例如,仅在当前循环到达针对相对应的编程状态的验证起始点之后,才将用于验证编程状态Pl到Ρ15的验证电压施加到选定的字线。图12Α是示出用于图5Α的方法的编程电压和验证电压的电压示意图。图12Β是示出用于图5Β的方法的编程电压和验证电压的电压示意图。图12C是示出用于图5C的方法的编程电压和验证电压的电压示意图。如图12Α所示,在编程状态Ql的验证操作期间检测合格比特。一旦检测到合格比特,控制逻辑装置400就确定其他编程状态Q2和Q3的验证起始点。如图12Β所示,在编程状态ΡΓ的验证操作期间检测合格比特。一旦检测到合格比特,控制逻辑装置400就确定其他编程状态Ρ2’和Ρ15’的验证起始点。此时,将合格比特信息存储在控制逻辑装置400 的寄存器430中,以确定随后的页编程操作(例如细编程阶段)的验证起始点。最后,如图 12C所示,基于存储在寄存器430中的信息,确定最终编程状态Pl到Ρ15的验证起始点。在参考图5到12描述的编程操作中,通过去掉某些验证操作提高了编程速度。图13是示出根据本发明原理的另一实施例对闪速存储器件编程的方法的示意图。在图13的方法中,根据图13左侧所示的不同情况使用不同技术对存储单元编程。在图13所示的两种不同情况下,根据选定的存储单元的先前状态和目标状态,可变地设置编程状态的验证起始点。在第一种情况下,先前状态和目标状态不重叠,因为先前状态的阈值电压分布没有超过目标状态的验证电压。在第二种情况下,先前状态和目标状态重叠,因为先前状态的阈值电压分布超出了目标状态的验证电压。在待 验证的目标状态对应于第一种情况时,目标状态的验证起始点使用由到图13 的实线右侧的虚线所示的验证电压。另一方面,在待验证的目标状态对应于第二种情况时, 目标状态的验证起始点使用由到图13的实线左侧的点线所示的验证电压。在图13的示例中,根据图6或图8的方法确定与实线相对应的验证起始点。将图13的方法应用于图5A的示例,可以通过在先状态E和目标状态Ql到Q3实现第一种情况。在图5A的示例中没有出现第二种情况,因为在彼此重叠的阈值电压分布之间不对存储单元编程。将图13的方法应用于图5B的示例,可以通过在先状态E和目标状态P1’到P3 ’、在先状态Ql禾Π目标状态Ρ5,到Ρ7,、在先状态Q2和目标状态Ρ9 ’到P11’、以及在先状态Q3和目标状态Ρ13’到Ρ15’实现第一种情况。可以通过在先状态Ql和目标状态Ρ4’、在先状态Q2和目标状态Ρ8、以及在先状态Q3和目标状态Ρ12实现第二种情况。将图13的方法应用于图5C的示例,可以通过在先状态ΡΓ到Ρ15’和目标状态Pl到Ρ15实现第二种情况。图14是示出根据本发明原理的另一实施例对闪速存储器件编程的方法的示意图。图14的方法基本与图13的方法相同,不同之处在于,基于来自对相同字线的先前页编程操作的合格比特信息,而不是来自针对第一编程状态Pi的合格比特检测操作的合格比特信息,来执行验证起始点的确定操作。如以上对图13和14的描述所指出的那样,基于检测到的合格比特、存储的合格比特、或检测到的合格比特或存储的合格比特与先前状态和目标状态之间的关系,来确定每个编程状态的验证起始点。图15是示出根据本发明原理的另一实施例对闪速存储器件编程的方法的示意图。在图15的方法中,根据影子编程(shadow programming)方案对选定的存储单元编程。即使在使用影子编程方案执行编程操作时,也可以使用上述方法确定验证起始点。例如,可以基于检测到的合格比特、存储的合格比特、或检测到的合格比特或存储的合格比特与先前状态和目标状态之间的关系,来确定每个编程状态的验证起始点。图16是示出根据本发明原理的另一实施例对闪速存储器件编程的方法的流程图。图17是示出由图16的方法来编程的多比特数据的阈值电压分布的示意图。在图16的方法中,使用包括编程执行部分和验证部分的编程操作对闪速存储器件编程。编程执行部分改变选定的字线的选定的存储单元的阈值电压,验证部分确定已在编程执行部分期间改变的选定的存储单元的阈值电压是否达到了相对应的阈值电压。在编程执行部分期间将编程电压施加到选定的字线,在验证部分期间将一系列验证电压顺序施加到选定的字线。所述一系列验证电压与对选定的存储单元中的多比特数据加以表示的阈值电压分布相对应。在编程执行部分之前将待编程的数据加载到闪速存储器件中。可以在加载待编程的数据之前读取先前编程的数据。参考图16,在操作SlOO将变量FLAG和Pi_FLAG设置为“0”。变量FLAG用于指示最低编程状态(例如图2的状态Pl)是否合格,变量Pi_FLAG指示其他编程状态是否合格。 编程状态的“合格”状态指示与编程状态相对应的选定的存储单元的所有阈值电压都大于等于编程状态的验证电压。编程状态的合格状态不同于编程操作的编程合格。在操作SllO执行编程操作。操作SllO对应于编程执行部分。然后,操作S120确定变量FLAG是否被设置为“1”。如果变量FLAG未被设置为“1” (S120 =否),则方法进行到操作S130。在操作S130,针对编程状态Pl执行验证操作。然后,在操作S140,方法确定是否与编程状态Pl相对应的所有选定的存储单元的阈值电压都大于等于验证电压。换言之,操作S140确定编程状态Pl是否合格。在确定编程状态Pl合格的情况下(S140 =是),方法进行到操作S150,其中将变量FLAG设置为“1”。此后,在进一步的编程循环的验证部分期间省略针对编程状态Pl的验证操作。最后,例如在最后一个编程循环,针对编程状态Pl执行的验证被称为验证结束点或验证结束循环。接下来,操作S160预测其余编程状态的验证结束点。如下预测其余编程状态的验证结束点。在检测到编程状态Pl合格的情况下,方法确定或预测每个其余编程状态的合格点,其中合格点指示编程状态合格情况下的编程循环或编程电压。然后,合格点可用于确定针对其余编程状态的验证结束点。通过公式“Vpgm(i) = Vpgm(paSS)+Vdiff”确定其余编程状态的合格点,其中Vdiff指示编程状态Pl的验证电压VPl与另一编程状态的验证电压之间的差值电压 “N* Δ V”(其中N彡1),Vpgm⑴(i彡2)指示编程状态Pl之外的每个其余编程状态(例如编程状态P2到P7)的合格点的编程电压,Vpgm(paSS)指示编程状态Pl合格的点的编程电压。如图2所示,假设每个存储单元中存储3比特数据,每个存储单元具有与状态E和 Pl到P7相对应的8个阈值电压分布中的任何一个。通过相对应的验证电压Vvfyl到Vvfy7 确定编程状态Pl到P7。图2的状态分布示意图是在差值电压△ V在与相邻编程状态(例如Pl和P2)相对应的验证电压(例如Vvfyl和Vvfy2)之间相同的情况下示出的。但是, 在其他实施例中,验证电压之间的差值电压可以不同。如上所述确定编程状态Pl之外的企业编程状态的合格点。基于所确定的合格点来确定其余编程状态的验证结束点。通过公式“Vpgm(i)_VE = Vpgm (i)-Voffset (i) ”确定验证结束点,其中Vpgm(i)_VE指示与每个其余编程状态的验证结束点相对应的编程电压, Voffset (i)指示每个其余编程状态的偏移电压。在不同实施例中,可以将其余编程状态的偏移电压设置为相同的值或不同的值。在一些实施例中,闪速存储器件通过将当前编程循环的编程电压与和验证结束点相关联的编程电压相比较,来确定针对特定编程状态是否达到了验证结束点。或者,闪速存储器件可以通过将当前编程循环的索引(index)或其他标识符与验证结束点的编程循环标识符相比较,来针对特定编程状态是否达到了验证结束点。在一些实施例中,针对编程状态的验证结束点可能出现在所有相关存储单元都被编程为该状态之前。这是因为可以根据上文描述的预测来确定验证结束点。在这种情况发生时,尚未被成功编程的存储单元包括失败比特。可以在读取比特期间通过存储器控制器的纠错码(ECC)单元校正失败比特。失败比特一般与具有慢编程速度的存储单元相关联,并且被称为慢比特。一旦针对其 余编程状态P2到P7确定了验证结束点,方法就进行到操作S170。在操作S170,针对其余编程状态P2到P7执行验证操作,如下所述。在操作S120确定变量FLAG 被设置为“1”(S120 =是)的情况下,或者操作S140确定编程状态Pl不合格(S140 =否) 的情况下,方法也进行到操作S170。在操作S170执行的其余编程状态的验证操作基于在操作S160确定的验证结束点而自动结束。例如,在操作S171针对下一编程状态(例如状态P2)执行验证操作。操作 S172确定与编程状态P2相对应的存储单元的阈值电压是否大于等于验证电压Vvfy2。艮口, 操作S172确定是否与编程状态P2相对应的所有存储单元都编程合格。在确定与编程状态 P2相对应的所有存储单元都编程合格的情况下(S172 =是),方法进行到操作S173。否则 (S172 =否),方法进行到操作S174。在操作S174,方法确定当前编程循环是否到达了针对编程状态P2的验证结束点。 如果是(S174=是),则方法进行到操作S173。否则(S174=否),方法进行到操作S175。在操作S173,将变量Pi_FLAG设置为合格状态,以指示在下一编程循环中省略针对编程状态P2的验证操作。在操作S175,方法确定是否已执行了针对其余编程状态P2到P7的所有验证操作。 在尚未执行针对编程状态P2到P7的所有验证操作(S175=否)的情况下,方法进行到操作S176。否则(S175 =是),方法进行到操作S180。在操作S176,变量“i”增加1,方法返回操作S171。在操作S180,方法确定是否所有编程状态(例如Pl到P7)都合格。在确定一个或多个编程状态不合格(S180 =否)的情况下,方法操作进行到操作S190。否则(S180 = 是),方法结束。在操作S190,指示编程循环的变量LOOP增加1,方法返回操作S110。执行随后的编程循环,直到确定所有编程状态都合格。图18是示出根据本发明原理的实施例用于图16的方法的验证方案的示意图。参考图18,在编程状态Pl合格的情况下,预测针对其余编程状态P2到P7的验证结束点。在当前编程循环(或编程电压)与编程状态的预测验证结束点相对应的情况下, 编程状态合格,编程状态的验证操作结束。如图18所示,在每个编程状态到达相应的预测验证结束点之后,省略针对该编程状态的验证操作。图19是根据本发明原理的另一实施例在图16的方法中使用的验证方案的示意图。在图19的方法中,与多个编程状态中的至少两个编程状态的合格点相关地确定其余编程状态的验证结束点。例如,将编程状态划分为“η”个组Gl到Gn。与属于每个组的最低编程状态的合格点相关地确定属于该组的其余编程状态的验证结束点。可以如上所述确定验证结束点。例如,在第一组Gl中,与编程状态Pl的合格点相关地确定其余编程状态P2到P4的验证结束点。在第二组G2中,与编程状态P5的合格点相关地确定其余编程状态P6到P8的验证结束点。在其他实施例中,可以改变属于每个组的编程状态的数量。此外,可以将施加到不同组的偏移电压设置为相同或不同,并且可以将属于相同组的编程状态的偏移电压设置为相同或不同。 图20是示出根据本发明原理的另一实施例对闪速存储器件编程的方法的流程图。在图20的方法中,在操作S200将变量FBCPS、VPS和Pi_FLAG设置为“1”。变量 FBCPS指示执行失败比特计数的编程状态,变量VPS指示执行验证操作的编程状态。变量 Pi_FLAG用于指示已经执行了验证操作的编程状态的合格状态。在操作S210执行编程操作。操作S210对应于编程执行部分。接着,操作S220确定变量FBCPS的值是否等于变量VPS的值。假设当前编程循环是第一编程循环,变量FBCPS 的值等于变量VPS的值(S220 =是)。因此,方法进行到操作S230。在操作S230,针对编程状态Pl执行验证操作,方法进行到操作S240。操作S240对在编程状态Pl的验证操作中读取的数据比特中的失败比特的数量进行计数。可以以各种方式实现对失败比特的计数。例如,可以基于在验证操作期间在选定的存储单元中流动的电流量,来对失败比特的数量计数。或者,可以使用计数器对失败比特的数量计数。接着,在操作S250,方法确定失败比特的计数数量是否小于预定参考值。在失败比特的计数数量小于预定参考值(S250 =是)的情况下,方法进行到操作S260。否则(S250 =否),方法进行到操作S270。在操作S250,根据存储器控制器的ECC单元的纠错能力来确定参考值。在操作S260,将变量FBCPS的值增加1,将变量Pi_FLAG设置为指示合格状态。 换言之,确定第一编程状态Pl具有合格状态,因此,在后续的编程循环中省略针对编程状态Pl的验证操作。接着,方法进行到操作S270。如上文所述,在与编程状态相对应的数据比特中的失败比特的数量小于预定参考值时,确定编程状态具有合格状态。因此,即使在与编程状态相对应的数据比特包括失败比特的情况下,也可以省略编程状态的验证操作。失败比特是慢比特。换言之,在与编程状态相对应的数据比特中的失败比特的数量小于预定参考值时,省略针对慢比特的验证操作。返回操作S220,在变量FBCPS的值不等于变量VPS(S220 =否)的值的情况下,方法进行到操作S280。在针对编程状态Pl的失败比特的计数数量大于参考值的情况下,变量 FBCPS的值不变。在此情况下,假设当前验证操作与针对编程状态P2或另一较高编程状态的验证操作相关联,则对已计数了失败比特数量的编程状态加以指示的变量FBCPS的值不等于对执行验证操作的编程状态加以指示的变量VPS的值。在操作S280,针对于变量VPS的值相对应的当前编程状态执行验证操作,方法进行到操作S290。在操作S290,方法确定是否所有读数据比特都是合格数据比特。在所有读数据比特都是合格数据比特(S290 =是)的情况下,将变量Pi_FLAG设置为指示针对当前编程状态的合格状态,方法进行到操作S300。否则(S290 =否),方法进行到操作S270。在操作S270,方法确定是否已执行了针对编程状态的所有验证操作。如果尚未执行针对编程状态的所有验证操作(S270 =否),则方法进行到操作S310。否则(S270 =是),方法进行到操作S320。在操作S310,对要执行验证操作的编程循环加以指示的变量VPS的值增加1,方法返回操作S220。在操作S320,方法确定是否所有编程状态都合格。在至少一个编程状态不合格(S320 =否)的情况下,操作S330将编程循环的值增加1,并且将变量VPS设置为“N”。在操作S330,“N”的值指示不合格的编程状态中的最低编程状态。在操作S330之后,方法返回操作S210。在确定所有编程状态都合格(S320 =是)的情况下,方法结束。在特 定实施例中,可以将图20的方法修改为在操作S230和S240之间确定编程状态是否合格。图21是根据本发明原理的实施例用于图20的方法的验证方案的示意图。参考图21,执行针对第一编程状态Pl的比特计数操作,直到失败比特的数量变为小于预定参考值。此时,不执行针对其余编程状态的失败比特计数操作。一旦第一编程状态Pi的失败比特的数量变为小于预定参考值,就结束针对第一编程状态Pi的验证操作,并且开始针对第二编程状态P2的失败比特计数操作。此时,不执行针对其余编程状态(即第二编程状态的上级编程状态)的失败比特计数操作。在第二编程状态P2的失败比特的数量小于预定参考值时,结束针对第二编程状态P2的验证操作,开始针对第三编程状态P3的失败比特计数操作。通过与图21所示实质相同的方案,来确定针对其余编程状态的失败比特计数操作。图22是示出能够执行图20的方法闪速存储器件的框图。图22的器件基本上与图1的器件相同,不同之处在于图22的器件还包括在控制逻辑装置400内的用于使用电流感测对失败比特的数量进行计数的电路440。对失败比特的数量的计数不限于电流感测,而是也可以使用诸如计数器等其他技术实现。图23A和23B是示出根据本发明原理的另一实施例对闪速存储器件编程的方法的流程图。在图23A和23B的示例中,假设使用一个擦除状态E和7个编程状态Pl到P7,将 3比特数据存储在每个存储单元中。此外,图23的方法可以包含以上参考图6或图8描述的用于确定验证起始点的方案和以上参考图16描述的用于确定验证结束点的方案。可以使用验证起始点确定操作,来跳过针对快比特的验证操作,可以通过验证结束点确定方案, 来跳过针对慢比特的验证操作。参考图23A,在操作S300中,在编程操作的初始化时,将变量i_PGM_Loop设置为
和P(j)_Verify_End分别设置为最大编程循环次数Max_ PGM_Loop。变量i_PGM_Loop指示当前编程循环,变量P (j)_Verify_Start指示针对第j个编程状态的验证起始点,变量P(j)_Verify_End指示针对第j个编程状态的验证结束点。接着,在操作S310,在控制逻辑装置400的控制下执行编程操作。然后,在操作S320,在完成编程操作之后,方法确定编程状态P1是否合格。在验证操作确定编程状态Pl不合格(S320 =否)的情况下,方法进行到操作S330。在操作S330,针对编程状态Pl执行验证操作,以确定是否至少一个选定的存储单元已被成功编程为编程状态P1。换言之,操作S330确定选定的存储单元是否包括合格比特。当在编程状态Pl的验证操作期间检测到合格比特(S340 =是)时,方法进行到操作S350。否则(S340 =否),方法进行到操作S360。操作S350实现诸如参考图6和图8描述的方法,以基于检测到的合格比特,来预测其余编程状态P2到P7的验证起始点P(j)_Verify_Start。具体而言,操作S350包括 在操作S351将变量“ j”设置为2 ;在操作S352预测第j个编程状态的验证起始点P(j)_Verify_Start ;在操作S353确定“j”是否达到指示最高有效位(MSB)编程状态P7的7 ;以及在“j”没有达到7(S353 =否)的情况下,在操作S354将“j”增加1。还可以根据以上已参考图13和14描述的方案来预测验证起始点。当在操作S350 预测了其余编程状态P2到P7的验证起始点P(j)_Verify_Start之后,方法进行到操作 S360。在操作S360,方法确定编程状态Pl是否合格。在确定编程状态Pl合格(S360 = 是)之后,方法进行到操作S370。否则(S360 =否),方法进行到操作S380。操作S370使用与参考图16描述的方法类似的方法来预测其余编程状态P2到P7 的验证结束点P(j)_Verify_End。具体地,操作S370包括在操作S371设置“ j”以指示编程状态P2 ;在操作S372预测第j个编程状态的验证结束点P (j)_Verify_End ;在操作S373 确定“j”是否达到7 ;以及在“j”没有达到7的情况下,在操作S374将“j”增加1。当在操作S370预测其余编程状态P2到P7的验证结束点P (j)_Verify_End之后,方法进行到操作 S380。在操作S380,方法将“j”设置为2,以指示编程状态P2。接着,在操作S390,方法确定当前编程循环i_PGM_Loop是否在编程状态P (j)的验证起始点P (j) _Verify_Start和验证结束点P(j)_Verify_End之间。如果是,在执行编程状态P (j)的验证操作。否则,省略验证操作。在操作S390确定当前编程循环i_PGM_Loop大于等于编程状态P(j)的验证结束点P(j)_Verify_End,或小于等于编程状态P(j)的验证结束点P(j)_Verify_End(S390 = 是)的情况下,方法进行到操作S400。否则(S390 =否),方法进行到操作S410。在操作S400,方法执行编程状态P(j)的验证操作,并且进行到操作S410。在操作 S410,方法确定“j”是否达到指示编程状态P7的7。在“j”没有达到7(S410 =否)的情况下,在操作S420将“j”增加1,方法返回操作S390。否则(S410=是),方法进行到操作 S430。在操作S430,方法确定是否所有编程状态都合格。如果不是(S430 =否),则执行操作S440以将变量i_PGM_L00p增加1。否则(S430 =是),方法结束。在操作S440之后,方法返回操作S310。图24A和24B是示出根据本发明原理的另一实施例对闪速存储器件编程的方法的流程图。在图24A和24B的方法中,假设使用一个擦除状态E和7个编程状态Pl到P7将3 比特数据存储在每个存储单元中。此外,图24的方法可以包括以上参考图6或图8描述的用于预测验证起始点的方案和以上参考图20描述的预测验证结束点的方案。在图24A和 24B的方法中,根据验证起始点预测方案跳过针对快比特的验证操作,根据验证结束点预测方案跳过针对慢比特的验证操作。参考图24A,在编程操作的初始化时执行操作S500,将变量i_PGM_Loop设置为 “1”,将变量P(j)_Verify_Start和P (j)_Verify_End设置为最大编程循环次数Max_PGM_ Loop。变量i_PGM_Loop指示当前编程循环,变量P (j)_Verify_Start指示针对第j个编程状态的验证起始点。接着,在操作S510,在控制逻辑装置400的控制下执行编程操作。在编程操作之后,操作S520确定编程状态Pl是否合格。在编程状态Pl不合格 (S520 =否)的情况下,方法进行到操作S530。否则(S520 =是),方法进行到操作S560。在操作S530,方法执行针对编程状态Pl的验证操作并确定针对编程状态Pl的失败比特的数量。如以上参考图20所述,在针对编程状态Pl的失败比特的数量小于等于参考值时,将编程状态Pl设置为合格。接着,在操作S540,方法确定在编程状态Pl的验证操作期间是否检测到至少一个合格比特(即快比特)。在检测到合格比特(S540 =是)的情况下,方法进行到操作S550。 否 则(S540 =否),方法进行到操作S560。操作S560包括与以上参考图6或图8所述类似的操作,其中,基于检测到的合格比特,来预测其余编程状态P2到P7的验证起始点P(j)_ Verify_Start0因此,操作S550包括在操作S551将变量“j”设置为2 ;在操作S552预测第j个编程状态的验证起始点P(j)_Verify_Start ;在操作S553确定“j”是否达到7 ;以及在“j”没有达到7(S553 =否)的情况下,在操作S554将“j”增加1。可以根据以上参考图13和14描述的方案来预测验证起始点。当在操作S550预测其余编程状态P2到P7的验证起始点P(j)_Verify_Start之后,方法进行到操作S560。在操作S560,方法将“j”设置为2以指示编程状态P2。然后,在操作S570,方法确定编程状态P(j)是否合格。在编程状态p(j)不合格(S570 =否)的情况下,方法进行到操作S580。否则(S570 =是),方法进行到操作S600。在操作S580,方法确定编程状态 P(J)的预测验证起始点是否小于等于当前编程循环i_PGM_Loop。在当前编程循环i_PGM_ Loop小于编程状态P (j)的验证起始点P (j)_Verify_Start的情况下,省略编程状态P (j) 的验证操作。在当前编程循环i_PGM_Loop大于编程状态P(j)的验证起始点P(j)_Verify_ Start的情况下,执行编程状态P(j)的验证操作。在当前编程循环i_PGM_Loop大于等于编程状态P (j)的验证起始点P (j)_Verify_ Start的情况下,方法进行到操作S590。在操作S590,针对编程状态P (j)执行验证操作, 并且对针对编程状态P(j)的失败比特的数量进行计数。如以上参考图20所述,在编程状态P(j)的失败比特的数量小于等于参考值的情况下,将编程状态P(j)设置为合格。在其他实施例中,如以上参考图20所述,在编程状态Pl合格之后,执行针对编程状态P (j)的失败比特检测操作。在操作S590之后,方法进行到操作S600。在操作S600中,方法确定“j”是否达到指示编程状态P7的7。在“j”没有达到 7(S600 =否)的情况下,在操作S610将“j”增加1。否则(S600 =是),方法进行到操作 S620。在操作S620,方法确定是否所有编程状态Pl到P7都合格。如果是(S620 =是), 则方法结束。否则(S620 =否),则执行操作S630,以将变量i_PGM_Loop增加1,方法返回操作S510。图25A和25B是根据本发明原理的另一实施例对闪速存储器件编程的方法的流程图。在图25A和25B的方法中,假设使用一个擦除状态E和7个编程状态Pl到P7将 3比特数据存储在每个存储单元中。此外,图25A和25B的方法使用以上参考图10描述的用于预测验证起始点的方案和以上参考图16描述的预测验证结束点的方案。根据验证起始点预测方案跳过针对快比特的验证操作,根据验证结束点预测方案可以跳过针对慢比特的验证操作。参考图25A,在编程操作的初始化时执行操作S700,以将变量i_PGM_Loop设置为“ 1 ”,将变量P (j) _Verify—Start和P (j) _Verify_End设置为最大编程循环次数Max_PGM_ Loop。变量i_PGM_Loop用于指示当前编程循环,变量P (j)_Verify_End用于指示针对第j 个编程状态的验证结束点。接着,在操作S710,基于来自先前页或先前步的编程操作的合格比特信息(例如编程电压或编程循环),来预测编程状态Pl到P7的验证起始点。具体地, 操作S710包括在操作S711将变量“j”设置为1 ;在操作S712预测编程状态P(j)的验证起始点;在操作S713确定“j”是否已达到指示编程状态P7的7 ;如果“j”没有达到7(S713 =否),则在操作S714将“ j,,增加1。在“ j ”已达到7 (S713 =是)的情况下,方法进行到操作S720。在操作S720,在控制逻辑装置400的控制下执行编程操作。在编程操作之后,操作S730确定编程状态Pl是否合格。在编程状态Pl不合格 (S730 =否)的情况下,在操作S740执行针对编程状态Pl的验证操作。否则(S730 =是), 方法进行到操作S770。在操作S750,方法确定编程状态Pl是否合格。在编程状态Pl合格(S750 =是)的情况下,方法进行到操作S760。否则(S750 =否),方法进行到操作S770。与图16的方法类似地执行操作S760,其中预测其余编程状态P2到P7的验证结束点P(j)_Verify_End。具体地,操作S760包括在操作S761将“j”设置为2 ;在操作S762 预测第j个编程状态的验证结束点P(j)_Verify_End ;在操作S763确定“j”是否达到7 ;以及在“ j”没有达到7(S763 =否)的情况下,在操作S764将“ j”增加1。当在操作S760预测其余编程状态P2到P7的验证结束点P (j)_Verify_End之后,方法进行到操作S770。在操作S770,将“j”设置为2以指示编程状态P2。然后,在操作S780,方法确定当前编程循环i_PGM_Loop是否在编程状态P (j)的验证起始点P (j)_Verify_Start与编程状态P(j)的验证结束点P(j)_Verify_End之间。如果是则在当前编程循环中执行编程状态 P(J)的验证操作。否则,省略验证操作。在操作S780确定当前编程循环i_PGM_Loop大于等于编程状态P2的验证起始点P (j) _Verify_Start并且小于等于编程状态P2的验证结束点P(j)_Verify_End(S780 =是)的情况下,方法进行到操作S790。否则,方法进行到操作 S800o在操作S790,执行编程状态P2的验证操作,并且方法进行到操作S800。操作S800确定“j”是否达到指示编程状态P7的7。在“ j”没有达到7 (S800 =否) 的情况下,在操作S810将“j”增加1,方法返回操作S780。否则(S800 =是),方法进行到操作S820。操作S820确定是否所有编程状态都合格。在不是所有编程状态都合格(S820 =否)的情况下,则执行操作S830,以将变量i_PGM_Loop增加1,然后方法返回操作S720。 否则(S820 =是),方法结束。图26A和26B是示出根据本发明原理的另一实施例对闪速存储器件编程的方法的流程图。在图26A和26B的方法中,假设使用一个擦除状态E和7个编程状态Pl到P7将 3比特数据存储在每个存储单元中。此外,图26A和26B的方法可以使用以上参考图10描述的用于预测验证起始点的方案和以上参考图20描述的预测验证结束点的方案。根据验证起始点预测方案跳过针对快比特的验证操作,根据验证结束点预测方案跳过针对慢比特的验证操作。参考图26A,在编程操作的初始化时执行操作S900。操作S900将变量i_PGM_ Loop设置为和P(j)_Verify_End设置为最大编程循环次数Max_PGM_Loop。变量i_PGM_Loop指示当前编程循环,变量P(j)_Verify_End指示针对第 j个编程状态的验证结束点。接着,在操作S910,基于在先前页或先前步的编程操作中检测到的合格比特信息(例如编程电压或编程循环),来预测编程状态(例如Pl到P7)的验证起始点。更具体地,操作S910包括在操作S911将变量“j”设置为1 ;在操作S912预测编程状态P2的验证起始点;在操作S913确定“j”是否已达到指示编程状态P7的7 ;如果“ j” 没有达到7(S913 =否),则在操作S914将“j”增加1。在“j”已达到7(S913 =是)的情况下,方法进行到操作S920。 在操作S920,对选定的存储单元执行编程操作。然后,在操作S930,将“ j”设置为 1。接着,在操作S940,方法确定编程状态Pl的预测验证起始点是否小于等于当前编程循环 i_PGM_Loop。在当前编程循环i_PGM_Loop小于编程状态Pl的验证起始点P (j)_Verify_ Start的情况下,省略编程状态Pl的验证操作。在当前编程循环i_PGM_Loop大于等于编程状态Pl的验证起始点P(j)_Verify_Start的情况下,执行编程状态P2的验证操作。在当前编程循环i_PGM_Loop大于等于编程状态Pl的验证起始点P (j)_Verify_ Start(S940 =是)的情况下,方法进行到操作S950。否则(S940 =否),方法进行到操作 960。在操作S950,针对编程状态Pl执行验证操作,并且对针对编程状态Pl的失败比特的数量进行计数。与图20的方法类似,在编程状态Pl的失败比特的数量小于等于参考值时,认为编程状态Pl合格。在操作S950之后,方法进行到操作S960。在操作S960之后,方法确定“j”是否达到指示编程状态P7的值7。在“ j”没有达到7(S960 =否)的情况下,在操作S970以将“ j”增加1,方法返回操作S940。否则(S960 =是),方法进行到操作S980。在操作S980,方法确定是否所有编程状态Pl到P7都合格。 在不是所有编程状态都合格(S980 =否)的情况下,在操作S990将变量i_PGM_Loop增加 1,方法返回操作S920。否则(S980 =是),方法结束。图27是示出根据本发明原理的另一实施例对闪速存储器件编程的方法的流程图。首先,在操作S1000,将变量FBCPS和Pi_FLAG设置为“1”。变量FBCPS指示执行失败比特计数操作的编程状态,变量Pi_FLAG用于指示已经执行了验证操作的编程状态的合格状态。在操作SllOO执行编程操作。进一步地,在操作SllOO中,可以对与变量FBCPS的值相对应的编程状态进行失败比特计数。假设当前编程循环是第一编程循环,则可以针对第一编程状态Pl进行失败比特计数。由于当前编程循环是第一编程循环,可以基于存储在读/写电路500中的编程数据比特来进行失败比特计数(参见图1)。如果当前编程循环是第二编程循环,则可以基于在先前编程循环的验证操作中读取的数据比特来进行失败比特计数。在操作S1200,检查所计数的失败比特数量是否小于预定参考值。如果所计数的失败比特数量小于预定参考值,则方法进行到操作S1300。在操作S1300,将与编程状态Pl相对应的失败比特设置为编程禁止值(例如“1”)。这意味着尽管将编程电压施加到与编程状态Pl相对应的失败比特的存储单元,然而与编程状态Pl相对应的存储单元也会在下一编程循环中被禁止编程。此外,在操作S1300,将变量Pi_FLAG设置为指示合格状态,将变量FBCPS增加1。由于变量FBCPS增加了,可以针对下一编程状态P2而非编程状态Pl进行失败比特计数。在将变量Pi_FLAG设置为指示合格状态的情况下,针对与变量Pi_FLAG的值相对应的编程状态(例如Pl)省略验证操作。然后,方法进行到操作S1400。返回操作S1200,如果所计数的失败比特数量不小于预定参考值,则方法进行到操作S1400。在操作S1400中,分别针对除了合格编程状态以外的编程状态执行验证操作。例如,在将P1_FLAG设置为合格状态的情况下,分别针对除了与P1_FLAG相对应的编程状态Pl 以外的其余编程状态执行验证操作。在不存在合格的编程状态的情况下,在操作S1400中分别针对所有编程状态执行验证操作。操作S1500确定是否所有编程状态都合格。如果至少一个编程状态不合格,则方法进行到操作S1600,其中将编程循环数增加1。然后,方法进行到操作S1100。在所有编程状态都合格的情况下,方法结束。利用上述方法,在当前编程循环执行编程操作的同时(或者在将 编程电压施加到选定的字线的同时),使用先前编程循环的验证结果来执行失败比特计数操作。因此,尽管确定所计数的失败比特数量小于预定参考值,还是将合格比特再次施加到与当前编程循环处的失败比特相对应的存储单元。因此,减少了与被省略(或跳过)的编程状态相对应的失败比特的数量。在示例性实施例中,针对所有编程状态使用相同的参考值,以判断是否每个编程状态都合格。但是,可以将不同参考值应用于编程状态(或每行中的页),以判断相对应的编程状态是否合格。图28是示出根据本发明原理的实施例用于图27的方法的验证方案的示意图。如上所述,执行对编程状态Pl的比特计数操作,直到失败比特(或称为慢比特) 的数量变得小于预定参考值。此时,不执行对其余编程状态的失败比特计数操作。在将编程电压施加到选定的存储单元的编程操作期间,对与变量FBCPS相对应的编程状态执行比特计数操作。例如,如图28所示,在第N个编程循环,针对编程状态Pl、P2和P3执行验证操作。 基于与在第N个编程循环的验证操作处读取的编程状态Pl相对应的数据比特,在第(N+1) 个编程循环的编程操作期间,执行对编程状态Pl的失败比特计数操作。如果所计数的失败比特数量FBC大于预定参考值,则在第(N+2)个编程循环的编程操作期间再次执行对编程状态Pl的失败比特计数操作。如果在第(N+2)个编程循环确定所计数的失败比特数量FBC 小于预定参考值,则将与编程状态Pl相对应的数据比特中的失败比特设置为编程禁止值, 并且在包括当前编程循环(例如第(N+2)个编程循环)在内的接下来的编程循环之后,省略对编程状态Pl的验证操作。当编程状态Pl合格时,如图28所示,针对下一编程状态P2 执行失败比特计数操作。从以上描述可以理解,在确定所计数的失败比特数量小于预定参考值之后,再次将编程电压施加到与失败比特相对应的存储单元。这意味着减少了与被省略(或跳过)的编程状态相对应的失败比特的数量。在示例性实施例中,对于最高编程状态,如果确定所计数的失败比特数量小于预定参考值,则可以防止将其他编程电压施加到与失败比特相对应的存储单元。图29是示出根据本发明原理的另一实施例对闪速存储器件编程的方法的流程图。图29的编程方法与图27所示基本相同,不同之处在于,可以在步骤S1800之前执行步骤S1700,其中,在步骤S1800,对合格的编程状态以外的编程状态执行验证操作的;在 步骤S1700,进行是否所有编程状态都合格的判断。因此,省略对图29的编程方法的描述。图30是示出根据本发明原理的另一实施例对闪速存储器件编程的方法的流程图。首先,在操作S2000,将变量FBCPS和Pi_FLAG设置为“1”。变量FBCPS指示执行失败比特计数操作的编程状态,变量Pi_FLAG用于指示已经执行了验证操作的编程状态的合格状态。在操作S2100执行编程操作。在操作S2200,检查所计数的失败比特数量是否小于预定参考值。如下文所述,由图1的控制逻辑装置400来维护所计数的失败比特数量。例如,作为先前编程循环的失败比特数量,所计数的失败比特数量可以被设置为大于预定参考值的默认值。如果所计数的失败比特数量小于预定参考值,则方法进行到操作S2300。在操作S2300,将与编程状态Pl相对应的失败比特设置为编程禁止值(例如“1”)。这意味着尽管将编程电压施加到与编程状态Pl相对应的失败比特的存储单元,还是在下一编程循环处禁止对与编程状态Pl相对应的存储单元进行编程。此外,在操作S2300中,将变量 Pi_FLAG设置为指示合格状态,将变量FBCPS增加1。由于变量FBCPS增加了,可以针对下一编程状态P2而非编程状态Pl进行失败比特计数。在将变量Pi_FLAG设置为指示合格状态的情况下,针对与变量Pi_FLAG的值相对应的编程状态(例如P1),省略验证操作。然后, 方法进行到操作S2400。返回操作S2200,如果所计数的失败比特数量不小于预定参考值,则方法进行到操作S2400。在操作S2400中,分别针对除了合格的编程状态以外的编程状态执行验证操作。 例如,在将P1_FLAG设置为合格状态的情况下,分别针对与P1_FLAG相对应的编程状态Pl 以外的其余编程状态执行验证操作。在不存在合格的编程状态的情况下,在操作S2400中分别针对所有编程状态执行验证操作。此外,在操作S2400,对与变量FBCPS相对应的编程状态执行失败比特计数操作。将所计数的失败比特数量存储在控制逻辑装置400中。使用所计数的失败比特数量作为操作S2200中的在先编程循环的失败比特数量。操作S2500确定是否所有编程状态都合格。如果至少一个编程状态不合格,则方法进行到操作S2600,其中将编程循环数增加1。然后,方法进行到操作S1100。在所有编程状态都合格的情况下,方法结束。利用上述方法,当在当前编程循环处执行编程操作之后,使用先前编程循环的验证结果来省略对编程状态的验证操作。因此,尽管确定所计数的失败比特数量小于预定参考值,还是将编程电压施加到与在当前编程循环处的失败比特相对应的存储单元。因此,减少了与被省略(或跳过)的编程状态相对应的失败比特的数量。在示例性实施例中,针对所有编程状态使用相同的参考值,以判断是否每个编程状态都合格。但是,可以将不同的参考值应用于编程状态(或每行中的页),以判断相对应的编程状态是否合格。图31是示出根据本发明原理的实施例用于图29的方法的验证方案的示意图。如上所述,执行对第一编程状态Pl的比特计数操作,直到失败比特(或称为慢比特)的数量变得小于预定参考值。此时,不执行对其余编程状态的失败比特计数操作。在将编程电压施加到选定的存储单元的编程操作期间,对与变量FBCPS相对应的编程状态执行比特计数操 作。例如,首先,将编程电压施加到选定的存储单元。然后,如图31所示,在执行验证操作之前,检查失败比特数量是否小于预定参考值。如果失败比特数量不小于预定参考值, 则在第N个编程循环针对编程状态Pl、P2和P3执行验证操作。基于与在第N个编程循环的验证操作处读取的的编程状态Pl相对应的数据比特,在第N个编程循环期间执行对编程状态Pl的失败比特计数操作。可以由图1的控制逻辑装置400来保持所计数的失败比特数量。如果执行了第(N+1)个编程循环,则将编程电压施加到选定的存储单元。然后,在执行第(N+1)个编程循环的验证操作之前,检查失败比特数量是否小于预定参考值。可以由图1的控制逻辑装置400来保持所计数的失败比特数量。如果确定所计数的失败比特数量FBC小于第(N+2)个编程循环处的预定参考值, 则将与编程状态Pl相对应的数据比特中的失败比特设置为编程禁止值,并且在包括当前编程循环(例如第(N+2)个编程循环)在内的接下来的编程循环之后,省略对编程状态Pl 的验证操作。当编程状态Pl合格时,如图31所示,针对下一编程状态P2执行失败比特计数操作。从以上描述可以理解,在确定所计数的失败比特数量小于预定参考值之后,再次将编程电压施加到与失败比特相对应的存储单元。这意味着减少了与被省略(或跳过)的编程状态相对应的失败比特的数量。在示例性实施例中,对于最高编程状态,如果确定所计数的失败比特数量小于预定参考值,则可以防止将其他编程电压施加到与失败比特相对应的存储单元。图32是示出根据本发明原理的另一实施例对闪速存储器件编程的方法的流程图。图32的编程方法与图30所示的基本相同,不同之处在于,可以在操作S2800之前执行操作S2700,其中,在操作S2800,对合格编程状态以外的编程状态执行验证操作;在操作S2700,判断是否所有编程状态都合格。因此,省略对图32中编程方法的描述。如图16到21和图27到30所述,省略(或跳过)了对确定为合格的编程状态的验证操作。这意味着尽管将编程电压施加到字线,也会禁止对与确定为合格的编程状态相对应存储单元进行编程。换言之,可以以两种方式进行对与慢比特(或失败比特)相对应的存储单元的编程禁止图16到21中描述的第一编程禁止方式,以及图27到30描述的第二编程禁止方式。图33是示出根据本发明原理的实施例包括闪速存储器件的集成电路的框图。参考图33,诸如智能卡的集成电路包括非易失性存储器件1000和控制器2000。非易失性存储器件1000与图1所示基本相同,因此省略对其的详细描述,以避免不必要的重复。控制器2000控制非易失性存储器件1000并且包括中央处理单元(CPU)2100、只读存储器(ROM) 2200、随机存取存储器(RAM) 2300和输入/输出(I/O)接口 2400。CPU 2100根据存储在ROM 2200中的各种程序控制集成电路卡的整体操作,输入/输出接口 2400与外部设备接口。控制器2000存储对在非易失性存储器件1000的编程操作期间检测到的合格比特加以指示的信息,并将对检测到的合格比特加以指示的信息提供给非易失性存储器件 1000。该信息可用于在上述一个或多个方法中确定验证起始点。图34是示出根据本发明原理的实施例包括闪速存储器件的计算系统的示意图。 该计算系统可采取各种形式,例如蜂窝电话、个人数字助理、数字照相机、便携式游戏控制台、MP3播放器、高清电视、数字视频盘、路由器、全球定位系统(GPS)等等。参考图34,该计算系统包括处理单元3100、用户接口 3200、诸如基带芯片集等调制解调器3300、存储器控制器3400,以及闪速存储器件3500,它们经由总线3001彼此电连接。闪速存储器件3500与图1的闪速存储器件基本相同,并且使用诸如以上描述的自适应验证方案执行编程操作。因此,省略对闪速存储器件3500的进一步描述以避免不必要的重复。通过存储器控制器3400将已被处理单元3100处理或将被其处理的N比特数据(N ^ 1) 存储在闪速存储器件3500中。当计算系统是移动设备时,该计算系统还可以包括用于提供计算系统的操作电压的电池3600。虽然未示出,但计算系统还可以包括应用芯片集、照相机图像处理器(CIS),或移动动态随机存取存储器(DRAM)。存储器控制器和闪速存储器件可以形成使用非易失性存储器来存储数据的固态驱动器(SSD)。
图35是示出根据本发明原理的实施例的图32的存储器控制器3400的框图。参考图35,存储器控制器3400在存储介质中存储数据,并且从存储介质读取数据。控制器包括主机接口 4100、存储器接口 4200、处理单元4300、缓冲存储器4400和纠错码单元4500。主机接口 4100与诸如主机等外部设备接口,存储器接口 4200与存储介质接口。处理单元4300控制存储器控制器3400的整体操作。缓冲存储器4400临时存储要存储在存储介质中的数据、或从存储介质读取的数据。缓冲存储器4400还可以用作处理单元 4300的工作存储器。缓冲存储器4400可以用于存储从闪速存储器件输出的合格比特信息。 纠错码单元4500检测并校正从存储介质读取的数据中的错误。存储器控制器3400还包括用于存储代码数据的ROM 4600。在一些实施例中,利用可变电阻存储单元来配置存储单元。美国专利 No. 7,529,124公开了可变电阻存储单元和包括可变电阻存储单元的存储器件的示例,该公开通过引用包含于此。在一些实施例中,使用具有电荷存储层的各种单元结构之一来实现存储单元。具有电荷存储层的单元结构可以例如包括使用电荷俘获层的电荷俘获闪存结构、包括在多层中堆叠的阵列的堆叠闪存结构、不具有源-漏的闪存结构,以及针形闪存结构。美国专利 No. 6,858,906、美国专利公开No. 2004-0169238和美国专利公开2006-0180851公开了具有作为电荷存储层的电荷俘获闪存结构的存储器件的示例,以上公开通过引用包含于此。韩国专利No. 673,020公开了不具有源_漏的闪存结构的示例,该公开通过引用包含于此。根据本发明原理的各种示例的器件可以安装在多种封装中的任何一种中。例如, 可以将上述闪速存储器件和/或存储器控制器以多种封装类型来安装,例如封装上封装 (PoP, package on package)、球栅阵列(BGA,ball grid arrays)、芯片级封装(CSP, chip scale package)、塑料引线芯片载体(PLCC,plastic leaded chip carrier)、塑料双列直插封装(PDIP, plastic dual in-line package)、华夫包内管芯(DIWP,die in waffle pack)、华夫型管芯(DIWF,die in wafer form)、板上芯片(COB,chip on board)、陶瓷双列直插封装(CERDIP,ceramic dual in-line package)、塑胶公制四方扁平封装(MQFP,plastic metric quad flat pack)、小夕卜形封装(SOP, small outline package)、收缩小型封装(SSOP,shrink small outline package)、薄型小外形封装(TSOP,thinsmall outline package)、薄四方扁平封装(TQFP,thin quad flat pack)、系统级封装(SIP, system in package)、多芯片封装(MCP, multi-chip package)、晶圆级堆叠封装(WLSP, wafer-level stack package)、华夫型管芯(DIWF,die in wafer form)、华夫封装上管芯(DOWP,die on waffle package)、晶圆级制造封装(WFP, wafer-level fabricated package)和晶圆级处理堆叠封装(WSP, wafer-level processed stack package)。

如上所述,在本发明原理的各种实施例中,通过省略与编程状态相对应的验证起始点之前的验证操作,可以改进编程性能。此外,通过省略编程状态的验证结束点之后的验证操作,可以改进编程性能。上文是对实施例的说明,而不应理解为对其的限制。虽然描述了几个实施例,但是本领域技术人员将容易理解,在这些实施例中可以做出很多修改而实质上不偏离本发明原理的新颖教导和优点。因此,所有这些修改都应包括在权利要求定义的本发明原理的范围内。
权利要求
1.一种对闪速存储器件编程的方法,包括对选定的存储单元编程;执行验证操作,以确定选定的存储单元的阈值电压是否达到了与目标编程状态相对应的验证电平;根据与检测选定的存储单元中的初始合格比特相关联的参数,确定针对至少一个目标编程状态的验证起始点;和根据与检测将多个选定的存储单元成功编程为最低的目标编程状态相关联的参数,确定针对至少一个目标编程状态的验证结束点。
2.根据权利要求1所述的方法,其中与检测初始合格比特相关联的参数是在检测到初始合格比特的编程循环中,用于对选定的存储单元编程的编程电压。
3.根据权利要求1所述的方法,其中验证起始点是验证起始循环。
4.根据权利要求1所述的方法,其中验证起始点根据与初始编程状态相对应的第一阈值电压分布和与所述至少一个目标编程状态相对应的第二阈值电压分布之间的裕度而变化。
5.根据权利要求4所述的方法,其中验证起始点根据第一和第二阈值电压分布是否重叠而变化。
6.根据权利要求5所述的方法,其中在第一和第二阈值电压分布重叠的情况下,提高验证起始点。
7.根据权利要求5所述的方法,其中在第一和第二阈值电压分布不重叠的情况下,降低验证起始点。
8.根据权利要求1所述的方法,其中与检测将多个选定的存储单元成功编程为最低的目标编程状态相关联的参数包括在检测到所述多个选定的存储单元被成功编程为所述最低的目标编程状态的编程循环中使用的编程电压。
9.根据权利要求8所述的方法,其中确定验证结束点包括预测针对至少一个目标编程状态的合格点,以及从预测的合格点减去偏移值。
10.根据权利要求9所述的方法,其中从多个目标编程状态的预测的合格点减去相同的偏移值,以确定针对所述多个目标编程状态的验证结束点。
全文摘要
一种对闪速存储器件进行编程的方法,包括对选定的存储单元编程;执行验证操作,以确定选定的存储单元是否达到了目标编程状态;以及基于与检测初始编程状态的编程期间的合格比特相关联的编程特性,来确定验证操作的起始点。
文档编号G11C16/34GK102157204SQ201010622089
公开日2011年8月17日 申请日期2010年12月30日 优先权日2010年2月11日
发明者尹翔镛, 尹铉竣, 朴起台, 金武星, 金甫根 申请人:三星电子株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1