# Patent

## Title
Syndrome computation in a layered low density parity check decoder

## Abstract

Apparatuses and methods associated with instant syndrome computation in a layered LDPC decoder are described. In one embodiment an apparatus includes a first hardware layer configured to compute a first group of syndrome values from one or more bit values in the codeword and a second hardware layer configured to compute a second group of syndrome values from one or more bit values in the codeword. The apparatus also includes a first physical memory associated with the first hardware layer and configured to store the first group of syndrome values until the syndrome values change due to a change in a codeword bit value. The apparatus also includes a second physical memory associated with the second hardware layer and configured to store the second group of syndrome values until the syndrome values change due to a change in a codeword bit value.

## Background
CROSS REFERENCE TO RELATED APPLICATIONS
This disclosure is a continuation of U.S. patent application Ser. No. 12/987,419 filed on Jan. 10, 2011, now U.S. Pat. No. 8,751,912; which claims the benefit of U.S. provisional application Ser. No. 61/294,421 filed on Jan. 12, 2010, which are hereby wholly incorporated by reference.


BACKGROUND
A basic problem in communications and data storage involves determining whether information received at a receiver accurately reflects information transmitted from a transmitter. Conventionally, additional verification bits (e.g., parity bits, cyclic redundancy check bits) have been added to message bits to facilitate improving confidence that a received message matches a transmitted message. The communication/data storage system, therefore typically includes an Error-Correcting Code (ECC). For example, in the encoding process, the codeword of an ECC code is constructed by adding redundancy/check bits to the data field. Low density parity check (LDPC) codes define one type of ECC.
LDPC codes are linear block codes associated with a sparse parity check matrix that can be represented as a bipartite graph. The sparsity refers to a condition where a parity check matrix for an LDPC code may be constrained to have less than a certain number of ones per column and to have less than a certain number of ones per row.
An LDPC decoder receives a vector (received vector), attempts to decode the most likely codeword corresponding to the received vector, and reports on whether the decoder vector is a valid codeword. An LDPC codeword may include message bits and redundancy bits. The redundancy bits may be, for example, parity bits. An LDPC code may be a linear (N,K) block code with K information bits mapped to a codeword of block length N. An LDPC code C can be specified in terms of a low-density (e.g., sparse) N×K binary parity check matrix. While examples are provided in terms of binary codes herein, it should be understood that similar methodologies can be applied to non-binary codes, where the word “bit” is replaced by the word “non-binary symbol”.
A codeword can be decoded and verified in pieces where beliefs are built up about certain pieces of the codeword and then those beliefs are used to decode other pieces of the codeword. Decoding will continue until the constraints for a codeword have been satisfied, until a maximum number of tries (e.g., iterations through an LDPC decoder) have been attempted, or until other criteria terminate decoding.
One type of LDPC decoder is a layered decoder. FIG. 1 illustrates one example of a conventional layered decoder 10. The layered decoder 10 provides a convergence flag when the convergence verification unit 12 determines that the layered decoder 10 has converged on a decision concerning decoding a codeword. The convergence verification unit 12 will accept a syndrome input from a syndrome computation unit 20 and will also accept a hard decision (“HD”) change input from an HD tracking unit 22. The syndrome and HD change signals can be combined to determine whether the layered LDPC decoder 10 has reached convergence. The syndrome computation unit 20 computes the syndromes of a current layer in the layered decoder 10 based on whether all check nodes in the layer are satisfied. The HD tracking unit 22 can verify whether the updated HD has changed its value compared to the previous update of the same bit (variable) node. The update will have been performed in a layer that was processed earlier.
The syndrome computation unit 20 and the HD tracking unit 22 receive an updated HD from a logic 30 that is responsible for processing and/or updating bit nodes and check nodes. The logic 30 also provides updated R messages to an R memory 14 and provides updated Q or P messages to a Q or P memory 16. The logic 30 receives values from the R memory 14 and the Q or P memory 16.
Conventionally, a layered decoder like layered LDPC decoder 10 may have L layers, L being an integer. A conventional decoder may go around and around through processing layers until L layers in a row report that the syndromes are all satisfied and until there have been no HD changes for L layers in a row. In a standard convergence unit 12, a layer count may only be incremented up towards L if all the HD change flags indicated that the HD had not changed and if the current syndrome is satisfied. If either an HD changed, or a syndrome was not satisfied, then the layer count may not be incremented up towards L, and/or may be reset all the way to zero. If the layer count ever reaches L, then the decoder 10 can stop and report convergence. However, this convergence technique is not optimal.
In one layered approach, different layers may be tasked with providing different partial decoding results. In one example, a syndrome is a function (e.g., binary addition) of all the variable node values in the bipartite graph that are connected to the same check node. The syndrome calculation involves verifying the parity checks of the current HD values (current decoded vector). A non-zero syndrome vector may signal some number of erroneous HD values. In one example, bi is a binary sequence corresponding to the bits connected to the check nodes at layer i. Syndrome Si=ATbi is the syndrome of layer i, where A is the parity check matrix of the layer i (this is a submatrix of the LDPC parity check matrix) and T is the transpose of a matrix. A layered decoder may sequentially decode given syndromes Si from the top layer to the bottom layer, and then return to the top layer to complete additional iterations, using previous decoding results to update the log likelihood ratios (LLRs) for each node or edge in the decoder graph until decoding is completed.
Conventional convergence logic for a layered decoder is sub-optimal because all layers of the layered LDPC decoder are considered and/or reconsidered before convergence can be determined. Conventionally, in a layered LDPC decoder, a syndrome update occurs in the current layer of the layered decoder. To finish updating an entire syndrome at least once for all layers requires running through at least one entire iteration of LDPC decoding. When a bit is flipped (e.g., corrected) during layered decoding, conventional decoders may cycle through yet another entire iteration of the decoder to insure that all syndromes are satisfied before reporting convergence. This may waste time and power.
Completing yet another entire iteration through a layered decoder may be wasteful when a correct codeword may be successfully and conclusively decoded in the current iteration. Also, in some instances, a correct codeword may be decoded after just a few layers in a layered decoder when, for example, the received vectors (e.g., LLRs) are correct or nearly correct.
FIG. 2 illustrates example convergence detection with conventional standard convergence logic in a conventional layered decoder 50. The current HD for a column J for a circulant 52, prior to processing at layer i, is the HD produced during the processing for a circulant 51 at layer i-3. During the processing of layer i, some HD for block column J may change due to updates obtained while processing circulant 52. It may take L-3 layers after layer i is processed to actually detect that the decoder 50 arrived at a valid codeword at layer i. This is sub-optimal.
LDPC codes are designed to have a structured parity check matrix to facilitate enhancing efficiency in storage (e.g., memory) and processing (e.g., encoder, decoder) units. An LDPC encoder takes in a word of length K and outputs a codeword of length N by inserting N-K redundancy bits. The encoder adds the bits as a function of an LDPC code.
SUMMARY
In one embodiment an apparatus includes a first hardware layer configured to compute a first group of syndrome values from one or more bit values in the codeword and a second hardware layer configured to compute a second group of syndrome values from one or more bit values in the codeword. The apparatus also includes a first physical memory associated with the first hardware layer and configured to store the first group of syndrome values until the syndrome values change due to a change in a codeword bit value. The apparatus also includes a second physical memory associated with the second hardware layer and configured to store the second group of syndrome values until the syndrome values change due to a change in a codeword bit value.
In another embodiment, a method includes computing a first group of syndrome values from one or more bit values in the codeword with a first hardware layer and computing a second group of syndrome values from one or more bit values in the codeword with a second hardware layer. The method includes storing the first group of syndrome values in a first physical memory associated with the first hardware layer and storing the second group of syndrome values in a second physical memory associated with the second hardware layer.
In another embodiment, a device includes a plurality of hardware layers. Each hardware layer is configured to compute a syndrome value according to an LDPC code as a function of one or more bit values in a codeword. The device also includes a plurality of physical syndrome memories that store syndrome values. A matrix associated with the LDPC code is configured so that a column in the matrix has no more than a threshold number of non-zero circulants per physical syndrome memory in the layered LDPC decoder.



BRIEF DESCRIPTION OF THE DRAWINGS
The accompanying drawings, which are incorporated in and constitute a part of the specification, illustrate various apparatuses and methods associated with instant syndrome computation. It will be appreciated that the illustrated element boundaries (e.g., boxes, groups of boxes, or other shapes) in the figures represent one example of the boundaries. In some examples, one element may be designed as multiple elements or multiple elements may be designed as one element. In some examples, an element shown as an internal component of another element may be implemented as an external component and vice versa. Furthermore, elements may not be drawn to scale.
FIG. 1 illustrates one conventional layered LDPC decoder.
FIG. 2 illustrates an example of circulant processing in a conventional layered LDPC decoder.
FIG. 3 illustrates one embodiment of an apparatus configured to perform instant syndrome computation.
FIG. 4 illustrates another embodiment of an apparatus configured to perform instant syndrome computation.
FIG. 5 illustrates one embodiment of a method for providing an LDPC code for use with an apparatus configured to perform instant syndrome computation.



DETAILED DESCRIPTION
Described herein are examples of apparatuses and methods associated with instant syndrome computation in a layered LDPC decoder. Examples of apparatuses and methods signal convergence earlier than conventional layered LDPC decoders. Examples of apparatuses and methods signal a correctly decoded codeword without requiring an additional iteration. Earlier termination is facilitated by adding physical memories to a layered LDPC decoder to store syndrome values. In one embodiment, one single bit memory per syndrome is added to a layered decoder to store syndrome values. Convergence circuitry can determine when all syndromes have been satisfied by analyzing the syndrome values. In another embodiment, less than one memory per syndrome is added to a layered decoder. Adding less than one memory per syndrome involves grouping stored syndromes into physically separate memories based on an organizational scheme. The organizational scheme may be based, for example, on modulo arithmetic. Intelligent LDPC code design facilitates having less than one physical memory per syndrome to be stored while avoiding access conflicts and without requiring multi-ported memory.
Returning to FIG. 2, assume that the HDJ that just changed is now correct. If all the other HDS for all the other columns were already correct, and the layered decoder 50 could verify, via instant syndrome computation, that they were all correct, then a determination that a valid codeword had just been decoded could be made. Layered decoders are able to make this instant syndrome computation due to the addition of the memories. However, in conventional layered decoders, the syndrome is not updated for layer i-3 in which the syndrome was incorrect because instant syndrome computation is not available. Thus the conventional current converged layer counter is only three. Thus, conventionally, it would take L-3 more layers to process before standard convergence logic declares convergence and stops. Layered decoders described and claimed herein would be able to stop sooner.
In a layered LDPC decoder, a final correction and/or final syndrome satisfaction may occur at different times in different layers. Some layers may have already participated in syndrome calculations that indicate that a portion of a codeword has been decoded correctly. The final correction may result in the entire code word having been correctly decoded. By adding syndrome memories to a decoding apparatus, syndrome calculations can be computed without progressing through all the rest of the layers of the decoder. This may be referred to as “instant” syndrome computation. When all the syndromes are satisfied, a decode verification signal can be produced without having to wait for another complete iteration through all the layers to see that all syndromes are satisfied, as is typically done. Conventionally, the LDPC code and thus the LDPC encoder may have not been designed to account for efficient LDPC decoding using instant syndrome computation. While LDPC codes (e.g., quasi-cyclic codes) have been implemented with a very structured parity check matrix according to conventional progressive edge growth (PEG) design constraints (e.g., girth, parity portion structure, row adjacency), or other design methodologies, these designs have typically not considered syndrome memory. The PEG construction is a well known algorithm for constructing graphs. In PEG, girth is defined as the size of the shortest cycle. Row adjacency refers to two rows in an adjacency matrix being next to each other. The parity portion structure constraint refers to the fact that for an LDPC code, the adjacency matrix and the parity-check matrix must be identical.
To facilitate instant syndrome calculations, physical memory can be designed so that all syndromes connected to the same bit can be updated as soon as the bit changes. To avoid a requirement for multi-port memory while providing single clock cycle responsiveness, syndrome memory can be organized as a function of LDPC codes so that memories associated with a syndrome can be accessed in the same clock cycle and so that a memory is accessed at most once per clock cycle.
To facilitate decoder design and to facilitate reducing the number of physical memories employed in a decoder, attention is paid to crafting the LDPC matrix. In one example, non-zero circulants need to be adequately and appropriately distributed across groups of rows, which leads to adequate and appropriate distribution across memory blocks associated with syndromes.
FIG. 3 illustrates one embodiment of an apparatus 100 configured to perform instant syndrome computation. Apparatus 100 is a layered, low density parity check (LDPC) decoder configured to decode a codeword. Apparatus 100 includes a plurality of hardware layers (e.g., layer0 110 and layer1 112 through layerL 118) that compute a plurality of syndrome values (e.g., S0 120 and S1 122 through SL 128). Apparatus 100 includes circuitry 130 to connect the plurality of hardware layers to a plurality of syndrome memories (e.g., M0 140 and M1 142 through MZ 148) to facilitate providing the plurality of syndrome values. Apparatus 100 also includes a decode logic 150.
A hardware layer in apparatus 100 is configured to compute a syndrome value. While a one-to-one correspondence between hardware layers and syndrome values is illustrated, it is to be appreciated that other relationships between hardware layers and syndrome values are possible. An individual syndrome value is computed from one or more bit values in the codeword presented to apparatus 100 for decoding. A syndrome value may indicate that a portion of the codeword has been decoded successfully or may indicate that a portion of the codeword has not been decoded successfully. Conventionally, syndrome values may be updated through a layered decoder while the layered decoder counted how many layers had been resolved successfully. This sub-optimal counting procedure occurred because conventional decoders did not have syndrome memories. Apparatus 100 includes the plurality of memories to store syndrome values which in turn facilitates instant syndrome computation.
A physical memory (e.g., M0 140) is configured to store a syndrome value(s) computed by one or more hardware layers (e.g., Layer0 110, LayerL 118). In one embodiment, there is a physical memory for each syndrome value computed. In this embodiment, the physical memory may be a single bit memory. In another embodiment, there are fewer physical memories than there are syndrome values. In this embodiment, the physical memory may store more than a single bit. Storing more than one syndrome value in a memory could lead to access conflicts. Therefore, the LDPC code used by apparatus 100 may be carefully crafted as described in association with method 300 (FIG. 5) to avoid access conflicts.
Circuitry 130 is configured to simultaneously store a syndrome value computed by a hardware layer in the one or more physical memories associated with a bit in the codeword. In one embodiment, a bit may be associated with two or more syndromes. This means that the values of two or more syndromes may all depend on the value of the same bit, or that a single bit can be involved in more than one syndrome calculation. Conventionally, this multiple dependency may have lead to the requirement for completing an iteration of a loop around the layered decoder to determine whether decoding was successful. With syndrome memories available to decode logic 150, this iteration completion requirement may be removed.
Rather than maintaining a count of layers where syndromes have been satisfied, apparatus 100 includes a decode logic 150 that is configured to signal successful decoding of the codeword. Determining whether successful decoding has occurred is based, at least in part, on determining that a set of syndromes are satisfied based on values stored in the plurality of physical memories. For example, determining that all syndrome values have been computed and that all syndrome values are currently zero can indicate successful decoding. Since the current syndrome values are substantially instantaneously available in the plurality of memories, decoding success can also be substantially instantaneously determined. In one example, “substantially instantaneously” means “in one clock cycle”. For example, one clock cycle may be required to transfer syndrome values from the hardware layers to the memories and then another clock cycle may be required to compute the logical “or” of all the memories. Thus, in one example, a determination concerning decoding success may be made in two clock cycles.
One bit may be involved in two or more syndrome calculations. Recall that a physical memory is associated with a syndrome to facilitate instant syndrome calculation. When one bit is involved in two syndrome calculations, then two syndrome memories may need to be accessed. In one embodiment, the two physical memories associated with the two syndromes that are associated with a single bit in the codeword are configured to be accessed in the same clock cycle. Conventionally, this may have required the memories to be dual-ported because a memory may have been receiving inputs from multiple syndrome computations. However, when the LDPC code is designed according to non-zero circulant constraints described herein (see, for example, method 300, FIG. 5), then the two or more physical memories do not need to be multi-ported to achieve the simultaneous access due to the grouping strategy. One grouping strategy involves establishing a correspondence between physical memories and an LDPC code. In this strategy, non-zero circulants in a sparse matrix associated with the LDPC code are distributed across groups of rows in the matrix so that, per one column in the matrix, no more than a threshold number of non-zero circulants appear in each group of rows in the matrix. The multi-port requirement is also relieved by configuring the apparatus 100 as a function of the non-zero circulant constraints so that a physical memory associated with two or more syndromes is configured to be accessed at most once in a clock signal. Multiple accesses per clock cycle could require multi-porting, whereas a single access per clock cycle can be achieved with single-porting.
In one example, the decode logic 150 is configured to signal successful decoding of the codeword without requiring completing an extra iteration through the plurality of hardware layers in the LDPC decoder apparatus 100. In this example, convergence in decoding the codeword in the layered LDPC decoder apparatus 100 is based on instant syndrome computation without counting layers where syndromes have been satisfied in the layered LDPC decoder apparatus 100.
By grouping syndromes into memories, it is possible to have fewer physical memories than syndromes. Thus, in one embodiment, the plurality of physical memories has fewer members than the plurality of syndrome values. In this embodiment, L from SL 128 is less than Z from MZ 148.
The syndrome values may be grouped into the memories in different ways. In one example, the plurality of syndrome values are grouped into two or more groups. In this example, syndrome values for a single group having two or more members are stored in a single physical memory. Group membership may be determined, for example, by mod(r,M) where mod is the modulo function, where r is a row number associated with a syndrome, the row being one of a number of rows in a sparse matrix associated with the LDPC code, and where M is an integer describing the number of groups in the two or more groups. This means that rows having the same remainder after division by M would be grouped into the same group. Different groupings are possible. For example, contiguous rows may be grouped together, rows may be interleaved into groups, random sets of rows may be grouped together, and so on.
One grouping strategy involves establishing a correspondence between physical memories and an LDPC code. In this strategy, non-zero circulants in a sparse matrix associated with the LDPC code are distributed across groups of rows in the matrix so that, per one column in the matrix, no more than a threshold number of non-zero circulants appear in each group of rows in the matrix. The threshold number of non-zero circulants may be, for example, one. While a threshold of one is described, it is to be appreciated that other thresholds may be employed.
FIG. 4 illustrates another embodiment of apparatus 100. In addition to all the elements found in the embodiment illustrated in FIG. 3, this embodiment also includes an encoder 170 that is configured to encode a codeword based, at least in part, on an LDPC code 160 configured for use with layered LDPC decoder apparatus 100. Recall that apparatus 100 is configured with syndrome memories and is configured to perform instant syndrome computation based on values in the syndrome memories.
In one embodiment, the LDPC code 160 is configured to decode the codeword to minimize the number of syndrome memories required to support instant syndrome computation in the layered LDPC decoder apparatus 100. The minimization is achieved by constraining the LDPC code 160 to restrict the position of non-zero circulants in a matrix associated with the LDPC code 160. The non-zero circulants are restricted so that a column in the matrix has no more than a threshold number of ones per physical syndrome memory in the layered LDPC decoder apparatus 100.
In one example, the LDPC code 160 is configured to facilitate having less syndrome memories than there are syndromes associated with decoding the LDPC code. For example, layered LDPC decoder apparatus 100 may compute 128 syndromes and store the values in 64 physical memories. To achieve this memory savings, the LDPC code 160 may be designed using additional constraints on top of conventional Progressive Edge Growth (PEG) techniques. While the LDPC code 160 is illustrated inside apparatus 100, in one embodiment, information describing the code may reside outside the apparatus 100.
FIG. 5 illustrates one embodiment of a method 300 for intelligently designing LDPC codes for use with an apparatus (e.g., apparatus 100, FIG. 3) associated with instant syndrome computation. In one example, a computer-readable medium may store computer-executable instructions that when executed by the computer control the computer to perform method 300. Method 300 may also be performed in hardware. At 305, method 300 involves initializing an LDPC code (e.g., LDPC code 160, FIG. 4) for use with a layered LDPC decoder configured with physical syndrome memories and configured to perform instant syndrome computation (e.g., apparatus 100, FIG. 3).
At 310, method 300 includes reconfiguring a layered LDPC decoder to selectively reduce the number of syndrome memories required to support instant syndrome computation. Selectively reducing the number of memories may involve, for example, determining that a number of memories less than the number of syndromes to be computed are required and then manipulating the LDPC code or manipulating groupings and interleavings of syndromes. Reducing the number of syndrome memories required may be facilitated, at 320, by selectively restricting the position of non-zero circulants in a matrix associated with the LDPC code. The restriction at 320 may require that a column in the matrix has no more than a threshold number of ones per physical syndrome memory in the layered LDPC decoder, where a “one” represents a non-zero circulant. In one embodiment, the threshold number of non-zero circulants is one. In other embodiments, other threshold numbers may be employed.
At 330, reducing the number of syndrome memories may also be facilitated by restricting the position of non-zero circulants so that syndrome memories corresponding to a column in the matrix can be accessed simultaneously (e.g., in one clock cycle) if necessary. Being able to access multiple syndrome memories simultaneously facilitates reducing the amount of time required to signal a successful decode. While it is useful to be able to access (e.g., write) two or more memories at one time, it is also useful to prevent a physical memory from being accessed twice in one syndrome update cycle. Therefore, at 340, method 300 includes restricting the position of non-zero circulants so that a physical syndrome memory is accessed at most once per clock cycle.
In one embodiment, the actions taken at 310, 320, 330, and 340 are performed in conjunction with conventional Progressive Edge Growth (PEG) constraints. Therefore, in one embodiment, at 340, method 300 includes restricting the position of non-zero circulants to comply with PEG constraints including one or more of, a girth constraint, a parity portion structure constraint, and/or a row adjacency constraint. It will be appreciated that other PEG constraints may be considered.
Method 300 may be confronted with at least two different situations. In one situation, an LDPC code may already be established. In this case, it may not be possible to restrict the non-zero circulant positions because the LPDC code already has non-zero circulant positions that would not be selected if the LDPC code was being crafted by method 300. In this case, reducing the number of syndrome memories may depend on the organization of how syndrome values are stored in the physical memories in the layered LDPC decoder. Recall that the syndromes values are computed in different layers and that layers may be grouped. In different embodiments, different interleavings of rows may be selected at 350 and different groupings of rows may be selected at 360. The interleavings and groupings may be selected based on either the pre-established LDPC code presented to method 300 or on the LDPC code being crafted by method 300.
Therefore, in one embodiment, upon determining that the LDPC code is a pre-defined, pre-established code, method 300 may include selecting interleavings of rows that comport with the LDPC code as constrained by parity structure, and non-zero circulant dispersal associated with the pre-defined, pre-established code. In this embodiment, method 300 may include selecting rows to group into individual physical memories to facilitate (i) minimizing the number of separate physical memories required by the LDPC decoder, (ii) giving substantially equal numbers of rows to groups, (iii) accessing codeword syndromes corresponding to a given column in the matrix in the same clock cycle if necessary, and (iv) accessing physical memories at most once per clock cycle.
In another embodiment, upon determining that the LDPC code is not a pre-defined, pre-established code, method 300 may include selecting interleavings of rows as constrained by one or more of, parity structure, row adjacency, and non-zero circulant dispersal for the LDPC code being crafted. This embodiment may also include selecting rows to group into individual physical memories to facilitate (i) minimizing the number of separate physical memories required by the LDPC decoder, (ii) giving substantially equal numbers of rows to groups, (iii) accessing codeword syndromes corresponding to a given column in the matrix in the same clock cycle if necessary, and (iv) accessing physical memories at most once per clock cycle.
The following includes definitions of selected terms employed herein. The definitions include various examples and/or forms of components that fall within the scope of a term and that may be used for implementation. The examples are not intended to be limiting. Both singular and plural forms of terms may be within the definitions.
References to “one embodiment”, “an embodiment”, “one example”, “an example”, and so on, indicate that the embodiment(s) or example(s) so described may include a particular feature, structure, characteristic, property, element, or limitation, but that not every embodiment or example necessarily includes that particular feature, structure, characteristic, property, element or limitation. Furthermore, repeated use of the phrase “in one embodiment” does not necessarily refer to the same embodiment, though it may.
“Logic”, as used herein, includes but is not limited to hardware, firmware, instructions stored on a non-transitory medium or in execution on a machine, and/or combinations of each to perform a function(s) or an action(s), and/or to cause a function or action from another logic, method, and/or system. Logic may include a software controlled microprocessor, a discrete logic (e.g., ASIC), an analog circuit, a digital circuit, a programmed logic device, a memory device containing instructions, and so on. Logic may include one or more gates, combinations of gates, or other circuit components. Where multiple logics are described, it may be possible to incorporate the multiple logics into one physical logic. Similarly, where a single logic is described, it may be possible to distribute that single logic between multiple physical logics. One or more of the components and functions described herein may be implemented using one or more of the logic elements.
“Computer-readable medium”, as used herein, refers to a medium that stores signals, instructions and/or data. A computer-readable medium may take forms, including, but not limited to, non-volatile media, and volatile media. Non-volatile media may include, for example, optical disks, magnetic disks, and so on. Volatile media may include, for example, semiconductor memories, dynamic memory, and so on. Common forms of a computer-readable medium may include, but are not limited to, a floppy disk, a flexible disk, a hard disk, a magnetic tape, other magnetic medium, an ASIC, a CD, other optical medium, a RAM, a ROM, a memory chip or card, a memory stick, and other media from which a computer, a processor or other electronic device can read.
While for purposes of simplicity of explanation, illustrated methodologies are shown and described as a series of blocks. The methodologies are not limited by the order of the blocks as some blocks can occur in different orders and/or concurrently with other blocks from that shown and described. Moreover, less than all the illustrated blocks may be used to implement an example methodology. Blocks may be combined or separated into multiple components. Furthermore, additional and/or alternative methodologies can employ additional, not illustrated blocks.
To the extent that the term “includes” or “including” is employed in the detailed description or the claims, it is intended to be inclusive in a manner similar to the term “comprising” as that term is interpreted when employed as a transitional word in a claim.
While example systems, methods, and so on have been illustrated by describing examples, and while the examples have been described in considerable detail, it is not the intention of the applicants to restrict or in any way limit the scope of the appended claims to such detail. It is, of course, not possible to describe every conceivable combination of components or methodologies for purposes of describing the systems, methods, and so on described herein. Therefore, the disclosure is not limited to the specific details, the representative apparatus, and illustrative examples shown and described. Thus, this application is intended to embrace alterations, modifications, and variations that fall within the scope of the appended claims.
PREVIOUS DISCLAIMERS RESCINDED
Applicant respectfully informs the Patent Office that the present disclosure is a broadening continuation. Applicant rescinds all disclaimers made during the prosecution of the parent application(s), which may have included statements or amendments that may have disclaimed scope. Accordingly, the previous disclaimers, and the prior art that it was made to avoid, may need to be and should be re-visited.

## Claims

1. An apparatus configured to decode a codeword, comprising:
a first hardware layer configured to compute a first group of syndrome values from a first set of codeword bit values according to an LDPC code;
a second hardware layer configured to compute a second group of syndrome values from a second set of codeword bit values according to the LDPC code;
a first physical memory associated with the first hardware layer and configured to store the first group of syndrome values until a syndrome value in the first group of syndrome values changes due to a change in a codeword bit value in the first set of codeword bit values,
a second physical memory associated with the second hardware layer and configured to store the second group of syndrome values until a syndrome value in the second group of syndrome values changes due to a change in a codeword bit value in the second set of codeword bit values; and
wherein a matrix associated with the LDPC code is configured so that a column in the matrix has no more than a threshold number of non-zero circulants per physical memory.

2. The apparatus of claim 1, wherein the first physical memory and the second physical memory are configured to store syndrome values that are associated with a same single bit in the codeword and wherein the first physical memory and the second physical memory are configured to be accessed in a same clock cycle.

3. The apparatus of claim 2, wherein the first physical memory and the second physical memory are configured to be accessed at most once in a clock signal.

4. The apparatus of claim 2, wherein the first physical memory and the second physical memory are not multi-ported.

5. The apparatus of claim 1, further comprising a decode logic configured to signal successful decoding of the codeword before completing a current iteration through the first hardware layer and the second hardware layer.

6. The apparatus of claim 1, wherein convergence in a decoding of the codeword is based on instant syndrome computation independent of counting hardware layers where syndromes have been satisfied.

7. The apparatus of claim 6, wherein membership in a group of syndrome values is determined by mod(r, M), where mod is the modulo function, where r is a row number associated with a syndrome, the row being one of a number of rows in a sparse matrix associated with an LDPC code, and where M is an integer describing a number of groups of syndrome values.

8. The apparatus of claim 6, wherein the first physical memory and the second physical memory are each configured to store the first group of syndrome values and the second group of syndrome values, respectively based, at least in part, on establishing a correspondence between the first physical memory and the second physical memory with an LDPC code, where non-zero circulants in a sparse matrix associated with the LDPC code are distributed across groups of rows in the matrix so that, for a given column of the sparse matrix, no more than a threshold number of the non-zero circulants appear in each group of rows in the sparse matrix.

9. The apparatus of claim 1, wherein the first group of syndrome values includes two or more syndrome values and the second group of syndrome values includes two or more syndrome values.

10. A method for decoding a codeword, comprising:
computing a first group of syndrome values from a first set of one or more codeword bit values according to an LDPC code with a first hardware layer;
computing a second group of syndrome values from a second set of one or more codeword bit values according to an LDPC code with a second hardware layer;
storing the first group of syndrome values in a first physical memory associated with the first hardware layer, and
storing the second group of syndrome values in a second physical memory associated with the second hardware layer;
wherein a matrix associated with the LDPC code is configured so that a column in the matrix has no more than a threshold number of non-zero circulants per physical memory.

11. The method of claim 10, further comprising:
storing syndrome values that are associated with a same single bit in the codeword in the first physical memory and the second physical memory; and
during decoding, accessing the first physical memory and the second physical memory in a same clock cycle.

12. The method of claim 10, further comprising signaling successful decoding of the codeword before completing a current iteration through the first hardware layer and the second hardware layer.

13. The method of claim 10, further comprising determining convergence in a decoding of the codeword based on instant syndrome computation independent of counting hardware layers where syndromes have been satisfied.

14. A device configured to decode a codeword, comprising:
a plurality of hardware layers, wherein each hardware layer is configured to compute a syndrome value, wherein each syndrome value is computed according to an LDPC code having a plurality of syndromes, wherein each syndrome is specified by the LDPC code as a function of one or more codeword bit values;
at least two physical syndrome memories that are each configured to store one or more syndrome values;
wherein a matrix associated with the LDPC code is configured so that a column in the matrix has no more than a threshold number of non-zero circulants per physical syndrome memory.

15. The device of claim 14, wherein:
a position of the non-zero circulants in the matrix is configured such that syndrome memories corresponding to a column in the matrix can be accessed simultaneously if necessary; and
the position of the non-zero circulants in the matrix is configured such that a physical syndrome memory is accessed at most once per clock cycle.

16. The device of claim 14, wherein a position of the non-zero circulants in the matrix complies with one or more of, a girth constraint, a parity portion structure constraint, and a row adjacency constraint.

17. The device of claim 14, wherein each of the physical syndrome memories is configured to store a group of more than one syndrome value computed by one or more of the hardware layers and to store the group of the syndrome values until the group of syndrome values change due to a change in a codeword bit value, such that a first physical syndrome memory stores syndrome values computed for the codeword and a second physical syndrome memory stores syndrome values computed for the codeword.

18. The device of claim 14, comprising fewer physical syndrome memories than there are syndromes associated with decoding the LDPC code.

19. The device of claim 14, further comprising:
circuitry configured to simultaneously store a syndrome value computed by a hardware layer in at least two physical syndrome memories associated with a codeword bit; and
a decode logic configured to signal successful decoding of the codeword based, at least in part, on determining that a set of syndromes are satisfied based on values stored in the plurality of physical memories.

20. The device of claim 19, wherein:
two or more physical syndrome memories associated with two or more syndromes that are associated with a single bit in the codeword are configured to be accessed in the same clock cycle,
a physical syndrome memory associated with two or more syndromes is configured to be accessed at most once in a clock signal, and
the decode logic is configured to signal successful decoding of the codeword without requiring (i) completing a current iteration through the plurality of hardware layers, and (ii) counting hardware layers where syndromes have been satisfied.