(57)【要約】【課題】  より高性能なメモリシステムを提供する。【解決手段】  メモリシステムは、半導体メモリと、コントローラとを含む。コントローラは、第１電圧を使用して半導体メモリから読み出された第１データを取得し、第２電圧を使用して半導体メモリから読み出された第２データを取得し、第１データおよび第２データを使用して、第１データの第１部分についての第１値を算出し、第１データおよび第２データを使用して、第１データの第２部分についての第２値を算出し、第１データおよび第２データを使用して、第１データの第３部分についての第３値を算出し、第１乃至第３値を使用して、第１データの誤りを訂正する、ように構成されている。【選択図】      図８
2019168813.tif 000002
【特許請求の範囲】
【請求項１】
半導体メモリと、
第１電圧を使用して前記半導体メモリからリードされた第１データを取得し、
第２電圧を使用して前記半導体メモリからリードされた第２データを取得し、
前記第１データおよび第２データを使用して、前記第１データの第１部分についての第１値を算出し、
前記第１データおよび第２データを使用して、前記第１データの第２部分についての第２値を算出し、
前記第１データおよび第２データを使用して、前記第１データの第３部分についての第３値を算出し、
前記第１乃至第３値を使用して、前記第１データの誤りを訂正する、
ように構成されたメモリコントローラと、
を備えるメモリシステム。
【請求項２】
前記半導体メモリは、複数のセルトランジスタを備え、
前記第１部分は、前記複数のセルトランジスタのうちの前記第１電圧未満の閾値電圧を有する複数の第１セルトランジスタからそれぞれリードされた複数の第１ビットを備え、
前記第２部分は、前記複数のセルトランジスタのうちの前記第１電圧以上かつ前記第２電圧未満の閾値電圧を有する複数の第２セルトランジスタからそれぞれリードされた複数の第２ビットを備え、
前記第３部分は、前記複数のセルトランジスタのうちの前記第２電圧以上の閾値電圧を有する複数の第３セルトランジスタからそれぞれリードされた複数の第３ビットを備える、
請求項１のメモリシステム。
【請求項３】
前記第１値は、前記複数の第１ビットの値の尤もらしさを示し、
前記第２値は、前記複数の第２ビットの値の尤もらしさを示し、
前記第３値は、前記複数の第３ビットの値の尤もらしさを示す、
請求項２のメモリシステム。
【請求項４】
前記メモリコントローラは、
前記第１データの誤りの訂正に失敗すると、
第３電圧を使用して前記半導体メモリからリードされた第３データを取得し、
前記第１乃至第３データを使用して、前記第１データの第４部分についての第４値を算出し、
前記第１乃至第３データを使用して、前記第１データの第５部分についての第５値を算出し、
前記第１乃至第３データを使用して、前記第１データの第６部分についての第６値を算出し、
前記第１乃至第３データを使用して、前記第１データの第７部分についての第７値を算出し、
前記第４乃至第７値を使用して、前記第１データの誤りを訂正する、
ようにさらに構成されている、請求項１のメモリシステム。
【請求項５】
前記第１値と前記第２値とは相違する符号を有し、
前記メモリコントローラは、
前記第１電圧および前記第２電圧を含む前記第１電圧乃至第ｎ（ｎは３以上の自然数）電圧をそれぞれ使用して前記半導体メモリからデータをリードして、前記第１データおよび前記第２データを含む前記第１データ乃至第ｎデータを取得し、
前記第２乃至第ｎ電圧のうちの前記第１電圧から最も離れたものと前記第１電圧との差の絶対値と前記ｎとに基づいて、前記第１値乃至前記第３値を算出する、
ようにさらに構成されている、請求項１のメモリシステム。
【請求項６】
前記メモリコントローラは、
前記差の絶対値および前記ｎに基づいて、前記第１値乃至前記第３値の絶対値の最大値を決定し、
前記第２値を、前記差の絶対値と、前記第２電圧と前記第１電圧との差の絶対値と、前記第１値乃至前記第３値の前記絶対値の最大値と、に基づいて算出する、
ようにさらに構成されている、請求項５のメモリシステム。
【請求項７】
前記メモリコントローラは、
前記第１電圧乃至前記第ｎ電圧の少なくとも一部に基づいて第（ｎ＋１）電圧を決定し、
前記第（ｎ＋１）電圧を使用して前記半導体メモリから第（ｎ＋１）データをリードする、
ようにさらに構成されている、請求項５のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
実施形態は、概してメモリシステムに関する。
【背景技術】
【０００２】
半導体メモリと、半導体メモリを制御するコントローラとを含んだメモリシステムが知られている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許第９，３２９，９３５号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００４】
より高性能なメモリシステムを提供する。
【課題を解決するための手段】
【０００５】
一実施形態によるメモリシステムは、半導体メモリと、コントローラとを含む。コントローラは、第１電圧を使用して上記半導体メモリから読み出された第１データを取得し、第２電圧を使用して上記半導体メモリから読み出された第２データを取得し、上記第１データおよび第２データを使用して、上記第１データの第１部分についての第１値を算出し、上記第１データおよび第２データを使用して、上記第１データの第２部分についての第２値を算出し、上記第１データおよび第２データを使用して、上記第１データの第３部分についての第３値を算出し、上記第１乃至第３値を使用して、上記第１データの誤りを訂正する、ように構成されている。
【図面の簡単な説明】
【０００６】
【図１】第１実施形態のメモリシステム中の要素および接続、ならびに関連する要素を示す。
【図２】第１実施形態のブロック中の要素および接続の例を示す。
【図３】第１実施形態のセルトランジスタの閾値電圧の分布の例を示す。
【図４】第１実施形態のＥＣＣ回路中の要素および接続、ならびにメモリコントローラ中のＥＣＣ回路に関連する機能ブロックを示す。
【図５】第１実施形態のリードデータとＬＬＲ値との対応の例を示す。
【図６】第１実施形態のメモリシステムの動作の一部のフローを示す。
【図７】第１実施形態のＬＬＲ値算出の例の詳細を示す。
【図８】第１実施形態のＬＬＲ値算出の例の詳細を示す。
【図９】第１実施形態のＬＬＲ値算出の例の詳細を示す。
【図１０】第１実施形態のＬＬＲ値算出の例の詳細を示す。
【図１１】第１実施形態のリード回数テーブルを示す。
【図１２】第１実施形態の最大シフト量テーブルを示す。
【図１３】参考例および第１実施形態のデータリードおよびＳＢ復号での処理の流れを概略的に示す。
【図１４】参考例および第１実施形態のデータリードおよびＳＢ復号での処理の流れを概略的に示す。
【図１５】第１実施形態での閾値電圧分布の変化を示す。
【図１６】参考例および第１実施形態のリードデータに対するＳＢ復号での処理の流れを概略的に示す。
【図１７】参考例での閾値電圧分布曲線とリード電圧を示す。
【図１８】第２実施形態のメモリシステムの動作の一部のフローを示す。
【図１９】第２実施形態のリード電圧の決定の方法を説明するための図。
【図２０】第２実施形態のリード電圧の決定の方法を説明するための図。
【図２１】第２実施形態のリード電圧の決定の一例を示す。
【図２２】第２実施形態のリード電圧の決定の一例を示す。
【図２３】第２実施形態のリード電圧の決定の一例を示す。
【図２４】第３実施形態のＬＬＲ値算出の方法を説明するための図。
【図２５】第３実施形態のＬＬＲ値算出の例の詳細を示す。
【図２６】第３実施形態のＬＬＲ値算出の例の詳細を示す。
【図２７】第３実施形態のＬＬＲ値算出の例の詳細を示す。
【発明を実施するための形態】
【０００７】
以下に実施形態が図面を参照して記述される。以下の記述において、略同一の機能および構成を有する構成要素は同一符号を付され、繰り返しの説明は省略される場合がある。ある実施形態についての記述は全て、明示的にまたは自明的に排除されない限り、別の実施形態の記述としても当てはまる。各実施形態は、この実施形態の技術的思想を具体化するための装置や方法を例示するに過ぎない。
【０００８】
各機能ブロックは、ハードウェア、コンピュータソフトウェアのいずれかまたは両者を組み合わせたものとして実現することができる。このため、各機能ブロックがこれらのいずれでもあることが明確となるように、概してそれらの機能の観点から記述される。また、各機能ブロックが、以下の例のように区別されていることは必須ではない。例えば、一部の機能が例示の機能ブロックとは別の機能ブロックによって実行されてもよい。さらに、例示の機能ブロックがさらに細かい機能サブブロックに分割されていてもよい。
【０００９】
また、実施形態の方法のフローにおけるいずれのステップも、例示の順序に限定されず、そうでないと示されない限り、例示の順序とは異なる順序でおよび（または）別のステップと並行して起こることが可能である。
【００１０】
本明細書および特許請求の範囲において、ある第１要素が別の第２要素に「接続されている」とは、第１要素が直接的または常時あるいは選択的に導電性となる要素を介して第２要素に接続されていることを含む。
【００１１】
（第１実施形態）
＜１．構造（構成）＞
図１は、第１実施形態のメモリシステム中の要素および接続、ならびに関連する要素を示す。図１に示されるように、メモリシステム５は、ホスト装置３により制御され、半導体メモリ１およびメモリコントローラ２を含む。メモリシステム５は、例えば、ＳＳＤ（solid state drive）またはＳＤＴＭカード等であることが可能である。
【００１２】
半導体メモリ１は、メモリコントローラ２により制御される。メモリコントローラ２は、ホスト装置３から命令を受け取り、受け取られた命令に基づいて半導体メモリ１を制御する。
【００１３】
＜１．１．メモリコントローラ＞
メモリコントローラ２は、ホストインターフェイス２１、ＣＰＵ（central processing unit）２２、ＲＡＭ（random access memory）２３、ＲＯＭ（read only memory）２４、メモリインターフェイス２５、ＥＣＣ（error correction code）回路２６を含む。メモリコントローラ２は、例えば、ＳｏＣ（System-on-a-chip）として構成されることができる。ＲＯＭ２４に格納されていてＲＡＭ２３上にロードされたファームウェア（プログラム）がＣＰＵ２２によって実行されることによって、メモリコントローラ２は種々の動作、およびホストインターフェイス２１ならびにメモリインターフェイス２５の機能の一部を実行する。ＲＡＭ２３は、さらに、データを一時的に保持し、バッファおよびキャッシュとして機能する。
【００１４】
ホストインターフェイス２１は、バスを介してホスト装置３と接続され、メモリコントローラ２とホスト装置３との通信を司る。メモリインターフェイス２５は、半導体メモリ１と接続され、メモリコントローラ２と半導体メモリ１との通信を司る。
【００１５】
ＥＣＣ回路２６は、半導体メモリ１に書き込まれるデータおよび半導体メモリ１から読み出されたデータに対して、誤りの検出および訂正に必要な処理を行う。具体的には、ＥＣＣ回路２６は、半導体メモリ１に書き込まれるデータ（実書き込みデータ）の誤り訂正のための冗長データを生成する。生成された冗長データと実書き込みデータが半導体メモリ１に書き込まれる。したがって、半導体メモリ１から読み出されたデータは、実書き込みデータと、対応する冗長データを含む。
【００１６】
また、ＥＣＣ回路２６は、半導体メモリ１から読み出されたデータの中の誤りを検出し、誤りがある場合に誤りの訂正を試みる。ＥＣＣ回路２６は、例えば、硬判定に基づく誤り訂正および軟判定に基づく誤り訂正を行うことができる。硬判定および軟判定は、例えば、ＢＣＨ（Bose Chaudhuri Hocquenghem）符号、リードソロモン符号、および（または）ＬＤＰＣ（low-density parity check）符号等に基づくことができる。ＥＣＣ回路２６については、後に詳述される。
【００１７】
＜１．２．半導体メモリ＞
半導体メモリ１は、メモリセルアレイ（セルアレイ）１１、入出力回路１２、シーケンサ（制御回路）１３、ドライバ１５、センスアンプ１６、およびロウデコーダ１９等の要素を含む。
【００１８】
セルアレイ１１は複数のメモリブロック（ブロック）ＢＬＫ（ＢＬＫ０、ＢＬＫ１、…）を含む。各ブロックＢＬＫは複数のストリングユニットＳＵ（ＳＵ０、ＳＵ１、…）の集合である。各ストリングユニットＳＵは複数のＮＡＮＤストリング（ストリング）ＳＴＲ（ＳＴＲ０、ＳＴＲ１、…）（図示せず）の集合である。ストリングＳＴＲは、複数のメモリセルトランジスタ（セルトランジスタ）ＭＴを含む。
【００１９】
入出力回路１２は、ＮＡＮＤバスを介して、メモリコントローラ２と接続されている。ＮＡＮＤバスは、複数の制御信号および８ビットの幅の信号ＤＱを伝送する。制御信号は、信号￣ＣＥ、ＣＬＥ、ＡＬＥ、￣ＷＥ、￣ＲＥ、￣ＷＰ、およびデータストローブ信号ＤＱＳならびに￣ＤＱＳを含む。入出力回路１２は、信号ＤＱを受け取り、信号ＤＱを送信する。入出力回路１２は、メモリコントローラ２から制御信号を受け取り、制御信号に基づいて、信号ＤＱを取り込み、また出力する。信号ＤＱは、コマンド（ＣＭＤ）、書き込みデータまたはデータ（ＤＡＴ）、アドレス（ＡＤＤ）、ステータス（ＳＴＡ）等を含む。
【００２０】
シーケンサ１３は、入出力回路１２からコマンドＣＭＤおよびアドレスＡＤＤを受け取り、コマンドＣＭＤおよびアドレスＡＤＤに基づいて、ドライバ１５、センスアンプ１６、およびロウデコーダ１９を制御する。
【００２１】
ドライバ１５は、複数の電位のうちの選択されたものをロウデコーダ１９に供給する。ロウデコーダ１９は、ドライバ１５から種々の電位を受け取り、入出力回路１２からアドレスＡＤＤを受け取り、受け取られたアドレスＡＤＤに基づいて選択された１つのブロックＢＬＫにドライバ１５からの電位を転送する。
【００２２】
センスアンプ１６は、セルトランジスタＭＴの状態をセンスし、センスされた状態に基づいてリードデータを生成し、また、書き込みデータをセルトランジスタＭＴに転送する。
【００２３】
＜１．３．セルアレイ＞
図２は、第１実施形態のセルアレイ１１中のいくつかの要素および接続の例を示し、１つのブロックＢＬＫ０の要素および接続、ならびに関連する要素を示す。複数の（例えば全ての）ブロックＢＬＫは、みな図２に示される要素および接続を含む。
【００２４】
１つのブロックＢＬＫは、複数（例えば４つ）のストリングユニットＳＵ０〜ＳＵ３を含む。
【００２５】
ｐ（ｐは自然数）本のビット線ＢＬ０〜ＢＬ（ｐ−１）の各々は、各ブロックＢＬＫにおいて、ストリングユニットＳＵ０〜ＳＵ３の各々からの１つのストリングＳＴＲと接続されている。
【００２６】
各ストリングＳＴＲは、１つの選択ゲートトランジスタＳＴ、複数（例えば８つ）のメモリセルトランジスタＭＴ（ＭＴ０〜ＭＴ７）、および１つの選択ゲートトランジスタＤＴ（ＤＴ０、ＤＴ１、ＤＴ２、またはＤＴ３）を含む。トランジスタＳＴ、ＭＴ、およびＤＴは、この順で、ソース線ＣＥＬＳＲＣと１つのビット線ＢＬとの間に直列に接続されている。セルトランジスタＭＴは、制御ゲート電極（ワード線ＷＬ）、および周囲から絶縁された電荷蓄積層を含み、電荷蓄積層中の電荷の量に基づいてデータを不揮発に保持することができる。
【００２７】
相違する複数のビット線ＢＬとそれぞれ接続された複数のストリングＳＴＲは１つのストリングユニットＳＵを構成する。各ストリングユニットＳＵにおいて、セルトランジスタＭＴ０〜ＭＴ７の制御ゲート電極（ゲート）は、ワード線ＷＬ０〜ＷＬ７とそれぞれ接続されている。さらに、各ブロックＢＬＫにおいて、相違するストリングユニットＳＵ中の同じアドレスのワード線ＷＬも相互に接続されている。１つのストリングユニットＳＵ中でワード線ＷＬを共有するセルトランジスタＭＴの組は、セルユニットＣＵと称される。
【００２８】
トランジスタＤＴ０〜ＤＴ３はストリングユニットＳＵ０〜ＳＵ３にそれぞれ属する。α＝０〜３の各々の場合について、ストリングユニットＳＵαの複数のストリングＳＴＲの各々のトランジスタＤＴαのゲートは選択ゲート線ＳＧＤＬαに接続されている。トランジスタＳＴのゲートは、選択ゲート線ＳＧＳＬに接続されている。
【００２９】
＜１．４．セルトランジスタ＞
図３を参照して、セルトランジスタＭＴについて記述される。半導体メモリ１は、１つのセルトランジスタＭＴにおいて２ビット以上のデータを保持することができる。図３は、書き込みの結果、１つのセルトランジスタＭＴ当たり３ビットのデータを保持するセルトランジスタＭＴの閾値電圧の分布を示す。各セルトランジスタＭＴの閾値電圧は、保持されるデータに応じた値を有する。セルトランジスタＭＴ当たり３ビットの記憶の場合、各セルトランジスタＭＴは、８つの閾値電圧のうちのいずれかを有し得る。８つの閾値電圧は、“１１１” データ、“１１０”データ、“１００”データ、“０００”データ、“０１０”データ、“０１１”データ、“００１”データ、および“１０１”データをそれぞれ保持している状態である。“１１１” データ、“１１０”データ、“１００”データ、“０００”データ、“０１０”データ、“０１１”データ、“００１”データ、および“１０１”データをそれぞれ保持している状態のセルトランジスタＭＴは、Ｅｒ、Ａ、Ｂ、Ｃ、Ｄ、Ｅ、Ｆ、およびＧ状態にあると称される。
【００３０】
ある同じ３ビットデータを保持する複数のセルトランジスタＭＴであっても、セルトランジスタＭＴの特性のばらつき等に起因して、互いに相違する閾値電圧を有し得る。このため、ある同じ３ビットデータを保持する複数のセルトランジスタＭＴの閾値電圧は相違する閾値電圧を有する。なお、図３および以降の図では、閾値電圧の分布が連続的な曲線で示されているが、実際には、セルトランジスタの数は、離散的となっている。
【００３１】
リード対象のセルトランジスタＭＴによって保持されているデータの判別のために、当該セルトランジスタＭＴの状態が判断される。状態の判断のために、リード電圧ＶＡ、ＶＢ、ＶＣ、ＶＤ、ＶＥ、ＶＦ、およびＶＧが用いられる。以下、リード電圧ＶＡ、ＶＢ、ＶＣ、ＶＤ、ＶＥ、ＶＦ、およびＶＧを含め、ステートの判断ためにリード対象のセルトランジスタＭＴに印加される或る大きさの電圧は、リード電圧ＶＣＧＲと称される場合がある。
【００３２】
リード対象のセルトランジスタＭＴの閾値電圧があるリード電圧ＶＣＧＲを超えているか否かが、このセルトランジスタＭＴの閾値電圧の状態の判定に用いられる。リード電圧ＶＣＧＲ以上の閾値電圧を有するセルトランジスタＭＴは、制御ゲート電極においてリード電圧ＶＣＧＲを受け取ってもオフを維持する。一方、リード電圧ＶＣＧＲ未満の閾値電圧を有するセルトランジスタＭＴは、制御ゲート電極においてリード電圧ＶＣＧＲを受け取っていると、オンしている。電圧ＶＲＥＡＤは、非リード対象のセルユニットＣＵのセルトランジスタＭＴのワード線ＷＬに印加され、いずれの状態にあるセルトランジスタＭＴの閾値電圧より高い。
【００３３】
１つのセルユニットＣＵのセルトランジスタＭＴのある同じ位置（桁）のビットのデータの組は、１つのページを構成する。
【００３４】
あるページ、例えばロワーページのデータは、リード電圧ＶＡを用いたリード（以下、リード電圧Ｖβ（βは、Ａ、Ｂ、Ｃ、Ｄ、Ｅ、Ｆ、またはＧ）を用いたリードはβリードと称される）およびＥリードにより割り出される。
【００３５】
なお、セルトランジスタＭＴの閾値電圧は、書き込まれた直後から、ディスターブおよび（または）時間経過等の要因によって変動し得る。変動の仕方によっては、セルトランジスタＭＴの閾値電圧は、書き込まれたときに意図されていたステートとは別のステートとして誤って判断され得る。
【００３６】
＜１．５．ＥＣＣ回路および関連する要素＞
図４は、ＥＣＣ回路２６中の要素および接続、ならびにメモリコントローラ２中のＥＣＣ回路２６に関連する機能ブロックを示す。メモリコントローラ２は、全体制御部２７を有する。全体制御部２７は、ＣＰＵ２２、ＲＡＭ２３、およびＲＯＭ２４のそれぞれの機能の一部の組合せにより実現される。
【００３７】
全体制御部２７は、メモリコントローラ２の全体の動作を制御する。そのような制御は、ＥＣＣ回路２６の制御を含む。全体制御部２７は、半導体メモリ１からのデータのリードの一部として、メモリインターフェイス２５を介して、リード対象のデータのリードを半導体メモリ１に指示する。全体制御部２７は、リード対象のデータを受け取ると、必要に応じて、受け取られたデータ（リードデータ）中の誤りの訂正を試みる。全体制御部２７は、リードデータ中の誤りの訂正のために、自身で後述の種々の処理を行うとともにＥＣＣ回路２６を制御する。全体制御部２７による誤り訂正のための処理は、１または複数のＬＬＲ（log likelihood ratio）値の割り出しおよび算出を含む。
【００３８】
全体制御部２７は、誤り訂正制御部２７１、およびＬＬＲ算出部２７２を含む。誤り訂正制御部２７１は、ＥＣＣ回路２６によるリードデータ中の誤りの訂正を制御し、ＬＬＲ算出部２７２およびＥＣＣ回路２６を制御する。
【００３９】
ＬＬＲ算出部２７２は、誤り訂正制御部２７１の制御に基づいて、リードデータに関する複数のＬＬＲ値を算出することができる。各ＬＬＲ値は、図５に示されるように、リードデータ中の１つのビットに対応付けられており、対応付けられたビットのデータの尤もらしさ（尤度比）を示す。第１行の各桝は、リードデータ中の１つのビットを示す。第２行の各桝は、当該桝の上方のビットと関連付けられており、関連付けられたビットのデータについてのＬＬＲ値を示す。より絶対値の大きいＬＬＲ値は、対応するビットデータがより尤もらしいことを表す。ＬＬＲ値の符号は、対応するビットデータの極性（１または０）を表す。例えば、プラスのＬＬＲ値は、対応するビットデータが０であったと推定することが尤もらしいことを示し、マイナスのＬＬＲ値は、対応するビットデータが１であったと推定することが尤もらしいことを示す。
【００４０】
図４に戻る。ＥＣＣ回路２６は、全体制御部２７からデータ（例えばリードデータ）（以下、入力データと称される）を受け取り、例えばフレームと呼ばれる大きさのデータごとに復号を行うことができる。ＥＣＣ回路２６への入力データは、半導体メモリ１から読み出されたリードデータの場合もあるし、複数のＬＬＲ値の組（ＬＬＲ値セット）の場合もある。誤り訂正が成功すると、誤り訂正された（正しい）入力データが得られる。ＥＣＣ回路２６は、誤り訂正に成功すると、パス判定の旨の信号および誤り訂正された入力データを全体制御部２７に供給する。ＥＣＣ回路２６は、誤り訂正に失敗すると、フェイル判定の旨を全体制御部２７に通知する。
【００４１】
ＥＣＣ回路２６は、シンドロームチェック回路２６１および復号回路２６２を含む。シンドロームチェック回路２６１は、ＥＣＣ回路２６への入力データのシンドロームを算出できる。シンドロームチェック回路２６１は、例えば検査行列を保持しており、入力データ（フレーム）と検査行列を使用して、入力データについてのシンドロームベクトルを算出できる。シンドロームチェック回路２６１はまた、算出されたシンドロームベクトル中の１のビットの数（シンドロームのハミング重みＷｈ（ｓ））（以下、シンドロームＮＧ数と略称される）を計算できる。
【００４２】
シンドロームチェック回路２６１はまた、算出されたシンドロームに基づいて、シンドロームチェック回路２６１への入力データ（例えばＬＬＲ値セット）がパスかフェイルかを判断する。パス判定の場合、入力データは誤りを含んでいないと考えられる。シンドロームチェック回路２６１は、パス判定の旨の信号を誤り訂正制御部２７１に供給する。一方、フェイル判定の場合、シンドロームチェック回路２６１は、フェイル判定の旨の信号、入力データ（フレーム）を復号回路２６２に供給する。
【００４３】
復号回路２６２は、シンドロームチェック回路２６１からフェイル判定の旨の信号、ＬＬＲ値セット、およびリードデータを受け取ると、受け取られたＬＬＲ値セットを使用してＳＢ復号を行い、誤り訂正されたリードデータを誤り訂正制御部２７１（特に、ＲＡＭ２３）に供給する。
【００４４】
＜２．動作＞
図６〜図１２を参照して、メモリシステム５の動作が記述される。以下では、記述の簡略化および理解を容易にする目的で、リード対象のセルユニットＣＵ（選択セルユニットＣＵ）が１ページのデータを保持する例、すなわち選択セルユニットＣＵが各セルトランジスタＭＴにおいて１ビットのデータを保持する例について記述される。選択セルユニットＣＵが２ページ以上のデータを保持する例についてのリードは、以下の選択セルユニットが１ページのデータを保持する例についての記述と、別の技術との組合せにより実現されることが可能であり、後述される。
【００４５】
図６は、第１実施形態のメモリシステム５の動作の一部のフローを示す。選択セルユニットＣＵのページからリードされたデータが誤り訂正されて、誤り訂正されたリードデータを取得するまでのフローを示す。上記のようにＥＣＣ回路２６はフレームサイズのデータを処理する。しかし、簡略化のために、以下では、ＥＣＣ回路２６がページサイズのデータを処理するものとして記述される。実際には、選択セルユニットＣＵからのデータが複数のフレームへと分割され、図６のフローがＥＣＣ回路２６中フレームに対して行われ、全てのフレームに対して図６のフローが繰り返される。図６のいくつかのステップの詳細は、後述される。
【００４６】
ステップＳ１において、誤り訂正制御部２７１は、リード回数ｎを１にセットする。
【００４７】
ステップＳ２において、メモリコントローラ２は、選択セルユニットＣＵからデータを読み出す。データリード（またはリード）は、例えばデフォルトの電圧またはデフォルト電圧からシフトされた電圧等の最初に使用すべきリード電圧ＶＣＧＲ（ＶＣＧＲ１と称される）を使用する。以下、デフォルトの電圧に限らず、シフトされた電圧の使用の場合も含め、図６のフローでの最初のリードは、イニシャルリードＲ１と称される。
【００４８】
ステップＳ３において、メモリコントローラ２は、イニシャルリードＲ１（リード電圧ＶＣＧＲ１を使用したリード）により得られたリードデータを受け取り、リードデータをＲＡＭ２３中で保持する。以下、リード電圧ＶＣＧＲ１を使用して読み出されたデータは、イニシャルリードデータＲＤ１と称される。
【００４９】
ステップＳ４において、誤り訂正制御部２７１は、ＥＣＣ回路２６を制御して、イニシャルリードデータＲＤ１中の実書き込みデータおよび冗長データを使用したイニシャルリードデータＲＤ１中の誤りの訂正（ＨＢ復号）を試みる。また、シンドロームチェック回路２６１は、ＨＢ復号の一環として、誤り訂正制御部２７１の制御に従って、ＬＤＰＣ符号を使用して、リードデータのシンドロームＮＧ数を算出する。シンドロームチェック回路２６１は、イニシャルリードデータＲＤ１についてのシンドロームＮＧ数をイニシャルリードデータＲＤ１と関連付けて、ＲＡＭ２３中で保持する。
【００５０】
ＨＢ復号が成功すると（ステップＳ５のＹｅｓ分岐）、復号回路２６２は、誤り訂正されたリードデータを全体制御部２７に供給し、フローは終了する。ステップＳ４で算出されたシンドロームＮＧ数がゼロである場合、これは、リードデータが誤りを含まないことを意味する。よって、ＨＢ復号を実際に行わずとも、誤りを含まないリードデータが得られたことになり、この場合も、フローは終了する。
【００５１】
ＨＢ復号が失敗すると（ステップＳ５のＮｏ分岐）、処理はステップＳ１５に移行する。誤り訂正制御部２７１は、ステップＳ１１、Ｓ１２、Ｓ１３、Ｓ１４、Ｓ１５、Ｓ１６、Ｓ１７、およびＳ１８によって、ＬＬＲ値を使用したリードデータ中の誤り訂正（ＳＢ復号）を試みる。ステップＳ５とステップＳ１５との間にさらなる処理が行われても良い。そのような処理は、より良い（例えば、リードデータ中でより少ない誤りビットの数ＦＢＣ（fail bit count）が含まれることになると予想される）リード電圧ＶＣＧＲの推定、推定されたリード電圧ＶＣＧＲを使用したリード、およびＨＢ復号、または（ならびに）リード電圧ＶＣＧＲ１と異なるリード電圧ＶＣＧＲを使用したリード、およびＨＢ復号を含むことができる。
【００５２】
誤り訂正制御部２７１は、ステップＳ１１〜Ｓ１８の組を、後述のようにステップＳ１６でのＳＢ復号が成功するまで、または、リード回数ｎがある最大値に達するまで繰り返す。以下に、まずステップＳ５の後の最初のステップＳ１５、Ｓ１６、Ｓ１７およびＳ１８の組について記述される。ステップＳ１〜Ｓ５およびステップＳ５の後の最初のステップＳ１５、Ｓ１６、Ｓ１７およびＳ１８の組は、初回ループと称される。
【００５３】
ステップＳ１５において、誤り訂正制御部２７１は、現在取得済みのリードデータ、すなわち、現行の例ではイニシャルリードデータＲＤ１を使用して、リードデータＲＤ１に関連するＬＬＲ値を算出することをＬＬＲ算出部２７２に指示する。ＬＬＲ値は、イニシャルリードデータＲＤ１（実際には、処理中のフレーム）中の全ビットのそれぞれに１対１で対応し、よって、複数のＬＬＲ値が算出される。算出については、後に詳述される。誤り訂正制御部２７１は、得られたＬＬＲ値を復号回路２６２に供給する。
【００５４】
ステップＳ１６において、誤り訂正制御部２７１および復号回路２６２は協働で、算出されたＬＬＲ値を使用して、誤り訂正されたリードデータＲＤ１の取得、すなわちＳＢ復号を試みる。
【００５５】
ＳＢ復号が成功すると（ステップＳ１７のＹｅｓ分岐）、誤り訂正されたリードデータが得られ、フローは終了する。ＳＢ復号が失敗すると（ステップＳ１７のＮｏ分岐）、処理は、ステップＳ１８に移行する。ステップＳ１８において、誤り訂正制御部２７１は、リード回数ｎが最大回数ｎｍａｘであるかを判断する。最大回数ｎｍａｘは、例えば７である。初回ループでは、リード回数ｎは、最大回数ｎｍａｘ未満であるため、処理はステップＳ１１に移行する。
【００５６】
誤り訂正制御部２７１は、ステップＳ１１〜Ｓ１８の組のループ（２回目のループ）を行う。初回ループの後のステップＳ１１〜Ｓ１８の組のループは、非初回ループと称される。以下、非初回ループでのステップＳ１１、Ｓ１２、Ｓ１３、およびＳ１４が記述される。
【００５７】
ステップＳ１１において、誤り訂正制御部２７１は、リード回数ｎを１インクリメントする。
【００５８】
ステップＳ１２において、誤り訂正制御部２７１は、メモリインターフェイス２５を通じて、半導体メモリ１にシフトリードを指示する。シフトリードは、イニシャルリードでのリード電圧ＶＣＧＲ（例えばリード電圧ＶＣＧＲ１）と異なるリード電圧ＶＣＧＲを使用したリードを指す。イニシャルリードでのリード電圧ＶＣＧＲ１と異なるリード電圧ＶＣＧＲの選択の方法は、任意のものであることが可能であり、一例は第２実施形態において記述される。
【００５９】
ある非初回ループ中のステップＳ１２において、誤り訂正制御部２７１は、当該ループより前の全てのループでのイニシャルリード（ステップＳ１）およびシフトリード（ステップＳ１２）でのリード電圧ＶＣＧＲのいずれとも異なるリード電圧ＶＣＧＲを指定する。すなわち、ある非初回の第ｎループにおいて、リード電圧ＶＣＧＲｎが指定され、リード電圧ＶＣＧＲｎは、いずれのリード電圧ＶＣＧＲγ（γはｎ未満の自然数）とも異なる。具体例として、第２ループ中のステップＳ１２において、メモリコントローラ２は、半導体メモリ１にシフトリード（シフトリードＳＲ２と称される）を指示する。シフトリードＳＲ２は、リード電圧ＶＣＧＲ１と異なるリード電圧ＶＣＧＲ２を指定する。リード電圧ＶＣＧＲ２は、リード電圧ＶＣＧＲ１と任意の大きさの差を有することができる。半導体メモリ１は、シフトリードＳＲ２を指示されると、シフトリードＳＲ２を行って、得られたリードデータ（シフトリードデータＲＤ２と称される）を取得し、シフトリードデータＲＤ２をメモリコントローラ２に送信する。
【００６０】
以下、第ｎループでのシフトリードは、シフトリードＳＲｎと称され、第ｎループでのシフトリードデータは、シフトリードデータＲＤｎと称される。また、イニシャルリードおよびシフトリードは、互いに区別される必要が無い場合、単にリードと称される場合がある。同様に、イニシャルリードデータＲＤ１およびシフトリードデータＲＤｎは、それぞれ、単にリードデータＲＤ１とリードデータＲＤｎと称される場合がある。
【００６１】
リード電圧ＶＣＧＲｎは、任意の大きさを有することができ、リード電圧ＶＣＧＲ１〜ＶＣＧＲｎ−１を使用したリードよりもより復号に成功しやすいリードデータに繋がることを目指して決定されることができる。そのための方法の具体的な例は、後述され、また、第２実施形態で記述される。
【００６２】
第ｎループ中のステップＳ１３において、全体制御部２７は、第ｎループでのステップＳ１２での指示によるシフトリードデータＲＤｎを受け取り、受け取られたシフトリードデータをＲＡＭ２３中に保持する。
【００６３】
第ｎループ中のステップＳ１４において、誤り訂正制御部２７１は、シンドロームチェック回路２６１を制御し、ＬＤＰＣ符号を使用して、第ｎループでのステップＳ１３で保持されたシフトリードデータＲＤｎのシンドロームＮＧ数を算出する。算出されたシンドロームＮＧ数は、誤り訂正制御部２７１の制御によって、シフトリードデータＲＤ１と関連付けてＲＡＭ２３において保持される。ＬＤＰＣ符号に基づくシンドロームＮＧ数は、シンドロームベクトルの算出の対象である入力（現文脈では、シフトリードデータＲＤｎ）中の誤りの数がより少ないと、より小さい値を有することが知られている。
【００６４】
第ｎループ中のステップＳ１５において、上記のように、誤り訂正制御部２７１は、現在取得済みの全てのリードデータを使用して、イニシャルリードデータＲＤ１に関連するＬＬＲ値を算出することをＬＬＲ算出部２７２に指示する。具体例として、第２ループ中のステップＳ１５において、誤り訂正制御部２７１は、イニシャルリードデータＲＤ１およびシフトリードデータＲＤ２を使用して、ＬＬＲ値を算出する。ループが繰り返される度に、より多くのリードデータＲＤが得られる。このため、ループが繰り返される度に、より多くのリードデータに基づくＬＬＲ値が算出される。第ｎループ中のステップＳ１５で算出されるＬＬＲ値は、第１〜第ｎ−１ループ中のステップＳ１５で算出されるＬＬＲ値よりも、高い確率でのＳＢ復号成功に繋がる場合がある。
【００６５】
第ｎループ中のステップＳ１６において、誤り訂正制御部２７１は、第ｎループのステップＳ１５で算出されたＬＬＲ値を使用して、選択セルユニットＣＵからのリードデータの誤り訂正、すなわちＳＢ復号を試みる。
【００６６】
第ｎループ中のステップＳ１８において、ｎが最大回数ｎｍａｘに達すると、ＳＢ復号は失敗であり、フローは終了する。この場合、誤り訂正制御部２７１は、別の方法での誤り訂正（例えば、積符号を使用した訂正）を試みることができる。
【００６７】
なお、ＨＢ復号をＳＢ復号に内包される概念として捉えて、ステップＳ４のＨＢ復号を省略して、ｎ＝１の段階でＳＢ復号が行われても良い。その場合、ステップＳ４では、ＨＢ復号に代えてＳＢ復号が行われ、ステップＳ４のＮｏ分岐はステップＳ１８に継続する。
【００６８】
＜２．１  ステップＳ１５（ＬＬＲ値の算出）＞
図７〜図９は、第１実施形態のＬＬＲ値算出の例の詳細を示し、選択セルユニットＣＵ中のセルトランジスタ（選択セルトランジスタ）ＭＴの閾値の分布の一部および使用されたリード電圧を示す。
【００６９】
ステップＳ１３では、上記のようループが繰り返される度にこれまでのループで得られた複数のリードデータを用いたＬＬＲ値が算出されれば良く、以下の例に限られない。
【００７０】
図７〜図９は、メモリセルトランジスタＭＴの閾値電圧分布曲線を示す。メモリセルトランジスタＭＴの閾値電圧は、図３を参照して記述されるように、互いに分離された相違する状態で分布していることが望ましい。しかしながら、書き込み後の種々の要因により隣り合うステートの閾値電圧分布が重なり合う場合がある。図７〜図９は、そのような状態を示す。
【００７１】
図７は、初回ループでのＬＬＲ値の算出の例を示す。すなわち、図７のケースでは、リードＲ１のみが実行済みであり、リードデータＲＤ１のみが取得済みである。
【００７２】
図８は、第２ループでのＬＬＲ値算出の例を示す。すなわち、図８のケースでは、リードＲ１およびＳＲ２が実行済みであり、リードデータＲＤ１およびＲＤ２が取得済みである。
【００７３】
図９は、第３ループでのＬＬＲ値算出の例を示す。すなわち、図９のケースでは、リードＲ１、ＳＲ２、およびＳＲ３が実行済みであり、リードデータＲＤ１、ＲＤ２、およびＲＤ３が取得済みである。
【００７４】
図１０は、第４ループでのＬＬＲ値算出の例を示す。すなわち、図１０のケースでは、リードＲ１、ＳＲ２、ＳＲ３、およびＳＲ４が実行済みであり、リードデータＲＤ１、ＲＤ２、ＲＤ３、およびＲＤ４が取得済みである。
【００７５】
図７に示されるように、リード電圧ＶＣＧＲ１を使用してリードＲ１が実行されたのみである。リードが１回のみ実行済みであることに基づいて、リードデータＲＤ１のうち、電圧ＶＣＧＲ１以上の閾値電圧Ｖｔｈを有する各選択セルトランジスタＭＴからの１ビットデータには、ある一定の、例えば３のＬＬＲ値が割り当てられる。一方、リードデータＲＤ１のうち、電圧ＶＣＧＲ１未満の閾値電圧Ｖｔｈを有する各選択セルトランジスタＭＴからの１ビットデータには、例えば、電圧ＶＣＧＲ１以上の閾値電圧Ｖｔｈを有する各選択セルトランジスタＭＴからの１ビットデータに割り当てられたＬＬＲ値の反対の符号の値、すなわち−３のＬＬＲ値が割り当てられる。
【００７６】
図８に示されるように、リード電圧ＶＣＧＲ１を使用したリードに加えて、リード電圧ＶＣＧＲ２を使用してリードＳＲ２がさらに実行された。リード電圧ＶＣＧＲ２は、リード電圧ＶＣＧＲ１より高い。リード電圧ＶＣＧＲ１とＶＣＧＲ２との差ｄ１は例えば０．１Ｖである。
【００７７】
まず、誤り訂正制御部２７１は、リード電圧ＶＣＧＲ１およびＶＣＧＲ２のいずれを、ＬＬＲ値の符号の境界として使用するかを任意の基準に基づいて決定する。例として、リード電圧ＶＣＧＲ１を使用して得られたリードデータ（すなわちイニシャルリードデータＲＤ１）およびリード電圧ＶＣＧＲ２を使用して得られたリードデータ（すなわちシフトリードデータＲＤ２）のうちのいずれがより少ない誤りビットを含むかが基準として使用されることができる。その目的で行われる方法の一例として、誤り訂正制御部２７１は、ステップＳ４で算出されたリードデータＲＤ１のシンドロームＮＧ数および第２ループ中のステップＳ１４で算出されたリードデータＲＤ２のシンドロームＮＧ数を比較する。そして、誤り訂正制御部２７１は、より小さいシンドロームＮＧ数の算出の基になったリードデータを取得するために使用されたリード電圧ＶＣＧＲをＬＬＲ値の符号の境界として使用する。この境界に相当する電圧は、以下、境界リード電圧と称される。現行の例では、リードデータＲＤ２に含まれると推定される誤りビットの数ＦＢＣが、リードデータＲＤ１に含まれると推定されるＦＢＣより小さいと推定される。よって、誤り訂正制御部２７１は、リード電圧ＶＣＧＲ２を、ＬＬＲ値の境界の符号として使用することを決定する。
【００７８】
リード電圧ＶＣＧＲ１およびＶＣＧＲ２のいずれを境界リード電圧として使用するかの決定は、いわゆるオンセルの数に基づくこともできる。オンセルは、対応するリード電圧が選択セルユニットＣＵと接続されたワード線（選択ワード線）ＷＬに印加されたときにオンしているセルトランジスタである。メモリコントローラ２は、例えばＶｔｈトラッキングの一環として、種々のリード電圧のそれぞれでのオンセル数を計数する。その際に得られる複数のオンセル数から算出された、セルトランジスタＭＴの閾値電圧Ｖｔｈと当該閾値電圧Ｖｔｈを有するセルトランジスタＭＴの数との関係のうちの極小値が使用されることができる。
【００７９】
次いで、誤り訂正制御部２７１は、現在のループ（現行の例では、第２ループ）で使用されるＬＬＲ値の絶対値の最大値ＬＬＲｍａｘを算出する。ＬＬＲｍａｘは、例えば、現ループの段階で実行済みのイニシャルリードおよびシフトリードの合計の回数、および現ループの段階での境界リード電圧ＶＣＧＲから最も大きく離れたリード電圧ＶＣＧＲとの差の絶対値（最大シフト量）に基づくことができる。より具体的には、ＬＬＲ値の最大値は、以下の式（１）により算出されることができる。式（１）において、変数ｄは現ループの段階での最大シフト量を表す。また、ＬＬＲｎ（ｎ）は、リード回数ｎに対応付けて予め定められた値であり、ＬＬＲｄ（ｄ）は、最大シフト量ｄに対応付けて予め定められた値である。  
ＬＬＲｍａｘ（ｎ，ｄ）＝ｍｉｎ｛ＬＬＲｎ（ｎ），ＬＬＲｄ（ｄ）｝        （１）
例として、ＬＬＲｎ（ｎ）およびＬＬＲｄ（ｄ）は、図１１および図１２に示される表から割り出されることができる。図１１に示されるように、リード回数テーブルは、各リード回数ｎに対応する値ＬＬＲｎ（ｎ）を示す。図１２に示されるように、最大シフト量テーブルは、最大シフト量ｄに対応するＬＬＲｄ（ｄ）を示す。リード回数テーブルおよび最大シフト量テーブルは、例えば、ＲＡＭ２３において保持される。
【００８０】
図８に戻る。現行の例に基づくと、リード回数ｎは２であり、最大シフト量ｄ１は０．１である。このため、式（１）は、ＬＬＲｍａｘ（２，０．１）＝ｍｉｎ｛３，５｝＝３を導く。
【００８１】
現行の例では、リード電圧ＶＣＧＲ１が、境界リード電圧ＶＣＧＲ２と最大シフト量の差を有し、リード電圧ＶＣＧＲ１は、境界リード電圧ＶＣＧＲ２より低く、上記のようにリード電圧ＶＣＧＲ２がＬＬＲ値の符号の境界である。よって、誤り訂正制御部２７１は、境界リード電圧ＶＣＧＲ２によるリードで得られたデータ、すなわちリードデータＲＤ２をハードビットとして使用することを決定する。そして、誤り訂正制御部２７１は、リードデータＲＤ２のうち、算出されたＬＬＲｍａｘ＝３と負の符号からなる−３を、リード電圧ＶＣＧＲ１未満の閾値電圧Ｖｔｈを有する各選択セルトランジスタＭＴからの１ビットデータに割り当てる。
【００８２】
次に、誤り訂正制御部２７１は、残りの範囲に属する閾値電圧Ｖｔｈを有する選択セルトランジスタのビットのためのＬＬＲ値を算出する。ＬＬＲ値の算出の対象の範囲は、任意の順で選択されることができる。例として、ＶＣＧＲ１≦Ｖｔｈ＜ＶＣＧＲ２のためのＬＬＲ値がまず算出される。算出は、ＬＬＲｍａｘおよびリード電圧ＶＣＧＲ２を使用した補間により行われることができる。より具体的な例として、誤り訂正制御部２７１は、式（２）を用いて、他のＬＬＲ値を算出する。式（２）において、変数ｒは、あるリード電圧ＶＣＧＲ（現行の例では、リード電圧ＶＣＧＲ２）と境界リード電圧ＶＣＧＲとの差の絶対値を表す。  
ＬＬＲＡ（ｒ）＝ｆｌｏｏｒ（ｒ／ｄ×ＬＬＲｍａｘ＋０．５）          （２）
ただし、ＬＬＲＡ（ｒ）＝０と算出された場合、当該ＬＬＲ（ｒ）は１に置き換えられる。
【００８３】
現行の例に基づくと、式（２）は、ＬＬＲＡ（０）＝ｆｌｏｏｒ（０／０．１×３＋０．５）＝ｆｌｏｏｒ（０．５）＝０を導く。よって、誤り訂正制御部２７１は、ＬＬＲＡ（０）＝１を使用することを決定する。そして、リード電圧ＶＣＧＲ２がＬＬＲ値の符号の境界であり、よって、誤り訂正制御部２７１は、リードデータＲＤ２のうち、得られたＬＬＲＡ（＝１）の負の値である−１を、ＶＣＧＲ１≦Ｖｔｈ＜ＶＣＧＲ２の閾値電圧Ｖｔｈを有する各選択セルトランジスタＭＴからの１ビットデータに割り当てる。
【００８４】
同様に、誤り訂正制御部２７１は、ＶＣＧＲ２≦ＶｔｈのためのＬＬＲ値を算出する。誤り訂正制御部２７１は、式（２）から、ＬＬＲＡ（０）＝ｆｌｏｏｒ（０／０．１×３＋０．５）＝ｆｌｏｏｒ（０．５）＝０を導く。よって、リードデータＲＤ２のうち、誤り訂正制御部２７１は、ＬＬＲＡ（０）＝１を、ＶＣＧＲ２≦Ｖｔｈの閾値電圧Ｖｔｈを有する各選択セルトランジスタＭＴからの１ビットデータに割り当てる。
【００８５】
図９に示されるように、リード電圧ＶＣＧＲ１およびＶＣＧＲ２を使用したリードに加えて、リード電圧ＶＣＧＲ３を使用してシフトリードＳＲ３がさらに実行された。リード電圧ＶＣＧＲ３は、リード電圧ＶＣＧＲ２より高い。リード電圧ＶＣＧＲ２とＶＣＧＲ３との差ｄ２は、例えば０．１Ｖである。
【００８６】
まず、誤り訂正制御部２７１は、リード電圧ＶＣＧＲ１、ＶＣＧＲ２、およびＶＣＧＲ３のいずれを境界リード電圧として使用するかを決定する。例として、図８を参照して上記されたようにシンドロームＮＧ数に基づき、誤り訂正制御部２７１はリード電圧ＶＣＧＲ２を境界リード電圧として使用することを決定する。また、誤り訂正制御部２７１は、境界リード電圧ＶＣＧＲ２によるリードで得られたリードデータＲＤ２をハードビットとして使用することを決定する。
【００８７】
次いで、誤り訂正制御部２７１は、現在のループ（現行の例では、第３ループ）で使用されるＬＬＲ値の最大値ＬＬＲｍａｘを算出する。例として、ＬＬＲｍａｘは、図８を参照して上記されたように、式（１）から算出される。図９の例に基づくと、リード回数ｎ＝３であり、最大シフト量ｄ＝ｄ１＝ｄ２＝０．１であり、よって、誤り訂正制御部２７１は、式（１）、リード回数テーブル、および最大シフト量テーブルを使用して、ＬＬＲｍａｘ（３，０．１）＝ｍｉｎ｛３，５｝＝３を導く。誤り訂正制御部２７１は、リードデータＲＤ２のうち、算出されたＬＬＲｍａｘ（＝３）を、境界リード電圧ＶＣＧＲ２と最大シフト量の差を有するリード電圧ＶＣＧＲ、すなわち、リード電圧ＶＣＧＲ３以上の閾値電圧Ｖｔｈを有する各選択セルトランジスタＭＴからの１ビットデータに割り当てる。なお、算出されたＬＬＲｍａｘ（＝３）の負の値である−３をリード電圧ＶＣＧＲ１未満の閾値電圧Ｖｔｈを有する各選択セルトランジスタＭＴからの１ビットデータに割り当ててもよい。
【００８８】
次に、誤り訂正制御部２７１は、図８を参照して記述されたのと同様にして、残りの閾値電圧範囲についてのＬＬＲ値を算出する。算出の結果は以下の通りである。
【００８９】
ＶＣＧＲ２≦Ｖｔｈ＜ＶＣＧＲ３の範囲については、リード回数ｎ＝３、最大シフト量ｄ＝０．１、差の絶対値ｒ＝０である。この結果、式（２）は、ＬＬＲ（０）＝ｆｌｏｏｒ（０／０．１×３＋０．５）＝ｆｌｏｏｒ（０．５）＝０を導く。よって、誤り訂正制御部２７１は、リードデータＲＤ２のうち、ＶＣＧＲ２≦Ｖｔｈ＜ＶＣＧＲ３の閾値電圧Ｖｔｈを有する各選択セルトランジスタＭＴからの１ビットデータに＋１のＬＬＲ値を割り当てる。
【００９０】
ＶＣＧＲ１≦Ｖｔｈ＜ＶＣＧＲ２の範囲については、リード回数ｎ＝３、最大シフト量ｄ＝０．１、差の絶対値ｒ＝０である。この結果、式（２）は、ＬＬＲ（０）＝ｆｌｏｏｒ（０／０．１×３＋０．５）＝ｆｌｏｏｒ（０．５）＝０を導く。よって、誤り訂正制御部２７１は、リードデータＲＤ２のうち、ＶＣＧＲ２≦Ｖｔｈ＜ＶＣＧＲ３の閾値電圧Ｖｔｈを有する各選択セルトランジスタＭＴからの１ビットデータに−１のＬＬＲ値を割り当てる。
【００９１】
Ｖｔｈ＜ＶＣＧＲ１の範囲については、リード回数ｎ＝３、最大シフト量ｄ＝０．１、差の絶対値ｒ＝０．１である。この結果、式（２）は、ＬＬＲ（０．１）＝ｆｌｏｏｒ（０．１／０．１×３＋０．５）＝ｆｌｏｏｒ（３．５）＝３を導く。よって、誤り訂正制御部２７１は、リードデータＲＤ２のうち、Ｖｔｈ＜ＶＣＧＲ１の閾値電圧Ｖｔｈを有する各選択セルトランジスタＭＴからの１ビットデータに−３のＬＬＲ値を割り当てる。
【００９２】
図１０に示されるように、リード電圧ＶＣＧＲ１、ＶＣＧＲ２、およびＶＣＧＲ３を使用したリードに加えて、リード電圧ＶＣＧＲ４を使用してシフトリードＳＲ４がさらに実行された。リード電圧ＶＣＧＲ４は、リード電圧ＶＣＧＲ１より高く、リード電圧ＶＣＧＲ２より低い。リード電圧ＶＣＧＲ１とＶＣＧＲ４との差ｄ３は例えば０．０５であり、リード電圧ＶＣＧＲ２とＶＣＧＲ４との差ｄ４は例えば０．０５Ｖである。
【００９３】
例として、誤り訂正制御部２７１は、リード電圧ＶＣＧＲ４をＬＬＲ値の符号の境界として使用すること、および境界リード電圧ＶＣＧＲ４によるリードで得られたリードデータＲＤ４をハードビットとして使用することを決定する。次いで、誤り訂正制御部２７１は、現在のループ（現行の例では、第４ループ）で使用されるＬＬＲ値の最大値ＬＬＲｍａｘを算出する。図９の例に基づくと、リード回数ｎ＝４であり、最大シフト量ｄ＝ｄ５＝ｄ２＋ｄ４＝０.１５であり、よって、ＬＬＲｍａｘは、ＬＬＲｍａｘ（４，０．１５）＝ｍｉｎ｛５，６｝＝５を導く。このため、誤り訂正制御部２７１は、算出されたＬＬＲｍａｘ（＝５）を、リードデータＲＤ４のうち、最大であるリード電圧ＶＣＧＲ３以上の閾値電圧Ｖｔｈを有する各選択セルトランジスタＭＴからの１ビットデータに割り当てる。
【００９４】
次に、誤り訂正制御部２７１は、図８を参照して記述されたのと同様にして、残りの閾値電圧範囲についてのＬＬＲ値を算出する。算出の結果は以下の通りである。
【００９５】
ＶＣＧＲ２≦Ｖｔｈ＜ＶＣＧＲ３の範囲については、リード回数ｎ＝４、最大シフト量ｄ＝０．１５、差の絶対値ｒ＝０．０５である。この結果、式（２）は、ＬＬＲ（０．０５）＝ｆｌｏｏｒ（０．０５／０．１５×５＋０．５）＝ｆｌｏｏｒ（２．１７）＝２を導く。よって、誤り訂正制御部２７１は、リードデータＲＤ４のうち、ＶＣＧＲ２≦Ｖｔｈ＜ＶＣＧＲ３の閾値電圧Ｖｔｈを有する各選択セルトランジスタＭＴからの１ビットデータに＋２のＬＬＲ値を割り当てる。
【００９６】
ＶＣＧＲ４≦Ｖｔｈ＜ＶＣＧＲ２の範囲については、リード回数ｎ＝４、最大シフト量ｄ＝０．１５、差の絶対値ｒ＝０である。この結果、式（２）は、ＬＬＲ（０）＝ｆｌｏｏｒ（０／０．１５×５＋０．５）＝ｆｌｏｏｒ（０．５）＝０を導く。よって、誤り訂正制御部２７１は、リードデータＲＤ４のうち、ＶＣＧＲ４≦Ｖｔｈ＜ＶＣＧＲ２の閾値電圧Ｖｔｈを有する各選択セルトランジスタＭＴからの１ビットデータに＋１のＬＬＲ値を割り当てる。
【００９７】
ＶＣＧＲ１≦Ｖｔｈ＜ＶＣＧＲ４の範囲については、リード回数ｎ＝４、最大シフト量ｄ＝０．１５、差の絶対値ｒ＝０である。この結果、式（２）は、ＬＬＲ（０）＝ｆｌｏｏｒ（０／０．１５×５＋０．５）＝ｆｌｏｏｒ（０．５）＝０を導く。よって、誤り訂正制御部２７１は、リードデータＲＤ４のうち、ＶＣＧＲ１≦Ｖｔｈ＜ＶＣＧＲ４の閾値電圧Ｖｔｈを有する各選択セルトランジスタＭＴからの１ビットデータに−１のＬＬＲ値を割り当てる。
【００９８】
Ｖｔｈ＜ＶＣＧＲ１の範囲については、リード回数ｎ＝４、最大シフト量ｄ＝０．１５、差の絶対値ｒ＝０．０５である。この結果、式（２）は、ＬＬＲ（０．０５）＝ｆｌｏｏｒ（０．０５／０．１５×５＋０．５）＝ｆｌｏｏｒ（２．１７）＝２を導く。よって、誤り訂正制御部２７１は、リードデータＲＤ４のうち、Ｖｔｈ＜ＶＣＧＲ１の閾値電圧Ｖｔｈを有する各選択セルトランジスタＭＴからの１ビットデータに−２のＬＬＲ値を割り当てる。
【００９９】
図７〜図１０から分かるように、より多いループの実行は、より詳細なＬＬＲ値の組をもたらす。すなわち、ＬＬＲ値のより多くの範囲が得られ、より多くの種類のＬＬＲ値が得られ、このことは、リード対象データ中の各ビットのデータについてのより詳細な尤もらしさが得られることに繋がる。よって、より詳細なＬＬＲの組が得られることにより、ループを繰り返す度に、ＳＢ復号が成功することに繋がる場合がある。
【０１００】
＜２．２  多値記憶（１セルトランジスタ当たり２ビット以上の記憶）への適用＞
例えばロワーページリードの場合、図６〜図１２を参照して記述されたリードがＡリードおよびＥＲリードに適用され、得られたデータが論理演算されて、ロワーページデータが取得される。すなわち、メモリコントローラ２は、まず、リード電圧ＶＡをステップＳ２でのリード電圧ＶＣＧＲ１として使用して、誤り訂正されたリードデータ（Ａリードデータ）を取得する。次いで、メモリコントローラ２は、リード電圧ＶＥをステップＳ２でのリード電圧ＶＣＧＲ１として使用して、誤り訂正されたリードデータ（Ｅリードデータ）を取得する。そして、メモリコントローラ２は、ＡリードデータとＥリードデータのそれぞれの同じ位置のビットの組の全てに対して論理演算を行う。論理演算の結果のビットの組がロワーページデータに相当する。ＡリードデータおよびＥリードデータの両方において値１を有するビットは、ロワーページデータにおいて値１を有する。Ａリードデータにおいて値０を有するとともにＥリードデータにおいて値１を有するビットは、ロワーページデータにおいて値０を有する。ＡリードデータおよびＥリードデータの両方において値０を有するビットは、ロワーページデータにおいて値１を有する。ミドルページリードおよびアッパーページリードも同様である。
【０１０１】
＜３．利点（効果）＞
第１実施形態によれば、以下に記述されるように、素早くＳＢ復号に成功する可能性が高い。
【０１０２】
図１３は、データリードおよびＳＢ復号での処理の流れを概略的に示し、部分（ａ）において参考用の例での処理の流れを示し、部分（ｂ）において第１実施形態での処理の流れを示す。図１３は、選択セルユニットＣＵの１ページに保持されるデータのリードの一部を構成し、選択セルユニットＣＵの１ページからのイニシャルリードからＳＢ復号までを示す。
【０１０３】
参考例では、部分（ａ）に示されるように、イニシャルリードにより読み出されたデータ（イニシャルリードデータ）のＳＢ復号の開始に先立ち、ＳＢ復号実行のために複数回のシフトリードが必要である。すなわち、メモリコントローラは、予め定められた回数の所定のシフトリードが完了した後で初めて、イニシャルリードデータのＳＢ復号を開始できる。必要なシフトリードの回数は、種々の事項に基づいて予め定められており、図１３の部分（ａ）は、７回のシフトリード（シフトリード１〜シフトリード７）が必要な例を示す。
【０１０４】
予め定められた回数のシフトリードが必要な理由の１つは、イニシャルリードデータの各ビットについてのある種の値（ラベル）を導出し、ラベルをＳＢ復号に必要なＬＬＲ値に変換する必要があることに起因する。すなわち、ラベルからＬＬＲ値への変換が予め用意された変換テーブル（ＬＬＲテーブル）により行われ、よって、ＬＬＲ値の取得がラベルの取得を必要とする。そして、ラベルが複数回のシフトリードの完了により初めて得られ、このことが、ＳＢ復号の開始に予め定められた回数のシフトリードを要求する。
【０１０５】
第１実施形態のメモリコントローラは、ＬＬＲ値の取得のために、リードデータからＬＬＲ値を算出し、リード回数ｎに対応付けて予め定められた値および最大シフト量ｄに対応付けて予め定められた値、ならびにリード電圧ＶＣＧＲと境界リード電圧との差の絶対値を使用して算出する。本明細書および特許請求の範囲において、「算出」とは、ＬＬＲテーブルのような、ある１対１の関係を使用して、一方の値から別の値を割り出すことを含まない。よって、第１実施形態のメモリコントローラは、ＬＬＲテーブルを使用せずに、ＬＬＲテーブルを「算出」する。このため、図１３の部分（ｂ）に示されるように、各リードの度に、ＬＬＲ値が得られるとともに得られたＬＬＲ値によってＳＢ復号を開始できる。そして、リード（特に、シフトリード）の回数が増えるごとにより詳細なＬＬＲ値が得られる。最初の数回のシフトリードではＬＬＲ値の精度は低いが、それでも、参考例のように必要な回数のシフトリードが完了することを待つことなくＳＢ復号を開始する可能性が生まれる。したがって、少ないループ数の段階でＳＢ復号が成功すれば、参考例よりも素早くＳＢ復号を完了でき得る。
【０１０６】
また、第１実施形態によれば、以下に記述されるように、多数のＬＬＲテーブルを保持する必要がない。
【０１０７】
一般に、半導体メモリでは、負のリード電圧を使用してデータが読み出されることが難しく、閾値電圧分布が閾値電圧の負の領域に入っている場合、負の領域でのシフトリードが行われることができないことがある。このような場合で、かつ上記の参考例のように所定回数（例えば７回）のシフトリードに基づくＬＬＲラベルが必要な場合、ＬＬＲラベルが取得されることができないため、所定回数のシフトリードに基づいて作成されたＬＬＲテーブルが使用されることができない。このようなケースに備えて、メモリコントローラは、いくつかのシフトリードを欠いて得られたＬＬＲラベル用のＬＬＲテーブルを保持している。このように、ＬＬＲラベル取得に所定回数のシフトリードが必要なＳＢ復号は、種々の多数のＬＬＲテーブルを必要とする。
【０１０８】
第１実施形態のメモリコントローラ２は、ＬＬＲ値を算出できる。このため、負の閾値電圧を有するセルトランジスタＭＴのためのＬＬＲ値を取得でき、さらに、そもそもＬＬＲテーブルは不要である。よって、メモリコントローラでの必要なデータの量は、参考例のメモリコントローラでの必要なデータの量より少ない。
【０１０９】
また、第１実施形態によれば、以下に記述されるように、ＳＢ復号とは異なる目的で半導体メモリ１から読み出されたデータがＳＢ復号に利用されることができる。
【０１１０】
図１４は、データリードおよびＳＢ復号での処理の流れを概略的に示し、部分（ａ）において参考用の例での処理の流れを示し、部分（ｂ）において第１実施形態での処理の流れを示す。図１４は、図１３と同様に、あるリード対象のページに保持されるデータのリードの一部を構成し、選択セルユニットＣＵの１ページに保持されるデータのリードの一部を構成し、選択セルユニットＣＵの１ページからのイニシャルリードからＳＢ復号までを示す。
【０１１１】
図１４の部分（ａ）に示されるように、イニシャルリードの後、Ｖｔｈトラッキングが行われる。図１５に示されるように、閾値電圧分布は、書き込み直後の状態（図１５の上側）から別の状態（図１５の下側）に変化し得る。変化後の状態では、デフォルトのリード電圧ＶＡを用いたリードよりも、閾値電圧分布の極小位置に対応するリード電圧ＶＡｏｐｔの使用の方が、より良いリード（より高い誤り訂正成功率）に繋がり得る。このことに基づいて、メモリコントローラ２は、閾値電圧分布の極小位置を割り出すために、Ｖｔｈトラッキングを行うことができる。Ｖｔｈトラッキングは、イニシャルリードでのリード電圧ＶＣＧＲと異なる複数のリード電圧での複数回のシフトリードと、シフトリードの結果に基づく極小位置の電圧（例えば、リード電圧ＶＡｏｐｔ）の推定を含む。図１４の例では、Ｖｔｈトラッキングのために、５回のシフトリードが行われる。
【０１１２】
Ｖｔｈトラッキングリードにより推定された極小位置電圧ＶＡｏｐｔをリード電圧として使用したリードでもＨＢ復号に失敗すると、ＳＢ復号が開始する。図１３の部分（ａ）を参照して記述されたように、ＳＢ復号のために、所定の回数（例えば７回）のシフトリードが必要である。
【０１１３】
ＶｔｈトラッキングのためシフトリードとＳＢ復号のためのシフトリードは、本質的には同じである。しかしながら、目的が異なるため、Ｖｔｈトラッキングのためのシフトリードで指定される複数のリード電圧は、ＳＢ復号のためのシフトリードで指定される複数のリード電圧と一致しない。目的の相違に起因して、複数のリード電圧の間隔が異なり、リード電圧の高さが異なり、および（または）必要なリード電圧の数が異なるためである。このため、図１４の部分（ａ）に示されるように、所定の回数のＶｔｈトラッキングリードの後、ＳＢ復号のためのシフトリードが別途必要である。
【０１１４】
第１実施形態によれば、ＬＬＲ値は算出される。このため、Ｖｔｈトラッキングリードで得られた複数のリードデータに基づいて、ＬＬＲ値が算出されることができる。よって、図１４の部分（ｂ）に示されるように、Ｖｔｈトラッキング目的のシフトリードの後、ＳＢ復号のために、図１４の部分（ａ）に示されるようにＳＢ復号のためのシフトリードが行われる必要が無い。よって、図１４の部分（ａ）の例よりも短い時間でＳＢ復号が完了し得る。
【０１１５】
さらに、図１６に示されるように、ＶｔｈトラッキングとＳＢ復号が並行して行われることも可能である。すなわち、第１実施形態によれば、ＬＬＲ値の取得のためのリード電圧ＶＣＧＲのシフトの量は、任意の量に設定されることが可能である。このため、各Ｖｔｈトラッキング目的のシフトリードでリードデータが得られる度にＬＬＲ値が算出され、ＳＢ復号が行われることができる。このため、図１３の部分（ｂ）の場合よりもさらに早く、さらに、場合によってＶｔｈトラッキングが完了する前に、ＳＢ復号が成功する可能性がある。
【０１１６】
また、第１実施形態によれば、境界リード電圧（ハードビット）が、ＳＢ復号と並行して推定されることが可能である。ハードビットは、一般に、ＳＢ復号に先立って、Ｖｔｈトラッキングの間に行われる。これに対して、第１実施形態のように、ハードビットの推定とＳＢ復号が並行して行われることにより、誤り訂正が効率的に行われることができる。
【０１１７】
また、第１実施形態によれば、以下に記述されるケースでも、素早くＳＢ復号が成功する可能性がある。
【０１１８】
ＬＬＲラベル取得のための各シフトリードでは、イニシャルリードで使用されたリード電圧から予め定められた高さだけシフトされたリード電圧が使用されなければならない。ＬＬＲテーブルが、予め定められた方法で取得されたＬＬＲラベルと必要とし、ＬＬＲラベルの取得が予め定められた高さのリード電圧でのシフトリードを必要とするからである。しかしながら、予め定められた差を有するリード電圧が使用されると、ＳＢ復号が上手く行かない場合がある。
【０１１９】
例えば、図１７の部分（ａ）示されるように、隣り合う２つの閾値電圧分布の形状が大きく異なる場合、不均一な間隔のリード電圧が使用されるとともにそのようなリード電圧の使用を前提として生成されたＬＬＲテーブルが使用される場合がある。すなわち、２つの上に凸の曲線Ｌ１およびＬ２のうち、傾きが大きい方の曲線Ｌ１では、ＬＬＲ値の割り出しの範囲が狭いことが望まれるため、曲線Ｌ１中のリード電圧Ｖ１、Ｖ２、およびＶ３の間隔は狭い。一方、傾きが小さい方の上に凸の曲線Ｌ２中のリード電圧Ｖ３、Ｖ４、Ｖ５、およびＶ６の間隔は狭い。このようなリード電圧Ｖ１〜Ｖ６が使用されることが必要であり、リード電圧Ｖ１〜Ｖ６の隣り合う各２つの間の範囲のＬＬＲ値がＬＬＲテーブルを使用して割り出される。
【０１２０】
図１７の部分（ａ）の閾値電圧分布の全体が、時間の経過やディスターブによって、図１７の部分（ｂ）のように、閾値電圧のより高い方に移動したとする。このような場合、使用が必要なリード電圧Ｖ１〜Ｖ６では、ＬＬＲ値が、望まれる狭い範囲で割り出されることができない。例えば、リード電圧Ｖ４が極小点の近傍に位置し、リード電圧Ｖ４は、隣のリード電圧Ｖ３と広い間隔を有する。このため、左側の上に凸の曲線Ｌ１および極小点の近傍で、狭い範囲に対してＬＬＲ値が求められることがＳＢ復号の成功に繋がりやすいにも関わらず、そのような場所で狭い範囲に対するＬＬＲ値が得られない。
【０１２１】
第１実施形態によれば、ＬＬＲ値は算出されるため、図１７を参照して記述されたような、ＬＬＲテーブルの使用に基づいて存在する、使用されるリード電圧に制約は課されない。このため、各ＬＬＲ値が割り当てられる電圧範囲は任意に、ひいては柔軟に選択されることが可能であり、このことは、ＳＢ復号のより高い成功率に繋がる。
【０１２２】
（第２実施形態）
第２実施形態は、第１実施形態に付加的に使用され、第１実施形態のステップＳ１２（図６）でのリード電圧ＶＣＧＲｎの選択の詳細の例に関する。
【０１２３】
第２実施形態のメモリシステム５は、第１実施形態のメモリシステム５と同じ要素および接続を有する。一方、第２実施形態のメモリコントローラ２は、以下に記述される動作を行えるように構成されており、具体的には、ＲＯＭ２４中のファームウェアがメモリコントローラ２に以下に記述される動作を行わせるように構成されている。
【０１２４】
図１８は、第２実施形態のメモリシステム５の動作の一部のフローを示し、図６のステップＳ１２のサブフローを示す。ステップＳ１１は、ステップＳ１２０１に継続する。ステップＳ１２０１において、メモリコントローラ２は、前回の、すなわち第（ｎ−１）ループでのリード電圧ＶＣＧＲ（ｎ−２）と２つ前の第（ｎ−１）ループでのリード電圧（ＶＣＧＲ（ｎ−２）との差の絶対値｜ＶＣＧＲ（ｎ−２）−ＶＣＧＲ（ｎ−１）｜が或る規定値未満であるかを判断する。｜ＶＣＧＲ（ｎ−２）−ＶＣＧＲ（ｎ−１）｜が規定値以上である場合（Ｎｏ分岐）、処理はステップＳ１２０２に移行する。なお、ｎが２の場合は、ステップＳ１２０１は、ステップＳ１２０３には移行することは無く、ステップＳ１２０２に継続する。
【０１２５】
ステップＳ１２０２において、メモリコントローラ２は、勾配降下法を使用して、リードデータＲＤ１〜ＲＤ（ｎ−１）のそれぞれの推定されるＦＢＣ（以下、被推定ＦＢＣと称される）よりも小さい被推定ＦＢＣを含むと推定されるリードデータＲＤｎが得られると推定されるリード電圧ＶＣＧＲｎを決定する。勾配降下法は、最適化の広く良く知られた手法であり、詳細な記述は不要であり、よって、ここでは詳細な記述はなされない。代わりに、本実施形態に適用される場合の概要のみが以下に記述される。
【０１２６】
勾配降下法では、一般に、図１９および図２０に示されるように、２つの変数ｘｉ−１およびｘｉ、ならびに値ｈ（ｘｉ−１）およびｈ（ｘｉ）を使用して、ｘｉ+１が割り出される。値ｈ（Ｘ）は、値Ｘから割り出されることが可能である。ｈ（ｘｉ）＜ｈ（ｘｉ−１）の場合、ｘｉ+１＝ｘｉ−Ａ（ｈ（ｘｉ）−ｈ（ｘｉ−１））／（ｘｉ−ｘｉ−１）として算出される。Ａは、任意の正の数である。一方、ｈ（ｘｉ）＞ｈ（ｘｉ−１）の場合、ｘｉ+１＝ｘｉ−１−Ａ（ｈ（ｘｉ）−ｈ（ｘｉ−１））／（ｘｉ−ｘｉ−１）として算出される。このような算出を１ループとして、次のループにおいてｘｉをｘｉ−１として、ループの実行を繰り返す度に、より小さいｈ（ｘｉ）をもたらすｘｉが推定されることができる。
【０１２７】
ステップＳ１２０２での勾配降下法の使用のために、或るリード電圧ＶＣＧＲによるリードによって、被推定ＦＢＣまたは被推定ＦＢＣと任意の何らかの相関を持つＦＢＣ相関値ｊ（例えばｊはＬＤＰＣが使用されている場合はシンドロームのハミング重み）が取得されることが可能であるとする。そして、種々の相違するリード電圧ＶＣＧＲに対応する複数のＦＢＣ相関値ｊ（ＶＣＧＲ）の相互の比較により、リードデータＲＤ１〜ＲＤ（ｎ−１）のそれぞれの被推定ＦＢＣよりも小さい被推定ＦＢＣを含むと推定されるリードデータＲＤｎが得られると推定されるリード電圧ＶＣＧＲｎが決定される。
【０１２８】
図１９は、定数Ａが小さい場合の例を示す。図１９に示されるように、ｘ１、ｘ２、ｘ３、ｘ４、ｘ５とループの実行の順で、ｈ（ｘ１）、ｈ（ｘ２）、ｈ（ｘ３）、ｈ（ｘ４）、ｈ（ｘ５）は順に小さくなっている。そして、５回のループの結果、ｘ５が最小のｈ（ｘ５）をもたらすと分かった。
【０１２９】
図２０は、定数Ａが大きい場合の例を示す。図２０に示されるように、ｈ（ｘ４）はｈ（ｘ３）より大きく、よって、ｘ４より大きいｘ５が選択され、ｈ（ｘ５）がｈ（ｘ３）およびｈ（ｘ４）小さいので、ｘ５が最小のｈ（ｘ５）をもたらすと分かった。
【０１３０】
この手法に基づいて、メモリコントローラ２は、或る２つのリード電圧ＶＣＧＲｚ（ｚは自然数）およびＶＣＧＲ（ｚ−１）、ならびにＦＢＣ相関値ｊ（ＶＣＧＲｚ）およびｊ（ＶＣＧＲ（ｚ−１））を使用して、より少ない被推定ＦＢＣに繋がると推定されるリード電圧ＶＣＧＲ（ｚ＋１）を決定できる。最小の被推定ＦＢＣに繋がると推定されるリード電圧ＶＣＧＲｚは、例えば極小のＦＢＣ相関値ｊ（ＶＣＧＲｚ）に繋がるリード電圧ＶＣＧＲｚとされることが可能である。なお、勾配降下法では、ループを繰り返すことによって最適解が推定されることができるが、メモリコントローラ２は、ループを無制限に繰り返すことはできない。このため、メモリコントローラ２は、ステップＳ１２０２において、例えば所定の最大数のループだけ実行し、最大数のループの完了の時点で最小の被推定ＦＢＣに繋がるリード電圧が、リード電圧ＶＣＧＲｎとして採用されることを決定することができる。
【０１３１】
例えば、図２１に示されるように、ＦＢＣ相関値ｊ（ＶＣＧＲ）および勾配降下法を使用して、より小さいＦＢＣ相関値ｊ（ＶＣＧＲ）を得られると推定されるリード電圧ＶＣＧＲｎが推定されることができる。リード電圧ＶＣＧＲｎは、勾配降下法の実行済みループの中で最小のＦＢＣ相関値ｊ（ＶＣＧＲ）が得られると推定されたものである。
【０１３２】
図１８に戻る。ステップＳ１２０２はステップＳ１２０７に継続する。ステップＳ１２０７において、メモリコントローラ２は、決定されたリード電圧ＶＣＧＲｎでのリードを半導体メモリ１に指示する。
【０１３３】
ステップＳ１２０１で差の絶対値｜ＶＣＧＲ（ｎ−２）−ＶＣＧＲ（ｎ−１）｜が或る規定値未満であると判断される場合（Ｙｅｓ分岐）、処理はステップＳ１２０３に移行する。ここで、リード電圧ＶＣＧＲ１〜ＶＣＧＲ（ｎ−１）のそれぞれの被推定ＦＢＣのうちで最小と推定されるリードデータのリードに使用されたものであるリード電圧をリード電圧ＶＣＧＲ（ｍ）とする。そして、メモリコントローラ２は、ステップＳ１２０３において、これまでのリード電圧ＶＣＧＲ１〜ＶＣＧＲ（ｎ−１）のいずれかが、ＶＣＧＲ（ｍ）−０．３−ΔＶ（Δは例えば０．１Ｖ）以上ＶＣＧＲ（ｍ）−０．３Ｖ以下の範囲に含まれるかを判断する。リード電圧ＶＣＧＲ１〜ＶＣＧＲ（ｎ−１）のいずれもが、ＶＣＧＲ（ｍ）−０．３−ΔＶ以上ＶＣＧＲ（ｍ）−０．３Ｖ以下の範囲に含まれていない場合（Ｎｏ分岐）、処理はステップＳ１２０４に移行する。
【０１３４】
ステップＳ１２０４において、メモリコントローラ２は、ＶＣＧＲ（ｍ）−０．３Ｖをリード電圧ＶＣＧＲｎとして決定する。この処理が生じる状況の例が図２２に示されている。
【０１３５】
図２２に示されるように、リード電圧ＶＣＧＲｎの決定に先立って、リード電圧ＶＣＧＲ１１、ＶＣＧＲ１２（＜ＶＣＧＲ１１）、およびＶＣＧＲ１３（＜ＶＣＧＲ１２）を用いたリードが既に行われている。リード電圧ＶＣＧＲ１３を用いてリードされたリードデータＲＤ１３が、リードデータＲＤ１１、ＲＤ１２、およびＲＤ１３のそれぞれの被推定ＦＢＣの中で最小であると推定された。すなわち、リード電圧ＶＣＧＲ１３がリード電圧ＶＣＧＲ（ｍ）に相当する。そして、リード電圧ＶＣＧＲ１１、ＶＣＧＲ１２、およびＶＣＧＲ１３のいずれも、ＶＣＧＲ（ｍ）−０．３−ΔＶ以上ＶＣＧＲ（ｍ）−０．３Ｖ以下の範囲に含まれていない。よって、メモリコントローラ２は、ＶＣＧＲ（ｍ）−０．３Ｖであるリード電圧ＶＣＧＲ１４をリード電圧ＶＣＧＲｎとして決定する。リード電圧ＶＣＧＲ１５については後述される。
【０１３６】
図１８に戻る。ステップＳ１２０４は、ステップＳ１２０８に継続する。
【０１３７】
ステップＳ１２０３において、リード電圧ＶＣＧＲ１〜ＶＣＧＲ（ｎ−１）のいずれかがＶＣＧＲ（ｍ）−０．３−ΔＶ以上ＶＣＧＲ（ｍ）−０．３Ｖ以下の範囲に含まれている場合（Ｙｅｓ分岐）、処理はステップＳ１２０５に移行する。ステップＳ１２０５において、メモリコントローラ２は、リード電圧ＶＣＧＲ１〜ＶＣＧＲ（ｎ−１）のいずれかが、ＶＣＧＲ（ｍ）＋０．３Ｖ以上ＶＣＧＲ（ｍ）＋０．３＋ΔＶ以下の範囲に含まれているかを判断する。リード電圧ＶＣＧＲ１〜ＶＣＧＲ（ｎ−１）のいずれもが、ＶＣＧＲ（ｍ）＋０．３Ｖ以上ＶＣＧＲ（ｍ）＋０．３＋ΔＶ以下の範囲に含まれていない場合（Ｎｏ分岐）、処理はステップＳ１２０６に移行する。
【０１３８】
ステップＳ１２０６において、メモリコントローラ２は、ＶＣＧＲ（ｍ）＋０．３Ｖをリード電圧ＶＣＧＲｎとして決定する。この処理が生じる状況の例が図２２に示されている。
【０１３９】
図２２に示されるように、リード電圧ＶＣＧＲ１１〜ＶＣＧＲ１４のいずれも、ＶＣＧＲ（ｍ）＋０．３Ｖ以上ＶＣＧＲ（ｍ）＋０．３＋ΔＶ以下の範囲に含まれない。よって、メモリコントローラ２は、ＶＣＧＲ（ｍ）＋０．３Ｖであるリード電圧ＶＣＧＲ１５を、リード電圧ＶＣＧＲｎとして決定する。
【０１４０】
図１８に戻る。ステップＳ１２０６は、ステップＳ１２０８に継続する。
【０１４１】
ステップＳ１２０５において、リード電圧ＶＣＧＲ１〜ＶＣＧＲ（ｎ−１）のいずれかがＶＣＧＲ（ｍ）＋０．３Ｖ以上ＶＣＧＲ（ｍ）＋０．３＋ΔＶ以下の範囲に含まれている場合（Ｙｅｓ分岐）、処理はステップＳ１２０７に移行する。
【０１４２】
ステップＳ１２０７において、メモリコントローラ２は、リード電圧ＶＣＧＲ１〜ＶＣＧＲ（ｎ−１）の隣り合う各対のうちで、最も大きく離れた２つのリード電圧ＶＣＧＲを含む対の中の２つのリード電圧ＶＣＧＲの間の任意の値をリード電圧ＶＣＧＲｎとして決定する。リード電圧ＶＣＧＲｎは、例えば、最も離れた隣り合う２つのリード電圧ＶＣＧＲの中間の値を有する。この処理が生じる状況の例が図２３に示されている。
【０１４３】
図２３に示されるように、リード電圧ＶＣＧＲ１４はＶＣＧＲ（ｍ）−０．３Ｖであり、リード電圧ＶＣＧＲ１５はリード電圧ＶＣＧＲ（ｍ）＋０．３Ｖであり、リード電圧ＶＣＧＲ１１およびＶＣＧＲ１２は、リード電圧ＶＣＧＲ（ｍ）とリード電圧ＶＣＧＲ１５との間にある。よって、隣り合う２つのリード電圧ＶＣＧＲの各対のうちで、リード電圧ＶＣＧＲ（ｍ）とＶＣＧＲ１４との間隔が最も大きい。よって、メモリコントローラ２は、リード電圧ＶＣＧＲ（ｍ）とＶＣＧＲ１４の間の値、例えば中間の値であるリード電圧ＶＣＧＲ１６をリード電圧ＶＣＧＲｎとして決定する。
【０１４４】
図１８に戻る。ステップＳ１２０７は、ステップＳ１２０８に継続する。
【０１４５】
第２実施形態によれば、最小の被推定ＦＢＣに繋がるリード電圧ＶＣＧＲが未選択の場合は勾配降下法によりリード電圧ＶＣＧＲｎが選択され、最小の被推定ＦＢＣに繋がるリード電圧ＶＣＧＲが選択済みの場合は最小の被推定ＦＢＣに繋がるリード電圧ＶＣＧＲから最も大きく離れたリード電圧ＶＣＧＲｎが選択され、最も大きく離れたリード電圧ＶＣＧＲが選択済みの場合は、最も大きく離れた隣り合う２つのリード電圧ＶＣＧＲの間が補間される。このようリード電圧ＶＣＧＲｎの選択により、効率的に、第１実施形態のＳＢ復号の間のリード電圧ＶＣＧＲｎの選択が行われることができる。このことは、第１実施形態による効果を高めることができる。
【０１４６】
（第３実施形態）
第３実施形態は、ＬＬＲ値の算出の例に関し、第１実施形態の一部を代替する形で適用される。
【０１４７】
第３実施形態のメモリシステム５は、第１実施形態のメモリシステム５と同じ要素および接続を有する。一方、第３実施形態のメモリコントローラ２は、以下に記述される動作を行えるように構成されており、具体的には、ＲＯＭ２４中のファームウェアがメモリコントローラ２に以下に記述される動作を行わせるように構成されている。
【０１４８】
また、第３実施形態のメモリシステム５の動作のフローは第１実施形態（図６）と同じである。一方、第３実施形態は、ステップＳ１５（ＬＬＲ値の算出）の点で、第１実施形態と異なる。
【０１４９】
図２４は、第３実施形態のメモリシステム５でのＬＬＲ値算出の方法の概念を示す。図２４に示されるように、閾値電圧分布は、２つの関数ｆ（ＶＣＧＲ）およびｇ（ＶＣＧＲ）により近似的に表現されることが可能であると仮定される。曲線Ｌ１１がｆ（ＶＣＧＲ）であり、曲線Ｌ１２がｇ（ＶＣＧＲ）である。関数ｆ（ＶＣＧＲ）およびｇ（ＶＣＧＲ）は、例えば、予め、少なくとも図６のフローの開始の前に、メモリシステム５でのデータの書き込みおよびリードを行う、および（または）設計者がメモリシステム５の設計段階において半導体メモリ１を評価するなどして取得される。そして、関数ｆ（ＶＣＧＲ）およびｇ（ＶＣＧＲ）は、メモリコントローラ２に保持されている。
【０１５０】
或るリード電圧ＶＣＧＲａ以上ＶＣＧＲｂ未満の閾値電圧を有するセルトランジスタＭＴには、式（１）により算出されるＬＬＲ値が割り当てられる。
【０１５１】
【数１】
2019168813.tif 000003
【０１５２】
メモリコントローラ２は、関数ｆ（ＶＣＧＲ）およびｇ（ＶＣＧＲ）に代えて、関数Ｆ（ＶＣＧＲ）およびＧ（ＶＣＧＲ）を保持していてもよい。
【０１５３】
式（１）が使用されて、以下のように、ＬＬＲ値が算出される。図２５〜図２７は、第３実施形態のＬＬＲ値算出の例の詳細を示す。
【０１５４】
図２５は、初回ループ（ｎ＝１）でのＬＬＲ値算出を示す。すなわち、図２５のケースでは、リード電圧ＶＣＧＲ３１を使用したリードのみが実行済みである。
【０１５５】
図２６は、第２ループ（ｎ＝２）でのＬＬＲ値算出を示す。すなわち、図２６のケースでは、リード電圧ＶＣＧＲ３１およびＶＣＧＲ３２（＞ＶＣＧＲ３１）を使用したリードのみが実行済みである。
【０１５６】
図２７は、第３ループ（ｎ＝３）でのＬＬＲ値算出を示す。すなわち、図２７のケースでは、リード電圧ＶＣＧＲ３１、ＶＣＧＲ３２、およびＶＣＧＲ３３（＜ＶＣＧＲ３２）を使用したリードのみが実行済みである。
【０１５７】
以下の算出では、最小のリード電圧ＶＣＧＲを含んだ電圧区間のためのＬＬＲ値の算出のために、最小値を含んだ電圧区間の低い方の境界の電圧は０Ｖであると仮定される。同様に、最大のリード電圧ＶＣＧＲを含んだ電圧区間のためのＬＬＲ値の算出のために、最大値を含んだ電圧区間の高い方の境界の電圧は１０Ｖであると仮定される。
【０１５８】
図２５に示されるように、初回ループでは、リード電圧ＶＣＧＲ３１のみが使用されているため、(０Ｖ以上かつ)ＶＣＧＲ３１未満の区間、およびＶＣＧＲ３１以上（かつ１０Ｖ未満）の区間のためのＬＬＲ値が算出される。式（１）から、ＶＣＧＲ３１未満の閾値電圧Ｖｔｈを有するセルトランジスタＭＴには、
LLR(0, VCGR31) = ln ((G(VCGR31) - G(0)) / (F(VCGR31) - F(0)))
が割り当てられる。同様に、式（１）から、ＶＣＧＲ３１以上の閾値電圧Ｖｔｈを有するセルトランジスタＭＴには、
LLR(VCGR31, 10) = ln ((G(10) - G(VCGR31)) / (F(10) - F(VCGR31)))
が割り当てられる。
【０１５９】
図２６に示されるように、第２ループでは、リード電圧ＶＣＧＲ３１およびＶＣＧＲ３２が使用されているため、ＶＣＧＲ３１未満の区間、ＶＣＧＲ３１以上ＶＣＧＲ３２未満の区間、およびＶＣＧＲ３２以上の区間のためのＬＬＲ値が算出される。式（１）から、ＶＣＧＲ３１未満の閾値電圧Ｖｔｈを有するセルトランジスタＭＴには、
LLR(0, VCGR31) = ln ((G(VCGR31) - G(0)) / (F(VCGR31) - F(0)))
が割り当てられる。ＶＣＧＲ３１未満の区間は、初回ループでのものと同じなので、この区間のためのＬＬＲの算出は省略されるとともに初回ループで算出された値が使用されることができる。
【０１６０】
式（１）から、ＶＣＧＲ３１以上ＶＣＧＲ３２未満の閾値電圧Ｖｔｈを有するセルトランジスタＭＴには、
LLR(VCGR31, VCGR32) = ln ((G(VCGR32) - G(VCGR31)) / (F(VCGR32) - F(VCGR31)))
が割り当てられる。
【０１６１】
式（１）から、ＶＣＧＲ３２以上の閾値電圧Ｖｔｈを有するセルトランジスタＭＴには、
LLR(VCGR32, 10) = ln ((G(10) - G(VCGR32)) / (F(10) - F(VCGR32)))
が割り当てられる。
【０１６２】
図２７に示されるように、第３ループでは、リード電圧ＶＣＧＲ３１、ＶＣＧＲ３２、ＶＣＧＲ３３が使用されているため、ＶＣＧＲ３３未満の区間、ＶＣＧＲ３３以上ＶＣＧＲ３１未満の区間、ＶＣＧＲ３１以上ＶＣＧＲ３２未満の区間、およびＶＣＧＲ３２以上の区間のためのＬＬＲ値が算出される。式（１）から、ＶＣＧＲ３３未満の閾値電圧Ｖｔｈを有するセルトランジスタＭＴには、
LLR(0, VCGR33) = ln ((G(VCGR33) - G(0)) / (F(VCGR33) - F(0)))
が割り当てられる。
【０１６３】
式（１）から、ＶＣＧＲ３３以上ＶＣＧＲ３１未満の閾値電圧Ｖｔｈを有するセルトランジスタＭＴには、
LLR(VCGR33, VCGR31) = ln ((G(VCGR31) - G(VCGR33)) / (F(VCGR31) - F(VCGR33)))
が割り当てられる。
【０１６４】
式（１）から、ＶＣＧＲ３１以上ＶＣＧＲ３２未満の閾値電圧Ｖｔｈを有するセルトランジスタＭＴには、
LLR(VCGR31, VCGR32) = ln ((G(VCGR32) - G(VCGR31)) / (F(VCGR32) - F(VCGR31)))
が割り当てられる。
【０１６５】
式（１）から、ＶＣＧＲ３２以上の閾値電圧Ｖｔｈを有するセルトランジスタＭＴには、
LLR(VCGR32, 10) = ln ((G(10) - G(VCGR32)) / (F(10) - F(VCGR32)))
が割り当てられる。ＶＣＧＲ３２以上の区間は、第２ループでのものと同じなので、この区間のためのＬＬＲの算出は省略されるとともに第２ループで算出された値が使用されることができる。
【０１６６】
第３実施形態によれば、第１実施形態と同じく、ＬＬＲは算出される。このため、第１実施形態と同じ利点を得られる。
【０１６７】
また、ＳＢ復号に使用されるリード電圧ＶＣＧＲおよびリード回数ｎが事前に決定される必要が無く、任意のリード電圧ＶＣＧＲおよびリード回数ｎによるリードについてＳＢ復号が行われることができる。そのため、リード電圧ＶＣＧＲおよびリード回数ｎが決定されている場合よりも高い成功率でＳＢ復号が行われることができる。
【０１６８】
さらに、第３実施形態によれば、理論上、無制限の回数に亘ってリードを行って、ＳＢ復号が行われることができる。テーブル等を使用して、或るリード回数が対応する別の値に変換されるような処理が必要とされていないからである。このため、処理時間が許される限りで、より多くのリードが行われることにより、ＳＢ復号の成功率が高められることが可能である。
【０１６９】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【０１７０】
１…半導体メモリ、２…メモリコントローラ、３…ホスト装置、５…メモリシステム、１１…メモリセルアレイ、１２…入出力回路、１３…シーケンサ、１５…ドライバ、１６…センスアンプ、１９…ロウデコーダ、２１…ホストインターフェイス、２２…ＣＰＵ、２３…ＲＡＭ、２４…ＲＯＭ、２５…メモリインターフェイス、２６…ＥＣＣ回路、ＶＣＧＲ１、ＶＣＧＲ２、ＶＣＧＲ３、ＶＣＧＲ４…リード電圧。
【図１】
2019168813.tif 000004
【図２】
2019168813.tif 000005
【図３】
2019168813.tif 000006
【図４】
2019168813.tif 000007
【図５】
2019168813.tif 000008
【図６】
2019168813.tif 000009
【図７】
2019168813.tif 000010
【図８】
2019168813.tif 000011
【図９】
2019168813.tif 000012
【図１０】
2019168813.tif 000013
【図１１】
2019168813.tif 000014
【図１２】
2019168813.tif 000015
【図１３】
2019168813.tif 000016
【図１４】
2019168813.tif 000017
【図１５】
2019168813.tif 000018
【図１６】
2019168813.tif 000019
【図１７】
2019168813.tif 000020
【図１８】
2019168813.tif 000021
【図１９】
2019168813.tif 000022
【図２０】
2019168813.tif 000023
【図２１】
2019168813.tif 000024
【図２２】
2019168813.tif 000025
【図２３】
2019168813.tif 000026
【図２４】
2019168813.tif 000027
【図２５】
2019168813.tif 000028
【図２６】
2019168813.tif 000029
【図２７】
2019168813.tif 000030