Patent ID: 7508715

Claim:
A method of programming non-volatile memory, comprising: applying one or more programming pulses to a set of non-volatile storage elements to program one or more storage elements of the set to a particular state; after applying each programming pulse, verifying programming of the one or more storage elements to an intermediate verify level corresponding to the particular state by applying a first voltage to the set of storage elements and comparing a bit line voltage of each of the one or more storage elements to a first reference potential; and after applying each programming pulse, verifying programming of the one or more storage elements to a final verify level corresponding to the particular state by applying a second voltage to the set of storage elements and comparing the bit line voltage of each of the one or more storage elements to a second reference potential, the second reference potential compensating for a decrease in the bit line voltage of each of the one or more storage elements resulting from the verifying programming to the intermediate verify level, the first voltage is different from the second voltage, the first reference potential is different from the second reference potential.