(57)【要約】【目的】エラー訂正回路の訂正能力を超えたビット数のエラーを訂正することが可能な半導体集積回路を提供する。【構成】データ部分及びパリティビットからなるデータを記憶するメモリからのデータの読み出し及びデータのエラー訂正を行う半導体集積回路であって、メモリからデータを読み出すメモリコントローラと、所定ビット数の訂正能力を有するエラー訂正回路を有し、読み出されたデータのエラー訂正を行うエラー訂正コントローラと、を含む。エラー訂正コントローラは、読み出されたデータに対してエラー訂正回路によるエラー訂正を行い、エラー訂正後のデータのデータ部分及びパリティビットに基づいて、データに含まれるエラーの全てが訂正されたか否かを判定し、エラーの全てが訂正されていないと判定された場合には、データの各ビットのデータ値を順次反転させて、エラー訂正回路によるエラー訂正を実行する。【選択図】図１
2019193057.tif 000002
【特許請求の範囲】
【請求項１】
データ部分及び当該データ部分に対応するパリティビットからなるデータを記憶するメモリに接続され、前記メモリからの前記データの読み出し及び前記データのエラー訂正を行う半導体集積回路であって、
前記メモリから前記データを読み出すメモリコントローラと、
所定ビット数の訂正能力を有するエラー訂正回路を有し、前記メモリから読み出された前記データのエラー訂正を行うエラー訂正コントローラと、
を含み、
前記エラー訂正コントローラは、
前記メモリから読み出された前記データに対して前記エラー訂正回路によるエラー訂正を行い、
エラー訂正後の前記データの前記データ部分及び前記パリティビットに基づいて、前記データに含まれるエラーの全てが訂正されたか否かを判定し、
前記データに含まれるエラーの全てが訂正されていないと判定された場合には、前記データの各ビットのデータ値を順次反転させて、前記エラー訂正回路によるエラー訂正を実行する、
ことを特徴とする半導体集積回路。
【請求項２】
前記エラー訂正コントローラは、
エラー訂正後の前記データの前記データ部分について新たなパリティビットを生成し、
前記新たなパリティビットとエラー訂正後の前記データの前記パリティビットとが一致するか否かに基づいて、前記データに含まれるエラーの全てが訂正されたか否かを判定する、
ことを特徴とする請求項１に記載の半導体集積回路。
【請求項３】
前記エラー訂正コントローラは、
前記データに含まれるエラーの全てが訂正されたと判定されるか又は前記データの全ビットについてデータ値の反転が完了するまで、前記データの各ビットのデータ値の反転及び前記エラー訂正回路によるエラー訂正を繰り返し実行する、
ことを特徴とする請求項１又は２に記載の半導体集積回路。
【請求項４】
前記メモリには、前記データ部分に対応するＣＲＣ符号が前記データとともに記憶されており、
前記メモリコントローラは、前記データ及び前記ＣＲＣ符号を読み出し、
前記エラー訂正コントローラは、
前記メモリから読み出された前記データ及び前記ＣＲＣ符号に対して、前記エラー訂正回路によるエラー訂正を行い、
エラー訂正後の前記データの前記データ部分について新たなＣＲＣ符号を生成し、
前記新たなＣＲＣ符号とエラー訂正後の前記ＣＲＣ符号とが一致するか否かに基づいて、前記エラー訂正回路によるエラー訂正が正しくなされた否かを判定する、
ことを特徴とする請求項１乃至３のいずれか１項に記載の半導体集積回路。
【請求項５】
前記メモリには、前記ＣＲＣ符号及び前記ＣＲＣ符号に対応するパリティビットからなるＣＲＣデータが記憶され、
前記メモリコントローラは、前記メモリから前記ＣＲＣデータを読み出し、
前記エラー訂正コントローラは、
前記メモリから読み出された前記ＣＲＣデータに対して前記エラー訂正回路によるエラー訂正を行い、
前記エラー訂正後の前記ＣＲＣデータの前記ＣＲＣ符号について新たなパリティビットを生成し、
前記新たなパリティビットとエラー訂正後の前記ＣＲＣデータの前記パリティビットとが一致するか否かに基づいて、前記ＣＲＣデータに含まれるエラーの全てが訂正されたか否かを判定し、
前記ＣＲＣデータに含まれるエラーの全てが訂正されていないと判定された場合には、前記ＣＲＣデータの各ビットのデータ値を順次反転させて前記エラー訂正回路によるエラー訂正を実行する、
ことを特徴とする請求項４に記載の半導体集積回路。
【請求項６】
前記エラー訂正コントローラは、ｎビット（ｎは自然数）単位で対象となるビット位置を変化させつつ、前記各ビットのデータ値の反転を行うことを特徴とする請求項１乃至５のいずれか１項に記載の半導体集積回路。
【請求項７】
データ部分及び当該データ部分に対応するパリティビットからなるデータを記憶するメモリと、
前記メモリから前記データを読み出すメモリコントローラと、
所定のビット数の訂正能力を有するエラー訂正回路を有し、前記メモリから読み出された前記データのエラー訂正を行うエラー訂正コントローラと、
を含み、
前記エラー訂正コントローラは、
前記メモリから読み出された前記データに対して前記エラー訂正回路によるエラー訂正を行い、
エラー訂正後の前記データの前記データ部分及び前記パリティビットに基づいて、前記データに含まれるエラーの全てが訂正されたか否かを判定し、
前記データに含まれるエラーの全てが訂正されていないと判定された場合には、前記データの各ビットのデータ値を順次反転させて、前記エラー訂正回路によるエラー訂正を実行する、
ことを特徴とする記憶装置。
【請求項８】
前記エラー訂正コントローラは、
エラー訂正後の前記データの前記データ部分について新たなパリティビットを生成し、
前記新たなパリティビットとエラー訂正後の前記データの前記パリティビットとが一致するか否かに基づいて、前記データに含まれるエラーの全てが訂正されたか否かを判定する、
ことを特徴とする請求項７に記載の記憶装置。
【請求項９】
前記エラー訂正コントローラは、
前記データに含まれるエラーの全てが訂正されたと判定されるか又は前記データの全ビットについてデータ値の反転が完了するまで、前記データの各ビットのデータ値の反転及び前記エラー訂正回路によるエラー訂正を繰り返し実行する、
ことを特徴とする請求項７又は８に記載の記憶装置。
【請求項１０】
前記メモリは、前記データ部分に対応するＣＲＣ符号を前記データとともに記憶し、
前記メモリコントローラは、前記データ及び前記ＣＲＣ符号を読み出し、
前記エラー訂正コントローラは、
前記メモリから読み出された前記データ及び前記ＣＲＣ符号に対して、前記エラー訂正回路によるエラー訂正を行い、
エラー訂正後の前記データの前記データ部分について新たなＣＲＣ符号を生成し、
前記新たなＣＲＣ符号とエラー訂正後の前記ＣＲＣ符号とが一致するか否かに基づいて、前記エラー訂正回路によるエラー訂正が正しくなされた否かを判定する、
ことを特徴とする請求項７乃至９のいずれか１項に記載の記憶装置。
【請求項１１】
前記メモリは、前記ＣＲＣ符号及び前記ＣＲＣ符号に対応するパリティビットからなるＣＲＣデータを記憶し、
前記メモリコントローラは、前記メモリから前記ＣＲＣデータを読み出し、
前記エラー訂正コントローラは、
前記メモリから読み出された前記ＣＲＣデータに対して、前記エラー訂正回路によるエラー訂正を行い、
エラー訂正後の前記ＣＲＣデータの前記ＣＲＣ符号について新たなパリティビットを生成し、
前記新たなパリティビットとエラー訂正後の前記ＣＲＣデータの前記パリティビットとが一致するか否かに基づいて、前記ＣＲＣデータに含まれるエラーの全てが訂正されたか否かを判定し、
前記ＣＲＣデータに含まれるエラーの全てが訂正されていないと判定された場合には、前記ＣＲＣデータの各ビットのデータ値を順次反転させて前記エラー訂正回路によるエラー訂正を実行する、
ことを特徴とする請求項１０に記載の記憶装置。
【請求項１２】
前記エラー訂正コントローラは、ｎビット（ｎは自然数）単位で対象となるビット位置を変化させつつ、前記各ビットのデータ値の反転を行うことを特徴とする請求項７乃至１１のいずれか１項に記載の記憶装置。
【請求項１３】
所定ビット数の訂正能力を有するエラー訂正回路を有し、データ部分及び当該データ部分に対応するパリティビットからなるデータを記憶するメモリから前記データの読み出し及びエラー訂正を行う半導体集積回路が実行するエラー訂正方法であって、
前記メモリから前記データを読み出すステップと、
前記メモリから読み出された前記データに対して前記エラー訂正回路によるエラー訂正を行うステップと、
エラー訂正後の前記データの前記データ部分について新たなパリティビットを生成するステップと、
前記新たなパリティビットとエラー訂正後の前記データの前記パリティビットとを比較して、前記データに含まれるエラーの全てが訂正されたか否かを判定するステップと、
前記データに含まれるエラーの全てが訂正されていないと判定された場合に、前記データの各ビットのデータ値を順次反転させて、前記エラー訂正回路によるエラー訂正を実行するステップと、
を含むことを特徴とするエラー訂正方法。
【請求項１４】
所定ビット数の訂正能力を有するエラー訂正回路を有し、データ部分及び当該データ部分に対応するパリティビットからなるデータと、前記データ部分に対応するＣＲＣ符号及び前記ＣＲＣ符号に対応するパリティビットからなるＣＲＣデータと、を記憶するメモリから前記データ及び前記ＣＲＣデータの読み出しとエラー訂正とを行う半導体集積回路が実行するエラー訂正方法であって、
前記メモリから前記データ及び前記ＣＲＣデータを読み出すステップと、
前記メモリから読み出された前記データに対してエラー訂正を行うステップと、
前記メモリから読み出された前記ＣＲＣデータに対してエラー訂正を行うステップと、
前記エラー訂正後の前記データの前記データ部分について新たなＣＲＣ符号を生成するステップと、
前記新たなＣＲＣ符号とエラー訂正後の前記ＣＲＣデータの前記ＣＲＣ符号とを比較して、前記データに対するエラー訂正が正しくなされた否かを判定するステップと、
を含むことを特徴とするエラー訂正方法。
【請求項１５】
前記メモリから読み出された前記データに対して前記エラー訂正回路によるエラー訂正を行うステップは、
前記データに対して前記エラー訂正回路によるエラー訂正を行うステップと、
エラー訂正後の前記データの前記データ部分について新たなパリティビットを生成するステップと、
前記新たなパリティビットとエラー訂正後の前記データの前記パリティビットとを比較して、前記データに含まれるエラーの全てが訂正されたか否かを判定するステップと、
前記データに含まれるエラーの全てが訂正されていないと判定された場合に、前記データの各ビットのデータ値を順次反転させて、前記エラー訂正回路によるエラー訂正を実行するステップと、
を含むことを特徴とする請求項１４に記載のエラー訂正方法。
【請求項１６】
前記メモリから読み出された前記ＣＲＣデータに対してエラー訂正を行うステップは、
前記ＣＲＣデータに対して前記エラー訂正回路によるエラー訂正を行うステップと、
エラー訂正後の前記ＣＲＣデータの前記ＣＲＣ符号について新たなパリティビットを生成するステップと、
前記新たなパリティビットとエラー訂正後の前記ＣＲＣデータの前記パリティビットとを比較して、前記データに含まれるエラーの全てが訂正されたか否かを判定するステップと、
前記データに含まれるエラーの全てが訂正されていないと判定された場合に、前記ＣＲＣデータの各ビットのデータ値を順次反転させて、前記エラー訂正回路によるエラー訂正を実行するステップと、
を含むことを特徴とする請求項１４又は１５に記載のエラー訂正方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データのエラー訂正を行う半導体集積回路及びエラー訂正方法に関する。
【背景技術】
【０００２】
データを扱う様々なシステムにおいて、エラー訂正回路が広く用いられている。例えば、デバイスに格納されているデータを他のデバイスに通信経路を介して転送する際、ビット化け等のエラーが生じる場合がある。そこで、転送時に生じたビット化けを訂正するため、デバイスにエラー訂正回路を搭載しておく場合が多い。また、ビット化けはデータの転送時だけではなく、メモリ等の記憶媒体へのデータの格納や読み出し時にも生じる。そこで、ＢＣＨ符号等の符号化手段を用いて、フラッシュメモリ等のメモリに格納するデータの誤り訂正を行う誤り訂正回路が提案されている（例えば、特許文献１、特許文献２）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１４−２２８４８号公報
【特許文献２】特開２００９−１５２７８１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
エラー訂正回路の訂正能力（すなわち何ビットのビット化けまで訂正可能か）は、デバイスに搭載可能な回路規模に制限される。従って、搭載可能な回路規模が小さいデバイスには、訂正能力が低いエラー訂正回路しか搭載することができないという問題があった。また、回路規模の大きなエラー訂正回路を搭載可能であっても、訂正能力を向上させるためにはエラー訂正回路を一から設計し直す必要があるという問題があった。
【０００５】
本発明は上記問題点に鑑みてなされたものであり、エラー訂正回路を備えた半導体集積回路であって、エラー訂正回路の訂正能力を超えたビット数のエラーを訂正することが可能な半導体集積回路を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明に係る半導体集積回路は、データ部分及び当該データ部分に対応するパリティビットからなるデータを記憶するメモリに接続され、前記メモリからの前記データの読み出し及び前記データのエラー訂正を行う半導体集積回路であって、前記メモリから前記データを読み出すメモリコントローラと、所定ビット数の訂正能力を有するエラー訂正回路を有し、前記メモリから読み出された前記データのエラー訂正を行うエラー訂正コントローラと、を含み、前記エラー訂正コントローラは、前記メモリから読み出された前記データに対して前記エラー訂正回路によるエラー訂正を行い、エラー訂正後の前記データの前記データ部分及び前記パリティビットに基づいて、前記データに含まれるエラーの全てが訂正されたか否かを判定し、前記データに含まれるエラーの全てが訂正されていないと判定された場合には、前記データの各ビットのデータ値を順次反転させて、前記エラー訂正回路によるエラー訂正を実行する、ことを特徴とする。
【０００７】
また、本発明に係る記憶装置は、データ部分及び当該データ部分に対応するパリティビットからなるデータを記憶するメモリと、前記メモリから前記データを読み出すメモリコントローラと、所定のビット数の訂正能力を有するエラー訂正回路を有し、前記メモリから読み出された前記データのエラー訂正を行うエラー訂正コントローラと、を含み、前記エラー訂正コントローラは、前記メモリから読み出された前記データに対して前記エラー訂正回路によるエラー訂正を行い、エラー訂正後の前記データの前記データ部分及び前記パリティビットに基づいて、前記データに含まれるエラーの全てが訂正されたか否かを判定し、前記データに含まれるエラーの全てが訂正されていないと判定された場合には、前記データの各ビットのデータ値を順次反転させて、前記エラー訂正回路によるエラー訂正を実行する、ことを特徴とする。
【０００８】
また、本発明に係るエラー訂正方法は、所定ビット数の訂正能力を有するエラー訂正回路を有し、データ部分及び当該データ部分に対応するパリティビットからなるデータを記憶するメモリから前記データの読み出し及びエラー訂正を行う半導体集積回路が実行するエラー訂正方法であって、前記メモリから前記データを読み出すステップと、前記メモリから読み出された前記データに対して前記エラー訂正回路によるエラー訂正を行うステップと、エラー訂正後の前記データの前記データ部分について新たなパリティビットを生成するステップと、前記新たなパリティビットとエラー訂正後の前記データの前記パリティビットとを比較して、前記データに含まれるエラーの全てが訂正されたか否かを判定するステップと、前記データに含まれるエラーの全てが訂正されていないと判定された場合に、前記データの各ビットのデータ値を順次反転させて、前記エラー訂正回路によるエラー訂正を実行するステップと、を含むことを特徴とする。
【０００９】
また、本発明に係るエラー訂正方法は、所定ビット数の訂正能力を有するエラー訂正回路を有し、データ部分及び当該データ部分に対応するパリティビットからなるデータと、前記データ部分に対応するＣＲＣ符号及び前記ＣＲＣ符号に対応するパリティビットからなるＣＲＣデータと、を記憶するメモリから前記データ及び前記ＣＲＣデータの読み出しとエラー訂正とを行う半導体集積回路が実行するエラー訂正方法であって、前記メモリから前記データ及び前記ＣＲＣデータを読み出すステップと、前記メモリから読み出された前記データに対してエラー訂正を行うステップと、前記メモリから読み出された前記ＣＲＣデータに対してエラー訂正を行うステップと、前記エラー訂正後の前記データの前記データ部分について新たなＣＲＣ符号を生成するステップと、前記新たなＣＲＣ符号とエラー訂正後の前記ＣＲＣデータの前記ＣＲＣ符号とを比較して、前記データに対するエラー訂正が正しくなされた否かを判定するステップと、を含むことを特徴とする。
【発明の効果】
【００１０】
本発明に係る半導体集積回路によれば、エラー訂正回路の訂正能力を超えたビット数のエラーを訂正することが可能となる。
【図面の簡単な説明】
【００１１】
【図１】本実施例の半導体集積回路を含む記憶装置の構成を示すブロック図である。
【図２Ａ】実施例１におけるデータの構成を示す図である。
【図２Ｂ】エラー訂正後のデータ及びパリティビットを示す図である。
【図２Ｃ】エラー訂正後のデータ部分に対するパリティビット生成及びエラー訂正前のパリティビットとの比較の様子を模式的に示す図である。
【図２Ｄ】１ビットの値を反転させたデータ及びパリティビットを示す図である。
【図２Ｅ】１ビットの値が反転したデータをエラー訂正した後のデータ及びパリティビットを示す図である。
【図２Ｆ】エラー訂正後のデータ部分に対するパリティビットの生成及びエラー訂正前のパリティビットとの比較の様子を模式的に示す図である。
【図３】実施例１の半導体集積回路が実行するエラー訂正処理の処理ルーチンを示すフローチャートである。
【図４】実施例１の半導体集積回路が実行するエラー訂正処理の処理ルーチンを示すフローチャートである。
【図５】実施例２におけるデータの構成を示す図である。
【図６】実施例２の半導体集積回路が実行するエラー訂正処理の処理ルーチンを示すフローチャートである。
【図７】実施例２の半導体集積回路が実行するエラー訂正処理の処理ルーチンを示すフローチャートである。
【図８】実施例２の半導体集積回路が実行するエラー訂正処理の処理ルーチンを示すフローチャートである。
【図９Ａ】メモリから読み出されるＣＲＣ符号及びパリティビットの構成を示す図である。
【図９Ｂ】エラー訂正後のＣＲＣ符号及びパリティビットを示す図である。
【図９Ｃ】エラー訂正後のＣＲＣ符号に対するパリティビットの生成及びエラー訂正前のパリティビットとの比較の様子を模式的に示す図である。
【図９Ｄ】１ビットの値を反転させたＣＲＣ符号及びパリティビットを示す図である。
【図９Ｅ】１ビットの値が反転したＣＲＣ符号をエラー訂正した後のデータ及びパリティビットを示す図である。
【図９Ｆ】エラー訂正後のＣＲＣ符号に対するパリティビットの生成及びエラー訂正前のパリティビットとの比較の様子を模式的に示す図である。
【図１０】エラー訂正後のデータ部分に対するＣＲＣ符号の生成及び比較の様子を模式的に示す図である。
【発明を実施するための形態】
【００１２】
以下に本発明の好適な実施例を詳細に説明する。なお、以下の各実施例における説明及び添付図面においては、実質的に同一または等価な部分には同一の参照符号を付している。
【実施例１】
【００１３】
図１は、本実施例の記憶装置１００の構成を示すブロック図である。記憶装置１００は、メモリコントローラ１１、エラー訂正コントローラ１２及びメモリ２０から構成されている。メモリコントローラ１１及びエラー訂正コントローラ１２は、１チップの半導体集積回路１０を構成している。
【００１４】
メモリコントローラ１１は、メモリ２０へのデータの書き込み及びメモリ２０からのデータの読み出しを実行する。メモリコントローラ１１は、メモリ２０から読み出したデータをエラー訂正コントローラ１２に供給する。
【００１５】
エラー訂正コントローラ１２は、メモリコントローラ１１がメモリ２０から読み出したデータに対してエラー訂正を行う回路である。具体的には、エラー訂正コントローラ１２は、データの書き込み時及び読み出し時に生じたビットエラー（いわゆるビット化け）を訂正する。エラー訂正コントローラ１２は、訂正制御部１３、エラー訂正回路１４及び内部メモリ１５を含む。
【００１６】
訂正制御部１３は、エラー訂正回路１４を制御してエラー訂正を実行させる制御回路である。また、訂正制御部１３は、メモリ２０から読み出されたデータに対するパリティビットの生成やデータの比較等のデータ処理を行う。
【００１７】
エラー訂正回路１４は、メモリ２０から読み出されたデータに対してエラー訂正（すなわち、ビット化けの訂正）を実行する回路である。エラー訂正回路１４は、例えばＢＣＨ符号化方式を用いてエラー訂正を実行する。エラー訂正回路１４は、エラー訂正方式やデータに付加されるパリティビットのサイズ（バイト数）によって定まる所定ビット数の訂正能力を有する。
【００１８】
内部メモリ１５は、エラー訂正コントローラ１２の内部に設けられた揮発性のメモリであり、訂正制御部１３及びエラー訂正回路１４が実行するエラー処理においてデータを一時記憶するためのワーク領域として使用される。
【００１９】
メモリ２０は、不揮発性記憶装置であり、例えばＮＡＮＤ型フラッシュメモリから構成されている。メモリ２０は、所定ビット長（例えば１６バイト）のデータと、ＢＣＨ符号化方式に基づいて生成されたパリティビットと、を対応付けて記憶する。
【００２０】
図２Ａは、メモリ２０に格納されるデータの構成例を示す図である。メモリ２０には、１６バイトのデータに２バイトのパリティビットを付加したものが１つのデータとして格納されている。以下の説明では、１６バイトのデータを「データ部分」と称し、データ部分に２バイトのパリティビットを付加した全体部分（１８バイト）を単に「データ」と称する。
【００２１】
このように、本実施例では１６バイトのデータ部分に２バイトのパリティビットが付加されてデータが構成されており、エラー訂正回路１４は、１８バイトのデータ中、２ビットのエラーまでを訂正することが可能である。すなわち、本実施例のエラー訂正回路１４は、２ビットの訂正能力を有する。
【００２２】
次に、本実施例の半導体集積回路１０が実行するエラー訂正処理の動作について、図３及び図４のフローチャートと、図２Ａ〜２Ｆとを参照して説明する。
【００２３】
メモリコントローラ１１は、図２Ａに示すような構成を有する１８バイトのデータ（データ部分１６バイト、パリティビット２バイト）をメモリ２０から読み出す（ＳＴＥＰ１０１）。メモリコントローラ１１は、読み出したデータ（以下、読み出しデータと称する）をエラー訂正コントローラ１２に供給する。エラー訂正コントローラ１２の訂正制御部１３は、読み出しデータを内部メモリ１５に格納する。
【００２４】
訂正制御部１３は、エラー訂正回路１４を制御して、読み出しデータのデータ部分及びパリティビットの各々に対してエラー訂正処理を実行させる（ＳＴＥＰ１０２）。図２Ｂは、エラー訂正後の読み出しデータを斜線で示している。
【００２５】
次に、訂正制御部１３は、エラー訂正回路１４を制御して、エラー訂正後の読み出しデータ（以下、訂正データと称する）のデータ部分（１６バイト）について、当該データ部分に対応する２バイトのパリティビットを新たに生成させる（ＳＴＥＰ１０３）。
【００２６】
訂正制御部１３は、ＳＴＥＰ１０３で新たに生成したパリティビットと、ＳＴＥＰ１０２でエラー訂正されたパリティビットと、を比較する（ＳＴＥＰ１０４）。図２Ｃは、新たに生成したパリティビットをドットで示し、ＳＴＥＰ１０２でエラー訂正されたパリティビットを斜線で示している。
【００２７】
訂正制御部１３は、２つのパリティビットが一致したか否かを判定する（ＳＴＥＰ１０５）。パリティビットが一致したと判定すると（ＳＴＥＰ１０５：ＹＥＳ）、読み出しデータに含まれる全てのエラーが訂正されたと判定して、処理を終了する。一方、パリティビットが一致しなかったと判定すると（ＳＴＥＰ１０５：ＮＯ）、エラー訂正回路１４の訂正能力を超えたエラー（すなわち、本実施例では２ビットを超えたエラー）が存在していると判定して、半導体集積回路１０の動作は図４のフローチャートに示す処理ステップへと移行する。
【００２８】
訂正制御部１３は、訂正データの先頭の１ビットの値を反転させる（ＳＴＥＰ２０１）。図２Ｄは、先頭の１ビットの値が反転した訂正データを示している。
【００２９】
訂正制御部１３は、エラー訂正回路１４を制御して、先頭の１ビットの値が反転した訂正データに対してエラー訂正処理を実行させる（ＳＴＥＰ２０２）。図２Ｅは、ＳＴＥＰ２０２におけるエラー訂正後のデータを示している。
【００３０】
訂正制御部１３は、エラー訂正回路１４を制御して、ＳＴＥＰ２０２におけるエラー訂正後のデータ（すなわち、ビット反転及び訂正を行ったデータ）のデータ部分（１６バイト）について、当該データ部分に対応する２バイトのパリティビットを新たに生成させる（ＳＴＥＰ２０３）。
【００３１】
訂正制御部１３は、ＳＴＥＰ２０３で新たに生成したパリティビットと、ＳＴＥＰ２０２でエラー訂正されたパリティビットと、を比較する（ＳＴＥＰ２０４）。図２Ｆは、新たに生成したパリティビットをドットで示し、ＳＴＥＰ２０２でエラー訂正されたパリティビットを斜線で示している。
【００３２】
訂正制御部１３は、２つのパリティビットが一致したか否かを判定する（ＳＴＥＰ２０５）。パリティビットが一致したと判定すると（ＳＴＥＰ２０５：ＹＥＳ）、ＳＴＥＰ２０２でエラー訂正がなされたと判定して、処理を終了する。
【００３３】
一方、パリティビットが一致しなかったと判定すると（ＳＴＥＰ２０５：ＮＯ）、訂正制御部１３は、パリティビットが一致するか又は最終ビットに至るまで値を反転させるビットをずらしつつ、ＳＴＥＰ２０２〜ＳＴＥＰ２０５の処理を繰り返し実行する。すなわち、訂正制御部１３は、訂正データの最終ビットまでビット反転が済んでいるか否かを判定し（ＳＴＥＰ２０６）、最終ビットまでビット反転が済んでいないと判定すると（ＳＴＥＰ２０６：ＮＯ）、次のビットの値を反転させて再びＳＴＥＰ２０２〜ＳＴＥＰ２０５の処理を実行する。最終ビットまでビット反転が済んでいると判定すると（ＳＴＥＰ２０６：ＹＥＳ）、訂正制御部１３は、エラー訂正回路１４の訂正能力に反転分の１ビットを加えたビット数（すなわち、本実施例では３ビット）を超えたビット数のエラーが発生しているためエラー訂正ができないと判定し（ＳＴＥＰ２０８）、処理を終了する。
【００３４】
以上のように、本実施例の半導体集積回路１０は、エラー訂正を行ったパリティビットとエラー訂正後のデータについて新たに生成したパリティビットとを比較し、パリティビット同士が一致するか否かを判定することにより、読み出したデータに含まれる全てのエラーが訂正されたか否かを判定する。そして、全てのエラーが訂正されていないと判定すると、データの値を１ビットずつ反転させつつ、繰り返しエラー訂正を行う。かかる処理によれば、エラー訂正回路１４の訂正能力を１ビット超えたエラー（ビット化け）がデータに存在する場合でも、正しくエラー訂正をすることができる。
【００３５】
従って、本実施例の半導体集積回路１０によれば、エラー訂正回路の設計を変更することなく、エラー訂正回路の訂正能力以上のビットエラーを訂正することができる。また、エラー訂正回路の設計を変更する場合と比べて、回路規模の増加を抑えることが出来る。
【実施例２】
【００３６】
次に、実施例２の記憶装置について説明する。本実施例の記憶装置は、図１に示す実施例１の記憶装置１００と同様の構成を有し、メモリ２０に格納されるデータの構成及びエラー訂正コントローラ１２が実行するエラー訂正処理の処理動作において実施例１と異なる。
【００３７】
図５は、本実施例においてメモリ２０に格納されるデータの構成例を示す図である。メモリ２０には、１６バイトのデータ部分と、これに対応する４バイトのＣＲＣ（Cyclic Redundancy Check）符号とが対応付けて格納されている。そして、１６バイトのデータ部分及び４バイトのＣＲＣ符号には、それぞれ２バイトのパリティビットが付加されている。以下の説明では、４バイトのＣＲＣ符号に２バイトのパリティビットを付加したものを「ＣＲＣデータ」と称する。
【００３８】
このように、本実施例では１６バイトのデータ部分に２バイトのパリティビットが付加され、４バイトのＣＲＣ符号に２バイトのパリティビットが付加されている。また、本実施例のエラー訂正回路１４は、実施例１と同様、２ビットのエラー訂正能力を有する。従って、エラー訂正回路１４は、１８バイトのデータ中、２ビットのエラーまでを訂正することが可能である。また、エラー訂正回路１４は、６バイトのＣＲＣデータ中、２ビットのエラーまでを訂正することが可能である。
【００３９】
次に、本実施例の半導体集積回路１０が実行するエラー訂正処理の動作について、図６〜図８のフローチャートと、図９Ａ〜９Ｆ及び図１０とを参照して説明する。
【００４０】
メモリコントローラ１１は、１６バイトのデータ部分及び２バイトのパリティビットからなる１８バイトのデータと、４バイトのＣＲＣ符号及び２バイトのパリティビットからなる６バイトのＣＲＣデータと、をメモリ２０から読み出す（ＳＴＥＰ３０１）。メモリコントローラ１１は、読み出したデータ（読み出しデータ）及び読み出したＣＲＣデータ（以下、読み出しＣＲＣデータと称する）をエラー訂正コントローラ１２に供給する。エラー訂正コントローラ１２の訂正制御部１３は、読み出しデータ及び読み出しＣＲＣデータを内部メモリ１５に格納する。
【００４１】
半導体集積回路１０は、読み出しデータに対して、実施例１のＳＴＥＰ１０１〜１０５、及びＳＴＥＰ２０１〜２０８の一連の処理と同様の処理を実行する。その際、ＳＴＥＰ１０５及びＳＴＥＰ２０５で一致する（ＹＥＳ）と判定された場合、半導体集積回路１０の動作は、ＳＴＥＰ３０３の処理ステップへと移行する（ＳＴＥＰ３０２）。
【００４２】
訂正制御部１３は、エラー訂正回路１４を制御して、読み出しＣＲＣデータのＣＲＣ符号及びパリティビットの各々に対してエラー訂正処理を実行させる（ＳＴＥＰ３０３）。図９Ａは、エラー訂正前の読み出しＣＲＣデータを示している。図９Ｂは、エラー訂正後の読み出しＣＲＣデータを斜線で示している。
【００４３】
次に、訂正制御部１３は、エラー訂正回路１４を制御して、エラー訂正後の読み出しＣＲＣデータ（以下、訂正ＣＲＣデータと称する）のＣＲＣ符号（４バイト）について、当該ＣＲＣ符号に対応する２バイトのパリティビットを新たに生成させる（ＳＴＥＰ３０４）。
【００４４】
訂正制御部１３は、ＳＴＥＰ３０４で新たに生成したパリティビットと、ＳＴＥＰ３０３でエラー訂正されたパリティビットと、を比較する（ＳＴＥＰ３０５）。図９Ｃは、新たに生成したパリティビットをドットで示し、ＳＴＥＰ３０３でエラー訂正されたパリティビットを斜線で示している。
【００４５】
訂正制御部１３は、２つのパリティビットが一致したか否かを判定する（ＳＴＥＰ３０６）。パリティビットが一致したと判定すると（ＳＴＥＰ３０６：ＹＥＳ）、読み出しＣＲＣデータに含まれる全てのエラーが訂正されたと判定して、半導体集積回路１０の動作は図８のフローチャートに示す処理ステップへと移行する。一方、パリティビットが一致しなかったと判定すると（ＳＴＥＰ３０６：ＮＯ）、エラー訂正回路１４の訂正能力を超えたエラー（すなわち、本実施例では２ビットを超えたエラー）が存在していると判定して、半導体集積回路１０の動作は図７のフローチャートに示す処理ステップへと移行する。
【００４６】
訂正制御部１３は、訂正ＣＲＣデータの先頭の１ビットの値を反転させる（ＳＴＥＰ４０１）。図９Ｄは、先頭の１ビットの値が反転した訂正ＣＲＣデータを示している。
【００４７】
訂正制御部１３は、エラー訂正回路１４を制御して、先頭の１ビットの値が反転した訂正ＣＲＣデータに対してエラー訂正処理を実行させる（ＳＴＥＰ４０２）。図９Ｅは、ＳＴＥＰ４０２におけるエラー訂正後のＣＲＣデータを示している。
【００４８】
訂正制御部１３は、エラー訂正回路１４を制御して、ＳＴＥＰ４０２におけるエラー訂正後のＣＲＣデータ（すなわち、ビット反転及び訂正を行ったＣＲＣデータ）のＣＲＣ符号（４バイト）について、当該ＣＲＣ符号に対応する２バイトのパリティビットを新たに生成させる（ＳＴＥＰ４０３）。
【００４９】
訂正制御部１３は、ＳＴＥＰ４０３で新たに生成したパリティビットと、ＳＴＥＰ４０２でエラー訂正されたパリティビットと、を比較する（ＳＴＥＰ４０４）。図９Ｆは、新たに生成したパリティビットをドットで示し、ＳＴＥＰ４０２でエラー訂正されたパリティビットを斜線で示している。
【００５０】
訂正制御部１３は、２つのパリティビットが一致したか否かを判定する（ＳＴＥＰ４０５）。パリティビットが一致したと判定すると（ＳＴＥＰ４０５：ＹＥＳ）、ＳＴＥＰ４０２でエラー訂正がなされたと判定して、半導体集積回路１０の動作は図８のフローチャートに示す処理ステップへと移行する。
【００５１】
一方、パリティビットが一致しなかったと判定すると（ＳＴＥＰ４０５：ＮＯ）、訂正制御部１３は、パリティビットが一致するか又は最終ビットに至るまで値を反転させるビットをずらしつつ、ＳＴＥＰ４０２〜ＳＴＥＰ４０５の処理を繰り返し実行する。すなわち、訂正制御部１３は、訂正ＣＲＣデータの最終ビットまでビット反転が済んでいるか否かを判定し（ＳＴＥＰ４０６）、最終ビットまでビット反転が済んでいないと判定すると（ＳＴＥＰ４０６：ＮＯ）、次のビットの値を反転させて再びＳＴＥＰ４０２〜ＳＴＥＰ４０５の処理を実行する。最終ビットまでビット反転が済んでいると判定すると（ＳＴＥＰ４０６：ＹＥＳ）、訂正制御部１３は、エラー訂正回路１４の訂正能力に反転分の１ビットを加えたビット数（すなわち、本実施例では３ビット）を超えたビット数のエラーが発生しているためエラー訂正ができないと判定し（ＳＴＥＰ４０８）、処理を終了する。
【００５２】
訂正制御部１３は、ＳＴＥＰ３０６及びＳＴＥＰ４０５の各々において、パリティビット同士が一致したと判定すると、訂正したデータの１６バイトのデータ部分について、当該データ部分に対応する４バイトのＣＲＣ符号を新たに生成する（ＳＴＥＰ５０１）。
【００５３】
訂正制御部１３は、ＳＴＥＰ５０１で新たに生成したＣＲＣ符号と、ＳＴＥＰ３０３又はＳＴＥＰ４０２でエラー訂正されたＣＲＣ符号と、を比較する（ＳＴＥＰ５０２）。図１０は、新たに生成したＣＲＣ符号をドットで示し、ＳＴＥＰ３０３又はＳＴＥＰ４０２でエラー訂正されたＣＲＣ符号を斜線で示している。
【００５４】
訂正制御部１３は、２つのＣＲＣ符号が一致したか否かを判定する（ＳＴＥＰ５０３）。ＣＲＣ符号が一致したと判定すると（ＳＴＥＰ５０３：ＹＥＳ）、データ及びＣＲＣデータの全てについて正しくエラー訂正がなされたと判定し、処理を終了する（ＳＴＥＰ５０４）。
【００５５】
一方、２つのＣＲＣ符号が一致しないと判定すると（ＳＴＥＰ５０３：ＮＯ）、訂正制御部１３は、エラー訂正処理において誤訂正が発生したと判定し、処理を終了する（ＳＴＥＰ５０５）。
【００５６】
以上のように、本実施例の半導体集積回路１０は、エラー訂正を行ったパリティビットとエラー訂正後のデータについて新たに生成したパリティビットとを比較し、パリティビット同士が一致するか否かを判定することにより、読み出したデータに含まれる全てのエラーが訂正されたか否かを判定する。そして、全てのエラーが訂正されていないと判定すると、データの値を１ビットずつ反転させつつ、繰り返しエラー訂正を行う。かかる処理によれば、エラー訂正回路１４の訂正能力を１ビット超えたエラー（ビット化け）がデータに存在する場合でも、正しくエラー訂正をすることができる。従って、エラー訂正回路の設計を変更することなく、エラー訂正回路の訂正能力以上のビットエラーを訂正することができる。また、エラー訂正回路の設計を変更する場合と比べて、回路規模の増加を抑えることが出来る。
【００５７】
また、本実施例の半導体集積回路１０は、データに対してＣＲＣ符号を付加しておき、ＣＲＣ符号についてもデータと同様のエラー訂正処理を行う。そして、エラー訂正を行ったＣＲＣ符号と、エラー訂正後のデータについて新たに生成したＣＲＣ符号とを比較し、ＣＲＣ符号同士が一致するか否かを判定することにより、エラー訂正が正しくなされたか否かを判定する。かかる処理によれば、エラーの誤訂正を防ぐことが出来る。
【００５８】
なお、本発明は上記実施形態に限定されない。例えば、訂正制御部１３は、特定の処理を行う専用の回路ではなく、エラー訂正コントローラ１２の各部の動作を制御するＣＰＵ（Central Processing Unit）やファームウェアから構成されていても良い。
【００５９】
また、上記実施例１及び実施例２では、エラー訂正回路１４がＢＣＨ符号化方式を用いてエラー訂正を実行する場合について説明したが、任意の訂正方式を用いてエラー訂正を行うものであっても良い。
【００６０】
また、上記実施例１及び実施例２では、メモリコントローラ１１がメモリ２０から読み出したデータを内部メモリ１５に格納する場合を例として説明したが、ＲＡＭ（Random Access Memory）や不揮発性記憶媒体等、任意のメモリに格納しても良い。
【００６１】
また、上記実施例１及び実施例２では、元のデータの格納場所をメモリ２０としたが、ＲＯＭ等の任意の記憶媒体に格納しても良い。また、記憶媒体ではなく、データ通信の対応装置から受信したデータを対象としても良い。
【００６２】
また、上記実施例１及び実施例２では、１６バイトのデータ及びエラー訂正用の２バイトのパリティビットを用いてエラー訂正を行う場合を例として説明したが、データ及びパリティビットのサイズはこれに限られず、任意のサイズとすることが可能である。例えば、Ｎバイト（Ｎは任意の自然数）のデータ及びＭバイト（ＭはＭ＜Ｎの自然数）のパリティビットを用いても良い。
【００６３】
また、上記実施例１及び実施例２では、エラー訂正回路の訂正能力が２ビットである場合について説明したが、これとは異なる任意のビット数とすることが可能である。
【００６４】
また、上記実施例では、データの値を先頭から１ビットずつ反転させる場合について説明したが、反転を開始する位置はこれに限られない。結果的に全てのビットについてデータの値が反転されれば良く、任意のビット位置から反転を開始することが可能である。また、１ビットずつではなく、任意のｎビット（ｎは自然数）を１つの単位として当該ｎビット内の各ビットの値を反転させてエラー訂正処理を行い、反転対象の位置をｎビットずつ変えて繰り返しエラー訂正処理を実行するようにしてもよい。例えば、２ビットを１つの単位とすると、元のデータが「００」だった場合、「０１」「１０」「１１」のようにビット反転を行ってそれぞれに対してエラー訂正処理を実行する。そして２ビットずつ位置を変えて同様の処理を繰り返し行うことにより、エラー訂正回路の訂正能力を１ビット超えたエラー及び２ビット超えたエラーを訂正することが出来る。また、１ビットずつ反転させてエラー訂正処理を行った後、２ビットずつ反転させてエラー訂正処理を行ってもよく、この場合にも訂正能力を１ビット超えたエラー及び２ビット超えたエラーを訂正することが出来る。また、反転対象となるビット位置を変化させる際、連続するビット位置ではなく、１ビット又は複数ビットの間を空けつつビット位置を変えていっても良い。
【００６５】
また、上記実施例２では、データに対して４バイトのＣＲＣ符号を付加する場合について説明したが、ＣＲＣ符号のサイズはこれに限られず、任意のサイズとすることが可能である。
【００６６】
また、上記実施例２では、データに対するエラー訂正処理を実行した後に、ＣＲＣ符号に対するエラー訂正処理を実行する場合について説明した。しかし、逆の順番又は同時にエラー訂正処理を実行しても良い。
【符号の説明】
【００６７】
１００  記憶装置
１０  半導体集積回路
１１  メモリコントローラ
１２  エラー訂正コントローラ
１３  訂正制御部
１４  エラー訂正回路
１５  内部メモリ
２０  メモリ
【図１】
2019193057.tif 000003
【図２Ａ】
2019193057.tif 000004
【図２Ｂ】
2019193057.tif 000005
【図２Ｃ】
2019193057.tif 000006
【図２Ｄ】
2019193057.tif 000007
【図２Ｅ】
2019193057.tif 000008
【図２Ｆ】
2019193057.tif 000009
【図３】
2019193057.tif 000010
【図４】
2019193057.tif 000011
【図５】
2019193057.tif 000012
【図６】
2019193057.tif 000013
【図７】
2019193057.tif 000014
【図８】
2019193057.tif 000015
【図９Ａ】
2019193057.tif 000016
【図９Ｂ】
2019193057.tif 000017
【図９Ｃ】
2019193057.tif 000018
【図９Ｄ】
2019193057.tif 000019
【図９Ｅ】
2019193057.tif 000020
【図９Ｆ】
2019193057.tif 000021
【図１０】
2019193057.tif 000022