LOW-POWER SYSTEMATIC ECC ENCODER WITH BALANCING BITS
20240372568 ยท 2024-11-07
Assignee
Inventors
- Idan Dekel (Suwon-si, KR)
- Amit Berman (Suwon-si, KR)
- Ariel Doubchak (Suwon-Si, KR)
- Yaron Shany (Suwon-si, KR)
Cpc classification
H03M13/3961
ELECTRICITY
H03M13/2903
ELECTRICITY
H03M13/19
ELECTRICITY
G06F11/08
PHYSICS
H03M13/2942
ELECTRICITY
International classification
H03M13/39
ELECTRICITY
H03M13/15
ELECTRICITY
Abstract
Systems, devices, and methods for encoding information bits for storage, including obtaining information bits and a target constraints vector, placing the information bits in an input vector, setting balance bits included in the input vector to zero, encoding the input vector using a systematic code to obtain a preliminary codeword, applying a constraints matrix to the preliminary codeword to obtain a preliminary constraints vector, applying a transition matrix to a sum of the preliminary constraints vector and the target constraints vector to determine updated balance bits, obtaining an output codeword based on the information bits and the updated balance bits, and storing the output codeword in the storage device.
Claims
1. A storage system, comprising: a storage device configured to store a plurality of codewords; at least one processor configured to: obtain information bits and a target constraints vector; place the information bits in an input vector; set balance bits included in the input vector to zero; encode the input vector using a systematic code to obtain a preliminary codeword; apply a constraints matrix to the preliminary codeword to obtain a preliminary constraints vector; apply a transition matrix to a sum of the preliminary constraints vector and the target constraints vector to determine updated balance bits; obtain an output codeword based on the information bits and the updated balance bits; and store the output codeword in the storage device.
2. The storage system of claim 1, wherein to obtain the output codeword, the at least one processor is further configured to: obtain an updated input vector comprising the information bits and the updated balance bits; and encode the updated input vector using the systematic code to obtain the output codeword.
3. The storage system of claim 1, wherein the preliminary codeword comprises a first preliminary codeword, and wherein to obtain the output codeword, the at least one processor is further configured to: obtain an updated input vector comprising the updated balance bits; set the information bits included in the updated input vector to zero; encode the updated input vector using the systematic code to obtain a second preliminary codeword; and obtain the output codeword as a sum of the first preliminary codeword and the second preliminary codeword.
4. The storage system of claim 1, wherein the systematic code comprises a Bose-Chaudhuri-Hocquenghem (BCH) code, and wherein the output codeword comprises a generalized concatenated code (GCC) codeword.
5. The storage system of claim 4, wherein the target constraints vector comprises GCC parity symbols, and wherein the constraints matrix comprises a GCC transform matrix.
6. The storage system of claim 1, wherein there is a bijective mapping between a first arrangement of the output codeword and a second arrangement of the output codeword, and wherein each row of the first arrangement and each row of the second arrangement comprises a Hamming codeword.
7. The storage system of claim 6, wherein the at least one processor is further configured to: place the input vector in the first arrangement; encode the input vector in the first arrangement using the systematic code to obtain a first plurality of bits, wherein the first plurality of bits is included in the first arrangement; permute the input vector and the first plurality of bits to obtain a second plurality of bits, wherein the second plurality of bits is included in the second arrangement; encode the second plurality of bits using the systematic code to obtain a third plurality of bits, wherein the third plurality of bits is included in the second arrangement; permute the third plurality of bits to obtain a fourth plurality of bits and a fifth plurality of bits, wherein the fourth plurality of bits and the fifth plurality of bits are included in the first arrangement; and encode the fourth plurality of bits using the systematic code to obtain a sixth plurality of bits, wherein the fifth plurality of bits comprises the preliminary constraints vector, and wherein the sixth plurality of bits comprises the target constraints vector.
8. A device for encoding information bits for storage in a storage device, the device comprising: a memory interface configured to communicate with the storage device; and at least one processor configured to: obtain the information bits and a target constraints vector; obtain a preliminary constraints vector by applying a constraints transform to the information bits; apply a transition matrix to a sum of the preliminary constraints vector and the target constraints vector to obtain balance bits; obtain an output codeword based on the information bits and the balance bits; and control the memory interface to transmit the output codeword to the storage device.
9. The device of claim 8, wherein to apply the constraints transform, the at least one processor is further configured to: place the information bits in an input vector; encode the input vector using a systematic code to obtain a preliminary codeword; and apply a constraints matrix to the preliminary codeword to obtain the preliminary constraints vector.
10. The device of claim 9, wherein to obtain the output codeword, the at least one processor is further configured to: obtain an updated input vector comprising the information bits and the balance bits; and encode the updated input vector using the systematic code to obtain the output codeword.
11. The device of claim 9, wherein the preliminary codeword comprises a first preliminary codeword, and wherein to obtain the output codeword, the at least one processor is further configured to: obtain an updated input vector comprising the balance bits; set the information bits included in the updated input vector to zero; encode the updated input vector using the systematic code to obtain a second preliminary codeword; and obtain the output codeword as a sum of the first preliminary codeword and the second preliminary codeword.
12. The device of claim 9, wherein the systematic code comprises a Bose-Chaudhuri-Hocquenghem (BCH) code, and wherein the output codeword comprises a generalized concatenated code (GCC) codeword.
13. The device of claim 12, wherein the target constraints vector comprises GCC parity symbols, and wherein the constraints matrix comprises a GCC transform matrix.
14. The device of claim 9, wherein there is a bijective mapping between a first arrangement of the output codeword and a second arrangement of the output codeword, and wherein each row of the first arrangement and each row of the second arrangement comprises a Hamming codeword.
15. The device of claim 14, wherein the at least one processor is further configured to: place the input vector in the first arrangement; encode the input vector in the first arrangement using the systematic code to obtain a first plurality of bits, wherein the first plurality of bits is included in the first arrangement; permute the input vector and the first plurality of bits to obtain a second plurality of bits, wherein the second plurality of bits is included in the second arrangement; encode the second plurality of bits using the systematic code to obtain a third plurality of bits, wherein the third plurality of bits is included in the second arrangement; permute the third plurality of bits to obtain a fourth plurality of bits and a fifth plurality of bits, wherein the fourth plurality of bits and the fifth plurality of bits are included in the first arrangement; and encode the fourth plurality of bits using the systematic code to obtain a sixth plurality of bits, wherein the fifth plurality of bits comprises the preliminary constraints vector, and wherein the sixth plurality of bits comprises the target constraints vector.
16. A method of controlling a storage system, the method being executed by at least one processor and comprising: obtaining information bits and a target constraints vector; placing the information bits in an input vector; setting balance bits included in the input vector to zero; encoding the input vector using a systematic code to obtain a preliminary codeword; applying a constraints matrix to the preliminary codeword to obtain a preliminary constraints vector; applying a transition matrix to a sum of the preliminary constraints vector and the target constraints vector to determine updated balance bits; obtaining an output codeword based on the information bits and the updated balance bits; and storing the output codeword in a storage device.
17. The method of claim 16, wherein the obtaining of the output codeword comprises: obtaining an updated input vector comprising the information bits and the updated balance bits; and encoding the updated input vector using the systematic code to obtain the output codeword.
18. The method of claim 16, wherein the preliminary codeword comprises a first preliminary codeword, and wherein the obtaining of the output codeword comprises: obtaining an updated input vector comprising the updated balance bits; setting the information bits included in the updated input vector to zero; encoding the updated input vector using the systematic code to obtain a second preliminary codeword; and obtaining the output codeword as a sum of the first preliminary codeword and the second preliminary codeword.
19. The method of claim 16, wherein the systematic code comprises a Bose-Chaudhuri-Hocquenghem (BCH) code, and wherein the output codeword comprises a generalized concatenated code (GCC) codeword.
20. The method of claim 19, wherein the target constraints vector comprises GCC parity symbols, and wherein the constraints matrix comprises a GCC transform matrix.
21-30. (canceled)
Description
BRIEF DESCRIPTION OF THE DRAWINGS
[0010] The above and other aspects, features, and advantages of certain embodiments of the present disclosure will be more apparent from the following description taken in conjunction with the accompanying drawings, in which:
[0011]
[0012]
[0013]
[0014]
[0015]
[0016]
[0017]
[0018]
[0019]
[0020]
[0021]
[0022]
[0023]
[0024]
[0025]
[0026]
[0027]
[0028]
[0029]
DETAILED DESCRIPTION
[0030] Embodiments of the present disclosure may relate to a general method for systematic encoding with constraints. Embodiments may enforce the desired constraints by adding parity bits, activating a simple systematic encoder twice, and then using a predetermined matrix which is constraint-specific. Accordingly, embodiments may encode the codeword and enforce the constraints with relatively low complexity proportional to their number.
[0031] As discussed above, a code C.sub.0(n, k) may have available a simple, systematic encoder which receives k information bits and produces codewords c?C.sub.0 of length n. Some tasks may require additional set of L affine constraints, which may be represented using a constraints matrix P.sub.L?n and a constraints vector d.sub.L. The simple encoder for C.sub.0 may not be built to enforce these new constraints. Therefore, there is a need for a method which may encode words in C.sub.0 that uphold the affine constraints, using the simple encoder.
[0032] This problem may be interpreted as the encoding of C.sub.1, a subcode of C.sub.0. This may mean that all words in C.sub.1 are included in C.sub.0, but because not all words in Co satisfy the additional requirements, not all words in C.sub.0 are included in C.sub.1. Therefore, according to embodiments, an encoder may be generalized to uphold more complicated demands.
[0033] Embodiments may relate to a general scheme which handles the scenario presented for any code C.sub.0 and subcode C.sub.1. For example, a set of L bits, which may be referred to as balance bits, may be added to the encoder's input in order to control the product vector d=P.Math.c, which may be the condition for the codeword c to be in C.sub.1. According to embodiments, these balance bits may be dedicated to handle the additional affine constraints. A system may be designed that translates the balance bits to d, and vice versa. The encoder of C.sub.1 may use this system to compute these balance bits with respect to the information input and the required constraints vector d. Accordingly, embodiments may be useful many storage technologies, for example Universal Flash Storage (UFS) storage devices. In addition, embodiments may be useful in many other technologies, for example data transmission and reception, data compression and decompression, data processing such as file conversion, and any other technology in which information is encoded and decoded.
[0034]
[0035] The memory device 110 may be, but is not limited to, a flash memory device, a NAND flash memory device, a phase change RAM (PRAM), a ferroelectric RAM (FRAM), a magnetic RAM (MRAM), etc. According to embodiments, the memory device 110 may include a plurality of NAND flash memory devices. The memory device 110 may have a planar structure or a three-dimensional (3D) memory cell structure with a stack of memory cells.
[0036] The memory device 110 may include a memory cell array 115, an X Decoder 120, a voltage generator 114, a register 113, an input/output (I/O) buffer 117, a page buffer 116, and a control logic 112 each of which may be implemented as one or more circuits. The memory device 110 may also include an I/O pad 111.
[0037] The memory cell array 115 may include a plurality of word lines and a plurality of bit lines. Each memory cell of the memory cell array 115 may be implemented as a nonvolatile memory cell. For example, each memory cell of the memory cell array 115 may have, for example, a floating gate or a charge storage layer such as a charge trapping layer.
[0038] The memory cell array 115 may include a plurality of blocks and a plurality of pages. Each block may include a plurality of pages. For example, a first block 118 may include a first plurality of pages 1-N while a second block 119 may include a second plurality of pages 1-N, where N is an integer greater than 1. A page may be a unit of program and read operations, and a block may be a unit of erase operation.
[0039] The control logic 112 may control the overall operation of the memory device 110. When receiving a command CMD from the memory controller 100, the control logic 112 may interpret the command CMD and control the memory device 110 to perform an operation (e.g., a program operation, a read operation, a read retry operation, or an erase operation) according to the interpreted command CMD.
[0040] The X Decoder 120 may be controlled by the control logic 112 and drive at least one of the word lines in the memory cell array 115 according to a row address.
[0041] The voltage generator 114 may be controlled by the control logic 112 to generate one or more voltages required for a program operation, a read operation or an erase operation and provide the generated voltages to one or more rows selected by the X Decoder 120.
[0042] The page buffer 116 may be controlled by the control logic 112 and operate as a sense amplifier or a write driver according to an operation mode (e.g., a read operation or a program operation).
[0043] The I/O pad 111 and the I/O buffer 117 may serve as I/O paths of data (illustrated as DATA) exchanged between an external device, e.g., the memory controller 100 or a host and the memory device 110.
[0044] The memory controller 100 may include a processor 101, a read-only memory (ROM) 103, a random access memory (RAM) 102, an encoder 104, a decoder 105, a memory interface 106, and a bus 107. The elements 101 through 106 of the memory controller 100 may be electrically connected to each other through the bus 107.
[0045] The processor 101 may control the overall operation of the memory system including the memory controller 100. The processor 101 may include a circuit that controls other elements by generating control signals. When power is supplied to the memory system, the processor 101 may drive firmware (e.g., stored in the ROM 103) for operating the memory system on the RAM 102, thereby controlling the overall operation of the memory system. According to embodiments, the processor 101 may also issue instructions for controlling operations of other elements of the memory controller 100 including, for example, some or all of the ROM 103, RAM 102, encoder 104, decoder 105, memory interface 106, and a bus 107. According to embodiments, any operations described herein as being performed by the memory controller 100 may be performed by, or under the control of, the processor 101. According to embodiments, any operations described herein as being performed by the memory controller 100 may be performed by, or under the control of, the processor 101 executing instructions that correspond to the operations and are included in program code (e.g., stored in the ROM 103).
[0046] A driving firmware code of the memory system may be stored in the ROM 103, however embodiments are not limited thereto. The firmware code can also be stored in a portion of the memory device 110. Therefore, the control or intervention of the processor 101 may encompass not only the direct control of the processor 101 but also the intervention of firmware which is software driven by the processor 101.
[0047] The RAM 102, which may include a memory serving as a buffer, may store an initial command, data, and various variables input from a host or the processor 101, or data output from the memory device 110. The RAM 102 may store data and various parameters and variables input to and output from the memory device 110.
[0048] The memory interface 106 may serve as an interface between the memory controller 100 and the memory device 110. The memory interface 106 is connected to the I/O pad 111 of the memory device 110 and may exchange data with the I/O pad 111. In addition, the memory interface 106 may create a command suitable for the memory device 110 and provide the created command to the I/O pad 111 of the memory device 110. The memory interface 106 provides a command to be executed by the memory device 110 and an address ADD of the memory device 110.
[0049] According to embodiments, the decoder 105 may be an error correcting code (ECC) decoder configured to decode data in the manner described above, and the encoder 104 may be an ECC encoder configured to encode data in the manner described above. According to embodiments, the decoder 105 and the encoder 104 may perform error bit correction in the manner described above. The encoder 104 may generate data added with one or more parity and/or redundancy bits by performing error correction encoding on data before the data is provided to the memory device 110. The one or more parity and/or redundancy bits may be stored in the memory device 110.
[0050] The decoder 105 may perform error correction decoding on output data, determine whether the error correction decoding is successful based on the result of the error correction decoding, and output an instruction signal based on the determination result. Read data may be transmitted to the decoder 105, and the decoder 105 may correct error bits of the data using the one or more parity and/or redundancy bits.
[0051]
[0052]
[0053] In embodiments, the systematic encoder 203 may be referred to as systematic because the input vector i may be embedded in codeword c at a known set of indexes InfoSet, such that c[InfoSet]=i.
[0054] As shown in
[0055]
[0056] In order to enforce the constraints, for example in order to ensure that the codeword c is included in C.sub.1, the input vector i may be expanded to include an additional L number of bits, which may be the balance bits denoted b. For example, the input vector i used as input for the encoder 200 may have a length k, and may include information bits in an information vector i, which may have a length k?L, and may further include the balance bits b, which may have a length L. In embodiments, the indexes set for the information bits in i may be referred to as set ?, such that i[?]=i, and the indexes set for the balance bits in i may be referred to as set ?, such that i[?]=b, and |???|=0. Set ? locations in the indexes of i may be tailored to the specific problem, for example to the specific codes being used, and are not necessarily consecutive.
[0057] In embodiments, the balance bits may be used to make the output codeword c.sub.out meet the demanded constraints, for example to ensure that the output codeword c.sub.out is included in C.sub.1. In order to determine the relationship between the balance bits b and the preliminary constraints vector d*, a transition matrix T may be assembled. In embodiments, the standard basis may be expressed as {e.sub.0,e.sub.1, . . . ,e.sub.L-1}, in which the kth component of a basis vector e.sub.k is equal to 1, and all other components of the basis vector ex are equal to 0 (e.g., e.sub.k,k=1 and e.sub.k,j?k=0). The transition matrix T may be used to transform the standard basis to a basis that can be used in the encoder 200.
[0058]
[0059] For example, at operation 401, the process 400 may include setting the balance bits b equal to the basis vector e.sub.j. At operation 402, the process 400 may include placing the balance bits b in the input vector i, and setting the information vector i of the input vector i to 0. At operation 403, the process 400 may include computing the constraints vector d*.sub.j using the constraints transform module 201. Then, at operation 404, the process 400 may include placing the constraints vector in the j.sup.th column of transition matrix T, which may be the j.sup.th row of an transposed transition matrix T.sup.t. As illustrated in
[0060] In embodiments, the transition matrix T may be used to manufacture any L length vector with the balance bits b. For this to happen, the transition matrix T must be fully ranked. If the transition matrix T is not fully ranked, the set ? may be changed. A b to d* transform is linear, and may be represented according to Equation 4 below:
[0061] The transition matrix T computed according to
[0062] In embodiments, the encoder 200 may receive as inputs the information vector i and a target constraints vector d.sub.w. Predetermined parameters for the encoder 200 may be determined in advance. For example, in embodiments the predetermined parameters may include, for example, a constraints matrix P such that d.sub.w=P.Math.c.sub.out for every output codeword c.sub.out included in the set C.sub.1. In addition, the predetermined parameters may include the inverse transition matrix, T.sup.?1 and the indexes sets ?, ?.
[0063] In embodiments, the encoder 200 may compute the preliminary constraints vector di, which may represent the impact of the information vector i on the constraints vector d. In embodiments, the preliminary constraints vector d.sub.i may be output by the constraints transform module 201, where i[?]=i and i[?]=0. As discussed above, the constraints transform module 201 may obtain the preliminary constraints vector d.sub.i by applying the constraints matrix P to the preliminary codeword c.sub.i, which may be output by the systematic encoder 203. However, the preliminary codeword c.sub.i is not known to be included in C.sub.1. Therefore, the target constraints vector d.sub.w may be used to produce balance bits b which may be added to the input vector i to cause the systematic encoder 203 to produce an output codeword c.sub.out which is included in C.sub.1. In embodiments, the balance bits b may be determined by the transition matrix module 202 according to Equation 6 below:
[0064] Then, the systematic encoder 203 may be activated for the second time with the computed balance bits b added to the input vector i such that i[?]=b.
[0065] Because the operations performed by the encoder 200 may be linear operations, the encoder 200 may be implemented using different schemes which are equivalent to each other. For example, according to a first example scheme, the encoder 200 may use the second activation of the systematic encoder 203 to produce the output codeword c.sub.out, by injecting the input vector i with i[?]=i and i[?]=b.
[0066]
[0067]
[0068] In embodiments, the output codeword c.sub.out generated according to the process 600 may be included in C.sub.0 because it is an output of the systematic encoder 203, and may be included in C.sub.1 because the balance bits b are determined based on the constraints matrix P and the target constraints vector d.sub.w.
[0069] As another example, according to a second example scheme, the encoder may use the first activation of the systematic encoder 203, occurring for example during the operation of the constraints transform module 201, to compute the preliminary codeword c.sub.i, which may be referred to as a first preliminary codeword. The encoder 200 may then use the second activation of the systematic encoder 203 to compute a preliminary codeword c.sub.b, which may be referred to as a second preliminary codeword, by injecting the input vector i with i[?]=0 and i[?]=b. The encoder 200 may then add the preliminary codeword c.sub.i to the preliminary codeword c.sub.b to obtain the output codeword c.sub.out. In embodiments, the preliminary codeword c.sub.i may represent the impact of the information vector i on the output codeword c.sub.out, and the preliminary codeword c.sub.b may represent the impact of the balance bits b on the output codeword c.sub.out.
[0070]
[0071]
[0072] In embodiments, the output codeword c.sub.out generated according to the process 800 may be included in C.sub.0 because it is the sum of outputs of the systematic encoder 203, and may be included in C.sub.1 because the balance bits b are determined based on the constraints matrix P and the target constraints vector d.sub.w. In embodiments, the second scheme may be useful in situations where there is an advantage in zeroing some of the inputs of the systematic encoder 203.
[0073] In embodiments, at least one of the encoder 200, the encoder 500, and the encoder 700 may be used to perform encoding according to various different coding techniques, specific examples of which are discussed in greater detail below.
[0074]
[0075]
[0076] In embodiments, each codeword c may be multiplied by the constraints matrix P and produce a row of symbols in an auxiliary matrix A. In embodiments, based on the GCC coding technique being used, the constraints matrix P may be a GCC transform matrix. The columns of the auxiliary matrix A may be codewords in a binding code of the GCC coding technique. The number of columns may be at least S?1, and each column may be associated with a stage and have the same number of information symbols as the number of rows in that stage.
[0077]
[0078]
[0079] In embodiments, this conflict may be resolved by adding affine constraints Pc=d to the codes of the rows, where the constraints vector d may be determined based on the auxiliary matrix A.
[0080] As an example, the rows of the GCC coding technique may be encoded using a Bose-Chaudhuri-Hocquenghem (BCH) code. For integers
there may exist a binary BCH code with parameters according to Equation 7 and Equation 8 below:
[0081] This BCH code may be capable of correcting any combination of t or fewer errors. A codeword c may be a BCH codeword if its polynomial representation can be divided by the code's generator polynomial g(x) with no remainder. For example, A codeword c may be a BCH codeword if there exists a polynomial q(x) which satisfies Equation 9 below:
[0082]
[0083] As shown in
[0084] In embodiments, the GCC constraints may be enforced on the BCH word according to Equation 10 below:
[0085] In Equation 10, L may represent the size (number of bits) of a symbol of the binding code multiplied by the number of parity symbols in the auxiliary matrix rows of stage s.
[0086]
[0087] As shown in
[0088]
[0089] In embodiments, a GLDPC codeword of length N may be represented in two different arrangements, illustrated in
[0090] Both arrangements may correspond to column N?1, but have rectangle representation with s rows and n columns, such that N=s.Math.n.
[0091] In embodiments, each row of each arrangement of the GLDPC codeword may be a shortened Hamming codeword (n=2.sup.m, k.sub.H=2.sup.m?m?1) for some m, such that n=2.sup.m, k.sub.H=2.sup.m?m?1. In embodiments, the shortened Hamming codewords may be referred to as constituent codewords. As a result, all s.sub.1 rows in J.sub.1 and all s.sub.2 rows in J.sub.2 block representation are Hamming codewords.
[0092] Therefore, in order to check that a codeword c is a GLDPC codeword, the codeword c may be arranged into an arrangement J.sub.1, which may be a rectangle s.sub.1?n.sub.1, and the s.sub.1 rows may be checked to determine whether they are all Hamming codewords. Then, the arrangement J.sub.1 may be permuted using the permutation ? into an arrangement J.sub.2, which may be a rectangle s.sub.2?n.sub.2, and the s.sub.2 rows may be checked to determine whether they are all Hamming codewords as well.
[0093] In embodiments, a GLDPC coding technique may be performed using at least one of the encoder 200 and the encoder 700 using the processes discussed above. For example, the GLDPC code may be interpreted as a subcode of a simple systematic code, an example of which is described below.
[0094] For example, based on implementing the GLDPC coding technique, the systematic encoder 203, which may be a simple systematic encoder, may receive the input vector i as input, and may output a codeword c?C.sub.0. In embodiments, the codeword c may be a codeword of length N, and may include s rows of length n. In embodiments, the codeword c may be arranged in the arrangement J.sub.1 and the arrangement J.sub.2, where all rows in arrangement J.sub.2 are constituent Hamming codewords, and J.sub.2=?.Math.J.sub.1. However, in embodiments the systematic encoder 203 may not be able to ensure that all rows of the arrangement J.sub.1 are constituent Hamming codewords, and therefore the set C.sub.0 may include codewords which are not GLDPC codewords.
[0095]
[0096] As shown in
[0097] Therefore, as a result of the process 1200A, the systematic encoder 203 may output a codeword c which may have an arrangement J.sub.1 and an arrangement J.sub.2, such that all s.sub.2 rows of the arrangement J.sub.2 may be constituent Hamming codewords, only some of the rows of the arrangement J.sub.1 may be Hamming codewords, and J.sub.2=?.Math.J.sub.1. For example, in the arrangement J.sub.1 produced according to the process 1200A, only s.sub.i<s.sub.1 rows, which may be rows which contain bits of the input vector i, may be Hamming codewords, and the remaining s.sub.x=s.sub.1?s.sub.i rows may include rows which are not Hamming codewords.
[0098] According to the GLDPC coding technique, all rows of the arrangement J.sub.1 must be Hamming codewords, which the process 1200A may not be able to provide. Therefore, according to embodiments, this requirement may be added as a set of linear constraints, as discussed above. For example, according to a Hamming code, a Hamming parity matrix H.sub.(n-k.sub.
[0099] Therefore, according to embodiments, linear constraints in the form of P.Math.c=d may be applied to codeword c output by the process 1200A, with the constraints matrix P expressed according to Equation 14 below:
[0100] In Equation 14 above, .Math. may represent the Kronecker matrix product operator, I.sub.s.sub.
[0101] For example, based on the codeword c including s.sub.i Hamming codewords of length n, followed by s.sub.x=s.sub.1?s.sub.i rows which are not Hamming codewords, the constraints matrix P may be used to address only the rows which are not Hamming codewords. For example, each word r.sub.j, j?s.sub.i may be multiplied by H, and the result may be determined according to Equation 17 below:
[0102]
[0103] As shown in
[0104] At operation 1222, the process 1200B may include encoding the input vector i to obtain preliminary codeword c.sub.i, which may be arranged according to arrangement J.sub.1.sup.i and arrangement J.sub.2.sup.i as shown in
[0105] At operation 1223, the process 1200B may include obtaining the preliminary constraints vector d.sub.i, which may be determined as the block D.sub.1 in arrangement J.sub.1.sup.i. In embodiments, the preliminary constraints vector d.sub.i may be produced according to the process 1200A. In embodiments, the preliminary constraints vector d.sub.i may be determined according to Equation 18 below:
[0106] At operation 1224, the process 1200B may include performing Hamming encoding on block B.sub.1 in the arrangement J.sub.1.sup.i to obtain the target constraints vector d.sub.w. In embodiments, the target constraint vector d.sub.w may be determined according to Equation 19 below:
[0107] At operation 1225, the process 1200B may include computing the balance bits b based on the preliminary constraints vector d.sub.i and the target constraint vector d.sub.w. In embodiments, the balance bits b may be determined according to Equation 6 discussed above.
[0108] At operation 1226, the process 1200B may include updating the input vector to include the balance bits b, and setting the information bits equal to zero.
[0109] At operation 1227, the process 1200B may include placing the updated input vector i in block A1 such that i[?]=0, and i[?]=b, as shown in
[0110] At operation 1228, the process 1200B may include obtaining the output codeword c.sub.out, which may be the sum of the preliminary codeword c.sub.b and the preliminary codeword c.sub.b, as shown in Equation 20 below:
[0111]
[0112] As shown in
[0113] As further shown in
[0114] As further shown in
[0115] As further shown in
[0116] As further shown in
[0117] As further shown in
[0118] As further shown in
[0119] As further shown in
[0120]
[0121] In embodiments, one or more process blocks of the process 1400B may be performed before, after, or in combination with process blocks of the process 1400A. For example, one or more process blocks of the process 1400B may correspond to operation 1417 of the process 1400A.
[0122] As shown in
[0123] As further shown in
[0124] In embodiments, the systematic code may include a BCH code, and the output codeword may include a GCC codeword.
[0125] In embodiments, the target constraints vector may include one or more GCC parity symbols, and the constraints matrix may include a GCC transform matrix.
[0126]
[0127] In embodiments, one or more process blocks of the process 1400C may be performed before, after, or in combination with process blocks of the process 1400A. For example, one or more process blocks of the process 1400C may correspond to operation 1417 of the process 1400A. In embodiments, the first preliminary codeword may correspond to the preliminary codeword of the process 1400A, and the second preliminary codeword may correspond to the preliminary codeword c.sub.b.
[0128] As shown in
[0129] As further shown in
[0130] As further shown in
[0131] As further shown in
[0132] In embodiments, there may exist a bijective mapping between a first arrangement of the output codeword and a second arrangement of the output codeword, and each row of the first arrangement and each row of the second arrangement may include a Hamming codeword
[0133] Although
[0134]
[0135] The computer system 15000 may include a central processing unit 15100 (illustrated as CPU), a RAM 15200, a user interface 15300, and the memory system 15400, are electrically connected to buses 15500. The host as described above may include the central processing unit 15100, the RAM 15200, and the user interface 15300 in the computer system 15000. The central processing unit 15100 may control the entire computer system 15000 and may perform calculations corresponding to user commands input via the user interface 15300. The RAM 15200 may function as a data memory for the central processing unit 15100, and the central processing unit 15100 may write/read data to/from the memory system 15400.
[0136] As in example embodiments described above, the memory system 15400 may include a memory controller 15410 and a memory device 15420. The memory controller 15410 may include an encoder and a decoder, and the memory device 15420 may include a cell array including a plurality of memory cells.
[0137] According to embodiments, the memory controller 15410 may be implemented by the memory controller 100 discussed above with reference to
[0138]
[0139] The memory controller 16100 may include an encoder and a decoder. The encoder and the decoder may perform an encoding method and a decoding method according to embodiments. The memory controller 16100 may communicate with an external host via the port region 16300 in compliance with a pre-set protocol. The protocol may be eMMC protocol, SD protocol, SATA protocol, SAS protocol, USB protocol, UFS protocol, nonvolatile memory express (NVMe) protocol, peripheral component interconnect express (PCIe) protocol, or compute express link (CXL) protocol. The non-volatile memory 16200 may include memory cells which retain data stored therein even if power supplied thereto is blocked. For example, the non-volatile memory 16200 may include a flash memory, a magnetic random access memory (MRAM), a resistance RAM (RRAM), a ferroelectric RAM (FRAM), or a phase change memory (PCM).
[0140] According to embodiments, memory controller 16100 and non-volatile memory 16200 may be implemented, respectively, by the memory controller 100 and the memory device 110 discussed above with reference to
[0141]
[0142] As is traditional in the field, the embodiments are described, and illustrated in the drawings, in terms of functional blocks, units and/or modules. Those skilled in the art will appreciate that these blocks, units and/or modules are physically implemented by electronic (or optical) circuits such as logic circuits, discrete components, microprocessors, hard-wired circuits, memory elements, wiring connections, and the like, which may be formed using semiconductor-based fabrication techniques or other manufacturing technologies. In the case of the blocks, units and/or modules being implemented by microprocessors or similar, they may be programmed using software (e.g., microcode) to perform various functions discussed herein and may optionally be driven by firmware and/or software. Alternatively, each block, unit and/or module may be implemented by dedicated hardware, or as a combination of dedicated hardware to perform some functions and a processor (e.g., one or more programmed microprocessors and associated circuitry) to perform other functions. Also, each block, unit and/or module of the embodiments may be physically separated into two or more interacting and discrete blocks, units and/or modules without departing from the present scope. Further, the blocks, units and/or modules of the embodiments may be physically combined into more complex blocks, units and/or modules without departing from the present scope.
[0143] The various operations of methods described above may be performed by any suitable means capable of performing the operations, such as various hardware and/or software component(s), circuits, and/or module(s).
[0144] The software may include an ordered listing of executable instructions for implementing logical functions, and can be embodied in any processor-readable medium for use by or in connection with an instruction execution system, apparatus, or device, such as a single or multiple-core processor or processor-containing system.
[0145] The blocks or steps of a method or algorithm and functions described in connection with the embodiments disclosed herein may be embodied directly in hardware, in a software module executed by a processor, or in a combination of the two. If implemented in software, the functions may be stored on or transmitted over as one or more instructions or code on a tangible, non-transitory computer-readable medium. A software module may reside in Random Access Memory (RAM), flash memory, Read Only Memory (ROM), Electrically Programmable ROM (EPROM), Electrically Erasable Programmable ROM (EEPROM), registers, hard disk, a removable disk, a CD ROM, or any other form of storage medium known in the art.
[0146] The foregoing is illustrative of example embodiments and is not to be construed as limiting thereof. Although a few example embodiments have been described, those skilled in the art will readily appreciate that many modifications are possible in the embodiments without materially departing from the present scope.