(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-11-24
(45)【発行日】2022-12-02
(54)【発明の名称】半導体集積回路、記憶装置及びエラー訂正方法
(51)【国際特許分類】
H04L 1/00 20060101AFI20221125BHJP
H03M 13/37 20060101ALI20221125BHJP
【FI】
H04L1/00 B
H03M13/37
(21)【出願番号】P 2018082840
(22)【出願日】2018-04-24
【審査請求日】2021-02-09
(73)【特許権者】
【識別番号】308033711
【氏名又は名称】ラピスセミコンダクタ株式会社
(74)【代理人】
【識別番号】100079119
【氏名又は名称】藤村 元彦
(74)【代理人】
【識別番号】100147728
【氏名又は名称】高野 信司
(72)【発明者】
【氏名】坂東 和彦
(72)【発明者】
【氏名】宮崎 聡司
【審査官】北村 智彦
(56)【参考文献】
【文献】特開2008-141439(JP,A)
【文献】特開2018-023000(JP,A)
【文献】特開2016-076905(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
H04L 1/00
H03M 13/37
IEEE Xplore
(57)【特許請求の範囲】
【請求項1】
データ部分及び当該データ部分に対応するパリティビットからなるデータを記憶するメモリに接続され、前記メモリからの前記データの読み出し及び前記データのエラー訂正を行う半導体集積回路であって、
前記メモリから前記データを読み出すメモリコントローラと、
所定ビット数の訂正能力を有するエラー訂正回路を有し、前記メモリから読み出された前記データのエラー訂正を行うエラー訂正コントローラと、
を含み、
前記エラー訂正コントローラは、
前記メモリから読み出された前記データに対して前記エラー訂正回路によるエラー訂正を行い、
前記エラー訂正の実行後、前記エラー訂正が施されたデータに含まれるデータ部分について新たなパリティビットを生成し、当該新たなパリティビットと、前記エラー訂正が施されたデータに含まれるパリティビットと、が一致するか否かに基づいて、前記データに含まれるエラーの全てが訂正されたか否かを判定する比較判定を行い、
前記データに含まれるエラーの全てが訂正されていないと判定された場合には、前記データの各ビットのデータ値を順次反転させつつ、前記エラー訂正回路によるエラー訂正及び前記比較判定を実行する、
ことを特徴とする半導体集積回路。
【請求項2】
前記エラー訂正コントローラは、
前記データに含まれるエラーの全てが訂正されたと判定されるか又は前記データの全ビットについてデータ値の反転が完了するまで、前記データの各ビットのデータ値の反転、前記エラー訂正回路によるエラー訂正及び前記比較判定を繰り返し実行する、
ことを特徴とする請求項1に記載の半導体集積回路。
【請求項3】
前記メモリには、前記データ部分に対応するCRC符号が前記データとともに記憶されており、
前記メモリコントローラは、前記データ及び前記CRC符号を読み出し、
前記エラー訂正コントローラは、
前記メモリから読み出された前記データ及び前記CRC符号に対して、前記エラー訂正回路によるエラー訂正を行い、
エラー訂正後の前記データの前記データ部分について新たなCRC符号を生成し、
前記新たなCRC符号とエラー訂正後の前記CRC符号とが一致するか否かに基づいて、前記エラー訂正回路によるエラー訂正が正しくなされた否かを判定する、
ことを特徴とする請求項1又は2に記載の半導体集積回路。
【請求項4】
前記メモリには、前記CRC符号及び前記CRC符号に対応するパリティビットからなるCRCデータが記憶され、
前記メモリコントローラは、前記メモリから前記CRCデータを読み出し、
前記エラー訂正コントローラは、
前記メモリから読み出された前記CRCデータに対して前記エラー訂正回路によるエラー訂正を行い、
前記エラー訂正後の前記CRCデータの前記CRC符号について新たなパリティビットを生成し、
前記新たなパリティビットとエラー訂正後の前記CRCデータの前記パリティビットとが一致するか否かに基づいて、前記CRCデータに含まれるエラーの全てが訂正されたか否かを判定し、
前記CRCデータに含まれるエラーの全てが訂正されていないと判定された場合には、前記CRCデータの各ビットのデータ値を順次反転させて前記エラー訂正回路によるエラー訂正を実行する、
ことを特徴とする請求項3に記載の半導体集積回路。
【請求項5】
前記エラー訂正コントローラは、nビット(nは自然数)単位で対象となるビット位置を変化させつつ、前記各ビットのデータ値の反転を行うことを特徴とする請求項1乃至4のいずれか1項に記載の半導体集積回路。
【請求項6】
データ部分及び当該データ部分に対応するパリティビットからなるデータを記憶するメモリと、
前記メモリから前記データを読み出すメモリコントローラと、
所定のビット数の訂正能力を有するエラー訂正回路を有し、前記メモリから読み出された前記データのエラー訂正を行うエラー訂正コントローラと、
を含み、
前記エラー訂正コントローラは、
前記メモリから読み出された前記データに対して前記エラー訂正回路によるエラー訂正を行い、
前記エラー訂正の実行後、前記エラー訂正が施されたデータに含まれるデータ部分について新たなパリティビットを生成し、生成した前記新たなパリティビットと、前記エラー訂正が施されたデータに含まれるパリティビットと、が一致するか否かに基づいて、前記データに含まれるエラーの全てが訂正されたか否かを判定する比較判定を行い、
前記データに含まれるエラーの全てが訂正されていないと判定された場合には、前記データの各ビットのデータ値を順次反転させつつ、前記エラー訂正回路によるエラー訂正及び前記比較判定を実行する、
ことを特徴とする記憶装置。
【請求項7】
前記エラー訂正コントローラは、
前記データに含まれるエラーの全てが訂正されたと判定されるか又は前記データの全ビットについてデータ値の反転が完了するまで、前記データの各ビットのデータ値の反転及び前記エラー訂正回路によるエラー訂正を繰り返し実行する、
ことを特徴とする請求項6に記載の記憶装置。
【請求項8】
前記メモリは、前記データ部分に対応するCRC符号を前記データとともに記憶し、
前記メモリコントローラは、前記データ及び前記CRC符号を読み出し、
前記エラー訂正コントローラは、
前記メモリから読み出された前記データ及び前記CRC符号に対して、前記エラー訂正回路によるエラー訂正を行い、
エラー訂正後の前記データの前記データ部分について新たなCRC符号を生成し、
前記新たなCRC符号とエラー訂正後の前記CRC符号とが一致するか否かに基づいて、前記エラー訂正回路によるエラー訂正が正しくなされた否かを判定する、
ことを特徴とする請求項6又は7に記載の記憶装置。
【請求項9】
前記メモリは、前記CRC符号及び前記CRC符号に対応するパリティビットからなるCRCデータを記憶し、
前記メモリコントローラは、前記メモリから前記CRCデータを読み出し、
前記エラー訂正コントローラは、
前記メモリから読み出された前記CRCデータに対して、前記エラー訂正回路によるエラー訂正を行い、
エラー訂正後の前記CRCデータの前記CRC符号について新たなパリティビットを生成し、
前記新たなパリティビットとエラー訂正後の前記CRCデータの前記パリティビットとが一致するか否かに基づいて、前記CRCデータに含まれるエラーの全てが訂正されたか否かを判定し、
前記CRCデータに含まれるエラーの全てが訂正されていないと判定された場合には、前記CRCデータの各ビットのデータ値を順次反転させて前記エラー訂正回路によるエラー訂正を実行する、
ことを特徴とする請求項8に記載の記憶装置。
【請求項10】
前記エラー訂正コントローラは、nビット(nは自然数)単位で対象となるビット位置を変化させつつ、前記各ビットのデータ値の反転を行うことを特徴とする請求項6乃至9のいずれか1項に記載の記憶装置。
【請求項11】
所定ビット数の訂正能力を有するエラー訂正回路を有し、データ部分及び当該データ部分に対応するパリティビットからなるデータを記憶するメモリから前記データの読み出し及びエラー訂正を行う半導体集積回路が実行するエラー訂正方法であって、
前記メモリから前記データを読み出すステップと、
前記メモリから読み出された前記データに対して前記エラー訂正回路によるエラー訂正を行うステップと、
前記エラー訂正の実行後、前記エラー訂正が施されたデータに含まれるデータ部分について新たなパリティビットを生成するステップと、
生成した前記新たなパリティビットと、前記エラー訂正が施されたデータに含まれるパリティビットと、を比較して、前記データに含まれるエラーの全てが訂正されたか否かを判定する比較判定を行うステップと、
前記データに含まれるエラーの全てが訂正されていないと判定された場合に、前記データの各ビットのデータ値を順次反転させつつ、前記エラー訂正回路によるエラー訂正及び前記比較判定を実行するステップと、
を含むことを特徴とするエラー訂正方法。
【請求項12】
所定ビット数の訂正能力を有するエラー訂正回路を有し、データ部分及び当該データ部分に対応するパリティビットからなるデータと、前記データ部分に対応するCRC符号及び前記CRC符号に対応するパリティビットからなるCRCデータと、を記憶するメモリから前記データ及び前記CRCデータの読み出しとエラー訂正とを行う半導体集積回路が実行するエラー訂正方法であって、
前記メモリから前記データ及び前記CRCデータを読み出すステップと、
前記メモリから読み出された前記データに対してエラー訂正を行うステップと、
前記メモリから読み出された前記CRCデータに対してエラー訂正を行うステップと、
前記エラー訂正後の前記データの前記データ部分について新たなCRC符号を生成するステップと、
前記新たなCRC符号
を生成するステップで生成された新たなCRC符号と
、前記CRCデータに対してエラー訂正を行うステップでエラー訂正
が行われたCRCデータ
に含まれるCRC符号と、を比較して、前記データに対するエラー訂正が正しくなされた否かを判定するステップと、
を含み、
前記メモリから読み出された前記データに対して前記エラー訂正回路によるエラー訂正を行うステップは、
前記データに対して前記エラー訂正回路によるエラー訂正を行うステップと、
前記エラー訂正の実行後、前記エラー訂正が施されたデータに含まれるデータ部分について新たなパリティビットを生成するステップと、
生成した前記新たなパリティビットと、前記エラー訂正が施されたデータに含まれるパリティビットと、を比較して、前記データに含まれるエラーの全てが訂正されたか否かを判定する比較判定を行うステップと、
前記データに含まれるエラーの全てが訂正されていないと判定された場合に、前記データの各ビットのデータ値を順次反転させつつ、前記エラー訂正回路によるエラー訂正及び前記比較判定を実行するステップと、
を含むことを特徴とするエラー訂正方法。
【請求項13】
前記メモリから読み出された前記CRCデータに対してエラー訂正を行うステップは、
前記CRCデータに対して前記エラー訂正回路によるエラー訂正を行うステップと、
エラー訂正後の前記CRCデータの前記CRC符号について新たなパリティビットを生成するステップと、
前記新たなパリティビットとエラー訂正後の前記CRCデータの前記パリティビットとを比較して、前記データに含まれるエラーの全てが訂正されたか否かを判定するステップと、
前記データに含まれるエラーの全てが訂正されていないと判定された場合に、前記CRCデータの各ビットのデータ値を順次反転させて、前記エラー訂正回路によるエラー訂正を実行するステップと、
を含むことを特徴とする請求項12に記載のエラー訂正方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データのエラー訂正を行う半導体集積回路及びエラー訂正方法に関する。
【背景技術】
【0002】
データを扱う様々なシステムにおいて、エラー訂正回路が広く用いられている。例えば、デバイスに格納されているデータを他のデバイスに通信経路を介して転送する際、ビット化け等のエラーが生じる場合がある。そこで、転送時に生じたビット化けを訂正するため、デバイスにエラー訂正回路を搭載しておく場合が多い。また、ビット化けはデータの転送時だけではなく、メモリ等の記憶媒体へのデータの格納や読み出し時にも生じる。そこで、BCH符号等の符号化手段を用いて、フラッシュメモリ等のメモリに格納するデータの誤り訂正を行う誤り訂正回路が提案されている(例えば、特許文献1、特許文献2)。
【先行技術文献】
【特許文献】
【0003】
【文献】特開2014-22848号公報
【文献】特開2009-152781号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
エラー訂正回路の訂正能力(すなわち何ビットのビット化けまで訂正可能か)は、デバイスに搭載可能な回路規模に制限される。従って、搭載可能な回路規模が小さいデバイスには、訂正能力が低いエラー訂正回路しか搭載することができないという問題があった。また、回路規模の大きなエラー訂正回路を搭載可能であっても、訂正能力を向上させるためにはエラー訂正回路を一から設計し直す必要があるという問題があった。
【0005】
本発明は上記問題点に鑑みてなされたものであり、エラー訂正回路を備えた半導体集積回路であって、エラー訂正回路の訂正能力を超えたビット数のエラーを訂正することが可能な半導体集積回路を提供することを目的とする。
【課題を解決するための手段】
【0006】
本発明に係る半導体集積回路は、データ部分及び当該データ部分に対応するパリティビットからなるデータを記憶するメモリに接続され、前記メモリからの前記データの読み出し及び前記データのエラー訂正を行う半導体集積回路であって、前記メモリから前記データを読み出すメモリコントローラと、所定ビット数の訂正能力を有するエラー訂正回路を有し、前記メモリから読み出された前記データのエラー訂正を行うエラー訂正コントローラと、を含み、前記エラー訂正コントローラは、前記メモリから読み出された前記データに対して前記エラー訂正回路によるエラー訂正を行い、前記エラー訂正の実行後、前記エラー訂正が施されたデータに含まれるデータ部分について新たなパリティビットを生成し、当該新たなパリティビットと、前記エラー訂正が施されたデータに含まれるパリティビットと、が一致するか否かに基づいて、前記データに含まれるエラーの全てが訂正されたか否かを判定する比較判定を行い、前記データに含まれるエラーの全てが訂正されていないと判定された場合には、前記データの各ビットのデータ値を順次反転させつつ、前記エラー訂正回路によるエラー訂正及び前記比較判定を実行する、ことを特徴とする。
【0007】
また、本発明に係る記憶装置は、データ部分及び当該データ部分に対応するパリティビットからなるデータを記憶するメモリと、前記メモリから前記データを読み出すメモリコントローラと、所定のビット数の訂正能力を有するエラー訂正回路を有し、前記メモリから読み出された前記データのエラー訂正を行うエラー訂正コントローラと、を含み、前記エラー訂正コントローラは、前記メモリから読み出された前記データに対して前記エラー訂正回路によるエラー訂正を行い、前記エラー訂正の実行後、前記エラー訂正が施されたデータに含まれるデータ部分について新たなパリティビットを生成し、生成した前記新たなパリティビットと、前記エラー訂正が施されたデータに含まれるパリティビットと、が一致するか否かに基づいて、前記データに含まれるエラーの全てが訂正されたか否かを判定する比較判定を行い、前記データに含まれるエラーの全てが訂正されていないと判定された場合には、前記データの各ビットのデータ値を順次反転させつつ、前記エラー訂正回路によるエラー訂正及び前記比較判定を実行する、ことを特徴とする。
【0008】
また、本発明に係るエラー訂正方法は、所定ビット数の訂正能力を有するエラー訂正回路を有し、データ部分及び当該データ部分に対応するパリティビットからなるデータを記憶するメモリから前記データの読み出し及びエラー訂正を行う半導体集積回路が実行するエラー訂正方法であって、前記メモリから前記データを読み出すステップと、前記メモリから読み出された前記データに対して前記エラー訂正回路によるエラー訂正を行うステップと、前記エラー訂正の実行後、前記エラー訂正が施されたデータに含まれるデータ部分について新たなパリティビットを生成するステップと、生成した前記新たなパリティビットと、前記エラー訂正が施されたデータに含まれるパリティビットと、を比較して、前記データに含まれるエラーの全てが訂正されたか否かを判定する比較判定を行うステップと、前記データに含まれるエラーの全てが訂正されていないと判定された場合に、前記データの各ビットのデータ値を順次反転させつつ、前記エラー訂正回路によるエラー訂正及び前記比較判定を実行するステップと、を含むことを特徴とする。
【0009】
また、本発明に係るエラー訂正方法は、所定ビット数の訂正能力を有するエラー訂正回路を有し、データ部分及び当該データ部分に対応するパリティビットからなるデータと、前記データ部分に対応するCRC符号及び前記CRC符号に対応するパリティビットからなるCRCデータと、を記憶するメモリから前記データ及び前記CRCデータの読み出しとエラー訂正とを行う半導体集積回路が実行するエラー訂正方法であって、 前記メモリから前記データ及び前記CRCデータを読み出すステップと、前記メモリから読み出された前記データに対してエラー訂正を行うステップと、前記メモリから読み出された前記CRCデータに対してエラー訂正を行うステップと、前記エラー訂正後の前記データの前記データ部分について新たなCRC符号を生成するステップと、前記新たなCRC符号とエラー訂正後の前記CRCデータの前記CRC符号とを比較して、前記データに対するエラー訂正が正しくなされた否かを判定するステップと、を含み、前記メモリから読み出された前記データに対して前記エラー訂正回路によるエラー訂正を行うステップは、前記データに対して前記エラー訂正回路によるエラー訂正を行うステップと、前記エラー訂正の実行後、前記エラー訂正が施されたデータに含まれるデータ部分について新たなパリティビットを生成するステップと、生成した前記新たなパリティビットと、前記エラー訂正が施されたデータに含まれるパリティビットと、を比較して、前記データに含まれるエラーの全てが訂正されたか否かを判定する比較判定を行うステップと、前記データに含まれるエラーの全てが訂正されていないと判定された場合に、前記データの各ビットのデータ値を順次反転させつつ、前記エラー訂正回路によるエラー訂正及び前記比較判定を実行するステップと、を含むことを特徴とする。
【発明の効果】
【0010】
本発明に係る半導体集積回路によれば、エラー訂正回路の訂正能力を超えたビット数のエラーを訂正することが可能となる。
【図面の簡単な説明】
【0011】
【
図1】本実施例の半導体集積回路を含む記憶装置の構成を示すブロック図である。
【
図2A】実施例1におけるデータの構成を示す図である。
【
図2B】エラー訂正後のデータ及びパリティビットを示す図である。
【
図2C】エラー訂正後のデータ部分に対するパリティビット生成及びエラー訂正前のパリティビットとの比較の様子を模式的に示す図である。
【
図2D】1ビットの値を反転させたデータ及びパリティビットを示す図である。
【
図2E】1ビットの値が反転したデータをエラー訂正した後のデータ及びパリティビットを示す図である。
【
図2F】エラー訂正後のデータ部分に対するパリティビットの生成及びエラー訂正前のパリティビットとの比較の様子を模式的に示す図である。
【
図3】実施例1の半導体集積回路が実行するエラー訂正処理の処理ルーチンを示すフローチャートである。
【
図4】実施例1の半導体集積回路が実行するエラー訂正処理の処理ルーチンを示すフローチャートである。
【
図5】実施例2におけるデータの構成を示す図である。
【
図6】実施例2の半導体集積回路が実行するエラー訂正処理の処理ルーチンを示すフローチャートである。
【
図7】実施例2の半導体集積回路が実行するエラー訂正処理の処理ルーチンを示すフローチャートである。
【
図8】実施例2の半導体集積回路が実行するエラー訂正処理の処理ルーチンを示すフローチャートである。
【
図9A】メモリから読み出されるCRC符号及びパリティビットの構成を示す図である。
【
図9B】エラー訂正後のCRC符号及びパリティビットを示す図である。
【
図9C】エラー訂正後のCRC符号に対するパリティビットの生成及びエラー訂正前のパリティビットとの比較の様子を模式的に示す図である。
【
図9D】1ビットの値を反転させたCRC符号及びパリティビットを示す図である。
【
図9E】1ビットの値が反転したCRC符号をエラー訂正した後のデータ及びパリティビットを示す図である。
【
図9F】エラー訂正後のCRC符号に対するパリティビットの生成及びエラー訂正前のパリティビットとの比較の様子を模式的に示す図である。
【
図10】エラー訂正後のデータ部分に対するCRC符号の生成及び比較の様子を模式的に示す図である。
【発明を実施するための形態】
【0012】
以下に本発明の好適な実施例を詳細に説明する。なお、以下の各実施例における説明及び添付図面においては、実質的に同一または等価な部分には同一の参照符号を付している。
【実施例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符号に対するエラー訂正処理を実行する場合について説明した。しかし、逆の順番又は同時にエラー訂正処理を実行しても良い。
【符号の説明】
【0067】
100 記憶装置
10 半導体集積回路
11 メモリコントローラ
12 エラー訂正コントローラ
13 訂正制御部
14 エラー訂正回路
15 内部メモリ
20 メモリ