(58)【調査した分野】(Int.Cl.,DB名)
前記プログラムする段階と前記判別する段階とはループを構成し、前記目標状態の各々の検証動作は現在のループが決定された前記開始点の各々に対応するループに到逹するまで省略されることを特徴とする請求項1に記載の方法。
【発明を実施するための形態】
【0009】
以上の本発明の目的、他の目的、特徴及び利点は添付の図面と関連する以下の望ましい実施形態を通じて容易に理解することができる。しかし、本発明はここで説明する実施形態に限定されず、他の形態への具体化も可能である。さらに、ここで紹介する実施形態は開示された内容が徹底且つ完全になれるように、そして当業者に本発明の思想を十分に伝達するように提供されるものである。
図面において、本発明の実施形態は、示した特定形態に制限されず、明確性のために誇張されたものである。また明細書の全体にかけて同一の参照番号は、同一の構成要素を示す。
【0010】
本明細書で使われた用語「及び/または」は、これと関連して記載された項目のうち、1つまたはそれ以上の任意の組合わせまたはあらゆる組合わせを含み、”/”として縮約して記載されることもある。また、「連結」または「結合」されていると記載された場合、ある要素は、他の要素に直接連結または結合されるか、それらの間に第3の要素が介在されうる。本明細書で、単数として使われた用語は、それについての単数であることを示す明白な背景に関する言及がない限り、複数も含むものである。 本明細書で使われる「包含する」という用語は、言及された構成要素が1つまたはそれ以上の他の構成要素の存在または付加を除外するものではない。
【0011】
図1は、本発明の例示的な実施形態によるフラッシュメモリ装置を概略的に示すブロック図である。
図1を参照すると、フラッシュメモリ装置は、例えば、NANDフラッシュメモリ装置である。しかし、本発明は、NANDフラッシュメモリ装置に限らない。フラッシュメモリ装置は、行(ワードライン:WL)と列(ビットライン:BL)とに配列されたメモリセルを有するメモリセルアレイ100を含む。各メモリセルは、1ビットデータまたはMビット(マルチビット)データ(Mは、2またはそれより大きい整数)を格納する。各メモリセルは、フローティングゲートまたは電荷トラップ層のような電荷格納層を有するメモリセル、可変抵抗素子を有するメモリセル、またはそれらのようなものにより実現可能である。メモリセルアレイ100は、周知の断層アレイ構造(single−layer array structure)(または、2次元アレイ構造という)または多層アレイ構造(multi−layer array structure)(または、3次元アレイ構造という)を有するように実現される。例示的な3次元アレイ構造は、特許文献1及び特許文献2に記載されており、この出願のレファレンスとして含まれる。
【0012】
行デコーダ回路200は、メモリセルアレイ100の行に対する選択及び駆動動作を実行するように構成される。電圧発生回路300は、制御ロジック400によって制御され、プログラム、消去、及び読み出し動作に必要な電圧(例えば、プログラム電圧、パス電圧、消去電圧、読み出し電圧など)を生成するように構成される。読み出し/書き込み回路500は、制御ロジック400によって制御され、動作モードに応じて感知増幅器としてまたは書き込みドライバとして動作する。例えば、読み出し動作の間、読み出し/書き込み回路500は、選択された行のメモリセル(または、選択されたメモリセル)からデータを感知する感知増幅器として動作する。そのように読み出されたデータは、決められた入出力単位で入出力回路600を通じて外部に提供される。プログラム動作の間、読み出し/書き込み回路500は、プログラムデータによって選択された行のメモリセルを駆動する書き込みドライバとして動作する。読み出し/書き込み回路500は、ビットラインにまたはビットライン対に各々対応するページバッファを含む。メモリセルの各々がマルチビット/マルチレベルデータを格納する場合、読み出し/書き込み回路500の各ページバッファは、2個またはそれより多いラッチを有するように構成される。入出力回路600は、外部(例えば、メモリ制御器またはホスト)とインターフェースするように構成される。
【0013】
制御ロジック400は、フラッシュメモリ装置の全般的な動作を制御するように構成されて、パスビット検出器410、パス/フェイル判別器420、レジスタ430を含む。パスビット検出器410には検証読み出し動作の間読み出し/書き込み回路500によって読み出されたデータが提供される。パスビット検出器410は、検証読み出し動作の間読み出し/書き込み回路500から提供される読み出されたデータに基づいて、選択されたメモリセルのうちの少なくとも1つのスレッショルド電圧が検証レベルと同一であるか、またはより高いか(または、少なくとも1つのメモリセルがプログラムパスされたか否か)を判別する。選択されたメモリセルのうちの少なくとも1つがプログラムパスされたと判別されると、制御ロジック400は、プログラムパスされたループに対応するプログラム電圧と、検証レベルの間の電圧差に基づいて次に実行される検証読み出し動作の開始点(または、ループ)を決定/予測する。次に実行される検証読み出し動作の開始点(または、ループ)が決められるまで次に実行される検証読み出し動作は、省略され、これは、以後詳細に説明する。
【0014】
制御ロジック400は、プログラムパスされたループを示す情報(または、パスビット情報という)をレジスタ430に格納する。そのように格納されたパスビット情報は、パスビットを検出するのが難しい検証条件で検証読み出し動作の開始点(またはループ)を予測/決定するのに用いられる。これは、以後詳細に説明する。または、プログラムパスされたループを示すパスビット情報は、外部(例えば、メモリ制御器)に提供することもできる。パス/フェイル判別器420は、検証読み出し動作の間読み出し/書き込み回路500から提供される読み出されたデータに基づいて、選択されたメモリセルが全部プログラムパスされたか否かを判別する。
【0015】
例示的な実施形態において、パス/フェイル判別とパスビット検出の順序は、多様に変更することができる。例えば、パスビット検出は、パス/フェイル判別に先立って行うことができる。または、パスビット検出は、パス/フェイル判別の次に行うことができる。または、パス/フェイル判別は、パスビットが検出されたか否かによって行うこともできる。
【0016】
図2は、オールビットラインメモリ構造または、オッドイーブンメモリ構造のためにメモリセルアレイをメモリブロックに構成する例を示す図である。メモリセルアレイ100の例示的な構造を説明する。一例として、メモリセルアレイ100が1024個のメモリブロックに分けられたNANDフラッシュメモリ装置を説明する。各メモリブロックに格納されたデータは、同時に消去可能である。一実施形態において、メモリブロックは、同時に消去される格納素子の最小単位である。各メモリブロックには、例えば、ビットライン(例えば、1KBのビットライン)に各々対応する複数の列がある。オールビットライン(all bit line:ABL)構造と称する一実施形態において、メモリブロックのすべてのビットラインは、読み出し及びプログラム動作の間同時に選択することができる。共通ワードラインに属し、すべてのビットラインと接続された格納素子は、同時にプログラムすることができる。
【0017】
例示的な実施形態において、同一の列に属した複数の格納素子は、NANDストリング111を構成するように直列接続されている。NANDストリングの一端子は、ストリング選択ラインSSLによって制御される選択トランジスタを通じて対応するビットラインに接続され、他の端子は、接地選択ラインGSLによって制御される選択トランジスタを通じて共通ソースラインCSLに接続されている。
【0018】
オッドイーブン構造(odd−even architecture)と称する他の例示的な実施形態において、ビットラインは、イーブンビットラインBLeとオッドビットラインBLoとに区分される。オッド/イーブンビットライン構造において、共通ワードラインに属し、オッドビットラインと接続された格納素子が第1時間にプログラムされる一方、共通ワードラインに属し、イーブンビットラインと接続された格納素子は、第2時間にプログラムされる。データは、他のブロックにプログラムすることも出来、他のメモリブロックから読み出すことも出来る。このような動作は、同時に実行することができる。
【0019】
図3A〜
図3Cは、メモリセルに格納されるデータビットの数によるスレッショルド電圧分布を概略的に説明するための図である。
【0020】
1つのメモリセルに2ビットデータ(または、4レベルデータ/2ページデータ)が格納される場合、
図3Aに示したように、フラッシュメモリ装置のメモリセルの各々は、4個のスレッショルド電圧分布10、11、12、13のうちのいずれか1つに属するスレッショルド電圧を有する。ここで、スレッショルド電圧分布10は、消去されたメモリセルのスレッショルド電圧を含み、残りのスレッショルド電圧分布11〜13は、プログラムされたメモリセルのスレッショルド電圧を含む。電圧VP1、VP2、VP3は、メモリセルがスレッショルド電圧分布11〜13に各々プログラムされたか否かを判別するための検証読み出し電圧を示す。選択されたワードラインのメモリセルのスレッショルド電圧は、4レベルデータ(または、2ページデータ)が選択されたワードラインのメモリセルにプログラムされた後、
図3Aに示したように分布される。
【0021】
1つのメモリセルに3ビットデータ(または、8レベルデータ/3ページデータ)が格納される場合、
図3Bに示したように、メモリセルの各々は、8個のスレッショルド電圧分布20〜27のうちのいずれか1つに属するスレッショルド電圧を有する。スレッショルド電圧分布20は、消去されたメモリセルのスレッショルド電圧を含み、残りのスレッショルド電圧分布21〜27は、プログラムされたメモリセルのスレッショルド電圧を含む。電圧VP1〜VP7は、メモリセルがスレッショルド電圧分布21〜27に各々プログラムされたか否かを判別するための検証読み出し電圧を示す。選択されたワードラインのメモリセルのスレッショルド電圧は、8レベルデータ(または、3ページデータ)が選択されたワードラインのメモリセルにプログラムされた後、
図3Bに示したように分布される。
【0022】
1つのメモリセルに4ビットデータ(または、16レベルデータ/4ページデータ)が格納される場合、
図3Cに示したように、メモリセルの各々は、16個のスレッショルド電圧分布30〜45のうちのいずれか1つに属するスレッショルド電圧を有する。スレッショルド電圧分布30は、消去されたメモリセルのスレッショルド電圧を含み、残りのスレッショルド電圧分布31〜45は、プログラムされたメモリセルのスレッショルド電圧を含む。電圧VP1〜VP15は、メモリセルがスレッショルド電圧分布31〜45に各々プログラムされたか否かを判別するための検証読み出し電圧を示す。選択されたワードラインのメモリセルのスレッショルド電圧は、16レベルデータ(または、4ページデータ)が選択されたワードラインのメモリセルにプログラムされた後、
図3Cに示したように分布される。
【0023】
図4は、選択されたワードラインのメモリセルをプログラムするための一連のプログラムパルスを示す図である。
一般的なプログラム方式において、プログラム電圧Vpgmは、一連のパルスでメモリセルすなわち、格納素子の制御ゲートに印加される。パルスの大きさは、所定のステップの大きさだけ各連続パルス(each successive pulse)とともに増加する。プログラムパルスの間の区間で、検証動作(または、検証読み出し動作)が実行される。すなわち、同時にプログラムされる格納素子(すなわち、選択されたワードラインに属した格納素子)の各々のプログラミングレベル(または、スレッショルド電圧)は、格納素子がプログラムされる検証レベルより大きいか、または同一であるかを決めるために連続プログラムパルスの間で読み出される。
【0024】
マルチレベルフラッシュメモリ素子のアレイの場合、格納素子が自己のデータと関連する検証レベル(its data−associated verify level)に到達したか否かを決めるために格納素子の各状態に対して検証動作が実行される。例えば、
図4に示したように、データを4個の状態/レベルに格納することができるマルチレベルメモリ素子(例えば、4レベルMLC)は、3個の比較ポインタVP1、VP2、VP3に関連して検証動作を要する。同様に、データを8個の状態/レベルに格納することができるマルチレベルメモリ素子(例えば、8レベルMLC)は、7個の比較ポインタVP1〜VP7に関連して検証動作を実行しなければならない。データを16個の状態/レベルに格納することができるマルチレベルメモリ素子(例えば、16レベルMLC)の場合、15個の比較ポインタVP1〜VP15に関連して検証動作を実行しなければならない。
【0025】
以上の説明から理解されるように、単位面積当たりの容量を増加させるためにマルチレベルセルを採用することによって、プログラム時間を徐々に増加させる。具体的には、状態/レベルの数に比例して検証動作の数が増加し、このような検証時間は、全体のプログラム時間に大きい比重を占める。本発明の例示的な実施形態によるフラッシュメモリ装置は、状態/レベルの数に比例して検証動作の数が増加しても検証時間の増加を最小化することができる適応的な検証スキームを採用し、これは、以下詳細に説明する。
【0026】
図5は、本発明の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を概略的に説明するための図である。説明する前に、本発明の例示的な実施形態によるフラッシュメモリ装置がセルあたり4ビットデータを格納し、3ステッププログラム方式によってプログラム動作を実行すると仮定する。3ステッププログラム方式によるプログラム方法は、以下説明する。
【0027】
先ず、選択されたワードラインのメモリセルには、2ページデータ(すなわち、第1及び第2ページデータ)が同時に格納される。この時、
図5Aに示したように、消去状態Eに対応するスレッショルド電圧分布に属したメモリセルは、プログラムされるデータによってプログラム状態Q1、Q2、Q3に各々対応するスレッショルド電圧分布に属したスレッショルド電圧を有するようにプログラムされる。
【0028】
次に、選択されたワードラインのメモリセルには、2ページデータすなわち、第3及び第4ページデータが同時に格納される。この時、
図5Bに示したように、消去状態Eに対応するスレッショルド電圧分布に属したメモリセルは、プログラムされるデータによってプログラム状態P1’〜P3’に各々対応するスレッショルド電圧分布に属したスレッショルド電圧を有するようにプログラムされる。
図5Aのプログラム状態Q1に対応するスレッショルド電圧分布に属したメモリセルは、プログラムされるデータによってプログラム状態P4’〜P7’に各々対応するスレッショルド電圧分布に属したスレッショルド電圧を有するようにプログラムされる。
図5Aのプログラム状態Q2に対応するスレッショルド電圧分布に属したメモリセルは、プログラムされるデータによってプログラム状態P8’〜P11’に各々対応するスレッショルド電圧分布に属したスレッショルド電圧を有するようにプログラムされる。
図5Aのプログラム状態Q3に対応するスレッショルド電圧分布に属したメモリセルは、プログラムされるデータによってプログラム状態P12’〜P15’に各々対応するスレッショルド電圧分布に属したスレッショルド電圧を有するようにプログラムされる。
【0029】
ここで、スレッショルド電圧分布P1’〜P15’を決めるのに用いられる検証電圧VP1’〜VP15’は、最終スレッショルド電圧分布P1〜P15(
図5C参照)を決めるのに用いられる検証電圧VP1〜VP15より低い。例えば、スレッショルド電圧分布P1’を決めるのに用いられる検証電圧VP1’は、対応する最終スレッショルド電圧分布P1を決めるのに用いられる検証電圧VP1より低い。
図5Bに示したスレッショルド電圧分布を有するようにメモリセルをプログラムする動作は、以下コースプログラム動作(coarse program operation)と称する。
【0030】
最後に、最終スレッショルド電圧分布P1〜P15を有するようにスレッショルド電圧分布P1’〜P15’に属したメモリセルがプログラムされる。このような動作は、以下ファインプログラム動作(fine program operation)(または、再プログラム動作という)と称する。
【0031】
図5A、
図5B、
図5Cで各々説明したプログラム手順は、連続的にまたは非連続的に行うことができ、メモリセルが所望するスレッショルド電圧分布のスレッショルド電圧を有するようにプログラムされたか否かを判別するための検証動作を含む。これは、以下詳細に説明する。
【0032】
図6及び
図7は、
図5Aで説明したプログラム手順の検証方式を説明するための図である。以下、
図5Aで説明したプログラム手順の検証方式は、
図6及び
図7を参照して詳細に説明する。
【0033】
選択されたワードラインに属したメモリセルにプログラム電圧Vpgmが印加された後、プログラム状態Q1を検証するための検証電圧が選択されたワードラインに印加される。この時、
図6に示したように、プログラム状態Q2、Q3に対する検証動作は、実行されない。検証電圧が選択されたワードラインに印加された後、読み出し/書き込み回路500は、選択されたワードラインのメモリセルからデータを読み出す。次に、制御ロジック400のパスビット検出器410は、読み出されたデータに基づいて選択されたワードラインのメモリセルのうち少なくとも1つのスレッショルド電圧が検証レベル/電圧と同一であるか、またはそれより高いかを検出する。もし検出されないと、手順は、プログラム電圧Vpgmが所定の増加分だけ増加した後、次のループに進行する。もし検出されると、残りのプログラム状態Q2、Q3の検証動作が開始される時点(以下、検証開始点または検証開始ループという)が予測される。さらに具体的に説明すると、次の通りである。
【0034】
例えば、
図7を参照すると、検証電圧VQ1と同一であるか、またはそれより高いスレッショルド電圧を有する少なくとも1つのメモリセルが検出されると、制御ロジック400は、検証電圧VQ1、VQ2の電圧差△Vと検出されたメモリセルに印加されたプログラム電圧Vpgmとの和に対応するプログラム電圧Vpgmが印加されるループをプログラム状態Q2の検証開始点/検証開始ループとして決める。検証電圧の間の電圧差が一定であると仮定すると、制御ロジック400は、検証電圧VQ1、VQ3の電圧差2△Vと検出されたメモリセルに印加されたプログラム電圧Vpgmとの和に対応するプログラム電圧Vpgmが印加されるループをプログラム状態Q3の検証開始点/検証開始ループとして決める。プログラム状態Q2、Q3の検証動作は、
図6に示したように、そのように決められた検証開始点/検証開始ループまで行われない。
【0035】
例示的な実施形態において、パスビットが検出されたループ(または、パスビットとして判別されたメモリセルに印加されるプログラム電圧)は、制御ロジック400のレジスタ430に格納することができる。または、パスビットが検出されたループ(または、パスビットとして判別されたメモリセルに印加されるプログラム電圧)は、制御ロジック400の制御下で外部(例えば、メモリ制御器)に提供することができる。
【0036】
上述のように、パスビット検出が行われる前後にパス/フェイル判別がパス/フェイル判別器420を通じて行われる。または、パスビットが検出された後にパス/フェイル判別が行われる。プログラム状態Q1、Q2、Q3の各々がプログラムパスとして判別される時、プログラムパスされた状態に対する検証動作は、終了する。これは、プログラムパスされたメモリセルのビットラインをプログラム禁止電圧に設定することによってなされる。
【0037】
図8及び
図9は、
図5Bで説明したプログラム手順の検証方式を説明するための図である。以下、
図5Bで説明したプログラム手順の検証方式は、
図8及び
図9を参照して詳細に説明する。
【0038】
選択されたワードラインに属したメモリセルにプログラム電圧Vpgmが印加された後、プログラム状態P1’を検証するための検証電圧が選択されたワードラインに印加される。この時、
図8に示したように、残りのプログラム状態P2’〜P15’に対する検証動作は、実行されない。検証電圧が選択されたワードラインに印加された後、読み出し/書き込み回路500は、選択されたワードラインのメモリセルからデータを読み出す。次に、制御ロジック400のパスビット検出器410は、読み出されたデータに基づいて選択されたワードラインのメモリセルのうち少なくとも1つのスレッショルド電圧が検証電圧/レベルと同一であるか、またはそれより高いかを検出する。もし検出されないと、手順は、プログラム電圧Vpgmが所定の増加分だけ増加した後、次のループに進行する。もし検出されると、残りのプログラム状態P2’〜P15’の検証動作が開始される検証開始点/検証開始ループが制御ロジック400によって予測される。さらに具体的に説明すると、次の通りである。
【0039】
例えば、
図9に示したように、検証電圧VP1’と同一であるか、またはそれより高いスレッショルド電圧を有する少なくとも1つのメモリセルが検出されると、制御ロジック400は、検証電圧VP1’、VP2’の電圧差△V1と検出されたメモリセルに印加されたプログラム電圧Vpgmとの和に対応するプログラム電圧Vpgmが印加されるループをプログラム状態P2’の検証開始点/検証開始ループとして決める。検証電圧の間の電圧差が一定であると仮定すると、制御ロジック400は、検証電圧VP1’、VP3’の電圧差2△V1と検出されたメモリセルに印加されたプログラム電圧Vpgmとの和に対応するプログラム電圧Vpgmが印加されるループをプログラム状態P3’の検証開始点/検証開始ループとして決める。残りのプログラム状態P4’〜P15’の検証開始点/検証開始ループも上述と同様に決められる。
図8から分かるように、プログラム状態P2’〜P15’の検証動作は、そのように決められた検証開始点/検証開始ループまで行われない。
【0040】
例示的な実施形態において、コースプログラム動作を実行する時、検出されたパスビット位置を示すパスビット情報(または、パスビットが検出されたループ/ループのプログラム電圧を示す情報)を制御ロジック400のレジスタ430に格納する。レジスタ430に格納されたパスビット情報は、ファインプログラム動作を実行する時、最終プログラム状態P1〜P15の検証開始点/検証開始ループを予測/決定するのに用いることができる。
【0041】
他の例示的な実施形態において、制御ロジック400の制御の下に検出されたパスビット位置を示すパスビット情報(または、パスビットが検出されたループ/ループのプログラム電圧を示す情報)を外部(例えば、メモリ制御器)に出力することが可能である。外部に出力されたパスビット情報は、現在選択されたワードラインのメモリセルに対するファインプログラム動作を実行するのに用いることができる。
【0042】
図10及び
図11は、
図5Cで説明したプログラム手順の検証方式を説明するための図である。以下、
図5Cで説明したプログラム手順の検証方式は、
図10及び
図11を参照して詳細に説明する。
【0043】
上述と異なり、
図10に示したように、制御ロジック400は、選択されたワードラインの以前ページ/以前ステッププログラム手順で検出されたパスビットを示すパスビット情報(例えば、プログラム電圧またはループを示す)に基づいてプログラム状態P1〜P15の検証開始点(または、検証開始ループ)を予測/決定する。例えば、
図11を参照すると、制御ロジック400は、選択されたワードラインの以前ページ/以前ステッププログラム手順で検出されたパスビットを示すパスビット情報に基づいてプログラム状態P1の検証開始点/検証開始ループを予測し、検証電圧VP1、VP2の電圧差△V2と検出されたパスビットに対応するループのプログラム電圧Vpgmとの和に対応するプログラム電圧Vpgmが印加されるループをプログラム状態P2の検証開始点/検証開始ループとして決める。検証電圧の間の電圧差が一定であると仮定すると、制御ロジック400は、検証電圧VP1、VP3の電圧差2△V2と検出されたパスビットに対応するプログラム電圧Vpgmとの和に対応するプログラム電圧Vpgmが印加されるループをプログラム状態P3の検証開始点/検証開始ループとして決める。残りのプログラム状態P4〜P15の検証開始点/検証開始ループも上述と同一に予測/決定する。
【0044】
図5Cに示したプログラム方式の場合、予測された/決定された検証開始点/検証開始ループまでプログラム状態P1〜P15の検証動作は、実行されない。例えば、プログラム状態P1を検証するための検証電圧は、現在ループが予測された/決定された検証開始点/検証開始ループに到逹する時、選択されたワードラインに印加される。この時、
図10に示したように、残りのプログラム状態P2〜P15に対する検証動作は、実行されない。検証電圧が選択されたワードラインに印加された後、読み出し/書き込み回路500は、選択されたワードラインのメモリセルからデータによって読み出される。次に、制御ロジック400のパス/フェイル検出器420は、読み出されたデータに基づいて選択されたワードラインのメモリセルが全部プログラムされたか否かを判別する。もし選択されたワードラインのメモリセルのうち少なくとも1つがプログラムされないと判別されると、手順は、プログラム電圧Vpgmが所定の増加分だけ増加した後、次のループに進行する。もし検出されると、プログラムパスとして判別されたプログラム状態に対する検証動作は、これ以上実行されない。
【0045】
図12Aは、
図5Aで説明したプログラム手順を概略的に示す図であり、
図12Bは、
図5Bで説明したプログラム手順を概略的に示す図であり、
図12Cは、
図5Cで説明したプログラム手順を概略的に示す図である。
【0046】
図12Aに示したように、プログラム状態Q1の検証動作が実行される間にパスビットが検出される。パスビットが検出されると、残りのプログラム状態Q2、Q3の検証開始点/検証開始ループは、制御ロジック400によって予測/決定される。
図12Aと同様に、プログラム状態P1’の検証動作が実行される間に、
図12Bに示したように、パスビットが検出される。パスビットが検出されると、残りのプログラム状態P2’〜P15’の検証開始点/検証開始ループが制御ロジック400によって予測/決定される。この時、パスビットを示すパスビット情報(または、パスビットが検出されたループ/ループのプログラム電圧を示す情報)は、同一のワードラインの次のページのプログラム手順/次のステッププログラム手順(例えば、ファインプログラム段階)の検証開始点/検証開始ループを決めるのに用いられるように制御ロジック400のレジスタ430に格納される。最後に、
図12Cに示したように、最終プログラム状態P1〜P15の検証開始点/検証開始ループは、レジスタ430に格納された情報に基づいて予測/決定される。
【0047】
上述のプログラム方式によると、不要な検証動作を除去することによって、プログラム速度を高めることができる。
図13は、本発明の他の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を説明するための図である。
【0048】
プログラム状態の検証開始点/検証開始ループは、以前状態と目標状態との関係を考慮して可変的に決めることができる。例えば、以前状態と目標状態との間の関係は、2つの場合を含む。一番目の場合は、以前状態と目標状態とが重畳されない場合(または、以前状態が目標状態の検証レベルを超えない場合)である。二番目の場合は、以前状態と目標状態とが重畳される場合(または、以前状態が目標状態の検証レベルを超える場合)である。もし検証される状態が一番目の場合に属すると、目標状態の検証開始点/検証開始ループは、
図13の実線に示した検証開始点/検証開始ループと比較する時、
図13の一点鎖線に示した検証開始点/検証開始ループに延ばされる。一方、もし検証される状態が二番目の場合に属すると、目標状態の検証開始点は、
図13の実線に示した検証開始点/検証開始ループと比較する時、
図13の点線に示した検証開始点/検証開始ループに繰り上げられる。ここで、実線に示した検証開始点/検証開始ループは、
図6または
図8で説明した方式に従って決められる。
【0049】
例えば、
図5Aを参照すると、一番目の場合は、以前状態Eと目標状態Q1〜Q3を含む。このような場合、
図6での説明と異なり、制御ロジック400は、実線の代わりに一点鎖線に示した時点を検証開始点/検証開始ループとして予測/決定する。
図5Aにおいて、二番目の場合は、存在しない。
図5Bを参照すると、一番目の場合は、以前状態Eと目標状態P1’〜P3’、以前状態Q1と目標状態P5’〜P7’、以前状態Q2と目標状態P9’〜P11’、そして以前状態Q3と目標状態P13’〜P15’を含む。このような場合、
図8での説明と異なり、制御ロジック400は、実線の代わりに一点鎖線に示した時点を検証開始点/検証開始ループとして予測/決定する。二番目の場合は、以前状態Q1と目標状態P4’、以前状態Q2と目標状態P8’、そして以前状態Q3と目標状態P12’を含む。このような場合、
図8での説明と異なり、制御ロジック400は、実線の代わりに点線に示した時点を検証開始点/検証開始ループとして予測/決定する。
図5Cを参照すると、二番目の場合は、以前状態P1’〜P15’と目標状態P1〜P15とを含む。このような場合、
図10での説明と異なり、制御ロジック400は、実線の代わりに
点線に示した時点を検証開始点/検証開始ループとして予測/決定する。
図5Cにおいて、一番目の場合は、存在しない。
【0050】
図14は、本発明の他の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を説明するための図である。
図14に示したプログラム方法は、検証開始点の予測が一番目のプログラム状態P1に対するパスビット検出ではなく、同一のワードラインの以前ページプログラム手順/以前ステッププログラム手順で検出されたパスビットの情報に基づいて行われるという点を除けば、
図13と実質的に同一であるので、それに対する説明は、省略する。
【0051】
図13及び
図14の説明から分かるように、検出されたパスビットまたは格納されたパスビットに基づいて、または検出されたパスビットまたは格納されたパスビットと以前状態及び目標状態の関係とに基づいて各状態の検証開始点を決定/予測するのが可能である。
図15は、本発明のまた他の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を概略的に説明するための図である。
【0052】
図15に示したプログラム方法は、周知のシャドウプログラム方式によって実行される。シャドウプログラム方式を利用してプログラム動作を実行する場合にも上述の検証開始点予測方式を同一に適用することができる。例えば、検出されたパスビットまたは格納されたパスビットに基づいてまたは検出されたパスビットまたは格納されたパスビットと以前状態及び目標状態の関係とに基づいて各状態の検証開始点を決定/予測するのが可能である。
【0053】
図16は、本発明のまた他の実施形態によるフラッシュメモリ装置のプログラム方法を説明するためのフローチャートであり、
図17は、マルチビットデータのスレッショルド電圧分布を概略的に示す図である。
【0054】
詳細を説明する前に、プログラム動作には、大きく分けてプログラム実行区間と検証区間とを含むことに留意されたい。プログラム実行区間は、選択されたワードラインのメモリセルのスレッショルド電圧を変化させるための区間であり、検証区間は、プログラム実行区間の間変化されたメモリセルのスレッショルド電圧が対応する目標電圧(または、検証電圧)に各々到達したか否かを判別するための区間である。プログラム実行区間の間、選択されたワードラインにプログラム電圧が印加され、検証区間の間、選択されたワードラインに一連の検証電圧が順に印加される。一連の検証電圧は、各メモリセルに格納されるマルチビットデータを表現するのに必要なスレッショルド電圧分布(すなわち、プログラム状態分布)に各々対応する。プログラムされるデータは、プログラム実行区間以前にフラッシュメモリ装置にロードされる。以前にプログラムされたデータは、必要によってプログラムされるデータのローディング前に読み出されるようにしてもよい。
【0055】
図16を参照すると、S100段階において、変数FLAGとPi_FLAGとが‘0’に設定される。後述するように、変数FLAGは、プログラム状態のうちの最下位プログラム状態(例えば、P1、図
3参照)がパスされたか否かを示すのに用いられ、変数Pi_FLAGは、残りのプログラム状態の各々がパスされたか否かを示すのに用いられる。ここで、プログラム状態のパスは、プログラム状態に対応するメモリセルのスレッショルド電圧が全部検証電圧と同一であるか、またはそれより高いことを示すのに用いられ、プログラム動作のプログラムパスと区別される。
【0056】
S110段階において、プログラム動作が実行される。S110段階は、プログラム実行区間に対応する。S120段階において、変数FLAGが‘1’に設定されたか否かが判別される。もし変数FLAGが‘1’に設定されないと判別されると、手順は、S130段階に進行する。S130段階において、選択されたワードラインに検証電圧が印加された状態で、最下位プログラム状態P1に対する検証読み出し動作が行われる。S140段階において、読み出されたデータに基づいて、最下位プログラム状態P1に対応するメモリセルのスレッショルド電圧が検証電圧と同一であるか、またはそれより高いかが判別される。すなわち、最下位プログラム状態P1がパスされたか否かが判別される。
【0057】
もし最下位プログラム状態P1がパスされたと判別されると、手順は、S150段階に進行する。S150段階では、最下位プログラム状態P1がパス状態として決められ、これは、変数FLAGを‘1’に設定することによって達成される。最下位プログラム状態がパス状態として決められることによって、以後実行されるプログラムループの検証区間の間最下位プログラム状態に対する検証動作は、省略される。S160段階において、残りのプログラム状態の検証終了点が各々予測される。残りのプログラム状態の検証終了点の予測は、次のように行われる。
【0058】
もし最下位プログラム状態P1がパスされたと検出されると、検出された時点(例えば、プログラムループ/プログラム電圧)を基準として残りのプログラム状態がパスされる時点(例えば、プログラムループ/プログラム電圧)を予測するのが可能である。残りのプログラム状態の各々のパス時点は、[Vpgm(i)=Vpgm(pass)+Vdif]によって決められる。ここで、Vdifは、最下位プログラム状態P1の検証電圧と他のプログラム状態の検証電圧との間の電圧差N*△V(Nは、1またはそれより大きい整数)を示し、Vpgm(i)(iは、2またはそれより大きい整数)は、最下位プログラム状態(例えば、P1)を除いた残りのプログラム状態(例えば、P2〜P7)の各々のパス時点のプログラム電圧を示す。Vpgm(pass)は、最下位プログラム状態P1がパスされた時点のプログラム電圧を示す。
【0059】
例えば、各メモリセルに3ビットデータが格納されると仮定すると、図
17に示したように、各メモリセルは、8個のスレッショルド電圧分布E、P1〜P7のうちいずれか1つを有する。スレッショルド電圧分布P1〜P7は、プログラム状態に各々対応し、スレッショルド電圧分布Eは、消去状態に対応する。プログラム状態P1〜P7は、対応する検証電圧Vvfy1〜Vvfy7によって区別される。図
17に示した状態分布度は、隣接したプログラム状態(例えば、P1、P2)に対応する検証電圧(例えば、Vvfy1、Vvfy2)の間の電圧差△Vが同一であるという条件下で示した。しかし、電圧差は、異なるように設定することもできる。
【0060】
最下位プログラム状態P1を除いた残りのプログラム状態のパス時点は、上述のように決められる。そのように決められたパス時点に基づいて残りのプログラム状態の検証終了点が決められる。検証終了点は、[Vpgm(i)_VE=Vpgm(i)−Voffset(i)]によって決められる。ここで、Vpgm(i)_VEは、残りのプログラム状態の各々の検証終了点に対応するプログラム電圧を示し、Voffset(i)は、残りのプログラム状態の各々に対するオフセット電圧を示す。残りのプログラム状態に対するオフセット電圧は、同一に設定される。または、残りのプログラム状態に対するオフセット電圧は、互いに異なるように設定することができる。
【0061】
例示的な実施形態において、予測された検証終了点を示すプログラム電圧を現在プログラムループのプログラム電圧と比較することによって、各プログラム状態が検証終了点に到達したか否かを判別することができる。または、予測された検証終了点を示すプログラム電圧に各々対応するプログラムループを現在プログラムループと比較することもできる。プログラム状態が検証終了点に到達したか否かを判別する方式は、ここに開示されたことに限られない。
【0062】
プログラム状態のパス時点に先立って検証動作が終了することは、プログラム状態に対応するメモリセルのうち一部メモリセルのスレッショルド電圧がプログラム状態に対応する検証電圧より低いことを意味する。すなわち、プログラム状態に対応するメモリセルに格納されたデータは、フェイルビットを含む。そのようなフェイルビットは、メモリ制御器のECCユニットによって訂正される。そのようなフェイルビットは、プログラム速度が遅いメモリセルに関連し、スロービット(slow bit)と称する。
【0063】
残りのプログラム状態(例えば、P2〜P7)の検証終了点が決められれば、手順は、S170段階に進行する。S170段階では、残りのプログラム状態P2〜P7の各々に対する検証動作が実行される。これは、以下詳細に説明する。またS120段階に戻ると、もし変数FLAGが‘1’に設定されたと判別されると、手順は、S170段階に進行する。これは、パスとして処理されたプログラム状態P1に対する検証動作が省略されることを意味する。
【0064】
S170段階で実行される残りのプログラム状態の検証動作は、S160段階で決められた検証終了点に基づいて自動的に終了する。さらに具体的に説明すると、S171段階において、次のプログラム状態(例えば、P2)に対する検証読み出し動作が実行される。プログラム状態P2に対応するメモリセルのスレッショルド電圧が検証電圧Vvfy2と同一であるか、またはそれより高いかが判別される。すなわち、プログラム状態P2に対応するメモリセルが全部プログラムパスされたか否かが判別される。もしプログラム状態P2に対応するメモリセルが全部プログラムパスされたと判別されると、手順は、S173段階に進行する。もしプログラム状態P2に対応するメモリセルのうちの一部がプログラムパスされないと判別されると、手順は、S174段階に進行する。
【0065】
S174段階では、プログラム状態P2(または、現在のプログラムループ/現在のプログラムループで用いられたプログラム電圧)が対応する予測された検証終了点(または、予測された検証終了点に対応するプログラムループ/プログラム電圧)に到達したか否かが判別される。もし現在のプログラムループ(または、現在のプログラムループに用いられたプログラム電圧)が予測された検証終了点に対応するプログラムループに到逹
したと判別されると、手順は、S173段階に進行する。S173段階では、プログラム状態P2のパスを示す変数Pi_FLAGがパス状態として設定される。これは、次のプログラムループでプログラム状態P2に対する検証動作が省略されることを意味する。
【0066】
これに反して、もし現在のプログラムループ(または、現在のプログラムループに用いられたプログラム電圧)が予測された検証終了点に対応するプログラムループに到逹
しないと判別されると、手順は、S175段階に進行する。S175段階では、残りのプログラム状態P2〜P7に対する検証動作が全部実行されたか否かが判別される。もし残りのプログラム状態P2〜P7に対する検証動作が実行されないと判別されると、手順は、S176段階に進行する。S176段階では、次のプログラム状態に対する検証動作のために変数iが‘1’だけ増加する。以後、手順は、S171段階に進行する。
【0067】
もし残りのプログラム状態に対する検証動作が全部実行されたと判別されると、手順は、S180段階に進行し、この段階では、すべてのプログラム状態(例えば、P1〜P7)がパスされたか否かが判別される。プログラム状態(例えば、P1〜P7)のうち一部がパスされないと判別されると、手順は、S190段階に進行する。S190段階では、プログラムループを示す変数LOOPが‘1’だけ増加し、手順は、S110段階に進行する。以後、上述と実質的に同一にプログラムループが決められた回数内で繰り返される。すべてのプログラム状態(例えば、P1〜P7)が全部パスされたと判別されると、プログラム動作は、プログラムパスに処理された後終了する。
【0068】
図18は、
図16で説明したプログラム方法に適用された検証方式の一例を概略的に説明するための図である。
図18に示したように、最下位プログラム状態P1に対応するメモリセルに格納されたビットが全部パスされる時、残りのプログラム状態P2〜P7に対する検証終了点が予測される。現在のプログラムループ(または、プログラム電圧)がプログラム状態の予測された検証終了点に対応するプログラムループ(または、プログラム電圧)に到逹する時、各プログラム状態は、パスとして処理され、次に、各プログラム状態の検証動作は、終了する。
図18で分かるように、予測されたパス時点より検証終了点が速く設定されることによって、プログラム状態P2〜P7の検証動作が検証終了点に各々終了した後プログラム状態P2〜P7の残りの検証動作は、省略される。
【0069】
図19は、
図16で説明したプログラム方法に適用された検証方式の他の例を概略的に説明するための図である。
最下位プログラム状態のパス時点を基準として残りのプログラム状態の検証終了点を決めることと異なり、複数のプログラム状態のうち少なくとも2個のプログラム状態のパス時点を基準として残りのプログラム状態の検証終了点を決めることができる。例えば、プログラム状態は、複数のグループGn(nは、2またはそれより大きい整数)に区分される。各グループに属した最下位プログラム状態のパス時点を基準として各グループに属した残りのプログラム状態の検証終了点が決められる。検証終了点は、上述と実質的に同一に決められるので、それに対する説明は、省略する。図
19に示したように、例えば、第1グループG1の場合、最下位プログラム状態P1のパス時点を基準として残りのプログラム状態P2、P3、P4の検証終了点が各々決められる。第2グループG2の場合、最下位プログラム状態P5のパス時点を基準として残りのプログラム状態P6、P7、P8の検証終了点が各々決められる。
【0070】
例示的な実施形態において、各グループに属したプログラム状態の数は、多様に決められる。グループに適用されるオフセット電圧は、同一にまたは異なるように設定することができる。この場合、各グループに属したプログラム状態のオフセット電圧は、同一にまたは異なるように設定することができる。
【0071】
図20は、本発明のまた他の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を説明するためのフローチャートである。
【0072】
プログラム動作が開始されると、S200段階において、変数FBCPSとVPSとPi_FLAGとが‘1'に設定される。ここで、変数FBCPSは、フェイルビットカウントが行われるプログラム状態を示すのに用いられ、変数VPSは、検証動作が行われるプログラム状態を示すのに用いられる。変数Pi_FLAGは、検証動作が行われたプログラム状態のパス状態を示すのに用いられる。S210段階において、プログラム動作が実行される。S210段階は、プログラム実行区間に対応する。プログラム動作が実行された後、S220段階において、変数FBCPSの値が変数VPSの値と一致するか否かが判別される。現在プログラムループが一番目のプログラムループと仮定すると、変数FBCPSの値は、変数VPSの値と一致する。このような場合、手順は、S230段階に進行する。S230段階では、最下位プログラム状態P1に対する検証読み出し動作が実行される。
【0073】
S240段階において、最下位プログラム状態P1に対する検証読み出し動作を通じて読み出されたデータビットのうちフェイルビットの数がカウントされる。フェイルビットの数をカウントする方法は、多様に実現することができる。例えば、検証読み出し動作を通じて読み出されたデータビットのうちフェイルビットによって各々スイッチングされる時流れる電流の量に基づいてフェイルビットの数をカウントすることが可能である。このような方式は、電流感知方式(current sensing manner)と称する。このような場合、フェイルビットではないデータビットによるスイッチング動作は発生しない。または、カウンタを利用してフェイルビットの数をカウントする方式を用いることができる。しかし、フェイルビットの数をカウントする方式は、ここに開示されていることに限られない。
【0074】
フェイルビット数がカウントされた後、S250段階において、カウントされたフェイルビット数が所定の基準値より小さいか否かが判別される。もしカウントされたフェイルビット数が所定の基準値より小さいと判別されると、手順は、S260段階に進行する。もしカウントされたフェイルビット数が所定の基準値より小さくないと判別されると、手順は、S270段階に進行する。ここで、基準値は、メモリ制御器のECCユニットのエラー訂正能力を考慮して決めることができる。S260段階では、変数FBCPSの値が‘1’だけ増加し、変数Pi_FLAGがパス状態を示すように設定される。すなわち、一番目のプログラム状態P1がパス状態として設定され、その結果、以後のプログラムループでプログラム状態P1に対する検証動作は、省略される。以後、手順は、S270段階に進行する。
【0075】
以上の説明によると、プログラム状態に対応するデータビットのうちフェイルビット数が所定の基準値より小さい時、プログラム状態は、パス状態として設定される。これは、プログラム状態に対応するデータビットがフェイルビットを含んでもプログラム状態の検証動作が終了することを意味する。そのようなフェイルビットは、スロービットである。すなわち、プログラム状態に対応するデータビットのうちフェイルビットの数が所定の基準値より小さい時、スロービットに対する検証動作は、省略される。
【0076】
またS220段階に戻ると、もし変数FBCPSの値が変数VPSの値と一致しないと判別されると、手順は、S280段階に進行する。もしプログラム状態P1に対するカウントされたフェイルビット数が基準値より多ければ、変数FBCPSの値は、変化されない。このような場合、現在の検証動作が二番目のプログラム状態P2またはそれより上位プログラム状態に対する検証動作に関連していると仮定すると、フェイルビット数がカウントされるプログラム状態を示す変数FBCPSの値は、検証動作が実行されるプログラム状態を示す変数VPSの値と一致しない。
【0077】
S280段階において、変数VPSの値に対応するプログラム状態に対する検証読み出し動作が実行される。S290段階において、読み出されたデータビットが全部パスデータビットであるか否かが判別される。読み出されたデータビットが全部パスデータビットであると判別されると、S300段階において、変数Pi_FLAGがパス状態を示すように設定される。以後、手順は、S270段階に進行する。読み出されたデータビットが全部パスデータビットではないと判別されると、手順は、S270段階に進行する。S270段階において、プログラム状態に対する検証動作が全部実行されたか否かが判別される。プログラム状態に対する検証動作が全部実行されないと判別されると、手順は、S310段階に進行する。
【0078】
S310段階において、検証動作が実行されるプログラムループを示す変数VPSの値が‘1’だけ増加する。以後、手順は、S220段階に進行する。プログラム状態に対する検証動作が全部実行されたと判別されると、S320段階において、プログラム状態の全部がパスされたか否かが判別される。プログラム状態のうち少なくとも1つがパスされないと判別されると、S330段階において、プログラムループの値が‘1’だけ増加し、検証動作が行われるプログラム状態を示す変数VPSがNに設定される。ここで、Nは、パスされたプログラム状態を除いた残りのプログラム状態のうちの最下位プログラム状態を示す値を有する。以後、手順は、S210段階に進行する。プログラム状態の全部がパスされたと判別されると、手順は、終了する。
【0079】
例示的な実施形態において、変数が一致する時行われる検証読み出し動作は、プログラム状態がパスされたか否かを判別する動作は、実行しない。しかし、変数が一致する時行われる検証読み出し動作(S230段階に対応する)とフェイルビット数をカウントする動作(S240段階に対応する)との間にプログラム状態がパスされたか否かを判別する動作は、行うことができる。
【0080】
図21は、
図20で説明したプログラム方法に適用された検証方式の一例を概略的に説明するための図である。
【0081】
図21に示したように、一番目のプログラム状態P1に対するフェイルビットカウント動作は、フェイルビット数が所定の基準値より小さくなるまで実行される。この時、残りのプログラム状態に対するフェイルビットカウント動作は、実行されない。一番目のプログラム状態P1のフェイルビット数が所定の基準値より小さくなると、一番目のプログラム状態P1に対する検証動作は終了する一方、二番目のプログラム状態P2に対するフェイルビットカウント動作が開始される。この時、残りのプログラム状態(すなわち、二番目のプログラム状態の上位プログラム状態)に対するフェイルビットカウント動作は、実行されない。二番目のプログラム状態P2のフェイルビット数が所定の基準値より小さくなると、二番目のプログラム状態P2に対する検証動作は終了する一方、三番目のプログラム状態P3に対するフェイルビットカウント動作が開始される。残りのプログラム状態に対するフェイルビットカウント動作は、上述と実質的に同一の方式で決められる。
【0082】
図22は、
図20で説明したプログラム方法が適用されるフラッシュメモリ装置を概略的に示すブロック図である。
図22に示した構成要素は、制御ロジック400に電流感知方式よってフェイルビット数をカウントする回路440が追加された点を除けば、
図1と実質的に同一であるので、それに対する説明は、省略する。フェイルビット数をカウントする方式は、電流感知方式に限られない。例えば、カウンタを利用してフェイルビット数をカウントすることができる。
【0083】
図23A、
図23Bは、本発明の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を概略的に説明するためのフローチャートである。以下、本発明の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を参照図に基づいて詳細に説明する。
メモリセルあたり3ビットデータが格納されると仮定する。このような場合、1つの消去状態Eと7個のプログラム状態P1〜P7とが存在する。さらに、
図23A、
図23Bに示したプログラム方法は、
図6及び
図8で説明した検証開始点予測方式と
図16で説明した検証終了点予測方式とを含む。検証開始点予測方式を通じてファストビット(fast bits)に対する検証動作をスキップすることができ、検証終了点予測方式を通じてスロービット(slow bits)に対する検証動作をスキップすることができる。これは、以下詳細に説明する。
【0084】
プログラム動作が開始されると、S300段階において、変数i_PGM_Loopが‘1’に設定され、変数P(j)_Verify_StartとP(j)_Verify_Endとが各々最大プログラムループ回数Max_PGM_Loopとして設定される。ここで、変数i_PGM_Loopは、現在のプログラムループを示すのに用いられ、変数P(j)_Verify_Startは、j番目のプログラム状態の検証開始ループを示すのに用いられ、変数P(j)_Verify_Endは、j番目のプログラム状態の検証終了ループを示すのに用いられる。S310段階において、制御ロジック400の制御下でプログラム動作が実行される。
【0085】
プログラム動作の実行が終了すると、S320段階において、プログラム状態P1の検証動作がパスされたか否かが判別される。もしプログラム状態P1の検証動作がパスされないと判別されると、手順は、S330段階に進行する。S330段階では、プログラム状態P1に対する検証動作が実行される。S340段階において、プログラム状態P1の検証動作の間少なくとも1つのパスビット(すなわち、ファストビット)が検出されたか否かが判別される。
【0086】
プログラム状態P1の検証動作の間パスビットが検出されたと判別されると、手順は、S350段階に進行する。S350段階では、
図6及び
図8で説明したように、検出されたパスビット(検出されたパスビットを示すパスビット情報)に基づいて残りのプログラム状態P2〜P7の検証開始点P(j)_Verify_Startが予測される。例えば、S350段階は、プログラム状態を示す変数jを2に設定し(S351)、j番目のプログラム状態の検証開始点P(j)_Verify_Startを予測し(S352)、変数jの値がMSBプログラム状態P7を示す値7に到達したか否かを判別し(S353)、変数jの値がMSBプログラム状態P7を示す値に到逹しないと判別される時、変数jの値を‘1’だけ増加させる(S354)ことを含む。検証開始点は
図13及び
図14で説明した方式によって可変的に予測することができる。S350段階で残りのプログラム状態P2〜P7に対する検証開始点P(j)_Verify_Startが予測されると、手順はS360段階に進行する。S340段階において、プログラム状態P1の検証動作の間ファストビット(または、パスビット)が検出されないと判別されると、手順はS360段階に進行する。
【0087】
S360段階において、プログラム状態P1の検証動作がパスされたか否かが判別される。もしプログラム状態P1の検証動作がパスされたと判別されると、手順はS370段階に進行する。S370段階では、
図16で説明したように、残りのプログラム状態P2〜P7に対する検証終了点P(j)_Verify_Endが予測される。例えば、S370段階はプログラム状態を示す変数jを2に設定し(S371)、j番目のプログラム状態の検証終了点P(j)_Verify_Endを予測し(S372)、変数jの値がMSBプログラム状態P7を示す値7に到達したか否かを判別し(S373)、変数jの値がMSBプログラム状態P7を示す値7に到逹しないと判別される時、変数jの値を‘1’だけ増加させる(S374)ことを含む。S370段階で残りのプログラム状態P2〜P7に対する検証終了点P(j)_Verify_Endが予測されると、手順はS380段階に進行する。S360段階でプログラム状態P1の検証動作がパスされないと判別されると、手順はS380段階に進行する。
【0088】
S380段階ではプログラム状態を示す変数jが‘2’に設定される。S390段階で現在のプログラムループi_PGM_Loopがプログラム状態P2の検証開始点P(j)_Verify_Startと同一であるか、または大きいか、そしてプログラム状態P2の検証終了点P(j)_Verify_Endと同一であるか、または小さいかが判別される。現在のプログラムループi_PGM_Loopがプログラム状態P2の検証開始点P(j)_Verify_Startより小さいということは、プログラム状態P2の検証動作が省略されることを意味する。現在のプログラムループi_PGM_Loopがプログラム状態P2の検証開始点P(j)_Verify_Startと同一であるか、または大きいということは、プログラム状態P2の検証動作が実行されなければならないことを意味する。また、現在のプログラムループi_PGM_Loopがプログラム状態P2の検証終了点P(j)_Verify_Endより大きいということは、現在のプログラムループがプログラム状態P2の予測された検証終了点に到逹したことを意味する。すなわち、現在のプログラムループi_PGM_Loopがプログラム状態P2の検証終了点P(j)_Verify_Endより大きいということは、プログラムループP2の検証動作が予測された検証終了点に基づいて強制的にパスされたことを意味する。結果的に、現在のプログラムループi_PGM_Loopがプログラム状態P2の検証終了点P(j)_Verify_Endより大きいと判別される時、プログラム状態P2〜P7の各々の検証動作はS390段階で強制的にパス状態に設定される。
【0089】
もしS390段階で現在のプログラムループi_PGM_Loopがプログラム状態P2の検証開始点P(j)_Verify_Startと同一であるか、または大きいと判別されると、あるいはプログラム状態P2の検証終了点P(j)_Verify_Endと同一であるか、または小さいと判別されると、手順はS400段階に進行する。S400段階ではプログラム状態P2に対する検証動作が実行される。検証動作が実行された後、手順はS410段階に進行する。S390段階でそうではないと判別されると、手順はS410段階に進行する。S410段階において、変数jの値がMSBプログラム状態P7を示す値7に到達したか否かが判別される。もし変数jの値がMSBプログラム状態P7を示す値7に到逹しないと判別されると、S420段階において、変数jの値は1だけ増加する。変数jの値がMSBプログラム状態P7を示す値7に到逹したと判別されると、手順はS430段階に進行する。S430段階ではすべてのプログラム状態に対する検証動作がパスされたか否かが判別される。もしそうではないと、S440段階において、プログラムループを示す変数i_PGM_Loopが‘1’だけ増加する。以後、手順はS310段階に進行する。もしすべてのプログラム状態に対する検証動作がパスされたと判別されると、手順は終了する。
【0090】
図24A、
図24Bは本発明の他の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を概略的に説明するためのフローチャートである。以下、本発明の他の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を参照図に基づいて詳細に説明する。
【0091】
メモリセルあたり3ビットデータが格納されると仮定する。このような場合、1つの消去状態Eと7個のプログラム状態P1〜P7とが存在する。さらに、
図24A、
図24Bに示したプログラム方法は
図6及び
図8で説明した検証開始点予測方式と
図20で説明した検証終了点予測方式とを含む。検証開始点予測方式を通じてファストビット(fast bits)に対する検証動作をスキップすることができ、検証終了点予測方式を通じてスロービット(slow bits)に対する検証動作をスキップすることができる。これは以下詳細に説明する。
【0092】
プログラム動作が開始されると、S500段階において、変数i_PGM_Loopが‘1’に設定され、変数P(j)_Verify_Startが最大プログラムループ回数Max_PGM_Loopに設定される。ここで、変数i_PGM_Loopは現在のプログラムループを示すのに用いられ、変数P(j)_Verify_Startはj番目のプログラム状態の検証開始ループを示すのに用いられる。S510段階において、制御ロジック400の制御下でプログラム動作が実行される。
【0093】
プログラム動作の実行が終了すると、S520段階において、プログラム状態P1の検証動作がパスされたか否かが判別される。もしプログラム状態P1の検証動作がパスされないと判別されると、手順はS530段階に進行する。S530段階では、プログラム状態P1に対する検証動作が実行される。検証動作の間、またプログラム状態P1に対するフェイルビット数がカウントされる。
図20で説明したように、プログラム状態P1に対するフェイルビット数が基準値と同一であるか、または小さいと判別される時、プログラム状態P1の検証動作はパスされたと設定される。
【0094】
次の段階S540において、プログラム状態P1の検証動作の間少なくとも1つのパスビット(すなわち、ファストビット)が検出されたか否かが判別される。プログラム状態P1の検証動作の間パスビットが検出されたと判別されると、手順はS550段階に進行する。S550段階では、
図6及び
図8で説明したように、検出されたパスビットに基づいて残りのプログラム状態P2〜P7の検証開始点P(i)_Verify_Startが予測される。例えば、S550段階はプログラム状態を示す変数jを2に設定し(S551)、j番目のプログラム状態の検証開始点P(i)_Verify_Startを予測し(S552)、変数jの値がMSBプログラム状態P7を示す値7に到達したか否かを判別し(S553)、変数jの値がMSBプログラム状態P7を示す値7に到逹しないと判別される時、変数jの値を‘1’だけ増加させる(S554)ことを含む。検証開始点は
図13及び
図14で説明した方式によって可変的に予測することができる。S550段階で残りのプログラム状態P2〜P7に対する検証開始点P(j)_Verify_Startが予測されると、手順はS560段階に進行する。S540段階において、プログラム状態P1の検証動作の間パスビット(ファストビット)が検出されないと判別されると、手順はS560段階に進行する。
【0095】
S560段階ではプログラム状態を示す変数jが‘2’に設定される。S570段階において、プログラム状態P2の検証動作がパスされたか否かが判別される。もしそうではないと、手順はS570段階に進行する。S570段階ではプログラム状態P2の予測された検証開始点が現在のプログラムループi_PGM_Loopと同一であるか、または小さいかが判別される。ここで、現在のプログラムループi_PGM_Loopがプログラム状態P2の検証開始点P(j)_Verify_Startより小さいということは、プログラム状態P2の検証動作が省略されることを意味する。現在のプログラムループi_PGM_Loopがプログラム状態P2の検証開始点P(j)_Verify_Startより大きいということは、プログラム状態P2の検証動作が実行されなければならないことを意味する。
【0096】
現在のプログラムループi_PGM_Loopがプログラム状態P2の検証開始点P(j)_Verify_Startと同一、または大きいと判別されると、手順はS590段階に進行する。S590段階では、プログラム状態P2に対する検証動作が実行される。検証動作の間、またプログラム状態P2に対するフェイルビット数がカウントされる。
図20で説明したように、プログラム状態P2に対するフェイルビット数が基準値と同一、または小さいと判別される時、プログラム状態P2の検証動作はパスされたと設定される。例示的な実施形態において、
図20で説明したように、プログラム状態P2に対するフェイルビット検出動作は以前のプログラム状態P1の検証動作がパスに設定された後行われる。検証動作が実行された後、手順はS600段階に進行する。
【0097】
S570段階でプログラム状態Pjの検証動作がパスされたと判別されるか、またはS580段階で現在のプログラムループが予測された検証開始点に到逹しないと判別される時、手順はS600段階に進行する。S600段階では、変数jの値がMSBプログラム状態P7を示す値7に到達したか否かが判別される。もし変数jの値がMSBプログラム状態P7を示す値7に到逹しないと判別されると、S610段階において、変数jの値は1だけ増加する。変数jの値がMSBプログラム状態P7を示す値7に到逹したと判別されると、手順はS620段階に進行する。S620段階ではすべてのプログラム状態P1〜P7に対する検証動作がパスされたか否かが判別される。もしそうではないと、S630段階において、プログラムループを示す変数i_PGM_Loopが‘1’だけ増加する。以後、手順はS510段階に進行する。もしすべてのプログラム状態P1〜P7に対する検証動作がパスされたと判別されると、手順は終了する。
【0098】
図25A、
図25Bは本発明の他の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を概略的に説明するためのフローチャートである。以下、本発明の他の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を参照図に基づいて詳細に説明する。
【0099】
メモリセルあたり3ビットデータが格納されると仮定する。このような場合、1つの消去状態Eと7個のプログラム状態P1〜P7とが存在する。さらに、
図25A、
図25Bに示したプログラム方法は
図10で説明した検証開始点予測方式と
図16で説明した検証終了点予測方式とを含む。検証開始点予測方式を通じてファストビット(fast bits)に対する検証動作をスキップすることができ、検証終了点予測方式を通じてスロービット(slow bits)に対する検証動作をスキップすることができる。これは以下詳細に説明する。
【0100】
プログラム動作が開始されると、S700段階において、変数i_PGM_Loopが‘1’に設定され、変数P(j)_Verify_Endが最大プログラムループ回数Max_PGM_Loopに設定される。ここで、変数i_PGM_Loopは現在のプログラムループを示すのに用いられ、変数P(j)_Verify_Endはj番目のプログラム状態の検証終了ループを示すのに用いられる。S710段階では以前ページ/以前ステッププログラム手順で検出されたパスビットを示すパスビット情報(例えば、プログラム電圧またはプログラムループ)に基づいてプログラム状態(例えば、P1〜P7)の検証開始点が予測される。例えば、S710段階は変数jを‘1’に設定し(S711)、プログラム状態P2の検証開始点を予測し(S712)、変数jの値がMSBプログラム状態P7を示す値7に到達したか否かを判別し(S713)、変数jの値がMSBプログラム状態を示す値7に到逹しないと判別される時、変数jの値を‘1’だけ増加させる(S714)ことを含む。もし変数jの値がMSBプログラム状態を示す値7に到逹したと判別されると、手順はS720段階に進行する。S720段階では制御ロジック400の制御下でプログラム動作が実行される。
【0101】
プログラム動作の実行が終了すると、S730段階において、プログラム状態P1の検証動作がパスされたか否かが判別される。もしプログラム状態P1の検証動作がパスされないと判別されると、S740段階では、プログラム状態P1に対する検証動作が実行される。S750段階において、プログラム状態P1の検証動作がパスされたか否かが判別される。もしプログラム状態P1の検証動作がパスされたと判別されると、手順はS760段階に進行する。S760段階では、
図16で説明したように、残りのプログラム状態P2〜P7に対する検証終了点P(j)_Verify_Endが予測される。例えば、S760段階はプログラム状態を示す変数jを2に設定し(S761)、j番目のプログラム状態の検証終了点P(j)_Verify_Endを予測し(S762)、変数jの値がMSBプログラム状態P7を示す値7に到達したか否かを判別し(S763)、変数jの値がMSBプログラム状態を示す値に到逹しないと判別される時、変数jの値を‘1’だけ増加させる(S374)ことを含む。S760段階で残りのプログラム状態P2〜P7に対する検証終了点P(j)_Verify_Endが予測されると、手順はS770段階に進行する。S750段階でプログラム状態P1の検証動作がパスされないと判別されると、手順はS770段階に進行する。
【0102】
S770段階ではプログラム状態を示す変数jが‘2’に設定される。S780段階で現在のプログラムループi_PGM_Loopがプログラム状態P2の検証開始点P(j)_Verify_Startと同一であるか、または大きいか、そしてプログラム状態P2の検証終了点P(j)_Verify_Endと同一であるか、または小さいかが判別される。現在のプログラムループi_PGM_Loopがプログラム状態P2の検証開始点P(j)_Verify_Startより小さいということは、プログラム状態P2の検証動作が省略されることを意味する。現在のプログラムループi_PGM_Loopがプログラム状態P2の検証開始点P(j)_Verify_Startと同一、または大きいということは、プログラム状態P2の検証動作が実行されなければならないことを意味する。また、現在のプログラムループi_PGM_Loopがプログラム状態P2の検証終了点P(j)_Verify_Endより大きいということは、現在のプログラムループがプログラム状態P2の予測された検証終了点に到逹したことを意味する。すなわち、現在のプログラムループi_PGM_Loopがプログラム状態P2の検証終了点P(j)_Verify_Endより大きいということは、プログラムプルP2の検証動作が予測された検証終了点に基づいて強制的にパスされたことを意味する。結果的に、現在のプログラムループi_PGM_Loopがプログラム状態P2の検証終了点P(j)_Verify_Endより大きいと判別される時、プログラム状態P2〜P7の各々の検証動作はS780段階で強制的にパス状態として設定される。
【0103】
もしS780段階で現在のプログラムループi_PGM_Loopがプログラム状態P2の検証開始点P(j)_Verify_Startと同一、または大きいと判別されると、あるいはプログラム状態P2の検証終了点P(j)_Verify_Endと同一、または小さいと判別されると、手順はS790段階に進行する。S790段階ではプログラム状態P2に対する検証動作が実行される。検証動作が実行された後、手順はS800段階に進行する。S780段階でそうではないと判別されると、手順はS800段階に進行する。S800段階において、変数jの値がMSBプログラム状態P7を示す値7に到達したか否かが判別される。もし変数jの値がMSBプログラム状態P7を示す値7に到逹しないと判別されると、S810段階において、変数jの値は1だけ増加する。変数jの値がMSBプログラム状態P7を示す値7に到逹したと判別されると、手順はS820段階に進行する。S820段階ではすべてのプログラム状態P1〜P7に対する検証動作がパスされたか否かが判別される。もしそうではないと、S830段階において、プログラムループを示す変数i_PGM_Loopが‘1’だけ増加する。以後、手順はS720段階に進行する。もしすべてのプログラム状態P1〜P7に対する検証動作がパスされたと判別されると、手順は終了する。
【0104】
図26A、
図26Bは本発明のまた他の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を概略的に説明するためのフローチャートである。以下、本発明のまた他の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を参照図に基づいて詳細に説明する。
【0105】
メモリセルあたり3ビットデータが格納されると仮定する。このような場合、1つの消去状態Eと7個のプログラム状態P1〜P7とが存在する。さらに、
図26A、
図26Bに示したプログラム方法は
図10で説明した検証開始点予測方式と
図20で説明した検証終了点予測方式とを含む。検証開始点予測方式を通じてファストビット(fast bits)に対する検証動作をスキップすることができ、検証終了点予測方式を通じてスロービット(slow bits)に対する検証動作をスキップすることができる。これは以下詳細に説明する。
【0106】
プログラム動作が開始されると、S900段階において、変数i_PGM_Loopが‘1’に設定され、変数P(j)_Verify_Endが最大プログラムループ回数Max_PGM_Loopに設定される。ここで、変数i_PGM_Loopは現在のプログラムループを示すのに用いられ、変数P(j)_Verify_Endはj番目のプログラム状態の検証終了ループを示すのに用いられる。S910段階では以前ページ/以前ステッププログラム手順で検出されたパスビットを示すパスビット情報(例えば、プログラム電圧またはプログラムループ)に基づいてプログラム状態(例えば、P1〜P7)の検証開始点が予測される。例えば、S910段階は変数jを‘1’に設定し(S911)、プログラム状態P2の検証開始点を予測し(S912)、変数jの値がMSBプログラム状態を示す値7に到達したか否かを判別し(S913)、変数jの値がMSBプログラム状態を示す値7に到逹しないと判別される時、変数jの値を‘1’だけ増加させる(S914)ことを含む。もし変数jの値がMSBプログラム状態を示す値7に到逹したと判別されると、手順はS920段階に進行する。S920段階では制御ロジック400の制御下でプログラム動作が実行される。
【0107】
プログラム動作の実行が終了すると、手順はS930段階に進行する。S930段階ではプログラム状態を示す変数jが‘1’に設定される。S940段階において、プログラム状態P1の予測された検証開始点が現在のプログラムループi_PGM_Loopと同一であるか、または小さいかが判別される。ここで、現在のプログラムループi_PGM_Loopがプログラム状態P1の検証開始点P(j)_Verify_Startより小さいということは、プログラム状態P1の検証動作が省略されることを意味する。現在のプログラムループi_PGM_Loopがプログラム状態P1の検証開始点P(j)_Verify_Startと同一であるか、または大きいということは、プログラム状態P1の検証動作が実行されなければならないことを意味する。
【0108】
現在のプログラムループi_PGM_Loopがプログラム状態P1の検証開始点P(j)_Verify_Startと同一であるか、または大きいと判別されると、手順はS950段階に進行する。S950段階では、プログラム状態P1に対する検証動作が実行される。検証動作の間、またプログラム状態P1に対するフェイルビット数がカウントされる。
図20で説明したように、プログラム状態P2に対するフェイルビット数が基準値と同一であるか、または小さいと判別される時、プログラム状態P2の検証動作はパスされたと設定される。
【0109】
上述のように、下位プログラム状態に対する検証動作がパスとして設定された後、現在のプログラム状態に対するフェイルビットカウント動作が実行される。検証動作が実行された後、手順はS960段階に進行する。S940段階で現在のプログラムループが予測された検証開始点に到逹しないと判別される時、手順はS960段階に進行する。S960段階では、変数jの値がMSBプログラム状態P7を示す値7に到達したか否かが判別される。もし変数jの値がMSBプログラム状態P7を示す値7に到逹しないと判別されると、S970段階において、変数jの値は1だけ増加する。変数jの値がMSBプログラム状態P7を示す値7に到逹したと判別されると、手順はS980段階に進行する。S980段階ではすべてのプログラム状態P1〜P7に対する検証動作がパスされたか否かが判別される。もしそうではないと、S990段階において、プログラムループを示す変数i_PGM_Loopが‘1’だけ増加する。以後、手順はS920段階に進行する。もしすべてのプログラム状態P1〜P7に対する検証動作がパスされたと判別されると、手順は終了する。
【0110】
図27は、本発明の他の例示的な実施形態によるフラッシュメモリ装置をプログラムする方法を示すフローチャートである。
まず、S1100段階で、複数の変数FBCPS及びPi_FLAGが‘1’に設定される。変数FBCPSは、フェイルビットカウント動作が行なわれるプログラム状態を示し、変数Pi_FLAGは、検証動作が行なわれたプログラム状態のパス状態を示すのに使われる。
【0111】
プログラム動作がS1100段階で実行される。さらに、S1100段階では、変数FBCPSの値に対応するプログラム状態に対するフェイルビットカウント動作が行なわれる。現在のプログラムループが1番目のプログラムループであると仮定すると、第1プログラム状態P1に対するフェイルビットカウント動作が行なわれる。現在のプログラムループが第1プログラムループであるので、フェイルビットカウント動作は、読出し/書込み回路500(
図1参照)に格納されたプログラムデータビットに基づいて行なわれる。もし現在のプログラムループが第2プログラムループであれば、以前のプログラムの検証動作で読まれたデータビットに基づいてフェイルビットカウント動作が行なわれる。
【0112】
S1200段階で、カウントされたフェイルビット数が所定の基準値より小さいか否かが判別される。もしカウントされたフェイルビット数が所定の基準値より小さいと、手順は、S1300段階に進行する。S1300段階で、プログラム状態P1に対応するフェイルビットは、プログラム禁止値(例えば、‘1’)に設定される。これは、プログラム電圧がプログラム状態P1に対応するフェイルビットのメモリセルに印加されてもプログラム状態P1に対応するメモリセルが次のプログラムループでプログラム禁止されることを意味する。さらに、S1300段階で、変数Pi_FLAGは、パス状態を示すように設定され、変数FBCPSは、1増加させる。変数FBCPSが増加されることによって、プログラム状態P1の代わりに次のプログラム状態P2に対してフェイルビットカウント動作が行なわれる。変数Pi_FLAGがパス状態を示すように設定される場合、変数Pi_FLAGの値に対応するプログラム状態(例えば、P1)に対する検証動作は、省略される。以後、手順は,S1400段階に進行する。
【0113】
S1200段階に戻って、もしカウントされたフェイルビット数が所定の基準値より小さくないと、手順は,S1400段階に進行する。S1400段階で、パスされたプログラム状態を除いた残りのプログラム状態に対する検証動作が各々行なわれる。例えば、P1_FLAGがパス状態に設定された場合、P1_FLAGに対応するプログラム状態P1を除いた残りのプログラム状態に対する検証動作が各々行なわれる。パスされたプログラム状態がない場合、S1400段階であらゆるプログラム状態に対する検証動作が各々実行される。
【0114】
S1500段階では,あらゆるプログラム状態がパスされたのか否かが判別される。もし少なくとも一つのプログラム状態がパスできないことと判別されると、手順は,S1600段階に進行し、S1600段階では、プログラムループ回数が1だけ増加する。以後、手順は、S1100段階に進行する。あらゆるプログラム状態がパスされたことと判別される場合、手順は、終了する。
【0115】
先に説明された方法によると、プログラム動作が現在のプログラムループで実行される間(または、プログラム電圧が選択されたワードラインに印加される間)、以前のプログラムループの検証結果を利用してフェイルビットカウント動作が実行される。このような理由で、たとえカウントされたフェイルビット数が所定の基準値より小さいと判別されても、現在のプログラムループでフェイルビットに対応するメモリセルにプログラム電圧がもう一度印加される。結果的に、省略されるプログラム状態に対応するフェイルビットの数は、減少する。
【0116】
例示的な実施形態において、各プログラム状態がパスされたか否かを判別するためにあらゆるプログラム状態に対して同一の基準値が使われる。しかし、対応するプログラム状態がパスされたか否かを判別するためにプログラム状態(または、各行に属するページ)に他の基準値を適用することが可能である。
【0117】
図28は、本発明の例示的な実施形態による
図27の方法に使われた検証スキームを示す図である。
前述のように、最初のプログラム状態P1に対するビットカウント動作は、フェイルビット(または、スロービットと称する)の数が所定の基準値より小さくなる時まで実行される。この時、残りのプログラム状態に対するフェイルビットカウント動作は、実行できない。変数FBCPSに対応するプログラム状態に対するビットカウント動作は、プログラム電圧が選択されたメモリセルに印加されるプログラム動作の間に実行される。
【0118】
例えば、
図28に示すように、N番目プログラムループでプログラム状態P1、P2、P3に対する検証動作が実行される。プログラム状態P1に対するフェイルビットカウント動作は、N番目プログラムループの検証動作の時読み出されたプログラム状態P1に対応するデータビットに基づいてN−1番目プログラムループのプログラム動作の間に実行される。もしカウントされたフェイルビット数FBCが所定の基準値より大きいと、プログラム状態P1に対するフェイルビットカウント動作は、N+2番目プログラムループのプログラム動作の間に再び実行される。もしカウントされたフェイルビット数FBCがN+2番目プログラムループで所定の基準値より小さいと判別されると、プログラム状態P1に対応するデータビットの中でフェイルビットは、プログラム禁止値に設定され、現在のプログラムループ(例えば、N+2番目プログラムループ)を含む次のプログラムループ以降プログラム状態P1に対する検証動作は、省略される。プログラム状態P1がパスされる時、
図28に示すように、次のプログラム状態P2に対するフェイルビットカウント動作が実行される。
【0119】
前述の説明から分かるように、カウントされたフェイルビット数が所定の基準値より小さいと判別された後フェイルビットに対応するメモリセルにプログラム電圧が印加される。これは、省略されるプログラム状態に対応するフェイルビット数が減少されることを意味する。
例示的な実施形態において、最上位プログラム状態の場合、もしカウントされたフェイルビット数が所定の基準値より小さいと判別されると、追加的なプログラム電圧がフェイルビットに対応するメモリセルに印加されるのを禁止することが可能である。
【0120】
図29は、本発明の他の例示的な実施形態によるフラッシュメモリ装置をプログラムする方法を示すフローチャートである。
図29に示したプログラム方法は、あらゆるプログラム状態がパスされたか否かを判別する動作(S1700)がパスされたプログラム状態を除いた残りのプログラム状態に対する検証動作を実行する動作(S1800)より前に行なわれること以外は、
図27に示したものと実質的に同一である。したがって、それに対する説明は、省略される。
【0121】
図30は、本発明の他の例示的な実施形態によるフラッシュメモリ装置をプログラムする方法を示すフローチャートである。
まず、S2000段階で、変数FBCPS及びPi_FLAGが‘1’に設定される。変数FBCPSは、フェイルビットカウント動作が行なわれるプログラム状態を示し、変数Pi_FLAGは、検証動作が行なわれたプログラム状態のパス状態を示すのに使われる。
【0122】
S2100段階でプログラム動作が実行される。S2200段階で、カウントされたフェイルビット数が所定の基準値より小さいか否かが判別される。以後説明されるようにカウントされたフェイルビット数は、
図1に示した制御ロジック400によって維持される。現在のプログラムループのフェイルビット数として、例えば、カウントされたフェイルビット数は、所定の基準値より大きいデフォルト値に設定される。もしカウントされたフェイルビット数が所定の基準値より小さければ、手順は、S2300段階に進行する。S2300段階で、プログラム状態P1に対応するフェイルビットは、プログラム禁止値(例えば、‘1’)で設定される。
【0123】
これは、たとえプログラム状態P1に対応するフェイルビットのメモリセルにプログラム電圧が印加されても、プログラム状態P1に対応するメモリセルが次のプログラムループでプログラム禁止されることを意味する。又は、S2300段階で、変数Pi_FLAGは、パス状態を示すように設定され、変数FBCPSは、1だけ増加させる。変数FBCPSが増加されることによって、プログラム状態P1の代わりに次のプログラム状態P2に対するフェイルビットカウント動作が実行される。変数Pi_FLAGがパス状態を示すように設定される場合、変数Pi_FLAGの値に対応するプログラム状態(例えば、P1)に対する検証動作が省略される。以後、手順は、終了される。
【0124】
S2200段階に戻って、もしカウントされたフェイルビット数が所定の基準値より小さくなければ、手順は、S2400段階に進行する。S2400段階で、パスされたプログラム状態を除いた残りのプログラム状態に対する検証動作が各々行なわれる。例えば、P1_FLAGがパス状態に設定された場合、P1_FLAGに対応するプログラム状態P1を除いた残りのプログラム状態に対する検証動作が各々行なわれる。パスされたプログラム状態がない場合、S2400段階であらゆるプログラム状態に対する検証動作が各々実行される。その上、S2400段階で、変数FBCPSに対応するプログラム状態に対するフェイルビットカウント動作が実行される。カウントされたフェイルビット数は、S2200段階で以前のプログラムループのフェイルビット数として使われる。
【0125】
S2500段階ではあらゆるプログラム状態がパスされたのか否かが判別される。もし少なくとも一つのプログラム状態がパスできないと判別されると、手順は、S2600段階に進行し、S2600段階ではプログラムループ回数が1だけ増加される。以後、手順は、S2100段階に進行する。あらゆるプログラム状態がパスされたと判別される場合、手順は終了される。
【0126】
前述の方法によると、プログラム動作が現在のプログラムループで実行された後、以前のプログラムループの検証結果を利用してプログラム状態に対する検証動作が省略される。このような理由で、たとえカウントされたフェイルビット数が所定の基準値より小さいと判別されても、現在のプログラムループでフェイルビットに対応するメモリセルにプログラム電圧がもう一度印加される。結果的に、省略されるプログラム状態に対応するフェイルビット数は、減少する。
【0127】
例示的な実施形態において、各プログラム状態がパスされたか否かを判別するために、あらゆるプログラム状態に対して同一の基準値が使われる。しかし、対応するプログラム状態がパスされたか否かを判別するためにプログラム状態(または、各行に属するページ)に他の基準値を適用することも可能である。
【0128】
図31は、本発明の例示的な実施形態による
図30のプログラム方法に使われた検証スキームを示す図である。
先に説明されたように、最初のプログラム状態P1に対するビットカウント動作は、フェイルビット数が所定の基準値より小さくなる時まで実行される。この時、残りのプログラム状態に対するフェイルビットカウント動作は、実行できない。変数FBCPSに対応するプログラム状態に対するビットカウント動作は、選択されたメモリセルにプログラム電圧を印加するプログラム動作の間に実行される。
【0129】
例えば、まず、選択されたメモリセルにプログラム電圧が印加される。その次に、
図31に示したように、検証動作が実行される前に、フェイルビット数が所定の基準値より小さいか否かがチェックされる。もしフェイルビット数が所定の基準値より小さくなければ、N番目プログラムループでプログラム状態P1、P2、P3に対する検証動作が実行される。プログラム状態P1に対するフェイルビットカウント動作は、N番目プログラムループの検証動作の時に読み出されたプログラム状態P1に対応するデータビットに基づいてN番目プログラムループの間に実行される。カウントされたフェイルビット数は、
図1の制御ロジック400によって維持される。
【0130】
もしN+1番目プログラムループが実行されると、プログラム電圧は、選択されたメモリセルに印加される。その次に、N+1番目プログラムループの検証動作以前に、フェイルビット数が所定の基準値より小さいか否かがチェックされる。カウントされたフェイルビット数は、
図1の制御ロジック400によって維持される。
【0131】
もしカウントされたフェイルビット数FBCがN+2番目プログラムループで所定の基準値より小さいと判別されると、プログラム状態P1に対応するデータビットの中でフェイルビットは、プログラム禁止状態に設定され、プログラム状態P1に対する検証動作は、現在のプログラムループ(例えば、N+2番目プログラムループ)を含む次のプログラムループ以後に省略される。プログラム状態P1がパスされることによって、
図31に示したように、次のプログラム状態P2に対するフェイルビットカウント動作が実行される。
【0132】
前述の説明から分かるように、カウントされたフェイルビット数が所定の基準値より小さいと判別された後、フェイルビットに対応するメモリセルにプログラム電圧が印加される。これは、省略されるプログラム状態に対応するフェイルビット数が減少されることを意味する。
【0133】
例示的な実施形態において、最上位プログラム状態の場合、カウントされたフェイルビット数が所定の基準値より小さいと判別されると、追加的なプログラム電圧がフェイルビットに対応するメモリセルに印加されることを禁止することが可能である。
【0134】
図32は、本発明の他の例示的な実施形態によるフラッシュメモリ装置をプログラムする方法を示すフローチャートである。
図32に示したプログラム方法は、あらゆるプログラム状態がパスされたか否かを判別する動作S2700が、パスされたプログラム状態を除いた残りのプログラム状態に対する検証動作を実行する動作S2800より前に行なわれること以外は、
図30に示したものと実質的に同一である。したがって、それに対する説明は、省略される。
【0135】
図16乃至
図21と
図27乃至
図30で説明されたように、パスされたプログラム状態に対する検証動作が省略される。これは、たとえプログラム電圧がワードラインに印加されてもパスされたと判別されたプログラム状態に対応するメモリセルがプログラム禁止されることを意味する。言い換えれば、スロービット(または、フェイルビット)に対応するメモリセルのプログラム禁止は、2つの方法、即ち、
図16乃至
図21で説明された第1プログラム禁止方法と
図27乃至
図30で説明された第2プログラム禁止方法とで行なわれる。
【0136】
図33は、本発明の例示的な実施形態によるフラッシュメモリ装置を含む集積回路カードを概略的に示すブロック図である。
図33を参照すると、集積回路カード(例えば、スマートカード)は、不揮発性メモリ装置1000と制御器2000とを含む。不揮発性メモリ装置1000は、
図1に示したものと実質的に同一であるので、それに対する説明は省略する。制御器2000は不揮発性メモリ装置1000を制御し、CPU2100、ROM2200、RAM2300、そして入出力インターフェース2400を含む。CPU2100は、ROM2200に格納される多様なプログラムに基づいて集積回路カードの動作を全般的に制御し、入出力インターフェース2400は外部とのインターフェースを提供する。制御器2000は不揮発性メモリ装置1000のプログラム動作の間検出されたパスビットを示す情報を格納するように、そして検出されたパスビットを示す情報を不揮発性メモリ装置1000に提供するように構成することができる。そのような情報は、上述のファインプログラム動作を実行する時に検証開始点を予測するのに用いることができる。
【0137】
フラッシュメモリ装置は電力が遮断されても格納されたデータを保持することができる不揮発性メモリ装置である。セルラーホン、PDAデジタルカメラ、ポータブルゲームコンソール、そしてMP3Pのようなモバイル装置の使用増加によって、フラッシュメモリ装置はデータストレージだけではなく、コードストレージとしてより広く用いられる。フラッシュメモリ装置は、またHDTV、DVD、ルータ、そしてGPSのようなホームアプリケーションに用いることができる。本発明の例示的な実施形態によるフラッシュメモリ装置を含むコンピュータシステムを
図34に概略的に示している。
【0138】
本発明によるコンピュータシステムはバス3001に電気的に接続されたマイクロプロセッサ3100、ユーザインターフェース3200、ベースバンドチップセット(base band chipset)のようなモデム3300、メモリ制御器3400、そして格納媒体としてフラッシュメモリ装置3500を含む。フラッシュメモリ装置3500は
図1に示したものと実質的に同一に構成される。フラッシュメモリ装置3500は上述の適応的な検証方式に基づいてプログラム動作を実行するので、それに対する説明は省略する。フラッシュメモリ装置3500には、マイクロプロセッサ3100によって処理された/処理されるNビットデータ(Nは1またはそれより大きい整数)がメモリ制御器3400を通じて格納される。
【0139】
本発明によるコンピューティングシステムがモバイル装置の場合、コンピューティングシステムの動作電圧を供給するためのバッテリ3600が追加的に提供される。図示しないが、本発明によるコンピューティングシステムには応用チップセット(application chipset)、カメライメージプロセッサ(Camera Image Processor:CIS)、モバイルDRAMなどをさらに提供することができることはこの分野の通常の知識を備えた者等に自明である。メモリ制御器及びフラッシュメモリ装置は、例えば、データを格納するのに不揮発性メモリを用いる半導体ドライブ/ディスク(Solid State Drive/Disk:SSD)を構成することができる。
【0140】
図35は、本発明の例示的な実施形態による
図32に示したメモリ制御器を概略的に示すブロック図である。
図35を参照すると、制御器は格納媒体にデータを格納するように、そして格納媒体からデータを読み出すように構成される。制御器は、ホストインターフェース4100、メモリインターフェース4200、処理ユニット4300、バッファメモリ4400、そしてエラー制御ユニット4500を含む。ホストインターフェース4100は外部装置(例えば、ホスト)とインターフェースするように構成され、メモリインターフェース4200は格納媒体とインターフェースするように構成される。処理ユニット4300は、制御器の動作を全般的に制御するように構成される。バッファメモリ4400は、格納媒体に格納されるデータを、または格納媒体から読み出されたデータを一時的に格納するのに用いられる。また、バッファメモリ4400は、処理ユニット4300のワークメモリ(work memory)として用いることができる。バッファメモリ4400は、フラッシュメモリ装置から出力されるパスビット情報を格納するのに用いることができる。エラー制御ユニット4500は、格納媒体から読み出されたデータのエラーを検出及び訂正するように構成される。
図35に示したように、制御器にコードデータを格納するためのROM(Read Only Memory)4600をさらに提供することもできる。
【0141】
本発明の例示的な実施形態において、メモリセルは可変抵抗メモリセルとして構成することができ、例示的な可変抵抗メモリセル及びそれを含むメモリ装置が特許文献3に記載されている。
本発明の他の例示的な実施形態において、メモリセルは、電荷格納層を有する多様なセル構造のうち1つを利用して実現することができる。電荷格納層を有するセル構造は、電荷トラップ層を利用する電荷トラップフラッシュ構造、アレイが多層で積層されるスタックフラッシュ構造、ソース/ドレインのないフラッシュ構造、ピンタイプフラッシュ構造、などを含む。
【0142】
電荷格納層として電荷トラップフラッシュ構造を有するメモリ装置が特許文献4、5、及び6に記載されており、ソース/ドレインのないフラッシュ構造は特許文献7に記載されており、この出願の先行技術文献として含まれる。
【0143】
本発明によるフラッシュメモリ装置及び/またはメモリ制御器は、多様な形態のパッケージを利用して実装することができる。例えば、本発明によるフラッシュメモリ装置及び/またはメモリ制御器は、PoP(Package on Package)、Ball grid arrays(BGAs)、Chip scale packages(CSPs)、Plastic Leaded Chip Carrier(PLCC)、Plastic Dual In−Line Package(PDIP)、Die in Waffle Pack、Die in Wafer Form、Chip On Board(COB)、Ceramic Dual In−Line Package(CERDIP)、Plastic Metric Quad Flat Pack(MQFP)、Thin Quad Flatpack(TQFP)、Small Outline(SOIC)、Shrink Small Outline Package(SSOP)、Thin Small Outline Package(TSOP)、Thin Quad Flatpack(TQFP)、System In Package(SIP)、Multi Chip Package(MCP)、Wafer−level Fabricated Package(WFP)、Wafer−Level Processed Stack Package(WSP)などのようなパッケージを利用して実装することができる。
【0144】
本発明の範囲または技術的思想を逸脱せず、本発明の構造を多様に修正、または変更することができることは、この分野に熟練された者等に自明である。上述の内容を考慮する時、もし本発明の修正及び変更が請求項及び同等物の範疇内に属したら、本発明は、この発明の変更及び修正を含むとみなされる。