"不揮発性記憶装置を操作する方法であって、可逆的抵抗性スイッチングメモリ素子を有するメモリセルの抵抗を表す情報を判断するステップと、プログラミング動作が完了しているかどうかを前記情報に基づいて判断するステップと、前記プログラミング動作がまだ完了していない場合に、前記情報と、前記可逆的抵抗性スイッチングメモリ素子を有する前記メモリセルの性質に基づく所定アルゴリズムとに基づいて、前記メモリセルに適用する1つ以上のプログラミング条件を決定するステップと、前記プログラミング動作がまだ完了していない場合に、前記1つ以上のプログラミング条件を前記メモリセルに適用するステップと、抵抗を表す情報を前記判断するステップと、前記動作が完了しているかどうかを前記判断するステップと、1つ以上のプログラミング条件を前記決定するステップと、前記1つ以上のプログラミング条件を前記適用するステップとを、前記プログラミング動作が完了したと判断されるまで繰り返すステップと、を含む方法。抵抗を表す前記情報に基づいて前記メモリセルに適用する1つ以上のプログラミング条件を前記決定するステップが、抵抗を表す前記情報が第1の値と第2の値との間である場合に第1のプログラミング信号に決定するステップと、抵抗を表す前記情報が前記第2の値と第3の値との間である場合に第2のプログラミング信号に決定するステップと、を含む請求項1に記載の方法。前記第2のプログラミング信号が、前記第1のプログラミング信号の電圧振幅とは異なる電圧振幅を有する、請求項2に記載の方法。前記第2のプログラミング信号が、前記第1のプログラミング信号のパルス幅とは異なるパルス幅を有する、請求項3に記載の方法。プログラミング信号を前記決定するステップが、前記抵抗を表す情報に基づいて電圧パルスの1つ以上の特徴を決定するステップを含む、請求項1~4のいずれか一項に記載の方法。前記所定アルゴリズムが、前記可逆的抵抗性スイッチングメモリ素子に使用される材料の種類に基づく、請求項1~5のいずれか一項に記載の方法。抵抗を表す前記情報に基づいて前記メモリセルに適用する1つ以上のプログラミング条件を前記決定するステップが、プログラミング信号を前記メモリセルに印加しながら、抵抗を表す前記情報に基づく前記メモリセルの電流制限を決定するステップを含む、請求項1~6のいずれか一項に記載の方法。前記所定アルゴリズムが、前記プログラミング動作時の電流電圧間の関係に基づく、請求項1~7のいずれか一項に記載の方法。第1の極性を有する信号を前記メモリセルに印加するステップを含む前記プログラミング動作を試行する回数の再試行制限に達したと判断するステップと、前記メモリセルに前記第1の極性とは反対の第2の極性を有する1つ以上のプログラミング電圧を印加するステップと、をさらに含む、請求項1~8のいずれか一項に記載の方法。個々のメモリセルが可逆的抵抗性スイッチングメモリ素子を含む複数の不揮発性メモリセルと、前記複数の不揮発性メモリセルと通信する1つ以上の管理回路とを備え、前記1つ以上の管理回路は、プログラミング動作の一環として、前記メモリセルのうちの第1のメモリセルの抵抗を表す情報を判断し、前記情報に基づいて、前記プログラミング動作が前記メモリセルについて完了したかどうかを判断し、前記プログラミング動作がまだ完了していない場合に、抵抗を表す前記情報と、前記可逆的抵抗性スイッチングメモリ素子を有する前記メモリセルの性質に基づく所定アルゴリズムとに基づいて、前記メモリセルに印加されるプログラミング信号を決定し、前記プログラミング動作がまだ完了していない場合には、前記プログラミング信号を前記メモリセルに印加し、前記メモリセルについて前記プログラミング動作が完了したと判断されるまで、抵抗を表す前記情報を判断し続け、前記プログラミング動作が完了したかどうかを判断し続け、前記プログラミング信号を決定し続け、前記プログラミング信号を印加し続ける、記憶システム。プログラミング信号を決定するステップの一環として、前記1つ以上の管理回路が、抵抗を表す前記情報に基づいて電圧パルスの1つ以上の特徴を決定する、請求項10に記載の装置。前記特徴が前記パルスの電圧振幅を含む、請求項11に記載の装置。前記特徴がパルス幅を含む、請求項11または12に記載の装置。前記1つ以上の管理回路が、プログラミング信号を前記メモリセルに印加している間に使用される、前記メモリセルの電流制限を決定し、前記電流制限が、抵抗を表す前記情報に基づく、請求項10~13のいずれか一項に記載の装置。前記所定アルゴリズムが、前記プログラミング動作時の電流電圧間の関係に基づく、請求項10から14のいずれか一項に記載の装置。本明細書では、形成、リセット、およびセットの動作のいずれも、プログラミング動作であるとみなしてよい。メモリセルのグループでのプログラミング動作の後、そのグループが狭い抵抗分布を有するのが望ましい。ただし、従来の技法の中には、狭い抵抗分布を達成しないものもある。例えば、抵抗を低減するプログラミング動作の結果、一部のメモリセルが必要以上に低い抵抗を有することがある。提案された従来のプログラミング技法によっては、プログラミング動作を完了するために、高い電流レベルを必要とすることがある。そのために、支持回路の電圧および電流要件が高まり、電力消費が増えることがある。提案された従来のいくつかの技法をでは、単一のメモリセルにおける1回の読み取りと次の読み取りとで、読み取り電流レベルが変化してしまう可能性が有る。例えば、メモリセルによっては、1回の読み取りと次の読み取りで、読み取り電流が2倍以上の変化を呈することがある。可逆的抵抗性スイッチング素子を伴うメモリセルを有する不揮発性記憶装置を操作するための方法および機器について、本明細書に記載されている。本明細書に開示された技法は、プログラミング動作後に可逆的抵抗性メモリセルの狭い抵抗分布を提供する。技法は、プログラミング動作の少なくとも一部について、プログラミング電圧の最大値を低減することができる。技法は、プログラミング動作の少なくとも一部について、プログラミング電流の最大値を低減することができる。読み取りの不安定性が低減される。耐久性能が向上する。本明細書に開示された技法は、メモリセルを形成、リセット、あるいはセットするときに用いられる。本明細書において、プログラミング動作という用語は、形成、リセット、あるいはセットを含むが、これに限定されなくてもよい。一部の実施形態では、可逆的抵抗性スイッチング素子を有するメモリセルに適用される1つ以上のプログラミング条件が、そのメモリセルの抵抗に基づいて決定される。1つ以上のプログラミング条件の決定は、メモリセルの性質に基づく所定アルゴリズムに基づいてもよい。1つ以上のプログラミング条件は、プログラミング電圧および電流制限を含んでもよい。例えば、プログラミング電圧の大きさは、抵抗に基づいてもよい。別例として、プログラミング電圧パルスの幅は、抵抗に基づいてもよい。一部の実施形態では、プログラミング時に使用される電流制限が、メモリセルの抵抗に基づいて決定される。プログラミングパルスの遷移速度など他のプログラミング条件が、メモリセルの抵抗に基づいてもよい。メモリセルおよびシステムメモリセルのプログラミングについて詳述する前に、メモリセルおよびシステムの例について説明する。図1Aは、第1の導体206と第2の導体208の間にステアリング素子204と直列に連結された可逆的抵抗性スイッチング素子202を含むメモリセル200の一実施形態の簡易斜視図である。一部の実施形態では、ステアリング素子204がダイオードである。一実施形態では、ダイオードステアリング素子204がp-i-nダイオードである。一実施形態では、p-i-nダイオードが、pドーピング領域、真性領域、およびnドーピング領域を含む。一実施形態では、ダイオードステアリング素子204がパンチスルーダイオードである。ステアリング素子として使用されるパンチスルーダイオードは、N/P-/N装置またはP/N-/P装置であってもよい。一実施形態では、ダイオードステアリング素子204がショットキーダイオードである。一実施形態では、ダイオードステアリング素子204がバックトゥバックショットキーダイオードである。一部の実施形態では、ダイオード204が、ポリシリコン、ゲルマニウム、あるいは別の半導体など、多結晶半導体材料から形成されてもよい。また、ダイオードステアリング素子204が、1つより多くの種類の半導体を備えてもよい。例えば、ダイオード204が、多結晶シリコンゲルマニウム合金、ポリゲルマニウムあるいはその他任意の適切な半導体の組み合わせから形成されてもよい。一部の実施形態では、ダイオードステアリング素子204の各領域242、244、246が、同じ材料から形成されるただし、ドーピングが異なる。ただし、各領域が同じ材料から形成されることは必須ではない。例えば、ヘテロ構造も可能である。ただし、ステアリング素子204は、ダイオードであることに限定されない。一実施形態では、ステアリング素子204がトランジスタである。例えば、電界効果トランジスタFETをステアリング素子204に使用することができる。後述する図1Eは、ステアリング素子204がFETであるメモリアレイの一部の概略図を表す。メモリセル200は、可逆的抵抗性スイッチング材料230、上側電極232、および下側電極234を含むメモリ素子202を有する。電極232は、可逆的抵抗性スイッチング材料230と導体208との間に位置付けられている。一実施形態では、電極232がTiNでできている。電極234は、可逆的抵抗性スイッチング材料230とステアリング素子204との間に位置付けられている。一実施形態では、電極234が窒化チタンでできており、障壁層として機能しうる。メモリセル200は、ステアリング素子204と他の回路要素との間での電気的接触をしやすくするために、メモリセル200の最下部に電極213を有する。一実施形態では、電極213がTiNから形成される。なお、ステアリング素子204およびメモリ素子202の相対的位置は逆転できる可能性がある。例えば、ステアリング素子204がメモリ素子202よりも上に位置することもありうる。可逆的抵抗性スイッチング素子202は、2つ以上の状態間で可逆的に切り替えられうる抵抗を有する可逆的抵抗性スイッチング材料230を含む。可逆的抵抗性スイッチング材料は、製作時点において、例えば、第1の物理信号を印加したときに低抵抗状態に切り替え可能である初期高抵抗状態であってもよい。可逆的抵抗性スイッチング素子202は、例えば、第1の量のエネルギー、電荷、熱、電圧、電流あるいは他の現象の印加を受けて状態を切り替えてもよい。第2の量のエネルギー、電荷、熱、電圧、電流または他の現象を印加することによって、可逆的抵抗性スイッチング材料が高抵抗状態に戻ってもよい。あるいは、可逆的抵抗性スイッチング素子は、製作時点において、適切なエネルギー、電荷、熱、電圧、電流、あるいは他の現象が印加されると、高抵抗状態に可逆的に切り替え可能である初期低抵抗状態であってもよい。メモリセルで使用された場合、ある抵抗状態が2進値の0を表し、別の抵抗状態が2進値の1を表してもよい。ただし、3つ以上のデータ/抵抗状態が使用されてもよい。多数の可逆的抵抗性スイッチング材料、および可逆的抵抗性スイッチング材料を用いたメモリセルの動作については、例えば、先に援用した米国特許出願公開第2006/0250836号に記載されている。一部の実施形態では、可逆的抵抗性スイッチング材料230が、金属酸化物から形成されてもよい。種々の金属酸化物を使用することができる。金属酸化物は、遷移金属酸化物であってもよい。金属酸化物の例は、NiO、Nb2O5、TiO2、HfO2、Al2O3、MgOx、CrO2、VO、BNおよびAlNを含むが、これらに限定されない。一実施形態では、メモリ素子電極232、234がTiNから形成される。可逆的抵抗性スイッチング材料を使用してメモリセルを製造することについて詳しくは、2007年6月29日に出願されたMemoryCellthatEmploysaSelectivelyDepositedReversibleResistanceSwitchingElementandMethodsofFormingtheSameと題される米国特許出願公開第2009/0001343号に記載されており、これは全体として参照により本明細書に援用される。導体206および208は、タングステン、何らかの適切な金属、高濃度にドープされた半導体材料、導電性のシリサイド、導電性のシリサイド-ゲルマニドaconductivesilicidegermanide、導電性のゲルマニドなどの、何らかの好適な導電性材料を含んでいてもよい。図1Aの実施形態では、導体206および208はレール形状であり、異なる方向例えば、互いに実質垂直な方向に伸びている。他の導体の形状および/または構造を用いることもできる。一部の実施形態では、バリア層、接着層、反射防止コーティング、および/または同種のもの不図示を、デバイス性能を改善するため、および/またはデバイス製造の支援をするために、導体206および208に用いることができる。図1Aでは、可逆的抵抗性スイッチング素子202がステアリング素子204の上方に位置付けられているが、代替実施形態では、可逆的抵抗性スイッチング素子202がステアリング素子204の下方に位置付けられていてもよいことが理解されよう。図1Bは、図1Aのメモリセル200の複数個から形成される第1のメモリレベル214の一部の簡易斜視図である。簡略化のために、可逆的抵抗性スイッチング素子202およびダイオードステアリング素子204は別々に示されていない。メモリアレイ214は、複数の第1導体206例えばビットラインおよび複数の第2導体208例えばワードラインを含むクロスポイントアレイである。複数の第1導体206と複数の第2導体208との間には図に示されるように複数のメモリセルが接続される。他のメモリアレイ構造が、マルチレベルのメモリとして使用されてもよい。図1Cは、第2のメモリレベル220の下に配置される第1のメモリレベル218を含むモノリシックな3次元アレイ216の一部の簡易斜視図である。図1Cの実施形態では、各メモリレベル218、220は、クロスポイントアレイ内に複数のメモリセル200を含んでいる。当然ながら、第1のメモリレベル218と第2のメモリレベル220との間に、追加の層例えば、中間誘電体が存在してもよいが、簡単にするために図1Cでは示されない。他のメモリアレイ構造が、メモリの追加レベルとして使用されてもよい。一部の実施形態では、メモリレベルは、HighDensityThreeDimensionalMemoryCellという米国特許第6,952,030号に記載されているように形成されてもよい。当該文献は、参照することによってその全体が本明細書に組み込まれる。例えば、第1のメモリレベルの上側導体は、図1Dに示すように、第1のメモリレベルの上方に位置している第2のメモリレベルの下側導体として使用されてもよい。モノリシックな3次元メモリアレイは、複数のメモリレベルが、中間基板を用いないでウェハなどの単一の基板上に形成されるアレイである。1つのメモリレベルを形成する層は、単数または複数の既存のレベルの層の上に、直接に堆積または成長される。これに対して、積層メモリは、LeedyによるThreedimensionalstructurememoryと題する米国特許第4,915,167号の場合のように、別々の基板上にメモリレベルを形成し、そのメモリレベルを互いに重ねて接着することによって構築されている。基板は、ボンディングの前に薄くされても、あるいはメモリレベルから取り除かれてもよいが、メモリレベルが個別の基板上に最初に形成されるので、このようなメモリは、本当のモノリシックな3次元メモリアレイではない。図1A-1Dは、開示された配置に関連して、円筒形状のメモリセルおよびレール形状の導体を示している。しかしながら、本明細書で開示された技術は、メモリセルについてのある特定の構造に限定されない。可逆的抵抗性スイッチング材料を含んでいるメモリセルを形成するために、他の構造を用いることもできる。例えば、以下の特許は、可逆的抵抗性スイッチング材料を使用するように構成することができるメモリセルの構造の例を提供している。米国特許6,952,043号、米国特許6,951,780号、米国特許6,034,882号、米国特許6,420,215号、米国特許6,525,953号、および米国特許7,081,377号。前述のとおり、ステアリング素子204は、ダイオードである必要はない。図1Eは、FETをステアリング素子204として使用するメモリアレイの一部分の概略図である。各メモリ素子200は、可逆的抵抗性スイッチング素子202と、記載のとおりFETであるステアリング素子204とを含む。各メモリセル200は、ビットラインとワードラインとの間にある。選択したメモリセル200は、選択したワードラインと選択したビットラインとの間にある。選択したメモリセル200のFETは、選択したゲートラインに接続されている。選択したゲートラインに印加される電圧は、可逆的抵抗性スイッチング素子202を貫流できる電流を制御する。例えば、ゲート電圧は、可逆的抵抗性スイッチング素子202を貫流する電流を所望のレベルに制限するように選択してもよい。図2は、ここで開示される技術を実行可能なメモリシステム300の一例を示すブロック図である。上記したように、メモリシステム300は、メモリセルが二次元または三次元のアレイとなったメモリアレイ302を含む。一実施形態では、メモリアレイ302は、モノリシックの三次元メモリアレイである。メモリアレイ302のアレイ端子線は、行として構成されたワード線の様々な層と、列として構成されたビット線の様々な層とを有する。しかしながら、他の方向でも実施可能である。メモリシステム300は、出力308がメモリアレイ302の各々のワード線に接続されている行制御回路320を含む。行制御回路320は、M個の行アドレス信号の集合と1つ以上の様々な制御信号を、システム制御論理回路330から受信している。行制御回路320は、典型的には、読み取りおよびプログラミング例えば、セットおよびリセット動作の双方のために、行デコーダ322、アレイ端子ドライバ324およびブロック選択回路326としての回路を含んでいる。メモリシステム300はまた、入力/出力306がメモリアレイ302の各々のビット線に接続される列制御回路310を含む。列制御回路310は、N個の列アドレス信号の集合と1つ以上の様々な制御信号を、システム制御論理回路330から受信している。列制御回路310は、典型的には、列デコーダ312、アレイ端子レシーバまたはドライバ314、ブロック選択回路316、に加え、増幅器318を含む読み取り/書き込み回路、およびI/Oマルチプレクサとしての回路を含んでいる。一実施形態では、列デコーダ312が可逆極性デコーダ回路である。一実施形態では、行デコーダ322が可逆極性デコーダ回路である。一実施形態では、可逆極性デコーダ回路が、あるモードではアクティブロー出力を、別のモードではアクティブハイ出力を有する。可逆極性デコーダ回路についてさらに詳しくは、2006年12月31日に出願された米国特許第7,542,370号に記載されている。当該文献は、参照することによってその全体が本明細書に組み込まれる。システム制御論理回路330は、データおよび命令をホストから受信し、データをホストに提供する。他の実施形態では、システム制御論理回路330は、データおよび命令を個別の制御回路から受信し、データをその制御回路に提供することができ、その制御回路はホストと通信している。システム制御論理回路330は、メモリシステム300の動作を制御するために、1つ以上の状態マシン、レジスタおよび他の制御ロジックを含んでもよい。通常、メモリアレイを組み込んだ集積回路では、アレイが多数の副アレイあるいはブロックにさらに分割される。複数のブロックは、16または32その他の数のブロックを含むベイにグループ化される。3次元メモリにおける各ブロックは、多くの層のメモリセルを有する。例えば、1つのブロックが8層を含む可能性がある。各層は、何百または何千ものビットラインおよびワードラインを含む。例えば、1層が約1,000のビットラインおよび約8,000のワードラインを有する。いくつかの実施態様では、各ビットラインと関連付けられたビットラインドライバが存在する。なお、所与のドライバが2つ以上のビットライン間で共用できる可能性もある。また、所与のビットラインが、1つのドライバとだけ関連付けられている必要はない。いくつかの実施態様では、ビットラインの一端に物理的に位置するドライバもあれば、ビットラインの他端に物理的に位置するドライバもある。よく利用されるものとして、副アレイは、一般的にデコーダ、ドライバ、センス増幅器および入力/出力回路によって連続された隣接するワードおよびビット線を有する隣接したメモリセルのグループである。これは、様々な理由のために行われる。例えば、大きなアレイでは、ワード線およびビット線を横切るときにそのワード線およびビット線の抵抗および容量によって生じる信号遅れすなわちRC遅れがとても大きいことがある。これらのRC遅れは、大きなアレイを小さな副アレイのグループに分割し、各々のワード線および/またはビット線の長さを短くすることによって低下させることができる。他の例では、メモリセルのグループへのアクセスに関連する電力は、メモリサイクルにおいて同時にアクセスできるメモリセルの数の上限を決定する。結果として、大きなメモリアレイは、しばしば小さな副アレイに分割され、同時にアクセスされるメモリセルの数が減らされる。ただし、記述を簡単化するために、アレイは、副アレイと同意語で用いられ、デコーダ、ドライバ、センス増幅器、および入力/出力回路によって通常は連続している隣接したワードおよびビット線を有するメモリセルの隣接したグループと称される。集積回路は、1つ以上のメモリアレイを含んでもよい。一実施形態では、図2に示されたコンポーネントの全てを、単独の集積回路に配置することができる。例えば、システム制御論理回路330と列制御回路310と行制御回路320は、基板の表面に形成し、メモリアレイ302は、基板の上そして、システム制御論理回路330と列制御回路310と行制御回路320との上に形成されたモノリシック3次元メモリアレイとすることができる。一部の場合、制御回路の一部分は、一部のメモリアレイと同じ層に形成することができる。図3は、メモリセルの状態を読み取るための一実施形態を表す回路を示す。可逆的抵抗性スイッチング素子202がどの状態にあるかを判断するために、電圧が印加されてもよく、その結果得られた電流が測定される。測定された電流が高い場合には、可逆的抵抗性スイッチング素子202が低抵抗状態にあることを示す。測定された電流が低い場合には、可逆的抵抗性スイッチング素子202が高抵抗状態にあることを示す。図3は、メモリセル450、452、454および456を含むメモリアレイの一部分を示しており、これらは図1A、図1B、図1C、および図1Dの実施形態に基づきうる。本実施例では、ステアリング素子204がダイオードである。多数のビットラインのうちの2本、および多数のワードラインのうちの2本が示されている。これらのビットラインのうちの1本を対象とする読み取り回路がトランジスタ458を介してビットラインに接続されている様子が示されており、トランジスタ458は、対応するビットラインを選択あるいは選択解除するために、列デコーダ312によって供給されたゲート電圧によって制御される。トランジスタ458は、ビットラインをデータバスに接続する。システム制御論理回路330の一部である書き込み回路460が、データバスに接続されている。トランジスタ462はデータバスに接続し、システム制御論理回路330の一部であるクランプ制御回路464によって制御されるクランプ装置として動作する。トランジスタ462は、コンパレータ466と基準電流供給IREFとにも接続されている。コンパレータ466の出力は、システム制御論理回路330、コントローラおよび/またはホストへのデータ出力端子とデータラッチ468とに接続されている。書き込み回路460もデータラッチ468に接続されている。可逆的抵抗性スイッチング素子の状態を読み取ろうとするときには、全てのワードラインが、まずVread例えば約1.5ボルトでバイアスされ、ビットラインは全て接地されている。その後、選択したワードラインが接地される。例示のため、ここでは、メモリセル450が読み取り用に選択されていると仮定する。1つ以上の選択したビットラインに、トランジスタ458をオンにすることによってデータバスおよびクランプ装置~1.5ボルトVtを受け取るトランジスタ462を経由してVreadが印加される。クランプ装置のゲートはVreadより高いが、ビットラインをVread付近に保つように制御される。電流は、選択したメモリセルにより、VSENSEノードからトランジスタ462経由で流される。VSENSEノードも、高抵抗状態電流と低抵抗状態電流との間にある基準電流IREFを受け取る。VSENSEノードの電圧は、セル電流と基準電流IREFとの間の電流の差に応じて変化する。コンパレータ466は、VSENSE電圧をVref-read電圧と比較することによってデータ出力信号を生成する。メモリセル電流がIREFよりも大きければ、メモリセルは低抵抗状態であり、VSENSEにおける電圧はVREFよりも低い。メモリセル電流がIREFよりも小さければ、メモリセルは高抵抗状態であり、VSENSEにおける電圧はVREFよりも高い。コンパレータ466からのデータ出力信号は、データラッチ468でラッチされる。一部の実施形態では、基準電流がメモリセルのアドレスに基づく。図4は、ステップの初期化を用いて不揮発性記憶装置をプログラムするプロセス500の一実施形態のフローチャートである。プログラミング動作は、形成、セットあるいはリセットである。プロセス500の記述には、説明しやすくするために、1つのメモリセルのプログラミングが記載されている。なお、1つより多くのメモリセルが一度にプログラムされてもよい。ステップ502で、プログラムされるメモリセルの抵抗を表す情報が判断される。一実施形態では、読み取り電圧がメモリセル全体に印加されたときに伝導される電流を判断することによってこの情報が判断される。一部の実施形態では、ステップ502で、メモリセルがメモリセルに適用される特定の読み取り電圧に対してどのような電流を伝導するかが判断される。例えば、ステップ502では、メモリセルの伝導電流が、いくつかの電流範囲のうちのどれに属するかが判断されうる。後のステップは、この電流レベルの判断に基づいて行われる。ただし、伝導電流はメモリセルの抵抗の関数であるという点に留意されたい。例えば図3を参照すると、電圧Vreadがメモリセル全体に印加されうるとともに、伝導する電流が基準電流例えばIrefと比較されうる。この比較に基づいて、メモリセルの抵抗がある特定の抵抗よりも高いか低いかが判断される。ステップ504で、抵抗を表す情報に基づいてプログラミングが完了したかどうかが判断される。完了していれば、プロセス500が終了する。例えば、プログラミング動作が形成動作であれば、メモリセルの抵抗は、形成のための目標抵抗と比較される。メモリセルの抵抗が目標抵抗未満であれば、形成プロセスが完了したとみなされる。プログラミング動作がリセット動作であれば、目標リセット抵抗と比較される。メモリセルの抵抗が目標リセット抵抗よりも大きければ、リセットプロセスが完了したとみなされうる。プログラミング動作がセット動作であれば、目標セット抵抗と比較される。メモリセルの抵抗が目標セット抵抗未満であれば、セットプロセスが完了したとみなされる。上記したように、抵抗を表す情報は、電流であってもよい。そのため、実際の比較は、抵抗ではなく電流レベルを使用して実行されてもよい。ステップ506で、プログラミング動作がまだ完了していない場合に、抵抗を表す情報と所定アルゴリズムとに基づいて1つ以上のプログラミング条件が決定される。所定アルゴリズムは、メモリセルの性質に基づいてもよい。様々な材料を有するメモリセルに対し、異なるアルゴリズムが使用される。例えば、金属酸化物スイッチング素子を有するメモリセルに対してあるアルゴリズムが使用され、炭素スイッチング素子を有するメモリセルに対して別のアルゴリズムが使用される。アルゴリズムは、メモリセルの抵抗または、印加された電圧によって得られる電流など、抵抗を表す何らかの情報の関数である。プログラミング条件は、プログラミング電圧と電流制限とを含むが、これらに限定されない。例えば、プログラミング電圧の振幅は、抵抗と所定アルゴリズムとに基づいて決定されてもよい。別例として、プログラミング電圧パルスの幅が、抵抗と所定アルゴリズムとに基づいて決定されてもよい。一部の実施形態では、プログラミング時にメモリセルが利用できる電流が限られている。電流制限は、メモリセルの抵抗と所定アルゴリズムとに基づいて決定されてもよい。なお、上記プログラミング条件の全てがメモリセルの抵抗と所定アルゴリズムとに基づく必要はない。例えば、これらのプログラミング条件のうちの1つ、2つ任意の組み合わせまたは全3つが、抵抗と所定アルゴリズムとに基づいてもよい。また、他のプログラミング条件も、メモリセルの抵抗と所定アルゴリズムとに基づいて決定されうる。例えば、遷移速度など、プログラミング信号の他のパラメータは、メモリセルの抵抗および所定アルゴリズムの関数である。遷移速度の一例は、電圧パルスの傾斜である。ステップ508で、ステップ506で決定された1つ以上のプログラミング条件がメモリセルに適用される。そのため、この1つ以上のプログラミング条件は、メモリセルの抵抗の関数である。例えば、プログラミング電圧の振幅および/またはパルス幅は、メモリセルの抵抗の関数である。同じく上記したように、プログラミング中にメモリセルに提供される電流は、抵抗に基づいて決定される値に限定される。プロセス500はその後ステップ502に戻り、メモリセルの抵抗を表す情報を改めて判断する。プロセス500は、プログラミングが完了するまで継続する。そのため、次の繰り返しでは、異なる1組の1つ以上のプログラミング条件が適用される。一部の状況下では、プロセス500の連続した繰り返しで同じプログラミング条件が適用される。例えば、メモリセルの抵抗が大きく変化しなかった場合には、同じプログラミング条件が再び適用される。なお、一部のメモリセルは、他のメモリセルより速くプログラムされる。そのため、一部のメモリセルは、他よりも速くプログラミングプロセスをたどる。換言すれば、一部のメモリセルでは、必要なプロセス500の繰り返しが少ない場合がある。図5A、図5B、および図5Cは、金属酸化物スイッチング素子230を有するメモリセル202の実施形態を示す。これらの実施例は、ある特定順序のプログラミング条件が金属酸化物を有する装置に使用される理由の説明を支援する目的で使用される。換言すれば、ある特定の所定アルゴリズムが使用される理由である。プログラミングの進行に伴って様々なプログラミング条件を使用する例えば異なる所定アルゴリズムを使用するという一般原則は、金属酸化物以外の材料を有するメモリセルにも適用される。図5Aは、メモリセル202の一実施形態で使用される材料の一例を示す。最上位の電極232および最下位の電極234は、各々TiNである。可逆的抵抗性スイッチング材料230は、HfO2である。そのため、本実施例では、スイッチング材料が金属酸化物である。ただし、異なる金属酸化物が使用されてもよい。図5Bは、メモリセル202の一実施形態で使用される材料の一例を示す。一例として、HfO2は厚さ約6~8nm、シリコン酸化物SiO2は厚さ1.5~2nmである。一部の実施形態では、SiO2層237が、プログラミングステップのうちの1つ以上において破壊される。その後のプログラミングステップでHfO2層230が形成またはセットされる。例えば、プログラミングステップによって、HfO2層で酸素空孔が形成される。最終的に、一続きの酸素空孔が、HfO2層230の最上部から最下部にかけて形成される。ただし、プログラミング電圧パルスの振幅が大きすぎると、HfO2層230自体に負荷がかかりすぎる場合がある。HfO2層230に対する過剰な負荷によって、メモリセル202が破損することがある。一部の実施形態では、セットまたは形成の進行に伴ってプログラミング電圧の振幅が低減され、金属酸化物層230に対する過剰な負荷を回避することができる。なお、最上位および最下位の電極が同じ材料である必要はない。図5Cは、最下位の電極234が高濃度にドープしたシリコンであり、かつ最上位の電極がTiNであるメモリセル202の一実施形態を示す。本実施形態では、HfO2層230と最上位の電極232との間にチタン酸化物238の任意領域が存在する。なお、本明細書に開示されたプログラミングのための技法は、金属酸化物スイッチング素子に制限されない。他の材料の場合、金属酸化物の場合よりも、様々なプログラミング条件が確立される。炭素ベースのスイッチング素子のプログラミング例については後述する。図6Aは、メモリセル例をセットする際の電流対電圧I-Vの関係の例を表すグラフである。これらの曲線例は、スイッチング素子が金属酸化物である一実施形態の場合のものである。これらI-Vの曲線は、特定のプログラミング条件が使用される理由の説明を支援する目的で使用される。スイッチング素子が異なる種類の材料であれば、I-Vの曲線は異なる形状を有する。そのため、様々な材料に対して様々なプログラミング条件が使用される。グラフは、I―Vの4本の曲線551~554を表す。各曲線は、メモリセル例に対するセットプロセスの様々な段階を表す。これらの曲線の少なくともいくつかの部分について、I―Vの曲線の傾斜が、メモリセルのコンダクタンスを概算するために使用されてもよい。例えば、本明細書には、低電圧時の曲線について、読み取り領域と称されるものが存在する。ただし、高電圧時に発生するいくつかの破壊が生ずる。一部の実施形態では、プログラミング中に、スイッチング材料が破壊領域付近あるいは破壊領域内で動作する。なお、破壊時には、電流が大幅に増加する。一例として、曲線551における低い方の電圧では、メモリセルのコンダクタンスが、I-Vの曲線の傾斜に基づいて概算される。電圧の一部は、他の回路要素例えば、ステアリング素子、ビットライン、ワードラインにまたがって表れるため、それらを考慮する必要がある。高電圧で破壊が起こる潜在的理由は、メモリセルの金属酸化物が高電圧で破壊されるからである。破壊の理由は他にもある。一部のメモリセルについては、金属酸化物の破壊を回避するために、プログラミング中は読み取り領域におけるプログラミング電圧を保つのが望ましい場合がある。その潜在的理由は、金属酸化物の破壊時の電圧がメモリセルに悪影響を及ぼすからである。I-Vの曲線のうちの1つである551は、メモリセルの抵抗が高い場合のセットプロセス開始時のI―Vの関係を表す。別の曲線552は、少なくとも1つのプログラミング信号が印加された後のI―Vの関係を表す。したがって、メモリセルの抵抗は低い。第3および第4の曲線553、554は、メモリセルの抵抗がさらに低い場合である、セットプロセスの後期段階を表す。曲線551~554から分かるように、セット動作の進行に伴って、読み取り領域の傾斜が大きくなる。さらに、メモリセルの抵抗が減少するにつれて、破壊領域が低いプログラミング電圧で発生する。一部の実施形態では、メモリセルの抵抗が減るにつれて、セット中に使用されるプログラミング電圧の振幅が小さくなる。4つの電圧例V1~V4が示されている。前述の説明のとおり、これは、一部の装置のメモリセルの破壊領域に入るのを防ぐのに役立つ。プログラミングの一部の実施形態では、プログラミング中にメモリセルに提供される電流が限られている。本明細書では、この電流制限がIcompと称される。これが一部の装置にとって有益である理由を説明するために、改めて図6Aを参照する。電圧V1がメモリセルに印加されると、この電圧は、低い抵抗を有する曲線へとメモリセルの抵抗を変化させる傾向がある。例えば、メモリセルが、自らを曲線551の読み取り領域に置く抵抗を有すると仮定する。電圧V1が印加されると、この電圧は、メモリセルの抵抗を552または553などの曲線の方へと変化させる可能性がある。ただし、曲線552よりも曲線553の方が低い電圧で破壊電圧に達するという点に留意されたい。そのため、V1を印加した結果、メモリセルの抵抗が下がりすぎると、電圧破壊が発生する可能性がある。ただし、電流をIcomp1に制限することが、メモリセルの金属酸化物が電圧破壊を起こすのを防ぐのに役立つ場合がある。換言すれば、メモリセルの抵抗は、曲線552へと変化するかもしれないが、曲線553へと変化するのは防げる可能性がある。4つの補償電流例Icomp1~Icomp4が示されている。一実施形態において、Icomp1はV1が使用される場合に使用され、Icomp2はV2の場合に使用されるという具合である。一部の実施形態では、プログラミング信号が、大きさと幅とを有するパルスである。少なくともいくつかのメモリセル200については、電圧の振幅とパルス幅との間に関係が存在する。例えば、狭いパルス幅が使用される場合には、メモリセルの抵抗の変化を同じにするために、振幅の大きな電圧が使用される。図12Aは、一実施形態における、パルス幅に対する電圧振幅の関係を示すグラフである。曲線1202は、ほぼ同じプログラミング効果例えば、メモリセルの抵抗の変化を達成する地点を表す。例えば、tというパルス幅の場合には、電圧Vaが所与のプログラミング効果を達成する。10tを有するパルスの場合には、電圧Vbが使用される。100tを有するパルスの場合には、電圧Vcが使用される。したがって、長いパルス幅に対しては、低いプログラミング電圧が使用される。一部の実施形態については、その関係が、約0.25V/decadeである。ただし、様々な材料が様々な関係を呈す。図12Bは、プログラミング電圧とパルス幅との間の関係を別の方法で示している。図12Bでは、各曲線が1つのプログラミング電圧振幅を表す。例えば、曲線1230は図12AのVcに、曲線1220は図12AのVbに、曲線1210は図12AのVaに対応する。明示のとおり、電圧振幅を適切に選択することにより、異なるパルス幅を使用して同じプログラミング効果が達成される。メモリセルの抵抗とアルゴリズムとに基づいたプログラミングの利益を説明する一つの方法は、メモリセルに送られる電力レベルの一貫性が、他のプログラミングと比較して高いということである。例えば、電流レベルが増加するにつれて、低減された電圧レベルおよび/または短いパルス幅が、プログラミングパルス間でより一定の電力レベルを提供する。前述の説明は、メモリセルの種々の性質が、プログラミング動作の進行に伴って用いられるべきプログラミング条件に影響することを指摘している。このように、メモリセルの性質は、プログラミング時に使用される所定アルゴリズムが有するべき特性に影響する。図6Bは、メモリセルに対する1つ以上のプログラミング条件を、メモリセルの抵抗および所定アルゴリズムとに基づいて決定するプロセス600の一実施形態のフローチャートである。プロセス600では、プログラミング動作が完了したかどうかも判断される。したがって、プロセス600は、図4のステップ504~506の一実施形態である。一実施形態では、メモリセルを形成するときにプロセス600が使用される。一実施形態では、メモリセルをセットするときにプロセス600が使用される。プロセス600は、金属酸化物スイッチング素子、炭素スイッチング素子、または別のタイプのスイッチング素子を対象に用いられてもよい。図6AのI―Vの曲線例が、プロセス600の説明を支援する目的で使用される。ただし、プロセス600は、様々なタイプのI―Vの曲線を有する装置に適用可能であることに留意されたい。プロセス600で、抵抗を判断するために、メモリセルの伝導電流が使用される。上記したように、伝導電流は、メモリセルの抵抗の関数である。例えば、図3を参照すると、電圧Vreadを、読み取り動作時にメモリセル全体に印加することができる。この電圧の一部を、ステアリング素子と、選択したワードラインおよびビットラインとにわたって加えることができる。プロセス600で、メモリセルの伝導電流Ireadが、4つの異なる基準電流と比較される。一実施形態では、4つの異なる読み取り動作が実行され、その度に、メモリセル伝導電流が異なる基準電流I1~I4と比較される。図3の回路は、読み取り動作ごとに異なる基準電流でテストする目的で使用される。一実施形態では、1回の読み取り動作が実行され、伝導電流が4つの異なる基準電流と比較される。図3の回路は、同じ読み取り動作時に4つの異なる基準電流でテストするように改変されてもよい。一般に、プロセス600には、プログラミングパルスを印加した後場合によってはプログラミングが始まる前のメモリセル伝導電流が基準電流と比較される流れが記載されている。プロセス600における第1のテストは、メモリセルの伝導電流が非常に低いかどうか、すなわち高抵抗であるかどうかを判断するためのテストに相当する。一般に、プロセス600は、メモリセルの伝導電流Ireadを最高4つの異なる基準レベルと比較するステップ602、606、610、614を参照。様々な数の基準電流レベルが使用できる。プロセス600は、メモリセルがプログラミングされうる順序で記載されている。プロセス600は、プログラミング動作がメモリセルの抵抗を下げる目的で使用される場合に実施される。したがって、第1のテストステップ602は、電流が比較的低い場合、すなわち抵抗が比較的高い場合のステップである。以降のステップへと進むにつれて、電流が高くなる抵抗が低くなる。なお、テストステップ602、606、610、および614が実行される順序は、任意であってよい。プロセス600は、4つの異なるプログラミング電圧振幅V1~V4を対象としている。各プログラミング電圧は、伝導基準電流I1~I4のうちの1つに相当する。一実施形態では、メモリセルの抵抗が次のレベルに下げられると、プログラミング電圧の振幅が小さくなる。ただし、プログラミング電圧V1~V4は、互いにどのような関係も有すことができる。プロセス600は、4つの異なるプログラミング電圧パルス幅である幅1~幅4を対象としている。これらも、伝導電流I1~I4のうちの1つに相当する。一実施形態では、メモリセルの抵抗が下げられるにつれて、プログラミング電圧のパルス幅が広くなる。ただし、それぞれの連続パルス幅が逆に狭くなることもある。一実施形態では、各パルスが同じ幅を有する。パルス幅は、互いにどのような関係も有する。プロセス600は、4つの異なるプログラミング電流制限Icomp1~Icomp4を対象としている。これらも、伝導基準電流I1~I4のうちの1つに相当する。一実施形態では、メモリセルの抵抗が下げられるにつれて、プログラミング電流制限が大きくなる。ただし、それぞれの連続電流制限は逆に小さくもなる。一実施形態では、各電流制限が同じである。プログラミング電流制限は、メモリセルの抵抗とどのような関係も有する。電圧振幅、パルス幅、およびプログラミング電流制限の順序は、所定アルゴリズムであるとみなされうる。プログラミング条件を表す種々の値は、制御ロジック内のテーブルまたはメモリ装置上の不揮発性記憶装置素子に記憶されうる。アルゴリズムは、メモリ装置上にある1組のセルのグループに作用することによって選択される。その組内の各グループに、テスト制御ハードウェアによって異なるアルゴリズムが与えられ、テスト制御ハードウェアによってアルゴリズムが選択され、チップ上の不揮発性メモリビットに符号化される。ステップ602で、伝導電流Ireadが第1の基準電流I1よりも大きいかどうかが判断される。上記したように、I1は、比較的高い抵抗を基準としてテストするために設計されているかなり低い基準電流である。IreadがI1より小さい場合には、1つ以上のプログラミング条件を確立するためにステップ604が実行される。換言すれば、メモリセルの抵抗がテストの基準となっている比較的高い抵抗よりも高い場合には、ステップ604が実行される。ステップ604で、プログラム信号が電圧振幅V1に設定されてもよい。一実施形態では、V1が、プロセス600で使用される最も高い振幅のプログラム電圧であろう。パルス幅はW1に設定される。一実施形態では、W1が、プロセス600で使用される最も狭い幅であろう。電流制限は、Icomp1に設定される。一実施形態では、電流制限が、プロセス600で使用される最小の電流制限であろう。ステップ604が実行されると、プロセス600が完了する。その後、1つ以上のプログラミング条件を適用するために、図4のステップ508が実行される。伝導電流Ireadが第1の基準電流I1未満でない場合には、伝導電流Ireadが第2の基準電流I2と比較される。第2の基準電流I2は、低い抵抗がテストされるように、第1のI1より大きくてもよい。伝導電流IreadがI2未満である場合には、ステップ608で1つ以上のプログラミング条件が確立される。プログラム信号は、電圧振幅V2に設定される。一実施形態では、V2がV1未満である。パルス幅はW2に設定される。一実施形態では、W2がW1よりも狭い。なお、プロセス実行中は、電圧の振幅と幅との両方が変化する。あるいは、少なくともいくつかのステップにわたって一方が変化し、他方が一定ということもある。例えば、抵抗が下がるにつれて、メモリセルが必要とする電圧が小さくなり、抵抗をさらに低減する。抵抗が下がっても動作電圧が一定に保たれる場合には、低い実効電圧を提供するために、狭いパルス幅が使用されることがあり、この様子が図12Aに示されている。電流制限はIcomp2に設定される。Icomp2は、Icomp1より大きくてもよい。その後プロセス600が完了する。次に、プログラミング信号を印加するために、図4のステップ508が実行される。伝導電流Ireadが第2の基準電流I2未満でない場合には、伝導電流Ireadが第3の基準電流I3と比較される。伝導電流IreadがI3未満である場合には、ステップ612で1つ以上のプログラミング条件が確立される。プログラム信号は、電圧振幅V3に設定される。一実施形態では、V3がV2未満である。パルス幅はW3に設定される。一実施形態では、W3がW2よりも狭い。電流制限は、Icomp3に設定される。Icomp3は、Icomp2より大きくてもよい。その後プロセス600が完了する。次に、プログラミング信号を印加するために、図4のステップ508が実行される。伝導電流Ireadが第3の基準電流I3未満でない場合には、伝導電流Ireadが第4の基準電流I4と比較される。伝導電流IreadがI4未満である場合には、ステップ616で1つ以上のプログラミング条件が確立される。プログラム信号は、電圧振幅V4に設定される。一実施形態では、V4がV3未満である。パルス幅はW4に設定される。一実施形態では、W4がW3よりも狭い。電流制限は、Icomp4に設定される。Icomp4は、Icomp3より大きくてもよい。その後プロセス600が完了する。次に、プログラミング信号を印加するために、図4のステップ508が実行される。伝導電流Ireadが第4の基準電流I4未満でない場合には、これ以上のプログラミングが不要であることを示す。換言すれば、メモリセルの抵抗が目標レベルに低減されたということである。したがって、この状態は、図4のステップ504の一実施形態である。図7Aは、メモリセル例をリセットする際の電流対電圧I―Vの関係の例を表すグラフである。この例は、スイッチング素子が金属酸化物である一実施形態に相当する。なお、様々なタイプのメモリセルが異なるI―Vの関係を有する。例えば、スイッチング素子が炭素であれば、I―Vの曲線は図7Aの例とは異なる可能性がある。また、様々なタイプの金属酸化物が異なる特徴を呈するという点にも留意されたい。また、ステアリング素子など、メモリセルの他の素子も、曲線の形状に影響する。また、いくつかのメモリセルが、I―Vの曲線の形状に影響するシリコン酸化物の領域を有するという点にも留意されたい。グラフは、I―Vの4本の曲線751~754を示す。各曲線は、メモリセル例のリセットプロセスの様々な段階を表す。これらの曲線の少なくともいくつかの部分について、I―Vの曲線の傾斜が、メモリセルのコンダクタンスを概算するために使用されてもよい。ただし、高電圧時では、いくつかの破壊を示す部分が存在する。例えば、曲線751の低い方の電圧では、メモリセルのコンダクタンスが、I―Vの曲線の傾斜に基づいて概算される。電圧の一部は、他の回路要素例えば、ステアリング素子、ビットライン、ワードラインにまたがって表れるため、この点を考慮する必要がある。高電圧で破壊が起こる潜在的理由は、メモリセルの金属酸化物が高電圧で破壊されるからである。一部のメモリセルについては、金属酸化物の完全な破壊を回避するために、プログラミング中は完全hard破壊領域未満のプログラミング電圧を保つのが望ましい場合がある。その理由は、金属酸化物の破壊時の電圧が悪影響を及ぼすからである。曲線751は、リセットプロセス開始時のI―Vの関係を表す。このとき、メモリセルの抵抗は、読み取り領域における比較的険しい傾斜が示すように低い。別の曲線752は、少なくとも1つのプログラミング信号が印加された後のI―Vの関係を表しており、メモリセルの抵抗は、読み取り領域におけるわずかに緩やかな傾斜が示すように曲線751よりも高い。第3および第4の曲線753、754は、メモリセルの抵抗がさらに高い場合のリセットプロセスの後期段階を表す。曲線751~754から分かるように、リセット動作の進行に伴って、読み取り領域の傾斜が小さくなる。さらに、メモリセルの抵抗が増えるにつれて、高いプログラミング電圧で破壊領域が発生する。一部の実施形態では、メモリセルの抵抗が増えるにつれて、リセット中に使用されるプログラミング電圧の振幅が増す。これが、破壊領域への侵入防止に役立つ。また、Icompは、メモリセルが抵抗を急激に低減しすぎるのを防ぐために調整されるという点にも留意されたい。これも、破壊領域への侵入防止に役立つ。例えば、Icompは、リセットプロセス実行中に低減されてもよい。図7Bは、メモリセルの抵抗に基づいてメモリセルのプログラミング信号を決定するプロセス640の一実施形態のフローチャートである。プロセス640は、メモリセルの抵抗を増やすプログラミング動作の際に実施される。一実施形態では、メモリセルをリセットするときにプロセス640が実施される。ただし、プロセス640はリセットに限定されない。プロセス640では、プログラミング動作が完了したかどうかも判断される。したがって、プロセス640は、図4のステップ504~506の一実施形態である。一般に、プロセス640には、プログラミングパルスを印加した後場合によっては、プログラミングが始まる前のメモリセル伝導電流が基準電流と比較される流れが記載されている。第1のテストは、メモリセルの伝導電流が非常に高いかどうか、すなわち低抵抗であるかどうかを判断するためのテストに相当する。一般に、プロセス640は、メモリセルの伝導電流Ireadを最高4つの異なる基準レベルI1~I4と比較する。なお、これらはプロセス600と同じ基準電流ではない。プロセス640は、メモリセルが典型的にプログラミングされる順序で記載されている。プロセス640は、プログラミング動作がメモリセルの抵抗を増やす目的で使用される場合に実施される。したがって、第1のテストステップ642は、電流が比較的高い、すなわち抵抗が比較的低い場合のステップである。以降のステップへと進むにつれて、電流が低くなる抵抗が高くなる。なお、テストステップ642、646、650、および654が実行される順序は、任意であってよい。なお、プロセス640における基準電流は、プロセス600と同じ基準電流ではない。プロセス640は、4つの異なるプログラミング電圧振幅V1~V4を対象としている。なお、これらはプロセス600と同じ電圧ではない。各プログラミング電圧は、プロセス640で使用される伝導電流I1~I4のうちの1つに相当する。一実施形態では、リセット動作時にメモリセルの抵抗が次のレベルに増やされると、プログラミング電圧の振幅が大きくなる。ただし、プログラミング電圧V1~V4は、互いにどのような関係も有する。プロセス640は、4つの異なるプログラミング電圧パルス幅W1~W4を対象としている。これらも、伝導電流I1~I4のうちの1つに相当する。なお、W1~W4は、プロセス600で使用される幅と同じでない。一実施形態では、メモリセルの抵抗が増やされるにつれて、プログラミング電圧のパルス幅が広くなる。ただし、それぞれの連続パルス幅が逆に狭くもなることができる。一実施形態では、各パルスが同じ幅を有する。パルス幅は、互いにどのような関係も有すことができる。プロセス640は、4つの異なる電流制限Icomp1~Icomp4を対象としている。これらも、伝導電流I1~I4のうちの1つに相当する。なお、これらはプロセス600で使用されるものと同じ電流制限でない。一実施形態では、メモリセルの抵抗が増やされるにつれて、電流制限が低くなる。ただし、それぞれの連続電流制限が逆に大きくもなりうる。一実施形態では、各電流制限が同じである。電流制限は、メモリセルの抵抗とどのような関係も有しうる。ステップ642で、伝導電流Ireadが第1の基準電流I1よりも大きいかどうかが判断される。この第1の基準電流は、比較的低い抵抗を基準としてテストするために、比較的高い電流でありうる。IreadがI1より大きい場合には、1つ以上のプログラミング条件を確立するためにステップ644が実行される。換言すれば、メモリセルの抵抗がテストの基準となっている比較的低い抵抗よりも低い場合には、ステップ644が実行される。ステップ644で、プログラム信号が電圧振幅V1に設定されうる。一実施形態では、V1が、プロセス600で使用される最低の振幅のプログラム電圧であろう。パルス幅はW1に設定されうる。一実施形態では、W1が、プロセス640で使用される最短の幅であろう。電流制限は、Icomp1に設定されうる。一実施形態では、電流制限が、プロセス640で使用される最大の電流制限であろう。ステップ644が実行されると、プロセス640が完了する。その後、1つ以上のプログラミング条件を適用するために、図4のステップ508が実行されうる。伝導電流Ireadが第1の基準電流I1よりも大きくない場合には、伝導電流Ireadが第2の基準電流I2と比較される。第2の基準電流I2は、高い抵抗がテストされるように、第1のI1未満である。伝導電流IreadがI2よりも大きい場合には、ステップ648で1つ以上のプログラミング条件が確立される。プログラム信号は、電圧振幅V2に設定されうる。一実施形態では、V2がV1よりも大きい。パルス幅はW2に設定される。一実施形態では、W2がW1よりも広い。電流制限は、Icomp2に設定される。Icomp2は、Icomp1未満である。その後プロセス640が完了する。次に、プログラミング信号を印加するために、図4のステップ508が実行される。伝導電流Ireadが第2の基準電流I2よりも大きくない場合には、伝導電流Ireadが第3の基準電流I3と比較される。伝導電流IreadがI3未満である場合には、ステップ652で1つ以上のプログラミング条件が確立される。プログラム信号は、電圧振幅V3に設定される。一実施形態では、V3がV2よりも大きい。パルス幅はW3に設定される。一実施形態では、W3がW2よりも広い。電流制限は、Icomp3に設定される。Icomp3は、Icomp2未満である。その後プロセス640が完了する。次に、プログラミング信号を印加するために、図4のステップ508が実行される。伝導電流Ireadが第3の基準電流I3より大きくない場合には、伝導電流Ireadが第4の基準電流I4と比較される。伝導電流IreadがI4よりも大きい場合には、ステップ656で1つ以上のプログラミング条件が確立される。プログラム信号は、電圧振幅V4に設定される。一実施形態では、V4がV3よりも大きい。パルス幅はW4に設定される。一実施形態では、W4がW3よりも広い。電流制限は、Icomp4に設定される。Icomp4は、Icomp3未満である。その後プロセス640が完了する。次に、プログラミング信号を印加するために、図4のステップ508が実行される。伝導電流Ireadが第4の基準電流I4より大きくない場合には、これ以上のプログラミングが不要であることを示す。上記したように、I4は、比較的高い抵抗を基準としてテストするために、比較的低い電流である。そのため、IreadがI4より大きくない場合には、メモリセルの抵抗が目標レベルに増やされたということである。したがって、この状態は、図4のステップ504の一実施形態である。なお、メモリセル材料が異なれば、これら1つ以上のプログラミング条件が異なる。換言すれば、様々な材料に対して異なる所定アルゴリズムが使用できる可能性がある。例えば、炭素以外の金属酸化物に対して、様々なプログラミング条件が使用される。表1には、金属酸化物スイッチング素子を有するメモリセルに対して使用されるプログラミング条件が記載されている。一実施形態では、表1がリセットに該当する。抵抗が増加する順序は、所定アルゴリズムとみなされる。表2には、炭素スイッチング素子を有するメモリセルに対して使用されるプログラミング条件が記載されている。一実施形態では、表2がリセットに該当する。抵抗が増加する順序は、所定アルゴリズムとみなされる。図8は、可逆的抵抗性スイッチング素子202を有するメモリセル200のメモリアレイの動作のプロセス800の一実施形態を表す。プロセス800では、双極スイッチングが使用される。これは、セットのプログラミング電圧の極性がリセットの逆であることを意味する。なお、本明細書に記載されているプログラミング技法は、双極スイッチングに限定されない。一般に、プロセス800はメモリセルの初回形成について記載しており、その後リセットおよびセットのサイクルが続く。プロセス800では、形成は、2段階のプロセスである。2段階のプロセスでは、メモリセルの抵抗を部分的に減らすために第1の極性の1つ以上のプログラミング電圧が使用される。その後、メモリセルの抵抗をさらに低減するために反対の極性の1つ以上のプログラミング電圧が使用され、形成プロセスを完了する。なお、他の形成プロセスが使用できる可能性がある。例えば、単極の1つ以上のプログラミング電圧が、形成プロセス全体を完了する目的で使用できる可能性がある。プログラミング中のメモリセル200は、ステアリング素子204を有してもよい。ステアリング素子204は、ダイオード、p-i-nダイオード、パンチスルーダイオード、ショットキーダイオード、バックトゥバックショットキーダイオード、あるいはFETでありうるが、それらに限定されない。プロセス800は、メモリチップ内の組み込み回路によって実行されてよく、外部コントローラすなわち製造テストハードウェアによって制御されても、あるいは組み込み回路と外部コントローラとによって共同で制御されてもよい。プロセス800は、メモリセル200が高抵抗状態から低抵抗状態へと最初に変更されるときに開始される。例えば、ホスト装置がメモリ装置内の制御ロジックにメモリアドレスと形成動作命令とを提供し、それにより、選択したセルのグループに対するプログラミング動作を開始する。ステップ802で、メモリ素子202を部分形成するために、1つ以上のプログラム電圧がメモリ素子202に印加される。メモリ素子202の抵抗を目標抵抗までさらに下げることによって形成を完了するために、反対の極性を有する1つ以上の電圧が印加されることから、部分形成するという用語が使用される。1つ以上の電圧の第1の組を印加することは、ソフト形成と称されることもある。いくつかの実施例に示すように、メモリ素子202は、ステアリング素子として使用されるダイオード204と直列である。一部の実施形態では、1つ以上の電圧の第1の組は、ダイオード204を順バイアスする。一部の実施形態では、第1の電圧を印加するときに、メモリ素子202を流れる電流が制限される。ステップ804で、メモリセルの抵抗を目標抵抗へとさらに下げるために、1つ以上の電圧の第2の組がメモリ素子202に印加される。ステップ804により、メモリセルの形成が完了する。1つ以上の電圧の第2の組は、1つ以上の電圧の第1の組とは反対の極性を有する。例えば、1つ以上の電圧の第1の組がダイオード204を順バイアスする場合、1つ以上の電圧の第2の組は、ダイオード204を逆バイアスする。なお、1つ以上の電圧の第1の組がダイオード204を順バイアスし、1つ以上の電圧の第2の組がダイオード204を逆バイアスすることは、絶対的な要件でない。一部の実施形態では、1つ以上の電圧の第2の組を印加するときに、メモリ素子202を流れる電流が制限される。ステップ804の後、メモリセル200の初回形成が完了する。なお、この時点ではメモリセルの抵抗が低いので、この時点でメモリセルがセットされているとみなされてもよい。破線の矢印が示すように、ステップ806が実行される前に相当の時間が経過することがある。ステップ806で、メモリセルがリセットされるべきであると判断される。この判断は、新しいデータをメモリセル200に記憶するためのリクエストに対して行われる。ステップ808で、メモリ素子202をリセットするために、1組の1つ以上の電圧がメモリ素子202に印加される。この組は、ステップ802でメモリ素子202を部分形成する目的で使用される第1の組の1つ以上の電圧と同じ極性を有してもよい。一部の実施形態では、この組の1つ以上の電圧が、ダイオード204を順バイアスする。一部の実施形態では、この組の1つ以上の電圧を印加するときに、メモリ素子202を流れる電流が制限される。なお、メモリ素子202をリセットすると、メモリ素子202を形成した後の抵抗と比較してメモリ素子202の抵抗が増えることがある。ステップ808の後、破線の矢印が示すように、ステップ810が実行される前に相当の時間が経過することがある。ステップ810で、メモリセルがセットされるべきであると判断される。この判断は、新しいデータをメモリセル200に記憶するためのリクエストに対して行われる。ステップ812で、メモリセルは、1組の1つ以上の電圧をメモリ素子202に印加することによってセットされる。この組の電圧は、リセットで使用される電圧とは反対の極性を有する。一部の実施形態では、この組の1つ以上の電圧が、ダイオード204を逆バイアスする。なお、メモリ素子202をセットすると、メモリ素子202をリセットした後の抵抗と比較してメモリ素子202の抵抗が減ることがある。その後プロセス800は、メモリセル200の状態が変更されるべきであるという判断に基づいてメモリセル200を引き続きリセットおよびセットする。なお、リセットおよびセットは、プロセス800で、各々とは反対の極性を有する電圧によって達成される。したがって、プロセス500では、メモリセル200の双極スイッチングが使用される。図9Aは、可逆的抵抗性スイッチング素子202と、ステアリング素子としてのダイオード204とを有するメモリセル200を部分形成するためのアレイバイアス装置の一実施形態を示す。図8のプロセス800からステップ802を実施する際に、このアレイバイアス装置例が使用される。本実施例では、選択したメモリセル200Sのダイオード204が順バイアスされる。このバイアス装置では、選択したビットラインBLにVsoft_formが印加され、選択したワードラインWLが接地される。電圧Vsoft_formは、メモリセルの抵抗または読み取り電流に基づいて決定されてよく、場合によっては所定アルゴリズムに基づいてもよい。例えば、図4のプロセス500が使用されてもよい。選択していないワードラインは、それらに印加されるVuxを各々有する。一実施形態では、Vuxが概ねVsoft_form-0.7Vである。その結果、選択したビットライン沿いにある選択していないメモリセル200全体が約0.7Vとなる。選択していないビットラインは、それらに印加されるVubを各々有する。一実施形態では、Vubが約0.7Vである。その結果、選択したワードライン沿いにある選択していないメモリセル200全体が約0.7Vとなる。選択していないワードラインと選択していないビットラインとの両方沿いにあるメモリセル200のダイオード202は、逆バイアスされる。一実施形態では、かかるメモリセル200が、全体ビットラインからワードラインまでで概ね-Vsoft_form-1.4Vを有する。なお、電圧は例として提示したものであり、他の電圧が使用できる可能性がある。図9Bは、可逆的抵抗性スイッチング素子202と、ステアリング素子としてのダイオード204とを有するメモリセル200の形成プロセスを完了するため、あるいはセットするためのアレイバイアス装置の一実施形態を表す。このアレイバイアス装置例は、図8のプロセス800からステップ804を実装する目的で使用される。このアレイバイアス装置例は、図8のプロセス800からステップ812を実施する目的でも使用される。本実施例では、選択したメモリセル200のダイオード204が逆バイアスされる。このバイアス装置では、Vsetが選択したワードラインWLに印加され、選択したビットラインBLが接地される。振幅およびパルス幅など、Vsetの特性は、メモリセルの抵抗または読み取り電流に基づいて決定される。例えば、図4のプロセス500が使用される。選択していないワードラインは、それらに印加されるVuxを各々有する。一実施形態では、Vuxが約Vset/2である。選択していないビットラインは、それらに印加されるVubを各々有する。一実施形態では、Vubが約Vset/2である。図9Cは、可逆的抵抗性スイッチング素子202と、ステアリング素子としてのダイオード204とを有するメモリセル200をリセットするためのアレイバイアス装置の一実施形態を表す。このアレイバイアス装置例は、図8のプロセス800からステップ806を実施する目的で使用される。本実施例では、選択したメモリセル200Sのダイオード204が順バイアスされる。このバイアス装置では、選択したビットラインBLにVresetが印加され、選択したワードラインWLが接地される。振幅およびパルス幅などのVresetの特性は、メモリセルの抵抗または読み取り電流に基づいて決定されてもよい。例えば、図4のプロセス500が使用される。選択していないワードラインは、それらに印加されるVuxを各々有する。一実施形態では、Vuxが概ねVreset-0.7Vである。その結果、選択したビットライン沿いにある選択していないメモリセル200全体が約0.7Vとなる。選択していないビットラインは、それらに印加されるVubを各々有する。一実施形態では、Vubが約0.7Vである。その結果、選択したワードライン沿いにある選択していないメモリセル200全体が約0.7Vとなる。選択していないワードラインと選択していないビットラインとの両方沿いにあるメモリセル200のダイオード202は、逆バイアスされる。一実施形態では、かかるメモリセル200が、全体ビットラインからワードラインまでで概ね-Vreset-1.4Vを有する。図9Dは、可逆的抵抗性スイッチング素子202と、ステアリング素子としてのダイオード204とを有するメモリセル200を読み取るためのアレイバイアス装置の一実施形態を表す。本実施例では、選択したメモリセル200Sのダイオード204が、読み取り時に順バイアスされる。ただし、順バイアスは絶対的な要件ではない。このバイアス装置では、Vreadが選択したビットラインBLに印加され、選択したワードラインWLが接地される。一例として、Vreadは約2.0Vであってよい。ただし、Vreadはそれより高くても低くてもよい可能性がある。一部の実施形態では、プログラミングプロセスの様々な部分で異なるVreadが使用される。例えば、振幅とパルス幅などVreadの特性は、メモリセルの抵抗または以前の読み取り電流に基づいて決定されてもよい。選択していないワードラインは、本実施例でそれらに印加されるVreadを各々有する。その結果、選択したビットライン沿いにある選択していないメモリセル200全体が約0Vとなる。本実施例において、選択していないビットラインは接地される。その結果、選択したワードライン沿いにある選択していないメモリセル200全体が約0Vとなる。選択していないワードラインと選択していないビットラインとの両方沿いにあるメモリセル200のダイオード202は、逆バイアスされる。一実施形態では、かかるメモリセル200が、全体ビットラインからワードラインまでで約-Vreadを有する。次に、プロセス800のプログラミング動作を実行することについてさらに詳しく説明する。図10Aは、部分形成ステップ802目的で使用されるプロセスの一実施形態を示す。図10Bは、形成またはセットステップ802、812を完了する目的で使用されるプロセスの一実施形態を示す。図10Cは、リセットステップ808目的で使用されるプロセスの一実施形態を示す。図10A~図10Cでは、1つ以上のプログラミング条件がメモリセルの抵抗に基づいている。1つ以上のプログラミング条件は、メモリセルの抵抗の関数でありうる所定アルゴリズムを適用することによって決定される。所定アルゴリズムは、メモリセルの性質の関数である。図10Aは、メモリ素子202の形成の第1の部分のプロセス900の一実施形態を示すフローチャートである。プロセス900は、図8のプロセス800のステップ802の一つの実施態様である。ステップ901で、ループカウントがゼロに初期化される。ループカウントは、部分形成が試行される回数を制限する目的で使用される。最大試行回数は、1回の試行を含む任意の値で確立される。ステップ902で、メモリセル200は、メモリ素子200の順電圧電流Ireadを判断するために、順電圧で読み込まれる。ステアリング素子がダイオードである実施形態では、ダイオード204が順バイアスされる。図9Dのメモリセルを読み取るためのバイアス装置例が使用される。例えば、Vreadが選択したビットラインに印加され、選択したワードラインが接地される。Vreadは、選択していないワードラインにも印加されてもよく、選択していないビットラインが接地される。Vreadの例は、2.0Vである。図3の回路は、順方向バイアス電流Ireadを検出する目的で使用されてもよい。ステップ904で、順電圧電流Ireadがソフト形成電流と比較される。ソフト形成電流とは、メモリセル200の抵抗が、部分形成されたメモリセル200の目標抵抗であるかどうかを示す値のことである。ソフト形成電流は、Ionと称されることのあるオン電流未満の値であるのが典型的である。先に述べたように、メモリ素子202をセットすると、自身の抵抗が下がり、それ故に、所与の読み取り電圧に対する電流が増す。電流Ionは、メモリセル200の抵抗がセットされる目標値にあることを示す電流と定義されうる。なお、一部の実施形態では、セットのための目標抵抗が、完全形成されているメモリセル200の目標抵抗と同じだが、これは必須ではない。メモリセルを部分形成した後の目標抵抗がセットのための目標抵抗よりも高いので、IformはIonよりも低いのが典型的である。順電流IreadがすでにIformよりも大きい場合には、部分形成を実行する必要はなく、プロセスは図8のステップ804へと進む。換言すれば、メモリセル200の抵抗は、すでに部分形成のための目標抵抗であり、したがって、メモリセルを部分形成するために電圧を印加する必要はない。ただし、順電流IreadがIform未満である場合には、プロセスがステップ906に進み続行する。ステップ906で、1つ以上のプログラミング条件が、メモリセルの抵抗に基づいて決定される。1つ以上のプログラミング条件の決定は、メモリセル抵抗の関数である所定アルゴリズムに基づいてもよい。例えば、プログラム電圧振幅、プログラム電圧パルス幅、および/または電流制限のうちの1つ以上が、メモリセルの抵抗に基づいて決定される。図6Bに記載されているようなプロセスは、例えば、1つ以上のプログラミング条件を決定する目的で実施される。説明のために、ソフト形成電圧Vformおよび電流制限Icomp_formがステップ906で決定される。Vformを決定することは、電圧振幅、パルス幅、および遷移速度を含むがこれらに限定されないいかなる特性をも決定することを含むことがある。ステップ907で、バイアス電圧がビットラインとワードラインとに印加される。例えば、ワードラインにVuxが、ビットラインにVubが印加される。ステップ908で、ソフト形成電圧がメモリ素子202に印加される。例えば、選択したビットラインにVsoft_formが印加される一方で、選択したワードラインが接地される。ソフト形成電圧の範囲例は、約4.5V~7Vの間である。ただし、ソフト形成電圧は、それより高いこともあり、低いこともある。ソフト形成中は、メモリ素子202に供給される電流が、電流Icomp_formに限定される。一実施形態では、図8Aに示されたバイアス装置がステップ907~908で使用される。ステップ910で、順電流Ireadが再び検知される。ステップ912で、順電流Ireadがソフト形成電流Iformと比較される。順電流Ireadがソフト形成電流Iformよりも大きければ、ソフト形成が正常に行われたということであり、プロセスはステップ922に進み続行する。換言すれば、メモリセル200の抵抗は、部分形成のための目標抵抗以下に低減されたということである。順電流Ireadがソフト形成電流Iformよりも小さいことがステップ912で判断された場合には、もう一度ソフト形成が試行される。ステップ914で、ループカウントが増分される。ループカウントが最大値ステップ918に達していなければ、プロセスはステップ906に戻り、次の繰り返しのために1つ以上のプログラミング条件を決定する。ループカウントがステップ918で最大値に達した場合には、ステップ930で、反対の極性の1つ以上のパルスがメモリセルに印加される。例えば、図9Aに示した極性を使用する代わりに、図9Bと同様のバイアス装置が使用される。いかなる適切な電圧振幅およびパルス持続時間も使用されることができる。いかなる適切な電流制限も使用されることができる。一実施形態では、1つ以上のプログラミング条件が、メモリセルの抵抗に基づいて決定される。ただし、プログラミング条件がメモリセルの抵抗に基づくことは必須ではない。ステップ930の後、プロセスはステップ906に戻り、次の繰り返しのために1つ以上のプログラミング条件が決定される。なお、この時プログラミング信号の極性は通常の極性に戻っている。例えば、図9Aのバイアス装置が再び使用されてもよい。ステップ912で順電流IreadがIformよりも大きいと判断されると仮定すると、プロセスはステップ922に進み続行する。ステップ922で、逆電流IRVが検知される。ステップ922で、メモリセル200は、メモリ素子200の逆電流IRVを判断するために逆電圧で読み込まれる。ステアリング素子がダイオードである実施形態では、ダイオード204が逆バイアスされる。例えば、Vreadが選択したワードラインに印加され、選択したビットラインが接地される。一実施形態では、Vreadが選択していないワードラインに印加され、選択していないビットラインが接地される。図3の回路は、逆電流IRVを検知する目的で使用されてもよい。ステップ924で、逆電流IRVが最大許容逆電流IRV_maxと比較される。逆電流IRVが最大許容逆電流IRV_max未満である場合には、ステップ926において、部分形成の成功が記録される。その後プロセス900が終了する。なお、ステップ922および924は任意である。一部の実施形態では、ダイオードの損傷が限られているか損傷がなく、他のテストステップによって検出されるか、あるいはまったく検出されない。一方、逆電流IRVが最大許容逆電流IRV_maxよりも大きい場合には、ダイオード204が損傷していることを表す可能性がある。プロセスはステップ920へと進み、メモリセル200が使用されないように、メモリセル200にフラグが立てられる。その後プロセス900が終了する。図10Bは、メモリ素子202の抵抗を減らすプログラム動作のプロセス1000の一実施形態を示すフローチャートである。プロセス1000は、例えば、メモリセルをセットする目的で使用される。また、形成プロセスで使用されてもよい。プロセス1000は、図8のプロセス800のステップ804の一つの実施態様である。そのため、プロセス1000は、図8に示すように、ソフト形成または部分形成が正常に完了した後に実行されてもよい。なお、プロセス1000は、メモリセル200をセットする目的で使用されてもよい。そのため、プロセス1000は、プロセス800のステップ812を実装する目的で使用されてもよい。なお、メモリセルの形成を完了することは、メモリセルをセットすることとみなすことができる。そのため、プロセス1000は、メモリセルをセットすることであると言及することによって説明することができる。これは、プロセス500のステップ804または812のどちらにも言及することができるということが理解されよう。ステップ1001で、ループカウントがゼロに初期化される。ループカウントは、セットが試行される回数を制限する目的で使用される。最大セット試行回数は、1回の試行を含む任意の値で確立される。ステップ1002で、メモリセルの電流が検知される。図9Dのバイアス例が使用されてもよい。本明細書に記載されているように、電流はメモリセルの抵抗を表す。ステップ1004で、1つ以上のプログラミング条件が、メモリセル電流に基づいて決定される。この決定は、メモリセル抵抗の関数でありうる所定アルゴリズムに基づいてもよい。図6Bのプロセスは、ステップ1002で検出された電流に基づいて1つ以上のプログラミング条件を決定する目的で使用されうる。なお、異なるアルゴリズムおよび様々な電流基準が、メモリセルの初回部分形成について記載した図10Aのプロセスと比較して使用される。ステップ1104で、セット電圧Vsetおよび電流制限Icomp_setが決定される。ステップ1006で、バイアス電圧がビットラインとワードラインとに印加される。例えば、ワードラインにVuxが、ビットラインにVubが印加される。一実施形態において、ステップ1006は、ワードラインに印加する電圧を接地からVuxまで引き上げることと、ビットラインに印加する電圧を接地からVubまで引き上げることとを含む。なお、選択したワードラインおよび選択したビットラインは、ステップ1006で、選択していないワードラインおよびビットラインと同様に処理されてよい。ステアリング素子がp-i-nダイオードである実施形態では、Vuxが約5Vであってよく、Vubは約5Vであってよい。ステアリング素子がパンチスルーダイオードである実施形態では、Vuxが約3Vであってよく、Vubは約5Vであってよい。他の電圧も使用される。ステップ1008で、メモリ素子202のセットが試行される。メモリ素子202に印加されるセット電圧は、ステップ1004で決定されたセット電圧であってもよい。一実施形態では、図9Bに示されたバイアス装置がステップ1008で使用される。例えば、選択したワードラインにVsetが印加されうる一方で、選択したビットラインが接地される。セットの際、メモリ素子202に供給される電流は、ステップ1004で決定された可能性がある電流Icompに限定される。なお、本実施形態では、セットが逆セット例えば、ダイオードが逆バイアスされるであってもよい。ただし、他の実施形態では、セットの際にダイオードが順バイアスされる。ステップ1010で、順電流Ireadが検知される。一実施形態において、Ireadを検知することは、図9Dに示すように、アレイをバイアスすることを含む。ただし、他のバイアス装置も使用できる可能性がある。ステップ1012で、順電流Ireadがオン電流Ionと比較される。先に述べたように、メモリセル200をセットすると、抵抗が下がり、それ故に、所与の読み取り電圧に対する電流が増す。オン電流Ionは、メモリセル200の抵抗が十分に低い値であることを示す電流と定義される。順電流IreadがIonよりも大きい場合には、メモリ素子202の抵抗が十分に低く、プロセスはステップ1022で続行する。一実施態様では、図3の回路がIreadをIonと比較する目的で使用される。順電流IreadがIonよりも小さい場合には、メモリセルをセットするためにさらなる試行が行われる。ステップ1014で、ループカウントが増分される。ループカウントが最大許容試行回数でない場合ステップ1018には、プロセスがステップ1004に戻り、1つ以上のプログラミング条件を決定する。これらの条件は、ステップ1010で決定されたIreadに基づいてもよい。ただし、最大セット試行回数に達した場合には、ステップ1030で、反対の極性の1つ以上のパルスがメモリセルに印加される。例えば、図9Bに示すように極性を使用する代わりに、図9Aまたは9Cと同様のバイアス装置が使用されることがある。いかなる適切な電圧振幅およびパルス持続時間も使用されることができる。いかなる適切な電流制限も使用されることができる。一実施形態では、1つ以上のプログラミング条件が、メモリセルの抵抗に基づいて決定される。ただし、プログラミング条件がメモリセルの抵抗に基づくことは必須ではない。ステップ1030の後、プロセスはステップ1004に戻り、次の繰り返しのために1つ以上のプログラミング条件が決定される。なお、この時プログラミング信号の極性は通常の極性に戻っている。例えば、図9Bのバイアス装置が再び使用される。ステップ1012でIreadがIonよりも大きいと判断されると仮定すると、プロセスはステップ1022に進み続行する。ステップ1022で、逆電流IRVが検知される。ステップ1024で、逆電流IRVが最大許容逆電流IRV_maxと比較される。逆電流IRVが最大許容逆電流IRV_max未満である場合には、ステップ1026において、セットの成功が記録される。その後プロセスが終了する。なお、ステップ1022および1024は任意である。一方、逆電流IRVが最大許容逆電流IRV_maxよりも大きい場合には、ダイオード204が損傷していることを表す可能性がある。プロセスはステップ1020へと進み、メモリセル200が使用されないように、メモリセル200にフラグが立てられる。その後プロセスが終了する。図10Cは、メモリ素子202をリセットするプロセス1100の一実施形態を示すフローチャートである。プロセス1100は、図8のプロセス800のステップ808の一つの実施態様である。そのため、プロセス1100は、メモリセル200がリセットされるべきであると判断された後に実行されてもよい。ステップ1101で、ループカウントがゼロに初期化される。ループカウントは、リセットが試行される回数を制限する目的で使用される。最大試行回数は、1回の試行を含む任意の値で確立される。ステップ1102で、メモリセルの伝導電流が検知される。図9Dのバイアス例が使用されてもよい。本明細書に記載されているように、電流はメモリセルの抵抗を表す。ステップ1104で、1つ以上のプログラミング条件が、伝導電流に基づいて決定される。この決定は、メモリセル抵抗の関数である所定アルゴリズムに基づいてもよい。図7Bのプロセスは、1つ以上のプログラミング条件を決定する目的で使用される。なお、図10Aおよび10Bのプロセスとは異なるアルゴリズムかつ様々な電流基準が使用されてもよい。ステップ1104で、リセット電圧Vresetおよび電流制限Icomp_resetが決定される。ステップ1106で、選択していないビットラインおよび選択していないワードラインにバイアス電圧が印加される。例えば、ワードラインにVuxが、ビットラインにVubが印加される。ステップ1108で、リセット電圧がメモリ素子202に印加される。一実施形態では、選択したビットラインにリセット電圧が印加される。一実施形態では、図9Cに示されたバイアス装置がリセットステップ1108で使用される。例えば、選択したビットラインにVresetが印加される一方で、選択したワードラインが接地される。なお、リセット電圧がセット電圧とは反対の極性であってもよい。リセットの際、メモリ素子202に供給される電流は、電流Icomp_resetに限定される。ステップ1110で、順電流Ireadが検知される。ステップ1112で、順電流Ireadがオフ電流Ioffと比較される。先に述べたように、メモリセル200をリセットすると、抵抗が増え、それ故に、所与の読み取り電圧に対する電流が減少する。オフ電流Ioffは、メモリセル200の抵抗がリセットとみなされる十分に高い値であることを示す電流と定義されうる。順電流Ireadがオフ電流Ioff未満である場合には、メモリ素子202の抵抗が十分に高く、プロセスはステップ1122に進み続行する。順電流IreadがIoffよりも大きい場合には、メモリセル200をリセットするためにさらなる試行が行われる。ステップ1114で、ループカウントが増分される。ループカウントが最大許容試行回数でない場合ステップ1118には、プロセスがステップ1104に戻り、メモリセル電流または抵抗に基づいて1つ以上のプログラミング条件が決定される。ステップ1110で検知された電流が使用されてもよい。上記したように、プロセス6Bがステップ1104で使用される。ただし、最大リセット試行回数に達した場合には、ステップ1130で、反対の極性の1つ以上のパルスがメモリセルに印加される。例えば、図9Cに示した極性を使用する代わりに、図9Bと同様のバイアス装置が使用される。いかなる適切な電圧振幅およびパルス持続時間も使用されることができる。いかなる適切な電流制限も使用されることができる。一実施形態では、1つ以上のプログラミング条件が、メモリセルの抵抗に基づいて決定される。ただし、プログラミング条件がメモリセルの抵抗に基づくことは必須ではない。ステップ1130の後、プロセスはステップ1104に戻り、次の繰り返しのために1つ以上のプログラミング条件が決定される。なお、この時プログラミング信号の極性は通常の極性に戻っている。例えば、図9Cのバイアス装置が再び使用される。ステップ1112で順電流IreadがIoff未満であると判断されると仮定すると、プロセスはステップ1122に進み続行する。ステップ1122で、逆電流IRVが検知される。ステップ1124で、逆電流IRVが最大許容逆電流IRV_maxと比較される。逆電流IRVが最大許容逆電流IRV_max未満である場合には、ステップ1126において、ソフト形成の成功が記録される。その後プロセスが終了する。なお、ステップ1122および1124は任意である。一部の実施形態では、ダイオードの損傷が限られているか損傷がなく、他のテストステップによって検出されるか、あるいはまったく検出されない。一方、逆電流IRVが最大許容逆電流IRV_maxよりも大きい場合には、ダイオード204が損傷していることを表す可能性がある。プロセスはステップ1120へと進み、メモリセル200が使用されないように、メモリセル200にフラグが立てられる。その後プロセスが終了する。なお、本明細書に記載されているプログラミング技法は、図8に記載されている動作例に限定されない。別の実施形態では、メモリセルを形成するのに、単極を有するプログラミング信号が使用される。この場合、セット動作で使用されるプログラミング信号は、形成の場合と同じ極性を有す場合がある。リセット動作で使用されるプログラミング信号は、セットおよび形成の場合とは反対の極性を有す場合がある。図11は、形成で単極が使用され、双極スイッチングが使用されるメモリアレイの動作のプロセス1150の一実施形態のフローチャートを示す。ステップ1152で、メモリセルの抵抗の低減を試行するために、第1の極性の1つ以上の電圧がメモリセルに印加される。この第1の電圧は、メモリセルでステアリング素子を順バイアスするが、これは必須ではない。ここでメモリセルが初めてプログラムされているため、この動作は形成と称される。1つ以上のプログラミング条件が、メモリセルの抵抗および所定のアルゴリズムに基づいて決定される。例えば、プロセス500または600などのプロセスが使用される。ステップ1156で、メモリセルがリセットされるべきであると判断される。ステップ1158で、メモリセルリセットの抵抗の増大を試行するために、第2の極性第1の極性の反対の1つ以上の電圧がメモリセルに印加される。この第2の電圧は、メモリセルでステアリング素子を逆バイアスするが、これは必須ではない。1つ以上のプログラミング条件が、メモリセルの抵抗および所定のアルゴリズムに基づいて決定される。例えば、プロセス500または640などのプロセスが使用される。ステップ1160で、メモリセルがセットされるべきであると判断される。ステップ1162で、メモリセルセットの抵抗の増大を試行するために、第1の極性の1つ以上の電圧がメモリセルに印加される。この第1の電圧は、メモリセルでステアリング素子を順バイアスするが、これは必須ではない。1つ以上のプログラミング条件が、メモリセルの抵抗および所定のアルゴリズムに基づいて決定される。例えば、プロセス500または600などのプロセスが使用される。なお、図8および図11のプロセスについて、形成、セット、およびリセットのための1つ以上のプログラミング条件は、メモリセルの抵抗に基づいて決定されたものであると記載された。ただし、これがプログラミング動作の全てを対象に実施される必要はないという点にも留意されたい。例えば、一部の装置については、リセットプログラミング条件が一例としてメモリセルの抵抗に基づいて決定されない場合がある。なお、一部の実施形態で、メモリセルの形成がセットおよびリセットのサイクルの前に使用されるプロセスを記載したものの、メモリセルの形成は、全ての場合における要件というわけではない。例えば、初回形成プロセスが実行されないメモリセルが存在することがある。図13は、不揮発性記憶装置をプログラムするプロセス1300の一実施形態のフローチャートである。プロセス1300は、可逆的抵抗性スイッチング材料を有するメモリセルで使用される。プロセス1300では、プログラミング動作再試行制限に達すると、プログラミング動作で使用される極性とは反対の極性を有する1つ以上の信号が印加される。その後、プログラミング動作が再試行される。プログラミング動作は、例えば、形成、セットあるいはリセットである。ステップ1301で、再試行制限がゼロに設定される。ステップ1302で、第1の極性を有する1つ以上のプログラミング信号が、可逆的抵抗性スイッチング材料を有するメモリセルに印加される。1つ以上のプログラミング条件がメモリセルの抵抗に基づいて決定されるが、必須ではない。一実施形態では、第1の極性を有する電圧パルスがメモリセルに印加される。この第1の極性は、ステアリング素子を順バイアスあるいは逆バイアスする。ステップ1304で、1つ以上のプログラミング信号の印加を受けて、プログラミング動作が完了したかどうかが判断される。例えば、メモリセルの電流を判断するためにメモリセルが読み込まれ、基準電流と比較される。プログラミングが完了していれば、プロセス1300は終了する。ステップ1306で、プログラミングの再試行制限に達したかどうかが判断される。再試行制限は任意であってよい。再試行制限に達していなければ、ステップ1307で増分される。その後ステップ1302で、第1の極性を有する1つ以上の追加プログラミング信号がメモリセルに印加される。プログラミング動作が完了しておらずステップ1304=いいえ、かつ再試行制限に達したステップ1306=はい場合には、ステップ1308で、第1の極性とは反対の第2の極性を有する1つ以上の信号がメモリセルに印加される。1つ以上のプログラミング条件がメモリセルの抵抗に基づいて決定されるが、必須ではない。一実施形態では、第2の極性を有する電圧パルスがメモリセルに印加される。この第2の極性は、ステアリング素子を順バイアスあるいは逆バイアスする。第2の極性を有する1つ以上の信号を印加した後、再試行制限をゼロにリセットするためにステップ1301が実行される。その後ステップ1302で、第1の極性を有する1つ以上の追加プログラミング信号をメモリセルに印加することにより、プログラミング動作が再試行される。ステップ1302の後、プロセス1300が続行する。なお、異なる再試行制限が今回使用できる可能性がある。プロセス1300は、ステップ1308の実行回数が多すぎる場合にプログラミングプロセスを止めるための追加のグローバル再試行制限を有する。本明細書に開示された実施形態は、低い逆バイアス動作電圧低下と、狭い形成電流レベル分布と、より安定したメモリセルとを達成する。動作電圧の低減および狭い分布により、支持回路例えばCMOS装置における電圧および電流要件を下げるため、密度の増大と節電につながり、高電圧CMOSのプロセスを簡便にすることができる。電圧および電流の減少により、ステアリング素子として使用するPINダイオードを短くし、耐久性を高めることが可能となる。低電圧および低電流であれば、他のタイプのステアリング素子も開発および製造しやすい。ステップの初期化方法によって達成される優れた制御特性により、金属酸化物、炭素または他のタイプの抵抗性材料による低コストの抵抗変化メモリRRAM登録商標が達成される。一実施形態は、以下を含む、不揮発性記憶装置を操作する方法を含む。可逆的抵抗性スイッチングメモリ素子を有するメモリセルの抵抗を表す情報が判断される。この情報に基づいて、プログラミング動作が完了しているかどうかが判断される。メモリセルに適用される1つ以上のプログラミング条件が、この情報と、可逆的抵抗性スイッチングメモリ素子を有するメモリセルの特性に基づく所定アルゴリズムとに基づいて決定される。プログラミング動作がまだ完了していない場合には、1つ以上のプログラミング条件の決定が実行される。プログラミング動作がまだ完了していない場合には、1つ以上のプログラミング条件がメモリセルに適用される。抵抗を表す情報を判断するステップ、動作が完了したかどうかを判断するステップ、1つ以上のプログラミング条件を決定するステップ、1つ以上のプログラミング条件を適用するステップは、プログラミング動作が完了したと判断されるまで繰り返される。一実施形態は、複数の不揮発性メモリセルと、それら複数の不揮発性メモリセルと通信する1つ以上の管理回路とを備える記憶システムを含む。個々のメモリセルは、可逆的抵抗性スイッチングメモリ素子を有する。1つ以上の管理回路は、プログラミング動作の一環として、第1のメモリセルの抵抗を表す情報を判断し、その1つ以上の管理回路は、その情報に基づき、そのメモリセルについてプログラミング動作が完了したかどうかを判断する。1つ以上の管理回路は、抵抗を表す情報と、可逆的抵抗性スイッチングメモリ素子を有するメモリセルの性質に基づく所定アルゴリズムとに基づいて、メモリセルに印加されるプログラミング信号を決定する。プログラミング動作がまだ完了していない場合には、プログラミング信号の決定が実行される。プログラミング動作がまだ完了していない場合には、1つ以上の管理回路がプログラミング信号をメモリセルに印加する。1つ以上の管理回路は、メモリセルについてプログラミング動作が完了したと判断されるまで、抵抗を表す情報を判断し続け、プログラミング動作が完了したかどうかを判断し続け、プログラミング信号を決定し続け、プログラミング信号を印加し続ける。一実施形態は、以下を含む、不揮発性記憶装置を操作する方法を含む。プログラミング動作の一環として、メモリセルの各々の抵抗を表す情報が判断される。各メモリセルの情報に基づき、各メモリセルについてプログラミング動作が完了したかどうかが判断される。メモリセルについてプログラミング動作がまだ完了していない場合には、メモリセルの各々に印加されるプログラミングパルスが決定される。プログラミングパルスの1つ以上の特性は、メモリセルの抵抗を表す情報に基づく。プログラミングパルスを決定するステップは、可逆的抵抗性スイッチングメモリ素子を有するメモリセルの性質に基づく所定アルゴリズムを適用するステップを含む。この所定アルゴリズムは、メモリセルの抵抗の関数である。プログラミングパルスは、適切なメモリセルに印加される。抵抗を表す情報を判断するステップ、プログラミング動作が完了したかどうかを判断するステップ、プログラミングパルスを決定するステップ、プログラミングパルスを印加するステップは、メモリセルについてプログラミング動作が完了したと判断されるまで繰り返される。一実施形態は、複数の不揮発性メモリセルと、その複数の不揮発性メモリセルと通信する1つ以上の管理回路とを備える記憶システムを含む。個々のメモリセルは、可逆的抵抗性スイッチングメモリ素子を含む。1つ以上の管理回路は、プログラミング動作の一環として、メモリセルの各々の抵抗を表す情報を判断する。1つ以上の管理回路は、各メモリセルの抵抗を表す情報に基づき、各メモリセルについてプログラミング動作が完了したかどうかを判断する。メモリセルに対するプログラミング動作がまだ完了していない場合には、1つ以上の管理回路が、メモリセルの各々に印加されるプログラミングパルスを決定する。プログラミングパルスの1つ以上の特徴は、メモリセルの抵抗と、可逆的抵抗性スイッチングメモリ素子を有するメモリセルの性質に基づく所定アルゴリズムとに基づく。1つ以上の管理回路は、プログラミングパルスを適切なメモリセルに印加する。1つ以上の管理回路は、メモリセルについてプログラミング動作が完了したと判断されるまで、抵抗を表す情報を判断し続け、プログラミング動作が完了したかどうかを判断し続け、プログラミングパルスを決定し続け、プログラミングパルスを印加し続ける。一実施形態は、以下を含む、不揮発性記憶装置を操作する方法を含む。第1の極性を有する1つ以上のプログラミング信号が、可逆的抵抗性スイッチング材料を有するメモリセルに印加される。1つ以上のプログラミング信号の印加を受けて、プログラミング動作が完了したかどうかが判断される。プログラミング動作が完了しておらず、かつ再試行制限に達していない場合には、第1の極性を有する1つ以上の追加プログラミング信号がメモリセルに印加される。再試行制限に達した場合には、第1の極性とは反対の第2の極性を有する1つ以上の追加プログラミング信号がメモリセルに印加される。プログラミング動作は、第2の極性を有する1つ以上の追加プログラミング信号を印加した後に第1の極性を有する1つ以上の追加プログラミング信号をメモリセルに適用することによって再試行される。一実施形態は、複数の不揮発性メモリセルと、その複数の不揮発性メモリセルと通信する1つ以上の管理回路とを備える記憶システムを含む。個々のメモリセルは、可逆的抵抗性スイッチングメモリ素子を有する。1つ以上の管理回路は、第1の極性を有する1つ以上のプログラミング信号を第1のメモリセルに印加する。1つ以上の管理回路は、1つ以上のプログラミング信号の印加を受けて、プログラミング動作が完了したかどうかを判断する。プログラミング動作が完了しておらず、かつ再試行制限に達していない場合には、1つ以上の管理回路が、第1の極性を有する1つ以上の追加プログラミング信号を第1のメモリセルに印加する。再試行制限に達した場合には、1つ以上の管理回路が、第1の極性とは反対の第2の極性を有する1つ以上の追加プログラミング信号を第1のメモリセルに印加する。1つ以上の管理回路は、第2の極性を有する1つ以上の追加プログラミング信号を印加した後、第1の極性を有する1つ以上の追加プログラミング信号を第1のメモリセルに印加することにより、プログラミング動作を再試行する。前述の詳細な説明は、例示および説明を目的として提示されたものである。これは、網羅的なものでなく、開示されたとおりの形態に限定されるものでもない。上記の教示に照らした多くの改変例および変形例が考えられる。記載した実施形態は、技術およびその実際的応用の原理を最もよく説明し、当業者が様々な実施形態で、検討される特定の使用に適するように様々に修正して技術を最もよく利用できるように選定された。技術の範囲は、本明細書に添付される特許請求の範囲によって規定されるものとする。"