ULTRA-PRECISE TUNING OF ANALOG NEURAL MEMORY CELLS IN A DEEP LEARNING ARTIFICIAL NEURAL NETWORK
20210264983 · 2021-08-26
Assignee
Inventors
- Steven Lemke (Boulder Creek, CA)
- Hieu Van Tran (San Jose, CA)
- Yuri Tkachev (Sunnyvale, CA, US)
- LOUISA SCHNEIDER (San Jose, CA, US)
- Henry A. Om'mani (Santa Clara, CA, US)
- Thuan Vu (San Jose, CA)
- Nhan Do (Saratoga, CA)
- Vipin Tiwari (Dublin, CA)
Cpc classification
G11C2216/08
PHYSICS
G11C16/107
PHYSICS
G11C16/3404
PHYSICS
G11C16/3459
PHYSICS
International classification
G11C16/14
PHYSICS
Abstract
Embodiments for ultra-precise tuning of a selected memory cell are disclosed. The selected memory cell optionally is first programmed using coarse programming and fine programming methods. The selected memory cell then undergoes ultra-precise programming through the programming of an adjacent memory cell. As the adjacent memory cell is programmed, capacitive coupling between the floating gate of the adjacent memory cell and the floating gate of the selected memory cell will cause the voltage of the floating gate of the selected memory cell to increase, but in smaller increments than could be achieved by programming the selected memory cell directly. In this manner, the selected memory cell can be programmed with ultra-precise gradations.
Claims
1. A method of programming a selected memory cell in a neural memory to a target value, comprising: programming a floating gate of the selected memory cell to a first voltage by applying a first sequence of voltages to terminals of the selected memory cell; and programming the floating gate of the selected memory cell to a second voltage through capacitive coupling between the floating gate of the selected memory cell and a floating gate of an adjacent tuning cell by applying a second sequence of voltages to terminals of the adjacent tuning cell, wherein the second voltage corresponds to the target value.
2. The method of claim 1, wherein the terminals of the selected memory cell comprise a bit line terminal coupled to a bit line, a source line terminal coupled to a source line, and a word line terminal coupled to a word line.
3. The method of claim 2, wherein the terminals of the selected memory cell further comprise a control gate terminal coupled to a control gate line.
4. The method of claim 3, wherein the control gate terminal of the selected memory cell is connected to a control gate line, and wherein the control gate line is connected to control gate terminals of a column of cells containing the selected memory cells and an adjacent column of cells.
5. The method of claim 3, wherein the terminals of the selected memory cell further comprise an erase gate terminal coupled to an erase gate line.
6. The method of claim 5, wherein the control gate is orthogonal to the erase gate line.
7. The method of claim 5, wherein the control gate line is orthogonal to the source line.
8. The method of claim 2, wherein the selected memory cell is a split-gate memory cell.
9. The method of claim 2, wherein the selected memory cell is a stacked-gate memory cell.
10. The method of claim 1, wherein a charge equivalent to a sub-single electron is added to the floating gate of the selected memory cell during each programming pulse in the second sequence of voltages.
11. The method of claim 1, wherein the selected memory cell and the adjacent tuning cell are contained within a row comprising a plurality of pairs of adjacent data cells and tuning cells.
12. The method of claim 1, wherein the selected memory cell and the adjacent tuning cell are contained within an array comprising a plurality of pairs of adjacent data cells and tuning cells.
13. The method of claim 11, wherein a distance between adjacent data cells is greater than a distance between an adjacent data cell and tuning cell.
14. The method of claim 11, wherein half of the data cells in the row store a W+ value and half of the data cells in the row store a W− value.
15. The method of claim 14, wherein the half of the data cells storing a W+ value are used as tuning cells.
16. The method of claim 14, wherein half of the data cells storing a W− value are used as tuning cells.
17. The method of claim 11, wherein during a read operation, an adjacent pair of a data bitline and a tuning bitline are coupled to a sense amplifier.
18. The method of claim 17, wherein the data bitline and the tuning bitline are interchangeable
19. The method of claim 1, wherein the step of programming a floating gate of the selected memory cell to a first voltage comprises coarse programming.
20. The method of claim 1, wherein the step of programming a floating gate of the selected memory cell to a first voltage comprises coarse programming and precision programming.
21. The method of claim 1, wherein in the event that during the step of programming a floating gate of the selected memory cell, if the voltage of the selected memory cell is over-programmed to a voltage exceeding the first voltage, the method further comprises erasing the selected memory cell.
22. The method of claim 1, wherein the floating gate of the selected memory cell and the floating gate of the adjacent tuning cell are partially overlapping.
23. A method of programming a first memory cell in a neural memory to a target value, comprising: programming a second memory cell by applying programming voltages to terminals of the second memory cell; and determining if an output of the first memory cell has reached the target value.
24. The method of claim 23, wherein the second memory cell is adjacent to the first memory cell
25. The method of claim 23, wherein the first memory cell is coupled to a data bitline and the second memory cell is coupled to a tuning bitline.
26. The method of claim 25, further comprising: prior to the programming step, determining which bitline in a pair of adjacent bitline contains greater noise and designating that bitline as the tuning bitline and designating the other bitline in the pair as the data bitline.
27. The method of claim 23, wherein the first memory cell and the second memory cell are contained in an analog neural memory array.
28. The method of claim 23, further comprising: if the output of the first memory cell has not reached the target value, repeating the programming and determining steps until the output of the first memory cell has reached the target value.
29. The method of claim 28, wherein for each repeating step, increasing one or more of the programming voltages applied to the terminals of the second memory cell.
30. The method of claim 28, wherein the same programming voltages are used during each repeating step.
31. The method of claim 23, wherein the terminals of the second memory cell comprise a bit line terminal, a source line terminal, and a word line terminal.
32. The method of claim 31, wherein the terminals of the second memory cell further comprise a control gate terminal.
33. The method of claim 32, wherein the control gate terminal of the first memory cell is connected to a control gate line; and wherein the control gate line is connected to control gate terminals of a column of cells containing the first memory cell and an adjacent column of cells containing the second memory cell.
34. The method of claim 34, wherein the terminals of the second memory cell further comprise an erase gate terminal
35. The method of claim 34, wherein the control gate is orthogonal to the erase gate
36. The method of claim 34, wherein the control gate is orthogonal to the source line
37. The method of claim 23, wherein the first memory cell and the second memory cells are split-gate memory cells.
38. The method of claim 23, wherein the first memory cell and the second memory cell are stacked-gate memory cells.
39. The method of claim 23, wherein a charge equivalent to a sub-single electron is added to the floating gate of the first memory cell during the programming step.
40. The method of claim 23, wherein the first memory cell and the second memory cell are contained within an array comprising a plurality of pairs of adjacent data cells and tuning cells.
41. The method of claim 40, wherein a distance between adjacent data cells is greater than a distance between an adjacent data cell and tuning cell.
42. The method of claim 23, wherein during the determining step, a bit line coupled to the first memory cell and a bit line coupled to the second memory cell are both coupled to a sense amplifier.
43. The method of claim 23, further comprising: performing coarse programming on the first memory cell.
44. The method of claim 23, further comprising: performing coarse programming on the first memory cell; and performing precision programming on the first memory cell.
45. The method of claim 21, wherein the floating gate of the first memory cell and the floating gate of the second memory cell are partially overlapping.
Description
BRIEF DESCRIPTION OF THE DRAWINGS
[0045]
[0046]
[0047]
[0048]
[0049]
[0050]
[0051]
[0052]
[0053]
[0054]
[0055]
[0056]
[0057]
[0058]
[0059]
[0060]
[0061]
[0062]
[0063]
[0064]
[0065]
[0066]
[0067]
[0068]
[0069]
[0070]
[0071]
[0072]
[0073]
[0074]
DETAILED DESCRIPTION OF THE INVENTION
[0075]
[0076] Various levels of precision can be achieved during the programming process using coarse programming, precision programming, and ultra-precision programming.
[0077] As described herein for neural networks, the non-volatile memory cells of VMM array 1200, i.e. the flash memory of VMM array 1200, are preferably configured to operate in a sub-threshold region.
[0078] The non-volatile reference memory cells and the non-volatile memory cells described herein are biased in sub-threshold region:
Ids=Io*e.sup.(Vg−Vth)/nVt=w*Io*e.sup.(Vg)/nVt, [0079] where w=e.sup.(−Vth)/nVt
where Ids is the drain to source current; Vg is gate voltage on the memory cell; Vth is threshold voltage of the memory cell; Vt is thermal voltage=k*T/q with k being the Boltzmann constant, T the temperature in Kelvin, and q the electronic charge; n is a slope factor=1+(Cdep/Cox) with Cdep=capacitance of the depletion layer, and Cox capacitance of the gate oxide layer; Io is the memory cell current at gate voltage equal to threshold voltage, Io is proportional to (Wt/L)*u*Cox*(n−1)*Vt.sup.2 where u is carrier mobility and Wt and L are width and length, respectively, of the memory cell.
[0080] For an I-to-V log converter using a memory cell (such as a reference memory cell or a peripheral memory cell) or a transistor to convert input current Ids, into an input voltage, Vg:
Vg=n*Vt*log[Ids/wp*Io]
Here, wp is w of a reference or peripheral memory cell.
[0081] For an I-to-V log converter using a memory cell (such as a reference memory cell or a peripheral memory cell) or a transistor to convert input current Ids, into an input voltage, Vg:
Vg=n*Vt*log[Ids/wp*Io]
[0082] Here, wp is w of a reference or peripheral memory cell.
[0083] For a memory array used as a vector matrix multiplier VMM array, the output current is:
Iout=wa*Io*e.sup.(Vg)/nVt namely
Iout=(wa/wp)*Iin=W*Iin
W=e.sup.(Vthp−Vtha)/nVt
Iin=wp*Io*e.sup.(Vg)/nVt [0084] Here, wa=w of each memory cell in the memory array.
[0085] A wordline or control gate can be used as the input for the memory cell for the input voltage.
[0086] Alternatively, the non-volatile memory cells of VMM arrays described herein can be configured to operate in the linear region:
Ids=beta*(Vgs−Vth)*Vds; beta=u*Cox*Wt/L,
Wα(Vgs−Vth), [0087] meaning weight W in the linear region is proportional to (Vgs-Vth)
[0088] A wordline or control gate or bitline or sourceline can be used as the input for the memory cell operated in the linear region. The bitline or sourceline can be used as the output for the memory cell.
[0089] For an I-to-V linear converter, a memory cell (such as a reference memory cell or a peripheral memory cell) or a transistor operating in the linear region or a resistor can be used to linearly convert an input/output current into an input/output voltage.
[0090] Alternatively, the memory cells of VMM arrays described herein can be configured to operate in the saturation region:
Ids=½*beta*(Vgs−Vth).sup.2; beta=u*Cox*Wt/L
Wα(Vgs-Vth).sup.2, meaning weight W is proportional to (Vgs−Vth).sup.2
[0091] A wordline, control gate, or erase gate can be used as the input for the memory cell operated in the saturation region. The bitline or sourceline can be used as the output for the output neuron.
[0092] Alternatively, the memory cells of VMM arrays described herein can be used in all regions or a combination thereof (sub threshold, linear, or saturation) for each layer or multi layers of a neural network.
[0093] Embodiments for Coarse Programming and Precision Programming of Cells in a VMM
[0094]
[0095] A coarse programming method (to get the cell much closer to the target, for example 1.2×-100× the target) is then performed on the selected cells (step 1305), followed by a precision programming method on the selected cells (step 1306) to program the precise value desired for each selected cell.
[0096]
[0097]
[0098] Examples of cell values, desired current values, and coarse target current values are depicted in Tables 9 and 10 for the simple example of N=8 and M=4:
TABLE-US-00006 TABLE NO. 9 Example of N Desired Current Values for N = 8 Value Stored in Desired Current Selected Cell Value (I.sub.D) 000 100 pA 001 200 pA 010 300 pA 011 400 pA 100 500 pA 101 600 pA 110 700 pA 111 800 pA
TABLE-US-00007 TABLE NO. 10 Example of M Target Current Values for M = 4 Associated Coarse Target Current Value (I.sub.CT) Cell Values 800 pA + I.sub.CTOFFSET1 000, 001 1600 pA + I.sub.CTOFFSET2 010, 011 2400 pA + I.sub.CTOFFSET3 100, 101 3200 pA + I.sub.CTOFFSET4 110, 111
[0099] The offset values I.sub.CTOFFSETx are used to prevent overshooting the desired current value during coarse tuning. Once the coarse target current value I.sub.CT is selected, the selected cell is programmed by applying the voltage v.sub.0 to the appropriate terminal of selected cell based on the cell architecture type of the selected cell (e.g., memory cells 210, 310, 410, or 510) (step 1402). If the selected cell is of type memory cell 310 in
[0100] Next, the selected cell is programmed by applying the voltage v.sub.i=v.sub.i-1+v.sub.increment, where i starts at 1 and increments each time this step is repeated, and where v.sub.increment is a small, fine voltage that will cause a degree of programming that is appropriate for the granularity of change desired (step 1403). Thus, the first time step 1403 is performed, i=1, and v.sub.1 will be v.sub.0+v.sub.increment. Then a verify operation occurs (step 1404), wherein a read operation is performed on the selected cell and the current drawn through the selected cell (I.sub.cell) is measured. If I.sub.cell is less than or equal to I.sub.CT (which here is a first threshold value), then search and execute method 1400 is complete and precision programming method 1306 can begin. If I.sub.cell is not less than or equal to coarse target current value I.sub.CT, then step 1403 is repeated, and i is incremented.
[0101] Thus, at the point when coarse programming method 1305 ends and precision programming method 1306 begins, the voltage v.sub.i will be the last voltage used to program the selected cell, and the selected cell will be storing a value associated with the coarse target current value I.sub.CT. The goal of precision programming method 1306 is to program the selected cell to the point where during a read operation it draws a current ID (plus or minus an acceptable amount of deviation, such as +/−50 pA or +/−30% or less), which is the desired current value that is associated with the value that is intended to be stored in the selected cell.
[0102]
[0103] Under a first approach, increasing voltages are applied in progression to the control gate to further program the selected memory cell. The starting point is v.sub.i, which is approximately around the last voltage (+ or − some delta voltage as desired or depending on target current) applied during coarse programming method 1305. An increment of v.sub.p1 is added to v.sub.i and the voltage v.sub.u+v.sub.p1 is then used to program the selected cell (indicated by the second pulse from the left in progression 1501). v.sub.p1 is an increment that is smaller than v.sub.increment (the voltage increment used during coarse programming method 1305). After each programming voltage is applied, a verify step (similar to step 1404) is performed, where a determination is made if I.sub.cell is less than or equal to I.sub.PT1 (which is the first precision target current value and here is a second threshold value), where I.sub.PT1=I.sub.D+I.sub.PTIOFFSET, where I.sub.PTIOFFSET is an offset valued added to prevent program overshoot. If it is not, then another increment v.sub.p1 is added to the previously-applied programming voltage, and the process is repeated. At the point where I.sub.cell is less than or equal to I.sub.PT1, then this portion of the programming sequence stops. Optionally, if I.sub.PT1 is equal to ID, or almost equal to I.sub.D with sufficient precision, then the selected memory cell has been successfully programmed.
[0104] If I.sub.PT1 is not close enough to I.sub.D, then further programming of a smaller granularity can occur. Here, progression 1502 is now used. The starting point for progression 1502 is approximately about the last voltage (+ or − some delta voltage as desired or depending on target current) used for programming under progression 1501. An increment of V.sub.p2 (which is smaller than v.sub.p1) is added to that voltage, and the combined voltage is applied to program the selected memory cell. After each programming voltage is applied, a verify step (similar to step 1404) is performed, where a determination is made if I.sub.cell is less than or equal to I.sub.PT2 (which is the second precision target current value and here is a third threshold value), where I.sub.PT2=I.sub.D+I.sub.PT2OFFSET, I.sub.PT2OFFSET is an offset value added to prevent program overshoot. Typically, IPT2OFFSET<IPT1OFFSET, since the programming steps become smaller and more precise with each round. If it is not, then another increment V.sub.p2 is added to the previously-applied programming voltage, and the process is repeated. At the point where I.sub.cell is less than or equal to I.sub.PT2, then this portion of the programming sequence stops. Here, it is assumed that I.sub.PT2 is equal to I.sub.D or close enough to I.sub.D that the programming can stop, since the target value has been achieved with sufficient precision. One of ordinary skill in the art can appreciate that additional progressions can be applied with smaller and smaller programming increments used. For example, in
[0105] A second approach is shown in progression 1503 in
[0106] Alternatively, the duration of each pulse can be the same for pulse progressions 1503 and 1603, and the system can rely on the number of pulses to perform additional programming.
[0107] Additional detail will now be provided for three additional embodiments of coarse programming method 1305.
[0108]
[0109] A new desired voltage, v.sub.i, is determined. The first time this step is performed, i=1, and v.sub.1 is determined based on the stored sub-threshold slope value and a current target and offset value using a sub-threshold equation, such as the following:
Vi=Vi−1+Vincrement,
Where Vincrement is proportional to slope of Vg
Vg=n*Vt*log[Ids/wa*Io]
Here, wa is w of a memory cell, Ids is the current target plus offset value.
[0110] If the stored sub-threshold slope value is relatively steep, then a relatively small current offset value can be used. If the stored sub-threshold slope value is relatively flat, then a relatively high current offset value can be used. Thus, determining the sub-threshold slope value will allow for a current offset value to be selected that is customized for the particular cell in question. This ultimately will make the programming process shorter. When this step is repeated, i is incremented, and v.sub.i=+v.sub.increment. The cell is then programmed using vi. V.sub.increment can be determined for example from a lookup table storing values of v.sub.increment. vs. desired current value (I.sub.D).
[0111] Next, a verify operation is performed, wherein a read operation is performed on the selected cell and the current drawn through the selected cell (I.sub.cell) is measured (step 1705). If I.sub.cell is less than or equal to coarse target current value I.sub.CT, where I.sub.CT is set=I.sub.D+I.sub.CTOFFSET, where I.sub.CTOFFSET is an offset value added to prevent program overshoot, then adaptive calibration method 1700 is complete and precision programming method 2206 can begin. If I.sub.cell is not less than or equal to coarse target current value I.sub.CT, then steps 1704-1705 are repeated, and i is incremented.
[0112]
[0113] In step 1803 an slope parameter is created which is used in predicting the next programming voltage. A first control gate read voltage, V.sub.CGR1, is applied to the selected cell, and the resulting cell current, IR.sub.1, is measured. Then a second control gate read voltage, V.sub.CGR2, is applied to the selected cell, and the resulting cell current, IR.sub.2, is measured. A slope is determined based on those measurements and stored, for example as according to the equation in sub threshold region (cell operating in sub threshold):
slope=(V.sub.CGR1−V.sub.CGR2)/(LOG(IR.sub.1)−LOG(IR.sub.2))
(step 1803). Examples of values for V.sub.CGR1 and V.sub.CGR2 are 1.5V and 1.3V, respectively.
[0114] Determining the slope information allows for a v.sub.increment value to be selected that is customized for the particular cell in question. This ultimately will make the programming process shorter.
[0115] When step 1804 is repeated, i is incremented, a new desired programming voltage, v.sub.i, is determined based on the stored slope value and a current target I.sub.CT and offset value using an equation such as the following:
v.sub.i=v.sub.i-1+V.sub.increment, [0116] where for i−1, v.sub.increment=alpha*slope*(LOG(IR.sub.1)−LOG(I.sub.CT)),
where I.sub.CT is the coarse target current and alpha is a pre-determined constant <1 (programming offset value) to prevent overshoot, e.g., 0.9.
[0117] The cell is then programmed using Vi. (step 1805) Here, v.sub.i can be applied to the source line terminal, control gate terminal, or erase gate terminal of the selected cell, depending on the programming scheme used.
[0118] Next, a verify operation occurs, wherein a read operation is performed on the selected cell and the current drawn through the selected cell (I.sub.cell) is measured (step 1806). If I.sub.cell is less than or equal to coarse target threshold value I.sub.CT, where coarse target threshold value I.sub.CT is set=+I.sub.CTOFFSET, where I.sub.CTOFFSET is an offset value added to prevent program overshoot, then the process proceeds to the step 1807. If not, then the process returns to step 1804 and i is incremented.
[0119] In step 1807, I.sub.cell is compared against a threshold value, I.sub.CT2, that is smaller than coarse target threshold value I.sub.CT. The purpose of this is to see if an overshoot has occurred. That is, although the goal is for I.sub.cell to be below coarse target threshold value I.sub.CT, if it falls too far below coarse target threshold value I.sub.CT, then an overshoot has occurred and the stored value may actually correspond to the wrong value. If I.sub.cell is not less than or equal to I.sub.CT2, then no overshoot has occurred, and adaptive calibration method 1800 has completed, as which point the process progresses to precision programming method 1306. If I.sub.cell is less than or equal to I.sub.CT2, then an overshoot has occurred. The selected cells are then erased (step 1808), and the programming process starts over at step 1802 with adjusted V.sub.increment such as having smaller value depending on how much it overshoots. Optionally, if step 1808 is performed more than a predetermined number of times, the selected cell can be deemed a bad cell that should not be used.
[0120] The precision program method 1306 consists of multiple verify and program cycles, in which the program voltage is incremented by a constant fine voltage with a fixed pulse width or in which the program voltage is fixed and the program pulse width is varied or constant for next pulses, as described above in relation to
[0121] Optionally, the step of determining if the current through the selected non-volatile memory cell during a read or verify operation is less than or equal to the first threshold current value, I.sub.CT, can be performed by applying a fixed bias to a terminal of the non-volatile memory cell, measuring and digitizing the current drawn by the selected non-volatile memory cell to generate digital output bits, and comparing the digital output bits to digital bits representing the first threshold current value, I.sub.CT.
[0122] Optionally, the step of determining if the current through the selected non-volatile memory cell during a read or verify operation is less than or equal to the first threshold current value, I.sub.CT, can be performed by applying an input to a terminal of the non-volatile memory cell, modulating the current drawn by the non-volatile memory cell with an input pulse to generate a modulated output, digitizing the modulated output to generate digital output bits, and comparing the digital output bits to digital bits representing the first threshold current, I.sub.CT.
[0123]
[0124] The cell is then programmed using v.sub.i. When i=1, the voltage v.sub.1 from step 1904 is used. When i>=2, the voltage v.sub.i=v.sub.i-1+V.sub.increment is used. V.sub.increment can be determined from a lookup table storing values of v.sub.increment. vs. target current value, I.sub.CT. Next, a verify operation occurs, wherein a read operation is performed on the selected cell and the current drawn through the selected cell (I.sub.cell) is measured (step 1906). If I.sub.cell is less than or equal to coarse target current value I.sub.CT, then absolute calibration method 1900 is complete and precision programming method 1306 can begin. If I.sub.cell is not less than or equal to coarse target current value I.sub.CT, then steps 1905-1906 are repeated, and i is incremented.
[0125] Alternatively, coarse and/or fine program methods may comprise of increments of the program voltage on one terminal (e.g., CG) and decreasing voltage on another terminal (e.g., EG or SL) for more precise control of charge coupling into the floating gate.
[0126] The coarse and precision programming methods described thus far will be precise enough for most systems. However, even these methods have a limit on their precision. Ultimate precision can be understood to be one electron precision.
[0127] Embodiments for Ultra-Precision Programming of Cells in a VMM
[0128]
[0129]
[0130] As is typically the case, there is a capacitive coupling between adjacent floating gates in the same row as shown in
[0131] In one embodiment, notably, when data memory cells are adjacent to one another, they are separated by a distance d.sub.2, as shown for data memory cells 2101 and 2102, and for data memory cells 2105 and 2106. However, when a data memory cell is adjacent to a tuning memory cell, they are separated by a distance d.sub.1, as shown for data memory cell 2102 and adjacent tuning memory cell 2103, and data memory cell 2104 and adjacent tuning memory cell 2105. When a tuning memory cell is adjacent to another tuning memory cell, they can be separated by a distance d.sub.1 or d.sub.2, as shown for tuning memory cells 2103 and 2104. By design, d.sub.2>d.sub.1. As a result, the capacitive coupling between cells that are apart by a distance d.sub.2 has a capacitance of C.sub.2, while the capacitive coupling between cells that are apart by a distance d.sub.1 has a capacitance of C.sub.1, where C.sub.1>C.sub.2. That is, the capacitance is greater between cells that are closer to one another. Further, the distance d.sub.1 may be designed to achieve a desired value of C.sub.1 to optimize the effect of the tuning memory cell on the data memory cell and thus the final programming precision.
[0132] If data memory cell 2102 is the selected cell and it is desired to program data memory cell 2102 to a certain target value, data memory cell 2102 can be programmed to a certain degree using the coarse and precision programming methods described previously with reference to
[0133] Specifically, tuning memory cell 2103 is programmed using coarse and precise programing methods. Due to capacitive coupling, as tuning memory cell 2103 is programmed, the charge in floating gate 2113 will cause the charge on floating gate 2112 to also increase, but by a lesser amount than the increase in charge of floating gate 2113. Through this mechanism, floating gate 2112 will increase by a finer increment than occurs in floating gate 2113 or which could be achieved by programming cell 2102 directly using coarse and precision programming methods 1305 and 1306. In this case, programming is performed on the tuning memory cell 2103 but a verify operation only needs to be performed on data memory cell 2102. Once the target value is achieved in data memory cell 2102, floating gate 2113 is maintained in its state of charge so that floating gate 2112 remains at the target value.
[0134]
[0135]
[0136]
[0137]
[0138]
[0139]
[0140] In the embodiments described above, when a selected data memory cell is read or verified, its associated tuning memory cell also must be read or verified, as the capacitive coupling must be active at the time the data memory cell is read or verified. One way to do this is to couple the data bitline and the tuning bitline to the sense amplifier during a read or verify operation.
[0141] The end result of ultra-precision programming is shown in
[0142] Another embodiment for ultra-precision programming uses vertical floating gate to floating gate coupling instead of horizontal floating gate to floating gate coupling such as describe above with reference to the tuning bitline. In this case, an adjacent row (the Tuning Row) is used for coupling purpose. This is particular suited for memory cells 210, 310, 510, and 710, in which case there is no physical barrier (erase gate) in the top FG and bottom FG.
[0143] Another embodiment for ultra-precision programming uses overlapping floating gate to floating gate coupling, such as where a tuning cell floating gate is overlapped with a target cell floating gate. The overlapping is such as when one floating gate is partially on top of another floating gate.
[0144] It should be noted that, as used herein, the terms “over” and “on” both inclusively include “directly on” (no intermediate materials, elements or space disposed therebetween) and “indirectly on” (intermediate materials, elements or space disposed therebetween). Likewise, the term “adjacent” includes “directly adjacent” (no intermediate materials, elements or space disposed therebetween) and “indirectly adjacent” (intermediate materials, elements or space disposed there between), “mounted to” includes “directly mounted to” (no intermediate materials, elements or space disposed there between) and “indirectly mounted to” (intermediate materials, elements or spaced disposed there between), and “electrically coupled” includes “directly electrically coupled to” (no intermediate materials or elements there between that electrically connect the elements together) and “indirectly electrically coupled to” (intermediate materials or elements there between that electrically connect the elements together). For example, forming an element “over a substrate” can include forming the element directly on the substrate with no intermediate materials/elements therebetween, as well as forming the element indirectly on the substrate with one or more intermediate materials/elements there between.