以高分辨率可变初始编程脉冲对非易失性存储器编程的制作方法

文档序号:6768330阅读:195来源:国知局
专利名称:以高分辨率可变初始编程脉冲对非易失性存储器编程的制作方法
技术领域
本发明涉及非易失性存储器。
背景技术
半导体存储器器件由于用于各种电子器件中而变得更为流行。例如,非易失性半导体存储器用于蜂窝电话、数码相机、个人数字助理、移动计算设备、非移动计算设备和其它设备中。电可擦除可编程只读存储器(EEPROM)和闪速存储器是其中最流行的非易失性半导体存储器。
EEPROM和闪速存储器二者皆利用了位于半导体衬底中的沟道区域之上并与之隔离的浮置栅极。浮置栅极位于源区与漏区之间。控制栅极设在浮置栅极之上且与之隔离。 晶体管的阈值电压受浮置栅极上保持的电荷量控制。也就是说,在晶体管被导通以允许其源极与漏极之间传导之前必须施加到控制栅极的电压的最小量受浮置栅极上的电荷水平控制。
在对EEPROM或闪速存储器器件编程时,通常对控制栅极施加编程电压且将比特线接地。来自沟道的电子被注入浮置栅极中。当电子在浮置栅极中累积时,浮置栅极变为带负电且存储器单元的阈值电压升高,使得存储器单元处于被编程状态。在题为“Source Side Self Boosting Technique For Non-Volatile Memory” 的第 6,859,397 号美国专利和题为“Detecting Over Programmed Memory”的第6,917,542号美国专利中具有更多关于编程的信息,这些专利通过引用而全部并入本文。
—些EEPROM和闪速存储器器件具有用于存储两个电荷范围的浮置栅极,因此,存储器单元可在两个状态(例如对应于数据“1”和数据“0”的被擦除状态和被编程状态)之间被进行编程/擦除。这样的器件被称为二进制器件。
通过标识多个不同的容许阈值电压范围,可实现多状态闪速存储器单元。每一不同的阈值电压范围与关于数据比特集合的预定值对应。在编程至存储器单元中的数据与存储器单元的阈值电压范围之间的特定关系取决于为存储器单元采用的数据编码方案。例如,第6,222,762号美国专利和美国专利申请公布No. 2004/0255090描述了用于多状态闪速存储器单元的多种数据编码方案,该专利和专利申请公布通过引用而整体并入本文。
在一些实施例中,施加至控制栅极的编程电压包括幅值随着每一相继脉冲而增加预定步长大小(例如0.2¥,0.3¥,0.斩,或其它值)的一系列脉冲。编程电压幅值的选择需折衷。幅值太高会导致一些存储器单元被过度编程,而幅值太低会导致较长的编程时间。通常,非易失性存储器的使用者希望存储器编程较快。
在现有技术器件中,对于未被明显使用的新器件(也称为全新器件)和繁重使用的器件采用相同的编程信号。但是,随着非易失性存储器器件经过很多编程周期,电荷陷入浮置栅极与沟道区之间的绝缘体中。电荷的这种陷入将阈值电压偏移至更高的电平,这使得存储器单元的编程更快。如果编程电压的幅值被设置成太高,那么,即使该编程电压未导致全新器件的过度编程,但是随着该器件的使用变得更加繁重,该器件可能受到过度编程。 因此,新器件的编程电压设置得足够低,以防止在该器件变旧时出现过度编程。这样降低编程电压的幅值会降低全新器件对数据编程时的速度。

发明内容
本发明公开的技术用于增加编程速度,同时降低过度编程的风险。
一个实施例包括对多个非易失性存储器元件执行多阶段编程处理的一个阶段。 该多阶段编程处理将所述多个非易失性存储器元件编程至一个或多个最终目标条件。所述一个阶段包括使用第一编程脉冲集合将所述多个非易失性存储器元件编程至一个或多个第一中间目标条件。执行所述一个阶段包括标识与实现特定结果相关的编程脉冲;关于所述非易失性存储器元件的一个或多个可替选结果执行一个或多个感测操作;如果所述感测操作确定出大于预定数量的非易失性存储器元件实现了所述一个或多个可替选结果的第一可替选结果,则存储基于所述第一可替选结果和所标识的编程脉冲的标识;以及如果所述感测操作未确定出有足够数量的非易失性存储器元件实现所述一个或多个可替选结果,则存储基于所标识的编程脉冲的标识。该方法还包括执行所述多阶段编程处理的附加阶段,包括施加第二编程脉冲集合,该第二编程脉冲集合的初始脉冲具有基于所存储的标识而设置的幅值。
一个实施例包括关于多个非易失性存储器元件执行多个编程处理。每个所述编程处理用于使用编程脉冲至少将所述非易失性存储器元件的子集编程至相应的目标条件集合。对于至少所述编程处理的子集,该方法包括标识与实现相应编程处理的特定结果相关的编程脉冲,在用于非易失性存储器元件的一个或多个可替选结果处执行一个或多个感测操作,如果所述一个或多个感测操作确定出多于预定数量的非易失性存储器元件实现所述一个或多个可替选结果的第一可替选结果,则使用所述第一可替选结果和编程脉冲的标识,以调整用于所述非易失性存储器元件的后续编程处理的编程,并且,如果所述一个或多个感测操作确定出少于所需数量的非易失性存储器元件实现任一所述可替选结果,则使用编程脉冲的标识,以调整用于所述非易失性存储器元件的后续编程处理的编程。
一个实施例包括对多个非易失性存储器元件执行多阶段编程处理的第一阶段。 该多阶段编程处理将所述多个非易失性存储器元件编程至一个或多个最终目标条件。所述第一阶段至少将所述非易失性存储器元件的子集编程至一个或多个第一中间目标条件。 执行第一阶段包括以编程脉冲之间的第一增量,将第一编程脉冲集合施加至所述非易失性存储器元件;响应于第一编程脉冲集合的第η个编程脉冲,确定至少预定数量的非易失性存储器元件的子集已达到用于该第一阶段的中间条件(用于该第一阶段的中间条件不同于所述一个或多个第一阶段目标条件);响应于确定至少预定数量的非易失性存储器元件的子集已达到中间条件,以用于所述非易失性存储器元件的子集的可替选条件执行感测操作;如果感测操作发现大于预定数量的非易失性存储器元件处于所述可替选条件,则存储基于所述可替选条件的标识;如果感测操作未发现处于所述可替选条件的大于预定数量的非易失性存储器元件,则存储基于所述中间条件的标识;响应于确定至少预定数量的非易失性存储器元件的子集已达到用于第一阶段的中间条件,则改变第一编程电压集合以在编程脉冲之间具有第二增量(在编程脉冲之间的第二增量小于在编程脉冲之间的第一增量);以及在足够数量的非易失性存储器元件已达到相应的一个或多个第一阶段目标条件时结束第一阶段。该方法还包括执行多阶段编程处理的附加阶段,包括施加第二编程脉冲集合至所述多个非易失性存储器元件。第二编程脉冲集合的初始脉冲具有基于所存储的标识而设置的幅值。
一个实施例包括多个非易失性存储器元件以及与所述多个非易失性存储器元件通信的一个或多个管理电路。所述一个或多个管理电路关于所述多个非易失性存储器元件执行多个编程处理,每个所述编程处理用于使用编程脉冲至少将所述非易失性存储器元件的子集编程至相应的目标条件集合。对于至少所述编程处理的子集,所述一个或多个管理电路标识与实现相应编程处理的特定结果相关的编程脉冲并且在用于所述非易失性存储器元件的一个或多个可替选结果处执行一个或多个感测操作。如果所述一个或多个感测操作确定出多于预定数量的非易失性存储器元件实现所述一个或多个可替选结果的第一可替选结果,则所述一个或多个管理电路使用所述第一可替选结果和编程脉冲的标识,以调整用于所述非易失性存储器元件的后续编程处理的编程。如果所述一个或多个感测操作确定出少于所需数量的非易失性存储器元件实现任一所述可替选结果,则所述一个或多个管理电路使用编程脉冲的标识,以调整用于所述非易失性存储器元件的后续编程处理的编程。
一个实施例包括多个非易失性存储器元件以及与所述多个非易失性存储器元件通信的一个或多个管理电路。所述一个或多个管理电路对所述多个非易失性存储器元件执行多阶段编程处理的一个阶段。该多阶段编程处理将所述多个非易失性存储器元件编程至一个或多个最终目标条件。所述一个阶段包括所述一个或多个管理电路使用第一编程脉冲集合将所述非易失性存储器元件编程至一个或多个第一中间目标条件,并且标识与实现特定结果相关的编程脉冲。所述一个或多个管理电路在所述一个阶段期间关于所述非易失性存储器元件的一个或多个可替选结果执行一个或多个感测操作。如果所述感测操作确定出大于预定数量的非易失性存储器元件实现了所述一个或多个可替选结果的第一可替选结果,则所述一个或多个管理电路存储基于所述第一可替选结果和所标识的编程脉冲的标识。如果所述感测操作未确定出有足够数量的非易失性存储器元件实现所述一个或多个可替选结果,则所述一个或多个管理电路存储基于所标识的编程脉冲的标识。所述一个或多个管理电路执行所述多阶段编程处理的附加阶段,包括施加第二编程脉冲集合,该第二编程脉冲集合的初始脉冲具有基于所存储的标识而设置的幅值。


图1是NAND串的俯视图。
图2是NAND串的等效电路图。
图3是非易失性存储器系统的框图。
图4是示出存储器阵列的一个实施例的框图。
图5是示出感测块的一个实施例的框图。
图6示出阈值电压分布的示例性集合且示出示例性编程处理。
图7示出阈值电压分布的示例性集合且示出示例性编程处理。
图8A-图8C示出阈值电压分布的示例以及示例性编程处理。
图9A-图9C示出阈值电压分布的示例以及示例性编程处理。
图IOA-图IOD示出阈值电压分布的示例以及示例性编程处理。
图IlA和图IlB示出阈值电压分布的示例以及示例性编程处理。
图12A-图12D示出阈值电压分布的示例以及示例性编程处理。
图13A-图13D示出阈值电压分布的示例以及示例性编程处理。
图14是描述用于操作非易失性存储器的一个实施例过程的流程图。
图15是描述用于对非易失性存储器编程的一个实施例过程的流程图。
图16是描述用于对非易失性存储器编程的一个实施例过程的流程图。
图17示出编程脉冲的示例性集合。
图18示出编程脉冲的示例性集合。
图19-26是描述用于执行编程处理的不同实施例的流程图。
图27A-图27C以及图28A-图28C是说明粗略/精细编程方案的曲线图。
图四是描述用于对非易失性存储器编程的处理的一个实施例的流程图。
图30-图32是示出阈值电压分布的曲线图。
图33是描述用于感测关于非易失性存储器元件组的信息的处理的一个实施例的流程图。
图34是描述用于感测关于非易失性存储器元件组的信息的处理的一个实施例的流程图。
具体实施例方式闪速存储器系统的一个示例使用NAND结构,其包括布置串联的多个晶体管,夹于两个选择栅极之间。串联的晶体管和所述选择栅极被称为NAND串。图1是示出一个NAND 串的俯视图。图2是其等效电路。图1和图2中所示的NAND串包括串联且夹在第一(漏极侧)选择栅极120与第二(源极侧)选择栅极122之间的四个晶体管100、102、104和106。 选择栅极120通过比特线接触1 将NAND串与比特线连接。选择栅极122将NAND串与源极线1 连接。通过将适当的电压施加到选择线S⑶控制选择栅极120。通过将适当的电压施加到选择线SGS控制选择栅极122。晶体管100、102、104和106中的每一个具有控制栅极和浮置栅极。例如,晶体管100具有控制栅极100CG和浮置栅极10(FG。晶体管102包括控制栅极102CG和浮置栅极102TO。晶体管104包括控制栅极104CG和浮置栅极104TO。 晶体管106包括控制栅极106CG和浮置栅极106TO。控制栅极IOOCG连接到字线WL3,控制栅极102CG连接到字线WL2,控制栅极104CG连接到字线WL1,且控制栅极106CG连接到字线虬0。
注意,虽然图1和图2示出在NAND串中有四个存储器单元,但是使用四个存储器单元仅为示例。NAND串可具有少于四个存储器单元或多于四个存储器单元。例如,一些 NAND串会包括八个存储器单元、16个存储器单元、32个存储器单元、64个存储器单元、1 个存储器单元,等等。本文的讨论并不限于NAND串中任何特定数量的存储器单元。一个实施例使用具有66个存储器单元的NAND串,其中64个存储器单元用于存储数据,而两个存储器单元由于不存储数据而被称为哑元存储器单元。
使用NAND结构的闪速存储器系统的典型架构包括若干NAND串。每一 NAND串通过其受选择线SGS控制的源极选择栅极而连接至共同源极线,并且通过其受选择线SGD控制的漏极选择栅极而连接至其所关联的比特线。每一比特线以及经由比特线接触部连接到该比特线的相应NAND串包括存储器单元阵列的列。多个NAND串共享比特线。通常,比特线在垂直于字线的方向上在NAND串的顶部走线,并且连接到感测放大器。
在以下美国专利/专利申请中提供了 NAND型闪速存储器的有关示例及其操作第 5,570,315号美国专利;第5,774,397号美国专利;第6,046,935号美国专利;第6,456,528 号美国专利;以及美国专利公开NO.US2003/0002348,所有这些专利/专利申请通过引用并入本文。
除了 NAND闪速存储器之外,也可以使用其它类型的非易失性存储设备。例如, 也可以由使用电介质层用于存储电荷的存储器单元制造非易失性存储器器件。使用电介质层,而不是先前描述的导电性浮置栅极元件。这种使用电介质存储元件的存储器器
Eitan ^Λ "NROM :A Novel Localized Trapping, 2-Bit Nonvolatile Memory Cell” (IEEE Electron Device Letters,卷 21,第 11 号,2000 年 11 月,第 543-545 页)加以描述。0N0电介质层延伸跨过源极扩散与漏极扩散之间的沟道。用于一个数据比特的电荷位于与漏极相邻的电介质层,而用于另一个数据比特的电荷位于与源极相邻的电介质层。第5,768,192号美国专利和第6,011,725号美国专利公开一种具有夹置于两个二氧化硅层之间的陷阱电介质的非易失性存储器单元。通过单独读取电介质中在空间上分离的电荷存储区域的二进制状态,可实现多状态数据存储。还可以使用基于M0N0S或TANOS型结构或纳米晶体的非易失性存储器。也可以使用其他类型的非易失性存储器。
图3示出存储器器件210,该器件具有用于对一页(或其他单位的)存储器单元 (例如,NAND多状态闪速存储器)进行并行读取和编程的读取/写入电路。存储器器件210 可包括一个或多个存储器管芯或芯片212。存储器管芯212包括存储器单元的(二维或三维)阵列200、控制电路220以及读取/写入电路230A和230B。在一个实施例中,通过各种外围电路对存储器阵列200的存取是以对称方式(在该阵列的相对两侧)实现的,使得每侧的存取线和电路的密度减少一半。读取/写入电路230A和230B包括多个感测块300, 所述感测块允许并行读取存储器单元的页面或者对其进行编程。存储器阵列200可经由行解码器MOA和MOB由字线寻址以及经由列解码器M2A和M2B由比特线寻址。字线和比特线是控制线的示例。在典型实施例中,控制器244与一个或多个存储器管芯212包括在同一存储器器件210(例如可移动存储卡或封装)中。命令和数据经由线232在主机与控制器244之间传输并且经由线234在控制器与一个或多个存储器片212之间传输。
控制电路220与读取/写入电路230A和230B协作,以对存储器阵列200执行存储器操作。控制电路220包括状态机222、片上地址解码器2 和功率控制模块226。状态机222提供存储器操作的芯片级控制。片上地址解码器2M提供由主机或存储器控制器使用的地址与由解码器M0A、240B、M2A和M2B使用的硬件地址之间的地址接口。功率控制模块2 控制在存储器操作期间供应给字线和比特线的功率和电压。在一个实施例中,功
9率控制模块2 包括一个或多个电荷泵,所述电荷泵可形成比电源电压高的电压。控制电路220提供通向行解码器M0A、240B以及列解码器M2A和M2B的地址线ADDR。列解码器 242A.242B通过被标记为“数据I/O”的信号线向控制器244提供数据。
在一个实施例中,控制电路220、功率控制电路226、解码器电路224、状态机电路 222、解码器电路M2A、解码器电路M2B、解码器电路Μ0Α、解码器电路240B、读取/写入电路230A、读取/写入电路230B和/或控制器244中的一个或其任何组合可以被称为一个或多个管理电路。该一个或多个管理电路执行本文描述的处理。
图4描述存储器单元阵列200的示例性结构。在一个实施例中,存储器单元阵列划分为大量的存储器单元块(例如,块0-1-23,或另一数目的存储器单元块)。对于闪速存储器系统,通常,块是擦除的单位。也就是说,每个块包含被一起擦除的最小数量的存储器单元。也可以使用其他擦除单位。
块包含可通过比特线(例如,比特线BL0-BL69,623)和字线(WL0,WLl, WL2, WL3) 访问的NAND串集合。图4示出串联以形成NAND串的四个存储器单元。尽管图中示出在每个NAND串中包含4个单元,但是可以使用更多或更少的单元(例如,在NAND串上可使用 16,32,64,128或其它数量的存储器单元)。NAND串的一个端子通过(连接至选择栅极漏极线SGD的)漏极选择栅极连接至对应的比特线,而另一个端子通过(连接至选择栅极源极线SGS的)源极选择栅极连接至源极线。
每个块通常划分为多个页面。在一个实施例中,页面是编程的单位。也可以使用其它的编程单位。通常,在一行存储器单元中存储一个或多个页面的数据。例如,在连接至共同字线的存储器单元中可存储一个或多个数据页面。页面可存储一个或多个扇区。扇区包括用户数据和开销数据(也称为系统数据)。开销数据通常包括头部信息和从扇区的用户数据计算出的纠错码(ECC)。当数据被编程到阵列中时,控制器(或其它部件)计算ECC, 并且当从阵列中读取数据时也对ECC进行检查。或者,ECC和/或其它开销数据存储在与其所属的用户数据不同的页面或甚至不同的块中。用户数据扇区通常是512字节,对应于磁盘驱动器中扇区的大小。大量的页面形成块,例如为从8个页面直至32、64、1观或更多个页面中的任何数量。也可以使用不同大小的块、页面和扇区。另外,块可具有多于或少于 696 个比特线。
图5是单个感测块300的框图,该感测块被分区为核心部分(称为感测模块480) 和公共部分490。在一个实施例中,关于每一比特线具有单独的感测模块480且关于多个感测模块480的集合具有一个公共部分490。在一个示例中,感测块将包括一个公共部分490 和八个感测模块480。在组中的每个感测模块将经由数据总线472与关联的公共部分通信。 在美国专利申请公布2006/0140007中具有一个示例,该申请通过引用全部并入本文。
感测模块480包括感测电路470,其确定连接的比特线中的传导电流是大于还是小于预定电平。在一些实施例中,感测模块480包括通常称为感测放大器的电路。感测模块480还包括比特线锁存器482,其用于设置关于所连接的比特线的电压状况。例如,比特线锁存器482中锁存的预定状态将导致所连接的比特线被拉到指出编程禁止的状态(例如 Vdd),以锁定存储器单元不被编程。公共部分490包括处理器492、数据锁存器494的集合和耦合在数据锁存器494的集合与数据总线420之间的I/O接口 496。处理器492执行计算。例如,其功能之一在于,确定感测到的存储器单元中存储的数据,并且将确定的数据存储在数据锁存器的集合中。数据锁存器494的集合用于在读取操作期间存储由处理器492 确定的数据比特。其还用于在编程操作期间存储从数据总线420导入的数据比特。导入的数据比特代表要被编程到存储器中的写入数据。I/O接口 496在数据锁存器494与数据总线420之间提供接口。
在读取或感测期间,系统的操作受状态机222控制,该状态机222控制将不同控制栅极电压供应给寻址到的存储器单元。随着遍历与存储器所支持的不同存储器状态对应的各预定控制栅极电压,感测模块480可在这些电压之一处跳变,并且将从感测模块480经由总线472向处理器492提供输出。此时,处理器492通过考虑感测模块的跳变事件以及关于从状态机通过输入线493施加的控制栅极电压的信息确定所得存储器状态。然后计算存储器状态的二进制编码并将所得数据比特存储在数据锁存器494中。在核心部分的另一实施例中,比特线锁存器482具有双重职责,既作为用于对感测模块480的输出进行锁存的锁存器,又作为如上所述的比特线锁存器。
可以想到,一些实现方式可包括多个处理器492。在一个实施例中,每一处理器 492包括输出线(图5中未示出),使得每一输出线是线或(wired-OR)在一起的。在一些实施例中,输出线在连接到线或的线之前被反转。因为接收该线或的线的状态机能够确定被编程的所有比特何时已达到期望电平,所以这种配置使得能够在编程验证处理期间快速确定编程处理何时已完成。例如,当每一比特均已达到其期望电平时,会向线或的线发送关于该比特的逻辑0(或数据1被反转)。当所有比特输出数据0(或反转的数据1)时,于是状态机获知要终止编程处理。在每一处理器与八个感测模块通信的实施例中,状态机可能 (在一些实施例中)需要八次读取线或的线,或者在处理器492中添加逻辑以累加关联的比特线的结果,使得状态机仅需读取线或的线一次。
数据锁存器栈494包含对应于感测模块的一组数据锁存器。在一个实施例中,针对每个感测模块480具有三个(或者四个或另一数量的)数据锁存器。在一个实施例中, 锁存器各自为一个比特。
在编程或验证期间,待编程的数据来自数据总线420并存储在数据锁存器494的集合中。在验证处理期间,处理器492相对于期望的存储器状态来监视被验证的存储器状态。当这二者吻合时,处理器492设置比特线锁存器482,从而使得该比特线被拉到指出编程禁止的状态。这样,即使耦合到该比特线的存储器单元在其控制栅极上受到编程脉冲,也能禁止该单元被进一步编程。在其它实施例中,处理器在初始时加载比特线锁存器482,且感测电路在验证处理期间将其设置为禁止值。
在一些实现方式中(但不要求),数据锁存器被实现为移位寄存器,从而其中存储的并行数据被转换为用于数据总线420的串行数据,反之亦然。在一个优选实施例中,与存储器单元的读取/写入块对应的所有数据锁存器可被链接在一起以形成块移位寄存器,从而数据块可通过串行传送而输入或输出。具体地说,调整一排读取/写入模块,从而其数据锁存器集合中的每一个会仿佛它们为整个读取/写入块的移位寄存器的一部分那样将数据依次移入或者移出数据总线。
在(1)2004年 3 月 25 日公开的题为 “Non-Volatile Memory And Method With Reduced Source Line Bias Errors”的美国专利申请公布 No. 2004/0057287,( 2004 年 6 月 10 日公开的题为“Non-Volatile Memory And Method with Improved Sensing”的美国专利申请公布No. 2004/0109357, (3)美国专利申请公布No. 20050169082,(4) 2005年4月5 臼提交的题为"Compensating for Coupling During Read Operations of Non-Volatile Memory” (发明人为Jian Chen)的美国专利公布No. 2006/0221692,以及(5)2005年12月沘日提交的题为 “Reference Sense Amplifier For Non-Volatile Memory”(发明人为 Siu Lung Chan和RauI-AdrianCernea)的美国专利申请公布No. 2006/0158947中具有关于读取操作和感测放大器的更多信息。所有这五个刚列出的专利文献通过引用而全部并入本文。
在成功编程过程(带有验证)结束时,存储器单元的阈值电压根据情况应当在被编程的存储器单元的阈值电压的一个或多个分布之内或者在被擦擦的存储器单元的阈值电压的分布之内。图6示出在每个存储器单元存储两比特数据时存储器单元阵列的示例性阈值电压分布(与数据状态对应)。但是在其它实施例中,对于每个存储器单元可使用多于两比特数据或少于两比特数据(例如,每个存储器单元三比特数据、四比特数据或更多比特的数据)。
图6示出关于被擦擦的存储器单元的第一阈值电压分布E。另外还示出关于被编程的存储器单元的三个阈值电压分布A、B、C。在一个实施例中,在分布E中的阈值电压是负值,而在分布A、B、C中的阈值电压是正值。图6中每个不同的阈值电压分布与数据比特集合的预定值对应。在被编程至存储器单元中的数据与该存储器单元的阈值电压电平之间的特定关系取决于为存储器单元采用的数据编码方案。例如,第6,222,762号美国专利与美国专利申请公布No. 2004/0255090描述了用于多状态闪速存储器单元的多种数据编码方案,该专利与专利申请公布通过引用而全部并入本文。在一个实施例中,使用格雷码分配将数据值分配给阈值电压范围,使得如果浮置栅极的阈值电压错误地偏移至其相邻的物理状态,仅有一个比特会受影响。在一个示例中,将“11”分配给阈值电压范围E (状态E),将 “10”分配给阈值电压范围A (状态A),将“00”分配给阈值电压范围B (状态B),以及将“01” 分配给阈值电压范围C(状态C)。但是,在其它实施例中未使用格雷码。尽管图6示出四个状态,但是本发明也可以与其它多状态结构、包括多于四个状态或少于四个状态的多状态结构一起使用。
图6示出用于从存储器单元读取数据的三个读取参考电压Vra、Vrb和Vrc。通过测试指定存储器单元的阈值电压是在Vra、Vrb和Vrc之上还是之下,系统能够确定该存储器单元所处的状态。图6还示出三个验证参考电压Vva、Vvb和Vvc。在将存储器单元编程至状态A时,系统会测试这些存储器单元是否具有大于或等于Vva的阈值电压。在将存储器单元编程至状态B时,系统会测试这些存储器单元是否具有大于或等于Vvb的阈值电压。 在将存储器单元编程至状态C时,系统会测试这些存储器单元是否具有大于或等于Vvc的阈值电压。在一个称为全序列编程的实施例中,能够将存储器单元从被擦擦状态E直接编程至任一被编程状态A、B或C。例如,可首先擦擦要进行编程的一组存储器单元,使得该组中的所有存储器单元处于被擦除状态E。然后,使用编程处理将存储器单元直接编程至状态 A、B或C。虽然有些存储器单元从状态E被编程至状态A,但是其他存储器单元可从状态E 被编程至状态B和/或从状态E被编程至状态C。
图7示出对多状态存储器单元进行编程的双阶段技术的一个示例,该多状态存储器单元存储用于两个不同页面(即,下页面和上页面)的数据。其中示出了四个状态状态E (11)、状态A(10)、状态B (00)和状态C(01)。对于状态E,两个页面均存储“ 1”。对于状态 A,下页面存储“0”而上页面存储“1”。对于状态B,两个页面均存储“0”。对于状态C,下页面存储“1”而上页面存储“0”。注意,尽管为每个状态指定了特定的比特模式,但是也可以指定不同的比特模式。在第一编程阶段,根据要被编程至下逻辑页面中的比特,设置存储器单元的阈值电压电平。如果该比特为逻辑“1”,则由于各存储器单元因为已被预先擦除而处于适当状态,所以阈值电压不变。但是,如果要被编程的比特是“0”,则将存储器单元的阈值电压提升至状态A,如箭头504所示。至此,第一编程阶段结束。
在第二编程阶段,根据被编程至上逻辑页面的比特,设置存储器单元的阈值电压电平。如果上逻辑页面比特要存储逻辑“ 1 ”,则由于存储器单元处于状态E和状态A之一 (这取决于下页面比特的编程),其中状态E和状态A均携带为“ 1,,的上页面比特,所以不进行编程。如果上页面比特要成为逻辑“0”,则使阈值电压偏移。如果第一阶段导致存储器单元保持在被擦除状态E,则在第二阶段中对存储器单元编程,使得阈值电压被提升至状态C内,如箭头502所示。如果存储器单元已由于第一编程阶段而被编程至状态A,则存储器单元在第二阶段中被进一步编程,使得阈值电压被提升至状态B内,如箭头506所示。第二阶段的结果是在未改变下页面的数据的情况下将存储器单元编程至被指定来将逻辑“0” 存储于上页面的状态。
在一个实施例中,可将系统建立成如果写入足够数据以填满整个页面,则执行全序列写入。如果对于完整的页面而言未写入足够的数据,则编程处理可用接收的数据执行下页面编程。当接收到后续数据时,系统于是会对上页面编程。在又一实施例中,系统能够在开始时以对下页面编程的模式写入,并在后续接收到足够数据来填满整个(或大部分) 字线的存储器单元时转换成全序列编程模式。在美国专利申请2006/0126390中公开了这样的实施例的更多细节,该专利申请通过引用全部并入本文。
图8A-图8C描述用于对非易失性存储器编程的另一多阶段编程处理。对于任一特定存储器单元,通过在针对在先页面写相邻存储器单元之后关于特定页面写该特定存储器单元,图8A-图8C的处理降低浮置栅极与浮置栅极的耦合。在图8A-图8C所示处理的实现方式的一个示例中,非易失性存储器单元使用四个数据状态在每个存储器单元存储两比特数据。例如,假设状态E为被擦除状态而状态A、B和C为被编程状态。状态E存储数据11。状态A存储数据01。状态B存储数据10。状态C存储数据00。由于在相邻的状态 A与B之间两个比特均发生变化,所以这是非格雷码编码的示例。也可以使用将数据编码至物理数据状态的其他方式。每个存储器单元存储两个数据页面。出于标记目的,这些数据页面将被称为上页面和下页面;但是,也可以赋予这些页面以其他标记。关于图8A至图8C 所示处理的状态A,上页面存储比特0而下页面存储比特1。关于状态B,上页面存储比特1 而下页面存储比特0。关于状态C,上、下页面均存储比特数据0。图8A至图8C所示编程处理为双阶段编程处理;但是,图8A至图8C所示处理也可用于实现三阶段处理、四阶段处理, 等等。在第一阶段中,对下页面进行编程。如果下页面是要保持数据1,则存储器单元状态保持状态E。如果该数据要被编程为0,则升高存储器单元的电压阈值,使得存储器单元被编程至状态B’。因此,图8A示出将存储器单元从状态E编程至状态E’。图8A所示的状态 B’是中间状态B ;因此,验证点被示为Vvb’,其低于Vvb。
在一个实施例中,在存储器单元从状态E被编程至状态B ’后。于是相对于其下页面对其在NAND串中(在字线WLn+Ι上的)的相邻存储器单元进行编程。在对相邻存储器单元编程后,浮置栅极与浮置栅极的耦合作用可提升前一被编程的存储器单元的表观阈值电压。这会具有将状态B’的阈值电压分布展宽至如图8B中的阈值电压分布520所示的作用。当对上页面编程时,阈值电压分布的这种明显展宽会得到补偿。
图8C示出对上页面编程的处理。如果存储器单元处于被擦除状态E且上页面要保持处于1,则存储器单元会保持于状态E。如果存储器单元处于状态E且其上页面数据要被编程至0,则会提升存储器单元的阈值电压使得存储器单元处于状态A。如果存储器单元处于中间阈值电压分布520中且上页面数据要保持于1,则存储器单元会被编程至最终状态B。如果存储器单元处于中间阈值电压分布520中且上页面数据要变为数据0,则会提升存储器单元的阈值电压使得存储器单元处于状态C。因为仅相邻存储器单元的上页面编程会对指定存储器单元的表观阈值电压有作用,所以图8A至图8C的处理会降低浮置栅极与浮置栅极的耦合作用。交替状态编码的示例是在上页面数据为1时从分布520移至状态C, 而在上页面数据为0时移至状态B。
尽管图8A至图8C提供关于四个数据状态和两个数据页面的示例,但是图8A至图 8C指出的构思可应用于具有多于或少于四个状态以及除两个以外的页面的其他实现。在第7,196,928号美国专利中具有更多关于图8A至图8C所示编程处理的细节,该专利通过引用并入本文。
图9A至图9C提供多阶段编程处理的另一示例。图9A示出四个阈值电压分布E、 A、B和C。阈值电压分布E表示被擦除的存储器单元。阈值电压分布A、B和C表示被编程的存储器单元。在初始时,所有存储器单元被擦除至阈值电压分布E。在第一编程阶段中, 要被编程至阈值电压分布C的存储器单元被编程至阈值电压分布C。图9B示出第一编程阶段。在第二编程阶段中,要被编程至阈值电压分布A和B的存储器单元被编程至适当的分布,如图9C所示。
在图9A至图9C所示处理的一些实施例中,在针对第一存储器单元集合执行第一阶段之后且在针对该第一存储器单元集合执行第二阶段之前,对第二存储器单元集合执行该第一阶段。在一个实现中,第一存储器单元集合连接至第一字线,且第二存储器单元集合连接至第二字线。
图IOA至图IOD示出对连接至共同字线的存储器单元编程且能够以与图9A至图 9C所示处理类似的方式使用的另一多阶段编程处理。图IOA至图IOD所示处理的第一阶段包括首先将目标为阈值电压分布B和C的存储器单元编程至中间阈值电压分布B’,如图 IOA中的阈值电压分布530所示。然后,对相邻字线执行该第一阶段,这使得该中间阈值电压分布由于来自邻近浮置栅极的耦合而展宽(见图10B)。第二编程阶段包括对目标为从阈值电压分布B’到阈值电压分布C的存储器单元进行编程(见图10C)。该编程处理的第三阶段包括对存储器单元从分布E编程至分布A以及从分布B’编程至分布B (见图10D)。
图IlA和图IlB描述另一个双阶段编程处理。在第一阶段中,以全序列将存储器单元从被擦除状态E同时编程至中间状态A*、B*和Cf(见图11A)。在第二阶段中,处于中间状态k*的存储器单元被编程至状态A,而处于中间状态B*的存储器单元被编程至状态B,并且处于中间状态Cf的存储器单元被编程至状态C(见图11B)。关于状态A、B和C的验证点 Vva, Vvb和Vvc高于状态A*、B*和C*的验证点。因此,在第一阶段期间,第一存储器单元集合被编程至相比最终目标阈值电压更低的较低阈值电压。在第二编程阶段期间,该第一存储器单元集合将其阈值电压提升至最终目标阈值电压。在一个实施例中,在针对第一存储器单元集合的第一阶段之后,且在针对第一存储器单元集合的第二阶段之前,对与第一存储器单元集合连接至相同字线或者与第一存储器单元相比连接至不同字线的第二存储器单元集合执行该第一阶段。在一个示例中,第一阶段为粗略阶段,而第二阶段为精细阶段, 因此,中间状态IC、B*和Cf可比最终目标状态A、B和C更宽。
图12A至图12D公开用于对非易失性存储器编程的三阶段处理。图12A至图12D 的处理是针对每个存储器单元存储三比特数据的非易失性存储器单元执行的。在编程之前,所有存储器单元被擦擦至状态SO (见图12A)。图12B示出第一阶段,该第一阶段包括将最终要被编程至状态S4-S7的存储器单元编程至状态S4’。图12C示出第二阶段,该第二阶段包括从状态S4’编程至状态S4-S7。在一个实施例中,由于来自在第一阶段与第二阶段之间被部分或全部编程的、相邻字线上的存储器单元的耦合,在图2C中S4’更宽。图 12D示出第三阶段,该第三阶段包括从状态SO编程至状态S1、S2和S3。当根据图12A至图 12D的处理对第一存储器单元集合编程时,在关于第一存储器单元集合的各阶段之间,可全部或部分地对其他存储器单元(与第一存储器单元集合连接至相同字线或连接至一个或多个不同字线的存储器单元)编程。
图13A至图13D示出用于对每个存储器单元存储四比特数据的存储器单元编程的三阶段编程处理。因此,最终的存储器单元集合可被分成16个阈值电压分布。在三阶段编程处理的第一阶段(图13A至图13B)期间,存储器单元被编程至四个中间阈值电压分布 E2、A2、B2和C2之一。于是在第二阶段期间,存储器单元从这四个中间阈值电压分布被编程至16个分布O-F (图1 至图13C)。在第三阶段(图13C至图13D)中,将这16个分布 O-F中的每一个紧缩。在根据图13A至图14D的处理对第一存储器单元集合编程时,在关于第一存储器单元集合的各阶段之间,可全部或部分地对其他存储器单元(与第一存储器单元集合连接至相同字线或连接至一个或多个不同字线的存储器单元)编程。
图14是描述用于操作非易失性存储器(诸如图3的系统,或者其他系统)的处理的一个实施例的流程图。在步骤600中,接收数据编程请求。该请求可来自主机,另一器件或控制器。该请求可在控制器、控制电路、状态机或其他器件接收。响应于该请求,控制器、控制电路、状态机或其他器件会在步骤602中确定使用哪个闪速存储器单元块来存储数据。在步骤604中,使用任一上述编程处理(或其他编程处理)将数据编程至所确定的块中。在步骤606中,一次或多次读取所编程的数据。因为在步骤604与步骤606之间可经历不可预知的时长,所以在这两个步骤之间具有虚线,并且步骤606并非是响应于步骤604 而执行的,而是响应于读取该数据的请求或其他事件而执行的。
图15是描述用于对块中的存储器单元进行编程的编程处理的流程图。图15是图 14的步骤604的一个实施例。在步骤632中,在编程之前(以块为单位或以其他单位)擦除存储器单元。在一个实施例中,通过在源极和比特线浮置时将P阱提升至擦除电压持续足够的一段时间并且将所选择的块的字线接地,擦除存储器单元。因此,所选择的存储器单元的隧道氧化物层被施加强电场,并且随着浮置栅极的电子通常通过i^owler-Nordheim隧穿机制被发射到衬底侧,所选择的存储器单元被擦除。随着电子从浮置栅极被传送到P阱区域,被选择的存储器单元的阈值电压降低。可以对整个存储器阵列、单独的块或另一单位的存储器单元执行擦除。也可以使用其他的擦除技术。在步骤634中,执行软编程以将被擦除的存储器单元的阈值电压分布变窄。由于该擦除处理,一些存储器单元可处于比所需更深的擦除状态。软编程可施加编程脉冲以将被更深擦除的存储器单元的阈值电压移至仍处于该擦除状态的有效范围内的较高阈值电压。在步骤636中,如本文所述对块中的存储器单元编程。图15所示处理的执行可由状态机、控制器或者状态机与控制器的组合来指导。 例如,控制器可向状态机发出命令和数据以对该数据编程。作为响应,状态机可操作上述电路以执行编程操作。
图16是说明用于对连接至共同字线的存储器单元编程的处理的一个实施例的流程图。图16在图15的步骤636期间执行。在一个实施例中,图16的处理用于对连接至共同字线的所有存储器单元编程。在其它实施例中,图16的处理用于对连接至共同字线的存储器单元的子集进行编程。因此,对于包括多个字线的存储器块,图15的步骤636包括针对每个字线执行图16的处理一次或多次,以对块中的存储器单元编程。
在一个示例中,对存储器单元根据包括如下的顺序进行编程对连接至WLO的存储器单元编程,然后对连接至WLl的存储器单元编程,然后对连接至WL2的存储器单元编程,等等。也可以使用其它顺序。
在其它实施例中,对连接至第一字线的第一存储器单元集合进行多阶段编程处理的一部分阶段,接着对连接至第二字线的第二存储器单元集合进行该多阶段编程处理的一部分阶段,接着可对连接至第一字线的第一存储器单元集合进行该多阶段编程处理的一个或多个其它阶段。在这样的实施例中,在图15的步骤636期间,针对该多阶段编程处理的每个阶段,每存储器单元集合执行图16的处理一次。
在图16的步骤660中,系统会读取所存储的、初始编程脉冲的幅值(在下文中称为“Vpgm_VStart”,其可能基于前一编程值或默认值)的标识。如上所述,编程处理包括 每个脉冲的幅值增加的编程脉冲集合。例如,图17示出包括编程脉冲集合的编程电压的示例,其初始编程脉冲的幅值由Vpgm_VStart表示,而代表脉冲之间的增量的步长大小由 AVpgm表示。在步骤660中读取第一脉冲Vpgm_VStart的幅值。在一个实施例中,根据一个或多个在先编程处理确定该幅值。如果这是首次进行编程,则可从寄存器读取Vpgm_VStart 的默认值。初始编程脉冲的幅值Vpgm_VStart也可以存储在闪速存储器阵列、ROM或其他地方。
图16的处理使用两个不同的步长大小AVpgml和AVpgm2。在一个实施例中, AVpgml大于AVpgm2。通过这种方式,图16的编程处理以较大的步长大小AVpgml开始, 使得编程的执行较快。当预定数量的存储器单元达到用于图16所示处理的相应性能的中间结果或条件时,则针对图16所示处理的剩余部分,所述处理切换至较小的步长大小以更加精确地继续将存储器单元编程至关于图16所示处理的特定性能的目标条件。例如,图18 示出包括编程脉冲集合的编程电压,该编程脉冲集合具有初始编程脉冲幅值Vpgm_VStart, 并且在初始时具有步长大小AVpgml。在第6个脉冲之后,步长大小变为AVpgm2。在一个实施例中,如下所述,未预先确定步长大小发生改变时的脉冲。在预定数量的存储器单元达到中间条件(从而引起步长大小发生改变)时的编程脉冲的值用于精细调整初始编程脉冲的幅值Vpgm_VStart,用于进一步编程。也就是说,存储器单元的当前行为(例如,当该预定数量的存储器单元达到中间条件时)用于设置初始编程脉冲的幅值以在不引起过度编程的情况下增加编程处理的速度。在一个实施例中,AVpgml等于AVpgm2。
回到图16,在步骤662中,关于该特定页面或字线加载数据。在步骤664中,将第一编程脉冲的幅值设置为在步骤660中读取的Vpgm_VStart的值。另外,将编程步长大小 AVpgm设置为AVpgml,且编程计数器PC被初始化为零。在步骤666中,施加第一编程脉冲。如上所述,在一个实施例中,通过图16所示处理进行编程的存储器单元被连接至共同字线,从而在它们各自的控制栅极接收相同的编程脉冲。在编程脉冲之后,在步骤668中对照电压Vvstart验证存储器单元。该电压值Vvstart是根据器件特征选择的,使得在一个 (或其他不同数量的)编程脉冲之后经过Vvstart的任何存储器单元被认为是快速存储器单元。Vvstart的阈值电压电平是上述中间条件的一个示例。如果不到N个被进行编程的存储器单元具有大于Vvstart的阈值电压(步骤670),则在步骤671中,确定编程计数器是否小于20 (或其他适当的值)。如果编程计数器不小于20,则已进行了太多的重复,且编程处理已失败。如果编程计数器小于20(或其他适当的值),则在步骤672中,编程电压递增Δ Vpgml,且编程计数器PC递增1。注意,在一些实施例中,可能优选将编程计数器增加不同于1的值,以反映更大的步长大小。例如,如果较大的步长大小是较小的步长大小的两倍大,则循环计数器可增加2。在步骤672后,所述处理环回到步骤666并且施加下一编程脉冲。重复步骤666-672,直到至少N个存储器单元具有大于Vvstart的阈值电压。在一个实施例中,N的值可以是15个存储器单元,在其它实施例中,N可以小于15(例如1或另一个数)或大于15。在一些实现中,可使用器件特征或其它仿真来确定适当的N值。但是,N 的值可以是比进行编程的存储器单元总数更小的数。
在步骤670中,当确定N个或更多存储器单元具有大于Vvstart的阈值电压时, 则所述处理进到步骤678,在该步骤678,将(前一)刚刚施加的编程脉冲的幅值存储在寄存器、闪速存储器位置中或其他地方,以用作用于后续编程的初始编程脉冲的幅值Vpgm_ vstart或者用于确定用于后续编程的初始编程脉冲的幅值Vpgm_VStart。在一个实施例中,将刚刚施加的编程脉冲的幅值用作用于后续编程的初始编程脉冲的幅值Vpgm_VStart。 在另一实施例中,将偏移量(正偏移量或负偏移量)加到刚刚施加的编程脉冲的幅值上以确定用于后续编程的初始编程脉冲的幅值Vpgm_VStart。在一些实施例中,在步骤678中存储刚刚施加的编程脉冲的幅值,稍后施加偏移量。在其它实施例中,对刚刚施加的编程脉冲的幅值使用该偏移量,并且在步骤678中存储该结果。在其它实施例中,关于用于后续编程的初始编程脉冲使用的值Vpgm_VStart基于刚刚施加的编程脉冲的幅值的数学函数或者刚刚施加的编程脉冲的序列号。所有上述这些实施例中,与刚刚施加的编程脉冲相关联地确定用于后续编程的初始编程脉冲的幅值Vpgm_VStart。回到图17,如果在第6个编程脉冲之后,确定出N个存储器单元具有大于Vvstart的阈值电压,则在步骤678中存储第6个编程脉冲(V_at_VStart)的幅值或该脉冲的其它相关指标(带偏移量会不带偏移量)。
在步骤680中,编程计数器PC被重置为0,并且所述处理进到步骤692,此时,对照用于不同编程状态的不同目标验证电平,验证所有的存储器单元。如果所有存储器单元经验证已达到其期望目标电平(步骤682),则所述处理完成并且状态被设为“通过”(步骤 684)。在一些实施例中,如果并非所有存储器单元都达到其期望目标,该编程处理也可能成功完成。例如,在一些实施例中,如果几乎所有存储器单元都达到其期望的目标(例如,不超过预定数量的存储器单元来达到其目标),则该处理成功。未达到其目标的存储器单元可在读取操作期间使用纠错来纠正,或者,如果太多的存储器单元无法达到其目标,则数据可能被编程至存储器阵列中的其它地方。
如果并非所有存储器单元经验证(其很可能是首次执行步骤692),则已达到各自的目标阈值电压的存储器单元被锁定不进行进一步编程。在一个实施例中,如本领域所知的那样,通过施加足够大的比特线电压(例如Vdd),锁定存储器单元不对其进一步编程。
在一个实施例中,Vvstart被设置为足够低,使得当步骤670由于多于N个存储器单元已达到Vvstart而通过且所述处理从步骤670进入步骤678时,在施加至少一个其它附加编程脉冲之前,没有一个存储器单元已达到其目标电平。通过这种方式,在任何存储器单元被锁定不进行编程之前,编程步长大小AVpgm从AVpgml变为AVpgn^。
如果并非所有存储器单元经验证,则在步骤686中确定编程计数器是否小于 20(或另一适当的值)。如果编程计数器为20(或任何其他适当的值)或更大,则已执行太多的步骤并且所述处理失败(步骤694)。如果编程计数器仍小于20(或另一其他适当的值)或更大,则在步骤688中,编程电压递增AVpgm2且编程计数器递增1。在步骤690中, 施加另一编程脉冲并且所述处理进入步骤692,对存储器单元进行验证。在一些实施例中, 在步骤688中编程计数器可递增不同于1的值,以考虑步长大小的差异。注意,AVpgm2是比AVpgml更小的步长大小。因此,与步骤690-688的循环期间较慢的编程电压Vpgm上升相比,在步骤666-672的循环期间,编程电压Vpgm增加快得多。
在一个实施例中,在步骤680中不重置编程计数器。在这样的实施例中,可改变步骤680中的测试,以确定编程计数器是否比高于20的数目小。
在一个示例中,图16所示处理与图6的全序列编程方案一起使用。在该实施例中, Vva可用作Vvstart,或者小于Vva的值可用作Vvstart。
存在以如下方式对第一存储器单元集合进行操作的多阶段编程处理,在该方式中,在对第一存储器单元集合进行操作的多阶段编程处理的阶段之间,可对第二存储器单元集合进行编程。但是,在一个实施例中,一旦针对一组存储器单元开始图16的处理,则在图16的处理结束之前,不会对其他存储器单元编程。
在步骤692的验证操作和步骤606的读取操作期间,选择的字线连接至一电压,该电压的电平是针对每个读取操作和验证操作而特别指定的(例如,参见图6的读取比较电平Vra、Vrb和Vrc,图6的验证电平Vva、Vvb和Vvc),以确定所关注的存储器单元的阈值电压是否已达到这样的电平。在施加字线电压后,测量存储器单元的传导电流,以确定存储器单元是否相应于施加至字线的电压而导通。如果测量出该传导电流大于特定值,则认为存储器单元导通且施加至字线的电压大于存储器单元的阈值电压。如果测量出传导电流不大于该特定值,则认为存储器单元未导通且施加至字线的电压不大于存储器单元的阈值电压。
存在许多方式用于在读取操作或验证操作期间测量存储器单元的传导电流。在一个示例中,通过存储器单元对感测放大器中的专用电容器放电或充电的速率,测量存储器单元的传导电流。在另一示例中,选中的存储器单元的传导电流使得(或无法使得)包括该存储器单元的NAND串使相应的比特线放电。在一段时间后测量该比特线上的电压, 以查看该比特线是否已被放电。应当注意,这里描述的技术能够与本领域中已知的用于验证/读取的不同方法一起使用。在以下通过引用而全部并入本文的专利文献中有更多关于验证/读取的信息(1)美国专利申请公布No. 2004/0057287 ; (2)美国专利申请公布 No. 2004/0109357 ; (3)美国专利申请公布No. 2005/0169082 ;以及(4)美国专利申请公布 No. 2006/0221692。上述擦除、读取和验证操作可根据本领域已知的技术执行。因此,本领域技术人员可修改这里描述的很多细节。也可以使用本领域中已知的其他擦除、读取和验证技术。
图19-26是说明用于实现图15的步骤636、对存储器单元编程、使用图16的处理的不同实施例的流程图。
图19描述用于实现多阶段编程处理(或者多个编程处理)的实施例,该多阶段编程处理包括任一上述多阶段编程处理。在图19的实施例中,Vpgm_VStart在多阶段编程处理的第一阶段期间更新,并且同一多阶段编程处理的其它阶段使用来自第一阶段的Vpgm_ Vstart0在步骤702中,执行该多阶段编程处理的第一阶段,包括执行根据图16所示的处理。如上所述,执行图16的处理包括在图16的步骤678中更新Vpgm_VStart的值。在步骤704,执行该多阶段编程处理的第二阶段,包括执行图16的处理,其中用于初始编程脉冲的幅度Vpgm_VStart的值为(或者基于)在步骤702中更新和存储的值。在执行步骤704 时,修改图16的处理以省略步骤678,使得如果多于N个存储器单元具有大于Vvstart的阈值电压,则所述处理从步骤670进入步骤692 (或者,在一些实施例中,进入步骤680)。通过这种方式,在步骤704的执行期间不更新Vpgm_VStart。在步骤706中,执行多阶段编程处理的第三阶段,包括执行图16的处理,其中用于初始编程脉冲的幅度Vpgm_VStart的值为 (或者基于)在步骤702中更新和存储的值。在执行步骤706时,修改图16的处理以省略步骤678,使得如果多于N个存储器单元具有大于Vvstart的阈值电压,则所述处理从步骤 670进入步骤692 (或者,在一些实施例中,进入步骤680)。通过这种方式,在步骤706的执行期间不更新Vpgm_vstart。
在步骤708中,执行多阶段编程处理的第四阶段,包括执行图16的处理,其中用于初始编程脉冲的幅度Vpgm_VStart的值为(或者基于)在步骤702中更新和存储的值。在执行步骤708时,修改图16的处理以省略步骤678,使得如果多于N个存储器单元具有大于Vvstart的阈值电压,则所述处理从步骤670进入步骤692 (或者,在一些实施例中,进入步骤680)。通过这种方式,在步骤708的执行期间不更新Vpgm_VStart。在图19的流程图中,在多阶段编程处理中示出四个阶段。但是,通过增加另外的步骤例如步骤708,图19的处理能够扩展至多于四个阶段。或者,通过仅仅执行步骤702、704和706,图19的处理能够与具有仅仅三个阶段的多阶段编程处理一起使用。通过仅仅执行步骤702和704,图19的处理能够与具有仅仅两个阶段的多阶段编程处理一起使用。应当注意,在一些实施例中,可针对多阶段编程处理的每个阶段改变AVpgn^的值。在其它实施例中,每个阶段使用相同的AVpgm2。类似地,在一些实施例中,可针对多阶段编程处理的每个阶段改变AVpgml的值。在其它实施例中,每个阶段使用相同的AVpgrnl。
在另一实施例集合中,步骤702包括执行图16所示处理并且为Vpgm_VStart存储新的值。但是,步骤704、706和708会执行图19A的处理,而不是图16的处理。图19A与图16类似,但是不执行步骤666、668、670、671、672、678和680。步骤660和662与图16中的相同。在步骤664a中,Δ Vpgm设置为Δ Vpgm2,然后所述处理进入步骤690并且施加编程脉冲。步骤682、684、686、688、690、692和694与图16中的相同。利用该实施例,由于早已找到最优Vpgm_VStart,所以不存在用于搜索最优Vpgm_VStart的时间。注意,在一些实施例中,可针对多阶段编程处理的每个阶段改变AVpgn^的值。在其它实施例中,每个阶段使用相同的AVpgm2。
在一个示例中,图19的处理与图7的编程方案一起使用。在该实施例中,Vra或低于Vva的另一个值可用作Vvstart。当图19的处理与图8的编程方案一起使用时,可将低于Vvb’的值用作Vvstart。当将图19的处理与图9A-9C的编程方案一起使用时,在将数据编程至C状态时可将Vva、低于Vva的值或低于Vvc的值用作Vvstart。当将图19的处理与图10A-10D的编程方案一起使用时,在将数据编程至B’时可将低于Vvb’的值用作 Vvstart0当将图19的处理与图11A-11B的编程方案一起使用时,在将数据编程至A*、B*或 C*时可将位于或低于Vvf的值用作Vvstart。当将图19的处理与图12A-12E的编程方案一起使用时,在将数据编程至S4’时可将低于Vvs4’的值用作Vvstart。当将图19的处理与图13A-13D的编程方案一起使用时,在将数据编程至A2、B2和C2时可将位于或低于VvA2 的值用作Vvstart。另外,也可使用其他用于Vvstart的值。这些Vvstart值也可与以下描述的其他实施例一起使用。
图20描述用于实现多阶段编程处理(或者多个编程处理)的实施例,该多阶段编程处理包括任一上述多阶段编程处理。在图20的实施例中,Vpgm_VStart在多阶段编程处理的每一阶段期间更新。在步骤724中,执行该多阶段编程处理的第一阶段,包括执行图16 的处理。如上所述,执行图16的处理包括在图16的步骤678中更新Vpgm_VStart的值。 在步骤726中,执行该多阶段编程处理的第二阶段,包括执行图16的处理,其中用于Vpgm_ vstart的值为(或者基于)在步骤724中更新和存储的值。步骤726可包括更新图16的步骤678中的Vpgm_VStart的值。在步骤728中,执行多阶段编程处理的第三阶段,包括执行图16的处理,其中用于Vpgm_VStart的值为(或者基于)在步骤726中更新和存储的值。 步骤728可包括在图16的步骤678中更新Vpgm_VStart的值。在步骤730中,执行多阶段编程处理的第四阶段,包括执行图16的处理,其中用于Vpgm_VStart的值为(或者基于)在步骤728中更新和存储的值。步骤730可包括在图16的步骤678中更新Vpgm_VStart的值。
在图20的流程图中,在多阶段编程处理中示出四个阶段。但是,通过增加与步骤 730类似的另外的步骤,图20的处理能够扩展至多于四个阶段。或者,通过仅仅执行步骤 724,726和728,图20的处理能够与具有仅仅三个阶段的多阶段编程处理一起使用。通过仅仅执行步骤724和726,图20的处理能够与具有仅仅两个阶段的多阶段编程处理一起使用。
图21描述用于实现多编程处理的另一实施例。在图21的实施例中,在对第一页面编程时更新Vpgm_VStart,并且对以后页面的编程使用在对第一页面编程时确定的Vpgm_ vstart.在步骤760中,使用图16的处理对第一数据页面编程,包括在图16的步骤678中更新Vpgm_VStart的值。在步骤762中,使用图16的处理对第二页面编程,其中用于Vpgm_ vstart的值为(或者基于)在步骤760中更新和存储的值。在执行步骤762时,修改图16 的处理以省略步骤678,使得如果多于N个存储器单元具有大于Vvstart的阈值电压,则所述处理从步骤670进入步骤692。通过这种方式,在步骤762的执行期间不更新Vpgm_ vstart.在步骤764中,使用图16的处理对第三页面编程,其中用于Vpgm_VStart的值为(或者基于)在步骤760中更新和存储的值。在执行步骤764时,修改图16的处理以省略步骤678,使得如果多于N个存储器单元具有大于Vvstart的阈值电压,则所述处理从步骤 670进入步骤692。通过这种方式,在步骤764的执行期间不更新Vpgm_VStart。如果需要对更多的数据页面编程,则以与步骤764类似的步骤继续所述处理,但是是对不同的数据页面进行操作。如果仅仅对两个数据页面编程,则仅仅需要执行步骤760和762。在另一实施例中,通过使用来自步骤760的Vpgm_VStart,步骤762、764和用于其它页面的步骤基于图19A的处理(而不是上述经修改的图16的版本)进行编程。
图22描述用于实现多编程处理的另一实施例。在图19的实施例中,在每个数据页面的编程期间更新Vpgm_VStart。在步骤782中,使用图16的处理对第一数据页面编程, 包括在图16的步骤678中更新Vpgm_VStart的值。在步骤784中,对第二数据页面编程, 包括执行图16的处理,其中,用于Vpgm_VStart的值为(或者基于)在步骤782中更新和存储的值。步骤784可包括在图16的步骤678中更新Vpgm_VStart的值。在步骤786中, 对第三数据页面编程,包括执行图16的处理,其中,用于Vpgm_VStart的值为(或者基于) 在步骤784中更新和存储的值。步骤786可包括在图16的步骤678中更新Vpgm_VStart 的值。如果需要对更多的数据页面编程,则以与步骤786类似的步骤继续所述处理,但是是对不同的数据页面进行操作。如果仅仅对两个数据页面编程,则仅仅需要执行步骤782和 784。
图23描述用于实现多个编程处理的实施例。在图23的实施例中,在对连接至第一字线的存储器单元编程时更新Vpgm_VStart,且对其它字线上的存储器单元的编程使用在对连接至第一字线的存储器单元编程时确定的Vpgm_VStart。在步骤800中,使用图16 的处理对连接至第一字线的存储器单元编程,包括在图16的步骤678中更新Vpgm_VStart 的值。在步骤802中,使用图19A的处理或图16的处理对连接至第二字线的存储器单元编程,其中,用于Vpgm_VStart的值为(或者基于)在步骤800中更新和存储的值。在使用图 16的处理执行步骤802时,修改图16的处理以省略步骤678,使得如果多于N个存储器单元具有大于Vvstart的阈值电压,则所述处理从步骤670进入步骤692。通过这种方式,在步骤802的执行期间不更新Vpgm_VStart。在步骤804中,使用图19A的处理或图16的处理对连接至第三字线的存储器单元编程,其中,用于Vpgm_VStart的值为(或者基于)在步骤800中更新和存储的值。在使用图16的处理执行步骤804时,修改图16的处理以省略步骤678,使得如果多于N个存储器单元具有大于Vvstart的阈值电压,则所述处理从步骤 670进入步骤692。通过这种方式,在步骤804的执行期间不更新Vpgm_VStart。如果需要对更多的字线编程,则以与步骤804类似的其他步骤继续所述处理,但是是对不同的字线进行操作。如果仅仅对两个字线编程,则仅仅需要执行步骤800和802。
在一些实施例中,也可以针对偶数字线和奇数字线单独确定初始编程脉冲赋值。 如果由于制造处理不同而导致偶数字线和奇数字线具有不同的编程特征,则该方案是有益的。
图24描述用于实现多个编程处理的实施例。在图24的实施例中,周期性更新 Vpgm_vstart0在更新之间,使用先前确定的Vpgm_vstart的值。在步骤820中,使用图16 的处理对存储器单元编程,包括在图16的步骤678中更新Vpgm_VStart的值。在下次需要对数据编程时,在步骤822中,系统确定从存储最近确定的Vpgm_VStart值时开始经过的时间是否大于预定时间段。如果不大于预定时间段,则接下来的步骤824编程处理使用图16 的处理,但不更新Vpgm_VStart。也就是说,修改图16的处理以省略步骤678,使得如果多于N个存储器单元具有大于Vvstart的阈值电压,则所述处理从步骤670进入步骤692。或者,能够通过执行步骤19A的处理实施步骤824。如果在步骤822中确定从存储最近确定的Vpgm_VStart值时开始经过的时间大于预定时间段,则在步骤826中,使用图16的方法执行下一编程处理,包括在图16的步骤678中更新Vpgm_VStart的值。
图25描述用于实现多个编程处理的实施例。在该实施例中,在试验编程期间,在执行图16的处理时更新Vpgm_VStart的值。在试验编程中,不对用户数据编程。相反,使用图16的处理对哑元数据和/或哑元存储器单元进行编程,并且在该处理期间更新Vpgm_ Vstart0接着,在编程用户数据时,使用图16的处理,其中,Vpgm_VStart为(或者基于)基于试验编程的值,并且在对用户数据编程期间不更新Vpgm_VStart。例如,在步骤840中, (通过使用图16的处理)执行试验编程并且更新Vpgm_VStart。在步骤842中,使用图16 的处理以及基于试验编程的Vpgm_VStart对用户数据编程。在步骤842期间不更新Vpgm_ vstart.也就是说,修改图16的处理以省略步骤678,使得如果多于N个存储器单元具有大于Vvstart的阈值电压,则所述处理从步骤670进入步骤692。在步骤844中,使用图16 的处理以及基于试验编程的Vpgm_VStart对用户数据编程。在步骤844期间不更新Vpgm_ vstart.也就是说,修改图16的处理以省略步骤678,使得如果多于N个存储器单元具有大于Vvstart的阈值电压,则所述处理从步骤670进入步骤692。在不更新Vpgm_VStart的情况下,也可以执行对用户数据编程的其他步骤。在一些实施例中,在步骤842后可停止图25 的处理。在可替选实施例中,可通过执行图19A的处理(包括不更新Vpgm_VStart)而不是对图16所示处理的上述修改实现步骤842和844。
应当注意,本文描述的用于执行多个编程处理的方法可用于执行一个或多个多阶段编程处理的多个阶段。
图26描述用于实现多阶段编程处理(包括任一上述多阶段编程处理)的另一个实施例。在图26的实施例中,在多阶段编程处理的第二阶段中更新Vpgm_VStart。在步骤 846中,使用不更新Vpgm_VStart的图16的处理执行多阶段编程处理的第一阶段。也就是说,修改图16的处理以省略步骤678,使得如果多于N个存储器单元具有大于Vvstart的阈值电压,则所述处理从步骤670进入步骤692。或者,可使用图19A的处理。在步骤848 中,使用图16的处理执行多阶段编程处理的第二阶段,其中更新Vpgm_VStart。在步骤850 中,使用图16的处理执行多阶段编程处理的第三阶段,其中,用于Vpgm_VStart的值为(或者基于)在步骤848期间执行的步骤678中存储的值。在一些实施例中,步骤890可包括更新Vpgm_vstart,而在其他实施例中,在步骤890中不会更新Vpgm_vstart。在图26的处理中可添加类似步骤890的其他步骤。
通常,粗略/精细编程包括双阶段编程方式。第一阶段为粗略阶段,其中,重点在于快速编程,所需精度较低。第二阶段为精细阶段,其中,重点在于精确地编程。在一个实施例中,粗略阶段包括编程至一个或多个粗略验证电平,而精细阶段包括编程至一个或多个精细验证电平,其中,精细验证电平对应于用于编程的目标电平。
上述图IlA和图IlB提供了使用两个阶段的粗略/精细编程的一个示例。在第一趟(图11A)中实现粗略阶段。在第二趟(图11B)中实现第二阶段。图27和图28包括的曲线示出使用仅仅一个阶段的粗略/精细编程的实施例,在该一个阶段期间,粗略阶段和精细阶段两者均执行。
图27A、27B和27C示出快速存储器单元的行为,该快速存储器单元的阈值电压在同一脉冲中通过粗略验证电平和精细验证电平两者,使得该存储器单元不进入精细模式。 图28A、28B和28C示出参与粗略模式和精细模式两者的较慢存储器单元。图27A和图28A 示出施加到正被编程的存储器单元控制栅极的编程脉冲Vpgm。注意,图27A和图28A彼此相邻地示出编程脉冲,以使得曲线更易于读懂。但是,在编程脉冲之间实际上具有脉冲,以允许实现验证操作。图27B和图28B示出正被编程的存储器单元的比特线电压Vbl。图27C 和图28C示出正被编程的存储器单元的阈值电压。
关于图27A、27B和27C,示出快速存储器单元。响应于始于时间t0的第一脉冲, 存储器单元的阈值电压被提升至Vver3之上。在一个实施例中,验证电平Vver3对应于图 16的Vvstart。在tl与t2之间,存储器单元的阈值电压升至Vver2 (粗略验证电平)和 Vverl (精细验证电平)之上。在t2,比特线电压会升至Vinhibit,以禁止(例如锁定)不进行进一步编程。注意,在一个实施例中,Vver3可以是0. 2V至0. 3V,低于用于最低被编程状态的Vver2。
关于图28A至图28C的较慢存储器单元,在t2与t3之间的时间段之前,存储器单元的阈值电压不会升至Vver3之上。因此,在t3之前,编程脉冲递增Δ Vpgml。如果在t3 时页面中多于N个存储器单元中的阈值电压大于Vver3,则脉冲递增值在t3变为△ Vpgm2, 且后续脉冲的幅值增加Δ Vpgm2。在t3与t4之间,存储器单元中的阈值电压增加至Vver2 之上,因此,存储器单元进入精细编程阶段并且比特线在t4升至Vs (例如 .2-, 5V,或者另一合适的值)。在t4与t5之间,由于比特线电压升高且由于Vpgm递增值降低,阈值电压上升变慢。但是,在t4与t5之间,阈值电压未变得大于Vverl ;因此,阈值电压已达到其目标电平并且比特线电压被提升至Vinhibit以禁止在t5进一步编程。粗略/精细编程技术可与上述各种编程处理结合使用。
图29提供用于编程的另一个实施例。图29示出图16所示处理的可替选实施例, 该实施例包括用于在该处理后期更加精确地确定后续Vpgm_VStart值的步骤922和步骤 924。图29的步骤900-912与图16的步骤660-672相同。步骤926、928、930、938、932和 934与图16的步骤682、684、686、694、688和690相同。如果在图29的步骤910中确定N 个或更多存储器单元具有大于Vvstart的阈值电压,则图29的处理从步骤910进入步骤 914,并且将编程计数器PC重置为零。在步骤914之后,所述处理进入步骤920。图29的步骤920与图16的步骤692相同。在步骤920中验证存储器单元之后,步骤922包括确定是否有至少M个存储器单元已达到它们的目标阈值电压电平并且已被锁定不进行其他编程。在一个实施例中,M可等于15个存储器单元。在其他实施例中,可使用多于或少于15 个。如果至少M个存储器单元未达到它们的阈值电压电平且已被锁定不进行其他编程,则所述处理继续进入步骤926。但是,如果已锁定M个存储器单元,则记录在最近期所施加的脉冲的脉冲幅值并且所述处理继续进入步骤926。注意,系统仅在首次确定M个存储器单元已达到它们的阈值电压电平且已被锁定不进行其他编程时记录幅值(或其他数据)。
步骤924的一个实施例包括将刚刚施加的编程脉冲的幅值存储在寄存器、闪速存储器位置中或其他地方,以用作初始编程脉冲的幅值或者确定初始编程脉冲的幅值Vpgm_VStart,用于后续编程。在一个实施例中,刚刚施加的编程脉冲的幅值被用作初始编程脉冲的幅值Vpgm_VStart,用于后续编程。在另一实施例中,将偏移量(正偏移量或负偏移量)加到刚刚施加的编程脉冲的幅值上以确定用于后续编程的初始编程脉冲的幅值 Vpgm_vstart0在一些实施例中,在步骤924中存储刚刚施加的编程脉冲的幅值,稍后施加偏移量。在其它实施例中,对刚刚施加的编程脉冲的幅值使用该偏移量,并且在步骤924 中存储该结果。在其它实施例中,通过使用数学公式或其他方式,使用刚刚施加的编程脉冲的幅值或刚刚施加的该脉冲的标识来确定用于后续编程的初始编程脉冲的幅值Vpgm_ vstarto 使用来自步骤924的脉冲幅值的一个优势在于如果AVpgm2小于AVpgmlJ^i 于步骤924中存储的脉冲幅值,分辨率会更高。图29的处理可与上述实施例、包括图6-13 中示出的实施例一起使用。
以上描述提供了会基于先前的编程处理而动态调整初始编程脉冲的幅值的系统的示例。在一些实施例中,编程处理包括多个阶段,其中,第一阶段会包括设置用于后续阶段的初始编程脉冲幅值。通过以最优的初始幅值对后续阶段编程,能够缩短编程时间(较少的编程循环)。再未如上所述动态设置初始编程电压的一些在先的系统中,通常将初始编程电压设置为比优化值小很多,以为器件中的循环和编程速度变化留有余量。
在一些上述实施例中,在第一编程阶段期间的编程脉冲之间,第一编程阶段使用较大的步长大小(AVpgm)以节省编程时间。但是,为检测用于后续阶段的最优的初始编程电压Vpgm_VStart,因为通常以较小的大小对后续阶段编程,所以期望较小的步长大小。使用较小的步长大小来确定Vpgm_VStart可提供更大的分辨率。但是,使用较小的步长大小也增加执行编程所需的时间。
下面描述使得能够关于Vpgm_VStart实现更高的分辨率的实施例,但没有缘于使用较小的步长大小引起的全部时间损失。在一个实施例中,当所需最小数量的存储器单元已经过用于确定用于后续编程的Vpgm_VStart的第一验证电平Vvstart (或另一条件)时, 可在与第一验证电平不同的电平执行一个或多个附加的(或可替选的)验证操作(以测试一个或多个可替选的条件),以增加确定初始编程脉冲Vpgm_VStart时的分辨率。在一个示例中,在与Vvstart相差当前步长大小的一半(或另一比例)的第二验证电平(例如, Vvstart-2)执行一个附加验证步骤,在这样的情况下,能够以分辨率AVpgm/2确定新的初始编程脉冲。在其他实施例中,可进行多于一个附加验证操作,以进一步增加确定初始编程脉冲时的分辨率。该技术的一个优势在于为了获取更高的分辨率,不必减小在第一阶段编程期间的步长大小。仅有的编程时间增加是由一个或更多附加验证操作引起的,这不会显著增加编程时间。
图30示出在直到系统检测出要在图16的步骤678中存储的编程脉冲幅值之前响应于编程处理的第一阶段的最初5个编程脉冲的阈值电压分布移动的图形表示。在图30的示例中,在直到足够数量的存储器单元(例如,15个)已达到Vvstart之前,施加了 5个编程脉冲。可以看出,由阴影区域表示的一些存储器单元具有大于Vvstart的阈值电压。在步骤678中,所施加的最末编程脉冲(第5个编程脉冲)的幅值存储为Vpgm_VStart,或者用于计算Vpgm_vstarto 图31示出在直到检测出多于N个存储器单元具有大于Vvstart的阈值电压之前响应于编程处理的最初3个编程脉冲(脉冲1、脉冲2、脉冲3)的阈值电压分布移动的图形表示。在这种情况下,也出现多于N个存储器单元具有大于Vvstart-2的阈值电压。在这种情况下,执行一个或多个附加的/可替选的验证操作。例如,可在Vstart-2(可替选的结果)执行一个附加的/可替选的验证操作。当执行该附加的/可替选的验证操作时, 确定出多于N个存储器单元具有大于Vvstart-2的阈值电压。在该示例中,Vvstart比 Vvstart-2大Δ Vpgm/2 (但是也可能是其他值)。在这种情况下,用于确定用于后续阶段的初始编程电压Vpgm_VStart的编程脉冲幅值会从脉冲3的幅值下降Δ Vpgm/2 (但是也可能是其他值)。也就是说,存储为下一初始编程脉冲幅值的值等于第三编程脉冲的幅值减去 Δ verify或者由第三编程脉冲的幅值减去Averify定义,其中,Δ verify被定义为两个验证电平Vvstart与Vvstart-2之间的差。
图32提供关于与图31所示示例相比编程较慢的存储器单元的集合的另一示例。 在该示例中,在第三编程脉冲(脉冲3)之后,足够数量的存储器单元已经过Vvstart,但是, 未有足够数量的存储器单元经过Vvstart-2。因此,用于确定用于后续阶段的初始编程电压 Vpgm_vstart的编程脉冲幅值将是第二编程脉冲的幅值。
在其他实施例中,可使用多于一个附加的/可替选的验证操作,以进一步增加确定初始编程脉冲时的分辨率。例如,系统能够测试存储器单元,以确定是否有多于N(或另一数目)个存储器单元具有大于Vvstart-2和Vvstart-3的阈值电压,其中,这两个验证电平Vvstart与Vvstart-2之间的差为AVpgm/3,且两个验证电平Vvstart-2与 Vvstart-3之间的差也为AVpgm/3。因此,两个验证电平Vvstart与Vvstart-3之间的差为 (2) * Δ Vpgm/3。如果使用X个附加的/可替选的验证操作,则系统会在Vvstart、Vvstart-2、
Vvstart-3,......,Vvstart-X 处进行验证,其中,Vvstart-X 与 Vvstart 相差(X) * Δ Vpgm/
(1+Χ)。
该技术的优势在于不必减小在第一阶段编程期间的编程脉冲的步长大小。可使用与未采用该技术时相同的步长大小,从而第一阶段的编程循环的数量不会增加。
在一些实施例中,Vvstart是要在第一阶段期间编程的最低阈值电压分布(例如, 分布Α)的验证电平。在一些实施例中,Vvstart-2是要在第一阶段期间编程的最低阈值电压分布(例如,分布A)的验证电平,而Vvstart小于最低阈值电压分布的验证电平。在其他实施例中,Vvstart和Vvstart-2可均小于第一分布的验证电平。在一些实施例中,Vvstart 为要在第一阶段期间编程的最低阈值电压分布的粗略/精细编程中使用的最低验证电平, 而Vvstart-2可以等于要在第一阶段期间编程的最低阈值电压分布的验证电平。在检测到初始编程幅值用于后续编程阶段后,可以以相同的步长大小继续编程,以将分布编程为等于或大于Vvstart-2。在一些情况下,可能期望在检测到初始编程脉冲后降低步长大小,以允许更精确的编程。这里描述的技术可与第7,092,290号美国专利的处理结合。
上述关于使用附加的/可替选的验证电平来增加分辨率的技术可与图16的处理一起使用。图33是描述要加入到图16的处理中的流程图。图33的流程图中示出的步骤代替图16的步骤678。例如,在图16的步骤670确定出N个或更多存储器单元具有大于 Vvstart的阈值电压之后,在图33的步骤970继续进行处理。在步骤970中,系统确定是否有P个或更多存储器单元具有大于Vvstart-2的阈值电压(其中,P可与N相同或不同)。 如果有P个或更多存储器单元具有大于Vvstart-2的阈值电压,则在步骤972中,用于确定下一个Vpgm_VStart的幅值为(施加的最后脉冲的幅值)_( Δ verify)。步骤972包括存储(施加的最后脉冲的幅值)-(AVerify),如上文关于步骤678所述。或者,步骤972包括存储(施加的最后脉冲的幅值)-(AVerify) + (偏移量)。在另一可替选方式中,系统可存储(施加的最后脉冲的幅值)-(AVerify)的另一函数,施加的最后脉冲的标识与Averify 的函数,施加的最后脉冲的标识与Averify的函数,或者以上的组合或子集。也可使用除 Averify外的值。在步骤972之后,在图16的步骤692继续进行处理。
如果在步骤970中确定出未有P个具有大于Vvstart-2的阈值电压的存储器单元,则在步骤974中,用于确定下一个Vpgm_VStart的幅值为施加的最后脉冲的幅值。步骤 974包括存储施加的最后脉冲的幅值,如上文中关于步骤678所述。或者,步骤972包括存储(施加的最后脉冲的幅值)+ (偏移量)。在另一个可替选方式中,系统可存储所施加的最后脉冲的幅值、施加的最后脉冲的标识、施加的最后脉冲的标识的函数、或者以上的组合或子集的另一函数。在步骤974之后,在图16的步骤692继续进行处理。
类似地,图29的步骤924可用图33的处理代替。也就是说,如果已锁定M个存储器单元,则在步骤970继续进行处理。在步骤972或974之后,在图29的步骤926中继续进行处理。
图34是描述在系统执行两个额外验证操作以测试两个可替选结果时要被加入到图16中的处理的流程图。注意,可调整图34的处理以测试多于两个可替选结果。在图34 的流程图中示出的步骤代替图16的步骤678。例如,在图16的步骤670确定出N个或更多存储器单元具有大于Vvstart的阈值电压之后,在图34的步骤980中继续进行处理。在步骤980中,系统确定是否有P个或更多存储器单元具有大于Vvstart-2的阈值电压(其中,P可与N相同或不同)。如果确定出未有P个具有大于Vvstart-2的阈值电压的存储器单元,则在步骤982中,用于确定下一个Vpgm_VStart的幅值或脉冲为所施加的最后脉冲的幅值。步骤982包括存储所施加的最后脉冲的幅值,如上文关于步骤678所述。或者,步骤 982包括存储(施加的最后脉冲的幅值)+ (偏移量)。在另一可替选方式中,系统可存储所施加的最后脉冲的幅值、最后脉冲的标识或者最后脉冲的标识的函数的另一个函数。在步骤982之后,在图16的步骤692继续进行处理。
如果P个或更多存储器单元具有大于Vvstart-2的阈值电压,则在步骤984中,确定是否有T个或更多具有大于Vvstart-3的阈值电压的存储器单元。T的值可与N相同或不同。如果确定出未有T个具有大于Vvstart-3的阈值电压的存储器单元,则在步骤988 中,用于确定下一个Vpgm_VStart的幅值为(施加的最后脉冲的幅值)_ ( Δ verifyl)。步骤 986包括存储(施加的最后脉冲的幅值)_ ( △ verifyl),如上文关于步骤678所述。或者,步骤988包括存储(施加的最后脉冲的幅值)-(Averifyl) + (偏移量)。在另一可替选方式中,系统可存储(施加的最后脉冲的幅值)_( Δ verifyl)、最后脉冲的标识与(Δ verifyl) 的函数、最后脉冲的标识与(Averifyl)的函数、或者以上的组合或子集的另一个函数。也可使用不同于Averifyl的值。在步骤988之后,在图16的步骤692继续进行处理。在该实施例中,Averifyl被定义为Vvstart与Vvstart-2之间的差。
如果确定出有T个或更多具有大于Vvstart-3的阈值电压的存储器单元, 则在步骤986中,用于确定下一个Vpgm_VStart的幅值为(施加的最后脉冲的幅值)-(AVerify2)。步骤986包括存储(施加的最后脉冲的幅值)-(AVerify2),如上文关于步骤678所述。或者,步骤986包括存储(施加的最后脉冲的幅值)_(Averify2) + (偏移量)。在另一可替选方式中,系统可存储(施加的最后脉冲的幅值)-(Averify2)、最后脉冲的标识与(AVerify2)的函数、最后脉冲的标识与(AVerify2)的函数、或者以上的组合或子集的另一个函数。在步骤986之后,在图16的步骤692继续进行处理。在该实施例中,Δ verify2被定义为Vvstart与Vvstart-3之间的差。
类似地,图29的步骤924可用图34的处理代替。也就是说,如果已锁定M个存储器单元,则在步骤980继续进行处理。在步骤982、986或988之后,在图29的步骤926中继续进行处理。
图33和图34的处理可与图29或图16的处理一起使用,以实现任一上述编程方案。在图33或图34的处理可与图29的处理一起使用以实现图8A-图8C的编程方案的一个示例中,第一编程阶段可包括编程至阈值电压Vvb’以及确定用于Vpgm_VStart的新的值。使用来自第一阶段的Vpgm_VStart (具有偏移量),第二阶段可使用图29的处理以编程至A、B和C状态,如图8C所示。
上文中提供了对本发明的具体描述以用于进行阐述和说明。但并非要穷举或者将本发明限于所公开的精确形式。根据以上教导,可实现很多修改和变型。上述实施例被选取用于最佳地解释本发明的原理及其实际应用,从而使得本领域技术人员能够以不同的实施例并利用适于特定预期用途的不同变型来最佳地利用本发明。本发明的范围要由所附权利要求来定义。
权利要求
1.一种对非易失性存储器编程的方法,包括对多个非易失性存储器元件执行多阶段编程处理的一个阶段,该多阶段编程处理将所述多个非易失性存储器元件编程至一个或多个最终目标条件,所述一个阶段包括使用第一编程脉冲集合将所述多个非易失性存储器元件编程至一个或多个第一中间目标条件,执行所述一个阶段包括标识与实现特定结果相关的编程脉冲;关于所述非易失性存储器元件的一个或多个可替选结果执行一个或多个感测操作;如果所述感测操作确定出大于预定数量的非易失性存储器元件实现了所述一个或多个可替选结果的第一可替选结果,则存储基于所述第一可替选结果和所标识的编程脉冲的标识;以及如果所述感测操作未确定出有足够数量的非易失性存储器元件实现所述一个或多个可替选结果,则存储基于所标识的编程脉冲的标识;以及执行所述多阶段编程处理的附加阶段,该附加阶段包括施加第二编程脉冲集合,该第二编程脉冲集合的初始脉冲具有基于所存储的标识而设置的幅值。
2.根据权利要求1所述的方法,其中所述一个阶段还包括响应于实现所述特定结果,降低所述第一编程脉冲集合的脉冲之间的增量。
3.根据权利要求2或3所述的方法,其中所述标识与实现特定结果相关的编程脉冲包括执行感测操作以确定是否有预定数量的非易失性存储器元件已实现所述特定结果, 以及标识使得所述预定数量的非易失性存储器元件已实现所述特定结果的特定编程脉冲, 该特定编程脉冲是与实现所述特定结果相关的编程脉冲;以及第一可替选结果与所述特定结果相差所述第一编程脉冲集合的脉冲之间的增量的一部分。
4.根据权利要求1、2或3所述的方法,其中所述特定结果为第一阈值电压值;所述第一可替选结果为与所述特定结果相差所述第一编程脉冲集合的脉冲之间的增量的所述一部分的第二阈值电压值;并且该方法还包括如果所存储的标识基于所标识的编程脉冲,则将所述第二编程脉冲集合的初始脉冲的幅值设置为第一电平,并且,如果所存储的标识基于所述第一可替选结果和所标识的编程脉冲,则将所述第二编程脉冲集合的初始脉冲的幅值设置为第二电平,该第二电平低于该第一电平。
5.根据任一前述权利要求所述的方法,其中所述多个非易失性存储器元件连接至共同字线。
6.根据任一前述权利要求所述的方法,还包括在执行所述一个阶段之后且在执行所述附加阶段之前,在并非所述多阶段编程处理的一部分的另一编程处理中执行对其他非易失性存储器元件的编程,所述其他非易失性存储器元件不同于所述多个非易失性存储器元件。
7.根据任一前述权利要求所述的方法,其中所述特定结果为足够数量的非易失性存储器元件达到一个或多个第一中间目标条件。
8.根据权利要求1-6中任一项所述的方法,其中所述特定结果为足够数量的非易失性存储器元件达到介于所述第一中间目标条件的条件。
9.根据权利要求1所述的方法,其中关于所述非易失性存储器元件的一个或多个可替选结果执行一个或多个感测操作包括关于所述第一可替选结果的测试,以及关于第二可替选结果的测试;该方法还包括如果所述感测操作确定出足够的非易失性存储器元件达到所述第二可替选结果,则基于所述第二可替选结果和所标识的编程脉冲存储所述标识;所述特定结果为第一阈值电压值;所述第一可替选结果为与所述特定结果相差所述第一编程脉冲集合的脉冲之间的增量的所述一部分的第二阈值电压值;所述第二可替选结果为与所述特定结果相差所述第一编程脉冲集合的脉冲之间的增量的所述一部分的第三阈值电压值;该方法还包括如果所存储的标识基于所标识的编程脉冲,则将所述第二编程脉冲集合的初始脉冲的幅值设置为第一电平,并且,如果所存储的标识基于所述第一可替选结果和所标识的编程脉冲,则将所述第二编程脉冲集合的初始脉冲的幅值设置为第二电平,如果所存储的标识基于所述第二可替选结果和所标识的编程脉冲,则将所述第二编程脉冲集合的初始脉冲的幅值设置为第三电平;并且该第二电平低于该第一电平,且第三电平低于第二电平。
10.一种非易失性存储器装置,包括多个非易失性存储器元件;以及与所述多个非易失性存储器元件通信的一个或多个管理电路,所述一个或多个管理电路关于多个非易失性存储器元件执行多个编程处理,每个所述编程处理用于使用编程脉冲至少将所述非易失性存储器元件的子集编程至相应的目标条件集合,对于至少所述编程处理的子集,所述一个或多个管理电路标识与实现相应编程处理的特定结果相关的编程脉冲并且在用于所述非易失性存储器元件的一个或多个可替选结果处执行一个或多个感测操作,如果所述一个或多个感测操作确定出多于预定数量的非易失性存储器元件实现所述一个或多个可替选结果的第一可替选结果,则所述一个或多个管理电路使用所述第一可替选结果和编程脉冲的标识,以调整用于所述非易失性存储器元件的后续编程处理的编程,如果所述一个或多个感测操作确定出少于所需数量的非易失性存储器元件实现任一所述可替选结果,则所述一个或多个管理电路使用编程脉冲的标识,以调整用于所述非易失性存储器元件的后续编程处理的编程。
11.根据权利要求10所述的非易失性存储器装置,还包括第一字线,所述多个非易失性存储器元件与该第一字线连接,所述一个或多个管理电路将编程脉冲施加至该第一字线,并且所述多个非易失性存储器元件为多状态闪速存储器器件。
12.根据权利要求10或11所述的非易失性存储器装置,其中所述特定结果包括足够数量的非易失性存储器元件达到相应编程处理的中间条件;并且在每个所述编程处理的子集中,所述一个或多个管理电路响应于实现所述特定结果而降低编程脉冲之间的增量。
13.根据权利要求10、11或12所述的非易失性存储器装置,其中通过执行感测操作以确定是否有预定数量的非易失性存储器元件已实现所述特定结果以及标识紧挨着的前一编程脉冲,所述一个或多个管理电路标识与实现所述特定结果相关的编程脉冲;以及第一可替选结果与所述特定结果相差编程脉冲之间的编程增量的一部分。
14.根据权利要求10-13中任一项所述的非易失性存储器装置,其中所述特定结果为第一阈值电压值;所述第一可替选结果为与所述特定结果相差脉冲之间的编程增量的所述一部分的第二阈值电压值;并且如果所述感测操作未确定出多于预定数量的非易失性存储器元件具有高于所述第二阈值电压值的较高阈值电压,则通过将后续编程处理的初始脉冲的幅值设置为第一电平, 所述一个或多个管理电路使用所述编程脉冲的标识来调整用于所述非易失性存储器元件的后续编程处理的编程;并且如果所述感测操作确定出多于预定数量的非易失性存储器元件具有高于所述第二阈值电压值的较高阈值电压,则通过将后续编程处理的初始脉冲的幅值设置为第二电平,所述一个或多个管理电路使用所述第一可替选结果和所述编程脉冲的标识来调整用于所述非易失性存储器元件的后续编程处理的编程,该第二电平不同于该第一电平。
15.根据权利要求10-14中任一项所述的非易失性存储器装置,其中如果所述一个或多个感测操作确定出多于预定数量的非易失性存储器元件实现所述一个或多个可替选结果的第二可替选结果,则所述一个或多个管理电路使用所述第二可替选结果和所述编程脉冲的标识来调整用于所述非易失性存储器元件的后续编程处理的编程。
16.根据权利要求10所述的非易失性存储器装置,其中通过基于所述第一可替选结果和所述编程脉冲的标识设置用于后续编程处理的初始编程脉冲的幅值,所述一个或多个管理电路使用所述第一可替选结果和所述编程脉冲的标识来调整用于所述非易失性存储器元件的后续编程处理的编程;通过基于所述编程脉冲的标识设置用于后续编程处理的初始编程脉冲的幅值,所述一个或多个管理电路使用所述编程脉冲的标识来调整用于所述非易失性存储器元件的后续编程处理的编程;通过基于与实现所述特定结果相关的编程脉冲的电压电平设置用于后续编程处理的初始编程脉冲的幅值,所述一个或多个管理电路基于所述编程脉冲的标识设置用于后续编程处理的初始编程脉冲的幅值;以及通过基于与实现所述特定结果相关的编程脉冲的电压电平以及缘于第一可替选结果的校正因子设置用于后续编程处理的初始编程脉冲的幅值,所述一个或多个管理电路基于所述可替选结果和所述编程脉冲的标识设置用于后续编程处理的初始编程脉冲的幅值。
全文摘要
对于多个非易失性存储器元件执行多个编程处理。每个所述编程处理用于使用编程脉冲至少将非易失性存储器元件的子集编程至相应的目标条件集合。至少所述编程处理的子集包括标识与实现相应编程处理的特定结果相关的编程脉冲并且在用于非易失性存储器元件的一个或多个可替选结果处执行一个或多个感测操作、如果所述一个或多个感测操作确定出多于预定数量的非易失性存储器元件实现所述一个或多个可替选结果的第一可替选结果,则基于所述第一可替选结果和编程脉冲的标识,调整后续编程处理。如果所述一个或多个感测操作确定出少于所需数量的非易失性存储器元件实现任一所述可替选结果,则基于编程脉冲的标识,调整后续编程处理。
文档编号G11C16/10GK102203874SQ200980142518
公开日2011年9月28日 申请日期2009年9月29日 优先权日2008年10月24日
发明者格里特·简·海明克 申请人:桑迪士克股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1