(57)【要約】【課題】読出し電圧補正によるレイテンシの増加を抑制する。【解決手段】一実施形態のメモリシステムは、メモリコントローラと、各々が複数のメモリセルを含む複数のセルユニットを備えた第１不揮発性メモリと、を備える。メモリコントローラは、第１セルユニットから読み出した第１データセットと、第１データセットに対して誤り訂正処理を試みて生成した第１期待データセットと、を第１バッファに格納し、第１セルユニット内の複数のメモリセルのうち、第１データセット及び第１期待データセット内のデータの第１及び第２組合せにそれぞれ対応する第１及び第２メモリセルの数をカウントし、第１及び第２メモリセルの数に基づいて、第１セルユニットからの読出し処理に使用する読出し電圧のシフト量を算出し、シフト量を、第１セルユニットからの次の読出し処理に適用するように構成される。【選択図】図５
2020047318.tif 000002
【特許請求の範囲】
【請求項１】
各々が複数のメモリセルを含む複数のセルユニットを含むメモリセルアレイを備えた第１不揮発性メモリと、
前記第１不揮発性メモリ内の前記複数のセルユニットのうちの第１セルユニットから読み出した第１データセットと、前記第１データセットに対して誤り訂正処理を試みて生成した第１期待データセットと、を第１バッファに格納し、
前記第１セルユニット内の前記複数のメモリセルのうち、前記第１データセット及び前記第１期待データセット内のデータの第１組合せに対応する第１メモリセルの数と、第２組合せに対応する第２メモリセルの数と、をカウントし、
前記カウントされた前記第１メモリセルの数及び前記第２メモリセルの数に基づいて、前記第１セルユニットからの読出し処理に使用する読出し電圧のシフト量を算出し、
前記シフト量を、前記第１セルユニットからの次の読出し処理に適用する
ように構成されたメモリコントローラと、
を備えるメモリシステム。
【請求項２】
前記シフト量を算出することは、
前記第１メモリセルの数に対する前記第２メモリセルの数の割合を算出し、
前記割合が基準値を超えたか否かに応じて、前記シフト量の極性を判定する、
ことを含む、
請求項１記載のメモリシステム。
【請求項３】
前記シフト量を算出することは、
前記割合の絶対値の大きさに応じて、前記シフト量の絶対値の大きさを判定する
ことを更に含む、
請求項２記載のメモリシステム。
【請求項４】
前記複数のメモリセルの各々は、第１ビット及び第２ビットを含むデータを保持可能であり、
前記第１データセットは、前記第１ビットに対応し、
前記メモリコントローラは、
前記第１セルユニットから読み出した前記第２ビットに対応する第２データセットを前記第１バッファに更に格納し、
前記第１セルユニット内の前記複数のメモリセルのうち、前記第１データセット、前記第２データセット、及び前記第１期待データセット内のデータの第３組合せに対応する第３メモリセルの数と、第４組合せに対応する第４メモリセルの数と、をカウントし、
前記カウントされた前記第３メモリセルの数及び前記第４メモリセルの数に基づいて、前記第１セルユニットからの前記第１ビットに対応するデータの読出し処理に使用する読出し電圧のシフト量を算出する
ように構成された、
請求項１記載のメモリシステム。
【請求項５】
前記複数のメモリセルの各々は、第１ビット及び第２ビットを含むデータを保持可能であり、
前記第１データセットは、前記第１ビットに対応し、
前記メモリコントローラは、
前記第１セルユニットから読み出した前記第２ビットに対応する第２データセットと、前記第２データセットに対して誤り訂正処理を試みて生成した第２期待データセットと、を前記第１バッファに更に格納し、
前記第１セルユニット内の前記複数のメモリセルのうち、前記第１データセット、前記第２データセット、前記第１期待データセット、及び前記第２期待データセット内のデータの第５組合せに対応する第５メモリセルの数と、第６組合せに対応する第６メモリセルの数と、をカウントし、
前記カウントされた前記第５メモリセルの数及び前記第６メモリセルの数に基づいて、前記第１セルユニットからの前記第１ビットに対応するデータの読出し処理に使用する読出し電圧のシフト量を算出する
ように構成された、
請求項１記載のメモリシステム。
【請求項６】
前記メモリコントローラは、第１電圧及び第２電圧を使用して前記第１データセットを読み出す場合、
前記第１電圧と前記第２電圧との間の第３電圧を使用して読み出した分離データセットを前記第１バッファに更に格納し、
前記第１セルユニット内の前記複数のメモリセルのうち、前記第１データセット、前記第１期待データセット、及び前記分離データセット内のデータの第７組合せに対応する第７メモリセルの数と、第８組合せに対応する第８メモリセルの数と、をカウントし、
前記カウントされた前記第７メモリセルの数及び前記第８メモリセルの数に基づいて、前記第１電圧のシフト量を算出する
ように構成され、
前記第７組合せにおける前記分離データセット内のデータと、前記第８組合せにおける前記分離データセット内のデータとは一致する、
請求項１記載のメモリシステム。
【請求項７】
前記メモリコントローラは、前記第１電圧及び前記第２電圧を使用して前記第１データセットを読み出す場合、
前記第１セルユニット内の前記複数のメモリセルのうち、前記第１データセット、前記第１期待データセット、及び前記分離データセット内のデータの第９組合せに対応する第９メモリセルの数と、第１０組合せに対応する第１０メモリセルの数と、をカウントし、
前記カウントされた前記第９メモリセルの数及び前記第１０メモリセルの数に基づいて、前記第２電圧のシフト量を算出する
ように構成され、
前記第９組合せにおける前記分離データセット内のデータと、前記第１０組合せにおける前記分離データセット内のデータとは一致し、
前記第７組合せ及び前記第８組合せの各々における前記分離データセット内のデータと、前記第９組合せ及び前記第１０組合せの各々における前記分離データセット内のデータとは互いに異なる、
請求項６記載のメモリシステム。
【請求項８】
前記複数のメモリセルの各々は、第１ビット及び第２ビットを含むデータを保持可能であり、
前記第１データセットは、前記第１ビットに対応し、
前記メモリコントローラは、
前記第１セルユニットから読み出した前記第２ビットに対応する第２データセットと、前記第２データセットに対して誤り訂正処理を試みて生成した第２期待データセットと、前記第１ビット又は前記第２ビットに対応するデータの読出し処理に使用する第４電圧及び第５電圧の間に位置する第６電圧を使用して読み出した分離データセットと、を前記第１バッファに更に格納し、
前記第１セルユニット内の前記複数のメモリセルのうち、前記第１データセット、前記第２データセット、前記第１期待データセット、前記第２期待データセット、及び分離データセット内のデータの第１１組合せに対応する第１１メモリセルの数と、第１２組合せに対応する第１２メモリセルの数と、をカウントし、
前記カウントされた前記第１１メモリセルの数及び前記第１２メモリセルの数に基づいて、前記第４電圧又は前記第５電圧のシフト量を算出する
ように構成された、
請求項１記載のメモリシステム。
【請求項９】
前記複数のメモリセルの各々は、第３ビットを含むデータを更に保持可能であり、
前記メモリコントローラは、
前記算出された前記第４電圧又は前記第５電圧の前記シフト量に基づき、前記第３ビットに対応する第３データの読出し処理に使用する第７電圧のシフト量を推定する
ように構成された、
請求項８記載のメモリシステム。
【請求項１０】
前記メモリコントローラは、互いに異なるｍ個の読出し電圧を使用して前記第１データセットを読み出す場合（ｍは２以上の整数）、
前記第１データセットと、前記第１期待データセットと、各々が前記ｍ個の読出し電圧のうちの互いに隣り合う２つの間に位置する、互いに異なる（ｍ−１）個の読出し電圧をそれぞれ使用して読み出した（ｍ−１）個の分離データセットと、を前記第１バッファに格納し、
前記第１セルユニット内の前記複数のメモリセルのうち、前記（ｍ−１）個の分離データセットのうちの少なくとも１つ、前記第１データセット、及び前記第１期待データセットの第１３組合せに対応する第１３メモリセルの数と、第１４組合せに対応する第１４メモリセルの数と、をカウントし、
前記カウントされた前記第１３メモリセルの数及び前記第１４メモリセルの数に基づいて、前記ｍ個の読出し電圧のうちの１つのシフト量を算出する
ように構成された、
請求項１記載のメモリシステム。
【請求項１１】
前記メモリシステムは、各々が複数のメモリセルを含む複数のセルユニットを含むメモリセルアレイを備えた第２不揮発性メモリを更に備え、
前記第１不揮発性メモリ及び前記第２不揮発性メモリは、互いに異なるバスを介して前記メモリコントローラに接続され、
前記メモリコントローラは、    前記第２不揮発性メモリ内の前記複数のセルユニットのうちの第２セルユニットから読み出した第３データセットと、前記第３データセットに対して誤り訂正処理を試みて生成した第３期待データセットと、を第２バッファに格納し、
前記第２セルユニット内の前記複数のメモリセルのうち、前記第３データセット及び前記第３期待データセット内のデータの第１５組合せに対応する第１５メモリセルの数と、第１６組合せに対応する第１６メモリセルの数と、をカウントし、
前記カウントされた前記第１５メモリセルの数及び前記第１６メモリセルの数に基づいて、前記第２セルユニットからの読出し処理に使用する読出し電圧のシフト量を算出し、
前記シフト量を、前記第２セルユニットからの次の読出し処理に適用する
ように構成された、
請求項１記載のメモリシステム。
【請求項１２】
前記メモリコントローラは、
第１カウンタ及び第２カウンタを含み、
前記第１カウンタを使用して、前記第１メモリセルの数と、前記第２メモリセルの数と、をカウントし、
前記第２カウンタを使用して、前記第１５メモリセルの数と、前記第１６メモリセルの数と、をカウントする
ように構成された、
請求項１１記載のメモリシステム。
【請求項１３】
前記第１期待データセットは、前記第１データセットに対する誤り訂正処理に成功して生成された、請求項１記載のメモリシステム。
【請求項１４】
前記第１期待データセットは、前記第１データセットに対する誤り訂正処理に失敗して生成された、請求項１記載のメモリシステム。
【請求項１５】
前記メモリコントローラは、
前記第１セルユニット内の前記複数のメモリセルのうち、前記第１データセット内のデータと前記第１期待データセット内のデータとが異なる第１７メモリセルの数に基づき、前記シフト量を算出するか否かを判定する
ように更に構成された、
請求項１記載のメモリシステム。
【請求項１６】
前記メモリコントローラは、
前記第１不揮発性メモリ内の前記複数のセルユニットの各々に対して、所定の順番で前記読出し処理を繰り返し実行し、
前記第１セルユニット内の前記複数のメモリセルのうち、前記第１データセット内のデータと前記第１期待データセット内のデータとが異なる第１７メモリセルの数に基づき、前記読出し処理の次の繰り返し単位の際に前記シフト量を算出するか否かを判定する、
請求項１記載のメモリシステム。
【請求項１７】
前記複数のセルユニットの各々は、データの書込み処理における単位である、請求項１記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
実施形態は、メモリシステムに関する。
【背景技術】
【０００２】
半導体記憶装置としてのＮＡＮＤ型フラッシュメモリと、半導体記憶装置を制御するメモリコントローラと、を含むメモリシステムが知られている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許出願公開第２０１８／９０２１２号明細書
【特許文献２】特開２０１５−１３３１６１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
読出し電圧補正によるレイテンシの増加を抑制する。
【課題を解決するための手段】
【０００５】
実施形態のメモリシステムは、メモリコントローラと、各々が複数のメモリセルを含む複数のセルユニットを含むメモリセルアレイを備えた第１不揮発性メモリと、を備える。上記メモリコントローラは、上記第１不揮発性メモリ内の上記複数のセルユニットのうちの第１セルユニットから読み出した第１データセットと、上記第１データセットに対して誤り訂正処理を試みて生成した第１期待データセットと、を第１バッファに格納し、上記第１セルユニット内の上記複数のメモリセルのうち、上記第１データセット及び上記第１期待データセット内のデータの第１組合せに対応する第１メモリセルの数と、第２組合せに対応する第２メモリセルの数と、をカウントし、上記カウントされた上記第１メモリセルの数及び上記第２メモリセルの数に基づいて、上記第１セルユニットからの読出し処理に使用する読出し電圧のシフト量を算出し、上記シフト量を、上記第１セルユニットからの次の読出し処理に適用するように構成される。
【図面の簡単な説明】
【０００６】
【図１】第１実施形態に係るメモリシステムの構成を説明するためのブロック図。
【図２】第１実施形態に係る半導体記憶装置の構成を説明するためのブロック図。
【図３】第１実施形態に係る半導体記憶装置のメモリセルアレイの構成を説明するための回路図。
【図４】第１実施形態に係る半導体記憶装置のメモリセルアレイの構成を説明するための断面図。
【図５】第１実施形態に係るメモリセルアレイの閾値分布を説明するための模式図。
【図６】第１実施形態に係るセンスアンプモジュールの構成を説明するためのブロック図。
【図７】第１実施形態に係るメモリコントローラに保持される履歴テーブルを説明するための模式図。
【図８】第１実施形態に係るメモリコントローラ内の読出し電圧補正回路の構成を説明するためのブロック図。
【図９】第１実施形態に係るメモリシステムにおけるシフト量算出処理を伴う読出し処理を説明するためのフローチャート。
【図１０】第１実施形態に係るメモリシステムにおけるシフト量算出処理を説明するためのフローチャート。
【図１１】第１実施形態に係るメモリシステムにおけるシフト量算出処理のうち、評価指標算出対象のカウント値が選択されるまでの処理を説明するための模式図。
【図１２】第１実施形態に係るメモリシステムにおけるシフト量算出処理のうち、評価指標を算出する処理を説明するための模式図。
【図１３】第１実施形態に係るメモリシステムにおけるシフト量算出処理のうち、評価指標に基づいてシフト量を算出する処理を説明するための模式図。
【図１４】第１実施形態の第１変形例に係るメモリシステムにおけるシフト量算出処理を伴う読出し処理を説明するためのフローチャート。
【図１５】第１実施形態の第２変形例に係るメモリコントローラに保持される履歴テーブルを説明するための模式図。
【図１６】第１実施形態の第２変形例に係るメモリシステムにおけるシフト量算出処理を伴う読出し処理を説明するためのフローチャート。
【図１７】第２実施形態に係るメモリシステムにおけるシフト量算出処理を説明するための模式図。
【図１８】第２実施形態に係るメモリシステムにおけるシフト量算出処理を説明するための模式図。
【図１９】第３実施形態に係るメモリシステムにおけるシフト量算出処理を伴う読出し処理を説明するためのフローチャート。
【図２０】第４実施形態に係るメモリセルアレイの閾値分布を説明するための模式図。
【図２１】第４実施形態に係るメモリセルアレイの読出し電圧補正回路の構成を説明するためのブロック図。
【図２２】第４実施形態に係るメモリシステムにおけるシフト量算出処理を伴う下位ページ読出し処理を説明するためのフローチャート。
【図２３】第４実施形態に係るメモリシステムにおける下位ページ読出し処理に基づくシフト量算出処理を説明するための模式図。
【図２４】第４実施形態に係るメモリシステムにおけるシフト量算出処理を伴う上位ページ読出し処理を説明するためのフローチャート。
【図２５】第４実施形態に係るメモリシステムにおける上位ページ読出し処理に基づくシフト量算出処理を説明するための模式図。
【図２６】第４実施形態に係るメモリシステムにおけるシフト量算出処理を伴う中位ページ読出し処理を説明するためのフローチャート。
【図２７】第４実施形態に係るメモリシステムにおける中位ページ読出し処理に基づくシフト量算出処理を説明するための模式図。
【図２８】第４実施形態に係るメモリシステムにおける中位ページ読出し処理に基づくシフト量算出処理を説明するための模式図。
【図２９】第５実施形態に係るメモリセルアレイの閾値分布を説明するための模式図。
【図３０】第５実施形態に係るメモリシステムにおけるシフト量算出処理を伴う下位ページ読出し処理を説明するためのフローチャート。
【図３１】第５実施形態に係るメモリシステムにおける下位ページ読出し処理に基づくシフト量算出処理を説明するための模式図。
【図３２】第５実施形態に係るメモリシステムにおける下位ページ読出し処理に基づくシフト量算出処理を説明するための模式図。
【図３３】第５実施形態に係るメモリシステムにおける下位ページ読出し処理に基づくシフト量算出処理を説明するための模式図。
【図３４】第６実施形態に係るメモリシステムにおけるシフト量算出及び推定処理を伴う下位ページ及びトップページ読出し処理を説明するためのフローチャート。
【図３５】第６実施形態に係るメモリシステムにおける下位ページ及びトップページ読出し処理に基づくシフト量算出処理を説明するための模式図。
【図３６】第６実施形態に係るメモリシステムにおける下位ページ及びトップページ読出し処理に基づくシフト量算出処理を説明するための模式図。
【図３７】第６実施形態に係るメモリシステムにおける下位ページ及びトップページ読出し処理に基づくシフト量算出処理を説明するための模式図。
【図３８】第６実施形態に係るメモリシステムにおける下位ページ及びトップページ読出し処理に基づくシフト量算出処理を説明するための模式図。
【図３９】第６実施形態に係るメモリシステムにおける下位ページ及びトップページ読出し処理に基づくシフト量算出処理を説明するための模式図。
【図４０】第６実施形態に係るメモリシステムにおける下位ページ及びトップページ読出し処理に基づくシフト量推定処理を説明するための模式図。
【図４１】その他の第１変形例に係るメモリシステムにおけるシフト量算出処理を伴う読出し処理を説明するためのフローチャート。
【図４２】その他の第２変形例に係るメモリシステムの構成を説明するためのブロック図。
【発明を実施するための形態】
【０００７】
以下、図面を参照して実施形態について説明する。なお、以下の説明において、同一の機能及び構成を有する構成要素については、共通する参照符号を付す。また、共通する参照符号を有する複数の構成要素を区別する場合、当該共通する参照符号に添え字を付して区別する。なお、複数の構成要素について特に区別を要さない場合、当該複数の構成要素には、共通する参照符号のみが付され、添え字は付さない。
【０００８】
１．第１実施形態
第１実施形態に係るメモリシステムについて説明する。以下では、不揮発性メモリとしてのＮＡＮＤフラッシュメモリと、当該ＮＡＮＤフラッシュメモリを制御するメモリコントローラと、を備えたメモリシステムを例に挙げて説明する。
【０００９】
１．１  構成
１．１．１  メモリシステムの構成
第１実施形態に係るメモリシステムの構成について、図１を用いて説明する。
【００１０】
図１に示すように、メモリシステム１は、メモリコントローラ１００及びＮＡＮＤパッケージ群２００を備えている。メモリコントローラ１００とＮＡＮＤパッケージ群２００とは、例えばそれらの組み合わせにより一つの半導体装置を構成しても良く、その例としてはＳＤＴＭカードのようなメモリカードや、ＳＳＤ（solid state drive）等が挙げられる。
【００１１】
メモリコントローラ１００は、ホストバスによってホスト機器２に接続される。そしてメモリコントローラ１００は、ＮＡＮＤパッケージ群２００を制御し、またホスト機器２から受信した命令に応答して、ＮＡＮＤパッケージ群２００にアクセスする。ホスト機器２は、例えばデジタルカメラやパーソナルコンピュータ等であり、ホストバスは、例えばＳＤＴＭインタフェース、ＳＡＳ（Serial attached SCSI(small computer system interface)）、ＳＡＴＡ（Serial ATA(advanced technology attachment)）、ＰＣＩｅ（Peripheral component interconnect express）、又はＮＶＭｅ（Non‐volatile memory express）に従ったバスである。
【００１２】
また、メモリコントローラ１００は、後述するＮＡＮＤインタフェースに従った信号の送受信を行うＮＡＮＤバスによって、ＮＡＮＤパッケージ群２００に接続される。
【００１３】
ＮＡＮＤパッケージ群２００は、複数のチャネルＣＨ（ＣＨ０、ＣＨ１、…）を含む。複数のチャネルＣＨの各々は、対応するＮＡＮＤバスによって、メモリコントローラ１００に対して個別に接続される。なお、ＮＡＮＤパッケージ群２００内のチャネル数は、任意の数が適用可能である。
【００１４】
複数のチャネルＣＨの各々は、複数のチップＣｈｉｐ（Ｃｈｉｐ０、Ｃｈｉｐ１、…）を含む。複数のチップＣｈｉｐの各々は、例えば、ＮＡＮＤフラッシュメモリとしての機能を有する。なお、チャネルＣＨ内のチップ数は、任意の数が適用可能である。当該構成は、図示しない他のチャネルＣＨにおいても同様である。チップＣｈｉｐの構成については、後述する。
【００１５】
１．１．２  メモリコントローラの構成
引き続き図１を用いて、メモリコントローラ１００の構成の詳細について説明する。
【００１６】
メモリコントローラ１００は、例えば、ＳｏＣ（System on a chip）であり、ホストインタフェース回路１１０、メモリ（ＲＡＭ）１２０、プロセッサ（ＣＰＵ）１３０、バッファメモリ１４０、ＮＡＮＤインタフェース回路１５０、ＥＣＣ回路１６０、ＮＡＮＤコントローラ群１７０、及び読出し電圧補正回路１８０を備えている。なお、以下に説明されるメモリコントローラ１００の各部１１０−１７０の機能は、ハードウェア構成、又はハードウェア資源とファームウェアとの組合せ構成のいずれでも実現可能である。また、読出し電圧補正回路１８０は、特に記載する場合を除き、ファームウェアとは独立して機能し得るハードウェア構成によって実現可能であるものとする。
【００１７】
ホストインタフェース回路１１０は、ホストバスを介してホスト機器２と接続され、ホスト機器２から受信した命令及びデータを、それぞれプロセッサ１３０及びバッファメモリ１４０に転送する。またプロセッサ１３０の命令に応答して、バッファメモリ１４０内のデータをホスト機器２へ転送する。
【００１８】
メモリ１２０は、例えばＤＲＡＭ又はＳＲＡＭ等の半導体メモリであり、プロセッサ１３０の作業領域として使用される。そしてメモリ１２０は、ＮＡＮＤパッケージ群２００を管理するためのファームウェアや、後述する履歴テーブル等の、各種の管理テーブル等を保持する。
【００１９】
プロセッサ１３０は、メモリコントローラ１００全体の動作を制御する。例えば、プロセッサ１３０は、ホスト機器２から読出し命令を受信した際には、それに応答して、ＮＡＮＤコントローラ群１７０を制御して、読出し命令を発行させる（このようなホスト機器２からの指示に基づく読出し処理は、ホストリード処理ともいう）。書込み処理及び消去処理の際も同様である。またプロセッサ１３０は、ＮＡＮＤコントローラ群１７０を制御して、ホスト機器２に依らずＮＡＮＤパッケージ群２００を管理するための様々な内部処理を実行させる。例えば、プロセッサ１３０は、パトロールリード処理、及びリフレッシュ処理等のメモリシステム１内における内部処理を実行させ得る。
【００２０】
バッファメモリ１４０は、書込みデータや読出しデータ、及びＥＣＣ回路１６０によって誤り訂正された読出しデータ（期待データとも呼ぶ）を一時的に保持する。
【００２１】
ＮＡＮＤインタフェース回路１５０は、ＮＡＮＤバスを介してＮＡＮＤパッケージ群２００と接続され、ＮＡＮＤパッケージ群２００との通信を司る。そして、プロセッサ１３０から受信した命令に基づき、後述するＮＡＮＤインタフェースに基づく各種信号をＮＡＮＤパッケージ群２００と送受信する。
【００２２】
ＥＣＣ回路１６０は、ＮＡＮＤパッケージ群２００に記憶されるデータに関する誤り検出及び誤り訂正処理を行う。すなわちＥＣＣ回路１６０は、データの書き込み時には誤り訂正符号を生成して、これを書込みデータに付与し、データの読出し処理時にはこれを復号し、誤りビットの有無を検出する。そして誤りビットが検出された際には、その誤りビットの位置を特定し、誤りを訂正する。誤り訂正の方法は、例えば、硬判定復号（Hard bit decoding）及び軟判定復号（Soft bit decoding）を含む。硬判定復号に用いられる硬判定復号符号としては、例えば、ＢＣＨ（Bose‐Chaudhuri‐Hocquenghem）符号やＲＳ（Reed‐Solomon）符号等を用いることができ、軟判定復号に用いられる軟判定復号符号としては、例えば、ＬＤＰＣ（Low Density Parity Check）符号等を用いることができる。
【００２３】
ＮＡＮＤコントローラ群１７０は、プロセッサ１３０からの命令に基づき、ＮＡＮＤパッケージ群２００との間で送受信されるコマンド及びアドレス等を生成する。ＮＡＮＤコントローラ群１７０は、例えば、ホスト機器２から受信したデータの読出し命令に応じて、ＮＡＮＤインタフェースに基づく読出しコマンドをＮＡＮＤパッケージ群２００に対して発行する。また、ＮＡＮＤコントローラ群１７０は、例えば、ホスト機器２からの命令に依らず、ＮＡＮＤインタフェースに基づく読出しコマンドをＮＡＮＤパッケージ群２００に対して発行し得る。
【００２４】
ＮＡＮＤコントローラ群１７０は、複数のＮＡＮＤコントローラ１７１、１７２、…を含む。ＮＡＮＤコントローラ１７１、１７２、…はそれぞれ、ＮＡＮＤパッケージ群２００内のチャネルＣＨ０、ＣＨ１、…に対応して設けられる。すなわち、ＮＡＮＤコントローラ１７１、１７２、…はそれぞれ、チャネルＣＨ０、ＣＨ１、…との間の通信を制御するように構成される。
【００２５】
読出し電圧補正回路１８０は、ＮＡＮＤパッケージ群２００からデータを読み出す際に生成される読出し電圧の補正量（シフト量）を算出するように構成される。読出し電圧補正回路１８０は、例えば、ＮＡＮＤパッケージ群２００からの読出しデータを受けると共に、当該読出しデータをＥＣＣ回路１６０によって誤り訂正処理した後の読出しデータを受ける。読出し電圧補正回路１８０は、誤り訂正前読出しデータ及び誤り訂正後読出しデータに基づき、読出し電圧の補正量を算出し、当該算出した補正量をメモリ１２０に転送して保持させる。読出し電圧補正回路１８０の構成の詳細については、後述する。
【００２６】
１．１．３  チップの構成
次に、ＮＡＮＤフラッシュメモリに対応するチップの構成について、図２を用いて説明する。図２では、メモリコントローラ１００とチャネルＣＨ０との接続関係と、チャネルＣＨ０内の１つのチップＣｈｉｐ０の構成と、が一例として示される。
【００２７】
まず、メモリコントローラ１００とチャネルＣＨ０との接続関係について説明する。なお、メモリコントローラ１００と他のチャネルＣＨ１等との接続関係は、メモリコントローラ１００とチャネルＣＨ０との接続関係と同等であるため、説明を省略する。
【００２８】
図２に示すように、チャネルＣＨ０内の各チップＣｈｉｐは、メモリコントローラ１００とＮＡＮＤバスを介して接続され、ＮＡＮＤインタフェースに従う信号を送受信する。ＮＡＮＤインタフェースの信号の具体例は、チップイネーブル信号ＣＥｎ（ＣＥ０ｎ、ＣＥ１ｎ、…）、アドレスラッチイネーブル信号ＡＬＥ、コマンドラッチイネーブル信号ＣＬＥ、ライトイネーブル信号ＷＥｎ、リードイネーブル信号ＲＥｎ、レディ・ビジー信号ＲＢｎ（ＲＢ０ｎ、ＲＢ１ｎ、…）、及び入出力信号ＤＱである。信号ＣＥ０ｎ、ＣＥ１ｎ、…はそれぞれ、チップＣｈｉｐ０、Ｃｈｉｐ１、…に個別に入力され、信号ＲＢｎ０、ＲＢｎ１、…はそれぞれ、チップＣｈｉｐ０、Ｃｈｉｐ１、…から個別に出力される。信号ＡＬＥ、ＣＬＥ、ＷＥｎ、ＲＥｎ、及びＤＱは、同一のチャネルＣＨ０内の各チップＣｈｉｐに対して共通して入力される。
【００２９】
具体的には、信号ＣＥ０ｎ、ＣＥ１ｎ、…はそれぞれ、チップＣｈｉｐ０、Ｃｈｉｐ１、…をイネーブルにするための信号であり、“Ｌ（Low）”レベルでアサートされる。信号ＣＬＥ及びＡＬＥは、各チップＣｈｉｐへの入力信号ＤＱがそれぞれコマンド及びアドレスであることを各チップＣｈｉｐに通知する信号である。信号ＷＥｎは“Ｌ”レベルでアサートされ、入力信号ＤＱを各チップＣｈｉｐに取り込ませるための信号である。信号ＲＥｎも“Ｌ”レベルでアサートされ、各チップＣｈｉｐから出力信号ＤＱを読み出すための信号である。レディ・ビジー信号ＲＢ０ｎ、ＲＢ１ｎ、…はそれぞれ、チップＣｈｉｐ０、Ｃｈｉｐ１、…がレディ状態（メモリコントローラ１００からの命令を受信出来る状態）であるか、それともビジー状態（メモリコントローラ１００からの命令を受信出来ない状態）であるかを示す信号であり、“Ｌ”レベルがビジー状態を示す。入出力信号ＤＱは、例えば８ビットの信号である。そして入出力信号ＤＱは、各チップＣｈｉｐとメモリコントローラ１００との間で送受信されるデータの実体であり、コマンドＣＭＤ、アドレスＡＤＤ、並びに書き込みデータ及び読出しデータ等のデータＤＡＴである。
【００３０】
以上のように構成されることにより、メモリコントローラ１００は、チャネルＣＨ間で独立して並行に、チャネルＣＨ内の任意の１つのチップＣｈｉｐと通信することができる。
【００３１】
次に、チップＣｈｉｐ０の構成について説明する。なお、他のチップＣｈｉｐ１等の構成は、チップＣｈｉｐ０の構成と同等であるため、説明を省略する。
【００３２】
チップＣｈｉｐ０は、メモリセルアレイ１１、ロウデコーダ１２、ドライバ１３、センスアンプモジュール１４、アドレスレジスタ１５、コマンドレジスタ１６、及びシーケンサ１７を備える。
【００３３】
メモリセルアレイ１１は、ロウ及びカラムに対応付けられた複数の不揮発性のメモリセルを含む複数のブロックＢＬＫを備えている。図２では一例として４つのブロックＢＬＫ０〜ＢＬＫ３が図示されている。そしてメモリセルアレイ１１は、メモリコントローラ１００から与えられたデータを記憶する。
【００３４】
ロウデコーダ１２は、アドレスレジスタ１５内のブロックアドレスＢＡに基づいてブロックＢＬＫ０〜ＢＬＫ３のいずれかを選択し、更に選択したブロックＢＬＫにおいてワード線を選択する。
【００３５】
ドライバ１３は、アドレスレジスタ１５内のページアドレスＰＡに基づいて、選択されたブロックＢＬＫに対して、ロウデコーダ１２を介して電圧を供給する。
【００３６】
センスアンプモジュール１４は、データの読出し時には、メモリセルアレイ１１内のメモリセルトランジスタの閾値電圧をセンスし、データを読み出す。そして、このデータＤＡＴをメモリコントローラ１００に出力する。データの書き込み時には、メモリコントローラ１００から受信した書き込みデータＤＡＴを、メモリセルアレイ１１に転送する。
【００３７】
アドレスレジスタ１５は、メモリコントローラ１００から受信したアドレスＡＤＤを保持する。このアドレスＡＤＤには、上述のブロックアドレスＢＡとページアドレスＰＡとが含まれる。コマンドレジスタ１６は、メモリコントローラ１００から受信したコマンドＣＭＤを保持する。
【００３８】
シーケンサ１７は、コマンドレジスタ１６に保持されたコマンドＣＭＤに基づき、チップＣｈｉｐ０全体の動作を制御する。
【００３９】
次に、上記ブロックＢＬＫの構成について、図３を用いて説明する。図３は、いずれかのブロックＢＬＫの回路図である。
【００４０】
図３に示すように、ブロックＢＬＫは、例えば４つのストリングユニットＳＵ（ＳＵ０〜ＳＵ３）を含む。そして各々のストリングユニットＳＵは、複数のＮＡＮＤストリングＮＳを含む。メモリセルアレイ１１内のブロック数、ブロックＢＬＫ内のストリングユニット数、及びストリングユニットＳＵ内のＮＡＮＤストリング数は任意である。
【００４１】
ＮＡＮＤストリングＮＳの各々は、例えば６４個のメモリセルトランジスタＭＴ（ＭＴ０〜ＭＴ６３）並びに選択トランジスタＳＴ１及びＳＴ２を含んでいる。メモリセルトランジスタＭＴは、制御ゲートと電荷蓄積層とを備え、データを不揮発に保持する。そしてメモリセルトランジスタＭＴは、選択トランジスタＳＴ１のソースと選択トランジスタＳＴ２のドレインとの間に直列接続されている。
【００４２】
ストリングユニットＳＵ０〜ＳＵ３の各々における選択トランジスタＳＴ１のゲートは、それぞれセレクトゲート線ＳＧＤ０〜ＳＧＤ３に接続される。これに対してストリングユニットＳＵ０〜ＳＵ３の各々における選択トランジスタＳＴ２のゲートは、例えばセレクトゲート線ＳＧＳに共通接続される。あるいは、ストリングユニット毎に異なるセレクトゲート線ＳＧＳ０〜ＳＧＳ３に接続されても良い。また、同一のブロックＢＬＫ内にあるメモリセルトランジスタＭＴ０〜ＭＴ６３の制御ゲートは、それぞれワード線ＷＬ０〜ＷＬ６３に共通接続される。
【００４３】
また、メモリセルアレイ１１内において同一列にあるＮＡＮＤストリングＮＳの選択トランジスタＳＴ１のドレインは、ビット線ＢＬ（ＢＬ０〜ＢＬ（ｍ−１）、但しｍは２以上の自然数）に共通接続される。すなわちビット線ＢＬは、複数のブロックＢＬＫ間で同一列にあるＮＡＮＤストリングＮＳを共通に接続する。更に、複数の選択トランジスタＳＴ２のソースは、ソース線ＳＬに共通に接続されている。
【００４４】
つまりストリングユニットＳＵは、異なるビット線ＢＬに接続され、かつ同一のセレクトゲート線ＳＧＤに接続されたＮＡＮＤストリングＮＳの集合体である。ストリングユニットＳＵのうち、同一のワード線ＷＬに共通接続されたメモリセルトランジスタＭＴの集合体を、セルユニットＣＵ（又はメモリグループ）とも言う。またブロックＢＬＫは、ワード線ＷＬを共通にする複数のストリングユニットＳＵの集合体である。そしてメモリセルアレイ１１は、ビット線ＢＬを共通にする複数のブロックＢＬＫの集合体である。
【００４５】
図４は、ブロックＢＬＫの一部領域の断面図である。図４に示すように、ｐ型ウェル領域２０上に、複数のＮＡＮＤストリングＮＳが形成されている。すなわち、ｐ型ウェル領域２０上には、セレクトゲート線ＳＧＳとして機能する例えば４層の配線層２１、ワード線ＷＬ０〜ＷＬ６３として機能する６４層の配線層２２、及びセレクトゲート線ＳＧＤとして機能する例えば４層の配線層２３が、順次積層されている。積層された配線層間には、図示せぬ絶縁膜が形成されている。
【００４６】
そして、これらの配線層２３、２２、２１を通過してｐ型ウェル領域２０に達するピラー状の導電体２４が形成されている。導電体２４の側面には、ゲート絶縁膜２５、電荷蓄積層（絶縁膜または導電膜）２６、及びブロック絶縁膜２７が順次形成され、これらによってメモリセルトランジスタＭＴ、並びに選択トランジスタＳＴ１及びＳＴ２が形成されている。導電体２４は、ＮＡＮＤストリングＮＳの電流経路として機能し、各トランジスタのチャネルが形成される領域となる。そして導電体２４の上端は、ビット線ＢＬとして機能する金属配線層２８に接続される。
【００４７】
ｐ型ウェル領域２０の表面領域内には、ｎ＋型不純物拡散層２９が形成されている。ｎ＋型不純物拡散層２９上にはコンタクトプラグ３０が形成され、コンタクトプラグ３０は、ソース線ＳＬとして機能する金属配線層３１に接続される。更に、ｐ型ウェル領域２０の表面領域内には、ｐ＋型不純物拡散層３２が形成されている。ｐ＋型不純物拡散層３２上にはコンタクトプラグ３３が形成され、コンタクトプラグ３３は、ウェル配線ＣＰＷＥＬＬとして機能する金属配線層３４に接続される。ウェル配線ＣＰＷＥＬＬは、ｐ型ウェル領域２０を介して導電体２４に電位を印加するための配線である。
【００４８】
以上の構成が、図４を記載した紙面の奥行き方向に複数配列されており、奥行き方向に並ぶ複数のＮＡＮＤストリングＮＳの集合によってストリングユニットＳＵが形成される。
【００４９】
本例では、１つのメモリセルトランジスタＭＴが例えば２ビットデータを保持可能である。この２ビットデータを、下位のビットからそれぞれ下位(Lower)ビット、及び上位(Upper)ビットと呼ぶことにする。そして、同一のセルユニットＣＵに属するメモリセルの保持する下位ビットの集合を下位ページと呼び、上位ビットの集合を上位ページと呼ぶ。つまり、１つのストリングユニットＳＵ内における１本のワード線ＷＬ（１つのセルユニットＣＵ）には２ページが割当てられ、１つのストリングユニットＳＵは１２８ページ分の容量を有することになる。あるいは言い換えるならば、「ページ」とは、セルユニットＣＵに形成されるメモリ空間の一部、と定義することも出来る。データの書き込み及び読出しは、このページ毎又はセルユニットＣＵ毎に行っても良い。
【００５０】
図５は、各メモリセルトランジスタＭＴの取り得るデータ、閾値電圧分布、及び読出し時に用いる電圧について示したダイアグラムである。
【００５１】
上述の通り、メモリセルトランジスタＭＴは、２ビットデータを保持可能である。すなわち、メモリセルトランジスタＭＴは、閾値電圧に応じて４個の状態を取ることが出来る。この４個の状態を、閾値電圧の低いものから順に、“Ｅｒ”状態、“Ａ”状態、“Ｂ”状態、及び“Ｃ”状態と呼ぶことにする。
【００５２】
“Ｅｒ”状態のメモリセルトランジスタＭＴの閾値電圧は、電圧ＶＡ未満であり、データの消去状態に相当する。“Ａ”状態のメモリセルトランジスタＭＴの閾値電圧は、電圧ＶＡ以上であり且つ電圧ＶＢ（＞ＶＡ）未満である。“Ｂ”状態のメモリセルトランジスタＭＴの閾値電圧は、電圧ＶＢ以上であり且つ電圧ＶＣ（＞ＶＢ）未満である。“Ｃ”状態のメモリセルトランジスタＭＴの閾値電圧は、電圧ＶＣ以上であり且つ電圧ＶＲＥＡＤ未満である。このように分布する４個の状態のうちで、“Ｃ”状態が、閾値電圧の最も高い状態である。電圧ＶＡ〜ＶＣは、総称して電圧ＶＣＧＲとも言う。電圧ＶＲＥＡＤは、例えば、読出し動作時において読出し対象でないワード線ＷＬに印加される電圧であり、保持データにかかわらずメモリセルトランジスタＭＴをオンさせる電圧である。
【００５３】
また上記閾値電圧分布は、前述の下位ビット及び上位ビットからなる２ビット（２ページ）データを書き込むことで実現される。すなわち、上記“Ｅｒ”状態から“Ｃ”状態と、下位ビット及び上位ビットとの関係は、例えば、次の通りである。
“Ｅｒ”状態：“１１”（“上位／下位”の順で表記）  
“Ａ”状態：“０１”  
“Ｂ”状態：“００”  
“Ｃ”状態：“１０”  
このように、閾値電圧分布において隣り合う２つの状態に対応するデータ間では、２ビットのうちの１ビットのみが変化する。
【００５４】
従って、下位ビットを読み出す際には、下位ビットの値（“０”ｏｒ“１”）が変化する境界に相当する電圧を用いれば良く、このことは上位ビットでも同様である。
【００５５】
すなわち、図５に示すように、下位ページ読出しは、“Ａ”状態と“Ｂ”状態とを区別する電圧ＶＢを読出し電圧として用いる。電圧ＶＢを用いた読出し動作を、読出し動作ＢＲと呼ぶ。読出し動作ＢＲは、メモリセルトランジスタＭＴの閾値電圧が電圧ＶＢ未満か否かを判定する。
【００５６】
そして上位ページ読出しは、“Ｅｒ”状態と“Ａ”状態とを区別する電圧ＶＡ、及び“Ｂ”状態と“Ｃ”状態とを区別する電圧ＶＣを読出し電圧として用いる。電圧ＶＡ及びＶＣを用いた読出し動作を、それぞれ読出し動作ＡＲ及びＣＲと呼ぶ。読出し動作ＡＲにより、消去状態のメモリセルトランジスタＭＴが特定される。
【００５７】
なお、メモリセルアレイ１１の構成についてはその他の構成であっても良い。すなわちメモリセルアレイ１１の構成については、例えば、“THREE DIMENSIONAL STACKED NONVOLATILE SEMICONDUCTOR MEMORY”という2009年3月19日に出願された米国特許出願12/407,403号に記載されている。また、“THREE DIMENSIONAL STACKED NONVOLATILE SEMICONDUCTOR MEMORY”という2009年3月18日に出願された米国特許出願12/406,524号、“NON‐VOLATILE SEMICONDUCTOR STORAGE DEVICE AND METHOD OF MANUFACTURING THE SAME”という2010年3月25日に出願された米国特許出願12/679,991号、及び“SEMICONDUCTOR MEMORY AND METHOD FOR MANUFACTURING SAME”という2009年3月23日に出願された米国特許出願12/532,030号に記載されている。これらの特許出願は、その全体が本願明細書において参照により援用されている。
【００５８】
１．１．４  センスアンプモジュールの構成
次に、第１実施形態に係る不揮発性メモリのセンスアンプモジュールの構成について説明する。図６は、第１実施形態に係る不揮発性メモリのセンスアンプモジュールの構成の一例を説明するための回路図である。
【００５９】
図６に示すように、センスアンプモジュール１４は、ビット線ＢＬ毎に設けられたセンスアンプユニットＳＡＵ（ＳＡＵ０、ＳＡＵ１、…、ＳＡＵ（ｍ−１））を備えている。
【００６０】
センスアンプユニットＳＡＵの各々は、センスアンプＳＡ、演算部ＯＰ、及び例えば５つのラッチ回路ＡＤＬ、ＢＤＬ、ＣＤＬ、ＳＤＬ、並びにＸＤＬを備えている。
【００６１】
センスアンプＳＡは、対応するビット線ＢＬの電圧又は電流をセンスすることでデータを読み出し、又書込みデータに応じてビット線ＢＬに電圧を印加する。すなわちセンスアンプＳＡは、ビット線ＢＬを直接的に制御するモジュールである。そしてセンスアンプＳＡには、読出し時には、例えばシーケンサ１７によってストローブ信号ＳＴＢが与えられる。センスアンプＳＡは、ストローブ信号ＳＴＢがアサートされるタイミングで読出しデータを確定させる。そして、内部に有するラッチ回路（図示せず）にこのデータを保持し、更にラッチ回路ＡＤＬ、ＢＤＬ、ＣＤＬ、ＳＤＬ、及びＸＤＬのいずれかに転送する。
【００６２】
ラッチ回路ＡＤＬ、ＢＤＬ、ＣＤＬ、及びＳＤＬは、読出しデータ及び書込みデータを一時的に保持する。演算部ＯＰは、センスアンプＳＡ、ラッチ回路ＡＤＬ、ＢＤＬ、ＣＤＬ、ＳＤＬ、及びＸＤＬに保持されているデータに対して、否定（ＮＯＴ）演算、論理和（ＯＲ）演算、論理積（ＡＮＤ）演算、否定論理積（ＮＡＮＤ）演算、否定論理和（ＮＯＲ）演算、排他的論理和（ＸＯＲ）演算等、種々の論理演算を行う。
【００６３】
これらのセンスアンプＳＡ、ラッチ回路ＡＤＬ、ＢＤＬ、ＣＤＬ、及びＳＤＬ、並びに演算部ＯＰは、互いにデータを送受信可能なようにバスによって接続されている。そしてこのバスは、更にラッチ回路ＸＤＬに接続されている。
【００６４】
センスアンプモジュール１４におけるデータの入出力は、ラッチ回路ＸＤＬを介して行われる。すなわち、メモリコントローラ１００から受信したデータは、ラッチ回路ＸＤＬを介して、ラッチ回路ＡＤＬ、ＢＤＬ、ＣＤＬ、ＳＤＬ、又はセンスアンプＳＡに転送される。また、ラッチ回路ＡＤＬ、ＢＤＬ、ＣＤＬ、ＳＤＬ又はセンスアンプＳＡのデータは、ラッチ回路ＸＤＬを介して、信号ＤＱ＜７：０＞のいずれかの信号としてメモリコントローラ１００へ送信される。ラッチ回路ＸＤＬは、チップＣｈｉｐのキャッシュメモリとして機能する。したがって、ラッチ回路ＡＤＬ、ＢＤＬ、ＣＤＬ、及びＳＤＬが使用中であったとしても、ラッチ回路ＸＤＬが空いていれば、チップＣｈｉｐはレディ状態となることができる。
【００６５】
なお、図６の例では、ビット線ＢＬ０は、信号ＤＱ＜０＞を通信する信号線に接続され、ビット線ＢＬ１は、信号ＤＱ＜１＞を通信する信号線に接続され、ビット線ＢＬ（ｍ−１）に接続されたラッチ回路ＸＤＬは、信号ＤＱ＜７＞を通信する信号線に接続されている。このように、ビット線ＢＬとメモリコントローラ１００との間を接続する信号線は、信号ＤＱ＜７：０＞のいずれかに対応している。すなわち、或るビット線ＢＬに接続されたＮＡＮＤストリングＮＳは、信号ＤＱ＜７：０＞のいずれかに対応付けられる。
【００６６】
１．１．５  履歴テーブルの構成
次に、履歴テーブルについて説明する。上述の通り、メモリコントローラ１００は、例えば、メモリ１２０において履歴テーブルを保持する。履歴テーブルの概念について、図７を用いて説明する。図７は、第１実施形態に係るメモリシステムの履歴テーブルの一例を示す概念図である。
【００６７】
図７に示すように、履歴テーブルは、例えば、読出し動作ＡＲ〜ＣＲに用いられる読出し電圧のシフト量Δを示す情報（例えばＤＡＣ（Digital to Analogue Converter）値）が設定されている。シフト量Δは、例えば、チャネルＣＨ毎、チップＣｈｉｐ毎、ブロックＢＬＫ毎、ワード線ＷＬ毎、及びストリングユニットＳＵ毎に個別に設定され得る。
【００６８】
このシフト量Δについて、以下に説明する。図５で説明した“Ｅｒ”状態、“Ａ”状態、“Ｂ”状態、及び“Ｃ”状態に対応する閾値分布は、互いに分離している。したがって、電圧ＶＡ、ＶＢ、及びＶＣによって、各状態を区別することができる。しかし、データを書き込んだ後に時間が経過すると、隣接セルとの干渉により閾値分布がシフトする場合がある（これを「データリテンションエラー」と呼ぶ）また、閾値分布は、書込み処理や、読出し処理によっても変動し得る（これを、それぞれ「プログラムディスターブ」、及び「リードディスターブ」と呼ぶ）。このような種々の変動要因（以下、単に「変動要因」とも呼ぶ）に伴う閾値分布が変化すると、隣り合う閾値分布が重なってしまうことがある。
【００６９】
隣り合う閾値分布が重なることにより、上記の電圧ＶＡ、ＶＢ、及びＶＣではデータを正しく読み出せないことがある。具体的には、例えば、“Ａ”状態の閾値分布と“Ｂ”状態の閾値分布とが重なった場合、“Ａ”状態の閾値分布のうち電圧ＶＢよりも閾値電圧が大きいものは、“Ｂ”状態と誤って読み出される可能性があり、“Ｂ”状態の閾値分布のうち電圧ＶＢよりも閾値電圧が小さいものは、“Ａ”状態と誤って読み出される可能性がある。このように、誤って読み出されたビットの数（フェイルビット数）が、ＥＣＣ回路１６０の訂正可能ビット数を超えた場合、メモリコントローラ１００は、チャネルＣＨからの正しいデータの読出しに失敗する。
【００７０】
このような場合に、メモリコントローラ１００は、読出し電圧を通常リード処理における読出し電圧ＶＡ、ＶＢ、及びＶＣ（以降の説明では、これを「デフォルトの読出し電圧」とも呼ぶ）からシフトさせて、再度データの読出しを試みる。これをシフトリード処理と呼ぶ。この際のデフォルトの読出し電圧からのシフト量を示す情報を、読出し動作ＡＲ〜ＣＲの各々について、チャネルＣＨ毎、チップＣｈｉｐ毎、ブロックＢＬＫ毎、ワード線ＷＬ毎、及びストリングユニットＳＵ毎に保持しているのが、図７に示す履歴テーブルである。
【００７１】
本例における履歴テーブルでは、ＤＡＣ値＝０の状態が、デフォルトの読出し電圧（すなわち、シフト量Δ＝０）に対応する。シフト量Δは、例えばメモリコントローラ１００内の読出し電圧補正回路１８０によって適宜、適切な値が算出され、メモリ１２０内の履歴テーブルに保持される。メモリコントローラ１００は、この履歴テーブルを参照することにより、読出し対象のメモリセルトランジスタＭＴに対応するワード線ＷＬに印加すべき読出し電圧を決定する。
【００７２】
図７の例では、（チャネルＣＨ、チップＣｈｉｐ、ブロックＢＬＫ、ワード線ＷＬ、ストリングユニットＳＵ）＝（０、０、０、０、０）に対応するセルユニットＣＵには、読出し動作ＡＲ、ＢＲ、及びＣＲに対してそれぞれ＋８、＋２、及び−７のシフト量Δが設定されている。これは、当該セルユニットＣＵに読出し動作ＡＲ、ＢＲ、及びＣＲを実行する際にはそれぞれ、デフォルトの読出し電圧ＶＡ、ＶＢ、及びＶＣに対して、ＤＡＣ値を＋８、＋２、及び−７だけ電圧値をシフトさせることを意味する。また、（チャネルＣＨ、チップＣｈｉｐ、ブロックＢＬＫ、ワード線ＷＬ、ストリングユニットＳＵ）＝（０、０、０、１、０）に対応するセルユニットＣＵには、読出し動作ＡＲ、ＢＲ、及びＣＲのいずれにも“０”のシフト量が設定されている。これは、当該セルユニットＣＵに読出し動作ＡＲ、ＢＲ、及びＣＲを実行する際にはそれぞれ、デフォルトの読出し電圧ＶＡ、ＶＢ、及びＶＣを適用することを意味する。
【００７３】
１．１．６  読出し電圧補正回路の構成
次に、メモリコントローラ１００内に設けられる読出し電圧補正回路１８０の構成について、図８を用いて説明する。
【００７４】
図８に示すように、読出し電圧補正回路１８０は、例えば、読出し電圧補正用バッファメモリ１８１、ビットカウンタ１８２、ビットセレクタ１８３、評価指標算出回路１８４、及びシフト量算出回路１８５を備えている。
【００７５】
読出し電圧補正用バッファメモリ１８１は、例えば、ＳＲＡＭ等の半導体メモリであり、読出し電圧を補正する処理に用いる読出しデータを一時的に保持するための記憶領域である。読出し電圧補正用バッファメモリ１８１は、読出し電圧補正対象の読出しデータ（誤り訂正前読出しデータ）と、当該読出しデータがＥＣＣ回路１６０によって誤り訂正された期待データ（誤り訂正後読出しデータ）と、を同時に保持可能な記憶容量を有する。なお、誤り訂正前読出しデータ及び誤り訂正後読出しデータは、少なくとも誤り訂正可能な単位（例えば、ページ単位）のデータサイズを有する。
【００７６】
ビットカウンタ１８２は、読出し電圧補正用バッファメモリ１８１に保持された誤り訂正前読出しデータ及び誤り訂正後読出しデータが取り得る値の組合せ毎に、ビット数をカウントする。具体的には、例えば、誤り訂正前読出しデータ及び誤り訂正後読出しデータがいずれも１ページ分存在する場合、１つのメモリセルトランジスタＭＴに対して（誤り訂正前読出しデータ、誤り訂正後読出しデータ）の組が取り得る値の組合せは、（１、１）、（１、０）、（０、０）、及び（０、１）の４通り存在する。ビットカウンタ１８２は、当該４通りの組合せがそれぞれ何ビットずつ存在するか、をカウントする。
【００７７】
ビットセレクタ１８３は、ビットカウンタ１８２がカウントした４通りの値の組合せのうち、シフト量算出処理に用いる２つ（例えば、（１、０）と（０、１）等）を選択する。
【００７８】
評価指標算出回路１８４は、ビットセレクタ１８３によって選択された２通りの値の組合せにそれぞれ対応するカウント値を用いて、シフト量補正処理に用いる評価指標を算出する。評価指標は、例えば、２つのカウント値の比が用いられ得る。
【００７９】
シフト量算出回路１８５は、評価指標算出回路１８４によって算出された評価指標に基づき、シフト量Δを算出する。シフト量算出回路１８５は、例えば、算出したシフト量Δをメモリ１２０に転送し、履歴テーブルを更新する。
【００８０】
なお、図８では、各部１８１〜１８５がファームウェアとは独立して機能し得る場合について説明したが、これに限られない。例えば、図８に示した各部１８１〜１８５のうち、読出し電圧補正用バッファメモリ１８１、及びビットカウンタ１８２を除く構成（ビットセレクタ１８３、評価指標算出回路１８４、及びシフト量算出回路１８５）については、ファームウェアによって実施可能に構成されてもよい。
【００８１】
１．２  動作
次に、第１実施形態に係るメモリシステムの動作について説明する。
【００８２】
１．２．１  シフト量算出処理を伴う読出し処理
メモリコントローラ１００によるシフト量算出処理を伴う読出し処理について、図９に示すフローチャートを用いて説明する。図９では、例えば、パトロールリード処理を想定したシーケンスの一例が示される。パトロールリード処理は、例えば、書込まれたデータの閾値分布の変動状況を把握するために、メモリコントローラ１００がＮＡＮＤパッケージ群２００内の各セルユニットＣＵを定期的に巡回してデータの読出し処理を行う、メモリシステム１の内部処理である。なお、図９の例では、メモリコントローラ１００は、当該パトロールリード処理の際に、或るセルユニットＣＵに対応する全てのページ（上位ページ及び下位ページ）の読出しを命令するものとする。このような読出し方式は、１ページずつランダムに読み出す「ランダムリード処理」と区別して、「シーケンシャルリード処理」とも呼ぶ。
【００８３】
図９に示すように、ステップＳＴ１０において、メモリコントローラ１００は、メモリ１２０内の履歴テーブルを参照し、読出し対象のセルユニットＣＵに対応する読出し動作ＡＲ〜ＣＲ毎のシフト量Δを把握する。
【００８４】
ステップＳＴ２０において、メモリコントローラ１００は、把握したシフト量Δに基づいてシフトリードコマンドを発行する。この際、例えば、メモリコントローラ１００の発行するコマンドシーケンスがシフト量Δを示す情報を含み、チップＣｈｉｐは、当該情報に基づいて読出し電圧を印加する。これにより、チップＣｈｉｐは、履歴テーブルのシフト量を適用した読出し電圧によって誤り訂正前読出しデータＳＲ（誤り訂正前上位読出しデータＳＲ＿Ｕ、及び誤り訂正前下位読出しデータＳＲ＿Ｌ）を読み出し、メモリコントローラ１００に出力する。誤り訂正前読出しデータＳＲは、メモリコントローラ１００内において、ＥＣＣ回路１６０に転送されると共に、読出し電圧補正用バッファメモリ１８１に保持される。
【００８５】
ステップＳＴ３０において、ＥＣＣ回路１６０は、誤り訂正前読出しデータＳＲに対して誤り訂正処理を実行する。ＥＣＣ回路１６０による誤り訂正処理が成功した場合（ステップＳＴ３０；ｙｅｓ）、ＥＣＣ回路１６０は、誤り訂正後読出しデータＥＸＰ（誤り訂正後上位読出しデータＥＸＰ＿Ｕ、及び誤り訂正後下位読出しデータＥＸＰ＿Ｌ）を読出し電圧補正用バッファメモリ１８１に保持させた後、処理はステップＳＴ４０に進む。
【００８６】
ステップＳＴ４０において、読出し電圧補正回路１８０は、シフト量算出処理を実行する。シフト量算出処理の詳細は、後述する。
【００８７】
ステップＳＴ５０において、メモリコントローラ１００は、ステップＳＴ４０において算出されたシフト量Δをメモリ１２０の履歴テーブル内における対応する領域に保持させることにより、履歴テーブルを更新する。
【００８８】
一方、ステップＳＴ３０においてＥＣＣ回路１６０による誤り訂正処理が失敗した場合（ステップＳＴ３０；ｎｏ）、処理はステップＳＴ６０に進む。
【００８９】
ステップＳＴ６０において、メモリコントローラ１００は、リトライシーケンスを実行し、再度のデータ読出しを試みる。具体的には、例えば、メモリコントローラ１００は、所定のアルゴリズムにしたがって読出し電圧を変化させて更なるシフトリード処理を行い、当該更なるシフトリード処理によって読み出されたデータを誤り訂正しようと試みる。
【００９０】
ステップＳＴ７０において、メモリコントローラ１００は、リトライシーケンスの結果に基づき、閾値分布の変動が許容範囲内であるか否かを判定する。リトライシーケンスの結果、閾値分布の変動が許容範囲内であると判定した場合、メモリコントローラ１００は、リフレッシュ処理を実行しないと判定し（ステップＳＴ７０；ｎｏ）、読出し処理を終了させる。一方、リトライシーケンスの結果、閾値分布の変動が許容範囲外であると判定した場合、メモリコントローラ１００は、リフレッシュ処理を実行すると判定し（ステップＳＴ７０；ｙｅｓ）、処理はステップＳＴ８０に進む。リフレッシュ処理は、例えば、誤り訂正されたデータを再度メモリセルアレイ１１に書き込むことにより、変動した閾値分布を理想の閾値分布の状態に近づける処理である。
【００９１】
ステップＳＴ８０において、メモリコントローラ１００は、リフレッシュコマンドを発行し、リフレッシュ処理を実行する。
【００９２】
以上により、一連の処理が終了する。
【００９３】
１．２．２  シフト量算出処理
次に、第１実施形態に係るメモリシステムにおけるシフト量算出処理について説明する。
【００９４】
図１０は、第１実施形態に係るメモリシステムにおけるシフト量算出処理を説明するためのフローチャートである。図１０は、図９におけるステップＳＴ４０の詳細を示す。
【００９５】
図１０に示すように、ステップＳＴ４１において、ビットカウンタ１８２は、読出し電圧補正用バッファメモリ１８１に保持された誤り訂正前読出しデータＳＲ及び誤り訂正後読出しデータＥＸＰが取り得る値の組合せ毎に、ビット数をカウントする。
【００９６】
ステップＳＴ４２において、ビットセレクタ１８３は、ステップＳＴ４１において値の組合せ毎のカウント値から、比較するビット数のカウント値の組を選択する。
【００９７】
ステップＳＴ４３において、評価指標算出回路１８４は、ステップＳＴ４２において選択されたカウント値の組に基づき、評価指標を算出する。
【００９８】
ステップＳＴ４４において、シフト量算出回路１８５は、ステップＳＴ４３において算出された評価指標に基づき、シフト量Δを算出する。
【００９９】
以上により、シフト量算出処理が終了する。
【０１００】
図１１は、第１実施形態に係るメモリシステムにおけるシフト量算出処理のうち、評価指標算出対象のカウント値が選択されるまでの処理を説明するための模式図である。図１１は、図１０におけるステップＳＴ４１及びＳＴ４２に対応する。
【０１０１】
図１１に示すように、誤り訂正前読出しデータＳＲ及び誤り訂正後読出しデータＥＸＰが取り得る値の組合せＣ０＝（ＳＲ＿Ｕ、ＳＲ＿Ｌ、ＥＸＰ＿Ｕ、ＥＸＰ＿Ｌ）は、２＾４＝１６通り存在する。このうち、誤り訂正前読出しデータの組（ＳＲ＿Ｕ、ＳＲ＿Ｌ）と誤り訂正後読出しデータ（ＥＸＰ＿Ｕ、ＥＸＰ＿Ｌ）の組とが一致する４通りの場合は、データは誤りなく読み出されたことを示す。具体的には、例えば、組合せＣ０＝（１、１、１、１）となる場合は、“Ｅｒ”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｅｒ”状態のデータが正しく読み出されたことを示す。同様に、組合せＣ０＝（０、１、０、１）、（０、０、０、０）、及び（１、０、１、０）となる場合はそれぞれ、“Ａ”状態、“Ｂ”状態、及び“Ｃ”状態のデータが正しく読み出されたことを示す。
【０１０２】
一方、誤り訂正前読出しデータの組（ＳＲ＿Ｕ、ＳＲ＿Ｌ）と誤り訂正後読出しデータ（ＥＸＰ＿Ｕ、ＥＸＰ＿Ｌ）の組とが一致しない残りの１２通りの場合は、データが誤って読み出されたことを示す。具体的には、例えば、組合せＣ０＝（１、１、０、１）の場合は、“Ａ”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｅｒ”状態のデータが誤って読み出されたことを示す。また、例えば、組合せＣ０＝（０、１、１、１）の場合は、“Ｅｒ”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ａ”状態のデータが誤って読み出されたことを示す。
【０１０３】
図１０におけるステップＳＴ４１では、ビットカウンタ１８２は、上記したような１６通りの組合せＣ０毎に読出し処理を行ったセルユニットＣＵ内のメモリセルトランジスタＭＴを分類する。そして、ビットカウンタ１８２は、１６通りの組合せＣ０毎に、分類されたメモリセルトランジスタＭＴの数を（ビット数として）カウントする。
【０１０４】
図１０におけるステップＳＴ４２では、ビットセレクタ１８３は、１６通りの組合せＣ０のうち、以下の条件に合致する２通りを１つの組として選択する。ビットセレクタ１８３は、第１状態と第２状態とを区別する読出し電圧ＶＣＧＲのシフト量を算出するため、「第１状態→第２状態誤読出しケース」と、「第２状態→第１状態誤読出しケース」と、を１つの組として選択する。ここで、「第１状態→第２状態誤読出しケース」とは、第１状態のデータが書き込まれたメモリセルトランジスタＭＴから、第１状態と隣り合う第２状態のデータが誤って読み出された場合を示す。また、「第２状態→第１状態誤読出しケース」とは、第２状態のデータが書き込まれたメモリセルトランジスタＭＴから、第１状態のデータが誤って読み出された場合を示す。
【０１０５】
これにより、ビットセレクタ１８３は、１６通りの組合せＣ０から６通りを選択し、当該選択された６通りから３つの組を形成することができる。具体的には、ビットセレクタ１８３は、電圧ＶＡのシフト量Δを算出する（（第１状態、第２状態）＝（Ｅｒ、Ａ）の）場合、組合せＣ０＝（１、１、０、１）に対応する「Ａ→Ｅｒ誤読出しケース」のカウント値と、組合せＣ０＝（０、１、１、１）に対応する「Ｅｒ→Ａ誤読出しケース」のカウント値と、を１つの組として選択する。また、ビットセレクタ１８３は、電圧ＶＢのシフト量Δを算出する（（第１状態、第２状態）＝（Ａ、Ｂ）の）場合、組合せＣ０＝（０、１、０、０）に対応する「Ｂ→Ａ誤読出しケース」のカウント値と、組合せＣ０＝（０、０、０、１）に対応する「Ａ→Ｂ誤読出しケース」のカウント値と、を１つの組として選択する。また、ビットセレクタ１８３は、電圧ＶＣのシフト量Δを算出（（第１状態、第２状態）＝（Ｂ、Ｃ）の）場合、組合せＣ０＝（０、０、１、０）に対応する「Ｃ→Ｂ誤読出しケース」のカウント値と、組合せＣ０＝（１、０、０、０）に対応する「Ｂ→Ｃ誤読出しケース」のカウント値と、を１つの組として選択する。
【０１０６】
以上のように動作することにより、ビットセレクタ１８３は、シフト量算出処理に用いる２通りのカウント値を含む組を、読出し動作ＡＲ〜ＣＲの各々について選択することができる。
【０１０７】
図１２は、第１実施形態に係るメモリシステムにおけるシフト量算出処理のうち、評価指標を算出する処理を説明するための模式図である。図１２は、図１０におけるステップＳＴ４３に対応する。
【０１０８】
図１２の上段では、隣り合う２つの閾値分布の一例として、“Ａ”状態、及び“Ｂ”状態の各々に対応するデータが書込まれたメモリセルトランジスタＭＴの閾値分布が示される。当該２つの閾値分布は、種々の変動要因によって変化し、互いに重なり合っている。このような２つの閾値分布に対して読出し電圧ＶＢ（ＶＢ１〜ＶＢ５）を印加した場合に、「Ａ→Ｂ誤読出しケース」及び「Ｂ→Ａ誤読出しケース」がどのように増減するか、が示される。また、図１２の下部では、「Ａ→Ｂ誤読出しケース」のカウント値（Ｃｏｕｎｔ（Ａ→Ｂ）と表記）、及び「Ｂ→Ａ誤読出しケース」のカウント値（Ｃｏｕｎｔ（Ｂ→Ａ）と表記）から算出される評価指標ｒと、読出し電圧ＶＢとの関係が示される。
【０１０９】
図１２の上段に示すように、電圧ＶＢ３は、例えば、“Ａ”状態及び“Ｂ”状態の各々に対応する２つの閾値分布間の谷位置、すなわち、隣り合う２つの閾値分布間で同じ閾値電圧のメモリセル数が等しい位置に相当する。隣り合う２つの閾値分布の形状がほぼ等しいとみなせる場合、“Ａ”状態の閾値分布のうち、電圧ＶＢ３よりも大きい閾値電圧を有するメモリセル数と、“Ｂ”状態の閾値分布のうち、電圧ＶＢ３よりも小さい閾値電圧を有するメモリセル数と、は、ほぼ等しくなり得る。このため、電圧ＶＢ３を用いて読み出されたデータは、「Ａ→Ｂ誤読出しケース」のカウント値と、「Ｂ→Ａ誤読出しケース」のカウント値とがほぼ等しくなり得る。すなわち、「Ａ→Ｂ誤読出しケース」のカウント値に対する「Ｂ→Ａ誤読出しケース」のカウント値の比率は、“１”とみなし得る。
【０１１０】
読出し電圧を電圧ＶＢ３から電圧ＶＢ４、ＶＢ５と徐々に大きくしていくと、「Ａ→Ｂ誤読出しケース」のカウント値は徐々に減少するのに対し、「Ｂ→Ａ誤読出しケース」のカウント値は急激に増加し得る。すなわち、「Ａ→Ｂ誤読出しケース」のカウント値に対する「Ｂ→Ａ誤読出しケース」のカウント値の比率は、“１”から急激に増加し得る。これに対して、読出し電圧を電圧ＶＢ３から電圧ＶＢ２、ＶＢ１と徐々に小さくしていくと、「Ａ→Ｂ誤読出しケース」のカウント値は急激に増加するのに対し、「Ｂ→Ａ誤読出しケース」のカウント値は徐々に減少する。すなわち、「Ａ→Ｂ誤読出しケース」のカウント値に対する「Ｂ→Ａ誤読出しケース」のカウント値の比率は“１”から急激に減少し得る。
【０１１１】
このため、図１２の下段に示すように、例えば、当該比率の対数値を縦軸に取ると、当該対数値は、電圧ＶＢ３においてｒ３≒０となり、電圧ＶＢ３の近傍において、読出し電圧と正の相関を有し得る。評価指標算出回路１８４は、例えば、当該比率の対数値を評価指標ｒとして算出し、シフト量算出回路１８５に送る。これにより、シフト量算出回路１８５は、評価指標ｒの値に応じて、現在の読出し電圧が電圧ＶＢ３からどれだけ離れているか、を推定することができる。
【０１１２】
図１３は、第１実施形態に係るメモリシステムにおけるシフト量算出処理のうち、評価指標に基づいてシフト量Δを算出する処理を説明するための模式図である。図１３は、図１０におけるステップＳＴ４４に対応する。
【０１１３】
図１３の上段では、評価指標ｒ（ｒ１〜ｒ５）の値の大きさに応じて設定されるシフト量Δ（Δ１〜Δ５）の大きさが示される。図１３の下段では、シフト量Δの大きさと、読出し電圧ＶＢとの関係が示される。
【０１１４】
図１３の上段に示すように、シフト量Δは、例えば、評価指標ｒが“０”となる場合、“０”となるように設定され、かつ評価指標ｒに対して負の相関を有するように設定される。すなわち、評価指標ｒ３（≒０）に対応するシフト量Δ３は、“０”近傍の値（≒０）となるように設定される。そして、評価指標ｒ１＜ｒ２＜ｒ３（０≒０）＜ｒ４＜ｒ５に対して、それぞれシフト量Δ１＞Δ２＞Δ３（０≒０）＞Δ４＞Δ５となるようにシフト量Δが設定される。
【０１１５】
このようにシフト量Δを設定することにより、図１３の下段に示すように、読出し電圧ＶＢに電圧ＶＢ３より大きい値が設定されていた場合（評価値ｒが正の場合）には、読出し電圧ＶＢ３に近づけるように、負のシフト量Δ（＜Δ３）を設定することができる。また、読出し電圧ＶＢに電圧ＶＢ３より小さい値が設定されていた場合（評価値ｒが負の場合）には、読出し電圧ＶＢ３に近づけるように、正のシフト量Δ（＞Δ３）を設定することができる。
【０１１６】
また、読出し電圧ＶＢの電圧ＶＢ３からの差（評価値ｒの絶対値）が小さいほどシフト量Δの絶対値が小さくなるように設定され、大きいほどシフト量Δの絶対値が大きくなるように設定される。これにより、読出し電圧ＶＢの電圧ＶＢ３からのずれの大きさに応じて、シフト量Δの大きさを変化させることができ、電圧ＶＢ３への収束を早めることができる。一般に、隣り合う２つの閾値分布の形状がほぼ等しいとみなせる場合、当該２つの閾値分布の谷位置に読出し電圧ＶＢを設定することにより、フェイルビット数を最小に出来る可能性が高い。このため、上述のような読出し電圧ＶＢを電圧ＶＢ３に近づけるシフト量Δの算出方法を適用することにより、読出し電圧ＶＢを最適な値に近づけることができる。
【０１１７】
なお、上述したように、最適な読出し電圧ＶＣＧＲのシフト量Δを算出するためには、重なり合う閾値分布間のフェイルビット数の比率が１：１になるまで補正を繰り返すことが理想であり得る。しかしながら、重なり合う閾値分布の一方が非対称な形状を有しているために、閾値分布が非対称に重なっている場合には、これに限定する必要はない。
【０１１８】
１．３  本実施形態に係る効果
第１実施形態によれば、読出し電圧補正用バッファメモリ１８１は、誤り訂正前読出しデータＳＲ＿Ｕ及びＳＲ＿Ｌと、誤り訂正後読出しデータＥＸＰ＿Ｕ及びＥＸＰ＿Ｌを保持する。ビットカウンタ１８２は、組合せＣ０＝（ＳＲ＿Ｕ、ＳＲ＿Ｌ、ＥＸＰ＿Ｕ、ＥＸＰ＿Ｌ）毎にビット数をカウントする。ビットセレクタ１８３は、電圧ＶＡ〜ＶＣのシフト量Δを算出するためにそれぞれ、組合せＣ０の中からＣ０＝（１、１、０、１）及び（０、１、１、１）の組、（０、１、０、０）及び（０、０、０、１）の組、並びに（０、０、１、０）及び（１、０、０、０）の組を選択する。評価指標算出回路１８４は、選択された組毎に割合の対数値を評価指標ｒとして算出する。シフト量算出回路１８５は、評価指標ｒに基づいてシフト量Δを算出する。これにより、メモリコントローラ１００は、読出し処理が実行される毎に、読出し電圧のシフト量Δを算出することができる。このため、トラッキング処理のように、シフト量Δを算出するために更なる読出し処理を実行することなくシフト量Δを算出することができる。したがって、シフト量Δの算出によるレイテンシの増加を抑制することができる。
【０１１９】
また、シフト量Δは、評価指標ｒが評価基準（例えば、“０”）を超えるか否かに基づいて、正の値を有するか、負の値を有するか、が判定される。これにより、読出し電圧が重なり合う２つの閾値電圧の谷位置よりも大きい場合には負のシフト量Δを算出し、小さい場合には正のシフト量Δを算出することができる。このため、谷位置に近づく方向に読出し電圧を補正することができる。
【０１２０】
また、シフト量Δは、評価指標ｒと評価基準との差の絶対値が大きいほど、大きな絶対値となるように算出される。これにより、読出し電圧が谷位置から離れているほど大きなシフト量Δを算出し、谷位置に近い場合には小さなシフト量Δを算出することができる。このため、読出し電圧補正処理を繰り返すことによって、読出し電圧を谷位置に収束させることができる。
【０１２１】
１．４  第１変形例
第１実施形態では、誤り訂正に成功した全ての場合についてシフト量算出処理を実行し、履歴テーブルを更新する例について説明したが、これに限られない。例えば、シフト量算出処理は、フェイルビット数が所定の値を超えた場合に、選択的に実行されてもよい。以下の説明では、第１実施形態と同等の構成及び動作については説明を省略し、第１実施形態と異なる構成及び動作について主に説明する。
【０１２２】
図１４は、第１実施形態の第１変形例に係るメモリシステムにおけるシフト量算出処理を伴う読出し処理を説明するためのフローチャートである。図１４は、第１実施形態において説明した図９に対応し、図９のステップＳＴ３０とステップＳＴ４０との間に、新たなステップＳＴ３１が追加された場合が示される。
【０１２３】
図１４に示すように、ステップＳＴ１０〜ＳＴ３０の処理は、図９の場合と同等であるため、その説明を省略する。なお、ステップＳＴ３０において誤り訂正に成功すると（ステップＳＴ３０；ｙｅｓ）、処理はステップＳＴ３１に進み、誤り訂正に失敗すると（ステップＳＴ３０；ｎｏ）、処理はステップＳＴ６０に進む。なお、ステップＳＴ６０〜ＳＴ８０の処理は、図９の場合と同等であるため、その説明を省略する。
【０１２４】
ステップＳＴ３１において、メモリコントローラ１００は、誤り訂正前読出しデータＳＲと誤り訂正後読出しデータＥＸＰとを比較し、フェイルビット数の数をカウントする。フェイルビット数は、例えば、誤り訂正前読出しデータＳＲと誤り訂正後読出しデータＥＸＰとの間でデータが異なるビットの数をカウントすることにより算出される。フェイルビット数のカウント値が基準値Ｎ１以上であった場合（ステップＳＴ３１；ｙｅｓ）、メモリコントローラ１００はシフト量算出処理を実行すると判定し、処理はステップＳＴ４０に進む。ステップＳＴ４０及びＳＴ５０の処理は、図９の場合と同等であるため、その説明を省略する。なお、基準値Ｎ１は、誤り訂正可能なビット数の上限値以下の任意の自然数である。一方、フェイルビット数のカウント値が基準値Ｎ１未満であった場合（ステップＳＴ３１；ｎｏ）、メモリコントローラ１００はシフト量算出処理の実行は不要であると判定し、シフト量算出処理を実行することなく処理を終了する。
【０１２５】
以上で、読出し処理が終了する。
【０１２６】
第１実施形態の第１変形例によれば、メモリコントローラ１００は、誤り訂正前読出しデータＳＲと誤り訂正後読出しデータＥＸＰとを比較し、フェイルビット数をカウントする。メモリコントローラ１００は、フェイルビットカウント数に基づいて、シフト量算出処理を実行するか否かを判定する。これにより、閾値分布の谷位置に対する読出し電圧のずれが小さく、データが誤って読み出されるビットが少ない場合には、シフト量算出処理を実行しないと判定することができる。このため、不要なシフト量算出処理の回数を低減すると共に、読出し電圧の補正が必要な程度に閾値分布が変動した場合に選択的にシフト量算出処理を実行することができる。したがって、シフト量算出処理の実行回数を低減することができ、読出し電圧補正によるレイテンシの増加を抑制することができる。
【０１２７】
１．５  第２変形例
第１実施形態及び第１実施形態の第１変形例では、パトロールリード処理によって、セルユニットＣＵを定期的に巡回してデータの読出し処理を行う場合について説明したが、これに限られない。例えば、パトロールリード処理の対象は、或る繰り返し単位において巡回するセルユニットＣＵは、前回実行されたシフト量算出処理の結果に応じて判定されてもよい。以下の説明では、第１実施形態と同等の構成及び動作については説明を省略し、第１実施形態と異なる構成及び動作について主に説明する。
【０１２８】
図１５は、第１実施形態の第２変形例に係るメモリシステムの履歴テーブルの一例を示す概念図である。図１５は、第１実施形態における図７に対応する。
【０１２９】
図１５に示すように、履歴テーブルには、シフト量Δに加え、優先パトロールフラグ、及びパトロールカウント値が設定されている。
【０１３０】
優先パトロールフラグは、例えば、ページ毎（図１５の例では、下位ページ及び上位ページ）にそれぞれ個別に割当てられる。優先パトロールフラグは、例えば、シフト量算出処理を伴うパトロールリード処理を優先して実行するセルユニットＣＵに対して設定される。
【０１３１】
パトロールカウント値は、例えば、当該セルユニットＣＵに対して、シフト量算出処理を伴うパトロールリード処理が連続して実行された回数を示す。パトロールカウント値が大きい場合、同じセルユニットＣＵに対して優先的に何度もシフト量算出処理を実行していることを示す。すなわち、パトロールカウント値が過度に大きい状態からは、シフト量算出処理によっても誤り訂正できないことが示唆される。誤り訂正できない場合としては、例えば、読出し電圧の最適値からのずれが改善していない場合や、仮に最適値が特定された場合でも、隣り合う閾値分布間の重複部分が大きくなり過ぎた場合等が含まれる。
【０１３２】
図１６は、第１実施形態の第２変形例に係るメモリシステムにおけるシフト量算出処理を伴う読出し処理を説明するためのフローチャートである。図１６は、第１実施形態において説明した図９に対応し、図９のステップＳＴ１０の前に新たなステップＳＴ１〜ＳＴ３が追加されると共に、ステップＳＴ５０の後に新たなステップＳＴ５１、ＳＴ５２、及びＳＴ５３が追加された場合が示される。
【０１３３】
図１６に示すように、ステップＳＴ１において、メモリコントローラ１００は、パトロールリード処理の開始に際して、履歴テーブルを参照し、優先パトロールフラグが設定されたページのアドレスを取得する。メモリコントローラ１００は、当該アドレスに基づき、優先パトロールフラグが設定されたページに対して優先的にシフト量算出処理を伴うパトロールリード処理を実行する。
【０１３４】
ステップＳＴ２において、メモリコントローラ１００は、引き続き履歴テーブルを参照し、優先パトロールフラグが設定されたページに対応するパトロールカウント値をインクリメントする。
【０１３５】
ステップＳＴ３において、メモリコントローラ１００は、ステップＳＴ２においてインクリメントされたパトロールカウント値が基準値Ｎ２未満であるか否かを判定する。基準値Ｎ２は、例えば、任意の自然数が適用可能である。パトロールカウント値が基準値Ｎ２未満である場合（ステップＳＴ３；ｙｅｓ）、シフト量算出処理によってフェイルビット数の改善が見込めると判定し、処理はステップＳＴ１０に進む。一方、基準値Ｎ２以上である場合（ステップＳＴ３；ｎｏ）、これ以上シフト量算出処理を実行してもフェイルビット数の改善が見込めないと判定し、処理はステップＳＴ６０に進む。ステップＳＴ１０〜ＳＴ５０、及びステップＳＴ６０〜ＳＴ８０の処理は、図９の場合と同等であるため、その説明を省略する。
【０１３６】
ステップＳＴ５０の後、処理はステップＳＴ５１に進む。ステップＳＴ５１において、メモリコントローラ１００は、誤り訂正前読出しデータＳＲと、誤り訂正後読出しデータＥＸＰとを比較し、フェイルビット数をカウントする。フェイルビット数のカウント値が基準値Ｎ３未満であった場合（ステップＳＴ５１；ｙｅｓ）、シフト量算出処理の更なる実行が不要な程度にフェイルビット数が改善したと判定し、処理はステップＳＴ５２に進む。ステップＳＴ５２において、メモリコントローラ１００は、履歴テーブルを参照し、ステップＳＴ５１においてフェイルビット数が十分に改善したと判定されたページに対応する優先パトロールフラグをリセットし、処理を終了する。この場合、次の繰り返し単位におけるパトロールリード処理では、当該セルユニットＣＵには優先パトロールフラグが設定されていないため、シフト量算出処理が省略される。
【０１３７】
一方、フェイルビットカウント数のカウント値が基準値Ｎ３以上である場合（ステップＳＴ５１；ｎｏ）、シフト量算出処理の更なる実行が必要であると判定し、処理はステップＳＴ５３に進む。ステップＳＴ５３において、メモリコントローラ１００は、履歴テーブルを参照し、ステップＳＴ５１においてフェイルビット数が十分に改善していないと判定されたページに対応する優先パトロールフラグをセットし（又はセットを維持し）、処理を終了する。この場合、次の繰り返し単位におけるパトロールリード処理では、当該セルユニットＣＵには優先パトロールフラグが設定されているため、シフト量算出処理が再度実行される。
【０１３８】
第１実施形態の第２変形例によれば、履歴テーブルは、シフト量Δに加え、優先パトロールフラグ及びパトロールカウント値を更に保持する。メモリコントローラ１００は、パトロールリード処理の実行に際し、優先パトロールフラグを参照することによって、優先的にフェイルビット数の改善が必要なページを特定し、当該ページに対してシフト量算出処理を実行する。これにより、シフト量算出処理が必要なページに対して優先的にパトロールリード処理を実行することができ、読出し処理のレイテンシの増加を抑制することができる。
【０１３９】
また、メモリコントローラ１００は、パトロールカウント値を参照することにより、優先的にシフト量算出処理を実行したものの、フェイルビット数の改善が見られないページを特定し、当該ページに対してリトライシーケンス及び必要に応じてリフレッシュ処理を実行する。これにより、シフト量算出処理によってもフェイルビット数の改善が見られないページに対していつまでもシフト量算出処理が実行され続け、レイテンシが増加することを抑制することができる。
【０１４０】
また、メモリコントローラ１００は、シフト量算出処理の実行後、フェイルビット数をカウントし、更なる優先的なシフト量算出処理の実行が必要か否かを判定する。これにより、読出し電圧に対して閾値分布のずれが大きくなく、誤って読み出されるデータが少ない場合には、シフト量算出処理を実行しないと判定することができる。このため、読出し電圧の補正が必要な場合に対して選択的にシフト量算出処理を実行することができる。したがって、シフト量算出処理の実行回数を低減することができ、読出し電圧補正によるレイテンシの増加を抑制することができる。
【０１４１】
２．  第２実施形態
次に、第２実施形態に係るメモリシステムについて説明する。
【０１４２】
第１実施形態、並びに第１変形例及び第２変形例では、セルユニットＣＵ内の全ページについて誤り訂正前読出しデータＳＲを読み出し、対応する全ての誤り訂正後読出しデータＥＸＰを用いて、シフト量算出処理を実行する場合について説明した。しかしながら、例えば、読出し電圧補正用バッファメモリ１８１内に十分な一時保存領域が確保できない場合、全てのページ分の誤り訂正後読出しデータＥＸＰを用いることなく、シフト量算出処理を実行してもよい。以下の説明では、第１実施形態と同等の構成及び動作については説明を省略し、第１実施形態と異なる構成及び動作について主に説明する。
【０１４３】
２．１  シフト量算出処理
図１７及び図１８は、第２実施形態に係るメモリシステムにおけるシフト量算出処理のうち、評価指標算出対象のカウント値が選択されるまでの処理を説明するための模式図である。図１７及び図１８は、第１実施形態における図１１に対応する。図１７は、誤り訂正後読出しデータＥＸＰのうち、誤り訂正後上位読出しデータＥＸＰ＿Ｕを用いずに、誤り訂正後下位読出しデータＥＸＰ＿Ｌを用いて評価指標算出対象のカウント値が選択される場合を示す。図１８は、誤り訂正後読出しデータＥＸＰのうち、誤り訂正後下位読出しデータＥＸＰ＿Ｌを用いずに、誤り訂正後上位読出しデータＥＸＰ＿Ｕを用いて評価指標算出対象のカウント値が選択される場合を示す。
【０１４４】
まず、誤り訂正後上位読出しデータＥＸＰ＿Ｕを用いることなく、誤り訂正後下位読出しデータＥＸＰ＿Ｌを用いる場合について、図１７を用いて説明する。
【０１４５】
図１７に示すように、誤り訂正前読出しデータＳＲは、セルユニットＣＵ内のメモリセルトランジスタＭＴを、“Ｅｒ”状態〜“Ｃ”状態の４通りに分類する。しかしながら、誤り訂正後読出しデータＥＸＰは、下位ページ分しか存在しないため、セルユニットＣＵ内のメモリセルトランジスタＭＴを、“Ｅｒ”状態又は“Ａ”状態の場合と、“Ｂ”状態又は“Ｃ”状態の場合と、の２通りに分類する。このため、誤り訂正前読出しデータＳＲ及び誤り訂正後読出しデータＥＸＰが取り得る値の組合せＣ１＝（ＳＲ＿Ｕ、ＳＲ＿Ｌ、ＥＸＰ＿Ｌ）は、２＾３＝８通り存在する。ビットカウンタ１８２は、上記したような８通りの組合せＣ１毎にセルユニットＣＵ内のメモリセルトランジスタＭＴを分類する。そして、ビットカウンタ１８２は、８通りの組合せＣ１毎に、分類されたメモリセルトランジスタＭＴの数を（ビット数として）カウントする。
【０１４６】
図１７の例では、ビットセレクタ１８３は、８通りの組合せＣ１のうち、組合せＣ１＝（ＳＲ＿Ｕ、ＳＲ＿Ｌ、ＥＸＰ＿Ｌ）＝（０、１、０）及び（０、０、１）の２通りを含む１つの組に着目する。組合せＣ１＝（０、１、０）の場合は、“Ｂ”状態又は“Ｃ”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ａ”状態のデータが誤って読み出されたことを示す場合である。組合せＣ１＝（０、０、１）の場合は、“Ｅｒ”状態又は“Ａ”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｂ”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せＣ１＝（０、１、０）の場合は、「Ｂ，Ｃ→Ａ誤読出しケース」を含み、組合せＣ１＝（０、０、１）の場合は、「Ｅｒ，Ａ→Ｂ誤読出しケース」を含む。
【０１４７】
一般に、閾値分布は、ピーク値に対応する閾値電圧から離れるほど、メモリセル数が減少する。このため、隣り合う閾値分布と重なる領域に属するメモリセル数の方が、２個先の閾値分布と重なる領域に属するメモリセル数よりも有意に大きいとみなし得る。
【０１４８】
したがって、組合せＣ１＝（０、１、０）にカウントされた場合のうち、「Ｂ→Ａ誤読出しケース」の数は、「Ｃ→Ａ誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せＣ１＝（０、１、０）に対応するカウント値は、「Ｂ→Ａ誤読出しケース」に実質的に等しいとみなし得る。同様に、組合せＣ１＝（０、０、１）にカウントされた場合のうち、「Ａ→Ｂ誤読出しケース」の数は、「Ｅｒ→Ｂ誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せＣ１＝（０、０、１）に対応するカウント値は、「Ａ→Ｂ誤読出しケース」に実質的に等しいとみなし得る。
【０１４９】
上記したような近似を行うことにより、ビットセレクタ１８３は、電圧ＶＢのシフト量Δを算出する場合として、「Ｂ→Ａ誤読出しケース」に実質的に対応する組合せＣ１＝（０、１、０）のカウント値と、「Ａ→Ｂ誤読出しケース」に実質的に対応する組合せＣ１＝（０、０、１）のカウント値と、を１つの組として選択する。
【０１５０】
以上のように動作することにより、ビットセレクタ１８３は、シフト量算出処理に用いる２通りのカウント値を含む組を、読出し動作ＢＲについて選択することができる。
【０１５１】
次に、誤り訂正後下位読出しデータＥＸＰ＿Ｌを用いることなく、誤り訂正後上位読出しデータＥＸＰ＿Ｕを用いる場合について、図１８を用いて説明する。
【０１５２】
図１８に示すように、誤り訂正前読出しデータＳＲは、セルユニットＣＵ内のメモリセルトランジスタＭＴを、“Ｅｒ”状態〜“Ｃ”状態の４通りに分類する。しかしながら、誤り訂正後読出しデータＥＸＰは、上位ページ分しか存在しないため、セルユニットＣＵ内のメモリセルトランジスタＭＴを、“Ｅｒ”状態又は“Ｃ”状態の場合と、“Ａ”状態又は“Ｂ”状態の場合と、の２通りに分類する。このため、誤り訂正前読出しデータＳＲ及び誤り訂正後読出しデータＥＸＰが取り得る値の組合せＣ２＝（ＳＲ＿Ｕ、ＳＲ＿Ｌ、ＥＸＰ＿Ｕ）は、２＾３＝８通り存在する。ビットカウンタ１８２は、上記したような８通りの組合せＣ２毎に読出し処理を行ったセルユニットＣＵ内のメモリセルトランジスタＭＴを分類する。そして、ビットカウンタ１８２は、８通りの組合せＣ２毎に、分類されたメモリセルトランジスタＭＴの数を（ビット数として）カウントする。
【０１５３】
図１８の例では、８通りの組合せＣ２のうち、組合せＣ２＝（ＳＲ＿Ｕ、ＳＲ＿Ｌ、ＥＸＰ＿Ｕ）＝（１、１、０）及び（０、１、１）の２通りを含む組と、（０、０、１）及び（１、０、０）の２通りを含む組と、の２組に着目する。
【０１５４】
組合せＣ２＝（１、１、０）の場合は、“Ａ”状態又は“Ｂ”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｅｒ”状態のデータが誤って読み出されたことを示す場合である。組合せＣ２＝（０、１、１）の場合は、“Ｅｒ”状態又は“Ｃ”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ａ”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せＣ２＝（１、１、０）の場合は、「Ａ，Ｂ→Ｅｒ誤読出しケース」を含み、組合せＣ２＝（０、１、１）の場合は、「Ｅｒ，Ｃ→Ａ誤読出しケース」を含む。
【０１５５】
また、組合せＣ２＝（０、０、１）の場合は、“Ｅｒ”状態又は“Ｃ”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｂ”状態のデータが誤って読み出されたことを示す場合である。組合せＣ２＝（１、０、０）の場合は、“Ａ”状態又は“Ｂ”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｃ”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せＣ２＝（０、０、１）の場合は、「Ｅｒ，Ｃ→Ｂ誤読出しケース」を含み、組合せＣ２＝（１、０、０）の場合は、「Ａ，Ｂ→Ｃ誤読出しケース」を含む。
【０１５６】
図１７の際に説明したように、閾値分布は、ピーク値に対応する閾値電圧から離れるほど、メモリセル数が減少する。このため、隣り合う閾値分布と重なる領域に属するメモリセル数の方が、３個先の閾値分布と重なる領域に属するメモリセル数よりも有意に大きいとみなし得る。
【０１５７】
したがって、組合せＣ２＝（１、１、０）にカウントされた場合のうち、「Ａ→Ｅｒ誤読出しケース」の数は、「Ｂ→Ｅｒ誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せＣ２＝（１、１、０）に対応するカウント値は、「Ａ→Ｅｒ誤読出しケース」に実質的に等しいとみなし得る。同様に、組合せＣ２＝（０、１、１）にカウントされた場合のうち、「Ｅｒ→Ａ誤読出しケース」の数は、「Ｃ→Ａ誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せＣ２＝（０、１、１）に対応するカウント値は、「Ｅｒ→Ａ誤読出しケース」に実質的に等しいとみなし得る。
【０１５８】
また、組合せＣ２＝（０、０、１）にカウントされた場合のうち、「Ｃ→Ｂ誤読出しケース」の数は、「Ｅｒ→Ｂ誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せＣ２＝（０、０、１）に対応するカウント値は、「Ｃ→Ｂ誤読出しケース」に実質的に等しいとみなし得る。同様に、組合せＣ２＝（１、０、０）にカウントされた場合のうち、「Ｂ→Ｃ誤読出しケース」の数は、「Ａ→Ｃ誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せＣ２＝（１、０、０）に対応するカウント値は、「Ｂ→Ｃ誤読出しケース」に実質的に等しいとみなし得る。
【０１５９】
上記したような近似を行うことにより、ビットセレクタ１８３は、電圧ＶＡのシフト量Δを算出する場合として、「Ａ→Ｅｒ誤読出しケース」に実質的に対応する組合せＣ２＝（１、１、０）のカウント値と、「Ａ→Ｅｒ誤読出しケース」に実質的に対応する組合せＣ２＝（０、１、１）のカウント値と、を１つの組として選択する。また、ビットセレクタ１８３は、電圧ＶＣのシフト量Δを算出する場合として、「Ｃ→Ｂ誤読出しケース」に実質的に対応する組合せＣ２＝（０、０、１）のカウント値と、「Ｂ→Ｃ誤読出しケース」に実質的に対応する組合せＣ２＝（１、０、０）のカウント値と、を１つの組として選択する。
【０１６０】
以上のように動作することにより、ビットセレクタ１８３は、シフト量算出に用いる２通りのカウント値を含む組を、読出し動作ＡＲ及びＣＲについて選択することができる。
【０１６１】
２．２  本実施形態に係る効果
第２実施形態によれば、ビットカウンタ１８２は、誤り訂正前読出しデータＳＲ（ＳＲ＿Ｕ及びＳＲ＿Ｌ）と、誤り訂正後下位読出しデータＥＸＰ＿Ｌ又は誤り訂正後上位読出しデータＥＸＰ＿Ｕのいずれか１つと、により生じる８通りの組合せＣ１又はＣ２についてビット数をカウントする。ビットセレクタ１８３は、誤り訂正後下位読出しデータＥＸＰ＿Ｌを用いる場合、８通りの組合せＣ１のうち、Ｃ１＝（０、１、０）及び（０、０、１）の組を選択する。これにより、誤り訂正後上位読出しデータＥＸＰ＿Ｕを用いることなく、読出し動作ＢＲに対応するシフト量Δを算出するために用いるカウント値を選択することができる。また、ビットセレクタ１８３は、誤り訂正後上位読出しデータＥＸＰ＿Ｕを用いる場合、８通りの組合せＣ２のうち、Ｃ２＝（１、１、０）及び（０、１、１）の組、並びに（０、０、１）及び（１、０、０）の組を選択する。これにより、誤り訂正後下位読出しデータＥＸＰ＿Ｌを用いることなく、読出し動作ＡＲ及びＣＲに対応するシフト量Δを算出するために用いるカウント値を選択することができる。したがって、メモリコントローラ１００に誤り訂正後上位読出しデータＥＸＰ＿Ｕ及び誤り訂正後下位読出しデータＥＸＰ＿Ｌを同時に保持可能な領域を確保できない場合にも、シフト量算出処理を実行することができる。
【０１６２】
なお、上述のように、誤り訂正後上位読出しデータＥＸＰ＿Ｕ及び誤り訂正後下位読出しデータＥＸＰ＿Ｌを同時に保持可能な領域を確保できない場合でも、図１７及び図１８に示した動作を順に実行することによって、第１実施形態と同様に、全ての読出し動作ＡＲ〜ＣＲに対応するシフト量Δを算出してもよい。すなわち、まず、読出し電圧補正回路１８０は、読出し電圧補正用バッファメモリ１８１に、誤り訂正前読出しデータＳＲ（ＳＲ＿Ｕ及びＳＲ＿Ｌ）、及び誤り訂正後下位読出しデータＥＸＰ＿Ｌを保持させ、８通りの組合せＣ１に基づいて読出し動作ＢＲに対応するシフト量Δを算出する。読出し動作ＢＲに対応するシフト量Δの算出後、読出し電圧補正回路１８０は、読出し電圧補正用バッファメモリ１８１から誤り訂正後下位読出しデータＥＸＰ＿Ｌを削除しつつ、誤り訂正前上位読出しデータＳＲ＿ＵをＥＣＣ回路１６０に転送し、誤り訂正後上位読出しデータＥＸＰ＿Ｕを得る。その後、読出し電圧補正回路１８０は、読出し電圧補正用バッファメモリ１８１に保持させた誤り訂正前読出しデータＳＲ（ＳＲ＿Ｕ及びＳＲ＿Ｌ）、及び誤り訂正後上位読出しデータＥＸＰ＿Ｕに基づき、８通りの組合せＣ２に基づいて読出し動作ＡＲ及びＣＲに対応するシフト量Δを算出する。これにより、第２実施形態に係る読出し電圧補正回路１８０は、全ての読出し動作ＡＲ〜ＣＲに対応するシフト量Δを算出することが出来る。
【０１６３】
３．  第３実施形態
次に、第３実施形態に係るメモリシステムについて説明する。
【０１６４】
第１実施形態及び第２実施形態では、セルユニットＣＵに対応する全てのページについて一括してデータを読み出すシーケンシャルリード処理が実行される場合について説明した。第３実施形態では、１ページずつランダムにデータを読み出すランダムリード処理が実行される場合にシフト量算出処理を併せて実行する場合について説明する。以下の説明では、第１実施形態と同等の構成及び動作については説明を省略し、第１実施形態と異なる構成及び動作について主に説明する。
【０１６５】
３．１  シフト量算出処理を伴う読出し処理
第３実施形態に係るメモリシステムにおけるシフト量算出処理を伴う読出し処理について、図１９に示すフローチャートを用いて説明する。図１９は、第１実施形態における図９に対応し、図９のステップＳＴ２０に代えてステップＳＴ２１が実行され、ステップＳＴ３０及びＳＴ４０の間に新たなステップＳＴ３２、ＳＴ３３、及びＳＴ３４が追加される。また、上述の通り、図１９では、ランダムリード処理によってデータが読み出される場合が示される。
【０１６６】
図１９に示すように、ステップＳＴ１０において、メモリコントローラ１００は、メモリ１２０内の履歴テーブルを参照し、読出し対象のページに対応する読出し動作（図１９の場合では、読出し動作ＡＲ及びＣＲ）のシフト量Δを把握する。
【０１６７】
ステップＳＴ２１において、メモリコントローラ１００は、ステップＳＴ１０において把握したシフト量Δに基づいてシフトリードコマンドを発行する。これにより、チップＣｈｉｐは、履歴テーブルのシフト量を適用した読出し電圧によって誤り訂正前上位読出しデータＳＲ＿Ｕを読み出し、メモリコントローラ１００に出力する。誤り訂正前上位読出しデータＳＲ＿Ｕは、メモリコントローラ１００内において、ＥＣＣ回路１６０に転送されると共に、読出し電圧補正用バッファメモリ１８１に保持される。
【０１６８】
ステップＳＴ３０において、ＥＣＣ回路１６０は、誤り訂正前上位読出しデータＳＲ＿Ｕに対して誤り訂正処理を実行する。ＥＣＣ回路１６０による誤り訂正処理が成功した場合（ステップＳＴ３０；ｙｅｓ）、ＥＣＣ回路１６０は、誤り訂正後上位読出しデータＥＸＰ＿Ｕを読出し電圧補正用バッファメモリ１８１に保持させた後、処理はステップＳＴ３２に進む。一方、ＥＣＣ回路１６０による誤り訂正処理が失敗した場合（ステップＳＴ３０；ｎｏ）、処理はステップＳＴ６０に進む。なお、ステップＳＴ６０〜ＳＴ８０の処理は、図９の場合と同等であるため、その説明を省略する。
【０１６９】
ステップＳＴ３２において、メモリコントローラ１００は、メモリ１２０内の履歴テーブルを再度参照し、読出し対象のページを含むセルユニットＣＵ内の他のページに対応する読出し動作（図１９の場合では、読出し動作ＢＲ）のシフト量Δを把握する。
【０１７０】
ステップＳＴ３３において、メモリコントローラ１００は、ステップＳＴ３２において把握したシフト量Δに基づいてシフトリードコマンドを発行する。これにより、チップＣｈｉｐは、履歴テーブルのシフト量を適用した読出し電圧によって誤り訂正前下位読出しデータＳＲ＿Ｌを読み出し、メモリコントローラ１００に出力する。誤り訂正前下位読出しデータＳＲ＿Ｌは、メモリコントローラ１００内において、ＥＣＣ回路１６０に転送されると共に、読出し電圧補正用バッファメモリ１８１に保持される。
【０１７１】
ステップＳＴ３４において、ＥＣＣ回路１６０は、誤り訂正前下位読出しデータＳＲ＿Ｌに対して誤り訂正処理を実行する。ＥＣＣ回路１６０による誤り訂正処理が成功した場合（ステップＳＴ３４；ｙｅｓ）、ＥＣＣ回路１６０は、誤り訂正後下位読出しデータＥＸＰ＿Ｌを読出し電圧補正用バッファメモリ１８１に保持させた後、処理はステップＳＴ４０に進む。一方、ＥＣＣ回路１６０による誤り訂正処理が失敗した場合（ステップＳＴ３４；ｎｏ）、処理はステップＳＴ６０に進む。
【０１７２】
ステップＳＴ４０において、読出し電圧補正回路１８０は、図１０〜図１３に示したシフト量算出処理と同等の処理を実行する。そして、ステップＳＴ５０において、メモリコントローラ１００は、算出したシフト量Δによって履歴テーブルを更新し、読出し処理を終了する。
【０１７３】
３．２  本実施形態に係る効果
第３実施形態によれば、メモリコントローラ１００は、ランダムリード処理によってページ単位でデータが読み出された際に、更なるシフトリード処理を実行することで、誤り訂正処理を実行することができる。より具体的には、ランダムリード処理が上位ページのように２種類の読出し電圧を用いたシフトリード処理である場合、下位ページのシフトリード処理を更に実行する。これにより、第１実施形態と同等の動作を実行することができ、ひいては、第１実施形態と同等の効果を奏することができる。
【０１７４】
４．  第４実施形態
第３実施形態では、ランダムリード処理が実行された際に、追加のシフトリード処理を実行することによってシフト量算出処理を実行する場合について説明したが、これに限られない。例えば、ランダムリード処理が実行された際に、シフトリード処理を実行する代わりにシングルステートリード処理を実行してもよい。
【０１７５】
シフトリード処理は、互いに異なる複数個の読出し電圧を１つのセットとして印加することによって、特定のページのデータを確定させる。これに対し、シングルステートリード処理は、単一の読出し電圧を印加することによって、当該読出し電圧に対する閾値電圧の大小関係を確定する処理である。このため、シングルステートリード処理は、読出し回数が少ない分、シフトリード処理よりも短時間で実行可能である。
【０１７６】
以下の説明では、第３実施形態と同等の構成及び動作については説明を省略し、第３実施形態と異なる構成及び動作について主に説明する。
【０１７７】
４．１  メモリセルトランジスタの閾値分布について
図２０は、第４実施形態に係るメモリシステムの各メモリセルトランジスタＭＴの取り得るデータ、閾値電圧分布、及び読出し時に用いる電圧について示したダイアグラムである。第４実施形態では、１つのメモリセルトランジスタＭＴが例えば３ビットデータを保持可能な場合を想定する。この３ビットデータを、下位のビットからそれぞれ下位(Lower)ビット、中位（Middle）ビット、及び上位(Upper)ビットと呼ぶことにする。そして、同一のセルユニットＣＵに属するメモリセルの保持する下位ビットの集合を下位ページと呼び、中位ビットの集合を中位ページと呼び、上位ビットの集合を上位ページと呼ぶ。
【０１７８】
この場合、メモリセルトランジスタＭＴは、閾値電圧に応じて８個の状態を取ることが出来る。この８個の状態を、閾値電圧の低いものから順に、“Ｅｒ”状態、“Ａ”状態、“Ｂ”状態、“Ｃ”状態、“Ｄ”状態、“Ｅ”状態、“Ｆ”状態、及び“Ｇ”状態と呼ぶことにする。
【０１７９】
“Ｅｒ”状態〜“Ｂ”状態については、第１実施形態における図５における説明と同等である。なお、電圧ＶＡ〜ＶＣの大きさは、図５の場合と異なり得る。“Ｃ”状態のメモリセルトランジスタＭＴの閾値電圧は、電圧ＶＣ以上であり且つ電圧ＶＤ（＞ＶＣ）未満である。“Ｄ”状態のメモリセルトランジスタＭＴの閾値電圧は、電圧ＶＤ以上であり且つ電圧ＶＥ（＞ＶＤ）未満である。“Ｅ”状態のメモリセルトランジスタＭＴの閾値電圧は、電圧ＶＥ以上であり且つ電圧ＶＦ（＜ＶＥ）未満である。“Ｆ”状態のメモリセルトランジスタＭＴの閾値電圧は、電圧ＶＦ以上であり且つ電圧ＶＧ（＜ＶＦ）未満である。“Ｇ”状態のメモリセルトランジスタＭＴの閾値電圧は、電圧ＶＧ以上であり且つ電圧ＶＲＥＡＤ未満である。このように分布する８個の状態のうちで、“Ｇ”状態が、閾値電圧の最も高い状態である。
【０１８０】
上記閾値電圧分布は、前述の下位ビット、中位ビット、及び上位ビットからなる３ビット（３ページ）データを書き込むことで実現される。すなわち、上記“Ｅｒ”状態から“Ｇ”状態と、下位ビット、中位ビット、及び上位ビットとの関係は、例えば、次の通りである。
“Ｅｒ”状態：“１１１”（“上位／中位／下位”の順で表記）  
“Ａ”状態：“１１０”  
“Ｂ”状態：“１００”  
“Ｃ”状態：“０００”  
“Ｄ”状態：“０１０”  
“Ｅ”状態：“０１１”  
“Ｆ”状態：“００１”  
“Ｇ”状態：“１０１”  
このように、閾値電圧分布において隣り合う２つの状態に対応するデータ間では、３ビットのうちの１ビットのみが変化する。
【０１８１】
従って、下位ビットを読み出す際には、下位ビットの値（“０”ｏｒ“１”）が変化する境界に相当する電圧を用いれば良く、このことは中位ビット及び上位ビットでも同様である。
【０１８２】
すなわち、図２０に示すように、下位ページ読出しは、“Ｅｒ”状態と“Ａ”状態とを区別する電圧ＶＡ、及び“Ｄ”状態と“Ｅ”状態とを区別する電圧ＶＥを読出し電圧として用いる。電圧ＶＡ及びＶＥを用いた読出し動作を、それぞれ読出し動作ＡＲ及びＥＲと呼ぶ。
【０１８３】
中位ページ読出しは、“Ａ”状態と“Ｂ”状態とを区別する電圧ＶＢ、“Ｃ”状態と“Ｄ”状態とを区別する電圧ＶＤ、及び“Ｅ”状態と“Ｆ”状態とを区別する電圧ＶＦを読出し電圧として用いる。電圧ＶＤ及びＶＦを用いた読出し動作を、それぞれ読出し動作ＤＲ及びＦＲと呼ぶ。
【０１８４】
そして上位ページ読出しは、“Ｂ”状態と“Ｃ”状態とを区別する電圧ＶＣ、及び“Ｆ”状態と“Ｇ”状態とを区別する電圧ＶＧを読出し電圧として用いる。電圧ＶＣ及びＶＧを用いた読出し動作を、それぞれ読出し動作ＣＲ及びＧＲと呼ぶ。
【０１８５】
４．２  読出し電圧補正回路の構成
次に、第４実施形態に係るメモリシステムの読出し電圧補正回路の構成について、図２１示すブロック図を用いて説明する。図２１に示すように、読出し電圧補正回路１８０は、分離データ生成回路１８６を更に備えている。
【０１８６】
分離データ生成回路１８６は、例えば、少なくとも否定（ＮＯＴ）演算、及び論理和（ＯＲ）演算が可能な演算機能を備えている。また、分離データ生成回路１８６は、読出し電圧補正用バッファメモリ１８１に保持されたデータに対して所定の論理演算を実行しつつ、所定の条件を満たすデータの一部を分離データとして切出す機能を備えている。分離データ生成回路１８６は、当該分離データをビットカウンタ１８２に送出する。分離データの詳細については後述する。
【０１８７】
４．３  シフト量算出処理を伴う下位ページ読出し処理
まず、３ページのうち下位ページをランダムリード処理によって読み出す場合にシフト量算出処理を実行する際の動作について図２２に示すフローチャートを用いて説明する。図２２は、第３実施形態における図１９に対応し、ステップＳＴ２１に代えて、ステップＳＴ２２が実行され、ステップＳＴ３２〜ＳＴ３４に代えてステップＳＴ３５〜ＳＴ３７が実行される。
【０１８８】
図２２に示すように、ステップＳＴ１０において、メモリコントローラ１００は、メモリ１２０内の履歴テーブルを参照し、読出し対象のページに対応する読出し動作（図２２の場合では、読出し動作ＡＲ及びＥＲ）のシフト量Δを把握する。
【０１８９】
ステップＳＴ２２において、メモリコントローラ１００は、ステップＳＴ１０において把握したシフト量Δに基づいてシフトリードコマンドを発行する。これにより、チップＣｈｉｐは、履歴テーブルのシフト量を適用した読出し電圧によって誤り訂正前下位読出しデータＳＲｔ＿Ｌを読み出し、メモリコントローラ１００に出力する。誤り訂正前下位読出しデータＳＲｔ＿Ｌは、メモリコントローラ１００内において、ＥＣＣ回路１６０に転送されると共に、読出し電圧補正用バッファメモリ１８１に保持される。
【０１９０】
ステップＳＴ３０において、ＥＣＣ回路１６０は、誤り訂正前下位読出しデータＳＲｔ＿Ｌに対して誤り訂正処理を実行する。ＥＣＣ回路１６０による誤り訂正処理が成功した場合（ステップＳＴ３０；ｙｅｓ）、ＥＣＣ回路１６０は、誤り訂正後下位読出しデータＥＸＰｔ＿Ｌを読出し電圧補正用バッファメモリ１８１に保持させた後、処理はステップＳＴ３５に進む。一方、ＥＣＣ回路１６０による誤り訂正処理が失敗した場合（ステップＳＴ３０；ｎｏ）、処理はステップＳＴ６０に進む。なお、ステップＳＴ６０〜ＳＴ８０の処理は、図１９の場合と同等であるため、その説明を省略する。
【０１９１】
ステップＳＴ３５において、メモリコントローラ１００は、電圧ＶＣを読出し電圧に用いたシングルステートリードコマンドを発行する。これにより、チップＣｈｉｐは、シングルステート読出しデータＳＳＲｔ＿ＣＲを読み出し、メモリコントローラ１００に出力する。シングルステート読出しデータＳＳＲｔ＿ＣＲは、メモリコントローラ１００内において、読出し電圧補正用バッファメモリ１８１に保持される。
【０１９２】
ステップＳＴ３６において、分離データ生成回路１８６は、読出し電圧補正用バッファメモリ１８１から読み出した誤り訂正前下位読出しデータＳＲｔ＿Ｌ及びシングルステート読出しデータＳＳＲｔ＿ＣＲに基づき、誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｌ１、及びＳＥＰ＿ＳＲｔ＿Ｌ２を生成する。具体的には、分離データ生成回路１８６は、誤り訂正前下位読出しデータＳＲｔ＿Ｌから、シングルステート読出しデータＳＳＲｔ＿ＣＲのデータが“１”に対応するビットを誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｌ１として抽出し、“０”に対応するビットを、誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｌ２として抽出する。抽出された誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｌ１及びＳＥＰ＿ＳＲｔ＿Ｌ２は、ビットカウンタ１８２に送出される。
【０１９３】
ステップＳＴ３７において、分離データ生成回路１８６は、読出し電圧補正用バッファメモリ１８１から読み出した誤り訂正後下位読出しデータＥＸＰｔ＿Ｌ及びシングルステート読出しデータＳＳＲｔ＿ＣＲに基づき、誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｌ１、及びＳＥＰ＿ＥＸＰｔ＿Ｌ２を生成する。具体的には、分離データ生成回路１８６は、誤り訂正後下位読出しデータＥＸＰｔ＿Ｌから、シングルステート読出しデータＳＳＲｔ＿ＣＲのデータが“１”に対応するビットを誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｌ１として抽出し、“０”に対応するビットを、誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｌ２として抽出する。抽出された誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｌ１及びＳＥＰ＿ＥＸＰｔ＿Ｌ２は、ビットカウンタ１８２に送出される。
【０１９４】
ステップＳＴ４０において、読出し電圧補正回路１８０は、誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｌ１及びＳＥＰ＿ＳＲｔ＿Ｌ２、並びに誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｌ１及びＳＥＰ＿ＥＸＰｔ＿Ｌ２に基づいて、シフト量算出処理を実行する。シフト量算出処理の詳細は、後述する。
【０１９５】
ステップＳＴ５０において、メモリコントローラ１００は、ステップＳＴ４０において算出されたシフト量Δをメモリ１２０の履歴テーブル内における対応する領域に保持することにより、履歴テーブルを更新する。
【０１９６】
以上により、一連の処理が終了する。
【０１９７】
４．４  下位ページ読出し処理に基づくシフト量算出処理
図２３は、第４実施形態に係るメモリシステムにおける、下位ページ読出し処理に基づくシフト量算出処理を説明するための模式図である。図２３では、シフト量算出処理のうち、評価指標算出対象のカウント値が選択されるまでの処理が示される。
【０１９８】
図２３に示すように、誤り訂正前下位読出しデータＳＲｔ＿Ｌは、セルユニットＣＵ内のメモリセルトランジスタＭＴを２通りに分類する。すなわち、誤り訂正前下位読出しデータＳＲｔ＿Ｌは、閾値電圧が電圧ＶＡ未満、又は電圧ＶＥ以上の場合にデータ“１”となり、該当するメモリセルトランジスタＭＴは“Ｅｒ”状態、又は“Ｅ”状態〜“Ｇ”状態の閾値分布に属しているとみなされる。また、誤り訂正前下位読出しデータＳＲｔ＿Ｌは、閾値電圧が電圧ＶＡ以上電圧ＶＥ未満の場合にデータ“０”となり、該当するメモリセルトランジスタＭＴは“Ａ”状態〜“Ｄ”状態の閾値分布に属しているとみなされる。
【０１９９】
シングルステート読出しデータＳＳＲｔ＿ＣＲは、閾値電圧がＶＣ未満の場合にデータ“１”となり、該当するメモリセルトランジスタＭＴは“Ｅｒ”状態〜“Ｂ”状態の閾値分布に属しているとみなされる。また、シングルステート読出しデータＳＳＲｔ＿ＣＲは、閾値電圧がＶＣ以上の場合にデータ“０”となり、“Ｃ”状態〜“Ｇ”状態の閾値分布に属しているとみなされる。
【０２００】
このため、誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｌ１は、“Ｅｒ”状態〜“Ｂ”状態の閾値分布に属しているとみなされたメモリセルトランジスタＭＴを、２通りに（閾値電圧が電圧ＶＡ未満の場合にはデータ“１”に、電圧ＶＡ以上の場合にはデータ“０”に）分類する。すなわち、誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｌ１がデータ“１”となるメモリセルトランジスタＭＴは“Ｅｒ”状態の閾値分布に属しているとみなされ、データ“０”となるメモリセルトランジスタＭＴは“Ａ”状態又は“Ｂ”状態の閾値分布に属しているとみなされる。また、誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｌ２は、“Ｃ”状態〜“Ｇ”状態の閾値分布に属しているとみなされたメモリセルトランジスタＭＴを、２通りに（閾値電圧が電圧ＶＥ未満の場合にはデータ“０”に、電圧ＶＥ以上の場合にはデータ“１”に）分類する。すなわち、誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｌ２がデータ“０”となるメモリセルトランジスタＭＴは“Ｃ”状態又は“Ｄ”状態の閾値分布に属しているとみなされ、データ“１”となるメモリセルトランジスタＭＴは“Ｅ”状態〜“Ｇ”状態の閾値分布に属しているとみなされる。
【０２０１】
一方、誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｌ１及びＳＥＰ＿ＥＸＰｔ＿Ｌ２はそれぞれ、誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｌ１及びＳＥＰ＿ＳＲｔ＿Ｌ２による分類に依らず、メモリセルトランジスタＭＴを２通りに分類する。すなわち、誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｌ１及びＳＥＰ＿ＥＸＰｔ＿Ｌ２がデータ“１”となるメモリセルトランジスタＭＴは、“Ｅｒ”状態、又は“Ｅ”状態〜“Ｇ”状態の閾値分布に属していることが期待される。誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｌ１及びＳＥＰ＿ＥＸＰｔ＿Ｌ２がデータ“０”となるメモリセルトランジスタＭＴは、“Ａ”状態〜“Ｄ”状態の閾値分布に属していることが期待される。
【０２０２】
なお、上述の通り、誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｌ１は“Ｅｒ”状態〜“Ｂ”状態の閾値分布に、誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｌ２は“Ｃ”状態〜“Ｇ”状態の閾値分布に、属しているとみなされたメモリセルトランジスタＭＴの集合である。このため、誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｌ１がデータ“１”となるメモリセルトランジスタＭＴは“Ｅｒ”状態の閾値分布に、データ“０”となるメモリセルトランジスタＭＴは、“Ａ”状態〜“Ｂ”状態の閾値分布に、それぞれ属していることが期待されるとみなすことができる。また、誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｌ２がデータ“１”となるメモリセルトランジスタＭＴは“Ｅ”状態〜“Ｇ”状態の閾値分布に、データ“０”となるメモリセルトランジスタＭＴは、“Ｃ”状態〜“Ｄ”状態の閾値分布に、それぞれ属していることが期待されるとみなすことができる。
【０２０３】
このため、誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｌ１及び誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｌ１が取り得る値の組合せＣ３＿Ｌ１＝（ＳＥＰ＿ＳＲｔ＿Ｌ１、ＳＥＰ＿ＥＸＰｔ＿Ｌ１）は、２×２＝４通り存在する。同様に、誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｌ２及び誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｌ２が取り得る値の組合せＣ３＿Ｌ２＝（ＳＥＰ＿ＳＲｔ＿Ｌ２、ＳＥＰ＿ＥＸＰｔ＿Ｌ２）は、２×２＝４通り存在する。ビットカウンタ１８２は、上記したような各々が４通りの組合せＣ３＿Ｌ１及びＣ３＿Ｌ２毎（すなわち、８通りの組合せ毎）にビット数をカウントする。
【０２０４】
図２３の例では、ビットセレクタ１８３は、４通りの組合せＣ３＿Ｌ１のうち、組合せＣ３＿Ｌ１＝（１、０）及び（０、１）の２通りを含む１つの組に着目する。組合せＣ３＿Ｌ１＝（１、０）の場合は、“Ａ”状態又は“Ｂ”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｅｒ”状態のデータが誤って読み出されたことを示す場合である。組合せＣ３＿Ｌ１＝（０、１）の場合は、“Ｅｒ”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ａ”状態又は“Ｂ”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せＣ３＿Ｌ１＝（１、０）の場合は、「Ａ，Ｂ→Ｅｒ誤読出しケース」を含み、組合せＣ３＿Ｌ１＝（０、１）の場合は、「Ｅｒ→Ａ，Ｂ誤読出しケース」を含む。
【０２０５】
「Ａ，Ｂ→Ｅｒ誤読出しケース」のうち、「Ａ→Ｅｒ誤読出しケース」の数は、「Ｂ→Ｅｒ誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せＣ３＿Ｌ１＝（１、０）に対応するカウント値は、「Ａ→Ｅｒ誤読出しケース」に実質的に等しいとみなし得る。同様に、「Ｅｒ→Ａ，Ｂ誤読出しケース」のうち、「Ｅｒ→Ａ誤読出しケース」の数は、「Ｅｒ→Ｂ誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せＣ３＿Ｌ１＝（０、１）に対応するカウント値は、「Ｅｒ→Ａ誤読出しケース」に実質的に等しいとみなし得る。
【０２０６】
同様に、ビットセレクタ１８３は、４通りの組合せＣ３＿Ｌ２のうち、組合せＣ３＿Ｌ２＝（０、１）及び（１、０）の２通りを含む１つの組に着目する。組合せＣ３＿Ｌ２＝（０、１）の場合は、“ “Ｅ”状態〜“Ｇ”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｃ”状態又は“Ｄ”状態のデータが誤って読み出されたことを示す場合である。組合せＣ３＿Ｌ２＝（１、０）の場合は、“Ｃ”状態又は“Ｄ”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｅ”状態〜“Ｇ”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せＣ３＿Ｌ２＝（０、１）の場合は、「Ｅ〜Ｇ→Ｃ，Ｄ誤読出しケース」を含み、組合せＣ３＿Ｌ２＝（１、０）の場合は、「Ｃ，Ｄ→Ｅ〜Ｇ誤読出しケース」を含む。
【０２０７】
「Ｅ〜Ｇ→Ｃ，Ｄ誤読出しケース」のうち、「Ｅ→Ｄ誤読出しケース」の数は、「Ｆ〜Ｇ→Ｃ，Ｄ誤読出しケース」及び「Ｅ→Ｃ誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せＣ３＿Ｌ２＝（０、１）に対応するカウント値は、「Ｅ→Ｄ誤読出しケース」に実質的に等しいとみなし得る。同様に、「Ｃ，Ｄ→Ｅ〜Ｇ誤読出しケース」のうち、「Ｄ→Ｅ誤読出しケース」の数は、「Ｃ→Ｅ〜Ｇ誤読出しケース」及び「Ｄ→Ｆ，Ｇ誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せＣ３＿Ｌ２＝（１、０）に対応するカウント値は、「Ｄ→Ｅ誤読出しケース」に実質的に等しいとみなし得る。
【０２０８】
上記した近似を行うことにより、ビットセレクタ１８３は、電圧ＶＡのシフト量Δを算出する場合、「Ａ→Ｅｒ誤読出しケース」及び「Ｅｒ→Ａ誤読出しケース」にそれぞれ実質的に対応する組合せＣ３＿Ｌ１＝（１、０）及び（０、１）のカウント値を１つの組として選択する。また、ビットセレクタ１８３は、電圧ＶＥのシフト量Δを算出する場合、「Ｅ→Ｄ誤読出しケース」及び「Ｄ→Ｅ誤読出しケース」にそれぞれ実質的に対応する組合せＣ３＿Ｌ２＝（０、１）及び（１、０）のカウント値を１つの組として選択する。
【０２０９】
以上のように動作することにより、ビットセレクタ１８３は、シフト量算出に用いる２通りのカウント値を含む組を、読出し動作ＡＲ及びＥＲについて選択することができる。
【０２１０】
４．５  シフト量算出処理を伴う上位ページ読出し処理
次に、３ページのうち上位ページをランダムリード処理によって読み出す場合にシフト量算出処理を実行する際の動作について図２４に示すフローチャートを用いて説明する。図２４は、図２２に対応し、ステップＳＴ２２に代えて、ステップＳＴ２２Ａが実行され、ステップＳＴ３５〜ＳＴ３７に代えてステップＳＴ３５Ａ〜ＳＴ３７Ａが実行される。
【０２１１】
図２４に示すように、ステップＳＴ１０において、メモリコントローラ１００は、メモリ１２０内の履歴テーブルを参照し、読出し対象のページに対応する読出し動作（図２４の場合では、読出し動作ＣＲ及びＧＲ）毎のシフト量Δを把握する。
【０２１２】
ステップＳＴ２２Ａにおいて、メモリコントローラ１００は、ステップＳＴ１０において把握したシフト量Δに基づいてシフトリードコマンドを発行する。これにより、チップＣｈｉｐは、誤り訂正前上位読出しデータＳＲｔ＿Ｕを読み出し、メモリコントローラ１００に出力する。誤り訂正前上位読出しデータＳＲｔ＿Ｕは、メモリコントローラ１００内において、ＥＣＣ回路１６０に転送されると共に、読出し電圧補正用バッファメモリ１８１に保持される。
【０２１３】
ステップＳＴ３０において、ＥＣＣ回路１６０は、誤り訂正前上位読出しデータＳＲｔ＿Ｕに対して誤り訂正処理を実行する。ＥＣＣ回路１６０による誤り訂正処理が成功した場合（ステップＳＴ３０；ｙｅｓ）、ＥＣＣ回路１６０は、誤り訂正後上位読出しデータＥＸＰｔ＿Ｕを読出し電圧補正用バッファメモリ１８１に保持させた後、処理はステップＳＴ３５Ａに進む。一方、ＥＣＣ回路１６０による誤り訂正処理が失敗した場合（ステップＳＴ３０；ｎｏ）、処理はステップＳＴ６０に進む。なお、ステップＳＴ６０〜ＳＴ８０の処理は、図２２の場合と同等であるため、その説明を省略する。
【０２１４】
ステップＳＴ３５Ａにおいて、メモリコントローラ１００は、電圧ＶＥを読出し電圧に用いたシングルステートリードコマンドを発行する。これにより、チップＣｈｉｐは、シングルステート読出しデータＳＳＲｔ＿ＥＲを読み出し、メモリコントローラ１００に出力する。シングルステート読出しデータＳＳＲｔ＿ＥＲは、メモリコントローラ１００内において、読出し電圧補正用バッファメモリ１８１に保持される。
【０２１５】
ステップＳＴ３６Ａにおいて、分離データ生成回路１８６は、読出し電圧補正用バッファメモリ１８１から読み出した誤り訂正前上位読出しデータＳＲｔ＿Ｕ及びシングルステート読出しデータＳＳＲｔ＿ＥＲに基づき、誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｕ１、及びＳＥＰ＿ＳＲｔ＿Ｕ２を生成する。具体的には、分離データ生成回路１８６は、誤り訂正前上位読出しデータＳＲｔ＿Ｕから、シングルステート読出しデータＳＳＲｔ＿ＥＲのデータが“１”に対応するビットを誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｕ１として抽出し、“０”に対応するビットを誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｕ２として抽出する。抽出された誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｕ１及びＳＥＰ＿ＳＲｔ＿Ｕ２は、ビットカウンタ１８２に送出される。
【０２１６】
ステップＳＴ３７Ａにおいて、分離データ生成回路１８６は、読出し電圧補正用バッファメモリ１８１から読み出した誤り訂正後上位読出しデータＥＸＰｔ＿Ｕ及びシングルステート読出しデータＳＳＲｔ＿ＥＲに基づき、誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｕ１、及びＳＥＰ＿ＥＸＰｔ＿Ｕ２を生成する。具体的には、分離データ生成回路１８６は、誤り訂正後上位読出しデータＥＸＰｔ＿Ｕから、シングルステート読出しデータＳＳＲｔ＿ＥＲのデータが“１”に対応するビットを誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｕ１として抽出し、“０”に対応するビットを誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｕ２として抽出する。抽出された誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｕ１及びＳＥＰ＿ＥＸＰｔ＿Ｕ２は、ビットカウンタ１８２に送出される。
【０２１７】
ステップＳＴ４０において、読出し電圧補正回路１８０は、誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｕ１及びＳＥＰ＿ＳＲｔ＿Ｕ２、並びに誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｕ１及びＳＥＰ＿ＥＸＰｔ＿Ｕ２に基づいて、シフト量算出処理を実行する。シフト量算出処理の詳細は、後述する。
【０２１８】
ステップＳＴ５０において、メモリコントローラ１００は、ステップＳＴ４０において算出されたシフト量Δをメモリ１２０の履歴テーブル内における対応する領域に保持することにより、履歴テーブルを更新する。
【０２１９】
以上により、一連の処理が終了する。
【０２２０】
４．６  上位ページ読出し処理に基づくシフト量算出処理
図２５は、第４実施形態に係るメモリシステムにおける、上位ページ読出し処理に基づくシフト量算出処理を説明するための模式図である。図２５では、シフト量算出処理のうち、評価指標算出対象のカウント値が選択されるまでの処理が示される。
【０２２１】
図２５に示すように、誤り訂正前上位読出しデータＳＲｔ＿Ｕは、セルユニットＣＵ内のメモリセルトランジスタＭＴを２通りに分類する。すなわち、誤り訂正前上位読出しデータＳＲｔ＿Ｕは、閾値電圧が電圧ＶＣ未満、又は電圧ＶＧ以上の場合にデータ“１”となり、該当するメモリセルトランジスタＭＴは“Ｅｒ”状態〜“Ｂ”状態、又は“Ｇ”状態の閾値分布に属しているとみなされる。また、誤り訂正前上位読出しデータＳＲｔ＿Ｕは、閾値電圧が電圧ＶＣ以上電圧ＶＧ未満の場合にデータ“０”となり、該当するメモリセルトランジスタＭＴは“Ｃ”状態〜“Ｆ”状態の閾値分布に属しているとみなされる。
【０２２２】
シングルステート読出しデータＳＳＲｔ＿ＥＲは、閾値電圧がＶＥ未満の場合にデータ“１”となり、該当するメモリセルトランジスタＭＴは“Ｅｒ”状態〜“Ｄ”状態の閾値分布に属しているとみなされる。また、シングルステート読出しデータＳＳＲｔ＿ＥＲは、閾値電圧がＶＥ以上の場合にデータ“０”となり、“Ｅ”状態〜“Ｇ”状態の閾値分布に属しているとみなされる。
【０２２３】
このため、誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｕ１は、“Ｅｒ”状態〜“Ｄ”状態の閾値分布に属しているとみなされたメモリセルトランジスタＭＴを、２通りに（閾値電圧が電圧ＶＣ未満の場合にはデータ“１”に、電圧ＶＣ以上の場合にはデータ“０”に）分類する。すなわち、誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｕ１がデータ“１”となるメモリセルトランジスタＭＴは“Ｅｒ”状態〜“Ｂ”状態の閾値分布に属しているとみなされ、データ“０”となるメモリセルトランジスタＭＴは“Ｃ”状態又は“Ｄ”状態の閾値分布に属しているとみなされる。また、誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｕ２は、“Ｅ”状態〜“Ｇ”状態の閾値分布に属しているとみなされたメモリセルトランジスタＭＴを、２通りに（閾値電圧が電圧ＶＧ未満の場合にはデータ“０”に、電圧ＶＧ以上の場合にはデータ“１”に）分類する。すなわち、誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｕ２がデータ“０”となるメモリセルトランジスタＭＴは“Ｅ”状態又は“Ｆ”状態の閾値分布に属しているとみなされ、データ“１”となるメモリセルトランジスタＭＴは“Ｇ”状態の閾値分布に属しているとみなされる。
【０２２４】
一方、誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｕ１及びＳＥＰ＿ＥＸＰｔ＿Ｕ２はそれぞれ、誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｕ１及びＳＥＰ＿ＳＲｔ＿Ｕ２による分類に依らず、メモリセルトランジスタＭＴを２通りに分類する。すなわち、誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｕ１及びＳＥＰ＿ＥＸＰｔ＿Ｕ２がデータ“１”となるメモリセルトランジスタＭＴは、“Ｅｒ”状態〜“Ｂ”状態、又は“Ｇ”状態の閾値分布に属していることが期待される。誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｕ１及びＳＥＰ＿ＥＸＰｔ＿Ｕ２がデータ“０”となるメモリセルトランジスタＭＴは、“Ｃ”状態〜“Ｆ”状態の閾値分布に属していることが期待される。
【０２２５】
なお、上述の通り、誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｕ１は“Ｅｒ”状態〜“Ｄ”状態の閾値分布に、誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｕ２は“Ｅ”状態〜“Ｇ”状態の閾値分布に、属しているとみなされたメモリセルトランジスタＭＴの集合である。このため、誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｕ１がデータ“１”となるメモリセルトランジスタＭＴは“Ｅｒ”状態〜“Ｂ”状態の閾値分布に、データ“０”となるメモリセルトランジスタＭＴは、“Ｃ”状態又は“Ｄ”状態の閾値分布に、それぞれ属していることが期待されるとみなすことができる。また、誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｕ２がデータ“１”となるメモリセルトランジスタＭＴは“Ｇ”状態の閾値分布に、データ“０”となるメモリセルトランジスタＭＴは、“Ｅ”状態又は“Ｆ”状態の閾値分布に、それぞれ属していることが期待されるとみなすことができる。
【０２２６】
このため、誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｕ１及び誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｕ１が取り得る値の組合せＣ３＿Ｕ１＝（ＳＥＰ＿ＳＲｔ＿Ｕ１、ＳＥＰ＿ＥＸＰｔ＿Ｕ１）は、２×２＝４通り存在する。同様に、誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｕ２及び誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｕ２が取り得る値の組合せＣ３＿Ｕ２＝（ＳＥＰ＿ＳＲｔ＿Ｕ２、ＳＥＰ＿ＥＸＰｔ＿Ｕ２）は、２×２＝４通り存在する。ビットカウンタ１８２は、上記したような各々が４通りの組合せＣ３＿Ｕ１及びＣ３＿Ｕ２毎（すなわち、８通りの組合せ毎）にビット数をカウントする。
【０２２７】
図２５の例では、ビットセレクタ１８３は、４通りの組合せＣ３＿Ｕ１のうち、組合せＣ３＿Ｕ１＝（１、０）及び（０、１）の２通りを含む１つの組に着目する。組合せＣ３＿Ｕ１＝（１、０）の場合は、“Ｃ”状態又は“Ｄ”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｅｒ”状態〜“Ｂ”状態のデータが誤って読み出されたことを示す場合である。組合せＣ３＿Ｕ１＝（０、１）の場合は、“Ｅｒ”状態〜“Ｂ”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｃ”状態又は“Ｄ”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せＣ３＿Ｕ１＝（１、０）の場合は、「Ｃ，Ｄ→Ｅｒ〜Ｂ誤読出しケース」を含み、組合せＣ３＿Ｕ１＝（０、１）の場合は、「Ｅｒ〜Ｂ→Ｃ，Ｄ誤読出しケース」を含む。
【０２２８】
「Ｃ，Ｄ→Ｅｒ〜Ｂ誤読出しケース」のうち、「Ｃ→Ｂ誤読出しケース」の数は、「Ｄ→Ｅｒ〜Ｂ誤読出しケース」及び「Ｃ→Ｅｒ，Ａ誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せＣ３＿Ｕ１＝（１、０）に対応するカウント値は、「Ｃ→Ｂ誤読出しケース」に実質的に等しいとみなし得る。同様に、「Ｅｒ〜Ｂ→Ｃ，Ｄ誤読出しケース」のうち、「Ｂ→Ｃ誤読出しケース」の数は、「Ｅｒ，Ａ→Ｃ，Ｄ誤読出しケース」及び「Ｂ→Ｄ誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せＣ３＿Ｕ１＝（０、１）に対応するカウント値は、「Ｂ→Ｃ誤読出しケース」に実質的に等しいとみなし得る。
【０２２９】
同様に、ビットセレクタ１８３は、４通りの組合せＣ３＿Ｕ２のうち、組合せＣ３＿Ｕ２＝（０、１）及び（１、０）の２通りを含む１つの組に着目する。組合せＣ３＿Ｕ２＝（０、１）の場合は、“Ｇ”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｅ”状態又は“Ｆ”状態のデータが誤って読み出されたことを示す場合である。組合せＣ３＿Ｕ２＝（１、０）の場合は、“Ｅ”状態又は“Ｆ”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｇ”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せＣ３＿Ｕ２＝（０、１）の場合は、「Ｇ→Ｅ，Ｆ誤読出しケース」を含み、組合せＣ３＿Ｕ２＝（１、０）の場合は、「Ｅ，Ｆ→Ｇ誤読出しケース」を含む。
【０２３０】
「Ｇ→Ｅ，Ｆ誤読出しケース」のうち、「Ｇ→Ｆ誤読出しケース」の数は、「Ｇ→Ｅ誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せＣ３＿Ｕ２＝（０、１）に対応するカウント値は、「Ｇ→Ｆ誤読出しケース」に実質的に等しいとみなし得る。同様に、「Ｅ，Ｆ→Ｇ誤読出しケース」のうち、「Ｆ→Ｇ誤読出しケース」の数は、「Ｅ→Ｇ誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せＣ３＿Ｕ２＝（１、０）に対応するカウント値は、「Ｆ→Ｇ誤読出しケース」に実質的に等しいとみなし得る。
【０２３１】
上記した近似を行うことにより、ビットセレクタ１８３は、電圧ＶＣのシフト量Δを算出する場合、「Ｃ→Ｂ誤読出しケース」及び「Ｂ→Ｃ誤読出しケース」にそれぞれ実質的に対応する組合せＣ３＿Ｕ１＝（１、０）及び（０、１）のカウント値を１つの組として選択する。また、ビットセレクタ１８３は、電圧ＶＧのシフト量Δを算出する場合、「Ｇ→Ｆ誤読出しケース」及び「Ｆ→Ｇ誤読出しケース」にそれぞれ実質的に対応する組合せＣ３＿Ｕ２＝（０、１）及び（１、０）のカウント値を１つの組として選択する。
【０２３２】
以上のように動作することにより、ビットセレクタ１８３は、シフト量算出に用いる２通りのカウント値を含む組を、読出し動作ＣＲ及びＧＲについて選択することができる。
【０２３３】
４．７  シフト量算出処理を伴う中位ページ読出し処理
次に、３ページのうち中位ページをランダムリード処理によって読み出す場合にシフト量算出処理を実行する際の動作について図２６に示すフローチャートを用いて説明する。図２６は、図２２に対応し、ステップＳＴ２２に代えて、ステップＳＴ２２Ｂが実行され、ステップＳＴ３５〜ＳＴ３７に代えてステップＳＴ３５Ｂ〜ＳＴ３７Ｂが実行される。
【０２３４】
図２６に示すように、ステップＳＴ１０において、メモリコントローラ１００は、メモリ１２０内の履歴テーブルを参照し、読出し対象のページに対応する読出し動作（図２６の場合では、読出し動作ＢＲ、ＤＲ、及びＦＲ）毎のシフト量Δを把握する。
【０２３５】
ステップＳＴ２２Ｂにおいて、メモリコントローラ１００は、ステップＳＴ１０において把握したシフト量Δに基づいてシフトリードコマンドを発行する。これにより、チップＣｈｉｐは、誤り訂正前中位読出しデータＳＲｔ＿Ｍを読み出し、メモリコントローラ１００に出力する。誤り訂正前中位読出しデータＳＲｔ＿Ｍは、メモリコントローラ１００内において、ＥＣＣ回路１６０に転送されると共に、読出し電圧補正用バッファメモリ１８１に保持される。
【０２３６】
ステップＳＴ３０において、ＥＣＣ回路１６０は、誤り訂正前中位読出しデータＳＲｔ＿Ｍに対して誤り訂正処理を実行する。ＥＣＣ回路１６０による誤り訂正処理が成功した場合（ステップＳＴ３０；ｙｅｓ）、ＥＣＣ回路１６０は、誤り訂正後中位読出しデータＥＸＰｔ＿Ｍを読出し電圧補正用バッファメモリ１８１に保持させた後、処理はステップＳＴ３５Ｂに進む。一方、ＥＣＣ回路１６０による誤り訂正処理が失敗した場合（ステップＳＴ３０；ｎｏ）、処理はステップＳＴ６０に進む。なお、ステップＳＴ６０〜ＳＴ８０の処理は、図２２の場合と同等であるため、その説明を省略する。
【０２３７】
ステップＳＴ３５Ｂにおいて、メモリコントローラ１００は、電圧ＶＣ及びＶＥを読出し電圧に用いたシングルステートリードコマンドを発行する。これにより、チップＣｈｉｐは、シングルステート読出しデータＳＳＲｔ＿ＣＲ及びＳＳＲｔ＿ＥＲを読み出し、メモリコントローラ１００に出力する。シングルステート読出しデータＳＳＲｔ＿ＣＲ及びＳＳＲｔ＿ＥＲは、メモリコントローラ１００内において、読出し電圧補正用バッファメモリ１８１に保持される。
【０２３８】
ステップＳＴ３６Ｂにおいて、分離データ生成回路１８６は、読出し電圧補正用バッファメモリ１８１から読み出した誤り訂正前中位読出しデータＳＲｔ＿Ｍ及びシングルステート読出しデータＳＳＲｔ＿ＣＲ及びＳＳＲｔ＿ＥＲに基づき、誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｍ１、ＳＥＰ＿ＳＲｔ＿Ｍ２、及びＳＥＰ＿ＳＲｔ＿Ｍ３を生成する。具体的には、分離データ生成回路１８６は、誤り訂正前中位読出しデータＳＲｔ＿Ｍから、シングルステート読出しデータＳＳＲｔ＿ＣＲのデータが“１”に対応するビットを誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｍ１として抽出する。また、分離データ生成回路１８６は、誤り訂正前中位読出しデータＳＲｔ＿Ｍから、シングルステート読出しデータＳＳＲｔ＿ＣＲ及びＳＳＲｔ＿ＥＲのデータがそれぞれ“０”及び“１”に対応するビットを誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｍ２として抽出する。また、分離データ生成回路１８６は、誤り訂正前中位読出しデータＳＲｔ＿Ｍから、シングルステート読出しデータＳＳＲｔ＿ＥＲのデータが“０”に対応するビットを誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｍ３として抽出する。抽出された誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｍ１、ＳＥＰ＿ＳＲｔ＿Ｍ２、及びＳＥＰ＿ＳＲｔ＿Ｍ３は、ビットカウンタ１８２に送出される。
【０２３９】
ステップＳＴ３７Ｂにおいて、分離データ生成回路１８６は、読出し電圧補正用バッファメモリ１８１から読み出した誤り訂正後中位読出しデータＥＸＰｔ＿Ｍ及びシングルステート読出しデータＳＳＲｔ＿ＣＲ及びＳＳＲｔ＿ＥＲに基づき、誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｍ１、ＳＥＰ＿ＥＸＰｔ＿Ｍ２、及びＳＥＰ＿ＥＸＰｔ＿Ｍ３を生成する。具体的には、分離データ生成回路１８６は、誤り訂正後中位読出しデータＥＸＰｔ＿Ｍから、シングルステート読出しデータＳＳＲｔ＿ＣＲのデータが“１”に対応するビットを誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｍ１として抽出する。また、分離データ生成回路１８６は、誤り訂正後中位読出しデータＥＸＰｔ＿Ｍから、シングルステート読出しデータＳＳＲｔ＿ＣＲ及びＳＳＲｔ＿ＥＲのデータがそれぞれ“０”及び“１”に対応するビットを誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｍ２として抽出する。また、分離データ生成回路１８６は、誤り訂正後中位読出しデータＥＸＰｔ＿Ｍから、シングルステート読出しデータＳＳＲｔ＿ＥＲのデータが“０”に対応するビットを誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｍ３として抽出する。抽出された誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｍ１〜ＳＥＰ＿ＥＸＰｔ＿Ｍ３は、ビットカウンタ１８２に送出される。
【０２４０】
ステップＳＴ４０において、読出し電圧補正回路１８０は、誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｍ１〜ＳＥＰ＿ＳＲｔ＿Ｍ３、及び誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｍ１〜ＳＥＰ＿ＥＸＰｔ＿Ｍ３に基づいて、シフト量算出処理を実行する。シフト量算出処理の詳細は、後述する。
【０２４１】
ステップＳＴ５０において、メモリコントローラ１００は、ステップＳＴ４０において算出されたシフト量Δをメモリ１２０の履歴テーブル内における対応する領域に保持することにより、履歴テーブルを更新する。
【０２４２】
以上により、読出し処理が終了する。
【０２４３】
４．８  中位ページ読出し処理に基づくシフト量算出処理
図２７及び図２８は、第４実施形態に係るメモリシステムにおける、中位ページ読出し処理に基づくシフト量算出処理を説明するための模式図である。図２７では、シフトリード処理及びシングルステートリード処理によって読み出されるデータが示され、図２８では、シフト量算出処理のうち、評価指標算出対象のカウント値が選択されるまでの処理が示される。
【０２４４】
図２７に示すように、誤り訂正前中位読出しデータＳＲｔ＿Ｍは、閾値電圧に応じて、セルユニットＣＵ内のメモリセルトランジスタＭＴを２通りに分類する。すなわち、誤り訂正前中位読出しデータＳＲｔ＿Ｍは、閾値電圧が電圧ＶＢ未満又は電圧ＶＤ以上電圧ＶＦ未満の場合にデータ“１”となり、該当するメモリセルトランジスタＭＴは“Ｅｒ”状態、“Ａ”状態、“Ｄ”状態、又は“Ｅ”状態の閾値分布に属しているとみなされる。誤り訂正前中位読出しデータＳＲｔ＿Ｍは、閾値電圧が電圧ＶＢ以上電圧ＶＤ未満、又は電圧ＶＦ以上の場合にデータ“０”となり、該当するメモリセルトランジスタＭＴは“Ｂ”状態、“Ｃ”状態、“Ｆ”状態、又は“Ｇ”状態の閾値分布に属しているとみなされる。
【０２４５】
シングルステート読出しデータＳＳＲｔ＿ＣＲ及びＳＳＲｔ＿ＥＲについてはそれぞれ、下位ページ読出しの場合、及び上位ページ読出しの場合と同等である。
【０２４６】
このため、図２８に示すように、誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｍ１は、“Ｅｒ”状態〜“Ｂ”状態の閾値分布に属しているとみなされたメモリセルトランジスタＭＴを、２通りに（閾値電圧が電圧ＶＢ未満の場合にはデータ“１”に、電圧ＶＢ以上の場合にはデータ“０”に）分類する。すなわち、誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｍ１がデータ“１”となるメモリセルトランジスタＭＴは“Ｅｒ”状態又は“Ａ”状態の閾値分布に属しているとみなされ、データ“０”となるメモリセルトランジスタＭＴは“Ｂ”状態の閾値分布に属しているとみなされる。また、誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｍ２は、“Ｃ”状態〜“Ｄ”状態の閾値分布に属しているとみなされたメモリセルトランジスタＭＴを、２通りに（閾値電圧が電圧ＶＤ未満の場合にはデータ“０”に、電圧ＶＤ以上の場合にはデータ“１”に）分類する。すなわち、誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｍ２がデータ“０”となるメモリセルトランジスタＭＴは“Ｃ”状態の閾値分布に属しているとみなされ、データ“１”となるメモリセルトランジスタＭＴは“Ｄ”状態の閾値分布に属しているとみなされる。また、誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｍ３は、“Ｅ”状態〜“Ｇ”状態の閾値分布に属しているとみなされたメモリセルトランジスタＭＴを、２通りに（閾値電圧が電圧ＶＦ未満の場合にはデータ“１”に、電圧ＶＦ以上の場合にはデータ“０”に）分類する。すなわち、誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｍ３がデータ“１”となるメモリセルトランジスタＭＴは“Ｅ”状態の閾値分布に属しているとみなされ、データ“０”となるメモリセルトランジスタＭＴは“Ｆ”状態又は“Ｇ”状態の閾値分布に属しているとみなされる。
【０２４７】
一方、誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｍ１〜ＳＥＰ＿ＥＸＰｔ＿Ｍ３はそれぞれ、誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｍ１〜ＳＥＰ＿ＳＲｔ＿Ｍ３による分類に依らず、メモリセルトランジスタＭＴを２通りに分類する。すなわち、誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｍ１〜ＳＥＰ＿ＥＸＰｔ＿Ｍ３がデータ“１”となるメモリセルトランジスタＭＴは、“Ｅｒ”状態、“Ａ”状態、“Ｄ”状態、又は“Ｅ”状態の閾値分布に属していることが期待される。誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｍ１〜ＳＥＰ＿ＥＸＰｔ＿Ｍ３がデータ“０”となるメモリセルトランジスタＭＴは、“Ｂ”状態、“Ｃ”状態、“Ｆ”状態、又は“Ｇ”状態の閾値分布に属していることが期待される。
【０２４８】
なお、上述の通り、誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｍ１は“Ｅｒ”状態〜“Ｂ”状態の閾値分布に、誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｍ２は“Ｃ”状態又は“Ｄ”状態の閾値分布に、誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｍ３は“Ｅ”状態〜“Ｇ”状態の閾値分布に、属しているとみなされたメモリセルトランジスタＭＴの集合である。このため、誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｍ１がデータ“１”となるメモリセルトランジスタＭＴは“Ｅｒ”状態又は“Ａ”状態の閾値分布に、データ“０”となるメモリセルトランジスタＭＴは、“Ｂ”状態の閾値分布に、それぞれ属していることが期待されるとみなすことができる。また、誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｍ２がデータ“１”となるメモリセルトランジスタＭＴは“Ｄ”状態の閾値分布に、データ“０”となるメモリセルトランジスタＭＴは、“Ｃ”状態の閾値分布に、それぞれ属していることが期待されるとみなすことができる。また、誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｍ３がデータ“１”となるメモリセルトランジスタＭＴは“Ｅ”状態の閾値分布に、データ“０”となるメモリセルトランジスタＭＴは、“Ｆ”状態又は“Ｇ”状態の閾値分布に、それぞれ属していることが期待されるとみなすことができる。
【０２４９】
このため、誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｍ１及び誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｍ１が取り得る値の組合せＣ３＿Ｍ１＝（ＳＥＰ＿ＳＲｔ＿Ｍ１、ＳＥＰ＿ＥＸＰｔ＿Ｍ１）は、２×２＝４通り存在する。同様に、誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｍ２及び誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｍ２が取り得る値の組合せＣ３＿Ｍ２＝（ＳＥＰ＿ＳＲｔ＿Ｍ２、ＳＥＰ＿ＥＸＰｔ＿Ｍ２）は、２×２＝４通り存在する。誤り訂正前分離データＳＥＰ＿ＳＲｔ＿Ｍ３及び誤り訂正後分離データＳＥＰ＿ＥＸＰｔ＿Ｍ３が取り得る値の組合せＣ３＿Ｍ３＝（ＳＥＰ＿ＳＲｔ＿Ｍ３、ＳＥＰ＿ＥＸＰｔ＿Ｍ３）は、２×２＝４通り存在する。ビットカウンタ１８２は、上記したような各々が４通りの組合せＣ３＿Ｍ１、Ｃ３＿Ｍ２、及びＣ３＿Ｍ３毎（すなわち、１２通りの組合せ毎）にビット数をカウントする。
【０２５０】
図２８の例では、ビットセレクタ１８３は、４通りの組合せＣ３＿Ｍ１のうち、組合せＣ３＿Ｍ１＝（１、０）及び（０、１）の２通りを含む１つの組に着目する。組合せＣ３＿Ｍ１＝（１、０）の場合は、“Ｂ”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｅｒ”状態又は“Ａ”状態のデータが誤って読み出されたことを示す場合である。組合せＣ３＿Ｍ１＝（０、１）の場合は、“Ｅｒ”状態又は“Ａ”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｂ”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せＣ３＿Ｍ１＝（１、０）の場合は、「Ｂ→Ｅｒ，Ａ誤読出しケース」を含み、組合せＣ３＿Ｍ１＝（０、１）の場合は、「Ｅｒ，Ａ→Ｂ誤読出しケース」を含む。
【０２５１】
「Ｂ→Ｅｒ，Ａ誤読出しケース」のうち、「Ｂ→Ａ誤読出しケース」の数は、「Ｂ→Ｅｒ誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せＣ３＿Ｍ１＝（１、０）に対応するカウント値は、「Ｂ→Ａ誤読出しケース」に実質的に等しいとみなし得る。同様に、「Ｅｒ，Ａ→Ｂ誤読出しケース」のうち、「Ａ→Ｂ誤読出しケース」の数は、「Ｅｒ→Ｂ誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せＣ３＿Ｍ１＝（０、１）に対応するカウント値は、「Ａ→Ｂ誤読出しケース」に実質的に等しいとみなし得る。
【０２５２】
同様に、ビットセレクタ１８３は、４通りの組合せＣ３＿Ｍ２のうち、組合せＣ３＿Ｍ２＝（０、１）及び（１、０）の２通りを含む１つの組に着目する。組合せＣ３＿Ｍ２＝（０、１）の場合は、 “Ｄ”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｃ”状態のデータが誤って読み出されたことを示す場合である。組合せＣ３＿Ｍ２＝（１、０）の場合は、 “Ｃ”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｄ”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せＣ３＿Ｍ２＝（０、１）に対応するカウント値は、「Ｄ→Ｃ誤読出しケース」に等しくなり、組合せＣ３＿Ｍ２＝（１、０）に対応するカウント値は、「Ｃ→Ｄ誤読出しケース」に等しくなる。
【０２５３】
同様に、ビットセレクタ１８３は、４通りの組合せＣ３＿Ｍ３のうち、組合せＣ３＿Ｍ３＝（１、０）及び（０、１）の２通りを含む１つの組に着目する。組合せＣ３＿Ｍ３＝（１、０）の場合は、“Ｆ”状態、又は“Ｇ”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｅ”状態のデータが誤って読み出されたことを示す場合である。組合せＣ３＿Ｍ３＝（０、１）の場合は、 “Ｅ”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｆ”状態又は“Ｇ”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せＣ３＿Ｍ３＝（１、０）の場合は、「Ｆ，Ｇ→Ｅ誤読出しケース」を含み、組合せＣ３＿Ｍ３＝（０、１）の場合は、「Ｅ→Ｆ，Ｇ誤読出しケース」を含む。
【０２５４】
「Ｆ，Ｇ→Ｅ誤読出しケース」のうち、「Ｆ→Ｅ誤読出しケース」の数は、「Ｇ→Ｅ誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せＣ３＿Ｍ３＝（１、０）に対応するカウント値は、「Ｆ→Ｅ誤読出しケース」に実質的に等しいとみなし得る。同様に、「Ｅ→Ｆ，Ｇ誤読出しケース」のうち、「Ｅ→Ｆ誤読出しケース」の数は、「Ｅ→Ｇ誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せＣ３＿Ｍ３＝（０、１）に対応するカウント値は、「Ｅ→Ｆ誤読出しケース」に実質的に等しいとみなし得る。
【０２５５】
上記した近似を行うことにより、ビットセレクタ１８３は、電圧ＶＢのシフト量Δを算出する場合、「Ｂ→Ａ誤読出しケース」及び「Ａ→Ｂ誤読出しケース」にそれぞれ実質的に対応する組合せＣ３＿Ｍ１＝（１、０）及び（０、１）のカウント値を１つの組として選択する。また、ビットセレクタ１８３は、電圧ＶＤのシフト量Δを算出する場合、「Ｄ→Ｃ誤読出しケース」及び「Ｃ→Ｄ誤読出しケース」にそれぞれ実質的に対応する組合せＣ３＿Ｍ２＝（０、１）及び（１、０）のカウント値を１つの組として選択する。また、ビットセレクタ１８３は、電圧ＶＦのシフト量Δを算出する場合、「Ｆ→Ｅ誤読出しケース」及び「Ｅ→Ｆ誤読出しケース」にそれぞれ実質的に対応する組合せＣ３＿Ｍ３＝（１、０）及びＣ３＿Ｍ３＝（０、１）のカウント値を１つの組として選択する。
【０２５６】
以上のように動作することにより、ビットセレクタ１８３は、シフト量算出に用いる２通りのカウント値を含む組を、読出し動作ＢＲ、ＤＲ、及びＦＲについて選択することができる。
【０２５７】
４．９  本実施形態に係る効果
第４実施形態によれば、メモリコントローラ１００は、メモリセルトランジスタＭＴに３ビットデータを保持可能な場合でも、ランダムリード処理に伴ってシングルステート読出しデータを読み出すことで、誤り訂正処理を実行することができる。より具体的には、ランダムリード処理が下位ページ又は上位ページのように２種類の読出し電圧を用いたシフトリード処理である場合、分離データ生成回路１８６は、１種類のシングルステート読出しデータを用いて誤り訂正前後の読出しデータをそれぞれ２つに分離する。また、ランダムリード処理が中位ページのように３種類の読出し電圧を用いたシフトリード処理である場合、分離データ生成回路１８６は、２種類のシングルステート読出しデータを用いて誤り訂正前後の読出しデータをそれぞれ３つに分離する。これにより、ビットカウンタ１８２は、誤り訂正前後の分離データの組毎にビット数をカウントし、ビットセレクタ１８３は、誤り訂正前後の分離データの組毎に評価指標算出対象の２つの組合せを選択することができる。このため、ランダムリード処理の場合に、更なるシフトリード処理を実行することなく、ランダムリード処理対象のページの読出しに用いる読出し電圧のシフト量を算出することができる。したがって、読出し電圧補正によるレイテンシの増加を抑制することができる。
【０２５８】
５．  第５実施形態
第４実施形態では、メモリセルトランジスタＭＴに３ビットのデータが保持可能な場合について説明したが、これに限られない。例えば、メモリセルトランジスタＭＴは４ビット以上のデータが保持可能であってもよい。
【０２５９】
以下の説明では、第４実施形態と同等の構成及び動作については説明を省略し、第４実施形態と異なる構成及び動作について主に説明する。
【０２６０】
５．１  メモリセルトランジスタの閾値分布について
図２９は、第５実施形態に係るメモリシステムの各メモリセルトランジスタＭＴの取り得るデータ、閾値電圧分布、及び読出し時に用いる電圧について示したダイアグラムである。第５実施形態では、１つのメモリセルトランジスタＭＴが例えば４ビットデータを保持可能な場合を想定する。この４ビットデータを、下位のビットからそれぞれ下位(Lower)ビット、中位（Middle）ビット、上位(Upper)ビット、トップ(Top)ビットと呼ぶことにする。そして、同一のセルユニットＣＵに属するメモリセルの保持する下位ビットの集合を下位ページと呼び、中位ビットの集合を中位ページと呼び、上位ビットの集合を上位ページと呼び、トップビットの集合をトップページと呼ぶ。
【０２６１】
上述の通り、メモリセルトランジスタＭＴは、４ビットデータを保持可能である。すなわち、メモリセルトランジスタＭＴは、閾値電圧に応じて１６個の状態を取ることが出来る。この１６個の状態を、閾値電圧の低いものから順に、“Ｓ０”状態、“Ｓ１”状態、“Ｓ２”状態、“Ｓ３”状態、“Ｓ４”状態、“Ｓ５”状態、“Ｓ６”状態、“Ｓ７”状態、“Ｓ８”状態、“Ｓ９”状態、“Ｓ１０”状態、“Ｓ１１”状態、“Ｓ１２”状態、“Ｓ１３”状態、“Ｓ１４”状態、及び“Ｓ１５”状態と呼ぶことにする。
【０２６２】
“Ｓ０”状態のメモリセルトランジスタＭＴの閾値電圧は、電圧ＶＳ１未満であり、データの消去状態に相当する。“Ｓｋ”状態のメモリセルトランジスタＭＴの閾値電圧は、電圧ＶＳ（ｋ）以上であり且つ電圧ＶＳ（ｋ＋１）（＞ＶＳ（ｋ））未満である（１≦ｋ≦１４）。“Ｓ１５”状態のメモリセルトランジスタＭＴの閾値電圧は、電圧ＶＳ１５以上であり且つ電圧ＶＲＥＡＤ未満である。このように分布する１６個の状態のうちで、“Ｓ１５”状態が、閾値電圧の最も高い状態である。
【０２６３】
上記閾値電圧分布は、前述の下位ビット、中位ビット、上位ビット、及びトップビットからなる４ビット（４ページ）データを書き込むことで実現される。すなわち、上記“Ｓ０”状態から“Ｓ１５”状態と、下位ビット、中位ビット、上位ビット、及びトップビットとの関係は、例えば、次の通りである。
“Ｓ０”状態：“１１１１”（“トップ／上位／中位／下位”の順で表記）  
“Ｓ１”状態：“１１１０”  
“Ｓ２”状態：“１０１０”  
“Ｓ３”状態：“１０００”  
“Ｓ４”状態：“１００１”  
“Ｓ５”状態：“０００１”  
“Ｓ６”状態：“００００”  
“Ｓ７”状態：“００１０”  
“Ｓ８”状態：“０１１０”  
“Ｓ９”状態：“０１００”  
“Ｓ１０”状態：“１１００”  
“Ｓ１１”状態：“１１０１”  
“Ｓ１２”状態：“０１０１”  
“Ｓ１３”状態：“０１１１”  
“Ｓ１４”状態：“００１１”  
“Ｓ１５”状態：“１０１１”  
このように、閾値電圧分布において隣り合う２つの状態に対応するデータ間では、４ビットのうちの１ビットのみが変化する。
【０２６４】
従って、下位ビットを読み出す際には、下位ビットの値（“０”ｏｒ“１”）が変化する境界に相当する電圧を用いれば良く、このことは中位ビット、上位ビット、及びトップビットでも同様である。
【０２６５】
すなわち、図２９に示すように、下位ページ読出しは、“Ｓ０”状態と“Ｓ１”状態とを区別する電圧ＶＳ１、“Ｓ３”状態と“Ｓ４”状態とを区別する電圧ＶＳ４、“Ｓ５”状態と“Ｓ６”状態とを区別する電圧ＶＳ６、及び“Ｓ１０”状態と“Ｓ１１”状態とを区別する電圧ＶＳ１１を読出し電圧として用いる。電圧ＶＳ１、ＶＳ４、ＶＳ６、及びＶＳ１１を用いた読出し動作を、それぞれ読出し動作１Ｒ、４Ｒ、６Ｒ、及び１１Ｒと呼ぶ。
【０２６６】
中位ページ読出しは、“Ｓ２”状態と“Ｓ３”状態とを区別する電圧ＶＳ３、“Ｓ６”状態と“Ｓ７”状態とを区別する電圧ＶＳ７、“Ｓ８”状態と“Ｓ９”状態とを区別する電圧ＶＳ９、及び“Ｓ１２”状態と“Ｓ１３”状態とを区別する電圧ＶＳ１３を読出し電圧として用いる。電圧ＶＳ３、ＶＳ７、ＶＳ９、及びＶＳ１３を用いた読出し動作を、それぞれ読出し動作３Ｒ、７Ｒ、９Ｒ、及び１３Ｒと呼ぶ。
【０２６７】
上位ページ読出しは、“Ｓ１”状態と“Ｓ２”状態とを区別する電圧ＶＳ２、“Ｓ７”状態と“Ｓ８”状態とを区別する電圧ＶＳ８、及び“Ｓ１３”状態と“Ｓ１４”状態とを区別する電圧ＶＳ１４を読出し電圧として用いる。電圧ＶＳ２、ＶＳ８、及びＶＳ１４を用いた読出し動作を、それぞれ読出し動作２Ｒ、８Ｒ、及び１４Ｒと呼ぶ。
【０２６８】
そして、トップページ読出しは、“Ｓ４”状態と“Ｓ５”状態とを区別する電圧ＶＳ５、“Ｓ９”状態と“Ｓ１０”状態とを区別する電圧ＶＳ１０、“Ｓ１１”状態と“Ｓ１２”状態とを区別する電圧ＶＳ１２、及び“Ｓ１４”状態と“Ｓ１５”状態とを区別する電圧ＶＳ１５を読出し電圧として用いる。電圧ＶＳ５、ＶＳ１０、ＶＳ１２、及びＶＳ１５を用いた読出し動作を、それぞれ読出し動作５Ｒ、１０Ｒ、１２Ｒ、及び１５Ｒと呼ぶ。
【０２６９】
５．２  シフト量算出処理を伴う下位ページ読出し処理
第５実施形態では、一例として、４ページのうち下位ページをランダムリード処理によって読み出す場合にシフト量算出処理を実行する際の動作について図３０に示すフローチャートを用いて説明する。図３０は、第４実施形態における図２２に対応し、ステップＳＴ２２に代えて、ステップＳＴ２２Ｃが実行され、ステップＳＴ３５〜ＳＴ３７に代えてステップＳＴ３５Ｃ〜ＳＴ３７Ｃが実行される。
【０２７０】
図３０に示すように、ステップＳＴ１０において、メモリコントローラ１００は、メモリ１２０内の履歴テーブルを参照し、読出し対象のページに対応する読出し動作（図３０の場合では、読出し動作１Ｒ、４Ｒ、６Ｒ、及び１１Ｒ）毎のシフト量Δを把握する。
【０２７１】
ステップＳＴ２２Ｃにおいて、メモリコントローラ１００は、ステップＳＴ１０において把握したシフト量Δに基づいてシフトリードコマンドを発行する。これにより、チップＣｈｉｐは、履歴テーブルのシフト量を適用した読出し電圧によって誤り訂正前下位読出しデータＳＲｑ＿Ｌを読み出し、メモリコントローラ１００に出力する。誤り訂正前下位読出しデータＳＲｑ＿Ｌは、メモリコントローラ１００内において、ＥＣＣ回路１６０に転送されると共に、読出し電圧補正用バッファメモリ１８１に保持される。
【０２７２】
ステップＳＴ３０において、ＥＣＣ回路１６０は、誤り訂正前下位読出しデータＳＲｑ＿Ｌに対して誤り訂正処理を実行する。ＥＣＣ回路１６０による誤り訂正処理が成功した場合（ステップＳＴ３０；ｙｅｓ）、ＥＣＣ回路１６０は、誤り訂正後下位読出しデータＥＸＰｑ＿Ｌを読出し電圧補正用バッファメモリ１８１に保持させた後、処理はステップＳＴ３５Ｃに進む。一方、ＥＣＣ回路１６０による誤り訂正処理が失敗した場合（ステップＳＴ３０；ｎｏ）、処理はステップＳＴ６０に進む。なお、ステップＳＴ６０〜ＳＴ８０の処理は、図２２の場合と同等であるため、その説明を省略する。
【０２７３】
ステップＳＴ３５Ｃにおいて、メモリコントローラ１００は、電圧ＶＳ２、ＶＳ５、及びＶＳ８を読出し電圧に用いたシングルステートリードコマンドを発行する。これにより、チップＣｈｉｐは、シングルステート読出しデータＳＳＲｑ＿２Ｒ、ＳＳＲｑ＿５Ｒ、及びＳＳＲｑ＿８Ｒを読み出し、メモリコントローラ１００に出力する。シングルステート読出しデータＳＳＲｑ＿２Ｒ、ＳＳＲｑ＿５Ｒ、及びＳＳＲｑ＿８Ｒは、メモリコントローラ１００内において、読出し電圧補正用バッファメモリ１８１に保持される。
【０２７４】
ステップＳＴ３６Ｃにおいて、分離データ生成回路１８６は、読出し電圧補正用バッファメモリ１８１から読み出した誤り訂正前下位読出しデータＳＲｑ＿Ｌ及びシングルステート読出しデータＳＳＲｑ＿２Ｒ、ＳＳＲｑ＿５Ｒ、及びＳＳＲｑ＿８Ｒに基づき、誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｌ１、ＳＥＰ＿ＳＲｑ＿Ｌ２、ＳＥＰ＿ＳＲｑ＿Ｌ３、及びＳＥＰ＿ＳＲｑ＿Ｌ４を生成する。具体的には、分離データ生成回路１８６は、誤り訂正前下位読出しデータＳＲｑ＿Ｌから、シングルステート読出しデータＳＳＲｑ＿２Ｒのデータが“１”に対応するビットを誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｌ１として抽出し、シングルステート読出しデータＳＳＲｑ＿２Ｒ及びＳＳＲｑ＿５Ｒのデータがそれぞれ“０”及び“１”に対応するビットを、誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｌ２として抽出する。分離データ生成回路１８６は、誤り訂正前下位読出しデータＳＲｑ＿Ｌから、シングルステート読出しデータＳＳＲｑ＿５Ｒ及びＳＳＲｑ＿８Ｒのデータがそれぞれ“０”及び“１”に対応するビットを誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｌ３として抽出し、シングルステート読出しデータＳＳＲｑ＿８Ｒのデータが“０”に対応するビットを、誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｌ４として抽出する。抽出された誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｌ１〜ＳＥＰ＿ＳＲｑ＿Ｌ４は、ビットカウンタ１８２に送出される。
【０２７５】
ステップＳＴ３７Ｃにおいて、分離データ生成回路１８６は、読出し電圧補正用バッファメモリ１８１から読み出した誤り訂正後下位読出しデータＥＸＰｑ＿Ｌ及びシングルステート読出しデータＳＳＲｑ＿２Ｒ、ＳＳＲｑ＿５Ｒ、及びＳＳＲｑ＿８Ｒに基づき、誤り訂正後分離データＳＥＰ＿ＥＸＰｑ＿Ｌ１、ＳＥＰ＿ＥＸＰｑ＿Ｌ２、ＳＥＰ＿ＥＸＰｑ＿Ｌ３、及びＳＥＰ＿ＥＸＰｑ＿Ｌ４を生成する。具体的には、分離データ生成回路１８６は、誤り訂正後下位読出しデータＥＸＰｑ＿Ｌから、シングルステート読出しデータＳＳＲｑ＿２Ｒのデータが“１”に対応するビットを誤り訂正後分離データＳＥＰ＿ＥＸＰｑ＿Ｌ１として抽出し、シングルステート読出しデータＳＳＲｑ＿２Ｒ及びＳＳＲｑ＿５Ｒのデータがそれぞれ“０”及び“１”に対応するビットを、誤り訂正後分離データＳＥＰ＿ＥＸＰｑ＿Ｌ２として抽出する。分離データ生成回路１８６は、誤り訂正後下位読出しデータＥＸＰｑ＿Ｌから、シングルステート読出しデータＳＳＲｑ＿５Ｒ及びＳＳＲｑ＿８Ｒのデータがそれぞれ“０”及び“１”に対応するビットを誤り訂正後分離データＳＥＰ＿ＥＸＰｑ＿Ｌ３として抽出し、シングルステート読出しデータＳＳＲｑ＿８Ｒのデータが“０”に対応するビットを、誤り訂正後分離データＳＥＰ＿ＥＸＰｑ＿Ｌ４として抽出する。抽出された誤り訂正後分離データＳＥＰ＿ＥＸＰｑ＿Ｌ１〜ＳＥＰ＿ＥＸＰｑ＿Ｌ４は、ビットカウンタ１８２に送出される。
【０２７６】
ステップＳＴ４０において、読出し電圧補正回路１８０は、誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｌ１〜ＳＥＰ＿ＳＲｑ＿Ｌ４、及び誤り訂正後分離データＳＥＰ＿ＥＸＰｑ＿Ｌ１〜ＳＥＰ＿ＥＸＰｑ＿Ｌ４に基づいて、シフト量算出処理を実行する。シフト量算出処理の詳細は、後述する。
【０２７７】
ステップＳＴ５０において、メモリコントローラ１００は、ステップＳＴ４０において算出されたシフト量Δをメモリ１２０の履歴テーブル内における対応する領域に保持することにより、履歴テーブルを更新する。
【０２７８】
以上により、読出し処理が終了する。
【０２７９】
５．３  下位ページ読出し処理に基づくシフト量算出処理
図３１、図３２、及び図３３は、第５実施形態に係るメモリシステムにおける、下位ページ読出し処理に基づくシフト量算出処理を説明するための模式図である。図３１では、シフトリード処理及びシングルステートリード処理によって読み出されるデータが示される。図３２及び図３３ではそれぞれ、シフト量算出処理のうち、読出し動作１Ｒ及び４Ｒについて、並びに読出し動作６Ｒ及び１１Ｒについて、の評価指標算出対象のカウント値が選択されるまでの処理が示される。
【０２８０】
図３１に示すように、誤り訂正前下位読出しデータＳＲｑ＿Ｌは、セルユニットＣＵ内のメモリセルトランジスタＭＴの閾値分布を２通りに分類する。すなわち、誤り訂正前下位読出しデータＳＲｑ＿Ｌは、閾値電圧が電圧ＶＳ１未満、電圧ＶＳ４以上電圧ＶＳ６未満、又は電圧ＶＳ１１以上の場合にデータ“１”となり、該当するメモリセルトランジスタＭＴは“Ｓ０”状態、“Ｓ４”状態、“Ｓ５”状態、又は“Ｓ１１”状態〜“Ｓ１５”状態の閾値分布に属しているとみなされる。また、誤り訂正前下位読出しデータＳＲｑ＿Ｌは、閾値電圧が電圧ＶＳ１以上電圧ＶＳ４未満、又は電圧ＶＳ６以上電圧ＶＳ１１未満の場合にデータ“０”となり、該当するメモリセルトランジスタＭＴは“Ｓ１”状態〜“Ｓ３”状態、又は“Ｓ６”状態〜“Ｓ１０”状態の閾値分布に属しているとみなされる。
【０２８１】
シングルステート読出しデータＳＳＲｑ＿２Ｒは、閾値電圧が電圧ＶＳ２未満の場合にデータ“１”となり、該当するメモリセルトランジスタＭＴは“Ｓ０”状態又は“Ｓ１”状態の閾値分布に属しているとみなされる。また、シングルステート読出しデータＳＳＲｑ＿２Ｒは、閾値電圧が電圧ＶＳ２以上の場合にデータ“０”となり、該当するメモリセルトランジスタＭＴは“Ｓ２”状態〜“Ｓ１５”状態の閾値分布に属しているとみなされる。
【０２８２】
シングルステート読出しデータＳＳＲｑ＿５Ｒは、閾値電圧が電圧ＶＳ５未満の場合にデータ“１”となり、該当するメモリセルトランジスタＭＴは“Ｓ０”状態〜“Ｓ４”状態の閾値分布に属しているとみなされる。また、シングルステート読出しデータＳＳＲｑ＿５Ｒは、閾値電圧が電圧ＶＳ５以上の場合にデータ“０”となり、該当するメモリセルトランジスタＭＴは“Ｓ５”状態〜“Ｓ１５”状態の閾値分布に属しているとみなされる。
【０２８３】
シングルステート読出しデータＳＳＲｑ＿８Ｒは、閾値電圧が電圧ＶＳ８未満の場合にデータ“１”となり、該当するメモリセルトランジスタＭＴは“Ｓ０”状態〜“Ｓ７”状態の閾値分布に属しているとみなされる。また、シングルステート読出しデータＳＳＲｑ＿８Ｒは、閾値電圧が電圧ＶＳ８以上の場合にデータ“０”となり、該当するメモリセルトランジスタＭＴは“Ｓ８”状態〜“Ｓ１５”状態の閾値分布に属しているとみなされる。
【０２８４】
このため、図３２に示すように、誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｌ１は、“Ｓ０”〜“Ｓ１”状態の閾値分布に属しているとみなされたメモリセルトランジスタＭＴを、２通りに（閾値電圧が電圧ＶＳ１未満の場合にはデータ“１”に、電圧ＶＳ１以上の場合にはデータ“０”に）分類する。すなわち、誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｌ１がデータ“１”となるメモリセルトランジスタＭＴは“Ｓ０”状態の閾値分布に属しているとみなされ、データ“０”となるメモリセルトランジスタＭＴは“Ｓ１”状態の閾値分布に属しているとみなされる。また、誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｌ２は、“Ｓ２”〜“Ｓ４”状態の閾値分布に属しているとみなされたメモリセルトランジスタＭＴを、２通りに（閾値電圧が電圧ＶＳ４未満の場合にはデータ“０”に、電圧ＶＳ４以上の場合にはデータ“１”に）分類する。すなわち、誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｌ２がデータ“０”となるメモリセルトランジスタＭＴは“Ｓ２”状態又は“Ｓ３”状態の閾値分布に属しているとみなされ、データ“１”となるメモリセルトランジスタＭＴは“Ｓ４”状態の閾値分布に属しているとみなされる。
【０２８５】
また、図３３に示すように、誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｌ３は、“Ｓ５”〜“Ｓ７”状態の閾値分布に属しているとみなされたメモリセルトランジスタＭＴを、２通りに（閾値電圧が電圧ＶＳ６未満の場合にはデータ“１”に、電圧ＶＳ６以上の場合にはデータ“０”に）分類する。すなわち、誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｌ３がデータ“１”となるメモリセルトランジスタＭＴは“Ｓ５”状態の閾値分布に属しているとみなされ、データ“０”となるメモリセルトランジスタＭＴは“Ｓ６”状態又は“Ｓ７”状態の閾値分布に属しているとみなされる。また、誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｌ４は、“Ｓ８”〜“Ｓ１５”状態の閾値分布に属しているとみなされたメモリセルトランジスタＭＴを、２通りに（閾値電圧が電圧ＶＳ１１未満の場合にはデータ“０”に、電圧ＶＳ１１以上の場合にはデータ“１”に）分類する。すなわち、誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｌ４がデータ“０”となるメモリセルトランジスタＭＴは“Ｓ８”状態〜“Ｓ１０”状態の閾値分布に属しているとみなされ、データ“１”となるメモリセルトランジスタＭＴは“Ｓ１１”状態〜“Ｓ１５”状態の閾値分布に属しているとみなされる。
【０２８６】
一方、図３２及び図３３に示すように、誤り訂正後分離データＳＥＰ＿ＥＸＰｑ＿Ｌ１〜ＳＥＰ＿ＥＸＰｑ＿Ｌ４はそれぞれ、誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｌ１〜ＳＥＰ＿ＳＲｑ＿Ｌ４による分類に依らず、メモリセルトランジスタＭＴを２通りに分類する。すなわち、誤り訂正後分離データＳＥＰ＿ＥＸＰｑ＿Ｌ１〜ＳＥＰ＿ＥＸＰｑ＿Ｌ４がデータ“１”となるメモリセルトランジスタＭＴは、“Ｓ０”状態、“Ｓ４”状態、“Ｓ５”状態、又は“Ｓ１１”状態〜“Ｓ１５”状態の閾値分布に属していることが期待される。誤り訂正後分離データＳＥＰ＿ＥＸＰｑ＿Ｌ１〜ＳＥＰ＿ＥＸＰｑ＿Ｌ４がデータ“０”となるメモリセルトランジスタＭＴは、“Ｓ１”状態〜“Ｓ３”状態、又は“Ｓ６”状態〜“Ｓ１０”状態の閾値分布に属していることが期待される。
【０２８７】
なお、上述の通り、誤り訂正後分離データＳＥＰ＿ＥＸＰｑ＿Ｌ１は“Ｓ０”状態又は“Ｓ１”状態の閾値分布に、誤り訂正後分離データＳＥＰ＿ＥＸＰｑ＿Ｌ２は“Ｓ２”状態〜“Ｓ４”状態の閾値分布に、誤り訂正後分離データＳＥＰ＿ＥＸＰｑ＿Ｌ３は“Ｓ５”状態〜“Ｓ７”状態の閾値分布に、誤り訂正後分離データＳＥＰ＿ＥＸＰｑ＿Ｌ４は“Ｓ８”状態〜“Ｓ１５”状態の閾値分布に、属しているとみなされたメモリセルトランジスタＭＴの集合である。このため、誤り訂正後分離データＳＥＰ＿ＥＸＰｑ＿Ｌ１がデータ“１”となるメモリセルトランジスタＭＴは“Ｓ０”状態の閾値分布に、データ“０”となるメモリセルトランジスタＭＴは、“Ｓ１”状態の閾値分布に、それぞれ属していることが期待されるとみなすことができる。また、誤り訂正後分離データＳＥＰ＿ＥＸＰｑ＿Ｌ２がデータ“１”となるメモリセルトランジスタＭＴは“Ｓ４”状態の閾値分布に、データ“０”となるメモリセルトランジスタＭＴは、“Ｓ２”状態又は“Ｓ３”状態の閾値分布に、それぞれ属していることが期待されるとみなすことができる。また、誤り訂正後分離データＳＥＰ＿ＥＸＰｑ＿Ｌ３がデータ“１”となるメモリセルトランジスタＭＴは“Ｓ５”状態の閾値分布に、データ“０”となるメモリセルトランジスタＭＴは、“Ｓ６”状態又は“Ｓ７”状態の閾値分布に、それぞれ属していることが期待されるとみなすことができる。また、誤り訂正後分離データＳＥＰ＿ＥＸＰｑ＿Ｌ４がデータ“１”となるメモリセルトランジスタＭＴは“Ｓ１１”状態〜“Ｓ１５”状態の閾値分布に、データ“０”となるメモリセルトランジスタＭＴは、“Ｓ８”状態〜“Ｓ１０”状態の閾値分布に、それぞれ属していることが期待されるとみなすことができる。
【０２８８】
このため、誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｌ１及び誤り訂正後分離データＳＥＰ＿ＥＸＰｑ＿Ｌ１が取り得る値の組合せＣ４＿Ｌ１＝（ＳＥＰ＿ＳＲｑ＿Ｌ１、ＳＥＰ＿ＥＸＰｑ＿Ｌ１）は、２×２＝４通り存在する。誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｌ２及び誤り訂正後分離データＳＥＰ＿ＥＸＰｑ＿Ｌ２が取り得る値の組合せＣ４＿Ｌ２＝（ＳＥＰ＿ＳＲｑ＿Ｌ２、ＳＥＰ＿ＥＸＰｑ＿Ｌ２）は、２×２＝４通り存在する。誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｌ３及び誤り訂正後分離データＳＥＰ＿ＥＸＰｑ＿Ｌ３が取り得る値の組合せＣ４＿Ｌ３＝（ＳＥＰ＿ＳＲｑ＿Ｌ３、ＳＥＰ＿ＥＸＰｑ＿Ｌ３）は、２×２＝４通り存在する。誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｌ４及び誤り訂正後分離データＳＥＰ＿ＥＸＰｑ＿Ｌ４が取り得る値の組合せＣ４＿Ｌ４＝（ＳＥＰ＿ＳＲｑ＿Ｌ４、ＳＥＰ＿ＥＸＰｑ＿Ｌ４）は、２×２＝４通り存在する。ビットカウンタ１８２は、上記したような各々が４通りの組合せＣ４＿Ｌ１〜Ｃ４＿Ｌ４毎（すなわち、１６通りの組合せ毎）にビット数をカウントする。
【０２８９】
図３２の例では、ビットセレクタ１８３は、４通りの組合せＣ４＿Ｌ１のうち、組合せＣ４＿Ｌ１＝（１、０）及び（０、１）の２通りを含む１つの組に着目する。組合せＣ４＿Ｌ１＝（１、０）の場合は、“Ｓ１”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｓ０”状態のデータが誤って読み出されたことを示す場合である。組合せＣ４＿Ｌ１＝（０、１）の場合は、“Ｓ０”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｓ１”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せＣ４＿Ｌ１＝（１、０）に対応するカウント値は、「Ｓ１→Ｓ０誤読出しケース」に等しくなり、組合せＣ４＿Ｌ１＝（０、１）に対応するカウント値は、「Ｓ０→Ｓ１誤読出しケース」に等しくなる。
【０２９０】
同様に、ビットセレクタ１８３は、４通りの組合せＣ４＿Ｌ２のうち、組合せＣ４＿Ｌ２＝（０、１）及び（１、０）の２通りを含む１つの組に着目する。組合せＣ４＿Ｌ２＝（０、１）の場合は “Ｓ４”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｓ２”状態又は“Ｓ３”状態のデータが誤って読み出されたことを示す場合である。組合せＣ４＿Ｌ２＝（１、０）の場合は、“Ｓ２”状態又は“Ｓ３”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｓ４”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せＣ４＿Ｌ２＝（０、１）の場合は、「Ｓ４→Ｓ２，Ｓ３誤読出しケース」を含み、組合せＣ４＿Ｌ２＝（１、０）の場合は、「Ｓ２，Ｓ３，→Ｓ４誤読出しケース」を含む。
【０２９１】
「Ｓ４→Ｓ２，Ｓ３誤読出しケース」のうち、「Ｓ４→Ｓ３誤読出しケース」の数は、「Ｓ４→Ｓ２誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せＣ４＿Ｌ２＝（０、１）に対応するカウント値は、「Ｓ４→Ｓ３誤読出しケース」に実質的に等しいとみなし得る。同様に、「Ｓ２，Ｓ３→Ｓ４誤読出しケース」のうち、「Ｓ３→Ｓ４誤読出しケース」の数は、「Ｓ２→Ｓ４誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せＣ４＿Ｌ２＝（１、０）に対応するカウント値は、「Ｓ３→Ｓ４誤読出しケース」に実質的に等しいとみなし得る。
【０２９２】
図３３の例では、ビットセレクタ１８３は、４通りの組合せＣ４＿Ｌ３のうち、組合せＣ４＿Ｌ３＝（１、０）及び（０、１）の２通りを含む１つの組に着目する。組合せＣ４＿Ｌ３＝（１、０）の場合は、“Ｓ６”状態又は“Ｓ７”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｓ５”状態のデータが誤って読み出されたことを示す場合である。組合せＣ４＿Ｌ３＝（０、１）の場合は、“Ｓ５”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｓ６”状態又は“Ｓ７”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せＣ４＿Ｌ３＝（１、０）の場合は、「Ｓ６，Ｓ７→Ｓ５誤読出しケース」を含み、組合せＣ４＿Ｌ３＝（０、１）の場合は、「Ｓ５→Ｓ６，Ｓ７誤読出しケース」を含む。
【０２９３】
「Ｓ６，Ｓ７→Ｓ５誤読出しケース」のうち、「Ｓ６→Ｓ５誤読出しケース」の数は、「Ｓ７→Ｓ５誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せＣ４＿Ｌ３＝（１、０）に対応するカウント値は、「Ｓ６→Ｓ５誤読出しケース」に実質的に等しいとみなし得る。同様に、「Ｓ５→Ｓ６，Ｓ７誤読出しケース」のうち、「Ｓ５→Ｓ６誤読出しケース」の数は、「Ｓ５→Ｓ７誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せＣ４＿Ｌ３＝（０、１）に対応するカウント値は、「Ｓ５→Ｓ６誤読出しケース」に実質的に等しいとみなし得る。
【０２９４】
同様に、ビットセレクタ１８３は、４通りの組合せＣ４＿Ｌ４のうち、組合せＣ４＿Ｌ４＝（０、１）及び（１、０）の２通りを含む１つの組に着目する。組合せＣ４＿Ｌ４＝（０、１）の場合は、“Ｓ１１”状態〜“Ｓ１５”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｓ８”状態〜“Ｓ１０”状態のデータが誤って読み出されたことを示す場合である。組合せＣ４＿Ｌ４＝（１、０）の場合は、“Ｓ８”状態〜“Ｓ１０”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｓ１１”〜“Ｓ１５”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せＣ４＿Ｌ４＝（０、１）の場合は、「Ｓ１１〜Ｓ１５→Ｓ８〜Ｓ１０誤読出しケース」を含み、組合せＣ４＿Ｌ４＝（１、０）の場合は、「Ｓ８〜Ｓ１０→Ｓ１１〜Ｓ１５誤読出しケース」を含む。
【０２９５】
「Ｓ１１〜Ｓ１５→Ｓ８〜Ｓ１０誤読出しケース」のうち、「Ｓ１１→Ｓ１０誤読出しケース」の数は、「Ｓ１２〜Ｓ１５→Ｓ８〜Ｓ１０誤読出しケース」及び「Ｓ１１→Ｓ８，Ｓ９誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せＣ４＿Ｌ４＝（０、１）に対応するカウント値は、「Ｓ１１→Ｓ１０誤読出しケース」に実質的に等しいとみなし得る。同様に、「Ｓ８〜Ｓ１０→Ｓ１１〜Ｓ１５誤読出しケース」のうち、「Ｓ１０→Ｓ１１誤読出しケース」の数は、「Ｓ８，Ｓ９→Ｓ１１〜Ｓ１５誤読出しケース」及び「Ｓ１０→Ｓ１２〜Ｓ１５誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せＣ４＿Ｌ４＝（１、０）に対応するカウント値は、「Ｓ１０→Ｓ１１誤読出しケース」に実質的に等しいとみなし得る。
【０２９６】
上記した近似を行うことにより、ビットセレクタ１８３は、電圧ＶＳ１のシフト量Δを算出する場合、「Ｓ１→Ｓ０誤読出しケース」及び「Ｓ０→Ｓ１誤読出しケース」にそれぞれ実質的に対応する組合せＣ４＿Ｌ１＝（１、０）及び（０、１）のカウント値を１つの組として選択する。ビットセレクタ１８３は、電圧ＶＳ４のシフト量Δを算出する場合、「Ｓ４→Ｓ３誤読出しケース」及び「Ｓ３→Ｓ４誤読出しケース」にそれぞれ実質的に対応する組合せＣ４＿Ｌ２＝（０、１）及び（１、０）のカウント値を１つの組として選択する。ビットセレクタ１８３は、電圧ＶＳ６のシフト量Δを算出する場合、「Ｓ６→Ｓ５誤読出しケース」及び「Ｓ５→Ｓ６誤読出しケース」にそれぞれ実質的に対応する組合せＣ４＿Ｌ３＝（１、０）及び（０、１）のカウント値を１つの組として選択する。ビットセレクタ１８３は、電圧ＶＳ１１のシフト量Δを算出する場合、「Ｓ１１→Ｓ１０誤読出しケース」及び「Ｓ１０→Ｓ１１誤読出しケース」にそれぞれ実質的に対応する組合せＣ４＿Ｌ４＝（０、１）及び（１、０）のカウント値を１つの組として選択する。
【０２９７】
以上のように動作することにより、ビットセレクタ１８３は、シフト量算出に用いる２通りのカウント値を含む組を、読出し動作１Ｒ、４Ｒ、６Ｒ及び１１Ｒについて選択することができる。
【０２９８】
５．４  本実施形態に係る効果
第５実施形態によれば、メモリコントローラ１００は、メモリセルトランジスタＭＴに４ビットデータを保持可能な場合でも、ランダムリード処理に伴ってシングルステート読出しデータを読み出すことで、誤り訂正処理を実行することができる。より具体的には、ランダムリード処理が下位ページのように４種類の読出し電圧を用いたシフトリード処理である場合、分離データ生成回路１８６は、３種類のシングルステート読出しデータを用いて誤り訂正前後の読出しデータをそれぞれ４つに分離する。これにより、ビットカウンタ１８２は、誤り訂正前後の分離データの組毎にビット数をカウントし、ビットセレクタ１８３は、誤り訂正前後の分離データの組毎に評価指標算出対象の２つの組合せを選択することができる。このため、ランダムリード処理の場合に、更なるシフトリード処理を実行することなく、ランダムリード処理対象のページの読出しに用いる読出し電圧のシフト量を算出することができる。したがって、読出し電圧補正によるレイテンシの増加を抑制することができる。
【０２９９】
なお、第４実施形態及び第５実施形態において説明したシフト量算出処理は、メモリセルトランジスタＭＴが任意のビット数を保持可能な場合に適用可能である。具体的には、１ページからのデータの読出し処理に際してｉ種類の読出し電圧を用いたシフトリード処理を実行する場合、当該読出しデータは、（ｉ−１）種類のシングルステート読出しデータによってｉ個の分離データに分離できる（ｉは自然数）。ビットカウンタ１８２は、分離データ毎にビット数をカウントし、ビットセレクタ１８３は、分離データ毎に評価指標算出対象の２つの組合せを選択する。これにより、１ページからのデータの読出し処理に用いる読出し電圧が４種類より多い場合においても、第５実施形態と同様に、読出し電圧補正によるレイテンシの増加を抑制することができる。
【０３００】
６．  第６実施形態
第５実施形態では、シフトリード処理が実行されたページに対応する読出し電圧のシフト量が算出される場合について説明したが、これに限られない。例えば、シフトリード処理が実行されたページに対応する読出し電圧のシフト量を算出した後、当該算出したシフト量に基づいて他のページに対応する読出し電圧のシフト量を推定してもよい。
【０３０１】
以下の説明では、第５実施形態と同等の構成及び動作については説明を省略し、第５実施形態と異なる構成及び動作について主に説明する。
【０３０２】
６．１  シフト量算出及び推定処理を伴う下位ページ及びトップページ読出し処理
第６実施形態では、一例として、４ページのうち下位ページ及びトップページをランダムリード処理によって読み出す場合にシフト量算出処理を実行する際の動作について図３４に示すフローチャートを用いて説明する。図３４は、第５実施形態における図３０に対応し、ステップＳＴ２２Ｃに代えて、ステップＳＴ２２Ｄが実行され、ステップＳＴ３５Ｃ〜ＳＴ３７Ｃに代えてステップＳＴ３５Ｄ〜ＳＴ３７Ｄが実行される。また、ステップＳＴ４０とステップＳＴ５０との間に更なるステップＳＴ４５が実行される。
【０３０３】
図３４に示すように、ステップＳＴ１０において、メモリコントローラ１００は、メモリ１２０内の履歴テーブルを参照し、読出し対象のページに対応する読出し動作毎のシフト量Δを把握する。図３４の例では、読出し対象のページに対応する読出し動作は、下位ページに対応する読出し動作１Ｒ、４Ｒ、６Ｒ、及び１１Ｒ、並びにトップページに対応する読出し動作５Ｒ、１０Ｒ、１２Ｒ、及び１５Ｒである。
【０３０４】
ステップＳＴ２２Ｄにおいて、メモリコントローラ１００は、ステップＳＴ１０において把握したシフト量Δに基づいてシフトリードコマンドを発行する。これにより、チップＣｈｉｐは、履歴テーブルのシフト量を適用した読出し電圧によって誤り訂正前下位読出しデータＳＲｑ＿Ｌ及び誤り訂正前トップ読出しデータＳＲｑ＿Ｔを読み出し、メモリコントローラ１００に出力する。誤り訂正前下位読出しデータＳＲｑ＿Ｌ及び誤り訂正前トップ読出しデータＳＲｑ＿Ｔは、メモリコントローラ１００内において、ＥＣＣ回路１６０に転送されると共に、読出し電圧補正用バッファメモリ１８１に保持される。
【０３０５】
ステップＳＴ３０において、ＥＣＣ回路１６０は、誤り訂正前下位読出しデータＳＲｑ＿Ｌ及び誤り訂正前トップ読出しデータＳＲｑ＿Ｔに対して誤り訂正処理を実行する。ＥＣＣ回路１６０による誤り訂正処理が成功した場合（ステップＳＴ３０；ｙｅｓ）、ＥＣＣ回路１６０は、誤り訂正後下位読出しデータＥＸＰｑ＿Ｌ及び誤り訂正後トップ読出しデータＥＸＰｑ＿Ｔを読出し電圧補正用バッファメモリ１８１に保持させた後、処理はステップＳＴ３５Ｄに進む。一方、ＥＣＣ回路１６０による誤り訂正処理が失敗した場合（ステップＳＴ３０；ｎｏ）、処理はステップＳＴ６０に進む。なお、ステップＳＴ６０〜ＳＴ８０の処理は、図３０の場合と同等であるため、その説明を省略する。
【０３０６】
ステップＳＴ３５Ｄにおいて、メモリコントローラ１００は、電圧ＶＳ３、ＶＳ８、及びＶＳ１４を読出し電圧に用いたシングルステートリードコマンドを発行する。これにより、チップＣｈｉｐは、シングルステート読出しデータＳＳＲｑ＿３Ｒ、ＳＳＲｑ＿８Ｒ、及びＳＳＲｑ＿１４Ｒを読み出し、メモリコントローラ１００に出力する。シングルステート読出しデータＳＳＲｑ＿３Ｒ、ＳＳＲｑ＿８Ｒ、及びＳＳＲｑ＿１４Ｒは、メモリコントローラ１００内において、読出し電圧補正用バッファメモリ１８１に保持される。
【０３０７】
ステップＳＴ３６Ｄにおいて、分離データ生成回路１８６は、読出し電圧補正用バッファメモリ１８１から読み出した誤り訂正前下位読出しデータＳＲｑ＿Ｌ、誤り訂正前トップ読出しデータＳＲｑ＿Ｔ、並びにシングルステート読出しデータＳＳＲｑ＿３Ｒ、ＳＳＲｑ＿８Ｒ、及びＳＳＲｑ＿１４Ｒに基づき、誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｌ１’、ＳＥＰ＿ＳＲｑ＿Ｔ１’、ＳＥＰ＿ＳＲｑ＿Ｌ２’、ＳＥＰ＿ＳＲｑ＿Ｔ２’、ＳＥＰ＿ＳＲｑ＿Ｌ３’、ＳＥＰ＿ＳＲｑ＿Ｔ３’、ＳＥＰ＿ＳＲｑ＿Ｌ４’、及びＳＥＰ＿ＳＲｑ＿Ｔ４’を生成する。具体的には、分離データ生成回路１８６は、誤り訂正前下位読出しデータＳＲｑ＿Ｌ及び誤り訂正前トップ読出しデータＳＲｑ＿Ｔから、シングルステート読出しデータＳＳＲｑ＿３Ｒのデータが“１”に対応するビットを、それぞれ誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｌ１’及びＳＥＰ＿ＳＲｑ＿Ｔ１’として抽出する。分離データ生成回路１８６は、誤り訂正前下位読出しデータＳＲｑ＿Ｌ及び誤り訂正前トップ読出しデータＳＲｑ＿Ｔから、シングルステート読出しデータＳＳＲｑ＿３Ｒのデータが“０”に対応し、かつシングルステート読出しデータＳＳＲｑ＿８Ｒのデータが“１”に対応するビットを、それぞれ誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｌ２’及びＳＥＰ＿ＳＲｑ＿Ｔ２’として抽出する。分離データ生成回路１８６は、誤り訂正前下位読出しデータＳＲｑ＿Ｌ及び誤り訂正前トップ読出しデータＳＲｑ＿Ｔから、シングルステート読出しデータＳＳＲｑ＿８Ｒのデータが“０”に対応し、かつシングルステート読出しデータＳＳＲｑ＿１４Ｒのデータが“１”に対応するビットを、それぞれ誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｌ３’及びＳＥＰ＿ＳＲｑ＿Ｔ３’として抽出する。分離データ生成回路１８６は、誤り訂正前下位読出しデータＳＲｑ＿Ｌ及び誤り訂正前トップ読出しデータＳＲｑ＿Ｔから、シングルステート読出しデータＳＳＲｑ＿１４Ｒのデータが“０”に対応するビットを、それぞれ誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｌ４’及びＳＥＰ＿ＳＲｑ＿Ｔ４’として抽出する。抽出された誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｌ１’〜ＳＥＰ＿ＳＲｑ＿Ｌ４’及びＳＥＰ＿ＳＲｑ＿Ｔ１’〜ＳＥＰ＿ＳＲｑ＿Ｔ４’は、ビットカウンタ１８２に送出される。
【０３０８】
ステップＳＴ３７Ｄにおいて、分離データ生成回路１８６は、読出し電圧補正用バッファメモリ１８１から読み出した誤り訂正後下位読出しデータＥＸＰｑ＿Ｌ、誤り訂正後トップ読出しデータＥＸＰｑ＿Ｔ、並びにシングルステート読出しデータＳＳＲｑ＿３Ｒ、ＳＳＲｑ＿８Ｒ、及びＳＳＲｑ＿１４Ｒに基づき、誤り訂正後分離データＳＥＰ＿ＥＸＰｑ＿Ｌ１’、ＳＥＰ＿ＥＸＰｑ＿Ｔ１’、ＳＥＰ＿ＥＸＰｑ＿Ｌ２’、ＳＥＰ＿ＥＸＰｑ＿Ｔ２’、ＳＥＰ＿ＥＸＰｑ＿Ｌ３’、ＳＥＰ＿ＥＸＰｑ＿Ｔ３’、ＳＥＰ＿ＥＸＰｑ＿Ｌ４’、及びＳＥＰ＿ＥＸＰｑ＿Ｔ４’を生成する。具体的には、分離データ生成回路１８６は、誤り訂正後下位読出しデータＥＸＰｑ＿Ｌ及び誤り訂正後トップ読出しデータＥＸＰｑ＿Ｔから、シングルステート読出しデータＳＳＲｑ＿３Ｒのデータが“１”に対応するビットを、それぞれ誤り訂正後分離データＳＥＰ＿ＥＸＰｑ＿Ｌ１’及びＳＥＰ＿ＥＸＰｑ＿Ｔ１’として抽出する。分離データ生成回路１８６は、誤り訂正後下位読出しデータＥＸＰｑ＿Ｌ及び誤り訂正後トップ読出しデータＥＸＰｑ＿Ｔから、シングルステート読出しデータＳＳＲｑ＿３Ｒのデータが“０”に対応し、かつシングルステート読出しデータＳＳＲｑ＿８Ｒのデータが“１”に対応するビットを、それぞれ誤り訂正後分離データＳＥＰ＿ＥＸＰｑ＿Ｌ２’及びＳＥＰ＿ＥＸＰｑ＿Ｔ２’として抽出する。分離データ生成回路１８６は、誤り訂正後下位読出しデータＥＸＰｑ＿Ｌ及び誤り訂正後トップ読出しデータＥＸＰｑ＿Ｔから、シングルステート読出しデータＳＳＲｑ＿８Ｒのデータが“０”に対応し、かつシングルステート読出しデータＳＳＲｑ＿１４Ｒのデータが“１”に対応するビットを、それぞれ誤り訂正後分離データＳＥＰ＿ＥＸＰｑ＿Ｌ３’及びＳＥＰ＿ＥＸＰｑ＿Ｔ３’として抽出する。分離データ生成回路１８６は、誤り訂正後下位読出しデータＥＸＰｑ＿Ｌ及び誤り訂正後トップ読出しデータＥＸＰｑ＿Ｔから、シングルステート読出しデータＳＳＲｑ＿１４Ｒのデータが“０”に対応するビットを、それぞれ誤り訂正後分離データＳＥＰ＿ＥＸＰｑ＿Ｌ４’及びＳＥＰ＿ＥＸＰｑ＿Ｔ４’として抽出する。抽出された誤り訂正後分離データＳＥＰ＿ＥＸＰｑ＿Ｌ１’〜ＳＥＰ＿ＥＸＰｑ＿Ｌ４’及びＳＥＰ＿ＥＸＰｑ＿Ｔ１’〜ＳＥＰ＿ＥＸＰｑ＿Ｔ４’は、ビットカウンタ１８２に送出される。
【０３０９】
ステップＳＴ４０において、読出し電圧補正回路１８０は、誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｌ１’〜ＳＥＰ＿ＳＲｑ＿Ｌ４’及びＳＥＰ＿ＳＲｑ＿Ｔ１’〜ＳＥＰ＿ＳＲｑ＿Ｔ４’、並びに誤り訂正後分離データＳＥＰ＿ＥＸＰｑ＿Ｌ１’〜ＳＥＰ＿ＥＸＰｑ＿Ｌ４’及びＳＥＰ＿ＥＸＰｑ＿Ｔ１’〜ＳＥＰ＿ＥＸＰｑ＿Ｔ４’に基づいて、シフト量算出処理を実行する。具体的には、読出し電圧補正回路１８０は、下位ページに対応する読出し電圧ＶＳ１、ＶＳ４、ＶＳ６、及びＶＳ１１、並びにトップページに対応する読出し電圧ＶＳ５、ＶＳ１０、ＶＳ１２、及びＶＳ１５のシフト量Δを算出する。シフト量算出処理の詳細は、後述する。
【０３１０】
ステップＳＴ４５において、読出し電圧補正回路１８０は、ステップＳＴ４０において算出されたシフト量Δに基づき、中位ページに対応する読出し電圧ＶＳ３、ＶＳ７、ＶＳ９、及びＶＳ１３Ｒ、並びにトップページに対応する読出し電圧ＶＳ２、ＶＳ８、及びＶＳ１４のシフト量Δを推定する。シフト量推定処理の詳細は、後述する。
【０３１１】
ステップＳＴ５０において、メモリコントローラ１００は、ステップＳＴ４０において算出され、ステップＳＴ４５において推定されたシフト量Δをメモリ１２０の履歴テーブル内における対応する領域に保持することにより、履歴テーブルを更新する。
【０３１２】
以上により、読出し処理が終了する。
【０３１３】
６．２  下位ページ及びトップページ読出し処理に基づくシフト量算出処理
図３５、図３６、図３７、図３８、及び図３９は、第６実施形態に係るメモリシステムにおける、下位ページ及びトップページ読出し処理に基づくシフト量算出処理を説明するための模式図である。図３５では、シフトリード処理及びシングルステートリード処理によって読み出されるデータが示される。図３６〜図３９ではそれぞれ、シフト量算出処理のうち、読出し動作１Ｒについて、読出し動作４Ｒ、５Ｒ及び６Ｒについて、読出し動作１０Ｒ、１１Ｒ及び１２Ｒについて、並びに読出し動作１５Ｒについて、の評価指標算出対象のカウント値が選択されるまでの処理が示される。
【０３１４】
図３５に示すように、誤り訂正前下位読出しデータＳＲｑ＿Ｌ及び誤り訂正前トップ読出しデータＳＲｑ＿Ｔの組は、セルユニットＣＵ内のメモリセルトランジスタＭＴの閾値分布を４通りに分類する。すなわち、データの組（ＳＲｑ＿Ｔ、ＳＲｑ＿Ｌ）は、閾値電圧が電圧ＶＳ１未満、電圧ＶＳ４以上電圧ＶＳ５未満、電圧ＶＳ１１以上電圧ＶＳ１２未満、又は電圧ＶＳ１５以上の場合に（１、１）となり、該当するメモリセルトランジスタＭＴは“Ｓ０”状態、“Ｓ４”状態、“Ｓ１１”状態、又は“Ｓ１５”状態の閾値分布に属しているとみなされる。データの組（ＳＲｑ＿Ｔ、ＳＲｑ＿Ｌ）は、閾値電圧が電圧ＶＳ１以上電圧ＶＳ４未満、又は電圧ＶＳ１０以上電圧ＶＳ１１未満の場合に（１、０）となり、該当するメモリセルトランジスタＭＴは“Ｓ１”状態〜“Ｓ３”状態、又は“Ｓ１０”状態の閾値分布に属しているとみなされる。データの組（ＳＲｑ＿Ｔ、ＳＲｑ＿Ｌ）は、閾値電圧が電圧ＶＳ６以上電圧ＶＳ１０未満の場合に（０、０）となり、該当するメモリセルトランジスタＭＴは“Ｓ６”状態〜“Ｓ９”状態の閾値分布に属しているとみなされる。データの組（ＳＲｑ＿Ｔ、ＳＲｑ＿Ｌ）は、閾値電圧が電圧ＶＳ５以上電圧ＶＳ６未満、又は電圧ＶＳ１２以上電圧ＶＳ１５未満の場合に（０、１）となり、該当するメモリセルトランジスタＭＴは“Ｓ５”状態、又は“Ｓ１２”状態〜“Ｓ１４”状態の閾値分布に属しているとみなされる。
【０３１５】
シングルステート読出しデータＳＳＲｑ＿３Ｒは、閾値電圧が電圧ＶＳ３未満の場合にデータ“１”となり、該当するメモリセルトランジスタＭＴは“Ｓ０”状態〜“Ｓ２”状態の閾値分布に属しているとみなされる。また、シングルステート読出しデータＳＳＲｑ＿３Ｒは、閾値電圧が電圧ＶＳ３以上の場合にデータ“０”となり、該当するメモリセルトランジスタＭＴは“Ｓ３”状態〜“Ｓ１５”状態の閾値分布に属しているとみなされる。
【０３１６】
シングルステート読出しデータＳＳＲｑ＿８Ｒは、閾値電圧が電圧ＶＳ８未満の場合にデータ“１”となり、該当するメモリセルトランジスタＭＴは、“Ｓ０”状態〜“Ｓ７”状態の閾値分布に属しているとみなされる。また、シングルステート読出しデータＳＳＲｑ＿８Ｒは、閾値電圧が電圧ＶＳ８以上の場合にデータ“０”となり、該当するメモリセルトランジスタＭＴは、“Ｓ８”状態〜“Ｓ１５”状態の閾値分布に属しているとみなされる。
【０３１７】
シングルステート読出しデータＳＳＲｑ＿１４Ｒは、閾値電圧が電圧ＶＳ１４未満の場合にデータ“１”となり、該当するメモリセルトランジスタＭＴは、“Ｓ０”状態〜“Ｓ１３”状態の閾値分布に属しているとみなされる。また、シングルステート読出しデータＳＳＲｑ＿１４Ｒは、閾値電圧が電圧ＶＳ１４以上の場合にデータ“０”となり、“Ｓ１４”状態〜“Ｓ１５”状態の閾値分布に属しているとみなされる。
【０３１８】
このため、図３６に示すように、誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｔ１’及びＳＥＰ＿ＳＲｑ＿Ｌ１’の組は、“Ｓ０”状態〜“Ｓ２”状態の閾値分布に属しているとみなされたメモリセルトランジスタＭＴを２通りに分類する。すなわち、データの組（ＳＥＰ＿ＳＲｑ＿Ｔ１’、ＳＥＰ＿ＳＲｑ＿Ｌ１’）は、閾値電圧が電圧ＶＳ１未満の場合に（１、１）となり、該当するメモリセルトランジスタは“Ｓ０”状態の閾値分布に属しているとみなされる。データの組（ＳＥＰ＿ＳＲｑ＿Ｔ１’、ＳＥＰ＿ＳＲｑ＿Ｌ１’）は、閾値電圧が電圧ＶＳ１以上の場合に（１、０）となり、該当するメモリセルトランジスタは“Ｓ１”状態又は“Ｓ２”状態の閾値分布に属しているとみなされる。
【０３１９】
また、図３７に示すように、誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｔ２’及びＳＥＰ＿ＳＲｑ＿Ｌ２’の組は、“Ｓ３”状態〜“Ｓ７”状態の閾値分布に属しているとみなされたメモリセルトランジスタＭＴを４通りに分類する。すなわち、データの組（ＳＥＰ＿ＳＲｑ＿Ｔ２’、ＳＥＰ＿ＳＲｑ＿Ｌ２’）は、閾値電圧が電圧ＶＳ３以上電圧ＶＳ４未満の場合に（１、０）となり、該当するメモリセルトランジスタは“Ｓ３”状態の閾値分布に属しているとみなされる。データの組（ＳＥＰ＿ＳＲｑ＿Ｔ２’、ＳＥＰ＿ＳＲｑ＿Ｌ２’）は、閾値電圧が電圧ＶＳ４以上電圧ＶＳ５未満の場合に（１、１）となり、該当するメモリセルトランジスタは“Ｓ４”状態の閾値分布に属しているとみなされる。データの組（ＳＥＰ＿ＳＲｑ＿Ｔ２’、ＳＥＰ＿ＳＲｑ＿Ｌ２’）は、閾値電圧が電圧ＶＳ５以上電圧ＶＳ６未満の場合に（０、１）となり、該当するメモリセルトランジスタは“Ｓ５”状態の閾値分布に属しているとみなされる。データの組（ＳＥＰ＿ＳＲｑ＿Ｔ２’、ＳＥＰ＿ＳＲｑ＿Ｌ２’）は、閾値電圧が電圧ＶＳ６以上電圧ＶＳ８未満の場合に（０、０）となり、該当するメモリセルトランジスタは“Ｓ６”状態〜“Ｓ７”状態の閾値分布に属しているとみなされる。
【０３２０】
また、図３８に示すように、誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｔ３’及びＳＥＰ＿ＳＲｑ＿Ｌ３’の組は、“Ｓ８”状態〜“Ｓ１３”状態の閾値分布に属しているとみなされたメモリセルトランジスタＭＴを４通りに分類する。すなわち、データの組（ＳＥＰ＿ＳＲｑ＿Ｔ３’、ＳＥＰ＿ＳＲｑ＿Ｌ３’）は、閾値電圧が電圧ＶＳ８以上電圧ＶＳ１０未満の場合に（０、０）となり、該当するメモリセルトランジスタは“Ｓ８”状態又は“Ｓ９”状態の閾値分布に属しているとみなされる。データの組（ＳＥＰ＿ＳＲｑ＿Ｔ３’、ＳＥＰ＿ＳＲｑ＿Ｌ３’）は、閾値電圧が電圧ＶＳ１０以上電圧ＶＳ１１未満の場合に（１、０）となり、該当するメモリセルトランジスタは“Ｓ１０”状態の閾値分布に属しているとみなされる。データの組（ＳＥＰ＿ＳＲｑ＿Ｔ３’、ＳＥＰ＿ＳＲｑ＿Ｌ３’）は、閾値電圧が電圧ＶＳ１１以上電圧ＶＳ１２未満の場合に（１、１）となり、該当するメモリセルトランジスタは“Ｓ１１”状態の閾値分布に属しているとみなされる。データの組（ＳＥＰ＿ＳＲｑ＿Ｔ３’、ＳＥＰ＿ＳＲｑ＿Ｌ３’）は、閾値電圧が電圧ＶＳ１２以上電圧ＶＳ１４未満の場合に（０、１）となり、該当するメモリセルトランジスタは“Ｓ１２”状態又は“Ｓ１３”状態の閾値分布に属しているとみなされる。
【０３２１】
また、図３９に示すように、誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｔ４’及びＳＥＰ＿ＳＲｑ＿Ｌ４’の組は、“Ｓ１４”状態〜“Ｓ１５”状態の閾値分布に属しているとみなされたメモリセルトランジスタＭＴを２通りに分類する。すなわち、データの組（ＳＥＰ＿ＳＲｑ＿Ｔ４’、ＳＥＰ＿ＳＲｑ＿Ｌ４’）は、閾値電圧が電圧ＶＳ１５未満の場合に（０、１）となり、該当するメモリセルトランジスタは“Ｓ１４”状態の閾値分布に属しているとみなされる。データの組（ＳＥＰ＿ＳＲｑ＿Ｔ４’、ＳＥＰ＿ＳＲｑ＿Ｌ４’）は、閾値電圧が電圧ＶＳ１５以上の場合に（１、１）となり、該当するメモリセルトランジスタは“Ｓ１５”状態の閾値分布に属しているとみなされる。
【０３２２】
一方、図３６〜図３９に示すように、誤り訂正後分離データの組ＳＥＰ＿ＥＸＰｑ＿Ｔｊ’及びＳＥＰ＿ＥＸＰｑ＿Ｌｊ’）はそれぞれ、誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｔｊ’及びＳＥＰ＿ＳＲｑ＿Ｌｊ’による分類に依らず、メモリセルトランジスタＭＴを４通りに分類する（１≦ｊ≦４）。すなわち、データの組（ＳＥＰ＿ＥＸＰｑ＿Ｔｊ’、ＳＥＰ＿ＥＸＰｑ＿Ｌｊ’）が（１、１）となるメモリセルトランジスタＭＴは、“Ｓ０”状態、“Ｓ４”状態、“Ｓ１１”状態、又は“Ｓ１５”状態の閾値分布に属していることが期待される。データの組（ＳＥＰ＿ＥＸＰｑ＿Ｔｊ’、ＳＥＰ＿ＥＸＰｑ＿Ｌｊ’）が（１、０）となるメモリセルトランジスタＭＴは、“Ｓ１”状態〜“Ｓ３”状態、又は“Ｓ１０”状態の閾値分布に属していることが期待される。データの組（ＳＥＰ＿ＥＸＰｑ＿Ｔｊ’、ＳＥＰ＿ＥＸＰｑ＿Ｌｊ’）が（０、０）となるメモリセルトランジスタＭＴは、“Ｓ６”状態〜“Ｓ９”状態の閾値分布に属していることが期待される。データの組（ＳＥＰ＿ＥＸＰｑ＿Ｔｊ’、ＳＥＰ＿ＥＸＰｑ＿Ｌｊ’）が（０、１）となるメモリセルトランジスタＭＴは、“Ｓ５”状態、“Ｓ１２”状態〜“Ｓ１４”状態の閾値分布に属していることが期待される。
【０３２３】
なお、上述の通り、データの組（ＳＥＰ＿ＥＸＰｑ＿Ｔ１’，ＳＥＰ＿ＥＸＰｑ＿Ｌ１’）は“Ｓ０”状態〜“Ｓ２”状態の閾値分布に、データの組（ＳＥＰ＿ＥＸＰｑ＿Ｔ２’，ＳＥＰ＿ＥＸＰｑ＿Ｌ２’）は“Ｓ３”状態〜“Ｓ７”状態の閾値分布に、データの組（ＳＥＰ＿ＥＸＰｑ＿Ｔ３’，ＳＥＰ＿ＥＸＰｑ＿Ｌ３’）“Ｓ８”状態〜“Ｓ１３”状態の閾値分布に、データの組（ＳＥＰ＿ＥＸＰｑ＿Ｔ４’，ＳＥＰ＿ＥＸＰｑ＿Ｌ４’）は“Ｓ１４”状態又は“Ｓ１５”状態の閾値分布に、属しているとみなされたメモリセルトランジスタＭＴの集合である。
【０３２４】
このため、データの組（ＳＥＰ＿ＥＸＰｑ＿Ｔ１’，ＳＥＰ＿ＥＸＰｑ＿Ｌ１’）＝（１，１）となるメモリセルトランジスタＭＴは“Ｓ０”状態の閾値分布に、（１，０）となるメモリセルトランジスタＭＴは、“Ｓ１”状態又は“Ｓ２”状態の閾値分布に、それぞれ属していることが期待されるとみなすことができる。データの組（ＳＥＰ＿ＥＸＰｑ＿Ｔ１’，ＳＥＰ＿ＥＸＰｑ＿Ｌ１’）＝（０，０）及び（０，１）となるメモリセルトランジスタＭＴはほぼ存在しない、とみなすことができる。
【０３２５】
また、データの組（ＳＥＰ＿ＥＸＰｑ＿Ｔ２’，ＳＥＰ＿ＥＸＰｑ＿Ｌ２’）＝（１，１）となるメモリセルトランジスタＭＴは“Ｓ４”状態の閾値分布に、（１，０）となるメモリセルトランジスタＭＴは、“Ｓ３”状態の閾値分布に、（０，０）となるメモリセルトランジスタＭＴは、“Ｓ６”状態又は“Ｓ７”状態の閾値分布に、（０，１）となるメモリセルトランジスタＭＴは、“Ｓ５”状態の閾値分布に、それぞれ属していることが期待されるとみなすことができる。
【０３２６】
また、データの組（ＳＥＰ＿ＥＸＰｑ＿Ｔ３’，ＳＥＰ＿ＥＸＰｑ＿Ｌ３’）＝（１，１）となるメモリセルトランジスタＭＴは“Ｓ１１”状態の閾値分布に、（１，０）となるメモリセルトランジスタＭＴは、“Ｓ１０”状態の閾値分布に、（０，０）となるメモリセルトランジスタＭＴは、“Ｓ８”状態又は“Ｓ９”状態の閾値分布に、（０，１）となるメモリセルトランジスタＭＴは、“Ｓ１２”状態又は“Ｓ１３”状態の閾値分布に、それぞれ属していることが期待されるとみなすことができる。
【０３２７】
また、データの組（ＳＥＰ＿ＥＸＰｑ＿Ｔ４’，ＳＥＰ＿ＥＸＰｑ＿Ｌ４’）＝（１，１）となるメモリセルトランジスタＭＴは“Ｓ１５”状態の閾値分布に、（０，１）となるメモリセルトランジスタＭＴは、“Ｓ１４”状態の閾値分布に、それぞれ属していることが期待されるとみなすことができる。データの組（ＳＥＰ＿ＥＸＰｑ＿Ｔ４’，ＳＥＰ＿ＥＸＰｑ＿Ｌ４’）＝（１，０）及び（０，０）となるメモリセルトランジスタＭＴはほぼ存在しない、とみなすことができる。
【０３２８】
このため、誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｌ１’、及びＳＥＰ＿ＳＲｑ＿Ｔ１’、並びに誤り訂正後分離データＳＥＰ＿ＥＸＰｑ＿Ｌ１’及びＳＥＰ＿ＥＸＰｑ＿Ｔ１’が取り得る値の組合せＣ５＿ＴＬ１＝（ＳＥＰ＿ＳＲｑ＿Ｔ１’、ＳＥＰ＿ＳＲｑ＿Ｌ１’、ＳＥＰ＿ＥＸＰｑ＿Ｔ１’、ＳＥＰ＿ＥＸＰｑ＿Ｌ１’）は、２×２＝４通り存在する。誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｌ２’、及びＳＥＰ＿ＳＲｑ＿Ｔ２’、並びに誤り訂正後分離データＳＥＰ＿ＥＸＰｑ＿Ｌ２’及びＳＥＰ＿ＥＸＰｑ＿Ｔ２’が取り得る値の組合せＣ５＿ＴＬ２＝（ＳＥＰ＿ＳＲｑ＿Ｔ２’、ＳＥＰ＿ＳＲｑ＿Ｌ２’、ＳＥＰ＿ＥＸＰｑ＿Ｔ２’、ＳＥＰ＿ＥＸＰｑ＿Ｌ２’）は、４×４＝１６通り存在する。誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｌ３’、及びＳＥＰ＿ＳＲｑ＿Ｔ３’、並びに誤り訂正後分離データＳＥＰ＿ＥＸＰｑ＿Ｌ３’及びＳＥＰ＿ＥＸＰｑ＿Ｔ３’が取り得る値の組合せＣ５＿ＴＬ３＝（ＳＥＰ＿ＳＲｑ＿Ｔ３’、ＳＥＰ＿ＳＲｑ＿Ｌ３’、ＳＥＰ＿ＥＸＰｑ＿Ｔ３’、ＳＥＰ＿ＥＸＰｑ＿Ｌ３’）は、４×４＝１６通り存在する。誤り訂正前分離データＳＥＰ＿ＳＲｑ＿Ｌ４’、及びＳＥＰ＿ＳＲｑ＿Ｔ４’、並びに誤り訂正後分離データＳＥＰ＿ＥＸＰｑ＿Ｌ４’及びＳＥＰ＿ＥＸＰｑ＿Ｔ４’が取り得る値の組合せＣ５＿ＴＬ４＝（ＳＥＰ＿ＳＲｑ＿Ｔ４’、ＳＥＰ＿ＳＲｑ＿Ｌ４’、ＳＥＰ＿ＥＸＰｑ＿Ｔ４’、ＳＥＰ＿ＥＸＰｑ＿Ｌ４’）は、２×２＝４通り存在する。ビットカウンタ１８２は、上記したような組合せＣ５＿ＴＬ１〜Ｃ５＿ＴＬ４毎（すなわち、４０通りの組合せ毎）にビット数をカウントする。
【０３２９】
図３６の例では、ビットセレクタ１８３は、４通りの組合せＣ５＿ＴＬ１のうち、組合せＣ５＿ＴＬ１＝（１、１、１、０）及び（１、０、１、１）の２通りを含む１つの組に着目する。組合せＣ５＿ＴＬ１＝（１、１、１、０）の場合は、“Ｓ１”状態又は“Ｓ２”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｓ０”状態のデータが誤って読み出されたことを示す場合である。組合せＣ５＿ＴＬ１＝（１、０、１、１）の場合は、“Ｓ０”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｓ１”状態又は“Ｓ２”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せＣ５＿ＴＬ１＝（１、１、１、０）の場合は、「Ｓ１，Ｓ２→Ｓ０誤読出しケース」を含み、組合せＣ５＿ＴＬ１＝（１、０、１、１）の場合は、「Ｓ０→Ｓ１，Ｓ２誤読出しケース」を含む。
【０３３０】
「Ｓ１，Ｓ２→Ｓ０誤読出しケース」のうち、「Ｓ１→Ｓ０誤読出しケース」の数は、「Ｓ２→Ｓ０誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せＣ５＿ＴＬ１＝（１、１、１、０）に対応するカウント値は、「Ｓ１→Ｓ０誤読出しケース」に実質的に等しいとみなし得る。同様に、「Ｓ０→Ｓ１，Ｓ２誤読出しケース」のうち、「Ｓ０→Ｓ１誤読出しケース」の数は、「Ｓ０→Ｓ２誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せＣ５＿ＴＬ１＝（１、０、１、１）に対応するカウント値は、「Ｓ０→Ｓ１誤読出しケース」に実質的に等しいとみなし得る。
【０３３１】
図３７の例では、ビットセレクタ１８３は、１６通りの組合せＣ５＿ＴＬ２のうち、組合せＣ５＿ＴＬ２＝（１、０、１、１）及び（１、１、１、０）の２通りを含む組と、（１、１、０、１）及び（０、１、１、１）の２通りを含む組と、（０、１、０、０）及び（０、０、０、１）の２通りを含む組と、３つの組に着目する。
【０３３２】
組合せＣ５＿ＴＬ２＝（１、０、１、１）の場合は、“Ｓ４”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｓ３”状態のデータが誤って読み出されたことを示す場合である。組合せＣ５＿ＴＬ２＝（１、１、１、０）の場合は、“Ｓ３”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｓ４”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せＣ５＿ＴＬ２＝（１、０、１、１）に対応するカウント値は、「Ｓ４→Ｓ３誤読出しケース」に等しくなり、組合せＣ５＿ＴＬ２＝（１、１、１、０）に対応するカウント値は、「Ｓ３→Ｓ４誤読出しケース」に等しくなる。
【０３３３】
組合せＣ５＿ＴＬ２＝（１、１、０、１）の場合は、“Ｓ５”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｓ４”状態のデータが誤って読み出されたことを示す場合である。組合せＣ５＿ＴＬ２＝（０、１、１、１）の場合は、“Ｓ４”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｓ５”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せＣ５＿ＴＬ２＝（１、１、０、１）に対応するカウント値は、「Ｓ５→Ｓ４誤読出しケース」に等しくなり、組合せＣ５＿ＴＬ２＝（０、１、１、１）に対応するカウント値は、「Ｓ４→Ｓ５誤読出しケース」に等しくなる。
【０３３４】
組合せＣ５＿ＴＬ２＝（０、１、０、０）の場合は、“Ｓ６”状態又は“Ｓ７”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｓ５”状態のデータが誤って読み出されたことを示す場合である。組合せＣ５＿ＴＬ２＝（０、０、０、１）の場合は、“Ｓ５”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｓ６”状態又は“Ｓ７”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せＣ５＿ＴＬ２＝（０、１、０、０）の場合は、「Ｓ６，Ｓ７→Ｓ５誤読出しケース」を含み、組合せＣ５＿ＴＬ２＝（０、１、０、０）の場合は、「Ｓ５→Ｓ６，Ｓ７誤読出しケース」を含む。
【０３３５】
「Ｓ６，Ｓ７→Ｓ５誤読出しケース」のうち、「Ｓ６→Ｓ５誤読出しケース」の数は、「Ｓ７→Ｓ５誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せＣ５＿ＴＬ２＝（０、１、０、０）に対応するカウント値は、「Ｓ６→Ｓ５誤読出しケース」に実質的に等しいとみなし得る。同様に、「Ｓ５→Ｓ６，Ｓ７誤読出しケース」のうち、「Ｓ５→Ｓ６誤読出しケース」の数は、「Ｓ５→Ｓ７誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せＣ５＿ＴＬ２＝（０、０、０、１）に対応するカウント値は、「Ｓ５→Ｓ６誤読出しケース」に実質的に等しいとみなし得る。
【０３３６】
図３８の例では、ビットセレクタ１８３は、１６通りの組合せＣ５＿ＴＬ３のうち、組合せＣ５＿ＴＬ３＝（０、０、１、０）及び（１、０、０、０）の２通りを含む組と、（１、０、１、１）及び（１、１、１、０）の２通りを含む組と、（１、１、０、１）及び（０、１、１、１）の２通りを含む組と、３つの組に着目する。
【０３３７】
組合せＣ５＿ＴＬ３＝（０、０、１、０）の場合は、“Ｓ１０”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｓ８”状態又は“Ｓ９”状態のデータが誤って読み出されたことを示す場合である。組合せＣ５＿ＴＬ３＝（１、０、０、０）の場合は、“Ｓ８”状態又は“Ｓ９”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｓ１０”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せＣ５＿ＴＬ３＝（０、０、１、０）の場合は、「Ｓ１０→Ｓ８，Ｓ９誤読出しケース」を含み、組合せＣ５＿ＴＬ３＝（１、０、０、０）の場合は、「Ｓ８，Ｓ９→Ｓ１０誤読出しケース」を含む。
【０３３８】
「Ｓ１０→Ｓ８，Ｓ９誤読出しケース」のうち、「Ｓ１０→Ｓ９誤読出しケース」の数は、「Ｓ１０→Ｓ８誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せＣ５＿ＴＬ３＝（０、０、１、０）に対応するカウント値は、「Ｓ１０→Ｓ９誤読出しケース」に実質的に等しいとみなし得る。同様に、「Ｓ８，Ｓ９→Ｓ１０誤読出しケース」のうち、「Ｓ９→Ｓ１０誤読出しケース」の数は、「Ｓ８→Ｓ１０誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せＣ５＿ＴＬ３＝（１、０、０、０）に対応するカウント値は、「Ｓ９→Ｓ１０誤読出しケース」に実質的に等しいとみなし得る。
【０３３９】
組合せＣ５＿ＴＬ３＝（１、０、１、１）の場合は、“Ｓ１１”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｓ１０”状態のデータが誤って読み出されたことを示す場合である。組合せＣ５＿ＴＬ３＝（１、１、１、０）の場合は、 “Ｓ１０”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｓ１１”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せＣ５＿ＴＬ３＝（１、０、１、１）に対応するカウント値は、「Ｓ１１→Ｓ１０誤読出しケース」に等しくなり、組合せＣ５＿ＴＬ３＝（１、１、１、０）に対応するカウント値は、「Ｓ１０→Ｓ１１誤読出しケース」に等しくなる。
【０３４０】
組合せＣ５＿ＴＬ３＝（１、１、０、１）の場合は、“Ｓ１２”状態又は“Ｓ１３”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｓ１１”状態のデータが誤って読み出されたことを示す場合である。組合せＣ５＿ＴＬ３＝（０、１、１、１）の場合は、“Ｓ１１”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｓ１２”状態又は“Ｓ１３”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せＣ５＿ＴＬ３＝（１、１、０、１）の場合は、「Ｓ１２，Ｓ１３→Ｓ１１誤読出しケース」を含み、組合せＣ５＿ＴＬ３＝（０、１、１、１）の場合は、「Ｓ１１→Ｓ１２，Ｓ１３誤読出しケース」を含む。
【０３４１】
「Ｓ１２，Ｓ１３→Ｓ１１誤読出しケース」のうち、「Ｓ１２→Ｓ１１誤読出しケース」の数は、「Ｓ１３→Ｓ１１誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せＣ５＿ＴＬ３＝（１、１、０、１）に対応するカウント値は、「Ｓ１２→Ｓ１１誤読出しケース」に実質的に等しいとみなし得る。同様に、「Ｓ１１→Ｓ１２，Ｓ１３誤読出しケース」のうち、「Ｓ１１→Ｓ１２誤読出しケース」の数は、「Ｓ１１→Ｓ１３誤読出しケース」の数に対して有意に大きいとみなし得る。すなわち、組合せＣ５＿ＴＬ３＝（０、１、１、１）に対応するカウント値は、「Ｓ１１→Ｓ１２誤読出しケース」に実質的に等しいとみなし得る。
【０３４２】
図３９の例では、ビットセレクタ１８３は、４通りの組合せＣ５＿ＴＬ４のうち、組合せＣ５＿ＴＬ４＝（０、１、１、１）及び（１、１、０、１）の２通りを含む１つの組に着目する。組合せＣ５＿ＴＬ４＝（０、１、１、１）の場合は、“Ｓ１５”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｓ１４”状態のデータが誤って読み出されたことを示す場合である。組合せＣ５＿ＴＬ４＝（１、１、０、１）の場合は、“Ｓ１４”状態のデータが書き込まれたメモリセルトランジスタＭＴから“Ｓ１５”状態のデータが誤って読み出されたことを示す場合である。すなわち、組合せＣ５＿ＴＬ４＝（０、１、１、１）に対応するカウント値は、「Ｓ１５→Ｓ１４誤読出しケース」に等しくなり、組合せＣ５＿ＴＬ４＝（１、１、０、１）に対応するカウント値は、「Ｓ１４→Ｓ１５誤読出しケース」に等しくなる。
【０３４３】
上記した近似を行うことにより、ビットセレクタ１８３は、電圧ＶＳ１のシフト量Δを算出する場合、「Ｓ１→Ｓ０誤読出しケース」及び「Ｓ０→Ｓ１誤読出しケース」にそれぞれ実質的に対応する組合せＣ５＿ＴＬ１＝（１、１、１、０）及び（１、０、１、１）のカウント値を１つの組として選択する。
【０３４４】
ビットセレクタ１８３は、電圧ＶＳ４のシフト量Δを算出する場合、「Ｓ４→Ｓ３誤読出しケース」及び「Ｓ３→Ｓ４誤読出しケース」にそれぞれ実質的に対応する組合せＣ５＿ＴＬ２＝（１、０、１、１）及び（１、１、１、０）のカウント値を１つの組として選択する。ビットセレクタ１８３は、電圧ＶＳ５のシフト量Δを算出する場合、「Ｓ５→Ｓ４誤読出しケース」及び「Ｓ４→Ｓ５誤読出しケース」にそれぞれ実質的に対応する組合せＣ５＿ＴＬ２＝（１、１、０、１）及び（０、１、１、１）のカウント値を１つの組として選択する。ビットセレクタ１８３は、電圧ＶＳ６のシフト量Δを算出する場合、「Ｓ６→Ｓ５誤読出しケース」及び「Ｓ５→Ｓ６誤読出しケース」にそれぞれ実質的に対応する組合せＣ５＿ＴＬ２＝（０、１、０、０）及び（０、０、０、１）のカウント値を１つの組として選択する。
【０３４５】
ビットセレクタ１８３は、電圧ＶＳ１０のシフト量Δを算出する場合、「Ｓ１０→Ｓ９誤読出しケース」及び「Ｓ９→Ｓ１０誤読出しケース」にそれぞれ実質的に対応する組合せＣ５＿ＴＬ３＝（０、０、１、０）及び（１、０、０、０）のカウント値を１つの組として選択する。ビットセレクタ１８３は、電圧ＶＳ１１のシフト量Δを算出する場合、「Ｓ１１→Ｓ１０誤読出しケース」及び「Ｓ１０→Ｓ１１誤読出しケース」にそれぞれ実質的に対応する組合せＣ５＿ＴＬ３＝（１、０、１、１）及び（１、１、１、０）のカウント値を１つの組として選択する。ビットセレクタ１８３は、電圧ＶＳ１２のシフト量Δを算出する場合、「Ｓ１２→Ｓ１１誤読出しケース」及び「Ｓ１１→Ｓ１２誤読出しケース」にそれぞれ実質的に対応する組合せＣ５＿ＴＬ３＝（１、１、０、１）及び（０、１、１、１）のカウント値を１つの組として選択する。
【０３４６】
ビットセレクタ１８３は、電圧ＶＳ１５のシフト量Δを算出する場合、「Ｓ１５→Ｓ１４誤読出しケース」及び「Ｓ１４→Ｓ１５誤読出しケース」にそれぞれ実質的に対応する組合せＣ５＿ＴＬ４＝（０、１、１、１）及び（１、１、０、１）のカウント値を１つの組として選択する。
【０３４７】
以上のように動作することにより、ビットセレクタ１８３は、シフト量算出に用いる２つのカウント値の組を、読出し動作１Ｒ、４Ｒ〜６Ｒ、１０Ｒ〜１２Ｒ、及び１５Ｒについて選択することができる。
【０３４８】
以上により、評価指標算出回路１８４は、読出し動作１Ｒ、４Ｒ〜６Ｒ、１０Ｒ〜１２Ｒ、及び１５Ｒについての８種類の評価指標ｒを算出でき、シフト量算出回路１８５は、当該８種類の読出し動作に対応するシフト量Δを算出することができる。
【０３４９】
６．３  下位ページ及びトップページ読出し処理に基づくシフト量推定処理
図４０は、第６実施形態に係るメモリシステムにおける下位ページ及びトップページ読出し処理に基づくシフト量推定処理を説明するための模式図である。
【０３５０】
図４０に示すように、シフト量推定処理は、シフト量算出処理によって算出された下位ページ及びトップページ読出し処理に使用される８種類の読出し電圧のシフト量Δに基づき、中位ページ及び上位ページ読出し処理に使用される７種類の読出し電圧のシフト量Δを推定する処理である。すなわち、シフト量推定処理では、電圧ＶＳ１、ＶＳ４〜ＶＳ６、ＶＳ１０〜ＶＳ１２、及びＶＳ１５の各々のシフト量Δに基づき、電圧ＶＳ２、ＶＳ３、ＶＳ７〜ＶＳ９、ＶＳ１３、及びＶＳ１４の各々のシフト量Δを推定する。
【０３５１】
なお、“Ｓ０”状態〜“Ｓ１５”状態の閾値分布のうち、閾値電圧が最も低い分布である“Ｓ０”状態と、閾値電圧が最も高い分布である“Ｓ１５”状態とは、他の閾値分布と異なる傾向で変動し得る。このため、シフト量推定処理では、当該“Ｓ０”状態及び“Ｓ１５”状態の閾値分布の幅を規定する電圧ＶＳ１及びＶＳ１５のシフト量Δを考慮しないことが望ましい。すなわち、シフト量推定処理では、電圧ＶＳ４〜ＶＳ６、及びＶＳ１０〜ＶＳ１２の各々のシフト量Δに基づき、電圧ＶＳ２、ＶＳ３、ＶＳ７〜ＶＳ９、ＶＳ１３、及びＶＳ１４の各々のシフト量Δを推定することが望ましい。以下に、シフト量推定処理の一例を示す。
【０３５２】
“Ｓ４”状態、“Ｓ５”状態、“Ｓ１０”状態、及び“Ｓ１１”状態の閾値分布の幅（支配的な閾値電圧の範囲）はそれぞれ、各々のシフト量Δが適用された、電圧ＶＳ４及びＶＳ５の差、電圧ＶＳ５及びＶＳ６の差、電圧ＶＳ１０及びＶＳ１１の差、並びに電圧ＶＳ１１及びＶＳ１２の差によって規定することができる。このため、“Ｓ４”状態、“Ｓ５”状態、“Ｓ１０”状態、及び“Ｓ１１”状態の閾値分布の幅は、シフト量算出処理によって算出されたシフト量Δによって規定することができる。
【０３５３】
一方、“Ｓ４”状態、“Ｓ５”状態、“Ｓ１０”状態、及び“Ｓ１１”状態にそれぞれ隣り合う“Ｓ３”状態、“Ｓ６”状態、“Ｓ９”状態、及び“Ｓ１２”状態の閾値分布の幅は、それぞれ、各々のシフト量Δが適用された、電圧ＶＳ３及びＶＳ４の差、電圧ＶＳ６及びＶＳ７の差、電圧ＶＳ９及びＶＳ１０の差、並びに電圧ＶＳ１２及びＶＳ１３の差によって規定することができる。
【０３５４】
また、“Ｓ４”状態、“Ｓ５”状態、“Ｓ１０”状態、及び“Ｓ１１”状態から１つの閾値分布を挟んで隣り合う“Ｓ２”状態、“Ｓ７”状態又は“Ｓ８”状態、及び“Ｓ１４”状態の閾値分布の幅はそれぞれ、各々のシフト量Δが適用された、電圧ＶＳ２及びＶＳ３の差、電圧ＶＳ７及びＶＳ８の差又は電圧ＶＳ８及びＶＳ９の差、並びに電圧ＶＳ１３及びＶＳ１４の差によって規定することができる。
【０３５５】
第６実施形態に係るシフト量推定処理の一例では、例えば、“Ｓ１”状態〜“Ｓ１４”状態の間で互いに隣り合う２つの閾値分布は、同等の幅を有しているとみなす。すなわち、“Ｓ３”状態、“Ｓ６”状態、“Ｓ９”状態、及び“Ｓ１２”状態の閾値分布はそれぞれ、“Ｓ４”状態、“Ｓ５”状態、“Ｓ１０”状態、及び“Ｓ１１”状態の閾値分布と同等の幅に分布しているとみなすことができる。これにより、各々のシフト量Δが適用された、電圧ＶＳ３及びＶＳ４の差、電圧ＶＳ６及びＶＳ７の差、電圧ＶＳ９及びＶＳ１０の差、並びに電圧ＶＳ１２及びＶＳ１３の差はそれぞれ、各々のシフト量Δが適用された、電圧ＶＳ４及びＶＳ５の差、電圧ＶＳ５及びＶＳ６の差、電圧ＶＳ１０及びＶＳ１１の差、並びに電圧ＶＳ１１及びＶＳ１２の差と等しいとみなすことができる。したがって、電圧ＶＳ３、ＶＳ７、ＶＳ９、及びＶＳ１３のシフト量Δを、電圧ＶＳ４〜ＶＳ６、及びＶＳ１０〜ＶＳ１２のシフト量Δに基づいて推定することができる。
【０３５６】
また、“Ｓ２”状態、“Ｓ７”状態、“Ｓ８”状態、及び“Ｓ１３”状態の閾値分布はそれぞれ、“Ｓ３”状態、“Ｓ６”状態、“Ｓ９”状態、及び“Ｓ１２”状態の閾値分布と同等の幅に分布しているとみなすことができる。これにより、各々のシフト量Δが適用された、電圧ＶＳ２及びＶＳ３の差、電圧ＶＳ７及びＶＳ８の差、電圧ＶＳ８及びＶＳ９の差、並びに電圧ＶＳ１３及びＶＳ１４の差も同様にそれぞれ、各々のシフト量Δが適用された、電圧ＶＳ４及びＶＳ５の差、電圧ＶＳ５及びＶＳ６の差、電圧ＶＳ１０及びＶＳ１１の差、並びに電圧ＶＳ１１及びＶＳ１２の差と等しいとみなすことができる。したがって、電圧ＶＳ２、ＶＳ８、及びＶＳ１３のシフト量Δを、電圧ＶＳ４〜ＶＳ６、及びＶＳ１０〜ＶＳ１２のシフト量Δに基づいて更に推定することができる。
【０３５７】
なお、シフト量推定処理では、上述の例に限らず、他の例も適用可能である。例えば、“Ｓ１”状態〜“Ｓ１４”状態の互いに隣り合う２つの閾値分布の間の幅の変化率が同等であるとみなしてもよい。この場合、例えば、“Ｓ４”状態と“Ｓ５”状態の閾値分布の間の幅の変化率と、“Ｓ３”状態と“Ｓ４”状態の閾値分布の間の幅の変化率とが等しいとみなすことにより、電圧ＶＳ３のシフト量Δを推定することができる。また、“Ｓ３”状態と“Ｓ４”状態の閾値分布の間の幅の変化率と、“Ｓ２”状態と“Ｓ３”状態の閾値分布の間の幅の変化率とが等しいとみなせることにより、電圧ＶＳ２のシフト量Δを更に推定することができる。
【０３５８】
６．４  本実施形態に係る効果
第６実施形態によれば、メモリコントローラ１００は、下位ページ及びトップページの２ページ分のシフトリード処理と、３種類のシングルステートリード処理と、を実行する。これにより、読出し電圧補正回路１８０は、８種類の読出し電圧のシフト量Δを算出すると共に、残りの７種類の読出し電圧のシフト量Δを推定することができる。このため、実質的に２ページ分の読出し処理によって４ページ分の読出し電圧を補正することができる。したがって、読出し電圧補正によるレイテンシの増加を抑制することができる。
【０３５９】
なお、シフト量推定処理によってシフト量Δが推定される読出し電圧のうち、中位ページ分に相当する４種類の電圧ＶＳ３、ＶＳ７、ＶＳ９、及びＶＳ１３はそれぞれ、シフト量算出処理によって算出される電圧ＶＳ４、ＶＳ６、ＶＳ８、及びＶＳ１２と隣り合う。このため、比較的精度よくシフト量Δを推定することができる。一方、シフト量推定処理によってシフト量Δが推定される読出し電圧のうち、上位ページ分に相当する３種類の電圧ＶＳ２、ＶＳ８、及びＶＳ１４はそれぞれ、シフト量算出処理によって算出される電圧ＶＳ４、ＶＳ６又はＶＳ８、及びＶＳ１２と２レベル分離れている。このため、中位ページ分に相当する４種類の電圧より、シフト量Δの推定精度が落ちる可能性がある。しかしながら、上述の通り、上位ページは、３種類の読出し電圧によって閾値電圧を４つの領域に区分することによりデータを確定することができる。このため、４種類の読出し電圧によって閾値電圧を５つの領域に区分することによりデータを確定する必要がある他のページよりも、読出し電圧の誤差に対するマージンを大きく取ることができる。したがって、７種類の読出し電圧のシフト量Δを、各々の読出し電圧が有する許容誤差に対して、妥当な精度で推定することができる。
【０３６０】
７．変形例等
以上、種々の実施形態及び変形例について説明したが、上記各実施形態及び各変形例はこれに限られず、種々の更なる変形が適宜適用可能である。
【０３６１】
７．１  その他の第１変形例
例えば、第１実施形態〜第６実施形態では、ＥＣＣ回路１６０による誤り訂正処理の際に、誤り訂正が成功した場合にシフト量算出処理が実行される場合について説明したが、これに限られない。すなわち、読出し電圧補正回路１８０は、ＥＣＣ回路１６０においてＬＤＰＣ符号を使った硬判定復号や、ＬＤＰＣ符号を含む誤り訂正符号の軟判定復号による誤り訂正処理が実行された場合、誤り訂正が成功しなくても、シフト量算出処理を実行してもよい。以降軟判定復号を例に実施例を説明するが、これに限定されない。
【０３６２】
図４１は、その他の第１変形例に係るメモリシステムにおけるシフト量算出処理を伴う読出し処理を説明するためのフローチャートである。図４１は、第１実施形態において説明した図９に対応し、ステップＳＴ３８、ＳＴ３９、ＳＴ４０Ａ、及びＳＴ５０Ａが追加されている。図４１では、ＥＣＣ回路１６０が軟判定復号による誤り訂正処理を実行する場合が想定される。
【０３６３】
図４１に示すように、ステップＳＴ２０までの処理は、図９の場合と同等であるため、説明を省略する。
【０３６４】
ステップＳＴ３０において、軟判定復号による誤り訂正処理が成功した場合（ステップＳＴ３０；ｙｅｓ）、ＥＣＣ回路１６０は、誤り訂正後読出しデータＥＸＰを読出し電圧補正用バッファメモリ１８１に保持させた後、処理はステップＳＴ４０に進む。一方、ステップＳＴ３０において軟判定復号による誤り訂正処理が失敗した場合（ステップＳＴ３０；ｎｏ）、ＥＣＣ回路１６０は、誤り訂正試行後読出しデータＥＸＰ’を読出し電圧補正用バッファメモリ１８１に保持させた後、処理はステップＳＴ３８に進む。
【０３６５】
誤り訂正試行後読出しデータＥＸＰ’は、軟判定復号によってデータが誤っている可能性が高いと判定された一部のビットを反転させたデータである。すなわち、誤り訂正試行後読出しデータＥＸＰ’は、誤って読み出されたビットのうちの一部について誤り訂正処理されたデータである。
【０３６６】
ステップＳＴ３８において、メモリコントローラ１００は、誤り訂正に失敗した回数（訂正失敗回数）に応じて、シフト量算出処理を実行するか否かを判定する。具体的には、メモリコントローラ１００は、訂正失敗回数が基準値Ｎ４以下の場合（ステップＳＴ３８；ｙｅｓ）、シフト量算出処理によって読出し電圧の補正効果が見込めると判定し、処理はステップＳＴ３９に進む。そして、ステップＳＴ３９において、メモリコントローラ１００は、訂正失敗回数をインクリメントし、処理はステップＳＴ４０Ａ及びＳＴ５０Ａに進む。ステップＳＴ４０Ａ及びＳＴ５０Ａにおける処理は、ステップＳＴ４０及びＳＴ５０における処理と同等であるため、説明を省略する。ステップＳＴ５０Ａが終了した後、処理はステップＳＴ１０へ戻る。
【０３６７】
一方、メモリコントローラ１００は、訂正失敗回数が基準値Ｎ４よりも大きい場合（ステップＳＴ３８；ｎｏ）、シフト量算出処理を実行しても読出し電圧の補正効果が見込めないと判定し、処理はステップＳＴ６０に進む。
【０３６８】
ステップＳＴ４０〜ＳＴ８０の処理は、図９の場合と同等であるため、説明を省略する。
【０３６９】
以上のように動作することにより、誤り訂正処理に失敗した場合においても、シフト量算出処理を実行することができる。また、誤り訂正試行後データＥＸＰ’を用いたシフト量算出処理によって読出し電圧が改善されない場合には、リフレッシュ処理を実行することができる。
【０３７０】
なお、図４１では、第１実施形態の場合の変形例として説明したが、これに限られない。例えば、第２実施形態〜第６実施形態における誤り訂正処理についても、軟判定復号を実行することにより、誤り訂正処理に失敗した場合においてもシフト量算出処理を実行することができる。
【０３７１】
７．２  その他の第２変形例
また、第１実施形態〜第６実施形態及びその他の第１変形例では、読出し電圧補正回路が、複数のチャネルＣＨに対して１つ設けられる場合について説明したが、これに限られない。すなわち、読出し電圧補正回路は、複数のチャネルＣＨの各々に対して１つずつ設けられていてもよい。
【０３７２】
図４２は、その他の第２変形例に係るメモリシステムを含む構成を説明するためのブロック図である。
【０３７３】
図４２に示すように、読出し電圧補正回路１８０Ａは、ＮＡＮＤコントローラ群１７０内の複数のＮＡＮＤコントローラ１７１、１７２、…内に１つずつ設けられている。
【０３７４】
以上のように構成されることにより、例えば、ホスト機器２から、複数のチャネルＣＨに対して同時にデータを読み出す旨の命令（ホストリード処理命令）を受けた場合に、複数のチャネルＣＨから読み出したデータ毎に並列にシフト量Δを算出することができる。
【０３７５】
７．３  その他
また、第１実施形態〜第６実施形態、その他の第１変形例、並びにその他の第２変形例では、読出し電圧補正回路１８０又は１８０Ａは、評価指標算出回路１８４及びシフト量算出回路１８５を含む構成について説明したが、これに限られない。例えば、読出し電圧補正回路１８０又は１８０Ａは、評価指標算出回路１８４及びシフト量算出回路１８５を含まない構成であってもよい。この場合、評価指標算出回路１８４及びシフト量算出回路１８５の有する機能は、例えば、メモリ１２０に保持されたファームウェアをプロセッサ１３０が実行することによって実現してもよい。
【０３７６】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【０３７７】
１…メモリシステム、２…ホスト機器、１１…メモリセルアレイ、１２…ロウデコーダ、１３…ドライバ、１４…センスアンプモジュール、１５…アドレスレジスタ、１６…コマンドレジスタ、１７…シーケンサ、１００…メモリコントローラ、１１０…ホストインタフェース回路、１２０…メモリ、１３０…プロセッサ、１４０…バッファメモリ、１５０…ＮＡＮＤインタフェース回路、１６０…ＥＣＣ回路、１７０…ＮＡＮＤコントローラ群、１７１、１７２…ＮＡＮＤコントローラ、１８０、１８０Ａ…読出し電圧補正回路、１８１…読出し電圧補正用バッファメモリ、１８２…ビットカウンタ、１８３…ビットセレクタ、１８４…評価指標算出回路、１８５…シフト量算出回路、２００…ＮＡＮＤパッケージ群。
【図１】
2020047318.tif 000003
【図２】
2020047318.tif 000004
【図３】
2020047318.tif 000005
【図４】
2020047318.tif 000006
【図５】
2020047318.tif 000007
【図６】
2020047318.tif 000008
【図７】
2020047318.tif 000009
【図８】
2020047318.tif 000010
【図９】
2020047318.tif 000011
【図１０】
2020047318.tif 000012
【図１１】
2020047318.tif 000013
【図１２】
2020047318.tif 000014
【図１３】
2020047318.tif 000015
【図１４】
2020047318.tif 000016
【図１５】
2020047318.tif 000017
【図１６】
2020047318.tif 000018
【図１７】
2020047318.tif 000019
【図１８】
2020047318.tif 000020
【図１９】
2020047318.tif 000021
【図２０】
2020047318.tif 000022
【図２１】
2020047318.tif 000023
【図２２】
2020047318.tif 000024
【図２３】
2020047318.tif 000025
【図２４】
2020047318.tif 000026
【図２５】
2020047318.tif 000027
【図２６】
2020047318.tif 000028
【図２７】
2020047318.tif 000029
【図２８】
2020047318.tif 000030
【図２９】
2020047318.tif 000031
【図３０】
2020047318.tif 000032
【図３１】
2020047318.tif 000033
【図３２】
2020047318.tif 000034
【図３３】
2020047318.tif 000035
【図３４】
2020047318.tif 000036
【図３５】
2020047318.tif 000037
【図３６】
2020047318.tif 000038
【図３７】
2020047318.tif 000039
【図３８】
2020047318.tif 000040
【図３９】
2020047318.tif 000041
【図４０】
2020047318.tif 000042
【図４１】
2020047318.tif 000043
【図４２】
2020047318.tif 000044