分布式编程操作的制作方法

文档序号:18029096发布日期:2019-06-28 22:27阅读:236来源:国知局
分布式编程操作的制作方法

在各种实施方案中,本公开涉及中断存储操作,并且更具体地讲,涉及随时间推移来分配编程操作。



背景技术:

固态存储器(诸如nand闪存存储器)将数据存储在存储单元阵列中,在闪存存储器的情况下,这些阵列由浮栅晶体管形成。nand闪存存储器设备通过从阵列中的单元读取一组比特来返回先前存储的数据。存储器设备可包括一个或多个芯片,并且芯片可包括一个或多个存储器单元阵列。

从单元擦除数据所需的时间通常比将数据写入单元所需的时间要长,并且通常比从单元读取数据所需的时间长得多。写入/编程时间通常比读取时间长,但比擦除时间短。对感知性能最关键的一个操作是将数据编程到闪存中。虽然擦除时间通常比编程时间长得多,但写入命令通常比擦除命令更经常被调用。

编程性能中的一个问题是,分配给单次写入操作的许多资源(硬件和固件)都不能释放(相对)长时间,因为它们被分配直到编程操作已完全结束为止。因此,一直到编程操作被确认并且资源被释放之前,主机都无法访问存储器设备。

当前高性能编程操作的一个挑战是编程操作期间消耗的峰值功率。当两个或更多个管芯并行地工作时,其峰值功率消耗累积并且可导致源电源的电压降低,从而导致功率下降,这导致存储器设备不工作和对用户的服务的间接损失。



技术实现要素:

公开了各种实施方案,包括用于分布式编程操作的设备、系统、方法和计算机程序产品。

在一个实施方案中,一种设备包括存储器模块,该存储器模块包括非易失性存储器。这里,该存储器模块被配置为利用第一数量的编程循环对非易失性存储器的页面进行编程并(例如,向主机)指示该页面被部分编程。该存储器模块还被配置为在预定时间之后利用第二数量的编程循环对相同页面进行编程,其中该存储器模块在预定时间期间执行一个或多个其他存储操作,并且该存储器模块还被配置为(例如,向主机)指示该页面被完全编程。

在各种实施方案中,另一个设备包括:用于从主机接收写入数据的指令的装置;用于响应于该写入数据的指令将存储器设备的字线编程到部分编程状态的装置;用于发信号通知主机该写入数据的指令已完成的装置;以及用于在执行一个或多个居间操作之后将该字线编程到完全编程状态的装置。

在一个实施方案中,一种方法包括从主机接收写入命令;降低多个数据记录元件的编程验证电压,每个数据记录元件被配置为将数据存储在三层单元中;以及使用降低的编程验证电压对数据记录元件的页面进行编程。该方法还包括确认写入命令,恢复编程验证电压,并使用所恢复的编程验证电压对页面进行编程。

在一个实施方案中,另一种方法包括从主机接收写入数据的指令,以及响应于对数据进行编程的指令,将存储器设备的字线编程到部分编程状态。该方法包括响应于将该字线编程到部分编程状态,发信号通知主机该写入数据的指令已完成。该方法还包括在执行一个或多个居间操作(例如,存储操作)之后将该字线编程到完全编程状态。

附图说明

下文参考附图中示出的具体实施方案包括了更具体的描述。应当理解,这些附图仅描绘了本公开的某些实施方案,因此不应被认为是对其范围的限制,通过使用附图,以额外的特异性和细节描述和解释了本公开,其中:

图1a是示出用于分布式编程操作的系统的一个实施方案的示意性框图;

图1b是示出用于分布式编程操作的系统的另一个实施方案的示意性框图;

图2是示出一连串存储单元的一个实施方案的示意性框图;

图3是示出存储单元阵列的一个实施方案的示意性框图;

图4是示出用于分布式编程操作的分布式编程部件的一个实施方案的示意性框图;

图5是用于分布式编程操作的时间线的一个实施方案的示意性框图;

图6是示出用于分布式编程操作的时间线的一个实施方案的框图;

图7是示出用于分布式编程操作的管芯级过程的一个实施方案的流程图;

图8是示出用于基于lba使用频率将lba映射到合适的闪存区域的过程的一个实施方案的流程图;

图9是示出用于分布式编程操作的表的各种实施方案的框图;

图10是示出用于分布式编程操作的方法的一个实施方案的示意性流程图;并且

图11是示出用于分布式编程操作的方法的又一个实施方案的示意性流程图。

具体实施方式

本公开的各方面可体现为设备、系统、方法或计算机程序产品。相应地,本公开的各方面可采取完全为软件的实施方案(包括固件、常驻软件、微代码等)或结合软件和硬件方面的实施方案的形式,这些方面在本文中可全部大体称为“电路”、“模块”、“设备”或“系统”。此外,本公开的各方面可采取在存储计算机可读和/或可执行程序代码的一个或多个非暂态计算机可读存储介质上的计算机程序产品实施方案的形式。

本说明书中所述的许多功能单元已被标记为模块,以便更具体地强调它们的实现独立性。例如,模块可被实现为包括定制vlsi电路或门阵列、现成的半导体诸如逻辑芯片、晶体管或其他分立部件的硬件电路。模块还可在可编程硬件设备诸如现场可编程门阵列、可编程阵列逻辑部件、可编程逻辑设备等中实现。

模块还可至少部分地在用于由各种类型的处理器执行的软件中实现。所识别的可执行代码模块可例如包括计算机指令的一个或多个物理或逻辑块,所述物理或逻辑块可例如被组织为对象、过程或函数。然而,所识别的模块的可执行文件无需物理地定位在一起,但可包括存储在不同位置的不同指令,这些不同的指令在逻辑地接合在一起时包括该模块并实现针对该模块所述的用途。

实际上,可执行代码模块可包括单个指令或许多指令,并且甚至可以在若干不同的代码片段上、在不同程序之间、跨若干存储器设备等分布。当模块或模块的部分在软件中实现时,这些软件部分可存储在一个或多个计算机可读和/或可执行的存储介质上。可利用一个或多个计算机可读存储介质的任何组合。例如,计算机可读存储介质可包括但不限于电子、磁性、光学、电磁、红外或半导体系统、装置或设备,或前述的任何合适组合,但不包括传播信号。在本文档的上下文中,计算机可读和/或可执行存储介质可以是可包含或存储用于供指令执行系统、装置、处理器或设备使用或与其结合的程序的任何有形和/或非暂态介质。

用于执行本公开的各方面的操作的计算机程序代码可以以一种或多种编程语言的任何组合来编写,包括面向对象的编程语言诸如python、java、smalltalk、c++、c#、objectivec等,常规过程式编程语言,诸如“c”编程语言、脚本编程语言和/或其他类似编程语言。程序代码可部分地或完全地在一个或多个用户计算机上执行,和/或通过数据网络等在远程计算机或服务器上执行。

如本文所用,部件包括有形、物理的非暂态设备。例如,部件可被实现为包括定制vlsi电路、门阵列或其他集成电路的硬件逻辑电路;现成的半导体,诸如逻辑芯片、晶体管,或其他分立设备;和/或其他机械或电气设备。部件还可在可编程硬件设备诸如现场可编程门阵列、可编程阵列逻辑部件、可编程逻辑设备等中实现。部件可以包括一个或多个硅集成电路设备(例如,芯片、管芯、管芯平面、封装)或其他分立电气设备,其通过印刷电路板(pcb)的电线等与一个或多个其他部件电连通。在某些实施方案中,本文所述的模块中的每一个可另选地体现为或实现为部件。

如本文所用,电路包括提供用于电流的一个或多个通路的一组一个或多个电气和/或电子部件。在某些实施方案中,电路可包括用于电流的返回通路,使得该电路为闭环。然而,在另一个实施方案中,可将不包括用于电流的返回通路的一组部件称为电路(例如,开环)。例如,无论集成电路是否接地(作为用于电流的返回通路),则该集成电路都可被称为电路。在各种实施方案中,电路可包括集成电路的一部分、集成电路、一组集成电路、具有或不具有集成电路设备的一组非集成电气和/或电气部件等。

在一个实施方案中,电路可包括定制vlsi电路、门阵列、逻辑电路或其他集成电路;现成的半导体,诸如逻辑芯片、晶体管,或其他分立设备;和/或其他机械或电气设备。电路还可以实现为可编程硬件设备中的合成电路,诸如现场可编程门阵列、可编程阵列逻辑部件、可编程逻辑设备等(例如,作为固件、网表等)。电路可以包括一个或多个硅集成电路设备(例如,芯片、管芯、管芯平面、封装)或其他分立电气设备,其通过印刷电路板(pcb)的电线等与一个或多个其他部件电连通。在某些实施方案中,本文所述的模块中的每一个可体现为或实现为电路。

本说明书通篇所提到的“一个实施方案”、“实施方案”或相似语言是指结合所述实施方案所描述的特定特征、结构或特性被包含在本公开的至少一个实施方案中。因此,本说明书通篇出现的短语“在一个实施方案中”、“在实施方案中”和相似语言可以但不一定全部是指同一个实施方案,而是指“一个或多个但不是所有实施方案”,除非另有明确说明。术语“包括”、“包含”、“具有”及其变体是指“包括但不限于”,除非另有明确说明。列举的项目列表并不意味着任何或所有项目是互斥的和/或相互包容的,除非另有明确说明。术语“一”、“一个”和“该”也指“一个或多个”,除非另有明确说明。

此外,如本文所用,术语“组”可指“一个或多个”,除非另有明确说明。术语“组”可指符合集合论的“一个或多个”、“一些或更多”和/或“一些或另外的”中的多个或许多个,除非另有明确说明。

下面参考根据本公开实施方案的方法、设备、系统和计算机程序产品的示意性流程图和/或示意性框图来描述本公开的各方面。应当理解,示意性流程图和/或示意性框图的每个框,以及示意性流程图和/或示意性框图中的框的组合可由计算机程序指令实现。这些计算机程序指令可被提供给计算机的处理器或其他可编程数据处理设备以生产机器,使得经由该处理器或其他可编程数据处理设备执行的指令创建用于实现在示意性流程图和/或示意性框图的一个或多个框中指定的功能和/或动作的装置。

还应当指出,在一些另选的具体实施中,框中示出的功能可以不按图中所示的顺序发生。例如,事实上,连续示出的两个框可基本上同时执行,或者这些框有时可以采用相反的顺序执行,取决于所涉及的功能。可以设想在功能、逻辑或效果上等同于所示附图的一个或多个框或其部分的其他步骤和方法。尽管在流程图和/或框图中可以采用各种箭头类型和线条类型,但是应当理解它们不限制相应实施方案的范围。例如,箭头可以指示所描绘的实施方案的所列步骤之间的未指定持续时间的等待或监视时段。

在以下详细描述中,参考了构成所述详细描述的一部分的附图。前述发明内容仅是例示性的,并不旨在以任何方式进行限制。除了以上描述的例示性方面、实施方案和特征之外,通过参考附图和以下详细描述,更多方面、实施方案和特征将变得显而易见。每个图中的元件的描述可以参考前面的图的元件。相似的数字可以指代附图中的相似元件,包括相似元件的替代实施方案。

图1a为系统100的一个实施方案的框图,该系统包括用于非易失性存储器设备120的控制器126的分布式编程部件150。分布式编程部件150可以是控制器126、非易失性存储器元件123、设备驱动程序等的一部分和/或与其通信。分布式编程部件150可以在计算设备110的非易失性存储器系统102上操作,计算设备110可以包括处理器111、易失性存储器112和通信接口113。处理器111可包括一个或多个中央处理单元、一个或多个通用处理器、一个或多个专用处理器、一个或多个虚拟处理器(例如,计算设备110可以是在主机内操作的虚拟机)、一个或多个处理器内核等。通信接口113可包括一个或多个网络接口,所述网络接口被配置为将计算设备110和/或控制器126通信耦接至通信网络115,诸如互联网协议(ip)网络、存储区域网络(san)、无线网络、有线网络等。

在各种实施方案中,非易失性存储器设备120可相对于计算设备110设置在一个或多个不同位置。在一个实施方案中,非易失性存储器设备120包括一个或多个非易失性存储器元件123,诸如半导体芯片或封装或设置在一个或多个印刷电路板上的其他集成电路设备、存储外壳,和/或其他机械和/或电气支撑结构。例如,非易失性存储器设备120可以包括一个或多个直插式存储器模块(dimm)卡、一个或多个扩展卡和/或子卡、固态硬盘(ssd)或其他硬盘驱动器设备,和/或可具有另一个存储器和/或存储形状因数。非易失性存储器设备120可与计算设备110的主板集成和/或安装在该主板上,安装在计算设备110的端口和/或插槽中,安装在不同计算设备110上和/或网络115上的专用存储设备上,通过外部总线(例如,外部硬盘)与计算设备110通信,等等。

在一个实施方案中,非易失性存储器设备120可被设置在处理器111的存储器总线上(例如,在与易失性存储器112相同的存储器总线上,在与易失性存储器112不同的存储器总线上,代替易失性存储器112,等等)。在又一个实施方案中,非易失性存储器设备120可被设置在计算设备110的外围总线上,诸如外围部件高速互连(pciexpress或pcie)总线、串行高级技术附件(sata)总线、并行高级技术附件(pata)总线、小型计算机系统接口(scsi)总线、firewire总线、光纤通道连接、通用串行总线(usb)、pcie高级交换(pcie-as)总线等。在另一个实施方案中,非易失性存储器设备120可被设置在数据网络115上,诸如以太网、infiniband网络、基于网络115的scsirdma、存储区域网络(san)、局域网(lan)、广域网(wan)诸如互联网、另一个有线和/或无线网络115等。

计算设备110还可包括非暂态计算机可读存储介质114。计算机可读存储介质114可包括可执行指令,这些可执行指令被配置为使计算设备110(例如,处理器111)执行本文所公开的一个或多个方法的步骤。作为另外一种选择或除此之外,分布式编程部件150可体现为存储在非暂态存储介质114上的一个或多个计算机可读指令。

在所描绘的实施方案中,非易失性存储器系统102包括分布式编程部件150。在某些实施方案中,分布式编程部件150被配置为从主机接收写入数据的指令,将存储器单元的字线编程到部分编程状态,以及发信号通知主机该写入数据的指令已完成。在稍后的时间,例如在执行一个或多个居间操作之后,分布式编程部件150将字线编程到完全编程状态。在一个实施方案中,分布式编程部件150被配置为利用第一数量的编程循环对非易失性存储器的页面进行编程并(例如,向主机)指示该页面被部分编程。这里,分布式编程部件150可以使用增量步进脉冲编程来将数据写入非易失性存储器。这里,第一数量的编程循环(也称为编程“脉冲”)小于将非易失性存储器的页面完全编程所需的量。分布式编程部件150还被配置为在预定时间之后利用第二数量的编程循环对页面进行编程,其中在预定时间期间执行一个或多个其他存储操作,并且还被配置为(例如,向主机)指示该页面被完全编程。这里,分布式编程部件150可从部分编程页面将数据读取到内部ram或写缓冲区(例如xdl传输缓冲区)中,其中内部ram或写缓冲区中的数据用于将该页面完全编程。

在另一个实施方案中,分布式编程部件150被配置为:从主机接收写入命令,降低用于多个数据记录元件(诸如一组非易失性存储器元件123)的编程验证电压,使用降低的编程验证电压来对数据记录元件的页面进行编程,确认该写入命令;恢复编程验证电压,并使用恢复的编程验证电压对该页面进行编程。在此类实施方案中,在使用恢复的编程验证电压对页面进行编程之前,分布式编程部件150还从数据记录元件的页面读取页面数据。这里,使用恢复的编程验证电压对页面进行编程包括用读取的页面数据对页面进行编程。在各种实施方案中,每个数据记录元件被配置为将数据存储在三层单元中。此外,分布式编程部件150可以在确认写入命令和使用恢复的编程验证电压对页面进行编程之间等待预定时段。在某些实施方案中,基于该页面中的可使用纠错码(“ecc”)校正的错误的数量来选择降低的编程验证电压。

在一个实施方案中,分布式编程部件150可包括一个或多个非易失性存储器设备120的逻辑硬件,诸如控制器126、非易失性存储器元件123、设备控制器、现场可编程门阵列(fpga)或其他可编程逻辑部件、用于fpga或其他可编程逻辑部件的固件、用于在微控制器上执行的微代码、专用集成电路(asic)等。在另一个实施方案中,分布式编程部件150可包括存储在计算机可读存储介质114上以便在处理器111上执行的可执行软件代码,诸如设备驱动程序等。在又一个实施方案中,分布式编程部件150可包括可执行软件代码和逻辑硬件两者的组合。

在一个实施方案中,分布式编程部件150被配置为经由总线125等从设备驱动程序或其他可执行应用程序接收i/o请求。分布式编程部件150还可被配置为经由总线125将数据传输到设备驱动程序和/或存储客户端116和/或从驱动程序和/或存储客户端传输数据。因此,在一些实施方案中,分布式编程部件150可包括一个或多个直接存储器存取(dma)模块、远程dma模块、总线控制器、桥接器、缓冲器等和/或与之通信,以便于传输存储器/存储请求和相关编程数据的存储操作。在另一个实施方案中,分布式编程部件150可以接收存储请求作为来自存储客户端116的api调用,作为io-ctl命令等。

如本文所用,存储操作(例如,擦除过程、编程/写入过程、读取过程)可包括一个或多个阶段、片段、步骤、脉冲和/或其他部分,它们共同满足预定的目标和/或结果(例如,从存储单元擦除数据,将数据编程到存储单元,从存储单元读取数据等)。在默认情况下,在某些实施方案中,存储操作可通过连续地(例如,不中断地)执行存储操作的阶段、片段、步骤、脉冲和/或其他部分来完成。从计算设备110、存储客户端116、非易失性存储器介质控制器126和/或非易失性存储器控制器124的角度,可响应于单个命令或请求来实现或完成存储操作,即使从非易失性存储器介质122或从非易失性存储器元件123的角度来看,该存储操作使用多个单独的独立阶段、片段、步骤、脉冲或其他部分。

例如,存储客户端116可发送用以将数据存储在非易失性存储器设备120中的写入请求或用以从非易失性存储器设备120擦除数据的修整请求,非易失性存储器控制器124可选择非易失性存储器介质122的一个或多个擦除块来擦除,以便于作为存储容量恢复操作等的一部分的垃圾收集。用于非易失性存储器介质122的编程过程可以包括使用单个编程命令(例如,包括地址信息、写入请求的数据等)对与该请求相关联的相应存储器元件123(和/或对阵列中的若干存储器元件123)执行的单个编程操作,这可能导致一个或多个非易失性存储器元件123执行这样的编程操作,其包括电压电平变化的多个电脉冲,直到该单个编程操作成功或失败,诸如增量步进脉冲编程。

将增加的电压施加到编程存储器单元的每次迭代可被称为环(例如,擦除环、编程环等)。在每次迭代时,字线、页面或其他组存储单元接收具有预定义电压的电脉冲。对于编程操作,每个脉冲可被配置为将电子推送到浮栅中,而擦除操作的脉冲可将电子推出浮栅等。

可将每次迭代或每个脉冲应用固定的时间段或预定的持续时间(例如,600至700微秒等)。操作期间施加的电压可被配置为在操作的第一个脉冲期间逐渐增大(例如,斜线上升)。可执行斜线上升电压以通过向单元等缓慢施加更高的电压来减轻对氧化物的损坏。高电压可能会损坏将浮栅与其他层间隔开的氧化物层。

编程操作可包括n个脉冲(例如,最大环计数为16等)。通常,在某些实施方案中,将用于非易失性存储器介质122的环计数n设置得足够高以确保完全编程操作成功完成。在一些实施方案中,分布式编程部件150可暂时将环计数n设置为较低数量n1,以便将编程操作分配到两个或更多个阶段。在其他实施方案中,分布式编程部件150存储环计数n1,该计数用于分布式编程操作的第一阶段。

这里,第一环计数n1是用于分布式编程操作的第一编程阶段的最大环计数并且n1<n。在各种实施方案中,基于将存储器单元置于部分编程状态所需的脉冲数来选择环计数n1,其中将要编程到存储器单元的数据是可读的,具有可使用纠错码(“ecc”)部件或类似部件校正的错误量。在一个实施方案中,将低密度奇偶校验(“ldpc”)码用于错误校正。环计数n1可基于非易失性介质122的类型和制造商、ecc部件的类型、非易失性介质122的年龄(例如,用量)等而变化。在某些实施方案中,根据经验来确定环计数n1。此外,环计数n1可随着非易失性介质122老化而更新。

此外,分布式编程部件150可以为分布式编程操作的第二阶段使用第二环计数n2,其中n2<n。通常,需要较少的编程脉冲来将单元从部分编程状态编程到完全编程状态,因此n2<n1。此外,分布式编程操作的其他阶段可以使用环计数n2或另一个环计数n3,其中n3<n。在一些实施方案中,n1和n2的总和大于或等于n。通过减少一次执行的编程脉冲的数量,峰值功率消耗降低。

根据各种实施方案,与一个或多个分布式编程部件150通信的控制器126可管理一个或多个非易失性存储器设备120和/或非易失性存储器元件123。一个或多个非易失性存储器设备120可包括记录、存储器和/或存储设备,诸如一个或多个固态存储设备和/或一个或多个半导体存储设备,其被布置和/或划分为多个可寻址的介质存储位置。如本文所用,介质存储位置是指存储器的任何物理单元(例如,非易失性存储器设备120上的任何数量的物理存储介质)。存储单元可包括但不限于:物理存储位置的页面、存储器分区、块、扇区、集合或组(例如逻辑页面、逻辑块)等。

在某些实施方案中,设备驱动程序和/或控制器126可向存储客户端116呈现逻辑地址空间134。如本文所用,逻辑地址空间134是指存储器资源的逻辑表示。逻辑地址空间134可包括多个(例如,范围)的逻辑地址。如本文所用,逻辑地址是指用于引用存储器资源(例如,数据)的任何标识符,包括但不限于:逻辑块地址(lba)、柱面/磁头/扇区(chs)地址、文件名、对象标识符、索引节点、通用唯一标识符(uuid)、全局唯一标识符(guid)、哈希码、签名、索引条目、范围、程度等。

用于非易失性存储器设备120的设备驱动程序可保持元数据135,诸如逻辑到物理地址映射结构,以将逻辑地址空间134的逻辑地址映射到一个或多个非易失性存储器设备120上的介质存储位置。设备驱动程序可被配置为向一个或多个存储客户端116提供存储服务。存储客户端116可包括在计算设备110上运行的本地存储客户端116和/或可经由网络115和/或网络接口113访问的远程存储客户端116。存储客户端116可包括但不限于:操作系统、文件系统、数据库应用程序、服务器应用程序、内核级进程、用户级进程、应用程序等。

设备驱动程序可以通信地耦接到一个或多个非易失性存储器设备120。一个或多个非易失性存储器设备120可包括不同类型的非易失性存储器设备,包括但不限于:固态存储设备、半导体存储设备、san存储资源等。一个或多个非易失性存储器设备120可包括一个或多个相应控制器126和非易失性存储器介质122。设备驱动程序可经由传统块i/o接口131提供对一个或多个非易失性存储器设备120的访问。另外,设备驱动程序可通过scm接口132提供对增强功能的访问。元数据135可用于控制和/或跟踪通过块i/o接口131、scm接口132、高速缓存接口133或其他相关接口中的任何一个执行的数据操作。

高速缓存接口133可暴露可经由用于非易失性存储器设备120的设备驱动程序访问的特定于高速缓存的特征。此外,在一些实施方案中,呈现给存储客户端116的scm接口132可访问由一个或多个非易失性存储器设备120和/或一个或多个控制器126实现的数据转换。

设备驱动程序可通过一个或多个接口向存储客户端116呈现逻辑地址空间134。如上所述,逻辑地址空间134可包括多个逻辑地址,每个逻辑地址对应于一个或多个非易失性存储器设备120的相应介质位置。设备驱动程序可保持元数据135,该元数据包括逻辑地址和介质位置之间的任意对任意映射,等等。

设备驱动程序还可以包括非易失性存储器设备接口139和/或与之通信,该非易失性存储器设备接口被配置为通过总线125将数据、命令和/或查询传输到一个或多个非易失性存储器设备120,所述总线可以包括但不限于:处理器111的存储器总线、外围部件高速互连(pciexpress或pcie)总线、串行高级技术附件(ata)总线、并行ata总线、小型计算机系统接口(scsi)、火线、光纤通道、通用串行总线(usb)、pcie高级交换(pcie-as)总线、网络115、infiniband、scsirdma等。非易失性存储器设备接口139可以使用一个或多个输入输出控制(io-ctl)命令、一个或多个io-ctl命令扩展、远程直接存储器存取等来与一个或多个非易失性存储器设备120通信。

通信接口113可包括一个或多个网络接口,这些网络接口被配置为将计算设备110和/或控制器126通信耦接到网络115和/或耦接到一个或多个网络可访问的远程存储客户端116。存储客户端116可包括在计算设备110上运行的本地存储客户端116和/或可经由网络115和/或网络接口113访问的远程存储客户端116。控制器126是一个或多个非易失性存储器设备120的一部分和/或与之通信。虽然图1a示出了单个非易失性存储器设备120,但本公开在这方面不受限制,并且可适于结合任何数量的非易失性存储器设备120。

非易失性存储器设备120可以包括非易失性存储器介质122的一个或多个存储器元件123,其可以包括但不限于:随机存取存储器(ram)、电阻ram(reram)、忆阻器存储器、可编程的金属化单元存储器、相变存储器(pcm、pcme、pram、pcram、双向统一存储器、硫属化物ram或c-ram)、nand闪存存储器(例如,2dnand闪存存储器、3dnand闪存存储器)、nor闪存存储器、纳米随机存取存储器(纳米ram或nram)、基于纳米晶体线的存储器、基于硅氧化物的亚10纳米工艺存储器、石墨烯存储器、氧化硅氮氧化硅(sonos)、可编程金属化单元(pmc)、导电桥接ram(cbram)、磁阻ram(mram)、磁存储介质(例如,硬盘、磁带等)、光存储介质等等,以及其他可能的和本文设想的设备。在某些实施方案中,非易失性存储器介质122的一个或多个存储器元件123包括存储级存储器(scm)。

虽然传统技术(诸如nand闪存)可以是块和/或页面可寻址的,但在一个实施方案中,存储级存储器是字节可寻址的。在另外的实施方案中,scm可以比nand闪存更快和/或具有比nand闪存更长的寿命(例如,耐久性);可具有比dram更低的成本、使用较少的功率,和/或具有更高的存储密度;或提供与其他技术相比的一个或多个其他好处或改进。例如,存储级存储器可以包括reram、忆阻器存储器、可编程金属化单元存储器、相变存储器、纳米ram、基于纳米晶体线的存储器、基于硅氧化物的亚10纳米工艺存储器、石墨烯存储器、sonos存储器、pmc存储器、cbram、mram和/或其变体的一个或多个非易失性存储器元件123。

尽管非易失性存储器介质122在本文中被称为“存储器介质”,但在各种实施方案中,非易失性存储器介质122可更一般地包括能够记录数据的一个或多个非易失性记录介质,其可被称为非易失性存储器介质、非易失性存储介质等。此外,在各种实施方案中,非易失性存储器设备120可以包括非易失性记录设备、非易失性存储器设备、非易失性存储设备,等等。

非易失性存储器介质122可包括一个或多个非易失性存储器元件123,所述非易失性存储器元件可包括但不限于:芯片、封装、平面、管芯等。控制器126可被配置为管理非易失性存储器介质122上的数据操作,并可以包括一个或多个处理器、可编程处理器(例如,fpga)、asic、微控制器等。在一些实施方案中,控制器126被配置为将数据存储在非易失性存储器介质122上和/或从该非易失性存储器介质读取数据,以将数据传输到非易失性存储器设备120/从该非易失性存储器设备传输数据等。

控制器126可通过总线127通信地耦接到非易失性存储器介质122。总线127可以包括用于向非易失性存储器元件123传送数据/从该非易失性存储器元件传送数据的i/o总线。总线127可以还包括用于将寻址和其他命令及控制信息传送到非易失性存储器元件123的控制总线。在一些实施方案中,总线127可并行地将非易失性存储器元件123通信耦接到控制器126。该并行访问可允许非易失性存储器元件123作为组被管理,从而形成逻辑存储器元件129。逻辑存储器元件可被划分为相应的逻辑存储单元(例如逻辑页面)和/或逻辑存储器分组(例如逻辑块)。逻辑存储单元可通过将非易失性存储器元件中的每一个的物理存储单元逻辑地组合来形成。

在某些实施方案中,控制器126可使用字线的地址在非易失性存储器元件123内组织字线块,使得字线被逻辑地组织成单调增加的序列(例如,将字线的地址解码和/或转换成单调增加的序列等)。在又一个实施方案中,非易失性存储器元件123内的块的字线可物理地布置在字线地址的单调增加的序列中,其中被连续寻址的字线在物理上也相邻(例如,wl0,wl1,wl2,…wln)。

控制器126可包括在计算设备110上执行的设备驱动程序和/或与之通信。设备驱动程序可经由一个或多个接口131、132和/或133向存储客户端116提供存储服务。在一些实施方案中,设备驱动程序提供块设备i/o接口131,存储客户端116通过该接口执行块级i/o操作。作为另外一种选择或除此之外,设备驱动程序可提供存储级存储器(scm)接口132,该接口可向存储客户端116提供其他存储服务。在一些实施方案中,scm接口132可包括对块设备接口131的扩展(例如,存储客户端116可通过对块设备接口131的扩展或添加来访问scm接口132)。作为另外一种选择或除此之外,scm接口132可作为单独的api、服务和/或库提供。

设备驱动程序可被进一步配置为使用非易失性存储器系统102提供用于缓存数据的高速缓存接口133。设备驱动程序还可包括非易失性存储器设备接口139,该接口被配置为通过总线125将数据、命令和/或查询传输到控制器126,如上所述。

图1b示出了可包括一个或多个存储器管芯和/或芯片212的非易失性存储设备210的一个实施方案。非易失性存储设备210可以是上述非易失性存储器设备120的一个实施方案。在一些实施方案中,存储器管芯212包括存储器单元阵列200(例如,二维(2d)阵列、三维(3d)阵列等)、管芯控制器220和读/写电路230a/230b。在某些实施方案中,存储器单元阵列200被组织成擦除块和页面。例如,存储器单元阵列200可包括多个擦除块,每个擦除块包括一个或多个页面。

如本文所用,擦除块是指可在单个擦除命令中擦除的最小单元。如本文所用,页面是指可由(例如,写入)单个写入/编程命令编程的最小单元。一般来讲,单元的页面小于擦除块,并且擦除块包括多个页面。需注意,对于多层单元(mlc)和三层单元(tlc)或其中每个单元存储多于一个比特的信息的其他存储器单元,单元的页面可具有写入到它们的多个逻辑页面的数据。例如,mlc页面可包括上部(逻辑)页面和下部(逻辑)页面。又如,tlc页面可以包括以下逻辑页面:上部页面、中间页面和下部页面。

在一个实施方案中,通过各种外围电路对存储器阵列200的存取在阵列的相对侧上以对称方式实现,使得每侧的接入线路和电路的密度减少一半。在又一个实施方案中,读/写电路230a/230b可包括允许并行地读取存储器单元的页面和/或将其编程的多个感测块250。

在各种实施方案中,可经由行解码器240a/240b使用字线来对存储器阵列200进行寻址,和经由列解码器242a/242b使用位线来对该存储器阵列进行寻址。在一些实施方案中,控制器244被包括在同一存储器设备210(例如,可移除存储卡或封装)中,作为一个或多个存储器管芯212。控制器244可以是非易失性存储器介质控制器126的一个实施方案。命令和数据经由线路232在主机和控制器244之间传输,并且经由线路234在控制器和一个或多个存储器管芯212之间传输。一个具体实施可包括多个芯片212。

在一个实施方案中,管芯控制器220与读/写电路230a/230b配合以在存储器阵列200上执行存储器操作。在某些实施方案中,管芯控制器220包括分布式编程部件150、状态机222和片上地址解码器224。在一个实施方案中,状态机222包括分布式编程部件150的至少一部分。在又一个实施方案中,控制器244包括分布式编程部件150的至少一部分。在各种实施方案中,感测块250中的一个或多个包括分布式编程部件150的至少一部分。参考图1b讨论的一个或多个页面编程部件150可类似于参考图1a讨论的一个或多个页面编程部件150。

在一个实施方案中,状态机222提供存储器操作的芯片级控制。片上地址解码器224提供地址接口,其用以在由主机或存储器控制器使用的地址到由解码器240a、240b、242a和242b使用的硬件地址之间转换。在某些实施方案中,状态机222包括分布式编程部件150的一个实施方案。在某些实施方案中,分布式编程部件150体现为设备驱动程序中的软件,控制器244中的硬件和/或管芯控制器220和/或状态机222中的硬件。在一个实施方案中,管芯控制器220、分布式编程部件150、解码器电路224、状态机电路222、解码器电路242a、解码器电路242b、解码器电路240a、解码器电路240b、读/写电路230a、读/写电路230b,和/或控制器244中的一个或任何组合可被称为一个或多个管理电路。

分布式编程部件150将mlc或tlc单元的编程操作分布在时域中,例如,通过将操作拆分为若干阶段。分布式编程操作的第一步包括控制写电路(或其他编程硬件)将电压脉冲施加到待编程的页面(物理)(被称为“编程页面”),直到部分最终电荷被编程到浮栅。这被称为将编程页面“部分编程”,并且是分布式编程操作的第一编程阶段。

需注意,由于部分编程的电荷不是最终电荷,因此页面中将存在误码。这里,误码是由于部分编程的电荷不匹配准确表示编程数据所需的最终电荷而引起的。然而,将存储足够的电荷来使得从部分编程页面读取的数据具有可校正的误码量。在一些实施方案中,部分编程的电荷小于最终编程电荷。响应于发出写入命令的主机(例如,主机计算设备110)来执行该第一阶段。这里,写入命令可包括至少一个逻辑块地址(“lba”)和将写入该一个或多个lba的数据。在某些实施方案中,将高频使用的lba分配给存储器介质的发生分布式编程的区域。

第一阶段中的编程脉冲的数量低于将页面“完全”编程所需的最大值。编程脉冲的数量(例如,上文讨论的n1)使得感测/解码操作将修复误码。然而,部分编程的电荷将随着时间的推移而漂移,并且在一段时间之后,感测/解码操作将不再能够修复误码。因此,部分编程状态在不久的将来的有限时间段内有效。一般来讲,预计该时间段为几分钟至几小时。在某些实施方案中,数据可在一天或数天内保持有效。可以基于各种因素来选择特定时间量(例如,“有效期”),这些因素诸如所使用的工艺、编程时使用的参数(例如,电压、电压阶跃、脉冲持续时间、验证电压等)、温度、介质的年龄等。例如,经历了许多个p/e循环的存储器单元往往具有比经历较少p/e循环的存储器单元更快的电压漂移并因此具有更短的数据保持时间。

分布式编程部件150保持部分编程的页面的表(或其他合适的数据结构),本文称为“部分编程表”。在一个实施方案中,部分编程表存储在非易失性存储器介质122上的易失性存储器中,诸如dram、sram、ddr锁存器等。另选地,如果对于易失性存储器而言太大,部分编程表可被编程到nand。分布式编程操作的第二步包括将编程页面添加到部分编程表并指示特定页面被部分编程。在一些实施方案中,分布式编程部件150指示部分编程页面的有效期,如下文详细讨论。在各种实施方案中,分布式编程部件150保持多个部分编程表,例如每个存储器管芯212有一个部分编程表,等等。

分布式编程操作的第三步包括分布式编程部件150向主机(例如,主机计算设备110)指示对应于该编程页面的一个或多个lba被成功编程。这里,确认写入操作可以特定于具体实施,因为不同的主机接口可以使用不同的机制来确认该写入。不同接口的示例包括但不限于:基于pci的nvme(“高速非易失性存储器”)、emmc(“嵌入式多媒体卡”)等。根据接口,分布式编程部件可设置由主机轮询的状态位/寄存器,向主机发送响应消息,等等。

在一个实施方案中,分布式编程部件150使用主机可以读取的状态位来指示写入操作的成功完成,即使数据仅被部分编程。可选地,分布式编程部件150可以向主机指示lba处于部分编程状态。此时,主机或存储客户端116(诸如os)可开始对存储器设备闪存的另一个存取操作,诸如写入操作或读取操作。有利地,使用分布式编程操作,主机能够更快地使用通道(例如,向存储器管芯212发出新的存储操作命令),如下文参考图6所述。因此,分布式编程操作允许更高的吞吐量和更好的编程操作性能。

分布式编程操作包括第四步,即分布式编程部件150例如以周期的间隔扫描其一个或多个部分编程表,以识别部分编程的页面。响应于识别部分编程页面,分布式编程部件150可将页面编程到设备中所需的最终电荷水平。这样做包括第二编程阶段,其中将额外的电压脉冲施加到该页面,直到最终电荷被编程到浮栅。在某些实施方案中,作为第二编程阶段的一部分,从部分编程页面读取页面数据,其中将该页面编程到最终电荷水平包括使用所读取的页面数据对该页面进行编程。

如上所述,在分布式编程操作的第二编程阶段期间,分布式编程部件150可施加至多第二数量的编程脉冲(例如,上文讨论的n2)以将页面编程到其最终电荷。这被称为将页面“完全编程”。在某些实施方案中,分布式编程部件150读取部分编程页面(回忆一下,处于部分编程状态的页面存储足够的电荷以使误码可被校正)并将所读取的值编程到最终电荷水平。在某些实施方案中,第二编程阶段使用较低的编程电压来避免编程干扰相邻页面。

在某些实施方案中,非易失性存储器介质122限于顺序页面编程次序。这里,物理页面必须被顺序地编程,而不是以随机编程次序编程。在此类实施方案中,分布式编程部件150将按所需次序对每个页面进行部分编程。此外,分布式编程部件还可在以后的时间将每个页面完全编程到其最终电荷状态。

在一个实施方案中,分布式编程部件150可在将页面完全编程之前“刷新”存储在部分编程页面中的数据。例如,分布式编程部件150可施加少量编程脉冲(例如,一个或两个),以便将存储在浮栅中的电荷水平调节至更接近最终电荷值而不将页面完全编程的水平。分布式编程部件150可刷新存储在部分编程页面中的数据以重置或延长有效期。以后,分布式编程部件150可在重置或延长的有效期到期时将页面完全编程。

作为分布式编程操作的第五步,分布式编程部件150更新其一个或多个部分编程表以指示编程页面现在被完全编程。在一个实施方案中,指示编程页面现在被完全编程包括从一个或多个部分编程表中移除对应于该编程页面的地址。此第五步发生在分布式编程部件150将页面完全编程之后。当分布式编程部件150已经通知主机对应于该编程页面的lba处于部分编程状态时,分布式编程部件150还通知主机lba现在处于完全编程状态。

图2示出了包括多个存储元件的nand串255的一个实施方案。在一些实施方案中,图2中描绘的nand串255包括串联连接并且位于第一选择晶体管270与第二选择晶体管272之间的四个晶体管260、262、264、266。在一些实施方案中,晶体管260、262、264和266包括控制栅极和浮栅。在一个实施方案中,控制栅极290、292、294和296连接到字线或包括字线的一部分。在又一个实施方案中,晶体管260、262、264和266是存储元件、存储单元等,也称为存储器单元。在一些实施方案中,存储元件可包括多个晶体管260、262、264和266。

在一些实施方案中,第一选择晶体管270经由漏极选择栅极sgd将nand串连接选通/连接到位线280。在某些实施方案中,第二选择晶体管272经由源极选择栅极sgs将nand串连接选通/连接到源极线282。在又一个实施方案中,第一选择晶体管270通过向对应的选择栅极286施加电压来受到控制。在一些实施方案中,第二选择晶体管272通过向对应的选择栅极288施加电压来受到控制。

如图2所示,在一个实施方案中,源极线282连接到nand串255中的每个晶体管/存储单元260、262、264和266的源极。在一些实施方案中,nand串255可包括已被编程的一些存储元件260、262、264和266和未被编程的一些存储元件260、262、264和266。如下文更详细所述,分布式编程部件150控制存储设备诸如nand串255的部分是否用于存储器和/或存储操作。

图3是描绘多个nand串320、340、360和380的电路图。nand串320、340、360和380中的每一个可基本上类似于上文所述的nand串255。使用nand结构的闪存存储器系统的架构可包括若干nand串320、340、360和380。例如,图3示出包括多个nand串320、340、360和380的存储器阵列200中的nand串320、340、360和380。

在所描绘的实施方案中,每个nand串320、340、360和380包括漏极选择晶体管322、342、362和382,源极选择晶体管327、347、367和387,以及存储元件323至326、343至346、363至366和383至386。虽然为简单起见为每个nand串320、340、360、380示出了四个存储元件323至326、343至346、363至366、383至386,一些在nand串320、340、360和380可以包括任何数量的存储元件(例如,三十二个、六十四个等等的存储元件,以及其他可能的和本文设想的存储元件)。

在一个实施方案中,nand串320、340、360和380通过源极选择晶体管327、347、367和387连接到源极线319。可使用选择线sgs来控制源极端选择晶体管。在一个实施方案中,各种nand串320、340、360和380通过漏极选择晶体管322、342、362和382连接到位线321、341、361、381。漏极选择晶体管322、342、362和382可由漏极选择线sgd控制。在一些实施方案中,选择线不一定需要在nand串320、340、360和380之间共用;即,可针对不同的nand串320、340、360和380提供不同的选择线。

如上所述,每个字线wl0至wln包括一个或多个存储元件323至383、324至384、325至385和326至386。在所描绘的实施方案中,每个位线321、341、361、381和相应的nand串320、340、360和380包括存储器阵列200、存储块、擦除块等的列。在一些实施方案中,字线wl0至wln包括存储器阵列200、存储块、擦除块等的行。在一些实施方案中,每个字线wl0至wln将每个存储元件323至383、324至384、325至385和326至386的控制栅极连接成一行。另选地,控制栅极可由字线wl0至wln本身提供。在一些实施方案中,字线wl0至wln可包括数十、数百、数千、数百万等个存储元件323至383、324至384、325至385和326至386。

在一个实施方案中,每个存储元件323至326、343至346、363至366和383至386被配置为存储数据。例如,当存储一比特的数字数据时,每个存储元件323至326、343至346、363至366和383至386的可能阈值电压(“vth”)的范围可分成两个范围,这两个范围被分配逻辑数据“1”和“0”。在nand类型闪存存储器的一个示例中,在存储元件323至326、343至346、363至366和383至386被擦除之后,vth可能为负并被定义为逻辑“1”。在一个实施方案中,编程操作之后的vth为正并被定义为逻辑“0”。在一些实施方案中,当vth为负并且尝试读取时,存储元件323至326、343至346、363至366和383至386将接通以指示逻辑“1”被存储。在又一个实施方案中,当vth为正并且尝试读取操作时,存储元件将不接通,这指示逻辑“0”被存储。

每个存储元件323至383、324至384、325至385和326至386还可存储多个层级的信息,例如,多个比特的数字数据。在此类实施方案中,vth值的范围被划分为数据的层级的数量。例如,如果八个层级的信息可被存储在每个存储元件323至326、343至346、363至366和383至386中,则将有八个vth范围,其分配给数据值‘111’、‘110’、‘101’、‘100’、‘011’、‘010’、‘001’和‘000’。存储三比特数字数据的存储元件在本文中被称为三层单元(“tlc”)。

在nand类型存储器的一个示例中,擦除操作之后的vth可以为负并被定义为‘111’。正vth值可用于‘110’、‘101’、‘100’、‘011’、‘010’、‘001’和‘000’状态。在一个实施方案中,被编程到存储元件323至326、343至346、363至366和383至386中的数据和存储元件323至326、343至346、363至366和383至386的阈值电压范围之间的具体关系取决于适用于存储元件323至326、343至346、363至366和383至386的数据编码方案。

图4示出了分布式编程部件150的一个实施方案。分布式编程部件150可基本上类似于上文关于图1a和1b所述的分布式编程部件150。一般来讲,如上所述,响应于来自主机的写入命令,分布式编程部件150例如通过施加第一数量的编程脉冲来将页面、字线或其他组的存储器元件编程到部分编程状态。这称为分布式编程操作的第一阶段。分布式编程部件150确认写入命令,从而释放资源,使得主机可以在处于部分编程状态的页面/字线上执行一个或多个额外的存储操作。

在稍后的时间点,分布式编程部件150例如通过施加第二数量的编程脉冲来将页面/字线编程到完全编程状态。这称为分布式编程操作的第二阶段。在所描绘的实施方案中,分布式编程部件150包括主机接口部件405、部分编程部件410和完全编程部件415,它们在下文中更详细地描述。在一个实施方案中,部件405至415例如经由数据通信总线通信地彼此耦接。

在一个实施方案中,主机接口部件405被配置为接收将数据写入存储器的指令,例如从主机接收写入命令。在某些实施方案中,写入数据的指令是从主机接收的写入(编程操作)命令,该指令包括一个或多个逻辑块地址(“lbas”)和待写入一个或多个lba的数据。在某些实施方案中,主机接口部件405将待写入的数据存储到存储器设备的缓冲器或高速缓存中。在一个实施方案中,待写入的数据可存储在存储器设备的页面缓冲器或其他数据锁存器中。在另一个实施方案中,数据存储在控制器的易失性存储器、主机设备的易失性存储器、用于部分编程的专用高速缓存等中。

此外,主机接口部件405被配置为在页面/字线处于部分编程状态之后确认写入命令。在某些实施方案中,主机接口部件405向主机指示页面处于部分编程状态。在此类实施方案中,主机接口部件405还可以向主机指示该页面何时被编程到完全编程状态。在一个实施方案中,使用一比特值来指示该页面是处于部分编程状态还是完全编程状态。

在一个实施方案中,部分编程部件410被配置为响应于写入数据的指令来对存储器设备的页面、字线或其他组的存储器元件进行编程。如本文所用,“部分编程状态”是指这样的状态,其中从页面/字线读取的数据具有可校正量的误码(例如,包括小于可由ecc校正的最大值的错误的数量),但其中少于全部量的电荷被存储在存储器单元中。部分编程部件410将页面/字线编程到可以第一阈值量的错误(例如,可校正量的误码)从字线读取数据的程度。

例如,部分编程状态可通过施加小于全部数量的编程脉冲和/或通过使用比在非分布式编程操作中使用的那些低的编程验证电压来实现。这里,部分编程状态是这样的临时状态,其中部分编程的数据在某个持续时间内是可读的(具有可校正数量的误码),该持续时间被称为“有效期”或“保持时间”,之后错误的数量可能例如由于电压漂移而不再能够校正。

在某些实施方案中,部分编程部件410将页面或字线编程到部分编程状态包括使用第一数量的编程脉冲或循环来对该页面/字线进行编程。这里,选择编程脉冲的数量以将页面/字线置于部分编程状态,其中数据在存在错误的情况下可读,但未被完全编程。例如,在tlc单元的页面的非分布式编程操作可采用8个编程脉冲的情况下,部分编程部件410可在分布式编程操作的第一阶段期间仅使用5个编程脉冲来对页面进行编程。在一个实施方案中,部分编程部件410(或另一个部件)在分布式编程操作的第一阶段期间暂时将最大环计数设置为数量n1,n1的值被选择为将该页面中的第一子组存储器单元编程到期望的值。

在某些实施方案中,部分编程部件410通过使用较低的编程验证电压来将该页面或字线编程到部分编程状态。例如,用于部分编程的编程验证电压可以比完全编程状态的编程验证电压更接近读取电压阈值。这里,尽管编程验证电压较低,但是基于有效性的预期电压漂移量可能不足,导致存储在页面/字线中的数据不可校正。在一个实施方案中,部分编程部件410(或另一个部件)在分布式编程操作的第一阶段期间暂时降低非易失存储器介质122的编程验证电压。在某些实施方案中,部分编程部件410通过对页面/字线进行编程直到阈值数量的单元处于第一组编程验证电压阈值,来将该页面或字线编程到部分编程状态。

在一个实施方案中,完全编程部件415被配置为在预定时间之后将存储器设备的页面、字线或其他组的存储器元件编程到完全编程状态。如本文所用,“完全编程状态”是指这样的状态,其中例如由于将全部量的编程脉冲施加到页面/字线而存储全部量的电荷,所读取的值满足第二(更高)组编程验证电压(阈值),所读取的值中的误码的数量小于阈值量,等等。完全编程状态也是常规的非分布式编程操作的最终结果。将页面/字线编程到完全编程状态是分布式编程操作的第二阶段。

在一些实施方案中,预定时间是有效期的结束。例如,完全编程部件415可在有效期届满时对部分编程页面/字线进行完全编程。预定的时间段足够用于主机在分布式编程操作的第一阶段和第二阶段之间执行一个或多个存储操作。在某些实施方案中,完全编程部件415使用比部分编程部件410用来编程到部分编程状态低的编程电压和/或编程电压阶跃来将页面/字线编程到完全编程状态。可使用较低的电压和/或电压阶跃来将对相邻页面/字线的破坏最小化。

在一些实施方案中,完全编程部件415通过搜索非易失性存储器介质122的高速缓存来获取用于分布式编程操作的第二阶段的数据。在一个实施方案中,完全编程部件415确定要写入页面的数据是否仍处于页面缓冲器或数据锁存器中。在这种情况下,不需要从部分编程的单元重新读取数据,从而减少了分布式编程操作的第二阶段的持续时间。在另一个实施方案中,完全编程部件415搜索控制器的易失性存储器、主机设备的易失性存储器等来查找待写入页面的数据。在第三实施方案中,完全编程部件415从专用于存储部分编程数据的内部ram中检索待写入的数据。在其他实施方案中,完全编程部件415通过在有效期内读取和解码部分编程页面/字线来获取用于分布式程序操作的第二阶段的数据。

图5示出了分布式编程部件150的另一个实施方案。分布式编程部件150可基本上类似于上文关于图1至图4所述的分布式编程部件150。一般来说,如上所述,分布式编程部件150适时分配编程操作,例如将操作分成第一阶段和第二阶段,其中在第一阶段之后将存储资源释放给主机,使得可以在第二阶段之前执行一个或多个居间操作。在所描绘的实施方案中,分布式编程部件150包括主机接口部件405、部分编程部件410和完全编程部件415,它们可基本上类似于上文参考图4所述的部件405至415。分布式编程部件150还包括lba使用部件505、选择部件510、表部件515、调度部件520、数据部件525和编程参数部件530中的一个或多个。在一个实施方案中,部件405至415和505至530例如经由数据通信总线通信地彼此耦接。

在各种实施方案中,lba使用部件505被配置为在使用表中跟踪存储器设备(例如,非易失性存储器设备120)的多个lba的使用频率。此类使用表的一个示例是下文参考图9讨论的lba使用频率表950。通常,这些表包括lba身份/值,其处于对应于该lba身份/值的频率计数。在一些实施方案中,“使用频率”是数据写入lba的速率。在其他实施方案中,“使用频率”是指示数据被写入lba的次数的计数。如下文将进一步详细讨论的,选择元件510可基于使用频率来将lba映射到存储器的区域。

在一些实施方案中,跟踪多个lba的使用频率包括每当接收到写入命令时更新该表。例如,lba部件505可检查写入命令中的lba是否存在于常用lba表中。如果lba在常用lba表950中,则lba部件505可将该lba的使用计数递增。否则,如果lba不在常用lba表950中,则lba部件505可创建新条目。在一个实施方案中,lba使用部件505在预定间隔之后丢弃预定数量的最少使用条目。

此外,响应于主机接口部件405接收写入命令,lba使用部件505可识别该写入命令中包括的lba的使用频率。这里,lba使用部件505接收第一lba,其对应于从主机接收的写入命令中的lba。例如,主机接口部件405可以将第一lba传送到lba使用部件505。下文将参考图8进一步详细地讨论跟踪存储器设备的lba的使用频率。

在各种实施方案中,选择部件510将存储器设备的不同区域映射到不同组lba,lba根据使用频率来分组。此外,响应于主机接口部件405接收写入命令,选择部件510可基于写入命令中的使用频率lba来选择存储器设备的用于写入数据的区域。这里,存储器设备的不同区域对应于不同的存储类型。例如,第一区域可以包含三层单元(“tlc”),第二区域可以包含单层单元(“slc”),并且第三区域可以包含用于分布式编程操作的单元。响应于选择第三区域,部分编程部件410将第三区域中的页面/字线编程到部分编程状态。

在一个实施方案中,选择部件510被配置为将lba的映射、列表、数据存储、表、记录等保持到物理存储元件。在某些实施方案中,选择部件510可以将映射保持在非易失性存储器设备120的闪存转换层(ftl)中。如本文所用,ftl可以是非易失性存储器介质控制器126的部件,其将逻辑块地址(lba)从主机映射到非易失性存储器设备120上的物理块地址(pba)。

此外,选择部件510可通过将每个lba的使用频率与一个或多个选择阈值进行比较来将lba分组。例如,如果lba的使用频率低于第一阈值,则将其与对应于该存储器设备的包含三层单元(“tlc”)的区域的lba分在一组。又如,如果lba的使用频率介于第一阈值和大于第一阈值的第二阈值之间,则将其与对应于该存储器设备的包含单层单元(“slc”)的区域的lba分在一组。需注意,数据通常存储到slc区域以实现快速编程性能,随后被转移到tlc区域。回忆一下,slc介质比tlc介质需要更少的脉冲来编程,但需要更多存储元件来存储相同量的数据。

作为第三个示例,如果lba的使用频率高于第二阈值,则将其与对应于包含用于分布式编程操作的单元的区域(例如,存储器设备的部分编程区域)的lba分在一组。在各种实施方案中,该第三区域被称为低编程环计数(“低lpc”)区域,因为与对tlc介质的常规编程操作相比,分布式编程操作的第一阶段使用较少的编程环(脉冲)来对数据进行编程。

在各种实施方案中,这些阈值是动态的并且基于lba使用历史进行调整。例如,可调整所述阈值以保持一定水平的性能,平衡每个存储类型中的数据量,每个存储类型的容量(例如,全部或剩余容量)等。这里,选择部件510可调整选择阈值中的一个或多个以实现上述目标。需注意,所述阈值用于预测(例如,从历史性能)哪些lba是最常用的。这样,可以为最常用的lba保留最佳编程性能。此外,如果在部分编程页面的有效期届满之前再次写入映射到低plc区域的lba,则不需要对该页面进行完全编程。这可能是os、驱动程序等将临时数据写入同一lba的情况。有利地,这节省了时间并且使用较少的功率。

因此,选择部件510可以选择存储器设备的区域来用于将其中的数据编程,选择存储器设备的区域可以包括识别写入命令中的lba所属的组。在某些实施方案中,选择部件510仅在收集到阈值量的使用数据之后基于lba使用频率选择该区域。例如,lba使用频率表在收集到阈值量的数据之前可能难以预测未来的lba使用。这里,收集使用数据包括识别被编程到的lba并跟踪该lba(例如,在一个时间窗口上)被编程的次数。下文将参考图8进一步详细地讨论将lba映射到存储器设备的特定区域。

在各种实施方案中,表部件515存储(以及可选地保持)用于分布式编程操作的一个或多个表。在一些实施方案中,表部件515存储用于识别处于部分编程状态的页面、字线或其他组的存储器元件123的一个或多个部分编程表。部分编程表的示例包括下文参考图9所述的第一部分编程表900和第二部分编程表920。

在各种实施方案中,部分编程表包括对处于部分编程状态的页面、字线或其他组的存储器元件的指示。部分编程表中的每个条目还可包括时间标签,该时间标签指示在有效期内的剩余时间。如上所述,有效期是指部分编程数据保持有效的持续时间(例如,用于将页面、字线或其他组的存储器元件编程到完全编程状态的时间)。在一些实施方案中,表部件515通过随着时间的推移更新时间标签来保持部分编程表。因此,时间标签可用作倒计时到有效期结束时的定时器。因此,表部件515可保持有关哪些(例如tlc)存储元件处于部分编程状态的记录。

此外,表部件515可在每当页面、字线或其他组的存储器元件被部分编程时向部分编程表添加条目,并且还可以在对应的页面、字线或其他组的存储器元件被完全编程时移除部分编程表中的条目。表部件515可基于各种因素来填充时间标签,包括非易失性存储器介质122的年龄、非易失性存储器设备120的温度、用于对字线进行部分编程的编程脉冲的数量等。回忆一下,有效期是分布式编程部件150在将数据完全编程或刷新部分编程状态之前可以等待的最长时间。有效期可等于预期的数据保持时间,或可为预期数据保持时间的一部分。

在某些实施方案中,表部件515存储一个或多个lba使用频率表。在一个实施方案中,表部件515更新lba使用频率表以将包括在推荐中的lba递增,并定期从表中删除最少使用的lba。在某些实施方案中,表部件515基于从表部件515接收的指令来保持lba使用频率表。因此,表部件515可以保持关于哪些lba对应于存储器设备的执行分布式编程操作的区域的记录。

在各种实施方案中,调度部件520被配置为调度部分编程页面(或字线或其他组的存储器元件)以用于编程到完全编程状态。可选地,调度部件520可调度部分编程页面以用于另外编程为“刷新”部分编程状态。在一些实施方案中,调度部件520在部分编程表中搜索过期条目(例如,时间标签小于阈值量的条目)。响应于找到过期条目,调度部件520调度该条目以用于例如由完全编程部件415进行另外的编程。在某些实施方案中,调度部件520可在有效期届满之前调度页面以用于另外的编程,例如由于信道处于空闲状态而到期。因此,分布式编程操作可用作负载平衡工具,以延迟将页面完全编程,直到负载条件改善为止。

在各种实施方案中,数据部件525被配置为获取用于分布式编程操作的第二阶段的数据(例如,用于将处于部分编程状态的页面完全编程)。在某些实施方案中,数据部件525搜索存储器设备的高速缓存(例如,页面缓冲器或其他数据锁存器)来查找对应于部分编程页面(或字线或其他组的存储器元件)的数据。在某些实施方案中,数据部件525对从部分编程页面读取的值进行解码(例如,使用纠错码),以便获取用于分布式编程操作的第二阶段的数据。在各种实施方案中,数据部件525搜索存储器设备的高速缓存中的数据,并且如果存储在高速缓存中的该数据丢失(例如,被覆盖),则从部分编程页面读取/解码数据。值得注意的是,通过避免读取和解码操作,从高速缓存获取数据节省了时间。

在各种实施方案中,编程参数部件530被配置为调节在分布式编程操作中使用的各种参数。这种参数的示例包括但不限于,最大环计数(例如,编程脉冲/循环)、编程验证电压、验证步骤之前的编程脉冲数、可由纠错码校正的误码数量等。

在一个实施方案中,编程参数部件530存储要在分布式编程操作的第一阶段中使用的第一编程验证电压。此处,第一编程验证电压可为低于当在完全编程相同存储器单元时(例如,在分布式编程操作的第二阶段中)所使用的第二编程验证电压的值。在一个实施方案中,第二编程验证电压与用于非分布式编程操作的编程验证电压相同。在某些实施方案中,第一编程验证电压被选择成使得产生当使用纠错码(“ecc”)解码页面时可校正的错误的数量。例如,编程参数部件530可基于当使用ecc解码页面时可校正的错误的数量而根据经验推导出第一编程验证电压。

此外,在某些实施方案中,编程参数部件530可将非易失性存储器介质122的编程验证电压参数设置和/或调节至第一编程验证电压,作为分布式编程操作的第一阶段的初步步骤。此外,在完成分布式编程操作的第一阶段后,编程参数部件530可将编程验证电压参数设置和/或调节至第二编程验证电压(或者恢复到默认编程验证电压)。另选地,编程参数部件530可将非易失性存储器介质122的编程验证电压参数设置和/或调节至第二编程验证电压,作为分布式编程操作的第二阶段的初步步骤。在描述为独立部件时,在某些实施方案中,编程参数部件530是部分编程部件410和/或完全编程部件415的子部件。此外,编程验证电压的值可基于编程到存储器单元的逻辑页面。因此,对于非易失性存储器设备120的mlc和tlc区域,第一编程验证电压可为第一组编程验证电压,并且第二编程验证电压可为第二组编程验证电压。

在一个实施方案中,编程参数部件530存储第一数量的编程脉冲/循环,诸如用于分布式编程操作的第一阶段中的第一最大环计数n1。此处,可选择n1的值以将页面/字线中的第一子组存储器单元编程到期望的值。因此,页面/字线中的误码数量将是使用ecc可校正的级。此外,编程参数部件530可存储第二数量的编程脉冲/循环,诸如用于分布式编程操作的第二阶段中的第二最大环计数n2。同样,可选择n2的值以将页面/字线中的第二子组存储器单元编程到期望的值,第二子组大于第一子组。

在一个实施方案中,编程参数部件530在页面中存储若干误码e,其可使用纠错码来校正。此外,当在控制器级实施时,编程参数部件530可将使用ecc可校正的误码数量e传送到存储器管芯212。另选地,当在管芯级实施时,编程参数部件530可从介质控制器接收使用ecc可校正的误码数量e。

在某些实施方案中,编程参数部件530被配置为解码从页面/字线读取的值(例如,在分布式编程操作的第一阶段中的第一数量的电压脉冲之后)以识别所读取的值中的误码数量,并且确定所读取的值中的误码数量是否小于第一阈值量(例如,可使用ecc校正的误码数量)。类似地,编程参数部件530可被配置为在分布式编程操作的第二阶段期间解码从页面/字线读取的值,并且识别所读取的值中的误码数量,以便确定数据是否完全编程(例如,由错误的数量小于第二阈值指示)。

图6描绘了根据本公开的实施方案的分布式编程操作的时间线600。时间线600示出了非分布式编程操作605与分布式编程操作610之间的定时差异。在所描绘的实施方案中,分布式编程操作610包括第一阶段615和第二阶段620。时间线600开始于接收到对数据进行编程的指令,例如,由主机发出写入命令的时间t0。在所描绘的实施方案中,数据包括第一逻辑页面和第二逻辑页面,例如用于编程到mlc的字线或物理页面。

非分布式编程操作605以写入传输步骤625开始。此处,加载用于写入到第一逻辑页面的数据。例如,在此步骤期间,从主机接收并被存储在处于闪存管理级的asic的数据可被传输到管芯级缓冲区,诸如传输数据锁存器(xdl)或其他数据锁存器(adl、bdl、cdl、ddl等)。在写入传输步骤625之后,非分布式编程操作605包括第一完全编程步骤630,其中第一逻辑页面被完全编程到闪存存储器。该非分布式编程操作605继续加载用于第二逻辑页面的数据的另一写入传输步骤625。然后,该非分布式编程操作605以第二完全编程步骤635结束,其中第二逻辑页面被完全编程到闪存存储器。

如上所述,“完全编程”每个逻辑页面包括应用全部量的编程脉冲并将所存储的电荷与第二组编程验证电压进行比较。请注意,非分布式编程操作605在时间t1结束。此时,该信道再次可供640主机使用。在某些实施方案中,分布式编程部件150和/或主机接口部件405向主机指示写入命令已完成(例如,确认写入命令)。

该分布式编程操作610也以写入传输步骤625开始,或加载用于写入到第一逻辑页面的数据。在写入传输步骤625之后,分布式编程操作610包括第一部分编程步骤645,其中第一逻辑页面被部分编程到闪存存储器。接下来,另一个写入传输步骤625发生,其中加载用于第二逻辑页面的数据。然后,分布式编程操作610包括第二部分编程步骤650,其中第二逻辑页面被部分编程到闪存存储器。这以分布式编程操作610的第一阶段615结束。

如上所述,“部分编程”每个逻辑页面包括应用足够量的编程脉冲来存储足够的电荷,使得数据以可校正的误码数量从页面读取。请注意,分布式编程操作610在时间t2结束。此时,该信道再次可供640主机使用。在某些实施方案中,分布式编程部件150和/或主机接口部件405向主机指示写入命令已完成(例如,确认写入命令)。由于各个部分编程步骤645、650具有比对应的四个编程步骤630、635较短的持续时间,所以第一阶段615在非分布式编程操作605之前结束并且主机能够更快使用该信道。

在一个实施方案中,通过应用减少的编程脉冲数来实现部分编程。在另一个实施方案中,通过在低于第二组编程验证电压的第一组编程验证电压处验证来实现部分编程。在第三实施方案中,部分编程可通过应用编程脉冲并读取数据直到数据以可校正的误码数量从页面读取来实现。

在稍后的时间点,分布式编程操作610以第二阶段620结束。第二阶段620以加载用于第一逻辑页面的数据的读取步骤655开始,或者通过从存储器高速缓存(例如,页面缓冲器或内部ram)获取数据,或者通过读取/解码已存储至第一逻辑页面的值。然后,第二阶段620包括第三编程步骤660,其中第一逻辑页面被完全编程。接下来,另一读取步骤655发生,其中加载用于第二逻辑页面的数据(或者通过从存储器高速缓存获取数据,或者通过读取/解码已存储至第二逻辑页面的值)。最后,第二阶段620包括第四编程步骤665,其中第二逻辑页面被完全编程。

图7为根据本公开实施方案的描绘用于分布式编程操作的管芯级具体实施的一个过程700的流程图。在一个实施方案中,过程700由管芯控制器220执行,具体地讲,由管芯控制器220内的分布式编程部件150执行。过程700开始,并且介质控制器向管芯发送三个参数(参见步骤705)。此处,介质控制器发送:a)可由错误校正机构修正的位翻转(例如,误码)的量(例如,使用纠错码解码),b)在第一验证步骤之前要执行的第一编程脉冲数(例如,读取/解码存储的值并与原始数据进行比较),以及c)在分布式编程操作的第一阶段中的最大的编程脉冲数(例如,n1)。

需注意,对于闪存介质,编程操作是多相操作,其中存储元件以“脉冲”对存储单元施加递增量的电压,以使单元中的存储电荷增加。为了验证,存储元件读取单元的值以确定单元的电压是否在指示已编程该单元的特定范围内(例如,根据分布式编程操作的阶段,或者为部分编程的电压或者为完全编程的电压)。如果读取电压在范围内,则存储元件停止编程操作,并且返回到可执行新操作的就绪状态。如果不在范围内,则存储元件施加另一量的电压并且重新读取该单元以确定该单元的电压是否在指示已编程该单元的特定范围内。此过程重复直到存储元件的单元被编程(或intel达到最大的编程脉冲数)。

在步骤710处,管芯控制器220接收三个参数并将其保存至内部ram。接下来,在步骤715处,管芯控制器220确定编程操作是否已达到最大的编程脉冲数(例如,n1)。如果达到最大的编程脉冲数,则过程700结束。在一些实施方案中,管芯控制器220指示响应于达到最大脉冲数而单元电压不处于该范围内的错误状态。否则,管芯控制器220发送下一个编程脉冲并增加脉冲计数(参见步骤720)。

接下来,在步骤725处,管芯控制器220确定编程脉冲数是否处于“不需要读取”范围内,如在第一验证步骤之前要执行的第一编程脉冲数所指示的。如果脉冲数处于“不需要读取”范围内,则过程700返回到确定是否达到最大编程脉冲数。否则,管芯控制器220执行感测操作,其中从编程单元读取电压值(参见步骤730)。此外,管芯控制器220对所读取的值进行解码(例如,以生成数据)。

在步骤735处,管芯控制器220将所读取的数据与源数据进行比较,并对位翻转(例如,误码)数进行计数。在740处,管芯控制器220然后确定位翻转的量是否可校正(例如,使用存储在ram中的参数)。如果位翻转的量是可校正的,则过程700结束。否则,如果位翻转的量是不可校正的,则过程700返回到确定是否达到最大编程脉冲数。

图8描绘了根据本公开的实施方案的一个过程800,用于基于lba使用频率将lba映射到合适的闪存区域。过程800可由分布式编程部件150和/或非易失性存储器介质控制器126实现。由于某些操作系统(或驱动程序)文件、设置等,某些数据总是存储在同一lba中。如上文所讨论的,非易失性存储器介质控制器126可使传入数据初始写入到slc区域(用于改进的写入性能)并且随后传输到tlc(用于改进的存储密度)。然而,这种方法可能会不必要地重新定位属于lba的数据,该数据将很快被重新写入。对于此类情况,重新定位数据浪费精力和时间,并为存储器介质增加了不必要的磨损。

因此,过程800可用于识别最佳闪存存储类型(例如,slc、tlc或低plc)。过程800开始于接收第一lba,例如,来自从用户接收(例如,从主机110接收,参见步骤805)的写入lba命令。分布式编程部件150然后在频繁使用的lba的表中搜索第一lba,诸如下文讨论的lba使用频率表950(参见步骤810)。因此,分布式编程部件150确定是否在表中找到第一lba(参见决策815)。

响应于在表中找到第一lba,分布式编程部件150增加该lba的使用计数(例如,更新频繁使用的lba的表,参见步骤820)。否则,如果第一lba不在表中,则分布式编程部件150在频繁使用的lba的表中创建新条目,其初始使用计数值为一(参见步骤825)。

接下来,分布式编程部件150在频繁使用的lba的表中对lba进行排序,在表的开头布置最频繁使用的lba,并且在表的末尾布置最不频繁使用的lba(占据最后的条目,参见步骤830)。每n次通过,分布式编程部件150将从表中删除(移除)一定数量(表示为“x”)的最后条目(参见步骤835)。这将移除最少使用的lba,并保持表大小不会变得无法管理。

过程800包括分布式编程部件150确定第一lba的使用计数是否高于与高lba使用对应的第一阈值(例如,“高使用”阈值,参见决策840)。如果第一lba的使用计数高于第一阈值,则分布式编程部件150将第一lba映射到存储器设备的低编程环计数(“低plc”)区域,其中分布式编程发生(例如,闪存存储器的“分布式编程区域”,参见步骤845)。否则,分布式编程部件150确定第一lba的使用计数是否高于与介质lba使用对应的第二阈值(例如,“介质使用”阈值,参见决策850)。如果第一lba的使用计数高于第一阈值,则分布式编程部件150将第一lba映射到存储器设备的单层单元(“slc”)区域(参见步骤855)。否则,分布式编程部件150将第一lba映射到存储器设备的三层单元(“tlc”)区域,其中发生非分布式编程(参见步骤860)。过程800结束。

步骤805至835是数据收集步骤,并且可收集用于预测lba的未来使用的历史数据。在某些实施方案中,不实施步骤840至860直到收集到足够数据为止。一旦收集了阈值量的数据,则分布式编程部件150可基于使用智能地将lba映射到存储区域(例如,存储类型),其中历史使用用于预测lba将在不久的将来再次被写入的可能性。因此,分布式编程部件150和/或非易失性存储器介质控制器126可使用常规映射/分配技术来选择pba直到收集了足够的数据(例如,写入到slc,然后复制回到tlc)。

如上所述,可动态选择高使用阈值和中等使用阈值。例如,可调节阈值以通过要存储在每个区域中的所需数据量、通过区域的存储容量等保持所需水平的编程性能。在各种实施方案中,过程800在非易失性存储器介质控制器126级、在主机接口模块级、在设备驱动程序级等处实施。

图9描绘了用于根据本公开的实施方案的分布式编程操作的多个表。图9描绘了第一部分编程表900和第二部分编程表920。第一部分编程表900根据页面标识符排序,而第二部分编程表920根据剩余时间排序。

第一部分编程表900包括一个或多个条目。每个条目包括标识符905和时间标签910。第二部分编程表920还包括一个或多个条目,每个条目具有标识符905和时间标签910。标识符905指示存储器单元中处于部分编程状态的位置。在所描绘的实施方案中,标识符905指定存储器设备的页面(例如,物理页面);然而,其他实施方案可指示字线、(例如,物理)块地址等。

时间标签910指示有效期内剩余的时间(例如,每个页面将被完全编程或“刷新”所剩下的时间)。在所描绘的实施方案中,该剩余时间是以秒计;然而,其他实施方案可测量不同单元中剩余的时间。此外,分布式编程部件150(或其子部件)周期性地更新时间标签,例如倒计数在有效性期内剩余的时间。当条目达到剩余时间的阈值量时,其将被选择用于编程分布式编程操作的第二阶段。在一个实施方案中,剩余时间的阈值量为零。

当将新页面(或存储器的其他单元)部分编程为闪存时,其将被添加到部分编程表中,诸如第一部分编程表900或第二部分编程表920。稍后对该页面进行完全编程时,将从部分编程表中移除对应的条目。如果在部分编程页面中存储的数据未被完全编程就被刷新,则对应条目中的时间标签910更新(例如,重置)。

图9描绘了将lba955与写入访问计数960(也称为“使用计数”)相关联的lba使用频率表950。在所示实施方案中,lba使用频率表950根据使用计数排序。例如,lba使用频率表950可被排序,使得频繁使用的lba区域被置于表的开头,而最少使用的lba是表中的最后条目。在其他实施方案中,lba使用频率表950可根据lba值排序。

当接收到写入命令时,分布式编程部件150(或其子部件)在lba使用频率表950中搜索写入命令中的lba数量。如果找到,则该lba的使用计数将递增。如果找不到,则分布式编程部件150在表中创建与写入命令中的lba数量对应的新条目,其中使用计数=1。周期性地,(例如,每n次通过),从lba使用频率表950中删除(例如,移除)最少使用的lba的数量。如本文所述,lba使用频率表950可用于根据其使用频率将lba映射到合适的闪存存储区域。

图10是根据本公开的实施方案的示意性流程图,其示出了用于分布式编程操作的方法1000。在一个实施方案中,方法1000开始并且主机接口部件405从主机接收1005用于写入数据的指令。在某些实施方案中,用于写入数据的指令是包括要写入到非易失性存储器介质122和数据的逻辑块地址(“lba”)的数据的编程操作命令。在一个实施方案中,lba与一组tlc存储器元件123相关联(例如,物理页面或字线)。

在各种实施方案中,用于接收写入数据的指令的装置可包括,在各种实施方案中,以下中的一者或多者:分布式编程部件150、主机接口部件405、控制器126、非易失性存储器设备接口139、主机计算设备110、设备驱动程序、在主机计算设备110上执行的控制器(例如,设备驱动程序等)、处理器111、fpga、asic、其他逻辑硬件和/或存储在计算机可读存储介质上的其他可执行代码。其他实施方案可包括用于接收写入数据的指令的类似或等同的装置。

方法1000包括部分编程部件410响应于对数据进行编程的指令,将存储器设备的字线编程1010到部分编程状态。在各种实施方案中,用于将存储器设备的字线编程到部分编程状态的装置可包括,在各种实施方案中,以下中的一者或多者:分布式编程部件150、部分编程部件410、控制器126、非易失性存储器设备接口139、主机计算设备110、设备驱动程序、在主机计算设备110上执行的控制器(例如,设备驱动程序等)、处理器111、fpga、asic、其他逻辑硬件和/或存储在计算机可读存储介质上的其他可执行代码。其他实施方案可包括用于将存储器设备的字线编程到部分编程状态的类似或等同装置。

在某些实施方案中,方法1000包括主机接口部件405响应于将字线编程到部分编程状态,发信号通知1015主机写入数据的指令已完成。在某些实施方案中,发信号通知1015写入数据的指令已完成包括,主机接口部件405设置位图中的位状态,以指示对应于写入命令的lba成功编程。在一个实施方案中,发信号通知1015写入数据的指令已完成还包括,指示对应的lba处于部分编程状态。

在各种实施方案中,用于发信号通知写入数据的指令已完成的装置可包括,在各种实施方案中,以下中的一者或多者:分布式编程部件150、主机接口部件405、控制器126、非易失性存储器设备接口139、主机计算设备110、设备驱动程序、在主机计算设备110上执行的控制器(例如,设备驱动程序等)、处理器111、fpga、asic、其他逻辑硬件和/或存储在计算机可读存储介质上的其他可执行代码。其他实施方案可包括用于发信号通知主机写入数据的指令已完成的类似或等同装置。

方法1000还可包括完全编程部件415在执行一个或多个居间操作(例如,存储操作)之后将字线编程1020到完全编程状态。方法1000结束。此处,完全编程部件415可在将字线编程1020到完全编程状态之前等待预定时间段,其中在该时间段期间执行一个或多个存储操作(例如,诸如读取操作和/或编程操作)。在各种实施方案中,完全编程部件415在将字线编程1020到完全编程状态之前等待最大时间,该最大时间基于非易失性存储器介质122的年龄、非易失性存储器设备120的温度、用于对该字线进行部分编程的编程脉冲数等。

在一个实施方案中,将字线编程1020到完全编程状态包括使用比在将页面编程到部分编程状态时所使用的更低的编程电压和/或电压阶跃进行编程。在某些实施方案中,将字线编程1020到完全编程状态包括在对字线进行完全编程之前从字线读取数据,并且在对字线进行完全编程时使用所读取的数据作为数据源(例如,对或不对从部分编程字线读取的数据进行错误校正等)。

在各种实施方案中,用于将字线编程到完全编程状态的装置可包括,在各种实施方案中,以下中的一者或多者:分布式编程部件150、完全编程部件415、控制器126、非易失性存储器设备接口139、主机计算设备110、设备驱动程序、在主机计算设备110上执行的控制器(例如,设备驱动程序等)、处理器111、fpga、asic、其他逻辑硬件和/或存储在计算机可读存储介质上的其他可执行代码。其他实施方案可包括用于将字线编程到完全编程状态的类似或等同装置。

在某些实施方案中,将字线编程到部分编程状态包括将字线编程到可以第一阈值量的错误读取数据的程度。在此类实施方案中,将字线编程到完全编程状态包括将字线编程到可以第二阈值量的错误读取数据的程度,第二阈值小于第一阈值。此处,将字线编程到可以第一阈值量的错误读取数据的程度包括在对第一多个电压脉冲进行编程之后使用纠错码解码从字线读取的值,以及确定所读取的值中的错误量是否满足第一阈值量的错误。

在某些实施方案中,将字线编程到部分编程状态包括用第一数量的编程循环对字线进行编程。此处,选择第一数量以将字线中的第一子组存储器单元编程到期望的值。在此类实施方案中,将字线编程到完全编程状态包括利用第二数量的编程循环对字线进行编程,第二数量被选择为将字线中的第二子组存储器单元编程到期望的值。此处,第二子组大于第一子组。

在某些实施方案中,将字线编程到部分编程状态包括对字线进行编程,直到阈值数量的单元处于第一组编程验证电压阈值。在此类实施方案中,将字线编程到完全编程状态包括对字线进行编程,直到满足第二组编程验证电压阈值,第二组大于第一组。此处,第二组编程验证电压阈值可等于常规编程操作中所用的编程验证电压阈值。

图11是根据本公开的实施方案的示意性流程图,其示出了用于分布式编程操作的方法1100。在一个实施方案中,方法1100开始并且主机接口部件405从主机接收1105写入数据的指令。在某些实施方案中,写入数据的指令是包括要写入到非易失性存储器介质122和数据的逻辑块地址(“lba”)的数据的编程操作命令。在一个实施方案中,lba与一组tlc存储器元件123相关联(例如,物理页面或字线)。

方法1100包括lba使用部件505将写入命令中的lba映射1110到非易失性存储器的页面。在一个实施方案中,选择部件510确定lba的使用频率,其中lba使用部件505基于使用频率将lba映射1110到存储器设备的区域。例如,如果选择部件510确定使用频率比高使用阈值高,则lba使用部件505可将lba映射到存储器设备的分布式编程区域。又如,如果选择部件510确定使用频率比高使用阈值低并且比中等使用阈值高,则lba使用部件505将lba映射到存储器设备的slc区域。再如,如果选择部件510确定使用频率比高使用阈值和中等使用阈值两者低,则lba使用部件505将lba映射到存储器设备的tlc区域。

在各种实施方案中,用于将写入命令中的lba映射到非易失性存储器的页面的装置可包括以下中的一者或多者:分布式编程部件150、lba使用部件505、控制器126、非易失性存储器设备接口139、主机计算设备110、设备驱动程序、在主机计算设备110上执行的控制器(例如,设备驱动程序等)、处理器111、fpga、asic、其他逻辑硬件和/或存储在计算机可读存储介质上的其他可执行代码。其他实施方案可包括用于将写入命令中的lba映射到非易失性存储器的页面的类似或等同装置。在各种实施方案中,用于确定lba的使用频率的装置可包括以下中的一者或多者:分布式编程部件150、选择部件510、控制器126、非易失性存储器设备接口139、主机计算设备110、设备驱动程序、在主机计算设备110上执行的控制器(例如,设备驱动程序等)、处理器111、fpga、asic、其他逻辑硬件和/或存储在计算机可读存储介质上的其他可执行代码。其他实施方案可包括用于确定lba的使用频率的类似或等同装置。

方法1100包括响应于lba对应于非易失性存储器的tlc页面,部分编程部件410将存储器设备的页面编程1115到部分编程状态。在各种实施方案中,用于将页面编程到部分编程状态的装置可包括以下中的一者或多者:分布式编程部件150、部分编程部件410、控制器126、非易失性存储器设备接口139、主机计算设备110、设备驱动程序、在主机计算设备110上执行的控制器(例如,设备驱动程序等)、处理器111、fpga、asic、其他逻辑硬件和/或存储在计算机可读存储介质上的其他可执行代码。其他实施方案可包括用于将页面编程到部分编程状态的类似或等同装置。

方法1100包括表部件515,该表部件将处于部分编程状态的页面添加1120到部分编程表,并指示页面的有效期。部分编程表的示例在上文中参考图9讨论。在各种实施方案中,该有效期基于非易失性存储器介质122的年龄、非易失性存储器设备120的温度、用于对该页面进行部分编程的编程脉冲数等。

在各种实施方案中,用于将处于部分编程状态的页面添加到部分编程表并指示页面的有效期的装置可包括以下中的一者或多者:分布式编程部件150、表部件515、控制器126、非易失性存储器设备接口139、主机计算设备110、设备驱动程序、在主机计算设备110上执行的控制器(例如,设备驱动程序等)、处理器111、fpga、asic、其他逻辑硬件和/或存储在计算机可读存储介质上的其他可执行代码。其他实施方案可包括用于将处于部分编程状态的页面添加到部分编程表并指示页面的有效期的类似或等同装置。

方法1100包括主机接口部件405(例如,向主机)确认1125写入命令并释放资源。在某些实施方案中,确认写入命令包括主机接口部件405设置位图中的位状态,以指示对应于写入命令的lba成功编程。在一个实施方案中,释放资源包括向主机指示信道可用于下一个存储操作(例如,读取操作)。

在各种实施方案中,用于确认写入命令并释放资源的装置可包括以下中的一者或多者:分布式编程部件150、主机接口部件405、控制器126、非易失性存储器设备接口139、主机计算设备110、设备驱动程序、在主机计算设备110上执行的控制器(例如,设备驱动程序等)、处理器111、fpga、asic、其他逻辑硬件和/或存储在计算机可读存储介质上的其他可执行代码。其他实施方案可包括用于确认写入命令并释放资源的类似或等同装置。

方法1100包括调度部件520识别1130接近其有效期结束的部分编程页面。在一个实施方案中,调度部件520扫描部分编程表诸如第一部分编程表900或第二部分编程表920中的条目,以识别1130接近其有效期结束的部分编程页面。在一个实施方案中,当有效期剩余的时间小于阈值量例如10秒时,部分编程页面被认为“接近”其有效期结束。响应于识别出其中有效期剩余的时间小于阈值量的部分编程页面,调度部件520可调度,例如在存储操作队列中放置,分布式编程操作的第二阶段。

在各种实施方案中,用于识别接近其有效期结束的部分编程页面的装置可包括以下中的一者或多者:分布式编程部件150、调度部件520、控制器126、非易失性存储器设备接口139、主机计算设备110、设备驱动程序、在主机计算设备110上执行的控制器(例如,设备驱动程序等)、处理器111、fpga、asic、其他逻辑硬件和/或存储在计算机可读存储介质上的其他可执行代码。其他实施方案可包括用于识别接近其有效期结束的部分编程页面的类似或等同装置。

方法1100包括完全编程部件415将所识别页面编程1135到完全编程状态。方法1100结束。由于分布式编程操作的该第二阶段被延迟直到有效期结束,因此主机能够执行一个或多个居间的存储操作(例如,诸如读取操作和/或另一个编程操作)。在某些实施方案中,将所识别页面编程1135到完全编程状态包括数据部件525在高速缓存(例如,页面缓冲器、数据锁存器或内部ram)中搜索写入命令中所包括的数据。在其他实施方案中,将所识别页面编程1135到完全编程状态包括数据部件525读取存储在所识别页面中的值并使用纠错码解码所读取的值以推导出写入命令中所包括的数据。

在各种实施方案中,用于将所识别页面编程到完全编程状态的装置可包括以下中的一者或多者:分布式编程部件150、完全编程部件415、控制器126、非易失性存储器设备接口139、主机计算设备110、设备驱动程序、在主机计算设备110上执行的控制器(例如,设备驱动程序等)、处理器111、fpga、asic、其他逻辑硬件和/或存储在计算机可读存储介质上的其他可执行代码。其他实施方案可包括用于将所识别页面编程到完全编程状态的类似或等同装置。

尽管本文描述了许多实施方案,但上述实施方案中的至少一些有利于电子存储设备的编程暂停/重启操作和擦除暂停/重启操作。换句话讲,正在非易失性存储器设备120处被处理的编程操作(或等同操作)可被暂时地或持久性地暂停,以便允许一个或多个其他存储器存取操作(例如,读取、部分编程、部分擦除等)在非易失性存储器设备120处被处理。

如本文所用,术语“编程操作”包括在非易失性存储器设备120上保存值(数字或模拟)或保存表示值的状态的任何存储操作。其他编程(或等同)操作的一些示例包括但不限于在非易失性存储器设备120上刻录、存储、写入并设置持久值。本文提及的编程操作包括其他等同或类似操作。

本公开可体现为其他具体形式而不背离其实质或基本特征。所述实施方案将在所有方面被认为仅仅是示例性的而非限制性的。因此,本公开的范围由所附权利要求而不是前述描述所指示。在权利要求等同的含义和范围内的所有变化均包含在其范围内。

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