具有可重新配置的每单元位数的存储系统

文档序号:1044835 发布日期:2020-10-09 浏览:14次 >En<

阅读说明:本技术 具有可重新配置的每单元位数的存储系统 () 是由 A·哈基菲罗兹 P·卡拉瓦德 X·郭 A·S·马德拉斯瓦拉 B·M·帕桑克 于 2020-02-28 设计创作,主要内容包括:一种存储器设备被设计为将数据存储在多级别存储单元(MLC存储单元)中。该存储器设备包括控制器,该控制器根据第一MLC密度或第二MLC密度将数据动态地写入存储单元。第二密度不如第一密度密集。例如,当存在足够的写入带宽从而以第一密度对存储单元进行编程时,控制器可以确定使用第一密度。当写入吞吐量增加时,控制器可以使用相同的程序过程和电压以第二密度而不是第一密度对相同的MLC存储单元进行编程。()

具有可重新配置的每单元位数的存储系统

技术领域

说明书总体上涉及存储设备,并且说明书更具体地涉及具有动态可变的每单元位数(number of bits per cell)的存储系统。

背景技术

存储设备制造商面临着增加新兴设备中可用的存储总量的压力。然而,随着设备的平面覆盖面积或厚度或两者的减小,存储装置的形状因子持续缩小。为了以较小的形状因子提供增加的存储,存储设备制造商努力增加存储设备的密度。

用于增加密度的一种机制是创建具有更多位的存储设备。另一机制是应用允许较高的每单元位数的技术。当使用可以存储多个位的位单元时,在密度与性能之间存在折中。即,具有越高密度的位单元花费越长的时间来编程。典型地,编程定时不是线性的,而是随着增加的每单元位数而呈指数增加。传统上,已经要求编程为显著更慢的,以确保在处理更精细的电压电平差异时所需要的精度,以及用于确保正确数据写入发生所需要的增加次数的验证操作。

传统的存储设备取决于每单元位数的密度来执行不同的程序操作。传统上,存储控制器具有单独的程序算法,以及用于控制单独的算法所需要的所有参数。

具体实施方式

如本文所描述的,存储系统动态地可重新配置为使用一个密度的多级别位单元或另一密度的多级别位单元。例如,系统可以支持QLC(四级别单元)和TLC(三级别单元),或者QLC和双级别单元。出于本文的目的,MLC(多级别单元)指代存储多于一位数据的存储单元或位单元。因此,单个可寻址存储位置可以保存多位数据。MLC可以是QLC、TLC或双级别单元(其也可以称为两级别单元)。对位单元、存储器单元体或存储单元的引用可以指代存储器系统内的可寻址存储位置。

存储器设备被设计为将数据存储在多级别存储单元(MLC存储单元)中,并且典型地支持更密集的第一位密度。存储器设备包括控制器,该控制器根据第一MLC密度或不如第一密度密集的第二MLC密度来将数据动态地写入存储单元。因此,存储系统可以在具有不同密度的MLC之间进行切换。可以利用与较高密度模式共享的编程序列对较低密度模式进行编程,其中对序列进行修改。对序列的修改可以包括一个或多个配置改变,以及对编程的一通或多通或一个或多个级别的消除。因此,存储控制器可以利用相同的控制路径执行相同的程序序列,但是会导致不同的MLC密度。

在一个示例中,存储系统是具有用于存储数据的固态NVM(非易失性介质)的非易失性存储系统。例如,系统可以基于NAND(与非)存储器单元体。在一个示例中,存储系统包括存储控制器或存储器控制器以及多个每单元多级别的NAND存储器单元体。如所描述的,可以即时地并且在存储系统的活动操作期间重新配置每单元位数。

在一个示例中,可以利用在控制器与存储设备之间的握手来标识用于存储数据的不同算法或在存储设备内的不同存储密度之间的交换。例如,在不同的写入吞吐量条件下,存储设备可以标识不同的存储容量。

在一个示例中,以较高的每单元位数配置来设计并配置存储器单元体。在一个示例中,通过跳过多通编程序列中的最后一个编程通来执行较低的每单元位数配置。例如,在使用4-16编程序列的每单元4位(QLC)存储器单元体中,控制器可以通过跳过编程算法中的第二通来实现每单元2位配置。因此,只有第一路径(“4”)最终被编程,而不是第二通(“16”)。

在一个示例中,修改了编程算法以在每通中对较少数量的位进行编程。例如,在使用4-16编程算法的QLC存储器单元体中,可以修改第一通以仅对每单元一位进行编程,并且修改第二通以对每单元3位进行编程,因此将存储器单元体重新配置为具有2-8编程算法的每单元3位(TLC)配置。

通过向控制器提供用于通过每通写入更少的位或者通过消除编程步骤或者通过写入更少的位和消除编程步骤的组合实现经修改的编程序列的能力,与利用单独的编程算法来实现可配置的每单元位数相比,系统可以利用更简单的程序逻辑来实现可配置的每单元位数。此外,无论使用哪个编程序列,要求与存储器单元体接合的电路都可以是相同的。这样的系统实现对可重新配置的每单元位数的应用,而其中提供单独的电路以在相同的芯片或相同的设备上实现单独的编程算法的实现方式将是不切实际的。

在一个示例中,控制器确定是否需要较高的写入吞吐量来服务传入的写入请求。在一个示例中,如果控制器确定写入吞吐量高于通过写入较慢的较高密度的存储器单元体或单元可以处理的吞吐量,则控制器将存储器单元体重新配置为以较小的每单元位数配置进行操作。在较低的每单元位数的情况下,存储设备可以更快地对数据进行编程,从而改进写入吞吐量。在一个示例中,当不需要较高的写入吞吐量时,控制器将存储器单元体配置为以较高的每单元位数配置进行操作。较高的每单元位数配置实现针对相同的设备的更高的存储容量。因此,系统可以提供更高的突发写入吞吐量,同时维持更高的存储容量。即时可重新配置性使得系统能够实时响应于存储设备或存储系统为其存储数据的主机系统的改变的写入吞吐量要求。

例如,当存在足够的写入带宽从而以第一密度对存储单元进行编程时,控制器可以确定使用第一密度。当写入吞吐量增加时,控制器可以使用相同的程序过程和电压以第二密度而不是第一密度对相同的MLC存储单元进行编程。当写入吞吐量降低时,控制器可以再次以第一密度对相同的MLC存储单元进行编程。

在一个示例中,当存储系统空闲或以其他方式写入吞吐量的突发充分地减小时,控制器可以将数据从较低的每单元位数配置(较低密度单元)复制回较高的每单元位数配置(较高密度单元)。重新配置存储器单元体的时间可以实质上少于读取数据所需要的时间。如下面更详细提供的,实现方式可以在NAND管芯或其他存储设备中具有最小的面积开销。

图1是在不同密度的多级别单元之间选择性地存储数据的系统的示例的框图。系统100包括与主机110耦合的SSD 120。主机110表示连接到SSD 120的主机硬件平台。主机110表示SSD 120为其存储数据的系统。SSD 120可以是或可以包括存储系统。

主机110包括CPU(中央处理单元)112或作为主机处理器的其他处理器。CPU 112表示生成用于访问存储在120上的数据的请求以读取数据或将数据写入存储装置的任何主机处理器。这样的处理器可以包括单核心或多核心处理器、用于计算设备的主要处理器、图形处理器、***处理器或者补充或辅助处理器或者组合。CPU 112可以执行主机OS和其他应用以引起系统100的操作。

主机110包括控制器114,该控制器114表示可以被包括在CPU 112与SSD 120之间的连接中的硬件组件。控制器114可以包括互连电路和逻辑以实现对SSD 120的访问。控制器114表示系统控制器或主机侧控制器,并且将被理解为与SSD 120内的控制器130不同。

SSD 120表示将数据存储在非易失性介质(NVM)阵列中的固态驱动器。阵列140表示NVM阵列。在一个示例中,阵列140包括QLC闪速存储器。闪速存储器可以包括NAND存储单元、NOR存储单元或其他存储装置。在一个示例中,阵列140的全部或一部分可重新配置为TLC闪速存储器。在一个示例中,阵列140的全部或一部分可重新配置为两级别闪速存储器。

例如,考虑到主机110生成对SSD 120的写入序列,这将导致与控制器130在给定的时间窗口内可以存储到阵列140的写入吞吐量相比更高的写入吞吐量。在一个示例中,控制器130将阵列140的部分142配置为不那么密集的存储区域,而部分144保持不受影响。在这样的示例中,重新配置可以指代由控制器130将部分142分配为以比部分144更低的密度存储数据。当将数据存储到部分142时,根据不同的程序序列存储数据以导致以与部分144的密度不同的密度或每单元位进行存储。部分142不一定位于阵列140的任何特定区域。在一个示例中,部分142包括分散在整个阵列140中的地址空间,而不是连续的地址空间。当控制器130配置存储算法或过程以根据较低密度对单元进行编程时,部分144还可以受制于以较低密度存储数据。

SSD 120包括用于控制对阵列140的访问的控制器130。控制器130表示在SSD 120内的用于执行对介质的控制的硬件和控制逻辑,对介质的控制包括控制每个存储地址要存储的每单元位数。MLC控件132表示在控制器130内的用于提供对阵列140的可重新配置的控制的逻辑。可重新配置的控制可以根据本文中的任何示例,包括在QLC与TLC之间切换或在QLC与某种其他MLC之间切换。

SSD 120被示出为包括缓冲器122。缓冲器122表示用于阵列140与控制器114之间的访问接口的缓冲器。缓冲器122包括具有比阵列140更快的访问时间的存储器。例如,缓冲器122可以包括SLC(单级别单元)存储装置、可字节寻址的非易失性存储设备(例如,基于电阻的存储器,其基于在地址位置处的电阻来存储数据)、动态随机存取存储器(DRAM)设备或其他存储器。将理解的是,缓冲器122与部分142或阵列140的被重新配置为以较低密度进行存储的部分分离。对于动态地可重新配置的存储装置,可以相对于其他存储系统减小缓冲器122的大小,或者可以消除缓冲器122,这取决于系统配置。

SSD 120包括电压源124,该电压源124表示SSD 120内的用于向阵列140提供程序电压的电压源。在一个示例中,SSD 120从主机110接收一个或多个电压。典型地,SSD 120包括一个或多个电压调节器或电压泵,以提供不同的电压来用于程序和验证操作。基于控制器130的控制,通过程序和验证序列来动态改变电压。在一个示例中,对于较低密度的存储装置和较高密度的存储装置,所使用的电压是相同的。在一个示例中,当电压被配置用于较低密度模式时,与默认的较高密度模式相比,电压是不同的。在一个示例中,取决于来自MLC控件132的控制,控制器130不同地配置电压源124的电压。因此,控制器130可以使得对被配置为较低密度存储区域的区域(表示为部分142)与表示以最高存储密度的存储区域的部分144相比使用不同的电压序列。

将理解的是,在一个示例中,部分142将仅在较高写入吞吐量的条件期间存在。例如,阵列140可以典型地仅包括部分144的类型的存储装置,但是控制器130可以在需要时配置部分142。在一个示例中,在不再需要较快的写入之后,控制器130将部分142的数据写回到较高密度的存储装置中,并且消除部分142。

在一个示例中,MLC控件132包括用于多个不同MLC状态或MLC模式的共同编程算法。在一个示例中,编程算法具有导致不同的每单元位数但是其他方面是相同的算法的变型。在一个示例中,即使当使用不同的存储密度时,控制器130也利用对部分144的单元的共同电压来对部分142的单元进行编程。在一个示例中,对于在不同模式之间的存储,程序脉冲宽度是不同的,其中不同模式具有不同的每单元位数。

通常,为了在仍然受益于较高的存储容量的同时改进写入吞吐量,存储系统具有可重新配置的每单元位数。在一个示例中,系统包括存储控制器或存储器控制器以及多个QLC非易失性存储器单元体,例如,QLC NAND单元体。存储控制器可以耦合到主机和多个非易失性存储器单元体。当存储控制器与NAND管芯相关联时,该存储控制器可以被称为NAND控制器。SSD可以包括多个NAND管芯和多个NAND控制器。在一个示例中,控制器连接到诸如DRAM或SRAM之类的易失性存储器以暂时地存储数据和地址查找表。在一个示例中,在具有多个非易失性存储器设备的系统中,每个非易失性存储器具有控制器和存储位置。

在一个示例中,存储控制器能够基于其从主机接收到的请求来确定用于写入吞吐量的工作负载。当存储控制器确定所请求的工作负载具有比根据存储装置的默认配置(例如,QLC配置)可以实现的写入吞吐量更高的写入吞吐量时,存储控制器向NAND单元体中的至少一个发送一系列命令以将所选定的一个或多个单元体重新配置为较低的每单元位数配置,例如,TLC配置或两级别单元配置。对于针对NAND单元体接收到的随后的程序或读取命令,存储控制器执行命令从而以TLC模式访问该单元体。在一个示例中,当工作负载减少时,存储控制器向NAND单元体发送命令集,以将这些单元体重新配置回QLC模式。

在一个示例中,存储控制器维护以较低密度模式编程的地址列表(例如,块列表),以实现对用于读取操作的命令的重新配置。在一个示例中,将来自每个NAND单元体的块的子集静态地指派为以较低的每单元位数来配置。在这样的实现方式中,较低密度的块的数量可以被保持为很小。在这样的实现方式中,在给定对于较高密度的块经历的每个擦除/编程周期而言较低密度的块经历显著更多数量的擦除/编程周期的情况下,与较高密度的块相比,较低密度的块可能要求显著更高的耐久性能力。在一个示例中,将来自每个NAND单元体的块的子集动态地指派为以较低的每单元位数来配置。在这样的实现方式中,在需要时,较低密度的块的数量可以更大。在这样的实现方式中,与较高密度的块相比,较低密度的块不要求较高的耐久性能力,因为平均每个块经历相同数量的擦除/编程周期。

在一个示例中,NAND控制器维护参数以操作较高密度的块和较低密度的块两者。这些参数可以包括控制擦除条件、程序脉冲步长(ΔVPGM)、程序验证(PV)、读取参考(R)的设置或其他设置。在一个示例中,每个块被动态地指派为较低密度的块或较高密度的块,例如,TLC或QLC块。这样的操作可以确保平均每个块将经历相同数量的擦除/编程周期。在一个示例中,NAND控制器可以在较低密度模式与较高密度模式之间共享控制擦除、编程或读取操作的参数中的一些。共享参数可以减少每个管芯上用于维护这些参数所需要的存储位置的数量。

图2是可以将数据选择性地存储为四级别单元、三级别单元或两级别单元的存储设备的示例的框图。系统200提供了根据图1的系统100的系统的一个示例。系统200示出了可以根据系统100的硬件平台的主机和SSD的逻辑层。在一个示例中,主机210提供了主机110的一个示例。在一个示例中,SSD 220提供了SSD 120的一个示例。

在一个示例中,主机210包括主机OS 212,该主机OS 212表示用于主机的主机操作系统或软件平台。主机OS 212可以包括在其上执行应用、服务、代理、其他软件并且由处理器执行的平台。文件系统214表示用于控制对NV介质的访问的控制逻辑。文件系统214可以管理使用什么地址或存储器位置来存储什么数据。存在许多已知的文件系统,并且文件系统214可以实现已知的文件系统或其他专有系统。在一个示例中,文件系统214是主机OS212的一部分。

存储驱动器216表示控制主机210的硬件的一个或多个系统级别模块。在一个示例中,驱动器216包括软件应用以控制到SSD 220的接口,并且因此控制SSD 220的硬件。存储驱动器216可以提供主机与SSD之间的通信接口。

SSD 220的控制器230包括固件240,该固件240表示用于控制器的控制软件/固件。在一个示例中,控制器230包括主机接口232,该主机接口232表示到主机210的接口。在一个示例中,控制器230包括NV接口234,该NV接口234表示到(多个)NV介质设备250的接口。接口232和接口234表示在控制器230的硬件上执行的控件。将理解的是,控制器230包括用于与主机210接合的硬件,该硬件可以被认为由主机接口软件/固件232控制。同样地,将理解的是,控制器230包括用于与NV介质250接合的硬件。在一个示例中,用于主机接口232的代码可以是固件240的一部分。在一个示例中,用于NV接口234的代码可以是固件240的一部分。

固件240控制硬件接口以启用通信。该控制可以包括提供配置设置和执行通信操作,例如,支持通信栈。在一个示例中,在系统200内的一个或多个接口符合诸如PCIe(例如,2017年6月发布的***组件互连快速4.0,其可从PCI特别兴趣小组(PCI-SIG)获得)、NVMe(例如,2018年5月发布的非易失性存储器快速1.3c,其可从NVMExpress公司获得)之类的标准,或其他非易失性存储器互连标准,或其他版本/发行版或衍生物。

在一个示例中,控制器230包括错误控件236。错误控件236处理所访问的数据中的数据错误以及关于符合信令和通信接合的临界情况。在一个示例中,错误控件236中的一些或全部以硬件实现。在一个示例中,错误控件236中的大多数以固件实现。固件实现方式可以提供改进的灵活性和减少的电路,尽管相对于全硬件实现方式可能存在性能折中。

NV介质250表示根据所描述的任何示例的非易失性设备。NV介质250包括非易失性单元的阵列,其中单元252被示出为单元的单个示例。在一个示例中,单元252可以支持QLC实现方式。根据本文所描述的,单元252可以被动态地重新配置为TLC或两级别单元。MLC控件260表示用于执行这种重新配置的控制逻辑和电路。在一个示例中,MLC控件260包括用于引起重新配置的检测机制。例如,MLC控件260可以包括固件240中的响应于检测到SSD 220中的条件而被触发的固件例程。这样的条件可以是当写入吞吐量达到阈值级别时。从能够更快地编程中受益的任何其他条件可以同样地触发对NV介质250的至少一部分(例如,单元252)的动态重新配置。通常,MLC控件260表示关于针对单元252和其他单元将一个MLC模式改变为另一MLC模式的控制和决策制订。在一个示例中,MLC控件260是固件240的一部分。

固件240的MLC程序242可以表示一个或多个编程序列。编程序列也可以称为编程算法,并且表示控制器230通过其进行编程或将数据写入NV介质250的一系列操作。典型地,编程算法包括一个或多个操作以对目标单元进行充电和设置,随后进行一个或多个验证操作,以确保正确地设置了该单元。在一个示例中,MLC程序242表示用于较高的每单元位数的程序序列,该程序序列可以被修改以可替代地以较低的每单元位数进行编程。

单元252被表示为具有b0和b1,从而指代对于单元252要作为多级别单元的最小条件为至少两位。在一个示例中,单元252还可以包括b2作为TLC单元的MSB(最高有效位)。在一个示例中,单元252还可以包括b3(并且必定也将包括b2)作为QLC单元的MSB。可以将单元252编程为针对任何MLC模式具有b0和b1,并且可替代地具有b0:b2或b0:b3。

图3是针对TLC单元的阈值电压分布的示例的图。图300示出了电压电平L0:L7的电压分布。在每单元多级别非易失性存储器中,每个存储器单元存储多于一位的信息。例如,在每单元三级别(TLC)NAND存储器中,每个存储器单元被编程为8种可能的状态中的一种以存储3位信息,其中不同的状态被转换为三位。

在一个示例中,在程序操作期间,主机提供三页的数据。属于所选定的字线(WL)的存储器单元被编程为图300中由L0:L7表示的8种可能的阈值电压电平中的一种。在一个示例中,三个页面可以被表示为LP、UP和XP(分别为页面0、页面1和页面2)。

通常,将MLC编程为2^N种可能的状态中的一种,其中N指示要存储的位数。典型地,同时访问多个单元,并且因此单元的不同位可以被认为是将作为一组位被访问的数据的页面的一部分。每单元的多个位可以是用于不同页面的位。可以执行位到页面的其他组织和分布。出于对整体的解释的目的,将假设多级别单元的不同位是不同页面的一部分。

为了读取存储于诸如TLC NAND之类的MLC存储器中的信息,将属于所选定的WL的单元的阈值电压与参考读取电压的集合(图300中示为R1:R7)进行比较。R1表示可以在L0与L1之间进行区分的阈值电压。R2表示在L1与L2之间的阈值电压等等。作为示例,不是由R3触发而是随后由R4触发的单元可以被理解为具有L3处的值。如图300中示出的,在页面右侧电压增加。因此,R2高于R1,R3高于R2等等。在下面的图中未示出增加的电压,但是将理解的是,增加的电压适用于其他电压分布图。

图4是针对具有2通2-8编程序列的TLC单元的阈值电压分布的示例的图。图400表示针对TLC单元的编程序列。图400的程序序列可以由管理对MLC单元的编程的控制器来应用。在一个示例中,控制器执行图400的序列作为针对QLC单元的序列的替代方案。

对每单元多位NAND存储器或其他非易失性存储器中的数据的编程典型地在多通中执行,以使相邻单元之间的干扰的影响最小化。该过程可以适用于其他非易失性存储器,但是在整体中将使用NAND存储器作为示例。

作为示例,可以利用示出的2通2-8算法来执行对TLC NAND存储器的编程。阶段402表示在编程之前的单元的阈值电压分布。阶段404表示第一通,其中提供了一个页面的数据,并且存储器单元被编程为由L0和L1表示的两种状态中的一种。阶段406表示第二通,其中多提供了两个页面的数据,读取在阶段404中已经被编程到单元中的数据,并且将该单元编程为8种可能的状态L0:L7中的一种。因此,第一通是2种状态中的一种,并且第二通是8种状态中的一种,从而导致2-8序列。可以在下一WL被编程为其第一通之后执行第二通,以使来自相邻单元的干扰最小化。

图5是针对QLC单元的阈值电压分布的示例的图。图500示出了电压电平L0:L15的电压分布。该示例示出了每单元四级别(QLC)NAND存储器,其中每个存储器单元都被编程为16种可能的阈值电压电平中的一种,以对4个页面的数据或4位数据进行编码。在一个示例中,可以将四个页面表示为LP、UP、XP和TP(分别为页面0、页面1、页面2和页面3)。

为了读取存储在QLC中的信息,将属于所选定的WL的单元的阈值电压与参考读取电压的集合(图500中示为R1:R15)进行比较。R1表示可以在L0与L1之间进行区分的阈值电压。R2表示在L1与L2之间的阈值电压等等。作为示例,不是由R3触发而是随后由R4触发的单元可以被理解为具有L3处的值。R2是高于R1的电压,R3高于R2等等。在下面的图中未示出增加的电压,但是将理解的是,增加的电压适用于其他电压分布图。

图6是针对具有2通4-16序列的QLC单元的阈值电压分布的示例的图。图600表示针对QLC单元的编程序列。图600的程序序列可以由管理对QLC单元的编程的控制器来应用。在一个示例中,控制器将图600的序列作为最大单元密度的默认值执行,并且在不同模式中选择性地切换到具有每单元较少的位的较低的密度。

可以在多通中执行对QLC NAND中的单元的编程来作为二通4-16算法。图600在阶段602处示出了初始(例如,经擦除的)分布L0。在如阶段604处示出的编程的第一通中,控制器提供了两个页面的数据(例如,LP和UP),并且取决于对应的LP数据和UP数据,单元被编程为四种可能的状态中的一种。在如阶段606处示出的第二通中,多提供了两个页面的数据,例如,XP和TP。控制器可以读取在第一通期间编程的数据(LP和UP),并且将单元编程为16种可能的状态中的一种。

图7是针对具有3通2-8-16序列的QLC单元的阈值电压分布的示例的图。图700表示针对QLC单元的编程序列。图700的程序序列可以由管理对QLC单元的编程的控制器来应用。在一个示例中,控制器将图700的序列作为最大单元密度的默认值执行,并且在不同模式中选择性地切换到具有每单元较少的位的较低的密度。

可以在多通中执行对QLC NAND中的单元的编程来作为三通2-8-16算法。图700在阶段702处示出了编程之前的初始分布L0。在如阶段704处示出的编程的第一通中,控制器将一个页面的数据(例如,LP)提供为两种可能的状态中的一种(L0或L1),这取决于对应的LP数据。在如阶段706处示出的第二通中,在一个示例中,多提供了两个页面的数据,例如,UP和XP。在第二通的一个示例中,控制器读取LP数据并且将单元编程为8种可能的状态中的一种。在一个示例中,在如阶段708处示出的第三通中,多提供了一个页面的数据,例如,TP。在第三通的一个示例中,控制器读取LP、UP和XP,并且将单元编程为16种可能的状态中的一种。

在一个示例中,控制器可以通过执行针对QLC单元的序列的所有阶段,并且通过不执行针对TLC单元的最后一通,来修改图700的序列。在这样的示例中,存储系统可以利用相同的程序序列来支持QLC和TLC。

图8是针对QLC NAND的程序波形的示例的图。图800表示针对QLC NAND的程序波形的示例。图800被分成阶段810、阶段820和阶段830。在每个阶段中,施加幅度为VPGM的程序脉冲,随后进行一系列验证操作。然后,将程序脉冲增加ΔVPGM。在典型的序列中,在下一程序脉冲中禁止已经通过其对应的验证级别的单元。

具有较高的每单元位数的存储器单元体在给定数量的单元或可寻址存储位置处提供更高的存储容量。例如,与具有相同数量的单元的TLC NAND相比,QLC NAND提供高出33%的容量。然而,QLC NAND的编程速度可能相比可比较的TLC NAND慢大约四倍。

图800示出了程序序列的快照,其中假设属于L1和L2的所有单元已经通过了对应的验证级别PV1和PV2,并且因此不再被验证。看到L1和L2已经通过,示出了程序验证级别PV3:PV7执行针对L3:L7的验证。

阶段810示出了具有给定幅度的程序脉冲PGM[n]。假设程序脉冲PGM[n]尚未足够高以对属于L7及以上的单元进行编程。阶段820示出了随后的程序脉冲PGM[n+1],随后是一系列验证操作。将观察到,PGM[n+1]比PGM[1]高ΔVPGM

考虑图3的TLC分布和图5的QLC分布。假设对于这两个分布具有可比较的编程窗口,将理解的是,每个QLC级别应比类似的TLC级别更紧密地放置。例如,在最高验证级别(针对TLC的PV7或针对QLC的PV15)与最低读取级别(R1)之间的差异表明每个QLC级别相对于TLC级别具有更近的间隔。

通过针对QLC使用比针对TLC更小的ΔVPGM来典型地实现更近的间隔。例如,针对QLC的ΔVPGM可能相比针对TLC的ΔVPGM小2倍。在一个示例中,具有MLC控件的控制器可以对不同的增量编程电压进行编程。将理解的是,与TLC相比,对QLC中的单元进行编程可能需要更多的脉冲。此外,在每个程序脉冲之后将需要更多的对应验证。例如,对TLC NAND进行编程典型地在每个程序脉冲之后要求两到三个验证操作,而对QLC NAND进行编程可能在每个程序脉冲之后要求四到五个验证脉冲。因此,与典型的TLC NAND相比,针对QLC NAND的验证操作总数大约高四倍。

图9是针对基于4-16序列的QLC或两级别单元的程序过程的示例的流程图。过程900示出了用于利用4-16编程序列的MLC编程的程序序列。对于过程900,多达16种状态可以基于4个页面的数据,这4个页面被表示为LP、UP、XP和TP。

在一个示例中,通过跳过一个或多个编程通来实现以较低的每单元位数配置对数据进行编程。例如,每单元2位MLC模式和QLC模式共享共同的第一通,并且QLC模式具有针对2级别MLC模式可以被跳过的第二通。

在一个示例中,在第一通(程序算法的“4”)中,在902处,控制器(例如,NAND控制器)接收程序命令、LP地址和LP数据。在904处,控制器接收程序命令、UP地址和UP数据。因此,控制器接收两个页面的数据。在906处,控制器基于LP数据和UP数据利用被指定为每单元4级别状态的地址信息对WL上的单元进行编程。在位与级别之间的区别将被视为2^N关系:将利用每单元4级别对每单元2位进行编程(2^N),并且将利用每单元16级别对每单元4位进行编程(2^N),其中针对2位模式,编程将单元设置为四种状态中的一种,或者针对4位模式,编程将单元设置为16种状态中的一种。

在一个示例中,如果编程是针对每单元两位模式(在过程900中示为2LC)的,则在908 2LC分支处,控制器可以跳过第二通程序算法并在910处结束程序。如果编程是针对QLC模式的,则在908QLC分支处,控制器可以进行到程序算法的第二通(程序算法的“16”)。将理解的是,可以将4-16编程算法重新配置为以每单元2位模式或以用于更高密度的标准模式操作。在一个示例中,控制器针对QLC编程算法的第一通和2LC模式的操作共享相同的程序电压和程序验证。

在一个示例中,在第二通中,在912处,控制器接收程序命令、XP地址和XP数据。在914处,控制器还接收程序命令、TP地址和TP数据。在一个示例中,在916处,控制器从指定地址在内部读取对应的LP数据和UP数据。然后,在918处,控制器可以基于LP、UP、XP和TP利用被指定为每单元16级别状态中的一种的地址对WL上的单元进行编程。

在一个示例中,控制器将特定的读取参考应用于2LC模式,该特定的读取参考可能与用于读取QLC模式中尚未经过编程的第二通的位置(例如,部分编程的QLC块的最后WL)的那些读取参考不同。在一个示例中,控制器针对2LC块和QLC块中仍处于4级别状态的位置共享相同的读取参考。控制器可以维护地址查找表以映射在该处存储数据的地址,并跳过与QLC内的XP页面或TP页面相对应的任何物理地址。在一个示例中,存储设备仍然遵循默认的QLC页面次序。在一个示例中,控制器不执行编程的第二通,因为存储设备未接收到与XP地址和TP地址相对应的程序命令,并在910处结束编程。

图10是用于基于2-8-16编程序列对QLC或TLC进行编程的过程的示例的流程图。过程1000示出了用于利用2-8-16过程的MLC编程的程序序列。对于过程1000,多达16种状态可以基于4个页面的数据,这四个页面被表示为LP、UP、XP和TP。对于这种实现方式,2种状态将基于LP,并且8种状态将基于LP、UP和XP。

在一个示例中,在第一通(程序算法的“2”)中,在1002处,控制器(例如,NAND控制器)接收程序命令、LP地址和LP数据。第一通可以在QLC模式与TLC模式之间共享。在一个示例中,在1004处,控制器基于LP利用被指定为每单元2级别状态的地址对WL上的单元进行编程。

在一个示例中,在第二通(程序算法的“8”)中,在1006处,控制器接收程序命令、UP地址和UP数据。在一个示例中,在1008处,控制器接收程序命令、XP地址和XP数据。因此,控制器多接收两个页面的数据。在一个示例中,在1010处,控制器从指定地址在内部读取对应的LP数据。在1012处,控制器基于LP数据、UP数据和XP数据利用被指定为每单元8级别状态的地址信息对WL上的单元进行编程。

在一个示例中,如果编程是针对TLC的,则在1014TLC分支处,控制器可以跳过第三通程序算法并在1016处结束编程。如果编程是针对QLC模式的,则在1014QLC分支处,控制器可以进行到程序算法的第三通(程序算法的“16”)。将理解的是,可以将2-8-16编程算法重新配置为以每单元3位模式或以用于更高密度的标准模式操作。在一个示例中,控制器针对QLC编程算法的第一通和TLC模式的操作共享相同的程序电压和程序验证。

在一个示例中,在1018处,控制器接收程序命令、TP地址和TP数据。在一个示例中,在1020处,控制器从指定地址在内部读取对应的LP数据、UP数据和XP数据。然后,在1022处,控制器可以基于LP、UP、XP和TP利用被指定为每单元16级别状态中的一种的地址对WL上的单元进行编程,并且在1016处结束编程。

图11是基于针对QLC单元的4-16程序序列的TLC单元的4-8编程序列的阈值电压分布的示例的图。图1100表示针对QLC单元的编程序列。图1100的程序序列可以由管理对QLC单元的编程的控制器来应用。在一个示例中,控制器将图1100的序列作为最大单元密度的默认值执行,并且在不同模式中选择性地切换到具有每单元较少的位的较低的密度。

可以在多通中执行对QLC NAND中的单元的编程来作为二通4-16算法。图1100在阶段1102处示出了编程之前的初始阈值电压分布L0。在如阶段1104处示出的编程的第一通中,控制器提供了两个页面的数据(例如,LP和UP),并且取决于对应的LP数据和UP数据,单元被编程为四种可能的状态中的一种。在如阶段1106处示出的第二通中,多提供了两个页面的数据,例如,XP和TP。控制器可以读取在第一通期间编程的数据(LP和UP),并且将单元编程为16种可能的状态中的一种。

在阶段1106中的实线示出了针对图1100的偶数状态的正常阈值电压分布。图1100示出了对4-16QLC编程的修改,以实现4-8TLC编程。如所示的,阶段1104中表示的第一通保持不变,而第二通可以被修改为仅生成偶数级别。可以通过将单元的阈值电压与仅偶数读取参考级别R2:R14进行比较来读取LP数据、UP数据和XP数据。

将理解的是,对最后编程阶段的修改可以省略奇数级别的编程,并且控制器可以使每个电压电平的分布更宽。实曲线表示偶数编号的电压电平的分布。当编程过程针对QLC模式应用时,将应用实曲线。当编程过程针对TLC模式应用时,将应用虚曲线,因为在TLC模式中不存在QLC奇数级别,因此该编程过程可以扩展。

在一个示例中,系统提供两个页面的数据(LP和UP),并且控制器将单元编程为4种可能的状态L0:L3中的一种。在一个示例中,针对TLC的第二通提供一个页面的数据(XP)。在一个示例中,控制器不等待TP页面,而是通过首先从单元中读取对应的LP数据和UP数据来开始编程算法。由于第一通保持不变,因此读取LP数据和UP数据的序列也可以保持不变。将理解的是,针对QLC程序,控制器将等待TP页面。在一个示例中,控制器修改数据操纵,因此基于LP数据、UP数据和XP数据仅生成偶数级别。在一个示例中,控制器调整验证过程,因此没有奇数级别被验证。

在一个示例中,控制器开始第二通QLC编程。由于在针对TLC程序的第二通中仅生成了级别中的一半,因此在相邻级别之间的间隔大于正确读取数据所需要的间隔。为了与QLC编程相比加速第二通编程,在一个示例中,控制器应用了更高的ΔVPGM。较高的增量导致使利用虚线所示出的级别分布变宽。

图12A是用于QLC级别指派的1-2-4-8格雷码的示例的图。图1210示出了如何修改数据操纵以仅生成针对1-2-4-8格雷码的偶数级别的示例。典型地,数据通过格雷码被指派到多个级别,其中相邻级别的区别在于由仅一个页面的数据表示的数据。例如,在图1210中,L0与L1之间的差异仅对应于TP。将理解的是,利用所示的格雷码,为了仅生成偶数级别,该算法可以设置TP=XOR(LP,UP,XP),并且保持其余的数据操纵以生成不变的级别。

在一个示例中,利用该格雷码,格雷映射在相邻列之间仅改变一个位。在一个示例中,控制器可以通过将单元的阈值电压与R8进行比较来读取LP数据,通过将单元的阈值电压与R4和R12进行比较来读取UP数据,以及通过将单元的阈值电压与R2、R6、R10和R12进行比较来读取XP数据。因此,读取操作可以与QLC配置中的读取操作相同,但是具有可选的偏移,以使读取级别更好地位于较宽的级别分布中间,但是这是在缺少奇数级别的情况下进行的。

图12B是用于QLC级别指派的1-2-6-6格雷码的示例的图。图1220示出了可以用于QLC级别指派的作为图1210的替代方案的1-2-6-6格雷码的示例。为了仅生成偶数级别,该算法可以设置XP=XOR(LP,UP,XP),同时保持其余的数据操纵与基础QLC程序算法相同。读取LP页面和UP页面可以保持不变。

在一个示例中,利用该格雷码,格雷映射在相邻列之间仅改变一个位。在一个示例中,控制器可以通过将单元的阈值电压与R8进行比较来读取LP数据,并且通过将单元的阈值电压与R4和R12进行比较来读取UP数据。根据图1220,为了读取XP数据,控制器可以将单元的阈值电压与R2、R6、R10和R14进行比较。这与图1220的利用1-2-6-6格雷码的对应的QLC读取算法不同,在该算法中,为了读取XP数据,将单元的阈值电压与R2、R5、R7、R10、R13和R15进行比较。

将观察到的是,图1210和图1220中的格雷码是不同的。然而,XOR操作可以使控制器的读取操作对齐。XOR不是可以使用的唯一选项,而是可以应用另一种算法来解决码中的差异。通过修改,可以在控制器中执行编程算法,就好像什么都没有改变一样,但是码修改可以导致仅生成级别中的一半。

图13是用于实现4-16QLC程序或4-8TLC编程序列的过程的示例的流程图。过程1300示出了用于利用4-8过程或4-16过程的MLC编程的程序序列。更具体地,过程1300使得能够将4-16QLC算法修改为4-8TLC算法。对于过程1300,多达16种状态可以基于4个页面的数据,这四个页面被表示为LP、UP、XP和TP。对于这种实现方式,2种状态将基于LP,并且8种状态将基于LP、UP和XP。

在一个示例中,在第一通(程序算法的“4”)中,在1302处,控制器(例如,NAND控制器)接收程序命令、LP地址和LP数据。第一通可以在QLC模式与TLC模式之间共享。因此,程序算法可以在第一通不变。在一个示例中,在1304处,控制器接收程序命令、UP地址和UP数据。在一个示例中,在1306处,控制器基于LP和UP利用被指定为每单元4级别状态的地址对WL上的单元进行编程。

在一个示例中,第二通基于控制器是对QLC还是对TLC单元进行编程而不同。在一个示例中,为了对QLC进行编程,在1308QLC分支处,第二通是QLC程序算法的“16”。

在一个示例中,在1310处,控制器接收程序命令、XP地址和XP数据。在一个示例中,在1312处,控制器接收程序命令、TP地址和TP数据。因此,控制器多接收两个页面的数据。在一个示例中,在1314处,控制器从指定地址在内部读取对应的LP数据和UP数据。在1316处,控制器基于LP数据、UP数据、XP数据和TP数据利用被指定为每单元16级别状态的地址信息对WL上的单元进行编程。然后,控制器可以在1318处结束编程。

在一个示例中,为了对TLC进行编程,在1308TLC分支处,第二通是TLC程序算法的“8”。在一个示例中,在TLC第二通中,控制器在接收到程序命令、地址和数据之后开始程序算法,以在不需要等待TP程序命令的情况下对XP页面进行编程。

因此,在一个示例中,在1320处,控制器接收程序命令、XP地址和XP数据。在1322处,与等待TP数据相反,控制器可以从指定地址在内部读取对应的LP数据和UP数据。在1316处,控制器基于LP数据、UP数据、XP数据和TP数据利用被指定为每单元16级别状态的地址信息对WL上的单元进行编程。然后,控制器可以在1318处结束编程。

在一个示例中,在1324处,控制器设置TP=XOR(LP,UP,XP)。在1326处,控制器可以修改验证过程以仅验证偶数级别。在一个示例中,不存在奇数级别,并且因此尝试读取这些奇数级别毫无意义。然而,如果不进行改变,则QLC算法将不知道缺少奇数级别,并且将尝试针对奇数级别的对应的验证级别来验证与奇数级别相对应的位线。

在一个示例中,在1328处,控制器将ΔVPGM设置为针对TLC的指定值。算法可以使用比QLC值高的特定TLCΔVPGM来加速第二通。由于不存在奇数级别,因此可以使偶数级别比典型的QLC级别更宽。在一个示例中,在1330处,由于使用了较高的ΔVPGM,因此控制器将适当地调整验证跳过。然后在1332处,控制器可以基于LP、UP和XP利用被指定为每单元8级别状态中的一种的地址对WL上的单元进行编程。然后,控制器可以在1318处结束编程。

图14是基于针对QLC单元的4-16程序序列的TLC单元的2-8程序序列的阈值电压分布的示例的图。4-8TLC编程算法的第一通比2-8TLC编程算法慢,而4-16QLC编程算法比2-8-16QLC算法快。因此,与执行4-8TLC算法作为对4-16QLC算法的较低密度模式相反,将优选地实现2-8TLC算法作为对4-16QLC算法的修改。图1400表示这样的实现方式。

图1400示出了在阶段1402处的初始编程脉冲L0。在如阶段1404处示出的编程的第一通中,控制器将一个页面的数据(例如,LP)提供为两种可能的状态(L0和L2)中的一种,这取决于对应的LP数据。在如阶段1406处示出的第二通中,多提供了两个页面的数据,例如,UP和XP。控制器可以读取在第一通期间编程的数据(LP),并且将单元编程为8种可能的状态中的一种。

在阶段1106中的实线示出了针对图1400的偶数状态的正常脉冲。图1400示出了对4-16QLC编程的修改,以实现2-8TLC编程。如所示的,在阶段1404中表示的第一通可以被修改为仅生成偶数级别L0和L2,而第二通可以被修改为仅生成偶数级别。可以通过将单元的阈值电压与仅偶数读取参考级别R2:R14进行比较来读取LP数据、UP数据和XP数据。

在一个示例中,控制器开始第二通QLC编程。由于在针对TLC程序的第二通中仅生成了级别中的一半,因此在相邻级别之间的间隔大于正确读取数据所需要的间隔。为了与QLC编程相比加速第二通编程,在一个示例中,控制器应用了更高的ΔVPGM。较高的增量导致使利用虚线所示出的级别分布变宽。

图15是用于基于4-16QLC程序算法实现2-8TLC程序的程序过程的示例的流程图。过程1500示出了通过修改4-16QLC算法的2-8TLC算法的可能实现方式。一接收到针对LP的程序命令、地址和数据,就修改TLC模式第一通以开始程序。

在一个示例中,在1502处,控制器(例如,NAND控制器)接收程序命令、LP地址和LP数据。为了保持数据操纵以确定级别指派不变,在一个示例中,在1504处,算法设置UP=LP。在1506处,控制器可以实现经修改的验证过程以跳过奇数级别验证(L1和L3)。在一个示例中,在1508处,算法通过基于LP利用被指定为两种可能的级别(L0和L2)中的一种的地址对WL上的单元进行编程来继续。

在多通编程算法中,典型地基于单元的阈值电压如何响应于第一通中的程序电压而增加来计算针对随后的多通的最佳开始程序电压。可以存储程序电压以在随后的多通期间使用。在4-16QLC编程算法中,典型地基于L1单元如何响应于VPGM来执行对最佳程序电压的计算。由于在2-8TLC模式下没有L1单元退出,因此在一个示例中,可以基于L2单元的响应来执行对最佳开始VPGM的计算。可替代地,可以使用擦除压缩,其中L0单元也被编程为指定的PV0。在这种情况下,可以基于L0(或所有)单元的响应来执行对最佳开始VPGM的计算。最佳开始VPGM可以存储在特定位置(例如,正在编程的WL的标志字节)中。

在一个示例中,可以相对于QLC算法的第二通来修改TLC模式第二通。在一个示例中,在1510处,控制器将接收配置命令以跳过对UP数据的内部读取。在一个示例中,与从对应于指定的XP地址的单元在内部读取UP数据相反,控制器将在外部从主机接收UP数据。当将存储器单元体重新配置为以TLC模式操作时,或者利用在第二通之前的特定的重新配置命令,可以执行这种操作。

在一个示例中,控制器(例如,NAND控制器)在其接收到XP和UP程序命令、地址和数据之后开始算法。在一个示例中,在1512处,控制器接收程序命令、XP地址和XP数据。在一个示例中,在1514处,控制器接收程序命令、UP地址和UP数据。因此,控制器多接收两个页面的数据。在一个示例中,在1516处,控制器从指定地址在内部读取对应的LP数据。

在一个示例中,在1518处,控制器设置TP=XOR(LP,UP,XP)以避免对确定级别指派的数据操纵的改变。在一个示例中,在1520处,控制器应用经修改的验证过程以仅验证偶数级别;奇数级别不被验证。在一个示例中,在1522处,控制器将ΔVPGM调整为针对TLC的指定值。在一个示例中,在1524处,控制器利用适当较高的ΔVPGM设置验证跳过以加速第二通。然后在1526处,控制器可以基于LP、UP和XP利用被指定为每单元8级别状态中的一种的地址对WL上的单元进行编程。控制器可以在1528处结束编程。

由于最终级别指派是基于LP数据、UP数据和XP数据的,这与针对TLC数据利用其他算法执行的相同,因此读取操作也可以与先前讨论的相同。上面提供的针对格雷编码的读取操作可以适用于如上面讨论的读取操作。

图16是作为图15的替代方案的用于基于4-16QLC程序算法实现2-8TLC程序的程序过程的示例的流程图。过程1600示出了通过修改4-16QLC算法的2-8TLC算法的可能实现方式。一接收到针对LP的程序命令、地址和数据,就修改TLC模式第一通以开始程序。

在一个示例中,在1602处,控制器(例如,NAND控制器)接收程序命令、LP地址和LP数据。为了保持数据操纵以确定级别指派,在一个示例中,在1604处,算法设置UP=LP。在1606处,控制器可以实现经修改的验证过程以跳过奇数级别验证(L1和L3)。在一个示例中,在1608处,算法通过基于LP利用被指定为两种可能的级别(L0和L2)中的一种的地址对WL上的单元进行编程来继续。

对于TLC模式第二通,在一个示例中,在1610处,控制器接收程序命令、XP地址和XP数据。在一个示例中,在1612处,控制器接收程序命令、TP地址和TP数据。因此,控制器多接收两个页面的数据。在一个示例中,在1614处,控制器从指定地址在内部读取对应的LP数据。在一个示例中,控制器还可选地从指定地址读取UP数据。注意,由于在第一通中没有对UP数据进行编程,因此UP数据的所有位被读取为1。在1616处,该值将被覆写,如下面所描述的。

在一个示例中,在1616处,控制器设置UP=XOR(LP,XP,TP)。在一个示例中,在1618处,控制器应用经修改的验证过程来仅验证偶数级别;奇数级别不被验证。在一个示例中,在1620处,控制器将ΔVPGM调整为针对TLC的指定值。在一个示例中,在1622处,控制器利用适当较高的ΔVPGM设置验证跳过以加速第二通。然后在1624处,控制器可以基于LP、XP和TP利用被指定为每单元8级别状态中的一种的地址对WL上的单元进行编程。控制器可以在1626处结束编程。

在一个示例中,在第二通中,与从主机(例如,从存储器控制器或存储控制器)接收UP数据并跳过TP数据相反,接收TP数据并跳过UP。在一个示例中,通过针对上面讨论的两个格雷码将单元的阈值电压与R8进行比较来读取LP数据。在一个示例中,利用上面讨论的格雷码,与QLC模式相比,针对XP的读取操作保持不变。在一个示例中,在利用格雷码读取XP数据的情况下,将单元的阈值电压与R2、R5、R7、R10和R13进行比较,但是与在QLC模式中使用的值相比增加了R5、R7和R13。

在一个示例中,还修改了针对TP数据的读取操作。对于如上面讨论的1-2-4-8格雷码,将单元的阈值电压与R1、R3、R5、R7、R9、R11、R13和R15进行比较,但是与在QLC模式中使用的参考相比增加了这些参考,以考虑TLC分布更宽的事实。一种可能的设置是针对i=1、3、…、15设置Ri=Ri+1。类似地,在一个示例中,也可以修改如上面讨论的针对1-2-6-6格雷码的TP读取操作。可以将单元的阈值电压与R1、R3、R6、R9、R11和R14进行比较,但是与对应的QLC值相比增加了奇数参考级别。一种可能的设置是针对奇数级别设置Ri=Ri+1。

图17是用于基于2-8-16QLC算法来实现QLC程序或2LC程序的程序过程的示例的流程图。过程1700示出了可以针对2LC编程修改的2-8-16QLC算法的可能实现方式。对于过程1700,多达16种状态可以基于4个页面的数据,这4个页面被表示为LP、UP、XP和TP。对于这种实现方式,2种状态将基于LP。

对于QLC编程操作,在1702QLC分支处,控制器执行QLC第一通。在一个示例中,在第一通(程序算法的“2”)中,在1704处,控制器(例如,NAND控制器)接收程序命令、LP地址和LP数据。在一个示例中,在1706处,控制器基于LP利用被指定为每单元2级别状态的地址对WL上的单元进行编程。

在一个示例中,在第二通(程序算法的“8”)中,在1708处,控制器接收程序命令、UP地址和UP数据。在一个示例中,在1710处,控制器接收程序命令、XP地址和XP数据。因此,控制器多接收两个页面的数据。在一个示例中,在1712处,控制器从指定地址在内部读取对应的LP数据。在1714处,控制器基于LP数据、UP数据和XP数据利用被指定为每单元8级别状态的地址信息对WL上的单元进行编程。

对于第三通(程序算法的“16”),在一个示例中,在1716处,控制器接收程序命令、TP地址和TP数据。在一个示例中,在1718处,控制器从指定地址在内部读取对应的LP数据、UP数据和XP数据。然后,在1720处,控制器可以基于LP、UP、XP和TP利用被指定为每单元16级别状态中的一种的地址对WL上的单元进行编程。然后,控制器可以在1722处结束编程。

在一个示例中,2LC模式跳过QLC程序过程的第一通。对于QLC编程操作,在17022LC分支处,控制器在1724处接收配置命令以跳过对LP数据的内部读取。在一个示例中,在1726处,控制器接收程序命令、UP地址和UP数据。在一个示例中,在1728处,控制器接收程序命令、LP地址和LP数据。在一个示例中,在1730处,控制器设置XP=XNOR(LP,UP)。在一个示例中,在1732处,控制器针对实现方式计算开始VPGM。在一个示例中,在1734处,控制器基于LP和UP利用被指定为每单元4级别状态中的一种的地址对WL上的单元进行编程。然后,控制器可以在1722处结束编程。

如上面的描述中所提供的,可以修改第二通,因此NAND控制器不在内部读取LP数据,并且相反从存储器控制器接收LP数据。为了保持数据操纵以指派级别,NAND控制器可以将XP设置为等于LP和UP的XNOR。在一个示例中,验证过程被修改为跳过奇数级别。由于跳过了第一通,因此可以计算最佳开始VPGM,而不是从标志位置进行读取。程序算法的第三通也被跳过。

在NAND设备的一个示例中,不同的WL可以具有不同的每单元位数。例如,靠近块的边界(例如,靠近所选定的晶体管)的WL可以具有较少的每单元位数。例如,在QLC NAND中,一些WL可以被配置为具有每单元3位。当重新配置从而以TLC模式操作时,这些WL可以被重新配置为以较少的每单元位数(例如,每单元2位)进行操作。在一些示例中,当重新配置从而以TLC模式操作时,这些WL可以被配置为维持其在QLC模式中使用的密度。

图18是计算系统的示例的框图,在该计算系统中可以实现选择性地以一个多级别单元密度或另一多级别单元密度存储数据的存储设备。系统1800表示根据本文任何示例的计算设备,并且可以是膝上型计算机、台式计算机、平板计算机、服务器、游戏或娱乐控制系统、嵌入式计算设备或其他电子设备。

系统1800包括存储子系统1880中的MLC控件1890。MLC控件1890表示用于在存储装置1884内提供动态可重新配置的存储器单元的逻辑。MLC控件可以根据本文任何示例执行动态重新配置。动态重新配置使控制器能够提供更高的密度或更低的密度。

系统1800包括处理器1810,该处理器1810可以包括任何类型的微处理器、中央处理单元(CPU)、图形处理单元(GPU)、处理核心或其他处理硬件或组合,以提供对系统1800的指令的处理或执行。处理器1810控制系统1800的总体操作,并且可以是或可以包括一个或多个可编程的通用或专用微处理器、数字信号处理器(DSP)、可编程控制器、专用集成电路(ASIC)、可编程逻辑器件(PLD)或这些设备的组合。

在一个示例中,系统1800包括耦合到处理器1810的接口1812,该接口1812可以表示用于需要更高带宽连接的系统组件(例如,存储器子系统1820或图形接口组件1840)的较高速度接口或高吞吐量接口。接口1812表示接口电路,其可以是独立组件或集成到处理器管芯上。接口1812可以作为电路集成到处理器管芯上,或者作为组件集成到片上系统上。在存在图形接口1840的情况下,图形接口1840与图形组件接合,以向系统1800的用户提供视觉显示。图形接口1840可以是独立组件或集成到处理器管芯或片上系统上。在一个示例中,图形接口1840可以驱动向用户提供输出的高清晰度(HD)显示器。在一个示例中,显示器可以包括触摸屏显示器。在一个示例中,图形接口1840基于存储在存储器1830中的数据或基于处理器1810执行的操作或基于两者来生成显示。

存储器子系统1820表示系统1800的主要存储器,并且为要由处理器1810执行的代码或要在执行例程中使用的数据值提供存储。存储器子系统1820可以包括一个或多个存储器设备1830,例如,只读存储器(ROM)、闪速存储器、随机存取存储器(RAM)的一种或多种变型(例如,DRAM),或其他存储器设备,或这些设备的组合。存储器1830存储并托管操作系统(OS)1832以及其他事物,以提供用于对在系统1800中的指令的执行的软件平台。另外地,应用1834可以从存储器1830在OS 1832的软件平台上执行。应用1834表示具有其自己的操作逻辑以执行对一个或多个功能的执行的程序。进程1836表示向OS 1832或一个或多个应用1834或其组合提供辅助功能的代理或例程。OS 1832、应用1834和进程1836提供软件逻辑以提供用于系统1800的功能。在一个示例中,存储器子系统1820包括存储器控制器1822,该存储器控制器1822是用于生成命令并将命令发布给存储器1830的存储器控制器。将理解的是,存储器控制器1822可以是处理器1810的物理部分或接口1812的物理部分。例如,存储器控制器1822可以是集成到具有处理器1810的电路上(例如,集成到处理器管芯或片上系统上)的集成存储器控制器。

尽管没有具体示出,但是将理解的是,系统1800可以包括设备之间的一条或多条总线或一个或多个总线系统,例如,存储器总线、图形总线、接口总线等。总线或其他信号线可以将组件通信地或电气地耦合在一起,或者将组件通信地且电气地耦合。总线可以包括物理通信线路、点对点连接、桥、适配器、控制器或其他电路或组合。总线可以包括例如系统总线、***组件互连(PCI)总线、超传输或行业标准架构(ISA)总线、小型计算机系统接口(SCSI)总线、通用串行总线(USB)或其他总线中的一个或多个或其组合。

在一个示例中,系统1800包括接口1814,该接口1814可以耦合到接口1812。接口1814与接口1812相比可以是较低速度接口。在一个示例中,接口1814表示接口电路,该接口电路可以包括独立组件和集成电路。在一个示例中,多个用户界面组件或***组件或两者耦合到接口1814。网络接口1850向系统1800提供通过一个或多个网络与远程设备(例如,服务器或其他计算设备)通信的能力。网络接口1850可以包括以太网适配器、无线互连组件、蜂窝网络互连组件、USB(通用串行总线)、或基于有线标准或无线标准的其他接口或专有接口。网络接口1850可以与远程设备交换数据,这可以包括发送存储在存储器中的数据或接收要存储在存储器中的数据。

在一个示例中,系统1800包括一个或多个输入/输出(I/O)接口1860。I/O接口1860可以包括用户通过其与系统1800交互(例如,音频、字母数字、触觉/触摸或其他接合)的一个或多个接口组件。***接口1870可以包括上面未具体提到的任何硬件接口。***设备通常指代依赖地连接到系统1800的设备。依赖连接是其中系统1800提供在其上执行操作并且用户与其进行交互的软件平台或硬件平台或两者的一种连接。

在一个示例中,系统1800包括用于以非易失性方式存储数据的存储子系统1880。在一个示例中,在某些系统实现方式中,存储装置1880的至少某些组件可以与存储器子系统1820的组件重叠。存储子系统1880包括(多个)存储设备1884,这些存储设备1884可以是或可以包括用于以非易失性方式存储大量数据的任何常规介质,例如,一个或多个基于磁性、固态或光学的盘或其组合。存储装置1884以持久状态保存代码或指令以及数据1886(即,尽管中断了到系统1800的电力,该值仍被保留)。存储装置1884通常可以被认为是“存储器”,但是存储器1830典型地是用于向处理器1810提供指令的执行或操作存储器。尽管存储装置1884是非易失性的,但是存储器1830可以包括易失性存储器(即,如果中断了到系统1800的电力,则数据的值或状态是不确定的)。在一个示例中,存储子系统1880包括用于与存储装置1884接合的控制器1882。在一个示例中,控制器1882是接口1814或处理器1810的物理部分,或者可以包括处理器1810和接口1814两者中的电路或逻辑。

电源1802向系统1800的组件提供电力。更具体地,电源1802典型地与系统1800中的一个或多个电源供应1804接合,以向系统1800的组件提供电力。在一个示例中,电源供应1804包括用于***壁式插座的AC到DC(交流电到直流电)适配器。这样的AC电力可以是可再生能源(例如,太阳能)电源1802。在一个示例中,电源1802包括DC电源,例如,外部AC到DC转换器。在一个示例中,电源1802或电源供应1804包括无线充电硬件,以经由与充电场的接近度来充电。在一个示例中,电源1802可以包括内部电池或燃料电池源。

对存储设备的引用可以指代即使中断了到设备的电力其状态也确定的非易失性存储器设备。在一个示例中,非易失性存储器设备是块可寻址的存储器设备,例如,NAND或NOR技术。因此,存储器设备还可以包括下一代非易失性设备,例如,三维交叉点存储器设备、其他字节可寻址的非易失性存储器设备,或使用硫化物相变材料(例如,硫化物玻璃)的存储器设备。在一个示例中,存储器设备可以是或可以包括多阈值级别NAND闪速存储器、NOR闪速存储器、单级或多级相变存储器(PCM)或具有开关的相变存储器(PCMS)、电阻式存储器、纳米线存储器、铁电晶体管随机存取存储器(FeTRAM)、结合忆阻器技术的磁阻随机存取存储器(MRAM)存储器或自旋移矩(STT)-MRAM,或以上存储器中的任何存储器的组合,或其他存储器。

图19是移动设备的示例的框图,在该移动设备中可以实现选择性地以一个多级别单元密度或另一多级别单元密度存储数据的存储设备。系统1900表示移动计算设备,例如,计算平板计算机、移动电话或智能电话、可穿戴计算设备或其他移动设备或嵌入式计算设备。将理解的是,总体上示出了组件中的某些组件,并且在系统1900中未示出这种设备的所有组件。

系统1900包括存储器子系统1960的非易失性存储装置中的MLC控件1990。MLC控件1990表示用于在存储器1962的非易失性存储装置内提供动态可重新配置的存储器单元的逻辑。MLC控件可以根据本文任何示例执行动态重新配置。动态重新配置使控制器能够提供更高的密度或更低的密度。

系统1900包括处理器1910,该处理器1910执行系统1900的主要处理操作。处理器1910可以包括一个或多个物理设备,例如,微处理器、应用处理器、微控制器、可编程逻辑器件或其他处理模块。由处理器1910执行的处理操作包括对在其上执行应用和设备功能的操作平台或操作系统的执行。处理操作包括与人类用户或其他设备的I/O(输入/输出)有关的操作、与功率管理有关的操作、与将系统1900连接到另一设备有关的操作或其组合。处理操作还可以包括与音频I/O、显示I/O或其他接合有关的操作或其组合。处理器1910可以执行存储在存储器中的数据。处理器1910可以写入或编辑存储在存储器中的数据。

在一个示例中,系统1900包括一个或多个传感器1912。传感器1912表示嵌入式传感器或与外部传感器的接口或其组合。传感器1912使系统1900能够监视或检测在其中实现系统1900的环境或设备的一个或多个条件。传感器1912可以包括环境传感器(例如,温度传感器、运动检测器、光检测器、相机、化学传感器(例如,一氧化碳、二氧化碳或其他化学传感器))、压力传感器、加速度计、陀螺仪、医学或生理学传感器(例如,生物传感器、心率监视器或用于检测生理属性的其他传感器)或其他传感器或其组合。传感器1912还可以包括用于生物计量系统的传感器,例如,指纹识别系统、面部检测或识别系统或检测或识别用户特征的其他系统。应该广义上理解传感器1912,而不是限制于可以利用系统1900实现的许多不同类型的传感器。在一个示例中,一个或多个传感器1912经由与处理器1910集成的前端电路耦合到处理器1910。在一个示例中,一个或多个传感器1912经由系统1900的另一组件耦合到处理器1910。

在一个示例中,系统1900包括音频子系统1920,该音频子系统1920表示与向计算设备提供音频功能相关联的硬件(例如,音频硬件和音频电路)和软件(例如,驱动程序、编解码器)组件。音频功能可以包括扬声器或耳机输出,以及麦克风输入。可以将用于这种功能的设备集成到系统1900中或连接到系统1900。在一个示例中,用户通过提供由处理器1910接收并处理的音频命令来与系统1900进行交互。

显示子系统1930表示提供视觉显示以用于向用户呈现的硬件(例如,显示设备)和软件组件(例如,驱动程序)。在一个示例中,显示器包括用户用于与计算设备进行交互的触觉组件或触摸屏元件。显示子系统1930包括显示接口1932,该显示接口1932包括用于向用户提供显示的特定屏幕或硬件设备。在一个示例中,显示接口1932包括与处理器1910(例如,图形处理器)分离的逻辑,以执行与显示器有关的至少一些处理。在一个示例中,显示子系统1930包括向用户提供输出和输入两者的触摸屏设备。在一个示例中,显示子系统1930包括向用户提供输出的高清晰度(HD)或超高清晰度(UHD)显示器。在一个示例中,显示子系统包括或驱动触摸屏显示器。在一个示例中,显示子系统1930基于存储在存储器中的数据或基于由处理器1910执行的操作或基于两者来生成显示信息。

I/O控制器1940表示和与用户交互有关的硬件设备和软件组件。I/O控制器1940可以操作以管理作为音频子系统1920或显示子系统1930或两者的一部分的硬件。另外地,I/O控制器1940示出了用于连接到系统1900的附加设备的连接点,用户可以通过该附加设备与系统交互。例如,可以附接到系统1900的设备可以包括麦克风设备、扬声器或立体声系统、视频系统或其他显示设备、键盘或小键盘设备或与特定应用一起使用的其他I/O设备,例如,读卡器或其他设备。

如上面所提到的,I/O控制器1940可以与音频子系统1920或显示子系统1930或两者进行交互。例如,通过麦克风或其他音频设备的输入可以提供用于系统1900的一个或多个应用或功能的输入或命令。另外地,代替或除了显示输出之外,可以提供音频输出。在另一示例中,如果显示子系统包括触摸屏,则显示设备还用作输入设备,其可以至少部分地由I/O控制器1940管理。在系统1900上还可以存在附加按钮或开关来提供由I/O控制器1940管理的I/O功能。

在一个示例中,I/O控制器1940管理诸如加速度计、相机、光传感器或其他环境传感器、陀螺仪、全球定位系统(GPS)、或可以被包括在系统1900中的其他硬件或传感器1912之类的设备。输入可以是直接用户交互的一部分,以及向系统提供环境输入以影响其操作(例如,过滤噪声、调整显示以进行亮度检测、为相机应用闪光或其他特征)。

在一个示例中,系统1900包括功率管理1950,该功率管理1950管理电池电力使用、电池的充电以及与功率节约操作有关的特征。功率管理1950管理来自电源1952的电力,该电源1952向系统1900的组件提供电力。在一个示例中,电源1952包括用于***壁式插座的AC到DC(交流电到直流电)适配器。这样的AC电力可以是可再生能源(例如,太阳能、基于运动的电力)。在一个示例中,电源1952仅包括DC电力,其可以由诸如外部AC到DC转换器之类的DC电源来提供。在一个示例中,电源1952包括无线充电硬件,以经由与充电场的接近度来充电。在一个示例中,电源1952可以包括内部电池或燃料电池源。

存储器子系统1960包括用于在系统1900中存储信息的(多个)存储器设备1962。存储器子系统1960可以包括非易失性(如果中断了到存储器设备的电力,则状态不会改变)或易失性(如果中断了到存储器设备的电力,则状态是不确定的)存储器设备或其组合。存储器1960可以存储应用数据、用户数据、音乐、照片、文档或其他数据,以及与对系统1900的应用和功能的执行有关的系统数据(无论是长期的还是临时的)。在一个示例中,存储器子系统1960包括存储器控制器1964(其也可以被认为是系统1900的控件的一部分,并且可以潜在地被认为是处理器1910的一部分)。存储器控制器1964包括调度器,以生成并发出命令来控制对存储器设备1962的访问。

连通性1970包括硬件设备(例如,无线或有线连接器和通信硬件,或有线硬件和无线硬件的组合)和软件组件(例如,驱动程序、协议栈),以使系统1900能够与外部设备进行通信。外部设备可以是单独的设备,例如,其他计算设备、无线接入点或基站以及***设备(例如,耳机、打印机)或其他设备。在一个示例中,系统1900与外部设备交换数据以将数据存储在存储器中或在显示设备上显示。经交换的数据可以包括要存储在存储器中的数据或者已经存储在存储器中的数据,以读取、写入或编辑数据。

连通性1970可以包括多种不同类型的连通性。概括而言,系统1900被示为具有蜂窝连通性1972和无线连通性1974。蜂窝连通性1972通常指代由无线载波提供的(例如,经由GSM(全球移动通信系统)或其变型或衍生物、CDMA(码分多址)或其变型或衍生物、TDM(时分复用)或其变型或衍生物、LTE(长期演进——也称为“4G”)或其他蜂窝服务标准提供的)蜂窝网络连通性。无线连通性1974指代非蜂窝式的无线连通性,并且可以包括个域网(例如,蓝牙)、局域网(例如,WiFi)或广域网(例如,WiMax),或其他无线通信或其组合。无线通信指代通过使用经调制的电磁辐射通过非固体介质来传输数据。有线通信通过固体通信介质发生。

***连接1980包括用于进行***连接的硬件接口和连接器以及软件组件(例如,驱动程序、协议栈)。将理解的是,系统1900既可以对其他计算设备而言是***设备(“去往”1982),也可以具有与其连接的***设备(“来自”1984)。出于诸如管理(例如,下载、上传、改变、同步)系统1900上的内容之类的目的,设备1900通常具有“对接(docking)”连接器以连接到其他计算设备。另外地,对接连接器可以允许系统1900连接到某些***设备,这些***设备允许系统1900控制内容输出到例如视听系统或其他系统。

除了专有的对接连接器或其他专有的连接硬件之外,系统1900还可以经由常见的或基于标准的连接器进行***连接1980。常见的类型可以包括通用串行总线(USB)连接器(其可以包括许多不同的硬件接口中的任何一个)、包括微型显示端口(MDP)的显示端口、高清晰度多媒体接口(HDMI),或其他类型。

总体上,关于本文的描述,在一个示例中,一种存储器设备包括:多级别存储单元(MLC存储单元)的阵列;以及控制器,该控制器用于选择性地以第一MLC密度或低于该第一MLC密度的第二MLC密度写入MLC存储单元。

在一个示例中,第一MLC密度包括四级别存储单元(QLC存储单元)。在一个示例中,第二MLC密度包括三级别存储单元(TLC存储单元)或双级别存储单元。在一个示例中,存储单元包括NAND(与非)存储单元。在一个示例中,控制器用于利用共同编程过程来对第一MLC密度的存储单元和第二MLC密度的存储单元两者进行编程。在一个示例中,控制器用于跳过共同编程过程的步骤。在一个示例中,控制器用于修改共同编程过程的最后步骤以针对第二MLC密度写入较少的数据。在一个示例中,控制器用于响应于对存储器设备的增加的写入吞吐量的检测而选择性地以第二MLC密度写入MLC存储单元。在一个示例中,响应于检测到写入吞吐量已经减慢,控制器用于将数据从以第二MLC密度的MLC存储单元存储到以第一MLC密度的MLC存储单元。

总体上,关于本文的描述,在一个示例中,一种系统包括:存储控制器;以及耦合到该存储控制器的非易失性存储设备,该存储设备包括多级别存储单元(MLC存储单元)的阵列;以及控制器,该控制器用于选择性地以第一MLC密度或低于该第一MLC密度的第二MLC密度写入MLC存储单元。

在一个示例中,第一MLC密度包括四级别存储单元(QLC存储单元)。在一个示例中,第二MLC密度包括三级别存储单元(TLC存储单元)或双级别存储单元。在一个示例中,存储单元包括NAND(与非)存储单元。在一个示例中,控制器用于利用共同编程过程来对第一MLC密度的存储单元和第二MLC密度的存储单元两者进行编程。在一个示例中,控制器用于跳过共同编程过程的步骤。在一个示例中,控制器用于修改共同编程过程的最后步骤以针对第二MLC密度写入较少的数据。在一个示例中,控制器用于响应于对存储器设备的增加的写入吞吐量的检测而选择性地以第二MLC密度写入MLC存储单元。在一个示例中,响应于检测到写入吞吐量已经减慢,控制器用于将数据从以第二MLC密度的MLC存储单元存储到以第一MLC密度的MLC存储单元。在一个示例中,系统包括以下各项中的一个或多个:主机处理器设备,其耦合到存储控制器;显示器,其通信地耦合到主机处理器;网络接口,其通信地耦合到主机处理器;或者电池,其用于为系统供电。

如本文所示出的流程图提供了各种处理动作的序列的示例。流程图可以指示要由软件或固件例程执行的操作以及物理操作。流程图可以示出可以以硬件和/或软件来实现的有限状态机(FSM)的状态的实现方式的示例。虽然以特定序列或次序显示,但除非另有说明,否则可以修改动作的次序。因此,图示的图应该仅被理解为示例,并且可以以不同的次序执行该过程,并且可以并行执行一些动作。另外地,可以省略一个或多个动作;因此,并非所有实现方式将执行所有动作。

就本文描述的各种操作或功能而言,可以将各种操作或功能描述或定义为软件代码、指令、配置和/或数据。内容可以是可直接执行的(“对象”或“可执行的”形式)、源代码或差异代码(“增量”或“补丁”代码)。本文所描述的软件内容可以经由其上存储有内容的制品提供,或者经由操作通信接口以经由通信接口发送数据的方法提供。机器可读存储介质可以使得机器执行描述的功能或操作,并且包括以可以由机器(例如,计算设备、电子系统等)访问的形式存储信息的任何机制,例如,可记录/不可记录介质(例如,只读存储器(ROM)、随机存取存储器(RAM)、磁盘存储介质、光学存储介质、闪速存储器设备等)。通信接口包括与硬连线、无线、光学等介质中的任一介质接合以与另一设备通信的任何机制,例如,存储器总线接口、处理器总线接口、互联网连接、磁盘控制器等。可以通过提供配置参数和/或发送信号来配置通信接口,以准备通信接口来提供描述软件内容的数据信号。可以经由发送到通信接口的一个或多个命令或信号来访问通信接口。

本文描述的各种组件可以是用于执行描述的操作或功能的模块。本文描述的每个组件包括软件、硬件或这些软件和硬件的组合。组件可以被实现为软件模块、硬件模块、特殊用途硬件(例如,专用硬件、专用集成电路(ASIC)、数字信号处理器(DSP)等)、嵌入式控制器、硬连线电路等。

除了本文描述的内容之外,在不脱离本发明的所公开的内容以及实现方式的范围的情况下,可以对本发明的所公开的内容以及实现方式进行各种修改。因此,本文的说明和示例应该被解释为说明性的而不是限制意义的。应该仅通过参考所附权利要求来衡量本发明的范围。

41页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种信道的引擎调度方法、系统及相关装置

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!