(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024112533
(43)【公開日】2024-08-21
(54)【発明の名称】メモリシステムおよび制御方法
(51)【国際特許分類】
H03M 13/37 20060101AFI20240814BHJP
H03M 13/15 20060101ALI20240814BHJP
H03M 13/19 20060101ALI20240814BHJP
G06F 11/10 20060101ALI20240814BHJP
【FI】
H03M13/37
H03M13/15
H03M13/19
G06F11/10 662
【審査請求】未請求
【請求項の数】12
【出願形態】OL
(21)【出願番号】P 2023017630
(22)【出願日】2023-02-08
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】久保田 貴大
(72)【発明者】
【氏名】内川 浩典
【テーマコード(参考)】
5J065
【Fターム(参考)】
5J065AC03
5J065AD07
5J065AD11
5J065AG01
5J065AG02
5J065AG05
5J065AH21
(57)【要約】
【課題】より高精度に誤り訂正を実行する。
【解決手段】メモリシステムは、不揮発性メモリとメモリコントローラとを備える。不揮発性メモリは、誤り訂正符号を記憶する。メモリコントローラは、不揮発性メモリから読出し情報を読み出し、読出し情報に対して第1復号処理を実行し、読出し情報に含まれる複数の要素それぞれに対応する複数の復号結果を出力し、第1復号処理による復号が失敗した場合に、複数の復号結果のうち予め定められた条件を満たす復号結果を、復号前の値に戻すキャンセル処理を実行し、キャンセル処理を実行した後の複数の復号結果を用いて第2復号処理を実行する。
【選択図】
図5
【特許請求の範囲】
【請求項1】
誤り訂正符号を記憶する不揮発性メモリと、
前記不揮発性メモリから読出し情報を読み出し、
前記読出し情報に対して第1復号処理を実行し、前記読出し情報に含まれる複数の要素それぞれに対応する複数の復号結果を出力し、
前記第1復号処理による復号が失敗した場合に、複数の前記復号結果のうち予め定められた条件を満たす前記復号結果を、復号前の値に戻すキャンセル処理を実行し、
前記キャンセル処理を実行した後の複数の前記復号結果を用いて第2復号処理を実行する、
メモリコントローラと、
を備えるメモリシステム。
【請求項2】
前記メモリコントローラは、
前記読出し情報に対して第1復号処理を実行し、複数の前記復号結果と、複数の前記復号結果それぞれの信頼度と、を出力し、
前記条件は、前記信頼度が第1閾値未満であることを示す、
請求項1に記載のメモリシステム。
【請求項3】
前記条件は、対応する複数の前記要素に対する距離が第2閾値以上であることを示す、
請求項1に記載のメモリシステム。
【請求項4】
前記誤り訂正符号は、符号を構成するシンボルのうち少なくとも1つのシンボルがN個(Nは2以上の整数)の成分符号群によってそれぞれ保護されているN次元の誤り訂正符号であり、
複数の前記要素は、M個(1≦i≦N、niを第i次元の成分符号群に含まれる成分符号の個数として、Mはniの総和)の成分符号であり、
前記第1復号処理は、M個の前記成分符号を復号し、
前記条件は、前記キャンセル処理を実行した場合に、復号が成功した状態から復号が失敗した状態に変化する他の次元の成分符号群に含まれる成分符号の個数が、第3閾値以下であることを示す、
請求項1に記載のメモリシステム。
【請求項5】
前記メモリコントローラは、前記条件を満たす複数の前記復号結果から一部の前記復号結果を選択し、選択した前記復号結果に対して前記キャンセル処理を実行し、前記キャンセル処理を実行した後の複数の前記復号結果を用いて前記第2復号処理を実行する処理を複数回実行する、
請求項1に記載のメモリシステム。
【請求項6】
前記誤り訂正符号は、符号を構成するシンボルのうち少なくとも1つのシンボルがN個(Nは2以上の整数)の成分符号群によってそれぞれ保護されているN次元の誤り訂正符号であり、
複数の前記要素は、M個(1≦i≦N、niを第i次元の成分符号群に含まれる成分符号の個数として、Mはniの総和)の成分符号であり、
前記第1復号処理は、M個の前記成分符号を復号し、複数の前記成分符号それぞれに対応する複数の前記復号結果の信頼度を出力する、
請求項1に記載のメモリシステム。
【請求項7】
前記メモリコントローラは、前記信頼度が第4閾値以上である前記成分符号の個数が、第5閾値以上であるときに、前記キャンセル処理を実行する、
請求項6に記載のメモリシステム。
【請求項8】
前記誤り訂正符号は、LDPC(Low Density Parity Check Code)符号であり、
前記第1復号処理は、前記読出し情報を確率伝播法により復号し、前記確率伝播法で用いられるチェックノードに対応するシンドロームの対数尤度比、または、前記チェックノードに接続される複数の変数ノードの復号結果の絶対値のうち最小値を、前記チェックノードの信頼度として出力し、
前記条件は、前記復号結果に対応する前記変数ノードに接続される前記チェックノードの前記信頼度が第6閾値未満であることを示す、
請求項1に記載のメモリシステム。
【請求項9】
前記メモリコントローラは、前記信頼度が第7閾値以上である前記チェックノードの個数が、第8閾値以上であるときに、前記キャンセル処理を実行する、
請求項8に記載のメモリシステム。
【請求項10】
前記誤り訂正符号は、BCH(Bose-Chandhuri-Hocquenghem)符号であり、
前記第2復号処理は、BCH符号に対する限界距離復号である、
請求項1に記載のメモリシステム。
【請求項11】
前記誤り訂正符号は、符号を構成するシンボルのうち少なくとも1つのシンボルがN個(Nは2以上の整数)の成分符号群によってそれぞれ保護されているN次元の誤り訂正符号であり、
前記第2復号処理は、M個(1≦i≦N、niを第i次元の成分符号群に含まれる成分符号の個数として、Mはniの総和)の成分符号に対する反復復号である、
請求項1に記載のメモリシステム。
【請求項12】
誤り訂正符号を記憶する不揮発性メモリを制御するメモリコントローラによる制御方法であって、
前記不揮発性メモリから読出し情報を読み出し、
前記読出し情報に対して第1復号処理を実行し、前記読出し情報に含まれる複数の要素それぞれに対応する複数の復号結果を出力し、
前記第1復号処理による復号が失敗した場合に、複数の前記復号結果のうち予め定められた条件を満たす前記復号結果を、復号前の値に戻すキャンセル処理を実行し、
前記キャンセル処理を実行した後の複数の前記復号結果を用いて第2復号処理を実行する、
ことを含む制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
以下の実施形態は、メモリシステムおよび制御方法に関する。
【背景技術】
【0002】
メモリシステムでは、一般に、記憶するデータを保護するために、誤り訂正符号化されたデータが記憶される。このため、メモリシステムに記憶されたデータを読み出す際には、誤り訂正符号化されたデータに対する復号が行われる。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】米国特許出願公開第2016/0043744号明細書
【特許文献2】国際公開第2020/115874号
【特許文献3】米国特許出願公開第2022/0261312号明細書
【発明の概要】
【発明が解決しようとする課題】
【0004】
本発明の実施形態は、より高精度に誤り訂正(復号)を実行することができるメモリシステムおよび制御方法を提供することを目的とする。
【課題を解決するための手段】
【0005】
実施形態によれば、メモリシステムは、不揮発性メモリとメモリコントローラとを備える。不揮発性メモリは、誤り訂正符号を記憶する。メモリコントローラは、不揮発性メモリから読出し情報を読み出し、読出し情報に対して第1復号処理を実行し、読出し情報に含まれる複数の要素それぞれに対応する複数の復号結果を出力し、第1復号処理による復号が失敗した場合に、複数の復号結果のうち予め定められた条件を満たす復号結果を、復号前の値に戻すキャンセル処理を実行し、キャンセル処理を実行した後の複数の復号結果を用いて第2復号処理を実行する。
【図面の簡単な説明】
【0006】
【
図1】データを誤り訂正符号で保護する動作を説明するための図。
【
図3】二次元の誤り訂正符号に対してターボ復号を実行する機能ブロックの一例を示すブロック図。
【
図4】
図3に示す機能ブロックによる処理フローのフローチャート。
【
図5】第1の実施形態に係るメモリシステムのブロック図。
【
図8】第1の実施形態のSISO復号部のブロック図。
【
図9】第1の実施形態のメモリシステムによる復号処理のフローチャート。
【
図11】成分符号のシンドローム値が充足から非充足になる例を示す図。
【
図12】成分符号のシンドローム値が非充足のままとなる例を示す図。
【発明を実施するための形態】
【0007】
以下に添付図面を参照して、実施形態に係るメモリシステムを詳細に説明する。なお、以下の実施形態により本発明が限定されるものではない。
【0008】
近年、NAND型フラッシュメモリ(以下、単にNANDメモリという)などの不揮発性メモリを利用したメモリシステムは、その高速性という特長を生かし、様々な場所で用いられている。しかしながら、不揮発性メモリから読み出したデータには、不揮発性メモリに記憶されてからの時間経過や読み出し・書き込みの際に生じるノイズ等に起因するエラーが含まれる可能性がある。そのため、一般には、不揮発性メモリに記憶するデータに対して誤り訂正符号を用いた符号化処理が実行され、読出し時にはその誤り訂正符号を用いた復号処理が実行されることで、読み出したデータに含まれているエラーが除去される。
【0009】
図1は、比較例に係るメモリシステムにおけるデータを誤り訂正符号で保護する動作を説明するための図である。なお、ユーザ931とユーザ932は、それぞれ、例えばパーソナルコンピュータ、サーバ装置、ポータブルな情報機器、デジタルスチルカメラ等の情報処理装置であってよい。
【0010】
ユーザ931は、書込み対象のデータ(以下、書込みデータという)をメモリシステム900に対して送信する。メモリシステム900は、ユーザ931から受け取った書込みデータを符号化器941を用いて符号化し、これにより生成された符号化データ(符号語)を不揮発性メモリ920に書き込む。従って、不揮発性メモリ920に書き込まれる符号化データには、基本的にはエラーが含まれていない。
【0011】
不揮発性メモリ920に記憶されている符号化データは、例えばユーザ932からの読出し要求に応じて読み出される。ここで、読み出された符号化データにはエラーが含まれている可能性がある。そこで、読み出された符号化データに含まれるエラーを復号器942を用いて除去しつつ復号を実行することで、オリジナルの符号語が復元される。その後、オリジナルの符号語もしくは復元された符号化前の書込みデータがユーザ932へ送信される。なお、読出し要求を発行したユーザ932は、書込み要求を発行したユーザ931と同一のユーザであってもよいし、別のユーザであってもよい。
【0012】
ここで、符号化器941が書込みデータを‘0’又は‘1’で表現された二値情報(ビット)から構成される符号語に符号化し、その符号語が二値情報として不揮発性メモリ920に記憶された場合を想定する。以下、不揮発性メモリ920からのデータ読出しの際、記憶されたデータを‘0’であるか‘1’であるかを示す二値情報として読み出して復号器942に入力する場合、その入力情報を硬判定入力(Hard-Input)と称する。それに対し、記憶されたデータを‘0’であった確率又は‘1’であった確率の情報として読み出して復号器942に入力する場合、その確率情報を軟判定入力(Soft-Input)と称する。
【0013】
また、復号器942が出力する復号結果が、オリジナルの書込みデータが‘0’であったか‘1’であったかの二値情報である場合、その出力情報を硬判定出力(Hard-Output)と称する。それに対し、復号器942が出力する復号結果にオリジナルの書込みデータが‘0’であったか‘1’であったかの確率情報が含まれる場合、その出力情報を軟判定出力(Soft-Output)と称する。
【0014】
このような軟判定入力を受け取り軟判定出力を行うSISO(Soft-Input Soft-Output)復号器は、例えば、多次元の誤り訂正符号の成分符号復号器として用いられる。
【0015】
ここで、多次元の誤り訂正符号とは、誤り訂正符号の少なくとも一つ以上の構成単位であるシンボルが、複数のより小規模な成分符号によって多重に保護されているものを指す。また、1シンボルは、例えば1ビット(二元体(binary field)の元(element))、又は、二元体以外の有限体(finite field)などのアルファベットの元で構成される。なお、説明を容易にするため、以下では1シンボルが1ビットで構成される二元体の誤り訂正符号を例に説明する。説明の中で、シンボルとビットが混在して出てくる箇所があるかもしれないが、どちらも同じ意味を表す。
【0016】
多次元の誤り訂正符号の例として、
図2に積符号を示す。
図2に示す積符号500は、構成単位である各情報シンボルd
0~d
3が、行方向(図面中横方向)と列方向(図面中縦方向)とのそれぞれで、情報長2シンボルで且つパリティ長3シンボルのハミング符号511~515および521~525で保護された構造を備える。このような積符号500では、全ての情報シンボルd
0~d
3およびパリティシンボルp
0~p
20が行方向のハミング符号と列方向のハミング符号とで2重に保護されている。
図2に示す積符号では、全てのシンボルが行方向(次元1と称される)および列方向(次元2と称される)の成分符号によって二重に保護されている。なお、多次元の誤り訂正符号としてはこれに限らず、例えば一般化LDPC符号(Generalized Low Density Parity Check Code)などであってもよい。一般化LDPC符号を含む一般の多次元の誤り訂正符号では、シンボルごとに保護の多重度が異なっていてもよく、また、成分符号を次元1と次元2のようにグループ分けすることができないが、このような符号構成に対しても本技術は適用することが可能である。
【0017】
以下では、簡単のため、次元1と次元2にグループ分けできる2個の成分符号によって各シンボルが保護されている二次元の誤り訂正符号を用いる例を説明する。各次元の成分符号それぞれは、次元ごとに定められる1個以上の成分符号を含む。以下では、1個以上の成分符号を含む、各次元に対応する成分符号を成分符号群という場合がある。例えば次元1の成分符号群および次元2の成分符号群は、それぞれ、n1個の成分符号およびn2個の成分符号を含む。適用可能な誤り訂正符号はこれに限られず、符号を構成するシンボルのうち少なくとも1つのシンボルがN個(Nは2以上の整数)の成分符号群によって保護されているN次元の誤り訂正符号であってもよい。各成分符号群に含まれる成分符号の個数で表す場合、N次元の誤り訂正符号は、M個(Mは、ni(1≦i≦N)の総和、Nは2以上の整数、niは、第i次元の成分符号の個数)の成分符号によって保護される。
【0018】
このような多次元の誤り訂正符号に対しては、ターボ復号を行うことができる。
図3は、二次元の誤り訂正符号に対してターボ復号を実行する機能ブロックの一例を示す図である。また、
図4は、
図3に示す機能ブロックによる処理フローの一例を示すフローチャートである。
【0019】
図3に示すように、二次元の誤り訂正符号に対してターボ復号を実行する機能ブロックには、読出し情報メモリ901と、次元1加算器911と、次元1SISO復号器912と、次元1外部値メモリ913と、次元2加算器921と、次元2SISO復号器922と、次元2外部値メモリ923とが含まれる。
【0020】
このような機能ブロックによるターボ復号動作では、
図4に示すように、まず、不揮発性メモリ920から誤り訂正符号が軟判定値で読み出される(ステップS901)。読み出された軟判定値の誤り訂正符号は、読出し情報として読出し情報メモリ901へ転送されて記憶される(ステップS902)。
【0021】
次に、読出し情報メモリ901内の読出し情報と、次元2外部値メモリ923内の次元2外部値とが次元1加算器911により加算され、これにより、次元1軟判定入力値(=読出し情報+次元2外部値)が計算される(ステップS903)。なお、次元1外部値メモリ913および次元2外部値メモリ923はともに、本動作の起動時にリセット(ゼロクリア)されているものとする。
【0022】
つづいて、次元1加算器911で計算された次元1軟判定入力値が、成分符号ごとに次元1SISO復号器912に入力される。次元1SISO復号器912は、入力された次元1軟判定入力値に対して次元1の軟判定復号を実行することで、次元1外部値を計算する(ステップS904)。計算された次元1外部値は、次元1外部値メモリ913へ転送されて記憶される(ステップS905)。
【0023】
次に、読出し情報メモリ901内の読出し情報と、次元1外部値メモリ913内の次元1外部値とが次元2加算器921により加算され、これにより、次元2軟判定入力値(=読出し情報+次元1外部値)が計算される(ステップS906)。
【0024】
つづいて、次元2加算器921で計算された次元2軟判定入力値が、成分符号ごとに次元2SISO復号器922に入力される。次元2SISO復号器922は、入力された次元2軟判定入力値に対して次元2の軟判定復号を実行することで、次元2外部値を計算する(ステップS907)。計算された次元2外部値は、次元2外部値メモリ923へ転送されて記憶される(ステップS908)。
【0025】
次に、復号に成功したか否かが判定される(ステップS909)。復号に成功したとは、例えば正しいと判断できる復号語が発見されたことなどであってよい。復号に成功した場合(ステップS909のYES)、外部の制御部等に復号の成功とともに発見された復号語が通知され(ステップS910)、本動作が終了する。一方、復号に成功していない場合(ステップS909のNO)、本動作の反復回数が予め設定しておいた規定値に達しているか否かが判定され(ステップS911)、規定値に達していない場合(ステップS911のNO)、ステップS903へリターンして、以降の動作を実行する。また、規定値に達していた場合(ステップS911のYES)、外部の制御部等に復号の失敗が通知され(ステップS912)、本動作が終了する。なお、反復回数とは、例えば
図4のステップS903~S908の動作を繰り返した回数等であってよい。
【0026】
図3に示す構成における次元1SISO復号器912および次元2SISO復号器922には、外部値を計算する復号アルゴリズムが採用されたMax-log-MAP(Maximum A Posteriori)復号器を用いることができる。Max-log-MAP復号器は、MAP復号語および各ビットの対向復号語から、ビットごとの事後確率値を計算する復号器である。なお、説明の簡略化のため、以降では、事後確率に比例する量(quantity)およびその近似値のことも事後確率と呼ぶこととする。例えば、全ての符号語の事前確率が等しいと仮定した場合、復号語の尤度は、復号語の事後確率値に比例する量となっている。
【0027】
ここで、MAP復号語c*とは、全ての符号語c∈Cの内で、軟判定入力値Sから計算された事後確率Pが最も高い符号語c*=argmaxcP(c|S)を指す。また、i番目のビットの対向復号語とは、全ての符号語c∈Cの内で、i番目のビットでMAP復号語c*と異なる値を持つ符号語のうち、軟判定入力値Sから計算された事後確率Pの最も高い符号語cp,i=argmaxcP(c|S,ci≠c*
i)を指す。従って、Max-log-MAP復号器において復号の途中で計算される中間の硬判定値には、MAP復号語c*および全ての対向符号語cp,iが含まれる。
【0028】
なお、全ての符号語の集合Cの代わりに、事後確率が比較的高い符号語の集合C’⊂Cが用いられてもよい。その場合、近似的なMAP復号語およびi番目のビットの近似的な対向復号語が求められる。このような符号語の部分集合C’を用いたMax-log-MAP復号は、全ての符号語の集合Cを用いたMax-log-MAP復号と比べて訂正能力が劣るものの、計算量が削減されるため、高速に復号を行うことができるという特徴を備える。説明の簡略化のため、以降では、近似的なMAP復号語を用いている場合も含めて、MAP復号語と呼称する。
【0029】
符号語の部分集合C’を用いたMax-log-MAP復号では、i番目のビットの対数事後確率比Rが、MAP復号語c
*と対向復号語c
p,iの事後確率比とから、以下の式(1)を用いて近似的に計算される。
【数1】
【0030】
各次元の外部値は、式(1)で求められた対数事後確率比Rから各次元の軟判定入力値Siを引くことで求めることができる。なお、本説明では、復号の途中で計算される中間の硬判定値から外部値を計算する復号アルゴリズムの例としてMax-log-MAP復号を挙げたが、それ以外にも種々の復号アルゴリズムを用いることができる。
【0031】
ターボ復号では、例えば、成分符号ごとの復号結果に対して推定される信頼度に基づいて、より多くのビットの誤り訂正を狙った積極的な復号が行われる場合がある。しかしこのような復号では、多ビットの誤訂正が発生し、結果としてターボ復号後の残留エラー除去処理が有効に働かず、誤り訂正(復号)の能力(例えばエラーフロア性能)を悪化させることがある。なお残留エラー除去処理とは、ターボ復号が失敗した場合に、ターボ復号とは異なる方式により、残された誤り(残留エラー)を訂正する処理である。
【0032】
以下の実施形態では、複数の復号結果のうち予め定められた条件を満たす復号結果を復号前の値に戻すキャンセル処理が実行される。これにより、例えば誤訂正である復号結果をキャンセルすることができ、誤り訂正の精度を向上させることができる。
【0033】
(第1の実施形態)
図5は、第1の実施形態に係るメモリシステムの概略構成例を示すブロック図である。
図5に示すように、メモリシステム1は、メモリコントローラ10と不揮発性メモリ20とを備える。メモリシステム1は、ホスト30と接続可能であり、
図5ではホスト30と接続された状態が示されている。ホスト30は、例えば、パーソナルコンピュータ、携帯端末などの電子機器であってよい。
【0034】
不揮発性メモリ20は、データを不揮発に記憶する不揮発性メモリであり、例えば、NANDメモリである。以下の説明では、不揮発性メモリ20としてNANDメモリが用いられた場合を例示するが、不揮発性メモリ20として3次元構造フラッシュメモリ、ReRAM(Resistance Random Access Memory)、FeRAM(Ferroelectric Random Access Memory)等のNANDメモリ以外の記憶装置を用いることも可能である。また、不揮発性メモリ20が半導体メモリであることは必須ではなく、半導体メモリ以外の種々の記憶媒体に対して本実施形態を適用することも可能である。
【0035】
メモリシステム1は、メモリコントローラ10と不揮発性メモリ20とが1つのパッケージとして構成されるメモリカード等であってもよいし、SSD(Solid State Drive)等であってもよい。
【0036】
メモリコントローラ10は、ホスト30からの書込み要求に従って不揮発性メモリ20への書込みを制御する。また、メモリコントローラ10は、ホスト30からの読出し要求に従って不揮発性メモリ20からの読み出しを制御する。メモリコントローラ10は、ホストI/F(ホストインタフェース)15、メモリI/F(メモリインタフェース)13、制御部11、符号化/復号部(コーデック)14およびデータバッファ12を備える。ホストI/F15、メモリI/F13、制御部11、符号化/復号部14およびデータバッファ12は、内部バス16で相互に接続されている。
【0037】
ホストI/F15は、ホスト30との間のインタフェース規格に従った処理を実施し、ホスト30から受信した命令、書込み対象のユーザデータなどを内部バス16に出力する。また、ホストI/F15は、不揮発性メモリ20から読み出されて復元されたユーザデータ、制御部11からの応答などをホスト30へ送信する。
【0038】
メモリI/F13は、制御部11の指示に基づいて、不揮発性メモリ20への書込み処理を行う。また、メモリI/F13は、制御部11の指示に基づいて、不揮発性メモリ20からの読み出し処理を行う。
【0039】
制御部11は、メモリシステム1の各構成要素を統括的に制御する。制御部11は、ホスト30からホストI/F15経由で命令を受けた場合に、その命令に従った制御を行う。例えば、制御部11は、ホスト30からの命令に従って、不揮発性メモリ20へのユーザデータおよびパリティの書き込みをメモリI/F13へ指示する。また、制御部11は、ホスト30からの命令に従って、不揮発性メモリ20からのユーザデータおよびパリティの読み出しをメモリI/F13へ指示する。
【0040】
また、制御部11は、ホスト30からユーザデータの書込み要求を受信した場合、ユーザデータをデータバッファ12に蓄積し、ユーザデータの不揮発性メモリ20における記憶領域(メモリ領域)を決定する。すなわち、制御部11は、ユーザデータの書込み先を管理する。ホスト30から受信したユーザデータの論理アドレスと該ユーザデータが記憶された不揮発性メモリ20上の記憶領域を示す物理アドレスとの対応はアドレス変換テーブルとして記憶される。
【0041】
また、制御部11は、ホスト30から読出し要求を受信した場合、読出し要求により指定された論理アドレスを上述のアドレス変換テーブルを用いて物理アドレスに変換し、該物理アドレスからの読み出しをメモリI/F13へ指示する。
【0042】
NANDメモリでは、一般に、ページと呼ばれるデータ単位で、書き込みおよび読み出しが行われ、ブロックと呼ばれるデータ単位で消去が行われる。本実施形態では、この同一のワード線に接続される複数のメモリセルをメモリセルグループと呼ぶ。メモリセルがシングルレベルセル(SLC)である場合は、1つのメモリセルグループが1ページに対応する。メモリセルがマルチレベルセル(MLC)である場合は、1つのメモリセルグループが複数ページに対応する。また、各メモリセルはワード線に接続するとともにビット線にも接続される。従って、各メモリセルは、ワード線を識別するアドレスとビット線を識別するアドレスとで識別することが可能である。
【0043】
データバッファ12は、メモリコントローラ10がホスト30から受信したユーザデータを不揮発性メモリ20へ記憶するまでに一時記憶する。また、データバッファ12は、不揮発性メモリ20から読み出したユーザデータをホスト30へ送信するまでに一時記憶する。データバッファ12には、例えば、SRAM(Static Random Access Memory)やDRAM(Dynamic Random Access Memory)などの汎用メモリを用いることができる。
【0044】
ホスト30から送信されるユーザデータは、内部バス16に転送されてデータバッファ12に一旦記憶される。符号化/復号部14は、ユーザデータを符号化して符号語を生成する。また、符号化/復号部14は、不揮発性メモリ20から読み出された受信語を復号してユーザデータを復元する。そこで符号化/復号部14は、符号化器(Encoder)17と復号器(Decoder)18を備える。なお、符号化/復号部14により符号化されるデータには、ユーザデータ以外にも、メモリコントローラ10内部で用いる制御データ等が含まれてもよい。
【0045】
次に、本実施形態の書込み処理について説明する。制御部11は、不揮発性メモリ20へのユーザデータの書込み時に、ユーザデータの符号化を符号化器17に指示する。その際、制御部11は、不揮発性メモリ20における符号語の記憶場所(記憶アドレス)を決定し、決定した記憶場所もメモリI/F13へ指示する。
【0046】
符号化器17は、制御部11からの指示に基づいて、データバッファ12上のユーザデータを符号化して符号語を生成する。符号化方式としては、例えば、BCH(Bose-Chandhuri-Hocquenghem)符号やRS(リード・ソロモン)符号を用いた符号化方式を採用することができる。符号化器17により生成される符号語は、上述において
図2を用いて例示した積符号500などの多次元の誤り訂正符号である。
図2に例示した積符号500は、上述したように、構成単位である各情報ビット(シンボルであってもよい)d
0~d
3が、行方向(図面中横方向)と列方向(図面中縦方向)とのそれぞれで、情報長2ビットで且つパリティ長3ビットのハミング符号である成分符号511~515および521~525で保護された構造を備える。このような積符号500では、全ての情報ビットd
0~d
3およびパリティビットp
0~p
20が行方向の成分符号(ハミング符号)511~515と列方向の成分符号(ハミング符号)521~525とで2重に保護されている。メモリI/F13は、制御部11から指示された不揮発性メモリ20上の記憶場所へ符号語を記憶する制御を行う。
【0047】
本実施形態では、符号化器17は、内符号である積符号による符号化の前に、残留エラー除去処理で用いられる符号(以下、外符号という)の符号化を行う。
図6を用いて外符号および内符号の例について説明する。なお
図6および以降の図では、列方向に6ビット(列1~列6)の情報ビット、行方向に7ビット(行1~行7)の情報ビットを符号化した積符号を例に説明する。
【0048】
図6に示すように、本実施形態では、7行6列の情報ビットを含む保護領域611は、パリティ601と、パリティ602と、により保護される。保護領域611に含まれるユーザデータは、保護領域611に含まれる外符号により保護される。なお保護領域611の左の数値(1~7)は、行を識別するための値であり、保護領域611の上の数値(1~6)は、列を識別するための値である。保護領域611は、ユーザデータと、外符号のパリティと、を含む。保護領域611のデータ(情報ビット)のうち、行方向の情報ビットは、パリティ601により保護され、列方向の情報ビットは、パリティ602により保護される。
【0049】
外符号はどのような符号であってもよいが、残留エラー除去処理で用いられるため、残された誤り(エラー)が少ないことを想定した符号とすることができる。例えば外符号は、3ビット訂正可能なBCH符号である。すなわち符号化器17は、保護領域611に記憶させる符号語として、例えばBCH符号により符号化された符号語を生成する。
【0050】
なお、
図6のパリティ601、602、および、保護領域611内の数値は、成分符号に含まれる誤り数(エラー数)を表す。
図6の例では、保護領域611に4つの誤りが含まれる。従って、3ビット訂正可能なBCH符号を外符号とする場合は、
図6に示す状態では外符号による誤り訂正(残留エラー除去)は成功しない。
【0051】
次に、本実施形態の不揮発性メモリ20からの読出し時の処理について説明する。制御部11は、不揮発性メモリ20からの読出し時に、不揮発性メモリ20上のアドレスを指定してメモリI/F13へ読み出しを指示する。また、制御部11は、復号器18へ復号の開始を指示する。メモリI/F13は、制御部11の指示に従って、不揮発性メモリ20の指定されたアドレスから受信語を読み出し、読み出した受信語を復号器18に入力する。復号器18は、この不揮発性メモリ20から読み出された受信語を復号する。
【0052】
復号器18は、不揮発性メモリ20から読み出された受信語を復号する。
図7は、復号器18の概略構成例を示すブロック図である。復号器18は、硬判定値を入力として復号を実行し、その結果として硬判定値を出力するHIHO(hard-input hard-output)復号部181と、軟判定値を入力として復号を実行し、その結果として軟判定値を出力するSISO(soft-input soft-output)復号部182とを備える。
【0053】
一般に、SISO復号は、HIHO復号より誤り訂正能力は高いが処理時間が長いという特徴を持つ。そこで本実施形態では、まず、HIHO復号部181が、不揮発性メモリ20から硬判定値として読み出された受信語をHIHO復号し、硬判定復号により復号できなかった受信語を軟判定値として読み出すように構成する。そして、SISO復号部182が、軟判定値として読み出された受信語をSISO復号するように構成する。ただし、このような構成に限られず、HIHO復号を省略して全ての受信語にSISO復号を実行する構成など、種々変形することが可能である。
【0054】
また、復号器18は、残留エラー除去部183を備える。残留エラー除去部183は、SISO復号部182による復号処理(第1復号処理の一例)の最終的な復号結果(出力復号語)に基づいて残留エラー除去処理(第2復号処理の一例)を実行する。例えば外符号として3ビット訂正可能なBCH符号が用いられる場合、残留エラー除去部183は、このBCH符号に対する限界距離復号を、残留エラー除去処理として実行する。なお、最終的な復号結果は、例えば、復号器18内の読出し情報メモリ201(後述)、または、読出し情報メモリ201内のハードビットメモリ(HMEM)に記憶される。残留エラー除去部183は、このようなメモリに記憶された復号結果を用いて残留エラー除去処理を実行する。
【0055】
残留エラー除去処理は、BCH符号に対する限界距離復号に限られず、残留エラー除去のために適した復号処理であればどのような復号処理であってもよい。例えば残留エラー除去処理は、複数の成分符号に対する反復復号であってもよい。
【0056】
次に、
図7に示すSISO復号部182のより詳細な構成を、図面を参照して詳細に説明する。
図8は、SISO復号部182の概略構成例を示すブロック図である。
【0057】
本実施形態では、不揮発性メモリ20に記憶されるデータが二次元の誤り訂正符号により符号化されたデータである場合を例に説明する。不揮発性メモリ20に記憶されるデータは、二次元以外の多次元の誤り訂正符号により符号化されたデータであってもよい。
【0058】
図8に示すように、SISO復号部182は、読出し情報メモリ201と、次元1シンドローム値計算部111と、次元1シンドローム値メモリ211と、次元1軟判定入力値計算部112と、次元1SISO復号部113と、次元1修正情報メモリ212と、次元2シンドローム値計算部121と、次元2シンドローム値メモリ221と、次元2軟判定入力値計算部122と、次元2SISO復号部123と、次元2修正情報メモリ222と、信頼度情報メモリ231と、キャンセル処理部241と、を備えている。
【0059】
読出し情報メモリ201は、不揮発性メモリ20から軟判定により読み出された読出し情報を記憶する。読出し情報のうち、各ビットが0か1かを定める二値情報である硬判定値に対応するデータを、ハードビットデータという場合がある。また、読出し情報のうちハードビットデータを除いた部分に対応するデータを、ソフトビットデータという場合がある。読出し情報メモリ201は、ハードビットデータを記憶するハードビットメモリ(HMEM)と、ソフトビットデータを記憶するソフトビットメモリ(CMEM)と、を含んでもよい。
【0060】
ソフトビットデータの個数(X)はどのように設定されてもよいが、以下では、1個のソフトビットデータSB1(X=1)を用いる例を主に説明する。なお、CMEMは、ソフトビットデータだけでなく、ハードビットデータをさらに記憶してもよい。HMEMに記憶されたハードビットデータの値は復号処理中に更新されうる。一方でCMEMがソフトビットデータだけでなくハードビットデータを記憶する場合には、CMEMに記憶されたハードビットデータの値は復号処理中に更新されない。すなわち、CMEMに記憶されたハードビットデータは、読出し専用(Read Only)となる。
【0061】
復号処理(例えば、軟判定入力値の計算)では、チャネル値と呼ばれるデータが必要となる場合がある。チャネル値は、ハードビットデータおよびソフトビットデータの組に対応する対数尤度比(LLR:Log-Likelihood Ratio)の値を示す。チャネル値は、チャネル値LLRと呼ばれる場合がある。チャネル値は、例えば、ハードビットデータおよびソフトビットデータの組と、チャネル値と、を対応づけたLLRテーブルにより決定される。
【0062】
シンボルが二元体の元である本実施形態では、LLRは、あるビットが0であるか1であるかに関する確率情報を表す。以下では、LLRは、ビットが0である確率が高いときに正となり、ビットが1である確率が高いときに負となるものとする。また、本実施形態では、計算される軟判定入力値も、LLRで表現されるものとする。
【0063】
LLRは、値の正負に応じて0または1の二値情報に縮約して表すことができる。以下では、このような二値情報をLLRの硬判定値という場合がある。また、以下では、LLRが正の場合は硬判定値を0とし、LLRが負の場合は硬判定値を1とし、LLRが0の場合は予め定められたルール(例えば硬判定値を0にする)に従い硬判定値の値を決定する。
【0064】
「チャネル値の硬判定値」は、LLRで表されるチャネル値を、上記のように値の正負に応じて二値で表した情報に相当する。同様に、「軟判定入力値の硬判定値」は、LLRで表される軟判定入力値を、上記のように値の正負に応じて二値で表した情報に相当する。
【0065】
上記のように、HMEMに記憶されたハードビットデータの値は復号処理中に更新されうる。一方、チャネル値は、HMEMにセットされた直後のハードビットデータ(更新前のハードビットデータ)に対応する値を意味する。例えば、復号処理中にHMEMのデータが更新される構成では、CMEMにハードビットデータを記憶しておけば(かつ復号処理中に更新しなければ)、復号処理中にチャネル値の符号を得ることが可能である。チャネル値の符号は、後述するように、例えばシンドローム値を修正するときに参照される。なおチャネル値の符号は、ハードビットデータの値が0であるか、1であるかに対応する。
【0066】
本実施形態では、不揮発性メモリ20は、二次元の誤り訂正符号により符号化されたデータを記憶する。読出し情報メモリ201に記憶されるハードビットデータは、不揮発性メモリ20上で発生した誤りにより、二次元の誤り訂正符号により符号化されたデータの一部が別の値に変化したデータとなる場合がある。読出し情報メモリ201は、次元1シンドローム値計算部111および次元2シンドローム値計算部121へハードビットデータを出力する。
【0067】
次元1シンドローム値計算部111は、次元1の成分符号(第1の成分符号の一例)のシンドローム値(次元1シンドローム値)を計算する。シンドローム値は、誤り訂正符号が誤り位置を計算するために用いるシンボル列であり、例えば、誤り訂正符号のパリティ検査行列とハードビットデータとを乗算することにより得られる。次元1シンドローム値計算部111は、誤り訂正符号の構造を利用して行列演算よりも簡易な計算でシンドローム値を得てもよい。次元1シンドローム値計算部111で得られた次元1シンドローム値は、次元1シンドローム値メモリ211へ出力される。
【0068】
次元1シンドローム値メモリ211は、次元1シンドローム値計算部111で計算された次元1シンドローム値を記憶する。次元1シンドローム値メモリ211は、次元1軟判定入力値計算部112へ次元1シンドローム値を出力する。
【0069】
次元1軟判定入力値計算部112は、次元1シンドローム値メモリ211から入力される次元1シンドローム値と、次元1修正情報メモリ212から入力される修正情報と、信頼度情報メモリ231から入力される信頼度情報を用いて、次元1軟判定入力値(第1の軟判定入力値の一例)を計算する。次元1軟判定入力値計算部112による次元1軟判定入力値の計算方法の詳細は後述する。次元1軟判定入力値計算部112は、次元1軟判定入力値を次元1SISO復号部113へ出力する。
【0070】
なお、次元1修正情報メモリ212は、次元1の成分符号の修正情報(次元1修正情報、第1の修正情報の一例)を記憶するメモリである。同様に、次元2修正情報メモリ222は、次元2の成分符号(第2の成分符号の一例)の修正情報(次元2修正情報、第2の修正情報の一例)を記憶するメモリである。
【0071】
修正情報は、復号処理により修正された位置(修正位置)を示す情報、および、値の差分を示す情報を含む。修正位置は、例えば、復号処理により発見された復号語と、読み出されたデータ(ハードビットデータ)との間で値が異なっている位置を示す。シンボルが二元体の元の場合は、値の差分を示す情報は省略することができる。二元体の場合は、「値が異なる」ことは「ビットが反転している」ということに限られるからである。二元体の場合、修正位置は、ビットを訂正した位置(訂正ビット位置)と解釈することもできる。
【0072】
シンボルが二元体の元である本実施形態では、次元1修正情報は、次元1の成分符号に対する次元1の復号処理および次元2の復号処理で発見されたMAP復号語と、読出し情報メモリ201に記憶されているハードビットデータとで値が異なっている位置を示す。同様に、次元2修正情報は、次元2の成分符号に対する次元1の復号処理および次元2の復号処理で発見されたMAP復号語と、読出し情報メモリ201に記憶されているハードビットデータとで値が異なっている位置を示す。
【0073】
次元1修正情報が位置を示すために用いるアドレス(次元1アドレス)の設定方法と、次元2修正情報が位置を示すために用いるアドレス(次元2アドレス)の設定方法と、は異なっていてもよい。例えば、次元1アドレスは、次元1軟判定入力値計算部112が、より高速に次元1修正情報を読み出せるように設定されてもよい。同様に、次元2アドレスは、次元2軟判定入力値計算部122が、より高速に次元2修正情報を読み出せるように設定されてもよい。次元1アドレスと次元2アドレスとを共通化したアドレスが用いられてもよい。この場合、次元1修正情報メモリ212および次元2修正情報メモリ222を共通化した1つの修正情報メモリが用いられてもよい。
【0074】
次元1修正情報メモリ212に記憶する次元1修正情報のサイズはどのように設定されてもよい。本実施形態では、次元1修正情報のサイズは固定値(例えば15ビット)に設定される。成分符号ごとの次元1修正情報の個数(修正情報数)は、固定値であってもよいし、成分符号数などに応じて決定されてもよい。
【0075】
各次元の修正情報は、さらに、エラーフラグ、および、他方次元エラーフラグを含んでもよい。エラーフラグは、当該修正情報に対応する次元で、当該修正情報に対応するビットがエラーであると判定しているか否かを示す情報である。他方次元エラーフラグは、当該修正情報に対応する次元以外の次元(他方次元)で、当該修正情報に対応するビットがエラーであると判定しているか否かを示す情報である。
【0076】
例えば次元1修正情報は、次元1でエラーであると判定しているか否かを示すエラーフラグと、次元2でエラーであると判定しているか否かを示す他方次元エラーフラグと、を含んでもよい。
【0077】
次元1シンドローム値メモリ211は、「軟判定入力値の硬判定値から計算したシンドローム値」に相当するように修正されたシンドローム値が記憶されてもよい。このような構成の場合、修正情報は、さらに、反転フラグを含んでもよい。反転フラグは、当該修正情報に対応する次元で、軟判定入力値の符号が反転しているか否かを示す情報である。軟判定入力値の符号が反転しているか否かは、軟判定入力値の符号がチャネル値の符号と逆であるか否か、と言い換えることができる。
【0078】
信頼度情報メモリ231は、信頼度情報を記憶するメモリである。信頼度情報は、各成分符号のSISO復号の確からしさ(復号信頼度)を表す情報である。信頼度情報メモリ231は、成分符号それぞれについての信頼度情報を記憶する。例えば信頼度情報メモリ231は、次元1の成分符号の信頼度情報(第1の信頼度情報の一例)、および、次元2の成分符号の信頼度情報(第2の信頼度情報の一例)を記憶する。
【0079】
信頼度情報は、例えば、軟判定入力値(=確率情報)から計算された、符号語cがオリジナルの成分符号語である確率が高いか低いかを示すメトリックである。例えば、二元符号における信頼度情報としては、符号語cに対して、軟判定入力値Sから計算した尤度などを用いることができる。信頼度情報はこれに限らず、例えば以下のような情報を用いてもよい。
(I1)符号語cが正しい確率値
(I2)符号語cと軟判定入力値Sとの距離関数の値
(I3)上述の(I1)または(I2)に示す値に対して対数関数などを適用した値
【0080】
次元1SISO復号部113は、次元1軟判定入力値計算部112から入力される次元1軟判定入力値を用いてSISO復号を行い、修正情報(訂正ビット位置)およびSISO復号の信頼度情報を得る。次元1SISO復号部113は、修正情報(訂正ビット位置)を次元1修正情報メモリ212および次元2修正情報メモリ222へ出力し、信頼度情報を信頼度情報メモリ231へ出力する。
【0081】
なお、次元1SISO復号部113は、次元1修正情報メモリ212および次元2修正情報メモリ222に出力する修正情報(訂正ビット位置)を、それぞれのメモリで用いられるアドレス(次元1アドレス、または、次元2アドレス)により表し、次元1修正情報メモリ212および次元2修正情報メモリ222のうちの対応するメモリに出力する。
【0082】
次元1の成分符号についての処理は、上述のように、次元1シンドローム値計算部111、次元1シンドローム値メモリ211、次元1軟判定入力値計算部112、次元1SISO復号部113、次元1修正情報メモリ212、信頼度情報メモリ231、および、次元2修正情報メモリ222を用いて実現される。
【0083】
次元2の成分符号についての処理は、「次元1」と「次元2」とを入れ替えれば、次元1の成分符号についての処理と同等であるため詳細な説明を省略する。例えば、次元1の成分符号についての処理で用いられる各部は、次元2の成分符号についての処理で用いられる各部と以下のように対応する。
・次元1シンドローム値計算部111:次元2シンドローム値計算部121
・次元1シンドローム値メモリ211:次元2シンドローム値メモリ221
・次元1軟判定入力値計算部112:次元2軟判定入力値計算部122
・次元1SISO復号部113:次元2SISO復号部123
・次元1修正情報メモリ212:次元2修正情報メモリ222
【0084】
なお、信頼度情報メモリ231は、次元1の成分符号についての処理、および、次元2の成分符号についての処理で共通に用いられる。
【0085】
以下では、次元を区別しない場合、各メモリを以下のように表す場合がある。
・次元1シンドローム値メモリ211、次元2シンドローム値メモリ221:SMEM
・次元1修正情報メモリ212、次元2修正情報メモリ222:FMEM
【0086】
キャンセル処理部241は、SISO復号部182によるターボ復号が失敗した場合に、複数の成分符号それぞれに対して得られる複数の復号結果(以下、最尤復号語ともいう)のうち予め定められた条件を満たす最尤復号語を復号前の値に戻すキャンセル処理を実行する。複数の最尤復号語は、読出し情報(受信語)に含まれる複数の要素にそれぞれ対応する復号結果に相当する。誤り訂正符号として積符号が用いられる場合、複数の要素は、例えば、積符号の複数の成分符号に相当する。
【0087】
ターボ復号では、各成分符号の復号時に見つかった誤り位置を示す修正情報がFMEM(次元1修正情報メモリ212、次元2修正情報メモリ222)に記憶される。そして、記憶された修正情報と最尤復号語の信頼度とを用いて、最終的にビット反転(誤り訂正)するか否かが判断される。キャンセル処理は、FMEMに記憶された修正情報を削除する処理に相当する。修正情報を削除することは、当該修正情報が示す誤り位置の誤りが見つからない状態に戻すこと、言い換えると、最尤復号語を復号前の値に戻すことに相当する。
【0088】
図9は、本実施形態のメモリシステムによる復号処理の一例を示すフローチャートである。
図9は、二次元の誤り訂正符号に対する復号処理の例を示す。
【0089】
制御部11は、不揮発性メモリ20から、誤り訂正符号を読み出し、読出し情報を得る(ステップS101)。制御部11は、読み出された読出し情報を読出し情報メモリ201へ転送して記憶する(ステップS102)。
【0090】
次元1シンドローム値計算部111および次元2シンドローム値計算部121は、読出し情報(ハードビットデータ)から、それぞれ次元1シンドローム値および次元2シンドローム値を計算する(ステップS103)。例えば次元1シンドローム値計算部111は、読出し情報メモリ201に記憶されているハードビットデータを読み出し、読み出したハードビットデータを用いて次元1シンドローム値を計算し、次元1シンドローム値メモリ211に記憶する。次元2シンドローム値計算部121は、読出し情報メモリ201に記憶されているハードビットデータを読み出し、読み出したハードビットデータを用いて次元2シンドローム値を計算し、次元2シンドローム値メモリ221に記憶する。
【0091】
次に、次元1の成分符号の復号処理が実行される。以下のステップS104、ステップS105は、複数の次元1の成分符号ごとに実行される。
【0092】
まず、次元1軟判定入力値計算部112は、計算された次元1シンドローム値と、次元1修正情報メモリ212から入力される修正情報と、信頼度情報メモリ231から入力される信頼度情報と、を用いて次元1軟判定入力値を計算する(ステップS104)。
【0093】
以下に、軟判定入力値の計算方法の例を説明する。以下では、次元1の成分符号についての軟判定入力値(次元1軟判定入力値)の計算方法の例を説明するが、次元2の成分符号についての軟判定入力値(次元2軟判定入力値)の計算(ステップS106)に対しても同様の手順を適用できる。
【0094】
次元1軟判定入力値計算部112は、次元1シンドローム値メモリ211から、次元1シンドローム値sを読み出し、変数xに次元1シンドローム値sを代入する。
【0095】
次元1軟判定入力値計算部112は、次元1修正情報メモリ212から、修正情報を読み出す。読み出された修正情報のうち、他方の次元(次元2)で発見された修正情報をa1,a2,・・・,amとする。なお、a1,a2,・・・,amの値は、次元1の成分符号内のビット位置を示す。すなわち、修正情報は、修正情報が示す各位置でビットが反転されたことを示す。
【0096】
次元1軟判定入力値計算部112は、信頼度情報メモリ231から、a1,a2,・・・,amに対応する信頼度情報pr1,pr2,・・・,prmを読み出す。
【0097】
次元1軟判定入力値計算部112は、位置ai(i=1,2,・・・,m)に対して、以下の計算を行う:
(C1)priから外部値eiを求める。
(C2)σi=λi+eiを求める。λiσi<0iならば、変数xを、x+Hxiの値に書き換える。λiは読み出したハードビットデータの関数を示す。Hは、次元1の成分符号のパリティ検査行列を示す。xiは位置aiに対応する成分のみが1であり、他の成分は0であるベクトルを示す。
【0098】
次元1軟判定入力値計算部112は、最終的に得られた変数xの値(すなわち、次元1シンドローム値sから始めて、上述の(C2)の書き換えにより得られた値)をs’とする。次元1軟判定入力値計算部112は、s’,σ1,σ2,・・・,σm,a1,a2,・・・,amを、軟判定入力値として出力する。
【0099】
上述の方法は、次元1シンドローム値メモリ211から読み出した次元1シンドローム値sを、次元1シンドローム値sを読み出した時に得られている情報a1,a2,・・・,am,pr1,pr2,・・・,prmを用いて更新することでs’を得る手順になっている。この方法の変形例として、a1,a2,・・・,am,pr1,pr2,・・・,prmが得られた時点(後述するステップS105)で次元1シンドローム値sを更新することでs’を得て、次元1シンドローム値メモリ211にs’を記憶しておく手順としてもよい。この場合、ステップS104では次元1シンドローム値メモリ211から読み出した値s’を更新する必要がない。
【0100】
ステップS105について説明する。次元1SISO復号部113は、次元1のSISO復号を行い、訂正ビット位置を示す修正情報を次元1修正情報メモリ212および次元2修正情報メモリ222へ記憶するとともに、SISO復号の結果として得られた信頼度情報を信頼度情報メモリ231へ記憶する(ステップS105)。
【0101】
以下に、SISO復号の例を説明する。以下の例は、上述の軟判定入力値の例を用いるSISO復号の例である。また、以下では、次元1の成分符号についてのSISO復号の例を説明するが、次元2の成分符号についても同様の手順を適用できる。
【0102】
なお、次元1SISO復号部113は、以下に説明するSISO復号のうちいずれか1つを実行するように構成されてもよいし、複数種類のSISO復号を切り替えて実行するように構成されてもよい。例えば次元1SISO復号部113は、複数種類のSISO復号のうち、復号状況に応じて選択されたSISO復号を実行してもよい。
【0103】
SISO復号の例1:限界距離復号
次元1SISO復号部113は、s’を用いた、以下の手順の復号により、訂正ビット位置および信頼度情報を求める。
(E1-1)s’を用いて次元1の成分符号の限界距離復号を行い、訂正ビット位置eを求める(この復号方法をシンドローム復号と呼ぶ)。
(E1-2)訂正ビット位置eと、信頼度情報メモリ231に記憶されている信頼度情報とから、次元1の成分符号の復号結果の信頼度情報prを求める。
(E1-3)訂正ビット位置e、信頼度情報prを出力する。
【0104】
SISO復号の例2:Chase復号を応用した方法
次元1SISO復号部113は、s’,σ1,σ2,・・・,σm,a1,a2,・・・,amを用いた、以下の手順の復号により、訂正ビット位置および信頼度情報を求める。
(E2-1)σ1,σ2,・・・,σmを、絶対値が小さい順にソートする。a1,a2,・・・,amもσ1,σ2,・・・,σmと添字が対応するように並び替える。ソートは近似的に行ってもよい。以下、σ1,σ2,・・・,σm,a1,a2,・・・,amはソート処理後のものとする。
(E2-2)t,f(t≦mかつf≦t)を任意の定数として、a1,a2,・・・,atからf個を選択する。tCf通りの選択の組み合わせそれぞれについて、以下の処理(E2-2-1)を行う。
(E2-2-1)選択した位置のビットを反転させたシンドローム値s’’をs’から計算する(ステップS104の(C2)と同様の計算)。そして、s’’を用いてシンドローム復号を行い、訂正ビット位置eを求める。さらに、訂正ビット位置eとf個の反転位置と信頼度情報メモリ231に記憶されている信頼度情報とから、次元1の成分符号の信頼度情報prを求める。
(E2-3)tCf通りの選択の組み合わせそれぞれについて得られた訂正ビット位置および信頼度情報の組の中で、信頼度情報が最大である組を(e^,pr^)とする。
(E2-4)訂正ビット位置e^、信頼度情報pr^を出力する。
【0105】
図9のフローチャートの説明に戻る。次に、次元2の成分符号の復号処理が実行される。以下のステップS106、ステップS107は、複数の次元2の成分符号ごとに実行される。
【0106】
まず、次元2軟判定入力値計算部122は、計算された次元2シンドローム値と、次元2修正情報メモリ222から入力される修正情報と、信頼度情報メモリ231から入力される信頼度情報と、を用いて次元2軟判定入力値(第2の軟判定入力値の一例)を計算する(ステップS106)。ステップS106は、ステップS104と同様の手順により実行することができる。
【0107】
次元2軟判定入力値計算部122は、次元2のSISO復号を行い、訂正ビット位置を示す修正情報を次元1修正情報メモリ212および次元2修正情報メモリ222へ記憶するとともに、SISO復号の結果として得られた信頼度情報を信頼度情報メモリ231へ記憶する(ステップS107)。ステップS107は、ステップS105と同様の手順により実行することができる。
【0108】
次に、復号器18は、復号に成功したか否かを判定する(ステップS108)。復号に成功したとは、例えば正しいと判断できる復号語が発見されたことなどであってよい。
【0109】
一方、復号に成功していない場合(ステップS108のNO)、復号器18は、本動作の反復回数が予め設定しておいた規定値に達しているか否かを判定する(ステップS110)。規定値に達していない場合(ステップS110のNO)、復号器18は、反復回数を1増やし、ステップS104へリターンして、以降の動作を実行する。なお、反復回数とは、例えばステップS104~S107の動作を繰り返した回数等であってよい。
【0110】
復号に成功した場合(ステップS108のYES)、復号器18は、外部の制御部等に復号の成功とともに復号語を通知し(ステップS109)、復号処理を終了する。復号器18は、例えば、復号処理により得られた、信頼度情報メモリ231、次元1修正情報メモリ212、および、次元2修正情報メモリ222に記憶されている情報を用いて、読出し情報メモリ201に書き込まれているハードビットデータを修正する。復号器18は、修正後のハードビットデータを最終的な出力(出力復号語)とする。
【0111】
例えば復号器18は、読出し情報メモリ201内のハードビットデータの各ビットについて、上述の式(1)を用いて対数事後確率比を計算する。復号器18は、計算した対数事後確率比の正負により、読出し情報メモリ201に記憶されている各ビットに対応するハードビットデータを修正するかどうかを決定する。復号器18は、決定したとおりにハードビットデータを修正し、出力復号語とする。
【0112】
反復回数が規定値に達していた場合(ステップS110のYES)、復号器18(SISO復号部182内のキャンセル処理部241)は、キャンセル処理を実行する(ステップS111)。キャンセル処理は、キャンセル後(修正情報を削除した後)のFMEM(次元1修正情報メモリ212、次元2修正情報メモリ222)の情報を用いて、読出し情報メモリ201に書き込まれているハードビットデータを修正し、出力復号語を生成する処理を含む。
【0113】
キャンセル処理の後、復号器18(残留エラー除去部183)は、残留エラー除去処理を実行する(ステップS112)。残留エラー除去処理は、キャンセル処理により生成された出力復号語を対象として実行される。
【0114】
復号器18は、残留エラー除去処理による復号に成功したか否かを判定する(ステップS113)。復号に成功していない場合(ステップS113のNO)、復号器18は、外部の制御部等に復号の失敗を通知し(ステップS114)、復号処理を終了する。復号に成功した場合(ステップS113のYES)、復号器18は、外部の制御部等に復号の成功とともに復号語を通知し(ステップS109)、復号処理を終了する。
【0115】
図9の例では、ステップS109で読出し情報メモリ201に記憶されているハードビットデータをまとめて修正している。ハードビットデータの修正方法はこれに限られず、例えば、各繰り返しのSISO復号の直後にハードビットデータを毎回修正する方法でもよい。この場合、ステップS109内での修正処理は不要であり、ステップS109に到達した時点での読出し情報メモリ201に記憶されているハードビットデータをそのまま最終的な出力(出力復号語)とすればよい。
【0116】
これまでは、二次元の誤り訂正符号での復号処理の例を説明したが、上述のように、多次元(N次元)の誤り訂正符号に対しても同様の手順を適用できる。例えばN個の次元のうち第i(1≦i≦N)次元の第a(1≦a≦ni、niは第i次元の成分符号数)番目の成分符号を第aの成分符号とし、第aの成分符号に対する修正情報、信頼度情報、および、軟判定入力値を、それぞれ第aの修正情報、第aの信頼度情報、および、第aの軟判定入力値とする。
【0117】
この場合、復号器18は、第aの修正情報、第aの信頼度情報、および、第aの成分符号のシンドローム値に基づいて、第iの成分符号に対する第aの軟判定入力値を計算する。復号器18は、第aの軟判定入力値を入力して第aの成分符号の復号処理を実行することにより、第aの成分符号の復号語、第aの修正情報、および、第aの信頼度情報を計算する。復号器18は、計算した第aの修正情報および第aの成分符号の復号処理によって修正された第b(j≠i、1≦j≦N、bは第j次元の成分符号のインデックス)の成分符号の修正された位置を示す第bの修正情報を修正情報メモリに記憶し、第aの信頼度情報を信頼度情報メモリに記憶する。
【0118】
次に、キャンセル処理の詳細について説明する。上記のように、キャンセル処理は、ターボ復号が失敗した場合に、複数の最尤復号語のうち予め定められた条件を満たす最尤復号語を復号前の値に戻す処理である。条件としては、例えば、以下の条件R1~R3を用いることができる。
【0119】
条件R1:成分符号の信頼度情報が示す信頼度(復号信頼度)が閾値(第1閾値)未満である。
条件R2:受信値と最尤復号語のハミング距離が閾値(第2閾値)以上である。
条件R3:キャンセル処理を実行した場合に、復号が成功した状態から復号が失敗した状態に変化する他の次元(以下、他方次元という)の成分符号群に含まれる成分符号の個数が、閾値(第3閾値)以下である。
【0120】
以下、各条件の詳細について説明する。
図10は、条件R1に基づくキャンセル処理を説明するための図である。なお、
図10は、
図6と同様に、列方向に6ビット(列1~列6)の情報ビット、行方向に7ビット(行1~行7)の情報ビットを符号化した積符号を用いる例を示す。
【0121】
条件R1は、信頼度が閾値に達していない成分符号に対する最尤復号語をキャンセルの対象にする条件であると解釈することができる。閾値は、例えば信頼度の最大値であってもよい。この場合、条件R1は、信頼度が最大値に達していない成分符号に対する最尤復号語をキャンセルの対象にすることを示す。
【0122】
図10は、信頼度の閾値(例えば最大値)が15である例を示す。各行の右、および、各列の下に記載された数値(
図10では、0、11、または、15)が、信頼度を示す。なお、信頼度=0は最尤復号語が未発見であることを示す。従って、信頼度が0である成分符号は、条件R1による判定の対象外とされる。
【0123】
保護領域1001内の下線なしの数値は、不揮発性メモリ20から読み出された時点での誤り数を示し、下線ありの数値は、復号器18による誤訂正でさらに追加された誤り数を示す。例えば2番目の列1002(列2)は、行2およびパリティに相当する箇所で、誤訂正により誤り数が増加している。
【0124】
条件R1を用いたキャンセル処理では、信頼度が最大値未満(11<15)である列1002(列2)の成分符号が対象となる。
図10の中央部は、キャンセル処理後の積符号の状態を示す。キャンセル処理により、誤訂正により増加した誤りが削除される。
【0125】
この状態で、例えば3ビット訂正可能なBCH符号を用いた残留エラー除去処理が実行されると、保護領域1001内の2ビットの誤りが訂正され、復号が成功する。
図10の右部は、残留エラー除去処理により復号が成功した状態を示す。
【0126】
次に、条件R2に基づくキャンセル処理について説明する。条件R2は、ある成分符号について、当該成分符号の受信値と、当該成分符号について復号で得られた最尤復号語とのハミング距離が閾値以上であることを示す。ある成分符号の受信値とは、読出し情報(受信語)に含まれる要素のうち、当該成分符号に対応する要素を表す。受信値と最尤復号語のハミング距離は、例えば、受信値に対してBCH符号の限界距離復号を実行して発見された誤りの個数により算出することができる。
【0127】
条件R2を用いることにより、例えば、信頼度が最大値に達している誤訂正をキャンセルすることが可能となる。
【0128】
次に、条件R3に基づくキャンセル処理について説明する。条件R3は、ある次元の成分符号のキャンセル処理によって、非充足の状態になる他方次元の成分符号の個数が閾値以下である場合に、当該成分符号をキャンセルの対象にする条件であると解釈できる。
【0129】
なお、充足とは、シンドローム値が、誤りがないことを示す値(例えば0)であることを意味し、非充足とは、シンドローム値が、誤りがあることを示す値(例えば0以外)であることを意味する。
【0130】
図11は、キャンセル処理により、他方次元の成分符号のシンドローム値が充足から非充足になる例を示す図である。
図11の誤り数1101は、復号処理により発見された誤り数(=1)を示す。また、この例では、行3に対応する成分符号のシンドローム値は充足状態となっている。
【0131】
ここで、列2の成分符号に対してキャンセル処理が実行されたとする。この場合、列2の最尤復号語がキャンセルされるため、行3で発見された誤りに対応するビットが反転され、行3に対応する成分符号(他方次元の成分符号)のシンドロームが非充足状態となる。
【0132】
図12は、キャンセル処理を実行しても、他方次元の成分符号のシンドローム値が非充足のままとなる例を示す図である。
図10と同様に、
図12では、保護領域内の下線なしの数値は、不揮発性メモリ20から読み出された時点での誤り数を示し、下線ありの数値は、復号処理によりさらに追加された誤り数を示す。
【0133】
図12の例では、行2に対応する成分符号のシンドローム値は非充足状態となっている。ここで、列2の成分符号に対してキャンセル処理が実行されたとする。この場合、列2の最尤復号語がキャンセルされるため、行2で発見された誤りに対応するビットが反転されるが、行2に対応する成分符号(他方次元の成分符号)のシンドロームは非充足状態のままで変更されない。
【0134】
条件R3では、
図11のように充足状態から非充足状態に変更される成分符号の個数が考慮されるが、
図12のように非充足状態のまま変更されない成分符号の個数は考慮されない。
【0135】
キャンセル処理部241は、上記のような各条件(R1~R3)を満たす成分符号をすべて対象とするのではなく、条件を満たす複数の成分符号のうち一部の成分符号をキャンセル処理の対象としてもよい。例えばキャンセル処理部241は、条件を満たす複数の成分符号から一部の成分符号を選択し、選択した成分符号に対してキャンセル処理を実行する処理を複数回実行してもよい。残留エラー除去部183は、キャンセル処理ごとに、当該キャンセル処理を実行した後の複数の復号結果を用いて残留エラー除去処理を実行する。
【0136】
成分符号の選択方法はどのような方法であってもよいが、例えば、複数の成分符号からランダムに一部の成分符号を選択する方法が適用できる。復号器18は、選択した一部の成分符号に対してキャンセル処理を実行し、残留エラー除去処理を実行した結果、復号に成功した場合は、その時点で復号処理を終了してもよい。
【0137】
なお、キャンセル処理は、成分符号の個数に関する条件が満たされる場合に実行されてもよい。例えばキャンセル処理部241は、信頼度が閾値(第4閾値)以上である成分符号の個数が、別の閾値(第5閾値)以上であるときに、キャンセル処理を実行してもよい。
【0138】
以上のように、本実施形態のメモリシステムは、複数の成分符号それぞれに対する複数の復号結果のうち予め定められた条件を満たす復号結果を復号前の値に戻すキャンセル処理を実行し、キャンセル処理後の復号結果に対して、残留エラー除去処理を実行する。これにより、例えば誤訂正である復号結果をキャンセルすることができ、誤り訂正の精度を向上させることができる。
【0139】
(第2の実施形態)
第2の実施形態では、誤り訂正符号としてLDPC符号を用いる例を説明する。第2の実施形態では、復号器の構成が、第1の実施形態と異なる。以下、第2の実施形態の復号器18-2の機能について説明する。
【0140】
図13は、第2の実施形態の復号器18-2の概略構成例を示すブロック図である。復号器18-2は、HIHO復号部181と、SISO復号部182-2と、残留エラー除去部183と、を備える。
【0141】
第2の実施形態では、SISO復号部182-2の機能が第1の実施形態の復号器18と異なっている。その他の構成は第1の実施形態と同様であるため同一の符号を付し説明を省略する。
【0142】
SISO復号部182-2は、LDPC符号の復号を行う。例えばSISO復号部182-2は、確率伝播法(BP:Belief Propagation、第1復号処理の一例)によりLDPC符号を復号する。
【0143】
確率伝播法では、例えば、複数の変数ノードと複数のチェックノードとを含むタナーグラフが用いられる。タナーグラフは、復号の対象となる符号が満たすべきルール構造(制約)を表現したグラフであると解釈することができる。そして、確率伝播法では、例えばタナーグラフを用いた軟判定復号が実行される。例えば、符号ビットが0である尤度と1である尤度との比を対数で表した対数尤度比(LLR)が、軟判定復号の入力として用いられる。
【0144】
複数の変数ノードは、それぞれ1個のビットに対応する。チェックノードは、例えば、「隣接する変数ノードの復号結果が偶パリティになっている」という制約を表す。偶パリティとは、例えば隣接する複数の変数ノードの復号結果の排他的論理和(EXOR)が0であることを意味する。例えば、制約が満たされている確率が、制約が満たされていない確率よりも高いとき、チェックノードは充足状態となる。
【0145】
タナーグラフ上での軟判定復号では、各変数ノードは、チェックノードを介して他の変数ノードとの間でLLRを受け渡す。そして、最終的に各変数ノードの符号ビットが0であるか、1であるかが判断される。
【0146】
LDPC符号の復号では、複数の変数ノードそれぞれに対して得られる複数の復号結果(以下、事後値という)が、読出し情報(受信語)に含まれる複数の要素にそれぞれ対応する復号結果に相当する。
【0147】
SISO復号部182-2は、チェックノードの信頼度を算出し、信頼度についての条件を用いてキャンセル処理を実行する。すなわち、SISO復号部182-2は、第1の実施形態のSISO復号部182のキャンセル処理部241に相当する機能をさらに備えている。
【0148】
チェックノードの信頼度は、例えば「チェックノードに対応するシンドロームの対数尤度比」により算出される。以下、チェックノードに対応するシンドロームの対数尤度比について説明する。チェックノードに隣接するk個(kは2以上の整数)の変数ノードのビット値に対する確率変数をb1、b2、・・・bkとする。bi(1≦i≦k)が1である確率Pr(bi=1)をpiとする。また、変数ノードの事後値LiはLi=ln((1-pi)/pi)により表す。このとき、以下の式(2)を、チェックノードに対応するシンドロームの対数尤度比と定義する。
ln(Pr(b1+b2+・・・+bk=0)/Pr(b1+b2+…+bk=1))
・・・(2)
【0149】
lnは対数を意味する。分数の部分は、分子が”チェックノードが充足状態である確率”を意味し、分母が”チェックノードが非充足状態である確率”を意味する。このように、式(2)の分数の部分は、確率の比になっている。式(2)を変形すると、以下の式(3)が得られる。
2tanh^(-1)(Π_(i∈N(j))tanh(Li/2)) ・・・(3)
【0150】
SISO復号部182-2は、式(2)または式(3)によりチェックノードの信頼度を算出する。例えば式(2)の対数尤度比の符号が正であれば、「隣接する変数ノードの復号結果が偶パリティになっている」確率が、「隣接する変数ノードの復号結果が偶パリティになっていない」確率よりも高い。また、対数尤度比の絶対値が大きいほど、隣接する変数ノードの復号結果が偶パリティになっている」確率と、「隣接する変数ノードの復号結果が偶パリティになっていない」確率との差が大きいことを意味する。従って、式(2)または式(3)により算出される値は、チェックノードの信頼度として利用することができる。
【0151】
チェックノードの信頼度は上記に限られず、例えば、チェックノードに接続される複数の変数ノードの事後値の絶対値のうち最小値を、チェックノードの信頼度として用いてもよい。この場合、値が大きいほど、信頼度が高いことを意味する。
【0152】
SISO復号部182-2は、LDPC符号の復号が成功しなかった場合に、チェックノードの信頼度についての条件を用いてキャンセル処理を実行する。条件は、例えば、復号結果(事後値)に対応する変数ノードに接続されるチェックノードの信頼度が閾値(第6閾値)未満であることを示す。キャンセル処理は、例えば、条件を満たす事後値を、受信値に置き換える処理である。言い換えると、キャンセル処理は、信頼度が閾値未満であるチェックノードに直接接続されている変数ノードの事後値を、受信値に置き換える処理である。
【0153】
図14は、第2の実施形態でのキャンセル処理の例を説明するための図である。
図14は、確率伝播法によるLDPC符号の復号が成功しなかった状態、すなわち、非充足のチェックノードが残っている状態を示す。
図14では、四角がチェックノードを表し、丸が変数ノードを表す。また、
図14では、右端のチェックノード1401が、信頼度が閾値未満のチェックノードに相当する例が示されている。
【0154】
「(受信値)→(事後値)」は、確率伝播法による復号で、受信値が事後値に変更されたことを示す。「事後値硬判定値」は、事後値に対応する硬判定値(0または1)を表す。例えば、事後値が正の場合、事後値硬判定値は0となり、事後値が負の場合、事後値硬判定値は1となる。「キャンセル処理後の値」は、キャンセル処理により受信値に置き換えられた後の事後値に対応する硬判定値を表す。「残留エラー除去処理後の値」は、「キャンセル処理後の値」に対して残留エラー除去処理が実行された後の復号結果を表す。なお、
図14では、1ビット訂正可能な残留エラー除去処理が用いられると仮定する。
【0155】
図14の例では、SISO復号部182-2は、チェックノード1401に接続される4つの変数ノード1411~1414の事後値をそれぞれ受信値に変更する。例えば、変数ノード1411の事後値「-3」は、受信値「-9」に変更される。この受信値に対応する硬判定値は、「1」となるため、変更前の事後値に対応する硬判定値「1」から変更されない。
【0156】
一方、変数ノード1412の事後値「-1」は、受信値「3」に変更される。この受信値に対応する硬判定値は、「0」となるため、変更前の事後値に対応する硬判定値「1」に対して変更される。
【0157】
変数ノード1411および1412の事後値硬判定値が誤っていると仮定する。この場合、キャンセル処理前の事後値硬判定値は、2ビットの誤りを含むことになるため、1ビット訂正可能な残留エラー除去処理では誤りを除去できない。これに対して、キャンセル処理後の事後値硬判定値は、1ビットの誤りを含むことになるため、1ビット訂正可能な残留エラー除去処理で誤りを除去することができる。
【0158】
なお、第2の実施形態の復号処理では、例えば、第1の実施形態の復号処理(
図9)のうち、ターボ復号に相当するステップS102~S107の代わりに、ステップS101で読み出された読出し情報に対する確率伝播法による復号が実行される。その他のステップS108~S114の流れは、第1の実施形態と同様である。
【0159】
キャンセル処理は、チェックノードの個数に関する条件が満たされる場合に実行されてもよい。例えばSISO復号部182-2は、信頼度が閾値(第7閾値)以上であるチェックノードの個数が、別の閾値(第8閾値)以上であるときに、キャンセル処理を実行してもよい。
【0160】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0161】
1 メモリシステム
10 メモリコントローラ
11 制御部
12 データバッファ
13 メモリI/F
14 符号化/復号部
15 ホストI/F
16 内部バス
17 符号化器
18、18-2 復号器
20 不揮発性メモリ
30 ホスト