Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

34
Correcting Errors in MLCs with Bit-fixing Coding Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck

description

Number of Pulses Voltage Reprogram Correct with ECC

Transcript of Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

Page 1: Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

Correcting Errors in MLCs with Bit-fixing Coding

Yue Lijoint work with

Anxiao (Andrew) Jiang and Jehoshua Bruck

Page 2: Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

Flash memories have excellent performance.

Cells are programmed by injecting electrons.◦ Programming is fast.◦ Erasure is expensive.

The growth of storage density brings reliability issues.◦ Cells are more closely aligned ◦ More levels are programmed into each cell.

We propose a new coding scheme for correcting asymmetric errors in multi-level cells (MLCs).

Introduction

Page 3: Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

Number of Pulses

Voltage

76543210

Reprogram

Correct with ECC

Motivation: Cell Overprogramming

Page 4: Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

012

012345

0 0123

012345

01234567891011

12345678

8 2 5 0 3 5 110

Page 5: Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

Asymmetric errors appear…

012345

012345

01

0123

012345678

01234567891011

12345678910

8 2 5 0 3 5 110

10 5 1 8

How to correct asymmetric errors ?

How to minimize redundancy in ECC?

Page 6: Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

0123456789101112131415

000100100011010001010110011110001001101010111100110111101111

0000

Binary Codes

000100110010011001110101010011001101111111101010101110011000

0000

Gray Codes Our Codes

The number of bit errors equals the Hamming weight of the binary representation of a cell error.

Cell error # of bit errors1 12 13 24 1

The number of bit errors depends only on the size of the cell error.

The number of bit errors depends on the size of the error and the cell level

5 26 27 38 1

Page 7: Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

This work generalizes the code constructions in:

Codes Correcting Asymmetric Errors

[1] R. Ahlswede, H. Aydinian and L. Khachatrian, "Unidirectional error control codes and related combinational problems," in Proc. Eighth Int. Workshop Algebr. Combin. Coding Theory, pp. 6-9, 2002. [2] Y. Cassuto, M. Schwartz, V. Bohossian and J. Bruck, "Codes for asymmetric limited-magnitude errors with application to multilevel flash memories," in IEEE Trans. Information Theory, vol. 56, no. 4, pp. 1582-95, 2010.[3] E. Yaakobi, P. H. Siegel, A. Vardy, and J. K. Wolf, “On Codes that Correct Asymmetric Errors with Graded Magnitude Distribution,” in Proc. IEEE International Symposium on Information Theory, pp. 1021-1025, 2011.

Page 8: Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

Example of Bit-fixing Coding

012

012345

0 0123

012345

01234567891011

1234567

7 2 5 0 3 5 110

0111

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0010

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0101

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0000

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0101

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

1011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

Page 9: Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

0000

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

Bit-wise ECC

7 2 5 0 3 5 11

ECC€

0111

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0010

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0101

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0101

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

1011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟ECCECCECC

Page 10: Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

0101

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0010

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0111

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0101

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0000

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

1011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

Assume asymmetric errors appear…

01234

012345

0 01234

012345678

01234567891011

12345678

7+1 2+2 5 0 3+1 5+3 110

Page 11: Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

Binary Codes: there are 12 bit errors.

Bit-fixing code: there are only 5 bit errors! It alternatively corrects bits and cell levels.

0100

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0111

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0000

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0010

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0111

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

1110

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

Gray Codes: there are 7 bit errors.

7+1 2+2 5 0 3+1 5+3 11

0111

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0010

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0101

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0000

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0101

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

1011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

Page 12: Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

Decoding round 1: Correct bits

7+1 2+2 5 0 3+1 5+3 11

corrected 3 bit errors€

0111

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0010

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0101

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0000

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0101

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

1011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

A B C D

Page 13: Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

0111

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0101

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

Decoding round 1: Correct cell levels

7 2+2 5 0 3 5+2 11

0010

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0101

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0000

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

1011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

(7+1) – 2^0 = 7

(3+1) – 2^0 = 3

(5+3) – 2^0 = 7

A B C D

Updating rule: new level = current level – e * 2^i

Value of error Bit index An error in the LSB = a magnitude-1 error on level

1st bit = a magnitude-2 error 2nd bit = a magnitude-4 error

MSB = a magnitude-8 error corrected 3 bit errors

Page 14: Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

0111

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0101

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

Decoding round 1: Correct cell levels

7 2+2 5 0 3 5+2 11

corrected 3 bit errors

0010

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0101

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0000

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

1011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

(7+1) – 2^0 = 7

(3+1) – 2^0 = 3

(5+3) – 2^0 = 7

A B C D

Updating rule: new level = current level – e * 2^i

Value of error Bit index

Page 15: Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

7

Initial Data

Receive Errors

Correct Bits

Correct Cells

7 7+1 7+1(7+1) – 2^0

= 7

Corrected Data

Page 16: Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

Decoding round 2: Correct bits

7 2+2 5 0 3 5+2 11

corrected 3 + 2 bit errors€

0111

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0101

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0010

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0101

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0000

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

1011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

A B C D

Page 17: Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

0010

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

Decoding round 2: Correct cell levels

7 2 5 0 3 5 11

corrected 3 + 2 bit errors

0111

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0101

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0101

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0000

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

1011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

Updating rule: new level = current level – e * 2^i

(2+2) – 2^1 = 2

(5+2) – 2^1 = 5

A B C D

Page 18: Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

Let the total number of cell levels be . Assume the magnitudes of n errors are , where for

◦ The total number of errors need to be corrected is

◦ Let , the total number of iterations is

Correcting asymmetric errors

e1, e2, ..., en

0 < ei ≤ q

i =1, 2, ..., n

q

h(b(ei))i=1

n

e = max i∈{1,..,n}

ei

log2 e⎡ ⎤

Computes Hamming weight

Computes binary representation

Page 19: Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

0123456789101112131415

A downward error with magnitude e (less than 0)

An upward error with magnitude (e mod q)

Page 20: Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

Let the total number of cell levels be . Assume the magnitudes of errors are , where

for .◦ The total number of errors need to be corrected is

◦ Let , the total # of iterations is

Correcting bidirectional errors

e1, e2, ..., en

−q+1≤ ei ≤ q −1

i =1, 2, ..., n€

q

h(b(ei mod q))i=1

n

e = max i∈{1,..,n}

(ei mod q)

log2 e⎡ ⎤Updating rule: new level = (current level – e * 2^i)

mod q

Page 21: Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

Suppose errors are bidirectional

012

0 0123

012345678

012345678910

12345678

012345

7+1 2 5-2 0 3 5+3 11-10

Page 22: Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

Decoding round 1: Correct bits

corrected 3 bit errors

7+1 2 5-2 0 3 5+3 11-1

0111

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0010

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0101

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0000

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0101

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

1011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

A B C D

Page 23: Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

Decoding round 1: Correct cell levels

7 2 5-2 0 3 5+2 11-2

0111

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0010

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0101

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0000

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0101

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

1011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

corrected 3 bit errors

(7+1) – 2^0 = 7

(5+3) – 2^0 = 7

(11-1) – 2^0 = 9

Updating rule: new level = (current level – e * 2^i) mod q

A B C D

Total number of cell levels

Page 24: Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

Decoding round 2: Correct bits

corrected 3 + 3 bit errors

7 2 5-2 0 3 5+2 11-2

0111

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0010

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0101

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0000

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0101

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

1011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

A B C D

Page 25: Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

Decoding round 2: Correct cell levels

7 2 0 3 5

0111

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0010

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0101

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0000

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0101

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

1011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

corrected 3 + 3 bit errors

5-2-2 11-2-2

(5-2) – 2^1 = 1

(11-2) – 2^1 = 7

A B C D

(5+2) – 2^0 = 5

Updating rule: new level = (current level – e * 2^i) mod q

Page 26: Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

Decoding round 3: Correct bits

corrected 3 + 3 +2 bit errors

7 2 0 3 5

0111

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0010

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0101

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0000

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0101

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

1011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

5-2-2 11-2-2

A B C D

Page 27: Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

corrected 3 + 3 +2 bit errors

7 2 0 3 5

0111

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0010

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0101

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0000

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0101

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

1011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

Decoding round 3: Correct cell levels

5-2-2-4 11-2-2-4

((5-2-2) – 2^2) mod 16 = 13 (11-2-2) – 2^2 = 3

B C DA

Updating rule: new level = (current level – e * 2^i) mod q

Page 28: Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

Decoding round 4: Correct bits

7 2 5-2-2-4 0 3 5 11-2-2-4

0111

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0010

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0101

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0000

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0101

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

1011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

corrected 3 + 3 + 2 + 2 bit errors

B C DA

Page 29: Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

corrected 3 + 3 + 2 + 2 bit errors

7 2 5-2-2-4-8 0 3 5 11-2-2-4-8

0111

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0010

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0101

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0000

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

0101

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

1011

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

Decoding round 4: Correct cell levels((5-2-2-4) – 2^3) mod 16 = 5

((11-2-2-4) – 2^3) mod 16 = 11

B C DA

Updating rule: new level = (current level – e * 2^i) mod q

Page 30: Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

...…………

km

km−1

k2

k1€

...

l1

l2

l3

ln−2

ln−1

ln−1

...

Encoding

Redundancy

AllocationSeparateEncoding

Compute Cell Levels

ProgramCells

ECCECCECCECCECC

Page 31: Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

Compare the rates with those of◦ Binary codes

◦ Gray codes

◦ ALM-ECC with hard decoding An error of any magnitude is seen as a Hamming error in the

inner code.

◦ ALM-ECC with soft decoding The error distribution is used for optimal decoding. (But the

inner ECC is not binary if the maximum magnitude of errors is more than 1).

Evaluation

Y. Cassuto, M. Schwartz, V. Bohossian and J. Bruck, "Codes for asymmetric limited-magnitude errors with application to multilevel flash memories," in IEEE Trans. Information Theory, vol. 56, no. 4, pp. 1582-95, 2010.

Page 32: Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

Cell levels: 16

Maximum magnitude of asymmetric errors: 3

Error distribution mimics a Gaussian distribution.◦ For , the

probability of an error of size equals .

Error Model

i = 0, 1, 2, 3

i

Pi

Page 33: Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.
Page 34: Yue Li joint work with Anxiao (Andrew) Jiang and Jehoshua Bruck.

Effective◦ Good for correcting asymmetric errors.◦ Efficient decoding and encoding methods.

Flexible◦ Works with existing ECCs.◦ Naturally handles bidirectional errors.

General◦ Supports arbitrary error distribution.◦ Supports arbitrary numeral systems.

Conclusions

A. Jiang, Y. Li and J. Bruck, ”Bit-fixing codes for multi-level cells," in Proc. IEEE Information Theory Workshop (ITW), 2012.