(57)【特許請求の範囲】
【請求項１】
複数のページが配置されてなるブロックが複数形成されている半導体メモリに対してデータの読出又は書込を行うメモリ制御装置であって、
前記データの読出によって読出対象となるブロックから読み出されたページの数を読出回数として前記ブロック毎に計数する読出回数カウンタと、
前記読出回数に基づき、複数の前記ブロックのうちから誤り検査の監視対象となるブロックを監視対象ブロックとして選定する監視対象登録部と、
前記読出対象となった前記ブロック又は前記監視対象ブロックからデータを読み出し、読み出されたデータに対して誤り検出処理を施して得られた誤りビットの数をブロック毎に計数する監視処理を実行する監視部と、
前記監視対象ブロックに対応した前記誤りビットの数が所定の第１のエラー閾値より大きい場合に前記監視対象ブロックに対してリフレッシュ処理を施すリフレッシュ部と、
前記読出回数を補正する読出回数補正部と、を有し、
前記読出回数補正部は、
前記読出対象となるブロック内において互いに隣接するページから順に読み出しが為される場合には前記読出対象となるページの数に対応した値を前記読出回数に加算し、前記読出対象となるブロック内において前記読出対象となるページ同士の間隔がｎページ（ｎは２以上の整数）分未満となる場合には所定の固定値を前記読出回数に加算することを特徴とするメモリ制御装置。
【請求項２】
前記監視対象登録部は、前記複数のブロックのうちから、第１の監視閾値より大きい値を有する前記読出回数に対応したブロックを前記監視対象ブロックとして選定し、
前記監視部は、前記読出対象となった前記ブロックに対応した前記読出回数が前記第１の監視閾値よりも大なる第２の監視閾値よりも大きい場合に前記読出対象となった前記ブロックに前記監視処理を実行し、
前記読出回数補正部は、前記読出対象となった前記ブロックに対応した前記誤りビットの数が前記第１のエラー閾値より小なる第２のエラー閾値よりも大きい場合には、前記読出対象となった前記ブロックに対応した前記読出回数の値を前記第２の監視閾値の値に置換することを特徴とする請求項１記載のメモリ制御装置。
【請求項３】
前記監視対象登録部は、前記複数のブロックのうちから、前記読出回数が前記第１の監視閾値より大となる第１の条件と、前記誤りビットの数が第３のエラー閾値より大である第２の条件と、前記リフレッシュ処理の実行回数が所定の実行回数閾値より大である第３の条件のうちの少なくとも１つの条件を満たしたブロックを前記監視対象ブロックとして選定し、前記監視対象ブロックを示す情報を前記半導体メモリに書き込み、
前記監視部は、電源投入に応じて前記半導体メモリから前記監視対象ブロックを示す情報を読み出し、前記情報によって示される前記監視対象ブロックに対して前記監視処理を施すことを特徴とする請求項２記載のメモリ制御装置。
【請求項４】
前記第１のエラー閾値は、誤り訂正が可能な誤りビット数の上限値であることを特徴とする請求項１〜３のいずれか１に記載のメモリ制御装置。
【請求項５】
前記半導体メモリはＮＡＮＤ型のフラッシュメモリであることを特徴とする請求項１〜４のいずれか１に記載のメモリ制御装置。
【請求項６】
複数のページが配置されてなるブロックが複数形成されている半導体メモリに対してデータの読出又は書込を行うメモリ制御方法であって、
前記データの読出によって読出対象となるブロックから読み出されたページの数を読出回数としてブロック毎に計数し、
前記読出回数に基づき、複数の前記ブロックのうちから誤り検査の監視対象となるブロックを監視対象ブロックとして選定し、
前記読出対象となった前記ブロック又は前記監視対象ブロックからデータを読み出し、読み出されたデータに対して誤り検出処理を施して得られた誤りビットの数を前記ブロック毎に計数し、
前記監視対象ブロックに対応した前記誤りビットの数が所定の第１のエラー閾値より大きい場合に前記監視対象ブロックに対してリフレッシュ処理を行い、
前記読出対象となるブロック内において互いに隣接するページから順に読み出しが為される場合には前記読出対象となるページの数に対応した値を前記読出回数に加算し、前記読出対象となるブロック内において前記読出対象となるページ同士の間隔がｎページ（ｎは２以上の整数）分未満となる場合には所定の固定値を前記読出回数に加算することを特徴とするメモリ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体メモリに対してデータのアクセスを行うメモリ制御装置及びメモリ制御方法に関する。
【背景技術】
【０００２】
近年、メモリ容量の増大化に伴い、ビット単価で優れているＮＡＮＤ型フラッシュメモリが普及している。かかるＮＡＮＤ型フラッシュメモリでは、大容量化、高集積化に伴い、データが正しく読み出せなくなるという問題が顕著化している。ここで、特定のメモリセルが繰り返し読み出されることによって記憶データが破壊されるという、いわゆるリードディスターブ（Ｒｅａｄ  Ｄｉｓｔｕｒｂ）を未然に防ぐことが可能なメモリアクセス制御装置が提案されている（例えば、特許文献１）。当該メモリアクセス制御装置では、通常のデータ読出しがなされていないときにメモリからデータを読み出し、その読出データに誤りが生じているか否かを検出する誤り検査を行う。そして、誤りが生じているブロックに対してデータを再書き込みする、いわゆるリフレッシュ処理を実施する。
【０００３】
ここで、全ブロックを対象として上記のような誤り検査を行うと、リードディスターブの虞があるブロックに対して誤り検査が為される前に、このブロックでリードディスターブによるデータ破壊が生じる虞があった。そこで、特許文献１に記載されているメモリアクセス制御装置では、読み出し回数の多いブロックを誤り検査対象としている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１３−１１７８４０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、ＮＡＮＤ型フラッシュメモリでは、読み出しが為されていないメモリセルにおいてもリードディスターブが生じる場合がある。よって、特許文献１に開示されている方法では、リードディスターブが生じる可能性が高いブロックが誤り検査対象として選定されない虞があり、データの破壊を未然に防ぐことができない場合があった。
【０００６】
そこで、本発明は、リードディスターブに伴うデータの破壊を未然に且つ確実に防ぐことが可能なメモリ制御装置及びメモリ制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明に係るメモリ制御装置は、複数のページが配置されてなるブロックが複数形成されている半導体メモリに対してデータの読出又は書込を行うメモリ制御装置であって、前記データの読出によって読出対象となるブロックから読み出されたページの数を読出回数として前記ブロック毎に計数する読出回数カウンタと、前記読出回数に基づき、複数の前記ブロックのうちから誤り検査の監視対象となるブロックを監視対象ブロックとして選定する監視対象登録部と、前記読出対象となった前記ブロック又は前記監視対象ブロックからデータを読み出し、読み出されたデータに対して誤り検出処理を施して得られた誤りビットの数をブロック毎に計数する監視処理を実行する監視部と、前記監視対象ブロックに対応した前記誤りビットの数が所定の第１のエラー閾値より大きい場合に前記監視対象ブロックに対してリフレッシュ処理を施すリフレッシュ部と、前記読出回数を補正する読出回数補正部と、を有し、前記読出回数補正部は、前記読出対象となるブロック内において互いに隣接するページから順に読み出しが為される場合には前記読出対象となるページの数に対応した値を前記読出回数に加算し、前記読出対象となるブロック内において前記読出対象となるページ同士の間隔がｎページ（ｎは２以上の整数）分未満となる場合には所定の固定値を前記読出回数に加算する。
【０００８】
また、本発明に係るメモリ制御方法は、複数のページが配置されてなるブロックが複数形成されている半導体メモリに対してデータの読出又は書込を行うメモリ制御方法であって、前記データの読出によって読出対象となるブロックから読み出されたページの数を読出回数としてブロック毎に計数し、前記読出回数に基づき、複数の前記ブロックのうちから誤り検査の監視対象となるブロックを監視対象ブロックとして選定し、前記読出対象となった前記ブロック又は前記監視対象ブロックからデータを読み出し、読み出されたデータに対して誤り検出処理を施して得られた誤りビットの数を前記ブロック毎に計数し、前記監視対象ブロックに対応した前記誤りビットの数が所定の第１のエラー閾値より大きい場合に前記監視対象ブロックに対してリフレッシュ処理を行い、前記読出対象となるブロック内において互いに隣接するページから順に読み出しが為される場合には前記読出対象となるページの数に対応した値を前記読出回数に加算し、前記読出対象となるブロック内において前記読出対象となるページ同士の間隔がｎページ（ｎは２以上の整数）分未満となる場合には所定の固定値を前記読出回数に加算する。
【発明の効果】
【０００９】
本発明においては、半導体メモリに形成されている複数のブロックのうちから、データの読出回数が多いブロックを誤り検査の監視対象とするにあたり、その読出回数に対して、以下の補正を施すようにしている。すなわち、読出対象となるブロック内において互いに近接したページの各々が読出対象となる場合には、互いに遠隔したページの各々が読出対象となる場合に比べて、１つのページに集中して掛かるストレスが大きくなる。そこで、本発明では、読出対象となるブロック内において互いに隣接するページから順に読み出しが為される場合には読出対象となるページの数に対応した値を読出回数に加算する。また、読出対象となるページ同士の間隔がｎページ分未満となる場合には所定の固定値を読出回数に加算し、読出対象となるページ同士の間隔がｎページ分以上となる場合には読出回数の加算を行わないようにしている。
【００１０】
かかる構成によれば、リードディスターブの影響を反映させた読出回数に基づいて、監視対象となるブロックが選定されるようになるので、リードディスターブに伴うデータの破壊を未然に且つ確実に防ぐことが可能となる。
【図面の簡単な説明】
【００１１】
【図１】メモリ１００の構成を示すブロック図である。
【図２】読出後処理を示すフローチャートである。
【図３】読出回数増加補正処理を示すフローチャートである。
【図４】読出アクセスされたページ数と加算値ＡＤとの対応関係の一例を示す図である。
【図５】リードディスターブの影響を説明する為の図である。
【発明を実施するための形態】
【００１２】
以下、本発明の実施例を図面を参照しつつ詳細に説明する。
【００１３】
図１は、本発明に係るメモリ制御装置としてのメモリコントローラ２０を含むメモリ１００の構成を示すブロック図である。図１において、メモリセルアレイ１０は、例えばＮＡＮＤ型のフラッシュメモリ等のような不揮発性の半導体メモリである。メモリセルアレイ１０では、複数のメモリセルによって読出の最小単位となるページが形成され、複数のページでブロックが形成されている。各ブロックは、アドレス順に隣接して配置された複数のページで構成される。
【００１４】
尚、メモリセルアレイ１０の特定のブロック内には、優先監視リスト領域ＳＡが設けられている。優先監視リスト領域ＳＡには、電源投入時に優先監視処理（後述する）が施されるブロック（以下、優先監視ブロックと称する）を示す情報として、例えばブロックアドレス又はブロック番号等が記憶されている。よって、電源オフ後も、優先監視ブロックを示す情報は、メモリセルアレイ１０の優先監視リスト領域ＳＡに保持される。
【００１５】
メモリコントローラ２０は、外部供給された各種のコマンド信号ＣＭＤ（読出指令、書込指令等）、アドレスＡＤ及びデータＤＡＴに基づき、メモリセルアレイ１０に対してデータの読出、書込、消去等のアクセスを行う。
【００１６】
メモリコントローラ２０は、ＲＡＭ（Random Access Memory）２１、誤り検出部２２、読出回数カウンタ２３、読出回数補正部２４、リフレッシュ処理部２５、集中監視対象登録部２６、優先監視対象登録部２７、全体監視部２８、集中監視部２９及び優先監視部３０を含む。
【００１７】
誤り検出部２２は、外部供給された読出指令（以下、読出アクセスと称する）に応じてメモリセルアレイ１０から読み出されたデータに対して誤り検出を行い、ブロック毎に、そのブロックに属するページを読み出した際に検出された誤りビットの数を計数する。誤り検出部２２は、各ブロックに対応付けして、誤り情報として、例えば誤りビット数を示す情報をＲＡＭ２１に書き込む。
【００１８】
読出回数カウンタ２３は、読出アクセスによって読出対象となったページを読み出した回数を、ブロック毎に計数する。読出回数カウンタ２３は、各ブロックに対応付けして、その読出回数を示す情報をＲＡＭ２１に書き込む。更に、読出回数カウンタ２３は、各ブロックの読出回数の総数を示す情報をＲＡＭ２１に書き込む。尚、以降、読出アクセスによって読出対象となったページが属するブロックを、”読出対象となったブロック”と称する。
【００１９】
読出回数補正部２４は、読出アクセスが為される度に、読出対象となったブロックに対応付けしてＲＡＭ２１に格納されている読出回数を補正し、その補正が施された読出回数をＲＡＭ２１に上書きする。尚、読出回数補正部２４による読出回数の補正方法については後述する。
【００２０】
リフレッシュ処理部２５は、読出対象となったブロックに対応付けしてＲＡＭ２１に格納されている誤りビット数が所定の第１のエラー閾値ＴＥ１よりも大なる場合に、その読出対象となったブロックに対して、誤り訂正後のデータを再度書き込むという、いわゆるリフレッシュ処理を施す。更に、リフレッシュ処理部２５は、各ブロックに対応付けして、そのブロックで実施されたリフレッシュ処理の回数を示す情報をＲＡＭ２１に書き込む。尚、エラー閾値ＴＥ１とは、誤り訂正可能な誤りビット数の上限を表す値である。
【００２１】
集中監視対象登録部２６は、読出対象となったブロックに対応付けしてＲＡＭ２１に格納されている読出回数が所定の第１の監視対象閾値ＴＭ１よりも大なる場合に、その読出対象となったブロックを、集中的に誤り検査の監視対象とする為の集中監視対象ブロックとして登録する。また、集中監視対象登録部２６は、当該読出アクセス時に、誤り検出部２２において所定の第２のエラー閾値ＴＥ２（ＴＥ１＞ＴＥ２）よりも多い誤りが検出されたブロックも、集中監視対象ブロックとして登録する。すなわち、集中監視対象登録部２６は、上記した集中監視対象ブロックを表す情報として、例えばブロックアドレス、ブロック番号等をＲＡＭ２１に書き込む。
【００２２】
優先監視対象登録部２７は、ＲＡＭ２１に格納されているブロック毎の誤り情報、読出回数情報、及びリフレッシュ回数情報に基づき、データ破壊直前の状態にあるブロックを、優先的に誤り検査の監視対象とする為の優先監視対象ブロックとして選定する。優先監視対象登録部２７は、当該優先監視対象ブロックを表す情報を、メモリセルアレイ１０の優先監視リスト領域ＳＡに書き込む。尚、優先監視対象登録部２７による優先監視対象ブロックの選定方法については後述する。
【００２３】
全体監視部２８は、メモリセルアレイ１０内の全てのブロックに対して以下のような全体監視処理を行う。すなわち、全体監視部２８は、メモリセルアレイ１０の全ブロックの全ページに対してデータの読出しを行う。ここでの全体監視処理は全ブロックの全ページを万遍なく読む必要があるため、例えば、全体監視部２８は、第１ブロックの第４ｒ（ｒは正の整数）ページのデータを順に読出し、次に第２ブロックの第４ｒ＋１ページのデータを順に読出し、第３ブロックの第４ｒ＋２ページのデータを順に読出す。最終ブロックまで４ページおきにデータの読出しが終わったら、第１ブロックに戻り、第４ｒ＋１ページのデータを順に読出し、次に第２ブロックの第４ｒ＋２ページのデータを順に読出し、第３ブロックの第４ｒ＋３ページのデータを順に読み出す。これを繰り返すことで、４ページおきに全ブロックの全ページに対して万遍なくデータの読出しを行うことができる。ここでは、４ページおきで全体監視処理を行う例を示したが、全体監視処理の精度によってデータの読出しを何ページおきに設定してもよい。この際、誤り検出部２２にてブロック毎に検出された誤り情報を、各ブロックに対応づけしてＲＡＭ２１に書き込む。
【００２４】
集中監視部２９は、ＲＡＭ２１に格納されている集中監視対象ブロックを表す情報に基づき、以下のような集中監視処理を実行する。すなわち、集中監視部２９は、先ず、メモリセルアレイ１０内の集中監視対象ブロックに対応したブロック内の全ページからデータを読み出す。そして、集中監視部２９は、誤り検出部２２において検出された誤り情報を、集中監視対象ブロックに対応したブロックに対応づけしてＲＡＭ２１に書き込む。
【００２５】
また、集中監視部２９は、読出アクセスの対象となったブロックに対応づけしてＲＡＭ２１に格納されている読出回数が第１の監視対象閾値ＴＭ１に到達した場合に、当該ブロックに対して上記した集中監視処理を行う。すなわち、集中監視部２９は、補正読出回数が第１の監視対象閾値ＴＭ１に到達したブロックからデータを読み出し、この際、誤り検出部２２において検出された誤りビットの数を示す誤り情報を、このブロックに対応付けしてＲＡＭ２１に書き込む。尚、集中監視部２９は、一旦、その読出回数が第１の監視対象閾値ＴＭ１に到達したブロックに対しては、それ以降、所定回数分の読出アクセスが為される度に、上記した集中監視処理を行う。
【００２６】
優先監視部３０は、電源が投入されると、メモリセルアレイ１０の優先監視リスト領域ＳＡから優先監視対象ブロックを表す情報を読み出し、メモリセルアレイ１０に対して以下のような優先監視処理を実行する。すなわち、優先監視部３０は、先ず、メモリセルアレイ１０内の優先監視対象ブロックに対応したブロックからデータを読み出す。そして、優先監視部１９は、誤り検出部２２において検出された誤りビットの数を示す誤り情報を、優先監視対象ブロックに対応したブロックに対応づけしてＲＡＭ２１に書き込む。
【００２７】
尚、電源投入時には、ＲＡＭ２１に格納されている誤りビット数、読出回数、リフレッシュ回数、ブロックアドレス（ブロック番号）の値は全て、例えばゼロに初期化される。
次に、メモリ１００に対して読出アクセスが為された場合に、メモリコントローラ２０が実行する動作について説明する。
【００２８】
読出アクセスに応じて、メモリコントローラ２０は、その読出アクセスによって読出対象となったページからデータを読み出し、データＤＡＴとして出力する。更に、メモリコントローラ２０は、その読出対象となった各ページのアドレスを示す読出アドレス情報をＲＡＭ２１に書き込む。
【００２９】
その後、メモリコントローラ２０は、図２に示す読出後処理に従った制御を実行する。
【００３０】
図２において、先ず、メモリコントローラ２０の読出回数カウンタ２３は、上記した読出動作によって、読出対象となったブロック内で実施された読出の回数を、当該ブロックに対応付けしてＲＡＭ２１に格納されている読出回数に加算することにより、読出回数を更新する（ステップＳ１）。
【００３１】
次に、当該読出回数を、更新された読出回数としての読出回数ＲＮが、第１の監視対象閾値ＴＭ１よりも大であるか否かを判定する（ステップＳ２）。
【００３２】
ステップＳ２において、読出回数ＲＮが第１の監視対象閾値ＴＭ１よりも大であると判定された場合、メモリコントローラ２０の集中監視部２９が、当該読出アクセスの対象となったブロックに対して、上記した集中監視処理を実行する（ステップＳ３）。
【００３３】
一方、ステップＳ２において、読出回数ＲＮが第１の監視対象閾値ＴＭ１以下であると判定された場合、メモリコントローラ２０の誤り検出部２２は、読出アクセスの対象となったブロックから読み出されたデータに誤り検出処理を施し、この際得られた誤りビットの数を、誤りビット数ＥＮとして取得する（ステップＳ４）。
【００３４】
次に、メモリコントローラ２０は、誤りビット数ＥＮが第１のエラー閾値ＴＥ１よりも大であるか否かを判定する（ステップＳ５）。
【００３５】
ステップＳ５において、誤りビット数ＥＮが第１のエラー閾値ＴＥ１よりも大であると判定された場合、メモリコントローラ２０のリフレッシュ処理部２５は、読出アクセスの対象となったブロックに対して、上記したリフレッシュ処理を施す（ステップＳ６）。つまり、リフレッシュ処理部２５は、ブロック内で検出された誤りビットの数が誤り訂正可能な上限数（ＴＥ１）を超えた場合に、このブロックにリフレッシュ処理を施すのである。尚、当該リフレッシュ処理により、読出アクセスの対象となったブロックに対応付けしてＲＡＭ２１に格納されている読出回数はゼロに初期化される。更に、このリフレッシュ処理により、読出アクセスの対象となったブロックに対応付けしてＲＡＭ２１に格納されているリフレッシュ回数はインクリメントされる。
【００３６】
一方、ステップＳ５において、誤りビット数ＥＮが第１のエラー閾値ＴＥ１以下であると判定された場合、メモリコントローラ２０は、当該誤りビット数ＥＮが第２のエラー閾値ＴＥ２よりも大であるか否かを判定する（ステップＳ７）。
【００３７】
ステップＳ７において、誤りビット数ＥＮが第２のエラー閾値ＴＥ２よりも大であると判定された場合、メモリコントローラ２０の読出回数補正部２４は、読出アクセスの対象となったブロックに対応付けしてＲＡＭ２１に格納されている読出回数を、監視対象閾値ＴＭ２と同一値に置換する（ステップＳ８）。すなわち、誤り訂正可能な数、つまりＴＥ１より小であり且つＴＥ２より大となる数のビット誤りが検出された場合には、このブロックでの読出回数を、強制的に監視対象閾値ＴＭ２と同一値に置換するのである。
【００３８】
一方、ステップＳ７において、誤りビット数ＥＮが第２のエラー閾値ＴＥ２以下であると判定された場合、読出回数補正部２４は、図３に示す読出回数増加補正処理を実行する（ステップＳ９）。
【００３９】
図３において、先ず、読出回数補正部２４は、読出アクセスによってＲＡＭ２１に格納された、各ページの読出アドレスを示す情報に基づき、この読出アクセスが、互いに隣接して配置されているページ同士からその配置順にデータの読み出しを行う、シーケンシャルな読出アクセスであるか否かを判定する（ステップＳ３１）。ステップＳ３１において、シーケンシャルな読出アクセスであると判定された場合、読出回数補正部２４は、読出対象となったページの数に対応した値を有する加算値ＡＤを設定する（ステップＳ３２）。つまり、シーケンシャルな読出アクセスによって読出対象となったページの数が多いほど、加算値ＡＤも大となる。尚、読出対象となったページの数に対応した値を有する加算値ＡＤを設定するにあたり、図４に示すように、読出対象となったページ数がＮ（Ｎは２以上の整数）に到るまではそのページ数に対応した大きさの加算値ＡＤを設定し、ページ数がＮ以上となった場合には、限度値ＵＬで固定される加算値ＡＤを設定するようにしても良い。
【００４０】
一方、ステップＳ３１において、シーケンシャルな読出アクセスではないと判定された場合、読出回数補正部２４は、読出対象となったページ同士の間隔が、ｎ（ｎは２以上の整数）ページ分以上離間しているか否かを判定する（ステップＳ３３）。
【００４１】
ステップＳ３３において、読出対象となったページ同士の間隔がｎページ分未満であると判定された場合、読出回数補正部２４は、所定の固定値Ｋ（Ｋは正の整数）を加算値ＡＤとして設定する（ステップＳ３４）。
【００４２】
一方、ステップＳ３３において読出対象となったページ同士の間隔がｎページ分以上離間していると判定された場合、読出回数補正部２４は、ゼロを加算値ＡＤとして設定する（ステップＳ３５）。尚、ステップＳ３３において読出対象となったページ同士の間隔がｎページ分以上離間していると判定された場合には、読出回数補正部２４は、読出回数への加算を実施しないようにしても良い。
【００４３】
上記したステップＳ３２、Ｓ３４又はＳ３５の実行後、読出回数補正部２４は、加算値ＡＤを、読出アクセスの対象となったブロックに対応付けしてＲＡＭ２１に格納されている読出回数に加算し、その加算結果を新たな読出回数としてＲＡＭ２１に上書きする（ステップＳ３６）。かかるステップＳ３６の実行後、読出回数補正部２４は、読出回数増加補正ルーチンを抜けて、図２に示すステップＳ９を終了する。
【００４４】
図２においてステップＳ８又はＳ９の終了後、メモリコントローラ２０の優先監視対象登録部２７は、優先監視対象登録処理を実行する（ステップＳ１０）。
【００４５】
すなわち、優先監視対象登録部２７は、先ず、ＲＡＭ２１に格納されているブロック毎の誤り情報、読出回数情報、リフレッシュ回数情報に基づき、データ破壊となる可能性が高い状態にあるブロックを選定する。すなわち、優先監視対象登録部２７は、各ブロックのうちで、誤りビット数が所定の第３のエラー閾値ＴＥ３より大であり、リフレッシュ回数が所定の実行回数閾値ＴＸより大であり、読出回数が第３の監視対象閾値ＴＭ３（ＴＭ１＞ＴＭ３）より大となるブロックを、破壊の危険度が高い優先監視対象ブロックとして選定する。そして、優先監視対象登録部２７は、当該優先監視対象ブロックを表す情報、例えばブロックアドレス又はブロック番号を、メモリセルアレイ１０の優先監視リスト領域ＳＡに書き込む。尚、複数の優先監視対象ブロックが検出された場合には、優先監視対象登録部２７は、各優先監視対象ブロックを示す情報を優先監視リスト領域ＳＡに追記して行く。この際、優先監視対象登録部２７は、これら優先監視対象ブロックのうちで、リフレッシュ回数が多い順に上記した優先監視処理を実行させるように、優先監視対象ブロックを示す情報を優先監視リスト領域ＳＡに追記して行く。尚、リフレッシュ回数が同一である場合には、優先監視対象登録部２７は、誤りビットの数が多い順に優先監視処理を実行させるように、優先監視対象ブロックを示す情報を優先監視リスト領域ＳＡに追記して行く。よって、優先監視部３０は、リフレッシュ回数が多いブロック、誤りビット数が多いブロック、読出回数が多いブロックの順に優先順位を設定し、その優先順位に従った順に優先監視処理を実行する。
【００４６】
かかるステップＳ１０による優先監視対象登録処理の実行後、メモリコントローラ２０は、図２に示す読出後処理の実行を終了し、外部からのアクセス待ち状態に移行する。
【００４７】
このアクセス待ち状態の間に、上記した全体監視部２８による全体監視処理、及び集中監視部２９による集中監視処理を実行するようにしても良い。更に、電源投入に応じて優先監視部３０が実行する優先監視処理の直後に、読出アクセスが為されるか否かに拘わらず、全体監視部２８による全体監視処理を実行するようにしても良い。尚、全体監視処理の実行中に読出アクセスが為された場合には、この全体監視処理を一旦中断し、図２に示す読出後処理の終了後、その中断した箇所から全体監視処理を行う。また、優先監視部３０による優先監視処理に関しては、電源投入時点のみならず、電源投入後、所定周期毎に実行するようにしても良い。
【００４８】
以上のように、図１に示すメモリコントローラ２０は、ブロック毎に、そのブロック内で読出対象となったページの数を読出回数として計数する。メモリコントローラ２０は、読出回数が所定の閾値（ＴＭ１）よりも多くなったブロックについては、読出動作に伴う劣化が進行していると判定し、当該ブロックを集中監視対象ブロックとして登録し、全ブロックのうちで集中監視対象ブロックに対して集中的に監視処理を施す。つまり、集中監視対象ブロックの各々からデータを読み出して誤り検出を行い、ブロック毎に誤りビットの数を集計する。この際、誤りビットの数が所定の閾値（ＴＥ１）を超えたブロックに対しては、メモリコントローラ２０は、リフレッシュ処理（図２のステップＳ６）を施すことにより、メモリセルの劣化に伴うデータ破壊を回避する。
【００４９】
この際、全ブロックのうちで、比較的劣化が進行していると推定される集中監視対象ブロックを集中的に監視するようにしたので、早い段階でリフレッシュ処理を必要とするブロックを選定することができる。
【００５０】
しかしながら、全ブロックのうちから集中監視対象ブロックを選定する為に用いる読出回数情報は、電源が遮断されるとゼロに初期化されてしまう。よって、破壊寸前まで劣化が進んでいるブロックが存在しているにも拘わらず、電源投入時点では、このブロックに対応した読出回数はゼロである。従って、このブロックが集中監視対象ブロックに登録される前に、当該ブロックに対する読出アクセスによってデータ破壊が生じてしまう虞がある。
【００５１】
そこで、メモリコントローラ２０では、読出アクセス対象となったブロック内で誤り訂正可能な程度の数（ＴＥ１より小でありＴＥ２より大となる数）のビット誤りが検出された場合には、このブロックでの読出回数を、強制的に監視対象閾値ＴＭ２と同一値置換する（図２のＳ８）ようにしている。尚、監視対象閾値ＴＭ２としては、上記した
監視対象閾値ＴＭ１と同一値を用いるようにしても良い。これにより、当該ブロックは、集中監視対象ブロックとして登録されることになり、直ちに集中監視処理が施されるようになる。
【００５２】
これにより、劣化が進んでいるブロックが存在しているにも拘わらず、電源オフによって当該ブロックに対応付けされてＲＡＭ２１に格納されている読出回数がゼロに初期化されてしまっても、このブロックに対して、早い段階で集中監視処理を施す、或いは優先監視対象ブロックとして選定することが可能となる。よって、データ破壊を未然に防ぐことが可能となる。
【００５３】
更に、メモリコントローラ２０では、全ブロックのうちで、劣化が進行しており且つ破壊の危険度が高いブロックを優先監視対象ブロックとして登録するようにしている。すなわち、メモリコントローラ２０は、読出回数が所定の閾値（ＴＭ１）より大である（第１の条件）、誤りビット数が所定の閾値（ＴＥ３）より大である（第２の条件）、リフレッシュ回数が所定回数（ＴＸ）より大である（第３の条件）のうちのいずれか１つの条件を満たすブロックを、優先監視対象ブロックとして選定する。つまり、ブロックの劣化度合いは、読出回数のみならず、実施されたリフレッシュ処理の回数、誤りビットの数にも反映されるので、これらを考慮して破壊の危険度が高いブロックを精度良く検知するようにしたのである。そして、メモリコントローラ２０は、当該優先監視対象ブロックを示す情報（ブロックアドレス又はブロック番号）を、不揮発性半導体メモリとしてのメモリセルアレイ２０に書き込む。よって、優先監視対象ブロックを示す情報は、電源オフ後も、メモリセルアレイ２０に保持される。そこで、メモリコントローラ２０は、電源投入に応じて、先ず、メモリセルアレイ２０に格納されている優先監視対象ブロックを示す情報を読み出し、当該優先監視対象ブロックに対して監視処理を施すのである。例えば、電源オフの前に、監視対象閾値ＴＭ１に到達しなかった為、集中監視処理対象とならなかったブロックに対しても、監視対象閾値ＴＭ３に達していれば優先監視対象となるため、電源投入時に優先監視処理が施される。つまり、電源オフ時に読出回数はゼロに初期化されるので、再び１から読出回数の計数が為されることになるが、読出回数が多いブロックの履歴を残すことで、このブロックを優先的に監視することが可能となる。
【００５４】
従って、上記した優先監視対象ブロックの登録及び優先監視処理によれば、破壊寸前まで劣化が進んでいるブロックに対して、早い段階でリフレッシュ処理を施すことが可能となる。これにより、破壊寸前まで劣化が進んでいるブロックが存在していても、データ破壊を未然に防ぐことが可能となる。
【００５５】
ところで、前述したようにブロックの劣化は読出回数の増加につれて進行するが、例えばＮＡＮＤ型のフラッシュメモリ等では、読出対象となったページのみならず、そのページに隣接する、少なくとも１つのページにもストレスが掛かって劣化するという、いわゆるリードディスターブが生じる。
【００５６】
以下に、リードディスターブの影響により、読出対象となったページに隣接する１ページ分の範囲にストレスが掛かる場合を例にとって、各ページに掛かる読出動作に伴うストレス（以下、読出ストレスと称する）について、図５（ａ）〜図５（ｃ）を参照しつつ説明する。尚、図５（ａ）〜図５（ｃ）は、１つのブロック内に形成されている８ページ分の領域を模式的に表す図である。
【００５７】
例えば、図５（ａ）に示すように互いに２ページ以上離間した位置に配置されているページＰ３及びＰ７が読出対象（斜線にて示す）となる場合、ページＰ３と共に当該Ｐ３に隣接するＰ２及びＰ４にもストレスが掛かる。更に、ページＰ７と共に当該Ｐ７に隣接するＰ６及びＰ８にもストレスが掛かる。よって、この際、ページＰ２〜Ｐ４、及びＰ６〜Ｐ８に夫々１回分の読出ストレスが掛かる。
【００５８】
また、図５（ｂ）に示すように互いに１ページ離間した位置に配置されているページＰ３及びＰ５が読出対象となると、ページＰ３と共に当該Ｐ３に隣接するＰ２及びＰ４にもストレスが掛かる。更に、ページＰ５と共に当該Ｐ５に隣接するＰ４及びＰ６にもストレスが掛かる。よって、この際、ページＰ２、Ｐ３、Ｐ５及びＰ６には夫々１回分の読出ストレスが掛かるが、ページＰ４には２回分の読出ストレスが掛かる。
【００５９】
また、図５（ｃ）に示すように互いに隣接して配置されているページＰ３及びＰ４を連続して読出対象とする、いわゆるシーケンシャルな読出が為されると、ページＰ３と共に当該Ｐ３に隣接するＰ２及びＰ４にもストレスが掛かる。更に、ページＰ４と共に当該Ｐ４に隣接するＰ３及びＰ５にもストレスが掛かる。よって、この際、ページＰ２及び５に対しては１回分の読出ストレスが掛かるが、ページＰ３及びＰ４には夫々２回分の読出ストレスが掛かることになる。
【００６０】
このように、図５（ａ）〜図５（ｃ）に示される読出アクセスでは、読出回数は全て２回である。ところが、読出アクセスの対象となるページ同士の間隔が、図５（ｂ）に示すようにリードディスターブの影響を受ける範囲（Ｐ２、Ｐ４、Ｐ４、Ｐ６）が重なる程度に短い場合には、図５（ａ）に示すように、その範囲（Ｐ２、Ｐ４、Ｐ６、Ｐ８）が互いに重ならない程度に離間している場合に比べて、１ページに集中する読出ストレスは大となる。また、この図５（ｂ）に示す状態よりも、図５（ｃ）に示すように、互いに隣接するページ同士を順次読出対象とする、いわゆるシーケンシャルアクセスを行う場合の方が１ページに集中する読出ストレスは大となる。
【００６１】
よって、図５（ａ）〜図５（ｃ）に示される例では読出回数が全て２回となるものの、ブロック劣化の進行度は、図５（ｃ）の形態で読出アクセスを行った場合が最も早く、図５（ａ）の形態で読出アクセスを行った場合が最も遅くなる。
【００６２】
そこで、メモリコントローラ２０では、リードディスターブに伴ってメモリセルに掛かるストレスを考慮した読出回数となるように、実際に実行された読出の回数に対して図３に示すような補正を施すようにしている。
【００６３】
すなわち、図５（ａ）に示すように、読出対象となったページ同士の間隔が、ｎページ分以上よりも大となる場合、つまりリードディスターブの影響を受ける範囲が重ならない場合には、ゼロを有する加算値ＡＤを実際の読出回数に加算する（図３のＳ３５、Ｓ３６）。つまり、この際、読出回数への加算を行わない。また、図５（ｂ）に示すように、読出対象となったページ同士の間隔がｎ（ｎは２以上の整数）ページ分未満となる場合、つまりリードディスターブの影響を受ける範囲が重なる場合には、所定の固定値Ｋを有する加算値ＡＤを、実際の読出回数に加算する（図３のＳ３４、Ｓ３６）。また、図５（ｃ）に示すように、隣接ページ同士が読出対象となるシーケンシャルアクセスが為された場合、つまり読出対象となったページの読み出しに伴うリードディスターブの影響が、読出対象となった隣接ページにも及ぶ場合には、そのページ数に対応した値を有する加算値ＡＤを、実際の読出回数に加算（図３のＳ３２、Ｓ３６）する。例えば、シーケンシャルアクセスされるページ数がｗ（ｗは２以上の整数）ページとなる場合には、加算値ＡＤを”ｗ”又は”ｗ”に所定の係数を乗算した値に設定し、この加算値ＡＤを、実際の読出回数に加算する。
尚、図５（ａ）〜図５（ｃ）では、リードディスターブの影響を受ける範囲が隣接する１ページ分だけとなっているが、隣接する２ページ分、或いは隣接する３ページ分以上を、リードディスターブの影響を受ける範囲と捉えて加算値ＡＤを設定するようにしても良い。この際、読出対象となったページから遠いページほど、掛かるストレスが弱いので、読出対象となったページからの距離に応じて、隣接する複数のページに対応させて加算する加算値ＡＤの値を設定するようにしても良い。つまり、読出対象となったページから遠いページほど加算値ＡＤの値を小さくするのである。
【００６４】
したがって、かかる読出回数補正によれば、リードディスターブの影響を反映させた読出回数に基づき、監視対象とするブロックが選定されるようになるので、リードディスターブに伴うデータ破壊を未然に且つ確実に防ぐことが可能となる。
【００６５】
要するに、メモリ制御装置としてのメモリコントローラ２０は、以下の読出回数カウンタ、監視対象登録部、監視部、及び読出回数補正部を有することにより、リードディスターブに伴うデータの破壊を未然に且つ確実に防ぐのである。つまり、読出回数カウンタ（２３）は、データの読出によって読出対象となるブロックから読み出されたページの数を読出回数としてブロック毎に計数する。監視対象登録部（２６、２７）は、この読出回数に基づき、複数のブロックのうちから誤り検査の監視対象となるブロックを監視対象ブロックとして選定する。監視部（２９、３０）は、読出対象となったブロック又は監視対象ブロックからデータを読み出し、読み出されたデータに対して誤り検出処理を施して得られた誤りビットの数をブロック毎に計数する監視処理を実行する。リフレッシュ部（２５）は、監視対象ブロックに対応した誤りビットの数が所定の第１のエラー閾値（ＴＥ１）より大きい場合に監視対象ブロックに対してリフレッシュ処理を施す。そして、読出回数補正部（２４）は、読出対象となるブロック内において互いに隣接するページから順に読み出しが為される場合には読出対象となるページの数に対応した値を読出回数に加算する（図３のＳ３１、Ｓ３２、Ｓ３６）。また、読出回数補正部は、読出対象となるブロック内において読出対象となるページ同士の間隔がｎページ（ｎは２以上の整数）分未満となる場合には所定の固定値（Ｋ）を読出回数に加算する（図３のＳ３３、Ｓ３４、Ｓ３６）。また、読出回数補正部は、読出対象となるブロック内において読出対象となるページ同士の間隔がｎページ分以上となる場合には読出回数への加算を行わない（図３のＳ３３、Ｓ３５、Ｓ３６）。
【符号の説明】
【００６６】
１０    メモリセルアレイ
２０    メモリコントローラ
２２    誤り検出部
２３    読出回数カウンタ
２４    読出回数補正部
２７    優先監視対象登録部
３０    優先監視部
ＳＡ    優先監視リスト領域
【図１】
0006523114.tif 000002
【図２】
0006523114.tif 000003
【図３】
0006523114.tif 000004
【図４】
0006523114.tif 000005
【図５】
0006523114.tif 000006