(57)【要約】【課題】セルの電位変動に伴って必要となるデータの消去操作をより低減する。【解決手段】メモリシステムは、共通のワード線ＷＬに電気的に接続された複数の不揮発性メモリセルＭＣを有する。各メモリセルは、複数の電位ランクに対応した複数のデータを記憶する。さらに、メモリシステムは、電位ランクごとにメモリセルの電位を測定し、この測定結果に基づいて各電位ランクの下限値及び上限値を変更する制御部１４を含む。【選択図】      図１
2010244605.tif 000002
【特許請求の範囲】
【請求項１】
共通のワード線に電気的に接続された複数の不揮発性メモリセルを含み、各メモリセルは、複数の電位ランクに対応した複数のデータを記憶する、セルアレイと、
電位ランクごとにメモリセルの電位を測定し、この測定結果に基づいて各電位ランクの下限値及び上限値を変更する制御部と、
を具備することを特徴とするメモリシステム。
【請求項２】
各電位ランクの下限値は、当該電位ランクに属するメモリセルの最小電位であり、
各電位ランクの上限値は、当該電位ランクに属するメモリセルの最大電位であることを特徴とする請求項１に記載のメモリシステム。
【請求項３】
第１の電位ランクとこれの１つ上位の第２の電位ランクとの間にメモリセルが存在するかどうかを調べ、前記第１及び第２の電位ランク間にメモリセルが存在する場合に、前記第１及び第２の電位ランクを切り分ける中立電位を生成する判定部をさらに具備することを特徴とする請求項１又は２に記載のメモリシステム。
【請求項４】
前記制御部は、前記中立電位に満たないメモリセルが前記第１の電位ランクに属するように前記第１の電位ランクの上限値を変更し、前記中立電位以上のメモリセルが前記第２の電位ランクに属するように再プログラムを行うことを特徴とする請求項３に記載のメモリシステム。
【請求項５】
各電位ランクにプログラムする際に、１つ下位の電位ランクの上限値に一定のマージンを加算した電位をプログラムの下限値として用いるプログラム部をさらに具備することを特徴とする請求項４に記載のメモリシステム。
【請求項６】
前記判定部は、前記第１及び第２の電位ランク間に存在するメモリセルの該当数を複数の電位レベルごとに調べ、かつ前記複数の電位レベルの下端及び上端からメモリセルの該当数が多い電位レベルを下位及び上位それぞれの電位ランクに組み込む操作を繰り返して前記中立電位を得ることを特徴とする請求項３乃至５のいずれかに記載のメモリシステム。
【請求項７】
前記判定部は、前記第１及び第２の電位ランク間に存在するメモリセルの該当数を複数の電位レベルごとに調べ、かつ、メモリセルの該当数がゼロである電位レベルが１つ以上連続し、該当数がゼロの電位レベルがその連続区間の中にのみ存在する場合に、その電位レベルの１つを中立電位に設定することを特徴とする請求項３乃至５のいずれかに記載のメモリシステム。
【請求項８】
各電位ランクの下限値及び上限値は、ワード線ごとに設定されることを特徴とする請求項１乃至７のいずれかに記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリシステムに係り、例えば電気的に書き換えが可能なフラッシュメモリを備えたメモリシステムに関する。
【背景技術】
【０００２】
電気的に書き換えが可能な不揮発性半導体メモリの一つとして、ＮＡＮＤ型フラッシュメモリが知られている。ＮＡＮＤ型フラッシュメモリでは、記録セルのチャネルが遮断状態から導通状態に変化する時のコントロールゲートの電位（以下単にセルの電位と略記する）を電子注入によって変化させ、その電位によって情報を記録する。
【０００３】
しかしながら、セルの電位は、記録から長時間経過するとフローティングゲートから電荷が抜けることによって徐々に落ちていき、記録データ判別のための電位の閾値を割り込むと、データが隣の閾値レベルにシフトしてしまう。また、セルによっては、運用中にフローティングゲート自身やフローティングゲートを取り囲む絶縁体内に電荷を取り込む結果、セルの電位が上昇するものもある。この場合も、このセルが本来記録していたデータに対する有効電位幅とこれに隣接しているより電位の高い側の有効電位幅との間の閾値を超えることでデータがシフトしてしまう。これら２つの現象はどちらも発生しうる現象であるため、どちらが発生してもデータのシフトには至らせない機構を準備する必要がある。
【０００４】
従来では、ユーザデータを記録するユーザ領域に加えて冗長領域を持ち、この冗長領域にエラー訂正符号等を記録する。そして、このエラー訂正符号を利用して、上記２つのデータのシフトを現象として捉え、これを補正して正しいデータ列を導く。さらに、データのシフトを起こしたブロックをこれとは異なるブロックにコピーすることでユーザデータの喪失を防いでいる。しかしながら、データのシフトが起こったコピー元のブロックを再び利用可能にするためには消去することが必要で、この消去操作がＮＡＮＤ型フラッシュメモリの寿命を縮めるため、なるべく避けることが望ましい。
【０００５】
この問題に対するもう一つの方法として、特許文献１では、セルの電位が低下し、当該セルのあるべき電位の下限値ＶＦxを割り込んだ場合は当該セルのみに対してＶＦxを目標として再度プログラムサイクルを行い、逆にあるべき電位の上限値ＶＡxを超えた場合は当該ユーザデータを一旦バッファなどにコピーして、当該ブロックを消去し、さらにバッファから当該ブロックにデータを書き戻す処理、すなわちリフレッシュを行う技術が開示されている。しかしながら、この方法をもってしても徐々にセルの電位が上昇した場合にはデータの書き換えをせざるを得ず、データの書き換えを抑制する上で好ましくない。
【０００６】
さらに、上記いずれの技術も、あるセルの電位がどのデータランクに属するかを判断するために固定電位を用いるため、電位の上昇、下降のいずれも電位ランク間隔のほぼ半分のマージンを持つのみである。このため、電位が下がる傾向が強いフラッシュメモリ、上がる傾向が強いフラッシュメモリ等でもその特性を生かした判断ができず、早い時期にデータのシフトを引き起こしてしまう。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平１１−１５４３９４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本発明は、セルの電位変動に伴って必要となるデータの消去操作をより低減することが可能なメモリシステムを提供する。
【課題を解決するための手段】
【０００９】
本発明の一態様に係るメモリシステムは、共通のワード線に電気的に接続された複数の不揮発性メモリセルを含み、各メモリセルは、複数の電位ランクに対応した複数のデータを記憶する、セルアレイと、電位ランクごとにメモリセルの電位を測定し、この測定結果に基づいて各電位ランクの下限値及び上限値を変更する制御部とを含む。
【発明の効果】
【００１０】
本発明によれば、セルの電位変動に伴って必要となるデータの消去操作をより低減することが可能なメモリシステムを提供することができる。
【図面の簡単な説明】
【００１１】
【図１】本発明の第１の実施形態に係るＮＡＮＤ型フラッシュロムの構成を示すブロック図。
【図２】セルアレイ１１の構成を示す回路図。
【図３】１個のＮＡＮＤストリングの構成を示す断面図。
【図４】ＢＬ制御回路１２Ａに含まれるワークレジスタ１６の構成を示す概略図。
【図５】図１に示した制御部１４の構成を示すブロック図。
【図６】ＮＡＮＤ型フラッシュロムの全体動作を示すフローチャート。
【図７】ＮＡＮＤ型フラッシュロムの消去処理を示すフローチャート。
【図８】ＮＡＮＤ型フラッシュロムのプログラム処理を示すフローチャート。
【図９】ページアドレスの内容を示す概略図。
【図１０】ＮＡＮＤ型フラッシュロムの下位ビットプログラム処理を示すフローチャート。
【図１１】ＮＡＮＤ型フラッシュロムの上位ビットプログラムの処理を示すフローチャート。
【図１２】電位ランクと対応データとの関係を示す図。
【図１３】ＮＡＮＤ型フラッシュロムのリード処理を示すフローチャート。
【図１４】ＮＡＮＤ型フラッシュロムの電位判定処理を示すフローチャート。
【図１５】ＮＡＮＤ型フラッシュロムの中立電位推定処理を示すフローチャート。
【図１６】ＮＡＮＤ型フラッシュロムのパトロール処理を示すフローチャート。
【図１７】ＮＡＮＤ型フラッシュロムの要補正チェック処理を示すフローチャート。
【図１８】第１の実施形態の効果を説明する図。
【図１９】第１の実施形態の効果を説明する図。
【図２０】第１の実施形態の効果を説明する図。
【図２１】第１の実施形態の効果を説明する図。
【図２２】第２の実施形態に係るＮＡＮＤ型フラッシュロムの全体動作を示すフローチャート。
【図２３】第３の実施形態に係るＮＡＮＤ型フラッシュロムの中立電位推定処理を示すフローチャート。
【図２４】第３の実施形態の効果を説明する図。
【図２５】第３の実施形態の効果を説明する図。
【発明を実施するための形態】
【００１２】
以下に説明する各実施形態では、読み出し（リード）、書き込み（プログラム）、及び消去などの処理を行っていないタイミングでＮＡＮＤ型フラッシュメモリに含まれる全てのセルの電位を順に調査し、その電位がその時々の記録データに対応する値の範囲から逸脱しているものについて、そのような状態にあるセルの存在しない電位の範囲を見出す。そして、このセルの存在しない電位を記録データに対する閾値と定めて、正しい記録データ並びに当該セルの電位の上昇、下降の判断を導く。
【００１３】
さらに、正しい記録データからみて当該セルの電位が低下しているものについてはそのセルに対して選択的にプログラムを行い、一方、正しい記録データから見て当該セルの電位が上昇しているものについてはその範囲を新たな正しい記録データの電位とみなせるよう閾値を修正する。また、閾値を補正するための電位上のマージンを得るため、データのプログラム時に目標電位を動的に電位が低い方から詰めて設定する。
【００１４】
これらの技術により、フラッシュメモリのデータが正常とみなせる期間を長くすることができ、結果としてデータの移動に伴う消去処理の頻度を抑えることができる。以下に、本発明の実施形態について図面を参照して説明する。なお、以下の説明において、同一の機能及び構成を有する要素については、同一符号を付し、重複説明は必要な場合にのみ行う。
【００１５】
［第１の実施形態］
［１．メモリシステムの構成］
メモリシステムは、不揮発性半導体メモリを備えた半導体記憶装置である。具体的には、メモリシステムは、データの書き込み及び消去を電気的に行うことが可能なＥＥＰＲＯＭ（Electrically Erasable Programmable Read Only Memory）の一種であるＮＡＮＤ型フラッシュメモリ（以下、ＮＡＮＤ型フラッシュロムという）である。
【００１６】
本発明の各実施形態における各機能ブロックは、ハードウェア、ソフトウェア、及びファームウェアのいずれか、またはこれらの任意の組み合わせとして実現することができる。このため、各機能ブロックは、これらのいずれでもあることが明確となるように、概してそれらの機能の観点から以下に説明される。このような機能が、ハードウェア、ソフトウェア、或いはファームウェアとして実現されるかは、具体的な実施態様、またはシステム全体に課される設計制約に依存する。当業者は、具体的な実施態様ごとに、様々な方法でこれらの機能を実現し得るが、そのような実現を決定することは本発明の範疇に含まれるものである。
【００１７】
本実施形態では、セル当たり２ビットの情報を記録するＮＡＮＤ型フラッシュロムを一例として扱う。勿論、２ビットに限定されるものではなく、１ビット以上、或いは２値以上の情報を記録するＮＡＮＤ型フラッシュロムに適用することも可能である。しかし、２ビット以上のメモリセルに対しては、より大きな効果が得られる。
【００１８】
図１は、本発明の第１の実施形態に係るＮＡＮＤ型フラッシュロムの構成を示すブロック図である。ＮＡＮＤ型フラッシュロムは、ＮＡＮＤセル（メモリセル）ＭＣをマトリクス状に配置したセルアレイ１１を備えている。
【００１９】
図２は、セルアレイ１１の構成を示す回路図である。セルアレイ１１には、ロウ方向に延びる複数のワード線ＷＬ、及びカラム方向に延びる複数のビット線ＢＬが配設されている。例えば、ビット線ＢＬは４０９６＋７１本、ワード線ＷＬは３２本を１セットとして５１２セットある。ビット線ＢＬは、４０９６本がユーザデータ記録用、残りの７１本がエラー検出及び訂正用である。
【００２０】
３２本のワード線ＷＬ上にある全てのＮＡＮＤセルは全体でブロックを構成する。従って、ＮＡＮＤ型フラッシュロムは、５１２ブロック（ＢＬＫ０〜ＢＬＫ５１１）を備えている。
【００２１】
各ブロックＢＬＫは、ビット線ＢＬの本数に対応する４１６７個のＮＡＮＤストリングを備えている。複数個のＮＡＮＤストリングにそれぞれ含まれる選択トランジスタＳＴＤは、そのドレインがビット線ＢＬに接続され、そのゲートが選択ゲート線ＳＧＤに共通接続されている。また、複数個のＮＡＮＤストリングにそれぞれ含まれる選択トランジスタＳＴＳは、そのソースがソース線ＳＲＣに共通接続され、そのゲートが選択ゲート線ＳＧＳに共通接続されている。ソース線ＳＲＣは接地されている。
【００２２】
各ＮＡＮＤストリングにおいて、ワード線ＷＬの本数に対応する３２個のセルＭＣは、選択トランジスタＳＴＤのソースと選択トランジスタＳＴＳのドレインとの間に、それぞれの電流経路が直列接続されるように配置されている。すなわち、３２個のセルＭＣは、隣接するもの同士で拡散領域（ソース領域若しくはドレイン領域）を共有するような形でカラム方向に直列接続される。
【００２３】
そして、最もドレイン側に位置するセルＭＣから順に、コントロールゲートがワード線ＷＬ０〜ＷＬ３１にそれぞれ接続されている。従って、ワード線ＷＬ０に接続されたセルＭＣのドレインは選択トランジスタＳＴＤのソースに接続され、ワード線ＷＬ３１に接続されたセルＭＣのソースは選択トランジスタＳＴＳのドレインに接続されている。
【００２４】
ワード線ＷＬ０〜ＷＬ３１は、ブロック内のＮＡＮＤストリング間で、セルＭＣのコントロールゲートを共通に接続している。つまり、ブロック内において同一行にあるセルＭＣのコントロールゲートは、同一のワード線ＷＬに接続される。この同一のワード線ＷＬに接続される４０９６＋７１個のセルＭＣは１ページとして取り扱われ、このページごとにデータの書き込み及びデータの読み出しが行われる。
【００２５】
また、ビット線ＢＬは、ブロック間で、選択トランジスタＳＴＤのドレインを共通接続している。つまり、５１２個のブロック内において同一列にあるＮＡＮＤストリングは、同一のビット線ＢＬに接続される。
【００２６】
図３は、１個のＮＡＮＤストリングの構成を示す断面図である。半導体基板２０内には、Ｐ型ウェル（Ｐ−ｗｅｌｌ）２１が形成されている。各セルＭＣは、Ｐ型ウェル２１上に形成された積層ゲート構造を備えたＭＯＳＦＥＴ（Metal Oxide Semiconductor Field Effect Transistor）から構成される。積層ゲート構造は、Ｐ型ウェル２１上に、トンネル絶縁膜２３、浮遊ゲート電極（フローティングゲート）２４、ゲート間絶縁膜２５、制御ゲート電極（コントロールゲート）２６が順に積層されて構成されている。隣接する積層ゲート構造間のＰ型ウェル２１内には、拡散領域（ソース領域或いはドレイン領域）２２が設けられている。
【００２７】
セルＭＣは、フローティングゲート２４に蓄えられる電荷の数に応じて閾値電圧が変化し、この閾値電圧の違いに応じてデータを記録する。なお、セルＭＣの種類としては、電荷蓄積層が多結晶シリコンなどの導電体からなるフローティングゲート型メモリセルであってもよいし、電荷蓄積層がシリコン窒化物などの絶縁体であるＭＯＮＯＳ（metal-oxide-nitride-oxide-semiconductor）型メモリセルであってもよい。ＭＯＮＯＳ型メモリセルの場合、ゲート間絶縁膜２５は、ブロック絶縁膜と呼ばれる。
【００２８】
選択トランジスタＳＴＤは、Ｐ型ウェル２１内に互いに離間して設けられたソース領域２７Ｓ及びドレイン領域２７Ｄ、ソース領域２７Ｓ及びドレイン領域２７Ｄ間のチャネル領域上に設けられたゲート絶縁膜２８、及びゲート絶縁膜２８上に設けられたゲート電極２９から構成されている。選択トランジスタＳＴＳも同様の構成である。
【００２９】
図１に戻り、全てのビット線ＢＬには、ＢＬ制御部１２が接続されている。全てのワード線ＷＬには、ＷＬ制御部１３が接続されている。ＮＡＮＤ型フラッシュロムへの操作は１本のワード線ＷＬ（すなわち、１ページ）または１個のブロックを単位として行われるので、以後は特定のブロックに着目した説明を行う。図１は、１個のブロックに対応するＢＬ制御部１２及びＷＬ制御部１３の構成を示している。
【００３０】
ＢＬ制御部１２は、ビット線ＢＬごとに設けられた複数のＢＬ制御回路１２Ａを備えている。ビット線ＢＬの電位は、ＢＬ制御回路１２Ａによって制御される。
【００３１】
ＷＬ制御部１３は、ワード線ＷＬごとに設けられた複数のＷＬ制御回路１３Ａ、選択ゲート線ＳＧＤに接続されたＮＳ接続回路１３Ｂ、選択ゲート線ＳＧＳに接続されたＮＳ接続回路１３Ｃを備えている。ワード線ＷＬの電位は、ＷＬ制御回路１３Ａによって制御される。ＮＡＮＤストリングのチャネルは、ＮＳ接続回路１３Ｂ及び１３Ｃによって開閉が制御される。
【００３２】
ＢＬ制御回路１２Ａの各々は、リード及びプログラム可能なワークレジスタ１６を備えている。図４は、ＢＬ制御回路１２Ａに含まれるワークレジスタ１６の構成を示す概略図である。ワークレジスタ１６は、５ビットの記憶領域を持つ。５ビットのワークレジスタ１６の各ビットをwork0、work1、work2、work3、work4と呼んで識別する。ＮＡＮＤ型フラシュロム全体で４０９６＋７１個のＢＬ制御回路１２Ａが存在するため、work0、work1、work2、work3、work4も全部で４０９６＋７１個ずつ存在する。
【００３３】
以下の説明には、work0等に限らず幾つかのワークレジスタを扱うが、これらのレジスタを表現するために、プログラミング言語表記を拡張した表記法を用いる。work0[x]はx番目のＢＬ制御回路１２Ａのワークレジスタwork0を意味する。複数のレジスタ、例えばwork0とwork1とを合わせて一つの２ビット長レジスタとみなすとき、これをwork01と表記する。work01を数値として扱う場合、work0が上位、work1が下位である。work0の全てのレジスタを同時に扱う場合はプログラミング言語の配列表記法を借りてこれをwork0[]と表記する。さらに、二次元配列の表記法、例えば有効L[wx][0]という記法を用いる。これは、“有効L”とは配列構造を持ったレジスタで、そのwx番目の要素“有効L[wx]”はまた幾つかの要素を持つ配列であることを意味し、“有効L[wx][0]”はその０番目を示す。
【００３４】
ＢＬ制御部１２、及びＷＬ制御部１３は、制御部１４によってその動作が制御される。またホストとの通信は、制御部１４が担当している。このほか、制御部１４は、記憶回路１５に接続されている。記憶回路１５は、セルアレイ１１に比べれば小容量の不揮発性メモリによって構成される。例えば、記憶回路１５は、ＮＯＲ型フラッシュメモリなどが用いられる。記憶回路１５に不揮発に記録されるデータについては後述する。
【００３５】
電位発生回路１７は、ＮＡＮＤ型フラッシュロムが処理を実行するために必要とする様々な電位を発生させる。このために、電位発生回路１７は、例えば、一定電圧を発生させるＤ／Ａコンバータを備えている。電位発生回路１７によって発生された電位は、ＢＬ制御部１２、及びＷＬ制御部１３などに供給される。ＢＬ制御部１２は、電位発生回路１７から供給された電位を用いてビット線ＢＬの電位を設定する。ＷＬ制御部１３は、電位発生回路１７から供給された電位を用いてワード線ＷＬの電位を設定する。
【００３６】
図５は、制御部１４の構成を示すブロック図である。制御部１４は、消去処理部１４Ａ、プログラム処理部１４Ｂ、リード処理部１４Ｃ、電位判定部１４Ｄ、及びパトロール処理部１４Ｅを備えている。これらの動作は、フローチャートを用いて以下に詳細に説明する。
【００３７】
以下に、このように構成されたＮＡＮＤ型フラッシュロムの動作を図面を参照して説明する。
【００３８】
［２．全体動作］
まず、ＮＡＮＤ型フラッシュロムの制御部１４が実行する全体動作について説明する。図６は、ＮＡＮＤ型フラッシュロム（制御部１４）の全体動作を示すフローチャートである。
【００３９】
ＮＡＮＤ型フラッシュロムの電源がオンされると、制御部１４は、初期化動作を実行する。すなわち、制御部１４は、タイマＴ０、タイマＴ１をそれぞれ０時間、２秒に設定する（ステップS601、S602）。タイマＴ０、タイマＴ１はどちらもダウンカウンタによって実現される。ダウンカウンタは時間の経過と共に数を減じていき、０になったら新たな値がセットされるまで値が変化しないという性質を持つ。また、変数“監視位置”を０に設定する（ステップS603）。この監視位置は、後述するパトロール処理における監視対象のワード線ＷＬを示す。
【００４０】
続いて、制御部１４は、ホストからの命令を受けているかどうかを調査する（ステップS604）。その命令調査の結果に基づき、以下の通り処理を分岐する。
【００４１】
・ホストからリード命令を受けているなら、リード処理を実行する（ステップS605）。
【００４２】
・ホストからプログラム命令を受けているなら、プログラム処理を実行する（ステップS606）。
【００４３】
・ホストから消去命令を受けているなら、消去処理を実行する（ステップS607）。
【００４４】
この３つの処理が終了したら、制御部１４は、タイマＴ１を例えば２秒にセットする（ステップS608）。このタイマＴ１にセットする時間は、ＮＡＮＤ型フラッシュロムのアイドル状態を判断するためのアイドル時間であり、ＮＡＮＤ型フラッシュロムの仕様に応じて任意に設定可能である。ホストから何らかの命令を２秒以下の間隔で受けている間は、タイマＴ１が０にならず、一方で、タイマＴ１が０になっている場合は、ホストから何の命令も受けていない期間が続いていることを意味する。
【００４５】
ホストから何の命令も受けていない場合、制御部１４は、タイマＴ０、並びにタイマＴ１を調査し（ステップS609）、両者が共に０であるならパトロール処理を行う（ステップS610）。もしタイマＴ０、並びにタイマＴ１の少なくとも一方が０でないなら、パトロール処理を行わず、直ちにホスト命令調査のステップS604に戻る。
【００４６】
さて、パトロール処理が終了したら、制御部１４は、その時点の監視位置を調べ（ステップS611）、もし監視位置が０ならタイマＴ０を例えば１００時間にセットする（ステップS612）。これは、監視位置が０であることはパトロール処理が全ワード線を一巡したことを意味しており、パトロールを一度全てのワード線に対して行ったら（その後電源を落とさない限り）、次のパトロール開始まで１００時間の間隔を空け、頻繁なパトロール処理を実行しないようにしている。このタイマＴ０にセットする時間は、セルＭＣの電荷保持特性に応じて設定する。
【００４７】
このＮＡＮＤ型フラッシュロムにデータを書き込む場合、ホストはまず書き込みたいブロックに消去処理を行い、記録したいページに書き込みを行う。このとき、後述のステップS804で説明する記録ページの順番の制約を満たすように記録を行う。
【００４８】
［３．消去処理］
次に、ＮＡＮＤ型フラッシュロムの制御部１４が実行する消去処理について説明する。図７は、ＮＡＮＤ型フラッシュロム（消去処理部１４Ａ）の消去処理を示すフローチャートである。
【００４９】
消去処理では、ＮＡＮＤ型フラッシュロムのどのブロックを消去するかを指定するため、ホストからアドレス指定を受け、これをブロック番号とする（ステップS701）。ＮＡＮＤ型フラッシュロムは、アドレス指定に対応するブロックを消去する（ステップS702）。その処理は従来から行われてきた消去処理と同一である。
【００５０】
続いて、当該ブロックに関連する変数“有効L”、“有効U”を全て０にセットする。この２つの変数“有効L”、“有効U”はどちらも二次元配列で、各要素は当該ブロック中のワード線ＷＬ０〜ＷＬ３１に対応し、その一つ一つの要素はさらに記録データの数（本実施形態では２ビット、すなわち４個）に対応する４つの要素０〜３を持つ。これらはブロック毎に用意されている。この２つの変数“有効L”、“有効U”はどちらも記憶回路１５に格納される。
【００５１】
具体的には、消去処理部１４Ａは、ワード線の番号に対応する変数wxを０に設定する（ステップS703）。続いて、有効L[wx][0]〜L[wx][3]、有効U[wx][0]〜L[wx][3]を全て０にセットする（ステップS705）。そして、変数wxを１ずつ増やしながら（ステップS706）、変数wxが３２に達するまで（ステップS704）、変数“有効L”、“有効U”を０にセットする。
【００５２】
本実施形態では、セルにデータをプログラムした後に、変数“有効L”、“有効U”を設定するようにしている。このため、ブロックのデータが消去された場合は、これに伴い、変数“有効L”、“有効U”の値もクリアする。
【００５３】
［４．プログラム処理］
次に、ＮＡＮＤ型フラッシュロムの制御部１４が実行する書き込み（プログラム）処理について説明する。図８は、ＮＡＮＤ型フラッシュロム（プログラム処理部１４Ｂ）のプログラム処理を示すフローチャートである。
【００５４】
プログラム処理部１４Ｂは、書き込むべきページのアドレスをホストから受信し、これを変数“ページアドレス”に格納する（ステップS801）。ページとはフラッシュロムにとっての一回の書き込み単位で、本実施形態においては４０９６＋７１ビットである。
【００５５】
図９は、ページアドレスの内容を示す概略図である。ページアドレスは、例えば、１５ビットのアドレスで、上位アドレスから順に、９ビットのブロック番号、５ビットのＷＬ番号、１ビットのＬ／Ｕセレクタに分けられる。ブロック番号はフラッシュロムの制御部１４によってこれから操作を行う対象のブロックを選択するために使われる。Ｌ／Ｕセレクタは、セルに記録可能な２ビットのデータのうち、下位ビット（Ｌビット）、及び上位ビット（Ｕビット）のいずれのプログラムであるかを示す。ページアドレスのうち、ＷＬ番号は、変数wxに格納される（ステップS802）。
【００５６】
続いて、プログラム処理部１４Ｂは、ホストよりユーザデータを受信し、これをワークレジスタwork0に格納する（ステップS803）。続いて、今回のページがＬビットプログラムかＵビットプログラムかを判断する（ステップS804）。ページアドレスのＬ／Ｕセレクタが０のときＬビットプログラムであり、１のときＵビットプログラムである。
【００５７】
本実施形態で採用している書き込み方式では、一個のセルへの書き込みに着目するなら、セルに記録できる複数ビットを下位ビットから上位ビットに向け順に記録する。このとき、データを記録するのに適切な最も高いセルの電位をＶmaxとするなら、最下位ビットを記録する時、大まかには、消去レベルにとどまるか、或いはＶmax／２程度にセルの電位を上昇させる。そして、次に上位ビットを記録する時には、そのレベルにとどまるか、或いはＶmax／４だけセルの電位を上昇させる、といったように最初にセルの大きな電位変化を済ませる。そして、隣接セル間のカップリング効果による閾値の変動を抑えるために、上位ビットの記録に先立ち、当該ＷＬに隣接する他のＷＬの下位ビットの記録を終了させていなくてはならないという制約を持つ。しかしながら、この制約はフラッシュロムを使用するホスト側で考慮すべきものであり、ＮＡＮＤ型フラッシュロムはただそれが下位ビット（Ｌビット）プログラムか上位ビット（Ｕビット）プログラムかをホストから指定してもらい、その通りプログラム動作を行う。
【００５８】
なお、ＮＡＮＤ型フラッシュロムへのデータの書き込みは、フローティングゲートの電位を変化させることによって行うが、この電位を外部から直接知ることはできず、代わりにフローティングゲートの電位を相殺してチャネルを遮断状態から導通状態に変化させるのに必要なコントロールゲートへの印加電圧の高低によってそれを知る。従って、以下の説明でセルの電位とは、チャネルを導通状態に変化させるのに必要なコントロールゲートの電位を指す。
【００５９】
プログラム処理部１４Ｂは、Ｌビットのプログラムのとき、プログラムＬを実行する（ステップS805）。一方、Ｕビットのプログラムのとき、変数wxが指すワード線ＷＬのデータを閾値０Ｖで読み、結果をワークレジスタwork1に格納する（ステップS806）。具体的には、ＢＬ制御回路１２Ａは、データ読み出し時、予めビット線を所定電圧にプリチャージしておく。この時、ＷＬ制御回路１３Ａは、読み出し対象のワード線には読み出し電位、今回の場合は閾値０Ｖを印加し、読み出し対象以外のワード線には記憶情報に関係なくセルがオンする読み出しパス電位を印加する。そして、ＢＬ制御回路１２Ａは、ビット線の電位が放電されるか否かによって、読み出し対象のセルに記録された情報を読み出す。このwork1に格納されたデータは、これに先立つＬビットプログラムによって当該ＷＬに既に記録されたデータである。ステップS806におけるセルの電位とwork1に格納する値との関係については、例えば、セルの電位が閾値に満たない時（セルがオンする時）に１、閾値を超える時（セルがオフする時）に０としている。
【００６０】
続いて、プログラム処理部１４Ｂは、変数rxに１をセットする（ステップS807）。このrxが４未満の間は、ステップS808以下の処理を繰り返す。
【００６１】
プログラム処理部１４Ｂは、変数“下限値”に、１つ下の電位ランクの上限値“有効U[wx][rx-1]”にマージンを足した値、すなわち、有効U[wx][rx-1]＋マージンを計算して代入する（ステップS809）。有効L[wx][rx]以上、有効U[wx][rx]未満の範囲をrx番目の電位ランクと称する。これは、ある特定のデータを意味するセルの電位は上記の２つの電位に挟まれた範囲にあることが望ましいことを示す値である。よって、電位ランクｒｘは、下限値を有効L[wx][rx]、上限値を有効U[wx][rx]とする電位幅を有する。
【００６２】
データ１１ｂに対応する電位ランクは電位ランク０である。“ｂ”は２進数であることを示す。これは消去後のセルの電位をそのまま用いるため実際のセルの電位は負値だが、ここでは消去処理で設定したとおり、下限、上限ともに０である。それ以外の電位ランク１〜３は電位ランク０からマージンの間隔をあけて正の電位の方向に互いに領域を重ねないように順に配置する。マージンは隣接する２つの電位ランクの間に設ける設計上の電位幅である。本実施形態では、マージンは３である。このマージンを含め、制御部１４が扱うセルの電位は、ＷＬ制御部１３が設定可能な電位の分解能を単位とする。本実施形態では、設定値１あたり０．１５Ｖである。よって、上記マージンは実際には０．４５Ｖである。
【００６３】
続いて、プログラム処理部１４Ｂは、プログラムＵを実行する（ステップS810）。続いて、変数rxを１だけ増やして（ステップS811）、ステップS808に戻る。変数rxは、電位ランク選択のカウンタになっている。rx＝４になったとき全ての電位ランクへのセルの電位設定が完了し、プログラム処理は終了する。
【００６４】
なお、図８に明示していないが、プログラムＬ、並びにプログラムＵは、リターン時に異常発生を報告することがある。この場合、ホストにこの旨を報告する。Ｕビットプログラムがエラー終了した場合は、当該ＷＬの上位ビットがwork0に、下位ビットがwork1にそれぞれ残されている。ホストは本実施形態で明記されていない別の命令を発行してこれらのデータを取得し、適切な訂正を実行して、ＮＡＮＤ型フラッシュロムの適切な位置にこれらのデータを書き込む。
【００６５】
［４−１．プログラムＬ］
次に、ＮＡＮＤ型フラッシュロムの制御部１４が実行する下位ビットプログラム（プログラムＬ）の処理について説明する。図１０は、ＮＡＮＤ型フラッシュロム（プログラム処理部１４Ｂ）のプログラムＬの処理を示すフローチャートである。
【００６６】
まず、プログラム処理部１４Ｂは、変数“下限値”をマージンＬに設定する（ステップS1001）。この値は、下位データ“０”をセルに記録するための大まかな電位設定に使用されるものであり、プログラムＵが終了した時点でのデータ“００”に対する設計上の電位ランク下限より若干低い値に設定する。本実施形態では、マージンＬは９（電位換算で約１．３５Ｖ）である。
【００６７】
続いて、変数ＶprogにＶpsを代入する（ステップS1002）。プログラム電位Ｖprogは、ＷＬに設定すべきプログラム電位（記録パルス）である。プログラム開始電位Ｖpsは、プログラム開始時に最初に設定するプログラム電位である。本実施形態では、プログラム開始電位Ｖpsは１０６（電位換算で約１６Ｖ）である。
【００６８】
続いて、ワークレジスタwork0[]の全てのビットが１になったかどうかを調べる（ステップS1003）。プログラムＬでは、データ“１”を消去レベルに、データ“０”を変数“下限値”が示す電位ランクにそれぞれ割り当てている。従って、最初にステップS1003に到達した時点では、データ“０”を書くべきセルの有無を調べることになる。２度目以降にステップS1003に到達した時は、プログラムの完了したセルに対応するwork0の値が順次１に変化していくため、このステップS1003はその時点でまだプログラムしなくてはならないセルの有無を調べることになる。
【００６９】
プログラム処理部１４Ｂは、work0の全てのビットが１であることを知ると、プログラムＬの処理を終了する。work0の中にまだ０の値を持つものがある場合、ステップS1004以下の処理を実行する。
【００７０】
プログラム処理部１４Ｂは、work0[rx]＝０の各ＢＬのセルに、０．１５（Ｖ）＊Ｖprogのプログラム電位を印加する（ステップS1004）。「＊」は乗算記号である。すなわち、ＢＬ制御回路１２Ａは、書き込み対象のビット線の電位（すなわち、チャネル領域）を接地電位Ｖssに設定し、書き込み対象外のビット線の電位を一旦電源電位Ｖddに上昇させた後フローティング状態に設定する。そして、ＷＬ制御回路１３Ａは、書き込み対象のワード線に上記記録パルスを印加し、書き込み対象外のワード線に記録パルスより十分低い書き込みパス電位を印加する。これにより、書き込み対象のセルのフローティングゲートのみに電荷が注入される。
【００７１】
続いて、プログラム処理部１４Ｂは、読み出し電位Ｖr＝０．１５（Ｖ）＊下限値に設定して、変数wxに対応するワード線上の各セルの電位をリードし、結果をwork2に格納する（ステップS1005）。この操作は、一本のワード線に接続される全てのセルに対して同時に行う。セルの電位が読み出し電位Ｖrを超えたと判断したセル、すなわち読み出し電位Ｖrでオフするセルに対応するwork2の値は０に設定される。セルの電位が読み出し電位Ｖrに到達していないと判断したセル、すなわち読み出し電位Ｖrでオンするセルに対応するwork2の値は１に設定される。
【００７２】
続いて、プログラム処理部１４Ｂは、work0の各ビットを、work0 ∨ ¬work2 を計算して得た値で置き換える（ステップS1006）。「∨」は論理和を求める操作、「¬」はビット反転操作を意味する。この操作は、ＢＬに対応するwork0及びwork2の各々のビット全部に同時に実行する。この操作によって、Ｌビットプログラムが完了したセルのwork0が１に設定され、Ｌビットプログラムが完了していないセルのwork0が０に設定される。
【００７３】
続いて、プログラム処理部１４Ｂは、プログラム電位Ｖprogを差分電位Ｖpdだけ増やす（ステップS1007）。この結果、当ループを繰り返すと、その度に記録パルス高が徐々に増加することとなる。本実施形態では、差分電位Ｖpdは１である。
【００７４】
続いて、プログラム処理部１４Ｂは、Ｖprogがプログラム電位上限Ｖpeを超えたかどうかを調べる（ステップS1008）。本実施形態では、Ｖpeは、１４７（電圧換算で約２２Ｖ）である。もし超えた場合は当該セルを目標の電位に設定することができなかったことを意味するので、呼び出し側に異常発生を連絡してプログラム処理を終了する。そうでない場合はステップS1003に戻り、work0の調査以降の処理を繰り返す。
【００７５】
［４−２．プログラムＵ］
次に、ＮＡＮＤ型フラッシュロムの制御部１４が実行する上位ビットプログラム（プログラムＵ）の処理について説明する。図１１は、ＮＡＮＤ型フラッシュロム（プログラム処理部１４Ｂ）のプログラムＵの処理を示すフローチャートである。
【００７６】
プログラムＵでは、その実行時、変数rx、下限値、並びにワークレジスタwork0、work1が指定された状態である。下限値は、一つ下の電位ランクと十分なマージンをもって記録するためには当該電位ランクが下限値の示す電位以上でなくてはならないことを示す。変数rxは電位ランクの番号である。電位ランクはその電位の低い側から順に番号が振られ、図１２の通り、記録すべきユーザデータと対応付けられている。これらはグレイコード（Gray code、ＵＳＰ２，６３２，０５８を参照）としてよく知られた配列である。対応データはwork01に格納される２ビットの値である。ステップS804及びS1003で説明した通り、対応データの下位１ビットは、電位ランクの低い側が１、高い側が０になるように配置している。なお、電位ランクと対応データとの関係は、図１２に限定されるものではなく、任意に設定可能である。
【００７７】
プログラムＵは、電位ランクrxに対して固定された電位の設定を行うのではなく、下限値で示される電位以上の最小の電位を該当セルに設定し、設定を終えた電位の下限値、上限値を再計測して有効L[wx][rx]、有効U[wx][rx]にそれぞれ設定する。
【００７８】
まず、プログラム処理部１４Ｂは、プログラム電位Ｖprogにプログラム開始電位Ｖpsを設定する（ステップS1101）。続いて、各電位ランクにまで電位を上昇させなくてはならないセルを選ぶ。現時点で、work0には上位ビットデータ、work1には下位ビットデータが格納されている。rxとその電位ランクとの関係は図１２に示されるため、これを導くよう、
rx＝１の時  →  work0 ∨ ¬work1   （ステップS1102）
rx＝２の時  →  work0 ∨ work1     （ステップS1103）
rx＝３の時  →  ¬work0 ∨ work1   （ステップS1104）
を各ＢＬに対して演算し、結果をwork3の各ＢＬに対応した位置に設定する。「∨」は論理和を求める操作、「¬」は論理反転を求める操作をそれぞれ意味する。これにより、電位を上昇させるセルに対応するwork3は、０に設定される。
【００７９】
なお、本実施例のあり得る変更として、
rx＝１の時  →  work0 ∧ work1     （ステップS1102）
rx＝２の時  →  work1             （ステップS1103）
rx＝３の時  →  ¬work0 ∨ work1   （ステップS1104）
とそれぞれ演算する方法もある。「∧」は論理積を求める操作を意味する。このような演算の変更は、例えば電位ランク１にセルをチャージする時、電位ランク２，３を目標とするセルにも同時に電位ランク１にまでチャージすることを意味する。この方法だと、次にrx＝２，３としてプログラムＵを実行するとき、それらの対象セルに電位ランク１相当の電位が既にチャージされているため処理時間を短縮できる。さらに、電位ランク１を目標とするセルへの隣接する電位ランク２，３を目標とするセルからの最終的な容量カップリング効果の影響を僅かながら低減させることができる。
【００８０】
続いて、プログラム処理部１４Ｂは、現時点で既にwork3の全てのビットが１かどうかを調べる（ステップS1105）。全て１ならステップS1114へ進む。これはその電位ランクに設定したいセルが存在しないことを意味する。ステップS1105を省略しても全体の動作に支障ないが、ステップS1105によってwork3がオール１の時、続くステップS1106の実行時間を節約することができる。
【００８１】
work3の少なくとも一つのビットが０であるなら、プログラム処理部１４Ｂは、読み出し電位Ｖrに下限値を設定して、変数wxに対応するワード線上の各セルの電位をリードし、結果をwork2に格納する（ステップS1106）。続いて、プログラム処理部１４Ｂは、work3の各ビットを、work3 ∨ ¬work2を計算して得た値で置き換える（ステップS1107）。これらステップS1106及びS1107は、電位ランクrxに設定したい各セルの電位が既に下限値を超えているかどうかを調べ、下限値を超えていないセルの対応するwork3のビットのみを０のまま残す操作である。これにより、電位ランクの下限値を超えているセルは、これに対応するwork3が１に設定されるので、記録パルスの印加処理が省かれる。
【００８２】
続いて、プログラム処理部１４Ｂは、work3の全てのビットが１かどうかを調べる（ステップS1108）。全て１の場合はステップS1114へ進む。少なくとも1つのビットが０であるなら、プログラム処理部１４Ｂは、以下のプログラム処理を行う。
【００８３】
プログラム処理部１４Ｂは、プログラム電位Ｖprogが上限Ｖpeを超えているかどうかを調べる（ステップS1109）。もし超えているならば、プログラムＵの呼び出し元に異常発生を通達してプログラム処理を終了する。ＶprogがＶpe以下ならば、work3[rx]＝０であるような各ＢＬのセルに０．１５（Ｖ）＊Ｖprogのプログラム電位を印加する（ステップS1110）。
【００８４】
続いて、プログラム処理部１４Ｂは、読み出し電位Ｖr＝０．１５（Ｖ）＊下限値に設定して、wxに対応するワード線上の各セルの電位をリードし、結果をwork2に格納する（ステップS1111）。
【００８５】
続いて、プログラム処理部１４Ｂは、work3の各ビットを、work3 ∨ ¬work2を計算して得た値で置き換える（ステップS1112）。この処理によって、電位ランクの下限値を超えたセルは、これに対応するwork3が１に設定される。続いて、プログラム電位Ｖprogを差分電位Ｖpdだけ加算する（ステップS1113）。その後、ステップS1108に戻る。
【００８６】
このステップS1108〜1113の処理の一周によって下限値に未到達のセルにプログラム電位が印加され、その電位が下限値に到達したかどうかが調査される。この処理を終了するのは、プログラムに失敗した場合、または電位ランクrxに設定したい全てのセルの電位が下限値に到達した場合である。
【００８７】
続いて、ステップS1114以下では、電位ランクrxに含まれるセルの実際の電位の下限値及び上限値を計測する。まず、プログラム処理部１４Ｂは、変数Ｖxに現在の下限値を設定する（ステップS1114）。また、有効L[wx][rx]、有効U[wx][rx]をそれぞれＶxに設定する（ステップS1115）。これらは電位ランクの初期設定値であり、後述の各ステップを進めるに従い値が変化していく。Ｖxは、有効L[wx][rx]、有効U[wx][rx]のレベルを設定値１（本実施形態では、０．１５Ｖ）ずつ順次上げていくためのカウンタである。
【００８８】
続いて、現在の電位ランクrxによって、
rx＝１の時  →  work0 ∨ ¬work1   （ステップS1116）
rx＝２の時  →  work0 ∨ work1     （ステップS1117）
rx＝３の時  →  ¬work0 ∨ work1   （ステップS1118）
を各ＢＬに対して演算し、結果をwork3の各ＢＬに対応した位置に設定する。この演算はステップS1102〜1104と同じである。
【００８９】
続いて、プログラム処理部１４Ｂは、読み出し電位Ｖr＝０．１５（Ｖ）＊Ｖxに設定して、wxに対応するワード線上の各セルの電位をリードし、結果をwork2に格納する（ステップS1119）。
【００９０】
続いて、プログラム処理部１４Ｂは、work3 ∨ ¬work2＝０となるようなＢＬがあるかどうかを調べる（ステップS1120）。もしそのようなＢＬが一つもないならば、現在のＶxを有効L[wx][rx]に設定する（ステップS1121）。work3 ∨ ¬work2 ＝０であるとは、そのセルの電位は下限値以上、Ｖx未満であることを意味する。そのようなセルが一つもないということは、電位ランクrxに設定しようとした全てのセルの電位がＶxを上回っていることを意味する。
【００９１】
続いて、プログラム処理部１４Ｂは、work3 ∨ work2の演算結果が全てのＢＬに対して１であるかどうかを調べる（ステップS1122）。一つ以上のＢＬに対して上記演算結果が０ならば、変数Ｖxを１だけ増やす（ステップS1123）。そして、変数Ｖxがセル電位上限Ｖmax未満ならば（ステップS1124）、ステップS1119に戻り、変数Ｖxがセル電位上限Ｖmaxを超えたならば、プログラムＵの呼び出し元に異常発生を通達してプログラム処理を終了する。work3 ∨ work2の演算結果が０であるとは、そのセルは電位ランクrxに属し、かつそのセルの電位がＶxを超えていることを意味する。この場合は電位ランクの上限である有効U[wx][rx]はＶxより高いことが分かるため、さらにこの処理を繰り返す必要がある。Ｖmaxは、適切に取り扱うことのできるセルの電位の上限で、本実施形態では３３（電圧換算で約５Ｖ）である。
【００９２】
続いて、プログラム処理部１４Ｂは、ステップS1122でwork3 ∨ work2の演算結果が全てのＢＬに対して１ならば、現在のＶxを有効U[wx][rx]に設定して（ステップS1125）、プログラムＵを終了する。work3 ∨ work2が１とは、そのセルはrxを目標としていないか（work3＝１）、または、そのセルの電位は下限値以上、Ｖx未満であることを意味している。work3＝０の全てのセルが上記を満足する時、Ｖxは電位ランクの上限であるとみなして良い。よって、これを有効U[wx][rx]に設定する。
【００９３】
［５．リード処理］
次に、ＮＡＮＤ型フラッシュロムの制御部１４が実行する読み出し（リード）処理について説明する。図１３は、ＮＡＮＤ型フラッシュロム（リード処理部１４Ｃ）のリード処理を示すフローチャートである。
【００９４】
リード処理は、読み出し対象のセルが下位ビット（Ｌビット）のみプログラムされているか、上位ビット（Ｕビット）までプログラムされているか、さらにＬビットの読み出しかＵビットの読み出しかによって処理が分かれる。
【００９５】
まず、リード処理部１４Ｃは、読み取るべきページのアドレスをホストから受信し、これを変数“ページアドレス”に格納する（ステップS1301）。そして、その中のＷＬ番号を取り出して変数wxにセットする（ステップS1302）。続いて、リード処理部１４Ｃは、後述の電位判定がセットする変数“該当数”を全て０に設定する（ステップS1303）。該当数は一次元配列で、０からＶmax−１までの要素を持つ。
【００９６】
続いて、リード処理部１４Ｃは、セルにＵビットがプログラムされているかどうかを調べる。本実施形態のプログラムＬは、変数“有効U”を変更せず、プログラムＵで初めて有効U[wx][rx]に電位を設定する。このことを利用して、電位ランク３の有効U[wx][3]が０である場合、すなわち有効U[wx][3]に電位が設定されていない場合はＵビット未記録、０以外の値を取る場合はＵビット記録済みと判断する（ステップS1304）。
【００９７】
Ｕビット未記録の処理では、まず、リード処理部１４Ｃは、Ｌビットリードかどうかを調べる（ステップS1305）。Ｌビットリードかどうかは、図９のＬ／Ｕセレクタの値によって判断する。Ｌビットリードならば、前述したプログラムＬによってセルに記録されたデータ“０”とデータ“１”（消去レベル）との間の閾値に読み出し電位Ｖrを設定し、この読み出し電位Ｖrを用いてセルの記録データを判定する。すなわち、読み出し電位Ｖr＝０．１５（Ｖ）＊マージンＬ／２に設定して、wxに対応するワード線上の各セルの電位をリードし、結果をワークレジスタwork0に格納する（ステップS1306）。その後、ステップS1317に進む。
【００９８】
一方、Ｕビットリードならば、Ｕビット未記録であるため期待される値は定義されないが、本実施形態ではwork0の全ビットに１を設定する（ステップS1307）。その後、ステップS1317に進む。
【００９９】
ステップS1304でＵビットがプログラムされていると判断した場合、リード処理部１４Ｃは、図９のＬ／Ｕセレクタの値を参照して、Ｌビットリードかどうかを調べる（ステップS1308）。Ｌビットリードならば、電位ランクを意味する変数rxを１に設定する（ステップS1309）。続いて、電位判定部１４Ｄは、電位判定を実行する（ステップS1310）。その後、ステップS1317に進む。
【０１００】
Ｌビット及びＵビットの両方が書かれているとき、電位ランクとデータとの間には、図１２に示した関係があるので、Ｌビットは電位ランク０または電位ランク１ならば１、電位ランク２または電位ランク３ならば０とみなすことができる。この判断を行うために、rx＝１の一箇所で電位判定を行う。電位判定の方法は後述する。
【０１０１】
続いて、リード処理部１４Ｃは、ステップS1308でＵビットリードである場合、変数rxを０に設定する（ステップS1311）。続いて、電位判定部１４Ｄは、電位判定を実行する（ステップS1312）。続いて、リード処理部１４Ｃは、その結果であるwork0の全ビットデータをwork3にコピーする（ステップS1313）。続いて、リード処理部１４Ｃは、変数rxを２に設定する（ステップS1314）。続いて、電位判定部１４Ｄは、電位判定を実行する（ステップS1315）。続いて、リード処理部１４Ｃは、全てのＢＬに対応するビットに対して ¬work0 ∨ work3 を演算し、その結果をwork0の対応する位置に設定する（ステップS1316）。
【０１０２】
図１２によれば、Ｕビットは電位ランク０または電位ランク３のとき１、電位ランク１または電位ランク２のとき０である。そのため、ステップS1311〜1316では、rx＝０、rx＝２の二箇所で電位判定を行い、その結果を組み合わせて、すなわち¬work0 ∨ work3 の演算をすることで、Ｕビットの値を求めている。そして、work0のデータをホストに送信し（ステップS1317）、リード処理を終了する。
【０１０３】
［５−１．電位判定処理］
次に、ＮＡＮＤ型フラッシュロムの制御部１４が実行する電位判定処理について説明する。図１４は、ＮＡＮＤ型フラッシュロム（電位判定部１４Ｄ）の電位判定処理を示すフローチャートである。
【０１０４】
電位判定をする時、電位ランクrxが与えられている。電位判定は、個々のセルの電位が電位ランクrx以下の状態にあるか、電位ランクrx＋１以上の状態にあるかを特にその境界を判断しながら切り分ける。そして、電位判定を行った結果、以下の処理を行う。
【０１０５】
・判定に成功したかどうかを変数“取得成功”にセットする。
【０１０６】
・判定に成功した時はその境界となる電位、判定に成功しなかった時は推定に基づく切り分け電位を変数“中立電位”にセットする。
【０１０７】
・中立電位を閾値としてセルの電位を判定した結果を、セルの電位が低い側を１として、work0に格納する。
【０１０８】
・セルの電位がＶxを超えＶx＋１未満のセルの個数を変数“該当数[Ｖx]”にセットする。ただし、Ｖxは、有効U[wx][rx]以上、有効L[wx][rx+1]未満である。
【０１０９】
まず、電位判定部１４Ｄは、各種変数の初期化を行う。変数Ｖxを有効U[wx][rx]に、変数“中立電位”を−１に、変数“取得成功”を論理値“偽”にそれぞれ設定する（ステップS1401）。続いて、読み出し電位Ｖr＝０．１５（Ｖ）＊Ｖxに設定して、wxに対応するワード線上の各セルの電位をリードし、結果をwork2に格納する（ステップS1402）。
【０１１０】
続いて、電位判定部１４Ｄは、Ｖｘ＜有効L[wx][rx+1]である間は、ステップS1403〜1414の処理を順に行う（ステップS1403）。電位判定部１４Ｄは、work2の全てのデータをwork1にコピーする（ステップS1404）。
【０１１１】
続いて、電位判定部１４Ｄは、読み出し電位Ｖr＝０．１５（Ｖ）＊（Ｖx＋１)に設定して、wxに対応するワード線上の各セルの電位をリードし、結果をwork2に格納する（ステップS1405）。続いて、全てのＢＬに対応するwork1及びwork2を調べ、その値が異なっている個数を数えて変数ｎに設定する（ステップS1406）。続いて、該当数[Ｖx]をｎに設定する（ステップS1407）。
【０１１２】
続いて、ｎが０でないならば、ステップS1414に進む（ステップS1408）。nが０でないとは、この時点での電位ＶxとＶx＋１との二通りの読み出し電位Ｖrでセルの電位の調査を行っても結果に変化があること、すなわちセルの電位がＶxとＶx＋１との間にあるようなセルが存在することを意味する。
【０１１３】
ステップS1408でｎが０ならば、work1の全てのデータをwork0にコピーする（ステップS1409）。該当数が０個のこの電位は、隣接する電位ランクrxとrx＋１とを切り分けできる電位の候補である。もし実際にここで両電位ランクを切り分けることになるなら、ここでコピーしたwork0が中立電位で判定したセルの電位になる。
【０１１４】
中立電位が初期値−１のままであるか、または直前に調べたＶxの値（＝Ｖx−１）であるならば（ステップS1410）、中立電位にＶxを設定し（ステップS1411）、取得成功を真に設定する（ステップS1412）。一方、中立電位がこれらと異なった値を取る場合は、中立電位の値を変更せず、取得成功を偽に設定する（ステップS1413）。セルを含まない電位Ｖxは幾つ連続していても良いが、そのようなＶxが途切れ途切れに存在する場合は、間に残された電位のセルを電位ランクの上側に組み込めばよいか下側に組み込めばよいかを判別することができない。このような場合は中立電位の取得に失敗したものとみなし、取得成功を偽に戻す。
【０１１５】
最後に、Ｖxを一つ増やして（ステップS1414）、ステップS1403に戻る。
【０１１６】
有効U[wx][rx]から有効L[wx][rx+1]−１までの電位に含まれるセルの調査が終わったら、次に取得成功が偽かどうかを調べる（ステップS1415）。もし真ならば、そのまま電位判定を終了する。一方、偽ならば中立電位推定を実行し（ステップS1416）、電位判定を終了する。
【０１１７】
［５−２．中立電位推定処理］
次に、ＮＡＮＤ型フラッシュロムの制御部１４が実行する中立電位推定処理について説明する。図１５は、ＮＡＮＤ型フラッシュロム（電位判定部１４Ｄ）の中立電位推定処理を示すフローチャートである。
【０１１８】
この中立電位推定処理が実行されるとき、すなわち変数“取得成功”が偽になるとき、有効U[wx][rx]と有効L[wx][rx+1]との間にはセルの存在しない電位が存在しないか、または途切れ途切れにセルが複数個存在している。このような場合、正しい境界線を引くことは一般に不可能だが、本実施形態では、計算が容易な境界を設定する。
【０１１９】
電位判定部１４Ｄは、有効U[wx][rx]と有効L[wx][rx+1]との中点、すなわち（有効U[wx][rx]＋有効L[wx][rx+1]）／２を計算し、この計算結果を中立電位に設定する（ステップS1501）。有効U[][]、有効L[][]はそれぞれ整数のため、平均を計算すると端数が発生する場合があるが、この端数は切り捨てる。
【０１２０】
続いて、電位判定部１４Ｄは、読み出し電位Ｖr＝０．１５（Ｖ）＊中立電位に設定して、wxに対応するワード線上の各セルの電位をリードし、結果をワークレジスタwork0に格納し（ステップS1502）、中立電位推定を終了する。これにより、図１４の電位判定処理によって電位ランクの切り分けができない場合でも、中立電位推定処理によって新たに中立電位を設定することができる。
【０１２１】
［６．パトロール処理］
次に、ＮＡＮＤ型フラッシュロムの制御部１４が実行するパトロール処理について説明する。図１６は、ＮＡＮＤ型フラッシュロム（パトロール処理部１４Ｅ）のパトロール処理を示すフローチャートである。
【０１２２】
パトロール処理は全体としては変数“監視位置”によって制御されるループの構造を持つ。変数“監視位置”は、監視対象のワード線を示しており、不揮発性記憶回路１５に格納されている。変数“監視位置”を用いることで、パトロール処理はループの度に次々とワード線を変えながら処理を行うことができる。
【０１２３】
まず、パトロール処理部１４Ｅは、監視位置の内容を変数wxにコピーする（ステップS1601）。続いて、パトロール処理部１４Ｅは、当該ワード線がパトロール処理を必要としているかどうかを調べる（ステップS1602）。すなわち、有効U[wx][3]が０かどうかを調べ、０ならばステップS1626に進む。有効U[wx][3]が０であるとは、当該ワード線に対してプログラムＵをまだ行っていない、すなわちセルに全く記録していないか、または下位ビットしか記録していないことを意味しており、この場合は、パトロール処理を行わない。
【０１２４】
続いて、パトロール処理部１４Ｅは、該当数[０]から該当数[Ｖmax−１]の範囲を０で埋め、全ての該当数を０に設定する（ステップS1603、S1604）。続いて、変数“要補正”、“要移動”をともに偽に初期設定する（ステップS1605）。
【０１２５】
続いて、電位ランク１を用いて、下位ビット（Ｌビット）のリード処理を行う。すなわち、パトロール処理部１４Ｅは、電位ランクを意味する変数rxを１に設定する（ステップS1606）。続いて、電位判定部１４Ｄは、図１４に示す電位判定を実行する（ステップS1607）。続いて、パトロール処理部１４Ｅは、電位判定結果であるwork0をwork3にコピーする（ステップS1608）。この時点で、当該ワード線（wx）内各セルのＬビットがwork3に格納される。続いて、パトロール処理部１４Ｅは、要補正チェックを実行する（ステップS1609）。要補正チェックについては、後述する。
【０１２６】
続いて、電位ランク０及び電位ランク２を用いて、上位ビット（Ｕビット）のリード処理を行う。すなわち、パトロール処理部１４Ｅは、変数rxを０に設定する（ステップS1610）。続いて、電位判定部１４Ｄは、図１４に示す電位判定を実行する（ステップS1611）。続いて、パトロール処理部１４Ｅは、work0の各ビットをwork4の当該ビットに設定する（ステップS1612）。続いて、パトロール処理部１４Ｅは、要補正チェックを実行する（ステップS1613）。
【０１２７】
続いて、パトロール処理部１４Ｅは、変数rxを２に設定する（ステップS1614）。続いて、電位判定部１４Ｄは、図１４に示す電位判定を実行する（ステップS1615）。続いて、パトロール処理部１４Ｅは、電位判定結果を用いて、¬work0∨work4をその各ビットに対して求めてwork4の当該ビットに設定する（ステップS1616）。続いて、パトロール処理部１４Ｅは、要補正チェックを実行する（ステップS1617）。
【０１２８】
ここまで終了した時、work43には該当各セルの設定値がセットされている。また要補正には真または偽が設定されている。
【０１２９】
続いて、パトロール処理部１４Ｅは、要補正が偽である場合はステップS1626へ進む（ステップS1618）。これは、調査の結果、当該ワード線に補正が要らないことが分かった時行われる。ステップS1618で要補正が真である場合、work43の各データをwork01にコピーする（ステップS1619）。ステップS1619は、各ビット線につき２ビットのコピー処理が行われる。
【０１３０】
続いて、パトロール処理部１４Ｅは、有効L[wx][0]〜有効L[wx][3]、並びに有効U[wx][0]〜有効U[wx][3]を全て０に設定する（ステップS1620）。その後、変数rxを１から４に到達するまで一つずつ増やしながら（ステップS1621、S1622、S1625）、有効U[wx][rx-1]＋マージンを計算して下限値に設定し（ステップS1623）、プログラムＵを実行する（ステップS1624）という処理を繰り返す。この部分の処理は、図８で説明したプログラム処理のうち、ステップS807〜811と同じである。
【０１３１】
このステップS807〜811は、下限値をそれ以前に設定の終わった有効U[wx][]から計算し、この電位を上回る最低限のプログラムを必要なセルに対して行い、実際に設定できた各セルの電位から有効L[wx][]、有効U[wx][]を求めるよう動作する。このため、各セルの対応データさえあればパトロール処理におけるように現在どのようなセルの電位が設定されていようとも、これに合わせて各セルへの電位設定並びに有効L[wx][]、有効U[wx][]の再設定を行うことができる。
【０１３２】
続いて、パトロール処理部１４Ｅは、ステップS1622でrx＝４ならば、監視位置に１を加算する（ステップS1626）。続いて、ブロック内の全てのワード線を処理したか、すなわち監視位置が３２であるかどうかを調べる（ステップS1627）。監視位置が３２ならば、監視位置を０に設定して（ステップS1628）、パトロール処理を終了する。監視位置が３２でないならば、ホストから新しい命令を受けているかどうかを調べる（ステップS1629）。受けているならば、パトロール処理を終了する。受けていないならば、ステップS1601に戻り処理を続ける。
【０１３３】
なお、複数のブロックから構成されるＮＡＮＤ型フラッシュロムにおいては、０からブロック数＊ワード線数−１までを有効な監視位置とし、ステップS1627では監視位置＝ブロック数＊ワード線数のときステップS1628に進み、そうでない場合はステップS1629に進むよう修正し、さらにステップS1601において監視位置をブロックあたりのワード線数で除した剰余をwxとし、さらに監視位置をブロックあたりのワード線数で除した商をブロック番号とするような修正を行うことができる。
【０１３４】
図１６に明示していないが、プログラムＵはエラー終了することがある。この場合、ホストにこの旨を報告し、パトロール処理を終了する。このとき、当該ＷＬのデータがwork01に残されている。ホストは、ここに明記されていない別の命令を発行してこれらのデータを取得し、必要なら訂正を施してＮＡＮＤ型フラッシュロムの適切な位置にこれらのデータを書き込む。
【０１３５】
［６−１．要補正チェック処理］
次に、ＮＡＮＤ型フラッシュロムの制御部１４が実行する要補正チェック処理について説明する。図１７は、ＮＡＮＤ型フラッシュロム（パトロール処理部１４Ｅ）の要補正チェック処理を示すフローチャートである。
【０１３６】
要補正チェック処理では、ステップS1607等の電位判定の結果を利用して、さらに補正が必要な状態かどうかを判断する。取得成功が真、つまり正しい方法で二つの電位ランクを切り分けできた場合に限り、補正の要否を判断する。
【０１３７】
まず、パトロール処理部１４Ｅは、変数“要移動”が真かどうかを調べる（ステップS1701）。要移動が真であるならば、要補正チェックを終了する。この要移動が真であるとは、それ以前の電位ランクに対する電位判定によって既に中立電位の取得に失敗している、すなわち二つの電位ランクを切り分けることができないことを示しており、この場合はパトロール処理によって救済が不可能であり、今回の電位ランクに対する判断は不要である。
【０１３８】
続いて、パトロール処理部１４Ｅは、取得成功が真であるかどうかを調べる（ステップS1702）。取得成功が偽であるならば要移動を真に、要補正を偽にそれぞれ設定して（ステップS1703）、要補正チェックを終了する。要移動を真にした場合、それ以前の要補正の有無に関わらず要補正を偽にする。
【０１３９】
ステップS1702で取得成功が真であった場合、続いて、パトロール処理部１４Ｅは、変数“要補正”が真かどうかを調べる（ステップS1704）。もし要補正が真であるならば、要補正チェックを終了する。これは、ここまで進んだ場合、今回の要補正チェックが要補正を偽に戻すことはありえないため、以下の処理が無駄になるためである。この要補正が真であるとは、閾値を補正すれば、十分なマージンを有する電位ランクを再設定することが可能であることを示している。
【０１４０】
ステップS1704で要補正が偽であるならば、調査のための変数を初期化する。まず、パトロール処理部１４Ｅは、Ｖxを有効U[wx][rx]にし、またｍを有効L[wx][rx+1]に設定する（ステップS1705）。続いて、変数Ｎzeroを初期値０に設定する。変数Ｎzeroは、今回の電位ランクの間隙の該当電位のセルが存在しない電位の個数である。
【０１４１】
続いて、パトロール処理部１４Ｅは、Ｖx＜ｍの間（ステップS1707）、以下のステップS1708〜1710を繰り返す。パトロール処理部１４Ｅは、該当数[Ｖx]が０かどうかを調べる（ステップS1708）。該当数[Ｖx]＝０ならばＮzeroを１だけ増やし（ステップS1709）、そうでないならばステップS1709を行わずにS1710に進む。続いて、パトロール処理部１４Ｅは、Ｖxを１だけ増やす（ステップS1710）。
【０１４２】
ステップS1707でＶx≧ｍになったら、続いて、パトロール処理部１４Ｅは、Ｎzero≧マージンＡであるかどうかを調べる（ステップS1711）。Ｎzero＜マージンＡだった場合は要補正を真に設定し（ステップS1712）、そうでない場合は要補正を偽のまま残して要補正チェックを終了する。Ｎzeroは既に説明したように該当電位のセルが存在しない電位の個数であり、マージンＡはマージン（本実施形態では３）以下のある定数で、本実施形態では２である。Ｎzeroの値がマージン未満、マージンＡ以上であるとき、隣接する二つの電位ランクに属するセルの中には電位下降、または電位上昇を起こしたものが発生しているが、まだ両電位ランクの間には十分判別可能な隙間があり、補正を必要とするほどではないことを意味する。従って、図１６のステップS1618によって要補正が偽であると判断されて、当該ＷＬに対して補正が行われずに、ステップS1626へ進むように処理される。
【０１４３】
このような要補正チェック処理によって設定された変数“要補正”及び“要移動”を用いて、前述した図１６のパトロール処理が実行される。
【０１４４】
［７．第１の実施形態に係る効果］
本実施形態によって得ることのできる効果を、セルの電位状態を示す図１８〜図２１の具体例を参照しながら説明する。
【０１４５】
（具体例１）
図１８は、補正不要の具体例を説明する図である。図１８−０は、セルに情報を記録した直後の初期状態を示す図である。ａ〜ｇの７個のセルがあり、このうち電位ランクrxにセルａ、ｂ、ｃが、電位ランクrx＋１にセルｄ、ｅ、ｆ、ｇが位置する。セルａ、ｂ、ｃは、いずれも有効U[wx][rx]−１の電位にあり、この電位ランクとしては最も高い電位をもっている。同様に、セルｄ、ｅ、ｆ、ｇは、有効L[wx][rx+1]の電位にあり、この電位ランクとしては最も低い電位をもっている。
【０１４６】
図１８−１は、セルｄ、ｅが電位“有効L[wx][rx+1]−１”に下降した状態を示す図である。従来では、この電位の下降したセルに対して直ちにプログラムを行い、電位“有効L[wx][rx+1]”以上に戻している。しかし、本実施形態のパトロール処理では、まだ電位ランク間に十分な間隙（マージンＡ＝２）があると判断してそのままの状態で放置する。これは、図１７のステップS1711によって判断される。この判断によって、プログラムの回数を減らすことが可能になる。
【０１４７】
（具体例２）
図１９は、再プログラムの具体例を説明する図である。図１９−０は、初期状態を示す図であり、図１８−０の初期状態と同じである。
【０１４８】
図１９−１は、セルｄ、ｅ、ｆが電位下降しており、セルｄ、ｅは電位“有効L[wx][rx+1]−１”、セルｆは電位“有効L[wx][rx+1]−２”まで下降した状態を示す図である。このような状態で、従来では、電位ランクを判別する閾値が固定のため、その閾値によっては電位ランクrxのセルが“有効L[wx][rx+1]−２”にまで電位上昇したと誤判定する危険があった。
【０１４９】
これに対して本実施形態のパトロール処理では、電位“有効L[wx][rx+1]−１”にセルが存在し、電位“有効L[wx][rx+1]−３”にはセルが存在しないことから、セルｆを電位下降の結果として電位“有効L[wx][rx+1]−２”に至ったものと判断し、再プログラムの対象とする。そして、図１９−２に示すように、セルｄ、ｅ、ｆが再プログラムされて、電位“有効L[wx][rx+1]”以上に設定される。これにより、電位ランクrxと電位ランクrx＋１との間に、マージン＝３が確保される。
【０１５０】
（具体例３）
図２０は、電位ランク補正の具体例を説明する図である。図２０−０は、初期状態を示す図であり、図１８−０の初期状態と同じである。
【０１５１】
図２０−１は、電位上昇によって電位“有効U[wx][rx]＋２”にセルｂ、電位“有効U[wx][rx]＋１”にセルｃが存在する場合である。従来では、セルbの元の電位ランクを誤判定する危険があるばかりではなく、これに対してリフレッシュ、またはホストによるデータの再配置等の保護手段を講じる必要があり、これに伴ってブロックの消去処理が発生する。
【０１５２】
これに対して本実施形態のパトロール処理では、図２０−２に示すように、電位ランクrxに対するプログラムＵ（ステップS1624）の中で電位ランクrxの上限を元の有効U[wx][rx]＋２に相当する値に再設定し、セルｂ、ｃを電位ランクrxに含めてしまう。その結果、セルｄ、ｅ、ｆ、ｇには再プログラムが必要になるが、消去を行うことなく電位ランクrxと電位ランクrx＋１と間に再び十分なマージンを確保することができる。この結果、消去操作を減らすことで、ＮＡＮＤ型フラッシュロムの寿命を延ばすことができる。
【０１５３】
（具体例４）
図２１は、再プログラム及び電位ランク補正の具体例を説明する図である。図２１−０は、初期状態を示す図であり、図１８−０の初期状態と同じである。
【０１５４】
図２１−１は、電位下降したセル、電位上昇したセルの両方が発生した状態を示す図である。従来では、具体例３と同様に、ブロックの消去を必要とする。
【０１５５】
これに対して本実施形態のパトロール処理では、図２１−２に示すように、プログラムＵ（ステップS1624）によって有効U[wx][rx]を１だけ増やしてcを電位ランクrxに組み込み、さらに、セルｄ、ｅ、ｆ、ｇを電位“有効U[wx][rx]＋マージン”にまでプログラムする。これにより、ブロックを消去することなく電位ランクrxと電位ランクrx＋１との間に再び十分なマージンを確保することができる。
【０１５６】
本実施形態のパトロール処理は、ＮＡＮＤ型フラッシュロムに命令が来ない、いわゆるアイドル状態の時に実行される。そのため、パトロール処理のループには適当なタイミングで命令を受信していないか調査し、もし命令を受信しているならパトロール処理を中断して戻るルート（ステップS1629）が設けられている。この場合、変数“監視位置”はそれ以前の値を保持する。よって、次にパトロール処理を実行する際は、この監視位置が指し示すワード線から処理を再開する。これにより、一部のワード線への重複するパトロール処理を無くすことができる。
【０１５７】
また、本実施形態によれば、このパトロール処理は、ホストからの命令が発行されていない時に実行される。ホストへのサービスに与える遅延は既に行っているパトロール処理がステップS1629にたどり着くまでの時間のみであり、このため、本実施形態を実現した場合でも、ホストからの命令に対する遅延時間はほとんど発生しない。
【０１５８】
［第２の実施形態］
第２の実施形態は、パトロール処理の開始判断をホストからの指示に応じて行うようにしたものである。本実施形態に係るＮＡＮＤ型フラッシュロムの構成は、図１のタイマＴ１が存在しないこと以外は、図１と同じである。
【０１５９】
図２２は、第２の実施形態に係るＮＡＮＤ型フラッシュロム（制御部１４）の全体動作を示すフローチャートである。図２２は、図６と比べて、タイマＴ１が存在しないこと、パトロール処理を開始する条件としてホストから「パトロール命令」を受けなくてはならないことが異なる。図２２において、電源がオンされた後、リード命令、プログラム命令、消去命令を受けて対応した処理を行う点は、タイマＴ１の操作を除いて第１の実施形態と同じである。
【０１６０】
ＮＡＮＤ型フラッシュロムは、ホストからパトロール命令を受ける。このパトロール命令は、ホストがアイドル状態（ユーザからの操作が途絶えてシステムが待ちに入っていること）に入ったとき、またはホストが時間がかかることを承知でＮＡＮＤ型フラッシュロムの記録状態を良くすることを希望する場合に、ＮＡＮＤ型フラッシュロムに対して発行する命令であり、この時、フラッシュロムは、リード命令、プログラム命令等のセルアレイを操作する命令を直ちに受け取る可能性が低いだろうことを期待できる。
【０１６１】
制御部１４は、ホストからパトロール命令を受けた場合、タイマＴ０が０時間になっているかどうかを確認し（ステップS2207）、０時間ならパトロール処理を実行する。このときタイマＴ１の判定をパトロール実行の条件に組み込まない。パトロール処理終了後のステップも第１の実施形態と同じである。
【０１６２】
以上詳述したように第２の実施形態によれば、ホストがＮＡＮＤ型フラッシュロムに対して、より積極的にパトロール処理をさせることができる。
【０１６３】
また、ホストが内部処理などを実行中で近いうちにＮＡＮＤ型フラッシュロムにリード命令、プログラム命令等を発行することを予定している場合は、パトロール命令を出さないことにより、パトロール処理が中断される頻度を抑えることができる。これにより、パトロール処理が中断されることによる待ち時間に起因する応答の遅延を防ぐことができる。
【０１６４】
［第３の実施形態］
第３の実施形態は、第１の実施形態における図１５の中立電位推定処理をこれと異なる形式とするものである。第１の実施形態で説明した図１５の中立電位推定処理は、単純であるため高速処理に向く。しかし、セルの電位変動に偏りがあった場合には、隣り合う２つの電位ランク間の最適な切り分けをすることができない。そこで、第３の実施形態では、隣り合う２つの電位ランク間のマージン内の各電位に存在するセルの個数を元に中立電位を推定する。
【０１６５】
図２３は、第３の実施形態に係るＮＡＮＤ型フラッシュロム（電位判定部１４Ｄ）の中立電位推定処理を示すフローチャートである。ＮＡＮＤ型フラッシュロムの構成は、図１と同じであり、中立電位推定以外の処理方法は、第１の実施形態と同じである。
【０１６６】
第３の実施形態では、図１４で取得した変数“該当数[]”を参照して中立電位を推定する。該当数[]には、二つの電位ランクrx及びrx＋１の間のマージンを複数に分割した各電位において、その電位では遮断、一つ上の電位では導通となるようなセルの個数が記録されている。
【０１６７】
まず、電位判定部１４Ｄは、この手順内で有効な変数Ｌ、Ｕにそれぞれ、有効U[wx][rx]、有効L[wx][rx+1]を設定する（ステップS2301）。変数Ｌは、電位ランクrx及びrx＋１に挟まれるマージン内の最も低い電位である。変数Ｕは、電位ランクrx＋１に属する最も低い電位で、これの一つ下がマージン内の最も高い電位である。
【０１６８】
続いて、電位判定部１４Ｄは、Ｌ＜Ｕの関係が成立する限りにおいて（ステップS2302）、該当数[Ｌ]と該当数[Ｕ−１]との数を比較する（ステップS2303）。該当数[Ｌ]＜該当数[Ｕ−１]ならば、変数Ｕから１を減ずる（ステップS2304）。該当数[Ｌ]＞該当数[Ｕ−１]ならば、変数Ｌに１を加算する（ステップS2305）。該当数[Ｌ]＝該当数[Ｕ−１]ならば、変数Ｕから１を減じ、変数Ｌに１を加算する（ステップS2306）。
【０１６９】
ステップS2302においてＬ＜Ｕの関係が成り立たなくなったとき、電位判定部１４Ｄは、変数Ｌの値を中立電位に設定する（ステップS2307）。続いて、電位判定部１４Ｄは、読み出し電位Ｖr＝０．１５（Ｖ）＊中立電位に設定して、wxに対応するワード線上の各セルの電位をリードし、結果をワークレジスタwork0に格納し（ステップS2308）、中立電位推定処理を終了する。
【０１７０】
（第３の実施形態に係る効果）
図２４（ａ）は、該当数の具体例１を説明する図であり、図２４（ｂ）は、これに基づき変数Ｌ及びＵがどう推移するかを説明する図である。図２４（ａ）は、電位ランク１と電位ランク２との間のマージンを示しており、電位ランク１の有効U[wx][1]は１０、電位ランク２の有効L[wx][2]は１４である。該当数の具体例１は、電位の高いほど該当数が大きくなっており、具体的には、該当数[11]が１、該当数[12]が１００、該当数[13]が１０００である。このワード線は、電位ランク２からのセルの電位下降が顕著である。
【０１７１】
ステップS2303の比較回数が増えるにつれて変数Ｕが減っていき、該当数[11]同士を比較した時点で、終了条件が成立、すなわちＬ＜Ｕの関係が成り立たなくなる。したがって、該当数[11]と該当数[12]との間が電位ランク１と電位ランク２との境界と判断され、ステップS2307によって中立電位に１２が設定される。
【０１７２】
図２５（ａ）は、該当数の具体例２を説明する図であり、図２５（ｂ）は、これに基づき変数Ｌ及びＵがどう推移するかを説明する図である。図２５（ａ）も、図２４（ａ）と同様に、電位ランク１と電位ランク２との間のマージンを示しており、電位ランク１の有効U[wx][1]は１０、電位ランク２の有効L[wx][2]は１４であ。該当数の具体例２は、電位の低いほど該当数が大きくなっており、具体的には、該当数[11]が１０００、該当数[12]が１００、該当数[13]が１である。このワード線は、電位ランク１からのセルの電位上昇が顕著である。
【０１７３】
ステップS2303の比較回数が増えるにつれて変数Ｌが増加していき、該当数[14]同士を比較した時点で、終了条件が成立、すなわちＬ＜Ｕの関係が成り立たなくなる。したがって、該当数[13]と該当数[14]との間が電位ランク１と電位ランク２との境界と判断され、ステップS2307によって中立電位に１４が設定される。
【０１７４】
このように、本実施形態によれば、電位下降が顕著な場合に中立電位は低くなり、電位上昇が顕著な場合に中立電位は高くなる。その結果、該当数の分布に合わせてより望ましい中立電位を得ることができる。
【０１７５】
なお、上記各実施形態では、フラッシュメモリとしてＮＡＮＤ型フラッシュメモリを例に説明しているが、この他に、ＮＯＲ型、ＡＮＤ型、ＤＩＮＯＲ（Divided bit-line NOR）型などの不揮発性半導体メモリにも広く適用可能である。
【０１７６】
本発明は、上述した実施形態に限定されるものではなく、その要旨を逸脱しない範囲内で、構成要素を変形して具体化できる。また、実施形態に開示されている複数の構成要素の適宜な組み合わせにより種々の発明を構成することができる。例えば、実施形態に開示される全構成要素から幾つかの構成要素を削除してもよいし、異なる実施形態の構成要素を適宜組み合わせてもよい。
【符号の説明】
【０１７７】
ＭＣ…メモリセル、ＷＬ…ワード線、ＢＬ…ビット線、ＢＬＫ…ブロック、ＳＴＤ，ＳＴＳ…選択トランジスタ、ＳＧＤ，ＳＧＳ…選択ゲート線、ＳＲＣ…ソース線、Ｔ０，Ｔ１…タイマ、１１…セルアレイ、１２…ＢＬ制御部、１２Ａ…ＢＬ制御回路、１３…ＷＬ制御部、１３Ａ…ＷＬ制御回路、１３Ｂ，１３Ｃ…ＮＳ接続回路、１４…制御部、１４Ａ…消去処理部、１４Ｂ…プログラム処理部、１４Ｃ…リード処理部、１４Ｄ…電位判定部、１４Ｅ…パトロール処理部、１５…記憶回路、１６…ワークレジスタ、１７…電位発生回路、２０…半導体基板、２１…Ｐ型ウェル、２２…拡散領域、２３…トンネル絶縁膜、２４…フローティングゲート、２５…ゲート間絶縁膜、２６…コントロールゲート、２７Ｓ…ソース領域、２７Ｄ…ドレイン領域、２８…ゲート絶縁膜、２９…ゲート電極。
【図１】
2010244605.tif 000003
【図２】
2010244605.tif 000004
【図３】
2010244605.tif 000005
【図４】
2010244605.tif 000006
【図５】
2010244605.tif 000007
【図６】
2010244605.tif 000008
【図７】
2010244605.tif 000009
【図８】
2010244605.tif 000010
【図９】
2010244605.tif 000011
【図１０】
2010244605.tif 000012
【図１１】
2010244605.tif 000013
【図１２】
2010244605.tif 000014
【図１３】
2010244605.tif 000015
【図１４】
2010244605.tif 000016
【図１５】
2010244605.tif 000017
【図１６】
2010244605.tif 000018
【図１７】
2010244605.tif 000019
【図１８】
2010244605.tif 000020
【図１９】
2010244605.tif 000021
【図２０】
2010244605.tif 000022
【図２１】
2010244605.tif 000023
【図２２】
2010244605.tif 000024
【図２３】
2010244605.tif 000025
【図２４】
2010244605.tif 000026
【図２５】
2010244605.tif 000027