JP2012244305A - メモリコントローラ、半導体メモリ装置、および復号方法 - Google Patents
メモリコントローラ、半導体メモリ装置、および復号方法 Download PDFInfo
- Publication number
- JP2012244305A JP2012244305A JP2011110719A JP2011110719A JP2012244305A JP 2012244305 A JP2012244305 A JP 2012244305A JP 2011110719 A JP2011110719 A JP 2011110719A JP 2011110719 A JP2011110719 A JP 2011110719A JP 2012244305 A JP2012244305 A JP 2012244305A
- Authority
- JP
- Japan
- Prior art keywords
- unit
- processing
- iteration
- memory
- llr
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1068—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in sector programmable memories, e.g. flash disk
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1048—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using arrangements adapted for a specific error detection or correction feature
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/11—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
- H03M13/1102—Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
- H03M13/1105—Decoding
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/11—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
- H03M13/1102—Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
- H03M13/1105—Decoding
- H03M13/1131—Scheduling of bit node or check node processing
- H03M13/1137—Partly parallel processing, i.e. sub-blocks or sub-groups of nodes being processed in parallel
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/11—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
- H03M13/1102—Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
- H03M13/1148—Structural properties of the code parity-check or generator matrix
- H03M13/116—Quasi-cyclic LDPC [QC-LDPC] codes, i.e. the parity-check matrix being composed of permutation or circulant sub-matrices
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/11—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
- H03M13/1102—Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
- H03M13/1148—Structural properties of the code parity-check or generator matrix
- H03M13/1177—Regular LDPC codes with parity-check matrices wherein all rows and columns have the same row weight and column weight, respectively
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/11—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
- H03M13/1102—Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
- H03M13/1148—Structural properties of the code parity-check or generator matrix
- H03M13/118—Parity check matrix structured for simplifying encoding, e.g. by having a triangular or an approximate triangular structure
- H03M13/1185—Parity check matrix structured for simplifying encoding, e.g. by having a triangular or an approximate triangular structure wherein the parity-check matrix comprises a part with a double-diagonal
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/11—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
- H03M13/1102—Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
- H03M13/1148—Structural properties of the code parity-check or generator matrix
- H03M13/118—Parity check matrix structured for simplifying encoding, e.g. by having a triangular or an approximate triangular structure
- H03M13/1185—Parity check matrix structured for simplifying encoding, e.g. by having a triangular or an approximate triangular structure wherein the parity-check matrix comprises a part with a double-diagonal
- H03M13/1188—Parity check matrix structured for simplifying encoding, e.g. by having a triangular or an approximate triangular structure wherein the parity-check matrix comprises a part with a double-diagonal wherein in the part with the double-diagonal at least one column has an odd column weight equal or greater than three
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/65—Purpose and implementation aspects
- H03M13/6502—Reduction of hardware complexity or efficient processing
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/65—Purpose and implementation aspects
- H03M13/6502—Reduction of hardware complexity or efficient processing
- H03M13/6505—Memory efficient implementations
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/65—Purpose and implementation aspects
- H03M13/6577—Representation or format of variables, register sizes or word-lengths and quantization
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/11—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
- H03M13/1102—Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
- H03M13/1105—Decoding
- H03M13/1111—Soft-decision decoding, e.g. by means of message passing or belief propagation algorithms
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/37—Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
- H03M13/45—Soft decoding, i.e. using symbol reliability information
Landscapes
- Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Mathematical Physics (AREA)
- Probability & Statistics with Applications (AREA)
- Quality & Reliability (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Error Detection And Correction (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Read Only Memory (AREA)
Abstract
【課題】、実装メモリ容量が小さく回路規模の小さいメモリコントローラ3を提供する
【解決手段】メモリコントローラ3は、LDPC符号により符号化されたフレーム単位のデータを、単位行列からなるブロックと、単位行列の各行が順にシフトしている複数のブロックと、からなる検査行列をもとに、部分並列処理により復号を行い、メモリ部5から読み出したデータの閾値判定情報を記憶するバッファ24と、閾値判定情報をLLRに変換するLLR変換部16と、ブロックのサイズ以下のイタレーション単位で、LLRをもとに、列処理および行処理を繰り返し行うイタレーション処理のときに算出される確率情報βを、記憶するLMEM12と、イタレーション単位のイタレーション処理が完了する度に、LMEM12に記憶される確率情報βを、バッファ24に転送するCPUコア10と、を具備する。
【選択図】図8
【解決手段】メモリコントローラ3は、LDPC符号により符号化されたフレーム単位のデータを、単位行列からなるブロックと、単位行列の各行が順にシフトしている複数のブロックと、からなる検査行列をもとに、部分並列処理により復号を行い、メモリ部5から読み出したデータの閾値判定情報を記憶するバッファ24と、閾値判定情報をLLRに変換するLLR変換部16と、ブロックのサイズ以下のイタレーション単位で、LLRをもとに、列処理および行処理を繰り返し行うイタレーション処理のときに算出される確率情報βを、記憶するLMEM12と、イタレーション単位のイタレーション処理が完了する度に、LMEM12に記憶される確率情報βを、バッファ24に転送するCPUコア10と、を具備する。
【選択図】図8
Description
本発明の実施形態は、LDPC符号化されたデータを復号するメモリコントローラ、前記メモリコントローラを有する半導体メモリ装置、およびLDPC符号化されたデータの復号方法に関する。
半導体メモリ装置の高密度記録化等のために、デジタルデータの誤り訂正符号に関する開発が行われている。誤り訂正符号は、代数系の誤り訂正方式と確率に基づく反復計算による誤り訂正方式とに大別できる。そして、後者に属する低密度パリティ符号(Low Density Parity Check codes、以下、「LDPC符号」という)はシャノン限界に迫る、優れた性能が報告されている。
LDPC符号化データはサムプロダクト(Sum-Product)アルゴリズム等を用いることにより、比較的少ない回路規模で並列処理を行うことができる。しかし、符号長の長いLDPC符号化データでは、全ての処理を並列で行う完全並列処理は、多数の演算回路を全て実装する必要があるため現実的ではない。
このため、正方行列を並べた構成の検査行列を用い、正方行列を1つのブロックとしてブロック単位で部分並列処理を行う復号装置が開示されている。
本発明の実施形態は、実装メモリ容量が小さく回路規模の小さいメモリコントローラ、および前記メモリコントローラを有する半導体メモリ装置、および効率の良い復号方法を提供することを目的とする。
本発明の一態様のメモリコントローラは、低密度パリティ符号により符号化されたフレーム単位のデータを、単位行列からなるブロックと単位行列の各行が順にシフトしている複数のブロックとからなる検査行列をもとに部分並列処理により復号を行うときに、NAND型フラッシュメモリ部から読み出したデータの閾値判定情報を記憶する第1のメモリ部と、閾値判定情報を対数尤度比に変換するLLR変換部と、ブロックのサイズ以下のイタレーション単位で対数尤度比をもとに列処理および行処理を繰り返し行うイタレーション処理のときに算出される確率情報を、記憶する第2のメモリ部と、イタレーション単位のイタレーション処理が完了する度に第2のメモリ部に記憶される確率情報を第1のメモリ部に転送する制御部と、を具備する。
本発明の別の一態様の半導体メモリ装置は、低密度パリティ符号により符号化されたフレーム単位のデータを、単位行列からなるブロックと単位行列の各行が順にシフトしている複数のブロックとからなる検査行列をもとに部分並列処理により復号を行うときに、NAND型フラッシュメモリ部から読み出したデータの閾値判定情報を記憶する第1のメモリ部と、閾値判定情報を対数尤度比に変換するLLR変換部と、ブロックのサイズ以下のイタレーション単位で対数尤度比をもとに列処理および行処理を繰り返し行うイタレーション処理のときに算出される確率情報を記憶する第2のメモリ部と、イタレーション単位のイタレーション処理が完了する度に第2のメモリ部に記憶される確率情報を第1のメモリ部に転送する制御部と、を具備するメモリコントローラを有する。
更に本発明の別の一態様の復号方法は、低密度パリティ符号により符号化されたフレーム単位のデータの復号方法であって、単位行列からなるブロックと、単位行列の各行が順にシフトしている複数のブロックと、からなる検査行列をもとに部分並列処理により復号を行うときに、NAND型フラッシュメモリ部から読み出したデータの閾値判定情報を第1のメモリ部に記憶する工程と、閾値判定情報を対数尤度比に変換する工程と、ブロックのサイズ以下のイタレーション単位で、対数尤度比をもとに列処理および行処理を繰り返し行うイタレーション処理のときに算出される確率情報を第2のメモリ部に記憶する工程と、イタレーション単位のイタレーション処理が完了する度に第2のメモリ部に記憶される確率情報を第1のメモリ部に転送する工程と、確率情報から一時推定語を算出する工程と、一時推定語をもとにパリティチェックを行う工程と、を具備する。
本発明の実施形態によれば、実装メモリ容量が小さく回路規模の小さいメモリコントローラ、前記メモリコントローラを有する半導体メモリ装置、および効率の良い復号方法を提供することができる。
<LDPC符号および部分並列処理>
最初に実施形態のLDPC符号および部分並列処理について説明する。LDPC符号は、非常に疎な検査行列、すなわち、行列内の非零要素数が少ない検査行列により定義される線形符号であり、タナーグラフで示すことができる。そして、誤り訂正処理は、タナーグラフ上で接続された符号語の各ビットに対応したビットノード(ビットノード)と各パリティ検査式に対応したチェックノードとの間で局所的に推論した結果を、やりとりしながら更新していくことに相当する。
最初に実施形態のLDPC符号および部分並列処理について説明する。LDPC符号は、非常に疎な検査行列、すなわち、行列内の非零要素数が少ない検査行列により定義される線形符号であり、タナーグラフで示すことができる。そして、誤り訂正処理は、タナーグラフ上で接続された符号語の各ビットに対応したビットノード(ビットノード)と各パリティ検査式に対応したチェックノードとの間で局所的に推論した結果を、やりとりしながら更新していくことに相当する。
図1に、(6、2)LDPC符号における、行重みwr=3、列重みwc=2の検査行列H1を示す。なお、(6、2)LDPC符号とは、符号長が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となる。
以下、図3(A)〜図3(D)に示すタナーグラフG2の一部を用いて、行処理および列処理について説明する。最初に、図3(A)および図3(B)を用いて、ビットノード処理(列処理)について説明する。あるビットノード、例えばビットノード3、に対応する入力された符号語ビットの初期信頼度であるLLR、をλ(3)とし、このビットノード3へのチェックノードからの確率を、α(j、3)とする。ここで、jはビットノード3に接続しているチェックノード番号を示す。
そして、ビットノード3は、α(1、3)に対応するエッジのチェックノードすなわち、チェックノード1に対して、以下の(式1)で表される計算を行う。
β(3、1)= λ(3)+α(2、3) ・・・(式1)
β(3、1)= λ(3)+α(2、3) ・・・(式1)
同様に、ノード番号jのチェックノードに対して、以下の(式2)で表される計算を行う。
β(3、j)= λ(3)+Σα(k、3) ・・・(式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)
β(i、j)= λ(i)+Σα(k、i) ・・・(式3)
次に、図3(C)および図3(D)を用いて、チェックノード処理(行処理)について説明する。あるチェックノード、例えばチェックノード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)|の中から最小値を選択する関数である。
ただし、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に接続しているビットノード番号であり、図1(B)のタナーグラフの例では、「1」、「2」、「3」である。また、mはチェックノード1に接続したビットノードの中で、m=i、以外とする。
α(1、i)=sign(Πβ(m、1))×min{|β(m、1)|} ・・・(式5)
ただし、iはチェックノード1に接続しているビットノード番号であり、図1(B)のタナーグラフの例では、「1」、「2」、「3」である。また、mはチェックノード1に接続したビットノードの中で、m=i、以外とする。
以上の計算を全てのチェックノードに対して行い、α(j、i)を以下の(式6)を使って計算する。
α(j、i)=sign(Πβ(m、j))×min(|β(m、j)|) ・・・(式6)
ただし、mはチェックノードjに接続したビットノードの中で、m=i、以外とする。
α(j、i)=sign(Πβ(m、j))×min(|β(m、j)|) ・・・(式6)
ただし、mはチェックノードjに接続したビットノードの中で、m=i、以外とする。
そして、反復復号では、以上に示したビットノード処理とチェックノード処理とを1回ずつ実行した1イタレーション処理(1ラウンド)毎に、以下の(式7)によって、事後確率Pb(i)を求める。
Pb(i)=λ(i)+Σα(k、i) ・・・(式7)
ここで、i=1〜Nであり、Nは符号長である。そして、Σはビットノードiに接続された全ての和である。
Pb(i)=λ(i)+Σα(k、i) ・・・(式7)
ここで、i=1〜Nであり、Nは符号長である。そして、Σはビットノードiに接続された全ての和である。
この事後確率値(一時推定語)Pbを基にビット判定、すなわち、当該ビットが、「0」または「1」のいずれであるかが硬判定される。そして、この硬判定結果を使用して、LDPC符号のパリティチェックを行い、誤りないことが確認された時点で反復処理を終了する。
ここで、メッセージ伝達アルゴリズムとして、サムプロダクト・アルゴリズムまたはミニサムプロダクト・アルゴリズム等を用いた、ビットノードおよびチェックノードにおける信頼度更新アルゴリズムでは、並列処理による復号処理を行うことができる。
しかし、符号長の長いLDPC符号化データでは、全ての処理を並列で行う完全並列処理は、多数の演算回路を全て実装する必要があるため現実的ではない。
これに対して、複数の単位行列(以下「ブロック」ともいう。)を組み合わせて構成した検査行列を用いると、ブロックサイズpのビットノード個数pの演算回路により部分並列処理を行うことで回路規模を縮小することができる。
図4(A)に複数の単位行列を組み合わせて構成した検査行列H3を示す。検査行列H3は、1区画が5×5個の要素からなるブロックを横に6個、縦に3個並べて、縦15行、横30列となっている。
そして、図4(B)に示すように、検査行列H3の各ブロックBは、対角成分には1が並び、他は全て0となる単位行列を数値分だけシフト処理した正方行列(以下、シフト行列)である。なお、図4(A)に示した検査行列H3は、ユーザーデータ用のブロックである符号化対象(メッセージ)ブロック部H3Aと、ユーザーデータから生成したパリティ用のパリティ用ブロック部H3Bとから構成されている。そして、図3(B)に示すように、シフト値「0」は単位行列を示し、シフト値「−1」は0行列を示している。なお、0行列は実際の演算処理が不要なため、以下では除いて説明する。
シフト処理によってあふれたビットはブロック内の最左列に挿入されている。検査行列H3を用いた復号処理ではシフト値を指定することにより必要なブロックの情報、すなわち、処理すべきノードの情報を得ることができる。なお、5×5のブロックからなる検査行列H3においては、シフト値は、復号処理に直接は関係のない、0行列を除くと、0、1、2、3、4の、5種類のいずれかである。
図4(A)に示したブロックサイズ5X5(以下、「ブロックサイズ5」という)の正方行列を組み合わせた検査行列H3を用いた場合には、演算部113に演算ユニットを5個設けることで、5個のチェックノードに対して部分並列処理を実行することができる。なお、部分並列処理を実行するためには、ビットノード単位での事前/事後確率βを求めるための変数(以下、「LMEM変数」ともいう)を格納するビットノード記憶部(LMEM)112と、チェックノード単位で外部値αを求めるための変数(以下、「TMEM変数」ともいう)を格納するチェックノード記憶部(TMEM)114が必要である。ビットノードは列方向のアドレス(列アドレス)で管理するので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種類である。
図5(A)および図6(A)に示すように、シフト値が「0」のブロックB(0)場合は、ローテイター113Aによりローテイト値0のローテイト処理が行われ、同一アドレスの変数同士で演算が実行される。ただし、ローテイト値0のローテイト処理とはローテイトされないことである。
列アドレス0のLMEM変数、行アドレス0のTMEM変数(図5(A)破線表示)
列アドレス1のLMEM変数、行アドレス1のTMEM変数
列アドレス2のLMEM変数、行アドレス2のTMEM変数
・
・
列アドレス7のLMEM変数、行アドレス7のTMEM変数(図5(A)破線表示)
列アドレス1のLMEM変数、行アドレス1のTMEM変数
列アドレス2のLMEM変数、行アドレス2のTMEM変数
・
・
列アドレス7のLMEM変数、行アドレス7のTMEM変数(図5(A)破線表示)
これに対して、図5(B)および図6(B)に示すように、シフト値が「1」のブロックB(1)の場合は、ローテイター113Aによりローテイト値1のローテイト処理が行われ、以下のような変数同士で演算が実行される。すなわち、ローテイト値1のローテイト処理とは、それぞれの変数をひとつ下段に移動し、あふれた最下段の変数を最上段に挿入するシフト処理である。
列アドレス0のLMEM変数、行アドレス7のTMEM変数(図5(B)破線表示)
列アドレス1のLMEM変数、行アドレス0のTMEM変数(図5(B)破線表示)
列アドレス2のLMEM変数、行アドレス1のTMEM変数
・
・
列アドレス7のLMEM変数、行アドレス6のTMEM変数
列アドレス1のLMEM変数、行アドレス0のTMEM変数(図5(B)破線表示)
列アドレス2のLMEM変数、行アドレス1のTMEM変数
・
・
列アドレス7のLMEM変数、行アドレス6のTMEM変数
そして、図6(C)に示すように、シフト値が「7」のブロックB(7)の場合は、ローテイター113Aによりローテイト値7のローテイト処理が行われ、以下のような変数同士で演算が実行される。すなわち、ローテイト値7のローテイト処理とは、ローテイト値1のローテイト処理を7回行う処理である。
列アドレス0のLMEM変数、行アドレス1のTMEM変数
列アドレス1のLMEM変数、行アドレス2のTMEM変数
列アドレス2のLMEM変数、行アドレス3のTMEM変数
・
・
列アドレス7のLMEM変数、行アドレス0の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は、低密度パリティ符号により符号化されたフレーム単位のデータを、単位行列からなるブロックと、単位行列の各行が順にシフトしている複数のブロックと、からなる検査行列をもとに、部分並列処理により復号を行う。
以下、本発明の第1実施形態のメモリコントローラ3、半導体メモリ装置、および復号方法について説明する。メモリコントローラ3は、低密度パリティ符号により符号化されたフレーム単位のデータを、単位行列からなるブロックと、単位行列の各行が順にシフトしている複数のブロックと、からなる検査行列をもとに、部分並列処理により復号を行う。
図8に示すように、本実施形態の半導体メモリ装置であるメモリカード2はパソコンまたはデジタルカメラ等のホスト4から受信したデータを符号化データとして記憶し、記憶した符号化データを復号してホスト4に送信する。メモリカード2とホスト4とはメモリシステム1を構成している。メモリカード2は、半導体メモリ部(以下、単に「メモリ部」ともいう。)5と、メモリコントローラ3とを有する。メモリ部5はNAND型フラッシュメモリ部から構成されている。
実施形態の半導体メモリ装置としては、ホスト4の内部に収納され、ホスト4の起動データ等を記憶する、いわゆるエンベデッドタイプであってもよく、または半導体ディスク:SSD(Solid State Drive)等の形態であってもよい。あるいは半導体メモリ装置とホスト4とが、例えば携帯音楽プレーヤであるMP3プレーヤ等のメモリシステムを構成していてもよい。
そして、メモリコントローラ3は、バス(不図示)を介して接続された、制御部であるCPUコア10と、LDCPデコーダ11と、ホストI/F(インターフェイス)20と、データバッファであるバッファ21と、LDPCエンコーダ22と、セレクタ23と、データバッファであるバッファ24と、NAND I/F(インターフェイス)25と、を有する。
後述するように、第1のメモリ部であるバッファ24は、NAND型フラッシュメモリ部から読み出したデータの閾値判定情報と、復号中の確率情報と、を記憶する。
LDCPデコーダ11は、ビットノード記憶部(LMEM)12と、演算部13と、チェックノード記憶部(TMEM)14と、復号データ格納メモリであるバッファ15と、LLR変換部16と、を有する。そして、演算部13は、ブロックサイズと同じp個の演算ユニットを有する。なお、メモリコントローラ3は、演算部13の機能の一部でもあるローテイター、CPUコア10の実行プログラムおよびアドレス変換デーブル等を記憶したROM、対数尤度比(LLR)テーブルを記憶したLLR記憶部、およびLDPCデコーダの一部である硬判定部等の図示しない構成要素も有している。LMEM12等は、SRAMまたはレジスタ等の半導体メモリからなる。
メモリコントローラ3は、CPUコア10の制御のもと、ホスト I/F(14)を介してホスト4とデータ送受信を、NAND I/F(16)を介してメモリ部5とデータ送受信を行う。またメモリコントローラ3は、メモリ部5のアドレス管理をCPUコア10で実行されるFW(Firm Ware)で実現している。
次に、メモリ部5へのデータの記憶処理および読み出し処理について簡単に説明する。
図8に示すように、データの記憶処理時には、ホスト4から送信されたデータは、バッファ21に一時記憶された後、LDPCエンコーダ22によりLDPCパリティが生成される。そして、セレクタ23にてフレーム単位のデータにパリティが付与され、LDPC符号化データとして出力される。そして、NAND I/F(25)を介して、LDPC符号化データがメモリ部5に記憶される。
図8に示すように、データの記憶処理時には、ホスト4から送信されたデータは、バッファ21に一時記憶された後、LDPCエンコーダ22によりLDPCパリティが生成される。そして、セレクタ23にてフレーム単位のデータにパリティが付与され、LDPC符号化データとして出力される。そして、NAND I/F(25)を介して、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)と、からなる。なお、ソフトビットの種類はメモリシステムにより異なる。
ホスト4からのコマンドにより、メモリ部5から読み出されたフレーム単位のデータの閾値判定情報がメモリコントローラ3に受信される。ここで、それぞれのビットの閾値判定情報は、ハードビット(HB)と、例えば3種類のソフトビット(SB1、SB2、SB3)と、からなる。なお、ソフトビットの種類はメモリシステムにより異なる。
<ステップS11> 第1のメモリ部への閾値判定情報記憶工程
それぞれが4ビットの閾値判定情報(HB、SB1、SB2、SB3)がフレーム単位で、第1のメモリ部であるバッファ24に記憶される。言い換えれば、バッファ24はNAND型フラッシュメモリ部から読み出したデータの閾値判定情報を記憶する。フレームサイズが30ビットのため、バッファ24に記憶される閾値判定情報は120ビット(4×30)ビットである。
それぞれが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にて変換処理を行う。
バッファ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データが記憶される。
<ステップ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に初期化される。
イタレーション回数が0に初期化される。
<ステップS15> LDPC復号サブルーチン処理
図10に示すステップS30〜ステップS43のLDPC復号サブルーチン処理が行われる。
<ステップS30、ステップS31>
繰り返し処理のための初期化処理である。
図10に示すステップS30〜ステップS43のLDPC復号サブルーチン処理が行われる。
<ステップS30、ステップS31>
繰り返し処理のための初期化処理である。
<ステップS32>処理ブロックのLLRをLMEMに転送
ブロック単位でイタレーション処理を行うために、CPUコア10の制御により、検査行列のブロック単位(p=5ビット)のLLRデータ(5×5=25ビット)がバッファ24から、第2のメモリ部であるLMEM12に送信され、LMEM12に記憶される。すなわち、LMEM12の容量は25ビットあればよい。
ブロック単位でイタレーション処理を行うために、CPUコア10の制御により、検査行列のブロック単位(p=5ビット)のLLRデータ(5×5=25ビット)がバッファ24から、第2のメモリ部であるLMEM12に送信され、LMEM12に記憶される。すなわち、LMEM12の容量は25ビットあればよい。
<ステップS33> 行処理
行処理がp個の演算回路により並列処理される。
行処理がp個の演算回路により並列処理される。
<ステップS34〜S35>
繰り返し処理のためのカウント工程である。
繰り返し処理のためのカウント工程である。
<ステップS36> 列処理
列処理がp個の演算回路により並列処理される。
列処理がp個の演算回路により並列処理される。
<ステップS37> 更新βをLMEMからバッファ24に転送
イタレーション処理により更新されLMEM12に記憶された確率情報(事後確率、LLR)βは、CPUコア10の制御のもと、再びバッファ24に転送される。すなわち、制御部であるCPUコア10は、イタレーション単位のイタレーション処理が完了する度に、第2のメモリ部であるLMEM12に記憶される確率情報を、第1のメモリ部であるバッファ24に転送する。
イタレーション処理により更新されLMEM12に記憶された確率情報(事後確率、LLR)βは、CPUコア10の制御のもと、再びバッファ24に転送される。すなわち、制御部であるCPUコア10は、イタレーション単位のイタレーション処理が完了する度に、第2のメモリ部であるLMEM12に記憶される確率情報を、第1のメモリ部であるバッファ24に転送する。
更新された確率情報βは、そのブロックのLLRデータが記憶されていた領域、すなわち、同一アドレスに記憶されることが好ましい。言い換えれば、制御部であるCPUコア10は、一のイタレーション単位のイタレーション処理により算出された確率情報を、第1のメモリ部であるバッファ24の、一のイタレーション単位の閾値判定情報が記憶されていたアドレスに転送することが好ましい。アドレスによるデータ管理が容易なためである。
<ステップS38〜ステップS41>
繰り返し処理のためのカウント工程である。
繰り返し処理のためのカウント工程である。
<ステップS42> 一時推定語算出工程
全ブロックのイタレーション処理が完了する(S23:Yes)と、それぞれの更新された確率情報(事後確率)βに基づき、LDPCデコーダ11の硬判定部において一時推定語がブロック毎に並列処理で計算される。
全ブロックのイタレーション処理が完了する(S23:Yes)と、それぞれの更新された確率情報(事後確率)βに基づき、LDPCデコーダ11の硬判定部において一時推定語がブロック毎に並列処理で計算される。
<ステップS43> パリティチェック工程
一時推定語に基づき、パリティチェックがブロック毎に並列処理で行われる。
以上で、ステップS30〜ステップS43のLDPC復号サブルーチン処理が完了する。
一時推定語に基づき、パリティチェックがブロック毎に並列処理で行われる。
以上で、ステップS30〜ステップS43のLDPC復号サブルーチン処理が完了する。
ここで、図4の検査行列H2を用いる場合を例に、LDPC復号サブルーチン処理(ステップS30〜S43)の処理内容について詳細に説明する。
LDPC復号サブルーチン処理では、イタレーション制御変数X、Y、Zに応じて以下の処理が行われる
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=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]行処理
(1)m1〜m5の確率情報をLMEMに転送。ブロック(A、1)の行処理(p個 並列処理)を実行。
(2)m6〜m10の確率情報をLMEMに転送。ブロック(B、1)の行処理(p個 並列処理)を実行。(3)m11〜m15の確率情報をLMEMに転送。ブロック(C、1)の行処理(p個 並列処理)を実行。
(4)p1〜p5の確率情報をLMEMに転送。ブロック(D、1)の行処理(p個 並列処理)を実行。
(5)p6〜p10の確率情報をLMEMに転送。ブロック(E、1)の行処理(p個 並列処理)を実行。
(6)p11〜p15の確率情報をLMEMに転送。ブロック(F、1)の行処理(p個 並列処理)を実行。
以上の処理でp個(5個)のαを求め、これをTMEMに記憶する。
[1]行処理
(1)m1〜m5の確率情報をLMEMに転送。ブロック(A、1)の行処理(p個 並列処理)を実行。
(2)m6〜m10の確率情報をLMEMに転送。ブロック(B、1)の行処理(p個 並列処理)を実行。(3)m11〜m15の確率情報をLMEMに転送。ブロック(C、1)の行処理(p個 並列処理)を実行。
(4)p1〜p5の確率情報をLMEMに転送。ブロック(D、1)の行処理(p個 並列処理)を実行。
(5)p6〜p10の確率情報をLMEMに転送。ブロック(E、1)の行処理(p個 並列処理)を実行。
(6)p11〜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個 並列処理)を実行。
(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]行処理
(1)m1〜m5の確率情報をLMEMに転送。ブロック(A、2)の行処理(p個 並列処理)を実行。
(2)m6〜m10の確率情報をLMEMに転送。ブロック(B、2)の行処理(p個 並列処理)を実行。
(3)m11〜m15の確率情報をLMEMに転送。ブロック(C、2)の行処理(p個 並列処理)を実行。
(4)p1〜p5の確率情報をLMEMに転送。ブロック(D、2)の行処理(p個 並列処理)を実行。
(5)p6〜p10の確率情報をLMEMに転送。ブロック(E、2)の行処理(p個 並列処理)を実行。
(6)p11〜p15の確率情報をLMEMに転送。ブロック(F、2)の行処理(p個 並列処理)を実行。
以上の処理でp個(5個)のαを求め、これをTMEMに記憶する。
[1]行処理
(1)m1〜m5の確率情報をLMEMに転送。ブロック(A、2)の行処理(p個 並列処理)を実行。
(2)m6〜m10の確率情報をLMEMに転送。ブロック(B、2)の行処理(p個 並列処理)を実行。
(3)m11〜m15の確率情報をLMEMに転送。ブロック(C、2)の行処理(p個 並列処理)を実行。
(4)p1〜p5の確率情報をLMEMに転送。ブロック(D、2)の行処理(p個 並列処理)を実行。
(5)p6〜p10の確率情報をLMEMに転送。ブロック(E、2)の行処理(p個 並列処理)を実行。
(6)p11〜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個 並列処理)を実行。
(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]行処理
(1)m1〜m5の確率情報をLMEMに転送。ブロック(A、3)の行処理(p個 並列処理)を実行。
(2)m6〜m10の確率情報をLMEMに転送。ブロック(B、3)の行処理(p個 並列処理)を実行。
(3)m11〜m15の確率情報をLMEMに転送。ブロック(C、3)の行処理(p個 並列処理)を実行。
(4)p1〜p5の確率情報をLMEMに転送。ブロック(D、3)の行処理(p個 並列処理)を実行。
(5)p6〜p10の確率情報をLMEMに転送。ブロック(E、3)の行処理(p個 並列処理)を実行。
(6)p11〜p15の確率情報をLMEMに転送。ブロック(F、3)の行処理(p個 並列処理)を実行。
以上の処理でp個(5個)のαを求め、これをTMEMに記憶する。
[1]行処理
(1)m1〜m5の確率情報をLMEMに転送。ブロック(A、3)の行処理(p個 並列処理)を実行。
(2)m6〜m10の確率情報をLMEMに転送。ブロック(B、3)の行処理(p個 並列処理)を実行。
(3)m11〜m15の確率情報をLMEMに転送。ブロック(C、3)の行処理(p個 並列処理)を実行。
(4)p1〜p5の確率情報をLMEMに転送。ブロック(D、3)の行処理(p個 並列処理)を実行。
(5)p6〜p10の確率情報をLMEMに転送。ブロック(E、3)の行処理(p個 並列処理)を実行。
(6)p11〜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復号のサブルーチンでは、例えば、以上の説明の処理が行われる。
(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?
パリティチェックがOK(Yes)の場合には、ステップS17からの処理が行われる。
パリティチェックがNG(No)の場合には、ステップS18からの処理が行われる。
パリティチェックがOK(Yes)の場合には、ステップS17からの処理が行われる。
パリティチェックがNG(No)の場合には、ステップS18からの処理が行われる。
<ステップS18、S19> イタレーション回数チェック
所定の最大回数のイタレーション処理となるまで、更新された確率情報によるS15からの処理が繰り返し行われる。
所定の最大回数のイタレーション処理となるまで、更新された確率情報によるS15からの処理が繰り返し行われる。
<ステップS20> エラーレスポンス信号送信
最大回数のイタレーション処理を行っても復号できない(パリティチェックNG)場合には、コントローラ3はホスト4にエラーレスポンス信号を送信する。
なお、イタレーション処理の繰り返し限度は、回数ではなく、時間で管理してもよい。
最大回数のイタレーション処理を行っても復号できない(パリティチェックNG)場合には、コントローラ3はホスト4にエラーレスポンス信号を送信する。
なお、イタレーション処理の繰り返し限度は、回数ではなく、時間で管理してもよい。
または、メモリコントローラ3が、LLR記憶部に複数のLLRテーブルを記憶している場合には、LLR変換部16が別のLLRテーブルにより閾値判定情報を再変換し、新たなLLRデータを用いてイタレーション処理を行うようにしてもよい。なお、この場合は、メモリ部5から再度、閾値判定情報を読み出してバッファ24に記憶する必要がある。このため、復号時間が長くなるが、LLR再変換の発生頻度が低ければ、実用に耐えうるスループットを維持可能である。
<ステップS17> 復号データ送信工程
パリティチェックがOKの場合(S16:Yes)には、復号データがバッファ21に一時記憶された後、HOST I/F(20)を介して、ホスト4に送信される。
パリティチェックがOKの場合(S16:Yes)には、復号データがバッファ21に一時記憶された後、HOST I/F(20)を介して、ホスト4に送信される。
<比較>
ここで、比較のため、単純な制御のメモリコントローラの場合について説明する。比較例のメモリコントローラでは、例えば、バッファ24に記憶された閾値判定情報をもとに、LLR変換部16が変換した150ビットのLLRデータが、LMEM12に記憶される。このため、LMEMの容量は150ビット必要である。すなわち、LMEMの容量は(フレームサイズ×量子化ビット数)である。
ここで、比較のため、単純な制御のメモリコントローラの場合について説明する。比較例のメモリコントローラでは、例えば、バッファ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と類似しているため、同じ構成要素には同じ符号を付し説明は省略する。
以下、第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と類似しているため、同じ構成要素には同じ符号を付し説明は省略する。
以下、第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読み出しの場合に比べて高速で処理が可能である。
<ステップ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状態で記憶されている読み出し電圧が最も低いHB(111)およびG状態で記憶されている読み出し電圧が最も高いHB(011)は、他のHBに比べて信頼度が高い。
第1実施形態のステップS11〜ステップS19と類似した処理である。ただし、ステップS52におけるLLR変換処理は、HBのみに基づくLLR変換処理である。
すなわち、HBは、基本的には記憶されているデータが「0」か「1」のいずれかであることを示しているだけである。しかし、それぞれのHBは読み出し電圧が異なるため、読み出し電圧により確からしさが異なる。例えば、図11に示す、Er状態で記憶されている読み出し電圧が最も低いHB(111)およびG状態で記憶されている読み出し電圧が最も高いHB(011)は、他の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変換処理が行われる。
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のみによる復号が可能であるため復号速度が速い。
第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の復号工程と、を具備する。
低密度パリティ符号により符号化されたフレーム単位のデータの復号方法は、
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に記憶される。
図9に示したステップS12においてフレーム単位でLLR変換処理を行う方式(逐次方式)について説明したが、ブロック単位または分割ブロック単位でLLR変換処理を行う方法(一括方式)で行ってもよい。この場合には、バッファ24から読み出された、復号対象のフレームの一部(ブロック単位または分割ブロック単)のデータが、LLR変換部16でLLRデータに変換され、LMEM12に記憶される。
LMEM12に記憶されたLLRデータを使って、演算部13で復号が行われる。LMEM12に記憶されたLLRデータによる復号が完了したら、次の処理に必要なデータをバッファ24から読み出し、以下、最初のデータと同様に処理する。この処理を繰り返して、1フレームデータの復号を完了する。
バッファ24から読み出すデータサイズは、演算部13で並列処理するデータサイズと関連する。例えば、ブロック単位で処理する場合は、1ブロック分のデータサイズである。このため、一括方式でも、逐次方式と同様に、比較例の1フレーム分のLLRデータを格納するLMEMより、はるかに容量の小さいLMEMで、同様の処理を実行することが可能である。
なお、以上では、本発明の実施形態を説明したが、この実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。実施形態は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
1、1A、1B…メモリシステム
2、2A、2B…メモリカード
3、3A、3B…メモリコントローラ
4…ホスト
5…メモリ部
10…CPUコア
11…LDPCデコーダ
12…LMEM
13…演算部
14…TMEM
15…バッファ
16…LLR変換部
20…HOST I/F
21…バッファ
22…LDPCエンコーダ
23…セレクタ
24…バッファ
25…NAND I/F
103…メモリコントローラ
113…演算部
113A…ローテイター
2、2A、2B…メモリカード
3、3A、3B…メモリコントローラ
4…ホスト
5…メモリ部
10…CPUコア
11…LDPCデコーダ
12…LMEM
13…演算部
14…TMEM
15…バッファ
16…LLR変換部
20…HOST I/F
21…バッファ
22…LDPCエンコーダ
23…セレクタ
24…バッファ
25…NAND I/F
103…メモリコントローラ
113…演算部
113A…ローテイター
Claims (6)
- 低密度パリティ符号により符号化されたフレーム単位のデータを、単位行列からなるブロックと、前記単位行列の各行が順にシフトしている複数のブロックと、からなる検査行列をもとに、部分並列処理により復号を行うときに、
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のメモリ部に転送する工程と、
前記確率情報から一時推定語を算出する工程と、
前記一時推定語をもとにパリティチェックを行う工程と、を具備する。
Priority Applications (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2011110719A JP2012244305A (ja) | 2011-05-17 | 2011-05-17 | メモリコントローラ、半導体メモリ装置、および復号方法 |
| US13/235,395 US8782496B2 (en) | 2011-05-17 | 2011-09-18 | Memory controller, semiconductor memory apparatus and decoding method |
| US14/303,280 US20140298142A1 (en) | 2011-05-17 | 2014-06-12 | Memory controller, semiconductor memory apparatus and decoding method |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2011110719A JP2012244305A (ja) | 2011-05-17 | 2011-05-17 | メモリコントローラ、半導体メモリ装置、および復号方法 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JP2012244305A true JP2012244305A (ja) | 2012-12-10 |
Family
ID=47175895
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2011110719A Withdrawn JP2012244305A (ja) | 2011-05-17 | 2011-05-17 | メモリコントローラ、半導体メモリ装置、および復号方法 |
Country Status (2)
| Country | Link |
|---|---|
| US (2) | US8782496B2 (ja) |
| JP (1) | JP2012244305A (ja) |
Cited By (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US10430275B2 (en) | 2017-09-19 | 2019-10-01 | Toshiba Memory Corporation | Memory system |
| US10437668B2 (en) | 2017-03-06 | 2019-10-08 | Toshiba Memory Corporation | Memory controller, memory system, and method for controlling memory system |
| US10763898B2 (en) | 2016-09-13 | 2020-09-01 | Toshiba Memory Corporation | Memory system that carries out soft bit decoding |
| US10803930B2 (en) | 2018-03-22 | 2020-10-13 | Toshiba Memory Corporation | Memory system including a memory controller and error correction circuit for reading multi-bit data and for detecting and correcting read data errors |
| US11163639B2 (en) | 2019-09-19 | 2021-11-02 | Kioxia Corporation | Memory system and method for controlling nonvolatile memory |
Families Citing this family (28)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US9244760B2 (en) * | 2011-08-09 | 2016-01-26 | Panasonic Intellectual Property Management Co., Ltd. | Decoding apparatus and decoding method |
| JP2013080450A (ja) * | 2011-09-22 | 2013-05-02 | Toshiba Corp | メモリ装置 |
| WO2013140727A1 (ja) * | 2012-03-19 | 2013-09-26 | パナソニック株式会社 | 復号装置 |
| US9136011B2 (en) * | 2012-04-26 | 2015-09-15 | Hgst Technologies Santa Ana, Inc. | Soft information module |
| CN103001738B (zh) * | 2012-11-23 | 2016-03-02 | 华为技术有限公司 | 接收机及数据处理的方法 |
| US9021331B2 (en) * | 2013-03-14 | 2015-04-28 | Seagate Technology Llc | Method and apparatus for generation of soft decision error correction code information |
| US9450619B2 (en) * | 2013-03-22 | 2016-09-20 | Seagate Technology Llc | Dynamic log likelihood ratio quantization for solid state drive controllers |
| US20150254130A1 (en) * | 2013-12-03 | 2015-09-10 | Kabushiki Kaisha Toshiba | Error correction decoder |
| KR102110767B1 (ko) * | 2013-12-24 | 2020-06-09 | 삼성전자 주식회사 | 메모리 컨트롤러 구동방법 및 메모리 컨트롤러 |
| US9798613B2 (en) * | 2013-12-27 | 2017-10-24 | Toshiba Memory Corporation | Controller of nonvolatile semiconductor memory |
| KR20150091693A (ko) | 2014-02-03 | 2015-08-12 | 삼성전자주식회사 | 플래쉬 메모리 읽기 방법 |
| KR102127287B1 (ko) | 2014-02-11 | 2020-06-26 | 삼성전자주식회사 | 메모리 컨트롤러 및 메모리 컨트롤러가 불휘발성 메모리로부터 데이터를 읽는 데이터 읽기 방법 |
| KR102128471B1 (ko) | 2014-03-11 | 2020-06-30 | 삼성전자주식회사 | 폴라 부호의 리스트 복호 방법 및 이를 적용한 메모리 시스템 |
| CN105846830B (zh) * | 2015-01-14 | 2019-07-30 | 北京航空航天大学 | 数据处理装置 |
| US10164656B2 (en) | 2016-03-30 | 2018-12-25 | Silicon Motion Inc. | Bit flipping algorithm for providing soft information during hard decision hard decoding |
| KR102589918B1 (ko) | 2016-07-19 | 2023-10-18 | 삼성전자주식회사 | 저밀도 패리티 체크 디코더 및 그것을 포함하는 저장 장치 |
| EP3531561B1 (en) * | 2016-12-27 | 2023-07-12 | Huawei Technologies Co., Ltd. | Layered min-sum decoding for qc-ldpc codes according to increasing row weights |
| JP6779819B2 (ja) * | 2017-03-22 | 2020-11-04 | キオクシア株式会社 | 半導体記憶装置 |
| JP2018163709A (ja) * | 2017-03-24 | 2018-10-18 | 東芝メモリ株式会社 | メモリシステム |
| US10469103B1 (en) * | 2017-04-19 | 2019-11-05 | Seagate Technology Llc | Adaptive read retry optimization |
| WO2019000206A1 (en) * | 2017-06-27 | 2019-01-03 | Intel Corporation | METHODS AND APPARATUS FOR PERFORMING ERROR DETECTION AND / OR CORRECTION IN A MEMORY DEVICE |
| US11099781B2 (en) | 2018-07-19 | 2021-08-24 | Silicon Motion, Inc. | Flash memory controller, flash memory module and associated electronic device |
| TWI672698B (zh) * | 2018-11-23 | 2019-09-21 | 群聯電子股份有限公司 | 記憶體控制方法、記憶體儲存裝置及記憶體控制電路單元 |
| US10847241B2 (en) * | 2019-03-12 | 2020-11-24 | Kabushiki Kaisha Toshiba | Joint soft boundaries and LLRS update for flash memory |
| CN116131864A (zh) * | 2021-11-15 | 2023-05-16 | 深圳市中兴微电子技术有限公司 | 并行译码方法及装置、存储介质、电子装置 |
| TWI895029B (zh) * | 2023-10-04 | 2025-08-21 | 新加坡商瑞昱新加坡有限公司 | 低密度奇偶檢查解碼器 |
| US12476655B2 (en) | 2023-10-04 | 2025-11-18 | Realtek Singapore Private Limited | Low-density parity check decoder |
| US20250117284A1 (en) * | 2023-10-04 | 2025-04-10 | Cortina Access, Inc. | Low-density parity check decoder |
Family Cites Families (10)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US7184486B1 (en) * | 2000-04-27 | 2007-02-27 | Marvell International Ltd. | LDPC encoder and decoder and method thereof |
| KR100444571B1 (ko) * | 2002-01-11 | 2004-08-16 | 삼성전자주식회사 | 터보디코더와 알에스디코더가 연접된 디코딩장치 및 그의디코딩방법 |
| US7178080B2 (en) * | 2002-08-15 | 2007-02-13 | Texas Instruments Incorporated | Hardware-efficient low density parity check code for digital communications |
| US7120856B2 (en) * | 2002-09-25 | 2006-10-10 | Leanics Corporation | LDPC code and encoder/decoder regarding same |
| US20060156171A1 (en) * | 2004-12-15 | 2006-07-13 | Seagate Technology Llc | Combining spectral shaping with turbo coding in a channel coding system |
| US8438459B2 (en) * | 2004-12-22 | 2013-05-07 | Lg Electronics Inc. | Apparatus and method for decoding using channel code |
| JP4519694B2 (ja) | 2005-03-29 | 2010-08-04 | 財団法人北九州産業学術推進機構 | Ldpc符号検出装置及びldpc符号検出方法 |
| US20070089016A1 (en) * | 2005-10-18 | 2007-04-19 | Nokia Corporation | Block serial pipelined layered decoding architecture for structured low-density parity-check (LDPC) codes |
| FR2900294B1 (fr) * | 2006-04-19 | 2008-07-04 | St Microelectronics Sa | Chargement de la memoire d'entree d'un decodeur ldpc avec des donnees a decoder |
| US8301979B2 (en) | 2008-10-07 | 2012-10-30 | Sandisk Il Ltd. | Low density parity code (LDPC) decoding for memory with multiple log likelihood ratio (LLR) decoders |
-
2011
- 2011-05-17 JP JP2011110719A patent/JP2012244305A/ja not_active Withdrawn
- 2011-09-18 US US13/235,395 patent/US8782496B2/en active Active
-
2014
- 2014-06-12 US US14/303,280 patent/US20140298142A1/en not_active Abandoned
Cited By (9)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US10763898B2 (en) | 2016-09-13 | 2020-09-01 | Toshiba Memory Corporation | Memory system that carries out soft bit decoding |
| US11336307B2 (en) | 2016-09-13 | 2022-05-17 | Kioxia Corporation | Memory system that carries out soft bit decoding |
| US10437668B2 (en) | 2017-03-06 | 2019-10-08 | Toshiba Memory Corporation | Memory controller, memory system, and method for controlling memory system |
| US10430275B2 (en) | 2017-09-19 | 2019-10-01 | Toshiba Memory Corporation | Memory system |
| US10956264B2 (en) | 2017-09-19 | 2021-03-23 | Toshiba Memory Corporation | Memory system |
| US11537465B2 (en) | 2017-09-19 | 2022-12-27 | Kioxia Corporation | Memory system |
| US11892907B2 (en) | 2017-09-19 | 2024-02-06 | Kioxia Corporation | Memory system |
| US10803930B2 (en) | 2018-03-22 | 2020-10-13 | Toshiba Memory Corporation | Memory system including a memory controller and error correction circuit for reading multi-bit data and for detecting and correcting read data errors |
| US11163639B2 (en) | 2019-09-19 | 2021-11-02 | Kioxia Corporation | Memory system and method for controlling nonvolatile memory |
Also Published As
| Publication number | Publication date |
|---|---|
| US20120297273A1 (en) | 2012-11-22 |
| US20140298142A1 (en) | 2014-10-02 |
| US8782496B2 (en) | 2014-07-15 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP2012244305A (ja) | メモリコントローラ、半導体メモリ装置、および復号方法 | |
| JP5112468B2 (ja) | 誤り検出訂正回路、メモリコントローラ、および半導体メモリ装置 | |
| US10628256B2 (en) | Updating reliability data | |
| JP5197544B2 (ja) | メモリシステム | |
| CN101803210B (zh) | 使用块结构奇偶校验矩阵来提供半并行低密度奇偶校验解码的方法、装置和设备 | |
| US9195536B2 (en) | Error correction decoder and error correction decoding method | |
| US20110258370A1 (en) | Multiple programming of flash memory without erase | |
| US11115064B2 (en) | Error correction decoder and memory system having the same | |
| CN107124187B (zh) | 一种应用于闪存的基于等差校验矩阵的ldpc码译码器 | |
| JP2012181761A (ja) | 半導体メモリ装置および復号方法 | |
| US9236886B1 (en) | Universal and reconfigurable QC-LDPC encoder | |
| KR102543059B1 (ko) | 저밀도 패리티 체크 코드의 디코딩 방법, 이를 수행하는 디코더 및 시스템 | |
| CN115220690A (zh) | 存储器装置及其操作方法 | |
| HK1216200A1 (zh) | 具有早期解碼終止檢測的解碼器 | |
| US12301253B2 (en) | Check node data compression in memory systems | |
| US20150254130A1 (en) | Error correction decoder | |
| US10884858B2 (en) | LDPC decoding device, memory system including the same and method thereof | |
| CN118227370A (zh) | 用于校验位翻转解码器中的错误的设备和方法 | |
| CN110971240A (zh) | 解码器设计方法与存储控制器 | |
| CN110071726A (zh) | 多层单元闪存中联合ldpc码的构造方法及其译码装置 | |
| CN114301471A (zh) | 固态硬盘中的译码方法、固态硬盘及电子设备 | |
| CN107959502B (zh) | 一种ldpc编码方法 | |
| TWI910183B (zh) | 用於自循環置換矩陣之叢集建構之準循環低密度奇偶檢查碼之垂直分層解碼之方法及裝置 | |
| KR20110043337A (ko) | Ldpc 복호기의 체크노드 갱신값 저장 방법 및 장치 | |
| CN107959500B (zh) | Ldpc编码器的构造方法 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A300 | Application deemed to be withdrawn because no request for examination was validly filed |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20140805 |
