The present disclosure relates to solid state storage devices and methods that increase the efficiency in decoding hard-encoded Low Density Parity Check (LDPC) encoded data, so as to reduce the power consumed by the solid state storage device during such decoding.
Error correcting schemes for solid state memory devices have been the subject of many studies in the recent years, particularly in respect of LDPC codes which are based on iterative probability based calculations that converge. LDPC codes, also known as soft-decision schemes, have shown good decoding performance compared to other error-correcting schemes such as turbo codes, approaching within 0.0045 dB of the Shannon limit of maximum possible efficiency of error-correcting schemes. Various algorithms are employed to implement LDPC decoding, based upon using iterations to approximate a maximum likelihood solution, but there may be no limit to the number of iterations as the convergence to a solution is asymptotic. This lack of a defined maximum is problematic, particularly when extremely low error rates are required (as is the case for flash memory applications).
Other error correction schemes such as Bose Chaudhuri Hocquengheim (BCH) codes and Reed-Solomon (RS) codes are based on algebraic formulation and/or algebraic codes. The ability of these hard-decision schemes to reliably correct a certain number of errors or less has been mathematically demonstrated, however they require increased computational support as the number of correctable bit errors increases.
In order to maximize the benefits of both the soft-decision and the hard-decision error correction schemes, concatenated correction codes have been developed and used in correction schemes that employ both an LDPC code and a BCH code, where the BCH code is used as an outer code and the LDPC code is used as an inner code, for example. However such concatenated schemes still invariably rely on the use of the iterative probabilistic process of the LDPC code, which carries with it the weight of increased decoding processing time and power consumption as the length of the code word increases. This is primarily due to the sequential decoder processing of the inner LDPC code followed by the processing of the outer BCH code.
According to one implementation of the present disclosure, there is provided a storage device comprising a non-volatile memory configured to store data encoded into a plurality of encoded data groups, each encoded data group of the plurality being encoded using a BCH or SECDED parity scheme, the plurality of encoded data groups being collectively further encoded by a parity scheme using a Low Density Parity Check (LDPC) code; a non-volatile memory controller communicatively coupled to the non-volatile memory and configured to access the plurality of encoded data groups; a first decoder configured to decode the plurality of encoded data groups by decoding the parity in each encoded data group; and a second hybrid decoder commutatively coupled to the first decoder and configured to determine the data groups decoded by the first decoder that likely contain errors and the data groups decoded by the first decoder that do not contain errors, and to decode the parity of the data groups decoded by the first decoder using the likelihood of errors as log likelihood ratio (LLR) information input to the second hybrid decoder.
In certain implementations, the second decoder is further configured to detect the data groups decoded by the second decoder that were initially determined not to likely contain an error but may in fact contain an error, and decode the parity in those data groups and the data groups that contain errors in order to make a final check for correctness of decoding. In some implementations, the likelihood-of-errors information is the log likelihood ratio (LLR).
In other implementations, the second decoder further includes a sub-decoder to decode the parity of the data groups decoded by the first decoder that contain errors. In some implementations, the sub-decoder is a hard-decision BCH decoder or a soft-decision Hamming code decoder. In further implementations, the parity decoded by the first decoder is based on a BCH code or a Hamming code. According to some implementations, the parity scheme is a single-error correcting (SEC) code or a single-error correcting double-error detecting (SECDED) code. In other implementations, SEC or SECDED decoded data with one error is fixed by the second decoder.
In further implementations, the second decoder decodes the parity of the decoded data groups iteratively using soft-decision decoding. In some implementations, the second decoder independently uses log likelihood ratio (LLR) information as soft information in each iteration of decoding the parity. According to an implementation, the second decoder independently uses log likelihood ratio (LLR) information as soft information to determine the data groups decoded by the first decoder that do not contain errors. In some implementations, the log likelihood information is used by a soft-decision Hamming decoder to decode the parity of the data groups that contain errors.
According to one implementation of the present disclosure, there is provided a method of decoding non-volatile memory of a memory system, the method comprising: accessing, by a non-volatile memory controller, data stored in the non-volatile memory, the data encoded into a plurality of encoded data groups, each data group of the plurality being encoded using a hard-decision parity scheme, and the plurality being further encoded by a soft-decision parity scheme using a Low Density Parity Check (LDPC) code; hard decision decoding, by a first decoder, the parity in each encoded data group; determining, by a second decoder, the data groups decoded by the first decoder that contain errors and the data groups decoded by the first decoder that likely do not contain errors; and decoding, by the second decoder, the decision parity of the data groups decoded by the first decoder that contain errors using likelihood-of-errors information that is input to the second decoder.
In some implementations, the method further comprises detecting, by the second decoder, the data groups decoded by the second decoder that were initially determined not to likely contain an error but may in fact contain an error, and decoding, by the second decoder, the parity in those data groups and the data groups that contain errors in order to make a final check for correctness of decoding. In other implementations, the likelihood-of-errors information is the log likelihood ratio (LLR). In further implementations, the method further comprises decoding, by a sub-decoder, the parity of the data groups decoded by the first decoder that contain errors. In some implementations, the sub-decoder is a hard-decision BCH decoder or a soft-decision Hamming code decoder.
In certain implementations, the parity decoded by the first decoder is a BCH code or a Hamming code. In other implementations, the hard-decision parity scheme is a single-error correcting (SEC) code or a single-error correcting double-error detecting (SECDED) code. In some implementations, SEC or SECDED decoded data with one error is fixed by the second decoder. In some implementations, the second decoder decodes the parity of the decoded data groups iteratively using soft-decision decoding. In certain other implementations, the second decoder independently uses log likelihood ratio (LLR) information as soft information in each iteration of decoding the parity. According to some implementations, the second decoder independently uses log likelihood ratio (LLR) information as soft information to determine the data groups decoded by the first decoder that do not contain errors. In other implementations, the log likelihood information is used by a soft-decision Hamming decoder to decode the parity of the data groups that contain errors.
The foregoing and other objects and advantages will be apparent upon consideration of the following detailed description, taken in conjunction with the accompanying drawings, in which like reference characters refer to like parts throughout, and in which:
In order to appreciate the features of the present disclosure, iterative decoding of a Low-Density Parity Check (LDPC) code will be described with respect to
An LDPC code is decoded by repeatedly updating, at the variable nodes 150 and the check nodes 160, log likelihood ratio (LLR) information associated with the edges of the Tanner graph 140. The LLR compares the ‘goodness of fit’ of the decoding calculations performed at the variable and check nodes 150, 160 that are connected by an edge 170 to determine a bit in question of the decoded data is a ‘1’ or ‘0’. The LLR information contains two types of information: LLR information from a check node 160 to a variable node 170, denoted as 210 in
Comparing the structure of the encoded user data 400 with that in
A prior art solid state storage device 500 and a control method for the solid state storage device 500 will now be described with reference to
The controller 520 comprises an interface unit 540, a hard-parity decoder 550, such as a BCH decoder, and a soft-parity decoder 560, such as an LDPC decoder. The NAND flash memory 510 is connected to the LDPC decoder 560 of the controller 520 via the interface unit 540. The LDPC decoder 560 comprises an LLR calculation module 562 and a node processing module 564. During a read operation, for example, soft read information from the NAND flash memory 510 (which may be derived from multiple reads of the memory cells using varying voltage thresholds for example) is fed into the LLR calculation module 562, and hard read information from the NAND flash memory 510 (ones and zeros from a single read of the memory cells for example) is fed into the node processing module 564 during a read operations. The LLR calculation module 562 is connected to the node processing module 564. The LLR calculation module 562 determines the LLR information relating to the variable and check nodes in the LDPC encoded data and transmits this information to the node processing module 564. The node processing module 564 decodes the LDPC codeword (such as codeword formed by the user data 310, the BCH parity bits 320, and the LDPC parity bits 330 in the data structure 300 in
The LDPC decoder 560 is coupled to the BCH decoder 550 and the LDPC decoded data from the node processing module 564 is input to the BCH decoder 550. The BCH decoder 550 is connected to the processor 570, which, in turn, is coupled to an embedded-type volatile memory 580 such as a Random Access Memory (RAM). The memory 580 may be configured to store startup data for the host, for example. The BCH decoder 550 decodes the BCH codeword (such as the codeword formed by 310+320 in the data structure 300 in
As previously mentioned, this method of BCH decoding involves decoding the entire LDPC codeword from the read data in the first instance, which is an iterative and heavy on processing power as convergence of the soft-decision scheme is required to decode the required data. This can be especially inefficient for large data. After LDPC decoding, the BCH code is decoded to reveal the data requested by the host 530.
The present disclosure does away with this methodology and instead implements a hybrid BCH (SEC/SECDED) and LDPC decoding scheme which will be explained by reference to the solid state storage device 600 of
The storage device 600 comprises a non-volatile memory 610 (e.g. NAND flash memory) and a memory controller 620. The memory 610 stores encoded data that takes the form as depicted in
The storage device 600 is connected to a host 630. The non-volatile memory 610 and the memory controller 620 may be mounted onto a memory card that is detachably connected with the host 630. The host 630 writes and reads data to and from the memory 610 via the memory controller 620. The controller 620 comprises an interface unit 640, and an integrated BCH (SEC/SECDED) and LDPC decoder 650. The integrated decoder 650 is connected to a processor 670, which, in turn, is coupled to a volatile memory 680 such as a Random Access Memory (RAM), which may be configured to store startup data for the host 630, for example.
The integrated decoder 650 comprises an initial BCH (SEC/SECDED) decoder 652 that receives encoded data from the memory 610 via the interface 640. The integrated decoder 650 further includes an initial LLR module 654 that also receives the encoded data from the memory 610 via the interface 640. It should be noted that the encoded data from the memory 610 is received by the initial BCH (SEC/SECDED) decoder 652 and the initial LLR module 654 simultaneously such that information from the encoded data is made available to both the BCH (SEC/SECDED) decoder 652 and the LLR module 654 at the same time. The integrated decoder 650 also includes a group and node processing module 656 for decoding the LDPC code in the encoded data. The BCH (SEC/SECDED) decoder 652 decodes the BCH (SEC/SECDED) code in the encoded data received from the memory 610. This process does not drain the resources of the storage device 600 due to the multiple small BCH (SEC/SECDED) groups in the encoded data received from the memory 610. The BCH (SEC/SECDED) decoded data output from the BCH (SEC/SECDED) decoder 652 is fed into the initial LLR module 654, to which the BCH (SEC/SECDED) decoder 652 is coupled.
The LLR module 654 is connected to the group and node processing module 656. The LLR module 654 receives both the BCH (SEC/SECDED) decoded data from initial BCH (SEC/SECDED) decoder 652, and soft data from the memory 610 (which may be derived from multiple reads of the memory cells using different voltage thresholds for example), and determines the initial LLR information relating to the variable and check nodes in the encoded data. This initial LLR information is then relayed to the group and node processing module 656. The group and node processing module 656 comprises a variable node processing module 657, a check node processing module 658 and an LLR buffer 659. The variable node processing module 657 and the check node processing module 658 are each separately coupled to the LLR buffer 659. The variable node processing module 657 further comprises a BCH (SEC/SECDED) decoder 657a, which may be a soft decision Hamming decoder. The LLR buffer 659 is connected to the initial LLR module 654.
The LLR buffer 659 receives the initial LLR information from the LLR module 654 which has determined if the BCH (SEC/SECDED) decoded data from the BCH (SEC/SECDED) decoder 652 contains errors according to the following: The LLR module 654 generates the initial LLR value per input bit according to the output from the BCH (SEC/SECDED) decoder 652. If the BCH (SEC/SECDED) decoder 652 indicates that the decoded BCH (SEC/SECDED) code output from the BCH (SEC/SECDED) decoder 652 was error free, it assigns a first LLR value to the input bit. However if the BCH (SEC/SECDED) decoder 652 indicates a single error was present, the bit indicated by the error location has a second LLR value applied to the input bit. If the BCH (SEC/SECDED) decoder 652 indicates that the BCH (SEC/SECDED) code is unsolvable, a third LLR value is applied to the input bit. The first, second and third LLR values are pre-computed values. The LLR module 654 merges the LLR values applied by the LLR module 654 with additional soft information from the memory 610 to produce an improved LLR estimate for each bit in the BCH (SEC/SECDED) codeword. The LLR module 654 then uses this LLR estimate to determine if the decoded data from the BCH (SECDED) decoder 652 is error free. BCH SEC/SECDED decoded data with no errors are marked as very likely correct, and can then be excluded from further decoding by the group and node processing module 656. While decoded groups with apparently zero errors may be omitted from the iterated decoding within 656, there is a small possibility (<1 in 1,000) that a group is mis-decoded as having zero errors when in fact it has multiple errors. As a power saving first approximation these groups are first omitted from the iterative decoding. However, they may be included in a final phase of decoding along with the data groups that do contain errors as a final check for correctness which will check and correct for any mis-decoded groups with apparently zero errors. BCH (SEC/SECDED) decoded data with one error are fixed by the BCH (SECDED) decoder 657a within the variable node processing module 657.
Decoded data from the initial BCH (SECDED) decoder 652 with errors (including those with single errors as they may be mis-decodes) are decoded by the group and node processing module 656. Here the group and node processing module 656 decodes the LDPC code in the BCH (SEC/SECDED) decoded data containing multiple errors iteratively until a solution is obtained. As previously mentioned, the variable nodes send LLR information to the check nodes using a message passing algorithm, and the response messages from the check nodes are calculated using the min-sum LDPC decoding technique, for example, until the iterative decoding is complete.
The error free decoded data is then relayed to the host device 630 via the processor 670 and the host interface 690.
The method begins at step 710 in which the encoded data read from memory 610 is received by the initial BCH decoder 652 which decodes the BCH (SEC/SECDED) code in the data received from the memory 610. This decoding step makes use of the hard-decision parity data associated contained in the encoded data.
While shown as a subsequent step to step 710, step 720 is carried out in parallel with step 710. Here the LLR module 654 receives both the BCH (SEC/SECDED) decoded data from initial BCH (SEC/SECDED) decoder 652, and the soft data read information from the memory 610, and determines the initial LLR information relating to the variable and check nodes in the encoded data.
The method then progresses to step 730 in which the LLR buffer 659 receives the initial LLR information from the LLR module 654 and determines if the BCH (SEC/SECDED) decoded data from the BCH (SEC/SECDED) decoder 652 contains errors. BCH (SEC/SECDED) decoded data with no errors are marked as very likely correct, and are excluded from further decoding by the group and node processing module 656.
The LLR information for the remaining BCH (SEC/SECDED) decoded data is then distributed from variable to check nodes, as indicated in step 730. This relay of LLR information between variable and check nodes is as depicted in
In step 740, the decoded data from the initial BCH (SEC/SECDED) decoder 652 with errors (one, two or more errors for SEC and SECDED codes) are decoded by the group and node processing module 656. Here the group and node processing module 656 decodes the LDPC code in the BCH (SEC/SECDED) decoded data containing multiple errors iteratively until a solution is obtained.
The LLR information from the various check and variable nodes is stored in the LLR buffer 659 so that it can be used by the variable node processing module 657 (and the BCH (SEC/SECDED) decoder 657a, if applicable) and the check node processing module 658. This is depicted in step 750 of
In step 760, SEC/SECDED decoded data with one error are fixed by the BCH decoder 657a within the variable node processing module 657.
The method then progresses to decision step 770 where it is determined if all LDPC codes in the encoded data have been decoded. If there remains at least one LDPC code in the encoded data that has not been decoded, the method iterates to step 730 and steps 730 to 760 are repeated. If all LPDC codes in the embedded data has been decoded and error-free, the method ends and the error free decoded data is then relayed to the host device 630 via the processor 670 and the host interface 690.
Other objects, advantages and embodiments of the various aspects of the present invention will be apparent to those who are skilled in the field of the invention and are within the scope of the description and the accompanying Figures. For example, but without limitation, structural or functional elements might be rearranged consistent with the present invention. Similarly, principles according to the present invention could be applied to other examples, which, even if not specifically described here in detail, would nevertheless be within the scope of the present invention.