用于对存储器系统进行编程的方法、装置及存储器系统与流程

文档序号:25486939发布日期:2021-06-15 21:49阅读:104来源:国知局
用于对存储器系统进行编程的方法、装置及存储器系统与流程

本专利申请是2020年8月13日提交的、申请号为202010810560.9、发明名称为“用于对存储器系统进行编程的方法、装置及存储器系统”的中国专利申请的分案申请。

本说明书实施例通常涉及存储器领域,尤其涉及用于对存储器系统进行编程的方法、装置及存储器系统。



背景技术:

nand闪存存储器是一种已经广泛应用于包括笔记本、移动电话和硬盘驱动器的非易失性存储介质。在对nand闪存存储器进行编程时,为了减少系统成本,在主机将数据发送到nand闪存存储器后,主机将不再保存编程数据。在这种情况下,在发生编程错误时会丢失原始编程数据。

为了防止在发生编程错误时丢失原始编程数据,在nand闪存存储器的页面缓冲器中设置数据寄存器。在数据编程期间,数据寄存器缓存编程数据。此外,在页面缓冲器中还设置一个专用寄存器,该专用寄存器用于存储存储单元的编程状态信息(inhibit信息),所述inhibit信息用于指示针对存储单元的编程是否成功。在inhibit信息指示编程失败时,从数据寄存器读取编程数据。然而,这种nand闪存存储器需要在页面缓冲器中设置专用寄存器,从而增加了nand闪存存储器的成本和空间尺寸。



技术实现要素:

鉴于上述,本说明书实施例提供用于对存储器系统进行编程的方法、装置及存储器系统。在该编程方法中,使用存储器系统的页面缓冲器中的中间寄存器来存储编程抑制信息。在针对存储单元阵列的待编程页面的循环编程期间,针对每轮编程,根据待编程页面的各个存储单元所对应的中间寄存器中存储的编程抑制信息,确定当前待编程验证存储单元,并且使用自当前编程过程的起始验证电平起到最大验证电平中的各个验证电平,对所确定出的当前待编程验证存储单元中执行编程验证,其中,当前编程过程的起始验证电平是根据上一编程过程中针对该上一编程过程的起始验证电平的编程验证的验证失败统计结果确定。此外,在该编程方法中,在当前编程验证结束后,根据各个当前待编程验证存储单元的编程验证结果,更新对应的中间寄存器中存储的编程抑制信息。利用该编程方法,可以在无需设置专用寄存器来存储编程状态信息的情况下,实现针对存储器系统的无损编程。

根据本说明书实施例的一个方面,提供一种用于对存储器系统进行编程的方法,所述存储器系统包括页面缓冲器,所述页面缓冲器包括中间寄存器,所述中间寄存器用于在编程期间缓存中间处理结果,并且在每轮编程结束后存储编程抑制信息,所述编程抑制信息指示针对存储单元的程序编程是否成功,所述方法包括:循环执行下述编程过程,直到当前编程过程的起始验证电平大于最大验证电平:根据存储单元阵列的待编程存储器页面中的各个存储单元所对应的中间寄存器中存储的编程抑制信息确定当前待编程存储单元;使用当前编程电压来对所确定出的当前待编程存储单元进行当前编程;根据所述待编程页面的各个存储单元所对应的中间寄存器中存储的编程抑制信息,确定当前待编程验证存储单元;使用自所述当前编程过程的起始验证电平起到最大验证电平中的各个验证电平,对所确定出的当前待编程验证存储单元执行编程验证;统计针对所述起始验证电平的编程验证的验证失败统计结果;根据所述验证失败统计结果,确定下一编程过程的起始验证电平;以及根据各个当前待编程验证存储单元的编程验证结果,更新对应的中间寄存器中存储的编程抑制信息。

可选地,在上述方面的一个示例中,根据所述验证失败统计结果,确定下一编程过程的当前起始验证电平包括:在所述验证失败统计结果指示针对所述起始验证电平的编程验证存在编程未通过的存储单元时,将所述当前编程过程的起始验证电平确定为下一编程过程的起始验证电平;在所述验证失败统计结果指示针对所述起始验证电平的编程验证不存在编程未通过的存储单元时,将所述当前编程过程的起始验证电平的下一验证电平确定为下一编程过程的起始验证电平。

可选地,在上述方面的一个示例中,每个存储器页面的多个存储单元耦合到同一字线,以及每个存储器页面的各个存储单元耦合到不同的位线,根据存储单元阵列的待编程存储器页面中的各个存储单元所对应的中间寄存器中存储的编程抑制信息确定当前待编程存储单元包括:根据存储单元阵列的待编程存储器页面中的各个存储单元所对应的中间寄存器中存储的编程抑制信息,确定各个存储单元的位线电压,使用当前编程电压来对所确定出的当前待编程存储单元进行当前编程包括:将当前编程电压施加到所述存储器页面的各个存储单元的字线以及将所确定出的位线电压施加到所述存储器页面的各个存储单元的位线来进行当前编程。

可选地,在上述方面的一个示例中,所述页面缓冲器包括偏置信息寄存器,根据存储单元阵列的待编程存储器页面中的各个存储单元所对应的中间寄存器中存储的编程抑制信息,确定各个存储单元的位线电压包括:根据存储单元阵列的待编程存储器页面中的各个存储单元所对应的中间寄存器中存储的编程抑制信息以及所对应的偏置信息寄存器中的偏置信息,确定该存储单元的位线电压,所述方法还包括:使用自所述当前编程过程的起始验证电平起到最大验证电平中的各个验证电平,对所述当前待编程验证存储单元执行偏置验证;以及根据所述当前待编程验证存储单元中的各个存储单元的偏置验证结果,更新与该存储单元对应的偏置信息寄存器中存储的偏置信息。

可选地,在上述方面的一个示例中,根据存储单元阵列的待编程存储器页面中的各个存储单元所对应的中间寄存器中存储的编程抑制信息以及所对应的偏置信息寄存器中的偏置信息,确定该存储单元的位线电压包括:根据存储单元阵列的待编程存储器页面中的各个存储单元所对应的中间寄存器中存储的编程抑制信息,确定各个存储单元的第一位线电压,所述第一位线电压包括低电平和高电平中的一种;将各个存储单元的偏置信息寄存器中的偏置信息写入到对应的中间寄存器;根据各个中间寄存器中的偏置信息,将各个存储单元的第一位线电压调整为第二位线电压,所述第二位线电压包括低电平、中间电平和高电平中的一种。

可选地,在上述方面的一个示例中,所述方法还包括:根据所述当前起始验证电平和各个页面缓冲器中的数据寄存器的数据比特,恢复各个页面缓冲器的中间寄存器中存储的编程抑制信息。

可选地,在上述方面的一个示例中,所述存储器系统包括tlcnand闪存,以及所述数据寄存器包括低比特数据寄存器、中间比特数据寄存器和高比特数据寄存器。

可选地,在上述方面的一个示例中,所述当前编程电压按照增量步进编程脉冲方式生成。

根据本说明书的实施例的另一方面,提供一种用于对存储器系统进行编程的存储器控制器,所述存储器系统包括页面缓冲器,所述页面缓冲器包括中间寄存器,所述中间寄存器用于在编程期间缓存中间处理结果,并且在每轮编程结束后存储编程抑制信息,所述编程抑制信息指示针对存储单元的程序编程是否成功,所述存储器控制器被配置为:循环执行下述编程过程,直到当前编程过程的起始验证电平大于最大验证电平:根据存储单元阵列的待编程存储器页面中的各个存储单元所对应的中间寄存器中存储的编程抑制信息确定当前待编程存储单元;使用当前编程电压来对所确定出的当前待编程存储单元进行当前编程;根据所述待编程页面的各个存储单元所对应的中间寄存器中存储的编程抑制信息,确定当前待编程验证存储单元;使用自所述当前编程过程的起始验证电平起到最大验证电平中的各个验证电平,对所确定出的当前待编程验证存储单元执行编程验证;统计针对所述起始验证电平的编程验证的验证失败统计结果;根据所述验证失败统计结果,确定下一编程过程的起始验证电平;以及根据各个当前待编程验证存储单元的编程验证结果,更新对应的中间寄存器中存储的编程抑制信息。

可选地,在上述方面的一个示例中,所述存储器控制器被配置为:在所述验证失败统计结果指示针对所述起始验证电平的编程验证存在编程未通过的存储单元时,将所述当前编程过程的起始验证电平确定为下一编程过程的起始验证电平;在所述验证失败统计结果指示针对所述起始验证电平的编程验证不存在编程未通过的存储单元时,将所述当前编程过程的起始验证电平的下一验证电平确定为下一编程过程的起始验证电平。

可选地,在上述方面的一个示例中,每个存储器页面的多个存储单元耦合到同一字线,以及每个存储器页面的各个存储单元耦合到不同的位线,所述存储器控制器被配置为:根据存储单元阵列的待编程存储器页面中的各个存储单元所对应的中间寄存器中存储的编程抑制信息,确定各个存储单元的位线电压,以及将当前编程电压施加到所述存储器页面的各个存储单元的字线以及将所确定出的位线电压施加到所述存储器页面的各个存储单元的位线来进行当前编程。

可选地,在上述方面的一个示例中,所述页面缓冲器包括偏置信息寄存器,所述存储器控制器被配置为:根据存储单元阵列的待编程存储器页面中的各个存储单元所对应的中间寄存器中存储的编程抑制信息以及所对应的偏置信息寄存器中的偏置信息,确定该存储单元的位线电压,所述存储器控制器还被配置为:使用自所述当前编程过程的起始验证电平起到最大验证电平中的各个验证电平,对所述当前待编程验证存储单元执行偏置验证;以及根据所述当前待编程验证存储单元中的各个存储单元的偏置验证结果,更新与该存储单元对应的偏置信息寄存器中存储的偏置信息。

可选地,在上述方面的一个示例中,所述存储器控制器被配置为:根据存储单元阵列的待编程存储器页面中的各个存储单元所对应的中间寄存器中存储的编程抑制信息,确定各个存储单元的第一位线电压,所述第一位线电压包括低电平和高电平中的一种;将各个存储单元的偏置信息寄存器中的偏置信息写入到对应的中间寄存器;根据各个中间寄存器中的偏置信息,将各个存储单元的第一位线电压调整为第二位线电压,所述第二位线电压包括低电平、中间电平和高电平中的一种。

可选地,在上述方面的一个示例中,所述存储器控制器还被配置为:根据所述当前起始验证电平和各个页面缓冲器中的数据寄存器的数据比特,恢复各个页面缓冲器的中间寄存器中存储的编程抑制信息。

根据本说明书的实施例的另一方面,提供一种存储器系统,包括:耦合到至少一个字线和至少一个位线的存储单元阵列,所述存储单元阵列被组织成存储器页面,每个存储器页面包括多个存储单元,所述多个存储单元是多电平单元,耦合到至少一个字线的电压生成电路,用于生成所述存储单元阵列的存储单元的编程电压以及各个验证电平;耦合到至少一个位线的页面缓冲器,所述页面缓冲器包括中间寄存器,所述中间寄存器用于在编程期间缓存中间处理结果,并且在每轮编程结束后存储编程抑制信息,所述编程抑制信息指示针对存储单元的程序编程是否成功,每个存储单元对应一个页面缓冲器;以及存储器控制器,所述存储器控制器被配置为:循环执行下述编程过程,直到当前编程过程的起始验证电平大于最大验证电平:根据存储单元阵列的待编程存储器页面中的各个存储单元所对应的中间寄存器中存储的编程抑制信息确定当前待编程存储单元;使用当前编程电压来对所确定出的当前待编程存储单元进行当前编程;根据所述待编程页面的各个存储单元所对应的中间寄存器中存储的编程抑制信息,确定当前待编程验证存储单元;使用自所述当前编程过程的起始验证电平起到最大验证电平中的各个验证电平,对所确定出的当前待编程验证存储单元执行编程验证;统计针对所述起始验证电平的编程验证的验证失败统计结果;根据所述验证失败统计结果,确定下一编程过程的起始验证电平;以及根据各个当前待编程验证存储单元的编程验证结果,更新对应的中间寄存器中存储的编程抑制信息。

根据本说明书的实施例的另一方面,提供一种计算设备,包括:至少一个处理器,以及与所述至少一个处理器耦合的存储器,所述存储器存储指令,当所述指令被所述至少一个处理器执行时,使得所述至少一个处理器执行如上所述的编程方法。

根据本说明书的实施例的另一方面,提供一种机器可读存储介质,其存储有可执行指令,所述指令当被执行时使得所述机器执行如上所述的编程方法。

附图说明

通过参照下面的附图,可以实现对于本说明书内容的本质和优点的进一步理解。在附图中,类似组件或特征可以具有相同的附图标记。

图1示出了具有无损模式编程能力的存储器系统的一个示例结构示意图。

图2示出了图1中示出的存储器系统的页面缓冲器中的各个寄存器的存储信息的示例示意图。

图3示出了图1中示出的存储器系统的存储单元编程过程的示例流程图。

图4示出了图3中示出的存储单元编程过程中的中间寄存器的存储信息变化示意图。

图5示出了根据本说明书的实施例的存储器系统的示例结构示意图。

图6示出了根据本说明书的实施例的用于对存储器系统进行编程的方法的示例流程图。

图7示出了根据本说明书的实施例的存储器系统的示例结构示意图。

图8示出了根据本说明书的实施例的用于对存储器系统进行编程的方法的另一示例流程图。

图9示出了图8中示出的存储单元编程过程中的中间寄存器的存储信息变化示意图。

图10示出了根据本说明书的实施例的用于存储器控制器的操作的计算设备的示意图。

具体实施方式

现在将参考示例实施方式讨论本文描述的主题。应该理解,讨论这些实施方式只是为了使得本领域技术人员能够更好地理解从而实现本文描述的主题,并非是对权利要求书中所阐述的保护范围、适用性或者示例的限制。可以在不脱离本说明书内容的保护范围的情况下,对所讨论的元素的功能和排列进行改变。各个示例可以根据需要,省略、替代或者添加各种过程或组件。例如,所描述的方法可以按照与所描述的顺序不同的顺序来执行,以及各个步骤可以被添加、省略或者组合。另外,相对一些示例所描述的特征在其它例子中也可以进行组合。

如本文中使用的,术语“包括”及其变型表示开放的术语,含义是“包括但不限于”。术语“基于”表示“至少部分地基于”。术语“一个实施例”和“一实施例”表示“至少一个实施例”。术语“另一个实施例”表示“至少一个其他实施例”。术语“第一”、“第二”等可以指代不同的或相同的对象。下面可以包括其他的定义,无论是明确的还是隐含的。除非上下文中明确地指明,否则一个术语的定义在整个说明书中是一致的。

在本说明书中,术语“无损模式编程”可以是指在发生编程错误的情况下不会导致原始编程数据丢失的编程模式。

图1示出了具有无损模式编程能力的存储器系统1的一个示例结构示意图。

如图1所示,存储器系统1包括电压生成电路10、存储器控制器12、页面缓冲器14和存储单元阵列16。在本说明书的一些实施例中,存储器系统1可以是闪存存储器,例如,nand闪存存储器。

存储单元阵列16包括多个存储单元,并且存储单元阵列16中的多个存储单元被组织为多个存储器页面,每个存储器页面包括多个存储单元,并且每个存储器页面的多个存储单元耦合到同一字线。此外,每个存储器页面的多个存储单元中的每个存储单元耦合到不同的位线。

电压生成电路10经由字线与存储单元阵列16耦合。电压生成电路10被配置为生成页面编程所需编程电压,并且经由字线将所生成的编程电压施加到对应的页面的存储单元上来进行编程,由此实现针对该页面上的存储单元的编程。此外,电压生成电路10还被配置为生成编程验证所需的各个验证电压。

在本说明书的一个示例中,存储单元可以是多电平单元(muliti-levelcell,mlc),例如,三电平单元(tlc)、四电平单元(qlc)等。存储单元可以存储多种状态的数据。例如,在tlc存储单元的情况下,存储单元可以存储八种状态的数据。在qlc存储单元的情况下,存储单元可以存储十六种状态的数据。

例如,存储单元可以包括浮栅晶体管ft。在存储单元的编程操作期间,存储单元的浮栅晶体管ft的栅极端子可以从字线接收编程电压,并且浮栅晶体管ft的第一端子可以接收偏置电压。在一些实施例中,编程电压可以大于偏置电压,并且使得浮栅晶体管ft的栅极端子和第一端子之间存在高电压,由此将向浮栅晶体管ft的浮栅结构注入电子,从而实现数据编程,并且浮栅晶体管ft的阈值电压得到提升。

通过向浮栅晶体管ft的栅极结构注入足够的电子,浮栅晶体管ft的阈值电压提高到期望电平。因此,可以根据存储单元的浮栅晶体管ft的阈值电压的电平来识别存储单元中存储的数据的状态。

例如,在存储单元是tlc型存储单元的情况下,存储单元可以存储八种不同的数据状态,相应地,存在七种验证电压,即,第一到第七验证电压,其中,第一验证电压最小,第七验证电压最大。如果存储单元的阈值电压小于第一验证电压,则存储单元视为未被编程,并且将存储单元确定为具有第一编程状态。如果存储单元的阈值电压大于第一验证电压但小于第二验证电压,则将存储单元确定为具有第二编程状态。如果存储单元的阈值电压大于第二验证电压但小于第三验证验证,则将存储单元确定为具有第三编程状态,以此类推。在一些其它实施例中,存储单元可以存储更多或者更少的数据状态。

每个存储单元对应一个页面缓冲器14。如图1所示,页面缓冲器14包括中间寄存器141、偏置信息寄存器143、编程状态寄存器145和数据寄存器147。图2示出了图1中示出的存储器系统的页面缓冲器中的各个寄存器的存储信息的示例示意图。

如图2所示,中间寄存器141用于在进行数据读取和编程时缓存中间处理结果。换言之,中间寄存器141用于中间转存处理。偏置信息寄存器143用于缓存偏置信息。

编程状态寄存器145用于缓存编程抑制信息(inhibit信息)。所述inhibit信息用于指示针对存储单元的编程是否成功。在inhibit信息的值为1时,表示针对对应的存储单元编程成功,以及inhibit信息的值为0时,表示针对对应的存储单元的编程不成功。在对存储单元进行编程时,偏置寄存器143中存储的偏置信息以及编程状态寄存器145中存储的编程抑制信息被使用来确定存储单元所需的位线电压。具体地,在一个示例中,存储器控制器12根据存储单元阵列的待编程存储器页面中的各个存储单元所对应的中间寄存器中存储的编程抑制信息,确定各个存储单元的第一位线电压,所述第一位线电压包括低电平和高电平中的一种。随后,存储器控制器12将各个存储单元的偏置信息寄存器中的偏置信息写入到对应的中间寄存器;然后,读取各个中间寄存器中的偏置信息,并根据所读取的偏置信息来将各个存储单元的第一位线电压调整为第二位线电压,所述第二位线电压包括低电平、中间电平和高电平中的一种,其中,所述中间电平大于低电平,但小于高电平。

数据寄存器147用于缓存将要编程写入存储单元阵列的页面的数据。在存储单元是tlc型存储单元时,数据寄存器147可以包括三个数据寄存器:lp(lowerpage)寄存器、mp(middlepage)寄存器和up(upperpage)寄存器。lp寄存器用于缓存三比特数据中的低比特数据,mp寄存器用于缓存三比特数据中的中间比特数据,以及up寄存器用于缓存三比特数据中的高比特数据。

存储器控制器12与电压生成电路10、页面缓冲器14和存储单元阵列16耦合,用于控制针对存储单元阵列16的存储单元的编程操作。图3示出了图1中示出的存储器系统的存储单元编程过程的示例流程图。

如图3所示,在进行编程时,在301,准备针对存储器系统的编程操作所需数据。接着,循环执行302到307的操作,直到起始验证电平大于最大验证电平。

在302,在存储器控制器12的控制下,向待编程存储器页面的存储单元施加编程电压。具体地,存储器控制器12根据编程状态寄存器145中的编程抑制信息以及偏置信息寄存器143中的偏置信息,确定需要被编程的存储单元。随后,向所选择的待编程存储单元施加编程电压来进行编程。例如,存储器控制器12可以控制电压生成电路10生成页面编程所需编程电压,并经由字线施加到待编程存储器页面的各个存储单元上。此外,存储器控制器12将编程状态寄存器145中的编程抑制信息缓存到中间寄存器141,读取中间寄存器141中的编程抑制信息,并且根据所读取的编程抑制信息,确定各个存储单元上的第一位线电压。第一位线电压包括低电平和高电平中的一种。例如,针对编程抑制信息的值为“1”的存储单元,将其位线电压确定为高电平,即,不对该存储单元进行编程。针对编程抑制信息的值为“0”的存储单元,将其位线电压确定为低电平。此外,存储器控制器12将各个存储单元的偏置信息寄存器中的偏置信息缓存到对应的中间寄存器,读取各个中间寄存器中的偏置信息,并根据所读取的偏置信息将各个存储单元的第一位线电压调整为第二位线电压,第二位线电压包括低电平、中间电平和高电平中的一种。按照这种位线电压提供方式,可以对所提供的位线电压为低电平或中间电平的存储单元进行编程,将对应的数据寄存器中缓存的数据编程写入该存储单元中。

在进行编程验证时,在303,针对每个验证电平,存储器控制器12根据编程状态寄存器145中的编程抑制信息以及数据寄存器147中的数据比特,确定与该验证电平对应的待编程验证存储单元。在304,针对各个验证电平,对所确定的待编程验证存储单元执行编程验证,而对该存储器页面上的其余存储单元不执行编程验证操作。此外,针对每个验证电平的编程验证结果会更新到编程状态寄存器145中。

具体地,针对各个验证电平,存储器控制器12将数据寄存器147中的数据比特写入中间寄存器141。然后,存储器控制器12将编程状态寄存器145中的编程抑制信息写入中间寄存器141,随后,存储器控制器12控制中间寄存器141来对数据比特以及编程抑制信息执行计算,并根据计算结果来确定各个存储单元的位线电压。然后,存储器控制器12将所确定出的位线电压提供给各个存储单元的位线来进行编程验证,由此确定出与该验证电平对应的待编程验证存储单元。

在305,针对各个验证电平,对所确定出的与该验证电平对应的待编程验证存储单元执行偏置验证,并根据各个存储单元的偏置验证结果,更新对应的偏置信息寄存器中的偏置信息。

接着,在306,判断是否满足循环结束条件,即,起始验证电平大于最大验证电平。如果满足循环结束条件,则编程过程结束。如果不满足,则在307,增加编程电压,并返回到302执行下一循环过程。

图4示出了图3中示出的存储单元编程过程中的中间寄存器的存储信息变化示意图。如图4所示,在编程过程中,首先,存储器控制器12将编程状态寄存器145中的编程抑制信息缓存到中间寄存器141,并根据编程抑制信息来向各个存储单元的位线提供第一位线电压。接着,存储器控制器12将偏置状态寄存器143中的偏置信息缓存到中间寄存器141,由此根据偏置信息来将第一位线电压调整为第二位线电压。随后,在编程验证过程中,存储器控制器12将编程状态寄存器145中的编程抑制信息以及数据寄存器147中的数据比特缓存到中间寄存器141,并且控制中间寄存器141对编程抑制信息和数据比特执行计算,从而在中间寄存器141中缓存计算结果。

在上面的存储器系统中,需要在存储器系统中增加额外的编程状态寄存器,从而提高了存储器系统的外围电路的cmos成本。此外,所增加的编程状态寄存器也会增加存储器系统的外围电路的占用空间,从而不利于存储器系统的小型化。

为了解决上述问题,本专利提出了一种用于对存储器系统进行编程的方案。利用该编程方案,可以在无需存储器系统增加编程状态寄存器的情况下实现针对存储器系统的无损编程。

图5示出了根据本说明书的实施例的存储器系统500的示例结构示意图。

如图5所示,存储器系统500包括电压生成电路510、存储器控制器520、页面缓冲器530和存储单元阵列540。

电压生成电路510与存储器控制器520耦合。电压生成电路510被配置为在存储器控制520的控制下生成页面编程所需编程电压。此外,电压生成电路510还经由至少一个字线与存储单元阵列540耦合,并且将所生成的编程电压经由字线施加到对应页面的存储单元上来进行编程,由此实现针对该页面上的存储单元的编程。

每个存储单元对应一个页面缓冲器530。页面缓冲器530包括中间寄存器531和数据寄存器533。中间寄存器531用于在编程期间缓存中间处理结果,并且在每轮编程结束后存储编程抑制信息(inhibit信息),编程抑制信息用于指示针对存储单元的程序编程是否成功。

数据寄存器533用于缓存将要编程写入存储单元阵列540的页面的数据。在存储单元阵列是tlc型存储单元阵列时,数据寄存器533可以包括三个数据寄存器:lp(lowerpage)寄存器、mp(middlepage)寄存器和up(upperpage)寄存器。lp寄存器用于缓存三比特数据中的低比特数据,mp寄存器用于缓存三比特数据中的中间比特数据,以及up寄存器用于缓存三比特数据中的高比特数据。

存储器控制器520与电压生成电路510、页面缓冲器530和存储单元阵列540耦合,并且被配置为对存储单元阵列540的页面上的存储单元进行编程和编程验证。存储器控制器520的操作将在下面参照图6来具体描述。

图6示出了根据本说明书的实施例的用于对存储器系统进行编程的方法的示例流程图。所述方法由存储器控制器520执行。

如图6所示,在601,准备针对存储器系统的编程操作所需数据。接着,循环执行602到612的操作,直到起始验证电平大于最大验证电平。

在步骤602,在存储器控制器520的控制下,将经由电压生成电路510生成的当前编程电压施加到存储单元阵列的待编程页面的各个存储单元来进行当前编程。具体地,根据存储单元阵列的待编程存储器页面中的各个存储单元所对应的中间寄存器中存储的编程抑制信息确定当前待编程存储单元。然后,使用经由电压生成电路510生成的当前编程电压来对所确定出的当前待编程存储单元进行当前编程。例如,存储器控制器520将经由电压生成电路510生成的当前编程电压施加到存储单元阵列的待编程页面的各个存储单元的字线来进行当前编程。在第一次循环时,所施加的当前编程电压是初始编程电压。在后续循环时,所施加的当前编程电压是基于前一循环的编程电压确定的。例如,可以控制电压生成电路510按照增量步进编程脉冲方式生成当前编程电压。

在一个示例中,每个存储器页面的多个存储单元耦合到同一字线,以及每个存储器页面的各个存储单元耦合到不同的位线。根据存储单元阵列的待编程存储器页面中的各个存储单元所对应的中间寄存器中存储的编程抑制信息确定当前待编程存储单元可以包括:根据存储单元阵列的待编程存储器页面中的各个存储单元所对应的中间寄存器中存储的编程抑制信息,确定各个存储单元的位线电压。例如,针对编程抑制信息为“1”的存储单元,将其位线电压确定为高电平。针对编程抑制信息为“0”的存储单元,将其位线电压确定为低电平。相应地,使用经由电压生成电路生成的当前编程电压来对所确定出的当前待编程存储单元进行当前编程包括:将经由电压生成电路生成的当前编程电压施加到存储器页面的各个存储单元的字线以及将所确定出的位线电压施加到存储器页面的各个存储单元的位线来进行当前编程。

此外,在页面缓冲器包括偏置寄存器的情况下,存储器控制器320还根据待编程页面的各个存储单元所对应的偏置信息寄存器中的偏置信息以及数据寄存器中存储的数据比特,确定该存储单元的位线电压。相应地,存储器控制器320将所确定出的各个存储单元的位线电压施加到该存储单元的位线来进行当前编程。

在603,存储器控制器520根据待编程页面的各个存储单元所对应的中间寄存器中存储的编程抑制信息,确定当前待编程验证存储单元。具体地,存储器控制器520可以读取待编程页面的各个存储单元所对应的中间寄存器中存储的编程抑制信息,并且根据所读取的编程抑制信息来确定当前待编程验证存储单元。例如,在所读取的编程抑制信息为“1”时,指示所对应的存储单元已经被成功编程,从而将该存储单元排除在当前待编程验证的存储单元之外。换言之,存储器控制器320仅仅将当前编程抑制信息为“0”的存储单元确定为当前待编程验证的存储单元。

接着,在604,使用当前编程过程的起始验证电平,对所确定出的当前待编程验证存储单元执行编程验证,并根据各个存储单元的编程验证结果,更新对应的中间寄存器中存储的编程抑制信息。

在605,存储器控制器520统计针对起始验证电平的编程验证的验证失败统计结果。这里,验证失败统计结果vfc可以是用于指示存在验证失败的存储单元的指示值,例如,vfc为“1”表示存在验证失败的存储单元,以及vfc为“0”表示不存在验证失败的存储单元。相应地,在针对所有要被编程到与起始验证电平对应的编程状态的存储单元的编程验证中,如果存在编程验证失败的存储单元,则将vfc赋值为“1”。或者,验证失败统计结果vfc可以是存在验证失败的存储单元的计数。相应地,如果存在n个编程验证失败的存储单元,则将vfc赋值为“n”。在一个示例中,在统计出vfc值后,存储器控制器520可以将所统计出的vfc值写入偏置信息寄存器,以供存储器控制器520后续使用。

接着,存储器控制器520根据验证失败统计结果,确定下一编程过程的起始验证电平。例如,在一个示例中,在606,判断验证失败统计结果是否指示所有存储单元编程通过(即,vfc通过?)。在验证失败统计结果指示针对起始验证电平的编程验证存在编程未通过的存储单元时,存储器控制520将当前编程过程的起始验证电平(例如,lv2)确定为下一编程过程的起始验证电平,并进行到608。在验证失败统计结果指示针对起始验证电平(例如,lv2)的编程验证不存在编程未通过的存储单元时,在607,将当前编程过程的起始验证电平(例如,lv2)的下一验证电平(lv3)确定为下一编程过程的起始验证电平,并进行到608。

随后,在608,针对起始验证电平的下一验证电压到最大验证电平中的各个验证电平,对所确定出的当前待编程验证存储单元执行针对该验证电平的编程验证,并且根据各个当前待编程验证存储单元的编程验证结果,更新对应的中间寄存器中的编程抑制信息。

在609,判断起始验证电平是否大于最大验证电平。例如,在tlc存储单元的情况下,判断起始验证电平是否等于lv8。如果等于lv8,则编程过程结束。

如果不大于最大验证电平,则在610,存储器控制器520控制电压生成电路510来增加编程电压,得到下一编程过程的编程电压。例如,在一个示例中,可以按照增量步进编程脉冲方式来增加编程电压,即,每次增加一个阶梯电压。

图7示出了根据本说明书的实施例的存储器系统700的示例结构示意图。如图7所示,存储器系统700包括电压生成电路710、存储器控制器720、页面缓冲器730和存储单元阵列740。图7中示出的存储器系统700是图5中示出的存储器系统500的改进例。与存储器系统500相比,仅仅页面缓冲器730中增加了偏置信息寄存器733,其它组件的结构和作用完全相同。为了描述简便,下面仅仅对不同之处进行详细说明。

偏置信息寄存器733用于在每轮编程结束后缓存偏置信息。在对存储单元进行编程时,所述偏置信息被使用来与编程抑制信息一起确定存储单元所需的位线电压。

此外,偏置信息寄存器733还可以用于在编程验证期间缓存针对起始验证电平的编程验证的验证失败统计结果(verifyfailurecount,vfc)。所述验证失败统计结果被存储器控制器520使用来确定下一编程过程的起始验证电平。

图8示出了根据本说明书的实施例的用于对存储器系统进行编程的方法的另一示例流程图。

如图8所示,在801,准备针对存储器系统的编程操作所需数据。接着,循环执行802到813的操作,直到起始验证电平大于最大验证电平。

在步骤802,在存储器控制器720的控制下,将经由电压生成电路710生成的当前编程电压施加到存储单元阵列的待编程页面的各个存储单元来进行当前编程。具体地,根据存储单元阵列的待编程存储器页面中的各个存储单元所对应的中间寄存器中存储的编程抑制信息确定当前待编程存储单元。然后,使用经由电压生成电路710生成的当前编程电压来对所确定出的当前待编程存储单元进行当前编程。例如,存储器控制器720将经由电压生成电路710生成的当前编程电压施加到存储单元阵列的待编程页面的各个存储单元的字线来进行当前编程。在第一次循环时,所施加的当前编程电压是初始编程电压。在后续循环时,所施加的当前编程电压是基于前一循环的编程电压确定的。例如,可以控制电压生成电路710按照增量步进编程脉冲方式生成当前编程电压。

在一个示例中,每个存储器页面的多个存储单元耦合到同一字线,以及每个存储器页面的各个存储单元耦合到不同的位线。在确定当前待编程存储单元时,存储器控制器720根据存储单元阵列的待编程存储器页面中的各个存储单元所对应的中间寄存器中存储的编程抑制信息以及所对应的偏置信息寄存器中的偏置信息,确定各个存储单元的位线电压。例如,在一个示例中,存储器控制器720根据存储单元阵列的待编程存储器页面中的各个存储单元所对应的中间寄存器中存储的编程抑制信息,确定各个存储单元的第一位线电压,所述第一位线电压包括低电平和高电平中的一种。例如,针对编程抑制信息为“1”的存储单元,将其位线电压确定为高电平。针对编程抑制信息为“0”的存储单元,将其位线电压确定为低电平。接着,存储器控制器720将各个存储单元的偏置信息寄存器中的偏置信息缓存到对应的中间寄存器;并且根据各个中间寄存器中的偏置信息,将各个存储单元的第一位线电压调整为第二位线电压,所述第二位线电压包括低电平、中间电平和高电平中的一种。例如,可以根据偏置信息,将对应的部分存储单元上的低电平调整为中间电平。随后,存储器控制器720将经由电压生成电路生成的当前编程电压施加到存储器页面的各个存储单元的字线以及将所确定出的位线电压施加到存储器页面的各个存储单元的位线来进行当前编程。

在803,存储器控制器720根据当前编程过程的起始验证电平以及数据寄存器的数据比特来恢复中间寄存器中的编程抑制信息。例如,假设起始验证电平为lv2,则将数据寄存器中所存储的数据比特与lv2到lv7对应的存储单元的编程抑制信息确定为“0”,以及将数据寄存器中所存储的数据比特与lv1对应的存储单元的编程抑制信息确定为“1”。

在804,存储器控制器720根据待编程页面的各个存储单元所对应的中间寄存器中存储的编程抑制信息,确定当前待编程验证存储单元。具体地,存储器控制器520可以读取待编程页面的各个存储单元所对应的中间寄存器中存储的编程抑制信息,并且根据所读取的编程抑制信息来确定当前待编程验证存储单元。例如,在所读取的编程抑制信息为“1”时,指示所对应的存储单元已经被成功编程,从而将该存储单元排除在当前待编程验证的存储单元之外。换言之,存储器控制器320仅仅将当前编程抑制信息为“0”的存储单元确定为当前待编程验证的存储单元。

接着,在805,使用当前编程过程的起始验证电平,对所确定出的当前待编程验证存储单元执行编程验证,并根据各个存储单元的编程验证结果,更新对应的中间寄存器中存储的编程抑制信息。

在806,存储器控制器720统计针对起始验证电平的编程验证的验证失败统计结果。这里,验证失败统计结果vfc可以是用于指示存在验证失败的存储单元的指示值,例如,vfc为“1”表示存在验证失败的存储单元,以及vfc为“0”表示不存在验证失败的存储单元。相应地,在针对所有要被编程到与起始验证电平对应的编程状态的存储单元的编程验证中,如果存在编程验证失败的存储单元,则将vfc赋值为“1”。或者,验证失败统计结果vfc可以是存在验证失败的存储单元的计数。相应地,如果存在n个编程验证失败的存储单元,则将vfc赋值为“n”。在一个示例中,在统计出vfc值后,存储器控制器720可以将所统计出的vfc值写入偏置信息寄存器,以供存储器控制器720后续使用。

接着,存储器控制器720根据验证失败统计结果,确定下一编程过程的起始验证电平。例如,在一个示例中,在807,判断验证失败统计结果是否指示所有存储单元编程通过(即,vfc通过?)。在验证失败统计结果指示针对起始验证电平的编程验证存在编程未通过的存储单元时,存储器控制720将当前编程过程的起始验证电平(例如,lv2)确定为下一编程过程的起始验证电平,并进行到809。在验证失败统计结果指示针对起始验证电平(例如,lv2)的编程验证不存在编程未通过的存储单元时,在808,将当前编程过程的起始验证电平(例如,lv2)的下一验证电平(lv3)确定为下一编程过程的起始验证电平,并进行到809。

在809,存储器控制器720对所确定出的当前待编程验证存储单元执行针对起始验证电平的偏置验证,并且根据各个当前待编程验证存储单元的偏置验证结果,更新各个存储单元所对应的偏置信息寄存器中的偏置信息。

随后,针对起始验证电平的下一验证电压到最大验证电平中的各个验证电平,对所确定出的当前待编程验证存储单元执行针对该验证电平的编程验证和偏置验证。具体地,在810,使用该验证电平,对所确定出的当前待编程验证存储单元执行编程验证,并且根据各个当前待编程验证存储单元的编程验证结果,更新对应的中间寄存器中的编程抑制信息。在811,使用该验证电平,对所确定出的当前待编程验证存储单元执行偏置验证,并且根据各个当前待编程验证存储单元的偏置验证结果,更新对应的偏置信息寄存器中的偏置信息。

在812,判断起始验证电平是否大于最大验证电平。例如,在tlc存储单元的情况下,判断起始验证电平是否等于lv8。如果等于lv8,则编程过程结束。

如果不大于最大验证电平,则在813,存储器控制器720控制电压生成电路710来增加编程电压,得到下一编程过程的编程电压。例如,在一个示例中,可以按照增量步进编程脉冲方式来增加编程电压,即,每次增加一个阶梯电压。

图9示出了图8中示出的存储单元编程过程中的中间寄存器的存储信息变化示意图。如图9所示,在编程启动时,中间寄存器缓存编程抑制信息,并根据编程抑制信息来向各个存储单元的位线提供第一位线电压。接着,存储器控制器将偏置状态寄存器中的偏置信息缓存到中间寄存器,由此根据偏置信息来将第一位线电压调整为第二位线电压。随后,在编程验证过程中,存储器控制器将数据寄存器中的数据比特缓存到中间寄存器,并且根据中间寄存器中的数据比特以及起始验证电平恢复中间寄存器中的编程抑制信息,并将恢复出的编程抑制信息缓存到中间寄存器中。此外,在编程验证结束后,根据编程验证结果更新中间寄存器中的编程抑制信息。

如上参照图1到图9,对根据本说明书实施例的存储器系统编程方法及存储器控制器进行了描述。上面的存储器控制器可以采用硬件实现,也可以采用软件或者硬件和软件的组合来实现。

图10示出了根据本说明书的实施例的用于存储器控制器的操作的计算设备的示意图。如图10所示,计算设备1000可以包括至少一个处理器1010、存储器(例如,非易失性存储器)1020、内存1030和通信接口1040,并且至少一个处理器1010、存储器1020、内存1030和通信接口1040经由总线1060连接在一起。至少一个处理器1010执行在存储器中存储或编码的至少一个计算机可读指令(即,上述以软件形式实现的元素)。

在一个实施例中,在存储器中存储计算机可执行指令,其当执行时使得至少一个处理器1010:循环执行下述编程过程,直到当前编程过程的起始验证电平大于最大验证电平:根据存储单元阵列的待编程存储器页面中的各个存储单元所对应的中间寄存器中存储的编程抑制信息确定当前待编程存储单元;使用当前编程电压来对所确定出的当前待编程存储单元进行当前编程;根据所述待编程页面的各个存储单元所对应的中间寄存器中存储的编程抑制信息,确定当前待编程验证存储单元;使用自当前编程过程的起始验证电平起到最大验证电平中的各个验证电平,对所确定出的当前待编程验证存储单元执行编程验证;统计针对起始验证电平的编程验证的验证失败统计结果;根据验证失败统计结果,确定下一编程过程的起始验证电平;以及根据各个当前待编程验证存储单元的编程验证结果,更新对应的中间寄存器中存储的编程抑制信息。

应该理解,在存储器中存储的计算机可执行指令当执行时使得至少一个处理器1010进行本说明书的各个实施例中以上结合图1-9描述的各种操作和功能。

根据一个实施例,提供了一种比如机器可读介质(例如,非暂时性机器可读介质)的程序产品。机器可读介质可以具有指令(即,上述以软件形式实现的元素),该指令当被机器执行时,使得机器执行本说明书的各个实施例中以上结合图1-9描述的各种操作和功能。具体地,可以提供配有可读存储介质的系统或者装置,在该可读存储介质上存储着实现上述实施例中任一实施例的功能的软件程序代码,且使该系统或者装置的计算机或处理器读出并执行存储在该可读存储介质中的指令。

在这种情况下,从可读介质读取的程序代码本身可实现上述实施例中任何一项实施例的功能,因此机器可读代码和存储机器可读代码的可读存储介质构成了本发明的一部分。

可读存储介质的实施例包括软盘、硬盘、磁光盘、光盘(如cd-rom、cd-r、cd-rw、dvd-rom、dvd-ram、dvd-rw、dvd-rw)、磁带、非易失性存储卡和rom。可选择地,可以由通信网络从服务器计算机上或云上下载程序代码。

本领域技术人员应当理解,上面公开的各个实施例可以在不偏离发明实质的情况下做出各种变形和修改。因此,本发明的保护范围应当由所附的权利要求书来限定。

需要说明的是,上述各流程和各系统结构图中不是所有的步骤和单元都是必须的,可以根据实际的需要忽略某些步骤或单元。各步骤的执行顺序不是固定的,可以根据需要进行确定。上述各实施例中描述的装置结构可以是物理结构,也可以是逻辑结构,即,有些单元可能由同一物理实体实现,或者,有些单元可能分由多个物理实体实现,或者,可以由多个独立设备中的某些部件共同实现。

以上各实施例中,硬件单元或模块可以通过机械方式或电气方式实现。例如,一个硬件单元、模块或处理器可以包括永久性专用的电路或逻辑(如专门的处理器,fpga或asic)来完成相应操作。硬件单元或处理器还可以包括可编程逻辑或电路(如通用处理器或其它可编程处理器),可以由软件进行临时的设置以完成相应操作。具体的实现方式(机械方式、或专用的永久性电路、或者临时设置的电路)可以基于成本和时间上的考虑来确定。

上面结合附图阐述的具体实施方式描述了示例性实施例,但并不表示可以实现的或者落入权利要求书的保护范围的所有实施例。在整个本说明书中使用的术语“示例性”意味着“用作示例、实例或例示”,并不意味着比其它实施例“优选”或“具有优势”。出于提供对所描述技术的理解的目的,具体实施方式包括具体细节。然而,可以在没有这些具体细节的情况下实施这些技术。在一些实例中,为了避免对所描述的实施例的概念造成难以理解,公知的结构和装置以框图形式示出。

本公开内容的上述描述被提供来使得本领域任何普通技术人员能够实现或者使用本公开内容。对于本领域普通技术人员来说,对本公开内容进行的各种修改是显而易见的,并且,也可以在不脱离本公开内容的保护范围的情况下,将本文所定义的一般性原理应用于其它变型。因此,本公开内容并不限于本文所描述的示例和设计,而是与符合本文公开的原理和新颖性特征的最广范围相一致。

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