1. Introduction
The NAND (NOT AND) logic type memory devices based on floating-gate transistor have recently become dominant technology for non-volatile storage devices like USB flash drives, memory cards, solid-state disk, etc. This technology has advantages regarding storage density, cost, power consumption and erase and write times but bytes cannot be addressed independently. The hierarchical structure of NAND flash is as follows: A series of NAND cells is connected in strings which are organized in pages, pages are organized in blocks and so on. This architecture requires reading and writing to be done only in pages. Moreover, before writing any data in a page of a block this block must be erased. Hence erasing is block-wise.
Data processing in NAND flash memories is realized by changing the voltage at inputs. The corresponding physical processes in the cells can generates errors in the work of the memory. Recently used technology for 3D NAND memory of vertically stacked cells additionally increases the probability of errors. Therefore, NAND flash memory requires error control coding. In many commercial flash memory devices classical error correcting codes are implemented, e.g., Hamming codes, BCH codes, Reed–Solomon codes. However, these codes are designed for channels where the errors with the same weight are equally probable, which is not true for flash memories.
Abstractly, flash memory can be considered as a device comprising blocks of “cells” that can take on a given number of different states (levels). The process of writing involves an increasing level of the cell or erasing the entire block before increasing the level of a cell in that block. Errors can be a wrong increase of the level or more rarely a decrease during the process of storage.
A mathematical model that describes well the processes in flash memory is the following. Let the cells have A states, that is, store bits. Then we can consider pages and blocks as vectors over the ring of integers modulo A. Then errors can be considered as changes of the values of vectors’ entries. The aforesaid shows that usually changes of the entries of the vectors are in an upward direction but with limited-magnitude values. Moreover, decreasing mainly with 1 is observed. Hence we can say that dominant errors are symmetric of type and for a small l. This fact gives rise to the need to invent and study asymmetric limited-magnitude error correcting codes over (known also as integer codes).
Asymmetric limited-magnitude error-correcting codes were proposed by Varshamov and Tenengolz [
1,
2] and in a more general form by Ahlswede et al. [
3]. Another general method for constructionof asymmetric limited-magnitude error-correcting codes is provided by Cassuto et al. [
4]. In 2011, T. Klove and B. Bose [
5] proposed systematic codes that correct single limited-magnitude systematic asymmetric errors and achieve a higher rate than the ones given in [
4]. They also showed how their code construction can be slightly modified to give codes correcting symmetric errors of limited magnitude. Later T. Klove et al. [
6] extended their results and gave a necessary and sufficient condition for the existence of a code over
correcting a single asymmetric error.
In this paper we propose a constructions of codes over correcting single asymmetric errors of type , or . The argument is chosen due to the fact that it is the closest to, while greater than, a power of two. The choice of A is essential since the use of the unsuitable size of the alphabet can generate problems in implementation of encoding and decoding procedures. Moreover, as we shall see later, the proposed codes are perfect.
The next parts of the paper are organized as follows. A summary of existing results and necessary notations and definitions which are used in this paper are given in
Section 2. In
Section 3 new constructions of integer codes for flash memory are proposed. Concluding remarks and some open problems are presented and discussed in
Section 4. In the Appendix, more detailed information about constructed codes is presented.
2. Preliminaries
Codes over finite alphabets of integers for correcting asymmetric errors are constructed in [
1,
2]. With the name “integer codes”, such codes are applied to magnetic recording and frame synchronization in [
7]. For that, time integer codes have been studied for various purposes and used in many applications. Coding for flash multilevel memory is an area they can be successfully applied to.
Let us recall basic definitions.
Definition 1. Let be the ring of integers modulo A. An integer code of length n with parity-check matrix is said to be a subset of , defined bywhere all zeros vector (We will write only if there is no possibility for ambiguity.) We shall say that is integer code. This notation is widely used for linear code with block length n and dimension but in this paper it only means that has m rows, n columns and entries from . We remind the reader that if A is not a prime then C is not a linear subspace. It is a submodule whose properties, although very close to ones of linear subspaces, are different. In partial, the size of C may differ from . However the differences do not impact correcting properties of considered codes. The aforesaid notation is used only for convenience with no reference to the dimension of the code.
In contrast to conventional codes, integer codes are intended to correct specific types of errors. By choosing a proper parity-check matrix one can construct a code correcting specific types of errors like as given below.
Definition 2. Let and be positive integers, The code is said to be a single error correctable if it can correct any error vector with only one nonzero entry with value or
In order for
to be single
error correctable the corresponding error vectors must have pairwise disjoint syndromes
. However, there are
possible single
error vectors
. Hence, we obtain a lower bound for the size
A of the alphabet
Definition 3. A single error correctable code of block length n over is called perfect if If the size A of the alphabet is the minimal possible for which a single error correctable code of block length n over exists, we say that is optimal.
For many parameters, perfect codes do not exist. In these cases the goal is to construct an optimal code.
3. New Construction of Integer Codes Correcting Single Error of Type or
To construct a single error correctable code it is sufficient to find a parity-check matrix with one row, i.e.,
and
Such codes have only one parity-check symbol, i.e., the best possible rate The syndrome corresponding to a single error e in position i is . Therefore such a code can correct a single error e if all are distinct.
Theorem 1. Let and be the cyclotomic coset of 2 modulo A with leader s. Let , . Then is even with for and both the integer codes with and are single asymmetric error correctable.
Proof. gives . Hence the order m of 2 modulo A is a divisor of . The assumption leads to , which is a contradiction. Thus , where . Therefore the number of elements of is even. The same holds for one of any cyclotomic coset with
Now we shall show that the cardinality of is exactly . If then which contradicts A dividing . Hence For also holds since iff .
The integer code with parity-check matrix has length n and only one parity-check equation, i.e., rate . The syndrome corresponding to a single error with value 1 is an element of . If the value is 2 the syndrome belongs to . Hence the syndromes are distinct. □
Corollary 1. Under the notations of Theorem 1, let be all different leaders of cyclotomic cosets of 2 modulo A. Thenis a parity-check matrix of a single asymmetric error correctable code over A. Example 1. Let , i.e., . In this caseare all nonzero cyclotomic cosets. Then The code with a parity-check matrixis a single asymmetric error correctable code and is perfect. Such codes are also ones with parity-check matrices If and it is easy to check that the code withis single error correctable. Such codes are also ones with The codes with matrices or are a single asymmetric error correctable.
Corollary 2. If the code with is a single asymmetric error correctable.
Proof. Assume . Then for ; thus, This means that A divides , which is impossible for , since Therefore, 3 is a leader of a cyclomic coset, namely . Now arguments similar to ones used in Example 1 complete the proof. □
Theorem 2. Under the notations of Theorem 1 let be the set of first elements of . If then is a parity-check matrix of a single error correctable code.
Proof. modulo
has the structure
consists of first l elements of for k odd and first elements when k is even. The condition guarantees that (the minimal possible size of H is ). Hence the multiplication by maps into the negative part of when k is odd and into the negative part of for even k. Multiplying by 2 maps it into the positive part of , while multiplying by maps it into the negative part of , or for k odd or even, respectively. Therefore syndromes are distinct. □
Corollary 3. Using notation and conditions of Theorem 2 the code withis a single error correctable code over A when and are distinct leaders. Remark 1. Since we can allow , i.e., .
In Example 1 A is a prime and and are all nontrivial cyclotomic cosets both of length However in general the structure is more complex. We continue with a simple example.
Example 2. Let . The cyclotomic cosets are Three of them are with length and one with length 2. Note that 3 is not coprime with 33 but . The reason is that ; thus, , while concerning the order of 2 modulo the prime 11 is 10; thus, and 10 is the minimal of such a positive integer.
We can construct a single asymmetric error correctable code of length 16 over 33 taking Sincethe code with parity-check matrixis error correctable. We can obtain also a single asymmetric error correctable code of length 10 by taking matrix We use instead of because . The reason is that .
Here are several properties of the numbers of the form that can be useful. Their proofs are straightforward and we omit them.
- P1.
If n has odd divisor d then divides In partial if n is odd
- P2.
Let
where
m is odd positive integer. Then
where
is Fermat number.
is a prime for
(no other such primes are known) but even
is too large for a divisor of practically interesting value of
A.
- P3.
If then has length . If there is a cyclotomic coset of length then divides A.
Example 3. Let . The cyclotomic classes of 2 modulo 65 are with cardinality 12 each and Therefore the code with a parity-check matrixis a single error correctable code with length 32. The code with a parity-check matrixis a single error correctable code. The code withis a single error correctable code with block length 13 since and Construction of single error correctable codes.
Construction of such codes strongly depends on the value of and we cannot formulate statement more general than the one in Corollary 2 but can formulate some principles to be followed when one searches such codes. The matrix is the start point for construction. Next we have to enlarge the code by adding some or , taking into account the following simple observations
If then has to be excluded.
For n odd 3 divides A and the situation can happen. In this case if is included in then (which is or ) can be included. For n even and the considered situation is impossible.
Table 1 presents parameters of the single error correctable codes constructed by our method over
for
(the cases
are trivial). The parity-check matrices are given in Examples 1–3 and in
Appendix A.
4. Discussion
In this paper we consider only codes over with one parity-check equation that is sufficient for correction of a single error. There are constructions using matrices with more rows but they require more parity-check symbols; thus, they have a lower rate. Herein we construct codes only with a maximal rate.
Encoding is a computation of only one linear expression. Decoding can be done by using a syndrome error table. Both operations are very fast and simple for modern digital devices.
All codes correcting single error are perfect. The same holds for codes correcting error but only when n is even.
Parity-check matrices for are too large to be presented in the paper although the fast development of technologies makes such parameters interesting for practice. However, the described construction algorithm is simple to realize and interested readers can easily construct and implement such codes.
Our further investigations aim to develop construction of codes over
correcting two or more errors of the considered type. Examples of double error correctable codes can be found, for example, in [
8,
9], but they are not applicable to flash memories.