具体实施方式
根据本公开的具体实施例,现在将参考附图进行详细描述。为了一致性,各个图中的相同元件由相同的附图标记表示。
本公开提供了用超低延迟和具有奇偶校验保护来快速访问非易失性存储设备的系统和方法。如本文所用,非易失性存储器设备可以是计算机存储设备,其可以在断电之后维持所存储的信息,并且可以在重新通电(关闭并重新打开)之后重新恢复所存储的信息。非易失性存储设备可以包括软盘、硬盘驱动器、磁带、光盘、NAND闪存、NOR闪存、磁阻随机存取存储器(MRAM)、电阻随机存取存储器(RRAM)、相变随机存取存储器(PCRAM)和Nano-RAM等。在本文的描述中,NAND闪存可以用作所提出的快速访问和数据损坏保护技术的示例。然而,根据本公开的各种实施例可以利用其他类型的非易失性存储设备来实现所公开的技术内容。
根据本公开的一个实施例可以提供超短访问时间并且通过取决于非易失性存储设备的通道数量的因子来改善非易失性存储设备的响应时间。例如,对于(M+F)-通道非易失性存储器设备,响应时间可以提高M倍。此外,F个额外通道可以用于提供RAID保护(例如,奇偶校验保护)。在无法成功读取一个或多个通道的情况下(例如,不能从一个或多个通道恢复数据),可以使用奇偶校验信息来恢复原始数据流。例如,如果一个通道故障,RAID-5配置中的一个额外通道可以提供恢复支持,如果两个通道故障,RAID-6配置中的两个额外通道可以提供恢复支持。在一个实施例中,ECC引擎可以是多核ECC引擎或超级ECC引擎以提供ECC码字的快速处理时间。
图1示意性地示出了根据一个实施例的示例性的多通道NAND存储设备100。NAND存储设备100可以包括多个通道CH(1)、CH(2)、到CH(M+F)(总共M+F个通道)。每个通道可包括多个颗粒(Die)。例如,通道CH(1)可以包括N个颗粒:102.1、102.2、102.3、102.4,以此类推,直到102.N;通道CH(2)可以包括N个颗粒:104.1、104.2、104.3、104.4,以此类推,直到104.N;以及通道CH(M+F)可以包括N个颗粒:106.1、106.2、106.3、106.4,以此类推,直到106.N。数字N可以表示一个通道中的颗粒总数。因此,(M+F)个通道可以包括(M+F)乘以N((M+F)×N)个颗粒。在一个实施例中,数字N可以是大于1的整数,例如但不限于2、4、6、8或更多,并且不一定是偶数。应当注意,(M+F)通道NAND设备100可以仅是更一般的多通道实施例的示例,其中M可以是大于1的整数,例如但不限于2、4、6、8、10、12等。在一些实施例中,M可以不一定是偶数,例如,M可以是3、5、7、9等。数字F可以是大于或等于1的整数。例如,在RAID-5配置中,F可能是1;在RAID-6配置中,F可能是2。此外,图1示出了每个通道可以具有K比特的带宽,其中K可以是大于1的整数,例如但不限于2、4、8、16或任何合适的整数。
图2示意性地示出了根据本公开一个实施例的具有被存储在多通道NAND存储设备中的多个数据片(date pieces)的存储系统200。存储系统200可以包括NAND存储设备,例如图1中所示的NAND存储设备100。NAND存储设备可以经由带宽为(M+F)×K比特的超级通道(也可以称为超级总线)耦合到存储系统控制器(未示出),其中(M+F)可以是NAND存储设备的通道数量,K可以是每个通道的带宽。在编程操作(也称为写操作)期间,可以通过超级通道接收202.1、202.2到202.M+F的多个数据片,并将其分散到(M+F)个通道的不同颗粒。例如,数据片202.1可以存储在通道CH0的颗粒102.i中,数据片202.2可以存储在颗粒104.i中,数据片202.M+F可以存储在颗粒106.i中,等等,其中索引“i”可以表示通道的N个颗粒之一。在一个实施例中,索引“i”可以在操作期间根据颗粒上的以容纳要存储的数据的可用空间来确定。
该202.1,202.2到202.M+F的多个数据片可以包括M个ECC码字(也可以称为m个码字或M个码字)和F个ECC奇偶校验块。M个码字可以对应于一个用户数据单元的M个数据块,其中每个数据块是用户数据单元的1/M。每个用户数据单元可以是从主机接收的数据流的操作单元,其可以是L KB(例如,1KB,2KB,4KB等)。例如,数据流可以包括L KB的一个或多个用户数据单元,并且每个用户数据单元可以被划分为M个数据块。在实现RAID-5的一些实施例中,可以通过对一个用户数据单元的M个数据块的XOR运算来生成奇偶校验块。并且可以通过ECC编码奇偶校验块来生成ECC奇偶校验块。在实现RAID-5的一些其他实施例中,可以通过对M个码字的XOR运算来生成ECC奇偶校验块。在实现RAID-6的一些实施例中,可以在一个用户数据单元的M个数据块上生成两个奇偶校验块。并且可以通过ECC编码两个奇偶校验块来生成两个ECC奇偶校验块。在实现RAID-6的一些其他实施例中,可以在M个码字上生成两个ECC奇偶校验块。因此,在各种实施例中,原始用户数据单元可以分散到不同的通道中,并且每个数据分区可以分别由一个ECC码字保护,并且可以减小由于一个通道故障而无法恢复原始用户数据单元的错误概率。此外,一个或多个额外通道中的奇偶校验信息可以为M-通道ECC数据提供保护,从而进一步增强ECC可靠性和鲁棒性。
尽管上面的示例描述了一个或两个额外的通道来补充M个通道,但是相同的技术可以应用于更多的额外通道。在一般配置中,总共(M+F)个通道,其中每个用户数据单元可以被划分为M个数据块并被编码为M个ECC码字;可以根据M个数据块或M个ECC码字生成F个ECC奇偶校验块。使用RAID-5算法的F为1和使用RAID-6算法的F为2,这可以是两个具体实施例。
不管ECC奇偶校验块是如何生成的,该M个码字和该ECC奇偶校验块中的每一个可以存储在任何一个通道中,并以一个完整的数据片存储在对应的每一个通道中。在一些实施例中,可以选择M个码字和ECC奇偶校验块的通道分配,使得用于不同用户数据单元的多个码字和ECC奇偶校验块可以均匀地分布在所有(M+F)个通道中。在具有RAID-5实现的一个实施例中,例如,用于第一用户数据单元的M个码字可以分布在第一组M个通道中,并且用于第一用户数据单元的ECC奇偶校验块可以存储在额外通道中;用于第二用户数据单元的M个码字可以分布在第二组M个通道中,并且用于第二用户数据单元的ECC奇偶校验块可以存储在额外通道中;等等,其中M个通道组和额外通道在不同用户数据单元之间移位。在另一个实施例中,用于每个用户数据单元的M个码字和ECC奇偶校验块的通道可以由存储控制器以随机或伪随机方式使用算法来选择。在这些实施例中,存储控制器可以跟踪码字和ECC奇偶校验块的位置(例如,通过算法、存储位置信息或者两者)。
虽然未示出,但是NAND存储设备的每个颗粒(die)可以包括多个页(pages),这些页可以布置在一个或多个图层(planes)中。在一些实施例中,NAND存储设备的编程写入可以是基于页的。也就是说,可以按照逐页处理的方式将数据编程写入到物理存储器(例如,(M+F)个通道的颗粒),其中页是最小的编程写入单元。在一个实施例中,用于NAND存储设备的控制器可以提供暂停操作模式,使得可以在控制器处缓冲数据,使得(M+F)个页的数据(例如,足够的数据来填充(M+F)个通道的(M+F)个不同颗粒中的(M+F)个单独的页)可以在一个编程写入操作中被编程写入到NAND存储设备,其中每一页的数据被编程写入在不同通道的一个颗粒中。在另一个实施例中,暂停模式可能不被NAND存储器的控制器提供(例如,禁用或未实现),但是填充可能被提供,使得即使数据不能填满(M+F)个页也可以将数据编程写入到NAND存储设备(例如,对页的未填充存储单元进行填充)。
图3示意性地示出了根据本公开的一个实施例的存储系统300。存储系统300可以包括存储控制器304和NAND存储设备318。NAND存储设备318可以是NAND存储设备100的一个实施例。存储控制器304可以经由接口316耦合到主机302。接口316可以是许多当前使用或尚未开发的接口之一,例如但不限于串行AT附件(SATA)、并行ATA(PATA)、PCI Express(PCI-E)、安全数字(SD)、通用串行总线(USB)等。在各种实施例中,存储系统300可以在存储卡、USB闪存驱动器和固态驱动器中实现,来为主机302提供非易失性存储。在一些实施例中,主机302可以是计算设备,例如但不限于智能电话、平板计算设备、台式计算机、手提电脑、服务器计算机等。
存储控制器302还可以经由第二接口314耦合到NAND存储设备318。第二接口314可以是通道接口,其被配置为将用于用户数据单元的数据片(包括M个ECC码字和F个ECC奇偶校验块)分发到用于写入操作的通道,并从用于读取操作的通道中重新恢复数据片。在一些实施例中,接口314还可以被设计为监视和同步(M+F)个通道上的数据流量,对于要存储(M+F)×Q个页的数据,在(M+F)个通道上定位到第一组可用的对齐页,其中Q可以是来自主机302的未完成逻辑命令的数量。在一个实施例中,Q可以对应于来自主机302的页读取或写入命令的数量。
除了接口316和第二接口314之外,控制器304还可以包括奇偶校验生成模块306、ECC引擎308和存储缓冲器310。奇偶校验生成模块306可以是被配置为在写入操作(也可以称为编程操作)期间为用户数据单元生成奇偶校验信息的电路模块。此外,如果在读取操作期间从一个通道获取的一个或多个数据片未能被成功解码,则奇偶校验生成模块306可以被配置用来恢复用户数据单元。在一个实施例中,奇偶校验生成模块306可以被配置为执行一个奇偶校验操作(例如,RAID-5配置的XOR操作)。在另一实施例中,奇偶校验生成模块306可以被配置用来执行两个不同的奇偶校验操作(例如,RAID-6配置的两个奇偶校验操作)。
ECC引擎308可以被配置为将来自主机302的数据编码为ECC码字以存储在NAND存储设备318中,并将从NAND存储设备318获取的ECC码字解码成为主机302需要的数据。在一个实施例中,ECC引擎308可以是多核引擎。在另一个实施例中,ECC引擎308可以是超级引擎。在这两个实施例中,ECC引擎308可以具有超高带宽以服务于多通道数据流量。
在一些实施例中,存储缓冲器310可以是具有高带宽的存储体。在一个实施例中,写入(“PROG”)和读取(READ)路径可以共享存储缓冲器310,因为一个物理通道可以被PROG或READ数据流量占用。在编程写入操作期间,在这些码字和F个ECC奇偶校验块可能被发送到NAND存储设备318的通道之前,存储缓冲器310可以临时存储编码数据(例如M个ECC码字和F个ECC奇偶校验块312.1到312.M+F)。在读取操作期间,存储缓冲器310用于临时存储从通道获取的数据片。
图4A示意性地示出了根据一个实施例的如何通过示例性存储控制器304处理用户数据单元以进行存储。在编程写入操作期间,可以从主机(例如,主机302)接收用户数据单元402。用户数据单元402可以是从主机接收的用于存储的数据流的一部分。一旦接收到,用户数据单元402可以被划分为多个数据块404。多个数据块404中的每一个可以表示为USER1、USER2、USER3到USERm(m对应于要用于存储用户数据单元402的M个通道)。ECC引擎308可以将多个数据块404编码为多个ECC码字406。多个ECC码字406中的每一个可以表示为CW1、CW2、CW3到CWm,每个ECC码字CWi对应于数据组USERi(“i”是表示从1到m的任何数字的索引)。奇偶校验生成模块306可以生成用于多个码字406的奇偶校验信息,并且生成的奇偶校验信息可以表示为F个ECC奇偶校验块408(一个ECC奇偶校验块408是作为示例示出的)。可以将多个ECC码字406和F个ECC奇偶校验块408发送到NAND存储设备(例如,NAND存储设备318)的通道中。此后,(m+F)个数据片(包括对应于用户数据单元的m个数据块的m个码字和F个ECC奇偶校验块)可以存储在NAND存储设备的(M+F)个通道上的(M+F)个颗粒中。
图4B示意性地示出了根据一个实施例的如何通过示例性存储控制器304处理来自存储器的ECC码字以进行读取操作。在读取操作期间,可以从NAND存储设备(例如,NAND存储设备318)读取多个数据片。多个数据片可包括从一组M个通道接收的m个数据片410和从F个额外通道接收的F个数据片412(一个数据片412是作为示例示出的)。存储控制器304可以具有多个(M+F)通道中的m个ECC码字的位置信息(例如,通过跟踪位置信息,算法或两者)并且可以被配置为选择并发送m个ECC码字到ECC引擎308。ECC引擎308可以解码m个ECC码字并生成用户数据块404的完整集合。例如,在RAID-5配置中,如果m个ECC码字中的其中一个无法被ECC引擎308解码,则不能生成相应的用户数据块,并且可能从用户数据块404的完整集合中丢失相应的用户数据块。奇偶校验生成模块306可以使用数据片412和其他m减1(m-1)个ECC码字来恢复解码失败的ECC码字。并且ECC引擎308可以使用恢复的ECC码字来生成丢失的用户数据块以完成用户数据块404的完整集合。一旦可以完成用户数据块404的完整集合,就可以生成用户数据单元402并将其发送到主机(例如,主机302或其他不同主机)。在另一示例的RAID-6配置中,可以恢复两个解码失败的ECC码字,并且ECC引擎308可以使用恢复的ECC码字来生成丢失的用户数据块以完成用户数据块404的完整集合。
在一些实施例中,在初始读取中可能不需要数据片412。例如,在一个实施例中,在初始读取期间仅m个数据片可以从m个通道组中被读取,并且数据片412可能不被读取。如果这些m个数据片是m个ECC码字,则ECC引擎308可以解码m个数据片以生成用户数据块的完整集合。如果m个数据片包括m减P(m-P)个ECC码字和P个ECC奇偶校验块408,则奇偶校验生成模块306可以用于从(m-P)个ECC码字和P个ECC奇偶校验块408生成P个丢失的ECC码字。如本文所用,P可以是小于或等于F的整数。在任一情况下,如果ECC引擎308成功解码m个ECC码字,则该读取操作可能不需要数据片412,并且可以略过读取额外的通道。因此,即使(M+F)个通道中的一个或多个通道(最多F通道)被损坏,用户数据单元仍然可以被恢复。
如果ECC引擎308未能解码所有m个ECC码字,则可以从额外通道读取一个或多个数据片412。如果从m个通道组读取的m个数据片是m个ECC码字,则数据片412可以是ECC奇偶校验块408。如果m个数据片的P(最多F)个ECC码字未能被解码,则一旦可以从额外通道读取P个ECC奇偶校验块408,那么这些码字可以通过使用奇偶校验生成模块306对剩余的ECC码字和P个ECC奇偶校验块408进行P个奇偶校验操作来恢复。并且可以由ECC引擎308对恢复的P个ECC码字进行解码以完成用户数据块404的完整集合。
如果从m个通道组中读取的m个数据片包括(m-P)个ECC码字和P个ECC奇偶校验块408,则来自F个额外通道的F个数据片412可以包括从m个ECC码字中丢失的P个ECC码字和F减P(F-P)个ECC奇偶校验块408。最初,可以通过在(m-P)个ECC码字和P个ECC奇偶校验块408上使用奇偶校验生成模块306的奇偶校验操作来获得丢失的ECC码字。如果P个ECC奇偶校验块408中的一个或多个包含错误,使得通过奇偶操作获得的丢失的P个ECC码字未能被解码,则可以从F个额外通道读取P个数据片412并由引擎308解码以帮助解决这个问题。
如果m个数据片的(m-P)个ECC码字中的一个或多个码字可能是错误的并且不能被ECC引擎308解码,则通过奇偶校验操作获得的P个丢失的ECC码字也可能是错误的并且不能被ECC解码引擎308。在这种情况下,可以从F个额外通道读取多达F个数据片412,并且由奇偶校验生成模块306使用它来恢复(m-P)个ECC码字的错误ECC码字并获得所有丢失的ECC码字。并且恢复的ECC码字和获得的丢失的ECC码字可以由引擎308解码以解决ECC解码失败。在任何情况下,(M+F)个通道中的多达F个故障可以是可恢复的,并且可以在读取操作期间获得原始存储的数据。
图5A示意性地示出了根据另一实施例如何通过示例性存储控制器304处理用户数据单元以进行存储。在编程写入操作期间,可以从主机(例如,主机302)接收用户数据单元502,并且可以将用户数据单元502分成多个数据块504。多个数据块504中的每一个可以表示为USER1,USER2,USER3到USERm(m对应于要用于存储用户数据单元502的M个通道)。奇偶校验生成模块306可以生成用于多个数据块504的奇偶校验信息,并且生成的奇偶校验信息可以表示为F个奇偶校验块506(其中一个奇偶校验块506是作为示例在图5A中示出的)。ECC引擎308可以将多个数据块504编码为多个ECC码字506,并将奇偶校验块506编码为F个ECC奇偶校验块510(一个ECC奇偶校验块510是作为示例在图5A中示出的)。多个ECC码字508中的每一个可以表示为CW1、CW2、CW3到CWm,每个ECC码字CWi对应于数据组USERi(“i”是表示从1到m的任何数字的索引)。多个ECC码字508和ECC奇偶校验块510可以被发送到NAND存储设备(例如,NAND存储设备318)的通道中。此后,(m+F)个数据片(包括来自m个数据块编码的m个码字508和来自奇偶校验块506编码的F个ECC奇偶校验块510)可以存储在NAND存储设备(例如,NAND存储设备318)的(M+F)个通道上的(M+F)个颗粒中。
图5B示意性地示出了根据另一实施例的如何通过示例性存储控制器304处理来自存储器的ECC码字以进行读取操作。在读取操作期间,可以从NAND存储设备(例如,NAND存储设备318)读取多个数据片。多个数据片可包括从一组M个通道接收的m个数据片512和从F个额外通道接收的F个数据片514。存储控制器304可以被配置为将m个数据片512和额外数据片514发送到ECC引擎308。m个数据片512和F个额外数据片514可以包括m个ECC码字508和F个ECC奇偶校验块510。ECC引擎308可以解码m个ECC码字508并生成用户数据块504'的集合,并解码ECC奇偶校验块510并生成奇偶校验块506'。如果ECC码字解码被成功执行,则由ECC引擎308生成的用户数据块504'的集合与原始用户数据单元的集合504相同。存储控制器304可以具有多个(M+F)通道的m个ECC码字的位置信息(例如,通过跟踪位置信息、算法或者两者)并使用该信息来生成用户数据单元502。如果P个ECC码字未能被ECC引擎308成功解码,则用户数据块504'可能丢失P个用户数据块。在这种情况下,可以由奇偶校验生成模块306对(m-P)个用户数据块和P个奇偶校验块506'执行奇偶校验操作以生成丢失的用户数据块。一旦可以完成用户数据块504的完整集合,就可以生成用户数据单元502并将其发送到主机(例如,主机302或其他不同主机)。
在一些实施例中,在初始读取中可能不需要任何数据片514。例如,在一个实施例中,在初始读取期间可以仅从m个通道组中读取m个数据片,并且不读取任何数据片514。如果m个数据片对应于m个ECC码字,则m个数据片可以被ECC引擎308解码以生成该组用户数据块504'。如果ECC引擎308成功解码m个ECC码字,则该读取操作不需要任何数据片514,同时可以略过读取所有F个额外通道。如果m个数据片包括(m-P)个ECC码字和P个ECC奇偶校验块510,则m个数据片被ECC引擎308成功解码,然后奇偶校验生成模块306可以使用(m-P)个用户数据块504'和P个奇偶校验块506'来恢复丢失的用户数据块。在这种情况下,该读取操作也不需要任何数据片514,并且也可以略过读取所有F个额外通道。
然而,如果m个数据片512中的P个未能被引擎308成功解码,则可以从F个额外通道读取P个数据片514并被引擎308解码。解码后的每个数据片514可以是丢失的用户数据块504'或奇偶校验块506'。如果它是丢失的用户数据块504',则可以直接使用它来完成用户数据块504的集合。如果它是奇偶校验块506',则可以使用奇偶校验生成模块306恢复丢失的用户数据块504,其中奇偶校验生成模块306已经成功生成了用户数据块504'和奇偶校验块506'。因此,即使(M+F)个通道中的多达F个通道被损坏,用户数据单元仍然可以被恢复。
图6示意性地示出了根据本公开的一个实施例的非易失性存储系统执行读取操作的延迟。读取命令(例如CMD602.1至CMD602.M+1)可以分别在(M+F)个通道CH(1)至CH(M+F)上发出。每个通道可能花费一段时间tR来准备传输数据,这可以由非易失性存储器设备决定。常规系统可能需要一段时间t_XFER来获取数据单元的数据片并将它们传送到控制器,与此相比,多个通道CH(1)到CH(M+F)中的每一个可能需要一段时间t_XFER/M用于操作RD_DATA_XFER 604.1到RD_DATA_XFER 604.M+F以将各个数据片传送到控制器。因此,尽管t_XFER可能受到接口速度的限制,但是将用户数据单元划分为m个数据分区可以帮助将传输时间减少m倍。
一旦接收到数据单元的(M+F)个数据片,控制器就可以调用ECC引擎,并且ECC引擎可以在一段时间t_ECC之后生成ECC输出606。通过将用户数据单元划分为m个数据分区,每个数据分区可以由更短的ECC码字(与没有分区的用户数据单元的长ECC码字相比)来保护,该码字可能需要更少的时间来进行编码/解码操作。并且可以通过在可以非常快速地执行编码/解码的一些实施例中使用超级ECC引擎或者在可以并行执行多个编码/解码的一些其他实施例中使用多核ECC引擎来进一步减少t_ECC。在一些实施例中,如果一个或多个m个ECC码字未能成功解码,则可以通过对其他成功解码的用户数据块和解码的奇偶校验块执行奇偶校验操作来恢复丢失的用户块。在数据输出608时间段期间,用于奇偶校验操作610的基于奇偶校验的恢复时间或延迟可以被隐藏,并且不引入额外的延迟。因此,最终数据输出608可以在t_Latency=tR+t_XFER/M+t_ECC+t_output的延迟之后被生成。相反,传统的NAND存储系统可以在tR+t_XFER+t_ECC+t_output的延迟之后生成一个输出。
不同通道的时间间隔tR可能不同,因此等待所有(M+F)个数据片准备就绪可能延迟ECC引擎的启动。在一个实施例中,一旦已经接收到数据单元的(M+F)个数据片中的任何数据片,控制器就可以调用ECC引擎。在一些实施例中,可以简化数据同步电路,并且可以使用来自不同通道的tR变化的影响,通过对来自最快通道的数据片开始解码操作,使系统整体延迟尽可能短。在一个实施例中,例如,可以解码来自最快M个通道的前M个数据片。经解码的数据片可对应于多个数据块的子集和至少一个奇偶校验块。并且奇偶校验生成电路模块可以对多个数据块的子集和至少一个奇偶校验执行至少一个奇偶校验操作以获得至少一个数据块,来为用户数据单元完成多个数据块的完整集合。例如,如果(M+F)个数据片中的多达F个数据片可能未能被成功解码,来自(M+F)个通道的剩余F个的剩余F数据片可用于提供恢复支持。
图7是根据本公开的一个实施例的用于对多通道非易失性存储设备进行编程写入的过程700的流程图。在框702中,可以将用户数据单元划分为多个数据块。例如,可以在存储控制器处从主机接收数据流。数据流可以包括一个或多个用户数据单元。每个用户数据单元可以被划分为多个数据块。在框704中,可以生成多个纠错码(ECC)码字和至少一个ECC奇偶校验块。通常,可以使用F个奇偶校验块。例如,在RAID-5配置中,可以使用一个奇偶校验块;在RAID-6配置中,可以使用两个奇偶校验块。在一个实施例中,多个ECC码字中的每一个可以通过对多个数据块的相应数据块进行编码来生成。ECC奇偶校验块可以通过使用奇偶校验生成操作从多个数据块生成奇偶校验数据块并对奇偶校验数据块进行编码以生成ECC奇偶校验块。在另一实施例中,多个数据块的每一个可以分别编码以生成多个ECC码字中的单个ECC码字,并且可以通过对多个ECC码字进行奇偶校验生成操作来生成ECC奇偶校验块。
在框706中,将多个ECC码字和至少一个ECC奇偶校验块发送到非易失性存储设备的多个通道,其中该多个ECC码字和该至少一个ECC编码的奇偶校验块将被存储在多个通道的不同通道中。在一个实施例中,非易失性存储设备的每个通道包括多个颗粒,并且多个ECC编码的码字和F个ECC奇偶校验块中的每一个可以存储在不同通道的不同颗粒中。在各种实施例中,非易失性存储设备可以是NAND闪存、NOR闪存、磁阻随机存取存储器(MRAM)、电阻随机存取存储器(RRAM)、相变随机存取存储器(PCRAM)或纳米随机存储器(Nano-RAM)。
应当注意的是,在被编程写入到每个通道之前,根据非易失性存储设备的类型,可能需要将要编程写入到每个相应通道中的编码数据聚合成所需的最小尺寸。此外,如果写入数据不足以满足相应类型的非易失性存储设备所需的最小尺寸,则可以填充伪数据以完成编程写入操作。
因为原始用户数据单元可以被划分为M个数据块,每个数据块可以由ECC码字单独保护并且还分布到不同的通道中,所以整体ECC鲁棒性得到增强。此外,可以使用一个或多个额外通道来存储奇偶校验信息从而可以使用RAID技术来进一步改善存储在每个通道中的数据的持久性。在一个实施例中,可以对M个编码数据片(也称为M个码字)执行奇偶校验生成操作,以在M并行编码器的输出处生成第(M+1)到第(M+F)RAID奇偶校验数据片(因此,不会引入额外的延迟)。然后可以将生成的RAID奇偶校验数据片编程写入到(M+F)个通道的F个通道中,同时将M个码字编程写入到其他M个通道中。在另一个实施例中,可以并行地对M个数据块执行奇偶校验生成操作,以在M并行编码器的输入处生成第(M+1)到第(M+F)RAID奇偶校验数据块(因此,不会引入额外的延迟)。然后可以对生成的F个RAID奇偶校验块进行编码以生成F个ECC奇偶校验块,将其编程写入到(M+F)个通道的F个通道中,同时将M个码字编程写入到其他M个通道中。在一些实施例中,将F个ECC奇偶校验块编程写入到F个通道中的编程写入操作不会影响其他M个通道上的正常操作。
图8是根据本公开的实施例的用于从多通道非易失性存储设备读取数据的过程800的流程图。在框802中,可以并行地从非易失性存储设备的多个通道读取包括多个ECC码字和至少一个ECC奇偶校验块的数据片。例如,来自主机的读取命令可以在存储控制器处被转换为多个读取操作,并且可以在非易失性存储设备(例如,多通道NAND存储设备)的多个通道上并行地执行多个读取操作。可以从非易失性存储设备的多个通道接收包括与用户数据单元的多个数据块和至少一个ECC奇偶校验块对应的多个ECC码字的数据片。在框804中,如果多个ECC码字中的一个或多个未能被成功解码,则可以对多个ECC码字进行解码以生成多个数据块,并利用其中至少一个ECC奇偶校验块提供恢复支持。在一个实施例中,可以对多个ECC码字进行解码以生成用户数据单元的多个数据块。如果一个或多个ECC码字未能被成功解码,则如果至少一个ECC奇偶校验块可能已经通过使用ECC码字的奇偶校验操作被生成,那么该至少一个ECC奇偶校验块可用于恢复解码失败的ECC码字,或者可以首先解码至少一个ECC奇偶校验块以生成至少一个奇偶校验块,并且如果已经通过奇偶校验块的ECC编码生成了至少一个ECC奇偶校验块,则可以使用该至少一个奇偶校验块来恢复该数据块。
在一些实施例中,为了实现具有超低延迟的快速读取,可以同时读取所有(M+F)个通道。从(M+F)个通道读取的(M+F)个编码数据片可以由超级解码器引擎或多核解码器引擎并行解码。因为可以同时解码(M+F)个编码数据片,所以与解码长ECC码字相比,产生的ECC延迟可能被最小化。此外,只要在ECC解码之后只有(M+F)个数据片中多达F个解码失败,原始用户数据单元仍然可以在没有额外ECC延迟的情况下成功恢复,因为可以在数据输出传输的同时操作其他成功解码的数据片上的奇偶校验操作。
图9是根据本公开另一实施例的用于从多通道非易失性存储设备读取数据的过程900的流程图。在框902中,M个数据片可以从非易失性存储设备的总共(M+F)个通道中的M个被并行读取。在一个实施例中,M个ECC码字可以对应于一个用户数据单元的M个数据块。M个ECC码字和F个ECC奇偶校验块可以是存储在(M+F)个通道中的(M+F)个数据片。M可以是大于1的整数,F可以是大于或等于1的整数。在框904中,确定M个数据片可能对应于多个ECC码字。在框906中,对该M个数据片进行解码以获得多个数据块,并利用其中至少一个ECC奇偶校验块提供恢复支持。
图10是根据本公开另一实施例的用于从多通道非易失性存储设备读取数据的过程1000的流程图。在框1002中,M个数据片可以从非易失性存储设备的总共(M+F)个通道中的M个被并行读取。多个ECC码字和至少一个ECC奇偶校验块可以是存储在(M+F)个通道中的(M+F)个数据片,其中M可以是大于1的整数,F可以是大于或等于1的整数。在框1004中,确定M个数据片可以包括至少一个ECC奇偶校验块。如文中所述,在一个实施例中,M个数据片可包括一个或多个(最多F个)ECC奇偶校验块。在框1006中,可以通过对M个数据片的至少一个奇偶校验操作来获得不包括在M个数据片中的至少一个ECC码字。例如,可以通过对M个数据片的奇偶校验操作来获得与一个用户数据相对应的多个ECC码字中的一个或多个ECC码字。在框1008中,可以解码多个ECC码字以获得多个数据块。例如,当多个ECC码字被全部解码并获得时,可以生成用于一个用户数据单元的多个数据块。在一个实施例中,如果一个或多个ECC码字未能被解码,则来自剩余F通道的F个数据片可用于数据恢复。
图11是根据本公开另一实施例的用于从多通道非易失性存储设备读取数据的过程1100的流程图。在框1102中,M个数据片可以从非易失性存储设备的总共(M+F)个通道中的M个被并行读取。多个ECC码字和至少一个ECC奇偶校验块可以是存储在(M+F)个通道中的(M+F)个数据片,M可以是大于1的整数,F可以是大于或等于1的整数。在框1104中,可以确定M个数据片可以包括至少一个ECC奇偶校验块。如本文所述,在一个实施例中,M个数据片可包括一个或多个(最多F个)ECC奇偶校验块。在框1106中,可以对M个数据片进行解码以获得多个数据块的子集和至少一个奇偶校验块。因为M个数据片可能包括一个或多个(最多F个)ECC奇偶校验块,所以这些M个数据片可能仅包含用于一个用户数据单元的多个ECC码字的子集,并且从该ECC码字的子集仅可以获得一个用户数据单元的数据块子集。一个或多个(最多F个)ECC奇偶校验块可以被解码为一个或多个奇偶校验块。在框1108中,可以通过对多个数据块的子集和至少一个奇偶校验进行至少一个奇偶校验操作来获得用于完成多个数据块的完整集合的至少一个数据块。例如,奇偶校验操作可以应用于通过ECC引擎的解码过程生成的数据块的子集和一个或多个奇偶校验块,以获得丢失的数据块。如果一个或多个ECC码字未能被解码,则来自剩余F通道的F个数据片可用于数据恢复。
过程700、800、900、1000和1100可以使用软件(例如,可由计算机处理器(CPU,GPU或两者)执行)、硬件(例如,现场可编程门阵列(FPGA)或专用IC(ASIC))、固件或三者的任何合适组合来实现。在一个实施例中,例如,存储控制器的组件可以以硬件电路实现,并且过程700,800,900,1000和1100可以在硬件中执行。在另一个实施例中,例如,存储控制器的组件可以用软件实现。并且可以在计算机处理器可执行指令中编程过程700、800、900、1000和1100,并且由执行可执行指令的计算机处理器(例如,微处理器或微控制器)执行。
实施例可以应用于需要高吞吐量,低延迟和数据稳健性的SSD系统。此外,实施例可用于增加非易失性存储设备的生命周期。此外,可以应用实施例来减少包括ECC处理延迟和数据传输延迟的整体系统访问延迟,从而可以实现更好的QoS。在一些实施例中,因为当多达F个通道可能被破坏,仍然可以读取数据,所以ECC鲁棒性可以被改进。另外,在至少一个实施例中,因为可以避免NAND闪存的重复读取,所以整体解码延迟时间可以被减少。
在一些实施例中,当在示例性非易失性存储系统中重新恢复原始用户数据单元时,任何M个通道的读取都足以恢复原始用户数据单元,因为它在通道基础上受RAID奇偶校验的保护。存储在额外通道中的丢失数据片可以通过奇偶校验操作获得。在解码失败的情况下,可以读取额外通道。此外,在一些实施例中,因为来自相应通道的M或(M+F)个数据片中的每一个的解码可以是独立的,所以可以不需要数据同步电路。
在一个示例性实施例中,提供了一种用于在非易失性存储设备中存储数据的方法。该方法可以包括:将用户数据单元划分为多个数据块,生成多个纠错码(ECC)码字和至少一个ECC奇偶校验块,以及将多个ECC码字和该至少一个ECC奇偶校验块发送到非易失性存储设备的多个通道,其中对于多个ECC码字和该至少一个ECC奇偶校验块将被存储在多个通道的不同通道中。
在一个实施例中,生成多个ECC码字和至少一个ECC奇偶校验块包括:分别编码多个数据块的每一个以生成多个ECC码字中的单个ECC码字,并通过对多个ECC码字进行至少一个奇偶校验操作生成至少一个ECC奇偶校验块。
在一个实施例中,生成多个ECC码字和至少一个ECC奇偶校验块包括通过至少一个奇偶校验操作从多个数据块生成至少一个奇偶校验数据块,并且编码该至少一个奇偶校验数据块以生成至少一个ECC奇偶校验块,其中,该多个数据块中的每一个被编码为该多个ECC码字中的相应ECC码字。
在一个实施例中,非易失性存储设备的每个通道包括多个颗粒,并且多个ECC码字和至少一个ECC奇偶校验块中的每一个存储在不同通道的不同颗粒中。
在一个实施例中,非易失性存储设备是以下之一:NAND闪存、NOR闪存、磁阻随机存取存储器(MRAM)、电阻随机存取存储器(RRAM)、相变随机存取存储器(PCRAM)和纳米随机存储器。
在一个实施方案中,该方法可以进一步包括:从非易失性存储设备并行读取多个ECC码字和至少一个ECC奇偶校验块,如果多个ECC码字中的一个或多个未能成功解码,则解码多个ECC码字以获得多个数据块,并利用其中至少一个ECC奇偶校验块提供恢复支持。
在一个实施例中,该方法还可以包括从非易失性存储设备的总共(M+F)个通道中的M个并行读取M个数据片。多个ECC码字和至少一个ECC奇偶校验块可以是存储在(M+F)个通道中的(M+F)个数据片,M可以是大于1的整数,F可以是大于或等于1的整数。该方法可以进一步包括确定M个数据片对应于多个ECC码字并解码M个数据片以获得多个数据块,并利用其中至少一个ECC奇偶校验块提供恢复支持。
在一个实施例中,该方法还可以包括从非易失性存储设备的总共(M+F)个通道中的M个并行读取M个数据片。多个ECC码字和至少一个ECC奇偶校验块可以是存储在(M+F)个通道中的(M+F)个数据片,M可以是大于1的整数,F可以是大于或等于1的整数。该方法还可以包括:确定M个数据片包括至少一个ECC奇偶校验块,通过对M个数据片进行至少一个奇偶校验操作获得不包括在M个数据片中的至少一个ECC码字,并解码多个ECC码字以获得多个数据块,并利用来自(M+F)个通道的剩余F个通道的F个数据片提供恢复支持。
在一个实施例中,该方法还可以包括从非易失性存储设备的总共(M+F)个通道中的M个通道并行读取M个数据片。多个ECC码字和至少一个ECC奇偶校验块可以是存储在(M+F)个通道中的(M+F)个数据片,M可以是大于1的整数,F可以是大于或等于1的整数。该方法还可以包括:确定M个数据片包括至少一个ECC奇偶校验块,解码M个数据片以获得多个数据块的子集和至少一个奇偶校验块,并通过对多个数据块的子集和至少一个奇偶校验进行至少一个奇偶校验操作来获得至少一个数据块,从而完成多个数据块的完整集合,并利用其中来自(M+F)个通道的剩余F个通道的F个数据片提供恢复支持。
在另一示例性实施例中,提供了一种装置,其可包括被耦合到主机的第一接口,被配置为生成用于从用户数据单元接收的用户数据单元的多个数据块的至少一个奇偶校验块的奇偶校验生成电路模块,被配置为将多个数据块编码为多个码字并且将至少一个奇偶校验块编码为至少一个ECC奇偶校验块的纠错码(ECC)引擎,以及耦合到非易失性存储设备以在非易失性存储设备的横跨于多个通道上分散码字和至少一个ECC奇偶校验块的第二接口。
在一个实施例中,非易失性存储设备的每个通道包括多个颗粒,并且多个ECC码字和至少一个ECC奇偶校验块中的每一个存储在不同通道的不同颗粒中。
在一个实施例中,非易失性存储设备可以是以下之一:NAND闪存、NOR闪存、磁阻随机存取存储器(MRAM)、电阻随机存取存储器(RRAM)、相变随机存取存储器(PCRAM)和纳米随机存储器。
在一个实施例中,在读取操作期间,第二接口可以被配置为从非易失性存储设备并行地读取多个ECC码字和至少一个ECC奇偶校验块。ECC引擎可以被配置为解码多个ECC码字以获得用户数据单元的多个数据块,并且奇偶校验生成电路模块可以被配置为如果有至少一个ECC码字未能成功解码,则提供恢复支持。
在一个实施例中,在读取操作期间,第二接口可以被配置为从非易失性存储设备的总共(M+F)个通道中的M个通道并行读取M个数据片,和ECC引擎可以被配置为对M个数据片进行解码以获得多个数据块,以及奇偶校验生成电路模块,被配置为在M个数据片中的有至少一个未能成功解码的情况下提供恢复支持。多个ECC码字和至少一个ECC奇偶校验块可以是存储在(M+F)个通道中的(M+F)个数据片,M可以是大于1的整数,F可以是大于或等于1的整数,并且M个数据片可以对应于多个ECC码字。
在一个实施例中,在读取操作期间,第二接口可以被配置为从非易失性存储设备的总共(M+F)个通道中的M个通道并行读取M个数据片,ECC引擎还可以被配置为解码M个数据片以获得多个数据块的子集和至少一个奇偶校验块,以及奇偶校验生成电路模块还可以被配置为对多个数据块的子集和至少一个奇偶校验块执行至少一个奇偶校验操作获得至少一个数据块,用于完成多个数据块的完整集合。多个ECC码字和至少一个ECC奇偶校验块可以是存储在(M+F)个通道中的(M+F)个数据片,M可以是大于1的整数,F可以是大于或等于1的整数。M个数据片可以包括至少一个ECC奇偶校验块,并利用来自(M+F)个通道的剩余F个的F个数据片提供恢复支持。
在又另一示例性实施例中,提供了一种装置,其可包括要耦合到主机的第一接口,被配置为将多个数据块编码成多个码字的纠错码(ECC)引擎,被配置为从多个码字生成至少一个ECC奇偶校验块的奇偶校验生成电路模块,以及耦合到非易失性存储设备以横跨于非易失性存储设备的多个通道上分发多个码字和至少一个ECC奇偶校验块的第二接口。
在一个实施例中,非易失性存储设备的每个通道可以包括多个颗粒,多个ECC码字和ECC奇偶校验块中的每一个可以存储在不同通道的不同颗粒中,并且非易失性存储器器件可以是以下之一:NAND闪存、NOR闪存、磁阻随机存取存储器(MRAM)、电阻随机存取存储器(RRAM)、相变随机存取存储器(PCRAM)和纳米随机存储器。
在一个实施例中,在读取操作期间,第二接口可以被配置为从非易失性存储设备并行读取多个ECC码字和至少一个ECC奇偶校验块,ECC引擎可以被配置为解码多个ECC码字以获得用户数据单元的多个数据块,并且奇偶校验生成电路模块可以被配置为如果ECC码字中的至少一个未能被成功解码则提供恢复支持。
在一个实施例中,在读取操作期间,第二接口可以被配置为从非易失性存储设备的总共(M+F)个通道中的M个通道并行读取M个数据片,ECC引擎可以被配置为对M个数据片进行解码以获得多个数据块,以及奇偶校验生成电路模块可以被配置为如果M个数据片中的至少一个未能被成功解码则提供恢复支持。多个ECC码字和至少一个ECC奇偶校验块可以是存储在(M+F)个通道中的(M+F)个数据片,M可以是大于1的整数,F可以是大于或等于1的整数,并且M个数据片可以对应于多个ECC码字。
在一个实施例中,在读取操作期间,第二接口可以被配置为从非易失性存储设备的总共(M+F)个通道中的M个通道并行读取M个数据片,奇偶校验生成电路模块还可以被配置为对M个数据片执行至少一个奇偶校验操作以获得存储在(M+F)个通道的F个通道中的多个码字的剩余码字,以及ECC引擎还可以被配置为对多个ECC码字进行解码获得多个数据块。多个ECC码字和至少一个ECC奇偶校验块可以是存储在(M+F)个通道中的(M+F)个数据片,M可以是大于1的整数,F可以是大于或等于1的整数,M个数据片可以包括至少一个ECC奇偶校验块,并且来自(M+F)个通道的剩余F个通道的F个数据片可以提供恢复支持。
任何所公开的方法和操作可以实现为存储在一个或多个计算机可读存储介质(例如,非暂时性计算机可读介质,诸如一个或多个光学介质盘,易失性存储器组件(如DRAM或SRAM)或非易失性存储器组件(如硬盘驱动器))上的计算机可执行指令(例如,用于此处所描述的操作的软件代码),并在设备控制器(例如,由ASIC执行的固件)上执行。用于实现所公开的技术的任何计算机可执行指令以及在所公开的实施例的实现期间创建和使用的任何数据可以存储在一个或多个计算机可读介质(例如,非暂时性计算机可读介质)上。
虽然本文已经公开了各种方面和实施例,但是其他方面和实施例对于本领域技术人员来说将是显而易见的。这里公开的各个方面和实施例是出于说明的目的而不是限制性的,真正的范围和精神由所附权利要求指示。