(57)【要約】【課題】高速動作と機能安全の両立が求められるＭＣＵシステムにおいて、１ビット誤り訂正・２ビット誤り検出方式のＥＣＣに先行する誤り検出のために、ＥＣＣよりも高速動作可能な２ビット誤り検出回路を提供する。【解決手段】プロセッサとメモリを含むデータ処理装置であって、パリティ／ECCエンコーダ回路とパリティ／ECCデコーダ回路を備える。パリティ／ECCエンコーダ回路は、メモリへの書き込み信号経路上に配置され、書き込まれるデータから複数ビットのパリティを生成するパリティ生成回路を含み、生成されたパリティをデータと共にメモリに書き込む。パリティ／ECCデコーダ回路は、メモリからの読出し信号経路上に配置され、パリティ検査部を含む。パリティ生成回路は、データを構成する複数ビットのそれぞれが、少なくとも２ビットのパリティの生成に寄与するように構成されることにより、パリティ検査部は高速に２ビット誤りを検出できる。【選択図】図１
2015130085.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサと、メモリと、前記プロセッサから前記メモリに複数ビットのライトデータを書き込む信号経路の途中に配置されパリティ生成回路を含むパリティ／ＥＣＣエンコーダ回路と、前記メモリから前記プロセッサにリードデータを読み出す信号経路の途中に配置されパリティ検査部を含むパリティ／ＥＣＣデコーダ回路とを備え、
前記パリティ生成回路は、前記ライトデータから複数ビットのパリティを生成して、前記ライトデータと共に前記メモリに書き込み、前記ライトデータを構成する前記複数ビットのそれぞれが、前記複数ビットのパリティのうちの少なくとも２ビットのパリティの生成に寄与するように構成され、
前記パリティ検査部は、前記メモリから読み出される前記リードデータと前記複数ビットのパリティにおける１ビットまたは２ビットの誤り有無を検出可能に構成される、
データ処理装置。
【請求項２】
請求項１において、前記パリティ／ＥＣＣエンコーダ回路は、前記ライトデータに１ビットの誤り訂正が可能な誤り訂正符号を付加するＥＣＣ生成回路を備え、前記パリティ／ＥＣＣデコーダ回路は、前記リードデータとそれに対応する誤り訂正符号に基づいて前記リードデータにおける誤りを訂正する誤り訂正処理を実行する誤り訂正部を備え、
前記パリティ／ＥＣＣデコーダ回路は、前記パリティ検査部によって誤り有と検出されたときに、前記プロセッサに前記誤り訂正処理が完了するまで前記リードデータの受信を待たせるための、ウェイト信号を供給可能に構成される、
データ処理装置。
【請求項３】
請求項２において、前記プロセッサは前記ウェイト信号に基づいて、パイプライン動作をストールする、
データ処理装置。
【請求項４】
請求項２において、前記パリティ検査部による誤りの有無の検出処理と、前記誤り訂正部による前記誤り訂正処理とが並列して実行される、
データ処理装置。
【請求項５】
請求項２において、前記誤り訂正部は、前記リードデータにおける誤りのビット数が１ビットであるか２ビットであるかを判定可能に構成され、誤りのビット数が１ビットのときは前記誤り訂正処理を実行し、誤りのビット数が２ビットのときは前記プロセッサに対して誤り訂正が不能である旨を通知可能に構成される、
データ処理装置。
【請求項６】
請求項５において、前記誤り訂正が不能である旨を通知は、前記プロセッサに対する割り込み要求である、
データ処理装置。
【請求項７】
請求項１において、前記パリティ生成回路は、前記複数ビットのパリティのそれぞれを、前記ライトデータを構成する２ビットまたは３ビットから生成する、
データ処理装置。
【請求項８】
請求項７において、前記パリティ生成回路は、前記複数ビットのパリティのそれぞれを、前記ライトデータを構成する２ビットまたは３ビットから生成する排他的論理和ゲートを含んで構成される、
データ処理装置。
【請求項９】
請求項１において、前記パリティ／ＥＣＣエンコーダ回路は、前記ライトデータに１ビットの誤り訂正が可能な誤り訂正符号を付加するＥＣＣ生成回路を備え、前記パリティ／ＥＣＣデコーダ回路は、前記リードデータとそれに対応する誤り訂正符号に基づいて前記リードデータにおける誤りを訂正する誤り訂正処理を実行する誤り訂正部を備え、
前記ＥＣＣ生成回路は、前記メモリに書き込む前記ライトデータから前記パリティ生成回路で生成した複数ビットのパリティを部分和として用い、前記誤り訂正符号が生成可能に構成される、
データ処理装置。
【請求項１０】
請求項１において、前記メモリは、前記ライトデータが書き込まれる第１メモリと、前記パリティが書き込まれる第２メモリとを含んで構成される、
データ処理装置。
【請求項１１】
プロセッサと、メモリと、前記プロセッサから前記メモリに複数ビットのライトデータを書き込む信号経路の途中に配置されたパリティ生成回路と、前記メモリから前記プロセッサにリードデータを読み出す信号経路の途中に配置されたパリティ検査部とを備え、
前記パリティ生成回路は、前記ライトデータから複数ビットのパリティを生成して、前記ライトデータと共に前記メモリに書き込み、前記ライトデータを構成する前記複数ビットのそれぞれが、前記複数ビットのパリティのうちの少なくとも２ビットのパリティの生成に寄与するように構成され、
前記パリティ検査部は、前記メモリから読み出される前記リードデータと前記複数ビットのパリティにおける１ビットまたは２ビットの誤り有無を検出可能に構成される、
データ処理装置。
【請求項１２】
請求項１１において、主記憶装置をさらに備え、前記メモリは前記主記憶装置からデータを読み出して一時記憶するキャッシュメモリであり、
前記パリティ検査部は、前記キャッシュメモリから読み出されるリードデータにおける誤り有無を検出可能に構成され、誤り有の場合には、前記主記憶装置から当該リードデータに対応するデータを読み出して前記キャッシュメモリに再書き込みを行う、
データ処理装置。
【請求項１３】
請求項１２において、前記主記憶装置は、不揮発性メモリである、
データ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理装置に関し、特に高速動作と機能安全の両立が求められるＭＣＵシステムに好適に利用できるものである。
【背景技術】
【０００２】
ＭＣＵ（Micro Controller Unit）システムには、高速動作と機能安全の両立が求められる場合がある。たとえば、自動車応用の分野では、先進運転支援システム（ADAS: Advanced Driver Assistance System）で自動運転を実現するためには、判断ＭＣＵ（大脳チップ）が使われる。この判断ＭＣＵには、極めて高速な処理を実現する高速動作と、ソフトエラーなどによって回路が動作した場合であっても、システム全体として安全性が保証される機能安全の両立が求められる。
【０００３】
このようなＭＣＵシステムは、1GHzを超える高速動作が可能なＣＰＵ（Central Processing Unit）と、それに密結合されるTCM（Tightly Coupled Memory）やキャッシュ（Cache）メモリといった高速メモリとを組合せて構成される。機能安全のためには、高速メモリでソフトエラーが発生した場合に、ソフトエラーによると思われるデータの誤りが発生したことを検出し、その誤りを訂正する機構を搭載することができる。
【０００４】
特許文献１には、パイプライン処理を行うプロセッサの性能への影響が少ないソフトエラー訂正方式を備えるキャッシュメモリ装置が開示されている。データをデータアレイに書き込むときに、パリティビットと誤り訂正符号（ECC: Error Correction Code）を付加し、読み出したときにパリティチェックを行い、データ誤りを検出したときには、パイプラインをストールし、ストール中に誤り訂正を実行する。特許文献２には、レジスタファイルのエラー訂正方法が開示されている。エラー検出ステップとエラー訂正ステップとを有し、エラー検出ステップでエラーが検出されたときに、演算処理を中断してエラー訂正ステップを実行する。特許文献３には、単一エラー検出・訂正方式が開示され、特許文献４には誤り訂正装置が開示されている。パリティエラーが検出された場合に、エラー訂正を行う。特許文献５には、大きなワードサイズに対しても誤りを訂正できる単一誤り訂正・二重誤り検出（SEC-DED: Single Error Correction - Double Error Detection）方式の誤り訂正回路が開示されている。また、非特許文献１には、誤り訂正・検出性能を確保しながら回路規模を抑えることを目的とした、SEC-DEDの生成行列と検査行列が示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１１−２５７９６６号公報
【特許文献２】国際公開ＷＯ２００８／１５２７２８号
【特許文献３】特開平１−１７５０４１号公報
【特許文献４】特開２０１３−７０１２２号公報
【特許文献５】特開平１０−２７１３９号公報
【非特許文献】
【０００６】
【非特許文献１】M. Y. Hsiao, “A Class of Optimal Minimum Odd-weight-column SEC-DEC Codes", IBM Journal of Research and Development, Volume 14, Issue 4, published by IBM, July 1970.
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献１〜５及び非特許文献１について本発明者が検討した結果、以下のような新たな課題があることがわかった。
【０００８】
上述の公知技術等で多用される１ビット誤り訂正・２ビット誤り検出（SEC-DED）方式の誤り訂正処理（ECC）回路は、複雑な回路となって高速動作に適さないか、多段のパイプラインによって実現される。そのため、特許文献１〜４に記載されるように、プロセッサからメモリにデータを書き込む際に、誤り訂正符号（ECC）に加えてパリティを付加して書き込み、読出しの際にパリティ検査を行って、誤りが発生した場合にのみ誤り訂正処理を行う技術が提案されている。これにより、誤りが発生しない場合は、高速動作が可能なパリティ検査のみを行えば良く、実際に誤りが発生する頻度は高くないので、誤り訂正処理のためにパイプラインステージに乱れを発生させる頻度が抑えられる。
【０００９】
ここで、誤り訂正符号（ECC）に追加されるパリティは、１ビットの誤りを検出可能であるが、２ビットの誤りがあると誤りがないものと誤った判定（誤判定）をする。パリティ検査の結果、誤りが検出された場合にのみ、１ビット誤り訂正・２ビット誤り検出（SEC-DED）方式の誤り訂正処理を行うとすると、２ビット誤りが発生した場合に、それを検出することができない。即ち、２ビット誤りが発生した場合にパリティによる検査をすり抜けてしまうという問題点があった。この問題点を解決するためには、パリティに代えて２ビット誤りの検出が可能な誤り検出処理を誤り訂正処理に先行させる必要があることになるが、誤り訂正処理自体が１ビット誤り訂正・２ビット誤り検出（SEC-DED）方式であることから、先行させる２ビット誤り検出機構は誤り訂正処理と同程度に複雑な回路で実現されることとなり、先行させる意義が失われる。さらに、汎用されているバイト（８ビット）単位のパリティの場合、パリティ検査にはデータ8 bitとパリティ1 bitを入力とする9入力の排他的論理和が必要であり、たとえば1GHzを超える高速な動作への対応としては不十分であることがわかった。
【００１０】
そのため、1GHzを超える高速動作が求められるＭＣＵシステムにおいて、１ビット誤り訂正・２ビット誤り検出（SEC-DED）方式の誤り訂正処理に先行して誤り検出を実行させるために、たとえばパイプラインの１ステージ、即ち１クロックサイクルで動作可能なような、高速な２ビット誤り検出回路が必要であることがわかった。
【００１１】
このような課題を解決するための手段を以下に説明するが、その他の課題と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１２】
一実施の形態によれば、下記の通りである。
【００１３】
すなわち、プロセッサと前記プロセッサからアクセスされるメモリとを含むデータ処理装置であって、以下のように構成される。
【００１４】
プロセッサからメモリに複数ビットのデータを書き込む信号経路の途中に配置され、書き込まれるデータから複数ビットのパリティ（Parity）を生成するパリティ生成回路を含み、前記データと生成されたパリティをメモリに書き込む、パリティ／ECCエンコーダ回路を備える。また、メモリからプロセッサにデータを読み出す信号経路の途中に配置され、パリティ検査部を含むパリティ／ECCデコーダ回路とを備える。
【００１５】
パリティ生成回路は、データを構成する複数ビットのそれぞれが、少なくとも２ビットのパリティの生成に寄与するように構成され、パリティ検査部は、メモリから読み出されるデータとパリティに、１ビットまたは２ビットの誤り有無を検出可能に構成される。
【発明の効果】
【００１６】
前記一実施の形態によって得られる効果を簡単に説明すれば下記のとおりである。
【００１７】
すなわち、２ビット誤りに対して誤りなしと誤判定することがなく、１ビット誤り訂正・２ビット誤り検出（SEC-DED）方式の誤り訂正処理よりも高速動作可能な２ビット誤り検出回路を提供し、SEC-DED方式の誤り訂正処理に先行して誤り検出を実行させることができる。
【図面の簡単な説明】
【００１８】
【図１】図１は、実施形態１に係るデータ処理装置１００の構成例を表すブロック図である。
【図２】図２は、ECC生成回路１の構成例を表すブロック図である。
【図３】図３は、ECC生成回路１によって実現されるECCの生成行列（G）である。
【図４】図４は、Parity生成回路１１の構成例を表すブロック図である。
【図５】図５は、Parity生成回路１１によって実現されるParityの生成行列である。
【図６】図６は、Parity/ECCデコーダ回路３１の構成例を表すブロック図である。
【図７】図７は、ECCデコーダ回路３のより詳細な構成例を表すブロック図である。
【図８】図８は、ECCデコーダ回路３におけるECCの検査行列（H）である。
【図９】図９は、実施形態２に係るデータ処理装置１００におけるParity/ECCエンコーダ回路５３の構成例を表すブロック図である。
【図１０】図１０は、実施形態２に係るParity生成回路５４によって実現されるParityの生成行列である。
【図１１】図１１は、図１０に示したParityの生成行列の構成の考え方を示す説明図である。
【図１２】図１２は、図１０の生成行列に基づくParityを部分和として用いてECCを生成する様子の説明図である。
【図１３】図１３は、実施形態３に係るデータ処理装置１００の構成例を表すブロック図である。
【図１４】図１４は、Parity/ECCエンコーダ回路１３の構成例を表すブロック図である。
【図１５】図１５は、実施形態３に係るParity生成回路１４によって実現されるParityの生成行列である。
【図１６】図１６は、図１５に示したParityの生成行列の構成の考え方を示す説明図である。
【図１７】図１７は、図１５の生成行列に基づくParityを部分和として用いてECCを生成する様子の説明図である。
【図１８】図１８は、Parity/ECCデコーダ回路２２の構成例を表すブロック図である。
【図１９】図１９は、ECCデコーダ回路４１のより詳細な構成例を表すブロック図である。
【図２０】図２０は、実施形態４に係るデータ処理装置１００の構成例を表すブロック図である。
【図２１】図２１は、実施形態３と同じ前提において適用することができる、別のParityの生成行列である。
【図２２】図２２は、各実施形態で用いることができるParityの生成行列の別の例である。
【図２３】図２３は、図２２のParityの生成行列をに対応したParity生成回路のブロック図である。
【図２４】図２４は、各実施形態で用いることができるParityの生成行列のさらに別の例である。
【図２５】図２５は、各実施形態で用いることができるParityの生成行列のまたさらに別の例である。
【図２６】図２６は、図２５に示したParityの生成行列の構成の考え方を示す説明図である。
【図２７】図２７は、図２５の生成行列に基づくParityを部分和として用いてECCを生成する様子の説明図である。
【図２８】図２８は、各実施形態で用いることができる、Parityの種類の数を最小化したParityの生成行列である。
【図２９】図２９は、図２８に示したParityの生成行列の構成の考え方を示す説明図である。
【図３０】図３０は、各実施形態で用いることができる、Parityの種類の数を最小化した別のParityの生成行列である。
【図３１】図３１は、図３０に示したParityの生成行列の構成の考え方を示す説明図である。
【発明を実施するための形態】
【００１９】
１．実施の形態の概要
先ず、本願において開示される代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
【００２０】
〔１〕＜２ビット誤り検出可能なパリティの付加＞
本願において開示される代表的な実施の形態に係るデータ処理装置（１００、９０）は、プロセッサ（３０）と、メモリ（５１、２９ａ、２９ｂ）とを備え、以下のように構成される。前記データ処理装置は、前記プロセッサから前記メモリに複数ビットのライトデータを書き込む信号経路の途中に配置されパリティ生成回路（１１，１４，２０，３７ｅ，５４）を含むパリティ／ＥＣＣエンコーダ回路（１３，３８ｅ，５２，５３）を備える。前記データ処理装置は、さらに、前記メモリから前記プロセッサにリードデータを読み出す信号経路の途中に配置されパリティ検査部（２３，３７ｄ，４８）を含むパリティ／ＥＣＣデコーダ回路（２２，３１，３８ｄ）とを備える。
【００２１】
前記パリティ生成回路は、前記ライトデータから複数ビットのパリティを生成して、前記ライトデータと共に前記メモリに書き込み、前記ライトデータを構成する前記複数ビットのそれぞれが、前記複数ビットのパリティのうちの少なくとも２ビットのパリティの生成に寄与するように構成される。
【００２２】
前記パリティ検査部は、前記メモリから読み出される前記リードデータと前記複数ビットのパリティにおける１ビットまたは２ビットの誤り有無を検出可能に構成される。
【００２３】
これにより、１ビット誤り訂正・２ビット誤り検出（SEC-DED）方式の誤り訂正に先行して誤り検出を実行させるために、誤り訂正よりも高速動作可能な２ビット誤り検出回路を提供することができる。誤り訂正には２ビット誤りを訂正する能力を備えてもよい。
【００２４】
〔２〕＜ＣＰＵコアへのＷＡＩＴ信号＞
項１において、前記パリティ／ＥＣＣエンコーダ回路は、前記ライトデータに１ビットの誤り訂正が可能な誤り訂正符号を付加するＥＣＣ生成回路（１，１５，５５）を備え、前記パリティ／ＥＣＣデコーダ回路は、前記リードデータとそれに対応する誤り訂正符号に基づいて前記リードデータにおける誤りを訂正する誤り訂正処理を実行するECCデコーダ回路である誤り訂正部（３〜６、４１、４２）を備える。
【００２５】
前記パリティ／ＥＣＣデコーダ回路は、前記パリティ検査部によって誤り有と検出されたときに、前記プロセッサに前記誤り訂正処理が完了するまで前記リードデータの受信を待たせるための、ウェイト信号を供給可能に構成される。
【００２６】
これにより、誤り訂正処理のためのオーバーヘッドを、誤りがあった時にのみ発生させることができる。
【００２７】
〔３〕＜WAIT信号によるパイプラインのストール＞
項２において、前記プロセッサは前記ウェイト信号に基づいて、パイプライン動作をストールする。
【００２８】
これにより、プロセッサの動作を安全に停止させることができる。
【００２９】
〔４〕＜誤り検出と誤り訂正の並列処理＞
項２において、前記パリティ検査部による誤りの有無の検出処理と、前記誤り訂正部による前記誤り訂正処理とが並列して実行される。
【００３０】
これにより、誤り訂正処理のためのオーバーヘッドを最小限に留めることができる。
【００３１】
〔５〕＜誤り訂正不能（エラー出力）＞
項２において、前記誤り訂正部は、前記リードデータにおける誤りのビット数が１ビットであるか２ビットであるかを判定可能に構成され、誤りのビット数が１ビットのときは前記誤り訂正処理を実行し、誤りのビット数が２ビットのときは前記プロセッサに対して誤り訂正が不能である旨を通知可能に構成される。
【００３２】
これにより、プロセッサは、メモリに誤り訂正能力（１ビット）を超えた誤りが発生したことを検知することができ、適切な例外処理を実行することができる。
【００３３】
〔６〕＜誤り訂正不能割り込み＞
項５において、前記誤り訂正が不能である旨を通知は、前記プロセッサに対する割り込み要求である。
【００３４】
これにより、プロセッサは、メモリに誤り訂正能力（１ビット）を超えた誤りが発生したことを検知したとき、適切な割り込み処理を実行することができる。
【００３５】
〔７〕＜パリティ検査の高速化（少ないビット数のデータからのパリティ生成）＞
項１において、前記パリティ生成回路は、前記複数ビットのパリティのそれぞれを、前記ライトデータを構成する２ビットまたは３ビットから生成する。
【００３６】
これにより、パリティ検査部は、高速に誤りの有無を検出することができる。
【００３７】
〔８〕＜パリティ検査の高速化（XOR１段）＞
項７において、前記パリティ生成回路は、前記複数ビットのパリティのそれぞれを、前記ライトデータを構成する２ビットまたは３ビットから生成する排他的論理和ゲート（１２ａ〜１２ｚと１２Ａ〜１２Ｆ、等）を含んで構成される。
【００３８】
これにより、パリティ検査部は、３〜４入力の排他的論理和回路を並列に含んで構成され、高速に誤りの有無を検出することができる。
【００３９】
〔９〕＜誤り検出と誤り訂正における部分和生成回路の共通化＞
項１において、前記パリティ／ＥＣＣエンコーダ回路は、前記ライトデータに１ビットの誤り訂正が可能な誤り訂正符号を付加するＥＣＣ生成回路（１，１５，５５）を備え、前記パリティ／ＥＣＣデコーダ回路は、前記リードデータとそれに対応する誤り訂正符号に基づいて前記リードデータにおける誤りを訂正する誤り訂正処理を実行する誤り訂正部（３〜６、４１、４２）を備える。
【００４０】
前記ECC生成回路は、前記メモリに書き込む前記ライトデータからパリティ生成回路で生成した複数ビットのパリティを部分和として用い、前記誤り訂正符号が生成可能に構成される。
【００４１】
これにより、ECC生成回路の一部の回路がパリティ生成回路と共通化され、必要な回路の規模が節約される。
【００４２】
〔１０〕＜データとパリティを物理的に異なる２つのメモリに格納＞
項１において、前記メモリは、前記ライトデータが書き込まれる第１メモリ（２９ａ）と、前記パリティが書き込まれる第２メモリ（２９ｂ）とを含んで構成される。
【００４３】
これにより、データと、そのデータに対応するパリティに対して、同時にソフトエラーが発生する確率を、実効上ゼロとみなすことができる。
【００４４】
〔１１〕＜２ビット誤り検出可能なパリティの付加＞
本願において開示される代表的な実施の形態に係るデータ処理装置（１００、９０）は、プロセッサ（３０）と、メモリ（５１、２９ａ、２９ｂ）とを備え、以下のように構成される。前記データ処理装置は、前記プロセッサから前記メモリに複数ビットのライトデータを書き込む信号経路の途中に配置されたパリティ生成回路（１１，１４，２０，３７ｅ，５４）と、前記メモリから前記プロセッサにリードデータを読み出す信号経路の途中に配置されたパリティ検査部（２３，３７ｄ，４８）とを備える。
【００４５】
前記パリティ生成回路は、前記ライトデータから複数ビットのパリティを生成して、前記ライトデータと共に前記メモリに書き込み、前記ライトデータを構成する前記複数ビットのそれぞれが、前記複数ビットのパリティのうちの少なくとも２ビットのパリティの生成に寄与するように構成される。
【００４６】
前記パリティ検査部は、前記メモリから読み出される前記リードデータと前記複数ビットのパリティにおける１ビットまたは２ビットの誤り有無を検出可能に構成される。
【００４７】
これにより、高速動作可能な２ビット誤り検出回路を提供することができる。
【００４８】
〔１２〕＜キャッシュ＞
項１１において、主記憶装置（３９）をさらに備え、前記メモリは前記主記憶装置からデータを読み出して一時記憶するキャッシュメモリ（３２）である。
【００４９】
前記パリティ検査部は、前記キャッシュメモリから読み出されるリードデータにおける誤り有無を検出可能に構成され、誤り有の場合には、前記主記憶装置から当該リードデータに対応するデータを読み出して前記キャッシュメモリに再書き込みを行う。
【００５０】
これにより、キャッシュメモリでソフトエラーが発生したときに、誤り訂正に代わるデータ復旧手段が提供される。
【００５１】
〔１３〕＜命令キャッシュ＞
項１２において、前記主記憶装置は、不揮発性メモリ（３９）である。
【００５２】
これにより、命令キャッシュでソフトエラーが発生したときに、誤り訂正に代わるデータ復旧手段として、命令コードを不揮発性メモリから再度キャッシュすることができ、より安全性の高いシステムが提供される。
【００５３】
２．実施の形態の詳細
実施の形態について更に詳述する。
【００５４】
〔実施形態１〕
実施形態１に係るデータ処理装置について、図面を用いて、その構成と動作について説明する。
【００５５】
図１は、実施形態１に係るデータ処理装置の構成を表すブロック図である。実施形態１に係るデータ処理装置１００は、プロセッサの一例であるCPUコア３０と、メモリの一例であるCPUコア３０に密結合される高速メモリ（TCM）５１とを備える。図１には、CPUコア３０とTCM５１のインターフェース回路が示される。CPUコア３０は、TCM５１にアクセスするための専用インターフェースとして、ADDRESSポートとENABLE/CONTROLポートと、W-DATAポートとR-DATAポート、及び、WAIT-INポートを有し、さらにクロック(CLK)信号が入力されるCLK-INポートと割り込み要求信号が入力されるIRQmポートを有する。CPUコア３０からTCM５１に対して、ADDRESSポートからnビット（nは自然数）のアドレス信号と、ENABLE/CONTROLポートからメモリ制御信号が供給される。メモリ制御信号は、たとえば、TCM５１へのアクセスを有効にするイネーブル信号と、読み出し（リード）／書き込み（ライト）の別を示すアクセスタイプ信号である。W-DATAポートからは、CPUコア３０からTCM５１に書き込まれるデータが、32 bitの入力データd0〜d31として出力される。R-DATAポートには、TCM５１から読み出されたデータが、32 bitの出力データd'0〜d'31として入力される。WAIT-INポートには、データアクセスが１クロックサイクルで完了しない場合にWAIT信号が入力される。
【００５６】
CPUコア３０の前述の専用インタフェースとTCM５１との間には、機能安全に対応させるための処理回路（ECCおよびParityに関わる回路）が設けられている。ここで、TCM５１はたとえば71 bitのデータ幅で(2^n)個のアドレス空間を備えたSRAM(Static Random Access Memory)で構成される。CPUコア３０のW-DATAポートから出力され、TCM５１に書き込まれるデータ線の途中には、Parity生成回路１１とECC生成回路１を含むParity/ECCエンコーダ回路５２が設けられている。Parity/ECCエンコーダ回路５２は、Parity生成回路１１により入力データd0〜d31から32 bitのParity X0〜X31を生成し、ECC生成回路１により入力データd0〜d31から7 bitのECC E0〜E6を生成し、ライトデータD0〜D31と共に、合計71 bitの書き込みデータをTCM５１に供給する。TCM５１からCPUコア３０のR-DATAポートへ読み出されるデータ線の途中には、Parity/ECCデコーダ回路３１が設けられている。TCM５１から、32 bitのリードデータD0〜D31と32 bitのParity X0〜X31と7 bitのECC E0〜E6を合せた合計71 bitの読み出しデータが読み出されて、Parity/ECCデコーダ回路３１に供給される。パリティ／ECCデコーダ回路３１からは、CPUコア３０のR-DATAポートに対して出力データd'0〜d'31が出力される。Parity/ECCデコーダ回路３１は、WAIT信号とエラー出力信号を、CPUコア３０のWAIT-INポートとIRQmポートにそれぞれ出力する。図１には図示が省略されるが、Parity/ECCデコーダ回路３１は、Parity生成回路１１に対応するParity検査回路と、ECC生成回路１に対応する誤り訂正回路を含んで構成される。CPUコア３０、TCM５１、及び、Parity/ECCデコーダ回路３１には、共通にクロック信号（CLK信号）が入力される。なお、図示される信号のビット数は一例であって、適宜変更することができる。
【００５７】
データ処理装置１００の動作について説明する。CPUコア３０は、入力される高い周波数のCLK信号（たとえば1 GHz超）のクロックサイクル毎に順次命令を実行していく高速動作のプロセッサ回路である。このCPUコア３０は、最短１クロックサイクルでデータアクセス（リード（読み出し）またはライト（書き込み））を完了できるようなメモリに対する専用インタフェースを有し、本実施形態１のデータ処理装置１００ではTCM（高速メモリ）５１が接続されている。CPUコア３０がTCM５１にデータd0〜d31の書き込み（ライト）を要求したときには、Parity/ECCエンコーダ回路５２は、入力データd0〜d31からParity X0〜X31とECC E0〜E6を生成し、ライトデータD0〜D31と共にTCM５１に書き込む。CPUコア３０がTCM５１からのデータd'0〜d'31の読み出し（リード）を要求したときには、Parity/ECCデコーダ回路３１は、TCM５１からリードデータD0〜D31とこれ対応して格納されているParity X0〜X31とECC E0〜E6を読み出し、Parity検査を行う。Parity検査の結果、必要に応じて誤り訂正処理を行って、出力データd'0〜d'31をCPUコア３０のR-DATAポートに出力する。TCM５１のデータアクセスが何らかの事情により１クロックサイクルで完了しない場合には、CPUコア３０の側からアドレス信号とメモリ制御信号が出力されたのと同じクロックサイクルで、Parity/ECCデコーダ回路３１からWAIT信号が出力される。WAIT信号が出力されると、CPUコア３０はそのWAIT信号がアサートされている期間はパイプラインをストールし、ネゲートされたクロックサイクルから処理を再開する。これにより、たとえば、TCM５１からのデータリード中に１クロックサイクルの間だけWAIT信号がアサートされたならば、次のクロックサイクルでCPUコア３０はTCM５１からの読み出しデータを取得するため、２クロックサイクルでのデータリードの処理となる。
【００５８】
Parity/ECCエンコーダ回路５２の具体的構成例について説明する。
【００５９】
図２は、ECC生成回路１の構成例を表すブロック図である。ECC生成回路１は生成行列（G）に則って、入力データd0〜d31から所定アルゴリズムの誤り訂正の冗長ビットである誤り訂正符号ECC E0〜E6を生成する回路である。７個の排他的論理和（ＸＯＲ：eXclusive OR）回路２ａ〜２ｇを用いて構成される。２ａ〜２ｅは14入力XOR回路、２ｆと２ｇは13入力XOR回路である。図３に、ECC生成回路１によって実現されるECCの生成行列（G）が示される。これは32 bitのデータに対して7 bitのECCを付加して、１ビット誤り訂正・２ビット誤り検出を実現可能な生成行列（G）の一例であり、(39, 32) SEC-DED codeの検査行列（H）（非特許文献１のFigure 4に示されているもの）とペアになる生成行列である。この生成行列の各列は入力データの各ビットに対応し、また各行は生成するECCの各ビットに対応する。この生成行列に対して、入力データd0〜d31を列ベクトルとして行列乗算を行うと、ECC E0〜E6の列ベクトルが生成される。
【００６０】
E0行からE4行までの各行には１４個の"1"の要素が、E5行とE6行には１３個の"1"の要素が含まれ、空白となっている部分は"0"の要素があることに相当する。また、d0列からd31列までの各列にはいずれも３個の"1"の要素が含まれ、各列には７個の要素があるため空白となっている残りの４個は"0"の要素である。この生成行列は、要素として含む"1"の数を最小化するという考え方で構成されたものであり、７個の要素のうちの３個の要素が"1"で４個の要素が"0"となる３５通りのパターンの中から、３２通りのパターンが選択されて各列に割り振られている。未使用パターンは、(1, 1, 1, 0, 0, 0, 0)と(0, 0, 0, 1, 0, 1, 1)、(0, 0, 0, 0, 1, 1, 1)の３通りである。
【００６１】
ECC生成回路１は、この生成行列に従って入力データd0〜d31からECC E0〜E6を生成するよう、生成行列の"1"の要素に対応する複数ビットの入力データから排他的論理和（XOR）演算でECCの各ビットを生成する回路であり、具体的には、E0〜E4のそれぞれは14入力XOR回路２ａ〜２ｅで生成し、E5とE6のそれぞれは13入力XOR回路２ｆと２ｇで生成する。たとえば、生成行列の先頭行であるE0行を見ると、"1"の要素が含まれる１４個の列に対応する入力データはd0, d1, d2, d3, d4, d5, d6, d7, d14, d19, d22, d24, d30, d31であることが分かる。これに対応する形で、E0を生成する14入力XOR回路２ａの入力ポートには、入力データd0〜d31のそれらの各ビットが接続されている。
【００６２】
図４は、Parity生成回路１１の構成例を表すブロック図である。３２個の2入力XOR回路１２ａ〜１２ｚと１２Ａ〜１２Ｆで構成される。Parity生成回路１１は所定のParity生成行列に則って、32 bitの入力データd0〜d31から３２種類の1 bitのParity X0〜X31を生成する回路である。図５にこの３２種類のParity X0〜X31の生成行列を示す。これは３２通りの異なる組合せの各2 bitのデータから各1 bitのParity、すなわち合計32 bit分のParityを生成する生成行列の一例である。この生成行列の各列は入力データの各ビットに対応し、また各行は生成する３２種類のParityのビットに対応する。この生成行列に対して、入力データd0〜d31を列ベクトルとして行列乗算を行うと、Parity X0〜X31の列ベクトルが生成される。
【００６３】
X0行からX31行までの各行にはいずれも２個の"1"の要素が含まれ、空白となっている部分は"0"の要素があることに相当する。また、d0列からd31列までの各列についても、いずれも２個の"1"の要素が含まれるよう、この生成行列は規則正しくシンプルな形で構成されている。
【００６４】
Parity生成回路１１は、この生成行列に従って入力データd0〜d31からParity X0〜X31を生成するよう、生成行列の"1"の要素に対応する2 bitの入力データから、XOR演算でParityの各bitを生成する回路であり、具体的には、X0〜X31のそれぞれを2入力XOR回路１２ａ〜１２Ｆで生成する。たとえば、生成行列の最終行であるX31行を見ると、"1"の要素が含まれる２個の列に対応する入力データはd31とd0であることが分かる。これに対応する形で、X31を生成する2入力XOR回路１２Ｆの入力ポートには、入力データのそれらの2 bit （d31とd0）が接続されている。
【００６５】
Parity/ECCデコーダ回路３１の具体的構成例について説明する。
【００６６】
図６は、Parity/ECCデコーダ回路３１の構成例を表すブロック図である。Parity/ECCデコーダ回路３１は、ECCデコーダ回路３、Parity検査回路４８、WAIT制御回路１９、データ切換え回路４６及びAND回路４７を含んで構成される。Parity/ECCデコーダ回路３１には、TCM５１から32 bitのリードデータD0〜D31とECC E0〜E6とParity X0〜X31とが入力され、CPUコア３０に対して32 bitの出力データd'0〜d'31とWAIT信号とエラー出力信号を出力する。ECC E0〜E6は、リードデータD0〜D31に対応する7 bitの誤り訂正符号(ECC)である。Parity X0〜X31は、リードデータD0〜D31に対応する上記32種類の1 bit Parityである合計32 bit分のParityである。Parity/ECCデコーダ回路３１は、必要となった場合にだけリードデータD0〜D31に対して１ビット誤り訂正・２ビット誤り検出の処理を行い、32 bitの出力データd’0~d’31を生成する。この誤りの検出と訂正動作について、詳しくは後述する。
【００６７】
Parity検査回路４８は、たとえば、３２個の3入力XOR回路４９ａ〜４９ｚと４９Ａ〜４９Ｆと32入力反転（INV）付きAND回路（全入力ポートにNOT（否定）論理が付加されたAND回路）５０で構成される。図５に示したParityの生成行列とペアになる検査行列（図示せず）に対応する形で、リードデータD0〜D31とParity X0〜X31から３２種類のParityチェック結果y0〜y31を生成し、すべてのParityチェック結果からリードデータD0〜D31に全くビット誤りが発生していない場合に"1"となるnerr（エラー無し）信号を生成する。
【００６８】
WAIT制御回路１９は、フリップフロップ（レジスタ）回路２７ａと２７ｂと2入力INV付きAND回路２８で構成される。nerr（エラー無し）信号が１段目のフリップフロップ回路２７ａに入力され、その反転出力（/Q）とnerr（エラー無し）信号が2入力INV付きAND回路２８に入力されてWAIT信号を生成する。WAIT信号は２段目のフリップフロップ回路２７ｂに入力され、その出力（Q）によりデータ切換え回路４６とAND回路４７が制御される。データ切換え回路４６は、フリップフロップ回路２７ｂの出力（Q）が"1"（ハイ）のときは、ECCデコーダ回路３によって訂正された後のデータd'0〜d'31を、"0"（ロウ）のときは、ECCデコーダ回路３をバイパスして、TCM５１から読み出されたリードデータD0〜D31をそのまま、Parity/ECCデコーダ回路３１の出力データd'0〜d'31として出力する。AND回路４７は、フリップフロップ回路２７ｂの出力（Q）が"1"（ハイ）のときは、ECCデコーダ回路３から出力されるエラー出力信号を、Parity/ECCデコーダ回路３１のエラー出力信号として出力し、"0"（ロウ）のときはエラー出力信号をマスクする。
【００６９】
ECCデコーダ回路３は、シンドローム生成回路４とシンドローム復号回路５と誤り訂正回路６を含んで構成される。リードデータD0〜D31とECC E0〜E6に1 bit誤りが含まれていることを検出したときに、ECC E0〜E6を用いてリードデータD0〜D31に誤り訂正処理を施して、出力データd'0〜d'31を出力する。リードデータD0〜D31とECC E0〜E6に2 bit誤りが含まれていることを検出したときには、エラー出力信号を出力する。ECCデコーダ回路３の詳細な構成例と動作については後述する。Parity/ECCデコーダ回路３１は、32 bitのリードデータD0〜D31と、それに対応する7 bitのECC E0〜E6、上記32種類の1 bit Parityである合計32 bit分のParity X0〜X31から、必要となった場合にだけ１ビット誤り訂正・２ビット誤り検出の処理を行い、32 bitの出力データd'0〜d'31を生成する回路である。この１ビット誤り訂正・２ビット誤り検出の処理はECCデコーダ回路３で行われ、その出力データが２系統データ切換え回路（32 bitデータ対象）４６を経由して出力される。誤りがない場合には、この２系統データ切り換え回路４６は元々のリードデータそのものを選択して出力する。また、２ビット誤りの訂正は行えないため、そのような２ビット誤りが検出された場合にはエラー出力信号をCPUコア３０に対して出力する。実際には2入力AND回路４７により適切な場合にだけ出力されるようマスクされ、このエラー出力信号はCPUコア３０が備える特定の割り込み入力ポートIRQmに接続される（図１を参照）。
【００７０】
図７は、ECCデコーダ回路３の構成を示すブロック図である。ECCデコーダ回路３は、シンドローム生成回路４とシンドローム復号回路５と誤り訂正回路６とエラー信号生成回路７とを含んで構成される。シンドローム生成回路４は、5個の15入力XOR回路８ａ〜８ｅと、2個の14入力XOR回路８ｆと８ｇにより構成され、シンドロームコードs0〜s6をシンドローム復号回路５に供給する。シンドローム復号回路５は、32個の7入力一部INV付き（4入力ポートにだけNOT論理が付加された）AND回路９ａ〜９ｚ，９Ａ〜９Ｆと、7入力INV付き（全入力ポートにNOT論理が付加された）AND回路９Ｇとにより構成され、32通りの誤り位置フラグc0〜c31を誤り訂正回路６に供給する。誤り訂正回路６は、32個の2入力XOR回路１０ａ〜１０ｚと１０Ａ〜１０Ｆと、エラー信号生成回路７により構成される。
【００７１】
ECCデコーダ回路３の初段にあるシンドローム生成回路４は、ECCの検査行列（H）に対応する形で、リードデータD0〜D31とECC E0〜E6からシンドロームコードs0〜s6を生成する回路である。図８にこのECCの検査行列を示す。これは32 bitのデータと7 bitのECCを合計した40 bitから、7 bitのシンドロームコードを生成する(39, 32) SEC-DED codeの検査行列（H）（非特許文献１のFigure 4に示されているもの）であり、図３に示したECCの生成行列（G）とペアになるものである。この検査行列の各列はリードデータとECCの各bitに対応し、また各行は生成するシンドロームコードの各bitに対応する。この検査行列に対して、リードデータD0〜D31とECC E0〜E6を列ベクトルとして行列乗算を行うと、シンドロームコードs0〜s6の列ベクトルが生成される。
【００７２】
この図８の検査行列におけるD0列からD31列までの各要素の並びは、ペアである図３の生成行列におけるd0列からd31列までの各要素の並びと同一パターンである。図８の検査行列では、右側のE0列からE6列までのところに７行７列の単位行列が追加された形となっている。そのため、s0行からs4行までの各行には15個の"1"の要素が、s5行とs6行には14個の"1"の要素が含まれる。シンドローム生成回路４は、この検査行列に従ってリードデータD0〜D31とECC E0〜E6からシンドロームコードs0〜s6を生成するよう、検査行列の"1"の要素に対応する複数bitのリードデータとECCから、XOR演算でシンドロームコードの各bitを生成する回路である。具体的には、シンドローム生成回路４は、s0〜s4のそれぞれを15入力XOR回路８ａ〜８ｅで生成し、s5とs6のそれぞれを14入力XOR回路８ｆと８ｇで生成する。
【００７３】
次段にあるシンドローム復号回路５は、シンドローム生成回路４の出力であるシンドロームコードs0〜s6が図８に示した検査行列のどの列のパターンと一致するかをチェックする回路である。32通りの誤り位置フラグc0〜c31が、それぞれ7入力一部INV付きAND回路９ａ〜９Ｆで生成される。たとえば、検査行列の先頭列であるD0列を見ると、そのパターンは(1, 0, 0, 0, 0, 1, 1)である。シンドローム復号回路５では、これに対応する形で、誤り位置フラグのc0を生成する7入力一部INV付きAND回路９ａの入力ポートのうち、4個のINV付き入力ポートにはシンドロームコードのs1, s2, s3, s4が接続され、残りの3個のINV無し入力ポートにはシンドロームコードのs0, s5, s6が接続されている。この誤り位置フラグc0〜c31のいずれか一つだけが"1"となる場合があり、それはリードデータD0〜D31の対応する位置に１ビット誤りが発生した（つまり、そのbitの値が反転している）ことを意味するものである。
【００７４】
また、追加で別の誤り無しフラグcxxも7入力INV付きAND回路９Ｇで生成される。これはシンドロームコードのs0〜s6のすべてが"0"であることをチェックするものであり、リードデータD0〜D31とECC E0〜E6に全くビット誤りが発生していない場合に、その誤り無しフラグcxxが"1"となるものである。当然ながら、cxxが"1"となる通常の場合は、上記の32通りのチェック位置フラグc0〜c31のすべてが"0"となる。万が一、リードデータD0〜D31のいずれかの位置の組み合わせで2ビット誤りが発生したとすると、誤り位置フラグc0〜c31と誤り無しフラグcxxのすべてが"0"となる。
【００７５】
そして、最終段にある誤り訂正回路６は、シンドローム復号回路５の出力である誤り位置フラグc0〜c31と誤り無しフラグcxxに応じて、リードデータD0〜D31のビット誤りを訂正するとともに、エラー訂正できない2ビット誤りが発生した場合にはエラー出力信号を生成する回路である。32通りの誤り位置フラグc0〜c31のそれぞれが、対応するリードデータD0〜D31の対応するbitと2入力XOR回路１０ａ〜１０ｚ、１０Ａ〜１０ＦでXOR演算される。これにより、リードデータD0〜D31のいずれかのbitに１ビット誤りが発生した場合に、そのbitの値を反転させて元の正しい値に戻すことができる。また、すべての誤り位置フラグc0〜c31と誤り無しフラグcxxがエラー信号生成回路７に入力され、すべての値が"0"である場合に、２ビット誤りが発生したことを知らせるエラー出力信号として"1"を出力する。このエラー信号生成回路７はたとえば、33入力INV付き（全入力ポートにNOT論理が付加された）AND回路で実現できる。
【００７６】
Parity検査回路４８は、図５に示したParityの生成行列とペアになる検査行列（図示せず）を使って、リードデータD0〜D31に全くビット誤りが発生していない場合に"1"となるnerr（エラー無し）信号を生成する。この検査行列の各列はリードデータとParityの各bitに対応し、また各行は生成するParityチェック結果の各bitに対応するものであり、検査行列は生成行列の右側に32行32列の単位行列が追加された形となっている。Parity検査回路４８は、この検査行列の"1"の要素に対応するいずれかの位置の2 bitのリードデータと1 bitのParityから、XOR演算で32種類のParityチェック結果を生成する回路であり、具体的には、y0〜y31のそれぞれを3入力XOR回路４９ａ〜４９Ｆで生成する。たとえば、Parityチェック結果のy0を生成する3入力XOR回路４９ａの入力ポートには、リードデータのD0, D1とそれらに対応するParityのX0が接続されている。
【００７７】
生成された32種類のParityチェック結果y0〜y31のそれぞれは、対応するParity X0〜X31のそれぞれでカバーされる2 bitのリードデータのどちらかに1ビット誤りが発生した（つまり、そのbitの値が反転している）場合に"1"となり、全くビット誤りが発生していない場合には"0"となる。これらの32種類のParityチェック結果y0〜y31は32入力INV付き（全入力ポートにNOT論理が付加された）AND回路５０に入力され、すべての値が"0"である場合に、全くビット誤りが発生していないことを示すnerr信号として"1"を出力する。ただし、万が一、いずれかのParityでカバーされる2 bitのリードデータの両方にビット誤り（2ビット誤り）が発生したとすると、または2 bitのリードデータのどちらかに1ビット誤りが発生すると同時に、対応する1 bitのParityにビット誤り（1ビット誤り）が発生したとすると、そのParityチェック結果は"0"となってしまう。そのため、その単独のParityチェック結果だけでは、全くビット誤りが発生していない場合との区別が付かない。しかし、リードデータD0〜D31の各bitはいずれも32種類のParity X0〜X31のうちの２種類のParityでカバーされているため、単独のParityチェック結果だけでは分からない上記のような2ビット誤り他が発生したとしても、それとは別のParityチェック結果で１ビット誤りが発生したものとして検出できる。
【００７８】
ECCデコーダ回路３においてリードデータD0〜D31に全くビット誤りが発生していないことを検出できるのは、図７から分かる通り、5個の15入力XOR回路８ａ〜８ｅの出力と2個の14入力XOR回路８ｆと８ｇの出力のすべてが確定し、それら7個のシンドロームコードs0〜s6を入力とする7入力INV付きAND回路９ｇの出力が確定した時点となる。通常、多入力XOR回路は2入力XOR回路が多段のツリー状に接続された構成で実現されるため、ここまでの処理遅延時間はかなり長くなる。1ビット誤りが発生した場合にそのビット誤りを訂正する、また2ビット誤りが発生した場合にエラー出力信号を生成するまでには、さらに時間がかかる。
【００７９】
それに対して、Parity検査回路４８（図６参照）においてリードデータD0〜D31に全くビット誤りが発生していないことを検出できるのは、32個の3入力XOR回路４９ａ〜４９Ｆの出力のすべてが確定し、それら32個のParityチェック結果y0〜y31を入力とする32入力INV付きAND回路５０の出力nerrが確定した時点となる。3入力XOR回路の処理遅延時間は15入力XOR回路よりも大幅に短く、INV付きAND回路は7入力が32入力になっても処理遅延時間の増加は比較的少ないため、Parity検査回路４８におけるビット誤り発生無しの検出タイミングはECCデコーダ回路３よりも十分早くすることができる。すなわち、CPUコア３０が動作する高い周波数のCLK信号（例：1 GHz超）の１クロックサイクル内で、リードデータD0〜D31に全くビット誤りが発生していないことを検出できる。
【００８０】
リードデータD0〜D31に全くビット誤りが発生していないことは、Parity検査回路４８の出力であるnerr信号が"1"となることで示されるが、逆にそのnerr信号がその時点で"0"であるならば、リードデータD0〜D31に1ビット誤りや2ビット誤りが発生したことを意味する。そのため、1ビット誤りが発生したのならば、そのビット誤りを訂正する必要があり、また2ビット誤りが発生したとすると、訂正できないビット誤りであることをCPUコア３０に知らせる必要がある。これらの処理はECCデコーダ回路３で行われるが、その処理遅延時間は２クロックサイクルよりは短いものの１クロックサイクルよりも長くかかるため、CPUコア３０の処理を１クロックサイクルだけ待たせる必要がある。
【００８１】
WAIT制御回路１９はCPUコア３０の処理を待たせるためのWAIT信号を生成する回路である。Parity検査回路４８で1ビット誤りや2ビット誤りが発生したことが検出され、その出力であるnerr信号が"0"となった場合に、その同じクロックサイクルにおいて次のCLK信号の立ち上がりまで"1"となるような正のパルス信号を生成し、WAIT信号として出力する。これは、フリップフロップ（レジスタ）回路２７ａと2入力INV付きAND回路２８で実現される。これにより、CPUコア３０はその１クロックサイクルの間だけストールし、次のクロックサイクルでは処理を再開する。そのため、次のクロックサイクルでは、リードデータに対して1ビット誤り訂正を行った訂正後の出力データd'0〜d'31や２ビット誤り検出を行った結果のエラー出力信号を、CPUコア３０に対して正しく伝える必要がある。これは、WAIT信号をフリップフロップ（レジスタ）回路２７ｂで１クロックサイクルだけ遅延させた信号により、２系統データ切り換え回路４６の経路をECCデコーダ回路３の出力側に切り換え、また2入力AND回路４７を通してECCデコーダ回路３からの信号が出力されるように制御することで実現される。
【００８２】
以上説明したように、実施形態１によれば、32 bitのデータの各bitを２種類のParityでカバーするよう、全体で32種類のParityを設けたことにより、7 bitのECCによる１ビット誤り訂正・２ビット誤り検出と同様の、２ビット誤り検出が可能となる。また、付加する各々のParityを少ないbit数（具体的には2 bit）から生成するようにしたことにより、少ない本数（具体的には３本）の信号を入力するXOR回路32個を用いてParityによる検査が実現でき、高速化が可能となる。
【００８３】
〔実施形態２〕
実施形態２に係るデータ処理装置について、図面を用いて、その構成と動作について説明する。
【００８４】
本実施形態２に係るデータ処理装置１００は、図１に示される実施形態１に係るデータ処理装置１００においてECC生成回路１とParity生成回路１１とによって構成されるParity/ECCエンコーダ回路５２の構成を変更し、一体型のParity/ECCエンコーダ回路５３としたものである。Parity/ECCデコーダ回路３１については実質同じである。
【００８５】
図９は、そのParity/ECCエンコーダ回路５３の構成例を示すブロック図である。Parity/ECCエンコーダ回路５３は、Parity生成回路５４とECC生成回路５５とを含んで構成される。Parity生成回路５４は、16個の2入力XOR回路５６ａ〜５６ｐと15個の2入力XOR回路５７ａ〜５７ｏと1個の2入力XOR回路５８により構成される。ECC生成回路５５は、7個の7入力XOR回路５９ａ〜５９ｇにより構成される。
【００８６】
Parity/ECCエンコーダ回路５３は、32 bitの入力データd0〜d31からParity生成回路５４で32種類の1 bitのParity X0〜X31を生成し、そのParity X0〜X31を利用してECC生成回路５５で7 bitのECC E0〜E6を生成する回路である。図３に示したECCの生成行列（G）と図８に示したECCの検査行列（H）に対応している点は、実施形態１と同じである。また、32種類のParityである点は実施形態１と同じであるが、この実施形態２ではParityの生成行列として、図５に示した実施形態１におけるものと異なるものを用いている。
【００８７】
この実施形態２におけるParity生成回路５４のParityの生成行列を図１０に示す。X0行からX31行までの各行にはいずれも２個の"1"の要素が含まれ、d0列からd31列までの各列についても、いずれも２個の"1"の要素が含まれるよう、この生成行列は構成されているが、実施形態１で用いている図５に示したものとは異なる。ここで、32種類のParity X0〜X31を、16種類のParity X0〜X15（第１グループ）と15種類のParity X16〜X30（第２グループ）、１種類のParity X31（第３グループ）という３つのグループに区分して示している。
【００８８】
Parity生成回路５４は、この生成行列に従って入力データd0〜d31からParity X0〜X31を生成するよう、生成行列の"1"の要素に対応する2 bitの入力データから、XOR演算でParityの各bitを生成する回路である。具体的には、Parity生成回路５４は、X0〜X31のそれぞれを2入力XOR回路５６ａ〜５６ｐと５７ａ〜５７ｏ、５８で生成する。上記の３つのグループの区分も示している。たとえば、生成行列の上から２番めの行であるX1行を見ると、"1"の要素が含まれる２個の列に対応する入力データはd2とd5であることが分かる。これに対応する形で、X1を生成する2入力XOR回路５６ｂの入力ポートには、同じ入力データd2とd5の2 bitが接続されている。
【００８９】
ECC生成回路５５は、図３に示した生成行列に対応したECC E0〜E6を生成する回路だが、Parity生成回路５４で生成したParity X0〜X31を部分和としてECCの生成のために用いる点が実施形態１とは異なる。これを可能とするために、図１０に示したParityの生成行列はその構成を工夫したものである。その考え方を図１１に示す。これは、図３に示したECCの生成行列の"1"の要素の位置に、そこに対応する入力データの各bitが３２種類のParity X0〜X31のどれを生成するために用いられているのかを示すX0〜X31の記号を書いたものである。太い枠線で示している第１グループであるX0〜X15は、それぞれE0行からE6行までのいずれか２つの行に２個ずつ含まれる。また、第２グループであるX16〜X30は、それぞれE0行からE6行までのいずれか１つの行に２個ずつ含まれ、さらに第３のグループであるX31は、所定の２つの行に１個ずつ（具体的には、E5行d28列とE6行d31列に）含まれる。
【００９０】
図１１から、Parity X0〜X31を部分和として用いることでECC E0〜E6が生成できることが分かる。ECC生成回路５５は、これに従って、ParityのX0〜X30（X31は含まない）と入力データのd28とd31からXOR演算でECCの各bitを生成する回路である。その生成の様子を行列の形で図１２に示す。各行がParityの各bitに対応し、各列が生成するECCの各bitに対応する行列である。図１０に示したParityの生成行列の横にこの図１２の行列を並べると分かりやすい。具体的には、E0〜E6のそれぞれを7入力XOR回路５９ａ〜５９ｇで生成する。ECC E0〜E4を生成する５個の7入力XOR回路５９ａ〜５９ｅの各入力ポートには、Parity X0〜X30のうちのいずれか７種類のParityが接続されている。それに対して、ECC E5とE6を生成する２個の7入力XOR回路５９ｆと５９ｇの入力ポートのうち、６個の入力ポートには所定のParityが接続されるが、残りの１個のポートには所定の入力データ（7入力XOR回路５９ｆにはd28、7入力XOR回路５９ｇにはd31）が接続される。
【００９１】
以上説明したParity/ECCエンコーダ回路５３に対応するParity/ECCデコーダ回路は、実施形態１で図６に示したParity/ECCデコーダ回路３１の構成と同じであるが、その中にあるParity検査回路４８における3入力XOR回路４９ａ〜４９Ｆにおいて、それぞれの入力ポートにリードデータD0〜D31のどのbitが接続されるかが異なっている。その接続は、上記のParity生成回路５４における３２種類の2入力XOR回路５６ａ〜５６ｐと５７ａ〜５７ｏ、５８における接続に対応するものである。それ以外のWAIT制御回路１９やECCデコーダ回路３の構成と動作は、実施形態１の場合と同じである。
【００９２】
以上説明した実施形態２によれば、実施形態１と同様に、32 bitのデータの各bitを２種類のParityでカバーするよう、全体で32種類のParityを設けたことにより、7 bitのECCによる１ビット誤り訂正・２ビット誤り検出と同様の、２ビット誤り検出が可能となる。また、付加する各々のParityを少ないbit数（具体的には2 bit）から生成するようにしたことにより、少ない本数（具体的には３本）の信号を入力するXOR回路を32個用いてParity検査が実現でき、高速化が可能となる。
【００９３】
さらに、生成した32種類のParityを部分和として用いてECC E0〜E6を生成するようにしたことにより、ECC生成回路５５の回路規模を小さく、処理遅延時間を短くすることができる。
【００９４】
〔実施形態３〕
実施形態３に係るデータ処理装置について、図面を用いて、その構成と動作について説明する。
【００９５】
本実施形態３は、生成したParityを部分和としてECCの生成のために用いる点は実施形態２と同じであるが、ECCのうちの1 bitだけは入力データから生成するように変更し、Parityの種類の数を32種類から25種類に減らしたものである。
【００９６】
図１３は、実施形態３に係るデータ処理装置の構成例を表すブロック図である。実施形態３に係るデータ処理装置１００は、プロセッサの一例であるCPUコア３０と、メモリの一例であるCPUコア３０に密結合される高速メモリ（TCM）２９ａと２９ｂと、Parity/ECCエンコーダ回路１３と、Parity/ECCデコーダ回路２２とを備える。実施形態１に係るデータ処理装置１００は、メモリを１つのTCM５１で構成したのに対して、本実施形態３では、２つのTCM２９ａと２９ｂとによって構成される。TCM２９ａはCPUコア３０が処理する32 bitのデータ（ライトデータとリードデータ）そのものを保持するメモリであり、TCM２９ｂはそのデータに付随する7 bitのECCと25 bitのParityを保持するメモリである。CPUコア３０からのアドレス信号とメモリ制御信号は両方のTCM２９ａと２９ｂに共通に与えられている。どちらのメモリも32 bitのデータ幅で(2^n)個のアドレス空間を備えたSRAMである。たとえば、TCM２９ａと２９ｂは、同一のアドレス空間に割り付けられた、物理的に異なるメモリセルアレイを持つメモリで構成される。
【００９７】
図１４は、Parity/ECCエンコーダ回路１３の構成例を表すブロック図である。Parity/ECCエンコーダ回路１３は、Parity生成回路１４とECC生成回路１５とを含んで構成される。Parity生成回路１４は、16個の2入力XOR回路１６ａ〜１６ｐと９個の2入力XOR回路１７ａ〜１７ｉにより構成される。ECC生成回路１５は、6個の7入力XOR回路１８ａ〜１８ｆと1個の13入力XOR回路１８ｇにより構成される。
【００９８】
Parity/ECCエンコーダ回路１３は、32 bitの入力データのd0〜d31からParity生成回路１４で２５種類の1 bitのParity X0〜X24を生成し、そのParity X0〜X24を利用してECC生成回路１５で7 bitのECC E0〜E6を生成する回路である。図３に示したECCの生成行列（G）と図８に示したECCの検査行列（H）に対応している点は、実施形態１や実施形態２と同じであるが、この実施形態３では２５種類のParityを用いている点が実施形態１や実施形態２とは異なる。
【００９９】
この実施形態３における２５種類のParityの生成行列を図１５に示す。X0行からX24行までの各行にはいずれも２個の"1"の要素が含まれ、d0列からd31列までの各列についても、基本的には２個の"1"の要素が含まれるよう、この生成行列は構成されている。ただし、例外として、この生成行列の下部に上向き矢印で示した１４個の列（具体的には、d0, d1, d3, d4, d8, d9, d10, d11, d17, d20, d23, d25, d27, d31の列）だけは、その各列に含まれる"1"の要素の数を１個としている。ここで、２５種類のParity X0〜X24を、１６種類のParity X0〜X15からなる第１グループと９種類のParity X16〜X24からなる第２グルームの２つのグループに区分して示している。
【０１００】
Parity生成回路１４は、この生成行列に従って入力データd0〜d31からParity X0〜X24を生成するよう、生成行列の"1"の要素に対応する2 bitの入力データから、XOR演算でParityの各bitを生成する回路である。具体的には、第１グループのParity X0〜X15を2入力XOR回路１６ａ〜１６ｐで生成し、第２グループのParity X16〜X24を2入力XOR回路１７ａ〜１７ｉで生成する。たとえば、生成行列の先頭行であるX0行を見ると、"1"の要素が含まれる２個の列に対応する入力データはd0とd14であることが分かる。これに対応する形で、X0を生成する2入力XOR回路１６ａの入力ポートには、入力データのそれらの2 bit d0とd14が接続されている。
【０１０１】
ECC生成回路１５は、図３に示した生成行列に対応したECC E0〜E6を生成する回路だが、Parity生成回路１３で生成したParity X0〜X24を部分和としてECCの生成のために用いる点が実施形態１とは異なる。これを可能とするために、図１５に示したParityの生成行列はその構成を工夫したものである。また、Parityの種類の数とParityを利用したECCの生成方法が実施形態２とは異なり、この実施形態３における考え方を図１６に示す。これは、図３に示したECCの生成行列の"1"の要素の位置に、そこに対応する入力データの各bitが２５種類のParity X0〜X24のどれを生成するために用いられているのかを示す、X0〜X24の記号を書いたものである。太い枠線で示している第１グループであるX0〜X15は、それぞれE0行からE5行までのいずれか２つの行に２個ずつ含まれる。また、第２グループであるX16〜X24は、それぞれE0行からE5行までのいずれか１つの行に２個ずつ含まれる。ここで、例外として、E6行にはX0〜X24は現れず元の"1"のまま、同様にE5行d20列も元の"1"のままである。
【０１０２】
この図１６から、Parity X0〜X24を部分和として用いることでECC E0〜E5（E6は除く）が生成できることが分かる。ECC生成回路１５は、これに従って、ParityのX0〜X24と入力データのd20からXOR演算でECCの各bitを生成する回路と、入力データd0〜d31の一部からECCのE6を生成する回路とを含むものである。その生成の様子を行列の形で図１７に示す。各行がParityの各bitに対応し、各列が生成するECCの各bitに対応する行列である。図１５に示したParityの生成行列の横にこの図１７の行列を並べると分かりやすい。具体的には、E0〜E5のそれぞれを7入力XOR回路１８ａ〜１８ｆで生成する。ECC E0〜E4を生成する５個の7入力XOR回路１８ａ〜１８ｅの各入力ポートには、Parity X0〜X24のうちのいずれか７種類のParityが接続されている。ECC E5を生成する7入力XOR回路１８ｆの入力ポートのうち、６個の入力ポートには所定のParityが接続されるが、残りの１個のポートには入力データd20が接続される。また、ECC E6だけは13入力XOR回路１８ｇで入力データd0〜d31の一部から直接生成される。これは、図２に示した実施形態１におけるECC生成回路１の13入力XOR回路２ｇと同じである。
【０１０３】
図１８は、Parity/ECCデコーダ回路２２の構成例を表すブロック図である。Parity/ECCデコーダ回路２２は、以上説明したParity/ECCエンコーダ回路１３に対応する機能を備える。Parity/ECCデコーダ回路２２は、ECCデコーダ回路４１、Parity検査回路２３、WAIT制御回路１９を含んで構成される点が、実施形態１で図６に示したParity/ECCデコーダ回路３１の構成と類似しているが、Parityの種類の数の違いと、出力データd'0〜d'31とエラー出力信号のマスク制御方法の違いに応じて、一部が異なっている。
【０１０４】
この実施形態３に係るParity/ECCデコーダ回路２２に含まれるParity検査回路２３は、図１５に示したParityの生成行列とペアになる検査行列（図示せず）に対応する。Parity検査回路２３は、リードデータD0〜D31とParity X0〜X24から２５種類のParityチェック結果y0〜y24を生成し、すべてのParityチェック結果からリードデータD0〜D31に全くビット誤りが発生していない場合に"1"となるnerr（エラー無し）信号を生成する。Parity検査回路２３は、検査行列の"1"の要素に対応するいずれかの位置の2 bitのリードデータと1 bitのParityから、XOR演算で２５種類のParityチェック結果を生成する回路であり、具体的には、y0〜y24のそれぞれを3入力XOR回路２４ａ〜２４ｐと２５ａ〜２５ｉで生成する。たとえば、Parityチェック結果のy0を生成する3入力XOR回路２４ａの入力ポートには、リードデータのD0, D14とそれらに対応するParityのX0が接続されている。
【０１０５】
生成された２５種類のParityチェック結果y0〜y24のそれぞれは、対応するParity X0〜X24のそれぞれでカバーされる2 bitのリードデータのどちらかに１ビット誤りが発生した場合に"1"となり、全くビット誤りが発生していない場合には"0"となる。これらの２５種類のParityチェック結果y0〜y24は25入力INV付きAND回路２６に入力され、すべての値が"0"である場合に、全くビット誤りが発生していないことを示すnerr信号として"1"を出力する。
【０１０６】
ただし、万が一、いずれかのParityでカバーされる2 bitのリードデータの両方にビット誤り（２ビット誤り）が発生したとすると、そのParityチェック結果は"0"となってしまう。そのため、その単独のParityチェック結果だけでは、全くビット誤りが発生していない場合との区別が付かない。しかし、そのときの2 bitのリードデータは、少なくともどちらか一方のbitが他の種類のParityでカバーされている（ただし、例外として、Parity X11でカバーされている入力データd20, d23だけは、他の種類のParityではカバーされていない）。このため、単独のParityチェック結果だけでは分からない上記のような２ビット誤りが発生したとしても、それとは別のParityチェック結果で１ビット誤りが発生したものとして検出できる。
【０１０７】
ここで、リードデータD0〜D31はTCM２９ａに保持されていたデータであり、Parity X0〜X24はECC E0〜E6と合わせて別のTCM２９ｂに保持されていたデータである。そのため、いずれかのParityでカバーされる2 bitのリードデータのどちらかに（TCM２９ａにおいて）１ビット誤りが発生すると同時に、対応する1 bitのParityにビット誤り（１ビット誤り）が（TCM２９ｂにおいて）発生する可能性は実質ゼロと考えて構わない。
【０１０８】
なお、本実施形態では、上記の通り、Parity X11でカバーされている入力データd20, d23だけは、例外的に他の種類のParityでカバーされていない。そのため、発生する可能性が極めて低いことは明らかだが、同じTCM２９ａに保持されていたリードデータD0〜D31のうち、たまたまD20とD23にビット誤り（２ビット誤り）が発生した場合だけは、Parity検査回路２３でこの２ビット誤りを検出できないという弱点がある。しかし、実は、この弱点をカバーすることは容易である。
【０１０９】
たとえば、入力データd20, d23のどちらかのbitと入力データd0〜d31から選んだ他のbitとの2 bitの入力データから、もう１種類のParity X25も生成するようにし、Parity検査回路２３ではこれに対応して、nerr（エラー無し）信号の生成のために２６種類めのParityチェック結果y25も追加で用いるようにすればよい。あるいは、入力データd20, d23のどちらかのbitを、Parity X11以外の２４種類のParityのいずれかを生成する際に追加のbitとして用いる（つまり、そのParityだけは3 bitの入力データから生成する）ようにすればよい。
【０１１０】
WAIT制御回路１９の構成と動作は、実施形態１の場合と同じであるが、図６では２系統データ切り換え回路４６に与えていた制御信号（WAIT信号を１クロックサイクルだけ遅延させた信号）を、この実施形態３ではECCデコーダ回路４１におけるシンドローム復号回路４２にDEC-EN信号として与えるようにしている。
【０１１１】
図１９は、ECCデコーダ回路４１のより詳細な構成例を表すブロック図である。ECCデコーダ回路４１は、図７に示される実施形態２に係るECCデコーダ回路３と同様に、シンドローム生成回路４とシンドローム復号回路４２と誤り訂正回路６とエラー信号生成回路７とを含んで構成される。シンドローム生成回路４と誤り訂正回路６とエラー信号生成回路７を構成する各回路は、図７に示したものと同じである。シンドローム復号回路４２は、32個の8入力一部INV付き（4入力ポートにだけNOT論理が付加された）AND回路４３ａ〜４３ｚ、４３Ａ〜４３Ｆ、7入力INV付き（全入力ポートにNOT論理が付加された）AND回路４３Ｇ、INV（NOT）回路４４、及び、2入力OR回路４５を含んで構成される。
【０１１２】
シンドローム復号回路４２には、WAIT制御回路１９からDEC-EN信号が与えられ、その値が"1"のときにだけ３２通りの誤り位置フラグc0〜c31と誤り無しフラグcxxを意味のあるデータとし、"0"のときにはすべての誤り位置フラグc0〜c31を"0"にマスクするとともに、誤り無しフラグcxxを"1"に固定する。これにより、必要なタイミングにおいてだけ誤り訂正回路６が所望の動作を行うため、図６に示した実施形態１における２系統データ切り換え回路４６と2入力AND回路４７は不要となる。
【０１１３】
以上説明した実施形態３によれば、実施形態１や実施形態２と類似で、32 bitのデータの各bitを２種類のParityでカバーする（一部だけ例外）よう、全体で２５種類のParityを設けたことにより、7 bitのECCによる１ビット誤り訂正・２ビット誤り検出と同様の、２ビット誤り検出が可能となる。また、付加する各々のParityを少ないbit数（具体的には2 bit）から生成するようにしたことにより、少ない本数（具体的には３本）の信号を入力するXORを２５個用いてParityによる検査が実現でき、高速化が可能となる。
【０１１４】
さらに、生成した２５種類のParityを部分和として用いてECCを生成する（E6だけ例外）ようにしたことにより、ECCを生成する回路の回路規模を小さく、処理遅延時間を短くすることができる。
【０１１５】
また、実施形態１と実施形態２は３２種類のParityを付加する構成としていたが、この実施形態３は２５種類のParityに減らした構成としているため、高速メモリ（TCM）の容量、Parityによる検査やParityの生成を行う回路の回路規模と処理遅延時間を抑えることができる。
【０１１６】
〔実施形態４〕
実施形態４に係るデータ処理装置について、図面を用いて、その構成と動作について説明する。
【０１１７】
図２０は、実施形態４に係るデータ処理装置の構成例を表すブロック図である。実施形態４に係るデータ処理装置は、実施形態１〜３に代表的に示されるエラー訂正方法および回路を、高速動作するCPUコアとそれに密結合されるTCM（高速メモリ）やキャッシュとの間のインタフェース回路に適用したMCUシステム９０である。MCUシステム９０は、CPUコア３０、高速メモリ（TCM）２９ａと２９ｂ、命令キャッシュ３２、データキャッシュ３３、フラッシュメモリ（コードFLASH）３９、汎用SRAM３４、信号処理エンジン３５、及び、各種周辺(I/O)３６を含んで構成される。汎用SRAM３４、信号処理エンジン３５、及び、各種周辺(I/O)３６は、内部バス４０を介してCPU３０と接続されている。
【０１１８】
CPUコア３０と高速メモリ（TCM）２９ａと２９ｂとの間には、インタフェース回路として、実施形態３と同じParity/ECCエンコーダ回路１３とParity/ECCデコーダ回路２２とを設けている。
【０１１９】
CPUコア３０が順次実行する命令コードはコードFLASH３９に格納されているが、コードFLASH３９からのデータアクセス（リード（読出し））には時間がかかるため、CPUコア３０が動作するのと同じ高い周波数のCLK信号（例：1 GHz超）の１クロックサイクルでデータリードの処理が行える高速メモリの命令キャッシュ３２を設けている。CPUコア３０と命令キャッシュ３２との間には、インタフェース回路としてParity生成回路３７ｅとParity検査回路３７ｄを設けている。Parity生成回路３７ｅは１ビット誤り検出に加えて２ビット誤り検出が可能な複数種類のParityを生成する回路であり、その構成と動作は、図４に示した実施形態１におけるParity生成回路１１（そのParityの生成行列は図５に示したもの）と同じである。また、Parity検査回路３７ｄはその複数種類のParityから１ビット誤りや２ビット誤りの発生を検出する回路であり、その構成と動作は、図６に示した実施形態１におけるParity/ECCデコーダ回路３１のParity検査回路４８と同じである。命令キャッシュ３２において命令コードに１ビット誤りや２ビット誤りが発生した場合には、Parity検査回路４８からCPUコア３０に出力されるnerr（エラー無し）信号（図示せず）が"0"となり、CPUコア３０はコードFLASH３９から正しい命令コードを読み直して命令キャッシュ３２に再格納することで、それらのビット誤りによる影響を排除する。
【０１２０】
CPUコア３０が処理のために使用するワークメモリ領域として、内部バス４０経由でデータアクセス（リード（読み出し）またはライト（書き込み））可能な汎用SRAM３４が使用されるが、そのデータアクセスは複数クロックサイクルの時間がかかるため、高速に１クロックサイクルでデータアクセスできる高速メモリのデータキャッシュ３３を設けている。CPUコア３０とデータキャッシュ３３との間には、インタフェース回路として、Parity/ECCエンコーダ回路３８ｅとParity/ECCデコーダ回路３８ｄを設けている。Parity/ECCエンコーダ回路３８ｅの構成と動作は、図１４に示した実施形態３におけるParity/ECCエンコーダ１３（そのParity生成回路１４が対応するParityの生成行列は図１５に示したもの）と同じである。また、Parity/ECCデコーダ回路３８ｄの構成と動作は、図１８に示した実施形態３におけるParity/ECCデコーダ回路２２と同じである。データキャッシュ３３において格納されているデータに１ビット誤りが発生した場合には、CPUコア３０に対してWAIT信号（図示せず）が正のパルス信号として１クロックサイクルだけ出力され、Parity/ECCデコーダ回路３８ｄでそのビット誤りが訂正される。また、２ビット誤りが発生した場合には、CPUコア３０に対してエラー出力信号（図示せず）が出力される。
【０１２１】
信号処理エンジン３５は、CPUコア３０の処理を助けるためのハードウェアアクセラレータ回路である。また、各種周辺(I/O)３６は、MCUシステム９０における外部との各種入出力ポートの制御を行う各種制御回路である。ここの中には、MCUシステム９０で発生した各種エラー状態を全体としてまとめて管理するためのエラー管理モジュール（図示せず）も設けている。そのため、Parity/ECCデコーダ回路２２や３８ｄから出力されるエラー出力信号は、そのエラー管理モジュールに入力される。
【０１２２】
〔その他の実施形態〕
その他の実施形態（バリエーション）について、図面を用いて説明する。
【０１２３】
実施形態１と実施形態２は、CPUコアに密結合されるTCM（高速メモリ）が１つのメモリで構成されることを前提とし、実施形態１はECCの生成とは独立に３２種類のParityの生成を行うもの、実施形態２は３２種類のParityを生成した後にそれらを部分和として用いてECCの生成を行うものとした。また、実施形態３は、CPUコアに密結合されるTCM（高速メモリ）が２つのメモリで構成され、一方には32 bitのデータが保持され、もう一方にはそのデータに付随するECCとParityが保持されることを前提とし、２５種類のParityを生成した後にそれらを部分和として用いてECCの生成を行うものとした。この実施形態３と同じ前提において、ECCの生成とは独立にParityの生成を行うことも可能である。
【０１２４】
図２１はParityの生成行列のその一例であり、これは入力データd0〜d31のいずれかの2 bitからParityを生成するようにして、合計で２４種類のParityを設けたものである。入力データの半分のbit（具体的には、d0, d2, d4, d6, d8, d10, d12, d14, d16, d18, d20, d22, d24, d26, d28, d30）は２種類のParityでカバーされるように、また、この生成行列の下部に上向き矢印で示した残りの半分のbitは１種類のParityだけでカバーされるように構成したものである。ただし、後者のParityを生成するために用いられるもう一方のbitは他の種類のParityでカバーされるよう、この生成行列は規則正しくシンプルな形で構成している。
【０１２５】
いずれかのParityでカバーされる2 bitのリードデータの両方にビット誤り（２ビット誤り）が発生したとしても、少なくともどちらか一方のbitは他の種類のParityでカバーされているため、その２ビット誤りはParity検査回路で検出できる。これは実施形態３と同じ考え方によるものである。なお、Parityを部分和として用いてECCを生成する実施形態３では２５種類のParityを必要としたが、本実施形態では１種類少ない２４種類のParityで済んでいるという違いがある。
【０１２６】
図２２はParityの生成行列の別の例であり、これは入力データd0〜d31のいずれかの3 bitからParityを生成するようにして、合計で２２種類のParityを設けたものである。入力データd0〜d31のどのbitも２種類のParityでカバーされるように構成している点は、実施形態１と同じである。しかし、この生成行列の下部に"*"印で示したd30列を２種類のParityでカバーするためにParity X21を設けたことから、この生成行列の下部に上向き矢印で示した２個の列（具体的には、d0列とd21列）だけは３種類のParityでカバーされる形となっている。そのため、Parity生成回路２０のブロック図は図２３の通りとなる。図２３において、Parity生成回路２０は、２２個の3入力XOR回路２１ａ〜２１ｖにより構成される。また、これに対応したParity検査回路（図示せず）は、２２個の4入力XOR回路と１個の22入力INV付きAND回路で構成される。
【０１２７】
図２４はParityの生成行列のさらに別の例であり、これは入力データのd0〜d31のいずれかの3 bitまたは2 bitからParityを生成するようにして、合計で２８種類のParityを設けたものである。入力データd0〜d31のどのbitも２種類のParityでカバーされるように構成している。Parity生成回路（図示せず）は、８個の3入力XOR回路と２０個の2入力XOR回路で構成される。また、これに対応したParity検査回路（図示せず）は、８個の4入力XOR回路と２０個の3入力XOR回路、１個の28入力INV付きAND回路で構成される。
【０１２８】
図２５はParityの生成行列のまたさらに別の例であり、入力データd0〜d1のいずれかの3 bitからParityを生成するとともに、生成した合計で１８種類のParityを部分和として利用して7 bitのECC E0〜E6を生成できるように構成したものである。実施形態２や実施形態３と同じ考え方に基づくものであり、その考え方を図２６に示す。これは、図３に示したECCの生成行列の"1"の要素の位置に、そこに対応する入力データの各bitが１８種類のParity X0〜X17のどれを生成するために用いられているのかを示すX0〜X17の記号を書いたものである。第１グループであるX0〜X9は、それぞれE0行からE6行までのいずれか２つの行に３個ずつ含まれる。また、第２グループであるX10〜X17は、それぞれE0行からE6行までのいずれか１つの行に３個ずつ含まれる。ここで、例外として、この生成行列の１２個の要素（丸で囲んだE4行d1列、他）は元の"1"のままである。
【０１２９】
この図２６からParity X0〜X31を部分和として用いることでECC E0〜E6が生成できることが分かる。ECC生成回路（図示せず）におけるECCの生成の様子を行列の形で図２７に示す。図２５に示したParityの生成行列の横にこの図２７の行列を並べると分かりやすい。これに従って、ECC生成回路（図示せず）は、５個の6入力XOR回路と２個の5入力XOR回路から構成される。また、Parity生成回路（図示せず）は、１８個の3入力XOR回路で構成され、Parity検査回路（図示せず）は、１８個の4入力XOR回路と１個の18入力INV付きAND回路で構成される。
【０１３０】
ここまでに示した各実施形態はいずれも、入力データの2 bitまたは3 bitという少ないbit数から、３２種類、２８種類、２５種類、２４種類、２２種類、または１８種類という比較的多くの種類のParityを生成して用いるものであった。これは、Parity検査回路において、初段のXOR回路を3〜4入力という少ない入力本数のXOR回路で構成できることから、その処理遅延時間を短縮することを優先したものである。通常は、後段の32〜18入力という多い入力本数のINV付きAND回路の処理遅延時間は支配的でないため、この考え方がParityによる検査の高速化には適している。しかし、Parity検査回路の処理遅延時間を短くすることも重要だが、Parityの種類をできるだけ減らして、それを保持するTCM（高速メモリ）の容量を減らすことも重要であり、後者を優先させたい場合がある。これに対応するためには、入力データの各bitを２種類以上のParityでカバーしながらも、そのParityの種類の数の最小化を図る必要がある。
【０１３１】
図２８はこれを実現するParityの生成行列の一例である。これは入力データd0〜d31のいずれかの6 bitまたは5 bitから１２種類のParityを生成するようにしたものである。このようにParityの生成行列を構成した考え方を図２９に示す。32 bitの入力データのいずれのbitも２種類のParityでカバーすることを前提とし、水平Parityと垂直Parityという２種類の組み合わせで各bitをカバーする考え方とした。入力データd0〜d31をm行n列の二次元配列の形に並べ、各行に並ぶ複数のbitから水平Parityを生成し、各列に並ぶ複数のbitから垂直Parityを生成することにより、入力データの各bitを２種類のParityでカバーするものである。
【０１３２】
入力データは32 bitなのでm×n≧32とする必要があり、水平Parityと垂直Parityとを合わせたParityの種類の数は(m+n)種類となる。取り得る有効なmとnの組み合わせをすべて挙げてみると、以下の５通りとなる。m=2, n=16（m×n=32）でParityが１８種類、m=3, n=11（m×n=33）でParityが１４種類、m=4, n=8（m×n=32）でParityが１２種類、m=5, n=7（m×n=35）でParityが１２種類、m=6, n=6（m×n=36）でParityが１２種類である。これらの中で、Parityの種類の数が最小の１２種類になる組み合わせは３通りあるが、各Parityをできるだけ少ないbit数から生成することも重要であるため、m=6, n=6（m×n=36）が最適だと考えられる。図２９に示した二次元配列は、これに対応する形で入力データd0〜d31を6行6列に並べたものである。二次元配列の36要素のうち、4要素には入力データのbitが割り当てられないため、その要素の位置は空白としている。この図２９から、6 bitまたは5 bitから生成する６種類の水平Parity X0〜X5と、6 bitまたは5 bitから生成する６種類の垂直Parity X6〜X11を構成することができる。図２８はこれをParityの生成行列の形で示したものである。これにより、Parityの種類の数を最小化できる。
【０１３３】
以上説明したParityの種類の数を最小化する考え方は、TCM（高速メモリ）が１つのメモリで構成されることを前提とし、入力データの各bitを２種類のParityでカバーするものであった。しかし、実施形態３のように、TCM（高速メモリ）が２つのメモリで構成され、一方には32 bitのデータが保持され、もう一方にはそのデータに付随するECCとParityが保持されることを前提とした場合にも、同様の考え方が適用可能である。
【０１３４】
図３０はこれを実現するParityの生成行列の一例である。この生成行列の下部に上向き矢印で示したbitだけは１種類のParityだけでカバーされるよう、図２８に示したParityの生成行列に対して、X0行からX11行までのいずれかの行に含まれるそのbit位置の"1"の要素のどちらか適切な方を空白に変えたものである。このようにParityの生成行列を構成した考え方を図３１に示す。６種類の水平Parityと６種類の垂直Parityがあるため、すべてのParityに対して、そのParityを生成するために用いている入力データのbit数を1 bitずつ減らすことが最適だと考えられる。そのため、図２９に示した二次元配列と見た目は変わらないが、この図３１の二次元配列で太い枠線で示した要素に割り当てられている入力データのbitは、水平Parityまたは垂直Parityのどちらか一方だけに寄与させるようにした。二次元配列の各行と各列のそれぞれからParityに寄与させるbitを1 bitずつ抜いたものである。図３０はこれをParityの生成行列の形で示したものである。１種類のParityだけでしかカバーされていない入力データのbitがあるが、そのParityを生成するために用いられる他のすべてのbitが他の種類のParityでカバーされているため、２ビット誤りを見逃すことはない。
【０１３５】
なお、以上説明した各実施形態では、図３に示したECCの生成行列（G）とこれとペアになる図８に示したECCの検査行列（H）を用いていたが、これらと異なる生成行列と検査行列のペアを用いる場合であっても、同様に適用できる。ECCの生成行列のすべての行に１４個の"1"が含まれるように、図３におけるE5行とE6行の適切な位置（たとえば、どちらもd24の位置）に"1"を追加したものであってもよい。
【０１３６】
また、入力データd0〜d31のいずれかのbitの値を反転させてからECCを生成するような場合であっても、同様に適用できる。ECCの生成行列の各列に対応する入力データのいずれかのbit（たとえば、d0とd1）の値を反転させてから、このECCの生成行列を用いるようにしてもよい。このときは、ECCの検査行列についても、それに対応する用い方をすればよい。
【０１３７】
図１３に示した通り、実施形態３ではTCM（高速メモリ）を、CPUコア３０が処理する32 bitのデータ（ライトデータとリードデータ）そのものを保持するメモリ２９ａと、そのデータに付随する7 bitのECCと25 bitのParity（合計で32 bit）を保持するメモリ２９ｂという２つのメモリで構成している。ここで、Parity/ECCエンコーダ回路１３におけるECC生成回路15でECC E0〜E6を生成するまでの処理遅延時間をカバーするために、後者のTCM２９ｂに与えるCLK信号を多少遅らせてタイミング調整してもよい。これは、Parity/ECCデコーダ回路２２におけるECCデコーダ回路４１の処理は２クロックサイクルで完了すればよく、時間余裕があるためであるが、Parity/ECCデコーダ回路２２におけるParity検査回路２３とWAIT制御回路１９の処理はあくまでも１クロックサイクルで完了する必要があることに注意が必要である。
【０１３８】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【０１３９】
たとえば、MCUシステム９０などのデータ処理装置１００は、単一の半導体基板上に形成される集積回路（ＬＳＩ：Large Scale Integrated circuit）によって構成されてもよい。また、CPUコア３０は如何なるアーキテクチャのプロセッサでも良く、あるいは、メモリにアクセスする他のバスマスタデバイス（たとえば、ダイレクトメモリアクセスコントローラ）やキャッシュコントローラに変更されても良い。
【０１４０】
また、たとえば例示した論理回路は、一例に過ぎず、等価な論理演算を実行可能な他の回路に変更することができる。また、正論理を採用するか負論理を採用するかも任意である。
【符号の説明】
【０１４１】
５１、２９ａ、２９ｂ  メモリ（高速メモリ、ＴＣＭ：Tightly Coupled Memory）
３０  プロセッサ（ＣＰＵコア）
１３，３８ｅ，５２，５３  パリティ／誤り訂正符号（Parity/ECC）エンコーダ回路
１１，１４，２０，３７ｅ，５４  パリティ（Parity）生成回路
１，１５，５５  ECC生成回路
７  エラー信号生成回路
４６  データ切換え回路
４７  2入力AND回路
２７ａ，２７ｂ  フリップフロップ（レジスタ）回路
２２，３１，３８ｄ  パリティ／誤り訂正符号（Parity/ECC）デコーダ回路
２３，３７ｄ，４８  Parity検査回路
３，４１  ECCデコーダ回路
４  シンドローム生成回路
５，４２  シンドローム復号回路
６  誤り訂正回路
１９  ＷＡＩＴ制御回路
３２  命令キャッシュ
３３  データキャッシュ
３４  汎用SRAM
３５  信号処理エンジン
３６  各種周辺回路
３９  フラッシュメモリ（コードFLASH）
４０  内部バス
９０  MCUシステム
１００  データ処理装置
２ａ〜２ｇ，８ａ〜８ｇ，１０ａ〜１０ｚ，１０Ａ〜１０Ｆ，１２ａ〜１２ｚ，１２Ａ〜１２Ｆ，１６ａ〜１６ｐ、１７ａ〜１７ｉ、１８ａ〜１８ｇ，２１ａ〜２１ｖ，２４ａ〜２４ｐ，２５ａ〜２５ｉ，４９ａ〜４９ｚ，４９Ａ〜４９Ｆ，５６ａ〜５６ｐ、５７ａ〜５７ｏ、５８，５９ａ〜５９ｇ  排他的論理和（ＸＯＲ：eXclusive OR）回路
９ａ〜９ｚ，９Ａ〜９Ｇ，４３ａ〜４３ｚ、４３Ａ〜４３Ｇ，２６，２８，５０  一部または全部INV付きAND回路
４４  INV（NOT）回路
４５  OR回路
【図１】
2015130085.tif 000003
【図２】
2015130085.tif 000004
【図３】
2015130085.tif 000005
【図４】
2015130085.tif 000006
【図５】
2015130085.tif 000007
【図６】
2015130085.tif 000008
【図７】
2015130085.tif 000009
【図８】
2015130085.tif 000010
【図９】
2015130085.tif 000011
【図１０】
2015130085.tif 000012
【図１１】
2015130085.tif 000013
【図１２】
2015130085.tif 000014
【図１３】
2015130085.tif 000015
【図１４】
2015130085.tif 000016
【図１５】
2015130085.tif 000017
【図１６】
2015130085.tif 000018
【図１７】
2015130085.tif 000019
【図１８】
2015130085.tif 000020
【図１９】
2015130085.tif 000021
【図２０】
2015130085.tif 000022
【図２１】
2015130085.tif 000023
【図２２】
2015130085.tif 000024
【図２３】
2015130085.tif 000025
【図２４】
2015130085.tif 000026
【図２５】
2015130085.tif 000027
【図２６】
2015130085.tif 000028
【図２７】
2015130085.tif 000029
【図２８】
2015130085.tif 000030
【図２９】
2015130085.tif 000031
【図３０】
2015130085.tif 000032
【図３１】
2015130085.tif 000033