(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022124682
(43)【公開日】2022-08-26
(54)【発明の名称】メモリシステム
(51)【国際特許分類】
H03M 13/29 20060101AFI20220819BHJP
H03M 13/45 20060101ALI20220819BHJP
G06F 11/10 20060101ALI20220819BHJP
【FI】
H03M13/29
H03M13/45
G06F11/10 648
【審査請求】未請求
【請求項の数】11
【出願形態】OL
(21)【出願番号】P 2021022456
(22)【出願日】2021-02-16
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】久保田 貴大
(72)【発明者】
【氏名】渡邉 大毅
(72)【発明者】
【氏名】内川 浩典
【テーマコード(参考)】
5B001
5J065
【Fターム(参考)】
5B001AA03
5B001AB01
5B001AB02
5B001AD03
5J065AB01
5J065AC03
5J065AD02
5J065AF03
5J065AG05
(57)【要約】
【課題】復号に必要なメモリ量および時間を削減する。
【解決手段】メモリシステムは、N次元の誤り訂正符号を記憶する不揮発性メモリとメモリコントローラとを備える。メモリコントローラは、第i(1≦i≦N)次元の第a(1≦a≦ni)成分符号の修正情報、第aの信頼度情報、および、第aの成分符号のシンドローム値に基づいて、第aの成分符号に対する第aの軟判定入力値を計算し、第aの軟判定入力値を入力して第aの成分符号の復号処理を実行して、第aの成分符号の復号語、第aの修正情報、および、第aの信頼度情報を計算し、第aの修正情報および、第j次元(j≠i、1≦j≦N)の第b(1≦b≦nj)の修正された位置を示す第bの修正情報を修正情報メモリに記憶し、第aの信頼度情報を信頼度情報メモリに記憶し、読出し情報、および、各成分符号の信頼度情報から計算される出力復号語を出力する。
【選択図】
図5
【特許請求の範囲】
【請求項1】
符号を構成するシンボルのうち少なくとも1つのシンボルがN個(Nは2以上の整数)の成分符号群によってそれぞれ保護されているN次元の誤り訂正符号を記憶する不揮発性メモリと、
前記不揮発性メモリから読み出される読出し情報を記憶する読出し情報メモリと、
前記読出し情報メモリに記憶された読出し情報から計算されるM個(1≦i≦N、niを第i次元の成分符号群に含まれる成分符号の個数として、Mはniの総和)の前記成分符号それぞれのシンドローム値を記憶するシンドローム値メモリと、
第i次元の第a(1≦a≦ni)の成分符号それぞれについて、第aの前記成分符号の復号処理それぞれによって修正された位置を少なくとも示す第aの修正情報を記憶する修正情報メモリと、
第aの前記成分符号の復号処理で得られる復号語の信頼度を表す第aの信頼度情報を記憶する信頼度情報メモリと、
第aの修正情報、第aの信頼度情報、および、第aの前記成分符号のシンドローム値に基づいて、第aの前記成分符号に対する第aの軟判定入力値を計算し、
第aの前記軟判定入力値を入力して第aの前記成分符号の復号処理を実行することにより、第aの前記成分符号の復号語、第aの前記修正情報、および、第aの前記信頼度情報を計算し、計算した第aの前記修正情報および第iの前記成分符号の復号処理によって修正された第j次元(j≠i、1≦j≦N)の第b(1≦b≦nj)の前記成分符号の修正された位置を示す第bの前記修正情報を前記修正情報メモリに記憶し、計算した第aの前記信頼度情報を前記信頼度情報メモリに記憶し、
前記読出し情報、前記修正情報および、M個の第aの前記信頼度情報から計算される出力復号語を出力する、
メモリコントローラと、
を備えるメモリシステム。
【請求項2】
前記メモリコントローラは、
第i次元の前記成分符号に対して、複数種類の復号処理のうち選択された復号処理を実行する、
請求項1に記載のメモリシステム。
【請求項3】
前記メモリコントローラは、
復号処理の状態を示す状態情報に応じて、第aの前記修正情報の計算、および、第aの前記信頼度情報の計算を実行するか否かを判断する、
請求項1に記載のメモリシステム。
【請求項4】
前記状態情報は、第aの前記成分符号のシンドローム値が変化するか否かを示し、
前記メモリコントローラは、
前記状態情報が、シンドローム値が変化したことを示す場合に、第aの前記修正情報の計算、および、第aの前記信頼度情報の計算を実行すると判断する、
請求項3に記載のメモリシステム。
【請求項5】
前記状態情報は、復号処理により修正される位置の候補が新たに追加されたか否かを示し、
前記メモリコントローラは、
前記状態情報が、復号処理により修正される位置の候補が新たに追加されたことを示す場合に、第aの前記修正情報の計算、および、第aの前記信頼度情報の計算を実行すると判断する、
請求項3に記載のメモリシステム。
【請求項6】
前記状態情報は、第aの前記軟判定入力値が変化したか否かを示し、
前記メモリコントローラは、
前記状態情報が、第aの前記軟判定入力値が変化したことを示す場合に、第aの前記信頼度情報の計算を実行すると判断する、
請求項3に記載のメモリシステム。
【請求項7】
前記メモリコントローラは、
終了条件が満たされるまで、第aの前記成分符号の復号処理を繰り返し実行し、
第aの前記成分符号に対して、複数種類の復号処理のうち選択された復号処理を実行し、
前記状態情報は、選択された復号処理の種類を示し、
前記メモリコントローラは、
前記状態情報が示すk(kは1以上の整数)回目の復号処理の種類と、(k+1)回目の復号処理の種類とが異なる場合に、第aの前記修正情報の計算を実行すると判断する、
請求項3に記載のメモリシステム。
【請求項8】
前記状態情報は、前記修正情報メモリの残記憶容量が第1閾値以下となったか否かを示し、
前記メモリコントローラは、
前記状態情報が、前記修正情報メモリの残記憶容量が第1閾値以下となったことを示す場合に、第aの前記信頼度情報の計算を実行すると判断する、
請求項3に記載のメモリシステム。
【請求項9】
前記状態情報は、前記修正情報メモリに修正情報が記憶されていないか否かを示し、
前記メモリコントローラは、
前記状態情報が、前記修正情報メモリに修正情報が記憶されていないことを示す場合に、第aの前記修正情報の計算、および、第aの前記信頼度情報の計算を実行すると判断する、
請求項3に記載のメモリシステム。
【請求項10】
前記メモリコントローラは、
終了条件が満たされるまで、第aの前記成分符号の復号処理を繰り返し実行し、
k(kは1以上の整数)回目の復号処理で算出された第aの前記信頼度情報に応じて、(k+1)回目の復号処理で、第aの前記修正情報の計算、および、第aの前記信頼度情報の計算を実行するか否かを判断する、
請求項1に記載のメモリシステム。
【請求項11】
前記メモリコントローラは、
第aの前記信頼度情報が第2閾値より大きい場合に、第aの前記修正情報に基づいて前記読出し情報メモリに記憶された前記読出し情報を修正し、前記読出し情報の修正に応じて前記シンドローム値メモリに記憶された前記シンドローム値を修正する、
請求項1に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【0001】
以下の実施形態は、一般的に、メモリシステムに関する。
【背景技術】
【0002】
メモリシステムでは、一般に、記憶するデータを保護するために、誤り訂正符号化されたデータが記憶される。このため、メモリシステムに記憶されたデータを読み出す際には、誤り訂正符号化されたデータに対する復号が行われる。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】米国特許出願公開第2019/0087107号明細書
【発明の概要】
【発明が解決しようとする課題】
【0004】
本発明の一つの実施形態は、復号に必要なメモリ量および時間を削減することが可能なメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【0005】
実施形態によれば、メモリシステムは、N次元の誤り訂正符号を記憶する不揮発性メモリとメモリコントローラとを備える。メモリコントローラは、第i(1≦i≦N)次元の第a(1≦a≦ni,niは第i次元の成分符号の個数)番目の成分符号の修正情報、信頼度情報、および、シンドローム値に基づいて、第aの成分符号に対する第aの軟判定入力値を計算し、第aの軟判定入力値を入力して第aの成分符号の復号処理を実行して、第aの成分符号の復号語、第aの修正情報、および、第aの信頼度情報を計算し、第aの修正情報および第j(j≠i、1≦j≦N)次元の第b(1≦b≦nj,njは第j次元の成分符号の個数、第b成分符号は第aの修正情報に関係する成分符号)の成分符号の修正された位置を示す第bの修正情報を修正情報メモリに記憶し、第aの信頼度情報を信頼度情報メモリに記憶し、読出し情報と、各成分符号の修正情報および信頼度情報から計算される出力復号語を出力する。
【図面の簡単な説明】
【0006】
【
図1】
図1は、データを誤り訂正符号で保護する動作の一般的な流れを説明するための図である。
【
図3】
図3は、二次元の誤り訂正符号に対してターボ復号を実行する機能ブロックの一例を示すブロック図である。
【
図4】
図4は、
図3に示す機能ブロックによる処理フローの一例を示すフローチャートである。
【
図5】
図5は、実施形態に係るメモリシステムの概略構成例を示すブロック図である。
【
図6】
図6は、実施形態に係る復号器の概略構成例を示すブロック図である。
【
図7】
図7は、SISO復号部の概略構成例を示すブロック図である。
【
図8】
図8は、本実施形態のメモリシステムによる復号処理の一例を示すフローチャートである。
【
図9】
図9は、状態情報に応じた判断処理の一例を示すフローチャートである。
【発明を実施するための形態】
【0007】
以下に添付図面を参照して、実施形態に係るメモリシステムを詳細に説明する。なお、以下の実施形態により本発明が限定されるものではない。
【0008】
近年、NAND型フラッシュメモリなどの不揮発性メモリを利用したメモリシステムは、その高速性という特長を生かし、様々な場所で用いられている。しかしながら、不揮発性メモリから読み出したデータには、不揮発性メモリに記憶されてからの時間経過や読み出し・書き込みの際に生じるノイズ等に起因するエラーが含まれる可能性がある。そのため、一般には、不揮発性メモリに記憶するデータに対して誤り訂正符号を用いた符号化処理が実行され、読出し時にはその誤り訂正符号を用いた復号処理が実行されることで、読み出したデータに含まれているエラーが除去される。
【0009】
図1は、データを誤り訂正符号で保護する動作の一般的な流れを説明するための図である。なお、本説明におけるユーザとは、例えばパーソナルコンピュータ、サーバ装置、ポータブルな情報機器、デジタルスチルカメラ等の情報処理装置であってよい。
【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シンボルで且つパリティ長2シンボルのハミング符号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】
以上のような、SISO復号器を用いたターボ復号器は、確率情報である外部値を外部値メモリに記憶しておかなければならないため、復号に必要なメモリ量が増大してしまう可能性がある。また復号に必要なメモリ量が増大するということは、復号処理中にアクセスするメモリ量の増大を意味するため、復号速度の低下、および、消費電流の増大が引き起こされる。そのため、復号に必要なメモリ量を削減することが可能なメモリシステムの提供が望まれる。
【0032】
図5は、実施形態に係るメモリシステムの概略構成例を示すブロック図である。
図5に示すように、メモリシステム1は、メモリコントローラ10と不揮発性メモリ20とを備える。メモリシステム1は、ホスト30と接続可能であり、
図5ではホスト30と接続された状態が示されている。ホスト30は、例えば、パーソナルコンピュータ、携帯端末などの電子機器であってよい。
【0033】
不揮発性メモリ20は、データを不揮発に記憶する不揮発性メモリであり、例えば、NAND型フラッシュメモリ(以下、単にNANDメモリという)である。以下の説明では、不揮発性メモリ20としてNANDメモリが用いられた場合を例示するが、不揮発性メモリ20として3次元構造フラッシュメモリ、ReRAM(Resistance Random Access Memory)、FeRAM(Ferroelectric Random Access Memory)等のNANDメモリ以外の記憶装置を用いることも可能である。また、不揮発性メモリ20が半導体メモリであることは必須ではなく、半導体メモリ以外の種々の記憶媒体に対して本実施形態を適用することも可能である。
【0034】
メモリシステム1は、メモリコントローラ10と不揮発性メモリ20とが1つのパッケージとして構成されるメモリカード等であってもよいし、SSD(Solid State Drive)等であってもよい。
【0035】
メモリコントローラ10は、ホスト30からの書込み要求に従って不揮発性メモリ20への書込みを制御する。また、メモリコントローラ10は、ホスト30からの読出し要求に従って不揮発性メモリ20からの読み出しを制御する。メモリコントローラ10は、ホストI/F(ホストインタフェース)15、メモリI/F(メモリインタフェース)13、制御部11、符号化/復号部(コーデック)14およびデータバッファ12を備える。ホストI/F15、メモリI/F13、制御部11、符号化/復号部14およびデータバッファ12は、内部バス16で相互に接続されている。
【0036】
ホストI/F15は、ホスト30との間のインタフェース規格に従った処理を実施し、ホスト30から受信した命令、書込み対象のユーザデータなどを内部バス16に出力する。また、ホストI/F15は、不揮発性メモリ20から読み出されて復元されたユーザデータ、制御部11からの応答などをホスト30へ送信する。
【0037】
メモリI/F13は、制御部11の指示に基づいて、不揮発性メモリ20への書込み処理を行う。また、メモリI/F13は、制御部11の指示に基づいて、不揮発性メモリ20からの読み出し処理を行う。
【0038】
制御部11は、メモリシステム1の各構成要素を統括的に制御する。制御部11は、ホスト30からホストI/F15経由で命令を受けた場合に、その命令に従った制御を行う。例えば、制御部11は、ホスト30からの命令に従って、不揮発性メモリ20へのユーザデータおよびパリティの書き込みをメモリI/F13へ指示する。また、制御部11は、ホスト30からの命令に従って、不揮発性メモリ20からのユーザデータおよびパリティの読み出しをメモリI/F13へ指示する。
【0039】
また、制御部11は、ホスト30からユーザデータの書込み要求を受信した場合、ユーザデータをデータバッファ12に蓄積し、ユーザデータの不揮発性メモリ20における記憶領域(メモリ領域)を決定する。すなわち、制御部11は、ユーザデータの書込み先を管理する。ホスト30から受信したユーザデータの論理アドレスと該ユーザデータが記憶された不揮発性メモリ20上の記憶領域を示す物理アドレスとの対応はアドレス変換テーブルとして記憶される。
【0040】
また、制御部11は、ホスト30から読出し要求を受信した場合、読出し要求により指定された論理アドレスを上述のアドレス変換テーブルを用いて物理アドレスに変換し、該物理アドレスからの読み出しをメモリI/F13へ指示する。
【0041】
NANDメモリでは、一般に、ページと呼ばれるデータ単位で、書き込みおよび読み出しが行われ、ブロックと呼ばれるデータ単位で消去が行われる。本実施形態では、この同一のワード線に接続される複数のメモリセルをメモリセルグループと呼ぶ。メモリセルがシングルレベルセル(SLC)である場合は、1つのメモリセルグループが1ページに対応する。メモリセルがマルチレベルセル(MLC)である場合は、1つのメモリセルグループが複数ページに対応する。また、各メモリセルはワード線に接続するとともにビット線にも接続される。従って、各メモリセルは、ワード線を識別するアドレスとビット線を識別するアドレスとで識別することが可能である。
【0042】
データバッファ12は、メモリコントローラ10がホスト30から受信したユーザデータを不揮発性メモリ20へ記憶するまでに一時記憶する。また、データバッファ12は、不揮発性メモリ20から読み出したユーザデータをホスト30へ送信するまでに一時記憶する。データバッファ12には、例えば、SRAM(Static Random Access Memory)やDRAM(Dynamic Random Access Memory)などの汎用メモリを用いることができる。
【0043】
ホスト30から送信されるユーザデータは、内部バス16に転送されてデータバッファ12に一旦記憶される。符号化/復号部14は、ユーザデータを符号化して符号語を生成する。また、符号化/復号部14は、不揮発性メモリ20から読み出された受信語を復号してユーザデータを復元する。そこで符号化/復号部14は、符号化器(Encoder)17と復号器(Decoder)18を備える。なお、符号化/復号部14により符号化されるデータには、ユーザデータ以外にも、メモリコントローラ10内部で用いる制御データ等が含まれてもよい。
【0044】
次に、本実施形態の書込み処理について説明する。制御部11は、不揮発性メモリ20へのユーザデータの書込み時に、ユーザデータの符号化を符号化器17に指示する。その際、制御部11は、不揮発性メモリ20における符号語の記憶場所(記憶アドレス)を決定し、決定した記憶場所もメモリI/F13へ指示する。
【0045】
符号化器17は、制御部11からの指示に基づいて、データバッファ12上のユーザデータを符号化して符号語を生成する。符号化方式としては、例えば、BCH(Bose-Chandhuri-Hocquenghem)符号やRS(リード・ソロモン)符号を用いた符号化方式を採用することができる。符号化器17により生成される符号語は、上述において
図2を用いて例示した積符号500などの多次元の誤り訂正符号である。
図2に例示した積符号500は、上述したように、構成単位である各情報ビット(シンボルであってもよい)d
0~d
3が、行方向(図面中横方向)と列方向(図面中縦方向)とのそれぞれで、情報長2ビットで且つパリティ長2ビットのハミング符号である成分符号511~515および521~525で保護された構造を備える。このような積符号500では、全ての情報ビットd
0~d
3およびパリティビットp
0~p
20が行方向の成分符号(ハミング符号)511~515と列方向の成分符号(ハミング符号)521~525とで2重に保護されている。メモリI/F13は、制御部11から指示された不揮発性メモリ20上の記憶場所へ符号語を記憶する制御を行う。
【0046】
次に、本実施形態の不揮発性メモリ20からの読出し時の処理について説明する。制御部11は、不揮発性メモリ20からの読出し時に、不揮発性メモリ20上のアドレスを指定してメモリI/F13へ読み出しを指示する。また、制御部11は、復号器18へ復号の開始を指示する。メモリI/F13は、制御部11の指示に従って、不揮発性メモリ20の指定されたアドレスから受信語を読み出し、読み出した受信語を復号器18に入力する。復号器18は、この不揮発性メモリ20から読み出された受信語を復号する。
【0047】
復号器18は、不揮発性メモリ20から読み出された受信語を復号する。
図6は、復号器18の概略構成例を示すブロック図である。復号器18は、硬判定値を入力として復号を実行し、その結果として硬判定値を出力するHIHO(hard-input hard-output)復号部181と、軟判定値を入力として復号を実行し、その結果として軟判定値を出力するSISO(soft-input soft-output)復号部182とを備える。
【0048】
一般に、SISO復号は、HIHO復号より誤り訂正能力は高いが処理時間が長いという特徴を持つ。そこで本実施形態では、まず、HIHO復号部181が、不揮発性メモリ20から硬判定値として読み出された受信語をHIHO復号し、硬判定復号により復号できなかった受信語を軟判定値として読み出すように構成する。そして、SISO復号部182が、軟判定値として読み出された受信語をSISO復号するように構成する。ただし、このような構成に限られず、HIHO復号を省略して全ての受信語にSISO復号を実行する構成など、種々変形することが可能である。
【0049】
次に、
図6に示すSISO復号部182のより詳細な構成を、図面を参照して詳細に説明する。
図7は、SISO復号部182の概略構成例を示すブロック図である。
【0050】
図7に示すように、SISO復号部182は、読出し情報メモリ201と、次元1シンドローム値計算部111と、次元1シンドローム値メモリ211と、次元1軟判定入力値計算部112と、次元1SISO復号部113と、次元1修正情報メモリ212と、次元2シンドローム値計算部121と、次元2シンドローム値メモリ221と、次元2軟判定入力値計算部122と、次元2SISO復号部123と、次元2修正情報メモリ222と、信頼度情報メモリ231と、を備えている。
【0051】
読出し情報メモリ201は、不揮発性メモリ20から読み出された硬判定値を記憶する。本実施形態では、不揮発性メモリ20は、二次元の誤り訂正符号により符号化されたデータを記憶する。読出し情報メモリ201に記憶される硬判定値は、不揮発性メモリ20上で発生した誤りにより、二次元の誤り訂正符号により符号化されたデータの一部が別の値に変化したデータとなる場合がある。読出し情報メモリ201は、次元1シンドローム値計算部111および次元2シンドローム値計算部121へ硬判定値を出力する。
【0052】
次元1シンドローム値計算部111は、次元1の成分符号(第1の成分符号の一例)のシンドローム値(次元1シンドローム値)を計算する。シンドローム値は、誤り訂正符号が誤り位置を計算するために用いるシンボル列であり、例えば、誤り訂正符号のパリティ検査行列と硬判定値とを乗算することにより得られる。次元1シンドローム値計算部111は、誤り訂正符号の構造を利用して行列演算よりも簡易な計算でシンドローム値を得てもよい。次元1シンドローム値計算部111で得られた次元1シンドローム値は、次元1シンドローム値メモリ211へ出力される。
【0053】
次元1シンドローム値メモリ211は、次元1シンドローム値計算部111で計算された次元1シンドローム値を記憶する。次元1シンドローム値メモリ211は、次元1軟判定入力値計算部112へ次元1シンドローム値を出力する。
【0054】
次元1軟判定入力値計算部112は、次元1シンドローム値メモリ211から入力される次元1シンドローム値と、次元1修正情報メモリ212から入力される修正情報と、信頼度情報メモリ231から入力される信頼度情報を用いて、次元1軟判定入力値(第1の軟判定入力値の一例)を計算する。次元1軟判定入力値計算部112による次元1軟判定入力値の計算方法の詳細は後述する。次元1軟判定入力値計算部112は、次元1軟判定入力値を次元1SISO復号部113へ出力する。
【0055】
なお、次元1修正情報メモリ212は、次元1の成分符号の修正情報(次元1修正情報、第1の修正情報の一例)を記憶するメモリである。同様に、次元2修正情報メモリ222は、次元2の成分符号(第2の成分符号の一例)の修正情報(次元2修正情報、第2の修正情報の一例)を記憶するメモリである。
【0056】
修正情報は、復号処理により修正された位置(修正位置)を示す情報、および、値の差分を示す情報を含む。修正位置は、例えば、復号処理により発見された復号語と、読み出されたデータ(硬判定値)との間で値が異なっている位置を示す。シンボルが二元体の元の場合は、値の差分を示す情報は省略することができる。二元体の場合は、「値が異なる」ことは「ビットが反転している」ということに限られるからである。二元体の場合、修正位置は、ビットを訂正した位置(訂正ビット位置)と解釈することもできる。
【0057】
シンボルが二元体の元である本実施形態では、次元1修正情報は、次元1の成分符号に対する次元1の復号処理および次元2の復号処理で発見されたMAP復号語と、読出し情報メモリ201に記憶されている硬判定値とで値が異なっている位置を示す。同様に、次元2修正情報は、次元2の成分符号に対する次元1の復号処理および次元2の復号処理で発見されたMAP復号語と、読出し情報メモリ201に記憶されている硬判定値とで値が異なっている位置を示す。
【0058】
次元1修正情報が位置を示すために用いるアドレス(次元1アドレス)の設定方法と、次元2修正情報が位置を示すために用いるアドレス(次元2アドレス)の設定方法と、は異なっていてもよい。例えば、次元1アドレスは、次元1軟判定入力値計算部112が、より高速に次元1修正情報を読み出せるように設定されてもよい。同様に、次元2アドレスは、次元2軟判定入力値計算部122が、より高速に次元2修正情報を読み出せるように設定されてもよい。次元1アドレスと次元2アドレスとを共通化したアドレスが用いられてもよい。この場合、次元1修正情報メモリ212および次元2修正情報メモリ222を共通化した1つの修正情報メモリが用いられてもよい。
【0059】
信頼度情報メモリ231は、信頼度情報を記憶するメモリである。信頼度情報は、各成分符号のSISO復号の確からしさ(信頼度)を表す情報である。信頼度情報メモリ231は、成分符号それぞれについての信頼度情報を記憶する。例えば信頼度情報メモリ231は、次元1の成分符号の信頼度情報(第1の信頼度情報の一例)、および、次元2の成分符号の信頼度情報(第2の信頼度情報の一例)を記憶する。
【0060】
信頼度情報は、例えば、軟判定入力値(=確率情報)から計算された、符号語cがオリジナルの成分符号語である確率が高いか低いかを示すメトリックである。例えば、二元符号における信頼度情報としては、符号語cに対して、軟判定入力値Sから計算した尤度などを用いることができる。信頼度情報はこれに限らず、例えば以下のような情報を用いてもよい。
(I1)符号語cが正しい確率値
(I2)符号語cと軟判定入力値Sとの距離関数の値
(I3)上述の(I1)または(I2)に示す値に対して対数関数などを適用した値
【0061】
次元1SISO復号部113は、次元1軟判定入力値計算部112から入力される次元1軟判定入力値を用いてSISO復号を行い、修正情報(訂正ビット位置)およびSISO復号の信頼度情報を得る。次元1SISO復号部113は、修正情報(訂正ビット位置)を次元1修正情報メモリ212および次元2修正情報メモリ222へ出力し、信頼度情報を信頼度情報メモリ231へ出力する。
【0062】
なお、次元1SISO復号部113は、次元1修正情報メモリ212および次元2修正情報メモリ222に出力する修正情報(訂正ビット位置)を、それぞれのメモリで用いられるアドレス(次元1アドレス、または、次元2アドレス)により表し、対応するメモリに出力する。
【0063】
次元1の成分符号についての処理は、上述のように、次元1シンドローム値計算部111、次元1シンドローム値メモリ211、次元1軟判定入力値計算部112、次元1SISO復号部113、次元1修正情報メモリ212、信頼度情報メモリ231、および、次元2修正情報メモリ222を用いて実現される。
【0064】
次元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
【0065】
なお、信頼度情報メモリ231は、次元1の成分符号についての処理、および、次元2の成分符号についての処理で共通に用いられる。
【0066】
図8は、本実施形態のメモリシステムによる復号処理の一例を示すフローチャートである。
図8は、二次元の誤り訂正符号に対する復号処理の例を示す。
【0067】
制御部11は、不揮発性メモリ20から、誤り訂正符号を硬判定値として読み出す(ステップS101)。制御部11は、読み出された硬判定値の誤り訂正符号を読出し情報として読出し情報メモリ201へ転送して記憶する(ステップS102)。
【0068】
次元1シンドローム値計算部111および次元2シンドローム値計算部121は、硬判定値から、それぞれ次元1シンドローム値および次元2シンドローム値を計算する(ステップS103)。例えば次元1シンドローム値計算部111は、読出し情報メモリ201に記憶されている硬判定値を読み出し、読み出した硬判定値を用いて次元1シンドローム値を計算し、次元1シンドローム値メモリ211に記憶する。次元2シンドローム値計算部121は、読出し情報メモリ201に記憶されている硬判定値を読み出し、読み出した硬判定値を用いて次元2シンドローム値を計算し、次元2シンドローム値メモリ221に記憶する。
【0069】
次に、次元1の成分符号の復号処理が実行される。以下のステップS104、ステップS105は、複数の次元1の成分符号ごとに実行される。
【0070】
まず、次元1軟判定入力値計算部112は、計算された次元1シンドローム値と、次元1修正情報メモリ212から入力される修正情報と、信頼度情報メモリ231から入力される信頼度情報と、を用いて次元1軟判定入力値を計算する(ステップS104)。
【0071】
以下に、軟判定入力値の計算方法の例を説明する。以下では、次元1の成分符号についての軟判定入力値(次元1軟判定入力値)の計算方法の例を説明するが、次元2の成分符号についての軟判定入力値(次元2軟判定入力値)の計算(ステップS106)に対しても同様の手順を適用できる。
【0072】
次元1軟判定入力値計算部112は、次元1シンドローム値メモリ211から、次元1シンドローム値sを読み出し、変数xに次元1シンドローム値sを代入する。
【0073】
次元1軟判定入力値計算部112は、次元1修正情報メモリ212から、修正情報を読み出す。読み出された修正情報のうち、他方の次元(次元2)で発見された修正情報をa1,a2,・・・,amとする。なお、a1,a2,・・・,amの値は、次元1の成分符号内のビット位置を示す。すなわち、修正情報は、修正情報が示す各位置でビットが反転されたことを示す。
【0074】
次元1軟判定入力値計算部112は、信頼度情報メモリ231から、a1,a2,・・・,amに対応する信頼度情報pr1,pr2,・・・,prmを読み出す。
【0075】
次元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であるベクトルを示す。
【0076】
次元1軟判定入力値計算部112は、最終的に得られた変数xの値(すなわち、次元1シンドローム値sから始めて、上述の(C2)の書き換えにより得られた値)をs’とする。次元1軟判定入力値計算部112は、s’,σ1,σ2,・・・,σm,a1,a2,・・・,amを、軟判定入力値として出力する。
【0077】
上述の方法は、次元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’を更新する必要がない。
【0078】
ステップS105について説明する。次元1SISO復号部113は、次元1のSISO復号を行い、訂正ビット位置を示す修正情報を次元1修正情報メモリ212および次元2修正情報メモリ222へ記憶するとともに、SISO復号の結果として得られた信頼度情報を信頼度情報メモリ231へ記憶する(ステップS105)。
【0079】
以下に、SISO復号の例を説明する。以下の例は、上述の軟判定入力値の例を用いるSISO復号の例である。また、以下では、次元1の成分符号についてのSISO復号の例を説明するが、次元2の成分符号についても同様の手順を適用できる。
【0080】
なお、次元1SISO復号部113は、以下に説明するSISO復号のうちいずれか1つを実行するように構成されてもよいし、複数種類のSISO復号を切り替えて実行するように構成されてもよい。例えば次元1SISO復号部113は、複数種類のSISO復号のうち、復号状況に応じて選択されたSISO復号を実行してもよい。
【0081】
SISO復号の例1:限界距離復号
次元1SISO復号部113は、s’を用いた、以下の手順の復号により、訂正ビット位置および信頼度情報を求める。
(E1-1)s’を用いて次元1の成分符号の限界距離復号を行い、訂正ビット位置eを求める(この復号方法をシンドローム復号と呼ぶ)。
(E1-2)訂正ビット位置eと、信頼度情報メモリ231に記憶されている信頼度情報とから、次元1の成分符号の復号結果の信頼度情報prを求める。
(E1-3)訂正ビット位置e、信頼度情報prを出力する。
【0082】
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^を出力する。
【0083】
図8のフローチャートの説明に戻る。次に、次元2の成分符号の復号処理が実行される。以下のステップS106、ステップS107は、複数の次元2の成分符号ごとに実行される。
【0084】
まず、次元2軟判定入力値計算部122は、計算された次元2シンドローム値と、次元2修正情報メモリ222から入力される修正情報と、信頼度情報メモリ231から入力される信頼度情報と、を用いて次元2軟判定入力値(第2の軟判定入力値の一例)を計算する(ステップS106)。ステップS106は、ステップS104と同様の手順により実行することができる。
【0085】
次元2軟判定入力値計算部122は、次元2のSISO復号を行い、訂正ビット位置を示す修正情報を次元1修正情報メモリ212および次元2修正情報メモリ222へ記憶するとともに、SISO復号の結果として得られた信頼度情報を信頼度情報メモリ231へ記憶する(ステップS107)。ステップS107は、ステップS105と同様の手順により実行することができる。
【0086】
次に、復号器18は、復号に成功したか否かを判定する(ステップS108)。復号に成功したとは、例えば正しいと判断できる復号語が発見されたことなどであってよい。
【0087】
一方、復号に成功していない場合(ステップS108のNO)、復号器18は、本動作の反復回数が予め設定しておいた規定値に達しているか否かを判定する(ステップS110)。規定値に達していない場合(ステップS110のNO)、復号器18は、反復回数を1増やし、ステップS104へリターンして、以降の動作を実行する。また、規定値に達していた場合(ステップS110のYES)、復号器18は、外部の制御部等に復号の失敗を通知し(ステップS111)、復号処理を終了する。なお、反復回数とは、例えばステップS104~S107の動作を繰り返した回数等であってよい。
【0088】
復号に成功した場合(ステップS108のYES)、復号器18は、外部の制御部等に復号の成功とともに復号語を通知し(ステップS109)、復号処理を終了する。復号器18は、例えば、復号処理により得られた、信頼度情報メモリ231、次元1修正情報メモリ212、および、次元2修正情報メモリ222に記憶されている情報を用いて、読出し情報メモリ201に書き込まれている硬判定値を修正する。復号器18は、修正後の硬判定値を最終的な出力(出力復号語)とする。
【0089】
例えば復号器18は、読出し情報メモリ201内の硬判定値の各ビットについて、上述の式(1)を用いて対数事後確率比を計算する。復号器18は、計算した対数事後確率比の正負により、読出し情報メモリ201に記憶されている各ビットに対応する硬判定値を修正するかどうかを決定する。復号器18は、決定したとおりに硬判定値を修正し、出力復号語とする。
【0090】
図8の例では、ステップS109で読出し情報メモリ201に記憶されている硬判定値をまとめて修正している。硬判定値の修正方法はこれに限られず、例えば、各繰り返しのSISO復号の直後に硬判定値を毎回修正する方法でもよい。この場合、ステップS109内での修正処理は不要であり、ステップS109に到達した時点での読出し情報メモリ201に記憶されている硬判定値をそのまま最終的な出力(出力復号語)とすればよい。
【0091】
これまでは、二次元の誤り訂正符号での復号処理の例を説明したが、上述のように、多次元(N次元)の誤り訂正符号に対しても同様の手順を適用できる。例えばN個の次元のうち第i(1≦i≦N)次元の第a(1≦a≦ni、niは第i次元の成分符号の個数)番目の成分符号を第aの成分符号とし、第aの成分符号に対する修正情報、信頼度情報、および、軟判定入力値を、それぞれ第aの修正情報、第aの信頼度情報、および、第aの軟判定入力値とする。
【0092】
この場合、復号器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の信頼度情報を信頼度情報メモリに記憶する。
【0093】
(変形例1)
メモリコントローラ10は、復号処理の状態を示す状態情報に応じて、修正情報の計算、および、信頼度情報の計算を実行するか否かを判定してもよい。例えば復号器18は、SISO復号の後に、成分符号の復号状態を示す状態情報を、復号部18内のメモリまたはレジスタ(以下、状態情報メモリ)に記憶する。状態情報は、以下のように様々な目的で利用することができる。
【0094】
(分類1)復号処理時間の短縮を目的とした利用
上述のように、SISO復号で計算する値は、修正情報(訂正ビット位置)と信頼度情報である。しかし、本実施形態のように反復的に実行されるSISO復号の入力に十分な変化がなければ、計算される訂正ビット位置と信頼度情報にも変化が生じない。そこで、「これからSISO復号をすることで、新たな情報が得られるか?」を判断するために、状態情報が利用される。
【0095】
例えば、
図9に示す判断処理により、状態情報に応じて次に実行すべき処理が判断される。
図9は、例えば、
図8のステップS105およびステップS107のSISO復号を実行するか否かを判断するための処理として実行されうる。以下では、次元1の成分符号に対する処理(ステップS105)を例に説明する。次元2の成分符号に対する処理も同様の手順で実現できる。
【0096】
復号器18は、状態情報を用いて、修正情報を計算するか否かを判断する(ステップS201)。この判断の詳細は後述する。修正情報を計算すると判断された場合(ステップS201のYES)、次元1SISO復号部113は、次元1のSISO復号を行う。すなわち、次元1SISO復号部113は、修正情報を計算して次元1修正情報メモリ212および次元2修正情報メモリ222へ記憶するとともに(ステップS202)、信頼度情報を計算して信頼度情報メモリ231へ記憶する(ステップS205)。
【0097】
修正情報を計算しないと判断された場合(ステップS201のNO)、復号器18は、状態情報を用いて、信頼度情報を計算するか否かを判断する(ステップS203)。この判断の詳細は後述する。信頼度情報を計算すると判断された場合(ステップS203のYES)、次元1SISO復号部113は、既知の修正情報を読み出し(ステップS204)、読み出した修正情報と、信頼度情報メモリ231に記憶されている信頼度情報とを用いて、次元1の成分符号の信頼度情報を計算する(ステップS205)。
【0098】
信頼度情報を計算しないと判断された場合(ステップS203のNO)、復号器18は、SISO復号を実行せずに終了する。
【0099】
以下に、
図9のステップS201の判断の例、および、ステップS203の判断の例を説明する。なお以下で説明する各利用例は、単独で用いられてもよいし、他の利用例と組み合わせて用いられてもよい。
【0100】
(利用例1)シンドロームの変化
利用例1は、ある次元の復号結果に応じて、他の次元のシンドローム値が変化するかを判断し、他の次元のシンドローム復号をスキップするかを判断する例である。各成分符号について、「シンドローム値が、前回の復号処理時の値から変化するかどうか」を示す状態情報が用いられる。
【0101】
例えば、次元1SISO復号部113は、ステップS105のSISO復号の結果により、(対向次元である)次元2の成分符号のうち「軟判定入力値が変化し、それに伴ってシンドローム値が変化した」成分符号に対して、「シンドローム値が変化した」ことを示す状態情報を記憶する。
【0102】
具体的には、以下のようにして(対向次元の)シンドローム値の変化が判定される。まず、次元1SISO復号部113は、ステップS105のSISO復号の結果として、修正情報aと、信頼度情報prとを得る。次元1SISO復号部113は、修正情報aおよび信頼度情報prを用いて、ステップS107で次元2のSISO復号が実行される場合に「シンドローム値が変化するか否か」を、ステップS105の時点で判断することができる。例えば次元1SISO復号部113は、上述の(C2)と同様にしてλiσi<0iの条件が満たされるか判断し、条件が満たされる場合に、シンドローム値が変化すると判断する。
【0103】
ステップS107で次元2のSISO復号を実行するときに、復号器18は、記憶された状態情報を用いて、各成分符号についてSISO復号をスキップするか判断できる。例えば
図9のステップS201で、復号器18は、状態情報が「シンドローム値が変化する」ことを示すか否かを判断する。復号器18は、状態情報が「シンドローム値が変化する」ことを示す場合に、修正情報を計算する(ステップS201のYES)と判断する。
【0104】
(利用例2)ビット反転候補の追加
利用例2は、利用例1と同様に、他の次元のシンドローム復号をスキップするかを判断する例である。上述のように、(C2)においてシンドローム値の変化が発生するのはλiσi<0のときである。
【0105】
一方、例えばSISO復号として「SISO復号の例2:Chase復号を応用した方法」が適用される場合、シンドローム値の変化が発生しなくとも、絶対値が小さいσiが得られることにより、ビット反転の候補が追加される可能性がある。そこで、利用例2では、「絶対値が小さいσiが得られるか否か」を示す状態情報が用いられる。この状態情報は、「修正される位置の候補が新たに追加されたか否か」、または、「誤っている確率が高いビット位置が追加されるか否か」を示す状態情報と言い換えることができる。
【0106】
例えば
図9のステップS201で、復号器18は、状態情報が「誤っている確率が高いビット位置が追加される」ことを示すか否かを判断する。復号器18は、状態情報が「誤っている確率が高いビット位置が追加される」ことを示す場合に、修正情報を計算する(ステップS201のYES)と判断する。
【0107】
(利用例3)信頼度情報の変化
利用例3は、ある次元の復号結果に応じて、他の次元の信頼度情報の計算をスキップするかを判断する例である。計算される信頼度情報は、軟判定入力値であるσiの関数である。従って、軟判定入力値が変化しないことがわかっていれば、信頼度情報の計算もスキップすることができる。
【0108】
そこで、例えばステップS105において次元1の修正情報および信頼度情報が得られた際、復号器18は、その時点で次元2の軟判定入力値(σi=λi+ei)を計算する。復号器18は、計算した軟判定入力値と、前回の復号処理時の軟判定入力値(例えば、メモリに記憶されている過去の修正情報および信頼度情報から近似的に計算して得る。または、前回の復号処理時の軟判定入力値そのものを状態情報メモリに記憶しておく)とを比較し、「軟判定入力値が前回の復号処理時の値から変化するかどうか」を判断し、その結果を示す状態情報を記憶する。
【0109】
ステップS107で次元2のSISO復号を実行するときに、復号器18は、記憶された状態情報を用いて、各成分符号について信頼度情報の計算をスキップするか判断できる。例えば
図9のステップS203で、復号器18は、状態情報が「軟判定入力値が前回の復号処理時の値から変化する」ことを示すか否かを判断する。復号器18は、状態情報が「軟判定入力値が前回の復号処理時の値から変化する」ことを示す場合に、信頼度情報を計算する(ステップS203のYES)と判断する。
【0110】
(利用例4)直前に実行した復号処理
利用例4は、複数種類のSISO復号を切り替えて実行する機能が備えられる場合の例である。利用例4では、「前回の復号処理の種類」を示す状態情報が用いられる。例えば状態情報は、k(kは1以上の整数)回目の復号処理の種類を示す。復号器18は、今回選択された復号処理の種類、すなわち、(k+1)回目の復号処理の種類が、状態情報が示すk回目の復号処理の種類と異なる場合に、修正情報を計算する(
図9のステップS201のYES)と判断する。
【0111】
(分類2)誤り訂正の精度の向上を目的とした利用
分類1では、復号処理時間の短縮を目的として状態情報が利用された。分類2では、誤り訂正の精度の向上を目的として状態情報が利用される例を説明する。
【0112】
(利用例5)修正情報メモリの容量超過
本実施形態は、復号に必要なメモリ量を削減することを目的の1つとする。このため、次元1修正情報メモリ212および次元2修正情報メモリ222(以下、修正情報メモリという)は、必要最小限の記憶容量となるように構成されることが望ましい。この場合、修正情報の個数が多くなることにより、すべての修正情報を修正情報メモリに記憶できなくなる状況が生じ得る。
【0113】
利用例5では、「修正情報のデータ量が、修正情報メモリに記憶できるデータ量を上回ったかどうか」を示す状態情報が用いられる。この状態情報は、修正情報メモリの残記憶容量が閾値(第1閾値)以下となったか否かを示すと解釈することもできる。
【0114】
例えば復号器18は、シンドローム復号の際に、状態情報が「修正情報のデータ量が、修正情報メモリに記憶できるデータ量を上回っている」ことを示す場合に、修正情報を計算する(
図9のステップS201のYES)と判断する。これにより、修正情報メモリに記憶できなかった分の修正情報を再度発見し、誤り訂正の精度を向上させることができる。
【0115】
なお、「修正情報メモリに修正情報が記憶されていないか否か」、言い換えると、「修正情報メモリが空であるか否か」を示す状態情報が用いられてもよい。例えば、復号器18は、状態情報が「修正情報メモリに修正情報が記憶されていない」ことを示す場合に、修正情報を計算する(
図9のステップS201のYES)と判断する。
【0116】
(変形例2)
変形例1は、状態情報を用いて処理をスキップするかを判断した。処理のスキップの判断に用いる情報は状態情報に限られない。変形例2では、前回の復号処理で計算された信頼度情報を用いて、今回の復号処理のスキップが判断される。
【0117】
例えば、信頼度情報が「成分符号の復号結果が正しい確率の推定値」を示す構成であるとする。このような構成では、信頼度情報の値が1/2を超えていたら、再度、修正位置の発見を試みても、「より正しい確率が高い別の復号結果」が得られることはないと考えられる。そこで、復号器18は、k(kは1以上の整数)回目の復号処理で計算された信頼度情報が1/2を超えているか否かにより、(k+1)回目の復号処理に相当する
図8のステップS105およびステップS107のSISO復号を実行するか否かを判断する。例えば復号器18は、前回(k回目)の復号処理で計算された信頼度情報が1/2を超えている場合に、SISO復号をスキップすると判断する。この後、
図9のステップS203~ステップS205と同様に、信頼度情報を計算するかの判断等が実行されてもよい。
【0118】
(変形例3)
変形例3では、「修正情報のデータ量が、修正情報メモリに記憶できるデータ量を上回る」という状況が発生することを避けるため、修正情報メモリに記憶する情報量を削減する機能が備えられる。例えば、信頼度情報が十分高い場合、復号器18は、修正情報を修正情報メモリに記憶する代わりに、読出し情報メモリ201に記憶された硬判定値を、修正情報に従って修正する。なお信頼度情報が十分高いとは、例えば、信頼度情報が閾値(第2閾値)より大きい場合である。また復号器18は、シンドローム値メモリ(次元1シンドローム値メモリ211、次元2シンドローム値メモリ221)に記憶された各シンドローム値も、修正した硬判定値と整合するように修正する。このようにして、修正情報メモリに修正情報を記憶せずに、検出した誤りの情報を硬判定値に反映することができる。
【0119】
復号に必要なメモリ量を削減する方式としては、例えば、外部値自体を外部値メモリに記憶するのではなく、外部値の計算に必要な中間情報(例えばMAP復号語とその復号語の正しさを示す信頼度情報)を記憶し、外部値が必要になった時点で中間情報を用いて外部値を生成する方式が考えられる。しかしこのような方式では、MAP復号語のデータ量が符号長に依存するため、符号長が長い場合には、メモリ量の削減効果が低下する。
【0120】
本実施形態では、符号長に依存しないシンドローム値および修正情報を用いて外部値の計算を含む復号処理が実行される。これにより、復号に必要なメモリ量を削減することが可能となる。また、復号処理に用いる情報の読み書き時間が短縮されるため、復号処理の処理時間を短縮することができる。
【0121】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0122】
1 メモリシステム
10 メモリコントローラ
11 制御部
12 データバッファ
13 メモリI/F
14 符号化/復号部
15 ホストI/F
16 内部バス
17 符号化器
18 復号器
20 不揮発性メモリ
30 ホスト
111 次元1シンドローム値計算部
112 次元1軟判定入力値計算部
113 次元1SISO復号部
121 次元2シンドローム値計算部
122 次元2軟判定入力値計算部
123 次元2SISO復号部
201 読出し情報メモリ
211 次元1シンドローム値メモリ
212 次元1修正情報メモリ
221 次元2シンドローム値メモリ
222 次元2修正情報メモリ
231 信頼度情報メモリ