Vertical layered finite alphabet iterative decoding
11381255 · 2022-07-05
Assignee
Inventors
- Benedict J. Reynwar (Tucson, AZ, US)
- David Declercq (Tucson, AZ, US)
- Shiva Kumar Planjery (Tucson, AZ, US)
Cpc classification
H03M13/1111
ELECTRICITY
H03M13/1108
ELECTRICITY
H03M13/1102
ELECTRICITY
H03M13/116
ELECTRICITY
H04L1/0054
ELECTRICITY
H03M13/6577
ELECTRICITY
H03M13/114
ELECTRICITY
H04L1/005
ELECTRICITY
H03M13/1137
ELECTRICITY
H03M13/3707
ELECTRICITY
H03M13/2975
ELECTRICITY
H03M13/1171
ELECTRICITY
H03M13/1122
ELECTRICITY
H03M13/118
ELECTRICITY
H03M13/3723
ELECTRICITY
International classification
Abstract
This invention presents a method and apparatus for vertical layered finite alphabet iterative decoding of low-density parity-check codes (LDPC) which operate on parity check matrices that consist of blocks of sub-matrices. The iterative decoding involves passing messages between variable nodes and check nodes of the Tanner graph that associated with one or more sub-matrices constitute decoding blocks, and the messages belong to a finite alphabet. Various embodiments for the method and apparatus of the invention are presented that can achieve very high throughputs with low hardware resource usage and power.
Claims
1. A method for vertical layered finite alphabet iterative decoding of low-density parity-check (LDPC) codes, the method comprising: receiving, as a first set of inputs, channel values belonging to a channel output alphabet; using the first set of inputs for initializing, iteratively decoding and validating on one or more sub-matrices of a parity-check matrix constituting a plurality of decoding blocks, the initializing, decoding and validating performed on the plurality of decoding blocks in arbitrary order and sequentially from one decoding block to another decoding block either within a column block or across one or more column blocks; computing, during the initializing, syndrome bits based on the first set of inputs, the syndrome bits initializing check nodes associated with the one or more sub-matrices in the plurality of decoding blocks; iteratively processing, during a decoding loop and using the syndrome bits computed during the initializing as inputs, the one or more sub-matrices of the parity-check matrix constituting the plurality of decoding blocks, wherein the iterative processing includes: computing, updating, and passing messages belonging to a finite alphabet, wherein the messages are iteratively passed between variable nodes and the check nodes associated with the one or more sub-matrices in the decoding blocks; using a plurality of variable node update functions to compute outgoing messages of the variable nodes, wherein the said variable node update functions are the same from one decoding block to the next decoding block or are dynamically switched to different variable node update functions from one decoding block to the next decoding block; using one or more check node update functions to compute outgoing messages of the check nodes; and computing hard-decision estimates at the variable nodes based on the outgoing messages of the check nodes; computing the syndrome bits from the hard-decision estimates during validating to check whether the hard-decision estimates constitute a codeword; outputting the codeword, in accordance with the hard-decision estimates constituting a codeword; and transmitting the codeword by one or more communication or storage systems.
2. The method of claim 1, further comprising a first variable node update function, a set of second variable node update functions, and a set of third variable node update functions, wherein, the processing in the decoding loop: starts with using the first variable node update function to compute the outgoing messages of the variable nodes; dynamically switches to using a variable node update function from the set of second variable node update functions to compute the outgoing messages of the variable nodes, when the number of unsatisfied check nodes is below a predetermined threshold; and dynamically switches to using a variable node update function from the set of third variable node update functions to compute the outgoing messages of the variable nodes, when the number of unsatisfied check nodes is above a predetermined threshold and a predetermined number of decoding iterations have been completed.
3. The method of claim 1, further comprising a first variable node update function, a set of second variable node update functions, and a set of third variable node update functions, wherein the processing in the decoding loop which started with using the first variable node update function: is using a variable node update function from the set of second variable node update functions to compute the outgoing messages of the variable nodes; and dynamically switches to using a different variable node update function from the set of second variable node update functions to compute the outgoing messages of the variable nodes, when the number of unsatisfied check nodes is below a predetermined threshold and a predetermined number of decoding iterations have been completed.
4. The method of claim 1, further comprising a first variable node update function, a set of second variable node update functions, and a set of third variable node update functions, wherein the processing in the decoding loop which started with using the first variable node update function: is using a variable node update function from the set of third variable node update functions to compute the outgoing messages of the variable nodes; dynamically switches to using a variable node update function from the set of second variable node update functions to compute the outgoing messages of the variable nodes, when the number of unsatisfied check nodes is below a predetermined threshold; and dynamically switches to using another variable node update function from the set of third variable node update functions to compute the outgoing messages of the variable nodes, when the number of unsatisfied check nodes is above a predetermined threshold and predetermined number of decoding iterations have been completed.
5. The method of claim 1, further comprising receiving channel values as inputs which constitute hard-decision inputs for hard-decision decoding.
6. The method of claim 1, further comprising receiving channel values as inputs which constitute soft-decision inputs for soft-decision decoding.
7. The method of claim 1, further comprising receiving channel values as inputs wherein, the channel values belong to a channel output alphabet that has a cardinality of 4.
8. The method of claim 1, further comprising using a plurality of decoding stages in the decoding loop, wherein estimates of bit values generated from a previous decoding stage are used as input in a current decoding stage.
9. The method of claim 1, further comprising using a plurality of decoding stages in the decoding loop, and using one or more different variable node update functions to compute the outgoing messages from a variable node in each decoding stage.
10. The method of claim 1, further comprising using a check node update function for each check node that computes magnitudes of the outgoing messages of the check node by only using the lowest two magnitudes of incoming messages along with their corresponding edge indices.
11. The method of claim 1, further comprising passing 3-bit messages iteratively between the variable nodes and the check nodes associated with at least one of the decoding blocks.
12. The method of claim 1, for single sub-matrix vertical layered decoding, wherein the initializing, decoding and validating is performed on a single non-null sub-matrix constituting a decoding block.
13. The method of claim 1, wherein the initializing includes computing the syndrome bits from a second set of channel values as the inputs, while the decoding loop is computing the hard-decision estimates from the first set of channel values as the inputs.
14. The method of claim 1, for multi-column vertical layered decoding, wherein the initializing, decoding and validating is performed on a group of one or more column blocks of the parity-check matrix constituting a decoding block.
Description
BRIEF DESCRIPTION OF THE DRAWINGS
(1) The accompanying drawings, which are included to provide a further understanding of the invention are incorporated in and constitute a part of this specification, illustrate non-limiting embodiments of the invention, and together with the description serve to explain the principles of the invention:
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(14)
(15)
(16)
(17)
(18)
(19)
(20)
(21)
DETAILED DESCRIPTION
(22) The method in this disclosure relates to iterative message-passing decoding which operates on the parity-check matrix represented by a graph. A preferred embodiment of the method is operating on a parity-check matrix consisting of sub-matrices of size L×L. In another preferred embodiment, the L×L sub-matrices in the parity-check matrix are circulant permutation matrices (CPMs).
(23)
(24) In accordance with the decoding methods in the present invention, processing a single sub-matrix or a plurality of sub-matrices contained in a decoding block involves computing, updating, and passing messages between the variable nodes and check nodes associated with those sub-matrices on the graph of the code. The variable nodes and check nodes associated with a decoding block will be referred to as a variable node group and a check node group respectively.
(25) The first decoding method presented in this disclosure is referred to as single sub-matrix vertical layered (SSVL) decoding, with one of its embodiments depicted by 201 of
(26) The second decoding method presented in this disclosure is referred to as single column vertical generalized layered (SCVGL) decoding, with one of its embodiments depicted by 202 of
(27) The third decoding method proposed in this disclosure is referred to as multi-column vertical layered (MCVL) decoding, with one of its embodiments depicted by 203 of
(28) The method for vertical layered finite alphabet iterative decoding (FAID) of the present invention begins by receiving the channel vector y that is a hard-decision input or a n.sub.q-bit soft-decision input. For the purposes of exposition, throughout this disclosure, we will say a codeword is being processed when the decoding method is in the process of recovering the codeword from y, and we will say that a codeword is decoded when the decoding method has successfully converged to a codeword, i.e. for which the syndrome is zero (following Eq. 2).
(29) In a preferred embodiment of the invention, the messages belong to a finite alphabet defined by ={0, ±L.sub.i:1≤i≤s} of cardinality |
|2s+1. A message is therefore represented in n.sub.s bits of precision, with n.sub.s=┌log.sub.2(2s+1)┐, and such a FAID will be referred to as a n.sub.s-bit FAID which can be applied to hard-decision input channels, or a n.sub.q-bits soft-decision input channel, with channel output alphabet y={±Y.sub.1, ±Y.sub.2, . . . ±Y.sub.q}.
(30) The minimum number of VN maps required by the method for determining the outgoing messages from the variable nodes depends on the cardinality of the channel output alphabet used by the method, and is often equal to the number of different negative (or positive) values in the channel output alphabet, i.e. q values, as the VN maps corresponding to +Y.sub.i can be deduced by symmetry from the VN maps corresponding to −Y.sub.i, from Eq. 3. Alternatively, the VN maps corresponding to can also be deduced by symmetry from the VN maps corresponding to +Y.sub.i. For purpose of exposition, and without loss of generality, we define the FAID by their VN maps corresponding to −Y.sub.i. For hard-decision decoding where y∈{±Y}, the FAID is defined by a single VN map: Φ.sub.v(−Y, m.sub.1, . . . , m.sub.d.sub.. For soft-decision decoding, the FAID is defined by q VN maps: Φ.sub.v(−Y.sub.j, m.sub.1, . . . , m.sub.d.sub.
, 1≤j≤q.
(31) In the first iteration, all messages are set to zero. The variable nodes in the variable node group of the first decoding block receive their corresponding channel values. Based on the channel values, the outgoing messages from the variable nodes are computed using a VN Map Φ.sub.v which is a function of the incoming messages and the channel value defined as
Φ.sub.v:y×.sup.d.sup.
(9)
and these outgoing messages are then passed along the edges incident to the variable nodes to their neighboring check nodes in the check node group of the decoding block. As an example, a variable node v.sub.i that has degree d.sub.v=4 in the variable node group of the first decoding block sends the message Φ.sub.v(y.sub.i, 0, 0, 0). Numerous embodiments of Φ.sub.v are still within the scope of this disclosure where Φ.sub.v can be defined as a closed-form function, a look-up table, an arbitrary map or any other applicable embodiment which is considered within the scope of the present invention. In this manner, all variable nodes of the variable node group in the first decoding block send messages to the check nodes in the check node group of the decoding block.
(32) The check nodes in the check node group of the first decoding block then receive messages and use the check node update function Φ.sub.c to compute their outgoing messages. A preferred embodiment of the function used in the method of the current disclosure is the same function that was described in Eq. 4. If the decoding block consists of an entire column block or a plurality of column blocks, then the check nodes in the check node group compute the new outgoing messages as soon as they receive their messages from the neighboring variable nodes in the variable node group. If the decoding block is a single sub-matrix block, then check nodes in the check node group have to wait until all the non-null sub-matrix blocks in the column block have been processed before sending out their outgoing messages back to the variable nodes in the variable node group. Efficient implementations for the check node update will be subsequently discussed in one or more embodiments when describing the apparatus for the SSVL decoding method.
(33) The computation and updating of messages described previously is repeated on the second decoding block and subsequent decoding blocks until the entire parity-check matrix has been traversed which then constitutes one decoding iteration, and then the decoding processing restarts again from the first decoding block to start the next decoding iteration.
(34) At the end of processing of one or more decoding blocks of passing messages between variable node groups and check node groups, a hard-decision estimate {circumflex over (x)}.sub.i for each variable node v.sub.i is computed and sent to the validator to check if the decoding has converged to a codeword. The hard-decision estimates are determined using the function Ψ that accepts as arguments all the incoming messages and the channel value y.sub.i of the variable node v.sub.i. The function Ψ can be an arbitrary Boolean function, or an algebraic function. Let m.sub.1, . . . , m.sub.d.sub.
(35)
where Q(x)=0 if x is positive and Q(x)=1 if x is negative.
(36) Further, in one or more embodiments of the method, the overall decoding process uses a single or a plurality of decoding stages in order to improve the rate of successful decoding in recovering the codeword from the channel vector y. A decoding stage is defined by a pre-defined number of n.sub.1 decoding iterations as described in reference to
(37) Let VNmap.sub.1 be the set of VN maps used in the first decoding stage and VNmap.sub.2 be the the set of VN maps used in the second decoding stage by the method. Also let n.sub.l.sup.1 denote the maximum number of decoding iterations allowed for the first decoding stage, and let n.sub.l.sup.2 be the maximum number of decoding iterations allowed for the second decoding stage. If the method has failed to converge to a codeword in the first decoding stage using VNmap.sub.i after n.sub.l.sup.1 decoding iterations, then a second decoding stage is triggered for another n.sub.l.sup.2 iterations. At the beginning of the second decoding stage, the method is re-initialized with all messages being set to zero, and the inputs to the method are either the channel values, the hard-decision estimates generated at the end of the n.sub.l.sup.1-th iteration of the first decoding stage, or the soft-decision estimates generated at the end of the n.sub.l.sup.1-th iteration of the first decoding stage, and the computation of the estimates are further explained below. The method then uses VNmap.sub.2 instead of VNmap.sub.1 for computing the outgoing messages of the variable nodes for the entire second decoding stage.
(38) The hard-decision estimates or p-bit soft-decision estimates or both are computed at the variable nodes using a function A defined as
Λ: y×.sup.d.sup.
(11)
where is the soft-decision output alphabet with cardinality |
|>2. The function A takes as its arguments all the d.sub.v incoming messages of a particular variable node v.sub.i with degree d.sub.v and its channel value v.sub.i to determine the hard-decision or soft-decision estimate λ.sub.i of the variable node v.sub.i. If the cardinality of
is only 2, then λ.sub.i is a hard-decision estimate, and if the cardinality of
is greater than 2, then λ.sub.i is a p-bit soft-decision estimate where p=┌
┐.
(39) An apparatus for the present invention shall now be described. For purposes of illustration and ease of exposition, we consider QC-LDPC codes where the L×L sub-matrices are CPMs. Although some embodiments of the apparatus may be described for the case of a specific column block degree d.sub.v by way of example for illustrative purposes, the apparatus is applicable to LDPC codes that have fixed or variable column weight, and any column block degree d.sub.v, as easily evident for one skilled in the art. A preferred embodiment of the apparatus is when the messages are 3-bit messages belonging to a finite alphabet ={0, ±L.sub.1, ±L.sub.2, ±L.sub.3}.
(40) Further, for purposes of exposition, we will say the the apparatus is working on the current processed codeword when the channel vector y corresponding to that particular codeword is currently being used by the apparatus to recover that codeword, which the apparatus accepts as input the channel vector corresponding to the next processed codeword which is waiting to be processed in the apparatus, which starts after completion of the decoding on the current processed codeword.
(41)
(42) The top-level decoder architecture shown in that were generated as one of the outputs of the decoding loop module in the previous decoding stage. The syndrome bits are progressively updated by performing an XOR operation between their current values and the new bits of input received by the initialization module as the processing traverses the parity-check matrix from the first decoding block to the next decoding block. Once 303 has sent all the syndrome bits, computed from the entire N input values of the channel vector y received by the decoder, to 304, and once it receives a ‘restart_init’ signal from the state machine 308, it is able to accept the next channel vector corresponding to the next processed codeword. The decoding loop module 304 can still process the input data and syndrome bits of the current processed codeword, while 303 starts accepting bundles of X channel values for the next processed codeword. decoding loop 304: This is the module that is responsible for computing, and passing the messages iteratively between the variable node groups and check node groups of a decoding block for the SSVL, SCVGL or MCVL decoders. The module accesses the VN map memory block 305 in order to load the appropriate VN maps, indicated by the ‘writefaid’ signal in
from the previous decoding stage are used as input to that decoding stage, and the total number of decoding iterations n.sub.1 used for that decoding stage. The width and depth of the memory unit depends on the number of decoding stages that are used by the decoder. validation and output 307: This module is responsible for checking whether the hard-decision estimates it received from the decoding loop 304 correspond to a codeword, i.e., if the syndrome is zero (following Eq. 2). The module has a memory unit to store the hard-decision estimates, and computes the syndrome each time it receives a bundle of X hard-decision estimates from 304. The module 307 sends a ‘terminate’ signal to the state machine 308 whenever a decoded codeword is stored in its memory unit or whenever it decides to terminate the decoding after it has failed to converge to a codeword after the maximum allowed number of n.sub.1 iterations. Combined with sending the ‘terminate’ signal, 307 sends the hard-decision estimates stored in the memory unit to the decoder output. In a preferred embodiment of the invention, the module 307 sends the hard estimates to the memory unit storing the decoder output by bundles of X bits. state machine 308: This module is primarily responsible for managing all the various control signals sent to the modules (301, 303, 304, 307) based on the information in memories 305 and 306, and the control signals it receives from the modules 301 and 307. A typical operation of the state machine 308 for a decoder using a plurality of decoding stages is as follows. If the module 308 receives a ‘terminate’ signal from the validation and output module 307 indicating that the decoding has been successful, then 308 sends signals to the modules (303, 304, 307) to indicate that the current hard decision estimates can be output, and that the channel values corresponding to the next processed codeword can be used by the decoding loop 304 for processing. It also sends a signal to 301 to accept channel values for a new processed codeword.
(43) If the state machine 308 receives a ‘terminate’ signal from the validation and output module 307 indicating that the decoding has failed, the module decides whether to restart and how to restart the decoding for the next decoding stage. If 308 decides to start a new decoding stage, it accesses the parameters required for the next decoding stage from 305 and 306, and sends the ‘restart main’ signal to modules 304 307 to indicate that the current processed codeword needs to be decoded starting with a new decoding stage. 308 sends also the necessary information about the new decoding stage to the modules 303 and 304, that is which VN Maps are required to be accessed by 304 for this decoding stage, and which decoder input y or the estimates in are required in module 303 for this decoding stage.
(44) A preferred embodiment of the initialization module 303 used as part of the top-level-decoder architecture in the apparatus of this invention for the SCVGL decoder is depicted in
(45) A preferred embodiment of the initialization module 303 used as part of the top-level-decoder architecture in the apparatus of this invention for the MCVL decoder is shown in
(46) Since the decoding block for the MCVL decoder is composed of W column blocks of the parity-check matrix, there are L*W channel signs at the input of this module. Each group of L channel signs corresponds to a column block, which is first cyclically permuted by the barrel shifters units, with the corresponding CPM shift values that are provided by the code memory 302. The Expand unit 509 takes the d.sub.v*L shifted channel signs at the output of the first set of barrel shifters (501-504), and places them in a length M.sub.b*L register, at their correct location, i.e. the row indices corresponding to the d.sub.v CPMs being processed. The Expand unit 510 proceeds the same way with the outputs of barrel shifters (505-508). The XOR unit 511 combines the channel signs at the output of the Expand units together, and also with the syndrome bits stored in the syndrome memory 512.
(47) A preferred embodiment of the initialization module 303 used as part of the top-level-decoder architecture in the apparatus of this invention for the SSVL decoder is shown in
(48) In the SSVL decoder, the channel signs arrive at the input of the initialization module 303 by groups of L/d.sub.v bits. The collector unit 601 collects d.sub.v such groups, and combines them to obtain L bits of channels signs, which correspond to the column block containing the non-null CPMs being processed. The collected signs are barrel shifted by 602, with the CPM shift value of the processed decoding block. Then the L syndrome bits are updated at the address of the CPM, in the same manner as described previously in reference to
(49) A preferred embodiment of the validation and output module 307 used as part of the top-level-decoder architecture in the apparatus of this invention for the SCVGL decoder is shown in
(50) A preferred embodiment of the validation and output module 307 used as part of the top-level-decoder architecture in the apparatus of this invention for the MCVL decoder is shown in
(51) A preferred embodiment of the validation and output module 307 used as part of the top-level-decoder architecture in the apparatus of this invention for the SSVL decoder is shown in
(52) We now describe in detail the decoding loop module 304 of the top-level decoder architecture. A preferred embodiment of the decoding loop module used as part of the top-level-decoder architecture in the apparatus of this invention for the SCVGL decoder is shown in
(53) The decoding loop module in the preferred embodiment shown in
(54) When the messages at the output of the CNPs are available, the VNP accesses the d.sub.v bundles of L n.sub.s-bit messages, along with the L bits of channels signs of the same block column, from the shift register 1003, as well as the L channel magnitudes from 1002. The VNP generates d.sub.v bundles of L n.sub.s-bit messages that are sent to the d.sub.v CNPs through the barrel shifters (1012-1015). The VNP also computes hard-decision estimates that are sent to the validation and output module 307. In some preferred embodiments, the VNP also computes soft-decision estimates that are sent to the input control module 303 for use in the next decoding stage.
(55) The decoding loop module continues in this manner to exchange newly updated messages between the VNP and the CNPs iteratively, until a ‘restart’ signal is received by the decoding loop module from the state machine 308, indicating that the current decoding stage is completed (successfully or not).
(56) A preferred embodiment of the decoding loop module 304 used as part of the top-level-decoder architecture in the apparatus of this invention for the MCVL decoder is shown in
(57) The decoding loop module accepts groups of L*W channel values, and receives M.sub.b*L syndrome bits from the initialization module 303. The module outputs L*W hard-decision estimates that are sent to the validation and output module 307, and in some preferred embodiments, it also outputs L*W soft-decision estimates that are sent to the input control module 301 for use in the next decoding stage. The functioning of the VNP, CNP and other units is the same as in the SCVGL case, and we refer to paragraphs 0078 and 0079 for more details.
(58) A preferred embodiment of the decoding loop module 304 used as part of the top-level-decoder architecture in the apparatus of this invention for the SSVL decoder is shown in
(59) Since the SSVL decoder processes a single CPM in one column block at a time, there is only one barrel shifter 1209 needed to permute the messages from CNP to VNP, and only one barrel shifter 1210 from VNP to CNP. There is also a single barrel shifter 1208 needed to shift the channel signs. The decoding loop module accepts groups of L/d.sub.c channel values, and syndrome bits from the initialization module 303 and outputs groups of L/d.sub.v hard-decision estimates. In some preferred embodiments, the module also outputs L/d.sub.v soft-decision estimates.
(60) The collector 1204 collects d.sub.v bundles of L/d.sub.v channel signs to combine them and form a single bundle of L channel signs, that is transmitted d.sub.v times to the barrel shifter 1208. The purpose of buffer 1206 is to re-arrange the order in which the messages are transmitted from the CNP to the VNP. Since the CNP processes one circulant at a time, it takes d.sub.v sequential steps to output all d.sub.v*L messages for a given column block. The VNP cannot process the variable nodes in the variable node group of the decoding block unless it has received these d.sub.v*L messages, but in a different order than it is output from the CNP. For example, the first decoding b lock corresponds to the L/d.sub.v first variable no des of that column block, the processing of which requires the L/d.sub.v first messages within each group of L messages, output from the CNP. The buffer 1206 ensures that the VNP receives the appropriate set of messages for each decoding block. Similarly, buffer 1207 is used to send the appropriate set of messages from the VNP to the CNP. Except for the usage of the collector and the buffers, the rest of the units in this module have the same functioning as for the SCVGL decoder which were described previously.
(61) A preferred embodiment of the VNP unit used as part of the decoding loop module 304 in the apparatus of this invention is shown in
(62) The VNP unit accepts as inputs, d.sub.v bundles of X messages that come from the shifted outputs of one or more CNPs, X channel signs, and X channel magnitudes. The VNP consists of X variable node units (VNUs) (1301-1303), which generate the output messages based on the VN maps defined in the Background. The VNP unit outputs d.sub.v bundles of X messages to be sent back to one or more CNPs through barrel shifters, and also X hard-decision estimates. In some preferred embodiments, it also outputs X soft-decision estimates. The number of messages in each bundle is X=L in the case of the SCVGL decoder, and X=L/d.sub.v in the case of the SSVL decoder. In the case of the MCVL decoder, the number of messages in each bundle is X=L, but since the decoding loop module also contains W VNP units processing in parallel, the VNPs compute L*W messages.
(63) A preferred embodiment of the VNUs 1301-1303 used in the VNPs (1020, 1129, 1130, 1205) of the decoding loop module 304 in the apparatus of this invention is shown in
(64) Numerous preferred embodiments of the VN update units are possible that lead to efficient implementations based on the target application and considered within the scope of this invention. Although a preferred embodiment of the VNU was described using VN update memories, by way of example in
(65) A preferred embodiment of the CNP module 1020 used as part of the decoding loop module 304 in the apparatus of this invention for the SCVGL decoder is shown in
(66) The CNP module 1020 computes the output messages by storing and updating the syndrome bits and magnitude states of the check nodes in the check node group that is being processed in the decoding block. The magnitude state of a check node of degree d.sub.c in the check node group, consists of a single or a plurality of magnitudes of the incoming messages along with their respective edge indices. An edge index within a magnitude state indicates which one of the d.sub.c edges connected to this check node contains the incoming message corresponding to the stored magnitude. The various units of the preferred embodiment of the CNP module are shown below. controller 1509: This unit is responsible for initializing the CNP by loading the first data into the memories (1506-1507) and (1512-1513) which do not contain any data in the first decoding iteration. The unit receives L syndrome bits that are sent from the initialization module 303 and outputs the initial syndrome bits and initial magnitude states of the check nodes in the check node group. The initial syndrome bits are set to the values of the L syndrome bits that are being received by the unit, and the initial magnitude states are set to a value belonging to the message alphabet M. The chosen value for the magnitude states at the first iteration is arbitrary, and can be optimized for a given QC-LDPC code to maximize the error correction capability of the decoder. The two multiplexors (1505 and 1511) select the initial syndrome bits and initial magnitude states at beginning of the first iteration which are then sent to the appropriate memory units. sign memory 1501: This memory unit stores the signs of the L input messages to be used in the next decoding iteration by the XOR unit 1504, and also to calculate the signs of the output messages in the generator 1508. The width of this memory is L, and its depth depends on the decoder used. The depth is the number of column blocks in the PCM, equal to N.sub.b, for the SCVGL decoder, and d.sub.v*N.sub.b for the SSVL decoder. sign chooser 1502: This unit selects the appropriate signs to use for generating the output messages as well as updating the syndrome bits in the CNP. In the first decoding iteration, the sign chooser selects the signs which come from the channel sign Memory 1001 unit through the barrel shifters in the decoding loop module. For all subsequent iterations after the first iteration, the sign chooser selects the message signs from the sign Memory 1501. shift register 1503: This unit is used to regulate the flow of signs from the sign chooser 1502 output, so that the signs of the messages from the previous iteration, which are stored in the sign memory 1501, are combined with the signs of the messages of the current iteration corresponding to the same edges in the XOR unit 1504. The depth of the shift register depends on the number of pipeline stages used in the decoding loop module 304. XOR 1504: This unit performs an XOR operation between the signs of messages received by the CNP in the current decoding iteration and the signs that are stored in the shift register which represent the signs of the same messages from the previous decoding iteration. The result of this XOR operation correspond to the change in message signs from one iteration to another. This change in signs is then combined, using a XOR, with the current values of the syndrome bits that come from the updater syndrome memory 1506 in order to update the syndrome bit, which is the output of the XOR module. In the first iteration, the CNP receives its first messages from the VNP, and the message signs are combined with the initial signs from the channel signs memory. The updated syndrome bits are then stored in the updater syndrome memory block 1506 as well as the generator syndrome memory block 1507. updater syndrome memory 1506 and generator syndrome memory 1507: These are two memory blocks used to store the syndrome bits of the check nodes with both containing identical data. They both have a width of L bits and a depth which depends on the decoder. The depth is equal to the number of block rows in a generalized row layer, equal to M.sub.b/d.sub.v, for the SCVGL decoder, and the depth is equal to M.sub.b for the SSVL decoder. The updater syndrome memory 1506 is used for accessing the syndrome bits in order to determine the updated syndrome bits, while the generator syndrome memory 1506 is used for accessing the syndrome bits in order to determine the signs of the output messages (or output message signs) of the CNP, that enter into the generator unit 1508. The use of two separate memory blocks allows the access of two different addresses simultaneously, one for the updating of syndrome bits, and the other for generating the output message signs. updater mag states memory 1513 and generator mag states memory 1512: These are two memory blocks that store the magnitude states of the check nodes with both containing identical information. Similar to the reason for the updater syndrome memory 1506 and generator syndrome memory 1507, the updater mag state memory 1513 is accessed for updating the magnitude states and the generator mag states memory 1512 is accessed to determine the magnitudes of the output messages (or output message magnitudes) of the CNP, that enter into the generator unit 1508. In a preferred embodiment of the CNP, the magnitude state of a check node comprises the two lowest magnitudes, among all the magnitudes of the incoming messages that the check node has received during decoding, along with their respective edge indices. The two lowest magnitudes are denoted mag.sub.1 and mag.sub.2, and their respective indices are denoted index.sub.1 and index.sub.2, for purposes of exposition. Any generalization to a magnitude state containing a larger number of lowest magnitudes is also considered as part of this invention. In this preferred embodiment, the memories 1513 and 1512 have a width equal to 2*((n.sub.s−1)+┌log.sub.2(d.sub.c)┐)*L, since one needs n.sub.s−1 bits to store one message magnitude, and ┌log.sub.2(d.sub.c)┐ bits to store one edge index. The depth of the memories depend on the decoder: it is M.sub.b/d.sub.v for the SCVGL decoder and M.sub.b for the SSVL decoder. In another preferred embodiment, the value of index.sub.2 is not stored in the generator mag states memory 1512 as this is not required in the generation of the output messages. In this case, the memory 1512 has a width equal to (2*(n.sub.s−1)+┌log.sub.2(d.sub.c)┐)*L. magnitude state updater 1510: This unit is used to update the magnitude state of every check node in the check node group based on the magnitudes of the incoming messages. The unit reads the old magnitude states from the updater mag states memory 1513, determines the updated magnitude states depending on the magnitudes of the input messages that are sent from the VNP, and then writes the updated magnitude states into the updated mag states memory 1513 and also to the generator mag states memory 1512. In the preferred embodiment of the CNP, where the magnitude state is composed of [mag.sub.1, mag.sub.2, index.sub.1, index.sub.2], the magnitude state updater 1510 proceeds the following way to compute the new magnitude states.
(67) For a check node in the check node group being processed, the magnitude state updater 1510 receives a single message from the VNP, with magnitude mag.sub.new and index index.sub.new. 1. First, the unit checks if the current index index.sub.new corresponds to an index stored in the magnitude state. 2. If (index.sub.new=index.sub.1), then the updated magnitude state is either [mag.sub.new, mag.sub.2, index.sub.new, index.sub.2] if (mag.sub.new≤mag.sub.2), or [mag.sub.2, mag.sub.new, index.sub.2, index.sub.new] if (mag.sub.new, >mag.sub.2). 3. If (index.sub.new=index.sub.2), then the updated magnitude state is either [mag.sub.new, mag.sub.1, index.sub.new, index.sub.1] if (mag.sub.new≤mag.sub.1), or [mag.sub.1, mag.sub.new, index.sub.1, index.sub.new] if (mag.sub.new>mag.sub.1). 4. If the current index does not correspond to any of the stored indices, then the updated magnitude state is either [mag.sub.new, mag.sub.1, index.sub.new, index.sub.1] if (mag.sub.new≤mag.sub.1), or [mag.sub.1, mag.sub.new, index.sub.1, index.sub.new] if (mag.sub.new>mag.sub.1) and (mag.sub.new≤mag.sub.2), or [mag.sub.1, mag.sub.2, index.sub.1, index.sub.2] if (mag.sub.new>mag.sub.2). generator 1508: This unit determines the signs and magnitudes of the output messages sent out of the CNP by accessing the syndrome bits from the generator syndrome Memory 1507, the magnitude states from the generator mag states memory 1512, and the signs from the sign chooser 1502. For a check node in the check node group being processed, the generator 1508 send a message to the VNP through the barrel shifters, corresponding to an index index.sub.out in the set of d.sub.c edges connected to the check node. In the preferred embodiment of the CNP, where the magnitude state is composed of [mag.sub.1, mag.sub.2, index.sub.1, index.sub.2], the output message magnitude will be mag.sub.2 if the output edge index index.sub.out matches the edge index index.sub.1. The output message magnitude will be mag.sub.1 otherwise. The sign of the output message is determined by performing an XOR operation between the message sign selected by the sign chooser 1502 and the syndrome bit of that check node stored in the generator syndrome Memory 1507. The L output messages determined by the generator are then sent out to the VNP in the decoding loop module 304 through the barrel shifters.
(68) In another preferred embodiment of the CNP, a single three-port memory 1606 (one-write, two-read memory) is used in place of the two memory blocks which are the updater syndrome memory 1506 and generator syndrome memory 1507, as shown in
(69) A preferred embodiment of the CNP 1020 used as part of the decoding loop module 304 in the apparatus of this invention for the MCVL decoder is shown in
(70) The Expand units take each one of the W groups of d.sub.v*L data and place them in length M.sub.b*L registers, at the locations of the rows corresponding to the d.sub.v CPMs being processed in the current column block. For the Expand unit 1704 the data input comprises channel signs or message signs, for 1706 the data input comprises changes in message signs, and for 1706 the data input comprises message magnitudes. The Contract unit 1711 implements the inverse operation as the Expand units, i.e. it extracts out of each of the W registers of M.sub.b*L data, the d.sub.v*L data which correspond to the CPMs being processed in the current column block.
(71) We now describe another apparatus for the present invention.
(72) A preferred embodiment of the decoding loop module 1804 used as part of the top-level-decoder architecture in the apparatus that does not comprise an initialization module is shown in
(73) As channel values arrive at the input of the decoding loop module, both their signs and magnitudes are stored in the channel memory 1901 and sent immediately to the VNP 1914. The VNP determines the initial messages to send to the CNPs (1902-1905), through the barrel shifters (1910-1913). Those initial messages are used in the CNPs to compute the initial values for the syndrome bits and the magnitude states. The CNPs do not begin to send messages back to the VNP until they have received messages from every variable node, that is until the syndrome bits for the whole processed codeword has been calculated. Once the syndrome computation is complete using all the channel values and available for us at the CNPs, and the initial magnitude states have also been computed, the CNPs then send their output messages to the VNP through the barrel shifters (1906-1909), and the processing in the module continues iteratively between the VNP and the CNPs in a manner similar to the decoding loop module 304 as described in reference to
(74) A preferred embodiment of the CNP units (1902-1905) used in the decoding loop module 1804 of the apparatus that does not comprise an initialization module is shown in
(75) While this invention has been described with reference to illustrative embodiments, this description is not intended to be construed in a limiting sense. Various modifications of the described embodiments, as well as other embodiments of the invention, which are apparent to persons skilled in the art to which the invention pertains are deemed to lie within the principle and scope of the invention as expressed in the following claims.
(76) Some embodiments may be implemented as circuit based processes, including possible implementation on a single integrated circuit.
(77) Unless explicitly stated otherwise, each numerical value and range should be interpreted as being approximate as if the word “about” or “approximately” preceded the value of the value or range.
(78) It will be further understood that various changes in the details, materials, and arrangements of the parts which have been described and illustrated in order to explain the nature of this invention may be made by those skilled in the art without departing from the scope of the invention as expressed in the following claims.
(79) Although the elements in the following method claims, if any, are recited in a particular sequence with corresponding labeling, unless the claim recitations otherwise imply a particular sequence for implementing some or all of those elements, those elements are not necessarily intended to be limited to being implemented in that particular sequence.
(80) The description and drawings merely illustrate the principles of the invention. It will thus be appreciated that those of ordinary skill in the art will be able to devise various arrangements that, although not explicitly described or shown herein, embody the principles of the invention and are included within its spirit and scope. Furthermore, all examples recited herein are principally intended expressly to be only for pedagogical purposes to aid the reader in understanding the principles of the invention and the concepts contributed by the inventor(s) to furthering the art, and are to be construed as being without limitation to such specifically recited examples and conditions. Moreover, all statements herein reciting principles, aspects, and embodiments of the invention, as well as specific examples thereof, are intended to encompass equivalents thereof.
(81) It is also to be understood that the following claims are intended to cover all of the generic and specific features of the invention herein described and all statements of the scope of the invention which, as a matter of language, might be said to fall there between.
(82) The functions of the various elements shown in the figures, including any functional blocks labeled or referred-to as “modules,” “processors,” “architectures,” “units,” “shifters,” “controllers,” “registers,” and “update maps,” may be provided through the use of dedicated hardware or circuits, as well as hardware capable of executing software in association with appropriate software. Moreover, explicit use of these terms should not be construed to refer exclusively to hardware capable of executing software, and may implicitly include, without limitation, digital signal processor (DSP) hardware, application specific integrated circuit (ASIC), field programmable gate array (FPGA), read only memory (ROM) for storing software, random access memory (RAM), and nonvolatile storage. Other hardware, conventional and/or custom, may also be included. Such hardware can be physically implemented in semiconductor technologies such as Silicon, Germanium or Gallium based technologies, photonics technologies, as well as in emerging technologies such as chemical, biological or quantum technologies.
(83) It should be appreciated by those of ordinary skill in the art that any block diagrams herein represent conceptual views of illustrative circuitry embodying the principles of the invention. Similarly, it will be appreciated that any flow charts, flow diagrams, state transition diagrams, schematics, pseudo code, and the like represent various processes which may be substantially represented in computer readable medium and so executed by a computer or processor, whether or not such computer or processor is explicitly shown.