对编程故障自动响应的非易失性存储装置的制作方法

文档序号:11954886阅读:278来源:国知局
对编程故障自动响应的非易失性存储装置的制作方法

本申请涉及一种对编程故障自动响应的非易失性存储装置。



背景技术:

半导体存储装置变得日益普遍地用在各种电子装置中。例如,非易失性半导体存储器被用在蜂窝电话、数码相机、个人数字助理、移动计算装置、非移动计算装置、服务器及其他装置。电可擦可编程只读存储器(EEPROM)和闪速存储器属于最普遍的非易失性半导体存储器。

某些EEPROM和闪速存储器利用浮置栅,其中,浮置栅位于半导体衬底中的沟道区上方并且与该沟道区绝缘。浮置栅位于源极区与漏极区之间。控制栅设置在浮置栅上方并且与该浮置栅绝缘。晶体管的阈值电压由浮置栅上所保持的电荷量来控制。也就是说,在晶体管被接通之前必须施加给控制栅的用于允许在晶体管的源极与漏极之间传导的最小电压量由浮置栅上的电荷电平来控制。

当对EEPROM或闪速存储装置进行编程时,通常对控制栅施加编程电压并且将位线接地。来自沟道的电子被注入到浮置栅中。当电子在浮置栅中累积时,浮置栅变得带负电荷并且存储器单元的阈值电压升高,使得存储器单元处于编程状态。

一些EEPROM和闪速存储装置具有用于存储两个范围的电荷的浮置栅,因此,可以在两个状态——与数据“1”对应的擦除状态以及与数据“0”对应的编程状态——之间对存储器单元进行编程/擦除。这样的装置被称为二进制装置或双态装置。

通过标识多个不同的容许电压范围来实现多态(或多级)闪速存储器单元。每个不同的电压范围与数据位集合的预定值对应。被编程至存储器单元中的数据与存储器单元的电压范围之间的具体关系取决于针对存储器单元所采用的数据编码方案。

除了多态存储器体系结构所产生的容量方面的益处以外,消费者看到了由于不断缩小存储器单元的物理尺寸的历史所产生的显著优点。存储器单元越小,可以越密集地封装在给定的管芯区域上,使得用户能够以与较旧存储器技术相同的代价来访问更多的存储容量。栅极区域的缩小使浮置栅与衬底间电容和控制栅与浮置栅间电容减小。该电容减小进而需要更少的电荷用于对单元进行编程和擦除,从而消耗更少的电力。对单元进行编程和擦除所需要的电荷减少还意味着:对于类似的充电电流和放电电流而言,可以更快速地执行编程操作和擦除操作。

然而,缩小存储器单元的尺寸会承担一定风险。如上所述,对于固定的管芯尺寸而言,为了获得更高的存储容量的优点,这些更小的单元必须更紧密地封装在一起。然而,这样做可能会导致更多数量的制造误差,例如字线之间的短路、中断的字线和有缺陷的存储器单元。这样的误差会损坏正在被编程的、存储在字线上的页上的数据。在一些情况下在封装和运输之前由制造商进行的测试期间意识不到这些缺陷。更确切地,这些缺陷仅在由用户执行的编程-擦除循环之后开始损坏数据。

在一些现有系统中,当在编程期间检测出错误时,在新的物理页或块中对要被编程的数据进行重新编程。此外,将来自先前的块的所有数据转移至新的块。该处理会消耗时间。

在另一系统中,将数据编程至两个较不同的块,使得如果编程处理中的一个失败了,则可以从另一块中恢复数据。该处理需要管理多个块的数据的更多的负担,并且也会消耗时间。



技术实现要素:

根据一个实施方式,提供了一种设备,其包括:多个存储器单元,所述多个存储器单元在存储器管芯上以块为单位布置;以及一个或更多个控制电路,所述一个或更多个控制电路位于所述存储器管芯上并且与所述存储器单元进行通信,响应于来自所述存储器管芯外部的部件的请求,所述一个或更多个控制电路被配置成:试图在所述存储器管芯的第一块中的编程地址处对第一数据进行编程并且确定在所述编程地址处对所述第一数据的编程失败,所述一个或更多个控制电路被配置成:响应于确定在第一地址处对所述第一数据的编程失败来将所述编程地址自动地改变成所述第一块内的新地址并且在所述第一块中的所述新地址处对所述第一数据进行编程,所述一个或更多个控制电路被配置成报告对所述第一数据的成功编程,其中,所述报告包括:向所述存储器管芯外部的所述部件报告所述新地址作为所述第一数据的编程地址。

根据另一个实施方式,提供了一种方法,其包括:在管芯处,接收来自所述管芯外部的部件的第一数据和用于对所述第一数据进行编程的请求;试图在第一块中的编程地址处对所述第一数据进行编程,所述编程地址与用于对所述第一数据进行编程的所述请求相关联;确定在所述第一地址处对所述第一数据的编程失败;在所述管芯处,将所述编程地址改变成所述第一块中的新地址,并且在所述第一块中的所述新地址处对所述第一数据进行编程;以及向所述管芯外部的所述部件报告对所述第一数据的成功编程并且标识所述新地址作为所述第一数据的编程地址。

根据另一个实施方式,提供了一种非易失性存储系统,其包括:控制器,所述控制器被配置成对数据和起始地址连同用于对所述数据进行编程的请求进行传送;以及存储器管芯,所述存储器管芯包括形成单片式三维存储器结构的多个存储器单元和一个或更多个控制电路,所述存储器管芯与所述控制器进行通信,所述存储器管芯被配置成接收来自所述控制器的所述数据和所述起始地址连同用于对所述数据进行编程的所述请求,所述一个或更多个控制电路被配置成试图将所述数据编程至所述起始地址处的存储器单元并且确定在所述起始地址处对所述数据的编程失败,所述一个或更多个控制电路被配置成在所述存储器管芯中标识新地址并且将所述数据编程至所述存储器上的所述新地址,所述一个或更多个控制电路被配置成向所述控制器报告对所述数据的成功编程并且向所述控制器标识针对成功编程的数据的所述新地址,所述控制器被配置成:响应于接收到来自所述存储器管芯的对所述新地址的所述标识,将所述起始地址标记为错误地址并且建立从系统地址到所述新地址的转换。

附图说明

图1A是NAND串的俯视图;

图1B是NAND串的等效电路图;

图2是示例非易失性存储系统的框图;

图3是描绘出使用非易失性存储器的系统的示例软件模块的框图;

图4是示例存储器管芯(memory die)的框图;

图5是示例感测块的框图;

图6描绘出存储器单元阵列的示例性结构;

图7是数据沿字线的布置的框图;

图8描绘出阈值电压分布的示例集合并且描述了用于对非易失性存储器进行编程的处理;

图9描绘出阈值电压分布的示例集合并且描述了用于对非易失性存储器进行编程的处理;

图10描绘出三个编程脉冲以及施加在编程脉冲之间的验证脉冲;

图11A至图11E示出各种阈值电压分布并且描述了用于对非易失性存储器进行编程的处理;

图11F是描绘出示例数据编码的表;

图12是描述用于对非易失性存储器进行编程的处理的一个实施方式的流程图;

图13是描述由控制器执行的用于编程的处理的一个实施方式的流程图;

图14是描述由存储器管芯执行的用于编程的处理的一个实施方式的流程图;

图15是描绘出数据沿字线的子集的布置的框图;以及

图16是描绘出数据沿字线的子集的布置的框图。

具体实施方式

提出了一种以更高效的方式从编程错误恢复的非易失性存储系统。如果在编程期间发生错误,则在不需要重新传送数据、地址或命令的情况下,编程处理可以自动地进行至同一块(或其他存储单位)中的下一可用字线、页或其他单位。

一个示例系统包括控制器和与该控制器进行通信的一个或更多个存储器管芯。控制器向存储器管芯中的一个存储器管芯发送数据和起始地址连同用于对该数据进行编程的请求。存储器管芯包括多个非易失性存储元件和一个或更多个控制电路。一个或更多个控制电路试图将数据编程至起始地址处的非易失性存储元件,并且确定在起始地址处对数据的编程失败。一个或更多个控制电路在存储器管芯没有被控制器指示新地址的情况下在存储器管芯中自动地标识新地址,并且一个或更多个控制电路在没有数据从控制器被重新传送至存储器管芯的情况下在存储器管芯上的新地址处对数据进行编程。在一个实施方式中,新地址是除了起始地址以外的任意地址。存储器管芯向控制器报告对数据的成功编程,并且标识针对成功编程的数据的新地址。作为响应,控制器将起始地址标记为错误地址并且建立从系统地址到新地址的转换,使得数据的未来读取命令将能够定位并访问数据。注意,在该示例中,在没有接收到重新传送的第一数据并且没有接收到来自存储器管芯外部的源(例如,来自控制器)的经调整的编程地址的情况下,存储器管芯更新编程地址并且重试编程。

可以实现本文所描述的技术的非易失性存储系统的一个示例为使用NAND结构的闪速存储系统,其包括夹在两个选择栅之间的串联布置的多个晶体管。串联晶体管和选择栅被称为NAND串。图1A是示出一个NAND串的俯视图。图1B是该NAND串的等效电路。图1A和图1B中所描绘的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。

注意,虽然图1A和图1B在NAND串中示出四个存储器单元,但四个存储器单元的使用仅作为示例来提供。NAND串可以具有少于四个的存储器单元或多于四个的存储器单元。例如,一些NAND串将具有128个存储器单元、256个存储器单元或更多。本文的论述不限于NAND串中的存储器单元的任意特定数目。一个实施方式使用具有66个存储器单元的NAND串,其中,64个存储器单元用于存储数据,而存储器单元中的两个存储器单元由于其不存储数据而被称为伪存储器单元。

使用NAND结构的闪速存储系统的典型体系结构将包括若干NAND串。每个NAND串通过其由选择线SGS控制的源极选择栅而连接至公共源极线,并且通过其由选择线SGD控制的漏极选择栅而连接至其关联的位线。每条位线和经由位线接触连接至该位线的相应NAND串包括存储器单元的阵列的列。位线被多个NAND串共享。通常,位线沿与字线垂直的方向在NAND串的顶部延伸并且连接至感测放大器。

除了NAND闪速存储器以外,其他类型的非易失性存储装置也可以用于实现本文所描述的新技术。例如,TANOS结构(包括在硅衬底上的TaN-Al2O3-SiN-SiO2的堆叠层)也可以与本文所描述的技术一起使用,其中,TANOS结构基本上是使用在氮化物层(而不是浮置栅)中的电荷捕获的存储器单元。在闪速EEPROM系统中有用的另一类型的存储器单元利用不导电的电介质材料代替导电的浮置栅,以便以非易失性方式存储电荷。在下述文章中描述了这样的单元:1987年3月《IEEE Electron Device Letters》第EDL-8卷第3号第93-95页Chan等人“A True Single-Transistor Oxide-Nitride-Oxide EEPROM Device”。由氧化硅、氮化硅和氧化硅(“ONO”)形成的三层电介质夹在存储器单元沟道上方的半导体衬底的表面与导电的控制栅之间。通过将电子从单元沟道注入到氮化物中来对单元进行编程,其中,在氮化物处电子被捕获并且被存储在受限区域中。然后,该存储的电荷以可检测的方式改变单元的沟道的一部分的阈值电压。通过将热空穴注入到氮化物中来对单元进行擦除。还参见1991年4月《IEEE Journal of Solid-State Circuits》第26卷第4号第497-501页Nozaki等人“A1-Mb EEPROM with MONOS Memory Cell for Semiconductor Disk Application”,该文献描述了为分裂栅配置的类似单元,在分裂栅配置中,掺杂多晶硅栅在存储器单元沟道的一部分上方延伸以形成分离的选择晶体管。

下述文献描述了另一示例:2000年11月《IEEE Electron Device Letters》第21卷第11号第543-545页Eitan等人“NROM:A Novel Localized Trapping,2-Bit Nonvolatile Memory Cell”。ONO电介质层延伸跨越在源极扩散与漏极扩散之间的沟道。用于一个数据位的电荷被定位在与漏极相邻的电介质层中,以及用于另一数据位的电荷被定位在与源极相邻的电介质层中。美国专利第5,768,192号和美国专利第6,011,725号公开了具有夹在两个氧化硅层之间的捕获电介质的非易失性存储器单元。通过分别读取电介质层中的空间分离的电荷存储区的二元状态来实现多态数据存储。也可以使用其他类型的非易失性存储技术。

通常,NAND闪速存储器被实现成二维存储器结构。然而,NAND技术还可以被实现成三维存储器结构。适合与本技术一起使用的三维存储器结构的一个实施方式是单片式三维存储器结构。

单片式三维存储器阵列是下述存储器阵列:其中,多个存储器级形成在单个衬底例如晶片之上而没有中间衬底。形成一个存储器级的层直接沉积或生长在现有的一个或多个级的层上方。作为对比,如Leedy的美国专利第5,915,167号“Three Dimensional Structure Memory”中那样,通过在分离的衬底上形成存储器级并且将存储器级粘附在彼此顶部来构建堆叠式存储器。本文所描述的技术可以与二维存储器结构和三维存储器结构一起使用。

还可以在存储装置中使用电荷捕获材料来存储表示数据状态的电荷。电荷捕获材料可以竖直地被布置在三维(3D)堆叠式存储器结构中或水平地被布置在二维(2D)存储器结构中。3D存储器结构的一个示例为包括一堆交替的导电层与电介质层的位成本可扩展(BiCS)体系结构。在该堆叠中形成存储器孔,并且然后通过使用包括电荷捕获层的材料填充存储器孔来形成NAND串。直的NAND串在一个存储器孔中延伸,而管状或U形NAND串(P-BiCS)包括一对竖直的存储器单元列,该对竖直的存储器单元列在两个存储器孔中延伸并且由底部背栅接合。存储器单元的控制栅由导电层来提供。BiCS体系结构三维结构的示例可以在美国专利8,879,333中找到。这些BiCS体系结构三维结构可以用于实现本文所描述的技术。

图2是非易失性存储系统的一个实施方式的框图。所描绘的是与主机接口142、CPU 144、ROM 146、SRAM 148和闪速接口模块150进行通信的主总线140。主机接口提供图2的部件(非易失性存储系统)与主机之间的接口。主机的示例可以包括桌上型计算机、膝上型计算机、平板电脑、蜂窝式电话、移动计算装置、智能设备等。CPU 144是(单核或多核)处理器。ROM 146可以包括任何类型的已知只读存储器。在一个实施方式中,ROM 146用于存储用于对CPU 144进行编程的固件或其他软件。SRAM 148被用作针对CPU 144的可重写主存储器。闪速接口模块150提供连接至主总线140的部件与一个或更多个存储器管芯212之间的接口。在一个实施方式中,图2的部件可以被封装在卡中或被封装在印刷电路板上,或者被嵌入在计算系统或计算设备中。闪速接口模块150包括闪速直接存储器寻址模块152、ECC引擎154、加扰器156和存储器接口158。闪速直接存储器寻址模块152提供对存储器(例如,一个或更多个存储器管芯212中的任一个存储器管芯)内部的数据的直接寻址。如下文所论述的那样,ECC引擎154提供纠错。加扰器156用于在编程之前对数据进行加扰并且在读取之后进行解扰,以便向一个或更多个存储器管芯212提供耗损均衡。存储器接口158向一个或更多个存储器管芯212提供接口。在一个实施方式中,虚线160内的所有部件(包括部件140、142、144、146、148、150、152、154、156和158)包括控制器(下文中被称为控制器160)。在一些实施方式中,控制器可以包括少于虚线160内所描绘的所有部件。

图3是描绘出在图2的控制器16上实现的软件模块的示例的框图。例如,这些软件模块可以用于对CPU 144进行编程。图3示出闪速转换层170和底层驱动器172。闪速转换层170包括垃圾收集器174、耗损级别管理器176、加扰器/解扰器密钥管理器178、启动管理器180、文件系统管理器182和逻辑地址到物理地址转换184。垃圾收集器174用于移除丢弃的数据并且对存储在存储器中的仍然有效的数据进行重新布置,以更高效地使用存储容量。耗损级别管理器176用于对一个或更多个存储器管芯212的使用进行管理,使得在整个存储空间尽可能均匀地执行编程和擦除循环。加扰器/解扰器密钥管理器178用于对数据进行加扰或解扰,并且存储用于加扰和解扰的密钥。启动管理器180提供用于启动控制器160的代码。文件系统管理器182对用于将用户数据存储在各种存储器管芯上的文件系统进行管理。逻辑地址到物理地址转换184提供从主机接收的逻辑地址与跨越存储空间的物理(系统)地址之间的转换。

底层驱动器172包括缓冲器管理器186、物理地址到存储器芯片地址转换188和存储器芯片命令生成器190。控制器160包括缓冲器,该缓冲器在数据被编程之前存储数据。该缓冲器可以驻留在SRAM 148中或者驻留在分离的存储器缓冲器中。缓冲器管理器186用于管理该缓冲器。当数据在缓冲器中时,数据可以经受加扰和纠错。物理地址到存储器芯片地址转换188提供物理地址与被选择用于存储数据的存储器芯片上的特定地址之间的转换。在一个实施方式中,物理地址到存储器芯片地址转换188可以包括用于示出物理地址(也被称为系统地址)与存储器芯片地址之间的转换的表。存储器芯片命令生成器190用于提供各种存储器管芯212中的命令,以便调用编程、读取、擦除等。

图4示出具有用于并行地对一页存储器单元(例如NAND多态闪速存储器)进行读取和编程的读/写电路的存储装置212。存储器管芯212包括(二维或三维的)存储器单元阵列200、控制电路系统220以及读/写电路230A和230B的阵列。在一个实施方式中,在阵列的相对侧以对称的方式实现由各种外围电路对存储器阵列200的访问,使得每一侧的访问线路和电路系统的密度减半。读/写电路230A和230B包括多个感测块300,多个感测块300使得能够对一页存储器单元并行地进行读取或编程。存储器阵列200可以经由行译码器240A和240B通过字线并且经由列译码器242A和242B通过位线进行寻址。在典型的实施方式中,控制器160与存储器管芯212进行通信。命令和数据经由线234在存储器管芯212与控制器244之间传输。

控制电路系统220与读/写电路230A和230B协作,以对存储器阵列200执行存储器操作。控制电路系统220包括状态机222、片上地址译码器224和电力控制模块226。状态机222提供对存储器操作的芯片级控制。片上地址译码器224提供由主机或存储器控制器使用的地址与由译码器240A、240B、242A和242B使用的硬件地址之间的地址接口。电力控制模块226控制在存储器操作期间向字线和位线供给的电力和电压。在一个实施方式中,电力控制模块226包括可以建立大于供给电压的电压的一个或更多个电荷泵。控制电路系统220、电力控制模块226、译码器224、状态机222、译码器240A/B和242A/B、读/写电路230A/B以及控制器160可以共同地或单独地被称为一个或更多个管理电路或者一个或更多个控制电路。

在一个实施方式中,主机是包括一个或更多个处理器、一个或更多个处理器可读存储装置(RAM、ROM、闪速存储器、硬盘驱动等)的计算装置(例如,膝上型计算机、桌上型计算机、智能电话、平板电脑、数码相机等),其中,处理器可读存储装置存储用于对一个或更多个处理器进行编程以执行本文所描述的方法的处理器可读代码(例如,软件)。主机还可以包括另外的系统存储器、与一个或更多个处理器进行通信的一个或更多个输入接口/输出接口和/或一个或更多个输入装置/输出装置。

在一个实施方式中,完全以硬件来实现状态机222。在另一实施方式中,可以以硬件和软件的组合来实现状态机222。例如,状态机222可以包括一个或更多个处理器和一个或更多个处理器可读存储装置(RAM、ROM、闪速存储器、硬盘驱动等),其中,处理器可读存储装置存储用于对一个或更多个处理器进行编程以执行本文所描述的方法的处理器可读代码(例如,软件)。

图5为单个感测块300的框图,其中,感测块300被划分成公共部分490和被称为感测模块480的核心部分。在一个实施方式中,针对每条位线存在单独的感测模块480以及针对多个感测模块480的集合存在一个公共部分490。在一个示例中,感测块包括一个公共部分490和八个感测模块480。成组的感测模块中的每个感测模块经由数据总线472与关联的公共部分进行通信。

感测模块480包括感测电路系统470,其中,感测电路系统470确定所连接的位线中的传导电流高于还是低于预定电平。在一些实施方式中,感测模块480包括通常被称为感测放大器的电路。感测模块480还包括用于在所连接的位线上设置电压条件的位线锁存器482。例如,位线锁存器482中锁存的预定状态将导致所连接的位线被拉至指定编程禁止的状态(例如Vdd)。

公共部分490包括处理器492、数据锁存器的集合494以及耦接在数据锁存器的集合494与数据总线420之间的I/O接口496。处理器492执行计算。例如,处理器492的功能之一是确定所感测的存储器单元中存储的数据并且将所确定的数据存储在数据锁存器的集合中。数据锁存器的集合494用于存储在读取操作期间由处理器492确定的数据位。处理器492还用于存储在编程操作期间从数据总线420导入的数据位。所导入的数据位表示要被编程至存储器中的写入数据。I/O接口496提供数据锁存器494与数据总线420之间的接口。

在读取或感测期间,系统的操作处于状态机222的控制下,状态机222控制向所寻址的单元供给不同的控制栅电压。随着控制栅电压在与存储器支持的各种存储器状态对应的各种预定义控制栅电压(读取参考电压或验证参考电压)间进行阶跃,感测模块480可能在这些电压中之一处跳变,并且输出将从感测模块480经由总线472被提供至处理器492。就此,处理器492通过考虑感测模块的跳变事件以及与经由输入线493从状态机施加的控制栅电压有关的信息来确定作为结果的存储器状态。然后,处理器492计算针对该存储器状态的二进制编码并且将作为结果的数据位存储到数据锁存器494中。在核心部分的另一实施方式中,位线锁存器482提供双重用途:既作为用于锁存感测模块480的输出的锁存器,还作为如上所述的位线锁存器。

期望的是,一些实现方式包括多个处理器492。在一个实施方式中,每个处理器492包括输出线(图4中未描绘出),使得输出线中的每条输出线被一起进行线或(wired-OR)。在一些实施方式中,在输出线连接至线或线之前使输出线反相。因为接收线或线的状态机可以确定正在被编程的所有位何时达到期望水平,所以该配置使得能够在编程验证处理期间迅速确定编程处理何时已经完成。例如,当每个位已经达到其期望水平时,针对该位的逻辑0将被发送至线或线(或者使数据1反相)。当所有位输出数据0(或数据1被反相)时,则状态机知道要终止编程处理。在每个处理器与八个感测模块进行通信的实施方式中,状态机可能(在一些实施方式中)需要对线或线读取八次,或者逻辑被添加至处理器492以累积关联的位线的结果,使得状态机仅需要对线或线读取一次。在具有许多感测模块的一些实施方式中,可以将所述许多感测模块的线或线以N个感测模块的集合进行分组,然后可以对所分的组进行分组以形成二叉树。

在编程或验证期间,将要被编程的数据从数据总线420存储在数据锁存器的集合494中。在状态机的控制下,编程操作包括并发地施加于所寻址的存储器单元的控制栅的(具有递增幅度的)一连串编程电压脉冲,以使得存储器单元同时被编程。在每个编程脉冲之后进行验证处理,以确定存储器单元是否已经被编程到期望的状态。处理器492监测经验证的存储器状态相对期望的存储器状态。当上述两个状态一致时,处理器492设置位线锁存器482,以使得位线能够被拉至指定编程禁止的状态。这禁止与位线耦接的存储器单元被进一步编程,即使存储器单元在其控制栅上经受编程脉冲也是如此。在其他实施方式中,处理器492最初加载位线锁存器482,并且感测电路系统在验证处理期间将位线锁存器482设置成禁止值。

数据锁存器/移位寄存器堆叠494包含与感测模块对应的数据锁存器和/或移位寄存器的堆叠。在一个实施方式中,每个感测模块480存在三个(或四个或另一数目)数据锁存器。在一些实现方式(但不要求)中,将数据锁存器实现为移位寄存器,使得存储于其中的并行数据被转换成用于数据总线420的串行数据,并且反之亦然。在一个优选实施方式中,与存储器单元的读/写块对应的所有数据锁存器/移位寄存器可以被链接在一起以形成块移位寄存器,使得数据块可以通过串行传输被输入或输出。特别地,成排的读/写模块被调整成使得它的数据锁存器的集合中的每个数据锁存器将数据依次移位入或移位出数据总线,就好像这些成排的读/写模块是用于整个读/写块的移位寄存器的一部分。

图5还示出状态寄存器497,状态寄存器497指示正被执行的存储器操作的状态,例如编程和读取。状态寄存器的内容可以由处理器492来设置和读取,并且可以经由信号线493被提供给状态机。图5还示出了接收状态寄存器497的输出的自动递增电路495。自动递增电路495与处理器492进行双向通信,使得自动递增电路495可以在发生编程故障时自动地递增用于编程的地址。在一个实施方式中,自动递增电路495将编程地址递增至下一字线的地址或下一页的地址。在下文中对更多的细节进行说明。编程地址可以是对字线的标识、字线偏移量、对页的标识(物理、逻辑或ECC)、页偏移量、一个或更多个存储器单元的特定集合等。编程地址的确切格式可以依据特定的实现方式而变化。

图6描绘出存储器单元阵列200的示例性结构。在一个实施方式中,存储器单元的阵列被划分成大量的存储器单元块。如对于闪速EEPROM系统所常见的,块是擦除单位。也就是说,每个块包含被一起擦除的最小数目的存储器单元。其他实施方式可以使用不同的擦除单位。

作为一个示例,图5中所描绘的NAND闪速EEPROM被划分成1024个块。然而,在其他实施方式中可以使用多于1024个的块或少于1024个的块。在该示例中,在每个块中存在与位线BL0、BL1、…、BL69,623对应的69624个列。在一个实施方式中,可以在读取操作和编程操作期间同时选择块的所有位线。可以同时(例如并发地)对沿公共字线并且连接至任意位线的存储器单元进行编程(或读取)。在另一实施方式中,将位线分成偶数位线和奇数位线。在奇数/偶数位线体系结构中,在一个时刻对沿公用字线并且连接至奇数位线的存储器单元进行编程,而在另一时刻对沿公共字线并且连接至偶数位线的存储器单元进行编程。

图6示出串联连接以形成NAND串的四个存储器单元。虽然示出在每个NAND串中包括四个单元,但是可以使用多于四个的单元或少于四个的单元(例如,16、32、64、128或其他数目的存储器单元可以在NAND串上)。NAND串的一个端子经由(连接至选择栅漏极线SGD的)漏极选择栅连接至对应位线,并且另一端子经由(连接至选择栅源极线SGS的)源极选择栅连接至源极线。

每个块通常被分成许多页。在一个实施方式中,页是编程单位。一页或更多页的数据通常存储在一行存储器单元中,其中,一行存储器单元连接至字线。页可以存储一个或更多个扇区。与磁盘驱动中的扇区的大小对应,一个扇区的用户数据通常为512字节。在一个实施方式中,块的每条字线与一页相关联。在另一实施方式中,块的每条字线与3页相关联。在其他实施方式中,字线可以与其他数目的页相关联。

扇区包括用户数据和开销数据。开销数据通常包括根据扇区的用户数据计算出的纠错码(ECC)。控制器在数据正被编程到阵列中时计算ECC,并且还在数据正被从阵列读取时检查ECC。在一些实施方式中,状态机、控制器或其他部件可以计算并且检查ECC。在一些替选方案中,ECC和/或其他开销数据与其所涉及的用户数据相比存储在不同的页或者甚至不同的块中。ECC数据可以与用户数据分开地存储或与用户数据彼此关联(例如,以形成码字)。ECC与数据的存储一起使用在本领域中是公知的。

使用先进的低密度奇偶校验(LDPC)码的高性能低复杂度编码方案是已知的与将数据存储在非易失性存储器中一起使用的一种示例ECC技术。可以使用迭代消息传递译码算法来对LDPC码进行译码。这些算法通过在表示代码的底层二分图的边缘上方的变量节点与校验节点之间交换消息来进行操作。译码器被设置有基于从存储器单元读取的电压电平(voltage level)对所存储的位进行的起始估算。通过施加位作为有效码字应该满足的奇偶校验约束来完善和改进这些起始估算。然后,通过在表示码字位的变量节点与表示对码字位的奇偶校验约束的校验节点之间交换信息来更新这些起始估算。

LDPC译码中使用的起始估算包括硬位和软位。硬位是对被存储的实际数据的估算。例如,通常通过以读取比较电平对存储器单元阈值电压进行感测来建立硬位。软位是根据以不同于读取比较电平的电压电平进行感测的额外信息。本领域已知使用硬位和软位来对从存储器单元感测的信息进行译码。例如,与LDPC译码有关的更多信息可以在下述专利文献中找到:美国专利8,099,652;美国专利8,059,463;美国专利申请公报第2011/0205823号;美国专利申请公报第2007/0283227号;美国专利申请公报第2011/0252283号;美国专利7,814,401;美国专利7,966,546;美国专利7,966,550;美国专利7,797,480;美国专利7,904,793。

可能因为下述原因一些存储器单元与其他存储器单元相比在编程或擦除时较慢:因为在这些存储器单元之间的制造变化;因为与其他单元相比这些单元之前被擦除到较低的阈值电压;因为在页内的单元之间的不均匀耗损;或其他原因。当然,因为缺陷或其他原因,一些存储器单元无论如何也不能被编程或擦除。此外,一些存储器单元编程较快并且可能被过度编程,这也可能引起错误。如上所述,纠错编码提供下述能力:容许一定数目的故障单元,同时仍保持存储器可用。在一些应用中,通过以下方式来对一页数据进行编程:即重复施加编程脉冲直至该页上的所有存储器单元验证成期望的编程状态为止。在一些实现方式中,通过在尚未被完全编程或擦除的错误存储器单元的数目少于可纠正的位的数目时终止编程脉冲序列或擦除脉冲序列来节省编程时间和擦除时间。

图7是数据沿一条字线的布置的框图。在该示例中,每个块(擦除的单位)被划分成两个平面(物理平面0和物理平面1)。每条字线在每个平面中包括8个ECC页(EP),总计十六个ECC页。每个ECC页包括报头信息(HDR)、四个扇区的用户数据和ECC信息。在一个实施方式中,四个扇区的用户数据被存储为LDPC码字。

在成功的编程处理(具有验证)结束时,存储器单元的阈值电压应该根据情况处于针对被编程的存储器单元的阈值电压的一个或更多个分布内或者处于针对被擦除的存储器单元的阈值电压的分布内。

图8示出在每个存储器单元存储一位数据时存储器单元阵列的示例阈值电压分布。然而,其他实施方式可以使用每个存储器单元多于一位数据(例如,如每个存储器单元两位、三位或四位数据)。图8示出两个阈值电压分布(与两个数据状态对应)。第一阈值电压分布(数据状态)E表示被擦除的存储器单元。第二阈值电压分布(数据状态)P表示被编程的存储器单元。弯曲的箭头指示将一些存储器单元从E编程至P的编程处理。在一个实施方式中,处于数据状态E的存储器单元存储逻辑“1”,而处于数据状态P的存储器单元存储逻辑“0”。在一个实施方式中,E中的阈值电压为负而P中的阈值电压为正。图8还描绘出读取参考电压Vr和验证参考电压Vv。通过测试给定的存储器单元的阈值电压高于Vr还是低于Vr,系统可以确定存储器单元是被擦除(E)还是被编程(P)。当对存储器单元进行编程时,系统将测试这些存储器单元是否具有大于或等于Vv的阈值电压。注意,在每个存储器单元存储一位数据的一个实施方式中,认为块中的连接至一条字线的存储器单元中存储的所有位数据是在单个逻辑页中。在一些示例实现方式中,可以以逻辑页对数据进行编程或读取。在包括ECC页的系统中,一个逻辑页可以包括多个ECC页。

图9示出在每个存储器单元存储三位数据时存储器单元阵列的示例阈值电压分布。然而,其他实施方式可以使用每个存储器单元多于三位数据或少于三位数据(例如,如每个存储器单元三位数据)。

在图9的示例中,每个存储器单元存储三位数据;因此,存在八个有效阈值电压分布,也称为数据状态:S0、S1、S2、S3、S4、S5、S6和S7。在一个实施方式中,数据状态S0低于0伏并且数据状态S1至S7高于0伏。在其他实施方式中,所有八个数据状态均高于0伏,或者可以实现其他的布置。在一个实施方式中,S0的阈值电压分布比S1至S7的阈值电压分布宽。在一个实施方式中,S0用于被擦除的存储器单元。数据从S0被编程至S1至S7。

每个数据状态与存储器单元中存储的三个数据位的唯一值对应。在一个实施方式中,S0=111,S1=110,S2=101,S3=100,S4=011,S5=010,S6=001和S7=000。也可以使用数据到状态S0至S7的其他映射。被编程到存储器单元中的数据与该单元的阈值电压电平之间的具体关系取决于针对该单元所采用的数据编码方案。例如,于2003年6月13日提交的题目为“Tracking Cells For A Memory System”的美国专利申请公报第2004/0255090号和美国专利第6,222,762号描述了用于多态闪速存储器单元的各种数据编码方案。在一个实施方式中,使用格雷码分配将数据值分配给阈值电压范围,使得在浮置栅的阈值电压错误地移位至其相邻阈值电压分布的情况下仅一个位会受到影响。然而,在其他实施方式中,不使用格雷码。

在一个实施方式中,将存储器单元中存储的所有位数据存储在同一逻辑页中。在其他实施方式中,存储器单元中存储的每位数据与不同的逻辑页对应。因此,存储三位数据的存储器单元将包括第一页中的数据、第二页中的数据和第三页中的数据。在一些实施方式中,连接至同一字线的所有存储器单元将数据存储在相同的三个数据逻辑页中。在一些实施方式中,可以将连接至字线的存储器单元分组成不同的页集合(例如,通过奇数位线和偶数位线,或者通过其他布置)。注意,本文所论述的逻辑页与在上文结合图7所论述的ECC页(EP)不同。在一个示例中,ECC页(EP)中的每个ECC页可以被划分成三个逻辑页。在另一示例中,三个逻辑页中的每个逻辑页可以被分成ECC页。术语“页”可以是指逻辑页或ECC页。

在一些装置中,存储器单元将被擦除至状态S0。可以将存储器单元从状态S0编程至状态S1至S7中的任意状态。在一个实施方式中,可以将存储器单元从擦除状态S0直接编程至编程状态S1至S7中的任意状态,这被称为全序列编程。例如,可以首先对要被编程的存储器单元的群体进行擦除,使得群体中的所有存储器单元均处于擦除状态S0。当一些存储器单元从状态S0被编程至状态S1时,其他存储器单元从状态S0被编程至状态S2、从状态S0被编程至状态S3、从状态S0被编程至状态S4、从状态S0被编程至状态S5、从状态S0被编程至状态S6以及从状态S0被编程至状态S7。通过图9的七个弯曲箭头以图形方式描绘出全序列编程。

图9示出验证目标电平Vv1、Vv2、Vv3、Vv4、Vv5、Vv6和Vv7的集合。在编程处理期间,这些验证电平用作比较电平(也被称为目标电平和/或比较电平)。例如,在将存储器单元编程至状态S1时,系统将检查以查看存储器单元的阈值电压是否达到Vv1。如果存储器单元的阈值电压尚未达到Vv1,则继续对该存储器单元进行编程,直至该存储器单元的阈值电压大于或等于Vv1为止。如果存储器单元的阈值电压达到Vv1,则停止对该存储器单元进行编程。验证目标电平Vv2用于被编程至状态S2的存储器单元。验证目标电平Vv3用于被编程至状态S3的存储器单元。验证目标电平Vv4用于被编程至状态S4的存储器单元。验证目标电平Vv5用于被编程至状态S5的存储器单元。验证目标电平Vv6用于被编程至状态S6的存储器单元。验证目标电平Vv7用于被编程至状态S7的存储器单元。

图9还示出读取比较电平Vr1、Vr2、Vr3、Vr4、Vr5、Vr6和Vr7的集合。在读取处理期间,这些读取比较电平用作比较电平。通过测试响应于对存储器单元的控制栅分别施加的读取比较电平Vr1、Vr2、Vr3、Vr4、Vr5、Vr6和Vr7存储器单元是导通还是保持关断,系统可以确定存储器单元针对哪些状态存储数据。

一般地,在验证操作和读取操作期间,所选字线连接至下述电压(参考信号的一个示例),所述电压的电平是针对每个读取操作而被指定(例如,参见图9的读取比较电平Vr1、Vr2、Vr3、Vr4、Vr5、Vr6和Vr7)或者针对验证操作而被指定(例如,参见图9的验证目标电平Vv1、Vv2、Vv3、Vv4、Vv5、Vv6和Vv7)以确定有关存储器单元的阈值电压是否达到这样的电平。在施加字线电压之后,测量存储器单元的传导电流,以确定存储器单元是否响应于施加于字线的电压而导通(传导电流)。如果测得传导电流大于某一值,则假设存储器单元导通并且施加于字线的电压大于存储器单元的阈值电压。如果测得传导电流不大于某一值,则假设存储器单元未导通并且施加于字线的电压不大于存储器单元的阈值电压。在读取或验证处理期间,未被选择的存储器单元在其控制栅处被提供有一个或更多个读取通过电压,使得这些存储器单元充当通过栅(例如,对电流进行传导而不管这些存储器单元在被编程还是被擦除)。

存在许多方法用来测量在读取操作或验证操作期间的存储器单元的传导电流。在一个示例中,通过使感测放大器中的专用电容器放电或充电的速率来测量存储器单元的传导电流。在另一示例中,所选存储器单元的传导电流使(或未使)包括该存储器单元的NAND串能够使对应位线放电。在一段时间之后测量位线上的电压,以查看该位线是否已经被放电。注意,本文所描述的技术可以与本领域已知的用于验证/读取的不同方法一起使用。也可以使用本领域已知的其他读取和验证技术。

在一些实施方式中,施加于控制栅的编程电压包括幅度随着每个相继脉冲以预定步长(例如,0.2V,0.3V,0.4V或其他)增加的一连串脉冲。在脉冲之间,一些存储系统验证各个存储器单元是否达到了其相应的目标阈值电压范围。例如,图10示出了向连接至公共字线的多个存储器单元的控制栅施加的信号的一部分。图10示出了编程脉冲557、558和559,其中,在编程脉冲之间具有验证脉冲的集合。在一个实施方式中,当执行全序列编程时,编程脉冲之间的验证处理对阈值电压分布(数据状态)S1至S7中的每个进行测试。因此,图10示出了具有与验证目标电平Vv1、Vv2、Vv3、Vv4、Vv5、Vv6和Vv7对应的幅度的七个验证脉冲。在一些实施方式中,因为验证操作中的一个或更多个操作是不必要的或多余的,所以可以跳过验证操作中的一个或更多个操作(并且因此可以跳过验证脉冲中的一个或更多个验证脉冲)。例如,如果根据图10被编程的存储器单元中没有一者达到了Vv2,则没有理由以Vv7进行验证。

图9示出了包括以下一个阶段的编程处理:在该一个阶段期间连接至同一字线的所有存储器单元被并发地编程。图11A至图11E示出了多阶段编程方法。在该实施方式中,编程处理包括三个阶段。如图11A所描绘的那样,在编程之前,对存储器单元进行擦除以使得连接至公共字线的所有存储器单元处于擦除阈值电压分布E。在编程的第一阶段期间,将目标(由于要存储在这些存储器单元中的数据)为数据状态S4、S5、S6或S7的这些存储器单元编程至中间状态IM。目标为数据状态S0、S1、S2或S3的这些存储器单元保持处于擦除阈值电压分布E。图11B以图形方式描绘出第一阶段。将被编程至中间状态IM的存储器单元编程至目标阈值电压VvIM。

在图11A至11E的编程处理的第二阶段期间,将处于擦除阈值电压分布E的这些存储器单元编程至其目标数据状态。例如,在编程处理的第二阶段期间,将要被编程至数据状态S3的这些存储器单元从擦除阈值电压分布E编程至数据状态S3,将要被编程至数据状态S2的这些存储器单元从擦除阈值电压分布E编程至数据状态S2,将要被编程至数据状态S1的这些存储器单元从擦除阈值电压分布E编程至数据状态S1,以及不对要处于数据状态S0的这些存储器单元进行编程。因此,擦除阈值电压分布E变成数据状态S0。此外,在第二阶段期间,将存储器单元从中间状态IM编程至各个数据状态S4至S7。例如,将要被编程至数据状态S7的这些存储器单元从中间状态IM编程至数据状态S7,将目标为处于数据状态S6的这些存储器单元从中间状态IM编程至数据状态S6,将要被编程至数据状态S5的两个存储器单元从中间状态IM编程至数据状态S5,以及将要编程至数据状态S4的这些存储器单元从中间状态IM编程至数据状态S4。图11C中示出了编程的该第二阶段。

如在图11C中可见,在编程的第二阶段结束时,数据状态S1至S7与相邻的数据状态交叠。例如,数据状态S1与数据状态S2交叠,数据状态S2与数据状态S1和S3交叠,数据状态S3与数据状态S2和S4交叠,数据状态S4与数据状态S3和S5交叠,数据状态S5与数据状态S4和S6交叠,以及数据状态S6与数据状态S5和S7交叠。在一些实施方式中,所有数据状态均不交叠,或者数据状态中的一些数据状态不交叠。

在编程的第三阶段,使数据状态S1至S7中的每一者紧缩,使得数据状态S1至S7中的每一者不再与相邻的状态交叠。这由图11D以图形的方式描绘出。步骤11E中描绘出三阶段编程处理的最终结果,步骤11E示出数据状态S0至S7。在一些实施方式中,数据状态S0比数据状态S1至S7宽。图11F示出针对图11A至11E的数据状态如何对数据进行编码的一个示例。

在一些实施方式中,在第二阶段期间不对要被编程至数据状态S4的这些存储器单元进行编程,从而这些存储器单元保持处于中间状态IM。在第三编程阶段期间,将存储器单元从IM编程至S4。在其他实施方式中,在第二阶段期间,去往其他状态的存储器单元还可以保持处于IM或E。

图12为描述用于对连接至公共字线的存储器单元执行编程以将其编程至一个或更多个目标(例如,数据状态或阈值电压范围)的处理的一个实施方式的流程图。可以在对连接至字线的存储器单元进行编程期间一次或多次执行图12的处理。例如,可以使用图12的处理来将存储器单元从图8的擦除数据状态E编程至图8的编程数据状态P;可以使用图12的处理来执行全序列编程以将存储器单元从图9的数据状态S0编程至数据状态S1至S7中的任意状态以及图11A至图11E的多阶段编程处理中的任意阶段。

通常,以一连串编程脉冲来施加在编程操作期间施加于控制栅的编程电压。如(例如)图10所描绘的那样,在编程脉冲之间为用以执行验证的验证脉冲的集合。在许多实现方式中,编程脉冲的幅度随着每个相继脉冲以预定步长增加。在图12的步骤570中,将编程电压(Vpgm)初始化成初始幅度(例如,约12V至16V或另一合适电平)并且将由状态机222维护的编程计数器PC初始化为1。在步骤572中,对所选字线(被选择用于编程的字线)施加编程信号的编程脉冲Vpgm。在一个实施方式中,被并发地编程的成组的存储器单元均连接至同一字线(所选字线)。未被选择的字线接收一个或更多个升压电压(例如,约7伏至11伏),以执行本领域已知的升压方案。如果存储器单元应当被编程,则将对应的位线接地。另一方面,如果存储器单元应当保持在其当前阈值电压处,则将对应的位线连接至Vdd以禁止编程。在步骤572中,对连接至所选字线的所有存储器单元并发地施加编程脉冲,使得连接至所选字线的所有存储器单元被并发地编程。也就是说,连接至所选字线的所有存储器单元在同一时间(或在重叠的时间期间)被编程。以该方式,除非已经将连接至所选字线的所有存储器单元锁定以防止编程,否则连接至所选字线的所有存储器单元将并发地使其阈值电压改变。

在步骤574中,使用目标(比较)电平的适当集合来验证适当的存储器单元,以执行一个或更多个验证操作。在一个实施方式中,通过应用以下测试来执行验证处理:测试被选择用于编程的存储器单元的阈值电压是否已经达到适当的验证比较电压(Vv1、Vv2、Vv3、Vv4、Vv5、Vv6和Vv7)。

在步骤576中,确定是否所有存储器单元均达到其目标阈值电压(通过)。如果达到其目标阈值电压,则编程处理完成并且是成功的,原因是所有选择的存储器单元被编程至其目标状态并且经验证。在步骤578中报告状态“通过”。如果在576中确定并非所有存储器单元均达到其目标阈值电压(未通过),则编程处理进行至步骤580。

在步骤580中,系统对尚未达到其相应的目标阈值电压分布的存储器单元的数目进行计数。也就是说,系统对未通过验证处理的单元的数目进行计数。可以由状态机、控制器或其他逻辑来完成该计数。在一个实现方式中,感测块300(参见图4)中的每个感测块存储其相应单元的状态(通过/未通过)。可以使用数字计数器对这些值进行计数。如上所述,感测块中的许多感测块具有被一起进行线或的输出信号。因此,检查一条线可以指示:一大组单元中没有单元未通过验证。通过适当地组织被一起进行线或的线(例如,二叉树类结构),可以使用二分搜索法来确定未通过的单元的数目。以这样的方式,如果较小数目的单元未通过,则计数迅速完成。如果较大数目的单元未通过,则计数花费较长时间。在另一替选方案中,感测放大器中的每个可以在其对应的存储器单元未通过的情况下输出模拟电压或模拟电流,并且模拟电压加法电路或模拟电流加法电路可以用于对未通过的存储器单元的数目进行计数。

在一个实施方式中,存在一个总计数,其反映当前被编程的未通过最后验证步骤的存储器单元的总数目。在另一实施方式中,针对每个数据状态保持单独的计数。

在步骤582中,确定来自步骤580的计数是否小于或等于预定限值。在一个实施方式中,预定限值为针对一页存储器单元在读取处理期间可以通过ECC纠正的位的数目。如果未通过的单元的数目小于或等于预定限值,则编程处理可以停止并且在步骤578中报告状态“通过”。在该情况下,足够多的存储器单元被正确编程,使得可以在读取处理期间使用ECC对尚未被完全编程的少数剩余存储器单元进行纠正。在一些实施方式中,步骤580针对每个扇区、每个目标数据状态、每个ECC页或其他单位来对未通过的单元的数目进行计数,并且这些计数被单独地或全体地与步骤582中的阈值进行比较。

在另一实施方式中,预定限值可以小于在读取处理期间可以通过ECC纠正的位的数目以允许未来出现错误。当对少于页的所有存储器单元进行编程时或者当针对仅一个数据状态(或少于所有状态的数据状态)比较计数时,则预定限值可以是针对一页存储器单元在读取处理期间可以通过ECC纠正的位的数目的(成比例的或不成比例的)一部分。在一些实施方式中,限值不是预先确定的。相反地,该限值基于以下内容而改变:针对该页已经计数的错误的数目;执行的编程-擦除循环的数目;或其他准则。

如果未通过的存储器单元的数目不小于预定限值,则在步骤584处继续编程处理,并且对照编程限值(PL)检查编程计数器PC。编程限值的示例包括20和30;然而,可以使用其他值。如果编程计数器PC不小于编程限值PL,则认为编程处理未通过并且在步骤588中报告状态“失败”。如果编程计数器PC小于编程限值PL,则在步骤586处继续该处理,在步骤586期间,将编程计数器PC递增1并且将编程电压Vpgm升高至下一幅度。例如,下一脉冲将具有比前一脉冲大一个步长(例如,0.1伏至0.4伏的步长)的幅度。在步骤586之后,处理循环回到步骤572并且对所选字线施加另一编程脉冲。

图13是描述由控制器(例如,图2的控制器160)执行的用于编程的处理的一个实施方式的流程图。在一个示例中,可以响应于来自主机的用于对数据进行编程的请求来执行图13的处理。此外,控制器160可以确定出于其他原因是否需要执行编程。在图13的步骤600中,控制器160确定用于对存储器进行编程的物理地址。例如,可以将(来自主机或其他实体的)逻辑地址转换成存储空间中的物理地址。在步骤602中,控制器160确定应该将数据编程到(一个或更多个存储器管芯212中的)哪个存储器管芯上。在一个实施方式中,可以将数据编程至多于一个的存储器管芯。在步骤604中,控制器160确定要进行编程的存储器管芯中的地址。这将包括进行从物理地址(也被称为系统地址)到存储器芯片地址的转换(参见物理地址到存储器芯片地址转换188)。在步骤606中,将要被编程的数据从控制器160传送至存储器管芯(例如,参见在存储器接口158与一个或更多个存储器管芯212之间传输的图2的数据信号234)。在步骤608中,将(在步骤604中确定的)存储器芯片中的地址传送至适当的存储器管芯212。在步骤610中,将进行编程的命令从控制器160传送至适当的存储器管芯212。在步骤610之后,适当的存储器管芯执行编程操作。在完成编程操作之后,在步骤612中,控制器160接收对编程操作的状态的报告。在步骤612的一个实施方式中,存储器管芯包括状态寄存器,例如状态寄存器497(参见图5)的一部分,并且控制器160连续地对状态寄存器进行轮询,以确定编程操作的状态。在步骤612的另一实施方式中,存储器管芯212主动地将状态传送至控制器160(例如,参见在存储器接口158与一个或更多个存储器管芯212之间传输的图2的数据信号234)。

注意,在一个实施方式中,步骤604中确定的地址是针对页。在一个示例实现方式中,所寻址的页是ECC页。在另一实施方式中,所寻址的页是逻辑页。当步骤604中确定的地址是针对页时,则在步骤606中传送的数据为一页数据。如果所寻址的页是ECC页,则针对ECC页传送数据。如果所寻址的页是逻辑页,则针对逻辑页传送数据。

有时,编程失败。也就是说,发生编程故障。编程故障是编程处理中的错误。存在较广范围的错误,可能发生从间歇错误到永久错误以及从小错误(即,仅缺少制造商的说明书)到大错误。在一些情况下,仍然可以对目标存储器单元进行编程,只是没有到当前所要求的编程的期望水平。可能因为字线中断、在字线之间存在短路、一个或更多个存储器单元损坏或者其他原因而发生这些错误。返回参见图12,编程故障的一个示例是图12所描绘的方法的迭代次数超出预定限值的情况。也就是说,编程操作被执行过长时间,却没有得到满意的结论。在图12的示例中,在当PC<PL不再成立(参见步骤584)的时刻存在编程故障。在这样的情况下,对适当的状态寄存器497(参见图5)进行更新以指示编程故障。在先前系统中,如果存在编程故障,则必须将数据、地址和命令从控制器重新传送至一个或更多个存储器管芯,以便重试编程。该处理浪费时间。因此提出:当发生编程故障时,存储器管芯自动地(主动地、在没有来自另一部件或控制器的另外的指令或命令的情况下)将地址推进至同一块(或其他存储单位)中的下一可用字线、页或其他单位;以及在没有接收到重新传送的数据并且没有从控制器160或该存储器管芯外部的任何其他源接收到新的(经调整的)编程地址的情况下重试编程。因此,在一个实施方式中,存储器管芯可以对连续的管芯地址多次重试编程直至最终编程成功为止。

在一个替选实施方式中,当选择要重试编程的地址时,存储器管芯不需要选择同一块中的下一可用字线、页或其他单位。更确切地,存储器管芯可以选择同一块中的不同字线、页或其他单位。

如果编程成功(参见步骤614),则在步骤620中控制器160访问用于成功对数据进行编程的地址。在一个实施方式中,数据锁存器/移位寄存器494(参见图5)包括用于存储失败的地址和成功的地址的寄存器。在另一实施方式中,处理器492(参见图5)可以包括用于存储失败的地址和成功的地址的内部寄存器。控制器160可以对这些寄存器进行轮询以获得这些信息,或者可以在成功完成编程时由存储器管芯自动地报告这些信息。

在步骤622中,控制器160确定地址是否改变。也就是说,用于成功编程的地址是否已经从控制器160最初提供的地址改变。如果地址不存在改变,则意味着起始或初始的编程命令是成功的;因此,编程成功地完成(步骤628)。

然而,如果地址存在改变(例如,成功编程的最终地址不匹配从控制器160发送的起始地址),则处理将继续进行到步骤624。在该情况下,控制器160知道初始编程导致编程故障并且存储器芯片自动地选择用于编程的新地址。因此,在步骤624中,控制器160对物理地址(系统地址的一个示例)到存储器管芯中的地址的转换进行更新,以反映步骤600中所确定的物理地址与用于成功地对数据进行编程的地址之间的转换。在一个实施方式中,该更新包括对表进行更新(参见物理地址至存储器芯片地址转换188)。此外,控制器可以将导致编程故障的地址标记为错误地址,使得控制器不使用该错误地址未来进行编程。

在步骤626中,控制器160针对当前编程处理来确定与编程故障相关联的错误地址。在一个示例中,在第一次编程故障之后,第二次重试编程将起作用;因此,将存在仅一个错误地址要标记。在其他示例中,可能存在多个连续的编程故障,从而存在多个地址要被标记为错误地址。在步骤626中,标记出所有错误地址。例如,通过考虑成功的地址和与进行编程的命令相关联的起始地址,可以确定未成功的起始地址和未成功的起始地址与成功的地址之间的任何地址均被标记。该示例假设对连续的地址(例如,连续的字线、连续的页或其他连续的单位)执行由存储器管芯进行的重试编程处理的实施方式。在标记地址之后,编程处理完成(步骤628)。

如果在步骤614中确定编程操作的状态未成功,则控制器160将确定最近刚尝试的地址是否在块的末端处(步骤640)。在一个实施方式中,由存储器管芯所执行的对地址的自动重试和递增不跨越存储器块。在这样的情况下,当到达存储器块边界时,将报告编程故障。如果与编程故障相关联的地址在块的末端处,则在步骤642中控制器160通过确定不同块中的新地址来选择新的块。在步骤644中将物理地址(系统地址)与到存储器的地址之间的转换更新成在新的/不同的块中所选择的地址,并且处理继续回到步骤606处,在步骤606中,将数据、地址、命令发送至适当的存储器管芯。如果在接收到编程故障之后控制器160确定所述地址不在块的末端处(步骤640),则存在一些其他的问题并且编程操作失败(步骤646)。

图14是描述由存储器管芯(例如,图2的存储器管芯212中的任何一个存储器管芯)执行的用于编程的处理连同由控制器160所执行的图13的处理的一个实施方式的流程图。在图14的步骤702中,存储器管芯接收用于编程的数据。例如,可以由存储器管芯响应于在图13的步骤606中控制器发送数据来执行步骤702。在图14的步骤704中,存储器管芯接收存储器管芯中的地址,这可以响应于图13的步骤608来执行。在步骤706中,存储器管芯将接收对下述数据进行编程的命令,所述数据在步骤704中所接收的存储器管芯中的地址处被接收。在一个示例中,响应于由控制器执行的图13的步骤610来执行步骤706。注意,可以以不是图14所描绘的顺序的其他顺序来发送数据、地址和命令。

在步骤708中,存储器管芯将编程地址设置成从控制器160接收的地址。在步骤710中,存储器管芯基于该编程地址来对一页或更多页(逻辑页或ECC页)进行编程。步骤710例如可以包括执行图12的处理来实现图8、图9、图10和图11A至图11F所描述的编程方案中的任一方案。此外,也可以实现其他的编程技术。步骤710的编程可以是成功的编程操作或失败(也被称为编程故障)。如果编程未成功(即,编程故障),则在步骤714中存储器管芯确定编程地址是否在块的末端(块的边界)处。如果在块的末端处,则在步骤750中存储器管芯报告失败作为编程处理的最终状态。也就是说,对状态寄存器497进行更新以指示编程故障或其他类型的编程失败。

如果在步骤714中确定当前用于编程的地址不在块的末端处,则在步骤716中确定编程处理是对整页数据还是部分页的数据进行了编程。被称为整或部分的页是如上所论述的逻辑页。在每个块的每条字线仅存储有一个逻辑页的实施方式中,如果对平面中的连接至字线的所有存储器单元进行编程,则所进行的是整页编程。如果所进行的是整页编程,则在步骤718中,系统将编程地址从所选字线自动地递增至同一块中的下一字线。返回参见图6,一些存储系统从源极侧编程至漏极侧。也就是说,首先对WL0进行编程、然后对WL1进行编程、接着对WL2进行编程,等等。如果在对WL1进行编程时发生编程故障,则在步骤718中存储器管芯将编程地址从WL1递增至WL2。在其他实施方式中,步骤718可以包括:存储器管芯将编程地址改变成不是地址空间中的下一地址的新地址;例如,存储器管芯可以选择同一块中的另一开放地址。开放地址是可以用于编程的位置的地址。

在步骤720中,存储器管芯在新地址处重试编程。因此,在没有命令、地址或数据从控制器或从存储器管芯外部的任何其他源被重新传送至存储器管芯的情况下,存储器管芯将对数据进行重新编程。在编程步骤720之后处理循环回到步骤712以确定编程是否成功。

如果在步骤716处确定存储器管芯正在执行部分页编程(例如,对少于完整的逻辑页进行编程),则在步骤740处存储器管芯将编程地址递增至同一块中的下一部分页。在一个实施方式中,当进行部分页编程时,编程的最小单位是ECC页。在这样的实施方式中,步骤740包括:将编程地址自动地递增至同一块中的下一EP页。在步骤740中递增至下一EP页之后,如上所论述的,在步骤720处处理继续进行。在其他实施方式中,步骤740可以包括:存储器管芯将编程地址改变成不是地址空间中的下一页的新地址;例如,存储器管芯可以选择同一块中的另一开放地址。

如果在步骤712处确定编程成功了,则在步骤730中存储器管芯报告成功编程状态。在一个实施方式中,其包括:更新状态寄存器497,使得控制器可以对经更新的状态寄存器进行轮询。在另一实施方式中,步骤730包括:存储器管芯主动地报告被传送至控制器160的消息中的状态。此外,存储器管芯212标识用于成功地对数据进行编程的地址。因此,如果存储器管芯在编程故障之后自动地改变编程地址(例如,步骤718),则由存储器管芯标识经更新的地址。例如,存储器管芯可以将新地址存储在寄存器中或将消息中的地址传送至控制器或其他实体。

图15提供图13和图14的流程图的操作的示例。图15示出了跨越两个平面(物理平面0和物理平面1)的存储器阵列的一部分。描绘出针对每个平面的一个块的一部分。块的一部分包括六条字线:WL0、WL1、WL2、WL3、WL4及WL5。在该示例中,每个块的每条字线存储一个逻辑页;空白矩形指示尚未被编程的ECC页(EP);表示为EP并且没有阴影的矩形是被编程并且未经历编程故障的矩形;表示为EP并且具有倾斜的阴影的矩形被试图进行编程但经历编程故障;以及具有水平阴影的矩形是在由存储器管芯212进行的自动重试之后(在存储器管芯212响应于编程故障自动地更新地址的情况下)被成功编程的ECC页。在该示例中,存储器管芯在执行整页编程并且试图对完整的逻辑页(字线WL1和物理平面0上的所有ECC页)进行编程。发生了编程故障。因此,存储器管芯212自动地递增编程地址以对物理平面0中的字线WL2进行寻址。在更新编程地址之后,存储器管芯212自动地对连接至字线WL2的存储器单元进行编程,以在没有从控制器160或存储器芯片外部的其他实体接收到用于编程的新的请求、新传送的数据或新地址的情况下成功地对数据进行编程。

图15还示出了状态寄存器497(参见图5)、自动递增电路495(参见图5)、新地址寄存器800和起始地址寄存器802。在图5的实施方式中,最终地址寄存器800存储用于成功地对数据进行编程的字线(或字线的地址)的标识。起始地址寄存器802存储由控制器160最初命令用于编程的字线中的字线(或字线的地址)。在图15的示例中,当接收到来自控制器的用于编程的地址时,自动递增电路495从寄存器802读取起始字线、将字线地址递增至同一块中的下一字线、以及将该下一字线地址存储在新地址寄存器800中,其中,上述用于编程的地址在第一次编程故障之后被存储在寄存器802中。在一个实施方式中,寄存器800和802是数据锁存器/移位寄存器494(图5)的一部分。在另一实施方式中,寄存器800和802位于处理器492内部。在又一实施方式中,寄存器800和802位于图5的电路外部但还在存储器管芯212内。

图16针对部分页编程的情况提供根据图13和图14的流程图的编程处理的另一示例。也就是说,因为仅对逻辑页的一部分进行编程,所以不对沿字线的所有ECC页进行编程。图16示出了状态寄存器497、自动递增电路495、新地址寄存器800和起始地址寄存器802。图16还示出了寄存器内容810和寄存器内容812。寄存器内容810在第一时间示出了来自数据锁存器/移位寄存器494(参见图5)的移位寄存器的内容,而寄存器内容812在第二时间示出了来自数据锁存器/移位寄存器494的移位寄存器的内容。

在图16的示例中,试图沿物理平面0上的块的字线WL2对前两个ECC页进行编程。然而,发生了编程故障。因此,对状态寄存器497进行更新以指示编程故障。因此,自动递增电路495将起始字线和ECC页地址(编程地址)递增至同一块中的新的字线和ECC页地址并且将更新的新地址存储在新地址寄存器800中。在一个实施方式中,新地址是在引起编程故障的一个或更多个ECC页之后的下一ECC页。存储器管芯212按照由块810所指示的形式将数据存储在数据锁存器/移位寄存器494中的寄存器中,使得数据与适当的ECC页对准并且使所有1(十六进制F)与未被编程的页对准。当在新地址(同一字线,下一EP集合)处重试编程时,如在块812中所描绘的,数据被移位。块810和812二者均描绘出为数据锁存器/移位寄存器494的一部分的同一移位寄存器。因此,响应于编程故障的状态,处理器492将数据移位,使得数据与下一ECC页集合对准。如可以看到的,字线WL2和物理平面0的第三ECC页和第四ECC页成功地被编程。

如可以看到的,上述的用于编程的技术仅需要进行一次数据传送。即使存在编程故障,仍不需要多次传送数据。因此,对于具有一个或更多个有缺陷的存储器单元或有缺陷的字线的存储系统而言性能将被改进。因为不多次传送数据,所以仅需要对加扰和ECC计算一次。不需要对数据进行重新加扰或重新映射等。同样地,不存在需要将数据转移至另一块的数据恢复机制。与具有更复杂并且更缓慢的编程故障处理技术相比,这使得能够针对空间和速度来最优化对控制器进行编程的固件。

一个实施方式包括一种设备,该设备包括:多个存储器单元,多个存储器单元在存储器管芯上以块为单位布置;以及一个或更多个控制电路,一个或更多个控制电路位于存储器管芯上并且与存储器单元进行通信,一个或更多个控制电路被配置成:试图在存储器管芯的第一块中的编程地址处对第一数据进行编程并且确定在该编程地址处对第一数据的编程失败,一个或更多个控制电路被配置成:响应于确定在第一地址处对第一数据的编程失败,将编程地址自动地改变成第一块中的新地址,并且在第一块中的新地址处对第一数据进行编程,一个或更多个控制电路被配置成报告对第一数据的成功编程并且将新地址标识为第一数据的编程地址。

一个实施方式包括一种方法,该方法包括:接收第一数据和用于对第一数据进行编程的请求;试图在第一块中的编程地址处对第一数据进行编程,该编程地址与用于对第一数据进行编程的请求相关联;确定在第一地址处对第一数据的编程失败;将编程地址自动地改变成第一块中的新地址并且在第一块中的新地址处对第一数据进行编程;以及报告对第一数据的成功编程并且将新地址标识为第一数据的编程地址。

一个实施方式包括一种非易失性存储系统,该非易失性存储系统包括:控制器,该控制器被配置成传送数据和起始地址连同用于对数据进行编程的请求;以及存储器管芯,该存储器管芯包括多个存储器单元和一个或更多个控制电路,存储器管芯与控制器进行通信,存储器管芯被配置成接收来自控制器的数据和起始地址连同用于对该数据进行编程的请求,一个或更多个控制电路被配置成试图将数据编程至起始地址处的存储器单元并且确定在起始地址处对数据的编程失败,一个或更多个控制电路被配置成在存储器管芯中自动地标识新地址并且将数据编程至存储器上的新地址,一个或更多个控制电路被配置成向控制器报告成功地对数据进行编程并且标识针对成功编程的数据的新地址。

注意,在权利要求书中使用术语例如第一、第二和第三不意在指定顺序或位置。更确切地,这些术语被用作标签来分别标识项目。

出于说明和描述的目的呈现了对本发明的前述详细描述。该描述不意在是穷举的或限制成所公开的确切形式。根据以上教示,许多修改和变形是可行的。选择所描述的实施方式是为了最佳地解释某些实施方式的原理及实际应用,从而使本领域技术人员能够以适合于所设想的特定用途而在各种实施方式中和与各种修改一起最佳地利用本发明。意在由所附权利要求限定范围。

(1)一种设备,包括:

多个存储器单元,所述多个存储器单元在存储器管芯上以块为单位布置;以及

一个或更多个控制电路,所述一个或更多个控制电路位于所述存储器管芯上并且与所述存储器单元进行通信,所述一个或更多个控制电路被配置成:试图在所述存储器管芯的第一块中的编程地址处对第一数据进行编程并且确定在所述编程地址处对所述第一数据的编程失败,所述一个或更多个控制电路被配置成:响应于确定在第一地址处对所述第一数据的编程失败来将所述编程地址自动地改变成所述第一块内的新地址并且在所述第一块中的所述新地址处对所述第一数据进行编程,所述一个或更多个控制电路被配置成报告对所述第一数据的成功编程并且标识所述新地址作为所述第一数据的编程地址。

(2)根据(1)所述的设备,其中,

所述一个或更多个控制电路被配置成:使用在确定在所述第一地址处对所述第一数据的编程失败之前所述存储器管芯最初接收的所述第一数据,在所述第一块中的所述新地址处对所述第一数据进行编程。

(3)根据(1)所述的设备,其中,

所述一个或更多个控制电路包括位于所述存储器管芯上的自动递增电路;以及

响应于所述一个或更多个控制电路确定在所述编程地址处对所述第一数据的编程失败,所述自动递增电路自动地确定所述新地址。

(4)根据(1)所述的设备,其中,

所述一个或更多个控制电路包括自动递增电路、连接至所述自动递增电路的编程状态寄存器以及新地址寄存器,所述自动递增电路、所述编程状态寄存器以及所述新地址寄存器均位于所述存储器管芯上;

所述状态寄存器被配置成存储对在所述编程地址处对所述第一数据的编程失败的指示;

所述自动递增电路基于存储在所述状态寄存器中的所述指示来自动地确定所述新地址;以及

所述新地址寄存器由所述自动递增电路来更新以存储对所述新地址的指示。

(5)根据(1)所述的设备,其中,

所述一个或更多个控制电路包括自动递增电路和与所述自动递增电路进行通信的地址寄存器,所述自动递增电路和所述地址寄存器均位于所述存储器管芯上;

所述自动递增电路通过将所述编程地址递增至所述第一块中的下一页来将所述编程地址自动地改变成所述新地址;以及

所述地址寄存器被更新以存储对所述新地址的指示。

(6)根据(1)所述的设备,其中,

在所述自动改变之前,所述编程地址是指所述第一块中的特定字线上的特定页;

所述一个或更多个控制电路包括自动递增电路、与所述自动递增电路进行通信的地址寄存器以及被配置成存储所述第一数据的移位寄存器,所述自动递增电路、所述地址寄存器以及所述移位寄存器均位于所述存储器管芯上;

所述自动递增电路通过将所述编程地址递增至所述第一块中的所述特定字线上的下一页来将所述编程地址自动地改变成所述新地址,所述下一页与所述特定页相邻;以及

所述移位寄存器被配置成:在确定在所述第一地址处对所述第一数据的编程失败之后并且在所述新地址处对所述第一数据进行编程之前,将所述第一数据从与所述特定页对应的第一位置自动地移位至与所述下一页对应的第二位置。

(7)根据(1)所述的设备,其中,

所述一个或更多个控制电路包括位于所述存储器管芯上的自动递增电路;以及

所述自动递增电路通过将所述编程地址递增至所述第一块中的下一字线来将所述编程地址自动地改变成所述新地址。

(8)根据(1)所述的设备,其中,

所述一个或更多个控制电路被配置成:试图在所述存储器管芯的所述第一块中的第二地址处对第二数据进行编程并且确定在所述第二地址处对所述第二数据的编程失败,所述一个或更多个控制电路被配置成确定所述第二地址在所述第一块的末端处,所述一个或更多个控制电路被配置成将所述第二数据重新编程至不同块中的不同地址。

(9)根据(1)所述的设备,其中,

所述存储器单元是单片式三维存储器结构的一部分。

(10)一种方法,包括:

接收第一数据和用于对所述第一数据进行编程的请求;

试图在第一块中的编程地址处对所述第一数据进行编程,所述编程地址与用于对所述第一数据进行编程的所述请求相关联;

确定在所述第一地址处对所述第一数据的编程失败;

将所述编程地址改变成所述第一块中的新地址,并且在所述第一块中的所述新地址处对所述第一数据进行编程;以及

报告对所述第一数据的成功编程并且标识所述新地址作为所述第一数据的编程地址。

(11)根据(10)所述的方法,其中,

改变所述编程地址和在所述第一块中的所述新地址处对所述第一数据进行编程是由存储器管芯来执行的;以及

所述存储器管芯使用在确定在所述第一地址处对所述第一数据的编程失败之前所接收的所述第一数据,在所述第一块中的所述新地址处对所述第一数据进行编程。

(12)根据(10)所述的方法,其中,

试图对所述第一数据进行编程、确定在所述第一地址处对所述第一数据的编程失败、改变所述编程地址以及在所述第一块中的所述新地址处对所述第一数据进行编程是由存储器管芯来执行的;以及

所述存储器管芯基于所述存储器管芯自身对所述新地址的计算来将所述编程地址自动地改变成所述新地址。

(13)根据(10)所述的方法,其中,

在改变所述编程地址之前,所述编程地址与所述第一块中的特定字线上的特定页对应;以及

将所述编程地址改变成所述第一块中的所述新地址包括:将所述编程地址从所述第一块中的所述特定字线上的所述特定页递增至所述特定字线上的下一页。

(14)根据(13)所述的方法,还包括:

在确定在所述第一地址处对所述第一数据的编程失败之后并且在所述新地址处对所述第一数据进行编程之前,将位于所述存储器管芯上的移位寄存器中的所述第一数据从与所述特定页对应的第一位置自动地移位至与所述下一页对应的第二位置,自动地改变所述编程地址以及在所述第一块中的所述新地址处对所述第一数据进行编程是由所述存储器管芯来执行的。

(15)根据(10)所述的方法,其中,

试图对所述第一数据进行编程、确定在所述第一地址处对所述第一数据的编程失败、改变所述编程地址以及在所述第一块中的所述新地址处对所述第一数据进行编程是由存储器管芯来执行的;以及

所述存储器管芯使用位于所述存储器管芯上的自动递增电路来将所述编程地址改变成所述新地址。

(16)根据(10)所述的方法,其中,

将所述编程地址改变成所述第一块中的所述新地址包括:将所述编程地址递增至下一字线。

(17)根据(10)所述的方法,还包括:

接收第二数据、第二地址和用于对所述第二数据进行编程的请求;

试图在所述第一块中的所述第二地址处对所述第二数据进行编程;

确定在所述第二地址处对所述第二数据的编程失败;

确定所述第二地址在所述第一块的末端处;以及

将所述第二数据重新编程至不同块中的不同地址。

(18)根据(10)所述的方法,其中,

在所述新地址处对所述第一数据进行编程包括:将所述第一数据编程在构成单片式三维存储器结构的存储器单元中。

(19)一种非易失性存储系统,包括:

控制器,所述控制器被配置成对数据和起始地址连同用于对所述数据进行编程的请求进行传送;以及

存储器管芯,所述存储器管芯包括多个存储器单元和一个或更多个控制电路,所述存储器管芯与所述控制器进行通信,所述存储器管芯被配置成接收来自所述控制器的所述数据和所述起始地址连同用于对所述数据进行编程的所述请求,所述一个或更多个控制电路被配置成试图将所述数据编程至所述起始地址处的存储器单元并且确定在所述起始地址处对所述数据的编程失败,所述一个或更多个控制电路被配置成在所述存储器管芯中标识新地址并且将所述数据编程至所述存储器上的所述新地址,所述一个或更多个控制电路被配置成向所述控制器报告对所述数据的成功编程并且标识针对成功编程的数据的所述新地址。

(20)根据(19)所述的非易失性存储系统,其中,

所述控制器被配置成:响应于接收到针对所述成功编程的数据的所述新地址的所述标识,将所述起始地址标记为错误地址并且建立从系统地址到所述新地址的转换。

(21)根据(19)所述的非易失性存储系统,其中,

所述一个或更多个控制电路包括自动递增电路、连接至所述自动递增电路的编程状态寄存器以及新地址寄存器;

所述状态寄存器被配置成存储对在所述起始地址处对所述数据的编程失败的指示;

所述自动递增电路基于存储在所述状态寄存器中的所述指示来自动地确定所述新地址;以及

所述新地址寄存器由所述自动递增电路来更新以存储对所述新地址的指示。

(22)根据(19)所述的非易失性存储系统,其中,

所述多个存储器单元是单片式三维存储器结构的一部分。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1