Nonvolatile memory controller with concatenated error correction codes

A nonvolatile memory controller may recover encoded data using the outer error correction code of the encoded data if it is determined that a correction capacity of the outer error correction code is not exceeded. Alternatively, the nonvolatile memory controller may recover the encoded data using the inner error correction code of the encoded data followed by the outer error correction code of the encoded data if it is determined that the correction capacity of the outer error correction code is exceeded. Additionally, if it is determined that the correction capacity of the outer error correction code is exceed after recovering the data using the inner error correction code, the nonvolatile memory storage module may perform a redundant array of independent disks (RAID) operation to recover the data.

BACKGROUND

A solid state drive (SSD) is a data storage device that utilizes solid-state memory to retain data in nonvolatile memory chips. NAND-based flash memories are widely used as the solid-state memory storage in SSDs due to their compactness, low power consumption, low cost, high data throughput and reliability. SSDs commonly employ several NAND-based flash memory chips and a flash controller to manage the flash memory and to transfer data between the flash memory and a host computer.

While NAND-based flash memories are reliable, they are not inherently error-free and often rely on error correction coding (ECC) to correct raw bit errors in the stored data. Various mechanisms may lead to bit errors in flash memories, including noise at the power rails, voltage threshold disturbances during the reading and/or writing of neighboring cells, retention loss due to leakage within in the cells and tunneling. Error correction codes (ECC) are commonly employed in flash memories to recover stored data that is affected by such error mechanisms. In operation, ECC supplements the user data with parity bits which store enough extra information for the data to be reconstructed if one or more of the data bits are corrupted. Generally, the number of data bit errors detectable and correctable in the data increases with an increasing number of error bits in the ECC. In many memory devices, data is stored in a memory location of the memory device along with the ECC for the data. In this way, the data and the ECC may be written to the memory location in a single write memory operation and read from the memory location in a single read memory operation. ECC is typically implemented in the flash memory controller.

NAND flash memories are based on floating gate storage. In floating gate storage technologies, two logic states are achieved by altering the number of electrons within the floating gate. The difference between the two logic states (1 and 0) is on the order of few electrons and is decreasing as the floating gate storage technology advances. The decreasing number of electrons responsible for the difference between the two logic states results in an increased probability of errors in the flash memory cell requiring more error correction. The fraction of data bits that are known to be corrupted, and therefore contain incorrect data, before applying the ECC is referred to as the raw bit error rate (RBER). As a result of the advances in the floating gate storage technology, the RBER for a flash page of memory cells is increasing and at technologies with feature sizes in the 1× range (below 20 nm) is nearing the Shannon Limit of the communication channel. The increased probability of errors in the stored data results in an increase in the error code correction necessary to correct the bit errors in the flash memory.

The error rate observed after application of the ECC is referred to as the uncorrectable bit error rate (UBER). The acceptable UBER is often dependent upon the application in which the SSD is employed. In the case of price sensitive, consumer applications, which experience a relatively low number of memory accesses during the SSD product lifetime, the SSD may tolerate a higher UBER as compared to a high-end application experiencing a relatively high number of memory accesses, such as an Enterprise application.

One type of error correction coding often employed in a flash storage controller is a Bose-Chaudhuri-Hochquenghem (BCH) error correction. Typically, a target UBER for an SSD ranges between 10−15and 10−16, and the BCH error correction capability is chosen based upon this target UBER. However, due to the increased RBER of the NAND-based flash memory technology, the BCH error correction currently employed in the art for the recovery of data errors in a NAND-based flash memory is impractical to meet the target UBER.

Another type of error correction coding that may be employed in a flash storage controller is a low-density parity-check (LDPC) error correction coding. An LDPC code is a linear error correcting code having a parity check matrix with a small number of nonzero elements in each row and column. LDPC codes are capacity-approaching codes that allow the noise threshold to be set very close to the Shannon limit for a symmetric, memory-less channel. The noise threshold defines an upper bound for the channel noise, up to which the probability of lost information can be made as small as desired. LDPC error correction is superior to BCH error correction, with LDPC codes being capable of producing a UBER that is very near the Shannon limit with a lower code rate than is required using BCH error correction. However, LDPC codes may exhibit an error floor that limits the performance of the LDPC error correction. While it is known that the UBER steadily decreases as the signal-to-noise ratio condition of the channel improves, for LDPC codes there exists a point after which the rate of decrease in the UBER flattens. This region is commonly referred to as the error floor region for LDPC error correction. To guarantee a target UBER of between 10−15and 10−16with LDPC error correction, it is necessary to know the value of the error floor. The error floor for LDPC cannot be mathematically determined and simulation is necessary to identify the value of the error floor. However, with modern technology, it is not possible to simulate up to 10−16to identify the value of the error floor, and as such, a target UBER of 10−16cannot be guaranteed with LDPC error correction.

Accordingly, what is needed in the art is an improved flash controller that is capable of meeting the target UBER for a nonvolatile memory storage system in the presence of an error correction code error floor.

SUMMARY

In various embodiments, a nonvolatile memory system includes a nonvolatile memory storage module for storing encoded data and a nonvolatile memory controller. The encoded data stored in the nonvolatile memory storage module is encoded using an outer error correction code concatenated with an inner error correction code. The nonvolatile memory controller receives the encoded data stored in the nonvolatile memory storage module and attempts to decode and recover the data. The nonvolatile memory controller may recover the encoded data using the outer error correction code of the encoded data if it is determined that a correction capacity of the outer error correction code is not exceeded. Alternatively, the nonvolatile memory controller may recover the encoded data using the inner error correction code of the encoded data followed by the outer error correction code of the encoded data if it is determined that the correction capacity of the outer error correction code is exceeded. Additionally, if it is determined that the correction capacity of the outer error correction code is exceed after recovering the data using the inner error correction code and the outer error correction code, the nonvolatile memory storage module may perform a redundant array of independent disks (RAID) operation to recover the data.

More specifically, the nonvolatile memory controller may include an error detection and correction module for recovering the data received from the nonvolatile memory storage module. The error detection and correction module may include an outer error correction code decoder for recovering the data using the outer error correction code and an error detection module coupled to the outer error correction code decoder, wherein the error detection module may be used to determine if the correction capacity of the outer error correction code is exceeded during the recovery of the data. The error detection and correction module may further include an inner error correction code decoder coupled to the outer error correction code decoder. If the error detection module determines that the correction capacity of the outer error correction code is exceeded during the recovery of the data, the inner error correction code decoder may be operated to recover the data using the inner error correction code and the outer error correction code decoder may be subsequently used to recover the data using the outer error correction. The nonvolatile memory controller may further include a redundant array of independent disks (RAID) control module coupled to the error detection and correction module. The RAID control module may perform a RAID operation to recover the data if the error detection module determines that the correction capacity of the outer error correction codes is exceeded after recovering the data using the inner error correction code followed by the outer error correction code.

In a particular embodiment, the outer error correction code may be a Bose-Chaudhuri-Hocquenghem (BCH) code.

In an additional embodiment, the inner error correction code may be a low-density parity-check (LDPC) code and in a specific embodiment, the inner error correction code may be a quasi-cyclic low-density parity-check (LDPC) code.

The nonvolatile memory storage module may be a NAND flash memory module and the nonvolatile memory system may be a solid state drive (SSD).

The system in accordance with the present invention allows a target uncorrectable bit error rate (UBER) to be reached for a nonvolatile memory storage system in which the data exhibits a high raw bit error rate (RBER) and in the presence of an inner error correction code error floor.

A method for recovering data stored in a nonvolatile memory storage module includes, receiving encoded data from the nonvolatile memory storage module at a nonvolatile memory controller. The encoded data may include an outer error correction code concatenated with an inner error correction code. The method further includes recovering the data using the outer error correction code if a correction capacity of the outer error correction code is not exceeded. However, if the correction capacity of the outer error correction code is exceed, the method may include recovering the data using the inner error correction code followed by the outer error correction code. Additionally, if the correction capacity of the outer error correction code is exceeded after recovering the data using the inner error correction code followed by the outer error correction code, the data may be recovered by performing a redundant array of independent disks (RAID) operation.

In receiving the encoded data from the nonvolatile memory storage module, the nonvolatile memory controller may read the data and the outer error correction code encoding the data from a first flash page and may read the inner error correction code from a second flash page.

Recovering the data using the outer error correction code if a correction capacity of the outer error correction code is not exceeded may further include, decoding the encoded data using the outer error correction code, determining if decoding using the outer error correction code results in one or more decoding errors, determining if the one or more decoding errors exceeds the correction capacity of the outer error correction code and correcting the one or more decoding errors using the outer error correction code if the correction capacity of the outer error correction code is not exceeded.

Recovering the data using the inner error correction code followed by the outer error correction code if the correction capacity of the outer error correction code is exceeded may further include, decoding the encoded data using the inner error correction code and correcting one or more decoding errors in the data, decoding the data corrected by the inner error correction code using the outer error correction code, determining if decoding the corrected data using the outer error correction code results in one or more decoding errors, determining if the one or more decoding errors as a result of decoding the data corrected by the inner error correction code using the outer error correction code exceeds the correction capacity of the outer error correction code and correcting the one or more decoding errors using the outer error correction code if the correction capacity of the outer error correction code is not exceeded.

Recovering the data by performing a redundant array of independent disks (RAID) operation if the correction capacity of the outer error correction code is exceeded after recovering the data using the inner error correction code followed by the outer error correction code may further include, decoding the encoded data using the inner error correction code and correcting one or more decoding errors in the data, decoding the data corrected by the inner error correction code using the outer error correction code, determining if decoding the corrected data using the outer error correction code results in one or more decoding errors, determining if the one or more decoding errors as a result of decoding the data corrected by the inner error correction code using the outer error correction code exceeds the correction capacity of the outer error correction code and performing a redundant array of independent disks (RAID) operation to recover the data if the correction capacity of the outer error correction code is exceeded.

With the present invention, if data recovery fails using the outer error correction code because too many errors exist in the data (high RBER) to reliably recover the data using the outer error correction code and to meet a target UBER, the inner error correction code in combination with the outer correction code may be used to improve the reliability of the nonvolatile memory system. While the inner error correction code may exhibit an error floor, the inner error correction code may be used to correct the data, thereby reducing the number of errors in the data before using the outer error correction code to correct the data. The outer correction code may then be used to meet the target UBER in the presence of the error floor of the inner error correction code.

The method of the present invention allows a target uncorrectable bit error rate (UBER) to be reached for a nonvolatile memory storage system in which the data exhibits a high raw bit error rate (RBER) and in the presence of an inner error correction code error floor.

DETAILED DESCRIPTION

In various embodiments, a nonvolatile memory system includes a nonvolatile memory storage module for storing encoded data and a nonvolatile memory controller. The encoded data stored in the nonvolatile memory storage module is encoded using an outer error correction code concatenated with an inner error correction code. The nonvolatile memory controller receives the encoded data stored in the nonvolatile memory storage module and attempts to decode and recover the data. The nonvolatile memory controller may recover the encoded data using the outer error correction code of the encoded data if it is determined that a correction capacity of the outer error correction code is not exceeded. Alternatively, the nonvolatile memory controller may recover the encoded data using the inner error correction code of the encoded data followed by the outer error correction code of the encoded data if it is determined that the correction capacity of the outer error correction code is exceeded. Additionally, if it is determined that the correction capacity of the outer error correction code is exceed after recovering the data using the inner error correction code and the outer error correction code, the nonvolatile memory storage module may perform a redundant array of independent disks (RAID) operation to recover the data.

FIG. 1illustrates a computing system100, in accordance with an embodiment of the present invention. The computing system100includes a host processor135and a nonvolatile memory system105coupled to the host processor135. The nonvolatile memory system105includes a nonvolatile memory controller110and a nonvolatile memory storage module115coupled to the nonvolatile memory controller110. The nonvolatile memory system105may be a solid stated drive (SSD).

The nonvolatile memory controller110may include a processing module120, an error correction and detection module125, an interface module150and a redundant array of independent disks (RAID) control module145. The processing module120may be coupled to the error correction and detection module125, the interface module150and the RAID control module145through a communication bus155, as is commonly know in the art. The error correction and detection module125may be coupled to the communication bus155and to the nonvolatile memory storage module through a plurality of corresponding data channels140. The RAID control module145may be coupled to the nonvolatile memory storage module through the corresponding data channels140and to the communication bus155.

The nonvolatile memory storage module115may include a plurality of nonvolatile memory storage chips130comprising a plurality of memory storage cells. The memory storage chips130may be organized in pages, each comprising a plurality of memory storage cells. In a particular embodiment, the nonvolatile memory storage module115may be based on NAND technology and may include 512 NAND memory storage chips130to provide a total storage capacity of 1 TBytes. A 32-data channel140configuration may be implemented to operate the 512 NAND memory storage chips130of the nonvolatile memory storage module115with the nonvolatile memory storage controller110using 16 independent channels.

In operation, the interface module150may receive one or more data write commands, and associated data, from the host processor135. The interface module150may then communicate the data write commands to the error detection and correction module125. The error detection and correction module125may encode the data prior to writing the data to the nonvolatile memory storage module. The data may be encoded using an outer error correction code concatenated with an inner error correction code.

After the data has been encoded and written to the nonvolatile memory storage module115, the interface module150may receive one or more data read commands from the host processor135. The interface module150may then communicate the data read commands to the processing module120to instruct the error detection and correction module125to read the encoded data from the nonvolatile memory storage module115over one of the communication channels140. The error detection and correction module125may then attempt to recover the data from the encoded data using the outer error correction code of the encoded data. If the data recovery is successful, the data may be recovered and the error detection and correction module125may communicate the data recovery to the processing module120. If the data recovery fails using the outer error correction code, the error correction and detection module125may attempt to recover the data from the encoded data by first using the inner error correction code and then using the outer error correction code. If the data recovery is successful using the inner error correction code followed by the outer error correction code, the data may be recovered and the error detection and correction module125may communicate the data recovery to the processing module120. If the data recovery fails when using the inner error correction followed by the outer error correction code, the error correction and detection module125may communicate the failure to the processing module120and the processing module120may instruct the RAID control module145to access the nonvolatile memory storage module115to recover the data from the encoded data stored in the nonvolatile memory storage module115.

In various embodiments, each of the processing module120, the error detection and correction module125, the interface module150, the RAID control module145and the nonvolatile memory storage module115may include one or more hardware components, one or more software components, or some combination thereof. Examples of hardware components include a combinational logic circuit, a sequential logic circuit, a microprocessor, an embedded processor, an embedded controller, or the like. Examples of software components include a computing program, computing instructions, a software routine, or the like.

In various embodiments, the nonvolatile memory system105is implemented in an integrated circuit of an integrated circuit device, which may include an integrated circuit package containing the integrated circuit. In some embodiments, the nonvolatile memory system105is implemented in a single integrated circuit die. In other embodiments, the nonvolatile memory system105is implemented in more than one integrated circuit die of an integrated circuit device which may include a multichip package containing the integrated circuit die.

In various embodiments, the nonvolatile memory controller110is implemented in an integrated circuit of an integrated circuit device, which may include an integrated circuit package containing the integrated circuit. In some embodiments, the nonvolatile memory controller110is implemented in a single integrated circuit die. In other embodiments, the nonvolatile memory controller110is implemented in more than one integrated circuit die of an integrated circuit device which may include a multichip package containing the integrated circuit die.

In various embodiments, the nonvolatile memory storage module115is implemented in an integrated circuit of an integrated circuit device, which may include an integrated circuit package containing the integrated circuit. In some embodiments, nonvolatile memory storage module115is implemented in a single integrated circuit die. In other embodiments, nonvolatile memory storage module115is implemented in more than one integrated circuit die of an integrated circuit device which may include a multichip package containing the integrated circuit die.

FIG. 2illustrates the error correction and detection module125, in accordance with an embodiment of the present invention. The processing module120, the RAID control module145and the interface module150may be coupled together though a communication bus155. The error detection and correction module125may be coupled to the processing module120, the RAID control module145and the interface module150through the communication bus155. The error detection and correction module125may be coupled to the nonvolatile memory storage module115through the communication bus140.

The error detection and correction module125may include an outer error correction code encoder200, an inner error correction code encoder205, an outer error correction code decoder215, an inner error correction code decoder210and an error detection module220. The terms “inner” and “outer” may reference the physical location and/or logical location of the encoders and decoders within the error detection and correction module relative to the nonvolatile memory storage module. The outer error correction code encoder200may be coupled to the processing module120, the interface module150through the communication bus155. The inner error correction code encoder205may be coupled to the outer error correction code encoder200and to the nonvolatile memory storage module115through the communication bus140. The inner error correction code decoder210may be coupled to the nonvolatile memory storage module115through the communication bus140. The outer error correction code decoder215may be coupled to the nonvolatile memory storage module115through the communication bus140, to the inner error correction code decoder210and to the error detection module220. In a particular embodiment, the outer error correction code decoder215may comprise the error detection module220. The outer error correction code decoder215may further be coupled to the processing module120and the interface module150through the communication channel155. The error detection module220may be coupled to the outer error correction code decoder215and to the processing module120, the RAID control module145and the interface module150through the communication channel150.

In operation, the interface module150may receive one or more data write commands, and associated data, from the host processor135. The interface module150may then communicate the data write commands to the error detection and correction module125and to the processing module120through the communication bus155. The outer error correction code encoder200of the error detection and correction module125may encode the data with an outer error correction code. The outer error correction code encoder200may encode the data by adding redundant data, or parity bits, to the data, such that the data can be recovered from the nonvolatile memory storage module115when errors are subsequently introduced into the data by the nonvolatile memory storage module115. Various mechanisms may lead to bit errors in flash memories, including noise at the power rails, voltage threshold disturbances during the reading and/or writing of neighboring cells, retention loss due to leakage within in the cells and tunneling. By encoding the data with an outer error correction concatenated with an inner error correction code, the error detection and correction module may subsequently read the encoded data from the nonvolatile memory storage module115, and the redundant data bits added to the data may allow the error detection and correction module125to determine whether or not the data stored in the nonvolatile memory storage module115has been corrupted during the storage of the data, and if so, the error detection and correction module125may identify the specific data bits that have been corrupted and correct the data. As such, prior to writing the data to the nonvolatile memory storage module115, the outer error correction code encoder200may add a number of parity bits to the data. After the outer error correction code encoder200has added the parity bits to the data using the outer error correction code, the inner error correction code encoder205may add additional parity bits to the data using an inner error correction code. The inner error correction code may be a different error correction code than the outer error correction code. The inner error correction code may exhibit an error floor. In accordance with an embodiment of the present invention, the data may be encoded using an outer error correction code concatenated with an inner error correction code, wherein the outer error correction code applied to the data by the outer error correction code encoder200is concatenated with the inner error correction code applied to the data by the inner error correction code encoder205. The data comprising the outer error correction code concatenated with the inner error correction code may then be written to the nonvolatile memory storage module115.

In an exemplary encoding of the data using the concatenated outer error correction and inner error correction code, the inner error correction code parity bits are not included in the outer error correction code parity. Separating the parity of the inner error correction code from the parity of the outer error correction code allows the inner error correction code to be stored in a different flash page than the outer error correction code and the data. The inner error correction code in a specific implementation may have a stronger error correction code than the outer error correction code. The stronger inner error correction code may result in a lower UBER at select RBERs. In addition, the stronger inner error correction code may result in an increased code rate for the inner error correction requiring a larger number of parity bits for encoding. Due to the increased number of parity bits in the stronger inner error correction code, the number of parity bits required for the inner error correction code rate may be such that the data and the inner error correction code are unable to fit on the same flash page and it may be necessary to store the inner error correction code in a different flash page than the data. In contrast, the outer error correction code may be a weaker error correction code requiring fewer parity bits for encoding. As such, the outer error correction code may be able to fit on the same flash page as the data.

After the data has been encoded and written to the nonvolatile memory storage module115, the interface module150may receive one or more data read commands from the host processor135. The interface module150may then communicate the data read commands to the processing module120to instruct the error detection and correction module125to read the encoded data from the nonvolatile memory storage module125over one of the communication channels140. In reading the encoded data from the nonvolatile memory storage module125, if the outer error correction code and the data encoded by the outer error correction code are stored on the same flash page, it may only be necessary for the error detection and correction module125to read the flash page that contains both the outer error correction code and the data. The encoded data read from the nonvolatile memory storage module115may be received by the outer error correction code decoder215. The outer error correction code decoder215may then attempt to recover the data from the encoded data by decoding the data using the outer error correction code of the encoded data. The outer error correction code decoder215may then communicate with the error detection module220to determine if decoding the encoded data using the outer error correction code results in one or more decoding errors. In determining if one or more decoding errors are present in the decoded data, the error detection module220may use the redundant data bits that were added to the data by the outer error correction code encoder200to identify specific data bits that have been corrupted. The error detection module220may also be used to determine if the number of decoding errors resulting from the decoding of the encoded data using the outer error correction code exceeds the correction capacity of the outer error correction code. The correction code capacity of the outer error correction code decoder215will be exceeded if the number of errors is greater than the number of bits that the outer error correction code used by the outer error correction code decoder215is capable of correcting. If there are decoding errors in the data and the correction capacity of the outer error correction code is not exceeded, the outer error correction code decoder215may correct the error identified in the data. The corrected data may then be provided to the communication channel155. If the error detection module220does not identify any errors in the decoded data, the decoded data may be provided to the communication channel155without being corrected by the outer error correction code decoder215.

If the correction capacity of the outer error correction code decoder215is exceeded after decoding of the encoded data by the outer error correction code decoder215, as identified by the error detection module220, the error correction and detection module125may attempt to recover the data from the encoded data by first using the inner error correction code decoder210and then using the outer error correction code decoder215. To recover the data using the inner error correction code210and the outer error correction code decoder215, the processing module120may instruct the inner error correction code decoder210to read the encoded data from the nonvolatile memory storage module115. In reading the encoded data from the nonvolatile memory storage module125, if the outer error correction code and the data encoded by the outer error correction code are stored on the same flash page and the inner error correction code is stored on a different flash page, it may be necessary for the error detection and correction module125to read a first flash page that contains the outer error correction code and the data and to read a second flash page that contains the inner error correction code. The encoded data read from the nonvolatile memory storage module115may be received by the outer error correction code decoder215. The inner error correction code decoder210may then decode the data using the inner error correction code. The inner error correction code decoder210may then determine if there are one or more errors in the decoded data and if it is determined that one or more errors exist in the decoded data, the inner error correction code decoder may correct the identified errors. In determining if one or more decoding errors are present in the decoded data, the inner error correction code decoder210may use the redundant data bits that were added to the data by the inner error correction code encoder205to identify specific data bits that have been corrupted. After any errors in the encoded data have been corrected by the inner error correction code decoder210, the corrected data may be communicated to the outer error correction code decoder215. The error detection module220may be used to determine if the corrected data from the inner error correction code decoder210is in fact free of errors. It is possible for the inner error correction code decoder210to determine that the data has been successfully decoded, when in fact errors may still be present in the data corrected by the inner error correction code decoder210. In this case, the error detection module220may identify the errors that have not been successfully corrected by the inner error correction code decoder210. In a particular embodiment, the outer error correction code decoder215may comprise the error detection module220. The outer error correction code decoder215may then attempt to recover the data from the encoded data by decoding the data corrected by the inner error correction code decoder210using the outer error correction code of the encoded data. The outer error correction code decoder215may then communicate with the error detection module220to determine if decoding the data corrected by the inner error correction code decoder210using the outer error correction code results in one or more decoding errors. In determining if one or more decoding errors are present in the decoded data, the error detection module220may use the redundant data bits that were added to the data by the outer error correction code encoder200to identify specific data bits that have been corrupted. The error detection module220may also be used to determine if the number of decoding errors resulting from the decoding of the data corrected by the inner error correction code decoder210using the outer error correction code exceeds the correction capacity of the outer error correction code decoder215. The correction code capacity of the outer error correction code decoder215will be exceeded if the number or error is greater than the number of bits that the outer error correction code used by the outer error correction code decoder215is capable of correcting. If there are decoding errors in the corrected data and the correction capacity of the outer error correction code is not exceeded, the outer error correction code decoder215may correct the errors identified in the data. The corrected data may then be provided to the communication channel155. If the error detection module220does not identify any errors in the decoded data, the decoded data may be provided to the communication channel155without being further corrected by the outer error correction code decoder215.

If the correction capacity of the outer error correction code decoder215is exceeded when the data corrected by the inner error correction code decoder210is decoded by the outer error correction code decoder215, the error detection module220may communicate to the processing module that the error detection and correction module125is unable to recover the data. The error detection module220may communicate the failure to the processing module120and the processing module120may instruct the RAID control module145to access the nonvolatile memory storage module115to recover the data from the encoded data stored in the nonvolatile memory storage module115.

In various embodiments, the inner error correction code module210and the outer error correction code module215are capable of correcting up to a maximum number of data bit errors in a data unit. In these embodiments, the error correction capacity of the inner error correction code module210and the outer error correction code module215is equal to the maximum number of data bit errors correctable in a data unit by the inner error correction code module210and the outer error correction code module215. In other embodiments, the inner error correction code module210and the outer error correction code module215are programmable to select an error correction capacity of the inner error correction code module210and the outer error correction code module215for correcting up to the maximum number of data bit errors correctable in a data unit by the inner error correction code module210and the outer error correction code module215. In these embodiments, the selected error correction capacity may be less than the maximum number of data bit errors correctable in a data unit by the inner error correction code module210and the outer error correction code module215.

In various embodiments, each of the outer error correction code encoder200, the inner error correction code encoder205, the inner error correction decoder210, the outer error correction code decoder215and the error detection module220may include one or more hardware components, one or more software components, or some combination thereof. Examples of hardware components include a combinational logic circuit, a sequential logic circuit, a microprocessor, an embedded processor, an embedded controller, or the like. Examples of software components include a computing program, computing instructions, a software routine, or the like.

In various embodiments, the inner error correction code may be a low-density parity check (LDPC) error correction code and the outer error correction code may be a Bose-Chaudhuri-Hochquenghem (BCH) error correction code.

The LDPC code may selected from one of a variety of error correction codes associated with LDPC codes, including regular or irregular LDPC codes, quasi-cyclic LDPC codes, irregular repeat accumulate (IRA) codes, codes based on projective geometry or any of a variety of error correction codes associated with LDPC as are known in the art. The LDPC correction code may be known to exhibit an error floor.

In various embodiments, the BCH error correction code may have a very high error correction capacity. For example, the BCH correction code may have an uncorrected bit error rate (UBER) of 1×10−9for a raw bit error rate (BER) of 1×10−3. As another example, the BCH error correction code may have an uncorrected bit error rate (UBER) of 1×10−12for a raw bit error rate (BER) of 1×10−3. In some embodiments, the BCH error correction code may have an uncorrected bit error rate (UBER) in the range of 1×10−9to 1×10−15for a raw bit error rate (BER) of 1×10−3.

FIG. 3is a diagram illustrating the flow of encoded data having an inner LDPC code concatenated with an outer BCH code, in accordance with an embodiment of the present invention. In the nonvolatile memory system300illustrated with reference toFIG. 3, upon the receipt of a write request, data305is received at a BCH encoder320. The BCH encoder encodes the received data305by adding redundant bits310to the data305. The number of bits added to the data is dependent upon the BCH code being used. As is known in the art, a “strong” BCH code would add more redundant bits to the data than a “weak” BCH code. The data305and BCH code310are then communicated to the LDPC encoder325. The LDPC encoder325encodes the data305by adding redundant bits315to the data305. In this way, the data is encoded using a concatenated code including a BCH code310and an LDPC code325by adding the BCH code310and the LDPC code325to the data305to form the encoded data. Depending upon the strength of the LDPC code325, it may be necessary to store the data305and the BCH code310in a first flash page and to store the LDPC code325in a second flash page. Alternatively, the data305, the BCH code310and the LDPC code315may be stored in the same flash page. The encoded data comprising the data305and the concatenated error codes310,315are then communicated to the nonvolatile memory storage module330. The encoded data is stored in the nonvolatile memory storage module330until the nonvolatile memory system300receives a read request.

Upon receiving a read request at the nonvolatile memory system300, the nonvolatile memory system300reads the encoded data from the nonvolatile memory storage module330and communicates the encoded data, including the data305and the BCH code310, to the BCH decoder335. If the data305and the BCH code310are stored in the same flash page, it may only be necessary to read one flash page from the nonvolatile memory storage module330. The BCH decoder335will attempt to recover the data305from the encoded data using the BCH code310. The BCH decoder335recovers the data305from the encoded data by identifying any errors in the data using the BCH code310and correcting any identified errors. However, the BCH decoder335is only able to correct the number of errors up to the correction capacity of the BCH code310. If the error correction capacity of the BCH decoder335is not exceeded, the BCH decoder335will be successful and the BCH decoder335will be able to recover the data305from the encoded data. If the error correction capacity of the BCH decoder335is exceeded and the BCH decoder335is unable to recover the data from the encoded data, the BCH decoder335recovery will fail350.

If recovery of the data305using the BCH decoder335and the BCH code310fails, the nonvolatile memory system300communicates the encoded data, including the data305, the BCH code310and the LDPC code315, to the LDPC decoder340. If the data305and the BCH code310are stored in the same flash page, but the LDPC code315is stored in a different flash page, it may be necessary to read a first flash page containing the data305and the BCH code310and to read a second flash page containing the LDPC code315from the nonvolatile memory storage module330. Alternatively, the data305, the BCH code310and the LDPC code315may be stored in the same flash page. The LDPC decoder340will recover the data305from the encoded data using the LDPC code315. The LDPC decoder340recovers the data305from the encoded data by identifying any errors in the data using the LDPC code315and correcting any identified errors. After the data305has been decoded and corrected by the LDPC decoder340, the data305and the BCH code310are communicated to the BCH decoder335. The BCH decoder335will attempt to recover the data305from the encoded data corrected by the LDPC decoder340using the BCH code310. The BCH decoder335recovers the data305from the corrected data by identifying any remaining errors in the data using the BCH code310and correcting any identified errors. However, the BCH decoder335is only able to correct the number of errors up to the correction capacity of the BCH code310. If the error correction capacity of the BCH decoder335is not exceeded, the BCH decoder335will be successful and the BCH decoder335will be able to recover the data305from the data corrected by the LDPC decoder340. If the error correction capacity of the BCH decoder335is exceeded and the BCH decoder335is unable to recover the data from data corrected by the LDPC decoder340, the BCH decoder335recovery will fail355.

If the nonvolatile memory system fails to recover the data305from the encoded data using the LDPC decoder340followed by the BCH decoder335, the nonvolatile memory system will communicate the read request to a redundant array of independent disks (RAID) module to recover the data305. A RAID algorithm may be performed by the RAID control module345on a standard RAID level (e.g., a RAID level 3-6), as is known in the relevant art.

Alternatively, after the data305has been decoded and corrected by the LDPC decoder340, the data305and the BCH code310may be communicated to the BCH decoder335. The BCH decoder335will attempt to recover the data305from the encoded data corrected by the LDPC decoder340using the BCH code310. The BCH decoder335recovers the data305from the corrected data by identifying any remaining errors in the data using the BCH code310and correcting any identified errors. In identifying any remaining errors in the data, the BCH decoder335may calculate the syndromes of the data305decoded by the LDPC decoder340. The BCH decoder335may then determine if the calculated syndromes are non-zero or all zeros360. If it is determined that the syndromes are non-zero, then it can be established that the data305decoded by the LDPC decoder340has not been successfully recovered. In this case, the LDPC decoder340may determine that the data has been successfully recovered when in fact the data still contains errors. If it is determined that the BCH syndromes are non-zero360, the data305may be sent to the BCH decoder335for further decoding. Alternatively, if it is determined that the BCH syndromes are non-zero360, then the data305may be sent directly to the redundant array of independent disks (RAID) module to recover the data305. A RAID algorithm may be performed by the RAID control module345on a standard RAID level (e.g., a RAID level 3-6), as is known in the relevant art.

FIG. 4illustrates a flow diagram400for a method of recovering encoded data in a nonvolatile memory controller in accordance with an embodiment of the present invention. In accordance with various embodiments, upon receiving a read request for data stored in a nonvolatile memory storage module, the nonvolatile memory controller initiates a request to read the concatenation encoded data stored in the nonvolatile memory storage module405. The concatenation encoded data stored in the nonvolatile memory storage module may include data having an outer error correction code concatenated with an inner error correction code. The outer error correction code and the inner error correction code may be stored in the same flash page as the data. Alternately, the outer error correction code and the data may be stored in a first flash page and the inner error correction code may be stored in a second flash page. The concatenation encoded data stored in the nonvolatile memory storage module may include an LDPC code as an inner error correction code and a BCH code as an outer error correction code.

After the concatenation encoded data is read from the nonvolatile memory storage module405, the nonvolatile memory controller may recover the data from the concatenation encoded data by decoding the concatenation encoded data using the outer error correction code410. To recover the data from the concatenation encoded data, the nonvolatile memory storage module may decode the data using the outer error correction code and then determine if there are any errors resulting from the decoding of the concatenation encoded data using the outer error correction code415.

If there aren't any decoding errors resulting from decoding the concatenation encoded data using the outer error correction code415, the data may be recovered without being corrected and the nonvolatile memory controller may transfer the recovered data to a host processor.

If there are decoding errors resulting from decoding the concatenation encoded data using the outer error correction code415, the nonvolatile memory storage controller may then determine if the number of errors resulting from decoding the concatenation encoded data using the outer error correction code exceeds the correction capacity of the outer error correction code420. In various embodiments, the correction capacity of the outer error correction code may be exceeded if the number of errors resulting from the decoding of the concatenation encoded data using the outer error correction code is greater than the number of errors correctable by the outer error correction code.

If the number of errors resulting from decoding the concatenation encoded data using the outer error correction code does not exceed the correction capacity of the outer error correction code, the data errors may be corrected using the outer error correction code425to successfully recover the data from the concatenated encoded data and the nonvolatile memory controller may transfer the recovered data to a host processor.

If the number of errors resulting from decoding the concatenation encoded data using the outer error correction code exceeds the correction capacity of the outer error correction code, then there are too many data errors for the outer error correction code to correct and the data may not be successfully recovered from the concatenation encoded data using only the outer error correction code. When the outer error correction code is unable to successfully recover the data from the concatenation encoded data using the outer error correction code, the nonvolatile memory controller may attempt to recover the data from the concatenated encoded data using the inner error correction code and the outer error correction code.

To recover the data from the concatenation encoded data using the inner error correction code and the outer error correction, the concatenation encoded data may first be decoded using the inner error correction code430. Any errors detected during the decoding of the concatenation encoded data using the inner error correction code may be corrected using the inner error correction code435. After the concatenation encoded data has been decoded and corrected using the inner error correction code, the detection over the data that has been corrected using the inner error correction code may be computed440using the outer error correction code decoder.

If the computed detection over the data corrected using the inner error correction code440indicates that the detection has failed445then it may be concluded that the data decoded by the inner error correction code decoder has not been successfully recovered and that the inner error correction code decoder has incorrectly determined that the data has been successfully recovered when in fact the data still contains errors. If the detection fails445, the data may be decoded using the outer error correction code decoder450if the correction capacity of the outer error correction code capacity has not been exceeded452. Alternatively, if the detection fails445, a redundant array of independent disks (RAID) operation460may be performed to recover the data.

If the number of errors resulting from decoding the data corrected by the inner error correction code using the outer error correction code does not exceed the correction capacity of the outer error correction code, the data errors may be corrected using the outer error correction code455to successfully recover the data from the concatenated encoded data and the nonvolatile memory controller may transfer the recovered data to a host processor.

If the number of errors resulting from decoding the data corrected by the inner error correction code using the outer error correction code exceeds the correction capacity of the outer error correction code, then there are too many data errors for the outer error correction code to correct and the data may not be successfully recovered from the concatenation encoded data using only the inner error correction code in combination with the outer error correction code.

If the number of errors resulting from decoding the data corrected by the inner error correction code using the outer error correction code exceeds the correction capacity of the outer error correction code, the nonvolatile memory controller may communicate the read request to a redundant array of independent disks (RAID) control module to perform a RAID operation460for the read request to recover the data from the nonvolatile memory storage module.

Alternatively, after the concatenation encoded data has been decoded and corrected using the inner error correction code, the syndromes of the corrected data may be calculated using the outer error correction code440. If the syndromes of the corrected data are non-zero, then the nonvolatile memory controller may communicate the read request to a redundant array of independent disks (RAID) control module to perform a RAID operation460for the read request to recover the data from the nonvolatile memory storage module.

With the present invention, if data recovery fails using the outer error correction code because too many errors exist in the data (high RBER) to reliably recover the data using the outer error correction code and to meet a target UBER, the inner error correction code in combination with the outer correction code may be used to improve the reliability of the nonvolatile memory system. While the inner error correction code may exhibit an error floor, the inner error correction code may be used to correct the data, thereby reducing the number of errors in the data before using the outer error correction code to correct the data. The outer correction code may then be used to meet the target UBER in the presence of the error floor of the inner error correction code.

The method of the present invention allows a target uncorrectable bit error rate (UBER) to be reached for a nonvolatile memory storage system in which the data exhibits a high raw bit error rate (RBER) in the range of an error floor in the correction code.

In the present invention, the LDPC decoder is removed from the main data path to improve the overall performance of the nonvolatile memory system. By removing the LDPC decoder from the main data path, it is no longer necessary for the nonvolatile memory system to provide mutually exclusive parallel access to the LDPC decoder for every channel, or to experience a performance penalty when sharing the LDPC decoder, in order to determine if the data is inerrant. As such, removing the LDPC decoder from the main data path eliminates the need for multiple LDPC decoders in the system without sacrificing the performance of the system.

During the life of the nonvolatile memory storage system, the error rate of the nonvolatile storage system typically increases. With the present invention, the LDPC decoder is only used when the error rates are so high that they exceed the correctability of the BCH code, which typically begins to occur toward the end of life of the device. As such, in the present invention, for the majority of the device life the LDPC decoder may be removed from the main data path, resulting in the ability to design a smaller, lower bandwidth, and lower power LDPC decoder.

LDPC is able to correct data with a very high number of errors using fewer parity bits than other codes known in the art and can perform corrections with error rates that exceed the capability of most other codes. However, the code rates required to implement LDPC may require that the LDPC code be stored in a separate flash page from the data it is encoding. In the present invention, the BCH code rate may be small enough to be able to store the BCH parity in the same flash page as the data. While the smaller code rate for the BCH code may result in a less robust code than desired, the LDPC encoder can be implemented to overcome the weakness in the BCH code. However, by keeping the BCH code rate small and thereby keeping the BCH parity on the same flash page as the data, the system performance is improved because only one flash page needs to be read to decode the data. Additionally, the software/firmware of the nonvolatile memory system can be simplified by eliminating the need to coordinate the complex interactions of the system when the BCH parity is stored on a different flash page than the data.