(57)【要約】【課題】メモリセルからのデータの読み出し時のエラーを適切に抑制可能とする。【解決手段】メモリシステムは、不揮発性メモリと、メモリコントローラと、を備える。不揮発性メモリは、複数の第１セルを含む第１ワードラインと、第１ワードラインに隣接し、複数の第２セルを含む第２ワードラインと、を含む。メモリコントローラは、複数の第２セルそれぞれの閾値電圧を表す複数の隣接電圧に応じて、複数の第１セルに対して用いる読み出し電圧を決定する。メモリコントローラは、決定された複数の読み出し電圧を用いて、第１ワードラインからデータを読み出す。【選択図】図１
2019153366.tif 000002
【特許請求の範囲】
【請求項１】
複数の第１セルを含む第１ワードラインと、前記第１ワードラインに隣接し、複数の第２セルを含む第２ワードラインと、を含む不揮発性メモリと、
複数の前記第２セルそれぞれの閾値電圧を表す複数の隣接電圧に応じて、複数の前記第１セルに対して用いる読み出し電圧を決定し、
決定された複数の前記読み出し電圧を用いて、前記第１ワードラインからデータを読み出す、
メモリコントローラと、
を備えるメモリシステム。
【請求項２】
前記メモリコントローラは、
複数の前記第１セルを、複数の前記隣接電圧に応じて複数の第１クラスに分類し、
前記第１クラスに属するセルの閾値電圧の分布に基づいて前記読み出し電圧を決定する、
請求項１に記載のメモリシステム。
【請求項３】
前記メモリコントローラは、前記第１クラスに属するセルの閾値電圧ごとのセル数を示すヒストグラムに基づいて前記読み出し電圧を決定する、
請求項２に記載のメモリシステム。
【請求項４】
前記メモリコントローラは、複数の前記隣接電圧と、対応する前記第１クラスに属するセルの読み出し電圧との関係を求め、前記関係を用いて前記読み出し電圧を決定する、
請求項２に記載のメモリシステム。
【請求項５】
前記メモリコントローラは、
さらに、複数の前記隣接電圧に応じて、複数の前記第１セルを前記第１クラスよりも多い複数の第２クラスに分類し、
前記関係を用いて前記第２クラスに対して用いる読み出し電圧を決定する、
請求項４に記載のメモリシステム。
【請求項６】
前記メモリコントローラは、複数の前記第１クラスの少なくとも一部に対して同一の読み出し電圧を設定することにより、予め定められた個数以下の読み出し電圧を決定する、
請求項２に記載のメモリシステム。
【請求項７】
前記メモリコントローラは、
複数の前記読み出し電圧それぞれを用いて前記第１ワードラインから読み出されたデータに対して、複数の前記第１クラスに応じて定められる複数のマスクを適用し、複数のマスクの適用結果を統合した出力データを生成する、
請求項２に記載のメモリシステム。
【請求項８】
前記第１セルは、前記第１ワードラインに含まれるセルのうち少なくとも一部である、
請求項１に記載のメモリシステム。
【請求項９】
決定された前記読み出し電圧を示す情報を記憶する記憶部をさらに備え、
前記メモリコントローラは、前記記憶部に記憶された前記読み出し電圧を用いて、前記第１ワードラインからデータを読み出す、
請求項１に記載のメモリシステム。
【請求項１０】
前記メモリコントローラは、データのビット数に応じた複数の読み出し位置に対応する複数の読み出し電圧に含まれる第１電圧を、複数の前記読み出し電圧に含まれる第２電圧に基づく内挿または外挿により決定する、
請求項１に記載のメモリシステム。
【請求項１１】
複数の第１セルを含む第１ワードラインに隣接する第２ワードラインに含まれる複数の第２セルそれぞれの閾値電圧を表す複数の隣接電圧に応じて、複数の前記第１セルに対して用いる読み出し電圧を決定する決定ステップと、
決定された複数の前記読み出し電圧を用いて、前記第１ワードラインからデータを読み出す読み出しステップと、
を含む読み出し方法。
【請求項１２】
コンピュータを、
複数の第１セルを含む第１ワードラインに隣接する第２ワードラインに含まれる複数の第２セルそれぞれの閾値電圧を表す複数の隣接電圧に応じて、複数の前記第１セルに対して用いる読み出し電圧を決定する決定ステップと、
決定された複数の前記読み出し電圧を用いて、前記第１ワードラインからデータを読み出す読み出しステップ、
を実行させるためのプログラム。
【請求項１３】
複数の第１セルを含む第１ワードラインに隣接する第２ワードラインに含まれる複数の第２セルそれぞれの閾値電圧を表す複数の隣接電圧に応じて、複数の前記第１セルに対して用いる読み出し電圧を決定し、
決定された複数の前記読み出し電圧を用いて、前記第１ワードラインからデータを読み出す、
メモリコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、メモリシステム、読み出し方法、プログラム、およびメモリコントローラに関する。
【背景技術】
【０００２】
ＳＳＤ（Solid  State  Drive）やメモリカードに使われるＮＡＮＤフラッシュメモリの記憶密度の向上に伴い、その信頼性が問題になっている。例えば、微細化によってメモリセル間の距離が小さくなれば、メモリセルに閾値電圧を書き込む際に隣接するメモリセル間の干渉（ＣＣＩ：Cell-to-Cell  Interference）によってメモリセルの閾値電圧が影響を受ける。
【０００３】
チャージトラップ型のＮＡＮＤフラッシュメモリ等では、隣接するメモリセル（隣接セル）との閾値電圧の差分に応じて、メモリセルに蓄積された電荷が隣接セルへと移動する現象（電荷の横抜けと呼ぶ）が知られている。電荷の横抜けについては、ＣＣＩと同様に、隣接セルの閾値電圧によって、閾値電圧の変化量（以下、隣接影響量と呼ぶ）が異なる。一方、電荷の横抜けは、ＣＣＩとは異なり、時間とともに隣接影響量が変化するという特徴をもつ。
【０００４】
メモリセルから読み出しを行う際、このメモリセルに隣接するメモリセルのデータに応じて異なる条件で読み出しを行うことで、ＣＣＩによる影響を低減する手法が知られている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許第３９１３７０４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、従来技術では、メモリセルからのデータの読み出し時のエラーを適切に抑制できない場合があった。例えば、上述のようにチャージトラップ型のＮＡＮＤフラッシュメモリでは、電荷の横抜けの存在により、隣接影響量が時間とともに変化する。このため、ＣＣＩによる影響を低減する従来の手法を適用しても、エラーを精度よく低減することができない場合があった。
【課題を解決するための手段】
【０００７】
実施形態のメモリシステムは、不揮発性メモリと、メモリコントローラと、を備える。不揮発性メモリは、複数の第１セルを含む第１ワードラインと、第１ワードラインに隣接し、複数の第２セルを含む第２ワードラインと、を含む。メモリコントローラは、複数の第２セルそれぞれの閾値電圧を表す複数の隣接電圧に応じて、複数の第１セルに対して用いる読み出し電圧を決定する。メモリコントローラは、決定された複数の読み出し電圧を用いて、第１ワードラインからデータを読み出す。
【図面の簡単な説明】
【０００８】
【図１】メモリシステムの構成例を示すブロック図。
【図２】不揮発性メモリのメモリアレイの構造を説明する図。
【図３】不揮発性メモリでのデータの割り当て方法の一例を示す図。
【図４】不揮発性メモリのメモリセルの構造例を示す断面図。
【図５】電荷の横抜けの影響を説明するための図。
【図６】読み出し電圧決定処理のフローチャート。
【図７】読み出し処理のフローチャート。
【図８】変形例の読み出し電圧の決定方法を説明する図。
【発明を実施するための形態】
【０００９】
以下、添付図面を参照しながら、実施形態のメモリシステム、読み出し方法、プログラム、およびメモリコントローラについて詳細に説明する。なお、以下の説明において、同様の機能を持つ構成要素については同一の符号を付して、重複した説明を適宜省略する。
【００１０】
本実施形態にかかるメモリシステムは、読み出し処理を実行する前に、読み出し対象となるワードラインに隣接するワードラインに含まれるセルの閾値電圧（隣接電圧）に応じて、読み出し対象となるワードラインの各セルのデータを読み出すときに用いる電圧（読み出し電圧）を決定する。例えば、隣接するワードラインに含まれるセルの閾値電圧の大きさに応じて、複数の読み出し電圧が決定される。読み出し処理の実行時には、隣接するワードラインのセルの閾値電圧に対応する読み出し電圧を用いて、読み出し対象となるワードラインの各セルからデータが読み出される。このような構成により、データの読み出し時のエラーをより適切に抑制することが可能となる。
【００１１】
図１は、本実施形態に係るメモリシステム１の構成例を示すブロック図である。図１に示すメモリシステム１は、不揮発性メモリ２とコントローラ３とＤＲＡＭ（Dynamic  Random  Access  Memory）４を備え、ホストＣＰＵ１００からの命令に従って動作する。不揮発性メモリ２は、例えばＮＡＮＤフラッシュメモリである。
【００１２】
ホストＣＰＵ１００からメモリシステム１への書き込み命令や読み出し命令は、コントローラ３に送られる。コントローラ３は、ホストＣＰＵ１００からの命令に従って不揮発性メモリ２を制御し、不揮発性メモリ２にデータを書き込んだり、不揮発性メモリ２からデータを読み出したりする。なお、図１では不揮発性メモリ２とコントローラ３とが１対１に対応している例を示しているが、コントローラ３が複数の不揮発性メモリ２を制御する構成であってもよい。
【００１３】
コントローラ３は、不揮発性メモリコントローラ５とホストコントローラ６とを備える。コントローラ３またはコントローラ３内の不揮発性メモリコントローラ５が、本実施形態に係るメモリコントローラに相当する。
【００１４】
ホストコントローラ６は、ホストＣＰＵ１００から発行される命令に従ってデータの送受信を行う。具体的には、ホストコントローラ６では、ホストＣＰＵ１００が指し示すアドレス情報（一般にＬＢＡ：Logical  Block  Addressと呼ばれる）を不揮発性メモリ２の物理アドレス空間に変換するような処理が行われる。
【００１５】
一方、不揮発性メモリコントローラ５は、ホストコントローラ６から送られる信号に基づいて、不揮発性メモリ２を制御する。具体的には、不揮発性メモリコントローラ５は、不揮発性メモリ２に対し、コマンドおよびアドレスを送出して、データの書き込みや読み出しを行う。
【００１６】
不揮発性メモリコントローラ５は、書き込み部１０と、読み出し部２０と、分類部３０と、決定部４０と、生成部５０とを備える。不揮発性メモリコントローラ５は、ＥＣＣ（Error  Correction  Code）処理部６０をさらに備えてもよい。
【００１７】
書き込み部１０は、不揮発性メモリ２に対してコマンドやアドレス情報を送出したり、書き込むべきデータを送出したりすることにより、不揮発性メモリ２に対してデータを書き込む。ホストＣＰＵ１００から書き込みデータとして送られてきたデータは、ＥＣＣ処理部６０にてエラー訂正符号が付加されてよい。なお、エラー訂正符号を付加した後にデータを乱数化するような処理が付加されてもよい。
【００１８】
不揮発性メモリ２に対するデータの書き込みは、アドレス情報により指定されたメモリセル群の個々のメモリセルの閾値電圧を、そのデータ（以下、“書き込みデータ”と呼ぶ）に対応した電圧レベルに設定することにより行われる。すなわち、書き込みデータは、メモリセル群の個々のメモリセルの閾値電圧に応じて記憶される。
【００１９】
読み出し部２０は、不揮発性メモリ２に対してコマンドやアドレス情報を送出することにより、不揮発性メモリ２からデータを読み出す。不揮発性メモリ２から読み出したデータは、ＥＣＣ処理部６０にてエラー訂正が行われてもよい。
【００２０】
分類部３０は、読み出し対象となるワードライン（対象ワードライン、第１ワードライン）に含まれる複数のセル（第１セル）を、第１ワードラインに隣接するワードライン（隣接ワードライン、第２ワードライン）に含まれる複数のセル（隣接セル、第２セル）の閾値電圧に応じて、複数のクラス（第１クラス）に分類する。
【００２１】
決定部４０は、メモリセル群からのデータの読み出しに用いる電圧（読み出し電圧）を決定する。本実施形態では、決定部４０は、分類されたクラス（第１クラス）に属するセルの閾値電圧の分布に基づいて、各クラスに対して用いる読み出し電圧を決定する。閾値電圧の分布は、例えば、各クラスに属するセルの閾値電圧ごとのセル数を示すヒストグラムである。決定部４０は、ヒストグラムを用いる方法以外の方法で読み出し電圧を決定してもよい。例えば決定部４０は、閾値電圧ごとのセル数から線形演算により読み出し電圧を決定してもよい。決定部４０の動作の詳細については後述する。
【００２２】
なお、分類部３０および決定部４０により、読み出し電圧を決定する処理は、読み出し部２０によりデータが読み出される処理（読み出し処理）の前に実行される。
【００２３】
読み出し部２０は、このようにして決定された読み出し電圧を用いて、読み出し対象となるワードラインのメモリセル群からデータを読み出す。例えば読み出し部２０は、分類された複数のクラスのうち、隣接するワードラインに含まれるセルの閾値電圧に対応するクラスに対して決定された読み出し電圧を用いて、読み出し対象となるワードラインからデータを読み出す。
【００２４】
生成部５０は、読み出されたデータに基づき、読み出し結果としてホストＣＰＵ１００などに出力する出力データを生成する。例えば生成部５０は、複数のクラスに対して決定された複数の読み出し電圧それぞれを用いて読み出されたデータに対して、各クラスに対して定められる複数のマスクを適用し、複数のマスクの適用結果を統合した出力データを生成する。出力データの生成処理の詳細は後述する。
【００２５】
不揮発性メモリ２は、コントロール部７と、データバッファ８と、メモリアレイ９とを備える。コントロール部７は、コントローラ３から発行されるコマンドやアドレス情報を解釈し、データバッファ８やメモリアレイ９を制御する。書き込みデータはデータバッファ８で一時的に蓄えられた後に、メモリアレイ９に書き込まれる。読み出しの場合には、メモリアレイ９から読み出されたデータがデータバッファ８で一時的に保存され、コントローラ３に順次送られる。
【００２６】
ＤＲＡＭ４は、メモリシステム１による各種処理で用いられる各種データを記憶する記憶部である。例えばＤＲＡＭ４は、決定された読み出し電圧を示す情報を記憶する。なお、メモリシステム１は、ＤＲＡＭ４の代わりに、ＳＲＡＭ（Static  Random  Access  Memory）を備え、用いてもよい。または、ＤＲＡＭ４の代わりとして、不揮発性メモリ２の一部を用いてもよい。
【００２７】
図２は、不揮発性メモリ２のメモリアレイ９の構造を説明する図である。メモリアレイ９は、図２に示すように、複数のトランジスタ（各トランジスタが“メモリセル”と呼ばれる）を直列に並べたＮＡＮＤストリングと呼ばれる回路が複数集まって構成される。１つのＮＡＮＤストリングのことをビットライン（ＢＬ）と呼ぶ。複数のビットラインの同一位置にあるトランジスタのゲート電極は、ワードライン（ＷＬ）と呼ばれる線で互いに接続されている。図２ではＢＬ１〜ＢＬ４の４つのビットラインと、ＷＬ１〜ＷＬ６の６つのワードラインのみを図示しているが、実際にはビットラインおよびワードラインはより多く存在し、多数のメモリセルがアレイ状に配置された構成となっている。
【００２８】
データは、メモリセル（トランジスタ）の電荷蓄積層に対し電荷を注入することで書き込まれる。電荷を蓄積すると、蓄積された電荷量に応じて、メモリセルの閾値電圧が変化する。データを読み出す場合、読み出し対象となるワードラインに電圧（読み出し電圧）を印加し、残りのワードラインに読み出しパス電圧（Ｖｒｅａｄ）を印加する。メモリセルの閾値電圧が読み出し電圧よりも小さい場合、ビットライン全体が通電可能（ＯＮ）状態となり、そうでない場合は、ビットラインが通電不可能（ＯＦＦ）状態となる。不揮発性メモリ２では、各ビットラインの通電の有無をセンスアンプにより取得することで、メモリセルからデータを読み出す。
【００２９】
不揮発性メモリ２では、閾値電圧が可変であるメモリセル（トランジスタ）それぞれに対し１ビット〜４ビット程度のデータが記録される。各セルに２以上のビットを記録する場合、各閾値レベルに対してビット数分のデータが割り当てられる。
【００３０】
図３は、不揮発性メモリ２でのデータの割り当て方法の一例を示す図である。
例えば、セルあたり２ビットを記録する場合、図３の例に示すように、４種類の閾値レベルに対して、それぞれ２ビットのシンボルが割り当てられる。読み出しを行う場合、必要に応じて複数の読み出し電圧で読み出しが行われ、データが読み出される。図３の例では、Ｌｏｗｅｒページを読み出す場合、読み出し電圧＝ＶＢとして１回の読み出しを行えばよい。一方、Ｕｐｐｅｒページを読み出す場合は、読み出し電圧＝ＶＡおよびＶＣの２パターンにて読み出しが行われ、データが取得される。
【００３１】
図４は、不揮発性メモリ２のメモリセルの構造例を示す断面図である。近年の３次元型の不揮発性メモリでは、図４に示すようなチャージトラップ型のメモリセルが用いられる。チャージトラップ型のメモリセルは、基板５１と、トンネル層５２と、チャージトラップ層５３と、絶縁層５４と、制御ゲート５５とがこの順に積層された構造となっている。この構造では、チャージトラップ層５３に形成される欠陥に電荷がトラップされることによって、メモリセルの閾値電圧が変化する。書き込みのため電荷をトラップさせる場合、制御ゲート５５と基板５１との間に高い電圧パルスを与える。この電圧パルスの強さ、印加時間または回数等を変更することで、チャージトラップ層５３にトラップされる電荷の量、すなわちメモリセルの閾値電圧を制御できる。
【００３２】
チャージトラップ型のメモリセルでは、チャージトラップ層５３が隣接するメモリセルとつながっている。チャージトラップ層５３は、欠陥を持った絶縁体であるため、書き込んだ電荷が即座に隣接するメモリセルに伝わることはない。しかし、熱または電界等の影響により、時間とともにゆっくりと、電荷が移動する現象（電荷の横抜け）が生じる。蓄積していた電荷が移動すると、メモリセルの閾値電圧が変化する。閾値電圧の変化が大きくなると、やがて閾値電圧が隣の閾値レベルに重なり（例えば、図３のＣレベルのセルが、Ｂレベルの範囲に入るなど）、書き込まれたデータが変化する、ビット誤りの要因となる。
【００３３】
以下、決定部４０による読み出し電圧の決定方法についてさらに説明する。一般に、隣接セルとの閾値電圧の差に応じて、電荷の横抜けの速度が異なる。データを書き込んでからの経過時間が同じ場合、閾値電圧の差が大きいほど、横抜けによる閾値電圧の変化幅は大きくなる。本実施形態では、電荷の横抜けによる閾値電圧の変化を考慮して決定部４０において複数の読み出し電圧を決定し、不揮発性メモリ２からデータを読み出す。
【００３４】
上述のとおり、電荷の横抜けは、隣接セルとの閾値電圧の差分が大きいほど早く進行する。このことから、ある読み出しタイミングにおいて、ワードラインの各セルの閾値電圧のヒストグラムを、その隣接セルの閾値電圧（Ｖｔｈ）の大小（例えば、閾値電圧Ｖｔｈが所定値以上か否か）のそれぞれについて描くと、図５のようになる。
【００３５】
図５のように、隣接セルの閾値電圧に応じて、各レベルを分離するための電圧（ＶＡ、ＶＢおよびＶＣ）は異なる。例えば、隣接セルの閾値電圧Ｖｔｈが大きい場合のＶＣであるＶＣｈｉｇｈと、閾値電圧Ｖｔｈが小さい場合のＶＣであるＶＣｌｏｗとの間には、横抜けの影響による差分５０１が生じる。
【００３６】
なお横抜けは時間とともに徐々に進行することから、上記電圧（絶対値または影響差）についても、時間、温度、および、デバイス特性等の要因により変化する。
【００３７】
決定部４０は、例えば、隣接セルの閾値電圧の大小に応じて、それぞれトラッキング（閾値トラッキング）を実施することで、読み出し電圧を決定してよい。トラッキングは、不揮発性メモリ２からの読み出しデータに基づき、読み出しに用いる最適な電圧を推定する手法である。トラッキングは、どのような手法を用いてもよいが、例えば図３のようなヒストグラム（またはその一部）に基づき最適な電圧を推定する手法を用いることができる。決定部４０は、例えば、ヒストグラムの極小値を与える電圧を、読み出し電圧として決定してよい。極小値自体を用いる代わりに極小値を補正した値を用いてもよい。
【００３８】
また、ヒストグラムの生成時にノイズを低減する目的でフィルタ処理を行ったり、トラッキングのための読み出し電圧の間隔に対して、補間処理等を行ったりした上で、上述の処理を行ってもよい。
【００３９】
ヒストグラムは、例えばセル群（例えば、あるワードライン上に含まれるセル群）から、トラッキングのための読み出し電圧を変化させて複数回、読み出しを行った結果に基づき、生成することができる。例えば、対象ワードラインに対して、０、０．１、０．２［Ｖ］、・・・のように読み出し電圧を徐々に大きく設定して読み出しを行い、各読み出し電圧において、出力が０（非通電）から１（通電）となったセルの数を数えることで、ヒストグラムを構築することができる。
【００４０】
なお、ヒストグラムをトラッキングに用いる場合、ヒストグラムの全体（閾値電圧＝０〜Ｖｒｅａｄの範囲）を構築せず、データを読み出すのに必要な電圧の周辺だけに相当するヒストグラムの一部を構築してもよい。図３の例の場合、Ｕｐｐｅｒページを読む場合ではＶＡおよびＶＣの周辺、Ｌｏｗｅｒページを読む場合はＶＢの周辺のみについて読み出しを行い、ヒストグラムの一部を構築した上でトラッキングを実施してもよい。
【００４１】
次に、本実施形態にかかるメモリコントローラによる読み出し電圧決定処理の流れについて図６を用いて説明する。図６は、本実施形態における読み出し電圧決定処理の一例を示すフローチャートである。
【００４２】
まず読み出し部２０は、対象ワードラインに隣接するワードラインからデータを読み出す（ステップＳ１０１）。この際に用いる読み出し電圧は、予め定められた値の電圧であってよい。例えば、電圧ＶＢが用いられてよい。読み出し結果は、隣接ワードライン上の各セルの閾値電圧がＶＢよりも大きいか否かに応じて、０または１の値の配列として出力される。なお、隣接ワードラインは、予め定められた片側の隣接ワードラインであっても、両側の隣接ワードラインであってもよい。また、各隣接ワードラインからの読み出し回数は、１回でなく複数回としてもよい。ここでは、片側の隣接ワードラインから、１回の読み出しを行う場合について説明し、他の場合については後述する。
【００４３】
次に読み出し部２０は、対象ワードラインから、トラッキングに用いるデータを読み出す（ステップＳ１０２）。その後、読み出されたデータに基づきトラッキングが実施され、読み出し電圧が決定される（ステップＳ１０３、ステップＳ１０４）。例えば、下記の手順により読み出し電圧が決定される。
【００４４】
まず、分類部３０は、隣接セルの閾値電圧に応じて、対象ワードラインに含まれる複数のセルを複数のクラスのいずれかにそれぞれ分類する。決定部４０は、図５に示されるような、隣接セルの閾値電圧の大小に応じたクラスそれぞれに対するヒストグラム（またはその一部）を構築する（ステップＳ１０３）。例えば決定部４０は、複数のクラスそれぞれについて、クラスに分類されたセルの閾値電圧ごとの個数（セル数）を算出することにより、ヒストグラムを生成する。
【００４５】
各ヒストグラムは、例えば以下のように構築できる。まず分類部３０は、対象ワードラインからの各読み出し結果（閾値電圧＝０〜Ｖｒｅａｄ、または、その一部）と、隣接ワードラインからの読み出し結果（または、隣接ワードラインからの読み出し結果のＮＯＴ）とでＡＮＤ演算を行う。
【００４６】
隣接ワードラインからの読み出し結果そのものを用いてＡＮＤ演算を行った場合、対象ワードラインの各セルのうち、隣接セルの閾値電圧が小さいセル群が抽出される。一方、隣接ワードラインからの読み出し結果のＮＯＴを用いてＡＮＤ演算を行った場合、隣接セルの閾値電圧の大きいセル群が抽出される。言い換えると、このようなＡＮＤ演算により、対象ワードラインの各セルが、隣接セルの閾値電圧が小さい場合に対応するクラス、および、隣接セルの閾値電圧が大きい場合に対応するクラス、の２クラスのうちいずれかに分類される。
【００４７】
次に決定部４０は、ＡＮＤ演算の結果のうち“１”のビット数を数える。このビット数がセル数に相当する。決定部４０は、ある読み出し電圧に対する計数結果（例えば読み出し電圧＝０のときの計数結果）と、次の読み出し電圧に対する計数結果（例えば読み出し電圧＝０．１［Ｖ］のときの計数結果）との差分をとることで、ヒストグラムを構築する。
【００４８】
なお、上記の方法は一例であり、他の類似の方法によりヒストグラムを構築してもよい。例えば、対象ワードラインからの各読み出し結果に対して、次の読み出し演算とのＸＯＲ演算を実施し、この結果から“１”のビット数を数えるなどの方法を用いてもよい。
【００４９】
その後、決定部４０は、構築した各ヒストグラムを用いて、各クラスに対して用いる読み出し電圧を決定する（ステップＳ１０４）。上記のように、決定部４０は、例えば、ヒストグラムの極小値を与える電圧を読み出し電圧として決定する。
【００５０】
本実施形態では、隣接ワードラインの読み出し結果に応じて別々にトラッキングを実施する点が従来の技術と異なっている。各クラスでのトラッキング方法の詳細は任意に変更されてもよい。
【００５１】
決定部４０により読み出し電圧が決定された後、読み出し部２０は、決定された読み出し電圧を用いて読み出し処理を行う。以下に、本実施形態にかかるメモリコントローラによる読み出し処理の流れについて図７を用いて説明する。図７は、本実施形態における読み出し処理の一例を示すフローチャートである。
【００５２】
読み出し部２０は、対象ワードラインに隣接するワードラインからデータを読み出す（ステップＳ２０１）。この際に用いる読み出し電圧は、予め定められた値の電圧であってよい。例えば、電圧ＶＢが用いられてよい。次に読み出し部２０は、対象ワードラインから、決定された読み出し電圧を用いてデータを読み出す（ステップＳ２０２）。
【００５３】
上記のように、決定部４０は、隣接セルの閾値電圧の大小について、それぞれ読み出し電圧を決定する。このため、読み出し部２０は、決定した読み出し電圧の値が同一である場合を除き、各読み出し電圧を用いて計２回の読み出し処理を行う。なお、直前のトラッキングで読み出したデータをＤＲＡＭ４等に保存しておき、保存したデータを読み出し処理で流用してもよい。
【００５４】
その後、生成部５０は、読み出し部２０が読み出したデータを統合し、ホストＣＰＵ１００へと出力するデータ（出力データ）を生成する（ステップＳ２０３）。本実施形態では、隣接セルの閾値電圧の大小に応じて読み出し電圧が異なる点を考慮して出力データが生成される。生成部５０は、生成した出力データを、例えばホストコントローラ６を介してホストＣＰＵ１００に出力する（ステップＳ２０４）。
【００５５】
以上のように、決定部４０が最適な読み出し電圧を決定し（図６）、読み出し部２０が、決定された読み出し電圧を用いて読み出し処理を実施する（図７）。
【００５６】
次に、生成部５０による出力データの生成処理について説明する。以下の例では、生成部５０は、ワードライン上の各セルについて、隣接セルの閾値電圧の大小に応じて、読み出し部２０が読み出した２つのデータのいずれかを選択し、出力データとする。生成部５０は、例えば以下の（１）式のビット演算により出力データＯｕｔ（ｋ）を生成してよい。
Ｏｕｔ（ｋ）＝（Ｒ１（ｋ）＆Ｎ１（ｋ））｜（Ｒ２（ｋ）＆Ｎ２（ｋ））
・・・（１）
【００５７】
ｋは、セルを識別する情報（セルインデックス）である。Ｒ１（ｋ）は、隣接セルの閾値電圧が小さいときの対象ワードラインからの読み出し結果を示す。Ｒ２（ｋ）は、隣接セルの閾値電圧が大きいときの対象ワードラインからの読み出し結果を示す。Ｎ１（ｋ）は、閾値電圧が小さい隣接セルからの読み出し結果を示す。Ｎ２（ｋ）は、Ｎ１（ｋ）のＮＯＴ値を示す。Ｎ１（ｋ）およびＮ２（ｋ）は、それぞれ、閾値電圧が小さい隣接セル、および、閾値電圧が大きい隣接セルを示すマスクに相当する。言い換えると、Ｎ１（ｋ）およびＮ２（ｋ）は、それぞれ、隣接セルの閾値電圧が小さい場合に対応するクラスに対するマスク、および、隣接セルの閾値電圧が大きい場合に対応するクラスに対するマスクに相当する。
【００５８】
（１）式のビット演算は、ビット単位で演算してもよいし、複数ビット単位（例えば１バイトまたは数バイト単位）で演算してもよい。なお、不揮発性メモリ２では、読み出し電圧が大きいほどＯＮ状態となるセルの数が増加する。このため、ノイズによる影響を除外すれば、読み出し結果が“１”となるセルの個数は、読み出し電圧に対し単調増加する。また、一般に横抜けによる閾値変化の影響により、隣接セルの閾値電圧が小さい場合のほうか、隣接セルの閾値電圧が大きい場合よりも、当該セルにおける閾値電圧は小さくなりやすい。また上記のようにＲ１（ｋ）およびＮ１（ｋ）は、隣接セルの閾値が小さい場合の読み出し結果である。これらを考慮し、生成部５０は、以下の（２）式によりＯｕｔ（ｋ）を生成してもよい。
Ｏｕｔ（ｋ）＝Ｒ１（ｋ）｜（Ｒ２（ｋ）＆Ｎ２（ｋ））  ・・・（２）
【００５９】
なお、図３の例でＵｐｐｅｒページを読み出す場合は、２つの閾値レベル（ＶＡ、ＶＣ）について読み出しを行い、２つの読み出し結果をマージして出力する必要がある。このため、本実施形態では、２つの閾値レベルそれぞれについて上記の処理を行い、生成したＯｕｔ（ｋ）をコントローラ３側（例えば生成部５０）でマージすることで、Ｕｐｐｅｒページの読み出し結果を生成してよい。
【００６０】
または、不揮発性メモリ２においてページリードを用いてもよい。図３の例でＵｐｐｅｒページに対しページリードを行うと、不揮発性メモリ２内部で２つの読み出し電圧（ＶＡ、ＶＣ）で読み出しが実施され、２つの読み出し結果がマージされた上で、コントローラ３へと出力される。
【００６１】
ページリードを用いる場合、上記の読み出しに加えて、読み出し対象アドレスから、２つの読み出し電圧（ＶＡ、ＶＣ）の中間に相当する電圧（例えばＶＢ）により読み出しが実施される。この読み出しの結果、または、そのＮＯＴと、ページリードの結果とのＡＮＤ演算を行うと、コントローラ３側で、ページリードの結果（すなわちＶＡ、ＶＣの読み出し結果がマージされたデータ）から、ＶＡによる部分と、ＶＣによる部分とを分離することが可能になる。そして、この分離結果を用いてそれぞれトラッキングを実施することで、各読み出し電圧の決定が可能となる。
【００６２】
なお、上述の処理は、読み出しのたびに毎回実施される必要はなく、例えば通常の読み出し処理においてエラーが発生した場合などに行うこととしてよい。
【００６３】
以上に示した方法によって、電荷の横抜けに起因する閾値電圧の変化に対し、最適な読み出し電圧を決定して読み出しを行うことが可能となる。これにより、読み出しエラーを低減することが可能となる。
【００６４】
（変形例１）
なお、上記ではマルチレベルセル（ＭＬＣ、２ビットセル）の場合について説明したが、トリプルレベルセル（ＴＬＣ、３ビットセル）、および、クアッドレベルセル（ＱＬＣ、４ビットセル）などの３ビット以上を記録するセルについても同様の処理を行うことが可能である。
【００６５】
ＴＬＣおよびＱＬＣでは、図３のような閾値電圧に対するデータシンボルの割り当て方法がＭＬＣとは異なる。このため、各ページのデータを読み出すために必要な閾値レベルの位置および数が異なる。この場合、読み出しに必要な各閾値レベルについてそれぞれ上述の処理を行って、読み出しを行ってよい。ＭＬＣの場合と同様に、ページリードを活用して処理を行ってもよい。なお、ページリード時の読み出し回数が３以上となる場合、読み出し結果から各閾値レベルの部分を分離するために、２以上のシングルリードの結果からマスクを生成して、ＡＮＤ演算を行う必要がある。
【００６６】
（変形例２）
上述のとおり、片側１方向に隣接する隣接ワードラインを用いる代わりに、両側の隣接ワードラインを用いてもよい。一般に不揮発性メモリ２は、図２のようにワードラインが並んでいる。このため、端部のワードラインを除く各ワードラインは、２つの隣接ワードラインを有する。電荷の横抜けは、隣接の両方向に対し発生することから、両方向の隣接の影響を考慮することで、読み出しエラーをさらに削減することが可能となる。
【００６７】
この場合、まず読み出し部２０は、対象ワードラインに隣接するワードラインについて、データの読み出しを行う。読み出しは、隣接する両側の各ワードラインについて行う。この際に用いる電圧は、予め定められた値の電圧であってよい。例えば、電圧ＶＢが用いられてよい。次に読み出し部２０は、対象ワードラインから、トラッキングに用いるデータの読み出しを行う。
【００６８】
次に決定部４０は、読み出し電圧を決定する。まず分類部３０は、各隣接ワードラインのセルについての閾値電圧の大小から、対象ワードラインの各セルをクラス“小・小”、“小・大”、“大・小”、“大・大”の４クラスに分類する。例えばクラス“小・小”は、２つの隣接ワードラインのセルの閾値電圧が共に小さい場合のクラスに相当する。
【００６９】
決定部４０は、分類されたクラスそれぞれについてトラッキングを実施する。例えば決定部４０は、隣接ワードラインの各読み出し結果、および、隣接ワードラインの各読み出し結果のいずれかまたは両方にＮＯＴを適用した結果について、ＡＮＤ演算を行うことで、マスクを生成する。例えば、以下の（３）式に示すようにマスクが生成される。Ｎ１＿１およびＮ１＿２は、それぞれ、２つの隣接ワードラインのうち一方および他方に含まれる、閾値電圧が小さい隣接セルからの読み出し結果を示す。
Ｍａｓｋ（小・小）＝Ｎ１＿１＆Ｎ１＿２、
Ｍａｓｋ（小・大）＝Ｎ１＿１＆ＮＯＴ（Ｎ１＿２）、
Ｍａｓｋ（大・小）＝ＮＯＴ（Ｎ１＿１）＆Ｎ１＿２、
Ｍａｓｋ（大・大）＝ＮＯＴ（Ｎ１＿１）＆ＮＯＴ（Ｎ１＿２）  ・・・（３）
【００７０】
決定部４０は、このマスクを用いて各クラスに対応するセルを抽出し、それぞれについてトラッキングを実施することで、読み出し電圧を決定する。その後、読み出し部２０は、決定部４０により決定された各読み出し電圧を用いて読み出しを実施する。読み出し結果は、例えば以下の（４）式により統合される。
Ｏｕｔ（ｋ）＝
Ｍａｓｋ（小・小）＆Ｒｅａｄ（小・小）
｜Ｍａｓｋ（小・大）＆Ｒｅａｄ（小・大）
｜Ｍａｓｋ（大・小）＆Ｒｅａｄ（大・小）
｜Ｍａｓｋ（大・大）＆Ｒｅａｄ（大・大）  ・・・（４）
【００７１】
Ｒｅａｄ（クラス）は、対象ワードラインの当該クラスに対応するセルからの読み出し結果を示す。例えばＲｅａｄ（小・小）は、両側の隣接セルの閾値電圧が小さいときの対象ワードラインからの読み出し結果を示す。
【００７２】
このＯｕｔ（ｋ）は、ある閾値レベルについての読み出し結果である。生成部５０は、１または複数の閾値レベルについての読み出し結果を結合することで、ページ読み出し結果を生成して出力する。この処理の代わりにページリードを用いてもよい。
【００７３】
なお、上記の例では各隣接ワードライン上のセルの閾値電圧の大小に応じて４クラスにセルが分類される。一方、ワードライン間の間隔が同一で、隣接セル間の閾値電圧の差が同一であれば、隣接する各方向に対する横抜けの影響はほぼ同一になる。このことから、上記のように４クラスとする代わりに、クラス“小・大”とクラス“大・小”とをマージし、３クラスとして上記の処理を行ってもよい。例えば、以下の（５）式によりマージしたマスクＭａｓｋ（中）を、マージしたクラスのマスクとしてもよい。
Ｍａｓｋ（中）＝Ｍａｓｋ（小・大）｜Ｍａｓｋ（大・小）  ・・・（５）
【００７４】
このようにクラス数を削減することで、処理量を削減することが可能になる。
【００７５】
（変形例３）
上記までの例では、１以上の隣接ワードラインそれぞれについて１回の読み出しを行っていたが、１以上の隣接ワードラインの少なくとも一方について複数回の読み出しを実施し、クラス分離に用いてもよい。例えば、まず読み出し部２０は、各隣接ワードラインについて２回以上の読み出しを実施する。読み出しに用いる電圧は、予め定められた値の電圧であってよい。例えばｎ回の読み出しを実施する場合、読み出しに用いる電圧は、Ｖｒｅａｄ×ｋ／（ｎ＋１）（ｋ＝１、・・・、ｎ）を用いてもよい。
【００７６】
ｎ回の読み出し結果の組み合わせにより、隣接ワードラインの閾値電圧の大小に応じたマスクが生成できる。例えば、隣接ワードラインについて２回の読み出しを実施する場合、各隣接ワードラインに対して、“小”、“中”、“大”の３クラスのマスクが生成可能である。マスクは、例えば、以下の（６）式により生成される。
Ｍａｓｋ（小）＝Ｎ１（小）、
Ｍａｓｋ（中）＝Ｎ１（大）＆ＮＯＴ（Ｎ１（小））、
Ｍａｓｋ（大）＝ＮＯＴ（Ｎ１（大））  ・・・（６）
【００７７】
Ｎ１（小）は、１回目の読み出し電圧より閾値電圧が小さい隣接セルからの読み出し結果を示す。Ｎ１（大）＆ＮＯＴ（Ｎ１（小））は、１回目の読み出し電圧より閾値電圧が大きく、２回目の読み出し電圧より閾値電圧が小さい隣接セルからの読み出し結果を示す。ＮＯＴ（Ｎ１（大））は、２回目の読み出し電圧より閾値電圧が大きい隣接セルからの読み出し結果を示す。
【００７８】
両側の隣接ワードラインから読み出しを行う場合、各ワードラインのクラスの組み合わせそれぞれに対してＡＮＤ演算を行うことで、組み合わせそれぞれに対するマスクを生成することができる。両側の隣接ワードラインについて各２回の読み出しを行う場合、３×３＝９パターンのマスクが生成される。例えば両側の隣接ワードラインのマスクが共に“小”の場合のクラス“小・小”に対しては、以下の（７）式によりマスクが生成される。Ｍａｓｋ（小）＿１およびＭａｓｋ（小）＿２は、それぞれ、２つの隣接ワードラインのうち一方および他方に対して生成されるマスクを表す。他の８クラスについても同様にしてマスクが生成される。
Ｍａｓｋ（小・小）＝Ｍａｓｋ（小）＿１＆Ｍａｓｋ（小）＿２  ・・・（７）
【００７９】
なお、両側の隣接ワードラインについて各１回読み出す場合と同様、横抜けの影響がほぼ同一になると考えられる条件について、クラスをマージすることで総クラス数を削減してもよい。例えば、両側の隣接ワードラインの閾値電圧の大小が反転した関係となるクラス同士（例えばクラス“大・中”とクラス“中・大”等）を１つのクラスにマージしてもよい。
【００８０】
その後、読み出し部２０は、トラッキングに用いるデータを読み出す。決定部４０は、各マスクに対応するセル群についてそれぞれトラッキングを実施することで、読み出し電圧を決定する。そして、読み出し部２０は、決定された各読み出し電圧で読み出しを実施する。生成部５０は、読み出された結果を結合して出力する。
【００８１】
（変形例４）
特にクラス数が多くなった場合に、１クラスあたりの対応するセル数が少なくなることから、トラッキングの精度が低下する場合がある。例えば隣接セルの閾値電圧が“中”であるクラスに対する読み出し電圧が、隣接セルの閾値電圧が“大”または“小”であるクラスに対して不自然に大きく算出される場合などが生じうる。このような場合に、トラッキングされた読み出し電圧に対し、クラス間でフィルタを適用することで、精度低下による影響を抑えてもよい。上述のとおり、横抜けは隣接セルの閾値電圧に依存することから、多くの場合、横抜けの影響量は隣接セルの閾値電圧に対して単調である。クラス間でフィルタ（平滑化等）処理を行うことで、トラッキングの精度の低下を抑制可能となる。
【００８２】
（変形例５）
上記のように、両側の隣接ワードラインそれぞれで複数回の読み出しを実施する場合、クラス数が大きくなるため、不揮発性メモリ２からの読み出し回数が増加し、処理に要する時間が増加する問題がある。これに対し、決定部４０が決定する読み出し電圧の個数を制限することで、読み出しの回数を削減してもよい。すなわち決定部４０は、複数のクラスの少なくとも一部に対して、同一の読み出し電圧を設定することにより、予め定められた個数以下の読み出し電圧を決定してもよい。
【００８３】
例えば、各クラスにおけるトラッキング結果（電圧）が類似する複数のクラスについて、各クラスの読み出し電圧をマージする（例えば、２クラスの平均、または、２クラスの重み付き平均）、および、各クラスのヒストグラムをマージしたヒストグラムからトラッキングにより読み出し電圧を決定する、などの処理を行ってもよい。トラッキング結果が類似するとは、例えば、電圧の値の差が閾値以内であることを示す。
【００８４】
これ以外の方法により、読み出し電圧を予め定められた個数以下のクラスタに分類してもよい。また、決定された読み出し電圧を量子化することで、読み出し電圧の個数を削減してもよい。
【００８５】
このような削減処理は、読み出し電圧の数が予め定められた値（個数）以下となるまで実施されてもよい。このような処理により、読み出し部２０における読み出し回数を削減し、処理時間を削減することが可能となる。
【００８６】
（変形例６）
上述のとおり、不揮発性メモリ２では、ＣＣＩによる閾値電圧への影響が存在する。ＣＣＩは、隣接ワードライン（典型的には、次に書き込みが実施されるワードライン）における書き込みデータにより、対象ワードラインが影響される現象である。ＣＣＩは、主に書き込み時の電圧印加により発生する。このため、不揮発性メモリ２へのデータの書き込み方法によって、ＣＣＩの影響は異なる。
【００８７】
不揮発性メモリ２への書き込み方法としては、例えば以下のような方法がある。
（１）ワードラインごとに順に書き込む
（２）多段階（例えばページ単位）で逐次書き込む
【００８８】
（１）の方法では、例えばＷＬ＝０に一通りのデータ（ＭＬＣの場合、ＬｏｗｅｒページおよびＵｐｐｅｒページのデータ）を書き込んだのちに、ＷＬ＝１に一通りのデータが書き込まれる。この場合、ＣＣＩの影響量は隣接（次）ワードラインの閾値電圧の大小により決まることから、横抜けによる影響量と同様に扱うことが可能となる。
【００８９】
すなわち、両側の隣接ワードラインの閾値電圧に基づきクラスを設定していれば、前ワードラインについては横抜けによる影響が、次ワードライン分については横抜けおよびＣＣＩによる影響が、それぞれ加わることになる。このため、トラッキングによりこれら合計の影響分を考慮した読み出し電圧を決定することができる。
【００９０】
（１）の方法では、少なくとも次ワードラインについて、読み出し回数を増やしてよい。例えば次ワードラインについて読み出し回数を多く（例えば２回またはそれ以上）に設定すれば、ＣＣＩの影響と横抜けの影響を考慮した複数の読み出し電圧の決定が可能となる。なお、前ワードラインについては、ＣＣＩの影響はないかまたは僅かである。このため、前ワードラインの読み出し回数を次ワードラインよりも少なく設定してもよい。
【００９１】
一方、（２）の方法では、例えばＭＬＣの場合、次ワードラインにＬｏｗｅｒページ分のデータを書き込んだ後、対象ワードラインのＵｐｐｅｒページの書き込みが行われる。この場合、ＣＣＩはＵｐｐｅｒページ分の書き込みについてのみ発生するため、ＣＣＩの影響量は小さくなる。また、ＣＣＩの影響量は、Ｕｐｐｅｒページの書き込み分に依存し、閾値電圧の大小に対し単調ではなくなる。例えば図３の例では、ＥレベルとＢレベルはＣＣＩの影響が小さく、ＡレベルとＣレベルはＣＣＩの影響が大きい、等のようになる。このような場合、次ワードラインの閾値電圧の大小に応じてクラス分けを行う代わりに、隣接ワードラインの各レベル（Ｅレベル、Ａレベル、Ｂレベル、Ｃレベル）に応じてクラスに分類し、読み出し電圧の設定を行ってよい。その他の場合（ＴＬＣやＱＬＣの場合等）についても、書き込みの方法に応じて、ＣＣＩの影響を補正可能なようにクラス分けを行い、読み出し電圧の設定を行ってよい。
【００９２】
上記以外のＣＣＩによる影響を低減する読み出し手法と併用して、本実施形態の処理を行うこととしてもよい。例えば、特許文献１に記載された方法のように、不揮発性メモリ２内部の処理により、ＣＣＩの影響を補正して読み出しを行う方法を適用してもよい。この方法により読み出しを行うことで、読み出しデータにおけるＣＣＩの影響が低減される。
【００９３】
（変形例７）
上述のとおり、電荷の横抜けは時間とともに徐々に進行する。このことから、ある読み出しタイミングにおいて決定部４０が決定した読み出し電圧は、しばらくの間は流用することが可能となる。コントローラ３は、決定部４０が決定した読み出し電圧を記憶部（例えばＤＲＡＭ４等）に保持しておき、次の読み出し時にはこの値を用いて読み出しを行ってよい。この場合、隣接ワードラインの閾値電圧の大小それぞれについてトラッキングを実施する必要がなくなることから、読み出しに要する時間を低減することが可能となる。なお、保存した読み出し電圧は、所定時刻の経過、および、流用により読み出しエラーが発生した場合などの所定の条件に応じて破棄し、再度（複数回の）トラッキングを実施して決定してよい。また、例えば読み出し電圧を保持する記憶領域のサイズを制限するため、読み出し電圧を示す情報を古い順に逐次破棄してもよい。
【００９４】
（変形例８）
不揮発性メモリ２の各セルに２ビット以上のデータを記憶させる場合、書き込んだデータを読み出すためには複数回の読み出しを行う必要がある。例えば図３のようなＭＬＣの場合、ＶＡ、ＶＢおよびＶＣの３の読み出し位置において読み出しを行うことで、２ビットのデータを読み出すことができる。ここで、決定部４０は、これら複数の読み出し位置のうち一部における読み出し電圧（第１電圧）を、他の読み出し位置において設定した読み出し電圧（第２電圧）に基づく内挿または外挿により決定してもよい。内挿または外挿は、例えば線形（一次）内挿または線形（一次）外挿であってもよい。また、例えば一次式または多項式による回帰により、第１電圧と第２電圧との関係を予め求め、この関係に基づいて、第２電圧から第１電圧を決定してもよい。
【００９５】
例えば決定部４０は、ＭＬＣの場合に、ＡレベルとＣレベルにおける各読み出し電圧の決定結果に基づき、Ｂレベルの各読み出し電圧を内挿して決定してもよい。内挿に用いる重みは、予め定められた電圧の関係（例えばＶＡ、ＶＢ、ＶＣ）に基づき決定されてよい。また、ＴＬＣおよびＱＬＣの場合も同様に、一部の読み出し位置に対する読み出し電圧の決定結果から、他の読み出し位置の読み出し電圧を内挿または外挿により決定してよい。
【００９６】
（変形例９）
トラッキングに用いるデータはワードライン上の全セルを用いる必要はなく、ワードライン上の一部のセルのみを用いてもよい。例えば読み出し部２０は、トラッキングに用いるデータとして、ワードライン上の一部のセルからデータを読み出す。読み出しの対象とする一部のセルは、どのような方法で決定してもよい。例えばワードラインの先頭から４ｋｉＢの範囲のセルとする方法、および、サンプリングにより選択する方法などを適用できる。
【００９７】
決定部４０は、一部のセルから読み出されたデータを用いてトラッキングを実施する。不揮発性メモリ２ではワードライン上の各セルは同一のタイミングで書き込みが行われているため、横抜けの影響量はほぼ等しい。ワードライン上の一部のデータから読み出し電圧を決定することで、データの読み出しにかかる時間、および、トラッキングにかかる時間（各クラスのヒストグラム生成等）を削減することが可能となる。
【００９８】
（変形例１０）
これまでは各処理をコントローラ３が実施する例について説明した。コントローラ３で実施する処理のうち少なくとも一部の処理は、不揮発性メモリ２上で実施してもよい。例えば、読み出し電圧を決定した後の読み出し処理の全部または一部を不揮発性メモリ２上が行ってよい。例えば、不揮発性メモリ２上に実装したビット演算回路が、データバッファ８上の読み出しデータから、各種マスクの生成、トラッキング、および、読み出しデータの合成処理等のうち一部または全部を実施してもよい。
【００９９】
例えばビット演算回路は、コントローラ３から入力された複数の読み出し電圧それぞれによりデータを読み出し、データバッファ８に保存する。ビット演算回路は、保存したデータを用いてビット演算を行い、データで合成してコントローラ３に出力する。また、例えばビット演算回路が、複数のクラスそれぞれの読み出し処理を実施し、コントローラ３が複数の読み出し結果を統合する処理を実施するように構成してもよい。
【０１００】
読み出しデータに対する処理をコントローラ３において行う場合、データを不揮発性メモリ２からコントローラ３へと伝送する必要があり、伝送に係る遅延が大きくなる。不揮発性メモリ２の内部で一部または全部の処理を実施することで、これら遅延の影響を低減できる。他方、不揮発性メモリ２内部では処理回路およびメモリサイズの制約がある場合も多く、この場合コントローラ３側で処理を行うことで、より複雑な処理も実施可能となる。
【０１０１】
またコントローラ３で実施する処理のうち少なくとも一部を、メモリシステム１の外部の装置（例えば、ホストＣＰＵ１００、および、クラウド環境上に構築されたサーバ装置など）で実施してもよい。このように、コントローラ３が備える機能は、コントローラ３、不揮発性メモリ２、および、ホストＣＰＵ１００などの少なくとも一部を含むメモリシステムが備えるように構成することができる。
【０１０２】
（変形例１１）
決定部４０は、隣接セルの閾値電圧と、各クラスに属するセルの読み出し電圧との関係を求め、求めた関係を用いて読み出し電圧を決定してもよい。例えば決定部４０は、読み出し電圧を直接決定する代わりに、隣接セルの閾値電圧と最適な読み出し電圧との関係を示す関数を求め、この関数に基づき、読み出し電圧を決定してよい。
【０１０３】
図８は、片側の隣接ワードラインを考慮する例である。図８に示すように、本変形例では、隣接セルの閾値電圧の大小に応じた２以上のヒストグラムから、隣接セルの閾値電圧と、読み出し電圧との関係を示す関数を求める。図８の例の場合、例えば、隣接セルの閾値電圧が大きいクラスおよび小さいクラスの２クラスでヒストグラムを構築し、それぞれについてトラッキングを実施することで読み出し電圧を算出する。
【０１０４】
そして決定部４０は、算出した各読み出し電圧と、各クラスの代表閾値（例えば、各クラスのセルの平均閾値、または各クラスの区間の中心閾値等）とで与えられる点を結んだ直線により、関数を決定する。または、より多くのクラス（例えば隣接セルの大・中・小の３クラス）でトラッキングを実施し、得られた各点から回帰分析（例えば線形回帰等）により関数を決定してもよい。
【０１０５】
なお、図８のような片側の隣接ワードラインを考慮する例の他に、両側の隣接ワードラインを考慮し、関数を求めてもよい。両側の隣接ワードラインを考慮する場合も、まず上記実施形態と同様に、各クラスについてトラッキングを実施する。その後、得られた読み出し電圧と、隣接セルの閾値電圧とで与えられる点を通過する関数を求める。または、決定部４０は回帰分析により関数を求めてもよい。両側の隣接ワードラインの横抜けの影響量を別々に評価する場合、隣接セルの閾値電圧の大小は、２次元（小・小、大・小等）になるため、得られる関数は面状（平面等）となる。または、両側の隣接ワードラインの横抜けの影響量がほぼ同一と見なせる場合は、隣接セルの閾値電圧として、各閾値電圧の合計値を用いてもよい。この場合、得られる関数は線（直線）となる。
【０１０６】
その後、決定部４０は、得られた関数を用いて読み出し電圧を決定する。本変形例では、隣接セルの閾値電圧と読み出し電圧との関係が関数として求められていることから、任意の隣接セルの閾値電圧に対して、最適な読み出し電圧を決定することが可能である。これを利用して、関数の決定に用いるクラス（第１クラス）の個数より、読み出しに用いるクラス（読み出しクラス、第２クラス）の個数を多く設定し、関数から各読み出しクラスの読み出し電圧を決定してよい。読み出し部２０は、決定された読み出し電圧に基づき、各読み出しクラスのセルのデータを読み出す。
【０１０７】
本変形例によれば、少ないクラス数でのトラッキング結果から関数を求め、より多い読み出しクラスの読み出し電圧を決定することで、読み出し電圧の決定にかかる処理量を低減することが可能となる。読み出しクラスの個数が多くなることに起因して、決定する読み出し電圧の個数が大きくならないように、例えば上記変形例５を適用して個数を制限してもよい。
【０１０８】
なお上記の例では、関数として直線または平面を仮定しているが、関数の形状はこれによらず、例えば２次関数（または３次以上の多次関数）、指数関数または対数関数等による曲線または曲面で近似してもよい。
【０１０９】
本変形例において関数を求める際、トラッキングを実施する代わりに、複数の読み出し結果（例えばセルカウント数）から直接、関数のパラメタ（係数など）を求めてもよい。この場合、複数の読み出し結果から、係数等を与える関数（第２関数、例えば、１次または多次の関数）を予め用意しておき、用いてよい。第２関数は、読み出し結果と、関数のパラメタとの関係を予め学習（回帰分析等）し、用意してよい。
【０１１０】
また、上述のとおり、ＣＣＩによる影響は、不揮発性メモリ２への書き込みの方法により異なる。本変形例においても、ワードラインごとに順に書き込みが実施される場合、ＣＣＩは、次ワードラインに対する横抜けと同様に扱うことが可能である。すなわち、関数を求める際に前ワードラインと次ワードラインを別々に評価（すなわち、関数を面として評価）することで、ＣＣＩについても考慮した関数を求めることができる。
【０１１１】
一方、ページ単位で書き込みが行われる場合、ＣＣＩの影響が隣接セルの閾値電圧の大小に対し単調ではなくなる場合がある。このため、図８のような直線（または曲線、平面等）では、閾値電圧と読み出し電圧との関係を精度よく近似できない場合がある。このような場合、書き込み方法に応じた干渉の“形状”を考慮し、関数を用意してよい。例えば、図３のようなＭＬＣに対してページ単位の逐次書き込みが行われる場合、ＣＣＩは隣接セルのレベルがＥレベルまたはＢレベルのときに小さく、ＡレベルまたはＣレベルのときに大きくなる。このことから、決定部４０は、例えば以下の（８）式のような関数を用いてよい。
Ｆ（隣接セルの閾値電圧Ｖｔｈ＝ｘ）＝ａｘ＋ｂ      ｉｆ  ｘ＜ＶＡ｜｜（ＶＢ＜ｘ＜ＶＣ）
ａｘ＋ｂ＋ｃ  ｏｔｈｅｒｗｉｓｅ  ・・・（８）
【０１１２】
ただしａ、ｂ、ｃは係数であり、各クラスでのトラッキング結果に基づき、回帰分析等で算出される。この他、上記のように、本変形例においても、ＣＣＩの影響を抑制する読み出し方法（特許文献１等）を用いた上で、処理を行ってもよい。
【０１１３】
（変形例１２）
変形例１１において、隣接セルの閾値電圧と最適な読み出し電圧との関係を示す関数を求める代わりに、直接、読み出しに用いるクラス（読み出しクラス、第２クラス）における読み出し電圧を決定してもよい。決定部４０は、第１クラスの各読み出し結果（セルのカウント数）に基づきトラッキングを行う代わりに、第２クラスのそれぞれに対応する各関数にこれを入力し、読み出し電圧を決定してよい。関数は、第１クラスの各読み出し結果（カウント数）と第２クラスの各読み出し電圧との対応を示すものであり、例えば１次関数や、２次以上の多次関数であってよい。関数は、読み出し結果と、最適な読み出し電圧との関係を予め学習（回帰分析）し、用意してよい。
【０１１４】
（ハードウェア構成）
上述の不揮発性メモリコントローラ５（コントローラ３）に含まれる各部（書き込み部１０、読み出し部２０、分類部３０、決定部４０、生成部５０、およびＥＣＣ処理部６０）は、例えば、１または複数のプロセッサにより実現される。例えば上記各部は、ＣＰＵ（Central  Processing  Unit）などのプロセッサにプログラムを実行させること、すなわちソフトウェアにより実現してもよい。また、上記各部は、専用のＩＣ（Integrated  Circuit）などのプロセッサ、すなわちハードウェアにより実現してもよい。また、上記各部は、ソフトウェアおよびハードウェアを併用して実現してもよい。複数のプロセッサを用いる場合、各プロセッサは、上記各部のうち１つを実現してもよいし、上記各部のうち２以上を実現してもよい。
【０１１５】
以上のように、本実施形態によれば、隣接セルの閾値電圧の影響によりビットごとにエラーレートのばらつきがあるような不揮発性メモリに対しても、良好なエラー抑制を実現することができる。
【０１１６】
本実施形態にかかるメモリコントローラで実行されるプログラムは、ＲＯＭ等に予め組み込まれて提供される。
【０１１７】
本実施形態にかかるメモリコントローラで実行されるプログラムは、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ（Compact  Disk  Read  Only  Memory）、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ（Compact  Disk  Recordable）、ＤＶＤ（Digital  Versatile  Disk）等のコンピュータで読み取り可能な記録媒体に記録してコンピュータプログラムプロダクトとして提供されるように構成してもよい。
【０１１８】
さらに、本実施形態にかかるメモリコントローラで実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、本実施形態にかかるメモリコントローラで実行されるプログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。
【０１１９】
本実施形態にかかるメモリコントローラで実行されるプログラムは、コンピュータを上述したメモリコントローラの各部として機能させうる。このコンピュータは、ＣＰＵがコンピュータ読取可能な記憶媒体からプログラムを主記憶装置上に読み出して実行することができる。
【０１２０】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１２１】
１  メモリシステム
２  不揮発性メモリ
３  コントローラ
４  ＤＲＡＭ
５  不揮発性メモリコントローラ
６  ホストコントローラ
１０  書き込み部
２０  読み出し部
３０  分類部
４０  決定部
５０  生成部
６０  ＥＣＣ処理部
【図１】
2019153366.tif 000003
【図２】
2019153366.tif 000004
【図３】
2019153366.tif 000005
【図４】
2019153366.tif 000006
【図５】
2019153366.tif 000007
【図６】
2019153366.tif 000008
【図７】
2019153366.tif 000009
【図８】
2019153366.tif 000010