CN108694098B - 对于存储设备的不同存储器区域的比特顺序修改 - Google Patents

对于存储设备的不同存储器区域的比特顺序修改 Download PDF

Info

Publication number
CN108694098B
CN108694098B CN201810164225.9A CN201810164225A CN108694098B CN 108694098 B CN108694098 B CN 108694098B CN 201810164225 A CN201810164225 A CN 201810164225A CN 108694098 B CN108694098 B CN 108694098B
Authority
CN
China
Prior art keywords
memory
codebook
bad
codeword
bits
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN201810164225.9A
Other languages
English (en)
Other versions
CN108694098A (zh
Inventor
R.罗姆
I.戈登堡
A.巴扎尔斯基
E.沙伦
R.扎米尔
I.阿尔罗德
S.阿赫滕伯格
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
SanDisk Technologies LLC
Original Assignee
SanDisk Technologies LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by SanDisk Technologies LLC filed Critical SanDisk Technologies LLC
Publication of CN108694098A publication Critical patent/CN108694098A/zh
Application granted granted Critical
Publication of CN108694098B publication Critical patent/CN108694098B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1012Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
    • G06F11/1032Simple parity
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/11Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/11Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
    • H03M13/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • H03M13/1148Structural properties of the code parity-check or generator matrix
    • H03M13/116Quasi-cyclic LDPC [QC-LDPC] codes, i.e. the parity-check matrix being composed of permutation or circulant sub-matrices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1012Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0644Management of space entities, e.g. partitions, extents, pools
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0688Non-volatile semiconductor memory arrays
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/11Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
    • H03M13/1102Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
    • H03M13/1105Decoding
    • H03M13/1111Soft-decision decoding, e.g. by means of message passing or belief propagation algorithms
    • H03M13/1125Soft-decision decoding, e.g. by means of message passing or belief propagation algorithms using different domains for check node and bit node processing, wherein the different domains include probabilities, likelihood ratios, likelihood differences, log-likelihood ratios or log-likelihood difference pairs
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/27Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes using interleaving techniques
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/65Purpose and implementation aspects
    • H03M13/6566Implementations concerning memory access contentions

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Human Computer Interaction (AREA)
  • Mathematical Physics (AREA)
  • Quality & Reliability (AREA)
  • Computer Security & Cryptography (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

存储设备可以针对存储器的不同存储器区域不同地编程数据。在一些实施例中,存储设备可以针对不同的存储器区域使用不同的码本。在其它实施例中,存储设备可以针对不同的存储器区域不同地修改比特顺序。存储设备使用什么码本或存储设备对特定存储器区域执行什么比特顺序修改可以取决于存储器区域特定的坏存储位置。在使用不同的码本的情况下,可以从库中选择最佳码本,或者可以基于存储器区域的坏存储位置修改码本。

Description

对于存储设备的不同存储器区域的比特顺序修改
技术领域
本公开涉及用于对包括存储在被标识为不可靠的存储器元件中的比特的数据进行编码和解码的存储器系统和方法。
背景技术
存储器系统可以用奇偶校验比特对数据进行编码和解码,其在从存储器读取数据时为数据提供冗余和纠错能力。对数据进行编码的编码方案可以基于以下假设:读取数据时数据比特中的错误跨存储器均匀分布。然而,实际上,这些错误通常不是均匀分布的,这可能是由于容易出错或不可靠的存储位置不是跨存储器均匀地分布。将关于不可靠存储位置的信息结合到编码和解码方案中以提高解码性能可能是需要的。
发明内容
通过介绍,以下实施例涉及用于编码和解码数据的存储器系统和方法,该数据包括存储在被标识为不可靠的存储器元件中的比特。在一个实施例中,执行比特-顺序修改方法。该方法包括:利用至少一个控制器,使用码本对信息比特进行编码以生成原始码字,其中码字要被编程到存储设备的存储器的存储器区域中,该存储器区域具有相关联的坏存储位置的集合;利用至少一个控制器,通过将原始码字的坏比特与原始码字的好比特切换来修改原始码字以生成修改的码字;以及利用至少一个控制器将修改的码字编程到存储器区域中。
在一些实施例中,原始码字的坏比特对应于作为与码本的最多的坏变量节点连接的码本的预定数量的校验节点中的一个的校验节点。
在一些实施例中,原始码字的坏比特对应于连接到超过阈值或在预定范围内的数量的坏变量节点的码本的校验节点。
在一些实施例中,原始码字的坏比特对应于参与码本的最小循环的变量节点,该最小循环是具有最多参与的坏变量节点的预定数量的最小循环中的一个。
在一些实施例中,原始码字的坏比特对应于参与码本的最小循环的变量节点,该最小循坏是具有循环长度与参与的坏变量节点的数量之间的最小差或者具有参与的坏变量节点的数量与循环长度的最大比率的预定数量的最小循环中的一个。
在一些实施例中,原始码字的坏比特对应于参与码本的最小循环的变量节点,该最小循坏是具有参与的坏变量节点的数量与参与的变量节点的总数量之间的最小差或者具有参与的坏变量节点的数量与参与的变量节点的总数量的最大比率的预定数量的最小循环中的一个。
在一些实施例中,修改原始码字包括跨原始码字的子码字部分切换好比特和坏比特以生成修改的码字。响应于好比特和坏比特的切换,修改的码字包括跨修改的码字的子码字部分的坏比特的均衡分布。
在一些实施例中,多个不同的存储器区域包括存储器的不同裸芯、不同平面、不同块、不同页或不同片段。
在另一实施例中,执行比特重新排序配置方法。该方法包括:利用至少一个控制器标识存储设备的存储器的多个不同的存储器区域的存储器区域的坏存储位置信息;利用至少一个控制器标识存储设备被配置为使用其来对要存储在存储器区域中的数据进行编码的码本;利用至少一个控制器基于存储器区域的坏存储位置信息和码本,生成用于当存储设备将数据编程到存储器区域时使用的比特顺序修改配置;以及利用比特顺序修改配置来配置存储设备的比特顺序修改模块。比特顺序修改模块在配置了比特顺序修改配置时,被配置为根据比特顺序修改配置来修改要被存储在存储器区域中的码字的比特顺序。
在一些实施例中,该方法包括:利用至少一个控制器,基于连接到码本的校验节点的坏变量节点的数量来标识码本的校验节点;利用至少一个控制器,标识要存储在存储器区域中的码字的至少一个比特,以基于所标识的校验节点,针对比特顺序修改配置与码字的至少一个好比特切换。
在一些实施例中,选择校验节点是基于利用至少一个控制器标识连接到校验节点的坏变量节点的数量超过阈值数量。
在一些实施例中,选择校验节点是基于利用至少一个控制器标识校验节点是连接到最多坏变量节点的预定数量的校验节点中的一个。
在一些实施例中,该方法包括:利用至少一个控制器,基于参与码本的最小循环的坏变量节点的数量来标识码本的坏变量节点,其中坏比特对应于坏变量节点。
在一些实施例中,该方法包括:利用至少一个控制器,标识其中坏变量节点正参与的最小循环,所述标识基于与以下中的至少一个相关联的标准:参与最小循环的坏变量节点的数量、最小循环的长度或者参与最小循环的变量节点的总数量。
在一些实施例中,生成比特顺序修改配置包括跨码字的子码字部分标识与好比特切换的坏比特,其中坏比特与好比特切换的结果提供了跨子码字部分的坏比特的均衡分布。
在一些实施例中,多个不同的存储器区域包括存储器的不同裸芯、不同平面、不同块、不同页或不同片段。
在另一实施例中,存储设备包括存储器和控制器,存储器包括多个不同的存储器区域。控制器被配置为:使用码本生成第一码字,第一码字要被存储到多个不同的存储器区域的第一存储器区域中;改变第一码字的比特顺序以生成修改的第一码字,其中根据与第一存储器区域相关联的第一比特修改配置来改变第一码字的比特顺序;使用码本生成第二码字,第二码字要被存储在多个不同的存储器区域的第二存储器区域中;改变第二码字的比特顺序以生成修改的第二码字,其中根据与第二存储器区域相关联的第二比特修改配置来改变第二码字的比特顺序,并且其中第二比特修改配置不同于第一比特修改配置;以及将修改的第一码字编程在第一存储器区域中,并且将修改的第二码字编程到第二存储器区域中。
在一些实施例中,第一比特修改配置对应于第一存储器区域的坏存储位置,并且第二比特修改配置对应于第二存储器区域的坏存储位置,其中第一存储器区域的坏存储位置不同于第二存储器区域的坏存储位置。
在一些实施例中,控制器被配置为针对存储器的多个不同的存储器区域的每一个存储器区域维持相应的比特修改配置。
在一些实施例中,多个不同的存储器区域包括存储器的不同裸芯、不同平面、不同块、不同页或不同片段。
在另一实施例中,存储设备包括:存储器,其包括多个不同的存储器区域;用于使用码本生成第一码字的装置,第一码字要被存储到多个不同的存储器区域的第一存储器区域中;用于改变第一码字的比特顺序以生成修改的第一码字的装置,其中根据与第一存储器区域相关联的第一比特修改配置来改变第一码字的比特顺序;用于使用码本生成第二码字的装置,第二码字要被存储在多个不同的存储器区域的第二存储器区域中;用于改变第二码字的比特顺序以生成修改的第二码字的装置,其中根据与第二存储器区域相关联的第二比特修改配置来改变第二码字的比特顺序,并且其中第二比特修改配置不同于第一比特修改配置;以及用于将修改的第一码字编程到第一存储器区域中,并且将修改的第二码字编程到第二存储器区域中的装置。
其它实施例是可能的,并且实施例中的每一个能够被单独使用或结合使用。因此,现在将参考附图描述各种实施例。
附图说明
并入本说明书中并构成本说明书的一部分的附图示出了本发明的各个方面并且与说明书一起用于解释其原理。只要方便,将贯穿附图使用相同的参考标号来指代相同或相似的元素。
图1A是示例非易失性存储器系统的框图。
图1B是包括多个非易失性存储器系统的存储模块的框图。
图1C是分级存储系统的框图。
图2A是图1A的非易失性存储器系统的控制器的示例组件的框图。
图2B是图1A的非易失性存储器系统的非易失性存储器裸芯的示例组件的框图。
图3是示例NAND型闪速存储器阵列的电路示意图。
图4是用于闪速存储器的存储器阵列的示例组织布置或层级的框图。
图5是用于执行编码过程的图2A的控制器的示例模块的框图。
图6是奇偶校验矩阵的通用布局的示意图。
图7是与图6的奇偶校验矩阵相对应的部分完成的Tanner图的示意图。
图8是可以用来基于解码度量评估和选择码本的组件的示例实施例的框图。
图9是基于解码度量的选择码本的示例方法的流程图。
图10是在图1A-2B的存储器系统的正常操作期间对特定存储器区域执行码本评估过程的示例方法的流程图。
图11是可以用来针对图1A-2B的存储器系统的各种存储器区域对不同码本进行评估和评分的组件的示例实施例的框图。
图12A是低密度奇偶校验码的二分图的示意图。
图12B是对应于图12A的二分图的提升的图的示意图。
图13是针对给定码本和给定存储器区域计算码本分数的示例方法的流程图。
图14是基于评分方案从针对图1A-2B的存储器系统的多个存储器区域中的每一个的多个码本中选择码本的示例方法的流程图。
图15是基于坏存储位置可以涉及到码本修改或置换过程的组件的示例实施例的框图。
图16A示出了要被修改的现有码本的示例Tanner图的示意图。
图16B示出了图16A的现有码本的修改的版本的示例Tanner图的示意图,其基于连接到校验节点的坏变量节点的数量而被修改。
图17A示出了要被修改的现有码本的另一示例Tanner图的示意图。
图17B示出了图17A的现有码本的修改的版本的示例Tanner图的示意图,其基于参与最小循环的坏变量的数量而被修改。
图18是码本修改的示例方法的流程图。
图19是可以涉及确定码本的大小并基于大小确定码本的组件的示例实施例的框图。
图20A是可以被配置为对码字的信息比特序列部分生成子码奇偶校验比特的图5的奇偶校验比特生成器模块的组件的示例配置的框图。
图20B是用于生成码字的子码字的多个子码本的示意图。
图20C是奇偶校验子矩阵和联合子矩阵被集成为更大奇偶校验矩阵的一部分的示意图。
图21是可以涉及确定子码本的大小并基于大小确定子码本的组件的示例实施例的框图。
图22示出了可以针对多个存储器区域基于对于码本的大小确定来确定码本的码本确定过程的示例方法的流程图。
图23是可以针对多个存储器区域基于对于子码本的大小确定来确定子码本的子码本确定过程的示例方法的流程图。
图24是基于存储器区域的坏存储位置信息可以涉及码字修改的组件的示例实施例的框图。
图25是基于坏存储位置信息执行码字修改的示例方法的流程图。
具体实施方式
概览
通过介绍,以下实施例涉及用于编码和解码数据的存储器系统和方法,该数据包括存储在被标识为不可靠的存储器元件中的比特。在一个实施例中,执行比特-顺序修改方法。该方法包括:利用至少一个控制器,使用码本对信息比特进行编码以生成原始码字,其中码字要被编程到存储设备的存储器的存储器区域中,该存储器区域具有相关联的坏存储位置的集合;利用至少一个控制器,通过将原始码字的坏比特与原始码字的好比特切换来修改原始码字以生成修改的码字;以及利用至少一个控制器将修改的码字编程到存储器区域中。
在一些实施例中,原始码字的坏比特对应于作为与码本的最多的坏变量节点连接的码本的预定数量的校验节点中的一个的校验节点。
在一些实施例中,原始码字的坏比特对应于连接到超过阈值或在预定范围内的数量的坏变量节点的码本的校验节点。
在一些实施例中,原始码字的坏比特对应于参与码本的最小循环的变量节点,该最小循环是具有最多参与的坏变量节点的预定数量的最小循环中的一个。
在一些实施例中,原始码字的坏比特对应于参与码本的最小循环的变量节点,该最小循坏是具有循环长度与参与的坏变量节点的数量之间的最小差或者具有参与的坏变量节点的数量与循环长度的最大比率的预定数量的最小循环中的一个。
在一些实施例中,原始码字的坏比特对应于参与码本的最小循环的变量节点,该最小循坏是具有参与的坏变量节点的数量与参与的变量节点的总数量之间的最小差或者具有参与的坏变量节点的数量与参与的变量节点的总数量的最大比率的预定数量的最小循环中的一个。
在一些实施例中,修改原始码字包括跨原始码字的子码字部分切换好比特和坏比特以生成修改的码字。响应于好比特和坏比特的切换,修改的码字包括跨修改的码字的子码字部分的坏比特的均衡分布。
在一些实施例中,多个不同的存储器区域包括存储器的不同裸芯、不同平面、不同块、不同页或不同片段。
在另一实施例中,执行比特重新排序配置方法。该方法包括:利用至少一个控制器标识存储设备的存储器的多个不同的存储器区域的存储器区域的坏存储位置信息;利用至少一个控制器标识存储设备被配置为使用其来对要存储在存储器区域中的数据进行编码的码本;利用至少一个控制器基于存储器区域的坏存储位置信息和码本,生成用于当存储设备将数据编程到存储器区域时使用的比特顺序修改配置;以及利用比特顺序修改配置来配置存储设备的比特顺序修改模块。比特顺序修改模块在配置了比特顺序修改配置时,被配置为根据比特顺序修改配置来修改要被存储在存储器区域中的码字的比特顺序。
在一些实施例中,该方法包括:利用至少一个控制器,基于连接到码本的校验节点的坏变量节点的数量来标识码本的校验节点;利用至少一个控制器,标识要存储在存储器区域中的码字的至少一个比特,以基于所标识的校验节点,针对比特顺序修改配置与码字的至少一个好比特切换。
在一些实施例中,选择校验节点是基于利用至少一个控制器标识连接到校验节点的坏变量节点的数量超过阈值数量。
在一些实施例中,选择校验节点是基于利用至少一个控制器标识校验节点是连接到最多坏变量节点的预定数量的校验节点中的一个。
在一些实施例中,该方法包括:利用至少一个控制器,基于参与码本的最小循环的坏变量节点的数量来标识码本的坏变量节点,其中坏比特对应于坏变量节点。
在一些实施例中,该方法包括:利用至少一个控制器,标识其中坏变量节点正参与的最小循环,所述标识基于与以下中的至少一个相关联的标准:参与最小循环的坏变量节点的数量、最小循环的长度或者参与最小循环的变量节点的总数量。
在一些实施例中,生成比特顺序修改配置包括跨码字的子码字部分标识与好比特切换的坏比特,其中坏比特与好比特切换的结果提供了跨子码字部分的坏比特的均衡分布。
在一些实施例中,多个不同的存储器区域包括存储器的不同裸芯、不同平面、不同块、不同页或不同片段。
在另一实施例中,存储设备包括存储器和控制器,存储器包括多个不同的存储器区域。控制器被配置为:使用码本生成第一码字,第一码字要被存储到多个不同的存储器区域的第一存储器区域中;改变第一码字的比特顺序以生成修改的第一码字,其中根据与第一存储器区域相关联的第一比特修改配置来改变第一码字的比特顺序;使用码本生成第二码字,第二码字要被存储在多个不同的存储器区域的第二存储器区域中;改变第二码字的比特顺序以生成修改的第二码字,其中根据与第二存储器区域相关联的第二比特修改配置来改变第二码字的比特顺序,并且其中第二比特修改配置不同于第一比特修改配置;以及将修改的第一码字编程在第一存储器区域中,并且将修改的第二码字编程到第二存储器区域中。
在一些实施例中,第一比特修改配置对应于第一存储器区域的坏存储位置,并且第二比特修改配置对应于第二存储器区域的坏存储位置,其中第一存储器区域的坏存储位置不同于第二存储器区域的坏存储位置。
在一些实施例中,控制器被配置为针对存储器的多个不同的存储器区域的每一个存储器区域维持相应的比特修改配置。
在一些实施例中,多个不同的存储器区域包括存储器的不同裸芯、不同平面、不同块、不同页或不同片段。
在另一实施例中,存储设备包括:存储器,其包括多个不同的存储器区域;用于使用码本生成第一码字的装置,第一码字要被存储到多个不同的存储器区域的第一存储器区域中;用于改变第一码字的比特顺序以生成修改的第一码字的装置,其中根据与第一存储器区域相关联的第一比特修改配置来改变第一码字的比特顺序;用于使用码本生成第二码字的装置,第二码字要被存储在多个不同的存储器区域的第二存储器区域中;用于改变第二码字的比特顺序以生成修改的第二码字的装置,其中根据与第二存储器区域相关联的第二比特修改配置来改变第二码字的比特顺序,并且其中第二比特修改配置不同于第一比特修改配置;以及用于将修改的第一码字编程到第一存储器区域中,并且将修改的第二码字编程到第二存储器区域中的装置。
其它实施例是可能的,并且实施例中的每一个能够被单独使用或结合使用。因此,现在将参考附图描述各种实施例。
实施例
以下实施例描述用于编码和解码数据的非易失性存储器系统和相关方法,其中所述数据包括存储在或将被存储在被标识为不可靠的存储器元件中的比特。在转向这些和其它实施例之前,以下段落提供能够与这些实施例一起使用的示例性非易失性存储器系统和存储模块的讨论。当然,这些仅仅是示例,并且能够使用其它适合类型的非易失性存储器系统和/或存储模块。
图1A是示出非易失性存储器系统100的框图。非易失性存储器系统100可以包括控制器102和可由一个或多个非易失性存储器裸芯104组成的非易失性存储器。如本文所使用的,术语裸芯是指形成在单一半导体衬底上的非易失性存储器单元的集合和用于管理那些非易失性存储器单元的物理操作的相关联的电路。控制器102可以与主机系统接口,并且发送用于对(多个)非易失性存储器裸芯104的读取、编程和擦除操作的命令序列。
控制器102(其可以是和/或称为闪速存储器控制器)能够采取处理电路、微处理器或处理器和计算机可读介质的形式,所述计算机可读介质存储可由例如(微)处理器、逻辑门、开关、专用集成电路(application specific integrated circuit,ASIC)、可编程逻辑控制器和嵌入式微控制器执行的计算机可读程序代码(例如,软件或固件)。控制器102能够被配置具有硬件和/或固件,以执行下面描述并在流程图中显示的各种功能。并且,显示为控制器内部的一些组件也能够被存储在控制器的外部,并且能够使用其它组件。此外,短语“可操作地与...通信”可以意味着直接地或者通过可能会或可能不会在本文中显示或描述的一个或多个组件间接地(有线或无线)进行通信。
控制器102可以被配置为管理存储在存储器104中的数据并且与诸如计算机或电子设备的主机通信。除了本文所述的特定功能之外,控制器102可以具有各种功能。例如,控制器102能够格式化存储器104,以确保存储器104适当地运行,能够标出坏的闪速存储器单元,并分配空闲单元以替代将来的故障单元。空闲单元的一些部分能够被用来保存固件以操作控制器102并实施其它功能。在操作中,当主机需要从存储器104读取数据或向存储器104写入数据时,它将与控制器102通信。如果主机提供要读取/写入数据的逻辑地址,则控制器102能够将从主机接收的逻辑地址转换为存储器104中的物理地址。(可替换地,主机能够提供物理地址)。控制器102还能够执行各种存储器管理功能,诸如但不限于磨损均衡(分配写入以避免磨损存储器的特定块,否则该特定块将被重复写入)和垃圾收集(在块满之后,仅将数据的有效页移动到新的块,因此满的块能够被擦除并重新使用)。
控制器102和(多个)非易失性存储器裸芯104之间的接口可以是任何合适的闪速接口,诸如作为非限制性示例的切换模式(Toggle Mode)200、400或800。在一个实施例中,存储器系统100可以是基于卡的系统,诸如安全数字(secure digital,SD)卡或微安全数字(micro secure digital,micro-SD)卡。在替换性实施例中,系统100可以是嵌入式存储器系统的一部分。
非易失性存储器系统100可以包括在控制器102与(多个)非易失性存储器裸芯104之间的单个通道或者在控制器102与(多个)NAND存储器裸芯104之间的多个(例如,2、4、8或更多)通道。存在多少个通道可取决于各种因素,作为非限制性示例,诸如控制器102的能力、存储器裸芯104的数量、和/或存储器裸芯104中的存储器元件的布局或组织。在本文所述的实施例中的任何一个中,即使在图中示出了单个通道,在控制器和(多个)存储器裸芯之间也可以存在多于单个的通道。
图1B示出了包括多个非易失性存储器系统100的存储模块200。这样,存储模块200可以包括与主机和与存储系统204接口的存储控制器202,所述存储系统204包括多个非易失性存储器系统100。存储控制器202和非易失性存储器系统100之间的接口可以是总线接口,诸如作为示例的串行高级技术附件(serial advanced technology attachment,SATA)、外围组件接口快速(peripheral component interface express,PCIe)接口、嵌入式多媒体卡(embedded MultiMediaCard,eMMC)接口、SD接口或通用串行总线(UniversalSerial Bus,USB)接口。在一个实施例中,存储模块200可以是诸如在诸如膝上型计算机和平板计算机的便携式计算设备和移动电话中找到的固态驱动器(solid state drive,SSD)。
图1C是示出分级存储系统210的框图。分级存储系统210可以包括多个存储控制器202,存储控制器202中的每一个控制相应的存储系统204。主机系统212可以经由总线接口访问分级存储系统210内的存储器。作为示例,示例总线接口可以包括高速非易失性存储器(non volatile memory express,NVMe)、以太网光纤通道(fiber channel overEthernet,FCoE)接口、SD接口、USB接口、SATA接口、PCIe接口或eMMC接口。在一个实施例中,图1C中示出的存储系统210可以是可由多个主机计算机访问的可机架安装的大容量存储系统,诸如将在需要大容量存储的数据中心或其它位置中找到的系统。
图2A是更详细地示出控制器102的示例性组件的框图。控制器102可以包括与主机接口的前端模块108、与(多个)非易失性存储器裸芯104接口的后端模块110以及执行非易失性存储器系统100的各种功能的各种其它模块。
通常,如本文所使用的,模块可以是硬件或硬件和软件的组合。例如,每个模块可以包括专用集成电路(ASIC)、现场可编程门阵列(fieldprogrammable gate array,FPGA)、电路、数字逻辑电路、模拟电路、分立电路的组合、门或任何其它类型的硬件或其组合。此外或可替换地,每个模块可以包括存储器硬件,其包括可利用处理器或处理器电路运行以实现模块的一个或多个特征的指令。当模块中的任何一个包括包含可利用处理器运行的指令的存储器的部分时,模块可以包括或可以不包括处理器。在一些示例中,每个模块可以仅仅是包括可利用处理器运行以实现相应模块的特征的指令的存储器的部分,而无须模块包括任何其他硬件。因为每个模块包括至少一些硬件,即使当所包括的硬件包括软件时,每个模块也可以互换地称为硬件模块。
控制器102可以包括缓冲器管理器/总线控制器模块114,其管理随机存取存储器(random access memory,RAM)116中的缓冲器并且控制用于控制器102的内部通信总线117上的通信的内部总线仲裁。只读存储器(read only memory,ROM)118可以存储和/或访问系统引导代码。虽然在图2A中被示出为位于与控制器102分开的地方,但在其它实施例中,RAM116和ROM 118中的一个或两者可以位于控制器102内。在其它实施例中,RAM 116和ROM118的部分可以位于控制器102内部和控制器102外部两者。另外,在一些实施方式中,控制器102、RAM 116和ROM 118可以位于分开的半导体裸芯上。
此外,前端模块108可以包括提供与主机或下一级存储控制器的电接口的主机接口120和物理层接口(PHY)122。主机接口120的类型的选择能够取决于所使用的存储器的类型。主机接口120的示例类型可以包括但不限于SATA、SATA Express、SAS(Serial AttachedSmall Computer System Interface,串行连接小型计算机系统接口)、光纤通道、USB、PCIe和NVMe。主机接口120可以典型地方便对于数据、控制信号和定时信号的传送。
后端模块110可以包括错误校正控制器(error correction controller,ECC)引擎124,其对从主机接收的数据字节进行编码,并对从非易失性存储器104读取的数据字节进行解码和错误校正。后端模块110还可以包括命令序列器126,其生成要发送到(多个)非易失性存储器裸芯104的命令序列,诸如编程、读取和擦除命令序列。此外,后端模块110可以包括RAID(Redundant Array of Independent Drive,独立驱动器的冗余阵列)模块128,其管理RAID奇偶校验的生成和故障数据的恢复。RAID奇偶校验可以被用作对于被写入非易失性存储器系统100的数据的附加级别的完整性保护。在一些情况下,RAID模块128可以是ECC引擎124的一部分。存储器接口130向(多个)非易失性存储器裸芯104提供命令序列,并从(多个)非易失性存储器裸芯104接收状态信息。与命令序列和状态信息一起,要被编程到(多个)非易失性存储器裸芯104中以及要从(多个)非易失性存储器裸芯104读取的数据可以通过存储器接口130来通信传达。在一个实施例中,存储器接口130可以是双数据速率(double data rate,DDR)接口,诸如切换模式200、400或800接口。闪速控制层132可以控制后端模块110的整体操作。
图2A中示出的非易失性存储器系统100的附加模块可以包括介质管理层138,其执行非易失性存储器裸芯104的存储器单元的磨损均衡。非易失性存储器系统100还可以包括其它分立组件140,诸如可与控制器102接口的外部电接口、外部RAM、电阻器、电容器或其它组件。在替换性实施例中,RAID模块128、介质管理层138和缓冲器管理/总线控制器114中的一个或多个是在控制器102中可能不必要的可选组件。
图2B是更详细地示出非易失性存储器裸芯104的示例性组件的框图。非易失性存储器裸芯104可以包括非易失性存储器阵列142。非易失性存储器阵列142可以包括多个非易失性存储器元件或单元,每个被配置为存储一个或多个数据比特。非易失性存储器元件或单元可以是任何合适的非易失性存储器单元,包括二维和/或三维配置中的NAND闪速存储器单元和/或NOR闪速存储器单元。存储器单元可以采取固态(例如,闪速)存储器单元的形式,并且能够是一次可编程的,几次可编程的或多次可编程的。此外,存储器元件或单元可以被配置为每单元存储单个比特数据的单级单元(single-level cell,SLC)、每单元存储多比特数据的多级单元(multi-level cell,MLC)或其组合。对于一些示例配置,多级单元(MLC)可以包括每个单元存储三比特数据的三级单元(triple-level cell,TLC)。
此外,对于一些示例配置,闪速存储器单元可以在阵列142中包括具有浮置栅极和控制栅极的浮置栅极晶体管(floating gate transistor,FGT)。浮置栅极由帮助保持浮置栅极中的电荷的绝缘体或绝缘材料包围。浮置栅极内电荷的存在或不存在可以导致用于区分逻辑电平的FGT的阈值电压的偏移。也就是说,每个FGT的阈值电压可以指示存储在存储器单元中的数据。此后,FGT、存储器元件和存储器单元可以互换使用以指代相同的物理实体。
存储器单元可以根据存储器单元的行和列的矩阵状结构被布置在存储器阵列142中。在行和列的交叉处是存储器单元。一列存储器单元可以被称为串。串或列中的存储器单元可以被串联地电连接。一行存储器单元可以被称为页。页或行中的FGT的控制栅极可以被电连接在一起。
存储器阵列142还可以包括连接到存储器单元的字线和位线。存储器单元中的每一页可以被耦合到字线。特别地,每个字线可以被耦合到在页中的FGT的控制栅极。此外,每串FGT可以被耦合到位线。此外,单个串可以跨越多个字线,并且串中的FGT的数量可以等于块中的页的数量。
图3是示例性NAND型闪速存储器阵列300的至少一部分的电路示意图,其可以表示存储器阵列142的至少一部分。存储器阵列部分300可以包括P数量的(N乘M)FGT的串联连接的串,每个耦合到P数量的位线BL1到BLP-1中的一个,其中N是存储器阵列300中的块3080到308N-1的数量,并且M是N数量的块3080至308N-1的每一个中耦合到字线WL的FGT的页的数量。
为了感测来自FGT的数据,可以选择FGT页和相应的字线,并且可以采用位线的电流感测来确定所选页中的FGT的浮置栅极是否包含电荷。流过串的电流可以通过串,从源极线SL流到串耦合到的位线BL。串可经由源极选择晶体管耦合到源极线SL,且可经由漏极选择晶体管耦合到其相关联的位线BL。例如,第一串FGT 302(0,0)到302(NM-1,0)可以经由连接到源极线SL的源极选择晶体管3040耦合到源极线SL,并且可以经由漏极选择晶体管3060耦合到其相关联的位线BL0。其它的串可以被类似地耦合。可以使用供应源极选择栅极偏压VSSG的源极选择栅极偏置线SSG来控制源极选择晶体管3040、3041、...、304P-1的切换以导通和截止源级选择晶体管3040、3041、...、304P-1。此外,可以使用供应漏极选择栅极偏压VDSG的漏极选择栅极偏置线DSG来控制漏极选择晶体管3060、3061、...、306P-1的切换以导通或截止漏级选择晶体管3060、3061、...、306P-1
返回参考图2B,非易失性存储器裸芯104还可以包括页缓冲器或数据高速缓冲存储器144,页缓冲器或数据高速缓存144高速缓存从存储器阵列142感测和/或将被编程到存储器阵列142的数据。非易失性存储器裸芯104还可以包括行地址解码器146和列地址解码器148。当从存储器阵列142中的存储器单元读取数据或将数据写入存储器阵列142中的存储器单元时,行地址解码器146可解码行地址并选择存储器阵列142中的特定字线。列地址解码器148可以对列地址进行解码以选择要被电耦合到数据高速缓存144的存储器阵列142中的特定位线组。
此外,非易失性存储器裸芯104可以包括外围电路150。外围电路150可以包括状态机152,状态机152可以被配置为控制在裸芯104上执行的存储器操作并向控制器102提供状态信息。外围电路150还可以包括易失性存储器154。易失性存储器154的示例配置可以包括锁存器,尽管其它配置也是可能的。
参考图4,跨越多个存储器裸芯104的存储器阵列142和/或多个存储器阵列142可以具有组织布置或层级,其中在所述组织布置或层级下多个存储器裸芯104的存储器阵列142和/或多个存储器阵列142的存储器单元可以被组织。控制器102可以被配置为根据组织布置或层级来存储和访问数据。
图4是用于闪速存储器的存储器阵列142的示例组织布置或层级的框图。如所记述的,对于闪速存储器,存储器单元可以被划分或组织成块402,并且每个块402可以被进一步划分成若干页404。每个块402可以包含可以被一起擦除的最小数量的存储器元件。此外,每个页404可以是存储器阵列142中的感测的单元。每个单独的页404可以进一步被分成片段或单元406,其中每个片段或单元406包含作为基本编程操作可以一次被写入的最少数量的存储器单元。存储在存储器单元的片段或单元中的数据(被称为闪速存储器单元(flashmemory unit,FMU)、ECC页或码字)可以包含在基本编程操作期间一次被写入的数据的量和/或可以在单个编码或解码操作期间能够由ECC引擎124编码或解码的数据的量。页404可以被划分成相同数量的片段或单元。片段或单元的示例数量可以是四或八,尽管其它数量也是可能的。通常,数据可以不连续(随机)或连续地存储在存储器元件的块和页中。
此外,组织布置或层级可以包括其中可以配置块402中的每一个的一个或多个平面。通常,平面包括块402或页404的“列”,虽然其它配置也是可能的。单个存储器阵列142可以包括单个平面或多个平面。图4所示的示例布置包括两个平面,平面0和平面1。存储在不同平面中的数据可以同时或独立地被感测。另外,一些组织布置或层级可以包括子平面。例如,每个平面可以包括多个子平面。通常,子平面可以包括单元406的“列”。单个平面内的子平面的数量可以取决于单个页404内的单元406的数量。例如,如图4所示,对于其中页404包括四个单元406的配置,则在单个平面内可以有四个子平面,诸如平面0内的四个子平面和/或平面1内的四个子平面。
此外,组织布置或层级可以包括元块408和元页410。标识元块的元块地址或编号可以被映射到和/或对应到由主机提供的逻辑地址(例如,逻辑组编号)。元块408和元页410可跨越或分布在单个平面中的相应单个块和页上,或者可替换地,可以跨越或分布在跨多个平面的相应多个块和多个页上。图4示出跨越两个平面(平面0和平面1)的元块408和元页410。取决于组织布置,跨越多个平面的元块408和元页410可以仅跨越单个存储器裸芯104的那些平面,或者可替换地,可以跨越位于多个存储器裸芯104的多个平面。
返回参考图3,组织布置或层级还可以将位线(BL)分组成位线(BL)的组(另外称为列)。对位线进行分组可以降低寻址阵列的存储位置的复杂度,因为页上的列地址可以基于位线的组(或列)而不是基于逐位线来标识。在一个示例中,块308可以包括16,000个位线(即,P=16,000),并且每十六个位线BL可以被一起分组到组(或者列)中。将16,000个位线BL分组成16的组或列,可以在页上只产生1000个列地址,而不是16,000个列地址。
在非易失性存储器系统100的寿命期间的某个点,阵列的一些存储器元件可能不可靠地存储数据(例如,被确定为不是可靠地而是不可靠地存储数据)。存储器元件可以从其寿命开始时(诸如在被制造时)不可靠地存储数据,或者可以初始可靠地存储数据,但是然后可以在一段操作之后不可靠地存储数据。这些存储器元件为什么不可靠地存储数据可能存在各种原因,诸如由于开路、闭合电路、短路、耐久性或保持问题(例如,存储器元件已超过某一阈值数量的编程/擦除循环),或者作为编程干扰(当比特被编程到存储器元件中,并且随后相邻的存储器元件(来自相同的字线或相邻的字线)被编程为更高的状态时,使得第一存储器元件被编程为稍更高的状态)的结果。无论什么原因,存储器元件可能是或变得不可靠的,作为结果可能无法可靠地返回处于在数据被编程时的值数据。
为了本描述的目的,术语“坏”或“弱”可以与“不可靠”互换地被使用。因此,术语“坏”或“弱”可以与阵列的各种存储位置或组件(例如,存储器元件、位线、位线组或存储器元件的其它分组或区域)联合使用以指示那些存储位置或组件是不可靠的和/或至少在非易失性存储器系统100中被标识为不可靠或“弱”。类似地,术语“好”或“强”可以用于指代可靠的存储位置或组件和/或在非易失性存储器系统100中被标识为可靠的存储位置或组件。此外,术语“坏”、“弱”、“好”和“强”可以与数据(包括数据的比特)结合使用以分别指示数据将被存储或者正被存储在可靠和不可靠的存储位置。
在一些情况下,耦合到相同位线的存储器元件可能类似地不可靠。也就是说,如果耦合到特定位线的一个存储器元件是不可靠的,则耦合到该位线的其它存储器元件也可能是不可靠的。因此,控制器102可以被配置为在位线的基础上标识不可靠的存储器元件。如果控制器102标识位线是不可靠的,则可以假定耦合到该位线的所有存储器元件都是坏的、不太可靠的,弱的或不可靠的。此外,如果控制器102标识特定存储器元件是不可靠的,则可以假定耦合到相同位线的其它存储器元件也是不可靠的,并且将该位线标识为不可靠或坏的位线。而且,如果控制器102没有将位线中的任何存储器元件标识为不可靠的,则可以将该位线标识为可靠或者好的位线。
此外,控制器102可以被配置为标识可靠/好的和不可靠/坏的位线的列。例如,如果控制器102将列中的至少一个位线标识为不可靠的,则可以标识该列中的所有位线为坏的,或者通常该列是不可靠或坏的。可替换地,如果控制器102没有将列中的任何位线标识为不可靠的,则可以将其标识为好的或者可靠的。
坏的存储位置可以被标识并存储在一个或多个坏存储数据库中,这些坏存储数据库在下面图中由图11中的坏存储数据库1110、图15和18中的坏存储数据库1506、图21中的坏存储数据库2108和图22中坏存储数据库2206表示。控制器102可以被配置为访问(多个)坏存储位置数据库以标识坏存储位置。(多个)坏存储数据库可以将坏存储位置标识为坏列、坏位线或其组合。(多个)坏存储数据库可以标识坏存储位置的其它方式也是可能的。此外,可以以各种方式来组织和/或管理(多个)坏存储数据库。例如,在存储器系统100的制造时,最初被标识为坏的存储位置可以被标识并存储在一个数据库中,而最初被标识为好的但然后在存储器系统100的操作之后被标识为坏的存储位置可以被存储在另一数据库中。可替换地,最初是坏的坏存储位置和之后变坏的坏存储位置可以被组合到单一数据库中。例如,坏存储数据库可以最初被制造时最初被标识为坏的存储位置充满。然后控制器102可以在制造时在它标识坏存储位置时更新数据库。组织和管理坏存储数据库的各种方法都是可能的。
此外,坏存储数据库可以存储在非易失性存储器系统100内的任何或多个存储位置中和/或非易失性存储器系统100的外部。例如,坏存储数据库可以存储在具有数据库标识的存储位置的阵列中。因此,对于多裸芯系统100,每个裸芯104可以存储关联的坏存储数据库。可替换地,裸芯104中的一个可以存储对于所有裸芯104的所有数据库。用于存储多裸芯系统100的(多个)坏存储数据库的各种其它配置可以是可能的。此外,对于一些示例配置,控制器102可以被配置为将(多个)数据库的副本加载到RAM 116中,以诸如在初始化期间和/或在向特定裸芯104读取数据和/或写入数据时管理(多个)数据库,并且可以视情况更新存储在非易失性存储器裸芯104中的(多个)数据库的版本。
一些示例存储器系统在不考虑存储器裸芯的坏存储位置的情况下对数据进行编码和解码。这样的存储器系统通常可能将由读取数据产生的错误认为是随机的,并且认为这种随机错误跨存储器系统内的存储器裸芯均匀分布。然而,由于坏存储位置的存在,且坏存储位置对于不同的存储器系统可能不同,或者对于单一存储器系统内的不同裸芯和/或不同平面不同,所以这些错误通常不是均匀分布的。因此,对于具有不同坏比特位置的不同存储器区域的相同编码和解码方案可能导致不同的解码结果,与存储器裸芯104内的其它存储位置相比较,ECC引擎124必须花费更长的时间或需要更多的解码迭代,以成功解码某些存储位置的读取数据。
与那些存储器系统相反,本描述的非易失性存储器系统100可以根据考虑存储器裸芯104的坏存储位置的编码和解码方案来编码和解码数据。这样做,非易失性存储器系统100可以优化针对存储器裸芯104内的特定存储器区域的编码和解码,与忽略坏存储位置并跨所有存储器裸芯104使用相同的编码和解码方案的其它存储器系统相比,使得解码性能跨存储器裸芯104得到提高。
非易失性存储器系统100可以以两种方式考虑存储器裸芯104的坏存储位置:(1)存储器系统100可以使用不同的码本对具有不同坏存储位置的不同存储器区域的数据进行编码和解码,其中码本对于它们被使用的特定存储器区域是最佳的(至少与在存储器系统100中使用的其它码本相比);或(2)基于码字将被存储在存储器裸芯104中的坏存储位置来修改给定码字的比特序列的顺序。
图5示出了控制器102的第一示例实施例的组件的框图,该控制器102可以涉及到将数据写入非易失性存储器裸芯104的写入操作的编码过程。对于一些示例配置,除了RAM116以外的组件可以是ECC引擎124的组件,虽然在其它示例配置中,这些组件中的一些或全部可以被认为是与ECC引擎124分开的组件。除了RAM 116之外,涉及到编码过程的组件可以包括奇偶校验比特生成器模块502、码本选择器模块504和码本数据库508。
通常,非易失性存储器系统100可以将数据存储在存储器裸芯104中作为码字。每个码字可以包括信息数据(比特)和奇偶校验数据(比特)。信息比特可以包括有效载荷数据(比特),其包括主机想要写入非易失性存储器裸芯104和从非易失性存储器裸芯104读取的数据。信息比特还可以包括头部数据(比特),其可以包括关于有效载荷数据的各种信息,诸如作为非限制性示例的逻辑地址信息、写入源、数据何时被写入(时间戳)、标志字段、反转数字和加扰器种子(seed)。可以在编码期间生成奇偶校验比特,以便在从非易失性存储器裸芯104读取数据的读取操作的解码阶段期间检测和校正数据的头部和有效载荷部分的错误。
在编码过程之前,要写入非易失性存储器104的信息比特可以以未编码(例如原始)格式加载到RAM 116中。在信息比特被加载到RAM 116中之后,奇偶校验比特生成器模块502可以检索信息比特并且生成与信息比特相关联的奇偶校验比特。
奇偶校验比特生成器模块502可以被配置为使用码本或代码来生成奇偶校验比特。在特定示例配置中,码本可以是低密度奇偶校验(low-density parity-check,LDPC)码本。对于LDPC编码,LDPC码本可以对应于奇偶校验矩阵H和/或与奇偶校验矩阵H相关联。奇偶校验比特生成器模块502可以被配置为生成奇偶校验比特,使得满足以下矩阵方程:
Hω=0, (1)
其中H是奇偶校验矩阵,并且ω是包括信息比特和奇偶校验比特的码字。码字ω可以被格式化,使得码字ω的前K个比特等于信息比特的信息比特序列β,并且码字ω的最后M个比特等于奇偶比特的奇偶比特序列δ。奇偶校验比特生成器模块502然后可以生成奇偶校验比特,使得满足以下等式:
Figure BDA0001583973880000191
在一些LDPC编码方案中,奇偶校验比特生成器模块502可以生成可以利用根据LDPC的奇偶校验矩阵H的稀疏性质的奇偶校验比特序列δ。
图6示出了奇偶校验矩阵H的通用布局的示意图。奇偶校验矩阵H可以包括第一子矩阵Hinfo和第二子矩阵Hparity。第一子矩阵Hinfo可以包括等于信息比特序列β中的比特的J数量的列的J数量。第二子矩阵Hparity可以包括等于奇偶校验比特序列δ中的比特的K数量的列的K数量。并且,如图6所示,第一子矩阵Hinfo和第二子矩阵Hparity中的每一个具有等于奇偶校验比特序列δ中的比特的K数量的行的K数量。
此外,第一子矩阵Hinfo和第二子矩阵Hparity被相对于彼此放置,使得第一子矩阵Hinfo的最后一列与第二子矩阵Hparity的第一列相邻。并且,行的顺序在第一和第二子矩阵Hinfo、Hparity当中是公共的。换句话说,第一子矩阵Hinfo的第一行与第二子矩阵Hparity的第一行形成公共的行,以此类推。另外,第一和第二子矩阵Hinfo、Hparity的元素(第一子矩阵Hinfo的K乘J个元素和第二子矩阵Hparity的K乘K个元素)可以分别包括二进制“0”和“1”值。0和1值的组成可以根据各种编码方案,诸如作为示例的LDPC或准循环(Quasi-Cyclic,QC)-LDPC码。
奇偶校验矩阵H可以具有相应的Tanner图。图7示出了与图6的奇偶校验矩阵H相对应的部分完成的Tanner图的示意图。通常,Tanner图可以包括变量节点(或者只是变量)、校验节点(或者只是校验)以及连接校验节点和变量节点的边。变量节点的数量可以等于奇偶校验矩阵H中的列数和码字ω中的比特数。因此,可以存在与信息比特序列β中的比特的J数量和奇偶校验比特序列δ的奇偶校验比特的K数量相对应的J+K数量的变量节点v(1)到v(J+K)。校验节点的数量可以等于奇偶校验矩阵H中的行数和奇偶校验比特序列δ中的奇偶校验比特数。因此,可以存在与奇偶校验比特序列δ中的奇偶校验比特的K数量相对应的K数量的校验节点c(1)到c(K)。如果奇偶校验矩阵H中对应于特定变量节点和特定校验节点的元素具有1值而不是0值,则该变量节点可以经由边或连接而连接到该校验节点。例如,图7示出连接第一变量节点v(1)和第一校验节点c(1)的边。
返回参考图5,奇偶校验比特生成器模块502可以利用多个或N数量的码本506(1)-506(N)来对要存储在存储器裸芯104中的信息比特进行编码。码本506(1)-506(N)可以彼此不同。例如,与码本506(1)-506(N)相对应的奇偶校验矩阵可以彼此不同。两个奇偶校验矩阵可以通过具有至少一个具有不同值的对应元素而彼此不同。此外或可替换地,两个奇偶校验矩阵可以通过具有不同的大小(即不同数量的行和/或不同数量的列)而彼此不同。
码本506(1)-506(N)中的每一个可以与存储器裸芯104的一个或多个存储器区域相关联。存储器区域可以是具有可定义大小或边界的可标识部分,诸如由参照图4描述的组织布置或层级标识的一个。存储器区域的示例可以是存储器裸芯、裸芯的平面、裸芯的子平面、裸芯的块、裸芯的页(例如图4中的页404)或者页的单元或片段(例如,图4中的406)。另外说明,N数量的码本506(1)-506(N)可以基于每裸芯、每平面、每块、每页或每片段而被分配或关联于存储器裸芯104的存储位置。
为了对接收到的信息比特序列β进行编码,奇偶校验比特生成器模块502可以与码本选择器模块504进行通信,以接收和/或标识码本506(1)-506(N)中选择的一个。如图5所示,码本选择器模块504可以接收存储器地址信息,该信息标识从信息比特序列β编码的码字ω要被存储在存储器裸芯104中的哪个位置。在一些示例配置中,存储器管理层模块138(图2A)可以管理和维护可用存储区域的列表(例如,空闲块列表)。使用该列表,存储器管理层138可以被配置为确定信息比特序列β要被存储在存储器裸芯104中的哪个位置。存储器管理层138可以将存储器地址信息提供给码本选择器模块504。
响应于接收到存储器地址信息,码本选择器模块504可以被配置为标识与存储器地址信息相对应的存储器区域。此外,码本选择器模块504可以被配置为确定标识的存储器区域与码本506(1)-506(N)中的哪个相关联。码本506(1)-506(N)可以被存储和组织在码本数据库508中,并且码本选择器模块504可以被配置为访问码本数据库508以获得码本506(1)-506(N)中与所标识的存储器区域相关联的所选择的一个。在一些示例配置中,将码本506(1)-506(N)与存储器裸芯104的各种存储器区域相关联的信息507也可以被包括并维持在码本数据库508中。码本选择器模块504可以使用和/或访问关联信息507来选择码本506(1)-506(N)中的一个。
在选择码本506(1)-506(N)中的一个时,码本选择器模块504可以向奇偶校验比特生成器模块502提供所选择的码本。然后奇偶校验比特生成器模块502可以使用所选择的码本来诸如根据上面的等式(1)或(2)为存储在RAM 116中的未编码的信息比特序列β生成奇偶校验比特δ。信息比特β和相关联的奇偶校验比特δ可以被组合以形成码字ω。然后存储在RAM116中的码字ω可以被提供给序列器模块126,其可以经由存储器接口130将码字ω发送到存储器裸芯104。码字ω可以存储在由提供给码本选择器模块504的存储器地址信息所标识的和/或与该存储器地址信息相对应的存储器裸芯104中的存储位置中。虽然在图5中未示出,但是用于对信息比特β编码的来自数据库508的所选择的码本还可以用于在解码阶段期间(诸如当从存储器裸芯104读取码字ω时)对码字ω解码。
如先前所描述的,存储器裸芯104内的不同存储器区域可能具有不同的坏存储位置(例如,坏位线或坏列可能在数量上不同和/或位于不同存储器区域当中的不同位置)。由于坏存储位置差异,不同的码本可能对于不同的存储器区域提供不同的解码性能。作为示例,如下面进一步详细描述的,校验节点连接到太多的坏变量节点或者太多坏变量节点参与最小或短循环的编码/解码情形可能导致解码性能下降。因而,如果单个码本被用来对所有存储器区域写入和从所有存储器区域读取的数据进行编码和解码,则对于一些存储器区域,解码性能可能比对于其它存储器区域更好。相反,通过利用针对不同存储器区域最佳选择的多个码本,可以改善从存储器裸芯104整个的整体解码。
下面的图8示出了控制器102的组件的示例实施例,且图9和图10示出了可以由图8的组件使用以基于针对不同存储器区域的解码度量来评估和选择N个码本506(1)-506(N)的码本标识和评估过程的流程图。通过分析解码度量来评估和选择N个码本506(1)-506(N),可以为具有不同的坏存储位置的不同存储器区域选择最佳码本。
更详细地,图8示出了可以涉及到基于解码度量来标识N数量的码本506(1)-506(N)的码本评估和标识过程的控制器102的示例实施例的组件的框图。对于一些示例配置,除了RAM 116以外的组件可以是ECC引擎124的组件,虽然在其它示例配置中,这些组件中的一些或全部可以被认为是与ECC引擎124分开的组件。除了RAM 116之外,涉及码本标识过程的组件可以包括奇偶校验比特生成器模块502、码本选择器模块802(其可以与图5的码本选择器模块504相同或不同)、码本库804、读取模块806、解码器模块808、解码评估模块810、码本评分图表812和存储器区域标识模块816。
更详细地,码本库804可以存储和/或包括M数量的码本814(1)-814(M)。数量M可以与数量N相同或者大于数量N。M数量的码本814(1)-814(M)可以表示存储器系统100可以使用于N数量的码本506(1)-506(N)的可能的或可用的码本。在一些示例配置中,码本库804可以被存储在存储器系统100内部的存储器中,虽然在其它示例配置中,码本库804可以被存储在存储器系统100的外部,诸如在可以连接到存储器系统100的外部设备中。
在一些示例配置中,M个码本814(1)-814(M)中的一个或多个可以被选择为在生产阶段期间用于存储器裸芯104的预定存储器区域的N个码本506(1)-506(N)中的一个或多个。存储器区域标识模块816可以标识特定存储器区域,要从码本库804选择针对该特定存储器区域的码本。对于每个存储器区域,可以评估M个码本814(1)-814(M)中的每一个,并且可以针对该存储器区域选择M个码本814(1)-814(M)中的最好码本。特别地,对于由存储器区域标识模块816标识的给定存储器区域,码本选择器模块802可循环通过M个码本814(1)-814(M),并且对于它选择的码本814(1)-814(M)中的每一个,奇偶校验比特生成器模块502可以使用选择的码本对至少一个信息比特序列编码以生成相关联的码字。在码字被生成并编程到存储器区域之后,读取模块806可以向序列器模块126发出读取命令,序列器模块126转而可以经由存储器接口130向存储器裸芯104发出一个或多个读取上下文命令,以使码字被从存储器裸芯104读出。接着,解码模块808可以使用选择的码本来解码读取的码字,并且解码的信息比特可以被加载到RAM 116中。
在解码过程期间,解码评估模块810可以确定用于解码过程的解码度量。示例解码度量可以包括解码器模块808成功解码数据所花费的时间量。另一解码度量可以是解码器模块808成功解码数据所花费的解码迭代的数量。其它解码度量可以是可能的。解码评估模块810可以将评估结果(例如,解码度量)记录在码本评分图表812中。在所有M个码本814(1)-814(M)已经被循环过之后,码本选择器模块802可以评估码本评分结果以确定针对该存储器区域的最好码本。然后可以在码本数据库508中将最好码本存储或以其它方式标识为在存储器系统的操作期间要被用于编码和解码的N个码本506(1)-506(N)中的一个。码本标识过程可对存储器裸芯104内的所有存储器区域执行。
另外,对于一些示例码本标识过程,可以使用M个码本814(1)-814(M)中的同一个对给定的存储器区域执行多个编程和读取操作,以获得对于该存储器区域的给定码本的平均解码度量。例如,在存储器是特定裸芯的平面的情况下,可以使用相同的码本将数据编程到平面中某一百分比的块中,并且可以通过对存储在某一百分比的块中的数据进行解码来获得平均解码度量。此外或可替换地,可以对相同数据执行多个读取和解码操作以生成平均解码度量。各种配置可以是可能的。
图9示出了从码本库804中的M数量的码本814(1)-814(M)中选择N个码本506(1)-506(N)的示例方法900的流程图。在框902处,存储器区域标识模块816标识裸芯104中的下一存储器区域。如果示例方法900刚刚开始,则下一存储器区域可以是存储器区域标识模块816被配置为标识的初始存储器区域。在框904处,码本选择器模块802可以从库804中选择M个码本814(1)-814(M)中的下一个。在框906处,奇偶校验比特生成器模块502可以通过为给定比特序列生成奇偶校验比特来对给定比特序列编码。在一些示例方法中,给定比特序列可以是针对生产或测试阶段所生成的预定比特序列。在框908处,序列器模块126将包括给定比特序列和在框906处生成的奇偶校验比特的码字编程到框902处标识的存储器区域中。
在框910处,可以从存储器区域中读出码字,并且解码器模块808可以使用在框904处选择的码本对码字进行解码。此外,在框910处,解码评估模块810可以为由解码器模块808执行的解码过程确定解码度量(例如,解码时间或解码迭代的数量)。在一些示例方法中,码字可以被数次读取和/或解码器模块808可以对码字进行数次解码以生成用于利用在框904处选择的码本解码该特定码字的平均解码度量。并且,在框910处,解码评估模块810可以将解码度量记录在码本评分图表812中。
在框912处,如果另一码字将被编程到存储器区域中,则方法900可以进行回到框906,其中可以利用奇偶校验比特对另一比特序列进行编码,在框908处所得到的码字可以被编程到存储器区域中,并且可以在框910处评估利用在框904处选择的码本对该码字的解码。可替换地,在框912处,如果另一码字不将被编程到存储器区域中,则方法900可前进到框914,其中码本选择器模块802可以确定码本库804中是否存在要被评估的另一或下一码本。如果是,则方法900可以进行回到框904,并且码本选择器模块802可以从码本库804中选择下一码本。如果不是,则在框916处,码本选择器模块802可以评估从库804选择的码本的解码度量结果,以编码要被编程到存储器区域中的数据和解码从存储器区域读取的数据,并针对该存储器区域选择最好或最佳码本。例如,码本选择器模块802可以选择为了成功解码数据产生短的解码或最少迭代数量的码本。
在框918处,存储器区域标识模块816可以确定是否存在对其要标识或选择码本的存储器裸芯104的另一存储器区域。如果是,则方法900可以进行回到框902,其中存储器区域标识模块816可以标识下一存储器区域并且方法900可以重复。可替换地,如果不再存在对其要标识码本的存储器区域,则方法900可以结束。
返回参考图8,对于一些示例配置,码本选择器模块802可以被配置为针对特定的存储器区域,基于它的存储器系统100的正常操作(例如在生产阶段之后当它响应于主机命令正在读取和写入数据时),选择与它当前正使用的码本不同的码本来编码和解码数据。为了说明,作为在正常操作期间的读取和写入操作的一部分,ECC引擎124可以使用N个码本506(1)-506(N)中的一个对特定存储器区域的数据进行编码和解码,该N个码本506(1)-506(N)中的一个可以已经在如前所述的生产阶段的码本标识过程期间被标识。在读取操作期间,读取模块806可以诸如响应于主机读取请求而请求从特定存储器区域读取一个或多个码字。在将请求的数据发送回主机之前,可以由解码器模块808对所读取的编码数据进行解码。解码评估模块810可以被配置为监视解码操作并确定对于解码操作的解码度量。如果解码评估模块810标识出对于解码操作的解码度量已经超过阈值(例如,解码时间已经超过时间阈值或者解码迭代的数量已经超过迭代阈值),则解码评估模块810可以触发码本选择器模块802确定是否存在可用于存储器区域的更好的码本用于未来的读取和写入操作。作为响应,图8中的组件可以执行码本标识过程以确定是否存在提供比当前正在使用的码本更好的解码性能的可用码本。所分析的码本可以是码本数据库508中的N个码本506(1)-506(N),码本库804中的M个码本814(1)-814(M)或其一些组合。
图10是基于存储器系统100的正常操作对特定存储器区域执行码本评估过程的示例方法1000的流程图。在框1002处,解码评估模块810可以响应于触发事件的检测而确定执行码本评估过程。触发事件可以是解码操作的阈值数量已经超过解码时间的阈值量、解码操作的阈值数量已经超过解码迭代的阈值数量、或者解码来自该存储器区域的数据的平均解码时间或解码迭代的平均量已经超过阈值。与解码度量相关联的其它触发事件可以是可能的。
在框1004处,码本选择器模块802可以确定在存储器区域内是否存在可用的存储空间以读取和写入用于该存储器区域的新码本的评估的数据。为了说明,假设存储器区域是存储器裸芯104中的一个的平面。码本选择器模块802可以检查在该平面内是否存在其能够用于执行码本评估过程的任何空闲块。如果存在,则在框1006处,码本选择器模块802可以选择与当前用于针对特定存储器区域编码和解码数据的码本不同的可用码本。可用码本可以是码本数据库508中的N个码本506(1)-506(N)中的一个或者码本库804中的M个码本814(1)-814(M)中的一个。在框1008处,针对要被编码和存储在存储器区域内的可用存储空间中的一组或多组信息比特,奇偶校验比特生成器模块502可以生成一组或多组奇偶校验比特,所得到的一个或多个码字可以存储在可用存储空间中,该一个或多个码字可以由解码器模块808解码,并且解码评估模块810可以监视并记录解码过程的解码度量。
在框1010处,诸如通过将在框1008处获得的解码度量与先前在对存储器区域写入和读取主机数据时获得的解码度量相比较,码本选择器模块802可以确定在框1006处选择的码本是否提供比当前用于该存储器区域的码本更好的解码度量。如果是,则在框1012处,码本选择器模块802可以更新码本数据库508以指示新的码本将用于该存储器区域的未来编码和解码。如果不是,则在框1014处,码本选择器模块802可以确定继续使用其先前正用于该存储器区域的码本。
在框1016处,码本选择器模块802可以确定是否存在要评估的另一可用码本。如果是,则方法1000可以进行回到框1006,并且码本选择器模块802可以选择下一码本。然后奇偶校验比特生成器模块502可以使用下一码本来生成用于附加信息比特的奇偶校验比特,并且解码评估模块810可以在由解码器模块808解码所得到的码本时监视和记录解码度量。可替换地,在框1016处,如果不存在另一可用的码本,则该方法可以结束。
返回参考框1004,如果当前在存储器区域内不存在任何可用的存储空间来评估用于该存储器区域的新码本,则在框1018处,可以暂停码本评估过程,直到存储空间变得可用为止,诸如如果一个或者更多个块被擦除并变得空闲。当该时刻发生并且存储空间变得可用时,则方法1000可以从框1018前进到框1006,并且码本选择器模块802可以为存储器区域的码本评估过程选择可用码本。
存储器系统100的其它示例实施例可以直接使用存储器裸芯104的坏存储位置来评估和评分和/或排序对于每个存储器区域的不同码本,而不是分析由不同码本提供的解码度量。图11示出了可以涉及到码本评估和标识过程的控制器102的示例实施例的组件的框图,其中该码本评估和标识过程可以直接使用给定存储器区域的坏存储位置,以便为给定存储器区域评分各种码本。对于一些示例配置,组件可以是ECC引擎124的组件,虽然在其它示例配置中,这些组件中的一些或全部可以被认为是与ECC引擎124分开的组件。组件可以包括码本评分模块1102、存储器区域标识模块1104、存储M数量的码本1108(1)-1108(M)的码本库1106(其可以与图8的存储M数量的码本814(1)-814(M)的码本库804相同或相似)、以及坏存储数据库1110,如先前所述,其可以标识存储器裸芯104的各个存储器区域的坏存储位置。
更详细地,对于给定的存储器区域,码本评分模块1102可以被配置为将分数分配给库1106中的M个码本1108(1)-1108(M)中的每一个。分配给特定码本的分数可以基于与码本相关联的提升的图结构。参考图12A和图12B详细描述提升的图结构。图12A示出了LDPC码的二分图G的示意图,且图12B示出了LDPC码的相对应的提升的图G'的示意图。
参考图12A,二分图G具有六个变量节点v(1)-v(6)的集合和三个校验节点c(1)-c(3)的集合。如所示出的,各个边以特定配置将六个变量节点v(1)-v(6)与三个校验节点c(1)-c(3)连接。参照图12B,相应的提升的图G'具有相同数量的变量节点(6个)和相同数量的校验节点(3个)。然而,变量节点中的每一个和校验节点中的每一个具有Z数量的层。图12B所示的提升的图G'具有四层(即Z=4)。每个变量节点的每一层可以由项v(i,k)指示,其中i是标识第i个变量节点的、从1到L的索引(L是与码本相关联的变量节点的数量),并且k是标识第i个变量节点的第k层的、从0到Z-1的索引。类似地,每个校验节点的每一层可以由项c(n,q)指示,其中n是标识第n个校验节点的、从1到K的索引(K是与码本相关联的校验节点的数量),并且q是标识第n个校验节点的第q层的、从0到Z-1的索引。图12B示出由v(1,0)、v(2,0)、v(3,0)、v(4,0)、v(5,0)和v(6,0)指示的6个变量节点的第一层以及由c(1,0)、c(2,0)和c(3,0)指示的三个校验节点中的每一个的第一层。
变量节点的层可以连接到校验节点的层。连接特定变量节点的特定层与特定校验节点的特定层的边可以被称为Z-边。每个Z-边连接到变量节点层和校验节点层中的哪一些可以取决于相应二分图G的边连接和移位(shift)值p。具体地,对于二分图G中的连接给定的第i个变量节点v(i)与给定的第n个校验节点c(n)的给定边,相应的提升的图G'中的Z-边的相应的集合连接第i个变量节点层v(i,0)到v(i,Z-1)和第n个校验节点层c(n,0)到c(n,Z-1)。例如,参考图12A,边连接第一变量v(1)和第一校验节点c(1)。相应地,四个Z-边的集合将第一变量节点的四层v(1,0)至v(1,3)与第一校验节点的四层c(1,0)至c(1,3)连接。哪个变量节点层和哪个校验节点层通过Z-边连接在一起可以取决于与Z-边的给定的集合相关联的移位值p。可能范围从0到Z-1的移位值p可以指示给定Z边相对于给定Z边连接到的变量节点层被移位的校验节点层的数量。移位是循环的,且可以是右移位或左移位。在图12B的示例提升的图G'中,移位是右移位,且移位值是1(即,p=1)。因而,将第一变量节点的四层v(1,0)至v(1,Z-1)连接到第一校验节点的四层c(1,0)至c(1,Z-1)的四个Z-边的集合可以包括将第一变量节点的第一层v(1,0)连接到第一校验节点的第四层c(1,3)的第一边、将第一变量节点的第二层v(1,1)连接到第一校验节点的第一层c(1,0)的第二边、将第一变量节点的第三层v(1,2)连接到第一校验节点的第二层c(1,1)的第三边、以及将第一变量节点的第四层v(1,3)连接到第一校验节点的第三层c(1,2)的第四边。Z-边的其它集合可以将各个变量节点的各个层与各个校验节点的各个层相应地连接。此外,Z-边的每个集合可以具有相关联的移位值p,并且移位值可以彼此相同或不同。
返回参考图11,给定码本的提升属性可以被用来确定码本的分数。具体地,M个码本1108(1)-1108(M)中的每一个可以处于其提升的形式或者可以包括相关联的提升的信息。例如,每个码本1108自己可以包括相关联的层数Z和用于每个边的移位值p。码本评分模块1102可以被配置为访问码本1108(1)-1108(M)中的每一个并且使用以下数学等式为其访问的每个第m个码本计算相应分数RCB(m)
Figure BDA0001583973880000281
为了简便,
Figure BDA0001583973880000282
项被称为第一评分项,并且
Figure BDA0001583973880000283
项被称为第二评分项。此外,四个求和是从右到左,或从最内到最外来参考,包括第一求和∑(d,τ),第二求和
Figure BDA0001583973880000284
第三求和
Figure BDA0001583973880000285
和第四求和
Figure BDA0001583973880000286
下面进一步详细描述参考求和的分数RCB(m)的计算。提供以下术语和定义是为了详细描述评分方等式(3)以及如何计算第一和第二评分项。
·到变量节点的集合的外在校验节点是单次连接到变量节点的集合的校验节点。
·到变量节点的集合的内在校验节点是至少两次连接到变量节点的集合的校验节点。
·变量节点的集合的外在消息度(extrinsic message degree,EMD)是连接到变量节点的集合的外在校验节点的数量。
·如果存在通过集合中的所有变量节点到它自身而不两次穿过边的路径,则变量节点的集合形成或参与循环。
·如果满足以下条件,则变量节点的集合形成最小循环:(1)它形成循环,且(2)没有变量节点的子集形成循环。
·具有参数(d,ω,τ)的循环集合(也称为(d,ω,τ)循环集合)是d个变量节点的集合,其形成最小循环并且具有ω个内在校验节点和τ个外在校验节点。
·对于给定的(d,ω,τ)循环集合,内在校验节点ω的数量等于d(ω=d)。因此,(d,ω,τ)循环集合与(d,d,τ)循环集合相同,其被表示为(d,τ)循环集合。
·停止集合S是组成二分图的变量节点集合V的子集,使得没有外在校验节点连接到停止集合S。
·如果满足以下条件,则变量节点的集合相对于边e形成最小循环:(1)它形成包含边e的循环,且(2)没有变量节点的子集形成包含边e的循环。
·(d,ω,τ)e-循环集合是d个变量节点的集合,其相对于边e形成最小循环,并具有ω个内在校验节点和τ个外在校验节点。
现在参考这些定义的术语来描述第一和第二评分项的计算。
第一评分项
Figure BDA0001583973880000291
是长度为d和外部消息度(EMD)为τ的从第i个变量节点的第一层v(i,0)到第j个校验节点的第q层的最小路径的数量。
第二评分项
Figure BDA0001583973880000292
表示对给定(d,τ)循环集合的解码错误概率(或者称为块错误概率或解码失败概率)的预期贡献的上限,并且项
Figure BDA0001583973880000293
表示对给定(d,ω,τ)e-循环集合在比特擦除概率为∈i的二进制擦除通道上的解码错误概率的预期贡献的上限,以设置。
因此,对于连接到给定的第j个校验节点c(j)的给定的第i个变量节点v(i),并且对于第j个校验节点的特定的第q层,可以计算第一值,第一值是对于给定(d,τ)循环集合的解码错误概率的预期贡献,
Figure BDA0001583973880000294
(即,第二评分项),乘以长度为d和外部消息度(EMD)为τ的从第i个变量节点的第一层v(i,0)到第j个校验节点的第q层的最小路径的数量,
Figure BDA0001583973880000295
(即第一评分项)。如由第一求和所指示的,可以针对长度d和外部消息度τ的所有可能的最小循环确定第一评分项、第一值,并且可以将第一值相加在一起以确定第二值。此外,如由第二求和所指示的,可以从q=0到Z-1对每个第q层计算第二值,并且可以将第二值相加在一起以生成连接到给定的第j个校验节点c(j)的给定第i个变量节点v(i)的第三值。此外,如第三求和所指示的,可以为连接到给定的第i个变量节点v(i)的每个第j个校验节点c(j)生成第三值,并且可以将多个第三值相加在一起生成第四值。另外,如由第四求和所指示的,可以针对给定的第m码本对每个第i个变量节点v(i)生成第四值,并且将第四值相加在一起以生成针对给定的第m个码本的码本评分RCB(m)
现在详细描述第一评分项
Figure BDA0001583973880000301
和第二评分项PCS (d,τ)的计算。
第一评分项
Figure BDA0001583973880000302
是使用枚举算法根据以下项来计算的:
·枚举算法的输入是:(1)正在针对其计算第一评分项的提升的图G',(2)正在针对其计算第一评分项的第i个变量节点vi的索引i,(3)对应于度谱Λ(x)的变量节点度dv的向量,其被定义为:
Figure BDA0001583973880000303
其中Λg是度-g变量节点的数量,dv是最大变量度。
·枚举算法的输出是对于每个可能的校验节点cj包含从第i个变量节点vi到第j个校验节点cj的最小路径的频谱的数据结构W,表示为W(cj)。
·D是存储从第i个变量节点vi跨越的图G'的深度的数据结构。
·Tv和Tc以深度D分别存储活动变量节点和校验节点的层。活动节点n是从第i个变量节点vi到节点n的路径可能导致最小e-循环集合的节点。Tvaprx是生成Tv的过程中的临时存储。
·Emd(n)和EmdD-2(n)分别存储直到层D和D-2的、从vi到节点n的所有路径当中从第i个变量节点vi到节点n的路径的最小EMD。
·Mult(vi')和Mult(vi')D-2分别在层D和D-2处存储从第i个变量节点vi到第i'个变量节点vi'的最小路径的重数(multiplicity)。
·Parent(n)存储沿着从第i个变量节点vi到节点n的最小路径的层D中的节点n的父节点。对于节点P的集合,Parent(P)表示P中节点的所有父节点的联合集合。
·W(cj)存储形式为(d,τ,m)的三元集合,用于记录从第i个变量节点vi到第j个校验节点cj的最小路径(即可能导致将第i个变量节点vi连接到第j个校验节点cj的边e的最小e-循环集合的路径)的深度、EMD和重数。三元组(d,τ,m)意味着存在从第i个变量节点vi到第j个校验节点cj的具有深度d和EMDτ的m个路径。
给定这些定义的项,用于计算第一评分项的枚举算法根据以下伪代码来计算:
Figure BDA0001583973880000304
Figure BDA0001583973880000311
Figure BDA0001583973880000321
Figure BDA0001583973880000331
如先前所描述的,枚举算法可以为连接到第i个变量节点的每个第j个校验节点生成数据结构W(cj),其中数据结构W(cj)包括和/或标识从第i个变量节点vi到第j个校验节点cj的具有深度d和EMDτ的m个路径。因此,对于连接到第j个校验节点的第i个变量节点,码本评分模块1102可以标识m个路径的值。在第i个变量节点连接到多于一个校验节点的情况下,码本评分模块1102可以标识连接到第i个变量节点的每个校验节点的m个路径的值,并将这些值相加在一起以便确定第一评分项
Figure BDA0001583973880000332
第二评分项
Figure BDA0001583973880000333
能够如下所示根据如下的等式(5)-(13)来计算:
Figure BDA0001583973880000334
其中N是变量节点的基数,Ns(d,d,τ)是包含给定(d,d,τ)循环集合的大小为S的停止集合的预期数量,并且∈i是与给定第i个变量节点v(i)相关联的比特擦除概率。Ns(d,d,τ)项根据以下等式来计算:
Figure BDA0001583973880000341
其中dc是最大校验节点度,其中A(s-d,ρ)是发出ρ个边的大小为s-d的变量节点的子集的数量,并且其中B(ρ,d,τ)是ρ个边形成M个校验节点的集合上的停止集合,其中d个校验节点是给定循环集合的内在校验节点,τ个校验节点是给定循环集合的外在校验节点。A(s-d,ρ)项根据以下生成多项式来计算:
Figure BDA0001583973880000342
并且B(ρ,d,τ)项根据以下等式来计算:
Figure BDA0001583973880000343
项α(i,τ)是将i个边连接到τ个外在校验节点使得每个外在校验节点被连接至少一次的可能性的数量,并且根据以下等式来计算:
Figure BDA0001583973880000344
此外,项β(j,d)提供了将j条边连接到d个内在校验节点的可能性的数量,并且根据以下等式来计算:
Figure BDA0001583973880000345
此外,γ(M-d-τ,ρ-i-j)项提供了将剩余(ρ-i-j)个边连接到剩余(M-d-τ)个校验节点使得校验节点不被连接或被连接至少两次的可能性的数量,其中M是校验节点的基数,并根据以下等式来计算:
Figure BDA0001583973880000346
此外或者可替换地,下面的递归被用于为i、τ、M和ρ的所有值生成α(i,τ)和γ(M,ρ)的预先计算的表格:
Figure BDA0001583973880000347
其中
Figure BDA0001583973880000351
以及
Figure BDA0001583973880000352
其中
Figure BDA0001583973880000353
返回参考等式(3),在等式(5)-(13)中,在适当的情况下,项
Figure BDA0001583973880000354
Figure BDA0001583973880000355
能够替换d和τ,其中GCD是指“最大公分母”。
此外,返回参考等式(5),可以基于与给定的第i个变量节点v(i)相关联的第i个比特擦除概率∈i来计算第二评分项
Figure BDA0001583973880000356
在这种情况下,控制器102和存储器裸芯104之间的通道可以在发送器通过通道传送第i个比特(值为0或1)到接收器的二进制擦除通道(binary erasure channel,BEC)之后被考虑和/或建模。比特擦除概率∈i是以零或没有可靠性接收第i比特的概率(即接收器没有第i个比特的比特值是正确的可靠性或置信度)。相应地,量(1-∈i)是以绝对可靠性接收第i个比特的概率(即,接收器具有第i比特的比特值是正确的绝对的可靠性或置信度)。
如等式(5)中所示,每个第i个比特擦除概率∈i可以与相应的第i个变量节点相关联,如下标i指示。第i个比特擦除概率∈i的值可以取决于与其相关联的变量节点是与好的存储位置还是坏的存储位置相关联。如先前所描述的,变量节点的数量可以等于要存储在存储装置的片段中的码字的比特数量。由于每个变量节点对应于码字比特序列的特定比特,并且每个比特被存储在存储装置的片段的特定存储器单元中,因此对于给定码字,每个相关联的变量节点又转而与存储该码字的存储装置的片段的特定存储器单元相关联。另外说明,存储器映射可以将给定的变量节点映射到给定的存储器单元,其可以是好的存储器单元或坏的存储器单元。
因此,当码本评分模块1102循环通过变量节点以计算第二评分项时,码本评分模块1102可以访问坏存储位置数据库1110以确定特定的第i个变量节点是与好存储器单元相关联还是与坏存储器单元相关联。如本文所使用的,与好存储器单元相关联的变量节点可以被称为好变量节点,并且与坏存储器单元相关联的变量节点可以被称为坏变量节点。如果码本评分模块1102确定第i个变量节点与好存储器单元相关联,则码本评分模块1102可以为相关联的第i个比特擦除概率∈i分配第一值。可替换地,如果码本评分模块1102确定第i个变量节点与坏的存储器单元相关联,则码本评分模块1102可以为相关联的第i个比特擦除概率∈i分配第二值。在特定示例配置中,当相关联的存储器单元是坏的时的第二值可以高于相关联的存储器单元是好的时的第一值。例如,第一值可以是0.2,而第二值可以是0.5。这些值仅仅是示例性的,并且可以使用其它值。并且,超过两个不同的值也是可能的,特别是对于其中使用超过两个等级(好/坏)来评估存储位置的可靠性的配置。
总之,码本评分模块1102可以使用不同的擦除概率值来计算对于不同变量节点的一个或多个循环集合的解码错误概率的预期贡献(即,第二评分项),并且码本评分模块1102对于每个预期贡献计算使用哪个擦除概率值可以取决于相应的变量节点是与好的存储位置还是坏的存储位置相关联。在特定配置中,对于预期的贡献计算,与相应的变量节点与好的存储位置相关联时相比,码本评分模块1102在相应的变量节点与坏的存储位置相关联时使用更高的擦除概率值。
图13示出了针对给定存储器区域从码本库1106计算第m个码本的码本分数RCB(m)的示例方法1300的流程图。在框1302处,码本评分模块1102可以标识要为其生成评分值的第m个码本的下一第i个变量节点。如果方法1300刚刚开始,则下一变量节点可以是第一变量节点v(1)。在框1304处,码本评分模块1102可以确定第i个变量节点是与存储器区域的好存储位置相关联还是坏存储位置相关联。在框1306处,码本评分模块1102可以诸如通过针对第i个变量节点计算对于第一评分项
Figure BDA0001583973880000361
的第一值和第二评分项的
Figure BDA0001583973880000362
的第二值,并且将所述项相乘来计算针对第i个变量节点的评分值。如先前所描述的,码本评分模块1102可以使用枚举算法来计算第一评分项
Figure BDA0001583973880000363
并且可以使用等式(5)-(13)来计算第二评分项
Figure BDA0001583973880000364
当计算第二评分项
Figure BDA0001583973880000365
时,码本评分模块1102可以基于第i个变量节点是与坏的存储器单元还是与好的存储器单元相关联来选择或设置用于比特擦除概率∈i的值。如先前所描述的,如果第i个变量节点与坏存储器单元相关联,则与第i个变量节点与好存储器单元相关联相比,擦除概率值可以更高。
在框1308处,码本评分模块1102可以确定是否存在要计算分数(或评分值)的另一个或下一个变量节点。如果是,则方法1300可以在块1302处前进到下一个第i个变量节点。如果不是,则在框1310处,码本评分模块1102可以基于针对第m个码本的每个第i个变量节点确定的分数(或评分值)来确定对于第m个码本的码本分数RCB(m)。在特定示例中,码本评分模块1102可将评分值相加在一起以生成对于给定存储器区域的码本分数RCB(m)
图14是从针对存储器裸芯104的多个存储器区域中的每一个的多个码本中选择码本的示例方法1400的流程图。在框1402处,存储器区域标识模块1108可以标识针对其从码本库1106中选择最好码本的多个存储器裸芯104的下一个存储器区域。如果方法1400处于其初始迭代中,则下一个存储器区域可以是存储器区域标识模块1108被配置为选择的初始存储器区域。在框1404处,码本评分模块1102可以从码本库1106中选择下一第m个码本。下一第m个码本可以是初始码本,其中该码本是为存储器区域选择的第一码本。
在框1406处,码本评分模块1102可以计算对于在框1404处选择的第m个码本的码本分数RCB(m)。如先前所描述的,码本分数RCB(m)可以根据图13的方法1300来计算。在框1408处,码本评分模块1102可确定对于在块1402处标识的存储器区域,码本库1106中是否存在另一码本要进行评分。如果存在,则方法1400可以返回到框1404,其中码本评分模块1102从库1106中选择进行评分的下一码本。可替换地,如果不存在针对存储器区域进行评分的进一步的码本,则方法1400可以前进到框1410,其中码本评分模块1102从库1106中选择最好码本用于存储器区域的编码和解码。码本评分模块1102可以基于在框1406处计算出的哪个码本产生最高得分来确定或选择最好码本。在做出选择之后,码本评分模块1102可以将存储器区域的最好码本标识为码本数据库508中的N个码本506(1)-506(N)中的一个。
在框1412处,存储器区域标识模块1108可以确定是否存在针对其要从码本库1106中选择最好码本的存储器裸芯104的另一存储器区域。如果存在,则方法1400可以返回到框1402,其中存储器区域标识模块1102标识下一存储器区域。如果不存在,则方法1400可以结束。
如先前所描述的,码本评分模块1102、存储器区域标识模块1104和坏存储数据库1110可以是存储器系统100的组件,诸如ECC引擎124的组件或控制器102的另一组件。在另一示例实施例中,码本评分模块1102、存储器区域标识模块1104和坏存储数据库1110可以是在存储器系统100的外部的外部计算设备或系统(诸如测试设备或系统)的控制器的组件。外部计算设备可以访问和/或在其中存储码本库1106。诸如通过分别执行图13和图14的示例方法1300和1400,基于存储器区域的坏存储位置,码本评分模块1102和存储器区域标识模块1104可以操作以分析存储在码本库1106中的M个码本1108(1)-1108(M)以选择对于存储器裸芯104的每个存储器区域的最好码本。然后,外部计算设备可以将选择的最好码本加载到存储器系统100的码本数据库508中,作为ECC引擎124用于编码和解码存储器裸芯104的各个存储器区域的数据的N个码本506(1)-506(N)。
在其它示例实施例中,图11中示出的一些组件可以是存储器系统100的组件,而另一些组件可以是外部计算设备或系统的控制器的组件。哪些组件是存储器系统100的一部分以及哪些组件是外部计算设备或系统的一部分可以改变。对于这些实施例,存储器系统100的组件和外部计算设备或系统的组件可以彼此通信,以便最终使得所选择的最好码本被加载到存储器系统100的码本数据库508中。将图11中所示的组件集成到存储器系统100、外部计算设备或系统或其组合中的各种方式是可能的。
在其它示例实施例中,不是基于解码度量(如参考图8-10所述)或者使用评分算法(如参考图11-14所述)来评估来自库的多个码本,而是存储器系统100可以被配置为通过基于特定存储器区域的坏存储位置修改或置换现有码本来确定用于特定存储器区域的码本。图15示出了控制器102的示例实施例的组件的框图,该控制器102可以涉及码本修改或者置换过程,以基于存储器裸芯104的存储器区域的坏存储位置来生成修改的或者置换的码本。对于一些示例配置,组件可以是ECC引擎124的组件,虽然在其它示例配置中,这些组件中的一些或全部可以被认为是与ECC引擎124分开的组件。所涉及的组件可以包括码本修改模块1502、存储器区域标识模块1504、可以如先前所描述的标识存储器裸芯104的各个存储器区域的坏存储位置的坏存储数据库1506、和可以存储和/或包括初始或公共码本1506和N个修改的码本1508(1)至1508(N)以对多个存储器裸芯104的多个存储器区域的数据进行编码和解码的码本数据库508。
在一些示例实施例中,初始码本1506可以在存储器系统100的寿命期间(诸如在存储器系统100的生产期间)被加载到码本数据库508中。虽然图15示出了一个初始码本1506,但是在其它示例配置中,多于一个初始码本1506可以被加载到码本数据库508中。通常,初始码本1506可以是具有不基于存储器裸芯104的任何坏存储位置的特定配置的码本。修改的码本1508(1)-1508(N)中的至少一个可以是初始码本1506的修改或置换,并且修改的码本1508(1)-1508(N)中的另外的码本可以各自是初始码本1506或另一修改或置换的码本的修改或置换。
在码本修改的一个示例配置中,码本修改模块1502可以被配置为基于连接到校验节点的与坏存储位置相关联的变量节点的数量来修改码本中的一个以生成修改的码本。特别地,可以通过减少某些校验节点和与坏存储位置相关联的变量节点的连接的数量来修改现有的码本。这个概念是,如果用于对存储在给定存储器区域中的数据进行编码和解码的码本具有连接到与坏存储位置相关联的太多变量节点的一个或多个校验节点,则对于给定存储器区域的解码性能可能不是最佳的。通过标识这些校验节点并通过减少这些校验节点和与坏存储位置相关联的变量节点的连接的数量来生成修改的码本,可以改善对于给定存储器区域的解码性能。
更详细地,当码本修改模块1502要确定对于特定存储器区域的码本时,码本修改模块1502可以选择码本数据库508中的现有码本(初始码本1506或码本修改模块1502为另一存储器区域生成的修改的码本1508)并且可以诸如通过访问坏存储数据库1506来确定特定存储器区域的坏存储位置。基于标识坏存储位置,码本修改模块1502可以被配置为确定现有码本的哪些变量节点与特定存储器区域的坏存储位置相关联。
如本文所使用的,将校验节点与好变量节点连接的连接(或边)可被称为好连接(或好边),以及将校验节点与坏变量节点连接的连接(或边)可被称为坏连接(或坏边)。在确定哪些变量节点与特定存储器区域的坏存储位置相关联时,码本修改模块1502可以被配置为遍历现有码本的校验节点,并且对于每个校验节点,对连接到该校验节点的坏变量节点或坏边的数量进行计数。
如果码本修改模块1502确定基于现有码本生成修改的码本,则码本修改模块1502可以使用计数信息来确定如何修改现有码本。在特定示例配置中,码本修改模块1502可以使用计数信息来标识可能是码本修改的主题的一个或多个候选校验节点。然后码本修改模块1502可以选择一个或多个候选校验节点作为码本修改的主题。转而,码本修改模块1502可以被配置为通过减少连接到其选择的候选校验节点的坏边的数量来修改现有码本。
码本修改模块1502可以以各种方式标识候选校验节点。在一个示例配置中,码本修改模块1502可以利用计数阈值。如果连接到给定校验节点的坏变量节点或坏边的数量超过了计数阈值,则码本修改模块1502可以被配置为将给定校验节点标识为候选校验节点。在一些示例配置中,计数阈值可以是一,虽然其它数字也是可能的。除了使用计数阈值之外或可替换地,码本修改模块1502可以利用计数范围来将校验节点标识为候选校验节点。也就是说,如果坏变量节点或坏边的数量在计数范围内,则码本修改模块1502可以被配置为将给定校验节点标识为候选校验节点。对于另一示例配置,码本修改模块1502可以确定连接到最高数量的坏变量的预定数量的校验节点。码本修改模块1502可以将那些校验节点标识为候选校验节点。因此,例如,如果预定数量是5,则码本修改模块1502可以被配置为标识连接到最多的坏变量节点的五个校验节点,并且将这五个校验节点标识为候选校验节点。基于计数信息标识用于码本修改的候选校验节点的其它方式可以是可能的。
在标识一个或多个候选校验节点之后,码本修改模块1502可被配置为通过减少到候选校验节点中的一个或多个的坏连接的数量来修改或置换现有码本。码本修改模块1502可以通过减少针对仅一些候选校验节点或针对所有候选校验节点的坏连接的数量来修改现有码本。
码本修改模块1502可以被配置为通过以各种方式减少到所选择的候选校验节点的坏连接的数量来修改现有码本。对于给定的所选择的候选校验节点,码本修改模块1502可以通过从码本中移除连接到所选择的校验节点的一个或多个坏连接来修改码本;将连接到所选择的校验节点的一个或多个坏连接切换到连接到一个或多个非候选校验节点;将一个或多个坏连接与一个或多个好连接交换,使得连接到候选和非候选校验节点的边的总数量保持相同,或其一些组合。此外或可替换地,码本修改模块1502可以通过将相关联的奇偶校验矩阵的两列或更多列彼此交换来修改码本。涉及交换的列中的一个可以对应于连接到所选择的校验节点的坏变量节点,并且交换中涉及的另一列可以对应于不与所选择的校验节点连接的好变量节点。
为了示出基于连接到校验节点的坏边的数量的示例码本修改,图16A示出了可以包括在码本数据库508中的现有码本的Tanner图。图16A中的Tanner图指示现有码本包括十二个变量节点v(1)至v(12)和四个校验节点c(1)至c(4)。如图16A所示,边将第一变量v(1)与第一校验节点c(1)连接,边将第一变量v(1)与第二校验节点c(2)连接,等等。此外,图16A示出了每个变量节点所关联的存储器区域的存储位置。例如,第一变量节点v(1)与第一存储位置相关联,第二变量节点v(2)与第二存储位置相关联,等等。对于存储器区域是平面的配置,图16A中指示的存储位置可以是位线。对于存储器区域是存储片段的配置,存储位置可以是存储器单元。
假设,例如,在十二个存储位置中,坏存储位置是第二、第七和第十二存储位置,如那些存储位置周围的粗体框所指示。因此,第一校验节点c(1)连接到一个坏变量v(7);第二校验节点c(2)连接到三个坏变量v(2)、v(7)和v(12);第三校验节点c(3)连接到两个坏变量v(2)和v(12);并且第四校验节点c(4)连接到两个坏变量v(7)和v(12)。
如果码本修改模块1502想要修改图16A所示的现有码本,码本修改模块1502可以将第二校验节点c(2)标识为候选校验节点。在一个示例中,由码本修改模块1502使用的坏连接或坏变量阈值可以是二,并且码本修改模块1502可以将第二校验节点c(2)标识为候选校验节点,因为连接到第二校验节点c(2)的坏连接的数量(三)大于坏连接阈值。作为另一示例,码本修改模块1502可以将第二校验节点c(2)标识为候选校验节点,因为它在四个校验节点c(1)至c(4)当中具有最多的与其连接的坏连接数量。
在将第二校验节点c(2)标识为候选校验节点时,码本修改模块1502可以通过减少连接到第二校验节点c(2)的坏连接的数量来修改现有码本。在一个示例中,码本修改模块1502可以通过从码本移除一个或多个坏连接来减少连接到第二校验节点c(2)的坏连接的数量。例如,现有码本的坏连接中的一个将第二变量v(2)连接到第二校验节点c(2)。码本修改模块1502可以通过从码本中移除该坏连接来修改现有码本。
作为另一示例修改,码本修改模块1502可以通过移动将第二变量节点v(2)连接到第二校验节点c(2)的坏连接来修改现有码本,使得坏连接将第二变量节点v(2)连接到非候选校验节点,诸如第一校验节点c(1)。在图16B中,由将第二变量节点v(2)连接到第一校验节点c(1)的粗体连接指示坏连接的移动。在这个示例中,连接到第二校验节点c(2)的坏连接的数量减1,而连接到第一校验节点c(1)的坏连接的数量加1。对于一些示例配置,如图16B中所示,坏连接被移动到具有最低数量的坏连接或最低数量的坏连接中的一个的校验节点,其在这种情况下是第一校验节点c(1)。如先前所描述的,第三和第四校验节点c(3)、c(4)两者都具有两个坏连接,并且向这些校验节点c(3)、c(4)中的任一个添加另一坏连接可以是不期望的,因为这样做会产生具有三个坏连接的校验节点的码本修改。
作为另一示例修改,码本修改模块1502可以通过将连接到第二校验节点c(2)的坏连接与连接到另一校验节点的好连接进行交换来修改现有码本。例如,如图16B所示,除了从第二校验节点c(2)移动连接到第二变量节点v(2)的坏连接,使得其转而连接到第一校验节点c(1)以外,可以移动连接第一校验节点c(1)和好变量节点的好连接,使得好连接连接到第二校验节点c(2)。例如,如图16A和图16B所示,连接到第五变量节点v(5)的好连接可以从连接到第一校验节点c(1)移动到连接到第二校验节点c(2)。在这个后面的示例中,连接到第二校验节点c(2)的坏连接的数量减1,而连接到校验节点中的每一个的连接的总数量维持相同。
为了简便,图16A和图16B中示出的示例码本修改示出了减少对于仅一个校验节点的坏连接的数量,并且将坏连接的数量减少一个。在其它示例配置中,可以针对多于一个校验节点减少坏连接的数量,并且/或者可以从给定候选校验节点去除多于一个坏连接。并且,在图16A和图16B中所示的示例码本修改中,被标识为候选校验节点的校验节点(即,第二校验节点)也是被选择作为码本修改的主题的校验节点。在其它示例配置中,如所提到的,可以有多于一个校验节点被标识为候选,但是少于全部候选节点被选择用于修改。用于基于坏连接的数量来选择用于码本修改的校验节点的各种配置可以是可能的。
在码本修改的另一示例配置中,码本修改模块1502可以被配置为基于参与最小循环的坏变量节点的数量来修改码本中的一个以生成修改的码本。这个概念是,如果用于对存储在给定存储器区域中的数据进行编码和解码的码本具有太多参与最小循环的坏变量节点,则对于给定存储器区域的解码性能可能不是最佳的。通过标识这些校验节点并生成减少了参与一个或多个最小循环的坏变量节点的数量的修改的码本,可以改善对于给定存储器区域的解码性能。
如先前所描述的,如果存在通过集合中的所有变量节点到它自身而不穿过边两次的路径,则变量节点的集合形成或参与循环,并且如果满足以下条件则变量节点的集合形成最小循环:(1)它形成循环,且(2)没有变量节点的子集形成循环。
对于从码本数据库508选择的给定码本,码本修改模块1502可以被提供有或以其它方式确定对于给定码本的各种最小循环和参与各种最小循环的特定变量节点。额外地,码本修改模块1502可以被配置为确定参与最小循环的哪些变量节点是坏变量节点,诸如通过访问坏存储数据库来确定与给定存储器区域的的坏存储位置相关联的变量节点。基于该信息,码本修改模块1502可以被配置为确定参与选择的码本的最小循环中的每一个的坏变量节点的数量。
如果码本修改模块1502确定基于现有码本生成修改的码本,则码本修改模块1502可以使用标识参与最小循环的坏变量的信息和/或参与最小循环的坏变量的数量来确定如何修改现有码本。在特定示例配置中,码本修改模块1502可以使用信息来标识可能是码本修改的主题的一个或多个候选最小循环。然后码本修改模块1502可以选择候选最小循环中的一个或多个作为码本修改的主题。转而,码本修改模块1502可以被配置为通过减少参与它选择的最小循环的坏变量的数量来修改现有码本。
码本修改模块1502可以以各种方式标识候选最小循环。在一个示例配置中,码本修改模块1502可以利用计数阈值。如果参与给定最小循环的坏变量节点的数量超过了计数阈值,则码本修改模块1502可以被配置为将该最小循环标识为候选最小循环。
对于其它示例配置,码本修改模块1502可以基于最小循环的长度和参与最小循环的坏变量的数量来利用阈值。在特定示例配置中,阈值可以是与最小循环的长度和参与最小循环的坏变量的数量之间的差相对应的差阈值。通常,循环的长度可以等于循环的边的数量。在码本的各种最小循环中,任何两个最小循环可以具有相同的长度或不同的长度。对于给定的最小循环,码本修改模块1502可以被配置为确定最小循环的长度和参与最小循环的坏变量的数量之间的差。如果如果该差低于差阈值,则码本修改模块1502可以被配置为将该最小循环标识为候选最小循环。在另一特定示例配置中,阈值可以对应于参与最小循环的坏变量的数量与最小循环的长度的比率。考虑最小循环的长度和参与最小循环的坏变量节点的数量两者的其它类型的阈值值可以是可能的。
对于其它示例配置,码本修改模块1502可以基于参与最小循环的坏变量的数量和变量的总数量来利用阈值。在特定示例配置中,该阈值可以是与参与最小循环的变量的总数量和参与最小循环的坏变量的数量之间的差相对应的差阈值。如果如果该差低于差阈值,则码本修改模块1502可以被配置为将该最小循环标识为候选最小循环。在另一特定示例配置中,阈值可以对应于参与最小循环的坏变量的数量与参与最小循环的变量的总数量的比率。考虑参与最小循环的坏变量节点的数量和变量节点的总数量两者的其它类型的阈值值可以是可能的。例如,阈值值可以基于最小循环的长度,参与最小循环的坏变量节点的数量以及参与最小循环的变量节点的总数量。
对于又一其它示例配置,码本修改模块1502可以被配置为确定具有最大数量的参与坏变量的预定数的最小循环量、具有循环长度和参与坏变量的数量之间的最小差的预定数量的最小循环、具有坏变量与最小循环长度的最大的比率的预定数量的最小循环、具有参与坏变量的数量与参与变量的总数量之间的最小差的的预定数量最小循环,或具有参与坏变量与总参与变量的最大比率的预定数量的最小循环。
基于参与最小循环的坏变量的数量来标识用于码本修改的候选最小循环的其它方式可以是可能的。例如,除了利用阈值之外或可替换地,码本修改模块1502可以利用范围,并且可以基于相对于该范围的确定值来确定最小循环为候选最小循环。
在标识一个或多个候选最小循环之后,码本修改模块1502可以被配置为通过减少参与候选最小循环的一个或多个的坏变量节点的数量来修改或置换现有码本。码本修改模块1502可以通过减少针对仅一些候选最小循环或针对所有候选最小循环的坏变量节点的数量来修改现有码本。修改的效果在于,为码本修改选择的最小循环可以被移除或打破,并且至少在一些情况下,可形成新的最小循环,其中新形成的最小循环具有更少数量的参与的坏变量节点、新形成的最小循环的长度与参与的坏变量节点的数量之间的更大差、参与的坏变量节点的数量与最小循环长度的更小比率、参与的变量节点的总数量和参与的坏变量节点的数量之间的更大差、参与的坏变量节点的数量和参与变量节点的总数量之间的更小比率、或者其一些组合。
码本修改模块1502可以被配置为通过以各种方式减少参与选择的最小循环的坏变量的数量来修改现有码本。对于给定的所选择的候选最小循环,码本修改模块1502可以通过从码本中移除连接到参与所选择的最小循环的一个或多个坏变量节点的一个或多个连接来修改码本;将连接到所选择的最小循环的一个或多个坏变量节点的一个或多个连接切换为连接到一个或多个不同的校验节点(即,对于给定边,保持坏变量节点相同但改变边连接到的校验节点为不同的校验节点);将坏连接改变为好连接(即,对于给定的边,保持校验节点相同,但将边连接的变量节点从参与最小循环的坏变量节点改变为好变量节点);或者它们的一些组合。另外,对于涉及切换或改变的一些修改,可以进行相应的连接改变,使得连接到变量节点中的每一个的边的总数量和连接到校验节点中的每一个的边的总数量保持相同。此外或可替换地,码本修改模块1502可以通过将相关联的奇偶校验矩阵的两列或更多列彼此交换来修改码本。涉及交换的列中的一个可以对应于参与所选择的最小循环的坏变量节点,并且交换中涉及的另一列可以对应于不参与所选择的最小循环的好变量节点。
为了示出基于参与最小循环的坏变量的数量的示例码本修改,图17A示出了可以包括在码本数据库508中的现有码本的Tanner图。图17A所示的Tanner图与图16A所示的Tanner图相同。Tanner图包括由图17A所示的粗边形成的最小循环,包括将第一变量节点v(1)连接到第一校验节点c(1)的边、将第一校验节点c(1)连接到第三变量节点v(3)的边、将第三变量节点v(3)连接到第二校验节点c(2)的边、以及将第二校验节点c(2)连接到第一变量节点v(1)的最后的边。最小循环的长度是4,参与最小循环的变量节点的总数量是2。
假设在示例中,正在针对其修改现有码本的特定存储器区域的坏存储位置包括第一存储位置和第三存储位置,如围绕这些存储位置的粗体框所指示。因而,参与所标识的最小循环的所有变量节点与坏存储位置相关联,产生两个参与的坏变量节点、对于所标识的最小循环的长度与参与的坏变量节点的数量之间的差为2的值、对于参与的坏变量节点的数量与最小循环的长度的比率为0.5的值、参与的变量节点的总数量与参与的坏变量节点的数量之间的差为0的值、以及参与的坏变量节点的数量与参与的变量节点的总数量的比率为1的值。码本修改模块1502可以被配置为计算这些值中的一些或全部,并且基于这些值中的一个或多个,将最小循环标识为候选最小循环。并且,如先前所描述的,可以基于参与最小循环的坏变量节点的数量、最小循环的长度和/或参与变量节点的总数量来计算其它值,并且码本修改模块1502可以使用这些其它值中的一个或多个来将最小循环标识为候选最小循环。
转而,码本修改模块1502可以被配置为通过移除或调整到参与所标识的最小循环的变量节点的一个或多个(即,第一变量节点v(1)和/或第三变量节点v(3))的连接来修改码本。图17B示出了修改的码本的Tanner图。如图17B所示,通过改变连接到第一和第三变量节点的边所连接到的校验节点来执行修改。具体地,如粗边所示,连接到第一变量节点v(1)并且最初连接到第一校验节点c(1)的边被改变为连接到第三校验节点c(3)。此外,连接到第三变量节点v(3)并且最初连接到第一校验节点c(1)的边被改变为连接到第四校验节点c(4)。此外,图17B示出进一步的连接修改,做出该修改以保持与四个校验节点c(1)至c(4)中的每一个的连接的总数量相同。具体地,如图17B中的粗边所指示,连接到第四变量节点v(4)并且最初连接到第四校验节点c(4)的边被改变为连接到第一校验节点c(1),并且连接到第九变量节点v(9)并且最初连接到第三校验节点c(3)的边被改变为连接到第一校验节点c(1)。
图17B所示的码本修改的结果是原始标识的短循环被打破或从码本中移除,并且新形成的短循环具有改善的最小循环度量。例如,新形成的最小循环包括将第一变量节点v(1)连接到第二校验节点c(2)的边、将第二校验节点c(2)连接到第二变量节点v(2)的边、将第二变量节点v(2)连接到第三校验节点c(3)的边、以及将第三校验节点c(3)连接到第一变量节点v(1)的边。虽然新形成的最小循环的变量节点的长度和总数量分别在4和2处保持相同,但是参与的坏变量节点的数量从2减少到1(即,它仅包括第一变量节点v(1)而不是第一和第三变量节点v(1)和v(3)两者)。类似地,其它新的最小循环可以包括第一和第三变量节点v(1)和v(3)两者,但是可以具有大于4的相应长度和/或包括多于两个的参与变量节点。
为了简便,图17A和17B中示出的示例码本修改示出了通过标识和移除单个最小循环来修改码本。在其它示例配置中,对于给定的置换,可以标识和/或移除多于一个的最小循环。并且,在图17A和17B中所示的示例码本修改中,被标识为候选最小循环的最小循环也是被选择作为码本修改的主题的最小循环。在其它示例配置中,如所提到的,可以有多于一个最小循环被标识为候选,但是少于全部的最小循环被选择用于修改。用于基于参与坏变量节点的数量来选择用于码本修改的最小循环的各种配置可以是可能的。
此外,码本修改模块1502可以被配置为生成现有码本的单个修改或置换,或者多个修改。例如,参考图16A-17B,码本修改模块1502可以确定若干可能的不同方式来修改变量节点和校验节点之间的边,以便减少连接到给定校验节点的坏变量的数量和/或参与最小循环的坏变量的数量。如果码本修改模块1502生成多个修改或置换,则控制器102(诸如与ECC引擎124)可以被配置为标识最好修改。例如,ECC引擎124可以被配置为确定哪个修改产生最好解码度量(诸如参考图8所描述的),或者可以使用参考图11-14描述的评分方案对修改中的每一个进行评分。
另外,码本修改模块1502可以被配置为修改一个或多个现有码本以为存储器裸芯104的多个存储器区域中的一个或多个生成一个或多个修改的码本。返回参考图15,码本修改模块1502可以与存储器区域标识模块1504通信以标识要针对其修改一个或多个码本的存储器区域。在一些示例配置中,在生产阶段期间,码本修改模块1502可以与存储器区域标识模块1504进行通信以循环通过存储器裸芯104的各个存储器区域,以确定是否和/或如何基于存储器区域中的每一个特有的坏存储位置信息来生成修改的码本。此外或可替换地,在存储器系统100的操作期间,码本修改模块1502可以响应于当解码来自存储器区域的数据时的解码度量的降低,来确定是否和/或如何修改用于特定存储器区域的一个或多个码本(诸如基于解码数据的增加的解码时间量或解码迭代数量)。
此外,如先前所描述的,码本修改模块1502、存储器区域标识模块1504和坏存储数据库1506可以是存储器系统100的组件,诸如ECC引擎124的组件或控制器102的另一组件。在另一示例实施例中,码本修改模块1502、存储器区域标识模块1504和坏存储数据库1506可以是在存储器系统100的外部的外部计算设备或系统(诸如测试设备或系统)的组件。外部计算设备可以访问和/或具有存储在其中的码本库,该码本库包含现有的码本,以至少初始地被用来对要存储在各种存储器区域中的数据进行编码和解码。基于存储器区域的坏存储位置,码本修改模块1502和存储器区域标识模块1504可以被配置为如参考图15-17B所述的生成修改的码本。然后,外部计算设备可以将修改的码本加载到存储器系统100的码本数据库508中,作为ECC引擎124用于对于存储器裸芯104的各个存储器区域编码和解码数据的N个码本506(1)-506(N)。
在其它示例实施例中,图15中示出的一些组件可以是存储器系统100的组件,而另一些组件可以是外部计算设备的控制器的组件。哪些组件是存储器系统100的一部分以及哪些组件是外部计算设备或系统的一部分可以改变。对于这些实施例,存储器系统100的组件和外部计算设备或系统的组件可以彼此通信,以便最终使得所修改的码本被加载到存储器系统100的码本数据库508中。将图15中所示的组件集成到存储器系统100、外部计算设备或系统或其组合中的各种方式是可能的。
图18示出了可以为多个存储器区域生成一个或多个现有码本的一个或多个修改的版本的码本修改过程的示例方法1800的流程图。在框1802处,存储器区域标识模块1504可以标识要针对其修改用于对存储在存储器区域中的数据进行编码和解码的一个或多个现有码本的多个存储器裸芯104的下一个存储器区域。如果方法1800处于其初始迭代中,则下一个存储器区域可以是存储器区域标识模块1504被配置为标识的初始存储器区域。在框1804处,码本修改模块1502可以诸如通过访问坏存储数据库1506来确定存储器区域的坏存储位置。
在块1806处,码本修改模块1502可以使用码本修改模块1502在框1804处标识的坏存储位置信息基于一个或多个现有码本来生成用于存储器区域的修改的码本。码本修改模块1502可以使用参考图15-17B描述的码本修改中的一个或多个来做此动作,所述码本修改包括修改码本以减少连接到一个或多个校验节点的坏变量的数量或修改现有码本以减少参与一个或多个最小循环的坏变量的数量。
在框1808处,码本修改模块1502可以确定是否存在要针对当前存储器区域做出的另一码本修改。例如,如先前所描述的,对于坏存储位置的给定的集合,可以存在现有码本或子码本的若干置换。如果是,则方法可以回到框1806,其中,码本修改模块1502可以使用坏的存储位置信息来生成另一修改的码本或另一修改的码本的集合。可替换地,如果不是,则方法可以前进到框1810,其中码本修改模块可以标识最好的修改的码本或修改的码本的集合。例如,码本修改模块1502可以使用图8所示的解码评估模块810和码本评分图表812来标识产生最好解码度量的修改的码本。作为另一示例,码本修改模块1502可以利用图11所示的码本评分模块1102来对修改的码本进行评分以便选择最好的码本。如果码本修改模块1502仅生成一个修改的码本或修改的码本的集合,则可以跳过框1810。
在框1812处,存储器区域标识模块1504可以确定是否存在要对其执行码本修改的另一存储器区域,如果存在,那么该方法可以返回到框1802,其中下一存储器区域被标识用于码本修改。如果不存在,则该方法可以结束。
在其它示例实施例中,存储器系统100可以被配置为使用不同大小的码本来生成数据页中不同大小的码字,或者使用不同大小的子码本来生成码字中的不同大小的子码字。可以确定用于在数据页中生成差别大小的码字的码本的大小,使得针对给定码字的奇偶校验比特的数量与坏比特的数量的比率对于数据页中的码字中的每一个是相同或者尽可能接近的。这样做可以通过均衡数据页中的码字当中的错误校正能力来改善解码。
更详细地,并且如前面参考图4所解释的,包括信息比特序列和为信息比特序列产生的奇偶校验比特的每个码字可以被存储在存储装置的片段或单元中,并且多个单元可以组成存储装置的页。相应地,被存储或要被存储在单个存储页中的码字可以是或组成数据的页,另外被称为数据页。
数据的存储页内的坏存储器单元可能不均匀地分布。因此,在单个存储页内的多个存储单元中,每个存储单元的坏存储器单元的数量可能不同。结果,在用于对存储在存储页中的码字进行编码的奇偶校验比特的数量相同的情况下,存储在具有更高数量的坏存储器单元的存储单元中的码字与存储在具有更低数量的坏存储器单元的存储单元中的码字相比可能更难解码。可以通过基于存储单元中的每一个中的坏存储器单元的数量来调整用于对要被存储在存储页中的码字中的每一个进行编码的奇偶校验比特的数量来补偿解码性能的不一致。
图19示出了可以涉及确定用于生成相同数据页的码字的码本的大小的控制器102的示例实施例的组件的框图。对于一些示例配置,组件可以是ECC引擎124的组件,虽然在其它示例配置中,这些组件中的一些或全部可以被认为是与ECC引擎124分开的组件。所涉及的组件可以包括码本大小确定模块1902、存储器区域标识模块1904、坏存储数据库1906(其可以如先前所描述的标识用于存储器裸芯104的各种存储器区域的坏存储位置)、码本确定模块1908、以及码本数据库508,码本数据库508可以包括用于生成存储器裸芯104的给定存储页1914的N个存储单元1912中存储的码字的N个码本1910。并且,在一些示例实施例中,组件可以包括存储M个码本1918(1)至1918(M)的码本库1916。
更详细地说,N个存储单元1912可以包括第一存储单元1912(1)、第二存储单元1912(2),并且延伸到第N存储单元1912(N)。通常,每存储页1914可以存在两个或更多个存储单元1912(即,N是二或更多)。码本数据库508可以包括用于生成存储在第一存储单元1912(1)中的第一码字的第一码本1910(1)、用于生成存储在第二存储单元1912(2)中的第二码字的第二码本1910(2),并且延伸到用于生成存储在第N存储单元1912(N)中的第N码字的第N码本1910(N)。
码本大小确定模块1902可以被配置为确定码本1912中的每一个的大小(即,列和行的数量)。码本大小确定模块1902可以基于给定存储页1914和/或存储单元1912(1)至1912(N)中的每一个的坏存储位置和/或坏存储位置的数量来进行大小确定。码本大小确定模块1902可以被配置为访问坏存储数据库1906以确定坏存储位置和/或坏存储位置的数量。如果坏存储位置在给定存储页1914的存储单元1912当中不均匀分布,则码本大小确定模块1902可以确定码本1910(1)至1910(N)的大小中的至少两个的大小彼此不同。通常,通过被配置为生成不同数量的奇偶校验比特和/或通过具有相关联的具有不同数量的列、行的奇偶校验矩阵或其组合,两个码本可以彼此是不同大小的。
尽管具有不同的大小,但是码本1910(1)至1910(N)中的每一个被配置为生成的奇偶校验比特的数量可以与给定存储页1914的每个存储单元1912中的坏存储器单元的数量成比例。特别地,码本1910(1)至1910(N)的大小可以被设置为使得用于给定存储页1914的存储单元1912(1)至1912(N)中的每一个的奇偶校验比特的数量与坏存储器单元的数量的比率是相同的或尽可能接近的。
在一些示例配置中,码本大小确定模块1902可以将来自存储单元1912的读取码字的预期故障或不正确的比特值的数量(FBC)考虑为与信道相关联的误码率(bit errorrate,BER)的结果,其中在该信道上数据在控制器102(和/或RAM 116)与包括给定存储页1914的存储器裸芯104之间被通信传达。信道的BER可以是已知的,并且预期的不正确的比特值的数量可以是存储单元1912的大小(即,存储单元1912被配置为存储的比特的数量)的BER倍。然后码本大小确定模块1902可以使用以下两个等式来标识每个第i个存储单元1912的奇偶校验比特值pi
Figure BDA0001583973880000511
p1+p2+...+pN=pTOTAL, (15)
其中FBC是存储单元1912的预期的失败或不正确的比特值的数量,p1是在码本修改之后第一码本1910(1)要生成的奇偶校验比特的数量,BBL1是与第一存储单元1912(1)相关联的坏位线的数量,p2是在码本修改之后第二码本1910(2)要生成的奇偶校验比特的数量,BBL2是与第二存储单元1912(2)相关联的坏位线的数量,pN是在码本修改之后第N个码本1910(N)要生成的奇偶校验比特的数量,BBLN是与第N个存储单元1912(N)相关联的坏位线的数量,并且pTOTAL是数据页(或者N个码字)具有的奇偶校验比特的总数量。如先前所描述的,给定存储单元1912中的坏存储器单元的数量可以等于延伸通过给定存储单元1912的坏位线的数量。码本修改模块1502可以使用等式14和15施加的约束(即,使得等式14和等式15都是真的)来标识奇偶比特的数量p1、p2、...pN
在确定码本1910(1)至1910(N)中的每一个的大小时,码本大小确定模块1902可以将大小提供给码本确定模块1908,码本确定模块1908又可以转而被配置为确定码本1910(1)至1910(N)中的每一个。在一些示例配置中,码本确定模块1908可以被配置为根据从码本大小确定模块1902接收到的大小信息,诸如从头开始生成码本1910(1)至1910(N)中的每一个。在其它示例配置中,码本确定模块1908可以被配置为修改或置换码本1910的现有版本以生成码本1910的新版本。例如,N个码本1910(1)至1910(N)可以具有它们彼此相同、或者至少具有彼此相同的大小的初始配置。对于初始配置,可能存在(多个)初始码本1910被配置为针对给定存储页1914生成的奇偶校验比特的总数量。在修改或置换(多个)初始码本1910之后,所得到的新码本1910(1)至1910(N)中的至少两个可以是彼此不同的大小,但是新码本1910(1)至1910(N)被配置为针对存储在给定存储页1914中的数据页生成的奇偶校验比特的总数量可以与初始配置相同。作为修改的一部分,码本确定模块1908可以被配置为添加列和行以增加现有码本的大小或者减去列和行以减小现有码本的大小以便生成新码本1910(1)至1910(N)。除了添加和/或减去列和行之外,码本确定模块1908还可以被配置为改变奇偶校验矩阵内的值和/或交换列和/或行,以便根据从码本大小确定模块1902接收的大小信息来生成修改的奇偶校验矩阵。
对于其它示例配置,码本确定模块1908可以被配置为访问码本库1916并且选择库1916中的M个码本1918的集合用于N个码本1910。例如,存储在码本库1916中的M个码本1918(1)至1918(M)可以包括不同的码本集合,每个集合具有与其它集合不同大小的码本。在诸如通过从码本大小确定模块1902接收大小信息来确定奇偶校验比特的数量p1到pN时,码本确定模块1908可以选择被配置为生成或最接近地生成码本大小确定模块1902确定的奇偶校验比特的数量p1到pN的码本集合。一旦选择,所选择的码本集合可以被加载到码本数据库508中作为N个码本1910(1)至1910(N)。
在另一示例配置中,码本大小确定模块1902可以在子码字级别上标识子码本的大小。更详细地,对于一些示例编码和解码方案,信息比特序列β可以被划分或分成预定的n个部分,其中n是2或更大。示例可以是被分成四个1kB比特序列部分的4千字节(kB)信息比特序列。可以为信息比特序列部分的每个单独生成子码奇偶校验比特。此外,可以共同为比特序列部分生成联合奇偶校验比特。
图20A示出了可以被配置为对码字的信息比特序列部分生成子码奇偶校验比特的奇偶校验比特生成器模块502(图5)的组件的示例配置的框图。组件可以包括子码奇偶校验生成模块2002和联合奇偶校验生成模块2004。并且,RAM 116可以被分开或组织到被指定用于码字的信息比特的存储的信息比特部分2006、被指定用于码字的子码奇偶校验比特的存储的子码奇偶校验比特部分2008、以及被指定用于码字的联合奇偶校验比特的存储的联合奇偶校验比特部分2010。
未编码的信息比特序列β可以最初存储在信息比特部分2006中。子码奇偶校验生成模块2002可以使用一个或多个子码本对信息比特序列β的n个部分进行编码,以便生成n个子码奇偶校验比特序列δ,每个用于信息比特序列β的部分中的一个。每个奇偶校验比特序列δ可以被进一步划分为第一子码奇偶校验比特部分δ'和第一联合奇偶校验比特部分δ”。第一子码奇偶校验比特部分δ'可以被传送到RAM 116的子码奇偶校验比特部分2008。第一子码奇偶校验比特部分δ'和针对其生成第一子码奇偶校验比特部分δ'的信息比特序列β的相关联部分的组合可以形成子码字。此外,第一联合奇偶校验比特部分δ”可以被发送到联合奇偶校验生成模块2004以用于如下面进一步详细描述的进一步处理。
为了示出,子码奇偶校验生成模块2002可以使用子码本对信息比特序列β的第一部分进行编码,以便生成第一奇偶校验比特序列δ1。第一奇偶校验比特序列δ1可以被划分为第一子码奇偶校验比特部分δ1'和第一联合奇偶校验比特部分δ1”。第一子码奇偶校验比特部分δ1'可以被传送到RAM 116的子码奇偶校验比特部分2006,并且第一子码奇偶校验比特部分δ1'与信息比特序列β的第一部分组合可以形成与信息比特序列β相对应的第一子码字。此外,第一联合奇偶校验比特部分δ1”可以被发送到联合奇偶校验生成模块2004。另外,子码奇偶校验生成模块2002可以使用子码本对信息比特序列β的第二部分进行编码,以便生成第二奇偶校验比特序列δ2。第二奇偶校验比特序列δ2可以被划分为第二子码奇偶校验比特部分δ2'和第二联合奇偶校验比特部分δ2”。第二子码奇偶校验比特部分δ2'可以被传送到RAM 116的子码奇偶校验比特部分2006。信息比特序列β的第二部分与第二子码奇偶校验比特部分δ2'组合可以形成与信息比特序列β相对应的第二子码字。第二联合奇偶校验比特部分δ2”可以被发送到联合奇偶校验生成模块2004。编码过程可以以这种方式继续,直到信息比特序列β的所有n个部分被子码奇偶校验生成模块2002编码,并且针对信息比特中的每一个生成子码奇偶校验比特部分δ'并且子码奇偶校验比特部分δ'被存储在RAM 116的子码奇偶校验比特部分2008中。
联合奇偶校验生成模块2004可以被配置为通过对联合奇偶校验比特部分δ”执行按位XOR运算来生成码字的联合奇偶校验比特。被称为组合的联合奇偶校验比特部分δ”'的(多个)XOR操作的结果可以是码字的联合奇偶校验,并被存储在RAM 116的联合奇偶校验比特部分2010中。在片段中存储的完整的码字可以是子码字和组合的联合奇偶校验比特部分δ”'的组合。
为了解码用利用图20A的组件执行的编码过程生成的码字,ECC引擎124(图2A)可以单独解码子码字而不使用组合的联合奇偶校验比特部分δ”'。然而,如果在解码期间,ECC引擎124确定与子码字相关联的误码率的一个或多个太高,则ECC引擎124可以通过组合子码字并且还使用组合的联合奇偶校验比特部分δ”'来解码子码字。使用子码奇偶校验比特部分δ'并且不使用组合的联合奇偶校验比特部分δ”'的解码可以被称为正常或默认模式,并且使用子码奇偶校验比特部分δ'和组合的联合奇偶校验比特部分δ”'可以被称为英雄(heroics)模式。
参考图20B,子码奇偶校验生成模块2002可以被配置为使用加载到码本数据库508中的n个子码本2002(包括生成用于信息比特序列β的第一部分的第一子码奇偶校验比特δ12004(1)的第一子码本2002(1)、用于生成第二子码奇偶校验比特δ2 2004(2)的第二子码本2002(2)、并扩展到生成第n个子码奇偶校验比特δn 2004(n)的第n个子码本2002(n))来生成n个子码奇偶校验比特序列。
参考图20C,与子码本2002(1)至2002(n)相关联的子奇偶校验矩阵Hsc1至Hscn可以是和/或对应于与整个码字相关联的更大奇偶校验矩阵H的子矩阵部分。图20C示出了更大奇偶校验矩阵H的示例配置的示意图。奇偶校验矩阵Hsc1至Hscn的数量的n数量可以对应于和/或等于信息比特序列β的部分的n数量和/或所生成的子码字的数量。图20C所示的示例奇偶校验矩阵H包括四个子矩阵Hsc1、Hsc2、Hsc3、Hsc4(即,n=4),但是如上面提到的,除了四以外的数字可以是可能的。每个子矩阵Hsc可以包括对应于子码奇偶校验的一个或多个列2050以及对应于用于生成联合奇偶校验比特的一个或多个列2052。此外,更大的奇偶校验矩阵H可以包括对应于联合奇偶校验比特的联合子矩阵Hjoint。联合子矩阵Hjoint可以包括与子矩阵Hsc的列2052对齐和/或是与其相同列的一部分的列。这些列2054可以包括具有1或者0和1的组合的比特值的元素。列2054之外的联合子矩阵Hjoint的元素可以全部具有零的比特值。在一些示例配置中,联合子矩阵Hjoint可以由联合奇偶校验生成模块2004输入和/或使用,用于联合奇偶校验比特的生成。
参考图21,码本大小修改模块1902可以被配置为以与如参考图19所述的其标识码本1910(1)至1910(N)的大小的方式类似的方式来标识子码本2002(1)至2002(n)的大小。在访问坏存储数据库1906时,码本大小确定模块1902可以确定坏存储位置在给定存储单元2006的存储子单元2008(1)至2008(n)当中不均匀分布。在特定的示例配置中,码本大小确定模块1902可以被配置为设置每个子码本2002被配置为生成的子码奇偶校验比特,使得对于给定存储单元2006的存储子单元2008(1)至2008(n)中的每一个,子码奇偶校验比特的数量与坏存储器单元的数量的比率是相同或尽可能接近的。此外,码本大小标识模块1902可以被配置为使用上面的等式(14)和(15)来确定如何设置子码本2002(1)至2002(n)的大小,除了在这种情况下,pi表示针对第i个子码字生成的子码奇偶校验比特的数量,pTOTAL表示针对码字生成的子码奇偶校验比特的总数量,FBC表示针对给定子单元2008的失败或不正确比特值的预期数量的数量,BBLi表示第i个存储子单元2008(i)中的坏位线的数量。
此外,在确定子码本2002(1)至2002(n)中的每一个的大小时,码本大小确定模块1902可以将大小提供给码本确定模块1908,码本确定模块1908可以转而被配置为确定子码本2002(1)至2002(n)中的每一个。在一些示例配置中,码本确定模块1908可以被配置为根据从码本大小确定模块1902接收到的大小信息,诸如从头开始生成子码本2002(1)至2002(n)中的每一个。在其它示例配置中,码本确定模块1908可以被配置为,诸如根据大小信息通过向相关联的子码矩阵Hsc添加或减去行和列来修改或置换子码本2002的初始版本或现有版本以生成子码本2002的新版本。对于这些示例配置,由修改后的子码本2002(1)至2002(n)生成的子码奇偶校验比特的总数量可以与初始版本相比保持相同。在其它示例配置中,码本确定模块1908可以被配置为访问码本库2102,并且从库1916中的M个子码本2104(1)至2104(M)中选择与从码本大小确定模块1902接收到的大小信息相对应的子码本的集合。在进行选择时,码本确定模块1908可以将选择的集合加载到码本数据库508以用作N个子码本2002(1)至2002(n)。
在码本修改的其它示例配置中,码本大小确定模块1902可以被配置为基于与码字相关联的互信息(mutual information,MI)来标识码本和/或子码本的大小。通常,存储器系统100可以包括通道,通过该通道从RAM 116向存储器裸芯104发送用于编程到给定存储单元中的码字,然后通过该通道编程的码字从存储器裸芯104的给定的存储单元发送回RAM116中作为读取操作的一部分。在通过通道被通信传达并被编程到存储器裸芯104单元中之前的码字的版本可以被称为输入码字,并且在其被从存储器裸芯104读回之后的码字的版本可以被称为输出码字。通道通常是有噪声的,这意味着输出码字将有错误,即输出码字的比特序列的逻辑电平将不匹配输入码字的比特序列的逻辑电平。通道的一个特征可以是其通道容量,其可以是码字能够可靠地在通道上发送的比特率的紧(tight)上限。通道的互信息可以确定通道的通道容量。特别地,通道的通道容量可以是关于输入码字的输入分布的最大互信息。在实际实施方式中,存储器系统100可以以低于互信息的比特率在通道上通信传达码字。速率间隔(或简称间隔)可以是定义比特率的上限的已知值。也就是说,存储器系统100可以被配置为以低于互信息减去间隔的比特率在通道上通信传达码字,如以下不等式所表示的:
R<MI-G, (16)
其中R表示码字在通道上发送的比特率,MI表示通道的互信息,以及G表示间隔。
对于给定的码字,通信传达码字的通道和存储码字的存储单元可以被称为彼此相关联和/或相对应。给定通道和/或相关联的存储单元的互信息可以基于相关联的错误计数,该错误计数可以是在给定通道上发送的码字的预期失败或错误比特值的数量(FBC)和存储码字的相关联的存储单元的坏位线(BBL)的数量(坏位线的数量也可以被称为擦除的数量)的和。特别地,可以使用和/或基于以下等式来计算给定通道的互信息:
MI(X,Y)=H(X,Y)-H(X)-H(Y) (17)
其中X是在比特值被编程到存储器裸芯104的存储单元中时的码字的比特的比特值的集合,Y是在比特值从存储单元通过给定通道被读取而被标识(例如通过ECC引擎124)时码字的比特的比特值的集合,H是如下定义的熵:
H(X,Y)=-∑x∈X,y∈YP(x,y)log2P(x,y), (18)
H(X)=-∑x∈XP(x)log2P(x), (19)
H(Y)=-∑y∈YP(y)log2P(y), (20)
其中x表示初始编程的比特值的集合X的比特值,并且y表示读取比特值的集合Y的相应比特值。对于给定的通道,给定相应比特值x的接收比特值y的条件概率表示为P(y|x),可以基于模型来计算。一个示例模型可以是二元对称模型。另一模型示例可以将噪声(诸如高斯分布噪声)添加到与每个比特相关联的每个电压电平,其可以产生针对集合X和Y中的比特值中的每一个的各种条件概率P(y|x)。其它模型可以是可能的。预期的失败或不正确的比特值的数量(FBC)和读取码字中的坏比特的数量(即,擦除或延伸通过存储单元的坏位线的数量)可以被输入到和/或定义用来定义条件概率P(y|x)值的模型。编程的比特值分布可以是已知的。因此,在确定条件概率P(y|x)值时,联合分布P(x,y)和边际分布P(y)可以根据以下等式来确定:
P(x,y)=P(x)P(y|x), (21)
P(y)=∑x∈XP(x,y)。 (22)
在确定了编程的比特值分布P(x)、联合分布P(x,y)和边缘分布P(y)时,可以使用等式(17)-(20)来计算互信息。
码字在通道上发送的比特率也可以是码字的奇偶校验比特的数量的函数。特别地,比特率可以由以下等式确定:
Figure BDA0001583973880000571
其中R表示码字的比特率,p表示码字的奇偶校验比特的数量,并且I表示码字的信息比特的数量。结合等式(16)和(23),能够将码字的奇偶校验比特的数量p的上限确定为信息比特的数量I、互信息和间隔的函数,如以下不等式所指示的:
Figure BDA0001583973880000572
返回参考图19,码本大小确定模块1902可以被配置为基于相关联的互信息来标识码本1910(1)至1910(N)的大小。如果通道被用来通信传送使用第i个码本1910(i)生成的码字,则给定的第i个码本1910(i)可以与给定通道的互信息相关联。例如,第一码本1910(1)用于为存储在存储页1802的第一存储单元1910(1)中的码字生成奇偶校验比特,因此用于通信传达存储在第一存储单元1910(1)中的码字的通道的互信息可以被认为与第一码本1910(1)相关联。
为了确定码本1910(1)至1910(N)的大小,码本大小确定模块1902可以确定与码本1910(1)至1910(N)中的每一个相关联的互信息。为此,码本修改模块102可以访问坏存储数据库1906以标识给定存储页1914和/或存储单元1912(1)至1912(N)中的每一个的坏存储位置。如果坏存储位置在存储单元1912(1)至1912(N)上不均匀分布,则码本大小确定模块1902可以基于相关联的互信息确定码本1910(1)至1910(N)中的至少两个将是不同的大小。特别地,码本修改模块1502可以被配置为确定存储单元1912(1)至1912(N)中的每一个的错误计数。如先前所描述的,对于给定的第i个存储单元1912(i),相关联的错误计数可以是从给定存储单元1912(i)读取的码字的预期失败或不正确的比特值的数量(FBC)和与给定存储单元1912(i)相关联的坏位线(BBLi)的数量的和。码本大小确定模块1902可以被配置为基于从坏存储数据库1906获得的坏存储位置信息来确定相关联的坏位线的数量。然后码本大小确定模块1902可以被配置为,诸如通过使用以上等式(17)-(20)中的一个或多个,基于相关联的错误计数来确定与码本1910(1)至1910(N)中的每一个相关联的互信息值。然后,使用等式(22),码本大小确定模块1902可以被配置为确定要由码本1910(1)至1910(N)中的每一个生成的奇校验偶比特的量,其中附加约束是由码本1910(1)至1910(N)生成的奇偶校验比特的总数量可以不超过存储页1914中存储的数据页的奇偶校验比特的初始数量pTOTAL,如以下不等式所示:
p1+p2+...+pN≤pTOTAL, (25)
在确定码本1910(1)至1910(N)中的每一个的大小时,码本大小确定模块1902可以将大小信息发送到码本确定模块1908。作为响应,码本确定模块1908可以以与前述相同的方式确定码本1910(1)至1910(N)。
在另一示例配置中,码本大小确定模块1902可以被配置为基于子码级别的互信息来标识子码本的大小。返回参考图20B,对于给定存储单元2006,如果坏存储位置跨存储子单元2008(1)至2008(n)不均匀分布,则码本大小确定模块1502可以基于与子码本2002(1)至2002(n)中的每一个相关联的互信息来标识两个或更多个子矩阵Hsc的大小彼此不同。码本大小确定模块1902可以被配置为使用等式(16)-(25)来确定针对子码字中的每一个的子码奇偶校验比特的数量,除了p可以表示子码字的子码奇偶校验比特的数量,I可以表示子码字的信息比特的数量,并且pTOTAL可以表示码字的奇偶校验比特的数量。
此外,码本大小确定模块1902可以被配置为为存储器裸芯104的多个存储器区域中的一个或多个标识N个码本1910(1)至1910(N)的大小和/或n个子码本2002(1)至2002(n)的大小。参考图19或图21,码本大小确定模块1902可以与存储器区域标识模块1904进行通信以标识要针对其确定码本和/或子码本的大小的存储器区域。在一些示例配置中,在生产阶段期间,码本大小确定模块1902可以与存储器区域标识模块1904进行通信以循环通过存储器裸芯104的各个存储器区域,以基于存储器区域中的每一个特定的坏存储位置信息确定针对各个存储器区域的码本和/或子码本的大小。此外或可替换地,在存储器系统100的操作期间,码本修改模块1902可以响应于当解码来自存储器区域的数据时的解码度量的降低来确定针对用于特定存储器区域的码本和/或子码本的新尺寸(诸如基于解码数据的增加的解码时间量或解码迭代数量)。
此外,如先前所描述的,码本大小确定模块1902、存储器区域标识模块1904、坏存储数据库1906和码本确定模块1908可以是存储器系统100的组件,诸如ECC引擎124的组件或控制器102的另一组件。在其他示例实施例中,码本大小确定模块1902、存储器区域标识模块1904、坏存储数据库1906和码本确定模块1908可以是在存储器系统100的外部的外部计算设备或系统(诸如测试设备或系统)的组件。在这些实施例的一些中,外部计算设备可以访问和/或在其中存储码本库1916。基于存储器区域的坏存储位置,码本大小确定模块1902可以被配置为标识各个存储器区域的码本和/或子码本的大小,并且码本确定模块1908可以被配置为基于从码本大小确定模块1092接收的大小信息来确定码本和/或子码本。然后外部计算设备可以将码本和/或子码本加载到码本数据库508中。此后,诸如在存储器系统100的正常操作期间,ECC引擎124可以使用具有变化大小的加载的码本和/或子码本来对存储器裸芯104的各个存储器区域进行数据编码和解码。
在其它示例实施例中,图19和图21中示出的组件的一些可以是存储器系统100的组件,而另一些组件可以是外部计算设备或系统的控制器的组件。哪些组件是存储器系统100的一部分以及哪些组件是外部计算设备或系统的一部分可以改变。对于这些实施例,存储器系统100的组件和外部计算设备或系统的组件可以彼此通信,以便最终使得所确定的码本被加载到存储器系统100的码本数据库508中。将图19和图21所示的组件整合到存储器系统100、外部计算设备或系统或其组合的各种方式可以是可能的。
图22示出了可以基于针对多个存储器区域的码本的大小确定来确定码本的码本确定过程的示例方法2200的流程图。在一些示例方法中,特定的存储器区域可以是平面或特定的存储页,并且针对特定存储页或该平面中的存储页来确定码本和码本的相关联的大小。
在框2202处,存储器区域标识模块1904可以标识要针对其确定用于对存储在存储器区域中的数据进行编码和解码的码本的多个存储器裸芯104的下一个存储器区域。如果方法2200处于其初始迭代中,则下一个存储器区域可以是存储器区域标识模块1904被配置为标识的初始存储器区域。在框2204处,码本大小确定模块1902可以诸如通过访问坏存储数据库1906来确定存储器区域的坏存储位置和/或坏存储位置的数量。
在框2206处,码本大小确定模块1902可以确定所使用的一组码本的大小和/或由该组码本生成的奇偶校验比特的数量,以对存储在框2202处标识的存储器区域中的数据进行编码和解码。如果坏存储位置跨存储器区域不均匀分布,则码本的至少两个可以被配置为生成不同数量的奇偶校验比特和/或相关联的奇偶校验矩阵可以是不同的大小。码本大小确定模块1902可以基于码字中的奇偶校验比特与坏比特的比率来确定大小,使得如先前所述的,存储在存储器区域的存储单元中的给定码字的奇偶校验比特的数量和坏比特的数量的比率对于存储在存储器区域的相同存储页中的多个码字是相同或尽可能相近的。此外或可替换地,码本大小确定模块1902可以基于与存储在存储器区域的相同存储页中的码字中的每一个相关联的互信息来确定大小。如先前所描述的,然后码本大小确定模块1902可以诸如通过使用等式(16)-(25)来使用相关联的互信息以确定每个码本要生成的奇偶校验比特的大小和/或数量。
在框2208处,码本大小确定模块1902可以将在框2206处确定的大小信息提供给码本确定模块1908。作为响应,在框2210处,码本确定模块1908可以确定对于存储器区域的存储单元的码本。在一些示例方法中,码本确定模块1908可以通过根据大小信息生成码本来确定码本。在其它示例方法中,码本确定模块1908可以通过使用从码本大小确定模块1902接收的大小信息从码本库1916中选择码本来确定码本。
在框2212处,码本确定模块1908可以将码本加载到码本数据库508中。在一些示例方法中,码本确定模块1908可以不将确定的码本加载到码本数据库508中,直到码本确定模块1908已经确定用于所有存储器区域的码本以后。在框2214处,存储器区域标识模块1904可以确定是否存在要针对其确定码本的另一存储器区域。如果存在,则该方法可以返回到框2202,其中下一个存储器区域被标识。如果不存在,则该方法可以结束。
图23示出了可以基于对于针对多个存储器区域的子码本的大小确定来确定子码本的子码本确定过程的示例方法2300的流程图。在一些示例方法中,特定的存储器区域可以是子平面或特定的存储单元,并且针对特定存储单元或该子平面中的存储单元来确定子码本和子码本的相关联的大小。
在框2302处,存储器区域标识模块1904可以标识要针对其确定用于对存储在存储器区域中的数据进行编码和解码的子码本的多个存储器裸芯104的下一个存储器区域。如果方法2300处于其初始迭代中,则下一个存储器区域可以是存储器区域标识模块1904被配置为标识的初始存储器区域。在框2304处,码本大小确定模块1902可以诸如通过访问坏存储数据库1906来确定存储器区域的坏存储位置和/或坏存储位置的数量。
在框2306处,码本大小确定模块1902可以确定所使用的一组子码本的大小和/或由该组子码本生成的奇偶校验比特的数量,以对存储在框2202处标识的存储器区域中的数据进行编码和解码。如果坏存储位置跨存储器区域不均匀分布,则子码本的至少两个可以被配置为生成不同数量的奇偶校验比特和/或相关联的子码奇偶校验矩阵可以是不同的大小。码本大小确定模块1902可以基于子码字中的奇偶校验比特与坏比特的比率来确定大小,使得如先前所描述的,存储在存储器区域的存储子单元中的给定子码字的奇偶校验比特的数量和坏比特的数量的比率对于存储在存储器区域的相同存储单元中的多个子码字是相同或尽可能相近的。此外或可替换地,码本大小确定模块1902可以基于与存储在存储器区域的相同存储单元中的子码字中的每一个相关联的互信息来确定大小。如先前所描述的,然后码本大小确定模块1902可以诸如通过使用等式(16)-(25)来使用相关联的互信息以确定每个子码本要生成的奇偶校验比特的大小和/或数量。
在块2308处,码本大小确定模块1902可以将在框2306处确定的大小信息提供给码本确定模块1908。作为响应,在框2310处,码本确定模块1908可以确定对于存储器区域的存储子单元的子码本。在一些示例方法中,码本确定模块1908可以通过根据大小信息生成子码本来确定子码本。在其它示例方法中,码本确定模块1908可以通过使用从码本大小确定模块1902接收的大小信息从码本库1916中选择子码本来确定子码本。
在框2312处,码本确定模块1908可以将子码本加载到码本数据库508中。在一些示例方法中,码本确定模块1908可以不将确定的子码本加载到码本数据库508中,直到码本确定模块1908已经确定用于所有存储器区域的子码本以后。在框2314处,存储器区域标识模块1904可以确定是否存在要针对其确定子码本的另一存储器区域。如果存在,则该方法可以返回到框2302,其中下一个存储器区域被标识。如果不存在,则该方法可以结束。
在其它示例实施例中,存储器系统100可以利用码本修改和大小修改的组合来确定针对给定存储器区域的码本。例如,码本确定模块1908可以基于从码本大小确定模块1902接收到的大小信息来确定对存储在存储页中的码字进行编码和解码的码本集合,或者确定对存储在存储单元中的子码字进行编码和解码的子码本集合。此后,如参考图15-图17B所述,码本修改模块1502可以执行码本修改过程以诸如基于连接到校验节点的坏变量的数量和/或参与最小循环的变量的数量来修改集合中的一个或多个码本或子码本。在其它示例实施例中,码本大小确定模块1902和码本确定模块1908可以被配置为分析跨给定存储页的坏存储位置,以确定给定存储页的码本的集合,以及还分析跨给定存储页的个体数据单元的坏存储位置,以确定集合中的码本中的每一个内的子码本或子矩阵。
在其它示例实施例中,不是基于解码度量从库中评估多个码本(如参考图8-10所描述的)、使用评分算法(如参考图11-14所描述的)、修改一个或多个码本和/或子码本(如参考图15-18所描述的)、或者基于码本大小信息来确定码本和/或子码本的集合(如参考图19-23所描述的),而是存储器系统100可以利用关于存储器区域的坏存储位置的信息来在编码之后但是在码字被存储在存储器区域中之前,通过使用坏存储位置信息修改码字的比特序列来改善解码性能。
图24示出了可以涉及基于存储器区域的坏存储位置信息的码字修改的控制器102的示例实施例的组件的框图。对于一些示例配置,除了RAM 116以外的组件可以是ECC引擎124的组件,虽然在其它示例配置中,这些组件中的一些或全部可以被认为是与ECC引擎124分开的组件。除了RAM 116之外,涉及码字修改过程的组件可以包括奇偶校验比特生成器模块2402、码字修改模块2404、坏存储数据库2406和解码器模块2408。
如先前参考图5所描述的,当主机想要数据存储在存储器裸芯104中时,数据可以作为未编码的信息比特首先存储在RAM 116中。奇偶校验比特生成器模块2402可以为未编码的信息比特生成奇偶校验比特,并且与奇偶校验比特组合的信息比特可以形成原始码字,其可以被存储在RAM 116中。在码字被形成之后,码字修改模块2404可以被配置为访问RAM 116并且改变原始码字的比特顺序或比特序列以便生成修改的码字。该修改可以基于要在其中存储码字的存储器区域的坏存储位置信息。为了修改原始码字,码字修改模块2404可以被配置为诸如通过访问坏存储数据库2406来标识坏存储位置信息。下面更详细地描述编码器-侧码字修改模块2404如何基于坏存储位置信息来修改原始码字的进一步的细节。
在码字修改模块2404生成修改的码字后,修改的码字可以经由序列器模块126和存储器接口130被发送到存储器裸芯104,其中修改的码字被编程到存储器区域中。当诸如响应于主机读取请求从存储器区域读取修改的码字时,修改的码字可以被传送到RAM 116中。然后码字修改模块2404可以被配置为不修改或反向修改修改的码字,使得码字处于在修改之前的原始形式。此后,解码器模块2408可以对原始码字进行解码,并且解码的信息比特可以被存储在RAM 116中以传送给主机以完成读取请求。
通常,码字修改模块2404可以被配置为通过改变比特序列的顺序来修改码字,这转而影响码字的哪些比特被存储在要存储码字的存储单元的哪些存储器单元中。码字修改模块2404可以使用坏存储位置信息来确定要改变哪些比特。
在码字修改的一个示例配置中,码字修改模块2404可以基于连接到校验节点的坏变量的数量来修改码字的比特序列。如先前参考图15、图16A和图16B所描述的,码本修改模块1502可以标识哪些变量节点是坏变量节点,并且基于标识连接到相对高数量的坏变量节点的候选校验节点来修改码本。在参考图16A和图16B描述的示例中,码本修改模块1502将第二校验节点c(2)标识为候选校验节点,因为它连接到三个坏变量节点v(2)、v(7)和v(12)。如所描述的,如图16B所示,码本修改模块1502可以修改码本的一种方式是通过将连接到第二变量v(2)的一个边从连接到第二校验节点c(2)改变为连接到第一校验节点c(1),并且还将连接到第五变量v(5)的另一个边从连接到第一校验节点c(1)改变为连接到第二校验节点c(2)。
码字修改模块2404可以被配置为以与码本修改模块1502标识候选校验节点相同的方式来标识候选校验节点。然而,而不是通过改变边来修改码本,码字可以使用现有的码本来生成,并且在码字被生成之后,码字修改模块2404可以将与第二变量节点v(2)相关联的第二比特和与第五变量节点v(5)相关联的第五比特交换。有效地交换第二比特和第五比特使得第五变量节点v(5)成为坏变量节点,而第二变量节点v(2)成为好变量节点,转而有效地减少了连接到第二校验节点c(2)的坏变量节点的数量。因此,通过具有连接到太多坏变量节点的校验节点而解码性能被降低的问题可以通过执行比特交换而不是码本修改来减轻。
在码字修改的另一示例配置中,码字修改模块2404可以基于参与最小循环的坏变量的数量来修改码字的比特序列。如先前参考图15、图17A和图17B所描述的,码本修改模块1502可以标识哪些变量节点是坏变量节点,并且基于标识具有参与候选最小循环的相对大数量的坏变量节点的候选最小循环来修改码本。在参考图17A和17B描述的示例中,码本修改模块1502标识包括坏的变量节点v(1)和v(3)的最小循环。码本修改模块1502通过破坏候选最小循环来修改码本。特别地,如之前参考图17B所描述的,码本修改模块1502将连接到第一变量节点v(1)的边从连接到第一校验节点c(1)改变为连接到第三校验节点c(3),将连接到第三变量节点v(3)的边从连接到第一校验节点c(1)改变为连接到第四校验节点c(4),将连接到第四变量节点v(4)的边从连接到第四校验节点c(4)改变为连接到第一校验节点c(1),将连接到第九变量节点v(9)的边从连接到第三校验节点c(3)改变为连接到第一校验节点c(1)。
码字修改模块2404可以被配置为以与码本修改模块1502标识候选最小循环和参与候选最小循环的坏变量节点相同的方式来标识候选最小循环和参与候选最小循环的坏变量节点。然而,而不是通过改变边来修改码本,码字可以使用现有的码本来生成,并且在码字被生成之后,码字修改模块2404可以将与第一和第三变量节点v(1)、v(3)相关联的第一比特和第三比特和与第四和第九变量节点v(4)、v(9)相关联的第四和第九比特交换。将第一比特和第三比特与第四和第九比特交换有效地使得第四和第九变量节点v(4)、v(9)成为坏变量节点以及第一和第三变量节点v(1)、v(3)成为好变量节点。交换的结果可以有效地减少参与最小循环的坏变量节点的比例。因此,通过具有参与最小循环的太多坏变量节点而解码性能被降低的问题可以通过执行比特交换而不是码本修改来减轻。
在码字修改的另一示例配置中,码字修改模块2404可以基于坏存储位置在存储单元上的分布来修改码字的比特序列。如之前参考图20A-20C所描述的,可以使用一个或多个子码本来生成子码字。然而,而不是参考图20A-20C和图21所描述的确定子码本的大小并根据大小来确定子码本,码字修改模块2404可以被配置为跨子码字交换比特,使得相同数量的坏比特或尽可能接近相同数量的坏比特将被包括在由ECC引擎124解码的每个读取子码字中。
为了示出,假设码字包括四个子码字,包括要存储在存储单元的第一存储子单元中的第一子码字,要存储在存储单元的第二存储子单元中的第二子码字,要存储在存储单元的第三存储子单元中的第三子码字,以及要存储在存储单元的第四存储子单元中的第四子码字。此外,假设每个子码字具有相同的大小。此外,假设坏存储数据库2406指示第一存储子单元包括一个坏存储器单元,第二存储子单元包括五个坏存储器单元,第三存储子单元包括三个坏存储器单元,并且第四存储子单元包括三个坏存储器单元。在生成四个子码字之后,码字修改模块2404可以被配置成修改码字的比特顺序,使得来自第一子码字的两个好比特(即,要被存储在好存储器单元中的比特)与来自第二子码字的两个坏比特(即,要被存储在坏存储器单元中的比特)交换,这有效地将两个好比特变成坏比特,并且将两个坏比特变成好比特。结果,修改的码字的每个子码字包括三个坏比特。随后,当从存储器裸芯104读取修改的码字时,重新交换比特对,使得码字处于其原始比特序列中。但是当解码器模块2408解码子码字时,解码器模块2408解码的每个子码字中仍将有三个坏比特。在对码字进行编程之前在子码字之间交换比特以使得每个读取子码字中的坏比特数量相同,相比于其中一些子码字具有比其它更大量的坏比特的情况,可以提高解码器模块2408的解码性能(例如,校正能力)。
虽然码字修改模块2404参考图24被描述为控制器102的组件,但是在其它示例配置中,码字修改模块2404可以位于存储器裸芯上。对于这些其它示例配置,处于其原始形式的码字可以经由序列器模块126和存储器接口130被发送到存储器裸芯104。一旦码字被发送到裸芯,码字修改模块2204可以修改码字,并且将修改的码字编程到存储器区域中。此外,当读取请求被发出以读取码字时,修改的码字可以在被芯片外发送到控制器102之前被码字修改模块2404重新配置为其原始形式。其它配置可以是可能的。例如,可以在存储器裸芯104上执行码字修改,但是然后可以在控制器102中执行将修改的码字重新配置为其原始形式,反之亦然。各种配置可以是可能的。
图25是基于坏存储位置信息执行码字修改的示例方法2500的流程图。在框2502处,奇偶校验比特生成器模块2402可以使用码本来生成用于信息比特序列的奇偶校验比特以形成码字。在框2504处,码字修改模块2404可以基于其中要存储码字的存储器区域的坏存储位置信息来修改或重新排序码字的比特序列。例如,如先前所描述的,码字修改模块2404可以基于连接到用来生成奇偶校验比特的码本的校验节点的坏变量的数量、基于参与用来生成奇偶校验比特的码本的最小循环的坏变量的数量、或者基于跨存储子单元的坏存储位置的数量或分布来交换比特。
在一些示例方法中,作为编码过程的一部分,码字修改模块2404可以被配置为诸如通过访问坏存储数据库2406来飞速地标识坏存储位置信息。在其它示例方法中,码字修改模块2404可以提前标识坏存储位置和/或预先配置有包括指示对于给定存储器区域交换哪些比特的信息的比特顺序修改配置。例如,在编程操作期间,码字修改模块2404可以被配置为标识码字要被存储于其中的存储器区域。基于标识存储器区域,码字修改模块可以知道交换哪些比特而不必访问坏存储数据库2406。在一些示例配置中,预配置可以在存储器系统100的制造阶段期间发生,在此期间可以标识存储器裸芯104的存储器区域中的每一个的坏存储位置。转而,对于要用来执行编码和解码的一个或多个特定码本,可针对存储器区域中的每一个标识比特交换方案(或比特顺序修改配置)。码字修改模块2404可以被配置有比特交换方案。然后,在正常操作期间,码字修改模块2404可以被配置为基于比特交换方案来标识要交换哪些比特。
在框2506处,可以将修改的码字存储在存储器区域中。在框2508处,诸如响应于主机读取请求,可以从存储器区域读取修改的码字。在框2510处,码字修改模块2404可以将修改的码字重新排序为处于其原始比特序列中。在框2512处,解码器模块2408可以对重新排序的码字进行解码。
最后,如上面所记述的,能够使用任何适合类型的存储器。半导体存储器设备包括易失性存储器设备(诸如动态随机存取存储器(dynamic random access memory,“DRAM”)或静态随机存取存储器(static random access memory,“SRAM”)设备)、非易失性存储器设备(诸如电阻随机存取存储器(resistive random access memory,“ReRAM”)、电可擦除可编程只读存储器(electrically erasable programmable read only memory,“EEPROM”)、闪速存储器(也能够被认为是EEPROM的子集)、铁电随机存取存储器(ferroelectric random access memory,“FRAM”)和磁阻随机存取存储器(magnetoresistive random access memory,“MRAM”))以及其它能够存储信息的半导体元件。每种类型的存储器设备可以具有不同的配置。例如,闪速存储器设备可以被配置为NAND或NOR配置。
存储器设备能够由无源和/或有源元件以任何组合形成。通过非限制性示例,无源半导体存储器元件包括ReRAM设备元件,其在一些实施例中包括诸如反熔丝、相变材料等的电阻率开关存储元件,以及可选地诸如二极管等的转向元件。另外,通过非限制性示例,有源半导体存储器元件包括EEPROM和闪速存储器设备元件,其在一些实施例中包括包含电荷存储区域的元件,诸如浮置栅极、导电纳米颗粒或电荷存储介电材料。
多个存储器元件可以被配置为使得它们被串联连接或者使得每个元件可被单独地访问。通过非限制性示例,处于NAND配置的闪速存储器设备(NAND存储器)典型地包含串联连接的存储器元件。NAND存储器阵列可以被配置为使得阵列由多个存储器串组成,其中串由共享单一位线并作为组被访问的多个存储器元件组成。可替换地,存储器元件可以被配置为使得每个元件可以被单独地访问,例如NOR存储器阵列。NAND和NOR存储器配置是示例性的,并且存储器元件可以以其它方式被配置。
位于衬底内和/或衬底上的半导体存储器元件可以被布置成二维或三维,诸如二维存储器结构或三维存储器结构。
在二维存储器结构中,半导体存储器元件被布置在单一平面或单一存储器设备级中。典型地,在二维存储器结构中,存储器元件被布置在基本上平行于支撑存储器元件的衬底的主表面延伸的平面中(例如,x-z方向平面中)。衬底可以是在其上或其中形成存储器元件的层的晶圆,或者它可以是存储器元件形成之后附着到其的载体衬底。作为非限制性实例,衬底可以包括诸如硅的半导体。
存储器元件可以以有序阵列(诸如多个行和/或列)布置在单一存储器设备级中。然而,存储器元件可以以非正规或非正交配置排列。存储器元件可以每个具有两个或更多个电极或接触线,诸如位线和字线。
三维存储器阵列被布置成使得存储器元件占据多个平面或多个存储器设备级,从而形成三维结构(即,在x,y和z方向上,其中y方向基本垂直于衬底的主表面,并且x和z方向基本平行于衬底的主表面)。
作为非限制性示例,三维存储器结构可以垂直地被布置为多个二维存储器设备级的堆叠。作为另一非限制性示例,三维存储器阵列可以被布置为多个垂直列(例如,基本上垂直于衬底的主表面、即在y方向上延伸的列),其中每个列具有在每个列中的多个存储器元件。列可以以二维配置布置(例如在x-z平面中),造成具有多个垂直堆叠的存储器平面上的元件的存储元件的三维布置。其它三维的存储器元件的配置也能够构成三维存储器阵列。
通过非限制性的示例,在三维NAND存储器阵列中,存储器元件可以被耦合在一起以形成单一水平(例如x-z)存储器设备级内的NAND串。可替换地,存储器元件可以被耦合在一起以形成穿过多个水平存储器器设备级的垂直NAND串。能够预想其它三维配置,其中一些NAND串包含在单一存储器级中的存储器元件,而其它串包含跨多个存储器级的存储器元件。也可以以NOR配置和ReRAM配置来设计三维存储器阵列。
典型地,在单片三维存储器阵列中,在单一衬底上方形成一个或多个存储器设备级。可选地,单片三维存储器阵列还可以具有至少部分地在单一衬底内的一个或多个存储器层。作为非限制性示例,衬底可以包括诸如硅的半导体。在单片三维阵列中,构成阵列的每个存储器设备级的层典型地形成在阵列的底层存储器设备级的层上。然而,单片三维存储器阵列的相邻存储器设备级的层可以被共享或者在存储器设备级之间具有中间层。
然后,可以分开形成二维阵列,然后将其封装在一起以形成具有多层存储器的非单片存储器设备。例如,能够通过在单独的衬底上形成存储器级并且然后将存储器级堆叠在彼此顶部来构建非单片堆叠存储器。衬底可以在堆叠之前减薄或从存储器设备级移除,但是当存储器设备级最初形成在分开的衬底上时,所得到的存储器阵列不是单片三维存储器阵列。另外,多个二维存储器阵列或三维存储器阵列(单片或非单片)可以形成在分开的芯片上,然后被封装在一起以形成堆叠芯片的存储器设备。
存储器元件的操作和与存储器元件的通信典型地需要相关电路。作为非限制性示例,存储器设备可以具有用于控制和驱动存储器元件以完成诸如编程和读取的功能的电路。该相关电路可以在与存储器元件相同的衬底上和/或在单独的衬底上。例如,用于存储器读取-写入操作的控制器可以位于单独的控制器芯片上和/或位于与存储器元件相同的衬底上。
意图是将上述详细描述理解为本发明能够采取的选择的形式的例示,而不是本发明的定义。仅仅是所附的权利要求书,包括意图限定要求保护的发明的范围的所有等同物。最后,应当注意,本文所述的任何优选实施例的任何方面能够被单独使用或彼此组合使用。

Claims (11)

1.一种比特顺序修改方法,包括:
利用至少一个控制器,使用码本对多个信息比特进行编码以生成原始码字,其中所述多个信息比特要被编程到存储设备的存储器的存储器区域中,所述存储器区域具有相关联的坏存储位置的集合;
利用所述至少一个控制器,通过将原始码字的坏比特与原始码字的好比特切换来修改原始码字以生成修改的码字;以及
利用所述至少一个控制器将所述修改的码字编程到存储器区域中,
其中所述原始码字的坏比特对应于参与所述码本的最小循环的变量节点。
2.根据权利要求1所述的比特顺序修改方法,其中,所述最小循环是具有最多参与的坏变量节点的预定数量的最小循环中的一个。
3.根据权利要求1所述的比特顺序修改方法,其中,所述最小循坏是具有循环长度与参与的坏变量节点的数量之间的最小差或者参与的坏变量节点的数量与循环长度的最大比率的预定数量的最小循环中的一个。
4.根据权利要求1所述的比特顺序修改方法,其中,所述最小循坏是具有参与的坏变量节点的数量和参与的变量节点的总数量之间的最小差或者参与的坏变量节点的数量与参与的变量节点的总数量的最大比率的预定数量的最小循环中的一个。
5.根据权利要求1所述的比特顺序修改方法,其中修改所述原始码字包括跨原始码字的子码字部分切换好比特和坏比特,以生成修改的码字,其中,响应于好比特和坏比特的切换,修改的码字包括跨修改的码字的子码字部分的坏比特的均衡分布。
6.根据权利要求1所述的比特顺序修改方法,其中所述多个不同的存储器区域包括存储器的不同裸芯、不同平面、不同块、不同页、或不同片段。
7.一种比特重新排序配置方法,包括:
利用至少一个控制器标识存储设备的存储器的多个不同的存储器区域中的存储器区域的坏存储位置信息;
利用所述至少一个控制器标识存储设备被配置为使用以对多个信息比特进行编码来生成原始码字的码本;
利用所述至少一个控制器,基于所述存储器区域的坏存储位置信息和所述码本,生成比特顺序修改配置;
用所述比特顺序修改配置来配置存储设备的比特顺序修改模块,其中,所述比特顺序修改模块在被配置有所述比特顺序修改配置时,被配置为根据所述比特顺序修改配置来修改所述原始码字以生成要存储在所述存储器区域中的修改的码字;以及
利用所述至少一个控制器,基于参与所述码本的最小循环的坏变量节点的数量来标识所述码本的坏变量节点。
8.根据权利要求7所述的比特重新排序配置方法,还包括:
利用所述至少一个控制器,标识所述原始码字的坏比特以与所述原始码字的好比特切换,其中所述坏比特对应于所述坏变量节点。
9.根据权利要求8所述的比特重新排序配置方法,还包括:
利用所述至少一个控制器,标识其中所述坏变量节点正参与的最小循环,所述标识是基于与以下中的至少一个相关联的标准:参与所述最小循环的坏变量节点的数量、所述最小循环的长度、或者参与所述最小循环的变量节点的总数量。
10.如权利要求7所述的比特重新排序配置方法,其中生成比特顺序修改配置包括跨所述原始码字的子码字部分标识坏比特以与好比特切换,其中坏比特与好比特切换的结果提供了跨子码字部分的坏比特的均衡分布。
11.根据权利要求7所述的比特重新排序配置方法,其中所述多个不同的存储器区域包括所述存储器的不同裸芯、不同平面、不同块、不同页、或不同片段。
CN201810164225.9A 2017-03-31 2018-02-27 对于存储设备的不同存储器区域的比特顺序修改 Expired - Fee Related CN108694098B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/475,666 US10236909B2 (en) 2017-03-31 2017-03-31 Bit-order modification for different memory areas of a storage device
US15/475,666 2017-03-31

Publications (2)

Publication Number Publication Date
CN108694098A CN108694098A (zh) 2018-10-23
CN108694098B true CN108694098B (zh) 2020-08-11

Family

ID=63672637

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810164225.9A Expired - Fee Related CN108694098B (zh) 2017-03-31 2018-02-27 对于存储设备的不同存储器区域的比特顺序修改

Country Status (2)

Country Link
US (1) US10236909B2 (zh)
CN (1) CN108694098B (zh)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10230395B2 (en) * 2017-03-31 2019-03-12 Sandisk Technologies Llc Determining codebooks for different memory areas of a storage device
US10355712B2 (en) * 2017-03-31 2019-07-16 Sandisk Technologies Llc Use of multiple codebooks for programming data in different memory areas of a storage device
US10236909B2 (en) * 2017-03-31 2019-03-19 Sandisk Technologies Llc Bit-order modification for different memory areas of a storage device
US10679718B2 (en) * 2017-10-04 2020-06-09 Western Digital Technologies, Inc. Error reducing matrix generation
US10446200B2 (en) * 2018-03-19 2019-10-15 Micron Technology, Inc. Memory device with configurable input/output interface
US11080137B2 (en) * 2019-05-09 2021-08-03 Rambus Inc. Error coalescing
JP2022147380A (ja) * 2021-03-23 2022-10-06 キオクシア株式会社 メモリコントローラおよびメモリシステム
WO2023034356A1 (en) * 2021-08-31 2023-03-09 Micron Technology, Inc. Configurable data protection circuitry for memory devices
US11687409B1 (en) * 2021-12-28 2023-06-27 Western Digital Technologies, Inc. Data storage device and method for data protection using XOR parity
TWI798017B (zh) * 2022-03-09 2023-04-01 群聯電子股份有限公司 編碼控制方法、記憶體儲存裝置及記憶體控制電路單元
US11935609B2 (en) 2022-05-12 2024-03-19 Western Digital Technologies, Inc. Linked XOR flash data protection scheme

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5966471A (en) * 1997-12-23 1999-10-12 United States Of America Method of codebook generation for an amplitude-adaptive vector quantization system
JP3323175B2 (ja) * 1999-04-20 2002-09-09 松下電器産業株式会社 符号化装置
US7562021B2 (en) * 2005-07-15 2009-07-14 Microsoft Corporation Modification of codewords in dictionary used for efficient coding of digital media spectral data
US8515767B2 (en) * 2007-11-04 2013-08-20 Qualcomm Incorporated Technique for encoding/decoding of codebook indices for quantized MDCT spectrum in scalable speech and audio codecs
WO2009140700A1 (en) * 2008-05-16 2009-11-19 Fusion Multisystems, Inc. Apparatus, system, and method for detecting and replacing failed data storage
CN101339808B (zh) * 2008-07-28 2011-02-09 华中科技大学 存储块的擦除方法及装置
US8671327B2 (en) 2008-09-28 2014-03-11 Sandisk Technologies Inc. Method and system for adaptive coding in flash memories
US8331168B2 (en) * 2009-04-30 2012-12-11 International Business Machines Corporation Increased capacity heterogeneous storage elements
US8677225B1 (en) * 2011-02-11 2014-03-18 Marvell International Ltd. Low-density parity-check decoder
US9003224B2 (en) 2012-04-25 2015-04-07 Western Digital Technologies, Inc. Managing unreliable memory in data storage systems
JP6443794B2 (ja) * 2013-08-16 2018-12-26 エルエスアイ コーポレーション ホストとコントローラとの間でパーティション化された変換レイヤ
CN104360957A (zh) * 2014-11-26 2015-02-18 上海爱信诺航芯电子科技有限公司 一种维持闪存损耗均衡的方法
KR102254102B1 (ko) * 2015-01-23 2021-05-20 삼성전자주식회사 메모리 시스템 및 메모리 시스템의 동작 방법
US9720612B2 (en) 2015-04-30 2017-08-01 Sandisk Technologies Llc Biasing schemes for storage of bits in unreliable storage locations
JP6346123B2 (ja) * 2015-05-25 2018-06-20 東芝メモリ株式会社 コントローラ、制御方法
US10572189B2 (en) * 2016-11-04 2020-02-25 Sandisk Technologies Llc Method and decoder to adjust an error locator polynomial based on an error parity
US9787329B2 (en) * 2015-10-15 2017-10-10 Apple Inc. Efficient coding with single-error correction and double-error detection capabilities
US10256842B2 (en) * 2016-03-03 2019-04-09 Intel Corporation Technologies for correcting flipped bits for an error correction decode process
US10725860B2 (en) * 2016-03-04 2020-07-28 Sandisk Technologies Llc Storage system and method for handling a burst of errors
US10432232B2 (en) * 2016-03-04 2019-10-01 Sandisk Technologies Llc Multi-type parity bit generation for encoding and decoding
US10554227B2 (en) * 2017-03-10 2020-02-04 Western Digital Technologies, Inc. Decoding optimization for channel mismatch
US10355712B2 (en) * 2017-03-31 2019-07-16 Sandisk Technologies Llc Use of multiple codebooks for programming data in different memory areas of a storage device
US10236909B2 (en) * 2017-03-31 2019-03-19 Sandisk Technologies Llc Bit-order modification for different memory areas of a storage device

Also Published As

Publication number Publication date
US20180287632A1 (en) 2018-10-04
CN108694098A (zh) 2018-10-23
US10236909B2 (en) 2019-03-19

Similar Documents

Publication Publication Date Title
CN108694098B (zh) 对于存储设备的不同存储器区域的比特顺序修改
CN108694097B (zh) 存储设备的不同存储器区域中编程数据的多码本的使用方法及装置
US10725860B2 (en) Storage system and method for handling a burst of errors
US10432232B2 (en) Multi-type parity bit generation for encoding and decoding
CN108694099B (zh) 确定用于储存器设备的不同的存储器区域的码本的方法和系统
US10090044B2 (en) System and method for burst programming directly to MLC memory
US10938421B2 (en) Decoding optimization for channel mismatch
US9450610B1 (en) High quality log likelihood ratios determined using two-index look-up table
US20200257598A1 (en) Recovery of data failing due to impairment whose severity depends on bit-significance value
US10403377B2 (en) Non-volatile storage with adaptive redundancy
CN106663046B (zh) 用于刷新存储器设备中的数据的系统和方法
US9454414B2 (en) System and method for accumulating soft information in LDPC decoding
KR102233074B1 (ko) 저장 장치 및 그것의 신뢰성 검증 방법
US9590656B2 (en) System and method for higher quality log likelihood ratios in LDPC decoding
US10116333B2 (en) Decoder with parallel decoding paths
US10452471B2 (en) Non-volatile memory with dynamic write abort detection and recovery
US9792175B2 (en) Bad column management in nonvolatile memory
US10223199B2 (en) Non-volatile memory configured to return error reduced read data
TWI646419B (zh) 包括錯誤校正碼組織之裝置及方法
US10389389B2 (en) Method and data storage device using convolutional low-density parity-check coding with a long page write and a short page read granularity
WO2017196423A1 (en) Using non-volatile memory bad blocks
CN109726142B (zh) 回收坏块的非易失性存储系统
US11630722B2 (en) Method and system for decoding data based on association of first memory location and second memory location
CN110569143A (zh) 用于存储器系统的解码器及其方法
CN112562772B (zh) 自适应低密度奇偶校验硬解码器

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20200811