(57)【特許請求の範囲】
【請求項１】
低密度パリティ検査符号により符号化された符号化データを記憶する半導体メモリ部と、
前記符号化データをサムプロダクトアルゴリズムを用い、復号する復号部と、を具備する半導体メモリ装置であって、
前記復号部が、検査行列の行毎に、行処理演算と列処理演算とからなるイタレーション処理を繰り返し実行することで事後尤度比を更新するときに、列処理演算において事後尤度比の絶対値が閾値以上の場合、列要素尤度比には事後尤度比をそのまま使用し、事後尤度更新処理において、列要素尤度比の絶対値が前記閾値以上の場合、事後尤度比には列要素尤度比をそのまま使用し、
前記イタレーション処理を所定の第１のサイクル回数、行っても復号できない場合、または、シンドロームエラーの数が所定の第１のシンドロームエラー数よりも小さくなった場合、少なくとも一部の事後尤度比の絶対値を縮小するとともに、すべての事前尤度比を「０」にリセットし、
所定の第２のサイクル回数のイタレーション処理までは第１のＭｉｎ−Ｓｕｍ係数を用いて、前記第２のサイクル回数を超えるイタレーション処理では前記第１のＭｉｎ−Ｓｕｍ係数より大きい第２のＭｉｎ−Ｓｕｍ係数を用いることを特徴とする。
【請求項２】
低密度パリティ検査符号により符号化された符号化データを記憶する半導体メモリ部と、
前記符号化データをサムプロダクトアルゴリズムを用い、復号する復号部と、を具備する半導体メモリ装置であって、
前記復号部が、検査行列の行毎に、行処理演算と列処理演算とからなるイタレーション処理を繰り返し実行することで事後尤度比を更新するときに、列処理演算において事後尤度比の絶対値が閾値以上の場合、列要素尤度比には事後尤度比をそのまま使用し、事後尤度更新処理において、列要素尤度比の絶対値が前記閾値以上の場合、事後尤度比には列要素尤度比をそのまま使用するとともに、
前記イタレーション処理を所定の第１のサイクル回数、行っても復号できない場合、または、シンドロームエラーの数が所定の第１のシンドロームエラー数よりも小さくなった場合、少なくとも一部の事後尤度比の絶対値を縮小するとともに、すべての事前尤度比を「０」にリセットすることを特徴とする半導体メモリ装置。
【請求項３】
低密度パリティ検査符号により符号化された符号化データを記憶する半導体メモリ部と、
前記符号化データをサムプロダクトアルゴリズムを用い、復号する復号部と、を具備する半導体メモリ装置であって、
前記復号部が、検査行列の行毎に、行処理演算と列処理演算とからなるイタレーション処理を繰り返し実行することで事後尤度比を更新するときに、列処理演算において事後尤度比の絶対値が閾値以上の場合、列要素尤度比には事後尤度比をそのまま使用し、事後尤度更新処理において、列要素尤度比の絶対値が前記閾値以上の場合、事後尤度比には列要素尤度比をそのまま使用するとともに、
イタレーション処理を所定の第１のサイクル回数、行っても復号できない場合、または、シンドロームエラーの数が所定の第１のシンドロームエラー数よりも小さくなった場合、少なくとも一部の事後尤度比の絶対値を所定値とするとともに、すべての事前尤度比を「０」にリセットすることを特徴とする半導体メモリ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、低密度パリティ符号を用いる誤り検出訂正部を具備する半導体メモリ装置および低密度パリティ符号により符号化されたデータの復号方法に関する。
【背景技術】
【０００２】
半導体メモリ装置の高密度記録化等のために、デジタルデータの誤り訂正符号に関する開発が行われている。誤り訂正符号は、代数系の符号と確率に基づく反復計算による符号とに大別できる。そして、後者に属する低密度パリティ符号（Ｌｏw Density Parity Check codes、以下、「ＬＤＰＣ符号」という）はシャノン限界に迫る、優れた性能が報告されている。
【０００３】
ＬＤＰＣ符号は、非常に疎な検査行列、すなわち、行列内の非零要素数が少ない検査行列により定義される線形符号であり、タナーグラフで示すことができる。そして、復号では、タナーグラフ上で接続された符号語の各ビットに対応したビットノードと各パリティ検査式に対応したチェックノードとの間で行処理および列処理により局所的に推論した結果をやりとりする。そして、行処理および列処理からなるイタレーション処理を、何サイクルも繰り返し実行することで、誤り訂正を行っている。
【０００４】
ＬＤＰＣ符号化データの復号は、サムプロダクト（Sum-Product）アルゴリズムを用いることにより、比較的少ない回路規模で並列処理を行うことができる。そして、サムプロダクトアルゴリズムによる復号方法は、行処理と列処理が、それぞれ一括して実行される一括型方法と、行処理と列処理とが、行インデックス毎に逐次的に実行される逐次型方法と、に大別することができる。逐次型復号方法は、一括型復号方法よりも、収束速度が速く、またメモリ使用量が少ないことが知られている。
【０００５】
また、Sum-Productアルゴリズムにおける検査行列の行方向に処理演算を行う行処理演算は、非線形関数の計算を行うため特に演算量が大きいこのため、検査行列における各行の各々において、「１」の要素毎に、当該要素を除く他の「１」の要素に対応する列処理演算データのうち最小値を、当該「１」の要素に対する行処理演算データとして求めるミニサム（Ｍｉn-Ｓum）アルゴリズムを用いた復号が用いられる。
【０００６】
ここで、後述するように、逐次型の復号方法は、量子化ビット数が少ない場合には、クリッピング誤差の影響により復号効率がよいとはいえない場合があった。このため、逐次型復号法を用いる半導体メモリ装置は復号効率がよいとはいえない場合があった。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００９−１００２２２号公報
【非特許文献】
【０００８】
【非特許文献１】E. Sharon, S. Litsyn, and J. Goldberger, “An efficient message-passing schedule for LDPC decoding,” in Electrical and Electronics Engineers in Israel, 2004. Proceedings. 2004 23rd IEEE Convention of, pp. 223-226, sept. 2004.
【発明の概要】
【発明が解決しようとする課題】
【０００９】
本発明の実施形態は、ＬＤＰＣ符号化データの逐次型復号法による復号効率がよい半導体メモリ装置およびＬＤＰＣ符号化データの復号効率がよい逐次型の復号方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
また別の実施形態の復号方法は、低密度パリティ検査符号により符号化された符号化データの、サムプロダクトアルゴリズムを用いた逐次法による復号方法であって、列処理演算において事後尤度比の絶対値が閾値以上の場合、列要素尤度比には事後尤度比をそのまま使用し、事後尤度更新処理において、列要素尤度比の絶対値が前記閾値以上の場合、事後尤度比には列要素尤度比をそのまま使用する。
【発明の効果】
【００１２】
本発明の実施形態によれば、復号効率がよい半導体メモリ装置および復号効率がよい復号方法を提供することができる。
【図面の簡単な説明】
【００１３】
【図１】実施形態の半導体メモリ装置の構成図である。
【図２】第１実施形態の半導体メモリ装置の復号部の構成図である。
【図３】４行６列（Ｍ＝４、Ｎ＝６）の検査行列Ｈである。
【図４】第１実施形態の半導体メモリ装置のスケジューラの構成図である。
【図５】第１実施形態の復号方法の処理の流れを説明するためのフローチャートである。
【図６】第１実施形態の復号方法の処理の流れを説明するためのフローチャートである。
【図７】第２実施形態の半導体メモリ装置の復号部の構成図である。
【図８】第２実施形態の半導体メモリ装置のスケジューラの構成図である。
【図９】第２実施形態の復号方法の処理の流れを説明するためのフローチャートである。
【図１０】第３実施形態の半導体メモリ装置のスケジューラの構成図である。
【発明を実施するための形態】
【００１４】
＜第１実施形態＞
最初に、図１を用いて本発明の第１実施形態の半導体メモリ装置１の構成を説明する。
半導体メモリ装置１は、例えば、パソコンまたはデジタルカメラ等のホスト４から受信したデータを記憶し、記憶したデータをホスト４に送信するメモリカード等、または、ホスト４の内部に格納され、ホスト４の起動データ等を記憶するＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記憶装置である。
【００１５】
図１に示すように、半導体メモリ装置１は、半導体メモリ部３と、メモリコントローラ２と、から構成されている。半導体メモリ部３は、ＮＡＮＤ型フラッシュメモリから構成されており、単位セルである複数のメモリセルを有する。そして、メモリコントローラ２は、バス１２を介して他の機能部と接続されているＣＰＵコア１１を用いて、ホスト  Ｉ／Ｆ（インターフェイス）１４を介してホスト４とのデータ送受信を、ＮＡＮＤ  Ｉ／Ｆ（インターフェイス）１６を介して半導体メモリ部３とのデータ送受信を行う。またメモリコントローラ２は、半導体メモリ部３のアドレス管理をＣＰＵコア１１で実行されるＦＷ（Ｆｉｒｍ  Ｗａｒｅ）で実現している。また、ホスト４からのコマンド入力に応じた半導体メモリ装置１全体の制御もＦＷで実行される。ＲＯＭ１０には、半導体メモリ装置１の制御プログラム等が格納されており、ＲＡＭ１３には、アドレス管理で必要となるアドレス変換デーブル等が記憶される。
【００１６】
メモリコントローラ２の誤り検出訂正部（ＥＣＣ部）１５は、データ記憶時に誤り訂正符号を生成し付与し符号化データを出力する符号化部１７と、データ読み出し時に、読み出された符号化データを復号し復号データを出力する復号部１８と、を有する。
【００１７】
ＥＣＣ部１５は、軟判定復号する誤り訂正符号であるＬＤＰＣ符号を用いる。後に詳述するが、ＬＤＰＣ符号により符号化されたデータの復号においては、最初に入力された、それぞれのビットデータの確からしさを示す尤度比が算出される。そして検査行列をもとに行処理および列処理からなるイタレーション処理を繰り返すことで尤度比を更新することにより誤り訂正処理が行われる。
【００１８】
図２に示すように、復号部１８は、硬判定部２１と、ＬＬＲメモリ２２と、検査行列保持部２４と、尤度比更新処理部であるＬＬＲ更新処理部２５と、スケジューラ２６と、中間メモリ２７と、を有する。
【００１９】
復号部１８は、前段の信号処理部（図示しない）から符号化データ（例えば、データフレーム）の入力尤度比Ｆｎが入力され、復号を行う。なお、復号部１８は、行処理と列処理とが、行インデックス毎に逐次的に実行される逐次型復号を行う。
【００２０】
図示しない前段の信号処理から入力される受信語データは、符号語のビット数と同数の要素からなり、各要素はそれぞれ対応するビットデータの対数尤度比（ＬＬＲ：Ｌｏｇ  Ｌｉｋｅｌｉｈｏｏｄ  Ｒａｔｉｏ、以下、単に「尤度比」ともいう。）を表す。ここで、対数尤度比とは、（式１）に示されるように、データビットが「１」である確率Ｐ（ｘ＝１）に対する、データビットが「０」である確率Ｐ（ｘ＝０）の比の対数値（自然対数）である。
【００２１】
（式１）
【数１】
0005631846.tif 000002
【００２２】
ＬＬＲメモリ２２は、受信語データ（入力尤度比）Ｆｎを記憶し、これを更新しながら復号完了まで出力尤度比（事後尤度比）ｑｎとして保持する。すなわち、入力尤度比Ｆｎは、最初のイタレーション処理により事後尤度比ｑｎに更新され、事後尤度比ｑｎはイタレーション処理毎に新しい事後尤度比ｑｎに更新されながらＬＬＲメモリ２２に保持される。
【００２３】
検査行列保持部２４は、Ｍ行Ｎ列の検査行列Ｈの情報を保持している。検査行列Ｈは、符号化部１７と復号部１８とで共通である。検査行列Ｈの情報は、ＬＬＲ更新処理部２５およびスケジューラ２６によって必要に応じて読み出される。
【００２４】
図３に、４行６列（Ｍ＝４、Ｎ＝６）の検査行列Ｈを例示する。検査行列Ｈによって定義される符号化データの符号長は６ビットであり、パリティ長は４ビットである。検査行列Ｈの第ｍ行（ｍはＭ以下の整数）に含まれる「１」の数は第ｍ行の行重みと呼ばれる。また、検査行列Ｈの第ｎ列（ｎはＮ以下の整数）に含まれる「１」の数は第ｎ列の列重みと呼ばれる。
【００２５】
また、第ｍ行目に含まれる「１」の列位置を示す列インデックスの集合はＮ（ｍ）、第ｎ列目に含まれる「１」の行位置を示す行インデックスの集合はＭ（ｎ）と呼ばれる。図２の例であれば、Ｎ（２）＝｛１，２，５｝、Ｍ（３）＝｛１，４｝である。
【００２６】
ＬＬＲ更新処理部２５は、ＬＬＲメモリ２２から入力される出力尤度比（事後尤度比）ｑｎと、中間メモリ２７から入力される行処理演算データである行要素尤度比（事前尤度比）
【数２】
0005631846.tif 000003
と、を用いてスケジューラ２６から通知される行インデックスｍに対して、行処理および列処理を行う。
【００２７】
行処理はシンドローム値（信頼度係数）演算からなる。列処理は列処理演算および更新処理からなる。ＬＬＲ更新処理部２５は、行要素尤度比（事前尤度比）を中間メモリ２７へ書き込み、出力尤度比（事後尤度比）ｑｎをＬＬＲメモリ２２へ書き込む。また、ＬＬＲ更新処理部２５は、行処理で算出したシンドローム値および行インデックスをスケジューラ２６に通知する。列要素尤度比ｑｍｎ（列処理演算データ）については、例えばＬＬＲ更新処理部２５の内部で保持する。つまり、ＬＬＲ更新処理部２５は、書き込み要求を受けて、列要素尤度比ｑｍｎ（列処理演算データ）を行番号および列番号毎に記憶する列処理演算データ記憶手段を含んでもよい。
【００２８】
以下、行インデックスｍに対して行われる、Ｍｉｎ−Ｓｕｍアルゴリズムを用いる行処理演算および列処理演算について、式を用いて説明する。
【００２９】
＜列処理演算＞
逐次型復号法では、（式２）のように、出力尤度比（２サイクル目からは「事後尤度比」）ｑｎから行要素尤度比（事前尤度比）を差し引くことで列要素尤度比ｑｍｎが算出される。
【００３０】
（式２）
【数３】
0005631846.tif 000004
【００３１】
ここで、量子化ビット数が少ない場合には、出力尤度比（事後尤度比）ｑｎは、処理されるとき量子化ビット幅でクリッピングされ、絶対値が本来の値よりも小さくなる。クリッピングされた出力尤度比（事後尤度比）ｑｎから、行要素尤度比（事前尤度比）が差し引いて算出された列要素尤度比ｑｍｎには、クリッピング誤差が生じる。そして、逐次型復号法は一括型復号法に比べて、クリッピング誤差により誤り率特性が劣化しやすい。
【００３２】
ここで、事後尤度比ｑｎの絶対値が、十分大きいことは、その信頼性が高いことを意味している。そして、発明者は、事後尤度比ｑｎの絶対値が、所定の大きな閾値ｔｈｒ以上の場合には、更新しない方が、更新するよりも復号効率がよいことを見いだした。なお、閾値ｔｈｒは計算機シミュレーションなどの数値実験により予め算出される。
【００３３】
すなわち、半導体メモリ装置１では、事後尤度比ｑｎの絶対値が閾値未満ｔｈｒのときは（式２）に示す列処理演算を行う。一方、事後尤度比ｑｎの絶対値が閾値ｔｈｒ以上の場合、（式３）のように列要素尤度比ｑｍｎには事後尤度比ｑｎをそのまま使用する。
【００３４】
（式２）
【数４】
0005631846.tif 000005
【００３５】
（式３）
【数５】
0005631846.tif 000006
【００３６】
なお、ｉは、イタレーション処理のサイクル回数（繰り返し回数）を表し、復号開始時（ｉ＝１）には、行要素尤度比（事前尤度比）＝０であるため、列要素尤度比ｑｍｎ＝出力尤度比（事後尤度比）ｑｎ＝入力尤度比Ｆｎである。
【００３７】
＜行処理演算＞
行処理演算では、シンドローム値
【数６】
0005631846.tif 000007
と、行要素尤度比（事前尤度比）
【数７】
0005631846.tif 000008
とが（式４）および（式５）により算出される。
【００３８】
（式４）
【数８】
0005631846.tif 000009
【００３９】
（式５）
【数９】
0005631846.tif 000010
【００４０】
なお、Ｎ（ｍ）は行インデックスｍのパリティ検査式において、「１」の値を持つ列インデックスの集合Ｎ（ｍ）を表す。Ｎ（ｍ）∈ｎは集合Ｎ（ｍ）のうちｎを除いた列インデックスの部分集合を表す。またｓｉｇｎ（ｘ）は、ｘの符号を表す。
【００４１】
また、
【数１０】
0005631846.tif 000011
は、列インデックス集合Ｎ（ｍ）に含まれる列インデックスに対応する列要素尤度比ｑｍｎのうち絶対値が最も小さい列要素尤度比ｑｍｎを表す。
【００４２】
さらに、
【数１１】
0005631846.tif 000012
は、列インデックス集合Ｎ（ｍ）＼ｎに含まれる列インデックスに対応する列要素尤度比ｑｍｎのうち絶対値が最も小さい列要素尤度比ｑｍｎを示す。また、後述するＭｉｎ−Ｓｕｍ係数αは、スケジューラ２６から通知される。
【００４３】
（式４）および（式５）により、各列インデックスの行要素尤度比（事前尤度比）
【数１２】
0005631846.tif 000013
が、算出された後、（式６）に示す演算により出力尤度比（事後尤度比）ｑｎが更新される。一方、（式７）に示すように、閾値ｔｈｒ以上の列要素尤度比ｑｍｎについては、事後尤度比ｑｎには列要素尤度比ｑｍｎを、そのまま使用する。
【００４４】
（式６）
【数１３】
0005631846.tif 000014
【００４５】
（式７）
【数１４】
0005631846.tif 000015
【００４６】
なお、２サイクル目以降のイタレーション処理では、出力尤度比（事後尤度比）ｑｎは、ひとつ前のイタレーション処理で更新された事後尤度比ｑｎを使用する。このように、ＬＬＲ更新処理部２５は、行毎に行処理と列処理を行うことにより、出力尤度比（事後尤度比）ｑｎを更新する。
【００４７】
スケジューラ２６は復号処理全体の制御を行う。図４にスケジューラ２６の構成を示す。スケジューラ２６は、復号完了判定部３１と、繰り返し回数カウント部３２と、シンドローム累積部３４と、シンドロームチェック部３６と、行番号通知部３７と、を有する。
【００４８】
シンドロームチェック部３６は、ＬＬＲ更新処理部２５より通知されるシンドローム値が「正」の場合は「真（０）」を、「負」の場合は「偽（１）」を、シンドローム累積部３４へ出力する。
【００４９】
シンドローム累積部３４は、シンドロームチェック部３６から行インデックス毎に入力されるシンドロームチェック結果（「真（０）」または「偽（１）」）をすべての行について累積することによりシンドローム累積値を得る。シンドローム累積値が、シンドロームエラーの数である。すべての行についてシンドロームチェック結果が「真（０）」となったときのみ、シンドローム累積値は「真（０）」となり、シンドロームチェック結果が「偽（１）」である行が１つでもあるときシンドローム累積値は「０」以外の「偽」となる。シンドローム累積部３４はシンドローム累積値を復号完了判定部３１に出力する。
【００５０】
復号完了判定部３１は、シンドローム累積部３４から入力されるシンドローム累積値が「真」のとき、または繰り返し回数カウント部３２から通知されるサイクル回数ｉが所定の最大サイクル回数Ｉｍａｘに達したとき、復号処理の完了を判定する。復号完了判定部３１は復号処理の完了を判定した場合、そのとき保持している事後尤度比ｑｎを硬判定部２１へ出力するようＬＬＲメモリ２２へ指示する。また、復号処理の完了と判定しない場合、次のイタレーション処理を開始することをＬＬＲ更新処理部２５に通知する。
【００５１】
行番号通知部３７はＬＬＲ更新処理部２５から通知される行インデックス番号をインクリメントし、ＬＬＲ更新処理部２５へ通知する。ただし、通知される行インデックス番号が最終行つまりＭのときは「０」を通知する。
【００５２】
中間メモリ２７は、ＬＬＲ更新処理部２５の説明から理解されるように、ＬＬＲ更新処理部２５により算出される行要素尤度比（事前尤度比）をＬＬＲ更新処理部２５からの書き込み要求を受けて記憶する。
【００５３】
硬判定部２１は、ＬＬＲメモリから入力される出力尤度比（事後尤度比）の正負を判定し、正の時は「０」を、負の時は「１」を選択する。ビット毎に判定された「０」または「１」である硬判定データは図示しない後段の信号処理部へ出力される。
【００５４】
ここで、図５および図６に示すフローチャートを用いて、復号部１８の動作の流れについて説明する。なお、図５および図６では、ｍが行インデックスを表し、Ｍがパリティ検査行列の行数を表し、ｉがイタレーション処理の繰り返し回数（サイクル回数）を表し、Ｉｍａｘが最大繰り返し回数を表す。
【００５５】
＜ステップＳ１１＞
図示しない前段の信号処理部より、受信語データ（入力尤度比Ｆｎ）が入力されると最初（１サイクル目）のイタレーション処理が開始される。なお、入力された受信語データ（入力尤度比Ｆｎ）は、イタレーション処理により更新されながら出力尤度比（事後尤度比）ｑｎとして、復号完了まで、ＬＬＲメモリ２２で保持される。
最初に、イタレーション処理のサイクル回数ｉが「１」にセットされる。
【００５６】
＜ステップＳ１２＞
更新処理が実行される行を示す行インデックスｍが「１」にセットされる。
【００５７】
＜ステップＳ１３＞
行インデックスｍについて、ＬＬＲ更新処理が実行される。
【００５８】
ここで、図６のフローチャートを用いてＬＬＲ更新処理部２５の動作について説明する。
＜ステップＳ３１＞
更新処理を実行する列インデックスｎが「１」に設定される。
【００５９】
＜ステップＳ３２＞
列インデックスｎが、検査行列Ｈのｍ行目の列インデックス集合Ｎ（ｍ）に含まれるかが判定され、含まれる場合（Ｙｅｓ）ステップＳ３３に進む。含まれない場合（Ｎｏ）、ステップＳ３６に進む。
【００６０】
＜ステップＳ３３＞
事後尤度比ｑｎの絶対値が閾値ｔｈｒ未満かどうかの判定が行われる。閾値ｔｈｒ未満の場合（Ｙｅｓ）はステップＳ３４へ進み、閾値ｔｈｒ以上の場合（Ｎｏ）は、ステップＳ３５へ進む。
【００６１】
＜ステップＳ３４＞
（式２）を用いて、列要素尤度比ｑｍｎが算出される。
【００６２】
＜ステップＳ３５＞
（式３）に示すように、列要素尤度比ｑｍｎには、出力尤度比（事後尤度比）ｑｎが、そのまま使用される。
【００６３】
＜ステップＳ３６＞
列インデックスｎが最終列インデックスＮかどうか判定し、最終列インデックスの場合は、ステップＳ３８に進み、最終列インデックスではない場合は、ステップＳ３７に進む。
【００６４】
＜ステップＳ３７＞
更新処理を実行する列インデックスｎがインクリメントされ、ステップＳ３２からの処理が繰り返される。
【００６５】
＜ステップＳ３８＞
（式４）および（式５）を用いてシンドローム値と行要素尤度比（事前尤度比）とが算出される。
【００６６】
＜ステップＳ３９＞
列インデックスｎが、「１」に設定される。
【００６７】
＜ステップＳ４０＞
列インデックスｎが、ｍ行目の列インデックス集合Ｎ（ｍ）に含まれるか判定し、含まれる場合（Ｙｅｓ）には、ステップＳ４１に進む。含まれない場合（Ｎｏ）には、ステップＳ４４に進む。
【００６８】
＜ステップＳ４１＞
列要素尤度比ｑｍｎの絶対値が、閾値ｔｈｒ未満かどうかが判定され、閾値ｔｈｒ未満の場合（Ｙｅｓ）はステップＳ４２へ進み、閾値ｔｈｒ以上の場合（Ｎｏ）は、ステップＳ４３へ進む。
【００６９】
＜ステップＳ４２＞
（式６）を用いて、出力尤度比（事後尤度比）ｑｎが算出される。
【００７０】
＜ステップＳ４３＞
（式７）に示すように、出力尤度比（事後尤度比）ｑｎには列要素尤度比ｑｍｎが、そのまま使用される。
【００７１】
＜ステップＳ４４＞
列インデックスｎが、最終列を示すインデックスＮかどうかが判定される。最終列インデックスＮの場合（Ｙｅｓ）であれば、ステップＳ１４に進み、最終列インデックスＮでない場合には、ステップＳ４５に進む。
【００７２】
＜ステップＳ４５＞
列インデックスｎがインクリメントされ、ステップＳ３９からの処理が繰り返し行われる。
【００７３】
＜ステップＳ１４＞
行インデックスｍが、最終行インデックスＭかどうかが判定される。
【００７４】
＜ステップＳ１５＞
ステップＳ１４の判定が、「Ｎｏ」の場合には、行インデックスｍが、インクリメントされ、ステップＳ１３からの処理が繰り返される。
【００７５】
＜ステップＳ１６＞
ステップＳ１４の判定が、「Ｙｅｓ」の場合には、シンドローム累積値の判定が行われる。そして、シンドローム累積値が「真」の場合には硬判定を行った後、復号処理は終了する。
【００７６】
＜ステップＳ１７＞
ステップＳ１６の判定が、「偽」の場合には、イタレーション処理のサイクル回数ｉが最大サイクル回数Ｉｍａｘに達したかどうかが判定される。最大サイクル回数Ｉｍａｘに達していた場合（Ｙｅｓ）には、硬判定が行われた後、復号処理は終了する。最大サイクル回数Ｉｍａｘ未満の場合（Ｎｏ）は、ステップＳ１２に戻り、次のサイクルのイタレーション処理が行われる。
【００７７】
以上の説明のように、実施形態の復号方法は、低密度パリティ検査符号により符号化された符号化データの、サムプロダクトアルゴリズムを用いた逐次法により、列処理演算において事後尤度比の絶対値が閾値以上の場合、列要素尤度比には事後尤度比をそのまま使用し、事後尤度比の更新処理において、列要素尤度比の絶対値が前記閾値以上の場合、事後尤度比には列要素尤度比をそのまま使用する。
【００７８】
実施形態の復号方法は、収束速度が速く、またメモリ使用量が少ない逐次型復号方法を用いているが、クリッピング誤差の影響により復号効率が低下することがない。このため、半導体メモリ装置１は復号効率がよい。
【００７９】
なお、上記説明は、サムプロダクト（Sum-Product）アルゴリズムとして、ミニサム（Ｍｉn-Ｓum）アルゴリズムを用いた復号を例に説明したが、モディファイドミニサム（Ｍodｉfｉed-Ｍｉn-Ｓum）アルゴリズム等を用いても、同様の効果を有する。
【００８０】
＜第２実施形態＞
次に第２実施形態の半導体メモリ装置１Ａおよび第２実施形態の復号方法について説明する。第２実施形態の半導体メモリ装置１Ａおよび第２実施形態の復号方法は、第１実施形態の半導体メモリ装置１および第１実施形態の復号方法と類似しているので、同じ構成要素には同じ符号を付し、説明は省略する。
【００８１】
図７に示すように、第２実施形態の半導体メモリ装置１Ａの復号部１８Ａは、ミニサム（Ｍｉn-Ｓum）アルゴリズムを用いた復号を行い、リセッティング制御部２３を有する。
【００８２】
さらに、図８に示すように、第２実施形態の半導体メモリ装置１Ａのスケジューラ２６Ａは、Ｍｉｎ−Ｓｕｍ係数制御部３３と、リセッティング判定部３５と、を有する。
【００８３】
すでに説明したように、第１実施形態の半導体メモリ装置１の復号部１８が行う復号では、事後尤度比ｑｎの絶対値が閾値ｔｈｒ以上の場合には、更新処理を行わない。しかし、イタレーション処理の初期段階（初期サイクル）で、誤った符号（「正」または「負」）のまま閾値ｔｈｒ以上となる可能性は否定できない。すると、以降のイタレーション処理では、そのビットデータの事後尤度比ｑｎは更新されないため、復号エラーとなる。
【００８４】
これに対して、復号部１８Ａでは、リセッティング制御部２３が、所定のサイクル回数のイタレーション処理を行っても復号できなかった場合には、リセッティング処理を行う。
【００８５】
すなわち、リセッティング判定部３５は、繰り返し回数カウント部３２から通知されるサイクル回数ｉが、第１の回数Ｉ１に達した場合は、リセッティング制御部２３および中間メモリ２７へ、リセッティング要求を通知する。
【００８６】
また、中間メモリ２７は、スケジューラ２６からリセッティング要求が通知された場合は、保持しているすべての行要素尤度比（事前尤度比）
【数１５】
0005631846.tif 000016
を、「０」にリセットする。
【００８７】
リセッティング制御部２３では、スケジューラ２６からリセッティング要求が通知された場合、ＬＬＲメモリ２２から事後尤度比ｑｎを読み出し、すべての事後尤度比ｑｎを（式８）により縮小する。
【００８８】
（式８）
【数１６】
0005631846.tif 000017
【００８９】
ただし、Ａは１より大きい値であり、Ａはｔｈｒの５％〜５０％が好ましく、前記範囲内であれば、復号速度が大きく低下することなく復号効率が上がる。
【００９０】
（式８）より明らかなように、「縮小する」とは「絶対値を減ずる」ことである。また、例えば、（絶対値が閾値以上の事後尤度比ｑｎの半分）だけを縮小してもよい。すなわち、少なくとも一部の事後尤度比ｑｎの絶対値を縮小してもよい。
【００９１】
また、リセッティング制御部２３は、事後尤度比ｑｎの縮小に替えて、すべての事後尤度比ｑｎの絶対値を（式９）により、所定値Ｂにしても縮小処理と同様の効果を得ることができる。すなわち、すべての事後尤度比ｑｎは、符号が「正」で絶対値がＢ、または符号が「負」で絶対値がＢの、２値のいずれかにリセッティング処理される。
【００９２】
（式９）
【数１７】
0005631846.tif 000018
ここで、Ｂ  ＜  ｔｈｒであり、Ｂはｔｈｒの５％〜５０％が好ましく、前記範囲内であれば、復号速度が大きく低下することなく復号効率が上がる。
【００９３】
また、例えば、（絶対値が閾値以上の出力尤度比（事後尤度比）ｑｎの半分）だけを、絶対値をＢにしても良い。すなわち、少なくとも一部の出力尤度比（事後尤度比）ｑｎを、絶対値がＢの正負の２値にすればよい。
【００９４】
一方、イタレーション処理の初期段階（初期サイクル）で、誤った符号のまま更新処理されなくなることを防止するためには、初期段階では事後尤度比ｑｎの絶対値が大きくなり難くする方法も有効である。事後尤度比ｑｎの絶対値を大きくなり難くするには、（式４）のＭｉｎ−Ｓｕｍ係数αとして小さな値を用いることで実現できる。
【００９５】
この方法を用いるため、Ｍｉｎ−Ｓｕｍ係数制御部３３は、繰り返し回数カウント部３２から通知されるサイクル回数ｉが、所定の第２の回数Ｉ２以下の初期段階では、小さい値の第１のＭｉｎ−Ｓｕｍ係数α１を更新処理部２５に通知するが、通知されるサイクル回数ｉが、所定の第２の回数Ｉ２より大きくなった後は、第１のＭｉｎ−Ｓｕｍ係数α１よりも大きな第２のＭｉｎ−Ｓｕｍ係数α２を更新処理部２５に通知する。
【００９６】
なお、第１のＭｉｎ−Ｓｕｍ係数α１は、第２のＭｉｎ−Ｓｕｍ係数α２の５０％〜９０％が好ましい。前記範囲であれば、復号速度が大きく低下することなく復号効率が上がる。また、第２の回数Ｉ２は、最大繰り返し数Ｉｍａｘの５〜５０％が好ましい前記範囲であれば、復号速度が大きく低下することなく復号効率が上がる。
【００９７】
Ｍｉｎ−Ｓｕｍ係数制御部３３の動作により、エラーフロアが低く、ウォーターフォール特性の劣化を防ぐことができる。
【００９８】
以下、図９のフローチャートを用いて、復号部１８Ａの動作の流れについて説明する。なお、図９は、図５と類似しているので、異なる工程のみを説明する。
【００９９】
＜ステップＳ１１Ａ＞
イタレーション処理のサイクル回数ｉが「１」にセットされるとともに、Ｍｉｎ−Ｓｕｍ係数αが、第１のＭｉｎ−Ｓｕｍ係数α１にセットされる。
【０１００】
＜ステップＳ１７＞
ステップＳ１６の判定が、「偽」の場合には、イタレーション処理のサイクル回数ｉが最大サイクル回数Ｉｍａｘに達したかどうかが判定される。最大サイクル回数Ｉｍａｘ未満の場合（Ｎｏ）は、ステップＳ１９に進む。
【０１０１】
＜ステップＳ１９＞
イタレーション処理のサイクル回数ｉが、所定の第２の回数Ｉ２であった場合（Ｙｅｓ）には、ステップＳ２０に進む。一方、サイクル回数ｉが、第２の回数Ｉ２未満の場合（Ｎｏ）、ステップＳ２１に進む。
【０１０２】
＜ステップＳ２０＞
Ｍｉｎ−Ｓｕｍ係数αを、第１のＭｉｎ−Ｓｕｍ係数α１から第２のＭｉｎ−Ｓｕｍ係数α２に変更してステップＳ２１に進む。
【０１０３】
＜ステップＳ２１＞
サイクル回数ｉが第１の回数Ｉ１であるかの判定が行われる。判定がＹｅｓの場合、ステップＳ２２に進む。一方、判定がＮｏの場合は、ステップＳ１８に進む。
【０１０４】
半導体メモリ装置１Ａは、半導体メモリ装置１が有する効果を有し、さらに、イタレーション処理の初期段階（初期サイクル）で、誤った符号のまま更新処理されなくなることに起因する復号エラーが発生しにくく、さらに復号効率がよい。
【０１０５】
なお、リセッティング判定部３５は、シンドロームエラー数に応じて、リセッティング要求を通知しても良い。また、Ｍｉｎ−Ｓｕｍ係数αも、シンドロームエラー数に応じて変更しても良い。
【０１０６】
すなわち、リセッティング制御部２３はシンドロームエラーの数が、所定の第１のシンドロームエラー数よりも小さくなった場合、少なくとも一部の事後尤度比の絶対値を縮小するとともに、すべての事前尤度比を「０」にリセットしてもよい。
【０１０７】
また、リセッティング制御部２３は、シンドロームエラーの数が、所定の第１のシンドロームエラー数よりも小さくなった場合、少なくとも一部の事後尤度比の絶対値を所定値とするリセット処理を行ってもよい。
【０１０８】
さらに、更新処理する順序を、行インデックス順ではなく、例えば、ＬＬＲ更新処理部２５より通知されるシンドローム値が「１」、すなわち、シンドロームエラーがある行から行うようにすることも好ましい。
【０１０９】
＜第３実施形態＞
次に第３実施形態の半導体メモリ装置１Ｂおよび第３実施形態の復号方法について説明する。第３実施形態の半導体メモリ装置１Ｂおよび第３実施形態の復号方法は、第１実施形態の半導体メモリ装置１および第１実施形態の復号方法と類似しているので、同じ構成要素には同じ符号を付し、説明は省略する。
【０１１０】
図１０に示すように半導体メモリ装置１Ｂの復号部１８Ｂのスケジューラ２６Ｂはパリティ検査部３８を有する。そして、スケジューラ２６Ｂは、シンドローム累積値ではなく、Ｍ行毎にパリティ検査を行い、復号完了を判定する。
【０１１１】
パリティ検査部３８では、更新処理部２５より通知される行インデックスが最終行Ｍであるとき、ＬＬＲメモリ２２から事後尤度比ｑｎを読み出し、その正負を判定し、正の時は「０」を、負の時は「１」を選択する硬判定が行われる。なお、硬判定は硬判定部２１と同様の硬判定部を用いても良い。
【０１１２】
その後、硬判定結果を用いて次式によりパリティ検査が行われる。
【数１８】
0005631846.tif 000019
【０１１３】
なお、Ｕはパリティ検査ベクトルであり、
【数１９】
0005631846.tif 000020
は、硬判定結果であり、Ｈは検査行列である。
【０１１４】
パリティ検査ベクトルが全零ベクトルである場合、パリティ検査部３８は、復号完了判定部３１に「真」を通知し、全零ベクトルでない場合は「偽」を通知する。
【０１１５】
復号完了判定部３１Ｂは、パリティ検査部３８から通知される信号が「真」である場合、または繰り返し回数カウント部３２から通知されるサイクル回数ｉが所定の最大繰り返し数Ｉｍａｘに達したとき、復号の完了を判定する。
【０１１６】
半導体メモリ装置１Ｂおよび第３実施形態の復号方法は、第１実施形態の半導体メモリ装置１および第１実施形態の復号方法と同様の効果を有する。
【０１１７】
また、半導体メモリ装置１Ｂおよび第３実施形態の復号方法は、第２実施形態の半導体メモリ装置１Ａおよび第２実施形態の復号方法と組み合わせても、同様の効果を有する。
【０１１８】
すなわち、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【符号の説明】
【０１１９】
１、１Ａ、１Ｂ…半導体メモリ装置、２…メモリコントローラ、３…半導体メモリ部、４…ホスト、１５…ＥＣＣ部、１７…符号化部、１８…復号部、２１…硬判定部、２２…メモリ、２３…リセッティング制御部、２４…検査行列保持部、２５…ＬＬＲ更新処理部、２６…スケジューラ、２７…中間メモリ、３１…復号完了判定部、３２…回数カウント部、３３…係数制御部、３４…シンドローム累積部、３５…リセッティング判定部、３６…シンドロームチェック部、３７…行番号通知部、３８…パリティ検査部
【図１】
0005631846.tif 000021
【図２】
0005631846.tif 000022
【図３】
0005631846.tif 000023
【図４】
0005631846.tif 000024
【図５】
0005631846.tif 000025
【図６】
0005631846.tif 000026
【図７】
0005631846.tif 000027
【図８】
0005631846.tif 000028
【図９】
0005631846.tif 000029
【図１０】
0005631846.tif 000030