(57)【要約】【課題】複数のデータに誤りがある場合においても、ＸＯＲ演算を用いて元のデータを復元する。【解決手段】ＸＯＲ演算部１５は、マルチプレクサ１４から出力されたデータの各ビット同士のＸＯＲ演算を行い、エラー要因推定部１９は、ＮＡＮＤメモリ２に特有のエラー要因に基づいてエラービットの反転方向を推定し、エラービット位置推定部２０は、ＸＯＲ演算部１５のＸＯＲ演算結果に基づいてエラービット位置を推定し、エラー仮判定部２１は、エラービット位置推定部２０で推定されたエラービット位置におけるビット反転を、エラー要因推定部１９で推定された反転方向と反対方向に行う。【選択図】図６
2017055254.tif 000002
【特許請求の範囲】
【請求項１】
Ｎ（Ｎは２以上の整数）ビットからなるＭ（Ｍは２以上の整数）個のデータの各ビット同士のＸＯＲ演算を行うＸＯＲ演算部と、
前記ＸＯＲ演算結果に基づいてエラービット位置を推定するエラービット位置推定部と、
前記エラービットの反転方向を推定するエラー要因推定部と、
前記エラービット位置におけるビット反転を前記反転方向と反対方向に行うエラー仮判定部とを備えるデータ復元回路。
【請求項２】
前記Ｍ個のデータのエラー訂正を行い、前記エラー訂正できなかったＫ（Ｋは２以上Ｍ以下の整数）個のデータを特定するエラー訂正部を備える請求項１に記載のデータ復元回路。
【請求項３】
前記エラービット位置推定部は、前記ＸＯＲ演算でエラーがあると判定されたＰ（Ｐは２以上Ｎ以下の整数）個のビット位置のうち、前記エラー訂正できなかったＫ個のデータのうちのいずれか１つが前記反転方向の値をとるビット位置を前記エラービット位置として推定する請求項２に記載のデータ復元回路。
【請求項４】
前記ＸＯＲ演算部は、前記エラー訂正できなかったＫ個のデータがある場合、前記エラー訂正前のＫ個のデータと、エラーがない（Ｍ−Ｋ）個のデータの各ビット同士のＸＯＲ演算を行う請求項２または３に記載のデータ復元回路。
【請求項５】
前記エラー訂正部は、前記エラー仮判定部でビット反転されたデータのエラー訂正を再度行う請求項２から４のいずれか１項に記載のデータ復元回路。
【請求項６】
前記エラービット位置推定部は、前記ＸＯＲ演算でエラーがあると判定されたＰ個のビット位置のうち、前回エラー訂正できなかったデータから今回エラーが訂正できたデータを除いたデータのうちのいずれか１つのみが前記反転方向の値をとるビット位置を前記エラービット位置と推定する請求項５に記載のデータ復元回路。
【請求項７】
前記Ｍ個のデータのエラーがなくなるまで、前記エラービット位置における前記反転方向と反対方向へのビット反転と前記エラー訂正とを繰り返す請求項６に記載のデータ復元回路。
【請求項８】
データを記憶するＮＡＮＤメモリと、
ＮＡＮＤメモリを制御するコントローラとを備え、
前記コントローラは、Ｎ（Ｎは２以上の整数）ビットからなるＭ（Ｍは２以上の整数）個のデータのＸＯＲ演算結果に基づいてエラービット位置を推定し、前記エラービットに対して推定された反転方向と反対方向に前記エラービット位置におけるビット反転を行うデータ復元回路と、前記ＮＡＮＤメモリに対してデータ送受するインターフェース回路と、を備える半導体記憶装置。
【請求項９】
前記データ復元回路は、前記ＮＡＮＤメモリに特有のエラー要因に基づいて前記エラービットの反転方向を推定する請求項８に記載の半導体記憶装置。
【請求項１０】
前記エラー要因は、データリテンション、リードディスターブ、ライトディスターブ、リード時のセル間カップリング効果またはライト時のセル間カップリング効果である請求項９に記載の半導体記憶装置。
【請求項１１】
Ｎ（Ｎは２以上の整数）ビットからなるＭ（Ｍは２以上の整数）個のデータのＸＯＲ演算を行い、
前記ＸＯＲ演算結果に基づいてエラービット位置を推定し、
前記エラービットの反転方向を推定し、
前記エラービット位置におけるビット反転を前記反転方向と反対方向に行うデータ復元方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、データ復元回路、半導体記憶装置およびデータ復元方法に関する。
【背景技術】
【０００２】
データ復元時のデータ誤りを訂正するため、復元対象となるデータに冗長データを付加する方法がある。この冗長データの代表的な例として、複数のデータのＸＯＲ（排他的論理和）演算により得られた符号語が挙げられる。ＸＯＲ演算により得られた符号語を付加する方法では、複数のデータのうち２以上のデータに誤りがある場合には元のデータを復元できなかった。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許ＵＳ４６６１９５５
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明の一つの実施形態は、複数のデータに誤りがある場合においても、ＸＯＲ演算を用いて元のデータを復元することが可能なデータ復元回路、半導体記憶装置およびデータ復元方法を提供することを目的とする。
【課題を解決するための手段】
【０００５】
本発明の一つの実施形態によれば、ＸＯＲ演算部と、エラービット位置推定部と、エラー要因推定部と、エラー仮判定部とを備える。ＸＯＲ演算部は、Ｎ（Ｎは２以上の整数）ビットからなるＭ（Ｍは２以上の整数）個のデータの各ビット同士のＸＯＲ演算を行う。エラービット位置推定部は、前記ＸＯＲ演算結果に基づいてエラービット位置を推定する。エラー要因推定部は、前記エラービットの反転方向を推定する。エラー仮判定部は、前記エラービット位置におけるビット反転を前記反転方向と反対方向に行う。
【図面の簡単な説明】
【０００６】
【図１】図１は、第１実施形態に係る１つのデータに誤りがある場合のＸＯＲ演算を用いたデータ復元方法を示す図である。
【図２】図２は、第１実施形態に係る複数のデータに誤りがある場合のＸＯＲ演算を用いたデータ復元方法を示す図である。
【図３】図３（ａ）および図３（ｂ）は、第１実施形態に係る複数のデータに誤りがある場合のＸＯＲ演算を用いたデータ復元方法を示す図である。
【図４】図４（ａ）〜図４（ｄ）は、第１実施形態に係る複数のデータに誤りがある場合のＸＯＲ演算を用いたデータ復元方法を示す図である。
【図５】図５は、メモリセルの記憶状態が４値化されている時のしきい値分布の一例を示す図である。
【図６】図６は、第２実施形態に係るデータ復元回路の概略構成を示すブロック図である。
【図７】図７は、第２実施形態に係るデータ復元回路の動作を示すフローチャートである。
【図８】図８は、第３実施形態に係る半導体記憶装置の概略構成を示すブロック図である。
【図９】図９は、図６のデータ管理情報の一例を示す図である。
【発明を実施するための形態】
【０００７】
以下に添付図面を参照して、実施形態に係るデータ復元回路、半導体記憶装置およびデータ復元方法を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。また、以下の実施形態では、データが記録される半導体記憶装置として、ＮＡＮＤフラッシュメモリをＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）に適用した場合を例にとるが、ＮＡＮＤフラッシュメモリをメモリカードやＵＳＢメモリなどの可搬性記憶媒体に適用した場合であってもよいし、ＮＡＮＤフラッシュメモリをスマートフォンやタブレット型端末などの電子機器に適用した場合であってもよい。また、ＮＡＮＤフラッシュメモリの代わりに、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＦＲＡＭ（登録商標）（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲｅＲＡＭ（Ｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）またはＰＣＲＡＭ（Ｐｈａｓｅ  Ｃｈａｎｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などの不揮発性半導体記憶装置を用いた場合に適用してもよいし、ＤＲＡＭやＳＲＡＭなどの揮発性半導体記憶装置を用いた場合に適用してもよい。
【０００８】
（第１実施形態）
図１は、第１実施形態に係る１つのデータに誤りがある場合のＸＯＲ演算を用いたデータ復元方法を示す図である。なお、以下の実施形態では、復元対象となる６個のデータＣ０〜Ｃ５がある場合を例にとる。
図１において、復元対象となるデータＣ０〜Ｃ５に対して、記録時にデータＸ０が付加されているものとする。各データＣ０〜Ｃ５は、例えば、セクタ単位で与えることができる。１セクタのサイズは、例えば、５１２バイトまたは４ｋバイトに設定することができる。この時、データＸ０はデータＣ０〜Ｃ５のＸＯＲ演算により生成することができ、Ｘ０＝Ｃ０^Ｃ１^Ｃ２^Ｃ３^Ｃ４^Ｃ５という式で与えることができる。ここで、^は各データで同じ位置にあるビット同士のＸＯＲ演算を示す。
【０００９】
そして、データＣ０、Ｃ１、Ｃ３〜Ｃ５は正常に再生できたが、データＣ２はエラー訂正できず、正常に再生できなかったものとする。なお、データＣ２´は、エラー訂正できなかったＣ２の、エラー訂正前のデータである。エラー訂正には、例えば、ＲＳ符号またはＬＤＰＣ符号などの誤り訂正符号を用いることができる。この時、このような誤り訂正符号でデータＣ０〜Ｃ５、Ｘ０を符号化してから記録することができる。ここで、データＸ０を正常に再生できれば、データＣ０、Ｃ１、Ｃ３〜Ｃ５、Ｘ０のＸＯＲ演算により、データＣ２を正常に再生することができる。この時、データＣ２は、Ｃ２＝Ｃ０^Ｃ１^Ｃ３^Ｃ４^Ｃ５^（Ｃ０^Ｃ１^Ｃ２^Ｃ３^Ｃ４^Ｃ５）という式で与えることができる。
このように、ＸＯＲ演算により得られた符号語を冗長データとして付加する方法では、複数のデータのうち１つのデータに誤りがある場合には、ＸＯＲ演算により元のデータを復元することができる。
【００１０】
図２、図３（ａ）および図３（ｂ）および図４（ａ）〜図４（ｄ）は、第１実施形態に係る複数のデータに誤りがある場合のＸＯＲ演算を用いたデータ復元方法を示す図である。なお、以下の実施形態では、各データＣ０〜Ｃ５は８ビットである場合を例にとる。
図２において、データＣ０、Ｃ３、Ｃ５、Ｘ０は正常に再生できたが、データＣ１、Ｃ２、Ｃ４はエラー訂正に失敗し、正常に再生できなかったものとする。なお、データＣ１´、Ｃ２´、Ｃ４´は、それぞれ、エラー訂正できなかったＣ１、Ｃ２、Ｃ４のエラー訂正前のデータである。エラー訂正できなかった複数のデータがある場合、エラービット位置の推定にＸＯＲ演算を用いる。
【００１１】
すなわち、図３（ａ）において、各データＣ１´、Ｃ２´、Ｃ４´のエラーのあるビット位置ｂ０〜ｂ７の一例を×で示した。すなわち、データＣ１´ではビット位置ｂ４、ｂ５、ｂ７にエラーがあり、データＣ２´ではビット位置ｂ０、ｂ２、ｂ６、ｂ７にエラーがあり、データＣ４´ではビット位置ｂ１、ｂ３、ｂ６、ｂ７にエラーがあるものとする。そして、データＣ０、Ｃ１´、Ｃ２´、Ｃ３、Ｃ４´、Ｃ５、Ｘ０のＸＯＲ演算によりデータＥを生成する。このＸＯＲ演算では、データＣ１´、Ｃ２´、Ｃ４´については、エラー訂正前のデータＣ１´、Ｃ２´、Ｃ４´を用いる。この時、データＣ１´、Ｃ２´、Ｃ４´のエラーのあるビット位置ｂ０〜ｂ７がデータＥに反映され、データＣ１´、Ｃ２´、Ｃ４´のエラービット位置候補に１が立つ。すなわち、図３（ｂ）に示すように、データＥの１が立っているビット位置ｂ０〜ｂ５、ｂ７をエラービット位置ｅ０〜ｅ６とすると、エラービット位置ｅ０〜ｅ６では、いずれかのデータＣ１´、Ｃ２´、Ｃ４´にエラーがあることを示す。なお、データＥのｂ６のように、複数のデータで同じビット位置にエラーがあり、エラーがあるデータ数が偶数である場合、ＸＯＲ演算結果がゼロとなり、エラービット位置の情報が消失する。
【００１２】
ここで、ＸＯＲ演算によりデータＥを生成する時に、エラー訂正前のデータＣ１´、Ｃ２´、Ｃ４´を用いるのは、エラー訂正できなかった符号語については、エラー訂正前のデータＣ１´、Ｃ２´、Ｃ４´の方がエラー訂正後のデータよりも正しい符号語とのハミング距離が近い場合が多いからである。
【００１３】
データＥの１が立っているエラービット位置ｅ０〜ｅ６を見ただけでは、どのデータＣ１´、Ｃ２´、Ｃ４´の各エラービット位置ｅ０〜ｅ６にエラーがあるか分からない。このため、各エラービット位置ｅ０〜ｅ６において、データＣ１´、Ｃ２´、Ｃ４´のうちいずれか１つのみにエラーがあると想定し、その１つのデータを推定することができる。この時、所定条件下でエラービットの予見性のある反転方向を想定することができる。例えば、データＣ０〜Ｃ５、Ｘ０がＮＡＮＤフラッシュメモリに記録されているものとすると、ＮＡＮＤフラッシュメモリに特有のエラー要因に基づいて、エラービット位置ｅ０〜ｅ６のエラービットの反転方向を想定することができる。ＮＡＮＤフラッシュメモリに特有のエラー要因としては、データリテンション、リードディスターブ、ライトディスターブ、リード時のセル間カップリング効果またはライト時のセル間カップリング効果を挙げることができる。データリテンションは、時間経過とともにメモリに保持されている電荷が減少する現象である。リードディスターブ、ライトディスターブおよびセル間カップリング効果は、メモリに保持されている電荷がリード時またはライト時に増大する現象である。ＮＡＮＤフラッシュメモリでは、リードおよびライトはページ単位で行われるため、リードディスターブおよびライトディスターブはページ単位で発生する。例えば、２値データが記録されるシングルレベルセルにおいて、データリテンションが発生すると、メモリセルに記憶されているデータが０から１に化けることがある。また、シングルレベルセルにおいて、リードディスターブ、ライトディスターブまたはセル間カップリング効果が発生すると、メモリセルに記憶されているデータが１から０に化けることがある。
【００１４】
この時、ＮＡＮＤフラッシュメモリに特有の１つのエラー要因ごとに、エラービットの反転方向を一方向に定めることができる。このため、ＮＡＮＤフラッシュメモリに特有の１つのエラー要因を指定することにより、エラーがあるすべてのエラービット位置ｅ０〜ｅ６において、エラービットの反転方向を一方向に定めることができる。そして、各エラービット位置ｅ０〜ｅ６において、エラー訂正できなかったデータＣ１´、Ｃ２´、Ｃ４´のうち、エラービットの反転方向の値をとるただ１つのデータがある場合、そのエラービット位置ｅ０〜ｅ６では、その１つのデータにエラーがあると推定することができる。そして、データＣ１´、Ｃ２´、Ｃ４´のうちのいずれか１つのデータの各エラービット位置ｅ０〜ｅ６におけるビット反転を行うことで、エラー訂正できなかったデータＣ１´、Ｃ２´、Ｃ４´を仮復元することができる。そして、仮復元されたデータについて再度エラー訂正を行うことで、その仮復元が正しいかどうかを判断することができる。
【００１５】
例えば、図４（ａ）に示すように、データＣ１´＝０００１１１０１、Ｃ２´＝１１１０００１１、Ｃ４´＝０１０１０１１１であるものとする。各データＣ１´、Ｃ２´、Ｃ４´において、真のエラービット位置をハッチングで示した。ここで、例えば、エラービット位置ｅ０では、Ｅ＝１となっているので、複数のデータＣ１´、Ｃ２´、Ｃ４´のうちのいずれか１個以上にエラーがあることは分かるが、どのデータＣ１´、Ｃ２´、Ｃ４´にエラーがあるかは分からない。ここで、エラービット位置におけるビット反転がデータリテンションに起因するものとする。データリテンションでは、シングルレベルセルに記憶されているデータが０から１に化ける。このため、各データＣ１´、Ｃ２´、Ｃ４´の０という値をとるビット位置ではエラーがないとみなすことができる。このため、例えば、エラービット位置ｅ０において、データＣ１´、Ｃ２´、Ｃ４´の中から１という値をとるデータを探す。この時、エラービット位置ｅ０において、１という値をとるデータがただ１つしかない場合は、その１つのデータのエラービット位置ｅ０でエラーがあると判断することができる。すなわち、図４（ｂ）に示すように、エラービット位置ｅ０において、１という値をとるデータはＣ２´だけなので、データＣ２´のエラービット位置ｅ０でエラーがあると判断することができる。同様に、エラービット位置ｅ２において、１という値をとるデータはＣ２´だけなので、データＣ２´のエラービット位置ｅ２でエラーがあると判断することができる。同様に、エラービット位置ｅ４において、１という値をとるデータはＣ１´だけなので、データＣ１´のエラービット位置ｅ４でエラーがあると判断することができる。エラーがあると一意に判断できるデータのビット位置を○印で示した。
一方、例えば、エラービット位置ｅ１では、１という値をとるデータはＣ２´、Ｃ４´であるので、どちらのデータＣ２´、Ｃ４´にエラーがあるか判断できない。
【００１６】
そして、図４（ｃ）に示すように、データＣ１´、Ｃ２´、Ｃ４´のうちのいずれか１つのみが１という値をとるエラービット位置ｅ０、ｅ２、ｅ４が見つかると、そのエラービット位置ｅ０、ｅ２、ｅ４において１となっている値を０に反転することで、データＣ１´´、Ｃ２´´を生成する。ここで、１を０に反転することで、データリテンションに起因するビット反転を元に戻すことができる。そして、例えば、データＣ２´´についてエラー訂正を行う。この時、データＣ２´´のエラービット数が訂正可能範囲内に収まれば、データＣ２を復元することができる。ここで、図４（ｄ）に示すように、データＣ２´´のエラー訂正によりデータＣ２＝０１００００００が復元できたものとする。この時、エラービット位置ｅ１では、１という値をとるデータはＣ４´だけとなり、データＣ４´のエラービット位置ｅ１でエラーがあると判断することができる。そして、そのエラービット位置ｅ１において１となっている値を０に反転し、エラー訂正を行うことができる。そして、その時のエラービット数が訂正可能範囲内に収まれば、データＣ４を復元することができる。以上の処理を繰り返すことで、最終的にすべてのデータを復元することができる。
【００１７】
これにより、データリテンションに起因するエラーの場合、各エラービット位置ｅ０〜ｅ６での値を１から０に反転させることで、エラービットのビット反転を一方向に定めて仮復元することができる。このため、エラービットの推定を効率よく行うことができ、データを復元できる可能性が高くなる。
【００１８】
一方、Ｎ（Ｎは２以上の整数）ビットからなるＭ（Ｍは２以上の整数）個のデータにおいて、エラービット位置がＰ（Ｐは２以上Ｎ以下の整数）個ある場合、エラービットのビット反転がランダムに起こるものとして仮復元されたデータを定めると、各データごとに２のＰ乗個の組み合わせがある。そして、その時に仮復元されたデータが正しいかどうかをエラー訂正で判断するために、これらの組み合わせについてエラー訂正演算を行う必要があり、エラー訂正の演算回数が膨大になる。すなわち、エラー訂正できなかった複数のデータを復元する場合、ＸＯＲ演算によりエラービット候補は求めることはできても、エラービットのビット反転の方向が想定できなければ、ビット反転の組み合わせが発散し、エラー訂正できなかった複数のデータの復元は困難となる。
【００１９】
なお、図４（ｃ）では、データＣ１´、Ｃ２´、Ｃ４´のうちのいずれか１つのみが１という値をとるエラービット位置ｅ０、ｅ２、ｅ４において１となっている値を０に反転し、エラー訂正を行う方法について説明した。各エラービット位置ｅ０〜ｅ６のうち、データＣ１´、Ｃ２´、Ｃ４´のうちのいずれか１つのみにエラーがあるものとして、反転ビットを選択してもよいし、複数のデータまたはすべてのデータのビットを反転させるようにしてもよい。例えば、データリテンションに起因するエラーの場合、各エラービット位置ｅ０〜ｅ６で１となっている値を全て０に反転してから、エラー訂正を行うようにしてもよい。この時、データリテンションはＮＡＮＤメモリに特有のエラー要因であるため、実際にエラーによって反転しているビットを高確率で選択することができ、再度のエラー訂正で復元できる可能性を高めることができる場合もある。
【００２０】
また、上述した実施形態では、誤り訂正符号で符号化される前のデータＣ０〜Ｃ５、Ｘ０をＸＯＲ演算する方法について説明したが、誤り訂正符号で符号化された後のデータについて、誤り訂正符号の符号化に使われた冗長データも含めてＸＯＲ演算するようにしてもよい。この場合、誤り訂正の冗長部分のＸＯＲデータを格納するメモリが必要になるが、ＸＯＲデータの誤り訂正符号化を不要とすることができる。
【００２１】
図５は、メモリセルの記憶状態が４値化されている時のしきい値分布の一例を示す図である。
図５において、４値が記憶される時の最もレベルの低いしきい値分布をＥ、３番目にレベルの高いしきい値分布をＡ、２番目にレベルの高いしきい値分布をＢ、最もレベルの高いしきい値分布をＣとした。これらのしきい値分布Ｅ、Ａ〜Ｃは、２ビット分のデータ‘１１’、‘１０’、‘０１’、‘００’にそれぞれ対応させることができる。この時、データリテンションは、しきい値Ｖｔｈが減少する方向にしきい値分布を変化させる。このため、データリテンションが発生すると、しきい値分布がＣからＢに変化したり、ＢからＡに変化したりする。この結果、シングルレベルセルでは、データリテンションにより０が１に化けるのに対して、マルチレベルセルでは、データリテンションにより０が１に化けるのか、１が０に化けるのか特定できない。このため、マルチレベルセルでは、メモリセルに保持された電荷の増減に伴うしきい値のずれに応じたビットの化け方に基づいて、エラービットの反転方向を推定することができる。
なお、図５の例では、メモリセルの記憶状態が４値化されている場合を例にとったが、メモリセルの記憶状態が３値以上に多値化されている場合にも同様に適用することができる。
【００２２】
（第２実施形態）
図６は、第２実施形態に係るデータ復元回路の概略構成を示すブロック図である。
図６において、データ復元回路１には、マルチプレクサ１１、１４、１７、データメモリ１２、１６、エラー訂正部１３、ＸＯＲ演算部１５、データ管理情報１８、エラー要因推定部１９、エラービット位置推定部２０およびエラー仮判定部２１が設けられている。なお、データ復元回路１はハードウェアで構成するようにしてもよいし、ファームウェアで構成するようにしてもよい。データメモリ１２は、ＮＡＮＤメモリ２に記録されているエラー訂正前のデータを記憶する。マルチプレクサ１１は、ＮＡＮＤメモリ２から読み出されたデータと、データメモリ１２に記憶されているデータのどちらか片方を選択して出力する。エラー訂正部１３は、マルチプレクサ１１から出力されたデータのエラー訂正を行う。このエラー訂正には、例えば、ＲＳ符号またはＬＤＰＣ符号などの誤り訂正符号を用いることができる。マルチプレクサ１４は、エラー訂正部１３から出力されたエラーのないデータと、ＮＡＮＤメモリ２に記憶されているエラー訂正前のデータのどちらか片方を選択して出力する。ＸＯＲ演算部１５は、マルチプレクサ１４から出力されたデータのＸＯＲ演算を行う。データメモリ１６は、ＸＯＲ演算部１５のＸＯＲ演算結果を記憶する。データ管理情報１８は、ＮＡＮＤメモリ２に記録されているデータを管理する。例えば、データ管理情報１８は、ＮＡＮＤメモリ２に記録されているデータの記録後の経過時間をページ単位で管理することができる。エラー要因推定部１９は、ＮＡＮＤメモリ２に特有のエラー要因に基づいてエラービットの反転方向を推定する。エラービット位置推定部２０は、ＸＯＲ演算部１５のＸＯＲ演算結果に基づいてエラービット位置を推定する。エラー仮判定部２１は、エラービット位置推定部２０で推定されたエラービット位置におけるビット反転を、エラー要因推定部１９で推定された反転方向と反対方向に行う。
【００２３】
データ復元回路１は、ＮＡＮＤＩ／Ｆ制御部４を介してＮＡＮＤメモリ２に接続され、ホストＩ／Ｆ制御部５を介してホスト３に接続されている。ＮＡＮＤＩ／Ｆ制御部４は、ＮＡＮＤメモリ２とのデータのやり取りを制御する。ホストＩ／Ｆ制御部５は、ホスト３とのデータのやり取りを制御する。
そして、ＮＡＮＤＩ／Ｆ制御部４において、ＮＡＮＤメモリ２からページ単位で読み出されたデータはセクタ単位に変換され、マルチプレクサ１１に送られるとともに、データメモリ１２に記憶される。そして、ＮＡＮＤメモリ２から読み出されたデータと、データメモリ１２から読み出されたデータのうち、どちらか片方がマルチプレクサ１１で選択されてエラー訂正部１３に送られる。
【００２４】
そして、エラー訂正部１３において、マルチプレクサ１１から出力されたデータがエラー訂正され、エラー訂正できないデータがない場合は、エラーのないデータがマルチプレクサ１７を介してセクタ単位でホスト３に送られる。
【００２５】
また、エラー訂正部１３において、エラー訂正できないデータが１つだけの場合は、そのエラー訂正できないデータ以外の、エラーのないデータがマルチプレクサ１４を介してＸＯＲ演算部１５に送られる。そして、ＸＯＲ演算部１５において、これらのＸＯＲ演算が行われることで、エラー訂正できなかった１つのデータが復元され、データメモリ１６に記憶される。そして、エラー訂正部１３から出力されたエラーのないデータと、データメモリ１６から読み出されたエラーのないデータとがマルチプレクサ１７を介してセクタ単位でホスト３に送られる。
【００２６】
また、エラー訂正部１３において、エラー訂正できないデータが複数ある場合は、エラーのないデータがエラー訂正部１３からマルチプレクサ１７に送られるとともに、エラー訂正できない訂正前のデータがデータメモリ１２からマルチプレクサ１４に送られる。そして、マルチプレクサ１４を介して、これらのデータがＸＯＲ演算部１５に送られる。そして、ＸＯＲ演算部１５において、マルチプレクサ１４から送られたデータのＸＯＲ演算が行われることでエラービット位置が検出され、データメモリ１６に記憶される。そして、エラー要因推定部１９において、データ管理情報１８からエラービットの反転方向が推定され、その推定結果がエラー仮判定部２１に送られる。この時、ＮＡＮＤメモリ２から今回読み出されたデータの記録時からの経過時間が所定値を超える場合、データリテンションに起因するエラーを想定することができる。このエラーでは、シングルレベルセルのデータが０から１に化けると想定することができる。あるいは、ＮＡＮＤメモリ２から今回読み出されたページをＮＡＮＤメモリ２に記録した後に、そのページに隣接するページのリードまたはライトがあった場合は、リードディスターブ、ライトディスターブまたはセル間カップリング効果に起因するエラーを想定することができる。このエラーでは、シングルレベルセルのデータが１から０に化けると想定することができる。また、エラービット位置推定部２０において、データメモリ１６に記憶されているＸＯＲ演算結果からエラービット位置が推定され、その推定結果がエラー仮判定部２１に送られる。そして、エラー仮判定部２１において、エラービット位置推定部２０で推定されたエラービット位置におけるビット反転が、エラー要因推定部１９で推定された反転方向と反対方向に行われ、データメモリ１２に記憶される。そして、データメモリ１２に記憶されたデータがマルチプレクサ１１を介してエラー訂正部１３に送られることで、前回エラー訂正できなかったデータのエラー訂正が再度行われる。そして、ＮＡＮＤメモリ２から今回読み出されたすべてのデータのエラーがなくなるまで以上の処理が繰り返されることで、ＮＡＮＤメモリ２から今回読み出されたすべてのデータを復元することができる。  
【００２７】
図７は、第２実施形態に係るデータ復元回路の動作を示すフローチャートである。
図７において、ＮＡＮＤメモリ２からデータをリードする（Ｓ１）。次に、今回リードしたデータがエラー訂正対象かどうかを判断する（Ｓ２）。そして、エラー訂正対象の場合は（Ｓ２＝Ｙｅｓ）、エラー訂正を行い（Ｓ３）、エラー訂正対象でない場合は（Ｓ２＝Ｎｏ）、エラー訂正をスキップする。
次に、エラー訂正対象でないデータおよびエラー訂正されたデータがＸＯＲ演算対象かどうかを判断する（Ｓ４）。そして、ＸＯＲ演算対象の場合は（Ｓ４＝Ｙｅｓ）、ＸＯＲ演算を行い（Ｓ５）、ＸＯＲ演算対象でない場合は（Ｓ４＝Ｎｏ）、ＸＯＲ演算をスキップする。
【００２８】
次に、ＮＡＮＤメモリ２からデータを後続リードするかどうかを判断する（Ｓ６）。そして、後続リードする場合は（Ｓ６＝Ｙｅｓ）、Ｓ１からＳ６の処理を繰り返し、後続リードしない場合は（Ｓ６＝Ｎｏ）、エラー位置およびエラー要因を推定する（Ｓ７）。なお、後続リードは、エラー訂正に必要なデータがセクタ単位で得られるまでページ単位で繰り返すことができる。
次に、エラー位置およびエラー要因の推定結果に基づいてエラー仮判定を行った後（Ｓ８）、エラー訂正を再度行う（Ｓ９）。次に、エラー仮判定後のデータのエラー訂正が可能かどうかを判断する（Ｓ１０）。そして、エラー訂正が可能な場合は（Ｓ１０＝Ｙｅｓ）、処理を終了し、エラー訂正が不可能な場合は（Ｓ１０＝Ｎｏ）、リトライするかどうかを判断する（Ｓ１１）。そして、リトライする場合は（Ｓ１１＝Ｙｅｓ）、Ｓ７からＳ１１の処理を繰り返し、リトライしない場合は（Ｓ１１＝Ｎｏ）、処理を終了する。
【００２９】
（第３実施形態）
図８は、第３実施形態に係る半導体記憶装置の概略構成を示すブロック図である。
図８において、ソリッドステートドライブ（ＳＳＤ）３０には、データ保存用のＮＡＮＤメモリ３２、ソリッドステートドライブ３０内部の温度を検出する温度センサ３４、状態表示用の発光ダイオード３５およびこれらを制御するコントローラ３１が設けられている。コントローラ３１には、回路制御用バスＢ１、Ｂ２およびデータアクセス用バスＢ３が設けられている。そして、回路制御用バスＢ２には、コントローラ３１全体を制御するプロセッサ４１が接続されている。また、回路制御用バスＢ２には、各管理プログラム（ＦＷ）のブート用プログラムが格納されたブートＲＯＭ４３がＲＯＭコントローラ４４を介して接続されている。
【００３０】
また、回路制御用バスＢ２には、パワーオン／オフリセット信号ＳＰを受けて、リセット信号ＣＫおよびクロック信号ＲＳを各部に供給するクロックコントローラ４２が接続されている。
また、回路制御用バスＢ２には、回路制御用バスＢ１が接続されている。そして、回路制御用バスＢ１には、インタフェースＩＦ３を介して温度センサ３４からのデータを受けるＩ２Ｃ回路４５、インタフェースＩＦ４を介して発光ダイオード３５にステータス表示用信号を供給するパラレルＩＯ回路４６、ＲＳ２３２ＣインタフェースＩＦ２を介してデバッグ用機器３６と通信するシリアルＩＯ回路４７が接続されている。
【００３１】
また、データアクセス用バスＢ３と回路制御用バスＢ２の両方には、ＡＴＡインタフェースＩＦ１を制御するＡＴＡインタフェースコントローラ４８、ＮＡＮＤメモリ３２の読み書きデータの誤り訂正を行うＥＣＣ回路４９、ＮＡＮＤメモリ３２の読み書き消去の制御を行うＮＡＮＤコントローラ５１、ＤＲＡＭ５４の読み書き消去の制御を行うＤＲＡＭコントローラ５０が接続されている。ＤＲＡＭコントローラ５０には、データ転送用または作業領域用のＤＲＡＭ５４が接続されている。
【００３２】
ここで、ＡＴＡインタフェースコントローラ４８がＡＴＡインタフェースＩＦ１を介してホスト３３とのデータ送受信に使用される。
また、データアクセス用バスＢ３には、データ作業領域として使用されるＳＲＡＭ５３がＳＲＡＭコントローラ５２を介して接続されている。
【００３３】
また、ＮＡＮＤコントローラ５１には、ＮＡＮＤメモリ３２に対してデータを送受するためのＮＡＮＤインタフェース６３、ＮＡＮＤメモリ３２とＤＲＡＭ５４との間のＤＭＡ転送制御用のＤＭＡコントローラ６１が設けられている。また、ＮＡＮＤコントローラ５１には、データ復元回路６４が設けられている。データ復元回路６４には、ＮＡＮＤメモリ３２の読み書きデータの誤り訂正を行うＥＣＣ回路６２が設けられている。データ復元回路６４は、図６のデータ復元回路１と同様に構成することができる。この時、図６のエラー訂正部１３としてＥＣＣ回路６２を用いることができる。また、図６のデータメモリ１２、１６としてＤＲＡＭ５４を用いるようにしてもよい。また、図６のデータ管理情報１８は、ＮＡＮＤメモリ３２に記憶することができる。
【００３４】
図９は、図６のデータ管理情報の一例を示す図である。
図９において、データ管理情報１８は、ＮＡＮＤメモリ３２に対するデータのリード時刻およびライト時刻をページ単位で持つことができる。そして、ＮＡＮＤメモリ３２から今回読み出されたページのリード時刻およびライト時刻から、ＮＡＮＤメモリ３２への記録から読み出しまでの経過時間を判断することができる。そして、ＮＡＮＤメモリ３２への記録から読み出しまでの経過時間が所定値を超える場合、データリテンションに起因するエラーを想定することができる。また、ＮＡＮＤメモリ３２から今回読み出されたページのリード時刻と、そのページに隣接するページのリード時刻またはライト時刻から、リードディスターブ、ライトディスターブまたはセル間カップリング効果に起因するエラーを想定することができる。
【００３５】
図８に戻り、パワーオン／オフリセット信号ＳＰがクロックコントローラ４２に供給されると、クロックコントローラ４２は、リセット信号ＣＫおよびクロック信号ＲＳを各部に供給する。そして、ＲＯＭコントローラ４４はブート用プログラムをブートＲＯＭ４３から読み出し、プロセッサ４１に転送する。そして、プロセッサ４１は、各管理プログラムをＮＡＮＤメモリ３２からＳＲＡＭ５３にロードする。そして、ＮＡＮＤコントローラ５１は、ＳＲＡＭ５３にロードされた管理プログラムに従って、ＮＡＮＤメモリ３２にアクセスし、ＮＡＮＤメモリ３２の読み書き消去の制御を行うことができる。ここで、ＥＣＣ回路６２において、ＮＡＮＤメモリ３２から読み出されたデータのエラー訂正が行われる。この時、エラー訂正できないデータが複数ある場合は、ＮＡＮＤメモリ３２からデータ管理情報１８が読み出され、エラー要因推定部１９に与えられる。そして、ＮＡＮＤメモリ３２から読み出されたデータのうち、ＥＣＣ回路６２にてエラー訂正できなかった複数データがデータ復元回路６４で復元される。
【００３６】
なお、図８では、ＮＡＮＤコントローラ５１にデータ復元回路６４を設ける構成を示したが、データ復元回路６４の処理をプロセッサ４１で実現するようにしてもよい。
なお、上述した実施形態では、データ復元回路をソリッドステートドライブ３０に適用した構成について説明したが、ＳＤカードまたはＵＳＢメモリなどにデータ復元回路を適用するようにしてもよい。データ復元回路は、ＮＡＮＤフラッシュメモリが搭載されるすべての製品に適用することができる。
【００３７】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００３８】
１  データ復元回路、２  ＮＡＮＤメモリ、３  ホスト、４  ＮＡＮＤＩ／Ｆ制御部、５  ホストＩ／Ｆ制御部、  １１、１４、１７  マルチプレクサ、１２、１６  データメモリ、１３  エラー訂正部、１５  ＸＯＲ演算部、１８  データ管理情報、１９  エラー要因推定部、２０  エラービット位置推定部、２１  エラー仮判定部
【図１】
2017055254.tif 000003
【図２】
2017055254.tif 000004
【図３】
2017055254.tif 000005
【図４】
2017055254.tif 000006
【図５】
2017055254.tif 000007
【図６】
2017055254.tif 000008
【図７】
2017055254.tif 000009
【図８】
2017055254.tif 000010
【図９】
2017055254.tif 000011