Non-volatile memory (NVM) arrays have a plurality of NVM cells, each programmable to a known charge level and erasable down to a minimum charge level. The charge levels are separated so that a sense amplifier can sense if the cell is programmed or not. Because charge keeps current from flowing in a cell, while an erased cell will pass current, the amount of charge in a cell is measured as inversely proportional to the strength of the current flowing through it.
In programming, a cell receives pulses of charge until its current is below a predefined programmed level, defined as the current produced by a program verify reference cell. But each cell responds to the programming differently and, as a result, each cell will have a somewhat different resultant programmed level, resulting in a distribution of current levels, shown in FIG. 1, to which reference is now made. In FIG. 1, a distribution 10 of the current levels of the programmed cells is lower than a distribution 12 of the current levels of the erased cells. In general, a read level 15 is set to be between a highest current level 14 for programmed cells but below a lowest current level 16 for erased cells.
As long as there is a sufficient margin between read level 15 and the two levels 14 and 16, there will be no errors in reading. But, if the margin is reduced, the chance of read errors increases. Typically, there are few read errors at the start of life of an array, but, as the array is used, the distributions change shape and location, causing a reduction in margin with a resultant lack of reliability and increase in read errors.