(57)【要約】【課題】リードレイテンシの悪化を低減すること。【解決手段】コントローラは、複数の第１のリード処理を実行し、ホストからリード要求を受信した場合、第２のリード処理を実行する。複数の第１のリード処理は、複数の候補値のうちのそれぞれ異なる候補値が判定電圧として適用されて実行される複数のリード処理である。コントローラは、複数の第１のリード処理のそれぞれにおいて、取得されたデータに対してエラー訂正を実行し、複数の第１のリード処理のそれぞれのエラー訂正の結果に基づいて第１候補値を取得する。第２のリード処理は、第１候補値よりも所定数だけ若い順位が設定された第２候補値が判定電圧として適用されて実行されるリード処理である。【選択図】図８
2019164850.tif 000002
【特許請求の範囲】
【請求項１】
ホストに接続可能なメモリシステムであって、
しきい値電圧が制御されるメモリセルトランジスタを備える不揮発性の第１メモリと、
前記しきい値電圧と判定電圧との比較に基づいて前記しきい値電圧に対応するデータを前記第１メモリから取得するリード処理を実行するコントローラと、
複数の候補値が記録された判定電圧情報が格納され、前記複数の候補値のそれぞれは前記しきい値電圧の変化の進行に対応した順位が設定された、第２メモリと、
を備え、
前記コントローラは、
複数の第１のリード処理を実行し、前記複数の第１のリード処理は、前記複数の候補値のうちのそれぞれ異なる候補値が前記判定電圧として適用されて実行される複数のリード処理であり、前記複数の第１のリード処理のそれぞれにおいて、取得されたデータに対してエラー訂正を実行し、前記複数の第１のリード処理のそれぞれのエラー訂正の結果に基づいて第１候補値を取得し、
前記ホストからリード要求を受信した場合、第２のリード処理を実行し、前記第２のリード処理は、前記第１候補値よりも所定数だけ若い順位が設定された第２候補値が前記判定電圧として適用されて実行されるリード処理である、
メモリシステム。
【請求項２】
前記コントローラは、前記ホストから前記リード要求を受信した場合、最初に、前記第２のリード処理を実行し、前記第２のリード処理によって取得されたデータに対してエラー訂正を実行し、当該エラー訂正が失敗した場合、第３のリード処理を実行し、
前記第３のリード処理は、前記第２候補値よりも老いた順位が設定された第３候補値が前記判定電圧として適用されて実行されるリード処理である、
請求項１に記載のメモリシステム。
【請求項３】
前記コントローラは、前記ホストから前記リード要求を受信した場合、最初に、第３のリード処理を実行し、前記第３のリード処理によって取得されたデータに対してエラー訂正を実行し、当該エラー訂正が失敗した場合、前記第２のリード処理を実行し、
前記第３のリード処理は、前記第１候補値が前記判定電圧として適用されて実行されるリード処理である、
請求項１に記載のメモリシステム。
【請求項４】
前記第１メモリは、前記メモリセルトランジスタを含む第１の複数のメモリセルトランジスタを備え、
前記第１メモリは、複数の第１記憶領域を備え、
各第１記憶領域は、前記第１の複数のメモリセルトランジスタのうちの第２の複数のメモリセルトランジスタによって構成され、
前記コントローラは、前記複数の第１記憶領域のうちの１つに対して前記複数の第１のリード処理を実行して前記第１候補値を取得し、前記複数の第１記憶領域に対して前記第２候補値を共通に適用する、
請求項１に記載のメモリシステム。
【請求項５】
前記第１メモリは、複数のＮＡＮＤストリングと、前記複数のＮＡＮＤストリングに交わる複数のワード線とを備え、
前記第１メモリは、それぞれ前記複数の第１記憶領域を備えた複数の第３記憶領域を備え、
前記複数の第３記憶領域は、前記複数のワード線の並び方向に配列され、
前記複数の第３記憶領域は、第１の数の第１記憶領域を備えた第４記憶領域と、前記第１の数と異なる第２の数の第１記憶領域を備えた第５記憶領域と、を含む、
請求項４に記載のメモリシステム。
【請求項６】
前記第１の数は前記第２の数よりも少なく、前記第４記憶領域は、前記第５記憶領域よりも前記複数のＮＡＮＤストリングの端側に位置する、
請求項５に記載のメモリシステム。
【請求項７】
前記第１候補値は、前記複数の第１のリード処理のうちの前記エラー訂正が成功した際に適用された前記判定電圧である、
請求項１に記載のメモリシステム。
【請求項８】
前記複数の第１のリード処理は、前記複数の候補値がそれぞれに設定された順位の順番で前記判定電圧として適用されて実行される複数のリード処理であり、
前記第１候補値は、前記複数の第１のリード処理のうちの最初に前記エラー訂正が成功した際に適用された前記判定電圧である、
請求項１に記載のメモリシステム。
【請求項９】
ホストに接続可能なメモリシステムであって、
しきい値電圧が制御されるメモリセルトランジスタを備える不揮発性のメモリと、
前記しきい値電圧と判定電圧との比較に基づいて前記しきい値電圧に対応するデータを前記メモリから取得するリード処理を実行するコントローラと、
を備え、
前記コントローラは、
複数の第１のリード処理を実行し、前記複数の第１のリード処理は、それぞれ異なる複数の第１電圧値が前記判定電圧として適用されて実行される複数のリード処理であり、前記複数の第１のリード処理の結果に基づいて統計処理を実行することによって第２電圧値を演算し、
前記ホストからリード要求を受信した場合、第２のリード処理を実行し、前記第２のリード処理は、前記第２電圧値が前記判定電圧として適用されて実行されるリード処理である、
メモリシステム。
【請求項１０】
前記メモリは、前記メモリセルトランジスタを含む第１の複数のメモリセルトランジスタを備え、
前記メモリは複数の第１記憶領域を備え、各第１記憶領域は、リード処理が実行される単位であり、
各第１記憶領域は、前記第１の複数のメモリセルトランジスタのうちの第２の複数のメモリセルトランジスタによって構成され、
前記複数の第１記憶領域は、１以上の第２記憶領域を含み、
前記コントローラは、前記１以上の第２記憶領域のそれぞれに対し、前記複数の第１のリード処理を実行し、前記１以上の第２記憶領域のそれぞれに対して実行された前記複数の第１のリード処理の結果に対して前記統計処理を実行することによって前記第２電圧値を演算し、
前記複数の第１記憶領域に対して前記第２電圧値を共通に適用する、
請求項９に記載のメモリシステム。
【請求項１１】
前記メモリは、複数のＮＡＮＤストリングと、前記複数のＮＡＮＤストリングに直交する複数のワード線とを備え、
前記メモリは、それぞれ前記複数の第１記憶領域を備えた複数の第３記憶領域を備え、
前記複数の第３記憶領域は、前記複数のワード線の並び方向に配列され、
前記複数の第３記憶領域は、第１の数の第１記憶領域を備えた第４記憶領域と、前記第１の数と異なる第２の数の第１記憶領域を備えた第５記憶領域と、を含む、
請求項１０に記載のメモリシステム。
【請求項１２】
前記第１の数は前記第２の数よりも少なく、前記第４記憶領域は、前記第５記憶領域よりも前記複数のＮＡＮＤストリングの端側に位置する、
請求項１１に記載のメモリシステム。
【請求項１３】
前記コントローラは前記複数の第１のリード処理のそれぞれにおいて、取得されたデータに対してエラー訂正を実行し、前記複数の第１のリード処理のそれぞれにかかる当該エラー訂正が成功したか否かを示す結果に対して前記統計処理を実行することによって前記第２電圧値を演算する、
請求項９に記載のメモリシステム。
【請求項１４】
前記複数の第１電圧値のそれぞれには前記しきい値電圧の変化の進行に対応した順位が設定され、
前記コントローラは、前記統計処理を実行することによって前記複数の第１電圧値のうちの一を前記第２電圧値として取得し、前記第２のリード処理によって取得されたデータに対してエラー訂正を実行し、当該エラー訂正が失敗した場合、第３のリード処理を実行し、
前記第３のリード処理は、前記複数の第１電圧値のうちの前記第２電圧値の順位より変化の進行が進んだ順位が設定された第１電圧値が適用されたリード処理である、
請求項１３に記載のメモリシステム。
【請求項１５】
前記メモリは、前記メモリセルトランジスタを含む第１の複数のメモリセルトランジスタを備え、
前記メモリは複数の第１記憶領域を備え、
各第１記憶領域は、前記第１の複数のメモリセルトランジスタのうちの第２の複数のメモリセルトランジスタによって構成され、
前記複数の第１記憶領域は、１以上の第２記憶領域を含み、
前記複数の第１のリード処理は、しきい値電圧に対するメモリセルトランジスタの数の分布を測定し、測定した結果に基づいて前記判定電圧の候補値を取得する処理であり、
前記コントローラは、前記１以上の第２記憶領域のそれぞれに対して前記複数の第１のリード処理を実行し、前記１以上の第２記憶領域のそれぞれにかかる候補値に対して前記統計処理を実行することによって前記第２電圧値を演算し、
前記複数の第１記憶領域に対して前記第２電圧値を共通に適用する、
請求項９に記載のメモリシステム。
【請求項１６】
前記コントローラは、前記１以上の第２記憶領域のそれぞれに対し、エラー訂正の失敗なくリード可能な範囲を取得し、前記統計処理において前記範囲に基づく重み付けを実行する、
請求項１５に記載のメモリシステム。
【請求項１７】
前記コントローラは、前記１以上の第２記憶領域のそれぞれに対して第３のリード処理を実行し、前記第３のリード処理は対応する候補値を適用してリード処理が実行されて取得されたデータに含まれるエラービット数をカウントする処理であり、前記統計処理において前記エラービット数に基づく重み付けを実行する、
請求項１５に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本実施形態は、メモリシステムに関する。
【背景技術】
【０００２】
従来、メモリセルトランジスタを有するメモリシステムが広く知られている。そのようなメモリシステムにおいては、リード処理においては、メモリセルトランジスタのしきい値電圧と判定電圧との比較に基づいて、そのメモリセルトランジスタに保持されるデータが判定される。
【０００３】
しかしながら、メモリセルトランジスタのしきい値電圧は、種々の要因によって変化し得る。これに対し、メモリシステムは、判定電圧の値の変更が可能に構成され、リード処理においてデータの誤判定が発生した場合には判定電圧の値を変更してリード処理をリトライすることができる。データの誤判定の発生およびリード処理のリトライは、リードレイテンシの悪化の一因となる。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
一つの実施形態は、リードレイテンシの悪化を低減したメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【０００５】
一つの実施形態によれば、メモリシステムは、ホストに接続可能である。メモリシステムは、不揮発性の第１メモリと、コントローラと、第２メモリと、を備える。第１メモリは、しきい値電圧が制御されるメモリセルトランジスタを備える。コントローラは、しきい値電圧と判定電圧との比較に基づいてしきい値電圧に対応するデータを第１メモリから取得するリード処理を実行する。第２メモリには、複数の候補値が記録された判定電圧情報が格納される。複数の候補値のそれぞれはしきい値電圧の変化に対応した順位が設定されている。コントローラは、複数の第１のリード処理を実行する。複数の第１のリード処理は、複数の候補値のうちのそれぞれ異なる候補値が前記判定電圧として適用されて実行される複数のリード処理である。コントローラは、複数の第１のリード処理のそれぞれにおいて、取得されたデータに対してエラー訂正を実行し、複数の第１のリード処理のそれぞれのエラー訂正の結果に基づいて第１候補値を取得する。コントローラは、ホストからのリード要求を受信した場合、第２のリード処理を実行する。第２のリード処理は、第１候補値よりも所定数だけ若い順位が設定された第２候補値が判定電圧として適用されて実行されるリード処理である。
【図面の簡単な説明】
【０００６】
【図１】図１は、第１の実施形態のメモリシステムの構成例を示す図である。
【図２】図２は、第１の実施形態のメモリチップの構成例を示す図である。
【図３】図３は、第１の実施形態のブロックＢＬＫの回路構成を示す図である。
【図４】図４は、第１の実施形態のブロックＢＬＫの一部領域の断面図である。
【図５】図５は、第１の実施形態のメモリセルの取り得るしきい値電圧の一例を示す図である。
【図６】図６は、第１の実施形態のメモリセルの取り得るしきい値電圧の別の一例を示す図である。
【図７】図７は、第１の実施形態のシフトインデックステーブルのデータ構造の一例を示す図である。
【図８】図８は、第１の実施形態のコントローラの学習値の決定方法の概略を説明するための図である。
【図９】図９は、第１の実施形態の管理領域の設定方法を説明するための図である。
【図１０】図１０は、第１の実施形態の管理領域の設定方法を説明するための図である。
【図１１】図１１は、第１の実施形態のメモリシステムに保持される各種データを説明する図である。
【図１２】図１２は、第１の実施形態の学習値テーブルのデータ構成例を示す図である。
【図１３】図１３は、第１の実施形態のパトロールリードの手順の概略を示すフローチャートである。
【図１４】図１４は、第１の実施形態の学習値生成処理の手順を説明するフローチャートである。
【図１５】図１５は、第１の実施形態のホストリードの手順を示すフローチャートである。
【図１６】図１６は、第２の実施形態の学習値生成処理の手順を説明するフローチャートである。
【図１７】図１７は、第２の実施形態のホストリードの手順を示すフローチャートである。
【図１８】図１８は、第３の実施形態の学習値生成処理の手順を説明するフローチャートである。
【図１９】図１９は、第３の実施形態のホストリードの手順を示すフローチャートである。
【図２０】図２０は、第４の実施形態の学習値生成処理の手順を説明するフローチャートである。
【図２１】図２１は、第４の実施形態のホストリードの手順を示すフローチャートである。
【図２２】図２２は、第５の実施形態の統計処理の方法を説明するフローチャートである。
【図２３】図２３は、第６の実施形態の統計処理の方法を説明するフローチャートである。
【図２４】図２４は、第７の実施形態の管理領域の設定方法を説明するための図である。
【発明を実施するための形態】
【０００７】
以下に添付図面を参照して、実施形態にかかるメモリシステムを詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【０００８】
（第１の実施形態）
図１は、第１の実施形態のメモリシステムの構成例を示す図である。図１に示されるように、メモリシステム１は、ホスト機器３００と接続可能である。ホスト機器３００は、例えば、サーバ、パーソナルコンピュータ、またはモバイル型の情報処理装置などが該当する。メモリシステム１は、ホスト機器３００の外部記憶装置として機能する。ホスト機器３００は、メモリシステム１に対して要求を発行することができる。要求は、リード要求およびライト要求を含む。
【０００９】
メモリシステム１は、ＮＡＮＤ型フラッシュメモリ１００として、１以上のメモリチップ１０１、および１つのコントローラ２００を備える。ここでは、メモリシステム１は、１以上のメモリチップ１０１として、メモリチップ１０１＿０、１０１＿１、１０１＿２、１０１＿３を備える。なお、メモリシステム１に具備されるメモリチップ１０１の数は、４に限定されない。
【００１０】
各メモリチップ１０１は、複数のメモリセルトランジスタを備え、データを不揮発に記憶することができる。メモリチップ１０１は、ＮＡＮＤバス４００によってコントローラ２００と接続されている。
【００１１】
図２は、メモリチップ１０１の構成例を示す図である。図示するようにメモリチップ１０１は、アクセス回路１１０およびメモリセルアレイ１１１を備える。
【００１２】
メモリセルアレイ１１１は、複数のプレーン（プレーン０、プレーン１）に分割されている。各プレーンは、並列にアクセスされることが可能なサブアレイである。各プレーンは、各々が複数の不揮発性メモリセルトランジスタの集合である複数のブロックＢＬＫ（ＢＬＫ０、ＢＬＫ１、…）を備える。ブロックＢＬＫの各々は、それぞれがワード線およびビット線に関連付けられたメモリセルトランジスタの集合である複数のストリングユニットＳＵ（ＳＵ０、ＳＵ１、…）を備える。ストリングユニットＳＵの各々は、メモリセルトランジスタが直列接続された複数のＮＡＮＤストリング１１４を備える。なお、ストリングユニットＳＵ内のＮＡＮＤストリング１１４の数は任意である。なお、メモリセルアレイ１１１が備えるプレーンの数は２に限定されない。また、メモリセルアレイ１１１は、必ずしも分割されていなくてもよい。
【００１３】
アクセス回路１１０は、例えば、ロウデコーダ、カラムデコーダ、センスアンプ、ラッチ回路、および電圧発生回路を含む。アクセス回路１１０は、コントローラ２００からの命令に応じて、各プレーンのメモリセルアレイ１１１に対し、プログラム処理、リード処理、およびイレース処理を実行する。
【００１４】
図３は、第１の実施形態のブロックＢＬＫの回路構成を示す図である。なお、各ブロックＢＬＫは、同一の構成を有している。ブロックＢＬＫは、例えば４つのストリングユニットＳＵ０〜ＳＵ３を有する。各ストリングユニットＳＵは、複数のＮＡＮＤストリング１１４を含む。
【００１５】
ＮＡＮＤストリング１１４の各々は、例えば６４個のメモリセルトランジスタＭＴ（ＭＴ０〜ＭＴ６３）および選択トランジスタＳＴ１、ＳＴ２を含んでいる。メモリセルトランジスタＭＴは、制御ゲートと電荷蓄積層とを備え、データを不揮発に保持する。そして６４個のメモリセルトランジスタＭＴ（ＭＴ０〜ＭＴ６３）は、選択トランジスタＳＴ１のソースと選択トランジスタＳＴ２のドレインとの間に直列接続されている。なお、メモリセルトランジスタＭＴは、電荷蓄積層に絶縁膜を用いたＭＯＮＯＳ型であってもよいし、電荷蓄積層に導電膜を用いたＦＧ型であってもよい。さらに、ＮＡＮＤストリング１１４内のメモリセルトランジスタＭＴの個数は６４個に限定されない。
【００１６】
ストリングユニットＳＵ０〜ＳＵ３の各々における選択トランジスタＳＴ１のゲートは、それぞれ選択ゲート線ＳＧＤ０〜ＳＧＤ３に接続される。これに対してストリングユニットＳＵ０〜ＳＵ３の各々における選択トランジスタＳＴ２のゲートは、例えば選択ゲート線ＳＧＳに共通接続される。ストリングユニットＳＵ０〜ＳＵ３の各々における選択トランジスタＳＴ２のゲートは、ストリングユニットＳＵ毎に異なる選択ゲート線ＳＧＳ０〜ＳＧＳ３に接続されてもよい。同一のブロックＢＬＫ内にあるメモリセルトランジスタＭＴ０〜ＭＴ６３の制御ゲートは、それぞれワード線ＷＬ０〜ＷＬ６３に共通接続される。
【００１７】
ストリングユニットＳＵ内にある各ＮＡＮＤストリング１１４の選択トランジスタＳＴ１のドレインは、それぞれ異なるビット線ＢＬ（ＢＬ０〜ＢＬ（Ｌ−１）、但しＬは２以上の自然数）に接続される。また、ビット線ＢＬは、複数のブロックＢＬＫ間で各ストリングユニットＳＵ内にある１つのＮＡＮＤストリング１１４を共通に接続する。更に、各選択トランジスタＳＴ２のソースは、ソース線ＳＬに共通に接続されている。
【００１８】
つまりストリングユニットＳＵは、異なるビット線ＢＬに接続され、且つ同一の選択ゲート線ＳＧＤに接続されたＮＡＮＤストリング１１４の集合である。またブロックＢＬＫは、ワード線ＷＬを共通にする複数のストリングユニットＳＵの集合である。そしてメモリセルアレイ１１１は、ビット線ＢＬを共通にする複数のブロックＢＬＫの集合である。
【００１９】
アクセス回路１１０による１つのプレーンに対するプログラム処理およびリード処理は、１つのストリングユニットＳＵにおける１つのワード線ＷＬに接続されたメモリセルトランジスタＭＴに対して、一括して行われる。以降、１つのプレーンに対するプログラム処理およびリード処理の際、一括して選択されるメモリセルトランジスタＭＴの群を「メモリセルグループＭＣＧ」と表記する。そして、１つのメモリセルグループＭＣＧにプログラムされる、あるいはリードされる１ビットのデータの集まりを「ページ」と表記する。
【００２０】
アクセス回路１１０による１つのプレーンに対するイレース処理は、ブロックＢＬＫ単位、またはブロックＢＬＫよりも小さい単位で行うことができる。イレース方法に関しては、例えば“NONVOLATILE  SEMICONDUCTOR  MEMORY  DEVICE”という２０１１年９月１８日に出願された米国特許出願１３／２３５，３８９号に記載されている。また、イレース方法に関しては、“NON-VOLATILE  SEMICONDUCTOR  STORAGE  DEVICE”という２０１０年１月２７日に出願された米国特許出願１２／６９４，６９０号に記載されている。更に、“NONVOLATILE  SEMICONDUCTOR  MEMORY  DEVICE  AND  DATA  ERASE  METHOD  THEREOF”という２０１２年５月３０日に出願された米国特許出願１３／４８３，６１０号に記載されている。これらの特許出願は、その全体が本願明細書において参照により援用されている。
【００２１】
なお、それぞれ異なるプレーンまたは異なるメモリチップ１０１に属する複数のページによって１つの論理ページが構成され、コントローラ２００は１つの論理ページを構成する複数のページに対して並列にプログラム処理またはリード処理を実行してもよい。また、それぞれ異なるプレーンまたは異なるメモリチップ１０１に具備される複数のブロックＢＬＫによって１つの論理ブロックが構成され、コントローラ２００は、１つの論理ブロックを構成する複数のブロックＢＬＫに対して並列にイレース処理を実行してもよい。
【００２２】
図４は、第１の実施形態のブロックＢＬＫの一部領域の断面図である。図示するように、ｐ型ウェル領域１０上に、複数のＮＡＮＤストリング１１４が形成されている。すなわち、ウェル領域１０上には、選択ゲート線ＳＧＳとして機能する例えば４層の配線層１１、ワード線ＷＬ０〜ＷＬ６３として機能する６４層の配線層１２、および選択ゲート線ＳＧＤとして機能する例えば４層の配線層１３が、順次積層されている。積層された配線層間には、図示せぬ絶縁膜が形成されている。
【００２３】
そして、これらの配線層１３、１２、１１を貫通してウェル領域１０に達するピラー状の導電体１４が形成されている。導電体１４の側面には、ゲート絶縁膜１５、電荷蓄積層（絶縁膜または導電膜）１６、およびブロック絶縁膜１７が順次形成され、これらによってメモリセルトランジスタＭＴ、並びに選択トランジスタＳＴ１およびＳＴ２が形成されている。導電体１４は、ＮＡＮＤストリング１１４の電流経路として機能し、各トランジスタのチャネルが形成される領域となる。そして導電体１４の上端は、ビット線ＢＬとして機能する金属配線層１８に接続される。
【００２４】
ウェル領域１０の表面領域内には、ｎ＋型不純物拡散層１９が形成されている。拡散層１９上にはコンタクトプラグ２０が形成され、コンタクトプラグ２０は、ソース線ＳＬとして機能する金属配線層２１に接続される。更に、ウェル領域１０の表面領域内には、ｐ＋型不純物拡散層２２が形成されている。拡散層２２上にはコンタクトプラグ２３が形成され、コンタクトプラグ２３は、ウェル配線ＣＰＷＥＬＬとして機能する金属配線層２４に接続される。ウェル配線ＣＰＷＥＬＬは、ウェル領域１０を介して導電体１４に電位を印加するための配線である。
【００２５】
以上の構成が、半導体基板に平行な第２方向Ｄ２に複数配列されており、第２方向Ｄ２に並ぶ複数のＮＡＮＤストリング１１４の集合によってストリングユニットＳＵが形成される。
【００２６】
なお、メモリセルアレイ１１１は、上記の構成以外の構成を有し得る。すなわちメモリセルアレイ１１１の構成については、例えば、“三次元積層型不揮発性半導体メモリ(THREE  DIMENSIONAL  STACKED  NONVOLATILE  SEMICONDUCTOR  MEMORY)”という２００９年３月１９日に出願された米国特許出願１２／４０７，４０３号に記載されている。また、メモリセルアレイ１１１の構成については、“三次元積層型不揮発性半導体メモリ(THREE  DIMENSIONAL  STACKED  NONVOLATILE  SEMICONDUCTOR  MEMORY)”という２００９年３月１８日に出願された米国特許出願１２／４０６，５２４号、“不揮発性半導体記憶装置およびその製造方法(NON-VOLATILE  SEMICONDUCTOR  STORAGE  DEVICE  AND  METHOD  OF  MANUFACTURING  THE  SAME)”という２００８年１２月９日に出願された米国特許出願１２／６７９，９９１号、“半導体メモリおよびその製造方法(SEMICONDUCTOR  MEMORY  AND  METHOD  FOR  MANUFACTURING  SAME)”という２００９年３月２３日に出願された米国特許出願１２／５３２，０３０号に記載されている。これらの特許出願は、その全体が本願明細書において参照により援用されている。
【００２７】
以降では、メモリセルトランジスタＭＴを、単に、メモリセルと表記する。
【００２８】
図５は、第１の実施形態のメモリセルの取り得るしきい値電圧の一例を示す図である。縦軸は、メモリセルの数を示しており、横軸は、しきい値電圧を示している。即ち、本図は、しきい値電圧に対するメモリセルの分布を示している。以下、本実施形態では、メモリセルが８値のデータを保持可能な場合について説明するが、保持可能なデータは８値に限定されない。本実施形態においては、メモリセルが２値以上のデータ（１ビット以上のデータ）を保持可能であればよい。
【００２９】
図５に示されるように、しきい値電圧の取り得る範囲は、８つの範囲に区分される。この８つの区分を、しきい値電圧が低いほうから順に、“Ｅｒ”ステート、“Ａ”ステート、“Ｂ”ステート、“Ｃ”ステート、“Ｄ”ステート、“Ｅ”ステート、“Ｆ”ステート、および“Ｇ”ステートと呼ぶことにする。各メモリセルのしきい値電圧は、アクセス回路１１０によって、“Ｅｒ”ステート、“Ａ”ステート、“Ｂ”ステート、“Ｃ”ステート、“Ｄ”ステート、“Ｅ”ステート、“Ｆ”ステート、および“Ｇ”ステート、の何れかに属するように、制御される。その結果、しきい値電圧に対するメモリセルの数をプロットした場合、メモリセルは、理想的には、本図に示されるように、それぞれ異なるステートに属する互いに重ならない８つの分布を形成する。
【００３０】
８つのステートは、３ビットのデータに対応する。本図の例によれば、“Ｅｒ”ステートは“１１１”に対応し、“Ａ”ステートは“１１０”に対応し、“Ｂ”ステートは“１００”に対応し、“Ｃ”ステートは“０００”に対応し、“Ｄ”ステートは“０１０”に対応し、“Ｅ”ステートは“０１１”に対応し、“Ｆ”ステートは“００１”に対応し、“Ｇ”ステートは“１０１”に対応する。このように、各メモリセルは、そのしきい値電圧が属するステートに応じたデータを保持することができる。なお、図５に示す対応関係は、データコーディングの一例である。データコーディングは本図の例に限定されない。
【００３１】
なお、１つのメモリセルに保持される３ビットのデータのうち、ＬＳＢ（Least  Significant  Bit）をロアービット、ＭＳＢ（Most  Significant  Bit）をアッパービット、ＬＳＢとＭＳＢとの間のビットをミドルビット、と表記する。同一のメモリセルグループＭＣＧに属する全てのメモリセルトランジスタＭＴのロアービットの集合を、ロアーページと表記する。同一のメモリセルグループＭＣＧに属する全てのメモリセルトランジスタＭＴのミドルビットの集合を、ミドルページと表記する。同一のメモリセルグループＭＣＧに属する全てのメモリセルトランジスタＭＴのアッパービットの集合を、アッパーページと表記する。
【００３２】
しきい値電圧は、イレース処理によって“Ｅｒ”ステートに低下せしめられる。また、しきい値電圧は、プログラム処理によって、“Ｅｒ”ステートに維持されるか、または“Ａ”ステート、“Ｂ”ステート、“Ｃ”ステート、“Ｄ”ステート、“Ｅ”ステート、“Ｆ”ステート、および“Ｇ”ステート、の何れかに至るまで、上昇せしめられる。
【００３３】
具体的には、プログラム処理においては、アクセス回路１１０は、カラムアドレスに対応したビット線ＢＬを選択する。アクセス回路１１０は、選択されたビット線ＢＬの電位をゼロとする。アクセス回路１１０は、ロウアドレスに対応したワード線ＷＬを選択し、選択されたワード線ＷＬに、プログラミングパルスを印加する。すると、選択されたビット線ＢＬおよび選択されたワード線ＷＬとの交点に位置するメモリセルの電荷蓄積層１６に電子が注入され、その結果、メモリセルのしきい値電圧が上昇する。アクセス回路１１０は、所定のタイミングでデータのリードを行うことで、メモリセルのしきい値電圧がライトデータのデータに対応した目標のステートに到達したか否かを確認する（ベリファイリード）。アクセス回路１１０は、メモリセルのしきい値電圧が目標のステートに到達するまで、プログラムパルスの印加を継続する。
【００３４】
以降、プログラム処理によってあるステートにしきい値電圧が設定されたメモリセルを、そのステートに属するメモリセル、と表記することがある。
【００３５】
隣接する２つのステート間には、判定電圧が設定される。例えば、図５に例示されるように、“Ｅｒ”ステートと“Ａ”ステートとの間に判定電圧Ｖｒａが設定され、“Ａ”ステートと“Ｂ”ステートとの間に判定電圧Ｖｒｂが設定され、“Ｂ”ステートと“Ｃ”ステートとの間に判定電圧Ｖｒｃが設定され、“Ｃ”ステートと“Ｄ”ステートとの間に判定電圧Ｖｒｄが設定され、“Ｄ”ステートと“Ｅ”ステートとの間に判定電圧Ｖｒｅが設定され、“Ｅ”ステートと“Ｆ”ステートとの間に判定電圧Ｖｒｆが設定され、“Ｆ”ステートと“Ｇ”ステートとの間に判定電圧Ｖｒｇが設定される。リード処理においては、複数種類の判定電圧によって、メモリセルが属するステートに対応付けられたデータが判定される。
【００３６】
例えば図５に示されたデータコーディングが適用される場合を考える。メモリセルが“Ｅｒ”ステート、“Ｅ”ステート、“Ｆ”ステート、および“Ｇ”ステート、の何れかに属する場合、そのメモリセルが保持するロアービットの値は“１”である。メモリセルが“Ａ”ステート、“Ｂ”ステート、“Ｃ”ステート、および“Ｄ”ステートの何れかに属する場合、そのメモリセルが保持するロアービットの値は“０”である。よって、ＶｒａおよびＶｒｅの２種類の判定電圧を使用することによって、ロアーページのデータが判定できる。
【００３７】
メモリセルが“Ｅｒ”ステート、“Ａ”ステート、“Ｄ”ステート、および“Ｅ”ステートの何れかに属する場合、そのメモリセルが保持するミドルビットの値は“１”である。メモリセルが“Ｂ”ステート、“Ｃ”ステート、“Ｆ”ステート、および“Ｇ”ステートの何れかに属する場合、そのメモリセルが保持するミドルビットの値は“０”である。よって、Ｖｒｂ、Ｖｒｄ、およびＶｒｆの３種類の判定電圧を使用することによって、ミドルページのデータが判定できる。
【００３８】
メモリセルが“Ｅｒ”ステート、“Ａ”ステート、“Ｂ”ステート、および“Ｇ”ステートの何れかに属する場合、そのメモリセルが保持するアッパービットの値は“１”である。メモリセルが“Ｃ”ステート、“Ｄ”ステート、“Ｅ”ステート、および“Ｆ”ステートの何れかに属する場合、そのメモリセルが保持するアッパービットの値は“０”である。よって、ＶｒｃおよびＶｒｇの２種類の判定電圧を使用することによって、アッパーページのデータが判定できる。
【００３９】
このように、データの判定に使用される判定電圧の種類は、リード対象のページの種類に応じて異なる。アクセス回路１１０は、リード処理では、リード対象のページの種類に応じた複数種類の判定電圧を使用する。
【００４０】
さらに具体的に説明すると、リード処理においては、アクセス回路１１０は、ビット線ＢＬに電源電圧ＶＤＤをプリチャージする。アクセス回路１１０は、ロウアドレスに対応したワード線ＷＬを選択する。アクセス回路１１０は、非選択のワード線ＷＬに属するメモリセルを導通状態にし、選択されたワード線ＷＬに、リード対象のページの種類に対応する複数種類の判定電圧を順次印加する。アクセス回路１１０は、プリチャージにより蓄えられた電荷がどの判定電圧が印加されたときにソース線ＳＬに流出したかを検知することによって、対象のメモリセルが属するステートに対応するデータを判定する。アクセス回路１１０は、判定されたデータをラッチ回路に格納する。コントローラ２００は、例えばリードイネーブル（ＲＥ）信号をトグルさせることによって、ラッチ回路内のデータをリードデータとして取得することができる。
【００４１】
なお、図５では、メモリセルが、互いに重ならない８つの分布を形成する場合を説明した。しかしながら、メモリセルのしきい値電圧は、使用履歴に応じて変化し得る。使用履歴は、当該メモリセルへのアクセス、当該メモリセルへのプログラム完了時からの経過時間および温度履歴、当該メモリセルに隣接するメモリセルへのアクセス、当該メモリセルの疲弊状態、などを含む。メモリセルの疲弊状態は、当該メモリセルに対するイレース処理・プログラム処理の実行回数、および当該メモリセルに対するイレース処理・プログラム処理の際の温度に影響される。メモリセルのしきい値電圧が変化し得るので、現実的には、リード処理時において、ステート毎の分布が互いに重なり合った状態になっている場合がある。
【００４２】
図６は、第１の実施形態のメモリセルの取り得るしきい値電圧の別の一例を示す図である。ここでは、説明を簡単にするために、“Ａ”ステートおよび“Ｂ”ステートのいずれかに属するメモリセルの分布を図示している。実線は、“Ａ”ステートおよび“Ｂ”ステートのいずれかに属するメモリセルの分布を示している。破線は、“Ａ”ステートに属するメモリセルの分布を示し、一点鎖線は、“Ｂ”ステートに属するメモリセルの分布を示している。本図の例では、“Ａ”ステートに属するメモリセルの分布の裾野と“Ｂ”ステートに属するメモリセルの分布の裾野とが重なり合っている。言い換えると、“Ａ”ステートに属するメモリセルのしきい値電圧の最大値が判定電圧Ｖｒｂを超えており、かつ、“Ｂ”ステートに属するメモリセルのしきい値電圧の最小値が判定電圧Ｖｒｂを下回っている。“Ａ”ステートに属し、かつ、しきい値電圧が判定電圧Ｖｒｂよりも大きいメモリセルがリードされた場合、そのメモリセルは“Ｂ”ステートに属するとして認識される。即ち、“１１０”としてプログラムされたデータが“１００”としてリードされる。“Ｂ”ステートに属し、かつ、しきい値電圧が判定電圧Ｖｒｂよりも小さいメモリセルがリードされた場合、そのメモリセルは“Ａ”ステートに属するとして認識される。即ち、“１００”としてプログラムされたデータが“１１０”としてリードされる。
【００４３】
このように、リードされたデータは、しきい値電圧の変化によって、プログラムされた時点での値から変化した場合がある。データやしきい値電圧の変化に対しては、コントローラ２００は、エラー訂正と、判定電圧のシフトと、によって対応する。具体的には、コントローラ２００では、後述のＥＣＣ（error  correction  code）回路２０６によって、リードデータに対してエラー訂正を実行する。エラー訂正が失敗した場合には、コントローラ２００は、判定電圧を変えてリード処理をリトライする。リトライされるリード処理を、リトライリードと表記する。なお、エラー訂正が失敗するとは、変化後のデータから変化前のデータを復元できないことをいう。具体的には、エラー訂正が失敗するとは、リードデータに含まれるエラービットが訂正できないことをいう。エラー訂正が成功するとは、リードデータに含まれる全てのエラービットが訂正されたことをいう。コントローラ２００は、エラー訂正が成功するまで、判定電圧を変化させながらリトライリードを繰り返し実行する。
【００４４】
なお、判定電圧の値は、種々の量で表現され得る。また、判定電圧の値は、種々の表現で指示され得る。本実施形態では、一例として、判定電圧の種類（Ｖｒａ〜Ｖｒｇ）毎に基準値が予め設定されており、判定電圧の値は、基準値からの差分であるシフト量で表現される。また、メモリチップ１０１内の所定の位置に基準値が判定電圧の種類毎に記録されている。そして、コントローラ２００は、判定電圧の種類毎に基準値からのシフト量をメモリチップ１０１に指示する。
【００４５】
なお、判定電圧の表現方法および指示の方法は、これに限定されない。例えば、判定電圧の値は差分ではなく電圧値で表現され、判定電圧は、メモリチップ１０１に対し、差分ではなく電圧値で指示されてもよい。
【００４６】
リトライリードでは、コントローラ２００は、リード処理において適用される判定電圧を、シフトインデックステーブル２２０に基づいて取得する。
【００４７】
図７は、第１の実施形態のシフトインデックステーブル２２０のデータ構造の一例を示す図である。シフトインデックステーブル２２０には、複数のシフトパターンが記録されている。シフトパターンは、全種類の判定電圧の値をそれぞれ１つずつ含むセットであり、判定電圧の候補値を示すものである。各シフトパターンが含むそれぞれの種類の判定電圧の値は、基準値からのシフト量の形式で表記される。図７において、シフト量Ｘ（ＸはＡ、Ｂ、Ｃ、Ｄ、Ｅ、Ｆ、Ｇ）は、判定電圧Ｖｒｘ（ｘはａ、ｂ、ｃ、ｄ、ｅ、ｆ、ｇ）の基準値からの差分を示す。
【００４８】
シフトインデックステーブル２２０には、しきい値電圧の変化の進行に対応した順番で各シフトパターンが配列されている。また、各シフトパターンには、配列の順番に対応した値のインデックスが付されている。即ち、インデックスの値は、しきい値電圧の変化の進行に対応した順位を示す。
【００４９】
例えば、しきい値電圧の変化の進行が第１の度合いと、第１の度合いよりも変化がより進行した第２の度合いと、を考える。第１の度合いに対応した第１のシフトパターンには、第２の度合いに対応した第２のシフトパターンよりも若い順位が設定される。
【００５０】
コントローラ２００は、リトライリードを繰り返す際、それぞれのリトライリードで適用されるシフトパターンを、インデックスの値の順番で選択する。
【００５１】
なお、しきい値電圧の変化の進行の傾向は、設計者によって予め推定され得る。つまり、シフトインデックステーブル２２０には、設計者によって予め推定されたしきい値電圧の変化の進行に対応した順番で、各シフトパターンが配列されている。例えば、しきい値電圧の変化の進行は、メモリセルから電荷が抜ける現象を考慮して推定され得る。メモリセルから電荷が抜ける現象によるしきい値電圧の変化の進行は、例えば、イレース処理・プログラム処理の実行回数によって異なる。イレース処理・プログラム処理の実行回数に応じて異なるシフトインデックステーブル２２０が設けられてもよい。
【００５２】
以降では、インデックスの値が「Ｘ」であるシフトパターンを、インデックスＸのシフトパターンと表記することがある。また、インデックスの値が「Ｘ」であるシフトパターンを適用して実行されるリード処理を、パターンＸと表記することがある。
【００５３】
コントローラ２００は、さらに、パトロールリードを実行する。パトロールリードは、ホスト機器３００からの要求に関係なくバックグラウンドで実行されるリード処理である。コントローラ２００は、例えば、定期的にまたは使用履歴が所定条件を満たした際にパトロールリードを実行する。
【００５４】
コントローラ２００は、パトロールリードにおいて、リトライリードを含む１回以上のリード処理を行い、エラー訂正に成功するための電圧値を、実行された１回以上のリード処理の結果に基づいて学習する。学習するとは、演算し、または演算しないで、演算または演算以外の方法で取得された値を記憶することである。コントローラ２００は、ホスト機器３００からの要求に応じてリード処理を実行する際には、判定電圧として適用する電圧値を、学習された電圧値に基づいて取得する。
【００５５】
以降では、学習された電圧値または電圧値を示す値を、学習値と表記する。第１の実施形態では、一例として、インデックスの値が学習値として記録される。
【００５６】
また、以降では、ホスト機器３００から要求されたデータをリードするリード処理、即ちホスト機器３００からの要求に応じたリード処理を、ホストリードと表記する。
【００５７】
第１の実施形態では、１つの学習値は、リード処理の単位（即ちページ）よりも大きい所定のサイズの記憶領域に対して共通に適用される。共通の学習値が適用される記憶領域の範囲を、管理領域と表記する。
【００５８】
さらに、第１の実施形態では、コントローラ２００は、１つの管理領域のうちの１つのページを代表ページとして選択し、当該代表ページに対し、リトライリードを含む１回以上のリード処理を実行する。そして、リトライリードによってエラー訂正が成功した場合（即ち複数回のリード処理によってエラー訂正が成功した場合）、コントローラ２００は、エラー訂正が成功した際に適用されたシフトパターンよりも所定の数だけ若い順位が設定されたシフトパターンを学習する。
【００５９】
図８は、第１の実施形態のコントローラ２００の学習値の決定方法の概略を説明するための図である。本図では、４つのページ（ページ０〜３）によって１つの管理領域が構成され、当該４つのページのそれぞれに対してインデックス０〜３のシフトパターンが適用された４回のリード処理（パターン０〜パターン３）が実行された場合の、エラー訂正の成否を示している。
【００６０】
コントローラ２００は、代表ページに対し、インデックス０のシフトパターンから順番に適用して１回以上のリード処理を実行する。例えばページ２が代表ページである場合、コントローラ２００は、パターン０およびパターン１をこの順番で実行し、パターン０およびパターン１においてエラー訂正が失敗する。続いてコントローラ２００は、パターン２を実行し、エラー訂正が成功する（Ｓ１）。すると、コントローラ２００は、パターン２で使用されたシフトパターン、即ちインデックス２のシフトパターン、を１回以上のリード処理において初めてエラー訂正が成功した際のシフトパターンとして特定し、そのシフトパターンよりも１だけ若い順位が設定された、シフトパターン１を学習する（Ｓ２）。
【００６１】
図８の例では、ページ０およびページ３がリード対象である場合、パターン０およびパターン１ではエラー訂正が成功し、パターン２およびパターン３ではエラー訂正が失敗する。また、ページ１がリード対象である場合、パターン１およびパターン２ではエラー訂正が成功し、パターン０およびパターン３ではエラー訂正が失敗する。これに対し、ページ２がリード対象である場合、パターン０およびパターン１ではエラー訂正が失敗し、パターン２およびパターン３ではエラー訂正が成功する。
【００６２】
つまり、代表ページであるページ２においては、しきい値電圧の変化が他のページに比べてより進行している。よって、ページ２がエラー訂正の失敗なくリード可能であるシフトパターンを他のページのリード処理に適用したとしても、当該他のページがリード対象である場合、最初のリード処理およびその後に実行されるリトライリードにおいてエラー訂正が失敗する可能性が高い。
【００６３】
例えば、シフトパターン２を適用した場合、ページ０およびページ３に対するリード処理においてエラー訂正が失敗する。また、ページ０およびページ３に対し、シフトパターン３を適用してリトライリードを実行したとしても、エラー訂正が失敗する。
【００６４】
これに対し、代表ページがエラー訂正の失敗なくリード可能であるシフトパターンよりも若い順位が設定されたシフトパターンが学習されることで、代表ページのしきい値電圧の変化が他のページに比べてより進行している場合であっても、当該他のページのリード処理または当該リード処理の後のリトライリードにおいてエラー訂正が成功する可能性を高くすることが可能である。
【００６５】
例えば、シフトパターン２を適用した場合、ページ１およびページ２がエラー訂正の失敗なくリード可能である。これに対し、シフトパターン２よりも１だけ若い順位が設定されたシフトパターンであるシフトパターン１を適用した場合、ページ０、ページ１、およびページ３が、エラー訂正の失敗なくリード可能である。即ち、図８のケースでは、シフトパターン１を学習することによって、シフトパターン２を学習する場合に比べてエラー訂正の失敗なくリード可能なページの数を増やすことができる。
【００６６】
なお、ページ２に対するリード処理においてはエラー訂正が失敗する。しかしながら、ページ２は、次に実行されるリトライリード、即ちシフトパターン２が適用されたリトライリードにおいて、エラー訂正の失敗なくリード可能である。
【００６７】
このように、代表ページがエラー訂正の失敗なくリード可能であるシフトパターンよりも若い順位が設定されたシフトパターンを学習し、学習されたシフトパターンをホストリードにおいて使用することによって、管理領域全体において、エラー訂正の失敗の回数またはリトライリードの実行回数を低減することが可能である。
【００６８】
なお、代表ページがエラー訂正の失敗なくリード可能であるシフトパターンと学習されるシフトパターンとの間の順位の差は、１に限定されない。例えば、代表ページがエラー訂正の失敗なくリード可能であるシフトパターンよりも２以上若い順位が設定されたシフトパターンが学習されてもよい。代表ページがエラー訂正の失敗なくリード可能であるシフトパターンと同じシフトパターンが学習されてもよい。
【００６９】
なお、同一の学習値が適用される記憶領域の範囲、即ち管理領域は、任意に設定可能である。
【００７０】
図９および図１０は、第１の実施形態の管理領域の設定方法を説明するための図である。ここでは、異なるプレーンに含まれる２つのブロックＢＬＫが、４つのメモリチップ１０１のそれぞれから選択され、選択された合計８つのブロックＢＬＫによって１つの論理ブロックが構成される。図９は、同一の論理ブロックを構成する８つのブロックＢＬＫによって構成される、ＮＡＮＤストリング１１４のグループ２を示している。このグループ２は、ワード線の並び方向に均等に１６個のサブグループ３に分割されている。即ち、各サブグループ３は、連続して配置された４本のワード線を備える。各サブグループ３は、１つのブロックＢＬＫを構成する４つのストリングユニットＳＵおよび１つの論理ブロックを構成する８つのブロックＢＬＫにまたがって設けられている。そして、図１０に示されるように、各サブグループ３のアッパーページからなる記憶領域（アッパーページ群）と、各サブグループ３のミドルページからなる記憶領域（ミドルページ群）と、各サブグループ３のロアーページからなる記憶領域（ロアーページ群）と、のそれぞれが、管理領域４として設定される。即ち、１つのサブグループ３は、ページの種類が異なる３つの管理領域４を備える。
【００７１】
連続して配置された複数のワード線は、しきい値電圧の変化特性が類似する傾向がある。また、コントローラ２００が１つの論理ブロックを構成する複数のブロックＢＬＫに対して並列にアクセスを実行する場合、並列にアクセスされる複数のワード線は、しきい値電圧の変化特性が類似する傾向がある。よって、図９および図１０に示した管理領域４の設定方法によれば、しきい値電圧の変化特性が類似した記憶領域の範囲を１つの管理領域４として設定することができる。よって、管理領域４内で１つの学習値が共通に適用される場合でも、管理領域４内の多くのページをエラー訂正の失敗なくリードすることが可能となる。なお、管理領域４の設定方法は、図９および図１０に示した方法だけに限定されない。
【００７２】
図１に説明を戻す。コントローラ２００は、ホストインターフェイス回路（HOST  I/F）２０１、ＲＡＭ（Random  Access  Memory）２０２、ＣＰＵ（Central  Processing  Unit）２０３、バッファメモリ（Buffer  Memory）２０４、ＮＡＮＤインターフェイス回路（NAND  I/F）２０５、およびＥＣＣ回路（ECC）２０６を備える。コントローラ２００は、例えばＳｏＣ（System-On-a-Chip）として構成され得る。コントローラ２００は、複数のチップによって構成されてもよい。コントローラ２００は、ＣＰＵ２０３に代えて、ＦＰＧＡ（field-programmable  gate  array）やＡＳＩＣ（application  specific  integrated  circuit）を備えていてもよい。つまり、コントローラ２００は、ソフトウェア、ハードウェア、またはこれらの組み合わせによって構成され得る。
【００７３】
ホストインターフェイス回路２０１は、例えばＳＡＴＡ（Serial  Advanced  Technology  Attachment）規格、ＳＡＳ（Serial  Attached  SCSI）規格、またはＰＣＩ（Peripheral  Components  Interconnect）  Ｅｘｐｒｅｓｓ（登録商標）規格などに準拠したバスを介してホスト機器３００と接続され、コントローラ２００とホスト機器３００との通信を司る。
【００７４】
ＮＡＮＤインターフェイス回路２０５は、ＮＡＮＤバスを介して各メモリチップ１０１と接続され、コントローラ２００とメモリチップ１０１との通信を司る。
【００７５】
ＣＰＵ２０３は、コントローラ２００の動作を制御する。
【００７６】
ＲＡＭ２０２は、ＣＰＵ２０３の作業領域として使用される。バッファメモリ２０４は、メモリチップ１０１に送信されるデータ、およびメモリチップ１０１から受信したデータを一時的に保持する。ＲＡＭ２０２およびバッファメモリ２０４は、例えばＤＲＡＭ（dynamic  random  access  memory）、ＳＲＡＭ（static  random  access  memory）、またはこれらの組み合わせなどによって構成され得る。なお、ＲＡＭ２０２およびバッファメモリ２０４を構成するメモリの種類は、これらに限定されない。
【００７７】
ＥＣＣ回路２０６は、誤り訂正符号を用いて、エラーの検出および検出されたエラーの訂正を実行する。
【００７８】
図１１は、第１の実施形態のメモリシステム１に保持される各種データを説明する図である。
【００７９】
ＮＡＮＤ型フラッシュメモリ１００には、ユーザデータ１４０およびシステムデータ１４１が格納される。ユーザデータ１４０は、ホスト機器３００から受信し、ＥＣＣ回路２０６によって誤り訂正符号化されたデータである。本明細書において、データは、少なくともユーザデータ１４０を指す。
【００８０】
システムデータ１４１は、コントローラ２００の制御に要するデータである。システムデータ１４１は、ファームウェアプログラム１４２を含む。ファームウェアプログラム１４２は、ＣＰＵ２０３がコントローラ２００の動作の制御を実現するためのコンピュータプログラムである。例えば、ＣＰＵ２０３は、メモリシステム１の起動時にファームウェアプログラム１４２をＲＡＭ２０２にロードする。そして、ＣＰＵ２０３は、ＲＡＭ２０２にロードされたファームウェアプログラム１４２に従って動作することによって、コントローラ２００の動作の制御を実現する。
【００８１】
ＲＡＭ２０２には、シフトインデックステーブル２２０および学習値テーブル２２１が格納される。
【００８２】
シフトインデックステーブル２２０は、前述したように、各種シフトパターンを規定した情報である。各種シフトパターンには、選択される順位として使用されるインデックスが付与されている。
【００８３】
学習値テーブル２２１は、学習値が記録された情報である。コントローラ２００は、パトロールリードによって取得した学習値を、学習値テーブル２２１に記録する。ホストリードでは、コントローラ２００は、学習値テーブル２２１から対応する学習値を決定する。学習値テーブル２２１は、メモリシステム１がシャットダウンされるまでに、定期的あるいは一括してＮＡＮＤ型フラッシュメモリ１００に保存され、メモリシステム１の起動時にＮＡＮＤ型フラッシュメモリ１からＲＡＭ２０２にロードされてもよい。あるいは、学習値テーブル２２１の一部または全部は、電源断時に失われてもよい。
【００８４】
図１２は、第１の実施形態の学習値テーブル２２１のデータ構成例を示す図である。本図に示されるように、学習値テーブル２２１には、管理領域４毎に学習値が記録される。なお、前述したように、第１の実施形態では、学習値テーブル２２１には、シフトインデックステーブル２２０に記録された複数のシフトパターンのうちの１つを示すインデックスの値が、学習値として記録される。
【００８５】
なお、ファームウェアプログラム１４２、シフトインデックステーブル２２０、および学習値テーブル２２１が格納されるメモリは、上記に限定されない。例えば、シフトインデックステーブル２２０は、メモリチップ１０１に格納されていてもよい。また、ＲＡＭ２０２およびメモリチップ１０１のほかに任意の種類のメモリがメモリシステム１に具備され、ファームウェアプログラム１４２、シフトインデックステーブル２２０、および学習値テーブル２２１の一部または全部は、そのメモリに格納されてもよい。
【００８６】
続いて、第１の実施形態のメモリシステム１の動作を説明する。
【００８７】
図１３は、第１の実施形態のパトロールリードの手順の概略を示すフローチャートである。本図に示されるように、まず、ＣＰＵ２０３は、学習値を生成するタイミングに至った管理領域４があるか否かを判定する（Ｓ１０１）。
【００８８】
学習値を生成するタイミングは、任意に設定され得る。例えば、ＣＰＵ２０３は、データのプログラム処理が完了したすべての管理領域４のうちのそれぞれを、所定の時間間隔で、学習値の生成の対象として選択する。つまり、ＣＰＵ２０３は、ある管理領域４に対するプログラム処理が完了し、プログラム処理の完了から所定の時間が経過すると、その管理領域４にかかる学習値を生成するタイミングに至ったと判定する。そして、ＣＰＵ２０３は、その管理領域４にかかる学習値の生成が完了すると、その学習値の生成から所定の時間が経過後に、その管理領域４の学習値を生成するタイミングに至ったと再び判定する。
【００８９】
別の例では、ＣＰＵ２０３は、データのプログラム処理が完了したすべての管理領域４のうちのそれぞれについて、アクセス履歴を記録する。アクセス履歴は、例えばリード処理の実行回数である。ＣＰＵ２０３は、データのプログラム処理が完了したすべての管理領域４のうちのそれぞれを、アクセス履歴が所定の条件を満たす毎に、学習値の生成の対象として選択する。例えば、ＣＰＵ２０３は、ある管理領域４において、プログラム処理が完了してからまたは前回に学習値が生成されてからのリード処理の実行回数の増分が所定の値に到達した場合、その管理領域４の学習値を生成するタイミングに至ったと判定する。
【００９０】
さらに別の例では、メモリシステム１の起動時が、学習値を生成するタイミングとして設定されてもよい。メモリシステム１の起動時から所定の時間が経過後に、学習値を生成するタイミングに至ったと判定されてもよい。
【００９１】
学習値を生成するタイミングに至った管理領域４がある場合（Ｓ１０１、Ｙｅｓ）、ＣＰＵ２０３は、その管理領域４にかかる学習値を生成する処理（学習値生成処理）を実行する（Ｓ１０２）。学習値を生成するタイミングに至った管理領域４がない場合（Ｓ１０１、Ｎｏ）、またはＳ１０２の後、ＣＰＵ２０３は、Ｓ１０１の処理を再び実行する。
【００９２】
図１４は、第１の実施形態の学習値生成処理の手順を説明するフローチャートである。本図の説明において、学習値生成処理の対象の管理領域４を、対象の管理領域４と表記する。
【００９３】
まず、ＣＰＵ２０３は、変数Ｉ＿ｔｍｐをゼロで初期化する（Ｓ２０１）。そして、ＣＰＵ２０３は、シフトパターンＩ＿ｔｍｐ、即ちインデックスの値が「Ｉ＿ｔｍｐ」のシフトパターン、を適用して、対象の管理領域４に含まれる代表ページに対するリード処理を実行する（Ｓ２０２）。Ｓ２０２では、ＣＰＵ２０３は、代表ページを含むメモリチップ１０１に対し、シフトパターンＩ＿ｔｍｐを指示し、リード処理を命令する。
【００９４】
なお、代表ページは、任意に設定され得る。代表ページは、管理領域４毎に予め設定されていてもよいし、学習値生成処理が実行される毎に任意のアルゴリズムに基づいて１または複数のページが代表ページとして選択されてもよい。代表ページは、１つのページによって構成されてもよいし、１つの論理ページに含まれる複数のページによって構成されてもよい。管理領域４に含まれる複数のページのうちの、しきい値電圧の変化傾向が平均的なページが代表ページとして選択されてもよい。管理領域４に含まれる複数のページのうちの、しきい値電圧の変化が最も大きいページが代表ページとして選択されてもよい。ページ毎にビットエラーレートが測定され、管理領域４に含まれる複数のページのうちの、ビットエラーレートが最も悪いページが代表ページとして選択されてもよい。
【００９５】
Ｓ２０２の後、リード処理が命令されたメモリチップ１０１では、アクセス回路１１０は、指示されたシフトパターンを用いてリード命令を実行し、リードデータをラッチ回路に格納する。コントローラ２００では、ＮＡＮＤインターフェイス回路２０５がラッチ回路からリードデータを取得し、ＥＣＣ回路２０６は、取得されたリードデータに対しエラーの検出および訂正を実行する。エラー訂正の成否は、ＣＰＵ２０３に通知される。
【００９６】
ＣＰＵ２０３は、ＥＣＣ回路２０６によるエラー訂正が失敗したか否かを判定する（Ｓ２０３）。エラー訂正が失敗した場合（Ｓ２０３、Ｙｅｓ）、ＣＰＵ２０３は、Ｉ＿ｔｍｐを１だけインクリメントし（Ｓ２０４）、Ｉ＿ｔｍｐがシフトインデックステーブル２２０の末尾に記録されたシフトパターンのインデックスの値（Ｉ＿ｌａｓｔと表記する）を超えたか否かを判定する（Ｓ２０５）。
【００９７】
Ｉ＿ｔｍｐがＩ＿ｌａｓｔを超えていない場合（Ｓ２０５、Ｎｏ）、ＣＰＵ２０３は、Ｓ２０２の処理を再び実行する。
【００９８】
エラー訂正が成功した場合（Ｓ２０３、Ｎｏ）、ＣＰＵ２０３は、Ｉ＿ｔｍｐがゼロと一致するか否かを判定する（Ｓ２０６）。Ｉ＿ｔｍｐがゼロと一致する場合（Ｓ２０６、Ｙｅｓ）、ＣＰＵ２０３は、Ｉ＿ｔｍｐ即ちゼロを対象の管理領域４にかかる学習値Ｉ＿ｌｅａｒｎｅｄとして学習値テーブル２２１に記録する（Ｓ２０７）。Ｉ＿ｔｍｐがゼロと一致しない場合（Ｓ２０６、Ｎｏ）、ＣＰＵ２０３は、第１の実施形態では、Ｉ＿ｔｍｐ−１の値を対象の管理領域４にかかる学習値Ｉ＿ｌｅａｒｎｅｄとして学習値テーブル２２１に記録する（Ｓ２０８）。
【００９９】
Ｓ２０７またはＳ２０８の後、ＣＰＵ２０３は、所定の基準が満たされたか否かを判定する（Ｓ２０９）。Ｓ２０９は、対象の管理領域４に格納されたデータがしきい値電圧の変化によって喪失することを防止するための処理（Ｓ２１０）を実行するか否かを判定するための処理である。Ｓ２１０では、ＣＰＵ２０３は、例えば、リフレッシュ処理、コードレートの引き下げ、またはその両方を実行する。
【０１００】
リフレッシュ処理は、対象の記憶領域（例えば管理領域４）に格納されている少なくとも全ての有効なデータをプログラムし直すことである。例えばリフレッシュ処理では、対象の記憶領域に格納されている全ての有効なデータを他の記憶領域にコピーし、その後、コピー元の記憶領域に格納されている全データがイレースされる。なお、移動元の記憶領域と移動先の記憶領域とは同じであってもよい。移動元の記憶領域と移動先の記憶領域とが同じ場合には、対象の記憶領域に記憶されているデータの少なくとも全ての有効なデータが例えばＲＡＭ２０２に読み出され、その後、対象の記憶領域に格納されている全データが消去され、消去後の対象の記憶領域に、ＲＡＭ２０２に読み出されたデータが書き込まれる。リフレッシュ処理によれば、しきい値電圧の変化が大きい状態で格納されていたデータを、しきい値電圧の変化が少ない状態で格納し直すことができる。
【０１０１】
コードレートは、誤り訂正符号化時の、出力ビット数に対する入力ビット数の割合をいう。コードレートを引き下げると、実データ（誤り訂正符号化前のデータ）に対する誤り訂正符号の符号長の割合が増加するので、管理領域４に格納可能な実データの容量の低下と引き換えにＥＣＣ回路２０６の誤り訂正の能力が強化される。なお、コードレートは、例えば、ブロックなど所定の領域毎に設定される。あるブロックに対してユーザデータ１４０が書き込まれる場合、そのユーザデータ１４０は、そのブロックに設定されたコードレートで符号化された後、そのブロックに書き込まれる。
【０１０２】
Ｓ２０９で使用される所定の基準、即ちＳ２１０の処理を実行するか否かの条件は、任意に設定され得る。例えば、エラー訂正が成功した際に使用されたシフトインデックスの値、即ちＳ２０３の処理においてＮｏと判定された際のＩ＿ｔｍｐの値、が所定のしきい値を超えたか否かがＳ２０９で判定される。エラー訂正が成功した際に使用されたシフトインデックスの値が前記しきい値を超えた場合、Ｓ２０９においてＹｅｓと判定される。エラー訂正が成功した際に使用されたシフトインデックスの値が前記しきい値を超えていない場合、Ｓ２０９においてＮｏと判定される。
【０１０３】
所定の基準が満たされた場合（Ｓ２０９、Ｙｅｓ）、ＣＰＵ２０３はＳ２１０の処理を実行する。
【０１０４】
所定の基準が満たされていない場合（Ｓ２０９、Ｎｏ）、またはＳ２１０の実行が完了すると、対象の管理領域４にかかる学習値生成処理が終了する。なお、所定の基準が満たされた場合（Ｓ２０９、Ｙｅｓ）、Ｓ２０９の処理によって対象の管理領域４にかかる学習値生成処理が終了され、後の任意のタイミングでＳ２１０の処理が実行されてもよい。
【０１０５】
Ｉ＿ｔｍｐがＩ＿ｌａｓｔを超えた場合（Ｓ２０５、Ｙｅｓ）、即ちエラー訂正が成功するシフトパターンがない場合、ＣＰＵ２０３は、所定の処理を実行し（Ｓ２１１）、対象の管理領域４にかかる学習値生成処理が終了する。Ｓ２１１では、任意の処理が実行され得る。例えば、コントローラ２００がＥＣＣ回路２０６よりもエラー訂正の強度が強いエラー訂正機能を有している場合、そのエラー訂正機能を使用してエラー訂正を実行してもよい。また、コントローラ２００がそのようなエラー訂正機能を有していない場合、ホスト機器３００に対して対象の管理領域４に格納されているデータが読み出し不能になった旨を通知してもよい。対象の管理領域４に格納されているデータが読み出し不能になった旨を通知するタイミングは、後にそのデータがホスト機器３００からリード要求された際であってもよい。また、Ｓ２１１では、Ｓ２１０の処理が実行されてもよい。
【０１０６】
図１５は、第１の実施形態のホストリードの手順を示すフローチャートである。
【０１０７】
メモリシステム１がホスト機器３００からリード要求を受信すると（Ｓ３０１）、ＣＰＵ２０３は、リード対象のページを含む管理領域４を特定する（Ｓ３０２）。本図の説明において、リード対象のページを含む管理領域４を、対象の管理領域４と表記する。リード要求は、例えば、リード対象のデータを示すアドレス情報を含む。ＣＰＵ２０３は、例えば、リード要求に含まれたアドレス情報に基づいて所定の方法でリード対象のページを特定し、当該リード対象のページを含む管理領域４を特定する。
【０１０８】
続いて、ＣＰＵ２０３は、学習値テーブル２２１から対象の管理領域４にかかる学習値Ｉ＿ｌｅａｒｎｅｄを取得する（Ｓ３０３）。そして、ＣＰＵ２０３は、シフトパターンＩ＿ｌｅａｒｎｅｄ、即ちインデックスの値が「Ｉ＿ｌｅａｒｎｅｄ」のシフトパターン、を適用して、リード対象のページに対するリード処理を実行する（Ｓ３０４）。Ｓ３０４では、ＣＰＵ２０３は、リード対象のページを含むメモリチップ１０１に対し、シフトパターンＩ＿ｌｅａｒｎｅｄを指示し、リード処理を命令する。
【０１０９】
Ｓ３０４の後、対応するメモリチップ１０１では、アクセス回路１１０は、指示されたシフトパターンを用いてリード命令を実行し、リードデータをラッチ回路に格納する。コントローラ２００では、ＮＡＮＤインターフェイス回路２０５がラッチ回路からリードデータを取得し、ＥＣＣ回路２０６は、取得されたリードデータに対しエラーの検出および訂正を実行する。エラー訂正の成否は、ＣＰＵ２０３に通知される。
【０１１０】
ＣＰＵ２０３は、ＥＣＣ回路２０６によるエラー訂正が失敗したか否かを判定する（Ｓ３０５）。エラー訂正が成功した場合（Ｓ３０５、Ｎｏ）、ＣＰＵ２０３は、リードデータをホスト機器３００に送信する（Ｓ３０６）。
【０１１１】
エラー訂正が失敗した場合（Ｓ３０５、Ｙｅｓ）、ＣＰＵ２０３は、以降の処理において、リトライリードを試みる。
【０１１２】
具体的には、ＣＰＵ２０３は、まず、変数Ｉ＿ｔｍｐにＩ＿ｌｅａｒｎｅｄを代入する（Ｓ３０７）。そして、ＣＰＵ２０３は、Ｉ＿ｔｍｐを１だけインクリメントし（Ｓ３０８）、Ｉ＿ｔｍｐがＩ＿ｌａｓｔを超えたか否かを判定する（Ｓ３０９）。
【０１１３】
Ｉ＿ｔｍｐがＩ＿ｌａｓｔを超えていない場合（Ｓ３０９、Ｎｏ）、ＣＰＵ２０３は、シフトパターンＩ＿ｔｍｐを適用して、リード対象のページに対するリード処理を再び実行する（Ｓ３１０）。シフトパターンの適用およびリード処理は、Ｓ３０４と同様の手順で実行される。
【０１１４】
Ｓ３１０の処理によって、コントローラ２００は、リードデータを取得する。ＥＣＣ回路２０６は、取得されたリードデータに対しエラーの検出および訂正を実行する。ＣＰＵ２０３は、ＥＣＣ回路２０６によるエラー訂正が失敗したか否かを判定する（Ｓ３１１）。エラー訂正が失敗した場合（Ｓ３１１、Ｙｅｓ）、ＣＰＵ２０３は、Ｓ３０８の処理を再び実行する。
【０１１５】
エラー訂正が成功した場合（Ｓ３１１、Ｎｏ）、ＣＰＵ２０３は、リードデータをホスト機器３００に送信する（Ｓ３１２）。さらに、ＣＰＵ２０３は、対象の管理領域４にかかる学習値を、Ｉ＿ｔｍｐ−１で更新する（Ｓ３１３）。そして、ＣＰＵ２０３は、Ｓ３１４、Ｓ３１５においてＳ２０９、Ｓ２１０と同様の処理を実行し、ホストリードの動作が終了する。
【０１１６】
Ｉ＿ｔｍｐがＩ＿ｌａｓｔを超えた場合（Ｓ３０９、Ｙｅｓ）、ＣＰＵ２０３は、Ｓ２１１と同様に所定の処理を実行し（Ｓ３１６）、ホストリードの動作が終了する。なお、Ｓ２１１で実行される処理とＳ３１６で実行される処理とは異なっていてもよい。
【０１１７】
以上述べたように、第１の実施形態によれば、コントローラ２００は、パトロールリードにおいてリード処理を実行する。最初のリード処理においてエラー訂正が失敗した場合（Ｓ２０３、Ｙｅｓ）、コントローラ２００は、最初のリード処理を含む複数のリード処理を実行する。複数のリード処理では、Ｓ２０２からＳ２０５、Ｎｏまでの処理によって構成されるループ処理に示されるように、それぞれ判定電圧の候補値である複数のシフトパターンのうちの一が、しきい値電圧の変化の進行に対応した順番で選択され、適用される。そして、コントローラ２００は、複数のリード処理のうちの最初にエラー訂正が成功したリード処理において使用された際のシフトパターンより所定数だけ若い順位が設定されたシフトパターンを学習し、ホストリードでは、学習されたシフトパターンを適用してリード処理を実行する（Ｓ２０８、Ｓ３０３、Ｓ３０４）。
【０１１８】
つまり、パトロールリードにおいてエラー訂正が成功した際のシフトパターン（第１のシフトパターンと表記する）よりもしきい値電圧の変化の進行が小さい場合を想定したシフトパターン（第２のシフトパターンと表記する）がホストリードにおいて適用される。
【０１１９】
よって、図８を用いて説明したように、管理領域４全体において、エラー訂正が成功するまでに実行されるリード処理の回数を低減することが可能である。その結果、リードレイテンシの悪化が低減される。
【０１２０】
または、コントローラ２００は、複数のリード処理のうちの最初にエラー訂正が成功したリード処理において使用された際のシフトパターンを学習し、ホストリードでは、学習されたシフトパターンよりも所定数だけ若い順位が設定されたシフトパターンを適用するよう、構成されてもよい。
【０１２１】
なお、コントローラ２００は、ホストリードにおいて、最初に、第２のシフトパターンを適用してリード処理を実行する（Ｓ３０３、Ｓ３０４）。そのリード処理においてエラー訂正が失敗した場合（Ｓ３０５、Ｙｅｓ）、コントローラ２００は、第２のシフトパターンよりもインデックスの値が大きいシフトパターン、即ち第２のシフトパターンよりも進んだ（老いた）順位が設定されたシフトパターンを適用してリード処理（リトライリード）を実行する（Ｓ３０８〜Ｓ３１０）。
【０１２２】
ホストリードにおいて、第１のシフトパターンよりも若い順位が設定された第２のシフトパターンから順番にシフトパターンが順次適用されて１以上のリード処理が実行されるので、エラー訂正の失敗なくリード可能なシフトパターンを効率よく探索することができる。
【０１２３】
なお、ＣＰＵ２０３は、管理領域４のうちから１つの代表ページをパトロールリードの対象とし、得られた学習値を管理領域４全体に適用する。
【０１２４】
よって、管理領域４全体において、エラー訂正が成功するまでに実行されるリード処理の回数を低減することが可能である。また、パトロールリードにおいては管理領域４全体ではなく代表ページがリードされるので、パトロールリードに要する負荷を低く抑えることが可能である。
【０１２５】
なお、１つの管理領域４に設定される代表ページの数は１に限定されない。２以上の代表ページが設定され、パトロールリードでは、それぞれの代表ページにするリード処理の結果に基づいてシフトパターンが学習されてもよい。
【０１２６】
なお、学習値生成処理ではシフトインデックスが０のシフトパターンから順番に使用されるとして説明した。最初に使用されるシフトパターンはこれに限定されない。すでに学習値が記録されている場合には、その学習値が示すシフトインデックスの近辺から順番に各シフトパターンが使用されてもよい。
【０１２７】
また、パトロールリードにおいて各シフトパターンがシフトインデックスの順番で適用されるとして説明した。パトロールリードにおける各シフトパターンの適用の順番はこれに限定されない。各シフトパターンがシフトインデックスにおいて降順に適用されてもよい。エラー訂正が成功した際のシフトパターンを取得することができる限り、各シフトパターンの適用の順番などは種々に変更することができる。
【０１２８】
（第２の実施形態）
第２の実施形態では、コントローラ２００は、学習値生成処理において、エラー訂正が成功した際のシフトパターン（第１のシフトパターンと表記する）を求める。そして、コントローラ２００は、ホストリードにおいては、まず、第１のシフトパターンを適用してリード処理を実行する。当該リード処理においてエラー訂正が失敗した場合、コントローラ２００は、第１のシフトパターンよりも若い順位が設定されたシフトパターン（第２のシフトパターンと表記する）を適用してリトライリードを実行する。
【０１２９】
第２の実施形態の説明では、第１のシフトパターンと第２のシフトパターンとの順位の差は１とする。第１のシフトパターンと第２のシフトパターンとの順位の差は２以上であってもよい。
【０１３０】
第２の実施形態のパトロールリードの概略は、図１３が示す第１の実施形態の動作と同様であるので、説明を省略する。
【０１３１】
図１６は、第２の実施形態の学習値生成処理の手順を説明するフローチャートである。本図の説明において、学習値生成処理の対象の管理領域４を、対象の管理領域４と表記する。
【０１３２】
まず、Ｓ４０１〜Ｓ４０５では、Ｓ２０１〜Ｓ２０５と同様の処理が実行される。つまり、Ｓ４０１〜Ｓ４０５では、ＣＰＵ２０３は、変数Ｉ＿ｔｍｐをゼロから順番にインクリメントしながらシフトパターンＩ＿ｔｍｐを適用した１回以上のリード処理を実行する。
【０１３３】
ＣＰＵ２０３は、Ｓ４０１〜Ｓ４０５において１回以上のリード処理を実行し、最初にエラー訂正が成功した場合（Ｓ４０３、Ｎｏ）、ＣＰＵ２０３は、最初にエラー訂正が成功した際のＩ＿ｔｍｐを対象の管理領域４にかかる学習値Ｉ＿ｌｅａｒｎｅｄとして学習値テーブル２２１に記録する（Ｓ４０６）。
【０１３４】
Ｓ４０６に続いて、ＣＰＵ２０３は、Ｓ４０７、Ｓ４０８において、Ｓ２０９、Ｓ２１０と同様の処理を実行し、学習値生成処理が終了する。
【０１３５】
Ｉ＿ｔｍｐがＩ＿ｌａｓｔを超えた場合（Ｓ４０５、Ｙｅｓ）、即ちエラー訂正の失敗なくリード可能なシフトパターンがない場合、ＣＰＵ２０３は、Ｓ２１１と同様の処理をＳ４０９において実行し、学習値生成処理が終了する。
【０１３６】
図１７は、第２の実施形態のホストリードの手順を示すフローチャートである。本図の説明において、リード対象のページを含む管理領域４を、対象の管理領域４と表記する。
【０１３７】
Ｓ５０１〜Ｓ５０６では、Ｓ３０１〜Ｓ３０６と同様の処理が実行される。シフトパターンＩ＿ｌｅａｒｎｅｄを適用した最初のリード処理でエラー訂正が失敗した場合（Ｓ５０５、Ｙｅｓ）、ＣＰＵ２０３は、以降の処理においてリトライリードを試みる。
【０１３８】
具体的には、ＣＰＵ２０３はまず、Ｉ＿ｌｅａｒｎｅｄがゼロと一致するか否かを判定する（Ｓ５０７）。Ｉ＿ｌｅａｒｎｅｄがゼロと一致しない場合（Ｓ５０７、Ｎｏ）、ＣＰＵ２０３は、変数Ｉ＿ｔｍｐにＩ＿ｌｅａｒｎｅｄ−１を代入する（Ｓ５０８）。そして、ＣＰＵ２０３は、シフトパターンＩ＿ｔｍｐを適用して、リード対象のページに対するリード処理を再び実行する（Ｓ５０９）。
【０１３９】
Ｓ５０９の処理によって、コントローラ２００は、リードデータを取得する。ＥＣＣ回路２０６は、取得されたリードデータに対しエラーの検出および訂正を実行する。ＣＰＵ２０３は、ＥＣＣ回路２０６によるエラー訂正が失敗したか否かを判定する（Ｓ５１０）。エラー訂正が成功した場合（Ｓ５１０、Ｎｏ）、ＣＰＵ２０３は、リードデータをホスト機器３００に送信する（Ｓ５１１）。
【０１４０】
エラー訂正が失敗した場合（Ｓ５１０、Ｙｅｓ）、またはＩ＿ｌｅａｒｎｅｄがゼロと一致する場合（Ｓ５０７、Ｙｅｓ）、ＣＰＵ２０３は、変数Ｉ＿ｔｍｐにＩ＿ｌｅａｒｎｅｄ＋１を代入する（Ｓ５１２）。そして、ＣＰＵ２０３は、シフトパターンＩ＿ｔｍｐを適用して、リード対象のページに対するリード処理を実行する（Ｓ５１３）。
【０１４１】
Ｓ５１３の処理によって、コントローラ２００は、リードデータを取得する。ＥＣＣ回路２０６は、取得されたリードデータに対しエラーの検出および訂正を実行する。ＣＰＵ２０３は、ＥＣＣ回路２０６によるエラー訂正が失敗したか否かを判定する（Ｓ５１４）。エラー訂正が成功した場合（Ｓ５１４、Ｎｏ）、ＣＰＵ２０３は、リードデータをホスト機器３００に送信する（Ｓ５１５）。
【０１４２】
エラー訂正が失敗した場合（Ｓ５１４、Ｙｅｓ）、ＣＰＵ２０３は、Ｉ＿ｔｍｐを１だけインクリメントし（Ｓ５１６）、Ｉ＿ｔｍｐがＩ＿ｌａｓｔを超えたか否かを判定する（Ｓ５１７）。Ｉ＿ｔｍｐがＩ＿ｌａｓｔを超えていない場合（Ｓ５１７、Ｎｏ）、ＣＰＵ２０３は、Ｓ５１３の処理を再び実行する。
【０１４３】
Ｓ５１１、またはＳ５１５においてリードデータをホスト機器３００に送信した後、ＣＰＵ２０３は、対象の管理領域４にかかる学習値を、Ｉ＿ｔｍｐで更新する（Ｓ５１８）。そして、ＣＰＵ２０３は、Ｓ５１９、Ｓ５２０においてＳ２０９、Ｓ２１０と同様の処理を実行し、ホストリードの動作が終了する。
【０１４４】
Ｉ＿ｔｍｐがＩ＿ｌａｓｔを超えた場合（Ｓ５１７、Ｙｅｓ）、ＣＰＵ２０３は、Ｓ２１１と同様に所定の処理を実行し（Ｓ５２１）、ホストリードの動作が終了する。
【０１４５】
このように、第２の実施形態によれば、コントローラ２００は、パトロールリードにおいて、複数のリード処理のうちの最初にエラー訂正が成功したリード処理において使用された際のシフトパターンを取得する（Ｓ４０６）。そして、コントローラ２００は、ホストリードにおいて、最初に、そのシフトパターンを適用してリード処理を実行する（Ｓ５０３、Ｓ５０４）。そして、そのリード処理においてエラー訂正が失敗した場合（Ｓ５０５、Ｙｅｓ）、コントローラ２００は、シフトパターンより所定数だけ若い順位が設定されたシフトパターンを適用してリード処理を実行する（Ｓ５０８、Ｓ５０９）。
【０１４６】
つまり、第２の実施形態では、ホストリードにおいて、最初に第１のシフトパターンが適用されてリード処理が実行され、その後、第１のシフトパターンよりも若い順位が設定された第２のシフトパターンを適用してリトライリードが実行される。よって、第１の実施形態と第２の実施形態とでは、第１のシフトパターンと第２のシフトパターンとの適用の順序が逆になっている点のみが異なっている。よって、第２の実施形態によって、エラー訂正の失敗なくリード可能なシフトパターンを効率よく探索することができ、ひいてはリードレイテンシの悪化が低減される。
【０１４７】
なお、学習値生成処理ではシフトインデックスが０のシフトパターンから順番に使用されるとして説明した。最初に使用されるシフトパターンはこれに限定されない。すでに学習値が記録されている場合には、その学習値が示すシフトインデックスの近辺から順番に各シフトパターンが使用されてもよい。
【０１４８】
（第３の実施形態）
第３の実施形態では、管理領域４に含まれる複数のページに対して全てのシフトパターンを適用した複数のリード処理が実行され、実行された複数のリード処理の結果に対して統計処理が実行されることによって学習値が演算される。つまり、第３の実施形態では、複数のページに対するリード処理の結果に基づいて、管理領域４内のできるだけ多くのページがエラー訂正の失敗なくリード可能な判定電圧が演算される。
【０１４９】
第３の実施形態のパトロールリードの概略は、図１３が示す第１の実施形態の動作と同様であるので、説明を省略する。
【０１５０】
図１８は、第３の実施形態の学習値生成処理の手順を説明するフローチャートである。本図の説明において、学習値生成処理の対象の管理領域４を、対象の管理領域４と表記する。また、本図の例では、対象の管理領域４を構成する全てのページがリードされることとして説明する。
【０１５１】
まず、ＣＰＵ２０３は、対象の管理領域４から１つのページを対象ページとして選択する（Ｓ６０１）。そして、ＣＰＵ２０３は、変数Ｉ＿ｔｍｐをゼロで初期化する（Ｓ６０２）。そして、ＣＰＵ２０３は、シフトパターンＩ＿ｔｍｐを適用して対象ページに対するリード処理を実行する（Ｓ６０３）。
【０１５２】
Ｓ６０３の処理によって、コントローラ２００は、リードデータを取得する。ＥＣＣ回路２０６は、取得されたリードデータに対しエラーの検出および訂正を実行する。ＣＰＵ２０３は、ＥＣＣ回路２０６によるエラー訂正の結果を記録する（Ｓ６０４）。なお、エラー訂正の結果とは、エラー訂正の成否である。ＣＰＵ２０３は、エラー訂正の結果を、対象ページおよびシフトパターンのインデックスの値と対応付けて例えばＲＡＭ２０２に記録する。
【０１５３】
続いて、ＣＰＵ２０３は、Ｉ＿ｔｍｐを１だけインクリメントし（Ｓ６０５）、Ｉ＿ｔｍｐがＩ＿ｌａｓｔを超えたか否かを判定する（Ｓ６０６）。Ｉ＿ｔｍｐがＩ＿ｌａｓｔを超えていない場合（Ｓ６０６、Ｎｏ）、ＣＰＵ２０３は、Ｓ６０３の処理を再び実行する。
【０１５４】
Ｉ＿ｔｍｐがＩ＿ｌａｓｔを超えた場合（Ｓ６０６、Ｙｅｓ）、ＣＰＵ２０３は、対象の管理領域４から全てのページが対象ページとして選択されたか否かを判定する（Ｓ６０７）。未選択のページが残っている場合（Ｓ６０７、Ｎｏ）、ＣＰＵ２０３は、未選択のページのうちから１つのページを対象ページとして選択し（Ｓ６０８）、Ｓ６０２の処理を再び実行する。
【０１５５】
対象の管理領域４から全てのページが対象ページとして選択された場合（Ｓ６０７、Ｙｅｓ）、ＣＰＵ２０３は、対象の管理領域４の全てのページに対して実行されたエラー訂正の結果に対して所定の統計処理を実行し、代表値Ｉ＿ｒｅｐｒｅｓｅｎｔを決定する（Ｓ６０９）。
【０１５６】
Ｓ６０９では、例えば、ＣＰＵ２０３は、対象の管理領域４の全てのページに対して実行されたエラー訂正の結果から、シフトパターンのインデックスの値の最頻値を演算する。得られた最頻値は、対象の管理領域４の全てのページのうちのエラー訂正の失敗なくリード可能なページの数が最も多くなるシフトパターンを示す。
【０１５７】
なお、統計処理の例はこれに限定されない。ＣＰＵ２０３は、最頻値に代えてしきい値電圧の平均値を演算してもよい。また、ＣＰＵ２０３は、訂正に成功したページの数やエラービット数に関する重み付けを行ってしきい値電圧の平均値を演算してもよい。なお、学習値テーブル２２１は、インデックスではなく電圧値（シフト量）が記録されるように構成され得る。電圧値（シフト量）およびインデックスの両方が学習値テーブル２２１に記録されてもよい。
【０１５８】
Ｓ６０９の後、ＣＰＵ２０３は、代表値Ｉ＿ｒｅｐｒｅｓｅｎｔを、対象の管理領域４にかかる学習値Ｉ＿ｌｅａｒｎｅｄとして学習値テーブル２２１に記録する（Ｓ６１０）。
【０１５９】
Ｓ６１０に続いて、ＣＰＵ２０３は、Ｓ６１１、Ｓ６１２において、Ｓ２０９、Ｓ２１０と同様の処理を実行し、学習値生成処理が終了する。
【０１６０】
図１９は、第３の実施形態のホストリードの手順を示すフローチャートである。本図の説明において、リード対象のページを含む管理領域４を、対象の管理領域４と表記する。
【０１６１】
Ｓ７０１〜Ｓ７１２では、Ｓ３０１〜Ｓ３１２と同様の処理が実行される。即ち、シフトパターンＩ＿ｌｅａｒｎｅｄを適用した最初のリード処理が実行され（Ｓ７０４）、そのリード処理によって得られたリードデータにかかるエラー訂正が失敗すると（Ｓ７０５、Ｙｅｓ）、インデックス順に判定電圧を変化させた１回以上のリトライリードが実行される（Ｓ７０８〜Ｓ７１１）。
【０１６２】
リトライリードにおいて得られたリードデータにかかるエラー訂正が成功すると（Ｓ７１１、Ｎｏ）、ＣＰＵ２０３は、リードデータをホスト機器３００に送信する（Ｓ７１２）。そして、ＣＰＵ２０３は、所定の基準が満たされたか否かを判定する（Ｓ７１３）。Ｓ７１３は、対象の管理領域４に格納されたデータがしきい値電圧の変化によって喪失することを防止するための処理を実行するか否かを判定する処理であり、例えばＳ２０９と同じ処理である。所定の基準が満たされた場合（Ｓ７１３、Ｙｅｓ）、ＣＰＵ２０３は、例えば、リフレッシュ処理、コードレートの引き下げ、またはその両方を実行する（Ｓ７１４）。
【０１６３】
所定の基準が満たされていない場合（Ｓ７１３、Ｎｏ）、ＣＰＵ２０３は、対象の管理領域４に対して学習値生成処理を実行する（Ｓ７１５）。
【０１６４】
Ｓ７１４またはＳ７１５の処理の後、ホストリードの動作が終了する。なお、Ｓ７１３の処理の後、ホストリードの動作が終了し、その後の任意のタイミングにおいてＳ７１４またはＳ７１５の処理が実行されてもよい。
【０１６５】
リトライリードにおいて、Ｉ＿ｔｍｐがＩ＿ｌａｓｔを超えた場合（Ｓ７０９、Ｙｅｓ）、ＣＰＵ２０３は、Ｓ２１１と同様に所定の処理を実行し（Ｓ７１６）、ホストリードの動作が終了する。
【０１６６】
このように、第３の実施形態によれば、コントローラ２００は、パトロールリードにおいて、全てのシフトパターンのそれぞれ、即ちそれぞれ異なる複数の電圧値、を順次適用して複数のリード処理を実行し（Ｓ６０２〜Ｓ６０８）、当該複数のリード処理の結果に基づいて統計処理を実行することによって学習値を決定する（Ｓ６０９）。そして、ホストリードにおいては、コントローラ２００は、決定された学習値を適用してリード処理を実行する（Ｓ７０４）。
【０１６７】
この構成により、コントローラ２００は、判定電圧として適用された複数の電圧値から最も適した電圧値を選択することができるので、ホストリードにおいてエラーの発生を低減したりリトライリードの実行回数を低減したりすることが可能である。よって、リードレイテンシの悪化を低減することが可能である。
【０１６８】
なお、以上説明した例においては、パトロールリードにおいて、管理領域４内の全てのページが対象ページとして選択された。パトロールリードにおいて必ずしも管理領域４内の全てのページが対象ページとして選択されなくてもよい。パトロールリードにおいて、管理領域４内の一部のページ（１以上のページ）が対象ページとして選択されてもよい。対象ページとして選択されるページの数が少ない場合、パトロールリードにかかる負荷が低減される。対象ページとして選択されるページの数が多い場合、統計処理によって得られる学習値がより適した値となる。より適した値とは、エラー訂正の失敗なくリード可能なページの数が多いことをいう。
【０１６９】
また、コントローラ２００は、パトロールリードにおいて、複数のリード処理のそれぞれにおいてエラー訂正を実行し、エラー訂正の成否を記録する（Ｓ６０４）。そして、コントローラ２００は、複数のリード処理のそれぞれにかかるエラー訂正の成否に対して統計処理を実行する。
【０１７０】
また、パトロールリードにおいては、コントローラ２００は、エラー訂正が成功した際のシフトパターンの値を学習値として記憶する。インデックスの値は、前述したように、しきい値電圧の変化の進行に対応する順位を示している。ホストリードにおいては、コントローラ２００は、学習値を適用したリード処理においてエラー訂正が失敗した場合（Ｓ７０５、Ｙｅｓ）、学習値の順位に後続する順位が設定されたシフトパターンを適用してリトライリードを実行する（Ｓ７０８、Ｓ７１０）。
【０１７１】
つまり、ホストリードにおいては、学習値を適用したリード処理が実行され、当該リード処理においてエラー訂正が失敗した場合、学習値よりもしきい値電圧の変化がより進行した場合を想定したシフトパターンがリトライリードにおいて適用される。よって、エラー訂正の失敗なくリード可能なシフトパターンを効率的に探索することが可能である。
【０１７２】
なお、学習値生成処理ではシフトインデックスが０のシフトパターンから順番に使用されるとして説明した。最初に使用されるシフトパターンはこれに限定されない。すでに学習値が記録されている場合には、その学習値が示すシフトインデックスの近辺から順番に各シフトパターンが使用されてもよい。
【０１７３】
（第４の実施形態）
第４の実施形態では、学習値生成処理において、ディストリビューションリードが実行される。ディストリビューションリードは、しきい値電圧に対するメモリセルの数の分布を取得する処理である。ディストリビューションリードでは、判定電圧を変化させながら複数回のリード処理が実行される。
【０１７４】
一例では、ディストリビューションリードでは、１種類の判定電圧が所定の刻み幅ずつ変化せしめられながら複数回のリード処理が実行される。各リード処理では、オン状態またはオフ状態のうちの所定状態のメモリセルの数が、判定電圧として使用された値毎に取得される。そして、所定状態のメモリセルの数が、判定電圧として使用された値で微分されることで、しきい値電圧に対するメモリセルの数の分布が得られる。
【０１７５】
ディストリビューションリードの後、リードデータに含まれるエラービット数をできるだけ少なくすることが可能な判定電圧が演算される。
【０１７６】
例えば図６の場合、“Ａ”ステートと“Ｂ”ステートとの間においては、しきい値電圧がＶｂのとき、メモリセルの分布が極小となる。よって、Ｖｂを判定電圧として使用することによって、“１１０”としてプログラムされたデータが“１００”としてリードされたり、“１００”としてプログラムされたデータが“１１０”としてリードされたりするエラーの発生を低減することができる。
【０１７７】
第４の実施形態の学習値生成処理では、一例では、隣接する２つのステートの間において、しきい値電圧に対するメモリセルの分布が極小となる電圧値が演算され、演算された電圧値が学習される。隣接する２つのステートの間において、しきい値電圧に対するメモリセルの分布が極小となる電圧値を、最適判定電圧と表記する。なお、学習される電圧値はこれに限定されない。
【０１７８】
続いて、第４の実施形態のメモリシステム１の動作を説明する。第４の実施形態のパトロールリードの概略は、図１３が示す第１の実施形態の動作と同様であるので、説明を省略する。
【０１７９】
図２０は、第４の実施形態の学習値生成処理の手順を説明するフローチャートである。本図の説明において、学習値生成処理の対象の管理領域４を、対象の管理領域４と表記する。また、本図の例では、対象の管理領域４を構成する全てのページがディストリビューションリードの対象とされることとして説明する。
【０１８０】
まず、ＣＰＵ２０３は、対象の管理領域４から１つのページを対象ページとして選択する（Ｓ８０１）。そして、ＣＰＵ２０３は、対象ページに対してディストリビューションリードを実行し（Ｓ８０２）、ディストリビューションリードの結果に基づいて最適シフト量Ｖ＿ｏｐｔを取得する（Ｓ８０３）。
【０１８１】
例えば、Ｓ８０２では、ＣＰＵ２０３は、メモリチップ１０１に対し、判定電圧を所定の刻み幅ずつ変化させながらリード処理を複数回、命令する。そして、Ｓ８０３では、ＣＰＵ２０３は、リード処理毎のリードデータに基づいて、しきい値電圧に対するメモリセルの分布を生成し、生成した分布に基づいて最適シフト量Ｖ＿ｏｐｔを演算する。なお、最適シフト量Ｖ＿ｏｐｔは、最適判定電圧の、判定電圧の基準値からのシフト量である。Ｓ８０２およびＳ８０３では、判定電圧の種類毎に最適シフト量Ｖ＿ｏｐｔが取得される。
【０１８２】
なお、アクセス回路１１０が、ディストリビューションリードを実行可能に構成されてもよい。例えば、ＣＰＵ２０３は、メモリチップ１０１に対し、ディストリビューションリードを命令する。アクセス回路１１０は、ディストリビューションリードの命令を受信すると、ディストリビューションリードを実行し、ディストリビューションリードの結果に基づいて、判定電圧の種類毎の最適シフト量Ｖ＿ｏｐｔを演算する。そして、アクセス回路１１０は、判定電圧の種類毎の最適シフト量Ｖ＿ｏｐｔをコントローラ２００に出力する。
【０１８３】
Ｓ８０３の後、ＣＰＵ２０３は、判定電圧の種類毎の最適シフト量Ｖ＿ｏｐｔを記録する（Ｓ８０４）。例えば、Ｓ８０４では、ＣＰＵ２０３は、ＲＡＭ２０２に判定電圧の種類毎の最適シフト量Ｖ＿ｏｐｔを対象ページと対応付けて記録する。
【０１８４】
Ｓ８０４の後、ＣＰＵ２０３は、対象の管理領域４から全てのページが対象ページとして選択されたか否かを判定する（Ｓ８０５）。未選択のページが残っている場合（Ｓ８０５、Ｎｏ）、ＣＰＵ２０３は、未選択のページのうちから１つのページを対象ページとして選択し（Ｓ８０６）、Ｓ８０２の処理を再び実行する。
【０１８５】
対象の管理領域４から全てのページが対象ページとして選択された場合（Ｓ８０５、Ｙｅｓ）、ＣＰＵ２０３は、全てのページから得られた最適シフト量Ｖ＿ｏｐｔに対して統計処理を実行することによって代表シフト量Ｖ＿ｒｅｐｒｅｓｅｎｔを演算する（Ｓ８０７）。Ｓ８０７では、例えば、判定電圧の種類毎に全てのページの最適シフト量Ｖ＿ｏｐｔの平均値が、代表シフト量Ｖ＿ｒｅｐｒｅｓｅｎｔとして演算される。なお、統計処理の例はこれに限定されない。
【０１８６】
Ｓ８０７の後、ＣＰＵ２０３は、代表シフト量Ｖ＿ｒｅｐｒｅｓｅｎｔを、対象の管理領域４にかかる学習値Ｖ＿ｌｅａｒｎｅｄとして学習値テーブル２２１に記録する（Ｓ８０８）。ここでは、学習値テーブル２２１には、インデックスではなく電圧値（シフト量）が記録される。電圧値（シフト量）に代えて、その電圧値（シフト量）に最も近いシフト量が規定されたシフトパターンのインデックスが学習値テーブル２２１に記録されてもよい。電圧値（シフト量）に最も近いシフト量が規定されたシフトパターンは、任意の方法で特定され得る。例えば、電圧値（シフト量）に最も近いシフト量が規定されたシフトパターンは、最小二乗誤差が最も小さいシフトパターンである。電圧値（シフト量）に最も近いシフト量が規定されたシフトパターンは、ミニマックス法によって特定されてもよい。電圧値（シフト量）およびインデックスの両方が学習値テーブル２２１に記録されてもよい。
【０１８７】
Ｓ８０８に続いて、ＣＰＵ２０３は、Ｓ８０９、Ｓ８１０において、Ｓ２０９、Ｓ２１０と同様の処理を実行し、学習値生成処理が終了する。
【０１８８】
図２１は、第４の実施形態のホストリードの手順を示すフローチャートである。本図の説明において、リード対象のページを含む管理領域４を、対象の管理領域４と表記する。
【０１８９】
メモリシステム１がホスト機器３００からリード要求を受信すると（Ｓ９０１）、ＣＰＵ２０３は、受信したリード要求に基づいて対象の管理領域４を特定する（Ｓ９０２）。そして、ＣＰＵ２０３は、学習値テーブル２２１から対象の管理領域４にかかる学習値Ｖ＿ｌｅａｒｎｅｄを取得する（Ｓ９０３）。そして、ＣＰＵ２０３は、学習値Ｖ＿ｌｅａｒｎｅｄを適用して、リード対象のページに対するリード処理を実行する（Ｓ９０４）。Ｓ９０４では、ＣＰＵ２０３は、学習値Ｖ＿ｌｅａｒｎｅｄを基準値からのシフト量としてメモリチップ１０１に指示する。
【０１９０】
Ｓ９０４の処理によって、コントローラ２００は、リードデータを取得する。ＥＣＣ回路２０６は、取得されたリードデータに対しエラーの検出および訂正を実行する。ＣＰＵ２０３は、ＥＣＣ回路２０６によるエラー訂正が失敗したか否かを判定する（Ｓ９０５）。エラー訂正が成功した場合（Ｓ９０５、Ｎｏ）、ＣＰＵ２０３は、リードデータをホスト機器３００に送信する（Ｓ９０６）。
【０１９１】
エラー訂正が失敗した場合（Ｓ９０５、Ｙｅｓ）、ＣＰＵ２０３は、シフトインデックステーブル２２０に記録された複数のシフトパターンのうちから、学習値Ｖ＿ｌｅａｒｎｅｄに最も近いシフトパターンを特定する（Ｓ９０７）。学習値Ｖ＿ｌｅａｒｎｅｄに最も近いシフトパターンは、最小二乗法やミニマックス法など、任意の方法で特定され得る。特定されたシフトパターンのインデックスを、Ｉ＿ｃｌｏｓｅｓｔと表記する。
【０１９２】
ＣＰＵ２０３は、変数Ｉ＿ｔｍｐにＩ＿ｃｌｏｓｅｓｔを代入し（Ｓ９０８）、変数Ｉ＿ｔｍｐを１だけインクリメントする（Ｓ９０９）。そして、ＣＰＵ２０３は、Ｉ＿ｔｍｐがＩ＿ｌａｓｔを超えたか否かを判定する（Ｓ９１０）。Ｉ＿ｔｍｐがＩ＿ｌａｓｔを超えていない場合（Ｓ９１０、Ｎｏ）、ＣＰＵ２０３は、シフトパターンＩ＿ｔｍｐを適用して、リード対象のページに対するリード処理を再び実行する（Ｓ９１１）。
【０１９３】
Ｓ９１１の処理によって、コントローラ２００は、リードデータを取得する。ＥＣＣ回路２０６は、取得されたリードデータに対しエラーの検出および訂正を実行する。ＣＰＵ２０３は、ＥＣＣ回路２０６によるエラー訂正が失敗したか否かを判定する（Ｓ９１２）。エラー訂正が失敗した場合（Ｓ９１２、Ｙｅｓ）、ＣＰＵ２０３は、Ｓ９０９の処理を再び実行する。
【０１９４】
エラー訂正が成功した場合（Ｓ９１２、Ｎｏ）、ＣＰＵ２０３は、リードデータをホスト機器３００に送信する（Ｓ９１３）。そして、Ｓ９１４〜Ｓ９１６において、Ｓ７１３〜Ｓ７１５と同様の処理が実行される。
【０１９５】
Ｉ＿ｔｍｐがＩ＿ｌａｓｔを超えた場合（Ｓ９１０、Ｙｅｓ）、ＣＰＵ２０３は、Ｓ２１１と同様に所定の処理を実行し（Ｓ９１７）、ホストリードの動作が終了する。
【０１９６】
なお、以上の説明においては、管理領域４内の全てのページが対象ページとして選択された。パトロールリードにおいて必ずしも管理領域４内の全てのページが対象ページとして選択されなくてもよい。パトロールリードにおいて、管理領域４内の一部のページ（１以上のページ）が対象ページとして選択されてもよい。対象ページとして選択されるページの数が少ない場合、パトロールリードにかかる負荷が低減される。対象ページとして選択されるページの数が多い場合、統計処理によって得られる学習値がより適した値となる。より適した値とは、エラー訂正の失敗なくリード可能なページの数が多いことをいう。
【０１９７】
また、学習値テーブル２２１には、インデックス、電圧値（シフト量）、またはその両方が記録され得る。
【０１９８】
このように、第４の実施形態においては、コントローラ２００は、パトロールリードにおいて、１以上のページのそれぞれに対してディストリビューションリードを実行し、１以上のページのそれぞれにかかる最適シフト量Ｖ＿ｏｐｔを取得する（Ｓ８０２〜Ｓ８０６）。そして、コントローラ２００は、１以上のページのそれぞれにかかる最適シフト量Ｖ＿ｏｐｔに対して統計処理を実行することによって（Ｓ８０７）、代表値Ｖ＿ｒｅｐｒｅｓｅｎｔを学習値として演算する。そして、コントローラ２００は、ホストリードにおいては、管理領域４に対してその学習値を共通に適用する。
【０１９９】
よって、学習値がディストリビューションリードによって取得されるので、ホストリードにおいてエラー訂正が失敗する可能性を低減することが可能である。よって、リードレイテンシの悪化が低減される。
【０２００】
（第５の実施形態）
第４の実施形態では、Ｓ８０７において、判定電圧の種類毎に全てのページの最適シフト量Ｖ＿ｏｐｔの平均値が、代表シフト量Ｖ＿ｒｅｐｒｅｓｅｎｔとして演算される例を説明した。統計処理の方法はこれに限定されない。
【０２０１】
第５の実施形態では、別の統計処理の方法の一例を説明する。第５の実施形態の統計処理では、エラー訂正の失敗なくリード可能な電圧値の範囲に基づいて重み付けした最適シフト量Ｖ＿ｏｐｔの重み付け平均が演算される。第５の実施形態は、第４の実施形態に適用可能である。
【０２０２】
図２２は、第５の実施形態の統計処理の方法を説明するフローチャートである。
【０２０３】
まず、ＣＰＵ２０３は、変数ｉをゼロで初期化して（Ｓ１００１）、最適シフト量が取得された複数のページのうちの１つを対象ページとして選択する（Ｓ１００２）。そして、ＣＰＵ２０３は、対象ページにかかる最適シフト量（Ｖ＿ｏｐｔ＿ｉと表記する）を取得する（Ｓ１００３）。例えばＣＰＵ２０３は、Ｓ８０４によって記録された最適シフト量を取得する。
【０２０４】
続いて、ＣＰＵ２０３は、判定電圧を最適シフト量Ｖ＿ｏｐｔ＿ｉを基準として正側および負側に変化させながら対象ページに対して複数回のリード処理を実行することによって、エラー訂正が失敗しないシフト量の範囲を取得する（Ｓ１００４）。Ｓ１００４で取得される範囲の最小値をＶ＿ｍｉｎ＿ｉ、当該範囲の最大値をＶ＿ｍａｘ＿ｉと表記する。
【０２０５】
ＣＰＵ２０３は、取得された範囲（Ｖ＿ｍｉｎ＿ｉ、Ｖ＿ｍａｘ＿ｉ）を記録する（Ｓ１００５）。例えば、ＣＰＵ２０３は、例えばＲＡＭ２０２に範囲（Ｖ＿ｍｉｎ＿ｉ、Ｖ＿ｍａｘ＿ｉ）を対象ページと対応付けて記録する。
【０２０６】
続いて、ＣＰＵ２０３は、最適シフト量が取得された全てのページが対象ページとして選択されたか否かを判定する（Ｓ１００６）。未選択のページが残っている場合（Ｓ１００６、Ｎｏ）、ＣＰＵ２０３は、ｉを１だけインクリメントする（Ｓ１００７）。そして、ＣＰＵ２０３は、未選択のページのうちから１つのページを対象ページとして選択し（Ｓ１００８）、Ｓ１００３の処理を再び実行する。
【０２０７】
最適シフト量が取得された全てのページが選択された場合（Ｓ１００６、Ｙｅｓ）、ＣＰＵ２０３は、範囲（Ｖ＿ｍｉｎ＿ｉ、Ｖ＿ｍａｘ＿ｉ）の幅の逆数で重みづけした最適シフト量Ｖ＿ｏｐｔ＿ｉの平均値を、代表値Ｖ＿ｒｅｐｒｅｓｅｎｔとして演算する（Ｓ１００９）。即ち、Ｓ１００９では、ＣＰＵ２０３は、下記の数式（１）を用いて代表値Ｖ＿ｒｅｐｒｅｓｅｎｔを演算する。
【数１】
2019164850.tif 000003
【０２０８】
なお、Ｓ１００９の処理は、判定電圧の種類ごとに個別に実行される。
【０２０９】
Ｓ１００９によって、第５の実施形態の統計処理が終了する。
【０２１０】
このように、第５の実施形態では、コントローラ２００は、エラー訂正の失敗なくリード可能な電圧値の範囲に基づいて重み付けした最適シフト量Ｖ＿ｏｐｔの重み付け平均を統計処理において演算する。エラー訂正の失敗なくリード可能な電圧値の範囲が狭いページほど重み付け係数を大きくすることで、管理領域４内のできるだけ多くのページがエラー訂正の失敗なくリード可能な電圧値を学習することが可能となる。
【０２１１】
（第６の実施形態）
第６の実施形態では、統計処理のさらに別の例を説明する。第６の実施形態では、統計処理において、リード処理で検出されるエラービット数を用いて、最適シフト量Ｖ＿ｏｐｔ＿ｉの重み付け平均を演算する。第６の実施形態の統計処理は、第４の実施形態に適用できる。
【０２１２】
図２３は、第６の実施形態の統計処理の方法を説明するフローチャートである。
【０２１３】
まず、ＣＰＵ２０３は、変数ｉをゼロで初期化して（Ｓ１１０１）、最適シフト量が取得された複数のページのうちの１つを対象ページとして選択する（Ｓ１１０２）。そして、ＣＰＵ２０３は、対象ページにかかる最適シフト量（Ｖ＿ｏｐｔ＿ｉと表記する）を取得する（Ｓ１１０３）。例えばＣＰＵ２０３は、Ｓ８０４によって記録された最適シフト量を取得する。
【０２１４】
そして、ＣＰＵ２０３は、最適シフト量Ｖ＿ｏｐｔ＿ｉを適用して対象ページに対するリード処理を実行する（Ｓ１１０４）。Ｓ１１０４によって、コントローラ２００は、リードデータを取得する。ＥＣＣ回路２０６は、取得されたリードデータに対しエラーの検出を実行する。ＣＰＵ２０３は、検出されたエラービット数（Ｆ＿ｉと表記する）をＥＣＣ回路２０６から取得し、取得したエラービット数Ｆ＿ｉを記録する（Ｓ１１０５）。例えば、ＣＰＵ２０３は、ＲＡＭ２０２にエラービット数Ｆ＿ｉを対象ページと対応付けて記録する。
【０２１５】
続いて、ＣＰＵ２０３は、最適シフト量が取得された全てのページが対象ページとして選択されたか否かを判定する（Ｓ１１０６）。未選択のページが残っている場合（Ｓ１１０６、Ｎｏ）、ＣＰＵ２０３は、ｉを１だけインクリメントする（Ｓ１１０７）。そして、ＣＰＵ２０３は、未選択のページのうちから１つのページを対象ページとして選択し（Ｓ１１０８）、Ｓ１１０３の処理を再び実行する。
【０２１６】
最適シフト量が取得された全てのページが選択された場合（Ｓ１１０６、Ｙｅｓ）、ＣＰＵ２０３は、エラービット数Ｆ＿ｉで重みづけした最適シフト量Ｖ＿ｏｐｔ＿ｉの平均値を、代表値Ｖ＿ｒｅｐｒｅｓｅｎｔとして演算する（Ｓ１１０９）。即ち、Ｓ１１０９では、ＣＰＵ２０３は、下記の数式（２）を用いて代表値Ｖ＿ｒｅｐｒｅｓｅｎｔを演算する。
【数２】
2019164850.tif 000004
【０２１７】
なお、Ｓ１１０９の処理は、判定電圧の種類ごとに個別に実行される。
【０２１８】
Ｓ１１０９によって、第６の実施形態の統計処理が終了する。
【０２１９】
最適シフト量Ｖ＿ｏｐｔを適用した際のエラービット数Ｆが大きいことは、エラー訂正の失敗なくリード可能な電圧値の範囲が狭いことを意味する。第６の実施形態によれば、コントローラ２００は、統計処理において、リード処理で検出されるエラービット数に基づく重み付け平均を演算する。よって、第５の実施形態と同様に、管理領域４内のできるだけ多くのページがエラー訂正の失敗なくリード可能な電圧値を学習することが可能となる。
【０２２０】
（第７の実施形態）
第１の実施形態では、管理領域４の設定方法の一例として、グループ２が１６個のサブグループ３に均等に分割され、各サブグループ３に対して種類が異なるページによって構成される複数の管理領域４が設定される例を説明した。管理領域４の設定方法はこれに限定されない。
【０２２１】
例えば、グループ２から生成されるサブグループ３の数は１６に限定されない。例えば、グループ２は、２個、４個、８個、または６４個のサブグループ３に分割され得る。
【０２２２】
別の例では、グループ２は、複数のサブグループ３に不均等に分割され得る。図２４は、グループ２を分割する別の方法を示す図である。本図に示されるように、グループ２は、ワード線の並び方向に、１つのワード線からなる４つのサブグループ３ａと、１５本のワード線からなる４つのサブグループ３ｂとに分割されている。そして、ＮＡＮＤストリング１１４の両端のそれぞれに、２つのサブグループ３ａが位置している。即ち、グループ２は、ワード線の並び方向に不均等に複数のサブグループ３に分割されている。
【０２２３】
なお、図３、４に示される構造を有するＮＡＮＤ型フラッシュメモリでは、ＮＡＮＤストリング１１４の端部近くに位置するメモリセルのしきい値電圧の変化特性は、ＮＡＮＤストリング１１４の中央部に位置するメモリセルと大きく異なる場合がある。よって、ＮＡＮＤストリング１１４の中央部に位置するメモリセルとＮＡＮＤストリング１１４の端部近くに位置するメモリセルとが同一の管理領域４に含まれる場合、管理領域４内の全てのデータを１つの学習値でエラー訂正の失敗なくリードすることが困難になる。これに対し、図２４の例では、ＮＡＮＤストリング１１４の両端部近くと中央部とで分割の粒度が異なっている。具体的には、ＮＡＮＤストリング１１４の両端部近くのほうが、ＮＡＮＤストリング１１４の中央部よりも分割の粒度が細かい。このように、ＮＡＮＤストリング１１４の端部近くでは細かい粒度でサブグループ３が設定されることによって、特異な特性を有するメモリセルを独立した管理領域４に含めて管理することができるので、グループ２全体としてエラー訂正の失敗の可能性を低減することが可能となる。
【０２２４】
さらに別の例では、各ブロックＢＬＫが１つのサブグループ３として設定されてもよい。
【０２２５】
なお、以上に述べた各例では、各サブグループ３ではページの種類毎に異なる管理領域４が設けられた。各サブグループ３の複数種類のページによって構成される記憶領域によって１つの管理領域４が設定されてもよい。即ち、１つのサブグループ３内ではページの種類に関係なく同一の学習値（例えば学習されたシフトパターン）が適用されてもよい。
【０２２６】
また、複数のティア（Ｔｉｅｒ）がＤ３方向に積層される場合がある。各ティアは、図４に示される構造を有している。メモリセルアレイ１１１が、複数のティアが積層された構造を有する場合、ティア毎に学習値テーブル２２１が設けられてもよいし、複数のティアで１つの学習値テーブル２２１が共通に使用されてもよい。例えば、複数のティア間でしきい値電圧の変化特性が著しく異なる場合、ティア毎に学習値テーブル２２１が設けられる。複数のティア間でしきい値電圧の変化特性が類似する場合、複数のティアに対し同一の学習値テーブル２２１が使用される。
【０２２７】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０２２８】
１  メモリシステム、１００  ＮＡＮＤ型フラッシュメモリ、１０１  メモリチップ、１１０  アクセス回路、１１１  メモリセルアレイ、２００  コントローラ、２０２  ＲＡＭ、２０３  ＣＰＵ、２０６  ＥＣＣ回路、２２０  シフトインデックステーブル、２２１  学習値テーブル、３００  ホスト機器。
【図１】
2019164850.tif 000005
【図２】
2019164850.tif 000006
【図３】
2019164850.tif 000007
【図４】
2019164850.tif 000008
【図５】
2019164850.tif 000009
【図６】
2019164850.tif 000010
【図７】
2019164850.tif 000011
【図８】
2019164850.tif 000012
【図９】
2019164850.tif 000013
【図１０】
2019164850.tif 000014
【図１１】
2019164850.tif 000015
【図１２】
2019164850.tif 000016
【図１３】
2019164850.tif 000017
【図１４】
2019164850.tif 000018
【図１５】
2019164850.tif 000019
【図１６】
2019164850.tif 000020
【図１７】
2019164850.tif 000021
【図１８】
2019164850.tif 000022
【図１９】
2019164850.tif 000023
【図２０】
2019164850.tif 000024
【図２１】
2019164850.tif 000025
【図２２】
2019164850.tif 000026
【図２３】
2019164850.tif 000027
【図２４】
2019164850.tif 000028