(57)【要約】【課題】誤り訂正回路の大きさを抑制する誤り訂正方法と誤り訂正装置を実現する。【解決手段】  誤り訂正単位２１０は誤りビットの個数が少ないページ内の一領域であり、誤り訂正単位２２０は誤りビットの個数が多いページ内の一領域である。誤り訂正単位２１０は、ユーザデータ領域２１１と第１冗長領域２１２と第２冗長領域２１３とを含んでいる。また、誤り訂正単位２２０は、ユーザデータ領域２２１と第１冗長領域２２２と第２冗長領域２２３とを含んでいる。そして、ユーザデータ領域２１１及び２２１にある誤りを訂正するための第１組の冗長ビットは第１冗長領域２１２及び２２２にそれぞれ記憶される。誤りビットの個数が多いページ内のユーザデータ領域２２１にある誤りを訂正するための第２組の冗長ビットは、誤りビットの個数が少ないページ内の第２冗長領域２１３及び誤りビットの個数が多いページ内の第２冗長領域２２３に分散されて記憶される。【選択図】  図４
2012094132.tif 000002
【特許請求の範囲】
【請求項１】
複数のページによって記憶領域が構成されている不揮発性半導体メモリ装置であって、前記ページのそれぞれがユーザデータ領域と冗長領域とを有する１以上の誤り訂正単位を含んでおり、
該誤り訂正単位の冗長領域は、
その誤り訂正単位内のユーザデータ領域にある誤りを第１の誤り訂正法により訂正するための第１組の冗長ビットを記憶する第１冗長領域と、
その誤り訂正単位が属するページに比較的に多くの誤りが存在している場合に対応するために、当該誤り訂正単位にある誤りを第２の誤り訂正法により訂正するための第２組の冗長ビットを、当該誤り訂正単位と当該ページよりも誤りの少ない１以上の別のページにある誤り訂正単位とに記憶するための第２冗長領域と
を含む、不揮発性半導体メモリ装置。
【請求項２】
比較的に誤りの少ないページと比較的に誤りの多いページとからなる複数のページによって記憶領域が構成されている不揮発性半導体メモリ装置であって、前記ページのそれぞれが、ユーザデータ領域と冗長領域とを有する１以上の誤り訂正単位を含んでおり、
１以上の比較的に誤りの少ないページにある１以上の誤り訂正単位の冗長領域は、
その誤り訂正単位内のユーザデータ領域にある誤りを訂正するための第１組の冗長ビットを記憶する第１冗長領域と、
比較的に誤りの多いページに属する誤り訂正単位にある誤りを訂正するための第２組の冗長ビットの少なくとも一部を記憶するための第２冗長領域と
を含む、不揮発性半導体メモリ装置。
【請求項３】
複数のページによって記憶領域が構成されている不揮発性半導体メモリ装置において、前記ページのそれぞれがユーザデータ領域と冗長領域とを有する１以上の誤り訂正単位を含んでおり、
該誤り訂正単位の冗長領域は、
その誤り訂正単位内のユーザデータ領域にある誤りを第１の誤り訂正法により訂正するための第１組の冗長ビットを記憶する第１冗長領域と、
その誤り訂正単位が属するページに比較的に多くの誤りが存在していることが判明している場合に当該誤り訂正単位にある誤りを第２の誤り訂正法により訂正するための第２組の冗長ビットを、当該誤り訂正単位と当該ページよりも誤りの比較的に少ない別のページにある誤り訂正単位とに分散させて記憶するための第２冗長領域と
を含み、
比較的に誤りの少ないページに属する誤り訂正単位のユーザデータに対しては前記第１組の冗長ビットにより誤り訂正を行うステップと、
比較的に誤りの多いページに属する誤り訂正単位のユーザデータについては、そのユーザデータ領域を分割して、分割されたユーザデータ領域のそれぞれに対して、前記第２冗長領域にある冗長ビットを適用して誤り訂正を行うステップと
を含む不揮発性半導体メモリ装置の誤り訂正方法。
【請求項４】
比較的に誤りの少ないページと比較的に誤りの多いページとからなる複数のページによって記憶領域が構成されている不揮発性半導体メモリ装置において、前記ページのそれぞれが、ユーザデータ領域と冗長領域とを有する１以上の誤り訂正単位を含んでおり、
１以上の比較的に誤りの少ないページにある１以上の誤り訂正単位の冗長領域は、
その誤り訂正単位内のユーザデータ領域にある誤りを訂正するための第１組の冗長ビットを記憶する第１冗長領域と、
比較的に誤りが多いページに属するある誤り訂正単位の誤りを訂正するための第２組の冗長ビットを記憶するための第２冗長領域と
を含み、
比較的に誤りの少ないページに属する誤り訂正単位のユーザデータ領域に対してはその誤り訂正領域内にある前記第１組の冗長ビットにより誤り訂正を行う第１の訂正ステップと、
比較的に誤りの多いページに属する誤り訂正単位のユーザデータ領域については、そのユーザデータ領域を分割して、分割されたユーザデータ領域のそれぞれに対して、前記第２冗長領域の冗長ビット又は比較的に誤りの多いページの当該誤り訂正単位の冗長ビットの全部又は一部あるいはそれらの両方を適用して誤り訂正を行う第２の訂正ステップと
を含む不揮発性半導体メモリ装置の誤り訂正方法。
【請求項５】
比較的に誤りの少ないページと比較的に誤りの多いページとからなる複数のページによって記憶領域が構成されている不揮発性半導体メモリ装置において、前記ページのそれぞれが、ユーザデータ領域と冗長領域とを有する１以上の誤り訂正単位を含んでおり、
１以上の比較的に誤りの少ないページにある１以上の誤り訂正単位の冗長領域は、
その誤り訂正単位内のユーザデータ領域にある誤りを訂正するための第１組の冗長ビットを記憶する第１冗長領域と、
比較的に誤りが多いページのある誤り訂正単位の誤りを訂正するための第２組の冗長ビットを記憶するための第２冗長領域と
を含み、
1以上の比較的に誤りの多いページにある1以上の誤り訂正単位の冗長領域は、その誤り訂正単位内のユーザデータ領域にある誤りを訂正するための少なくとも一組の冗長ビットを記憶しており、
比較的に誤りが多いページにある誤り訂正単位のユーザデータ領域に対してその誤り訂正単位内にある前記一組の冗長ビットにより誤り訂正を行う第１の訂正ステップと、
前記第１の訂正ステップにより当該誤り訂正単位にあるユーザデータの誤りが訂正されたか否かを判断する訂正後状態判断ステップと、
前記訂正後状態判断ステップにより、誤りが訂正されていないと判断された場合には、その誤り訂正単位のユーザデータ領域を分割して、分割されたユーザデータのそれぞれに対して、前記第２冗長領域の冗長ビット又は比較的に誤りの多いページの当該誤り訂正単位にある前記一組の冗長ビット以外の冗長ビットの全部又は一部あるいはそれらの両方を適用して誤り訂正を行うステップと
を含む不揮発性半導体メモリ装置の誤り訂正方法。
【請求項６】
比較的に誤りの少ないページと比較的に誤りの多いページとからなる複数のページによって記憶領域が構成されている不揮発性半導体メモリ装置において、前記ページのそれぞれが、ユーザデータ領域と冗長領域とを有する１以上の誤り訂正単位を含んでおり、
比較的に誤りの多いページにある１以上の誤り訂正単位のユーザデータ領域内にある特定領域が設定されており、
１以上の比較的に誤りの少ないページにある１以上の誤り訂正単位の冗長領域は、
その誤り訂正単位内のユーザデータ領域にある誤りを訂正するための第１組の冗長ビットを記憶する第１冗長領域と、
比較的に誤りが多いページに属するある誤り訂正単位内の前記特定領域の誤りを訂正するための第２組の冗長ビットを記憶するための第２冗長領域と
を含み、
1以上の比較的に誤りの多いページにある1以上の誤り訂正単位の冗長領域は、その誤り訂正単位内のユーザデータ領域にある誤りを訂正するための少なくとも一組の冗長ビットを記憶しており、
比較的誤りが多いページにある誤り訂正単位のユーザデータ領域に対してその誤り訂正単位内にある前記一組の冗長ビットにより誤り訂正を行う第１の訂正ステップと、
前記第１の訂正ステップにより前記誤り訂正単位にあるユーザデータの誤りが訂正されたか否かを判断する訂正後状態判断ステップと、
前記訂正後状態判断ステップにより、誤りが訂正されていないと判断された場合には、前記特定領域に対して、前記第２組の冗長ビットを適用して誤り訂正を行うステップと、
訂正された前記特定領域のデータによって前記特定領域内のデータを置換した後、置換されたデータを含むユーザデータ領域に対して当該誤り訂正単位にある前記一組の冗長ビットにより訂正を行うステップと
を含む不揮発性半導体メモリ装置の誤り訂正方法。
【請求項７】
前記第１の訂正ステップを行う前に、
前記誤り訂正単位のユーザデータにある誤りの数を検出する誤り検出ステップと、
前記誤り検出ステップにより検出された誤りの数が前記第１の訂正ステップにより訂正可能であるか否かを判断して、訂正可能であれば前記第１の訂正ステップに進み、さもなければ前記第２の訂正ステップに進むステップと
をさらに含む請求項４に記載の誤り訂正方法。
【請求項８】
前記誤り検出ステップにおいて、ユーザデータと冗長ビットを０と１の値の数が同じバランス化符号に変換して、不揮発性半導体メモリ装置に書き込み、それを読み出すことにより、０と１の値の数のバランスの崩れを用いて誤りを検出する、請求項７に記載の誤り訂正方法。
【請求項９】
複数のページによって記憶領域が構成されている不揮発性半導体メモリ装置の誤り訂正装置であって、前記ページのそれぞれがユーザデータ領域と冗長領域とを有する１以上の誤り訂正単位を含んでおり、
ある誤り訂正単位のユーザデータにある誤りを第１の誤り訂正法により訂正するための第１組の冗長ビットを当該誤り訂正単位に記憶する第１の冗長ビット書き込み手段と、
前記誤り訂正単位のユーザデータに比較的に多くの誤りが存在している場合には、当該誤り訂正単位にある誤りを第２の誤り訂正法により訂正するための第２組の冗長ビットを、当該誤り訂正単位と当該誤り訂正単位の属するページより誤りの少ない別のページに属する誤り訂正単位とに分散させて書き込む第２の冗長ビット書き込み手段と、
前記ある誤り訂正単位にある誤りビットを前記第１組の冗長ビットを用いて訂正する第１の誤り訂正実行手段と、
前記第１の誤り訂正実行手段により前記誤り訂正単位のユーザデータにある誤りが訂正されたか否かを判断する訂正後状態判断手段と、
前記訂正後状態判断手段により、誤りが訂正されていないと判断された場合には、前記第２組の冗長ビットを用いて当該誤り訂正単位にある誤りビットを訂正する第２の誤り訂正実行手段と
を備えた誤り訂正装置。
【請求項１０】
前記誤り訂正単位にある誤りビットの数を検出する誤り検出手段と、
前記誤り検出手段により検出された誤りビットの数が前記第１の誤り訂正実行手段により訂正可能であるか否かを判断する訂正方法判断手段と
をさらに備えており、
前記訂正方法判断手段により訂正可能と判断された場合には、前記第１の誤り訂正実行手段が誤り訂正を実行し、さもなければ、前記第２の誤り訂正実行手段が誤り訂正を実行する、請求項９に記載の誤り訂正装置。
【請求項１１】
前記誤り検出手段が、ユーザデータと冗長ビットを０と１の値の数が同じバランス化符号に変換して、不揮発性半導体メモリ装置に書き込み、それを読み出すことにより、０と１の値の数のバランスの崩れを用いて誤りの数を検出する、請求項１０に記載の誤り訂正装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性半導体メモリ装置と、そのデータの誤り訂正方法に関する。
【背景技術】
【０００２】
フラッシュメモリと呼ばれる不揮発性半導体メモリは、小型化、大容量化が進んでいる。このようなフラッシュメモリの記憶領域は、一定のサイズの複数のブロックから構成されており、各ブロックは一定のサイズの複数のページから構成されている。そして、データの消去はブロック単位で行われ、データの読み込み及び書き込みはページ単位で行われる。
【０００３】
フラッシュメモリは、メモリセルの微細化と多値化により、その記憶容量が大きくなっている。その副作用として、誤りビットの数も増加する。この誤りを訂正するために、誤り訂正符号（ECC, Error Correcting Code）を用いて誤り訂正を行うことが一般的である。誤り訂正符号の例としては、ＢＣＨ符号、リード・ソロモン符号（Reed Solomon Code）、低密度パリティ検査符号（LDPC Code, Low-Density Parity-Check Code）が挙げられる。
【０００４】
フラッシュメモリにおいて、誤り訂正符号は各ページの一部の領域に記憶されている。その一例を図１９に示している。領域７００は、ある１つのページを４つに分割した領域である。つまり、領域７００が４つ並んで１つのページが構成されることになる。そして、領域７００は、ユーザデータ領域７０１と、例えば、２４ビットの誤り訂正能力を有する誤り訂正符号の冗長領域７０２とから構成されている。ユーザデータ領域７０１にはユーザデータが記憶されており、そのサイズは一例として１キロバイトである。冗長領域７０２には誤り訂正符号の冗長ビットが記憶されており、そのサイズは一例として３３６ビットである。冗長領域７０２のサイズが大きければ大きいほど、誤り訂正能力は向上する。メモリセルの多値化や微細化に対応して、あるいは信頼性の向上を目的として、冗長ビット数は増大する傾向にある。その一方で、冗長領域７０２のサイズが増加すると、誤り訂正回路の規模も増大する。このような回路規模の増大は、メモリの実装面積の減少を招き、記憶容量の減少をもたらす。また、冗長ビット数または冗長領域７０２のサイズの増加は、ユーザデータ領域７０１に記憶されているユーザデータを読み取って再生するのに要する時間の増加にもつながる。
【０００５】
このような問題を解消すべく、特許文献１には、メモリチップの内部と外部の双方に誤り訂正回路を設けた半導体メモリが開示されている。
【０００６】
また、特許文献２には、誤り訂正能力を超える誤りビットが検出された場合には、誤り訂正を行わないこととして、さらなる誤りビットの付加を防止することのできる誤り訂正装置が記載されている。
【０００７】
特許文献３には、誤り率の高い部分と低い部分を一つのＥＣＣフレームに混在させることで、各ＥＣＣフレーム間で誤り率の場所依存によるバラツキを均一化させて、誤り訂正の効率が向上する不揮発性半導体記憶装置が記載されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平１１−１４３７８７号公報
【特許文献２】特開２００９−２１１７４２号公報
【特許文献３】特開２００８−１０８２９７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
このような従来技術の課題に鑑み、本発明は、不揮発性半導体メモリのための新たな誤り訂正方法及びその装置を提供するものである。
【００１０】
本発明は、不揮発性半導体メモリの誤りビットの発生状況の傾向に着目し、誤り訂正符号の記憶領域を有効に活用し、誤り訂正回路の大きさを抑制する誤り訂正方法と誤り訂正装置を実現することを目的とする。
【００１１】
まず、データが誤っているビットの発生状況の傾向について図１と図２を参照して説明する。図１は、横軸にページ番号、縦軸に誤りビットの個数を示したグラフである。図に例示しているように、ページ番号が０〜１２０の各ページにある誤りビットの個数は、最も多くて約１２０個である。これに対し、ページ番号が１２０〜１２７のページにある誤りビットの個数は、最も多くて約３７０個、最少でも約１５０個である。つまり、誤りビットの個数が少ないページが大半であり、誤りビットがある一定数以上存在するページは、ページ番号の大きなページに数が限られている。この例でもわかるように、誤りビットが多い少数のページと、そうでない多数のページが存在するのが普通である。誤りビットが多いページは、ブロックの先頭や終わりの部分に偏在している傾向にあって、ブロックの全体に分布しているのではないことが分かる。
【００１２】
書き込みと読み取りの誤りには、ビット値が正しくは「０」であるビットを「１」と誤る誤りと、ビット値が正しくは「１」であるビットを「０」と誤る誤りの２種類がある。以下、前者の誤りをマイナス（−）誤りと呼び、後者の誤りをプラス（＋）誤りと呼ぶことにする。この２種類の誤りの発生の傾向を図２に示している。ページ番号を横軸にとり、マイナス誤りの個数を縦軸の負の方向にとり、プラス誤りの個数を縦軸の正の方向にとっている。そして、マイナス誤りの個数を結んだ線を符号Ｃ１で示しており、プラス誤りの個数を結んだ線を符号Ｃ２で示している。この図からわかるように、マイナス誤りの多いページは、プラス誤りが非常に少ない。また、プラス誤りの多いページは、マイナス誤りが非常に少ない。つまり、誤りビットそのものの個数の多寡に関わらず、各ページについてみると、あるページについてマイナス誤りとプラス誤りが同様の頻度で発生することはほとんどなく、いずれか一方が他方に比べて極端に多い傾向があるといえる。
【００１３】
図３は、誤りビットを含んだページを読み取って従来の誤り訂正を行う際に、誤り訂正された誤りビット数の分布を各ページ毎に模式的に示したグラフである。誤りビットの数が大きいページを基準に冗長領域のサイズを決定するため、実際には多くのページに対しては過剰な冗長ビットを付加していることになることがわかる。つまり、誤りビットの個数が少ないページの冗長領域が有効に活用されていないということがいえる。そこで、本発明は、このような誤りビットの発生状況の傾向と冗長領域の使用状況とに着目して、なされたものである。
【課題を解決するための手段】
【００１４】
本発明は、まず、複数のページによって記憶領域が構成されている不揮発性半導体メモリ装置であって、前記ページのそれぞれがユーザデータ領域と冗長領域とを有する１以上の誤り訂正単位を含んでおり、該誤り訂正単位は、その誤り訂正単位内のユーザデータ領域にある誤りを第１の誤り訂正法により訂正するための第１組の冗長ビットを記憶する第１冗長領域と、その誤り訂正単位が属するページに比較的に多くの誤りが存在している場合に対応するために、当該誤り訂正単位にある誤りを第２の誤り訂正法により訂正するための第２組の冗長ビットを、当該誤り訂正単位と当該ページよりも誤りの少ない１以上の別のページにある誤り訂正単位とに記憶するための第２冗長領域とを含む、不揮発性半導体メモリ装置を提供する。
【００１５】
また、本発明は、複数のページによって記憶領域が構成されている不揮発性半導体メモリ装置において、前記ページのそれぞれがユーザデータ領域と冗長領域とを有する１以上の誤り訂正単位を含んでおり、該誤り訂正単位は、その誤り訂正単位内のユーザデータ領域にある誤りを第１の誤り訂正法により訂正するための第１組の冗長ビットを記憶する第１冗長領域と、その誤り訂正単位が属するページに比較的に多くの誤りが存在していることが判明している場合に当該誤り訂正単位にある誤りを第２の誤り訂正法により訂正するための第２組の冗長ビットを、当該誤り訂正単位と当該ページよりも誤りの比較的に少ない別のページにある誤り訂正単位とに分散させて記憶するための第２冗長領域とを含み、比較的に誤りの少ないページに属する誤り訂正単位のユーザデータに対しては前記第１組の冗長ビットにより誤り訂正を行うステップと、比較的に誤りの多いページに属する誤り訂正単位のユーザデータについては、そのユーザデータ領域を分割して、分割されたユーザデータ領域のそれぞれに対して、前記第２冗長領域にある第２組の冗長ビットを適用して誤り訂正を行うステップとを含む不揮発性半導体メモリ装置の誤り訂正方法を提供する。
【００１６】
さらに、本発明は、複数のページによって記憶領域が構成されている不揮発性半導体メモリ装置において、前記ページのそれぞれがユーザデータ領域と冗長領域とを有する１以上の誤り訂正単位を含んでおり、誤り訂正単位は、その誤り訂正単位内のユーザデータ領域にある誤りを第１の誤り訂正法により訂正するための第１組の冗長ビットを記憶する第１冗長領域と、その誤り訂正単位が属するページに比較的に多くの誤りが存在していることが判明している場合には、当該誤り訂正単位にある誤りを第２の誤り訂正法により訂正するための第２組の冗長ビットを、当該誤り訂正単位と当該ページよりも誤りの比較的に少ない1以上の別のページにある誤り訂正単位とに記憶するための第２冗長領域とを含み、ある誤り訂正単位のユーザデータに対して前記第１組の冗長ビットを用いて誤り訂正する第１の訂正ステップと、前記第１の訂正ステップにより前記誤り訂正単位にあるユーザデータの誤りが訂正されたか否かを判断する訂正後状態判断ステップと、前記訂正後状態判断ステップにより、誤りが訂正されていないと判断された場合には、前記第２組の冗長ビットを用いて当該誤り訂正単位のユーザデータに対して誤り訂正を行う第２の訂正ステップとを含む誤り訂正方法を提供する。
【００１７】
ここで、前記第１の訂正ステップを行う前に、前記誤り訂正単位のユーザデータにある誤りを検出する誤り検出ステップと、前記誤り検出ステップにより検出された誤りが前記第１の訂正ステップにより訂正可能であるか否かを判断して、訂正可能であれば前記第１の訂正ステップに進み、さもなければ前記第２の訂正ステップに進むステップとをさらに含んでいてもよい。
【００１８】
また、前記誤り検出ステップにおいて、ユーザデータと冗長ビットを０と１の値の数が同じバランス化符号に変換して、不揮発性半導体メモリ装置に書き込み、それを読み出すことにより、０と１の値の数のバランスの崩れを用いて誤りを検出してもよい。
【００１９】
そして、本発明は、複数のページによって記憶領域が構成されている不揮発性半導体メモリ装置の誤り訂正装置であって、前記ページのそれぞれがユーザデータ領域と冗長領域とを有する１以上の誤り訂正単位を含んでおり、ある誤り訂正単位のユーザデータにある誤りを第１の誤り訂正法により訂正するための第１組の冗長ビットを当該誤り訂正単位に記憶する第１の冗長ビット書き込み手段と、前記誤り訂正単位のユーザデータに比較的に多くの誤りが存在している場合には、当該誤り訂正単位にある誤りを第２の誤り訂正法により訂正するための第２組の冗長ビットを、当該誤り訂正単位と当該誤り訂正単位の属するページより誤りの少ない別のページに属する誤り訂正単位とに分散させて書き込む第２の冗長ビット書き込み手段と、前記ある誤り訂正単位にある誤りビットを前記第１組の冗長ビットを用いて訂正する第１の誤り訂正実行手段と、前記第１の誤り訂正実行手段により前記誤り訂正単位のユーザデータにある誤りが訂正されたか否かを判断する訂正後状態判断手段と、前記訂正後状態判断手段により、誤りが訂正されていないと判断された場合には、前記第２組の冗長ビットを用いて当該誤り訂正単位にある誤りビットを訂正する第２の誤り訂正実行手段とを備えた誤り訂正装置を提供する。
【００２０】
ここで、前記誤り訂正単位にある誤りビットを検出する誤り検出手段と、前記誤り検出手段により検出された誤りビットが前記第１の誤り訂正実行手段により訂正可能であるか否かを判断する訂正方法判断手段とをさらに備えていてもよく、前記訂正方法判断手段により訂正可能と判断された場合には、前記第１の誤り訂正実行手段が誤り訂正を実行し、さもなければ、前記第２の誤り訂正実行手段が誤り訂正を実行することができる。
【００２１】
また、前記誤り検出手段が、ユーザデータと冗長ビットを０と１の値の数が同じバランス化符号に変換して、不揮発性半導体メモリ装置に書き込み、それを読み出すことにより、０と１の値の数のバランスの崩れを用いて誤りの数を検出してもよい。
【００２２】
本発明は、さらに、比較的に誤りの少ないページと比較的に誤りの多いページとからなる複数のページによって記憶領域が構成されている不揮発性半導体メモリ装置であって、前記ページのそれぞれが、ユーザデータ領域と冗長領域とを有する１以上の誤り訂正単位を含んでおり、１以上の比較的に誤りの少ないページにある１以上の誤り訂正単位の冗長領域は、その誤り訂正単位内のユーザデータ領域にある誤りを訂正するための第１組の冗長ビットを記憶する第１冗長領域と、比較的に誤りの多いページに属する誤り訂正単位にある誤りを訂正するための第２組の冗長ビットの少なくとも一部を記憶するための第２冗長領域とを含む、不揮発性半導体メモリ装置を提供する。
【００２３】
ここで、訂正を行う対象である比較的に誤りの多いページの誤り訂正単位と、その訂正に用いる冗長ビットの保存先は、一定のルールに基づいて関係付けておくことが出来る。例えば、一定数のページをおいて離れたページ（比較的に誤りの少ないページ）内の対応する位置にある誤り訂正単位に含めた冗長ビットを用いるといったようにである。このような関係性は任意であり、特定の例に限定されるものではない。
【００２４】
本発明は、また、比較的に誤りの少ないページと比較的に誤りの多いページとからなる複数のページによって記憶領域が構成されている不揮発性半導体メモリ装置において、前記ページのそれぞれが、ユーザデータ領域と冗長領域とを有する１以上の誤り訂正単位を含んでおり、１以上の比較的に誤りの少ないページにある１以上の誤り訂正単位の冗長領域は、その誤り訂正単位内のユーザデータ領域にある誤りを訂正するための第１組の冗長ビットを記憶する第１冗長領域と、比較的に誤りが多いページに属するある誤り訂正単位の誤りを訂正するための第２組の冗長ビットを記憶するための第２冗長領域とを含み、比較的に誤りの少ないページに属する誤り訂正単位のユーザデータ領域に対してはその誤り訂正領域内にある前記第１組の冗長ビットにより誤り訂正を行う第１の訂正ステップと、比較的に誤りの多いページに属する誤り訂正単位のユーザデータ領域については、そのユーザデータ領域を分割して、分割されたユーザデータ領域のそれぞれに対して、前記第２冗長領域の冗長ビット又は比較的に誤りの多いページの当該誤り訂正単位の冗長ビットの全部又は一部あるいはそれらの両方を適用して誤り訂正を行う第２の訂正ステップとを含む不揮発性半導体メモリ装置の誤り訂正方法を提供する。
【００２５】
さらに別の実施の形態として、本発明は、比較的に誤りの少ないページと比較的に誤りの多いページとからなる複数のページによって記憶領域が構成されている不揮発性半導体メモリ装置において、前記ページのそれぞれが、ユーザデータ領域と冗長領域とを有する１以上の誤り訂正単位を含んでおり、１以上の比較的に誤りの少ないページにある１以上の誤り訂正単位の冗長領域は、その誤り訂正単位内のユーザデータ領域にある誤りを訂正するための第１組の冗長ビットを記憶する第１冗長領域と、比較的に誤りが多いページのある誤り訂正単位の誤りを訂正するための第２組の冗長ビットを記憶するための第２冗長領域とを含み、1以上の比較的に誤りの多いページにある1以上の誤り訂正単位の冗長領域は、その誤り訂正単位内のユーザデータ領域にある誤りを訂正するための少なくとも一組の冗長ビットを記憶しており、比較的に誤りが多いページにある誤り訂正単位のユーザデータ領域に対してその誤り訂正単位内にある前記一組の冗長ビットにより誤り訂正を行う第１の訂正ステップと、前記第１の訂正ステップにより当該誤り訂正単位にあるユーザデータの誤りが訂正されたか否かを判断する訂正後状態判断ステップと、前記訂正後状態判断ステップにより、誤りが訂正されていないと判断された場合には、その誤り訂正単位のユーザデータ領域を分割して、分割されたユーザデータのそれぞれに対して、前記第２冗長領域の冗長ビット又は比較的に誤りの多いページの当該誤り訂正単位にある前記一組の冗長ビット以外の冗長ビットの全部又は一部あるいはそれらの両方を適用して誤り訂正を行うステップとを含む不揮発性半導体メモリ装置の誤り訂正方法を提供する。
【００２６】
さらに、本発明は、比較的に誤りの少ないページと比較的に誤りの多いページとからなる複数のページによって記憶領域が構成されている不揮発性半導体メモリ装置において、前記ページのそれぞれが、ユーザデータ領域と冗長領域とを有する１以上の誤り訂正単位を含んでおり、比較的に誤りの多いページにある１以上の誤り訂正単位のユーザデータ領域内にある特定領域が設定されており、１以上の比較的に誤りの少ないページにある１以上の誤り訂正単位の冗長領域は、その誤り訂正単位内のユーザデータ領域にある誤りを訂正するための第１組の冗長ビットを記憶する第１冗長領域と、比較的に誤りが多いページに属するある誤り訂正単位内の前記特定領域の誤りを訂正するための第２組の冗長ビットを記憶するための第２冗長領域とを含み、1以上の比較的に誤りの多いページにある1以上の誤り訂正単位の冗長領域は、その誤り訂正単位内のユーザデータ領域にある誤りを訂正するための少なくとも一組の冗長ビットを記憶しており、比較的誤りが多いページにある誤り訂正単位のユーザデータ領域に対してその誤り訂正単位内にある前記一組の冗長ビットにより誤り訂正を行う第１の訂正ステップと、前記第１の訂正ステップにより前記誤り訂正単位にあるユーザデータの誤りが訂正されたか否かを判断する訂正後状態判断ステップと、前記訂正後状態判断ステップにより、誤りが訂正されていないと判断された場合には、前記特定領域に対して、前記第２組の冗長ビットを適用して誤り訂正を行うステップと、訂正された前記特定領域のデータによって前記特定領域内のデータを置換した後、置換されたデータを含むユーザデータ領域に対して当該誤り訂正単位にある前記一組の冗長ビットにより訂正を行うステップとを含む不揮発性半導体メモリ装置の誤り訂正方法を提供する。
【図面の簡単な説明】
【００２７】
【図１】ページ番号と誤りビットの個数との関係を示したグラフである。
【図２】ページ番号とプラス誤り及びマイナス誤りの個数との関係を示したグラフである。
【図３】誤り訂正された誤りビット数の分布をページ毎に模式的に示したグラフである。
【図４】冗長ビットを分散させて記憶する際の誤り訂正単位のデータ構造の第１例を示すダイアグラムである。
【図５】冗長ビットを分散させて記憶する際の誤り訂正単位のデータ構造の第２例を示すダイアグラムである。
【図６】冗長ビットを分散させて記憶する際の誤り訂正単位のデータ構造の第３例を示すダイアグラムである。
【図７】本発明に係るＳＳＤのブロック図である。
【図８】誤り訂正符号部のブロック図である。
【図９】冗長ビットを分散させて記憶する際の誤り訂正単位のデータ構造の第４例を示すダイアグラムである。
【図１０】冗長ビットを分散させて記憶する際の誤り訂正単位のデータ構造の第５例を示すダイアグラムである。
【図１１】３つの誤り訂正の訂正能力を比較したグラフである。
【図１２】２組の誤り訂正符号を適用した誤り訂正のフローチャートである。
【図１３】２組の誤り訂正符号を適用して誤り訂正を行う誤り訂正復号部のブロック図である。
【図１４】事前判定を行ってから、２組の誤り訂正符号のいずれかを選択して誤り訂正を行うフローチャートである。
【図１５】事前判定手段をさらに備えた誤り訂正復号部のブロック図である。
【図１６】バランス化符号を用いた誤り検出を説明する図である。
【図１７】事前判定を行った場合と行わなかった場合のスループットの違いを示すグラフである。
【図１８】冗長ビットを分散させて記憶する際の誤り訂正単位のデータ構造の１例とそれに対応した誤り訂正のフローチャートである。
【図１９】従来のデータ構造を示すダイアグラムである。
【発明を実施するための形態】
【００２８】
図１〜図３を通して説明したビット誤りの発生状況の傾向に鑑みて、誤りビットが多いページに用いる誤り訂正の訂正能力と、誤りが少ないページに用いる誤り訂正の訂正能力を変更することが好ましい。具体的には、上述した図１６の例では訂正能力を２４ビットとした場合を例示したが、訂正能力を高めることを考えてみる。例えば、訂正能力を２４ビットから６０ビットに高めるとすると、それに伴って誤り訂正回路の複雑さも増加してしまう。そこで、２０ビットの訂正能力を持つ誤り訂正と４１ビットの訂正能力を持つ誤り訂正とを用いて、誤り訂正回路の複雑さが余り増大しないようにすることを考えてみる。ここで、説明のために２０ビット、４１ビット、６０ビットといった訂正能力の数値を例示して説明するが、本発明はこれらの数値に拘束されるものではもちろんない。
【００２９】
ここで、第１の誤り訂正は、１キロバイトのユーザデータに対して、２０ビットの訂正能力を有する誤り訂正であり、比較的に誤りが少ないページ（good page）に対して適用する。そして、第２の誤り訂正は、１キロバイトのユーザデータを２つに分割した５１２バイトのユーザデータに対して、４１ビットの訂正能力を有する誤り訂正符号であり、比較的に誤りの多いページ（bad page)に適用する。誤り訂正方式の例としてＢＣＨを使用する。前者をＢＣＨ（２０，１０２４）、後者をＢＣＨ（４１，５１２）と記すことにする。つまり、ＢＣＨ（Ａ，Ｂ）は、Ａビットの訂正能力を有するＢＣＨ法をＢバイトのユーザデータに適用することを表す。ＢＣＨ（４１，５１２）は、ＢＣＨ（２０，１０２４）の４倍以上の訂正能力を持っている。
【００３０】
そして、図４に、ＢＣＨ（２０，１０２４）とＢＣＨ（４１，５１２）とを用いて誤り訂正を行うためのページの領域の使用を示している。仮に、誤り訂正単位２１０は誤りビットの個数が少ないページ（good page）内の一領域であり、誤り訂正単位２２０は誤りビットの個数が多いページ（bad page）内の一領域であるとする。誤り訂正単位２１０は、サイズが１キロバイトであるユーザデータ領域２１１と、２０ビット訂正の第１の冗長領域２１２と、４１ビット訂正の第２の冗長領域２１３とから構成されている。誤り訂正単位２２０も、誤り訂正単位２１０と同様の構成であり、ユーザデータ領域２２１と、第１の冗長領域２２２と、第２の冗長領域２２３とから構成されている。なお、誤り訂正単位２１０と２２０は、ある１つのブロックに存在している領域である。両者は互いに隣接したページにあることが考えられるが、必ずしも隣接している必要はなく、１ページあるいは複数のページを間に挟んで位置していてもよい。このような誤りビット数が多いページとそのページの訂正に使う冗長ビットを保存する比較的に誤りビット数の少ないページとの間の関係は一定のルールによって決定されるものであればよく、どのようなルールであるかは任意である。
【００３１】
誤り訂正単位２１０において、第１の冗長領域２１２は、ユーザデータ領域２１１の誤りを訂正するための第１の誤り訂正、すなわちＢＣＨ（２０，１０２４）に使用する第１組の冗長ビットを記憶する領域である。第２の冗長領域２１３は、誤りの多いページにあるユーザデータ領域２２１の前半のユーザデータ領域２２１Ａ（５１２バイト）の誤りを訂正するための第２の誤り訂正、すなわちＢＣＨ（４１，５１２）に使用する第２組の冗長ビットを記憶する領域である。
【００３２】
また、誤り訂正単位２２０において、第１の冗長領域２２２は、ユーザデータ領域２２１の誤りを訂正するための第１の誤り訂正、すなわちＢＣＨ（２０，１０２４）に使用する第１組の冗長ビットを記憶する領域である。そして、第２の冗長領域２２３は、誤り訂正単位２２０内のユーザデータ領域２２１の後半であるユーザデータ領域２２１Ｂの誤りを訂正するための第２の誤り訂正、すなわちＢＣＨ（４１，５１２）に使用する第２組の冗長ビットを記憶する領域である。つまり、誤りの多い誤り訂正単位２２０内のユーザデータ領域２２１にある誤りを訂正するための第２組の冗長ビットは、第２の冗長領域２１３と２２３に分散して記憶されている。
【００３３】
このようにすることにより、誤りの多い１キロバイトのユーザデータ領域２２１に対して、第２の冗長領域２１３と２２３からなる冗長領域を確保することができる。つまり、ユーザデータ領域２２１を構成している領域２２１Ａと２２１Ｂのそれぞれ（いずれも５１２バイト）に対して４１ビット訂正の第２の冗長領域を確保することができる。加えて、従来技術においては浪費されていた冗長領域２１２あるいは２１３を無駄なく有効に利用することができる。つまり、６０ビット訂正の冗長ビットをすべてのページに適用するのではなく、通常は２０ビット訂正の冗長ビットを適用し、誤りの多いページに対しては、そのページのユーザデータ領域を分割したうえで、例えば、二つの分割されたユーザデータ領域のそれぞれに対して４１ビット訂正の冗長ビットを用いて誤り訂正を行う。これにより、誤り訂正に必要な回路の大きさを６０ビット用回路から４１ビット用回路へと大幅に抑えることができる。
【００３４】
また、同様に、図５に示すように、比較的に誤りの少ないページ内の誤り訂正単位３１０と比較的に誤りの多いページ内の誤り訂正単位３２０を考えたとき、比較的に誤りの少ないページの誤り訂正単位３１０にある１キロバイトのユーザデータ領域３１１のためにＢＣＨ（２０，１０２４）を使って訂正する。そこで、そのための冗長領域３１２を設けておく。上に定義したように、この冗長領域３１２は、２０ビットの訂正能力を与えるものである。そして、比較的に誤りの多いページの誤り訂正単位３２０のためにはＢＣＨ（２０，５１２）を使って、誤り訂正単位３２０のユーザデータの半分３２１Ａと残りの半分３２１Ｂとのそれぞれに対してＢＣＨ（２０，５１２）の訂正を施すことが考えられる。その場合には、ユーザデータ領域の半分の領域３２１Ａの訂正ために、ＢＣＨ（２０，５１２）用の冗長ビットを２分割して、領域３１３と領域３２３として、それぞれ、誤り訂正単位３１０と誤り訂正単位３２０の中に分けて保存することが出来る。そして、ユーザデータ領域の残り半分の領域３２１Ｂのためには、領域３１２に対応する領域３２２にＢＣＨ（２０，５１２）のための冗長ビットを保存することが出来る。ここで、領域３２１Ａに対する誤り訂正を行う際には、領域３１３と領域３２３とに分割されて保存されていた冗長ビットを組み合わせて訂正を実行することとなる。この場合には、２０ビット訂正用の回路しか必要としないこととなる。
【００３５】
さらに、図６に示すように、比較的に誤りの少ないページ内の誤り訂正単位３５０、３６０と、比較的に誤りの多いページ内の誤り訂正単位３７０とを考える。比較的に誤りの少ないページの誤り訂正単位３５０にある1キロバイトのユーザデータ領域３５１はＢＣＨ（２０，１０２４）を使って訂正するので、そのための冗長領域３５３を設ける。誤り訂正単位３６０についても同様である。これらの冗長領域３５２と３６２は、それぞれ２０ビットの訂正能力を与えるものである。そして、比較的に誤りの多いページ内の誤り訂正単位３７０のユーザデータ領域３７１は、０．５キロバイトずつに２分割して、それぞれ領域３７１Ａと領域３７１Ｂとする。そして、ユーザデータ領域３７１Ａの訂正に用いるＢＣＨ（４１，５１２）のための冗長ビットは、比較的に誤りの少ないページ内の誤り訂正単位３５０と３６０とに分割して含める。ユーザデータ３７１Ｂの訂正に用いる冗長ビットは、比較的に誤りの多いページの誤り訂正単位３７０内の領域３７２に含めることが出来る。
【００３６】
このように、ユーザデータ訂正用の冗長ビットの少なくとも一部は、比較的に誤りの多いページ内の誤り訂正単位の外、すなわち比較的に誤りの少ないページ内の誤り訂正単位に、分散して配置することが出来る。そして、その分散の仕方は全く任意であり、一定のルールに従っていれば、どのように配置することも可能である。図４〜図６の例においては、比較的に誤りの多いページ内のユーザデータ領域を２分割して、等しいサイズの２つの領域を作ったが、これは一例に過ぎず、２：３や３:４など任意の割合に分割することが出来る。また下記の例にあるように、４分割またはそれ以上の分割、３分割などの奇数の領域数への分割も可能である。
【００３７】
図７は、本発明の実施の形態に係るＳＳＤ（Solid State Drive）１を概略的に示したブロック図である。ＳＳＤ１はホスト装置４に接続されており、ホスト装置４の外部メモリとして機能する。ＳＳＤ１は、不揮発性メモリとしてのＮＡＮＤフラッシュメモリ（以下、ＮＡＮＤメモリと略す）２と、ホスト装置４の指示に応じて、ＮＡＮＤメモリ２に対してデータの読み込み及び書き込みを行うＮＡＮＤコントローラ３とを備えている。ＮＡＮＤメモリ２の記憶領域は、上述したように、一定のサイズの複数のブロックから構成されており、各ブロックは一定のサイズの複数のページから構成されている。本実施の形態では、不揮発性メモリとしてＮＡＮＤメモリを使用しているが、それに限定されるものではない。
【００３８】
図７において、ＮＡＮＤコントローラ３は、ホスト装置４とのインターフェース処理を行うホストインターフェース６と、ＮＡＮＤメモリ２とのインターフェース処理を行い、データの読み込み及び書き込みを制御するＮＡＮＤインターフェース５と、ＮＡＮＤメモリ２に書き込むデータに対して、誤り訂正符号を生成する誤り訂正符号部７と、ＮＡＮＤメモリ２から読み出されたデータに対して、誤り検出および誤り訂正を行う誤り訂正復号部８とを備えている。
【００３９】
図８に示すように、誤り訂正符号部７は、ホスト装置４からのユーザデータを受け付けるユーザデータ受付手段７１と、これから書き込むＮＡＮＤメモリのページが誤りの多いページかそうでないページかを判断する誤り数判定手段７３と、第１の冗長ビット生成手段７５と、第２の冗長ビット生成手段７７と、ページデータ生成手段７９とを備えている。第１の冗長ビット生成手段７５は、ＮＡＮＤメモリ２のユーザデータに対して、上述した誤り訂正単位２１０で、その誤り訂正を行うための第１組の冗長ビットを生成する。この第１組の冗長ビットは、第１の誤り訂正、例えばＢＣＨ（２０，１０２４）に用いる冗長ビットである。第２の冗長ビット生成手段７７はその誤り訂正単位が誤りの多いページに書き込まれる場合に、ＮＡＮＤメモリ２のユーザデータに対して、上述した誤り訂正単位２２０で、その誤り訂正を行うための第２組の冗長ビットを生成する。この第２組の冗長ビットは、第２の誤り訂正、例えばＢＣＨ（４１，５１２）に用いる冗長ビットである。ここで、これから書き込むページが誤り数の多いページか否かは、すでに行ったテストの結果を記憶させておいて判断することもできるし、過去の書き込み及び読み出しの結果を記憶して判定を行うものであってもよい。この場合には、誤りの数があまり多くないページに対しても積極的に第２の冗長領域の付与を行うことにより、経時的な誤り率の悪化などに対してもよりフレキシブルに対応できるようにすることができる。
【００４０】
ページデータ生成手段７９は、ホスト装置４から受け取ったユーザデータを所定のサイズ（例えば１キロバイト）に分割して、図４に示したユーザデータ領域２１１に書き込むためのユーザデータを生成し、このユーザデータと、第１の冗長ビット生成手段７５により生成された第１組の冗長ビットと、第２の冗長ビット生成手段７７により生成された第２組の冗長ビットとを組み合わせて誤り訂正単位２１０のデータを作成する。さらに、ページデータ生成手段７９は、ホスト装置４から受け取ったユーザデータを所定のサイズ（例えば５１２バイト）に分割して、図４に示したユーザデータ領域２２１Ａ及び２２１Ｂに書き込むためのユーザデータを作成し、これら２つのユーザデータと、第１の冗長ビット生成手段７５により生成された第１組の冗長ビットと、第２の冗長ビット生成手段７７により生成された第２組の冗長ビットとを組み合わせて誤り訂正単位２２０のデータを作成する。このとき、ユーザデータ領域２２１Ａに書き込まれるユーザデータのための第２組の冗長ビットは、誤り訂正単位２１０のデータの中に含まれ、ユーザデータ領域２２１Ｂに書き込まれるユーザデータのための第２組の冗長ビットは、誤り訂正単位２２０のデータの中に含まれるように、ページデータ生成手段７９が誤り訂正単位２１０及び２２０のデータを生成する。
【００４１】
図９は、図４のさらに別の変形例を示している。誤り訂正単位４１０、４２０、４３０は、いずれも、誤りの数が少ないページに属する。誤り訂正単位４４０は、誤りの数が多いページに属する。なお、上述の例と同様、これらの４つの誤り訂正単位の位置関係は、４１０、４２０、４３０と、４４０とが異なるページに属しているほかは特に問わない。第１の冗長領域４１２、４２２、４３２、４４２は、それぞれ、ユーザデータ領域４１１、４２１、４３１、４４１のための第１の誤り訂正に用いる冗長ビットを記憶する領域である。また、誤りの数が多い誤り訂正単位４４０内のユーザデータ領域４４１内の領域４４１Ａ、４４１Ｂ、４４１Ｃ、４４１Ｄ（サイズはいずれも２５６バイト）のための第２の誤り訂正に用いる冗長ビットは、それぞれ第２の冗長領域４１３、４２３、４３３、４４３に分散して記憶されている。一例として、上記第１の誤り訂正は、ＢＣＨ（３１，１０２４）であり、上記第２の誤り訂正は、ＢＣＨ（２９，２５６）である。ＢＣＨ（２９，２５６）は、ＢＣＨ（３１，１０２４）の約３．７倍の訂正能力を持っている。
【００４２】
図１０は、図４のさらに別の変形例を示している。誤り訂正単位５１０、５２０、５３０は、いずれも、誤りの数が少ないページに属する。一方で、誤り訂正単位５４０は、誤りの数が多いページに属する。この誤り訂正単位５４０内のユーザデータ領域５４１は、領域５４１Ａと領域５４１Ｂの２つの領域（サイズはいずれも５１２バイト）からなる。なお、上述の例と同様、これらの４つの誤り訂正単位の位置関係は、５１０、５２０、５３０と５４０とが異なるページに属しているほかは、特に問わない。第１の冗長領域５１２、５２２、５３２、５４２は、それぞれ、ユーザデータ領域５１１、５２１、５３１、５４１のための第１の誤り訂正に用いる冗長ビットを記憶する領域である。そして、誤りの数が多い誤り訂正単位５４０内の領域５４１Ａのための第２の誤り訂正に用いる冗長ビットは、第２の冗長領域５３３及び５４３に分散して記憶されている。また、領域５４１Ｂのための第２の誤り訂正に用いる冗長ビットは、第２の冗長領域５１３及び５２３に分散して記憶されている。一例として、上記第１の誤り訂正は、ＢＣＨ（３１，１０２４）であり、上記第２の誤り訂正は、ＢＣＨ（５０，５１２）である。ＢＣＨ（５０，５１２）は、ＢＣＨ（３１，１０２４）の約３．２倍の訂正能力を持っている。
【００４３】
図１１は、４種類の誤り訂正法、すなわち、ＢＣＨ（６０，１０２４）とＢＣＨ（４１，５１２）とＢＣＨ（２９，２５６）とＢＣＨ（５０，５１２）の訂正能力を比較したグラフである。横軸は元のユーザデータの誤りの割合を示しており、縦軸は、誤り訂正を行ってもなお訂正できなかった誤りビットの割合を示している。４つの曲線は、それぞれ、ＢＣＨ（６０，１０２４）、ＢＣＨ（４１，５１２）、ＢＣＨ（２９，２５６）、ＢＣＨ（５０，５１２）を示している。この図からわかるように、４つの方法のいずれも、ユーザデータの誤りの割合が大きくなるにつれて、訂正できなかった誤りの割合も大きくなる。現在、一般的には、許容される誤りの割合として１０−１３程度が基準となっている。図からわかるように、この基準に照らして、回路規模が小さなＢＣＨ（２９，２５６）は回路規模の大きなＢＣＨ（６０、１０２４）よりも性能が良い。また、ＢＣＨ（５０，５１２）は、ＢＣＨ（６０，１０２４）よりも回路規模が小さいにも関わらず、優れた性能を持っている。
【００４４】
図１２は、図４〜図６、図９あるいは図１０に示したような、分散させて記憶した冗長ビットを用いて、２組の誤り訂正を適用する場合の誤り訂正のフローチャートである。図１３は、図１２に示しているフローチャートを実行する誤り訂正復号部８のブロック図である。図１３に示しているように、誤り訂正復号部８は、第１の誤り訂正実行手段８４と、訂正後状態判断手段８６と、第２の誤り訂正実行手段８８とを備えている。
【００４５】
まず、ステップＳ１１にて、第１の誤り訂正実行手段８４が第１の誤り訂正を用いて誤り訂正を行う。そして、ステップＳ１２にて、訂正後状態判断手段８６が訂正できたかどうかの判断を行う。具体的には、復号器の「訂正不能」の信号により判断する。この場合の「訂正できた」という状態は、一例として、４１ビット誤り訂正ＢＣＨであれば、ＢＣＨ単位（例えば５１２ＫＢ）における誤りの数が４１ビット以下となった状態とする。そして、ステップＳ１２の結果が「Ｙｅｓ」であった場合には、ステップＳ１４にて終了する。あるいは、ステップＳ１２の結果が「Ｎｏ」であった場合には、ステップＳ１３に進み、第２の誤り訂正実行手段８８が、より高い訂正能力を持つ第２の誤り訂正を用いて誤り訂正を行う。そして、ステップＳ１４にて終了する。
【００４６】
図１２に示したフローにより、図４〜図６、図７あるいは図８に示したデータ構造に基づいて、各誤り訂正単位につき２組の誤り訂正符号を適用して誤り訂正を行うことができる。そのため、誤りが多いページであっても少ないページであっても、誤りを効率的に訂正することができる。しかし、第１の誤り訂正で訂正しきれなかった場合には、第２の誤り訂正を実行するため、１つのページに対して２種類の誤り訂正を行うことに起因してスループットが低下してしまうという欠点もある。
【００４７】
上述の欠点を回避する、２組の誤り訂正を適用して誤り訂正を行うフローチャートを図１４に示している。図１２と同様のステップには、同様の符号を付している。そして、図１５は、図１４に示しているフローチャートを実行する誤り訂正復号部８のブロック図である。図１３と同様の要素には、同じ符号を付している。図１３と異なるのは、誤り訂正復号部８が事前判定手段８１を備えている点である。この事前判定手段８１は、誤り検出手段８２と、訂正方法判断手段８３とを備えている。
【００４８】
まず、ステップＳ１にて誤り検出手段８２が誤りを検出する。その詳細は後述する。そして、誤り検出手段８２により検出された誤りが第１の誤り訂正により訂正可能かどうかをステップＳ２で訂正方法判断手段８３が判断する。ここでの第１の誤り訂正（ＥＣＣ１）は、誤り訂正能力が比較的低いＢＣＨにすることが望ましく、例えばＢＣＨ（２０，１０２４）とすることが望ましい。そして、ステップＳ２の判断結果が「Ｙｅｓ」であった場合には、ステップＳ１１に進む。また、ステップＳ２の判断結果が「Ｎｏ」であった場合には、ステップＳ１３に進む。
【００４９】
図１４のフローによれば、ステップＳ１にて誤り検出手段８２が誤りを検出し、検出された誤りを第１の誤り訂正により訂正可能であるとステップＳ２にて訂正方法判断手段８３が判断した場合のみ、第１の誤り訂正実行手段８４が第１の誤り訂正を実行する。さもなければ、第２の誤り訂正実行手段８８が訂正能力の高い第２の誤り訂正を実行する。つまり、誤り訂正を行う前に、事前判定手段８１がステップＳ１及びＳ２からなる事前判定を行うため、各ページにつき誤り訂正は１回しか行われないこととなり、スループットの低下という上述の問題を回避することができる。
【００５０】
図１４に示したステップＳ１の誤り検出の具体的な流れについて図１６を参照して説明する。符号６１０は、元のユーザデータのビット列の一部である。このビット列６１０のビット数が１２ビットであるとし、うち５ビットがビット値「１」であり、残りの７ビットがビット値「０」であるとする。このようなビット列６１０に対して、バランス化処理を適用する。バランス化処理とは、値が「１」のビットの数と、値が「０」のビットの数とを等しくなるように変換することであり、その結果得られる符号をバランス化符号（Balanced Code）。詳細は、非特許文献「Donald E. Knuth, “Efficient Balanced Codes”, IEEE Transactions on Information Theory, IEEE, January, 1986, Vol. IT-32, No. 1, pp. 51-53」に記載されている。具体的には、ビット列６１０について、パラメータＫを決定した上で、最初のＫビットを反転させる。ここではＫ＝５として、ビット列６１０の最初の５ビット「０１１００」を反転させて「１００１１」とすることにより、ビット列６２１を得る。ビット列６２１においては、ビット値「１」、「０」の数はいずれも６である。このビット列６２１をバランス化符号と呼ぶ。また、ビット列６２１の後方には、４ビットのパリティビット６２２が設けられている。パリティビット６２２のビット値は、上記パラメータＫ＝５を二進数により表現した「０１０１」であり、これ自体も「０」と「１」の数が同じバランス化符号である。このようなパリティビットを設けることにより、最初の何ビット分のビット値が反転されたかがわかる。バランス化符号であるビット列６２１と、同じくバランス化符号であるパリティビット６２２とからなるビット列６２０もバランス化符号となっている。このビット列６２０においては、ビット値「１」、「０」の数はいずれも８である。なお、どのようなビット列についても上記パラメータＫが必ず存在することが証明されており、その詳細は上記文献を参照されたい。
【００５１】
図１６に示した例では、パラメータＫを二進数により表現したパリティビット６２２がそれ自体バランス化符号であった。しかし、パラメータＫの値によっては、パラメータＫを二進数により表現したビット列がバランス化符号ではない場合もある。例えば、パラメータＫ＝７である場合に、パラメータＫを二進数で表現すると「０１１１」となる。このビット列「０１１１」はバランス化符号ではないため、このビット列をそのままパリティビット６２２とすることはできない。そこで、ビット列「０１１１」を、バランス化符号である「１０１０」へと符号化するようなルールを定めておき、このルールをルックアップテーブルとして保存しておくことができる。このようにすることで、パラメータＫがどんな値であっても、パラメータＫからパリティビットのバランス化符号を導き出すことができる。このルックアップテーブルによる方法は一例であり、パラメータＫの二進表現がバランス化符号になればいいのであって、これに限定されるものではない。
【００５２】
ビット列６２１と６２２からなるビット列６２０をあるページに書き込んで、それを読み出した結果をビット列６３０として示している。このビット列６３０は、ビット列６３１と６３２とからなる。ビット列６３０においては、値「１」のビットの数は６ビットであり、値「０」のビットの数は１０ビットである。つまり、ビット列６２０及び６３０について値「１」の数を比較すると、８ビットから６ビットに減少しているため、２つのビットについてプラス誤りが生じたことがわかる。元のユーザデータのビット列の全てに対して、このようなバランス化符号に変換したうえでページへの書き込みを行うことにより、ステップＳ１に示したような誤り検出を容易に行うことができる。なお、ステップＳ１における誤りの検出には、バランス化符号を用いるもののほか、従来から知られている検出方法を用いることができる。具体的には、ユーザデータの読み込みの際に、ソフト情報（信頼度情報）を用いて、その信頼度の低いビットの数によって誤りを検出する方法などがある。
【００５３】
なお、ビット列６２０をページへ書き込む際に、マイナス誤りとプラス誤りが同じ数だけ発生した場合には、書き込み前後でビット値「１」のビット数が変化しないため、誤りを検出することができない。これは、ビット列６２０及び６３０における値「１」のビットの数を単純に比較することにより、誤りを検出しているからである。しかし、図２を参照して上述したように、マイナス誤りとプラス誤りが同数発生することは実際にはほぼないため、バランス化符号を用いて容易に誤り検出を行うことができる。
【００５４】
図１７は、事前判定手段８１がステップＳ１及びＳ２からなる事前判定を行った場合と行わなかった場合のスループットの違いを示したグラフである。第１の誤り訂正としてＢＣＨ（２０，１０２４）を使用し、第２の誤り訂正としてＢＣＨ（４１，５１２）を使用した。横軸は、ユーザデータ領域に書き込まれているユーザデータの誤りの割合を示しており、縦軸はスループットを示している。事前判定を行わなかった場合と、事前判定を行った場合とをそれぞれ示している。この図からわかるように、ユーザデータの誤りビットの割合が大きくなるにつれて、事前判定を行わなかった場合のスループットは著しく低下するのに対し、事前判定を行った場合にはスループットが高いまま安定しており、事実、０．９９を下回ることはなかった。
【００５５】
図１８は、比較的に誤りの少ないページ内の誤り訂正単位６１０と比較的に誤りの多いページ内の誤り訂正単位６２０があったとき、どのような手順で、本願発明の方法を適用することが出来るかを示すもう一つの変形例である。これまでと同様、ユーザデータ領域６１１と６２１はそれぞれ１ｋＢであるとする。比較的に誤りの少ないページ内の領域であれば、ＢＣＨ（２０，１０２４）により訂正可能であるとする。比較的に誤りの多いページ内の領域６２０であるとユーザデータ領域６２１をＢＣＨ（２０，１０２４）で訂正できない可能性がある。そこで、ユーザデータ領域６２１内に２５４バイトの特定領域６２１Ａを設けて、そのための冗長データを比較的に誤りの少ないページ内の領域６１３に保存する。特定領域６２１Ａは、ユーザデータ領域６２０の左端又は右端にあってもよいし、図示したように、ユーザデータの中の任意の位置においてもよい。また、この特定領域６２１Ａはユーザデータ領域６２０内において複数の領域に分割しておくことも出来る。この特定領域６２１Ａの大きさも任意であるが、この特定領域６２１Ａ内のデータの訂正が成功し、それがユーザデータ領域６２１全体の訂正の成功に貢献する程度の大きさが求められる。まず、ステップＳ２１で開始すると、第１の誤り訂正法によりユーザデータ領域６２１の訂正を行う（ステップＳ２２）。ステップＳ２３において、もし訂正が可能であったと判断されれば、訂正が可能であったことを表す信号と復号されたユーザデータを出力して（ステップＳ２４）、終了する（ステップＳ２９）。ステップＳ２３において、もし訂正が出来なかったと判断されれば、第２の誤り訂正法により特定領域６２１Ａのデータを訂正する（ステップＳ２５）。このとき、例えば、ＢＣＨ（２０，２５６）を用いる。ステップＳ２６において特定領域６２１Ａが訂正できたと判断されれば、ユーザデータ領域６２１のうち特定領域６２１Ａのデータを復号された訂正済みデータで置換する（ステップＳ２７）。そして、ステップＳ２２の訂正をこの一部置換されたユーザデータ６２１の出力に対して行う。改めてステップＳ２３において訂正が可能であったかどうかを判断して、訂正可能と判断されれば、ステップＳ２４において訂正可能信号と復号されたデータを出力する（ステップＳ２４）。ステップＳ２３において訂正が出来なかったと判断されると、ステップＳ２５において、特定領域６２１Ａに対して再度第２の誤り訂正法による訂正を行った（この訂正は可能であることは既に分かっている）上で、ステップＳ２６において、第１回目の第２の訂正法による訂正ではないかをチェックする。第１回目の試行でないと判断されれば、ステップＳ２８において訂正不能を表す信号を出力して、終了する（ステップＳ２９）。なお、図１８では、特定領域６２１Ａは一つのユーザデータ６２１内に設けられていたが、それを複数に分割して、２以上のユーザデータ領域に配置することも可能である。この場合には、分割された特定領域を再結合して、その再結合された特定領域に対して第２の訂正法を適用することとなる。
【００５６】
これまでに述べた実施の形態では、誤り訂正を行うにあたってＢＣＨ符号を用いている。しかし、ＢＣＨ符号に限らず、リード・ソロモン符号、低密度パリティ検査符号といった誤り訂正符号を用いることもできる。また、訂正可能なビット数の値も上記の例に限るものでは一切ない。
【００５７】
これまでに述べた実施の形態に関して、１つの誤り訂正単位にある誤りの多寡の基準としては、その誤り訂正単位における誤りの割合や、誤りの数を用いることができる。仮に、誤りの数を基準とする場合には、その誤り訂正単位が属しているブロック内のすべての誤り訂正単位ごとの誤りの数の平均値あるいはその平均値に一定の数を足したものを基準としたり、あるいは、そのブロックにおけるページあるいは誤り訂正単位ごとの誤りの数の最大値と最小値との平均値を基準とすることができる。あるいは、第１組の冗長ビットを用いて訂正できる誤りの数を基準として誤りが多いか少ないかを区別して、第２組の冗長ビットを使用するかを判断することができる。このとき、ＮＡＮＤメモリの経時的な誤り特性の劣化に対応して若干の余裕をみて基準を設定することができる。また、不揮発性メモリの設計段階で適当な値をしきい値として設定して、これを基準に誤りが多い場合と誤りが少ない場合とを区別することも可能である。
【符号の説明】
【００５８】
１  ＳＳＤ
２  ＮＡＮＤメモリ
３  ＮＡＮＤコントローラ
４  ホスト装置
５  ＮＡＮＤインターフェース
６  ホストインターフェース
７  誤り訂正符号部
７１  ユーザデータ受付手段
７３  誤り数判定手段
７５  第１の冗長ビット生成手段
７７  第２の冗長ビット生成手段
７９  ページデータ生成手段
８  誤り訂正復号部
８１  事前判定手段
８２  誤り検出手段
８３  訂正方法判断手段
８４  第１の誤り訂正実行手段
８６  訂正後状態判断手段
８８  第２の誤り訂正実行手段
２１０，２２０  誤り訂正単位
２１１，２２１  ユーザデータ領域
２１２，２２２  第１の冗長領域
２１３，２２３  第２の冗長領域
７００  領域
７０１  ユーザデータ領域
７０２  冗長領域
【図１】
2012094132.tif 000003
【図２】
2012094132.tif 000004
【図３】
2012094132.tif 000005
【図４】
2012094132.tif 000006
【図５】
2012094132.tif 000007
【図６】
2012094132.tif 000008
【図７】
2012094132.tif 000009
【図８】
2012094132.tif 000010
【図９】
2012094132.tif 000011
【図１０】
2012094132.tif 000012
【図１１】
2012094132.tif 000013
【図１２】
2012094132.tif 000014
【図１３】
2012094132.tif 000015
【図１４】
2012094132.tif 000016
【図１５】
2012094132.tif 000017
【図１６】
2012094132.tif 000018
【図１７】
2012094132.tif 000019
【図１８】
2012094132.tif 000020
【図１９】
2012094132.tif 000021