Endurance enhancement coding of compressible data in flash memories
AssigneeSanDisk Technologies LLC
InventorsEran Sharon, Idan Alrod
Life of this patent
Estimating the term…
Abstract
Methods described in the present disclosure may be based on a direct transformation of original data to “shaped” data. In a particular example, a method comprises generating a first portion of output data by applying a mapping of input bit sequences to output bit sequences to a first portion of input data, updating the mapping of the input bit sequences to the output bit sequences based on the first portion of the input data to generate an updated mapping, reading a second portion of the input data, and generating a second portion of the output data by applying the updated mapping of the input bit sequences to the output bit sequences to the second portion of the input data.
Claims54
A method of storing data, the method comprising:
- in a data storage device including a memory, performing:
- selecting, in accordance with an input string of multiple m-tuples of bits, a substitution transformation to apply to the input string, wherein m is an integer greater than 1;
- applying the selected substitution transformation to the input string to generate a transformed string of multiple output m-tuples of bits;
- and
- programming K storage elements of the memory to store the transformed string in the K storage elements, each of the K storage elements storing L bits, wherein L is not equal to m.
A method of storing data corresponding to an input string of multiple m-tuples of bits, wherein m>1, into K storage elements, each storage element storing L bits, the method comprising:
- selecting a first mapping that maps each m-tuple of bits to a corresponding output m-tuple of bits;
- mapping a first at least one m-tuple of bits from the input string to a corresponding first at least one output m-tuple of bits according to the first mapping;
- storing the first at least one output m-tuple of bits into a storage device;
- generating a second mapping that maps each m-tuple of bits to a corresponding output m-tuple of bits, wherein the second mapping is generated at least partially based on the first at least one m-tuple of bits;
- mapping a second at least one m-tuple of bits from the input string to a corresponding second at least one output m-tuple of bits according to the second mapping;
- and
- storing the second at least one output m-tuple of bits into the storage device.
A method of storing data corresponding to an input string of multiple m-tuples of bits, wherein m>1, into K storage elements, each storage element storing L bits, the method comprising:
- selecting a first mapping that maps each m-tuple of bits to a corresponding output m-tuple of bits;
- mapping a first m-tuple of bits from the input string to a corresponding first output m-tuple of bits according to the first mapping;
- storing the first output m-tuple of bits into a storage device;
- generating a second mapping that maps each m-tuple of bits to a corresponding output m-tuple of bits, wherein the second mapping is generated at least partially based on the first m-tuple of bits;
- mapping a second m-tuple of bits from the input string to a corresponding second output m-tuple of bits according to the second mapping;
- and
- storing the second output m-tuple of bits into the storage device, wherein the first m-tuple of the input string equals the second m-tuple of the input string and wherein the first output m-tuple is different from the second output m-tuple.
A method of storing an input string of multiple m-tuples of bits, wherein m>1, in K storage elements with each storage element storing L bits, the method comprising:
- selecting a substitution transformation to apply to the input string to generate a transformed string, wherein the substitution transformation is computed by applying a predefined rule to the input string, wherein the substitution transformation is decodable based on the predefined rule and the transformed string without any external reference, and wherein the transformed string has a distribution of output m-tuples of bits that satisfies a predetermined logical condition;
- applying the selected substitution transformation to the input string to generate the transformed string of output m-tuples of bits;
- and
- programming the K storage elements to store the transformed string, wherein L is not equal to m.
A method comprising:
- reading sequential portions of input data and generating output data via a process that includes, for each particular portion of the input data that is read:
- generating a corresponding portion of the output data by applying a particular mapping to the particular portion of the input data;
- and
- generating a next mapping to apply to a next portion of the input data, the next mapping based on a history of bits read from the input data, the history of bits including bits of the particular portion.
A data storage device comprising:
- a memory;
- and
- a controller, the controller configured to:
- select, in accordance with an input string of bits, a substitution transformation to apply to the input string,
- apply the substitution transformation to multiple sub-strings of bits of the input string to generate a transformed string of multiple output sub-strings of bits, wherein each output sub-string of bits has a first number of bits and each sub-string of bits of the input string has the first number of bits;
- and
- program multiple storage elements of the memory to store the transformed string in the multiple storage elements, each of the multiple storage elements storing a second number of bits, wherein the second number is not equal to the first number.
A data storage device comprising:
- a memory;
- and
- a controller, the controller configured to:
- generate a first portion of output data by applying a mapping of input bit sequences to output bit sequences to a first portion of input data;
- update the mapping of the input bit sequences to the output bit sequences based on the first portion of the input data to generate an updated mapping;
- read a second portion of the input data;
- generate a second portion of the output data by applying the updated mapping of the input bit sequences to the output bit sequences to the second portion of the input data;
- and
- store the output data to the memory.
A method comprising:
- encoding an input sequence of n bits into an output sequence of n bits, wherein the n bits of the input sequence are transformed to the n bits of the output sequence via a transformation that changes a distribution of one values and zero values of the n bits of the input sequence without transferring any side information corresponding to the transformation, and wherein the input sequence is encoded such that the output sequence is decodable to generate the input sequence without using any side information corresponding to the transformation;
- and
- storing the output sequence of n bits in multiple storage elements of a memory, each of the multiple storage elements storing a number of bits, wherein the number of bits is not equal to n.
Dependencies are inferred from the claim text.