# Patent

## Title
Systems and methods for low density parity check data encoding

## Abstract

Various embodiments of the present invention provide systems and methods for encoding data. As an example, a data encoding circuit is disclosed that includes a first stage data encoder circuit and a second stage data encoder circuit. The first stage data encoder circuit is operable to provide a first stage output. The first stage data encoder circuit includes a first vector multiplier circuit operable to receive a data input and to multiply the data input by a first sparse matrix to yield a first interim value. The second stage encoder circuit includes a second vector multiplier circuit operable to multiply the first stage output by a second sparse matrix to yield a second interim value.

## Background
BACKGROUND OF THE INVENTION
The present inventions are related to data processing, and more particularly to systems and methods for encoding data.
Data storage and transmission systems typically encode a data set prior to either storage or transmission. Robust encoding facilitates enhanced data recovery and in some cases error correction. As a general rule, an increase in the robustness of an encoding approach results in an increase in circuit complexity. Such circuit complexity may not be practical, and yet enhanced data recovery may be desired.
Hence, for at least the aforementioned reasons, there exists a need in the art for advanced systems and methods for encoding data.
BRIEF SUMMARY OF THE INVENTION
The present inventions are related to data processing, and more particularly to systems and methods for encoding data.
Various embodiments of the present invention provide data encoding circuits that include a first stage data encoder circuit and a second stage data encoder circuit. The first stage data encoder circuit is operable to provide a first stage output. The first stage data encoder circuit includes a first vector multiplier circuit operable to receive a data input and to multiply the data input by a first sparse matrix to yield a first interim value. The second stage encoder circuit includes a second vector multiplier circuit operable to multiply the first stage output by a second sparse matrix to yield a second interim value. The data encoding circuit may be implemented as part of a data storage system, a data transmission system, or another system.
In some instances of the aforementioned embodiments, the first sparse matrix and the second sparse matrix are part of an encoding matrix. This encoding matrix includes a quasi-cyclic code portion, and a non-quasi-cyclic code portion. In such cases, both the first sparse matrix and the second sparse matrix are part of the quasi-cyclic portion. In some instances of the aforementioned embodiments, the first stage encoder circuit further includes a third vector multiplier circuit operable to multiply the first interim value by a third sparse matrix to yield a third interim value. In some such cases, the first sparse matrix, the second sparse matrix, and the third sparse matrix are part of an encoding matrix that includes a quasi-cyclic code portion, and a non-quasi-cyclic code portion. In such cases, the third sparse matrix may be part of the non-quasi-cyclic portion. In one or more cases, the first stage data encoder circuit further includes an XOR array circuit operable to XOR the first interim value with the second interim value to yield a fourth interim value. In some such cases, the first stage data encoder circuit further includes a fourth vector multiplier circuit operable to multiply the fourth interim value by a dense matrix to yield a subset of the first stage output. In one or more such cases, the first sparse matrix, the second sparse matrix, the third sparse matrix, and a dense matrix are part of an encoding matrix. The encoding matrix includes a quasi-cyclic code portion, and a non-quasi-cyclic code portion, and the dense matrix is part of the non-quasi-cyclic portion.
In some instances of the aforementioned embodiments, the second stage encoder circuit further includes an XOR array circuit operable to XOR the second interim value by the first interim value to yield a third interim value. In some cases, the second stage encoder circuit further includes a third multiplier circuit operable to multiply the third interim value by a third sparse matrix to yield an encoded output.
Other embodiments of the present invention provide methods for performing data encoding. Such methods include receiving a data input and performing a first stage encoding of the data input to yield a first stage output. The first stage encoding includes multiplying the data input by a sparse matrix to yield an interim value. The methods further include performing a second stage encoding utilizing the first stage output and the interim value.
In some instances of the aforementioned embodiments, the interim value is a first interim value, the sparse matrix is a first sparse matrix, and the first stage encoding includes multiplying the data input by a second sparse matrix to yield a second interim value; and XORing the first interim value and the second interim value to yield a third interim value. In some of the aforementioned instance, the method further includes performing a syndrome encoding that includes XORing the third interim value by a syndrome pattern to yield a fourth interim value. Such instances may further include multiplying the fourth interim value by a dense matrix to yield a subset of the first stage output. In one or more instances of the aforementioned embodiments, the interim value is a first interim value, the sparse matrix is a first sparse matrix, and performing a second stage encoding includes: multiplying the first stage output by a second sparse matrix to yield a second interim value; XORing the first interim value and the second interim value to yield a third interim value; and multiplying the third interim value by a third sparse matrix to yield an encoded output.
Yet other embodiments of the present invention provide storage devices that include an encoding matrix having a quasi-cyclic code portion and a non-quasi-cyclic code portion. The non-quasi-cyclic portion includes a dense matrix, a first sparse matrix and a second sparse matrix. The quasi-cyclic portion includes a third sparse matrix, a fourth sparse matrix, and a fifth sparse matrix.
This summary provides only a general outline of some embodiments of the invention. Many other objects, features, advantages and other embodiments of the invention will become more fully apparent from the following detailed description, the appended claims and the accompanying drawings.



BRIEF DESCRIPTION OF THE DRAWINGS
A further understanding of the various embodiments of the present invention may be realized by reference to the figures which are described in remaining portions of the specification. In the figures, like reference numerals are used throughout several drawings to refer to similar components. In some instances, a sub-label consisting of a lower case letter is associated with a reference numeral to denote one of multiple similar components. When reference is made to a reference numeral without specification to an existing sub-label, it is intended to refer to all such multiple similar components.
FIG. 1 depicts a storage device including a read channel with a multi-stage encoder circuit in accordance with various embodiments of the present invention;
FIG. 2 depicts a data transmission system including a multi-stage encoder circuit in accordance with one or more embodiments of the present invention;
FIG. 3 depicts a multi-stage encoder circuit in accordance with various embodiments of the present invention;
FIG. 4 is a representation of an encoding matrix including user data and two levels of parity data in accordance with one or more embodiments of the present invention;
FIG. 5a is a detailed diagram of one implementation of a first stage of a multi-stage encoder circuit in accordance with some embodiments of the present invention;
FIG. 5b is a detailed diagram of a second stage of a multi-stage encoder circuit in accordance with some embodiments of the present invention;
FIG. 5c is a detailed diagram of another implementation of a first stage of a multi-stage encoder circuit in accordance with some embodiments of the present invention; and
FIG. 6 is a flow diagram showing a method for multi-stage encoding in accordance with some embodiments of the present invention.



DETAILED DESCRIPTION OF THE INVENTION
The present inventions are related to data processing, and more particularly to systems and methods for encoding data.
Various embodiments of the present invention provide a multi-stage encoder circuit. Such multi-stage encoder circuits utilize a hybrid encoding matrix including blocks (i.e., sub-matrices) with lower weight circulants, and other blocks with higher weight circulants. In some cases, the encoding matrix is modified such that one of the blocks associated with the higher weight circulants is all zeros. The encoding matrix is defined such that the blocks can be maintained in sparse form even when the block is inverted. In some embodiments of the present invention, syndrome encoding can be applied as part of one stage of the encoding process. In some cases, the blocks are full rank sparse matrices, and the encoder stages do not utilize forward or backward substitution processes and thereby offer reduced complexity encoding.
Turning to FIG. 1, a storage system 100 is shown including a read channel 110 including a data write circuit 111 and a data read circuit 118. Storage system 100 may be, for example, a hard disk drive. Based upon the disclosure provided herein, one of ordinary skill in the art will recognize a variety of storage systems that may include the circuitry discussed in relation to FIG. 1. Data write circuit 111 includes a multi-stage encoder circuit 112 in accordance with various embodiments of the present invention, and a data write circuit 114. Multi-stage encoder circuit 112 may be implemented similar to those described below in relation to one or more of FIGS. 4-5, and/or may operate in accordance with the flow diagram of FIG. 6. Data read circuit 118 receives data retrieved from a disk platter 178 and performs a data decode process using a decoder 156. The data decode process substantially reverses the encoding originally applied by multi-stage encoder circuit 112.
In addition, storage system 100 includes a preamplifier 170 that amplifies a minute electrical signal received from a read/write head assembly 176. Read/write head assembly 176 is disposed in relation to disk platter 178. Storage system 100 also includes an interface controller 120, a hard disk controller 166, a motor controller 168, and a spindle motor 172. Interface controller 120 controls addressing and timing of data to/from disk platter 178. The data on disk platter 178 consists of groups of magnetic signals that may be detected by read/write head assembly 176 when the assembly is properly positioned over disk platter 178. In one embodiment, disk platter 178 includes magnetic signals recorded in accordance with a perpendicular recording scheme. In other embodiments of the present invention, disk platter 178 includes magnetic signals recorded in accordance with a longitudinal recording scheme.
In a read operation, read/write head assembly 176 is accurately positioned by motor controller 168 over a desired data track on disk platter 178. Motor controller 168 both positions read/write head assembly 176 in relation to disk platter 178 and drives spindle motor 172 by moving read/write head assembly to the proper data track on disk platter 278 under the direction of hard disk controller 166. Spindle motor 172 spins disk platter 178 at a determined spin rate (RPMs). Once read/write head assembly 178 is positioned adjacent the proper data track, magnetic signals representing data on disk platter 178 are sensed by read/write head assembly 176 as disk platter 178 is rotated by spindle motor 172. The sensed magnetic signals are provided as a continuous, minute analog signal representative of the magnetic data on disk platter 178. This minute analog signal is transferred from read/write head assembly 176 to data read circuit 118 of read channel 110 via preamplifier 170. Preamplifier 170 is operable to amplify the minute analog signals accessed from disk platter 178. In turn, data read circuit 118 decodes the received information using decoder 116 as part of a process of digitizing the received analog signal to recreate the information originally written to disk platter 178. This data is provided as read data 103 to a receiving circuit.
A write operation is substantially the opposite of the preceding read operation. In particular, write data 101 is received by data write circuit 111 of read channel 110. Write data 101 is encoded by encoder circuit 112, and the encoded data is provided to a data write circuit 114. Data write circuit 114 drives the encoded data to preamplifier 170. The data amplified by preamplifier 170 are provided to read/write head assembly 176 that generates a corresponding magnetic field that is recorded on disk platter 178 at locations controlled by motor controller 168.
Turning to FIG. 2, a transmission system 200 is shown including a read channel 110 including a transmitter 210 and a receiver 250. Transmission system 200 may be, for example, two cellular telephones or radio sets. Based upon the disclosure provided herein, one of ordinary skill in the art will recognize a variety of transmission systems that may include the circuitry discussed in relation to FIG. 2. Transmitter 210 includes a multi-stage encoder circuit 212 in accordance with various embodiments of the present invention, and a data write circuit 214. Multi-stage encoder circuit 212 may be implemented similar to those described below in relation to one or more of FIGS. 4-5, and/or may operate in accordance with the flow diagram of FIG. 6. Receiver 250 receives data received from transmitter 210 via a transmission system 270. Receiver 250 includes a data read circuit 258 having a decoder 256. Decoder 256 implements a decode process that substantially reverses the encoding originally applied by multi-stage encoder circuit 212.
In operation, a data input 205 is provided to transmitter 210. Multi-stage encoder circuit 212 encodes the received data input and provides an encoded output to a data transmission circuit 214. Data transmission circuit 214 converts the data into a radio frequency signal 290 that is transmitted via transmission system 270. Receiver 250 receives the radio frequency signal that is processed by data read circuit 258. Such processing includes data decoding by a decoder 256. Ultimately, the decoded data is provided as a data output 245 which corresponds to data input 205.
Turning to FIG. 3, a multi-stage encoder circuit 300 is shown in accordance with various embodiments of the present invention. Multi-stage encoder circuit 300 includes a first stage encoder circuit 310 applying a first level of encoding, and a second stage encoder circuit 320 applying a second level of encoding. Where input data is received (block 605), a first level encoding process is applied to the input data (block 610). Both the first level encoding and the second level encoding are performed using an encoding matrix similar to that described below in relation to FIG. 4, and both levels of encoding are applied such that the following equation is maintained true:




  
    
      
        [
        
          
            0
            ⁢
            
              
            
            ⁢
            
              H
              ~
            
            ⁢
            p
            ⁢
            
              
            
            ⁢
            22
          
          -
          
            Hp
            ⁢
            
              
            
            ⁢
            21
            ×
            
              
                (
                
                  Hp
                  ⁢
                  
                    
                  
                  ⁢
                  11
                
                )
              
              
                -
                1
              
            
            ×
            Hu
            ⁢
            
              
            
            ⁢
            1
            ×
            Hu
            ⁢
            
              
            
            ⁢
            2
          
        
        ]
      
      ×
      
        [
        
          
            
              
                p
                ⁢
                
                  
                
                ⁢
                1
              
            
          
          
            
              
                p
                ⁢
                
                  
                
                ⁢
                2
              
            
          
          
            
              u
            
          
        
        ]
      
    
    ≡
    0
  
  ,




where p1 is a set of first level parity bits generated by the encoding process, p2 is a set of second level parity bits generated by the encoding process, and u is a set of received input data. {tilde over (H)}p22=−Hp21×(Hp11)−1×Hu1×Hu2 which is a sparse matrix derived from the matrices Hp11, Hp12, Hp21 and Hp22 of the utilized encoding matrix. This modification assures that the sub-matrix in the original Hp21 position is all zeros. This modification to the encoding matrix operates to simplify the encoding process. First stage encoder circuit 310 receives a data input 305 (designated as “u”), and provides a first stage output 315 (designated as “p2”). Second stage encoder circuit 320 receives first stage output 315 and data input 305, and provides a second stage output 325 (designated “p1”).

Data input 305 may be any data received from a supplying circuit or data input. In one particular embodiment of the present invention, data input 305 is a series of binary values. In other embodiments of the present invention, data input 305 is a series of parallel data transfers each of a width w. Based upon the disclosure provided herein, one of ordinary skill in the art will recognize a variety of sources of data input 305 and/or a variety of formats of data input 305.
Turning to FIG. 4, a representation of an encoding matrix 400 including user encode data 476, 486 and two levels of parity data ((p1), (p2)) in accordance with one or more embodiments of the present invention. User encode data 476 includes a number of data bits arranged into a quasi-cyclic low density parity check matrix of size m1×k. Quasi-cyclic low density parity check codes are known in the art and allow implementation of low complexity encoding and decoding circuitry. In some embodiments of the present invention, user encode data 476 is assembled such that it exhibits lower row weight relative to user encode data 486, and exhibiting all zero matrices. In one particular embodiment of the present invention m1 is four hundred, eighty (480) and k is four thousand, five hundred, twelve (47*96).
User encode data 486 includes a number of data bits arranged into a non-quasi-cyclic low density parity check matrix of size m2×k. Such non-quasi-cyclic low density parity check matrices utilize more complex encoding and decoding processes, but offer additional advantages when compared with quasi-cyclic low density parity check codes as are known in the art. In some particular embodiments, user data 486 includes ninety-six (96) or one hundred, ninety two (192) check equations. In one particular embodiment of the present invention m2 is on hundred, ninety two (192) and k is four thousand, five hundred, twelve (47*96).
A first level of parity encode data (p2) is separated into two parity regions 474, 484. Parity encode data 474 includes a number of parity bits (the number of bits is equal to m1*w2) arranged in an array of size m1×w2. In one particular embodiment of the present invention, m1 is four hundred, eighty (480), m2 is one hundred, ninety two (192), and w2 is one hundred, ninety two (192). Parity encode data 484 includes a number of parity bits (the number of bits is equal to m2*w2) arranged in an array of size m2×w2. In one particular embodiment of the present invention, m2 is one hundred, ninety two (192), and w2 is one hundred, ninety two (192). A second level of parity encode data (p(1)) is separated into two parity regions 472, 482. Parity encode data 472 includes a number of parity bits (the number of bits is equal to m1*w1) arranged in an array of size m1×w1. In one particular embodiment of the present invention m1 is four-hundred-eighty (5×96) and w1 is four-hundred-eighty (5×96). Parity encode data 482 includes a number of parity bits (the number of bits is equal to w1) arranged in an array of size m2×w1. In one particular embodiment of the present invention m2 is one hundred, ninety two (2×96) and w1 is four-hundred-eighty (5×96). User encode data 486 and parity encode data 484 are modified such that parity encode data 482 is all zeros. This modification is a change in the encoding matrix that simplifies the encoding process.
Referring back to FIG. 3, in operation, data input 305 is processed by encoder circuit 310 and encoder circuit 320 using encoding matrix 400. Subsequently, output 315 of first stage encoder circuit 310 and user data 305 is processed using encoding matrix 400.
Turning to FIG. 5a, a detailed diagram of a first stage encoder circuit 500 is shown. First stage encoder circuit 500 may be used in place of first stage encoder circuit 310 in various embodiments of the present invention. First stage encoder circuit 500 includes a sparse circulant vector multiplier circuit 511 that receives user data 505 (u) that is multiplied by user encode data 476 (Hu1) to yield an interim value 512 (s11) as set forth in the following equation:

s11=Hu1*u. 

User encode data 476 is available from a pre-programmed Hu1 read only memory 516, and is a sparse matrix in circulant form. Interim value 512 is provided to another sparse circulant vector multiplier circuit 521. Sparse circulant vector multiplier circuit 521 multiplies interim value 512 by the modified parity encode data 482 ({tilde over (H)}p21) to yield another interim value 522 (s21) as set forth in the following equation:

s21={tilde over (H)}p21*s11.

The modified parity encode data 482 ({tilde over (H)}p21) is available from a preprogrammed {tilde over (H)}p21 read only memory 526, and is a sparse matrix in circulant form.

In parallel, the received user data 505 (u) is multiplied by user encode data 486 (Hu2) using another sparse circulant vector multiplier circuit 556 to yield another interim value 558 (s22) as set forth in the following equation:

s22=Hu2*u. 

User encode data 486 is available from a pre-programmed Hu2 read only memory 561, and is a sparse matrix in circulant form. Interim value 522 (s21) and interim value 558 (s22) are provided to an XOR array circuit 531 where the two interim values are XORd to yield another interim value 532 (s2) as set forth in the following equation:

s2=s21s22.

Interim output 532 (s2) is provided to a syndrome calculation circuit 590. Syndrome calculation circuit includes an XOR array circuit 536 that XORs interim output 532 by a preprogrammed value (sLBA) in an LBA syndrome pattern register 541 to yield another interim value 538 (s2′) in accordance with the following equation:

s2′=s2sLBA. 

Where such syndrome encoding is applied where, for example, there are one hundred, ninety-two rows of H2 (i.e., the combination of {tilde over (H)}u2, {tilde over (H)}p22 and {tilde over (H)}p21), the encoder can support up to one hundred, ninety-one LBA bits along with syndrome pattern to improve error floor and mis-correction rate. In such a case, sLBA is the mapping of LBA bits to the partial syndrome for H2. Interim value 538 is provided to a matrix vector multiplier 546 where it is multiplied by the inverse of the modified parity encode data 484 (Inv({tilde over (H)}p22)) to yield another interim value 548 (p2′) as set forth in the following equation:

p2′=s2′*Inv({tilde over (H)}p22).

Parity encode data 484 is available from a pre-programmed Inv({tilde over (H)}p22) read only memory 551, and is a dense matrix. The density is a result of the non-cyclic part of the high row weight block. For a real quasi-cyclic code, Inv({tilde over (H)}p22) can also be found in sparse circulant form as Inv(Hp11). If {tilde over (H)}p22 is not a full rank matrix, a sub-matrix of {tilde over (H)}p22 derived from {tilde over (H)}p22 has the same rank as {tilde over (H)}p22.

In one particular embodiment, Inv({tilde over (H)}p22) is a dense matrix with a size of 192×192. Interim value 548 is modified by an append all-zero vector circuit 556. The modification includes filling out an array size with zeros in all of the unfilled locations to yield a first stage output 558 (p2).
Turning to FIG. 5b, a detailed diagram of a second stage encoder circuit 502 of a multi-stage encoder circuit in accordance with some embodiments of the present invention. Second stage encoder circuit 502 may be used in place of second stage encoder circuit 320 in various embodiments of the present invention. Second stage encoder circuit 502 includes sparse circulant vector multiplier circuit 510 that receives first stage output 558 (p2) and multiplies it by parity encode data 474 (Hp12) to yield an interim value 513 (s12) as set forth in the following equation:

s12=Hp12*p2.

Parity encode data 574 is available from pre-programmed Hp12 read only memory 520. An XOR array circuit 530 XORs interim value 513 with interim value 512 to yield another interim value 531 (s1) in accordance with the following equation:

s1=s12s11.

Interim value 531 (s1) is provided to another sparse circulant vector multiplier circuit 540 where it is multiplied by the inverse of parity encode data 472 (Inv(Hp11)) to yield a second stage output 541 (p1) in accordance with the following equation:

p1=Inv(Hp11)*s1.

The inverse of parity encode data 472 is available from a pre-programmed Inv(Hp11) read only memory 550.

Turning to FIG. 5c, a detailed diagram of an alternative first stage encoder circuit 501 is shown. First stage encoder circuit 501 is similar to the previously described first stage encoder circuit 500 except that the syndrome calculation circuit is eliminated. First stage encoder circuit 501 may be used in place of first stage encoder circuit 310 in various embodiments of the present invention. First stage encoder circuit 501 includes sparse circulant vector multiplier circuit 511 that receives user data 505 (u) that is multiplied by user encode data 476 (Hu1) to yield interim value 512 (s11) as set forth in the following equation:

s11=Hu1*u. 

User encode data 476 is available from pre-programmed Hu1 read only memory 516. Interim value 512 is provided to sparse circulant vector multiplier circuit 521. Sparse circulant vector multiplier circuit 521 multiplies interim value 512 by the modified parity encode data 482 ({tilde over (H)}p21) to yield another interim value 522 (s21) as set forth in the following equation:

s21={tilde over (H)}p21*s11.

The modified parity encode data 482 (Hp21) is available from preprogrammed {tilde over (H)}p21 read only memory 526.

In parallel, the received user data 505 (u) is multiplied by user encode data 486 (Hu2) using sparse circulant vector multiplier circuit 556 to yield interim value 558 (s22) as set forth in the following equation:

s22=Hu2*u. 

User encode data 486 is available from pre-programmed Hu2 read only memory 561. Interim value 522 (s21) and interim value 558 (s22) are provided to XOR array circuit 531 where the two interim values are XORd to yield interim value 532 (s2) as set forth in the following equation:

s2=s21s22.

Interim output 532 (s2) is provided to matrix vector multiplier 546 where it is multiplied by the inverse of the modified parity encode data 484 (Inv({tilde over (H)}p22)) to yield another interim value 548 (p2′) as set forth in the following equation:

p2′=s2′*Inv({tilde over (H)}p22).

Parity encode data 484 is available from a pre-programmed Inv({tilde over (H)}p22) read only memory 551. Interim value 548 is modified by append all-zero vector circuit 556. The modification includes filling out an array size with zeros in all of the unfilled locations to yield a first stage output 558 (p2).

Turning to FIG. 6, a flow diagram 600 shows a method for multi-stage encoding in accordance with some embodiments of the present invention. Following flow diagram 600, it is determined whether input data is received (block 605). Such input data may be received from any source including, but not limited to, a host processor. Based upon the disclosure provided herein, one of ordinary skill in the art will recognize a variety of data sources that may be used in relation to different embodiments of the present invention.
Where input data is received (block 605), a first level encoding process is applied to the input data (block 610). Both the first level encoding and the second level encoding are performed using an encoding matrix similar to that described above in relation to FIG. 4, and both levels of encoding are applied such that the following equation is maintained true:




  
    
      
        [
        
          
            0
            ⁢
            
              
            
            ⁢
            
              H
              ~
            
            ⁢
            p
            ⁢
            
              
            
            ⁢
            22
          
          -
          
            Hp
            ⁢
            
              
            
            ⁢
            21
            ×
            
              
                (
                
                  Hp
                  ⁢
                  
                    
                  
                  ⁢
                  11
                
                )
              
              
                -
                1
              
            
            ×
            Hu
            ⁢
            
              
            
            ⁢
            1
            ×
            Hu
            ⁢
            
              
            
            ⁢
            2
          
        
        ]
      
      ×
      
        [
        
          
            
              
                p
                ⁢
                
                  
                
                ⁢
                1
              
            
          
          
            
              
                p
                ⁢
                
                  
                
                ⁢
                2
              
            
          
          
            
              u
            
          
        
        ]
      
    
    ≡
    0
  
  ,




where p1 is a set of first level parity bits generated by the encoding process, p2 is a set of second level parity bits generated by the encoding process, and u is a set of received input data. {tilde over (H)}p22=−Hp21×(Hp11)−1×Hu1×Hu2 which is a sparse matrix derived from the matrices Hp11, Hp12, Hp21 and Hp22 of the utilized encoding matrix. This modification assures that the sub-matrix in the original Hp21 position is all zeros. This modification to the encoding matrix operates to simplify the encoding process.

Using the equivalence defined above and the available encoding matrix, the first level encoding includes multiplying the received input data (u) by a sparse matrix (Hu1) to yield an interim value (s11) in accordance with the following equation:

s11=Hu1*u. 

The interim value (s11) is then multiplied by another sparse matrix (Hp21) to yield another interim value (s21) in accordance with the following equation:

s21={tilde over (H)}p21*s11.

The sparse matrix {tilde over (H)}p21 is itself a sparse matrix and is defined by the following equation:

{tilde over (H)}p21=−Hp21*Inv(Hp11),

Where Inv(Hp11) is the inverse of sparse matrix Hp11 that is itself another sparse matrix.

In parallel, the received input data (u) is multiplied by sparse matrix {tilde over (H)}u2 to yield another interim value (s22) as set forth in the following equation:

s22={tilde over (H)}u2*u. 

The interim value (s22) is XORd with the interim value (s21) to yield another interim value (s2) in accordance with the following equation:

s2=s22s21.

The interim value s2 is then multiplied by the inverse of encoding matrix {tilde over (H)}p22 (i.e., Inv({tilde over (H)}p22)) to yield another interim value p2′ in accordance with the following equation:

p2′=Inv({tilde over (H)}p22)×s2.

Then, the matrix p2′ is filled out with zeros to be of the appropriate size to yield p2. p2 is the result of the first level encoding process.

Once the first level encoding process is completed (block 610), a second level encoding process is applied (block 615). Such second level encoding includes multiplying the result of the first level encoding (p2) by a sparse matrix Hp12 to yield an interim value s12 in accordance with the following equation:

s12=Hp12*p2.

The interim value s12 and the interim value s11 from the first level encoding are XORd together to yield another interim value s1 in accordance with the following equation:

s1=s12s11.

The interim value s1 is multiplied by the inverse of sparse vector Hp11 (i.e., Inv(Hp11) to yield the encoded output p1 in accordance with the following equation:

p1=s1*Inv(Hp11).

Once computed, the encoded data is provided as an output (block 620).

In conclusion, the invention provides novel systems, devices, methods, formats and arrangements for data encoding. While detailed descriptions of one or more embodiments of the invention have been given above, various alternatives, modifications, and equivalents will be apparent to those skilled in the art without varying from the spirit of the invention. Therefore, the above description should not be taken as limiting the scope of the invention, which is defined by the appended claims.

## Claims

1. A data encoding circuit, the data encoding circuit comprising:
a first stage data encoder circuit including a first vector multiplier circuit operable to receive a data input and to multiply the data input by a first sparse matrix to yield a first interim value, and wherein the first stage data encoder circuit is operable to provide a first stage output; and
a second stage encoder circuit including a second vector multiplier circuit operable to multiply a third interim value by a second sparse matrix to yield a second interim value, and wherein the second stage encoder circuit further includes a third vector multiplier circuit operable to multiply the data input by a third sparse matrix to yield the third interim value.

2. The data encoding circuit of claim 1, wherein the first sparse matrix and the second sparse matrix are part of an encoding matrix.

3. The data encoding circuit of claim 2, wherein the encoding matrix includes a quasi-cyclic code portion, and a non-quasi-cyclic code portion.

4. The data encoding circuit of claim 3, wherein both the first sparse matrix and the second sparse matrix are part of the quasi-cyclic portion.

5. The data encoding circuit of claim 1, wherein the first sparse matrix, the second sparse matrix, and the third sparse matrix are part of an encoding matrix, wherein the encoding matrix includes a quasi-cyclic code portion, and a non-quasi-cyclic code portion, and wherein the third sparse matrix is part of the non-quasi-cyclic portion.

6. The data encoding circuit of claim 1, wherein the first stage data encoder circuit further includes an XOR array circuit operable to XOR the first interim value with the second interim value to yield a fourth interim value.

7. The data encoding circuit of claim 6, wherein the first stage data encoder circuit further includes a fourth vector multiplier circuit operable to multiply the fourth interim value by a dense matrix to yield a subset of the first stage output.

8. The data encoding circuit of claim 7, wherein the first sparse matrix, the second sparse matrix, the third sparse matrix, and a dense matrix are part of an encoding matrix, wherein the encoding matrix includes a quasi-cyclic code portion, and a non-quasi-cyclic code portion, and wherein the dense matrix is part of the non-quasi-cyclic portion.

9. The data encoding circuit of claim 1, wherein the data encoding circuit is implemented as part of a system selected from a group consisting of: a data storage system, and a data transmission system.

10. A method for performing data encoding, the method comprising:
receiving a data input;
performing a first stage encoding of the data input to yield a first stage output, wherein the first stage encoding includes multiplying the data input by a first sparse matrix to yield a first interim value;
performing a second stage encoding utilizing the first stage output and the interim value;
multiplying the data input by a second sparse matrix to yield a second interim value; and
XORing the first interim value and the second interim value to yield a third interim value.

11. The method of claim 10, wherein the method further comprises:
performing a syndrome encoding, wherein the syndrome encoding includes XORing the third interim value by a syndrome pattern to yield a fourth interim value.

12. The method of claim 11, wherein the method further comprises:
multiplying the fourth interim value by a dense matrix to yield a subset of the first stage output.

13. A storage device, wherein the storage device includes:
an encoding circuit utilizing an encoding matrix having a quasi-cyclic code portion and a non-quasi-cyclic code portion; wherein the non-quasi-cyclic portion includes a dense matrix, a first sparse matrix and a second sparse matrix; and wherein the quasi-cyclic portion includes a third sparse matrix, a fourth sparse matrix, and a fifth sparse matrix.

14. The storage device of claim 13, wherein the storage device is implemented as part of an encoding circuit, and wherein the encoding circuit includes:
a first stage data encoder circuit including a first vector multiplier circuit operable to receive a data input and to multiply the data input by the third sparse matrix to yield a first interim value, a second vector multiplier circuit operable to multiply the first interim value by the second sparse matrix to yield a second interim value, a third vector multiplier circuit operable to multiply the data input by the first sparse matrix to yield a third interim value, and an XOR array circuit operable to XOR the second interim value with the third interim value to yield a fourth interim value, and a circuit operable to generate a first stage output based at least in part on the fourth interim value; and
a second stage encoder circuit including a fourth vector multiplier circuit operable to multiply the first stage output by the fourth sparse matrix to yield a fifth interim value, an XOR array circuit operable to XOR the fifth interim value with the first interim value to yield a sixth interim value; and a fifth vector multiplier circuit operable to multiply the sixth interim value by the fifth sparse matrix to yield an encoded output.

15. An encoding system, the encoding system comprising:
a first stage encoding circuit including a vector multiplier circuit operable to multiply a first interim value by a first matrix to yield a second interim value, wherein the first interim value is derived from a data input; and
an XOR array circuit operable to XOR the second interim value with a third interim value to yield a fourth interim value, wherein the third interim value is derived from the data input.

16. The encoding system of claim 15, wherein the vector multiplier circuit is a first vector multiplier circuit, and wherein the first stage encoding circuit further comprises:
a second vector multiplier circuit operable to multiply the data input by a second matrix to yield the first interim value.

17. The encoding system of claim 16, wherein the encoding system further comprises:
a second stage encoding circuit including a third vector multiplier circuit operable to multiply the data input by a third matrix to yield the third interim value.

18. The encoding system of claim 17, wherein the encoding system further comprises:
a fourth vector multiplier circuit operable to multiply an encoded input derived from the fourth interim value to yield an encoded output.

19. The data encoding system of claim 15, wherein the system is implemented as part of an integrated circuit.