(57)【要約】【課題】、実装メモリ容量が小さく回路規模の小さいメモリコントローラ３を提供する【解決手段】メモリコントローラ３は、ＬＤＰＣ符号により符号化されたフレーム単位のデータを、単位行列からなるブロックと、単位行列の各行が順にシフトしている複数のブロックと、からなる検査行列をもとに、部分並列処理により復号を行い、メモリ部５から読み出したデータの閾値判定情報を記憶するバッファ２４と、閾値判定情報をＬＬＲに変換するＬＬＲ変換部１６と、ブロックのサイズ以下のイタレーション単位で、ＬＬＲをもとに、列処理および行処理を繰り返し行うイタレーション処理のときに算出される確率情報βを、記憶するＬＭＥＭ１２と、イタレーション単位のイタレーション処理が完了する度に、ＬＭＥＭ１２に記憶される確率情報βを、バッファ２４に転送するＣＰＵコア１０と、を具備する。【選択図】図８
2012244305.tif 000002
【特許請求の範囲】
【請求項１】
低密度パリティ符号により符号化されたフレーム単位のデータを、単位行列からなるブロックと、前記単位行列の各行が順にシフトしている複数のブロックと、からなる検査行列をもとに、部分並列処理により復号を行うときに、
ＮＡＮＤ型フラッシュメモリ部から読み出した前記データの閾値判定情報を記憶する第１のメモリ部と、
前記閾値判定情報を対数尤度比に変換するＬＬＲ変換部と、
前記ブロックのサイズ以下のイタレーション単位で、前記対数尤度比をもとに、列処理および行処理を繰り返し行うイタレーション処理のときに算出される確率情報を、記憶する第２のメモリ部と、
前記イタレーション単位の前記イタレーション処理が完了する度に、前記第２のメモリ部に記憶される前記確率情報を、前記第１のメモリ部に転送する制御部と、を具備することを特徴とするメモリコントローラ。
【請求項２】
前記制御部が、前記ＬＬＲ変換部が変換した前記対数尤度比を、前記第１のメモリ部の、前記一のイタレーション単位の前記閾値判定情報が記憶されていた同一アドレスに転送し、
さらに、前記イタレーション処理のときに、前記第１のメモリ部に記憶された前記対数尤度比を、前記イタレーション単位で前記第２のメモリ部に転送することを特徴とする請求項２に記載のメモリコントローラ。
【請求項３】
前記制御部が、一の前記イタレーション単位の前記イタレーション処理により算出された前記確率情報を、前記第１のメモリ部の、前記一のイタレーション単位の前記閾値判定情報が記憶されていた同一アドレスに転送することを特徴とする請求項２に記載のメモリコントローラ。
【請求項４】
前記イタレーション単位が、前記ブロック単位または前記ブロック単位をＤ分割（Ｄは２以上自然数）した分割ブロック単位であることを特徴とする請求項２に記載のメモリコントローラ。
【請求項５】
請求項１から請求項３のいずれか１項に記載のメモリコントローラを具備することを特徴とする半導体メモリ装置。
【請求項６】
低密度パリティ符号により符号化されたフレーム単位のデータの復号方法は、
単位行列からなるブロックと、前記単位行列の各行が順にシフトしている複数のブロックと、からなる検査行列をもとに、部分並列処理により復号を行うときに、ＮＡＮＤ型フラッシュメモリ部から読み出した前記データの閾値判定情報を第１のメモリ部に記憶する工程と、
閾値判定情報を対数尤度比に変換する工程と、
前記ブロックのサイズ以下のイタレーション単位で、前記対数尤度比をもとに、列処理および行処理を繰り返し行うイタレーション処理のときに算出される確率情報を第２のメモリ部に記憶する工程と、
前記イタレーション単位の前記イタレーション処理が完了する度に、前記第２のメモリ部に記憶される前記確率情報を、前記第１のメモリ部に転送する工程と、
前記確率情報から一時推定語を算出する工程と、
前記一時推定語をもとにパリティチェックを行う工程と、を具備する。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、ＬＤＰＣ符号化されたデータを復号するメモリコントローラ、前記メモリコントローラを有する半導体メモリ装置、およびＬＤＰＣ符号化されたデータの復号方法に関する。
【背景技術】
【０００２】
半導体メモリ装置の高密度記録化等のために、デジタルデータの誤り訂正符号に関する開発が行われている。誤り訂正符号は、代数系の誤り訂正方式と確率に基づく反復計算による誤り訂正方式とに大別できる。そして、後者に属する低密度パリティ符号（Ｌｏw Density Parity Check codes、以下、「ＬＤＰＣ符号」という）はシャノン限界に迫る、優れた性能が報告されている。
【０００３】
ＬＤＰＣ符号化データはサムプロダクト（Sum-Product）アルゴリズム等を用いることにより、比較的少ない回路規模で並列処理を行うことができる。しかし、符号長の長いＬＤＰＣ符号化データでは、全ての処理を並列で行う完全並列処理は、多数の演算回路を全て実装する必要があるため現実的ではない。
【０００４】
このため、正方行列を並べた構成の検査行列を用い、正方行列を１つのブロックとしてブロック単位で部分並列処理を行う復号装置が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００６−２７９３９６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明の実施形態は、実装メモリ容量が小さく回路規模の小さいメモリコントローラ、および前記メモリコントローラを有する半導体メモリ装置、および効率の良い復号方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一態様のメモリコントローラは、低密度パリティ符号により符号化されたフレーム単位のデータを、単位行列からなるブロックと単位行列の各行が順にシフトしている複数のブロックとからなる検査行列をもとに部分並列処理により復号を行うときに、ＮＡＮＤ型フラッシュメモリ部から読み出したデータの閾値判定情報を記憶する第１のメモリ部と、閾値判定情報を対数尤度比に変換するＬＬＲ変換部と、ブロックのサイズ以下のイタレーション単位で対数尤度比をもとに列処理および行処理を繰り返し行うイタレーション処理のときに算出される確率情報を、記憶する第２のメモリ部と、イタレーション単位のイタレーション処理が完了する度に第２のメモリ部に記憶される確率情報を第１のメモリ部に転送する制御部と、を具備する。
【０００８】
本発明の別の一態様の半導体メモリ装置は、低密度パリティ符号により符号化されたフレーム単位のデータを、単位行列からなるブロックと単位行列の各行が順にシフトしている複数のブロックとからなる検査行列をもとに部分並列処理により復号を行うときに、ＮＡＮＤ型フラッシュメモリ部から読み出したデータの閾値判定情報を記憶する第１のメモリ部と、閾値判定情報を対数尤度比に変換するＬＬＲ変換部と、ブロックのサイズ以下のイタレーション単位で対数尤度比をもとに列処理および行処理を繰り返し行うイタレーション処理のときに算出される確率情報を記憶する第２のメモリ部と、イタレーション単位のイタレーション処理が完了する度に第２のメモリ部に記憶される確率情報を第１のメモリ部に転送する制御部と、を具備するメモリコントローラを有する。
【０００９】
更に本発明の別の一態様の復号方法は、低密度パリティ符号により符号化されたフレーム単位のデータの復号方法であって、単位行列からなるブロックと、単位行列の各行が順にシフトしている複数のブロックと、からなる検査行列をもとに部分並列処理により復号を行うときに、ＮＡＮＤ型フラッシュメモリ部から読み出したデータの閾値判定情報を第１のメモリ部に記憶する工程と、閾値判定情報を対数尤度比に変換する工程と、ブロックのサイズ以下のイタレーション単位で、対数尤度比をもとに列処理および行処理を繰り返し行うイタレーション処理のときに算出される確率情報を第２のメモリ部に記憶する工程と、イタレーション単位のイタレーション処理が完了する度に第２のメモリ部に記憶される確率情報を第１のメモリ部に転送する工程と、確率情報から一時推定語を算出する工程と、一時推定語をもとにパリティチェックを行う工程と、を具備する。
【発明の効果】
【００１０】
本発明の実施形態によれば、実装メモリ容量が小さく回路規模の小さいメモリコントローラ、前記メモリコントローラを有する半導体メモリ装置、および効率の良い復号方法を提供することができる。
【図面の簡単な説明】
【００１１】
【図１】実施形態の検査行列Ｈ１を説明するための説明図である。
【図２】実施形態のタナーグラフＧ１を説明するための説明図である。
【図３】実施形態のタナーグラフＧ２の場合の、図３（Ａ）は行処理を説明するための説明図であり、図３（Ｂ）は列処理を説明するための説明図である。
【図４】図４（Ａ）は実施形態の部分並列処理に用いる検査行列Ｈ２であり、図４（Ｂ）は実施形態のブロック毎のシフト値を示している。
【図５】実施形態の検査行列Ｈ３のブロックのシフトを説明するための図であり、図５（Ａ）はシフト値＝０、図５（Ｂ）はシフト値＝１のブロックを示している。
【図６】実施形態のローテイト処理を説明するための説明図である。
【図７】実施形態のシフト処理を説明するための説明図である。
【図８】第１実施形態のメモリカードの構成を示す構成図である。
【図９】第１の形態のメモリカードの復号の流れを説明するためのフローチャートである。
【図１０】第１の形態のメモリカードの復号の流れを説明するためのフローチャートである。
【図１１】第３の形態のメモリカードの復号を説明するための閾値電圧分布と記憶データと対数尤度比テーブルとの関係を示す説明図である。
【図１２】第３の形態のメモリカードの復号の流れを説明するためのフローチャートである。
【発明を実施するための形態】
【００１２】
＜ＬＤＰＣ符号および部分並列処理＞
最初に実施形態のＬＤＰＣ符号および部分並列処理について説明する。ＬＤＰＣ符号は、非常に疎な検査行列、すなわち、行列内の非零要素数が少ない検査行列により定義される線形符号であり、タナーグラフで示すことができる。そして、誤り訂正処理は、タナーグラフ上で接続された符号語の各ビットに対応したビットノード（ビットノード）と各パリティ検査式に対応したチェックノードとの間で局所的に推論した結果を、やりとりしながら更新していくことに相当する。
【００１３】
図１に、（６、２）ＬＤＰＣ符号における、行重みｗｒ＝３、列重みｗｃ＝２の検査行列Ｈ１を示す。なお、（６、２）ＬＤＰＣ符号とは、符号長が６ビット、情報長が２ビットのＬＤＰＣ符号のことである。
【００１４】
そして、図２に示すように、検査行列Ｈ１をタナーグラフＧ１で示すと、ビットノードは検査行列Ｈの列に対応し、チェックノードは検査行列Ｈの行に対応している。そして検査行列Ｈ１の要素の中で、「１」であるノード間をエッジで結ぶことによりタナーグラフＧ１が構成されている。例えば、検査行列Ｈ１の第２行第５列の、丸で囲った「１」は、タナーグラフＧ１の太線で示すエッジに対応している。そして、検査行列Ｈ１の行重みｗｒ＝３は、ひとつのチェックノードと接続されているビットノードの数、すなわちエッジ数３に対応し、検査行列Ｈの列重みｗｃ＝２は、ひとつのビットノードと接続されているチェックノードの数、すなわちエッジ数２に対応している。
【００１５】
ＬＤＰＣ符号化データの復号はタナーグラフのエッジに割り当てられた信頼度（確率）情報をノードにおいて反復的に更新することで実行される。信頼度情報には、チェックノードからビットノードへの確率情報（以下、「外部値」または「外部情報」ともいい、記号「α」で表示する）と、ビットノードからチェックノードへの確率情報（以下、「事前確率」、「事後確率」、単に「確率」、または「対数尤度比（ＬＬＲ）」ともいい、記号「β」または「λ」で表示する）の２種類がある。信頼度更新処理は、行処理と列処理とからなり、行処理と列処理とを１回ずつ実行した単位のことを１イタレーション（ラウンド）処理と呼び、復号処理はイタレーション処理を繰り返す反復処理により行われる。
【００１６】
以上の説明のように、外部値αとは、ＬＤＰＣ復号処理のときの、チェックノードからビットノードへの確率情報であり、確率βとはビットノードからチェックノードへの確率情報であり、当業者にとり周知の用語である。
【００１７】
半導体メモリ装置では、符号化データを記憶したメモリセルから、閾値判定情報が読み出される。閾値判定情報は、記憶されているデータが「０」か「１」のいずれかであることを示すハードビット（ＨＢ）と、ハードビットの確からしさを示す複数のソフトビット（ＳＢ）と、からなる。閾値判定情報は、予め作成されたＬＬＲテーブルにより、ＬＬＲに変換され、イタレーション処理の初期ＬＬＲとなる。
【００１８】
以下、図３（Ａ）〜図３（Ｄ）に示すタナーグラフＧ２の一部を用いて、行処理および列処理について説明する。最初に、図３（Ａ）および図３（Ｂ）を用いて、ビットノード処理（列処理）について説明する。あるビットノード、例えばビットノード３、に対応する入力された符号語ビットの初期信頼度であるＬＬＲ、をλ（３）とし、このビットノード３へのチェックノードからの確率を、α（ｊ、３）とする。ここで、ｊはビットノード３に接続しているチェックノード番号を示す。
【００１９】
そして、ビットノード３は、α（１、３）に対応するエッジのチェックノードすなわち、チェックノード１に対して、以下の（式１）で表される計算を行う。
β（３、１）＝  λ（３）＋α（２、３）    ・・・（式１）
【００２０】
同様に、ノード番号ｊのチェックノードに対して、以下の（式２）で表される計算を行う。
β（３、ｊ）＝  λ（３）＋Σα（ｋ、３）    ・・・（式２）
【００２１】
ここで、Σはビットノード３に接続しているチェックノードの中で、ｋ＝ｊ以外の総和を意味する。
【００２２】
以上の計算を全てのビットノードに対して行い、以下の（式３）で表されるβ（ｉ、ｊ）を計算する。なお、ここで、符号長をＮ、ノード番号を、ｉとすると、ｉ＝１〜Ｎである。また、Σはビットノードｉに接続しているチェックノードの中で、ｋ＝ｊ以外の総和を意味する。
β（ｉ、ｊ）＝  λ（ｉ）＋Σα（ｋ、ｉ）    ・・・（式３）
【００２３】
次に、図３（Ｃ）および図３（Ｄ）を用いて、チェックノード処理（行処理）について説明する。あるチェックノード、例えばチェックノード１、へのメッセージである外部情報を、β（ｋ、１）としたとき、このチェックノードはβ（１、１）に対応するエッジのビットノードであるビットノード１に対して以下の（式４）で表されるα（１、１）を計算する。
【００２４】
α（１、１）＝ｓｉｇｎ（Πβ（ｍ、１））×ｍｉｎ（｜β（ｍ、１）｜）    ・・・（式４）
ただし、ｋはこのチェックノード１に接続されているビットノード番号である。そして、ｍは「２」から「３」の中から選択される。ここで、ｓｉｇｎ（Πβ（ｍ、１））は、β（ｍ、１）を、ｍ＝２から３、まで乗算した結果の符合（「＋１」あるいは「−１」）を意味する。また、｜β（ｍ、１）｜は、β（ｍ、１）の絶対値であり、ｍｉｎは複数の｜β（ｍ、１）｜の中から最小値を選択する関数である。
【００２５】
同様にして、α（１、ｉ）についても、以下の（式５）を使って算出する。
α（１、ｉ）＝ｓｉｇｎ（Πβ（ｍ、１））×ｍｉｎ｛｜β（ｍ、１）｜｝    ・・・（式５）
ただし、ｉはチェックノード１に接続しているビットノード番号であり、図１（Ｂ）のタナーグラフの例では、「１」、「２」、「３」である。また、ｍはチェックノード１に接続したビットノードの中で、ｍ＝ｉ、以外とする。
【００２６】
以上の計算を全てのチェックノードに対して行い、α（ｊ、ｉ）を以下の（式６）を使って計算する。
α（ｊ、ｉ）＝ｓｉｇｎ（Πβ（ｍ、ｊ））×ｍｉｎ（｜β（ｍ、ｊ）｜）    ・・・（式６）
ただし、ｍはチェックノードｊに接続したビットノードの中で、ｍ＝ｉ、以外とする。
【００２７】
そして、反復復号では、以上に示したビットノード処理とチェックノード処理とを１回ずつ実行した１イタレーション処理（１ラウンド）毎に、以下の（式７）によって、事後確率Ｐｂ（ｉ）を求める。
Ｐｂ（ｉ）＝λ（ｉ）＋Σα（ｋ、ｉ）    ・・・（式７）
ここで、i＝１〜Ｎであり、Ｎは符号長である。そして、Σはビットノードｉに接続された全ての和である。
【００２８】
この事後確率値（一時推定語）Ｐｂを基にビット判定、すなわち、当該ビットが、「０」または「１」のいずれであるかが硬判定される。そして、この硬判定結果を使用して、ＬＤＰＣ符号のパリティチェックを行い、誤りないことが確認された時点で反復処理を終了する。
【００２９】
ここで、メッセージ伝達アルゴリズムとして、サムプロダクト・アルゴリズムまたはミニサムプロダクト・アルゴリズム等を用いた、ビットノードおよびチェックノードにおける信頼度更新アルゴリズムでは、並列処理による復号処理を行うことができる。
【００３０】
しかし、符号長の長いＬＤＰＣ符号化データでは、全ての処理を並列で行う完全並列処理は、多数の演算回路を全て実装する必要があるため現実的ではない。
【００３１】
これに対して、複数の単位行列（以下「ブロック」ともいう。）を組み合わせて構成した検査行列を用いると、ブロックサイズｐのビットノード個数ｐの演算回路により部分並列処理を行うことで回路規模を縮小することができる。
【００３２】
図４（Ａ）に複数の単位行列を組み合わせて構成した検査行列Ｈ３を示す。検査行列Ｈ３は、１区画が５×５個の要素からなるブロックを横に６個、縦に３個並べて、縦１５行、横３０列となっている。
【００３３】
そして、図４（Ｂ）に示すように、検査行列Ｈ３の各ブロックＢは、対角成分には１が並び、他は全て０となる単位行列を数値分だけシフト処理した正方行列（以下、シフト行列）である。なお、図４（Ａ）に示した検査行列Ｈ３は、ユーザーデータ用のブロックである符号化対象（メッセージ）ブロック部Ｈ３Ａと、ユーザーデータから生成したパリティ用のパリティ用ブロック部Ｈ３Ｂとから構成されている。そして、図３（Ｂ）に示すように、シフト値「０」は単位行列を示し、シフト値「−１」は０行列を示している。なお、０行列は実際の演算処理が不要なため、以下では除いて説明する。
【００３４】
シフト処理によってあふれたビットはブロック内の最左列に挿入されている。検査行列Ｈ３を用いた復号処理ではシフト値を指定することにより必要なブロックの情報、すなわち、処理すべきノードの情報を得ることができる。なお、５×５のブロックからなる検査行列Ｈ３においては、シフト値は、復号処理に直接は関係のない、０行列を除くと、０、１、２、３、４の、５種類のいずれかである。
【００３５】
図４（Ａ）に示したブロックサイズ５Ｘ５（以下、「ブロックサイズ５」という）の正方行列を組み合わせた検査行列Ｈ３を用いた場合には、演算部１１３に演算ユニットを５個設けることで、５個のチェックノードに対して部分並列処理を実行することができる。なお、部分並列処理を実行するためには、ビットノード単位での事前／事後確率βを求めるための変数（以下、「ＬＭＥＭ変数」ともいう）を格納するビットノード記憶部（ＬＭＥＭ）１１２と、チェックノード単位で外部値αを求めるための変数（以下、「ＴＭＥＭ変数」ともいう）を格納するチェックノード記憶部（ＴＭＥＭ）１１４が必要である。ビットノードは列方向のアドレス（列アドレス）で管理するのでＬＭＥＭは列アドレスで管理し、チェックノードは行方向のアドレス（行アドレス）で管理するのでＴＭＥＭは行アドレスで管理する。外部値α、確率βを計算する場合は、ＬＭＥＭからリードしたＬＭＥＭ変数とＴＭＥＭからリードしたＴＭＥＭ変数が、演算回路にそれぞれ入力されて演算処理が実行される。
【００３６】
複数の単位行列を組み合わせて構成した検査行列Ｈ３を用いて復号する場合、ローテイター１１３Ａにより、ＴＭＥＭからリードした複数のＴＭＥＭ変数をシフト値に応じてローテイトすれば、検査行列Ｈ３の全体を記憶しておく必要はない。
【００３７】
例えば、図５および図６に示すように、ブロックサイズ８の検査行列Ｈ４を用いた、ＴＭＥＭ１１４からリードした８個のＴＭＥＭ変数の処理の場合には、メモリコントローラ１０３では、ＬＭＥＭ１１２と、ＴＭＥＭ１２６と、演算部１１３と、ローテイター１１３Ａと、が使用される。演算部１１３は８個の演算回路ＡＬＵ０〜ＡＬＵ８からなり、８個の処理を並列処理することができる。なお、ブロックサイズ８の検査行列Ｈ３を用いた場合のシフト値は、０〜７の８種類である。
【００３８】
図５（Ａ）および図６（Ａ）に示すように、シフト値が「０」のブロックＢ（０）場合は、ローテイター１１３Ａによりローテイト値０のローテイト処理が行われ、同一アドレスの変数同士で演算が実行される。ただし、ローテイト値０のローテイト処理とはローテイトされないことである。
【００３９】
列アドレス０のＬＭＥＭ変数、行アドレス０のＴＭＥＭ変数（図５（Ａ）破線表示）
列アドレス１のＬＭＥＭ変数、行アドレス１のＴＭＥＭ変数
列アドレス２のＬＭＥＭ変数、行アドレス２のＴＭＥＭ変数
・
・
列アドレス７のＬＭＥＭ変数、行アドレス７のＴＭＥＭ変数（図５（Ａ）破線表示）
【００４０】
これに対して、図５（Ｂ）および図６（Ｂ）に示すように、シフト値が「１」のブロックＢ（１）の場合は、ローテイター１１３Ａによりローテイト値１のローテイト処理が行われ、以下のような変数同士で演算が実行される。すなわち、ローテイト値１のローテイト処理とは、それぞれの変数をひとつ下段に移動し、あふれた最下段の変数を最上段に挿入するシフト処理である。
【００４１】
列アドレス０のＬＭＥＭ変数、行アドレス７のＴＭＥＭ変数（図５（Ｂ）破線表示）
列アドレス１のＬＭＥＭ変数、行アドレス０のＴＭＥＭ変数（図５（Ｂ）破線表示）
列アドレス２のＬＭＥＭ変数、行アドレス１のＴＭＥＭ変数
・
・
列アドレス７のＬＭＥＭ変数、行アドレス６のＴＭＥＭ変数
【００４２】
そして、図６（Ｃ）に示すように、シフト値が「７」のブロックＢ（７）の場合は、ローテイター１１３Ａによりローテイト値７のローテイト処理が行われ、以下のような変数同士で演算が実行される。すなわち、ローテイト値７のローテイト処理とは、ローテイト値１のローテイト処理を７回行う処理である。
【００４３】
列アドレス０のＬＭＥＭ変数、行アドレス１のＴＭＥＭ変数
列アドレス１のＬＭＥＭ変数、行アドレス２のＴＭＥＭ変数
列アドレス２のＬＭＥＭ変数、行アドレス３のＴＭＥＭ変数
・
・
列アドレス７のＬＭＥＭ変数、行アドレス０のＴＭＥＭ変数
【００４４】
図７に、ブロックシフト値（０〜７）毎の演算回路入力変数の組み合わせを示す。
【００４５】
以上のように、ローテイター１１３Ａは、ＬＭＥＭ１１２あるいはＴＭＥＭ１１４からリードした変数を演算部１１３に入力する前にブロックのシフト値に応じたローテイト値にローテイトする。ブロックサイズ８の検査行列Ｈ３を用いたメモリコントローラ１０３の場合には、ローテイター１１３Ａの最大ローテイト値は「ブロックサイズ−１」の「７」になる。信頼度の量子化ビット数を「ｕ」とすると、それぞれの変数のビット数は「ｕ」になるので、ローテイター１１３Ａの入出力データ幅は「８×ｕ」ビットになる。
【００４６】
＜第１実施形態＞
以下、本発明の第１実施形態のメモリコントローラ３、半導体メモリ装置、および復号方法について説明する。メモリコントローラ３は、低密度パリティ符号により符号化されたフレーム単位のデータを、単位行列からなるブロックと、単位行列の各行が順にシフトしている複数のブロックと、からなる検査行列をもとに、部分並列処理により復号を行う。
【００４７】
図８に示すように、本実施形態の半導体メモリ装置であるメモリカード２はパソコンまたはデジタルカメラ等のホスト４から受信したデータを符号化データとして記憶し、記憶した符号化データを復号してホスト４に送信する。メモリカード２とホスト４とはメモリシステム１を構成している。メモリカード２は、半導体メモリ部（以下、単に「メモリ部」ともいう。）５と、メモリコントローラ３とを有する。メモリ部５はＮＡＮＤ型フラッシュメモリ部から構成されている。
【００４８】
実施形態の半導体メモリ装置としては、ホスト４の内部に収納され、ホスト４の起動データ等を記憶する、いわゆるエンベデッドタイプであってもよく、または半導体ディスク：ＳＳＤ(Solid State Drive)等の形態であってもよい。あるいは半導体メモリ装置とホスト４とが、例えば携帯音楽プレーヤであるＭＰ３プレーヤ等のメモリシステムを構成していてもよい。
【００４９】
そして、メモリコントローラ３は、バス（不図示）を介して接続された、制御部であるＣＰＵコア１０と、ＬＤＣＰデコーダ１１と、ホストＩ／Ｆ（インターフェイス）２０と、データバッファであるバッファ２１と、ＬＤＰＣエンコーダ２２と、セレクタ２３と、データバッファであるバッファ２４と、ＮＡＮＤ  Ｉ／Ｆ（インターフェイス）２５と、を有する。
【００５０】
後述するように、第１のメモリ部であるバッファ２４は、ＮＡＮＤ型フラッシュメモリ部から読み出したデータの閾値判定情報と、復号中の確率情報と、を記憶する。
【００５１】
ＬＤＣＰデコーダ１１は、ビットノード記憶部（ＬＭＥＭ）１２と、演算部１３と、チェックノード記憶部（ＴＭＥＭ）１４と、復号データ格納メモリであるバッファ１５と、ＬＬＲ変換部１６と、を有する。そして、演算部１３は、ブロックサイズと同じｐ個の演算ユニットを有する。なお、メモリコントローラ３は、演算部１３の機能の一部でもあるローテイター、ＣＰＵコア１０の実行プログラムおよびアドレス変換デーブル等を記憶したＲＯＭ、対数尤度比（ＬＬＲ）テーブルを記憶したＬＬＲ記憶部、およびＬＤＰＣデコーダの一部である硬判定部等の図示しない構成要素も有している。ＬＭＥＭ１２等は、ＳＲＡＭまたはレジスタ等の半導体メモリからなる。
【００５２】
メモリコントローラ３は、ＣＰＵコア１０の制御のもと、ホスト  Ｉ／Ｆ（１４）を介してホスト４とデータ送受信を、ＮＡＮＤ  Ｉ／Ｆ（１６）を介してメモリ部５とデータ送受信を行う。またメモリコントローラ３は、メモリ部５のアドレス管理をＣＰＵコア１０で実行されるＦＷ（Firm Ware）で実現している。
【００５３】
次に、メモリ部５へのデータの記憶処理および読み出し処理について簡単に説明する。
図８に示すように、データの記憶処理時には、ホスト４から送信されたデータは、バッファ２１に一時記憶された後、ＬＤＰＣエンコーダ２２によりＬＤＰＣパリティが生成される。そして、セレクタ２３にてフレーム単位のデータにパリティが付与され、ＬＤＰＣ符号化データとして出力される。そして、ＮＡＮＤ  Ｉ／Ｆ（２５）を介して、ＬＤＰＣ符号化データがメモリ部５に記憶される。
【００５４】
一方、データ読み出し処理時には、ホスト４からのコマンドにより、メモリ部５の各メモリセルには所定の電圧が順次印加され、閾値判定情報が読み出される。閾値判定情報は、記憶されているビットデータが「０」か「１」のいずれかであることを示すハードビット（ＨＢ）と、ハードビットの確からしさを示す複数のソフトビット（ＳＢ）と、からなる。閾値判定情報をもとにＬＤＰＣデコーダ１１で復号されたデータはホスト４に送信される。
【００５５】
次に、図９および図１０のフローチャートに従い、メモリコントローラ３による復号について詳細に説明する。なお、以下では説明を簡単にするため、記憶／読み出しの処理単位であるページサイズと、符号化／復号の処理単位であるＬＤＰＣフレーム（以下「フレーム」ともいう）サイズと、が同じ３０ビットで、ブロックサイズｐが５ビットという、極めて短い場合を例にする。また、検査行列は列ブロック数６、行ブロック数４とする。
【００５６】
＜ステップＳ１０＞  閾値判定情報受信
ホスト４からのコマンドにより、メモリ部５から読み出されたフレーム単位のデータの閾値判定情報がメモリコントローラ３に受信される。ここで、それぞれのビットの閾値判定情報は、ハードビット（ＨＢ）と、例えば３種類のソフトビット（ＳＢ１、ＳＢ２、ＳＢ３）と、からなる。なお、ソフトビットの種類はメモリシステムにより異なる。
【００５７】
＜ステップＳ１１＞  第１のメモリ部への閾値判定情報記憶工程
それぞれが４ビットの閾値判定情報（ＨＢ、ＳＢ１、ＳＢ２、ＳＢ３）がフレーム単位で、第１のメモリ部であるバッファ２４に記憶される。言い換えれば、バッファ２４はＮＡＮＤ型フラッシュメモリ部から読み出したデータの閾値判定情報を記憶する。フレームサイズが３０ビットのため、バッファ２４に記憶される閾値判定情報は１２０ビット（４×３０）ビットである。
【００５８】
後述するように、閾値判定情報およびＬＬＲデータは、ビットアドレスにより区別可能にバッファ２４に記憶されることが好ましい。このため、バッファ２４には、４ビットの閾値判定情報を記憶するモジュールに加えて、１ビットのＬＬＲ付加ビット（ＬＢ）の記憶モジュールが準備されている。
【００５９】
すなわち、バッファ２４は、それぞれが３０ビットの、ＨＢモジュールと、ＳＢ１モジュールと、ＳＢ２モジュールと、ＳＢ３モジュールと、ＬＢモジュールと、からなり、１５０ビットの記憶容量を有する。各モジュールで、同一フレームのデータを記憶するビットアドレスは共通とする
【００６０】
＜ステップＳ１２＞  ＬＬＲ変換工程
バッファ２４に記憶されたフレーム単位の閾値判定情報が、ＬＬＲ変換部１６により、ＨＢの確からしさを示す対数尤度比（ＬＬＲ）データに、変換される。ＬＬＲ変換部１６はメモリセルの閾値電圧分布に基づき予め作成されたＬＬＲテーブルをもとに、所定の量子化ビット数Ｑにて変換処理を行う。
【００６１】
量子化ビット数Ｑが５の場合には、ＬＬＲ変換部１６は、１ビットのＨＢを５ビットのＬＬＲデータに変換する。なお、ＬＬＲデータの最初の１ビットがＨＢである。フレームサイズが３０ビット、量子化ビット数Ｑが５の場合、フレーム単位のＬＬＲデータサイズは１５０ビットとなる。
＜ステップＳ１３＞  第２のメモリ部へのＬＬＲデータ転送（書き戻し）工程
ＬＬＲ変換部１６が変換したフレーム単位の１５０ビットのＬＬＲデータは、バッファ２４に転送され記憶される。すなわち、バッファ２４から閾値判定情報が消去され、替わってＬＬＲデータが記憶される。
【００６２】
すでに説明したように、ＬＬＲデータは、それぞれの変換前の閾値判定情報が記憶されていた領域（アドレス）に記憶されることが好ましい。すなわち、それぞれのＬＬＲデータは、それぞれの変換前の閾値判定情報と同一ビットアドレスに記憶することが好ましい。ＬＭＥＭ１２とバッファ２４との共有化（データ管理）を、複雑なデータフォーマット変換を行うことなく実現するためである。
【００６３】
同一アドレスに閾値判定情報／ＬＬＲデータを記憶するためには、量子化ビット数Ｑと閾値判定情報ビット数とが同じビット長（ビット数）である必要がある。しかし本実施形態のように、量子化ビット数が５で、閾値判定情報ビット数が４ビットのように、両者が異なっていても、バッファ２４に、（量子化ビット数−閾値判定情報ビット長）のＬＢモジュールを設定しておくことにより、同一アドレスに記憶することができる。
【００６４】
本実施形態のバッファ２４では、５ビットのＬＬＲデータの各ビットは、それぞれ、ＨＢモジュールと、ＳＢ１モジュールと、ＳＢ２モジュールと、ＳＢ３モジュールと、ＬＢモジュールと、に記憶される。
【００６５】
＜ステップＳ１４＞  イタレーション回数初期化
イタレーション回数が０に初期化される。
【００６６】
＜ステップＳ１５＞  ＬＤＰＣ復号サブルーチン処理
図１０に示すステップＳ３０〜ステップＳ４３のＬＤＰＣ復号サブルーチン処理が行われる。
＜ステップＳ３０、ステップＳ３１＞
繰り返し処理のための初期化処理である。
【００６７】
＜ステップＳ３２＞処理ブロックのＬＬＲをＬＭＥＭに転送
ブロック単位でイタレーション処理を行うために、ＣＰＵコア１０の制御により、検査行列のブロック単位（ｐ＝５ビット）のＬＬＲデータ（５×５＝２５ビット）がバッファ２４から、第２のメモリ部であるＬＭＥＭ１２に送信され、ＬＭＥＭ１２に記憶される。すなわち、ＬＭＥＭ１２の容量は２５ビットあればよい。
【００６８】
＜ステップＳ３３＞  行処理
行処理がｐ個の演算回路により並列処理される。
【００６９】
＜ステップＳ３４〜Ｓ３５＞  
繰り返し処理のためのカウント工程である。
【００７０】
＜ステップＳ３６＞  列処理
列処理がｐ個の演算回路により並列処理される。
【００７１】
＜ステップＳ３７＞  更新βをＬＭＥＭからバッファ２４に転送
イタレーション処理により更新されＬＭＥＭ１２に記憶された確率情報（事後確率、ＬＬＲ）βは、ＣＰＵコア１０の制御のもと、再びバッファ２４に転送される。すなわち、制御部であるＣＰＵコア１０は、イタレーション単位のイタレーション処理が完了する度に、第２のメモリ部であるＬＭＥＭ１２に記憶される確率情報を、第１のメモリ部であるバッファ２４に転送する。
【００７２】
更新された確率情報βは、そのブロックのＬＬＲデータが記憶されていた領域、すなわち、同一アドレスに記憶されることが好ましい。言い換えれば、制御部であるＣＰＵコア１０は、一のイタレーション単位のイタレーション処理により算出された確率情報を、第１のメモリ部であるバッファ２４の、一のイタレーション単位の閾値判定情報が記憶されていたアドレスに転送することが好ましい。アドレスによるデータ管理が容易なためである。
【００７３】
＜ステップＳ３８〜ステップＳ４１＞
繰り返し処理のためのカウント工程である。
【００７４】
＜ステップＳ４２＞  一時推定語算出工程
全ブロックのイタレーション処理が完了する（Ｓ２３：Ｙｅｓ）と、それぞれの更新された確率情報（事後確率）βに基づき、ＬＤＰＣデコーダ１１の硬判定部において一時推定語がブロック毎に並列処理で計算される。
【００７５】
＜ステップＳ４３＞  パリティチェック工程
一時推定語に基づき、パリティチェックがブロック毎に並列処理で行われる。
以上で、ステップＳ３０〜ステップＳ４３のＬＤＰＣ復号サブルーチン処理が完了する。
【００７６】
ここで、図４の検査行列Ｈ２を用いる場合を例に、ＬＤＰＣ復号サブルーチン処理（ステップＳ３０〜Ｓ４３）の処理内容について詳細に説明する。
ＬＤＰＣ復号サブルーチン処理では、イタレーション制御変数Ｘ、Ｙ、Ｚに応じて以下の処理が行われる
【００７７】
Ｘ＝０：行１の処理を実行
Ｘ＝１：行２の処理を実行
Ｘ＝２：行３の処理を実行
Ｚ＝０：列Ａの処理を実行
Ｚ＝１：列Ｂの処理を実行
Ｚ＝２：列Ｃの処理を実行
Ｚ＝３：列Ｄの処理を実行
Ｚ＝４：列Ｅの処理を実行
Ｚ＝５：列Ｆの処理を実行
Ｙ＝０：列Ａの処理を実行
Ｙ＝１：列Ｂの処理を実行
Ｙ＝２：列Ｃの処理を実行
Ｙ＝３：列Ｄの処理を実行
Ｙ＝４：列Ｅの処理を実行
Ｙ＝５：列Ｆの処理を実行
【００７８】
＜Ｘ＝０での処理＞
[１]行処理
（１）ｍ１〜ｍ５の確率情報をＬＭＥＭに転送。ブロック（Ａ、１）の行処理（ｐ個  並列処理）を実行。
（２）ｍ６〜ｍ１０の確率情報をＬＭＥＭに転送。ブロック（Ｂ、１）の行処理（ｐ個  並列処理）を実行。（３）ｍ１１〜ｍ１５の確率情報をＬＭＥＭに転送。ブロック（Ｃ、１）の行処理（ｐ個  並列処理）を実行。
（４）ｐ１〜ｐ５の確率情報をＬＭＥＭに転送。ブロック（Ｄ、１）の行処理（ｐ個  並列処理）を実行。
（５）ｐ６〜ｐ１０の確率情報をＬＭＥＭに転送。ブロック（Ｅ、１）の行処理（ｐ個  並列処理）を実行。
（６）ｐ１１〜ｐ１５の確率情報をＬＭＥＭに転送。ブロック（Ｆ、１）の行処理（ｐ個  並列処理）を実行。
以上の処理でｐ個（５個）のαを求め、これをＴＭＥＭに記憶する。
【００７９】
[２]列処理
（７）ブロック（Ａ、１）の列処理（ｐ個  並列処理）を実行。
（８）ブロック（Ｂ、１）の列処理（ｐ個  並列処理）を実行。
（９）ブロック（Ｃ、１）の列処理（ｐ個  並列処理）を実行。
（１０）ブロック（Ｄ、１）の列処理（ｐ個  並列処理）を実行。
（１１）ブロック（Ｅ、１）の列処理（ｐ個  並列処理）を実行。
（１２）ブロック（Ｆ、１）の列処理（ｐ個  並列処理）を実行。
【００８０】
＜Ｘ＝１での処理＞
[１]行処理
（１）ｍ１〜ｍ５の確率情報をＬＭＥＭに転送。ブロック（Ａ、２）の行処理（ｐ個  並列処理）を実行。
（２）ｍ６〜ｍ１０の確率情報をＬＭＥＭに転送。ブロック（Ｂ、２）の行処理（ｐ個  並列処理）を実行。
（３）ｍ１１〜ｍ１５の確率情報をＬＭＥＭに転送。ブロック（Ｃ、２）の行処理（ｐ個  並列処理）を実行。
（４）ｐ１〜ｐ５の確率情報をＬＭＥＭに転送。ブロック（Ｄ、２）の行処理（ｐ個  並列処理）を実行。
（５）ｐ６〜ｐ１０の確率情報をＬＭＥＭに転送。ブロック（Ｅ、２）の行処理（ｐ個  並列処理）を実行。
（６）ｐ１１〜ｐ１５の確率情報をＬＭＥＭに転送。ブロック（Ｆ、２）の行処理（ｐ個  並列処理）を実行。
以上の処理でｐ個（５個）のαを求め、これをＴＭＥＭに記憶する。
【００８１】
[２]列処理
（７）ブロック（Ａ、２）の列処理（ｐ個  並列処理）を実行。
（８）ブロック（Ｂ、２）の列処理（ｐ個  並列処理）を実行。
（９）ブロック（Ｃ、２）の列処理（ｐ個  並列処理）を実行。
（１０）ブロック（Ｄ、２）の列処理（ｐ個  並列処理）を実行。
（１１）ブロック（Ｅ、２）の列処理（ｐ個  並列処理）を実行。
（１２）ブロック（Ｆ、２）の列処理（ｐ個  並列処理）を実行。
【００８２】
＜Ｘ＝２での処理＞
[１]行処理
（１）ｍ１〜ｍ５の確率情報をＬＭＥＭに転送。ブロック（Ａ、３）の行処理（ｐ個  並列処理）を実行。
（２）ｍ６〜ｍ１０の確率情報をＬＭＥＭに転送。ブロック（Ｂ、３）の行処理（ｐ個  並列処理）を実行。
（３）ｍ１１〜ｍ１５の確率情報をＬＭＥＭに転送。ブロック（Ｃ、３）の行処理（ｐ個  並列処理）を実行。
（４）ｐ１〜ｐ５の確率情報をＬＭＥＭに転送。ブロック（Ｄ、３）の行処理（ｐ個  並列処理）を実行。
（５）ｐ６〜ｐ１０の確率情報をＬＭＥＭに転送。ブロック（Ｅ、３）の行処理（ｐ個  並列処理）を実行。
（６）ｐ１１〜ｐ１５の確率情報をＬＭＥＭに転送。ブロック（Ｆ、３）の行処理（ｐ個  並列処理）を実行。
以上の処理でｐ個（５個）のαを求め、これをＴＭＥＭに記憶する。
【００８３】
[２]列処理
（７）ブロック（Ａ、３）の列処理（ｐ個  並列処理）を実行。
（８）ブロック（Ｂ、３）の列処理（ｐ個  並列処理）を実行。
（９）ブロック（Ｃ、３）の列処理（ｐ個  並列処理）を実行。
（１０）ブロック（Ｄ、３）の列処理（ｐ個  並列処理）を実行。
（１１）ブロック（Ｅ、３）の列処理（ｐ個  並列処理）を実行。
（１２）ブロック（Ｆ、３）の列処理（ｐ個  並列処理）を実行。
ＬＤＰＣ復号のサブルーチンでは、例えば、以上の説明の処理が行われる。
【００８４】
＜ステップＳ１６＞  パリティチェックＯＫ？
パリティチェックがＯＫ（Ｙｅｓ）の場合には、ステップＳ１７からの処理が行われる。
パリティチェックがＮＧ（Ｎｏ）の場合には、ステップＳ１８からの処理が行われる。
【００８５】
＜ステップＳ１８、Ｓ１９＞  イタレーション回数チェック
所定の最大回数のイタレーション処理となるまで、更新された確率情報によるＳ１５からの処理が繰り返し行われる。
【００８６】
＜ステップＳ２０＞  エラーレスポンス信号送信
最大回数のイタレーション処理を行っても復号できない（パリティチェックＮＧ）場合には、コントローラ３はホスト４にエラーレスポンス信号を送信する。
なお、イタレーション処理の繰り返し限度は、回数ではなく、時間で管理してもよい。
【００８７】
または、メモリコントローラ３が、ＬＬＲ記憶部に複数のＬＬＲテーブルを記憶している場合には、ＬＬＲ変換部１６が別のＬＬＲテーブルにより閾値判定情報を再変換し、新たなＬＬＲデータを用いてイタレーション処理を行うようにしてもよい。なお、この場合は、メモリ部５から再度、閾値判定情報を読み出してバッファ２４に記憶する必要がある。このため、復号時間が長くなるが、ＬＬＲ再変換の発生頻度が低ければ、実用に耐えうるスループットを維持可能である。
【００８８】
＜ステップＳ１７＞  復号データ送信工程
パリティチェックがＯＫの場合（Ｓ１６：Ｙｅｓ）には、復号データがバッファ２１に一時記憶された後、ＨＯＳＴ  Ｉ／Ｆ（２０）を介して、ホスト４に送信される。
【００８９】
＜比較＞
ここで、比較のため、単純な制御のメモリコントローラの場合について説明する。比較例のメモリコントローラでは、例えば、バッファ２４に記憶された閾値判定情報をもとに、ＬＬＲ変換部１６が変換した１５０ビットのＬＬＲデータが、ＬＭＥＭ１２に記憶される。このため、ＬＭＥＭの容量は１５０ビット必要である。すなわち、ＬＭＥＭの容量は（フレームサイズ×量子化ビット数）である。
【００９０】
特に、符号長が長くなるに従い、ビットノードが増えるため、各ビットノードのＬＬＲデータを記憶するＬＭＥＭの容量が増大し、ＬＤＰＣデコーダおよびメモリコントローラの回路規模が増大する。一方、バッファ２４は復号のときには使用されない状態である。
【００９１】
これに対して、以上の説明のように、メモリカード２のメモリコントローラ３では、ＬＭＥＭ１２のサイズは２５ビット（ブロックサイズ（５）×量子化ビット数（５））でよい。これは、ＬＤＰＣデコーダ１１の機能とは別の機能として配設されているバッファ２４を、復号のときに活用するためである。
【００９２】
すなわち、メモリカード２のメモリコントローラ３は、復号中にアイドリング（待機）状態になっているバッファ２４で、ＬＭＥＮ１２機能の一部を代用することで、（フレームサイズ×量子化ビット数）の容量のＬＭＥＭを有する場合と比べて、メモリコントローラのトータルのメモリ容量を減少している。
【００９３】
メモリコントローラ３では、比較例のメモリコントローラと比べると、バッファ２４へのアクセス処理が増えている。しかし、メモリコントローラ３では、ブロック単位のパイプライン処理を実行しているため、スループットは比較例のメモリコントローラと殆ど変わらない。
【００９４】
以下、本実施形態のメモリコントローラ３と、比較例のメモリコントローラと、で実装する必要のあるバッファ容量を比較する。なお、量子化ビット数Ｑ＝５ビット、フレームサイズＬ＝ページサイズ＝４０９６バイト、ＳＢの種類＝（Ｓ−１）＝４種類、ブロックサイズＢ＝１６バイトとする。
【００９５】
以下の表１に示すように、比較例のメモリコントローラでは合計３６８６４バイトの容量が必要なのに対して、実施形態のメモリコントローラ３では合計２０５６０バイトの容量である。すなわち、容量比は、２０５６０／３６８６４＝０．５６であり、実施形態のメモリコントローラ３ではメモリ（バッファ）容量が約４４％縮小できる。
【００９６】
【表１】
2012244305.tif 000003
【００９７】
以上の説明のように、実施形態のメモリコントローラ３およびメモリコントローラ３を具備するメモリカード２は、実装メモリ容量が小さく回路規模が小さい。このため、メモリコントローラ３およびメモリカード２は、消費電力も小さく省エネルギ性に優れている。また、本実施形態の復号方法は、消費電力が小さく省エネルギ性に優れており効率がよい。
【００９８】
なお、メモリカード２がホスト４とともに構成するメモリシステム１も、メモリカード２の実装メモリ容量が小さく回路規模が小さいため、消費電力が小さく省エネルギ性に優れている。
【００９９】
＜第２実施形態＞
以下、第２実施形態のメモリカード２Ａおよびメモリコントローラ３Ａについて説明する。なおメモリカード２Ａおよびメモリコントローラ３Ａは、第１実施形態のメモリカード２およびメモリコントローラ３と類似しているため、同じ構成要素には同じ符号を付し説明は省略する。
【０１００】
第１実施形態では、説明を簡単にするために、ブロックサイズｐ等が極端に小さい例（ｐ＝５等）について説明したが、製品では、例えば、ブロックサイズｐは、１２８〜２５６規模の値になり、非常に大きい。演算部１３には、ｐ個の演算回路を、設置する必要がある。
【０１０１】
これに対して、メモリシステム１Ａのメモリコントローラ３Ａでは、イタレーション単位、すなわち、並列処理する単位が、ブロックサイズｐを更にＤ分割（Ｄは２以上自然数）した分割ブロック単位である。すなわち、メモリカード２Ａおよびメモリコントローラ３Ａでは、回路規模を大きくしないために、演算部１３Ａの演算ユニット数を、１／Ｄに削減して並列度を意図的に下げている。
【０１０２】
すなわち、図９に示したステップＳ１４において、ＣＰＵコア１０の制御によりＬＬＲデータが、サイズが（ｐ／Ｄ）の分割ブロック単位に分割される。なお。ステップＳ１５〜Ｓ１７の処理は分割ブロック単位で行ってもよいし、ブロック単位で行ってもよい。
【０１０３】
また、演算ユニット数だけでなく、ＬＭＥＭ１２の容量も、ブロックサイズ処理の場合の１／Ｄに削減することができる。なお、Ｄの上限はフレームサイズおよび処理速度等との兼ね合いで適宜、決定されるが、例えば１６である。
【０１０４】
メモリカード２Ａおよびメモリコントローラ３Ａは、メモリカード２およびメモリコントローラ３が有する効果を有し、更に回路規模を小型化できる。また本実施形態の復号方法は第１実施形態の復号方法が有する効果を有し、更に効率的である。
【０１０５】
＜第３実施形態＞
以下、第３実施形態のメモリカード２Ｂおよびメモリコントローラ３Ｂについて説明する。なおメモリカード２Ｂおよびメモリコントローラ３Ｂは、第１実施形態のメモリカード２およびメモリコントローラ３と類似しているため、同じ構成要素には同じ符号を付し説明は省略する。
【０１０６】
第１実施形態では、ステップＳ１０において、ホスト４からのコマンドにより、メモリ部５からハードビット（ＨＢ）と３種類のソフトビット（ＳＢ１、ＳＢ２、ＳＢ３）と、からなる閾値判定情報を読み出して復号を行った。
【０１０７】
図１１に示すように、例えば、１個のメモリセルに３ビットのデータを記憶する場合に、３種類のＨＢと３種類のＳＢとを読み出すためには、Ｖ００〜Ｖ３４の３５種類の電圧を、それぞれのメモリセルに印加する必要がある。
【０１０８】
これに対して、本実施形態のメモリシステム１Ｂのメモリコントローラ３Ｂでは、最初はＨＢのみからなる閾値判定情報を読み出して復号を行い、復号できなかった場合に、ＳＢを読み出して復号を行う。
【０１０９】
以下、図１２のフローチャートに従い説明する。
＜ステップＳ５０＞  ＨＢ読み出し
メモリ部５からフレーム単位のデータのＨＢのみからなる閾値判定情報がメモリコントローラ３に受信される。各メモリセルに読み出しのために印加される電圧は、Ｖ３２、Ｖ２７、Ｖ２２、Ｖ１７、Ｖ１２、Ｖ０７、Ｖ０２の７種類であり、ＳＢ読み出しの場合の３５種類に比べて少ない。このため、ＨＢのみの読み出しは、ＳＢ読み出しの場合に比べて高速で処理が可能である。
【０１１０】
＜ステップＳ５１〜ステップＳ６０＞
第１実施形態のステップＳ１１〜ステップＳ１９と類似した処理である。ただし、ステップＳ５２におけるＬＬＲ変換処理は、ＨＢのみに基づくＬＬＲ変換処理である。
すなわち、ＨＢは、基本的には記憶されているデータが「０」か「１」のいずれかであることを示しているだけである。しかし、それぞれのＨＢは読み出し電圧が異なるため、読み出し電圧により確からしさが異なる。例えば、図１１に示す、Ｅｒ状態で記憶されている読み出し電圧が最も低いＨＢ（１１１）およびＧ状態で記憶されている読み出し電圧が最も高いＨＢ（０１１）は、他のＨＢに比べて信頼度が高い。
【０１１１】
ＨＢのみに基づくＬＬＲ変換のためのＨＢ−ＬＬＲテーブルは、ＳＢに基づくＬＬＲ変換のためのＬＬＲテーブルとは別に、予め準備される。ＨＢのみに基づくＬＬＲ変換は、ＳＢを用いたＬＬＲ変換に比べると、「かなり粗い」変換となる。
【０１１２】
＜ステップＳ６１＞
ＨＢのみから変換されたＬＬＲを用いた復号を、イタレーション回数ＨＩＴＲが所定の最大回数だけ行っても復号できなかった場合（Ｓ６０：Ｙｅｓ）には、メモリ部５からフレーム単位のデータのＨＢおよびＳＢからなる閾値判定情報がメモリコントローラ３に受信される。なお、ＨＢはステップＳ５０において読み出されているので、ＳＢのみを読み出しても良い。
そして、図１１に示したＬＬＲテーブルを用いてＳＢ−ＬＬＲ変換処理が行われる。
【０１１３】
＜ステップＳ６２〜ステップＳ７０、Ｓ５５＞
第１実施形態のステップＳ１１〜ステップＳ２０、Ｓ１７と、ほぼ同じ処理である。
そして、メモリコントローラ３Ｂおよびメモリコントローラ３Ｂを有するメモリカード２Ｂは、第１実施形態のメモリカード２等が有する効果を有し、更にＨＢのみによる復号が可能であるため復号速度が速い。
【０１１４】
なお、以上の説明では、最初にＨＢのみを読み出して、ＨＢのみからＬＬＲを算出してＬＤＰＣ復号を行い、復号できなかった場合にはＨＢと３種類のＳＢとを読み出してＬＤＰＣ復号を行う場合について説明した。これに対して、ＨＢのみを読み出してＬＤＰＣ復号を行い、復号できなかった場合にはＨＢと１種類のＳＢとを読み出してＬＤＰＣ復号を行い、復号できなかった場合にはＨＢと２種類のＳＢとを読み出してＬＤＰＣ復号を行い、これでも復号できなかった場合にはＨＢと３種類のＳＢとを読み出してＬＤＰＣ復号を行うようにしてもよい。
【０１１５】
上記方式の変形例としては、最初にＨＢと１種類のＳＢとを読み出し、次にＨＢと３種類のＳＢとを読み出しする等、種々の方式がある。
【０１１６】
すなわち、本実施形態の復号方法は、第１実施形態の復号方法であって、更に以下の通りである。
低密度パリティ符号により符号化されたフレーム単位のデータの復号方法は、
ＮＡＮＤ型フラッシュメモリ部から前記データの閾値判定情報として、少なくともハードビット情報を読み出す第１の読み出し工程と、
第１の読み出し工程で読み出した第１の閾値判定情報を第１の対数尤度比に変換する第１のＬＬＲ変換工程と、
第１のＬＬＲ変換工程で変換された第１の対数尤度比を用いて、軟判定復号を行う第１の復号工程と、
第１の復号工程で復号できなかった場合に、前記ＮＡＮＤ型フラッシュメモリ部から前記データの第２の閾値判定情報として、第１の読み出し工程よりも多くのソフトビット情報を読み出す第２の読み出し工程と、
第２の読み出し工程で読み出した第２の閾値判定情報を第２の対数尤度比に変換する第２のＬＬＲ変換工程と、
第２のＬＬＲ変換工程で変換された第２の対数尤度比を用いて、軟判定復号を行う第２の復号工程と、を具備する。
【０１１７】
＜補足説明＞
図９に示したステップＳ１２においてフレーム単位でＬＬＲ変換処理を行う方式（逐次方式）について説明したが、ブロック単位または分割ブロック単位でＬＬＲ変換処理を行う方法（一括方式）で行ってもよい。この場合には、バッファ２４から読み出された、復号対象のフレームの一部（ブロック単位または分割ブロック単）のデータが、ＬＬＲ変換部１６でＬＬＲデータに変換され、ＬＭＥＭ１２に記憶される。
【０１１８】
ＬＭＥＭ１２に記憶されたＬＬＲデータを使って、演算部１３で復号が行われる。ＬＭＥＭ１２に記憶されたＬＬＲデータによる復号が完了したら、次の処理に必要なデータをバッファ２４から読み出し、以下、最初のデータと同様に処理する。この処理を繰り返して、１フレームデータの復号を完了する。
【０１１９】
バッファ２４から読み出すデータサイズは、演算部１３で並列処理するデータサイズと関連する。例えば、ブロック単位で処理する場合は、１ブロック分のデータサイズである。このため、一括方式でも、逐次方式と同様に、比較例の１フレーム分のＬＬＲデータを格納するＬＭＥＭより、はるかに容量の小さいＬＭＥＭで、同様の処理を実行することが可能である。
【０１２０】
なお、以上では、本発明の実施形態を説明したが、この実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。実施形態は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１２１】
１、１Ａ、１Ｂ…メモリシステム
２、２Ａ、２Ｂ…メモリカード
３、３Ａ、３Ｂ…メモリコントローラ
４…ホスト
５…メモリ部
１０…ＣＰＵコア
１１…ＬＤＰＣデコーダ
１２…ＬＭＥＭ
１３…演算部
１４…ＴＭＥＭ
１５…バッファ
１６…ＬＬＲ変換部
２０…ＨＯＳＴ  Ｉ／Ｆ
２１…バッファ
２２…ＬＤＰＣエンコーダ
２３…セレクタ
２４…バッファ
２５…ＮＡＮＤ  Ｉ／Ｆ
１０３…メモリコントローラ
１１３…演算部
１１３Ａ…ローテイター
【図１】
2012244305.tif 000004
【図２】
2012244305.tif 000005
【図３】
2012244305.tif 000006
【図４】
2012244305.tif 000007
【図５】
2012244305.tif 000008
【図６】
2012244305.tif 000009
【図７】
2012244305.tif 000010
【図８】
2012244305.tif 000011
【図９】
2012244305.tif 000012
【図１０】
2012244305.tif 000013
【図１１】
2012244305.tif 000014
【図１２】
2012244305.tif 000015