(57)【要約】【課題】ＣＰＵの故障率を検出するためのデータをより少ない記憶容量で記憶可能な情報処理装置を提供すること。【解決手段】重複しないランダムパターンを生成するランダムパターン生成手段１１と、前記ランダムパターンに演算を施す演算手段２０と、前記ランダムパターンから一意に特定されるアドレスに、前記演算手段が前記ランダムパターンに演算を施した際の期待値を記憶した期待値記憶手段１３と、前記演算手段の演算結果と、前記期待値記憶手段から読み出された期待値を比較する比較手段１５とを有する。【選択図】図２
2012248022.tif 000002
【特許請求の範囲】
【請求項１】
重複しないランダムパターンを生成するランダムパターン生成手段と、
前記ランダムパターンに演算を施す演算手段と、
前記ランダムパターンから一意に特定されるアドレスに、前記演算手段が前記ランダムパターンに演算を施した際の期待値を記憶した期待値記憶手段と、
前記演算手段の演算結果と、前記期待値記憶手段から読み出された期待値を比較する比較手段と、
を有する情報処理装置。
【請求項２】
重複しないランダムパターンを生成するランダムパターン生成手段と、
前記ランダムパターンの検査パターン部に演算を施す演算手段と、
前記演算手段による演算結果と、前記ランダムパターンの演算結果部との比較結果の期待値を、前記ランダムパターンから一意に特定されるアドレスに記憶した期待値記憶手段と、
前記演算手段の演算結果と、前記演算結果部を比較して第１の比較結果を出力する第１の比較手段と、
前記第１の比較結果と、前記期待値記憶手段から読み出された期待値を比較する第２の比較手段と、
を有する情報処理装置。
【請求項３】
前記ランダムパターン生成手段は全てのビットがゼロのオールゼロパターン以外の全ての前記ランダムパターンを生成するランダムパターン生成手段であり、
前記ランダムパターンが特定のビットパターンになった場合に、オールゼロパターンを前記演算手段に演算させるゼロパターン挿入手段、を有し、
前記比較手段は、オールゼロパターンにより一意に特定されるアドレスから読み出した、オールゼロパターンに演算を施した際の期待値と、前記演算手段によるオールゼロパターンの演算結果とを比較する、
ことを特徴とする請求項１又は２記載の情報処理装置。
【請求項４】
前記ランダムパターン生成器が最後に生成した前記ランダムパターンを記憶するランダムパターン記憶手段を有し、
前記ランダムパターン記憶手段のランダムパターンの次のランダムパターンから生成を再開させるランダムパターン制御手段と、
を有する請求項１〜３いずれか１項記載の情報処理装置。
【請求項５】
前記期待値記憶手段には、前記演算手段が備える演算回路毎に期待値が記憶されており、
前記比較手段は、前記演算手段による演算回路毎の演算結果と、前記期待値記憶手段から読み出された演算回路毎の期待値を比較する、
ことを特徴とする請求項１、３，４いずれか１項記載の情報処理装置。
【請求項６】
前記期待値記憶手段には、前記演算手段が前記ランダムパターンに第１の演算回路で演算を施した演算結果に、さらに前記演算手段が第２の演算回路で演算を施した演算結果が記憶されており、
前記比較手段は、前記演算手段による第１の演算回路の演算の後の第２の演算回路の演算結果と、前記期待値記憶手段から読み出された期待値を比較する、
ことを特徴とする請求項１，３，４いずれか１項記載の情報処理装置。
【請求項７】
前記期待値記憶手段には、前記演算手段による演算結果と、前記演算結果部とのビット毎の比較結果の期待値が、前記ランダムパターンから一意に特定されるアドレスに記憶されており、
前記第１の比較手段は、前記演算手段の演算結果と、前記演算結果部をビット毎に比較して第１の比較結果を出力し、
前記第２の比較手段は、ビット毎の第１の比較結果が、前記期待値記憶手段から読み出された期待値と一致するか否かを比較する、
ことを特徴とする請求項２記載の情報処理装置。
【請求項８】
データに演算を施す演算手段の故障を検出する故障検出装置であって、
重複しないランダムパターンを生成するランダムパターン生成手段と、
前記演算手段に前記ランダムパターンの演算を実行させる制御手段と、
前記演算手段の演算結果と、前記ランダムパターンから一意に特定されるアドレスに、前記演算手段が前記ランダムパターンに演算を施した際の期待値を記憶した期待値記憶手段から期待値を比較する比較手段と、
を有する故障検出装置。
【請求項９】
情報処理装置の故障を検出する故障検出方法であって、
重複しないランダムパターンを生成するランダムパターン生成ステップと、
前記ランダムパターンに演算を施す演算ステップと、
前記ランダムパターンから一意に特定されるアドレスに、前記演算手段が前記ランダムパターンに演算を施した際の期待値を記憶した期待値記憶手段から期待を読み出すステップと、
前記演算手段の演算結果と、前記期待値記憶手段から読み出された期待値を比較する比較ステップと、
を有する故障検出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、故障を検出可能な情報処理装置に関し、特に、ランダムパターンを用いて故障を検出する情報処理装置に関する。
【背景技術】
【０００２】
電子装置に対し安全性を保証する機能安全という考え方がある。車載された電子装置の場合、ＩＳＯ２６２６２に機能安全規格が定められており、半導体や電子部品の故障検出率を上げることが求められている。故障検出率とは、例えば予め組み込まれた安全機構によって故障を検出できる確率である。故障検出率の求め方の１つは、演算時に作動する素子の全ての組合せに対する、テストパターン演算時に作動する素子の組合せの網羅率を求めるというものである。故障検出のための安全機構の具体例として、ＲＡＭやフラッシュメモリーなどに配置される誤り検出訂正回路や自己診断回路が知られている。また、ＣＰＵコアの場合、複数のコアが同じ処理を行い、処理結果が同じだった場合に有効な実行結果とするデュアルロックステップ方式の安全機構が知られている。しかしながら、デュアルロックステップ方式ではＣＰＵコアが複数必要になるため、コスト増になってしまう。
【０００３】
そこで、上記の求め方に沿って、回路や素子レベルで故障を検出する試みが種々考案されている（例えば、特許文献１参照。）。特許文献１には、同一のテストパターンを複数のＣＰＵに演算させ、また、同一の期待値パターンをパラレルに入力し、各ＣＰＵ毎に演算結果を期待値パターンと比較することで、故障を検出する半導体集積回路が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−３１９０５５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、近年のＣＰＵは高集積化が進み回路や素子を網羅するためには検査パターンの種類が多くなる傾向にあり、テストパターン及び期待値パターンの記憶容量が増大してしまうという問題がある。車載されるマイコンでは記憶手段の容量にも制約が生じやすく、全てのテストパターン及び期待値パターンを記憶することが合理的でなくなりつつある。
【０００６】
図１は、テストパターン及び期待値パターンの記憶容量について説明する図の一例である。図はマイコンに搭載されたＲＯＭに記憶されるデータ例を示す。ＲＯＭには車両制御などのためのメインプログラムの他、検査パターン毎に期待値が対応づけて記憶されている。なお、検査パターンが例えば１６ビット、期待値が例えば８ビットなのは、検査パターンに２つのオペランドが含まれるためである。期待値そのものを検査パターンと対応づけておかずに、検査パターンに期待値の記憶先アドレスを対応づければ、期待値を別の記憶手段に配置することもできるが、記憶先アドレスが必要になるので結局は同程度の記憶容量を必要としてしまう。
【０００７】
また、記憶先アドレスでなく、検査パターンから期待値の記憶アドレスを生成するハード的なアドレスコンローラを配置すれば、記憶先アドレスが不要になるので記憶容量を削減できる可能性があるが、アドレスコンローラの分コスト増が生じてしまう。
【０００８】
本発明は、上記課題に鑑み、ＣＰＵの故障率を検出するためのデータをより少ない記憶容量で記憶可能な情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明は、重複しないランダムパターンを生成するランダムパターン生成手段と、前記ランダムパターンに演算を施す演算手段と、前記ランダムパターンから一意に特定されるアドレスに、前記演算手段が前記ランダムパターンに演算を施した際の期待値を記憶した期待値記憶手段と、前記演算手段の演算結果と、前記期待値記憶手段から読み出された期待値を比較する比較手段とを有する。
【発明の効果】
【００１０】
ＣＰＵの故障率を検出するためのデータをより少ない記憶容量で記憶可能な情報処理装置を提供することができる。
【図面の簡単な説明】
【００１１】
【図１】テストパターン及び期待値パターンの記憶容量について説明する図の一例である（従来図）。
【図２】情報処理装置の特徴部を概略的に説明する図の一例である。
【図３】疑似ランダムパターン生成器を説明する図の一例である。
【図４】情報処理装置のハードウェア構成図の一例である。
【図５】検査回路の動作を模式的に説明する図の一例である。
【図６】アドレスオフセット値を説明するための図の一例である。
【図７】検査回路の動作手順を説明する図の一例である。
【図８】情報処理装置のハードウェア構成図の一例である（実施例２）。
【図９】検査プログラムの機能を説明する図の一例である。
【図１０】検査回路の動作手順を説明する図の一例である。
【図１１】検査方法を模式的に説明する図の一例である。
【図１２】検査プログラムの機能を説明する図の一例である。
【図１３】検査プログラムの動作手順を説明する図の一例である。
【図１４】検査回路の構成図の一例である。
【発明を実施するための形態】
【００１２】
以下、本発明を実施するための形態について図面を参照しながら実施例を挙げて説明する。
【００１３】
図２は、情報処理装置の特徴部を概略的に説明する図の一例である。図示するように、疑似ランダムパターン生成器１１に検査対象ＡＬＵ１２が接続されている。また、疑似ランダムパターン生成器１１は加算器１４に接続されている。また、ＲＯＭ１３と検査対象ＡＬＵ１２が排他的論理和回路（ＥＸ−ＯＲ回路）１５に接続されている。
【００１４】
ＲＯＭ１３にはメインプログラム、期待値、及び、アドレスオフセット値が記憶されている。図示するように疑似ランダムパターンがＲＯＭ１３に記憶されていない点が特徴の１つである。
（１）疑似ランダムパターン生成器１１は、検査パターンを生成して検査対象ＡＬＵ１２に、期待値アドレスを加算器１４にそれぞれ出力する。検査パターンと期待値アドレスは同じビットパターンである。
（２）検査対象ＡＬＵ１２は検査パターンに加算や乗算などの演算を施し排他的論理和回路１５に出力する。
（３）加算器１４は、ＲＯＭ１３に記憶されたアドレスオフセット値に期待値アドレスを加算して読み出しアドレスを算出する。
（４）読み出しアドレスは不図示のデータバスに出力され、ＲＯＭ１３の読み出しアドレスから期待値が読み出され、排他的論理和回路１５に出力される。読み出しアドレスは一意なので、重複しない１つの期待値を特定できる。このため、ＲＯＭ１３の読み出しアドレス（＝アドレスオフセット値＋期待値アドレス）に期待値のみを記憶しているだけで、検査パターンと期待値の紐付けが不要になりＲＯＭ１３の記憶容量を節約できる。
（５）検査対象ＡＬＵ１２に故障がなければ排他的論理和回路１５は、検査対象ＡＬＵ１２の演算結果と期待値が等しいという比較結果を出力する。
【００１５】
以上のような検査装置によれば、以下の作用効果が得られる。
・疑似ランダムパターン生成器１１がＡＬＬゼロを除く全ての検査パターンを生成するので、ＡＬＬゼロさえ検査パターンに加えれば、故障検出率を１００％とすることができる。
・アドレスオフセット値を基準に、検査パターンにより一意に定まる読み出しアドレスに期待値を記憶するので、記憶容量を低減できる。また、期待値と検査パターンを対応づけて記憶したり、期待値と検査パターンを対応づける仕組みが不要になる。
【００１６】
〔疑似ランダムパターン生成器〕
図３は、疑似ランダムパターン生成器１１を説明する図の一例である。疑似ランダムパターン生成器１１は、例えばＬＦＳＲ（linear  feedback  shift  register）により構成される。図示するようにＬＦＳＲはＦＦ（フリップフロップ）を直列に接続し、ＦＦ１とＦＦ４の値の排他的論理和を取りＦＦ１にフィードバックする。ＦＦ２〜ＦＦ４には１サイクル前のＦＦ１〜ＦＦ３の値が記憶される。
【００１７】
図３（ｂ）はサイクル毎のＦＦ１〜ＦＦ４の値を示す図の一例である。例えば、ＦＦ１〜ＦＦ４の値が｛１，１，１，１｝であった場合、ＦＦ１＝１とＦＦ４＝１の排他的論理和が０なので、次のサイクルではＦＦ１だけがゼロになり、ＦＦ２〜ＦＦ４には１が記憶される。｛0，１，１，１｝であった場合、ＦＦ１＝０とＦＦ４＝１の排他的論理和が１なので、次のサイクルではＦＦ１は１になり、ＦＦ２〜ＦＦ４には0，１，１がそれぞれ記憶される。このような演算を繰り返すと、ＬＳＦＲは1周期の間に重複しない４ビットのビットパターンを一度だけ生成する。図示するように４個のＦＦを有するＬＳＦＲでは１５サイクルで１周期である。1周期のサイクル数は「２＾ＦＦの個数−１」である。
【００１８】
ＬＳＦＲにはＡＬＬゼロを出力する機能がなく、仮にＦＦ１〜４にゼロを設定すると、以降のサイクルでは常にＦＦ１〜４がゼロになってしまう。このため、本実施形態の情報処理装置１００は意図的に検査パターンにＡＬＬゼロを挿入する。
【００１９】
なお、疑似ランダムパターン生成器１１はＬＦＳＲに限られず、ＣＡ（Cellular  automaton）などによっても実現できる。
【実施例１】
【００２０】
本実施例では、ハード的に検査する情報処理装置１００について説明する。
図４は、情報処理装置１００のハードウェア構成図の一例を示す。この情報処理装置１００は、例えば車両のＥＣＵ（Electronic  Control  Unit）に搭載されるマイコンである。ＥＣＵにはエンジンＥＣＵ、ＨＶ（ハイブリッド）−ＥＣＵ、ブレーキＥＣＵ、ゲートウェイＥＣＵなど、種々のものがあるがどのようなＥＣＵに搭載されてもよい。また、複数のＥＣＵの機能が統合された統合ＥＣＵに搭載されてもよい。
【００２１】
情報処理装置１００は、データバス３６に接続された、ＲＡＭ２２、Ｉ／Ｏ２３、タイマ２４、ＩＮＴＣ２５、ＤＭＡＣ２６、ＣＰＵ２１、及び、検査回路２００を有する。なお、ＣＰＵ２１と検査回路２００はデータバス３７を介してＲＯＭ１３とも接続されている。
【００２２】
ＣＰＵ２１は、データバス３６に接続された２つのレジスタセット３４，３５、２つのレジスタセット３４，３５に接続されたＡＬＵ２０、データバス３７と接続されたプログラムカウンタ３１と命令キュー３２、命令キュー３２と接続された命令デコーダ３３、とを有する。一方のレジスタセット３４には、ＲＡＭに記憶されているデータやＩ／Ｏに入力されたセンサの検出値等が、データバス３６を介して読み出される。他方のレジスタセット３５には、ＡＬＵ２０の演算結果が記憶される。レジスタセット３４，３５は、複数のレジスタの集合である。
【００２３】
プログラムカウンタ３１にはＣＰＵ２１が実行するＲＯＭ１３のアドレスが記憶される。プログラムカウンタ３１がアドレスをデータバス３７に出力すると、そのアドレスの命令が命令キュー３２に読み出される。プログラムカウンタ３１は、１つの命令が読み出される毎に、記憶しているアドレスの値を大きくして次の命令の読み出しに備える。なお、分岐命令が読み出されたような場合、プログラムカウンタ３１には分岐先のアドレスがセットされる。
【００２４】
命令キュー３２は、ＦＩＦＯ（First  In，First  Out）型の記憶手段で、複数の命令（例えば、５〜２０程度）を保持させておくことができる。命令キュー３２には実行順に命令が読み込まれる。命令デコーダ３３は、命令キュー３２の命令をデコードしてＣＰＵ２１の各回路や周辺の回路に接続されている制御線に信号を出力する。例えばＡＬＵ２０にはデコード結果に応じて加算、乗算、減算、シフト、除算等が指示される。また、デコードにより命令が演算対象とするオペランドが特定されるので、ＡＬＵ２０にはデコード結果に応じてレジスタセット３４，３５からデータが入力される。
【００２５】
ＡＬＵ２０は、レジスタセット３４，３５から入力されたデータに各種の演算を施す。演算結果は、レジスタセット３５にライトバックされ、再度、演算の対象となったり、ＲＡＭに書き込まれる。また、本実施例ではＡＬＵ２０の検査時に、ＡＬＵ２０の演算結果が検査回路２００に出力される。
【００２６】
検査回路２００は、ＲＯＭ１３から複写されたアドレスオフセット値、疑似ランダムパターン生成器１１、制御部１６、排他的論理和回路１５、監視回路１９、加算器１４及び結果記憶部１８を有する。アドレスオフセット値はＲＯＭ１３に記憶されているが、例えば、情報処理装置１００の起動時の初期処理としてＲＯＭ１３から検査回路２００のレジスタに読み出されている。疑似ランダムパターン生成器１１については上述したとおりである。
【００２７】
制御部１６は、検査の開始、再開などの検査手順を制御する。制御部１６は、例えばＣＰＵ２１の負荷を監視して、疑似ランダムパターン生成器１１に検査パターンを生成させたり、停止させたり、再開時の検査パターンを指示する。
【００２８】
加算器１４は、アドレスオフセット値と疑似ランダムパターン生成器１１が生成した期待値アドレスを加算して、ＤＭＡＣ２６にＲＯＭ１３からの期待値の読み出しを依頼する。すなわち、加算器１４は加算結果（読み出しアドレス）と期待値の読み出し先（制御部又は検査回路の排他的論理和回路）をＤＭＡＣ２６のレジスタに設定する。ＤＭＡＣ２６はＣＰＵ２１を介さずにＲＯＭ１３から読み出しアドレスの期待値を読み出し、検査回路２００の制御部１６に入力する。制御部はこの期待値を排他的論理和回路１５に出力する。
【００２９】
また、制御部１６は、疑似ランダムパターン生成器１１が生成した検査パターンをＡＬＵ２０に実行させる。実行させる方法としてハード的には以下のような方法がある。
・メインプログラムの命令と同様にＡＬＵ２０に実行させる方法
制御部１６は、疑似ランダムパターン生成器１１が生成した検査パターンをデータバス３７を介して命令キュー３２に設定する。この時、制御部１６は検査パターンにオペコードを追加する。オペコードにより各演算を指定できる。演算の種類はＡＬＵ２０が同一なら固定なので、例えば３〜５種類のオペランドを１つの検査パターンに追加する。したがって、１つの検査パターンに対し３〜５個の命令が命令キュー３２に設定される。
・ＡＬＵ２０に直接オペランドを入力する方法
ＡＬＵ２０にもよるが演算回路が異なるとＡＬＵ２０は同時並行的に演算を実行できる。制御部１６は１つの検査パターンを分配器で加算回路、乗算回路などに分岐してＡＬＵ２０に入力することで、各演算の演算結果を短時間に得ることができる。ＡＬＵ２０が同時並行的に演算を実行できない場合、制御部１６はＡＬＵ２０に各演算種類を指示するための制御信号を出力し、ＡＬＵ２０の検査パターンの第１オペランドと第２オペランドを入力する。これを加算、乗算などの演算種類ごとに繰り返す。
【００３０】
また、制御部１６は期待値から演算種類に応じた部分のみ（何バイト目、上位何ビット、下位何ビット等）を取り出して排他的論理和回路１５の一方に入力する。期待値については後述する。
【００３１】
排他的論理和回路１５の他方の入力はＡＬＵ２０と接続されており、ＡＬＵ２０の演算結果とデータバス３７から読み出された期待値が一致するか否かを比較する。排他的論理和回路１５の出力は反転されるため（このような回路を一致回路という場合がある）、排他的論理和回路１５の出力は一致すれば１、一致しなければ０となる。例えば、期待値が８ビットであればビット単位で比較して１ビットでも一致しなければ、一致しないと判定する。
【００３２】
監視回路１９は、排他的論理和の判定結果が一致しないという判定結果の場合、加算器１４の内容を結果記憶部１８に記憶させる。結果記憶部１８は、電力供給をオフしてもデータが消えない不揮発メモリである。これにより、演算結果が一致しなかった検査パターンを特定することができる。また、結果記憶部１８には、検査パターンの初期値、及び、制御部１６により記憶された、最後の検査パターンが記憶されている。結果記憶部１８は、電源オフ後も記憶内容を保持するので、再起動後もＬＦＳＲは前回保持したＬＦＳＲの最後の検査パターン＋１から開始することが可能である。これにより、一連の検査パターンが長い場合など、検査に割り当てられた時間内に検査が一巡せずパターンの後半の検査がいつまでも実行されなくなることを防ぐことができる。
【００３３】
制御部は、疑似ランダムパターン生成器１１が生成する検査パターンを監視し、特定のビットパターンになると、疑似ランダムパターン生成器１１を停止させ、ゼロ設定部１７に全てのビットがゼロの検査パターン（＝ＡＬＬゼロの検査パターン）を生成させる。制御部は、ＡＬＬゼロの検査パターンを他の検査パターンと同様にＡＬＵ２０に実行させる。
【００３４】
なお、ＤＭＡＣ２６は、Ｉ／Ｏからの要求によりＩ／ＯからＲＡＭへ、ＣＰＵ２１からの要求によりＲＡＭからＩ／Ｏへ、ＣＰＵ２１を介することなくデータを転送する。また、本実施例では、ＲＯＭ１３から検査回路２００に期待値を読み出す。
【００３５】
ＩＮＴＣ２５は、タイマや周辺回路からの割り込みを受付、優先順位にしたがってＣＰＵ２１に割り込みを許可する割り込みコントローラである。例えば、サイクル時間毎に処理したいプログラムがある場合、プログラムがタイマに設定した時間毎にＩＮＴＣ２５に割り込み要求が入り、ＩＮＴＣ２５の調停後、ＣＰＵ２１はプログラムを実行することができる。
【００３６】
なお、Ｉ／Ｏ２４には、センサの信号をＡ／Ｄ変換するＡ／Ｄ変換器、他のマイコンと通信するための通信装置、アクチュエータ等が接続されている。
【００３７】
図５は、検査回路２００の動作を模式的に説明する図の一例である。ここではＡＬＵ２０は８ビットの演算器であるとする。疑似ランダムパターン生成器１１は、第１オペランド〜第ｎオペランドを１セットに生成するので、重複しない８×オペランド数のビット数の全ての（ゼロを除く）検査パターンを生成する。以下ではオペランド数は２つであるとする。よって、この場合のＬＦＳＲのＦＦは１６個である。
【００３８】
図の例では、１番上にゼロ設定部１７が設定したＡＬＬゼロの検査パターンが図示されている。その下の、“00000001”“00000001”、“11000010”“00001010”、が疑似ランダムパターン生成器１１が生成した検査パターンである。検査パターンは昇順や降順であるとは限らないが、同じサイクルでは（例えば、図３（ｂ）のシーケンシャルナンバが同じなら）同じ検査パターンを生成するので、図の例では一番最後のパターンの次が、ＡＬＬゼロの検査パターンになっている。
【００３９】
そして、ＲＯＭ１３には検査パターンが記憶されておらず期待値のみが記憶されている。しかし、ＲＯＭ１３には制御用のメインプログラムなどが記憶されているので、期待値はメインプログラムを阻害しないＲＯＭ１３の所定のアドレスに記憶されている。したがって、単に期待値アドレス（＝検査パターン）を読み出しアドレスとしても、検査回路２００は期待値を読み出すことができない。そこで、ＲＯＭ１３には、期待値の記憶アドレスを特定するためのアドレスオフセット値が記憶されている。
【００４０】
図６はアドレスオフセット値を説明するための図の一例である。図ではＲＯＭに記憶されているはずのアドレスオフセット値を省略している。例えば、メインプログラムをＲＯＭ１３の先頭アドレスから記憶したとすると、期待値はメインプログラムの最後のアドレス以降（メインプログラムに続いて、又は、ブランクや他のデータに続いて）に連続して記憶される。アドレスオフセット値は、このようにして記憶されている期待値の先頭アドレスを示す。
【００４１】
図５ではアドレスオフセット値を“Ａ０００”としている。したがって、アドレス“Ａ０００”に続いて２１６-１個の期待値が記憶されている。各期待値の記憶アドレスは、検査パターンに対応して定まる。例えば、図５の例では検査パターンが“0000000100000001”の期待値は、Ａ１０１に記憶されるが、アドレス“Ａ１０１”は「0000000100000001＋Ａ０００」と一致している。すなわち、オフセットアドレス“Ａ０００”に“0000000100000001”を加えたアドレスがＡ１０１である。このように期待値をアドレスオフセット値＋検査パターン（期待値アドレス）の読み出しアドレスに記憶しておくことで、検査パターンから期待値の読み出しアドレスを一意に特定することができる。
【００４２】
ここで、検査パターンが同じでも、ＡＬＵ２０における演算種類が異なれば演算結果も異なることが一般的と考えられる。このため、期待値は、１つの検査パターンに対し、加算器用、減算器用、乗算器用、除算器用、論理演算用、シフト用などの演算種類に応じて用意されている。なお、乗算はシフトと加算を組み合わせて、除算はシフト、加算及び減算を組み合わせて実行されるので、乗算器や除算器そのものを有していない場合がある。よって、乗算器用や除算器用とはこの演算を行った場合という意味である。
【００４３】
例えば、検査パターンが“0000000100000001”の場合、加算結果は“00000010”であるが、乗算結果は“0000000000000001”である。図５では、加算器用の期待値、…、乗算器用の期待値がＲＯＭ１３に図示されている。加算器用や減算器用の期待値は８ビットであり、乗算器用の期待値は１６ビットになる。一般に、情報処理装置１００はバイト単位又はワード単位（２バイト以上）でメモリにアクセスするので、１つのアドレスに全ての期待値が格納されない場合がある。このため、実際には、複数のアドレスに跨って１つの検査パターンに対する全ての演算種類用の期待値が記憶されている。例えば、バイト単位でアクセスする情報処理装置１００において、１つの検査パターンに対する期待値が４バイト必要であれば、検査パターン（＝期待値アドレス）から４バイト分が１つの１つの検査パターンに対する期待値である。このようにＲＯＭ１３に期待値が記憶されると、単に加算器１４が「期待値アドレス＋アドレスオフセット値」を算出しても、情報処理装置１００が検査パターンに対する期待値にアクセスできないので、加算器１４は「期待値アドレス＋アドレスオフセット値＋インクリメント値」のように読み出しアドレスの算出方法を調整する（例えば、４バイト分が１つの検査パターンの期待値の場合、インクリメント値を４にする）。こうすることで、期待値アドレスにより、一意に全ての演算種類の期待値を特定できる。
【００４４】
上記のように制御部１６は、疑似ランダムパターン生成器１１が生成する検査パターンが特定のビットパターンになると、ＡＬＵ２０に全てのビットがゼロの検査パターンをオペランドとして実行させる。このため、ＲＯＭ１３にはＡＬＬゼロの検査パターンに対応した期待値も記憶されている。このようにＡＬＬゼロの検査パターンを挿入し、期待値を用意しておくことで故障検出率を１００％にすることができる。
【００４５】
また、期待値には演算結果だけでなく、ステータスレジスタのフラグ状態を追加しておくとさらに有効である。ステータスレジスタにはキャリーフラグ（けた上がり）、ボローフラグ（けた下げ）、コンペアフラグ、ネガティブフラグ、ゼロフラグなどが記憶されている。これらのフラグの期待値と演算結果を比較することで故障の検出率が向上する。
【００４６】
なお、検査回路２００が検査を開始するタイミングは、例えば、ＩＧオンの直後の、ＣＰＵ２１がメインプログラムを実行する前、又は、メインプログラムの実行が開始された後の負荷が低下した状態などである。ＣＰＵ２１がメインプログラムを実行する前とすると、検査パターンの数が多い場合にメインプログラムの起動までに時間がかかってしまう。したがって、開発者等が検査の終了までの時間を計測しておき所定時間以上の場合は、ＣＰＵ２１がメインプログラムを実行する前でなく、メインプログラムの実行開始後に検査することが好ましい。
【００４７】
〔動作手順〕
図７は、検査回路２００の動作手順を説明する図の一例である。図７の手順は、ＩＧオンや＋Ｂなど情報処理装置１００が起動条件を満たしている状態で実行される。
【００４８】
まず、制御部１６はＣＰＵ負荷を監視しており、ＣＰＵ負荷が低下したか否かを判定している（Ｓ１０）。ＣＰＵ負荷の算出方法はいくつかあるが、例えば命令キュー３２に記憶された命令が所定値以下になった場合、制御部１６はＣＰＵ負荷が低下したと判定する。
【００４９】
ＣＰＵ負荷が低下した場合（Ｓ１０のＹｅｓ）、制御部１６は結果記憶部１８に記憶されている初期値又は最後の検査パターンを読み出す（Ｓ２０）。
【００５０】
制御部１６は読み出した検査パターンを疑似ランダムパターン生成器１１にセットする（Ｓ３０）。
【００５１】
疑似ランダムパターン生成器１１はセットされた次の検査パターンから、又は、最後に生成した次の検査パターンから検査パターンを生成する（Ｓ４０）。
【００５２】
制御部１６は疑似ランダムパターン生成器１１が生成した検査パターンにいくつかのオペコードを設定してＡＬＵ２０に実行させ、ＤＭＡＣ２６が期待値アドレスとアドレスオフセット値を加えた読み出しアドレスから期待値を読み出す（Ｓ５０）。
【００５３】
制御部１６は、期待値から演算種類に対応した部分を取り出し排他的論理和回路１５に出力する。これを、ＡＬＵ２０が演算結果を排他的論理和回路１５に出力する毎に行うことで、演算種類毎に期待値と演算結果が比較される（Ｓ６０）。
【００５４】
次に、ゼロ設定部１７は、検査パターンがＡＬＬゼロを挿入すべき特定のパターンであったか否かを判定する（Ｓ７０）。特定のパターンでない場合（Ｓ７０のＮｏ）、処理はステップＳ９０に進む。
【００５５】
特定のパターンであった場合（Ｓ７０のＹｅｓ）、制御部はゼロ設定部１７にＡＬＬゼロの検査パターンを生成させ、ＡＬＵ２０に実行させる（Ｓ８０）。この後、ステップＳ５０，６０が実行される。
【００５６】
制御部１６は、１つの検査パターンの検査毎にＣＰＵ負荷が増大したか否かを判定し（Ｓ９０）、ＣＰＵ負荷が高くなると検査を中断する。そして、疑似ランダムパターン生成器１１が最後に生成した検査パターンを結果記憶部１８に記憶する（Ｓ１００）。この後、制御部１６は、ＣＰＵ負荷が低下する毎に検査を実行する。
【００５７】
ＣＰＵ負荷が高くない場合（Ｓ９０のＮｏ）、処理はＳ４０に戻り、制御部は次の検査パターンによる検査を継続する。図７の処理では、検査パターンの１周期が終わっても検査が再開するが、決まった回数だけ１周期分の検査が終わったら、所定時間をおいて検査を再開してもよい。
【００５８】
以上説明したように、本実施例の情報処理装置１００は、１００％の故障検出率にてＡＬＵ２０を検査することができる。また、期待値のみを記憶するので記憶容量を低減でき、また、検査パターンから期待値の読み出しアドレスを生成するので、期待値と検査パターンを対応づけて記憶したり、期待値と検査パターンを対応づける仕組みが不要になる。
【実施例２】
【００５９】
本実施例では検査パターンをソフト的に利用して故障を検出可能な情報処理装置１００について説明する。
【００６０】
図８は、情報処理装置１００のハードウェア構成図の一例を示す。図８において図４と同一部の説明は省略する。本実施例の情報処理装置１００はソフト的に検査するため、検査回路２００の構成を簡易化できる。このため、検査回路２００は疑似ランダムパターン生成器１１と結果記憶部１８を有する。これらの機能は実施例１とほぼ同様である。また、ＲＯＭ１３にはメインプログラムの他、検査プログラムが記憶されている。検査プログラムは疑似ランダムパターン生成器１１が生成した検査パターンを用いてＡＬＵ２０を検査するプログラムである。
【００６１】
図９を用いて検査プログラムについて説明する。図９は、検査プログラムの機能を説明する図の一例である。ＣＰＵ２１が検査プログラムを実行することで検査引数処理部４１、ゼロ生成部４２、演算処理部４３、期待値読み出し部４５、及び、期待値比較部４４が得られる。
【００６２】
本実施例の疑似ランダムパターン生成器１１は、オペランドそのものでなく、オペランドを生成するための検査引数を生成する。検査引数処理部４１は、ソフト的に検査引数からオペランドを生成するので、検査引数は実施例１のように第１オペランドと第２オペランドそれぞれである必要がない。したがって、疑似ランダムパターン生成器１１が生成する検査パターンの桁数を少なくすることができる。
【００６３】
検査引数処理部４１は、例えば以下のようにして８ビットの第１オペランドと第２オペランドに相当する検査引数を生成する。
・検査引数を上位４ビットと下位４ビットにわけ、それぞれを下位４ビットとして上位ビットには４つの０で埋める
・検査引数を複製する
・検査引数に１等の決まった数を足してもう１つの検査引数を生成する
・検査引数を定数倍してもう１つの検査引数を生成する
一番上の例だと、”00000001”を２つに分けると”0000””0001”が得られ、４つのゼロビットを埋めることで、”00000000””00000001”が得られる。こうすることで、例えば加算する際の２つの変数が得られる。なお、実施例１と同様に疑似ランダムパターン生成器１１が２つの検査引数を生成しても何ら不都合はない。
【００６４】
演算処理部４３は、２つの変数に順次、ＡＬＵ２０の検査に必要な演算を行う。例えば、ＡＬＵ２０が加算と乗算が可能な場合、演算処理部４３は、加算した結果に対し乗算を行うなどの処理を行う。下記ではａとｂが検査引数から生成された２つの変数である。
ｙ＝ａ＋ｂ
ｚ＝ｙ×ｙ
演算処理部４３はこのようにして演算した演算結果を期待値比較部４４に出力する。先ほどの例では、ｙ＝00000000＋00000001
ｚ＝00000001×00000001
＝00000001  が得られる（期待値の桁数に応じて上位ビットは捨てる）。
【００６５】
そして、ＲＯＭ１３の期待値には、正しく演算された場合のｚの値のみが、期待値アドレス＋アドレスオフセット値で得られる読み取りアドレスに記憶されている。このため、加算回路用、乗算回路用などの演算種類毎の期待値をＲＯＭ１３に記憶しておく必要がないので、ＲＯＭ１３における期待値の記憶容量をさらに低減できる。なお、実際にはこのようなソースコードがコンパイルされるので、“＋”や“×”が、検査対象の回路を使用するオペコード（例えば、ＡＤＤやＭＵＬ）に変換されないおそれがある。このため、コンパイル時にＡＤＤやＭＵＬに変換することが実行速度等の点から好ましくなくても（最適化可能でも）、開発者は、“＋”や“×”がＡＤＤやＭＵＬに変換されるようにコンパイルを調整しておく。また、ｙ＝ａ＋ｂ  ｚ＝ｙ×ｙをアセンブリで記述することも有効である。
【００６６】
この他の演算種類の演算をＡＬＵ２０が可能な場合、それら全ての演算後の演算結果を期待値としてＲＯＭ１３に記憶しておけばよい。したがって、演算種類に関係なく期待値を１つにすることができる。
【００６７】
期待値読み出し部４５は、ＲＯＭ１３から期待値を読み出す。期待値読み出し部４５は、ＲＯＭ１３からアドレスオフセット値を読み出し、疑似ランダムパターン生成器１１が生成した検査引数を加えることで、読み出しアドレスを生成する。そして、ＲＯＭ１３の読み出しアドレスから読み出した期待値を期待値比較部４４に出力する。
【００６８】
また、ゼロ生成部４２は、疑似ランダムパターン生成器１１が生成した検査引数が特定のパターンの場合、ＡＬＬゼロの検査引数を演算処理部４３に送出する。ゼロ生成部４２はソフト的に上記のａとｂのどちらもゼロの検査引数を生成することができる。
【００６９】
期待値比較部４４は、演算結果と期待値を比較する。例えば、判定結果が一致しないという判定結果の場合、検査引数を結果記憶部１８に記憶させる。
【００７０】
また、期待値比較部４４に、予め特定の期待値の読み出しアドレスを登録しておくことも有効である。特定の期待値の読み出しアドレスは、情報処理装置１００にとって重要な機能の故障のおそれがあることが検出される可能性が高い検査引数の期待値が記憶されたアドレスである。検査プログラムは、その期待値と演算結果が一致しない場合、フェールセーフ処理を呼び出す。これにより、警報を吹鳴したり、外部に通報したり、情報処理装置１００をリセットするなどのフェイルセーフが可能になる。
【００７１】
以上のように、ソフト的に検査する場合、ソフトの柔軟性を利用して演算結果をさらに演算対象にすることでＲＯＭ１３の記憶容量を低減できる。しかしながら、加算結果は全ての検査パターンを網羅するは限らない。例えば、ａ＋ｂとｃ＋ｄの加算結果が同じになる場合がある。この場合、どちらの加算結果を用いても乗算結果は同じになるので、疑似ランダムパターン生成器１１が生成した検査引数が重複しない場合でも、全ての回路や素子を検査しているとは限らないおそれがある。このような検査引数の重複による故障検出率の低下は、演算種類が多いほど起こりうる。
【００７２】
このような不都合を低減するには、疑似ランダムパターン生成器１１が生成するビット数を多くして複製などにより生成される部分を少なくすること、全ての演算種類に１つの期待値とするのでなく、所定数の演算種類毎に期待値をＲＯＭ１３に記憶しておくこと（例えば、加算と乗算で１つの期待値、シフトと除算で１つの期待値をそれぞれ記憶しておく）等が有効である。後者の例では全ての演算種類の演算のうち中間結果を期待値と比較することになる。
【００７３】
図１０は、検査回路２００の動作手順を説明する図の一例である。検査プログラムはメインプログラムに比べて優先度が低い。ＣＰＵ２１やＣＰＵコアが複数ある場合、情報処理装置１００はメインプログラムを特定のＣＰＵやＣＰＵコアに割り当てて実行し、別のＣＰＵやＣＰＵコアに検査プログラムを割り当てることができる。また、１つのＣＰＵ２１をメインプログラムと検査プログラムが共用する場合は、スケジューラが優先度に応じてメインプログラムと検査プログラムをスケジューリングする。こうすることで、情報処理装置１００は、メインプログラムの実行を阻害せずに、検査プログラムを実行できる。
【００７４】
メインプログラムは、例えば情報処理装置１００にイベントが生じた時やタイマによる周期的なタイミングで１つ以上のタスクを生成する。または、重要度の低い（検査プログラムよりも低いか同程度）アイドルタスクなどは常に生成された状態になっている。タスクの生成時（タスクは生成により実行可能状態になる）に使用されるＡＰＩには優先度が指定可能なので、メインプログラムの各タスクにはタスク内容に応じた優先度が記述されている。生成されているタスクの状態や優先度などの情報はＴＣＢ(タスクコントロールブロック)に登録される。同様に、検査プログラムも例えば１つの検査を１つのタスクとして、実行可能なように記述されているが、検査プログラムのタスクの優先度は必ずメインプログラムのタスクよりも低い。
【００７５】
スケジューラは、１つのタスクの終了時やタイムスライスなどの決まった時間毎にタスクの情報が登録されているＴＣＢを参照して、実行可能状態のタスクの中から最も優先度の高いタスクを実行状態にする（このタスクのアドレスをプログラムカウンタ３１に設定する）。したがって、検査プログラムのタスクの優先度が最も高くなると、ＣＰＵ２１は検査プログラムの実行を開始する（Ｓ１１０）。それ以外の場合はメインプログラムを実行する（Ｓ１２０）。
【００７６】
まず、検査引数処理部４１は、再開時の検査パターンを読み出す（Ｓ２１０）。初めて、検査を開始する場合はＡＬＬゼロ以外の初期値であるが、初期値はゼロ以外であればどのような値でもよい。
【００７７】
前回の検査パターンが特定のパターンだった場合（Ｓ２２０のＹｅｓ)、ＡＬＬゼロを検査パターンにする必要があるため、ゼロ生成部４２はＡＬＬゼロを生成し検査パターンにする（Ｓ３００）。
【００７８】
前回の検査パターンが特定のパターンでなかった場合（Ｓ２２０のＮｏ)、検査引数処理部４１は、疑似ランダムパターン生成器１１に検査引数を要求する（Ｓ２３０）。この際、疑似ランダムパターン生成器１１に、読み出した検査引数をセットする。検査引数処理部４１は疑似ランダムパターン生成器１１が生成した検査引数を取得する（Ｓ２４０）。これにより、レジスタセット３４に検査引数が記憶される。
【００７９】
次に、演算処理部４３は一連の演算種類による演算を実行する（Ｓ２５０）。上記のように演算内容は検査プログラムに記述されている。演算結果はレジスタセット３５に記憶される。
【００８０】
次に、期待値読み出し部４５は、アドレスオフセット値をＲＯＭ１３から読み出し、検査引数に加算する（Ｓ２６０）。期待値読み出し部４５は、加算した結果を読み出しアドレスに指定して、ＲＯＭ１３から期待値を読み出す（Ｓ２７０）。期待値はレジスタセットに記憶される。
【００８１】
次に、期待値比較部４４は、レジスタセットに記憶されている期待値と演算結果を比較する（Ｓ２８０）。すなわち、比較は１回でよい。
【００８２】
なお、検査引数処理部４１は検査引数から変数などを生成した後、検査パターンを結果記憶部１８に記憶しておく（Ｓ２９０)。
【００８３】
ここまでの処理が終了すると、比較結果に異常がなければスケジューラが起動し、メインプログラム又は検査プログラムが実行される。比較結果に異常があれば、メインプログラムとフェールセーフ処理の優先順位に応じて処理されるタスクが決まる。  
以上説明したように、本実施例の情報処理装置１００は、演算の引数に別の演算の演算結果を利用することでＲＯＭ１３に記憶しておく期待値の記憶容量を低減できる。
【実施例３】
【００８４】
実施例１，２では、期待値として正しい演算結果をＲＯＭ１３に記憶していたが、本実施例では期待値として検査パターンを用いた演算が正しいか否かをＲＯＭ１３に記憶する情報処理装置１００について説明する。ＲＯＭ１３に記憶するのは正しいか否かのフラグでよいので記憶容量を極めて低減できる。
【００８５】
図１１は、検査方法を模式的に説明する図の一例である。疑似ランダムパターン生成器１１はこれまでと同様、ランダムなパターン（実施例１，２と区別するためランダムパターンという）を生成する。このとき、本実施例の情報処理装置１００はランダムパターンの一部を演算結果とみなすことに特徴の一つがある。例えば、図の例で”000000010000000000000001”というランダムパターンが生成されると、情報処理装置１００は”00000001”を検査引数、” 0000000000000001”を演算結果とみなす。そして、実施例２と同様に”00000001”から変数を２つ作って、例えば加算を行いその加算結果を利用して乗算を行う。ＡＬＵ２０が故障していなければ、演算結果は、” 0000000000000001”となるはずである。すると上記のランダムパターンの演算結果が正しいものであるので、開発者は予めＲＯＭ１３にこのランダムパターンの期待値として”１”を記憶しておく。
【００８６】
情報処理装置１００は実際の演算結果と、ランダムパターンの演算結果を比較して一致すると判定すると”１”を生成し、一致しないと判定すると”０”を生成する（以下、この比較結果をパターン比較結果という）。期待値は”１”なので、このランダムパターンを用いた検査では、パターン比較結果が”１”なら、故障していないことがわかる。
【００８７】
一方、”11000010000011110010100”というランダムパターンが生成されると、情報処理装置１００は” 11000010”を検査引数、” 000011110010100”を演算結果とみなす。この検査引数に同様の演算を行ってもランダムパターンの演算結果部分と一致しないので、開発者は予めＲＯＭ１３にこのランダムパターンの期待値として”０”を記憶しておく。
【００８８】
情報処理装置１００は実際の演算結果と、ランダムパターンの演算結果を比較して一致すると判定するとパターン比較結果”１”を生成し、一致しないと判定すると”０”を生成する。期待値は”０”なので、このランダムパターンを用いた検査では、パターン比較結果が”０”なら、故障していないことがわかる。
【００８９】
このように、ランダムパターンの検査引数と演算結果の組み合わせが正解か不正解かを予めＲＯＭ１３に記憶しておくことで、ＲＯＭ１３の期待値の記憶容量を極めて少なくできる。実際には、検査引数と演算結果の組み合わせは多くの場合、一致ないという期待値”０”になる。このため、一致しないことがＡＬＵの故障によるものか、正しい演算によるものかを、期待値と、パターン比較結果との比較結果から判別できない。
【００９０】
しかし、全てのランダムパターンのうち、必ず１つ以上に検査引数による演算と演算結果部分の組み合わせが一致するランダムパターンが存在する。一致すべき組合せで一致する限り、一致するべきでない組合せで実際の演算結果とランダムパターンの演算結果部分が一致しないというパターン比較結果が得られるのであれば、検査結果としては有効な有意性を持つといえる。ただし、一致するべきでない組合せでのみ検出される故障については検出できないので、この分、故障検出率は低下する。
【００９１】
図１２（ａ）は、検査プログラムの機能を説明する図の一例である。図１２において図９と同一部の説明は省略する。本実施例の検査プログラムは、新たに結果比較部４６を有する。結果比較部４６は、演算処理部４３が演算した演算結果と疑似ランダムパターン生成器１１が生成したランダムパターンの演算結果部分を全てのビットで比較して、一致すれば“１”を、一致しなければ“０”を生成する。
【００９２】
本実施例の期待値比較部４４は、パターン比較結果と、期待値読み出し部４５が読み出した”１””０”の期待値を比較して、一致するか否かを判定する。期待値の比較結果に基づくフェールセーフ処理については実施例２と同様である。
【００９３】
なお、ＲＯＭ１３には、「アドレスオフセット値＋ランダムパターン」の読み出しアドレスに、該ランダムパターンの検査引数と演算結果の組が正しいか否かを示す期待値が記憶されている。期待値は上記のとおり“１”が検査引数による演算が演算結果部分と一致することを、“０”が一致しないことを示すものとする。
【００９４】
ランダムパターンに演算結果が含まれるためランダムパターンのビット数を多くする必要がある。しかし、ほとんどの期待値は正しくないことを示す“０”であるので、検査引数のビット数を少なくしても、ほとんどの期待値が正しくないことを示す“０”になることに変わりはない。このため、ランダムパターンの桁数を少なくするために、検査引数の桁を低減してもよい。
【００９５】
図１２（ｂ）は、期待値の別の一例を示す図である。図１２（ａ）では期待値に正しいか正しくないかを示す“１”“０”を格納したが、期待値を桁番号とすることもできる。この桁番号は、ランダムパターンの演算結果のうち、正しい演算結果が立つビットの位置を上位又は下位からの番号で示す。例えば、”000000010000000000000001”というランダムパターンでは、ランダムパターンの演算結果部分の全てのビットで正しい演算結果となるので期待値は例えば「ALL」となる。また、”11000010000011110010100”というランダムパターンでは、正しい演算結果が得られるビットが、例えば下位から１桁目，３桁目，８桁目，１２桁目、の場合、期待値は“１，３，８，１２”となる。
【００９６】
このような期待値の場合、結果比較部４６は、演算処理部４３が演算した演算結果と疑似ランダムパターン生成器１１が生成した演算結果をビット毎に比較して、一致した桁番号を期待値比較部４４に出力する。
【００９７】
期待値比較部４４は、結果比較部４６が出力した桁番号と、期待値読み出し部４５が読み出した期待値（桁番号）が一致するか否かを比較する。一致すれば、ＡＬＵ２０は故障していないことが分かる。
【００９８】
疑似ランダムパターン生成器１１が生成したランダムパターンの検算結果はほとんどが不正確でもビット単位なら、演算処理部４３の演算結果と一致するビットがある。このため、ランダムパターンのどのビットで演算結果が一致するかを検証することで、疑似ランダムパターン生成器１１が演算結果を生成する場合でも、故障を検出しやすくなる。
【００９９】
図１３は、検査プログラムの動作手順を説明する図の一例である。図１３において図１０と同様のステップについては説明を省略する。
【０１００】
検査プログラムのタスクが開始されると、検査引数処理部４１は、再開時のランダムパターンを読み出す（Ｓ２１２）。
【０１０１】
前回のランダムパターンが特定のパターンだった場合（Ｓ２２０のＹｅｓ)、ゼロ生成部４２はALLゼロを生成し検査パターンにする（Ｓ３００）。
【０１０２】
前回のランダムパターンが特定のパターンでなかった場合（Ｓ２２０のＮｏ)、検査引数処理部４１は、疑似ランダムパターン生成器１１にランダムパターンを要求する（Ｓ２３２）。
【０１０３】
演算処理部４３はランダムパターンから検査引数だけを取り出す（Ｓ２４２）。そしてＡＬＵは一連の演算を実行する（Ｓ２５０）。そして、結果比較部４６は、ランダムパターンから演算結果を取り出し、演算処理部４３の演算結果と比較する（Ｓ２５５）。
【０１０４】
次に、期待値読み出し部４５は、アドレスオフセット値をＲＯＭ１３から読み出し、ランダムパターンに加算する（Ｓ２６２）。期待値読み出し部４５は、加算した結果を読み出しアドレスに指定して、ＲＯＭ１３から期待値を読み出す（Ｓ２７２）。
【０１０５】
次に、期待値比較部４４は、レジスタセットに記憶されている期待値とパターン比較結果を比較する（Ｓ２８２）。
【０１０６】
検査引数処理部４１は検査引数から変数などを生成した後、検査パターンを結果記憶部１８に記憶しておく（Ｓ２９２)。
【０１０７】
〔ハード的な実現方法〕
本実施例では、ソフト的に検査する方法について説明したが、ハード的に検査することも可能である。
【０１０８】
図１４は、検査回路２００の構成図の一例を示す。図１４において図４と同一部の説明は省略する。疑似ランダムパターン生成器１１は、第1、第２オペランドと演算結果を含むランダムパターンを生成する。制御部１６はランダムパターンのうち第1、第２オペランドをＡＬＵ２０に送出して演算を実行させる。また、制御部１６はランダムパターンの演算結果部分を１段目の排他的論理和回路１５ａに出力するので、ＡＬＵ２０の演算結果とランダムパターンの演算結果が１段目の排他的論理和回路１５ａで比較される。この比較結果は２段目の排他的論理和回路１５ｂに出力される。
【０１０９】
加算器１４はアドレスオフセット値とランダムパターンを加算した読み出しアドレスをＤＭＡＣ２６に出力するので、ＲＯＭ１３から期待値が読み出され２段目の排他的論理和回路１５ｂに出力される。したがって、２段目の排他的論理和回路１５ｂはパターン比較結果と期待値を比較することができる。このように、ハード的にも同様の検査が可能である。
【０１１０】
以上説明したように、本実施例の情報処理装置１００は極めて少ない記憶容量で、ＡＬＵ２０の故障を検出することができる。
【符号の説明】
【０１１１】
１１      疑似ランダムパターン生成器
１２      検査対象ＡＬＵ
１３      ＲＯＭ
１４      加算器
１５      排他的論理和回路
２０      ＡＬＵ
１００    情報処理装置
２００    検査回路
【図１】
2012248022.tif 000003
【図２】
2012248022.tif 000004
【図３】
2012248022.tif 000005
【図４】
2012248022.tif 000006
【図５】
2012248022.tif 000007
【図６】
2012248022.tif 000008
【図７】
2012248022.tif 000009
【図８】
2012248022.tif 000010
【図９】
2012248022.tif 000011
【図１０】
2012248022.tif 000012
【図１１】
2012248022.tif 000013
【図１２】
2012248022.tif 000014
【図１３】
2012248022.tif 000015
【図１４】
2012248022.tif 000016