(58)【調査した分野】(Int.Cl.,DB名)
前記一組のソリッドステート不揮発性メモリセルは、各フラッシュメモリセルのフローティングゲートに電荷を蓄積することにより1ページ分のデータを同時に格納することによってプログラムされる一行のフラッシュメモリセルを含む、請求項1に記載の方法。
前記フラッシュメモリセルは各々、2ページ分のデータが前記メモリセルによって格納されるように、マルチレベルセル(MLC)として構成される、請求項2に記載の方法。
第1の書込パルス幅を与えることによって、各メモリセルを前記関連する初期プログラム状態にプログラムし、その後第2の書込パルス幅を与えることによって、選択されたメモリセルをその関連するプログラム状態に再プログラムし、前記第2の書込パルス幅は前記第1の書込パルス幅よりも短い、請求項1から請求項3のいずれか1項に記載の方法。
前記プログラム状態のドリフトは、選択されたメモリセルが前記関連する初期プログラム状態にプログラムされてから経過した時間に応じて検出される、請求項1に記載の方法。
前記メモリセルは、抵抗ランダムアクセスメモリ(RRAM(登録商標))セル、相変化ランダムアクセスメモリ(PCRAM)セル、またはスピントルクトランスファーランダムアクセスメモリ(STRAM)セルのうちの選択されたいずれか1つである、請求項1に記載の方法。
前記選択されたメモリセルを、再プログラムされたものとして、前記選択されたメモリセルに関連する制御データにマークするステップをさらに含む、請求項1から請求項9のいずれか1項に記載の方法。
前記選択されたアドレス可能単位は、1行のフラッシュメモリセルであり、前記書込回路は、前記フラッシュメモリセルに電荷の第1の増分を蓄積し移動することによって1ページのデータを前記行に書込み、前記書込回路は、前記電荷の第1の増分よりも小さい電荷の第2の増分を蓄積し移動することによって前記行の前記フラッシュメモリセルを部分的に再プログラムする、請求項11に記載の装置。
第1の書込パルス幅を与えることによって、各メモリセルを前記関連する初期プログラム状態にプログラムし、その後第2の書込パルス幅を与えることによって、選択されたメモリセルをその関連するプログラム状態に再プログラムし、前記第2の書込パルス幅は前記第1の書込パルス幅よりも短い、請求項11または請求項12に記載の装置。
前記プログラム状態のドリフトは、選択されたメモリセルが前記関連する初期プログラム状態にプログラムされてから経過した時間に応じて検出される、請求項11に記載の装置。
前記部分再プログラミング回路はさらに、前記部分的に再プログラムする動作の前に1つ以上の電圧しきい値を前記プログラムされた一組のフラッシュメモリセルに与えて各々のプログラム状態を評価することを前記R/W/E回路に指示する、請求項18に記載の装置。
【発明を実施するための形態】
【0005】
詳細な説明
本開示は概して、データ記憶装置のフラッシュメモリアレイ等であるがこれに限定されないメモリモジュールに格納されたデータの管理に関する。
【0006】
当該技術では多様な不揮発性データ記憶メモリが知られている。いくつかの不揮発性メモリは、フラッシュメモリ、抵抗ランダムアクセスメモリ(RRAM(登録商標))、スピントルクトランスファーランダムアクセスメモリ(STRAM)、相変化ランダムアクセスメモリ(PCRAM)等の、ソリッドステートメモリセルの形態を取る。
【0007】
これらおよびその他の種類のメモリセルは、半導体構造であり、セルの、プログラムされた電気的、機械的、および/または構造的状態との関連でデータを格納する。プログラム状態が長期間維持されるという点では名目上不揮発性であるが、メモリセルはプログラムされた状態の変化(プログラミングドリフト)を引起すさまざまな影響を受ける可能性がある。こういった影響は、読出ディスターブ(disturb)、書込ディスターブ、電荷ドリフト、温度劣化、減磁、累積する書込/消去サイクル、消耗等を含み得るものであり、時間の経過に伴ってセルのプログラム完全性に影響する可能性がある。
【0008】
プログラミングドリフトが進行しプログラムされたデータの確実なリカバリを妨げるようになる前に、現在格納されているデータに対してリフレッシュ動作を実行して現在のセルを再プログラムするか、または、データを新たな一組のセルに書込むことが一般的である。メモリセルの中には、データをセルに再び書込む前に、消去動作を挟むことが必要なメモリセルがある。ガーベジコレクション動作は、現在のデータを新たな場所に再度書込み続いて消去を行なうかそうでなければメモリの1ブロックをリセットすることによって、このメモリブロックを、利用できる割当プール(allocation pool)に戻すことを含み得る。
【0009】
現在のリフレッシュ動作(ガーベジコレクション動作を含むがこれに限定される訳ではない)は、機能するものの、その問題は、データの再書込および必要に応じてメモリセルの消去が行なわれることによって、メモリセルの動作総寿命が短縮する可能性があることである。たとえば、いくつかの種類のフラッシュメモリセルは、わずか約5000書込/消去サイクル後に消耗して使えなくなる。それ以外の種類のメモリセルは、書込および/または消去の繰返しが原因で、同じように消耗し易くなる可能性がある。
【0010】
ライトアンプリフィケーション(write amplification)は、フラッシュメモリセルを含むソリッドステート不揮発性メモリセルに付随する関連現象である。ライトアンプリフィケーションは一般的に、あるメモリ内に特定のデータセットが書込まれる総回数に関係する。理想的なライトアンプリフィケーション値は1に等しいであろう。なぜなら、1つのデータセットを一旦受けたらそのメモリへの書込みは一度だけであることが最適であるからである。しかしながら実際は、ガーベジコレクションおよびその他のリフレッシュ動作の結果、1つのアレイ内でのデータの移動、再書込、コピーまたは複製が複数回行なわれることが多い。現世代のソリッドステートドライブ(SSD)の中には、典型的なライトアンプリフィケーション値が3以上であるものがある。これは、ホストから受けた各データセットを、受けたときにメモリに最初に書込んだ後、最終的にはさらに少なくとも二回書込むことを意味する。
【0011】
ライトアンプリフィケーションのレベルが高ければ、メモリの動作寿命が短くなる可能性があり、もしこのメモリ内において異なる場所に同一データの複数のセットが現在存在している場合は新たなデータを収容する能力が低下する可能性もあることが、理解できる。
【0012】
したがって、本開示のさまざまな実施の形態は概して、ライトアンプリフィケーションを減じるようにソリッドステート不揮発性メモリ内のデータを管理するための装置および方法に関する。以下で説明するように、1ブロックのメモリセルを、初期プログラミング状態にプログラムする。推定または検出されたプログラミングドリフトの結果、上記メモリセルのうちの1つ以上を部分再プログラミングの候補であると識別する。
【0013】
部分再プログラミングはこの1つ以上のメモリセルに適用される。すなわち、メモリセルに、電荷の小さな増分等のプログラミング力(programming effort)の相対的に小さい増分を与えることによって、このセルを、前に適用されたプログラミング状態に戻す。このセルは、再プログラムされたことを示すために、タイム/日付スタンプまたはその他の表示データでマークしてもよい。このようにして、オーバヘッド時間およびメモリアレイ内でデータを移動させるのに必要なリソースを減じることができ、不必要な消去および書込動作を原因とするメモリアレイの消耗を回避することができる。
【0014】
いくつかの実施の形態では、部分再プログラミングを、フラッシュメモリ環境内で、フラッシュメモリセルに与えられた電圧しきい値またはフラッシュメモリセルのビットエラーレートを読取ることによって測定された、時間の経過に伴いフラッシュメモリセルが失った電荷の量に基づいて、実行する。次に、このセルを優先的に部分的に再プログラムして元の状態に戻す。これにより、データを新しいフレッシュなブロックにコピーし古いブロックを再利用する必要はなくなる。
【0015】
この部分再プログラミングは、小さくしたプログラミング電圧、パルス等を用いて実行することができる。フラッシュメモリセル、PCRAMセル、STRAMセル、RRAMセル等を含む、種類が異なるメモリセルを、部分的に再プログラムすることができる。フラッシュメモリセルの場合は、実質上、セルの電圧しきい値をその元のプログラム状態に戻すのに十分な電子だけをフローティングゲートの境界を越えて移動させる。
【0016】
さらに他の実施の形態では、ルックアップテーブル、または、伝達関数等の他の手法を使用して、所与のメモリセルにとって適切な回復プログラミング力を決定することができる。フラッシュメモリセル内の電荷消失に影響し得る変数は、温度、時間、およびプログラム/消去サイクルを含む。この装置は、これらおよびその他の変数を追跡し、バックグラウンドにおいて部分再プログラミングの適用をスケジュールすることにより、特定の分布許容差の中でプログラミング状態を維持することができる。
【0017】
さまざまな実施の形態の上記およびその他の特徴は、先ず
図1を検討することによって理解できる。
図1は、ホスト装置102に結合されたデータ記憶装置100を特徴とするデータ処理システムの簡略化されたブロック図を示している。記憶装置100およびホスト102は各々、任意の適切な形態を取ることができる。いくつかの実施の形態において、ホスト102は、デスクトップコンピュータ、サーバ、携帯型電子機器、スマートフォン、ラップトップコンピュータ、タブレット、ゲーム機等の、ネットワークアクセス可能な計算装置である。記憶装置100は、ホスト102に組込まれてもよく、または、ホストにローカル接続もしくはネットワークを介して接続されることによって、ホスト102に対し揮発性および/または不揮発性メモリデータ記憶機能を提供してもよい。
【0018】
図2は、いくつかの実施の形態に従う
図1の記憶装置102の代表的な構造を示す。この装置102は制御モジュール104とメモリモジュール106とを含む。制御モジュール104は、データ処理システムに対してトップレベルの制御を提供し、メモリモジュール106は、主データ記憶装置を提供する。メモリモジュール106は、制御/メモリモジュール通信インターフェイス105を通して制御モジュール104からメモリモジュール106に対して発せられたコマンドを受信し、処理し、実行するようにされている。
【0019】
モジュール104、106はそれぞれいくつかの形態を取り得る。ソリッドステートドライブ(SSD)に適用された場合、制御モジュール104およびメモリモジュール106双方を、一体化されたスタンドアローンアセンブリに組込んでもよい。ハイブリッドディスクドライブに適用された場合、メモリモジュール106はフラッシュおよびディスク双方に基づくメモリを含むものであってもよい。メモリカードに適用された場合、制御モジュール機能の一部またはすべてをホスト装置102(
図1)に組込んでもよい。
【0020】
図2に示される代表的な制御モジュール104は、コントローラ108と、インターフェイス(I/F)回路110と、メモリバッファ112とを含む。コントローラ108は、ホスト102とメモリモジュール106との間でのデータ転送を指示することを含めて、装置100に対する全体的な制御機能を提供する。I/F回路108は、ホストとの、およびメモリモジュール106との、インターフェイス通信を提供する。バッファ112は、コントローラ108が使用するプログラミングおよび制御データの記憶場所を提供することができ、かつ、データアクセス動作中のデータの一時記憶領域を提供することができる。
図2には具体的に示されていないが、制御モジュール104は、暗号化、エラー検出および訂正、ならびにその他の信号処理機能を含むさらに他の機能を含み得る。
【0021】
示されているメモリモジュール106は、読出/書込/消去(R/W/E)回路114と、1つ以上のフラッシュメモリアレイ116とを含む。R/W/E回路114は、制御モジュール104からの制御入力に応答してフラッシュメモリアレイ116に対して読出、書込、および消去機能を果たすように動作する。このメモリはフラッシュメモリを利用しているが、これは例示にすぎず限定ではない。なぜなら、複数種類のメモリ(たとえばフラッシュ、RRAM、STRAM、PCRAM等)を備えたハイブリッドシステムを含めて、任意の数の異種のソリッドステート不揮発性メモリを使用できるからである。
【0022】
フラッシュメモリアレイ116は、
図3に概要が示されている個々のフラッシュメモリセル118からなるものであってもよい。フラッシュメモリセル118は、間隔をおいて設けられたn+ドープ領域122を有する半導体基板120上に形成される。ゲート構造124は、このフラッシュセルが一般的なnMOSトランジスタ構成となるように、一対の隣合うドープ領域にまたがっている。隣接するドープ領域122の対各々に、関連するゲート構造124が設けられるように、追加のフラッシュセルを基板上に形成することができる。
【0023】
ゲート構造124は、導電性ゲート126、128と絶縁性領域130、132を交互に積層したものを提供する。データは、各セル118に、フローティングゲート(FG)として特徴付けられている下部ゲート126上に蓄積された電荷の相対的な量との関連で格納される。
【0024】
フローティングゲートは、プログラミング動作中、隣接するドープ(ドレインおよびソース)領域122と制御ゲート(CG)として特徴付けられている上部ゲート128とに対する適切な電圧の選択的な印加により、電荷を蓄積する。印加されたこれらの電圧により、半導体基板120のチャネル(CH)部分から絶縁領域130を通してフローティングゲート126に、電荷の制御された移動が生じる。
【0025】
初期消去状態では、通常、電荷はフローティングゲート上に実質的に蓄積されていないであろう。この状態において、セルは一般的に、制御ゲートに電圧を印加しなくても、チャネルを通したドレイン−ソース間の導通を示す傾向がある。一旦フローティングゲート上に電荷が蓄積すると、十分に高いゲート制御電圧を制御ゲートに印加してその時点でセルが導通しない限り、ドレイン−ソース間の経路は非導通状態であろう。セルのプログラム状態は、一般的にフローティングゲート上に蓄積された電荷の量に対応する、ドレイン−ソース電流がセルを流れるのに必要な制御ゲート電圧のレベルを観察することにより、判別することができる。
【0026】
セル118は、シングルレベルセル(SLC)として構成してもマルチレベルセル(MLC)として構成してもよい。SLCは1ビットを格納し、通常は論理ビット値1を消去されたセルに割当て(実質的に蓄積電荷はない)論理ビット値0をプログラムされたセルに割当てる(蓄積電荷の選択されたしきい値が存在)。MLCは2ビット等のマルチビットを格納する。一般的に2
nの格納状態を用いてnビットを格納することができる。通常は、マルチビット論理値11を電荷C0(実質的に蓄積電荷はない)の消去されたセルに割当て、次に残りのマルチビット論理値01、00および10を、より高くなる電荷レベルC1、C2およびC3に順次割当てる。
【0027】
蓄積電荷をフローティングゲート126から抜くためには、一般的に特別な消去動作が必要である。消去は、相対的に高い電圧を制御ゲートに印加して電荷をフローティングゲートからチャネルに戻るように移動させることによって、行なうことができる。その後データ書込動作中に異なる一組の電圧をセルに印加することによってフローティングゲートに電荷を加えてもよい。
【0028】
図3の118のようなメモリセルを、メモリモジュール106において、概ね
図4に示されるようにメモリセルの行と列からなるアレイとして配置することができる。隣接するセルの各列は、1本以上のビット線(BL)134を介して結合することができる。各行に沿うセル118の制御ゲート128は、個々のワード線(WL)136を介して相互に接続することができる。
【0029】
図4に示されるメモリセルのアレイを、
図5および
図6に示されるように消去ブロック140にグループ分けしてもよい。各消去ブロック140は、メモリの個別にアドレス可能なブロックであってもよく、一回で同時に消去できるメモリの最小単位を表わしている。各消去ブロック140は、メモリセルの複数の行142として配置してもよく、各行は、共通のワード線(
図4)を共有し、選択された量のユーザデータの記憶場所を提供する。希望に応じてその他の内部配列および相互接続を利用することができる。
【0030】
ブロックレベルのウェアレベリング(wear leveling)を採用することにより、さまざまなブロック140の消去および書込状態を追跡してもよい。新たに受信したデータを収容するために、必要に応じて新たなブロック割当てて使用する。いくつかの実施の形態では、ブロック140のグループを集めて、一単位として割当てられ、使用され、消去されるより大きなガーベジコレクション単位(GCU)144にしてもよい。GCU144は任意の適切な大きさにすればよい。
【0031】
少なくともいくつかの実施の形態では、ページと呼ばれることもある固定サイズのデータセットを、一回で各行142に書込む。ページサイズは論理セクタに対応していてもよく、または、複数のユーザセクタを各ページ分のデータに組込んでもよい。セクタは各々、論理ブロックアドレス(LBA)等の、関連する論理アドレスを有してもよい。パリティビットまたはリードソロモン符号等のエラー訂正符号をページレベルで組込むことによって、1ページ分のデータを取出したときにエラーを訂正してもよい。メタデータおよびその他の制御情報は、各消去ブロック140に格納してもよく、または、この目的専用の特定のブロック等の他の場所に格納してもよい。
【0032】
図7は、
図6のアレイのさまざまなフラッシュメモリセル118上に蓄積される電荷のレベルの違いについて、代表的な正規化電荷分布150、152、154および156を示す。
【0033】
これらの分布は、電圧の大きさを示す共通のx軸158およびセル分布総数を示す共通のy軸159に対してグラフ化されている。
【0034】
分布150、152、154および156は、名目上の蓄積電荷状態C0<C1<C2<C3の相違を表わしており、MLCのプログラム状態11、01、00および10に対応する。その他の符号化方式を用いてもよい。分布150は状態11にプログラムされたアレイのメモリセル上の電荷量の一例を表わし、分布152は状態01に対応し、分布154は状態00に対応し、分布156は状態10に対応する。分布156におけるセルの蓄積電荷が最も多く、分布150におけるセルの蓄積電荷が最も少ない。
【0035】
プログラム状態11、01、00および10は、各セルにおけるデータの、異なる2つのページ(ブロック)のデータを表わすものであってもよい。この場合、プログラム状態の最下位ビット(LSB)は第1ページのビット値を与えてもよく、プログラム状態の最上位ビット(MSB)は第2ページのビット値を与えてもよい。
【0036】
理想的なのは、電荷分布150〜156が重なり合っていないことによって、適切な読出しきい値電圧T1、T2、T3およびT4を印加すると、異なるプログラム状態が区別されることである。しきい値T1は名目上、分布150のメモリセルすべてをソース−ドレイン導通状態にするのに十分であるが分布152、154および156のセルを導通状態にするには不十分な電圧レベルを与える。しきい値T4は概ね、プログラム状態に関係なくすべてのセルを導通状態にするのに十分大きい。
【0037】
選択されたフラッシュメモリセルのプログラム状態は、この選択セルのためのビット線134(
図4)を適切な順方向電圧(たとえば+3V等)にし、残りの非選択ビット線をそれ以外のより低い何らかの基準電圧(たとえば0V)にすることによって、読出すことができる。上記選択セルを含まない行のための非選択ワード線136を最大のしきい値T4にすることによって、選択セル以外の、選択列のセルすべてを、ソース−ドレイン導通状態にすることができる。
【0038】
その後、選択セルに関連するWL136に1つ以上の読出しきい値電圧を印加してもよく、選択セルのプログラム状態を、ビット線134および選択列のその他のセルに電流が流れるか否かに基づいて、判別してもよい。読出動作はこのようにして、所与の読出しきい値電圧が選択されたセルを導通状態にするのに十分であるか否かを評価し、列に電流を流すのに必要な印加電圧が高いほど、フローティングゲート上の蓄積電荷量は多い。
【0039】
いくつかの実施の形態では、第1ページのデータを、SLCモードのセルの選択行に沿ってセルに書込む。第1ページのデータは、何らかの順序の論理0と1のビットシーケンスを構成するであろう(たとえば00101111010000100…)。各セルには1ビットが格納されるであろう。論理1を格納すべきセルは、プログラミング力を受けない(または最小プログラミング力を受ける)ことによって、「11」分布150の範囲内の電荷レベルを有することができる。論理0を格納すべきセルは、電荷レベルを「00」分布154の範囲内に引上げるのに十分なプログラミング力を受けるであろう。
【0040】
格納されたビットシーケンスをSLCから読出す場合、今度は読出しきい値電圧T2を各セルに印加すればよく、格納状態(論理1または0)は、この読出しきい値電圧を印加した結果セルが導通状態になったか否かに基づいて判別すればよい。
【0041】
次に、第2ページのデータをSLCセルに実質的に上書きすることにより、セルをMLC形態に変換してもよい。先に述べたのと同じく、第2ページのデータは論理0と1のビットシーケンスを構成し、各セルには第2ページのデータのうちの1ビットが格納されるであろう。論理1を格納すべきセルは、それ以上プログラム力を受けないであろう。論理0を格納すべきセルは、次に高い分布に電荷レベルを増分するのに十分な追加の電荷を受けるであろう。
【0042】
論理1を「11」分布150内のプログラムされたメモリセルに書込む場合、電荷を追加することによってこのセルは「01」分布152に移行するであろう。同様に、論理1を「00」分布154内のプログラムされたメモリセルに書込む場合、電荷を追加することによってこのセルは「10」分布156に移行するであろう。いずれの場合も、プログラムされたセルのLSB(右端のビット)は第1ページのデータのビット値を示し、プログラムされたセルのMSB(左端のビット)は第2ページのデータのビット値を示す。
【0043】
理想的なのは、分布150〜156が十分な間隔を保っていることにより、異なるしきい値T1〜T4によってセルのプログラム状態を正確に識別できることである。しかしながら、時間の経過に伴い、消耗、読出ディスターブ、書込ディスターブ、温度、電荷ドリフト、製造許容差等のさまざまな影響が、
図8において点線で示した分布152のシフトのように、所与の分布内のセルのドリフトを引起す可能性がある。シフトされた分布152のメモリセルのうちのいくつかは、実際のプログラム状態01ではなくプログラム状態11を格納しているものとして検出されるであろうことがわかる。電荷ドリフトの結果、総電荷蓄積量が増加または減少し、
図8の分布の右方向のシフトが生じる可能性もある。
【0044】
図9は、さまざまな実施の形態に従う、メモリセル162内のプログラミングドリフトを修正するように動作可能な部分再プログラミング回路160を示す。フラッシュメモリセルの場合、プログラミングドリフトは、
図8に示されるような電荷ドリフトの形態であってもよい。その他、メモリセルは、PCRAMセル、RRAMセル、STRAMセル等の異なる形態を取ってもよく、プログラミングドリフトは、相変化ドリフト、抵抗ドリフト、減磁等の形態であってもよい。
【0045】
部分再プログラミング回路160は、再プログラミング力をメモリセル162に与えることにより、このセルを以前のプログラム状態に戻す。再プログラミング力は、時間、パルス幅、電荷移動量、印加電界強度等の点で、通常のプログラミング力よりも少ない。このようにして、回路160は、現在のプログラミング状態を「微調整」することによってプログラミング分布を引き締める。
【0046】
いくつかの実施の形態において、部分再プログラミング回路160は、コントローラ108もしくは読出/書込/消去(R/W/E)回路114の一部を形成するか、または、これらその他の回路とインターフェイスするスタンドアローン回路である。回路160は、検出または推定されたビットエラーレート(BER)、時間情報、温度測定値、累積書込/消去(W/E)回数等を含むいくつかの制御入力を用いることにより、再プログラミング力を与えるべきメモリセル候補を識別してもよい。ルックアップテーブル164は、さまざまな環境条件または状況の下で回路160が特定のセルを再プログラムできるようにするために使用されるプロファイル情報を格納することができる。
【0047】
図10は、たとえば選択行に沿って1グループのMLCから2ページ(ブロック)のデータを読出すように動作可能な
図2の読出/書込/消去回路114の読出部170を示す。コマンドデコーダブロック172は、読出コマンドを処理し、1つ以上のデジタル読出しきい値Tを、デジタルアナログ(DAC)/ドライバ回路174に出力する。これに対し、DAC/ドライバ174は、対応するアナログゲート電圧を(
図9のメモリセル162によって表される)各セルに出力する。電源電圧Vsが電源176によって印加される。セルの導通状態は、比較器178と、電源180からの適切な基準電圧Vrを用いることによって、検知される。検知されたデータは、出力バッファ182に与えられ、出力バッファは格納データを別々に格納する(それぞれページ1およびページ2)。
【0048】
各セルの格納状態の検知には、複数のしきい値が必要であろう。電圧しきい値T2を最初に印加することにより、MSBのページ1のデータの格納状態を検知することができる。次に、電圧しきい値T1およびT3を印加することにより、LSBのページ2のデータの格納状態を検知することができる。しきい値T2がセルを導通状態にした場合は、次にT1を印加することにより、セルが分布150にあるのか152にあるのか判別すればよい。同様に、しきい値T2がセルを導通状態にしなかった場合は、T3の印加によってセルが分布154にあるのか156にあるのか判別されるであろう。
【0049】
このように、格納状態11、01、00または10を容易に判別することができ、第1(MSB)ビットは第1ページにおけるビットを示し、第2(LSB)ビットは第2ページにおけるビットを示す。上記ステップを各MLCについて繰り返すことにより、第1および第2ページについて、回復されたビットシーケンスが生じるであろう。
【0050】
セルのプログラミングは、
図10に示されるように読出/書込/消去回路114の書込回路部190によって実行することができる。チャージポンプ機構を用いることにより、離散的な量の蓄積電荷が順次選択されたセル162に移動し、それにより、電荷の総蓄積量が所望のプログラミング分布まで引上げられる。
【0051】
電圧源192は、プログラミング電圧を、キャパシタ194またはその他の電荷蓄積素子に供給する。パワーMOSFETまたはそれ以外の適切な装置の形態であってもよい、選択的に起動されたスイッチ196が周期的に閉じることにより、蓄積された電荷をキャパシタ194から選択されたメモリセル162に移動させる。
【0052】
図10の読出回路170を用いることにより、電荷の蓄積中に、いくつかのプログラムベリファイ(PV)読出しきい値電圧のうちの1つを、セルに周期的に印加することができる。いくつかの実施の形態において、
図11のプログラム処理は、セル162が特定のPV読出しきい値に反応して導通状態になることがなくなるまで、続く。選択されたセルに対するプログラミング処理はその時点で終了する。
【0053】
図12は、プログラムされたメモリセルの分布について、もう1つの分布曲線198を示す。一連の電圧しきい値の印加により、この分布の大きさおよび形状を判別することができる。
図12に示されるように、低い方のベースラインしきい値Vaを、ベースラインしきい値よりもわずかに低いおよびわずかに高い(たとえば+/−5%等)増分されたしきい値(Va−,Va+)とともに印加することによって、分布曲線198の低い方の境界を特徴付けることができる。同様に、高い方のベースラインしきい値Vbとそれに関連する増分されたしきい値Vb−、Vb+を印加することにより、分布曲線198の高い方の境界を特徴付けることができる。
【0054】
図13は、通常プログラミングおよび部分プログラミング力の間に
図11の書込回路190によって与え
図10の読出回路170によって検知することができる、大きさが異なるプログラミング増分を示す。書込回路190によって、蓄積された電荷の相対的に大きいプログラミング増分200を与えることにより、メモリセルを初期状態にプログラムしてもよく、次に、書込回路190によって、蓄積された電荷の相対的に小さい再プログラミング増分202を与えることにより、このセルを初期プログラム状態に戻してもよい。
【0055】
たとえば、再び
図7を参照して、初期プログラム状態11の消去されたメモリセルは、蓄積電荷の総量を、電圧V2よって設定されたしきい値と電圧V3によって設定されたしきい値の間のレベルになるまで増加させるための、5または6(5〜6)個の増分200を与えることによって、00状態にプログラムしてもよい。
【0056】
その後、メモリセルのフローティングゲートから電荷が漏れて電荷の総量がしきい値V2の方向にドリフトすると、蓄積電荷の相対的に小さい部分プログラミング増分202を1つ以上与えることによって、メモリセルを以前のプログラム状態(たとえば蓄積電荷の総量が名目上以前と同一)に戻すことができる。
【0057】
この部分プログラミングシーケンスは
図14に示されている。セルの最初の分布を、分布曲線204によって示される特定の状態にプログラムする。時間の経過に伴い、セルのうちの少なくともいくつかが電荷を失い、曲線206で示されるドリフトされた分布になる。
【0058】
部分プログラミングの増分202を与えると、曲線208で示されるように分布全体が増す。増分202を引続き与えると、最終の部分プログラミング分布(曲線210)は、名目上元の曲線204と一致するであろう。
【0059】
図14のメモリセルの部分再プログラミングによって、完全な1サイクルの消去およびプログラミングを回避することにより、セルの消耗を減じメモリモジュール内におけるデータのコピーの総数を減じることができる。
【0060】
図15は、さまざまな実施の形態に従い実行されるステップを説明する部分再プログラミングルーチン220のフローチャートである。説明のために、ルーチン220を、
図2〜
図6に示されるフラッシュメモリアレイとの関連で述べる。これは例示であって限定ではない。
【0061】
ステップ222で、メモリセルを選択状態にプログラムする。これは、希望に応じて、プログラム状態が1ページのデータに対応するかまたは複数ページのデータに対応する、SLC状態またはMLC状態であってもよい。プログラム状態は、
図7の分布曲線で表される状態から選択された1つの状態(たとえば11、01、00または10)であってもよい。
【0062】
選択されたある時間間隔の後、ステップ224で、このセルを部分再プログラミングの候補であると識別する。これはさまざまなやり方で実行できる。メモリセルの保持時間を、このセルが過度の劣化なしでプログラム状態を維持し得る経過時間として計算することができる。セルがそのプログラム状態を維持した実際の時間が計算された保持時間に等しくなるかそれ以上になった場合、このセルを部分再プログラミングの候補としてマークしてもよい。
【0063】
その代わりに、セルに対して読出動作を行なってもよく、このセルを含むメモリのブロックのビットエラーレート(BER)が予め定められたしきい値を超える場合がある。その他の実施の形態では、このブロックの書込/消去回数が、このセルを評価する必要があることを示す特定のしきい値に達する場合がある。さらに他の実施の形態では、セルおよび/または隣接するセルに対して、読出ディスターブデータの可能性を示すのに十分多い回数の読出動作が行なわれる。その他任意の適切な要因、パラメータ、測定値、またはそれ以外の徴候を用いて、スケジュールに基づく全セルの周期的な再プログラミングを含む、部分再プログラミングの候補として、セルを識別することができる。
【0064】
次にステップ226で、選択されたメモリセルに対して電圧しきい値テストを実行する。これは、
図12に示されるような1つ以上の電圧しきい値を印加してセルのプログラム状態を確認することを含み得る。
【0065】
セルが十分なプログラミング劣化を示している場合、このルーチンは判定ステップ228からステップ230に進み電荷の1つ以上の増分をこのセルに与える。これは、
図11の回路190を用いて
図13の小さい増分202を与え、続いてステップ232に示されるように
図12の回路180によって適切な読出/プログラムベリファイ電圧しきい値を与えることを含み得る。このプロセスは、判定ステップ234で示されるように、セルが適切なレベルに回復するまで続行される。その後、ステップ236で、このセルは再プログラムされたものとしてマークされる。これは、上記メモリセルの関連メタデータにおける記録を含み得るものであり、セルがいつ再プログラムされたかを示すための日付/タイムスタンプを含んでもよい。その後ルーチンはステップ238で終了する。
【0066】
本明細書で先に述べた部分再プログラミングを適用することによって、データの再書込および消去の発生頻度の低下が可能であることがわかる。それでもなお必要に応じてガーベジコレクション動作を行なうことはできるが、所与のGCU内のデータは、データリフレッシュが必要な状態ではなく(すなわち十分に古いためにプログラミングドリフトが生じた)、概ね古い(すなわち修正の範囲を超えている)という前提がある。
【0067】
必ずしもプログラムセルの最初の一組のすべてのセルを再プログラムする訳ではない。むしろ、ビットエラーを示しているセルを評価およびプログラミングの対象とすればよく、残りのセルはそのままにしておけばよい。同様に、プログラミングドリフトが生じる可能性がより高いプログラミング状態のセル(たとえば「10」にプログラムされたセル等)を部分的に再プログラムしてもよく、残りのセルはそのままにしておけばよい。その他の場合は、一行のメモリセルのうちのすべてのセルをプログラミングドリフトについて評価し最悪Xパーセント(たとえば最悪20%等)を部分的に再プログラムし残りのセルはそのままにしておく。
【0068】
フラッシュメモリセルに関連して本明細書に開示されているさまざまな実施の形態では、ドリフトメカニズムとして電荷レベルの低下を検討してきたが、状況によっては過剰な読出の場合のように電荷の増加が発生することが考えられる。追加量の電荷をゲートに加えるのではなく、プログラミング電圧の他の組を与えて電荷のごく一部をフローティングゲートから抜くように、書込回路を構成することが可能である。同様に、その他の種類のメモリセルに対しては双方向プログラミング調整を適用することもできる。
【0069】
さまざまな実施の形態の構造および機能の詳細と併せて、本開示のさまざまな実施の形態の数多くの特徴および利点について上記説明の中で述べてきたが、この詳細な説明は例示にすぎず、以下の請求項を表現する用語の広い一般的な意味によって示される全範囲の本開示の原理の中で、詳細事項、特に構成要素の構造および配置を変更してもよいことが、理解されるはずである。