MEMORY DEVICES AND METHODS HAVING WRITE DATA PERMUTATION FOR CELL WEAR REDUCTION
A memory system can include a plurality of memory elements each comprising a memory layer having at least one layer programmable between at least two different impedance states; a data input configured to receive multi-bit write data values; and a permutation circuit coupled between the memory elements and the data input, and configured to repeatedly permute the multi-bit write data values prior to writing such data values into the memory elements.
Latest Adesto Technologies Corporation Patents:
- Memory devices and methods having multiple acknowledgements in response to a same instruction
- Pulse width signal overlap compensation techniques
- Integrated module assembly for optical integrated circuits
- Nonvolatile memory devices, systems and methods with switching charge pump architectures
- Standby current reduction in memory devices
The present disclosure relates generally to memory devices, and more particularly to memory devices having storage elements that can be subject to wear.
BACKGROUNDConventional memory devices based on a programmable impedance layer, such as conductive bridging random access memory (CBRAMs), can be subject to “wear”. As a programmable impedance element is used (e.g., read, programmed and/or erased) a certain number of times, its performance can begin to deteriorate (e.g., its data retention can fall, its range of impedance can grow too large, or it may take too long to program to a particular state). Due to the physical alignment of data units (e.g., bytes, words, double words, etc.) memory elements can be subject to uneven use on a bit position basis.
Regions 1607-0/1 show high wear bit positions that can arise during the operation of the memory device. Such high wear bit positions can limit the lifetime of a device and/or necessitate “healing” or other types of operation intended to undue the adverse affect of wear.
Embodiments disclosed herein show memory devices and methods that can permute bit values of write data for a more even distribution wear over bit locations. Such permutation can extend the lifetime of a memory device and/or extend the amount of time between heal (or other) types of operations intended to reverse wear affects.
In the embodiments below, like sections are referred to by the same reference character but with the leading digit(s) corresponding to the figure number.
A memory cell 104 can include various types of memories, including phase change memory (PCM) and electrically erasable and programmable read only memories (EEPROMs), including “flash” NAND and NOR types. In particular embodiments, memory cells can be a solid electrolyte based, having one or more memory elements with at least one solid electrolyte layer programmable between at least two different impedance states. A memory cell 104 can include but one memory element, a memory element in combination with one or more active devices (e.g., transistors), and/or multiple memory elements. An impedance state can be a static state (i.e., the element impedance remains constant over a period of time) or dynamic state (i.e., the element impedance changes over time and/or changes in a sensing operation).
A permutation circuit 106 can receive write data values (DIN), and permute such values as they are written into memory cell array 102. A type of permutation performed on write data can vary according to a permutation select value PERM. Thus, a permutation circuit 106 can transform an input data value (D0) having an initial bit order, into a written data value DWrite that is a permutation of the initial bit order. It is understood that “permutation” as described herein does not necessarily imply written data values (data values applied to memory elements) are the same size as input data values. While in some embodiments a bit size of data values applied to a memory cell array 102 can be the same as received write data, in other embodiments data values applied to a memory cell array can be larger than received input data values (e.g., input data values of m-bits can be encoded into written data values of n-bits, where n>m, or data values of m-bits can be written into differing ones of n-bits). Further, permutation does not necessarily require only a change in bit order position, as some embodiments can permute bits via an encoding/decoding scheme.
A monitor circuit 108 can change a permutation select value PERM. according to predetermined conditions. In some embodiments, such conditions can be wear conditions. Wear conditions can vary according to a particular type of memory element, and in particular embodiments, can correspond to write operations and/or the passage of time. However, in other embodiments conditions can simply be the passage of time or a number of operations. As but one example, permutations can be periodically switched based on a timing clock. As but another example, permutations can be switched based on a number of accesses (e.g., reads, writes, etc.). This can include combinations of accesses with one type of access being weighted more than another (e.g., a write accesses can trigger a permutation faster than read accesses). In still other embodiments, a particular type of access can trigger a permutation change (e.g., a certain number of writes triggers a permutation change).
A permutation circuit 108 can also include a read data path that reverses permutations to present an output data value having the desired bit order. Thus, permutation circuit 108 can receive data values (Dread) read from memory cell array 102, which can be a data value D1 permuted according to a current permutation choice, and undo such a permutation to present an output data value DOUT.
In some embodiments permutation circuits and/or monitor circuits can be formed in a same integrated circuit device as a corresponding memory array. That is, permutation is performed “on-board” a memory device. However, in other embodiments, permutation and wear monitoring functions can be performed by device(s) separate from that containing the memory cells. As but a few examples, permutation can be performed by a memory controller and/or processor executing application software.
It is understood that
According to some embodiments different permutations can include a shifting of bits by increasing amounts in a particular direction.
By shifting bits in this manner, wear can be more evenly distributed to avoid high wear bit locations, as shown in
Permutation of bits can occur along any suitable boundary. While embodiments herein describe permutation along byte, double-byte, word, and double word division, other embodiments can execute permutations along larger or smaller bit divisions. For example, in some embodiments can permutation can occur along 256 bit boundaries.
According to some embodiments, a memory device can include memory cells organized into groups, with different permutations being applied to different groups at the same time.
A permutation circuit 406 can apply different permutation types to different blocks (402-0 to -3) according to values provided from monitor circuit 408. Monitor circuit (402-0 to -3) can alter a permutation applied to a block based on various criteria as described herein, or equivalents (e.g., based on accesses, wear, time, etc.). In the very particular embodiment shown, permutations can change based on an address indication (Add. Div.) 414.
In one particular embodiment, a device 400 can continue to advance an address indication 414 until all blocks are accessed according to a new permutation type, returning to the position shown in
While the embodiment of
While embodiments above have shown application of different permutation types by dividing an address space and/or applying different permutations to different blocks, in particular embodiments, permutation can be used in combination with a “start-gap” type rotation. On such embodiment is shown in
An address translator 640 can receive logical addresses, and translate them into physical addresses for accessing physical blocks (602-0 to -8). However, during standard read and write operations, an address translator 640 can enable access to eight physical blocks, while preventing access to any spare block(s).
A memory device 600 can assign a physical block as a spare block according to a predetermined order. Once all blocks have served as a spare block, the memory device 600 can return to the first block and repeat the sequence. Within monitor circuit 608, a count register 636 can track how many times every block (602-0 to -8) has served as a spare block. A gap register 638 can indicate which block is currently a spare block. A permutation type can change according to a gap position.
Permutation circuit 606 can include a permutation select section 616 and an access section 606. A permutation select circuit 616 can determine a permutation type applied to data values based on control signals received from monitor circuit 608. An access section 606 can permute write data applied to blocks (602-0 to -8), and “undo” such permutations as data are read from the blocks.
In the embodiment shown, it is assumed that memory device 600 automatically swaps an active and spare block after certain conditions have been met. Such conditions can include, but are not limited to: the execution of a certain number of operations, such as write operations, the passage of a predetermined amount of time, or combinations thereof.
It is understood that
While embodiments can include permutations that shift bit positions in particular directions, other embodiments can “scramble” bit positions in a predetermined manner. In particular embodiments, bit positions can be changed in a pseudorandom fashion based on keys. A memory device according to one such embodiment is shown in
A memory cell array 702 can include memory cells based on a programmable impedance layer, as described herein, or equivalents. In response to address data (ADD), an address decoder 724 can provide select signals for a row and column select circuits 726/728. Row and column select circuits 726/728 can access a data group for read or write (e.g., program, erase) operations. A data group can be a suitable collection of bits (e.g., nibbles, bytes, words, double-words, pages, etc.).
A monitor circuit 708 can include a wear monitor section 720 and a key select section 722. A wear monitor section 720 can make a determination that a permutation is to occur. In some embodiments, a wear monitor section 720 can include address data, and enable more than one permutation type to occur in memory array 702 at the same time (e.g., along address divisions, per block etc.). A key select section 722 can provide different scrambling keys to permutation circuit 706 to enable changes in the scrambling of bits (i.e., different bit position permutations). Keys (K) provided by key select section 722 can be stored by memory device 700, generated by memory device 700, or received as input data to memory device 700. In the particular embodiment shown, a key select section 722 can receive address data from address decoder 724 to enable a key to be selected according to an address. Thus, keys can vary by address range, blocks, etc.
A permutation circuit 706 can include a scrambling section 730 and a de-scrambling section 732. A scrambling section 730 can receive input write data (D), and can scramble such data according to a key (K) received from key select section 722. Conversely, de-scrambling section 732 can receive scrambled data from memory cell array 702 and can de-scramble such data to derive read output data (Q). In particular embodiments, sections 730 can provide pseudorandom bit permutations. However, any suitable encryption technique can be employed that provides a desired level of variation in bit values.
As noted above, scrambling of bit values to provide more even wear of bit locations can be implemented according to any suitable method. In one particular embodiment, scrambling/de-scrambling sections 730/732 can utilize a Feistel type network. One such example is shown in
Embodiments above have shown permutation approaches in which bit widths of data values from a memory cell array can have the same bit width as received data values. However, in other embodiments, a permutation circuit can write data values into a memory cell array having a greater bit width than a received data values. That is, a permutation circuit can encode write data values of m-bits into data values of n-bits, where n>m. One such embodiment is shown in
Memory device 900 differs from that of
While
Embodiments can also vary bit distribution by changing position of different data types. In some embodiments, a memory device can include error detection and/or correction codes (hereinafter error codes) corresponding to stored data values. A position of error codes with respect to corresponding data values can be permuted to change bit distributions. One such embodiment is shown in
In the embodiment shown, a monitor circuit 1008 can include a wear monitor section 1020 and a multiplexer (MUX) controller 1048. A wear monitor section 1020 can make a determination that a permutation is to occur. Such a determination can be according to embodiments described herein, or equivalents. A MUX controller 1048 can control how a permutation circuit 1006 shifts bits of error codes with respect to corresponding data values.
A permutation circuit 1006 can shift bit locations of write data and corresponding error codes to permute bit locations of data written into a memory cell array 1002. Conversely, permutation circuit 1006 can unshift such data values to separate error codes from data values, to provide such data for a readout operation. As shown in
An error circuit 1054 can include an error check and/or correct section 1050 and an error code generation section 1052. An error check/correct section 1050 can receive write data values (Din) and can generate error codes (ECC). Data values (Din) and corresponding error codes (ECC) can then be forwarded to memory cell array 1002. In some embodiments, error codes can be error detect codes, which can be used to detect, but not correct errors in a corresponding data value. In other embodiments, error codes can be error detect and correct codes, which can be used to detect and correct errors in the corresponding data value.
An error check/correct section 1050 can receive data values (Dout) and corresponding error codes (ECC) from memory cell array 1002, and can perform an error detect operation on the data value. In some embodiments, error correction can also be performed. In the particular embodiment shown, an error check/correct section 1050 can also provide an error indication (Error Ind.) in the event an error is detected.
It is noted that in some embodiments, a memory device 1000 may not include an error circuit 1054, and data and error codes can be provided to the memory device by another device of a larger system.
A first permutation (Perm1) can shift ECC data to the left and a portion of the corresponding data value to the right.
A last permutation (Permk) can shift ECC data to least significant bit (lsb) locations, with a corresponding data value occupying more significant positions.
As noted above, in some embodiments, memory devices can apply permutation values that change over time, or vary between memory cell groups (e.g., along address lines or on a block-by-block basis). In some embodiments, should a memory device lose power, or experience a reset event, a permutation process can return to an initial state. However, in other embodiments, permutation states can be maintained and updated in a nonvolatile memory. Thus, in a power-on, reset or similar event, the permutation process can resume from the saved state.
While a nonvolatile store 1256 is shown separate from memory cell array 1202, in some embodiments, a nonvolatile store 1256 can be part of the memory cell array 1202.
Embodiments above have shown devices and methods according to various embodiments. Additional method embodiments will now be described with reference to a number of flow diagrams.
While some embodiments can advance a permutation type based on any accesses to a memory cell array, in other embodiments permutation changes may occur only in response to particular types of operations. That is, some operations (e.g., read) will not trigger a permutation change. One such embodiment is shown in
A method 1460 can include determining an operation type 1464. If an operation is a read or erase operation (READ/ERASE from 1464), such an operation can be executed 1466. If an operation is a program operation (PROG from 1464), a method can make a wear determination on memory elements. If such elements are determined not to be worn (N from 1465), the program operation can be executed 1466. However, if the elements are determined to be worn, a permutation change can occur 1463. The program operation can then be executed, but with the new permutation on bit values 1466.
If previous permutation data does exists (Y from 1568), such data can be retrieved 1571. Based on retrieved permutation data, permutation types can be assigned to blocks of the memory cell array 1570.
Upon reaching a predetermined wear limit (Y from 1565), a method can revise permutation data 1563 and store the revised permutation data 1574. In some embodiments, such an action can include storing the data in a nonvolatile fashion. In other embodiments, such data can be stored at locations in larger system containing the memory device. A method 1560 can then assign such revised permutation values to blocks of the memory array 1570.
It should be appreciated that in the foregoing description of exemplary embodiments, various features are sometimes grouped together in a single embodiment, figure, or description thereof for the purpose of streamlining the disclosure aiding in the understanding of one or more of the various inventive aspects. This method of disclosure, however, is not to be interpreted as reflecting an intention that the claimed invention requires more features than are expressly recited in each claim. Rather, as the following claims reflect, inventive aspects lie in less than all features of a single foregoing disclosed embodiment. Thus, the claims following the detailed description are hereby expressly incorporated into this detailed description, with each claim standing on its own as a separate embodiment of this invention.
It is also understood that the embodiments of the invention may be practiced in the absence of an element and/or step not specifically disclosed. That is, an inventive feature of the invention can be elimination of an element.
Accordingly, while the various aspects of the particular embodiments set forth herein have been described in detail, the present invention could be subject to various changes, substitutions, and alterations without departing from the spirit and scope of the invention.
Claims
1. A memory system, comprising:
- a plurality of memory elements each comprising a memory element having at least one layer programmable between at least two different impedance states;
- a data input configured to receive multi-bit write data values; and
- a permutation circuit coupled between the memory elements and the data input, and configured to repeatedly permute the multi-bit write data values prior to writing such data values into the memory elements.
2. The memory system of claim 1, wherein:
- the permutation circuit comprises bit-shift circuits configured to shifts bit positions in a predetermined direction for different permutation types.
3. The memory system of claim 1, further including:
- a wear monitor circuit configured to generate wear indications in response to predetermined wear conditions; and
- the permutation circuit is configured to alter a permutation type in response to at least one wear indication.
4. The memory system of claim 3, wherein:
- the memory elements are organized into a number of blocks; and
- the permutation circuit is configured to apply different permutations to different blocks in response to at least one wear indication.
5. The memory system of claim 4, wherein:
- the permutation circuit is configured to advance to a next permutation once all blocks have been subject to a previous permutation.
6. The memory system of claim 1, further including:
- a wear monitor circuit configured to generate wear indications in response to predetermined wear conditions; and
- the permutation circuit is configured to assign one permutation type to addresses in a first range, and another permutation type to addresses in a second range; wherein
- the first and second address ranged change in response to the wear indications.
7. The memory system of claim 6, further including:
- the memory elements are physically organized into a number of blocks; and
- an address translation circuit configured to selectively isolate at least one block from accesses according to a particular order, so that each block functions as a spare block in a wear rotation; wherein
- the first address range comprises blocks having a physical address less than the at least one spare block, and the second address range comprises blocks having a physical address greater than the at least one spare block.
8. The memory system of claim 1, wherein:
- the permutation circuit comprises bit scramble circuits configured to scramble bit positions in according to key values.
9. The memory system of claim 1, further including:
- an error circuit configured to generate an error code comprising at least one bit in response to received multi-bit write data values; and
- the permutation circuit is configured to permute bit positions of the error code and the corresponding write data value.
10. A method, comprising:
- permuting bits of write data written into memory cells having at least one programmable impedance layer; and
- repeatedly changing a permutation type in response to a wear limit for at least a portion of the memory cells.
11. The method of claim 10, wherein:
- permuting bits is selected from the group of: shifting bit positions in a predetermined direction, scrambling bit positions in response to key values, encoding m-bit values into larger n-bit values, and writing m-bit values into larger n-bit locations, with some of the n-bits being unused spare locations.
12. The method of claim 10, wherein:
- permuting bits includes applying different permutation types to different memory cell address ranges.
13. The method of claim 10, wherein:
- permuting bits includes mixing data bit positions with bit positions of a corresponding error code; wherein
- the error code is selected from the group of: an error detection code used to detect an error in a data value and an error correction value used to correct an error in a data value.
14. The method of claim 10, wherein:
- the memory cells are organized into blocks; and
- permuting bits includes permuting bits on a block-by-block basis.
15. The method of claim 14, further including:
- sequentially designating at least one block as a spare block that is not accessed for read and write operations; and
- permuting bits includes applying one permutation type to blocks having physical addresses below that of a current spare block, and applying another permutation type to blocks having physical addresses above that a current spare block.
16. The method of claim 10, wherein:
- changing the permutation type includes changing the permutation type applied to at least one group of memory cells in response to a wear indication corresponding to the group of memory cells.
17. A memory system, comprising:
- a plurality of memory elements each comprising a memory layer having at least one memory layer programmable between at least two different impedance states;
- a permutation circuit configured to permute bits of write data written into the memory elements in response to permutation select data; and
- a nonvolatile store to store the permutation select data.
18. The memory system of claim 17, further including:
- a monitor circuit configured to generate different permutation select values in response to wear of the memory device, and write a current permutation value into the nonvolatile store.
19. The memory system of claim 17, wherein:
- the permutation circuit comprises a plurality bit mapping circuits, each bit mapping circuit receiving write data values of m-bits, and outputting permuted write data values of m-bits having bit positions that vary from the write data in response to the permutation select data.
20. The memory system of claim 17, wherein:
- the permutation circuit comprises a plurality bit mapping circuits, each bit mapping circuit receiving write data values of m-bits, and outputting permuted write data values of n-bits having bit positions that vary from the write data in response to the permutation select data, where n>m.
Type: Application
Filed: Sep 25, 2012
Publication Date: Mar 27, 2014
Applicant: Adesto Technologies Corporation (Sunnyvale, CA)
Inventors: Ravi Sunkavalli (Cupertino, CA), Malcolm Wing (Palo Alto, CA)
Application Number: 13/626,721
International Classification: G06F 12/00 (20060101);