具体实施方式
现在将参考附图详细描述根据本申请的具体实施例。各个图中的相同元件由相同的附图标记表示以保持一致。
本说明书提供了支持各种高速非易失性存储设备(NVM)和各种NVM的任何组合的装置、系统和方法。如这里所使用的,非易失性存储设备可以是计算机存储设备,其可以在断电之后保留所存储的信息,并且可以在重新通电(关闭和重新打开)之后重新取回所存储的信息。非易失性存储设备可以包括软盘、硬盘驱动器、磁带、光盘、NAND闪存、NOR闪存、磁阻随机存取存储器(MRAM)、电阻随机存取存储器(RRAM)、相变随机存取存储器(PCRAM)、纳米随机存取存储器(Nano-RAM)。在本说明书中,可以使用NAND闪存作为所提出的技术的示例。然而,根据本说明书公开的各种实施例可以利用其他种类的非易失性存储设备来实现这些技术。
图1示意性地示出了根据一个实施例的示例性非易失性存储控制器100。非易失性存储控制器100可以包括第一接口110、第二接口112、微控制器单元(MCU)102和ECC处理器104。第一接口110可以是任何现有的或尚待开发的接口,其被配置为将非易失性存储控制器100耦合到主机计算系统的系统总线,以及从主机计算系统接收数据和向主机计算系统发送数据。在一个实施例中,例如,第一接口110可以是高级可扩展接口(AXI)。第二接口112可以是任何现有的或尚待开发的接口,其被配置为将存储控制器耦合到一个或多个非易失性存储设备。在一个实施例中,第二接口112可以是多通道接口,其可以被配置为并行地在多个通道上传输编码数据(例如,ECC码字)。例如,第二接口112可以是开放式NAND闪存接口(ONFI),其可以支持不同的协议(例如,非易失性双倍数据速率(NVDDR),类型2的NVDDR(NVDDR2),类型3的NVDDR(NVDDR3),以及Toggle协议)并以不同的传输速度运行。
MCU102可以是被配置成执行可执行指令的计算机处理器(例如,软件或固件)。在各种实施例中,MCU102可以是微处理器、微控制器、现场可编程门阵列(FPGA)或专用IC(ASIC)。ECC处理器104可以包括多种类型的ECC编码器和多种类型的ECC解码器。在编程操作(例如,写操作)期间,MCU102可以为从主机接收的一条数据生成ECC引擎标签,以指示可以使用哪种类型的ECC编码器来编码该条数据。而且,在读取操作期间,MCU102可以为从非易失性存储设备获取的码字生成ECC引擎标签,以指示可以使用哪种类型的ECC解码器来解码码字。
在一个或多个实施例中,可以根据一个或多个因素生成ECC引擎标签。一种类型的因素可以与由非易失性存储控制器100存储的数据的属性相关。该数据的属性可以包括但不限于一条数据的使用频率(例如,它是“热(hot)”还是“冷(cold)”数据)、数据(例如,系统数据与用户数据)的重要性和其他合适的因素。另一种类型的因素可能与要使用的存储介质的特性有关,例如,存储数据的非易失性存储设备是否是高性能NVM(例如MRAM/3DXP/等)、高品质NAND,或低品质的NAND。基于选定的因素考虑,可以针对具有一组编码特性的编码操作和具有一组解码特性的解码操作生成与之相对应的ECC引擎标签。在一些实施例中,选择要考虑的因素以及涵盖哪些编码和解码特性的标准可以例如通过软件或固件来配置。此外,在一些实施例中,一些特性(例如,ECC码长度)可能是必需的,而一些特性可以是灵活的但具有优先性(例如,编码/解码速度)。例如,在一个实施例中,对于频繁使用的数据,高吞吐量低延迟可能是优选的;对于重要数据,可能需要更强的ECC保护(例如,更强的纠错能力);对于高品质的NAND,可能优选平衡的性能和纠错能力。
图2示出了根据本说明书公开的一个实施例的ECC处理器200。ECC处理器200可以是ECC处理器104的一个实施例。ECC处理器200可以包括多路分配器202、多种类型的编码器204.1至204.N、存储器交叉开关矩阵206、ECC码字缓冲器208、多路复用器212、可选的错误恢复控制单元210、多种类型的解码器214.1至214.M和可选的解码信息交换缓冲器216。
每种类型的编码器204.1到204.N可以表示配置有一组不同的编码特性的一个或多个ECC编码器,其中整数N可以是大于或等于2的正整数。例如,在一个实施例中,可以存在一个类型1编码器的编码器204.1,其可以被配置用于超低延迟和高吞吐量;两个类型2编码器的编码器204.2,其可被配置为平衡延迟和吞吐量;四个类型N编码器的编码器204.N,其可被配置为超高纠错能力和超高吞吐量;可以为其他目的配置其他类型的编码器,并且每种类型可以有一个或多个编码器。在一些实施例中,相同类型的多个编码器可以由多个ECC引擎的实例实现,但是在一些其他实施例中,相同类型的多个编码器可以由多核ECC引擎实现。例如,两个类型2编码器的编码器204.2可以由双核ECC引擎实现。
类似地,每种类型的解码器214.1至214.M可以表示配置有一组不同的解码特性的一个或多个ECC解码器,其中整数M可以是大于或等于2的正整数。例如,在一个实施例中,可以存在一个类型1解码器的解码器214.1,其可以被配置用于超低延迟和高吞吐量;两个类型2解码器的解码器214.2,其可以被配置用于平衡延迟和吞吐量;四个类型M解码器的解码器214.M,其可以被配置为超高纠错能力和超高吞吐量;可以为其他目的配置其他类型的解码器,并且每种类型可以有一个或多个解码器。在一些实施例中,相同类型的多个解码器可以由多个ECC引擎的实例实现,但是在一些其他实施例中,相同类型的多个解码器可以由多核ECC引擎实现。例如,类型M解码器的四个解码器214.M可以由四核ECC引擎实现。
每组编码和解码特性可以包括但不限于ECC码、纠错能力、延迟及其各种组合。如果一组特征中的至少一个任何其他集合中不存在或不同,则该组特征可以与任何其他特征集不同。在一个实施例中,数字N和M可以相等,并且每种类型的编码器可以与相应的解码器类型匹配。例如,类型1编码器204.1和类型1解码器214.1可以被配置用于超低延迟和高吞吐量;类型2编码器204.2和类型2解码器214.2可以被配置用于平衡延迟和吞吐量;类型N编码器204.N和类型N解码器214.N可以被配置为用于超高纠错能力和超高吞吐量;以及被配置用于其他相应匹配特性的其他类型的编码器和解码器。在另一个实施例中,数字N和M可以相等,但编码器的类型与解码器的类型不一一匹配。例如,一些编码器没有相应匹配的解码器,反之亦然。在又一个实施例中,数字N和M可以不同,并且编码器的类型与解码器的类型不一一匹配。
一些编码和解码特性可以是性能要求,其可以包括但不限于:超低延迟和高吞吐量,平衡延迟和吞吐量,超高纠错能力和超高吞吐量,和/或延迟、纠错能力、吞吐量和其他特性的任意组合。一些其他编码和解码特性可能影响性能,例如但不限于ECC码。例如,更长的ECC代码可能需要更长的时间来编码和解码,但其可以提供更强的错误恢复保护。应当注意,只要ECC“代码”可以是相同的(例如,相同的奇偶校验矩阵或相同的编码器生成多项式),任何类型的解码器都可以解码由一种以上类型的编码器生成的码字,而不管性能要求如何。因此,在一个实施例中,可以针对一个ECC码配置多种类型的编码器的一个子集和多种类型的解码器的一个子集,以及为不同的ECC码配置多种类型的编码器的另一子集和多种类型的解码器的另一子集。
ECC码字缓冲器208可以是存储单元,用于在编码操作(例如,写操作)期间在经由第二接口112将码字发送到非易失性存储设备之前和在读操作期间从第二接口112接收码字之后,存储ECC编码的码字。在一些实施例中,ECC码字缓冲器208可以由存储体实现。在一个实施例中,ECC码字缓冲器208可以由写(PROG)和读(READ)路径共享,因为一个物理信道可以被PROG或READ数据业务占用,但不能两者同时占用。在另一个实施例中,ECC码字缓冲器208可以分别具有用于写和读路径的单独部分。在又一个实施例中,ECC码字缓冲器208可以由分别用于写和读路径的两个单独的缓冲器实现。
在编程写操作期间,ECC处理器200中的PROG路径可以包括多路分配器202、多种类型的编码器204.1至204.N、存储器交叉开关矩阵206和ECC码字缓冲器208。例如,在编程写操作中,可以在多路分配器202处接收一条数据。ECC引擎标签可以由MCU 102生成并且与该数据相关联,以向多路分配器202指示该条数据可以被路由到哪种类型的ECC编码器。也就是说,在编程写操作中,ECC引擎标签可用于将从主机接收的数据路由到所选类型的ECC编码器。然后,所选类型的ECC编码器可以对该数据进行编码,并经由存储器交叉开关矩阵206将码字发送到ECC码字缓冲器208。
在一些实施例中,可以具有不同特性的多个非易失性存储设备可以耦合到一个实施例的非易失性存储控制器100,并且与该数据相关联的ECC引擎标签也可以用于指示向哪个非易失性存储设备或哪种非易失性存储设备发送码字。也就是说,在可以具有不同特性的多个非易失性存储设备的实施例中,ECC引擎标签还可以指示可以使用哪个非易失性存储设备或哪种非易失性存储设备来存储从该条数据生成的码字。
此外,在一些实施例中,在编程写操作期间,可以生成第一ECC引擎标签以选择第一类型的编码器以实现第一组编码特性。在操作期间,MCU 102可以被配置为生成第二ECC引擎标签以选择第二类型的编码器以实现第二组编码特性。例如,最初,可以选择类型1编码器204.1以在延迟和高吞吐量方面实现最佳性能。在操作期间,可以确定可能需要超高性能纠错能力,因此可以生成用于类型N编码器204.N的ECC引擎标签,并且可以激活类型N编码器204.N以实现超高性能纠错能力。在一些实施例中,不同类型的编码器之间的切换可以基于非易失性存储设备特性(例如错误个数、编程/擦除(P/E)周期次数、编程写时间、访问延迟等)来确定。
在读取操作期间,READ路径可以包括ECC码字缓冲器208、存储器交叉开关矩阵206、多种类型的解码器214.1至214.M以及多路复用器212。读取操作可以触发一个或多个命令以获取存储在非易失性存储设备中的码字。从非易失性存储设备获取的码字可以临时存储在ECC码字缓冲器208中。可以针对码字生成(例如,通过MCU102)ECC引擎标签,并且可以根据ECC引擎标签将该码字经由存储器交叉开关矩阵206从ECC码字缓冲器208路由到一种类型的解码器214。
类似于编码操作,在一些实施例中,在读取操作期间,可以生成第一ECC引擎标签以选择第一类型的解码器以实现第一组解码特性。在操作期间,MCU 102可以被配置为生成第二ECC引擎标签以选择第二类型的解码器以实现第二组解码特性。例如,最初,可以选择类型1解码器214.1以在延迟和高吞吐量方面实现最佳性能。在操作期间,可以确定可能需要超高性能纠错能力,因此可以生成用于类型N解码器214.N的ECC引擎标签,并且可以激活类型N解码器214.N以实现超高纠错能力。在一些实施例中,不同类型的解码器之间的切换可以基于非易失性存储设备特性(例如错误个数、编程/擦除(P/E)周期次数、编程写时间、访问延迟等)来确定。
在一些实施例中,在编程操作期间,第一ECC引擎类型1编码器204.1可以是代码编码器的一种方案(例如,Bose-Chaudhuri-Hocquenghem(BCH))以实现最短的编码和解码延迟。从第一类型编码器生成的码字可以被写入具有短访问延迟的非易失性存储设备,例如MRAM、3DXP、RRAM、SLC NAND和NRAM。因此,在读取操作期间,存储在具有短访问延迟的这种非易失性存储设备中的ECC码字可以以最小延迟进行解码,从而产生快速的系统响应。类型2编码器204.2可以是代码编码器的另一种方案(例如,低密度-奇偶校验(Low-Density-Parity-Check,LDPC)),以实现最佳的纠错能力。从第二类型编码器生成的码字可以被写入具有较长访问延迟的非易失性存储设备,例如MLC NAND或TLC NAND。
此外,在一些实施例中,与ECC引擎标签相关联的码字可以首先由ECC引擎标签指示的第一类型解码器解码,并且当解码失败时,可以使用第二类型解码器来尝试解码该码字,不需为第二类解码器生成另一个ECC引擎标签。例如,最初,可以选择类型1解码器214.1以在延迟和高吞吐量方面实现最佳性能。但是在操作期间,类型1解码器214.1可能无法解码与ECC引擎标签相关联的一个或多个码字,该ECC引擎标签指示应当将类型1解码器214.1用于它们。解码失败的码字可以被路由到另一种类型的解码器,该解码器可以具有更强的解码能力(例如,配置有超高性能纠错能力的类型N解码器214.N),而不具有用于其他类型的解码器的ECC引擎标签。在这些实施例中,可以利用相同的ECC引擎标签来关联或获取相关的ECC代码信息和非易失性存储设备特性,当使用第一类型解码器时,该特性可以传递给第一类型解码器,然后当触发第二类型解码器时传递给第二类型解码器。在一个实施例中,可以通过错误恢复控制(ERC)210的配置来控制不同类型的解码器之间的切换。
ERC210可以是用于设置恢复控制以处理解码过程中的一个或多个错误的可选组件。例如,ERC210可以被配置为当当前类型的解码器未能解码当前码字或者在许多解码迭代之后未能在解码当前码字方面取得进展时执行错误恢复流控制。ERC 210可以在硬件状态机、微控制器或微处理器中实现。在一个实施例中,ERC210可以具有示例性配置,使得ERC210可以在解码失败时从当前类型的解码器(例如,类型1解码器214.1)提取ECC标签,并且将相应的ECC标签传递给具有更强纠错能力的第二类型解码器(例如,类型N解码器214.N)。一旦用关联的ECC标签激活第二类型解码器,它就可以开始解码原始码字。
此外,ERC 210可以具有第二示例性配置,使得一个ECC标签可以与两种类型的解码器相关联,以通过利用解码信息交换缓冲器216协调地操作,以在不同类型的解码器之间共享解码结果。在一些实施例中,第一解码器可能无法解码码字但仍然生成一些解码结果。例如,在解码过程期间,第一解码器可以生成和收集信息,例如但不限于哪个比特被翻转、比特翻转的次数、表明比特可靠性的对数似然比(LLR)。这些信息可以统称为解码结果,并且这些解码结果可以由第一解码器存储在解码信息交换缓冲器216中,并在第一解码器发生故障时由第二解码器访问。通过利用后续解码器共享来自先前解码器的解码信息,后续解码器可以利用先前解码器的先前结果。因此,可以提高整体ECC纠错能力。
另外,ERC210可以具有第三示例性配置,使得ERC 210可以被配置为来维持目标ECC吞吐量,其通过解码快速的第一类型解码器尝试解码任何输入的码字,并将解码失败的码字移动到第二类型解码器,该第二类型解码器的解码速度比第一类型解码器慢,但具有更强的纠错能力。当那些失败的码字被成功解码时,然后可以将解码的用户数据发送到主机(例如,通过接口110)。
在一些实施例中,MCU102可以被配置为执行错误恢复控制功能。例如,MCU102可以被配置为当当前类型解码器未能解码码字时重新生成用于切换解码器类型的新ECC标签。相反,当错误恢复控制可以由ERC 210实现时,ERC 210可以被设计为预先配置错误恢复策略,使得它知道何时以及如何在解码操作使用一个ECC标签将不同类型的解码器组合在一起(例如,在切换解码器时不需要重新生成新的ECC标签)。
如这里所使用的,一种类型的编码器、解码器或ECC引擎可以指ECC的一种方案(例如但不限于,Bose-Chaudhuri-Hocquenghem(BCH)或低密度奇偶校验(LDPC)),或者特定ECC方案的一个级别(例如但不限于,BCH或LDPC的某个代码或某一长度的代码),或者BCH或LDPC的一个特定的实现(例如但不限于,硬解码、软解码或变化的解码技术)。应当注意,用一种ECC方案(例如,BCH)编码的码字不可以被不同的ECC方案(例如,LDPC)解码,因此,从第一类型解码器到第二类型解码器的切换可以指的是第一类解码器切换到与第一类解码器兼容的第二类解码器。也就是说,当从第一类型解码器切换到第二类型解码器时,第一类型解码器和第二类型解码器都适合于解码同一个码字。
在一些实施例中,实现第一ECC方案的第一类型解码器的解码器故障可以提示写入存储介质的所有未来数据切换到实现与第一ECC方案不同的第二ECC方案的第二类型编码器。例如,可以在存储介质上执行读取操作。存储介质可以存储利用以第一ECC方案(例如,BCH)实现的第一类型编码器编码的数据,并且可以利用在第一ECC方案(例如,BCH)中实现的对应于第一类型编码器的第一类型解码器来执行初始读取操作。然而,第一类型解码器可能难以解码编码数据。为了成功解码已经存储在存储介质中的编码数据,可以使用在第一ECC方案(例如,BCH)中实现但具有更强解码能力的另一种类型解码器。对于要写入存储介质的未来数据,可以使用以第二ECC方案(例如,LDPC)实现的第二类编码器。在一个实施例中,LDPC码可以比BCH码更强,并且在BCH码失败之后,写入存储介质的数据可以从被BCH码编码转换为由LDPC码编码。并且可以通过在第二ECC方案中实现的第二类解码器首先解码用第二类编码器编码的数据的所有未来读取,并且如果失败,则可以切换到在第二ECC方案中实现的另一类型解码器。在一个实施例中,ERC210可以被配置为执行不同ECC方案之间的切换。
图3示意性地示出了根据本说明书公开的一个实施例的非易失性存储系统300。非易失性存储系统300可以包括非易失性存储控制器302和非易失性存储设备(NVM)304。当非易失性存储系统300耦合到主机时,非易失性存储系统300可以向主机提供数据存储和/或对存储数据的访问。非易失性存储控制器302可以是非易失性存储控制器100的一个实施例。NVM304可以表示一个或相同类型的多个非易失性存储设备(例如,高性能介质或常规性能介质),并且这些一个或多个非易失性存储设备可以被配置为在多个纠错和延迟条件下工作。非易失性存储控制器302可以包括多种类型的ECC编码器和多种类型的ECC解码器,其支持多个纠错和延迟要求。
在一个实施例中,例如,NVM304可以是高性能NVM,并且非易失性存储控制器302可以包括多种类型的编码器和多种类型的解码器,其包括:被配置用于在延迟和高吞吐量方面的最佳性能的第一类型的编码器和第一类型的编码器(例如,类型1的编码器204.1和类型1的解码器214.1),以及被配置用于超高纠错性能的第二类型编码器和第二类型解码器(例如,类型2的编码器204.N和类型2的解码器214.N)。当可能需要在编码或解码的延迟和高吞吐量方面的最佳性能时,非易失性存储系统300可以使用第一类型编码器或解码器,并且当可能需要编码或者解码的超高纠错能力时,非易失性存储系统300可以使用第二类型编码器或解码器。因此,具有单一类型的存储介质(例如,高性能介质诸如MRAM、3DXP)的实施例,可以被配置为针对目标存储介质在延迟和高吞吐量方面实现最佳性能。在相同类型的ECC引擎中,当系统要求改变或需要错误恢复时,激活/切换多级ECC引擎。
图4示意性地示出了根据本说明书公开的另一实施例的非易失性存储系统400。非易失性存储系统400可以包括非易失性存储控制器402和包括第一NVM404和第二NVM406的多个非易失性存储设备(NVM)。当非易失性存储系统400耦合到主机时,非易失性存储系统400可以向主机提供数据存储和/或对存储数据的访问。非易失性存储控制器402可以包括多种类型的ECC编码器和多种类型的ECC解码器,其支持多个纠错和延迟要求。第一NVM404可以是一个或多个第一类型的非易失性存储设备,第二NVM406可以是一个或多个第二类型的非易失性存储设备。NVM404和NVM406可以具有不同的特性(例如,性能和/或品质)。在一个实施例中,例如,NVM404可以是一个或多个常规NAND设备(例如,高品质NAND设备),并且NVM406可以是一个或多个低品质NAND设备(例如,低品质NAND设备)。在另一个实施例中,NVM404和NVM406可以是相同类型但具有不同的品质的存储介质,例如,SLC、TLC和QLCNAND的混合。
非易失性存储控制器402可以包括多种类型的编码器和多种类型的解码器,其包括:被配置用于平衡性能和纠错能力的第一类型的编码器和第一类型的解码器(例如,编码器204.2和解码器214.2),以及被配置用于在纠错能力和吞吐量方面实现超高性能的第二类型的编码器和第二类型的解码器(例如,编码器204.N和解码器214.N)。在操作期间,当可能需要平衡性能和纠错能力时,非易失性存储系统400可以将第一类型的编码器和第一类型的解码器用于NVM404,并且切换到第二类型的编码器和第二类型的解码器以实现在纠错能力和吞吐量方面具有超高性能。对于NVM406,非易失性存储系统400可以使用第二类型的编码器和第二类型的解码器。在一些实施例中,可以将所有NVM切换到编码器和解码器,该编码器和解码器可以在需要时被配置用于在纠错能力和吞吐量方面的超高性能。不同类型的编码器和解码器之间的切换可以基于NAND特性来确定,例如错误个数、编程/擦除(P/E)周期次数、编程写时间、访问延迟等。
图5示意性地示出了根据本说明书公开的另一实施例的非易失性存储系统500。非易失性存储系统500可以包括非易失性存储控制器502和多个非易失性存储设备(NVM),该多个非易失性存储设备包括第一NVM504,第二NVM506和第三NVM508。当非线性存储系统500耦合到主机时,非易失性存储系统500可以向主机提供数据存储和对存储数据的访问。非易失性存储控制器502可以是非易失性存储控制器100的一个实施例,并且包括多种类型的编码器和多种类型的解码器,其支持多个纠错和延迟要求。NVM504、506和508可以是不同种类的存储介质或相同种类但具有不同特性(例如,性能和/或品质)的存储介质。
在一个实施例中,例如,NVM504可以是一个或多个高性能NVM(诸如MRAM、3DXP等),NVM506可以是一个或多个常规NAND设备(例如,高品质NAND),NVM508可以是一个或多个低品质NAND设备。非易失性存储控制器502可以包括多种类型的编码器和解码器,其包括:被配置用于在延迟和高吞吐量方面的最佳性能的第一类型的编码器和第一类型的解码器(例如,编码器204.1和解码器214.1),被配置用于平衡性能和纠错能力的第二类型的编码器和第二类型的解码器(例如,编码器204.2和解码器214.2),以及被配置用于在纠错能力和吞吐量方面实现超高性能的第三类型的编码器和第三类型的解码器(例如,编码器204.N和解码器214.N)。在操作期间,第一类型编码器和第一类型解码器可以用于NVM504,第二类型编码器和第二类型解码器可以用于NVM506以及第三类型编码器和第三类型编码器可以用于NVM508。
在非易失性存储系统300、400和500的一些实施例中,在需要时,所有NVM可以切换到一种特定类型的编码器和解码器(例如,用于在纠错和吞吐量方面的超高性能的编码器204.N和解码器214.N)。可以根据NVM特性(例如错误个数、编程/擦除(P/E)周期次数、编程写时间、访问延迟等)确定不同类型ECC引擎之间的切换。此外,值得注意的是,在一些实施例中,具有不同性能和/或品质的不同NVM可以是相同类型的。例如,NVM406可以是与NVM404相同的类型,以及NVM508可以是与NVM506相同的类型,但是NVM406和NVM508可能已经使用了一段时间(例如,“旧”),并且由于使用其性能和品质可能已经降低(例如,与NVM404和506相比)。此外,非易失性存储系统300、400和500的至少一些实施例可以是多通道固态驱动器(SSD)。在这些实施例中,ECC编码器和解码器不依赖于任何特定物理信道,并且可以在操作期间即时分配(和重新分配)。
非易失性存储系统300、400和500的一些实施例可以用独立磁盘冗余阵列(RAID)配置来实现。例如,实施例中的不同非易失性存储设备可以用于数据、备份、奇偶校验和/或其他RAID特征。在一个实施例中,例如,非易失性存储系统可以包括两种非易失性存储设备和具有两种类型的编码器和两种类型的解码器的ECC处理器。第一类型的编码器/解码器和第一类非易失性存储设备可以用于数据,第二类型的编码器/解码器和第二类非易失性存储设备可以用于备份。
图6是根据本说明书公开的实施例的用于编程写入非易失性存储设备的过程的流程图。在框602中,可以为要存储在非易失性存储设备中的一条数据生成第一纠错码(ECC)引擎标签。例如,该数据可以由包括多种非易失性存储设备的非易失性存储系统接收。可以基于一个或多个因素(例如,数据的重要性、使用频率等)来选择一个非易失性存储设备存储该数据。可以根据所选择的非易失性存储设备特征生成ECC引擎标签。在框604中,可以根据第一ECC引擎标签将该条数据路由到多种类型的ECC编码器中的第一类型ECC编码器。例如,第一类型ECC编码器可以配置有一组满足存储数据要求的编码特性。在框606中,可以使用该第一类型ECC编码器对该条数据进行编码以生成一个或多个ECC码字。在框608中,可以将ECC码字发送到非易失性存储设备以进行存储。在一个或多个实施例中,非易失性存储系统可以是多通道NVM系统。
图7是根据本说明书公开的实施例的用于在非易失性存储系统中存储数据的另一过程700的流程图。在框702中,可以接收要存储在非易失性存储系统中的一条数据。例如,在一个实施例中,非易失性存储系统可以耦合到主机,并且可以从主机接收要存储在非易失性存储系统中的数据。在框704中,可以确定要在编码操作中应用的一组编码特性。在至少一个实施例中,非易失性存储系统可以包括微控制器,该微控制器可以被配置为确定该数据可能需要什么编码特性。例如,可以考虑一个或多个因素,例如但不限于使用频率、数据的重要性、非易失性存储系统中的哪种非易失性存储设备可以用于存储数据。在框706中,可以生成与该条数据相关联的纠错码(ECC)引擎标签。在框708中,可以根据ECC引擎标签将该条数据路由到从多种类型的ECC编码器中选择的ECC编码器,用于编码成一个或多个ECC码字,并存储在非易失性存储系统的非易失性存储设备中。在各种实施例中,ECC引擎标签可以用于指示可以使用哪种类型的编码器来对接收的数据进行编码以用于存储,并且将码字路由到非易失性存储设备以进行存储。
图8是根据本说明书公开的实施例的用于在非易失性存储系统中读存储数据的另一过程800的流程图。在框802中,可以从非易失性存储设备接收一个或多个ECC码字。非易失性存储设备可以包括一个或多个非易失性存储设备,其中每个非易失性存储设备具有不同的特性。在框804中,可以为一个或多个ECC码字生成ECC引擎标签。在一个实施例中,例如,可以基于ECC码、纠错能力、延迟及其各种组合来生成ECC引擎标签。在框806中,可以根据ECC引擎标签将一个或多个ECC码字路由到从多种类型的ECC解码器中选择的ECC解码器。在至少一些实施例中,多种类型的ECC解码器可以配置有不同的特征集,并且可以生成ECC引擎标签,使得所选择的ECC解码器可以满足解码一个或多个ECC码字的要求。
过程600、700和800可以使用软件(例如,可执行计算机处理器(CPU,GPU或两者))、硬件(例如,现场可编程门阵列(FPGA)或专用IC(ASIC))、固件或三者的任意合适组合来实现。例如,在一个实施例中,过程700和800被编程在计算机处理器可执行指令中,并由执行可执行指令的计算机处理器(例如,微处理器或微控制器)执行。
本说明书的实施例可以提供灵活或自适应ECC系统,其支持高性能非易失性存储设备(NVM)、高容量NVM、低性能或低品质NVM、任何未来新兴NVM或它们的任意组合。此外,实施例中可以提供简单优化的低延迟、高ECC纠错能力或该两者。例如,实施例可以是多通道SSD系统,以支持非易失性存储设备的任意组合,同时满足足够的延迟和纠错要求。另外,可以应用实施例来平衡非易失性存储设备的生命周期和性能。例如,示例性非易失性存储系统中的“旧”NVM可以与“新”NVM并行使用,并且可以通过使用不同类型的编码器和解码器来适应不同品质和特性的“旧”和“新”NVM。
可以应用根据本说明书公开的实施例来减少整体ECC处理延迟,尤其是在混合SSD系统中,其中一个或多个通道可以配备有快速非易失性存储设备。例如,快速NVM可能需要快速ECC以提供最佳性能,因此快速ECC编码器/解码器可以与较快的NVM一起使用,而较慢的ECC编码器/解码器可以与较慢的NVM一起使用。此外,可以应用根据本申请公开的实施例以在新的非易失性存储设备出现时降低重新开发新SSD系统的成本。例如,示例性存储控制器可以支持不同组的编码和解码特性,并且可以与新的非易失性存储设备一起使用而无需任何硬件改变(例如,简单地更新固件将支持新的NVM)。在实施例中升级到快速或新的NVM以进一步改善整体系统性能可以容易地实现。
在示例性实施例中,提供了一种用于存储数据的方法。该方法可以包括为要存储在非易失性存储设备中的一条数据生成第一纠错码(ECC)引擎标签,根据第一ECC引擎标签,将该条数据路由到多个类型的ECC编码器中的第一类型ECC编码器,采用第一类型ECC编码器对该条数据进行编码以生成ECC码字,并且将ECC码字发送到非易失性存储设备进行存储。
在一个实施例中,该方法可以进一步包括:从非易失性存储设备获取ECC码字,为ECC码字生成第二ECC引擎标签,并根据第二ECC引擎标签将ECC码字路由到多种类型的ECC解码器中的第一类型ECC解码器。
在一个实施例中,该方法还可以包括:确定第一类型ECC解码器未能成功解码ECC码字的一个或多个ECC码字,并切换到用于解码的多个类型ECC解码器中的第二类型ECC解码器。
在一个实施例中,该方法可以进一步包括:确定第一类型ECC解码器未能成功解码ECC码字的一个或多个ECC码字,并切换到用于编码要写入非易失性存储设备的数据的第二类型ECC编码器,其中第一类型ECC编码器实现第一ECC方案,第二类型ECC编码器实现与第一ECC方案不同的第二ECC方案。
在一个实施例中,可以基于数据的属性、非易失性存储设备的特性或该两者来生成第一ECC引擎标签。
在一个实施例中,第一类型ECC编码器可以配置有从多组编码特性中选择的一组编码特性,其中多组编码特性包括:超低延迟和高吞吐量,平衡延迟和吞吐量,以及超高纠错能力和超高吞吐量。
在一个实施例中,该方法可以进一步包括接收要存储的第二条数据,确定第二条数据将被存储在第二非易失性存储设备中,生成第二ECC引擎标签并路由第二条数据到多个ECC编码器中的第二类型ECC编码器。
在一个实施例中,第一类型ECC编码器是Bose-Chaudhuri-Hocquenghem(BCH)编码器,第二类型ECC编码器是低密度奇偶校验(LDPC)编码器。
在一个实施例中,非易失性存储设备和第二非易失性存储设备可以是以下任意不同的两个:NAND闪存、NOR闪存、磁阻随机存取存储器(MRAM)、电阻随机存取存储器(RRAM)、相变随机存取存储器(PCRAM)和纳米随机存取存储器(Nano-
RAM)。
在一个实施例中,非易失性存储设备和第二非易失性存储设备可以是具有不同品质的相同种类的非易失性存储设备。
在另一示例性实施例中,提供了一种存储系统,其可包括存储控制器和微控制器。该存储控制器可以包括纠错码(ECC)处理器,其包括多种类型的ECC编码器和多种类型的ECC解码器。多种类型的ECC编码器中的每种类型的ECC编码器可以被配置为根据一组特定的编码特性来执行编码,并且多种类型的ECC解码器中的每种类型的ECC解码器可以被配置为根据一组特定的解码特征来执行解码。该微控制器可以被配置为生成ECC引擎标签,该ECC引擎标签指示在操作期间要使用多种类型的ECC编码器或多种类型的ECC解码器中的哪一种。
在一个实施例中,该存储控制器还可以包括:多路分配器,被配置为在编程操作期间将要存储的数据路由到由ECC引擎标签指示的所选类型的ECC编码器;多路复用器,被配置为在读取操作期间将ECC码字从非易失性存储设备路由到由ECC引擎标签指示的所选类型的ECC解码器;存储体,被配置为缓存由多种类型的ECC编码器生成的ECC码字和来自非易失性存储设备的ECC码字;以及多种类型的ECC编码器和存储体之间的以及多种类型的ECC解码器和存储体之间的存储器交叉开关矩阵。
在一个实施例中,在第一ECC方案中实现至少一种类型的ECC编码器和一种类型的ECC解码器,并且在与第一个ECC方案不同的第二ECC方案中实现至少另一种类型的ECC编码器和另一种类型的ECC解码器。
在一个实施例中,第一ECC方案是Bose-Chaudhuri-Hocquenghem(BCH),第二ECC方案是低密度奇偶校验(LDPC)。
在一个实施例中,微控制器可以被配置为:生成第一ECC引擎标签,其指示要从非易失性存储设备中选择用于ECC码字的第一类型ECC解码器以用于解码;以及当第一类型ECC解码器不满足解码要求时,生成第二ECC引擎标签,其指示从非易失性存储设备中选择用于ECC码字的第二类型ECC解码器。
在一个实施例中,存储控制器还可以包括耦合到该存储控制器的一种非易失性存储设备。
在一个实施例中,存储系统还可以包括多个非易失性存储设备,其包括至少两个具有不同性能和/或存储特性的非易失性存储设备。
在一个实施例中,存储系统还可以包括多个非易失性存储设备,其至少包括第一类非易失性存储设备和第二类非易失性存储设备。微控制器可以被配置为:生成第一ECC引擎标签以选择第一类型ECC编码器和第一类型ECC解码器,以在第一类非易失性存储设备的延迟和高吞吐量方面实现最佳性能;并且生成第二ECC引擎标签以选择第二类型ECC编码器和第二类型ECC解码器,以实现第二类非易失性存储设备的平衡性能和纠错能力。
在一个实施例中,微控制器还可以被配置为基于非易失性存储设备特性生成用于第一类非易失性存储设备的第一ECC引擎标签和用于第二类非易失性存储设备的第二ECC引擎标签。该设备特性包括以下一项或多项:错误个数、编程/擦除(P/E)周期次数、编程写时间和访问延迟。
在又一示例性实施例中,提供了一种具有信息的非暂时性机器可读介质,其中当由硬件处理器系统读取时,该信息使得硬件处理器系统执行:接收要存储在非易失性存储系统中的数据;确定要在编码操作中应用的一组编码特性;生成与该条数据相关联的纠错码(ECC)引擎标签;根据将要编码的数据编码成一个或多个ECC码字的ECC引擎标签,将该条数据路由到从多种类型的ECC编码器中所选择的ECC编码器;并存储在非易失性存储系统的非易失性存储设备中。
在一个实施例中,当由硬件处理器系统读取时,该信息还使硬件处理器系统执行:从非易失性存储设备接收一个或多个ECC码字;为一个或多个ECC生成ECC引擎标签;根据ECC引擎标签,将一个或多个ECC码字路由到从多种类型的ECC解码器中选择的第一ECC解码器。
在一个实施例中,当由硬件处理器系统读取时,该信息还使硬件处理器系统执行:确定第一ECC解码器未能成功解码一个或多个ECC码字中的至少一个,以及切换到用于编码要写入非易失性存储设备的数据的第二ECC编码器,其中第一ECC编码器实现第一ECC方案,第二ECC编码器实现与第一ECC方案不同的第二ECC方案。
在一个实施例中,ECC引擎标签可以根据从多组编码特性中选择的编码特性生成,其中该多组编码特性包括:超低延迟和高吞吐量、平衡延迟和吞吐量以及超高纠错能力和超高吞吐量。
在一个实施例中,至少一种类型的ECC编码器和一种类型的ECC解码器用BCH算法实现,至少另一种类型的ECC编码器和另一种类型的ECC解码器用编码器用低密度奇偶校验(LDPC)算法实现。
任何说明书所公开的方法和操作可以由存储在一个或多个计算机可读存储介质(例如,非暂时性计算机可读介质,例如一个或更多的光学介质盘、易失性存储器组件(例如DRAM或SRAM)或非易失性存储设备组件(例如硬盘驱动器)))上的计算机可执行指令(例如,用于本文所述操作的软件代码)实现,并在设备控制器(例如,由ASIC执行的固件)上执行。用于实现说明书所公开的技术的任何计算机可执行指令以及在所公开的实施例实现期间创建和使用的任何数据可以存储在一个或多个计算机可读介质(例如,非暂时性计算机可读介质)上。
虽然本说明书已经公开了各种方面和实施例,但是其他方面和实施例对于本领域技术人员来说将是显而易见的。这里公开的各个方面和实施例是出于说明的目的而不是限制性的,真正的范围和思想由所附权利要求指示。