低密度パリティ符号により符号化されたフレーム単位のデータを、単位行列からなるブロックと、前記単位行列の各行が順にシフトしている複数のブロックと、からなる検査行列をもとに、部分並列処理により復号を行うときに、NAND型フラッシュメモリ部から読み出した前記データの閾値判定情報を記憶する第1のメモリ部と、前記閾値判定情報を対数尤度比に変換するLLR変換部と、前記ブロックのサイズ以下のイタレーション単位で、前記対数尤度比をもとに、列処理および行処理を繰り返し行うイタレーション処理のときに算出される確率情報を、記憶する第2のメモリ部と、前記イタレーション単位の前記イタレーション処理が完了する度に、前記第2のメモリ部に記憶される前記確率情報を、前記第1のメモリ部に転送する制御部と、を具備することを特徴とするメモリコントローラ。前記制御部が、前記LLR変換部が変換した前記対数尤度比を、前記第1のメモリ部の、前記一のイタレーション単位の前記閾値判定情報が記憶されていた同一アドレスに転送し、さらに、前記イタレーション処理のときに、前記第1のメモリ部に記憶された前記対数尤度比を、前記イタレーション単位で前記第2のメモリ部に転送することを特徴とする請求項2に記載のメモリコントローラ。前記制御部が、一の前記イタレーション単位の前記イタレーション処理により算出された前記確率情報を、前記第1のメモリ部の、前記一のイタレーション単位の前記閾値判定情報が記憶されていた同一アドレスに転送することを特徴とする請求項2に記載のメモリコントローラ。前記イタレーション単位が、前記ブロック単位または前記ブロック単位をD分割Dは2以上自然数した分割ブロック単位であることを特徴とする請求項2に記載のメモリコントローラ。請求項1から請求項3のいずれか1項に記載のメモリコントローラを具備することを特徴とする半導体メモリ装置。低密度パリティ符号により符号化されたフレーム単位のデータの復号方法は、単位行列からなるブロックと、前記単位行列の各行が順にシフトしている複数のブロックと、からなる検査行列をもとに、部分並列処理により復号を行うときに、NAND型フラッシュメモリ部から読み出した前記データの閾値判定情報を第1のメモリ部に記憶する工程と、閾値判定情報を対数尤度比に変換する工程と、前記ブロックのサイズ以下のイタレーション単位で、前記対数尤度比をもとに、列処理および行処理を繰り返し行うイタレーション処理のときに算出される確率情報を第2のメモリ部に記憶する工程と、前記イタレーション単位の前記イタレーション処理が完了する度に、前記第2のメモリ部に記憶される前記確率情報を、前記第1のメモリ部に転送する工程と、前記確率情報から一時推定語を算出する工程と、前記一時推定語をもとにパリティチェックを行う工程と、を具備する。本発明の実施形態は、実装メモリ容量が小さく回路規模の小さいメモリコントローラ、および前記メモリコントローラを有する半導体メモリ装置、および効率の良い復号方法を提供することを目的とする。本発明の一態様のメモリコントローラは、低密度パリティ符号により符号化されたフレーム単位のデータを、単位行列からなるブロックと単位行列の各行が順にシフトしている複数のブロックとからなる検査行列をもとに部分並列処理により復号を行うときに、NAND型フラッシュメモリ部から読み出したデータの閾値判定情報を記憶する第1のメモリ部と、閾値判定情報を対数尤度比に変換するLLR変換部と、ブロックのサイズ以下のイタレーション単位で対数尤度比をもとに列処理および行処理を繰り返し行うイタレーション処理のときに算出される確率情報を、記憶する第2のメモリ部と、イタレーション単位のイタレーション処理が完了する度に第2のメモリ部に記憶される確率情報を第1のメモリ部に転送する制御部と、を具備する。本発明の別の一態様の半導体メモリ装置は、低密度パリティ符号により符号化されたフレーム単位のデータを、単位行列からなるブロックと単位行列の各行が順にシフトしている複数のブロックとからなる検査行列をもとに部分並列処理により復号を行うときに、NAND型フラッシュメモリ部から読み出したデータの閾値判定情報を記憶する第1のメモリ部と、閾値判定情報を対数尤度比に変換するLLR変換部と、ブロックのサイズ以下のイタレーション単位で対数尤度比をもとに列処理および行処理を繰り返し行うイタレーション処理のときに算出される確率情報を記憶する第2のメモリ部と、イタレーション単位のイタレーション処理が完了する度に第2のメモリ部に記憶される確率情報を第1のメモリ部に転送する制御部と、を具備するメモリコントローラを有する。更に本発明の別の一態様の復号方法は、低密度パリティ符号により符号化されたフレーム単位のデータの復号方法であって、単位行列からなるブロックと、単位行列の各行が順にシフトしている複数のブロックと、からなる検査行列をもとに部分並列処理により復号を行うときに、NAND型フラッシュメモリ部から読み出したデータの閾値判定情報を第1のメモリ部に記憶する工程と、閾値判定情報を対数尤度比に変換する工程と、ブロックのサイズ以下のイタレーション単位で、対数尤度比をもとに列処理および行処理を繰り返し行うイタレーション処理のときに算出される確率情報を第2のメモリ部に記憶する工程と、イタレーション単位のイタレーション処理が完了する度に第2のメモリ部に記憶される確率情報を第1のメモリ部に転送する工程と、確率情報から一時推定語を算出する工程と、一時推定語をもとにパリティチェックを行う工程と、を具備する。本発明の実施形態によれば、実装メモリ容量が小さく回路規模の小さいメモリコントローラ、前記メモリコントローラを有する半導体メモリ装置、および効率の良い復号方法を提供することができる。<LDPC符号および部分並列処理>最初に実施形態のLDPC符号および部分並列処理について説明する。LDPC符号は、非常に疎な検査行列、すなわち、行列内の非零要素数が少ない検査行列により定義される線形符号であり、タナーグラフで示すことができる。そして、誤り訂正処理は、タナーグラフ上で接続された符号語の各ビットに対応したビットノードビットノードと各パリティ検査式に対応したチェックノードとの間で局所的に推論した結果を、やりとりしながら更新していくことに相当する。図1に、6、2LDPC符号における、行重みwr=3、列重みwc=2の検査行列H1を示す。なお、6、2LDPC符号とは、符号長が6ビット、情報長が2ビットのLDPC符号のことである。そして、図2に示すように、検査行列H1をタナーグラフG1で示すと、ビットノードは検査行列Hの列に対応し、チェックノードは検査行列Hの行に対応している。そして検査行列H1の要素の中で、1であるノード間をエッジで結ぶことによりタナーグラフG1が構成されている。例えば、検査行列H1の第2行第5列の、丸で囲った1は、タナーグラフG1の太線で示すエッジに対応している。そして、検査行列H1の行重みwr=3は、ひとつのチェックノードと接続されているビットノードの数、すなわちエッジ数3に対応し、検査行列Hの列重みwc=2は、ひとつのビットノードと接続されているチェックノードの数、すなわちエッジ数2に対応している。LDPC符号化データの復号はタナーグラフのエッジに割り当てられた信頼度確率情報をノードにおいて反復的に更新することで実行される。信頼度情報には、チェックノードからビットノードへの確率情報以下、外部値または外部情報ともいい、記号αで表示すると、ビットノードからチェックノードへの確率情報以下、事前確率、事後確率、単に確率、または対数尤度比LLRともいい、記号βまたはλで表示するの2種類がある。信頼度更新処理は、行処理と列処理とからなり、行処理と列処理とを1回ずつ実行した単位のことを1イタレーションラウンド処理と呼び、復号処理はイタレーション処理を繰り返す反復処理により行われる。以上の説明のように、外部値αとは、LDPC復号処理のときの、チェックノードからビットノードへの確率情報であり、確率βとはビットノードからチェックノードへの確率情報であり、当業者にとり周知の用語である。半導体メモリ装置では、符号化データを記憶したメモリセルから、閾値判定情報が読み出される。閾値判定情報は、記憶されているデータが0か1のいずれかであることを示すハードビットHBと、ハードビットの確からしさを示す複数のソフトビットSBと、からなる。閾値判定情報は、予め作成されたLLRテーブルにより、LLRに変換され、イタレーション処理の初期LLRとなる。以下、図3A~図3Dに示すタナーグラフG2の一部を用いて、行処理および列処理について説明する。最初に、図3Aおよび図3Bを用いて、ビットノード処理列処理について説明する。あるビットノード、例えばビットノード3、に対応する入力された符号語ビットの初期信頼度であるLLR、をλ3とし、このビットノード3へのチェックノードからの確率を、αj、3とする。ここで、jはビットノード3に接続しているチェックノード番号を示す。そして、ビットノード3は、α1、3に対応するエッジのチェックノードすなわち、チェックノード1に対して、以下の式1で表される計算を行う。β3、1=λ3α2、3式1同様に、ノード番号jのチェックノードに対して、以下の式2で表される計算を行う。β3、j=λ3Σαk、3式2ここで、Σはビットノード3に接続しているチェックノードの中で、k=j以外の総和を意味する。以上の計算を全てのビットノードに対して行い、以下の式3で表されるβi、jを計算する。なお、ここで、符号長をN、ノード番号を、iとすると、i=1~Nである。また、Σはビットノードiに接続しているチェックノードの中で、k=j以外の総和を意味する。βi、j=λiΣαk、i式3次に、図3Cおよび図3Dを用いて、チェックノード処理行処理について説明する。あるチェックノード、例えばチェックノード1、へのメッセージである外部情報を、βk、1としたとき、このチェックノードはβ1、1に対応するエッジのビットノードであるビットノード1に対して以下の式4で表されるα1、1を計算する。α1、1=signΠβm、1×min|βm、1|式4ただし、kはこのチェックノード1に接続されているビットノード番号である。そして、mは2から3の中から選択される。ここで、signΠβm、1は、βm、1を、m=2から3、まで乗算した結果の符合1あるいは-1を意味する。また、|βm、1|は、βm、1の絶対値であり、minは複数の|βm、1|の中から最小値を選択する関数である。同様にして、α1、iについても、以下の式5を使って算出する。α1、i=signΠβm、1×min{|βm、1|}式5ただし、iはチェックノード1に接続しているビットノード番号であり、図1Bのタナーグラフの例では、1、2、3である。また、mはチェックノード1に接続したビットノードの中で、m=i、以外とする。以上の計算を全てのチェックノードに対して行い、αj、iを以下の式6を使って計算する。αj、i=signΠβm、j×min|βm、j|式6ただし、mはチェックノードjに接続したビットノードの中で、m=i、以外とする。そして、反復復号では、以上に示したビットノード処理とチェックノード処理とを1回ずつ実行した1イタレーション処理1ラウンド毎に、以下の式7によって、事後確率Pbiを求める。Pbi=λiΣαk、i式7ここで、i=1~Nであり、Nは符号長である。そして、Σはビットノードiに接続された全ての和である。この事後確率値一時推定語Pbを基にビット判定、すなわち、当該ビットが、0または1のいずれであるかが硬判定される。そして、この硬判定結果を使用して、LDPC符号のパリティチェックを行い、誤りないことが確認された時点で反復処理を終了する。ここで、メッセージ伝達アルゴリズムとして、サムプロダクトアルゴリズムまたはミニサムプロダクトアルゴリズム等を用いた、ビットノードおよびチェックノードにおける信頼度更新アルゴリズムでは、並列処理による復号処理を行うことができる。しかし、符号長の長いLDPC符号化データでは、全ての処理を並列で行う完全並列処理は、多数の演算回路を全て実装する必要があるため現実的ではない。これに対して、複数の単位行列以下ブロックともいう。を組み合わせて構成した検査行列を用いると、ブロックサイズpのビットノード個数pの演算回路により部分並列処理を行うことで回路規模を縮小することができる。図4Aに複数の単位行列を組み合わせて構成した検査行列H3を示す。検査行列H3は、1区画が5×5個の要素からなるブロックを横に6個、縦に3個並べて、縦15行、横30列となっている。そして、図4Bに示すように、検査行列H3の各ブロックBは、対角成分には1が並び、他は全て0となる単位行列を数値分だけシフト処理した正方行列以下、シフト行列である。なお、図4Aに示した検査行列H3は、ユーザーデータ用のブロックである符号化対象メッセージブロック部H3Aと、ユーザーデータから生成したパリティ用のパリティ用ブロック部H3Bとから構成されている。そして、図3Bに示すように、シフト値0は単位行列を示し、シフト値-1は0行列を示している。なお、0行列は実際の演算処理が不要なため、以下では除いて説明する。シフト処理によってあふれたビットはブロック内の最左列に挿入されている。検査行列H3を用いた復号処理ではシフト値を指定することにより必要なブロックの情報、すなわち、処理すべきノードの情報を得ることができる。なお、5×5のブロックからなる検査行列H3においては、シフト値は、復号処理に直接は関係のない、0行列を除くと、0、1、2、3、4の、5種類のいずれかである。図4Aに示したブロックサイズ5X5以下、ブロックサイズ5というの正方行列を組み合わせた検査行列H3を用いた場合には、演算部113に演算ユニットを5個設けることで、5個のチェックノードに対して部分並列処理を実行することができる。なお、部分並列処理を実行するためには、ビットノード単位での事前/事後確率βを求めるための変数以下、LMEM変数ともいうを格納するビットノード記憶部LMEM112と、チェックノード単位で外部値αを求めるための変数以下、TMEM変数ともいうを格納するチェックノード記憶部TMEM114が必要である。ビットノードは列方向のアドレス列アドレスで管理するのでLMEMは列アドレスで管理し、チェックノードは行方向のアドレス行アドレスで管理するのでTMEMは行アドレスで管理する。外部値α、確率βを計算する場合は、LMEMからリードしたLMEM変数とTMEMからリードしたTMEM変数が、演算回路にそれぞれ入力されて演算処理が実行される。複数の単位行列を組み合わせて構成した検査行列H3を用いて復号する場合、ローテイター113Aにより、TMEMからリードした複数のTMEM変数をシフト値に応じてローテイトすれば、検査行列H3の全体を記憶しておく必要はない。例えば、図5および図6に示すように、ブロックサイズ8の検査行列H4を用いた、TMEM114からリードした8個のTMEM変数の処理の場合には、メモリコントローラ103では、LMEM112と、TMEM126と、演算部113と、ローテイター113Aと、が使用される。演算部113は8個の演算回路ALU0~ALU8からなり、8個の処理を並列処理することができる。なお、ブロックサイズ8の検査行列H3を用いた場合のシフト値は、0~7の8種類である。図5Aおよび図6Aに示すように、シフト値が0のブロックB0場合は、ローテイター113Aによりローテイト値0のローテイト処理が行われ、同一アドレスの変数同士で演算が実行される。ただし、ローテイト値0のローテイト処理とはローテイトされないことである。列アドレス0のLMEM変数、行アドレス0のTMEM変数図5A破線表示列アドレス1のLMEM変数、行アドレス1のTMEM変数列アドレス2のLMEM変数、行アドレス2のTMEM変数列アドレス7のLMEM変数、行アドレス7のTMEM変数図5A破線表示これに対して、図5Bおよび図6Bに示すように、シフト値が1のブロックB1の場合は、ローテイター113Aによりローテイト値1のローテイト処理が行われ、以下のような変数同士で演算が実行される。すなわち、ローテイト値1のローテイト処理とは、それぞれの変数をひとつ下段に移動し、あふれた最下段の変数を最上段に挿入するシフト処理である。列アドレス0のLMEM変数、行アドレス7のTMEM変数図5B破線表示列アドレス1のLMEM変数、行アドレス0のTMEM変数図5B破線表示列アドレス2のLMEM変数、行アドレス1のTMEM変数列アドレス7のLMEM変数、行アドレス6のTMEM変数そして、図6Cに示すように、シフト値が7のブロックB7の場合は、ローテイター113Aによりローテイト値7のローテイト処理が行われ、以下のような変数同士で演算が実行される。すなわち、ローテイト値7のローテイト処理とは、ローテイト値1のローテイト処理を7回行う処理である。列アドレス0のLMEM変数、行アドレス1のTMEM変数列アドレス1のLMEM変数、行アドレス2のTMEM変数列アドレス2のLMEM変数、行アドレス3のTMEM変数列アドレス7のLMEM変数、行アドレス0のTMEM変数図7に、ブロックシフト値0~7毎の演算回路入力変数の組み合わせを示す。以上のように、ローテイター113Aは、LMEM112あるいはTMEM114からリードした変数を演算部113に入力する前にブロックのシフト値に応じたローテイト値にローテイトする。ブロックサイズ8の検査行列H3を用いたメモリコントローラ103の場合には、ローテイター113Aの最大ローテイト値はブロックサイズ-1の7になる。信頼度の量子化ビット数をuとすると、それぞれの変数のビット数はuになるので、ローテイター113Aの入出力データ幅は8×uビットになる。<第1実施形態>以下、本発明の第1実施形態のメモリコントローラ3、半導体メモリ装置、および復号方法について説明する。メモリコントローラ3は、低密度パリティ符号により符号化されたフレーム単位のデータを、単位行列からなるブロックと、単位行列の各行が順にシフトしている複数のブロックと、からなる検査行列をもとに、部分並列処理により復号を行う。図8に示すように、本実施形態の半導体メモリ装置であるメモリカード2はパソコンまたはデジタルカメラ等のホスト4から受信したデータを符号化データとして記憶し、記憶した符号化データを復号してホスト4に送信する。メモリカード2とホスト4とはメモリシステム1を構成している。メモリカード2は、半導体メモリ部以下、単にメモリ部ともいう。5と、メモリコントローラ3とを有する。メモリ部5はNAND型フラッシュメモリ部から構成されている。実施形態の半導体メモリ装置としては、ホスト4の内部に収納され、ホスト4の起動データ等を記憶する、いわゆるエンベデッドタイプであってもよく、または半導体ディスク:SSD等の形態であってもよい。あるいは半導体メモリ装置とホスト4とが、例えば携帯音楽プレーヤであるMP3プレーヤ等のメモリシステムを構成していてもよい。そして、メモリコントローラ3は、バス不図示を介して接続された、制御部であるCPUコア10と、LDCPデコーダ11と、ホストI/Fインターフェイス20と、データバッファであるバッファ21と、LDPCエンコーダ22と、セレクタ23と、データバッファであるバッファ24と、NANDI/Fインターフェイス25と、を有する。後述するように、第1のメモリ部であるバッファ24は、NAND型フラッシュメモリ部から読み出したデータの閾値判定情報と、復号中の確率情報と、を記憶する。LDCPデコーダ11は、ビットノード記憶部LMEM12と、演算部13と、チェックノード記憶部TMEM14と、復号データ格納メモリであるバッファ15と、LLR変換部16と、を有する。そして、演算部13は、ブロックサイズと同じp個の演算ユニットを有する。なお、メモリコントローラ3は、演算部13の機能の一部でもあるローテイター、CPUコア10の実行プログラムおよびアドレス変換デーブル等を記憶したROM、対数尤度比LLRテーブルを記憶したLLR記憶部、およびLDPCデコーダの一部である硬判定部等の図示しない構成要素も有している。LMEM12等は、SRAMまたはレジスタ等の半導体メモリからなる。メモリコントローラ3は、CPUコア10の制御のもと、ホストI/F14を介してホスト4とデータ送受信を、NANDI/F16を介してメモリ部5とデータ送受信を行う。またメモリコントローラ3は、メモリ部5のアドレス管理をCPUコア10で実行されるFWFirmWareで実現している。次に、メモリ部5へのデータの記憶処理および読み出し処理について簡単に説明する。図8に示すように、データの記憶処理時には、ホスト4から送信されたデータは、バッファ21に一時記憶された後、LDPCエンコーダ22によりLDPCパリティが生成される。そして、セレクタ23にてフレーム単位のデータにパリティが付与され、LDPC符号化データとして出力される。そして、NANDI/F25を介して、LDPC符号化データがメモリ部5に記憶される。一方、データ読み出し処理時には、ホスト4からのコマンドにより、メモリ部5の各メモリセルには所定の電圧が順次印加され、閾値判定情報が読み出される。閾値判定情報は、記憶されているビットデータが0か1のいずれかであることを示すハードビットHBと、ハードビットの確からしさを示す複数のソフトビットSBと、からなる。閾値判定情報をもとにLDPCデコーダ11で復号されたデータはホスト4に送信される。次に、図9および図10のフローチャートに従い、メモリコントローラ3による復号について詳細に説明する。なお、以下では説明を簡単にするため、記憶/読み出しの処理単位であるページサイズと、符号化/復号の処理単位であるLDPCフレーム以下フレームともいうサイズと、が同じ30ビットで、ブロックサイズpが5ビットという、極めて短い場合を例にする。また、検査行列は列ブロック数6、行ブロック数4とする。<ステップS10>閾値判定情報受信ホスト4からのコマンドにより、メモリ部5から読み出されたフレーム単位のデータの閾値判定情報がメモリコントローラ3に受信される。ここで、それぞれのビットの閾値判定情報は、ハードビットHBと、例えば3種類のソフトビットSB1、SB2、SB3と、からなる。なお、ソフトビットの種類はメモリシステムにより異なる。<ステップS11>第1のメモリ部への閾値判定情報記憶工程それぞれが4ビットの閾値判定情報HB、SB1、SB2、SB3がフレーム単位で、第1のメモリ部であるバッファ24に記憶される。言い換えれば、バッファ24はNAND型フラッシュメモリ部から読み出したデータの閾値判定情報を記憶する。フレームサイズが30ビットのため、バッファ24に記憶される閾値判定情報は120ビット4×30ビットである。後述するように、閾値判定情報およびLLRデータは、ビットアドレスにより区別可能にバッファ24に記憶されることが好ましい。このため、バッファ24には、4ビットの閾値判定情報を記憶するモジュールに加えて、1ビットのLLR付加ビットLBの記憶モジュールが準備されている。すなわち、バッファ24は、それぞれが30ビットの、HBモジュールと、SB1モジュールと、SB2モジュールと、SB3モジュールと、LBモジュールと、からなり、150ビットの記憶容量を有する。各モジュールで、同一フレームのデータを記憶するビットアドレスは共通とする<ステップS12>LLR変換工程バッファ24に記憶されたフレーム単位の閾値判定情報が、LLR変換部16により、HBの確からしさを示す対数尤度比LLRデータに、変換される。LLR変換部16はメモリセルの閾値電圧分布に基づき予め作成されたLLRテーブルをもとに、所定の量子化ビット数Qにて変換処理を行う。量子化ビット数Qが5の場合には、LLR変換部16は、1ビットのHBを5ビットのLLRデータに変換する。なお、LLRデータの最初の1ビットがHBである。フレームサイズが30ビット、量子化ビット数Qが5の場合、フレーム単位のLLRデータサイズは150ビットとなる。<ステップS13>第2のメモリ部へのLLRデータ転送書き戻し工程LLR変換部16が変換したフレーム単位の150ビットのLLRデータは、バッファ24に転送され記憶される。すなわち、バッファ24から閾値判定情報が消去され、替わってLLRデータが記憶される。すでに説明したように、LLRデータは、それぞれの変換前の閾値判定情報が記憶されていた領域アドレスに記憶されることが好ましい。すなわち、それぞれのLLRデータは、それぞれの変換前の閾値判定情報と同一ビットアドレスに記憶することが好ましい。LMEM12とバッファ24との共有化データ管理を、複雑なデータフォーマット変換を行うことなく実現するためである。同一アドレスに閾値判定情報/LLRデータを記憶するためには、量子化ビット数Qと閾値判定情報ビット数とが同じビット長ビット数である必要がある。しかし本実施形態のように、量子化ビット数が5で、閾値判定情報ビット数が4ビットのように、両者が異なっていても、バッファ24に、量子化ビット数-閾値判定情報ビット長のLBモジュールを設定しておくことにより、同一アドレスに記憶することができる。本実施形態のバッファ24では、5ビットのLLRデータの各ビットは、それぞれ、HBモジュールと、SB1モジュールと、SB2モジュールと、SB3モジュールと、LBモジュールと、に記憶される。<ステップS14>イタレーション回数初期化イタレーション回数が0に初期化される。<ステップS15>LDPC復号サブルーチン処理図10に示すステップS30~ステップS43のLDPC復号サブルーチン処理が行われる。<ステップS30、ステップS31>繰り返し処理のための初期化処理である。<ステップS32>処理ブロックのLLRをLMEMに転送ブロック単位でイタレーション処理を行うために、CPUコア10の制御により、検査行列のブロック単位p=5ビットのLLRデータ5×5=25ビットがバッファ24から、第2のメモリ部であるLMEM12に送信され、LMEM12に記憶される。すなわち、LMEM12の容量は25ビットあればよい。<ステップS33>行処理行処理がp個の演算回路により並列処理される。<ステップS34~S35>繰り返し処理のためのカウント工程である。<ステップS36>列処理列処理がp個の演算回路により並列処理される。<ステップS37>更新βをLMEMからバッファ24に転送イタレーション処理により更新されLMEM12に記憶された確率情報事後確率、LLRβは、CPUコア10の制御のもと、再びバッファ24に転送される。すなわち、制御部であるCPUコア10は、イタレーション単位のイタレーション処理が完了する度に、第2のメモリ部であるLMEM12に記憶される確率情報を、第1のメモリ部であるバッファ24に転送する。更新された確率情報βは、そのブロックのLLRデータが記憶されていた領域、すなわち、同一アドレスに記憶されることが好ましい。言い換えれば、制御部であるCPUコア10は、一のイタレーション単位のイタレーション処理により算出された確率情報を、第1のメモリ部であるバッファ24の、一のイタレーション単位の閾値判定情報が記憶されていたアドレスに転送することが好ましい。アドレスによるデータ管理が容易なためである。<ステップS38~ステップS41>繰り返し処理のためのカウント工程である。<ステップS42>一時推定語算出工程全ブロックのイタレーション処理が完了するS23:Yesと、それぞれの更新された確率情報事後確率βに基づき、LDPCデコーダ11の硬判定部において一時推定語がブロック毎に並列処理で計算される。<ステップS43>パリティチェック工程一時推定語に基づき、パリティチェックがブロック毎に並列処理で行われる。以上で、ステップS30~ステップS43のLDPC復号サブルーチン処理が完了する。ここで、図4の検査行列H2を用いる場合を例に、LDPC復号サブルーチン処理ステップS30~S43の処理内容について詳細に説明する。LDPC復号サブルーチン処理では、イタレーション制御変数X、Y、Zに応じて以下の処理が行われるX=0:行1の処理を実行X=1:行2の処理を実行X=2:行3の処理を実行Z=0:列Aの処理を実行Z=1:列Bの処理を実行Z=2:列Cの処理を実行Z=3:列Dの処理を実行Z=4:列Eの処理を実行Z=5:列Fの処理を実行Y=0:列Aの処理を実行Y=1:列Bの処理を実行Y=2:列Cの処理を実行Y=3:列Dの処理を実行Y=4:列Eの処理を実行Y=5:列Fの処理を実行<X=0での処理>1行処理1m1~m5の確率情報をLMEMに転送。ブロックA、1の行処理p個並列処理を実行。2m6~m10の確率情報をLMEMに転送。ブロックB、1の行処理p個並列処理を実行。3m11~m15の確率情報をLMEMに転送。ブロックC、1の行処理p個並列処理を実行。4p1~p5の確率情報をLMEMに転送。ブロックD、1の行処理p個並列処理を実行。5p6~p10の確率情報をLMEMに転送。ブロックE、1の行処理p個並列処理を実行。6p11~p15の確率情報をLMEMに転送。ブロックF、1の行処理p個並列処理を実行。以上の処理でp個5個のαを求め、これをTMEMに記憶する。2列処理7ブロックA、1の列処理p個並列処理を実行。8ブロックB、1の列処理p個並列処理を実行。9ブロックC、1の列処理p個並列処理を実行。10ブロックD、1の列処理p個並列処理を実行。11ブロックE、1の列処理p個並列処理を実行。12ブロックF、1の列処理p個並列処理を実行。<X=1での処理>1行処理1m1~m5の確率情報をLMEMに転送。ブロックA、2の行処理p個並列処理を実行。2m6~m10の確率情報をLMEMに転送。ブロックB、2の行処理p個並列処理を実行。3m11~m15の確率情報をLMEMに転送。ブロックC、2の行処理p個並列処理を実行。4p1~p5の確率情報をLMEMに転送。ブロックD、2の行処理p個並列処理を実行。5p6~p10の確率情報をLMEMに転送。ブロックE、2の行処理p個並列処理を実行。6p11~p15の確率情報をLMEMに転送。ブロックF、2の行処理p個並列処理を実行。以上の処理でp個5個のαを求め、これをTMEMに記憶する。2列処理7ブロックA、2の列処理p個並列処理を実行。8ブロックB、2の列処理p個並列処理を実行。9ブロックC、2の列処理p個並列処理を実行。10ブロックD、2の列処理p個並列処理を実行。11ブロックE、2の列処理p個並列処理を実行。12ブロックF、2の列処理p個並列処理を実行。<X=2での処理>1行処理1m1~m5の確率情報をLMEMに転送。ブロックA、3の行処理p個並列処理を実行。2m6~m10の確率情報をLMEMに転送。ブロックB、3の行処理p個並列処理を実行。3m11~m15の確率情報をLMEMに転送。ブロックC、3の行処理p個並列処理を実行。4p1~p5の確率情報をLMEMに転送。ブロックD、3の行処理p個並列処理を実行。5p6~p10の確率情報をLMEMに転送。ブロックE、3の行処理p個並列処理を実行。6p11~p15の確率情報をLMEMに転送。ブロックF、3の行処理p個並列処理を実行。以上の処理でp個5個のαを求め、これをTMEMに記憶する。2列処理7ブロックA、3の列処理p個並列処理を実行。8ブロックB、3の列処理p個並列処理を実行。9ブロックC、3の列処理p個並列処理を実行。10ブロックD、3の列処理p個並列処理を実行。11ブロックE、3の列処理p個並列処理を実行。12ブロックF、3の列処理p個並列処理を実行。LDPC復号のサブルーチンでは、例えば、以上の説明の処理が行われる。<ステップS16>パリティチェックOKパリティチェックがOKYesの場合には、ステップS17からの処理が行われる。パリティチェックがNGNoの場合には、ステップS18からの処理が行われる。<ステップS18、S19>イタレーション回数チェック所定の最大回数のイタレーション処理となるまで、更新された確率情報によるS15からの処理が繰り返し行われる。<ステップS20>エラーレスポンス信号送信最大回数のイタレーション処理を行っても復号できないパリティチェックNG場合には、コントローラ3はホスト4にエラーレスポンス信号を送信する。なお、イタレーション処理の繰り返し限度は、回数ではなく、時間で管理してもよい。または、メモリコントローラ3が、LLR記憶部に複数のLLRテーブルを記憶している場合には、LLR変換部16が別のLLRテーブルにより閾値判定情報を再変換し、新たなLLRデータを用いてイタレーション処理を行うようにしてもよい。なお、この場合は、メモリ部5から再度、閾値判定情報を読み出してバッファ24に記憶する必要がある。このため、復号時間が長くなるが、LLR再変換の発生頻度が低ければ、実用に耐えうるスループットを維持可能である。<ステップS17>復号データ送信工程パリティチェックがOKの場合S16:Yesには、復号データがバッファ21に一時記憶された後、HOSTI/F20を介して、ホスト4に送信される。<比較>ここで、比較のため、単純な制御のメモリコントローラの場合について説明する。比較例のメモリコントローラでは、例えば、バッファ24に記憶された閾値判定情報をもとに、LLR変換部16が変換した150ビットのLLRデータが、LMEM12に記憶される。このため、LMEMの容量は150ビット必要である。すなわち、LMEMの容量はフレームサイズ×量子化ビット数である。特に、符号長が長くなるに従い、ビットノードが増えるため、各ビットノードのLLRデータを記憶するLMEMの容量が増大し、LDPCデコーダおよびメモリコントローラの回路規模が増大する。一方、バッファ24は復号のときには使用されない状態である。これに対して、以上の説明のように、メモリカード2のメモリコントローラ3では、LMEM12のサイズは25ビットブロックサイズ5×量子化ビット数5でよい。これは、LDPCデコーダ11の機能とは別の機能として配設されているバッファ24を、復号のときに活用するためである。すなわち、メモリカード2のメモリコントローラ3は、復号中にアイドリング待機状態になっているバッファ24で、LMEN12機能の一部を代用することで、フレームサイズ×量子化ビット数の容量のLMEMを有する場合と比べて、メモリコントローラのトータルのメモリ容量を減少している。メモリコントローラ3では、比較例のメモリコントローラと比べると、バッファ24へのアクセス処理が増えている。しかし、メモリコントローラ3では、ブロック単位のパイプライン処理を実行しているため、スループットは比較例のメモリコントローラと殆ど変わらない。以下、本実施形態のメモリコントローラ3と、比較例のメモリコントローラと、で実装する必要のあるバッファ容量を比較する。なお、量子化ビット数Q=5ビット、フレームサイズL=ページサイズ=4096バイト、SBの種類=S-1=4種類、ブロックサイズB=16バイトとする。以下の表1に示すように、比較例のメモリコントローラでは合計36864バイトの容量が必要なのに対して、実施形態のメモリコントローラ3では合計20560バイトの容量である。すなわち、容量比は、20560/36864=0.56であり、実施形態のメモリコントローラ3ではメモリバッファ容量が約44縮小できる。以上の説明のように、実施形態のメモリコントローラ3およびメモリコントローラ3を具備するメモリカード2は、実装メモリ容量が小さく回路規模が小さい。このため、メモリコントローラ3およびメモリカード2は、消費電力も小さく省エネルギ性に優れている。また、本実施形態の復号方法は、消費電力が小さく省エネルギ性に優れており効率がよい。なお、メモリカード2がホスト4とともに構成するメモリシステム1も、メモリカード2の実装メモリ容量が小さく回路規模が小さいため、消費電力が小さく省エネルギ性に優れている。<第2実施形態>以下、第2実施形態のメモリカード2Aおよびメモリコントローラ3Aについて説明する。なおメモリカード2Aおよびメモリコントローラ3Aは、第1実施形態のメモリカード2およびメモリコントローラ3と類似しているため、同じ構成要素には同じ符号を付し説明は省略する。第1実施形態では、説明を簡単にするために、ブロックサイズp等が極端に小さい例p=5等について説明したが、製品では、例えば、ブロックサイズpは、128~256規模の値になり、非常に大きい。演算部13には、p個の演算回路を、設置する必要がある。これに対して、メモリシステム1Aのメモリコントローラ3Aでは、イタレーション単位、すなわち、並列処理する単位が、ブロックサイズpを更にD分割Dは2以上自然数した分割ブロック単位である。すなわち、メモリカード2Aおよびメモリコントローラ3Aでは、回路規模を大きくしないために、演算部13Aの演算ユニット数を、1/Dに削減して並列度を意図的に下げている。すなわち、図9に示したステップS14において、CPUコア10の制御によりLLRデータが、サイズがp/Dの分割ブロック単位に分割される。なお。ステップS15~S17の処理は分割ブロック単位で行ってもよいし、ブロック単位で行ってもよい。また、演算ユニット数だけでなく、LMEM12の容量も、ブロックサイズ処理の場合の1/Dに削減することができる。なお、Dの上限はフレームサイズおよび処理速度等との兼ね合いで適宜、決定されるが、例えば16である。メモリカード2Aおよびメモリコントローラ3Aは、メモリカード2およびメモリコントローラ3が有する効果を有し、更に回路規模を小型化できる。また本実施形態の復号方法は第1実施形態の復号方法が有する効果を有し、更に効率的である。<第3実施形態>以下、第3実施形態のメモリカード2Bおよびメモリコントローラ3Bについて説明する。なおメモリカード2Bおよびメモリコントローラ3Bは、第1実施形態のメモリカード2およびメモリコントローラ3と類似しているため、同じ構成要素には同じ符号を付し説明は省略する。第1実施形態では、ステップS10において、ホスト4からのコマンドにより、メモリ部5からハードビットHBと3種類のソフトビットSB1、SB2、SB3と、からなる閾値判定情報を読み出して復号を行った。図11に示すように、例えば、1個のメモリセルに3ビットのデータを記憶する場合に、3種類のHBと3種類のSBとを読み出すためには、V00~V34の35種類の電圧を、それぞれのメモリセルに印加する必要がある。これに対して、本実施形態のメモリシステム1Bのメモリコントローラ3Bでは、最初はHBのみからなる閾値判定情報を読み出して復号を行い、復号できなかった場合に、SBを読み出して復号を行う。以下、図12のフローチャートに従い説明する。<ステップS50>HB読み出しメモリ部5からフレーム単位のデータのHBのみからなる閾値判定情報がメモリコントローラ3に受信される。各メモリセルに読み出しのために印加される電圧は、V32、V27、V22、V17、V12、V07、V02の7種類であり、SB読み出しの場合の35種類に比べて少ない。このため、HBのみの読み出しは、SB読み出しの場合に比べて高速で処理が可能である。<ステップS51~ステップS60>第1実施形態のステップS11~ステップS19と類似した処理である。ただし、ステップS52におけるLLR変換処理は、HBのみに基づくLLR変換処理である。すなわち、HBは、基本的には記憶されているデータが0か1のいずれかであることを示しているだけである。しかし、それぞれのHBは読み出し電圧が異なるため、読み出し電圧により確からしさが異なる。例えば、図11に示す、Er状態で記憶されている読み出し電圧が最も低いHB111およびG状態で記憶されている読み出し電圧が最も高いHB011は、他のHBに比べて信頼度が高い。HBのみに基づくLLR変換のためのHB-LLRテーブルは、SBに基づくLLR変換のためのLLRテーブルとは別に、予め準備される。HBのみに基づくLLR変換は、SBを用いたLLR変換に比べると、かなり粗い変換となる。<ステップS61>HBのみから変換されたLLRを用いた復号を、イタレーション回数HITRが所定の最大回数だけ行っても復号できなかった場合S60:Yesには、メモリ部5からフレーム単位のデータのHBおよびSBからなる閾値判定情報がメモリコントローラ3に受信される。なお、HBはステップS50において読み出されているので、SBのみを読み出しても良い。そして、図11に示したLLRテーブルを用いてSB-LLR変換処理が行われる。<ステップS62~ステップS70、S55>第1実施形態のステップS11~ステップS20、S17と、ほぼ同じ処理である。そして、メモリコントローラ3Bおよびメモリコントローラ3Bを有するメモリカード2Bは、第1実施形態のメモリカード2等が有する効果を有し、更にHBのみによる復号が可能であるため復号速度が速い。なお、以上の説明では、最初にHBのみを読み出して、HBのみからLLRを算出してLDPC復号を行い、復号できなかった場合にはHBと3種類のSBとを読み出してLDPC復号を行う場合について説明した。これに対して、HBのみを読み出してLDPC復号を行い、復号できなかった場合にはHBと1種類のSBとを読み出してLDPC復号を行い、復号できなかった場合にはHBと2種類のSBとを読み出してLDPC復号を行い、これでも復号できなかった場合にはHBと3種類のSBとを読み出してLDPC復号を行うようにしてもよい。上記方式の変形例としては、最初にHBと1種類のSBとを読み出し、次にHBと3種類のSBとを読み出しする等、種々の方式がある。すなわち、本実施形態の復号方法は、第1実施形態の復号方法であって、更に以下の通りである。低密度パリティ符号により符号化されたフレーム単位のデータの復号方法は、NAND型フラッシュメモリ部から前記データの閾値判定情報として、少なくともハードビット情報を読み出す第1の読み出し工程と、第1の読み出し工程で読み出した第1の閾値判定情報を第1の対数尤度比に変換する第1のLLR変換工程と、第1のLLR変換工程で変換された第1の対数尤度比を用いて、軟判定復号を行う第1の復号工程と、第1の復号工程で復号できなかった場合に、前記NAND型フラッシュメモリ部から前記データの第2の閾値判定情報として、第1の読み出し工程よりも多くのソフトビット情報を読み出す第2の読み出し工程と、第2の読み出し工程で読み出した第2の閾値判定情報を第2の対数尤度比に変換する第2のLLR変換工程と、第2のLLR変換工程で変換された第2の対数尤度比を用いて、軟判定復号を行う第2の復号工程と、を具備する。<補足説明>図9に示したステップS12においてフレーム単位でLLR変換処理を行う方式逐次方式について説明したが、ブロック単位または分割ブロック単位でLLR変換処理を行う方法一括方式で行ってもよい。この場合には、バッファ24から読み出された、復号対象のフレームの一部ブロック単位または分割ブロック単のデータが、LLR変換部16でLLRデータに変換され、LMEM12に記憶される。LMEM12に記憶されたLLRデータを使って、演算部13で復号が行われる。LMEM12に記憶されたLLRデータによる復号が完了したら、次の処理に必要なデータをバッファ24から読み出し、以下、最初のデータと同様に処理する。この処理を繰り返して、1フレームデータの復号を完了する。バッファ24から読み出すデータサイズは、演算部13で並列処理するデータサイズと関連する。例えば、ブロック単位で処理する場合は、1ブロック分のデータサイズである。このため、一括方式でも、逐次方式と同様に、比較例の1フレーム分のLLRデータを格納するLMEMより、はるかに容量の小さいLMEMで、同様の処理を実行することが可能である。なお、以上では、本発明の実施形態を説明したが、この実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。実施形態は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。