(57)【要約】【課題】信頼性の低下を低減しつつリード時間を短縮する。【解決手段】実施形態に係るメモリシステムは、リード電圧の設定の履歴値を大きさが異なる管理単位で管理する履歴値管理部を備え、第１管理単位である第１領域は、第２領域を含む第２管理単位の複数の領域を包含し、履歴値管理部は、第１領域に対して第１履歴値を設定し、第２領域に対して第２履歴値を設定する。読出し制御部は、第２領域に含まれる領域に対してリード動作を実行するに際し、履歴値管理部において第２領域に対する前記第２履歴値が設定されていない場合、第１領域に対して設定されている前記第１履歴値を使用してリード動作を実行する。【選択図】図８
2019169217.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性メモリと、
前記不揮発性メモリへのアクセスを制御するメモリコントローラと、
を備え、
前記メモリコントローラは、
前記不揮発性メモリからのデータの読出しを制御する読出し制御部と、
前記不揮発性メモリからデータの読出しを行なう際のリード電圧の設定の履歴値を大きさが異なる第１管理単位と第２管理単位とで管理する履歴値管理部と、
を備え、
前記第１管理単位の領域には、第１領域が存在し、
前記第２管理単位の領域には、第２領域が存在し、
前記第１領域は、前記第２管理単位の複数の領域を包含し、
前記第１領域に包含される前記第２管理単位の前記複数の領域には、前記第２領域が含まれ、
前記履歴値管理部は、前記第１領域に対して第１履歴値を設定し、前記第２領域に対して第２履歴値を設定し、
前記読出し制御部は、前記第２領域に含まれる領域に対してリード動作を実行するに際し、前記履歴値管理部において前記第２領域に対する前記第２履歴値が設定されていない場合、前記第１領域に対して設定されている前記第１履歴値を使用して前記第２領域に含まれる前記領域に対してリード動作を実行する
メモリシステム。
【請求項２】
前記読出し制御部は、前記第２領域に含まれる領域に対するリード動作で使用する履歴値を学習する学習リードを実行し、
前記履歴値管理部は、前記学習リードで学習された履歴値で前記第２領域に対する前記第２履歴値を設定し、前記第１領域に対する前記第１履歴値を前記学習リードで学習された履歴値に基づいて設定する
請求項１に記載のメモリシステム。
【請求項３】
前記履歴値管理部は、前記第１領域に対して既に前記第１履歴値が設定されている場合、前記第１領域に対して既に設定されている前記第１履歴値を前記学習リードで学習された履歴値に基づいて更新しない請求項２に記載のメモリシステム。
【請求項４】
前記読出し制御部は、前記第２領域に含まれる領域に対するリード動作で使用する履歴値を学習する学習リードを実行し、
前記履歴値管理部は、前記学習リードで学習された履歴値で前記第２領域に対する前記第２履歴値を設定し、前記第１領域に包含されている前記第２管理単位の前記複数の領域それぞれに対して設定されている履歴値の平均値を計算し、前記第１領域に対して設定されている前記第１履歴値を前記平均値で更新する
請求項１に記載のメモリシステム。
【請求項５】
前記読出し制御部は、前記第２領域に含まれる領域に対するリード動作で使用する履歴値を学習する学習リードを実行し、
前記履歴値管理部は、前記学習リードで学習された履歴値で前記第２領域に対する前記第２履歴値を設定し、前記第１領域に包含されている前記第２管理単位の前記複数の領域それぞれに対して設定されている履歴値のうちの最頻の履歴値を特定し、前記第１領域に対して設定されている前記第１履歴値を前記最頻の履歴値で更新する
請求項１に記載のメモリシステム。
【請求項６】
前記第１管理単位は、物理ワードライン、物理ブロック、物理ページ組、物理ワードライン組、物理ブロック組、物理ページ群、物理ワードライン群、物理ページ組群、物理ワードライン組群、論理ワードライン、論理ページ、論理ワードライン群、論理ページ群、及び、論理ブロックのうちのいずれかであり、
前記第２管理単位は、前記第１管理単位よりも小さい領域であって、物理ページ、物理ワードライン、物理ブロック、物理ページ組、物理ワードライン組、物理ブロック組、物理ページ群、物理ワードライン群、物理ページ組群、論理ワードライン、論理ページ、論理ワードライン群、論理ページ群、及び、物理ワードライン組群のうちのいずれかである
請求項１に記載のメモリシステム。
【請求項７】
前記読出し制御部は、前記第２領域に含まれる前記領域に対して前記リード動作を実行するに際し、前記リード動作で使用する履歴値を前記履歴値管理部へ要求し、
前記履歴値管理部は、前記読出し制御部からの前記要求に対して前記第１領域に対する前記第１履歴値を応答する場合、前記要求で指定されたアドレスに基づいて、前記第１履歴値を補正し、補正後の前記第１履歴値を前記読出し制御部へ応答する請求項１に記載のメモリシステム。
【請求項８】
前記履歴値管理部は、設定してからの経過時間が所定時間に達した前記第１履歴値又は前記第２履歴値を初期化する請求項１に記載のメモリシステム。
【請求項９】
前記履歴値管理部は、前記第１履歴値又は前記第２履歴値の設定時の温度と現在の温度との温度差が所定温度差以上である場合、対応する前記第１履歴値又は前記第２履歴値を初期化する請求項１に記載のメモリシステム。
【請求項１０】
前記学習リードは、シフトテーブルリード又はトラッキングリードであり、
前記履歴値は、前記シフトテーブルリードで使用するリード電圧のシフトテーブルを特定するためのインデックス、又は、前記トラッキングリードで特定されたリード電圧のシフト量を含む
請求項２に記載のメモリシステム。
【請求項１１】
前記履歴値管理部は、前記不揮発性メモリにおけるアドレスに基づいて、前記第１管理単位の領域及び前記第２管理単位の領域を定義すると共に、前記アドレスに基づいて、前記第１管理単位の領域及び前記第２管理単位の領域それぞれの履歴値を管理する請求項１に記載のメモリシステム。
【請求項１２】
不揮発性メモリと、前記不揮発性メモリへのアクセスを制御するメモリコントローラとを備え、前記メモリコントローラは、前記不揮発性メモリからのデータの読出しを制御する読出し制御部と、前記不揮発性メモリからデータの読出しを行なう際のリード電圧の設定の履歴値を大きさが異なる第１管理単位と第２管理単位とで管理する履歴値管理部とを備えるメモリシステムの制御方法であって、
前記第１管理単位の領域には、第１領域が存在し、
前記第２管理単位の領域には、第２領域が存在し、
前記第１領域は、前記第２管理単位の複数の領域を包含し、
前記第１領域に包含される前記第２管理単位の前記複数の領域には、前記第２領域が含まれ、
前記履歴値管理部は、前記第１領域に対して第１履歴値を設定し、前記第２領域に対して第２履歴値を設定し、
前記読出し制御部は、前記第２領域に含まれる領域に対してリード動作を実行するに際し、前記履歴値管理部において前記第２領域に対する前記第２履歴値が設定されていない場合、前記第１領域に対して設定されている前記第１履歴値を使用して前記第２領域に含まれる前記領域に対してリード動作を実行する
メモリシステムの制御方法。
【請求項１３】
不揮発性メモリと、前記不揮発性メモリへのアクセスを制御するメモリコントローラとを備え、前記メモリコントローラは、前記不揮発性メモリからのデータの読出しを制御する読出し制御部と、前記不揮発性メモリからデータの読出しを行なう際のリード電圧の設定の履歴値を大きさが異なる第１管理単位と第２管理単位とで管理する履歴値管理部とを備えるメモリシステムのプロセッサを機能させるためのプログラムであって、
前記第１管理単位の領域には、第１領域が存在し、
前記第２管理単位の領域には、第２領域が存在し、
前記第１領域は、前記第２管理単位の複数の領域を包含し、
前記第１領域に包含される前記第２管理単位の前記複数の領域には、前記第２領域が含まれ、
前記履歴値管理部に、前記第１領域に対して第１履歴値を設定させ、前記第２領域に対して第２履歴値を設定させ、
前記読出し制御部に、前記第２領域に含まれる領域に対してリード動作を実行するに際し、前記履歴値管理部において前記第２領域に対して前記第２履歴値が設定されていない場合、前記第１領域に対して設定されている前記第１履歴値を使用して前記第２領域に含まれる前記領域に対するリード動作を実行させる
ことを前記プロセッサに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
以下の実施形態は、一般的に、メモリシステム、その制御方法及びプログラムに関する。
【背景技術】
【０００２】
ＮＡＮＤ型フラッシュメモリ（以下、ＮＡＮＤメモリという）を記憶媒体に用いるメモリシステムでは、たとえばデータリテンションやリードディスターブ等によってメモリセルの閾値電圧が変化し、それにより、ＮＡＮＤメモリから読み出したデータのビットエラーレートが悪化して、メモリシステムの信頼性が低下してしまう場合がある。低下した信頼性を改善する方法の一つとしては、通常のリード動作（以下、ノーマルリードともいう）において使用する読出し電圧レベル（以下、リード電圧という）からシフトしたリード電圧を使用してリード動作を実行する、いわゆるシフトリードが存在する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特許第６０２２７５６号公報
【特許文献２】特開２０１３−１９６６１３号公報
【特許文献３】米国特許第９６３２８６８号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明の一つの実施形態は、信頼性の低下を低減しつつリード時間を短縮することが可能なメモリシステム、その制御方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００５】
実施形態によれば、メモリシステムは、不揮発性メモリと、前記不揮発性メモリへのアクセスを制御するメモリコントローラとを備え、前記メモリコントローラは、前記不揮発性メモリからのデータの読出しを制御する読出し制御部と、前記不揮発性メモリからデータの読出しを行なう際のリード電圧の設定の履歴値を大きさが異なる第１管理単位と第２管理単位とで管理する履歴値管理部とを備え、前記第１管理単位の領域には、第１領域が存在し、前記第２管理単位の領域には、第２領域が存在し、前記第１領域は、前記第２管理単位の複数の領域を包含し、前記第１領域に包含される前記第２管理単位の前記複数の領域には、前記第２領域が含まれ、前記履歴値管理部は、前記第１領域に対して第１履歴値を設定し、前記第２領域に対して第２履歴値を設定し、前記読出し制御部は、前記第２領域に含まれる領域に対してリード動作を実行するに際し、前記履歴値管理部において前記第２領域に対する前記第２履歴値が設定されていない場合、前記第１領域に対して設定されている前記第１履歴値を使用して前記第２領域に含まれる前記領域に対してリード動作を実行する。
【図面の簡単な説明】
【０００６】
【図１】図１は、第１の実施形態に係るメモリシステムの概略構成例を示すブロック図である。
【図２】図２は、第１の実施形態に係るビット割当てテーブルと閾値電圧分布と各ページのリード電圧セットとの例を示す図である。
【図３】図３は、第１実施形態に係る履歴値管理テーブルの一例を示す概念図である。
【図４】図４は、ページ、ワードライン、ブロック、プレーン及びチップの関係を説明するための図である。
【図５】図５は、第１の実施形態に係るメモリシステム内の複数のチップによる不揮発性メモリの概略構成例を示す図である。
【図６】図６は、第１の実施形態に係る３次元ＮＡＮＤ構造を有するメモリセルアレイの一例を示す断面図である。
【図７】図７は、図６に例示するメモリセルアレイの物理アドレス空間に対して設定された履歴値管理テーブルの一例を示す図である。
【図８】図８は、第１の実施形態に係るメモリシステムのリード動作を実行するための機能構成例を示す機能ブロック図である。
【図９】図９は、第１の実施形態に係るリード動作の一例を示すフローチャートである。
【図１０】図１０は、第１の実施形態に係る第１の代表履歴値更新処理の例を示すフローチャートである。
【図１１】図１１は、第１の実施形態に係る第２の代表履歴値更新処理の例を示すフローチャートである。
【図１２】図１２は、第１の実施形態に係る第３の代表履歴値更新処理の例を示すフローチャートである。
【図１３】図１３は、第２の実施形態に係るメモリシステムのリード動作を実行するための機能構成例を示す機能ブロック図である。
【図１４】図１４は、第２の実施形態に係る履歴値管理テーブルの一例を示す図である。
【図１５】図１５は、第２の実施形態に係るリード動作の一例を示すフローチャートである。
【図１６】図１６は、第３の実施形態に係るリード動作の一例を示すフローチャートである。
【発明を実施するための形態】
【０００７】
以下に添付図面を参照して、実施形態に係るメモリシステム、その制御方法及びプログラムを詳細に説明する。なお、以下の実施形態により本発明が限定されるものではない。
【０００８】
（第１の実施形態）
図１は、第１の実施形態に係るメモリシステムの概略構成例を示すブロック図である。図１に示すように、メモリシステム１は、メモリコントローラ１０と、不揮発性メモリ２０と、ＤＲＡＭ２１とを備える。メモリシステム１は、ホスト３０と接続可能であり、図１ではホスト３０と接続された状態が示されている。ホスト３０は、例えば、パーソナルコンピュータ、携帯端末などの電子機器であってよい。
【０００９】
不揮発性メモリ２０は、データを不揮発に記憶する不揮発性メモリであり、例えば、ＮＡＮＤ型フラッシュメモリ（以下、単にＮＡＮＤメモリという）である。以下の説明では、不揮発性メモリ２０としてＮＡＮＤメモリが用いられた場合を例示するが、不揮発性メモリ２０として３次元構造フラッシュメモリ、ＲｅＲＡＭ（Resistance Random Access Memory）、ＦｅＲＡＭ（Ferroelectric Random Access Memory）等のＮＡＮＤメモリ以外のメモリを用いることも可能である。また、不揮発性メモリ２０が半導体メモリであることは必須ではなく、半導体メモリ以外の種々の記憶媒体に対して本実施形態を適用することも可能である。
【００１０】
メモリシステム１は、メモリコントローラ１０と不揮発性メモリ２０とが１つのパッケージとして構成されるメモリカード等であってもよいし、ＳＳＤ（Solid State Drive）等であってもよい。
【００１１】
メモリコントローラ１０は、例えばＳｏＣ（System-On-a-Chip）として構成される半導体集積回路である。以下で説明するメモリコントローラ１０の各構成要素の動作の一部又は全部は、ＣＰＵ（Central Processing Unit）がファームウエアを実行することによって実現されてもよいし、ハードウエアで実現されてもよい。
【００１２】
メモリコントローラ１０は、ホスト３０からの書込み要求に従って不揮発性メモリ２０への書込みを制御する。また、ホスト３０からの読出し要求に従って不揮発性メモリ２０からの読出しを制御する。メモリコントローラ１０は、ホストＩ／Ｆ（ホストインタフェース）１５、メモリＩ／Ｆ（メモリインタフェース）１３、制御部１１、符号化／復号部１４、データバッファ１２、及び、ＤＲＡＭコントローラ１９を備える。ホストＩ／Ｆ１５、メモリＩ／Ｆ１３、制御部１１、符号化／復号部１４およびデータバッファ１２は、内部バス１６で相互に接続されている。
【００１３】
ホストＩ／Ｆ１５は、ホスト３０との間のインタフェース規格に従った処理を実施し、ホスト３０から受信した要求、書込み対象のユーザデータなどを内部バス１６に出力する。また、ホストＩ／Ｆ１５は、不揮発性メモリ２０から読み出されて復元されたユーザデータ、制御部１１からの応答などをホスト３０へ送信する。
【００１４】
メモリＩ／Ｆ１３は、制御部１１の指示に基づいて、不揮発性メモリ２０への書込み処理を行う。また、メモリＩ／Ｆ１３は、制御部１１の指示に基づいて、不揮発性メモリ２０からの読出し処理を行う。
【００１５】
制御部１１は、メモリシステム１の各構成要素を統括的に制御する。制御部１１は、ホスト３０からの要求をホストＩ／Ｆ１５経由で受け付けた場合に、その要求に応じた制御を行う。例えば、制御部１１は、ホスト３０からの書込み要求に応じて、不揮発性メモリ２０へのユーザデータおよびパリティの書き込みをメモリＩ／Ｆ１３へ指示する。また、制御部１１は、ホスト３０からの読出し要求に応じて、不揮発性メモリ２０からのユーザデータおよびパリティの読出しをメモリＩ／Ｆ１３へ指示する。なお、パリティの定義については、後述する。
【００１６】
また、制御部１１は、ホスト３０から書込み要求を受信した場合、データバッファ１２に蓄積されるユーザデータに対して、不揮発性メモリ２０上の格納領域を決定する。すなわち、制御部１１は、ユーザデータの書込み先を管理する。ホスト３０から受信したユーザデータの論理アドレスと該ユーザデータが格納された不揮発性メモリ２０上の格納領域を示す物理アドレスとの対応は、アドレス変換テーブルで管理される。このアドレス変換テーブルは、例えば不揮発性メモリ２０内に格納されており、必要に応じて読み出されてＤＲＡＭ２１等にキャッシュされる。
【００１７】
また、制御部１１は、ホスト３０から読出し要求を受信した場合、読出し要求により指定された論理アドレスを上述のアドレス変換テーブルを用いて物理アドレスに変換し、該物理アドレスからの読出しをメモリＩ／Ｆ１３へ指示する。
【００１８】
ここで、ＮＡＮＤメモリでは、一般に、ページと呼ばれるデータ単位で、書き込みおよび読出しが行われ、ブロックと呼ばれるデータ単位で消去が行われる。本実施形態では、同一のワードラインに接続される複数のメモリセルをメモリセルグループと呼ぶ。各メモリセルは、書込み動作により書き込まれた閾値電圧に基づいてデータを記憶する。メモリセルは、取り得る閾値電圧の状態数に応じてその呼び名が変化する。例えば、取り得る閾値電圧の状態数が２であるメモリセルは、１ビットのデータを保持可能なＳＬＣ（Single Level Cell）と称される。また、取り得る閾値電圧の状態数が４であるメモリセルは、２ビットのデータを保持可能なＭＬＣ（Multiple Level Cell）と称され、取り得る閾値電圧の状態数が８であるメモリセルは、３ビットのデータを保持可能なＴＬＣ（Triple Level Cell）と称され、取り得る閾値電圧の状態数が１６であるメモリセルは、４ビットのデータを保持可能なＱＬＣ（Quad Level Cell）と称される。メモリセルがＳＬＣである場合は、１つのメモリセルグループが１ページに対応する。メモリセルがＭＬＣやＴＬＣやＱＬＣである場合は、１つのメモリセルグループが複数ページに対応する。また、各メモリセルはワード線に接続するとともにビット線にも接続される。したがって、各メモリセルは、ワード線を識別するアドレスとビット線を識別するアドレスとの組合せで識別することが可能である。
【００１９】
データバッファ１２は、メモリコントローラ１０がホスト３０から受信したユーザデータを不揮発性メモリ２０へ記憶するまでに一時格納する。また、データバッファ１２は、不揮発性メモリ２０から読み出したユーザデータをホスト３０へ送信するまでに一時格納する。データバッファ１２には、例えば、ＳＲＡＭ（Static Random Access Memory）やＤＲＡＭ（Dynamic Random Access Memory）などの汎用メモリを用いることができる。
【００２０】
ＤＲＡＭコントローラ１９は、メモリコントローラ１０からＤＲＡＭ２１へのアクセスを制御するコントローラであり、例えばＤＤＲ（Double Data Rate）でのＤＲＡＭ２１へのアクセスを可能とするコントローラである。
【００２１】
ＤＲＡＭ２１は、アドレス変換テーブルや、起動時等に不揮発性メモリ２０の特定の領域から読み出されて展開される各種管理テーブルなどのマスタテーブル（すなわち、スナップショット）や、各種管理テーブルの変更差分であるログ情報などを記憶するワーキングメモリとして使用することができるメモリである。また、ＤＲＡＭ２１は、ホスト３０と不揮発性メモリ２０との間でデータ転送をする際のキャッシュメモリとしても用いられることが可能である。なお、ＤＲＡＭ２１に代えて、ＳＲＡＭ等が用いられてもよい。
【００２２】
ホスト３０から送信されるユーザデータは、内部バス１６に転送されてデータバッファ１２に一旦格納される。符号化／復号部１４は、不揮発性メモリ２０に格納されるユーザデータを符号化して符号語を生成する。符号語には、ユーザデータの他、ユーザデータに発生したエラーを誤り検出符号及び／又は誤り訂正符号に基づいて検出及び／又は訂正するためのパリティが含まれる。また、符号化／復号部１４は、不揮発性メモリ２０から読み出された符号語を復号してユーザデータを復元する。そこで符号化／復号部１４は、符号化器１７と復号器１８を備える。なお、符号化／復号部１４が符号化の対象とするデータには、ユーザデータ以外にも、メモリコントローラ１０内部で用いる制御データ等が含まれてもよい。
【００２３】
以上のような構成を備えるメモリシステム１における書込み処理では、制御部１１は、不揮発性メモリ２０への書込み時に、ユーザデータの符号化を符号化器１７に指示する。その際、制御部１１は、不揮発性メモリ２０におけるライトデータの格納場所を決定し、決定した格納場所をメモリＩ／Ｆ１３へ指示する。符号化器１７は、制御部１１からの指示に基づいて、データバッファ１２上のユーザデータを符号化してライトデータを生成する。生成されたライトデータは、メモリＩ／Ｆ１３を介して不揮発性メモリ２０の指定された格納場所に書き込まれる。なお、符号化器１７の符号化方式としては、例えば、ＬＤＰＣ（Low-Density Parity-Check）符号やＢＣＨ（Bose-Chaudhuri-Hocquenghem）符号やＲＳ（Reed-Solomon）符号を用いた符号化方式を採用することができる。
【００２４】
一方、読出し処理では、制御部１１は、不揮発性メモリ２０からの読出し時に、不揮発性メモリ２０上のアドレスを指定してメモリＩ／Ｆ１３へ読出しを指示する。また、制御部１１は、復号器１８へ復号の開始を指示する。メモリＩ／Ｆ１３は、制御部１１の指示に従って、不揮発性メモリ２０の指定されたアドレスに対する読出しを実行し、この読出しにより得られたリードデータを復号器１８に入力する。そして、復号器１８は、入力されたリードデータを復号して、オリジナルのユーザデータを復元する。
【００２５】
以上のような構成において、メモリコントローラ１０が不揮発性メモリ２０に対して実行を指示するリード動作には、目的やリード時間や信頼性が異なる複数のリード動作が存在する。本実施形態において、不揮発性メモリ２０が実行するリード動作には、少なくとも、読出しに成功するシフト量やリード電圧等を学習しながらデータを読み出すリード動作（以下、学習リードという）と、学習リードによる学習で取得された履歴値に基づいてシフトされたリード電圧を用いて読出しを実行するシフトリード（以下、履歴値リードという）とが存在する。なお、本説明における「読出しに成功する」とは、読み出したデータに対して誤り訂正を実行することでオリジナルのユーザデータの復元に成功することを意味している。
【００２６】
また、学習リードでは、ページ単位で学習した履歴値をワードライン単位又はそれ以上の大きな領域の単位に対する履歴値へと流用することも可能である。例えば、あるリード電圧に対するシフト量を、ほかのリード電圧に流用することができる。
【００２７】
これを、図２に例示するビット割当てテーブルと閾値電圧分布と各ページのリード電圧のセット（以下、リード電圧セットという）とを用いて説明する。図２（ａ）は、ＴＬＣを用いた不揮発性メモリに対して設定された２／３／２コーディングによるビット割当てテーブルの一例を示す図であり、図２（ｂ）は、ＴＬＣを用いた不揮発性メモリの閾値電圧分布の一例を示す図であり、図２（ｃ）は、図２（ａ）に示す２／３／２コーディングによるＴＬＣ書込みが行なわれたメモリセルが構成する各ページを読み出す際に使用するリード電圧セットの一例を示す図である。
【００２８】
図２（ａ）及び図２（ｂ）に示すように、ＴＬＣに対しては、図２（ａ）に示すようなビット割当てテーブルによって、閾値電圧分布の各ステート（図２（ｂ）におけるＥｒステート〜Ｇステート）に対応するデータが与えられている。また、各ステート間には、各ステートを読み分けるためのリード電圧ＶＡ〜ＶＧが設定されている。
【００２９】
そして、図２（ｃ）に示すように、ＵＰＰＥＲページ、ＭＩＤＤＬＥページ及びＬＯＷＥＲページそれぞれの読出しで、それぞれ異なるリード電圧で構成されたリード電圧セットが用いられる。例えば、ＵＰＰＥＲページの読出しでは、ＢステートとＣステートとを読み分けるリード（以下、ＣレベルリードＣＲという）で使用されるリード電圧ＶＣと、ＦステートとＧステートとを読み分けるリード（以下、ＧレベルリードＧＲという）で使用されるリード電圧ＶＧとで構成されたリード電圧セットが用いられる。また、ＭＩＤＤＬＥページの読出しでは、ＡステートとＢステートとを読み分けるリード（以下、ＢレベルリードＢＲという）で使用されるリード電圧ＶＢと、ＣステートとＤステートとを読み分けるリード（以下、ＤレベルリードＤＲという）で使用されるリード電圧ＶＤと、ＥステートとＦステートとを読み分けるリード（以下、ＦレベルリードＦＲという）で使用されるリード電圧ＶＦとで構成されたリード電圧セットが用いられる。さらに、ＬＯＷＥＲページの読出しでは、ＥｒステートとＡステートとを読み分けるリード（以下、ＡレベルリードＡＲという）で使用されるリード電圧ＶＡと、ＤステートとＥステートとを読み分けるリード（以下、ＥレベルリードＥＲという）で使用されるリード電圧ＶＥとで構成されたリード電圧セットが用いられる。
【００３０】
学習リードでは、読み出したデータの誤り訂正に成功する際のリード電圧のシフト量がページ単位で学習される。この学習されたシフト量は、上述したように、ワードライン単位又はそれ以上の大きな領域の単位に対する履歴値へと流用することも可能である。具体的には、例えば、ＴＬＣに対するリード動作では、ＬＯＷＥＲページのリード（例えば、ＡレベルリードとＥレベルリード）で用いたシフト量を、ＵＰＰＥＲページのリード（例えばＣレベルリードとＧレベルリード）に流用することが可能である。その際、Ａレベルリードのシフト量とＥレベルリードのシフト量とが異なる場合には、いずれか一方（例えばＥレベルリード）のシフト量をＣレベルリードとＧレベルリードとに流用することも可能である。
【００３１】
ただし、上記の説明は、ＬＯＷＥＲ／ＭＩＤＤＬＥ／ＵＰＰＥＲなどのページ種別ごとに個別に履歴値を管理することを除外するものではない。なお、履歴値をページ種別ことに管理する場合は、例えばワードライン＃０のＬＯＷＥＲページのリードで個別履歴値が学習済みであっても、ワードライン＃０のＭＩＤＤＬＥページでは未学習ということになる。
【００３２】
また、その他にも、リード動作には、ノーマルリードや、その他のより信頼性が高いリード動作（以下、高信頼性リードという）等が含まれ得る。なお、信頼性が高いとは、読み出されたデータのビットエラーレートがより低いことを意味している。この高信頼性リードには、より強力な誤り訂正符号を用いたリード方式や、より精度の高いシフト値を用いたシフトリードなど、少なくともノーマルリードよりも信頼性の高いリード方式であれば種々のリード方式を適用することができる。また、ノーマルリードとは、読出し時にワードラインに印加するリード電圧として予め設定しておいた基準のリード電圧を用いる通常のリード動作である。なお、ノーマルリードに代えて、又は、ノーマルリードに加えて、ＦＡＳＴリードがリード動作に含まれてもよい。ＦＡＳＴリードとは、例えばノーマルリードよりもワード線に印加するリード電圧の印加時間等を短くすることでリード時間を短縮したリード動作である。そのため、ＦＡＳＴリードとノーマルリードとを併用する場合は、リードシーケンスにおいて、ＦＡＳＴリードをノーマルリードよりも先に実行してもよい。また、ＦＡＳＴリードで使用するリード電圧をシフトすることで、ＦＡＳＴリードでのシフトリードを実現することも可能である。
【００３３】
ノーマルリードは、閾値電圧が変化したメモリセルからの読出しに失敗する確率が高く、高信頼性リードの実行（以下、リトライリードという）が発生する頻度が高い。これに対し、履歴値リードは、データリテンションやリードディスターブ等によって閾値電圧が変化したメモリセルからの読出しも可能であるため、同一ページに対するリトライリードの発生確率（以下、リトライ率という）を低減してリード時間を短縮することが可能であるというメリットを有する。なお、「読出しが可能」とは、読み出したデータの誤り訂正が可能であることを意味している。
【００３４】
また、学習リードには、例えば、シフトテーブルを用いたリード動作(以下、シフトテーブルリードという)や、トラッキングリードなどが存在する。シフトテーブルリードとは、各ページ種別（例えば、ＬＯＷＥＲ／ＭＩＤＤＬＥ／ＵＰＰＥＲページ）に対して複数のリード電圧セットが登録されたシフトテーブルを用意しておき、この複数のリード電圧セットのそれぞれを順次使用してリード動作を実行することで、読出しに成功するリード電圧セットを特定するインデックスを学習するリード動作である。トラッキングリードとは、例えば、リード電圧を所定の刻み幅でシフトしながらリード動作を複数回実行することで、該当ページに含まれる複数のメモリセルにプログラムされた閾値電圧の分布のヒストグラム（以下、単に閾値電圧分布という）を生成し、生成した閾値電圧分布に基づいて、読出しに成功する電圧レベルまでリード電圧をシフトさせるためのシフト量を学習するリード動作である。また、トラッキングリードには、学習をメモリコントローラ10側で行なうリード方式と、不揮発性メモリ２０内部で行なうリード方式（Self-Adjusting Read又はOn-Chip Tracking Readともいう）とが存在するが、本実施形態では何れのリード方式であってもよい。
【００３５】
通常、履歴値リードを採用するメモリコントローラでは、不揮発性メモリ２０の物理アドレス空間を複数の領域に区画し、この領域単位で履歴値が管理される。例えば、１つのワードラインに接続された複数のメモリセルが１つのページを構成している場合には、１又は数ページずつで区画された領域を管理単位とし、それぞれの領域に対して１つずつ履歴値が管理される。
【００３６】
ここで、管理単位である領域を大きくした場合、管理単位内でのページごとの最適なリード電圧の変化量のばらつきや特異な性質を持つページ（例えば３次元構造フラッシュメモリにおける各ブロックの端に位置するワードラインに接続されたメモリセルが構成するページなど）などにより、ある領域に対して設定された履歴値が最適な値から外れてしまう可能性がある。一方で、管理単位を小さくした場合、領域ごとに履歴値を学習する必要があるため、学習回数が増加し、それにより、履歴値の学習時間が長くなり、結果的に、例えば電源復帰後のリード動作がピーク性能に達するまでの時間が長くなってしまう場合が存在する。
【００３７】
そこで本実施形態では、不揮発性メモリ２０のメモリセルをそれぞれ管理単位の大きさが異なる複数の層で構成された階層構造を用いて階層的に管理し、それぞれの層における管理単位で履歴値を階層的に管理することで、学習時間を短縮しつつ、領域ごとに適切な履歴値を設定することを可能にする。なお、以下の説明において、「領域に対して履歴値を設定する」という表現には、未だ履歴値が設定されていない領域に対して新たに履歴値を設定することと、既に履歴値が設定されている領域に対してその履歴値を更新することとの両方のケースを包含するものとする。
【００３８】
具体的には、本実施形態では、不揮発性メモリ２０の物理アドレス空間に対して、２階層以上の階層構造を設定する。それぞれの階層は、他の階層とは異なる大きさの領域で物理アドレス空間が区画されている。例えば、上位層は１つ以上のブロックを単位として領域が設定され、下位層は１つ以上のワードラインを単位として領域が設定される。
【００３９】
以下の説明では、簡略化のため、不揮発性メモリ２０の物理アドレス空間に対して２階層の階層構造を設定し、第１層の管理単位を大領域とし、第２層の管理単位を大領域よりも小さい小領域とした場合を例示する。
【００４０】
図３は、本実施形態に係る階層的に履歴値を管理するテーブル（以下、履歴値管理テーブルという）の一例を示す概念図である。図３に示すように、第１層に属する各大領域には、第２層に属する複数の小領域が対応付けられている。各小領域は、例えば１以上のワードラインで構成されている。また、図３に示す履歴値管理テーブルでは、各大領域に対する履歴値（以下、代表履歴値という）と、各小領域に対する履歴値（以下、個別履歴値という）とが登録されている。ただし、初期状態では、個別履歴値が未学習であるため、小領域の履歴値が登録されていない。その場合、各小領域の履歴値は、例えばヌル（ＮＵＬＬ）とされている。
【００４１】
本実施形態では、以上のように、層ごとに異なる大きさの管理単位を用いて階層的に履歴値が管理された不揮発性メモリ２０において、個別履歴値が登録済みの小領域に含まれるワードラインに対してリード動作を実行する場合には、この小領域の個別履歴値を用いて履歴値リードが実行される。一方、履歴値が未学習の小領域（すなわち、履歴値がＮＵＬＬとされている小領域）に含まれるワードラインに対してリード動作を実行する場合には、この小領域を含む大領域に設定されている代表履歴値を用いて履歴値リードが実行される。これにより、個別履歴値を持たない小領域に対する履歴値リードにおいて履歴値を学習する時間を省略することが可能となるため、リード時間を短縮することが可能となる。
【００４２】
また、適切な履歴値が代表履歴値から外れるような特異な性質を持つワードラインを含む小領域（特異領域ともいう）に対しては、個別に取得される個別履歴値を用いてリード動作を実行することが可能であるため、特異領域に起因して履歴値が最適な値から外れてしまう頻度を低減することが可能となる。その結果、学習完了後の履歴値リードが読出しエラーとなる確率を低減することが可能となる。
【００４３】
ここで、図４及び図５を用いて、ページ、ワードライン、ブロック、プレーン、チップ、論理ブロック、及び、論理ワードラインについて説明する。なお、本説明において、ブロック及びワードラインと論理ブロック及び論理ワードラインとを区別するために、ブロック及びワードラインを物理ブロック及び物理ワードラインと称する場合がある。また、本説明において、チップとは、メモリチップを意味している。
【００４４】
図４に示すように、１つの物理ワードラインが１以上の物理ページで構成されている。例えば、メモリセルをＴＬＣとした場合には、図４に示すように、１つの物理ワードラインがＵＰＰＥＲページとＭＩＤＤＬＥページとＬＯＷＥＲページとの３つの物理ページで構成されている。また、各物理ブロックは、複数の物理ワードラインで構成されており、各プレーンは、複数の物理ブロックで構成されている。さらに、１つのメモリチップには、１つ以上（図４では２つ）のプレーンが設けられている。
【００４５】
そして、図５に示すように、論理ブロックとは、例えば、各チップ及び各プレーンについて物理ブロックを１つずつ選択し、選択した物理ブロックのうち、１つ以上のチャネル及び１つ以上のバンク分の１つ以上のチップの物理ブロックを組にしたものである。メモリシステム１では、この論理ブロック単位で状態遷移や消去が実行される。
【００４６】
また、論理ページとは、論理ブロックを構成する各物理ブロックの１物理ページの集合である。同様に、論理ワードラインとは、論理ブロックを構成する各物理ブロックの１物理ワードラインの集合である。
【００４７】
なお、本説明において、同一の論理ブロック内において、各チップ内の複数プレーンの物理ブロックを束ねた（以下、マルチプレーン化という）ものを物理ブロック組と称する。同様に、一つの論理ブロック内において、各チップ内の各プレーン内の複数の物理ブロックの物理ワードラインをマルチプレーン化したものを物理ワードライン組と称し、各チップ内の各プレーン内の各物理ブロック内の複数の物理ワードラインの物理ページをマルチプレーン化したものを物理ページ組と称する。
【００４８】
また、同一の物理ブロック内において、近接する複数の物理ページを束ねたものを物理ページ群と称し、近接する複数の物理ワードラインを束ねたものを物理ワードライン群と称する。さらに、物理ページ群をマルチプレーン化したものを物理ページ組群と称し、物理ワードライン群をマルチプレーン化したものを物理ワードライン組群と称する。さらに、同一の論理ブロック内において、近接する複数の論理ページを束ねたものを論理ページ群と称し、近接する複数の論理ワードラインを束ねたものを論理ワードライン群と称する。
【００４９】
図３に例示する履歴値管理テーブルにおいて、第１層の管理単位である大領域には、例えば、物理ワードライン、物理ブロック、物理ページ組、物理ワードライン組、物理ブロック組、物理ページ群、物理ワードライン群、物理ページ組群、物理ワードライン組群、論路ブロック、論理ワードライン、論理ワードライン群、論理ページ、論理ページ群などを適用することが可能である。
【００５０】
一方、第２層の管理単位である小領域には、大領域よりも小さい領域という条件を満たすように選択された、例えば、物理ページ、物理ワードライン、物理ブロック、物理ページ組、物理ワードライン組、物理ブロック組、物理ページ群、物理ワードライン群、物理ページ組群、物理ワードライン組群、論理ワードライン、論理ワードライン群、論理ページ、論理ページ群などを適用することが可能である。
【００５１】
以下の説明では、１つのブロックが１つの大領域を構成し、１〜４つのワードラインが１つの小領域を構成する場合を例示する。各大領域を１つのブロックという大きな領域で定義した場合、領域ごとに発生する学習回数をある程度低減することが可能となるため、学習に要する時間を低減することが可能となる。一方、各小領域を１〜４つのワードラインという小さな領域で定義した場合、履歴値（個別履歴値）が最適な値から外れる確率をある程度低減することが可能となるため、リトライ率を低減してリード時間を短縮することが可能となる。
【００５２】
図６は、本実施形態に係る不揮発性メモリ２０が３次元ＮＡＮＤ構造を有するＮＡＮＤメモリである場合のメモリセルアレイの一例を示す断面図である。図７は、図６に例示するメモリセルアレイの物理アドレス空間に対して設定された履歴値管理テーブルの一例を示す図である。
【００５３】
図６に例示するメモリセルアレイは、基板２３０上に、それぞれ４８層の３次元ＮＡＮＤ構造を有する下段ティア２３１Ａと上段ティア２３１Ｂとが２段に重ねられた構造を有している。そこで本実施形態では、図７に示すように、ワードライン＃０〜＃９５で構成された合計９６個のワードラインを、それぞれ１〜４つのワードラインで構成された計２８個の小領域＃０〜＃２７に区分けする。図７に示す履歴値管理テーブルでは、各小領域に履歴値が対応付けられている。なお、図７に示す履歴値管理テーブルでは、代表履歴値の代わりに、各小領域に対して登録されている履歴値が個別履歴値であるか否かを示すメタ情報である個別履歴値フラグが設定されている。この個別履歴値フラグには、例えば２値フラグを用いることができる。その場合、例えば、値が‘１’である個別履歴値フラグは、その小領域に対応付けられた履歴値が個別履歴値であることを示している。一方、値が‘０’である個別履歴値フラグは、その小領域に対応付けられた履歴値が未学習であることを示している。ただし、個別フラグの値が‘０’であっても、履歴値として値が格納されている場合には、その履歴値は代表履歴値であることを示す。一方、履歴値として値が格納されていなければ、その履歴値はヌル（ＮＵＬＬ）データなどの空のデータである。このように、それぞれの小領域に対応する履歴値が個別履歴値であるか代表履歴値であるかを示す個別履歴値フラグを用いた構成でも、履歴値を階層的に管理することが可能である。
【００５４】
また、図７に示す履歴値管理テーブルでは、２段に重ねられた各ティアにおける上端付近又は下端付近の小領域が、各ティアの中腹付近の小領域と比べて、少ないワードラインで区切られている。例えば下段層２３１Ａ及び上段層２３１Ｂそれぞれの最上端又は最下端では、１つのワードライン（すなわち、ワードライン＃０、＃４７、＃４８又は＃９５のワードライン）が小領域の管理単位とされている。これは、各ティアの端付近と中腹付近とでは、空間方向の変化（すなわち、ワードラインアドレスの違い）に対するセル特性の変化（すなわち、セルの特性差）が異なることに起因して、似た特性としてまとめて扱えるワードラインの数（小領域に対応）のサイズが異なるためである。そこで本実施形態では、端付近のワードラインと中腹付近のワードラインとが混在しないように小領域を規定する。これにより、特異領域に起因して履歴値が最適な値から外れてしまう頻度を低減することが可能となる。なお、本実施形態では、異なるティア間で端付近のワードラインが同一の小領域にグループ化されることを許容する。すなわち、１つの小領域を構成する１つ以上のワードラインは、同一ティア内で連続するワードラインである必要はなく、同一ティア内の不連続のワードラインであってもよいし、異なるティアに分散しているワードラインであってもよい。
【００５５】
図７（ａ）に示すように、履歴値の学習が行なわれていない初期状態、例えば電源復帰直後の状態では、履歴値管理テーブルには、各小領域の履歴値として、例えばヌル（ＮＵＬＬ）が登録されている。また、それぞれの個別履歴値フラグには、‘０’が設定されている。
【００５６】
このような初期状態から、例えばワードライン番号＃２０のワードラインの履歴値が学習により求められた場合、図７（ｂ）に示すように、ワードライン番号＃２０のワードラインが属する番号＃６の小領域の履歴値に、学習リードにより得られたワードライン番号＃２０のワードラインの履歴値が格納されると共に、番号＃６の小領域の個別履歴値フラグが‘１’に設定される。これにより、番号＃６の小領域の履歴値が個別履歴値であることが示される。また、番号＃６以外の小領域の履歴値には、学習により得られたワードライン番号＃２０のワードラインの履歴値が格納される。ただし、番号＃６の小領域以外の個別履歴値フラグは、更新されずに‘０’のままである。これにより、番号＃６以外の小領域の履歴値が代表履歴値であることが示される。
【００５７】
その後、例えばワードライン番号＃６９のワードラインの履歴値が学習リードにより求められた場合、図７（ｃ）に示すように、ワードライン番号＃６９のワードラインが属する番号＃２０の小領域の履歴値に、学習により得られたワードライン番号＃６９のワードラインの履歴値が格納されると共に、番号＃２０の小領域の個別履歴値フラグが‘１’に設定される。その結果、番号＃６の小領域の履歴値に加え、番号＃２０の小領域の履歴値が、個別履歴値であることが示される。また、番号＃２０以外の小領域のうち、個別履歴値フラグが‘０’である小領域の履歴値に、学習により得られたワードライン番号＃６９のワードラインの履歴値が格納される。これにより、番号＃６及び＃２０以外の小領域の履歴値が代表履歴値であることが示される。
【００５８】
このように本例では、例えば、個別に学習された小領域の履歴値には、この個別学習により得られた履歴値が個別履歴値として設定され、未学習の小領域に対しては、最新の学習により得られた履歴値が代表履歴値として設定される。このように、未学習の小領域に対して最新の学習により得られた履歴値を代表履歴値として使い回すことで、各ワードラインへの電源復帰後の最初のアクセス時に各ワードラインの履歴値を都度学習する必要が無くなるため、リード時間を大幅に短縮することが可能となる。
【００５９】
なお、図７（ｃ）では、最新の学習リードにより得られた履歴値（ワードライン番号＃６９のワードラインに対する学習リードにより得られた履歴値）で個別履歴値フラグが‘０’である小領域の代表履歴値が更新される場合が例示されているが、これに限定されず、例えば個別履歴値フラグが‘０’である小領域の代表履歴値を最新の学習リードにより得られた履歴値で更新せずに最初に学習リードにより得られた履歴値（図７の例では、ワードライン番号＃２０のワードラインに対する学習リードにより得られた履歴値）を維持する構成など、種々変形することが可能である。なお、個別履歴値フラグが‘０’である小領域について最初の学習リードで得られた代表履歴値を維持する場合では、個別履歴値フラグが‘０’であって履歴値として“ＮＵＬＬ”が格納されている小領域に対して、学習リードにより得られた履歴値による代表履歴値の更新が実行される。
【００６０】
次に、本実施形態に係るメモリシステムのリード動作を実行するための機能構成について、図面を用いて詳細に説明する。図８は、本実施形態に係るメモリシステムのリード動作を実行するための機能構成例を示す機能ブロック図である。図８に示すように、本実施形態に係るメモリシステム１は、履歴値管理部１０１と、読出し制御部１０２とを備えている。履歴値管理部１０１は、履歴値管理テーブル２１１を備える。この履歴値管理テーブル２１１は、例えばＤＲＡＭ２１内に保持される。
【００６１】
以上の構成において、履歴値管理部１０１は、履歴値管理テーブル２１１を用いて履歴値を管理する。履歴値管理部１０１は、例えば、読出し制御部１０２からの要求に応じて、履歴値管理テーブル２１１への新たな履歴値の登録、登録済みの履歴値の更新、読出し対象アドレスで指定されたワードラインを含む領域に設定された履歴値（個別履歴値又は代表履歴値）の応答等を実行する。なお、応答する履歴値が個別履歴値である場合、履歴値管理部１０１は、個別履歴値を読出し制御部１０２へ直接応答してもよい。一方、応答する履歴値が代表履歴値である場合、履歴値管理部１０１は、履歴値管理テーブル２１１から取得した代表履歴値に対して必要に応じて補正を行なった後、補正後の代表履歴値を読出し制御部１０２へ応答してもよい。
【００６２】
なお、履歴値管理部１０１が代表履歴値に対して実行する補正処理には、例えば、読出し対象のワードラインのメモリチップ中の物理位置等に応じた特性の変化を解消することを目的とした補正処理等を適用することができる。このような補正処理では、例えば読出し対象アドレスに対して予め設定された補正方法に従い、代表履歴値が補正される。なお、補正方法としては、例えば、ワードラインアドレスに応じたオフセットを加算する方法や、２個の代表履歴値の間をワードラインアドレスに応じて線形補間する方法等、種々の方法を用いることが可能である。
【００６３】
読出し制御部１０２は、図１に示す構成における制御部１１と、データバッファ１２と、符号化／復号部１４と、メモリＩ／Ｆ１３とで構成され、不揮発性メモリ２０からのデータの読出し、読み出されたリードデータの復号等を実行する。そのために、読出し制御部１０２は、不揮発性メモリ２０の不図示のコマンド処理部に対してリード命令を発行するリード命令発行部１０３と、不揮発性メモリ２０から入力されたリードデータを復号する復号器１８とを備える。また、リード命令発行部１０３は、例えば、履歴値リードの実行を命令するリード命令と、トラッキングリードやシフトテーブルリード等の学習リードの実行を命令するリード命令とを発行する。ただし、リード命令発行部１０３が発行するリード命令は、これらに限定されず、その他の高信頼性リードの実行を命令するリード命令など、適宜追加・変更することが可能である。
【００６４】
つづいて、本実施形態に係るリード時の動作を、図面を参照して詳細に説明する。図９は、本実施形態に係るリード動作の一例を示すフローチャートである。なお、図９に示すリード動作は、例えばホスト３０からリード要求を受信した場合や、パトロールリードやガベージコレクション等のリード動作を伴うイベントが発生した場合に実行される。
【００６５】
図９に示すように、本動作では、読出し制御部１０２は、まず、読出し対象の物理アドレス（以下、読出し対象アドレスという）で指定されるワードラインを含む小領域に対して履歴値が設定されているか否かを判定する（ステップＳ１０１）。具体的には、図８に示すように、読出し制御部１０２から履歴値管理部１０１へ、読出し対象アドレスと共に履歴値要求が通知される（図面中の履歴値要求）。なお、本動作がホスト３０からのリード要求に対する動作である場合、読出し対象の物理アドレスは、リード要求に含まれる論理アドレスをアドレス変換テーブルを用いてアドレス変換することで得ることができる。これに対し、履歴値管理部１０１は、履歴値管理テーブル２１１において、読出し対象アドレスで指定されるワードラインを含む小領域に対して登録されている履歴値が個別履歴値である場合、この個別履歴値を読出し制御部１０２へ直接入力する（図面中の個別履歴値応答）。一方、登録されている履歴値が代表履歴値である場合、履歴値管理部１０１は、履歴値管理テーブル２１１から取得した代表履歴値に対し、例えば読出し対象アドレスに応じた補正を行なった後、補正後の代表履歴値を読出し制御部１０２へ入力する（図面中の補正済み代表履歴値応答）。なお、履歴値が登録されていない場合は、履歴値管理部１０１は、例えば、ヌル（ＮＵＬＬ）の情報を読出し制御部１０２へ入力する（図面中のＮＵＬＬ応答）。
【００６６】
小領域に対して履歴値が設定されていない場合（ステップＳ１０１のＮＯ）、すなわち、履歴値管理部１０１から読出し制御部１０２へＮＵＬＬ応答がされた場合、読出し制御部１０２は、リード命令発行部１０３に対して不揮発性メモリ２０へ、ノーマルリードのリード命令を発行させる。それにより、不揮発性メモリ２０では、ノーマルリードが実行される（ステップＳ１０２）。一方、小領域に対して履歴値が設定されている場合（ステップＳ１０１のＹＥＳ）、読出し制御部１０２は、リード命令発行部１０３に対して不揮発性メモリ２０へ、履歴値リードのリード命令を発行させる。その際、不揮発性メモリ２０へは、履歴値（図面中の個別履歴値又は補正後の代表履歴値）に応じたリード電圧又はそのシフト量も指示される。それにより、不揮発性メモリ２０では、履歴値に応じたリード電圧を用いた履歴値リードが実行される（ステップＳ１０３）。
【００６７】
ステップＳ１０２のノーマルリード、若しくは、ステップＳ１０３の履歴値リードにより読み出されたリードデータは、読出し制御部１０２における復号器１８に入力され、復号器１８において誤り訂正が実行される（ステップＳ１０４）。この誤り訂正に成功した場合（ステップＳ１０５のＹＥＳ）、すなわち、復号器１８においてユーザデータが復元できた場合、復元されたユーザデータが例えばデータバッファ１２（図１参照）へ出力され（ステップＳ１１６）、その後、本動作が終了する。なお、履歴値リードにより読み出されたリードデータの誤り訂正に成功した場合において、履歴値リードにおいて使用した履歴値が代表履歴値であった場合、すなわち、小領域に対して履歴値が設定されているが、その小領域に対して個別履歴値フラグが“０”であった場合、履歴値管理部１０１は、その小領域に対する個別履歴値フラグを“１”に更新することで、その小領域に対して設定されている代表履歴値を個別履歴値に変更してもよい。一方、誤り訂正に失敗した場合（ステップＳ１０５のＮＯ）、本動作はステップＳ１０６へ進む。
【００６８】
ステップＳ１０６では、読出し制御部１０２は、リード命令発行部１０３に対して不揮発性メモリ２０へ、学習リードを実行するためのリード命令を発行させる。それにより、不揮発性メモリ２０では、トラッキングリードやシフトテーブルリード等の学習リードが実行される（ステップＳ１０６）。その際、読出し制御部１０２又は不揮発性メモリ２０では、読出し時に指定したリード電圧若しくはシフト量又は読出しに使用したリード電圧に基づいて、履歴値が特定される（ステップＳ１０７）。
【００６９】
ステップＳ１０６で読み出されたリードデータは、読出し制御部１０２における復号器１８に入力され、復号器１８において誤り訂正が実行される（ステップＳ１０８）。この誤り訂正に成功した場合（ステップＳ１０９のＹＥＳ）、すなわち、復号器１８においてユーザデータが復元できた場合、本動作は、ステップＳ１１０へ進む。一方、誤り訂正に失敗した場合（ステップＳ１０９のＮＯ）、本動作は、ステップＳ１１３へ進む。
【００７０】
ステップＳ１１０では、履歴値管理テーブル２１１において読出し対象のワードラインを含む小領域に対して登録されている個別履歴値が、ステップＳ１０７で学習した履歴値で更新される。具体的には、図８に示すように、読出し制御部１０２が履歴値管理部１０１へ、履歴値更新要求を出力する。その際、読出し制御部１０２は、更新対象の小領域を特定するための情報（すなわち、読出し対象アドレス）も履歴値管理部１０１へ通知する。なお、上述したように、Self-Adjusting Read（On-Chip Tracking Readともいう）等のトラッキングリードによって不揮発性メモリ２０において履歴値が特定されていた場合は、不揮発性メモリ２０から履歴値管理部１０１へ直接、履歴値更新要求が出力されてもよいし、読出し制御部１０２を経由してもよい。
【００７１】
次に、ステップＳ１１０で個別履歴値が更新された小領域の個別履歴値フラグを‘１’に変更する（ステップＳ１１１）。これにより、この小領域に対して登録されている履歴値が個別履歴値であることが、履歴値管理テーブル２１１において管理される。
【００７２】
次に、ステップＳ１１０で個別履歴値が更新された小領域を含む大領域の代表履歴値を更新する処理を実行する（ステップＳ１１２）。なお、この代表履歴値更新処理の具体例については、後述において図１０〜図１２を用いて説明する。その後、復元されたユーザデータが例えばデータバッファ１２（図１参照）へ出力され（ステップＳ１１６）、本動作が終了する。なお、ステップＳ１１６のユーザデータの出力処理と、ステップＳ１１０〜Ｓ１１２の処理とは、並行して実行されてもよい。
【００７３】
一方、ステップＳ１１３では、履歴値リードやトラッキングリードやシフトテーブルリード等よりも信頼性の高いリード動作（高信頼性リード）を実行する。この高信頼性リードにより読み出されたリードデータは、読出し制御部１０２の復号器１８に入力されて誤り訂正が実行される（ステップＳ１１４）。この誤り訂正に成功した場合（ステップＳ１１５のＹＥＳ）、すなわち、復号器１８においてユーザデータが復元できた場合、本動作は、ステップＳ１１０へ進む。一方、誤り訂正に失敗した場合（ステップＳ１１５のＮＯ）、例えば読出し制御部１０２からホスト３０（図１参照）へ、読出しエラーが通知され（ステップＳ１１７）。その後、本動作が終了する。
【００７４】
つづいて、図９のステップＳ１１２における代表履歴値更新処理の具体例について、幾つか例を挙げて説明する。図１０は、本実施形態に係る第１の代表履歴値更新処理の例を示すフローチャートである。図１１は、本実施形態に係る第２の代表履歴値更新処理の例を示すフローチャートである。図１２は、本実施形態に係る第３の代表履歴値更新処理の例を示すフローチャートである。なお、上述した、個別履歴値フラグが‘０’である小領域については最初の学習リードで得られた代表履歴値を維持する動作と、図１０〜図１２を用いて説明する動作とは、それぞれ適宜組み合わせることが可能である。
【００７５】
図１０に例示する第１の代表履歴値更新処理では、上述において触れたように、未学習の小領域に対して最新の学習により得られた履歴値が代表履歴値として設定される。そこで、図１０に示すように、第１の代表履歴値更新処理では、履歴値管理テーブル２１１において、図９のステップＳ１０７で履歴値を学習した小領域を含む大領域に属する小領域のうち、個別履歴値フラグが‘０’である小領域の履歴値を、図９のステップＳ１０７で特定した履歴値で更新し（ステップＳ１２１）、本動作は、図９に示す動作へリターンする。
【００７６】
また、図１１に例示する第２の代表履歴値更新処理では、例えば学習により得られた個別履歴値の平均値が代表履歴値として用いられる。そこで、図１１に示すように、第２の代表履歴値更新処理では、例えば、履歴値管理テーブル２１１において、図９のステップＳ１０７で履歴値を学習した小領域を含む大領域に属する小領域のうち、個別履歴値フラグが‘１’である小領域の個別履歴値を特定し（ステップＳ１３１）、つづいて、特定した個別履歴値の平均値を計算する（ステップＳ１３２）。なお、計算された平均値が少数点以下の数を含む場合は、少数点以下の数に対し、切り上げ、切り捨て、四捨五入等の処理を行なうことで、平均値を決定してもよい。次に、履歴値管理テーブル２１１において、図９のステップＳ１０７で履歴値を学習した小領域を含む大領域に属する小領域のうち、個別履歴値フラグが‘０’である小領域の履歴値が、ステップＳ１３２で算出した平均値で更新され（ステップＳ１３３）、その後、本動作が図９に示す動作へリターンする。
【００７７】
また、図１２に例示する第３の代表履歴値更新処理では、例えば学習により得られた履歴値のうち、最も出現頻度が高い履歴値が代表履歴値として用いられる。そこで、図１２に示すように、第３の代表履歴値更新処理では、例えば、図９のステップＳ１０７で履歴値を学習するたびに、学習した履歴値の出現頻度を、例えば不図示のカウンタを用いて、各大領域について、該大領域に含まれる小領域を単位として計数する（ステップＳ１４１）。次に、計数した出現頻度に従って、履歴値管理テーブル２１１において、図９のステップＳ１０７で履歴値を学習した小領域を含む大領域における最頻の履歴値を特定する（ステップＳ１４２）。そして、履歴値管理テーブル２１１において、図９のステップＳ１０７で履歴値を学習した小領域を含む大領域に属する小領域のうち、個別履歴値フラグが‘０’である小領域の履歴値が、ステップＳ１４２で特定した最頻の履歴値で更新され（ステップＳ１４３）、その後、本動作が図９に示す動作へリターンする。
【００７８】
以上のように、本実施形態によれば、履歴値が未学習の小領域に含まれるワードラインに対してリード動作を実行する場合には、この小領域を含む大領域に設定されている代表履歴値を用いて履歴値リードが実行される。これにより、個別履歴値を持たない小領域に対する履歴値リードにおいて履歴値を学習する時間を省略することが可能となるため、リード時間を短縮することが可能となる。
【００７９】
（第２の実施形態）
次に、第２の実施形態に係るメモリシステム、その制御方法及びプログラムについて、図面を参照して詳細に説明する。第２の実施形態では、履歴値の学習から長時間経過して履歴値の鮮度が低下した場合や、学習時の温度と読出し時の温度との差が大きい場合など、履歴値の有効性の低下が見込まれる場合には、履歴値リードをスキップする、又は、既存の履歴値を初期化して新たに履歴値を取得し直す。以下の説明において、上述した実施形態と同様の構成、動作及び効果については、それを引用することで、重複する説明を省略する。なお、本説明における「鮮度」とは、履歴値の有効性を評価するための一つの指標であり、例えば、履歴値を学習してからの経過時間に依存して低下する指標である。
【００８０】
本実施形態に係るメモリシステムの概略構成例は、第１の実施形態において図１を用いて説明したメモリシステム１と同様の構成であってよい。ただし、本実施形態に係るメモリシステムのリード動作を実行するための機能構成例は、図１３に例示する構成となる。また、本実施形態に係る履歴値管理テーブルは、図１４に例示する履歴値管理テーブル２１２に置き換えられる。
【００８１】
図１３に示すように、本実施形態に係るメモリシステム２は、図８に例示したメモリシステム１と同様の構成に加え、タイマ２０２と、温度センサ２０１とを備える。また、図１４に示すように、本実施形態に係る履歴値管理テーブル２１２は、図７を用いて例示した履歴値管理テーブル２１１と同様の構成に加え、各小領域に対し、更新日時と、学習時温度とが対応付けられている。
【００８２】
履歴値管理部１０１は、例えば、タイマ２０２を参照することで、不揮発性メモリ２０で学習された履歴値が読出し制御部１０２を介して入力された日時、又は、履歴値管理テーブル２１２内の履歴値を更新した日時を特定する。そして履歴値管理部１０１は、図１４に示すように、特定した日時（以下、更新日時という）をＤＲＡＭ２１内の履歴値管理テーブル２１２における更新した履歴値に対応付けて登録する。
【００８３】
また、本実施形態では、履歴値を学習した際の温度（以下、学習時温度という）が、不揮発性メモリ２０の温度センサ２０１から履歴値管理部１０１へ通知される。履歴値管理部１０１は、図１４に示すように、通知された学習時温度をＤＲＡＭ２１内の履歴値管理テーブル２１２における更新した履歴値に対応付けて登録する。
【００８４】
つづいて、本実施形態に係るリード時の動作を、図面を参照して詳細に説明する。図１５は、本実施形態に係るリード動作の一例を示すフローチャートである。なお、図１５に示す動作について、図９に示す動作と同様の動作については、同一の符号を付し、その詳細な説明を省略する。
【００８５】
図１５に示すように、本動作では、まず、図９のステップＳ１０１と同様に、読出し対象アドレスで指定されるワードラインを含む小領域に対して履歴値が設定されているか否かが判定される。その際、読出し制御部１０２には、応答として、履歴値（図面中の個別履歴値又は補正後の代表履歴値）と共に、更新日時及び学習時温度の情報も通知される。
【００８６】
次に、小領域に対して履歴値が設定されている場合（ステップＳ１０１のＹＥＳ）、読出し制御部１０２は、タイマ２０２を参照することで、現在日時を特定し、特定した現在日時と履歴値と共に通知された更新日時とから経過時間を計算し、計算した経過時間が予め設定しておいた所定時間未満であるか否かを判定する（ステップＳ２０１）。なお、所定時間は、履歴値の有効性を維持できる程度に履歴値の鮮度が保たれる時間等であってよい。
【００８７】
経過時間が所定時間以上であった場合（ステップＳ２０１のＮＯ）、読出し制御部１０２は、読出し対象アドレスで指定されるワードラインを含む小領域に対して登録されている履歴値の初期化を履歴値管理部１０１へ要求する。これに対し、履歴値管理部１０１は、履歴値管理テーブル２１２において読出し対象アドレスで指定されるワードラインを含む小領域に対して登録されている履歴値を初期化して（ステップＳ２０３）、ステップＳ１０２へ進み、第１の実施形態と同様にして以降の動作を実行する。なお、初期化された履歴値は、未学習の履歴値（例えばＮＵＬＬ）として管理される。
【００８８】
また、経過時間が所定時間未満であった場合（ステップＳ２０１のＹＥＳ）、読出し制御部１０２は、つづいて、不揮発性メモリ２０内の温度センサ２０１から現在の温度を取得し、取得した現在温度と、履歴値と共に通知された学習時の温度とから温度差を計算し、計算した温度差が予め設定しておいた所定温度差未満であるか否かを判定する（ステップＳ２０２）。なお、所定温度差は、履歴値の有効性を維持できる程度の温度差であってよい。また、現在の温度を取得するタイミングは、ステップＳ２０２の実行中である必要はなく、例えば、ステップＳ１０１よりも前のタイミングで予め取得しておく方法や、定期的に温度を測定して現在の温度として保持しておく方法など、種々変形することが可能である。
【００８９】
温度差が所定温度差以上であった場合（ステップＳ２０２のＮＯ）、本動作は、ステップＳ２０３へ進み、履歴値管理テーブル２１２において読出し対象アドレスで指定されるワードラインを含む小領域に対して登録されている履歴値を初期化して、ステップＳ１０２へ進み、第１の実施形態と同様にして以降の動作を実行する。一方、温度差が所定温度差未満であった場合（ステップＳ２０２のＹＥＳ）、本動作は、ステップＳ１０３へ進み、第１の実施形態と同様にして以降の動作を実行する。なお、図１５では、温度差が所定温度差以上であった場合（ステップＳ２０２のＮＯ）、次にステップＳ２０３を実行するように構成されていたが、これに限定されず、例えばステップＳ２０３をスキップしてステップＳ１０２が実行されるなど、種々変形することが可能である。また、図１５において、ステップＳ２０１とステップＳ２０２とは、実行順序が逆であってもよい。
【００９０】
以上のように、本実施形態によれば、履歴値の学習から長時間経過して履歴値の鮮度が低下した場合や、学習時の温度と読出し時の温度との差が大きい場合など、履歴値の有効性の低下が見込まれる場合には、既存の履歴値が初期化されて新たに履歴値を取得し直される。それにより、読出しに成功する可能性が低い履歴値リードの実行を回避することが可能となるため、結果的に、リード時間を短縮することが可能となる。
【００９１】
なお、上述した説明では、履歴値の有効性を判断するための属性値として、学習からの経過時間や学習時の温度との温度差を例示したが、これらに限定されず、履歴値の信頼性を推定することが可能な種々の属性値を用いて履歴値の有効性を判断するように構成されてもよい。
【００９２】
その他の構成、動作及び効果は、上述した実施形態と同様であってよいため、ここでは詳細な説明を省略する。
【００９３】
（第３の実施形態）
次に、第３の実施形態に係るメモリシステム、その制御方法及びプログラムについて、図面を参照して詳細に説明する。上述した実施形態では、例えばホスト３０からリード要求を受信した際やパトロールリードやガベージコレクション等のリード動作を伴うイベントが発生した際に必要に応じて履歴値を学習する場合について、例を挙げて説明した。これに対し、第３の実施形態では、メモリシステムの電源復帰時や休止期間中に必要に応じて履歴値を学習する場合について説明する。なお、以下の説明において、上述した実施形態と同様の構成、動作及び効果については、それを引用することで、重複する説明を省略する。
【００９４】
本実施形態に係るメモリシステムの概略構成例は、第１の実施形態において図１を用いて説明したメモリシステム１と同様の構成であってよい。また、本実施形態に係るメモリシステムのリード動作を実行するための機能構成例は、図８又は図１３に例示した構成と同様であってよい。
【００９５】
つづいて、メモリシステム１の電源復帰時やホスト３０からのアクセスが無い休止（Ｉｄｌｅ）期間中に実行される本実施形態に係るリード動作を、図面を参照して詳細に説明する。図１６は、本実施形態に係るリード動作の一例を示すフローチャートである。
【００９６】
図１６に例示するリード動作は、例えば、メモリシステム１の電源復帰時や、ホスト３０からメモリシステム１へのアクセスが所定期間無い休止(Idle)期間中に実行される。図１６に示すように、本動作では、まず、履歴値管理部１０１が、管理されている全ての大領域に対して代表履歴値を学習済みであるか否かを判定する（ステップＳ３０１）。なお、図７又は図１４に例示する履歴値管理テーブル２１１／２１２である場合には、全ての大領域に対して代表履歴値を学習済みであるか否かが判定される。全ての大領域に対して代表履歴値を学習済みである場合（ステップＳ３０１のＹＥＳ）、本動作は、ステップＳ３０５へ進む。一方、代表履歴値が未学習の大領域が存在する場合（ステップＳ３０１のＮＯ）、履歴値管理部１０１は、代表履歴値が未学習の大領域を１つ選択し、この大領域に属する小領域に含まれる１又は複数のワードラインに対する学習リードの実行を読出し制御部１０２に要求する。これに対し、読出し制御部１０２のリード命令発行部１０３は、指定された学習対象のワードラインに対する学習リード命令を不揮発性メモリ２０へ発行する。これにより、不揮発性メモリ２０において、学習対象のワードラインに対する学習リードが実行される（ステップＳ３０２）。
【００９７】
次に、履歴値管理部１０１は、学習リードで学習された履歴値を不揮発性メモリ２０又は読出し制御部１０２から取得し、履歴値管理テーブルにおける学習対象のワードラインを含む小領域の個別履歴値を、取得した履歴値で更新する（ステップＳ３０３）。そして、履歴値管理部１０１は、学習対象のワードラインを含む小領域が属する大領域の代表履歴値を更新する代表履歴値更新処理を実行して（ステップＳ３０４）、再度、ステップＳ３０１を実行する。なお、代表履歴値更新処理は、上述において図１０〜図１２を用いて例示した第１〜第３の代表履歴値更新処理のいずれであってもよい。
【００９８】
ステップＳ３０５では、ホスト３０からメモリシステム１へリード要求などのアクセスがあったか否かが判定される。なお、ステップＳ３０５では、パトロールリードやガベージコレクション等のリード動作を伴うイベントが発生したか否かについても判定されてよい。ホスト３０からのアクセス等があった場合（ステップＳ３０５のＹＥＳ）、ホスト３０からの要求を優先して実行するために、本動作は、ホスト３０からのアクセス等がなくなるまで一時的に処理の進行を停止する。一方、ホスト３０からのアクセス等がない場合（ステップＳ３０５のＮＯ）、履歴値管理部１０１は、履歴値管理テーブルにおける未選択の大領域を１つ選択し（ステップＳ３０６）、選択した大領域に属する全ての小領域に対して個別値を学習済みであるか否かを判定する（ステップＳ３０７）。選択した大領域に属する全ての小領域に対して個別値を学習済みである場合（ステップＳ３０７のＹＥＳ）、本動作は、ステップＳ３１２へ進む。
【００９９】
一方、ステップＳ３０７において、選択した大領域に属する小領域に個別値を学習済みでない小領域が存在する場合（ステップＳ３０７のＮＯ）、履歴値管理部１０１は、選択中の大領域に属する小領域のうち、個別値が未学習の小領域を１つ選択し、この小領域に含まれる１又は複数のワードラインに対する学習リードの実行を読出し制御部１０２に要求する。これに対し、読出し制御部１０２のリード命令発行部１０３は、指定された学習対象のワードラインに対する学習リード命令を不揮発性メモリ２０へ発行する。これにより、不揮発性メモリ２０において、学習対象のワードラインに対する学習リードが実行される（ステップＳ３０８）。つづいて、履歴値管理部１０１は、学習リードで学習された履歴値を不揮発性メモリ２０又は読出し制御部１０２から取得し、履歴値管理テーブルにおける学習対象のワードラインを含む小領域の個別値を、取得した履歴値で更新する（ステップＳ３０９）。
【０１００】
次に、例えばステップＳ３０５と同様に、メモリシステム１へホスト３０からのアクセス等があったか否かが判定される（ステップＳ３１０）。ホスト３０からのアクセス等があった場合（ステップＳ３１０のＹＥＳ）、本動作はステップＳ３１２へ進む。一方、ホスト３０からのアクセス等がない場合（ステップＳ３１０のＮＯ）、履歴値管理部１０１は、ステップＳ３０６で選択した大領域に属する全ての小領域に対して個別値を学習済みであるか否かを判定する（ステップＳ３１１）。選択した大領域に属する全ての小領域に対して個別値を学習済みである場合（ステップＳ３１１のＹＥＳ）、本動作は、ステップＳ３１２へ進む。一方、小領域に個別値を学習済みでない小領域が存在する場合（ステップＳ３１１のＮＯ）、履歴値管理部１０１は、ステップＳ３０８へ戻り、以降の動作を実行する。
【０１０１】
ステップＳ３１２では、履歴値管理部１０１は、ステップＳ３０６において全ての大領域を選択済みか否かを判定し（ステップＳ３１２）、選択済みである場合（ステップＳ３１２のＹＥＳ）、本動作を終了する。一方、選択済みでない場合（ステップＳ３１２のＮＯ）、履歴値管理部１０１は、ステップＳ３０５へ戻り、以降の動作を実行する。
【０１０２】
以上のように、本実施形態によれば、メモリシステム１の電源復帰時や休止期間（Ｉｄｌｅ）中に、バックグランド処理として、履歴値を学習することが可能となる。また、本実施形態によれば、先に、大領域の代表履歴値を全部学習しその後、小領域の個別履歴値を学習していくという順序で学習が実行される。大領域の代表履歴値学習は、例えば、最優先で実行される一方、小領域の個別履歴値学習は、ホストアクセスを優先しながら実行される。ただし、大領域の代表履歴値学習は必ずしも最優先で行なわれる必要はなく、ホストアクセスを優先しながら実行されてもよい。その結果、ホスト３０からのリード要求時に学習リードが発生する確率を低減することが可能となるため、信頼性の低下を低減しつつリード時間を短縮することが可能となる。
【０１０３】
なお、図１６に例示するリード動作は、ホスト３０からのアクセス等が発生するまで（ステップＳ３０５のＹＥＳ，ステップＳ３１０のＹＥＳ）、全ての大領域に対する代表履歴値の学習、及び、全ての小領域に対する個別値の学習を実行するように構成されているが、このような構成に限定されない。例えば、代表履歴値及び／又は個別履歴値の更新回数に上限を設定しておき、更新回数に上限に達した場合に、図１６に示す動作が終了されてもよい。
【０１０４】
その他の構成、動作及び効果は、上述した実施形態と同様であってよいため、ここでは詳細な説明を省略する。
【０１０５】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１０６】
１，２…メモリシステム、１０…メモリコントローラ、１１…制御部、１２…データバッファ、１３…メモリＩ／Ｆ、１４…符号化／復号部、１５…ホストＩ／Ｆ、１６…内部バス、１７…符号化器、１８…復号器、１９…ＤＲＡＭコントローラ、２０…不揮発性メモリ、２１…ＤＲＡＭ、３０…ホスト、１０１…履歴値管理部、１０２…読出し制御部、１０３…リード命令発行部、２０１…温度センサ、２０２…タイマ、２１１，２１２…履歴値管理テーブル。 
【図１】
2019169217.tif 000003
【図２】
2019169217.tif 000004
【図３】
2019169217.tif 000005
【図４】
2019169217.tif 000006
【図５】
2019169217.tif 000007
【図６】
2019169217.tif 000008
【図７】
2019169217.tif 000009
【図８】
2019169217.tif 000010
【図９】
2019169217.tif 000011
【図１０】
2019169217.tif 000012
【図１１】
2019169217.tif 000013
【図１２】
2019169217.tif 000014
【図１３】
2019169217.tif 000015
【図１４】
2019169217.tif 000016
【図１５】
2019169217.tif 000017
【図１６】
2019169217.tif 000018