(57)【要約】【課題】フラッシュメモリ装置及びそれのプログラム方法を提供する。【解決手段】ここに提供されるフラッシュメモリ装置のプログラム方法は、選択されたワードラインのメモリセルをプログラムする段階と、検証動作を実行して前記選択されたワードラインのメモリセルのスレッショルド電圧が目標状態の検証レベルと同一であるか、または高いかを判別する段階とを含み、前記目標状態の各々と関連する前記検証動作の開始点は前記目標状態より前に行われた初期状態のプログラミングの間最初に検出された少なくとも１つのパスビットの位置に基づいて決定され、前記目標状態の各々と関連する前記検証動作の終了点は前記目標状態のうちで最下位目標状態のパス情報に基づいて決定される。【選択図】      図１
2011165303.tif 000002
【特許請求の範囲】
【請求項１】
フラッシュメモリ装置をプログラムする方法において、
選択されたワードラインのメモリセルをプログラムする段階と、
検証動作を実行して前記選択されたワードラインのメモリセルのスレッショルド電圧が目標状態の検証レベルと同一であるか、またはより高いかを判別する段階とを含み、
前記目標状態の各々と関連する前記検証動作の開始点は、前記目標状態より前に行われた初期状態のプログラミングの間最初に検出された少なくとも１つのパスビットの位置に基づいて決定され、
前記目標状態の各々と関連する前記検証動作の終了点は、前記目標状態のうちで最下位目標状態のパス情報に基づいて決定されることを特徴とする方法。
【請求項２】
前記プログラムする段階と前記判別する段階とはループを構成し、前記目標状態の各々の検証動作は現在のループが決定された前記開始点の各々に対応するループに到逹するまで省略されることを特徴とする請求項１に記載の方法。
【請求項３】
前記目標状態と関連する検証動作の開始点は、前記目標状態と前記初期状態との間の関係によって調整されることを特徴とする請求項２に記載の方法。
【請求項４】
前記目標状態と前記初期状態との間の関係は、目標状態と初期状態とが重畳される第１の場合と、
目標状態と初期状態とが重畳されない第２の場合とを含むことを特徴とする請求項３に記載の方法。
【請求項５】
前記第１の場合の時、前記目標状態と関連する検証動作の開始点は前記パスビットによって決定された時点より先立つように決定されることを特徴とする請求項４に記載の方法。
【請求項６】
前記第２の場合の時、前記目標状態と関連する検証動作の開始点は前記パスビットによって決定された時点より遅れるように決定されることを特徴とする請求項４に記載の方法。
【請求項７】
前記判別する段階は、前記プログラム状態のうち少なくとも１つのプログラム状態のパス時点を基準として前記少なくとも１つのプログラム状態を除いたプログラム状態に対する検証動作の検証終了点を予測する段階を含むことを特徴とする請求項１に記載の方法。
【請求項８】
前記検証動作の終了点を予測する段階は、
前記少なくとも１つのプログラム状態のパス時点を基準として前記少なくとも１つのプログラム状態を除いたプログラム状態に対する検証動作のパス時点を予測し、
前記予測されたパス時点から各々オフセット値だけ差し引いた時点を前記検証動作の検証終了点として決定する段階を含むことを特徴とする請求項７に記載の方法。
【請求項９】
前記少なくとも１つのプログラム状態を除いたプログラム状態の検証動作に対応するオフセット値は同一に設定されることを特徴とする請求項８に記載の方法。
【請求項１０】
前記少なくとも１つのプログラム状態を除いたプログラム状態の検証動作に対応するオフセット値は互いに異なるように設定されることを特徴とする請求項８に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体メモリ装置に係り、具体的にはフラッシュメモリ装置をプログラムする方法に関する。
【背景技術】
【０００２】
フラッシュメモリ装置は、複数のメモリ領域が一回のプログラム動作で消去またはプログラムされる一種のＥＥＰＲＯＭである。一般的なＥＥＰＲＯＭはただ１つのメモリ領域を一回に消去またはプログラム可能であり、これは、フラッシュメモリ装置を用いるシステムが同時に他のメモリ領域に対して読み出して書き込む時、より速くて効果的な速度でフラッシュメモリ装置が動作することができることを意味する。フラッシュメモリ及びＥＥＰＲＯＭのすべての形態は、データを格納するのに用いられる電荷格納手段の劣化または電荷格納手段を取り囲んでいる絶縁膜の摩滅によって特定数の消去動作の後に摩滅される。
【０００３】
フラッシュメモリ装置は、シリコンチップに格納された情報を保持するのに電源を要しない方法でシリコンチップの上に情報を格納する。これは、チップに供給される電源が遮断されると、電源の消耗なく情報が保持されることを意味する。また、フラッシュメモリ装置は、物理的な衝撃抵抗性及び速い読み出しアクセス時間を提供する。このような特徴のため、フラッシュメモリ装置は、バッテリによって電源が供給される装置の格納装置として一般的に用いられている。フラッシュメモリ装置は、セルと称するトランジスタのアレイに情報を格納し、各セルは、１ビット情報を格納する。マルチレベルセル装置と称するより新しいフラッシュメモリ装置は、セルのフローティングゲートに蓄積される電荷量を可変させることによって、セル当たり１ビット以上の情報を格納することができる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国公開特許第２００８−００２３７４７号
【特許文献２】米国公開特許第２００８−００８４７２９号
【特許文献３】米国特許第７５２９１２４号
【特許文献４】米国特許第６８５８９０６号
【特許文献５】米国公開特許第２００４−０１６９２３８号
【特許文献６】米国公開特許第２００６−０１８０８５１号
【特許文献７】韓国特許第６７３０２０号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明の目的は、プログラム性能を向上させることができるプログラム方法を提供することにある。
【課題を解決するための手段】
【０００６】
本発明の一特徴はフラッシュメモリ装置をプログラムする方法を提供することであって、この方法は、選択されたワードラインのメモリセルをプログラムし、検証動作を実行して前記選択されたワードラインのメモリセルのスレッショルド電圧が目標状態の検証レベルと同一、またはより高いかを判別することを含み、前記目標状態の各々と関連する前記検証動作の開始点は、前記目標状態の以前に行われた初期状態のプログラミングの間最初検出された少なくとも１つのパスビットの位置に基づいて決められ、前記目標状態の各々と関連する前記検証動作の終了点は、前記目標状態のうちの最下位目標状態のパス情報に基づいて決められる。
【発明の効果】
【０００７】
本発明の例示的な実施形態によると、プログラム状態に各々対応する検証開始点が到来するまで検証動作を省略することによって、プログラム性能を向上させることができる。また、プログラム状態の検証終了点が到来した後、検証動作を省略することによってプログラム性能を向上させることができる。
【図面の簡単な説明】
【０００８】
【図１】本発明の例示的な実施形態によるフラッシュメモリ装置を概略的に示すブロック図。
【図２】オールビットラインメモリ構造またはオッドイーブンメモリ構造のためにメモリセルアレイをメモリブロックに構成する例を示す図。
【図３】メモリセルに格納されるデータビットの数によるスレッショルド電圧分布を概略的に説明するための図。
【図４】選択されたワードラインのメモリセルをプログラムするための一連のプログラムパルスを示す図。
【図５】本発明の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を概略的に説明するための図。
【図６】図５Ａで説明したプログラム手順の検証方式を説明するための図。
【図７】図５Ａで説明したプログラム手順の検証方式を説明するための図。
【図８】図５Ｂで説明したプログラム手順の検証方式を説明するための図。
【図９】図５Ｂで説明したプログラム手順の検証方式を説明するための図。
【図１０】図５Ｃで説明したプログラム手順の検証方式を説明するための図。
【図１１】図５Ｃで説明したプログラム手順の検証方式を説明するための図。
【図１２】図５Ａ〜Ｃで説明したプログラム手順を概略的に示す図。
【図１３】本発明の他の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を説明するための図。
【図１４】本発明の他の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を説明するための図。
【図１５】本発明のまた他の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を概略的に説明するための図。
【図１６】本発明の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を説明するためのフローチャート。
【図１７】マルチビットデータのスレッショルド電圧分布を概略的に示す図。
【図１８】本発明の例示的な実施形態による図１６で説明したプログラム方法に適用される検証方式を概略的に説明するための図。
【図１９】本発明の他の例示的な実施形態による図１６で説明したプログラム方法に適用される検証方式を概略的に説明するための図。
【図２０】本発明の他の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を説明するためのフローチャート。
【図２１】本発明の一実施形態による図２０で説明したプログラム方法に適用される検証方式を概略的に説明するための図。
【図２２】図２０で説明したプログラム方法が適用されるフラッシュメモリ装置を概略的に示すブロック図。
【図２３Ａ】本発明のまた他の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を概略的に説明するためのフローチャート。
【図２３Ｂ】本発明のまた他の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を概略的に説明するためのフローチャート。
【図２４Ａ】本発明のまた他の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を概略的に説明するためのフローチャート。
【図２４Ｂ】本発明のまた他の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を概略的に説明するためのフローチャート。
【図２５Ａ】本発明のまた他の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を概略的に説明するためのフローチャート。
【図２５Ｂ】本発明のまた他の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を概略的に説明するためのフローチャート。
【図２６Ａ】本発明のまた他の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を概略的に説明するためのフローチャート。
【図２６Ｂ】本発明のまた他の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を概略的に説明するためのフローチャート。
【図２７】本発明の他の例示的な実施形態によるフラッシュメモリ装置をプログラムする方法を示すフローチャート。
【図２８】本発明の例示的な実施形態による図２７の方法に使われた検証スキームを示す図。
【図２９】本発明の他の例示的な実施形態によるフラッシュメモリ装置をプログラムする方法を示すフローチャート。
【図３０】本発明の他の例示的な実施形態によるフラッシュメモリ装置をプログラムする方法を示すフローチャート。
【図３１】本発明の例示的な実施形態による図３０のプログラム方法に使われた検証スキームを示す図。
【図３２】本発明の他の例示的な実施形態によるフラッシュメモリ装置をプログラムする方法を示すフローチャート。
【図３３】本発明の例示的な実施形態によるフラッシュメモリ装置を含む集積回路カードを概略的に示すブロック図。
【図３４】本発明の例示的な実施形態によるフラッシュメモリ装置を含むコンピューティングシステムを概略的に示すブロック図。
【図３５】本発明の例示的な実施形態による図２８に示したメモリ制御器を概略的に示すブロック図。
【発明を実施するための形態】
【０００９】
以上の本発明の目的、他の目的、特徴及び利点は添付の図面と関連する以下の望ましい実施形態を通じて容易に理解することができる。しかし、本発明はここで説明する実施形態に限定されず、他の形態への具体化も可能である。さらに、ここで紹介する実施形態は開示された内容が徹底且つ完全になれるように、そして当業者に本発明の思想を十分に伝達するように提供されるものである。
図面において、本発明の実施形態は、示した特定形態に制限されず、明確性のために誇張されたものである。また明細書の全体にかけて同一の参照番号は、同一の構成要素を示す。
【００１０】
本明細書で使われた用語「及び／または」は、これと関連して記載された項目のうち、１つまたはそれ以上の任意の組合わせまたはあらゆる組合わせを含み、”／”として縮約して記載されることもある。また、「連結」または「結合」されていると記載された場合、ある要素は、他の要素に直接連結または結合されるか、それらの間に第３の要素が介在されうる。本明細書で、単数として使われた用語は、それについての単数であることを示す明白な背景に関する言及がない限り、複数も含むものである。 本明細書で使われる「包含する」という用語は、言及された構成要素が１つまたはそれ以上の他の構成要素の存在または付加を除外するものではない。
【００１１】
図１は、本発明の例示的な実施形態によるフラッシュメモリ装置を概略的に示すブロック図である。
図１を参照すると、フラッシュメモリ装置は、例えば、ＮＡＮＤフラッシュメモリ装置である。しかし、本発明は、ＮＡＮＤフラッシュメモリ装置に限らない。フラッシュメモリ装置は、行（ワードライン:ＷＬ）と列（ビットライン:ＢＬ）とに配列されたメモリセルを有するメモリセルアレイ１００を含む。各メモリセルは、１ビットデータまたはＭビット（マルチビット）データ（Ｍは、２またはそれより大きい整数）を格納する。各メモリセルは、フローティングゲートまたは電荷トラップ層のような電荷格納層を有するメモリセル、可変抵抗素子を有するメモリセル、またはそれらのようなものにより実現可能である。メモリセルアレイ１００は、周知の断層アレイ構造（ｓｉｎｇｌｅ−ｌａｙｅｒ  ａｒｒａｙ  ｓｔｒｕｃｔｕｒｅ）（または、２次元アレイ構造という）または多層アレイ構造（ｍｕｌｔｉ−ｌａｙｅｒ  ａｒｒａｙ  ｓｔｒｕｃｔｕｒｅ）（または、３次元アレイ構造という）を有するように実現される。例示的な３次元アレイ構造は、特許文献１及び特許文献２に記載されており、この出願のレファレンスとして含まれる。
【００１２】
行デコーダ回路２００は、メモリセルアレイ１００の行に対する選択及び駆動動作を実行するように構成される。電圧発生回路３００は、制御ロジック４００によって制御され、プログラム、消去、及び読み出し動作に必要な電圧（例えば、プログラム電圧、パス電圧、消去電圧、読み出し電圧など）を生成するように構成される。読み出し／書き込み回路５００は、制御ロジック４００によって制御され、動作モードに応じて感知増幅器としてまたは書き込みドライバとして動作する。例えば、読み出し動作の間、読み出し／書き込み回路５００は、選択された行のメモリセル（または、選択されたメモリセル）からデータを感知する感知増幅器として動作する。そのように読み出されたデータは、決められた入出力単位で入出力回路６００を通じて外部に提供される。プログラム動作の間、読み出し／書き込み回路５００は、プログラムデータによって選択された行のメモリセルを駆動する書き込みドライバとして動作する。読み出し／書き込み回路５００は、ビットラインにまたはビットライン対に各々対応するページバッファを含む。メモリセルの各々がマルチビット／マルチレベルデータを格納する場合、読み出し／書き込み回路５００の各ページバッファは、２個またはそれより多いラッチを有するように構成される。入出力回路６００は、外部（例えば、メモリ制御器またはホスト）とインターフェースするように構成される。
【００１３】
制御ロジック４００は、フラッシュメモリ装置の全般的な動作を制御するように構成されて、パスビット検出器４１０、パス／フェイル判別器４２０、レジスタ４３０を含む。パスビット検出器４１０には検証読み出し動作の間読み出し／書き込み回路５００によって読み出されたデータが提供される。パスビット検出器４１０は、検証読み出し動作の間読み出し／書き込み回路５００から提供される読み出されたデータに基づいて、選択されたメモリセルのうちの少なくとも１つのスレッショルド電圧が検証レベルと同一であるか、またはより高いか（または、少なくとも１つのメモリセルがプログラムパスされたか否か）を判別する。選択されたメモリセルのうちの少なくとも１つがプログラムパスされたと判別されると、制御ロジック４００は、プログラムパスされたループに対応するプログラム電圧と、検証レベルの間の電圧差に基づいて次に実行される検証読み出し動作の開始点（または、ループ）を決定／予測する。次に実行される検証読み出し動作の開始点（または、ループ）が決められるまで次に実行される検証読み出し動作は、省略され、これは、以後詳細に説明する。
【００１４】
制御ロジック４００は、プログラムパスされたループを示す情報（または、パスビット情報という）をレジスタ４３０に格納する。そのように格納されたパスビット情報は、パスビットを検出するのが難しい検証条件で検証読み出し動作の開始点（またはループ）を予測／決定するのに用いられる。これは、以後詳細に説明する。または、プログラムパスされたループを示すパスビット情報は、外部（例えば、メモリ制御器）に提供することもできる。パス／フェイル判別器４２０は、検証読み出し動作の間読み出し／書き込み回路５００から提供される読み出されたデータに基づいて、選択されたメモリセルが全部プログラムパスされたか否かを判別する。
【００１５】
例示的な実施形態において、パス／フェイル判別とパスビット検出の順序は、多様に変更することができる。例えば、パスビット検出は、パス／フェイル判別に先立って行うことができる。または、パスビット検出は、パス／フェイル判別の次に行うことができる。または、パス／フェイル判別は、パスビットが検出されたか否かによって行うこともできる。
【００１６】
図２は、オールビットラインメモリ構造または、オッドイーブンメモリ構造のためにメモリセルアレイをメモリブロックに構成する例を示す図である。メモリセルアレイ１００の例示的な構造を説明する。一例として、メモリセルアレイ１００が１０２４個のメモリブロックに分けられたＮＡＮＤフラッシュメモリ装置を説明する。各メモリブロックに格納されたデータは、同時に消去可能である。一実施形態において、メモリブロックは、同時に消去される格納素子の最小単位である。各メモリブロックには、例えば、ビットライン（例えば、１ＫＢのビットライン）に各々対応する複数の列がある。オールビットライン（ａｌｌ  ｂｉｔ  ｌｉｎｅ:ＡＢＬ）構造と称する一実施形態において、メモリブロックのすべてのビットラインは、読み出し及びプログラム動作の間同時に選択することができる。共通ワードラインに属し、すべてのビットラインと接続された格納素子は、同時にプログラムすることができる。
【００１７】
例示的な実施形態において、同一の列に属した複数の格納素子は、ＮＡＮＤストリング１１１を構成するように直列接続されている。ＮＡＮＤストリングの一端子は、ストリング選択ラインＳＳＬによって制御される選択トランジスタを通じて対応するビットラインに接続され、他の端子は、接地選択ラインＧＳＬによって制御される選択トランジスタを通じて共通ソースラインＣＳＬに接続されている。
【００１８】
オッドイーブン構造（ｏｄｄ−ｅｖｅｎ  ａｒｃｈｉｔｅｃｔｕｒｅ）と称する他の例示的な実施形態において、ビットラインは、イーブンビットラインＢＬｅとオッドビットラインＢＬｏとに区分される。オッド／イーブンビットライン構造において、共通ワードラインに属し、オッドビットラインと接続された格納素子が第１時間にプログラムされる一方、共通ワードラインに属し、イーブンビットラインと接続された格納素子は、第２時間にプログラムされる。データは、他のブロックにプログラムすることも出来、他のメモリブロックから読み出すことも出来る。このような動作は、同時に実行することができる。
【００１９】
図３Ａ〜図３Ｃは、メモリセルに格納されるデータビットの数によるスレッショルド電圧分布を概略的に説明するための図である。
【００２０】
１つのメモリセルに２ビットデータ（または、４レベルデータ／２ページデータ）が格納される場合、図３Ａに示したように、フラッシュメモリ装置のメモリセルの各々は、４個のスレッショルド電圧分布１０、１１、１２、１３のうちのいずれか１つに属するスレッショルド電圧を有する。ここで、スレッショルド電圧分布１０は、消去されたメモリセルのスレッショルド電圧を含み、残りのスレッショルド電圧分布１１〜１３は、プログラムされたメモリセルのスレッショルド電圧を含む。電圧ＶＰ１、ＶＰ２、ＶＰ３は、メモリセルがスレッショルド電圧分布１１〜１３に各々プログラムされたか否かを判別するための検証読み出し電圧を示す。選択されたワードラインのメモリセルのスレッショルド電圧は、４レベルデータ（または、２ページデータ）が選択されたワードラインのメモリセルにプログラムされた後、図３Ａに示したように分布される。
【００２１】
１つのメモリセルに３ビットデータ（または、８レベルデータ／３ページデータ）が格納される場合、図３Ｂに示したように、メモリセルの各々は、８個のスレッショルド電圧分布２０〜２７のうちのいずれか１つに属するスレッショルド電圧を有する。スレッショルド電圧分布２０は、消去されたメモリセルのスレッショルド電圧を含み、残りのスレッショルド電圧分布２１〜２７は、プログラムされたメモリセルのスレッショルド電圧を含む。電圧ＶＰ１〜ＶＰ７は、メモリセルがスレッショルド電圧分布２１〜２７に各々プログラムされたか否かを判別するための検証読み出し電圧を示す。選択されたワードラインのメモリセルのスレッショルド電圧は、８レベルデータ（または、３ページデータ）が選択されたワードラインのメモリセルにプログラムされた後、図３Ｂに示したように分布される。
【００２２】
１つのメモリセルに４ビットデータ（または、１６レベルデータ／４ページデータ）が格納される場合、図３Ｃに示したように、メモリセルの各々は、１６個のスレッショルド電圧分布３０〜４５のうちのいずれか１つに属するスレッショルド電圧を有する。スレッショルド電圧分布３０は、消去されたメモリセルのスレッショルド電圧を含み、残りのスレッショルド電圧分布３１〜４５は、プログラムされたメモリセルのスレッショルド電圧を含む。電圧ＶＰ１〜ＶＰ１５は、メモリセルがスレッショルド電圧分布３１〜４５に各々プログラムされたか否かを判別するための検証読み出し電圧を示す。選択されたワードラインのメモリセルのスレッショルド電圧は、１６レベルデータ（または、４ページデータ）が選択されたワードラインのメモリセルにプログラムされた後、図３Ｃに示したように分布される。
【００２３】
図４は、選択されたワードラインのメモリセルをプログラムするための一連のプログラムパルスを示す図である。
一般的なプログラム方式において、プログラム電圧Ｖｐｇｍは、一連のパルスでメモリセルすなわち、格納素子の制御ゲートに印加される。パルスの大きさは、所定のステップの大きさだけ各連続パルス（ｅａｃｈ  ｓｕｃｃｅｓｓｉｖｅ  ｐｕｌｓｅ）とともに増加する。プログラムパルスの間の区間で、検証動作（または、検証読み出し動作）が実行される。すなわち、同時にプログラムされる格納素子（すなわち、選択されたワードラインに属した格納素子）の各々のプログラミングレベル（または、スレッショルド電圧）は、格納素子がプログラムされる検証レベルより大きいか、または同一であるかを決めるために連続プログラムパルスの間で読み出される。
【００２４】
マルチレベルフラッシュメモリ素子のアレイの場合、格納素子が自己のデータと関連する検証レベル（ｉｔｓ  ｄａｔａ−ａｓｓｏｃｉａｔｅｄ  ｖｅｒｉｆｙ  ｌｅｖｅｌ）に到達したか否かを決めるために格納素子の各状態に対して検証動作が実行される。例えば、図４に示したように、データを４個の状態／レベルに格納することができるマルチレベルメモリ素子（例えば、４レベルＭＬＣ）は、３個の比較ポインタＶＰ１、ＶＰ２、ＶＰ３に関連して検証動作を要する。同様に、データを８個の状態／レベルに格納することができるマルチレベルメモリ素子（例えば、８レベルＭＬＣ）は、７個の比較ポインタＶＰ１〜ＶＰ７に関連して検証動作を実行しなければならない。データを１６個の状態／レベルに格納することができるマルチレベルメモリ素子（例えば、１６レベルＭＬＣ）の場合、１５個の比較ポインタＶＰ１〜ＶＰ１５に関連して検証動作を実行しなければならない。
【００２５】
以上の説明から理解されるように、単位面積当たりの容量を増加させるためにマルチレベルセルを採用することによって、プログラム時間を徐々に増加させる。具体的には、状態／レベルの数に比例して検証動作の数が増加し、このような検証時間は、全体のプログラム時間に大きい比重を占める。本発明の例示的な実施形態によるフラッシュメモリ装置は、状態／レベルの数に比例して検証動作の数が増加しても検証時間の増加を最小化することができる適応的な検証スキームを採用し、これは、以下詳細に説明する。
【００２６】
図５は、本発明の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を概略的に説明するための図である。説明する前に、本発明の例示的な実施形態によるフラッシュメモリ装置がセルあたり４ビットデータを格納し、３ステッププログラム方式によってプログラム動作を実行すると仮定する。３ステッププログラム方式によるプログラム方法は、以下説明する。
【００２７】
先ず、選択されたワードラインのメモリセルには、２ページデータ（すなわち、第１及び第２ページデータ）が同時に格納される。この時、図５Ａに示したように、消去状態Ｅに対応するスレッショルド電圧分布に属したメモリセルは、プログラムされるデータによってプログラム状態Ｑ１、Ｑ２、Ｑ３に各々対応するスレッショルド電圧分布に属したスレッショルド電圧を有するようにプログラムされる。
【００２８】
次に、選択されたワードラインのメモリセルには、２ページデータすなわち、第３及び第４ページデータが同時に格納される。この時、図５Ｂに示したように、消去状態Ｅに対応するスレッショルド電圧分布に属したメモリセルは、プログラムされるデータによってプログラム状態Ｐ１’〜Ｐ３’に各々対応するスレッショルド電圧分布に属したスレッショルド電圧を有するようにプログラムされる。図５Ａのプログラム状態Ｑ１に対応するスレッショルド電圧分布に属したメモリセルは、プログラムされるデータによってプログラム状態Ｐ４’〜Ｐ７’に各々対応するスレッショルド電圧分布に属したスレッショルド電圧を有するようにプログラムされる。図５Ａのプログラム状態Ｑ２に対応するスレッショルド電圧分布に属したメモリセルは、プログラムされるデータによってプログラム状態Ｐ８’〜Ｐ１１’に各々対応するスレッショルド電圧分布に属したスレッショルド電圧を有するようにプログラムされる。図５Ａのプログラム状態Ｑ３に対応するスレッショルド電圧分布に属したメモリセルは、プログラムされるデータによってプログラム状態Ｐ１２’〜Ｐ１５’に各々対応するスレッショルド電圧分布に属したスレッショルド電圧を有するようにプログラムされる。
【００２９】
ここで、スレッショルド電圧分布Ｐ１’〜Ｐ１５’を決めるのに用いられる検証電圧ＶＰ１’〜ＶＰ１５’は、最終スレッショルド電圧分布Ｐ１〜Ｐ１５（図５Ｃ参照）を決めるのに用いられる検証電圧ＶＰ１〜ＶＰ１５より低い。例えば、スレッショルド電圧分布Ｐ１’を決めるのに用いられる検証電圧ＶＰ１’は、対応する最終スレッショルド電圧分布Ｐ１を決めるのに用いられる検証電圧ＶＰ１より低い。図５Ｂに示したスレッショルド電圧分布を有するようにメモリセルをプログラムする動作は、以下コースプログラム動作（ｃｏａｒｓｅ  ｐｒｏｇｒａｍ  ｏｐｅｒａｔｉｏｎ）と称する。
【００３０】
最後に、最終スレッショルド電圧分布Ｐ１〜Ｐ１５を有するようにスレッショルド電圧分布Ｐ１’〜Ｐ１５’に属したメモリセルがプログラムされる。このような動作は、以下ファインプログラム動作（fｉｎｅ  ｐｒｏｇｒａｍ  ｏｐｅｒａｔｉｏｎ）（または、再プログラム動作という）と称する。
【００３１】
図５Ａ、図５Ｂ、図５Ｃで各々説明したプログラム手順は、連続的にまたは非連続的に行うことができ、メモリセルが所望するスレッショルド電圧分布のスレッショルド電圧を有するようにプログラムされたか否かを判別するための検証動作を含む。これは、以下詳細に説明する。
【００３２】
図６及び図７は、図５Ａで説明したプログラム手順の検証方式を説明するための図である。以下、図５Ａで説明したプログラム手順の検証方式は、図６及び図７を参照して詳細に説明する。
【００３３】
選択されたワードラインに属したメモリセルにプログラム電圧Ｖｐｇｍが印加された後、プログラム状態Ｑ１を検証するための検証電圧が選択されたワードラインに印加される。この時、図６に示したように、プログラム状態Ｑ２、Ｑ３に対する検証動作は、実行されない。検証電圧が選択されたワードラインに印加された後、読み出し／書き込み回路５００は、選択されたワードラインのメモリセルからデータを読み出す。次に、制御ロジック４００のパスビット検出器４１０は、読み出されたデータに基づいて選択されたワードラインのメモリセルのうち少なくとも１つのスレッショルド電圧が検証レベル／電圧と同一であるか、またはそれより高いかを検出する。もし検出されないと、手順は、プログラム電圧Ｖｐｇｍが所定の増加分だけ増加した後、次のループに進行する。もし検出されると、残りのプログラム状態Ｑ２、Ｑ３の検証動作が開始される時点（以下、検証開始点または検証開始ループという）が予測される。さらに具体的に説明すると、次の通りである。
【００３４】
例えば、図７を参照すると、検証電圧ＶＱ１と同一であるか、またはそれより高いスレッショルド電圧を有する少なくとも１つのメモリセルが検出されると、制御ロジック４００は、検証電圧ＶＱ１、ＶＱ２の電圧差△Ｖと検出されたメモリセルに印加されたプログラム電圧Ｖｐｇｍとの和に対応するプログラム電圧Ｖｐｇｍが印加されるループをプログラム状態Ｑ２の検証開始点／検証開始ループとして決める。検証電圧の間の電圧差が一定であると仮定すると、制御ロジック４００は、検証電圧ＶＱ１、ＶＱ３の電圧差２△Ｖと検出されたメモリセルに印加されたプログラム電圧Ｖｐｇｍとの和に対応するプログラム電圧Ｖｐｇｍが印加されるループをプログラム状態Ｑ３の検証開始点／検証開始ループとして決める。プログラム状態Ｑ２、Ｑ３の検証動作は、図６に示したように、そのように決められた検証開始点／検証開始ループまで行われない。
【００３５】
例示的な実施形態において、パスビットが検出されたループ（または、パスビットとして判別されたメモリセルに印加されるプログラム電圧）は、制御ロジック４００のレジスタ４３０に格納することができる。または、パスビットが検出されたループ（または、パスビットとして判別されたメモリセルに印加されるプログラム電圧）は、制御ロジック４００の制御下で外部（例えば、メモリ制御器）に提供することができる。
【００３６】
上述のように、パスビット検出が行われる前後にパス／フェイル判別がパス／フェイル判別器４２０を通じて行われる。または、パスビットが検出された後にパス／フェイル判別が行われる。プログラム状態Ｑ１、Ｑ２、Ｑ３の各々がプログラムパスとして判別される時、プログラムパスされた状態に対する検証動作は、終了する。これは、プログラムパスされたメモリセルのビットラインをプログラム禁止電圧に設定することによってなされる。
【００３７】
図８及び図９は、図５Ｂで説明したプログラム手順の検証方式を説明するための図である。以下、図５Ｂで説明したプログラム手順の検証方式は、図８及び図９を参照して詳細に説明する。
【００３８】
選択されたワードラインに属したメモリセルにプログラム電圧Ｖｐｇｍが印加された後、プログラム状態Ｐ１’を検証するための検証電圧が選択されたワードラインに印加される。この時、図８に示したように、残りのプログラム状態Ｐ２’〜Ｐ１５’に対する検証動作は、実行されない。検証電圧が選択されたワードラインに印加された後、読み出し／書き込み回路５００は、選択されたワードラインのメモリセルからデータを読み出す。次に、制御ロジック４００のパスビット検出器４１０は、読み出されたデータに基づいて選択されたワードラインのメモリセルのうち少なくとも１つのスレッショルド電圧が検証電圧／レベルと同一であるか、またはそれより高いかを検出する。もし検出されないと、手順は、プログラム電圧Ｖｐｇｍが所定の増加分だけ増加した後、次のループに進行する。もし検出されると、残りのプログラム状態Ｐ２’〜Ｐ１５’の検証動作が開始される検証開始点／検証開始ループが制御ロジック４００によって予測される。さらに具体的に説明すると、次の通りである。
【００３９】
例えば、図９に示したように、検証電圧ＶＰ１’と同一であるか、またはそれより高いスレッショルド電圧を有する少なくとも１つのメモリセルが検出されると、制御ロジック４００は、検証電圧ＶＰ１’、ＶＰ２’の電圧差△Ｖ１と検出されたメモリセルに印加されたプログラム電圧Ｖｐｇｍとの和に対応するプログラム電圧Ｖｐｇｍが印加されるループをプログラム状態Ｐ２’の検証開始点／検証開始ループとして決める。検証電圧の間の電圧差が一定であると仮定すると、制御ロジック４００は、検証電圧ＶＰ１’、ＶＰ３’の電圧差２△Ｖ１と検出されたメモリセルに印加されたプログラム電圧Ｖｐｇｍとの和に対応するプログラム電圧Ｖｐｇｍが印加されるループをプログラム状態Ｐ３’の検証開始点／検証開始ループとして決める。残りのプログラム状態Ｐ４’〜Ｐ１５’の検証開始点／検証開始ループも上述と同様に決められる。図８から分かるように、プログラム状態Ｐ２’〜Ｐ１５’の検証動作は、そのように決められた検証開始点／検証開始ループまで行われない。
【００４０】
例示的な実施形態において、コースプログラム動作を実行する時、検出されたパスビット位置を示すパスビット情報（または、パスビットが検出されたループ／ループのプログラム電圧を示す情報）を制御ロジック４００のレジスタ４３０に格納する。レジスタ４３０に格納されたパスビット情報は、ファインプログラム動作を実行する時、最終プログラム状態Ｐ１〜Ｐ１５の検証開始点／検証開始ループを予測／決定するのに用いることができる。
【００４１】
他の例示的な実施形態において、制御ロジック４００の制御の下に検出されたパスビット位置を示すパスビット情報（または、パスビットが検出されたループ／ループのプログラム電圧を示す情報）を外部（例えば、メモリ制御器）に出力することが可能である。外部に出力されたパスビット情報は、現在選択されたワードラインのメモリセルに対するファインプログラム動作を実行するのに用いることができる。
【００４２】
図１０及び図１１は、図５Ｃで説明したプログラム手順の検証方式を説明するための図である。以下、図５Ｃで説明したプログラム手順の検証方式は、図１０及び図１１を参照して詳細に説明する。
【００４３】
上述と異なり、図１０に示したように、制御ロジック４００は、選択されたワードラインの以前ページ／以前ステッププログラム手順で検出されたパスビットを示すパスビット情報（例えば、プログラム電圧またはループを示す）に基づいてプログラム状態Ｐ１〜Ｐ１５の検証開始点（または、検証開始ループ）を予測／決定する。例えば、図１１を参照すると、制御ロジック４００は、選択されたワードラインの以前ページ／以前ステッププログラム手順で検出されたパスビットを示すパスビット情報に基づいてプログラム状態Ｐ１の検証開始点／検証開始ループを予測し、検証電圧ＶＰ１、ＶＰ２の電圧差△Ｖ２と検出されたパスビットに対応するループのプログラム電圧Ｖｐｇｍとの和に対応するプログラム電圧Ｖｐｇｍが印加されるループをプログラム状態Ｐ２の検証開始点／検証開始ループとして決める。検証電圧の間の電圧差が一定であると仮定すると、制御ロジック４００は、検証電圧ＶＰ１、ＶＰ３の電圧差２△Ｖ２と検出されたパスビットに対応するプログラム電圧Ｖｐｇｍとの和に対応するプログラム電圧Ｖｐｇｍが印加されるループをプログラム状態Ｐ３の検証開始点／検証開始ループとして決める。残りのプログラム状態Ｐ４〜Ｐ１５の検証開始点／検証開始ループも上述と同一に予測／決定する。
【００４４】
図５Ｃに示したプログラム方式の場合、予測された／決定された検証開始点／検証開始ループまでプログラム状態Ｐ１〜Ｐ１５の検証動作は、実行されない。例えば、プログラム状態Ｐ１を検証するための検証電圧は、現在ループが予測された／決定された検証開始点／検証開始ループに到逹する時、選択されたワードラインに印加される。この時、図１０に示したように、残りのプログラム状態Ｐ２〜Ｐ１５に対する検証動作は、実行されない。検証電圧が選択されたワードラインに印加された後、読み出し／書き込み回路５００は、選択されたワードラインのメモリセルからデータによって読み出される。次に、制御ロジック４００のパス／フェイル検出器４２０は、読み出されたデータに基づいて選択されたワードラインのメモリセルが全部プログラムされたか否かを判別する。もし選択されたワードラインのメモリセルのうち少なくとも１つがプログラムされないと判別されると、手順は、プログラム電圧Ｖｐｇｍが所定の増加分だけ増加した後、次のループに進行する。もし検出されると、プログラムパスとして判別されたプログラム状態に対する検証動作は、これ以上実行されない。
【００４５】
図１２Ａは、図５Ａで説明したプログラム手順を概略的に示す図であり、図１２Ｂは、図５Ｂで説明したプログラム手順を概略的に示す図であり、図１２Ｃは、図５Ｃで説明したプログラム手順を概略的に示す図である。
【００４６】
図１２Ａに示したように、プログラム状態Ｑ１の検証動作が実行される間にパスビットが検出される。パスビットが検出されると、残りのプログラム状態Ｑ２、Ｑ３の検証開始点／検証開始ループは、制御ロジック４００によって予測／決定される。図１２Ａと同様に、プログラム状態Ｐ１’の検証動作が実行される間に、図１２Ｂに示したように、パスビットが検出される。パスビットが検出されると、残りのプログラム状態Ｐ２’〜Ｐ１５’の検証開始点／検証開始ループが制御ロジック４００によって予測／決定される。この時、パスビットを示すパスビット情報（または、パスビットが検出されたループ／ループのプログラム電圧を示す情報）は、同一のワードラインの次のページのプログラム手順／次のステッププログラム手順（例えば、ファインプログラム段階）の検証開始点／検証開始ループを決めるのに用いられるように制御ロジック４００のレジスタ４３０に格納される。最後に、図１２Ｃに示したように、最終プログラム状態Ｐ１〜Ｐ１５の検証開始点／検証開始ループは、レジスタ４３０に格納された情報に基づいて予測／決定される。
【００４７】
上述のプログラム方式によると、不要な検証動作を除去することによって、プログラム速度を高めることができる。
図１３は、本発明の他の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を説明するための図である。
【００４８】
プログラム状態の検証開始点／検証開始ループは、以前状態と目標状態との関係を考慮して可変的に決めることができる。例えば、以前状態と目標状態との間の関係は、２つの場合を含む。一番目の場合は、以前状態と目標状態とが重畳されない場合（または、以前状態が目標状態の検証レベルを超えない場合）である。二番目の場合は、以前状態と目標状態とが重畳される場合（または、以前状態が目標状態の検証レベルを超える場合）である。もし検証される状態が一番目の場合に属すると、目標状態の検証開始点／検証開始ループは、図１３の実線に示した検証開始点／検証開始ループと比較する時、図１３の一点鎖線に示した検証開始点／検証開始ループに延ばされる。一方、もし検証される状態が二番目の場合に属すると、目標状態の検証開始点は、図１３の実線に示した検証開始点／検証開始ループと比較する時、図１３の点線に示した検証開始点／検証開始ループに繰り上げられる。ここで、実線に示した検証開始点／検証開始ループは、図６または図８で説明した方式に従って決められる。
【００４９】
例えば、図５Ａを参照すると、一番目の場合は、以前状態Ｅと目標状態Ｑ１〜Ｑ３を含む。このような場合、図６での説明と異なり、制御ロジック４００は、実線の代わりに一点鎖線に示した時点を検証開始点／検証開始ループとして予測／決定する。図５Ａにおいて、二番目の場合は、存在しない。図５Ｂを参照すると、一番目の場合は、以前状態Ｅと目標状態Ｐ１’〜Ｐ３’、以前状態Ｑ１と目標状態Ｐ５’〜Ｐ７’、以前状態Ｑ２と目標状態Ｐ９’〜Ｐ１１’、そして以前状態Ｑ３と目標状態Ｐ１３’〜Ｐ１５’を含む。このような場合、図８での説明と異なり、制御ロジック４００は、実線の代わりに一点鎖線に示した時点を検証開始点／検証開始ループとして予測／決定する。二番目の場合は、以前状態Ｑ１と目標状態Ｐ４’、以前状態Ｑ２と目標状態Ｐ８’、そして以前状態Ｑ３と目標状態Ｐ１２’を含む。このような場合、図８での説明と異なり、制御ロジック４００は、実線の代わりに点線に示した時点を検証開始点／検証開始ループとして予測／決定する。図５Ｃを参照すると、二番目の場合は、以前状態Ｐ１’〜Ｐ１５’と目標状態Ｐ１〜Ｐ１５とを含む。このような場合、図１０での説明と異なり、制御ロジック４００は、実線の代わりに一点鎖線に示した時点を検証開始点／検証開始ループとして予測／決定する。図５Ｃにおいて、一番目の場合は、存在しない。
【００５０】
図１４は、本発明の他の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を説明するための図である。
図１４に示したプログラム方法は、検証開始点の予測が一番目のプログラム状態Ｐ１に対するパスビット検出ではなく、同一のワードラインの以前ページプログラム手順／以前ステッププログラム手順で検出されたパスビットの情報に基づいて行われるという点を除けば、図１３と実質的に同一であるので、それに対する説明は、省略する。
【００５１】
図１３及び図１４の説明から分かるように、検出されたパスビットまたは格納されたパスビットに基づいて、または検出されたパスビットまたは格納されたパスビットと以前状態及び目標状態の関係とに基づいて各状態の検証開始点を決定／予測するのが可能である。
図１５は、本発明のまた他の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を概略的に説明するための図である。
【００５２】
図１５に示したプログラム方法は、周知のシャドウプログラム方式によって実行される。シャドウプログラム方式を利用してプログラム動作を実行する場合にも上述の検証開始点予測方式を同一に適用することができる。例えば、検出されたパスビットまたは格納されたパスビットに基づいてまたは検出されたパスビットまたは格納されたパスビットと以前状態及び目標状態の関係とに基づいて各状態の検証開始点を決定／予測するのが可能である。
【００５３】
図１６は、本発明のまた他の実施形態によるフラッシュメモリ装置のプログラム方法を説明するためのフローチャートであり、図１７は、マルチビットデータのスレッショルド電圧分布を概略的に示す図である。
【００５４】
詳細を説明する前に、プログラム動作には、大きく分けてプログラム実行区間と検証区間とを含むことに留意されたい。プログラム実行区間は、選択されたワードラインのメモリセルのスレッショルド電圧を変化させるための区間であり、検証区間は、プログラム実行区間の間変化されたメモリセルのスレッショルド電圧が対応する目標電圧（または、検証電圧）に各々到達したか否かを判別するための区間である。プログラム実行区間の間、選択されたワードラインにプログラム電圧が印加され、検証区間の間、選択されたワードラインに一連の検証電圧が順に印加される。一連の検証電圧は、各メモリセルに格納されるマルチビットデータを表現するのに必要なスレッショルド電圧分布（すなわち、プログラム状態分布）に各々対応する。プログラムされるデータは、プログラム実行区間以前にフラッシュメモリ装置にロードされる。以前にプログラムされたデータは、必要によってプログラムされるデータのローディング前に読み出されるようにしてもよい。
【００５５】
図１６を参照すると、Ｓ１００段階において、変数ＦＬＡＧとＰｉ＿ＦＬＡＧとが‘０’に設定される。後述するように、変数ＦＬＡＧは、プログラム状態のうちの最下位プログラム状態（例えば、Ｐ１、図２参照）がパスされたか否かを示すのに用いられ、変数Ｐｉ＿ＦＬＡＧは、残りのプログラム状態の各々がパスされたか否かを示すのに用いられる。ここで、プログラム状態のパスは、プログラム状態に対応するメモリセルのスレッショルド電圧が全部検証電圧と同一であるか、またはそれより高いことを示すのに用いられ、プログラム動作のプログラムパスと区別される。
【００５６】
Ｓ１１０段階において、プログラム動作が実行される。Ｓ１１０段階は、プログラム実行区間に対応する。Ｓ１２０段階において、変数ＦＬＡＧが‘１’に設定されたか否かが判別される。もし変数ＦＬＡＧが‘１’に設定されないと判別されると、手順は、Ｓ１３０段階に進行する。Ｓ１３０段階において、選択されたワードラインに検証電圧が印加された状態で、最下位プログラム状態Ｐ１に対する検証読み出し動作が行われる。Ｓ１４０段階において、読み出されたデータに基づいて、最下位プログラム状態Ｐ１に対応するメモリセルのスレッショルド電圧が検証電圧と同一であるか、またはそれより高いかが判別される。すなわち、最下位プログラム状態Ｐ１がパスされたか否かが判別される。
【００５７】
もし最下位プログラム状態Ｐ１がパスされたと判別されると、手順は、Ｓ１５０段階に進行する。Ｓ１５０段階では、最下位プログラム状態Ｐ１がパス状態として決められ、これは、変数ＦＬＡＧを‘１’に設定することによって達成される。最下位プログラム状態がパス状態として決められることによって、以後実行されるプログラムループの検証区間の間最下位プログラム状態に対する検証動作は、省略される。Ｓ１６０段階において、残りのプログラム状態の検証終了点が各々予測される。残りのプログラム状態の検証終了点の予測は、次のように行われる。
【００５８】
もし最下位プログラム状態Ｐ１がパスされたと検出されると、検出された時点（例えば、プログラムループ／プログラム電圧）を基準として残りのプログラム状態がパスされる時点（例えば、プログラムループ／プログラム電圧）を予測するのが可能である。残りのプログラム状態の各々のパス時点は、[Ｖｐｇｍ（ｉ）＝Ｖｐｇｍ（ｐａｓｓ）＋Ｖｄｉｆ]によって決められる。ここで、Ｖｄｉｆは、最下位プログラム状態Ｐ１の検証電圧と他のプログラム状態の検証電圧との間の電圧差Ｎ＊△Ｖ（Ｎは、１またはそれより大きい整数）を示し、Ｖｐｇｍ（ｉ）（ｉは、２またはそれより大きい整数）は、最下位プログラム状態（例えば、Ｐ１）を除いた残りのプログラム状態（例えば、Ｐ２〜Ｐ７）の各々のパス時点のプログラム電圧を示す。Ｖｐｇｍ（ｐａｓｓ）は、最下位プログラム状態Ｐ１がパスされた時点のプログラム電圧を示す。
【００５９】
例えば、各メモリセルに３ビットデータが格納されると仮定すると、図２に示したように、各メモリセルは、８個のスレッショルド電圧分布Ｅ、Ｐ１〜Ｐ７のうちいずれか１つを有する。スレッショルド電圧分布Ｐ１〜Ｐ７は、プログラム状態に各々対応し、スレッショルド電圧分布Ｅは、消去状態に対応する。プログラム状態Ｐ１〜Ｐ７は、対応する検証電圧Ｖｖｆｙ１〜Ｖｖｆｙ７によって区別される。図２に示した状態分布度は、隣接したプログラム状態（例えば、Ｐ１、Ｐ２）に対応する検証電圧（例えば、Ｖｖｆｙ１、Ｖｖｆｙ２）の間の電圧差△Ｖが同一であるという条件下で示した。しかし、電圧差は、異なるように設定することもできる。
【００６０】
最下位プログラム状態Ｐ１を除いた残りのプログラム状態のパス時点は、上述のように決められる。そのように決められたパス時点に基づいて残りのプログラム状態の検証終了点が決められる。検証終了点は、[Ｖｐｇｍ（ｉ）＿ＶＥ＝Ｖｐｇｍ（ｉ）−Ｖｏｆｆｓｅｔ（ｉ）]によって決められる。ここで、Ｖｐｇｍ（ｉ）＿ＶＥは、残りのプログラム状態の各々の検証終了点に対応するプログラム電圧を示し、Ｖｏｆｆｓｅｔ（ｉ）は、残りのプログラム状態の各々に対するオフセット電圧を示す。残りのプログラム状態に対するオフセット電圧は、同一に設定される。または、残りのプログラム状態に対するオフセット電圧は、互いに異なるように設定することができる。
【００６１】
例示的な実施形態において、予測された検証終了点を示すプログラム電圧を現在プログラムループのプログラム電圧と比較することによって、各プログラム状態が検証終了点に到達したか否かを判別することができる。または、予測された検証終了点を示すプログラム電圧に各々対応するプログラムループを現在プログラムループと比較することもできる。プログラム状態が検証終了点に到達したか否かを判別する方式は、ここに開示されたことに限られない。
【００６２】
プログラム状態のパス時点に先立って検証動作が終了することは、プログラム状態に対応するメモリセルのうち一部メモリセルのスレッショルド電圧がプログラム状態に対応する検証電圧より低いことを意味する。すなわち、プログラム状態に対応するメモリセルに格納されたデータは、フェイルビットを含む。そのようなフェイルビットは、メモリ制御器のＥＣＣユニットによって訂正される。そのようなフェイルビットは、プログラム速度が遅いメモリセルに関連し、スロービット（ｓｌｏｗ  ｂｉｔ）と称する。
【００６３】
残りのプログラム状態（例えば、Ｐ２〜Ｐ７）の検証終了点が決められれば、手順は、Ｓ１７０段階に進行する。Ｓ１７０段階では、残りのプログラム状態Ｐ２〜Ｐ７の各々に対する検証動作が実行される。これは、以下詳細に説明する。またＳ１２０段階に戻ると、もし変数ＦＬＡＧが‘１’に設定されたと判別されると、手順は、Ｓ１７０段階に進行する。これは、パスとして処理されたプログラム状態Ｐ１に対する検証動作が省略されることを意味する。
【００６４】
Ｓ１７０段階で実行される残りのプログラム状態の検証動作は、Ｓ１６０段階で決められた検証終了点に基づいて自動的に終了する。さらに具体的に説明すると、Ｓ１７１段階において、次のプログラム状態（例えば、Ｐ２）に対する検証読み出し動作が実行される。プログラム状態Ｐ２に対応するメモリセルのスレッショルド電圧が検証電圧Ｖｖｆｙ２と同一であるか、またはそれより高いかが判別される。すなわち、プログラム状態Ｐ２に対応するメモリセルが全部プログラムパスされたか否かが判別される。もしプログラム状態Ｐ２に対応するメモリセルが全部プログラムパスされたと判別されると、手順は、Ｓ１７３段階に進行する。もしプログラム状態Ｐ２に対応するメモリセルのうちの一部がプログラムパスされないと判別されると、手順は、Ｓ１７４段階に進行する。
【００６５】
Ｓ１７４段階では、プログラム状態Ｐ２（または、現在のプログラムループ／現在のプログラムループで用いられたプログラム電圧）が対応する予測された検証終了点（または、予測された検証終了点に対応するプログラムループ／プログラム電圧）に到達したか否かが判別される。もし現在のプログラムループ（または、現在のプログラムループに用いられたプログラム電圧）が予測された検証終了点に対応するプログラムループに到逹しないと判別されると、手順は、Ｓ１７３段階に進行する。Ｓ１７３段階では、プログラム状態Ｐ２のパスを示す変数Ｐｉ＿ＦＬＡＧがパス状態として設定される。これは、次のプログラムループでプログラム状態Ｐ２に対する検証動作が省略されることを意味する。
【００６６】
これに反して、もし現在のプログラムループ（または、現在のプログラムループに用いられたプログラム電圧）が予測された検証終了点に対応するプログラムループに到逹したと判別されると、手順は、Ｓ１７５段階に進行する。Ｓ１７５段階では、残りのプログラム状態Ｐ２〜Ｐ７に対する検証動作が全部実行されたか否かが判別される。もし残りのプログラム状態Ｐ２〜Ｐ７に対する検証動作が実行されないと判別されると、手順は、Ｓ１７６段階に進行する。Ｓ１７６段階では、次のプログラム状態に対する検証動作のために変数ｉが‘１’だけ増加する。以後、手順は、Ｓ１７１段階に進行する。
【００６７】
もし残りのプログラム状態に対する検証動作が全部実行されたと判別されると、手順は、Ｓ１８０段階に進行し、この段階では、すべてのプログラム状態（例えば、Ｐ１〜Ｐ７）がパスされたか否かが判別される。プログラム状態（例えば、Ｐ１〜Ｐ７）のうち一部がパスされないと判別されると、手順は、Ｓ１９０段階に進行する。Ｓ１９０段階では、プログラムループを示す変数ＬＯＯＰが‘１’だけ増加し、手順は、Ｓ１１０段階に進行する。以後、上述と実質的に同一にプログラムループが決められた回数内で繰り返される。すべてのプログラム状態（例えば、Ｐ１〜Ｐ７）が全部パスされたと判別されると、プログラム動作は、プログラムパスに処理された後終了する。
【００６８】
図１８は、図１６で説明したプログラム方法に適用された検証方式の一例を概略的に説明するための図である。
図１８に示したように、最下位プログラム状態Ｐ１に対応するメモリセルに格納されたビットが全部パスされる時、残りのプログラム状態Ｐ２〜Ｐ７に対する検証終了点が予測される。現在のプログラムループ（または、プログラム電圧）がプログラム状態の予測された検証終了点に対応するプログラムループ（または、プログラム電圧）に到逹する時、各プログラム状態は、パスとして処理され、次に、各プログラム状態の検証動作は、終了する。図１８で分かるように、予測されたパス時点より検証終了点が速く設定されることによって、プログラム状態Ｐ２〜Ｐ７の検証動作が検証終了点に各々終了した後プログラム状態Ｐ２〜Ｐ７の残りの検証動作は、省略される。
【００６９】
図１９は、図１６で説明したプログラム方法に適用された検証方式の他の例を概略的に説明するための図である。
最下位プログラム状態のパス時点を基準として残りのプログラム状態の検証終了点を決めることと異なり、複数のプログラム状態のうち少なくとも２個のプログラム状態のパス時点を基準として残りのプログラム状態の検証終了点を決めることができる。例えば、プログラム状態は、複数のグループＧｎ（ｎは、２またはそれより大きい整数）に区分される。各グループに属した最下位プログラム状態のパス時点を基準として各グループに属した残りのプログラム状態の検証終了点が決められる。検証終了点は、上述と実質的に同一に決められるので、それに対する説明は、省略する。図４に示したように、例えば、第１グループＧ１の場合、最下位プログラム状態Ｐ１のパス時点を基準として残りのプログラム状態Ｐ２、Ｐ３、Ｐ４の検証終了点が各々決められる。第２グループＧ２の場合、最下位プログラム状態Ｐ５のパス時点を基準として残りのプログラム状態Ｐ６、Ｐ７、Ｐ８の検証終了点が各々決められる。
【００７０】
例示的な実施形態において、各グループに属したプログラム状態の数は、多様に決められる。グループに適用されるオフセット電圧は、同一にまたは異なるように設定することができる。この場合、各グループに属したプログラム状態のオフセット電圧は、同一にまたは異なるように設定することができる。
【００７１】
図２０は、本発明のまた他の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を説明するためのフローチャートである。
【００７２】
プログラム動作が開始されると、Ｓ２００段階において、変数ＦＢＣＰＳとＶＰＳとＰｉ＿ＦＬＡＧとが‘１'に設定される。ここで、変数ＦＢＣＰＳは、フェイルビットカウントが行われるプログラム状態を示すのに用いられ、変数ＶＰＳは、検証動作が行われるプログラム状態を示すのに用いられる。変数Ｐｉ＿ＦＬＡＧは、検証動作が行われたプログラム状態のパス状態を示すのに用いられる。Ｓ２１０段階において、プログラム動作が実行される。Ｓ２１０段階は、プログラム実行区間に対応する。プログラム動作が実行された後、Ｓ２２０段階において、変数ＦＢＣＰＳの値が変数ＶＰＳの値と一致するか否かが判別される。現在プログラムループが一番目のプログラムループと仮定すると、変数ＦＢＣＰＳの値は、変数ＶＰＳの値と一致する。このような場合、手順は、Ｓ２３０段階に進行する。Ｓ２３０段階では、最下位プログラム状態Ｐ１に対する検証読み出し動作が実行される。
【００７３】
Ｓ２４０段階において、最下位プログラム状態Ｐ１に対する検証読み出し動作を通じて読み出されたデータビットのうちフェイルビットの数がカウントされる。フェイルビットの数をカウントする方法は、多様に実現することができる。例えば、検証読み出し動作を通じて読み出されたデータビットのうちフェイルビットによって各々スイッチングされる時流れる電流の量に基づいてフェイルビットの数をカウントすることが可能である。このような方式は、電流感知方式（ｃｕｒｒｅｎｔ  ｓｅｎｓｉｎｇ  ｍａｎｎｅｒ）と称する。このような場合、フェイルビットではないデータビットによるスイッチング動作は発生しない。または、カウンタを利用してフェイルビットの数をカウントする方式を用いることができる。しかし、フェイルビットの数をカウントする方式は、ここに開示されていることに限られない。
【００７４】
フェイルビット数がカウントされた後、Ｓ２５０段階において、カウントされたフェイルビット数が所定の基準値より小さいか否かが判別される。もしカウントされたフェイルビット数が所定の基準値より小さいと判別されると、手順は、Ｓ２６０段階に進行する。もしカウントされたフェイルビット数が所定の基準値より小さくないと判別されると、手順は、Ｓ２７０段階に進行する。ここで、基準値は、メモリ制御器のＥＣＣユニットのエラー訂正能力を考慮して決めることができる。Ｓ２６０段階では、変数ＦＢＣＰＳの値が‘１’だけ増加し、変数Ｐｉ＿ＦＬＡＧがパス状態を示すように設定される。すなわち、一番目のプログラム状態Ｐ１がパス状態として設定され、その結果、以後のプログラムループでプログラム状態Ｐ１に対する検証動作は、省略される。以後、手順は、Ｓ２７０段階に進行する。
【００７５】
以上の説明によると、プログラム状態に対応するデータビットのうちフェイルビット数が所定の基準値より小さい時、プログラム状態は、パス状態として設定される。これは、プログラム状態に対応するデータビットがフェイルビットを含んでもプログラム状態の検証動作が終了することを意味する。そのようなフェイルビットは、スロービットである。すなわち、プログラム状態に対応するデータビットのうちフェイルビットの数が所定の基準値より小さい時、スロービットに対する検証動作は、省略される。
【００７６】
またＳ２２０段階に戻ると、もし変数ＦＢＣＰＳの値が変数ＶＰＳの値と一致しないと判別されると、手順は、Ｓ２８０段階に進行する。もしプログラム状態Ｐ１に対するカウントされたフェイルビット数が基準値より多ければ、変数ＦＢＣＰＳの値は、変化されない。このような場合、現在の検証動作が二番目のプログラム状態Ｐ２またはそれより上位プログラム状態に対する検証動作に関連していると仮定すると、フェイルビット数がカウントされるプログラム状態を示す変数ＦＢＣＰＳの値は、検証動作が実行されるプログラム状態を示す変数ＶＰＳの値と一致しない。
【００７７】
Ｓ２８０段階において、変数ＶＰＳの値に対応するプログラム状態に対する検証読み出し動作が実行される。Ｓ２９０段階において、読み出されたデータビットが全部パスデータビットであるか否かが判別される。読み出されたデータビットが全部パスデータビットであると判別されると、Ｓ３００段階において、変数Ｐｉ＿ＦＬＡＧがパス状態を示すように設定される。以後、手順は、Ｓ２７０段階に進行する。読み出されたデータビットが全部パスデータビットではないと判別されると、手順は、Ｓ２７０段階に進行する。Ｓ２７０段階において、プログラム状態に対する検証動作が全部実行されたか否かが判別される。プログラム状態に対する検証動作が全部実行されないと判別されると、手順は、Ｓ３１０段階に進行する。
【００７８】
Ｓ３１０段階において、検証動作が実行されるプログラムループを示す変数ＶＰＳの値が‘１’だけ増加する。以後、手順は、Ｓ２２０段階に進行する。プログラム状態に対する検証動作が全部実行されたと判別されると、Ｓ３２０段階において、プログラム状態の全部がパスされたか否かが判別される。プログラム状態のうち少なくとも１つがパスされないと判別されると、Ｓ３３０段階において、プログラムループの値が‘１’だけ増加し、検証動作が行われるプログラム状態を示す変数ＶＰＳがＮに設定される。ここで、Ｎは、パスされたプログラム状態を除いた残りのプログラム状態のうちの最下位プログラム状態を示す値を有する。以後、手順は、Ｓ２１０段階に進行する。プログラム状態の全部がパスされたと判別されると、手順は、終了する。
【００７９】
例示的な実施形態において、変数が一致する時行われる検証読み出し動作は、プログラム状態がパスされたか否かを判別する動作は、実行しない。しかし、変数が一致する時行われる検証読み出し動作（Ｓ２３０段階に対応する）とフェイルビット数をカウントする動作（Ｓ２４０段階に対応する）との間にプログラム状態がパスされたか否かを判別する動作は、行うことができる。
【００８０】
図２１は、図２０で説明したプログラム方法に適用された検証方式の一例を概略的に説明するための図である。
【００８１】
図２１に示したように、一番目のプログラム状態Ｐ１に対するフェイルビットカウント動作は、フェイルビット数が所定の基準値より小さくなるまで実行される。この時、残りのプログラム状態に対するフェイルビットカウント動作は、実行されない。一番目のプログラム状態Ｐ１のフェイルビット数が所定の基準値より小さくなると、一番目のプログラム状態Ｐ１に対する検証動作は終了する一方、二番目のプログラム状態Ｐ２に対するフェイルビットカウント動作が開始される。この時、残りのプログラム状態（すなわち、二番目のプログラム状態の上位プログラム状態）に対するフェイルビットカウント動作は、実行されない。二番目のプログラム状態Ｐ２のフェイルビット数が所定の基準値より小さくなると、二番目のプログラム状態Ｐ２に対する検証動作は終了する一方、三番目のプログラム状態Ｐ３に対するフェイルビットカウント動作が開始される。残りのプログラム状態に対するフェイルビットカウント動作は、上述と実質的に同一の方式で決められる。
【００８２】
図２２は、図２０で説明したプログラム方法が適用されるフラッシュメモリ装置を概略的に示すブロック図である。
図２２に示した構成要素は、制御ロジック４００に電流感知方式よってフェイルビット数をカウントする回路４４０が追加された点を除けば、図１と実質的に同一であるので、それに対する説明は、省略する。フェイルビット数をカウントする方式は、電流感知方式に限られない。例えば、カウンタを利用してフェイルビット数をカウントすることができる。
【００８３】
図２３Ａ、図２３Ｂは、本発明の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を概略的に説明するためのフローチャートである。以下、本発明の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を参照図に基づいて詳細に説明する。
メモリセルあたり３ビットデータが格納されると仮定する。このような場合、１つの消去状態Ｅと７個のプログラム状態Ｐ１〜Ｐ７とが存在する。さらに、図２３Ａ、図２３Ｂに示したプログラム方法は、図６及び図８で説明した検証開始点予測方式と図１６で説明した検証終了点予測方式とを含む。検証開始点予測方式を通じてファストビット（ｆａｓｔ  ｂｉｔｓ）に対する検証動作をスキップすることができ、検証終了点予測方式を通じてスロービット（ｓｌｏｗ  ｂｉｔｓ）に対する検証動作をスキップすることができる。これは、以下詳細に説明する。
【００８４】
プログラム動作が開始されると、Ｓ３００段階において、変数ｉ＿ＰＧＭ＿Ｌｏｏｐが‘１’に設定され、変数Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿ＳｔａｒｔとＰ（ｊ）＿Ｖｅｒｉｆｙ＿Ｅｎｄとが各々最大プログラムループ回数Ｍａｘ＿ＰＧＭ＿Ｌｏｏｐとして設定される。ここで、変数ｉ＿ＰＧＭ＿Ｌｏｏｐは、現在のプログラムループを示すのに用いられ、変数Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｓｔａｒｔは、ｊ番目のプログラム状態の検証開始ループを示すのに用いられ、変数Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｅｎｄは、ｊ番目のプログラム状態の検証終了ループを示すのに用いられる。Ｓ３１０段階において、制御ロジック４００の制御下でプログラム動作が実行される。
【００８５】
プログラム動作の実行が終了すると、Ｓ３２０段階において、プログラム状態Ｐ１の検証動作がパスされたか否かが判別される。もしプログラム状態Ｐ１の検証動作がパスされないと判別されると、手順は、Ｓ３３０段階に進行する。Ｓ３３０段階では、プログラム状態Ｐ１に対する検証動作が実行される。Ｓ３４０段階において、プログラム状態Ｐ１の検証動作の間少なくとも１つのパスビット（すなわち、ファストビット）が検出されたか否かが判別される。
【００８６】
プログラム状態Ｐ１の検証動作の間パスビットが検出されたと判別されると、手順は、Ｓ３５０段階に進行する。Ｓ３５０段階では、図６及び図８で説明したように、検出されたパスビット（検出されたパスビットを示すパスビット情報）に基づいて残りのプログラム状態Ｐ２〜Ｐ７の検証開始点Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｓｔａｒｔが予測される。例えば、Ｓ３５０段階は、プログラム状態を示す変数ｊを２に設定し（Ｓ３５１）、ｊ番目のプログラム状態の検証開始点Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｓｔａｒｔを予測し（Ｓ３５２）、変数ｊの値がＭＳＢプログラム状態Ｐ７を示す値７に到達したか否かを判別し（Ｓ３５３）、変数ｊの値がＭＳＢプログラム状態Ｐ７を示す値に到逹しないと判別される時、変数ｊの値を‘１’だけ増加させる（Ｓ３５４）ことを含む。検証開始点は図１３及び図１４で説明した方式によって可変的に予測することができる。Ｓ３５０段階で残りのプログラム状態Ｐ２〜Ｐ７に対する検証開始点Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｓｔａｒｔが予測されると、手順はＳ３６０段階に進行する。Ｓ３４０段階において、プログラム状態Ｐ１の検証動作の間ファストビット（または、パスビット）が検出されないと判別されると、手順はＳ３６０段階に進行する。
【００８７】
Ｓ３６０段階において、プログラム状態Ｐ１の検証動作がパスされたか否かが判別される。もしプログラム状態Ｐ１の検証動作がパスされたと判別されると、手順はＳ３７０段階に進行する。Ｓ３７０段階では、図１６で説明したように、残りのプログラム状態Ｐ２〜Ｐ７に対する検証終了点Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｅｎｄが予測される。例えば、Ｓ３７０段階はプログラム状態を示す変数ｊを２に設定し（Ｓ３７１）、ｊ番目のプログラム状態の検証終了点Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｅｎｄを予測し（Ｓ３７２）、変数ｊの値がＭＳＢプログラム状態Ｐ７を示す値７に到達したか否かを判別し（Ｓ３７３）、変数ｊの値がＭＳＢプログラム状態Ｐ７を示す値７に到逹しないと判別される時、変数ｊの値を‘１’だけ増加させる（Ｓ３７４）ことを含む。Ｓ３７０段階で残りのプログラム状態Ｐ２〜Ｐ７に対する検証終了点Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｅｎｄが予測されると、手順はＳ３８０段階に進行する。Ｓ３６０段階でプログラム状態Ｐ１の検証動作がパスされないと判別されると、手順はＳ３８０段階に進行する。
【００８８】
Ｓ３８０段階ではプログラム状態を示す変数ｊが‘２’に設定される。Ｓ３９０段階で現在のプログラムループｉ＿ＰＧＭ＿Ｌｏｏｐがプログラム状態Ｐ２の検証開始点Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｓｔａｒｔと同一であるか、または大きいか、そしてプログラム状態Ｐ２の検証終了点Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｅｎｄと同一であるか、または小さいかが判別される。現在のプログラムループｉ＿ＰＧＭ＿Ｌｏｏｐがプログラム状態Ｐ２の検証開始点Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｓｔａｒｔより小さいということは、プログラム状態Ｐ２の検証動作が省略されることを意味する。現在のプログラムループｉ＿ＰＧＭ＿Ｌｏｏｐがプログラム状態Ｐ２の検証開始点Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｓｔａｒｔと同一であるか、または大きいということは、プログラム状態Ｐ２の検証動作が実行されなければならないことを意味する。また、現在のプログラムループｉ＿ＰＧＭ＿Ｌｏｏｐがプログラム状態Ｐ２の検証終了点Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｅｎｄより大きいということは、現在のプログラムループがプログラム状態Ｐ２の予測された検証終了点に到逹したことを意味する。すなわち、現在のプログラムループｉ＿ＰＧＭ＿Ｌｏｏｐがプログラム状態Ｐ２の検証終了点Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｅｎｄより大きいということは、プログラムループＰ２の検証動作が予測された検証終了点に基づいて強制的にパスされたことを意味する。結果的に、現在のプログラムループｉ＿ＰＧＭ＿Ｌｏｏｐがプログラム状態Ｐ２の検証終了点Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｅｎｄより大きいと判別される時、プログラム状態Ｐ２〜Ｐ７の各々の検証動作はＳ３９０段階で強制的にパス状態に設定される。
【００８９】
もしＳ３９０段階で現在のプログラムループｉ＿ＰＧＭ＿Ｌｏｏｐがプログラム状態Ｐ２の検証開始点Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｓｔａｒｔと同一であるか、または大きいと判別されると、あるいはプログラム状態Ｐ２の検証終了点Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｅｎｄと同一であるか、または小さいと判別されると、手順はＳ４００段階に進行する。Ｓ４００段階ではプログラム状態Ｐ２に対する検証動作が実行される。検証動作が実行された後、手順はＳ４１０段階に進行する。Ｓ３９０段階でそうではないと判別されると、手順はＳ４１０段階に進行する。Ｓ４１０段階において、変数ｊの値がＭＳＢプログラム状態Ｐ７を示す値７に到達したか否かが判別される。もし変数ｊの値がＭＳＢプログラム状態Ｐ７を示す値７に到逹しないと判別されると、Ｓ４２０段階において、変数ｊの値は１だけ増加する。変数ｊの値がＭＳＢプログラム状態Ｐ７を示す値７に到逹したと判別されると、手順はＳ４３０段階に進行する。Ｓ４３０段階ではすべてのプログラム状態に対する検証動作がパスされたか否かが判別される。もしそうではないと、Ｓ４４０段階において、プログラムループを示す変数ｉ＿ＰＧＭ＿Ｌｏｏｐが‘１’だけ増加する。以後、手順はＳ３１０段階に進行する。もしすべてのプログラム状態に対する検証動作がパスされたと判別されると、手順は終了する。
【００９０】
図２４Ａ、図２４Ｂは本発明の他の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を概略的に説明するためのフローチャートである。以下、本発明の他の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を参照図に基づいて詳細に説明する。
【００９１】
メモリセルあたり３ビットデータが格納されると仮定する。このような場合、１つの消去状態Ｅと７個のプログラム状態Ｐ１〜Ｐ７とが存在する。さらに、図２４Ａ、図２４Ｂに示したプログラム方法は図６及び図８で説明した検証開始点予測方式と図２０で説明した検証終了点予測方式とを含む。検証開始点予測方式を通じてファストビット（ｆａｓｔ  ｂｉｔｓ）に対する検証動作をスキップすることができ、検証終了点予測方式を通じてスロービット（ｓｌｏｗ  ｂｉｔｓ）に対する検証動作をスキップすることができる。これは以下詳細に説明する。
【００９２】
プログラム動作が開始されると、Ｓ５００段階において、変数ｉ＿ＰＧＭ＿Ｌｏｏｐが‘１’に設定され、変数Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｓｔａｒｔが最大プログラムループ回数Ｍａｘ＿ＰＧＭ＿Ｌｏｏｐに設定される。ここで、変数ｉ＿ＰＧＭ＿Ｌｏｏｐは現在のプログラムループを示すのに用いられ、変数Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｓｔａｒｔはｊ番目のプログラム状態の検証開始ループを示すのに用いられる。Ｓ５１０段階において、制御ロジック４００の制御下でプログラム動作が実行される。
【００９３】
プログラム動作の実行が終了すると、Ｓ５２０段階において、プログラム状態Ｐ１の検証動作がパスされたか否かが判別される。もしプログラム状態Ｐ１の検証動作がパスされないと判別されると、手順はＳ５３０段階に進行する。Ｓ５３０段階では、プログラム状態Ｐ１に対する検証動作が実行される。検証動作の間、またプログラム状態Ｐ１に対するフェイルビット数がカウントされる。図２０で説明したように、プログラム状態Ｐ１に対するフェイルビット数が基準値と同一であるか、または小さいと判別される時、プログラム状態Ｐ１の検証動作はパスされたと設定される。
【００９４】
次の段階Ｓ５４０において、プログラム状態Ｐ１の検証動作の間少なくとも１つのパスビット（すなわち、ファストビット）が検出されたか否かが判別される。プログラム状態Ｐ１の検証動作の間パスビットが検出されたと判別されると、手順はＳ５５０段階に進行する。Ｓ５５０段階では、図６及び図８で説明したように、検出されたパスビットに基づいて残りのプログラム状態Ｐ２〜Ｐ７の検証開始点Ｐ（ｉ）＿Ｖｅｒｉｆｙ＿Ｓｔａｒｔが予測される。例えば、Ｓ５５０段階はプログラム状態を示す変数ｊを２に設定し（Ｓ５５１）、ｊ番目のプログラム状態の検証開始点Ｐ（ｉ）＿Ｖｅｒｉｆｙ＿Ｓｔａｒｔを予測し（Ｓ５５２）、変数ｊの値がＭＳＢプログラム状態Ｐ７を示す値７に到達したか否かを判別し（Ｓ５５３）、変数ｊの値がＭＳＢプログラム状態Ｐ７を示す値７に到逹しないと判別される時、変数ｊの値を‘１’だけ増加させる（Ｓ５５４）ことを含む。検証開始点は図１３及び図１４で説明した方式によって可変的に予測することができる。Ｓ５５０段階で残りのプログラム状態Ｐ２〜Ｐ７に対する検証開始点Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｓｔａｒｔが予測されると、手順はＳ５６０段階に進行する。Ｓ５４０段階において、プログラム状態Ｐ１の検証動作の間パスビット（ファストビット）が検出されないと判別されると、手順はＳ５６０段階に進行する。
【００９５】
Ｓ５６０段階ではプログラム状態を示す変数ｊが‘２’に設定される。Ｓ５７０段階において、プログラム状態Ｐ２の検証動作がパスされたか否かが判別される。もしそうではないと、手順はＳ５７０段階に進行する。Ｓ５７０段階ではプログラム状態Ｐ２の予測された検証開始点が現在のプログラムループｉ＿ＰＧＭ＿Ｌｏｏｐと同一であるか、または小さいかが判別される。ここで、現在のプログラムループｉ＿ＰＧＭ＿Ｌｏｏｐがプログラム状態Ｐ２の検証開始点Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｓｔａｒｔより小さいということは、プログラム状態Ｐ２の検証動作が省略されることを意味する。現在のプログラムループｉ＿ＰＧＭ＿Ｌｏｏｐがプログラム状態Ｐ２の検証開始点Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｓｔａｒｔより大きいということは、プログラム状態Ｐ２の検証動作が実行されなければならないことを意味する。
【００９６】
現在のプログラムループｉ＿ＰＧＭ＿Ｌｏｏｐがプログラム状態Ｐ２の検証開始点Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｓｔａｒｔと同一、または大きいと判別されると、手順はＳ５９０段階に進行する。Ｓ５９０段階では、プログラム状態Ｐ２に対する検証動作が実行される。検証動作の間、またプログラム状態Ｐ２に対するフェイルビット数がカウントされる。図２０で説明したように、プログラム状態Ｐ２に対するフェイルビット数が基準値と同一、または小さいと判別される時、プログラム状態Ｐ２の検証動作はパスされたと設定される。例示的な実施形態において、図２０で説明したように、プログラム状態Ｐ２に対するフェイルビット検出動作は以前のプログラム状態Ｐ１の検証動作がパスに設定された後行われる。検証動作が実行された後、手順はＳ６００段階に進行する。
【００９７】
Ｓ５７０段階でプログラム状態Ｐｊの検証動作がパスされたと判別されるか、またはＳ５８０段階で現在のプログラムループが予測された検証開始点に到逹しないと判別される時、手順はＳ６００段階に進行する。Ｓ６００段階では、変数ｊの値がＭＳＢプログラム状態Ｐ７を示す値７に到達したか否かが判別される。もし変数ｊの値がＭＳＢプログラム状態Ｐ７を示す値７に到逹しないと判別されると、Ｓ６１０段階において、変数ｊの値は１だけ増加する。変数ｊの値がＭＳＢプログラム状態Ｐ７を示す値７に到逹したと判別されると、手順はＳ６２０段階に進行する。Ｓ６２０段階ではすべてのプログラム状態Ｐ１〜Ｐ７に対する検証動作がパスされたか否かが判別される。もしそうではないと、Ｓ６３０段階において、プログラムループを示す変数ｉ＿ＰＧＭ＿Ｌｏｏｐが‘１’だけ増加する。以後、手順はＳ５１０段階に進行する。もしすべてのプログラム状態Ｐ１〜Ｐ７に対する検証動作がパスされたと判別されると、手順は終了する。
【００９８】
図２５Ａ、図２５Ｂは本発明の他の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を概略的に説明するためのフローチャートである。以下、本発明の他の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を参照図に基づいて詳細に説明する。
【００９９】
メモリセルあたり３ビットデータが格納されると仮定する。このような場合、１つの消去状態Ｅと７個のプログラム状態Ｐ１〜Ｐ７とが存在する。さらに、図２５Ａ、図２５Ｂに示したプログラム方法は図１０で説明した検証開始点予測方式と図１６で説明した検証終了点予測方式とを含む。検証開始点予測方式を通じてファストビット（ｆａｓｔ  ｂｉｔｓ）に対する検証動作をスキップすることができ、検証終了点予測方式を通じてスロービット（ｓｌｏｗ  ｂｉｔｓ）に対する検証動作をスキップすることができる。これは以下詳細に説明する。
【０１００】
プログラム動作が開始されると、Ｓ７００段階において、変数ｉ＿ＰＧＭ＿Ｌｏｏｐが‘１’に設定され、変数Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｅｎｄが最大プログラムループ回数Ｍａｘ＿ＰＧＭ＿Ｌｏｏｐに設定される。ここで、変数ｉ＿ＰＧＭ＿Ｌｏｏｐは現在のプログラムループを示すのに用いられ、変数Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｅｎｄはｊ番目のプログラム状態の検証終了ループを示すのに用いられる。Ｓ７１０段階では以前ページ／以前ステッププログラム手順で検出されたパスビットを示すパスビット情報（例えば、プログラム電圧またはプログラムループ）に基づいてプログラム状態（例えば、Ｐ１〜Ｐ７）の検証開始点が予測される。例えば、Ｓ７１０段階は変数ｊを‘１’に設定し（Ｓ７１１）、プログラム状態Ｐ２の検証開始点を予測し（Ｓ７１２）、変数ｊの値がＭＳＢプログラム状態Ｐ７を示す値７に到達したか否かを判別し（Ｓ７１３）、変数ｊの値がＭＳＢプログラム状態を示す値７に到逹しないと判別される時、変数ｊの値を‘１’だけ増加させる（Ｓ７１４）ことを含む。もし変数ｊの値がＭＳＢプログラム状態を示す値７に到逹したと判別されると、手順はＳ７２０段階に進行する。Ｓ７２０段階では制御ロジック４００の制御下でプログラム動作が実行される。
【０１０１】
プログラム動作の実行が終了すると、Ｓ７３０段階において、プログラム状態Ｐ１の検証動作がパスされたか否かが判別される。もしプログラム状態Ｐ１の検証動作がパスされないと判別されると、Ｓ７４０段階では、プログラム状態Ｐ１に対する検証動作が実行される。Ｓ７５０段階において、プログラム状態Ｐ１の検証動作がパスされたか否かが判別される。もしプログラム状態Ｐ１の検証動作がパスされたと判別されると、手順はＳ７６０段階に進行する。Ｓ７６０段階では、図１６で説明したように、残りのプログラム状態Ｐ２〜Ｐ７に対する検証終了点Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｅｎｄが予測される。例えば、Ｓ７６０段階はプログラム状態を示す変数ｊを２に設定し（Ｓ７６１）、ｊ番目のプログラム状態の検証終了点Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｅｎｄを予測し（Ｓ７６２）、変数ｊの値がＭＳＢプログラム状態Ｐ７を示す値７に到達したか否かを判別し（Ｓ７６３）、変数ｊの値がＭＳＢプログラム状態を示す値に到逹しないと判別される時、変数ｊの値を‘１’だけ増加させる（Ｓ３７４）ことを含む。Ｓ７６０段階で残りのプログラム状態Ｐ２〜Ｐ７に対する検証終了点Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｅｎｄが予測されると、手順はＳ７７０段階に進行する。Ｓ７５０段階でプログラム状態Ｐ１の検証動作がパスされないと判別されると、手順はＳ７７０段階に進行する。
【０１０２】
Ｓ７７０段階ではプログラム状態を示す変数ｊが‘２’に設定される。Ｓ７８０段階で現在のプログラムループｉ＿ＰＧＭ＿Ｌｏｏｐがプログラム状態Ｐ２の検証開始点Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｓｔａｒｔと同一であるか、または大きいか、そしてプログラム状態Ｐ２の検証終了点Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｅｎｄと同一であるか、または小さいかが判別される。現在のプログラムループｉ＿ＰＧＭ＿Ｌｏｏｐがプログラム状態Ｐ２の検証開始点Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｓｔａｒｔより小さいということは、プログラム状態Ｐ２の検証動作が省略されることを意味する。現在のプログラムループｉ＿ＰＧＭ＿Ｌｏｏｐがプログラム状態Ｐ２の検証開始点Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｓｔａｒｔと同一、または大きいということは、プログラム状態Ｐ２の検証動作が実行されなければならないことを意味する。また、現在のプログラムループｉ＿ＰＧＭ＿Ｌｏｏｐがプログラム状態Ｐ２の検証終了点Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｅｎｄより大きいということは、現在のプログラムループがプログラム状態Ｐ２の予測された検証終了点に到逹したことを意味する。すなわち、現在のプログラムループｉ＿ＰＧＭ＿Ｌｏｏｐがプログラム状態Ｐ２の検証終了点Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｅｎｄより大きいということは、プログラムプルＰ２の検証動作が予測された検証終了点に基づいて強制的にパスされたことを意味する。結果的に、現在のプログラムループｉ＿ＰＧＭ＿Ｌｏｏｐがプログラム状態Ｐ２の検証終了点Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｅｎｄより大きいと判別される時、プログラム状態Ｐ２〜Ｐ７の各々の検証動作はＳ７８０段階で強制的にパス状態として設定される。
【０１０３】
もしＳ７８０段階で現在のプログラムループｉ＿ＰＧＭ＿Ｌｏｏｐがプログラム状態Ｐ２の検証開始点Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｓｔａｒｔと同一、または大きいと判別されると、あるいはプログラム状態Ｐ２の検証終了点Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｅｎｄと同一、または小さいと判別されると、手順はＳ７９０段階に進行する。Ｓ７９０段階ではプログラム状態Ｐ２に対する検証動作が実行される。検証動作が実行された後、手順はＳ８００段階に進行する。Ｓ７８０段階でそうではないと判別されると、手順はＳ８００段階に進行する。Ｓ８００段階において、変数ｊの値がＭＳＢプログラム状態Ｐ７を示す値７に到達したか否かが判別される。もし変数ｊの値がＭＳＢプログラム状態Ｐ７を示す値７に到逹しないと判別されると、Ｓ８１０段階において、変数ｊの値は１だけ増加する。変数ｊの値がＭＳＢプログラム状態Ｐ７を示す値７に到逹したと判別されると、手順はＳ８２０段階に進行する。Ｓ８２０段階ではすべてのプログラム状態Ｐ１〜Ｐ７に対する検証動作がパスされたか否かが判別される。もしそうではないと、Ｓ８３０段階において、プログラムループを示す変数ｉ＿ＰＧＭ＿Ｌｏｏｐが‘１’だけ増加する。以後、手順はＳ７２０段階に進行する。もしすべてのプログラム状態Ｐ１〜Ｐ７に対する検証動作がパスされたと判別されると、手順は終了する。
【０１０４】
図２６Ａ、図２６Ｂは本発明のまた他の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を概略的に説明するためのフローチャートである。以下、本発明のまた他の例示的な実施形態によるフラッシュメモリ装置のプログラム方法を参照図に基づいて詳細に説明する。
【０１０５】
メモリセルあたり３ビットデータが格納されると仮定する。このような場合、１つの消去状態Ｅと７個のプログラム状態Ｐ１〜Ｐ７とが存在する。さらに、図２６Ａ、図２６Ｂに示したプログラム方法は図１０で説明した検証開始点予測方式と図２０で説明した検証終了点予測方式とを含む。検証開始点予測方式を通じてファストビット（ｆａｓｔ  ｂｉｔｓ）に対する検証動作をスキップすることができ、検証終了点予測方式を通じてスロービット（ｓｌｏｗ  ｂｉｔｓ）に対する検証動作をスキップすることができる。これは以下詳細に説明する。
【０１０６】
プログラム動作が開始されると、Ｓ９００段階において、変数ｉ＿ＰＧＭ＿Ｌｏｏｐが‘１’に設定され、変数Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｅｎｄが最大プログラムループ回数Ｍａｘ＿ＰＧＭ＿Ｌｏｏｐに設定される。ここで、変数ｉ＿ＰＧＭ＿Ｌｏｏｐは現在のプログラムループを示すのに用いられ、変数Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｅｎｄはｊ番目のプログラム状態の検証終了ループを示すのに用いられる。Ｓ９１０段階では以前ページ／以前ステッププログラム手順で検出されたパスビットを示すパスビット情報（例えば、プログラム電圧またはプログラムループ）に基づいてプログラム状態（例えば、Ｐ１〜Ｐ７）の検証開始点が予測される。例えば、Ｓ９１０段階は変数ｊを‘１’に設定し（Ｓ９１１）、プログラム状態Ｐ２の検証開始点を予測し（Ｓ９１２）、変数ｊの値がＭＳＢプログラム状態を示す値７に到達したか否かを判別し（Ｓ９１３）、変数ｊの値がＭＳＢプログラム状態を示す値７に到逹しないと判別される時、変数ｊの値を‘１’だけ増加させる（Ｓ９１４）ことを含む。もし変数ｊの値がＭＳＢプログラム状態を示す値７に到逹したと判別されると、手順はＳ９２０段階に進行する。Ｓ９２０段階では制御ロジック４００の制御下でプログラム動作が実行される。
【０１０７】
プログラム動作の実行が終了すると、手順はＳ９３０段階に進行する。Ｓ９３０段階ではプログラム状態を示す変数ｊが‘１’に設定される。Ｓ９４０段階において、プログラム状態Ｐ１の予測された検証開始点が現在のプログラムループｉ＿ＰＧＭ＿Ｌｏｏｐと同一であるか、または小さいかが判別される。ここで、現在のプログラムループｉ＿ＰＧＭ＿Ｌｏｏｐがプログラム状態Ｐ１の検証開始点Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｓｔａｒｔより小さいということは、プログラム状態Ｐ１の検証動作が省略されることを意味する。現在のプログラムループｉ＿ＰＧＭ＿Ｌｏｏｐがプログラム状態Ｐ１の検証開始点Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｓｔａｒｔと同一であるか、または大きいということは、プログラム状態Ｐ１の検証動作が実行されなければならないことを意味する。
【０１０８】
現在のプログラムループｉ＿ＰＧＭ＿Ｌｏｏｐがプログラム状態Ｐ１の検証開始点Ｐ（ｊ）＿Ｖｅｒｉｆｙ＿Ｓｔａｒｔと同一であるか、または大きいと判別されると、手順はＳ９５０段階に進行する。Ｓ９５０段階では、プログラム状態Ｐ１に対する検証動作が実行される。検証動作の間、またプログラム状態Ｐ１に対するフェイルビット数がカウントされる。図２０で説明したように、プログラム状態Ｐ２に対するフェイルビット数が基準値と同一であるか、または小さいと判別される時、プログラム状態Ｐ２の検証動作はパスされたと設定される。
【０１０９】
上述のように、下位プログラム状態に対する検証動作がパスとして設定された後、現在のプログラム状態に対するフェイルビットカウント動作が実行される。検証動作が実行された後、手順はＳ９６０段階に進行する。Ｓ９４０段階で現在のプログラムループが予測された検証開始点に到逹しないと判別される時、手順はＳ９６０段階に進行する。Ｓ９６０段階では、変数ｊの値がＭＳＢプログラム状態Ｐ７を示す値７に到達したか否かが判別される。もし変数ｊの値がＭＳＢプログラム状態Ｐ７を示す値７に到逹しないと判別されると、Ｓ９７０段階において、変数ｊの値は１だけ増加する。変数ｊの値がＭＳＢプログラム状態Ｐ７を示す値７に到逹したと判別されると、手順はＳ９８０段階に進行する。Ｓ９８０段階ではすべてのプログラム状態Ｐ１〜Ｐ７に対する検証動作がパスされたか否かが判別される。もしそうではないと、Ｓ９９０段階において、プログラムループを示す変数ｉ＿ＰＧＭ＿Ｌｏｏｐが‘１’だけ増加する。以後、手順はＳ９２０段階に進行する。もしすべてのプログラム状態Ｐ１〜Ｐ７に対する検証動作がパスされたと判別されると、手順は終了する。
【０１１０】
図２７は、本発明の他の例示的な実施形態によるフラッシュメモリ装置をプログラムする方法を示すフローチャートである。
まず、Ｓ１１００段階で、複数の変数ＦＢＣＰＳ及びＰｉ＿ＦＬＡＧが‘１’に設定される。変数ＦＢＣＰＳは、フェイルビットカウント動作が行なわれるプログラム状態を示し、変数Ｐｉ＿ＦＬＡＧは、検証動作が行なわれたプログラム状態のパス状態を示すのに使われる。
【０１１１】
プログラム動作がＳ１１００段階で実行される。さらに、Ｓ１１００段階では、変数ＦＢＣＰＳの値に対応するプログラム状態に対するフェイルビットカウント動作が行なわれる。現在のプログラムループが１番目のプログラムループであると仮定すると、第１プログラム状態Ｐ１に対するフェイルビットカウント動作が行なわれる。現在のプログラムループが第１プログラムループであるので、フェイルビットカウント動作は、読出し／書込み回路５００（図１参照）に格納されたプログラムデータビットに基づいて行なわれる。もし現在のプログラムループが第２プログラムループであれば、以前のプログラムの検証動作で読まれたデータビットに基づいてフェイルビットカウント動作が行なわれる。
【０１１２】
Ｓ１２００段階で、カウントされたフェイルビット数が所定の基準値より小さいか否かが判別される。もしカウントされたフェイルビット数が所定の基準値より小さいと、手順は、Ｓ１３００段階に進行する。Ｓ１３００段階で、プログラム状態Ｐ１に対応するフェイルビットは、プログラム禁止値（例えば、‘１’）に設定される。これは、プログラム電圧がプログラム状態Ｐ１に対応するフェイルビットのメモリセルに印加されてもプログラム状態Ｐ１に対応するメモリセルが次のプログラムループでプログラム禁止されることを意味する。さらに、Ｓ１３００段階で、変数Ｐｉ＿ＦＬＡＧは、パス状態を示すように設定され、変数ＦＢＣＰＳは、１増加させる。変数ＦＢＣＰＳが増加されることによって、プログラム状態Ｐ１の代わりに次のプログラム状態Ｐ２に対してフェイルビットカウント動作が行なわれる。変数Ｐｉ＿ＦＬＡＧがパス状態を示すように設定される場合、変数Ｐｉ＿ＦＬＡＧの値に対応するプログラム状態（例えば、Ｐ１）に対する検証動作は、省略される。以後、手順は，Ｓ１４００段階に進行する。
【０１１３】
Ｓ１２００段階に戻って、もしカウントされたフェイルビット数が所定の基準値より小さくないと、手順は，Ｓ１４００段階に進行する。Ｓ１４００段階で、パスされたプログラム状態を除いた残りのプログラム状態に対する検証動作が各々行なわれる。例えば、Ｐ１＿ＦＬＡＧがパス状態に設定された場合、Ｐ１＿ＦＬＡＧに対応するプログラム状態Ｐ１を除いた残りのプログラム状態に対する検証動作が各々行なわれる。パスされたプログラム状態がない場合、Ｓ１４００段階であらゆるプログラム状態に対する検証動作が各々実行される。
【０１１４】
Ｓ１５００段階では，あらゆるプログラム状態がパスされたのか否かが判別される。もし少なくとも一つのプログラム状態がパスできないことと判別されると、手順は，Ｓ１６００段階に進行し、Ｓ１６００段階では、プログラムループ回数が１だけ増加する。以後、手順は、Ｓ１１００段階に進行する。あらゆるプログラム状態がパスされたことと判別される場合、手順は、終了する。
【０１１５】
先に説明された方法によると、プログラム動作が現在のプログラムループで実行される間（または、プログラム電圧が選択されたワードラインに印加される間）、以前のプログラムループの検証結果を利用してフェイルビットカウント動作が実行される。このような理由で、たとえカウントされたフェイルビット数が所定の基準値より小さいと判別されても、現在のプログラムループでフェイルビットに対応するメモリセルにプログラム電圧がもう一度印加される。結果的に、省略されるプログラム状態に対応するフェイルビットの数は、減少する。
【０１１６】
例示的な実施形態において、各プログラム状態がパスされたか否かを判別するためにあらゆるプログラム状態に対して同一の基準値が使われる。しかし、対応するプログラム状態がパスされたか否かを判別するためにプログラム状態（または、各行に属するページ）に他の基準値を適用することが可能である。
【０１１７】
図２８は、本発明の例示的な実施形態による図２７の方法に使われた検証スキームを示す図である。
前述のように、最初のプログラム状態Ｐ１に対するビットカウント動作は、フェイルビット（または、スロービットと称する）の数が所定の基準値より小さくなる時まで実行される。この時、残りのプログラム状態に対するフェイルビットカウント動作は、実行できない。変数ＦＢＣＰＳに対応するプログラム状態に対するビットカウント動作は、プログラム電圧が選択されたメモリセルに印加されるプログラム動作の間に実行される。
【０１１８】
例えば、図２８に示すように、Ｎ番目プログラムループでプログラム状態Ｐ１、Ｐ２、Ｐ３に対する検証動作が実行される。プログラム状態Ｐ１に対するフェイルビットカウント動作は、Ｎ番目プログラムループの検証動作の時読み出されたプログラム状態Ｐ１に対応するデータビットに基づいてＮ−１番目プログラムループのプログラム動作の間に実行される。もしカウントされたフェイルビット数ＦＢＣが所定の基準値より大きいと、プログラム状態Ｐ１に対するフェイルビットカウント動作は、Ｎ＋２番目プログラムループのプログラム動作の間に再び実行される。もしカウントされたフェイルビット数ＦＢＣがＮ＋２番目プログラムループで所定の基準値より小さいと判別されると、プログラム状態Ｐ１に対応するデータビットの中でフェイルビットは、プログラム禁止値に設定され、現在のプログラムループ（例えば、Ｎ＋２番目プログラムループ）を含む次のプログラムループ以降プログラム状態Ｐ１に対する検証動作は、省略される。プログラム状態Ｐ１がパスされる時、図２８に示すように、次のプログラム状態Ｐ２に対するフェイルビットカウント動作が実行される。
【０１１９】
前述の説明から分かるように、カウントされたフェイルビット数が所定の基準値より小さいと判別された後フェイルビットに対応するメモリセルにプログラム電圧が印加される。これは、省略されるプログラム状態に対応するフェイルビット数が減少されることを意味する。
例示的な実施形態において、最上位プログラム状態の場合、もしカウントされたフェイルビット数が所定の基準値より小さいと判別されると、追加的なプログラム電圧がフェイルビットに対応するメモリセルに印加されるのを禁止することが可能である。
【０１２０】
図２９は、本発明の他の例示的な実施形態によるフラッシュメモリ装置をプログラムする方法を示すフローチャートである。
図２９に示したプログラム方法は、あらゆるプログラム状態がパスされたか否かを判別する動作（Ｓ１７００）がパスされたプログラム状態を除いた残りのプログラム状態に対する検証動作を実行する動作（Ｓ１８００）より前に行なわれること以外は、図２７に示したものと実質的に同一である。したがって、それに対する説明は、省略される。
【０１２１】
図３０は、本発明の他の例示的な実施形態によるフラッシュメモリ装置をプログラムする方法を示すフローチャートである。
まず、Ｓ２０００段階で、変数ＦＢＣＰＳ及びＰｉ＿ＦＬＡＧが‘１’に設定される。変数ＦＢＣＰＳは、フェイルビットカウント動作が行なわれるプログラム状態を示し、変数Ｐｉ＿ＦＬＡＧは、検証動作が行なわれたプログラム状態のパス状態を示すのに使われる。
【０１２２】
Ｓ２１００段階でプログラム動作が実行される。Ｓ２２００段階で、カウントされたフェイルビット数が所定の基準値より小さいか否かが判別される。以後説明されるようにカウントされたフェイルビット数は、図１に示した制御ロジック４００によって維持される。現在のプログラムループのフェイルビット数として、例えば、カウントされたフェイルビット数は、所定の基準値より大きいデフォルト値に設定される。もしカウントされたフェイルビット数が所定の基準値より小さければ、手順は、Ｓ２３００段階に進行する。Ｓ２３００段階で、プログラム状態Ｐ１に対応するフェイルビットは、プログラム禁止値（例えば、‘１’）で設定される。
【０１２３】
これは、たとえプログラム状態Ｐ１に対応するフェイルビットのメモリセルにプログラム電圧が印加されても、プログラム状態Ｐ１に対応するメモリセルが次のプログラムループでプログラム禁止されることを意味する。又は、Ｓ２３００段階で、変数Ｐｉ＿ＦＬＡＧは、パス状態を示すように設定され、変数ＦＢＣＰＳは、１だけ増加させる。変数ＦＢＣＰＳが増加されることによって、プログラム状態Ｐ１の代わりに次のプログラム状態Ｐ２に対するフェイルビットカウント動作が実行される。変数Ｐｉ＿ＦＬＡＧがパス状態を示すように設定される場合、変数Ｐｉ＿ＦＬＡＧの値に対応するプログラム状態（例えば、Ｐ１）に対する検証動作が省略される。以後、手順は、終了される。
【０１２４】
Ｓ２２００段階に戻って、もしカウントされたフェイルビット数が所定の基準値より小さくなければ、手順は、Ｓ２４００段階に進行する。Ｓ２４００段階で、パスされたプログラム状態を除いた残りのプログラム状態に対する検証動作が各々行なわれる。例えば、Ｐ１＿ＦＬＡＧがパス状態に設定された場合、Ｐ１＿ＦＬＡＧに対応するプログラム状態Ｐ１を除いた残りのプログラム状態に対する検証動作が各々行なわれる。パスされたプログラム状態がない場合、Ｓ２４００段階であらゆるプログラム状態に対する検証動作が各々実行される。その上、Ｓ２４００段階で、変数ＦＢＣＰＳに対応するプログラム状態に対するフェイルビットカウント動作が実行される。カウントされたフェイルビット数は、Ｓ２２００段階で以前のプログラムループのフェイルビット数として使われる。
【０１２５】
Ｓ２５００段階ではあらゆるプログラム状態がパスされたのか否かが判別される。もし少なくとも一つのプログラム状態がパスできないと判別されると、手順は、Ｓ２６００段階に進行し、Ｓ２６００段階ではプログラムループ回数が１だけ増加される。以後、手順は、Ｓ２１００段階に進行する。あらゆるプログラム状態がパスされたと判別される場合、手順は終了される。
【０１２６】
前述の方法によると、プログラム動作が現在のプログラムループで実行された後、以前のプログラムループの検証結果を利用してプログラム状態に対する検証動作が省略される。このような理由で、たとえカウントされたフェイルビット数が所定の基準値より小さいと判別されても、現在のプログラムループでフェイルビットに対応するメモリセルにプログラム電圧がもう一度印加される。結果的に、省略されるプログラム状態に対応するフェイルビット数は、減少する。
【０１２７】
例示的な実施形態において、各プログラム状態がパスされたか否かを判別するために、あらゆるプログラム状態に対して同一の基準値が使われる。しかし、対応するプログラム状態がパスされたか否かを判別するためにプログラム状態（または、各行に属するページ）に他の基準値を適用することも可能である。
【０１２８】
図３１は、本発明の例示的な実施形態による図３０のプログラム方法に使われた検証スキームを示す図である。
先に説明されたように、最初のプログラム状態Ｐ１に対するビットカウント動作は、フェイルビット数が所定の基準値より小さくなる時まで実行される。この時、残りのプログラム状態に対するフェイルビットカウント動作は、実行できない。変数ＦＢＣＰＳに対応するプログラム状態に対するビットカウント動作は、選択されたメモリセルにプログラム電圧を印加するプログラム動作の間に実行される。
【０１２９】
例えば、まず、選択されたメモリセルにプログラム電圧が印加される。その次に、図３１に示したように、検証動作が実行される前に、フェイルビット数が所定の基準値より小さいか否かがチェックされる。もしフェイルビット数が所定の基準値より小さくなければ、Ｎ番目プログラムループでプログラム状態Ｐ１、Ｐ２、Ｐ３に対する検証動作が実行される。プログラム状態Ｐ１に対するフェイルビットカウント動作は、Ｎ番目プログラムループの検証動作の時に読み出されたプログラム状態Ｐ１に対応するデータビットに基づいてＮ番目プログラムループの間に実行される。カウントされたフェイルビット数は、図１の制御ロジック４００によって維持される。
【０１３０】
もしＮ＋１番目プログラムループが実行されると、プログラム電圧は、選択されたメモリセルに印加される。その次に、Ｎ＋１番目プログラムループの検証動作以前に、フェイルビット数が所定の基準値より小さいか否かがチェックされる。カウントされたフェイルビット数は、図１の制御ロジック４００によって維持される。
【０１３１】
もしカウントされたフェイルビット数ＦＢＣがＮ＋２番目プログラムループで所定の基準値より小さいと判別されると、プログラム状態Ｐ１に対応するデータビットの中でフェイルビットは、プログラム禁止状態に設定され、プログラム状態Ｐ１に対する検証動作は、現在のプログラムループ（例えば、Ｎ＋２番目プログラムループ）を含む次のプログラムループ以後に省略される。プログラム状態Ｐ１がパスされることによって、図３１に示したように、次のプログラム状態Ｐ２に対するフェイルビットカウント動作が実行される。
【０１３２】
前述の説明から分かるように、カウントされたフェイルビット数が所定の基準値より小さいと判別された後、フェイルビットに対応するメモリセルにプログラム電圧が印加される。これは、省略されるプログラム状態に対応するフェイルビット数が減少されることを意味する。
【０１３３】
例示的な実施形態において、最上位プログラム状態の場合、カウントされたフェイルビット数が所定の基準値より小さいと判別されると、追加的なプログラム電圧がフェイルビットに対応するメモリセルに印加されることを禁止することが可能である。
【０１３４】
図３２は、本発明の他の例示的な実施形態によるフラッシュメモリ装置をプログラムする方法を示すフローチャートである。
図３２に示したプログラム方法は、あらゆるプログラム状態がパスされたか否かを判別する動作Ｓ２７００が、パスされたプログラム状態を除いた残りのプログラム状態に対する検証動作を実行する動作Ｓ２８００より前に行なわれること以外は、図３０に示したものと実質的に同一である。したがって、それに対する説明は、省略される。
【０１３５】
図１６乃至図２１と図２７乃至図３０で説明されたように、パスされたプログラム状態に対する検証動作が省略される。これは、たとえプログラム電圧がワードラインに印加されてもパスされたと判別されたプログラム状態に対応するメモリセルがプログラム禁止されることを意味する。言い換えれば、スロービット（または、フェイルビット）に対応するメモリセルのプログラム禁止は、２つの方法、即ち、図１６乃至図２１で説明された第１プログラム禁止方法と図２７乃至図３０で説明された第２プログラム禁止方法とで行なわれる。
【０１３６】
図３３は、本発明の例示的な実施形態によるフラッシュメモリ装置を含む集積回路カードを概略的に示すブロック図である。
図３３を参照すると、集積回路カード（例えば、スマートカード）は、不揮発性メモリ装置１０００と制御器２０００とを含む。不揮発性メモリ装置１０００は、図１に示したものと実質的に同一であるので、それに対する説明は省略する。制御器２０００は不揮発性メモリ装置１０００を制御し、ＣＰＵ２１００、ＲＯＭ２２００、ＲＡＭ２３００、そして入出力インターフェース２４００を含む。ＣＰＵ２１００は、ＲＯＭ２２００に格納される多様なプログラムに基づいて集積回路カードの動作を全般的に制御し、入出力インターフェース２４００は外部とのインターフェースを提供する。制御器２０００は不揮発性メモリ装置１０００のプログラム動作の間検出されたパスビットを示す情報を格納するように、そして検出されたパスビットを示す情報を不揮発性メモリ装置１０００に提供するように構成することができる。そのような情報は、上述のファインプログラム動作を実行する時に検証開始点を予測するのに用いることができる。
【０１３７】
フラッシュメモリ装置は電力が遮断されても格納されたデータを保持することができる不揮発性メモリ装置である。セルラーホン、ＰＤＡデジタルカメラ、ポータブルゲームコンソール、そしてＭＰ３Ｐのようなモバイル装置の使用増加によって、フラッシュメモリ装置はデータストレージだけではなく、コードストレージとしてより広く用いられる。フラッシュメモリ装置は、またＨＤＴＶ、ＤＶＤ、ルータ、そしてＧＰＳのようなホームアプリケーションに用いることができる。本発明の例示的な実施形態によるフラッシュメモリ装置を含むコンピュータシステムを図３４に概略的に示している。
【０１３８】
本発明によるコンピュータシステムはバス３００１に電気的に接続されたマイクロプロセッサ３１００、ユーザインターフェース３２００、ベースバンドチップセット（ｂａｓｅ  ｂａｎｄ  ｃｈｉｐｓｅｔ）のようなモデム３３００、メモリ制御器３４００、そして格納媒体としてフラッシュメモリ装置３５００を含む。フラッシュメモリ装置３５００は図１に示したものと実質的に同一に構成される。フラッシュメモリ装置３５００は上述の適応的な検証方式に基づいてプログラム動作を実行するので、それに対する説明は省略する。フラッシュメモリ装置３５００には、マイクロプロセッサ３１００によって処理された／処理されるＮビットデータ（Ｎは１またはそれより大きい整数）がメモリ制御器３４００を通じて格納される。
【０１３９】
本発明によるコンピューティングシステムがモバイル装置の場合、コンピューティングシステムの動作電圧を供給するためのバッテリ３６００が追加的に提供される。図示しないが、本発明によるコンピューティングシステムには応用チップセット（ａｐｐｌｉｃａｔｉｏｎ  ｃｈｉｐｓｅｔ）、カメライメージプロセッサ（Ｃａｍｅｒａ  Ｉｍａｇｅ  Ｐｒｏｃｅｓｓｏｒ：ＣＩＳ）、モバイルＤＲＡＭなどをさらに提供することができることはこの分野の通常の知識を備えた者等に自明である。メモリ制御器及びフラッシュメモリ装置は、例えば、データを格納するのに不揮発性メモリを用いる半導体ドライブ／ディスク（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ／Ｄｉｓｋ：ＳＳＤ）を構成することができる。
【０１４０】
図３５は、本発明の例示的な実施形態による図３２に示したメモリ制御器を概略的に示すブロック図である。
図３５を参照すると、制御器は格納媒体にデータを格納するように、そして格納媒体からデータを読み出すように構成される。制御器は、ホストインターフェース４１００、メモリインターフェース４２００、処理ユニット４３００、バッファメモリ４４００、そしてエラー制御ユニット４５００を含む。ホストインターフェース４１００は外部装置（例えば、ホスト）とインターフェースするように構成され、メモリインターフェース４２００は格納媒体とインターフェースするように構成される。処理ユニット４３００は、制御器の動作を全般的に制御するように構成される。バッファメモリ４４００は、格納媒体に格納されるデータを、または格納媒体から読み出されたデータを一時的に格納するのに用いられる。また、バッファメモリ４４００は、処理ユニット４３００のワークメモリ（ｗｏｒｋ  ｍｅｍｏｒｙ）として用いることができる。バッファメモリ４４００は、フラッシュメモリ装置から出力されるパスビット情報を格納するのに用いることができる。エラー制御ユニット４５００は、格納媒体から読み出されたデータのエラーを検出及び訂正するように構成される。図３５に示したように、制御器にコードデータを格納するためのＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）４６００をさらに提供することもできる。
【０１４１】
本発明の例示的な実施形態において、メモリセルは可変抵抗メモリセルとして構成することができ、例示的な可変抵抗メモリセル及びそれを含むメモリ装置が特許文献３に記載されている。
本発明の他の例示的な実施形態において、メモリセルは、電荷格納層を有する多様なセル構造のうち１つを利用して実現することができる。電荷格納層を有するセル構造は、電荷トラップ層を利用する電荷トラップフラッシュ構造、アレイが多層で積層されるスタックフラッシュ構造、ソース／ドレインのないフラッシュ構造、ピンタイプフラッシュ構造、などを含む。
【０１４２】
電荷格納層として電荷トラップフラッシュ構造を有するメモリ装置が特許文献４、５、及び６に記載されており、ソース／ドレインのないフラッシュ構造は特許文献７に記載されており、この出願の先行技術文献として含まれる。
【０１４３】
本発明によるフラッシュメモリ装置及び／またはメモリ制御器は、多様な形態のパッケージを利用して実装することができる。例えば、本発明によるフラッシュメモリ装置及び／またはメモリ制御器は、ＰｏＰ（Ｐａｃｋａｇｅ  ｏｎ  Ｐａｃｋａｇｅ）、Ｂａｌｌ  ｇｒｉｄ  ａｒｒａｙｓ（ＢＧＡｓ）、Ｃｈｉｐ  ｓｃａｌｅ  ｐａｃｋａｇｅｓ（ＣＳＰｓ）、Ｐｌａｓｔｉｃ  Ｌｅａｄｅｄ  Ｃｈｉｐ  Ｃａｒｒｉｅｒ（ＰＬＣＣ）、Ｐｌａｓｔｉｃ  Ｄｕａｌ  Ｉｎ−Ｌｉｎｅ  Ｐａｃｋａｇｅ（ＰＤＩＰ）、Ｄｉｅ  ｉｎ  Ｗａｆｆｌｅ  Ｐａｃｋ、Ｄｉｅ  ｉｎ  Ｗａｆｅｒ  Ｆｏｒｍ、Ｃｈｉｐ  Ｏｎ  Ｂｏａｒｄ（ＣＯＢ）、Ｃｅｒａｍｉｃ  Ｄｕａｌ  Ｉｎ−Ｌｉｎｅ  Ｐａｃｋａｇｅ（ＣＥＲＤＩＰ）、Ｐｌａｓｔｉｃ  Ｍｅｔｒｉｃ  Ｑｕａｄ  Ｆｌａｔ  Ｐａｃｋ（ＭＱＦＰ）、Ｔｈｉｎ  Ｑｕａｄ  Ｆｌａｔｐａｃｋ（ＴＱＦＰ）、Ｓｍａｌｌ  Ｏｕｔｌｉｎｅ（ＳＯＩＣ）、Ｓｈｒｉｎｋ  Ｓｍａｌｌ  Ｏｕｔｌｉｎｅ  Ｐａｃｋａｇｅ（ＳＳＯＰ）、Ｔｈｉｎ  Ｓｍａｌｌ  Ｏｕｔｌｉｎｅ  Ｐａｃｋａｇｅ（ＴＳＯＰ）、Ｔｈｉｎ  Ｑｕａｄ  Ｆｌａｔｐａｃｋ（ＴＱＦＰ）、Ｓｙｓｔｅｍ  Ｉｎ  Ｐａｃｋａｇｅ（ＳＩＰ）、Ｍｕｌｔｉ  Ｃｈｉｐ  Ｐａｃｋａｇｅ（ＭＣＰ）、Ｗａｆｅｒ−ｌｅｖｅｌ  Ｆａｂｒｉｃａｔｅｄ  Ｐａｃｋａｇｅ（ＷＦＰ）、Ｗａｆｅｒ−Ｌｅｖｅｌ  Ｐｒｏｃｅｓｓｅｄ  Ｓｔａｃｋ  Ｐａｃｋａｇｅ（ＷＳＰ）などのようなパッケージを利用して実装することができる。
【０１４４】
本発明の範囲または技術的思想を逸脱せず、本発明の構造を多様に修正、または変更することができることは、この分野に熟練された者等に自明である。上述の内容を考慮する時、もし本発明の修正及び変更が請求項及び同等物の範疇内に属したら、本発明は、この発明の変更及び修正を含むとみなされる。
【符号の説明】
【０１４５】
１００  メモリセルアレイ
２００  行デコーダ回路
３００  電圧発生回路
４００  制御ロジック
５００  読み出し／書き込み回路
６００  入出力インターフェース回路
【図１】
2011165303.tif 000003
【図２】
2011165303.tif 000004
【図３】
2011165303.tif 000005
【図４】
2011165303.tif 000006
【図５】
2011165303.tif 000007
【図６】
2011165303.tif 000008
【図７】
2011165303.tif 000009
【図８】
2011165303.tif 000010
【図９】
2011165303.tif 000011
【図１０】
2011165303.tif 000012
【図１１】
2011165303.tif 000013
【図１２】
2011165303.tif 000014
【図１３】
2011165303.tif 000015
【図１４】
2011165303.tif 000016
【図１５】
2011165303.tif 000017
【図１６】
2011165303.tif 000018
【図１７】
2011165303.tif 000019
【図１８】
2011165303.tif 000020
【図１９】
2011165303.tif 000021
【図２０】
2011165303.tif 000022
【図２１】
2011165303.tif 000023
【図２２】
2011165303.tif 000024
【図２３Ａ】
2011165303.tif 000025
【図２３Ｂ】
2011165303.tif 000026
【図２４Ａ】
2011165303.tif 000027
【図２４Ｂ】
2011165303.tif 000028
【図２５Ａ】
2011165303.tif 000029
【図２５Ｂ】
2011165303.tif 000030
【図２６Ａ】
2011165303.tif 000031
【図２６Ｂ】
2011165303.tif 000032
【図２７】
2011165303.tif 000033
【図２８】
2011165303.tif 000034
【図２９】
2011165303.tif 000035
【図３０】
2011165303.tif 000036
【図３１】
2011165303.tif 000037
【図３２】
2011165303.tif 000038
【図３３】
2011165303.tif 000039
【図３４】
2011165303.tif 000040
【図３５】
2011165303.tif 000041