(57)【要約】【課題】一つの実施形態は、不揮発性メモリのリード動作の信頼性を適切に確保できるメモリシステム、及びメモリシステムの制御方法を提供することを目的とする。【解決手段】一つの実施形態によれば、不揮発性メモリとコントローラとを有するメモリシステムが提供される。コントローラは、複数のリード方式から１つのリード方式を選択する。複数のリード方式は、不揮発性メモリのリード動作に要する時間が互いに異なるリード方式である。コントローラは、選択された１つのリード方式に従った第１のリードコマンドを不揮発性メモリに発行する。【選択図】図４
2020149123.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性メモリと、
前記不揮発性メモリのリード動作に要する時間が互いに異なる複数のリード方式から１つのリード方式を選択し、選択された１つのリード方式に従った第１のリードコマンドを前記不揮発性メモリに発行するコントローラと、
を備えたメモリシステム。
【請求項２】
前記コントローラは、第２のリードコマンドを前記不揮発性メモリに発行し、前記第２のリードコマンドで前記不揮発性メモリから読み出されたデータの誤り訂正に関する情報に応じて、前記複数のリード方式から１つのリード方式を選択する
請求項１に記載のメモリシステム。
【請求項３】
前記コントローラは、前記不揮発性メモリにおける所定の領域へのライト動作が完了してから所定時間以内に、前記所定の領域の指定を含む前記第２のリードコマンドを前記不揮発性メモリに発行する
請求項２に記載のメモリシステム。
【請求項４】
前記コントローラは、所定の周期ごとに、又は前記不揮発性メモリがアイドル状態である期間に、前記第２のリードコマンドを前記不揮発性メモリに発行する
請求項２に記載のメモリシステム。
【請求項５】
前記コントローラは、前記不揮発性メモリにおける所定の領域へのライト動作が完了してから、前記ライト動作に伴うアドレス変換情報の更新を行う前に、前記第２のリードコマンドを前記不揮発性メモリに発行する
請求項２に記載のメモリシステム。
【請求項６】
前記複数のリード方式は、
前記不揮発性メモリのリード動作に第１の時間を要する第１のリード方式と、
前記不揮発性メモリのリード動作に前記第１の時間より長い第２の時間を要する第２のリード方式と、
を含み、
前記コントローラは、前記読み出されたデータの誤り訂正に関する情報が第１の閾値より高い信頼性を示している場合、前記複数のリード方式から前記第１のリード方式を選択し、前記読み出されたデータの誤り訂正に関する情報が前記第１の閾値より低い信頼性を示している場合、前記複数のリード方式から前記第２のリード方式を選択する
請求項２に記載のメモリシステム。
【請求項７】
前記複数のリード方式は、前記不揮発性メモリのリード動作に前記第２の時間より長い第３の時間を要する第３のリード方式をさらに含み、
前記コントローラは、前記読み出されたデータの誤り訂正に関する情報が前記第１の閾値と前記第１の閾値より低い第２の閾値との間の信頼性を示している場合、前記複数のリード方式から前記第２のリード方式を選択し、前記読み出されたデータの誤り訂正に関する情報が前記第２の閾値より低い信頼性を示している場合、前記複数のリード方式から前記第３のリード方式を選択する
請求項６に記載のメモリシステム。
【請求項８】
前記誤り訂正に関する情報は、前記読み出されたデータの誤り訂正で検出されたビットエラー率と前記不揮発性メモリにおけるリード動作のリトライ率との少なくとも一方を含む
請求項２から７のいずれか１項に記載のメモリシステム。
【請求項９】
前記コントローラは、ホストに接続可能であり、前記第２のリードコマンドを、メモリセルの疲弊状態を検査するためのリード指示と前記ホストから受けたホストリードコマンドに応じたリード指示とを兼ねたコマンドとして、前記不揮発性メモリに発行する
請求項２から８のいずれか１項に記載のメモリシステム。
【請求項１０】
前記コントローラは、前記第２のリードコマンドを、メモリセルの疲弊状態を検査するためのリード指示と内部処理に応じたリード指示とを兼ねたコマンドとして、前記不揮発性メモリに発行する
請求項２から８のいずれか１項に記載のメモリシステム。
【請求項１１】
前記内部処理は、
ライト処理中のベリファイ動作で検出されなかった不良を検出する検査と、
メモリセルのデータ保持状態の検査と、
を含む
請求項１０に記載のメモリシステム。
【請求項１２】
不揮発性メモリのリード動作に要する時間が互いに異なる複数のリード方式から１つのリード方式を選択することと、
前記選択された１つのリード方式に従った第１のリードコマンドを前記不揮発性メモリに発行することと、
を含むメモリシステムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本実施形態は、メモリシステム、及びメモリシステムの制御方法に関する。
【背景技術】
【０００２】
ＮＡＮＤ型フラッシュメモリなどの不揮発性メモリを有するメモリシステムでは、不揮発性メモリにおけるメモリセルへのデータの書き込み処理／消去処理は、チャネル領域及びコントロールゲート間に高電圧を印加することにより、電荷蓄積膜に電子を注入／放出させる。メモリセルへのデータの書き込み処理／消去処理を多数回行うと、電荷蓄積膜周りの絶縁膜が劣化し得る。このとき、不揮発性メモリのリード動作の信頼性を適切に確保することが望まれる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許出願公開第２０１２／０１６６９１３号明細書
【特許文献２】米国特許出願公開第２０１２／０１８２８１３号明細書
【特許文献３】特開２０１０−５３９６３１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
一つの実施形態は、不揮発性メモリのリード動作の信頼性を適切に確保できるメモリシステム、及びメモリシステムの制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００５】
一つの実施形態によれば、不揮発性メモリとコントローラとを有するメモリシステムが提供される。コントローラは、複数のリード方式から１つのリード方式を選択する。複数のリード方式は、不揮発性メモリのリード動作に要する時間が互いに異なるリード方式である。コントローラは、選択された１つのリード方式に従った第１のリードコマンドを不揮発性メモリに発行する。
【図面の簡単な説明】
【０００６】
【図１】図１は、実施形態に係るメモリシステムの構成を示す図である。
【図２】図２は、実施形態における不揮発性メモリのデータの管理単位を示す図である。
【図３】図３は、実施形態における物理ブロックの構成を示す回路図である。
【図４】図４は、実施形態に係るメモリシステムの概略動作を示すフローチャートである。
【図５】図５は、実施形態における複数のリード方式の特性を示す図である。
【図６】図６は、実施形態に係るメモリシステムの詳細動作（検査リード処理の実装例）を示すフローチャートである。
【図７】図７は、実施形態に係るメモリシステムの詳細動作（検査リード処理の実装例）を示すデータフロー図である。
【図８】図８は、実施形態における疲弊情報のデータ構造を示す図である。
【図９】図９は、実施形態に係るメモリシステムの詳細動作（リード方式の選択の実装例）を示すフローチャートである。
【図１０】図１０は、実施形態に係るメモリシステムの詳細動作（リード方式の選択の実装例）を示すデータフロー図である。
【図１１】図１１は、実施形態の変形例に係るメモリシステムの詳細動作（検査リード処理の他の実装例）を示すフローチャートである。
【図１２】図１２は、実施形態の変形例に係るメモリシステムの詳細動作（検査リード処理の他の実装例）を示すデータフロー図である。
【発明を実施するための形態】
【０００７】
以下に添付図面を参照して、実施形態にかかるメモリシステムを詳細に説明する。なお、この実施形態により本発明が限定されるものではない。
【０００８】
（実施形態）
実施形態にかかるメモリシステムは、ＮＡＮＤ型フラッシュメモリなどの不揮発性メモリを有する。不揮発性メモリは、複数のメモリセルを有する。このメモリシステムでは、不揮発性メモリにおけるメモリセルへのデータの書き込み処理／消去処理は、チャネル領域及びコントロールゲート間に高電圧を印加することにより、電荷蓄積膜に電子を注入／放出させる。メモリセルへのデータの書き込み処理／消去処理を多数回行うと、電荷蓄積膜周りの絶縁膜が劣化し得る。このとき、不揮発性メモリのリード動作の信頼性を適切に確保することが望まれる。
【０００９】
リード動作の方式には、リード動作に要する時間が互いに異なる複数のリード方式がある。複数のリード方式では、そのパフォーマンスと信頼性との間にトレードオフの関係がある。例えば、複数のリード方式では、リード動作に要するリード時間ｔＲｅａｄが長いリード方式ほど、ビットエラーレートＢＥＲが低くなる傾向にある。このため、現在の疲弊状態に応じて要求される信頼性に対して、過度に信頼性の高いリード方式を選択すると、不必要なパフォーマンスの低下（例えば、リード時間ｔＲｅａｄの長時間化）をもたらし、パフォーマンスの観点からリード性能が低下する可能性がある。また、パフォーマンスを過度に高める（例えば、リード時間ｔＲｅａｄの短いリード方式を選択する）と、現在の疲弊状態に応じて要求される信頼性より信頼性の低いリード方式を選択することになり、リード動作の信頼性が低下し、信頼性の観点からリード性能が低下する可能性がある。
【００１０】
このとき、不揮発性メモリにおける複数の管理単位のそれぞれについて、書き込み／消去の累積回数に応じて各メモリセルの疲弊状態を大雑把に推測して、複数のリード方式を使い分けることが考えられる。この場合、推測結果が実際の各メモリセルの疲弊状態と乖離している場合、適切なリード方式を選択することが困難になり、リード動作の信頼性を適切に確保することが困難になる可能性がある。
【００１１】
そこで、本実施形態では、メモリシステムにおいて、コントローラが、検査のためのリードコマンドを不揮発性メモリに実行させ、その結果に応じてリード方式を選択し、本来のリード処理のためのリードコマンドをその選択されたリード方式で不揮発性メモリに発行することで、リード動作の信頼性を適切に確保することを目指す。
【００１２】
具体的には、コントローラは、本来のリード処理を行う前に、検査のためのリードコマンドとして、疲弊状態を検査するための検査リードコマンドを不揮発性メモリに発行する。検査リードコマンドは、不揮発性メモリにおける本来のリード処理が行われる可能性のある領域に対して行われる。
【００１３】
このとき、不揮発性メモリにおける各メモリセルは、主として、書き込み回数に関連したストレスと書き込み後の経過時間に関連したストレスとにより、その疲弊状態が変化し得る。ブロックごとに検査の条件を揃えるために、コントローラは、書き込みが完了した所定の単位（例えば、ワードライン単位、ブロック単位）へのライト動作が完了してから所定時間以内（例えば、数十分以内〜数時間以内など）に、検査リードコマンドを発行する。
【００１４】
これにより、実質的に、書き込み後の経過時間に関連したストレスを排除して、書き込み回数に関連したストレスによる検査を行うことができ、不揮発性メモリにおけるデータの消去単位である物理ブロック（ブロック）ごとに効果的に検査を行うことができる。すなわち、ブロックごとに、検査の条件を揃えることができ、検査リードコマンドによる代表のメモリセルの検査結果を他のメモリセルに使い回すことができるため、検査リードコマンドの発生頻度を抑えつつ効果的に検査を行うことができる。
【００１５】
また、書き込み回数に応じたストレスの受け方がブロックごとにばらついている場合に、検査リードコマンドを発行してそのリードデータの信頼性を示す特性（例えば、リトライ率、不良ビット数など）を見ることで、信頼性を示す特性を推測する場合に比べて、より正確にメモリセルの疲弊状態を把握できる。これにより、メモリセルの実際の疲弊状態に応じたより適切なリード方式を選択することができ、パフォーマンス向上と信頼性向上とを容易に両立でき、パフォーマンス及び信頼性の両方の観点から総合的にリード性能を向上できる。すなわち、リード動作の信頼性を適切に確保できる。
【００１６】
なお、書き込み回数に関連したストレスは、例えば、ＰＤ（Ｐｒｏｇｒａｍ  Ｄｉｓｔｕｒｂ）を含む。
【００１７】
ＰＤとは、ライト処理時に発生するストレスを示す情報であり、例えば、該当の物理アドレスで指定されるページを含むブロックに対するデータの書き込みが完了しているか否かを示す情報を含む。ブロックに対する書込みが途中である場合、当該ブロックの例えば最終書込みページ付近からのデータの読出しの信頼性が低下する場合がある。なお、ＰＤには、リード対象のページを含むブロック全体の書込み状態に代えて、リード対象のワードラインに隣接する１つ以上のワードラインの書込み状態が用いられてもよい。
【００１８】
また、書き込み後の経過時間に関連したストレスは、例えば、ＤＲ（Ｄａｔａ  Ｒｅｔｅｎｔｉｏｎ）、ＲＤ（Ｒｅａｄ  Ｄｉｓｔｕｒｂ）、ＴｅｍｐＸ（Ｔｅｍｐｅｒａｔｕｒｅ  Ｃｒｏｓｓｏｖｅｒ）を含む。
【００１９】
ＤＲとは、データ保持特性を示す情報であり、例えば、該当の物理アドレスに対してデータの書込みを実行してからデータを保持している経過時間を含む。なお、経過時間は、実時間であってもよいし、温度やメモリセルの疲弊度を考慮して実時間を変換することで得られた値であってもよい。たとえば、放置状態における温度が高いほうが正味の経過時間（放置によるストレス量を考慮して実時間から変換された経過時間）は長く、また、メモリセルの疲弊度が大きいほうが正味の経過時間は長い（すなわち、放置によるストレス量が大きい）。
【００２０】
ＲＤとは、リード処理時に発生するストレスを示す情報であり、例えば、該当の物理アドレスで指定されるページを含むブロックに対して該当データを書き込んだ後に実行された読出し回数を含む。
【００２１】
ＴｅｍｐＸとは、温度ストレスを示す情報であり、例えば、読出し対象のデータを書き込んだ際の温度と後述の温度センサ２５で検出された現在又は最新の温度との差（温度交差）を示す情報を含む。
【００２２】
メモリシステム１は、図１に示すように構成され得る。図１は、メモリシステム１の構成を示す図である。
【００２３】
メモリシステム１は、不揮発性メモリ２０、メモリコントローラ１０、及びバッファメモリ１９を有する。メモリシステム１は、ホスト装置３０と接続可能であり、図１ではホスト装置３０と接続された状態が示されている。ホスト装置３０は、例えば、パーソナルコンピュータ、サーバ装置、携帯端末などの電子機器、デジタルスチルカメラ等であってよい。
【００２４】
メモリシステム１は、いわゆるＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）や、メモリコントローラ１０と不揮発性メモリ２０とが１つのパッケージとして構成されるメモリカード等、不揮発性メモリ２０を備える種々のメモリシステムであってよい。
【００２５】
不揮発性メモリ２０は、データを不揮発に記憶する不揮発性メモリであり、例えば、ＮＡＮＤ型フラッシュメモリ（以下、単にＮＡＮＤメモリという）である。以下の説明では、不揮発性メモリ２０としてＮＡＮＤメモリが用いられた場合を例示するが、不揮発性メモリ２０として３次元構造フラッシュメモリ、ＲｅＲＡＭ（Ｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等のＮＡＮＤメモリ以外の記憶媒体を用いることも可能である。また、不揮発性メモリ２０が半導体メモリであることは必須ではなく、半導体メモリ以外の種々の記憶媒体に対して本実施形態を適用することも可能である。
【００２６】
メモリコントローラ１０は、例えばＳｏＣ（Ｓｙｓｔｅｍ−ｏｎ−ａ−Ｃｈｉｐ）として構成される半導体集積回路である。以下で説明するメモリコントローラ１０の各構成要素の動作の一部又は全部は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）がファームウエアを実行することによって実現されてもよいし、ハードウエアで実現されてもよい。
【００２７】
メモリコントローラ１０は、メモリバス１８によって不揮発性メモリ２０に接続され、ホストバス３１によってホスト装置３０に接続される。メモリコントローラ１０は、ホスト装置３０からのホストライトコマンドに従って不揮発性メモリ２０へのライト処理を制御する。また、ホスト装置３０からのホストリードコマンドに従って不揮発性メモリ２０からのリード処理を制御する。ホストバス３１の準拠する規格としては、たとえば、ＳＡＴＡ（Ｓｅｒｉａｌ  Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ）、ＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）、ＰＣＩｅ（登録商標）（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  ｅｘｐｒｅｓｓ）（ＮＶＭ  ｅｘｐｒｅｓｓ（登録商標）を含む）など、任意の規格が採用可能である。
【００２８】
メモリバス１８は、メモリコントローラ１０と不揮発性メモリ２０とを結ぶメモリインタフェースに従った信号の送受信を行う。メモリインタフェースがいわゆるＮＡＮＤインタフェースである場合、この信号の具体例には、チップイネーブル信号ＣＥｎ、コマンドラッチイネーブル信号ＣＬＥ、アドレスラッチイネーブル信号ＡＬＥ、ライトイネーブル信号ＷＥｎ、リードイネーブル信号ＲＥｎ、レディ・ビジー信号ＲＢｎ、入出力信号Ｉ／Ｏ等が含まれ得る。
【００２９】
信号ＣＥｎは、不揮発性メモリ２０をイネーブルにするための信号である。信号ＣＬＥは、不揮発性メモリ２０への入力信号Ｉ／Ｏがコマンドであることを不揮発性メモリ２０に通知する信号である。信号ＡＬＥは、不揮発性メモリ２０への入力信号Ｉ／Ｏがアドレスであることを不揮発性メモリ２０に通知する信号である。信号ＷＥｎは入力信号Ｉ／Ｏを不揮発性メモリ２０に取り込ませるための信号である。信号ＲＥｎは、不揮発性メモリ２０から出力信号Ｉ／Ｏを読み出すための信号である。レディ・ビジー信号ＲＢｎは、不揮発性メモリ２０がレディ状態（メモリコントローラ１０からのコマンドを受信できる状態）であるか、それともビジー状態（メモリコントローラ１０からのコマンドを受信できない状態）であるかを示す信号である。入出力信号Ｉ／Ｏは、例えば８ビットの信号である。入出力信号Ｉ／Ｏは、不揮発性メモリ２０とメモリコントローラ１０との間で送受信されるデータの実体であり、コマンド、アドレス、ライトデータ（書込み対象のデータ）、リードデータ（読み出されたデータ）等である。
【００３０】
また、不揮発性メモリ２０からメモリコントローラ１０へは、不揮発性メモリ２０の温度を検出する温度センサ２５で検出された温度を示す信号ＴＥＭＰも入力される。この温度センサ２５は、図１に示すように、不揮発性メモリ２０内に設けられてもよいし、不揮発性メモリ２０の外部に設けられた独立した部品であってもよい。また、温度センサ２５から出力された信号ＴＥＭＰが伝播する信号線は、メモリバス１８に含まれていてもよいし、メモリバス１８とは別の独立した信号線であってもよい。
【００３１】
メモリコントローラ１０は、ホストインタフェース（ホストＩ／Ｆ）１５、制御部１１、バッファインタフェース（バッファＩ／Ｆ）１２、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１４、メモリインタフェース（メモリＩ／Ｆ）１６、及びＥＣＣ部１３を有する。ホストＩ／Ｆ１５、制御部１１、バッファＩ／Ｆ１２、ＲＡＭ１４、メモリＩ／Ｆ１６、及びＥＣＣ部１３は、内部バス１７によって互いに接続されている。
【００３２】
ホストＩ／Ｆ１５は、ホストバス３１を介してホスト装置３０と接続され、ホスト装置３０から受信したコマンド及びデータを、それぞれ制御部１１及びＲＡＭ１４に転送する。また、ホストＩ／Ｆ１５は、制御部１１からの要求に応答して、ＲＡＭ１４内のデータをホスト装置３０へ転送する。
【００３３】
制御部１１は、例えばＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）などで構成され、メモリコントローラ１０各部の動作を統括的に制御する。例えば、制御部１１は、ホスト装置３０からホストライトコマンドを受信した際には、それに応答して、メモリＩ／Ｆ１６に対してライトコマンドを発行する。リードの際も同様に、ホスト装置３０からホストリードコマンドを受信した際には、それに応答して、メモリＩ／Ｆ１６に対してリードコマンドを発行する。一方、消去（イレース）の場合には、例えば制御部１１がガベージコレクション（コンパクションとも呼ばれる）などの処理の一環として、メモリＩ／Ｆ１６に対してイレースコマンドを発行する。また、制御部１１は、ガベージコレクションの他にも、ウェアレベリング、リフレッシュ、パトロールリード等、不揮発性メモリ２０を管理するための様々な処理の実行を制御する。
【００３４】
制御部１１は、ホスト３０からのホストコマンドをホストＩ／Ｆ１５経由で受け付けた場合に、そのホストコマンドに応じた制御を行う。例えば、制御部１１は、ホスト３０からのホストライトコマンドに応じて、不揮発性メモリ２０へのデータのライト処理をメモリＩ／Ｆ１６へ指示する。また、制御部１１は、ホスト３０からのホストリードコマンドに応じて、不揮発性メモリ２０からのデータのリード処理をメモリＩ／Ｆ１６へ指示する。
【００３５】
また、制御部１１は、ホスト３０からホストライトコマンドを受信した場合、バッファメモリ１９内のデータバッファに蓄積されるユーザデータに対して、不揮発性メモリ２０上の格納領域を決定する。すなわち、制御部１１は、ユーザデータの書込み先を管理する。ホスト３０から受信したユーザデータの論理アドレスと該ユーザデータが格納された不揮発性メモリ２０上の格納領域を示す物理アドレスとの対応は、アドレス変換情報ＬＵＴで管理される。アドレス変換情報ＬＵＴは、ルックアップテーブル（Ｌｏｏｋ  Ｕｐ  Ｔａｂｌｅ）とも呼ばれ得る。このアドレス変換情報ＬＵＴは、例えば不揮発性メモリ２０内に格納されており、必要に応じて読み出されてＲＡＭ１４及び／又はバッファメモリ１９等にキャッシュされる。また、アドレス変換情報ＬＵＴは、ホスト装置３０からのコマンドによる不揮発性メモリ２０へのアクセス（例えば、ホストライト）が行われる度に更新され得る。
【００３６】
また、制御部１１は、ホスト３０からホストリードコマンドを受信した場合、ホストリードコマンドにより指定された論理アドレスを上述のアドレス変換情報ＬＵＴを用いて物理アドレスに変換し、該物理アドレスからの読出しをメモリＩ／Ｆ１６へ指示する。
【００３７】
メモリＩ／Ｆ１６は、メモリバス１８を介して不揮発性メモリ２０と接続され、不揮発性メモリ２０との通信を制御する。メモリＩ／Ｆ１６は、制御部１１から受信したコマンドに基づき、信号ＡＬＥ、信号ＣＬＥ、信号ＷＥｎ、及び信号ＲＥｎを不揮発性メモリ２０へ出力する。また、ライト処理時には、制御部１１で発行されたライトコマンド、及びバッファメモリ１９内のデータバッファ内のライトデータを、入出力信号Ｉ／Ｏとして不揮発性メモリ２０へ転送する。メモリＩ／Ｆ１６は、リード処理時には、制御部１１で発行されたリードコマンドを、入出力信号Ｉ／Ｏとして不揮発性メモリ２０へ転送する。また、メモリＩ／Ｆ１６は、不揮発性メモリ２０から読み出されたデータを入出力信号Ｉ／Ｏとして受信し、これをバッファメモリ１９内のデータバッファへ転送する。
【００３８】
バッファメモリ１９は、ライトデータまたはリードデータを一時的に保持するメモリ領域として機能する。バッファメモリ１９は、ＲＡＭ１４に比べてメモリ容量が大きい。バッファメモリ１９は、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等で構成され得る。
【００３９】
バッファＩ／Ｆ１２は、メモリコントローラ１０からバッファメモリ１９へのアクセスを制御するコントローラであり、例えばＤＤＲ（Ｄｏｕｂｌｅ  Ｄａｔａ  Ｒａｔｅ）でのバッファメモリ１９へのアクセスを可能とするコントローラである。
【００４０】
ＲＡＭ１４は、アドレス変換情報ＬＵＴや、メモリシステム１の起動時等に不揮発性メモリ２０の特定の領域から読み出されて展開される各種管理テーブルなどのマスタテーブル（すなわち、スナップショット）や、各種管理テーブルの変更差分であるログ情報などを記憶するワーキングメモリとして使用することができるメモリである。また、ＲＡＭ１４は、ホスト３０と不揮発性メモリ２０との間でデータ転送をする際のキャッシュメモリとしても用いられることが可能である。ＲＡＭ１４は、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等で構成され得る。
【００４１】
ＥＣＣ部１３は、リードデータにおける誤り検出及び誤り訂正のために、データの符号化および復号を行う。具体的には、ＥＣＣ部１３は、不揮発性メモリ２０に書き込まれるデータ（ライトデータ）を符号化する。また、ＥＣＣ部１３は、不揮発性メモリ２０から読み出されたデータ（リードデータ）を復号する。ＥＣＣ部１３は、復号によって、リードデータにおける誤り検出及び誤り訂正を実行する。ＥＣＣ部１３は、誤り訂正に失敗した場合には、誤り訂正の失敗を制御部１１に通知する。ＥＣＣ部１３による符号化および復号のアルゴリズムには、ＲＳ（リード・ソロモン）符号やＢＣＨ（Ｂｏｓｅ−Ｃｈａｕｄｈｕｒｉ−Ｈｏｃｑｕｅｎｇｈｅｍ）符号や低密度パリティ検査（ＬＤＰＣ）符号等を用いた任意のアルゴリズムを適用することが可能である。
【００４２】
例えば、ライト処理時において、ＥＣＣ部１３は、制御部１１による制御のもと、ライトコマンドで不揮発性メモリ２０にライトすべきユーザデータを受け、ユーザデータに基づいてパリティを生成し、パリティをユーザデータに付してライトデータとする。不揮発性メモリ２０には、パリティを含むライトデータが、符号化データとして書き込まれる。
【００４３】
リード処理時において、ＥＣＣ部１３は、制御部１１による制御のもと、リードコマンドで不揮発性メモリ２０からリードされたリードデータを受け、リードデータからパリティを抽出し、パリティに基づきシンドロームを生成し、ユーザデータ内のエラービットの有無を判断する。ＥＣＣ部１３は、ユーザデータにエラービットが含まれる場合、エラービットの位置を特定する。ＥＣＣ部１３において訂正可能なエラービットの数は、例えばパリティのビット数等によって決まる。訂正可能なエラービットの数以下のエラービットがユーザデータに含まれる場合、ＥＣＣ部１３は、そのエラービットを訂正し、訂正成功の旨を制御部１１へ通知する。訂正可能なエラービットの数を超える数のエラービットがユーザデータに含まれる場合には、ＥＣＣ部１３は、誤り訂正ができない（ｕｎｃｏｒｒｅｃｔａｂｌｅ）として、訂正失敗の旨を制御部１１へ通知する。
【００４４】
不揮発性メモリ２０は、コマンド処理部２１、駆動部２２、メモリセルアレイ２３、カラムモジュール２４、及び、温度センサ２５を有する。コマンド処理部２１は、シーケンサ２１１、コマンドレジスタ（ＣＭＤレジスタ）２１２、アドレスレジスタ（ＡＤＤレジスタ）２１３を含む。駆動部２２は、ドライバ回路２２１及びロウデコーダ（Ｒ／Ｄ）２２２を含む。
【００４５】
メモリセルアレイ２３は、複数のメモリセル（複数のメモリセルトランジスタＭＴ）を有する。各メモリセルは、ロウ及びカラムに対応付けられている。メモリセルアレイ２３は、メモリコントローラ１０から与えられたデータを記憶する。
【００４６】
ロウデコーダ２２２は、アクセス対象のブロックを選択し、更に選択したブロックにおけるロウ方向を選択する。
【００４７】
ドライバ回路２２１は、選択されたブロックに対して、ロウデコーダ２２２を介して電圧を供給する。
【００４８】
カラムモジュール２４は、たとえばセンスアンプと複数のラッチ回路よりなるデータラッチとを含んで構成される。このカラムモジュール２４は、ライト動作においては、メモリコントローラ１０から受信したライトデータＤＡＴをメモリセルアレイ２３に転送する。また、カラムモジュール２４は、リード動作においては、メモリセルアレイ２３から読み出されたデータをセンスし、必要な演算を行う。そして、カラムモジュール２４は、得られたデータＤＡＴをメモリコントローラ１０に出力する。
【００４９】
アドレスレジスタ２１３は、メモリコントローラ１０から受信したアドレスＡＤＤを保持する。コマンドレジスタ２１２は、メモリコントローラ１０から受信したコマンドＣＭＤを保持する。
【００５０】
シーケンサ２１１は、コマンドレジスタ２１２に保持されたコマンドＣＭＤに基づき、不揮発性メモリ２０全体の動作を制御する。
【００５１】
温度センサ２５は、常時、定期的又は必要に応じて、メモリセルアレイ２３周辺の温度を検出し、検出された温度を示す信号ＴＥＭＰをメモリコントローラ１０へ出力する。
【００５２】
次に、不揮発性メモリ２０におけるデータの管理単位について図２を用いて説明する。図２は、不揮発性メモリ２０におけるデータの管理単位を示す図である。
【００５３】
不揮発性メモリ２０（図１参照）は、複数のメモリチップで構成され得る。各メモリチップはメモリセルアレイを有する。メモリセルアレイ２３（図１参照）は、各メモリチップのメモリセルアレイの集合体として構成され得る。各メモリチップのメモリセルアレイでは、一括してデータの書き込みおよび読み出しのアクセスが可能な単位が物理ページである。複数の物理ページから構成され、独立してデータの消去が可能な最小のアクセス単位が物理ブロックである。また、図２に示す例では、８つのチャネルｃｈ０〜ｃｈ７にメモリチップが接続されている場合が例示されている。コントローラ２は、各チャネルｃｈ０〜ｃｈ７を互いに並列して制御することが可能である。さらにコントローラ２は、各チャネルｃｈ０〜ｃｈ７について、例えば１チャネルあたり２並列のバンクインタリーブにより、複数の並列動作を行うことが可能である。これにより、並列にほぼ一括して書き込み／読み出しが可能な１６個の物理ページでデータ記録領域となる１論理ページを構成でき、並列にほぼ一括して消去可能な１６個の物理ブロックで１論理ブロックを構成することができる。ガベージコレクション（コンパクション）は、この１論理ブロックの単位で行われ得る。
【００５４】
また、１物理ページよりも小さい単位のデータ管理単位であるクラスタで、制御部１１により、不揮発性メモリ２０内でのデータが管理されるものとする。クラスタサイズは、ホスト装置３０からの最小アクセス単位であるセクタのサイズ以上であり、クラスタサイズの自然数倍が物理ページサイズとなるように定められる。例えば、１物理ページは４クラスタで構成され、１論理ページは６４クラスタで構成され得る。
【００５５】
なお、不揮発性メモリ２０へアクセスするための論理アドレス及び物理アドレス間の変換に用いられるアドレス変換情報ＬＵＴでは、論理アドレスと物理アドレスとが対応付けされている。論理アドレスは、例えば、ＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）とすることができる。物理アドレスは、論理ブロックの識別情報（例えば、論理ブロック番号）とクラスタの識別情報（例えば、論理ページ番号＋論理クラスタ番号）との組み合わせとすることができる。論理クラスタ番号は、論理ページ内におけるクラスタの位置を示す（図２参照）。
【００５６】
各メモリチップのメモリセルアレイにおける各物理ブロックは、例えば、図３に示すように構成される。図３は、物理ブロックＢＬＫの構成を示す図である。
【００５７】
各物理ブロックＢＬＫは、複数のストリングユニットＳＵ０〜ＳＵ３を有する。複数のストリングユニットＳＵ０〜ＳＵ３は、複数の選択ゲートラインＳＧＤＬ０〜ＳＧＤＬ３に対応しているとともに選択ゲートラインＳＧＳＬを共有している。各ストリングユニットＳＵ０〜ＳＵ３は、物理ブロックＢＬＫにおける駆動単位として機能する。各ストリングユニットＳＵ０〜ＳＵ３は、複数の選択ゲートラインＳＧＤＬ０〜ＳＧＤＬ３のうちその対応する選択ゲートラインと選択ゲートラインＳＧＳＬとで駆動され得る。また、各ストリングユニットＳＵ０〜ＳＵ３は、複数のメモリストリングＭＳＴを含む。
【００５８】
各メモリストリングＭＳＴは、例えば６４個のメモリセルトランジスタＭＴ（ＭＴ０〜ＭＴ６３）および選択トランジスタＳＤＴ，ＳＳＴを含んでいる。メモリセルトランジスタＭＴは、コントロールゲートと電荷蓄積膜とを有し、データを不揮発に保持する。そして６４個のメモリセルトランジスタＭＴ（ＭＴ０〜ＭＴ６３）は、選択トランジスタＳＤＴのソースと選択トランジスタＳＳＴのドレインとの間に直列接続されている。なお、メモリストリングＭＳＴ内のメモリセルトランジスタＭＴの個数は６４個に限定されない。
【００５９】
ワードラインＷＬ０〜ＷＬ６３（各ワードラインを区別しない場合には、ＷＬで示すことにする）は、物理ブロックＢＬＫ内の各ストリングユニットＳＵ内の各メモリストリングＭＳＴ間で、メモリセルトランジスタＭＴのコントロールゲートを共通に接続している。つまり、物理ブロックＢＬＫ内の各ストリングユニットＳＵ内において同一行にあるメモリセルトランジスタＭＴのコントロールゲートは、同一のワードラインＷＬに接続される。すなわち、物理ブロックＢＬＫのストリングユニットＳＵは複数のワードラインＷＬに対応した複数のメモリセルグループＭＣＧを含み、各メモリセルグループＭＣＧは同一のワードラインＷＬに接続される（ｐ＋１）個のメモリセルトランジスタＭＴを含む。各メモリセルトランジスタＭＴに１ビットの値を保持可能に構成される場合（シングルレベルセル（ＳＬＣ）モードで動作する場合）には、同一のワードラインＷＬに接続される（ｐ＋１）個のメモリセルトランジスタＭＴ（すなわち、メモリグループＭＣＧ）は１つの物理ページとして取り扱われ、この物理ページごとにデータのライト動作及びデータのリード動作が行われる。
【００６０】
各メモリセルトランジスタＭＴに複数ビットの値を保持可能に構成される場合がある。例えば、各メモリセルトランジスタＭＴがｎ（ｎ≧２）ビットの値を記憶可能な場合、ワードラインＷＬ当たりの記憶容量はｎ個の物理ページ分のサイズに等しくなる。すなわち、各メモリセルグループＭＣＧは、ｎ個の物理ページとして取り扱われる。例えば、各メモリセルトランジスタＭＴが２ビットの値の記憶を行うマルチレベルセル（ＭＬＣ）モードでは、各ワードラインＷＬに２個の物理ページ分のデータが保持される。あるいは、各メモリセルトランジスタＭＴが３ビットの値の記憶を行うトリプルレベルセル（ＴＬＣ）モードでは、各ワードラインＷＬに３個の物理ページ分のデータが保持される。
【００６１】
次に、メモリシステム１の概略動作について図４を用いて説明する。図４は、メモリシステム１の概略動作を示すフローチャートである。
【００６２】
メモリシステム１において、メモリコントローラ１０は、検査リードコマンドを実行すべきことを示す実行条件が満たされると、検査リード処理を行う（ＳＴ１）。実行条件の詳細については、後述する。検査リード処理では、メモリシステム１は、所定の領域に対して、所定のリード方式に従った検査リードコマンドを不揮発性メモリ２０に発行する。
【００６３】
所定の領域は、物理ブロックにおける全クラスタにデータを書き上げた場合における物理ブロック全面の領域であってもよいし、所定のワードラインＷＬにデータを書き上げた場合におけるその書き上げ済のワードラインＷＬに近接したワードラインＷＬの領域であってもよい。データは、ホストライトコマンドに応じて書かれたものであっても、ガベージコレクション(コンパクション)に応じて書かれたものであってもよい。所定のリード方式は、前回の検査リードコマンドの実行結果に応じて選択されたリード方式（例えば、図５に示すＦａｓｔＲｅａｄ、ＮｏｒｍａｌＲｅａｄ、ＤＬＡｒｅａｄ（Ｄｙｎａｍｉｃ  Ｌｏｏｋ  Ａｈｅａｄ  ＲＥＡＤ）のいずれか）であってもよい。
【００６４】
メモリコントローラ１０は、検査リードコマンドの応答としてリードデータを不揮発性メモリ２０から受けると、リードデータに対して誤り訂正を行い、リードデータの誤り訂正に関する情報を取得する。誤り訂正は、ＥＣＣ（Ｅｒｒｏｒ  Ｃｈｅｃｋ  ａｎｄ  Ｃｏｒｒｅｃｔｉｏｎ）訂正とも呼ばれる。
【００６５】
リードデータの誤り訂正に関する情報は、リードデータの誤り訂正で検出されたビットエラー率と不揮発性メモリ２０におけるリード動作のリトライ率との少なくとも一方を含む。ビットエラー率とは、１ビットあたりのエラー発生確率であり、ＥＣＣ部１３で検出されたユーザデータのエラービット数を全ビット数で割って求められ得る。ビットエラー率は、ＢＥＲ（Ｂｉｔ  Ｅｒｒｏｒ  Ｒａｔｅ）とも呼ばれる。エラービット数は、ＦＢＣ（Ｆａｉｌ  Ｂｉｔ  Ｃｏｕｎｔ）とも呼ばれる。リトライ率は、ＥＣＣ部１３での訂正失敗（ｕｎｃｏｒｒｅｃｔａｂｌｅ）に応じたリトライリードの発生確率であり、リトライリードの発生回数を初段リード処理の実行回数で割って求められ得る。
【００６６】
メモリコントローラ１０は、検査リードコマンドのリードデータの誤り訂正に関する情報に応じて、初段リード処理に適用すべきリード方式として、複数のリード方式から１つのリード方式を選択する（ＳＴ２）。複数のリード方式は、不揮発性メモリ２０のリード動作に要するリード時間ｔＲｅａｄが互いに異なる複数のリード方式を含み、例えば、図５に示す複数のリード方式を含む。図５は、複数のリード方式の特性を示す図である。
【００６７】
初段リード処理に適用する候補となる複数のリード方式は、例えば、ＦａｓｔＲｅａｄ、ＮｏｒｍａｌＲｅａｄ、ＤＬＡｒｅａｄを含む。
【００６８】
ＮｏｒｍａｌＲｅａｄは、リード時にワードラインに印加するリード電圧（リードレベルともいう）の値を所定の基準値とする通常のリード動作である。
【００６９】
ＦａｓｔＲｅａｄは、ＮｏｒｍａｌＲｅａｄよりもリードレベルの印加時間等を短くすることでリード時間を短縮したリード動作である。
【００７０】
ＤＬＡｒｅａｄは、リード対象のメモリセルから読み出した値とワードラインの配列方向に位置する隣接メモリセル又は隣接ワードラインに位置する隣接メモリセルから読み出した値とに基づいて、リードレベルを選択又は補正するリード動作である。
【００７１】
メモリセルへのデータの書き込み処理／消去処理の回数（Ｐ／Ｅサイクル数）が同一である場合において、ＦａｓｔＲｅａｄ、ＮｏｒｍａｌＲｅａｄ、ＤＬＡｒｅａｄでは、それぞれ、リード時間ｔＲｅａｄをＴ１，Ｔ２，Ｔ３とすると、次の数式１の関係が成り立つ。リード時間ｔＲｅａｄは、短いほど、パフォーマンスの観点で望ましい。
Ｔ１＜Ｔ２＜Ｔ３・・・数式１
【００７２】
数式１に示されるように、パフォーマンスの観点からは、ＦａｓｔＲｅａｄ、ＮｏｒｍａｌＲｅａｄ、ＤＬＡｒｅａｄの順に優先して、リード方式を選択すべきだと考えられる。
【００７３】
一方、メモリセルへのデータの書き込み処理／消去処理の回数が同一である場合において、ＦａｓｔＲｅａｄ、ＮｏｒｍａｌＲｅａｄ、ＤＬＡｒｅａｄでは、それぞれ、誤り訂正で検出される平均的なＢＥＲをＥＲ１，ＥＲ２，ＥＲ３とすると、次の数式２の関係が成り立つ。ＢＥＲは、小さいほど、信頼性の観点で望ましい。
ＥＲ１＞ＥＲ２＞ＥＲ３・・・数式２
【００７４】
また、メモリセルへのデータの書き込み処理／消去処理の回数が同一である場合において、ＦａｓｔＲｅａｄ、ＮｏｒｍａｌＲｅａｄ、ＤＬＡｒｅａｄでは、それぞれ、リード動作で発生する平均的なリトライ率をＲＲ１，ＲＲ２，ＲＲ３とすると、次の数式３の関係が成り立つ。リトライ率は、小さいほど、信頼性の観点で望ましい。
ＲＲ１＞ＲＲ２＞ＲＲ３・・・数式３
【００７５】
数式２又は数式３に示されるように、信頼性の観点からは、ＤＬＡｒｅａｄ、ＮｏｒｍａｌＲｅａｄ、ＦａｓｔＲｅａｄの順に優先して、リード方式を選択すべきだと考えられる。
【００７６】
なお、ＢＥＲとリトライ率とを比較すると、ＢＥＲが、誤り訂正で訂正失敗及び訂正成功となった両方のビットエラーに対応する情報であるのに対して、リトライ率は、誤り訂正で訂正失敗となった方のビットエラーに対応する情報である点で異なる。そのため、ＢＥＲの方が信頼性を示す情報として精度が高いがより計算時間がかかるため、精度を重視する場合にＢＥＲを用い、計算時間短縮を重視する場合にリトライ率を用いるという使い分けが可能である。
【００７７】
パフォーマンスの低下を抑制しながら要求される信頼性を満たすことを考えた場合、信頼性を示す情報に対して閾値を設けて現在の信頼性のレベルを判定することが考えられる。例えば、ＢＥＲについて、次の数式４に示す関係にある複数の閾値ＥＲｔｈ１，ＥＲｔｈ２を設けてもよい。
ＥＲｔｈ１＜ＥＲｔｈ２・・・数式４
【００７８】
また、リトライ率について、次の数式５に示す関係にある複数の閾値ＲＲｔｈ１，ＲＲｔｈ２を設けてもよい。
ＲＲｔｈ１＜ＲＲｔｈ２・・・数式５
【００７９】
例えば、初段リードに適用するリード方式として、メモリシステム１は、ＢＥＲ（ビットエラー率）がＥＲｔｈ１未満であれば、ＦａｓｔＲｅａｄを選択し、ＢＥＲがＥＲｔｈ１以上ＥＲｔｈ２未満であればＮｏｒｍａｌＲｅａｄを選択し、ＢＥＲがＥＲｔｈ２以上であれば、ＤＬＡｒｅａｄを選択する。
【００８０】
あるいは、例えば、初段リードに適用するリード方式として、メモリシステム１は、リトライ率がＲＲｔｈ１未満であれば、ＦａｓｔＲｅａｄを選択し、リトライ率がＲＲｔｈ１以上ＲＲｔｈ２未満であればＮｏｒｍａｌＲｅａｄを選択し、リトライ率がＲＲｔｈ２以上であれば、ＤＬＡｒｅａｄを選択する。
【００８１】
なお、数式４及び数式５に示す各閾値の値は、メモリシステム１に要求される仕様に応じて、予め実験的に決定され、設定され得る。
【００８２】
図４に戻って、メモリコントローラ１０は、初段リード処理を行う（ＳＴ３）。すなわち、メモリコントローラ１０は、ＳＴ２で選択された１つのリード方式に従ったリードコマンドを不揮発性メモリ２０に発行する。例えば、メモリコントローラ１０は、ホスト装置３０からのホストリードコマンドに応じて、ＳＴ２で選択された１つのリード方式に従ったリードコマンドを不揮発性メモリ２０に発行する。
【００８３】
メモリコントローラ１０は、ＳＴ３で発行したリードコマンドの応答として、リードデータを不揮発性メモリ２０から受けると、リードデータについて誤り訂正を行う（ＳＴ４）。メモリコントローラ１０は、誤り訂正に成功した場合（ＳＴ５でＹｅｓ）、処理を終了する。
【００８４】
メモリコントローラ１０は、誤り訂正に失敗した場合（ＳＴ５でＮｏ）、リトライリード処理を行う（ＳＴ６）。すなわち、メモリコントローラ１０は、リード方式をより信頼性の高い方式に変更して、変更後のリード方式に従ったリードコマンドを不揮発性メモリ２０に発行する。リトライリード処理に適用すべきリード方式は、初段リード処理に適用したリード方式より信頼性の高い任意の方式が適用可能であり、例えば、図５に示すＶｔｈＴｒａｃｋｉｎｇを含む。
【００８５】
ＶｔｈＴｒａｃｋｉｎｇは、リードレベルを所定の刻み幅でシフトしながらシングルレベルリードを複数回実行することで、該当ページに含まれる複数のメモリセルにプログラムされた閾値電圧の分布のヒストグラム（閾値電圧分布）を生成し、生成した閾値電圧分布に基づいて補正したリードレベルを用いて読出しを実行するリード動作である。ＶｔｈＴｒａｃｋｉｎｇは、トラッキングリードとも呼ばれる。なお、ＶｔｈＴｒａｃｋｉｎｇには、メモリコントローラ１０からの制御に従って実行されるリード方式と、メモリコントローラ１０からの制御に依らずに不揮発性メモリ２０内で実行されるリード方式とが存在するが、本実施形態では何れのリード方式であってもよい。
【００８６】
メモリセルへのデータの書き込み処理／消去処理の回数が同一である場合において、ＦａｓｔＲｅａｄ、ＮｏｒｍａｌＲｅａｄ、ＤＬＡｒｅａｄ、ＶｔｈＴｒａｃｋｉｎｇでは、それぞれ、リード時間ｔＲｅａｄをＴ１，Ｔ２，Ｔ３，Ｔ４とすると、次の数式６の関係が成り立つ。
Ｔ１＜Ｔ２＜Ｔ３＜＜Ｔ４・・・数式６
【００８７】
数式６に示されるように、ＶｔｈＴｒａｃｋｉｎｇは、大幅なパフォーマンスの低下が発生し得ることから、初段リード処理には適さないリード方式であると考えられる。
【００８８】
なお、メモリセルへのデータの書き込み処理／消去処理の回数が同一である場合において、ＦａｓｔＲｅａｄ、ＮｏｒｍａｌＲｅａｄ、ＤＬＡｒｅａｄ、ＶｔｈＴｒａｃｋｉｎｇは、それぞれ、誤り訂正で検出される平均的なＢＥＲをＥＲ１，ＥＲ２，ＥＲ３，ＥＲ４とすると、次の数式７の関係が成り立つ。
ＥＲ１＞ＥＲ２＞ＥＲ３＞ＥＲ４・・・数式７
【００８９】
また、メモリセルへのデータの書き込み処理／消去処理の回数が同一である場合において、ＦａｓｔＲｅａｄ、ＮｏｒｍａｌＲｅａｄ、ＤＬＡｒｅａｄ、ＶｔｈＴｒａｃｋｉｎｇは、それぞれ、リード動作で発生する平均的なリトライ率をＲＲ１，ＲＲ２，ＲＲ３，ＲＲ４とすると、次の数式８の関係が成り立つ。
ＲＲ１＞ＲＲ２＞ＲＲ３＞ＲＲ４・・・数式８
【００９０】
図４に戻って、メモリコントローラ１０は、ＳＴ６で発行したリードコマンドの応答として、リードデータを不揮発性メモリ２０から受けると、リードデータについて誤り訂正を行う（ＳＴ７）。メモリコントローラ１０は、誤り訂正に成功した場合（ＳＴ８でＹｅｓ）、処理を終了する。
【００９１】
メモリコントローラ１０は、誤り訂正に失敗した場合（ＳＴ８でＮｏ）、リトライリード処理の実行回数が所定回数に達するまで（ＳＴ９でＮｏ）、リード方式をより信頼性の高い方式に変更しながら、ＳＴ６〜ＳＴ８を繰り返す。所定回数は、メモリシステム１に要求される仕様に応じて、予め実験的に決定され、設定され得る。メモリコントローラ１０は、リトライリード処理の実行回数が所定回数に達すると（ＳＴ９でＹｅｓ）、ホストリードコマンドに対する応答としてリードエラーをホスト装置３０に返すリードエラー処理（ＳＴ１０）を行い、処理を終了する。
【００９２】
次に、検査リード処理（ＳＴ１）の具体的な実装例について図６及び図７を用いて説明する。図６は、メモリシステム１の詳細動作（検査リード処理の実装例）を示すフローチャートである。図７は、メモリシステムの詳細動作（検査リード処理の実装例）を示すデータフロー図である。図６及び図７では、Ｐｒｏｇｒａｍ処理から、検査リード処理を経て、疲弊情報の蓄積とアドレス変換情報ＬＵＴの更新までの処理について例示している。
【００９３】
図６に示すように、メモリシステム１において、メモリコントローラ１０は、Ｐｒｏｇｒａｍ処理を開始する（ＳＴ１１）。
【００９４】
例えば、図７に示すように、メモリコントローラ１０は、機能的な構成として、Ｐｒｏｇｒａｍ処理部１０ａ、Ｐｒｏｇｒａｍコマンド処理部１０ｂ、検査リード処理部１０ｃ、Ｒｅａｄコマンド処理部１０ｄ、ＬＵＴ管理部１０ｅ、ホストリード処理部１０ｆ、疲弊情報解析部１０ｇ、内部リード管理部１０ｈを有する。なお、メモリコントローラ１０は、前述のように、例えばＳｏＣ（Ｓｙｓｔｅｍ−ｏｎ−ａ−Ｃｈｉｐ）を含むコントローラパッケージとして実装され得る。図７に示す機能的な構成は、コントローラパッケージにおいてハードウェア的に（例えば、回路として）実装されていてもよい。あるいは、図７に示す各機能は、コントローラパッケージにおいてソフトウェア的に（例えば、バッファメモリ２６等に一括して又は処理の進行に応じて順次に展開されるファームウェアを、制御部１１が実行することによって）実現されていてもよい。あるいは、図７に示す各機能は、コントローラパッケージにおいて、一部の機能がハードウェアによって実現され、残りの機能がソフトウェア的に実現されていてもよい。また、ＲＡＭ１４には、疲弊情報が保存されるための領域として、疲弊情報保存領域１４ａが予め確保され得る。
【００９５】
Ｐｒｏｇｒａｍ処理部１０ａは、Ｐｒｏｇｒａｍ要求をＰｒｏｇｒａｍコマンド処理部１０ｂへ供給する（ＳＱ１）。Ｐｒｏｇｒａｍコマンド処理部１０ｂは、Ｐｒｏｇｒａｍ要求に応じて、Ｐｒｏｇｒａｍコマンド（ライトコマンド）を不揮発性メモリ２０へ発行する（ＳＱ２）。なお、Ｐｒｏｇｒａｍコマンド処理部１０ｂは、ＥＣＣ  ｅｎｃｏｄｅｒを含み、ユーザデータにパリティが付加されて符号化されたライトデータを含むＰｒｏｇｒａｍコマンドを不揮発性メモリ２０へ発行し得る。
【００９６】
これに応じて、不揮発性メモリ２０は、ライトコマンドで指定された領域へのライト動作を行う。不揮発性メモリ２０は、所定のワードラインへのデータの書き上げが完了すると（図６に示すＳＴ１２）、所定のワードラインのライト完了通知をＰｒｏｇｒａｍコマンド処理部１０ｂへ返す（図７に示すＳＱ３）。これに応じて、Ｐｒｏｇｒａｍコマンド処理部１０ｂは、Ｐｒｏｇｒａｍ応答をＰｒｏｇｒａｍ処理部１０ａへ返す（ＳＱ４）。Ｐｒｏｇｒａｍ処理部１０ａは、Ｐｒｏｇｒａｍ応答に応じて、所定のワードラインへのデータの書き上げが完了したと認識する。
【００９７】
所定のワードラインへのデータの書き上げが完了すると、図６に示すように、メモリコントローラ１０は、対象ラードラインについてアドレス変換情報ＬＵＴを更新する（ＳＴ１３）。
【００９８】
例えば、図７に示すＰｒｏｇｒａｍ処理部１０ａは、ＬＵＴ更新要求をＬＵＴ管理部１０ｅへ供給する（ＳＱ５）。ＬＵＴ管理部１０ｅは、ＲＡＭ１４及び／又はバッファメモリ１９に格納されたアドレス変換情報ＬＵＴにアクセスし、ライト完了通知（ＳＱ３）で書き上げ完了を通知されたワードラインの情報をアドレス変換情報ＬＵＴに追加することなどによりアドレス変換情報ＬＵＴを更新する。ＬＵＴ管理部１０ｅは、更新後のアドレス変換情報ＬＵＴをＲＡＭ１４及び／又はバッファメモリ１９に書き戻す（ＳＱ６）。
【００９９】
図６に戻って、メモリコントローラ１０は、検査リードコマンドを実行すべきことを示す実行条件が満たされるか否かを判断する（ＳＴ１４）。実行条件としては、例えば、次のＡ）〜Ｃ）のいずれか又はそれらの組み合わせを用いることができる。
Ａ）書き上げが完了したＷＬに対して、即座に検査リードを要求する。
Ｂ）書き上げが完了したタイミングからタイマで所定時間を計って、所定時間に達してから検査リードを要求する。所定時間は、メモリセルの閾値電圧の単位時間あたりの変化量が所定の閾値以上ある時間で、例えば数秒〜数分である。
Ｃ）書き上げが完了したＷＬから＋ｎ本（ｎは任意の正の整数）のＷＬを書き進めてから検査リードを要求する。
【０１００】
メモリコントローラ１０は、実行条件が満たされるまで（ＳＴ１４でＮｏ）、待機し、実行条件が満たされると（ＳＴ１４でＹｅｓ）、検査リード処理を行う（ＳＴ１ａ）。
【０１０１】
検査リード処理（ＳＴ１ａ）では、メモリコントローラ１０は、ＳＴ１２で書き上げが完了したワードラインを対象ワードラインとして、対象ワードラインの指定を含む検査リードコマンドを不揮発性メモリ２０に発行する（ＳＴ１５）。
【０１０２】
なお、メモリコントローラ１０は、ＳＴ１４でＹｅｓと判断されるタイミングまでに、ホスト装置３０からホストリードコマンドを受けた場合、ホストリードコマンドに応じたホストリード処理を開始し（ＳＴ１７）、メモリセルの疲弊状態を検査するためのリード指示とホストリードコマンドに応じたリード指示とを兼ねたコマンドとして、検査リードコマンドを不揮発性メモリ２０に発行し得る。
【０１０３】
メモリコントローラ１０は、検査リードコマンドの応答としてリードデータを不揮発性メモリ２０から受けると、リードデータに対して誤り訂正を行い、リードデータの誤り訂正に関する情報を取得する。すなわち、メモリコントローラ１０は、リードデータの誤り訂正に関する情報として、リードクラスタ数とリトライ発生クラスタ数またはＦＢＣ情報を取得し、取得されたこれらの情報に基づいて、疲弊情報１４ａ１を生成又は更新してＲＡＭ１４上の疲弊情報保存領域１４ａに保存する（ＳＴ１５）。
【０１０４】
例えば、図７に示すＰｒｏｇｒａｍ処理部１０ａは、検査リードコマンドを実行すべきことを示す実行条件が満たされたと判断すると、検査リード要求を検査リード処理部１０ｃへ供給する（ＳＱ７）。検査リード処理部１０ｃは、検査リード要求に応じて、Ｒｅａｄ要求をＲｅａｄコマンド処理部１０ｄへ供給する（ＳＱ８）。Ｒｅａｄコマンド処理部１０ｄは、Ｒｅａｄ要求に応じて、Ｒｅａｄコマンド（リードコマンド）を不揮発性メモリ２０へ発行する（ＳＱ９）。
【０１０５】
これに応じて、不揮発性メモリ２０は、リードコマンドで指定された領域からのリード動作を行う。不揮発性メモリ２０は、リード動作が完了すると、リードデータをＲｅａｄコマンド処理部１０ｄへ返す（ＳＱ１０）。
【０１０６】
Ｒｅａｄコマンド処理部１０ｄは、ＥＣＣ  ｄｅｃｏｄｅｒを含み、検査リードコマンドの応答としてリードデータを不揮発性メモリ２０から受けると、リードデータに対して誤り訂正を行い、ＥＣＣ訂正結果またはＦＢＣ情報を検査リード処理部１０ｃへ供給する（ＳＱ１１）。検査リード処理部１０ｃは、リード量・リトライ回数・ＦＢＣ情報に応じた疲弊情報１４ａ１を生成してＲＡＭ１４上の疲弊情報保持領域１４ａへ保存する（ＳＱ１２）。
【０１０７】
疲弊情報１４ａ１は、例えば、図８に示すようなデータ構造を有する。図８は、疲弊情報１４ａ１のデータ構造を示す図である。疲弊情報１４ａ１では、リードクラスタ数、リトライ発生クラスタ数が、各チップの各物理ブロックについて記録され得る。なお、疲弊情報１４ａ１のデータ構造は、図８に示す例に限定されず、例えば、リードクラスタ数及びリトライ発生クラスタ数に加えて、又は、リードクラスタ数及びリトライ発生クラスタ数に代えて、リードビット数及びエラービット数が記録されていてもよい。
【０１０８】
なお、メモリコントローラ１０は、図６に示すアドレス変換情報ＬＵＴの更新（ＳＴ１３）を、検査リード処理（ＳＴ１ａ）が完了した後に行ってもよい。
【０１０９】
例えば、図７に点線の矢印で示すように、検査リード処理部１０ｃは、疲弊情報１４ａ１の保存を行った後、ＬＵＴ更新要求をＬＵＴ管理部１０ｅへ供給してもよい。    
【０１１０】
次に、リード方式選択（ＳＴ２）の具体的な実装例について図９及び図１０を用いて説明する。図９は、メモリシステム１の詳細動作（リード方式の選択の実装例）を示すフローチャートである。図１０は、メモリシステムの詳細動作（リード方式の選択の実装例）を示すデータフロー図である。図９及び図１０では、ホストリード処理の開始以降の処理について例示している。
【０１１１】
図９に示すように、メモリコントローラ１０は、ホスト装置３０からホストリードコマンドを受けると、ホストリードコマンドに応じてホストリード処理を開始し（ＳＴ２１）、アドレス変換情報ＬＵＴを解決し、ホストリードの物理アドレスを特定する（ＳＴ２２）。
【０１１２】
例えば、図１０に示すホストリード処理部１０ｆは、ホスト装置３０からホストリードコマンドを受けると（ＳＱ２１）、ホストリードコマンドに応じて、ＬＵＴ解決要求をＬＵＴ管理部１０ｅへ供給する（ＳＱ２２）。ＬＵＴ管理部１０ｅは、ＲＡＭ１４及び／又はバッファメモリ１９に格納されたアドレス変換情報ＬＵＴにアクセスし、アドレス変換情報ＬＵＴを参照して、ホストリードコマンドに含まれた論理アドレスに対応する物理アドレスを特定する。ＬＵＴ管理部１０ｅは、特定された物理アドレスの情報を物理アドレス応答としてホストリード処理部１０ｆへ返す（ＳＱ２３）。
【０１１３】
図９に戻って、メモリコントローラ１０は、ＲＡＭ１４上の疲弊情報格納領域１４ａからホストリード対象部分の疲弊情報を取得し（ＳＴ２３）、疲弊情報に基づいてリトライ率を求める（ＳＴ２４）。
【０１１４】
例えば、図１０に示すホストリード処理部１０ｆは、ＬＵＴ管理部１０ｅから物理アドレスを受けたことに応じて、疲弊情報要求を疲弊情報解析部１０ｇへ供給する（ＳＱ２４）。疲弊情報解析部１０ｇは、疲弊情報要求に応じて、疲弊情報要求をＲＡＭ１４へ供給し（ＳＱ２５）、ＲＡＭ１４上の疲弊情報保持領域１４ａに格納された疲弊情報１４ａ１（図８参照）を疲弊情報応答として受ける（ＳＱ２６）。疲弊情報解析部１０ｇは、疲弊情報１４ａ１に基づいて、ＳＱ２３の物理アドレスに対応する検査リードクラスタ数１４ａ１１及びリトライ率１４ａ２（図８参照）を疲弊情報解析結果として求める。疲弊情報解析部１０ｇは、リトライ発生クラスタ数１４ａ１２を検査リードクラスタ数１４ａ１１で割ってリトライ率１４ａ２を求めてもよい。疲弊情報解析部１０ｇは、疲弊情報解析結果をホストリード処理部１０ｆへ返す（ＳＱ２７）。
【０１１５】
図９に戻って、メモリコントローラ１０は、ＳＴ２４で求められた検査リードクラスタ数１４ａ１１及びリトライ率１４ａ２に応じて、複数のリード方式から１つのリード方式を選択し（ＳＴ２ａ）、初段リード処理を行い（ＳＴ３ａ）、その応答としてリードデータを不揮発性メモリ２０から受けると、リードデータに対して誤り訂正を行う（ＳＴ３０）。
【０１１６】
リード方式の選択（ＳＴ２ａ）では、メモリコントローラ１０は、検査リードクラスタ数１４ａ１１が所定数以上であるか否かを判断し（ＳＴ２５）、検査リードクラスタ数１４ａ１１が所定数以上であれば（ＳＴ２５でＹｅｓ）、リトライ率が複数の閾値ＲＲｔｈ１，ＲＲｔｈ２に対してどのレベルにあるかを判断する（ＳＴ２６）。所定数は、メモリシステム１に要求される仕様に応じて、実験的に決定され、設定され得る。
【０１１７】
なお、ＳＴ２５で検査リードクラスタ数を判断することで、精度の粗い検査結果を元に切り替えを行うことを防ぐことができ、リトライ率の精度を保証した切り替えを行うことができる。
【０１１８】
メモリコントローラ１０は、検査リードクラスタ数１４ａ１１が所定数未満である（ＳＴ２５でＮｏ）か、又は、リトライ率が閾値ＲＲｔｈ１未満であれば（ＳＴ２６で「リトライ率＜ＲＲｔｈ１」）、リード方式としてＦａｓｔＲｅａｄを選択し、処理をＳＴ２７へ進める。
【０１１９】
メモリコントローラ１０は、リトライ率が閾値ＲＲｔｈ１以上且つ閾値ＲＲｔｈ２未満であれば（ＳＴ２６で「ＲＲｔｈ１≦リトライ率＜ＲＲｔｈ２」）、リード方式としてＮｏｒｍａｌＲｅａｄを選択し、処理をＳＴ２８へ進める。
【０１２０】
メモリコントローラ１０は、リトライ率が閾値ＲＲｔｈ２以上であれば（ＳＴ２６で「ＲＲｔｈ２≦リトライ率」）、リード方式としてＤＬＡＲｅａｄを選択し、処理をＳＴ２９へ進める。
【０１２１】
初段リード処理（ＳＴ３ａ）では、メモリコントローラ１０は、リード方式の選択（ＳＴ２ａ）でＦａｓｔＲｅａｄが選択された場合、ＦａｓｔＲｅａｄの方式に従ってリードコマンドを不揮発性メモリ２０へ発行する（ＳＴ２７）。メモリコントローラ１０は、リード方式の選択（ＳＴ２ａ）でＮｏｒｍａｌＲｅａｄが選択された場合、ＮｏｒｍａｌＲｅａｄの方式に従ってリードコマンドを不揮発性メモリ２０へ発行する（ＳＴ２８）。メモリコントローラ１０は、リード方式の選択（ＳＴ２ａ）でＤＬＡＲｅａｄが選択された場合、ＤＬＡＲｅａｄの方式に従ってリードコマンドを不揮発性メモリ２０へ発行する（ＳＴ２９）。
【０１２２】
例えば、図１０に示すホストリード処理部１０ｆは、疲弊情報解析結果に応じたリード方式を（例えば、図９のＳＴ２ａの処理により）選択し、選択されたリード方式に従ったリード要求をＲｅａｄコマンド処理部１０ｄへ供給する（ＳＱ２８）。ホストリード処理部１０ｆは、ＦａｓｔＲｅａｄを選択した場合、ＦａｓｔＲｅａｄに従ったリード要求をＲｅａｄコマンド処理部１０ｄへ供給する。ホストリード処理部１０ｆは、ＮｏｒｍａｌＲｅａｄを選択した場合、ＮｏｒｍａｌＲｅａｄに従ったリード要求をＲｅａｄコマンド処理部１０ｄへ供給する。ホストリード処理部１０ｆは、ＤＬＡＲｅａｄを選択した場合、ＤＬＡＲｅａｄに従ったリード要求をＲｅａｄコマンド処理部１０ｄへ供給する。
【０１２３】
Ｒｅａｄコマンド処理部１０ｄは、リード要求に応じてリードコマンドを不揮発性メモリ２０へ発行する（ＳＱ２９）。Ｒｅａｄコマンド処理部１０ｄは、ＦａｓｔＲｅａｄに従ったリード要求に応じて、ＦａｓｔＲｅａｄに従ったリードコマンドを不揮発性メモリ２０へ発行する。Ｒｅａｄコマンド処理部１０ｄは、ＮｏｒｍａｌＲｅａｄに従ったリード要求に応じて、ＮｏｒｍａｌＲｅａｄに従ったリードコマンドを不揮発性メモリ２０へ発行する。Ｒｅａｄコマンド処理部１０ｄは、ＤＬＡＲｅａｄに従ったリード要求に応じて、ＤＬＡＲｅａｄに従ったリードコマンドを不揮発性メモリ２０へ発行する。
【０１２４】
これに応じて、不揮発性メモリ２０は、リードコマンドで指定された領域からのリード動作をリードコマンドで指定されたリード方式で行う。不揮発性メモリ２０は、リード動作が完了すると、リードデータをＲｅａｄコマンド処理部１０ｄへ返す（ＳＱ３０）。
【０１２５】
Ｒｅａｄコマンド処理部１０ｄは、ＥＣＣ  ｄｅｃｏｄｅｒを含み、検査リードコマンドの応答としてリードデータを不揮発性メモリ２０から受けると、リードデータに対して誤り訂正を行う（ＳＱ３１）。
【０１２６】
図９に戻って、メモリコントローラ１０は、誤り訂正に成功した場合（ＳＴ３１でＹｅｓ）、処理を終了する。
【０１２７】
メモリコントローラ１０は、誤り訂正に失敗した場合（ＳＴ３１でＮｏ）、リトライリード処理を実施し（ＳＴ３２）、処理を終了する。なお、ＳＴ３２では、図４に示すＳＴ６〜ＳＴ１０に相当する処理が行われてもよい。
【０１２８】
以上のように、実施形態では、メモリシステム１において、メモリコントローラ１０が、検査のためのリードコマンドを不揮発性メモリ２０に実行させ、その結果に応じてリード方式を選択し、本来のリード処理のためのリードコマンドをその選択されたリード方式で不揮発性メモリ２０に発行する。これにより、パフォーマンスの低下を抑制しつつ要求される信頼性を確保できるようなリード方式を選択し、その選択されたリード方式でリードコマンドを発行できる。この結果、信頼性を示す特性を推測する場合に比べて、メモリセルの実際の疲弊状態に応じたより適切なリード方式を選択することができ、パフォーマンス向上と信頼性向上とを容易に両立でき、パフォーマンス及び信頼性の両方の観点から総合的にリード性能を向上できる。すなわち、リード動作の信頼性を適切に確保できる。
【０１２９】
なお、検査リード処理（ＳＴ１）の対象範囲と検査リード結果の使いまわし範囲との組み合わせは、疲弊状態が近似的に揃っていると見なせる範囲に依存して、任意に設定され得る。例えば、検査リード処理（ＳＴ１）の対象範囲が１つのワードラインである場合に、その検査リード結果の使いまわし範囲は、複数の論理ブロックでもよいし、単一の論理ブロックでもよいし、複数の物理ブロックでもよいし、単一の物理ブロックでもよいし、複数のワードラインなどでもよい。検査リード処理の対象範囲に対する使いまわし範囲の規模が小さいほど精度が上がるが、必要メモリ量が増えるので、検査リード処理の対象範囲と検査リード結果の使いまわし範囲との組み合わせは、要求される精度とリソースとして確保可能なメモリ量とを考慮して決定され得る。
【０１３０】
あるいは、検査リード処理（ＳＴ１）の対象範囲は、論理ブロック又は物理ブロック中の特定のワードライン（例えば、特にＢＥＲが高いワードライン、特にＢＥＲが低いワードライン、論理ブロック又は物理ブロックの代表ワードライン）を優先的に選択しても良い。これにより、検査リードの回数・必要メモリ量を節約することができる。
【０１３１】
あるいは、検査リード処理（ＳＴ１）の対象範囲は、書き込み先ブロック・または書き上がり後所定時間以内の論理ブロック又は物理ブロックに限定してもよい。これにより、検査の対象をＰＤ状態に限定することができる。すなわち、書き込み処理／消去処理の回数に関連した疲弊に着目しているので、時間経過などで検査し直す必要がない。
【０１３２】
あるいは、検査リード処理（ＳＴ１）の対象範囲は、任意のブロックでもよい。この場合、ＤＲ／ＲＤ／温度ストレスを受けたブロックも対象となるので、再検査が必要になるが、ＤＲなどのストレスもケアできるというメリットがある。
【０１３３】
検査リードコマンドの発行タイミングは、所定の領域に書き込んでから所定の比較的短い時間（例えば、数十分以内〜数時間以内）としてもよい。これにより、ＰＤ状態に限定して検査を行うことができる。すなわち、書き込み処理／消去処理の回数に関連した疲弊に着目しているので、時間経過などで検査し直す必要がない。
【０１３４】
あるいは、検査リードコマンドの発行タイミングは、所定期間ごとであってもよいし、不揮発性メモリ２０がアイドル状態である期間中であってもよい。この場合、再検査が必要になるが、ＤＲなどのストレスもケアできるというメリットがある。
【０１３５】
リード方式選択（ＳＴ２）のアルゴリズムとして、ＤＲ／ＲＤ／温度／書き込み回数をさらに考慮して判断してもよい。これにより、リードデータの信頼性に関する情報（リトライ率、ビットエラー率）単独で判断するより精度を上げることができる。
【０１３６】
あるいは、リード方式選択（ＳＴ２）のアルゴリズムとして、疲弊情報としてエラービット数（ＦＢＣ）を使用する場合、ＥＣＣ強度に応じて切り替え基準を変化させてもよい。この場合、ＥＣＣ強度に応じた適切な切り替えができる。
【０１３７】
あるいは、リード方式選択（ＳＴ２）のアルゴリズムとして、論理ブロック又は物理ブロックの端部に相当するワードラインや各メモリセルグループＭＣＧ（図３参照）に保持される複数の物理ページのうちの一部の物理ページなどの特定箇所の結果に重みを付けてもよい。これにより、過剰な切り替えが起こることを防ぐことができる。
【０１３８】
あるいは、リード方式選択（ＳＴ２）のアルゴリズムとして、メモリシステム１全体で切り替えず、ｃｈ／ｃｈｉｐ／Ｂｌｏｃｋ／ＷＬ／ｐａｇｅで細かく切り替えてもよい。これにより、メモリセルアレイ２３内のばらつきに対応できる。
【０１３９】
あるいは、リード方式選択（ＳＴ２）のアルゴリズムとして、切り替えは、一方通行（例えば、図５に示すＦａｓｔＲｅａｄ→ＮｏｒｍａｌＲｅａｄ→ＤＬＡｒｅａｄの順）ではなく、エラービット数（ＦＢＣ）が回復した際には、リード方式を戻す（例えば、リード方式を、ＮｏｒｍａｌＲｅａｄ→ＦａｓｔＲｅａｄと戻したり、ＤＬＡｒｅａｄ→ＮｏｒｍａｌＲｅａｄと戻したりする）動きをしてもよい。これにより、ＤＲ／ＲＤ／温度ストレスを受けた状態で検査リードをした場合、Ｒｅｆｒｅｓｈでリトライ率が回復することに対応できる。また、ＰＤに限定して検査しても、ＥＣＣ強度が強化されてリトライ率が回復することに対応できる。
【０１４０】
あるいは、リード方式選択（ＳＴ２）のアルゴリズムとして、複数単位（例えば、複数の論理ブロック又は複数の物理ブロック）のリトライ率を統計処理して切り替え判断してもよい。例えば、複数単位についてリトライ率を平均化した値を用いてもよい。又は、ワーストＮブロックのリトライ率を平均化した値を用いてもよい。又は、リトライ率が正規分布に従うと仮定して、複数単位のリトライ率から母集団の正規分布を推定し、そのμ＋３σの値を用いてもよい。μは推定した正規分布の平均、σは標準偏差であり、μ＋３σはリトライ率の約９９．７％が該値以下になる値である。これにより、メモリセルアレイ２３内のばらつきに対応できる。
【０１４１】
あるいは、検査リード処理（ＳＴ１）の具体的な実装例として、検査リードコマンドは、メモリセルの疲弊状態を検査するためのリード指示と内部処理に応じたリード指示とを兼ねたコマンドとして発行されてもよい。この内部処理は、ライト処理中のベリファイ動作で検出されなかった不良を検出する検査と、メモリセルのデータ保持状態の検査とを含んでもよい。
【０１４２】
ライト処理中のベリファイ動作で検出されなかった不良を検出する検査は、例えば、ＲｅａｄＶｅｒｉｆｙを含む。ＲｅａｄＶｅｒｉｆｙは、ワードライン故障などの救済手法の１つである。例えば、プログラム完了通知を受けた場合であってもリードエラーが起こるケースがあるため、メモリコントローラ１０は、ＲｅａｄＶｅｒｉｆｙのリードコマンドを不揮発性メモリ２０に発行し、リードエラーの有無を確認する。  Ｐｒｏｇｒａｍ直後にＲｅａｄを行い、ある程度以上のエラーが発生していた場合、例えば、ＶｔｈＴｒａｃｋｉｎｇ及びＢＣＨエラー訂正を行い、訂正に失敗した場合はＰｒｏｇｒａｍＦａｉｌとして扱う。ＲｅａｄＶｅｒｉｆｙで行うＲｅａｄは通常のユーザデータリードと同じで、誤り訂正も行う。
【０１４３】
なお、検査リードコマンドが、メモリセルの疲弊状態を検査するためのリード指示とライト処理中のベリファイ動作で検出されなかった不良を検出する検査とを兼ねたコマンドとして発行される場合、検査リードコマンドの発行タイミングは、所定の領域に書き込んでから所定の比較的短い時間（例えば、数十分以内〜数時間以内）としてもよい。これにより、ＰＤ状態に限定して検査を行うことができる。すなわち、書き込み処理／消去処理の回数に関連した疲弊に着目しているので、時間経過などで検査し直す必要がない。
【０１４４】
メモリセルのデータ保持状態の検査は、例えば、パトロールリードを含む。パトロールリードは、リフレッシュ処理のためのパトロール処理に用いられる。パトロール処理では、各メモリセルに蓄積されたビット誤りの程度を評価する（たとえば、パトロールリードして誤り訂正を試みる）ことで、リフレッシュ対象ブロックの選択を行う。リフレッシュ処理では、選択されたリフレッシュ対象ブロックに含まれるデータを読み出し、誤り訂正を施した上で、ほかのブロック（あるいはリフレッシュ対象ブロック）に書き直す。これにより、メモリセルアレイ２３に格納されたデータの信頼性を向上できる。
【０１４５】
検査リード処理（ＳＴ１）は、図１１及び図１２に示すように実装されてもよい。図１１は、実施形態の変形例に係るメモリシステムの詳細動作（検査リード処理の他の実装例）を示すフローチャートである。図１２は、実施形態の変形例に係るメモリシステムの詳細動作（検査リード処理の他の実装例）を示すデータフロー図である。図１１及び図１２では、内部処理（内部リード処理）が検査リード処理を兼ねて行われる場合について例示している。
【０１４６】
図１１に示すように、メモリシステム１において、メモリコントローラ１０は、内部処理を行うべきと判断すると、内部処理を開始し（ＳＴ４１）、検査リード処理を行う（ＳＴ１ｂ）。
【０１４７】
検査リード処理（ＳＴ１ｂ）では、メモリコントローラ１０は、内部処理に応じたリード動作が行われるべき領域を対象領域として、対象領域の指定を含む検査リードコマンドを不揮発性メモリ２０に発行する（ＳＴ４２）。すなわち、メモリコントローラ１０は、メモリセルの疲弊状態を検査するためのリード指示と内部処理に応じたリード指示とを兼ねたコマンドとして、検査リードコマンドを不揮発性メモリ２０に発行し得る。
【０１４８】
メモリコントローラ１０は、検査リードコマンドの応答としてリードデータを不揮発性メモリ２０から受けると、リードデータに対して誤り訂正を行い、リードデータの誤り訂正に関する情報を取得する。
【０１４９】
すなわち、メモリコントローラ１０は、誤り訂正後のリードデータ及びリードデータの誤り訂正に関する情報を内部リード結果として取得し、内部リード結果に応じた所定の内部処理を行う（ＳＴ４３）。例えば、内部処理がＲｅａｄＶｅｒｉｆｙである場合、メモリコントローラ１０は、リードエラーになるか（すなわち、リードデータの誤り訂正でビットエラーが検出されるか）を確認する。内部処理がパトロールリードであれば、メモリコントローラ１０は、各メモリセルに蓄積されたビット誤りの程度を評価する（たとえば、パトロールリードして誤り訂正を試みる）ことで、リフレッシュ対象ブロックの選択を行う。
【０１５０】
また、メモリコントローラ１０は、リードデータの誤り訂正に関する情報として、リードクラスタ数とリトライ発生クラスタ数またはＦＢＣ情報を取得し、取得されたこれらの情報に基づいて、疲弊情報１４ａ１を生成又は更新してＲＡＭ１４上の疲弊情報保存領域１４ａに保存する（ＳＴ４４）。
【０１５１】
例えば、図１２に示す内部リード管理部１０ｈは、内部リード要求をＲｅａｄコマンド処理部１０ｄへ供給する（ＳＱ４１）。Ｒｅａｄコマンド処理部１０ｄは、内部リード要求に応じて、Ｒｅａｄコマンド（リードコマンド）を不揮発性メモリ２０へ発行する（ＳＱ４２）。
【０１５２】
これに応じて、不揮発性メモリ２０は、リードコマンドで指定された領域からのリード動作を行う。不揮発性メモリ２０は、リード動作が完了すると、リードデータをＲｅａｄコマンド処理部１０ｄへ返す（ＳＱ４３）。
【０１５３】
Ｒｅａｄコマンド処理部１０ｄは、検査リードコマンドの応答としてリードデータを不揮発性メモリ２０から受けると、リードデータに対して誤り訂正を行い、リードデータ及びＥＣＣ訂正結果またはＦＢＣ情報を内部リード結果として内部リード管理部１０ｈへ返す（ＳＱ４４）。
【０１５４】
また、Ｒｅａｄコマンド処理部１０ｄは、ＥＣＣ訂正結果またはＦＢＣ情報を検査リード処理部１０ｃへ供給する（ＳＱ４５）。検査リード処理部１０ｃは、リード量・リトライ回数・ＦＢＣ情報に応じた疲弊情報１４ａ１を生成してＲＡＭ１４上の疲弊情報保持領域１４ａへ保存する（ＳＱ４６）。
【０１５５】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１５６】
１  メモリシステム、１０  メモリコントローラ、２０  不揮発性メモリ。
【図１】
2020149123.tif 000003
【図２】
2020149123.tif 000004
【図３】
2020149123.tif 000005
【図４】
2020149123.tif 000006
【図５】
2020149123.tif 000007
【図６】
2020149123.tif 000008
【図７】
2020149123.tif 000009
【図８】
2020149123.tif 000010
【図９】
2020149123.tif 000011
【図１０】
2020149123.tif 000012
【図１１】
2020149123.tif 000013
【図１２】
2020149123.tif 000014