(57)【特許請求の範囲】
【請求項１】
複数データで構成されるデータブロックを行列状に複数格納可能な一時記憶手段と、
前記データブロック毎にその誤りを検出するための誤り検出符号を生成する誤り検出符号生成手段と、
前記データブロックで構成される第１単位データ毎に、その誤りを訂正するための第１誤り訂正符号を生成する第１誤り訂正符号生成手段と、
列方向に配列される複数の前記データブロックで構成される第２単位データ毎に、その誤りを訂正するための第２誤り訂正符号を生成する第２誤り訂正符号生成手段と、
行方向に配列される複数の前記データブロックで構成される第３単位データ毎に、その誤りを訂正するための第３誤り訂正符号を生成する第３誤り訂正符号生成手段と、
前記データブロック、前記生成された誤り検出符号および前記第１〜第３誤り訂正符号を格納可能な不揮発性半導体メモリと、
を備えたことを特徴とする半導体記憶装置。
【請求項２】
前記データブロック毎に、対応する前記第１誤り訂正符号を用いて第１誤り訂正を行う第１誤り訂正手段と、
前記第１誤り訂正済みのブロックの誤りを、対応する前記誤り検出符号を用いて検出する第１誤り検出手段と、
前記第１誤り検出手段で検出された前記第１誤り訂正済みのブロックの誤りを、対応する前記第２訂正符号を用いて誤り訂正する第２誤り訂正手段と、
前記第２誤り訂正済みのブロックの誤りを、対応する前記誤り検出符号を用いて検出する第２誤り検出手段と、
前記第２誤り検出手段で検出された前記第２誤り訂正済みのブロックの誤りを、対応する前記第３訂正符号を用いて誤り訂正する第３誤り訂正手段と、
を備えたことを特徴とする請求項１に記載の半導体記憶装置。
【請求項３】
誤り訂正能力は、第３誤り訂正＞第２誤り訂正＞第１誤り訂正の順で高いことを特徴とする請求項１または請求項２に記載の半導体記憶装置。
【請求項４】
前記第２誤り訂正手段と前記第３誤り訂正手段とは、それぞれの訂正動作を交互に繰り返すことを特徴とする請求項２に記載の半導体記憶装置。
【請求項５】
前記誤り検出符号生成手段は、前記第３誤り訂正符号の誤りを検出するための誤り検出符号を生成することを特徴とする請求項１〜４のいずれか１つに記載の半導体記憶装置。
【請求項６】
前記第１単位データは、前記データブロックに対応する誤り検出符号を含むことを特徴とする請求項１〜請求項５のいずれか１つに記載の半導体記憶装置。
【請求項７】
前記第２単位データは、当該第２単位データを構成する複数のデータブロックに各々対応する誤り検出符号を含むことを特徴とする請求項１〜請求項６のいずれか１つに記載の半導体記憶装置。
【請求項８】
前記第２誤り符号生成手段は、列方向に配列される複数の前記第３誤り検出符号毎に、その誤りを訂正するための第２誤り訂正符号を生成することを特徴とする請求項１〜請求項７のいずれか１つに記載の半導体記憶装置。
【請求項９】
前記第１誤り検出手段は、誤りが検出されたデータブロックを特定する第１誤り情報を生成し、
前記第２誤り訂正手段は、前記第１誤り情報に基づいて、第２誤り訂正を行い、
前記第２誤り検出手段は、誤りが検出されたデータブロックを特定する第２誤り情報を生成し、
前記第３誤り訂正手段は、前記第２誤り情報に基づいて、第３誤り訂正を行うことを特徴とする請求項２に記載の半導体記憶装置。
【請求項１０】
前記不揮発性半導体メモリは、ＮＡＮＤ型フラッシュメモリであることを特徴とする請求項１〜請求項９のいずれか１つに記載の半導体記憶装置。
【請求項１１】
複数データで構成されるデータブロックの複数を行列状に一時記憶手段に格納する工程と、
前記データブロック毎にその誤りを検出するための誤り検出符号を生成する誤り検出符号生成工程と、
前記データブロックで構成される第１単位データ毎に、その誤りを訂正するための第１誤り訂正符号を生成する第１誤り訂正符号生成工程と、
列方向に配列される複数の前記データブロックで構成される第２単位データ毎に、その誤りを訂正するための第２誤り訂正符号を生成する第２誤り訂正符号生成工程と、
行方向に配列される複数の前記データブロックで構成される第３単位データ毎に、その誤りを訂正するための第３誤り訂正符号を生成する第３誤り訂正符号生成工程と、
前データブロック、前記生成された誤り検出符号および前記第１〜第３誤り訂正符号を不揮発性半導体メモリに格納する工程と、
を含むことを特徴とする半導体記憶装置の制御方法。
【請求項１２】
前記データブロック毎に、対応する前記第１誤り訂正符号を用いて第１誤り訂正を行う第１誤り訂正工程と、
前記第１誤り訂正済みのブロックの誤りを、対応する前記誤り検出符号を用いて検出する第１誤り検出工程と、
前記第１誤り検出工程で検出された前記第１誤り訂正済みのブロックの誤りを、対応する前記第２訂正符号を用いて誤り訂正する第２誤り訂正工程と、
前記第２誤り訂正済みのブロックの誤りを、対応する前記誤り検出符号を用いて検出する第２誤り検出工程と、
前記第２誤り検出手段で検出された前記第２誤り訂正済みのブロックの誤りを、対応する前記第３訂正符号を用いて誤り訂正する第３誤り訂正工程と、
を備えたことを特徴とする請求項１１に記載の半導体記憶装置の制御方法。
【請求項１３】
ホスト装置と、当該ホスト装置の指示に応じて不揮発性メモリに対するデータのリード／ライトを行う半導体記憶装置とで構成される誤り訂正システムにおいて、
前記半導体記憶装置は、
前記ホスト装置から転送されてくるデータを、複数データで構成されるデータブロックに分割して、行列状に格納する一時記憶手段と、
前記データブロック毎にその誤りを検出するための誤り検出符号を生成する誤り検出符号生成手段と、
前記データブロックで構成される第１単位データ毎に、その誤りを訂正するための第１誤り訂正符号を生成する第１誤り訂正符号生成手段と、
列方向に配列される複数の前記データブロックで構成される第２単位データ毎に、その誤りを訂正するための第２誤り訂正符号を生成する第２誤り訂正符号生成手段と、
行方向に配列される複数の前記データブロックで構成される第３単位データ毎に、その誤りを訂正するための第３誤り訂正符号を生成する第３誤り訂正符号生成手段と、
前データブロック、前記生成された誤り検出符号および前記第１〜第３誤り訂正符号を格納する不揮発性半導体メモリと、
前記データブロック毎に、対応する前記第１誤り訂正符号を用いて第１誤り訂正を行う第１誤り訂正手段と、
前記第１誤り訂正済みのブロックの誤りを、対応する前記誤り検出符号を用いて検出する第１誤り検出手段と、
前記第１誤り検出手段で検出された前記第１誤り訂正済みのブロックの誤りを、対応する前記第２訂正符号を用いて誤り訂正する第２誤り訂正手段と、
前記第２誤り訂正済みのブロックの誤りを、対応する前記誤り検出符号を用いて検出する第２誤り検出手段と、
前記第２誤り訂正済みのデータおよび前記第２誤り検出手段の検出結果をホスト装置に送信する送信手段と、
を備え、
前記ホスト装置は、
前記半導体記憶装置から転送されてくる、前記第２誤り検出手段で検出された前記第２誤り訂正済みのブロックの誤りを、対応する前記第３訂正符号を用いて誤り訂正する第３誤り訂正手段を備えたこと特徴とする誤り訂正システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体記憶装置、その制御方法、および誤り訂正システムに関し、詳細には、不揮発に情報を記憶する半導体メモリの誤りを訂正する誤り訂正回路を備えた半導体記憶装置、その制御方法、および誤り訂正システムに関する。
【背景技術】
【０００２】
近年、保持された電荷量に応じて情報を記憶するフラッシュメモリなどの半導体素子が広く知られている。また、電荷量の閾値を複数設定することにより２ビット以上の情報を記憶する多値メモリ技術も開発されている。
【０００３】
このような半導体メモリ素子では、時間経過の増大とともに電荷が放電されていくため、閾値を超えて電荷が放電されると情報の読み出し時に誤りが発生する。特に、多値型のメモリ素子では一般に閾値の間隔が狭いため、誤りが発生する可能性が高くなる。
【０００４】
上記のような半導体メモリ素子を用いた記憶装置では、誤った情報を正しく復元するための誤り訂正機構が設けられていることがある（例えば、特許文献１参照）。
【０００５】
一般に、複数のビットからなるデータに、情報の記録から時間が経過したこと等を理由
として誤りが多く含まれている場合でも誤りを訂正するには、高い誤り訂正能力を有する
訂正機構が必要である。高い誤り訂正能力を有する訂正機構は、回路規模が大きく、消費
電力が大きく、処理に時間を要する。通常、情報の記憶から長時間が経過した後でも正し
い情報を復元できることを保証しておくために、高い誤り訂正能力を有する訂正機構が設
けられている。そして、情報の記憶からの時間の経過の長短によらずに、一律に、高性能
の誤り訂正機構が適用される。
【０００６】
このため、記憶から短い時間しか経過していない情報を読み出す際にも、このような高
性能の誤り訂正機構が用いられる。すると、それほど多くの誤りが含まれていない情報の
読み出しであるにも係らず、無駄に、高性能の誤り訂正機構が用いられる。このことは、
記憶装置の消費電力が無駄に消費されることにつながる。
【０００７】
さらに、一般に、誤り訂正能力を高めるには、誤り訂正の対象となる情報を大きくする
ことが求められる。例えば、５１２バイトのデータに対して誤り訂正符号が生成される代
わりに、複数個の５１２バイトのデータが連結された例えば４ｋバイトのデータを１つの
単位として用いて誤り訂正符号が生成される。こうすることにより、誤り訂正能力を高め
ることができる。しかしながら、この手法は、例えば、５１２バイトのデータを読み出したいにも係らず、４ｋバイトのデータを読み出さなければならないことにつながる。この
ことによっても、記憶装置は、無駄な電力を消費することを強いられる。
【０００８】
【特許文献１】特開２００７−８７４６４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
本発明は、誤り訂正能力を損なうことなく消費電力及び回路規模を低減することが可能
な半導体記憶装置、その制御方法、および誤り訂正システムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するために、本発明は、複数データで構成されるデータブロックを行列状に複数格納可能な一時記憶手段と、前記データブロック毎にその誤りを検出するための誤り検出符号を生成する誤り検出符号生成手段と、前記データブロックで構成される第１単位データ毎に、その誤りを訂正するための第１誤り訂正符号を生成する第１誤り訂正符号生成手段と、列方向に配列される複数の前記データブロックで構成される第２単位データ毎に、その誤りを訂正するための第２誤り訂正符号を生成する第２誤り訂正符号生成手段と、行方向に配列される複数の前記データブロックで構成される第３単位データ毎に、その誤りを訂正するための第３誤り訂正符号を生成する第３誤り訂正符号生成手段と、前記データブロック、前記生成された誤り検出符号および前記第１〜第３誤り訂正符号を格納可能な不揮発性半導体メモリと、を備えたことを特徴とする。
【００１１】
また、本発明は、複数データで構成されるデータブロックの複数を行列状に一時記憶手段に格納する工程と、前記データブロック毎にその誤りを検出するための誤り検出符号を生成する誤り検出符号生成工程と、前記データブロックで構成される第１単位データ毎に、その誤りを訂正するための第１誤り訂正符号を生成する第１誤り訂正符号生成工程と、列方向に配列される複数の前記データブロックで構成される第２単位データ毎に、その誤りを訂正するための第２誤り訂正符号を生成する第２誤り訂正符号生成工程と、行方向に配列される複数の前記データブロックで構成される第３単位データ毎に、その誤りを訂正するための第３誤り訂正符号を生成する第３誤り訂正符号生成工程と、前記データブロック、前記生成された誤り検出符号および前記第１〜第３誤り訂正符号を不揮発性半導体メモリに格納する工程と、を含むことを特徴とする。
【００１２】
また、本発明は、ホスト装置と、当該ホスト装置の指示に応じて不揮発性メモリに対するデータのリード／ライトを行う半導体記憶装置とで構成される誤り訂正システムにおいて、前記半導体記憶装置は、前記ホスト装置から転送されてくるデータを、複数データで構成されるデータブロックに分割して、行列状に格納する一時記憶手段と、前記データブロック毎にその誤りを検出するための誤り検出符号を生成する誤り検出符号生成手段と、前記データブロックで構成される第１単位データ毎に、その誤りを訂正するための第１誤り訂正符号を生成する第１誤り訂正符号生成手段と、列方向に配列される複数の前記データブロックで構成される第２単位データ毎に、その誤りを訂正するための第２誤り訂正符号を生成する第２誤り訂正符号生成手段と、行方向に配列される複数の前記データブロックで構成される第３単位データ毎に、その誤りを訂正するための第３誤り訂正符号を生成する第３誤り訂正符号生成手段と、前データブロック、前記生成された誤り検出符号および前記第１〜第３誤り訂正符号を格納する不揮発性半導体メモリと、前記データブロック毎に、対応する前記第１誤り訂正符号を用いて第１誤り訂正を行う第１誤り訂正手段と、
前記第１誤り訂正済みのブロックの誤りを、対応する前記誤り検出符号を用いて検出する第１誤り検出手段と、前記第１誤り検出手段で検出された前記第１誤り訂正済みのブロックの誤りを、対応する前記第２訂正符号を用いて誤り訂正する第２誤り訂正手段と、前記第２誤り訂正済みのブロックの誤りを、対応する前記誤り検出符号を用いて検出する第２誤り検出手段と、前記第２誤り訂正済みのデータおよび前記第２誤り検出手段の検出結果をホスト装置に送信する送信手段と、を備え、前記ホスト装置は、前記半導体記憶装置から転送されてくる、前記第２誤り検出手段で検出された前記第２誤り訂正済みのブロックの誤りを、対応する前記第３訂正符号を用いて誤り訂正する第３誤り訂正手段を備えたこと特徴とする。
【発明の効果】
【００１３】
本発明によれば、誤り訂正能力を損なうことなく消費電力及び回路規模を低減すること
が可能な半導体記憶装置、その制御方法、および誤り訂正システムを提供することが可能になるという効果を奏する。
【発明を実施するための最良の形態】
【００１４】
以下に、この発明につき図面を参照しつつ詳細に説明する。なお、この実施の形態によりこの発明が限定されるものではない。また、下記実施の形態における構成要素には、当業者が容易に想定できるものまたは実質的に同一のものが含まれる。
【００１５】
（実施の形態１）
本発明では、フラッシュメモリ等の不良ビットのあるメモリに誤り訂正符号・復号を適用する際に、誤り訂正能力の異なる３種類の訂正符号化を行なうことにより、消費電力および回路規模を削減することができる。
【００１６】
［ＳＳＤの構成］
図１は、ＳＳＤ（Solid State Drive）１００の構成例を示すブロック図である。ＳＳＤ１００は、ＡＴＡインタフェース（ＡＴＡ  Ｉ／Ｆ）２などのメモリ接続インタフェースを介してパソコンあるいはＣＰＵコアなどのホスト装置（ホスト）１と接続され、ホスト装置１の外部メモリとして機能する。また、ＳＳＤ１００は、ＲＳ２３２Ｃインタフェース（ＲＳ２３２Ｃ  Ｉ／Ｆ）などの通信インタフェース３を介して、デバッグ用機器２００との間でデータを送受信することができる。ＳＳＤ１００は、不揮発性メモリとしてのＮＡＮＤフラッシュメモリ（以下、ＮＡＮＤメモリと略す）１０と、コントローラとしてのドライブ制御回路４と、揮発性メモリとしてのＤＲＡＭ２０と、電源回路５と、状態表示用のＬＥＤ６などを備えている。
【００１７】
電源回路５は、ホスト装置１側の電源回路から供給される外部直流電源から複数の異なる内部直流電源電圧を生成し、これら内部直流電源電圧をＳＳＤ１００内の各回路に供給する。また、電源回路５は、外部電源の立ち上がりまたは立ち下がりを検知し、パワーオンリセット信号またはパワーオフリセット信号を生成して、ドライブ制御回路４に供給する。
【００１８】
ＮＡＮＤメモリ１０は、この場合、４並列動作を行う４つの並列動作要素１０ａ〜１０ｄを有し、１つの並列動作要素は、２つのＮＡＮＤメモリパッケージを有する。各ＮＡＮＤメモリパッケージは、積層された複数のＮＡＮＤメモリチップ（例えば、１チップ＝２ＧＢ）によって構成されている。図１の場合は、各ＮＡＮＤメモリパッケージは、積層された４枚のＮＡＮＤメモリチップによって構成されており、ＮＡＮＤメモリ１０は６４ＧＢの容量を有する。各ＮＡＮＤメモリパッケージが、積層された８枚のＮＡＮＤメモリチップによって構成されている場合は、ＮＡＮＤメモリ１０は１２８ＧＢの容量を有することになる。
【００１９】
ＤＲＡＭ２０は、ホスト装置１とＮＡＮＤメモリ１０間でのデータ転送用キャッシュおよび作業領域用メモリとして機能する。
【００２０】
ドライブ制御回路４は、ホスト装置１とＮＡＮＤメモリ１０との間でＤＲＡＭ２０を介してデータ転送制御を行うとともに、ＳＳＤ１００内の各構成要素を制御する。また、ドライブ制御回路４は、状態表示用ＬＥＤ６にステータス表示用信号を供給するとともに、電源回路５からのパワーオン／オフリセット信号を受けて、リセット信号およびクロック信号を自回路内およびＳＳＤ１００内の各部に供給する機能も有している。
【００２１】
各ＮＡＮＤメモリチップは、データ消去の単位であるブロックを複数配列して構成されている。図２は、ＮＡＮＤメモリチップに含まれる１個のブロックの構成例を示す回路図である。各ブロックは、Ｘ方向に沿って順に配列された（ｍ＋１）個のＮＡＮＤストリングを備えている（ｍは、０以上の整数）。（ｍ＋１）個のＮＡＮＤストリングにそれぞれ含まれる選択トランジスタＳＴ１は、ドレインがビット線ＢＬ０〜ＢＬｍに接続され、ゲートが選択ゲート線ＳＧＤに共通接続されている。また、選択トランジスタＳＴ２は、ソースがソース線ＳＬに共通接続され、ゲートが選択ゲート線ＳＧＳに共通接続されている。
【００２２】
各メモリセルトランジスタＭＴは、半導体基板上に形成された積層ゲート構造を備えたＭＯＳＦＥＴ（Metal oxide semiconductor field effect transistor）から構成される。積層ゲート構造は、半導体基板上にゲート絶縁膜を介在して形成された電荷蓄積層（浮遊ゲート電極）、及び電荷蓄積層上にゲート間絶縁膜を介在して形成された制御ゲート電極を含んでいる。メモリセルトランジスタＭＴは、浮遊ゲート電極に蓄えられる電子の数に応じて閾値電圧が変化し、この閾値電圧の違いに応じてデータを記憶する。メモリセルトランジスタＭＴは、１ビットを記憶するように構成されていてもよいし、多値（２ビット以上のデータ）を記憶するように構成されていてもよい。
【００２３】
各ＮＡＮＤストリングにおいて、（ｎ＋１）個のメモリセルトランジスタＭＴは、選択トランジスタＳＴ１のソースと選択トランジスタＳＴ２のドレインとの間に、それぞれの電流経路が直列接続されるように配置されている。すなわち、複数のメモリセルトランジスタＭＴは、隣接するもの同士で拡散領域（ソース領域若しくはドレイン領域）を共有するような形でＹ方向に直列接続される。
【００２４】
そして、最もドレイン側に位置するメモリセルトランジスタＭＴから順に、制御ゲート電極がワード線ＷＬ０〜ＷＬｎにそれぞれ接続されている。従って、ワード線ＷＬ０に接続されたメモリセルトランジスタＭＴのドレインは選択トランジスタＳＴ１のソースに接続され、ワード線ＷＬｎに接続されたメモリセルトランジスタＭＴのソースは選択トランジスタＳＴ２のドレインに接続されている。
【００２５】
ワード線ＷＬ０〜ＷＬｎは、ブロック内のＮＡＮＤストリング間で、メモリセルトランジスタＭＴの制御ゲート電極を共通に接続している。つまり、ブロック内において同一行にあるメモリセルトランジスタＭＴの制御ゲート電極は、同一のワード線ＷＬに接続される。この同一のワード線ＷＬに接続される（ｍ＋１）個のメモリセルトランジスタＭＴは１ページとして取り扱われ、このページごとにデータの書き込み及びデータの読み出しが行われる。
【００２６】
また、ビット線ＢＬ０〜ＢＬｍは、ブロック間で、選択トランジスタＳＴ１のドレインを共通に接続している。つまり、複数のブロック内において同一列にあるＮＡＮＤストリングは、同一のビット線ＢＬに接続される。
【００２７】
図１に示したように、ＮＡＮＤメモリ１０においては、４つの並列動作要素（メモリパッケージ）１０ａ〜１０ｄが各８ビットの４チャネル（４ｃｈ）を介してドライブ制御回路４に並列接続されている。４つの並列動作要素１０ａ〜１０ｄを単独動作させるか、並列動作させるか、ＮＡＮＤメモリ１０の倍速モードを使用するか否か、という組み合わせにより、下記３種類のアクセスモードが提供される。
（１）８ビットノーマルモード
１ｃｈだけ動作させ、８ビット単位で読み書きをするモードである。転送サイズの１単位はページサイズ（４ｋＢ）である。
（２）３２ビットノーマルモード
４ｃｈ並列で動作させ、３２ビット単位で読み書きをするモードである。転送サイズの１単位はページサイズ×４（１６ｋＢ）である。
（３）３２ビット倍速モード
４ｃｈ並列で動作させ、更に、ＮＡＮＤメモリ１０の倍速モードを利用して読み書きをするモードである。転送サイズの１単位はページサイズ×４×２（３２ｋＢ）である。
【００２８】
４ｃｈ並列動作する３２ビットノーマルモードまたは３２ビット倍速モードでは、並列動作する４または８ブロックが、ＮＡＮＤメモリ１０としての消去単位となり、並列動作する４または８ページが、ＮＡＮＤメモリ１０としての書き込み単位及び読み出し単位となる。
【００２９】
ドライブ制御回路４は、コントローラ４１と、ＥＣＣ（Ｅｒｒｏｒ  ｃｏｒｒｅｃｔｉｎｇ  ｃｏｄｅ）回路４２と、ＮＡＮＤ  Ｉ／Ｆ４３を備えている。
【００３０】
コントローラ４１は、ＡＴＡインタフェース２を介してホスト装置１との間でデータを送受信すると共に、ＤＲＡＭ２０のアクセス制御を行う。
【００３１】
ＮＡＮＤ  Ｉ／Ｆ４３は、ＮＡＮＤメモリ１０の各ＮＡＮＤパッケージ１０ａ〜１０ｄとのインタフェース処理を行う。
【００３２】
ＥＣＣ回路４２は、ＮＡＮＤメモリ１０に書き込むデータに対して、誤り検出符号および誤り訂正符号を生成する。また、ＥＣＣ回路４２は、ＮＡＮＤメモリ１０から読み出されたデータに対して、誤り検出および誤り訂正を行う。
【００３３】
上記構成のＳＳＤ１００の動作の概略を説明する。ホスト装置１からＳＳＤ１００に書き込みを要求するデータ（書き込みデータ）が供給されると、コントローラ４１は、書き込みデータをＤＲＡＭ２０に一時的に格納する。ＤＲＡＭ２０に格納された書き込みデータは、コントローラ４１により所定単位毎にＥＣＣ回路４２に供給される。ＥＣＣ回路４２は、書き込みデータに対して、誤り訂正符号及び誤り検出符号を生成する。ＮＡＮＤ  Ｉ／Ｆ４３は、誤り訂正符号及び誤り検出符号を付加した書き込みデータをＮＡＮＤメモリ１０に書き込む。
【００３４】
また、ＳＳＤ１００は、ホスト装置１からデータの読み出し要求が入力されると、ＮＡＮＤ  Ｉ／Ｆ４３は、読み出しを要求されているデータ（読み出しデータ）とこれに付加された誤り訂正符号及び誤り検出符号を読み出して、ＥＣＣ回路４２に供給する。ＥＣＣ回路４２は、読み出しデータの誤りを検出および誤り訂正を行う。誤り訂正後のデータはコントローラ４１によりＤＲＡＭ２０に格納された後、ホスト装置１に転送される。
【００３５】
［ＥＣＣ回路］
以下に、ＥＣＣ回路４２の基本的動作手順について説明する。本発明の実施例に係るＥＣＣ回路４２は、ＮＡＮＤメモリ１０に書き込むデータに対して、誤り訂正能力の異なる３種類の訂正符号化を行なうことにより、消費電力および回路規模を削減している。第１誤り訂正符号はデータブロックＤ単位で誤り訂正を行うためのものである。第２誤り訂正符号は、複数のデータブロックＤで構成される列単位で誤り訂正を行うためのものである。第３誤り訂正符号は、複数のデータブロックＤで構成される行単位で誤り訂正を行うためのものである。誤り訂正能力は、第１誤り訂正符号＜第２誤り訂正符号＜第３誤り訂正符号の順となっている。
【００３６】
図３は、ＥＣＣ回路４２の誤り訂正原理の概略を説明するための模式図である。同図は、ＮＡＮＤメモリ１０から読み出されたデータを示しており、複数データで構成されるデータブロックＤが行列（マトリクス）状に配列されている。斜線部分は、誤りデータを含んでいる誤りデータブロックを示している。まず、最初に、データブロックＤ単位で誤り訂正（第１誤り訂正）を行う（Ａ）。つぎに、誤りが訂正できなかったデータブロックＤに対して、列単位での誤り訂正（１回目の第２誤り訂正）を行う（Ｂ）。さらに、誤り訂正ができなかったデータブロックＤに対して、行単位での誤り訂正（１回目の第３誤り訂正）を行う（Ｃ）。再び、誤りが訂正できなかったデータブロックＤに対して、列単位での誤り訂正（２回目の第２誤り訂正）を行う（Ｄ）。さらに、誤りが訂正できなかったデータブロックＤに対して、行単位での誤り訂正（２回目の第３誤り訂正）を行う（Ｅ）。これにより、誤りのないデータを復号する（Ｆ）。
【００３７】
このように、本実施の形態では、まず、データブロック単位での誤り訂正（第１誤り訂正）を行う。ここで、誤り訂正ができなかったデータブロックがある場合には、誤りが無くなるまで、列単位での誤り訂正（第２誤り訂正）と行単位での誤り訂正（第３誤り訂正）を交互に繰り返し実行し、誤りのないデータを復号する。
【００３８】
［ＥＣＣ回路の符号化系の構成］
図４は、ＥＣＣ回路４２の符号化系に関する主要部を示すブロック図である。図５は、ホスト装置１０から転送されるデータをＤＲＡＭ２０に格納する場合のフォーマットの一例を示す図である。図６は、ＮＡＮＤメモリ１０に転送されるデータのフォーマットの一例を示す図である。
【００３９】
ＥＣＣ回路４２は、図４に示すように、誤り検出符号生成部５０−１〜８（誤り検出符号生成手段）と、第１ＥＣＣ生成部５１−１〜８（第１誤り訂正符号生成手段）と、第２ＥＣＣ生成部５２（第２誤り訂正符号生成手段）と、第３ＥＣＣ生成部５３−１〜８（第３誤り訂正符号生成手段）とを備えている。
【００４０】
誤り検出符号生成部５０−１〜８（誤り検出符号生成手段）は、書き込みデータのデータブロックＤ毎にその誤りを検出するための誤り検出符号を生成する。データブロックＤのサイズは、例えば５１２バイトである。
【００４１】
誤り検出符号としては、ＣＲＣ（Ｃｙｃｌｉｃ  ｒｅｄｕｎｄａｎｃｙ  ｃｈｅｃｋｓｕｍ）３２、ＣＲＣ１６等を用いることができる。本実施の形態では、ＣＲＣ３２を使用し、ＣＲＣ３２（以下、「ＣＲＣ」と表記する）のサイズを４バイトとしている。誤り検出符号生成部５０−１〜８は一般に知られたものを用いることができ、詳細な説明はここでは省略する。
【００４２】
第１ＥＣＣ生成部５１−１〜８（第１の誤り訂正符号生成手段）は、データブロックＤとその誤り検出符号で構成される第１単位データ毎に、その誤りを訂正するための第１誤り訂正符号を生成する。
【００４３】
第１の誤り訂正符号としては、１ビットあるいは複数ビットの誤りを訂正できる誤り訂正符号を用いることができ、例えば、ハミング符号（Ｈａｍｍｉｎｇ  ｃｏｄｅ）やＢＣＨ符号（Ｂｏｓｅ−ｃｈａｕｄｈｕｒｉ  ｈｏｃｑｕｅｎｇｈｅｍ  ｃｏｄｅ）等を用いることができる。本実施の形態では、第１誤り訂正符号としてハミング符号を使用し、ハミング符号のサイズを４バイトとしている。第１ＥＣＣ生成部５１−１〜８は一般に知られたものを用いることができ、詳細な説明はここでは省略する。
【００４４】
第２ＥＣＣ生成部５２（第２誤り訂正符号生成手段）は、列方向に配列される複数の第１単位データで構成される第２単位データＵＤａ毎に、第２誤り訂正符号を生成する。第２誤り訂正符号を生成する単位となる書き込みデータの数は、達成することが望まれる誤り訂正能力及び採用される誤り訂正符号に応じて決定される。
【００４５】
第２誤り訂正符号としては、第１誤り訂正符号に比して誤り訂正能力が高いものが用いられ、複数ビットの誤りを訂正できる誤り訂正符号が用いられる。具体的には、ＢＣＨ符号やＬＤＰＣ符号（Ｌｏｗ  ｄｅｎｓｉｔｙ  ｐａｒｉｔｙ  ｃｈｅｃｋ  ｃｏｄｅ）等を用いることができる。本実施の形態では、列方向の８個の第１単位データで構成される第２単位データＵＤａ毎にＢＣＨ符号を生成し、ＢＣＨ符号のサイズを２４バイトとしている。第２ＥＣＣ生成部５２は一般に知られたものを用いることができ、詳細な説明はここでは省略する。
【００４６】
第３ＥＣＣ生成部５３−１〜８（第３の誤り訂正符号生成手段）は、行方向に配列された複数のデータブロックＤで構成される第３単位データＵＤｂ毎に、その誤りを訂正するための第３誤訂正符号を生成する。第３誤り訂正符号を生成する単位となるデータブロックＤの数は、達成することが望まれる誤り訂正能力及び採用される誤り訂正符号に応じて決定される。
【００４７】
第３誤り訂正符号としては、例えば、複数ビット単位で誤り訂正を行う第２誤り訂正符号を用いた誤り訂正よりも高い能力の誤り訂正を可能とするものが用いられる。具体的には、第３の誤り訂正符号としては、ＲＳ符号（Ｒｅｅｄ−ｓｏｌｏｍｏｎ  ｃｏｄｅ）等を用いることができる。本実施の形態では、１０２４個の第１単位データＤからなる第３単位データＵＤｂごとに、ＲＳ符号を生成し、ＲＳ符号のサイズをデータブロックＤと同じ５１２バイトとしている。そして、第３ＥＣＣ生成部５３−１〜５３−８は、１個の第３単位データＵＤｂに対して、例えば４個のＲＳ符号を生成する。従って、１個の第３単位データＵＤｂを構成する１０２４個のデータブロックＤのうち４個の書き込みデータの誤りを訂正することができる。第３ＥＣＣ生成部５３は一般に知られたものを用いることができ、詳細な説明はここでは省略する。
【００４８】
コントローラ４１は、書き込みデータＤ（１，１）〜Ｄ（８，１０２４）をホスト装置１から受信すると、図５に示すように、ＤＲＡＭ２０に、第１ＥＣＣ生成部５１の処理単位である８個のデータブロックＤ（１，ｐ）〜Ｄ（８，ｐ）を列方向に順次格納し、第３ＥＣＣ生成部５３の処理単位である１０２４個の第１単位データＤ（ｑ，１）〜Ｄ（ｑ，１０２４）を格納するとともに、列単位で順次、ＥＣＣ回路４２に転送する。ｐは１〜１０２４のうちの任意の数、ｑは１〜８のうちの任意の数である。
【００４９】
誤り検出符号生成部５０は、列方向に配列された８個のデータブロックＤ（１，ｐ）〜Ｄ（８，ｐ）に対応して、８個の誤り検出符号生成部５０−１〜５０−８を備えている。８個の誤り検出符号生成部５０−１〜５０−８は、８個のデータブロックＤ（１，ｐ）〜Ｄ（８，ｐ）に対して、８個のＣＲＣ３２を生成する。この８個のＣＲＣ３２はそれぞれ、これらに対応する８個のデータブロックＤ（１，ｐ）〜Ｄ（８，ｐ）の誤りを検出するために用いられる。この８個のＣＲＣ３２は、第１ＥＣＣ生成部５１−１〜５１−８および第２ＥＣＣ生成部５２に出力される。なお、誤り検出符号生成部５０−１〜５０−８はそれぞれ、列方向に配列された８個のＲＳ（１，ｒ）〜ＲＳ（８，ｒ）に対しても、ＣＲＣ３２を生成する。ｒは、１〜４のうちの任意の数である。
【００５０】
第１ＥＣＣ生成部５１は、列方向に配列される８個のデータブロックＤ（１，ｐ）〜Ｄ（８，ｐ）に対応して、８個の第１ＥＣＣ生成部５１−１〜５１−８を備えている。８個の第１ＥＣＣ生成部５１−１〜５１−８は、それぞれ、第１単位データ毎、すなわち、８個のデータブロックＤ（１，ｐ）〜Ｄ（８，ｐ）および８個のＣＲＣ（１，ｐ）〜ＣＲＣ（８，ｐ）から、それぞれハミング符号を生成する。この８個のハミング符号はそれぞれ、これらに対応する８個の単位データＤ（１，ｐ）〜Ｄ（８，ｐ）第１誤り訂正に用いられる。この８個のハミング符号は、第２ＥＣＣ生成部５２に出力される。なお、第１ＥＣＣ生成部５１−１〜５１−８はそれぞれ、列方向に配列された８個のＲＳ（１，ｒ）〜ＲＳ（８，ｒ）および対応するＣＲＣ３２に対してもそれぞれハミング符号を生成する。ｒは、１〜４のうちの任意の数である。
【００５１】
第２ＥＣＣ生成部５２は、列方向に配置された８個の第１単位データ、すなわち、データブロックＤ（１，ｐ）〜Ｄ（８，ｐ）と、これらに対応する８個のＣＲＣ（１，ｐ）〜ＣＲＣ（８，ｐ）とで構成される第２単位データＵＤａ毎に、１個のＢＣＨ符号を生成する。このＢＣＨ符号は第２単位データＵＤａ内（ＥＣＣ１（１，ｐ）〜ＥＣＣ１（８，ｐ）を除く）の誤りを訂正するために用いられる。本実施形態では、第２単位データＵＤａとＢＣＨ符号とからなるデータのサイズ、１ページ（ＮＡＮＤメモリ１０の最小アクセス単位）分のサイズに対応する。
【００５２】
第３ＥＣＣ生成部５３は、行方向に配列された１０２４個のデータブロックＤ（ｑ，１）〜Ｄ（ｑ，１０２４）からなる第３単位データＵＤｂ毎に、１個のＲＳ符号を生成する。第３のＥＣＣ生成部５３は、ＤＲＡＭ２０に格納される書き込みデータの行に対応する８個の第３ＥＣＣ生成部５３−１〜５３−８を備えている。第３ＥＣＣ生成部５３−１は、第３単位データＵＤｂを格納するバッファを備えている。データＤ（１，１）〜Ｄ（１，１０２４）からなる第３単位データＵＤｂ１に対して、４個のＲＳ（１，１）〜ＲＳ（１，４）を生成する。２〜８行にそれぞれ対応する第３ＥＣＣ生成部５３−２〜５３−８についても同様である。
【００５３】
データブロックＤ、ＣＲＣ、ハミング符号、ＢＣＨ符号、及びＲＳ符号は、図６に示したページ毎に、ＮＡＮＤ  ＩＦ４３からＮＡＮＤメモリ１２に転送される。ＮＡＮＤメモリ１０は、これらのデータを、ページ順に格納する。例えば、１つのメモリブロックＢＬＫが１０２８ページで構成されている場合、図６に示したデータは、ＮＡＮＤメモリ１０内の１つのメモリブロックＢＬＫに格納される（８ビットノーマルモードの場合）。なお、３２ビットモード（３２ビットノーマルモード、３２ビット倍速モード）の場合には、各Ｃｈのメモリチップに並列に書き込まれる。
【００５４】
［ＥＣＣ回路の符号化系のデータ書き込み動作］
次に、データ書き込み動作におけるＥＣＣ回路４２の誤り検出符号生成動作及び誤り
訂正符号生成動作について、図４〜図９を参照して説明する。
【００５５】
まず、図５において、コントローラ４１は、ＤＲＡＭ２０に、ＮＡＮＤメモリ１０への書き込み対象となるデータを、８個のデータブロックＤ（１，ｑ）〜Ｄ（８，１）毎に、順次、列方向に書き込んで、データブロックＤ（１，１）〜Ｄ（８，１０２４）を格納すると共に、ＤＲＡＭ２０に格納したデータを列単位で順次、データブロックＤ（１，ｑ）〜Ｄ（８，１）を、誤り検出符号生成部５０−１〜８、第１ＥＣＣ生成部５１−１〜８、第２ＥＣＣ生成部５２、第３ＥＣＣ生成部５３−１〜８に出力する。
【００５６】
続いて、図７に示すように、誤り検出符号生成部５０−１〜５０−８は、転送されてくる８個のデータブロックＤ（１，１）〜Ｄ（８，１）に対して、８個の誤り検出符号ＣＲＣ（１，１）〜ＣＲＣ（８，１）を生成する。そして、第１ＥＣＣ生成部５１−１〜５１−８は、それぞれ、８個の書き込みデータＤ（１，１）〜Ｄ（８，１）および８個のＣＲＣ（１，１）〜ＣＲＣ（８，１）から、それぞれハミング符号ＥＣＣ１（１，１）〜ＥＣＣ１（８，１）を生成する。
【００５７】
続いて、図８に示すように、８個のデータブロックＤ（１，１）〜Ｄ（８，１）および対応する８個の誤り検出符号ＣＲＣ（１，１）〜ＣＲＣ（８，１）で構成される第２単位データＵＤａ１は、第２ＥＣＣ生成部５２に出力される。第２のＥＣＣ生成部５２は、第２単位データＵＤａ１を用いて、この第２単位データＵＤａ１の誤りを訂正するためのＢＣＨ符号ＥＣＣ２を生成する。このＢＣＨ符号ＥＣＣ２が、第２単位データＵＤａ１の後ろに繋げられて、ページ１（Ｐａｇｅ１）が構成される。このページ１は、ＮＡＮＤメモリ１０に格納される。
【００５８】
ページ２〜ページ１０２４についても、上記同様の生成動作により、図６に示すデータ
が生成される。そして、ページ２〜ページ１０２４は、ＮＡＮＤメモリ１０に格納される。
【００５９】
さらに、図９に示すように、第３ＥＣＣ生成部５３−１〜５３−８は、列単位で順次、転送される第１単位データＤ（１，ｑ）〜Ｄ（８，ｑ）をそれぞれバッファに格納し、第３単位データＵＤｂ１、ＵＤｂ２、・・・ＵＤｂ８を用いて、４個のＲＳ（ｐ，１）〜Ｒ
Ｓ（ｐ，４）をそれぞれ生成する。具体的には、第３ＥＣＣ生成部５３−１は、第３単位データＵＤｂ１を用いて、４個のＲＳ（１，１）〜ＲＳ（１，４）を生成する。第３ＥＣＣ生成部５３−２〜５３−８によるＲＳ生成動作についても、ＲＳ生成部５３−１と同様である。本実施形態では、第３ＥＣＣ生成部５３−１〜５３−８は、訂正符号生成動作を並行して行っている。このように、第３ＥＣＣ生成部５３−１〜５３−８を並行して動作させることによって、処理時間を短縮させることができる。
【００６０】
ＲＳ符号を用いた場合、通常は、４個の冗長符号を用いて２個の誤り位置情報と２個の誤り訂正情報を得るため、２個の誤りの訂正が可能である。しかし、本実施形態では、データブロックＤの誤り位置を特性するために、別途ＣＲＣを用いている。従って、本実施形態では、４個の冗長符号を用いて４個の誤りを訂正することが可能となる。すなわち、１０２４個のデータブロックＤ（１，１）〜Ｄ（１，１０２４）のうち４個の誤りを訂正することが可能となる。
【００６１】
続いて、誤り符号生成部５０−１〜５０−８はデータブロックＤの場合と同様に、ＲＳ（１，１）〜ＲＳ（８，４）毎に、ＣＲＣ（１，１０２５）〜（８，１０２８）をそれぞれ生成する。また、第１ＥＣＣ符号生成部５１−１〜５１−８は、ＲＳ（１，１）〜ＲＳ（８，４）および対応するＣＲＣ（１，１０２５）〜（８，１０２８）毎に、ハミング符号（１，１０２５）〜（８，１０２８）を生成する。さらに、第２ＥＣＣ訂正部５２は、
ＲＳ（１，１）〜ＲＳ（８，４）および対応するＣＲＣ（１，１０２５）〜（８，１０２８）に対して、ＢＣＨ符号ＥＣＣ２を生成し、このＢＣＨ符号ＥＣＣ２が、これらの後ろに繋げられて、ページ１０２５が構成される。このページ１０２５は、ＮＡＮＤメモリ１０に転送されて格納される。ページ１０２６〜ページ１０２８についても、上記同様の生成動作により、図６に示すデータが生成される。そして、ページ１０２６〜ページ１０２８は、ＮＡＮＤメモリ１０に転送されて格納される。
［ＥＣＣ回路の復号系回路の構成］
【００６２】
図１０は、ＥＣＣ回路４２の復号系に関する主要部を示すブロック図である。図１１〜図１９は、ＥＣＣ回路４２のデータ読み出しを説明するための図である。ＥＣＣ回路４２は、図１０に示すように、誤り検出部６０と、第１ＥＣＣ訂正部６１−１〜６１−８と、第２ＥＣＣ訂正部６２と、第３ＥＣＣ訂正部６３−１〜６１−８とを備えている。同図において、説明の簡単のため、コントローラ４１およびＮＡＮＤ  Ｉ／Ｆ４３の図示を省略している。
【００６３】
ＳＳＤ１００は、ホスト装置１からデータの読み出し要求が入力されると、ＮＡＮＤ  Ｉ／Ｆ４３により、ＮＡＮＤメモリ１０内の１つのメモリブロックＢＬＫに格納されたブロックデータ（図６に示すデータ）が読み出され（８ビットノーマルモードの場合）、コントローラ４１によりＤＲＡＭ２０に格納される。ＤＲＡＭ２０は、図６に示すブロックデータを格納する。なお、３２ビットモード（３２ビットノーマルモード、３２ビット倍速モード）の場合には、各Ｃｈのメモリチップから並列に読み出される。
【００６４】
第１ＥＣＣ訂正部６１は、列方向に配列された８個のデータブロックＤ（１，ｐ）〜Ｄ（８，ｐ）および対応するＣＲＣ（１，ｐ）〜ＣＲＣ（８，ｐ）に対して、すなわち、行数に対応して、８個の第１ＥＣＣ訂正部６１−１〜６１−８を備えている。
【００６５】
第１ＥＣＣ訂正部６１−１〜６１−８は、列方向に配列された８個のデータブロックＤ（１，ｐ）〜Ｄ（８，ｐ）およびＣＲＣ（１，ｐ）〜ＣＲＣ（８，ｐ）に対して、ハミング符号ＥＣＣ１（１，ｐ）〜ＥＣＣ１（８，ｐ）を用いてそれぞれ第１誤り訂正を行い、ＤＲＡＭ２０の格納されたデータのうち、第１の誤り訂正済データＤＣ１−１〜ＤＣ１−８に対応するデータを更新する。同様に、ＲＳ（１，１）〜ＲＳ（８，４）および対応するＣＲＣ（１，１０２５）〜（８，１０２８）に対しても第１誤り訂正を行う。第１ＥＣＣ訂正部６１−１〜６１−８は一般に知られたものを用いることができ、詳細な説明はここでは省略する。
【００６６】
誤り検出部６０は、列方向に配列された８個のデータブロックＤ（１，ｐ）〜Ｄ（８，ｐ）およびそのＣＲＣ（１，ｐ）〜ＣＲＣ（８，ｐ）に対応して、すなわち、行数に対応して、８個の誤り検出部６０−１〜６０−８を備えている。
【００６７】
誤り検出部６０−１〜６０−８は、それぞれ、８個のデータブロックＤ（１，ｐ）〜Ｄ（８，ｐ）に対して生成された８個のＣＲＣ（１，ｐ）〜ＣＲＣ（８，ｐ）を用いて、第１単位データＤ（１，ｐ）〜Ｄ（８，ｐ）内の誤りを検出する。誤り検出部６０−１〜６０−８は一般に知られたものを用いることができ、詳細な説明はここでは省略する。
【００６８】
第２ＥＣＣ訂正部６２は、ページごとに生成されたＢＣＨ符号ＥＣＣ２を用いて、８個の第１単位データＤ（１，ｐ）〜Ｄ（８，ｐ）と対応する８個のＣＲＣ（１，ｐ）〜ＣＲＣ（８，ｐ）とで構成される第２単位データ内の第２誤り訂正を行い、ＤＲＡＭ２０の格納されたデータのうち、第２の誤り訂正済データＤＣ２に対応するデータを更新する。ページ１０２５〜１０２４についても同様に第２誤り訂正が行われる。
【００６９】
第３ＥＣＣ訂正部６３は、列方向に配列された８個の第１単位データＤ（１，ｐ）〜Ｄ（８，ｐ）に対応して、８個の第３ＥＣＣ訂正部６３−１〜６３−８を備えている。第３ＥＣＣ訂正部６３−１は、４個のＲＳ（１，１）〜ＲＳ（１，４）を用いて、行方向に配列された１０２４個の読み出しデータＤ（１，１）〜Ｄ（１，１０２４）からなる第３単位データＵＤｂ１内の第３誤り訂正を行う。同様に、第３ＥＣＣ訂正部６３−２〜６３−８は、第３単位データＵＤｂ１〜ＵＤｂ８内の第３誤り訂正を行う。第３ＥＣＣ訂正部６３−１〜６３−８は一般に知られたものを用いることができ、詳細な説明はここでは省略する。
【００７０】
本実施形態では、４個のリードソロモン符号ＲＳ（１，１）〜ＲＳ（１，４）が全て誤り訂正に用いられる。従って、第３ＥＣＣ訂正部６３−１は、１０２４個の読み出しデータＤ（１，１）〜Ｄ（１，１０２４）のうち４個の読み出しデータを復元することができる。２〜８行にそれぞれ対応する第３ＥＣＣ訂正部６３−２〜６３−８についても同様である。第３ＥＣＣ訂正部６３−１〜６３−８により訂正された第３誤り訂正済データＤＣ３は、ＤＲＡＭ２０に転送され、ＤＲＡＭ２０に格納されたデータのうち、第３誤り訂正済データＤＣ３に対応するデータが更新される。
【００７１】
第１ＥＣＣ訂正部６１−１〜６１−８、第２ＥＣＣ訂正部６２、および第３ＥＣＣ訂正部６３−１〜６１−８により訂正されたデータブロックＤ（１，１）〜Ｄ（８，１０２４）のデータは、コントローラ４１によりホスト装置に転送される。
【００７２】
［ＥＣＣ回路の復号系のデータ読み出し動作］
次に、データ読み出し動作におけるＥＣＣ回路４２の誤り検出動作及び誤り訂正動作
について、図１１〜図１９を参照して説明する。
【００７３】
誤り訂正動作に先立って、ＮＡＮＤメモリ１０内の１個のメモリブロックＢＬＫに格納されたブロックデータ（図６に示すデータ）が、ＤＲＡＭ２０に転送される（８ビットノーマルモードの場合）。ＤＲＡＭ２０は、図６に示すブロックデータを格納する。
【００７４】
第１ＥＣＣ訂正部６１−１〜６１−８には、ページ１〜ページ１０２８のデータがページ単位（ＢＣＨ符号ＥＣＣ２を除く）で、順次転送され、各ページのそれぞれのデータブロックＤ（１，１）〜Ｄ（８，１０２４）およびそのＣＲＣ（１，１）〜ＣＲＣ（８，１０２４、ＲＳ（１，１）〜ＲＳ（８，４）およびそのＣＲＣ（１，１０２５）〜ＣＲＣ（８，１０２８）に対して、ハミング符号ＥＣＣ１（１，１）〜ＥＣＣ１（８，１０２８）を用いてそれぞれ第１誤り訂正を行い、第１誤り訂正済みデータＤＣ１−１〜８をＤＲＡＭ２０に格納する。
【００７５】
続いて、誤り検出部６０−１〜６０−８による誤り検出動作が行われる。すなわち、誤り検出部６０−１〜６０−８にはそれぞれ、各ページのそれぞれの第１誤り訂正済みの第１単位データＤ（１，１）〜Ｄ（８，１０２４）とそのＣＲＣ（１，１）〜ＣＲＣ（８，１０２４）、および第１の誤り訂正済みのＲＳ（１，１）〜ＲＳ（８，４）とそのＣＲＣ（１，１０２５）〜ＣＲＣ（８，１０２８）がＤＲＡＭ２０から転送される。
【００７６】
誤り検出部６０−１〜６０−８は、それぞれ、ページ単位で、第１誤り訂正後のデータブロックＤ（１，１）〜Ｄ（８，１０２４）および第１誤り訂正後のＲＳ（１，１）〜ＲＳ（８，４）内の誤りを、それぞれＣＲＣ（１，１）〜ＣＲＣ（８，１０２８）を用いて検出する。そして、誤り検出部６０−１〜６０−８はそれぞれ、誤り検出の結果、どの読み出しデータブロックＤおよびＲＳ符号ＲＳに誤りが存在するかを示す第１誤り情報Ｓ１〜Ｓ８をページ単位で生成する。この第１誤り情報Ｓ１〜Ｓ８はそれぞれ、第２ＥＣＣ訂正部６２に転送される。なお、誤り検出部６０−１〜６０−８で誤りが存在すると分かったデータブロックＤは、第1誤り訂正済みデータＤＣ１-１〜８ではなく、訂正前のデータブロックＤを第２ＥＣＣ訂正部６２に転送する。これは、誤り検出部６０−１〜６０−８で誤りが見つかったデータブロックＤは,訂正不可能であった、つまり第１ＥＣＣ訂正部６１−１〜６１−８での訂正能力を超えた誤りが含まれていることを意味し、第１ＥＣＣ訂正部６１−１〜６１−８での誤り訂正は、結果としてさらなる誤りを付加することになるからである。従って、さらに誤りを付加したデータよりも、訂正前のデータのほうが誤りが少ないので、訂正前のデータを第２ＥＣＣ訂正部６２に送る。ＲＳ（１，１）〜ＲＳ（８，４）に関しても同様である。
【００７７】
図１１は、第１誤り訂正後の誤り検出を説明するための図であり、図１２は、第１誤り情報Ｓ１〜Ｓ８の一例を示す図である。図１１および図１２において、第１誤り訂正後の誤り検出で誤りがない第１単位データについては、第１誤り情報Ｓ＝０、第１誤り訂正後の誤り検出で誤りを検出した第１単位データについては、第１誤り情報Ｓ＝１とする。図１１および図１２に示す例では、第１単位データ１，４，５に誤りがあることを示している。この誤りがある第１単位データが第２誤り訂正の対象となる。
【００７８】
第２ＥＣＣ訂正部６２には、ページ単位で、第１誤り訂正後の第２単位データＵＤａ１〜ＵＤａ１０２８および第１誤り情報Ｓ１〜Ｓ８が転送される。第２ＥＣＣ訂正部６２は、第２単位データＵＤａに含まれるＢＨＣ符号ＥＣＣ２を使用し、第１誤り情報Ｓ１〜Ｓ８を参照して、第２誤り訂正の対象となる第１単位データに対して第２誤り訂正を行う。第２ＥＣＣ訂正部６２により訂正された第２誤り訂正済データＤＣ２は、ＤＲＡＭ２０に転送され、ＤＲＡＭ２０に格納されたデータのうち、第２誤り訂正済データＤＣ２に対応するデータを更新する。
【００７９】
続いて、誤り検出部６０−１〜６０−８による誤り検出動作が行われる。すなわち、誤り検出部６０−１〜６０−８には、ページ単位で、それぞれ、各ページのそれぞれの第２誤り訂正済みのデータブロックＤ（１，１）〜Ｄ（８，１０２４）とそのＣＲＣ（１，１）〜ＣＲＣ（８，１０２４）、および第２誤り訂正済みのＲＳ（１，１）〜ＲＳ（８，４）とそのＣＲＣ（１，１０２５）〜ＣＲＣ（８，１０２８）がＤＲＡＭ２０から転送される。
【００８０】
誤り検出部６０−１〜６０−８は、それぞれ、第２誤り訂正後のデータブロックＤ（１，１）〜Ｄ（８，１０２４）および第２誤り訂正後のＲＳ（１，１）〜ＲＳ（８，４）内の誤りを、それぞれＣＲＣ（１，１）〜ＣＲＣ（８，１０２８）を用いて検出する。そして、誤り検出部６０−１〜６０−８はそれぞれ、誤り検出の結果、どの第１単位データおよびＲＳ符号ＲＳに誤りが存在するかを示す第２誤り情報Ｓ１〜Ｓ８をページ単位で生成する。この第２誤り情報Ｓ１〜Ｓ８はそれぞれ、第３ＥＣＣ訂正部６３−１〜６３−８に送られる。なお、第１誤り訂正の場合と同様に、誤り検出部６０−１〜６０−８で誤りが存在すると分かったデータブロックＤは、第２誤り訂正済みデータＤＣ２ではなく、訂正前のデータブロックＤを第３ＥＣＣ訂正部６３−１〜６３−８に転送する。これは、誤り検出部６０−１〜６０−８で誤りが見つかったデータブロックＤは、訂正不可能であった、すなわち第２ＥＣＣ訂正部６２−１〜６２−８での訂正能力を超えた誤りが含まれていることを意味し、第２ＥＣＣ訂正部６２−１〜６２−８での誤り訂正は、結果としてさらなる誤りを付加していることになるからである。したがって、さらに誤りを付加したデータよりも、訂正前のデータのほうが誤りが少ないので、訂正前のデータを第３ＥＣＣ訂正部６３−１〜６３−８に送る。ＲＳ（１，１）〜ＲＳ（８，４）についても同様である。本実施形態では、誤り検出部６０−１〜６０−８は、誤り検出動作を並行して行っている。このように、誤り検出部６０−１〜６０−８を並行して動作させることによって、処理時間を短縮させることができる。
【００８１】
図１３は、第２誤り訂正後の誤り検出を説明するための図であり、図１４は、第２誤り訂正後の第２誤り情報Ｓ１〜Ｓ８の一例を示す図である。図１３および図１４において、第２誤り訂正後の誤り検出で誤りがない第１単位データについては、第２誤り情報Ｓ＝０、第２の誤り訂正後の誤り検出で誤りを検出したブロックについては、第２誤り情報Ｓ＝１とする。図１３および図１４に示す例では、第１単位データ５に誤りがあることを示している。この誤りがある第１単位データが第３誤り訂正の対象となる。
【００８２】
図１５は、第２ＥＣＣ訂正部６２による１回目の誤り訂正後のブロックデータの一例を示す図である。斜線は、第２ＥＣＣ訂正部６２による１回目の誤り訂正によっても訂正不能であるため、誤り検出部６０−１〜６０−８により誤りが検出されたデータを示している。
【００８３】
なお、第２ＥＣＣ訂正部６２による１回目の誤り訂正の結果、全ての読み出しデータに誤りが存在しない場合は、誤り訂正動作はここで終了する。すなわち、後述する第３ＥＣＣ訂正部６３による誤り訂正は行われない。例えば、第３ＥＣＣ訂正部６３は電源回路５からの電源供給の停止、或いはクロック回路（図示せず）からのクロック信号の供給の停止等によって、誤り訂正動作を停止する。これにより、誤りが少ない場合のデータ読み出し時間を短縮することができる。また、第３ＥＣＣ訂正部６３による誤り訂正動作が行われないため、消費電力を低減することができる。
【００８４】
続いて、第３ＥＣＣ訂正部６３による１回目の誤り訂正動作が行われる。すなわち、行方向に配列された１０２４個のデータブロックＤ（１，１）〜Ｄ（１，１０２４）からなる第３単位データＵＤｂ１と、これらに対応して生成された４個のＲＳ（１，１）〜ＲＳ（１，４）とが、ＤＲＡＭ２０から第３ＥＣＣ訂正部６３−１に送られる。第３ＥＣＣ訂正部６３−１は、ＲＳ（１，１）〜ＲＳ（１，４）を用いて、データブロックＤ（１，１）〜Ｄ（１，１０２４）内の誤りを訂正する。２〜８行にそれぞれ対応する第３ＥＣＣ訂正部６３−２〜６３−８についても同様である。
【００８５】
本実施形態では、第３ＥＣＣ訂正部６３−１〜６３−８は、訂正動作を並行して行っている。このように、第３ＥＣＣ訂正部６３−１〜６３−８を並行して動作させることによって、処理時間を短縮させることができる。第３ＥＣＣ訂正部６３−１〜６３−８により訂正された第３誤り訂正済データＤＣ３は、ＤＲＡＭ２０に送られる。ＤＲＡＭ２０は、格納されたデータのうち、第３の誤り訂正済データＤＣ３に対応するデータを更新する。
【００８６】
図１６は、第３ＥＣＣ訂正部６３による１回目の第３の誤り訂正後のブロックデータの一例を示す図である。図１６に示すように、読み出しデータＤ（１，２）及び（１，６）内の誤りが、第３ＥＣＣ訂正部６３−１により訂正されている。また、読み出しデータＤ（８，１）及び（８，１０２２）内の誤りが、第３ＥＣＣ訂正部６３−８により訂正されている。
【００８７】
なお、前述したように、第３ＥＣＣ訂正部６３による誤り訂正に先立って、誤り検出部６０を用いて誤りが存在する読み出しデータの位置を特定している。よって、第３ＥＣＣ訂正部６３は、誤りが検出された読み出しデータのみに対して誤り訂正を行えばよい。これにより、第３ＥＣＣ訂正部６３による訂正時間を短縮することができ、また消費電力を低減することができる。
【００８８】
続いて、ページ１〜ページ１０２８に対して、第２ＥＣＣ訂正部６２による２回目の第２の誤り訂正が行われる。この第２の誤り訂正動作は、前述した第２ＥＣＣ訂正部６２による１回目の誤り訂正と同じである。図１７は、第２ＥＣＣ訂正部６２による２回目の第２の誤り訂正後のブロックデータの一例を示す図である。図１７に示すように、読み出しデータＤ（２，１）、（３，２）、及び（２，１０２２）内の誤りが、第２ＥＣＣ訂正部６２により訂正されている。
【００８９】
続いて、誤り検出部６０−１〜６０−８は、全てのデータブロックＤ及びＲＳ符号の誤りを検出する。この検出動作は、前述した誤り検出部６０−１〜６０−８による１回目の誤り検出動作と同じである。続いて、第３単位データＵＤｂ１〜ＵＤｂ８に対してそれぞれ、第３ＥＣＣ訂正部６３−１〜６３−８による２回目の第３誤り訂正が行われる。この第３誤り訂正動作は、前述した第３ＥＣＣ訂正部６３−１〜６３−８による１回目の誤り訂正と同じである。
【００９０】
図１８は、第３ＥＣＣ訂正部６３による２回目の第３誤り訂正後のブロックデータの一例を示す図である。図１８に示すように、データブロックＤ（２，５）内の誤りが、第３ＥＣＣ訂正部６３−２により訂正されている。また、データブロックＤ（３，４）、（３，７）、及び（３，１０２３）内の誤りが、第３ＥＣＣ訂正部６３−３により訂正されている。これにより、データブロックＤ（１，１）〜Ｄ（８，１０２４）の誤りが全て訂正されたことになる。
【００９１】
その後、誤りが全て訂正されたデータブロックＤ（１，１）〜Ｄ（８，１０２４）がＤＲＡＭ２０からホスト装置１に出力される。
【００９２】
図１９は、ＮＡＮＤメモリ１０にデータを書き込んでからの経過時間と、必要訂正能力との関係を示す図である。図１９に示すように、経過時間が長くなると、ＮＡＮＤメモリ１０に書き込まれたデータのうち誤りの数が増加する。そこで、誤りの数の増加に合わせて誤り訂正能力を変化させる。そして、過剰または不十分な誤り訂正能力が使用されないように、第１誤り訂正部６１〜第３誤り訂正部６３の誤り訂正能力が決定される。具体的には、経過時間が短い間は、第１誤り訂正部６１のみによって誤り訂正ができるとともに、経過時間が所定時間（誤り数が急激に増加する時間）を過ぎた後は第１の誤り訂正部６１、第２誤り訂正部６２、及び第３誤り訂正部６３によって誤りが訂正できるように、第１誤り訂正部６１〜第３誤り訂正部６３の誤り訂正能力が決定される。
【００９３】
以上説明したように、本実施形態によれば、まず、読み出しデータに対して、第１誤り訂正符号（ハミング符号）を用いて第１誤り訂正し、この第１誤り訂正結果を、第２誤り訂正符号（ＢＨＣ符号）を用いてさらに第２誤り訂正し、さらに、第２誤り訂正結果を、第３誤り訂正符号（ＲＳ符号）を用いて第３誤り訂正することができる。従って、第１誤り訂正符号〜第３誤り訂正符号の訂正能力を低くした場合でも、所望の訂正能力を確保することができ、また、回路規模を低減することができる。
【００９４】
また、小程度の誤り訂正能力を持つ第１誤り訂正符号（ハミング符号）と、中程度の誤り訂正能力を持つ第２誤り訂正符号（ＢＣＨ符号）と、高程度の誤り訂正能力を持つ第３誤り訂正符号（ＲＳ符号）を３重にかけることにより、高程度の誤り訂正の復号化の頻度をきわめて減らすことができ、この結果、ハードウェアを持たなくても、ソフトウェアで十分処理できるようになり、回路規模が削減できる。
【００９５】
また、第１ＥＣＣ訂正部６１による第１誤り訂正の結果、全ての読み出しデータに誤り
が存在しない場合は、第２ＥＣＣ訂正部６２および第３ＥＣＣ訂正部６３による誤り訂正は行われない。これにより、誤りが少ない場合のデータ読み出し時間を短縮することができる。すなわち、誤りが少ない場合のデータ読み出し時間を短縮と、誤りが多い場合の高い訂正能力との両立が可能となる。さらに、第２ＥＣＣ訂正部６２および第３ＥＣＣ訂正部６３の動作を停止することにより、消費電力を低減することができる。
【００９６】
また、第２誤り訂正符号（ＢＣＨ符号）を用いて列方向のデータの誤りを訂正し、一方、
第３誤り訂正符号（ＲＳ符号）を用いて行方向のデータの誤りを訂正している。よって、ＮＡＮＤ型フラッシュメモリ１のメモリブロック内の全ページに跨る誤り訂正が可能となる。さらに、記憶されるデータの位置に起因して誤り発生確率が大きく異なるような半導体メモリに対しては、誤り発生確率が大きい領域を何度も誤り訂正することができるため、本実施形態は特に有効である。
【００９７】
また、誤り検出部６０を用いて誤りが存在するデータの位置を特定できるため、第２ＥＣＣ訂正部６２および第３誤り訂正部６３は、誤りが検出された読み出しデータの誤り訂正を行えばよい。これにより、第２ＥＣＣ訂正部６２および第３誤り訂正部６３による処理時間を短縮することができる。
【００９８】
また、誤り検出符号（ＣＲＣ）により誤りが存在するデータの位置が検出できるため、第３誤り訂正部３３は、誤り検出を行う必要がない。これにより、全てのＲＳ符号（本実施形態では、４個のＲＳ符号）を誤り訂正に使用することができる。
【００９９】
（実施の形態２）
図２０〜図２２を参照して、実施の形態２にかかるＳＳＤについて説明する。実施の形態２では、第１および第２誤り訂正をＳＳＤ１００で行い、高い誤り訂正能力を有する第３誤り訂正をＳＳＤ１００ではなく、ホスト装置１で行う構成としたものである。第１および第２誤り訂正で殆どの誤りが訂正でき、また、第３誤り訂正は使用頻度が極めて低く、かつ処理時間が長くかかるため、ＳＳＤ１００の負荷を軽減したものである。
【０１００】
図２０は、実施の形態２の誤り訂正原理を説明するための模式図である。図２１は、実施の形態２にかかるＳＳＤ１００およびホスト装置１００の構成を示す図である。実施の形態２では、図２０において、第１誤り訂正（Ａ）および第２誤り訂正（Ｂ）をＳＳＤ１００で行い、第３誤り訂正（Ｃ）以降の処理をホスト装置１で行う。
【０１０１】
図２１に示すように、ホスト装置１は、ＣＲＣを用いて各データブロックＤの誤りを検出する誤り検出部１０１と、ＢＣＨ符号（第２誤り訂正符号）を用いて第２誤り訂正を行う第２ＥＣＣ部１０２と、ＲＳ符号（第３誤り訂正符号）を用いて第３誤り訂正を行う第３ＥＣＣ部１０３とを備えている。誤り検出部１０１、第２ＥＣＣ部１０２、および第３ＥＣＣ部１０３は、ホスト装置１のＣＰＵがソフトウェアを実行することにより実現することができる。
【０１０２】
ＳＳＤ１００は、第２誤り訂正後のデータ｛ブロックＤ（１，１）〜Ｄ（８，１０２４）とそのＣＲＣ（１，１）〜ＣＲＣ（８，１０２４）、およびＲＳ（１，１）〜ＲＳ（８，４）とそのＣＲＣ（１，１０２５）〜ＣＲＣ（８，１０２８），ＥＣＣ１）、および第２誤り情報をホスト装置１に転送する。
【０１０３】
ホスト装置１は、ＳＳＤから受信した第２誤り訂正後のデータに対して、第２誤り訂正情報を使用して、第３の誤り訂正を行い、その結果を、ＣＲＣで確認し、誤りが検出された場合は、再度、第２の誤り訂正を行って、誤りがなくなるまで、第２と第３の誤り訂正を交互に繰り返し行う（上記図１５〜図１９の処理を行う）。
【０１０４】
図２２は、実施の形態２にかかるＥＣＣ回路４２の復号系に関する主要部を示すブロック図である。図２２に示すように、実施の形態２にかかるＥＣＣ回路４２の復号系では、第３ＥＣＣ復号部を実装する必要がなくなるので、回路規模を小規模にすることが可能となる。
【０１０５】
実施の形態２によれば、第３誤り訂正をホスト装置１で行うこととしたので、ＳＳＤ１００で第３誤り訂正を行う必要がなくなり、ＳＳＤ１００の負荷および回路規模を低減することが可能となる。
【０１０６】
なお、上記実施の形態では、本発明をＮＡＮＤメモリを有するＳＳＤに適用するようにしたが、ＮＯＲ型などの他のフラッシュＥＥＰＲＯＭを有するＳＳＤに本発明を適用するようにしてもよい。
【図面の簡単な説明】
【０１０７】
【図１】ＳＳＤ（Solid State Drive）の構成例を示すブロック図である。
【図２】ＮＡＮＤメモリチップに含まれる１個のブロックの構成例を示す回路図である。
【図３】ＥＣＣ回路の誤り訂正原理の概略を説明するための模式図である。
【図４】ＥＣＣ回路の符号化系に関する主要部を示すブロック図である。
【図５】ＤＲＡＭに格納されるデータのフォーマットの一例を示す図である。
【図６】ＮＡＮＤメモリに転送されるデータのフォーマットを示す図である。
【図７】ＥＣＣ回路の誤り検出符号生成動作及び誤り訂正符号生成動作を説明する図である。
【図８】図７に続く、誤り検出符号生成動作及び誤り訂正符号生成動作を説明する図である。
【図９】図８に続く、誤り検出符号生成動作及び誤り訂正符号生成動作を説明する図である。
【図１０】ＥＣＣ回路の復号系に関する主要部を示すブロック図である。
【図１１】第１誤り訂正後の誤り検出を説明するための図である。
【図１２】第１誤り情報の一例を示す図である。
【図１３】第２誤り訂正後の誤り検出を説明するための図である。
【図１４】第２誤り情報の一例を示す図である。
【図１５】第２ＥＣＣ訂正部による１回目の誤り訂正後のブロックデータを示す図である。
【図１６】第３ＥＣＣ訂正部による１回目の誤り訂正後のブロックデータを示す図である。
【図１７】第２ＥＣＣ訂正部による２回目の誤り訂正後のブロックデータを示す図である。
【図１８】第３ＥＣＣ訂正部による２回目の誤り訂正後のブロックデータを示す図である。
【図１９】書き込みからの経過時間と必要訂正能力との関係を示す図である。
【図２０】実施の形態２の誤り訂正原理を説明するための模式図である。
【図２１】実施の形態２にかかるＳＳＤおよびホスト装置の構成を示す図である。
【図２２】実施の形態２にかかるＥＣＣ回路の復号系に関する主要部を示すブロック図である。
【符号の説明】
【０１０８】
１００  ＳＳＤ
１  ホスト装置
２  ＡＴＡインタフェース（ＡＴＡ  Ｉ／Ｆ）
３  ホスト装置（ホスト）
４  ドライブ制御回路
５  電源回路
６  ＬＥＤ
１０  ＮＡＮＤメモリ
２０  ＤＲＡＭ
４１  コントローラ
４２  ＥＣＣ回路
４３  ＮＡＮＤ  Ｉ／Ｆ
５０  誤り検出符号生成部
５１  第１ＥＣＣ生成部
５２  第２ＥＣＣ生成部
５３  第３ＥＣＣ生成部
６０  誤り検出部
６１  第１ＥＣＣ訂正部
６２  第２ＥＣＣ訂正部
６３  第３ＥＣＣ訂正部
１０１  誤り検出部
１０２  第２ＥＣＣ部
１０３  第３ＥＣＣ部
【図１】
0005166074.tif 000002
【図２】
0005166074.tif 000003
【図３】
0005166074.tif 000004
【図４】
0005166074.tif 000005
【図５】
0005166074.tif 000006
【図６】
0005166074.tif 000007
【図７】
0005166074.tif 000008
【図８】
0005166074.tif 000009
【図９】
0005166074.tif 000010
【図１０】
0005166074.tif 000011
【図１１】
0005166074.tif 000012
【図１２】
0005166074.tif 000013
【図１３】
0005166074.tif 000014
【図１４】
0005166074.tif 000015
【図１５】
0005166074.tif 000016
【図１６】
0005166074.tif 000017
【図１７】
0005166074.tif 000018
【図１８】
0005166074.tif 000019
【図１９】
0005166074.tif 000020
【図２０】
0005166074.tif 000021
【図２１】
0005166074.tif 000022
【図２２】
0005166074.tif 000023