(57)【要約】【課題】復号性能を向上させる。【解決手段】実施形態のメモリシステムは、複数の不揮発性メモリと、メモリコントローラと、を備える。不揮発性メモリは、複数の第１記憶領域を含む。第１記憶領域は、複数の第２記憶領域を含む。複数の第１データは、記憶対象のデータである複数の第２データを含む。第３データは、複数の第１データのそれぞれから１つずつ選択される複数の第２データを含む。第３データに含まれる第２データは、他の第３データに含まれる第２データとは重複しない。メモリコントローラは、第１データを用いて生成される第１誤り訂正符号に基づいて第１データを復号する第１復号を実行し、第１復号に失敗した第２記憶領域内の各ビットの信頼度を算出し、信頼度が他のビットより小さいビットを含む第３データを、第３データを用いて生成される第２誤り訂正符号に基づいて復号する第２復号を実行する。【選択図】図１
2020042512.tif 000002
【特許請求の範囲】
【請求項１】
複数の不揮発性メモリと、
メモリコントローラと、を備え、
前記不揮発性メモリは、複数の第１記憶領域を含み、
前記第１記憶領域は、複数の第２記憶領域を含み、
前記第２記憶領域は、データの記憶および読み出しの単位であり、
複数の第１データそれぞれは、記憶対象のデータである複数の第２データを含み、
第３データは、複数の前記第１データのそれぞれから１つずつ選択される複数の前記第２データを含み、
前記第３データに含まれる前記第２データは、他の前記第３データに含まれる前記第２データとは重複せず、
前記メモリコントローラは、
前記第１データを用いて生成される第１誤り訂正符号に基づいて前記第１データを復号する第１復号を実行し、
前記第１復号に失敗した前記第２記憶領域内の各ビットの信頼度を算出し、
前記信頼度が他のビットより小さいビットを含む前記第３データを、前記第３データを用いて生成される第２誤り訂正符号に基づいて復号する第２復号を実行する、
メモリシステム。
【請求項２】
前記メモリコントローラは、
前記不揮発性メモリから軟判定により読み出された読み出し値を用いて前記信頼度を算出する、
請求項１に記載のメモリシステム。
【請求項３】
前記メモリコントローラは、
前記第１復号に失敗した前記第２記憶領域である失敗領域の数に応じて異なる読み出しレベルを用いて前記不揮発性メモリから軟判定により読み出された読み出し値を用いて前記信頼度を算出する、
請求項２に記載のメモリシステム。
【請求項４】
前記メモリコントローラは、
前記不揮発性メモリから硬判定または軟判定により読み出された読み出し値を用いて軟判定復号を行い、軟判定復号により得られる事後値を用いて前記信頼度を算出する、
請求項１に記載のメモリシステム。
【請求項５】
前記メモリコントローラは、
前記第１復号に失敗した前記第２記憶領域である失敗領域の数に応じて異なる閾値と前記事後値とを比較し、比較結果に基づいて前記信頼度を算出する、
請求項４に記載のメモリシステム。
【請求項６】
前記第１誤り訂正符号は、ＳＰＣ（Single  Parity  Check）符号であり、
前記メモリコントローラは、
前記第１復号に失敗した前記第２記憶領域である失敗領域の数が１の場合、前記失敗領域のすべてのビットについて、前記失敗領域以外のすべてのページのビットとの排他的論理和を取った復元ビットで置き換え、
前記失敗領域の数が２以上の場合、前記失敗領域に含まれるビットのうち、前記信頼度が他のビットより小さいビットについて、前記失敗領域以外のすべてのページのビットの排他的論理和を取った復元ビットで置き換える、
請求項１に記載のメモリシステム。
【請求項７】
前記メモリコントローラは、
前記第１誤り訂正符号による復号と前記第２誤り訂正符号による復号とを繰り返し実行する、
請求項６に記載のメモリシステム。
【請求項８】
前記第１誤り訂正符号は、ＲＳ（Reed  Solomon）符号であり、
前記メモリコントローラは、
前記第１復号に失敗した前記第２記憶領域である失敗領域の数がＲＳ符号のパリティシンボル数以下の場合、ＲＳ符号の限界距離復号または消失訂正により復号を実行し、
前記失敗領域の数がＲＳ符号のパリティシンボル数より大きい場合、前記信頼度に基づいて選択されるシンボルを誤りが検出されたシンボルとしてＲＳ符号の限界距離復号または消失訂正により復号を実行する、
請求項１に記載のメモリシステム。
【請求項９】
前記メモリコントローラは、
前記第１誤り訂正符号による復号と前記第２誤り訂正符号による復号とを繰り返し実行する、
請求項８に記載のメモリシステム。
【請求項１０】
前記メモリコントローラは、
前記失敗領域の数がＲＳ符号のパリティシンボル数より大きい場合、前記失敗領域に含まれるシンボルから相互に異なる複数のパタンでｑ個（ｑは１以上、パリティシンボル数以下の自然数）のシンボルを選択し、選択したシンボルを誤りが検出されたシンボルとしてＲＳ符号の限界距離復号または消失訂正により復号を実行し、復号により変更したビットの前記信頼度の和が他のパタンより小さいパタンに対応する復号結果を出力する、
請求項８に記載のメモリシステム。
【請求項１１】
前記メモリコントローラは、
前記失敗領域の数がＲＳ符号のパリティシンボル数より大きく、かつ、前記失敗領域のうち、前記信頼度が予め定められた閾値より小さいビットを含むシンボル数がｑ個（ｑは１以上、パリティシンボル数以下の自然数）である場合、前記信頼度が前記閾値より小さいビットを含むｑ個のシンボルを誤りが検出されたシンボルとしてＲＳ符号の限界距離復号または消失訂正により復号を実行する、
請求項８に記載のメモリシステム。
【請求項１２】
前記メモリコントローラは、
前記失敗領域の数がＲＳ符号のパリティシンボル数より大きい場合、前記失敗領域のうち、前記信頼度が予め定められた閾値より小さいビットの個数が他のシンボルより多いｑ個（ｑは１以上、パリティシンボル数以下の自然数）のシンボルを選択し、選択したシンボルを誤りが検出されたシンボルとしてＲＳ符号の限界距離復号または消失訂正により復号を実行する、
請求項８に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
以下の実施形態は、メモリシステムに関する。
【背景技術】
【０００２】
ＳＳＤ（Solid  State  Drive）のチップには製造条件のばらつきに起因する不良メモリブロックが存在する。各チップの複数メモリセルから構成されるページ単位に書き込むデータを誤り訂正符号（ＥＣＣ：Error  Correcting  Codes）で保護し、さらに異なるチップから抽出された複数ページを用いてＲＡＩＤ（Redundant  Arrays  of  Inexpensive  Disks）を組むことで、ＳＳＤへの書き込みデータの信頼性を高めることができる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特許第５０１７４０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明の一つの実施形態は、誤り訂正（復号）能力を向上させることができるメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【０００５】
実施形態のメモリシステムは、複数の不揮発性メモリと、メモリコントローラと、を備える。不揮発性メモリは、複数の第１記憶領域を含む。第１記憶領域は、複数の第２記憶領域を含む。複数の第１データは、記憶対象のデータである複数の第２データを含む。第３データは、複数の第１データのそれぞれから１つずつ選択される複数の第２データを含む。第３データに含まれる第２データは、他の第３データに含まれる第２データとは重複しない。メモリコントローラは、第１データを用いて生成される第１誤り訂正符号に基づいて第１データを復号する第１復号を実行し、第１復号に失敗した第２記憶領域内の各ビットの信頼度を算出し、信頼度が他のビットより小さいビットを含む第３データを、第３データを用いて生成される第２誤り訂正符号に基づいて復号する第２復号を実行する。
【図面の簡単な説明】
【０００６】
【図１】図１は、本実施形態に適用可能なメモリシステムの一例の構成を示す図である。
【図２】図２は、ＲＡＩＤの構成例を示す図である。
【図３】図３は、復号に関連する機能を示すブロック図である。
【図４】図４は、ＳＬＣ方式を用いた際の軟判定読み出しの一例を示す図である。
【図５】図５は、復号失敗ページの事後値の分布の一例を示す図である。
【図６】図６は、ページ間符号をＳＰＣ符号とした場合の復号処理の一例を示すフローチャートである。
【図７】図７は、ページ間符号をＲＳ符号とした場合の復号処理の一例を示すフローチャートである。
【図８】図８は、ページ間符号をＳＰＣ符号とした場合の復号処理の一例を示すフローチャートである。
【図９】図９は、ページ間符号をＲＳ符号とした場合の復号処理の一例を示すフローチャートである。
【図１０】図１０は、本実施形態による反復復号の具体例を示す図である。
【発明を実施するための形態】
【０００７】
以下に添付図面を参照して、実施形態に係るメモリシステムを詳細に説明する。なお、以下の実施形態により本発明が限定されるものではない。
【０００８】
最初に、本実施形態を適用する不揮発性メモリの例について説明する。本実施形態を適用可能な不揮発性メモリは、例えば、ＮＡＮＤ型フラッシュメモリ（以下、単にＮＡＮＤメモリという）である。以下の説明では、不揮発性メモリとしてＮＡＮＤメモリが用いられた場合を例示するが、不揮発性メモリとして３次元構造フラッシュメモリ、ＲｅＲＡＭ（Resistive  Random  Access  Memory）、ＦｅＲＡＭ（Ferroelectric  Random  Access  Memory）等のＮＡＮＤメモリ以外の記憶装置を用いることも可能である。また、不揮発性メモリが半導体メモリであることは必須ではなく、半導体メモリ以外の種々の記憶媒体に対して本実施形態を適用することも可能である。
【０００９】
ＮＡＮＤメモリでは、一般に、ページと呼ばれる単位（第２記憶領域）で、書き込みおよび読み出しが行われ、複数のページを含むブロックと呼ばれる単位（第１記憶領域）で消去が行われる。ＮＡＮＤメモリは、複数のブロックを含む。
【００１０】
ＮＡＮＤメモリなどを用いたＳＳＤでは、上記のように、ＥＣＣおよびＲＡＩＤにより書き込みデータの信頼性を高めることができる。しかし、不良メモリブロック数が多い場合、および、ランダムビット誤り率が大きい場合、ＥＣＣの復号でページの復元に失敗し、さらにＲＡＩＤの復号でもデータを復元できないケースが発生しうる。
【００１１】
例えばＳＰＣ（Single  Parity  Check）符号を用いてＲＡＩＤを組む場合、１つのページで復号に失敗した場合には、その他の復号に成功したページの排他的論理和を取ることで復号に失敗したページ（復号失敗ページ）を復元することができる。一方、２つ以上のページで復号に失敗した場合には復号失敗ページを復元することができない。
【００１２】
また、例えばパリティシンボル数２のＲＳ（Reed-Solomon）符号を用いてＲＡＩＤを組む場合、２つ以下のページで復号に失敗した場合には限界距離復号または消失訂正により復号失敗ページを復元することができる。一方、３つ以上のページで復号に失敗した場合にはＲＳ符号の各フレームに含まれる１シンボル誤りしか訂正することができない。
【００１３】
本実施形態では、軟判定により読み出された読み出し値（軟判定読み出し値）または軟判定復号で得られる事後値を用いて復号失敗ページ内の誤りである確率が高いビット位置を推定し、推定した情報を用いてＲＡＩＤの復号を実行する。これにより、従来よりも復号性能を向上させることができる。なお復号失敗と判定する条件の詳細は後述する。
【００１４】
例えばＳＰＣ符号を用いてＲＡＩＤを組む場合、２つ以上のページで復号に失敗したケースでも、本実施形態を適用すれば訂正が可能となる場合があり、復号性能を向上させることができる。また、パリティシンボル数２のＲＳ符号を用いてＲＡＩＤを組む場合、本実施形態を適用すればＲＳ符号の各フレームに含まれる２シンボル誤りを訂正することができる。これにより、ＥＣＣの復号とＲＡＩＤにおける反復復号の性能を向上させることができる。
【００１５】
図１は、本発明の一実施形態に適用可能なメモリシステム１の一例の構成を示す。図１の例では、メモリシステム１は、インターフェイス（Ｉ／Ｆ）１０、バッファメモリ１１、コントローラ１２およびフラッシュメモリ部１３を有する。
【００１６】
インターフェイス１０は、例えばパーソナルコンピュータ（ＰＣ）といった、このメモリシステム１のホストとなる情報処理装置と、このメモリシステム１とのインターフェイスである。インターフェイス１０としては、例えばＳＡＴＡ（Serial  Advanced  Technology  Attachment）規格を適用することができる。バッファメモリ１１は、ライトバッファ１１Ａと、リードバッファ１１Ｂとを有する。ライトバッファ１１Ａは、フラッシュメモリ部１３に記憶するための記憶データ用のバッファ領域である。リードバッファ１１Ｂは、フラッシュメモリ部１３から読み出された読み出しデータ用のバッファ領域である。コントローラ１２は、例えばＣＰＵ（Central  Processing  Unit）を含み、インターフェイス１０およびバッファメモリ１１を制御して、フラッシュメモリ部１３に対するデータの記憶や、フラッシュメモリ部１３からのデータの読み出しの速度を調整する。
【００１７】
フラッシュメモリ部１３は、ＮＡＮＤフラッシュコントローラ２０と複数のメモリチップ２３を有すると共に、各メモリチップ２３にそれぞれ対応する複数のページ内エンコーダ／デコーダ（Ｅ／Ｄ）部２２を有する。フラッシュメモリ部１３は、さらに、ページ間エンコーダ／デコーダ（Ｅ／Ｄ）部２１を有する。メモリチップ２３は、チップ内に備えた多数のメモリセルに対して情報を電荷に置き換えて記憶する。
【００１８】
ＮＡＮＤフラッシュコントローラ２０は、各メモリチップ２３に対するデータの記憶および読み出しを制御する。それと共に、ＮＡＮＤフラッシュコントローラ２０は、各ページ内Ｅ／Ｄ部２２、および、ページ間Ｅ／Ｄ部２１の動作を制御する。
【００１９】
例えば、ＮＡＮＤフラッシュコントローラ２０は、メモリを有し、データの記憶時には、ライトバッファ１１Ａに所定量のデータが溜め込まれると、ライトバッファ１１Ａから、メモリチップ２３の記憶単位分のデータを読み出してメモリに記憶する。このメモリから読み出されたデータがページ内Ｅ／Ｄ部２２に供給されて誤り訂正符号化され、ＮＡＮＤフラッシュコントローラ２０の制御によりメモリチップ２３に記憶される。
【００２０】
ページ間Ｅ／Ｄ部２１は、記憶処理時には、入力されたデータに対して誤り訂正符号（ページ間符号）を用いた誤り訂正符号化を行う。また、読み出し処理時には、入力されたデータの誤り訂正符号をデコード（復号）し、当該データに対して誤り訂正処理を行う。例えば、ページ間Ｅ／Ｄ部２１は、エンコード（符号化）およびデコードの対象となるデータを格納するためのメモリを有し、このメモリに格納されたデータを用いて誤り訂正符号化処理および誤り訂正処理などを行う。
【００２１】
ページ内Ｅ／Ｄ部２２は、記憶処理時には、入力されたデータに対してＣＲＣ（Cyclic  Redundancy  Check）符号を生成すると共に、当該データおよび生成されたＣＲＣ符号に対して誤り訂正符号（ページ内符号）を用いた誤り訂正符号化を行う。また、読み出し処理時には、入力されたデータの誤り訂正符号をデコードして誤り訂正を行うと共に、ＣＲＣ符号をデコードして誤り位置を求める。例えば、ページ内Ｅ／Ｄ部２２は、それぞれエンコードおよびデコード対象となるデータを格納するためのメモリを有し、このメモリに格納されたデータを用いて誤り訂正符号化処理および誤り訂正処理などを行う。誤り検出に使用する符号はＣＲＣ符号に限られるものではなく、ＣＲＣ符号の代わりに他の符号を用いてもよい。
【００２２】
メモリシステム１は、インターフェイス１０、バッファメモリ１１、メモリコントローラおよびメモリチップ２３を有し、メモリコントローラが、コントローラ１２、ＮＡＮＤフラッシュコントローラ２０、ページ間Ｅ／Ｄ部２１、および、ページ内Ｅ／Ｄ部２２を含むように構成されてもよい。また、バッファメモリ１１がメモリコントローラに内蔵されるように構成されてもよい。
【００２３】
図２は、ＲＡＩＤの構成例を示す図である。ページ２０１は、ユーザデータ２１１と、このユーザデータから生成されるＥＣＣ２１２と、を含む。符号化されるデータは、ユーザデータ以外にも、コントローラ１２内部で用いる制御データ等を含んでもよい。
【００２４】
各ページ内に記憶されるユーザデータ２１１（第１データ）は、当該ユーザデータを用いて生成されるＥＣＣ２１２（第１誤り訂正符号）により保護される。ページ内に記憶されるユーザデータ２１１は、記憶対象のデータである複数のデータ（第２データ）を含む。例えば、図２の破線で囲まれた２つの領域が重なる部分が、複数のデータ（第２データ）のうち１つに相当する。
【００２５】
以下では、各ページ内に記憶されるユーザデータを保護するＥＣＣをページ内符号と呼ぶ。ページ内符号は、例えば、ＢＣＨ（Bose-Chaudhuri-Hocquenghem）符号およびＲＳ符号のような代数的符号、ＬＤＰＣ（Low  Density  Parity  Check）符号のような疎グラフに基づく符号、並びに、それらの積符号および連接符号である。
【００２６】
複数ページ内に記憶される各ユーザデータは、ページ内符号とは異なるＥＣＣ２２１（第２誤り訂正符号）により保護される。以下では、このＥＣＣ２２１をページ間符号と呼ぶ。ページ間符号は、ＳＰＣ符号、並びに、ＢＣＨ符号およびＲＳ符号のような代数的符号である。
【００２７】
ページ間符号は、複数ページそれぞれから選択された、複数のデータ（第２データ）のうち１つを含むデータ（第３データ）を用いて生成される。図２のデータ２０２は、ページ間符号で保護されるデータ単位を示す。図２では省略しているが、図２の右方向に、データ２０２と同様にページ間符号で保護されるデータ単位が並ぶ。例えばＲＳ符号の場合は、各フレームがページ間符号で保護されるデータ単位に相当する。
【００２８】
各データ単位は、相互に異なるデータ（第３データ）を用いてページ間符号が生成される。言い換えると、あるデータ単位に対応するデータ（第３データ）に含まれる、複数のページから選択されたデータ（第２データ）は、他のデータ単位に対応するデータ（第３データ）に含まれる、複数のページから選択されたデータ（第２データ）とは重複しない。
【００２９】
なお、図２では、ユーザデータ２１１と当該ユーザデータ２１１に対するＥＣＣ２１２とを１ページに記憶する例、言い換えると、図２の１行分のデータを１ページに記憶する例を示している。１行分の単位はこれに限られるものではない。例えば、複数ページ分のユーザデータに対して１つのＥＣＣを生成し、複数ページ分の記憶領域にユーザデータと生成したＥＣＣとを記憶してもよい。また、１ページ未満に相当するユーザデータに対して１つのＥＣＣを生成し、１ページ未満に相当する記憶領域にユーザデータと生成したＥＣＣとを記憶してもよい。
【００３０】
以下では、あるページに対しページ内符号を復号することをページ内復号、複数ページに対しページ間符号を復号することをページ間復号と呼ぶ。
【００３１】
図１では、ページ間Ｅ／Ｄ部２１が、ページ間符号の符号化、および、ページ間符号の復号（ページ間復号）を実行する。また、ページ内Ｅ／Ｄ部２２が、ページ内符号の符号化、および、ページ内符号の復号（ページ内復号）を実行する。メモリチップ２３それぞれは、例えば図１の１行分のデータを記憶するメモリチップである。
【００３２】
ここで、ページ内符号の復号失敗条件を定義する。まず、ユーザデータがＣＲＣで保護されているとき、ＣＲＣチェックをパスしない場合に復号失敗とする。また、ユーザデータがＢＣＨ符号またはＲＳ符号に保護されているとき、訂正処理を実施後にシンドロームチェックをパスしない、すなわちシンドロームがゼロにならない場合に復号失敗とする。さらに、復号法として限界距離復号を用いる場合、例えば発見した根の数と誤り位置多項式の次数が異なるときに復号失敗とする。
【００３３】
上述した内容に加え、さらに復号失敗条件を定義する。まず、ページ内符号を積符号とするとき、訂正処理を実施後にシンドロームチェックをパスしない成分符号が存在する場合に復号失敗とする。ここで成分符号とは、積符号を構成する行、列方向の個々の符号のことである。また、ページ内符号をＬＤＰＣ符号とするとき、訂正処理を実施後にシンドロームチェックをパスしない場合に復号失敗とする。
【００３４】
図３は、メモリシステム１のうち、復号に関連する機能を示すブロック図である。各メモリチップ２３には、図２に示すＲＡＩＤの各ページに対応するデータが書き込まれる。
【００３５】
ページ内符号復号器群３０１は、各ページのページ内復号を実行する復号器の集合である。例えば図１の複数のページ内Ｅ／Ｄ部２２が、ページ内符号復号器群３０１に相当する。ページ内符号復号器群３０１に含まれる各復号器は、対応するメモリチップ２３からの読み出し値または後述するページ間符号復号器群３０３の出力を入力とし、ページ内復号を行う。ページ内符号復号器群３０１の各復号器の機能を１つの復号器が備えるように構成してもよい。
【００３６】
各復号器は、ページ内復号に成功した場合は、復号の結果得られるビット系列を出力し、例えば各復号器が有するメモリに書き込む。各復号器は、ページ内復号に失敗した場合は、各復号器への入力または復号の結果得られるビット系列を出力する。
【００３７】
信頼度判定器群３０２は、対応するページの復号が失敗した場合に、当該ページ内の各ビットの信頼度を判定（算出）する判定器の集合である。例えば図１の複数のページ内Ｅ／Ｄ部２２が、判定器の機能を備えてもよい。各メモリチップ２３に対応する複数の判定器が、複数のページ内Ｅ／Ｄ部２２とは別に備えられてもよい。信頼度判定器群３０２の各判定器の機能を１つの判定器が備えるように構成してもよい。各判定器は、復号失敗ページ（失敗領域）に対し、各ビットの信頼度を判定する。判定器の入力および動作については後述する。
【００３８】
ページ間符号復号器群３０３は、ページ間復号により復号失敗ページを復元する復号器の集合である。例えば図１のページ間Ｅ／Ｄ部２１が、ページ間符号復号器群３０３に相当する。図１では１つのページ間Ｅ／Ｄ部２１が備えられているが、例えばデータ単位ごとにページ間復号を実行する複数のページ間Ｅ／Ｄ部を備えるように構成してもよい。この場合、これらの複数のページ間Ｅ／Ｄ部が、ページ間符号復号器群３０３に相当する。
【００３９】
ページ間符号復号器群３０３に含まれる各復号器は、ページ内符号復号器群３０１の出力および信頼度判定器群３０２の出力を入力として、ページ間復号により復号失敗ページを復元する。ページ間符号復号器群３０３の各復号器の機能を１つの復号器が備えるように構成してもよい。ページ間符号復号器群３０３の具体的な動作については後述する。
【００４０】
次に、信頼度判定器群３０２の動作について説明する。信頼度判定器群３０２では、以下に説明する２通りの方法のいずれかにより復号失敗ページの各ビットの信頼度を判定する。ここで、信頼度が低い（小さい）ビットは、そのビットが誤りである確率が高いことを表す。
【００４１】
（判定方法１）軟判定読み出し値を用いる方法
判定器は、復号失敗ページに対し、ビットごとに軟判定読み出し値を指標として信頼度を判定する。図４は、１つのメモリセルに１ビットを記憶するＳＬＣ（Single  Level  Cell）方式を用いた際の軟判定読み出しの一例を示す図である。
【００４２】
曲線４０１は、書き込みデータ“１”に対応する閾値電圧の分布、曲線４０２は、書き込みデータ“０”に対応する閾値電圧の分布を表す。破線４１１は、硬判定読み出しレベルを表す。破線４１２ａ、４１２ｂは、硬判定読み出しレベルを基準としてそれぞれ±Δずれた位置の読み出しレベルである軟判定読み出しレベルを表す。
【００４３】
判定器は、各軟判定読み出しレベルについて軟判定読み出しを実行する。判定器は、軟判定読み出し値が“０”の場合にはそのビットの信頼度を０と判定し、軟判定読み出し値が“１”の場合にはそのビットの信頼度を“１”と判定する。
【００４４】
以下、信頼度が“０”のビットを低信頼ビット、信頼度が“１”のビットを高信頼ビットと呼ぶことがある。ここで、Δは予め設定しておいた閾値であり、復号失敗ページ数に応じて異なる値を用いてもよい。すなわち、復号失敗ページ数に応じて異なる読み出しレベルを用いて軟判定読み出しが実行されてもよい。Δの決め方については後述する。
【００４５】
また、信頼度は１ビットで表現する例に限られない。例えば閾値Δを複数設定し、信頼度を２以上のビット幅で表してもよい。この場合には、予め定められた閾値以下のビットを低信頼ビットとし、それ以外のビットを高信頼ビットとする。
【００４６】
以上ではＳＬＣにおける読み出しについて述べたが、１つのメモリセルに２ビット以上を記憶するＭＬＣ（Multi  Level  Cell）、ＴＬＣ（Triple  Level  Cell）、および、ＱＬＣ（Quad  Level  Cell）などにおいても同様に、硬判定読み出し値および軟判定読み出し値を定義することができる。
【００４７】
（判定方法２）事後値を用いる方法
復号失敗ページに対し、ビットごとに事後値を指標として信頼度を判定する。事後値は、例えば、ビットが“０”である事後確率、および、“１”である事後確率の比の自然対数である対数尤度比（Log-Likelihood-Ratio：ＬＬＲ）である。この場合、ページ内符号復号器群３０１において軟判定復号が実行され、復号失敗ページの各ビットの事後値が得られていることを仮定する。なお、軟判定復号を実行する復号器（軟判定復号器）に対する入力は、書き込みデータの硬判定読み出し値、および、軟判定読み出し値のいずれであってもよい。
【００４８】
図５は、復号失敗ページの事後値の分布の一例を示す図である。曲線５０１は、書き込みデータ“１”に対応する事後値の分布、曲線５０２は、書き込みデータ“０”に対応する事後値の分布を表す。破線５１１ａ、５１１ｂは、事後値０を基準に±θずれた位置の判定ラインを表す。判定器は、事後値の絶対値がθ以下であればそのビットの信頼度を“０”と判定し、それ以外の場合はそのビットの信頼度を“１”と判定する。ここで、θは予め設定しておいた閾値であり、復号失敗ページ数に応じて異なる値を用いてもよい。θの決め方については後述する。
【００４９】
事後値は、ＬＬＲに限られるものではなく、例えば、ビット“０”または“１”の事後確率を用いてもよい。この場合、例えば、事後確率が０．５（事後確率の中央値）を中心とする±θの範囲内の場合、ビットの信頼度を“０”と判定し、それ以外の場合はそのビットの信頼度を“１”と判定する。
【００５０】
また、信頼度は１ビットで表現する例に限られない。例えば閾値θを複数設定し、信頼度を２以上のビット幅で表してもよい。この場合には、予め設定した閾値以下のビットを低信頼ビットとし、それ以外のビットを高信頼ビットとする。
【００５１】
次に、ページ間符号復号器群３０３の動作について説明する。ページ間符号復号器群３０３は、ページ内符号復号器群３０１の出力および信頼度判定器群３０２の出力を入力として、ページ間復号により復号失敗ページを復元する。本実施形態では、ＲＡＩＤを組むページの復号失敗ページ数、および、ユースケースに応じて、信頼度を用いない復号、および、信頼度を用いた復号の２種類の復号モードを選択的に実行することができる。
【００５２】
以下、ページ間符号としてＳＰＣ符号、または、パリティシンボル数ｐ¬＝２ｔ（ｔは１以上の自然数）のＲＳ符号を用いた場合の動作について説明する。なお、ページ内符号の符号長をｎ、ＲＡＩＤを組むページ数をＮ、復号失敗ページ数をｅとし、ｉ∈Ｎ番目のページのｊ∈ｎ番目のビットをｂｊｉとする。なお１つのシンボルは、複数のビット（例えば８ビット）から構成される。
【００５３】
（例１）ＳＰＣ符号
（１−１）ｅ＝１の場合（ＸＯＲ復号）
復号器は、復号失敗ページのすべてのビットを、復号失敗ページ以外のすべてのページのビットの排他的論理和を取った復元ビットで置き換える。具体的には、復号器は、復号失敗ページのページ番号をｉ∈Ｎとしたとき、ｊ∈ｎ番目のビットを以下の（１）式により復元する。
【数１】
2020042512.tif 000003
（１−２）ｅ＞１の場合（拡張ＸＯＲ復号）
復号器は、復号失敗ページの低信頼ビットを、復号失敗ページ以外のすべてのページのビットの排他的論理和を取った復元ビットで置き換える。具体的には、復号器は、復号失敗ページのページ番号をｉ∈Ｎとしたとき、ｊ∈ｎ番目のビットを上記（１）式により復元する。
【００５４】
（例２）ＲＳ符号の場合
（２−１）１≦ｅ≦ｐの場合（ＲＳ復号）
復号器は、限界距離復号または消失訂正により復号失敗ページを復元する。
（２−２）ｅ＞ｐの場合（限界距離復号）
復号器は、限界距離復号により復号失敗ページを復元する。ページ間符号の各フレームについて、誤りシンボル数がｐ／２以下のフレームについては復号に成功する。ただし、復号によりフリップされた（訂正された）ビット数が予め定めた閾値を超える場合には、訂正を棄却してもよい。
（２−３）ｅ＞ｐの場合（拡張ＲＳ復号）
この場合は、信頼度に基づいて選択されるシンボルを誤りが検出されたシンボルとしてＲＳ符号の限界距離復号または消失訂正により復号を実行する。例えば、以下の３つの方法のいずれかを適用できる。
【００５５】
（方法１）
ページ間符号の各フレームに対し、ｅ個の復号失敗ページに含まれるシンボルからｑ（１以上ｐ以下の自然数）個のシンボルを誤り位置とみなしてＲＳ復号を行う。ここで、ＲＳ復号を行うテストパタンはｅＣｑ個存在する。なお、ｑは１種類だけでなく、複数用いてもよい。各テストパタンに対するＲＳ復号時にフリップしたビットの信頼度の和を指標とし、信頼度の和が最小になるテストパタンに対する誤り位置の組みを訂正結果として採用する。ただし、信頼度の和が予め定めた閾値を超える場合、および、低信頼ビットがフリップされていない場合には、訂正を棄却してもよい。
【００５６】
（方法２）
ページ間符号の各フレームに対し、ｅ個の復号失敗ページのうち、低信頼ビットを含むシンボル数がｑ（１以上ｐ以下の自然数）個である場合に、このｑ個のシンボルを誤り位置とみなしてＲＳ復号を行う。ＲＳ復号でフリップされたビット数が予め定めた閾値を超える場合、およびフリップしたビットの信頼度の和が予め定めた閾値を超える場合には、訂正を棄却してもよい。低信頼ビットを含むシンボル数がｑ個より少ないとき、ＲＳ復号を行うか否かは選択的に実行できるようにしてもよい。ＲＳ復号を行うかは例えば事前に決めておけばよい。低信頼ビットを含むシンボル数がｑ個より多いときは、ＲＳ復号を実行しない。
【００５７】
（方法３）
ページ間符号の各フレームに対し、ｅ個の復号失敗ページのうち、低信頼ビット数が多い上位ｑ（１以上ｐ以下の自然数）個のシンボルを誤り位置とみなしてＲＳ復号を行う。ただし、ＲＳ復号でフリップされたビット数が予め定めた閾値を超える場合、およびフリップしたビットの信頼度の和が予め定めた閾値を超える場合には、訂正を棄却してもよい。低信頼ビット数が同じである複数のシンボルが存在する場合は、例えば事前に決められた規則に従い複数のシンボルのうちいずれかを選択する。例えば、ページ番号が小さい復号失敗ページに含まれるシンボルを優先して選択するという規則を用いることができる。
【００５８】
ページ間符号はＳＰＣ符号またはＲＳ符号に限られるものではなく、例えばＢＣＨ符号などの他の符号であってもよい。他の符号の場合も、信頼度によって誤りである確率が高いビット位置を推定し、推定した位置が誤り位置であるとみなした復号（拡張復号）を実行すればよい。
【００５９】
ｅ＞ｐの場合に、限界距離復号および拡張ＲＳ復号のいずれを用いるかは、例えば、予め定められた条件に従い決定される。例えば、反復復号の回数が予め設定した閾値に達した場合に拡張ＲＳ復号を実行し、達していない場合に限界距離復号を実行してもよい。
【００６０】
次に、信頼度判定の際に用いる閾値Δの決定方法について説明する。上述のとおり、信頼度判定器群３０２は、軟判定読み出し値または事後値を予め設定しておいた閾値と比較することで、信頼度を判定する。ここでは、ページ間符号にＳＰＣ符号を用いる場合の、ＲＡＩＤシステム全体の信頼性を高めるための閾値の決め方について説明する。なお、以下の記述では軟判定読み出し値を用いた信頼度判定を想定し閾値はΔと表記するが、事後値を用いた信頼度判定に対してはΔをθで置き換えることで全く同様の議論を行うことができる。
【００６１】
復号失敗ページのビットエラーレート（ＢＥＲ：Bit  Error  Rate）をＢＥＲｆとする。また、復号失敗ページの各ビットについて、閾値Δで軟判定読み出しを行ったときに低信頼ビットと判定される確率をαｆ（Δ）とする。さらに、低信頼ビットと判定されたビットのＢＥＲをＢＥＲＵ，ｆ（Δ）とする。また、高信頼ビットと判定されたビットのＢＥＲをＢＥＲＲ，ｆ（Δ）とする。このとき、ＢＥＲｆは、以下の（２）式のように表される。
【数２】
2020042512.tif 000004
【００６２】
次に、「復号失敗ページ以外のすべてのページのＸＯＲを取った値」のＢＥＲを考える。このとき、該当ページ以外に（ｅ−１）ページが復号に失敗していると仮定すると、復元ビットのＢＥＲは１／２｛１−（１−２ＢＥＲｆ）ｅ｝≒ｅ×ＢＥＲｆとなる。ここで、ＢＥＲｆ＜＜１を仮定している。よって、低信頼ビットを復元ビットで置き換えたときのＢＥＲは以下の（３）式で表すことができる。
【数３】
2020042512.tif 000005
【００６３】
従って、閾値Δを以下の（４）式により決定することで、復元ページのＢＥＲが最小化され、ＲＡＩＤシステム全体の信頼性を最大化することができる。ここで、ａｒｇΔｍｉｎ｛ｆ（Δ）｝はｆ（Δ）を最小化するΔを表す。
【数４】
2020042512.tif 000006
【００６４】
（３）式の右辺は、不揮発性メモリで発生するエラーのモデルを仮定すること、または、実験的にデータを取ることで具体的に求めることができる。従って、オフラインの評価により最適な閾値を予め決めておくことができる。
【００６５】
次に、ＲＡＩＤを組むページ全体の復号失敗数が不明である場合の閾値Δの決め方について説明する。上述したとおり、復号失敗ページの低信頼ビットを復元ビットで置き換えたときのＢＥＲは（３）式で表すことができる。このとき、ページ内符号復号器群３０１で用いる復号方法を定めると、復元ページの復号失敗確率も定まる。このときのＦＥＲ（Frame  Error  Rate）をＦＥＲｃ（Δ，ｅ）と表す。また、該当ページ以外に（ｅ−１）ページが復号に失敗する確率をＰ（ｅ）とする。このとき、閾値Δは以下の（５）式により決定される。このような閾値Δを用いることで、復元ページのＢＥＲが最小化され、ＲＡＩＤシステム全体の信頼性を最大化することができる。
【数５】
2020042512.tif 000007
【００６６】
次に、本実施形態にかかるメモリシステム１による復号処理について説明する。図６は、ページ間符号をＳＰＣ符号とした場合の復号処理の一例を示すフローチャートである。
【００６７】
まずページ内符号復号器群３０１は、ページ内復号を実行する（ステップＳ１０１）。ページ内符号復号器群３０１は、全ページでページ内復号が成功したか否かを判定する（ステップＳ１０２）。成功した場合（ステップＳ１０２：Ｙｅｓ）、復号処理を終了する。
【００６８】
全ページでページ内復号が成功していない場合（ステップＳ１０２：Ｎｏ）、ページ間符号復号器群３０３は、復号が失敗したページ数が１であるか否かを判定する（ステップＳ１０３）。１である場合（ステップＳ１０３：Ｙｅｓ）、ページ間符号復号器群３０３は、上述の（例１）で説明したＸＯＲ復号を実行し（ステップＳ１０４）、復号処理を終了する。
【００６９】
復号が失敗したページ数が１でない場合（ステップＳ１０３：Ｎｏ）、ページ間符号復号器群３０３は、反復復号を終了するか否かを判定する（ステップＳ１０５）。例えばページ間符号復号器群３０３は、反復復号の回数が予め設定した上限数に達した場合に反復復号を終了すると判定する。
【００７０】
反復復号を終了すると判定した場合（ステップＳ１０５：Ｙｅｓ）、復号処理を終了する。反復復号を継続すると判定した場合（ステップＳ１０５：Ｎｏ）、信頼度判定器群３０２は、復号失敗ページの各ビットの信頼度を判定する（ステップＳ１０６）。次にページ間符号復号器群３０３は、上述の（例１）で説明した拡張ＸＯＲ復号を実行する（ステップＳ１０７）。この後、ステップＳ１０１に戻り処理が繰り返される。
【００７１】
図７は、ページ間符号をＲＳ符号とした場合の復号処理の一例を示すフローチャートである。ステップＳ２０１、Ｓ２０２は、図６のステップＳ１０１、Ｓ１０２と同様であるため説明を省略する。
【００７２】
全ページでページ内復号が成功していない場合（ステップＳ２０２：Ｎｏ）、ページ間符号復号器群３０３は、復号が失敗したページ数がパリティシンボル数以下であるか否かを判定する（ステップＳ２０３）。パリティシンボル数以下である場合（ステップＳ２０３：Ｙｅｓ）、ページ間符号復号器群３０３は、上述の（例２）で説明したＲＳ復号を実行し（ステップＳ２０４）、復号処理を終了する。
【００７３】
復号が失敗したページ数がパリティシンボル数より大きい場合（ステップＳ２０３：Ｎｏ）、ページ間符号復号器群３０３は、反復復号を終了するか否かを判定する（ステップＳ２０５）。例えばページ間符号復号器群３０３は、反復復号の回数が予め設定した上限数に達した場合に反復復号を終了すると判定する。
【００７４】
反復復号を終了すると判定した場合（ステップＳ２０５：Ｙｅｓ）、復号処理を終了する。反復復号を継続すると判定した場合（ステップＳ２０５：Ｎｏ）、ページ間符号復号器群３０３は、上述の（例２）で説明した拡張ＲＳ復号を実行するか否かを判定する（ステップＳ２０６）。例えばページ間符号復号器群３０３は、反復復号の回数が予め設定した閾値以上の場合には拡張ＲＳ復号を実行し、そうでなければ限界距離復号を実行すると判定する。
【００７５】
拡張ＲＳ復号を実行しないと判定された場合（ステップＳ２０６：Ｎｏ）、ページ間符号復号器群３０３は、上述の（例２）で説明した限界距離復号を実行する（ステップＳ２０７）。拡張ＲＳ復号を実行すると判定された場合（ステップＳ２０６：Ｙｅｓ）、信頼度判定器群３０２は、復号失敗ページの各ビットの信頼度を判定する（ステップＳ２０８）。次にページ間符号復号器群３０３は、上述の（例２）で説明した拡張ＲＳ復号を実行する（ステップＳ２０９）。
【００７６】
ステップＳ２０７およびステップＳ２０９の後、ステップＳ２０１に戻り処理が繰り返される。
【００７７】
図６および図７は、全ページを復号する場合の復号処理の例を示している。復号処理は全ページをまとめて実行する必要はなく、特定のページのみを復号してもよい。図８および図９は、このような場合の復号処理の例を示す。図８は、ページ間符号をＳＰＣ符号とした場合の復号処理の一例を示すフローチャートである。
【００７８】
まずページ内符号復号器群３０１は、復号を実行するページｊの読み出し値を取得する（ステップＳ３０１）。ページ内符号復号器群３０１は、ページｊについてページ内復号を実行する（ステップＳ３０２）。ページ内符号復号器群３０１は、ページ内復号が成功したか否かを判定する（ステップＳ３０３）。成功した場合（ステップＳ３０３：Ｙｅｓ）、復号処理を終了する。
【００７９】
ページ内復号が成功していない場合（ステップＳ３０３：Ｎｏ）、ページ間符号復号器群３０３は、反復復号の初回であるか否かを判定する（ステップＳ３０４）。初回である場合（ステップＳ３０４：Ｙｅｓ）、ページ内符号復号器群３０１は、ページｊ以外の全ページの読み出し値を取得する（ステップＳ３０５）。
【００８０】
全ページの読み出し値を取得後、または、反復復号の初回でないと判定された場合（ステップＳ３０４：Ｎｏ）、ページ内符号復号器群３０１は、ページｊ以外の全ページのページ内復号を実行する（ステップＳ３０６）。
【００８１】
ページ間符号復号器群３０３は、復号が失敗したページ数が１以下であるか否かを判定する（ステップＳ３０７）。１以下である場合（ステップＳ３０７：Ｙｅｓ）、ページ間符号復号器群３０３は、上述の（例１）で説明したＸＯＲ復号を実行し（ステップＳ３０８）、復号処理を終了する。
【００８２】
復号が失敗したページ数が１より大きい場合（ステップＳ３０７：Ｎｏ）、ページ間符号復号器群３０３は、反復復号を終了するか否かを判定する（ステップＳ３０７）。反復復号を終了すると判定した場合（ステップＳ３０７：Ｙｅｓ）、復号処理を終了する。反復復号を継続すると判定した場合（ステップＳ３０７：Ｎｏ）、信頼度判定器群３０２は、復号失敗ページの各ビットの信頼度を判定する（ステップＳ３０８）。次にページ間符号復号器群３０３は、上述の（例１）で説明した拡張ＸＯＲ復号を実行する（ステップＳ３１１）。この後、ステップＳ３０１に戻り処理が繰り返される。
【００８３】
図９は、ページ間符号をＲＳ符号とした場合の復号処理の一例を示すフローチャートである。ステップＳ４０１〜Ｓ４０６は、図８のステップＳ３０１〜Ｓ３０６と同様であるため説明を省略する。また、ステップＳ４０７〜ステップＳ４１３は、図７のステップＳ２０３〜ステップＳ２０９と同様であるため説明を省略する。
【００８４】
図１０は、本実施形態による反復復号の具体例を示す図である。図１０では、Ｐ１〜Ｐ４の４ページについてページ内復号、ページ間復号、および、ページ内復号を順に実行したときの復号結果の例が示されている。図１０の左の復号結果は、ページ内復号により、ページＰ１のみが復号に成功し、他の３ページは復号に失敗したことを示す。「×」は、判定器が低信頼ビットであると判定したビットを表す。図１０の左の復号結果内の破線で囲まれた箇所は、次のページ間復号の対象となるデータ単位を表す。図１０の中央の復号結果内の破線で囲まれた箇所は、次のページ内復号の対象となるページを表す。
【００８５】
例えばパリティシンボル数１のＲＳ符号をページ間符号とした場合、本実施形態では、拡張ＲＳ復号により、２つの低信頼ビットを含む左端および右端のフレームも復号できる。図１０の中央の復号結果は、このように復号された状態を表す。この後、ページ内復号を繰り返すことにより、すべての誤りを訂正することができる（図１０の右の復号結果）。
【００８６】
以上のように、本実施形態では、ＥＣＣで保護された複数ページを用いてＲＡＩＤを組んだデータが書き込まれるメモリシステムの信頼性を向上させることができる。例えばＳＰＣ符号を用いてＲＡＩＤを組む場合、２つ以上のページで復号に失敗したケースでも、本実施形態を適用すれば訂正を行うことができる。
【００８７】
また、例えばパリティシンボル数２のＲＳ符号を用いてＲＡＩＤを組む場合、３つ以上のページで復号に失敗したケースでも、本実施形態を適用すれば、ＲＳ符号の各フレームに含まれる２シンボル誤りを訂正することができる。これにより、ページ内符号とＲＡＩＤにおける反復復号の性能を向上させることができる。
【００８８】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００８９】
１  メモリシステム
１０  インターフェイス
１１  バッファメモリ
１１Ａ  ライトバッファ
１１Ｂ  リードバッファ
１２  コントローラ
１３  フラッシュメモリ部
２０  ＮＡＮＤフラッシュコントローラ
２１  ページ間Ｅ／Ｄ部
２２  ページ内Ｅ／Ｄ部
２３  メモリチップ
３０１  ページ内符号復号器群
３０２  信頼度判定器群
３０３  ページ間符号復号器群
【図１】
2020042512.tif 000008
【図２】
2020042512.tif 000009
【図３】
2020042512.tif 000010
【図４】
2020042512.tif 000011
【図５】
2020042512.tif 000012
【図６】
2020042512.tif 000013
【図７】
2020042512.tif 000014
【図８】
2020042512.tif 000015
【図９】
2020042512.tif 000016
【図１０】
2020042512.tif 000017