Iterative decoder memory arrangement

The present disclosure includes apparatus, systems and techniques relating to iterative decoder memory arrangement. In some implementations, an apparatus includes a memory module to communicate with an iterative code decoder. The memory module includes a single R memory component to store R data associated with a current codeword, and R data associated with a previous codeword. The memory module includes a Q memory component to store Q data associated with the current codeword, and Q data associated with the previous codeword. The memory module includes a channel detector memory component to store channel extrinsic information.

BACKGROUND

The present disclosure describes systems and techniques relating to Low Density Parity Check iterative decoders.

Basic components of a communication system include a transmitter, a channel, and a receiver. Factors such as noise corruption and channel distortion can introduce errors into data transmitted by the transmitter. To address such introduced errors, the receiver can use a decoder to make error corrections. Low Density Parity Check (LDPC) iterative decoder is one such decoder that can provide error correction in wired, wireless, and optical communications for example.

SUMMARY

The present disclosure includes systems and techniques relating to iterative decoder memory arrangement. According to an aspect of the described systems and techniques, an apparatus includes a memory module to communicate with an iterative code decoder. The memory module includes a single R memory component to store R data associated with a current codeword, and R data associated with a previous codeword. The memory module includes a Q memory component to store Q data associated with the current codeword, and Q data associated with the previous codeword. The memory module includes a channel detector memory component to store channel extrinsic information.

Implementations can optionally include one or more of the following features. A channel detector can be in communication with the memory module to access the R data stored in the single R memory component. The channel detector can include a soft output Viterbi algorithm decoder. The channel detector can be operable to access the Q memory component. The iterative code decoder can include a low density parity check code decoder. The Q memory component can include a Soft Output Viterbi Algorithm memory component. The Q memory component can include two memory banks. The channel detector memory component can include extrinsic channel log-likelihood-ratio memory component. The channel detector memory component can include two memory banks. The single R memory component can include a single port memory component.

The described systems and techniques can be implemented in electronic circuitry, computer hardware, firmware, software, or in combinations of them, such as the structural means disclosed in this specification and structural equivalents thereof. This can include at least one computer-readable medium embodying a program operable to cause one or more data processing apparatus (e.g., a signal processing device including a programmable processor) to perform operations described. Thus, program implementations can be realized from a disclosed method, system, or apparatus, and apparatus implementations can be realized from a disclosed system, computer-readable medium, or method. Similarly, method implementations can be realized from a disclosed system, computer-readable medium, or apparatus, and system implementations can be realized from a disclosed method, computer-readable medium, or apparatus.

For example, the disclosed embodiment(s) below can be implemented in various systems and apparatus, including, but not limited to, a special purpose data processing apparatus (e.g., a wireless access point, a remote environment monitor, a router, a switch, a computer system component, a medium access unit), a mobile data processing apparatus (e.g., a wireless client, a cellular telephone, a personal digital assistant (PDA), a mobile computer, a digital camera), a general purpose data processing apparatus (e.g., a minicomputer, a server, a mainframe, a supercomputer), or combinations of these.

Thus, according to another aspect of the described systems and techniques, a system can include a channel detector and an iterative code decoder in communication with the channel detector to decode codewords. The system also includes a memory module in communication with the iterative code decoder and the channel detector. The memory module includes a single R memory component to store R data associated with a current one of the codewords being decoded by the code decoder and R data associated with a previous one of the codewords. The Memory module includes a Q memory component to store Q data associated with the current codeword and Q data associated with the previous one of the codewords. The memory module includes a channel detector memory component to store channel extrinsic information. The channel detector and the iterative code decoder are operable to pass a bit reliability metric comprising a log-likelihood-ratio message between each other.

Implementations can optionally include one or more of the following features. The channel detector can include a soft output Viterbi algorithm decoder. The Q memory component can include a Soft Output Viterbi Algorithm memory component. The Q memory can include two memory banks. The iterative code decoder can include a low density parity check code decoder. The channel detector memory component can include an extrinsic channel log-likelihood-ratio memory component. The channel detector memory component can include two memory banks. The single R memory component can include a single port memory component. The channel detector can include a soft-input-soft-output channel detector. The channel detector can be configured to perform a single read access from each of the Q memory component and the R memory component per data bit.

The described systems and techniques can result in one or more of the following advantages. A shallow depth of conventional R memory can lead to larger than desirable areas for the memory modules. Two banks of memories can be combined into one memory to obtain an increased number of addresses, and hence improved memory density. Also, the constraint for increased number of memory ports can be minimized or avoided by implementing an additional Soft Output Viterbi Algorithm (SOVA) memory.

Details of one or more implementations are set forth in the accompanying drawings and the description below. Other features, objects and advantages may be apparent from the description and drawings, and from the claims.

DETAILED DESCRIPTION

The systems and techniques described herein can be implemented as one or more devices, such as one or more integrated circuit (IC) devices in a wireless communication device. For example, the systems and techniques disclosed can be implemented in a wireless local area network (WLAN) transceiver device (e.g., a WLAN chipset) suitable for use in an orthogonal frequency-division multiplexing (OFDM) multiple-input and multiple-output (MIMO) system.

FIG. 1ashows a block diagram of an example turbo equalization system100. The system100includes an LDPC encoder110, a channel120with memory or storage, an analog channel front end130, an analog-to-digital converter (ADC)140, a finite impulse response (FIR) filter150, a FIR memory, such as FIR Random Access Memory (RAM)160, and an iterative decoder170. Iterative decoder170includes a Soft Input Soft Output (SISO) channel decoder174, such as a Soft Output Viterbi Algorithm (SOVA) channel decoder, and an LDPC decoder172.

User data is encoded with the LDPC encoder110, and the LDPC encoded user data is transmitted over the channel120to a receiver side. On the receiver side, the analog waveform from the channel120is filtered by the analog channel front end130, and the filtered analog waveform is sampled by the ADC140. The ADC samples are equalized by the FIR filter150and provided to the iterative decoder170. The FIR channel samples from the FIR filter150can also be stored in the FIR RAM160. The SISO channel detector174of the iterative decoder170receives the FIR channel samples and prior information from the LDPC decoder172of the iterative decoder170. At first iteration, the prior information is set to 0 for all bits in the iterative codeword. Based on the received FIR channel samples and the prior information, the SISO channel detector174produces reliability information. Reliability information from the SISO channel detector174is forwarded to the LDPC decoder172. The LDPC decoder172generates updated reliability information based on code constraints, and sends the updated reliability information back to the SISO channel detector174. This process is repeated till a stopping criterion has been met.

FIG. 1bshows a more detailed diagram of an iterative decoder (e.g., iterative decoder170). As shown inFIG. 1a, the iterative decoder170includes the SISO channel detector174to communicate with the LDPC decoder172. The iterative decoder170also includes a memory component176to communicate with the SISO channel detector174and the LDPC decoder172. The memory component176can be included as a part of the LDPC decoder172or implemented as a separate memory component external to the LDPC decoder172.

Examples of the SISO channel detector174include SOVA and BCJR algorithm. SOVA is based on the classical Viterbi algorithm and uses a modified path metric to take into account the a priori probabilities of input symbols or bits and produces a soft output indicating the reliability of a decision about the input symbols.

BCJR algorithm is named after its inventors Bahl, Cocke, Jelinek and Raviv. BCJR algorithm is an algorithm for maximum a posteriori decoding of error correcting codes defined on trellises (principally convolutional codes). The interaction between the LDPC decoder172and the BCJR decoder can be implemented as described by Yeo et al. (see E. Yeo, B. Nikolic, V. Anantharam, “Iterative Decoder Architectures.” IEEE Communications Magazine, vol. 41, no. 8, pp. 132-140, August 2003), the contents of which are incorporated by references.

The LDPC decoder172corresponds to a low-density parity-check code (LDPC code) decoder. An LDPC code is an error correcting code used to correct errors when transmitting data over a noisy transmission channel.

The iterative decoder170iterates between the channel detector174and the LDPC decoder172. The information (e.g., channel detector output124) from previous channel detector iteration is provided as an input to next LDPC decoding iteration. The information (e.g., code decoder output112) from the LDPC decoding is provided as an input (e.g., channel detector input122) to the next channel detector iteration. Data reliability is improved with each additional iteration.

The information passed between the channel detector174and the LDPC decoder172represents a bit reliability metric, such as a log-likelihood-ratio (LLR) message. The LLR can be obtained using a natural logarithmic function (see Equation 1) of the ratio of the probability of the value being 1 to the probability of the value being 0.

An LLR value can include a sign that indicates whether the transmitted bit is determined to be “0” or “1”, and a magnitude representing the confidence of that determination.

FIG. 2is a chart200showing an example relationship between a probability value and an LLR value. The x-axis represents the value of LLR and the y-axis represents the probability value (e.g., probability of bi=0). Values of LLR>0 indicate a higher probability that the value of the transmitted bit is 0. Values of LLR<0 indicate a higher probability that the value of the transmitted bit is 1.

An LDPC code that can be decoded by the code decoder110can be represented using parity check matrices. An (N, K) LDPC code is a parity check code, where K is the number of bits to be encoded, N is the size (or length) of the resulting coded block and M (N−K) represents the additional error correction bits added by the code. Thus, an LDPC code, C, is specified in terms of a low-density (sparse) M-by-N binary parity check matrix H having dimensions M×N.

A binary string, c, of length N is a codeword in the LDPC code C, if and only if Equation 2 is satisfied.
Hc={right arrow over (0)}  (Equation 2)

For an example LDPC code where N=7 and K=5, the parity check matrix H is as shown in Equation 3.

Then, the binary string c=(1,0,1,0,1,0,1)Tis a codeword in the LDPC code C. The codeword, c, is generated by introducing redundancy bits. For example, an LDPC encoder receives a word of length K and outputs a codeword (e.g., codeword c) of length N by inserting N−K redundancy bits into the received word.

Each bit of an LDPC codeword, c, corresponds to a column of the parity check matrix H. For example, bit1corresponds to the 1stcolumn of matrix H, bit2corresponds to the second column of matrix H, etc.

Also, an LDPC code decoded by the code decoder110can be represented by a bipartite graph.FIG. 3shows an example bipartite graph300for representing an LDPC code of length six that can be decoded by the system100. Variable nodes330correspond to encoded bits340of a codeword. Check nodes320correspond to a set of parity-check constraints310which define the LDPC code. Edges350in the graph300connect the variable nodes330to the check nodes320. A variable node and a constraint node are neighbors if the nodes are connected by an edge in the graph. A check node is connected to more than one variable node. Each bit “1” in the parity check matrix is represented by an edge between corresponding variable node330(parity check column) and check node320(parity check row).

FIG. 4shows an example iterative message passage algorithm. An example parity check matrix H410is shown with check nodes412corresponding to rows of the parity check matrix H410and variable nodes414corresponding to columns of the check matrix H410.FIG. 4also shows bipartite graph420that correspond to the parity check matrix H410. LDPC decoding is carried out using iterative message passage algorithm on the bipartite graph420corresponding to the parity check matrix H410. The check nodes412and the variable nodes414are iteratively updated throughout each iteration. The messages passed from the variable nodes414to the check nodes412are denoted by Q messages, while the messages passed from the check nodes412to the variable nodes414are denoted by R messages.

FIG. 5shows an exemplary operation of a variable node processor510. A variable node processor gathers all the R messages received from the connected check nodes and generates updated Q messages. For a given variable node V414, a Q message to a check node S is computed by summing up inputs R1. . . Rdv-2, Rdv-1520(check node outputs), excluding the one input received from check node S itself, and the log-likelihood ratio message λ530, the extrinsic (new) information from a channel detector (e.g., channel detector174). The variable node processor510can compute the Q message based on Equation 4.

FIG. 6is a diagram illustrating an example operation of a check node processor (CNU)630. A CNU is responsible for updating check to bit messages, R. The CNU gathers all the Q messages received from connected variable nodes in the previous iteration and generates an updated R message to each participating bit according to Equation 5.

Alternatively, the value of R can be calculated using MIN-SUM approximation. For example, a min-sum decoder that uses minimum approximation as shown in Equation 6 can be implemented.

In the min-sum approximation, R messages can be stored in a conveniently compact form. That is, per check node, the following can be stored: (a) the signs of the R messages (or signs of incoming Q messages) and (b) 2 messages with the lowest magnitudes together with the index of the R message with the minimal magnitude. The information stored in this manner is sufficient to reconstruct all R messages corresponding to this check node. Using the min-sum approximation in this manner is described in U.S. Pat. No. 7,453,960 (entitled “LDPC encoder and encoder and method thereof”), the contents of which are incorporated by reference.

FIG. 7is a diagram showing an example variable node processor710. Following SISO or iterative decoder, the variable node processor710can be used to compute a posteriori probability (APP) LLR messages740(LLR APP messages740) for a variable node V714. A LLR APP message740represents the total reliability information (from the channel and code decoders) on a corresponding bit node. A LLR APP message740is computed by summing reliability information received from all the check nodes (e.g., R messages720: R1. . . Rdv-2, Rdv-1, Rdv) and the channel extrinsic LLR message730which includes λ. The LLR APP message740can be calculated using Equation 7.

Another quantity of interest to the iterative decoder170is the LDPC Extrinsic LLR (LLR EXT).FIG. 8shows an example variable node processor810for calculating the LLR extrinsic (EXT) message840. The LLR EXT message840represents new reliability information derived from each bit based on the LDPC code constraint. For a given variable node V814, the LLR EXT can be computed either by summing all the R messages820, or by subtracting channel extrinsic information, λ in the LLR message830, from LLR APP. For example, the LLR EXT message840can be calculated using Equation 8.

The SISO channel detector can usually output updated LLR_APP message. Updated channel extrinsic information can be obtained using Equation 9.

To make hardware implementation of an LDPC decoder more efficient, the choice of code can be restricted to a quasi-cyclic LDPC codes for efficient storage and processing as shown inFIG. 9. Quasi-cyclic LDPC codes provide LDPC codes with a structured parity check matrix that makes storage and processing units efficient. Quasi-cyclic codes have parity check matrix910of the form shown inFIG. 9. Each sub-block912is a b-by-b square matrix920, obtained by cyclically shifting the first row b times, for example.

The following describes a layered LDPC code decoder architecture. A layered decoder partitions parity check matrix H into several disjoint layers, each layer including a number of rows in the original matrix H. Quasi-cyclic LDPC code can be partitioned into layers according to circulant rows. Hence, the matrix ofFIG. 9can be partitioned into m layers, each layer having B equations (rows). In some implementations, layered decoders as described by Mansour et al. can be implemented (see M. Mansour and N. Shanbhag, “A 640-Mb/s 2048-bit programmable LDPC decoder chip,”IEEE Journal of Solid-State Circuits, vol. 41, no. 3, pp. 684-698, March 2006), the contents of which are incorporated by reference. A layered LDPC decoder treats the LDPC code as a serially concatenated set of LDPC component codes (or layers). The layered decoder decodes the first iterative sub-code (layer), and then moves to the next layer.

FIG. 10is a block diagram of an example layered LDPC decoder1000. The layered LDPC decoder1000includes a check node unit processing component1030, a memory for R messages1032, a memory for Q messages1012, and a cyclic shifter1020. Processing for one layer can be performed as follows. Each parity check node (row) in the current layer updates and stores its corresponding R messages (messages it provides to its bit node neighbors) by gathering Q messages from its bit node neighbors and computing Equation 6.

The new Q messages gathered in this computation are denoted as Qnewmessages1022(to distinguish them from the existing messages in Q memory) and are computed using the layered decoder variable node processor. Denoting one parity check node in the currently processed layer by S and denoting by V one bit node connected to S, the layered decoder variable node processor operation for a variable node, V, can be realized as Qnew=Qold+Rnew−Rold, where Rnew1028is the message from a check node S′ (≠S) connected to node V that was most recently updated by layered decoder (in one of the earlier processed layers), and Rold1026is the message sent to node V from S during last update. The message Qold1014is the message from the bit node V to the check node S′ that was updated earlier during the processing of the layer corresponding to the node S′. Based on the accessed Rnewmessage and the Qoldmessage, a P message is generated and processed by the cyclic shifter1020before subtracting the Roldmessage to obtain the Qnewmessage. After the processing of check node S using check note unit processing component1030(i.e. processing of the layer corresponding to the check node S), new data (Qnew) is written into R memory1032.

A-priori message is received by the Q memory1012. During variable node processing, a layered decoder uses one read access to retrieve Qold1014from the Q memory1012, one read access to R memory1032(to read Rnew1028), and one write access to update the Qnewmessage1022in the Q memory1012. When the R messages are stored in a compact form (as described above), even though technically another read access to R memory is needed to get Rold1026, the storage of this message can be shared by all the bits checked by a given equation. As a result, memory containing Rold1026is only read once for each equation. This reduces the number of ports required for the R memory1032.

Layered LDPC decoder needs one Q memory1012to store bit-to-check messages Q, and one R memory1032to store check-to-bit messages R. As shown inFIG. 10, the quasi-cyclic nature of the LDPC code permits evaluation of B equations in parallel, thus improving decoder throughput rate. Hence Q and R messages are grouped into sets of B messages, and memories read or write accesses are performed with B messages at a time.

In order to achieve better hardware resource utilization for the iterative decoder (e.g., iterative decoder170), two iterative code words are decoded simultaneously: when SOVA decoder operates on current codeword, LDPC decoder processes previous codeword, and vice-versa.FIG. 11shows an example timing diagram for an iterative decoder architecture. U.S. patent application Ser. No. 12/329,581, filed Dec. 6, 2008 and entitled “Iterative Decoder Systems and Methods” describes the iterative decoder architecture including the timing diagram. The contents of U.S. patent application Ser. No. 12/329,581 are incorporated by reference. Consequently, the memories should be configured to have sufficient capacities to store two sets of data: one for current codeword and one for the previous codeword. This can be realized through doubling the number of memory elements at the cost of implementation area, as shown inFIG. 12below.

FIG. 12is a diagram showing an example memory arrangement1200for layered iterative decoder. The memory arrangement1200can be implemented for the memory component176shown inFIG. 1b.FIG. 12shows an R memory arrangement. The R memory is organized as two banks of memories1212and1214to store R data associated with the current codeword and R data associated with the previous codeword. The two banks1212and1214of R memory represent a ping-pong memory structure. One bank of R memory1212stores the R data for the current codeword being decoded by a code decoder, such as the LDPC decoder, while the other bank of R memory1214stores the R data for the previous code word so that the memory can be read to serialize extrinsic LLR data that will be used by a channel detector to perform SOVA decoding of a previous codeword.

To compute LDPC extrinsic LLR, the R memory bank1212should provide dv R messages to channel SISO detector. In this implementation, LLR EXT is computed as the sum of R messages from all the checks connected to a given variable node V. In some implementations, dv=4 (i.e. column weight of H is 4). For these implementations, the SOVA processor does not need read access to Q memory1222, and only write access is needed to store new Q message reflecting new information derived from the SOVA decoder. At the same time, bank1224of Q memory is being accessed by an LDPC decoder (decoding previous codeword) to provide read/write access to an LDPC decoder. Also R memory bank1214is in communication with an LDPC decoder to provide read/write access.

FIG. 13shows an example process1300for providing two banks of R memory and two banks of Q memory. R data for the current code word and R data for the previous code word are stored in an R memory component (e.g., memory banks1212and1214of R memory) at1310. Storing the R data in the R memory includes operating the R memory as a ping-pong memory structure. For example, at1312, R data for the current codeword being decoded by a code decoder, such as the LDPC decoder is stored in one bank of R memory (e.g., bank1212) while the other bank of R memory (e.g., bank1214) stores the R data for the previous codeword so that the memory bank can be read to provide extrinsic LLR data that will be used by a channel detector to perform SOVA decoding of a previous codeword at1314. The Q, messages for a current codeword and previous codeword are stored in the Q memory at1320.

The area-efficiency of these memory elements (e.g., R memory banks1212and1214) can be improved by merging the R data corresponding to the two separate codewords into a single memory element with doubled the number of entries. However, the gains achieved by merging the two data sets should not be negated by additional read/write access ports for independent read/write accesses.

FIG. 14is a diagram showing another example memory arrangement1400for an iterative decoder that uses a single R memory component to store R data associated with the current codeword and R data associated with the previous codeword. The memory arrangement1400can be implemented for the memory component176shown inFIG. 1b. To implement memory modules with smaller areas, the two banks of R memories described with respect toFIG. 12can be combined into one memory component with an increased number of addresses. By replacing the ping-pong structure of the R memory with a combined memory module, the memory density is improved.

The memory arrangement1400includes a single R memory1410that replaces the ping-pong structure of memory arrangement1200. The single R memory can be a single port memory. The output of the single R memory bank1410is provided to a SOVA decoder. In addition, the R memory is in communication with an LDPC decoder to provide read/write access.

The memory arrangement1400also includes Q memory that includes two banks1422and1424. The Q memory banks1222,1224storing data for a current codeword and a previous codeword

Similar to the memory arrangement onFIG. 12, the Q memory is in communication with a SOVA decoder to provide write access only. Also, the Q memory is in communication with an LDPC decoder to provide read/write access.

Similar to the memory arrangement1200, each extrinsic LLR output of the R memory1410can provide dvR information read access. The two banks1422and1424of Q memory can provide read/write access to an LDPC decoder and write-only access to a channel detector, such as a SOVA decoder.

FIG. 15shows an example process1300for implementing a memory arrangement that includes one R memory and two banks of Q memory. R data is stored in a single R memory component (e.g., single R memory1410) at1510. Storing the R data for the current codeword being decoded by a code decoder, such as the LDPC decoder at1512. In addition, storing the R data for the previous codeword, R memory providing read access to a channel detector to obtain extrinsic LLR data for performing SOVA decoding of a previous codeword at1514.

The Q data for a current codeword and a previous codeword are stored in Q memory at1520. In particular, the Q data for the current code word and the previous codeword are stored in the two banks (e.g., banks1422and1424) of the Q memory.

At the end of LDPC decoding, an extrinsic LLR (Equation 8) can be realized through repeated read access to R memory1410in order to evaluate

LLREXT⁡(v)=∑j-1dv⁢Rj.
Because two codewords are being processed simultaneously by the iterative decoder, the LDPC decoder outputs LLREXTfor the previous codeword while processing all the variable node and check node operations for layered LDPC decoding of the current codeword. This places a challenging constrain on the read access bandwith of the R memory1410.

A further simplification of the memory arrangement can be obtained by using a different approach to compute LLR EXT information during SOVA processing. Thus far, using

LLREXT⁡(V)=∑i=1dv⁢Ri
to compute LDPC extrinsic LLR have been described. This can place significant burden on R memory bandwidth (due to the need to have dvread access per one variable node). In some implementations, LLR EXT can be computed as LLREXT(V)=Q+Rnew−LLRSOVA—ext=LLR_APP−LLRSOVA—ext. By computing the LLR EXT in this manner, one read access to Q memory and one read access to R memory per bit are sufficient. In addition, an extra memory is needed to store channel extrinsic information. However, the benefit from streamlining the R memory easily outweighs the extra complexity due to having additional SOVA extrinsic LLR memories.

FIG. 16is a diagram showing an example memory arrangement that uses additional memory for storing channel extrinsic information. The memory arrangement1600can be implemented for the memory component176shown inFIG. 1b. The additional memories (e.g., channel detector memories) to store the channel extrinsic information are also included. The channel detector memories can includes an extrinsic channel LLR memory. Examples of the channel detector memories include SOVA memories1632and1634. As for other memories, a pair of SOVA memories is included to store information (e.g., Q messages) for current and previous code words.

The memory arrangement1600includes a single R memory1610that replaces the ping-pong structure of memory arrangement1200. R data associated with the current codeword and R data associated with the previous codeword are stored in the single R memory component (e.g., single R memory1610). The single R memory1610can be a single port memory. The output of the single R memory bank of the single R memory1610is provided to a channel detector, such as a SOVA decoder. In addition, the single R memory bank of the single R memory1610is in communication with an LDPC decoder to provide read/write access.

In addition, the Q memory is arranged to include two banks1622and1624as described with respect to arrangement1400. The Q memory is organized as 2 banks of Q memories1622,1624storing data for a current codeword and a previous codeword. The Q memory banks1622and1624are in communication with a channel detector, such as a SOVA decoder to provide read/write access. Also, the Q memory is in communication with an LDPC decoder to provide read/write access.

FIG. 17shows an example process1700for implementing a memory arrangement that includes separate channel detector memory. At1710, R data associated with the current codeword and R data associated with the previous codeword are stored in a single R memory component (e.g., single R memory1610). Storing the R data includes storing in the single R memory, the R data for the current codeword being decoded by a code decoder, such as the LDPC decoder. In addition, storing the R data for the previous codeword includes the single R memory providing read access to a channel detector to obtain extrinsic LLR data for performing SOVA decoding of a previous codeword.

The Q messages for a current codeword and a previous codeword are stored in the Q memory at1720. In the data for the current code word and the previous codeword are stored in the two banks of the Q memory (e.g., the two banks1622and1624).

In addition, channel detector memory (e.g., banks1632and1634) provides one read and one write access to channel extrinsic messages, lambda, stored in the channel detector memory at1730. The lambda messages stored in the channel detector memory includes the extrinsic LLR data for performing SOVA decoding of a previous codeword.

This embodiment implements

LLREXT⁡(v)=∑j-1dv⁢Rj=Q+Rnew-λ,
for which one read access for each of Q and R memories is sufficient, as opposed to dvread accesses to R memory. The overhead is two additional memories1632and1634to store the channel LLR (λ). Because channel throughput is significantly lower than the LDPC decoder iteration throughput, the read access of Rnewcorresponding to the previous codeword can be interleaved amongst read access for LDPC decoding of the current codeword. Thus, no additional read ports are needed from the merged R memory1610.

Interleaving of read access to R memory cannot be arbitrarily performed, but needs additional constraints on the LDPC code. The process of interleaving read access to R memory can be found in U.S. Patent Application No. 61/098,139 filed on Sep. 18, 2008 and entitled “Circulant Processing Scheduler for Layered LDPC Decoder”, the contents of which are incorporated by reference.

Because channel throughput is significantly lower than the LDPC decoder iteration throughput, the read and write access bandwidth of the channel memories1632and1634is small compared to Q and R memories. Thus, the area overhead of channel memories1632and1634is small compared to the savings of a single R memory1610with a single set of read and write ports.

A few embodiments have been described in detail above, and various modifications are possible. The disclosed subject matter, including the functional operations described in this specification, can be implemented in electronic circuitry, computer hardware, firmware, software, or in combinations of them, such as the structural means disclosed in this specification and structural equivalents thereof, including potentially a program operable to cause one or more data processing apparatus to perform the operations described (such as a program encoded in a computer-readable medium, which can be a memory device, a storage device, a machine-readable storage substrate, or other physical, machine-readable medium, or a combination of one or more of them).

Other embodiments fall within the scope of the following claims.