专利名称:检测过度编程的存储器的制作方法
技术领域:
本发明一般涉及用于存储器装置的技术,且更确切地说,本发明涉及检测存储器装置是否已过度编程。
背景技术:
半导体存储器装置在各种电子装置中的使用已变得越来越普遍。举例来说,非易失性半导体存储器用于蜂窝电话、数码相机、个人数字助理、移动计算装置、非移动计算装置和其它装置中。电可擦除可编程只读存储器(EEPROM)和快闪存储器是其中最普遍的非易失性半导体存储器。
典型的EEPROM和快闪存储器利用具有一浮动栅极的存储器单元,所述浮动栅极提供于一半导体衬底中的通道区上并与所述通道区绝缘。所述浮动栅极定位于源极区与漏极区之间。一控制栅极提供于浮动栅极上并与所述浮动栅极绝缘。存储器的阈电压由保持在浮动栅极上的电荷量来控制。即,接通存储器单元以允许其源极与漏极之间的传导之前所必须施加到控制栅极的最低电压量由浮动栅极上的电荷电平来控制。
某些EEPROM和快闪存储器装置具有一用于存储两个电荷范围的浮动栅极,且因此可在两个状态之间编程/擦除存储器单元。当编程EEPROM或快闪存储器装置时,施加一编程电压到控制栅极并将位线接地。将来自p阱的电子注入到浮动栅极中。当电子在浮动栅极中聚集时,浮动栅极变为带负电且存储器单元的阈电压升高。
通常,施加到控制栅极的编程电压是以脉冲序列的方式施加的。所述脉冲的量值随每一个脉冲而增加一预定步长。在脉冲之间的周期中,进行检验操作。即,在每一个编程脉冲之间读取正并行地编程的每一个单元的编程电平,以判定其是否等于或高于正编程的单元的检验电平。一种检验所述编程的方法是测试一特定比较点处的传导性。
传导表示装置的″接通″状态,所述状态对应于电流流过装置的通道。″关闭″状态对应于没有电流流过源极与漏极之间的通道。通常,如果施加到控制栅极的电压大于阈电压,那么快闪存储器就传导,且如果施加到控制栅极的电压小于阈电压,那么所述快闪存储器就不传导。通过将单元的阈电压设置到适当值,可使得所述单元在一给定组的施加电压下可传导或不可传导电流。因此,可通过判定单元在一给定组的施加电压下是否传导电流来判定所述单元的状态。
可通过在装置内识别多个不同的阈电压范围来制造多位或多状态快闪存储单元。每个不同的阈电压范围对应所述组数据位的预定值。被编程到存储器单元中的数据与所述单元的阈电压电平之间的特定关系取决于所述单元所采用的数据编码方案。举例来说,美国专利第6,222,762号和在2003年6月13日提出申请的″Tracking Cells For A MemorySystem″的美国专利申请案第10/461,244号描述了多种数据编码方案,二者的全文以引用的方式并入本文中。适当的数据存储要求多状态存储器单元的阈电压电平的多个范围彼此相差足够余量(margin),使得可以明确的方式来编程或擦除存储器单元的电平。
在许多状况下,举例来说,为了生产商业上所需要的可在合理时间量内编程的存储器系统,有必要并行地编程多个存储器单元。然而,当同一时间要编程许多存储器单元时会出现问题。这是因为由于包含存储器单元的半导体装置在结构和操作上存在微小变化,因此每个存储器单元具有不同的特征;因此,不同单元的编程速度通常会不同。这导致了某些存储器单元的编程过程可能会稍快于其它单元且某些存储器单元可能会编程为不同于预期状态的状态。多个存储器单元的较快编程可导致超出所要的阈电压电平范围,从而在正存储的数据中产生错误。
通常,当编程数据时,对装置进行检验处理能保证存储器单元的阈电压高于最低电平。然而,装置通常不能保证阈电压的上限。某些装置查看软件编程过程(下文所述)是否将阈电压升得过高;然而,这些装置不查看规则的编程过程是否将阈电压升得过高。因此,稍不注意就有可能发生升高阈电压以致超出所要状态的范围的过度编程。过度编程可导致存储器单元存储错误数据,从而导致随后的读取操作过程中的错误。可在美国专利第5,321,699号、第5,386,422号、第5,469,444号、第6,134,140号和第5,602,789号中找到有关过度编程的更多信息。
为了校正过度编程,许多存储器系统在随后的读取操作过程中使用错误校正码(″ECC″)。当从装置读取数据时,使用ECC来判定是否发生错误。如果所述错误很小,那么可使用ECC来校正所述错误。然而,当使用ECC来校正由于过度编程而产生的错误时,至少产生三个问题。第一,ECC过程需要大量处理时间,且因此大大减慢存储器系统的操作。第二,ECC需要附加的专用硬件以在合理的时间量内执行ECC。此种专用硬件可占用存储器系统芯片的大量空间。目前的研发趋势是减小存储器系统的尺寸以在系统中能放置更多的存储器单元且使得系统尽可能地小以适用于较小的主机装置。因此,新近的存储器设计通常正在减少可用于ECC的不动产(real estate)量。第三,如果存在多个错误,那么ECC便不能校正所述错误。
因此,需要一种改进的方法来检测存储器单元的过度编程。
发明内容
概括地来说,本发明属于用于检测存储器装置是否已被过度编程的技术。一旦检测到一个或一个以上存储器装置已被过度编程,那么系统可通过多种用于校正数据的已知方法中的任一种方法来加以校正所述情况。举例来说,系统可将数据重写到相同或不同的存储器装置。这种过度编程检测确保数据不会由于过度编程而发生错误,使得可减少对ECC的需要。
本发明的一个实施例包括一种用于在使用多个逻辑页的存储器系统中检测过度编程的方法。所述方法包括使用特定逻辑页的数据和来自不同逻辑页的数据编程第一多状态存储元件,以判定所述第一多状态存储元件是否过度编程。在一个实施中,所述系统判定所述第一多状态存储元件的阈电压是否大于比较值。如果所述第一多状态存储元件的阈电压大于所述比较值且不同逻辑页的数据指示所述第一多状态存储元件的阈电压不应大于所述比较值,那么系统推断出所述第一多状态存储元件被过度编程。在两个逻辑页被编程后执行过度编程检测。
本发明的另一实施例包括编程与第一控制线相关联的一个或一个以上多状态存储元件,且随后编程与第二控制线相关联的一个或一个以上多状态存储元件。在编程与第二控制线相关联的一个或一个以上多状态存储元件后,做出有关与第一控制线相关联的一个或一个以上多状态存储元件是否被过度编程的判定。所述控制线可为字线、位线或另一类型的控制线(视技术而定)。在一个实施例中,通过以下步骤来做出过度编程判定在与第一控制线相关联的多状态存储元件上执行读取操作以得到一个或一个以上过度编程范围的边缘;且如果与第一控制线相关联的多状态存储元件具有在所述过度编程范围中的一个范围内的阈电压,那么判定其被过度编程。在另一实施例中,通过以下步骤来做出过度编程判定在与第一控制线相关联的多状态存储元件上执行读取操作以得到一组一个或一个以上读取比较点,以判定与第一控制线相关联的多状态存储元件的初始状态;对与第一控制线和初始状态相关联的多状态存储元件执行错误校正码处理;且如果所述错误校正码处理对多状态存储元件失效,那么判定所述多状态存储元件被过度编程。
在又一实施例中,本发明包括对一第一多状态存储元件进行编程且对一第二多状态存储元件进行编程。系统在对所述第二多状态存储元件进行编程后判定所述第一多状态存储元件是否被过度编程。
在一个实施例中,实施本发明的系统包括一存储元件阵列和一管理电路。所述管理电路可包括专用硬件和/或可包括由存储于一个或一个以上存储器装置(例如,非易失性存储器(例如快闪存储器、EEPROM等)或其它存储器装置)上的软件编程的硬件。在一个实施例中,所述管理电路包括一控制器和一状态机。在另一实施例中,所述管理电路仅包括状态机而不包括控制器。所述管理电路可执行上文论述的步骤。在某些实施例中,由状态机来执行检验存储元件是否被过度编程的过程。在某些实施中,状态机与存储元件阵列处于同一集成电路芯片上。
本发明的这些和其它目标以及优点将从以下描述中更显而易见,其中结合附图阐述本发明的优选实施例。
图1是与非(NAND)串的俯视图。
图2是NAND串的等效电路图。
图3是NAND串的横截面图。
图4是描绘三个NAND串的电路图。
图5是其中实施了本发明的多个方面的非易失性存储器系统的一个实施例的方框图。
图6说明存储器阵列的构造的一个实例。
图7描绘列控制器电路的一部分。
图8描绘存储器单元的阈分布并说明用于编程多状态存储器单元的技术的一个实例。
图9是描述用于编程一存储器阵列的过程的一个实施例的流程图。
图10-13是描述用于执行过度编程检测的一组过程的一个实施例的流程图。
图14A和14B是描述用于编程和执行过度编程检测的过程的两个实施例的流程图。
图15A描绘存储器的阈分布。
图15B和15C是描述用于执行过度编程检测的过程的两个实施例的流程图。
图16描绘具有用于执行过度编程检测的另一组比较点的存储器的阈分布。
图17-22是执行过度编程检测的附加实施例的真值表。
具体实施例方式
快闪存储器系统的一个实例使用NAND结构,其包括在两个选择栅极之间串联排列多个晶体管。串联的晶体管和选择栅极称为NAND串。图1是显示一个NAND串的俯视图。图2是其等效电路。图1和图2中所描绘的NAND串包括四个串联的晶体管100、102、104和106,且所述四个晶体管夹在第一选择栅极120与第二选择栅极122之间。选择栅极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。
图3提供上述NAND串的横截面图。如同图3中所描述,NAND串的晶体管(又称作单元或存储器单元)形成于p阱区140中。每个晶体管包括由控制栅极(100CG、102CG、104CG和106CG)与浮动栅极(100FG、102FG、104FG和106FG)组成的一堆叠栅极结构。所述浮动栅极形成于氧化物薄膜顶端上的p阱表面上。控制栅极位于浮动栅极上方,其中氧化物层分隔控制栅极与浮动栅极。应注意的是,图3似乎描述了晶体管120和122的控制栅极和浮动栅极。然而,对于晶体管120和122来说,控制栅极与浮动栅极是连接在一起的。存储器单元(100、102、104、106)的控制栅极形成字线。相邻单元之间共享N+扩散层130、132、134、136和138,借此所述这些单元彼此串联连接以形成一NAND串。这些N+扩散层形成每个单元的源极和漏极。举例来说,N+扩散层130充当晶体管122的漏极并充当晶体管106的源极,N+扩散层132充当晶体管106的漏极并充当晶体管104的源极,N+扩散区134充当晶体管104的漏极并充当晶体管102的源极,N+扩散区136充当晶体管102的漏极并充当晶体管100的源极,且N+扩散层138充当晶体管100的漏极并充当晶体管120的源极。N+扩散层126连接到所述NAND串的位线,而N+扩散层128连接到多个NAND串的共用源极线。
应注意的是,尽管图1-3显示NAND串中的四个存储器单元,但是仅提供使用四个晶体管的作为实例。一NAND串的存储器单元的个数可少于四个或多于四个。举例来说,某些NAND串将包括8个存储器单元、16个存储器单元、32个存储器单元等。本文的讨论并不受限于NAND串中的任何特定个数的存储器单元。
使用NAND结构的快闪存储器系统的典型构造将包括若干NAND串。举例来说,图4显示具有更多的NAND串的存储器阵列的三个NAND串202、204和206。图4的每个NAND串包括两个选择晶体管和四个存储器单元。举例来说,NAND串202包括选择晶体管220、230和存储器单元220、224、226、228。NAND串204包括选择晶体管240、250和存储器单元242、244、246、248。每一串通过其选择晶体管(例如,选择晶体管230和选择晶体管250)连接到源极线。选择线SGS用于控制源极侧的选择栅极。各个NAND串通过选择晶体管220、240等连接到各自的位线,其中所述选择晶体管由选择线SGD控制。在其它实施例中,未必需要共用选择线。字线WL3连接到存储器单元222和存储器单元242的控制栅极。字线WL2连接到存储器单元224、存储器单元244和存储器单元250的控制栅极。字线WL1连接到存储器单元226和存储器单元246的控制栅极。字线WL0连接到存储器单元228和存储器单元248的控制栅极。如同可看到的,每个位线和各自的NAND串包含存储器单元阵列的列。字线(WL3、WL2、WL1、和WL0)包含所述阵列的行。
每个存储器单元可存储数据(模拟或数字数据)。当存储一个位的数字数据时,存储器单元的可能的阈电压范围划分成两个范围,其分配为逻辑数据″1″和″0″。在NAND型快闪存储器的一个实例中,擦除存储器单元之后的阈电压为负,且被界定为逻辑″1″。编程操作之后的阈电压为正,且被界定为逻辑″0″。当阈电压为负且试图读取时,存储器单元将会接通以指示正在存储逻辑1。当阈电压为正且试图读取操作时,存储器单元将不会接通,其指示逻辑0被存储。存储器单元还可存储多个信息电平,例如,多个位的数字数据。在存储多个数据电平的状况下,可能的阈电压范围划分成数据电平的个数。举例来说,如果存储四个信息电平,那么会存在分配有数据值″11″、″10″、″01″和″00″的四个阈电压范围。在NAND型存储器的一个实例中,擦除操作之后的阈电压为负且被界定为″11″。正阈电压用于状态″10″、″01″和″00″。
下述美国专利/专利申请案中提供了NAND型快闪存储器的相关实例及其操作(所有申请案的全文以引用的方式并入本文中)美国专利第5,570,315号、美国专利第5,774,397号、美国专利第6,046,935号、美国专利第6,456,528号和美国专利申请案第09/893,277号(公开案第US2003/0002348号)。其它类型的快闪存储器装置也可与本发明一起使用。举例来说,下述专利描述或非型快闪存储器且所述专利的全文以引用的方式并入本文中美国专利第5,095,344号、第5,172,338号、第5,890,192号和第6,151,248号。美国专利第6,151,248号中可找到快闪存储器类型的另一实例,所述案的全文以引用的方式并入本文中。
图5是可用于实施本发明的快闪存储器系统的一个实施例的方框图。存储器单元阵列302由列控制器电路304、行控制器电路306、c源极控制器电路310和p阱控制器电路308来控制。列控制器电路304连接到存储器单元阵列302的位线,以用于读取存储于存储器单元中的数据、用于在编程操作过程中判定存储器单元的状态,且用于控制位线的电位电平以促进编程或禁止编程。行控制器电路306连接到字线以选择所述字线中的一个来施加读取电压、施加编程电压且施加擦除电压。C源极控制器电路310控制连接到存储器单元的共用源极线(图6中标记为″C源极″)。P阱控制器电路308控制p阱电压。
由列控制器电路304读出存储于存储器单元中的数据并经由数据输入/输出缓冲器312输出到外部I/O线。待存储于存储器单元中的编程数据经由外部I/O线输入到数据输入/输出缓冲器312,并传输到列控制器电路304。外部I/O线连接到控制器318。
将用于控制快闪存储器装置的命令数据输入到控制器318。命令数据通知快闪存储器所请求的是何操作。将输入命令传输到状态机316,其控制列控制器电路304、行控制器电路306、c源极控制器电路310、p阱控制器电路308和数据输入/输出缓冲器312。状态机316还可输出快闪存储器的状态数据,例如READY/BUSY或PASS/FAIL。
控制器318连接到或可连接到主机系统,例如个人计算机、数码相机、个人数字助理等。控制器318与主机通信以接收来自主机的命令、接收来自主机的数据、向主机提供数据并向主机提供状态信息。控制器318将来自主机的命令转换成可由命令电路314解译并执行的命令信号,其中所述命令电路314与状态机316进行通信。控制器318通常含有缓冲存储器,其用于写入到存储器阵列或自存储器阵列读取的用户数据。
一个示范性存储器系统包含一个集成电路,其包括控制器318;和一个或一个以上集成电路芯片,其中每个集成电路芯片含有一存储器阵列和相关的控制、输入/输出和状态机电路。目前的研发趋势是将系统的存储器阵列和控制器电路一起集成在一个或一个以上集成电路芯片上。可将存储器系统嵌入作为主机系统的一部分,或可将其包括于一可移除地插入到主机系统中的存储器卡(或其封装)中。此类可移除卡可包括整个存储器系统(例如,包括控制器)或仅包括存储器阵列和相关的外围电路(控制器嵌入主机中)。因此,控制器可嵌入主机中或包括于可移除的存储器系统内部。
参看图6,其描述了存储器单元阵列302的实例结构。作为一个实例,其描述了分割为1,024个块的NAND快闪EEPROM。可同时擦除存储于每个块中的数据。在一个实施例中,块是可同时擦除的单元的最小单位。在此实例中,每个块中存在8,512个列,其划分为偶数列和奇数列。位线同样划分成偶数字线(BLe)和奇数字线(BLo)。图6显示串联连接以形成NAND串的四个存储器单元。尽管显示每个NAND串中包括四个单元,但是可使用的单元个数可多于四个或少于四个。NAND串的一个终端经由第一选择晶体管SGD连接到对应位线,且另一终端经由第二选择晶体管SGS连接到c源极。
在读取操作和编程操作过程中,同时选择4,256个存储器单元。所述选定的存储器单元具有相同字线和相同种类的位线(例如,偶数字线)。因此,可同时读取或编程532个字节的数据。这些同时读取或编程的532个字节的数据形成了一逻辑页。因此,一个块可存储至少8个逻辑页(4个字线,其中每个字线具有奇数页和偶数页)。当每个存储器单元存储两个比特的数据(例如,多电平单元)时,一个块可存储16页。具有其它尺寸的块和页也可与本发明一起使用。
通过将p阱升高到擦除电压(例如,20伏特)并将选定块的字线接地来擦除存储器单元。源极和位线是浮动的。可对整个存储器阵列、独立块或单元的另一单位执行擦除过程。从浮动栅极传输电子到p阱区且阈电压变为负。
在读取操作和检验操作中,将选择栅极(SGD和SGS)和未选择的字线(例如,WL0、WL1和WL3)升高到读通电压(read pass voltage)(例如,4.5伏特)以使所述晶体管可作为通过栅极来操作。选定字线(例如,WL2)连接到一电压,为每个读取操作和检验操作指定所述电压的电平以判定相关存储器单元的阈电压是否已达到此电平。举例来说,在对两个电平的存储器单元进行读取操作的过程中,可将选定字线WL2接地,使得可检测阈电压是否高于0V。在检验操作中,举例来说,将选定字线WL2连接到2.4V使得可检验阈电压是否已达到至少2.4V。源极和p阱处于零伏特。将选定位线(BLe)预先充电到(例如)0.7V的电平。如果阈电压高于读取电平或检验电平,那么相关位线(BLe)的电位电平由于非传导存储器单元而保持高电平。另一方面,如果阈电压低于读取电平或检验电平,那么相关位线(BLe)的电位电平由于传导存储器单元(M)而降低到低电平(例如,小于0.5V)。通过连接到位线的读出放大器来检测存储器单元的状态。是擦除存储器单元还是编程存储器单元之间的差别取决于负电荷是否存储于浮动栅极中。举例来说,如果负电荷存储于浮动栅极中,那么阈电压会变为更高且晶体管可处于增强模式中。
根据所属领域中的已知技术来执行上述擦除、读取和检验操作。因此,所属领域的技术人员可改变许多所解释的细节。
图7描绘图5的列控制器电路304的一部分。每一对位线(例如,BLe和BLo)耦接到读出放大器。读出放大器连接到三个数据锁存器第一数据锁存器402、第二数据锁存器404和第三数据锁存器406。三个数据锁存器中的每一个都能存储一个比特的数据。读出放大器在读取操作或检验操作过程中感测选定位线的电位电平、以二进制方式存储感测的数据并在编程操作过程中控制位线电压。通过选择″偶数位线″和″奇数位线″信号中的一个来选择性地连接读出放大器到选定位线。数据锁存器402、404和406耦接到I/O线408以输出读取数据并存储编程数据。I/O线408连接到图5的数据输入/输出缓冲器312。数据锁存器402、404和406同样耦接到状态线410以接收并发送状态信息。在一个实施例中,每一对位线(偶数位线和奇数位线)都具有读出放大器、第一数据锁存器402、第二数据锁存器404和第三数据锁存器406。
图8说明存储两个比特的数据(例如,四个数据状态)的存储器单元的阈电压分布。分布460表示处于擦除状态(存储″11″)的单元的阈电压分布,其具有负阈电压电平。分布462表示存储″10″的单元的阈电压分布。分布464表示存储″00″的单元的阈电压分布。分布466表示存储″01″的单元的阈电压分布。在此实例中,存储于单个存储器单元中的两个比特中的每个比特是不同逻辑页的部分。正方形中显示的比特对应于低页。圆形中显示的比特对应于高页。在一个实施例中,使用格雷(gray)码定向(11、10、00、01)来将这些逻辑状态分配给物理状态,使得如果浮动栅极的阈电压错误地变动,那么仅会影响一个比特。尽管图8显示四个状态,但是本发明所使用的状态个数可少于四个或多于四个。
为了提供改进的可靠性,较好的措施是使个别分布变得紧密(分布窄化),这是因为较紧密的分布会产生较宽的读取余量(状态之间的距离)。根据1995年关于VLSI(超大规模集成电路)技术的研讨会的摘要第129-130页的文章″Fast and Accurate ProgrammingMethod for Multi-level NAND EEPROMs″(所述文章以引用的方式并入本文中),在原理上,将分布限制为0.2V的宽度需要通常的重复编程脉冲在步长之间增加0.2V。为了使0.05V宽度内的分布变得紧密,需要0.05V的步长。采用编程电压的此种小步长增量来编程单元会导致编程时间的增加。
图8说明编程4-状态NAND存储器单元的双行程(two pass)技术的实例。在第一编程行程中,根据待编程为低逻辑页的比特来设置单元的阈电压电平。如果所述比特是逻辑″1″,那么阈电压不变,因为其由于早先已被擦除而处于适当的状态下。然而,如果待编程的比特是逻辑″0″,那么,如同箭头470所显示的,所述单元的阈电平增大到处于阈电压分布462内。那结束第一编程行程。
在第二编程行程中,根据正被编程为高逻辑页的比特来设置所述单元的阈电压电平。如果高逻辑页比特要存储逻辑″1″,那么不会发生编程过程,因为所述单元取决于低页比特的编程而处于对应于阈电压分布460或462的状态中的一个,所述阈电压分布460和462的都承载有高页比特″1″。如果高页比特将为逻辑″0″,那么阈电压被改变。如果第一行程导致所述单元保持对应于临限分布460的擦除状态,那么,在第二相位中编程所述单元,使得阈电压增大到处于阈电压分布466内,如箭头474所描绘。如果所述单元由于第一编程行程而已编程为对应于临限分布462的状态,那么,在第二行程中进一步编程所述存储器单元,使得阈电压增大到处于阈电压分布464内,如箭头472所描绘。第二行程的结果是将所述单元编程为被指定为高页存储逻辑″0″而不改变用于低页的数据。
应注意的是,尽管已将特定的比特模式分配给所述分布中的每一个,但是可分配不同的比特模式,在所述状况下,其间发生编程的状态可不同于图8中所描绘的状态。
通常,被并行地编程的单元是沿一字线的交替单元。举例来说,图4说明沿字线WL2的数目大得多的单元中的三个存储器单元224、244和250。一组交替单元(包括单元224和250)存储来自逻辑页0和2(″偶数页″)的比特,而另一组交替单元(包括单元244)存储来自逻辑页1和3(″奇数页″)的比特。在上述实例中,逻辑页0和1是低页,而逻辑页2和3是高页。
应注意的是,图8还显示读取比较点和检验比较点。举例来说,读取比较点包括Vr10、Vr00和Vr01。在读取操作过程中,将对应于Vr10、Vr00和Vr01的电压施加到存储器单元的控制栅极来判定所述存储器单元在哪一点处传导且在何点处不传导。基于所述三个读取操作,存储器系统可判定所述存储器单元处于哪个阈分布(例如,哪个状态)中。举例来说,如果存储器单元对所述三个读取操作中的任何一个都不传导,那么存储器单元处于状态01中。如果存储器单元仅在将Vr01施加到控制栅极时才传导,那么存储器单元处于状态00中。如果施加Vr00时存储器传导而施加Vr10时存储器不传导,那么存储器单元处于状态10中。如果施加Vr10、Vr00和Vr01时存储器单元传导,那么存储器单元处于状态11中。在一个实施例中,读取比较点Vr10、Vr00和Vr01中的每一个都是阈分布的相邻状态之间的中点。在编程过程中使用检验比较点Vr10、Vr00和Vr01来判定单元是否已充分编程。
图8还显示过度编程检验比较点VopSP、Vop10、Vop00和Vop01。这些过度编程检验比较点用于判定一特定存储器单元是否已被过度编程。举例来说,将VopSP施加到期望处于状态11下的存储器单元的控制栅极后,如果所述单元不传导,那么可判定所述单元被过度编程(过度软件编程)。如果期望所述单元处于状态10下,那么将Vop10施加到所述单元的控制栅极时,如果所述单元不传导(例如,接通),可推断所述单元被过度编程。当假设所述单元处于状态00下时,将Vop00施加到控制栅极时,如果所述存储器单元不传导,那么所述单元已被过度编程。当所述单元编程为状态01时,如果将Vop01施加到控制栅极时,如果所述单元不传导,那么可推断所述单元被过度编程。所述过度编程检验比较点中的每一个都稍低于相邻的读取比较点。举例来说,在一个实施例中,所述过度编程检验比较点低了50mV。在其它实施例中,检验比较点与相邻的读取比较点之间的差值可多于或少于50mV。在一个实施例中,由状态机316执行过度编程检验过程。
在编程过程的一个实施例中,在低页编程之前存储器单元首先被擦除(在块或其它单位中)。当编程过程开始时,由控制器从主机接收数据负载或写入命令。控制器向数据输入/输出缓冲器312和状态机316发布适当命令。控制器318接收一地址,其中写入数据到所述地址。将此地址映射到一特定逻辑页(或多个)和存储器单元阵列302中的实际地址。将地址数据从控制器318发送到数据输入/输出缓冲器312和(在某些实施例中)状态机316。然后,基于编程操作的地址将数据发送到适当的第一数据锁存器402。将来自第一数据锁存器402的数据载入对应的第二数据锁存器404中。响应来自控制器的编程命令,状态机316接着开始图9的流程图所描述的编程过程。
在步骤594中,状态机316判定数据被写入到高页还是低页。如果数据被写入到低页,那么过程在步骤600处继续。如果数据被写入到高页,那么状态机执行低页读取操作来判定步骤596中的低页数据。返回参看图8,高页编程包括将存储器单元编程为状态00或状态01。如果低页数据是逻辑″1″,那么高页编程过程包括将存储器单元编程为状态″01″(见图8的箭头474)。如果低页数据是逻辑″0″,那么高页编程过程包括将存储器单元编程为状态00(参考图8的箭头472)。因此,系统需要知道低页数据以判定在高页编程过程中必须将存储器单元编程为何状态。
在步骤596的一个实施例中,状态机在Vr10处执行读取操作。如果存储器单元传导(接通),那么低页的读取数据是″1″。如果存储器单元不传导(不接通),那么低页的读取数据是″0″。接着将低页数据存储于第三数据锁存器406中。应注意的是,可使用其它读取过程来读取低页数据且可将低页数据存储于除第三数据锁存器406之外的位置中。在将低页数据存储于第三数据锁存器406中之后,过程在步骤600处继续。
在步骤600中,状态机将编程脉冲施加到适当字线。在驱动第一脉冲之前,将编程电压初始化为起始脉冲(例如,12伏特),且将状态机所维持的编程计数器初始化为0。在步骤600的第一次迭代中,将第一编程脉冲施加到选定字线。如果逻辑″0″存储于特定的第一数据锁存器中,那么将所述存储器单元的对应位线接地。相反,如果逻辑″1″存储于特定的存储器单元的第一数据锁存器中,那么将对应位线连接到Vdd以抑制编程。2003年3月5日申请的题为″Improved Self Boosting Technique″的美国专利申请案第10/379,608号中可找到有关抑制编程的更多信息,所述案的全文以引用的方式并入本文中。
在步骤602中,检验选定的存储器单元。如果检测到选定单元的目标阈电压已达到其目标电平(例如,通过将读出放大器与第二数据锁存器的输出进行比较),那么将第二数据锁存器404中所存储的数据变为逻辑″1″。如果检测到所述阈电压没有达到适当电平,那么不改变第二数据锁存器404中所存储的数据。以此方式,不需要编程对应的第二数据锁存器404中存储有逻辑″1″的存储器单元。当所有第二数据锁存器都存储逻辑″1″时,状态机(经由线410)可了解到所有选定单元已被编程。因此,步骤604包括检验是否所有的第二数据锁存器404都存储逻辑″1″。如果是这样,那么完成编程的第一阶段且在步骤610中报告适当的状态消息。
如果在步骤604中判定并不是所有的第二数据锁存器404都存储逻辑″1″,那么继续编程过程。在步骤606中,检查编程计数器的编程限制值。编程限制值的一个实例是20。如果编程计数器并不小于20(例如,已执行的编程尝试的最大数目),那么编程过程失败(步骤608)并报告适当的状态消息。如果编程计数器小于最大值,那么编程电压电平增加了下一步长、编程计数器增加且编程过程在步骤600处继续以施加下一脉冲。
如果检验步骤在步骤604处成功,那么经编程的存储器单元的每一个应具有图8中所描绘的所述分布中的一个分布中的阈电压。然而,前述方法仅检验了正被编程的单元的阈电压最少与适当的检验比较点一样高。步骤602中所使用的检验比较点是目标阈分布中最低的可接受电压电平。举例来说,参看图8,步骤604的用于检验单元被编程为状态10的检验比较点是Vv10,用于编程为状态00的检验比较点是Vv00,且用于编程为状态01的检验比较点是Vv01。因此,上述过程检验所述编程过程并不是没有达到所要的状态。直到此点,还没有检查所述编程过程是否超出了所要的状态。举例来说,如果我们期望将存储器单元编程为状态10且将所述存储器单元的阈电压被编程为高于Vop10的任何值,那么所述存储器单元被过度编程。步骤620-676用于判定所述编程过程是否过度编程了所述存储器单元。
在步骤610之后,图9的过程分成了两个并行路径。如果所述编程过程编程低页,那么所述过程执行步骤620-644。如果编程过程编程高页,那么所述过程执行步骤660-676。可能某些单元将使一低页编程且相同的编程过程中的其它单元将使高页编程。因此,可对不同的存储器单元执行不同的步骤组。在另一实施例中,不管正在被编程的是低页还是高页,对正在编程的每一个单元都可执行步骤620-644和步骤660-676。
如果正在编程低页,那么执行620。步骤620在编程检验过程中包括软件编程过程。即,步骤620包括执行如下过程判定在擦除过程之后或作为擦除过程的一部分所执行的软件编程过程是否将所擦除的存储器单元的阈电压升高到可接受值之上。当存储器单元被擦除时,所述所擦除的存储器单元的阈电压有可能太低。为了补救太低的阈电压,执行软件编程过程以将所擦除的存储器单元的阈电压升高到可接受的电平。所述软件编程过程可能将阈电压升得太高使得所述存储器单元变为过度编程(例如,阈电压变为高于VopSP)。步骤620检测所述过度编程单元。在步骤622中,判定多个单元是否通过了620的软件编程过度编程检验过程。如果所有单元都没有通过,那么在步骤624中将返回一指示所述软件编程过度编程检验失败的状态。如果通过了步骤620的过程(因为在所述软件编程过程中没有单元被过度编程),那么在步骤638中执行状态10过度编程检验过程。
步骤638包括执行状态10过度编程检验过程。状态机判定期望处于状态10中的单元是否具有高于Vop10的阈电压。如果是这样,那么所述单元没有通过测试(步骤640)且返回一指示存在过度编程失败的状态(步骤642)。在一个实施例中,所述状态可包括指示其为状态10过度编程失败。在另一实施例中,还可返回高于可接受的电平的阈电压的量值。如果步骤638的过程未识别出被过度编程的存储器单元,那么在步骤644中返回状态″通过″。在步骤644的替代实施例中,所述过程可返回存在状态10过度编程检验通过。
如果高页被编程,那么所述过程在步骤660中执行状态00过度编程检验过程。系统进行检查以判定期望处于状态00的存储器单元的阈电压是否高于Vop00。如果所述单元没有通过(因为期望处于状态00的存储器单元具有高于Vop00的阈电压),那么在步骤664中将提供一指示过度编程失败的状态。在替代实施例中,所述状态可指示其为状态00过度编程失败。如果判定所述单元没有被过度编程,那么所述过程循环到步骤670并执行状态01过度编程检验过程。
在步骤670中,系统判定期望处于状态01的单元是否具有高于Vop01的阈电压。如果期望所述单元处于状态01且阈电压高于检验比较点Vop01,那么所述单元没有通过所述测试且在步骤674中报告失败状态。如果所有单元都通过测试(以为没有被过度编程或不处于状态01),那么将在步骤676中报告通过状态。在一个实施例中,可省略步骤670-676。
图10是流程图,其描述用于执行软件编程过度编程检验(图9的步骤620)的过程的一个实施例。在步骤700中,先前被编程到存储器单元中的数据仍然存在于第一数据锁存器402中。对于所述存储器单元,将所述数据从第一数据锁存器402载入第二数据锁存器404中。在步骤702中,使用VopSP来执行检验过程。也就是说,系统可执行读取操作,其中所述控制栅极接收电压VopSP。如果所述存储器单元传导,那么读出放大器返回逻辑1。如果所述单元不传导,那么读出放大器返回逻辑0。如果检验数据与第二数据锁存器404中的数据相匹配(步骤704),那么将第二数据锁存器404中的数据设置为1(步骤706)。对每一个单元来并行地执行步骤700-706。如果所述存储器单元的所有第二数据锁存器都设置为1(步骤708),那么所述软件编程过度编程检验过程返回结果″通过″(步骤710)。如果并不是所有的第二数据锁存器404都设置为1,那么所述过程失败(步骤712)。应注意的是,如果所述单元处于状态10,那么,在步骤700中被载入第二数据锁存器中的数据将为逻辑0、检验步骤702将施加VopSP电压,晶体管将不传导且读取数据将指示为0。因此,读取数据将与第二数据锁存器404中的数据相匹配,第二数据锁存器404将被设置为逻辑1且所述过程仍通过。
图11是流程图,其描述执行状态10过度编程检验(图9的步骤638)的过程。在图11的步骤764中,系统使用Vop10来执行检验过程。也就是说,通过施加Vop10到多个存储器单元的控制栅极来执行读取操作。如果单元处于状态11或10且没有被过度编程,那么所述单元应传导;因此应接收到逻辑1。在步骤766中,第二数据锁存器404载入来自检验步骤的结果。如果所有单元都没有被过度编程,那么其均应使逻辑1存储于其各自的第二数据锁存器中。如果所有第二数据锁存器都处于逻辑1(步骤768),那么所述过程通过(步骤770),如果并不是所有的第二数据锁存器都处于逻辑1,那么所述过程失败(步骤772)。
图12是流程图,其描述用于执行状态00过度编程检验过程(图9的步骤660)的过程的一个实施例。在图12的步骤802中,使用Vop00来执行检验过程。也就是说,通过施加Vop00到存储器单元的控制栅极来执行读取操作。在一个实施例中,如果存储器单元的阈电压高于Vop00,那么所述存储器单元将不接通且将返回逻辑″0″。如果存储器单元的阈电压低于Vop00,那么所述存储器单元将接通且将返回逻辑″1″。从步骤802的检验返回的结果被存储于适当的第二数据锁存器404中。在步骤804中,系统将检验步骤802的结果与存储于第三数据锁存器406中的低页数据相比较。在高页编程之后执行图12的过程。如同上文所描述的,通过读取低页数据并将低页数据存储于第三数据锁存器406中(见596和598)来开始高页编程。将存储于第三数据锁存器中的低页数据与检验步骤802的结果相比较。
在高页编程之后,状态机需要知道存储器单元应处于状态00还是状态01。低页数据提供所述信息。如果低页数据为0,那么意味着所述存储器单元在高页编程之前处于状态10。如果所述存储器单元处于状态10中,那么执行高页编程会将所述存储器单元移动到状态00(见图8的箭头472)。如果低页数据为1,那么意味着所述存储器单元在高页编程之前处于状态11。如果所述存储器单元处于状态11,那么执行高页编程会将所述存储器单元移动到状态01(见图8的箭头474)。因此,状态机知道如果低页数据为逻辑″0″,那么其需要查看所述存储器单元是否被过度编程。如果低页数据为逻辑″1″,那么所述存储器单元不可能处于状态00,且因此状态00过度编程检验不可能失败。
在一个实施例中,如果第三数据锁存器406中的低页数据为逻辑″0″且存储于第二数据锁存器404中的从步骤802的检验返回的结果为逻辑″0″,那么在步骤806中判定存储器单元已被过度编程。此情况指示所述存储器单元应处于状态00;然而,阈电压高于Vop00。如果低页数据为逻辑″1″或存储于第二数据锁存器404中的从步骤802的检验过程返回的结果为逻辑″1″,那么证实所述存储器单元相对于状态00没有被过度编程。在步骤806中,对于相对于状态00没有被过度编程的每一个存储器单元而言,将相关的第二数据锁存器404设置为逻辑″1″。应注意的是,如果期望高页编程过程将高页保持为逻辑1(例如,状态11或状态10),那么各自的第二数据锁存器将已处于逻辑″1″。如果将所有的第二数据锁存器404设置为逻辑″1″(步骤808),那么图12的过程通过(步骤810)。如果并没有将所有的第二数据锁存器404都设置为逻辑″1″,那么,因为存在相对于状态100而被编程的一个或一个以上存储器单元,所以图12的过程失败(步骤812)。
图13是流程图,其描述用于对状态01执行高页过度编程检验过程(图9的步骤670)的过程的一个实例。在步骤862中,使用比较点Vop01来执行检验过程。如果所述单元传导(返回的检验结果为逻辑1),那么将第二数据锁存器404设置为逻辑″1″;否则,将第二数据锁存器404设置为逻辑″0″。如果将所有的第二数据锁存器设置为1(步骤864),那么图13的过程通过(步骤866)。如果并没有将所有第二数据锁存器设置为逻辑″1″,那么图13的过程未通过(步骤868)。
应注意的是,上述流程图假设通过向控制栅极施加特定电压并判定所述存储器单元是接通还是关闭来执行检验过程。然而,存在检验(并读取)存储器单元以判定状态的其它手段,且可在本发明的精神内使用所述手段。举例来说,可使用电流感测系统,其中将处于某种读取条件下的存储器单元的电流与一组参考电流相比较。在另一实施例中,可使用许多不同参数来判定存储器单元的状态。举例来说,可通过电流感测来执行单元中所存储的电荷电平的判定,其中使用固定的偏压条件来感测其传导的量值。或者,可通过感测阈电压来判定,其中使用多种操纵栅极偏压条件来感测此类传导的开始。或者,通过使单元的电荷电平判定驱动器强度来控制动态地固定的感测节点的放电速率(例如通过预充电电容器),可动态地执行所述判定过程。通过感测达到给定的放电电平的时间来判定所存储的电荷电平。在此种情况下,能指示所述单元条件的参数是时间。在美国专利第6,222,762号中描述了此方法,所述专利的全文以引用的方式并入本文中。另一替代技术是将频率用作参数来判定存储器单元的状态的技术,如美国专利第6,044,019号中所描述,所述专利的全文以引用的方式并入本文中。美国专利第5,172,338号中更全面地研究了电流感测方法,所述专利的全文也以引用的方式并入本文中。
因为相邻浮动栅极上的电荷可引起电场,所以存储于浮动栅极上的表观电荷会发生移动。问题是在正被读取的当前单元被编程之后可同时编程或擦除相邻存储器单元。举例来说,我们认为一组单元被编程以将一电荷电平添加到其浮动栅极以对应于一组数据。在用第二组数据来编程第二组单元(与第一组单元相邻)之后,由于受到第二组浮动栅极的电场的影响,从第一组单元的浮动栅极读取的电荷电平有时候似乎与被编程的不同。也就是说,观察到的错误可归因于正被读取的单元的浮动的表观电压电平受到相邻浮动栅极的电场的影响。此通常称为Yupin效应,且在美国专利第5,867,429号和第5,930,167号中较充分地描述了所述Yupin效应,所述专利的全文以引用的方式并入本文中。这些专利描述使两组浮动栅极彼此间物理上绝缘或考虑读取第一组浮动栅极时第二组浮动栅极上的电荷所产生的影响。
有可能正确地编程第一组存储器单元,但当接着编程相邻单元时,Yupin效应便会导致第一组存储器单元似乎被过度编程。举例来说,对期望编程为状态10(见图8)的第一单元进行检查以检验所述单元的阈电压高于Vv10(编程检验)并低于Vop10(过度编程检验)。在编程相邻存储器单元之后,从所述第一单元读取的阈电压可能似乎高于原先编程的阈电压(例如,高出2伏特)。如果将第一存储器单元编程为正好低于Vop10的阈电压,那么在编程所述相邻单元之后第一单元具有高于Vop10的表观阈电压。因此,过度编程了第一存储器单元。所述表观阈电压可能高于读取比较点(例如,Vr00),借此导致数据错误。应注意的是,邻近单元可能在相邻字线或相邻位线上。举例来说,在图4中,单元244与单元224、242、250和246相邻。在某些实施中,不与单元244相邻的存储器单元可能具有能影响从单元244读取的表观电荷的电场。
为了解决Yupin效应,在使用第一控制线(例如,字线或位线)进行编程之后,本发明的一组实施例将在先前已被编程且与第一控制线相邻的控制线相关的页上执行过度编程检验检查。图14A-15C描述这些实施例。
图14A描述在与先前选定字线相关的逻辑页上执行过渡编程检验的过程的实施例。在图14A的步骤902中,使用第一字线来编程一组存储器单元。举例来说,参看图4,可使用字线WL1来编程逻辑页。步骤902的过程包括执行图9的过程,如同上文关于图10-13的所描述的,所述过程包括检查过度编程的存储器单元。在步骤904中,使用第二字线(例如,图4的字线WL2)对存储器单元执行第二组编程操作。步骤904的过程包括执行图9的过程,其包括检查过度编程的存储器单元。在步骤906中,系统检查由与第一字线(例如,字线WL1)相关的逻辑页的存储器单元的上述Yupin效应所导致的过度编程。在步骤908中,系统将使用第三字线(例如,字线WL3)来编程第三组存储器单元。步骤908的过程包括执行图9的过程,其包括检查过度编程的存储器单元。在步骤910中,系统检查由与第二字线(例如,WL2)相关的逻辑页的上述Yupin效应所导致的过度编程。然后,所述过程可继续(或不继续)编程与附加附加字线相关的存储器单元并为先前编程的字线检查过度编程的存储器单元。
应注意的是,在某些实施中,沿NAND串顺序地编程字线;因此,在第一字线用于编程之后,下一编程操作使用与第一字线相邻的字线。通常(但并不总是)以从源极侧到漏极侧的顺序来编程NAND串,举例来说,从存储器单元228到存储器单元222(见图4)。因此,在使用WL0进行编程之后,系统接着将使用WL1(与WL0相邻)。因此,在图14A的实例中,对最接近的先前字线执行过度编程检验。然而,在其它实施例中,可检查其它先前编程的存储器单元,而不是检查最接近的先前编程的存储器单元。
图14B提供流程图,描述通过检查先前选定的位线的过度编程的存储器单元来解决Yupin效应的一个实施例的过程。在一个实施例中,将位线分组为奇数字线和偶数字线。编程奇数字线,接着编程偶数字线,接着编程奇数字线,接着编程偶数字线等。在其它实施例中,不同组的位线可用于不同的编程操作。图14B期望通过一组位线进行编程之后,相对于先前编程的其它组位线执行对过度编程检查。在步骤950中,使用偶数字线来执行编程操作。步骤950的过程包括执行图9的过程,如同上文关于图10-13所描述的,其包括检查过度编程的存储器单元。在步骤952中,使用奇数字线来执行编程操作。步骤952的过程包括执行图9的过程,其包括检查过度编程的存储器单元。在步骤954中,系统检查由与先前编程的偶数字线相关的逻辑页的上述Yupin效应所导致的过度编程。在步骤956中,使用偶数字线来执行编程。步骤956的过程包括执行图9的过程,其包括检查过度编程的存储器单元。在步骤958中,系统检查由与先前编程的奇数字线相关的逻辑页的上述Yupin效应所导致的过度编程。此过程可通过使编程与检查先前位线上的过度编程交替进行而得以继续。
可由状态机、控制器、用于实施所述过程的特定逻辑或上述各项的组合来执行图14A和14B的过程。
存在许多不同的适当方法,其中系统可使用所述方法来检查由与先前编程的控制线相关的逻辑页的上述Yupin效应所导致的过度编程(作为图14A和B的过程的一部分)。图15A-C描述了两种这些方法;然而,还可使用许多其它的适当方法。
与图8类似,图15A说明存储两个比特的数据的存储器单元的阈电压分布460、462、464和466。除读取比较点(Vr10、Vr00和Vr01)、检验比较点(Vv10、Vv00和Vv01)和过度编程比较点(VopSP、Vop10、Vop000和Vop01)之外,图15A还描绘了过度编程测试点VopA、VopB和VopC。在编程第一单元且接着编程相邻的第二单元之后,由第二单元的引起的Yupin效应将使第一单元的阈电压升高约0.2伏特(可多于或少于0.2伏特,此取决于技术、尺寸、间距等)。所述数据并没有被完全破坏。相反,可预知地破坏所述数据。一种情况是如果原始编程导致第一单元的阈电压正好低于过度编程检验电压(例如,正好低于Vop10)且所述单元接着经受最大的Yupin效应(例如,约0.2伏特,或上文所述的另一值)。因此,如果所述单元由于Yupin效应而变为过度编程,那么形成过度编程区域来表示何处为阈电压的预测。图15A显示三个过度编程区域。第一过度编程区域包括VopSP与VopA之间的区域。第二过度编程区域包括Vop10与VopB之间的区域。第三过度编程区域包括Vop00与VopC之间的区域。应注意的是,过度编程比较点与过度编程测试点的值可不同于图15A中所描绘的值。
用于判定存储器单元是否由于Yupin效应而被过度编程的一个过程是测试所述单元的阈电压是否在所述过度编程区域中的一个内。如果单元的阈电压在过度编程区域内,那么认为所述单元会由于Yupin效应而被过度编程。举例来说,如果判定单元的阈电压在第二过度编程区域内,那么认为所述单元应已处于分布462内,但是由于Yupin效应而变得过度编程。应注意的是,尽管图15A描绘四个阈分布(存储两个比特的数据),但是当实施本发明时还可使用更多或更少的分布(和比特的数据)。
图15B提供流程图,其描述测试如上文所述的由于Yupin效应而导致过度编程的过程的一个实施例。图15B的过程可作为图14A和14B的步骤906、910、954和958中的检查过度编程的一部分而执行。在步骤1002中,在每一个过度编程区域中的边缘处执行读取操作。举例来说,在VopSP、VopA、Vop10、VopB、Vop00和VopC处来执行读取操作。基于所述读取操作,判定所述单元的阈电压是否在任意一个过度编程区域之内。举例来说,如果当将Vop10施加到字线时所述存储器单元接通而当将VopB施加到字线时所述存储器单元不接通,那么可认为所述单元在第二过度编程区域中。如果所述存储器单元的阈电压在所述过度编程区域中的一个内(步骤1006),那么推断所述单元由于相邻单元的耦接(Yupin效应)而被过度编程(步骤1008)。在步骤1010中,将过度编程的单元的数据固定。可部分地擦除所述单元以将阈电压降回到适当分布中,可完全擦除并重写所述单元,可将所述数据写入到另一位置,可存储错误信息,其中所述错误信息指示所述单元被过度编程使得随后的读取将考虑过度编程,或可执行另一适合措施。
如果在步骤1006中判定所述阈电压不在所述过度编程区域中的任意一个中,那么对过度编程比较点Vop01执行读取操作。如果所述存储器单元的阈电压高于Vop01(步骤1022),那么认为所述存储器单元将被过度编程且所述过程将在步骤1008处继续。如果所述存储器单元的阈电压低于Vop01(步骤1022),那么认为所述存储器单元没有被过度编程(步骤1024)。
图15C提供流程图,其描述测试由于Yupin效应而导致过度编程的过程的另一实施例。图15C的过程可作为图14A和14B的步骤906、910、954和958中的检查过度编程的一部分而执行。在步骤1060中,在每一个读取比较点Vr10、Vr00和Vr01处来执行读取操作。基于所述读取操作,做出关于所述存储器单元的状态的初始判定。在步骤1062中,根据所属领域中的已知方法来执行ECC过程。如果不存在ECC错误(步骤1064),那么认为所述存储器单元并没有由于Yupin效应而被过度编程(步骤1066)。如果检测到ECC错误(步骤1064),那么认为所述错误是由于Yupin效应而被过度编程的存储器单元所引起的(步骤1070)。在步骤1072中,将数据固定(与图15B的步骤1010类似)。举例来说,假设在步骤1060中,读取操作导致判定所述阈电压高于Vr00且低于Vr01。假设所述存储器单元在存储有逻辑数据00的阈分布464中。如果ECC失败,那么认为所述存储器单元应在存储逻辑数据10的阈分布462中;然而,所述存储器单元被过度编程。因此,在步骤1072的一个实施例中,可将所述存储器单元的阈电压校正到阈分布462内。
图17-22提供真值表,其结合图16描述执行过度编程检验的替代实施例。与图8类似,图16说明存储两个比特的数据的存储器单元的阈电压分布460、462、464和466。然而,图16显示不同的过度编程检验比较点VopSP′、Vop10′、Vop00′和Vop01′。比较点VopSP′是稍高于阈电压分布460中的最高电压的值。Vop10′是稍高于阈电压分布462中的最高电压的值。Vop00′是稍高于阈电压分布464中的最大电压的值。Vop01′是稍高于阈电压分布466中的最大电压的值。应注意的是,图16的VopSP′低于图8的VopSP,图16的Vop10′低于图8的Vop10,图16的Vop00′低于图8的Vop00,且图16的Vop01′低于图8的Vop01。在其它实施例中,还可使用高于各自的阈电压分布的检验比较点VopSP′、Vop10′、Vop00′和Vop01′的其它值。
图17解释在低页编程之后来执行软件编程过度编程检验的一个实施例。图17的真值表具有两个列,其对应于在先前的低页编程过程中是编程数据″0″还是编程数据″1″。所述真值表的第二行(在VopSP′处读取)对应于从正被检验过度编程的存储器单元读取的数据。第三行指示存储于第二数据锁存器404中的数据。第四行指示存储于第一数据锁存器402中的数据。第五行指示状态11的过度编程检验的结果。
如果编程″1″(图17的左侧列),那么所述存储器单元保持于状态11内。如果编程″0″,那么期望所述单元被编程为状态10。所述真值表的第二行指示读取操作(包括将VopSP′施加到存储器单元的控制栅极)的结果。如果正被读取的存储器单元的阈电压高于VopSP′,那么所述存储器单元将不接通且将读取逻辑0。如果所述存储器单元的阈电压低于VopSP′,那么所述存储器单元将接通且将读取逻辑1。在对应于正被编程到所述存储器单元中的逻辑1的列中,读取步骤将读取逻辑″1″(适度编程)或逻辑″0″(过度编程)。在所述单元被编程为状态10的情况下,因为在编程过程中检验步骤检验到所述电压至少高于Vv10,所以读取步骤将读取逻辑″0″。将读取的数据存储于第二数据锁存器404中。第一数据锁存器402存储先前被编程到低页中的数据。状态机将检查第一数据锁存器402和第二数据锁存器404的内容。如果第一数据锁存器402正存储逻辑″1″且第二数据锁存器404正存储逻辑″0″,那么过度编程测试失败。也就是说,状态机推断出所述存储器单元被过度编程。
图18是真值表,其描述在已执行低页与高页编程之后来执行软件编程过度编程检验的实施例。为适应此任务,需要考虑低页数据和高页数据。因为已执行高页和低页编程操作,所以所述真值表包括所有四个状态(11、10、00和01)的列。所述真值表的第二行指示在将VopSP′施加到控制栅极的同时从所述单元读取的数据。如果期望所述单元处于状态11,那么读取操作将返回1(如果所述单元没有被过度编程)和返回0(如果所述单元被过度编程)。如果所述单元处于其它三个状态中的任意一个状态,那么应返回0,因为在编程过程中先前的检验步骤已确保所述单元的阈电压充分地高于适当检验点。所述真值表的第三行指示第二锁存器404的内容,其中所述第二锁存器404存储前述读取操作的结果。第四行指示第三数据锁存器402的内容。如同上文所描述的,第三数据锁存器存储有低页数据。第五行指示状态11的过度编程检验的结果。状态机检查以判定第三数据锁存器406是否存储逻辑1且第二数据锁存器404是否存储逻辑0。如果是这样,那么,因为存储器单元被过度编程,所以过度编程测试失败。如果不是这样,那么测试通过。
在另一实施例中,系统接着在Vr10处执行另一读取,而不是使用先前存储于第三数据锁存器中的数据。此读取操作能判定所述单元的阈电压是否高于VopSP′且低于Vr10。如果是这样,那么状态机推断出所述存储器单元被过度编程;否则,状态机认为所述存储器单元没有被过度编程。
图19是真值表,其描述检验将单元编程为状态10的编程过程是否过度编程所述单元的过程。在低页编程过程之后且在高页编程过程之前来执行与图19相关联的检验过程。所述真值表具有两个列,一个列对应于当逻辑″1″被编程到低页时的情况而另一个列对应于逻辑″0″被编程到低页时的情况。第二行指示来自将Vop10′施加到控制栅极的读取操作的数据。如果期望存储器单元保持于状态11中或所述存储器单元被正确地编程到状态10,那么Vop10′处的读取操作将导致所述存储器接通并报告逻辑″1″。将读取操作的结果存储于第二数据锁存器404中(见真值表的第三行)。如果期望所述单元被编程到状态10并被过度编程,那么,因为所述单元将不接通,所以Vop10′处的读取操作将导致逻辑″0″。第一数据锁存器402存储被编程的数据(见第四行)。如果逻辑″1″被编程(例如,没有进行任何编程),那么第二数据锁存器404与第一数据锁存器402存储逻辑1且测试将通过(见第五行)。如果适度地编程逻辑″0″,那么第一数据锁存器404将存储逻辑0、第二数据锁存器402将存储逻辑1且测试将通过。如果第二数据锁存器404处于逻辑0且第一数据锁存器402处于逻辑0,那么,因为所述单元被过度编程,所以测试失败。
图20是真值表,其描述在编程低页与较高页之后执行状态10过度编程检验的过程。因为两种页均被编程,所以存在四个列,一个列用于可将单元编程为的每一个状态-11、10、00和01。第二行指示来自将Vop10′施加到控制栅极的读取操作的数据。将所述读取操作的结果存储于第二数据锁存器404中(第三行)。如果存储器单元保持于状态11中或被正确地编程到状态10,那么所述存储器单元将接通且将读取逻辑″1″。如果期望所述单元被编程到状态10,但被过度编程了,那么所述单元将不接通且返回逻辑″0″。如果所述单元在高页编程过程中被编程到状态00或状态01,那么所述单元将不接通且读取逻辑″0″。第一数据锁存器402将存储来自最近执行的高页编程操作的数据(第四行)。举例来说,如果所述单元处于状态11或10,那么第一数据锁存器将存储逻辑″1″。如果所述单元处于状态00或01,那么第一数据锁存器将存储逻辑″0″。接着系统将进行测试以判定第一数据锁存器402是否存储逻辑1且第二数据锁存器404是否存储逻辑0。如果是这样,那么,因为所述存储器单元被过度编程,所以检验过程失败。否则,检验过程通过(第五行)。
图21是真值表,其描述执行状态00过度编程检验的过程。在高页和低页编程之后执行检验状态00的过程;因此,图21的真值表显示四个列(一个列用于可将单元编程为的每一个状态)。首先,执行读取操作,所述读取操作包括将Vop00′施加到控制栅极(见所述真值表的第二行)。如果所述单元被正确地编程为状态11、10或00,那么所述单元将接通且返回逻辑″1″。如果所述单元编程为状态01,那么所述单元将不接通且返回逻辑″0″。如果期望所述单元编程为状态00但被过度编程了,那么所述单元将不接通且将返回逻辑″0″。将从读取操作返回的数据存储于第二数据锁存器404中(见真值表的第三行)。第四行指示第三数据锁存器402的内容。如同上文所描述的,第三数据锁存器存储低页数据。第五行指示状态00的过度编程检验的结果。状态机进行检查以判定第三数据锁存器406是否存储逻辑″0″且第二数据锁存器404是否存储逻辑0。如果是这样,那么,因为所述存储器单元被过度编程,所以过度编程测试失败。如果不是这样,那么测试通过。
在另一实施例中,系统接着在Vr01处执行另一读取,而不是使用先前存储于第三数据锁存器中的数据。此读取操作判定所述单元的阈电压是否高于Vop00′且低于Vr01。如果是这样,那么状态机推断出所述存储器单元被过度编程;否则,状态机认为所述存储器单元没有被过度编程。
图22是真值表,其描述执行状态01过度编程检验的过程。因为在高页读取之后来执行所述过程,所以存在四个列,一个列用于可将单元编程为的每一个状态。图22的第二行指示来自包括将Vop01′施加到控制栅极的读取操作的结果。将读取操作所产生的数据存储于第二数据锁存器404中(第三行)。不管单元处于何种状态,所述读取操作所产生的数据应总是为逻辑1。因此,如果返回逻辑″0″,那么检验步骤失败;否则,检验步骤通过(第四行)。
应注意的是,图9的流程图期望如果执行低页编程操作,那么执行软件编程检验和状态10过度编程检验,且如果执行高页编程操作,那么执行状态00过度编程检验且执行状态01过度编程检验。还可与上文关于图17、19、21和22所讨论的过程一起使用此方法。在一个替代实施例中,可在已写入低页和高页之后使用上文关于图18、20、21和22的真值表所讨论的过程来执行所有的过度编程检验。在另一替代实施例中,在执行低页编程过程之后,可执行上面关于图17所讨论的检验过程。当编程高页时,系统将使用图20、21和22的真值表来对状态10、00和01执行过度编程检验。
上文提供了关于NAND型快闪存储器的上述实例。然而,可将本发明的原则应用于其它类型的快闪存储器和其它类型的非易失性存储器,包括所述现存和所述正在开发的期待着使用的新颖技术的快闪存储器和存储器。
本发明所提供的前述详细描述是用于说明和描述的目的。并不期望所述描述是穷尽的或将本发明限制为所揭示的形式完全一致。可根据以上教示做出许多修改和变化。经过选择的所描述的实施例是为了最好地解释本发明的原理和其实际应用,借此使其它所属领域技术人员能够在各种实施例中最好地利用本发明并作出各种修改以使其适合于所期待的特殊用途。我们期望本发明的保护范围由所附的权利要求书限定。
权利要求
1.一种用于在使用多个逻辑页的存储器系统中检测过度编程的方法,其包含以下步骤使用用于一特定逻辑页的数据来编程一第一多状态存储元件;和使用来自不同于所述特定逻辑页的一逻辑页的数据来判定用于编程所述第一多状态存储元件的所述步骤是否过度编程所述多状态存储元件。
2.根据权利要求1所述的方法,其进一步包含以下步骤在使用用于所述特定逻辑页的数据编程所述第一多状态存储元件之前,使用不同于所述特定逻辑页的所述逻辑页的数据编程所述第一多状态存储元件。
3.根据权利要求2所述的方法,其中所述使用数据的步骤包括以下步骤判定所述第一多状态存储元件的一阈电压是否高于一比较值;和如果所述第一多状态存储元件的所述阈电压高于所述比较值,且用于所述逻辑页的数据指示所述第一多状态存储元件的所述阈电压不应高于所述比较值,那么判定所述第一多状态存储元件被过度编程。
4.根据权利要求3所述的方法,其中所述第一多状态存储元件能够存储处于包括状态0、状态1、状态2和状态3在内的至少四个状态中的至少两个比特的数据;所述两个比特的数据的一第一比特用于所述特定逻辑页;所述两个比特的数据的一第二比特用于不同于所述特定逻辑页的所述逻辑页;所述第一比特在状态2和状态3中被编程;所述第二比特在状态1和状态2中被编程;所述比较值在状态2与状态3之间;且如果编程所述第二比特使得所述第一多状态存储元件应处于状态2中,那么用于不同于所述特殊页的所述逻辑页的所述数据指示所述第一多状态存储元件的所述阈电压不应高于所述比较值。
5.根据权利要求1所述的方法,其中所述使用数据的步骤包括以下步骤执行一检验操作以判定所述第一多状态存储元件的一阈电压;且使用来自不同于所述特定逻辑页的所述逻辑页的所述数据来判定所述阈电压是否应高于所述第一比较点。
6.根据权利要求1所述的方法,其中所述第一多状态存储元件能够存储多个状态中的多个比特的数据;所述多个比特的数据的一第一比特用于所述特定逻辑页;所述多个比特的数据的一第二比特用于不同于所述特定逻辑页的所述逻辑页;且所述使用数据的步骤包括判定使用用于所述特定逻辑页的数据编程所述第一多状态存储元件的所述步骤是否期望将所述第一多状态存储元件编程为一第一状态但将所述第一多状态存储元件编程超出所述第一状态。
7.根据权利要求6所述的方法,其进一步包含以下步骤在所述使用数据的步骤之后判定所述第一多状态存储元件是否被编程超出一第二状态。
8.根据权利要求7所述的方法,其进一步包含以下步骤在使用用于所述特定逻辑页的数据编程所述第一多状态存储元件之前,使用不同于所述特定逻辑页的所述逻辑页的数据编程所述第一多状态存储元件,所述特定逻辑页是一高页,不同于所述特定逻辑页的所述逻辑页是一低页;和响应使用用于不同于所述特定逻辑页的所述逻辑页的数据来编程所述第一多状态存储元件的所述步骤,判定所述第一多状态存储元件是否被编程超出一第三状态,所述第三状态与编程所述第二比特相关联,响应使用用于一特定逻辑页的数据来编程一第一多状态存储元件的所述步骤执行使用并判定所述第一多状态存储元件是否被编程超出一第二状态的所述步骤。
9.根据权利要求1所述的方法,其进一步包含以下步骤在编程所述第一多状态存储元件之后且在所述使用步骤之前编程一第二多状态存储元件,所述第一多状态存储器连接到一第一字线且所述第一多状态存储器连接到一第二字线。
10.根据权利要求1所述的方法,其中所述第一多状态存储元件使用根据一格雷码的多状态配置来存储数据。
11.根据权利要求1所述的方法,其中由一状态机来执行编程并使用数据的所述步骤。
12.根据权利要求1所述的方法,其中所述第一多状态存储元件是一存储元件阵列的一部分;所述存储元件阵列位于一集成电路芯片上;由一状态机来执行编程并使用数据的所述步骤;且所述状态机位于所述集成电路芯片上。
13.根据权利要求1所述的方法,其中所述第一多状态存储元件是一存储元件阵列的一部分;所述存储元件阵列位于一集成电路芯片上;所述存储器系统包括一控制器;所述控制的并不位于所述集成电路芯片上;由一状态机来执行编程并使用数据的所述步骤;且所述状态机位于所述集成电路芯片上。
14.根据权利要求1所述的方法,其中所述第一多状态存储元件是一存储元件阵列的一部分;所述存储元件阵列位于一集成电路芯片上;且由所述集成电路芯片上的电路来执行编程并使用数据的所述步骤。
15.根据权利要求1所述的方法,其中所述第一多状态存储元件是一存储元件阵列的一部分;响应来自一与所述存储元件阵列进行通信的主机系统的命令来执行所述编程步骤;且所述存储元件阵列可从所述主机系统移除。
16.根据权利要求1所述的方法,其中所述第一多状态存储元件是一快闪存储器元件。
17.根据权利要求1所述的方法,其中所述第一多状态存储元件是一NAND快闪存储器元件。
18.一种用于在使用多个逻辑页的存储器系统中检测过度编程的方法,其包含以下步骤判定一第一多状态存储元件的一阈电压是否高于一比较值,所述第一多状态存储元件存储至少一第一逻辑页和一第二逻辑页的信息,在将数据写入到所述第二逻辑页之后执行判定所述第一多状态存储元件的所述阈电压是否高于所述比较值的所述步骤;和基于来自所述第一逻辑页的数据和判定一第一多状态存储元件的一阈电压是否高于一比较值的所述步骤来判定所述第一多状态存储元件是否被过度编程。
19.根据权利要求18所述的方法,其中所述第一多状态存储元件存储使用多个状态的数据;至少所述多个状态的一第一状态和一第二状态与所述第二逻辑页的编程数据相关联;将来自所述第一逻辑页的所述数据存储于所述第一多状态存储元件中;来自所述第一逻辑页的所述数据指示所述第一多状态存储元件应处于所述第一状态或所述第二状态的哪一个中;且如果所述第一多状态存储元件应处于所述第一状态中但已被编程超出所述第一状态,那么所述第一多状态存储元件被过度编程。
20.根据权利要求18所述的方法,其中所述第一多状态存储元件是一存储元件阵列的一部分;所述存储元件阵列位于一集成电路芯片上;且由所述集成电路芯片上的一个或一个以上电路来执行判定一多状态存储元件的一阈电压是否高于一比较值和判定所述第一多状态存储元件是否被过度编程的所述步骤。
21.根据权利要求18所述的方法,其中所述第一多状态存储元件是一NAND快闪存储器元件。
22.一种存储器系统,其包含一存储元件阵列;和一与所述存储元件阵列进行通信的管理电路,所述管理电路执行包括使用用于一特定逻辑页的数据来编程一第一多状态存储元件在内的编程操作,所述管理电路还执行过度编程检测,其包括使用来自不同于所述特定逻辑页的一逻辑页的数据来判定使用所述特定逻辑页的数据对所述第一多状态存储元件的所述编程是否过度编程所述第一多状态存储元件。
23.根据权利要求22所述的存储器系统,其中所述管理电路包括一状态机。
24.根据权利要求23所述的存储器系统,其进一步包含一控制器,所述状态机和所述存储元件阵列都位于一第一集成电路芯片上且所述控制器不位于所述第一集成电路芯片上。
25.根据权利要求24所述的存储器系统,其中所述状态机执行所述过度编程检测。
26.根据权利要求23所述的存储器系统,其中在使用所述特定逻辑页的数据来编程所述第一多状态存储元件之前,所述管理电路进一步使用不同于所述特定逻辑页的所述逻辑页的所述数据来编程所述第一多状态存储元件。
27.根据权利要求26所述的存储器系统,其中所述管理电路执行所述过度编程检测,此通过判定所述第一多状态存储元件的一阈电压是否高于一比较值且通过如果所述第一多状态存储元件的所述阈电压高于所述比较值且用于所述逻辑页的数据指示所述第一多状态存储元件的所述阈电压不应高于所述比较值,那么判定所述第一多状态存储元件被过度编程来达到。
28.一种使用多个逻辑页的存储器系统,其包含用于使用用于一特定逻辑页的数据来编程一第一多状态存储元件的构件;和用于使用来自不同于所述特定逻辑页的一逻辑页的数据判定所述第一多状态存储元件是否被过度编程的构件。
29.根据权利要求28所述的存储器系统,其进一步包含用于在编程所述第一多状态存储元件之后且在所述使用步骤之前编程一第二多状态存储元件的构件,所述第一多状态存储器连接到一控制线且所述第二多状态存储器连接到一控制线。
30.根据权利要求29所述的存储器系统,其中所述第一多状态存储元件是一NAND快闪存储器元件。
全文摘要
在非易失性半导体存储器系统(或其它类型的存储器系统)中,通过改变所述存储器单元的阈电压来编程一存储器单元。由于所述系统中不同存储器单元的编程速度的变化,所以存在某些存储器单元将被过度编程的可能性。即,在一个实例中,阈电压将被移动超过预期值或预期的值范围。本发明包括判定所述存储器单元是否被过度编程。
文档编号G11C16/34GK1853239SQ200480026443
公开日2006年10月25日 申请日期2004年6月30日 优先权日2003年7月29日
发明者陈建, 杰弗里·W·卢策 申请人:桑迪士克股份有限公司