1. A method of providing nonvolatile storage with a programmable transistor, comprising: receiving a data value to be stored in the programmable transistor; and programming the programmable transistor to store the received data value, wherein programming comprises: exposing the programmable transistor to a predefined programming temperature while applying the selected voltage; and applying a selected voltage to the programmable transistor, wherein the selected voltage is selected to inject carriers into a gate oxide layer of the programmable transistor while the programmable transistor is exposed to the predefined programming temperature, wherein the carriers are maintained in the gate oxide layer of the programmable transistor in the absence of the selected voltage, thereby programming the programmable transistor with the received data value; performing a read operation from the programmable transistor, wherein the read operation comprises: applying one or more read voltages to the programmable transistor and a reference transistor; and comparing at least one operating characteristic of the programmable transistor and at least one operating characteristic of the reference transistor to determine if the programmable transistor is programmed; wherein the at least one operating characteristic is selected from: a lower drain-to-source current of the programmable transistor relative to a drain-to-source current of the reference transistor; and a higher subthreshold current of the programmable transistor relative to a subthreshold current of the reference transistor.