US8880987B2 - Checksum using sums of permutation sub-matrices - Google Patents
Checksum using sums of permutation sub-matrices Download PDFInfo
- Publication number
- US8880987B2 US8880987B2 US13/558,846 US201213558846A US8880987B2 US 8880987 B2 US8880987 B2 US 8880987B2 US 201213558846 A US201213558846 A US 201213558846A US 8880987 B2 US8880987 B2 US 8880987B2
- Authority
- US
- United States
- Prior art keywords
- parity
- bits
- matrix
- checksum
- syndrome
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active, expires
Links
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/09—Error detection only, e.g. using cyclic redundancy check [CRC] codes or single parity bit
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1012—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/11—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
- H03M13/1102—Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
- H03M13/1105—Decoding
- H03M13/1128—Judging correct decoding and iterative stopping criteria other than syndrome check and upper limit for decoding iterations
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/11—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
- H03M13/1102—Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
- H03M13/1148—Structural properties of the code parity-check or generator matrix
- H03M13/116—Quasi-cyclic LDPC [QC-LDPC] codes, i.e. the parity-check matrix being composed of permutation or circulant sub-matrices
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/29—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes
- H03M13/2906—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes using block codes
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/29—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes
- H03M13/2906—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes using block codes
- H03M13/2927—Decoding strategies
Definitions
- the present disclosure is generally related to encoding data and decoding data.
- Flash memory has become increasingly popular in recent years. Flash memory is used in numerous applications including mobile phones, digital cameras, music players, and many other applications. A major emerging application is the use of flash memory as Solid State Disc (SSD). Such memories may be implemented using high density Multi-Level Cell (MLC) memories with redundancy such as advanced Error Correction Coding (ECC) schemes.
- MLC Multi-Level Cell
- ECC Error Correction Coding
- advanced ECC schemes include iterative coding schemes based on Low-Density Parity-Check (LDPC) or Turbo codes.
- Error correction codes are commonly used in memories in order to provide data reliability and integrity, by dealing with errors that are introduced by the physical medium during its programming or reading or during storage.
- An error correction code is a set of codewords that satisfy a given set of constraints.
- One commonly used class of error correction codes is the class of binary linear block codes, in which the code is defined through a set of parity-check constraints on the codeword bits.
- a binary linear block code is defined by a set of linear equations over the two-element Galois field GF(2) that a valid codeword should satisfy.
- Each element of the syndrome vector is associated with one of the parity check equations, and the value of the element is 0 for an equation that is satisfied by C and 1 for an equation that is not satisfied by C.
- the elements of the syndrome vector also are called “bits” of the syndrome vector herein.
- the syndrome weight (W s ) is the number of unsatisfied equations represented by the syndrome vector S. So, for a word to be a valid codeword the syndrome vector associated with the word must be all zeros and its syndrome weight must be 0.
- Error correction codes may be based on iterative coding schemes, such as LDPC and Turbo codes.
- decoding is performed using an iterative algorithm that iteratively updates its estimates of the codeword bits until the algorithm converges to a valid codeword.
- the iteratively updated estimates can be either “hard” estimates (1 vs. 0) or “soft” estimates, which are composed of an estimate of the bit's value (1 or 0), together with some reliability measure of the estimate indicating the probability that the estimated value is correct.
- a commonly used soft estimate is the Log Likelihood Ratio (LLR), the ratio of the probability of the bit being 0 to the probability of the bit being 1.
- LLR Log Likelihood Ratio
- a negative LLR means that the bit is estimated to be more likely to be 1 than 0.
- the absolute value of the LLR is an indication of the certainty of the estimate.
- An estimate of a bit may “flip”, meaning that the value of the bit estimate changes: for example, a hard estimate changes from 0 to 1 or from 1 to 0, or the sign of a LLR changes from positive to negative or from negative to positive. (Similarly, “flipping” a bit of a syndrome vector indicates changing the bit from 1 to 0 or from 0 to 1.)
- the decoder is initialized with initial a-priori (possibly “soft”) estimates of the bits. These estimates are then processed and updated iteratively.
- the decoding can terminate after a fixed number of iterations. Alternatively, a convergence detection mechanism can terminate the decoding once all the parity check constraints are satisfied by the current bit estimates.
- Another option for early decoding termination is by a “divergence” detection mechanism, which detects that the probability for decoder convergence is low and hence it is more efficient to terminate the current decoding attempt and retry decoding after updating the decoder initialization values.
- One option for performing such divergence detection is based on the current number of unsatisfied parity-check constraints being too high.
- Another option for divergence detection is based on the evolution of the number of unsatisfied parity-checks during decoding.
- the decoding may be repeated with updated initialization values, after changing certain parameters, such as the memory reading thresholds or reading resolution, such that the probability of successful decoding convergence in the repeated attempt is increased.
- a checksum may be performed on the resulting codeword to determine whether the decoding process has converged on an incorrect codeword.
- a codeword may encode data bits along with CRC parity bits corresponding to the data bits.
- performing CRC processing on a codeword that results from an iterative decoding process may introduce additional decoding delay.
- checksum structure allows for “on-the-fly” checksum computation without introducing post-iteration decoding delay.
- the checksum can be efficiently generated and is compatible with the data path of an LDPC decoder for Quasi-Cyclic LDPC (QC-LDPC) codes.
- QC-LDPC Quasi-Cyclic LDPC
- the checksum may be as effective as conventional CRC in detecting errors which were un-detected by the LDPC decoder.
- FIG. 1 is a block diagram of an iterative decoder
- FIG. 2 illustrates a first embodiment of circuitry for real-time decoder convergence detection
- FIG. 3 illustrates a first embodiment of a decoder for real-time decoder convergence detection
- FIG. 4 illustrates how the syndrome vector update block of FIG. 3 may be used to initialize the syndrome vector
- FIG. 5 illustrates a second embodiment of a decoder for real-time decoder convergence detection
- FIG. 6 is a block diagram of an encoder that uses both a checksum and an ECC
- FIG. 7 illustrates an expanded matrix for joint real-time decoder convergence detection and checksum computation
- FIG. 8 illustrates a system including a data storage device that includes a coding unit configured to perform CRC processing, where the CRC processing is based on sums of permutation matrices.
- FIG. 1 shows a block diagram of an iterative decoder 10 .
- Initial bit estimates are stored in a bit estimates random access memory (RAM) 12 .
- a read-only memory (ROM) 14 is used for storing a code description.
- ROM 14 may store an indication of which bits participate in each parity check constraint (i.e. ROM 14 stores the parity check matrix H that defines the code).
- the bit estimates are read from bit estimates RAM 12 through a routing layer 16 into several processing units 18 .
- Code description ROM 14 controls the routing of the bit estimates into processing units 18 .
- Processing units 18 update the bit estimates based on the parity-check constraints that the bits should satisfy.
- a scratchpad RAM 20 may be used by processing units 18 for storing temporary data required for updating the bit estimates.
- the updating of the bit estimates is done iteratively, one or more bit estimates at a time, where an iteration may involve updating the bit estimates based on all the parity-check constraints that the bit estimates should satisfy (i.e. “traversing” code description ROM 14 once).
- Decoding can terminate after a predetermined number of iterations or according to a convergence signal generated by a convergence detection block 22 , once convergence detection block 22 detects that all the parity check constraints are satisfied by the current bit estimates (for example, by testing whether the syndrome weight is zero).
- a decoding “iteration” may be defined as considering each of the parity-check equations that define the code, and updating the estimates of the codeword bits that are associated with each parity-check equation, according to a certain schedule, until all the parity check equations have been considered.
- LDPC decoding usually is formulated as message passing among the nodes of a “Tanner graph” whose edges connect nodes that represent the codeword bits with nodes that represent parity-checks that the codeword bits should satisfy. Examples of message-passing schedules for LDPC decoding on a Tanner graph include the following:
- Flash memories intended for applications such as SSD and mobile may require very high random input/output (I/O) performance. During reading, this implies usage of very fast ECC decoders.
- a fast convergence detection apparatus may be provided. Convergence detection block 22 enables faster decoding time (due to early termination) and lower energy consumption by decoder 10 .
- Dedicated processing may be performed at the end of each iteration in order to compute the syndrome vector, which may prolong the decoding time expense of decoding iterations.
- Iterative decoders that are based on serial schedules in which the parity-check equations of the code are processed one after another may perform semi-on-the-fly convergence detection. According to this approach, a counter holding the number of satisfied parity-checks is maintained. At the beginning of decoding this counter is set to zero.
- the code's parity-checks are traversed serially and iteratively and the bit estimates are updated based on each of the parity-checks.
- the syndrome bit of each parity-check is computed when the parity-check is traversed. If the syndrome bit is zero (i.e. the parity-check is satisfied) then the counter is incremented, otherwise, the counter is reset to zero.
- the counter is also reset to zero each time one of the codeword bits changes value, because previously computed syndrome bits are not valid anymore. Once the counter reaches M, (recall that M is the number of parity-check equations that the codeword should satisfy, which is the dimension of H), convergence is detected and decoding is terminated.
- This semi-on-the-fly convergence detection mechanism introduces little additional complexity. However, it provides delayed convergence detection, as it detects the convergence a full iteration after the decoder has converged to a valid codeword. The reason is that a full number of satisfied parity-checks are counted after the last bit to flip flips its value (as value flipping resets the counter).
- a full number of satisfied parity-checks are counted after the last bit to flip flips its value (as value flipping resets the counter).
- several iterations e.g. ten or more iterations
- adding one more iteration after the last bit flips may add 10% to the convergence time or less.
- low-error environments such as a fresh flash memory, one or two iterations may suffice for decoding a codeword, so that adding a full iteration after the last bit flip can add 50% to 100% to the decoding time.
- Real-time, “on-the-fly”, convergence testing may be provided. Such real-time convergence testing may be used for applications such as SSD and i-NAND to improve read throughputs. Real time convergence testing may be used in random I/O performance that may benefit from very fast decoders. Moreover, the random I/O performance may be measured when the Flash memory is fresh (low cycling) and its error rate is low. In this case, a decoder can converge to a valid codeword after only one or two iterations. In this case using convergence detection methods such as the semi-on-the-fly convergence detection method would introduce a delay of about one iteration, which would increase the decoding time by about 50% to 100%, which may degrade the random I/O performance.
- convergence detection methods such as the semi-on-the-fly convergence detection method would introduce a delay of about one iteration, which would increase the decoding time by about 50% to 100%, which may degrade the random I/O performance.
- a method of decoding a representation of a codeword that includes a plurality of codeword bits may include: (a) during at least one iteration, of an iterative decoding algorithm, in which respective estimates of the codeword bits are updated according to a schedule, computing a termination indication of the algorithm; and (b) testing the termination indication to determine whether to terminate the decoding; wherein the testing of the termination indication shows whether to terminate the decoding despite at least one of the respective estimates of the codeword bits having flipped during an immediately preceding traversal of the schedule.
- a decoder for decoding a representation of a codeword that includes a plurality of codeword bits, may comprise circuitry for: (a) during at least one iteration, of an iterative decoding algorithm, in which respective estimates of the codeword bits are updated according to a schedule, computing a termination indication of the algorithm; and (b) testing the termination indication to determine whether to terminate the decoding; wherein the testing of the termination indication shows whether to terminate the decoding despite at least one of the respective estimates of the codeword bits having flipped during an immediately preceding traversal of the schedule.
- a method of decoding a representation of a codeword that includes a plurality of codeword bits may include during each of at least one iteration of an iterative decoding algorithm: in response to a flipping of a respective estimate of one of the codeword bits: (a) updating a termination indication that is a function of a syndrome of the estimates of the codeword bits, the syndrome including a plurality of syndrome bits; and (b) testing the termination indication.
- a decoder for decoding a representation of a codeword that includes a plurality of codeword bits, may include circuitry for, during each of at least one iteration of an iterative decoding algorithm: in response to a flipping of a respective estimate of one of the codeword bits: (a) updating a termination indication that is a function of a syndrome of the estimates of the codeword bits, the syndrome including a plurality of syndrome bits; and (b) testing the termination indication.
- a representation of a codeword that includes a plurality of codeword bits may be decoded. What is decoded is a “representation” of a codeword and not an actual codeword because what is decoded is a codeword that may have become contaminated with noise and so is no longer a valid codeword.
- an application may be to recover data that has been stored in a nonvolatile memory such as a flash memory as one or more codewords but that has changed due to degradation of the flash memory over time or that has been changed by the process of reading the data from the memory.
- Another application may be to correct errors that accumulate in codewords transmitted via a noisy transmission channel. If the input to the methods is a valid codeword, there may be no need for decoding.
- a termination indication of the algorithm may be computed. That the termination indication is computed “during” the iteration means that at least some of the computations that produce the termination indication are performed before all the scheduled codeword bit estimate updates of the iteration have been completed. “Updating” a codeword bit estimate means performing operations on the estimate that are intended to improve the estimate. These operations may or may not flip the estimate. For example, updating a LLR estimate may only change the magnitude of the estimate without changing the sign of the estimate.
- the termination indication can be a convergence indication that is tested to determine whether the algorithm has converged by producing a valid codeword or a divergence indication that is tested to determine whether the algorithm is likely to not converge.
- the computation of the termination indication is such that the testing shows whether to terminate the decoding despite one or more of the codeword bit estimates having flipped during a traversal of the schedule that immediately precedes the testing.
- a “traversal” of a schedule means starting at a point in the schedule and returning to that point in the schedule. If the point is at the start or at the end of the schedule then the traversal is equivalent to an iteration; otherwise, the traversal crosses a boundary between two iterations.
- the termination indication may be computed during the iteration rather than after the iteration. Convergence may be indicated despite recent flips of one or more of the codeword bit estimates.
- the decoding may be terminated. Additionally or alternatively, if the testing of the termination indication indicates that the algorithm is likely to not converge, the decoding may be terminated.
- Testing of the termination indication during the iteration may be effected at least whenever a codeword bit estimate is flipped.
- Computing of the termination indication may include OR-ing all of a plurality of bits of an error correction syndrome.
- the termination indication may include the weight of the error correction syndrome.
- the testing of the termination indication includes comparing the weight of the error correction syndrome to a threshold. For convergence detection, the threshold is zero.
- the computing of the termination indication may include, in response to one of the codeword bit estimates being flipped, flipping every bit of the error correction syndrome that is influenced by that codeword bit estimate.
- An error correction syndrome bit is influenced by a codeword bit estimate if that codeword bit participates in the parity check equation of that error correction syndrome bit.
- the computing of the termination indication may include, in response to one of the codeword bit estimates being flipped, updating the error correction syndrome weight in accordance with the flips of the error correction syndrome bits that are influenced by the codeword bit estimate that is flipped.
- the flipping of the bit(s) of the error correction syndrome that is/are influenced by the codeword bit flip and/or the updating of the error correction syndrome weight may be substantially simultaneous with the codeword bit flip that triggers the updating of the error correction syndrome weight.
- the flipping of the bit(s) of the error correction syndrome that is/are influenced by the codeword bit flip and/or the updating of the error correction syndrome weight may be scheduled to be effected subsequent to the codeword bit flip that triggers the updating of the error correction syndrome.
- scheduling may include storing, in a queuing buffer such as a FIFO buffer, requests to flip every error correction syndrome bit that is influenced by the codeword bit flip.
- the decoding method may revert to another of the methods of terminating decoding that are discussed above.
- the error correction syndrome may be initialized before any of the iterations of the algorithm.
- the iterations during which the termination indication is computed may all be subsequent to the first iteration of the algorithm, and the error correction syndrome may be initialized during the first iteration of the algorithm.
- Such initializing may be combined with, and performed substantially simultaneously with, pre-scheduled flipping of error correction syndrome bits in response to the flipping of codeword bit estimates in the first iteration.
- At least a partial update of a checksum syndrome of the codeword bit estimates may be computed.
- a decoder for implementing a method for decoding a representation of a codeword that includes a plurality of codeword bits may include circuitry for implementing the method.
- the circuitry may include a plurality of XOR gates for computing all of a plurality of bits of an error correction syndrome and an OR gate for combining the outputs of the XOR gates.
- the termination indication may include the weight of the error correction syndrome.
- Testing of the termination indication may include comparing the weight of the error correction syndrome to a threshold, and the computing of the termination indication may include, in response to one of the codeword bit estimates being flipped, changing the sign of every bit of the error correction syndrome that is influenced by that codeword bit estimate.
- the threshold is zero.
- the circuitry may include an error correction syndrome update block for updating both the bits of the error correction syndrome and the weight of the error correction syndrome in response to flips of the codeword bit estimates.
- the circuitry may include a plurality of registers for storing the bits of the error correction syndrome, so that the updates of the error correction syndrome bits and of the error correction syndrome weight can be simultaneous with the updates of the codeword bits.
- the circuitry may include, instead of such registers, a random access memory for storing the bits of the error correction syndrome and a queuing buffer such as a FIFO buffer for scheduling the updates of the error correction bits and of the error correction syndrome weight, because if only a small portion of the codeword bit estimates are expected to be flipped when updated, then the updates of the error correction syndrome bits and of the error correction syndrome weight may be delayed relative to the updates of the codeword bits.
- the decoder may include circuitry for, during each iteration of the decoding algorithm in which the termination indication is computed, effecting at least a partial update of a checksum syndrome of the codeword bit estimates.
- the flipping of the estimate of a codeword bit during an iteration of an iterative decoding algorithm may be responded to by updating a termination indication that is a function of a syndrome of the codeword bit estimates and testing the updated termination indication.
- the termination indication can be a convergence indication that is tested to determine whether the algorithm has converged by producing a valid codeword or a divergence indication that is tested to determine whether the algorithm is likely to not converge.
- the convergence indication may be updated in response to a codeword bit flip rather than in response to finishing an iteration, and the convergence indication may be updated rather than being re-set in response to codeword bit flips.
- the decoding may be terminated. Additionally or alternatively, if the testing indicates that the algorithm is likely to not converge, the decoding may be terminated.
- the termination indication may be a function of a weight of the syndrome prior to the flipping of the codeword bit estimate and of each syndrome bit that is influenced by that codeword bit estimate.
- the updating and the testing may be effected before continuing the iteration.
- the iterative decoding algorithm is a LDPC message passing algorithm that, in each iteration, traverses all the parity-check nodes, and a codeword bit estimate may be flipped as a result of the message passing associated with one of the parity-check nodes, then the termination indication is updated and tested before any message are passed from any subsequent parity-check nodes.
- Real-time convergence detection may be implemented in iterative decoders.
- the impact of each codeword bit that is flipped during the decoding of the syndrome vector and syndrome weight may be calculated in real time (or almost in real time) by flipping all the syndrome bits corresponding to parity checks in which the flipped bit participates.
- Each parity check equation is represented by an XOR gate 30 whose inputs are the current bit estimates (represented as the circles in FIG. 2 ) of the bits participating in the parity-check equation.
- Each check equation XOR gate 30 outputs one of the syndrome bits.
- An OR operation is performed on the syndrome bits to produce a convergence detection signal. As soon as the convergence detection signal equals zero, the bit estimates constitute a valid codeword and the decoding can be terminated.
- the implementation depicted in FIG. 2 may include a complex interconnect layer which computes the syndrome bits, which may be difficult to implement for long codes.
- codes used in iterative coding schemes are usually based on sparse parity check matrices (hence the name “Low-Density” Parity-Check codes). This means that each bit participates in a small number of parity-check equations (usually between three and six parity checks on the average). This in turn simplifies the interconnect layer used for computing the syndrome bits.
- iterative coding schemes are usually based on very long codes. Hence, overall, the interconnect layer may be too complex for the implementation illustrated in FIG. 2 .
- Decoder 40 of FIG. 3 may be identical to decoder 10 of FIG. 1 , except for the substitution of convergence detection block 42 for the convergence detection block 22 of FIG. 2 .
- I [i 1 i 2 . . . i z ] denote the indices of the set of bits whose “soft” bit estimates are currently updated by the decoder's Z processing units 18 .
- ⁇ circumflex over (q) ⁇ z denote the “soft” bit estimates of these bits, prior to and after their updating by the processing units, respectively.
- S [s 0 s 1 , . . . s M ⁇ 1 ] T denote the syndrome vector (as a column vector) and W s the syndrome weight counter.
- Convergence detection block 42 operates as follows:
- the syndrome vector S and the syndrome weight counter W s are reset to zero prior to decoding.
- the initial syndrome vector and the initial syndrome weight are computed during decoder initialization based on the initial a-priori bit estimates.
- the syndrome vector S and the syndrome weight counter W s are updated accordingly. This is done by the syndrome vector update block 44 , which updates the relevant set of syndrome bits corresponding to parity-check constraints in which the current set of bits (with indices in I) participates.
- the parity-check matrix H is sparse and the average number of 1's in a column of H is small (typically between three and six), while the dimension M of H may be a few hundreds or thousands or more (i.e. a bit participates on the average in only between three and six parity-checks out of the M parity-checks of the code).
- M of H may be a few hundreds or thousands or more (i.e. a bit participates on the average in only between three and six parity-checks out of the M parity-checks of the code).
- S-ROM 48 outputs a set of syndrome bit indices J(I), corresponding to the parity-checks in which the codeword bits participate.
- LDPC codes e.g. quasi-cyclic LDPC codes
- H parity-check matrix
- the syndrome weight is updated in conjunction with updating of the syndrome vector.
- the syndrome weight is the sum of the elements of the syndrome vector.
- Initialization of the syndrome vector can be performed as follows: prior to decoding, the syndrome vector is reset and initialized with 0's. Then, the initial syndrome vector may be computed during decoder initialization, while filling bit estimates RAM 12 with the initial a-priori “soft” bit estimates. This can be done using syndrome vector update block 44 of FIG. 3 , as shown in FIG. 4 . During initialization, syndrome vector update block 44 may be driven by the vector of a-priori bit estimates, while during decoding syndrome vector update block 44 is driven by the vector of bit flips. Note that in the context of FIG. 4 , all bit indices I are “current”. Also note that in the context of FIG. 4 , the parameter “Z” denotes the number of a-priori “soft” bit estimates that are loaded simultaneously into bit estimates RAM 12 .
- Real-time convergence detection block 42 of FIG. 3 is less complex and less power consuming than the real time convergence detection circuitry of FIG. 2 .
- convergence detection block 42 may still result in relatively high implementation complexity.
- the main reason is that many syndrome bits may need to be updated simultaneously.
- the syndrome vector should not be stored in a low cost RAM (which would allow access to one or at most two addresses simultaneously) and should instead be stored in array 46 of M registers (where M can be in the order of a few hundreds or thousands or more).
- Decoder 50 of FIG. 5 may be identical to decoder 40 of FIG. 3 except for the substitution of convergence detection block 52 for convergence detection block 42 .
- the average frequency of bit flips is very low.
- a bit may flip once every 10 to 20 decoding clocks. There may still be a burst where several bits flip simultaneously (i.e. in a single clock, or in consecutive clocks), however this is a low probability event.
- each bit flip requires updating only a few syndrome bits (due to the sparseness of the parity-check matrix), in order to keep the syndrome vector updated.
- a FIFO buffer 54 can be used for storing and managing the bit flip “requests”, such that the syndrome vector updating will be done at low frequency, one or a few (e.g. Z) syndrome bits at a time.
- An advantage of this approach is real-time convergence detection, while having very low complexity and low power consumption. More specifically, the solution depicted in FIG. 5 does not store the syndrome vector in an array of registers—the syndrome vector can be stored in a low cost RAM (depicted as S-RAM 56 in FIG.
- Syndrome vector update block 45 of convergence detection block 52 is syndrome vector update block 44 of convergence detection block 42 , modified to manipulate the syndrome bits in SRAM 56 , in response to requests from FIFO buffer 54 , instead of in registers 46 .
- each time bit flipping is identified within the set of Z soft bit estimates that were updated by processing units 18 a request is inserted in FIFO buffer 54 for flipping the appropriate syndrome bits.
- This request includes a specification of which out of the Z bits flipped (e.g. Z indicator bits) and the indices (or index) of the current group of bits that generated the request.
- Syndrome vector update block 45 handles the request in FIFO buffer 54 one by one, as long as FIFO buffer 54 is not empty. Each request may be handled in several processing clocks.
- the request may be handled in d clocks, such that in each clock, S-ROM 48 outputs the address A of one syndrome bit (or one set of Z syndrome bits) within S-RAM 56 , corresponding to one of the d parity-checks in which the bit(s) participate(s).
- FIFO buffer 54 In order to avoid overflow of FIFO buffer 54 in case of a “burst” of bit flip requests (where each one may require several clocks to process), a sufficiently large FIFO buffer 54 should be allocated. Alternatively, a smaller FIFO buffer 54 can be used, and then in the (low probability) event that FIFO buffer 54 overflows, real-time convergence detection block 52 can be disabled. In this case decoder 50 may run until a maximal number of iterations, or revert to another conventional convergence detection method.
- Initialization of the syndrome vector in S-RAM 56 can be done as shown in FIG. 4 , during the initialization of decoder 50 , while filling bit estimates RAM 12 with the initial a-priori “soft” bit estimates.
- the initial syndrome vector can be computed one or few (e.g. Z) syndrome bits at a time, during the first decoding iteration, as during the first decoding iteration all the parity-checks are processed anyway. For example, consider a decoder operating according to a serial updating schedule, where the parity-checks of the code are processed one set of Z parity-checks after another, such that a parity-check involving r bits is processed in r clocks.
- the syndrome vector and syndrome weight counter are valid. From that point onward, only the track flip bits source updates the syndrome vector and syndrome weight counter and once the syndrome weight counter reaches zero, convergence is detected and decoding is terminated.
- the track flip bits source should update only syndrome bits of previously processed parity-checks. Starting from the second iteration until decoding termination, the track flip bits source updates all the syndrome bits.
- convergence detection block 52 becomes valid as a fast convergence detector only after the first decoding iteration finishes.
- decoder 50 is not expected to converge in less than one iteration anyway (unless the number of errors is zero or almost zero).
- convergence detection blocks 42 and 52 As their name implies, has been described for early detection of convergence.
- a modification of convergence detection blocks 42 and 52 turns them into divergence detection blocks.
- W s is compared to a non-zero threshold.
- this threshold is the value of W s at a corresponding point in the immediately preceding iteration.
- this threshold could be a value that W s is expected to not exceed at a given point in the iterative decoding if the iterative decoding is expected to converge.
- FIGS. 1-5 can also be used for fast testing of a checksum.
- a checksum is a code that is used for error detection. When implemented together with Error Correcting Codes, a system may achieve error rates of less than 10 ⁇ 14 for detected errors and less than 10 ⁇ 20 for undetected errors.
- An encoder employing a checksum and an ECC is illustrated in FIG. 6 .
- the output of the checksum encoder is a partial codeword that consists of the information bits concatenated with a checksum and the output of the ECC encoder is a full codeword that consists of the partial codeword concatenated with the ECC parity bits.
- a checksum may be implemented using a Cyclic Redundancy Code (CRC).
- CRC Cyclic Redundancy Code
- a CRC is a cyclic code that ensures that certain patterns of errors will be detected. Patterns detected by a CRC may include all odd number of errors, burst errors up to a given burst length, one or more other types of errors, or any combination thereof.
- a CRC may be encoded by embedding the information bits in a polynomial p(x), and multiplying by a generator polynomial g(x) in a certain polynomial ring to generate a code polynomial c(x).
- the process of computing the syndrome of the CRC via polynomial multiplication cannot be done on-the fly during conventional ECC decoding. It can instead be done after the ECC decoder finishes; hence it incurs additional decoding latency. In order to avoid this additional latency, the methods of real-time Syndrome computation described herein can be applied to real-time, on-the-fly, checksum computation.
- a checksum parity-check matrix may be defined for the partial codeword that is output from the checksum encoder of FIG. 6 .
- the checksum parity-check matrix is appended to the parity-check matrix of the ECC.
- the parity-check matrix of the ECC is extended by adding rows related to the parity-check matrix of the checksum. Since the ECC parity bits do not participate in the checksum code, all values relating to ECC parity bits are 0 in the additional rows that are related to the checksum.
- the expanded matrix has the form shown in FIG. 7 .
- a single unified parity-check matrix may be defined for the checksum and the ECC, and the methods described above can be used for computing a joint syndrome vector for both the checksum and ECC.
- the first M elements of the joint syndrome vector constitute the ECC syndrome vector S.
- the remaining elements of the joint syndrome vector constitute the CRC syndrome vector.
- the ECC syndrome vector may be called the “error correction” syndrome and the CRC syndrome vector may be called the “checksum” syndrome.
- the ECC parity-check matrix is usually sparse, while the checksum parity-check matrix should be dense. Hence, it may be efficient to use the mechanism depicted in FIG. 5 for updating the ECC syndrome vector (as it is based on the sparseness of the parity-check matrix) and to use the mechanism depicted in FIG. 3 for updating the CRC syndrome vector.
- Circuitry of a decoder device that implements a checksum may be simplified based on a particular checksum structure, when used in conjunction with Quasi-Cyclic LDPC (QC-LDPC) ECC codes. Such codes are suitable for use in communication and storage applications.
- the particular checksum structure allows for reusing the encoder/decoder data path and hence has very low implementation complexity. Moreover, it may be as effective as conventional CRC in detecting errors which were un-detected by the LDPC decoder.
- H the decoding matrix
- the ECC related part of H is a low-density parity-check matrix of an LDPC code.
- the LDPC code may be a QC-LDPC code, such that the low-density parity-check is a block matrix, where each block is a square matrix, and where each square matrix is either 0 or a cyclic permutation matrix (or a sum of cyclic permutation matrices in certain QC-LDPC code families).
- This structure i.e. a block matrix where each block is a square matrix and where each square matrix is either 0 or a cyclic permutation matrix
- This structure allows for very efficient hardware implementation of the LDPC decoder, as it simplifies routing of information (messages in the message passing decoding algorithm) from memories that store LDPC code information to computation units that process information during LDPC decoding.
- LDPC codes used in industry standards today (both the communications and storage applications) may be based on QC-LDPC codes.
- the checksum related part of H may also have a block structure, where each block element is either 0 or a sum of matrices of the form A k .
- the checksum related part of H may be an array of multiple block elements.
- Each block element may be a square matrix.
- Each square matrix may have a zero value for every element in the square matrix (i.e. a “0” block element) or may instead be a sum of matrices of the form A k .
- checksum matrix A matrix corresponding to the checksum (a “checksum matrix”) has the same structure as the QC-LDPC parity-check matrix, then this may imply that the checksum matrix may be expected to be a sparse matrix. However, in order for the checksum matrix to be able to detect with high probability error patterns that are not detected by the ECC (especially patterns with a small number of errors that may be undetected by an LDPC decoder), the checksum matrix should be a non-sparse matrix. However, these apparently contradicting requirements can be resolved, as described herein.
- checksum matrix comprised of 32 rows (32 checks).
- the LDPC code has a length of 1000 and has “minimal codeword weight” of 20 (i.e. has a codeword with only 20 bits equal to 1).
- a is a low weight codeword of the code, having weight w.
- a probability of this event may be determined as follows:
- a word a of length n and minimal weight w will not satisfy a random parity-check h with d 1 ⁇ s if
- the probability Q can be computed in closed form as follows:
- QC-LDPC matrix structure may be used for the checksum, and conventionally QC-LDPC matrices are sparse.
- a dense QC-LDPC matrix structure can be constructed that can be used for the checksum matrix and hence satisfy both requirements of having a high density matrix and a QC-LDPC structure (i.e. a block matrix based on permutation matrices).
- a checksum matrix may be generated as a block matrix that is composed of sub-matrices that are the sums of permutation sub-matrices.
- the permutation sub-matrices may be cyclic permutation sub-matrices, i.e. cyclically shifted versions of the identity matrix.
- checksum matrix may be constructed as follows:
- z denote the cyclic permutation block size (also known as lifting factor) of the QC-LDPC ECC code that is to be used in conjunction with the proposed checksum.
- k denote the number of information sub blocks of the QC-LDPC ECC to be used (i.e. an ECC with k ⁇ z information bits).
- encoding can be performed by encoding (k ⁇ 1) ⁇ z data bits using the dense checksum matrix ⁇ as a parity check matrix to generate a set of k ⁇ z encoded data bits, wherein the last ‘z’ bits constitute the checksum bits.
- the first encoded data bits may be further encoded using a parity check matrix H, wherein H is a sparse matrix comprised of sub-matrices H z of order z ⁇ z, and each of the sub-matrices is either a 0 matrix or a matrix of the form A n z for some integer n z or a sum of the form
- a checksum matrix ⁇ may be generated with a QC-LDPC structure, but with high density.
- the number of 1's in each parity-check equation (denoted as d) can be determined by the integers l i that define the checksum matrix ⁇ .
- the parameter d can be computed based on a required checksum detection probability, the number of checksum parity-checks (M) and the expected minimal codeword weight of the LDPC code (w) according to the analysis provided above.
- a checksum misdetection probability may be 3 ⁇ 10 ⁇ 10 .
- d c is the number of ⁇ i elements out of k which satisfy ⁇ i ⁇ 0
- checksum matrix has higher density than the LDPC parity-check matrix. (I.e. if the number of 1's in a parity-check of the LDPC parity-checks matrix (H) is r then d>>r). In an example implementation d ⁇ r ⁇ z/2.
- the unified parity matrix illustrated in FIG. 7 may include a single “strip” of the checksum parity-check matrix, i.e., the checksum parity-check matrix has z rows and may have k ⁇ z columns of non-zero elements.
- the “checksum section” may correspond to the CRC parity bits and therefore may be the z ⁇ z identity matrix rather than a sum of permutation matrices.
- Each of the remaining k ⁇ 1 blocks of the checksum parity matrix of FIG. 7 may be dense as compared to the sparse ECC parity-check matrix.
- a unified parity matrix may include multiple “strips” of checksum parity-check matrix, such as by having 2z rows, 3z rows, or more rows.
- One or more sub-matrices within the checksum parity-check matrix may be sparse—or zero—while continuing to provide substantive checksum strength. For example, if one checksum parity-check strip has a zero sub-matrix in a first position and a second checksum parity-check strip has a zero sub-matrix in a second position that does not coincide with the first position (i.e. the zero portions of the two checksum parity strips do not overlap), the checksum parity-check matrix including the first and second checksum parity-check strips may be sufficiently dense as a whole to satisfy CRC miss-detection probability requirements for a particular implementation.
- the system 800 includes a data storage device 802 .
- the data storage device 802 includes a memory 804 coupled to a controller 806 .
- the memory 804 (e.g. a NAND flash memory) includes storage elements, such as a representative group of storage elements 822 .
- An example of the group of storage elements 822 is a multilevel cell (MLC) word line.
- the data storage device 802 is selectively connected to a representative host device 830 .
- the data storage device 802 may be a solid state disc (SSD) device.
- the data storage device 802 may be a memory card, such as a Secure Digital SD® card, a microSD® card, a miniSDTM card (trademarks of SD-3C LLC, Wilmington, Del.), a MultiMediaCardTM (MMCTM) card (trademark of JEDEC Solid State Technology Association, Arlington, Va.), or a CompactFlash® (CF) card (trademark of SanDisk Corporation, Milpitas, Calif.).
- the data storage device 802 may be embedded memory in the host device 830 , such as eMMC® (trademark of JEDEC Solid State Technology Association, Arlington, Va.) and eSD, as illustrative examples.
- the controller 806 may be a memory controller that includes a coding unit 808 that is configured to perform checksums (such as CRC) based on sums of permutation matrices.
- the controller 806 may receive user data 832 from the host device 830 for storage and may retrieve data from the memory 804 and may communicate user data 832 that has been requested by the host device 830 . Thus, the controller 806 may communicate with the host device 830 and with the memory 804 .
- the coding unit 808 can be a decoder or an encoder.
- the coding unit 808 includes a CRC component 810 that is configured to perform CRC computations using sums of permutation matrices 812 .
- the permutation matrices 812 may be cyclic permutation matrices.
- the CRC component 810 may include the checksum parity-check matrix described with respect to FIG. 7 .
- the coding unit 808 may also include an ECC component, such as an LDPC component, illustrated as a QC-LDPC component 814 .
- the permutation matrices 812 may be used by the QC-LDPC component 814 and by the CRC component 810 .
- the coding unit 808 may implement the architecture illustrated in the decoder 10 of FIG. 1 and may include components such as RAM, ROM, and hardware processing devices. In some implementations, the coding unit 808 may be configured to perform convergence detection, such as described with respect to any of FIGS. 2-5 , or any combination thereof. In other implementations, the coding unit 808 may not be configured to perform convergence detection as described with respect to any of FIGS. 2-5 .
- the coding unit 808 may be configured to perform data encoding prior to storage of data at the memory 804 .
- the coding unit 808 may apply a CRC matrix that is based on sums of one or more of the permutation matrices 812 to received user data 832 to generate CRC parity for the user data 832 .
- the coding unit 808 may perform ECC encoding of the user data 832 and the CRC parity, such as via the QC-LDPC component 814 , to generate an ECC codeword that is sent to the memory 804 to be stored.
- the coding unit 808 may be configured to perform decoding of data retrieved from the memory 804 .
- the coding unit 808 may apply an ECC decoding operation, such as via the QC-LDPC component 814 , that may return a data word resulting from a convergence of an iterative decoding process.
- the data word may be provided to the CRC component 810 to compare CRC parity in the data word to CRC parity generated based on a user data portion of the data word.
- the CRC parity may be generated on-the-fly, such as described with respect to FIG. 5 .
- the controller 806 may be configured to update checksum syndrome values during an iteration of an iterative error correction coding (ECC) decoding operation of a representation of a codeword in response to determining that an estimation of a value of at least one of the data bits has changed.
- ECC error correction coding
- the controller 806 may include a convergence detector (e.g. the convergence detector 52 of FIG. 5 ) that is configured to generate a convergence signal in response to detecting that all ECC syndrome bits and all CRC syndrome bits associated with decoding the representation of the codeword have a zero value.
- the coding unit 808 is illustrated as including an ECC component such as the QC-LDPC component 814 , it should be recognized that in other embodiments the coding unit 808 may include the CRC component 810 based on sums of one or more of the permutation matrices 812 without also implementing an ECC component.
- a method for encoding data bits may be performed at a coding unit of a memory device, such as the coding unit 808 of the data storage device 802 .
- the method may include computing checksum parity bits based on the data bits.
- a set of equations satisfied by the data bits and the checksum parity bits corresponds to a dense parity-check matrix.
- each sub-matrix ⁇ i is defined as a sum of l i matrices A n ij .
- the dense parity-check matrix includes sums of permutation sub-matrices.
- the permutation sub-matrices may be cyclic permutation sub-matrices (e.g. each sub-matrix ⁇ i may be defined as a sum of l matrices A n ij ).
- a matrix may be considered “dense” in response to a percentage or proportion of the matrix's elements that have non-zero values exceeding a threshold.
- the threshold may be 10%, one-third, or one-half, as illustrative, non-limiting examples.
- the density of the parity-check matrix may correspond to a percentage of the matrix elements that have non-zero values.
- the dense parity-check matrix may include a number of elements.
- the dense parity-check matrix may have a density corresponding to at least ten percent of the number of elements being non-zero.
- the dense parity-check matrix may have a density corresponding to at least one-third of the number of elements being non-zero.
- the dense parity-check matrix may have a density corresponding to substantially half of the number of elements being non-zero.
- a matrix may be considered “dense” in response to a number of permutation sub-matrices that are summed to generate each block of the matrix being larger than a threshold (e.g. l i >threshold for every sub-matrix ⁇ i ).
- the threshold may be a number such as 1 or 2, or may be based on a sub-matrix dimension (e.g. l i >0.4z or l i ⁇ 0.5z), as illustrative, non-limiting examples.
- the dense parity-check matrix may have a density corresponding to each of the sums of the permutation sub-matrices being a sum of at least two of the permutation sub-matrices.
- the dense parity-check matrix may have a density corresponding to each of the sums of the permutation sub-matrices being a sum of more than two of the permutation sub-matrices.
- the dense parity-check matrix may have a density corresponding to each of the sums of the permutation sub-matrices being a sum of a number of the permutation sub-matrices, where the number of permutation sub-matrices is substantially half of a dimension of one of the permutation sub-matrices.
- a matrix may be considered “dense” in response to a ratio of a number of non-zero elements as compared to a total number of elements exceeding a density threshold.
- the dense parity-check matrix may have a density corresponding to a ratio of a number of non-zero elements of the dense parity-check matrix as compared to a total number of elements of the dense parity-check matrix, and the ratio exceeds a density threshold.
- the density threshold may be approximately 0.4.
- the dense parity-check matrix may be further constrained such that the ratio of non-zero elements to total elements is less than approximately 0.6.
- Error correction coding (ECC) parity bits may be computed based on data bits and checksum parity bits.
- a second set of equations (i.e. corresponding to the ECC parity check matrix of FIG. 7 ) satisfied by the data bits, the checksum parity bits, and the ECC parity bits may correspond to a sparse parity-check matrix.
- the sparse parity-check matrix may be limited to permutation sub-matrices and zero sub-matrices.
- a matrix may be considered “dense” based on a comparison to another matrix.
- the dense parity-check matrix may have a density that is at least twice a density of the sparse parity-check matrix.
- the dense parity-check matrix may have a density that is at least three times a density of the sparse parity-check matrix.
- the sparse parity-check matrix may have a density corresponding to a ratio of a number of non-zero elements of the sparse parity-check matrix as compared to a total number of elements of the sparse parity-check matrix.
- the ratio may less than a sparsity threshold.
- the sparsity threshold may be approximately 0.1.
- ⁇ is of order z ⁇ (k ⁇ z) and comprises k sub-matrices ⁇ 1 , ⁇ 2 , . . . , ⁇ k , where z and k are integers, where each sub-matrix ⁇ i is defined as a sum of l i matrices A n ij as:
- the method may also include encoding (k ⁇ 1) ⁇ z data bits using the parity check matrix ⁇ to generate a set of k ⁇ z first encoded data bits.
- the method may be performed at a coding unit of a data storage device, such as at the coding unit 808 of FIG. 8 .
- the method can also include encoding the first encoded data bits using a parity check matrix H, where H comprises sub-matrices H z of order z ⁇ z.
- H comprises sub-matrices H z of order z ⁇ z.
- Each of the sub-matrices H z may be either a 0 matrix or a matrix of the form A n z (n z is an integer).
- A may be generated by applying a cyclic permutation to rows or columns of the identity matrix of order z ⁇ z.
- l i is greater than or equal to c ⁇ z and c is a predefined number greater than or equal to 0.4.
- z may be greater than or equal to ten.
- a ratio of a number of non-zero elements in the matrix H as compared to a total number of elements of the matrix H may be less than 0.1.
- FIG. 8 depicts an implementation of CRC using sums of permutation matrices within a data storage device such as a flash memory card
- CRC using sums of permutation matrices may be implemented in other systems.
- a transmitter may generate CRC parity using sums of permutation matrices (with or without performing ECC encoding, such as QC-LDPC encoding) for transmission of a message over a communication system (e.g. over a wireless network, over a wireline network, or over any combination thereof).
- a receiver may generate a CRC syndrome to check an integrity of the received message (with or without performing ECC decoding, such as QC-LDPC decoding).
- components depicted herein may include one or more microprocessors, state machines, or other circuits configured to enable the components (e.g. the coding unit 808 of FIG. 8 ) to perform the particular functions attributed to such components.
- the CRC component 810 may represent physical components, such as hardware controllers, state machines, logic circuits, or other structures, to enable the coding unit 808 to perform CRC operations using sums of one or more permutation matrices.
- the coding unit 808 may include dedicated hardware (i.e. circuitry) to implement the CRC component 810 .
- the coding unit 808 may implement the CRC component 810 using one or more hardware processing units, such as the processors 18 illustrated in FIG. 1 .
- the coding unit 808 includes instructions that are executed by the processors 18 or other processors, and the instructions are stored at the memory 804 .
- instructions that are executed by a processor that may be included in the coding unit 808 may be stored at a separate memory location that is not part of the memory 804 , such as at a read-only memory (ROM).
- ROM read-only memory
- the data storage device 802 including the coding unit 808 may be implemented in a portable device configured to be selectively coupled to one or more external devices.
- the data storage device 802 including the coding unit 808 may be attached or embedded within one or more host devices, such as within a housing of a host portable communication device.
- the data storage device 802 including the coding unit 808 may be within a packaged apparatus such as a wireless telephone, a personal digital assistant (PDA), a gaming device or console, a portable navigation device, or other device that uses internal non-volatile memory.
- PDA personal digital assistant
- the coding unit 808 may be coupled to or used in connection with a non-volatile memory, such as a three-dimensional (3D) memory, flash memory (e.g., NAND, NOR, Multi-Level Cell (MLC), Divided bit-line NOR (DINOR), AND, high capacitive coupling ratio (HiCR), asymmetrical contactless transistor (ACT), or other flash memories), an erasable programmable read-only memory (EPROM), an electrically-erasable programmable read-only memory (EEPROM), a read-only memory (ROM), a one-time programmable memory (OTP), or any other type of memory.
- a non-volatile memory such as a three-dimensional (3D) memory, flash memory (e.g., NAND, NOR, Multi-Level Cell (MLC), Divided bit-line NOR (DINOR), AND, high capacitive coupling ratio (HiCR), asymmetrical contactless transistor (ACT), or other flash memories), an erasable programmable read
Landscapes
- Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Probability & Statistics with Applications (AREA)
- Mathematical Physics (AREA)
- Quality & Reliability (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Error Detection And Correction (AREA)
- Detection And Correction Of Errors (AREA)
Abstract
Description
where ai are the bits of a (w of the bits are 1 and the others 0), and hi are the check bits (d of the check bits are 1 and the others 0).
can be computed as follows:
p=pr(a i h i=1)=pr(h i=1)=d/n
can be computed as the probability of having an odd number of aihi terms equal to 1 (out of the w terms that may be equal to 1). This probability is given by:
Probability of checksum missdetection=(1−Q)M
for a set of integers nzi
Σ=(Σ1 Σ2 . . . Σk)
Claims (20)
Σ=(Σ1 Σ2 . . . Σk);
Priority Applications (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020147004642A KR101854954B1 (en) | 2011-07-29 | 2012-07-26 | Checksum using sums of permutation sub-matrices |
EP12743338.1A EP2737630A2 (en) | 2011-07-29 | 2012-07-26 | Checksum using sums of permutation sub-matrices |
US13/558,846 US8880987B2 (en) | 2011-07-29 | 2012-07-26 | Checksum using sums of permutation sub-matrices |
PCT/US2012/048364 WO2013019560A2 (en) | 2011-07-29 | 2012-07-26 | Checksum using sums of permutation sub-matrices |
TW101127332A TW201319800A (en) | 2011-07-29 | 2012-07-27 | Checksum using sums of permutation sub-matrices |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201161513186P | 2011-07-29 | 2011-07-29 | |
US13/558,846 US8880987B2 (en) | 2011-07-29 | 2012-07-26 | Checksum using sums of permutation sub-matrices |
Publications (2)
Publication Number | Publication Date |
---|---|
US20130031440A1 US20130031440A1 (en) | 2013-01-31 |
US8880987B2 true US8880987B2 (en) | 2014-11-04 |
Family
ID=47598292
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US13/558,846 Active 2032-12-06 US8880987B2 (en) | 2011-07-29 | 2012-07-26 | Checksum using sums of permutation sub-matrices |
Country Status (5)
Country | Link |
---|---|
US (1) | US8880987B2 (en) |
EP (1) | EP2737630A2 (en) |
KR (1) | KR101854954B1 (en) |
TW (1) | TW201319800A (en) |
WO (1) | WO2013019560A2 (en) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140164867A1 (en) * | 2012-12-07 | 2014-06-12 | Micron Technology, Inc. | Stopping criteria for layered iterative error correction |
US20170041027A1 (en) * | 2013-10-28 | 2017-02-09 | Topcon Positioning Systems, Inc. | Method and device for measuring the current signal-to-noise ratio when decoding ldpc codes |
US9747790B1 (en) * | 2016-02-12 | 2017-08-29 | King Fahd University Of Petroleum And Minerals | Method, device, and computer-readable medium for correcting at least one error in readings of electricity meters |
US10348334B2 (en) | 2016-10-25 | 2019-07-09 | International Business Machines Corporation | Reducing a decoding error floor by post-processing codewords encoded by binary symmetry-invariant product codes |
US10379952B2 (en) * | 2017-06-16 | 2019-08-13 | Western Digital Technologies, Inc. | Data recovery and regeneration using parity code |
US10998920B1 (en) | 2020-02-26 | 2021-05-04 | Apple Inc. | Overcoming saturated syndrome condition in estimating number of readout errors |
US11088712B2 (en) | 2019-11-05 | 2021-08-10 | Western Digital Technologies, Inc. | Iterative decoder performance prediction using machine learning |
US20220190845A1 (en) * | 2020-12-16 | 2022-06-16 | SK Hynix Inc. | Oscillation detection and mitigation in bit-flipping decoders |
US11621727B2 (en) | 2021-06-04 | 2023-04-04 | SK Hynix Inc. | Decoding systems and methods for local reinforcement |
Families Citing this family (49)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8782487B2 (en) * | 2012-04-18 | 2014-07-15 | Lsi Corporation | Systems and methods for locating and correcting decoder mis-corrections |
US8782488B2 (en) * | 2012-04-20 | 2014-07-15 | Lsi Corporation | Systems and methods for back step data decoding |
TWI477104B (en) * | 2012-09-13 | 2015-03-11 | Mstar Semiconductor Inc | Apparatus and method for correcting error |
KR102068030B1 (en) * | 2012-12-11 | 2020-01-20 | 삼성전자 주식회사 | Memory controller and operating method of the same |
WO2014109756A1 (en) | 2013-01-11 | 2014-07-17 | Empire Technology Development Llc | Page allocation for flash memories |
US9214959B2 (en) | 2013-02-19 | 2015-12-15 | Avago Technologies General Ip (Singapore) Pte. Ltd. | Systems and methods for skip layer data decoding |
WO2014133490A1 (en) | 2013-02-27 | 2014-09-04 | Empire Technology Development Llc | Linear programming based decoding for memory devices |
WO2014139123A1 (en) * | 2013-03-14 | 2014-09-18 | Qualcomm Incorporated | Method and apparatus of ldpc decoder with lower error floor |
CN103259543A (en) * | 2013-04-16 | 2013-08-21 | 荣成市鼎通电子信息科技有限公司 | Deep space communication quasi-cyclic LDPC code generator polynomial parallel generating device |
CN105164646B (en) * | 2013-04-30 | 2019-06-07 | 西部数据技术公司 | The decoder of termination detection is decoded with early stage |
US9274889B2 (en) | 2013-05-29 | 2016-03-01 | Avago Technologies General Ip (Singapore) Pte. Ltd. | Systems and methods for data processing using global iteration result reuse |
US8959414B2 (en) | 2013-06-13 | 2015-02-17 | Lsi Corporation | Systems and methods for hybrid layer data decoding |
US8917466B1 (en) | 2013-07-17 | 2014-12-23 | Lsi Corporation | Systems and methods for governing in-flight data sets in a data processing system |
US8817404B1 (en) | 2013-07-18 | 2014-08-26 | Lsi Corporation | Systems and methods for data processing control |
US9196299B2 (en) | 2013-08-23 | 2015-11-24 | Avago Technologies General Ip (Singapore) Pte. Ltd. | Systems and methods for enhanced data encoding and decoding |
US8908307B1 (en) | 2013-08-23 | 2014-12-09 | Lsi Corporation | Systems and methods for hard disk drive region based data encoding |
US10108483B2 (en) * | 2013-08-26 | 2018-10-23 | Samsung Electronics Co., Ltd. | Computing system with error handling mechanism and method of operation thereof |
US9400797B2 (en) | 2013-09-17 | 2016-07-26 | Avago Technologies General Ip (Singapore) Pte. Ltd. | Systems and methods for recovered data stitching |
US9229801B2 (en) * | 2013-09-24 | 2016-01-05 | Sandisk Technologies Inc. | Method and device for write abort protection |
US9219503B2 (en) | 2013-10-16 | 2015-12-22 | Avago Technologies General Ip (Singapore) Pte. Ltd. | Systems and methods for multi-algorithm concatenation encoding and decoding |
US9323606B2 (en) | 2013-11-21 | 2016-04-26 | Avago Technologies General Ip (Singapore) Pte. Ltd. | Systems and methods for FAID follower decoding |
WO2015088552A1 (en) * | 2013-12-13 | 2015-06-18 | Empire Technology Development Llc | Low-complexity flash memory data-encoding techniques using simplified belief propagation |
KR102108386B1 (en) * | 2013-12-23 | 2020-05-08 | 삼성전자주식회사 | Storage device and data encoding and decoding methods thereof |
RU2014104571A (en) | 2014-02-10 | 2015-08-20 | ЭлЭсАй Корпорейшн | SYSTEMS AND METHODS FOR AN EFFECTIVE PERFORMANCE AREA FOR DATA ENCODING |
US9378765B2 (en) | 2014-04-03 | 2016-06-28 | Seagate Technology Llc | Systems and methods for differential message scaling in a decoding process |
US20160335160A1 (en) * | 2014-04-03 | 2016-11-17 | Empire Technology Development Llc | Memory device with speculated bit flip threshold |
TWI541820B (en) * | 2014-07-10 | 2016-07-11 | 群聯電子股份有限公司 | Decoding method, memory controlling circuit unit and memory storage device |
US20160087653A1 (en) * | 2014-07-28 | 2016-03-24 | Lsi Corporation | Decoder With Targeted Symbol Flipping Recovery Of Miscorrected Codewords |
US9595977B2 (en) | 2014-09-29 | 2017-03-14 | Apple Inc. | LDPC decoder with efficient circular shifters |
CN106209114B (en) * | 2015-04-29 | 2019-11-12 | 深圳忆联信息***有限公司 | Interpretation method and device |
US9742439B1 (en) * | 2015-06-08 | 2017-08-22 | Microsemi Solutions (U.S.), Inc. | Method and device for forward error correction decoder system utilizing orthogonality of an H matrix |
DE102015111729B4 (en) * | 2015-07-20 | 2017-03-30 | Infineon Technologies Ag | PROCEDURE AND DECODER FOR DETERMINING AN ERROR VECTOR FOR A DATA WORD ACCORDING TO A REED-MULLER CODE |
US10075190B2 (en) * | 2015-10-27 | 2018-09-11 | Sandisk Technologies Llc | Adaptive scheduler for decoding |
US10128869B2 (en) * | 2016-05-17 | 2018-11-13 | Apple Inc. | Efficient convergence in iterative decoding |
TWI631830B (en) * | 2016-12-30 | 2018-08-01 | 慧榮科技股份有限公司 | Decoding method and related apparatus |
US10409732B2 (en) * | 2017-05-31 | 2019-09-10 | Nxp Usa, Inc. | Sparse matrix accelerator |
EP3419180B1 (en) * | 2017-06-19 | 2022-11-02 | Universite De Bretagne Sud | Simplified, presorted, syndrome-based, extended min-sum (ems) decoding of non-binary ldpc codes |
US20190166624A1 (en) * | 2017-11-28 | 2019-05-30 | Huawei Technologies Canada Co., Ltd. | Systems and methods for communication resource usage control |
US10599517B2 (en) * | 2017-11-29 | 2020-03-24 | Taiwan Semiconductor Manufacturing Co., Ltd. | Memory device |
CN107911123B (en) * | 2017-12-09 | 2019-09-17 | 天津大学 | For the coding method of the low-density parity check code of deep space application |
TWI707231B (en) * | 2018-09-28 | 2020-10-11 | 大陸商深圳大心電子科技有限公司 | Decoder design method and storage controller |
US11468068B2 (en) | 2018-12-28 | 2022-10-11 | Verizon Patent And Licensing Inc. | Method and system for concurrent generation of data sketches |
US11468086B2 (en) * | 2018-12-28 | 2022-10-11 | Verizon Patent And Licensing Inc. | Method and system for concurrent generation of data sketches |
US10979072B2 (en) * | 2019-03-19 | 2021-04-13 | Western Digital Technologies, Inc. | Punctured bit estimation and bit error rate estimation |
US10944429B1 (en) * | 2020-01-02 | 2021-03-09 | Silicon Motion, Inc. | Data accessing method using data protection with aid of parity check matrix having partial sequential information, and associated apparatus |
US12034454B2 (en) * | 2020-03-23 | 2024-07-09 | Telefonaktiebolaget Lm Ericsson (Publ) | Verifying data integrity in a receiver |
US11349498B2 (en) | 2020-10-08 | 2022-05-31 | Micron Technology, Inc. | Bit flipping low-density parity-check decoders with low error floor |
CN112821895B (en) * | 2021-04-16 | 2021-07-09 | 成都戎星科技有限公司 | Code identification method for realizing high error rate of signal |
US20240120947A1 (en) * | 2022-10-07 | 2024-04-11 | Micron Technology, Inc. | Error detection and classification at a host device |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6070182A (en) * | 1998-06-05 | 2000-05-30 | Intel Corporation | Data processor having integrated boolean and adder logic for accelerating storage and networking applications |
US6658478B1 (en) * | 2000-08-04 | 2003-12-02 | 3Pardata, Inc. | Data storage system |
WO2008021930A2 (en) | 2006-08-11 | 2008-02-21 | Distribution Control Systems | Method of correcting message errors using cyclic redundancy checks |
US20090282316A1 (en) | 2008-05-07 | 2009-11-12 | Texas Instruments Incorporated | Memory Access in Low-Density Parity Check Decoders |
US7669109B2 (en) * | 2002-08-15 | 2010-02-23 | Texas Instruments Incorporated | Hardware-efficient low density parity check code for digital communications |
US7805652B1 (en) | 2006-02-10 | 2010-09-28 | Marvell International Ltd. | Methods for generating and implementing quasi-cyclic irregular low-density parity check codes |
US20110029835A1 (en) | 2009-07-30 | 2011-02-03 | Lsi Corporation | Systems and Methods for Quasi-Cyclic LDPC Code Production and Decoding |
US8381083B2 (en) * | 2009-10-22 | 2013-02-19 | Arm Limited | Error control coding for single error correction and double error detection |
US8464123B2 (en) * | 2009-05-07 | 2013-06-11 | Ramot At Tel Aviv University Ltd. | Matrix structure for block encoding |
US8612834B2 (en) * | 2011-03-08 | 2013-12-17 | Intel Corporation | Apparatus, system, and method for decoding linear block codes in a memory controller |
-
2012
- 2012-07-26 WO PCT/US2012/048364 patent/WO2013019560A2/en active Application Filing
- 2012-07-26 US US13/558,846 patent/US8880987B2/en active Active
- 2012-07-26 EP EP12743338.1A patent/EP2737630A2/en not_active Withdrawn
- 2012-07-26 KR KR1020147004642A patent/KR101854954B1/en active IP Right Grant
- 2012-07-27 TW TW101127332A patent/TW201319800A/en unknown
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6070182A (en) * | 1998-06-05 | 2000-05-30 | Intel Corporation | Data processor having integrated boolean and adder logic for accelerating storage and networking applications |
US6658478B1 (en) * | 2000-08-04 | 2003-12-02 | 3Pardata, Inc. | Data storage system |
US7669109B2 (en) * | 2002-08-15 | 2010-02-23 | Texas Instruments Incorporated | Hardware-efficient low density parity check code for digital communications |
US7805652B1 (en) | 2006-02-10 | 2010-09-28 | Marvell International Ltd. | Methods for generating and implementing quasi-cyclic irregular low-density parity check codes |
WO2008021930A2 (en) | 2006-08-11 | 2008-02-21 | Distribution Control Systems | Method of correcting message errors using cyclic redundancy checks |
US20090282316A1 (en) | 2008-05-07 | 2009-11-12 | Texas Instruments Incorporated | Memory Access in Low-Density Parity Check Decoders |
US8464123B2 (en) * | 2009-05-07 | 2013-06-11 | Ramot At Tel Aviv University Ltd. | Matrix structure for block encoding |
US20110029835A1 (en) | 2009-07-30 | 2011-02-03 | Lsi Corporation | Systems and Methods for Quasi-Cyclic LDPC Code Production and Decoding |
US8381083B2 (en) * | 2009-10-22 | 2013-02-19 | Arm Limited | Error control coding for single error correction and double error detection |
US8612834B2 (en) * | 2011-03-08 | 2013-12-17 | Intel Corporation | Apparatus, system, and method for decoding linear block codes in a memory controller |
Non-Patent Citations (6)
Title |
---|
Han, Guojun et al. "A Unified Early Stopping Criterion for Binary and Nonbinary LDPC Codes Based on Check-Sum Variation Patterns," IEEE Communications Letters, vol. 14, No. 11, Nov. 2010, pp. 1053-1055. |
International Preliminary Report on Patentability for International Application No. PCT/US2012/048364, issued Feb. 4, 2014, 9 pages. |
Kwon, Yeong-Hyeon. "A New LDPC Decoding Algorithm Aided by Segmented CRCs for Erasure Channels," IEEE Proceedings of the 61st Vehicular Technology Conference, VTC2005-Spring, Stockholm, Sweden, May 30, 2005-Jun. 1, 2005, vol. 1, pp. 705-708. |
Kwon, Yeong-Hyeon. "A New LDPC Decoding Algorithm Aided by Segmented CRCs for Erasure Channels," IEEE Proceedings of the 61st Vehicular Technology Conference, VTC2005—Spring, Stockholm, Sweden, May 30, 2005-Jun. 1, 2005, vol. 1, pp. 705-708. |
Spencer, Quentin H. "Error Correction Using a Message-Passing Decoder to Process Cyclic Redundancy Checks," IEEE Global Telecommunications Conference, GLOBECOM 2006, Nov. 1, 2006, 5 pages. |
The International Search Report and Written Opinion mailed Mar. 19, 2013 in International Application No. PCT/US2012/048364, 15 pages. |
Cited By (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10193577B2 (en) | 2012-12-07 | 2019-01-29 | Micron Technology, Inc. | Stopping criteria for layered iterative error correction |
US9116822B2 (en) * | 2012-12-07 | 2015-08-25 | Micron Technology, Inc. | Stopping criteria for layered iterative error correction |
US11405058B2 (en) | 2012-12-07 | 2022-08-02 | Micron Technology, Inc. | Stopping criteria for layered iterative error correction |
US20140164867A1 (en) * | 2012-12-07 | 2014-06-12 | Micron Technology, Inc. | Stopping criteria for layered iterative error correction |
US10998923B2 (en) | 2012-12-07 | 2021-05-04 | Micron Technology, Inc. | Stopping criteria for layered iterative error correction |
US20170041027A1 (en) * | 2013-10-28 | 2017-02-09 | Topcon Positioning Systems, Inc. | Method and device for measuring the current signal-to-noise ratio when decoding ldpc codes |
US9793928B2 (en) * | 2013-10-28 | 2017-10-17 | Topcon Positioning Systems, Inc. | Method and device for measuring the current signal-to-noise ratio when decoding LDPC codes |
US9792812B1 (en) * | 2016-02-12 | 2017-10-17 | King Fahd University Of Petroleum And Minerals | Method for correcting electricity meter readings |
US20180005519A1 (en) * | 2016-02-12 | 2018-01-04 | King Fahd University Of Petroleum And Minerals | Method for electrical energy meter correction in customer-distribution grid |
US9842494B1 (en) * | 2016-02-12 | 2017-12-12 | King Fahd University Of Petroleum And Minerals | Method for electrical energy meter correction in customer-distribution grid |
US20170323561A1 (en) * | 2016-02-12 | 2017-11-09 | King Fahd University Of Petroleum And Minerals | Method for correcting electricity meter readings |
US9747790B1 (en) * | 2016-02-12 | 2017-08-29 | King Fahd University Of Petroleum And Minerals | Method, device, and computer-readable medium for correcting at least one error in readings of electricity meters |
US10348334B2 (en) | 2016-10-25 | 2019-07-09 | International Business Machines Corporation | Reducing a decoding error floor by post-processing codewords encoded by binary symmetry-invariant product codes |
US10379952B2 (en) * | 2017-06-16 | 2019-08-13 | Western Digital Technologies, Inc. | Data recovery and regeneration using parity code |
US11088712B2 (en) | 2019-11-05 | 2021-08-10 | Western Digital Technologies, Inc. | Iterative decoder performance prediction using machine learning |
US10998920B1 (en) | 2020-02-26 | 2021-05-04 | Apple Inc. | Overcoming saturated syndrome condition in estimating number of readout errors |
US20220190845A1 (en) * | 2020-12-16 | 2022-06-16 | SK Hynix Inc. | Oscillation detection and mitigation in bit-flipping decoders |
US11456757B2 (en) * | 2020-12-16 | 2022-09-27 | SK Hynix Inc. | Oscillation detection and mitigation in bit-flipping decoders |
US11621727B2 (en) | 2021-06-04 | 2023-04-04 | SK Hynix Inc. | Decoding systems and methods for local reinforcement |
Also Published As
Publication number | Publication date |
---|---|
EP2737630A2 (en) | 2014-06-04 |
US20130031440A1 (en) | 2013-01-31 |
KR20140078610A (en) | 2014-06-25 |
WO2013019560A3 (en) | 2013-07-11 |
WO2013019560A2 (en) | 2013-02-07 |
KR101854954B1 (en) | 2018-05-04 |
TW201319800A (en) | 2013-05-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8880987B2 (en) | Checksum using sums of permutation sub-matrices | |
US8645810B2 (en) | Fast detection of convergence or divergence in iterative decoding | |
US11005499B2 (en) | LDPC decoder, semiconductor memory system, and operating method thereof | |
US9490849B1 (en) | Systems and methods for configuring product codes for error correction in a hard disk drive | |
US8984376B1 (en) | System and method for avoiding error mechanisms in layered iterative decoding | |
US10103749B2 (en) | LDPC decoder, semiconductor memory system and operating method thereof | |
US9170877B2 (en) | Resolving trapping sets | |
US10484008B2 (en) | Memory system with on-the-fly error detection and termination and operating method thereof | |
US10879935B2 (en) | LDPC decoder, semiconductor memory system, and operating method thereof | |
CN109586731B (en) | System and method for decoding error correction codes | |
KR102556479B1 (en) | Ldpc decoder, semiconductor memory system and operating method thereof | |
US10200063B2 (en) | Memory controller, semiconductor memory system and operating method thereof | |
US10320421B2 (en) | Method and device for error correction coding based on high-rate generalized concatenated codes | |
KR20210115961A (en) | Ldpc decoder and operating method thereof | |
JP2019057752A (en) | Memory system | |
US10846170B2 (en) | Decoder, operating method thereof and memory system including the decoder | |
JP2020046823A (en) | Memory system | |
WO2023246473A1 (en) | Decoding method, chip and related apparatus | |
CN112133359B (en) | Error characterization for NAND flash memory | |
US11387845B2 (en) | LDPC decoder, operating method of LDPC decoder, and semiconductor memory system | |
KR102530269B1 (en) | Ldpc decoder, semiconductor memory system and operating method thereof | |
CN117632573A (en) | Memory controller and bit flipping method of low-density parity check code | |
TWI547103B (en) | Low density parity-check code decoder and decoding method thereof | |
Chang | Joint Decoding of Content-Replicated Codes on AWGNC for Flash Memory |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
AS | Assignment |
Owner name: SANDISK TECHNOLOGIES INC., TEXAS Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:SHARON, ERAN;ALROD, IDAN;SIGNING DATES FROM 20120725 TO 20120726;REEL/FRAME:028647/0534 |
|
STCF | Information on status: patent grant |
Free format text: PATENTED CASE |
|
AS | Assignment |
Owner name: SANDISK TECHNOLOGIES LLC, TEXAS Free format text: CHANGE OF NAME;ASSIGNOR:SANDISK TECHNOLOGIES INC;REEL/FRAME:038807/0898 Effective date: 20160516 |
|
MAFP | Maintenance fee payment |
Free format text: PAYMENT OF MAINTENANCE FEE, 4TH YEAR, LARGE ENTITY (ORIGINAL EVENT CODE: M1551) Year of fee payment: 4 |
|
MAFP | Maintenance fee payment |
Free format text: PAYMENT OF MAINTENANCE FEE, 8TH YEAR, LARGE ENTITY (ORIGINAL EVENT CODE: M1552); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY Year of fee payment: 8 |