【実施例1】
【0013】
図1は、本実施例の記憶装置100の構成を示すブロック図である。記憶装置100は、メモリコントローラ11、エラー訂正コントローラ12及びメモリ20から構成されている。メモリコントローラ11及びエラー訂正コントローラ12は、1チップの半導体集積回路10を構成している。
【0014】
メモリコントローラ11は、メモリ20へのデータの書き込み及びメモリ20からのデータの読み出しを実行する。メモリコントローラ11は、メモリ20から読み出したデータをエラー訂正コントローラ12に供給する。
【0015】
エラー訂正コントローラ12は、メモリコントローラ11がメモリ20から読み出したデータに対してエラー訂正を行う回路である。具体的には、エラー訂正コントローラ12は、データの書き込み時及び読み出し時に生じたビットエラー(いわゆるビット化け)を訂正する。エラー訂正コントローラ12は、訂正制御部13、エラー訂正回路14及び内部メモリ15を含む。
【0016】
訂正制御部13は、エラー訂正回路14を制御してエラー訂正を実行させる制御回路である。また、訂正制御部13は、メモリ20から読み出されたデータに対するパリティビットの生成やデータの比較等のデータ処理を行う。
【0017】
エラー訂正回路14は、メモリ20から読み出されたデータに対してエラー訂正(すなわち、ビット化けの訂正)を実行する回路である。エラー訂正回路14は、例えばBCH符号化方式を用いてエラー訂正を実行する。エラー訂正回路14は、エラー訂正方式やデータに付加されるパリティビットのサイズ(バイト数)によって定まる所定ビット数の訂正能力を有する。
【0018】
内部メモリ15は、エラー訂正コントローラ12の内部に設けられた揮発性のメモリであり、訂正制御部13及びエラー訂正回路14が実行するエラー処理においてデータを一時記憶するためのワーク領域として使用される。
【0019】
メモリ20は、不揮発性記憶装置であり、例えばNAND型フラッシュメモリから構成されている。メモリ20は、所定ビット長(例えば16バイト)のデータと、BCH符号化方式に基づいて生成されたパリティビットと、を対応付けて記憶する。
【0020】
図2Aは、メモリ20に格納されるデータの構成例を示す図である。メモリ20には、16バイトのデータに2バイトのパリティビットを付加したものが1つのデータとして格納されている。以下の説明では、16バイトのデータを「データ部分」と称し、データ部分に2バイトのパリティビットを付加した全体部分(18バイト)を単に「データ」と称する。
【0021】
このように、本実施例では16バイトのデータ部分に2バイトのパリティビットが付加されてデータが構成されており、エラー訂正回路14は、18バイトのデータ中、2ビットのエラーまでを訂正することが可能である。すなわち、本実施例のエラー訂正回路14は、2ビットの訂正能力を有する。
【0022】
次に、本実施例の半導体集積回路10が実行するエラー訂正処理の動作について、
図3及び
図4のフローチャートと、
図2A〜2Fとを参照して説明する。
【0023】
メモリコントローラ11は、
図2Aに示すような構成を有する18バイトのデータ(データ部分16バイト、パリティビット2バイト)をメモリ20から読み出す(STEP101)。メモリコントローラ11は、読み出したデータ(以下、読み出しデータと称する)をエラー訂正コントローラ12に供給する。エラー訂正コントローラ12の訂正制御部13は、読み出しデータを内部メモリ15に格納する。
【0024】
訂正制御部13は、エラー訂正回路14を制御して、読み出しデータのデータ部分及びパリティビットの各々に対してエラー訂正処理を実行させる(STEP102)。
図2Bは、エラー訂正後の読み出しデータを斜線で示している。
【0025】
次に、訂正制御部13は、エラー訂正回路14を制御して、エラー訂正後の読み出しデータ(以下、訂正データと称する)のデータ部分(16バイト)について、当該データ部分に対応する2バイトのパリティビットを新たに生成させる(STEP103)。
【0026】
訂正制御部13は、STEP103で新たに生成したパリティビットと、STEP102でエラー訂正されたパリティビットと、を比較する(STEP104)。
図2Cは、新たに生成したパリティビットをドットで示し、STEP102でエラー訂正されたパリティビットを斜線で示している。
【0027】
訂正制御部13は、2つのパリティビットが一致したか否かを判定する(STEP105)。パリティビットが一致したと判定すると(STEP105:YES)、読み出しデータに含まれる全てのエラーが訂正されたと判定して、処理を終了する。一方、パリティビットが一致しなかったと判定すると(STEP105:NO)、エラー訂正回路14の訂正能力を超えたエラー(すなわち、本実施例では2ビットを超えたエラー)が存在していると判定して、半導体集積回路10の動作は
図4のフローチャートに示す処理ステップへと移行する。
【0028】
訂正制御部13は、訂正データの先頭の1ビットの値を反転させる(STEP201)。
図2Dは、先頭の1ビットの値が反転した訂正データを示している。
【0029】
訂正制御部13は、エラー訂正回路14を制御して、先頭の1ビットの値が反転した訂正データに対してエラー訂正処理を実行させる(STEP202)。
図2Eは、STEP202におけるエラー訂正後のデータを示している。
【0030】
訂正制御部13は、エラー訂正回路14を制御して、STEP202におけるエラー訂正後のデータ(すなわち、ビット反転及び訂正を行ったデータ)のデータ部分(16バイト)について、当該データ部分に対応する2バイトのパリティビットを新たに生成させる(STEP203)。
【0031】
訂正制御部13は、STEP203で新たに生成したパリティビットと、STEP202でエラー訂正されたパリティビットと、を比較する(STEP204)。
図2Fは、新たに生成したパリティビットをドットで示し、STEP202でエラー訂正されたパリティビットを斜線で示している。
【0032】
訂正制御部13は、2つのパリティビットが一致したか否かを判定する(STEP205)。パリティビットが一致したと判定すると(STEP205:YES)、STEP202でエラー訂正がなされたと判定して、処理を終了する。
【0033】
一方、パリティビットが一致しなかったと判定すると(STEP205:NO)、訂正制御部13は、パリティビットが一致するか又は最終ビットに至るまで値を反転させるビットをずらしつつ、STEP202〜STEP205の処理を繰り返し実行する。すなわち、訂正制御部13は、訂正データの最終ビットまでビット反転が済んでいるか否かを判定し(STEP206)、最終ビットまでビット反転が済んでいないと判定すると(STEP206:NO)、次のビットの値を反転させて再びSTEP202〜STEP205の処理を実行する。最終ビットまでビット反転が済んでいると判定すると(STEP206:YES)、訂正制御部13は、エラー訂正回路14の訂正能力に反転分の1ビットを加えたビット数(すなわち、本実施例では3ビット)を超えたビット数のエラーが発生しているためエラー訂正ができないと判定し(STEP208)、処理を終了する。
【0034】
以上のように、本実施例の半導体集積回路10は、エラー訂正を行ったパリティビットとエラー訂正後のデータについて新たに生成したパリティビットとを比較し、パリティビット同士が一致するか否かを判定することにより、読み出したデータに含まれる全てのエラーが訂正されたか否かを判定する。そして、全てのエラーが訂正されていないと判定すると、データの値を1ビットずつ反転させつつ、繰り返しエラー訂正を行う。かかる処理によれば、エラー訂正回路14の訂正能力を1ビット超えたエラー(ビット化け)がデータに存在する場合でも、正しくエラー訂正をすることができる。
【0035】
従って、本実施例の半導体集積回路10によれば、エラー訂正回路の設計を変更することなく、エラー訂正回路の訂正能力以上のビットエラーを訂正することができる。また、エラー訂正回路の設計を変更する場合と比べて、回路規模の増加を抑えることが出来る。
【実施例2】
【0036】
次に、実施例2の記憶装置について説明する。本実施例の記憶装置は、
図1に示す実施例1の記憶装置100と同様の構成を有し、メモリ20に格納されるデータの構成及びエラー訂正コントローラ12が実行するエラー訂正処理の処理動作において実施例1と異なる。
【0037】
図5は、本実施例においてメモリ20に格納されるデータの構成例を示す図である。メモリ20には、16バイトのデータ部分と、これに対応する4バイトのCRC(Cyclic Redundancy Check)符号とが対応付けて格納されている。そして、16バイトのデータ部分及び4バイトのCRC符号には、それぞれ2バイトのパリティビットが付加されている。以下の説明では、4バイトのCRC符号に2バイトのパリティビットを付加したものを「CRCデータ」と称する。
【0038】
このように、本実施例では16バイトのデータ部分に2バイトのパリティビットが付加され、4バイトのCRC符号に2バイトのパリティビットが付加されている。また、本実施例のエラー訂正回路14は、実施例1と同様、2ビットのエラー訂正能力を有する。従って、エラー訂正回路14は、18バイトのデータ中、2ビットのエラーまでを訂正することが可能である。また、エラー訂正回路14は、6バイトのCRCデータ中、2ビットのエラーまでを訂正することが可能である。
【0039】
次に、本実施例の半導体集積回路10が実行するエラー訂正処理の動作について、
図6〜
図8のフローチャートと、
図9A〜9F及び
図10とを参照して説明する。
【0040】
メモリコントローラ11は、16バイトのデータ部分及び2バイトのパリティビットからなる18バイトのデータと、4バイトのCRC符号及び2バイトのパリティビットからなる6バイトのCRCデータと、をメモリ20から読み出す(STEP301)。メモリコントローラ11は、読み出したデータ(読み出しデータ)及び読み出したCRCデータ(以下、読み出しCRCデータと称する)をエラー訂正コントローラ12に供給する。エラー訂正コントローラ12の訂正制御部13は、読み出しデータ及び読み出しCRCデータを内部メモリ15に格納する。
【0041】
半導体集積回路10は、読み出しデータに対して、実施例1のSTEP101〜105、及びSTEP201〜208の一連の処理と同様の処理を実行する。その際、STEP105及びSTEP205で一致する(YES)と判定された場合、半導体集積回路10の動作は、STEP303の処理ステップへと移行する(STEP302)。
【0042】
訂正制御部13は、エラー訂正回路14を制御して、読み出しCRCデータのCRC符号及びパリティビットの各々に対してエラー訂正処理を実行させる(STEP303)。
図9Aは、エラー訂正前の読み出しCRCデータを示している。
図9Bは、エラー訂正後の読み出しCRCデータを斜線で示している。
【0043】
次に、訂正制御部13は、エラー訂正回路14を制御して、エラー訂正後の読み出しCRCデータ(以下、訂正CRCデータと称する)のCRC符号(4バイト)について、当該CRC符号に対応する2バイトのパリティビットを新たに生成させる(STEP304)。
【0044】
訂正制御部13は、STEP304で新たに生成したパリティビットと、STEP303でエラー訂正されたパリティビットと、を比較する(STEP305)。
図9Cは、新たに生成したパリティビットをドットで示し、STEP303でエラー訂正されたパリティビットを斜線で示している。
【0045】
訂正制御部13は、2つのパリティビットが一致したか否かを判定する(STEP306)。パリティビットが一致したと判定すると(STEP306:YES)、読み出しCRCデータに含まれる全てのエラーが訂正されたと判定して、半導体集積回路10の動作は
図8のフローチャートに示す処理ステップへと移行する。一方、パリティビットが一致しなかったと判定すると(STEP306:NO)、エラー訂正回路14の訂正能力を超えたエラー(すなわち、本実施例では2ビットを超えたエラー)が存在していると判定して、半導体集積回路10の動作は
図7のフローチャートに示す処理ステップへと移行する。
【0046】
訂正制御部13は、訂正CRCデータの先頭の1ビットの値を反転させる(STEP401)。
図9Dは、先頭の1ビットの値が反転した訂正CRCデータを示している。
【0047】
訂正制御部13は、エラー訂正回路14を制御して、先頭の1ビットの値が反転した訂正CRCデータに対してエラー訂正処理を実行させる(STEP402)。
図9Eは、STEP402におけるエラー訂正後のCRCデータを示している。
【0048】
訂正制御部13は、エラー訂正回路14を制御して、STEP402におけるエラー訂正後のCRCデータ(すなわち、ビット反転及び訂正を行ったCRCデータ)のCRC符号(4バイト)について、当該CRC符号に対応する2バイトのパリティビットを新たに生成させる(STEP403)。
【0049】
訂正制御部13は、STEP403で新たに生成したパリティビットと、STEP402でエラー訂正されたパリティビットと、を比較する(STEP404)。
図9Fは、新たに生成したパリティビットをドットで示し、STEP402でエラー訂正されたパリティビットを斜線で示している。
【0050】
訂正制御部13は、2つのパリティビットが一致したか否かを判定する(STEP405)。パリティビットが一致したと判定すると(STEP405:YES)、STEP402でエラー訂正がなされたと判定して、半導体集積回路10の動作は
図8のフローチャートに示す処理ステップへと移行する。
【0051】
一方、パリティビットが一致しなかったと判定すると(STEP405:NO)、訂正制御部13は、パリティビットが一致するか又は最終ビットに至るまで値を反転させるビットをずらしつつ、STEP402〜STEP405の処理を繰り返し実行する。すなわち、訂正制御部13は、訂正CRCデータの最終ビットまでビット反転が済んでいるか否かを判定し(STEP406)、最終ビットまでビット反転が済んでいないと判定すると(STEP406:NO)、次のビットの値を反転させて再びSTEP402〜STEP405の処理を実行する。最終ビットまでビット反転が済んでいると判定すると(STEP406:YES)、訂正制御部13は、エラー訂正回路14の訂正能力に反転分の1ビットを加えたビット数(すなわち、本実施例では3ビット)を超えたビット数のエラーが発生しているためエラー訂正ができないと判定し(STEP408)、処理を終了する。
【0052】
訂正制御部13は、STEP306及びSTEP405の各々において、パリティビット同士が一致したと判定すると、訂正したデータの16バイトのデータ部分について、当該データ部分に対応する4バイトのCRC符号を新たに生成する(STEP501)。
【0053】
訂正制御部13は、STEP501で新たに生成したCRC符号と、STEP303又はSTEP402でエラー訂正されたCRC符号と、を比較する(STEP502)。
図10は、新たに生成したCRC符号をドットで示し、STEP303又はSTEP402でエラー訂正されたCRC符号を斜線で示している。
【0054】
訂正制御部13は、2つのCRC符号が一致したか否かを判定する(STEP503)。CRC符号が一致したと判定すると(STEP503:YES)、データ及びCRCデータの全てについて正しくエラー訂正がなされたと判定し、処理を終了する(STEP504)。
【0055】
一方、2つのCRC符号が一致しないと判定すると(STEP503:NO)、訂正制御部13は、エラー訂正処理において誤訂正が発生したと判定し、処理を終了する(STEP505)。
【0056】
以上のように、本実施例の半導体集積回路10は、エラー訂正を行ったパリティビットとエラー訂正後のデータについて新たに生成したパリティビットとを比較し、パリティビット同士が一致するか否かを判定することにより、読み出したデータに含まれる全てのエラーが訂正されたか否かを判定する。そして、全てのエラーが訂正されていないと判定すると、データの値を1ビットずつ反転させつつ、繰り返しエラー訂正を行う。かかる処理によれば、エラー訂正回路14の訂正能力を1ビット超えたエラー(ビット化け)がデータに存在する場合でも、正しくエラー訂正をすることができる。従って、エラー訂正回路の設計を変更することなく、エラー訂正回路の訂正能力以上のビットエラーを訂正することができる。また、エラー訂正回路の設計を変更する場合と比べて、回路規模の増加を抑えることが出来る。
【0057】
また、本実施例の半導体集積回路10は、データに対してCRC符号を付加しておき、CRC符号についてもデータと同様のエラー訂正処理を行う。そして、エラー訂正を行ったCRC符号と、エラー訂正後のデータについて新たに生成したCRC符号とを比較し、CRC符号同士が一致するか否かを判定することにより、エラー訂正が正しくなされたか否かを判定する。かかる処理によれば、エラーの誤訂正を防ぐことが出来る。
【0058】
なお、本発明は上記実施形態に限定されない。例えば、訂正制御部13は、特定の処理を行う専用の回路ではなく、エラー訂正コントローラ12の各部の動作を制御するCPU(Central Processing Unit)やファームウェアから構成されていても良い。
【0059】
また、上記実施例1及び実施例2では、エラー訂正回路14がBCH符号化方式を用いてエラー訂正を実行する場合について説明したが、任意の訂正方式を用いてエラー訂正を行うものであっても良い。
【0060】
また、上記実施例1及び実施例2では、メモリコントローラ11がメモリ20から読み出したデータを内部メモリ15に格納する場合を例として説明したが、RAM(Random Access Memory)や不揮発性記憶媒体等、任意のメモリに格納しても良い。
【0061】
また、上記実施例1及び実施例2では、元のデータの格納場所をメモリ20としたが、ROM等の任意の記憶媒体に格納しても良い。また、記憶媒体ではなく、データ通信の対応装置から受信したデータを対象としても良い。
【0062】
また、上記実施例1及び実施例2では、16バイトのデータ及びエラー訂正用の2バイトのパリティビットを用いてエラー訂正を行う場合を例として説明したが、データ及びパリティビットのサイズはこれに限られず、任意のサイズとすることが可能である。例えば、Nバイト(Nは任意の自然数)のデータ及びMバイト(MはM<Nの自然数)のパリティビットを用いても良い。
【0063】
また、上記実施例1及び実施例2では、エラー訂正回路の訂正能力が2ビットである場合について説明したが、これとは異なる任意のビット数とすることが可能である。
【0064】
また、上記実施例では、データの値を先頭から1ビットずつ反転させる場合について説明したが、反転を開始する位置はこれに限られない。結果的に全てのビットについてデータの値が反転されれば良く、任意のビット位置から反転を開始することが可能である。また、1ビットずつではなく、任意のnビット(nは自然数)を1つの単位として当該nビット内の各ビットの値を反転させてエラー訂正処理を行い、反転対象の位置をnビットずつ変えて繰り返しエラー訂正処理を実行するようにしてもよい。例えば、2ビットを1つの単位とすると、元のデータが「00」だった場合、「01」「10」「11」のようにビット反転を行ってそれぞれに対してエラー訂正処理を実行する。そして2ビットずつ位置を変えて同様の処理を繰り返し行うことにより、エラー訂正回路の訂正能力を1ビット超えたエラー及び2ビット超えたエラーを訂正することが出来る。また、1ビットずつ反転させてエラー訂正処理を行った後、2ビットずつ反転させてエラー訂正処理を行ってもよく、この場合にも訂正能力を1ビット超えたエラー及び2ビット超えたエラーを訂正することが出来る。また、反転対象となるビット位置を変化させる際、連続するビット位置ではなく、1ビット又は複数ビットの間を空けつつビット位置を変えていっても良い。
【0065】
また、上記実施例2では、データに対して4バイトのCRC符号を付加する場合について説明したが、CRC符号のサイズはこれに限られず、任意のサイズとすることが可能である。
【0066】
また、上記実施例2では、データに対するエラー訂正処理を実行した後に、CRC符号に対するエラー訂正処理を実行する場合について説明した。しかし、逆の順番又は同時にエラー訂正処理を実行しても良い。