【国等の委託研究の成果に係る記載事項】(出願人による申告)平成23年度、独立行政法人科学技術振興機構の戦略的創造研究推進事業の研究課題「ディペンダブル ワイヤレス ソリッド・ステート・ドライブ」、産業技術力強化法第19条の適用を受ける特許出願
(58)【調査した分野】(Int.Cl.,DB名)
複数の不揮発性メモリセルを有する不揮発性メモリにデータを書き込むときには、書き込むべきデータを対数尤度率を用いた演算により復号可能な所定の符号に符号化すると共に該符号化された符号化データが前記不揮発性メモリに記憶されるよう前記不揮発性メモリを制御し、前記不揮発性メモリからデータを読み出すときには、前記不揮発性メモリから予め定められた所定サイズの符号化データが読み出されるよう前記不揮発性メモリを制御すると共に前記対数尤度率を用いた演算により前記符号化データを復号するメモリコントローラであって、
前記不揮発性メモリから予め定められた所定サイズの符号化データが読み出されたときには、前記読み出された所定サイズのデータの全ビット数に対する前記読み出された所定のサイズのデータのうちビット反転エラーが生じているビット数の割合であるビットエラー率を算出するビットエラー率算出部と、
前記算出されたビットエラー率と、前記読み出された前記所定サイズのデータのうちの1ビットが記憶されている前記不揮発性メモリセルであるターゲットセルのデータと、前記ターゲットセルの所定範囲の前記不揮発性メモリセルのデータと、に基づいて前記ターゲットセルにビットエラーが生じる確率の推定値である推定セルエラー確率を設定する推定セルエラー確率設定処理を、前記読み出された前記所定サイズのデータの全ビットに対して実行する推定セルエラー確率設定部と、
前記設定された推定セルエラー確率を用いて前記読み出された前記所定サイズのデータの全ビットについて前記対数尤度率を設定する対数尤度率設定部と、
を備えるメモリコントローラ。
【発明の概要】
【0004】
一般に、上述のメモリコントローラにおいて、ECCとしてLDPC符号を用いる場合、符号化された符号化データを復号する手法として、訂正能力をあげるために、sum-product復号法など、軟値であるデータの確からしさを示す対数尤度比(Log Likelihood Ratio,LLR)を用いて再帰的な繰り返し演算を行なう手法が用いられている。このとき、縦軸にフラッシュメモリセルの数、横軸に閾値電圧をとったグラフにおける閾値電圧の分布を予め想定しておき、想定した閾値電圧の分布とフラッシュメモリからデータを読み出す際にワード線に印加する電圧である参照電圧とを用いてLLRの初期値を設定している。しかしながら、想定した閾値電圧の分布が実際の閾値電圧の分布とかけ離れたものになると、繰り返し演算の繰り返し回数が増大したり、誤訂正するなど不都合が生じる場合がある。こうした不都合を極力回避する手法として、参照電圧の数を増やして参照電圧毎にフラッシュメモリから読み出したデータを用いる手法が考えられるが、この手法では、フラッシュメモリからのデータの読み出し回数が多くなったり、演算処理に費やす時間が増大してしまう。特に、1つのフラッシュメモリセルに2ビット以上のデータを記憶する多ビットセルにおいては、参照電圧の増大が顕著となり、処理時間が増大してしまう。したがって、誤訂正を抑制しながら誤り訂正能力を向上させつつ、処理時間の増大を抑制する方法が望まれている。
【0005】
本発明のメモリコントローラおよびデータ記憶装置は、誤り訂正能力を向上させつつ、処理時間の増大を抑制することを主目的とする。
【0006】
本発明のメモリコントローラおよびデータ記憶装置は、上述の主目的を達成するために以下の手段を採った。
【0007】
本発明のメモリコントローラは、
複数の不揮発性メモリセルを有する不揮発性メモリにデータを書き込むときには、書き込むべきデータを対数尤度率を用いた演算により復号可能な所定の符号に符号化すると共に該符号化された符号化データが前記不揮発性メモリに記憶されるよう前記不揮発性メモリを制御し、前記不揮発性メモリからデータを読み出すときには、前記不揮発性メモリから予め定められた所定サイズの符号化データが読み出されるよう前記不揮発性メモリを制御すると共に前記対数尤度率を用いた演算により前記符号化データを復号するメモリコントローラであって、
前記不揮発性メモリから予め定められた所定サイズの符号化データが読み出されたときには、前記読み出された所定サイズのデータの全ビット数に対する前記読み出された所定のサイズのデータのうちビット反転エラーが生じているビット数の割合であるビットエラー率を算出するビットエラー率算出部と、
前記算出されたビットエラー率と、前記読み出された前記所定サイズのデータのうちの1ビットが記憶されている前記不揮発性メモリセルであるターゲットセルのデータと、前記ターゲットセルの前記所定範囲の不揮発性メモリセルのデータと、に基づいてて前記ターゲットセルにビットエラーが生じる確率の推定値である推定セルエラー率を設定する推定セルエラー確率設定処理を、前記読み出された前記所定サイズのデータの全ビットに対して実行する推定セルエラー確率設定部と、
前記設定された推定セルエラー確率を用いて前記読み出された前記所定サイズのデータの全ビットについて前記対数尤度率を設定する対数尤度率設定部と、
を備えることを要旨とする。
【0008】
この本発明のメモリコントローラでは、不揮発性メモリからデータを読み出すときには、不揮発性メモリから予め定められた所定サイズの符号化データが読み出されるよう不揮発性メモリを制御する。不揮発性メモリから予め定められた所定サイズの符号化データが読み出されたときには、読み出された所定サイズのデータの全ビット数に対する読み出された所定のサイズのデータのうちビット反転エラーが生じているビット数の割合であるビットエラー率を算出し、算出されたビットエラー率と、読み出された所定サイズのデータのうちの1ビットが記憶されている不揮発性メモリセルであるターゲットセルのデータと、ターゲットセルの所定範囲の不揮発性メモリセルのデータと、に基づいてターゲットセルにビットエラーが生じる確率の推定値である推定セルエラー確率を設定し、読み出された所定サイズのデータの全ビットに対して実行し、設定された推定セルエラー確率を用いて読み出された所定サイズのデータの全ビットについて対数尤度率を設定し、こうして設定した対数尤度率を用いた確率に基づく反復処理により符号化データを復号する。不揮発性メモリセルのデータは、そのメモリセルの周囲にある他のメモリセルがどのようなデータを記憶しているかによって影響を受けるため、周囲のメモリセルのデータにより着目するメモリセルのデータにビットエラーが生じる確率であるセルエラー率が変動する。したがって、算出されたビットエラー率と、ターゲットセルのデータと、ターゲットセルの所定範囲の不揮発性メモリセルのデータと、に基づいて推定セルエラー確率を設定し、設定した推定セルエラー確率を用いて読み出された所定サイズのデータの全ビットについて対数尤度率を設定することにより、より実際の不揮発性メモリセルの状態を反映した対数尤度率を設定することができるから、予め想定した閾値電圧の分布を用いて対数尤度率を設定するものに比して、訂正能力の向上を図ることができる。また、参照電圧の数を増やして参照電圧毎にフラッシュメモリからデータを読み出すものに比して、データの読み出し回数の増大を抑制することができ、処理時間の増大を抑制することができる。これにより、誤り訂正能力を向上させつつ、処理時間の増大を抑制することができる。
【0009】
こうした本発明のメモリコントローラにおいて、前記推定セルエラー確率設定処理は、前記算出されたビットエラー率を用いて前記不揮発性メモリにデータを読み書きせずに保持を継続している時間の推定値である推定リテンション時間を設定し、該設定した推定リテンション時間と、前記ターゲットセルのデータと、前記ターゲットセルの前記所定範囲の不揮発性メモリセルのデータと、を用いて前記推定セルエラー確率を設定する処理であるものとすることもできる。不揮発性メモリでは、データを読み書きせずに保持を継続している時間が長いほどビットエラー率が高くなる傾向となる。したがって、不揮発性メモリにデータを読み書きせずに保持を継続している時間の推定値である推定リテンション時間を設定し、設定した推定リテンション時間と、ターゲットセルのデータと、ターゲットセルの所定範囲の不揮発性メモリセルのデータと、を用いて推定セルエラー確率を設定することにより、より精度よく推定セルエラー確率を設定することができる。これにより、対数尤度率をより精度よく設定することができ、誤り訂正能力をより向上させることができる。この場合において、前記ビットエラー率と前記推定リテンション時間との関係として予め定められた第1テーブルを記憶する第1テーブル記憶部と、前記推定リテンション時間と、前記ターゲットセルのデータと、前記ターゲットセルの前記所定範囲の不揮発性メモリセルのデータと、前記推定セルエラー確率との関係として予め定められた第2テーブルを記憶する第2テーブル記憶部と、を備え、前記推定セルエラー確率設定処理は、前記算出されたビットエラー率と前記第1テーブルとを用いて前記推定リテンション時間を設定し、前記設定した推定リテンション時間と、前記ターゲットセルのデータと、前記ターゲットセルの前記所定範囲の不揮発性メモリセルのデータと、前記第2テーブルと、を用いて前記推定セルエラー確率を設定する処理であるものとすることもできる。
【0010】
設定した推定リテンション時間と、ターゲットセルのデータと、ターゲットセルの所定範囲の不揮発性メモリセルのデータと、を用いて推定セルエラー確率を設定する態様の本発明のメモリコントローラにおいて、前記不揮発性メモリに記憶されているデータを消去した回数である書き換え回数を計数する書き換え回数計数部を備え、前記推定セルエラー確率設定処理は、前記計数された書き換え回数と、前記設定した推定リテンション時間と、前記ターゲットセルのデータと、前記ターゲットセルの前記所定範囲の不揮発性メモリセルのデータと、を用いて前記推定セルエラー確率を設定する処理であるものとすることもできる。不揮発性メモリでは、書き換え回数が多くなるほどあるメモリセルにビットエラーが生じる確率が高くなると考えられる。したがって、書き換え回数を計数し、計数された書き換え回数と、設定した推定リテンション時間と、ターゲットセルのデータと、ターゲットセルの所定範囲の不揮発性メモリセルのデータと、を用いて推定セルエラー確率を設定することにより、より精度よく推定セルエラー確率を設定することができる。これにより、対数尤度率をより精度よく設定することができ、誤り訂正能力をより向上させることができる。この場合において、前記第2テーブルは、前記書き換え回数と、前記推定リテンション時間と、前記ターゲットセルのデータと、前記ターゲットセルの前記所定範囲の不揮発性メモリセルのデータと、前記推定セルエラー確率との関係として予め定められたテーブルであり、前記推定セルエラー確率設定処理は、前記計数された書き換え回数と、前記設定した推定リテンション時間と、前記ターゲットセルのデータと、前記ターゲットセルの前記所定範囲の不揮発性メモリセルのデータと、前記第2テーブルと、を用いて前記推定セルエラー確率を設定する処理であるものとすることもできるし、前記第1テーブルは、前記ビットエラー率と前記推定リテンション時間と前記書き換え回数との関係として予め定められたテーブルであり、前記推定セルエラー確率設定処理は、前記算出されたビットエラー率と、前記書き換え回数と、前記第1テーブルと、を用いて前記推定リテンション時間を設定する処理であるものとすることもできる。
【0011】
また、本発明のメモリコントローラにおいて、前記ビットエラー率算出部は、前記不揮発性メモリにデータを書き込むときには、書き込むべきデータを前記所定の符号に符号化する前に前記書き込むべきデータのうち前記所定サイズのデータにおける前記不揮発性メモリが記憶しているデータのうち”1”または”0”のデータのビット数を符号化前ビット数として記憶しておき、前記不揮発性メモリから前記所定サイズのデータが読み出されたときには、前記読み出されたデータの”1”または”0”のデータのビット数と前記符号化前ビット数を用いて前記ビットエラー率を算出するものとすることもできる。
【0012】
さらに、本発明のメモリコントローラにおいて、前記不揮発性メモリは、フラッシュメモリであり、前記所定サイズは、前記フラッシュメモリの1ページ分のデータであるものとすることもできる。この場合において、前記不揮発性メモリは、1つの不揮発性メモリセルに2ビットのデータを記憶するよう制御されるNAND型フラッシュメモリであり、前記ビットエラー率算出部は、前記不揮発性メモリセルが保持するデータのうち上位ページを閾値電圧の低いほうから1001、下位ページを閾値電圧の低いほうから1100と定義したときに前記下位ページの1が0になるエラーを前記ビットエラー率として算出するものとすることもできるし、前記不揮発性メモリは、1つの不揮発性メモリセルに2ビットのデータを記憶するよう制御されるNAND型フラッシュメモリであり、前記ビットエラー率算出部は、前記不揮発性メモリセルが保持するデータのうち上位ページを閾値電圧の低いほうから1001、下位ページを閾値電圧の低いほうから1100と定義したときに前記下位ページの0が1になるエラーを前記ビットエラー率として算出するものとすることもできる。
【0013】
そして、本発明のメモリコントローラにおいて、前記所定の符号は、低密度パリティ検査符号であるものとすることもできる。
【0014】
本発明のデータ記憶装置は、
データを記憶可能な記憶装置であって、
上述したいずれかの態様の本発明のメモリコントローラ、即ち、基本的には、複数の不揮発性メモリセルを有する不揮発性メモリにデータを書き込むときには、書き込むべきデータを対数尤度率を用いた演算により復号可能な所定の符号に符号化すると共に該符号化された符号化データが前記不揮発性メモリに記憶されるよう前記不揮発性メモリを制御し、前記不揮発性メモリからデータを読み出すときには、前記不揮発性メモリから予め定められた所定サイズの符号化データが読み出されるよう前記不揮発性メモリを制御すると共に前記対数尤度率を用いた演算により前記符号化データを復号するメモリコントローラであって、
前記不揮発性メモリから予め定められた所定サイズの符号化データが読み出されたときには、前記読み出された所定サイズのデータの全ビット数に対する前記読み出された所定のサイズのデータのうちビット反転エラーが生じているビット数の割合であるビットエラー率を算出するビットエラー率算出部と、前記算出されたビットエラー率と、前記読み出された前記所定サイズのデータのうちの1ビットが記憶されている前記不揮発性メモリセルであるターゲットセルのデータと、前記ターゲットセルの前記所定範囲の不揮発性メモリセルのデータと、に基づいてて前記ターゲットセルにビットエラーが生じる確率の推定値である推定セルエラー率を設定する推定セルエラー確率設定処理を、前記読み出された前記所定サイズのデータの全ビットに対して実行する推定セルエラー確率設定部と、前記設定された推定セルエラー確率を用いて前記読み出された前記所定サイズのデータの全ビットについて前記対数尤度率を設定する対数尤度率設定部と、を備えるメモリコントローラと、
前記不揮発性メモリと、
を備えることを要旨とする。
【0015】
この本発明のデータ記憶装置では、上述したいずれかの態様の本発明のメモリコントローラを備えているから、本発明のメモリコントローラが奏する効果、例えば、誤り訂正能力を向上させつつ、処理時間の増大を抑制することができる効果などと同様の効果を奏する。
【発明を実施するための形態】
【0017】
次に、本発明を実施するための形態を実施例を用いて説明する。
【0018】
図1は、本発明の実施例としてのメモリコントローラ30が搭載され、パーソナルコンピュータなどのホスト装置10からのデータを記憶するSSD(Solid State Drive)20の構成の概略を示す説明図である。SSD20は、各種アプリケーションプログラムや各種データを記憶する大容量のデータ記憶装置として構成されており、NAND型フラッシュメモリとして構成されたフラッシュメモリ22と、フラッシュメモリ22を制御するメモリコントローラ30と、から構成されている。
【0019】
フラッシュメモリ22は、
図2に示すように、フローティングゲートへの電子注入やフローティングゲートからの電子の引き抜きにより閾値電圧が変化するフラッシュメモリセル24aを複数有するフラッシュメモリセルアレイ24を備えるNAND型フラッシュメモリとして構成されており、フラッシュメモリセルアレイ24の他にロウデコーダ,カラムデコーダ,センスアンプなど(いずれも図示せず)を備える。フラッシュメモリ22では、ページ単位(実施例では、8Kバイトなど)でデータを書き込んだり読み出したりして、複数ページからなるブロック単位(実施例では、1Mバイトなど)で記憶しているデータを消去する。フラッシュメモリ22は、フラッシュメモリセル24aへ、
図3に例示するように、閾値電圧の低い順に”11”,”01”,”00”,”10”の2ビットのデータを記憶する多値メモリとして動作するよう制御される。実施例では、前述した順番に記載したときに左側のビット列”1001”を上位ページとして、右側のビット列”1100”下位ページとする。
【0020】
メモリコントローラ30は、トランジスタ等の複数の論理素子からなる論理回路として構成されており、ホスト装置10から1ページずつデータを入力して入力した1ページ分のデータについて下位ページのデータの”1”の数を計数すると共に計数した結果を入力データに付加して出力するN1カウンタ31と、N1カウンタ31からのデータを検査行列Hを用いて低密度パリティ検査(Low Density Prity Check、LDPC)符号に符号化して符号化した符号化データがフラッシュメモリ22に記憶されるようフラッシュメモリ22を制御するLDPCエンコーダ32と、フラッシュメモリ22から1ページ分のデータが読み出されるようフラッシュメモリ22を制御すると共に上位ページの対数尤度比(Log Likelihood Ratio,LLR)である上位ページLLRuと下位ページのLLRである下位ページLLRlを設定するLLR設定ユニット34と、設定した上位ページLLRu,下位ページLLRlを用いてフラッシュメモリ22から読み出されたデータに対してエラー訂正を行なうと共に復号してホスト装置10に出力するLDPCデコーダ36と、フラッシュメモリ22の各ページのデータの消去回数である書き換え回数W/Eを計数するW/Eカウンタ38と、LLR設定ユニット34における上位ページLLRu,下位ページLLRlの設定に用いる推定リテンション時間(Tret)設定テーブル40aとW/Eカウンタ38で計数された書き換え回数W/Eを記憶するW/Eテーブル40bとEPテーブル40cを記憶する記憶ユニット40と、を備える。LLR設定ユニット34における上位ページLLRu,下位ページLLRlの設定処理や記憶ユニット40に記憶されている推定リテンション時間設定テーブル40a,EPテーブル40cの詳細については後述する。
【0021】
LDPCデコーダ36は、周知のsum-product復号法により設定した上位ページLLRu,下位ページLLRlを用いてフラッシュメモリ22から読み出されたデータに対してエラー訂正を行なうと共に復号してホスト装置10に出力する。sum-product復号法では、上位ページLLRu,下位ページLLRlを用いて一時推定語cを算出し(ステップS1)、データを符号化する際に用いた検査行列Hを用いて下記の式(1)が成立するか否かを調べ(ステップS2)、式(1)が成立する場合には一時推定語cを復号したデータとして出力し、式(1)が成立しない場合には、上位ページLLRu,下位ページLLRlを更新して(ステップS3)予め設定された繰り返し回数が経過するか式(1)が成立するまでステップS1〜S3の処理を繰り返す。こうしたsum-product復号法は周知であるので、より詳細な説明については省略する。
【0023】
続いて、こうして構成されたSSD20のメモリコントローラ30において、ホスト装置10からのデータをフラッシュメモリ22に書き込んだり、フラッシュメモリ22からデータを読み出してホスト装置10に出力する際の動作について説明する。
【0024】
図4は、ホスト装置10からのデータをフラッシュメモリ22に書き込む際にメモリコントローラ30において実行される書き込み処理の一例を示すフローチャートである。ホスト装置10からフラッシュメモリ22へのデータの書き込みを要求する書き込み要求信号が入力されると、書き込み要求信号を入力されたメモリコントローラ30のN1カウンタ31は、ホスト装置10から1ページずつデータを入力し(ステップS100)、1ページ分の入力データについて下位ページのデータの”1”のビット数Niを計数し(ステップS110)、計数した結果を入力データに付加してLDPCエンコーダ32に出力する。N1カウンタ31から出力されたデータが入力されたLDPCエンコーダ32は、入力されたデータをLDPC符号に符号化し(ステップS120)、符号化した符号化データがフラッシュメモリ22に書き込まれるようフラッシュメモリ22を制御する(ステップS130)。こうした処理により、ホスト装置10からの入力データに下位ページの”1”の個数を計数した計数結果を付加したデータがLDPC符号に符号化されてフラッシュメモリ22に書き込まれる。
【0025】
続いて、フラッシュメモリ22からデータを読み出してホスト装置10に出力する際の動作について説明する。ホスト装置10からメモリコントローラ30へフラッシュメモリ22へのデータの読み出しを要求する読み出し要求信号が入力されると、読み出し要求信号が入力されたフラッシュメモリ22のLLR設定ユニット34は、フラッシュメモリ22から1ページ分のデータが読み出されるようフラッシュメモリ22を制御すると共に上位ページLLRu,下位ページLLRlを設定し、フラッシュメモリ22から読み出したデータと上位ページLLRu,下位ページLLRlとをLDPCデコーダ36に出力する。フラッシュメモリ22から読み出したデータと上位ページLLRu,下位ページLLRlの初期値とを入力されたLDPCデコーダ36は、上位ページLLRu,下位ページLLRlを用いたsum-product復号法により読み出されたデータに対してエラー訂正を行なうと共に復号して、復号したデータをホスト装置10に出力する。こうした処理により、フラッシュメモリ22からのデータに対してエラー訂正を行なうことができ、データの信頼性を向上させることができる。
【0026】
ここで、LLR設定ユニット34における上位ページLLRu,下位ページLLRlの設定処理の詳細について説明する。
図5は、LLR設定ユニット34により実行される上位ページLLRu,下位ページLLRlを設定するためのLLR設定処理の一例を示すフローチャートである。フラッシュメモリ22から1ページ分のデータが読み出されると、LLR設定ユニット34は、読み出したデータの下位ページの”1”のビット数N1mを計数し(ステップS200)、下位ページの”1”のビット数N1mと符号化前のデータに含まれていた”1”のビット数Niと1ページ分のデータのビット数Npとを用いて式(2)によりフラッシュメモリ22から1ページ分のデータのビットエラー率BERを算出する(ステップS210)。ここで、下位ページの”1”のビット数N1mと符号化前のデータに含まれていた”1”のビット数Niとを用いてビットエラー率BERを推定するのは、フラッシュメモリ22のデータを読み書きせずに保持を継続している際に生じるビットエラーであるリテンションエラーではフラッシュメモリセル24aの閾値電圧が低くなるエラーが生じるため、下位ページの”0”が”1”になるエラーを調べることにより、閾値電圧が低くなったか否かを調べることができるからである。
【0027】
BER=|N1m-Ni|/Np (2)
【0028】
こうしてビットエラー率BERを算出したら、算出したビットエラー率BERと書き換え回数W/Eとに基づいてフラッシュメモリ22のデータを読み書きせずに保持を継続している時間の推定値である推定リテンション時間Tretを設定する(ステップS220)。推定リテンション時間Tretの設定は、ビットエラー率BERとリテンション時間Trefと書き換え回数W/Eとの関係を予め定めて推定リテンション時間設定テーブル40aとして記憶ユニット40に記憶しておき、ビットエラー率BERと書き換え回数W/Eとを与えて対応するリテンション時間をマップから導出することにより行なわれるものとした。推定リテンション時間設定テーブル40aの一例を
図6に示す。
【0029】
こうして推定リテンション時間Tretを設定したら、次に、フラッシュメモリから読み出した1ページのデータを記憶する複数のフラッシュメモリセル24aのうちの1つのセルであるターゲットセルのデータDatatagと、ターゲットセルを囲む4つのフラッシュメモリセルであるレフトセル、ライトセル、アッパーセル、ローワーセルのそれぞれのデータDataadj(4)と、推定リテンション時間Tretと、書き換え回数W/Eとを用いて、ターゲットセルにビットエラーが生じる確率の推定値である推定セルエラー率CERestを設定する(ステップS230)。推定セルセラー率CERestの設定は、データDatatag,Dataadj(4)と、データDatatag,Dataadj(4)と、推定リテンション時間Tretと、書き換え回数W/Eと、セルエラー率CERとの関係を予めEPテーブルとして記憶ユニット40に記憶しておき、データDatatag,Dataadj(4)と、推定リテンション時間Tretと、書き換え回数W/Eとを与えて対応するレフトセル、ライトセル、アッパーセル、ローワーセルのセルエラー率CERをそれぞれマップから導出し、レフトセル、ライトセル、アッパーセル、ローワーセルのセルエラー率CERの和を値4で除することにより、導出するものとした。EPテーブルの一例を
図7に例示する。
図7には、データDatatagが”01”、書き換え回数W/Eが2000回のときの、レフトセル、ライトセル、アッパーセル、ローワーセルのデータ(データDataadj(4))と、セルエラー率CERとが例示されている。例えば、レフトセル、ライトセル、アッパーセル、ローワーセルのデータのデータがすべて”01”であるとき(図中、黒塗りの棒グラフのとき)の、レフトセル、ライトセル、アッパーセル、ローワーセルのセルエラー率CERは、それぞれ値0.0015,0.0015,0.0012,0.0013だから、推定セルエラー率CERestは、次式(3)で計算することができる。EPテーブルは、
図7に例示した図を各データDatatag,Dataadj(4),各書き換え回数W/E毎に用意するものとする。
【0030】
CERest=(0.0015+0.0015+0.0012+0.0013)/4 (3)
【0031】
こうして推定セルエラー率CERestを設定したら、続いて、推定セルエラー率CERestを用いて下位ページのセルエラー率CERlおよび上位ページのセルエラー率CERuを設定する(ステップS240)。
図8は、セルエラー率CERl,セルエラー率CERuの設定の様子を説明するための説明図である。実施例の2ビットのフラッシュメモリセルでは、閾値電圧Vthが低くなる方向のエラーが生じると、下位ページのデータのデータの”1”の個数が増加し、閾値電圧Vthが高くなる方向のエラーが生じると、下位ページの”0”のデータの個数が増加すると考えられる。
【0032】
データを読み書きせずに保持を継続するエラーであるデータリテンションエラーでは、閾値電圧Vthが低くなる方向にエラーが起こると考えられる。したがって、フラッシュメモリに記憶された下位ページの”1”のビット数N1mより符号化前の下位ページの”1”のビット数Niが多い場合には、書き込み非選択のフラッシュメモリセルのチャネルで発生するホットエレクトロンがフラッシュメモリセルのフローティイングゲートに注入されることにより生じるプログラムディスターブエラーよりデータリテンションエラーが支配的であり、閾値電圧Vthが低くなると考えられる。したがって、データDatatagが”01”のときには、符号化前に”00”だったデータが”01”となるエラー、つまり、下位ページのセルエラーが支配的であると考え、推定セルエラー率CERestを下位ページのセルエラー率CERlに設定し、上位ページのセルエラー率CERuには、例えば10-7等の予め実験や解析などで求めた値を適宜設定する。また、データDatatagが”11”のときには、符号化前に”01”だったデータが”11”となるエラー、つまり、上位ページのセルエラーが支配的であると考えて、推定セルエラー率CERestを上位ページのセルエラー率CERuに設定し、下位ページのセルエラー率CERlには例えば10-7等の予め実験や解析などで求めた値を適宜設定する。
【0033】
プログラムディスターブエラーでは、閾値電圧Vthが高くなる方向にエラーが起こると考えられる。したがって、フラッシュメモリに記憶された下位ページの”1”のビット数N1mより符号化前のデータに含まれていた”1”のデータのビット数Niより少ない場合には、データリテンションエラーよりプログラムディスターブエラーが支配的であると考えられる。データDatatagが”01”のときには、符号化前に”11”だったデータが”01”となるエラー、つまり、上位ページのセルエラーが支配的であると考えて、推定セルエラー率CERestを上位ページのセルエラー率CERuに設定し、こうして設定した上位ページのセルエラー率CERuに係数αを乗じた値を下位ページのセルエラー率CERlに設定する。また、データDatatagが”00”のときには、符号化前に”10”だったデータが”00”となるエラー、つまり、下位ぺージのセルエラーが支配的であると考えて、推定セルエラー率CERestを下位ページのセルエラー率CERlに設定し、こうして設定した下位ページのセルエラー率CERlに係数αを乗じた値を上位ページのセルエラー率CERuに設定する。このように、フラッシュメモリに記憶された下位ページの”1”のビット数N1m,符号化前のデータに含まれていた”1”のデビット数Ni,データDatatag,Dataadjに基づいてセルエラー率CERu,CERlを設定することができる。
【0034】
こうしてセルエラー率CERu,CERlを設定したら、データDatatagとセルエラー率CERu,CERlとデータが”0”のときに用いる次式(4)とデータが”1”のときに用いる式(5)に基づいて上位ページLLRu,下位ページLLRlを設定し(ステップS250)、データに含まれる全ビットに対してステップS230〜S250の処理を実行して(ステップS260)、本ルーチンを終了する。例えば、データDatatagが”00”のときには、式(4)を適用した式(6)(7)により上位ページLLRu,下位ページLLRlを設定する。また、例えば、データDatatagが”01”のときには、式(4)を適用した式(6)により上位ページLLRuを設定し、式(5)を適用した式(8)により下位ページLLRlを設定する。一般に、フラッシュメモリセルのデータは、そのセルの周囲にある他のメモリセルがどのようなデータを記憶しているかによって影響を受けるため、周囲のメモリセルのデータにより着目するメモリセルのデータのセルエラー率が変動すると考えられる。実施例では、算出されたビットエラー率BERから求められる推定リテンション時間Tretと、書き換え回数NW/Eと、ターゲットセルのデータDatatagと、ターゲットセルの周囲のメモリセルのデータDataadjと、に基づいて推定セルエラー率CERestを設定し、設定した推定セルエラー率CERestを用いて読み出された1ページ分のデータの全ビットについて上位ページLLRu,下位ページLLRlを設定することにより、より実際のフラッシュメモリセル24aの状態を反映した上位ページLLRu,下位ページLLRlを設定することができるから、予め想定した閾値電圧の分布を用いて上位ページLLRu,下位ページLLRlを設定するものに比して、訂正能力の向上を図ることができる。また、より実際のフラッシュメモリセル24aの状態を反映した上位ページLLRu,下位ページLLRlを設定することができるから、フラッシュメモリからデータを読み出す際に参照する電圧の数を増やす必要がないため、データの読み出し回数の増大を抑制することができ、処理時間の増大を抑制することができる。これにより、誤り訂正能力を向上させつつ、処理時間の増大を抑制することができる。
【0035】
LLR(0)=log((1-CER)/CER) (4)
LLR(1)=log(CER/(1-CER)) (5)
LLRu=log((1-CERu)/CERu) (6)
LLRl=log((1-CERl)/CERl) (7)
LLRl=log(CERl/(1-CERl)) (8)
【0036】
以上説明した実施例のSSD20によれば、算出されたビットエラー率BERから求められる推定リテンション時間Tretと、書き換え回数NW/Eと、ターゲットセルのデータDatatagと、ターゲットセルの周囲のメモリセルのデータDataadjと、に基づいて推定セルエラー率CERestを設定し、設定した推定セルエラー率CERestを用いて読み出された1ページ分のデータの全ビットについて上位ページLLRu,下位ページLLRlを設定し、こうして設定した上位ページLLRu,下位ページLLRlを用いてフラッシュメモリ22から読み出したデータについてエラー訂正を行なって復号するから、誤り訂正能力を向上させつつ、処理時間の増大を抑制することができる。
【0037】
実施例のSSD20では、
図5のLLR設定処理ルーチンのステップS220において、ビットエラー率BERと書き換え回数NW/Eとを考慮して、ビットエラー率BERと書き換え回数NW/Eと
図6に例示した推定リテンション時間設定テーブル40aとを用いて推定リテンション時間Tretを設定するものとしたが、書き換え回数NW/Eを考慮しないものとして、推定リテンション時間設定テーブル40aをビットエラー率BERと書き換え回数NW/Eとの関係を予め定めたものとして、ビットエラー率BERと推定リテンション時間設定テーブル40aから推定リテンション時間Tretを求めるものとしてもよい。
【0038】
実施例のSSD20では、
図5のLLR設定処理ルーチンのステップS210において、読み出した1ページ分のデータについてビットエラー率BERを算出するものとしたが、複数ビットのデータについてビットエラー率BERを算出するものとすればよいから、例えば、1ページ以上のデータについてビットエラー率BERを算出するものとしてもよいし、1ページ未満のデータについてビットエラー率BERを算出するものとしてもよい。
【0039】
実施例のSSD20では、
図4の書き込み処理ルーチンのステップS110の処理で、入力データに含まれる”1”のデータのビット数Niを計数し、
図5のLLR設定処理ルーチンのステップS200,S210の処理で、読み出したデータの下位ページの”1”のビット数N1mを計数し、下位ページの”1”のビット数N1mと符号化前のデータに含まれていた”1”のビット数Niと1ページ分のデータのビット数Npとを用いてビットエラー率BERを算出するものとしたが、ステップS110の処理で入力データに含まれる”0”のデータのビット数を計数し、
図5のLLR設定処理ルーチンのステップS200,S210の処理で、読み出したデータの下位ページの”0”のビット数を計数し、下位ページの”0”のビット数と符号化前のデータに含まれていた”0”のビット数と1ページ分のデータのビット数Npとを用いてビットエラー率BERを算出するものとしてもよい。この場合、メモリセルの閾値電圧が増加して下位ページが”1”から”0”になるエラー、例えば、プログラムディスターブエラーによるビットエラー率を算出することができる。
【0040】
実施例のSSD20では、
図5のLLR設定処理ルーチンのステップS230において、データDatatag,Dataadj(4)と、推定リテンション時間Tretと、書き換え回数W/Eとを考慮して、データDatatag,Dataadj(4)と、推定リテンション時間Tretと、書き換え回数W/Eと、EPテーブルとを用いて推定セルエラー率CERestを設定するものとしたが、書き換え回数W/Eを考慮しないものとして、EPテーブルをデータDatatag,Dataadj(4)と推定リテンション時間Tretと推定セルエラー率CERestとの関係を予め定めたものとして、EPテーブルとデータDatatag,Dataadj(4)と推定リテンション時間Tretとを用いて推定セルエラー率CERestを設定するものとしてもよい。
【0041】
実施例のSSD20では、
図5のLLR設定処理ルーチンのステップS220,S230において、推定リテンション時間Tretを設定し、推定リテンション時間Tretを用いて推定セルエラー率CERestを設定するものとしたが、ステップS220の処理を実行せずにステップS230において推定リテンション時間に代えてビットエラー率BERを用いて推定セルエラー率CERestを設定するものとしても構わない。
【0042】
実施例のSSD20では、
図5のLLR設定処理ルーチンのステップS230において、ターゲットセルを囲む4つのフラッシュメモリセルであるレフトセル、ライトセル、アッパーセル、ローワーセルのデータDataadj(4)を考慮して推定セルエラー率CERestを設定するものとしたが、ターゲットセルを囲む所定の範囲のフラッシュメモリセルを考慮すればよいから、例えば、ターゲットセルの周囲の8つのメモリセルや、ターゲットセルの2列分、即ち、24個のフラッシュメモリセルを考慮するものとしてもよい。
【0043】
実施例のSSD20では、推定セルエラー率CERestを上述した式(3)で計算するものとしたが、例えば、レフトセル、ライトセル、アッパーセル、ローワーセルのセルエラー率CERにそれぞれ重み付け計数を乗じて足して計算するものなど、各セルの寄与を考慮して適宜計算するものとしても構わない。また、推定エラー率CERestを次式(9)を用いて計算するものとしても構わない。式(9)中のb1〜b16は、
図9に示すように、
図7に例示したEPテーブル40cにおいて、レフトセルのデータが”11”,”01”,”00”,”10”のときのセルエラー率CER、ライトセルのデータが”11”,”01”,”00”,”10”のときのセルエラー率CER、アッパーセルのデータが”11”,”01”,”00”,”10”のときのセルエラー率CERをそれぞれ示している。
【0045】
実施例のSSD20では、上位ページのセルエラー率CERuを例えば10-7等の予め実験や解析などで求めた値を設定するものとしたが、例えば、下位ページのセルエラー率CERlを用いて設定するものなど如何なる方法で設定してもよい。
【0046】
実施例のSSD20では、LDPC符号に符号化されたデータを復号する際にsum-product法を用いて復号するものとしたが、復号する手法としては、例えば、mini-sumu法など対数尤度率(LLR)を用いた演算により復号する手法としてもよい。
【0047】
実施例のSSD20では、フラッシュメモリ22は1つのフラッシュメモリセル24aに2ビットのデータが記憶されるよう制御されるメモリであるものとしたが、1つのフラッシュメモリセル24aに1ビットのデータが記憶されるよう制御されるメモリであるものとしてもよいし、1つのフラッシュメモリセル24aに2ビットより多いビット数のデータが記憶されるよう制御されるメモリであるものとしてもよい。
【0048】
実施例のSSD20では、入力されたデータをLDPC符号に符号化するものとしたが、エラー訂正符号としては、LDPC符号に限定されるものではなく、入力されたデータをLLRを用いた演算により復号可能なエラー訂正符号であれば如何なるものとしても構わない。
【0049】
実施例のSSD20では、NAND型のフラッシュメモリ22が搭載されているものとしたが、SSD20に搭載されているのはNAND型のフラッシュメモリ22に限定されるものではなく、例えば、NOR型のフラッシュメモリや抵抗変化型メモリなど、電源の供給を停止した後もデータを保持する不揮発性メモリであれば如何なるものに用いるものとしても構わない。
【0050】
実施例では、本発明のメモリコントローラがSSDに搭載されているものとしたが、メモリコントローラがパーソナルコンピュータに搭載されるものとしてパーソナルコンピュータに挿入されたUSBメモリを制御するものとしても構わない。
【0051】
実施例では、本発明のメモリコントローラをSSDに適用する場合を例示したが、適用する対象についてはSSDに限定されるものではなく、データを記憶可能な記憶装置であれば如何なるものに用いても構わない。
【0052】
実施例の主要な要素と発明の概要の欄に記載した発明の主要な要素との対応関係について説明する。メモリコントローラにおいては、実施例では、
図4の書き込み処理ルーチンのステップS110および
図5のLLR設定処理ルーチンのステップS200,S210の処理を実行するN1カウンタ31およびLLR設定ユニット34とが「ビットエラー率算出部」に相当し、
図5のLLR設定処理ルーチンのステップS220〜S240の処理を実行するLLR設定ユニット34が「推定セルエラー確率設定部」に相当し、
図5のLLR設定処理ルーチンのステップS250の処理を実行するLLR設定ユニット34が「対数尤度率設定部」に相当する。また、データ記憶装置においては、実施例では、メモリコントローラ30が「メモリコントローラ」に相当し、フラッシュメモリ22が「不揮発性メモリ」に相当する。
【0053】
なお、実施例の主要な要素と発明の概要の欄に記載した発明の主要な要素との対応関係は、実施例が発明の概要の欄に記載した発明を実施するための形態を具体的に説明するための一例であることから、発明の概要の欄に記載した発明の要素を限定するものではない。即ち、発明の概要の欄に記載した発明についての解釈はその欄の記載に基づいて行なわれるべきものであり、実施例は発明の概要の欄に記載した発明の具体的な一例に過ぎないものである。
【0054】
以上、本発明を実施するための形態について実施例を用いて説明したが、本発明はこうした実施例に何等限定されるものではなく、本発明の要旨を逸脱しない範囲内において、種々なる形態で実施し得ることは勿論である。