(57)【要約】【課題】多数のメモリチップを搭載した半導体記憶装置での誤り訂正能力を向上させる。【解決手段】原データからＣＲＣ符号を生成し、原データとＣＲＣ符号に対してＢＣＨ符号を生成し、原データ、ＣＲＣ符号、ＢＣＨ符号を、複数のメモリチップの異なるプレーンからそれぞれ選択された１のページに記録する。原データから、ページを横断してＲＳ符号を生成し、ＲＳ符号に対してＣＲＣ符号を生成し、ＲＳ符号とＣＲＣ符号に対してＢＣＨ符号を生成し、ＲＳ符号、ＣＲＣ符号、ＢＣＨ符号を原データとは異なるメモリチップに記録する。読み出し時、原データに対してＢＣＨ符号による誤り訂正を行い、その後ＣＲＣを計算する。誤り数がＲＳ符号での消失訂正可能な数であれば原データを消失訂正する。エラー数がＲＳ符号での消失訂正能力を超えていれば、通常のＲＳ符号での誤り訂正を行い、さらにＢＣＨ符号による誤り訂正を行う。【選択図】図９
2011203878.tif 000002
【特許請求の範囲】
【請求項１】
複数のメモリチップを有する半導体記憶装置であって、
前記メモリチップは、複数の第１記憶領域を有し、
前記第１記憶領域は、複数の第２記憶領域を有し、
前記第２記憶領域は、データの記憶および読み出しの単位であり、
第１のデータは、記憶対象のデータである第２のデータを複数有し、
第３のデータは、複数の前記第１のデータのそれぞれから１つずつ選択される該第２のデータを複数有し、
前記第３のデータに含まれる前記第２のデータは、他の前記第３のデータに含まれる前記第２のデータとは重複せず、
前記第１のデータに基づいて第１の誤り検査符号を生成する第１の誤り検査符号生成手段と、
前記第１のデータと前記第１の誤り検査符号とに基づいて、組織符号である第１の誤り訂正符号を生成する第１の誤り訂正符号生成手段と、
前記第２記憶領域に対して、前記第１のデータと前記第１の誤り検査符号と前記第１の誤り訂正符号との記録を行う記録手段と、
前記第３のデータの複数のそれぞれについてリード・ソロモン符号の冗長符号を複数生成する第２の誤り訂正符号生成手段と
を有し、
第４のデータは、前記第１のデータと同じ大きさであり、全ての前記第３のデータから生成される前記冗長符号を含み、
前記第４のデータに含まれる前記冗長符号は、他の前記第４のデータに含まれる前記冗長符号とは重複せず、
さらに、複数の前記第４のデータのそれぞれから第２の誤り検査符号を生成する第２の誤り検査符号生成手段と、
前記第４のデータのそれぞれと前記第２の誤り検査符号とに基づいて、組織符号である第２の誤り訂正符号を生成する第３の誤り訂正符号生成手段と
を有し、
前記記録手段は、
前記第４のデータと前記第２の誤り検査符号と前記第２の誤り訂正符号との記録を行う
ことを特徴とする半導体記憶装置。
【請求項２】
前記第１の誤り訂正符号を用いて前記第１のデータおよび前記第１の誤り検査符号に対して誤り訂正を行う第１の誤り訂正手段と、
前記第１の誤り訂正手段による前記第１のデータに対する誤り訂正結果に対して前記第１の誤り検査符号を用いて誤り検査を行い誤りを検出する第１の誤り検査手段と、
前記第２の誤り訂正符号を用いて前記第４のデータおよび前記第２の誤り検査符号に対して誤り訂正を行う第２の誤り訂正手段と、
前記第２の誤り訂正手段による前記第４のデータに対する誤り訂正結果に対して前記第２の誤り検査符号を用いて誤り検査を行い誤りを検出する第２の誤り検査手段と、
前記第１のデータおよび前記第４のデータからリード・ソロモン符号のシンドロームを計算し、前記第１の誤り検査手段および前記第２の誤り検査手段で検出された誤りの位置を誤り位置として与えて、該誤り位置と該シンドロームとから誤りベクトルを計算して該第１のデータおよび該第４のデータの誤り訂正を行う第３の誤り訂正手段と、
前記第１のデータおよび前記第４のデータからリード・ソロモン符号のシンドロームを計算し、該シンドロームから誤り位置および誤りベクトルを計算して該第１のデータおよび第４のデータの誤り訂正を行う第４の誤り訂正手段と、
前記第１の誤り検査手段で検出された誤りの数と、前記第２の誤り検査手段で検出された誤りの数との和である誤り数の判定を行い、
該誤り数が０の場合に、前記第１の誤り訂正手段で前記第１のデータに対して誤り訂正処理が施されたデータを、誤り訂正が成功したデータとして出力し、
該誤り数が１以上、且つ、前記第３の誤り訂正手段の誤り訂正能力で訂正可能な誤り数以下の場合に、前記第１の誤り訂正手段で誤り訂正処理が施された前記第１のデータに対して前記第４の誤り訂正手段で誤り訂正を施して、誤り訂正が成功したデータとして出力し、
該誤り数が前記第３の誤り訂正手段の誤り訂正能力で訂正可能な誤り数を超える場合に、前記第１の誤り訂正手段により誤り訂正された該第１のデータおよび前記第４のデータに対して前記第４の誤り訂正手段で誤り訂正処理を施し、該誤り訂正処理が施された該第１のデータに対して再び前記第１の誤り訂正手段で誤り訂正処理を施すと共に該第４のデータに対して再び前記第２の誤り訂正手段で誤り訂正処理を施し、該誤り訂正処理が施された該第１のデータおよび該第４のデータに対して前記第１の誤り検査手段および前記第２の誤り検査手段でそれぞれ誤り検査を行って前記誤り数を求め、求められた該誤り数を用いて前記判定を再び行う
ように制御する制御手段と
をさらに有する
ことを特徴とする請求項１に記載の半導体記憶装置。
【請求項３】
前記制御手段は、
前記誤り数が第３の誤り訂正手段の誤り訂正能力で訂正可能な誤り数を超える場合に、前記誤り数が第３の誤り訂正手段の誤り訂正能力で訂正可能な誤り数を超える場合の処理の直前の前記誤り数に対して、該処理の直後の前記誤り数が減少した場合に、該処理を再び行うように制御する
ことを特徴とする請求項２に記載の半導体記憶装置。
【請求項４】
前記メモリチップは、複数の前記単位ブロックを含み、互いに独立して記録および読み出しが可能なプレーンを複数有し、
前記記録手段は、
複数の第１の前記第１記憶領域から選択された１つの第１の前記第２記憶領域に対して、前記第１のデータと前記第１の誤り検査符号と前記第１の誤り訂正符号とを記録すると共に、複数の第２の第１記憶領域から選択された１つの第２の前記第２記憶領域に対して、前記第４のデータと前記第２の誤り検査符号と前記第２の誤り訂正符号とを記録し、
前記第１の第１記憶領域および前記第２の第１記憶領域は、互いに重複しない前記プレーンからそれぞれ選択される
ことを特徴とする請求項１に記載の半導体記憶装置。
【請求項５】
前記第１記憶領域は、複数の信号点を持ち多値の記録を行うメモリセルを複数備えると共に該多値の各ビット位置に対して異なる該単位ブロックが割り当てられ、
前記記録手段は、
複数の第１の前記第１記憶領域から選択された１つの第１の前記第２記憶領域に対して、前記第１のデータと前記第１の誤り検査符号と前記第１の誤り訂正符号とを記録すると共に、複数の第２の他の第１記憶領域から選択された１つの第２の前記第２記憶領域に対して、前記第４のデータと前記第２の誤り検査符号と前記第２の誤り訂正符号とを記録し、
前記第１の第２記憶領域および前記第２の他の第２記憶領域は、異なる前記ビット位置にそれぞれ対応する前記第２記憶領域を略同数に使用する
ことを特徴とする請求項１に記載の半導体記憶装置。
【請求項６】
前記誤り数が第３の誤り訂正手段の誤り訂正能力で訂正可能な誤り数を超える場合に、前記誤り数が第３の誤り訂正手段の誤り訂正能力で訂正可能な誤り数を超える場合の処理の直前の前記誤り数に対して、該処理の直後の前記誤り数が減少しない場合に、前記第１のデータに対する誤り訂正処理が失敗したことを示すエラー出力を行う
ことを特徴とする請求項２に記載の半導体記憶装置。
【請求項７】
前記第２記憶領域毎に誤り数の期待値が異なる場合に、
前記冗長符号を、誤り数の期待値が期待値の平均よりも小さい第２記憶領域に記録する
ことを特徴とする請求項１に記載の半導体記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体記憶装置に関する。
【背景技術】
【０００２】
ＮＡＮＤフラッシュメモリチップは、チップ内に多数のメモリセルを備え、情報を電荷量に置き換えて、これらのメモリセルに対して情報の記録を行っている。また、チップ内は複数のメモリブロックに分割されて構成されている。そのうち消去の単位であるブロックと呼ばれる単位と、ブロックをさらに分割した、読み書きの単位であるページと呼ばれる単位が存在する。
【０００３】
ＮＡＮＤフラッシュメモリは、電荷量の大小に対応させて情報を記録する。そのため、時間経過に伴い電荷が放電され、記録された情報に誤りが発生する。この、時間経過に伴う電荷の放電に起因する情報の誤りに対応するためには、記録するデータに対して誤り訂正符号化を行い、データと、誤り訂正符号化により生成した冗長符号とをページ内に記録するのが一般的である。特許文献１には、リード・ソロモン符号を用いた誤り訂正符号化について記載されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許第５９９６１０５号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、近年では、製造プロセスの微細化に伴い、ＮＡＮＤフラッシュメモリチップにおいて、情報の記録のために蓄積した電荷が放電し易くなってきており、放電が進行した場合にはランダム誤りが増加することになる。したがって、長期間のデータ保存を行うためには、強力な誤り訂正能力が必要となる。しかしながら、強力な誤り訂正を行うには、冗長符号量の増大を伴うという問題がある。
【０００６】
一方で、製造プロセスの微細化の影響は、メモリセルだけではなく周辺回路にも及んでおり、ブロック単位の消去制御部分の故障によるブロック全体の故障など、大きなデータブロックのデータ破損（バースト破損と呼ぶ）が無視できなくなってきている。
【０００７】
さらに、半導体記憶装置そのものの大容量化により、記憶装置内に多数のチップを搭載した記憶装置が登場している。そのため、上述したような故障が記憶装置内に存在する確率が飛躍的に増大している。
【０００８】
本発明は、上記に鑑みてなされたものであって、多数のメモリチップを搭載した半導体記憶装置において、バースト状のデータ破損を復元する能力を得ると共に、ランダムに発生するエラーの訂正能力を向上させることを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するために、本発明は、複数のメモリチップを備え、メモリチップは、データの記録および読み出しの単位である第２記憶領域の複数からなる第１記憶領域を複数有する半導体記憶装置であって、記録対象のデータである第２のデータの複数からなる第１のデータから第１の誤り検査符号を生成する第１の誤り検査符号生成手段と、第１のデータと第１の誤り検査符号とから、組織符号である第１の誤り訂正符号を生成する第１の誤り訂正符号生成手段と、第２記憶領域に対して、第１のデータと第１の誤り検査符号と第１の誤り訂正符号との記録を行う記録手段と、第１のデータそれぞれに含まれる第２のデータから１ずつ選択される第２のデータを複数有する第３のデータであって、第３のデータに含まれる第２のデータは他の第３のデータに含まれる第２のデータとは重複しない第３のデータの複数のそれぞれについてリード・ソロモン符号の冗長符号を複数生成する第２の誤り訂正符号生成手段と、全ての第３のデータから生成される冗長符号を含む、第１のデータと同じ大きさの第４のデータであって、第４のデータに含まれる冗長符号は、他の第４のデータに含まれる冗長符号とは重複しない第４のデータのそれぞれから第２の誤り検査符号を生成する第２の誤り検査符号生成手段と、第４のデータのそれぞれと第２の誤り検査符号とから、組織符号である第２の誤り訂正符号を生成する第３の誤り訂正符号生成手段とを有し、記録手段は、さらに、第４のデータと第２の誤り検査符号と第２の誤り訂正符号との記録を行うことを特徴とする。
【発明の効果】
【００１０】
本発明によれば、多数のメモリチップを搭載した半導体記憶装置において、バースト状のデータ破損を復元する能力を得ると共に、ランダムに発生するエラーの訂正能力を向上させることができるという効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】実施形態に適用可能な半導体記憶装置の構成を示すブロック図。
【図２】エンコーダ／デコーダ部の構成を示すブロック図。
【図３】メモリブロックＢＬＫの構成の例を示す等価回路図。
【図４】ＮＡＮＤフラッシュメモリチップの多値記憶を説明するための図。
【図５】実施形態による記録フォーマットを示す図。
【図６】実施形態の誤り訂正符号化処理を示すフローチャート。
【図７−１】電荷の蓄積状態に伴うエラーの発生を説明するための図。
【図７−２】電荷の蓄積状態に伴うエラーの発生を説明するための図。
【図８】ＲＳ符号によるエンコードを行うページを示す図。
【図９】実施形態によるエラー訂正符号のデコード処理を概略的に示す図。
【図１０−１】ＲＳデコーダの一例の構成を示すブロック図。
【図１０−２】ＲＳデコーダの別の例の構成を示すブロック図。
【図１１】実施形態による誤り訂正処理を示す一例のフローチャート。
【図１２】ＲＳデコーダによる通常の誤り訂正処理を示す一例のフローチャート。
【図１３】実施形態による誤り訂正方法を検証するための図。
【図１４】実施形態による誤り訂正方法を検証するための図。
【図１５】実施形態による誤り訂正方法を検証するための図。
【図１６】実施形態による誤り訂正方法を検証するための図。
【図１７】実施形態による誤り訂正方法を検証するための図。
【発明を実施するための形態】
【００１２】
以下に添付図面を参照して、本発明に係る半導体記憶装置の一実施形態を詳細に説明する。本実施形態では、複数のメモリチップを搭載した半導体記憶装置内に、大きなデータブロックの破損を復元するための誤り訂正符号を格納するメモリチップをさらに設ける。大きなデータブロックにおけるデータの破損時には、当該誤り訂正符号を用いてデータの復元を行う。また、大きなデータブロックの破損対策のための当該誤り訂正符号を、小さなデータブロック内の誤り訂正符号としても利用し、メモリチップ間の誤り訂正とページ内の誤り訂正とを交錯反復することにより、誤り訂正能力の増大を図る。
【００１３】
図１は、本発明の一実施形態に適用可能な半導体記憶装置１の一例の構成を示す。図１の例では、半導体記憶装置１は、インターフェイス（Ｉ／Ｆ）１０、バッファメモリ１１、コントローラ１２およびフラッシュメモリ部１３を有する。
【００１４】
インターフェイス１０は、例えばパーソナルコンピュータ（ＰＣ）といった、この半導体記憶装置１のホストとなる情報処理装置と、この半導体記憶装置１とのインターフェイスである。インターフェイス１０としては、例えばＳＡＴＡ(Serial Advanced Technology Attachment)規格を適用することができる。バッファメモリ１１は、フラッシュメモリ部１３に記録するための記録データ用のバッファ領域であるライトバッファ１１Ａと、フラッシュメモリ部１３から読み出された読み出しデータ用のバッファ領域であるリードバッファ１１Ｂとを有する。コントローラ１２は、例えばＣＰＵ(Central Processing Unit)を含み、インターフェイス１０およびバッファメモリ１１を制御して、フラッシュメモリ部１３に対するデータの記録や、フラッシュメモリ部１３からのデータの読み出しの速度を調整する。
【００１５】
フラッシュメモリ部１３は、ＮＡＮＤフラッシュコントローラ２０と複数のＮＡＮＤフラッシュメモリチップ２３を有すると共に、各ＮＡＮＤフラッシュメモリチップ２３にそれぞれ対応する複数のエンコーダ／デコーダ（Ｅ／Ｄ）部２２を有する。フラッシュメモリ部１３は、さらに、１のリード・ソロモン符号エンコーダ／デコーダ（ＲＳ  Ｅ／Ｄ）部２１と、このＲＳ  Ｅ／Ｄ部２１に対応するＥ／Ｄ部２４およびＮＡＮＤフラッシュメモリチップ２５を有する。ＮＡＮＤフラッシュメモリチップ２３および２５は、チップ内に備えた多数のメモリセルに対して情報を電荷に置き換えて記憶する。
【００１６】
ＮＡＮＤフラッシュコントローラ２０は、各ＮＡＮＤフラッシュメモリチップ２３およびＮＡＮＤフラッシュメモリチップ２５に対するデータの記録および読み出しを制御する。それと共に、ＮＡＮＤフラッシュコントローラ２０は、各Ｅ／Ｄ部２２、Ｅ／Ｄ部２４、ならびに、ＲＳ  Ｅ／Ｄ部２１の動作を制御する。
【００１７】
例えば、ＮＡＮＤフラッシュコントローラ２０は、メモリを有し、データの記録時には、ライトバッファ１１Ａに所定量のデータが溜め込まれると、ライトバッファ１１Ａから、ＮＡＮＤフラッシュメモリチップ２３の記録単位分のデータを読み出してメモリに記憶する。このメモリから読み出されたデータがＥ／Ｄ部２２に供給されてエラー訂正符号化され、ＮＡＮＤフラッシュコントローラ２０の制御によりＮＡＮＤフラッシュメモリチップ２３に記録される。
【００１８】
ＲＳ  Ｅ／Ｄ部２１は、記録処理時には、入力されたデータに対してリード・ソロモン符号（以下、ＲＳ符号と略称する）を用いた誤り訂正符号化を行う。また、読み出し処理時には、入力されたデータのＲＳ符号をデコードし、当該データに対して誤り訂正処理を行う。例えば、ＲＳ  Ｅ／Ｄ部２１は、エンコードおよびデコード対象となるデータを格納するためのメモリを有し、このメモリに格納されたデータを用いて誤り訂正符号化処理および誤り訂正処理などを行う。
【００１９】
Ｅ／Ｄ部２２およびＥ／Ｄ部２４は、記録処理時には、入力されたデータに対してＣＲＣ(Cyclic Redundancy Check)符号を生成すると共に、当該データおよび生成されたＣＲＣ符号に対してＢＣＨ(Bose-Chaudhuri-Hocquenghem)符号など組織符号を用いた誤り訂正符号化を行う。また、読み出し処理時には、入力されたデータのＢＣＨ符号をデコードして誤り訂正を行うと共に、ＣＲＣ符号をデコードして誤り位置を求める。例えば、Ｅ／Ｄ部２２およびＥ／Ｄ部２４は、それぞれエンコードおよびデコード対象となるデータを格納するためのメモリを有し、このメモリに格納されたデータを用いて誤り訂正符号化処理および誤り訂正処理などを行う。
【００２０】
なお、Ｅ／Ｄ部２２で行う誤り訂正符号化に用いる符号は、組織符号であれば、ＢＣＨ符号に限らず他の符号を用いてもよい。例えば、ＲＳ符号やＬＤＰＣ(Low-Density Parity-Check)符号などを、Ｅ／Ｄ部２２による誤り訂正符号化に用いることができる。また、ＣＲＣ符号も、これに限らず、チェックサムなど十分な誤り検出能力があれば、他の符号を用いてもよい。
【００２１】
図２は、Ｅ／Ｄ部２２の一例の構成を示す。Ｅ／Ｄ部２２は、ＣＲＣエンコーダ２６およびＢＣＨエンコーダ２７と、ＢＣＨデコーダ２８およびＣＲＣデコーダ２９とを有する。エンコードのためにＥ／Ｄ部２２に入力された原データは、ＣＲＣエンコーダ２６およびＢＣＨエンコーダ２７にそれぞれ供給される。
【００２２】
ＣＲＣエンコーダ２６（第１の誤り検査符号生成部）は、供給された原データのＣＲＣを計算し、計算結果から誤り検査符号であるＣＲＣ符号を生成する。ＣＲＣ符号は、ＢＣＨエンコーダ２７に供給される。ＢＣＨエンコーダ２７（第１の誤り訂正符号生成部）は、原データと、ＣＲＣエンコーダ２６から供給されたＣＲＣ符号とに対して誤り訂正符号であるＢＣＨ符号を生成して、原データおよびＣＲＣ符号に対する誤り訂正符号化を行う。ＢＣＨ符号、原データおよびＣＲＣ符号がＥ／Ｄ部２２から出力される。
【００２３】
一方、上述のようにしてＢＣＨ符号により誤り訂正符号化されたデータは、Ｅ／Ｄ部２２に入力されると、ＢＣＨデコーダ２８に供給される。ＢＣＨデコーダ２８（第１の誤り訂正部）は、入力されたデータのＢＣＨ符号をデコードし、ＢＣＨ符号の符号訂正能力で訂正可能な誤りを訂正する。ＣＲＣデコーダ２９（第１の誤り検査部）は、ＢＣＨデコーダ２８の出力に含まれるＣＲＣ符号をデコードしてエラー検査を行う。ＢＣＨデコーダ２８の出力と、エラー検査結果とがＥ／Ｄ部２２からそれぞれ出力される。
【００２４】
なお、Ｅ／Ｄ部２４も、この図２に示すＥ／Ｄ部２２と同一の構成で実現可能であるので、詳細な説明を省略する。ここで、後述する図５の右側（冗長部側）に例示されるように、Ｅ／Ｄ部２２におけるＣＲＣエンコーダ２６およびＢＣＨエンコーダ２７を、Ｅ／Ｄ部２４ではそれぞれＣＲＣエンコーダ２６’（第２の誤り検査符号生成部）およびＢＣＨエンコーダ２７’（第３の誤り訂正符号生成部）とする。また、後述する図９の冗長部側に例示されるように、Ｅ／Ｄ部２２におけるＢＣＨデコーダ２８およびＣＲＣデコーダ２９を、Ｅ／Ｄ部２４ではそれぞれＢＣＨデコーダ２８’（第３の誤り訂正部）およびＣＲＣデコーダ２９’（第２の誤り検査部）とする。
【００２５】
上述したような構成において、ライトバッファ１１Ａから読み出された原データがＮＡＮＤフラッシュコントローラ２０に供給され、ＮＡＮＤフラッシュコントローラ２０の制御により、各Ｅ／Ｄ部２２にそれぞれ供給される。
【００２６】
各Ｅ／Ｄ部２２では、供給された原データに対してＣＲＣエンコーダ２６がＣＲＣ符号を生成すると共に、ＢＣＨエンコーダ２７が原データおよびＣＲＣ符号に対してＢＣＨ符号を生成し、誤り訂正符号化する。各Ｅ／Ｄ部２２、２２、…から出力されたＢＣＨ符号、ＣＲＣ符号および原データからなるデータ群は、それぞれ各ＮＡＮＤフラッシュメモリチップ２３に記録される。
【００２７】
原データは、ＲＳ  Ｅ／Ｄ部２１にも供給される。ＲＳ  Ｅ／Ｄ部２１は、供給された原データに対してＲＳ符号の冗長符号（以下、単にＲＳ符号と呼ぶ）を生成して誤り訂正符号化する。ＲＳ  Ｅ／Ｄ部２１で生成されたＲＳ符号は、Ｅ／Ｄ部２４に供給される。Ｅ／Ｄ部２４は、供給されたＲＳ符号に対してＣＲＣエンコーダ２６’がＣＲＣ符号を生成すると共に、ＢＣＨエンコーダ２７’がＲＳ符号およびＣＲＣ符号に対してＢＣＨ符号を生成し、誤り訂正符号化する。Ｅ／Ｄ部２４から出力されたＢＣＨ符号、ＣＲＣ符号およびＲＳ符号からなるデータ群は、ＮＡＮＤフラッシュメモリチップ２５に記録される。
【００２８】
ＮＡＮＤフラッシュメモリチップ２３からのデータの読み出し時の動作は、概略的には、次のようになる。各ＮＡＮＤフラッシュメモリチップ２３から読み出されたデータが各Ｅ／Ｄ部２２に供給される。Ｅ／Ｄ部２２では、供給されたデータに対してＢＣＨデコーダ２８がＢＣＨ符号のデコードを行い、原データおよびＣＲＣ符号に対する誤り訂正を行うと共に、ＣＲＣデコーダ２９がＢＣＨデコーダ２８の出力に含まれるＣＲＣ符号をデコードして誤り検査を行う。誤り訂正処理を施された原データと、誤り検査結果とがＮＡＮＤフラッシュコントローラ２０およびＲＳ  Ｅ／Ｄ部２１にそれぞれ供給される。
【００２９】
それと共に、ＮＡＮＤフラッシュメモリチップ２５から読み出されたデータがＥ／Ｄ部２４に供給される。Ｅ／Ｄ部２４では、供給されたデータに対してＢＣＨデコーダ２８’がＢＣＨ符号のデコードを行い、ＲＳ符号およびＣＲＣ符号に対する誤り訂正を行うと共に、ＣＲＣデコーダ２９’がＢＣＨデコーダ２８の出力に含まれるＣＲＣ符号をデコードして誤り検査を行う。誤り訂正処理を施されたＲＳ符号と、誤り検査結果とがＲＳ  Ｅ／Ｄ部２１に供給される。
【００３０】
ここで、Ｅ／Ｄ部２２による誤り検査の結果で求められた誤りの数と、Ｅ／Ｄ部２４による誤り検査の結果で求められた誤りの数との和である誤り数が０でなければ、ＲＳ  Ｅ／Ｄ部２１によりＲＳ符号がデコードされ、Ｅ／Ｄ部２２から出力されたＢＣＨ符号による誤り訂正処理を施された原データと、ＲＳ符号自身とに対して、ＲＳ符号による誤り訂正処理が施される。このとき、詳細を後述する誤り数に関する条件に応じて、通常の誤り訂正を行うか、消失訂正を行うかが選択される。消失訂正を行うように選択された場合は、誤り訂正された原データが出力データとしてＮＡＮＤフラッシュコントローラ２０に供給される。
【００３１】
一方、通常の誤り訂正を行うように選択された場合は、ＲＳ  Ｅ／Ｄ部２１によりＲＳ符号による誤り訂正処理が施された原データに対して、さらに、各Ｅ／Ｄ部２２でＢＣＨ符号による誤り訂正処理が施される。この誤り訂正処理で誤りが全て訂正されたら、誤り訂正された原データが出力データとしてＮＡＮＤフラッシュコントローラ２０に供給される。誤りが全て訂正されていなければ、再びＲＳ  Ｅ／Ｄ部２１および各Ｅ／Ｄ部２２での誤り訂正処理が行われる。
【００３２】
ＮＡＮＤフラッシュコントローラ２０は、詳細を後述する一連の誤り訂正処理を終了し、最終的に各Ｅ／Ｄ部２２およびＲＳ  Ｅ／Ｄ部２１から供給されたデータを、リードバッファ１１Ｂに書き込む。
【００３３】
次に、ＮＡＮＤフラッシュメモリチップの構成について、概略的に説明する。ＮＡＮＤフラッシュメモリチップは、データ消去の単位である複数のメモリブロックＢＬＫから構成されている。メモリブロックＢＬＫの構成について、図３を用いて説明する。図３は、何れかのメモリブロックＢＬＫの構成の例を示す等価回路図である。
【００３４】
メモリブロックＢＬＫは、Ｘ方向に沿って配置されたｍ（ｍは、１以上の整数）個のＮＡＮＤストリングを備えている。各ＮＡＮＤストリングは、選択トランジスタＳＴ１、ＳＴ２、及びｎ（ｎは、１以上の整数）個のメモリセルトランジスタＭＴを備えている。ｍ個のＮＡＮＤストリングにそれぞれ含まれる選択トランジスタＳＴ１は、ドレインがビット線ＢＬ１〜ＢＬｍに接続され、ゲートが選択ゲート線ＳＧＤに共通接続されている。また、選択トランジスタＳＴ２は、ソースがソース線ＳＬに共通接続され、ゲートが選択ゲート線ＳＧＳに共通接続されている。
【００３５】
各メモリセルトランジスタＭＴは、半導体基板上にゲート絶縁膜を介在して形成された積層ゲート構造を備えたＭＯＳＦＥＴ(metal oxide semiconductor field effect transistor)である。積層ゲート構造は、ゲート絶縁膜上に形成された電荷蓄積層（浮遊ゲート電極）と、電荷蓄積層上にゲート間絶縁膜を介在して形成された制御ゲート電極とを含んでいる。各ＮＡＮＤストリングにおいて、ｎ個のメモリセルトランジスタＭＴは、選択トランジスタＳＴ１のソースと選択トランジスタＳＴ２のドレインとの間に、それぞれの電流経路が直列接続されるように配置されている。すなわち、ｎ個のメモリセルトランジスタＭＴを、隣接するもの同士でソース領域若しくはドレイン領域を共有するような形でＹ方向に直列接続させる。
【００３６】
そして、最もドレイン側に位置するメモリセルトランジスタＭＴから順に、制御ゲート電極がワードラインＷＬ１〜ＷＬｎにそれぞれ接続されている。したがって、ワードラインＷＬ１に接続されたメモリセルトランジスタＭＴのドレインは選択トランジスタＳＴ１のソースに接続され、ワードラインＷＬｎに接続されたメモリセルトランジスタＭＴのソースは選択トランジスタＳＴ２のドレインに接続されている。
【００３７】
ワードラインＷＬ１〜ＷＬｎは、メモリブロックＢＬＫ内のＮＡＮＤストリング間で、メモリセルトランジスタＭＴの制御ゲート電極を共通に接続している。つまり、メモリブロックＢＬＫ内において同一行にあるメモリセルトランジスタＭＴの制御ゲート電極は、同一のワードラインＷＬに接続される。この同一のワードラインＷＬに接続される複数のメモリセルは１ページとして取り扱われ、このページ毎にデータの記録およびデータの読み出しが行われる。すなわち、ページは、ＮＡＮＤフラッシュメモリチップにおける記録および読み出しの単位となる単位ブロック（第１記憶領域）である。ページは、複数を纏めて管理することができる（第２記憶領域）。
【００３８】
また、ビット線ＢＬ１〜ＢＬｎは、メモリブロックＢＬＫ間で、選択トランジスタＳＴ１のドレインを共通に接続している。つまり、複数のメモリブロックＢＬＫ内において同一列にあるＮＡＮＤストリングは、同一のビット線ＢＬに接続される。
【００３９】
メモリセルトランジスタＭＴは、浮遊ゲート電極に蓄えられる電荷の量に応じて電圧が変化し、この電圧の違いに応じた情報を記憶する。メモリセルトランジスタＭＴは、１ビットの情報を記憶するように構成されていてもよいし、複数ビットの情報を記憶するように構成されていてもよい。本実施形態のＮＡＮＤフラッシュメモリチップ２３および２５は、２ビットの情報を記憶可能に構成されている。
【００４０】
そして、ＮＡＮＤフラッシュメモリチップ内の、それぞれ図示されないセンスアンプおよび電位発生回路などを含む制御回路は、ＮＡＮＤフラッシュメモリチップに供給されたデータをメモリセルトランジスタＭＴに書き込み、メモリセルトランジスタＭＴに記憶されているデータをＮＡＮＤフラッシュメモリチップの外部に出力することが可能な構成を有している。
【００４１】
上述したように、ＮＡＮＤフラッシュメモリチップは、１のメモリブロックＢＬＫには複数のページが含まれる。また、複数のメモリブロックＢＬＫでプレーンが構成される。１のＮＡＮＤフラッシュメモリチップ内の異なるプレーンは、並列的にアクセス可能とされている。一方、１のプレーン内の異なるブロックは、並列アクセス不可とされている。
【００４２】
ＮＡＮＤフラッシュメモリチップに対する多値記憶について、図４を用いて概略的に説明する。上述したように、ＮＡＮＤフラッシュメモリチップにおいては、浮遊ゲート電極に蓄えられる電荷量に応じた電圧の変化を利用して情報を記憶する。したがって、電圧の変化または電荷量に対して複数の信号点を設定することで、多値の情報を記憶させることができる。
【００４３】
本実施形態では、図４の左側に例示されるように、浮遊ゲート電極に蓄積される電荷量に対して３の信号点を設けることで、メモリセルトランジスタＭＴの状態を電荷の蓄積量に応じた４の状態に分類し、２ビットの情報を記憶させることができる。図４の例では、各信号点を閾値＃１、閾値＃２および閾値＃３としている。
【００４４】
このとき、状態が隣接する符号のハミング距離を１にするように、各状態に符号を割り当てる。図４の例では、２ビットのうち上位ビットを「Ｕ：Upper」、下位ビットを「Ｌ：Lower」とし、閾値＃１＜閾値＃２＜閾値＃３としたとき、電荷量が閾値＃３よりも多い状態に対して上位ビットに「０」を、下位ビットに「１」をそれぞれ割り当てる。電荷量が閾値＃３よりも少なく閾値＃２よりも多い状態に対して上位ビットに「１」を、下位ビットに「１」をそれぞれ割り当てる。電荷量が閾値＃２よりも少なく閾値＃１よりも多い状態に対して上位ビットに「１」を、下位ビットに「０」をそれぞれ割り当てる。電荷量が閾値＃１よりも少ない状態に対して上位ビットに「０」を、下位ビットに「０」をそれぞれ割り当てる。
【００４５】
ワードラインＷＬからは、上位ビットおよび下位ビットをそれぞれ読み出すことができる。本実施形態に適用可能なＮＡＮＤフラッシュメモリチップの実際の使用形態においては、ワードラインＷＬを、上位ビットのみを読み出すワードラインＷＬと、下位ビットのみを読み出すワードラインＷＬとに分けて用いている。換言すれば、各ページは、上位ビットのみからなるページ（Ｕｐｐｅｒビットページと呼ぶ）と、下位ビットのみからなるページ（Ｌｏｗｅｒビットページと呼ぶ）に分別される。
【００４６】
＜エンコード処理＞
次に、図５および図６を用いて、本実施形態による誤り訂正符号のエンコード処理について、より詳細に説明する。図５は、本実施形態による記録フォーマットの一例を示す。図５において、上述した図１および図２と挙通する部分には同一の符号を付し、詳細な説明を省略する。なお、ＲＳエンコーダ２１Ａ（第２の誤り訂正符号生成部）は、図１におけるＲＳ  Ｅ／Ｄ部２１のエンコード機能を実現する部位を示す。
【００４７】
図５において、それぞれ１のデータブロックＤａｔａ（またはデータブロックＲＳ）、データブロックＣＲＣおよびデータブロックＢＣＨの組からなるデータブロック群が記録されるＮＡＮＤフラッシュメモリチップおよびプレーンが、それぞれチップＣｈ＃ｎおよびプレーンＰｌ＃ｎ（それぞれｎは１６進表記の数）として示されている。
【００４８】
この例では、フラッシュメモリ部１３は、ＮＡＮＤフラッシュメモリチップ２３および２５を合計して１６個のＮＡＮＤフラッシュメモリチップ（チップＣｈ＃０〜Ｃｈ＃Ｆ）を有する。これらのうち、データ部として示されるチップＣｈ＃０〜Ｃｈ＃Ｅは、図１における各ＮＡＮＤフラッシュメモリチップ２３に対応する。冗長部として示されるチップＣｈ＃Ｆは、図１におけるＮＡＮＤフラッシュメモリチップ２５に対応する。また、各チップＣｈ＃０〜Ｃｈ＃Ｆは、それぞれ、プレーンＰｌ＃０〜Ｐｌ＃３の４プレーン構成とされている。上述したデータブロック群は、１ページに記録される。
【００４９】
図６は、本実施形態による誤り訂正符号化処理を示す一例のフローチャートである。この図６のフローチャートと上述した図５とを用いて、本実施形態による誤り訂正符号化処理について説明する。ステップＳ１０で、各Ｅ／Ｄ部２２は、ＮＡＮＤフラッシュコントローラ２０内のメモリから、所定量（この例では５１２バイト）の原データを取得する。このとき、当該原データは、ＲＳ  Ｅ／Ｄ部２１にも取得され、図示されないメモリに格納される。
【００５０】
次のステップＳ１１で、Ｅ／Ｄ部２２において、ＣＲＣエンコーダ２６が原データの８ビット（第２のデータ）毎にＣＲＣを計算し、ＣＲＣ符号（第１の誤り検査符号）を生成する。この例では、５１２バイトの原データから、４バイトのＣＲＣ符号が生成されている。ＣＲＣ符号は、ＢＣＨエンコーダ２７に供給される。次のステップＳ１２で、ＢＣＨエンコーダ２７は、原データの８ビット毎にＢＣＨ符号を生成すると共に、ステップＳ１１で生成されたＣＲＣ符号の８ビット毎にＢＣＨ符号を生成する。この例では、５１２バイトの原データと、４バイトのＣＲＣ符号とから、２６バイトのＢＣＨ符号（第１の誤り訂正符号）が生成されている。
【００５１】
そして、次のステップＳ１３で、原データと、原データから生成したＣＲＣ符号と、原データおよびＣＲＣ符号から生成したＢＣＨ符号とが、ＮＡＮＤフラッシュメモリチップ２３のプレーンの１ページに記録される。例えば、最初の記録では、ＮＡＮＤフラッシュメモリチップＣｈ＃０のプレーンＰｌ＃０内の１のページに、これら原データ、ＣＲＣ符号およびＢＣＨ符号が、それぞれデータブロックＤａｔａ（第１のデータ）、データブロックＣＲＣおよびデータブロックＢＣＨとして記録される。
【００５２】
次のステップＳ１４で、規定数のデータ処理を行ったか否かが判別される。例えば、データ部に対応する全てのＮＡＮＤフラッシュメモリチップＣｈ＃０〜Ｃｈ＃Ｅの、全てのプレーンＰｌ＃０〜Ｐｌ＃３それぞれに対し、１ページずつ、データブロックＤａｔａ、データブロックＣＲＣおよびデータブロックＢＣＨが記録されたか否かが判定される。若し、未だ規定数のデータ処理が行われていないと判定されたら、処理がステップＳ１０に戻され、次の所定量の原データが取得される。
【００５３】
処理がステップＳ１０に戻された際に、次の所定量の原データに基づき生成されたデータブロックＤａｔａ、データブロックＣＲＣおよびデータブロックＢＣＨは、直前の処理までにデータブロックＤａｔａ、データブロックＣＲＣおよびデータブロックＢＣＨが記録された各プレーンとは異なるプレーンのページに記録される。これは、例えば、各ＮＡＮＤフラッシュメモリチップＣｈ＃０〜Ｃｈ＃Ｅを通して、各プレーンＰｌ＃０〜Ｐｌ＃３それぞれの１ページに対して順次、データブロックＤａｔａ、データブロックＣＲＣおよびデータブロックＢＣＨからなるデータブロック群を記録していくことで実現できる。
【００５４】
一方、ステップＳ１４で、規定数のデータ処理が行われたと判定されたら、処理はステップＳ１５に移行される。ステップＳ１５では、ＲＳエンコーダ２１Ａで、原データに対するＲＳ符号を生成する。上述のステップＳ１０〜ステップＳ１３の処理において、ＲＳエンコーダ２１Ａは、ＮＡＮＤフラッシュメモリチップＣｈ＃０〜Ｃｈ＃Ｅの全てのプレーンＰｌ＃０〜Ｐｌ＃３に対して１ページずつ記録されたデータブロックＤａｔａと同じデータを取得している。ＲＳエンコーダ２１Ａは、この取得したデータから、データブロックＤａｔａを横断して、データブロックＤａｔａ内の位置が対応する８ビット（１シンボル）ずつデータを取り出して（第３のデータ）、ＲＳ符号（第２の誤り訂正符号）を生成する。
【００５５】
次のステップＳ１６で、Ｅ／Ｄ部２４において、ＣＲＣエンコーダ２６’が上述のステップＳ１５で生成されたＲＳ符号の８ビット毎にＣＲＣを計算し、ＣＲＣ符号を生成する。ＣＲＣ符号は、Ｅ／Ｄ部２４内のＢＣＨエンコーダ２７’に供給される。次のステップＳ１７で、ＢＣＨエンコーダ２７’がＲＳ符号の８ビット毎にＢＣＨ符号を生成すると共に、ステップＳ１６で生成されたＣＲＣ符号の１バイト毎にＢＣＨ符号を生成する。
【００５６】
そして、次のステップＳ１８で、ＲＳ符号と、ＲＳ符号から生成したＣＲＣ符号と、ＲＳ符号およびＣＲＣ符号から生成したＢＣＨ符号とが、ＮＡＮＤフラッシュメモリチップ２５（ＮＡＮＤフラッシュメモリチップＣｈ＃Ｆ）のプレーンの１ページに記録される。このとき、ＮＡＮＤフラッシュメモリチップＣｈ＃Ｆの各プレーンＰｌ＃０〜Ｐｌ＃３の１ページに、これらＲＳ符号と、ＲＳ符号から生成したＣＲＣ符号と、ＲＳ符号およびＣＲＣ符号から生成したＢＣＨ符号とが、それぞれデータブロックＲＳ（第４のデータ）、データブロックＣＲＣおよびデータブロックＢＣＨとして記録される。
【００５７】
ここで、上述したように、ＲＳ符号は、データブロックＤａｔａを横断する方向に生成されるため、ページ方向ではデータブロックＤａｔａと同サイズで、データブロックＤａｔａを横断する方向では複数のページを跨ぐサイズのブロックのデータとして形成される。そこで、このブロックからページ方向のデータ順が変わらないようにデータを選択して、データブロックＤａｔａと同じサイズのブロックをデータブロックＲＳとして作成し、ＮＡＮＤフラッシュメモリチップ２５に対して記録する。
【００５８】
なお、ＮＡＮＤフラッシュメモリチップにおいて、記録したデータが読み出し時に誤りとなる確率がページ毎に異なる場合がある。この場合、例えばデータブロックＲＳを、誤りの期待値が小さいページに記録するようにすると、好ましい。例えばＮＡＮＤフラッシュメモリチップ２５における各ページの誤りの期待値の平均値を求めた際に、当該誤りの期待値が平均値よりも小さい、すなわち、誤りとなる確率が低いページに、データブロックＲＳを記録する。
【００５９】
ここで、メモリセルトランジスタＭＴにおける電荷の蓄積状態に伴うエラーの発生について説明する。図４を用いて説明したように、メモリセルトランジスタＭＴでは、浮遊ゲート電極に蓄積された電荷量に対して閾値判断を行って、上位ビットおよび下位ビットを決定している。より具体的には、上位ビットについては、電荷量が閾値＃１と閾値＃３との間であれば値「１」、それ以外では値「０」となる。また、下位ビットについては、電荷量が閾値＃２より多ければ値「１」、閾値＃２未満であれば値「０」となる。そのため、読み出し時の電荷量が記録時の電荷量と異なっていると、ビットエラーが発生することになる。
【００６０】
図７−１および図７−２を用いて、より具体的に説明する。図７−１は、記録時の電荷量に対し、読み出し時の電荷量が減少してしまった場合の例を示す。記録時には、符号語「１０」を記録するために、閾値＃３より多い電荷量をメモリセルに蓄積させている。これが、読み出し時までに一部のメモリセルの電荷量が閾値＃３より下がってしまうと、上位ビットにおいて誤りが発生することになる。なお、符号語は、前側の値が下位ビット、後側の値が上位ビットを表すものとする。
【００６１】
図７−２は、記録時の電荷量に対し、読み出し時の電荷量が増加してしまった場合の例を示す。記録時には、符号語「１１」を記録するために、閾値＃２より多く、閾値＃３より少ない電荷量をメモリセルに蓄積させている。これが、読み出し時までに一部のメモリセルの電荷量が閾値＃３を超えてしまうと、上位ビットにおいて誤りが発生することになる。
【００６２】
このような、記録時と読み出し時とで電荷量が異なるために誤りが発生するケースは、各閾値毎に２種類あるので、下記の６通りとなる。
（１）符号語「１０」を記録した場合で、読み出し時までに電荷量が減少して閾値＃３未満となり、上位ビットが誤る。
（２）符号語「１１」を記録した場合で、読み出し時までに電荷量が増加して閾値＃３を超え、上位ビットが誤る。
（３）符号語「１１」を記録した場合で、読み出し時までに電荷量が減少して閾値＃２未満となり、下位ビットが誤る。
（４）符号語「０１」を記録した場合で、読み出し時までに電荷量が増加して閾値＃２を超え、下位ビットが誤る。
（５）符号語「０１」を記録した場合で、読み出し時までに電荷量が減少して閾値＃１未満となり、上位ビットが誤る。
（６）符号語「００」を記録した場合で、読み出し時までに電荷量が増加して閾値＃１を超え、上位ビットが誤る。
【００６３】
このように、上位ビットが誤るケースが４通りであるのに対し、下位ビットが誤るケースは２通りである。上位これは、ビットについては閾値判断の機会が２度あるのに対し、下位ビットは、閾値判断の機会が１度のみであるためである。そのため、上述の６通りの例における誤りの発生確率が等しければ、上位ビットの誤りは、下位ビットの誤りの２倍の確率で発生することになる。
【００６４】
これに対応して、本実施形態では、ＲＳエンコーダ２１Ａでエンコードを行うページについて、Ｕｐｐｅｒビットページの数とＬｏｗｅｒビットページの数とを略同数とする。この場合、例えば、図８（ａ）に例示されるように、データ部および冗長部のそれぞれにおいて、ＵｐｐｅｒビットページとＬｏｗｅｒビットページとを交互に配置することが考えられる。また、図８（ｂ）に例示されるように、データ部および冗長部のそれぞれにおいて、ＵｐｐｅｒビットページとＬｏｗｅｒビットページとをそれぞれ纏めて配置してもよい。
【００６５】
すなわち、フラッシュメモリ部１３の全体として、ＵｐｐｅｒビットページとＬｏｗｅｒビットページとは同数存在するため、各プレーンのある１ページについて、誤り確率の小さいＬｏｗｅｒビットページを集めてしまうと、各プレーンの他のページにおいて、誤り確率の大きいＵｐｐｅｒビットページが集中してしまうことになる。この場合、Ｌｏｗｅｒビットページが集中した側ではエラーの発生確率が低くなりエラー訂正も容易となる。一方、Ｕｐｐｅｒビットページが集中した側ではエラーの発生確率が非常に高くなり、ＲＳエンコーダ２１Ａのエラー訂正能力を超えた数のエラーが発生した場合に、エラー訂正不能となってしまうことになる。したがって、ＲＳエンコーダ２１ＡでエンコードするページをＵｐｐｅｒビットページとＬｏｗｅｒビットページとで略同数とし、全体の性質を平均化することで、より効率的なエラー訂正が可能となる。
【００６６】
＜デコード処理＞
次に、本実施形態によるエラー訂正符号のデコード処理について説明する。図９は、本実施形態によるエラー訂正符号のデコード処理を概略的に示す。図９において、ＲＳデコーダ２１Ｂ（第２の誤り訂正部）は、図１におけるＲＳ  Ｅ／Ｄ部２１のデコード機能を実現する部位を示す。また、ＢＣＨデコーダ２８’およびＣＲＣデコーダ２９’は、それぞれＥ／Ｄ部２４に含まれる構成要素であって、Ｅ／Ｄ部２２におけるＢＣＨデコーダ２８およびＣＲＣデコーダ２９にそれぞれ対応する。
【００６７】
本実施形態では、先ず、各ページから読み出したデータについて、矢印Ａに例示されるように、ＢＣＨデコーダ２８および２８’によりページ方向にＢＣＨ符号のデコードを行い、デコード結果に対して、ＣＲＣデコーダ２９および２９’（図９ではそれぞれＣＲＣ  ＤＥＣと表記）によりＣＲＣ符号によるエラー検査を行う。エラー検査の結果、データ部および冗長部におけるエラー数の和が０と判定された場合、エラー訂正処理が完了する。
【００６８】
ここで、ＣＲＣ符号によるエラー検査の結果、誤りが検出されたデータについては、以後のデコード処理においてはＢＣＨ符号によるデコード処理前のデータを用いる。これに限らず、誤りが検出されたデータについて、以後のデコード処理でＢＣＨ符号によるデコード処理を行ったデータを用いてもよい。
【００６９】
ＣＲＣ符号によるエラー検査の結果、データ部および冗長部におけるエラー数の和が０ではないと判定された場合、矢印Ｂに例示されるように、ＲＳデコーダ２１Ｂにより各ページを横断してＲＳ符号のデコードが行われる。ここで、ＲＳデコーダ２１Ｂは、ＣＲＣ符号によるエラー検査結果に応じて、エラー数の和が、０より大きく、且つ、ＲＳ符号の構成により規定される所定数以下の場合には、消失訂正を用いてＲＳ符号のデコードを行い、エラー訂正処理が完了する。
【００７０】
一方、ＣＲＣ符号によるエラー検査結果により、エラー数の和が所定数を超えている場合には、ＲＳデコーダ２１Ｂは、通常の訂正処理によりＲＳ符号のデコードを行う。このＲＳ符号のデコードにより、矢印Ａすなわちページ方向のエラー数が減って再びＢＣＨ符号のデコードが有効になる可能性がある。そこで、ＢＣＨデコーダ２８および２８’、ならびに、ＣＲＣデコーダ２９および２９’は、ＲＳ符号のデコード結果に対して、矢印Ａに従い、さらにＢＣＨ符号のデコードおよびＣＲＣ符号によるエラー検査を行う。ここで、データ部および冗長部によるエラー数の和が０になれば、エラー訂正処理が完了する。
【００７１】
また、この反復して行われたＢＣＨ符号のデコードにより、ページを横断する方向でのエラー数が減って再びＲＳ符号のデコードが有効になる可能性がある。ＣＲＣ符号によるエラー検査結果に応じて、エラー数の和が０より大きく、且つ、所定数以下であれば、ＲＳデコーダ２１Ｂにより再び消失訂正を用いてＲＳ符号のデコードが行われ、エラー訂正処理が完了する。さらに、エラー数の和が所定数以上であるが、前回のＣＲＣ符号によるエラー検査時に対して減少していれば、再びＲＳ符号のデコード、ＢＣＨ符号のデコードおよびＣＲＣ符号によるエラー検査が反復して行われる。
【００７２】
ここで、各ページから読み出された、データ部および冗長部それぞれにおけるデータがＲＳデコーダ２１Ｂに対して供給される。すなわち、複数のＥ／Ｄ部２２によるＢＣＨ符号およびＣＲＣ符号のデコード出力と、Ｅ／Ｄ部２４によるＢＣＨ符号およびＣＲＣ符号のデコード出力とが、ＲＳデコーダ２１Ｂに対して供給される。
【００７３】
より詳細には、例えば、各ＮＡＮＤフラッシュメモリチップ２３における各プレーンの互いに対応するページから読み出された、データブロックＢＣＨ、データブロックＣＲＣおよびデータブロックＤａｔａからなるデータブロック群が、それぞれ対応するＥ／Ｄ部２２に供給される。各Ｅ／Ｄ部２２において、ＢＣＨデコーダ２８は、供給されたデータブロック群に含まれるＢＣＨ符号を、例えば８ビット毎にデコードする。
【００７４】
ＢＣＨデコーダ２８の出力は、ＣＲＣデコーダ２９に供給されると共に、ＲＳデコーダ２１Ｂに供給される。ＣＲＣデコーダ２９は、供給されたＢＣＨデコーダ２８の出力におけるＣＲＣ符号をデコードしてエラー検査を行い、エラーの有無を出力する。
【００７５】
Ｅ／Ｄ部２４においても同様に、ＮＡＮＤフラッシュメモリチップ２５において各プレーンの互いに対応するページからそれぞれ読み出された、データブロックＢＣＨ、データブロックＣＲＣおよびデータブロックＲＳとからなるデータブロック群が供給される。各Ｅ／Ｄ部２４は、供給されたデータブロック群に対し、内部のＢＣＨデコーダ２８’でＢＣＨ符号をデコードすると共に、ＣＲＣデコーダ２９’でＣＲＣ符号をデコードする。
【００７６】
ＲＳデコーダ２１Ｂは、これら各Ｅ／Ｄ部２２でデコードされたデータブロックＤａｔａのデータと、Ｅ／Ｄ部２４でデコードされたデータブロックＲＳのデータとを、上述した図９に矢印Ｂで例示されるように、全プレーンを横断してプレーン毎に例えば８ビット（１シンボル）ずつ読み込む。そして、ＲＳデコーダ２１Ｂは、読み込んだデータブロックＲＳからＲＳ符号をデコードし、データブロックＤａｔａおよびデータブロックＲＳにおける、ＲＳ符号のエラー訂正能力で訂正可能なエラーを訂正する。
【００７７】
ＲＳデコーダ２１Ｂについて、より詳細に説明する。図１０−１は、ＲＳデコーダ２１Ｂの一例の構成を示す。ＲＳデコーダ２１Ｂは、シンドローム計算部３０、ならびに、誤り訂正部３１および３４を有すると共に、誤り訂正部３１に接続される誤り位置計算部３２および誤りベクトル計算部３３と、誤り訂正部３４に接続される誤り位置取得部３５および誤りベクトル計算部３６とを有する。すなわち、誤り訂正部３１、誤り位置計算部３２および誤りベクトル計算部３３が第４の誤り訂正部を構成する。また、誤り訂正部３４、誤り位置取得部３５および誤りベクトル計算部３６が第３の誤り訂正部を構成する。
【００７８】
さらに、ＲＳデコーダ２１Ｂは、コントローラ４０およびスイッチ４１を有する。コントローラ４０は、例えばプロセッサを有し、所定のプログラムに従いＲＳデコーダ２１Ｂの各部を制御する。スイッチ４１は、コントローラ４０の制御により一方および他方の選択入力端のうち何れかが選択されるようになっており、ＲＳデコーダ２１Ｂから出力するデータを選択する。コントローラ４０は、ＮＡＮＤフラッシュコントローラ２０の機能の一部としてもよい。
【００７９】
誤り訂正部３１は、ＲＳ符号の通常の誤り訂正により最大ｔ個のシンボルの誤り訂正を行う。一方、誤り訂正部３４は、ＲＳ符号の消失訂正により最大２ｔ個のシンボルの誤り訂正を行う。
【００８０】
シンドローム計算部３０は、ＲＳ符号によるシンドロームを計算する。シンドローム計算部３０に対して、ＢＣＨデコーダ２８から出力された、それぞれＢＣＨ符号およびＣＲＣ符号がデコードされた各データブロックＤａｔａからの１シンボル毎のデータが供給される。それと共に、ＢＣＨデコーダ２８’から出力された、それぞれＢＣＨ符号およびＣＲＣ符号がデコードされた各データブロックＲＳからの１シンボル毎のデータがシンドローム計算部３０に供給される。
【００８１】
ＲＳ符号においては、ｔ個のシンボルを訂正するためには、２ｔ個のシンドロームを計算する必要がある。ｔ＝２とした場合、シンドローム計算部３０は、データブロックＤａｔａのデータとデータブロックＲＳのデータとから、公知の方法により２ｔ個（＝４個）のシンドロームＳ0、Ｓ1、Ｓ2およびＳ3を計算する。シンドロームの計算方法は、例えば「今井秀樹著、符号理論、社団法人電子情報通信学会刊、平成１３年６月１日初版第９刷発行」などに記載がある。シンドロームの計算結果は、誤り位置計算部３２および誤りベクトル計算部３３に供給されると共に、誤りベクトル計算部３６に供給される。
【００８２】
通常の誤り訂正の場合には、計算されたシンドロームＳ0、Ｓ1、Ｓ2およびＳ3を用いて、誤り位置計算部３２および誤りベクトル計算部３３にて下記の式（１）に従い誤り位置と誤りベクトルとを計算する。このとき、誤りベクトル計算部３３は、後述する誤り位置取得部３５で取得された誤り位置を示す情報をさらに用いて、誤りベクトルを計算する。なお、式（１）における４×２行列の各要素、ならびに、後述する式（２）における４×４行列の各要素は、ガロア体の原始元である。
【００８３】
【数１】
2011203878.tif 000003
【００８４】
ＲＳ符号による通常の誤り訂正においては、上述の式（１）により、未知数がｔ個の誤り位置およびｔ個の誤りベクトルの２ｔ個である方程式の解を求めて誤りを訂正する。この場合、求めるべき変数は、誤り位置を示す変数ｉおよび変数ｊ、ならびに、誤りベクトルを示す変数ｅ0および変数ｅ1の４個である。シンドロームＳ0、Ｓ1、Ｓ2およびＳ3の値は、シンドローム計算部３０により求められているので、誤り位置計算部３２および誤りベクトル計算部３３において４元の連立方程式の解を求めることで、これらの変数を算出することができる。
【００８５】
誤り位置計算部３２および誤りベクトル計算部３３で計算された、誤り位置を示す変数ｉおよび変数ｊ、ならびに、誤りベクトルを示す変数ｅ0および変数ｅ1は、誤り訂正部３１に供給される。誤り訂正部３１は、これら変数ｉおよび変数ｊ、ならびに、変数ｅ0および変数ｅ1を用いて、ＢＣＨデコーダ２８から供給されたデータブロックＤａｔａのデータと、ＢＣＨデコーダ２８’から供給されたデータブロックＲＳのデータとに対する誤り訂正を行う。誤り訂正処理が施されたデータブロックＤａｔａのデータは、ＢＣＨデコーダ２８に再び入力される。また、誤り訂正処理が施されたデータブロックＲＳのデータは、ＢＣＨデコーダ２８’に再び入力される。
【００８６】
一方、ＣＲＣデコーダ２９によるＣＲＣ計算結果と、ＣＲＣデコーダ２９’によるＣＲＣ計算結果とが誤り位置取得部３５に供給される。誤り位置取得部３５は、供給された計算結果から、誤り位置を示す情報を取得する。ＲＳ符号による消失訂正においては、２ｔ個の誤り位置が分かれば、２ｔ個の誤りを訂正することができる。この場合、誤りベクトル計算部３６は、シンドローム計算部３０により計算されたシンドロームＳ0、Ｓ1、Ｓ2およびＳ3と、ＣＲＣデコーダ２９から供給された誤り位置を示す情報とから、下記の式（２）に従い誤りベクトルを計算する。
【００８７】
【数２】
2011203878.tif 000004
【００８８】
ＲＳ符号による消失訂正においては、上述の式（２）により、未知数が誤りベクトルの２ｔ個である方程式の解を求めて誤りを訂正する。この場合、誤り位置を示す変数ｉ、変数ｊ、変数ｋおよび変数ｌは、ＣＲＣデコーダ２９により既に求められているので、求めるべき変数は、誤りベクトルを示す変数ｅ0、変数ｅ1、変数ｅ2および変数ｅ3である。したがって、誤りベクトル計算部３６において４元の連立方程式の解を求めることで、これらの変数を算出することができる。
【００８９】
誤り位置取得部３５で取得された誤り位置を示す情報と、誤りベクトル計算部３６で算出された誤りベクトルを示す変数ｅ0、変数ｅ1、変数ｅ2および変数ｅ3は、誤り訂正部３４に供給される。誤り訂正部３４は、これら誤り位置を示す情報と、変数ｅ0、変数ｅ1、変数ｅ2および変数ｅ3とを用いて、ＢＣＨデコーダ２８から供給されたデータブロックＤａｔａのデータに対する誤り訂正を行う。誤り訂正処理が施されたデータブロックＤａｔａのデータは、スイッチ４１の他方の選択入力端に入力される。
【００９０】
スイッチ４１は、コントローラ４０の制御により一方および他方の選択入力端が選択されるもので、ＲＳデコーダ２１Ｂの出力として、ＢＣＨデコーダ２８の出力と、誤り訂正部３４の出力とのうち何れを用いるかを選択する。
【００９１】
図１１は、本実施形態による誤り訂正処理を示す一例のフローチャートである。図１１に例示される処理は、上述した訂正するシンボル数ｔ＝２の場合の例である。なお、図１１のフローチャートにおける各処理は、コントローラ４０の制御に従い各部が制御されて行われるものとする。
【００９２】
この図１１のフローチャートの実行に先立って、コントローラ４０は、各ＮＡＮＤフラッシュメモリチップ２３において、各プレーンの互いに対応する１ページから、データブロックＢＣＨ、データブロックＣＲＣおよびデータブロックＤａｔａ（纏めて第２のデータブロック群と呼ぶ）を読み出し、各ＮＡＮＤフラッシュメモリチップ２３に対応する各Ｅ／Ｄ部２２に供給する。各Ｅ／Ｄ部２２は、供給された第２のデータブロック群のデータを、図示されないメモリに格納する。同様に、コントローラ４０は、ＮＡＮＤフラッシュメモリチップ２５から、データブロックＢＣＨ、データブロックＣＲＣおよびデータブロックＲＳ（纏めて第１のデータブロック群と呼ぶ）を読み出し、Ｅ／Ｄ部２４に供給する。Ｅ／Ｄ部２４は、供給された第１のデータブロック群のデータを、図示されないメモリに格納する。
【００９３】
ステップＳ２０で、各ＢＣＨデコーダ２８は、第２のデータブロック群におけるデータブロックＢＣＨに含まれるＢＣＨ符号をデコードする。これにより、ＢＣＨデコーダ２８は、第２のデータブロック群に含まれるデータブロックＣＲＣおよびデータブロックＤａｔａに対して、ＢＣＨ符号の誤り訂正能力で訂正可能な誤りを訂正する誤り訂正処理を行う。同様に、ＢＣＨデコーダ２８’は、第１のデータブロックにおけるデータブロックＢＣＨに含まれるＢＣＨ符号をデコードする。これにより、ＢＣＨデコーダ２８’は、第１のデータブロック群に含まれるデータブロックＣＲＣおよびデータブロックＲＳに対して、ＢＣＨ符号の誤り訂正能力で訂正可能な誤りを訂正する誤り訂正処理を行う。
【００９４】
次のステップＳ２１で、各ＣＲＣデコーダ２９は、ＢＣＨ符号による誤り訂正処理がなされたデータブロックＣＲＣに含まれるＣＲＣ符号をデコードして誤り検査を行う。同様に、ＣＲＣデコーダ２９’は、ＢＣＨ符号による誤り訂正処理がなされたデータブロックＣＲＣに含まれるＣＲＣ符号をデコードして誤り検査を行う。この誤り検査により、ステップＳ２０におけるＢＣＨ符号による誤り訂正でエラーを訂正しきれなかった、第１のデーブロック群におけるエラーセクタの数および位置（ページ）と、第１のデータブロック群におけるエラーセクタ数および位置とが取得される。なお、セクタは、例えばＮＡＮＤフラッシュメモリチップ２３の最小の記録単位であって、１のデータブロックＤａｔａに対応する。
【００９５】
シンドローム計算部３０は、ステップＳ２０で各ＢＣＨデコーダ２８で誤り訂正された各データブロックＤａｔａのデータと、ＢＣＨデコーダ２８’で誤り訂正処理されたデータブロックＲＳのデータとを、プレーンを横断して１シンボルずつ用いて２ｔ個のシンドロームを計算する。
【００９６】
処理は図１１のフローチャートに戻り、ステップＳ２２で、コントローラ４０は、ステップＳ２１の誤り検査結果から、第２のデータブロック群によるエラーセクタ数と、第１のデータブロック群によるエラーセクタ数の和である合計エラーセクタ数が０であるか否かを判定する。若し、合計エラーセクタ数が０であると判定されたら、図１１のフローチャートにおける一連の処理が終了される。この場合には、コントローラ４０によりスイッチ４１の一方の選択入力端が選択され、ＢＣＨデコーダ２８から出力された、誤り訂正処理されたデータを含むデータブロックＤａｔａのデータが、ＲＳデコーダ部２１Ｂの出力とされる。
【００９７】
一方、ステップＳ２２で、コントローラ４０は、合計エラーセクタ数が０ではないと判定したら、処理をステップＳ２３に移行させ、合計エラーセクタ数が４（＝２ｔ）以下であるか否かを判定する。若し、合計エラーセクタ数が４を超えていると判定したら、処理はステップＳ２５に移行される。
【００９８】
一方、ステップＳ２３で、合計エラーセクタ数が４以下であると判定したら、処理をステップＳ２４に移行させる。ステップＳ２４では、ＲＳデコーダ２１Ｂにより消失訂正が行われる。
【００９９】
すなわち、ＲＳデコーダ部２１Ｂにおいて、誤り位置取得部３５は、ステップＳ２１によるＣＲＣデコーダ２９およびＣＲＣデコーダ２９’のエラー検査結果から、ページ単位での誤り位置を示す情報を取得する。誤りベクトル計算部３６は、誤り位置取得部３５で取得された誤り位置を示す情報と、シンドローム計算部３０で、データブロックＤａｔａとデータブロックＲＳとからそれぞれ１だけ選択されたデータに基づき計算された２ｔ個のシンドロームから、上述した式（２）の計算を行い、それぞれの選択されたデータに対応する誤りベクトルを算出する。この場合、ステップＳ２３の判定により合計エラーセクタ数すなわち誤りが存在するページが２ｔ個以下となっているので、式（２）で解を求めることが可能である。
【０１００】
誤り訂正部３４は、誤り位置取得部３５で取得された誤り位置を示す情報と、誤りベクトル計算部３３で算出された誤りベクトルとを用いて、ＢＣＨデコーダ２８から供給されたデータブロックＤａｔａのデータと、ＢＣＨデコーダ２８’から供給されたデータブロックＲＳのデータに対して誤り訂正を行う。また、ステップＳ２４で誤り訂正されたデータに基づきＣＲＣ符号を再計算することで、ＣＲＣ符号を復元する。
【０１０１】
さらに、コントローラ４０の制御によりスイッチ４１の他方の選択入力端が選択され、誤り訂正部３４から出力された、誤り訂正されたデータを含むデータブロックＤａｔａのデータが、ＲＳデコーダ２１Ｂの出力とされる。
【０１０２】
上述したステップＳ２３において、合計エラーセクタ数が４を超えると判定されたら、処理はステップＳ２５に移行され、合計エラーセクタ数が例えばコントローラ４０が有するレジスタなどに記憶される。
【０１０３】
次のステップＳ２６では、ＲＳデコーダ２１Ｂにより通常の誤り訂正処理が行われる。すなわち、ＲＳデコーダ部２１Ｂにおいて、誤り位置計算部３２および誤りベクトル計算部３３は、シンドローム計算部３０で、データブロックＤａｔａとデータブロックＲＳとからそれぞれ１だけ選択されたデータに基づき計算された４個のシンドロームを用いて上述した式（１）の計算を行い、選択されたデータに対応するそれぞれの誤り位置および誤りベクトルを計算する。
【０１０４】
誤り位置および誤りベクトルを示す情報は、それぞれ誤り訂正部３１に供給される。誤り訂正部３１は、これら誤り位置および誤りベクトルとを用いて、ＢＣＨデコーダ２８から供給されたデータブロックＤａｔａのデータと、ＢＣＨデコーダ２８’から供給されたデータブロックＲＳのデータとに対して誤り訂正を行う。
【０１０５】
図１２は、ステップＳ２６におけるＲＳ符号による通常のデコード処理の一例をより詳細に示すフローチャートである。ステップＳ２６１で、誤り位置計算部３２は、シンドローム計算部３０で計算された４個のシンドロームを用いて誤り位置を計算する。次のステップＳ２６２で、誤りベクトル計算部３３は、上述のステップＳ２１で求められたＣＲＣ符号による誤り検査結果を参照し、ステップＳ２６１で計算された誤り位置の全てで誤りすなわちＣＲＣエラーがあるか否かを判定する。
【０１０６】
若し、ステップＳ２６２で、誤り位置の全てでＣＲＣエラーがあると判定したら、処理はステップＳ２６３に移行され、誤りベクトル計算部３３は、シンドローム計算部３０で計算された４個のシンドロームを用いて誤りベクトルを計算する。
【０１０７】
一方、誤り位置のうち少なくとも１つでＣＲＣエラーが無いと判定したら、処理はステップＳ２６４に移行され、誤りベクトルが０とされる。すなわち、それぞれの選択されたデータに対応する誤り位置がステップＳ２１で計算されたエラーセクタの位置の何れでもなければ、選択されたデータに対応する全ての誤りベクトルを０とし、実質的に誤り訂正処理を行わないようにする。これに限らず、誤り訂正部３１において、選択されたデータに対する誤り訂正を行わないようにしてもよい。これにより、本来誤りが発生していないデータ位置に対して誤って誤り訂正処理を実行してさらに誤りを増加させてしまう、所謂誤訂正を防止することができる。
【０１０８】
ここで、この誤訂正の防止を行わないように構成することも可能である。この場合、ステップＳ２６４の処理を省略することができる。例えば、ステップＳ２６１の処理から直接的に処理をステップＳ２６３に移行させる。またこの場合、図１０−２に例示されるように、図１０−１における誤り位置取得部３５から誤りベクトル計算部３３に誤り位置情報を供給する経路を省略することができる。誤り訂正取得部３５は、誤りベクトル計算部３３に誤り位置情報を供給せず、誤りベクトル計算部３３は、誤り位置取得部３５から誤り位置情報の供給を受けない。
【０１０９】
誤りベクトル計算部３３は、ステップＳ２６３またはステップＳ２６４で誤りベクトルを求めたら、処理をステップＳ２６５に移行させ、誤り位置を示す情報（誤り位置のデータ）と誤りベクトルとのＸＯＲを計算し、計算結果を誤り位置のデータと置換する。そして、処理が図１１のステップＳ２７に移行される。
【０１１０】
ステップＳ２６でＲＳデコーダ２１Ｂの通常の誤り訂正が行われると、処理はステップＳ２７に移行される。ステップＳ２７では、ステップＳ２６での誤り訂正結果に対して、ＢＣＨデコーダ２８およびＢＣＨデコーダ２８’で再びＢＣＨ符号のデコードが行われる。
【０１１１】
すなわち、ステップＳ２７では、ステップＳ２６で誤り訂正処理が施されたデータを含むデータブロックＤａｔａのデータがＢＣＨデコーダ２８に入力される。ＢＣＨデコーダ２８は、例えばＥ／Ｄ部２２の図示されないメモリに格納されている第２のデータブロック群に含まれるデータブロックＢＣＨのデータを用いて、誤り訂正部３１から供給されたデータに対してＢＣＨ符号のデコードを行い、ＢＣＨ符号の誤り訂正能力で訂正可能な誤りを訂正する。
【０１１２】
同様に、ステップＳ２６で誤り訂正処理が施されたデータを含むデータブロックＲＳのデータがＢＣＨデコーダ２８’に供給される。ＢＣＨデコーダ２８’は、例えばＥ／Ｄ部２４の図示されないメモリに格納されている第１のデータブロック群に含まれるデータブロックＢＣＨのデータを用いて、誤り訂正部３１から供給されたデータに対してＢＣＨ符号のデコードを行い、ＢＣＨ符号の誤り訂正能力で訂正可能な誤りを訂正する。
【０１１３】
ここで、ステップＳ２６において、上述したステップＳ２０におけるＢＣＨ符号による誤り訂正とは異なる方式で誤り訂正が行われている。本実施形態の例では、上述したように、ステップＳ２６で、ＲＳデコーダ２１ＢによりＲＳ符号を用いてページを横断して誤り訂正が行われている。したがって、データブロックＤａｔａにおいてエラー数が減少し、ステップＳ２０でのＢＣＨ符号による誤り訂正後であっても、さらに同じＢＣＨ符号による誤り訂正が有効となる可能性がある。
【０１１４】
ステップＳ２７でＢＣＨ符号のデコードが行われると、処理はステップＳ２８に移行される。ステップＳ２８では、上述のステップＳ２２と同様にして、ＣＲＣデコーダ２９およびＣＲＣデコーダ２９’が、ステップＳ２０で誤り訂正処理がなされた、第２のデータブロック群および第１のデータブロック群それぞれのデータブロックＣＲＣに含まれるＣＲＣ符号をデコードする。これにより、ステップＳ２７で誤り訂正処理が施されたデータブロックＤａｔａおよびデータブロックＲＳに対して、それぞれ誤り検査を行う。そして、データブロックＤａｔａに対する誤り検査の結果得られたエラーセクタ数と、データブロックＲＳに対する誤り検査の結果得られたエラーセクタ数との和を取って、合計エラーセクタ数とする。
【０１１５】
次のステップＳ２９で、コントローラ４０は、ステップＳ２８での誤り検査結果から、合計エラーセクタ数が０であるか否かを判定する。若し、エラーセクタ数が０であると判定されたら、図１１における一連の処理が終了される。そして、コントローラ４０によりスイッチ４１の一方の選択入力端が選択され、ＢＣＨデコーダ２８から出力された、誤り訂正処理されたデータを含むデータブロックＤａｔａのデータが誤り訂正に成功したデータとされ、ＲＳデコーダ部２１Ｂの出力とされる。
【０１１６】
一方、ステップＳ２９で、合計エラーセクタ数が０ではないと判定されたら、処理をステップＳ３０に移行させ、合計エラーセクタ数が４（＝２ｔ）以下であるか否かを判定する。若し、合計エラーセクタ数が４以下であると判定された場合には、処理はステップＳ２４に移行され、ＢＣＨデコーダ２８から出力された、誤り訂正処理されたデータを含むデータブロックＤａｔａのデータに対して、ＲＳデコーダ２１Ｂにより消失訂正が行われる。そして、コントローラ４０の制御によりスイッチ４１の他方の選択入力端が選択され、誤り訂正部３４から出力された、誤り訂正されたデータを含むデータブロックＤａｔａのデータが誤り訂正に成功したデータとされ、ＲＳデコーダ２１Ｂの出力とされる。
【０１１７】
一方、ステップＳ３０で、合計エラーセクタ数が４を超えていると判定されたら、処理はステップＳ３１に移行される。ステップＳ３１では、コントローラ４０は、現在の合計エラーセクタ数がステップＳ２５で記憶されたエラーセクタ数に対して減少しているか否かを判定する。若し、減少していると判定されたら、処理はステップＳ２５に戻され、エラーセクタ数がコントローラ４０のレジスタなどに記憶され、ステップＳ２６以降の処理を反復して実行する。
【０１１８】
一方、ステップＳ３１で、合計エラーセクタ数が減少してないと判定したら、図１１のフローチャートにおける一連の処理が終了される。この場合には、訂正されていない誤りが存在することになり、例えばエラーを示す出力がなされる。
【０１１９】
図１３〜図１７と、上述の図１１のフローチャートとを用いて、本実施形態による誤り訂正方法を検証する。以下では、ＢＣＨ符号は、２シンボルの訂正が可能であり、ＲＳ符号は、ｔ＝１、すなわち、通常の誤り訂正では１シンボルの訂正が可能で、消失訂正では２シンボルの訂正が可能であるものとする。これに伴い、図１１のフローチャートのステップＳ２３およびステップＳ３０における「合計エラーセクタ数が４以下？」の部分を、「合計エラーセクタ数が２以下？」に読み替えるものとする。
【０１２０】
図１３〜図１７において、各升は、それぞれ１シンボルのデータを示す。横方向がページ方向であって、左端の第０列および第１列の２列がＢＣＨ符号を示す。また、縦方向がページを横断する方向であって、第０列および第１列を除いた下端の第６行および第７行の２行がＲＳ符号を示す。これらＢＣＨ符号およびＲＳ符号に囲まれた部分が原データを示す。すなわち、各行（各ページ）において、左端の２シンボルのＢＣＨ符号は、その行の原データまたはＲＳ符号に対して生成されたものである。同様に、各列において、下端の２シンボルのＲＳ符号は、その列の原データに対してページを横断して生成されたものである。また、各行において、ＢＣＨ符号以外の部分がセクタに対応するものとする。
【０１２１】
さらに、「ＣＲＣ  ＯＫ」は、ＣＲＣ符号のデコードの結果、誤りが検出されなかった行（セクタ）を示す。誤りが存在しているシンボルは、升に片方向の斜線を付して示す。図１３は、誤り訂正処理を行う前のデータを示し、第０行に１個、第１行に６個、第３行に５個、第５行に３個、第６行および第７行にそれぞれ１個のシンボルに誤りが存在している。
【０１２２】
「Ｕｐｐｅｒ」および「Ｌｏｗｅｒ」は、それぞれ図８（ａ）および図８（ｂ）を用いて説明したＵｐｐｅｒビットページおよびＬｏｗｅｒビットページを示す。このように、Ｕｐｐｅｒビットページは、Ｌｏｗｅｒビットページに比べて誤りが発生する確率が高いと考えられる。
【０１２３】
図１１のフローチャートにおいて、ステップＳ２０のＢＣＨ符号のデコードによる誤り訂正では２シンボルの誤り訂正が可能であるので、図１４に例示されるように、誤りが存在するシンボルが２個以下の第０行、第６行および第７行において誤りが訂正される。誤り訂正を行うシンボルを示す升を、クロスされた斜線を付して示す。誤り訂正の結果がステップＳ２１のＣＲＣ符号によるエラー検査に反映され、原データに誤りの存在する行が第１行、第３行および第５行の３行であり、合計エラーセクタ数が３であることが示される。
【０１２４】
合計エラーセクタ数が３であるので、ステップＳ２２の判定で処理がステップＳ２３に移行される。そして、合計エラーセクタ数が２以下ではないので、ステップＳ２３の判定で処理がステップＳ２５に移行され、合計エラーセクタ数＝３が記憶される。次のステップＳ２６でＲＳデコーダ２１Ｂによる通常の誤り訂正では、１シンボルの誤り訂正が可能であるので、図１５に例示されるように、第３列、第４列、第１１（Ｂ）列、第１３（Ｄ）列および第１５（Ｆ）列において誤りが訂正される。これらのうち、第４列および第１３列は、誤り訂正処理前には２シンボル以上の誤りが存在していたが、ステップＳ２０のＢＣＨ符号による誤り訂正により、それぞれ誤りが１シンボルのみとされ、ＲＳ符号による通常の誤り訂正が可能となっている。なお、誤り訂正済みのシンボルを示す升は、幅の狭い斜線を付して示す。
【０１２５】
次に、ステップＳ２７で、再びＢＣＨ符号による誤り訂正が行われる。図１６に例示されるように、誤りが存在するシンボルが２個以下の第５行において誤りが訂正される。この第５行は、誤り訂正処理前には２シンボルを超える誤りが存在していたため、ステップＳ２０におけるＢＣＨ符号による誤り訂正では誤りが訂正できなかった。ステップＳ２６でＲＳ符号による誤り訂正で誤りが存在するシンボルが１個減り、２個となったので、ＢＣＨ符号による誤り訂正が可能となった。
【０１２６】
なお、第３行は、原データ部分の誤りが２シンボルであるが、ＢＣＨ符号自体に誤りが存在するため、ＢＣＨ符号による誤り訂正を行わない。
【０１２７】
ステップＳ２７による誤り訂正の結果がステップＳ２８のＣＲＣ符号によるエラー検査に反映され、原データに誤りの存在する行が第１行および第３行の２行であり、合計エラーセクタ数が２であることが示される。そのため、ステップＳ２９で合計エラーセクタ数が０ではないと判定されて処理がステップＳ３０に移行され、ステップＳ３０で合計エラーセクタ数が２以下であると判定される。ＲＳデコーダ２１Ｂは、消失訂正により、列毎に２シンボルまでの誤りを訂正可能なので、ステップＳ２４に処理が移行され、図１７に例示されるように、残った誤りの存在するシンボルを消失訂正により誤り訂正し、原データを復元する。
【０１２８】
上述の図１４の状態において、第１行、第３行および第５行の３行は、それぞれ行方向に３シンボル以上の誤りが存在すると共に、第１行および第３行ではＢＣＨ符号そのものに誤りが存在し、このままではＢＣＨ符号による誤り訂正ができない。また、第８列は、列方向に３シンボルの誤りが存在し、ＲＳ符号による誤り訂正ができない。このように、これら第１行、第３行および第５行の３行は、上述したＢＣＨ符号およびＲＳ符号の誤り訂正能力では、従来の方法での誤り訂正ができなかった。
【０１２９】
これに対して、本実施形態では、最初のＢＣＨ符号によるページ内の誤り訂正処理の後に、合計エラーセクタ数に基づき、プレーンすなわちＮＡＮＤフラッシュメモリチップを横断して誤り訂正を行うＲＳ符号による誤り訂正の方式を選択する。そして、ＲＳ符号による通常の誤り訂正を選択した場合には、さらにＢＣＨ符号による誤り訂正を行い、その後さらに、合計エラーセクタ数に応じてＲＳ符号による誤り訂正や、ＢＣＨ符号による誤り訂正を反復することで、上述の第１行、第３行および第５行のような場合であっても、誤り訂正可能としている。
【０１３０】
また、原データに対して生成されたＲＳ符号は、原データとは異なるＮＡＮＤフラッシュメモリチップに記録される。これにより、バースト破損に対する耐性と、長期間のデータ保存に必要なランダム誤り訂正能力との向上を両立させることが可能である。
【０１３１】
さらに、誤りが存在するセクタ数に応じて処理を切り替えるため、通常時の誤り訂正速度を向上させることができると共に、消費電力を削減することが可能である。
【０１３２】
本実施形態によれば、ＮＡＮＤフラッシュメモリにて発生するバースト誤りの訂正能力を得るための誤り訂正符号で使用する冗長符号を、ランダム誤りを訂正するための誤り訂正符号で使用する冗長符号としても利用している。そのため、バースト誤り訂正能力を得るために必要な誤り訂正符号を記録する領域に対し、さらに、ランダム誤り訂正能力を向上させるための誤り訂正符号を記録する領域を追加することなく、ランダム誤り訂正能力を向上させることができる。
【０１３３】
本実施形態によれば、記録した情報を再生する際に、先ず、第１のデータに対して第１の誤り訂正手段により誤り訂正を行い、第２の誤り訂正符号に対しては第３の誤り訂正手段による誤り訂正を適用する。次に、第１のデータに対して第１の誤り検査符号を適用すると共に、第４のデータに対して第２の誤り検査符号を適用してそれぞれ誤り検査を行い、第１のデータと第１の誤り検査符号との合計の誤り数が第２の誤り訂正符号による誤り消失訂正能力以内であるときは、第１のデータと第２の誤り訂正符号に対して誤り消失訂正を行ってバースト誤りを訂正するようにしている。一方、第１のデータと第１の誤り検査符号との合計の誤り数が第２の誤り訂正符号による誤り消失訂正能力を超えているときは、第２のデータと第２の誤り訂正符号の対応する位置からなる部分に対し、リード・ソロモン符号による誤り位置と誤りベクトルを求める誤り訂正方法を使用してランダム誤りの訂正を行うようにしている。
【０１３４】
また、本実施形態によれば、上述の一連の誤り訂正の処理を、誤り検査手段により誤りが全て訂正されるか、または、一連の誤り訂正処理で訂正される誤り数が増加しなくなるまで反復して繰り返すようにしている。
【０１３５】
さらに、本実施形態によれば、上述の一連の誤り訂正処理において、リード・ソロモン符号を用いてランダム誤りの訂正を行う処理において、第１の検査符号または第２の検査符号によって検出されていない部分に対して誤り訂正を行わないことにより、誤訂正を防止するようにしている。
【符号の説明】
【０１３６】
１  半導体記憶装置
１１Ａ  ライトバッファ
１１Ｂ  リードバッファ
１３  フラッシュメモリ部
２０  ＮＡＮＤフラッシュコントローラ
２１  リード・ソロモン符号エンコーダ／デコーダ部
２２，２４  エンコーダ／デコーダ部
２３，２５  ＮＡＮＤフラッシュメモリチップ
２６，２６’  ＣＲＣエンコーダ
２７，２７’  ＢＣＨエンコーダ
２８，２８’  ＢＣＨデコーダ
２９，２９’  ＣＲＣデコーダ
３０  シンドローム計算部
３１，３４  誤り訂正部
３２  誤り位置計算部
３３，３６  誤りベクトル計算部
３５  誤り位置取得部
【図１】
2011203878.tif 000005
【図２】
2011203878.tif 000006
【図３】
2011203878.tif 000007
【図４】
2011203878.tif 000008
【図５】
2011203878.tif 000009
【図６】
2011203878.tif 000010
【図７−１】
2011203878.tif 000011
【図７−２】
2011203878.tif 000012
【図８】
2011203878.tif 000013
【図９】
2011203878.tif 000014
【図１０−１】
2011203878.tif 000015
【図１０−２】
2011203878.tif 000016
【図１１】
2011203878.tif 000017
【図１２】
2011203878.tif 000018
【図１３】
2011203878.tif 000019
【図１４】
2011203878.tif 000020
【図１５】
2011203878.tif 000021
【図１６】
2011203878.tif 000022
【図１７】
2011203878.tif 000023