(57)【要約】【課題】各メモリセルへの書き込みを一回の書き込み動作で完了させることで、書き込み動作を高速化する。【解決手段】不揮発性半導体記憶装置１は、複数のメモリセル群を有するブロックを含み、前記複数のメモリセル群の各々は複数のビット線にそれぞれ電気的に接続されかつ共通のワード線に電気的に接続され、各メモリセルは複数ビットを記録する、不揮発性メモリ２２と、第１のワード線に書き込むべき第１のデータを補正した情報を格納するレジスタ１６〜１８と、書き込み対象の第１のメモリセルに最終的に設定すべき目標電位から、第１のメモリセルに隣接しかつ未書き込みの第２のメモリセルに電位を設定することによって発生する電位上昇分を差し引いた設定電位をレジスタ１６〜１８に設定し、かつレジスタ１６〜１８の情報を用いて第１のメモリセルに複数ビットを一回で書き込む制御回路１２とを含む。【選択図】      図２
2010160871.tif 000002
【特許請求の範囲】
【請求項１】
複数のメモリセル群を有するブロックを含み、前記複数のメモリセル群の各々は複数のビット線にそれぞれ電気的に接続されかつ共通のワード線に電気的に接続され、各メモリセルは複数ビットを記録する、不揮発性メモリと、
第１のワード線に書き込むべき第１のデータを補正した情報を格納する第１のレジスタと、
書き込み対象の第１のメモリセルに最終的に設定すべき目標電位から、前記第１のメモリセルに隣接しかつ未書き込みの第２のメモリセルに電位を設定することによって発生する電位上昇分を差し引いた設定電位を前記第１のレジスタに設定し、かつ前記第１のレジスタの情報を用いて前記第１のメモリセルに複数ビットを一回で書き込む制御回路と、
を具備することを特徴とする不揮発性半導体記憶装置。
【請求項２】
前記第１のワード線の次の第２のワード線に書き込むべき第２のデータを格納する第２のレジスタをさらに具備し、
前記制御回路は、前記第２のレジスタの情報を参照して前記設定電位を求めることを特徴とする請求項１に記載の不揮発性半導体記憶装置。
【請求項３】
前記電位上昇分は、前記第２のメモリセルの目標電位と、前記第１のメモリセル及び前記第２のメモリセル間のカップリング効果に基づく定数とを乗じた値に基づいて求められることを特徴とする請求項１又は２に記載の不揮発性半導体記憶装置。
【請求項４】
前記制御回路は、前記第１のメモリセルの設定電位の最大値及び最小値を算出してそれらの間を等分割した電位表を作成し、この電位表を用いて前記設定電位を求めることを特徴とする請求項１乃至３のいずれかに記載の不揮発性半導体記憶装置。
【請求項５】
前記制御回路は、書き込みデータごとに前記電位上昇分による補正量の大きさに応じて補正値を求め、かつ前記書き込みデータ及び前記補正値を用いて電位表を作成し、この電位表を用いて前記設定電位を求め、
前記第１のレジスタは、前記第１のデータを格納する第１のレジスタ部と、前記補正値を格納する第２のレジスタ部とを含むことを特徴とする請求項１乃至３のいずれかに記載の不揮発性半導体記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性半導体記憶装置に係り、例えば電気的に書き換えが可能なメモリセルを備えた不揮発性半導体記憶装置に関する。
【背景技術】
【０００２】
電気的に書き換えが可能な不揮発性半導体メモリの一つとして、ＮＡＮＤ型フラッシュメモリが知られている。ＮＡＮＤ型フラッシュメモリにデータを記録する場合、典型的には、ブロック内をワード線の順に一方の端から他方の端に向かって記録する。このとき１ワード線に対して偶数ビット線及び奇数ビット線と２つのステップに分けて記録することで、ビット線間の干渉を抑えることができる。
【０００３】
ＮＡＮＤ型フラッシュメモリ内のあるメモリセルをチャージすると、それ以前に記録された隣接セルもまたそのメモリセルからのカップリング効果によって浮遊ゲート電極の電位が変動し、その結果、隣接セルに元々記録されていた情報が変わってしまうという問題がある（カップリング効果）。この問題は、記録する情報に対して有効な電位幅が狭いＭＬＣ（Multi Level Cell）型フラッシュメモリにおいてより深刻である。
【０００４】
このカップリング効果の影響を抑えるために、ＭＬＣ型フラッシュメモリではメモリセルに記録する複数の情報のそれぞれに対する目標電位を粗い間隔から順次細かい間隔になるように割り当てておき、まず粗い設定のビットを書き込み、隣接する全てのビットに粗い設定を終えた後、順次細かい設定のビットを上塗りする方式が用いられている（特許文献１）。この方式によれば、あるビットに対応する電位を設定する時、それ以前に設定した粗い電位設定の結果発生するカップリング効果を補正しながら電位の上塗りを行うため、記録の終了した時点で残る電位の変動は最後のビットを書き込む際発生した電位変動に伴うカップリング効果分に抑制することができる。
【０００５】
しかしながら、メモリセル間の電位がより密に連動している場合、粗い設定を行った結果発生するカップリング効果をそれ以降のより細かい電位設定時に吸収し切ることができず、正しい電位設定が出来なくなったり、最終ビットを書き込んだ結果発生する隣接セルの電位変動が電位認識の閾値を超えてしまったりして、その結果、書き込んだデータと読み出せるデータとが異なってしまう恐れがある。さらに、何度かに分けて当該メモリセルへの書き込みを行うため、書き込み速度が遅くなるという問題がある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００４−１９２７８９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明は、各メモリセルへの書き込みを一回の書き込み動作で完了させることで、書き込み動作を高速化することが可能な不揮発性半導体記憶装置を提供する。
【課題を解決するための手段】
【０００８】
本発明の一態様に係る不揮発性半導体記憶装置は、複数のメモリセル群を有するブロックを含み、前記複数のメモリセル群の各々は複数のビット線にそれぞれ電気的に接続されかつ共通のワード線に電気的に接続され、各メモリセルは複数ビットを記録する、不揮発性メモリと、第１のワード線に書き込むべき第１のデータを補正した情報を格納する第１のレジスタと、書き込み対象の第１のメモリセルに最終的に設定すべき目標電位から、前記第１のメモリセルに隣接しかつ未書き込みの第２のメモリセルに電位を設定することによって発生する電位上昇分を差し引いた設定電位を前記第１のレジスタに設定し、かつ前記第１のレジスタの情報を用いて前記第１のメモリセルに複数ビットを一回で書き込む制御回路とを具備する。
【発明の効果】
【０００９】
本発明によれば、各メモリセルへの書き込みを一回の書き込み動作で完了させることで、書き込み動作を高速化することが可能な不揮発性半導体記憶装置を提供することができる。
【図面の簡単な説明】
【００１０】
【図１】メモリセルアレイの概略図。
【図２】第１の実施形態に係る不揮発性半導体記憶装置１の構成を示すブロック図。
【図３】図２に示すメモリセルアレイ２２の一例を示す図。
【図４】１個のＮＡＮＤストリングの構成を示す断面図。
【図５】ワークレジスタの構成を示す概略図。
【図６Ａ】不揮発性半導体記憶装置１の全体動作を示すフローチャート。
【図６Ｂ】図６Ａに続く不揮発性半導体記憶装置１の全体動作を示すフローチャート。
【図７】データフラッシュ動作を示すフローチャート。
【図８】受信データをデータレジスタに格納する処理を示すフローチャート。
【図９Ａ】ワード線への書き込み処理を示すフローチャート。
【図９Ｂ】図９Ａに続くワード線への書き込み処理を示すフローチャート。
【図１０】記録データの応じた目標電位の一例を示す図。
【図１１】ビット線への電位設定処理を示すフローチャート。
【図１２Ａ】書き込み検査処理を示すフローチャート。
【図１２Ｂ】図１２Ａに続く書き込み検査処理を示すフローチャート。
【図１３】ビット線への電位設定、及び書き込み検査の具体例を説明する図。
【図１４Ａ】第３の実施形態に係るワード線への書き込み処理を示すフローチャート。
【図１４Ｂ】図１４Ａに続くワード線への書き込み処理を示すフローチャート。
【図１５】メモリセルの設定電位を計算する処理を示すフローチャート。
【図１６】第４の実施形態に係るワード線への書き込み処理を示すフローチャート。
【図１７Ａ】第５の実施形態に係るワード線への書き込み処理を示すフローチャート。
【図１７Ｂ】図１７Ａに続くワード線への書き込み処理を示すフローチャート。
【図１８Ａ】書き込み検査処理を示すフローチャート。
【図１８Ｂ】図１８Ａに続く書き込み検査処理を示すフローチャート。
【図１９】設定電位の変換テーブルを示す図。
【発明を実施するための形態】
【００１１】
以下、本発明の実施形態について図面を参照して説明する。なお、以下の説明において、同一の機能及び構成を有する要素については、同一符号を付し、重複説明は必要な場合にのみ行う。
【００１２】
ＮＡＮＤ型フラッシュメモリへの情報の記録（書き込み）は、電荷蓄積層（浮遊ゲート電極）の電位を変化させることによって行うが、この電位を外部から直接知ることはできず、代わりに浮遊ゲート電極の電位を相殺してチャネルを遮断状態から導通状態に変化させるのに必要な制御ゲート電極への印加電圧の大きさによってそれを知る。従って、以下の説明でセル電位とは、メモリセルのチャネルを導通状態に変化させるのに必要な制御ゲート電極の電位を指す。一般に、浮遊ゲート電極の電位とセル電位との間には、消去状態の両電位を基点とするならば比例の関係がある。
【００１３】
本発明では、各メモリセルへの書き込みを一回の書き込み処理によって完了させる。この時、隣接セルのカップリング効果を予測し、その分を差し引いたセル電位の設定を行うことでカップリング効果を相殺する。
【００１４】
図１に示すように、注目しているメモリセルＣｎに対して同一ワード線ＷＬｘ上でビット線が隣り合う両隣接セルをそれぞれＣｎ-１、Ｃｎ+１、同一ビット線ＢＬｙ上でワード線が隣り合う両隣接セルをそれぞれＣｎ−Ｂ、Ｃｎ+Ｂとする。“Ｂ”は、ビット線数を表している。
【００１５】
メモリセルＣｎに対して同一ビット線かつ隣接ワード線上にある未書き込み隣接セルが書き込まれたとき、その電位変化がメモリセルＣｎの電位に与える影響の比を“Ｙｗ”とする。メモリセルＣｎに対して同一ワード線かつ隣接ビット線上にある未書き込み隣接セルが書き込まれたとき、その電位変化がメモリセルＣｎの電位に与える影響の比を“Ｙｂ”とする。メモリセルＣｎに対してワード線及びビット線とも隣り合う斜め方向の未書き込み隣接セルが書き込まれたとき、その電位変化がメモリセルＣｎの電位に与える影響の比を“Ｙｃ”とする。メモリセルＣｎに最終的に設定したい電位（目標電位）を“Ｅｎ”、実際にメモリセルＣｎにチャージする電位（設定電位）をＶｎで表す。ただし、目標電位及び設定電位はそれぞれ、消去状態のメモリセルの電位を基準とした値である。
【００１６】
同一ワード線に接続されたメモリセルへの情報の書き込みは、最初に偶数番目のビット線に接続されたメモリセル、続いて奇数番目のビット線に接続されたメモリセルの順で行われる。最初に書き込まれる側である偶数番目のビット線上のメモリセルの設定電位は、隣接セルからのカップリング効果は未書き込みのメモリセルからのみ受けるため、以下の式（１）で表すことができる。
【００１７】
Ｖｎ＝Ｅｎ−（Ｅｎ−１＋Ｅｎ＋１）Ｙｂ−Ｅｎ＋ＢＹｗ−（Ｅｎ＋Ｂ−１＋Ｅｎ＋Ｂ＋１）Ｙｃ
−（１）
後から書き込まれる側である奇数番目のセルへの設定電位は、以下の式（２）で表すことができる。
【００１８】
Ｖｎ＝Ｅｎ−Ｅｎ＋ＢＹｗ−（Ｅｎ＋Ｂ−１＋Ｅｎ＋Ｂ＋１）Ｙｃ         −（２）
上記式に基づく電位を正しく設定するなら、各メモリセルに一回ずつ情報を記録するだけで最終的な各メモリセルの電位は期待値に近い値にすることができる。
【００１９】
［第１の実施形態］
［１．不揮発性半導体記憶装置１の構成］
図２は、本発明の第１の実施形態に係る不揮発性半導体記憶装置１の構成を示すブロック図である。不揮発性半導体記憶装置１は、データの書き込み及び読み出しの両方の機能を持つが、以下の説明は書き込みに関するものである。読み出しに関しては、従来から用いられている技術をそのまま用いて実現することができる。
【００２０】
不揮発性半導体記憶装置１は、入出力制御回路１０を介して外部（ホスト装置など）と接続される。入出力制御回路１０は、データ線を介して外部からアドレス及びデータを受け、また、制御線を介して外部から制御信号を受ける。入出力制御回路１０は、所定のプロトコルに従って、外部回路とのインターフェース処理を行う。
【００２１】
アドレスレジスタ１１は、入出力制御回路１０から送られるアドレスをラッチする。このアドレスは、メモリセルアレイ２２の行を選択するためのロウアドレスを含んでいる。アドレスレジスタ１１は、このラッチしたアドレスのうちロウアドレスをロウデコーダ１５に送る。ロウデコーダ１５は、ロウアドレスに基づいてワード線のいずれかを選択する。
【００２２】
制御回路１２は、外部からの制御信号（コマンドなど）を受けて内部の各モジュールを制御する。図２では、図面が乱雑になるのを防ぐために制御回路１２から全てのモジュールへの信号線の記載を省略しているが、実際には、制御回路１２は、不揮発性半導体記憶装置１内部の全てのモジュールを制御している。制御回路１２は、作業エリアとしてのＲＡＭ（random access memory）や、制御プログラムなどを格納するＲＯＭ（read only memory）を備えており、これらを用いて制御動作を実行する。
【００２３】
電圧発生回路１３は、不揮発性半導体記憶装置１が必要とする様々な電圧を発生させる。このために、電圧発生回路１３は、例えば、各種電圧を発生させるＤ／Ａコンバータを備えている。電圧発生回路１３が発生させる書き込み電圧Ｖp、読み出し電圧Ｖr等はロウデコーダ１５のデコード情報に従って各ワード線に印加される。
【００２４】
センスアンプ回路２１は、制御回路１２から送られるカラム選択信号によって選択されたビット線のデータを読み出す。このために、センスアンプ回路２１は、データの書き込み、書き込み検査の各ステップにおいて各レジスタが要求する動作に応じて何通りかの固定電圧を発生させてビット線に印加する。例えば、センスアンプ回路２１は、データ読み出し時、予めビット線を所定電圧にプリチャージしておく。この時、読み出し対象のメモリセルに接続されたワード線には情報に応じた読み出し電圧が印加され、読み出し対象以外のメモリセルに接続されたワード線には記憶情報に関係なくセルがオンする読み出しパス電圧が印加される。そして、センスアンプ回路２１は、ビット線の電位が放電されるか否かによって、読み出し対象のメモリセルに記録された情報を読み出す。
【００２５】
メモリセルアレイ２２は、ＮＡＮＤ型フラッシュメモリから構成されており、このＮＡＮＤ型フラッシュメモリに含まれる各メモリセルは、２ビットの情報を記録可能である。このように、本実施形態では、各メモリセルが２ビットの情報を記録する場合のシステム例を説明するが、これに限定されるものではなく、各メモリセルが３ビット以上の情報を記録するシステムにも適用可能である。
【００２６】
メモリセルアレイ２２とは、それぞれがカラム方向に延在する４０９６本のビット線ＢＬ、それぞれがロウ方向に延在する６４本のワード線ＷＬを配置し、その交点の各々に一個のメモリセルを配置したものを単位とし、さらにこの単位を例えば４０９６個カラム方向に並べたものである。各ビット線にはセンスアンプ回路２１の各制御ユニットが接続され、各ワード線にはロウデコーダ１５の各ユニットが接続される。１本のワード線に接続されるメモリセルの個数は４０９６個で各２ビットの情報を記録するため、１ワード線ごとに８１９２ビットの記録容量を持つ。この１ワード線ごとに記録される情報の単位をページと称し、このページ単位でデータの書き込み及び読み出しが行われる。６４本のワード線ごとに記録される情報の単位をブロックと称し、このブロック単位でデータの消去が行われる。
【００２７】
また、本実施形態では、ビット線間干渉を抑えるために、１本のワード線ＷＬに接続されるメモリセルＭＣへの書き込みは、偶数番目のビット線ＢＬと、奇数番目のビット線ＢＬとの２ステップに分けて行われる。すなわち、１本のワード線ＷＬに繋がる４０９６個のメモリセルＭＣのうち、偶数番目のビット線ＢＬに接続される２０４８個のメモリセルに対して第１ステップの書き込み処理が行われ、奇数番目のビット線ＢＬに接続される２０４８個のメモリセルに対して第２ステップの書き込み処理が行われる。
【００２８】
図３は、図２に示すメモリセルアレイ２２の一例を示す図である。図３に示すように、メモリセルアレイ２２は複数個のブロック、例えば４０９６個のブロックＢＬＫ０〜ＢＬＫ４０９５を備えている。各ブロックＢＬＫは、複数個のＮＡＮＤストリング、例えば４０９６個のＮＡＮＤストリングを備えている。複数個のＮＡＮＤストリングにそれぞれ含まれる選択トランジスタＳＴＤは、そのドレインがビット線ＢＬに接続され、そのゲートが選択ゲート線ＳＧＤに共通接続されている。また、複数個のＮＡＮＤストリングにそれぞれ含まれる選択トランジスタＳＴＳは、そのソースがソース線ＳＲＣに共通接続され、そのゲートが選択ゲート線ＳＧＳに共通接続されている。
【００２９】
各ＮＡＮＤストリングにおいて、複数個のメモリセルＭＣ、例えば６４個のメモリセルＭＣは、選択トランジスタＳＴＤのソースと選択トランジスタＳＴＳのドレインとの間に、それぞれの電流経路が直列接続されるように配置されている。すなわち、複数個のメモリセルＭＣは、隣接するもの同士で拡散領域（ソース領域若しくはドレイン領域）を共有するような形でカラム方向に直列接続される。
【００３０】
そして、最もドレイン側に位置するメモリセルＭＣから順に、制御ゲート電極がワード線ＷＬ０〜ＷＬ６３にそれぞれ接続されている。従って、ワード線ＷＬ０に接続されたメモリセルＭＣのドレインは選択トランジスタＳＴＤのソースに接続され、ワード線ＷＬ６３に接続されたメモリセルＭＣのソースは選択トランジスタＳＴＳのドレインに接続されている。
【００３１】
また、ビット線ＢＬは、ブロック間で、選択トランジスタＳＴＤのドレインを共通接続している。つまり、複数個のブロック内において同一列にあるＮＡＮＤストリングは、同一のビット線ＢＬに接続される。
【００３２】
図４は、１個のＮＡＮＤストリングの構成を示す断面図である。半導体基板３０内には、Ｐ型ウェル（Ｐ−ｗｅｌｌ）３１が形成されている。各メモリセルＭＣは、Ｐ型ウェル３１上に形成された積層ゲート構造を備えたＭＯＳＦＥＴ（metal oxide semiconductor field effect transistor）から構成される。積層ゲート構造は、Ｐ型ウェル３１上に、トンネル絶縁膜３３、電荷蓄積層（浮遊ゲート電極）３４、ゲート間絶縁膜３５、制御ゲート電極３６が順に積層されて構成されている。隣接する積層ゲート構造間のＰ型ウェル３１内には、拡散領域（ソース領域或いはドレイン領域）３２が設けられている。
【００３３】
メモリセルＭＣは、浮遊ゲート電極３４に蓄えられる電子の数に応じて閾値電圧が変化し、この閾値電圧の違いに応じてデータを記録する。なお、メモリセルＭＣの種類としては、電荷蓄積層が多結晶シリコンなどの導電体からなる浮遊ゲート電極であるフローティングゲート型メモリセルであってもよいし、電荷蓄積層がシリコン窒化物などの絶縁体であるＭＯＮＯＳ（metal-oxide-nitride-oxide-semiconductor）型メモリセルであってもよい。ＭＯＮＯＳ型メモリセルの場合、ゲート間絶縁膜３５は、ブロック絶縁膜と呼ばれる。
【００３４】
選択トランジスタＳＴＤは、Ｐ型ウェル３１内に互いに離間して設けられたソース領域３７Ｓ及びドレイン領域３７Ｄ、ソース領域３７Ｓ及びドレイン領域３７Ｄ間のチャネル領域上に設けられたゲート絶縁膜３８、及びゲート絶縁膜３８上に設けられたゲート電極３９から構成されている。選択トランジスタＳＴＳも同様の構成である。
【００３５】
図２に戻り、データレジスタ０（１６）、データレジスタ１（１７）、補正値レジスタ（１８）、記録用ワークレジスタ０（１９）、及び記録用ワークレジスタ１（２０）の各々は、メモリセルアレイ２２のビット線の各々に対して１ビット又は２ビットの情報を保持するレジスタである。データレジスタ０及び１の各々はビット線当たり２ビットの容量、補正値レジスタアは同じくビット線当たり２ビットの容量、記録用ワークレジスタ０及び１の各々はビット線当たり１ビットの容量を有する。図５は、これらワークレジスタの構成を示す概略図である。
【００３６】
図５において、四角形一つが１ビットのメモリを表す。データレジスタ０及びデータレジスタ１をそれぞれＮｏ０、Ｎｏ１、補正値レジスタをＡ、記録用ワークレジスタ０及び記録用ワークレジスタ１をそれぞれｗｏｒｋ０、ｗｏｒｋ１と略記する。また、例えばビット線ＢＬ０のメモリセルに対応する補正値をプログラミング言語Ｃにおける配列表記法を借りてＡ［０］のように表記する。Ａ［０］は２ビットの値である。さらにＮｏ０とＡとを合わせたメモリセル当たり４ビットのデータをＮｏ０Ａと表記する。Ｎｏ０Ａの中ではＮｏ０の２ビットが上位、Ａの２ビットが下位の桁である。
【００３７】
［２．不揮発性半導体記憶装置１の動作］
次に、不揮発性半導体記憶装置１の全体動作について説明する。図６Ａ及び６Ｂは、不揮発性半導体記憶装置１の全体動作を示すフローチャートである。
【００３８】
不揮発性半導体記憶装置１の電源がオンされると、制御回路１２は、内部変数_ＦＲＯＭ状態をデータ未受信状態に設定し、同時に、内部変数work_addressをバックアップされたデータから復旧する（ステップ３０１）。内部変数work_addressは、ＮＯＲ型フラッシュメモリなどの不揮発性メモリ（図示せず）に随時バックアップされるデータであり、工場出荷時の値はゼロである。「内部変数」とは、制御回路１２が保持するデータであり、制御回路１２の処理に使用されるものである。
【００３９】
続いて、不揮発性半導体記憶装置１は、ホスト装置からのコマンドを受信し、この受信したコマンドを内部変数commandに設定する。（ステップ３０２）。このコマンドには、ライトコマンド、リードコマンド、消去コマンド、及びデータ送信終了コマンドが含まれる。
【００４０】
内部変数commandがライトであった場合、不揮発性半導体記憶装置１は、続いてホスト装置からアドレスを受信する（ステップ３０３）。受信したアドレスは、アドレスレジスタ１１に格納され、また、内部変数addressに設定される。このアドレスは、ワード線を指定する数値で、０以上「６４×４０９６−１」以下の値が有効値である。
【００４１】
続いて、制御回路１２は、受信したアドレス（すなわち、内部変数address）と、内部変数work_addressとを比較する（ステップ３０６）。もし異なっているならば、コマンドエラーとし（ステップ３０７）、ステップ３０２に戻って次のコマンド受信を待つ。一方、内部変数addressと内部変数work_addressとが等しい場合、続いて、制御回路１２は、ホスト装置からデータを受信し、この受信したデータをデータレジスタＮｏ１に格納する（ステップ３０８）。このステップ３０８における、受信データをデータレジスタＮｏ１に格納する処理については後述する。
【００４２】
続いて、制御回路１２は、内部変数_ＦＲＯＭ状態がデータ受信済状態である場合は、データレジスタＮｏ０のデータを、「work_address −１」の指すワード線に書き込む（ステップ３０９）。このステップ３０９における書き込み処理については後述する。
【００４３】
続いて、制御回路１２は、データレジスタＮｏ１のデータをデータレジスタＮｏ０にコピーする（ステップ３１０）。その後、制御回路１２は、内部変数_ＦＲＯＭ状態をデータ受信済状態に変更し（ステップ３１１）、内部変数work_addressを１だけ増やす（ステップ３１２）。
【００４４】
通常はここで処理を終えて次のコマンド待ちに戻るが、ブロックの最後のページにまで到達した場合は最後のページに対応するワード線にも書き込みを行う。すなわち、内部変数work_addressが６４の倍数になったとき（ステップ３１３）、制御回路１２は、データフラッシュ処理を行う（ステップ３１４）。なお、図６Ａのステップ３１３にある“％”は、左辺の数値を右辺の数値で割って剰余を求める演算子である。
【００４５】
図７は、制御回路１２によるデータフラッシュ動作を示すフローチャートである。制御回路１２は、データレジスタＮｏ１の各レジスタ値を全て“１１（ｂ）”に設定する（ステップ３３０）。（ｂ）は２進数を意味する記号である。続いて、制御回路１２は、データレジスタＮｏ０のデータを「work_address −１」の指すワード線に書き込む（ステップ３３１）。続いて、制御回路１２は、内部変数_ＦＲＯＭ状態をデータ未受信状態に設定する（ステップ３３２）。データフラッシュ処理の終了後、次のコマンド待ちに戻る。
【００４６】
続いて、内部変数commandがデータ送信終了である場合（ステップ３１５）で、内部変数_ＦＲＯＭ状態がデータ受信済状態ならば（ステップ３１６）、制御回路１２は、図７で説明したデータフラッシュ処理を行う。
【００４７】
続いて、制御回路１２は、内部変数work_addressを１だけ増やす（ステップ３１８）。これは、一旦連続した書き込みが終了したなら、続いて受け取ることのできるライトコマンドのアドレスは、記録済みの最後のワード線から一つ分あけてその次になることを意味する。もしステップ３１６において電源オンまたは前回のデータ送信終了から一度もライトコマンドを受信していない、つまり内部変数_ＦＲＯＭ状態がデータ未受信状態ならば、制御回路１２は、コマンドエラーとして扱い（ステップ３１９）、次のコマンド待ちに戻る。
【００４８】
その他のコマンドを受けた場合、例えば内部変数commandがリードである場合（ステップ３２０）、制御回路１２は、これを適切にリード処理（ステップ３２１）して次のコマンド待ちに戻るが、そのリード処理は従来広く行われてきた技術を用いることができる。また、内部変数commandが消去である場合（ステップ３２２）、よく知られた消去処理動作を行った後、内部変数work_addressをゼロに戻す（ステップ３２３）。
【００４９】
［２−１．受信データをデータレジスタＮｏ１に格納する処理］
次に、図６Ａのステップ３０８における受信データをデータレジスタＮｏ１に格納する処理の詳細について説明する。図８は、制御回路１２によるステップ３０８の処理を示すフローチャートである。
【００５０】
動作開始時、制御回路１２は、カウンタ変数ｂｘをゼロに設定（初期化）する（ステップ４０１）。ｂｘは、ビット線の番号を表している。コマンド、アドレスに続くデータの受信では、１６本のデータ線を用いて一回のデータ受信を行い、すなわち１６ビットのデータを受信する（ステップ４０２）。受信したデータは、内部変数receive_wordに設定される。
【００５１】
続いて、制御回路１２は、１６ビットの受信データを２ビットずつ区切って８つの値を作り、これらをデータレジスタＮｏ１のカウンタ変数ｂｘが指す位置から連続８つの位置に格納する（ステップ４０３）。例えば、１６ビットの受信データのうち最初の２ビット、すなわち内部変数receive_word＜０，１＞に設定された２ビットデータは、データレジスタＮｏ１［ｂｘ＋０］に格納される。図８のステップ４０３は、実際には８つの格納処理からなるが、途中の図示を省略している。なお、ステップ４０３の処理は、回路によって１６ビットの内部変数から２ビットずつ連続する８つのデータレジスタＮｏ１の要素に値を転送することによっても実現することができる。
【００５２】
続いて、制御回路１２は、カウンタ変数ｂｘを８だけ増やす（ステップ４０４）。以後、制御回路１２は、この処理を、カウンタ変数ｂｘが４０９６に到達するまで、すなわち５１２回連続で行う。
【００５３】
［２−２．ワード線への書き込み処理］
次に、図６Ａのステップ３０９におけるデータレジスタＮｏ０のデータを「work_address −１」の指すワード線に書き込む処理の詳細について説明する。図９Ａ及び９Ｂは、制御回路１２によるステップ３０９の処理を示すフローチャートである。
【００５４】
データレジスタＮｏ０のデータを「work_address −１」の指すワード線に書き込む処理は、補正値を考慮した設定電位の決定と、ワード線への電位設定とに分かれる。図９Ａ及び９Ｂで主に取り上げるのは、そのうち補正値を考慮した設定電位の決定である。
【００５５】
最初に行うことは、各メモリセルへの設定電位の最高値、及び最低値を求めることである。これらの値を偶数番目のメモリセルと奇数番目のメモリセルとに対して独立して求めることによって、電位設定の精度を上げることができる。以後、全ての実施形態で特に断らない限り、設定電位、目標電位、セル電位等、電位に関する数値は消去時電位を原点とする相対電位であり、単位はボルト（Ｖ）である。
【００５６】
先ず、制御回路１２は、内部変数_最高値（ｅ）、最低値（ｅ）、最高値（ｏ）、最低値（ｏ）をそれぞれ０、Ｖread、０、Ｖreadに設定する（ステップ５０１）。これらの値は、偶数番目、奇数番目の各メモリセルの設定電位の最高値、最低値を求めるための一時的なものである。最高値（ｅ）、最低値（ｅ）はそれぞれ、偶数番目のメモリセルの最高値、最低値を表し、最高値（ｏ）、最低値（ｏ）はそれぞれ、奇数番目のメモリセルの最高値、最低値を表している。読み出しパス電圧Ｖreadは、如何なる正常なメモリセルも導通状態にすることができる制御ゲート電極の電位、即ちメモリセルを記録する時の如何なる目標電位よりも高い電位であり、典型的には、８Ｖ程度である。
【００５７】
続いて、制御回路１２は、カウンタ変数ｂｘをゼロに初期化する（ステップ５０２）。続いて、内部変数Ｖｅ、ＶｏにそれぞれＥＶＥＮ（ｂｘ）、ＯＤＤ（ｂｘ＋１）を計算して代入する（ステップ５０３、５０４）。ここで、計算式ＥＶＥＮは、着目しているビット線を引数ｘとして取り、
ＥＶＥＮ（ｘ）＝Ｅｘｐ［Ｎｏ０［ｘ］］−Ｙｂ＊（Ｅｘｐ［Ｎｏ０［ｘ−１］］＋Ｅｘｐ［Ｎｏ０［ｘ＋１］］）−Ｙｗ＊Ｅｘｐ［Ｎｏ１［ｘ］］−Ｙｃ＊（Ｅｘｐ［Ｎｏ１［ｘ−１］］＋Ｅｘｐ［Ｎｏ１［ｘ＋１］］）
となる。「＊」は乗算記号である。
【００５８】
但し、Ｅｘｐ［ｄａｔａ］は、記録すべきデータ（２進数、２ビット）と、それより一つ電位の低いデータとの間の判別閾値に電位変動マージン（典型的には０．５Ｖ程度）を加算した値で、意味的には当該記録データとして望ましい設定電位範囲の下限に当たる値（目標電位）である。その目標電位を図１０に示す。
【００５９】
Ｎｏ０［ｘ］、Ｎｏ１［ｘ］などは、既に説明の通り、配列型のデータレジスタＮｏ０、Ｎｏ１のｘ番目の値を参照することを意味する。ｘの値によっては、ｘ、ｘ−１、ｘ＋１の計算結果がデータレジスタＮｏ０、Ｎｏ１の配列範囲を超える場合があるが、それらについてはあたかも“１１（ｂ）”が書かれていたかのように扱う。また、Ｙｂ、Ｙｗ、Ｙｃは、実施形態の最初に説明した意味を持つ定数で、不揮発性半導体記憶装置１の製造時に実際に幾つかのメモリセルにある電位を与え、隣接セルがどれだけカップリング効果によって電位が上昇したかを測定し、そこからＹｂ、Ｙｗ、Ｙｃを計算して平均をとったもので、これらＹｂ、Ｙｗ、Ｙｃは制御回路１２内のＲＯＭに記録してある。典型的にはＹｂ、Ｙｗがそれぞれ０．１程度、Ｙｃが０．０１程度の値を取る。
【００６０】
同様に、計算式ＯＤＤは引数をｘとして、
ＯＤＤ（ｘ）＝Ｅｘｐ［Ｎｏ０［ｘ］］−Ｙｗ＊Ｅｘｐ［Ｎｏ１［ｘ］］−Ｙｃ＊（Ｅｘｐ［Ｎｏ１［ｘ−１］］＋Ｅｘｐ［Ｎｏ１［ｘ＋１］］）
となる。
【００６１】
続いて、制御回路１２は、最高値、最低値の決定処理を行う。制御回路１２は、Ｖｅ＜最低値（ｅ）の時、最低値（ｅ）にＶｅを設定する（ステップ５０５）。制御回路１２は、Ｖｅ＞最高値（ｅ）の時、最高値（ｅ）にＶｅを設定する（ステップ５０６）。制御回路１２は、Ｖｏ＜最低値（ｏ）の時、最低値（ｏ）にＶｏを設定する（ステップ５０７）。制御回路１２は、Ｖｏ＞最高値（ｏ）の時、最高値（ｏ）にＶｏを設定する（ステップ５０８）。
【００６２】
続いて、制御回路１２は、カウンタ変数ｂｘを２だけ増やす（ステップ５０９）。そして、ループの先頭に戻り、カウンタ変数ｂｘが４０９６に到達するまで同様の処理を行う。
【００６３】
続いて、制御回路１２は、偶数／奇数ビット線用の電位表（電位表Ｔｅ、電位表Ｔｏ）を作成する。電位表は、偶数用、奇数用それぞれ１５個の要素を持つ表で、１番目から１５番目までが有効な値を持つ。電位表の値は、書き込み時にワード線に印加する設定電圧である。電位表Ｔｅのｒｘ番目の値は、以下の計算式によって得られる（ステップ５１３）。  
Ｔｅ［ｒｘ］＝最低値（ｅ）＋（（最高値（ｅ）−最低値（ｅ））／１５）＊ｒｘ
換言すると、制御回路１２は、“（最高値（ｅ）−最低値（ｅ））／１５”を計算し、この値を内部変数_間隔（ｅ）に設定する（ステップ５１１）。そして、ｒｘが１６に到達するまで、以下の計算式を繰り返すことによって電位表Ｔｅを作成する。  
Ｔｅ［ｒｘ］＝最低値（ｅ）＋間隔（ｅ）＊ｒｘ
電位表Ｔｅ［１５］は最高値（ｅ）に等しい。
【００６４】
同様に電位表Ｔｏのｒｘ番目の値は、以下の計算式によって得られる（ステップ５１４）。  
Ｔｏ［ｒｘ］＝最低値（ｏ）＋（（最高値（ｏ）−最低値（ｏ））／１５）＊ｒｘ
換言すると、制御回路１２は、“（最高値（ｏ）−最低値（ｏ））／１５”を計算し、この値を内部変数_間隔（ｏ）に設定する（ステップ５１２）。そして、ｒｘが１６に到達するまで、以下の計算式を繰り返すことによって電位表Ｔｏを作成する。  
Ｔｏ［ｒｘ］＝最低値（ｏ）＋間隔（ｏ）＊ｒｘ
電位表Ｔｏ［１５］は最高値（ｏ）に等しい。
【００６５】
続いて、制御回路１２は、各メモリセルに設定すべき設定電位Ｎｏ０Ａを求める。まず、カウンタ変数ｂｘをゼロに初期化する（ステップ５１６）。続いて、内部変数Ｖｅ０にビット線ＢＬ０用の設定電位を求めて設定する（ステップ５１７）。計算式は既に説明したＥＶＥＮ（０）を用いる。
【００６６】
続いて、制御回路１２は、ビット線ＢＬ（ｂｘ＋１）用の設定電位を計算して内部変数Ｖｏに代入する（ステップ５１８）。計算式は既に説明したＯＤＤ（ｂｘ＋１）を用いる。また、制御回路１２は、ビット線ＢＬ（ｂｘ＋２）用の設定電位を計算して内部変数Ｖｅ１に代入する（ステップ５１９）。計算式は既に説明したＥＶＥＮ（ｂｘ＋２）を用いる。
【００６７】
続いて、制御回路１２は、Ｖｅ０が属する電位表Ｔｅ上の位置を検索する。まず、制御回路１２は、内部変数ｒｘを１に初期化する（ステップ５２０）。続いて、Ｖｅ０≦電位表Ｔｅ［ｒｘ］を最初に満たすｒｘを探す。ｒｘが１５に満たない間に限り、Ｖｅ０≦電位表Ｔｅ［ｒｘ］を満たすか調べ、満たしたらループを抜ける（ステップ５２１）。満たしてない場合は、ｒｘを１だけ増やしてループを続ける（ステップ５２２）。ｒｘが１５に達したらループを必ず終了する。そして、Ｎｏ０Ａ［ｂｘ］にその時のｒｘを設定する（ステップ５２３）。Ｎｏ０Ａ［ｂｘ］にゼロを設定することはなく、それは必ず１以上１５以下の値である。なお本実施例ではｒｘの決定にシーケンシャルサーチの手法を用いているがサーチを高速化するための良く知られた他の手法、例えば二分探索法を用いることも出来る。
【００６８】
同様に、制御回路１２は、Ｖｏが属する電位表Ｔｏ上の位置を検索する。検索の手順は、ステップ５２０〜５２３と同様で、Ｖｅ０をＶｏに、電位表Ｔｅを電位表Ｔｏに、Ｎｏ０Ａ［ｂｘ］をＮｏ０Ａ［ｂｘ＋１］にそれぞれ読み替えたものである。
【００６９】
続いて、次のビット線の組を評価するための準備を行う。まず、制御回路１２は、内部変数Ｖｅ０にＶｅ１の値を設定する（ステップ５２８）。続いて、カウンタ変数ｂｘを２だけ増やし（ステップ５２９）、ループの最初に戻る。このループはｂｘが４０９６になった時に抜ける。
【００７０】
Ｖｅ０とＶｅ１とを使い分けている理由は、次の通りである。ステップ５２７でＮｏ０Ａ［ｂｘ＋１］に新しい値を設定すると、それは次のループではＮｏ０［ｂｘ−１］、Ａ［ｂｘ−１］とすることで参照できる。もしステップ５１９でＥＶＥＮ（ｂｘ）を計算するならばＮｏ０［ｂｘ−１］を参照してしまい、ホスト装置から入力した値とは異なる（補正済みの）値を参照してしまうためである。
【００７１】
以上の処理によって、偶数、奇数の電位表並びに各ビット線への設定電位が決定する。続いて、制御回路１２は、偶数ビット線ＢＬへの電位設定を行う（ステップ５３０）。続いて、制御回路１２は、奇数ビット線ＢＬへの電位設定を行う（ステップ５３１）。
【００７２】
［２−３．ビット線への電位設定処理］
次に、図９Ｂのステップ５３０における偶数ビット線への電位設定処理の詳細について説明する。図１１は、制御回路１２によるステップ５３０の処理を示すフローチャートである。
【００７３】
まず、制御回路１２は、内部変数work_addressから１を引いた値に対応するロウデコーダの位置（ユニット）に１を、その他の位置にゼロを書き込む（ステップ６０１）。work_addressはホスト装置によって最後にページデータが書き込まれたワード線を示しているが、図１１で電位設定する対象は一回前にホスト装置から受信したページデータであるので、「work_address −１」が指すワード線を選択する。
【００７４】
続いて、制御回路１２は、内部変数ＶpにＶpstartを設定する（ステップ６０２）。Ｖpstartはライトパルス列として出力される予定の最初のパルス高（単位Ｖ）で、典型的には１８Ｖ程度である。続いて、設定すべきビットが残っているか否かを調べる（ステップ６０３）。設定すべきビットとは、Ｎｏ０Ａ［ｂｘ］（但しｂｘは偶数）がゼロではないビットのことである。一つでも設定すべきビットが存在する場合は書き込み電圧ＶpがＶpmaxに到達したか否かを調べる（ステップ６０４）。Ｖpmaxはライトパルス列として出力可能な最も高いパルス高（単位Ｖ）で、典型的には２７．５Ｖ程度である。書き込み電圧ＶpがＶpmaxを超えた場合は記録失敗となる。
【００７５】
続いて、制御回路１２は、当該ワード線を書き込み電圧Ｖpで書き込む（ステップ６０５）。具体的には、ｂｘが奇数のビット線全て並びにｂｘが偶数のビット線のうちＮｏ０Ａ［ｂｘ］がゼロ、即ち書き込み対象外のビット線の電位を一旦電源電位Ｖｄｄ（対グランドで４．５Ｖ程度）に上昇させた後フローティング状態にし、一方、ｂｘが偶数かつＮｏ０Ａ［ｂｘ］が非ゼロ、即ち書き込み対象のビット線の電位を接地する。そして、ロウデコーダの値がゼロである全てのワード線に電圧発生回路１３から書き込みパス電圧Ｖpass（対グランドで１０Ｖ程度）を印加し、ロウデコーダの値が１であるワード線に電圧発生回路１３から書き込み電圧Ｖpを印加し、一定時間経過するのを待つ動作である。この動作はビット線の選択方法を除けば従来のＮＡＮＤ型フラッシュメモリで行われている記録方式と同じである。
【００７６】
続いて、制御回路１２は、対象ワード線をリセットする（ステップ６０６）。これはステップ６０５の最後に全ワード線の電圧を対グランド電位０Ｖに減少させた結果、全てのメモリセルの制御ゲート電位が対グランド電位０Ｖになるのを待つことを意味する。これは一定時間待つことで達成する。続いて、制御回路１２は、書き込み検査を行う（ステップ６０７）。この書き込み検査処理については後述する。
【００７７】
続いて、制御回路１２は、書き込み電圧Ｖpを電圧Ｖdiffだけ増やす（ステップ６０８）。電圧Ｖdiffは、ＶpstartとＶpmaxとの間を等間隔に分けたうちの一つに対応し、典型的には、０．１Ｖ程度である。そして、ステップ６０３に戻って、書き込み電圧Ｖpを順次Ｖdiffだけ上げながら、書き込むべき全てのメモリセルへの書き込みが終了するまでループを繰り返す。
【００７８】
［２−４．書き込み検査処理］
次に、図１１のステップ６０７における書き込み検査処理の詳細について説明する。図１２Ａ及び１２Ｂは、制御回路１２によるステップ６０７の処理を示すフローチャートである。
【００７９】
書き込み検査処理では、まず、制御回路１２は、カウンタ変数ｖｘを１に初期化する（ステップ７０１）。カウンタ変数ｖｘは、設定済み電位を調査するための検査電位を順次切り替えるためのカウンタである。続いて、ｖｘが１６未満であるか否かを調べる（ステップ７０２）。もしｖｘが１６に到達していた場合、書き込み検査を終了する。
【００８０】
ｖｘが１６未満である場合、続いて、制御回路１２は、偶数であるｂｘ全てについてＮｏ０Ａ［ｂｘ］がゼロであるか否かを調べる（ステップ７０３）。もし偶数であるｂｘすべてについてＮｏ０Ａ［ｂｘ］がゼロであるなら、電位設定の必要なメモリセルはなくなったことを意味するので、書き込み検査を終了する。
【００８１】
Ｎｏ０Ａ［ｂｘ］が非ゼロであるようなｂｘが一つ以上あるなら、続いて、今回選択したｖｘを設定電位とするＮｏ０Ａ［ｂｘ］が存在するか否かを調べる。まず、カウンタ変数ｂｘ、ｃをそれぞれゼロに初期化する（ステップ７０４）。
【００８２】
ｂｘが４０９６に到達していないならば（ステップ７０５）、制御回路１２は、Ｎｏ０Ａ［ｂｘ］がｖｘに等しいか否かを調べる（ステップ７０６）。もし等しいならばワークレジスタｗｏｒｋ０［ｂｘ］に１を設定し、カウンタ変数ｃを１だけ増やす（ステップ７０７）。等しくないならばワークレジスタｗｏｒｋ０［ｂｘ］にゼロを設定する（ステップ７０８）。続いて、制御回路１２は、いずれの場合もカウンタ変数ｂｘを２だけ増やし（ステップ７０９）、ステップ７０５に戻って、ｂｘが４０９６に到達したか否かを調べる。
【００８３】
ｂｘが４０９６に到達したら、続いて、制御回路１２は、ｃ＝０であるか否かを調べる（ステップ７１０）。ｃ＝０であるとは、ｖｘに対応する設定電位になることを期待しているメモリセルが一つもないことを意味する。よって、この設定電位に対する書き込み検査は無駄なので、ステップ７２６に進み、次のｖｘを計算する。
【００８４】
ｃがゼロでない場合、制御回路１２は、内部変数Ｖrに電位表Ｔｅ［ｖｘ］を検索して得た値を設定する（ステップ７１１）。このＶrはメモリセルの電位が読み出し電圧Ｖrに到達したか否かを判定するためのものである。続いて、ロウデコーダがゼロのワード線には読み出しパス電圧Ｖreadを、ロウデコーダが１のワード線には読み出し電圧Ｖrを印加する（ステップ７１２）。読み出しパス電圧Ｖreadはステップ５０１で説明したものと同じ値である。
【００８５】
続いて、制御回路１２は、偶数ビット線をリードする（ステップ７１３）。ビット線をリードするとは、最初に、偶数番目のビット線に接続されるメモリセルのソース側を遮断してドレイン側をリード判定用の電圧、例えば対グランド０．５Ｖに昇圧する。その後、ドレイン側を遮断、ソース側を接地して一定時間待ち、ドレイン側に蓄積された電荷が放電されるか否かを調べる動作を言う。当該メモリセルが導通状態なら電荷はソース側から流れ出し、ドレイン側の電圧が下がるが、当該メモリセルが遮断状態ならこの電圧は一定時間後もその多くを残している。この時のビット線電圧をセンスアンプ回路２１にて読み出す。
【００８６】
読み出しの手順として、制御回路１２は、まずカウンタ変数ｂｘ、ｃをそれぞれゼロに初期化し（ステップ７１４）、ｂｘが４０９６未満か否かを調べ（ステップ７１５）、満たないならｂｘ番目のビット線の電位が低下しているか否かを調べる（ステップ７１６）。低下しているならワークレジスタｗｏｒｋ１［ｂｘ］にゼロを設定する（ステップ７１８）。メモリセルは、消去状態では対消去レベルでゼロ以上の任意の読み出し電圧Ｖrに対して導通状態で、多く書き込まれる、すなわち浮遊ゲート電極に電子が多く注入されるに従い高い読み出し電圧Ｖrを印加しないと導通状態にならなくなる性質がある。従って、設定電位を印加した状態で導通状態とは、必要な書き込み量に満たないことを意味している。逆に、電位の低下を観測しなかったなら、電位表Ｔｅ［ｖｘ］に対応する設定電圧までの書き込みが終了したことを意味する。この場合はワークレジスタｗｏｒｋ１［ｂｘ］に１を書き込み、またｃを１だけ増やす（ステップ７１７）。いずれの場合もｂｘを２だけ増やし（ステップ７１９）、ステップ７１５に戻って、全偶数ビット線の調査を終えたか否かを調べる。
【００８７】
全偶数ビット線の調査を終えたなら、制御回路１２は、ｃがゼロか否かを調べる（ステップ７２０）。ｃがゼロであるとは、その時の電位表Ｔｅ［ｖｘ］に対応する設定電位に到達したメモリセルが一つもないことを意味しているので、今回の読み出し電圧Ｖrより高い電位を設定して調査することは無駄である。よって、今回の書き込み検査を終了させる。
【００８８】
ｃが非ゼロなら、続いて、制御回路１２は、設定電位に到達したメモリセルがあるか否か調べる。制御回路１２は、まずカウンタ変数ｂｘをゼロに初期化する（ステップ７２１）。続いて、ｂｘが４０９６未満であるか否かを調べ（ステップ７２２）、４０９６に満たない場合は、続いて、制御回路１２は、ワークレジスタｗｏｒｋ０［ｂｘ］、ｗｏｒｋ１［ｂｘ］が共に１であるか否かを調べる（ステップ７２３）。ワークレジスタｗｏｒｋ０［ｂｘ］、ｗｏｒｋ１［ｂｘ］が共に１であるとは、そのメモリセルは読み出し電圧Ｖrまで書き込みをする予定であり、今回でその書き込みを達成したことを意味するので、その場合はＮｏ０Ａ[ｂｘ]にゼロを設定する（ステップ７２４）。このビット線は、次周以降の書き込みや書き込み検査の対象にならない。続いて、どちらの場合もｂｘを２だけ増やし（ステップ７２５）、ステップ７２２に戻ってｂｘが４０９６に到達したか否かを調べる。
【００８９】
ｂｘが４０９６に到達したら、この読み出し電圧Ｖrでの書き込み検査は終了である。次の周に向けてｖｘを１だけ増やし（ステップ７２６）、ステップ７０２に戻ってｖｘが１６に到達したか否かを調べる。
【００９０】
なお、ステップ７０４からステップ７０９、ステップ７１４からステップ７１９、並びにステップ７２１からステップ７２５に至る処理は実施形態によっては複数の回路を用いて同時に実行することも出来る。
【００９１】
図９Ｂのステップ５３１における奇数ビット線への電位設定の手順は、偶数ビット線への電位設定とほぼ同様である。参照するフローチャートも図１１及び図１２と同様である。但し、電位表Ｔｅに代えて電位表Ｔｏを用い、偶数と書いてある箇所を奇数、奇数と書いてある箇所を偶数と読み替え、またカウンタ変数ｂｘによるループ制御は初期値を１に変更する。
【００９２】
［３．ビット線への電位設定、及び書き込み検査の具体例］
次に、図１１及び図１２で説明した偶数ビット線への電位設定、及び書き込み検査の動作の具体例について説明する。図１３は、偶数ビット線への電位設定、及び書き込み検査における書き込み対象ワード線に印加される電位の推移を示す図である。本例は書き込み動作の途中部分であり、この前後に電位設定動作は続いている。図１３の縦軸はワード線に印加される電位（消去レベルが原点）、横軸は時刻（記録開始の時刻が原点）である。書き込み開始時には、例えば、Ｎｏ０Ａに１、２、３、４、７、８を取る要素が含まれており、０、５、６は含まれていないものとする。
【００９３】
図１３の第１のＶp書き込みの後、書き込み検査に移る。書き込み検査では、カウンタ変数ｖｘを１からより大きい方向に向かって順番に上げていく。ステップ７１０でＮｏ０Ａ＝１のメモリセルが存在することを知ってこの周を書き込み検査することを決め、ステップ７１２で電位表Ｔｅ［１］に対応する設定電圧をロウデコーダが１であるワード線に印加して、この設定電位以上のセル電位を持つメモリセルを調べる（図１３の（１）−１）。その結果、幾つかのメモリセルの電位は電位表Ｔｅ［１］に到達していたものの、Ｎｏ０Ａ＝１のメモリセルの一部にはまだステップ７２３でＮＯ側に分岐する、すなわち電位表Ｔｅ［１］の設定電位に到達しないメモリセルが存在する。
【００９４】
続いて、ステップ７２６でｖｘを２にし、Ｎｏ０Ａ＝２のメモリセルが存在するため電位表Ｔｅ［２］の設定電位をワード線に印加して、この設定電位以上のセル電位を持つメモリセルを調べる（図１３の（１）−２）。その結果、Ｎｏ０Ａ＝２であるメモリセルの全てはステップ７２３でＹＥＳ側へ分岐、つまり電位表Ｔｅ［２］の設定電位に到達する。この時、ステップ７２４でＮｏ０Ａ［ｂｘ］にゼロが書き込まれるため、この時点でＮｏ０Ａ＝２である項は全てゼロに書き換えられる。
【００９５】
続いて、ステップ７２６でｖｘを３にし、Ｎｏ０Ａ＝３のメモリセルが存在するため電位表Ｔｅ［３］の設定電位をワード線に印加して、この設定電位以上のセル電位を持つメモリセルを調べる（図１３の（１）−３）。その結果、より高い電位を目標とするメモリセルを含めてすべてのメモリセルがこの設定電位に到達していないことを検出する。このため、ステップ７２０でこれ以上高いワード線電圧を印加するステップを中止して書き込み検査を終了し、第２のＶp書き込みを行う。
【００９６】
第２のＶp書き込みの後の書き込み検査で、Ｎｏ０Ａ＝１であるようなメモリセルが存在するので電位表Ｔｅ［１］の設定電位をワード線に印加して各メモリセルの電位を調べる。その結果、Ｎｏ０Ａ＝１であるようなメモリセルの全ては電位表Ｔｅ［１］の設定電位に到達したことを確認し、その全ての位置のＮｏ０Ａをゼロに設定する（ステップ７２４）。続いて、ｖｘ＝２にしてＮｏ０Ａ＝ｖｘとなるようなメモリセルを調べるが、第１の書き込みとこれに続く書き込み検査にてＮｏ０Ａ＝２となる項の全てにゼロを書き込んだため、ステップ７１０でｃ＝０となり、ｖｘ＝２の書き込み検査をすることなく次の電位に移る。
【００９７】
続いて、ｖｘ＝３にしてメモリセルの電位が電位表Ｔｅ［３］の設定電位に到達したメモリセルを調べ（図１３の（２）−３）、幾つかはこの設定電位に到達したことを知ってＮｏ０Ａをゼロにし、他のものは設定電位に到達することが出来ず、Ｎｏ０Ａを３のまま残す。続いて、ｖｘ＝４を調べ（図１３の（２）−４）、電位表Ｔｅ［４］の設定電位に到達したメモリセルは一つも無いことを知り、ステップ７２０の判断によって２度目の書き込み検査を終了し、第３のＶp書き込みを行う。
【００９８】
第３のＶp書き込み後の書き込み検査も第１、第２のそれと同様に行われるが、Ｎｏ０Ａ＝５、６となるような要素は最初から存在しないため、これらに当たるｖｘはステップ７１０の判断によってスキップされる。
【００９９】
このように、ステップ７１０で今回検査対象となるｖｘに一致するＮｏ０Ａがない場合はその回をスキップする機能、ステップ７２０で全てのメモリセルの電位が電位表Ｔｅ［ｖｘ］の設定電位に満たないことが分かったらそれ以降の書き込み検査をしない機能によって、無駄な時間を費やすことなく書き込み検査を進めることができる。
【０１００】
［４．発明の効果］
従来方式によるデータ書き込みは、偶数ビット線、奇数ビット線のそれぞれに対して、（１）下位ビット書き込み＋下位ビット書き込み検査、（２）上位ビット（０１ｂ）書き込み＋書き込み検査、（３）上位ビット（００ｂ）書き込み＋書き込み検査、（４）上位ビット（１０ｂ）書き込み＋書き込み検査、の４ステップを必要としていた。
【０１０１】
これに対して、本実施形態の書き込み方式では、「全ビット書き込み＋書き込み検査」の１ステップのみで書き込みを終了することができる。このため、より少ない時間で書き込みを終了させることができる。
【０１０２】
また、本実施形態の書き込み検査処理を行うことによって、図１３に示したように本当に必要な読み出し電圧Ｖrのみに絞って書き込み検査を行うことができ、これにより、書き込み検査に要する時間も最小限に抑えることができる。
【０１０３】
また、図６に示したように、一旦データ送信終了コマンドを受けたら、データフラッシュ処理を行い、その時に書き込んだワード線から一つあけて次のワード線から次のライトコマンドを受け付けできるようにしている。これにより、新たに書き始めるワード線のメモリセルの電位によって、既に書き終えた最後のワード線のメモリセルの電位が影響を受ける大きさを低減させることができる。
【０１０４】
なお、隣接する２つのメモリセルの一方に第１の、もう一方に第２の設定電位を書き込むに当たり、従来方式による書き込みでは、下位ビットの書き込みに伴う電位差分が上位ビット書き込みの際補正されるため、上位ビットの書き込みを終了した時点で第１のメモリセルが受ける電位変動は概略で最大「０．５＊Ｖ＊Ｙ」となる。但し、Ｖは消去状態の電位から対応するデータを割り当てられているメモリセルの電位のうちで最大のものまでの電位差であり、“Ｙ”は隣接する２つのメモリセルの間にあるカップリング効果の割合である。隣接する２つのメモリセルの間でこの関係が成り立ち、かつ第１のメモリセルの隣接３セルが同程度の影響を持つため、最大で「１．５＊Ｖ＊Ｙ」程度の電位変動を受ける。
【０１０５】
これに対して本実施形態による書き込み方法では、ステップ５０３、５０４で説明したＥＶＥＮ、ＯＤＤの計算式がＹの２乗以上の高次の項を省略することによる誤差を含んでおり、このため概略で最大「７＊Ｖ＊Ｙ２」の電位変動を受ける。また、電位表Ｔｅ、Ｔｏを作成する時に計算式に対して丸め誤差を生じるが、この大きさはＶの範囲を１５等分したとして「０．０６７＊Ｖ」程度である。しかしながら、項の省略による誤差は電位を下げる方向であるのに対して、電位表Ｔｅ、Ｔｏ作成の丸め誤差は電位を上げる方向であるため一般に両者は相殺する。従って本方式による誤差は最大で「ｍａｘ（０．０６７＊Ｖ，７＊Ｖ＊Ｙ２）」程度となる。もしＹ＝０．１、Ｖ＝６．０と仮定するなら０．０６７＊Ｖ、７＊Ｖ＊Ｙ２は０．４〜０．４２（Ｖ）程度であり、この値は従来の方式の変動幅０．９（Ｖ）よりも小さい。言い換えれば、本実施形態はより精密な電位設定を可能とする。
【０１０６】
［第２の実施形態］
第２の実施形態は、データ送信終了コマンドを受けて一旦連続した書き込みが終了した場合に、続いて受信したライトコマンドに対する書き込みは、記録済みの最後のワード線から２つ分あけてその次のワード線から行うようにする。具体的には、図６Ｂのステップ３１８において、「work_address ← work_address ＋１」に代えて、「work_address ← work_address ＋２」に変更する。それ以外の動作は、第１の実施形態と同じである。
【０１０７】
このような処理に変更することで、連続した記録を一旦中断した後再開するとき、新たに書き込んだワード線の電位変動がそれ以前に書き込まれた最後のワード線に与える影響を、第１の実施形態よりも低減することができる。具体的には、ワード線間のカップリング定数をＹｗとすれば、第１の実施形態ではＹｗ２の影響がまだ残っていたものを、第２の実施形態ではＹｗ３程度に抑えることができる。
【０１０８】
なお、記録を新たに再開するときにアドレスに追加する加算値、すなわち記録済みの最後のワード線からあけるワード線の本数を３以上に設定するようにしてもよいことは勿論である。
【０１０９】
［第３の実施形態］
第３の実施形態は、書き込み時にワード線に印加する設定電位を示す電位表の構成が第１の実施形態と異なり、第１の実施形態の図９Ａで示した２つの電位表Ｔｅ、Ｔｏを統合して一つの電位表にまとめるようにしている。図１４Ａ及び図１４Ｂは、第３の実施形態に係るワード線への書き込み処理を示すフローチャートである。
【０１１０】
書き込み開始時、制御回路１２は、内部変数_最高値をゼロ、最低値をＶreadに設定する（ステップ８０１）。ここで、最高値は、図９Ａにおける最高値（ｅ）及び最高値（ｏ）を一つにしたものであり、最低値は、図９Ａにおける最低値（ｅ）及び最低値（ｏ）を一つにしたものである。
【０１１１】
続いて、制御回路１２は、カウンタ変数ｂｘをゼロに初期化し（ステップ８０２）、ｂｘ＜４０９６の間、最高値、最低値の決定処理を行う。即ち、制御回路１２は、ビット線ＢＬ（ｂｘ）に対する設定電位を計算して内部変数Ｖに代入し（ステップ８０３）、Ｖが最低値を下回っているなら最低値にＶを代入し（ステップ８０４）、一方、Ｖが最高値を上回っているなら最高値にＶを代入する（ステップ８０５）。その後、カウンタ変数ｂｘを１だけ増やす（ステップ８０６）。そして、ループの先頭に戻り、カウンタ変数ｂｘが４０９６に到達するまで同様の処理を行う。
【０１１２】
続いて、制御回路１２は、電位表を作成する。まず、ｒｘに１を代入し（ステップ８０７）、“（最高値−最低値）／１５”を計算して内部変数_間隔に設定する（ステップ８０８）。そして、ｒｘが１６に到達するまで、以下の計算式を繰り返すことによって電位表を作成する。  
電位表［ｒｘ］＝最低値＋間隔＊ｒｘ
続いて、制御回路１２は、各メモリセルに設定すべき設定電位Ｎｏ０Ａ［ｂｘ］を求める。まず、カウンタ変数ｂｘをゼロに初期化し（ステップ８１１）、内部変数Ｖにビット線ＢＬ０用の設定電位を計算して代入する（ステップ８１２）。
【０１１３】
続いて、制御回路１２は、ｂｘが４０９６に到達するまで以下の処理を繰り返す。即ち、内部変数Ｖｎにビット線ＢＬ（ｂｘ＋１）用の設定電位を計算して代入し（ステップ８１３）、ｒｘを１から１５まで１ずつ上げながら電位表［ｒｘ］の値がＶ以上になるｒｘを探す（ステップ８１５）。そして、見つかったらそのｒｘを、見つからなかったら１５をＮｏ０Ａ［ｂｘ］に設定する（ステップ８１７）。その後、内部変数ＶにＶｎを代入し、ｂｘを１だけ増やす（ステップ８１９）。
【０１１４】
この処理が終わったら、偶数ビット線への電位設定（ステップ８２０）、奇数ビット線への電位設定（ステップ８２０）をそれぞれ行って処理を終了する。
【０１１５】
なお本実施例ではｒｘの決定にシーケンシャルサーチの手法を用いているがサーチを高速化するための良く知られた他の手法、例えば二分探索法を用いることも出来る。
【０１１６】
図１５は、ステップ８０３におけるビット線ＢＬ（ｂｘ）用の設定電位を計算する処理を説明するフローチャートである。まず、制御回路１２は、ｂｘが偶数か奇数かを判断する（ステップ８３０）。偶数ならばＥＶＥＮ（ｂｘ）を計算して内部変数Ｖに代入し（ステップ８３１）、奇数ならばＯＤＤ（ｂｘ）を計算して内部変数Ｖに代入する（ステップ８３２）。ここで、ＥＶＥＮやＯＤＤの定義、並びにｂｘ、ｂｘ−１、またはｂｘ＋１がデータレジスタＮｏ０、Ｎｏ１の配列範囲を超える場合の処理方法は第１の実施形態と全く同じである。
【０１１７】
また、偶数ビット線への電位設定、奇数ビット線への電位設定での書き込み検査において、第１の実施形態では電位表Ｔｅ、Ｔｏをそれぞれ参照したが、第３の実施形態では偶数ビット線及び奇数ビット線への電位設定のどちらも一つの統合された電位表を参照する。
【０１１８】
以上詳述したように第３の実施形態では、偶数ビット線、奇数ビット線に設定すべき電位の分布は一般に若干ずれているが、これを考慮した電位設定を行わないことによって、電位表の数を２つから一つに減らすことができる。これにより、第３の実施形態では、第１の実施形態に比べて、処理が簡略化できるため、実装上のコストが低減できる。
【０１１９】
［第４の実施形態］
第４の実施形態は、書き込み時にワード線に印加する設定電位を示す電位表の構成が第１の実施形態と異なり、第１の実施形態の図９Ａで示した２つの電位表Ｔｅ、Ｔｏの代わりに予め用意した固定の電位表を用いるようにしている。図１６は、第４の実施形態に係るワード線への書き込み処理を示すフローチャートである。
【０１２０】
図１６のフローチャートは、第３の実施形態で示した図１４のフローチャートのうち、電位表を作成するためのステップ８０１から８１０までを取り去った手順になっている。また、第４の実施形態の電位表は制御回路１２内のＲＯＭに記録され、制御回路１２は、書き込み可能なレジスタとしての電位表を持たない。
【０１２１】
ＲＯＭに予め準備する電位表は、１５個の要素から成り、電位表［１］〜電位表［１５］が有効な値である。それらの値は、図１０のデータ“１０（ｂ）”に相当する目標電位、いわゆるＥｘｐ［１０（ｂ）］をＶｍとして、以下の式で与えられる値である。
【０１２２】
電位表［ｒｘ］＝（Ｖｍ＊ｒｘ）／１５
図１６のステップ９０２におけるビット線ＢＬ（ｂｘ）用の設定電位を計算する処理は、第３の実施形態で説明した図１５と同じである。
【０１２３】
以上詳述したように第４の実施形態によれば、電位表をＲＯＭに格納することにより、第１の実施形態の図９Ａ、及び第３の実施形態の図１４Ａに示した電位表作成処理を省くことができる。これにより、第１の実施形態及び第３の実施形態に比べて、書き込み処理を大幅に簡略化できる。また、電位表をレジスタに保持する必要がないので、実装上のコストが低減できる。
【０１２４】
また、第４の実施形態では、ワード線に幾つかの予め決まった電位を設定すれば十分であるため、図２に示した電圧発生回路１３はＡ／Ｄ変換を行う必要がなくなり、より安価な回路構成で実現できるようになる。
【０１２５】
［第５の実施形態］
第５の実施形態は、データレジスタＮｏ０に格納された、各メモリセルへ書き込むデータ毎に電位表を４種類作成し、書き込み処理時には、それぞれに対する補正値のみを補正値レジスタＡに書き込むようにしている。
【０１２６】
図６Ａのステップ３０９におけるデータレジスタＮｏ０のデータを「work_address −１」の指すワード線に書き込む処理の詳細について説明する。図１７Ａ及び１７Ｂは、制御回路１２によるステップ３０９の処理を示すフローチャートである。
【０１２７】
各メモリセルへ書き込むデータを内部変数ｅｘで表す。本実施形態では、各メモリセルが２ビットを記録するため、ｅｘは、０〜３（００（ｂ）、０１（ｂ）、１０（ｂ）、１１（ｂ））からなる変数である。先ず、制御回路１２は、内部変数ｅｘをゼロに初期化する（ステップ１００１）。続いて、すべての内部変数_最高値［ｅｘ］、最低値［ｅｘ］をそれぞれ０、Ｖreadに設定する（ステップ１００２〜１００４）。
【０１２８】
続いて、制御回路１２は、カウンタ変数ｂｘをゼロに初期化し（ステップ１００５）、ｂｘ＜４０９６の間、最高値、最低値の決定処理を行う。即ち、制御回路１２は、ビット線ＢＬ（ｂｘ）に対する設定電位を計算して内部変数Ｖに代入する（ステップ１００７）。この処理は、図１５と同じである。続いて、データレジスタＮｏ０［ｂｘ］の値を内部変数ｅｘに設定する（ステップ１００７）。そして、Ｖが最低値［ｅｘ］を下回っているなら最低値［ｅｘ］にＶを代入し（ステップ１００８）、またＶが最高値［ｅｘ］を上回っているなら最高値［ｅｘ］にＶを代入する（ステップ１００９）。その後、カウンタ変数ｂｘを１だけ増やす（ステップ１０１０）。そして、ループの先頭に戻り、カウンタ変数ｂｘが４０９６に到達するまで同様の処理を行う。
【０１２９】
続いて、制御回路１２は、電位表を作成する。電位表は、１５個の要素を持つ表で、［０］〜［１４］が有効な値を持つ。まず、制御回路１２は、内部変数ｅｘをゼロに初期化する（ステップ１０１１）。続いて、ｅｘが３に満たない場合、内部変数Ｎに４を設定し（ステップ１０１２）、ｅｘが３に到達した場合、内部変数Ｎに３を設定する（ステップ１０１３）。続いて、“（最高値［ｅｘ］−最低値［ｅｘ］）／Ｎ”を計算して内部変数_間隔に設定する（ステップ１０１４）。
【０１３０】
続いて、制御回路１２は、内部変数ｒｘをゼロに初期化する（ステップ１０１５）。ｒｘは、補正値レジスタＡに格納される補正値である。続いて、制御回路１２は、ｒｘがＮに到達するまで、以下の計算式を繰り返すことによって当該ｅｘに対応する電位表［ｅｘ＊４＋ｒｘ］を作成する。（ステップ１０１６、１０１７）  
電位表［ｅｘ＊４＋ｒｘ］＝最低値［ｅｘ］＋間隔＊ｒｘ
そして、ループの先頭に戻り、内部変数ｅｘが４に到達するまで同様の処理を行う。これにより、ｅｘの各々についての設定電位を含む電位表が作成される。
【０１３１】
なお、ステップ１０１３に示すように、ｅｘが３（１１（ｂ））の時に限り補正値は０〜２の範囲であり、このため、“ｅｘ＊４＋ｒｘ”が１５となる電位表［１５］は作成されない。この値１５（１１１１（ｂ））は、書き込み検査時に書き込み不要を意味する特別な値として使用される。
【０１３２】
続いて、制御回路１２は、各メモリセルの設定電位に相応しい補正値を電位表から検索して補正値レジスタＡに書き込む。まず、制御回路１２は、カウンタ変数ｂｘをゼロに初期化する（ステップ１０１８）。続いて、内部変数Ｖにビット線ＢＬ（ｂｘ）用の設定電位を計算して代入する（ステップ１０１９）。続いて、データレジスタＮｏ０［ｂｘ］のデータを内部変数ｅｘに設定する（ステップ１０２０）。
【０１３３】
続いて、制御回路１２は、ｅｘが３に満たない場合、内部変数Ｎに４を設定し（ステップ１０２１）、ｅｘが３に到達した場合、内部変数Ｎに３を設定する（ステップ１０２２）。続いて、内部変数ｒｘをゼロに初期化する（ステップ１０２３）。続いて、ｒｘを１から“Ｎ−１”まで１ずつ上げながら電位表［ｅｘ＊４＋ｒｘ］の値がＶ以上になるｒｘを探す（ステップ１０２４）。そして、見つかったらそのｒｘを、見つからなかったら“Ｎ−１”を補正値レジスタＡ［ｂｘ］に設定する（ステップ１０２６）。その後、ｂｘを１だけ増やし（ステップ１０２７）、ループの先頭に戻り、カウンタ変数ｂｘが４０９６に到達するまで同様の処理を行う。
【０１３４】
以上の処理によって、電位表並びに各メモリセルの補正値が決定する。続いて、制御回路１２は、偶数ビット線ＢＬへの電位設定を行う（ステップ１０２８）。続いて、制御回路１２は、奇数ビット線ＢＬへの電位設定を行う（ステップ１０２９）。
【０１３５】
ビット線ＢＬへの電位設定処理は、基本的には、第１の実施形態で説明した図１１と同じである。だだし、上記電位表並びにＮｏ０Ａの値の変更に伴い、本実施形態では、図１１のステップ６０３は、「Ｎｏ０Ａ［ｂｘ］は、全て１１１１（ｂ）？」に変更される。
【０１３６】
次に、書き込み検査処理の詳細について説明する。図１８Ａ及び１８Ｂは、制御回路１２による書き込み検査処理を示すフローチャートである。この書き込み検査処理は、基本的には、図１２Ａ及び１２Ｂと同じである。以下の説明では、図１２Ａ及び１２Ｂと異なるステップを中心に説明する。
【０１３７】
書き込み検査処理では、まず、制御回路１２は、カウンタ変数ｖｘをゼロに初期化する（ステップ７０１）。カウンタ変数ｖｘは、メモリセルの設定電位をその低い側から順番にたどるための変数である。これに対して、データレジスタＮｏ０に格納されている書き込みデータは設定電位の順に並んでいない。このため、図１９に示した変換テーブルを参照することで、設定電位の順を書き込みデータ並びにその補正値の順に変換する。図１９の左側の「インデックス」はカウンタ変数ｖｘによって示される値（設定電位）、右側の「値」はＮｏ０Ａの値、すなわち、上位２ビットがデータレジスタＮｏ０に格納された書き込みデータ、下位２ビットが補正値レジスタＡに格納された補正値である。図１９においては、インデックスが大きくなるにつれて、設定電位も大きくなる。
【０１３８】
続いて、制御回路１２は、ｖｘが１５未満であるか否かを調べる（ステップ７０２）。もしｖｘが１５に到達していた場合、書き込み検査を終了する。ｖｘが１５未満である場合、続いて、偶数であるｂｘ全てについてＮｏ０Ａ［ｂｘ］が全て１１１１（ｂ）であるか否かを調べる（ステップ７０３）。もし偶数であるｂｘ全てについてＮｏ０Ａ［ｂｘ］が１１１１（ｂ）であるなら、設定の必要なメモリセルはなくなったことを意味するので、書き込み検査を終了する。
【０１３９】
Ｎｏ０Ａ［ｂｘ］が１１１１（ｂ）でないようなｂｘが一つ以上あるなら、続いて、今回選択したｖｘを設定電位としているＮｏ０Ａ［ｂｘ］が存在するか否かを調べる。まず、カウンタ変数ｂｘ、ｃをそれぞれゼロに初期化する（ステップ７０４）。
【０１４０】
ｂｘが４０９６に到達していないならば（ステップ７０５）、制御回路１２は、Ｎｏ０Ａ［ｂｘ］が“ｌｔｏｄ［ｖｘ］”に等しいか否かを調べる（ステップ７０６）。“ｌｔｏｄ［ｖｘ］”とは、図１９に示す変換テーブルのうちｖｘをインデックスとした時の対応する「値」を指す。もし等しいならばワークレジスタｗｏｒｋ０［ｂｘ］に１を設定し、カウンタ変数ｃを１だけ増やす（ステップ７０７）。等しくないならばワークレジスタｗｏｒｋ０［ｂｘ］にゼロを設定する（ステップ７０８）。続いて、制御回路１２は、いずれの場合もカウンタ変数ｂｘを２だけ増やし（ステップ７０９）、ステップ７０５に戻って、４０９６に到達したか否かを調べる。
【０１４１】
ステップ７１０においてｃがゼロでない場合、制御回路１２は、内部変数Ｖrに電位表［ｌｔｏｄ［ｖｘ］］を検索して得た値を設定する（ステップ７１１）。このＶrはメモリセルの電位が読み出し電圧Ｖrに到達したか否かを判定するためのものである。
【０１４２】
また、電位表並びにＮｏ０Ａの変更に伴い、ステップ７２４においてＮｏ０Ａ［ｂｘ］に設定する値を“１１１１（ｂ）”に変更する。
【０１４３】
以上詳述したように第５の実施形態では、メモリセルの電位が書き込み目標電位に到達するまでデータレジスタＮｏ０に格納されたホスト装置からの書き込みデータをそのまま保存している。このため、図１７Ｂのステップ１０１９に示したように、補正値を計算するに当たって毎回その時々のデータレジスタＮｏ０の値を参照すればよく、アルゴリズムが簡単になる。
【０１４４】
第５の実施形態に第４の実施形態を適用することも可能である。即ち、その不揮発性半導体記憶装置１の特性を製造時に調べておき、図１０に示した各目標電位に対する設定電位低下分の最大値を求めてこの区間を３等分、または４等分しうるように電位表を作成してＲＯＭに格納しておく方法である。この方法によって、第５の実施形態に基づく構成であっても第４の実施形態と同様の効果を得ることができる。
【０１４５】
本発明は、上述した実施形態に限定されるものではなく、その要旨を逸脱しない範囲内で、構成要素を変形して具体化できる。また、実施形態に開示されている複数の構成要素の適宜な組み合わせにより種々の発明を構成することができる。例えば、実施形態に開示される全構成要素から幾つかの構成要素を削除してもよいし、異なる実施形態の構成要素を適宜組み合わせてもよい。
【符号の説明】
【０１４６】
ＭＣ…メモリセル、ＳＴＤ，ＳＴＳ…選択トランジスタ、ＢＬ…ビット線、ＷＬ…ワード線、ＳＧＤ，ＳＧＳ…選択ゲート線、ＳＲＣ…ソース線、１…不揮発性半導体記憶装置、１０…入出力制御回路、１１…アドレスレジスタ、１２…制御回路、１３…電圧発生回路、１５…ロウデコーダ、１６…データレジスタ０、１７…データレジスタ１、１８…補正値レジスタ、１９…ワークレジスタ０、２０…ワークレジスタ１、２１…センスアンプ回路、２２…メモリセルアレイ、３０…半導体基板、３１…Ｐ型ウェル、３２…拡散領域、３３…トンネル絶縁膜、３４…電荷蓄積層、３５…ゲート間絶縁膜、３６…制御ゲート電極、３７Ｓ…ソース領域、３７Ｄ…ドレイン領域、３８…ゲート絶縁膜、３９…ゲート電極。
【図１】
2010160871.tif 000003
【図２】
2010160871.tif 000004
【図３】
2010160871.tif 000005
【図４】
2010160871.tif 000006
【図５】
2010160871.tif 000007
【図６Ａ】
2010160871.tif 000008
【図６Ｂ】
2010160871.tif 000009
【図７】
2010160871.tif 000010
【図８】
2010160871.tif 000011
【図９Ａ】
2010160871.tif 000012
【図９Ｂ】
2010160871.tif 000013
【図１０】
2010160871.tif 000014
【図１１】
2010160871.tif 000015
【図１２Ａ】
2010160871.tif 000016
【図１２Ｂ】
2010160871.tif 000017
【図１３】
2010160871.tif 000018
【図１４Ａ】
2010160871.tif 000019
【図１４Ｂ】
2010160871.tif 000020
【図１５】
2010160871.tif 000021
【図１６】
2010160871.tif 000022
【図１７Ａ】
2010160871.tif 000023
【図１７Ｂ】
2010160871.tif 000024
【図１８Ａ】
2010160871.tif 000025
【図１８Ｂ】
2010160871.tif 000026
【図１９】
2010160871.tif 000027