SRAM BIT-FLIP PROTECTION WITH REDUCED OVERHEAD
Systems and methods for efficiently implementing data protection techniques that protect data stored in volatile and non-volatile memory devices from soft errors are described. The error correction overprovisioning for a plurality of memory banks may be reduced by implementing localized single-bit error parity to detect single-bit errors within each memory bank of the plurality of memory banks and then sharing a single-error correcting parity or a single-error correcting and double-error detecting parity (SECDEC) over multiple memory banks or over all of the plurality of memory banks. The single-error correcting code (e.g., a Hamming code) may be generated and shared over the plurality of memory banks such that the single-error correcting code may correct single-bit errors across multiple sets of data stored within the plurality of memory banks that correspond with a particular line or row across all of the plurality of memory banks.
Latest Western Digital Technologies, Inc. Patents:
- Method to Enhance Spin Torque Layer Performance in a Spintronic Device
- Data Storage Device and Method for Reducing Read Disturbs When Reading Redundantly-Stored Data
- Non-volatile memory with enhanced program operation for last state on slow plane
- Magnetoresistive memory device including a magnetoresistance amplification layer
- Stress test for grown bad blocks
Semiconductor memory is widely used in various electronic devices such as mobile computing devices, mobile phones, solid-state drives, digital cameras, personal digital assistants, medical electronics, servers, and non-mobile computing devices. Semiconductor memory may comprise non-volatile memory or volatile memory. A non-volatile memory device allows information to be stored or retained even when the non-volatile memory device is not connected to a source of power (e.g., a battery). Examples of non-volatile memory include flash memory (e.g., NAND-type and NOR-type flash memory), Electrically Erasable Programmable Read-Only Memory (EEPROM), ferroelectric memory (e.g., FeRAM), magnetoresistive memory (e.g., MRAM), and phase change memory (e.g., PCM). In recent years, both volatile and non-volatile memory devices have been scaled in order to reduce the cost per bit. However, as process geometries shrink, many design and process challenges are presented. These challenges include increased variability in memory cell I-V characteristics over process, voltage, and temperature variations and increased susceptibility to chip-level soft errors.
Technology is described for efficiently implementing data protection techniques that protect data stored in volatile and non-volatile memory devices from soft errors. The soft errors may appear as random bit errors and be caused by alpha particles emitted from chip packaging materials (e.g., from lead-based isotopes in the solder bumps of a flip-chip package) or from cosmic radiation. In some cases, the error correction overprovisioning or the overhead of storing redundant data for detecting and correcting against data errors may be reduced by implementing localized single-bit error parity to detect single-bit errors within each memory bank of a plurality of memory banks and then sharing a single-error correcting parity or a single-error correcting and double-error detecting parity (SECDEC) over multiple memory banks or over all of the plurality of memory banks. Each line or row within a memory bank of the plurality of memory banks may store a set of data bits (e.g., 64 bits of data or 128 bits of data) and a single local parity bit for the set of data bits in order to detect single-bit errors occurring within the set of data bits. A single-error correcting code (e.g., a Hamming code or an extended Hamming code) may be generated and shared over the plurality of memory banks such that the single-error correcting code may correct single-bit errors across multiple sets of data stored within the plurality of memory banks that correspond with a particular line or row across all of the plurality of memory banks. The single-error correcting code may be written to a location within a dedicated shared memory bank corresponding with the particular line or row. The dedicated shared memory bank may be on the same integrated circuit as the plurality of memory banks or may be located on a different integrated circuit (e.g., using an external DRAM) than the plurality of memory banks. One benefit of storing the single-error correcting code off-chip is that the die area of a memory die including the plurality of memory banks may be reduced while maintaining the ability to correct single-bit errors.
Upon detection of a single-bit error corresponding with data within a line or row of a first memory bank of the plurality of memory banks (e.g., during a read operation or a read before write operation to the memory banks), the single-error correcting code for the line or row may be read from the dedicated shared memory bank and the multiple sets of data corresponding with the line or row may be read from the plurality of memory banks in order to identify the location of the single-bit error. The single-error correcting code may be used to identify and correct the single-bit error within the data corresponding with the line or row of the first memory bank. The data corresponding with the line or row of the first memory bank may be stored within memory cells connected to a common word line within the first memory bank. The first memory bank may comprise SRAM memory cells, DRAM memory cells, ReRAM memory cells, PCM memory cells, or Flash-based memory cells (e.g., NAND Flash memory cells). In some cases, small granularity read operations (e.g., reading 32 bits or 64 bits corresponding with a line of the first memory bank) may be performed and larger granularity write operations (e.g., writing all 64 bits across 16 different memory banks) may be performed in order to reduce the read before write burden of needing to read data from other memory banks of the plurality of memory banks before writing data to the first memory bank. For memory banks that store a relatively small number of bits per line, the reduction in the overhead for storing the error correcting codes for detecting and correcting against data errors may be significantly reduced. For example, for an implementation with 16 memory banks with 64-bit data widths, the overprovisioning may be reduced from 12.5% (e.g., implementing a [72,64] Hamming code per memory bank) to 2.3%.
An error correcting code may utilize a set of parity check bits that are generated and stored along with multiple sets of data that have been written across a line or row of one or more memory banks. Each parity check bit may comprise a parity bit for a particular grouping of data bits across the line or row of the one or more memory banks. In some cases, one of the parity check bits may comprise an XORing of a number of different data bits across the line or row of the one or more memory banks. The set of parity check bits may correspond with a single-bit error correcting code that may be added to or appended to the multiple sets of data in order to correct single-bit errors occurring to the multiple sets of data. The total number of parity check bits required may comprise the ceiling of log base 2 (N) plus one (i.e., ceil(log2(N))+1), where N is the total number of data bits to be protected across the line or row within the one or more memory banks. In one example, if the total number of bits stored across the line or row of the one or more memory banks comprises eight total data bits, then four parity check bits may be generated and stored with the eight data bits to protect against single-bit errors. In the case that a Hamming code is used to generate the four parity check bits and protect the four parity bits and the eight data bits (e.g., 12 total bits from bit 1 to bit 12 in which bit positions numbered with powers of two are reserved for the parity check bits), then a first parity check bit for bit position one may comprise the XORing of bits 3, 5, 7, 9, and 11, a second parity check bit for bit position two may comprise the XORing of bits 3, 6, 7, 10, and 11, a third parity check bit for bit position four may comprise the XORing of bits 5, 6, 7, and 12, and a fourth parity check bit for bit position eight may comprise the XORing of bits 9, 10, 11, and 12. The four parity check bits may be stored within using a dedicated shared memory bank in a location corresponding with the line or row of the one or more memory banks.
In some cases, the plurality of memory banks may be arranged on a first integrated circuit or a first memory die (e.g., a NAND Flash memory die) and the dedicated shared memory bank may also be arranged on the same first integrated circuit or the same first memory die as the plurality of memory banks. In other cases, the plurality of memory banks may be arranged on a first integrated circuit or a first memory die and the dedicated shared memory bank may be arranged on a second integrated circuit or a second memory die. In one example, the dedicated shared memory bank may comprise a DRAM or a Flash-based memory bank while the plurality of memory banks may comprise SRAM memory banks.
In some embodiments, a memory array may comprise a cross-point memory array. A cross-point memory array may refer to a memory array in which two-terminal memory cells are placed at the intersections of a first set of control lines (e.g., word lines) arranged in a first direction and a second set of control lines (e.g., bit lines) arranged in a second direction perpendicular to the first direction. The two-terminal memory cells may include a resistance-switching material, such as a phase change material, a ferroelectric material, or a metal oxide (e.g., nickel oxide or hafnium oxide). In some cases, each memory cell in a cross-point memory array may be placed in series with a steering element or an isolation element, such as a diode, in order to reduce leakage currents. In cross-point memory arrays where the memory cells do not include an isolation element, controlling and minimizing leakage currents may be a significant issue, especially since leakage currents may vary greatly over biasing voltage and temperature.
In one embodiment, a non-volatile storage system may include one or more two-dimensional arrays of non-volatile memory cells. The memory cells within a two-dimensional memory array may form a single layer of memory cells and may be selected via control lines (e.g., word lines and bit lines) in the X and Y directions. In another embodiment, a non-volatile storage system may include one or more monolithic three-dimensional memory arrays in which two or more layers of memory cells may be formed above a single substrate without any intervening substrates. In some cases, a three-dimensional memory array may include one or more vertical columns of memory cells located above and orthogonal to a substrate. In one example, a non-volatile storage system may include a memory array with vertical bit lines or bit lines that are arranged orthogonal to a semiconductor substrate. The substrate may comprise a silicon substrate. The memory array may include rewriteable non-volatile memory cells, wherein each memory cell includes a reversible resistance-switching element without an isolation element in series with the reversible resistance-switching element (e.g., no diode in series with the reversible resistance-switching element).
In some embodiments, a non-volatile storage system may include a non-volatile memory that is monolithically formed in one or more physical levels of arrays of memory cells having an active area disposed above a silicon substrate. The non-volatile storage system may also include circuitry associated with the operation of the memory cells (e.g., decoders, state machines, page registers, or control circuitry for controlling the reading and/or programming of the memory cells). The circuitry associated with the operation of the memory cells may be located above the substrate or located within the substrate.
In some embodiments, a non-volatile storage system may include a monolithic three-dimensional memory array. The monolithic three-dimensional memory array may include one or more levels of memory cells. Each memory cell within a first level of the one or more levels of memory cells may include an active area that is located above a substrate (e.g., a single-crystal substrate or a crystalline silicon substrate). In one example, the active area may include a semiconductor junction (e.g., a P-N junction). The active area may include a portion of a source or drain region of a transistor. In another example, the active area may include a channel region of a transistor.
In one embodiment, the memory cells within a memory array may comprise re-writable non-volatile memory cells including a reversible resistance-switching element. A reversible resistance-switching element may include a reversible resistivity-switching material having a resistivity that may be reversibly switched between two or more states. In one embodiment, the reversible resistance-switching material may include a metal oxide (e.g., a binary metal oxide). The metal oxide may include nickel oxide or hafnium oxide. In another embodiment, the reversible resistance-switching material may include a phase change material. The phase change material may include a chalcogenide material. In some cases, the re-writeable non-volatile memory cells may comprise resistive RAM (ReRAM) memory cells. In other cases, the re-writeable non-volatile memory cells may comprise conductive bridge memory cells or programmable metallization memory cells.
In some embodiments, the managing or control circuits (or a portion of the managing or control circuits) for facilitating one or more memory array operations may be integrated within the memory chip 102. The memory chip controller 105 and memory chip 102 may be arranged on a single integrated circuit or arranged on a single die. In other embodiments, the memory chip controller 105 and memory chip 102 may be arranged on different integrated circuits. In some cases, the memory chip controller 105 and memory chip 102 may be integrated on a system board, logic board, or a PCB.
The memory chip 102 includes memory core control circuits 104 and a memory core 103. Memory core control circuits 104 may include logic for controlling the selection of memory blocks (or arrays) within memory core 103, controlling the generation of voltage references for biasing a particular memory array into a read or write state, and generating row and column addresses. The memory core 103 may include one or more two-dimensional arrays of memory cells or one or more three-dimensional arrays of memory cells. In one embodiment, the memory core control circuits 104 and memory core 103 may be arranged on a single integrated circuit. In other embodiments, the memory core control circuits 104 (or a portion of the memory core control circuits) and memory core 103 may be arranged on different integrated circuits.
Referring to
Referring to
In some embodiments, one or more managing or control circuits may be used for controlling the operation of a memory array within the memory core 103. The one or more managing or control circuits may provide control signals to a memory array in order to perform a read operation and/or a write operation on the memory array. In one example, the one or more managing or control circuits may include any one of or a combination of control circuitry, state machines, decoders, sense amplifiers, read/write circuits, and/or controllers. The one or more managing circuits may perform or facilitate one or more memory array operations including erasing, programming, or reading operations. In one example, one or more managing circuits may comprise an on-chip memory controller for determining row and column address, word line and bit line addresses, memory array enable signals, and data latching signals.
In some embodiments, read/write circuits 306 may be used to write one or more pages of data into the memory blocks 310-312 (or into a subset of the memory blocks). The memory cells within the memory blocks 310-312 may permit direct over-writing of pages (i.e., data representing a page or a portion of a page may be written into the memory blocks 310-312 without requiring an erase or reset operation to be performed on the memory cells prior to writing the data). In one example, the memory system 101 in
In some cases, read/write circuits 306 may be used to program a particular memory cell to be in one of three or more data/resistance states (i.e., the particular memory cell may comprise a multi-level memory cell). In one example, the read/write circuits 306 may apply a first voltage difference (e.g., 2V) across the particular memory cell to program the particular memory cell into a first state of the three or more data/resistance states or a second voltage difference (e.g., 1V) across the particular memory cell that is less than the first voltage difference to program the particular memory cell into a second state of the three or more data/resistance states. Applying a smaller voltage difference across the particular memory cell may cause the particular memory cell to be partially programmed or programmed at a slower rate than when applying a larger voltage difference. In another example, the read/write circuits 306 may apply a first voltage difference across the particular memory cell for a first time period (e.g., 150 ns) to program the particular memory cell into a first state of the three or more data/resistance states or apply the first voltage difference across the particular memory cell for a second time period less than the first time period (e.g., 50 ns). One or more programming pulses followed by a memory cell verification phase may be used to program the particular memory cell to be in the correct state.
As depicted in
In one embodiment, the memory cells 200 of
In another embodiment, the memory cells 200 of
Referring to
In an alternative read biasing scheme, both the unselected word lines and the unselected bit lines may be biased to an intermediate voltage that is between the selected word line voltage and the selected bit line voltage. Applying the same voltage to both the unselected word lines and the unselected bit lines may reduce the voltage stress across the unselected memory cells driven by both the unselected word lines and the unselected bit lines; however, the reduced voltage stress comes at the expense of increased leakage currents associated with the selected word line and the selected bit line. Before the selected word line voltage has been applied to the selected word line, the selected bit line voltage may be applied to the selected bit line, and a read circuit may then sense an auto zero amount of current through the selected memory bit line which is subtracted from the bit line current in a second current sensing when the selected word line voltage is applied to the selected word line. The leakage current may be subtracted out by using the auto zero current sensing.
Referring to
The process of switching the resistance of a reversible resistance-switching element from a high-resistivity state to a low-resistivity state may be referred to as SETTING the reversible resistance-switching element. The process of switching the resistance from the low-resistivity state to the high-resistivity state may be referred to as RESETTING the reversible resistance-switching element. The high-resistivity state may be associated with binary data “1” and the low-resistivity state may be associated with binary data “0.” In other embodiments, SETTING and RESETTING operations and/or the data encoding may be reversed. For example, the high-resistivity state may be associated with binary data “0” and the low-resistivity state may be associated with binary data “1.” In some embodiments, a higher than normal programming voltage may be required the first time a reversible resistance-switching element is SET into the low-resistivity state as the reversible resistance-switching element may have been placed into a resistance state that is higher than the high-resistivity state when fabricated. The term “FORMING” may refer to the setting of a reversible resistance-switching element into a low-resistivity state for the first time after fabrication or the resetting of a reversible resistance-switching element into a high-resistivity state for the first time after fabrication. In some cases, after a FORMING operation or a memory cell preconditioning operation has been performed, the reversible resistance-switching element may be RESET to the high-resistivity state and then SET again to the low-resistivity state.
Referring to
In one write biasing scheme, both the unselected word lines and the unselected bit lines may be biased to an intermediate voltage that is between the selected word line voltage and the selected bit line voltage. The intermediate voltage may be generated such that a first voltage difference across unselected memory cells sharing a selected word line is greater than a second voltage difference across other unselected memory cells sharing a selected bit line. One reason for placing the larger voltage difference across the unselected memory cells sharing a selected word line is that the memory cells sharing the selected word line may be verified immediately after a write operation in order to detect a write disturb.
As depicted in
The number of F cells is related to the length of the bit lines (or the number of memory cells connected to a bit line) while the number of H cells is related to the length of the word lines (or the number of memory cells connected to a word line). The number of U cells is related to the product of the word line length and the bit line length. In one embodiment, each memory cell sharing a particular word line, such as word line 365, may be associated with a particular page stored within the cross-point memory array 360.
At the intersection of selected word line 376 and selected bit line 374 is a program inhibited memory cell (an I cell). The voltage across the I cell is the difference between the selected word line voltage and the program inhibit voltage. Memory cells at the intersections of the selected bit line 374 and the unselected word lines 375, 377, and 378 comprise unselected memory cells (X cells). X cells are unselected memory cells that share a selected bit line that is biased to a program inhibit voltage. The voltage across the X cells is the difference between the unselected word line voltage and the program inhibit voltage. In one embodiment, the program inhibit voltage applied to the selected bit line 374 may be the same as or substantially the same as the unselected bit line voltage. In another embodiment, the program inhibit voltage may be a voltage that is greater than or less than the unselected bit line voltage. For example, the program inhibit voltage may be set to a voltage that is between the selected word line voltage and the unselected bit line voltage. In some cases, the program inhibit voltage applied may be a function of temperature. In one example, the program inhibit voltage may track the unselected bit line voltage over temperature.
In one embodiment, two or more pages may be associated with a particular word line. In one example, word line 375 may be associated with a first page and a second page. The first page may correspond with bit lines 371 and 373 and the second page may correspond with bit lines 372 and 374. In this case, the first page and the second page may correspond with interdigitated memory cells that share the same word line. When a memory array operation is being performed on the first page (e.g., a programming operation) and the selected word line 376 is biased to the selected word line voltage, one or more other pages also associated with the selected word line 376 may comprise H cells because the memory cells associated with the one or more other pages will share the same selected word line as the first page.
In some embodiments, not all unselected bit lines may be driven to an unselected bit line voltage. Instead, a number of unselected bit lines may be floated and indirectly biased via the unselected word lines. In this case, the memory cells of memory array 370 may comprise resistive memory elements without isolating diodes. In one embodiment, the bit lines 372 and 373 may comprise vertical bit lines in a three dimensional memory array comprising comb shaped word lines.
Referring to
In one embodiment, a vertical bit line memory array, such as memory array 416, includes a greater number of memory cells along the word lines as compared with the number of memory cells along the vertical bit lines (e.g., the number of memory cells along a word line may be more than 10 times the number of memory cells along a bit line). In one example, the number of memory cells along each bit line may be 16 or 32, while the number of memory cells along each word line may be 2048 or more than 4096.
As depicted, during a memory array operation (e.g., a programming operation), the selected bit line may be biased to 1V, the unselected word line may be biased to 0.6V, the selected word line may be biased to 0V, and the unselected bit line may be biased to 0.5V. In some embodiments, during a second memory array operation, the selected bit line may be biased to a selected bit line voltage (e.g., 2.0V), the unselected word line may be biased to an unselected word line voltage (e.g., 1.0V), the selected word line may be biased to a selected word line voltage (e.g., 0V), and the unselected bit line may be biased to an unselected bit line voltage (e.g., 1V). In this case, the unselected memory cells sharing the selected word line will be biased to the voltage difference between the selected word line voltage and the unselected bit line voltage. In other embodiments, the memory array biasing scheme depicted in
As depicted in
In one embodiment, during a read operation, read/write circuit 502 biases the selected bit line to the selected bit line voltage in read mode. Prior to sensing data, read/write circuit 502 will precharge the Vsense node to 2V (or some other voltage greater than the selected bit line voltage). When sensing data, read/write circuit 502 attempts to regulate the SELB node to the selected bit line voltage (e.g., 1V) via clamp control circuit 564 and transistor 562 in a source-follower configuration. If the current through the selected memory cell 550 is greater than the read current limit, Iref, then, over time, the Vsense node will fall below Vref-read (e.g., set to 1.5V) and the sense amplifier 566 will read out a data “0.” Outputting a data “0” represents that the selected memory cell 550 is in a low resistance state (e.g., a SET state). If the current through the selected memory cell 550 is less than Iref, then the Vsense node will stay above Vref-read and the sense amplifier 566 will read out a data “1.” Outputting a data “1” represents that the selected memory cell 550 is in a high resistance state (e.g., a RESET state). Data latch 568 may latch the output of sense amplifier 566 after a time period of sensing the current through the selected memory cell (e.g., after 400 ns).
In one embodiment, during a write operation, if the Data In terminal requests a data “0” to be written to a selected memory cell, then read/write circuit 502 may bias SELB to the selected bit line voltage for programming a data “0” in write mode (e.g., 1.2V for a SET operation) via write circuit 560. The duration of programming the memory cell may be a fixed time period (e.g., using a fixed-width programming pulse) or variable (e.g., using a write circuit 560 that senses whether a memory cell has been programmed while programming). If the Data In terminal requests a data “1” to be written, then read/write circuit 502 may bias SELB to the selected bit line voltage for programming a data “1” in write mode (e.g., 0V or −1.2V for a RESET operation) via write circuit 560. In some cases, if a selected memory cell is to maintain its current state, then the write circuit 560 may bias SELB to a program inhibit voltage during write mode. The program inhibit voltage may be the same as or close to the unselected bit line voltage.
In one embodiment, for each line within a memory bank, a local Hamming parity of ceil(log2(N))+1 bits may be computed. For a particular line across L memory banks, the L local Hamming parities may be used for computing the A'th shared parity to be stored in the shared memory bank 697. The A'th shared parity may be computed by XORing the L local Hamming parities of ceil(log2(N))+1 bits. In this case, the size of the shared parity per memory line is ceil(log2(N))+1 bits (which is less than the ceil(log2(L*N))+1 bits that appear in
In step 622, it is detected that a write operation to write a first set of data to a first set of memory cells corresponding with a particular line within a first memory bank of a plurality of memory banks has been initiated. The plurality of memory banks may correspond with memory banks 107 in
If it is determined that data was not previously written to the memory cells corresponding with the particular line within any of the plurality of memory banks, then step 626 is performed. In step 626, a local parity bit and a set of parity check bits for the first set of data is generated. The local parity bit may be generated by XORing each bit of the first set of data. The set of parity check bits may be generated via application of a single-error correcting Hamming code to the first set of data. In step 628, the local parity bit and the first set of data are written to the first set of memory cells corresponding with the particular line within the first memory bank. In step 630, the set of parity check bits is written to a location within a shared memory bank corresponding with the particular line. In one example, the local parity bit may correspond with the local parity bit 616 in
Otherwise, if it is determined that data was previously written to the memory cells corresponding with the particular line prior to the write operation, then step 632 is performed. In this case, the set of parity check bits may have been generated using data stored in other memory banks of the plurality of memory banks different from the first memory bank. In step 632, a second set of data is read from the first set of memory cells. The second set of data may comprise data that was previously written to the particular line within the first memory bank (e.g., previously written data that is to be overwritten by the first set of data). If the memory cells corresponding with the particular line within the first memory bank have not been previously written to, then step 632 may be skipped. In step 634, a set of parity check bits is read from a location within a shared memory bank corresponding with the particular line (e.g., Line0 in
In step 636, the set of parity check bits may be updated based on data differences between the first set of data and the second set of data. In one example, a first equation for generating a first parity check bit of the set of parity check bits may be acquired and one or more bit positions within the second set of data may be identified using the first equation. The data differences between the first set of data to be written and the second set of data that was previously stored for the one or more bit positions may be used to generate an updated first parity check bit. In one example, if the one or more bit positions correspond with bit 32 and bit 64, then bit 32 of the first set of data may be compared with bit 32 of the second set of data and bit 64 of the first set of data may be compared with bit 64 of the second set of data. If the data for bit position 32 is different and the data for bit position 64 is the same, then the first parity check bit needs to be changed or flipped (e.g., from a “0” to a “1” or a “1” to a “0”). However, if both the data for bit position 32 is different and the data for bit position 64 is different, then the first parity check bit may stay the same and not be changed or flipped.
In another example, for each parity check bit of the set of parity check bits, the data corresponding with the bit positions within the second set of data used to generate the parity check bit may be XOR'd with the parity check bit and then XOR'd with the data corresponding with the same bit positions within the first set of data. In one example, if the bit positions within the second set of data used to generate a first parity check bit of the set of parity check bits correspond with bit positions 16 and 32, then the first parity check bit may be XOR'd with the data bits within the second set of data at bit positions 16 and 32 and then the resulting parity may be XOR'd with the data bits within the first set of data at bit positions 16 and 32. In one case, if there is no change in the data for bit positions 16 and 32 between the second set of data and the first set of data, then the first parity check bit will remain the same and not be altered. In another case, if there is no change in the data for bit position 16 between the second set of data and the first set of data but there is a change in the data for bit position 32 between the second set of data and the first set of data, then the first parity check bit will be changed or flipped to account for the data changes in the first set of data.
In step 638, a local parity bit and the first set of data are written to the first set of memory cells corresponding with the particular line within the first memory bank. The local parity bit may be generated by XORing each bit within the first set of data. In step 640, the updated set of parity check bits is written to the location within the shared memory bank corresponding with the particular line. The first set of memory cells may correspond with the data portion 614 in
In some cases, a memory controller or control circuitry for managing the reading and writing of data to a plurality of memory banks, such as controller 108 in
In step 652, a first set of data to be written to memory cells corresponding with a particular line within a first memory bank of a plurality of memory banks is acquired. In step 654, a second set of data corresponding with the particular line is read from the first memory bank. The first set of data may comprise data to be written to the memory cells corresponding with the particular line within the first memory bank and the second set of data may comprise data that was previously written to the memory cells corresponding with the particular line within the first memory bank. In step 656, a first set of parity check bits corresponding with the particular line is read from a shared memory bank. The first set of parity check bits may have been generated using the second set of data and a third set of data written to the particular line within a second memory bank of the plurality of memory banks different from the first memory bank. The first set of parity check bits may have been generated using data from one or more memory banks of the plurality of memory banks different from the first memory bank. In one example, the first set of parity check bits may correspond with a single-error correcting code for correcting single-bit errors across a particular line or a particular row across the plurality of memory banks (e.g., all data written to row 12 across the plurality of memory banks).
In step 658, a local parity bit for the first set of data is generated using the first set of data. The local parity bit may be generated by XORing each bit within the first set of data. The local parity bit may indicate whether the number of logic “1”s within the first set of data is even or odd. In step 660, a second set of parity check bits is generated using the first set of data, the second set of data, and the first set of parity check bits. In one example, the second set of parity check bits may be generated by updating the first set of parity check bits to reflect the data differences between the first set of data to be written to the particular line of the first memory bank and the second set of data that was previously written to the particular line of the first memory bank. In step 662, the local parity bit and the first set of data is written to the memory cells corresponding with the particular line within the first memory bank. In step 664, the second set of parity check bits is written to memory cells corresponding with the particular line within the shared memory bank.
In step 672, a first set of data and a local parity bit are read from memory cells corresponding with a particular line within a first memory bank of a plurality of memory banks. The first set of data may be read from the data portion 614 in
In step 680, a set of parity check bits is read from a location within a shared memory bank corresponding with the particular line. In step 682, a bit error within the first set of data is identified and corrected using the first set of data, the one or more sets of data, and the set of parity check bits. In this case, once the set of parity check bits and the entire data set comprising the first set of data and the one or more sets of data have been acquired, then the single-bit error within the first set of data may be identified and corrected via syndrome decoding. In step 684, the corrected first set of data is outputted. In one example, the corrected first set of data may be transferred to a host, such as host 106 in
In step 702, an instruction to write a first set of data to a first memory address corresponding with a first memory line within a first memory bank of a plurality of memory banks is acquired. The first set of data may comprise new data to be written to the first memory address. The first memory bank may correspond with memory bank 0 in
In step 710, a single parity bit is generated for the first set of data. The single parity bit may be generated by XORing each of the bits within the first set of data. The single parity bit may correspond with the local parity bit 696 in
In step 732, a first set of data is read from a first memory address corresponding with a first memory line within a first memory bank of a plurality of memory banks. In step 734, a single parity bit is read corresponding with the first memory address. The first set of data may correspond with the data portion 694 in
In step 738, in response to detecting the single bit error in step 736, other sets of data associated with the first memory line may be read from other memory banks of the plurality of memory banks. In one example, the other memory banks may comprise L−1 total memory banks and the plurality of memory banks may comprise L total memory banks. In step 740, shared parity information for the first memory line may be read. The shared parity information may be read from a shared memory bank, such as the shared memory bank 697 in
One embodiment of the disclosed technology includes a plurality of memory banks (e.g., 16 SRAM memory banks), a shared memory bank, and one or more control circuits. The plurality of memory banks includes a first memory bank and a second memory bank. The one or more control circuits configured to acquire a first set of data to be written to memory cells corresponding with a particular line within the first memory bank and detect that other data was previously written to memory cells corresponding with the particular line within the second memory bank. The one or more control circuits configured to read a set of parity check bits from a location within the shared memory bank corresponding with the particular line in response to detection that the other data was previously written to memory cells corresponding with the particular line within the second memory bank. The one or more control circuits configured to update the set of parity check bits based on data differences between the first set of data and a second set of data previously written to the memory cells corresponding with the particular line within the first memory bank and generate a local parity bit using the first set of data. The one or more control circuits configured to write the local parity bit and the first set of data to the first set of the memory cells corresponding with the particular line within the first memory bank and write the updated set of parity check bits to the location within the shared memory bank corresponding with the particular line.
One embodiment of the disclosed technology includes acquiring a first set of data to be written to memory cells corresponding with a particular line within a first memory bank of a plurality of memory banks, detecting that a third set of data was previously written to memory cells corresponding with the particular line within a second memory bank of the plurality of memory banks, reading a first set of parity check bits from a location within a shared memory bank corresponding with the particular line in response to detecting that the third set of data was previously written to the memory cells corresponding with the particular line within the second memory bank, reading a second set of data previously written to the memory cells corresponding with the particular line within the first memory bank, updating the first set of parity check bits based on data differences between the first set of data and the second set of data previously written to the memory cells corresponding with the particular line within the first memory bank, generating a local parity bit using the first set of data, writing the local parity bit and the first set of data to the memory cells corresponding with the particular line within the first memory bank, and writing the updated set of parity check bits to the location within the shared memory bank corresponding with the particular line.
One embodiment of the disclosed technology includes a plurality of memory banks including a first memory bank and a second memory bank, means for storing a set of parity check bits, means for detecting that a third set of data was written to memory cells corresponding with a particular line within the second memory bank, and a memory controller (or memory bank controller). The memory controller configured to generate the set of parity check bits using the third set of data and acquire a first set of data to be written to memory cells corresponding with the particular line within the first memory bank. The memory controller configured to update the set of parity check bits based on a data difference between the first set of data and a second set of data that was previously written to the memory cells corresponding with the particular line within the first memory bank. The memory controller configured to generate a local parity bit using the first set of data and write the local parity bit to the memory cells corresponding with the particular line within the first memory bank. The memory controller configured to write the first set of data to the memory cells corresponding with the particular line within the first memory bank and write the updated set of parity check bits to the means for storing the set of parity check bits.
For purposes of this document, a first layer may be over or above a second layer if zero, one, or more intervening layers are between the first layer and the second layer.
For purposes of this document, it should be noted that the dimensions of the various features depicted in the figures may not necessarily be drawn to scale.
For purposes of this document, reference in the specification to “an embodiment,” “one embodiment,” “some embodiments,” or “another embodiment” may be used to describe different embodiments and do not necessarily refer to the same embodiment.
For purposes of this document, a connection may be a direct connection or an indirect connection (e.g., via another part). In some cases, when an element is referred to as being connected or coupled to another element, the element may be directly connected to the other element or indirectly connected to the other element via intervening elements. When an element is referred to as being directly connected to another element, then there are no intervening elements between the element and the other element.
For purposes of this document, the term “based on” may be read as “based at least in part on.”
For purposes of this document, without additional context, use of numerical terms such as a “first” object, a “second” object, and a “third” object may not imply an ordering of objects, but may instead be used for identification purposes to identify different objects.
For purposes of this document, the term “set” of objects may refer to a “set” of one or more of the objects.
Although the subject matter has been described in language specific to structural features and/or methodological acts, it is to be understood that the subject matter defined in the appended claims is not necessarily limited to the specific features or acts described above. Rather, the specific features and acts described above are disclosed as example forms of implementing the claims.
Claims
1. An apparatus, comprising:
- a plurality of memory banks including a first memory bank and a second memory bank;
- a shared memory bank configured to store a set of shared parity check bits for data stored within the plurality of memory banks; and
- one or more control circuits configured to acquire a first set of data to be written to memory cells corresponding with a particular line within the first memory bank, the one or more control circuits configured to detect that other data was previously written to memory cells corresponding with the particular line within the second memory bank and read the set of shared parity check bits from a location within the shared memory bank corresponding with the particular line in response to detection that the other data was previously written to memory cells corresponding with the particular line within the second memory bank different from the first memory bank, the one or more control circuits configured to update the set of shared parity check bits based on data differences between the first set of data and a second set of data previously written to the memory cells corresponding with the particular line within the first memory bank and generate a local parity bit using the first set of data, the one or more control circuits configured to write the local parity bit and the first set of data to the memory cells corresponding with the particular line within the first memory bank and write the updated set of shared parity check bits to the location within the shared memory bank corresponding with the particular line.
2. The apparatus of claim 1, wherein:
- the set of shared parity check bits were generated using the second set of data and the other data that was stored using the memory cells corresponding with the particular line within the second memory bank prior to being updated.
3. The apparatus of claim 1, wherein:
- the set of shared parity check bits corresponds with a single-error correcting code.
4. The apparatus of claim 1, wherein:
- the set of shared parity check bits corresponds with a Hamming code.
5. The apparatus of claim 1, wherein:
- the set of shared parity check bits corresponds with a single-error correcting and double-error detecting code.
6. The apparatus of claim 1, wherein:
- the plurality of memory banks is arranged on a first integrated circuit; and
- the shared memory bank is arranged on the first integrated circuit.
7. The apparatus of claim 6, wherein:
- the first integrated circuit includes a non-volatile memory that is monolithically formed in one or more physical levels of memory cells having active areas disposed above a silicon substrate.
8. The apparatus of claim 1, wherein:
- the plurality of memory banks is arranged on a first integrated circuit; and
- the shared memory bank is arranged on a second integrated circuit different from the first integrated circuit.
9. The apparatus of claim 1, wherein:
- the first memory bank comprises an SRAM memory bank.
10. The apparatus of claim 1, wherein:
- the local parity bit comprises an even parity bit.
11. A method, comprising:
- acquiring a first set of data to be written to memory cells corresponding with a particular line within a first memory bank of a plurality of memory banks;
- detecting that a third set of data was previously written to memory cells corresponding with the particular line within a second memory bank of the plurality of memory banks;
- reading a set of shared parity check bits from a location within a shared memory bank corresponding with the particular line that extends across the plurality of memory banks in response to detecting that the third set of data was previously written to the memory cells corresponding with the particular line within the second memory bank different from the first memory bank;
- reading a second set of data previously written to the memory cells corresponding with the particular line within the first memory bank;
- updating the set of shared parity check bits based on data differences between the first set of data and the second set of data previously written to the memory cells corresponding with the particular line within the first memory bank;
- generating a local parity bit using the first set of data;
- writing the local parity bit and the first set of data to the memory cells corresponding with the particular line within the first memory bank; and
- writing the updated set of shared parity check bits to the location within the shared memory bank corresponding with the particular line.
12. The method of claim 11, further comprising:
- generating the set of shared parity check bits using the second set of data and the third set of data prior to acquiring the first set of data to be written to the memory cells corresponding with the particular line within the first memory bank.
13. The method of claim 11, wherein:
- the set of shared parity check bits corresponds with a single-error correcting code.
14. The method of claim 11, wherein:
- the set of shared parity check bits corresponds with a Hamming code.
15. The method of claim 11, wherein:
- the set of shared parity check bits corresponds with a single-error correcting and double-error detecting code.
16. The method of claim 11, wherein:
- the plurality of memory banks is arranged on a first integrated circuit; and
- the shared memory bank is arranged on the first integrated circuit.
17. The method of claim 11, wherein:
- the plurality of memory banks is arranged on a first integrated circuit; and
- the shared memory bank is arranged on a second integrated circuit different from the first integrated circuit.
18. The method of claim 11, wherein:
- the first memory bank comprises an SRAM memory bank.
19. The method of claim 11, wherein:
- the local parity bit comprises an even parity bit.
20. An apparatus, comprising:
- a plurality of memory banks including a first memory bank and a second memory bank;
- means for storing a set of shared parity check bits within a shared memory bank at a location within the shared memory bank corresponding with a particular line that extends across the plurality of memory banks;
- means for detecting that a third set of data was written to memory cells corresponding with the particular line within the second memory bank; and
- a memory controller configured to generate the set of shared parity check bits using the third set of data and acquire a first set of data to be written to memory cells corresponding with the particular line within the first memory bank, the memory controller configured to read the set of shared parity check bits from the location within the shared memory bank corresponding with the particular line in response to detection that the third set of data was previously written to the memory cells corresponding with the particular line within the second memory bank different from the first memory bank and update the set of shared parity check bits based on a data difference between the first set of data and a second set of data that was previously written to the memory cells corresponding with the particular line within the first memory bank, the memory controller configured to generate a local parity bit using the first set of data and write the local parity bit to the memory cells corresponding with the particular line within the first memory bank, the memory controller configured to write the first set of data to the memory cells corresponding with the particular line within the first memory bank and write the updated set of shared parity check bits to the means for storing the set of shared parity check bits.
Type: Application
Filed: Feb 20, 2018
Publication Date: Aug 22, 2019
Applicant: Western Digital Technologies, Inc. (San Jose, CA)
Inventors: Eran Sharon (Rishon Lezion), Ariel Navon (Revava), Shay Benisty (Beer Sheva)
Application Number: 15/899,948