具体实施方式
快闪存储器系统的一个实例使用NAND结构,其包含夹在两个选择栅极之间串联布置的多个晶体管。所述串联晶体管及所述选择栅极称为NAND串。图1是显示一个NAND串的俯视图。图2是其等效电路。图1及2中所描绘的NAND串包含夹于第一(或漏极侧)选择栅极120与第二(或源极侧)选择栅极122之间且串联的四个晶体管100、102、104及106。选择栅极120经由位线触点126将所述NAND串连接到位线。选择栅极122将NAND串连接到源极线128。通过向选择线SGD施加合适电压来控制选择栅极120。通过向选择线SGS施加合适电压来控制选择栅极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。
应注意,虽然图1及图2显示NAND串中的四个存储器单元,但仅提供使用四个晶体管作为实例。NAND串可具有少于四个存储器单元或多于四个存储器单元。例如,一些NAND串将包含8个存储器单元、16个存储器单元、32个存储器单元、64个存储器单元、128个存储器单元等。本文中的论述并非局限于NAND串中的存储器单元的任何特定数目。
使用NAND结构的快闪存储器系统的典型架构将包含若干NAND串。每一NAND串通过其受选择线SGS控制的源极选择栅极连接到源极线,且通过其受选择线SGD控制的漏极选择栅极连接到与其相关联的位线。每一位线及经由位线触点连接到所述位线的相应(多个)NAND串包括存储器单元阵列的列。位线由多个NAND串共享。通常,位线在NAND串之上沿与字线垂直的方向延伸且连接到一个或一个以上感测放大器。
每一存储器单元均能存储模拟数据或数字数据。当存储一个数字数据位时,将存储器单元的可能阈值电压范围划分成被指派逻辑数据“1”及“0”的两个范围。在NAND型快闪存储器的一个实例中,在擦除存储器单元之后阈值电压为负并定义为逻辑“1”。在编程之后阈值电压为正并定义为逻辑“0”。当阈值电压为负并通过向控制栅极施加0伏来尝试读取时,存储器单元将导通以指示正存储逻辑1。而当阈值电压为正且通过向控制栅极施加0伏来尝试读取操作时,存储器单元将不会导通,此指示存储逻辑0。
于存储多个数据电平的情况下,将可能阈值电压的范围划分成数据电平的数目。例如,如果存储四个信息电平(两个数据位),那么将存在四个被指派给数据值“11”、“10”、“01”及“00”的阈值电压范围。在NAND型存储器的一个实例中,擦除操作之后的阈值电压为负且被定义为“11”。正阈值电压用于“10”、“01”及“00”数据状态。如果存储八个信息电平(或状态)(例如,针对三个数据位),那么将存在八个被指派给数据值“000”、“001”、“010”、“011”、“100”、“101”、“110”及“111”的阈值电压范围。
编程到存储器单元中的数据与所述单元的阈值电压电平之间的具体关系取决于针对所述单元所采用的数据编码方案。例如,美国专利第6,222,762号及美国专利申请公开案第2004/0255090号(此二者的全文均以引用方式并入本文中)描述了用于多状态快闪存储器单元的各种数据编码方案。在一个实施例中,使用格雷码指派方案将数据值指派给所述阈值电压范围,以使得如果浮动栅极的阈值电压错误地移位到其相邻物理状态,那么将仅一个位受到影响。在一些实施例中,数据编码方案可针对不同字线改变,数据编码方案可随时间改变,或者随机字线的数据位可反转或否则随机化以减少数据型样灵敏度及甚至对存储器单元的磨损。
在以下美国专利申请案中提供有NAND型快闪存储器及其操作的相关实例,所有所述美国专利申请案均以引用的方式并入本文中:美国专利第5,570,315号;美国专利第5,774,397号;美国专利第6,046,935号;美国专利第6,456,528号;及美国专利公开案第US2003/0002348号。本文中的论述也可适用于除NAND之外的其它类型快闪存储器以及其它类型的非易失性存储器。
除NAND快闪存储器之外,也可使用其它类型的非易失性存储装置。例如,本发明也可使用所谓的TANOS结构(由硅衬底上的TaN-Al2O3-SiN-SiO2堆叠层构成),所述TANOS结构基本上是使用氮化物层(代替浮动栅极)陷获电荷的存储器单元。适用于快闪EEPROM系统中的另一类型的存储器单元利用非导电介电材料取代导电浮动栅极来以非易失性方式存储电荷。此一单元描述于一篇由Chan(陈)等人所著的文章“A True Single-Transistor Oxide-Nitride-Oxide EEPROM Device(真正的单个晶体管氧化物-氮化物-氧化物EEPROM装置)”(IEEE Electron Device Letters(IEEE电子装置学报)),Vol.EDL-8,No.3,1987年3月,第93到95页)中。由氧化硅、氮化硅及氧化硅(“ONO”)形成的三层式电介质夹于导电控制栅极与存储器单元沟道上方的半导电衬底的表面之间。单元是通过将电子自单元沟道注入到氮化物中进行编程,其中电子被陷获并存储于有限的区域中。然后,此所存储的电荷以可检测的方式改变单元沟道的一部分的阈值电压。通过将热空穴注入到氮化物中来擦除存储器单元。还参见由Nozaki(诺扎克)等人所著的“A 1-Mb EEPROM with MONOS Memory Cellfor Semiconductor Disk Application(具有MONOS存储器单元的用于半导体磁盘应用的1-Mb EEPROM)”(IEEE Journal of Solid-State Circuits(IEEE固态电路杂志),第26卷,No.4,1991年4月,第497到501页)中,所述文章描述了一种呈分裂式栅极配置的类似存储器单元,其中经掺杂的多晶硅栅极在存储器单元沟道的一部分上方延伸从而形成单独的选择晶体管。以上两个文章的全文均以引用方式并入本文中。在William D.Brown(威廉姆D.布朗)及Joe E.Brewer(乔治E.布鲁尔)所编辑的“Nonvolatile Semiconductor Memory Technology(非易失性半导体存储器技术)”(IEEE出版社,1998)1.2部分中所提及的编程技术也在所述部分中被描述为适用于电介质电荷陷获装置,所述文章以引用方式并入本文中。也可使用其它类型的存储器装置。
图3图解说明可包含一个或一个以上存储器裸片或芯片212的非易失性存储装置210。存储器裸片212包含存储器单元阵列200(两维或三维)、控制电路220及读取/写入电路230A及230B。在一个实施例中,各种外围电路对存储器阵列200的存取是以对称方式在所述阵列的相对侧上实施,以使得每一侧上的存取线及电路的密度减半。读取/写入电路230A及230B包含多个感测区块300,所述感测区块允许并行读取或编程一页存储器单元。存储器阵列100可由字线经由行解码器240A及240B寻址且可由位线经由列解码器242A及242B寻址。在典型的实施例中,控制器244与一个或一个以上存储器裸片212一样包含于同一存储器装置210(例如,可移除存储卡或包)中。命令及数据经由线232在主机与控制器244之间及经由线234在控制器与一个或一个以上存储器裸片212之间传送。一个实施案可包含多个芯片212。
控制电路220与读取/写入电路230A及230B协作以对存储器阵列200执行存储操作。控制电路220包含状态机222、芯片上地址解码器224及功率控制模块226。状态机222提供对存储操作的芯片级控制。芯片上地址解码器224在主机或存储器控制器所用的地址与解码器240A、240B、242A及242B所用的硬件地址之间提供地址接口。功率控制模块226控制存储操作期间供应到字线及位线的功率和电压。在一个实施例中,功率控制模块226包含能产生大于供应电压的电压的一个或一个以上电荷泵。
在一个实施例中,可将控制电路220、功率控制电路226、解码器电路224、状态机电路222、解码器电路242A、解码器电路242B、解码器电路240A、解码器电路240B、读取/写入电路230A、读取/写入电路230B及/或控制器244的一个组合或任何组合称为一个或一个以上管理电路。
图4描绘存储器单元阵列200的实例性结构。在一个实施例中,将存储器单元阵列划分为M个存储器单元区块。对于快闪EEPROM系统是常见的,区块即为擦除单位。即,每一区块均包含可一起擦除的最小数目的存储器单元。每一区块通常被划分为一定数目个页。页是编程单位。通常一个或一个以上数据页存储在一个存储器单元行中。页可存储一个或一个以上区段。区段包含用户数据及额外开销数据。额外开销数据通常包含已根据所述区段的用户数据计算出的错误校正码(ECC)。控制器的一部分(以下所描述)在数据正被编程到阵列中时计算ECC,且还在正自阵列读取数据时检查ECC。另一选择为,将ECC及/或其它额外开销数据存储在与其所从属的用户数据不同的页,或者甚至不同的区块中。用户数据区段通常为512个字节,对应于磁盘驱动器中一区段的大小。大量页形成区块,例如从8个页到多达32个、64个、128个或更多个页不等。也可使用不同大小的区块及布置。
在另一实施例中,将位线划分为奇数位线与偶数位线。在奇数/偶数位线架构中,在一个时间编程沿一共用字线且连接到奇数位线的存储器单元,而在另一时间编程沿一共用字线且连接到偶数位线的存储器单元。
图4显示存储器阵列200的区块i的更多细节。区块i包含X+1个位线及X+1个NAND串。区块i也包含64个数据字线(WL0到WL63)、2个虚拟字线(WL_d0及WL_d1)、漏极侧选择线(SGD)及源极侧选择线(SGS)。每一NAND串的一个端子经由漏极选择栅极(连接到选择线SGD)连接到对应的位线,且另一端子经由源极选择栅极(连接到选择线SGS)连接到源极线。由于存在64个数据字线及两个虚拟字线,因此每一NAND串包含64个数据存储器单元及两个虚拟存储器单元。在其它实施例中,NAND串可具有多于或少于64个数据存储器单元及两个虚拟存储器单元。数据存储器单元可存储用户或系统数据。虚拟存储器单元通常不用来存储用户或系统数据。一些实施例不包含虚拟存储器单元。
图5是分割为核心部分(称为感测模块480)及共用部分490的个别感测区块300的方框图。在一个实施例中,针对每一位线将存在单独的感测模块480,且针对一组多个感测模块480存在一个共用部分490。在一个实例中,感测区块将包含一个共用部分490及8个感测模块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所施加的控制栅极电压的信息来确定所得存储器状态。然后处理器492计算存储器状态的二进制编码并将所得数据位存储于数据锁存器494中。在所述核心部分的另一实施例中,位线锁存器482有两个用途:作为用于锁存感测模块480的输出的锁存器及还作为如上所述的位线锁存器二者。
预期一些实施案将包含多个处理器492。在一个实施例中,每一处理器492将包含输出线(在图5中未描绘出)以使得所述输出线的每一者均线“或”连接在一起。在一些实施例中,所述输出线在连接到线“或”线之前被反转。此配置使得能够在编程检验过程期间快速确定编程过程何时完成,因为接收线“或”线的状态机可确定正被编程的所有位何时达到所需电平。例如,当每一位达到其所需电平时,将向线“或”线发送所述位的逻辑0(或经反转,为数据1)当所有位输出数据0(或经反转,为数据1)时,状态机便知晓要终止编程过程。在其中每一处理器均与八个感测模块通信的实施例中,状态机可能(在一些实施例中)需要读取线“或”线八次,或者向处理器492添加逻辑以积累相关联位线的结果以使得所述状态机仅需读取所述线“或”线一次。
在编程或检验期间,将来自数据总线420的欲编程的数据存储于所述组数据锁存器494中。在状态机控制之下的编程操作包括将一系列编程电压脉冲(具有增加的量值)施加至所寻址的存储器单元的控制栅极。每一编程脉冲后面是检验过程以确定所述存储器单元是否已被编程为所需状态。处理器492相对于所需存储器状态来监控被检验的存储器状态。当二者一致时,处理器492设定位线锁存器482,以致使所述位线被拉到指示编程禁止的状态。此禁止耦合到所述位线的单元进一步编程,即使在经历编程脉冲施加在其控制栅极上时亦如此。在其它实施例中,在检验过程期间处理器首先加载位线锁存器482且感测电路将其设定为禁止值。
数据锁存器堆叠494含有对应于感测模块的数据锁存器堆叠。在一个实施例中,每个感测模块480有3到5(或其它数目)个数据锁存器。在一个实施例中,所述锁存器各自为一个位。在一些实施案中(但不要求),将所述数据锁存器实施为移位寄存器以使得存储于其中的并行数据转换成用于数据总线420的串行数据,且反之亦然。在一个优选实施例中,可将对应于m个存储器单元的读取/写入区块的所有数据锁存器链接在一起以形成区块移位寄存器,以使得数据区块可通过串行传送输入或输出。特定而言,对读取/写入模块库进行调适,以使得其数据锁存器组中的每一者将依序将数据移入或移出数据总线,仿佛其是用于整个读取/写入区块的移位寄存器的一部分。
可在以下专利中发现关于读取操作及感测放大器的另外信息:(1)在2004年3月25日公开的美国专利申请公开案第2004/0057287号,“Non-Volatile Memory AndMethod With Reduced Source Line Bias Errors(非易失性存储器及具有减少的源极线偏压错误的方法)”;(2)在2004年6月10日公开的美国专利申请公开案第2004/0109357号,“Non-Volatile Memory And Method with Improved Sensing(非易失性存储器及改善感测的方法)”;(3)美国专利申请公开案第20050169082号;(4)在2005年4月5日申请的发明人为Jian Chen(陈健)、名称为“Compensating for Coupling DuringRead Operations of Non-Volatile Memory(在非易失性存储器的读取操作期间对耦合的补偿)”的美国专利公开案2006/0221692;及(5)在2005年12月28日申请、发明人为Siu Lung Chan(陈少龙)及Raul-Adrian Cernea(罗-爱德里安塞尼尔)、名称为“Reference Sense Amplifier For Non-Volatile Memory(用于非易失性存储器的参考感测放大器)”的美国专利申请案第11/321,953号。以上刚刚列出的所有五个专利文档的全文均以引用的方式并入本文中。
在成功编程过程(具有检验过程)结束时,存储器单元的阈值电压应在阈值电压的一个或一个以上分布内(对于经编程的存储器单元而言),或视情况在阈值电压的一分布内(对于经擦除的存储器单元而言)。图6图解说明当每一存储器单元存储四个数据位时,对应于存储器单元阵列的数据状态的实例性阈值电压分布。然而,另一实施例可每个存储器单元使用多于或少于四个数据位。图6显示对应于数据状态0到15的16个阈值电压分布。在一个实施例中,处于状态0的阈值电压为负且处于状态1到15的阈值电压为正。
在数据状态0到15的每一者之间的是用于自存储器单元读取数据的读取参考电压。例如,图6显示数据状态0与1之间的读取参考电压Vr1,及数据状态1与2之间的Vr2。通过测试既定存储器单元的阈值电压是在相应读取参考电压之上还是之下,系统可确定所述存储器单元处于何种状态。
检验参考电压在每一数据状态0到15的下沿处或其附近。例如,图6显示状态1的Vv1及状态2的Vv2。当将存储器单元编程为一既定状态时,所述系统将测试那些存储器单元是否具有大于或等于检验参考电压的阈值电压。
图7图解说明另一实施例,其中对应于数据状态0到15的阈值电压分布可部分重叠,因为ECC可处理一定比例的发生错误的单元。
还应注意,当使用通过源极的本体效应或本体偏压来将负阈值电压移位到可测量的正电压范围时,Vt轴可能会自施加至所述控制栅极的实际电压偏移。应注意的另一点是,与所描绘的16个状态的相等间隔/宽度相反,各种状态可具有不同的宽度/间隔以适应对保留损失的不同程度感受性。在一些实施例中,状态0及/或15宽于其它状态。
图6(或图7)中的每一数据状态对应于存储在编程为相应状态的存储器单元中的数据位的预定值。图8是提供指派给每一数据状态0到15的数据值的实例的表。在一个实施例中,存储器单元将数据存储于四个不同页中。所述四个页称为第一下部页、第二上部页、第三较高页及第四顶部页。图8描绘每一数据状态0到15的每一页中的数据。在一个实施例中,单独对每一页进行编程。在另一实施例中,同时编程存储器单元的所有四个数据位。
图9是提供指派给每一数据状态0到15的数据值的另一实例的表。图8中的数据值利用格雷码指派方案以使得相邻数据状态之间仅改变一个位。如果存储器单元的阈值电压太低或太高,此布置可减少错误位的数目。
图10是描绘操作非易失性存储器单元的一个实施例的流程图。在许多实施案中,存储器单元于编程之前被擦除(以区块为单位或以其它为单位)。在一个实施例中,通过在源极线及位线浮动时将p-阱升高到擦除电压(例如20伏)且持续一充足时间周期并将选定区块的字线接地来擦除存储器单元(参见步骤500)。由于电容性耦合,未选定字线、位线、选择线及源极也升高到占擦除电压显著分数的值。由此将强电场施加至选定存储器单元的隧道氧化物层,且当浮动栅极的电子发射到衬底侧时,选定存储器单元的数据通常通过Fowler-Nordheim(福勒-诺德海姆)隧穿机制擦除。当电子从浮动栅极传送到p阱区域时,选定单元的阈值电压降低。可对整个存储器阵列、区块、或单元的另一单位执行擦除。在擦除存储器单元区块之后,可如本文中所述编程各种存储器单元。
在步骤502中,任选地,执行软编程以缩小经擦除的存储器单元的经擦除阈值电压的分布。一些存储器单元由于擦除过程的缘故可能会处于比所需深的经擦除状况。软编程包含施加编程脉冲以将经擦除的存储器单元的阈值电压移动到一较紧密阈值电压分布。在每一编程脉冲之间,可执行检验操作以确定存储器单元是否在适合的经擦除阈值电压分布内。在软编程过程结束之前不再需要进行软编程的存储器单元可通过升高对应位线被锁定以不进行进一步软编程。检验电压可基于特定实施案而变化。此项技术中已知晓软编程。可在美国专利6,661,711中发现更多关于软编程的信息,所述专利以引用方式并入本文中。应注意不要求用于执行软编程的特定方案。虽然常常可与擦除过程相关联执行软编程,但也可在编程时执行软编程。
在步骤504中,接收编程数据的请求。可从主机或其它装置接收所述请求。在步骤502与504之间描绘虚线以指示不可预知的时间量,且可能地,一些插入任务(包含其它编程操作)可在步骤502与504之间通过。
在步骤506中,通过使用多遍编程过程将数据编程到存储器单元中从而将存储器单元从经擦除的阈值电压分布编程为与有效数据状态相关联的阈值电压分布中的任一者。下文将提供步骤506的更多细节。
在步骤508中,读取数据存储器单元且向用户提供所读取的数据。例如,通过控制器向主机提供来自存储器单元的数据。在步骤506与508之间描绘虚线以指示不可预知的时间量且可能地,一些中间任务可在步骤506与508之间通过。在一些情形下,可能从未读取数据。图10中的过程是在控制器244及/或控制电路220指示下由控制器244及/或控制电路220执行。
通常,在读取及检验操作期间,选定字线连接到一电压-针对每一读取及检验操作规定所述电压的电平(例如,Vr1或Vv1),以便确定相关存储器单元的阈值电压是否已达到此电平。未选定字线连接到不同于选定字线的电压的超驱动电压(称为Vread)。通常,将所述超驱动电压选取为高于能被编程到数据存储器单元的最大阈值电压。超驱动电压与阈值电压之间的差也可称为超驱动。在向选定字线施加字线电压之后,测量存储器单元的传导电流以确定所述存储器单元是否响应于施加至所述字线的电压而导通。如果经测量所述传导电流大于某一值,那么认为所述存储器单元导通且施加至所述字线的电压大于存储器单元的阈值电压。如果经测量所述传导电流不大于所述某一值,那么认为所述存储器单元未导通且施加至所述字线的电压不大于存储器单元的阈值电压。
在读取或检验操作期间,可通过许多方式测量存储器单元中的传导电流。在一个实例中,通过存储器单元使感测放大器中的专用电容器放电或充电的速率来测量所述存储器单元的传导电流。在另一实例中,选定存储器单元的传导电流允许(或未能允许)包含所述存储器单元的NAND串使位线上的电压放电。一时间周期之后测量所述位线上的电压以了解其是否已被放电。关于读取数据的更多细节可在美国专利公开案2006/0221683中发现,此公开案的全文以引用方式并入本文中。
图11A到D描绘一种四遍编程过程,其用于将数据编程到存储四个数据位(如在图6或图7中所描绘)的存储器单元中。在编程之前,将一区块中的所有存储器单元擦除为经擦除阈值电压分布(参见图10中的步骤500)。例如,图11A显示处于经擦除阈值电压分布E的存储器单元区块。在一些实施例中,经擦除阈值电压分布E低于0伏。在另一些实施例中,经擦除阈值电压分布E高于0伏,或部分地高于0伏。可通过升高源极电压及借此诱发倾向于升高阈值而不改变浮动栅极上的电子数目的逆向本体偏压来将负阈值电压分布移入正电压区域中。此通过施加逆向本体偏压来改变阈值电压归因于众所周知的本体效应现象。在大多数NAND存储器的上下文中,P阱构成所述本体。为了简化图,图11A到11D中的Vt轴相对于实际VT轴发生移位以使得所有VT看上去为正。实际中,可通过使用逆向本体偏压来升高所述VT使其高于0来读取负VT,且可在不升高本体偏压的情形下来读取正VT,在此情形下,最大正VT将为大约4V且未高到如所述图中的经移位Vt轴所反映的6V或6V以上。
在图11B中描绘第一遍编程。在第一编程脉冲期间,那些最终将被编程为数据状态0到7的存储器单元将被编程为低于状态0的阈值电压分布的低阈值电压分布。例如,图11B显示将那些存储器单元编程为中间阈值电压分布LM01。将最终将被编程为数据状态8到15的存储器单元群组编程为中间阈值电压分布(在图11B上标示为LM02)。在一个实施例中,阈值电压分布LM02不大于数据状态7的阈值电压。在此第一遍的编程脉冲之间,执行两个检验操作:一个针对LM01且一个针对LM02。因此,在编程脉冲之间,将使用两个检验脉冲。从所述编程过程开始直到至少一个存储器单元达到LM01(此时,所述系统将使用两个检验脉冲)可仅使用一个检验脉冲(仅用于LM01)。在其它实施例中,第一遍编程可编程为两个以上阈值电压分布。在一个实施例中,将数据擦除为状态0且最终将被编程为数据状态8到15的存储器单元将被编程为中间阈值电压分布,而最终将被编程为数据状态0到7的存储器单元将仍处于状态0。在另一实施例中,LM01可稍微与经擦除的阈值电压分布E重叠,因为ECC能处理一定百分比的发生错误的存储器单元。因此,此遍编程可在除K个位之外的所有位已通过检验时结束,其中K为可由ECC校正的数目。
在图11C中描绘第二遍编程。那些将被编程为数据状态0到3的存储器单元将自LM01编程为阈值电压分布LM11。例如,图11C显示阈值电压分布LM01(虚线)及LM11(实线)。最终将被编程为数据状态3到7的存储器单元将自LM01编程为中间阈值电压分布LM12。最终将被编程为数据状态8到11的存储器单元将自LM02编程为中间阈值电压分布LM13。那些最终将被编程为数据状态12到15的存储器单元将自LM02编程为中间阈值电压分布LM14。在第二遍编程期间,在编程脉冲之间需要执行多达四个检验操作:一个针对LM11的检验操作,一个针对LM12的检验操作,一个针对LM13的检验操作,及一个针对LM14的检验操作。因此,在每一编程脉冲之间,将存在多达四个检验脉冲。在一些实施例中,可通过使用一种确定何时可由于没有存储器单元接近特定目标而省略一些检验脉冲的智能方案来减少检验脉冲的数目。可使用各种方案。关于有效检验方案的更多信息可发现于美国专利7,073,103中,所述专利的全文以引用方式并入本文中。由于ECC可处理一定百分比的发生错误的存储器单元,因此在另一实施例中,LM11可与LM12重叠,且LM13可与LM14重叠。另外,LM12可与LM01或LM02重叠,且LM14可与LM02重叠。因此,此遍编程可在除K个位之外的所有位已通过检验时结束,其中K为可由ECC校正的数目。
在图11D中描绘第三遍编程。那些最终将被编程为数据状态0与1的存储器单元将自LM11编程为中间阈值电压分布LM21。那些将被编程为数据状态2与3的存储器单元将自LM11编程为中间阈值电压分布LM22。那些将被编程为数据状态4与5的存储器单元将自LM12编程为中间阈值电压分布LM23。那些将被编程为数据状态6与7的存储器单元将自LM12编程为中间阈值电压分布LM24。那些将被编程为数据状态8与9的存储器单元将自LM13编程为中间阈值电压分布LM25。那些将被编程为数据状态10与11的数据单元将自LM13编程为中间阈值电压分布LM26。那些将被编程为数据状态12与13的数据单元将自LM14编程为中间阈值电压分布LM27。那些将被编程为数据状态14与15的存储器单元将自LM14编程为中间阈值电压分布LM28。由于ECC可处理一定百分比的发生错误的存储器单元,因此在另一实施例中,相邻LM2x分布可彼此重叠(例如,LM26可与LM25重叠)。另外,LM2x分布也可与LM1x分布重叠(例如,LM26可与LM13重叠)。因此,此遍编程可在除K个位之外的所有位已通过检验时结束,其中K为可由ECC校正的数目。
在图11E中描绘第四遍编程。在第四遍编程中,将要被编程为数据状态0的存储器单元自LM21编程为数据状态0。将要被编程为数据状态1的存储器单元自LM21编程为数据状态1。将要被编程为数据状态2的存储器单元自LM22编程为数据状态2。将要被编程为数据状态3的存储器单元自LM22编程为数据状态3。将要被编程为数据状态4的存储器单元自LM23编程为数据状态4。将要被编程为数据状态5的存储器单元自LM23编程为数据状态5。将要被编程为数据状态6的存储器单元自LM24编程为数据状态6。将要被编程为数据状态7的存储器单元自LM24编程为数据状态7。将要被编程为数据状态8的存储器单元自LM25编程为数据状态8。将要被编程为数据状态9的存储器单元自LM25编程为数据状态9。将要被编程为数据状态10的存储器单元自LM26编程为数据状态10。将要被编程为数据状态10的存储器单元自LM26编程为数据状态11。将要被编程为数据状态12的存储器单元自LM27编程为数据状态12。将要被编程为数据状态13的存储器单元自LM27编程为数据状态13。将要被编程为数据状态14的存储器单元自LM28编程为数据状态14。将要被编程为数据状态15的存储器单元自LM28编程为数据状态15。如以上相对于图7所论述,另一实施例包含重叠的数据状态0到15。其它实施例可包含彼此重叠的中间LM状态,特别在直到整个区块经历完整个编程序列为止,数据的二进制版本仍然存在。
在一个实施例中,当接收编程数据的请求时,所述请求伴随有所有四页的数据以使得可将一字线上的所有存储器单元编程为数据状态0到15的任何一者。在所述情形下,基于所接收的数据执行图11A到D中的四遍编程。
在另一实施例中,存储器系统一次可接收少于所有四个页。在所述情形下,可最初将存储器单元写作二进制存储器单元,其中每一数据页被写入不同区块中。将存储器擦除成为经擦除状态且将一个数据位编程到存储器单元中以使得一些存储器单元仍处于经擦除状态(数据1)且一些存储器单元将处于经编程状态(数据0)。当接收第一存储器页时,将所述数据以二进制模式写入第一存储器单元区块中。当接收第二数据页时,将所述数据写入第二存储器单元区块中。当接收第三数据页时,将所述数据页以二进制形式写入第三存储器单元区块中。当接收第四数据页时,将所述数据以二进制形式写入第四存储器单元区块中。一旦写入所有四个区块,系统便可通过使用图11A到D的四遍编程过程对每一存储器单元编程四个数据位来将所有四个区块重写入一个区块中。
在另一实施例中,逐页地写入一个二进制区块直到完全写入所述区块为止。然后,,逐页地写入另一个二进制区块直到也完全写入所述区块为止。随后,以与前两个区块相同的方式写入第三个二进制区块及第四个二进制区块。当四个完成的二进制区块变得可用时,便将所述四个区块中的数据压缩并以每存储器单元4个位的形式写入区块中。在一个实施例中,首先将来自所述二进制区块的数据发送到其中执行二进制ECC解码的控制器芯片,且随后除执行数据置乱之外,还执行适合每单元16个状态的另一类型ECC编码,且将新数据发送回到用于欲写入的每单元4个状态的区块的存储器芯片。
图12是描绘用于编程连接到一选定字线的存储器单元的编程过程的流程图。许多不同编程技术可用于本发明。在一个实施例中,由控制电路220及/或在控制电路220指示下(状态机222提供控制且功率控制226提供合适信号)及/或在控制器244的指示下执行图10中的过程。在一个实施例中,图12中的过程用来对连接到(例如,通过其控制栅极)一个字线的存储器单元执行图11A到E中的四遍编程过程中的一遍。
在步骤624中,由控制器244发布“数据加载”命令,并将此命令输入到状态机222。在步骤626中,向解码器电路提供指示页地址的地址数据。在步骤628中,针对(多个)已寻址页输入一页编程数据以供编程。例如,在一个实施例中可输入528个数据字节。将所述数据锁存在选定位线的合适寄存器/锁存器中。在一些实施例中,也可将所述数据锁存在用于选定位线的第二寄存器内以供检验操作之用。在步骤630中,从控制器244接收“编程”命令并提供给状态机222。由“编程”命令触发后,使用一组施加至合适字线的脉冲将在步骤628中锁存的数据编程到由状态机222控制的选定存储器单元中。在步骤732中,由状态机222维持的编程计数器PC初始化为0。
在一些实施例中,至少一个多遍编程子组将包含识别与实现相应编程过程的特定结果相关联的编程脉冲及使用所述所识别的编程脉冲来调节非易失性存储元件的随后编程过程的编程。在一个实例中,系统将识别导致第一存储器单元达到其目标的编程脉冲。在另一实例中,系统将识别使第一N个存储器单元达到其目标的编程脉冲,其中N为少于可由ECC校正的错误量的数目。所述已识别的脉冲将具有一量值。在一个实施例中,将随后一遍编程的第一脉冲的量值设定为与已识别脉冲的量值相同。例如,如果第一遍编程的第四个编程脉冲导致第一存储器单元达到其目标且所述第四个编程脉冲的量值为14伏,那么第二遍编程的第一个编程脉冲的量值将被设定为14伏。以此方式,在一遍编程中所观察的行为可影响随后一遍编程。
在其它实施例中,可执行其它变体。例如,可基于前一遍中已识别的脉冲来设定随后一遍的第一脉冲,但不用使其量值精确地相等。
另外,来自前一遍编程的编程脉冲可与不同于(多个)第一存储器单元达到其目标的事件相关联。例如,可在存储器单元达到中间电平或其它状况时识别编程脉冲。
因此,当开始一遍新编程时,系统将存取识别与实现预定义的特定结果相关联的来自前一遍编程的编程脉冲的信息(步骤634)。系统将从寄存器、快闪存储器单元或其它非易失性存储装置中读取识别脉冲的信息。在一个实施例中,对于多遍编程过程的第一遍不执行步骤634,并取决于装置特征将第一编程脉冲的初始量值设定为10到17伏的额定值。
在步骤636中,基于从前一遍编程中所识别并在步骤634中读取的脉冲来设定编程信号Vpgm的第一编程脉冲的量值。在步骤640中,将编程信号Vpgm的一个脉冲施加至选定字线。
在步骤642中,使用适合的一组目标电平来检验选定存储器单元的数据状态。如果检测到选定存储器单元的阈值电压已达到合适目标电平,那么通过升高所述存储器单元的位线电压将所述存储器单元封锁以不再针对图10的剩余过程执行进一步编程。也可使用其它封锁技术。
如果在此遍编程期间第一次检测到经编程的第一N(其中N可为1或更多)个存储器单元已达到其目标数据状态,那么在步骤644中,将关于此编程脉冲的信息存储(步骤646)于例如快闪存储器单元或寄存器的非易失性存储装置中。此是将用来设定下一遍编程的第一脉冲量值的脉冲。在一个替代实施例中,通过确定N个存储器单元是否由于其已达到其目标状态而从非封锁改变为封锁以不进行进一步编程来执行步骤644。在一些实施例中,将不对以下存储器单元执行步骤644的分析:自LM01编程为LM11、自LM02编程为LM13、自LM11编程为LM21、自LM12编程为23、自LM13编程为LM25及自LM14编程为LM27的存储器单元。在一个实施例中,对于多遍编程过程的最后一遍不执行步骤644及646。
在步骤646之后,所述过程继续到步骤648。如果当前脉冲在此遍编程期间并非第一次使经编程的第一N个存储器单元达到其目标数据状态,那么所述过程会不经执行步骤646而继续到步骤648。
如果所有经编程的存储器单元均已达到其目标数据状态(步骤648),那么所述编程过程完成并成功。在步骤650中报告“通过(PASS)”状态。应注意,在步骤648的一些实施案中,检查是否至少预定数目的存储器单元已经检验为达到其目标状态。此预定数目可小于所有存储器单元的数目,由此允许在所有存储器单元达到其适合检验电平之前停止编程过程。未成功编程的存储器单元可在读取过程期间使用错误校正来校正。
如果在步骤648中确定并非所有存储器单元已经达到其目标状态,那么继续所述编程过程。在步骤660中,对照编程限值来检查编程计数器PC。编程限值的一个实例为20;然而,在各种实施案中可使用其它值。如果编程计数器PC不小于编程限值,那么在步骤666中确定未成功编程的存储器单元数目是否等于或小于预定数目。如果未成功编程的存储器单元数目等于或小于所述预定数目,则将所述编程过程标记为通过并在步骤668中报告通过(PASS)状态。在许多情形下,未成功编程的存储器单元可在读取过程中使用错误校正来校正。然而,如果未成功编程的存储器单元数目大于所述预定数目,那么将所述编程过程标记为失败并在步骤670中报告失败(FAIL)状态。如果在步骤660中确定编程计数器PC小于编程限值,那么在步骤662中,下一Vpgm脉冲的量值增加一步长大小且递增编程计数器PC。在步骤662之后,此过程循环回到步骤640以施加下一Vpgm脉冲。
编程信号Vpgm的编程脉冲具有以一步长大小增加的渐增量值。在一个实施例中,所述步长大小为常数以使得每一遍编程中的每一脉冲从其前一脉冲增加相同步长大小。在另一实施例中,每一遍编程(或一子组多遍编程)将利用不同步长大小(参见步骤652)。例如,第一遍编程将具有0.4伏的步长大小;第二遍编程将具有0.7伏的步长大小;第三遍编程将具有0.35伏的步长大小;且第四遍编程将具有0.17伏的步长大小。也可使用其它值。
在替代实施例中,将仅在第一遍编程期间执行步骤644及步骤646。因此,随后三遍编程将使用基于所述第一遍编程的第一编程脉冲的量值。
针对每一遍编程执行一次图12中的过程。在其中有64个字线及每个字线四遍编程的情形下,针对每一区块可执行4×64次图12中的过程。
图12A显示具有一组编程脉冲680的编程电压信号Vpgm的一个实例,所述编程脉冲的量值以一步长大小增加。所述步长大小由线684与线686之间的空间说明。检验脉冲(例如,检验脉冲682)在编程脉冲之间。图12A显示可用于区分四个数据状态的三个检验脉冲。仅描绘三个脉冲以使此图易读。在使用十六个数据状态的一个实施例中,在编程脉冲之间可存在多达15个检验脉冲。再返回观察图12,步骤640包含施加一个编程脉冲680而步骤642包含施加一组检验脉冲(例如,多达十五个的一组脉冲)682。
图13描绘用于在一存储器区块的不同字线上编程不同遍编程的次序。例如,图13将初始操作识别为在字线WL0上执行第一遍(图11B),后面是在字线WL1上执行第一遍,后面是在字线WL0上执行第二遍(图11C),后面是在字线WL2上执行第一遍,后面是在字线WL1上执行第二遍,后面是在WL0上执行第三遍(图11D),后面是在WL3上执行第一遍,...后面是在字线WL63上执行第四遍(图11E)。由图13描绘的多遍编程序列称为对角线序列过程,因为所述次序沿图13中图表的对角线进行。在其它实施例中,也可使用其它序列。
在一个实施例中,每一遍可对应于一页数据。例如,观察图8及图11B,如果下部页接收数据1,那么将存储器单元编程为LM01,且如果下部页接收数据0,那么将存储器单元编程为LM02。因此,在第一遍编程之后,可基于存储器单元的阈值电压是处于LM01还是LM02来读取下部页数据为1还是为0。第二遍编程可与上部页数据的编程相关。例如,观察图8及图11C,如果第二上部页数据为数据1,那么将存储器单元编程为LM11或者LM13。如果上部页数据为数据0,那么将存储器单元编程为LM12或LM14。通过测试存储器单元的阈值电压在哪一阈值电压分布内,可读取第二页数据以及第一页数据。第三遍编程可对应于编程较高页数据。例如,为数据1的较高页数据将存储于LM21、LM23、LM25及LM27中。数据0将存储于LM22、LM24、LM26或LM28中。第四遍可对应于将顶部页数据编程为合适数据状态。
图14为描绘在使用软编程结果来调节多遍编程的替代实施例中操作非易失性存储器的过程的流程图。在步骤700中,擦除一存储器单元区块。在步骤702中,执行软编程。软编程过程可包含执行经一些稍微修改的图12的过程。将不需要执行步骤634且步骤636常常会将初始脉冲电压设定于某个额定值(例如,取决于装置表征而设定在10伏与17伏之间)。当N个存储器单元由于已达到经擦除存储器单元的合适目标阈值电压分布而被封锁不再进行软编程时,将在图12的步骤646中存储对所述编程脉冲的识别。可将识别编程脉冲的信息存储于寄存器中或快闪存储器单元中。在步骤704中,接收编程数据的请求。在步骤702与704之间存在虚线,其指示在一时间周期之间可执行插入步骤。在一些实施例中,可在未接收编程数据请求的情形下编程数据。在步骤706中,使用图11A到E中的多遍编程过程(或另一多遍编程过程)将数据编程在偏离经擦除阈值电压分布的存储器单元中。在图14中的每一遍编程中,基于在步骤702的软编程过程中所观察的行为设定第一编程脉冲的量值。在步骤708中,从存储器单元读取数据。在一个实施例中,如在图14中所描绘,与擦除存储器单元相关联执行软编程。在其它实施例中,可与编程(例如,响应于编程请求)相关联执行软编程。
图15提供执行图14中的步骤706的流程图的实例。图15中的步骤824到832与图12中的步骤624到632相同。在步骤834中,系统读取在图14的步骤702中存储的来自所述遍软编程的编程脉冲的识别。在步骤836中,基于在步骤834中读取的经识别脉冲设定编程信号Vpgm的第一编程脉冲的量值。在一个实施例中,将当前遍编程的第一编程脉冲的量值设定为与在步骤834中读取的脉冲的量值相同。因此,在步骤834中读取的信息可包含量值信息、脉冲数目信息(根据所述信息可计算出量值)或可用来识别合适量值的其它信息。在步骤840中,将编程脉冲施加至选定用于编程的字线。在步骤842中,检验沿选定字线的存储器单元。如果所有或一预定数目的存储器单元通过所述检验(步骤844),那么在步骤846中所述过程完成且成功(状态=通过)。如果未检验所有或足够数目的存储器单元,那么在步骤860中确定编程计数器是否低于预定限值。如果低于所述预定限值,那么在步骤862处使编程信号Vpgm的电压量值增加一步长大小且也使编程计数器增加。如以上所述,所述步长大小可基于正在执行哪遍编程而变化。在步骤862之后,所述过程循环回到步骤840且施加下一个编程脉冲。如果在步骤860中确定编程计数器大于预定限值且未成功编程的存储器单元数目小于预定数目(步骤866),那么在步骤868中所述过程成功完成(状态=通过)。否则,如果未成功编程的存储器单元数目不小于或等于所述预定数目(步骤866),那么在步骤870中所述过程失败。
针对每一遍编程执行一次图15中的过程。在其中存在64个字线及每个字线四遍编程的情形下,针对每一区块可执行4×64次图15中的过程。
图16提供另一实施例的流程图,所述实施例使用软编程过程来确定单遍编程过程的编程信号的初始量值。在步骤880中,擦除一存储器单元区块。在步骤882中,执行软编程且系统存储与当N个存储器单元检验为经擦除阈值电压分布时相关联的编程脉冲的识别。如以上所论述,取决于装置建置,N可等于1、2、...。图16的步骤882与图14的步骤702相同。在步骤884中,接收编程数据的请求。在步骤886中,使用单遍编程过程将数据编程到从经擦除阈值电压分布到数据状态中的任一者的存储器单元中。在步骤888中,读取存储器单元并向用户提供数据。
在一个实施例中,通过针对每一字线实施一次图15中的过程来执行步骤886。即,对每一字线执行一遍。在一个实施例中,步骤880将存储器单元编程为经擦除阈值电压分布E且步骤886将存储器单元从经擦除阈值电压分布E编程为数据状态0到15中的任一者。在另一实施例中,步骤880将存储器单元擦除为数据状态0且步骤886将所有存储器单元或一子组存储器单元从数据状态0编程为数据状态1到15中的任一者。
图17是描绘使用软编程过程来改变编程过程的检验部分来操作存储器单元的过程的一个实施例的流程图。在步骤902中,擦除一区块的存储器单元。在步骤904中,执行软编程过程。在一个实施例中,可将存储器单元擦除为经擦除阈值电压分布E。在其它实施例中,可将存储器单元擦除为数据状态0。在软编程期间,系统将识别第N个(其中N等于1或更大)经检验为适合经擦除阈值电压分布的存储器单元的编程脉冲。系统也将识别何时除P个存储器单元之外(其中p等于0或更大)的所有存储器单元通过检验。可基于ECC及/或装置特征来选取N值与P值。通过了解以上所论述的两个脉冲,可估计存储器单元的正常阈值电压分布。例如,如果N等于2,P等于8,且步长大小为0.4伏,那么正常阈值电压分布为(8-2)×0.4=2.4伏。此信息允许确定在每一编程脉冲之后所需的检验操作数目。例如,尽管存在16个数据状态,但检验操作的数目可减少到每一编程脉冲(2.4+0.3)/0.35=8个检验。前几个及后几个编程脉冲甚至可具有少于8次的检验操作。在以上等式中,0.3表示编程噪声容限且0.35表示一个实例实施案的状态到状态阈值电压分离。
在步骤906中,将两个经识别的编程脉冲存储于非易失性存储器件中(例如,寄存器、快闪存储器单元等)。在步骤906中,系统基于如以上所论述的两个经识别脉冲来计算阈值电压分布的近似值。在步骤910中,系统将基于以上所论述的阈值电压分布的近似值及步长大小来计算并存储所需的检验脉冲的最大数目。在步骤912中,接收编程数据的请求。在步骤910与步骤912之间的虚线指示不可预知的时间量且可在步骤910与912之间执行插入操作。在步骤914中,使用单遍编程过程将数据编程于存储器单元中。在另一实施例中,步骤914可包含实施多遍编程过程。在步骤916中,自存储器单元中读取数据并向用户或主机报告。
可使用图15的过程来实施步骤914;然而,当执行单遍编程过程时,在每一遍中步长大小将不改变。更确切地说,其将保持为基于装置特征所确定的恒定值(例如,0.1到0.4伏)。在一个实施例中,图17的过程也可包含如以上所论述基于软编程来设定初始编程脉冲的量值。在一个实施例中,按照从最靠近源极线的字线开始并向位线触点工作的次序来编程字线;例如,从WL0处开始且在WL63处结束。因此,在单遍编程过程中将执行64次图15的过程,每一字线一次。
图18是当使用图15的过程来实施图17的步骤914时,用于实施图15的步骤842的过程的一个实施例。图18的过程实施以下概念:将仅使用有限组脉冲进行检验,其中所述有限组(可能)小于全组。相对于以上关于图17所述的实例,在编程脉冲之间将仅使用不超过8个检验脉冲而不是所有15个检验脉冲。然而,所施加的所述组8个检验脉冲基于存储器单元的正常阈值电压分布及编程过程的当前状态而随时间改变。一旦系统了解存储器单元的正常阈值电压分布宽度,其就会估计所述正常阈值电压沿图6图表的分布。
图17的步骤910计算检验脉冲的最大数目。此确定所述组检验脉冲的最大宽度。例如,如果检验脉冲的最大数目为8,那么图18中所预期的所述组检验脉冲包含多达8个检验脉冲。随着编程过程的继续(经过图15的各种迭代),所述组检验脉冲将移动以使得不同的检验脉冲成为所述组的一部分。例如,所述组可以仅包含数据状态0的检验脉冲开始。最终,将使所述组增大以使得其包含数据状态0到数据状态7的检验脉冲,后面是使所述组移动以使得其包含数据状态1到8的检验脉冲,然后是数据状态2到9等等。
在图18的步骤928中,基于检验脉冲的最大数目且基于在当前编程过程中任一存储器单元待达到的最高数据状态来识别所述组检验。在图18中,任一存储器单元待达到的最高数据状态称为状态X。所述组检验脉冲将包含所需用来检验是高于待达到的最高数据状态的一个状态的状态的检验脉冲及用于低于所述状态的状态的检验脉冲,但不大于已确定的检验脉冲的最大数目。在图18中,是高于待达到的最高数据状态的一个状态的状态称为状态X+1。例如,如果编程过程刚开始,那么待达到的最高数据状态可以是状态E,因此所述组检验脉冲将仅包含用于状态0的检验脉冲。如果存储器单元仅达到状态5且已确定的检验脉冲的最大数目为8,那么所述组检验脉冲将包含状态0到6的检验脉冲。如果编程过程进行了大部分,存储器单元已经达到状态7,且已确定的检验脉冲的最大数目为8,那么所述组检验脉冲将包含状态8到1的检验脉冲。如果存储器单元已达到状态10且已确定的检验脉冲的最大数目为8,那么所述组检验脉冲将包含状态4到11的检验脉冲。如果存储器单元已达到状态13且已确定的检验脉冲的最大数目为8,那么所述组检验脉冲将包含状态7到14的检验脉冲。
在步骤930中,将在步骤928中识别的所述组检验脉冲的最低检验脉冲施加至选定字线。将所述一个脉冲的量值设定为相应数据状态的检验电平。在一些实施例中,数据状态的检验电平等于所述数据状态的最低阈值电压(参见例如,图6中状态1的Vv1)。在步骤932中,感测编程脉冲的结果。即,确定所关注存储器单元(或单元)是已导通还是未导通。在步骤934中,将感测结果与每一存储器单元的数据相比较。如果要将存储器单元编程为刚刚检验的目标电平且其已达到所述电平,那么在步骤936中,通过升高所述存储器单元的位线电压来封锁所述存储器单元。在步骤938中,确定所述组检验脉冲内是否仍有还未施加的检验脉冲。如果没有,那么在步骤942中,确定是否所述存储器单元中的任一者已达到状态X+1。如果有,那么更新最高状态(状态X)的指示且图18的过程完成(也完成图15的步骤842)。如果所述组检验脉冲中仍有较多还未施加的检验脉冲(步骤938),那么在步骤940中施加下一个最高检验脉冲,且所述过程循环回到步骤932。例如,当在步骤928中所识别的所述组检验脉冲包含状态2到10的检验脉冲时,将执行8次图18的循环(步骤932到938)。
在编程数据之后,由于基于存储在邻近浮动栅极中的电荷的电场耦合,存储在浮动栅极上的视在电荷发生移位。此浮动栅极到浮动栅极耦合现象描述于第5,867,429号美国专利中,所述美国专利的全文以引用的方式并入本文中。耦合到目标浮动栅极的浮动栅极可包含位于同一位线上的相邻浮动栅极、位于同一字线上的相邻浮动栅极、或与目标浮动栅极成对角的浮动栅极(因为所述栅极既在相邻位线上又在相邻字线上)。
此浮动栅极到浮动栅极的耦合现象最明显地发生于不同时候被编程的邻近存储器单元组之间。例如,以在第一存储器单元浮动栅极上对应于一组数据的电荷电平来编程所述存储器单元。随后,以在一个或一个以上邻近存储器单元的浮动栅极上对应于第二组数据的电荷电平来编程所述一个或一个以上邻近存储器单元。在编程一个或一个以上邻近存储器单元之后,从第一存储器单元读取的电荷电平似乎不同于所编程的电荷电平,因为邻近存储器单元上的电荷耦合到所述第一存储器单元的效应所致。来自邻近存储器单元的耦合可使所读取视在电荷电平移为充足量从而导致对所存储的数据的错误读取。
一种解决浮动栅极耦合问题的尝试可发现于由Nima Mokhlesi(尼玛 木赫夕)在2006年3月17日申请的美国专利申请案11/377,972“System For Performing ReadOperation On Non-Volatile Storage With Compensation For Coupling(用于对非易失性存储器件执行补偿耦合的读取作业的系统)”中,此案的全文以引用方式并入本文中。所述申请案中所描述的系统包含在读取目标存储器单元时向相邻存储器单元施加补偿电压。
图19描绘当使用本文所述的四遍编程技术来编程存储器单元时限制浮动栅极耦合效应的过程。在典型的读取过程中,NAND串中经选择要被读取的存储器单元在其控制栅极处接收等于(或近似等于)两个相邻数据状态之间的阈值电压的电压。例如,为了确定存储器单元是否处于数据状态0中,所述存储器单元的控制栅极将接收Vr1(参见图6)。为了确定存储器单元是否处于状态1中,将执行两个读取操作:第一读取操作将向所述存储器单元施加Vr1且第二读取操作将向所述存储器单元施加Vr2(参见图6)。取决于所述存储器单元是否响应于控制栅极电压而导通或断开,使用逻辑来确定所述存储器单元处于何种状态中。
类似地,在检验过程中,将检验比较电压施加至将被检验的存储器单元的控制栅极。通常情况是所述检验比较电压将与数据状态的最低阈值电压类似。例如,数据状态1的检验电压将为Vv1。数据状态2的检验电压将为Vv2。当执行读取或检验过程时,NAND串上的未选定存储器单元将接收称为Vread的控制栅极电压,其比数据状态15的阈值电压高得多。此电压Vread(超驱动电压)将确保所有未选定存储器单元将导通并允许电流在所述NAND串中流动以使得所述NAND串的电流流动将仅由目标存储器单元来确定。
图19的过程提供一种读取已使用以上所述四遍编程过程编程的存储器单元的方法以限制自相邻浮动栅极的耦合。图18的过程中所应用的理论为:在读取过程期间,在相同NAND串上,目标存储器单元的漏极侧上的下一个存储器单元有时会基于其数据接收不同的电压以补偿浮动栅极耦合。例如,当读取连接到WL12的存储器单元时,连接到WL13的存储器单元将接收不同电压。在检验过程期间,除源极侧相邻存储器单元之外的所有存储器单元均会接收Vread,而所述源极侧相邻存储器单元会接收小于Vread的和A(例如,其中取决于装置特征A为1伏或另一值)。将此其它值指示为VreadX,其中VreadX=Vread-A。在检验期间,除相邻存储器单元将接收VreadX之外,所有未选定存储器单元将接收Vread。在随后读取过程中,如果源极侧相邻存储器单元为偶数状态(状态0、2、4、6、8、10、12、14),那么源极侧相邻存储器单元将接收VreadX而所有其它未选定存储器单元将接收Vread。然而,如果源极侧相邻存储器单元处于奇数状态(状态1、3、5、7、9、11、13、15)中,那么在读取过程期间,相邻存储器单元将接收Vread。此致使相邻存储器单元在为奇数状态时接收补偿。
再返回观察图11E,处于奇数状态的存储器单元比处于偶数状态的存储器单元从相应中间状态受到较强编程。因此,处于奇数状态的相邻存储器单元会具有较大耦合效应。如果使用图13的序列来执行四遍编程过程,那么在目标存储器单元的相邻者的前三遍编程之后但第四遍编程之前针对所述目标存储器单元执行第四遍编程。因此,仅相邻者的第四遍编程会致使目标存储器单元上浮动栅极到浮动栅极的耦合且取决于相邻存储器单元的第四遍编程是将所述存储器单元置于奇数还是偶数状态,需要使用二进制(开/关或低/高)补偿。
图19的步骤980包含接收读取特定字线WLn上的数据的请求。因此WLn是选定字线。在步骤982中,针对相邻字线WLn+1上的所有存储器单元执行读取过程。步骤982包含确定所有连接到WLn+1的存储器单元处在何种数据状态。在步骤984中,针对每一位线,存储WLn+1上的相邻存储器单元是处于偶数状态还是处于奇数状态的指示。此仅需要每一位线存储一个位(奇数/偶数)。例如,可使用一个位锁存器。在步骤986中,针对字线WLn执行读取过程。在步骤986的过程期间,向WLn+1施加Vread。步骤986包含执行以上所论述的补偿。在步骤988中,对于与处于奇数状态的相邻存储器单元相关联的那些位线,存储来自步骤986的读取过程的数据。例如,系统可检查所述一个位锁存器来判断其是否指示处于奇数状态的相邻者且,如果如此,那么存储步骤986的结果。那些具有处于偶数状态的相邻存储器单元的位线将不存储来自步骤986的读取过程的数据。在步骤990中,针对字线WLn执行读取过程,其中相邻字线WLn+1接收VreadX。在步骤992中,那些具有处于偶数状态的相邻存储器单元的位线的数据将存储来自步骤990的读取过程的数据。在步骤994中,将报告所存储的数据(步骤992或步骤988)。
出于例证及说明的目的,上文已呈现对于本发明的详细说明。其并非打算包罗无遗或将本发明限定于所揭示的具体形式。鉴于上述教示内容,可做出许多修改及改变。所述实施例的选取旨在最佳地解释本发明的原理及其实际应用,借以使所属领域的技术人员能够以适合于所构想具体使用的各种实施例形式及各种修改来最佳地利用本发明。本发明的范围打算由所附权利要求书来界定。