Memory controllers such as flash memory controllers use error correction coding to achieve an acceptable Uncorrectable Bit Error Rate (UBER). A “FEC block” is a contiguous block of information containing digital user information or “data” and associated parity information used to protect the original data against bit-errors.
Various algorithms for decoding data encoded with error correction codes are known in the art. Hard decoding algorithms require only a single value as input for each bit of the original Forward Error Correction (FEC) block and only a single read of the stored FEC block.
Gross-failures may result when wrong addresses are read or when the data is highly corrupted. In some decoding processes, the number of errors in a first layer of the check node processing are used to identify gross-failures. More particularly, when an extremely high number of errors are observed at the end of the processing of the first layer of the hard-decode algorithm, it is determined that a gross-failure has occurred. When a gross-failure is detected decoding is aborted. When the decode process is aborted, the decode process stops and an error is reported to the host. At this point, an error recovery process such as redundant array of independent disks (RAID) may be used to try to recover the stored data.
As flash memory devices age Raw Bit Error Rate (RBER) increases. When a hard decoding algorithm is being used for decoding, at some point the RBER increases to such an extent that the decoder becomes the bottleneck in the system, reducing output rate of the system. More particularly, the time and the number of operations required for the hard-decoding process to reach a maximum number of iterations and fail, the time required for re-reading the data and performing soft-decoding becomes so significant that the throughput of the flash controller decreases. While this has been described in relation to flash memory devices and flash memory controller, this issue is relevant to any memory system which exhibits increasing RBER.
Accordingly, there is a need for a method and apparatus that will allow for decoding that will reduce the negative effects resulting from increased RBER, so as to prevent or delay the occurrence of decreased throughput resulting from hard-decode failures.
A method for decoding is disclosed that includes receiving a first Forward Error Correction (FEC) block of read values at a hard-input decode circuit (where each bit of the first FEC block of read values is representative of a corresponding bit of a stored FEC block); and starting a hard-decode process. The hard-decode process includes variable node processing and check node processing on the first FEC block of read values to identify a number of check node failures. During the hard-decode process, the identified number of check node failures are compared to a decode threshold. When the identified number of check node failures is not greater than the decode threshold the hard-decode process is continued. When the identified number of check node failures is greater than the decode threshold the method further includes: stopping the hard-decode process prior to completion of the hard-decode process; generating output indicating that additional reads are required; receiving at a mapper the first FEC block of read values and one or more additional FEC blocks of read values (where each bit of each of the one or more FEC blocks of read values is representative of a corresponding bit of the stored FEC block); mapping the first FEC block of read values and the additional FEC blocks of read values into soft-input values; and performing a soft-decode process on the soft-input values to identify the decoded FEC block.
A memory controller is disclosed that includes an input and output circuit; an encoder configured to encode data received at the input and output circuit into a FEC block; and a write circuit coupled to the encoder. The write circuit is configured for storing the FEC block on memory devices. A read circuit is configured to read the stored FEC block. A hard-input decode circuit is configured to receive a first FEC block of read values (where each bit of the first FEC block of read values is representative of a corresponding bit of the stored FEC block) and to start a hard-decode process. The hard-decode process includes variable node processing and check node processing on the first FEC block of read values to identify a number of check node failures. A decode controller is coupled to the hard-input decode circuit and is configured to compare the identified number of check node failures to a decode threshold during the hard-decode process. When the identified number of check node failures is greater than the decode threshold the decode controller is operable to generate an output indicating that the hard-input decode circuit is to stop the processing of the error correction code and to generate an output indicating that additional reads are required. The hard-input decode circuit is operable, responsive to the output indicating that the hard-input decode circuit is to stop the processing of the error correction code, to stop the hard-decode process prior to completion of the hard-decode process. The memory controller further includes a mapper configured to receive the first FEC block of read values and additional FEC blocks of read values (responsive to the generated output indicating that additional reads are required) and map the first FEC block of read values and the additional FEC blocks of read values into soft-input values. A soft-input decode circuit is coupled to the mapper and is configured to perform a soft-decode process on the soft-input values to identify the decoded FEC block.
A decoder is disclosed that includes a hard-input decode circuit configured to receive a first FEC block of read values (where each bit of the first FEC block of read values is representative of a corresponding bit of a stored FEC block) and start a hard-decode process. The hard-decode process includes variable node processing and check node processing on the first FEC block of read values to identify a number of check node failures. A decode controller is coupled to the hard-input decode circuit and is configured to compare the identified number of check node failures to a decode threshold during the hard-decode process. When the identified number of check node failures is greater than the decode threshold, the decode controller is operable to generate output indicating that the hard-input decode circuit is to stop the processing of the error correction code and generate an output indicating that additional reads are required. The hard-input decode circuit is operable (responsive to the output indicating that the hard-input decode circuit is to stop the processing of the error correction code) to stop the hard-decode process prior to completion of the hard-decode process. The decoder further includes a mapper configured to receive the first FEC block of read values and additional FEC blocks of read values (responsive to the generated output indicating that additional reads are required) and map the first FEC block of read values and the additional FEC blocks of read values into soft-input values. A soft-input decode circuit is coupled to the mapper and is configured to perform a soft-decode process on the soft-input values to identify the decoded FEC block.
Thereby, the method and apparatus of the present invention provides an early hard-decode exit that moves processing out of the hard-input decode circuit prior to completion of the hard-decode process, freeing up the hard-input decode circuits for performing decode operations on other FEC blocks. The workload for decoding is thereby shifted over to the soft-input decode circuits, allowing for the workload to be balanced based on the number of check node failures. Thereby, the utilization of the soft-input decoder is increased as RBER increases. Accordingly, the method and apparatus of the present invention reduces the negative effects resulting from increased RBER, delaying the occurrence of decreased throughput that results from hard-decode failures.
The invention will be explained in more detail in the following with reference to examples and to the drawings in which are shown.
Persons of ordinary skill in the art will realize that the following description is illustrative only and not in any way limiting. Other examples will readily suggest themselves to such skilled persons.
When a write instruction with associated data to be written is received from a host device 16 at I/O circuit 2, encoder 3 encodes the received associated data into FEC blocks using an error correction code having a code rate. Code rate (CR)=data(data+parity), where data is the amount of user data in bits within a FEC block and parity is amount parity bits added to a FEC block.
Write circuit 4 is configured for storing FEC blocks received from encoder 3 on flash memory devices 12. Flash memory devices 12 may be any type of nonvolatile memory device. In the present example flash memory devices 12 are NAND devices (e,g. Single-Level Cell (SLC), Multi-Level Cell (MLC), Triple-Level Cell (TLC), Quad-Level Cell (QLC) or higher technologies. However, alternatively flash memory devices 12 could be NOR devices. Read circuit 5 performs read operations on flash memory devices 12, responsive to a read command received from host 16, by sending commands to flash memory devices 12 indicating the type of read to be performed and the address of the information to be read and receives the read results. Read circuit 5 sends the results from the read operation to decoder 11. The read results may be stored in registers within decoder 11 (e.g. registers in one or more hard-input decode circuit 7) or in data storage 6.
A single read of a stored FEC block, typically referred to as a “hard read,” produces results that are generally referred to as “hard-read values” (e.g., the results from a conventional “READ” instruction) and the results may be stored in the form of an FEC block in a respective register of decoder 11, with a single bit of the hard-read values (e.g., a “0” or a “1”) representative of a corresponding bit of the stored FEC block.
Hard-input decode circuits 7 are configured to perform processing of an error correction code algorithm on the hard-read values and soft-input decode circuits 8 are configured to perform processing of the error correction code algorithm on soft-input values, as will be described further below.
When the processing of an iteration by hard-input decode circuits 7 or soft-input decode circuit 8 is successful (i.e. in the absence of any check node failures), decode controller 9 is configured to identify the stored FEC block, remove the parity bits to obtain the originally stored data and send the originally stored data to I/O circuit 2 for output to host device 16.
A check node is a processing element that verifies the parity state over a number of binary input values. A correct node would report that the parity of the input values has even parity while an incorrect node would report odd parity. An error correction code such as, for example, an low-density parity-check (LDPC) error correction code, is made up of a plurality of check nodes and the decode process operates to force all check nodes to an even state. Thus, the number of failing (odd parity) check nodes within an LDPC decoder is indicative of the number of error bits that must be corrected.
In one example, each hard-input decode circuit 7 is coupled to decode controller 9 in the manner as shown in
Mapper 13 includes circuits and processing logic configured to transport the data from read circuit 5 to registers within decoder 11 (e.g., registers in one or more soft-input decode circuits 8) while transforming the data into the format required by soft-input decode circuits 8. Soft-input decode circuits 8 are each configured to perform a soft-decode process on the soft-input values to identify the decoded FEC block.
In some examples hard-input decode circuits 7 are identical to soft-input decode circuits 8, with the only difference being the type of input fed into the decode circuit. In other examples soft-input decode circuits 8 perform calculations using a higher number of significant figures than the calculations performed by hard-input decode circuits 7. In another embodiment hard-input decode circuits 7 perform calculations based on Log-Likelihood Ratio (LLR) values and, prior to the processing of the first layer or iteration of the error correction code, each of the hard-read values is assigned a value of either a −8 (e.g. for a bit value of “1”) or a +8 (e.g. for a bit value of “0”).
A hard-decode process is started (104), the hard-decode process including variable node processing and check node processing on the first FEC block of read values to identify a number of check node failures. In one example of the present invention each hard-input decode circuit 7 is configured for receiving an FEC block of read values, (where each bit of the first FEC block of read values is representative of a corresponding bit of a stored FEC block) and starting a hard-decode process, the hard-decode process including variable node processing and check node processing on the first FEC block of read values to identify a number of check node failures.
During the hard-decode process, the identified number of check node failures is compared (105) to a decode threshold. In one example hard-input decode circuit 7 includes a register that indicates the cumulative number of errors in the decode process and hard-input decode circuit 7 may output a Failing CheckNode Count signal, as described above in relation to
In an example in which the error correction code is a single-layer error-correction code, decode controller 9 is configured to compare (105) the identified number of check node failures in a first iteration of the single-layer error correction code to the decode threshold and is configured to generate an output indicating that the hard-input decode circuit is to stop the processing of the error correction code when the identified number of check node failures in the first iteration of the error correction code is greater than the decode threshold.
In an example in which the error correction code is a multi-layer code, decode controller 9 is configured to compare (105) the identified number of check node failures in a first iteration (e.g. the cumulative number of errors in all of the layers of the first iteration) of a multi-layer error correction code to the decode threshold and is configured to generate output indicating that the hard-input decode circuit is to stop the processing of the error correction code when the identified number of check node failures in the first iteration of the multi-layer error correction code is greater than the decode threshold.
In another example in which the error correction code is a multi-layer code, the decode controller 9 is configured to compare (105) the identified number of check node failures in a first layer of a first iteration to the decode threshold and is configured to generate output indicating that the hard-input decode circuit is to stop the processing of the error correction code when the identified number of check node failures in the first layer of the first iteration of the error correction code is greater than the decode threshold. Alternatively, layers of subsequent iterations, or all layers of a particular subsequent iteration may be compared in step 105.
When the identified number of check node failures is not greater than the decode threshold (106, 107) the hard-decode process is continued (107). The hard-decode process continues until it is successful (119, 117) or until it fails. The process typically fails when a maximum number of iterations is reached and the stored FEC block has not yet been identified. When the hard-decode process fails, soft information is obtained and decoding is performed using the soft information (110-115) as is described in more detail below.
The decode threshold may be changed (120) at various times. In one example, the decode threshold is changed by storing a set of predetermined decode threshold values for various points in the life span of flash memory devices 12 and selecting the predetermined decode threshold value that corresponds with the current point in the life span of flash memory devices 12. For example, exemplary flash memory devices (e.g., NAND devices having the same design, manufacture, etc.) could be modeled to obtain a set of predetermined decode thresholds values. The predetermined decode threshold values can be stored in a lookup table (LUT) 14 of data storage 6 that is accessed to identify a predetermined decode threshold value corresponding to the type of flash memory device 12 being used and the current point in the lifespan of the flash memory device 12 (e.g., at a certain number of program/erase cycles is used). In one example, firmware of flash memory controller 10 (not shown) tracks the number of program and erase cycles.
Optionally, the decode threshold is changed (120) when the hard-input decode circuits 7 are determined to be full (120, 121). Decode controller 9 is configured to monitor the operations of hard-input decode circuits 7 for determining when the hard-input decode circuits 7 are full. In one example, the decode threshold starts at a sufficiently high rate that no hard-decode processes are being stopped (steps 106, 108 of
When the identified number of check node failures is greater than the decode threshold (106) the hard-decode process is stopped prior to completion (108) (e.g., prior to reaching a maximum number of iterations or successfully identifying the stored FEC block) and soft information is used (steps 110-115) to identify the stored FEC block (117). Decode-controller 9 is configured for generating output indicating that the hard-input decode circuit is to stop the processing of the error correction code when the identified number of check node failures is greater than the decode threshold. In response, the respective hard-input decode circuit 7 stops the hard-decode process prior to completion of the hard-decode process, and no subsequent iterations of the error correction code are performed.
In one example, decode controller 9 is configured for sending an Early Termination Signal to hard-input decode circuit 7, as illustrated in
When the identified number of check node failures is greater than the decode threshold an output is generated (110) indicating that additional reads are required. Decode-controller 9 is configured to generate output (e.g., one or more signals to read circuit 5) indicating that additional reads are required when the identified number of check node failures is greater than the decode threshold.
In response to the output indicating that additional reads are required, one or more additional reads are performed (111) to obtain one or more additional FEC blocks of read values. The additional reads of step 111 are reads of locations within a flash memory device 12 that are related to the memory cells in which the FEC block is stored. Reads in which more information is obtained relating to values that have previously been read are generally referred to as “soft reads” and the obtained information obtained from such reads is referred to as “soft-read values” and sometimes as “soft information.” Accordingly, the additional reads of step 111 are “soft reads” and they produce “soft-read values”.
In one example, read circuit 5 is configured to perform additional reads of the same addresses in flash memory devices 12 that were read in step 102 (e.g., using a conventional READ instruction).
In one example a first additional read of the stored FEC block is performed by sending a first threshold voltage shift read command indicating a negative threshold voltage shift to obtain a first additional FEC-block of soft-read values, and a second additional read is performed by sending a second threshold voltage shift read command indicating a positive threshold voltage shift to obtain a second additional FEC block of soft-read values. Also, a REREAD instruction could be used to obtain a soft-read of the stored FEC block. In yet another example the flash memory devices 12 perform two reads of the stored FEC block (Vt+, Vt−) in response to a reread instruction and the results of the two reads are XOR'd together to provide a single set of soft-read values that is output by flash memory devices 12.
In another example, each bit is read 3 times in exactly the same way. A voting scheme would then identify “strong” inputs (all 3 reads agree) and weak inputs where 2 reads are one sign and the third reads is of the opposite sign. The read values and the identifier are output as soft-read values output by flash memory devices 12.
The first FEC block of read values and the one or more additional FEC blocks of read values are received at the mapper 13 (112), where each bit of each of the one or more additional FEC blocks of read values is representative of a corresponding bit of the stored FEC block. The first FEC block of read values (e.g., the hard-read values) and the additional FEC blocks of read values (e.g., the soft-read values) are mapped (113) into soft-input values. Mapper 13 is configured to receive the first FEC block of read values and the additional FEC blocks of read values responsive to the generated output indicating that additional reads are required and configured for mapping the first FEC block of read values and the additional FEC blocks of read values into soft-input values.
In one example, the mapping process combines multiple reads for a given bit of information into a single decoder input value referred to as a “soft-input value”. The soft-input value indicates a probability (e.g., the probability of an input signal being a 1 or a 0). In the example shown in
Table 1 shows an example of different probability values Pn_m for each read condition, where n is the read condition (in this case the binary value of what is returned from 3 reads) and m is either 0 or 1 representing a real bit as a 0 or a 1, where Pn_0+Pn_1=1.0.
The probability data (e.g., Pn_m) may be gathered during characterization of the device, where a known sequence is written and then read back using 3 reads. These 3 reads are usually slightly different, i.e. a threshold voltage shift of the read voltage for each case. It is appreciated that the characterization process is performed in a test lab using similar devices (e.g., the same type of device, design of device, and possibly the same production run in the fabrication facility) prior to delivery of the device to a customer.
In one example, the identified probability data is used to calculate a single LLR value (Pn) using the equation: LLRn=log(Pn_0/Pn_1).
In one example, LUT 14 comprises an LLR mapping table that includes one or more values representing the read results (e.g., columns 1-3 of Table 1) and a corresponding probability value (e.g., a LLR value such as a LLR_n value shown in Table 1).
In another example, the soft mapping operation includes identifying a probability value corresponding to the read results by indexing the stored LLR mapping table, using the first FEC block of read values and the additional blocks of read values to identify a corresponding LLR value as a soft-input value.
A soft-decode process is performed (114) on the soft-input values to identify the decoded FEC block. A respective soft-input decode circuit 8 is configured to perform a soft-decode process on the soft-input values to identify the decoded FEC block. The hard-decode process and the soft-decode process may each perform any error correction code that allows for soft data input and processing such as, for example, a Viterbi code, a Soft Output Viterbi Algorithm (SOVA) code, a Turbo code or a Low-Density Parity-Check (LDPC) code.
In the event (115) that soft-decoding process of steps 110-114 fails, further efforts (not shown) may be employed to help recover the FEC block (116). The next steps, may be, for example, to perform additional soft-reads and combine more read information and then repeat the soft-decode process (114) again, to try different mapping on the soft-reads or to go to RAID as a last resort.
The hard-read/hard decode and soft-read/soft-decode process with early hard-decode exit of the present invention moves processing of potentially-difficult-to-decode blocks out of the hard-input decode circuits 7 early in the hard-decode process (before the hard-decode process has reached the maximum number of iterations), thus reducing the number of decode iterations and freeing up the hard-input decode circuits 7 for performing decode operations on other FEC blocks.
Line 31 of
The dashed line 32 that extends from A to C is target goodput for the method and apparatus of the present invention that can theoretically be obtained by adjusting the decode threshold of method 100 to balance the number of hard and soft decode operations so that maximum Goodput is obtained at each bit-error rate encountered during the life of the SSD 20. The vertical distance between dashed line 32 and solid line 31 represents the theoretical maximum improved goodput of the method and apparatus of the present invention as compared to a conventional prior art SSD.
In one example of the present invention, at the beginning of life of SSD 20, the decode threshold is set to a high value so that all decodes are performed using standard hard-input decoding (e.g., represented by line 31 from beginning of life to point A). As the input BER increases the throughput of the hard decode engines continues to decrease, at some point the hard decode throughput is insufficient to completely use all the available read bandwidth from the flash memory, resulting in a drop in utilization of flash BW. Also at this time decoder 11 issues a hard-decoder-full signal indicating that the hard decoders have become the throughput bottle-neck of the system (blocks are ready to decode but cannot be processed) and the full available read flash BW from the memory is not being utilized. When this happens the decode threshold is decreased by one so that more difficult FEC blocks will abandoned early and will be decoded using the soft-decode process 114 (maintaining the goodput as close as possible to line 32). This process continues until the decode threshold reaches a minimum value (e.g., the horizontal line between point B, point C and extending beyond C). As the decode threshold is decreased more flash BW is used, increasing Goodput as compared to prior art SSD's until point C is reached, which represents the point at which the method and apparatus of the present invention moves to all-soft decoding (because there is no point in continuing to do hard-decode processing and comparison of steps 101-107 of
Hard-input decode circuit 57 includes a first input coupled to receive FEC blocks of read values and a second input coupled to decode controller 59 for receiving an Early Termination Signal from decode controller 59. Hard-input decode circuit 57 also outputs a block status signal (e.g., decode failure or success, number of iterations required and correction statistics (the corrected zeroes and corrected ones for the FEC block)). Hard-input decode circuit 57 includes a first output coupled to a corresponding input of decode controller 59 for outputting an Iteration (Layer) Number signal that indicates the number of iterations and/or the number of layers processed in the current hard-decode process. A second output is coupled to a corresponding input of decode controller 59 for outputting a Failing CheckNode Count signal that indicates the cumulative number of check node failures in the decode operation.
Referring now to
In one example, based on incoming decode requests and block status signals from hard-input decode circuits 7, decode controller 9 is operable to identify when the hard-input decoding circuits 7 are full (e.g., when it is at full capacity and cannot process additional hard-input FEC blocks). When the hard-input decoding capacity of the decoder is determined to be full (e.g., when all hard-input decode circuits 7 are busy) the decode controller 9 is operable to generate an output to I/O circuit 2 indicating that hard-input decode circuits are full (e.g. a hard-decoder-full signal). The I/O circuit 2 then generates a corresponding output to host computer 16 indicating that that the hard-input decode circuits are full. In one example, when a request for decoding a new FEC block of hard-read values is received and decode controller 9 determines that all hard-input decode circuits 7 are busy, it is operable to generate the hard-decoder-full signal.
In the event that new user input is received that includes a new threshold control value (204) the decode threshold is updated (202) by identifying a decode threshold that corresponds to the new threshold control value. In one example the user is allowed to select from over 100 different code rates. Each time a new code rate value is received (205) the decode threshold is updated (202). The new decode threshold is then stored in one or more of data storage 6, in registers in decoder 11 and in hard-input decode circuit 57.
In one example, at the beginning of life the decode thresholds is set to a high value so that all decodes are performed using the hard-input decoding process. The user monitors the memory device goodput, and when the goodput drops below FB, i.e. below the full bandwidth, then the U is increased by one setting. There is no requirement that the increase be by a one setting, and in some embodiments the increase may be by more than one, without exceeding the scope of the present invention. This will lower the decode threshold so that difficult FEC blocks will be abandoned early and would then be decoded using the soft-input decoding process.
When a read instruction is received (206) from host device 16, the hard-read/hard decode and soft-read/soft-decode process with early hard-decode exit of method 100 is performed (207), as described above in relation to method 100, to identify the decoded FEC block. Once the decoded FEC block is identified (207), parity bits are removed from the decoded FEC block to obtain the originally stored data (208), which is then sent to input and output circuit 2, that is operable to output the originally stored data to the host device 16.
Method 200 allows the user to use the indication that all hard-input decode circuits 7 are full (203), along with other information that may be obtained by the user regarding performance, to balance the operations between soft-input decoding and hard-input decoding. The user may also allow a default automated control function of the decoder to control the selection of the threshold control value (in which case the threshold control value is initially set to a high value and is decreased each time all hard-input decode circuits 7 are full), as described in method 100 in relation to steps 120, 121.
A prior-art decode operation has the best 1-BR performance since each early-exit of the present invention is seen as a frame error. A high value for the decode threshold means that most FEC blocks will be permitted to continue hard-decoding since the number of failing check nodes will tend to fall below the high decode threshold value. As decode threshold (DT) decreases we begin to degrade the FER curve performance. The purpose for doing this is to improve SSD read performance by selectively discarding difficult hard-decode FEC blocks and converting them to soft-decode FEC blocks so that they can easily be decoded.
In one example, threshold control value U is a 4-bit value starting from zero that slowly moves the frame error rate vs BER for CR1 in
The number of check nodes in any H-matrix and code rate is dependent on a number of factors including but not limited to code rate, FEC block size and the H-Matrix for the block. In the example shown in
In one example, to compute the physical threshold values we can multiply the recommended percentage by the number of check nodes in the H-Matrix. For example, for CR1 we may have 2048 check nodes in the H-Matrix and for DTL1 we have a threshold of 16% so DT1=2048*0.16=327.
In one example, flash memory controller 10 is implemented in an integrated circuit as a single semiconductor die. Alternatively, the integrated circuit may include multiple semiconductor die that are electrically coupled together such as, for example, a multi-chip module that is packaged in a single integrated circuit package.
In various examples, portions of decoder 11 and/or flash memory controller 10 may be implemented in a Field Programmable Gate Array (FPGA) or Application Specific Integrated Circuit (ASIC). As would be appreciated by one skilled in the art, various functions of circuit elements may also be implemented as processing steps in a software program. Such software may be employed in, for example, a digital signal processor, a network processor, a microcontroller or general-purpose computer.
While examples and applications of this invention have been shown and described, it would be apparent to those skilled in the art that many more modifications than mentioned above are possible without departing from the inventive concepts herein. The invention, therefore, is not to be restricted except in the spirit of the appended claims.
Number | Date | Country | |
---|---|---|---|
62878280 | Jul 2019 | US |