用于裸芯上缓冲式非易失性存储器的选择性回拷的制作方法

文档序号:11814656阅读:394来源:国知局
用于裸芯上缓冲式非易失性存储器的选择性回拷的制作方法与工艺

该申请要求题为“ON DIE BUFFERED NON-VOLATILE MEMORY MANAGEMENT”的由Jea Hyun等人于2014年1月9日提交的美国临时专利申请号61/925,549的利益,其完整内容出于所有目的通过引用合并到此。

技术领域

本公开在各个实施例中涉及存储器管理,更具体地说,涉及对裸芯上缓冲式非易失性存储器的管理。



背景技术:

某些闪速存储器和其它固态存储设备实现了多级式单元(MLC)存储器介质、三级式单元(TLC)存储器介质等,以将多个比特的数据存储在同一存储器单元中。通常,MLC存储器单元和TLC存储器单元可编程为均由分离的电压阈值表征的多个状态。作为示例,两比特MLC存储器单元可以编程为四个不同状态之一,或三个比特TLC存储器单元可以编程为八个不同状态之一,其中,每个状态对应于唯一电压范围。

如果具有MLC存储器介质和/或TLC存储器介质的同一设备中包括单级式单元(SLC)存储器介质,则必须管理不同类型的存储器介质的分配和使用。SLC存储器介质、MLC存储器介质和TLC存储器介质可以具有不同的写入时间、读取时间、编程要求、可靠性、错误率等。此外,在不同类型的存储器介质之间拷贝数据可能引入错误,随着数据被拷贝而放大错误的引入。如果在数据正从一种类型的存储器介质拷贝到另一类型的存储器介质的同时功率丢失或设备关断,则数据可能被破坏或丢失。不同数据也可能具有可能与特定类型的存储器介质不一致或对于特定类型的存储器介质并非优化的不同使用模式、优先级等。



技术实现要素:

提出用于裸芯上缓冲式(ODB)非易失性存储器管理的方法。在一个实施例中,方法包括:将数据存储在第一非易失性存储器单元集合中。在另一实施例中,方法包括:确定与数据关联的一个或多个属性。在特定实施例中,方法包括:基于与数据关联的一个或多个属性而确定是否将数据存储在第二非易失性存储器单元集合中。在另一实施例中,第二非易失性存储器单元集合被配置为:存储比第一非易失性存储器单元集合更多的每单元的比特。

提出用于裸芯上缓冲式(ODB)非易失性存储器管理的装置。在一个实施例中,缓冲器模块被配置为:将数据存储在第一非易失性存储单元集合中。在另一实施例中,回拷模块被配置为:基于一个或多个数据因素而确定是否将数据存储在第二非易失性存储单元集合中。在另一实施例中,第二非易失性存储单元集合使用比第一非易失性存储单元集合更多的每单元的存储状态来表示数据。

提出用于裸芯上缓冲式(ODB)非易失性存储器管理的系统。在特定实施例中,非易失性存储器元件包括单级式单元(SLC)非易失性存储器单元集合以及三级式单元(TLC)非易失性存储器单元集合。在一个实施例中,控制器有选择地确定将数据从SLC非易失性存储器单元集合拷贝到TLC非易失性存储器单元集合。在另一实施例中,控制器基于用于SLC非易失性存储器单元集合的一个或多个存储介质特性而调整用于所述SLC非易失性存储器单元集合的一个或多个读取电压阈值,以用于将数据从所述SLC非易失性存储器单元集合拷贝到TLC非易失性存储器单元集合。

附图说明

为了将容易理解本公开的优点,将通过参照附图所示的特定实施例提出以上简要描述的本公开的更特定描述。理解这些附图仅描述本公开的典型实施例,并且因此不被看作限制其范围,将通过使用附图用附加特性和细节来描述并且解释本公开,其中:

图1是示出用于裸芯上缓冲式(on die buffered,ODB)非易失性存储器管理的系统的一个实施例的示意性框图;

图2是示出非易失性存储器系统的实施例的示意性框图;

图3A是示出管理模块的一个实施例的示意性框图;

图3B是示出管理模块的另一实施例的示意性框图;

图4是示出三层式存储器单元的一个实施例的示意性框图;

图5是示出非易失性存储器元件的一个实施例的示意性框图;

图6是示出映射结构、逻辑地址空间和基于日志的写入结构的一个实施例的示意性框图;

图7是示出用于将数据存储在多层式存储器单元中的系统的一个实施例的示意性框图;

图8A是示出非易失性存储器介质的存储元件阵列的一个实施例的示意性框图;

图8B是示出非易失性存储器介质的存储元件阵列的另一实施例的示意性框图;

图9A是示出非易失性存储器设备的单元中的状态的一个实施例的图;

图9B是示出由非易失性存储器设备的单元对多个比特进行编码的一个实施例的表;

图10是示出用于三级式单元存储器的编码模型的状态的一系列图;

图11是示出用于裸芯上缓冲式(ODB)非易失性存储器管理的方法的一个实施例的示意性流程图示图;

图12是示出用于裸芯上缓冲式(ODB)非易失性存储器管理的方法的另一实施例的示意性流程图示图;以及

图13是示出用于裸芯上缓冲式(ODB)非易失性存储器管理的方法的又一实施例的示意性流程图示图。

具体实施方式

本公开的各方面可以实施为装置、系统、方法或计算机程序产品。相应地,本公开的各方面可以采取完全硬件实施例、完全软件实施例(包括固件、驻留软件、微码等)或组合软件方面和硬件方面的实施例的形式,其可以全都一般在此称为“电路”、“装置”或“系统”。此外,本公开的各方面可以采取存储计算机可读和/或可执行程序代码的一个或多个非瞬时计算机可读存储介质中实施的计算机程序产品的形式。

该说明书中所描述的很多功能单元已经标记为模块,以更具体地强调它们的实现方式独立性。例如,模块可以实现为包括定制VLSI电路或门阵列、现货半导体(例如逻辑芯片)、晶体管或其它分立式组件的硬件电路。模块也可以实现于可编程硬件设备(例如现场可编程门阵列、可编程阵列逻辑、可编程逻辑设备等)中。

也可以通过至少部分地用于通过各种类型的处理器执行的软件来实现模块。所标识的可执行代码的模块可以例如包括可以例如被组织为对象、过程或函数的计算机指令的一个或多个物理或逻辑块。然而,所标识的模块的可执行无需物理上位于一起,而是可以包括不同位置中所存储的全异指令,其当逻辑上结合在一起时包括模块并且实现所声明的模块的目的。

实际上,可执行代码的模块可以包括单个指令,或很多指令,并且可以甚至分布在若干不同代码段上、在不同程序当中、遍及若干存储器设备等。在模块或模块的部分实现于软件中的情况下,软件部分可以存储在一个或多个计算机可读和/或可执行存储介质上。可以利用一个或多个计算机可读存储介质的任何组合。计算机可读存储介质可以包括例如但不限于电子、磁、光、电磁、红外或半导体系统、装置或设备或前述项的任何合适的组合,但将不包括传输信号。在该文献的上下文中,计算机可读和/或可执行存储介质可以是任何可以包含或存储用于指令执行系统、装置、处理器或设备使用或与之结合的程序。

可以通过一种或多种编程语言的任何组合来写出用于执行用于本公开各方面的操作的计算机程序代码,包括面向对象的编程语言(例如Python、Java、Smalltalk、C++,C#、对象C等)、传统过程编程语言(例如“C”编程语言、脚本编程语言和/或其它相似的编程语言)。程序代码可以通过数据网络等在用户的计算机和/或远程计算机或服务器中的一个或多个上部分地或完整地执行。

在此所使用的组件包括有形的物理非瞬时设备。例如,组件可以实现为包括定制VLSI电路、门阵列或其它集成电路的硬件逻辑电路;现成半导体(例如逻辑芯片、晶体管或其它分立式设备);和/或其它机械设备或电设备。组件也可以实现于可编程硬件设备(例如现场可编程门阵列、可编程阵列逻辑、可编程逻辑设备等)中。组件可以包括通过印制电路板(PCB)等的电线路与一个或多个其它组件电连通的一个或多个硅集成电路设备(例如芯片、裸芯、裸芯平面、封装))或其它分立式电设备。在此所描述的模块中的每一个可以替代地由组件实施或实现为组件。

贯穿该说明书对“一个实施例”或“实施例”或相似语言的引用表示本公开的至少一个实施例中包括结合实施例所描述的特定特征、结构或特性。因此,出现短语“在一个实施例中”、“在实施例中”以及相似的语言贯穿该说明书可以但不一定全部指代同一实施例,而是表示“一个或多个但非所有实施例”,除非另外明确指定。术语“包括”、“包含”、“具有”及其变形因此表示“包括但不限于”,除非另外明确指定。枚举式列出各项并不暗指任何或所有项相互排除和/或相互包括,除非另外明确指定。术语“一个”、“某个”和“所述”也指代“一个或多个”,除非另外明确地指定。

以下参照根据本公开实施例的方法、装置、系统和计算机程序产品的示意性流程图示图和/或示意性框图来描述本公开的各方面。应理解,示意性流程图示图和/或示意性框图的每个块以及示意性流程图示图和/或示意性框图中的各块的组合可以由计算机程序指令实现。这些计算机程序指令可以提供给计算机或另外可编程数据处理装置的处理器以制造机器,从而经由处理器或另外可编程数据处理装置执行的指令创建用于实现一个或多个示意性流程图示图和/或示意性框图块中所指定的功能和/或动作的手段。

还应注意,在一些替选实现方式中,块中所标注的功能可以不按附图中所标注的顺序产生。例如,取决于所涉及的功能性,相继示出的两个块实际上可以基本上同时地运行,或各块可以有时按相反顺序运行。可以构想在功能、逻辑或效果方面与所示附图的一个或多个块或其部分等同的其它步骤和方法。虽然在流程图和/或框图中可以采用各种箭头类型和线类型,但它们应理解为并非限制对应实施例的范围。例如,箭头可以指示所描述的实施例的所枚举的各步骤之间的未指定的持续性时间的等待或监控时段。

在以下详细描述中,参照形成其一部分的附图。前述发明内容仅是说明性的,而非意图以任何方式限制。除了以上描述的说明性方面、实施例和特征之外,其它方面、实施例和特征将通过参照附图和以下详细描述变得清楚。每个附图中的要素的描述可以引用在前附图的要素。相同标号在附图中可以指代相同要素,包括相同要素的替选实施例。

根据各个实施例,非易失性存储器控制器管理一个或多个非易失性存储器设备。非易失性存储器设备可以包括存储器或存储设备(例如固态存储设备),其被布置和/或分区为多个可寻址介质存储位置。如在此所使用的那样,介质存储位置指代存储器的任何物理单元(例如非易失性存储器设备上的物理存储介质的任何量)。存储器单元可以包括但不限于:页面、存储器分区、擦除块、扇区、块、物理存储位置的集合体或集合(例如下述逻辑页面、逻辑擦除块)等。

非易失性存储器控制器可以包括存储管理层(SML),其可以将逻辑地址空间呈现给一个或多个存储客户机。SML的一个示例是犹他州盐湖城的Fusion-io公司的Virtual Storage替代地,每个非易失性存储器设备可以包括非易失性存储器介质控制器,其可以将逻辑地址空间呈现给存储客户机。如在此所使用的那样,逻辑地址空间指代存储器资源的逻辑表示。逻辑地址空间可以包括多个(例如一系列)逻辑地址。如在此所使用的那样,逻辑地址指代用于引用存储器资源(例如数据)的任何标识符,包括但不限于:逻辑块地址(LBA)、柱/头/扇区(CHS)地址、文件名、对象标识符、索引节点、通用唯一标识符(UUID)、全局唯一标识符(GUID)、散列码、签名、索引项、范围、限度等。

SML可以保存元数据(例如前向索引),以将逻辑地址空间的逻辑地址映射为非易失性存储器设备上的介质存储位置。SML可以提供从逻辑地址到物理存储资源的任意任何对任何映射。如在此所使用的那样,“任何对任何”映射可以将任何逻辑地址映射为任何物理存储资源。相应地,在逻辑地址与特定介质存储位置和/或介质地址之间可以不存在预定或预设的映射。如在此所使用的那样,介质地址指代对管理多个存储器资源的控制器唯一地标识一个存储器资源区别于另一存储器资源的存储器资源的地址。通过示例的方式,介质地址包括但不限于介质存储位置的地址、物理存储器单元、物理存储器单元的集合体(例如逻辑存储器单元)、存储器单元的部分(例如逻辑存储器单元地址和偏移、范围和/或限度)等。相应地,SML可以将逻辑地址映射为任何大小和/或粒度的物理数据资源,其可以对应于或不对应于非易失性存储器设备的潜在数据分区方案。例如,在一些实施例中,非易失性存储器控制器被配置为:将数据存储在通过在逻辑上组合多个物理存储器单元所形成的逻辑存储器单元内,这样可以允许非易失性存储器控制器支持很多不同的虚拟存储器单元大小和/或粒度。

如在此所使用的那样,逻辑存储器元件指代(例如经由I/O和/或控制总线)并行地或能够被管理的两个或更多个非易失性存储器元件的集合。逻辑存储器元件可以包括多个逻辑存储器单元(例如逻辑页面、逻辑存储器分区(例如逻辑擦除块)等)。如在此所使用的那样,逻辑存储器单元指代组合两个或更多个物理存储器单元的逻辑构造,每个物理存储器单元在各个逻辑存储器元件中的各个非易失性存储器元件上(每个非易失性存储器元件是可并行访问的)。如在此所使用的那样,逻辑存储器分区指代两个或更多个物理存储器分区的集合,每个物理存储器分区在各个逻辑存储器元件中的各个非易失性存储器元件上。

存储管理层所呈现的逻辑地址空间可以具有可以与逻辑地址空间中的可用逻辑地址的数量以及逻辑地址所引用的数据的大小(或粒度)对应的逻辑容量。例如,包括均引用2048字节(2KiB)数据的2^32个唯一逻辑地址的逻辑地址空间的逻辑容量可以是2^43个字节。(如在此所使用的那样,千字节(KiB)指代1024字节)。在一些实施例中,可以稀薄地提供逻辑地址空间。如在此所使用的那样,“稀薄地提供的”逻辑地址空间指代具有超过潜在非易失性存储器设备的物理容量的逻辑容量的逻辑地址空间。例如,存储管理层可以将超过潜在非易失性存储器设备的物理容量的64比特逻辑地址空间(例如64比特逻辑地址所引用的逻辑地址空间)呈现给存储客户机。大的逻辑地址空间可以在减少命名冲突的机会的同时允许存储客户机分配和/或引用逻辑地址的毗邻范围。存储管理层可以促使逻辑地址与物理存储资源之间的任何对任何映射独立于潜在物理存储设备而管理逻辑地址空间。例如,存储管理层可以根据需要并且在不改变存储客户机所使用的逻辑地址的情况下无缝地加入和/或移除物理存储资源。

非易失性存储器控制器可以被配置为:以上下文式格式(contextual format)来存储数据。如在此所使用的那样,上下文式格式指代自身描述数据格式,其中,持续性上下文式元数据随数据存储在物理存储介质上。持续性上下文式元数据提供用于随之存储的数据的上下文。在特定实施例中,持续性上下文式元数据唯一地标识持续性上下文式元数据随之存储的数据。例如,持续性上下文式元数据可以唯一地标识存储客户机所拥有的数据的一个扇区区别于存储客户机所拥有的数据的其它扇区。在另一实施例中,持续性上下文式元数据标识对数据执行的操作。在另一实施例中,持续性上下文式元数据标识对数据执行的操作序列。在另一实施例中,持续性上下文式元数据标识数据的安全性控制、数据类型或其它属性。在特定实施例中,持续性上下文式元数据标识多个方面中的至少一个,包括数据类型、唯一数据标识符、对数据执行的操作以及操作序列。持续性上下文式元数据可以包括但不限于:数据的逻辑地址、数据的标识符(例如文件名、对象id、标签、唯一标识符等)、对其它数据的引用(例如该数据与其它数据关联的指示符)、该数据相对于其它数据的相对位置或偏移(例如文件偏移等)、数据大小和/或范围等。上下文式数据格式可以包括包含数据分段以及一个或多个头的分组格式。替代地,上下文式数据格式可以通过其它方式(例如以非易失性存储器介质上的专用索引、存储器分区索引等)将数据与上下文信息关联。

在一些实施例中,上下文式数据格式可以允许数据上下文基于非易失性存储器介质的内容并且独立于其它元数据(例如上述任意任何对任何映射)而得以确定(和/或重构)。由于数据的介质位置独立于数据的逻辑地址,因此仅基于数据的介质位置或介质地址而确定数据的上下文可能是低效的(或不可能的)。将数据以上下文式格式存储在非易失性存储器介质上可以允许在没有对其它元数据的引用的情况下确定数据上下文。例如,上下文式数据格式可以允许仅基于非易失性存储器介质的内容而重构元数据(例如,重构逻辑地址与介质位置之间的任何对任何映射)。

在一些实施例中,非易失性存储器控制器可以被配置为:将数据存储在一个或多个不对称的一次写入介质(例如固态存储介质)上。如在此所使用的那样,“写入一次”存储介质指代每次在其上写入或编程新的数据就重新初始化(例如擦除)的存储介质。如在此所使用的那样,“不对称”存储介质指代关于不同存储操作具有不同延时的存储介质。很多类型的固态存储介质是不对称的;例如,读取操作可以远比写入/编程操作更快,写入/编程操作可以远比擦除操作更快(例如,读取介质可以比擦除更快几百倍,并且比对介质进行编程更快几十倍)。为了特别考虑介质的不对称性质,存储器介质可以分区为可以成组地擦除的存储器分区(例如擦除块)。故此,原地修改单个数据分段可能要求擦除包括数据的整个擦除块,并且将修改后的数据连同初始的未改变的数据一起重写到擦除块。这样可能导致低效的“写入放大”,其可能过度损耗介质。因此,在一些实施例中,非易失性存储器控制器可以被配置为:异地写入数据。如在此所使用的那样,“异地”写入数据指代将数据写入到不同的介质存储位置,而非“原地”盖写(overwrite)数据(例如,盖写数据的初始物理位置)。由于无需擦除或重新拷贝具有待修改的数据的擦除块上的现有有效数据,因此异地修改数据可以避免写入放大。此外,异地写入数据可以从很多存储操作的延时路径消除擦除(擦除延时不再是写入操作的关键路径的部分)。

非易失性存储器控制器可以包括在用于服务于存储操作的常规路径(用于执行存储操作和/或服务于存储请求的“路径”)外部操作的一个或多个处理。如在此所使用的那样,“用于服务于存储请求的路径”或“用于服务于存储操作的路径”(又称为“关键路径”)指代服务于存储操作或请求所需的一系列处理操作(例如读取、写入、修改等)。用于服务于存储请求的路径可以包括:从存储客户机接收请求;标识请求的逻辑地址;对非易失性存储器介质执行一个或多个存储操作;以及返回结果(例如确认或数据)。产生在用于服务于存储请求的路径外部的处理可以包括但不限于:梳理器(groomer)、去重(de-duplication)等。这些处理可以自主地或在后台中实现,从而它们不干扰或影响执行其它存储操作和/或请求。相应地,这些处理可以独立于服务于存储请求而操作。

在一些实施例中,非易失性存储器控制器包括梳理器,其被配置为:回收存储器分区(例如擦除块),以用于复用。非易失性存储器控制器所实现的写入异地范例可以产生非易失性存储器介质上剩余的过时或无效数据。例如,以数据Y来盖写数据X可以导致将Y存储在新的存储器分区上(而非原地盖写X),并且更新元数据的任何对任何映射,以将Y标识为数据的有效的最新版本。由于如上所述,擦除X可能涉及擦除整个存储器分区,这是耗时的操作并且可能导致写入放大,因此数据X的过时的版本可以标记为无效的,但可以不立即被移除(例如擦除)。相似地,可以不立即移除不再使用的数据(例如删除的或修整的数据)。非易失性存储器介质可能累计可观量的无效数据。梳理器处理可以在用于服务于存储操作的关键路径外部操作。梳理器处理可以回收存储器分区,从而它们可以对于其它存储操作而得以复用。如在此所使用的那样,回收存储器分区指代擦除存储器分区,从而新的数据可以存储/编程于其上。回收存储器分区可以包括:将存储器分区上的有效数据重新定位到新的位置。梳理器可以基于包括但不限于以下项的一个或多个因素而标识用于回收的存储器分区:存储器分区中的无效数据量、存储器分区中的有效数据量、存储器分区上的损耗(擦除周期的数量)、自从对存储器分区进行编程或刷新以来的时间等。

非易失性存储器控制器可以进一步被配置为:以日志格式来存储数据。如上所述,日志格式指代定义对非易失性存储器介质执行的有序存储操作序列。在一些实施例中,日志格式包括:按非易失性存储器介质的预定介质地址序列(例如,在介质的顺序页面和/或擦除块内)存储数据。日志格式可以还包括:将数据(例如每个分组或数据分段)与各个序列指示符关联。序列指示符可以单独地应用于数据(例如,应用于每个数据分组),和/或应用于数据成组(例如顺序存储在存储器分区(例如擦除块)上的分组)。在一些实施例中,当回收(例如,擦除)存储器分区时,如上所述,和/或当存储器分区首先用于存储数据时,序列指示符可以应用于存储器分区。

在一些实施例中,日志格式可以包括:按“仅附接(append only)”范例来存储数据。非易失性存储器控制器可以在非易失性存储器设备的介质地址处保留当前附接点。附接点可以是当前存储器分区和/或存储器分区内的偏移。数据可以于是得以顺序从附接点附接。因此可以基于与存储器分区内的数据序列组合的数据的存储器分区的序列指示符而确定数据的顺序排序。在到达存储器分区的末端时,非易失性存储器控制器可以标识“下一”可用存储器分区(得以初始化并且准备存储数据的下一存储器分区)。梳理器可以回收包括无效的、陈旧的和/或删除的数据的存储器分区,以确保数据可以继续附接到介质日志。

在此所描述的日志格式可以允许基于非易失性存储器介质的内容并且独立于其它元数据而区分有效数据与无效数据。如上所述,可以直到回收包括数据的存储器分区才从非易失性存储器介质移除无效数据。因此,具有相同上下文的数据的多个“版本”(例如具有相同逻辑地址的数据的多个版本)可以存在于非易失性存储器介质上。与数据关联的序列指示符可以用于区分数据的无效版本与数据的当前最新版本;日志中的最新近的数据是当前版本,并且此前的版本可以标识为无效的。

在以下详细描述中,参照形成其一部分的附图。前述发明内容仅是说明性的,并且不意图以任何方式限制。除了以上描述的说明性方面、实施例和特征之外,其它方面、实施例和特征将通过参照附图和以下详细描述变得清楚。

图1是包括管理模块150的系统100的一个实施例的框图。通常,管理模块150被配置为:动态地和/或智能地管理用于非易失性存储器介质122的回拷和/或内部数据移动(IDM)操作,以优化不同类型的存储单元(例如SLC、MLC、TLC)之间的数据的拷贝或移动和/或数据的访问。在特定实施例中,管理模块150可以被配置为:有选择地确定是否在内部拷贝或移动数据;基于数据的一个或多个属性(例如数据因素)而从第一非易失性存储单元集合(例如SLC存储单元)到第二非易失性存储单元集合(例如TLC存储单元)使用回拷操作、IDM操作等。在另一实施例中,管理模块150可以被配置为:基于数据的一个或多个属性(例如数据因素)等而有选择地确定是否刷新回拷或IDM操作的数据(例如,对数据进行解码,以纠正一个或多个错误,并且对纠正后的数据进行重新编码)。在一个实施例中,管理模块150可以被配置为:调整用于第一非易失性存储单元集合(例如SLC存储单元)的一个或多个读取电压阈值,以减少用于将数据拷贝或移动到第二非易失性存储单元集合(例如TLC存储单元)的数据中的错误。

管理模块150可以是存储管理层(SML)130的部分和/或与之进行通信。SML 130可以在计算设备110的非易失性存储器系统102上操作,计算设备110可以包括处理器111、易失性存储器112和通信接口113。处理器111可以包括一个或多个中央处理单元、一个或多个通用处理器、一个或多个专用处理器、一个或多个虚拟处理器(例如,计算设备110可以是在主机内操作的虚拟机)、一个或多个处理器内核等。通信接口113可以包括网络接口,被配置为:以通信方式将计算设备110(和/或非易失性存储器控制器124)耦合到通信网络(例如互联网协议网络、存储域网络等)。

计算设备110可以还包括非瞬时计算机可读存储介质114。计算机可读存储介质114可以包括可执行指令,被配置为:使得计算设备110(例如处理器111)执行在此所公开的方法中的一个或多个的步骤。替代地或附加地,存储管理层130和/或其一个或多个模块可以实施为非瞬时存储介质114上所存储的一个或多个指令。

存储管理层130可以被配置为:将存储服务提供给一个或多个存储客户机116。存储客户机116可以包括计算设备110上操作的本地存储客户机116和/或可经由网络(和网络接口113)访问的远程存储客户机116,。存储客户机116可以包括但不限于操作系统、文件系统、数据库应用、服务器应用、内核级处理、用户级处理、应用等。

存储管理层130包括和/或以通信方式耦合到一个或多个非易失性存储器设备120。非易失性存储器设备120可以包括不同类型的非易失性存储器设备,包括但不限于:固态存储设备、硬驱动器、SAN存储资源等。非易失性存储器设备120可以包括一个或多个各个非易失性存储器介质控制器126以及非易失性存储器介质122。SML 130可以提供经由传统块I/O接口131对一个或多个非易失性存储器设备120的访问。附加地,SML 130可以提供通过SML接口132对增强的功能性(大的虚拟地址空间)的访问。元数据135可以用于管理和/或跟踪通过块I/O接口131、SML接口132、缓存接口133或其它有关接口中的任一所执行的存储操作。

缓存接口133可以显露可经由存储管理层130访问的缓存特定特征。此外,在一些实施例中,呈现给存储客户机116的SML接口132提供对一个或多个非易失性存储器设备120和/或一个或多个非易失性存储器介质控制器126所实现的数据变换的访问。

SML 130可以通过可以包括但不限于以下接口的一个或多个接口提供存储服务:块I/O接口、扩展的存储管理层接口、缓存接口等。SML 130通过一个或多个接口将逻辑地址空间134呈现给存储客户机116。如上所述,逻辑地址空间134可以包括均与一个或多个非易失性存储器设备120上的各个介质位置对应的多个逻辑地址。SML 130可以保存包括逻辑地址与介质位置之间的任何对任何映射的元数据135,如上所述。

SML 130可以还包括日志存储模块137,其被配置为:以上下文式日志格式来存储数据。上下文式日志数据格式可以包括:将数据与持续性上下文式元数据(例如数据的逻辑地址等)关联。上下文式日志格式可以还包括:将数据与定义对一个或多个非易失性存储器设备120执行的有序存储操作序列的非易失性存储器介质122上的各个序列标识符关联,如上所述。

SML 130可以还包括非易失性存储器设备接口139,被配置为:通过包括但不限于以下总线的总线125将数据、命令和/或询问传送到一个或多个非易失性存储器设备120:外围组件互连高速(PCI高速或PCIe)总线、串行高级技术附连(ATA)总线、并行ATA总线、小型计算机系统接口(SCSI)、火线、光纤通道、通用串行总线(USB)、PCIe高级切换(PCIe-AS)总线、网络、无限带、SCSI RDMA等。非易失性存储器设备接口139可以使用输入-输出控制(IO-CTL)命令、IO-CTL命令扩展、远程直接存储器访问等与一个或多个非易失性存储器设备120进行通信。通信接口113可以包括一个或多个网络接口,被配置为:以通信方式将计算设备110(和/或非易失性存储器控制器124)耦合到网络115和/或一个或多个远程网络可访问存储客户机116。

计算设备110可以包括非易失性存储器控制器124,其被配置为:将存储服务提供给存储客户机116。存储客户机116可以包括计算设备110上操作的本地存储客户机116和/或可经由网络115(和网络接口113)访问的远程存储客户机116。非易失性存储器控制器124包括一个或多个非易失性存储器设备120。虽然图1B描述单个非易失性存储器设备120,但本公开不限于此,并且可以适用于合并任何数量的非易失性存储器设备120。

非易失性存储器设备120可以包括非易失性存储器介质122,其可以包括但不限于:NAND闪速存储器、NOR闪速存储器、纳米随机访问存储器(纳米RAM或NRAM)、基于纳米晶体引线的存储器、基于二氧化硅的亚10纳米工艺存储器、石墨烯存储器、硅-氧化物-氮化物-氧化物-硅(SONOS)、阻性RAM(RRAM)、可编程金属化单元(PMC)、导电桥接RAM(CBRAM)、磁阻式RAM(MRAM)、动态RAM(DRAM)、相变存储器(PRAM或PCM)、磁存储介质(例如硬盘、带)、光存储介质等。虽然非易失性存储器介质122在各个实施例中在此称为“存储器介质”,但非易失性存储器介质122可以更一般地包括能够记录数据的非易失性记录介质,其可以称为非易失性存储器介质、非易失性存储介质等。此外,非易失性存储器设备120在各个实施例中可以包括非易失性记录设备、非易失性存储器设备、非易失性存储设备等。

非易失性存储器介质122可以包括用于存储数据的多个单元。如在此所使用的那样,单元指代非易失性存储器介质122的存储器件或存储器的最小物理单元。在一些实施例中,每个单元具有可以被改动以对数据进行编码或另外存储数据的物理和/或电性质。虽然非易失性存储器介质122的单元一般在此称为“存储器单元”或“存储单元”,但单元可以更一般地包括能够记录数据的记录单元。此外,虽然在此主要关于非易失性存储器介质122描述管理模块150,但在特定实施例中,管理模块150可以按实质上相似的方式操作,以管理易失性存储器介质。

非易失性存储器介质122可以包括一个或多个非易失性存储器元件123,其可以包括但不限于:芯片、封装、平面、裸芯等。非易失性存储器介质控制器126可以被配置为管理非易失性存储器介质122上的存储操作,并且可以包括一个或多个处理器、可编程处理器(例如现场可编程门阵列)等。在一些实施例中,非易失性存储器介质控制器126被配置为:以上述上下文式日志格式将数据存储在(并且将数据读取自)非易失性存储器介质122上,将数据传送入/出非易失性存储器设备120等。

非易失性存储器介质控制器126可以通过总线127的方式以通信方式耦合到非易失性存储器介质122。总线127可以包括I/O总线,用于将数据传递入/出非易失性存储器元件123。总线127可以还包括控制总线,用于将寻址和另外命令和控制信息传递到非易失性存储器元件123。在一些实施例中,总线127可以并行地以通信方式将非易失性存储器元件123耦合到非易失性存储器介质控制器126。这种并行访问可以允许非易失性存储器元件123作为形成逻辑存储器元件129的群组而被管理。如上所述,逻辑存储器元件可以分区为各个逻辑存储器单元(例如逻辑页面)和/或逻辑存储器分区(例如逻辑擦除块)。可以通过在逻辑上组合非易失性存储器元件中的每一个的物理存储器单元来形成逻辑存储器单元。例如,如果非易失性存储器介质122包括二十五(25)个非易失性存储器元件,则每个逻辑存储器单元可以包括二十五(25)个页面(非易失性存储器介质122的每个元件的页面)。

非易失性存储器控制器124可以包括SML 130和非易失性存储器介质控制器126。SML 130可以经由一个或多个接口131、132和/或133将存储服务提供给存储客户机116。在一些实施例中,SML 130提供块设备I/O接口131,存储客户机116通过其执行块等级I/O操作。替代地或附加地,SML 130可以提供存储管理层(SML)接口132,其可以将其它存储服务提供给存储客户机116。在一些实施例中,SML接口132可以包括对块设备接口131的扩展(例如,存储客户机116可以通过对块设备的接口131的扩展来访问SML接口132)。替代地或附加地,SML接口132可以提供为分离的API、服务和/或库。SML 130可以进一步被配置为:提供缓存接口133,以用于使用非易失性存储器系统102来缓存数据。

如上所述,SML 130可以(通过接口131、132和/或133)将逻辑地址空间134呈现给存储客户机116。SML 130可以保存包括逻辑地址空间134中的逻辑地址与非易失性存储器设备120上的介质位置之间的任何对任何映射的元数据135。元数据135可以包括具有映射逻辑地址空间134中的逻辑地址和非易失性存储器设备120上的介质位置的项的逻辑到物理映射结构。元数据135的逻辑到物理映射结构在一个实施例中稀疏地遍布有用于非易失性存储器设备120存储数据的逻辑地址的项,但没有用于非易失性存储器设备120当前不存储数据的逻辑地址的项。元数据135在特定实施例中按块等级来跟踪数据,其中,SML 130将数据管理为块。

非易失性存储器系统102可以还包括日志存储模块137,其如上所述可以被配置为:以上下文式日志格式将数据存储在非易失性存储器设备120上。上下文式日志数据格式可以包括:将数据与非易失性存储器介质122上的逻辑地址关联。上下文式日志格式可以还包括:将数据与定义对非易失性存储器介质122执行的有序存储操作序列的非易失性存储器介质122上的各个序列标识符关联,如上所述。非易失性存储器控制器124可以还包括非易失性存储器设备接口139,其被配置为:通过总线125将数据、命令和/或询问传送到非易失性存储器介质控制器126,如上所述。

在特定实施例中,非易失性存储器介质122包括多个不同类型的介质(例如SLC存储单元、MLC存储单元、TLC存储单元等)。例如,非易失性存储器介质122的每个芯片、裸芯、裸芯平面等可以包括SLC存储单元的一个或多个擦除块,以缓冲或另外存储用于TLC存储单元的一个或多个擦除块的数据。在另一实施例中,擦除块内的单独字线和/或页面可以通过各种组合而被配置和/或使用作为SLC存储单元、MLC存储单元、TLC存储单元等。例如,特定类型的3D NAND闪速存储器介质122可以包括具有单独地可配置为SLC、MLC、TLC、四级式单元(quad-level-cell,QLC)等的字线或页面的擦除块。

包括不同层式或类型的介质的非易失性存储器介质122可以称为“裸芯上缓冲式”存储器介质122,如在此所使用的那样。在其它实施例中,非易失性存储器介质122可以包括:SLC存储单元,用于缓冲用于MLC存储单元的数据;MLC存储单元,用于缓冲用于TLC存储单元的数据;或第一源存储单元的另一组合,用于缓冲用于具有比第一源存储单元更多的每单元的存储状态和比特的第二目的地存储单元的数据。虽然在此为的简化的目的而描述执行从SLC存储单元到TLC存储单元的回拷操作,但该描述同等地应用于对于不同模式或不同类型中的其它存储单元集合从SLC到MLC、从MLC到TLC、从SLC到QLC、从MLC到QLC、从TLC到QLC存储单元等的回拷操作。

随着每单元的存储状态和比特的数量增加,读取时间、写入/编程时间等也可能增加。此外,在特定实施例中,存储单元集合中的每个存储单元被配置为存储的数据的比特越多,在对存储单元集合进行编程之前可以缓冲数据越多。并非在非易失性存储器介质控制器126、SML 130、主机计算设备110等的易失性存储器中缓冲数据,管理模块150可以在非易失性存储器介质122中缓冲数据。例如,管理模块150可以在SLC存储单元的三个擦除块中缓冲或存储数据,以用于存储在TLC存储单元等的单个擦除块中。

如在此所使用的那样,回拷或IDM操作、过程或处理包括:将数据从第一源存储单元集合拷贝或移动到第二目的地存储单元集合。通过将数据从较不密集的存储单元拷贝或移动到较密集的存储单元(例如,将数据从SLC存储单元拷贝到MLC存储单元或TLC存储单元),IDM操作可以压缩所拷贝的数据。在数据缓存在第一存储单元集合中以用于存储第二存储单元集合中的实施例等中,回拷或IDM可以还包括:降级(destage)。

管理模块150可以使用回拷或IDM操作来管理不同存储单元集合(例如页面、擦除块等)之间的数据的拷贝或移动。例如,非易失性存储器介质122可以支持或提供用于执行回拷操作的回拷或IDM命令,管理模块150可以使用其以在内部拷贝或移动数据。在其它实施例中,管理模块150可以使用通用读取和写入/编程命令等在没有回拷或IDM命令的情况下执行回拷或IDM操作。管理模块150在一个实施例中被配置为:动态地和/或智能地管理用于非易失性存储器介质122的回拷和/或IDM操作,以优化不同类型的存储单元(例如SLC、MLC、TLC)之间的数据的拷贝或移动和/或数据的访问。

在特定实施例中,管理模块150可以被配置为:基于一个或多个数据因素(data factor)而有选择地确定是否使用从第一非易失性存储单元集合(例如SLC存储单元)到第二非易失性存储单元集合(例如TLC存储单元)的回拷操作、IDM操作等来在内部拷贝或移动数据。例如,管理模块150可以在至少临时地将较高优先级和/或较频繁访问的数据留在较快的较不密集的存储单元中的同时、在内部将较低优先级和/或较不频繁访问的数据从较快的较不密集的存储单元(例如SLC存储单元)回拷或移动到较慢的较密集的存储单元(例如TLC存储单元),由此对于较高优先级和/或较频繁访问的数据提供更高的性能、可靠性等。

在另一实施例中,管理模块150可以被配置为:基于一个或多个数据因素等而有选择地确定是否刷新回拷或IDM操作的数据(例如,对数据进行解码,以纠正一个或多个错误,并且对纠正后的数据进行重新编码)。通过对数据进行解码并且重新编码来刷新数据可以包括:将数据从非易失性存储器元件123(例如芯片、裸芯、裸芯平面)拷贝或移动到非易失性存储器介质控制器126、存储管理层130和/或用于解码并且重新编码的另一实体。在管理模块150可以在不刷新数据的情况下回拷或移动数据的实施例中,数据可以保留在单个非易失性存储器元件123(例如芯片、裸芯、裸芯平面)内,从而回拷和/或IDM过程可以完成,而没有将数据拷贝或移动离开非易失性存储器元件123以用于解码并且重新编码以及将重新编码后的数据拷贝或移动回到非易失性存储器元件123的性能惩罚。以此方式,管理模块150可以刷新特定数据,以在不刷新数据的情况下拷贝或移动返回其它数据的同时减少或防止错误。

在一个实施例中,管理模块150可以被配置为:调整用于第一非易失性存储单元集合(例如SLC存储单元)的一个或多个读取电压阈值,以减少用于将数据拷贝或移动到第二非易失性存储单元集合(例如TLC存储单元)的数据中的错误。在不管理用于源非易失性存储单元的读取电压阈值的情况下,在数据变为受损并且错误被引入之前,管理模块150可能具有对于数据执行回拷和/或IDM操作的有限时间。在源非易失性存储单元(例如SLC存储单元)中引入到数据的任何错误可能通过将受损的数据拷贝或移动到目的地非易失性存储单元(例如TLC存储单元)而被放大或加剧。通过调整用于源非易失性存储单元的一个或多个读取电压阈值,管理模块150可以在有或无刷新数据的情况下减少或消除数据错误,允许数据存储在源非易失性存储单元中达比如果使用默认读取电压阈值更长的时间段。

在一个实施例中,管理模块150可以包括存储在计算机可读存储介质114上以用于在处理器111上执行的可执行软件代码(例如用于非易失性存储器设备120、SML 130等的设备驱动程序)。在另一实施例中,管理模块150可以包括一个或多个非易失性存储器设备120的逻辑硬件,例如非易失性存储器介质控制器126、非易失性存储器控制器124、设备控制器、现场可编程门阵列(FPGA)或另外可编程逻辑、用于FPGA或另外可编程逻辑的固件、用于在微控制器上执行的微码、专用集成电路(ASIC)等。在另一实施例中,管理模块150可以包括可执行软件代码和逻辑硬件二者的组合。

在一个实施例中,管理模块150被配置为:经由总线125等从SML 130接收存储请求。管理模块150可以进一步被配置为:经由总线125将数据传送入/出SML 130和/或存储客户机116。相应地,管理模块150在一些实施例中可以包括一个或多个直接存储器访问(DMA)模块、远程DMA模块、总线控制器、桥、缓冲器等和/或与之进行通信,以促进传送存储请求和关联数据。在另一实施例中,管理模块150可以从存储客户机116接收存储请求作为来自存储客户机116的API调用、作为IO-CTL命令等。以下关于图3A和图3B更详细地描述管理模块150。

“单元(cell)”指代非易失性存储器介质122的存储或存储器的最小物理单元。在一些实施例中,每个单元具有可以被改动以对数据进行编码或另外存储数据的物理和/或电性质。例如,在闪速存储器中,单元可以包括浮置栅极晶体管,并且用于对数据进行编码的物理性质可以是存储在浮置栅极上的电荷、当施加到控制栅极时足以使得晶体管导通的阈值电压Vt等。作为另一示例,在相变存储器中,单元可以是硫族(chalcogenide)玻璃的区域,并且用于对数据进行编码的物理性质可以是区域的结晶程度、单元的电阻等。如以上关于非易失性存储器介质122所描述的那样,很多类型的单元可以对非易失性存储器设备120的数据进行编码,以用于随管理模块150一起使用。

在一个实施例中,用于单元的数据编码物理性质的可能值的范围划分为离散编程状态或停留态(abode),从而每个编程状态或停留态对一个或多个可能数据值进行编码。在一些实施例中,编程状态或停留态被配置为:对用于多个比特的值进行编码。例如,如果单元使用两个状态来存储单个比特(例如,在SLC模式下),则第一状态可以对二进制一“1”进行编码,而第二状态可以对二进制零“0”进行编码。如果单元使用四个状态来存储两个比特(例如,在MLC模式下),则每个状态可以对用于单元的两个比特的不同值(例如“11”、“01”、“00”或“10”)进行编码。如果单元使用八个状态来存储三个比特(例如,在TLC模式下),则每个状态可以对用于单元的三个比特的不同值(例如“111”、“011”、“001”、“101”、“100”、“000”、“010”或“110”)进行编码。在另一实施例中,可以通过保护带或分离距离来分离单元的状态或停留态。如在此所使用的那样,编程“状态”或“停留态”指代用于单元的数据编码物理性质的可能值的子范围,从而每个状态与一个或多个数据值的单个集合对应。停留态、编程状态(program stage)、编程化状态(programming state)或存储状态可以包括与一个或多个数据值的特定集合关联的读取等级的范围(例如用于闪速介质的读取电压电平、用于PCM介质的读取电阻率等级等)。读取阈值(例如读取电压阈值、读取电阻率阈值等)可以分开停留态或编程状态。以下关于图9A更详细地描述状态/停留态和保护带。

在一些实施例中,编码将单元的状态或停留态映射为数据值。通常,编码是允许单元的每个状态或停留态表示对应数据值或数据值集合的映射。例如,在具有两个状态的单元(例如SLC)中,编码可以将较低状态(lower state)映射为二进制“1”,并且将较高状态(upper state)映射为“0”,从而单元存储一个比特的信息。作为另一示例,在具有四个状态的单元(例如MLC)中,Gray码编码等可以将四个状态L0、L1、L2和L3分别映射为“11”、“01”、“00”和“10”,从而单元存储两个比特的信息。相似地,在具有八个状态的单元(例如TLC)中,Gray码编码等可以将八个状态L0、L1、L2、L3、L4、L5、L6和L7映射为数据值“111”、“011”、“001”、“101”、“100”、“000”、“010”以及“110”,从而单元存储、包括和/或编码三个比特的信息。非易失性存储器介质122可以使用其它编码来存储数据。以下关于图9B更详细地描述编码。

如下所述,多层式或MLC存储器单元存储至少两个比特:最高有效比特(MSB)和最低有效比特(LSB)。一种类型的MLC存储器介质是三级式单元(TLC)存储器介质,其对三个比特——MSB、中间有效比特(CSB)和LSB进行存储或编码。MLC存储器介质的其它实施例可以对每单元多于三个比特进行存储或编码(例如对四个比特进行编码的具有每单元十六个停留态或编程状态的四级式单元等)。在特定实施例中,MSB、CSB和/或LSB虽然是同一物理存储器单元的部分,但可以分配给非易失性存储器介质122的不同页面(例如较高页面、中间页面或较低页面)。

在特定实施例中,多个多层式存储单元在非易失性存储器介质122(例如NAND闪速存储器介质)上组织为物理页面。在特定非易失性存储器介质122中,物理页面是可以写入或编程到非易失性存储器介质122的最小单元。在这些实施例中,存储器单元可以与包括用于单元的每个比特的页面(例如用于MLC的两个页面或页面对、用于TLC的三个页面)的页面元组关联。页面元组是与单个普通物理存储器单元集合关联的页面集合(例如上、中和/或下)。例如,存储器单元可以与包括较高页面和较低页面的页面对、包括较高页面、中间页面和较低页面的页面元组(tuple)等关联。较高页面可以与MSB关联,中间页面可以与CSB关联,较低页面可以与LSB关联,或反之。物理页面在特定实施例中可以成组或组织为逻辑页面,其中,每个逻辑页面包括多个物理页面。

因此,存储器单元的MSB、CSB和LSB可以在非易失性存储器设备120中具有不同的地址。在特定实施例中,较高页面包括多个存储器单元的MSB,中间页面包括多个存储器单元的CBS,较低页面包括相同普通存储器单元集合或多个存储器单元的LSB。基于用于存储器单元的停留态或编程状态的数据编码,针对较高页面的写入可以因此产生仅关联存储器单元的MSB的改变,针对中间页面的写入可以产生仅关联存储器单元的CSB的改变,针对较低页面的写入可以产生仅关联存储器单元的LSB的改变。

管理模块150在特定实施例中写入数据和/或使得数据根据用于非易失性存储器介质122的有序页面编程顺序而编码到存储器单元集合。例如,有序页面编程顺序可以指示:在对第二/中间页面进行编程之前对第一/较低页面进行编程,在对第三/较高页面进行编程之前对第二/中间页面进行编程,或用于单元集合的页面编程的另一预先定义的顺序。非易失性存储器介质122可以要求多级编程处理(例如两级编程处理(例如较低页面,然后较高页面,或反之亦然))、三级编程处理(例如较低页面,然后中间页面,然后较高页面)等。在另一实施例中,特定非易失性存储器介质122可以要求存储器单元集合的每个页面或比特是已知的,出现,准备被编程,和/或同时被编程(例如,在对较低页面进行编程之前,数据的中间页面和/或较高页面被编程或准备编程)。

在一些实施例中,每个非易失性存储器单元具有2^X个可能的编程状态或停留态,其中,X等于每非易失性存储器单元的比特的数量。例如,MLC非易失性存储器单元可以存储两个比特的信息,并且相应地具有四个可能的编程状态或停留态。作为另一示例,TLC非易失性存储器单元可以存储三个比特的信息,并且相应地具有八个可能的编程状态或停留态。

如上所述,即使MSB、CSB和LSB是同一物理三层式存储器单元402的部分,MSB、CSB和LSB也可以分配给介质的不同物理和/或逻辑页面。在特定实施例中,多个非易失性存储器单元在逻辑上组织为非易失性存储器设备120上的一个或多个页面。页面可以用作可以写入或编程到非易失性存储器设备120的最小单元的指定。此外,非易失性存储器单元可以与页面元组关联。页面元组是与单个普通物理非易失性存储器单元集合关联的页面集合(例如,指定为较低页面、中间页面和/或较高页面)。在一个示例中,两比特非易失性存储器单元与页面对关联,其中,MSB与较高页面关联,LSB与较低页面关联。在特定实施例中用于将MSB/CSB/LSB与上/中/较低页面进行相关的特定惯例并非一定限制可以在其它实施例中使用的其它惯例。因此,同一非易失性存储器单元中的MSB、CSB和LSB在非易失性存储器设备120中可以具有不同逻辑和/或物理地址。

此外,可以在一个或多个级中实现写入操作,并且每个级可以包括一个或多个增量电压电平改变(例如增量步长(step)脉冲编程)。例如,将非易失性存储器单元的状态从擦除状态/L0改变为状态A/L1可以遍及多个增量电压电平改变而产生在单个编程阶段中,每个电压电平改变将非易失性存储器单元的电压电平增加擦除状态/L0与A/L1状态之间的小部分差异。在另一示例中,可以遍及单个电压电平改变(具有相对高的编程电压)或遍及多个增量电压电平改变(均使用相对低的编程电压)在单个编程阶段中执行将非易失性存储器单元的状态从擦除状态/L0改变为LM状态。

在一些实施例中,可以在不同的停留态或编程状态之间以读取电压阈值来执行一个或多个读取操作,以确定读取电压落入哪个停留态或编程状态下。例如,对于MLC存储器单元,可以对非易失性存储器单元执行第一读取操作,以确定读取电压是否处于ERASE/L0状态与A/L1状态之间,可以执行第二读取操作,以在A/L1状态与B/L2状态之间进行区分,并且可以执行第三读取操作,以在B/L2与C/L3状态之间进行区分。因为每个编程化状态与两个(或更多个)比特对应,所以一旦标识编程化状态,就可以获知MSB和LSB二者。在特定实施例中,响应于对非易失性存储器设备120上所存储的数据的请求而读取数据比特。

图2描述包括管理模块150的非易失性存储器控制器124的一个实施例。非易失性存储器设备120可以包括非易失性存储器介质控制器126和非易失性存储器介质122。非易失性存储器介质122可以包括多个非易失性存储器元件123,其可以经由总线127通过通信方式耦合到非易失性存储器介质控制器126,如上所述。

非易失性存储器介质控制器126可以包括写入流水线240,其被配置为:响应于经由管理模块150接收到的请求而以上下文式格式将数据存储在非易失性存储器介质122上。请求可以包括和/或引用待存储在非易失性存储器介质122上的数据,可以包括数据的逻辑地址等。如上所述,上下文式格式可以包括:在非易失性存储器介质122上存储与数据关联的数据的逻辑地址。例如,写入流水线240可以被配置为:将数据格式化为分组,并且可以在分组头(或其它分组字段)中包括数据的逻辑地址。写入流水线240在特定实施例中可以使用纠错码(ECC)(例如分组码、卷积码、Bose-Chaudhuri-Hocquenghem(BCH)码、低密度奇偶校验(LDPC)码、Hamming码、Reed-Solomon码、turbo码等)来对数据进行编码和/或保护。写入流水线240可以被配置为:缓冲数据,以用于存储在非易失性存储器介质122上。在一些实施例中,写入流水线240可以包括一个或多个同步缓冲器,以将非易失性存储器介质控制器126的时钟域与非易失性存储器介质122(和/或总线127)的时钟域同步。

日志存储模块248可以被配置为:选择用于数据的介质位置,并且可以经由总线127将寻址和/或控制信息提供给非易失性存储器元件123。在一些实施例中,日志存储模块248被配置为:以日志格式有序地将数据存储在非易失性存储器介质内。日志存储模块248可以进一步被配置为:梳理非易失性存储器介质。在特定实施例中,日志存储模块248实质上与上述日志存储模块137相似。日志存储模块248可以由SML 130和/或非易失性存储器介质控制器126执行。

在将数据写入到非易失性存储器介质时,非易失性存储器介质控制器126可以被配置为:更新元数据135(例如前向索引),以将数据的逻辑地址与非易失性存储器介质122上的数据的介质地址关联。在一些实施例中,元数据135可以保存在非易失性存储器介质控制器126上;例如,元数据135可以存储在非易失性存储器介质122、易失性存储器(未示出)等上。替代地或附加地,元数据135可以保存在SML 130内(例如图1的计算设备110的易失性存储器112上)。在一些实施例中,元数据135可以由SML 130保存在易失性存储器中,并且可以周期性地存储在非易失性存储器介质122上。

非易失性存储器介质控制器126可以还包括读取流水线241,其被配置为:响应于经由管理模块150接收到的请求而从非易失性存储器介质122读取上下文式数据。请求可以包括所请求的数据的逻辑地址、所请求的数据的介质地址等。读取流水线241在特定实施例中可以使用纠错码(ECC)(例如分组码、卷积码、Bose-Chaudhuri-HocquenghemBCH)码、低密度奇偶校验(LDPC)码、Hamming码、Reed-Solomon码、turbo码等)来对关于数据的一个或多个数据错误进行解码和/或纠正。读取流水线241可以被配置为:从非易失性存储器介质122读取以上下文式格式存储的数据,并且将数据提供给SML 130和/或存储客户机116。读取流水线241可以被配置为:使用数据的逻辑地址和元数据135来确定数据的介质地址。替代地或附加地,SML130可以存储数据的介质地址,并且可以在请求中包括介质地址。日志存储模块248可以将介质地址提供给非易失性存储器元件123,并且数据可以经由缓冲器流送到读取流水线241中。读取流水线241可以包括一个或多个读取同步缓冲器,以用于时钟域同步,如上所述。

非易失性存储器介质控制器126可以还包括复用器249,其被配置为:有选择地将数据和/或命令路由入/出写入流水线240和读取流水线241。在一些实施例中,非易失性存储器介质控制器126可以被配置为在填充写入流水线240的缓冲器的同时读取数据,和/或可以交错非易失性存储器元件123的一个或多个组(未示出)上的一个或多个存储操作。

图3A描述管理模块150的一个实施例。管理模块150可以实质上与以上关于图1所描述的管理模块150相似。在所描述的实施例中,管理模块150包括缓冲器模块302、刷新模块304和回拷模块306。

在一个实施例中,缓冲器模块302在第一非易失性存储单元集合(例如SLC存储单元的一个或多个擦除块)中缓冲或另外存储数据(例如写入请求的用户数据或其它工作量数据)。缓冲器模块302可以从一个或多个存储客户机116接收与一个或多个写入/编程请求等关联的数据。缓冲器模块302可以临时将数据存储或搬运在易失性存储器缓冲器(例如主机计算设备110的易失性存储器112、非易失性存储器设备120的易失性存储器等)中,以促进将数据编程到非易失性存储器介质122的存储单元集合。

在特定实施例中,缓冲器模块302可以将被缓冲的数据存储在非易失性存储器设备120自身的非易失性存储器介质122内(例如被配置为或分区为SLC存储器单元的一个或多个第一/源擦除块中),从而数据得以持续性地存储,但从而有序编程顺序不应用。例如,非易失性存储器设备120内可能不存在足够的易失性存储器,用于非易失性存储器设备120的保持时间可孟并非长得足以对所有被缓冲的数据等进行编程,并且将数据缓冲在非易失性存储器介质122中可以保护数据不受功率故障,从而在从来自一个或多个第一/源擦除块的功率不足的恢复之后仍可以对数据进行编程。例如,为了提供更大的数据吞吐量、写入带宽等,非易失性存储器控制器124、126和/或缓冲器模块302可以使用交错的编程顺序。对于具有每单元三个页面或比特的TLC存储器单元,缓冲器模块302可以指令非易失性存储器设备120按交错顺序编程(例如第一存储器单元集合的较低页面、第二存储器单元集合的较低页面、第三存储器单元集合的较低页面、第一存储器单元集合的中间页面、第二存储器单元集合的中间页面、第三存储器单元集合的中间页面、第一存储器单元集合的较高页面、第二存储器单元集合的较高页面、以及第三存储器单元集合的较高页面等)。在该实施例中,缓冲器模块302可以一次缓冲若干页面。

在特定实施例中,非易失性存储器介质122可以要求在对任何页面进行编程之前获知用于存储器单元集合的数据的所有三个页面,或同时对所有三个页面进行编程。如果并未对所有三个页面进行编程,则若重启事件产生,那么甚至所编程的页面可能丢失。出于至少这些原因,在特定实施例中,缓冲器模块302可以缓冲或存储用于存储单元集合的数据的所有三个页面。在另一实施例中,为了提供上述交错,缓冲器模块302可以缓冲九个页面,三个用于三个不同存储单元集合(例如在一个擦除块内、在一个或多个不同的擦除块内等的页面或字线)中的每一个。

缓冲器模块302在各个实施例中可以将数据缓冲或存储在SLC存储单元中以用于拷贝到TLC存储单元,将数据缓冲或存储在SLC存储单元中以用于拷贝到MLC存储单元,将数据缓冲或存储在MLC存储单元中以用于拷贝到TLC存储单元,或另外将数据缓冲或存储在第一存储单元集合中以用于拷贝到具有比第一存储单元集合更多的每单元存储状态或比特的第二存储单元集合。例如,缓冲器模块302可以将数据缓冲或存储在三个SLC擦除块中,以用于拷贝或移动回到TLC擦除块等。缓冲器模块302可以从读取流水线241接收用于缓冲或存储的数据,如以上关于图2所描述的那样,这样可以对数据进行分组,通过纠错码(ECC)对数据进行编码,压缩数据,和/或对数据执行其它操作。

在一个实施例中,刷新模块304有选择地刷新来自第一非易失性存储单元集合(例如SLC存储单元)的数据,以用于将数据拷贝或移动回到第二非易失性存储单元集合(例如TLC存储单元)。如在此所使用的那样,刷新数据包括:对数据执行一个或多个操作或处理。在一个实施例中,用于数据的ECC刷新包括:执行ECC解码,以纠正关于数据的错误;以及执行用于数据的ECC重新编码,以保护数据不受随后错误。例如,刷新模块304在特定实施例中可以使用ECC解码器,以对数据进行解码,和/或纠正数据中的一个或多个数据错误,并且可以使用ECC编码器,以对数据进行重新编码。在另一实施例中,刷新模块304可以通过对数据进行重新分组(例如,移除头或其它元数据并且以新的头或其它元数据来重新格式化数据)来对数据进行刷新和/或重新编码。对数据进行重新分组在特定实施例中可以为刷新模块304提供用于从正被刷新的页面或擦除块移除无效数据(例如已经通过对同一逻辑地址的写入请求所盖写的数据)的机会。

并非刷新回拷模块306如下所述拷贝回到更密集的存储单元(例如从SLC存储单元到TLC存储单元)的所有数据,刷新模块304可以有选择地刷新数据,基于用于数据的一个或多个属性(例如数据因素)等而确定是否刷新数据。以下关于图3B的数据因素模块322更详细地描述确定数据因素或数据的其它属性。在一个实施例中,与数据关联的属性(例如数据因素)包括与所存储的数据、存储数据的非易失性存储单元等关联的特征或方面。数据因素或其它与数据关联的属性在特定实施例中可以包括关联数据具有一个或多个数据错误的似然率(likelihood)的指示符。数据因素或与数据关联的其它的属性在各个实施例中可以包括以下项中的一个或多个:用于数据的服务质量(QoS)等级或其它优先级、用于数据的错误率(例如原始误比特率(RBER)或不可纠正的误比特率(UBER))、用于数据的年龄(例如保留时间或自从写入以来的时间)、用于第一/源非易失性存储单元集合的编程/擦除周期计数、用于数据的写入频率、用于数据的读取频率、关于第一/源非易失性存储单元集合所满足的容量阈值等。例如,刷新模块304可以仅刷新具有特定错误率的数据、具有特定服务质量等级的数据、比特定年龄或保留时间阈值更旧的数据等,允许回拷模块306在数据不被刷新的情况下回拷或移动其它数据。

在一个实施例中,刷新模块304和/或数据因素模块322可以基于数据因素或仅用于数据子集(例如单个ECC码字或片块(chunk)等)的其它属性并且对读取数据子集的结果进行的因素分解(factoring)以确定一个或多个数据因素或其它属性,来确定是否刷新第一源存储单元集合(例如逻辑或物理SLC页面、逻辑或物理SLC擦除块)。例如,在刷新模块304被配置为在页面接页面(page by page)的基础上刷新数据、并且物理或逻辑页面包括多个ECC码字或片块的实施例中,刷新模块304和/或数据因素模块322可以对一个或多个ECC码字的子集进行读取和/或解码,并且基于读取ECC码字的子集的结果(例如错误率、错误的数量、随数据所存储的元数据所指示的服务质量或优先级等级等)而确定是否刷新整个物理或逻辑页面。例如,如果刷新模块304和/或数据因素模块322确定来自逻辑或物理页面的样本ECC码字没有任何错误,没有任何不可纠正的错误,具有不满足预先确定的错误阈值的多个错误等,则刷新模块304可以确定回拷模块306可以在不刷新数据的情况下在内部将逻辑或物理页面拷贝或移动回到第二目的地存储单元集合(例如TLC存储单元的页面)。

在回拷和/或IDM操作包括拷贝或移动多个页面(例如,将三个SLC页面拷贝到与相同TLC存储单元集合关联的三个TLC页面)的实施例中,刷新模块304可以在不刷新一个或多个其它页面的情况下刷新回拷和/或IDM操作的一个或多个页面。刷新模块304在特定实施例中可以与回拷模块306协作,以访问用于刷新的数据、用于确定是否刷新数据、等等。在一个实施例中,回拷模块306如下所述可以将数据从第一存储单元集合(例如SLC页面和/或擦除块)读取、加载、移动和/或拷贝到易失性存储器(例如易失性读取缓冲器、易失性编程缓冲器、缓存缓冲器等),并且刷新模块304可以读取或另外访问来自易失性缓冲器的数据,以确定是否刷新数据、以刷新数据、等等。

对于刷新模块304刷新的数据,在特定实施例中,刷新模块304可以将刷新后的重新编码后的数据移动、拷贝或加载回到易失性存储器中,从而回拷模块306可以使用刷新后的重新编码后的数据完成回拷和/或IDM操作。如以下关于图4更详细地描述的那样,单个非易失性存储器元件123(例如非易失性存储器介质122的芯片、裸芯、裸芯平面、封装、组、通道等)可以包括具有对不同数量的比特进行编码的不同数量的存储状态或停留态的非易失性存储单元(例如一个或多个SLC擦除块、一个或多个MLC擦除块、一个或多个TLC擦除块等)以及易失性存储器(例如易失性读取缓冲器、易失性编程缓冲器、缓存缓冲器等)。

在特定实施例中,刷新模块304并未刷新的数据在整个回拷或IDM过程(例如从第一存储单元集合拷贝或移动到易失性存储器并且从易失性存储器拷贝或移动到第二存储单元集合)期间被保留在同一非易失性存储器元件123内。刷新模块304刷新和/或重新编码的数据在一个实施例中可以通过总线127、125、离开关联的非易失性存储器元件123去往非易失性存储器介质控制器126、SML 130、主机易失性存储器112等,以用于刷新。

在特定实施例中,一旦刷新模块304已经对数据进行刷新和/或重新编码,刷新模块304就可以将数据移动、拷贝或加载回到关联非易失性存储器元件123的易失性存储器中,从而回拷和/或IDM操作可以完成。在另一实施例中,至少对于特定类型的刷新或重新编码(例如,对数据进行重新分组),刷新模块304可以将数据放置在写入流水线240中,写入流水线240可以对数据进行刷新、编码和/或分组。并非对于使用写入流水线240所刷新的数据完成对同一非易失性存储器元件123的回拷和/或IDM操作,在特定实施例中,刷新模块304和/或写入流水线240可以将刷新后的数据写入到新的位置(例如有序的基于日志的写入结构的附接点等)。在特定实施例中,新的位置可以包括具有与读取数据(例如回到SLC存储单元的缓冲器)的第一源存储单元集合相同的存储状态的数量、相同的每单元的比特的数量等的存储单元,在此数据可以稍后经受随后回拷和/或IDM操作等。

通过有选择地确定是否刷新源页面、源擦除块等(例如SLC存储单元)的数据用于回拷和/或IDM操作,而非简单地刷新所有数据,刷新模块304可以减少在回拷和/或IDM操作期间非易失性存储器元件123的拷贝丢掉的数据量。刷新模块304可以由此在仍刷新其它数据以纠正特定数据错误的同时避免刷新特定数据的性能惩罚。以此方式,刷新模块304可以通过优化地确定正移动(例如从SLC存储单元到TLC存储单元)的页面是否应在被移动(例如到TLC页面)之前被错误校验和/或纠正来优化用于非易失性存储器介质122的裸芯上缓冲式回拷和/或IDM操作。如上所述,对ECC码字进行解码、纠正一个或多个错误以及对码字进行重新编码的处理可以称为刷新、数据刷新、编码刷新、重新编码、数据重新编码等。

虽然在特定实施例中,非易失性存储器介质122的制造商可以推荐刷新回拷和/或IDM操作的所有数据,但刷新模块304可以有选择地确定是否刷新数据,仅刷新回拷模块306拷贝回去的数据子集。在一个实施例中,刷新模块304可以不刷新任何回拷数据,从而所有或实质上所有数据在回拷和/或IDM操作期间保留在非易失性存储器元件123上。

在特定实施例中,回拷模块306可以使用预先确定的、预先定义的或已知的选择处理,以基于源存储单元和/或目的地存储单元的地址或另外标识符而确定移动或回拷数据的第二目的地存储单元集合中的位置。如果目的地存储单元集合(例如TLC擦除块等)是不可使用的(例如,疲劳,恶劣,受损耗,具有错误,或另外不可用于存储数据),则回拷模块306可能不能够将数据移动或拷贝到目的地。取代改动预先定义的目的地选择处理,在特定实施例中,刷新模块304可以被配置为:对于目的地为不可使用或不可用的存储单元集合的数据执行刷新操作,从而该数据写入到不同的位置。例如,刷新模块304除了通过ECC编码器对数据进行重新编码之外还可以执行扩展的刷新操作(例如对数据进行重新分组),并且可以使用写入流水线240等将数据写入到不同的位置(例如有序的基于日志的写入结构的附接点)。以此方式,可以对于回拷和/或IDM操作而跳过不可使用的或不可用的目的地,而不修改或改动预先定义的目的地选择处理。

如以下关于图8A和图8B所描述的那样,在特定实施例中,非易失性存储器元件123可以在物理上或在逻辑上被布置在阵列中,并且阵列可以组织为n个裸芯宽的行(例如,n=29列=28个数据裸芯+1个奇偶校验裸芯等),其中,行中的物理擦除块被管理作为逻辑擦除块等。在一个实施例中,可以使用自适应闪回(flashback)来管理阵列的行,意味着随着行中的物理擦除块出故障,取代重新映射另一擦除块以保持相同的行宽度,可以减少行大小,并且可以使用更短的行。

然而,如果用于回拷和/或IDM操作的目的地逻辑擦除块具有比源逻辑擦除块更短的行以及更少的物理擦除块,则回拷和/或IDM操作对于每个物理擦除块无法完成。因此,为了在阵列的两个行之间使用回拷和/或IDM,每个行中的可使用的物理擦除块的数量应至少对于每个回拷和/或IDM操作是相同的。换言之,目的地行(例如TLC行)应如源行(例如SLC行)一样宽、或宽于源行(例如SLC行)。如果目的地行并非如源行一样宽,则在特定实施例中,回拷模块306可以关于数据选择不同的目的地(例如从为此目的而又设置的预留擦除块的池选取的替选擦除块)。在另一实施例中,如果目的地行并非如源行一样宽,则回拷模块306可以与刷新模块304协作,以刷新数据(例如,重新编码,重新分组等),并且使用写入流水线240等将源数据重定向到不同的位置(例如有序的基于日志的写入结构的附接点),取代完成回拷和/或IDM操作。

在一个实施例中,刷新模块304可以包括非易失性存储器介质控制器126中的逻辑(例如读取流水线241、写入流水线240等)。在特定实施例中,刷新模块304可以确定是否在控制器126内进行编码刷新,并且如果刷新模块304确定执行编码刷新,则刷新模块304可以在控制器126内将重新编码后的数据解码为一个或多个新的ECC码字。在另一实施例中,在刷新期间,刷新模块304刷新的数据可以保留在控制器126中,而不通过总线125发送或拷贝到主机计算设备110的主易失性存储器112。

刷新模块304可以被配置为:基于可用的信息(例如与数据关联的属性、数据因素)等而快速地并且高效地确定是否将要刷新数据。在特定实施例中,如以下关于数据因素模块322所描述的那样,刷新模块304和/或数据因素模块322可以使用与存储单元集合关联的预先确定的模型或表征,以主动确定是否刷新存储单元的数据,而不必读取或另外处理来自存储单元的数据。在另一实施例中,如下所述,数据因素模块322可以扫描非易失性存储器介质122作为后台处理,以确定一个或多个数据因素或用于数据的其它属性,确定刷新模块304是否刷新数据等,从而刷新模块304可以简单地查找或引用数据因素和/或响应于用于数据的回拷和/或IDM操作而确定是否刷新数据。

在特定实施例中,刷新模块304可以被配置为:与刷新过程关联地对于数据执行垃圾收集或存储容量恢复操作,如以下关于存储容量恢复模块318更详细地描述的那样。例如,刷新模块304和/或存储容量恢复模块318可以从关于回拷和/或IDM操作而被刷新的数据移除无效数据(例如已经通过对于相同地址的随后写入操作所替换或盖写的数据)。以此方式,刷新模块304可以减少数据的大小,有效地缩减或压缩数据。刷新模块304在一个实施例中可以与写入流水线240协作,如上所述,以在已经移除无效部分之后对数据进行重新编码和/或重新分组。

在另一实施例中,在回拷模块306已经将数据拷贝回到或另外将数据存储在第二存储单元集合中之后,至少对于数据子集,回拷模块306可以从第一存储单元集合(例如SLC存储单元)移动、回拷所有数据,并且刷新模块304可以执行刷新操作。刷新模块304可以基于一个或多个数据因素或其它与数据关联的属性而确定刷新哪些数据,如上所述。在特定实施例中,刷新模块304可以基于回拷和/或IDM操作自身的方面或属性(例如用于回拷和/或IDM操作的编程时间(例如Tprog)、在回拷和/或IDM操作期间检测到的错误等)而确定刷新哪些数据。在一些实施例中,在回拷和/或IDM过程之后执行刷新操作可以允许比在回拷和/或IDM过程之前或在此期间执行回拷和/或IDM操作更多的错误,但可以允许刷新产生在低压力、错峰时间期间,可以允许回拷和/或IDM过程产生得更快,等等。

在特定实施例中,刷新模块304可以与回拷模块306协作,以确定用于刷新后的数据的目的地。例如,如上所述,如果目的地存储单元集合(例如TLC存储单元)超过或另外满足损耗和/或错误阈值(例如,超过预先定义的编程/擦除周期计数、错误率等),则刷新模块304和/或回拷模块306可以确定数据应另外写入到不同的位置(例如有序的、基于日志的写入结构的附接点(例如,不同的SLC存储单元集合))、可替换的存储单元集合(例如不同的TLC存储单元集合)等,取代初始确定的目的地。在一个实施例中,如果刷新模块304确定回拷和/或IDM操作的数据处于低需求(例如,用于数据的读取计数无法满足预先定义的频率阈值),则刷新模块304可以与存储容量恢复模块318协作,以移除无效数据,并且可以将数据重定向到有序的基于日志的写入结构的附接点。

在一个实施例中,回拷模块306被配置为:确定何时和/或是否对于数据执行回拷和/或IDM操作(例如,来自SLC存储单元集合的数据是否待存储在TLC存储单元集合中)。回拷模块306可以有选择地(例如在SLC存储单元与TLC存储单元之间)执行回拷和/或IDM操作,从而并非所有数据从源存储单元集合移动或拷贝并且存储在目的地存储单元集合中。在源缓冲存储单元集合具有对于比目的地存储单元集合更少的数量的比特进行编码或表示的更少的存储状态的实施例中,源存储单元集合可以具有比目的地存储单元集合更快的读取时间、更快的写入/编程时间、更少的单元泄漏或其它更好的更鲁棒的访问特性,而非存储容量。回拷模块306可以基于一个或多个数据因素或其它与数据关联的属性而确定是否存储、移动或回拷数据。

回拷模块306在一个实施例中在缓冲器模块302将数据存储在第一/源存储单元集合中之后将数据存储在第二/目的地存储单元集合中。在特定实施例中,回拷模块306被配置为:使得数据存储在第一/源非易失性存储单元集合与回拷模块306从第一/源非易失性存储单元集合到第二/目的地非易失性存储单元集合(例如从SLC单元到TLC单元)拷贝、移动或另外存储数据之间的时间量最小化。例如,在一个实施例中,回拷模块306可以响应于数据正写入到第一/源单元集合而立即或实质上立即确定是否将数据拷贝回到第二/目的地单元集合,并且响应于做出确定而立即或实质上立即将数据存储在第二/目的地单元集合中。

通过确定是否将数据从第一/源单元集合拷贝或移动回到第二/目的地单元集合并且尽快拷贝或移动数据,在一个实施例中,回拷模块306可以减少或防止在被拷贝或移动到第二/目的地单元集合之前可能产生在数据中的错误。在另一实施例中,通过尽快对数据执行回拷和/或IDM操作,由于数据中的错误的数量可以比如果数据存储在第一/源单元集合中达较长时间段更少,因此回拷模块306可以减少刷新模块304执行刷新操作的数据量。

尽快对于数据执行回拷和/或IDM操作在特定实施例中不会不利地影响或减慢存储客户机116的操作或将数据写入到非易失性存储器设备120的主机计算设备110的其它处理。例如,在一个实施例中,由于功率切断模块320即使功率故障或中断产生也可以确保数据存储在第一/源存储单元集合中,如下所述,因此写入流水线240、功率切断模块320、非易失性存储器介质控制器126、SML 130等可以响应于将数据存储在非易失性存储器介质控制器126、非易失性存储器介质122等的写入缓冲器中而对请求存储客户机116确认完成对数据的写入请求。在另一实施例中,写入流水线240、功率切断模块320、非易失性存储器介质控制器126、SML 130等可以响应于将数据存储在第一/源存储单元集合中而对请求存储客户机116确认完成对数据的写入请求。在任一实施例中,可以对请求存储客户机116确认存储数据,然后回拷模块306执行回拷和/或IDM操作,从而执行操作可以对请求存储客户机116的操作或关联写入请求的完成很少有或没有影响。

以下关于图3B的数据因素模块322更详细地描述确定数据因素或其它与数据关联的属性。在一个实施例中,数据的属性(例如数据因素)包括与所存储的数据、存储数据的非易失性存储单元等关联的特征或方面。数据因素或其它与数据关联的属性在特定实施例中可以包括关联数据具有一个或多个数据错误的似然率的指示符。数据因素或另外与数据关联的属性在各个实施例中可以包括以下项中的一个或多个:用于数据的服务质量等级或另外优先级、用于数据的错误率(例如原始误比特率(RBER)或不可纠正的误比特率(UBER))、用于数据的年龄(例如保留时间或自从写入以来的时间)、用于存储单元的编程/擦除周期计数、用于数据的写入频率、用于数据的读取频率、关于存储单元所满足的容量阈值、用于存储单元的编程操作的持续时间等。例如,回拷模块306可以仅移动或回拷具有特定服务质量等级的数据、比特定年龄或保留时间更旧的数据等,允许其它数据保留在第一/源非易失性存储单元集合(例如SLC存储单元)中,而不被回拷。

第一/源存储单元集合(例如SLC存储单元)可以具有比第二/目的地存储单元集合更高的可靠性、更快的访问时间(例如读取时间和/或写入/编程时间)。将一些数据留在第一/源存储单元集合中可以允许回拷模块306实现用于数据的特定服务质量、可靠性和/或性能要求。在特定实施例中,回拷模块306可以验证第二/目的地非易失性存储单元集合中的数据的存储和/或数据完整性。回拷模块306可以通过以下操作来验证数据的存储和/或数据完整性:从第二/目的地非易失性存储单元集合读取数据,从非易失性存储器介质122接收完成指示符或确认,对数据执行纠错,对读取的数据与已知的或期待的数据进行比较等。在一个实施例中,回拷模块306可以响应于触发等而延迟验证第二/目的地非易失性存储单元集合中的数据的存储,直到更晚时间。例如,回拷模块306可以响应于对数据的读取请求、第二/目的地非易失性存储单元集合的后台扫描、(例如关于第一/源非易失性存储单元集合、非易失性存储器介质122、非易失性存储器设备120)所满足的存储容量阈值、用于第一/源非易失性存储单元集合的存储容量恢复事件等而验证数据的存储和/或数据完整性。通过延迟数据的验证,在特定实施例中,回拷模块306可以在出于不同目的(例如,为了满足对数据的读取请求等)已经从第二/目的地非易失性存储单元集合读取数据之后验证数据。

回拷模块306在一个实施例中可以使用非易失性存储器元件123的内部数据传送命令(例如回拷和/或IDM命令),以在内部将数据从第一/源非易失性存储器单元集合拷贝或移动到第二/目的地非易失性存储器单元集合。内部数据传送命令(例如回拷和/或IDM命令)可以在非易失性存储器元件123内在内部对于位于单个非易失性存储器元件123(例如集成电路芯片、裸芯和/或裸芯平面)内的数据执行回拷和/或IDM操作,而没有数据离开非易失性存储器元件123、非易失性存储器元件123(例如芯片、裸芯每个裸芯平面)的封装等。例如,非易失性存储器介质122可以支持回拷命令、IDM命令或另一内部数据传送命令,并且回拷模块306可以对源和目的地提供每个回拷和/或IDM命令。作为内部数据传送操作的部分,回拷模块306和/或非易失性存储器介质122可以将数据从第一/源存储单元集合(例如SLC存储单元)移动、拷贝或加载到关联非易失性存储器元件123的易失性存储器(例如页面缓冲器)中,其中,刷新模块304可以有选择地刷新数据等。回拷模块306可以然后在内部将数据从易失性存储器拷贝或移动到第二目的地存储单元集合。在特定实施例中,回拷模块306可以将多个页面或其它数据集合加载到易失性存储器中(例如,将数据的三个页面从用于回拷的SLC页面加载到TLC页面)。

图3B描述管理模块150的另一实施例。管理模块150可以实质上与以上关于图1和图3A所描述的管理模块150相似。在所描述的实施例中,管理模块150包括缓冲器模块302、刷新模块304和回拷模块306,并且还包括中止模块308、读取模块310、读取电压模块312、单元容量模块314、逻辑到物理映射模块316、存储容量恢复模块318、功率切断模块320和数据因素模块322。

在一个实施例中,中止模块308被配置为:基于一个或多个数据因素等而响应于回拷模块306确定将关联数据拷贝或移动到第二/目的地存储单元集合来中止、停止、取消和/或中断回拷模块306的处理中回拷和/或IDM过程。在特定实施例中,中止模块308被配置为:响应于功率切断模块320确定或检测到用于非易失性存储器设备120的功率等级已经无法满足功率阈值而中止、停止、取消和/或中断回拷模块306的处理中回拷和/或IDM过程。响应于功率故障而中止处理中回拷和/或IDM过程在特定实施例中可以节约功率,允许其它命令或过程完成。

中止模块308在一个实施例中可以通过将重置命令发放到与回拷和/或IDM过程关联的非易失性存储器元件123来中止回拷和/或IDM过程。在另一实施例中,中止模块308可以通过以下操作来中止回拷和/或IDM过程:关于回拷和/或IDM过程忽略和/或盖写加载到易失性存储器(例如易失性页面缓冲器)中的数据,开始下一回拷和/或IDM过程等。

在一个实施例中,读取模块310被配置为:服务于来自非易失性存储器介质122的读取请求。读取模块310可以与上述读取流水线241协作和/或集成。归因于回拷和/或IDM处理,可能有相同数据的多个拷贝存在于非易失性存储器介质122中的次数。读取模块310在特定实施例中可以偏好用每单元更少的存储状态和比特在存储单元中存储的数据。例如,如果数据存储在SLC存储单元和TLC存储单元二者中,则读取模块310可以被配置为:服务对来自SLC存储单元的数据的读取请求。

如以下关于存储容量恢复模块318所描述的那样,已经拷回的数据可以在回拷和/或IDM操作之后仍存储在第一/源存储单元集合中,直到需要存储容量等。例如,存储容量恢复模块318可以在第一/源存储单元集合中留下频繁访问的数据、具有特定服务质量或另外优先级等级的数据等,并且恢复其它存储单元集合(例如高QoS或另外优先级数据的具有较低百分比或比率的频繁访问的数据的擦除块)的存储容量,从而读取模块310只要可能就可以服务于来自第一/源存储单元集合的读取请求。读取模块310可以继续服务于来自第一/源存储单元集合的读取请求,直到恢复存储容量并且擦除关联数据。响应于存储容量恢复模块318等从第一/源存储单元集合(例如SLC存储单元)擦除数据,读取模块310可以服务于对来自第二/目的地存储单元集合(例如TLC存储单元)的数据的读取请求。在回拷模块306确定对于数据不执行回拷和/或IDM操作以在内部将数据拷贝或移动回到第二/目的地存储单元集合(例如TLC存储单元)的实施例中,读取模块310可以继续服务于对来自第一/源存储单元集合的数据的读取请求。

在特定实施例中,非易失性存储器介质122可以被配置为:依赖于通过对下一相邻页面或字线进行编程所产生的编程干扰影响,以完成第一页面或字线的编程。制造商可以指定页面或字线编程顺序。页面或字线编程顺序可以要求以第一页面对WLn的较低页面进行编程,并且以第二页面对WLn+1的较低页面进行编程,而且以第三页面对WLn的中间页面进行编程。此外,制造商页面编程顺序可以要求以第四页面对WLn+1的中间页面进行编程,并且以第五页面对WLn的较高页面进行编程。以此方式,字线渐进地用于按改进单元中的数据完整性的顺序来存储数据的页面。

非易失性存储器介质122的制造商可以推荐或要求至少对于TLC存储单元、在可以读取第一页面或字线之前对下一相邻页面或字线进行编程。例如,制造商可以指定直到对字线WLn+1进行编程之后才读取字线WLn。这种约束可能延迟对此前编程的页面(例如在WLn上)的读取请求的服务。如在此所使用的那样,关于页面或字线,“相邻”或“下一”在一个实施例中包括所指定的编程顺序或寻址顺序内的数字上和/或逻辑上连续的页面或字线。在其它实施例中,“相邻”或“下一”可以指代非易失性存储器元件123内的物理上或时间上毗邻或相接的页面或字线。

读取模块310在特定实施例中可以被配置为:甚至在对下一或相邻页面或字线进行编程前面或之前服务于对页面或字线的读取请求(例如,在对WLn+1进行编程之前,服务于对WLn的读取请求)。读取模块310在一个实施例中被配置为:仅在响应于读取模块310确定数据中的错误是可使用用于数据的ECC编码等纠正的而在对下一相邻页面或字线进行编程之前服务于对页面或字线的读取请求。如果不能纠正数据中的错误,则读取模块310可以使得读取请求失败,返回错误,将通知或另外消息等发送到请求存储客户机(requesting storage client)116。在另一实施例中,即使数据中的错误是不可纠正的,读取模块310也可以返回读取请求的数据。在特定实施例中,甚至在下一相邻页面或字线已经得以写入/编程之前服务于对数据的读取请求可以通过使得数据可访问得更快而增加性能。

在一个实施例中,读取电压模块312管理并且调整用于具有用于对于比第二/目的地存储单元更少的比特进行编码的更少的存储状态的非易失性存储器介质122的第一/源存储单元(例如用于缓冲用于TLC存储单元的数据的SLC存储单元)的一个或多个读取电压阈值。归因于干扰影响(例如读取干扰或编程干扰),归因于存储单元上的损耗、归因于高编程/擦除计数,归因于制造商瑕疵等,所存储的用于存储单元的读取电压电平可能随着时间而漂移或改变。如以上关于刷新模块304所描述的那样,随着数据拷贝回到第二/目的地存储单元(例如TLC存储单元),第一/源存储单元(例如SLC存储单元)中所引入的错误可能被放大,要求刷新模块304刷新正回拷的数据以纠正错误,增加处理和带宽开销。

为了减少刷新模块304刷新以用于回拷和/或IDM操作的数据量和/或延长数据可以在回拷之前存储在第一/源存储单元中的时间量,在特定实施例中,读取电压模块312可以调整一个或多个读取电压阈值,以抵消或补偿所存储的电压电平的改变,以减少错误。读取电压模块312在一个实施例中基于用于关联存储单元集合的一个或多个存储介质特性而确定用于存储单元集合的读取电压阈值。例如,读取电压模块312可以基于用于存储单元集合的一个或多个存储介质特性而以开环(open-loop)方式主动确定用于存储单元集合的一个或多个读取电压阈值,而不从存储单元集合读取数据作为对确定的反馈。

如在此所使用的那样,“开环”确定包括基于确定结果的反馈或另一指示符或测度而进行的确定。例如,在特定实施例中,读取电压模块312可以通过开环方式基于一个或多个存储介质特性而确定所调整的或更新后的用于存储单元集合的读取电压阈值,而不首先从单元集合读取数据作为反馈。可以基于存储介质设备的此前研究和开发测试(例如设备表征)而确定存储介质特性。“闭环”确定如在此所使用的那样包括至少部分地基于确定结果的某种反馈或另外指示符或测度而进行或更新的确定。例如,读取电压模块312在一个实施例中可以基于从存储单元读回的数据(例如关于数据的错误率、该数据与已知数据的比较等)而迭代地更新用于存储单元集合的读取电压阈值。在特定实施例中,读取电压模块312可以初始地基于用于存储单元集合的一个或多个存储介质特性等而以开环方式确定用于存储单元集合的读取电压阈值,并且可以随后通过从存储单元集合读取数据并且基于错误率或其它反馈而更新或另外调整读取电压阈值来以闭环方式精细调谐或调整读取电压阈值。

在一个实施例中,读取电压模块312关于用于非易失性存储器介质122的存储单元集合的停留态或存储状态等来引用或另外确定用于非易失性存储器介质122的存储单元集合的一个或多个介质特性。存储单元集合可以包括单个存储区域(例如物理页面、逻辑页面、物理擦除块、逻辑擦除块、字线、ECC片块/码字、芯片、裸芯、裸芯中的平面等),或可以包括多个存储区域的集合。在特定实施例中,非易失性存储器介质122的存储单元的不同存储状态、停留态、编码数字(例如LSB、MSB)可以具有不同介质特性,并且读取电压模块312可以对于不同的停留态/存储状态等分离地监控或另外确定不同的介质特性。

读取电压模块312自身可以确定一个或多个介质特性,可以从另一模块接收介质特性,可以从介质特性库检索介质特性等。介质特性是与非易失性存储器介质122的属性关联的统计、启发或其它描述符。介质特性可以包括或有关于用于非易失性存储器设备120和/或用于非易失性存储器介质122的制作、模型、制造商、产品版本等;用于存储单元集合的属性或统计;非易失性存储器设备120和/或非易失性存储器介质122的环境条件或使用情况;和/或用于非易失性存储器介质122的属性的另一统计、启发或其它描述符。

用于存储单元集合的介质特性影响或通告确定用于存储单元集合的读取电压阈值。在一个实施例中,介质特性包括用于存储单元集合的编程/擦除周期计数。在另一实施例中,介质特性包括用于存储单元集合的读取计数。介质特性在另一实施例中包括自从对于存储单元集合的此前写入以来的保留时间。在附加实施例中,介质特性包括关于存储单元集合的温度。介质特性在特定实施例中包括关于存储单元集合的使用情况。在另一实施例中,介质特性包括关于存储单元集合的错误统计(例如UBER、RBER等)。在另一实施例中,介质特性可以包括用于存储单元集合的此前或历史读取电压阈值、用于其它存储单元集合的读取电压阈值或介质特性等。

在特定实施例中,读取电压模块312管理介质特性的收集和/或保存。读取电压模块312可以将介质特性保存在介质特性库中和/或从介质特性库检索介质特性。在特定实施例中,读取电压模块312引用、确定和/或管理用于若干不同存储单元集合的介质特性(例如非易失性存储器设备120的每个存储区域或存储分区)。介质区域可以包括擦除块(逻辑或物理)、页面(逻辑或物理)、ECC片块/码字、页面内的分区、页面集合、裸芯、裸芯中的平面、芯片等。

在一个实施例中,读取电压模块312可以与以上关于图3B所描述的数据因素模块322相似,可以随之工作,和/或可以与之集成。例如,介质特性可以包括以上关于数据因素模块322所描述的统计中的一个或多个(例如关于非易失性存储器设备120的温度、关于非易失性存储器设备120的错误率(例如UBER、RBER等)、用于非易失性存储器设备120的编程/擦除周期计数、用于非易失性存储器设备120的存储请求延时(例如平均、最大或另外存储请求执行延时)、非易失性存储器设备120的年龄和/或其它统计或特性)。读取电压模块312在特定实施例中可以从一个或多个传感器、从其它模块或元件(例如ECC解码器等)直接或间接地接收输入。

在一个实施例中,读取电压模块312基于用于存储单元集合的一个或多个介质特性而确定用于存储单元集合的读取电压阈值。读取电压模块312确定为之读取电压阈值的存储单元集合可以包括擦除块(逻辑或物理)、页面(逻辑或物理)、ECC片块/码字、页面内的分区、页面集合、裸芯、裸芯中的平面、芯片等。读取电压模块312可以基于对应介质特性而确定用于不同存储单元集合、不同页面集合、存储单元的不同停留态/存储状态等的不同读取电压阈值。读取电压模块312在特定实施例中随着对初始或默认设置的调整或更新而在非易失性存储器设备120的操作或运行时期间动态地确定读取电压阈值。

如上所述,读取电压阈值是可通过接口的方式修改以区分所存储的值(例如二进制一和零)的存储单元集合的参数。读取电压模块312可以确定读取电压阈值作为绝对数据值、作为对数据值的偏移或调整、或作为读取电压模块312可以配置存储单元集合的另一参数。

读取电压模块312可以通过以下操作将读取电压阈值基于一个或多个介质特性:将一个或多个介质特性录入到公式、数学模型、查找表(LUT)、矩阵等中;对一个或多个介质特性执行预先定义的变换或操作;或另外引用或操控一个或多个介质特性以确定读取电压阈值。读取电压阈值公式、数学模型、LUT、矩阵等可以基于实验数据(例如测试数据、历史数据等)。设计工程师等在一个实施例中可以测试具有各种介质特性的存储单元集合(例如来自各个制造商的非易失性存储器介质等),并且确定用于具有各种介质特性的存储单元的优化读取电压阈值。例如,公式、数学模型、LUT、矩阵等可以指示来自制造商X的非易失性存储器介质122趋于在1,000个编程/擦除周期之后具有单元值的Y量的自然漂移,从而读取阈值可以增加达Z伏特以进行补偿,等等。

在其它实施例中,读取电压模块312可以在非易失性存储器设备120的操作期间动态地确定读取电压阈值;用于定义读取电压阈值的公式、数学模型、LUT、矩阵、变换等;对读取电压阈值的调整;等,如以上关于调整模块408所描述的那样。例如,读取电压模块312可以初始地基于默认值、基于试错法等确定用于各种介质特性的读取电压阈值,并且可以基于错误率(例如RBER、UBER)、编程/擦除计数等的改变而自主地对读取电压阈值的有效性进行相关,以确定公式、数学模型、LUT、矩阵、变换等,以用于确定后续读取电压阈值和/或读取电压阈值调整。

在一个实施例中,用于存储单元集合的介质特性包括温度。关于存储单元集合的温度可以作用于存储单元集合上的一个或多个其它介质特性的影响的速度。例如,在较高温度,关于与错误统计有关的介质特性(例如原始误比特率(RBER)和数据保留时间)的改变速率可能增加,并且对读取电压阈值的特定调整可以缓解该影响。在特定实施例中,读取电压模块312可以按温度来调整或缩放读取电压阈值、介质特性等,以补偿温度的影响,使得用于温度的数据正常化。关于存储单元集合的温度可以是平均温度、遍及滑动窗口的温度、当前温度、用于非易失性存储器设备120的温度或与一个或多个存储单元集合关联的另一温度测度。

一个或多个介质特性在一个实施例中对读取电压模块312指示关于读取电压阈值的趋势、优化等,并且读取电压模块312确定用于满足该趋势或优化的读取电压阈值。例如,编程/擦除周期计数、读取计数、UBER、RBER或另一介质特性的量值可以指示读取电压或另外读取电压阈值已经漂移的量,并且读取电压模块312可以基于介质特性而主动确定读取电压阈值,而无需来自存储单元的直接反馈(例如读取、读取重试等)。

在一个实施例中,读取电压模块312将用于非易失性存储器介质122的不同存储区域或存储分区的存储单元集合(例如擦除块(逻辑或物理)、页面(逻辑或物理)、ECC片块/码字、页面内的分区、页面集合、停留态/存储状态、裸芯、裸芯中的平面、芯片等)的读取电压阈值保存在读取电压阈值库中。通过确定并且管理用于不同存储区域、用于不同停留态/存储状态等的分离的介质特性和/或读取电压阈值,读取电压模块312在特定实施例中可以单独地定制用于每个存储区域或停留态/存储状态的读取电压阈值,由此减少错误,延长非易失性存储器介质122的寿命等等。

存储单元的不同停留态/存储状态可以具有不同介质特性。例如,特定停留态/存储状态(例如L0状态)可以更易被编程干扰、读取干扰或其它干扰。停留态或存储状态——如在此所使用的那样——是与特定数据值集合关联的读取等级(例如用于闪速介质的读取电压电平、用于PCM介质的读取电阻率等级等)的范围。读取阈值(例如读取电压阈值、读取电阻率阈值等)可以分离停留态或存储状态。以下关于图9A描述停留态或存储状态的一个示例。

在特定实施例中,读取电压模块312确定和/或调整仅用于从第一/源存储单元集合(例如SLC存储单元)到第二/目的地存储单元集合(例如TLC存储单元)的回拷和/或IDM操作的读取电压阈值,以减少错误,减少数据刷新量等。在这些实施例中,读取电压模块312可以响应于来自存储客户机116的读取请求等而不确定或调整用于标准、工作量读取操作的读取电压阈值,而可以使用默认读取电压阈值等。在另一实施例中,读取电压模块312可以仅对于具有预先定义的介质特性的存储单元(例如页面、擦除块或其它存储单元集合)使用所调整的读取电压阈值,而对于其它存储单元使用默认读取电压阈值。在一个实施例中,读取电压模块312所使用的主动读取电压阈值模型也可以指示刷新模块304在回拷和/或IDM操作期间将要刷新的一个或多个页面、擦除块或其它存储单元集合。

虽然SLC存储单元在特定实施例中至少与MLC或TLC存储单元相比可以看作相对鲁棒并且可靠的,但朝着SLC存储单元的寿命的结束,对于以下关于单元容量模块314所描述的已经用作MLC和/或TLC存储单元的SLC存储单元等,可能快速地引入数据错误,留下在没有错误的情况下用来移动或回拷数据的有限窗口。通过调整用于第一/源存储单元集合的一个或多个读取电压阈值,读取电压模块312可以在仍使得用于对第二/目的地存储单元集合的移动或回拷的刷新量最小化的同时延长该窗口,允许数据存储在第一/源存储单元集合中达较长时间段。

在一个实施例中,单元容量模块314被配置为:通过调整SLC存储单元或擦除块、MLC存储单元或擦除块、TLC存储单元或擦除块等的比率来动态地调整用于非易失性存储器介质122的每单元所存储的比特的数量。在特定实施例中,可以由制造商通过SLC擦除块和TLC擦除块的预先确定的比率(例如1.2%SLC擦除块和98.8%TLC擦除块)或另一预先确定的比率来预先配置非易失性存储器介质122。然而,制造商的预先确定的比率可能对于非易失性存储器设备120的使用情况并不是优化的。此外,制造商的SLC和TLC擦除块的分配典型地是静态的,其中,相同存储单元关于设备120的寿命而被设置为SLC存储单元或TLC存储单元。

在一个实施例中,单元容量模块314确定不同类型的存储单元和/或擦除块(例如SLC、MLC和/或TLC)的分配,以使得非易失性存储器介质122的寿命最大化。在另一实施例中,单元容量模块314可以确定不同类型的存储单元和/或擦除块(例如SLC、MLC和/或TLC)的分配,以使得非易失性存储器介质122的性能最大化。在另一实施例中,单元容量模块314可以确定不同类型的存储单元和/或擦除块(例如SLC、MLC和/或TLC)的分配,以使得非易失性存储器介质122的存储容量最大化。单元容量模块314在特定实施例中可以提供允许存储客户机116或其它用户确定不同类型的存储单元和/或擦除块(例如SLC、MLC和/或TLC)的分配的用户接口。

在特定实施例中,单元容量模块314基于非易失性存储器设备120的一个或多个数据因素或其它用于数据的属性而确定不同类型的存储单元和/或擦除块(例如SLC、MLC和/或TLC)的分配。例如,在一个实施例中,单元容量模块314可以随着用于数据的服务质量或另外优先级等级增加而相对于TLC模式下的擦除块的数量增加SLC模式下的擦除块的数量,可以随着用于数据的服务质量或另外优先级等级降低而相对于TLC模式下的擦除块的数量降低SLC模式下的擦除块的数量,从而具有较高服务质量或另外优先级等级的数据可以存储在SLC存储单元中。以此方式,在特定实施例中,单元容量模块314可以使用不同类型的存储单元和/或擦除块来提供有区别的服务质量(QoS)等级(例如,将高QoS等级数据存储在SLC单元中,将中等QoS等级数据存储在MLC单元中,将低QoS等级数据存储在TLC单元中),并且可以在各个模式下调整或改变存储单元的分配,以容纳数据的性质(例如SLC模式、MLC模式、TLC模式)。

在一个实施例中,单元容量模块314确定单元容量模块314贯穿非易失性存储器介质122的寿命使用的不同类型的存储单元和/或擦除块(例如SLC和TLC)的静态分配。在其它实施例中,单元容量模块314可以随着非易失性存储器老化(例如,基于编程/擦除计数、以时间为单位的年龄等)、随着用于非易失性存储器设备120的使用情况改变(例如缓存设备、备份设备、服务器设备、高写入负载设备、高读取负载设备、低写入负载设备、低读取负载设备等)来动态地更新或调整不同类型的存储单元和/或擦除块(例如SLC和TLC)的分配。

在特定实施例中,单元容量模块314可以随着时间动态地改变、轮换或损耗存储单元集合(例如擦除块)被配置作为SLC存储单元、MLC存储单元、TLC存储单元的层式和/或存储单元的其它层式。在一个实施例中,单元容量模块314可以实质上均匀地分配哪些存储单元集合(例如擦除块)被配置有不同层式或数量的每单元比特、存储单元被分配有不同层式(例如SLC、MLC、TLC)的损耗层式划分。例如,对于具有SLC和TLC存储单元的裸芯上缓冲式非易失性存储器介质122,单元容量模块314可以随着关于存储容量恢复等而选择擦除块来实质上均匀地轮换哪些擦除块被配置作为SLC并且哪些作为TLC,从而每个擦除块在作为SLC存储的使用中花费与在作为TLC存储的使用中实质上相同的时间。在另一实施例中,单元容量模块314可以选择具有比单元容量模块314可以对于较高数量的每单元比特(例如TLC)而选择的其它擦除块更高的错误率、更高的编程/擦除计数等的用于较低数量的每单元比特(例如SLC)的擦除块或其它存储单元集合。例如,单元容量模块314可以分配单元模式,从而可使用的寿命(例如时间量)对于每个存储单元集合实质上相等,从而不同的存储单元集合同时或近乎同时地损耗掉。

在一个实施例中,非易失性存储器介质122可以支持用于设置每单元比特的数量(例如SLC模式、MLC模式和/或TLC模式)的操作或命令(例如SET FEATURE命令等)。在另一实施例中,单元容量模块314可以通过与读取电压模块312等协作来添加或调整一个或多个读取电压阈值而在没有操作或命令的情况下设置每单元比特的数量(例如SLC模式、MLC模式和/或TLC模式)。例如,即使非易失性存储器介质122不支持或提供MLC模式,单元容量模块314和/或读取电压模块312也可以在逻辑上将读取电压阈值添加到SLC模式,或在逻辑上从TLC模式移除(例如,忽略、缩减、重叠)读取电压阈值,以在虚拟MLC模式下操作存储单元集合等。

在特定实施例中,单元容量模块314可以对于每个分配而设置用于存储单元集合的模式一次,非易失性存储器介质122使用所设置的模式,直到其改变。在另一实施例中,单元容量模块314可以通过每个命令或操作来设置模式。单元容量模块314在一个实施例中可以保存指示在不同的模式下分配哪些擦除块或其它存储单元集合的元数据,从而即使非易失性存储器设备120重置或断电,单元容量模块314也可以使得分配一致。

在特定实施例中,单元容量模块314与数据因素模块322、存储容量恢复模块318等协作可以通过每个存储容量恢复事件来监控或跟踪用于每个擦除块的一个或多个统计(例如错误率(例如RBER、UBER)、程序/擦除计数、其花费于对擦除块进行擦除的T-erase时间、其花费于对擦除块进行编程的T-prog时间和/或另一存储介质特性、数据因素和/或与数据关联的属性)作为非易失性存储器介质122的周期性后台扫描等。T-erase、T-prog等可以随着存储单元老化而随着时间增加,并且可以指示存储单元的可靠性。存储容量恢复模块318在一个示例中可以随着其在存储容量恢复操作期间擦除块而测量用于擦除块的T-erase时间。单元容量模块314可以将最损耗的存储单元(例如擦除块)分配给SLC模式并且将其余分配为TLC模式等。一旦TLC擦除块的可靠性落入可靠性阈值之下,在一个实施例中,单元容量模块314就可以将TLC擦除块重新分配给具有更少的每存储单元的状态和比特的MLC模式、SLC模式等。

在一个实施例中,逻辑到物理映射模块316被配置为:保存将逻辑标识符(例如LBA)映射为非易失性存储器介质122中的物理位置的逻辑到物理映射结构。以下关于图6描述逻辑到物理映射结构的一个实施例。如上所述,归因于回拷和/或IDM过程,在特定实施例中,相同的有效数据可能存在于非易失性存储器介质122内的两个位置处。不同的位置可以处于不同类型的存储单元(例如SLC存储单元和TLC存储单元)中。

逻辑到物理映射模块316在一个实施例中与回拷模块306协作,以在回拷和/或IDM操作之前、期间以及之后跟踪用于非易失性存储器介质122中的数据的位置。逻辑到物理映射模块316在特定实施例中可以在保存对于同一数据的多个映射、对第一/源存储单元集合中的位置的主级/之前映射以及对第二/目的地存储单元集合中的位置的次级/之后映射等。在特定实施例中,逻辑到物理映射模块316可以将对于同一逻辑地址或逻辑地址范围的多个映射存储或保存在逻辑到物理映射结构内的相同项内(例如对SLC位置的主级映射以及对TLC位置的次级映射)。在其它实施例中,逻辑到物理映射模块316可以将对于同一逻辑地址或逻辑地址范围的不同映射存储或保存在逻辑到物理映射结构中的不同项中。逻辑到物理映射模块316可以与读取模块310协作,从而甚至在数据已经拷贝回到可以具有比第一/源存储单元集合更慢的访问时间、更低的可靠性等的第二/目的地存储单元集合之后,也使用主级映射(对SLC存储单元中的数据的映射)来服务于读取请求。

逻辑到物理映射模块316在一个实施例中可以被配置为:响应于将数据拷贝或移动到第二/目的地非易失性存储单元集合而更新、移除或替换对于第一/源非易失性存储单元集合中的数据的位置的逻辑到物理映射,而无需验证。在另一实施例中,逻辑到物理映射模块316可以与回拷模块306协作,以通过以下操作而在更新、移除或替换对第一/源非易失性存储单元集合的映射之前验证第二/目的地非易失性存储单元集合中的数据的存储和/或数据完整性:从第二/目的地非易失性存储单元集合读取数据,从非易失性存储器介质122接收完成指示符或确认,对数据执行纠错等,如上所述。逻辑到物理映射模块316可以与存储容量恢复模块318协作,以一旦逻辑到物理映射模块316已经移除对第一/源存储单元集合的映射就擦除并且恢复第一/源存储单元集合的存储容量。

逻辑到物理映射模块316在特定实施例中可以延迟更新、移除或替换对第一/源非易失性存储单元集合的映射,直到满足预先定义的触发。例如,逻辑到物理映射模块316可以等待直到存储容量恢复模块318已经关于存储容量恢复操作而选择第一/源存储单元集合,直到非易失性存储器设备120的可用的未使用的容量已经落入容量阈值之下,直到关于第一/源存储单元集合的数据的读取速率落入频繁访问阈值之下等。通过延迟移除对第一/源存储单元集合的数据的映射,在一个实施例中,逻辑到物理映射模块316允许从第一/源存储单元集合访问数据达尽可能长,优化关于数据的性能。

在特定实施例中,逻辑到物理映射模块316与下述功率切断模块320协作,以确保在用于非易失性存储器设备120的功率等级落入阈值之下(例如关闭、功率切断、重新启动、重新引导、功率损耗等)之后逻辑到物理映射结构、逻辑到物理映射以及关联数据是可访问并且可恢复的。例如,在一个实施例中,逻辑到物理映射模块316仅在可以从第二/目的地存储单元(例如TLC擦除块的一个或多个页面)读取和/或另外验证回拷和/或IDM操作的数据之后并且在已经从第一/源存储单元(例如SLC擦除块的一个或多个页面)擦除数据之前更新逻辑到物理映射。以此方式,因为在特定实施例中直到第二/目的地擦除块已经得以确认或验证为完全填充的才擦除第一/源擦除块(例如SLC擦除块),所以逻辑到物理映射模块316可以与功率切断模块320协作,以防止归因于被部分填充的擦除块导致的数据丢失。

如上所述,回拷模块306可以优化回拷和/或IDM处理。逻辑到物理映射模块316可以优化回拷和/或IDM操作中所涉及的对页面或擦除块中的数据的访问。例如,如果正以高频率访问页面上的数据,则回拷模块306与中止模块308等协作可以中止或推迟回拷和/或IDM操作,并且将数据留在可以提供比第二/目的地存储单元集合(例如TLC存储单元)更快的读取的第一/源存储单元集合(例如SLC存储单元)中。如上所述,在特定实施例中,如果正以高频率访问页面上的数据,则回拷模块306可以允许回拷和/或IDM操作继续,但可以修改回拷和/或IDM操作,从而数据的拷贝保留在第一/源存储单元集合中,至少直到高频率的访问下降等。

在一个实施例中,逻辑到物理映射模块316可以从数据因素模块322等将指示一个或多个数据因素或其它用于关联数据的属性的元数据存储在逻辑到物理映射结构中,允许刷新模块304确定是否刷新回拷和/或IDM操作的数据,允许回拷模块306确定是否对于数据执行回拷和/或IDM操作等。例如,逻辑到物理映射模块316可以在每个逻辑到物理映射项中包括指示用于关联的数据的服务质量或另外优先级、用于数据的访问频率或频率计数(例如读取计数、写入计数等)等的元数据。如上所述,如果第一/源存储单元集合(例如SLC擦除块)的数据具有高QoS等级,则回拷模块306可以确定不使用回拷和/或IDM操作来移动数据,将数据拷贝到第二/目的地存储单元集合(例如TLC存储单元),但还让数据至少临时保留在第一/源存储单元集合中,以提供较高的读取性能。

在一个实施例中,存储容量恢复模块318与逻辑到物理映射模块316和/或回拷模块306协作,以在回拷和/或IDM操作已经对于第一/源存储单元集合(例如SLC擦除块)成功地完成之后擦除并且恢复第一/源存储单元集合的存储容量,这可以称为垃圾收集。存储容量恢复模块318在一个实施例中可以被配置为:通过以下操作在回拷和/或IDM操作之后响应于验证第二/目的地非易失性存储单元集合中的数据的存储而恢复第一/源非易失性存储单元集合的存储容量:读取数据,对该数据与第一/源存储单元集合中的数据进行比较,从非易失性存储器介质122接收确认等。存储容量恢复模块318在一个实施例中可以与服务于来自第二/目的地存储单元集合等的读取请求的读取模块310协作而响应于对数据的读取请求来验证数据的存储,从而由于已经读取数据,因此验证添加很少的开销或不添加开销。

在特定实施例中,在回拷模块306已经从擦除块拷贝数据之后,存储容量恢复模块318可以延迟恢复用于第一/源存储单元集合的一个或多个擦除块的存储容量。存储容量恢复模块318在特定实施例中可以基于一个或多个数据因素或其它用于擦除块的数据的属性而有选择地确定何时对于回拷模块306已经执行回拷和/或IDM操作的第一/源擦除块执行存储容量恢复操作。例如,存储容量恢复模块318可以选择具有最低服务质量或优先级等级、具有最低读取频率、具有最高写入频率(例如,很可能因后续写入而无效)、具有最长保留时间、具有最高错误率(例如RBER、UBER)等的用于存储容量恢复的源(例如SLC)存储单元的擦除块。在一个实施例中,存储容量恢复模块318可以等待恢复第一/源存储单元集合(例如SLC擦除块)的存储容量,直到关于存储单元的数据的访问率(例如读取速率)无法满足预先定义的访问阈值。特定实施例中,存储容量恢复模块318在可以等待恢复第一/源存储单元集合的存储容量,直到满足用于非易失性存储器设备120的存储容量阈值(例如,设备120是填满的,接近填满的等,并且存储容量恢复是需要的)。在另一实施例中,存储容量恢复模块318可以基于多个数据因素或其它属性(例如加权平均)的组合、缩放的数据因素或属性的组合、判决树等而选择用于存储容量恢复操作的擦除块。

在一个实施例中,功率切断模块320在关于非易失性存储器介质122、非易失性存储器设备120、计算设备110等的功率切断事件之后管理数据的一致性。存储器设备120在特定实施例中包括写入流水线240和读取流水线241,如上所述。随着数据从存储客户机116传送到非易失性存储器介质122中,写入流水线240可以对数据执行特定操作。这些操作可以包括例如纠错码(ECC)生成、加密、压缩等。读取流水线241可以对正读出非易失性存储器介质122并且发送到存储客户机116的数据执行相似的以及势必相反的操作。

存储器设备120在特定实施例中还包括次级电源,其在倘若导致存储器设备120未通过主级功率连接125接收到足够的电功率的完全或部分功率中断时提供功率。功率中断是不期望地使得存储器设备120停止通过主级功率连接125接收功率或产生存储器设备120通过主级功率连接125接收到的功率的显著减少的任何事件。在一个实施例中,功率的显著减少包括功率落入预先定义的阈值之下。在另一实施例中,预先定义的阈值可以被选择为允许来自主级功率连接125的功率的等级的正常波动。例如,用于存储客户机116和存储器设备120所处的建筑的功率可能出故障或停止。用户动作(例如,不正确地关断将功率提供给存储器设备120的计算设备110)、主级功率连接125中的故障或主级电源中的故障可以使得存储器设备120停止接收功率。各种类型的功率中断可以对于存储器设备120产生不期望的功率损耗。

次级电源可以包括一个或多个电池、一个或多个电容器、电容器组、对电源的分离的连接等。在一个实施例中,次级电源在功率中断或来自主级功率连接125的功率的另外减少期间将功率提供给存储器设备120达至少功率保持时间。在另一实施例中,次级电源可以将功率保持时间提供得足够长,以使得存储器设备120能够将并未处于非易失性存储器介质122中的特定数据冲刷到非易失性存储器介质122中。

在一个实施例中,次级电源是在来自主级功率连接125的功率的部分或完全丢失时自动地将功率提供给存储器设备120的电路的部分。相似地,存储器设备120可以被配置为:在部分或完全功率损耗期间从次级电源接受或接收电功率。例如,在一个实施例中,次级电源可以与主级功率连接125并行地电耦合到存储器设备120,从而主级功率连接125在正常操作期间对次级电源进行充电,并且次级电源响应于功率损耗而自动地将功率提供给存储器设备120。在一个实施例中,存储器设备120还包括次级电源与主级功率连接125之间的二极管或其它反相电流保护,以防止来自次级电源的电流到达主级功率连接125。在另一实施例中,功率切断模块320可以响应于来自主级功率连接125的减少的功率而使用开关等来启用次级电源或将其连接到存储器设备120。

此外,在特定实施例中,写入流水线240内的一些数据可能因为功率中断而被破坏。功率中断可以包括功率故障以及所提供的功率等级的不期望的改变。功率等级的不期望的改变可能冒风险而放置处于存储器设备120中但尚未处于非易失性存储器介质122中的数据。在功率切断模块320甚至意识到(或被通知)已经存在功率的中断之前,数据破坏可能开始产生。

在特定实施例中,功率切断模块320实现为非易失性存储器控制器124、非易失性存储器介质控制器126等的部分。功率切断模块320可以是例如硬件驱动器(例如SML 130)或实现于用于存储器设备120的固件(例如非易失性存储器介质控制器126)中。在其它实施例中,功率切断模块320可以部分地实现于驱动器中并且部分地实现于非易失性存储器介质控制器126等中。在一个实施例中,功率切断模块320的至少一部分实现于存储器设备120上作为非易失性存储器介质控制器126等的部分,从而即使存储客户机116不再运作,功率切断模块320也使用来自次级电源的功率在部分或完全功率损耗期间继续运作。

在一个实施例中,功率切断模块320响应于来自主级功率连接125的功率的减少而在存储器设备120中发起功率损耗模式。在功率损耗模式期间,功率切断模块320在一个实施例中将尚未存储在非易失性存储器介质122中的处于存储器设备120中的数据冲刷到非易失性存储器介质122中。在特定实施例中,功率切断模块320可以将尚未存储在非易失性存储器介质122中的已经得以确认并且处于存储器设备120中的数据冲刷到非易失性存储器介质122中。在特定实施例中,功率切断模块320可以调整对存储器设备120执行数据操作,以确保必要操作在次级电源损耗足够的功率之前完成,以在次级电源提供的功率保持时间期间完成必要操作。

在特定实施例中,必要操作包括用于已经确认为已经存储的数据的这些操作(例如所确认的写入操作)。在其它实施例中,必要操作包括用于已经确认为已经存储并且擦除的数据的这些操作。在其它实施例中,必要操作包括用于已经确认为已经存储、读取并且擦除的数据的这些操作。功率切断模块320也可以终止非必要操作,以确保这些非必要操作不会不必要地消耗功率和/或不阻止必要操作执行;例如,功率切断模块320可以终止擦除操作、读取操作、未确认的写入操作等。

在一个实施例中,终止不必要操作保留来自次级电源的功率,允许次级电源提供功率保持时间。在另一实施例中,功率切断模块320在功率损耗模式期间静默或另外关断存储器设备120的一个或多个子组件的操作,以节省来自次级电源的功率。例如,在各个实施例中,功率切断模块320可以静默读取流水线241、读取直接存储器访问(DMA)引擎和/或与非必要操作关联的存储器设备120的其它子组件的操作。

功率切断模块320也可以负责确定功率中断破坏什么数据,防止破坏数据存储在非易失性存储器介质122中,并且确保存储客户机116意识到被破坏的数据实际上绝不存储在存储器设备120上。这样防止源于功率中断的存储器设备120中的数据的破坏。

在一个实施例中,由于回拷和/或IDM操作的数据已经存储在第一/源存储单元集合中,因此功率切断模块320将处理中回拷和/或IDM操作看作非必要的,并且与中止模块308协作,以在功率损耗模式等期间响应于功率等级不足以满足阈值而中止处理中回拷和/或IDM操作。此外,对特定类型的存储单元(例如TLC存储单元)进行编程可能需要对整个擦除块进行编程,或另外被部分填充的擦除块可能是不可使用的或被破坏的,势必导致数据丢失。功率切断模块320可以与逻辑到物理映射模块316协作,以确保所中止的回拷和/或IDM操作的数据在功率故障之后在第一/源存储单元集合保持可用,并且逻辑到物理映射结构不包含对拷贝回到被部分填充的擦除块的数据的任何映射。

功率切断模块320在一个实施例中可以与存储容量恢复模块318协作,以擦除并且恢复第二/目的地存储单元集合(例如TLC擦除块)的任何被部分填充的擦除块的存储容量。在特定实施例中,回拷模块306可以在从功率等级不足(failing)中恢复等之后重启任何所中止的回拷和/或IDM操作。为了促进从功率不足的恢复、被部分填充的擦除块等的擦除等,在特定实施例中,功率切断模块320可以与回拷模块306协作,以响应于回拷和/或IDM操作填充擦除块而将第二/目的地存储单元的擦除块(例如TLC擦除块)标记为填充的。在恢复期间,功率切断模块320和/或存储容量恢复模块318可以对于未标记为填充的第二/目的地存储单元的任何擦除块执行存储容量恢复操作。在另一实施例中,甚至在被部分填充的擦除块未得以标记的实施例中,功率切断模块320和/或存储容量恢复模块318也可以执行非易失性存储器介质122的恢复扫描,以定位第二/目的地存储单元的被部分填充的擦除块。

在一个实施例中,数据因素模块322被配置为:确定用于具有比第二/目的地非易失性存储单元集合(例如TLC擦除块)更低的每单元所表示的比特的数量的第一/源非易失性存储单元集合(例如SLC擦除块)的数据的一个或多个数据因素或其它属性。在特定实施例中,数据因素模块322可以保存指示数据因素模块322已经确定的数据因素或其它属性的元数据。数据因素模块322可以与逻辑到物理映射模块316协作,以将指示一个或多个数据因素或其它与数据关联的属性的元数据存储在逻辑到物理映射结构中,可以将一个或多个数据因素或其它具有关联数据的属性的指示符存储在非易失性存储器介质122中,和/或可以保存指示一个或多个数据因素或其它属性的元数据。如上所述,在各个实施例中,刷新模块304可以基于来自数据因素模块322的一个或多个数据因素或其它属性而确定刷新哪些数据,回拷模块306可以基于来自数据因素模块322的一个或多个数据因素或其它属性而确定移动或回拷哪些数据,存储容量恢复模块318可以基于来自数据因素模块322的一个或多个数据因素或其它属性而选择用于存储容量恢复或垃圾收集的擦除块等。

在一个实施例中,与数据关联的属性(例如数据因素)包括与所存储的数据、存储数据的非易失性存储单元等关联的特征或方面或与这些特征或方面关联的指示符或标志。与数据关联的属性(例如数据因素)在特定实施例中可以包括关联数据具有一个或多个数据错误的似然率的指示符。与数据关联的属性(例如数据因素)在特定实施例中可以包括关于关联数据的数据错误的数量的指示符。与数据关联的属性(例如数据因素)在各个实施例中可以包括以下项中的一个或多个:用于数据的服务质量等级或另外优先级、用于数据的错误率(例如原始误比特率(RBER)或不可纠正的误比特率(UBER))、用于数据的年龄(例如保留时间或自从写入以来的时间)、用于第一/源非易失性存储单元集合的编程/擦除周期计数、用于数据的写入频率、用于数据的读取频率、关于第一/源非易失性存储单元集合所满足的容量阈值等。

在特定实施例中,数据因素或另外与数据关联的属性可以包括指示数据满足数据因素阈值(例如服务质量或另外优先级阈值、错误率阈值、年龄阈值、程序/擦除计数阈值、写入频率阈值、读取频率阈值、容量阈值等)的与数据关联的标志或另外指示符。例如,数据因素模块322可以响应于对数据的存储请求、响应于数据的后台扫描、响应于对于存储数据的擦除块或其它存储单元集合的存储容量恢复事件等而周期性地设置或存储用于数据的标志或另外指示符。在一个实施例中,刷新模块304可以基于数据因素模块322已经对于数据设置的标志或另外指示符(例如数据因素)而确定是否刷新数据。回拷模块306在特定实施例中可以基于数据因素模块322已经对于数据设置的标志或其它指示符(例如数据因素)而确定是否将数据存储在第二/目的地存储单元集合中。如下所述,数据因素模块322可以将用于一个或多个数据因素或其它属性的元数据(例如用于数据因素的一个或多个标志或其它指示符)存储或保存在逻辑到物理映射结构的项中,随数据存储或保存在非易失性存储器介质122中,存储或保存在分离的数据结构中,等等。

数据因素模块322可以确定、监控和/或跟踪用于数据的一个或多个粒度(例如每ECC码字或片块、每逻辑或物理页面、每逻辑或物理擦除块、逻辑到物理映射结构中的LBA的每范围等)的数据因素或其它属性。数据因素模块322在一个实施例中操作后台处理,其扫描非易失性存储器介质122以确定数据因素或其它属性,读取数据并且对其进行处理以确定数据因素或属性。在另一实施例中,数据因素模块322可以确定用于存储容量恢复模块318恢复的擦除块的数据因素或属性。在另一实施例中,随着缓冲器模块302和/或读取模块310接收并且满足存储请求(例如对数据的读取请求和写入请求),数据因素模块322可以确定数据因素或属性。在特定实施例中,数据因素模块322可以使用与存储单元集合关联的预先确定的模型或表征,以周期性地确定数据因素或属性,而不必读取或另外处理来自存储单元的数据。

图4描述存储器设备120中的三层式存储器单元402的一个表示。三层式存储器单元402是具有2^n个可能的状态的单元,其中,n等于每单元的比特数量。例如,三层式存储器单元402(例如图4所示的三层式存储器单元402)可以存储三个比特的信息,并且相应地具有八个可能的状态或停留态,如以下更详细地讨论的那样。在其它实施例中,存储器单元402可以存储两个比特的信息,并且相应地具有八个可能的状态或停留态;可以存储四个比特的信息,并且相应地具有三十二个可能的状态或停留态;依此类推。

三层式存储器单元402至少存储最高有效比特(MSB)、中间有效比特(CSB)和最低有效比特(LSB)。在特定实施例中,如图4所示,MSB、CSB和LSB通过同一物理三层式存储器单元402的部分可以分配给介质122的不同页面。在特定实施例中,多个三层式存储器单元402被组织在非易失性存储器介质122(例如比如NAND闪速)上作为页面或页面元组。在包括多个三层式存储器单元402的特定非易失性存储器介质122中,页面是可以写入到介质122的最小单元。在这些实施例中,三层式存储器单元402可以与上述包括较高页面404、中间页面405和较低页面406的页面元组关联。较高页面404与MSB关联,中间页面405与CSB关联,较低页面406与LSB关联。以此方式,较高页面404、中间页面405和较低页面406可以与非易失性存储器介质122的同一公共存储器单元402的集合关联,或由其存储。

因此,同一三层式存储器单元402中的MSB、CSB和LSB可以在非易失性存储器设备120中具有不同的地址。在特定实施例中,较高页面404包括多个三层式存储器单元402的MSB,中间页面405包括多个三层式存储器单元402的CSB,较低页面406包括同一三层式存储器单元402的LSB。定向到较高页面404的写入可以因此仅在关联三层式存储器单元402的MSB中产生改变,而定向到较低页面406的写入可以仅在关联三层式存储器单元402的LSB中产生改变,依此类推到对中间页面405的写入。对于三层式存储器单元402(例如NAND闪存),由于擦除操作将三层式存储器单元402置于第一逻辑值状态下,并且写入操作或编程操作仅将页面的特定三层式存储器单元402改变为相反的逻辑值状态,因此定向到较高页面404、中间页面405或较低页面406的写入可以仅对特定关联三层式存储器单元402产生改变。相似地,读取存储在较高页面404中的数据导致读取多个三层式存储器单元402的MSB,读取存储在中间页面405中的数据导致读取多个三层式存储器单元402的CSB,读取存储在较低页面406中的数据导致读取多个三层式存储器单元402的LSB。

在特定实施例中,响应于对已经存储在非易失性存储器设备120上的数据的请求而读取数据比特。该请求可以称为第一读取操作。在特定实施例中,第一读取操作定向到较低页面406,从而从三层式存储器单元402仅返回LSB。例如,存储客户机116(例如文件系统软件应用、操作系统应用、数据库管理系统软件应用、客户机计算机、客户机设备等)可以将数据存储在存储设备120上。在该示例中,当存储客户机116发送写入请求时,数据独占地(exclusively)写入到较低页面406和/或中间页面405。因此,各个三层式存储器单元402中的LSB和/或CSB改变,但MSB不因写入而改变。相似地,在该示例中,当存储客户机116读取数据时,该读取被定向或寻址到较低页面406和/或中间页面405,并且仅LSB和/或CSB被读取。

图5描述非易失性存储器元件123的一个实施例。在所描述的实施例中,非易失性存储器元件123包括一个或多个SLC擦除块410a-n、一个或多个TLC擦除块412a-n、SLC页面缓冲器414、TLC较低页面缓冲器416a、TLC中间页面缓冲器416b、TLC较高页面缓冲器416c以及缓存缓冲器418。

在一个实施例中,缓冲模块302将写入请求的数据写入到SLC页面缓冲器414,数据从该SLC页面缓冲器414被编程到一个或多个SLC擦除块410a-n。随着缓冲模块302用数据来填充SLC擦除块410a-c,回拷模块306基于来自数据因素模块322的一个或多个数据因素或用于数据的属性等而确定是否在内部将数据拷贝或移动回到TLC擦除块412。如果回拷模块306确定在内部将数据从SLC擦除块410a-c拷贝或移动回到TLC擦除块412,则回拷模块306可以页面接页面地将数据加载到TLC页面缓冲器416中。

刷新模块304可以确定是否对回拷模块306已经加载到TLC页面缓冲器416中的数据、数据的部分等执行刷新操作,并且可以将刷新后的数据返回到TLC页面缓冲器416,将未刷新的数据留在TLC页面缓冲器416中,等等。在特定实施例中,回拷模块306从TLC页面缓冲器器416a-c一次将三个页面从SLC擦除块410a-n写入或编程到TLC擦除块412。一旦回拷和/或IDM操作已经完成,该数据就可以被保留在SLC擦除块410a-n中以用于由读取模块310使用,直到存储容量恢复模块318在稍后时间确定擦该除数据。

图6描述映射结构1000、逻辑地址空间1120和有序的基于日志的仅附接写入结构1140的一个实施例。在一个实施例中,映射结构1000由非易失性存储器控制器124的逻辑到物理映射模块316保存,以将LBA或其它逻辑地址映射为非易失性存储器介质122上的物理位置。在所描述的实施例中,映射结构1000是具有若干项的B树。在所描述的实施例中,映射结构1000的节点包括对非易失性存储器设备120中的物理位置的直接引用。在其它实施例中,映射结构1000可以包括映射为反向(reverse)映射中的项的链接等。在各个实施例中,可以要么用、要么不用反向映射来使用映射结构1000。在其它实施例中,映射结构1000中的引用可以包括字母数字字符、十六进制字符、指针、链接等。

在所描述的实施例中,映射结构1000包括多个节点。在所描述的实施例中,每个节点能够存储两个项。在其它实施例中,每个节点可以有能力存储更大数量的项,每个等级处的项的数量可以随着映射结构1000随使用等增长或缩减而改变。

在所描述的实施例中,每个项将非易失性存储器设备120的LBA的可变长度范围映射为用于非易失性存储器设备120的存储介质122中的物理位置。此外,在所描述的实施例中,虽然LBA的可变长度范围由开始地址和结束地址表示,但在其它实施例中,LBA的可变长度范围可以由开始地址和长度等表示。在另一实施例中,取代存储LBA的可变长度范围,映射结构1000可以在项中存储单个LBA或其它逻辑地址作为用于数据值和/或用于关联元数据的开始地址。

在一个实施例中,大写字母“A”至“M”表示存储LBA的对应范围的数据的非易失性存储器设备120的物理存储介质122中的逻辑或物理擦除块。在其它实施例中,大写字母可以表示非易失性存储器设备120的其它物理地址或位置。在所描述的实施例中,大写字母“A”至“M”还被描述在表示非易失性存储器设备120的物理存储介质122的基于日志的写入结构1140中。

在所描述的实施例中,映射结构1000中的成员表示非易失性存储器设备120中的成员(或存储)。在另一实施例中,项可以还包括非易失性存储器设备120是否存储与LBA的范围内的逻辑块对应的数据、反向映射的数据和/或其它数据的指示符。

在所描述的实施例中,根节点1008包括具有LBA的非毗邻范围的项1102、1104。“空洞(hole)”存在于根节点的两个项1102、1104之间的LBA“208”处。在一个实施例中,“空洞”指示非易失性存储器设备120不存储与对应于“空洞”的一个或多个LBA对应的数据。在一个实施例中,非易失性存储器设备120支持具有LBA的多个毗邻和/或非毗邻范围(即它们中包括一个或多个“空洞”的范围)的块I/O请求(读取、写入、修整等)。在一个实施例中,“空洞”可以是具有LBA的两个或更多个非毗邻范围的单个块I/O的结果。在另一实施例中,“空洞”可以是具有界定“空洞”的LBA范围的若干不同块I/O请求的结果。

在所描述的实施例中,LBA的相似的“空洞”或非毗邻范围存在于节点1014的项1106、1108之间、节点1014的左子节点的项1110、1112之间、节点1018的项1114、1116之间以及节点1118的各项之间。在一个实施例中,“空洞”也可以存在于父节点和子节点中的各项之间。例如,在所描述的实施例中,LBA的“空洞”“060-071”存在于节点1014的左项1106与节点1014的左子节点的右项1112之间。

LBA处的“空洞”“003”在所描述的实施例也可以见于逻辑地址“003”1130处的非易失性存储器设备120的逻辑地址空间1120中。LBA“003”1140处的散列标记表示空白位置或非易失性存储器设备120不存储数据的位置。逻辑地址空间1120中的LBA 1134处的“空洞”归因于具有非毗邻范围的一个或多个块I/O请求、对于非易失性存储器设备120的PTRIM或其它解除分配(deallocation)命令等。

在所描述的实施例中,非易失性存储器设备120的逻辑地址空间1120大于非易失性存储器设备120的物理存储容量和对应存储设备地址空间。在所描述的实施例中,非易失性存储器设备120具有开始于逻辑地址“0”1122并且延伸到逻辑地址“264-1”1126的64比特逻辑地址空间1120。因为存储设备地址空间仅与非易失性存储器设备120的逻辑地址空间1120的子集对应,所以剩余逻辑地址空间1120可以受限或用于非易失性存储器设备120的其它功能。

有序的、基于日志的仅附接写入结构1140在所描述的实施例中是非易失性存储器设备120的物理存储介质122的逻辑表示。在特定实施例中,非易失性存储器设备120有序地存储数据,在附接点1144处将数据附接到基于日志的写入结构1140。在另一实施例中,非易失性存储器设备120使用存储空间恢复处理(例如存储容量恢复模块318、或重用存储了解除分配的/未使用的逻辑块的非易失性存储介质122的其它存储空间恢复模块)。在所描述的实施例中,存储了解除分配的/未使用的逻辑块的非易失性存储介质被加入到用于非易失性存储器设备120的可用存储池1146。通过如上所述清理来自非易失性存储器设备120的无效数据,并且加入与清理回到可用存储池1146的数据对应的物理存储容量,在一个实施例中,基于日志的写入结构1140是周期性的、类似环的,并且具有理论上无限的容量。

在所描述的实施例中,附接点1144在圆形图案1142中绕着基于日志的仅附接写入结构1140而进展。在一个实施例中,圆形图案1142损耗平衡(wear balance)非易失性存储器介质122,增加非易失性存储器介质122的可使用的寿命。在所描述的实施例中,存储容量恢复模块318或其它存储容量恢复处理已经将若干块1148、1150、1152、1154标记为块1148、1150、1152、1154上的“X”标记所表示的无效。在一个实施例中,存储容量恢复模块318将恢复无效块1148、1150、1152、1154的物理存储容量,并且将所恢复的容量加入到可用存储池1146。在所描述的实施例中,块1148、1150、1152、1154的修改后的版本已经在读取、修改、写入操作等中被附接到基于日志的写入结构1140作为新的块1156、1158、1160、1162,允许原始块1148、1150、1152、1154被恢复。

图7描述用于将信息存储在包括一个或多个三层式存储器单元402的存储设备120中的系统的一个实施例。在一个实施例中,系统包括驱动器702、映射逻辑模块704、硬件控制器706和非易失性存储器介质122。在特定实施例中,这些组件是存储设备120的部分。

在一个实施例中,驱动器702从的一个或多个客户机116接收定向在非易失性存储器介质122处的写入请求和读取请求。所述请求典型地包括地址分量、例如页面地址、逻辑块地址、文件名和偏移等。在特定实施例中,较高页面404、中间页面405、较低页面406都不对存储客户机116暴露。反之,驱动器702将逻辑上毗邻的块地址、簇标识符、文件标识符或对象标识符(在此称为逻辑块地址)呈现给存储客户机116。

映射逻辑模块704可以是软件、硬件或其组合。在一个实施例中,物理介质页面地址是毗邻的,并且映射逻辑基于存储设备120的当前操作模式以及存储设备120的三层式存储器单元402的损耗状况而将物理介质页面地址映射为适当的较低页面406、中间页面405或较高页面404。在另一实施例中,驱动器702将逻辑块地址直接映射为用于物理较低页面406的适当地址。

映射逻辑模块704可以是软件、硬件或其组合。在一个实施例中,映射逻辑模块704将物理页面地址映射为存储设备120的页面元组。如上所述,页面元组可以包括与非易失性存储器介质122中的三层式存储器单元402的LSB关联的较低页面406、与三层式存储器单元402的CSB关联的中间页面405以及与三层式存储器单元402的MSB关联的较高页面404。

硬件控制器706从映射逻辑模块704接收写入和/或读取请求,并且执行它们,从而数据被存储在映射逻辑模块704所给出的指令所定向的非易失性存储器介质122上。硬件控制器706可以是硬件、固件、软件或其组合。在特定实施例中,硬件控制器706可以包括现场可编程门阵列(FPGA)、处理器或专用集成电路(ASIC)。

图8A是示出N数量的存储元件606的阵列600的一个实施例的示意性框图。在所描述的实施例中,ECC片块616包括来自若干存储元件606的数据612。在另一实施例中,还遍历若干存储元件606来存储用于ECC片块616的ECC校验比特。

在一个实施例中,存储元件606的阵列600包括N数量的存储元件606a、606b、606c、…606n。每个存储元件606可以包括设备、芯片、芯片的部分、裸芯、裸芯中的平面等。在所描述的实施例中,存储元件606a-n形成组602a。阵列600在一个实施例中包括若干组(bank)602a…602m。在所描述的实施例中,组602a-m包括若干通道604a、604b、604c、…、604n。在一个实施例中,遍历若干通道604a-n写入分组或数据集合,并且数据从每个通道604a-n得以分离地读取而且重组为分组。在另一实施例中,遍历若干通道604a-n写入ECC片块616、分组或数据集合,并且从所有通道604a-n并行读取数据。组602a上的一个读取操作可以读取整个ECC片块616、分组、或数据集合、或重组为整个ECC片块(chunk)616、分组(packet)、或数据集合的ECC片块616、分组或数据集合的一部分。在所描述的实施例中,每个通道在每个组602中包括至少一个存储元件606。

此外,在一个实施例中,每个存储元件606包括物理擦除块或“PEB”608。例如,存储元件一个606a包括PEB一个608a。物理擦除块典型地是位于一个裸芯、芯片或其它存储元件606上的擦除块。每个PEB 608包括m个物理页面610。例如,PEB 1 608a包括页面0 610a…页面m 614a。每个物理页面610a存储数据(“D0、D1、…、Dm”)612的一部分以及随数据612分布的ECC校验比特。如上所述,同一存储元件606、同一PEB 608等的若干页面610可以共享同一公共存储器单元集合。例如,同一公共TLC存储器单元集合的停留态或编程状态可以对三个页面610进行存储或编码。

在一个实施例中,PEB群组(group)(PEB 1 608a-PEB m 608m)形成逻辑擦除块(“LEB”)。LEB可以跨越N个存储元件600的阵列。在特定实施例中,LEB被改变大小为适合在组602a-m内,其中,一个PEB 608a-m来自每个存储元件606a-n等。在其它实施例中,LEB可以跨越不同的组602a-m,并且可以包括来自多个组602a-m的一个或多个PEB 608a-m。此外,在实施例中,逻辑页面(“LP”)跨越行中的多个物理页面610。在另一实施例中,逻辑页面跨越N个存储元件606a-n。

在一个实施例中,ECC是随数据分布的块码(block code)。此外,数据和ECC可以不与任何特定物理硬件边界对准。因此,通过ECC码进行的纠错并不取决于特定硬件配置。因此,ECC和对应数据可以形成ECC片块616,并且ECC片块616可以被划分而且被存储在N个存储元件606a-n中的一个或多个上。ECC片块616典型地跨越逻辑页面的多个物理页面610的至少一部分,其中,从数据612a、612b、…612m生成的数据和ECC遍历N个存储元件606a-n扩展。在一个实施例中,LP包括多个ECC片块616。物理页面610可以包含ECC片块616的一个或多个数据字节。ECC片块616可以跨越物理页面610内的多个行,并且物理页面610可以包括多个ECC片块616。

因为在所描述的实施例中用于ECC片块616的ECC校验比特分布遍历若干存储元件606a-n和通道604a-n,所以当数据错误归因于存储元件606a-n中的一个或多个的读取电压转变而产生时,ECC模块或解码器可能不能够使用预先定义的耐受数据模式的监督比特(audit bit)来确定哪些存储元件606具有可纠正的错误。在一个实施例中,管理模块150确定哪些存储元件606或通道604具有不匹配所期望的监督比特的数据比特,以促进ECC解码器等进行的纠错。

在一个实施例中,管理模块150和/或ECC模块或解码器确定数据集合具有错误或距已知值或期望值偏离的监督比特,并且管理模块150确定从哪个存储元件606读取数据集合。例如,在一个实施例中,阵列600可以具有24个通道604,并且在关于每读取操作总共192个字节的读取操作期间,可以并行地从单个组602的24个存储元件606读取8个字节。在一个实施例中,基于该信息,管理模块150可以基于192个字节内的8字节数据集合的位置而确定从哪个存储元件606读取数据集合。在一个实施例中,192个字节包括ECC片块616。

图8B是示出N个存储元件606的阵列650的一个实施例的示意性框图。阵列650在所描述的实施例中基本上与图10A的阵列600相似,但其中,ECC片块652包括单个存储元件606a中的数据612a,而非遍历若干存储元件606a-n。在一个实施例中,用于ECC片块652的ECC校验比特被存储在单个存储元件606a中。因为每个存储元件606a-n或通道604a-n具有分离的ECC校验比特,所以在一个实施例中,ECC模块或解码器使用分离的ECC校验比特以确定错误已经产生在哪些存储元件606a-n或通道604a-n中,并且倘若ECC校验比特归因于比单独使用ECC校验比特可纠正的更多错误而失败,那么可以与管理模块150协作以使用监督数据作为额外错误保护层。

图9A描述用于非易失性存储器设备120的TLC存储器单元的编程状态或停留态的图500。在所描述的实施例中,非易失性存储器设备120可以是例如TLC NAND闪速存储器设备,并且每个单元具有八个状态,但在其它实施例中可以使用各种类型的存储器以及每单元各种数量的状态。在所描述的实施例中,每个单元的数据编码物理值是读取电压电平(level)。读取电压电平如在此所使用的那样指代当读取电压阈值(“Vt”)施加到控制栅极时使得浮置栅极晶体管的通道导通的电压。通过改变确定读取电压电平的浮置栅极中的所存储的电荷的量而在每个单元中存储数据。

在所描述的实施例中,读取电压阈值510a-g将用于单元的可能读取电压电平的范围划分为状态L0、L1、L2、L3、L4、L5、L6和L7,其中,L0是已擦除的状态。在一些实施例中,已擦除的状态L0可以与负读取电压电平对应。如果用于单元的读取电压电平小于读取电压阈值510a,则单元处于L0状态下。如果用于单元的阈值电压Vt大于读取电压阈值510a、但小于读取电压阈值510b,则单元处于L1状态下,依此类推。响应于单元被编程(或擦除),可以通过将验证阈值电压520a-g施加到控制栅极并且感测单元是否导通以确定读取电压电平是大于还是小于所施加的验证阈值电压520a-g来确定单元的状态。通过关于读取电压阈值510a-g和验证阈值电压520a-g使用不同的电压阈值,读取电压模块312在各单元状态之间形成保护带(guard band)530a-g或分离距离(separation distance)。

虽然图500描述各状态L0-L7之间的单元的均匀分布,在每个状态下描述读取电压电平的钟形分布(bell-shaped),但因为特定状态下的每个单元可以关于该状态具有读取电压电平的范围内的不同的读取电压电平,所以读取电压电平可以随着时间等而不同。当单元被编程时,单元和编程处理的变化可能产生读取电压电平的变化。此外,单元的读取电压电平可以归因于读取干扰、编程干扰、应力诱导的泄漏电流等而随着时间距其初始编程的电压漂移。虽然示出对称钟形分布,但偏斜(skewed)分布和其它分布是可能的。随着时间,分布可以随着单元距它们的初始编程的读取电压电平漂移而加宽或偏斜,并且这些影响可能关于年龄随着时间而增加。

如果分布加宽得超越最近的读取电压阈值510a-g,则一些单元已经漂移到相邻状态,产生错误。为了减少这种影响,通过预先定义的分离距离的保护带530a-g来分离状态L0-L7。如上所述,保护带或分离距离包括单元的数据编码物理性质的范围(例如读取电压电平等),其分离单元的状态。在所描述的实施例中,通过验证每个单元被至少大于验证电压520a-g(其大于或高于定义状态的下沿的读取电压阈值Vt 510a-g)的读取电压电平来编程,当单元被编程时,创建保护带。因此,在所描述的实施例中,第一保护带530a包括读取电压阈值510a与验证电压阈值520a之间的电压范围530a,第二保护带是读取电压阈值510b与验证电压阈值520b之间的电压范围530b等。

在各个实施例中,状态可以是距相邻状态的不同距离,保护带530a-g可以具有不同的宽度或大小。例如,在所描述的实施例中,L0状态与L1状态之间的分离度530a大于其它相邻状态之间的分离度530b-g,并且L0与L1之间的保护带530a对应地是更宽的。此外,在所描述的实施例中,读取电压阈值510b-g处于用于相邻状态的各最可能的电压之间的中点处,但在另一实施例中,读取电压阈值510可以更低,并且更靠近用于较低状态的单元的分布的边沿,因此加宽保护带并且增加分离距离。状态、保护带530a-g、读取电压阈值510a-g和验证电压阈值520a-g的其它布置是可能的,并且可以由读取电压模块312管理而且调整,以对减少的层式单元模式增加分离距离。

图9B描述示出用于图11A的状态L0-L7的一个示例编码的表550。因为所描述的实施例中的每个单元可以是八个不同状态之一,所以每个单元对三个不同的比特进行编码。第一比特称为最高有效比特(“MSB”),第二比特称为中间有效比特(“CSB”),第三比特称为最低有效比特(“LSB”)。在所描述的实施例中,编码是Gray码编码,其中,仅一个比特在各相邻状态之间改变。在其它实施例中,可以使用其它编码。

在一个实施例中,用于单元的比特的可靠性的等级可以基于关于单元的编码中的各相邻状态之间的比特的转变的数量。如果比特的值在各相邻状态之间改变,则关于比特的转变552产生在这些状态之间。在所描述的编码中,可见,LSB在L3状态与L4状态之间具有一个转变552。CSB在L1状态与L2状态之间以及L5状态与L6状态之间具有两个转变552,MSB具有四个转变552。因为多数错误产生在各相邻状态之间,所以在特定实施例中,比特在关于该比特的转变552附近的状态下经历较高的错误风险。因此,因为LSB具有一个转变552,所以在所描述的实施例中,LSB提供比CSB和MSB所提供的更高的可靠性等级。在所描述的实施例中具有两个转变552的CSB提供LSB和MSB所提供的各可靠性等级之间的可靠性等级。在所描述的实施例中具有四个转变552的MSB提供比LSB和CSB所提供的可靠性等级更低的可靠性等级。

在另一实施例中,用于单元的比特的可靠性的等级可以基于和/或相关于各相邻状态(例如具有关于单元的编码中的比特的转变552的状态)之间的保护带530a-g或分离距离的大小。例如,在所描述的实施例中,可以通过加宽L3状态与L4状态之间的转变552处的保护带530d来增加用于LSB的可靠性等级。加宽一个转变552处的保护带可以包括:变化状态并且缩窄其它保护带,融合状态,掩蔽状态,使得状态无效等,因此也影响其它比特(例如MSB和CSB)的可靠性等级。

图10描述具有示例编码或编程模型的用于三层式存储器单元集合(例如MLC NAND闪速存储单元、TLC NAND闪速存储单元等)的边界阈值662a-g的一个实施例。所表示的编码模型中固有的任何限制不一定应用于所有其它编码模型,并且本公开不应理解为固有地包含任何这些限制。在所描述的实施例中,使用Gray码编码模型对停留态或编程状态进行编码,其中,用于相邻状态的二进制值在编码中差异达单个比特。图10的所描述的编码可以是用于使用以上关于图9A和图9B所描述的编码550和状态500来对较低/LSB、中间/CSB和较高/MSB页面进行编程的编程级(stage)的一个实施例。

在所描述的实施例中,级1包括用于较低/LSB页面的编程操作,其中,用于较低/LSB页面的二进制一将存储器单元置于L0状态或停留态下,用于较低/LSB页面的二进制零将存储器单元置于L1状态或停留态下。级2包括用于中间/CSB页面的编程操作,其中,取决于级1中所编程的较低/LSB比特的值和正被编程的中间/CSB比特的值,存储器单元可以具有四个可能的状态或停留态之一。级3包括用于包括取决于级1中所编程的较低/LSB页面、级2中所编程的中间/CSB页面以及级3中正被编程的较高/MSB页面的值的八个可能的状态或停留态的对较高/MSB页面的编程操作。

级、每级的状态或停留态的数量以及关联的编码可以对于特定非易失性存储器介质122的架构、类型、制造或型号是特定的。在特定实施例中,非易失性存储器介质122的一个或多个不同架构可以使用图12中所描述的同一公共预先定义的编码(例如Gray码;L0=111、L1=011、L2=001、L3=101、L4=100、L5=000、L6=010、L7=110;等)。例如,并非来自所描述的有序级中的从两个停留态(SLC模式)到四个停留态(MLC模式)到八个停留态(TLC模式)的处理,其它架构可以使用具有两个停留态的第一级以及关于均具有八个停留态的第二级和第三级的处理,简单地窄化或细化第三级中的停留态的大小或宽度。其它架构可以在三个级中的每一个中包括八个停留态等。

图11描述用于裸芯上缓冲式(ODB)非易失性存储器管理的方法1300的一个实施例。方法1300开始,并且缓冲模块302将数据存储(1302)在第一非易失性存储器单元集合中。数据因素模块322确定(1304)一个或多个数据因素或与数据关联的属性。回拷模块306基于一个或多个数据因素或属性而确定(1306)是否在内部将数据拷贝或移动到第二非易失性存储器单元集合。第二非易失性存储器单元集合在一个实施例中被配置为:存储比第一非易失性存储器单元集合更多的每单元的比特。如果回拷模块306确定(1306)移动或回拷数据,则回拷模块306将数据拷贝(1308)到第二非易失性存储器单元集合。方法1300结束。

图12描述用于裸芯上缓冲式(ODB)非易失性存储器管理的方法1400的另一实施例。方法1400开始,并且缓冲模块302将数据存储(1402)在第一非易失性存储单元集合中。刷新模块304确定(1404)是否刷新数据。如果刷新模块304确定(1404)刷新数据,则刷新模块304对来自第一非易失性存储单元集合的数据进行解码(1406),并且基于一个或多个数据因素或与数据关联的属性而对用于拷贝或移动到第二非易失性存储单元集合的数据进行重新编码(1406)。第二非易失性存储单元集合在一个实施例中通过比第一非易失性存储单元集合更多的每单元的存储状态来对数据进行编码。回拷模块306将数据拷贝(1408)到第二非易失性存储单元集合,并且方法1400结束。

图13描述用于裸芯上缓冲式(ODB)非易失性存储器管理的方法1500的另一实施例。方法1500开始,并且缓冲模块302将数据缓冲(1502)在第一非易失性存储器单元集合中。读取电压模块312基于用于第一非易失性存储器单元集合的一个或多个存储介质特性而调整(1504)用于第一非易失性存储器单元集合的一个或多个读取电压阈值。回拷模块306使用调整后的(1504)一个或多个读取电压阈值将数据从第一非易失性存储器单元集合拷贝(1506)到第二非易失性存储器单元集合。第二非易失性存储器单元集合在一个实施例中被配置为:存储比第一非易失性存储器单元集合更多的每单元的比特。

附加描述:

在一个实施例中,管理模块150优化TLC NAND中的ODB编程步骤。在一个实施例中,管理模块150可以优化地确定在NAND设备中正从SLC移动到TLC的页面是否应在放置在TLC页面上之前被检错/纠错。对码字进行解码,纠正任何错误并且然后对码字进行重新编码的处理可以称为“编码刷新”。多个因素可以用于进行该确定,包括NAND的当前年龄(P/E)、扫描器反馈等。在特定实施例中,如果因素是容易可得的或快速并且容易的、用于测量/检测,则这是更好的。

ODB是用于TLC的编程模型。该模型可以将一些数据缓冲在SLC块中的NAND芯片上,直到数据稍后压缩到TLC块中。控制器(和主机)可以负责管理在SLC块与TLC块之间移动的数据。

将页面从SLC块压缩到TLC块中的处理可以包括“回拷”操作。NAND制造商可以推荐对在拷贝返回期间从SLC块读取的块进行解码,并且通过错误保护机制(ECC)、“编码刷新”来对其进行重新编码,以确保高数据可靠性。管理模块150可以具有范围从不进行编码刷新到进行选择性编码刷新到进行全部编码刷新的多个变形。

如果目的地TLC EB并非可使用的(标记为坏/损耗掉),则“回拷”可以不完成。此外,当管理模块150用在闪速阵列上时,阵列可以组织为n个(n=29=28+1个奇偶校验)裸芯宽的行。可以使用自适应闪回来管理该行——这意味着,随着EB在一行中出故障,并非重新映射EB以保留相同行宽度,可以减少行大小并且使用更短的行。因此,在一个实施例中,为了拷贝返回用在阵列的两个行之间,每个行中的可使用的EB的数量可以至少是相同的(换言之,目的地行(TLC行)可以如源行(SLC行)一样宽或宽于源行(SLC行))。

在特定实施例中,如果用于阵列的给定列的目的地TLC EB不是可使用的(损耗掉),则编码刷新和/或垃圾收集可能是适当的。“回拷”是可以处于用于NAND芯片的封装等级上的操作。如果用于阵列的给定列的目的地TLC EB不是可使用的,则因为对于给定的封装/裸芯可能不存在可用的目的地TLC EB,所以在特定实施例中可以不执行拷贝返回操作。在特定实施例中,可以对控制器告警用于阵列的给定列的目的地TLC EB不是可使用的事实,并且将用于拷贝返回操作的目的地TLC EB重新映射为可用的另一TLC EB。(可以从为此目的而又设置的所保留的TLC EB的池选取所使用的替选TLC EB)。在另一实施例中,如果用于阵列的给定列的目的地TLC EB不是可使用的,则整个LEB可以被读出NAND、进入控制器中,并且在被存储在目的地TLC EB上之前被重新分组。

单元的阵列可以由LEB的行构成,该LEB的行映射到穿过焊盘(pad)的行的每个焊盘上的相同EB地址。如果目的地TLC EB是不可使用的,则这种映射可能使得拷贝返回操作是困难的。为了解决该问题,可以通过不基于阵列的行中的物理位置或地址的任意分配来保持阵列的行中的PEB到LEB的映射。如果LEB 0映射为EB l、EB m、EB n、EB o等,则可以通过重新映射阵列的其它行中的PEB来执行拷贝返回操作。

在一个实施例中,管理模块150可以将SLC页面的数据发送到TLC缓冲器之一,并且流送出数据,以用于“编码刷新”。控制器/读取流水线中的逻辑可以确定是否进行编码刷新。可以基于RBER(或错误的数量)和/或其它因素而进行确定。如果建议编码刷新,则可以在控制器内的新的码字中对页面进行解码并且重新编码。在一个实施例中,页面的数据可以停留在控制器中,并且在编码刷新期间不通过PCIe接口移动到主存储器。管理模块150在特定实施例中可以快速地确定是否进行编码刷新。

在另一实施例中,管理模块150可以特征化NAND,从而管理模块150具有预测编码刷新何时可能是有益的模型。

在另一实施例中,管理模块150包括扫描器,被配置为:标记或另外注记当在回拷操作中移动时应接收以及不应接收编码刷新的页面。在这些实施例之一中,页面的标志或标记可以使得页面能够直接发送到控制器,以用于编码刷新,或保留在NAND裸芯中,以用于回拷,而非长路径向下发送数据。

在特定实施例中,NAND接口可以具有用于刷新操作的足够高的吞吐量。

管理模块150可以执行的另一操作是“压缩”——如果SLC中的块的数据正移动到TLC——利用这个机会以对块进行垃圾收集。

在特定实施例中,TLC NAND可能是比SLC/MLC更有损的,并且因此,SLC NAND中所存储的数据可以被检错并且重新编码,以保持期望等级的数据可靠性。当SLC NAND页面正读出SLC NAND以移动到TLC NAND作为ODB回拷操作的部分时,在一个实施例中,管理模块150可以有选择地决定哪些SLC NAND页面进行编码刷新。管理模块150在特定实施例中可以回拷所有或实质上所有SLC NAND页面,并且稍后基于一些准则对子集进行编码刷新。可以基于扫描、NAND表征(模型)、用于回拷的Tprog、使用或损耗测量、在回拷期间所报告的错误等而计算准则。

在特定实施例中,管理模块150可以收集元数据,以通过满足一个或多个性能度量的方式关于是否执行刷新进行决定。在一个实施例中,管理模块150可以仅读取少数页面,并且计算关于它们的RBER。在另一实施例中,管理模块150可以不收集任何数据,但可以出于其它目的(例如编程/擦除计数、RBER、UBER、保留时间等)促使数据保留。在另一实施例中,管理模块150可以不收集任何数据,并且可以基于来自NAND设备的反馈(例如,较长的Tprog或回拷、来自NAND芯片的错误或告警消息等)而触发该决定。

在特定实施例中,管理模块150可以响应于决定进行编码刷新而选择用于刷新后的数据的多个目的地之一(例如初始TLC NAND、可替换的TLC NAND、日志附接点等)。在一个实施例中,如果目的地TLC页面是坏的、太过损耗的或另外不可使用的(忙于进行其它操作),则管理模块150可以将SLC页面重定向到日志附接点。如果SLC页面处于低需求(少数读取/写入)并且存在低执行压力,则在一个实施例中,管理模块150可以从SLC页面移除无效(例如垃圾)块,并且将SLC页面重定向到日志附接点。

在一个实施例中,管理模块150可以在SLC EB与TLC EB之间有选择地执行回拷操作,而并非所有数据移动到TLC EB。将一些数据留在SLC EB中可以使得设备能够实现特定QOS要求。在特定实施例中,管理模块150基于可以在进行是否执行回拷操作的决定中考虑的因素(例如写入频率、QOS等)而有选择地进行该决定。

在特定实施例中,读取可能在TLC上比在SLC或MLC上耗时更长。部分地归因于NAND部分对字线干扰的依赖,NAND制造商可以建议直到WLn+1被编程才读取WLn。如果可以容纳、纠正等任何错误,则管理模块150在一个实施例中在WLn+1被编程之前读取WLn。能够在WLn+1之前读取WLn在特定实施例中可以通过使得数据可存取得更快而增加性能。

管理模块150在一个实施例中当进行回拷操作时可以通过使用用于SLC擦除块(EB)的读取电压阈值管理(VTM)模型来避免数据刷新开销。在特定实施例中,管理模块150可以将VTM模型应用于源SLC EB,以用于回拷操作,并且SLC EB数据可以变为TLC EB,而无需解码、纠正以及重新编码。数据可以通过VTM设置从单元读取到NAND缓冲器,然后移动到TLC EB。VTM模型可以定向或指示用于刷新的少数SLC EB。在一个实施例中,仅在回拷操作(例如SLC EB读取)期间应用VTM模型。正常读取在一个实施例中不使用SLC VTM模型。此外,在特定实施例中,VTM模型可以仅应用于具有特定损耗特性的SLC EB。

管理模块150在一个实施例中将VTM表用于SLC EB,以促进回拷。在特定实施例中,SLC nand可以假设为鲁棒得足以在没有VTM的情况下操作。然而,在特定实施例中,并非刷新SLC EB,管理模块150可以在SLC EB得以读取之时应用VTM调整,从而避免刷新。数据可以停留在分组中,并且从单元移动到内部页面缓冲器,然后移动到TLC目的地EB。在一个实施例中,如果扫描器确定应执行刷新,则扫描器仍可以标记SLC EB,以用于刷新。管理模块150可以在回拷操作期间检测所标记的SLC EB。在一个实施例中,VTM调整可以用在SLC EB上,仅用于回拷操作。

在一个实施例中,管理模块150可以优化TLC NAND中的ODB编程步骤的使用。管理模块150在特定实施例中可以优化地分配与TLC块有关的SLC块,以使得NAND的寿命最大化。管理模块150在一个实施例中可以预先分配EB作为SLC并且预先分配其它EB作为TLC,而且在EB的寿命期间保持该分配。在另一实施例中,管理模块150可以贯穿EB的寿命而改变模式分配。

ODB是用于TLC的编程模型。该模型在特定实施例中可以将一些数据缓冲在SLC块中的NAND芯片上,直到数据可以稍后压缩到TLC块中。控制器(例如管理模块150)可以负责管理在SLC块与TLC块之间移动的数据,并且可以引入特定优化。

控制器在一个实施例中可以定义哪些块是SLC以及哪些块是TLC。NAND在特定实施例中可以对块(EB)何时可以处于SLC或TLC模式下施加特定限制。在一个实施例中,在擦除操作之后,块可以置于SLC、MLC和/或TLC模式下。在特定实施例中,关于一些NAND制造等,一旦模式改变,其就保持改变,直到再次使用SET FEATURE(设置特征)命令等进行改变。在其它实施例中,对于其它NAND制造,模式改变仅用于当前操作,并且然后反转回到默认模式。

在一个实施例中,管理模块150可以工程化SLC/TLC块分配,从而SLC块和TLC块都在基本上相同的转折点或其附近损耗掉。在预先分配情况下,在一个实施例中,管理模块可以确定优化比率。在一个实施例中,制造商例如可以设置作为SLC和其余TLC的总容量的1.2%的用于SLC/TLC的比率。按默认,在一个实施例中,制造商可以关于设备的寿命将页面保持在它们的SLC/TLC模式下。

在一个实施例中,管理模块150对于一个或多个擦除块动态地切换块模式。管理模块150在特定实施例中可以适度地和/或均匀地扩展TLC和SLC损耗。管理模块150可以确定何时从SLC切换到TLC到SLC等。

在特定实施例中,管理模块150可以保持当在TLC模式等下最新扫描时所测量的关于每个EB的RBER统计,并且可以将最有损的EB分配给SLC缓冲器职责。在一个实施例中可以使用TLC块,直到它们的可靠性落入阈值之下等,然后它们可以降级为SLC块。TLC块可以首先降级为MLC块并且然后降级为SLC,可以直接变为SLC等。当扫描器浏览EB、再次对该EB进行读取操作、等等时,管理模块150在一个实施例中可以监控可靠性。

在另一实施例中,管理模块150可以通过检查用于EB的tERASE来监控EB的健康。tERASE在特定实施例中随着EB损耗掉而上升。tERASE在一个实施例中可以易于在梳理或垃圾收集之时监控并且检测。

NAND部分在特定实施例中可以具有作为SLC的特定EB设置以及作为TLC的其它EB设置,其中,SLC对于TLC的百分比由制造商等设置。这些设置对于NAND的寿命可以是固定的。这些固定的并且刚性的分配和使用在一个实施例中可以由制造商普适化以用于所有消费者,并且可以不是关于特定工作量的最佳解决方案。

管理模块150在特定实施例中可以具有对将EB的配置从TLC动态改变为SLC或从SLC动态改变为TLC等的存取,改变SLC/TLC分配,以使得NAND的寿命和使用最大化。通过对小块(knob)的存取,管理模块150可以基于可靠性和/或性能度量而将TLC EB改变为MLC或SLC EB。基于工作量特性(例如QOS),在一个实施例中,管理模块150可以当在工作量方面存在更高值块时将更多的EB分配给SLC,并且可以如果在处理中则使得回拷不完成、中止等。基于用户配置设置,当设置正确的用户设置等时,管理模块150在另一实施例中可以将更多EB分配给TLC(例如,期望更高的密度)。

管理模块150在一个实施例中优化地将用于数据块的LBA映射为用于NAND上的数据的两个潜在物理位置之一。进行裸芯上缓冲编程以将数据从SLC转变为TLC EB的TLC NAND在特定实施例中可以在两个不同的位置中具有相同数据达有限时间段。管理模块150在一个实施例中可以确定前向映射(例如逻辑到物理映射结构)的LBA应通过其LBA指向何处以及如何管理该目的地地址。管理模块150可以使用工程化处理,以用于保存目的地物理地址、用于更新前向映射的操作顺序和/或倘若功率切断事件产生则恢复步骤。

ODB是用于TLC的编程模型。该模型可以将一些数据缓冲在SLC块中的NAND芯片上,直到数据可以稍后压缩到TLC块中。控制器(例如管理模块150)可以负责管理在SLC块与TLC块之间移动的数据,并且可以引入特定优化。

控制器/驱动器(例如管理模块150)可以将LBA与目的地PA之间的前向映射(例如逻辑到物理映射结构)保存在NAND上。在TLC设备中,在正使用ODB的情况下,物理地址可以随着数据使用拷贝返回操作在SLC块与TLC块之间移动而改变。管理模块150可以管理物理地址改变。在特定实施例中,管理模块150可以处置功率切断情况。

在一个实施例中,回拷操作涉及主机。主机可以确定目的地物理地址,其可以是NAND上的TLC页面。在回拷期间,在特定实施例中,页面的多个拷贝可以存在。在一个实施例中,用于前向映射(forward map)的物理地址可以初始地设置为SLC页面的物理地址。在拷贝返回处于处理中的同时,前向映射中的物理地址可以停留SLC页面,直到管理模块150确认数据可从TLC页面读取。在各个实施例中,可以通过来自NAND的完成指示符、TLC页面的测试读取等来指示该情况。

在一个实施例中,管理模块150可以仅在可以读取TLC页面之后并且在调度SLC擦除之前更新LRB树(例如逻辑到物理映射结构)。在另一实施例中,管理模块150可以仅在成功地对整个TLC擦除块进行编程之后并且在擦除源擦除块之前更新LRB树。管理模块150在特定实施例中可以通过直到完全填充目标擦除块(空白速率和填充速率(empty and fill rate)可以归因于无效而偏斜)才擦除源擦除块来防止或消除部分填充的擦除块。

因为回拷在特定实施例中可以是扩展的处理,所以管理模块150可以优化对回拷操作中所涉及的页面中的数据的存取。例如,在一个实施例中,如果以高频率来存取页面上的数据,则回拷操作可以中止并且将数据留在SLC中,这样可以提供更快的读取,促成缓存驱逐策略等。在另一实施例中,如果正以高频率存取页面上的数据,则回拷操作可以继续,但可以被修改,从而数据的拷贝停留在SLC中,这样可以提供更快的读取等,并且可以从SLC读取数据,直到高频率的存取下降。此外,在一个实施例中,可以通过特定服务质量(QoS)标记来对SLC PEB上的数据做标签。如果SLC PEB数据是高QoS的,则在特定实施例中,数据可以要么a)不移动到TLC,b)移动到TLC但也处于SLC PEB中,以提供较高的读取性能等,要么c)其它技术。

在一个实施例中,当考虑何时将SLC分组标记为无效时,管理模块150可以不将回拷操作置于字线级。此外,在特定实施例中,管理模块150可以直到整个擦除块已经拷贝到TLC之后才将SLC分组标记为无效。管理模块150在另一实施例中可以直到仅在管理模块150擦除SLC EB之前才将SLC分组标记为无效。管理模块150在一个实施例中可以保存两个不同的分组位置,以管理可以有益于读取延时性能的重叠。

如上所述,在特定实施例中,如果目的地TLC擦除块是不可使用的(例如,标记为坏/磨损掉),则“拷贝返回”可以不完成。在一个实施例中,管理模块150可以使用组织为n个(n=29=28+1个奇偶校验)裸芯宽等的行的闪速阵列。可以使用自适应闪回等来管理行。例如,在特定实施例中,随着擦除块在行中出故障,并非重新映射擦除块以保留同一行宽度,可以减少行大小,并且可以使用更短的行。因此,在一个实施例中,为了拷贝返回用在阵列的两个行之间,每个行中的可使用的EB的数量可以至少是相同的(换言之,在特定实施例中,目的地行(TLC行)可以与源行(SLC行))一样宽或宽于源行(SLC行))。

对码字进行解码、纠正任何错误并且然后对码字进行重新编码的处理可以称为“编码刷新”。在特定实施例中,如果用于阵列的给定列的目的地TLC EB不是可使用的(磨损掉),则编码刷新和/或垃圾收集可能是适当的。“回拷”是可以处于用于NAND芯片的分组等级上的操作。如果用于阵列的给定列的目的地TLC EB不是可使用的,则因为对于给定的分组/裸芯可能不存在可用的目的地TLC EB,所以在一个实施例中不能执行拷贝返回操作。

在特定实施例中,可以对控制器(例如管理模块150)告警用于阵列的给定列的目的地TLC EB不可使用的事实,并且将用于拷贝返回操作的目的地TLC EB重新映射为可用的另一TLC EB。(在一个实施例中,可以从为此目的而又设置的所保留的TLC EB的池选取所使用的替选TLC EB)。在另一实施例中,如果用于阵列的给定的列的目的地TLC EB是不可使用的,则整个LEB可以读出NAND进入控制器并且重新分组,并且潜在地放置在日志中的新的位置中,然后存储在目的地TLC EB上。

在一个实施例中,具有回拷编程的TLC可以呈现这样的情况:NAND页面上的数据存在于多个位置中达某时间段。源SLC页面在特定实施例中可以出自相同EB、不同EB等。对于回拷过程,在一个实施例中,管理模块150可以使用来自一个或多个不同EB、来自一个或多个相同EB等的三个页面。管理模块150在特定实施例中可以确定何时应发起回拷以及何时应延迟回拷。

在一个实施例中,如果以高QOS来标记数据块,则管理模块150可以延缓回拷并且将数据留在SLC中。在另一实施例中,如果数据块具有高存取速率(读取和/或写入),则管理模块150可以延缓回拷并且将数据留在SLC中(例如,使用SLC作为缓存等)。如果存在高容量压力并且数据块未做标签以用于特殊对待等,则在特定实施例中,可以发起回拷。

管理模块150在一个实施例中可以确定何时更新LBA与物理地址(PA)之间的映射。在特定实施例中,在SLC EB中的数据已经验证为存储的之后,管理模块150可以更新前向映射。被验证在一个实施例中可以表示数据被读取(例如,系统发起的读取、扫描器所进行的延缓的读取等)返回并且被确认为准确。管理模块150在另一实施例中可以在SLC EB中的数据存储在TLC中之后更新前向映射,而无需验证等。在另一实施例中,管理模块150可以在回拷操作之前通过之前PA(主级)和之后PA(次级)来更新前向映射,并且在数据处于TLC EB中之后移除之前PA等。主级PA在一个实施例中可以是SLC,因为其可以具有更快的读取和写入等。

管理模块150在特定实施例中可以确定何时恢复旧的SLC页面。在一个实施例中,管理模块150可以在SLC EB中的数据验证为存储的(例如读取返回并且确认精确)之后恢复SLC页面。在特定实施例中,管理模块150可以响应于用户发起的读取而验证数据。管理模块150在一个实施例中可以在关于SLC EB中的数据的存取速率小于阈值之后恢复SLC页面,使用SLC EB等来缓存数据。管理模块150在另一实施例中可以响应于存储容量压力而恢复SLC页面。

当功率切断中断TLC回拷时,管理模块150在特定实施例中可以应用优选操作顺序,以缓解问题。在一个实施例中,一旦确认数据安全地存储在TLC页面上,数据就可以功率切断得安全。管理模块150在另一实施例中可以a)发起回拷,b)确认回拷成功,c)以新的地址来更新前向映射;和/或d)使用另一技术。在特定实施例中,管理模块150可以延缓更新前向映射以及恢复SLC页面,直到存在存储容量压力等。出于性能原因,在一个实施例中,SLC页面可以用于服务于读取。

管理模块150在特定实施例中可以优化在功率切断事件期间TLC NAND的使用。在另一实施例中,在功率切断的事件中,管理模块150可以优化地将用于数据块的LBA映射为用于NAND上的数据的两个潜在物理位置之一。进行裸芯上缓冲编程以将数据从SLC转变为TLC EB的TLC NAND在特定实施例中可以在两种类型的块中具有相同数据达有限时间段。在功率切断的事件中,可能存在TLC物理擦除块(PEB)尚未完全被填充(例如,PEB的每个页面尚未被编程)(其可以称为不完全TLC PEB)的机会。管理模块150可以被配置为:处置这种不完全TLC PEB。

ODB是用于TLC的编程模型。该模型可以将一些数据缓冲在SLC块中的NAND芯片上,直到数据稍后压缩到TLC块等中。控制器(和主机)可以负责管理在SLC块与TLC块之间移动的数据。控制器/驱动器在特定实施例中可以将LBA与目的地PA之间的前向映射保存在NAND上。在TLC设备中,在正使用ODB的情况下,PA可以随着数据使用拷贝返回操作在SLC块与TLC块之间移动而改变。

管理模块150在一个实施例中可以管理这种物理地址改变,可以管理部分地编程的TLC EB等。回拷操作在特定实施例中涉及主机。主机在一个实施例中确定目的地PA,其可以是NAND上的TLC页面。

在回拷期间,页面的多个拷贝可以存在。用于前向映射的PA在一个实施例中可以初始地设置为SLC页面的PA。在拷贝返回处于处理中的同时,在特定实施例中,前向映射中的PA可以保留用于SLC页面的PA,直到管理模块150可以确认数据可从TLC页面读取。可以通过来自NAND的完成指示符、TLC页面的测试读取等来指示该情况。

为了避免在TLC PEB正被回拷来编程的同时功率切断可能产生的潜在问题,在一个实施例中,管理模块150可以允许用于前向映射的PA保留SLC页面的PA,直到管理模块150可以确认可从TLC页面读取数据等。如果功率切断产生在TLC PEB的页面的编程期间,则在一个实施例中,管理模块150可以另外使用SLC PEB中的数据(例如,它们中的三个)。在从功率切断恢复时,在特定实施例中,管理模块150可以梳理(groom)该TLC EB。

在一个实施例中,管理模块150可以不保存在梳理期间来自TLC EB的有效数据,因为尚未梳理源SLC EB。管理模块150可以满足来自源SLC EB的读取。在特定实施例中,一旦功率回来了(back on),管理模块150就可以对TLC EB执行擦除操作。在另一实施例中,管理模块150可以马上使用部分地编程的TLC EB作为有效TLC EB等。在特定实施例中,并不响应于TLC EB的梳理而更新LRB树(例如逻辑到物理映射结构)。

具有回拷编程的TLC在一个实施例中可以具有在功率切断之时关于部分编程的TLC EB的潜力等。管理模块150在特定实施例中可以发起/中止回拷操作,并且考虑部分填充的并且仅保存无效/垃圾数据的TLC EB。并非TLC EB中的数据,在一个实施例中,管理模块150可以使用SLC EB数据。管理模块150在另一实施例中可以通过指示符来标记完成的TLC EB,如果指示符未出现,则EB是部分EB,并且管理模块150可以将部分编程的EB上的所有数据看作不可靠的,而且标记用于GC/擦除的EB等。在一个实施例中,管理模块150可以直到新的数据正确地存储在TLC EB中才更新前向映射等。在特定实施例中,管理模块150可以使用包括NAND的当前年龄(P/E)、扫描器反馈等的多个因素以进行确定。在一个实施例中,因素对于测量/检测等可以是易于可用的、非常快速的并且容易的。

在不脱离本公开的精神或基本特性的情况下,可以通过其它具体形式来实施本公开。因此,所描述的实施例被看作在所有方面仅是说明性而非限制性的。因此,本公开的范围由所附权利要求而非前面的描述指示。出自权利要求的等同物的意义和范围内的所有改变囊括于其范围内。

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