JP2022133071A - メモリシステム - Google Patents
メモリシステム Download PDFInfo
- Publication number
- JP2022133071A JP2022133071A JP2021031909A JP2021031909A JP2022133071A JP 2022133071 A JP2022133071 A JP 2022133071A JP 2021031909 A JP2021031909 A JP 2021031909A JP 2021031909 A JP2021031909 A JP 2021031909A JP 2022133071 A JP2022133071 A JP 2022133071A
- Authority
- JP
- Japan
- Prior art keywords
- decoding
- decoding process
- component
- code
- memory
- 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.)
- Pending
Links
Images
Classifications
-
- 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/29—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 combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes
- H03M13/2906—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 combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes using block codes
- H03M13/2909—Product codes
-
- 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/13—Linear codes
- H03M13/15—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
- H03M13/151—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
- H03M13/1565—Decoding beyond the bounded minimum distance [BMD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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/1012—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 codes or arrangements adapted for a specific type of error
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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
-
- 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/29—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 combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes
- H03M13/2906—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 combining two or more codes or code structures, e.g. product codes, generalised product codes, concatenated codes, inner and outer codes using block codes
- H03M13/2927—Decoding strategies
-
- 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/13—Linear codes
- H03M13/15—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
- H03M13/151—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
- H03M13/152—Bose-Chaudhuri-Hocquenghem [BCH] codes
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Probability & Statistics with Applications (AREA)
- Mathematical Physics (AREA)
- Quality & Reliability (AREA)
- General Engineering & Computer Science (AREA)
- Algebra (AREA)
- Pure & Applied Mathematics (AREA)
- Error Detection And Correction (AREA)
Abstract
【課題】誤り訂正(復号)能力を向上させる。【解決手段】実施形態のメモリシステムは、不揮発性メモリと、メモリコントローラと、を備える。メモリコントローラは、誤り訂正符号で符号化されたデータを不揮発性メモリから読み出し、N個の成分符号群に含まれる成分符号それぞれにより保護されるデータに対して限界距離復号を繰り返し実行する第1の復号処理を実行し、第1の復号処理に失敗した場合に、N個の成分符号群に含まれる成分符号のシンドロームによりエラーが含まれていると判定されるエラーシンボル群に対して、成分符号単位で限界距離を超えた復号を繰り返し実行する第2の復号処理を実行し、第2の復号処理の後に実行する第1の復号処理に失敗した場合にロールバック処理を実行し、第2の復号処理が停滞していることを検出した場合に、第2の復号処理で用いるパラメタを変更して第2の復号処理をさらに実行する。【選択図】図1
Description
以下の実施形態は、メモリシステムに関する。
メモリシステムでは、一般に、記憶するデータを保護するために、誤り訂正符号化されたデータが記憶される。このため、メモリシステムに記憶されたデータを読み出す際には、誤り訂正符号化されたデータに対する復号が行われる。
本発明の実施形態は、誤り訂正(復号)能力を向上させることができるメモリシステムを提供することを目的とする。
実施形態のメモリシステムは、不揮発性メモリと、メモリコントローラと、を備える。メモリコントローラは、誤り訂正符号で符号化されたデータを不揮発性メモリから読み出し、N個の成分符号群に含まれる成分符号それぞれにより保護されるデータに対して限界距離復号を繰り返し実行する第1の復号処理を実行し、第1の復号処理に失敗した場合に、N個の成分符号群のシンドロームによりエラーが含まれていると判定されるエラーシンボル群に対して、成分符号単位で限界距離を超えた復号を繰り返し実行する第2の復号処理を実行し、第2の復号処理の後に実行する第1の復号処理に失敗した場合にロールバック処理を実行し、第2の復号処理が停滞していることを検出した場合に、第2の復号処理で用いるパラメタを変更して第2の復号処理をさらに実行する。
以下に添付図面を参照して、実施形態に係るメモリシステムを詳細に説明する。なお、以下の実施形態により本発明が限定されるものではない。
図1は、本実施形態に係るメモリシステムの概略構成例を示すブロック図である。図1に示すように、メモリシステム1は、メモリコントローラ10と不揮発性メモリ20とを備える。メモリシステム1は、ホスト30と接続可能であり、図1ではホスト30と接続された状態が示されている。ホスト30は、例えば、パーソナルコンピュータ、携帯端末などの電子機器であってよい。
不揮発性メモリ20は、データを不揮発に記憶する不揮発性メモリであり、例えば、NAND型フラッシュメモリ(以下、単にNANDメモリという)である。以下の説明では、不揮発性メモリ20としてNANDメモリが用いられた場合を例示するが、不揮発性メモリ20として3次元構造フラッシュメモリ、ReRAM(Resistance Random Access Memory)、FeRAM(Ferroelectric Random Access Memory)等のNANDメモリ以外の記憶装置を用いることも可能である。また、不揮発性メモリ20が半導体メモリであることは必須ではなく、半導体メモリ以外の種々の記憶媒体に対して本実施形態を適用することも可能である。
メモリシステム1は、メモリコントローラ10と不揮発性メモリ20とが1つのパッケージとして構成されるメモリカード等であってもよいし、SSD(Solid State Drive)等であってもよい。
メモリコントローラ10は、例えばSoC(System-On-a-Chip)として構成される半導体集積回路である。以下で説明するメモリコントローラ10の各構成要素の動作の一部又は全部は、CPU(Central Processing Unit)がファームウエアを実行することによって実現されてもよいし、ハードウエアで実現されてもよい。
メモリコントローラ10は、ホスト30からの書込み要求に従って不揮発性メモリ20への書込みを制御する。また、メモリコントローラ10は、ホスト30からの読出し要求に従って不揮発性メモリ20からの読み出しを制御する。メモリコントローラ10は、ホストI/F(ホストインタフェース)15、メモリI/F(メモリインタフェース)13、制御部11、符号化/復号部(コーデック)14、および、データバッファ12を備える。ホストI/F15、メモリI/F13、制御部11、符号化/復号部14、および、データバッファ12は、内部バス16で相互に接続されている。
ホストI/F15は、ホスト30との間のインタフェース規格に従った処理を実施し、ホスト30から受信した要求、書込み対象のユーザデータなどを内部バス16に出力する。また、ホストI/F15は、不揮発性メモリ20から読み出されて復元されたユーザデータ、制御部11からの応答などをホスト30へ送信する。
メモリI/F13は、制御部11の指示に基づいて、不揮発性メモリ20への書込み処理を行う。また、メモリI/F13は、制御部11の指示に基づいて、不揮発性メモリ20からの読み出し処理を行う。
データバッファ12は、メモリコントローラ10がホスト30から受信したユーザデータを不揮発性メモリ20へ記憶するまでに一時記憶する。また、データバッファ12は、不揮発性メモリ20から読み出したユーザデータをホスト30へ送信するまでに一時記憶する。データバッファ12には、例えば、SRAM(Static Random Access Memory)やDRAM(Dynamic Random Access Memory)などの汎用メモリを用いることができる。
制御部11は、メモリシステム1の各構成要素を統括的に制御する。制御部11は、ホスト30からの要求をホストI/F15経由で受け付けた場合に、その要求に応じた制御を行う。例えば、制御部11は、ホスト30からの書込み要求に応じて、不揮発性メモリ20へのユーザデータおよびパリティの書き込みをメモリI/F13へ指示する。また、制御部11は、ホスト30からの読出し要求に応じて、不揮発性メモリ20からのユーザデータおよびパリティの読み出しをメモリI/F13へ指示する。
また、制御部11は、ホスト30からユーザデータの書込み要求を受信した場合、データバッファ12に蓄積されるユーザデータに対して、不揮発性メモリ20上の記憶領域(メモリ領域)を決定する。すなわち、制御部11は、ユーザデータの書込み先を管理する。ホスト30から受信したユーザデータの論理アドレスと該ユーザデータが記憶された不揮発性メモリ20上の記憶領域を示す物理アドレスとの対応は、アドレス変換テーブルとして例えばデータバッファ12に記憶される。
また、制御部11は、ホスト30から読出し要求を受信した場合、読出し要求により指定された論理アドレスを上述のアドレス変換テーブルを用いて物理アドレスに変換し、該物理アドレスからの読み出しをメモリI/F13へ指示する。
ここで、NANDメモリでは、一般に、ページと呼ばれるデータ単位で、書き込みおよび読み出しが行われ、ページよりも大きい所定のデータ単位で消去が行われる。本実施形態では、同一のワード線に接続される複数のメモリセルをメモリセルグループと呼ぶ。メモリセルがシングルレベルセル(SLC)である場合は、1つのメモリセルグループが1ページに対応する。メモリセルがマルチレベルセル(MLC)である場合は、1つのメモリセルグループが複数ページに対応する。また、各メモリセルはワード線に接続するとともにビット線にも接続される。従って、各メモリセルは、ワード線を識別するアドレスとビット線を識別するアドレスとで識別することが可能である。
例えばメモリセルが2ビット/セルのメモリセルである場合、Er、A、B、Cレベルの4つの閾値分布に2ビットのデータ値がそれぞれ対応づけられる。この対応をデータコーディングという。データコーディングは予め定められる。データの書き込み(プログラム)時には、データコーディングに従って記憶するデータ値に応じたレベル(閾値分布)となるようにメモリセルに電荷が注入される。また、2ビット/セルを用いる場合、1つのメモリセルグループは2ページに対応する。各メモリセルが記憶可能な2ビットは、それぞれこの2ページに対応する。以下では、この2ページをロアーページおよびアッパーページと呼ぶ。
ホスト30から送信されるユーザデータは、内部バス16に転送されてデータバッファ12に一旦記憶される。符号化/復号部14は、不揮発性メモリ20に記憶されるユーザデータを誤り訂正符号で符号化して符号化データ(符号語)を生成する。また、符号化/復号部14は、不揮発性メモリ20から読み出された符号化データ(読出し情報又は受信語ともいう)を復号してユーザデータを復元する。なお、符号化/復号部14により符号化されるデータには、ユーザデータ以外にも、メモリコントローラ10内部で用いる制御データ等が含まれてもよい。
以上のような構成を備えるメモリシステム1における書込み処理では、制御部11は、不揮発性メモリ20への書込み時に、ユーザデータの符号化を符号化/復号部14に指示する。その際、制御部11は、不揮発性メモリ20における符号語の記憶場所(記憶アドレス)を決定し、決定した記憶場所もメモリI/F13へ指示する。符号化/復号部14は、制御部11からの指示に基づいて、データバッファ12上のユーザデータを誤り訂正符号で符号化して符号語を生成する。符号化方式としては、例えば、LDPC(Low-Density Parity-Check)符号やBCH(Bose-Chaudhuri-Hocquenghem)符号やRS(Reed-Solomon)符号を用いた符号化方式を採用することができる。メモリI/F13は、制御部11からの指示に基づいて符号語を不揮発性メモリ20に書き込む。
一方、読出し処理では、制御部11は、不揮発性メモリ20からの読出し時に、不揮発性メモリ20上のアドレスを指定してメモリI/F13へ読み出しを指示する。また、制御部11は、符号化/復号部14へ復号の開始を指示する。メモリI/F13は、制御部11の指示に従って、不揮発性メモリ20の指定されたアドレスに対する読み出しを実行し、この読み出しにより得られた読出し情報を符号化/復号部14に入力する。そして、符号化/復号部14は、入力された読出し情報を復号する。
符号化/復号部14は、例えば、多次元の誤り訂正符号の各成分符号の符号化部/復号部として用いることもできる。多次元の誤り訂正符号とは、誤り訂正符号の少なくとも一つ以上の構成単位であるシンボルが、複数のより小規模な成分符号によって多重に保護されているものを指す。その際、1シンボルは、例えば1ビット(二元体(binary field)の元(element))、又は、二元体以外の有限体(finite field)などのアルファベットの元で構成される。
ここで、多次元の誤り訂正符号の例として、図2に積符号の構成例を示す。図2に示す積符号200は、限界距離復号により3ビットを訂正可能なBCH符号を、行方向の成分符号(第1の成分符号の一例)および列方向の成分符号(第2の成分符号の一例)とする積符号の例である。また積符号200は、行方向および列方向にそれぞれ4個のブロックを含む2次元ブロック積符号の例である。各ブロックは、符号を構成する複数のシンボルを含む。各ブロックは、符号を構成する複数のシンボルの集合であるシンボル群に相当する。
なお行方向および列方向のブロック数は4個に限られるものではない。以下では、限界距離復号により3ビットを訂正可能なBCH符号を成分符号として用いる例を説明するが、限界距離復号によりnビット(nは1以上の整数)以下の誤りを訂正可能な符号が用いられてもよい。また、成分符号はBCH以外のどのような符号を用いてもよい。例えば、リードソロモン符号を、行方向および列方向の少なくとも一方の成分符号として用いてもよい。
図2のような積符号の復号では、例えば符号化/復号部14は、まず積符号を構成する行方向の成分符号を順次復号する。符号化/復号部14は、例えば限界距離復号により成分符号を復号する。行方向の成分符号のうち復号に成功しない成分符号があった場合、符号化/復号部14は、行方向の成分符号の復号において訂正できた誤りを訂正し、列方向の成分符号を復号する。列方向の成分符号のうち復号に成功しない成分符号があった場合、符号化/復号部14は、列方向の成分符号の復号において訂正できた誤りを訂正し、再度、行方向の成分符号を復号する。以上のように、行方向の成分符号の復号と列方向の成分符号の復号とが、終了条件を満たすまで繰り返し実行される。以下では、このように繰り返される復号を反復復号処理という場合がある。また限界距離復号を繰り返し実行する反復復号処理を反復限界距離復号という場合がある。積符号は、訂正能力が高く計算量の小さい符号化方式を実現するために使用される。
なお、多次元の誤り訂正符号としては、図2に例示する積符号200に限定されず、例えば一般化LDPC符号(Generalized Low Density Parity Check Code)などであってもよい。一般化LDPC符号を含む一般の多次元の誤り訂正符号では、シンボルごとに保護の多重度が異なっていてもよい。また、一般の多次元の誤り訂正符号では成分符号を行方向と列方向でグループ分けすることができない場合があるが、このような符号構造を有する多次元の誤り訂正符号に対しても本技術は適用することが可能である。以下では、多次元の誤り訂正符号としてブロック積符号を用いた場合を例に説明する。
ブロック積符号では、各ブロックに複数のシンボル(例えばビット)が割り当てられる。このため、1つのブロック内に多数のエラーが発生した場合、行方向および列方向の復号を繰り返してもエラーが訂正できず、エラーフロアが生じる。
図2は、不揮発性メモリ20から読み出された読出し情報の例を示している。図2内の数値は、ブロック内のエラーとなったシンボルの個数を表す。各成分符号にエラーがあるか否かは、例えばシンドロームが0であるか(エラーなし)そうでないか(エラーあり)により判定することができる。図2内の記号「E」はエラーがあると判定された成分符号を表す。
本実施形態では、多数のエラーが含まれるブロックが存在するような場合に、このブロック内のシンボルの値を反転(フリップ)して復号を行う。このような技術としては、例えばMulti-Bit Flip Decoding(MBFD)が適用できる。ここで、各シンボルがq個の元からなる有限体GF(q)の元で構成される場合、反転対象のシンボルをα∈GF(q)とすると、反転後には対象シンボルはα以外のGF(q)の任意の元に変更される。例えばGF(2)={0,1}の場合、反転により対象シンボルが0である場合は1に、1である場合は0に変更される。以降の説明では、各シンボルが二元体の元(ビット)であることを仮定する。以下、このような復号を行う符号化/復号部14の詳細について説明する。
図3は、符号化/復号部14の機能構成の一例を示すブロック図である。図3は、図2に示すような2次元の積符号の符号化/復号を行う場合の例を示す。以下では主に2次元の誤り訂正符号を例に説明する。各次元の成分符号それぞれは、次元ごとに定められる1個以上の成分符号を含む。以下では、1個以上の成分符号を含む、各次元に対応する成分符号を成分符号群という場合がある。例えば行方向の成分符号群および列方向の成分符号群は、それぞれ、行数分の成分符号および列数分の成分符号を含む。誤り訂正符号は2次元に限られず、多次元の誤り訂正符号、すなわち、複数のシンボル群それぞれがN個(Nは2以上の整数)の成分符号群によって保護されているN次元の誤り訂正符号について同様の手法を適用できる。
図3に示すように、符号化/復号部14は、符号化部301と、復号部302と、検出部303と、パラメタ制御部304と、を含む。符号化部301は、行方向および列方向の成分符号を符号化する。復号部302は、N個の成分符号群(2次元の場合は行方向の成分符号群および列方向の成分符号群)に含まれる成分符号それぞれにより保護されるデータに対して限界距離復号を繰り返し実行する反復復号処理(復号処理D-A、第1の復号処理)を実行する。また、復号部302は、反復復号処理に失敗した場合に、N個の成分符号群に含まれる成分符号のシンドローム(2次元の場合は行方向の成分符号群に含まれる成分符号および列方向の成分符号群に含まれる成分符号の両方のシンドローム)によりエラーが含まれていると判定されるブロック(エラーシンボル群)を含む成分符号に対して、成分符号単位で限界距離を超えた復号((n+1)ビット以上の誤りを訂正する復号)を繰り返し実行する復号処理D-B(第2の復号処理)を実行する。限界距離復号により3ビット(n=3)を訂正可能なBCH符号を用いる場合、復号処理D-Bは、例えば、エラーが残留している行および列の交差部のビットをフリップしてから限界距離復号(3ビット訂正処理)を行うことで4ビット以上の訂正を実現する。復号処理D-Bは、例えばMBFDである。以下では、復号処理D-BとしてMBFDを用いる例を説明する。
MBFDは、対象次元(行または列)の1以上の成分符号に対して繰り返し実行される。対象次元は、一部の次元であってもよいし、すべての次元であってもよい。以下では、ある対象次元の成分符号に対して繰り返し実行されるMBFDを反復MBFDという場合がある。反復MBFDは、以下のような手順で実行される。
(S1)対象次元の成分符号のうち、シンドロームが0でない1つの成分符号を処理対象の成分符号(以下、対象成分符号)として選択する。なお、シンドロームが0である成分符号に対しては処理がスキップされる。
(S2)対象成分符号と、シンドロームが0でない対向次元の成分符号と、の両方に含まれるブロック(交差部に相当するブロック)を、対象ブロックとする。対向次元とは、対象次元以外の次元を表す。例えば対象次元が行方向の次元の場合、列方向の次元が対向次元となる。
(S3)対象ブロックにおいて「フリップするシンボルを選択し、選択したシンボルをフリップしてから成分符号の復号処理を実行する」という処理を、フリップするシンボルの位置(フリップパタン)を変更し、復号に成功するまで繰り返す。
(S4)すべてのフリップパタンについて(S3)を実行しても復号に成功しなければ、別のブロックを対象ブロックとして、(S3)の処理を実行する。
(S5)対象次元のすべての成分符号に対してMBFDを実行したら反復MBFDを終了する。以下に述べるように、MBFDで採用する解の個数が上限(最大値)に達した場合に反復MBFDを終了してもよい。
(S1)対象次元の成分符号のうち、シンドロームが0でない1つの成分符号を処理対象の成分符号(以下、対象成分符号)として選択する。なお、シンドロームが0である成分符号に対しては処理がスキップされる。
(S2)対象成分符号と、シンドロームが0でない対向次元の成分符号と、の両方に含まれるブロック(交差部に相当するブロック)を、対象ブロックとする。対向次元とは、対象次元以外の次元を表す。例えば対象次元が行方向の次元の場合、列方向の次元が対向次元となる。
(S3)対象ブロックにおいて「フリップするシンボルを選択し、選択したシンボルをフリップしてから成分符号の復号処理を実行する」という処理を、フリップするシンボルの位置(フリップパタン)を変更し、復号に成功するまで繰り返す。
(S4)すべてのフリップパタンについて(S3)を実行しても復号に成功しなければ、別のブロックを対象ブロックとして、(S3)の処理を実行する。
(S5)対象次元のすべての成分符号に対してMBFDを実行したら反復MBFDを終了する。以下に述べるように、MBFDで採用する解の個数が上限(最大値)に達した場合に反復MBFDを終了してもよい。
MBFDで採用する解とは、MBFDによる復号が成功した成分符号(MBFDで誤りを訂正する成分符号)である。例えば行方向の成分符号に対してMBFDを実行する場合、MBFDが成功した行方向の成分符号の個数(行数)の上限が、採用する解の個数の上限に相当する。1回の反復MBFDでは、1つまたは複数の成分符号が処理対象となりうる。
復号部302は、MBFDを実行する成分符号を予め定められた順序で決定する。例えば行方向の成分符号に対してMBFDを実行する場合、復号部302は、1行目、2行目、・・・のように行番号が昇順となる順序でMBFDを実行する成分符号を決定する。繰り返し反復MBFDを実行する場合は、復号部302は、前回の反復MBFDで最後に処理対象となった成分符号の次の順序に相当する成分符号から、MBFDを開始する。例えば、1行目の成分符号と2行目の成分符号とがともにシンドロームが0でなく、かつ、前回の反復MBFDで最後に処理対象となった成分符号が1行目の成分符号だった場合、その後に実行する反復MBFDでは、2行目の成分符号から処理が開始される。
復号部302は、MBFDを実行している次元(例えば行方向の次元)に対向する次元(例えば列方向の次元)のシンドロームが0であるビットをフリップするフリップパタンは棄却するなどの処理を行ってもよい。
MBFDを実行後、復号部302は、さらに反復復号処理(復号処理D-A)を実行する。図4は、反復復号処理およびMBFDの実行例を示す図である。
データ211は、不揮発性メモリ20から読み出された読出し情報に相当する。復号部302は、データ211に対して、例えば行方向の成分符号の限界距離復号(3ビット訂正処理)を実行し、復号後のデータ212を得る。図4の例では、3ビットのエラーを含んでいた1行目および4行目の成分符号が、エラーを含まない符号に復号される。なお括弧内の数値は、復号処理によりエラーがなくなったシンボルの個数を表す。
次に復号部302は、データ212に対して、列方向の成分符号の限界距離復号(3ビット訂正処理)を実行し、復号後のデータ213を得る。図4の例では、2ビットのエラーを含んでいた1列目および4列目の成分符号が、エラーを含まない符号に復号される。
データ213の成分符号のうちエラーを含む成分符号はいずれも4ビット以上のエラーを含むため、さらに反復復号処理(3ビット訂正処理)を実行しても復号は成功しない。
そこで復号部302は、MBFDを実行する。例えば復号部302は、2行目の成分符号に対してMBFDを実行し、復号後のデータ214を得る。これにより4ビットのエラーを含んでいた2行目の成分符号が、エラーを含まない符号に復号される。
その後、復号部302は、さらに反復復号処理を実行する。図4に示すように、例えば復号部302は、3ビットのエラーを含む2列目および3列目の成分符号の限界距離復号(3ビット訂正処理)を実行し、エラーを含まないデータ215を得る。
図4ではMBFDにより4ビットのエラーが正しく訂正される例が示されているが、MBFDでは、誤訂正が発生する場合がある。このため、復号部302は、その後に実行する反復復号処理に成功しなければ、MBFDを取り消し、MBFDを実行する前の状態に戻すロールバック処理を行う。
図5は、ロールバック処理の例を説明するための図である。図5は、図4と同様のデータ213に対してMBFDを実行する例を示す。すなわち復号部302は、2行目の成分符号に対してMBFDを実行し、復号後のデータ221を得る。データ221は、MBFDで誤訂正が発生したため、エラーが減少せず、逆にエラーが増加したデータの例である。「+2」は、2個のエラーが増加したことを示す。
このような場合、復号部302がデータ221に対して列方向の限界距離復号(3ビット訂正処理)を実行しても、エラーの訂正に失敗する。データ222は、訂正に失敗したデータに相当する。このような場合、復号部302は、直前の回に実行した反復MBFDを取り消すロールバック処理を実行する。データ223は、ロールバック処理によりMBFDを実行する前の状態に戻されたデータ(データ213と同じデータ)に相当する。
この後、復号部302は、行方向ではなく列方向(例えば2列目の成分符号)のMBFDを実行する。この列方向のMBFDが誤訂正でなければ、その後の行方向(例えば2行目、3行目の成分符号)の限界距離復号(3ビット訂正処理)を成功させることが可能となる。
このように、ロールバック処理は、誤訂正を解消し、復号処理を進めるために実行される。一方、MBFDが誤訂正ではなく成功している場合であっても、直後の反復復号処理に失敗するとロールバック処理によりMBFDによる復号結果が棄却され、復号処理が停滞する状況が生じ得る。図6は、このような状況の一例を説明するための図である。
データ231は、MBFDによる復号開始時のデータである。復号部302は、1行目の成分符号に対してMBFDを実行し、復号後のデータ232を得る。データ232は、MBFDで正しく訂正されたデータの例である(正訂正)。一方、データ232には多数のエラーが残留しているため、直後に実行される反復復号処理(3ビット訂正処理)が失敗する。データ233は、データ232に対して反復復号処理を実行した結果、エラーが減少しなかったデータの例である。この場合、復号部302は、データ233に対してロールバック処理を実行し、データ234を得る。
データ234は、データ231と同じデータであるため、この後、MBFDを実行しても同様の処理が繰り返し実行される。その結果、例えば、処理を繰り返し実行している途中でレイテンシの制限値に達して復号に失敗したと判断される。
そこで、本実施形態では、検出部303が、例えばレイテンシの制限値に達する前に、復号処理の停滞を検出する。停滞が検出された場合、パラメタ制御部304は、MBFDで用いるパラメタを変更する。検出部303およびパラメタ制御部304の詳細は後述する。
パラメタが変更された後、復号部302は、変更したパラメタを用いてMBFDをさらに実行する。図7は、パラメタを変更してMBFDを実行する例を説明する図である。
図7は、ロールバック処理を実行するか否かを示す情報(例えばロールバック実行フラグ)をパラメタとして変更する例である。例えば検出部303により復号処理の停滞が検出されると、パラメタ制御部304は、ロールバック実行フラグを「実行する」から「実行しない」に変更する。
この場合、復号部302は、例えばデータ233に対して、さらに列方向のMBFDを実行する。データ241は、2列目に対するMBFDにより得られるデータである。2列目の成分符号が正しく訂正されたとすると、直後の行方向の3ビット訂正処理により、2行目および3行目のエラーが正しく訂正されたデータ242が得られる。また、データ242に対する列方向の3ビット訂正処理により、3列目および4列目のエラーが正しく訂正されたデータ243が得られ、復号処理が成功する。
次に検出部303による検出処理の詳細について説明する。復号処理が進むためには、MBFDに成功することが必要となる。そこで、検出部303は、エラーが発生している成分符号のうち、すべての行および列の成分符号で連続してMBFDが失敗した場合に、復号処理が停滞していると判断する。なお、MBFDで一度採用された解であっても、ロールバック処理で棄却された解は、失敗した解として扱われる。
以下では、行方向のMBFDの停滞の検出方法を例に説明する。「行」を「列」で置き換えれば列方向の停滞の検出方法を実現できる。なお以下では検出方法1および検出方法2の2つの方法を説明するが、MBFDの停滞の検出方法はこれらに限られない。
(検出方法1)
復号部302は、復号処理中に以下の値をレジスタに記憶する。なおレジスタ(チェックレジスタ、符号レジスタ)は、例えば復号部302の内部に備えられる。また、レジスタ(チェックレジスタ、符号レジスタ)は最初の行番号(例えば1)の値に初期化されているものとする。
(V1)復号に成功した直近の回の反復MBFDにおいて、最後に処理した行番号に1を加算した値(以下、CVとする):チェックレジスタに記憶
(V2)直近に実行された反復MBFDにおいて、最初に処理した行番号(以下、SVとする)、および、最後に処理した行番号に1を加算した値(以下、EVとする):符号レジスタに記憶
復号部302は、復号処理中に以下の値をレジスタに記憶する。なおレジスタ(チェックレジスタ、符号レジスタ)は、例えば復号部302の内部に備えられる。また、レジスタ(チェックレジスタ、符号レジスタ)は最初の行番号(例えば1)の値に初期化されているものとする。
(V1)復号に成功した直近の回の反復MBFDにおいて、最後に処理した行番号に1を加算した値(以下、CVとする):チェックレジスタに記憶
(V2)直近に実行された反復MBFDにおいて、最初に処理した行番号(以下、SVとする)、および、最後に処理した行番号に1を加算した値(以下、EVとする):符号レジスタに記憶
なお、1を加算した値が行の総数を超える場合は、最初の行番号(例えば1)が記憶される。
検出部303は、チェックレジスタに記憶された値と、符号レジスタに記憶された値から定まる範囲とに重複があれば、行方向の復号処理が停滞していることを検出する。例えば検出部303は、以下の条件1および条件2のいずれかが満たされる場合に、復号処理が停滞していることを検出する。
(条件1)“SV<EV”、かつ、“SV<CV”、かつ、“EV≧CV”
(条件2)“SV≧EV、かつ、SV<CV”、または、
“SV≧EV、かつ、EV≧CV”
(条件1)“SV<EV”、かつ、“SV<CV”、かつ、“EV≧CV”
(条件2)“SV≧EV、かつ、SV<CV”、または、
“SV≧EV、かつ、EV≧CV”
以下、停滞の検出処理の例について説明する。図8および図9は、停滞の検出処理の例を説明するための図である。記号「○」は、MBFDに成功したことを示す。記号「×」は、MBFDに失敗(ロールバック処理で棄却された場合を含む)したことを示す。
図8では、最初(1回目)に実行した反復MBFDで4行目の成分符号に対する復号に成功した例が示されている。また図8では、2回目の反復MBFDで1行目および2行目の成分符号に対してMBFDを実行したが失敗し、3回目の反復MBFDで3行目および4行目の成分符号に対してMBFDを実行したが失敗した例が示されている。
3回目の反復MBFDを実行した後、各レジスタには以下のような値が記憶される。
・チェックレジスタ:CV=1
・符号レジスタ:SV=3、EV=1
・チェックレジスタ:CV=1
・符号レジスタ:SV=3、EV=1
この場合、上記の条件2のうち“SV≧EV、かつ、EV≧CV”が満たされるため、検出部303は、復号処理が停滞したことを検出する。
図9では、最初(1回目)に実行した反復MBFDで3行目の成分符号に対する復号に成功した例が示されている。また図9では、2回目の反復MBFDで4行目および1行目の成分符号に対してMBFDを実行したが失敗し、3回目の反復MBFDで2行目および3行目の成分符号に対してMBFDを実行したが失敗した例が示されている。
3回目の反復MBFDを実行した後、各レジスタには以下のような値が記憶される。
・チェックレジスタ:CV=4
・符号レジスタ:SV=2、EV=4
・チェックレジスタ:CV=4
・符号レジスタ:SV=2、EV=4
この場合、上記の条件1“SV<EV”、かつ、“SV<CV”、かつ、“EV≧CV”が満たされるため、検出部303は、復号処理が停滞したことを検出する。
図9の3回目の反復MBFDで、2行目から4行目の成分符号に対してMBFDが失敗したとする。この場合、3回目の反復MBFDを実行した後、各レジスタには以下のような値が記憶される。
・チェックレジスタ:CV=4
・符号レジスタ:SV=2、EV=1
・チェックレジスタ:CV=4
・符号レジスタ:SV=2、EV=1
この場合、上記の条件2のうち“SV≧EV、かつ、SV<CV”が満たされるため、検出部303は、復号処理が停滞したことを検出する。
(検出方法2)
復号部302は、成分符号がエラーを含むか否かを示す判定情報を、例えば内部のレジスタに記憶する。判定情報は、バイナリベクトル、または、バイナリベクトルのハッシュ値である。以下では、バイナリベクトルを判定情報とする場合を例に説明する。検出部303は、MBFDを繰り返し実行する中で、バイナリベクトルが変化しない場合に、復号処理が停滞していることを検出する。
復号部302は、成分符号がエラーを含むか否かを示す判定情報を、例えば内部のレジスタに記憶する。判定情報は、バイナリベクトル、または、バイナリベクトルのハッシュ値である。以下では、バイナリベクトルを判定情報とする場合を例に説明する。検出部303は、MBFDを繰り返し実行する中で、バイナリベクトルが変化しない場合に、復号処理が停滞していることを検出する。
バイナリベクトルは、行および列で独立に記憶される。バイナリベクトルの各要素は、各成分符号のシンドロームが0である(エラーなし)場合に0、そうでない(エラーあり)場合に1をとるものとする。例えば4行の成分符号が用いられる場合、行方向のバイナリベクトルは、4行分の成分符号それぞれに対応する4つの要素を含む。各要素には、対応する成分符号のシンドロームが0であるか(0)、そうでないか(1)の値が設定される。
検出部303は、行方向のバイナリベクトル、および、列方向のバイナリベクトルでそれぞれ独立に変化の有無を判定する。例えば、MBFDを繰り返す中で、ある成分符号(例えば最後の行に対応する成分符号)の処理が終わった(既にシンドロームがエラーなしを示しており、MBFDがスキップされた場合を含む)タイミングで、検出部303は、「過去のバイナリベクトル」と「現在のバイナリベクトル」とが一致しているか否かにより、バイナリベクトルが変化しているか否かを判定する。
いずれの成分符号の処理が終わったタイミングで判定を行うかは、どのように決定されてもよい。行方向および列方向でそれぞれ1つの成分符号が、判定のタイミングを示す成分符号として予め決定される。
「過去のバイナリベクトル」は、行および列それぞれに対して専用のレジスタに記憶される。「現在のバイナリベクトル」は、判定のタイミングが定められた成分符号に対して得られた最新のバイナリベクトルに相当する。すなわち、「現在のバイナリベクトル」は、判定のタイミングが定められた成分符号に対して得られたバイナリベクトルであって、直近に処理されたMBFDによって得られたバイナリベクトルに相当する。検出部303は、レジスタに記憶された「過去のバイナリベクトル」と「現在のバイナリベクトル」とが一致する場合に、バイナリベクトルが変化しないこと、すなわち、復号処理が停滞していることを検出する。
なお、「過去のバイナリベクトル」と「現在のバイナリベクトル」とが一致していない場合、検出部303は、レジスタを「現在のバイナリベクトル」で更新する。またレジスタは、MBFDを開始したタイミングの各成分符号のシンドロームにより初期化されるものとする。
次にパラメタ制御部304によるパラメタ制御処理の詳細について説明する。パラメタ制御部304は、行方向と列方向の両方で復号処理の停滞が検出された場合に、MBFDで用いられるパラメタを切り替える。パラメタは例えば以下の(P1)~(P4)を含む。なおパラメタ制御部304は、以下の複数のパラメタのうちいずれか1つを制御してもよいし、複数を制御してもよい。
(P1)リストサイズ:MBFDで採用する解の個数の上限(最大値)
リストサイズは、成分符号ごと(例えば行および列)に定められる。リストサイズは1以上で成分符号の最大数以下の値となる。パラメタ制御部304は、例えば切り替えるリストサイズを定めた以下のような配列Lを用いて、リストサイズを切り替えてもよい。
L=(L1、L2、・・・、Lk)(kは2以上の整数)
リストサイズは、成分符号ごと(例えば行および列)に定められる。リストサイズは1以上で成分符号の最大数以下の値となる。パラメタ制御部304は、例えば切り替えるリストサイズを定めた以下のような配列Lを用いて、リストサイズを切り替えてもよい。
L=(L1、L2、・・・、Lk)(kは2以上の整数)
配列Lの各要素の値は、Li<Li+1(1≦i≦k)を満たすように定められる。リストサイズの初期値は、例えばL1とする。パラメタ制御部304は、復号処理の停滞が検出されるごとに、リストサイズをLiからLi+1に切り替える。
なお復号処理が進展した場合、パラメタ制御部304は、リストサイズを減少させてもよい。例えばパラメタ制御部304は、復号処理が進展した場合に、リストサイズをLiからLi-1に1段階戻してもよいし、初期値Liに戻してもよい。復号処理が進展するとは、例えば、MBFDが成功し、かつ、ロールバック処理が実行されなかったことを意味する。
このように、復号処理の停滞が検出された場合、リストサイズは、1以上、かつ、対象次元の成分符号数以下の範囲で、単調増加するように変更される。また、復号処理が進展した場合、リストサイズは、1以上、かつ、対象次元の成分符号数以下の範囲で、単調減少するように変更される。
なお、リストサイズの変更方法は配列Lを用いる方法に限られない。例えばパラメタ制御部304は、リストサイズの初期値(例えば1)に対して、予め定められた値(例えば1)、または、規則に基づき求められる値を加算することにより、リストサイズを増加させてもよい。同様に、例えばパラメタ制御部304は、現在のリストサイズから、予め定められた値(例えば1)、または、規則に基づき求められる値を減算することにより、リストサイズを減少させてもよい。
(P2)ロールバック実行フラグ(RBFlag)
上記のように、ロールバック実行フラグは、ロールバック処理を実行するか否かを示す情報の一例である。例えばRBFlag=Trueは、ロールバック処理を実行することを意味する。RBFlag=Falseは、ロールバック処理を実行しないことを意味する。初期値は、例えばRBFlag=Trueが設定される。復号処理の停滞が検出された場合、パラメタ制御部304は、RBFlag=Falseに変更する。
上記のように、ロールバック実行フラグは、ロールバック処理を実行するか否かを示す情報の一例である。例えばRBFlag=Trueは、ロールバック処理を実行することを意味する。RBFlag=Falseは、ロールバック処理を実行しないことを意味する。初期値は、例えばRBFlag=Trueが設定される。復号処理の停滞が検出された場合、パラメタ制御部304は、RBFlag=Falseに変更する。
パラメタ制御部304は、リストサイズとロールバック実行フラグとを組み合わせてパラメタの変更を制御してもよい。例えばリストサイズがLk(リストサイズの上限値)に変更されている状態で、さらに復号処理の停滞が検出された場合に、パラメタ制御部304は、RBFlag=Falseに変更してもよい。これにより、例えば、復号処理の初期段階では誤訂正となる解をできるだけ採用しないように慎重に復号を進め、復号処理が停滞したら、ロールバックを実行しないように変更して、復号処理を進展させるように構成することが可能となる。
(P3)フリップサイズ
フリップサイズは、以下の値のうち1つまたは複数を意味する。
・交差部に含まれるビットのうち、フリップするシンボルの個数または割合
・成分符号に含まれる交差部のうち、フリップの対象とする交差部の個数または割合
フリップサイズは、以下の値のうち1つまたは複数を意味する。
・交差部に含まれるビットのうち、フリップするシンボルの個数または割合
・成分符号に含まれる交差部のうち、フリップの対象とする交差部の個数または割合
パラメタ制御部304は、例えば、復号処理の停滞が検出された場合、フリップサイズを増加するように変更する。また、パラメタ制御部304は、復号処理が進展した場合、フリップサイズを減少するように変更する。増減の方法は、例えばリストサイズと同様の方法を適用することができる。
次に、本実施形態に係る復号動作を、図面を参照して詳細に説明する。図10は、本実施形態に係る復号動作の概略例を示すフローチャートである。
復号部302は、メモリI/F13により不揮発性メモリ20から読み出された読出し情報に対して反復限界距離復号を実行する(ステップS101)。復号部302は、反復限界距離復号に成功したか否かを判定する(ステップS102)。例えば復号部302は、終了条件を満たすまで繰り返し反復限界距離復号を実行した後、各成分符号のシンドロームを求め、値が0でないシンドロームが存在する場合に、反復限界距離復号に失敗したと判定する。
反復限界距離復号に成功した場合(ステップS102:Yes)、復号部302は、例えば制御部11へ復号成功を通知する(ステップS103)。反復限界距離復号に失敗した場合(ステップS102:No)、符号化/復号部14は、以下のステップS104~ステップS112を実行する。
まず復号部302は、行方向または列方向のいずれかについて、MBFDを実行する(ステップS104)。復号部302は、さらに3ビットの反復限界距離復号を実行する(ステップS105)。復号部302は、反復限界距離復号に成功したか否かを判定する(ステップS106)。反復限界距離復号に成功した場合(ステップS106:Yes)、復号部302は、例えば制御部11へ復号成功を通知する(ステップS103)。
反復限界距離復号に失敗した場合(ステップS106:No)、復号部302は、MBFDを終了するか否かを判定する(ステップS107)。例えば復号部302は、MBFDの実行回数が上限値に達した、または、レイテンシが制限値に達した、などの終了条件が満たされた場合に、MBFDを終了すると判定する。
MBFDを終了する場合(ステップS107:Yes)、符号化/復号部14は、後処理を実行する(ステップS112)。後処理は、例えば、さらに別の誤り訂正処理、および、復号失敗を制御部11へ通知する処理などである。
MBFDを終了しない場合(ステップS107:No)、復号部302は、ステップS104で実行したMBFDを取り消すロールバック処理を行う(ステップS108)。検出部303は、復号処理が停滞しているか否かを検出する(ステップS109)。
停滞が検出された場合(ステップS109:Yes)、パラメタ制御部304は、MBFDで用いられるパラメタを切り替える(ステップS110)。パラメタが切り替えられた後、および、停滞が検出されていない場合(ステップS109:No)、復号部302は、処理対象としている次元(行方向、列方向)を切り替える(ステップS111)。その後、ステップS104に戻り、切り替えられた次元の成分符号に対して処理が繰り返される。
以上のように、本実施形態では、反復限界距離復号が失敗したときに、成分符号単位で限界距離を超えた復号処理(MBFDなど)が実行される。また、ロールバックなどに起因して後者の復号処理が停滞しているかが検出される。そして、復号処理の停滞が検出された場合、後者の復号処理のパラメタが変更され、復号処理がさらに実行される。これにより、復号処理が成功する可能性を高めること、すなわち、誤り訂正(復号)能力を向上させることが可能となる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
1 メモリシステム
10 メモリコントローラ
11 制御部
12 データバッファ
13 メモリI/F
14 符号化/復号部
15 ホストI/F
16 内部バス
20 不揮発性メモリ
30 ホスト
301 符号化部
302 復号部
303 検出部
304 パラメタ制御部
10 メモリコントローラ
11 制御部
12 データバッファ
13 メモリI/F
14 符号化/復号部
15 ホストI/F
16 内部バス
20 不揮発性メモリ
30 ホスト
301 符号化部
302 復号部
303 検出部
304 パラメタ制御部
Claims (10)
- 符号を構成する複数のシンボルの集合である複数のシンボル群それぞれが、N個(Nは2以上の整数)の成分符号群によって保護されているN次元の誤り訂正符号で符号化されたデータが記憶された不揮発性メモリと、
前記誤り訂正符号で符号化されたデータを前記不揮発性メモリから読み出し、前記N個の成分符号群に含まれる成分符号それぞれにより保護されるデータに対して限界距離復号を繰り返し実行する第1の復号処理を実行し、
前記第1の復号処理に失敗した場合に、前記N個の成分符号群に含まれる成分符号のシンドロームによりエラーが含まれていると判定されるエラーシンボル群に対して、成分符号単位で限界距離を超えた復号を繰り返し実行する第2の復号処理を実行し、
前記第2の復号処理の後に実行する前記第1の復号処理に失敗した場合に、前記第2の復号処理を実行する前の状態に戻すロールバック処理を実行し、
前記第2の復号処理が停滞していることを検出した場合に、前記第2の復号処理で用いるパラメタを変更し、変更したパラメタを用いて、前記第2の復号処理をさらに実行する、
メモリコントローラを備える、
メモリシステム。 - 前記第2の復号処理は、前記エラーシンボル群に含まれる1以上のシンボルの値を反転した後に誤りを訂正する処理を含む、
請求項1に記載のメモリシステム。 - 前記パラメタは、前記第2の復号処理で誤りを訂正する成分符号の数の最大値、および、前記ロールバック処理を実行するか否かを示す情報、のうち少なくとも一方である、
請求項2に記載のメモリシステム。 - 前記パラメタは、前記第2の復号処理で誤りを訂正する成分符号の数の最大値、および、前記ロールバック処理を実行するか否かを示す情報であり、
前記メモリコントローラは、
前記第2の復号処理が停滞していることを検出した場合に、前記最大値を増加させ、増加させた前記最大値を用いて、前記第2の復号処理を実行し、
前記最大値が上限値に達した後に、さらに前記第2の復号処理が停滞していることを検出した場合に、前記ロールバック処理を実行するか否かを示す情報を、前記ロールバック処理を実行しないことを示す値に変更し、前記第2の復号処理をさらに実行する、
請求項3に記載のメモリシステム。 - 前記パラメタは、前記第2の復号処理で誤りを訂正する成分符号の数の最大値であり、
前記メモリコントローラは、
前記第2の復号処理が停滞していることを検出した場合に、前記最大値を増加させ、増加させた前記最大値を用いて、前記第2の復号処理を実行する、
請求項2に記載のメモリシステム。 - 前記メモリコントローラは、
前記第2の復号処理が停滞していないことを検出した場合に、増加させた前記最大値を減少させ、減少させた前記最大値を用いて、前記第2の復号処理を実行する、
請求項5に記載のメモリシステム。 - 前記パラメタは、反転するシンボルの個数、および、シンボルを反転させる前記エラーシンボル群の個数、のうち少なくとも一方である、
請求項2に記載のメモリシステム。 - 前記N個の成分符号群のそれぞれは、BCH符号またはリードソロモン符号である、
請求項1に記載のメモリシステム。 - 前記メモリコントローラは、
すべてのエラーシンボル群について、前記第2の復号処理が失敗した場合に、前記第2の復号処理が停滞していることを検出する、
請求項1に記載のメモリシステム。 - 前記メモリコントローラは、
前記第2の復号処理を繰り返し実行したときに、前記N個の成分符号群がエラーを含むか否かを示す判定情報が変化しない場合に、前記第2の復号処理が停滞していることを検出する、
請求項9に記載のメモリシステム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2021031909A JP2022133071A (ja) | 2021-03-01 | 2021-03-01 | メモリシステム |
US17/463,818 US11652496B2 (en) | 2021-03-01 | 2021-09-01 | Memory system and method for controlling non-volatile memory |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2021031909A JP2022133071A (ja) | 2021-03-01 | 2021-03-01 | メモリシステム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2022133071A true JP2022133071A (ja) | 2022-09-13 |
Family
ID=83007257
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2021031909A Pending JP2022133071A (ja) | 2021-03-01 | 2021-03-01 | メモリシステム |
Country Status (2)
Country | Link |
---|---|
US (1) | US11652496B2 (ja) |
JP (1) | JP2022133071A (ja) |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10114549B2 (en) * | 2016-03-17 | 2018-10-30 | Sandisk Technologies Llc | Error correction code processing and data shaping for reducing wear to a memory |
JP2019057752A (ja) * | 2017-09-19 | 2019-04-11 | 東芝メモリ株式会社 | メモリシステム |
TWI646783B (zh) * | 2018-04-10 | 2019-01-01 | 大陸商深圳大心電子科技有限公司 | 解碼方法及儲存控制器 |
JP2020046823A (ja) * | 2018-09-18 | 2020-03-26 | キオクシア株式会社 | メモリシステム |
JP2021141369A (ja) * | 2020-03-02 | 2021-09-16 | キオクシア株式会社 | メモリシステム |
-
2021
- 2021-03-01 JP JP2021031909A patent/JP2022133071A/ja active Pending
- 2021-09-01 US US17/463,818 patent/US11652496B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
US20220278695A1 (en) | 2022-09-01 |
US11652496B2 (en) | 2023-05-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11005499B2 (en) | LDPC decoder, semiconductor memory system, and operating method thereof | |
US10103749B2 (en) | LDPC decoder, semiconductor memory system and operating method thereof | |
JP6840591B2 (ja) | 復号装置 | |
KR102556479B1 (ko) | Ldpc 디코더, 반도체 메모리 시스템 및 그것의 동작 방법 | |
US10574272B2 (en) | Memory system | |
US10200063B2 (en) | Memory controller, semiconductor memory system and operating method thereof | |
KR20160090054A (ko) | 플래시 메모리 시스템 및 그의 동작 방법 | |
US10795761B2 (en) | Memory system and method of controlling non-volatile memory | |
KR20210115961A (ko) | Ldpc 디코더 및 그것의 동작 방법 | |
CN111726121A (zh) | 错误校正解码器和具有该错误校正解码器的存储器系统 | |
US11025281B2 (en) | Memory system | |
US11043969B2 (en) | Fast-converging soft bit-flipping decoder for low-density parity-check codes | |
US10908994B2 (en) | Memory system and method of controlling nonvolatile memory | |
US11455209B2 (en) | Memory system | |
US10846170B2 (en) | Decoder, operating method thereof and memory system including the decoder | |
CN110931073A (zh) | 错误校正电路及其操作方法 | |
US11150813B2 (en) | Memory system | |
US11309918B2 (en) | Memory system | |
JP2022133071A (ja) | メモリシステム | |
US10951238B1 (en) | Memory system and method for controlling non-volatile memory | |
JP2023040796A (ja) | メモリシステム | |
US9170881B2 (en) | Solid state device coding architecture for chipkill and endurance improvement | |
US20240086280A1 (en) | Memory system and control method | |
KR102530269B1 (ko) | Ldpc 디코더, 반도체 메모리 시스템 및 그것의 동작 방법 | |
CN116743188A (zh) | 存储系统和控制存储系统的方法 |