(57)【特許請求の範囲】
【請求項１】
再書き込み可能な不揮発性半導体メモリに対するアクセスを制御するメモリアクセス制御装置であって、
前記不揮発性半導体メモリは、ページ単位での読み出しが可能であり、かつ、複数のページを含むブロック単位で消去可能であり、
前記不揮発性半導体メモリに対する読み出し回数をブロック単位で記憶する読み出し回数記憶部と、
前記不揮発性半導体メモリに対する読み出し要求が発生した後、検査対象ページを特定する特定部と、
検査対象ページにエラーが存在するか否かを検査する検査部と、
を備え、
前記特定部は、
読み出し命令で指定されたアドレスからアクセスされる可能性のある全てのブロックを候補ブロックとして特定する候補特定部と、
前記読み出し回数記憶部を参照し、候補ブロックの中で読み出し回数が最も多いブロックを検査対象ブロックとして特定するブロック特定部と、
検査対象ブロックの中から所定のルールに基づいて検査対象ページを特定するページ特定部と、
を含むメモリアクセス制御装置。
【請求項２】
請求項１に記載のメモリアクセス制御装置であって、さらに、
各ブロックの検査対象ページを特定するためのポインタを記憶するポインタ記憶部、
を備え、
前記ページ特定部は、前記ポインタ記憶部を参照し、検査対象ブロックに対応するポインタから検査対象ブロック内の検査対象ページを特定するメモリアクセス制御装置。
【請求項３】
請求項１または請求項２に記載のメモリアクセス制御装置であって、
前記特定部は、前記不揮発性半導体メモリに対する読み出し処理を実行する前に検査対象ページを特定するメモリアクセス制御装置。
【請求項４】
請求項１または請求項２に記載のメモリアクセス制御装置であって、
前記特定部は、前記不揮発性半導体メモリに対する読み出し処理が完了した後、次の読み出し処理が発生するまでの間に検査対象ページを特定するメモリアクセス制御装置。
【請求項５】
請求項１ないし請求項４のいずれかに記載のメモリアクセス制御装置であって、
前記不揮発性半導体メモリは、１回の読み出し処理において読み出すことのできる最大ページ数が予め定められており、
前記候補特定部は、読み出し処理で指定されたアドレスと前記最大ページ数に基づいてアクセスされる可能性のある全てのブロックを特定するメモリアクセス制御装置。
【請求項６】
請求項２に記載のメモリアクセス制御装置であって、
前記特定部により検査対象ページが特定された後、対応するブロックのポインタが１ページ分インクリメントされるメモリアクセス制御装置。
【請求項７】
請求項６に記載のメモリアクセス制御装置であって、
ブロック内の最終ページが検査対象として指定された後は次にブロック内の先頭ページが検査対象として指定されるようポインタが更新されるメモリアクセス制御装置。
【請求項８】
請求項７に記載のメモリアクセス制御装置であって、
前記特定部によりブロック内の全てのページが検査対象ページとして特定された後、ブロックのポインタが初期位置を指し示すようリセットされるメモリアクセス制御装置。
【請求項９】
請求項７に記載のメモリアクセス制御装置であって、
前記特定部によりブロック内の全てのページが検査対象ページとして特定された後、検査対象ブロックの読み出し回数が０にリセットされるメモリアクセス制御装置。
【請求項１０】
請求項１に記載のメモリアクセス制御装置であって、
前記読み出し回数記憶部は、前記メモリアクセス制御装置の電源がＯＮされたときから読み出し回数をカウントするメモリアクセス制御装置。
【請求項１１】
再書き込み可能な不揮発性半導体メモリに対するアクセスを制御するメモリアクセス制御方法であって、
前記不揮発性半導体メモリは、ページ単位での読み出しが可能であり、かつ、複数のページを含むブロック単位で消去可能であり、
前記不揮発性半導体メモリに対する読み出し回数をブロック単位で記憶する読み出し回数記憶ステップと、
前記不揮発性半導体メモリに対する読み出し要求が発生した後、検査対象ページを特定する特定ステップと、
検査対象ページにエラーが存在するか否かを検査する検査ステップと、
を備え、
前記特定ステップは、
読み出し命令で指定されたアドレスからアクセスされる可能性のある全てのブロックを候補ブロックとして特定する候補特定ステップと、
前記読み出し回数記憶ステップにより記憶された読み出し回数を参照し、候補ブロックの中で読み出し回数が最も多いブロックを検査対象ブロックとして特定するブロック特定ステップと、
検査対象ブロックの中から所定のルールに基づいて検査対象ページを特定するページ特定ステップと、
を含むメモリアクセス制御方法。
【請求項１２】
請求項１１に記載のメモリアクセス制御方法であって、さらに、
各ブロックの検査対象ページを特定するためのポインタを記憶するポインタ記憶ステップ、
を備え、
前記ページ特定ステップは、前記ポインタ記憶ステップで記憶されたポインタを参照し、検査対象ブロックに対応するポインタから検査対象ブロック内の検査対象ページを特定するメモリアクセス制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フラッシュメモリからデータが繰り返し読み出されることにより、データが意図せず書き換えられるリードディスターブ現象に対処する技術に関する。
【背景技術】
【０００２】
ＮＡＮＤフラッシュメモリは、再書き込み可能な不揮発性半導体メモリである。ＮＡＮＤフラッシュメモリは、高集積化を実現しながら、低コスト化が図られているため、ＳＤメモリカードなどの形態で広く普及している。
【０００３】
ＮＡＮＤフラッシュメモリにおいては、特定のセルが繰り返し読み出されることにより、記憶データが意図せず書き換えられる現象が生じることが分かっている。この現象は、リードディスターブ（Ｒｅａｄ  Ｄｉｓｔｕｒｂ）現象と呼ばれている現象であり、ＮＡＮＤフラッシュメモリを利用する上での課題となっている。
【０００４】
特定のセルに対する読み出し処理が繰り返し行われた場合であっても、一旦、そのセルを含む領域に対してデータの更新が行われれば、セルの状態が修復されるため、リードディスターブの発生が情報処理に影響を与えることを回避できる。しかし、特定のセルに対して書き込み処理が行われず、読み出し処理だけが繰り返し行われる場合、リードディスターブの発生する可能性が高くなり、情報処理に影響を与える可能性もある。
【０００５】
最近では、ＮＡＮＤフラッシュメモリは、情報処理装置のプログラムメモリとしてＲＯＭのような役割で利用されるケースが多くなっている。ＮＡＮＤフラッシュメモリがそのように利用された場合、連続的な読み出し処理のみが行われるため、リードディスターブの発生可能性が高くなる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１１−１０７８５１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
リードディスターブの発生を回避あるいはリードディスターブにより発生したエラーを修復するために、いくつかの方策がとられている。たとえば、所定のアルゴリズムでＮＡＮＤフラッシュメモリの各ページのデータを読み込み、エラー検出訂正回路を利用してエラー検出を行う方法がある。エラー検出訂正回路によって、エラーが発生しているデータが検出された場合、データを訂正した上で、メモリにデータを再書き込みする。これにより、リードディスターブの発生していたセルが修復される。
【０００８】
エラーを検出するアルゴリズムとしては、様々なアルゴリズムが考えられる。たとえばＮＡＮＤフラッシュメモリの全ページを順番に検査するという方法がある。全ページを順番に検査する方法を採用した場合、エラー発生の可能性の低いページについて不必要な検査処理が発生する。その一方でエラー発生の可能性の高いページに対する検査処理の頻度が低下する。これは結果的にエラー検出の信頼性を低下させる要因となる。
【０００９】
ＮＡＮＤフラッシュメモリのページをランダムに検査するという方法も用いられているが、やはりエラー発生の可能性の高いページに対する効率的な検査が行われない。
【００１０】
読み出し回数が多いブロックに対してエラー検出を行う方法も用いられている。この方法をとる場合、全てのブロックについて読み出し回数を記憶するための記憶容量が必要となる。ＮＡＮＤフラッシュメモリの容量が増大化している中で、ブロックごとの読み出し回数を記憶するためには、非常に多くの記憶容量が必要となるという問題がある。
【００１１】
上記特許文献１においては、リードディスターブ現象を防止する技術が開示されている。特許文献１では、ブロックごとに読み出し回数を保持することなく、検査対象のページを特定するようにしている。しかし、全てのページを満遍なく検査する方法をとっているため、やはり、エラー発生の可能性の高いページを効率的に検査することができない。
【００１２】
そこで、本発明は前記問題点に鑑み、リードディスターブ現象に対する効率的な対処技術を提供することを目的とする。
【課題を解決するための手段】
【００１３】
上記課題を解決するため、請求項１記載の発明は、再書き込み可能な不揮発性半導体メモリに対するアクセスを制御するメモリアクセス制御装置であって、前記不揮発性半導体メモリは、ページ単位での読み出しが可能であり、かつ、複数のページを含むブロック単位で消去可能であり、前記不揮発性半導体メモリに対する読み出し回数をブロック単位で記憶する読み出し回数記憶部と、前記不揮発性半導体メモリに対する読み出し要求が発生した後、検査対象ページを特定する特定部と、検査対象ページにエラーが存在するか否かを検査する検査部と、を備え、前記特定部は、読み出し命令で指定されたアドレスからアクセスされる可能性のある全てのブロックを候補ブロックとして特定する候補特定部と、前記読み出し回数記憶部を参照し、候補ブロックの中で読み出し回数が最も多いブロックを検査対象ブロックとして特定するブロック特定部と、検査対象ブロックの中から所定のルールに基づいて検査対象ページを特定するページ特定部と、を含む。
【００１５】
請求項２記載の発明は、請求項１に記載のメモリアクセス制御装置であって、さらに、各ブロックの検査対象ページを特定するためのポインタを記憶するポインタ記憶部、を備え、前記ページ特定部は、前記ポインタ記憶部を参照し、検査対象ブロックに対応するポインタから検査対象ブロック内の検査対象ページを特定する。
【００１６】
請求項３記載の発明は、請求項１または請求項２に記載のメモリアクセス制御装置であって、前記特定部は、前記不揮発性半導体メモリに対する読み出し処理を実行する前に検査対象ページを特定する。
【００１７】
請求項４記載の発明は、請求項１または請求項２に記載のメモリアクセス制御装置であって、前記特定部は、前記不揮発性半導体メモリに対する読み出し処理が完了した後、次の読み出し処理が発生するまでの間に検査対象ページを特定する。
【００１８】
請求項５記載の発明は、請求項１ないし請求項４のいずれかに記載のメモリアクセス制御装置であって、前記不揮発性半導体メモリは、１回の読み出し処理において読み出すことのできる最大ページ数が予め定められており、前記候補特定部は、読み出し処理で指定されたアドレスと前記最大ページ数に基づいてアクセスされる可能性のある全てのブロックを特定する。
【００１９】
請求項６記載の発明は、請求項２に記載のメモリアクセス制御装置であって、前記特定部により検査対象ページが特定された後、対応するブロックのポインタが１ページ分インクリメントされる。
【００２０】
請求項７記載の発明は、請求項６に記載のメモリアクセス制御装置であって、ブロック内の最終ページが検査対象として指定された後は次にブロック内の先頭ページが検査対象として指定されるようポインタが更新される。
【００２１】
請求項８記載の発明は、請求項７に記載のメモリアクセス制御装置であって、前記特定部によりブロック内の全てのページが検査対象ページとして特定された後、ブロックのポインタが初期位置を指し示すようリセットされる。
【００２２】
請求項９記載の発明は、請求項７に記載のメモリアクセス制御装置であって、前記特定部によりブロック内の全てのページが検査対象ページとして特定された後、検査対象ブロックの読み出し回数が０にリセットされる。
【００２３】
請求項１０記載の発明は、請求項１に記載のメモリアクセス制御装置であって、前記読み出し回数記憶部は、前記メモリアクセス制御装置の電源がＯＮされたときから読み出し回数をカウントする。
【００２４】
請求項１１記載の発明は、再書き込み可能な不揮発性半導体メモリに対するアクセスを制御するメモリアクセス制御方法であって、前記不揮発性半導体メモリは、ページ単位での読み出しが可能であり、かつ、複数のページを含むブロック単位で消去可能であり、前記不揮発性半導体メモリに対する読み出し回数をブロック単位で記憶する読み出し回数記憶ステップと、前記不揮発性半導体メモリに対する読み出し要求が発生した後、検査対象ページを特定する特定ステップと、検査対象ページにエラーが存在するか否かを検査する検査ステップと、を備え、前記特定ステップは、読み出し命令で指定されたアドレスからアクセスされる可能性のある全てのブロックを候補ブロックとして特定する候補特定ステップと、前記読み出し回数記憶ステップにより記憶された読み出し回数を参照し、候補ブロックの中で読み出し回数が最も多いブロックを検査対象ブロックとして特定するブロック特定ステップと、検査対象ブロックの中から所定のルールに基づいて検査対象ページを特定するページ特定ステップと、を含む。
【００２６】
請求項１２記載の発明は、請求項１１に記載のメモリアクセス制御方法であって、さらに、各ブロックの検査対象ページを特定するためのポインタを記憶するポインタ記憶ステップ、を備え、前記ページ特定ステップは、前記ポインタ記憶ステップで記憶されたポインタを参照し、検査対象ブロックに対応するポインタから検査対象ブロック内の検査対象ページを特定する。
【発明の効果】
【００２７】
本発明のメモリアクセス制御装置によれば、再書き込み可能な半導体メモリにおけるリードディスターブの発生を効率的に検出し、情報処理に影響を与えることを未然に防止することができる。
【図面の簡単な説明】
【００２８】
【図１】本実施の形態に係る情報処理システムのブロック図である。
【図２】ＮＡＮＤフラッシュメモリのメモリ構成図である。
【図３】本実施の形態に係る制御処理のフローチャートである。
【図４】検査対象ページの特定方法を示す図である。
【発明を実施するための形態】
【００２９】
以下、図面を参照しつつ本発明の実施の形態について説明する。図１は、本実施の形態に係る情報処理システム１０の機能ブロック図である。この情報処理システム１０は、ホストシステム１およびメモリモジュール２を備えて構成される。メモリモジュール２は、メモリコントローラ３、メモリ４、リードカウンタ５、ポインタ記憶部６およびエラー検出訂正回路（ＥＣＣ回路：Ｅｒｒｏｒ  Ｃｈｅｃｋｉｎｇ  ａｎｄ  Ｃｏｒｒｅｃｔｉｏｎ回路）７を備えている。
【００３０】
メモリ４は、再書き込み可能な不揮発性半導体メモリである。本実施の形態において、メモリ４は、ＮＡＮＤフラッシュメモリである。メモリコントローラ３は、メモリ４に対するデータの読み出しや書き込みを制御する。例えば、この情報処理システム１０は、携帯電話装置として機能する。この場合、ホストシステム１は、携帯電話装置本体を構成し、メモリモジュール２がメモリカードを構成する。メモリモジュール２は、ホストシステム１に対して着脱自在なタイプであってもよいし、ホストシステム１を構成する装置に内蔵されるタイプであってもよい。
【００３１】
本実施の形態においては、メモリコントローラ３が、メモリモジュール２に搭載される構成となっているが、ホストシステム１がメモリコントローラ３を備える構成であってもよい。また、エラー検出回路７は、メモリ４内に設けられてもよいし、メモリコントローラ３内に設けられてもよい。
【００３２】
図２は、メモリ４の構成を示す図である。メモリ４は、１枚のダイ（Ｄｉｅ）で構成されている。ダイは、複数のバンク（Ｂａｎｋ）を含んでいる。図２の例では、ダイは、Ｊ個のバンクを含んでいる。バンクは、複数のブロック（Ｂｌｏｃｋ）を含んでいる。図２の例では、バンクは、Ｍ個のブロックを含んでいる。さらに、ブロックは、複数のページ（Ｐａｇｅ）を含んでいる。図２の例では、ブロックは、Ｚ個のページを含んでいる。
【００３３】
ページは、メモリ４の読み出し単位である。メモリコントローラ３は、メモリ４に格納されているデータをページ単位で読み出すことが可能である。ブロックは、メモリ４の消去単位である。メモリコントローラ３は、メモリ４に格納されているデータをブロック単位で消去することが可能である。
【００３４】
メモリ４のブロックは、物理的に隣り合って配置された複数のページで構成されている。たとえば、ブロックは、メモリアドレスの順番で隣り合って配列された複数のページで構成される。したがって、あるブロック内の特定のページに対して繰り返し読み出し処理が行われた場合、当該ブロック内の周辺のページに対して負荷が掛かり、周辺のページについてリードディスターブが発生する可能性がある。メモリ４のバンクは、論理的に隣り合って配置された複数のブロックで構成されている。バンクを構成するブロックは物理的に隣り合っている場合もある。
【００３５】
再び、図１を参照する。リードカウンタ５は、メモリ４に対する読み出しアクセスの回数をカウントする。上述したように、メモリコントローラ３は、メモリ４に対してページ単位での読み出し処理を実行する。メモリコントローラ３は、メモリ４に対して読み出し処理を実行したとき、リードカウンタ５に対して、読み出し処理を実行したページを特定する情報を通知する。具体的には、メモリコントローラ３は、リードカウンタ５に対して、読み出し処理を実行したページのバンク番号、ブロック番号およびページアドレスを通知する。
【００３６】
リードカウンタ５は、メモリコントローラ３から、読み出し対象のページのバンク番号、ブロック番号およびページアドレスを取得するが、ページ単位で読み出しアクセスの回数をカウントするのではなく、ブロック単位で読み出しアクセスの回数をカウントする。つまり、リードカウンタ５は、ブロック内に含まれるいずれのページに読み出しアクセスが行われたかを区別することなく、各ブロックに対する読み出しアクセスをカウントする。リードカウンタ５は、ブロック数に対応した複数の読み出し回数ＲＣを保持している。
【００３７】
ポインタ記憶部６は、ページごとのポインタＳＰを記憶している。ポインタＳＰは検査対象となるページを特定するためのデータである。ポインタ記憶部６は、ブロックごとにポインタＳＰを管理している。つまり、ポインタ記憶部６は、ブロック数に対応した複数のポインタＳＰを保持している。
【００３８】
リードカウンタ５およびポインタ記憶部６は、情報処理システム１０の電源がＯＮされている間だけ読み出し回数ＲＣおよびポインタＳＰを記憶しておけばよい。したがって本実施の形態においては、リードカウンタ５およびポインタ記憶部６として揮発性のメモリを利用することができる。
【００３９】
リードカウンタ５は、情報処理システム１０の電源がＯＮされたときから、各ブロックの読み出し回数をカウントする。つまり、情報処理システム１０の電源がＯＦＦされたとき、それまでの読み出し回数は保持されない。情報処理システム１０の電源がＯＦＦされた時点で全てのブロックの読み出し回数ＲＣは無効になる。リードカウンタ５には、電源がＯＮされた時点から読み出し回数ＲＣがカウントされる。
【００４０】
ポインタ記憶部６は、情報処理システム１０の電源がＯＮされたとき、ポインタＳＰを初期位置にセットする。初期位置は予め決められたルールによって決定される。たとえば、初期位置としてブロック内の先頭ページが設定される。ポインタ記憶部６は、情報処理システム１０の電源がＯＦＦされたとき、その時点で保持しているポインタＳＰを保持する必要はない。情報処理システム１０の電源がＯＮされるたびにポインタＳＰは初期位置に設定される。
【００４１】
エラー検出訂正回路７（以下、ＥＣＣ回路７と呼ぶ。）は、メモリ４に誤ったデータが記録されていることを検出するとともに、誤ったデータを訂正する回路である。
【００４２】
次に、本実施の形態に係る制御内容について説明する。図３は、メモリコントローラ３あるいはＥＣＣ回路７において実行される制御内容を示すフローチャートである。
【００４３】
図３のフローチャートを参照して説明するように、本実施の形態においては、ホストシステム１からメモリ４に対する読み出し命令が与えられたとき、メモリ４に対する読み出し処理を実行する前に検査対象ページを特定するための処理を実行する。さらに、本実施の形態においては、メモリ４に対する読み出し処理を実行する前に検査対象ページに対するエラー検出処理を実行する。
【００４４】
メモリコントローラ３は、まず、アクセスされる可能性のあるブロック候補を特定する（ステップＳ１）。ブロック候補を特定するために、メモリコントローラ３は、ホストシステム１から与えられた読み出し命令から読み出しアドレスを取得する。メモリコントローラ３は、取得した読み出しアドレスからＮＡＮＤフラッシュであるメモリ４の読み出しページアドレスを生成する。
【００４５】
本実施の形態のメモリコントローラ３およびメモリ４は、１つの読み出し命令に対して複数のページを連続的に読み出すことが可能である。ホストシステム１は、読み出しアドレスをメモリコントローラ３に与えるとともに読み出し有効信号（イネーブル信号）を送出する。メモリコントローラ３は、読み出し有効信号を入力している間は、読み出しページのアドレスを１ページ分インクリメントすることにより、連続的に複数のページの読み出し処理を実行する。たとえば、メモリコントローラ３は、読み出しページのアドレスを１バイトずつインクリメントすることにより、連続的に複数のページを読み出す。
【００４６】
ただし、メモリコントローラ３には、連続的に読み出すことのできる最大ページ数が予め設定されている。したがって、メモリコントローラ３は、ホストシステム１から与えられた読み出し命令に含まれる読み出しアドレスと、予め保持している最大ページ数とから、この読み出し処理によってアクセスされる可能性のあるブロックを特定することができる。メモリコントローラ３は、アクセスされる可能性のある全てのブロックを候補ブロックとして特定する。
【００４７】
次に、メモリコントローラ３は、リードカウンタ５にアクセスし、各候補ブロックの読み出し回数ＲＣを取得する。メモリコントローラ３は、候補ブロックの中で最も読み出し回数ＲＣの多いブロックを検査対象ブロックとして特定する（ステップＳ２）。ただし、本実施の形態においては、読み出し回数の閾値ＲＣｔｈが設定されている。候補ブロックの中で最も読み出し回数ＲＣの多いブロックを特定するが、その読み出し回数ＲＣがＲＣｔｈに満たないときは、検査対象ブロックとして選択されない。この場合には図３のフローチャートを終了する。
【００４８】
次に、メモリコントローラ３は、ポインタ記憶部６にアクセスし、検査対象ブロックとして特定されたブロックのポインタＳＰを取得する。メモリコントローラ３は、検査対象ブロックに含まれるページの中でポインタＳＰによって指し示されたページを検査対象ページとして特定する（ステップＳ３）。
【００４９】
図４は、候補ブロック、検査対象ブロックおよび検査対象ページの特定方法を示す図である。図において、ホストシステム１によって指定された読み出しアドレスはブロックＢＬ＃５内のＰＡ＃１５に対応しているものとする。読み出し最大ページ数に基づいてアクセスされる可能性のあるブロックはＢＬ＃５〜＃７と特定されたものとする。つまり、ブロックＢＬ＃５〜＃７が候補ブロックである。ブロックＢＬ＃５、＃６および＃７の読み出し回数ＲＣは図に示すように、それぞれ５０、７０および１００である。したがって、検査対象ブロックはＢＬ＃７と特定される。読み出し回数１００は、閾値ＲＣｔｈを超えているものとする。そして、ブロックＢＬ＃７について現在保持されているポインタＳＰは、図に示すようにＳＰ＝２３である。そこで、検査対象ページとしてブロックＢＬ＃７内のページＰＡ＃２３が特定される。
【００５０】
メモリコントローラ３は、検査対象ページを読み出し、検査対象ページのデータとシンドロームをＥＣＣ回路７に与える。ＥＣＣ回路７において、検査対象ページに対するエラー検出処理が実行される（ステップＳ４）。このとき、検査対象ページに対する読み出し処理が行われるため、検査対象ブロックの読み出し回数ＲＣが１インクリメントされる（ステップＳ５）。
【００５１】
ＥＣＣ回路７においてエラー検出処理が行われた結果、検査対象ページにエラーが発生していた場合（ステップＳ６でＹＥＳ）、メモリコントローラ３は、検査対象ページとして特定されたページが属するブロックのアドレスをメモリコントローラ３が備える一時記憶部３１に格納する（ステップＳ７）。メモリコントローラ３は、後で説明するが、別のタイミングで一時記憶部３１に格納されているアドレスを読み出し、当該アドレスに対応するブロックのデータに対するエラー訂正処理を行う。メモリコントローラ３は、エラー訂正したデータを、物理的に異なるブロックに書きこむことによりメモリ４に対するリフレッシュ処理を実行する。なお、一時記憶部３１に検査対象ページのアドレスを格納しておき、エラー訂正処理するときにブロックアドレスに置き換えてもよい。
【００５２】
ステップＳ７において一時記憶部３１にアドレスを格納した後、あるいは、ステップＳ６でＮＯと判定された場合、ステップＳ８に移行する。ステップＳ８において、メモリコントローラ３は、検査対象ページのポインタＳＰが検査最終アドレスを示しているか否かを判定する。
【００５３】
検査最終アドレスについて説明する。前述したように、ポインタ記憶部６は、情報処理システム１０の電源がＯＮになったとき、各ブロックのポインタＳＰを初期位置に設定する。もし、初期位置がブロック内の先頭ページアドレスであれば、検査最終アドレスは、ブロック内の最終ページアドレスである。もし、初期位置がブロック内の先頭ページアドレスではない他の位置のアドレスである場合、検査最終アドレスは、初期位置のページアドレスよりも１つ前のページのアドレスである。いずれにしても、ポインタＳＰが初期位置からスタートしてブロック内の全てのページを網羅したとき、最後に指定されたアドレスが検査最終アドレスである。
【００５４】
検査対象ページのポインタＳＰが検査最終アドレスを示していないとき（ステップＳ８でＮＯ）、メモリコントローラ３は、ポインタＳＰを１ページ分インクリメントする（ステップＳ９）。このように、ポインタＳＰをインクリメントすることにより、次々と異なるページが検査対象ページとして特定されることになる。ここで、ポインタＳＰがブロック内の最終ページアドレスである場合には、ステップＳ９においてポインタＳＰはブロック内の先頭ページアドレスに戻される。
【００５５】
検査対象ページのポインタＳＰが検査最終アドレスを示しているとき（ステップＳ８でＹＥＳ）、メモリコントローラ３は、検査対象ブロックの読み出し回数ＲＣを０にリセットする（ステップＳ１０）。
【００５６】
検査対象ページのポインタＳＰが検査最終アドレスに到達したということは、検査対象ブロック内の全てのページが検査対象ページに指定されたことになる。これにより、検査対象ブロックについては全てのページのエラー検査が完了したことになる。したがって、読み出し回数ＲＣを０にリセットすることで、次に検査対象ブロックとして特定されるための優先度を低下させるのである。上述したステップＳ２において、検査対象ブロックを特定するときには、読み出し回数ＲＣと閾値ＲＣｔｈとを比較した。ステップＳ１０において読み出し回数ＲＣが０にリセットされることにより、読み出し回数ＲＣが次に閾値ＲＣｔｈを超えるまでは検査対象ブロックとして特定されない。これにより、読み出し回数の多いブロックが過剰に検査対象として特定されることを防止している。なお、電源ＯＮがされた後は、全ブロックの読み出し回数ＲＣを閾値ＲＣｔｈにセットするようにしてもよい。これにより、電源ＯＮがされた直後は、全てのブロックが検査対象となり得る状態とし、電源ＯＮの後、長い時間検査対象から除外されることを回避することができる。
【００５７】
続いて、メモリコントローラ３は、検査対象ブロックのポインタＳＰを初期位置にリセットする（ステップＳ１１）。もし、初期位置がブロック内の先頭ページアドレスであれば、ポインタＳＰは再びブロック内の先頭ページアドレスに設定される。もし、初期位置がブロック内の先頭ページアドレスではない他の位置のアドレスである場合、ポインタＳＰは再び当該アドレスに設定される。
【００５８】
ステップＳ９あるいはステップＳ１１を終了した後、メモリコントローラ３は、ホストシステム１からの読み出し要求に対する読み出し処理を実行する（ステップＳ１２）。
【００５９】
以上の処理により、一時記憶部３１にはエラーが検出されたページが属するブロックのアドレスが格納される。メモリコントローラ３は、別のタイミングで当該ブロックに対するエラー訂正処理を実行する。本実施の形態においては、メモリコントローラ３は、当該ブロック内の全てのページを読み出し、エラー検出および訂正処理を実行し、エラーを含まない全てのページを物理的に異なる別のブロックに書きこむ。このとき、検査対象ブロックに対する全ページの読み出し処理が行われるため、検査対象ブロックの読み出し回数ＲＣが全ページ分インクリメントされる。別の方法として、メモリコントローラ３は、当該ブロック内の全てのページを読み出し、エラー検出および訂正処理を実行し、エラーを含まない全てのページを一旦、仮ブロックに書きこむ。さらにメモリコントローラ３は、仮ブロック内の全てのページを読み出し、エラー検出および訂正処理を実行し、エラーを含まない全てのページを再び、元のブロックに書きこむ。このとき、検査対象ブロックに対する全ページの読み出し処理が２回行われるため、検査対象ブロックの読み出し回数ＲＣが全ページ２回分インクリメントされる。また、ステップＳ１２においては、ページデータの通常の読み出しが行われるが、この場合にも読み出しページを含むブロックの読み出し回数ＲＣが１インクリメントされる。
【００６０】
このように、本実施の形態の情報処理システム１０においては、ホストシステム１から読み出し要求が発生したときに、アクセスされる可能性のあるブロックの中で読み出し回数ＲＣの最も多いブロックが検査対象ブロックとして特定される。これにより、アクセスされる頻度の高いブロックに検査対象を絞り込むことができ、無駄な検査処理を排除することができる。たとえば、メモリ４にアプリケーションプログラムが格納され、メモリ４がＲＯＭのように使用されている場合、アプリケーションの実行により同じ領域がアクセスされる可能性が高い。このような場合に本実施の形態においては、アクセスされる領域に関連して、エラーが発生する可能性が高い領域に重点をおいてエラーチェックを行うことができる。
【００６１】
従来、メモリ内のページをランダムにエラーチェックすることや、メモリ内の全てのページをエラーチェックする方法などが採用されていた。これらの方法では、不必要な領域に対してエラー検出を実行する一方、エラー発生確率の高い領域に対するエラー検査が不十分であった。これに対して本実施の形態においては、まずアクセスされる可能性のあるブロックに検査対象を絞り込むことでアクセスされる可能性の高い領域に重点をおいた検査が行われるとともに、さらに、読み出し回数の多いブロックが重点的に検査対象となるので、効率のよいエラー検出が行われる。
【００６２】
また、本実施の形態においては、読み出しアクセスの可能性のあるブロックの中から１ページだけが検査対象として特定され、１ページだけがエラー検出の対象となる。したがって、エラー検出処理によりメモリ４に与える負荷が大きくなることはない。
【００６３】
また、本実施の形態においては、ブロックごとの読み出し回数ＲＣおよびブロックごとのポインタＳＰは、情報処理システム１０の電源がＯＮされている間だけ保持される。つまり、情報処理システム１０の電源がＯＦＦされている間、読み出し回数ＲＣおよびポインタＳＰの情報を保持しておく必要はない。これにより、読み出し回数ＲＣおよびポインタＳＰの情報を保持しておくための不揮発性メモリを用意する必要はない。情報処理システム１０が意図せず電源ＯＦＦされた場合など、障害が発生した場合にも、検査対象を特定するための処理に影響がない。また、読み出し回数ＲＣやポインタＳＰを不揮発性メモリに格納した場合、意図しない電源ＯＦＦなどが発生した場合の対応回路が必要となる。本実施の形態においてはこのような対障害用の回路も不要であり、回路規模を小さくすることができる。
【００６４】
本実施の形態において、読み出し回数ＲＣを不揮発性メモリに格納する必要がない理由は以下のとおりである。本実施の形態において、読み出し回数ＲＣが検査対象ブロックを特定するために利用されるが、ブロック間で、どのブロックの読み出し回数ＲＣが多いかを相対的に比較できればよい。読み出し回数ＲＣの値そのものを厳密に管理する必要はない。電源がＯＮされた後、読み出し回数ＲＣが他のブロックよりも相対的に多いブロックを特定すれば十分だからである。
【００６５】
本実施の形態において、ポインタＳＰを不揮発性メモリに格納する必要がない理由は以下のとおりである。メモリ４内の同じ領域が繰り返し読み出されたような場合を考える。この場合、電源がＯＮされた後、電源がＯＦＦされるまでの間に、繰り返し読み出される領域については、ブロック内の全ページが検査対象となる可能性が高い。したがって、再び電源がＯＮされたときには、検査対象は初期位置に戻すことで問題はない。また、リードディスターブ現象は、ブロック内の全ページに万遍なく負荷のかかるストレスである。たとえば、電源がＯＮされるごとにポインタＳＰの初期位置を前回の初期位置から移動させることで、同じページだけが繰り返し検査対象となることを防ぐことができる。
【００６６】
｛その他の実施の形態｝
上記の実施の形態においては、ホストシステム１からメモリ４に対する読み出し命令が与えられたとき、メモリ４に対する読み出し処理を実行する前に検査対象ページを特定し、検査対象ページに対するエラー検出処理を実行した。別の実施の形態として、メモリ４に対する読み出し処理を実行した後、所定のタイミングで検査対象ページを特定する処理および検査対象ページに対するエラー検出処理を実行してもよい。たとえば、メモリ４に対する読み出し処理を実行した後、ホストシステム１がメモリ４にアクセスしていないタイミングで検査対象ページの特定およびエラー検出を行ってもよい。この場合、検査対象を特定する処理を行うときには、既にアクセスされた領域が確定しているので、アクセスされたブロックの中で読み出し回数ＲＣの最も多いブロックが検査対象ブロックとして特定される。これにより、アクセスされる頻度の高いブロックに検査対象を絞り込むことができ、無駄な検査処理を排除することができる。また、アクセスされたブロック内に関して、エラーが発生する可能性が高い領域に重点をおいてエラーチェックを行うことができる。
【００６７】
メモリコントローラ３は、上述したように、別のタイミングで一時記憶部３１に格納されているアドレスに対するリフレッシュ処理を行う。つまり、メモリコントローラ３は、一時記憶部３１に格納されているアドレスに基づき検査対象ブロック内の全ページを読み出し、エラー訂正処理を行う。メモリコントローラ３は、検査対象ブロックに対するエラー訂正処理を実行した後、訂正後のデータをメモリ４に書き戻す処理を実行する。ここで、ＮＡＮＤフラッシュメモリはブロック単位でのみ消去可能であるため、検査対象ページのデータを書き戻すときには、検査対象ブロックのデータが一旦消去され、ブロック内の全ページのデータが再書き込みされる。したがって、検査対象ページのみならず、検査対象ページを含むブロック全体がリフレッシュされる。したがって、検査対象ブロックに対するエラー訂正が行われた後は、検査対象ページを含むブロックの読み出し回数ＲＣは０にリセットされる。また、検査対象ブロックに対するエラー訂正が行われた後は、検査対象ブロックのポインタＳＰを初期位置にリセットしてもよい。
【００６８】
上記の実施の形態においては、ブロック内のページに対する読み出しが行われたときには、ブロックに対する読み出し回数ＲＣを１インクリメントした。ブロック内の先頭あるいは最終ページが読み出されたときには、読み出し回数ＲＣを２あるいは２以上インクリメントするようにしてもよい。ＮＡＮＤフラッシュメモリの構造上、ブロック内の両端のページにはリードディスターブの発生可能性が高いことが分かっているからである。
【００６９】
上記実施の形態においては、アクセスされる可能性のあるメモリ領域が複数のブロックに跨るとき、読み出し回数ＲＣの最も多いブロックを検査対象として特定した。つまり、候補ブロックの中で最も読み出し回数ＲＣの多いブロックを検査対象とした。別の実施の形態として、候補ブロック全てを検査対象としてもよい。この場合、各検査対象ブロックのポインタを参照し、各検査対象ブロックに対して検査対象ページが特定される。
【００７０】
上記実施の形態においては、アクセスされる可能性のあるメモリ領域を候補ブロックとして特定し、候補ブロックの中から検査対象ページを特定した。別の実施の形態として、メモリ４に対する通常の読み出し処理を完了した後に検査対象を特定する場合には、実際に読み出し対象となったブロックの中から検査対象ブロックを特定してもよい。実際に読み出された領域が複数のブロックに跨る場合には、両端のブロックのうち読み出し回数ＲＣの大きい方のブロックを検査対象として特定してもよいし、両端のブロックをいずれも検査対象として特定してもよい。両端のブロックに挟まれたブロックは必ず通常の読み出し処理が実行されるので、必ずエラー検査が行われるからである。
【００７１】
上記実施の形態においては、アクセスされる可能性のあるメモリ領域が複数のブロックに跨るとき、候補ブロックの中で読み出し回数ＲＣの最も多いブロックを検査対象として特定した。別の実施の形態として、候補ブロックの中でポインタの値が最も小さいブロックを検査対象としてもよい。ここでポインタの値が小さいとは、初期位置からのポインタの移動が最も少ないことを示す。この方法によれば、検査対象が一部のブロックに偏りすぎることを防止できる。
【００７２】
上記実施の形態においては、ブロックごとに読み出し回数ＲＣおよびポインタＳＰを管理した。別の実施の形態として、複数のブロックに対して１つの読み出し回数ＲＣおよびポインタＳＰを管理するようにしてもよい。この場合、ポインタＳＰは複数のブロックに跨って移動するよう管理される。
【００７３】
上記実施の形態においては、ページ単位でアドレスをインクリメントさせてポインタＳＰを移動させた。別の実施の形態として、ページ単位でアドレスをデクリメントさせてポインタＳＰを移動させてもよい。
【００７４】
上記実施の形態においては、検査対象ブロックの中のポインタＳＰが指し示すページを検査対象として特定した。別の実施の形態として、検査対象ページが、実際にアクセスされるブロックに含まれる場合、特定された検査対象ページを検査対象から除外してもよい。検査対象ページについては検査対象としなくても、読み出しデータとして通常に読み出されるからである。通常の読み出し処理においてもエラーチェックが行われ、エラーが発生している場合には、アドレスを一時記憶部３１に格納すればよい。ただし、この方法を採用できるのは、実際にアクセスされたブロックが特定できる場合である。つまり、データの読み出し処理の後に検査対象ページを特定する場合のみこの方法を採用することができる。また、検査対象ページを検査対象から除外した場合、ポインタはインクリメントすればよい。
【００７５】
上記実施の形態においては、検査対象ブロックの中のポインタが指し示すページを検査対象として特定した。別の実施の形態として、検査対象ページが、アクセスされるブロックに含まれる場合には、アクセスされないブロックから検査対象ページを選択してもよい。検査対象ページについては検査対象としなくても、読み出しデータとして通常に読み出されるからである。ただし、この方法を採用できるのは、実際にアクセスされたブロックが特定できる場合である。つまり、データの読み出し処理の後に検査対象ページを特定する場合のみこの方法を採用することができる。
【００７６】
上記実施の形態においては、ホストシステム１からの読み出し要求が発生するたびに検査対象ブロックを特定した。別の実施の形態として、ホストシステム１からの１つの読み出し要求に対して検査対象ブロックを特定した後は、その検査対象ブロックの全てのページが検査されるまでは検査対象ブロックを固定してもよい。この場合、ホストシステム１からの読み出し要求が発生するたびにポインタＳＰのみを移動させればよい。
【００７７】
上記実施の形態においては、情報処理システム１０の電源がＯＮされたとき、各ブロックのポインタは初期位置にリセットされることを説明した。初期位置として各ブロック内の先頭ページアドレスを利用してもよい。あるいは、初期位置としてブロック内のページアドレスをランダムに選択してもよい。
【００７８】
上記実施の形態においては、ホストシステム１からの読み出し要求が発生したとき、検査対象ブロックの中から単一の検査対象ページを特定した。別の実施の形態として、検査対象ブロック内の全てのページを検査対象としてもよい。
【００７９】
上記実施の形態においては、検査対象ページにエラーが検出された場合、検査対象ページが属するブロックのアドレスが一時記憶部３１に格納された。これは検査対象ページを含むブロックがリフレッシュ対象となることを示している。この場合、検査対象ページを含むブロックは、リフレッシュが完了するまでは検査対象から除外してもよい。このブロックについては、既にリフレッシュされることが確定しているからである。
【００８０】
上記実施の形態においては、リードカウンタ５およびポインタ記憶部６として、揮発性の記憶手段を利用した。別の実施の形態として、リードカウンタ５およびポインタ記憶部６として不揮発性のメモリを使用してもよい。
【符号の説明】
【００８１】
１    ホストシステム
２    メモリモジュール
３    メモリコントローラ
４    メモリ
５    リードカウンタ
６    ポインタ記憶部
７    ＥＣＣ回路
【図１】
0005815388.tif 000002
【図２】
0005815388.tif 000003
【図３】
0005815388.tif 000004
【図４】
0005815388.tif 000005