(57)【要約】      （修正有）【課題】高い故障検出率を低コストで実現する情報処理装置、ウォッチドッグタイマ及び異常検出方法を提供する。【解決手段】複数の演算器を有するプロセッサ１１と、各演算器を選択的に作動させる１つ以上の関数が記述されたプログラムを記憶するプログラム記憶手段と、演算器が関数を実行した演算結果を記憶する第一の記憶手段４１と、演算器が関数を正常に実行して得られる期待値を記憶する第二の記憶手段４２と、演算結果と期待値を比較して演算器の異常を検出する第一の異常検出手段３２と、演算結果と期待値の比較結果を記憶する演算器に関連付けられた第三の記憶手段４３と、を有する。【選択図】図１
2012059127.tif 000002
【特許請求の範囲】
【請求項１】
複数の演算器を有するプロセッサと、
各演算器を選択的に作動させる関数が記述されたプログラムを記憶するプログラム記憶手段と、
前記演算器による前記関数の演算結果を記憶する第一の記憶手段と、
前記演算器が前記関数を正常に実行して得られる期待値を記憶する第二の記憶手段と、
前記演算結果と前記期待値を比較して前記演算器の異常を検出する第一の異常検出手段と、
前記演算結果と前記期待値の比較結果を記憶する前記演算器に関連付けられた第三の記憶手段と、
を有することを特徴とする情報処理装置。
【請求項２】
前記演算器は、ＡＬＵ、ＭＰＵ又はＦＰＵである、ことを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記第一の異常検出手段は、前記演算結果と前記期待値が一致しない場合、前記第三の記憶手段に、前記演算結果を出力した前記演算器の異常が検出されたという比較結果を記憶する、ことを特徴とする請求項１又は２記載の情報処理装置。
【請求項４】
前記第一の異常検出手段は、前記演算結果と前記期待値が一致した場合、前記第三の記憶手段に正常であるという比較結果を記憶する、
ことを特徴とする請求項１〜３いずれか１項記載の情報処理装置。
【請求項５】
前記プロセッサは、前記演算結果を出力した際の時刻情報を、前記比較結果と共に前記第三の記憶手段に記憶する、
ことを特徴とする請求項１〜４いずれか１項記載の情報処理装置。
【請求項６】
前記第一の異常検出手段が出力した、各演算器による前記演算結果と前記期待値の比較結果を受け付ける第二の異常検出手段と、
所定時間の経過を計測する時間計測手段と、を有し、
前記第二の異常検出手段は、前記時間計測手段が所定の時間を計測するまでに、前記演算結果と前記期待値が一致したという比較結果を各演算器から得られない場合、複数の前記演算器のいずれかに異常があることを検出する、
ことを特徴とする請求項１〜５いずれか１項記載の情報処理装置。
【請求項７】
複数の各演算器の２つ以上が、同時並行的に前記関数を実行する、
ことを特徴とする請求項１〜６いずれか１項記載の情報処理装置。
【請求項８】
複数の各演算器は、時間的に重複することなく個別に前記関数を実行する、
ことを特徴とする請求項１〜６いずれか１項記載の情報処理装置。
【請求項９】
前記プログラムは、当該情報処理装置が装置を制御するために実行するアプリケーションソフトの一部として記述されているか、又は、プラットフォームの一部として記述されている、
ことを特徴とする請求項１〜８いずれか１項記載の情報処理装置。
【請求項１０】
前記第二の異常検出手段と前記時間計測手段は、ウォッチドッグタイマ内に配置されている、
ことを特徴とする請求項６項記載の情報処理装置。
【請求項１１】
前記異常検出手段は、前記演算結果と前記期待値が一致しない場合、前記プロセッサに割込みする、ことを特徴とする請求項３記載の情報処理装置。
【請求項１２】
前記プロセッサは、前記第一の異常検出手段からの割込み要求により実行中の処理を中断して、異常対応処理を開始する、ことを特徴とする請求項１１記載の情報処理装置。
【請求項１３】
前記プロセッサは、前記第一の異常検出手段からの割込み要求に対し実行中の処理を継続する、ことを特徴とする請求項１１記載の情報処理装置。
【請求項１４】
前記プロセッサは、前記関数を実行する前記演算器を所定の方法で選別し、
前記関数を実行しない前記演算器の異常を検出する前記第一の異常検出手段の出力を無効化する、
ことを特徴とする請求項１〜１３いずれか１項記載の情報処理装置。
【請求項１５】
複数の演算器を有するプロセッサと、バスを介して接続されるウォッチドッグタイマであって、
前記プロセッサがプログラム記憶手段から演算器を選択的に作動させる関数が記述されたプログラムを読み出し、前記演算器に前記関数を実行させて得た演算結果を記憶させる第一の記憶手段と、
前記演算器が前記関数を正常に実行して得られる期待値を記憶する第二の記憶手段と、
前記演算結果と前記期待値を比較して前記演算器の異常を検出する第一の異常検出手段と、
前記演算結果と前記期待値の比較結果を記憶する前記演算器に関連付けられた第三の記憶手段と、
を有することを特徴とするウォッチドッグタイマ。
【請求項１６】
複数の演算器を有するプロセッサと、各演算器を選択的に作動させる関数が記述されたプログラムを記憶するプログラム記憶手段と、を有する情報処理装置の異常検出方法であって、
前記演算器が前記関数を実行した演算結果を第一の記憶手段に記憶するステップと、
前記演算器が前記関数を正常に実行して得られる期待値を第二の記憶手段に記憶するステップと、
第一の異常検出手段が、前記演算結果と前記期待値を比較して前記演算器の異常を検出するステップと、
前記演算結果と前記期待値の比較結果を前記演算器に関連付けられた第三の記憶手段に記憶するステップと、
を有することを特徴とする異常検出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の演算器を備えた情報処理装置等に関し、演算器の異常を検出可能な情報処理装置、ウォッチドッグタイマ及び異常検出方法に関する。
【背景技術】
【０００２】
製品の安全性能を向上させる機運が高まっており、従来、不具合が比較的広範囲に影響する産業分野でのみ用いられていた機能安全規格が車両にも適用されることが予定されている。機能安全規格は、安全な製品を開発するために有効と考えられる開発手法や管理方式の標準体系であり、ＩＥＣ６１５０８／ＩＳＯ２６２６２等に規格化されている。機能安全規格への要求に対する施策の１つは、マイコン自体の故障検出率を向上させることである。
【０００３】
一般的な故障検出手法としては従来から以下の手法が用いられている。
（１）故障検出回路の追加（ハード処理）
例えば、ロックステップ機能を備えたデュアルＣＰＵのように、リダンダンシ回路を追加する手法がある。このようなデュアルＣＰＵは、各ＣＰＵが同一のコードをそれぞれ実行する冗長処理を実装し、両者の結果をマッチングすることによりデュアルＣＰＵ又は周辺の回路が正常であることを監視する。
（２）自己診断プログラム（ソフト処理）
ＣＰＵがアプリケーションとは別に自己診断プログラムを周期的に実行し、その値が期待値と一致することにより、ＣＰＵ又は周辺の回路が正常であることを監視する。
（３）ウォッチドッグタイマ監視（ソフト＋ハード処理）
ＣＰＵが実行するプログラムが周期的にタイマをリセットすることで、タイマがオーバーフローしない状態を維持して、プログラムが暴走していないことを監視する。
【０００４】
ウォッチドッグタイマの一例として、起動された複数のプロセッサエレメント（ＰＥ）がタイマをリセットする技術が考案されている（例えば、特許文献１参照。）。特許文献１には、各ＰＥが演算の終了によりタイマをリセットするが、異常により演算が終了しない場合はタイマがリセットされないのでオーバーフローが発生し、異常を検出することができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開昭６１−５２７５０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記（１）〜（３）には以下のような問題がある。
（１）完全にハード的に異常検出するので故障検出率は期待できるが、冗長回路を搭載するためにコスト増となってしまう。
（２）故障検出の全て（実行、比較、異常検出）をソフト的に実行するため（ＣＰＵがプログラムを実行するため）、故障検出率を向上させるためには、充分なスペックのＣＰＵ及びメモリリソースを用意する必要が生じる。このため、単に車両制御用のアプリケーションを実行する場合よりも高いスペックのＣＰＵや大容量のメモリが必要になりコスト増となってしまう。
（３）回路やＣＰＵリソースに付加する要素はほとんど必要ないが、プログラムが暴走してもタイマをリセットする場合があるなど故障検出率が不十分であるといわれている。また、特にＣＰＵの個々の回路ブロックの故障を検出できないという致命的な欠陥がある。例えば、特許文献１においても、タイマがオーバーフローした場合に、どのＰＥに異常が生じたのかを解析できない。
【０００７】
このように、従来の故障検出手法では、高い故障検出率を低コストで実現する最適な手法が存在しない。機能安全規格を満たすことは車両の商品価値向上に寄与しにくいので、機能安全規格を満たすことによるコスト増は可能な限り抑制しないと車載することが困難である。
【０００８】
本発明は、上記課題に鑑み、高い故障検出率を低コストで実現する情報処理装置、ウォッチドッグタイマ及び異常検出方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記課題に鑑み、本発明は、複数の演算器を有するプロセッサと、各演算器を選択的に作動させる１つ以上の関数が記述されたプログラムを記憶するプログラム記憶手段と、前記演算器が前記関数を実行した演算結果を記憶する第一の記憶手段と、前記演算器が前記関数を正常に実行して得られる期待値を記憶する第二の記憶手段と、前記演算結果と前記期待値を比較して前記演算器の異常を検出する第一の異常検出手段と、前記演算結果と前記期待値の比較結果を記憶する前記演算器に関連付けられた第三の記憶手段と、を有することを特徴とする情報処理装置を提供する。
【発明の効果】
【００１０】
高い故障検出率を低コストで実現する情報処理装置、ウォッチドッグタイマ及び異常検出方法を提供することができる。
【図面の簡単な説明】
【００１１】
【図１】ＷＤＴの概略を説明する図の一例である。
【図２】ＷＤＴのマイコンへの実装例の一例を示す図である。
【図３】ＷＤＴと自己診断ソフトの融合を説明する図の一例である。
【図４】ＣＰＵの回路ブロック図の一例である。
【図５】ＥＤＴの機能ブロック図の一例である。
【図６】自己診断ソフトの初期化処理の手順を示すフローチャート図の一例である。
【図７】演算器毎に診断する自己診断ソフトの診断処理の手順を示すフローチャート図の一例である。
【図８】データフローの一例を示す図である。
【図９】自己診断ソフトの診断処理の手順を示すフローチャート図の一例である。
【図１０】データフローの一例を示す図である。
【図１１】アイドルタスク毎に診断する演算器の数と演算器を決定して、個別に演算器を診断する手順を示すフローチャート図の一例である。
【図１２】異常が検出された場合にキーコード履歴レジスタに記録される履歴の一例を示す図である。
【図１３】キー比較部が割込み信号を出力した場合のCPUの処理手順を示すフローチャート図の一例である。
【図１４】キーコード履歴レジスタに記録される履歴の一例を示す図である。
【発明を実施するための形態】
【００１２】
以下、本発明を実施するための形態について図面を参照しながら説明する。
図１は、本実施形態のＷＤＴの概略を説明する図の一例である。
（ａ）ＣＰＵ１１は、ＳＨ（Shifter）、ALU（Arithmetic  Logic  Unit）、MUL（Multiplier）、ＦＰＵ（Flaoting  Point  Unit）等のいくつかの演算器を有し、選択的に演算器を使用することで演算結果が得られる関数を実行する。
（ｂ）演算結果は関数毎に定められたキーコード入力レジスタ４１に入力される。各キーコード入力レジスタ４１は、正常値が予め設定されているキーコード設定レジスタ４２と併設されている。
（ｃ）キー比較部(比較器)３２はキーコード入力レジスタ４１とキーコード設定レジスタ４２の値を比較し、比較結果に応じてＡＮＤ回路３３又はキーコード履歴レジスタ４３に信号を出力する。
（ｄ）値が一致しない場合、キー比較部３２はキーコード履歴レジスタ４３に一致しないことを示す履歴を記憶する。
（ｅ）全てのキー比較部３２が一致するという信号をＡＮＤ回路３３に出力すると、フリーランしているフリーランカウンタ３８がクリアされる。
【００１３】
このようなＷＤＴ１６であれば、いくつかのレジスタと付随する回路があれば実現でき、リダンタンシ回路のように大規模なハードを搭載する必要がないので、コスト増を抑制できる。
【００１４】
また、ＣＰＵ１１が実行する関数として従来の自己診断ソフトを利用しても、本実施形態ではＣＰＵ１１が期待値の読み出し、及び、期待値マッチングを実行する必要がないので、ＣＰＵ１１のソフト処理を最小限に抑制でき、ＣＰＵ１１の高スペック化やメモリ容量の増大を抑制できる。
【００１５】
また、故障検出をソフトで実現するので、ＣＰＵ１１の構造（例えばパイプラインアーキテクト）に依存せず自己診断ソフトを流用できる。よって多くの車種で同じ手法を用いることでコスト増も抑制しやすくなる。
【００１６】
〔ＷＤＴ１６の実装例〕
図２は、ＷＤＴ１６のマイコン１００への実装例の一例を示す。マイコン１００は例えばＥＣＵ（electronic  control  unit）と称され、各種の車載装置を制御するために用いられる。マイコン１００は、システムバス１９に接続されたＣＰＵ１１、ＲＯＭ１２、ＲＡＭ１３及びＩＮＴＣ（割込みコントローラ）１４、Ｉ／Ｏバス２０に接続されたＷＤＴ１６及びＩ／Ｏ１７、並びに、システムバス１９とＩ／Ｏバス２０に接続されたＢＲＧ（バスブリッジ）１５を有する。
【００１７】
ＲＯＭ１２には、このマイコン１００が制御のために実行するアプリケーションプログラムが記憶されている。ＯＳやデバイスドライバ（プラットフォーム）も記憶されている。アプリケーションプログラムは、優先度が高いメインタスクと優先度が低いアイドルタスクを有する場合がある（２つのタスクで１つのプログラムである）。
【００１８】
マイコン１００は、一般的に、イベントが発生したり、メインタスクのタイミングが到来するとメインタスクを開始し、優先度が高いメインタスクが終了すると、引き続き優先度が低いアイドルタスクを実行する。アイドルタスクは、メインタスクが実行されていない場合に、レジスタチェック、フェールセーフ処理、又は、無限ループによるメインタスクの待ち状態等を提供するタスクである。本実施形態においてもアイドルタスクにより、自己診断のためのタスクを実行する。以下、メインタスクを通常タスク、自己診断ソフトが実行されるタスクをアイドルタスクとして説明するが、自己診断ソフトをアプリケーションプログラムとは別に用意することもできるし、プラットフォームの一部として実装することもできる。
【００１９】
ＲＡＭ１３はＣＰＵ１１がアプリケーションプログラムを実行する際の作業メモリであり、ＩＮＴＣ１４は、ＷＤＴ１６や他の周辺機器（タイマ、センサ、他のＥＣＵ等）からの割込み要因を調停して、ＣＰＵ１１に割込み要求する。ＢＲＧ１５は、システムバス１９とＩ／Ｏバス２０の間で相互に周波数や電圧値などを変換する。Ｉ／Ｏ１７はマイコン１００と外部の機器を接続するインタフェースであり、例えば、各種のアクチュエータ、センサ、スイッチ等が接続される。
【００２０】
ＷＤＴ１６は、何らかのクロックソースに基づきカウントアップするタイマであり、ある一定値に到達した時に、または、カウントダウンしてカウンタがゼロになった時に（以下、いずれの場合も単に「オーバーフロー」という）、ＣＰＵ１１に割込み信号を出力する（ａ）。これによりＣＰＵ１１は所定の処理を実行することができる。また、ＷＤＴ１６は、タイマがオーバーフローした際に、外部出力信号を活性化して他のＥＣＵ等に通知することもできるし（ｂ）、Ｒｅｓｅｔ１８にマイコン１００の内部のリセットを要求することもできる（ｃ）。
【００２１】
異常がないという前提では、ＣＰＵ１１が実行するソフト処理によりＷＤＴ１６のタイマがオーバーフローする前にクリアされることが期待されている。すなわち、ソフトウェアが暴走した場合、ＷＤＴ１６のタイマもクリアされないと仮定して、タイマがオーバーフローしないことでソフトウェアが暴走していない(＝正常であると)とみなす。
【００２２】
なお、ＣＰＵ１１からＷＤＴ１６へのアクセスは、システムバス１９・ＢＲＧ１５、Ｉ／Ｏバス２０、ＷＤＴ１６の順である。逆にＷＤＴ１６からＣＰＵ１１へのアクセスは、ＩＮＴＣ１４・ＣＰＵ１１の順となる。
【００２３】
〔本実施形態のＷＤＴの概念〕
本実施形態のＷＤＴ１６は、ＷＤＴ１６と自己診断ソフトを融合させたというべき構成を備える。図３は、ＷＤＴ１６と自己診断ソフトの融合を説明する図の一例である。
【００２４】
まず、図３の左の従来のＷＤＴ１６について説明する。上記のように、ＩＮＴＣ１４が例えば周期的にＣＰＵ１１に割込みすると、ＣＰＵ１１は通常タスクを実行する。ＣＰＵ１１が通常タスクを実行している間、ＷＤＴ１６のタイマはカウントアップを継続している。
【００２５】
ＣＰＵ１１が通常タスクの実行を終了すると、続いてアイドルタスクを実行するが、このアイドルタスクにＷＤＴ１６のタイマをクリアする処理が含まれている。よって、ＣＰＵ１１がアイドルタスクを実行することでＷＤＴ１６のタイマをクリアする。クリアの際、ＷＤＴ１６はノイズなどをＣＰＵ１１からのクリア信号と誤認しないように、例えばコードなどでＣＰＵ１１を認証する。ＷＤＴ１６はＣＰＵ１１を認証すると、タイマをクリアする。
【００２６】
次に、図３の右の従来の自己診断ソフトについて説明する。こちらも、ＩＮＴＣ１４が例えば周期的にＣＰＵ１１に割込みをかけると、ＣＰＵ１１は通常タスクを実行する。ＣＰＵ１１が通常タスクの実行を終了すると、続いてアイドルタスクを実行するが、このアイドルタスクに、自己診断のための演算処理、期待値取得及び結果比較の処理が含まれている。ＣＰＵ１１は、演算処理、期待値取得及び結果比較を実行し、比較結果が一致しないと判定すると、予め決められた閉塞処理を実行する。
【００２７】
本実施形態のＷＤＴ１６は、ＷＤＴ１６と自己診断ソフトによる異常検出を融合しているということができる。すなわち、
ＷＤＴとして）  ＩＮＴＣ１４が例えば周期的にＣＰＵ１１に割込みをかけると、ＣＰＵ１１は通常タスクを実行する。ＣＰＵ１１が通常タスクを実行している間、ＷＤＴ１６のタイマはカウントアップを継続している。
【００２８】
自己診断ソフトとして）  ＣＰＵ１１が通常タスクの実行を終了すると、続いてアイドルタスクを実行するが、このアイドルタスクに演算処理及びキーコード入力の処理が含まれている。期待値取得及び結果比較の処理は含まれないが、従来の自己診断ソフトをそのまま又は一部を変更するのみで利用できる。
【００２９】
ＷＤＴとして）  ＷＤＴ１６は、キーコード入力を受け付け、ＷＤＴ１６は予め設定されているキーコードと入力されたキーコードを比較する。この比較処理は従来の認証処理に近く、ＷＤＴ１６の基本機能に大きな変更はない。
【００３０】
このように、ＷＤＴ１６は、ＷＤＴ１６と自己診断ソフトを適切に変更して融合することで、コスト増を抑制して柔軟な異常検出を可能にする。また、変更箇所も最小限なので実装も容易である。
【００３１】
〔構成〕
図４は、ＣＰＵ１１の回路ブロック図の一例を示す。ＣＰＵ１１は、ＩＦＵ（Instruction  Fetch  Unit）２１、ＤＥＣ（DECoder）２２、ＲＦ（Register  Fetch）２３、ＲＥＧ（REGister）２４、ＬＳＵ（Load  Store  Unit）２５、ＳＨ２６、ＡＬＵ２７、ＭＵＬ２８及びＦＰＵ２９を有する。
【００３２】
これら各回路は一般的な機能を提供するものでありＷＤＴ１６に対応するための特別なハードウェアは必要としない。ＩＦＵ２１は、プログラムカウンタが示すアドレスの命令をシステムバス１９を介してＲＯＭ１２から読み出す。ＤＥＣ２２は、読み出された命令からオペコードとオペランドを取り出し、オペコードのビット列に応じて演算の内容を決定する。これによりＣＰＵ１１が使用する演算器も決定される。
【００３３】
ＲＦ２３は、演算がレジスタに格納されているデータを必要とする場合にＲＥＧ２４に格納されたデータを演算器に提供する。ＬＳＵ２５は、所定のアドレッシングモードとオペランドで決まるアドレスのデータをシステムバス１９を介しＲＯＭ１２、ＲＡＭ１３又はＢＲＧから読み出しＲＥＧ２４に格納し、又は、ＲＥＧ２４から読み出したデータをＲＡＭ１３又はＢＲＧ１５に記憶する。
【００３４】
ＳＨ２６、ＡＬＵ２７、ＭＵＬ２８及びＦＰＵ２９が演算器の例である。ＳＨ２６は、命令が定めるビット単位で右又は左にデータを算術シフト又は論理シフトする。ＡＬＵ２７は、命令に応じて、ＲＥＧ２４に格納された２つのデータ同士を、加算、減算、乗算、除算し、又は、ＲＥＧ２４に格納されているデータにシフト演算を行う。ＭＵＬ２８はＲＥＧ２４に格納されている２つのデータ同士を乗算する。ＦＰＵ２９は、ＲＥＧ２４に記憶されたデータに浮動小数点演算を施す。演算器による演算結果はＲＥＧ２４に格納され、必要であれば再度の演算に提供され、その後、ストア命令によってＬＳＵ２５によりＲＡＭ１３等に記憶される。
【００３５】
自己診断ソフトには、各演算器のみを１回以上使用するいくつかの関数が記述されている。よって、各関数は各演算器に対応している。ＩＦＵ２１が読み込む命令はコンパイラが最適化したものなので、コンパイラが各演算器のみを１回以上使用するオブジェクトコードを生成するように、ソースコードが記述されている。
【００３６】
図５は、ＷＤＴ１６の機能ブロック図の一例を示す。まず、ＷＤＴ１６は、従来のＷＤＴ１６と同様に、クロックセレクトレジスタ４０、クロックセレクタ３９、フリーランカウンタ３８、監視周期設定レジスタ３６、カウンタ比較部３０、及び、閉塞処理部３５を有する。クロックセレクトレジスタ４０はＩ／Ｏバス２０に接続されており、入力ソース（クロック）の選択値が設定される。入力ソースは周波数が異なる複数のクロックなので、入力ソースを選択することで、フリーランカウンタ３８がカウントアップする時間間隔を調整することができる。クロックセレクタ３９は、クロックセレクトレジスタ４０の選択値に応じて入力ソースを選択的に通過させる。なお、同様の構成は、１つの入力ソースと分周器によっても実現できる。フリーランカウンタ３８は、３２ｂｉｔのカウント値を有し、クロックセレクタ３９が出力するパルスをカウントアップする。
【００３７】
監視周期設定レジスタ３６は、Ｉ／Ｏバス２０と接続されており、ＷＤＴ１６の監視周期が設定される。監視周期は、カウンタクリア部３４がフリーランカウンタ３８をクリアするまでの時間として許容された上限の時間であり、正常状態では、フリーランカウンタ３８が監視周期に到達するまでにフリーランカウンタ３８がクリアされる。
【００３８】
カウンタ比較部３０は、監視周期設定レジスタ３６に設定された監視周期とフリーランカウンタ３８のカウント値を比較し、カウント値が監視周期以上になると閉塞処理部３５に閉塞処理を要求する。図５では閉塞処理は、外部出力、割込み信号の出力及び内部リセットのいずれか１つ以上を実行する。このような閉塞処理により外部のＥＣＵが異常を検知したり、ＣＰＵ１１が記録を取ることができ、また、ＣＰＵ１１が内部リセットにより異常状態から回復することが期待できる。
【００３９】
また、ＷＤＴ１６は、特徴の１つとして、キーコード入力レジスタ４１、キーコード設定レジスタ４２及びキーコード履歴レジスタ４３を１組とするｎ＋１個のレジスタセットを有する。レジスタセットの入力側は、Ｉ／Ｏバス２０と接続されている。ＣＰＵ１１が自己診断ソフトを実行することでキーコード入力レジスタ４１に演算器の実行結果が設定される。キーコード設定レジスタ４２には演算器が正常に関数を実行した場合の期待値（正解の値）が格納される。
【００４０】
キーコード入力レジスタ４１とキーコード設定レジスタ４２に格納されたキーコードは、キー比較部３２に出力され、キー比較部３２が一致するか否かを比較する。一致する場合、キー比較部３２は一致信号をＡＮＤ回路３３に出力し、一致しない場合、キーコード履歴レジスタ４３に不一致信号を出力すると共に、ＩＮＴＣ１４に割込み信号を出力する。キーコード履歴レジスタ４３は、不一致信号の履歴をデータとして記憶する。履歴のデータは異常が検出されたことがわかればよく、例えば「ＦＦ」である。
【００４１】
なお、ＩＮＴＣ１４は、キー比較部３２からの割込み信号とアイドルタスクのトリガとなる周期割込みの優先順位に基づき、ＣＰＵ１１に割込みするか否かを判定する。キー比較部３２からの割込み信号の方が周期割込みよりも優先順位が高いと、異常が検出された時点で自己診断ソフトは中断される。一度に複数の演算器から異常が検出される確率が極めて低いような場合、早期に異常対応が可能になる。キー比較部３２からの割込み信号の方が周期割込みよりも優先順位が低いと、ＣＰＵ１１は全ての演算器を診断することができる。１つの演算器に異常が検出されると、他の演算器からも異常が検出されやすくなる場合、全ての演算器の全てを診断できるので異常の解析に役立てることができる。
【００４２】
このような優先順位の設定は、ＣＰＵ１１が起動時にＩＮＴＣ１４に設定することができる。本実施形態では、キー比較部３２からの割込み信号と周期割込みの優先順位のどちらが高くてもよいので特に限定せずに説明する。
【００４３】
ＡＮＤ回路３３は、予め定めた有効なキー比較部３２の全てから一致信号が入力されると、カウンタクリア部３４にフリーランカウンタ３８のクリアを要求する。「有効な」キー比較部３２とは、キーコード有効レジスタ３１に設定された数の、例えばアドレスの若い順のレジスタセットに対応したキー比較部３２である。
【００４４】
キーコード有効レジスタ３１は、ｎ＋１個のキー比較部３２（レジスタセット）のうち、有効なキー比較部３２の数が設定されるレジスタである。ＣＰＵ１１によって搭載する演算器の数が異なることがあるため、レジスタセットの全てが必要でない場合がある。このため、キーコード有効レジスタ３１に有効なキー比較部３２の数を設定することで、ＷＤＴ１６を種々のＣＰＵ１１に対応させることができる。有効でないキー比較部３２の出力は無効化される（一致信号又は不一致信号を仮に出力しても無視される）。
【００４５】
以上のような構成によれば、ＷＤＴ１６は次のように動作する。
・正常動作：キーコード有効レジスタ３１に設定された数だけ、キーコード入力レジスタ４１とキーコード設定レジスタ４２のキーコードが比較され、全てのレジスタセットでキーコードが一致すればカウンタクリア部３４がフリーランカウンタ３８をクリアする。
・異常処理１：キーコード有効レジスタ３１に設定された数だけ、キーコード入力レジスタ４１とキーコード設定レジスタ４２のキーコードが比較され、いずれか１つ以上のレジスタセットでキーコードが異なった場合、キーコード履歴レジスタ４３に履歴が保持されると共にＩＮＴＣ１４に割込みが通知される。ＣＰＵ１１はＩＮＴＣ１４からの割込みにより、有効なキーコード履歴レジスタ４３から履歴を全て読み出すことで、異常が検出された演算器を特定することができる。
・異常処理２：監視周期設定レジスタ３６に設定された有効な監視周期（ゼロ以外）とフリーランカウンタ３８のカウント値が比較され、一致した場合又はフリーランカウンタ３８がオーバーフローした場合、閉塞処理が実行される。なお、異常処理１が発生すれば時間をおいて異常処理２も発生する。
【００４６】
〔初期化の動作手順〕
図６は、自己診断ソフトの初期化処理の手順を示すフローチャート図の一例である。
ＣＰＵ１１は周期割込みなどによりアイドルタスクのタイミングになると、自己診断ソフトの実行を開始する。まず、初期化処理として各種のレジスタに値を設定する。
【００４７】
ＣＰＵ１１は、自己診断ソフトに記述されているか又はＲＯＭ１２に記憶されている選択値をクロックセレクトレジスタ４０に設定する（Ｓ１０）。
【００４８】
次に、ＣＰＵ１１は、自己診断ソフトに記述されているか又はＲＯＭ１２に記憶されている監視周期を監視周期設定レジスタ３６に設定する（Ｓ２０）。
【００４９】
次に、ＣＰＵ１１は、自己診断ソフトに記述されているか又はＲＯＭ１２に記憶されている有効なレジスタセットの数ｋをキーコード履歴レジスタ４３に設定する（Ｓ３０）。
【００５０】
次に、ＣＰＵ１１は、自己診断ソフトに記述されているか又はＲＯＭ１２に記憶されている関数の実行結果の期待値をキーコード設定レジスタ４２に設定する（Ｓ４０）。設定すべき期待値の数は有効なレジスタセットの数ｋと同じなので、ＣＰＵ１１はｋ回、期待値をキーコード設定レジスタ４２に設定する。
【００５１】
なお、演算器毎に、期待値を設定したキーコード設定レジスタ４２、キーコード設定レジスタ４２と一対のキーコード入力レジスタ４１及びキーコード履歴レジスタ４３のアドレスをＲＡＭ１３等に記憶しておく。
ＳＨ２６の演算結果  ：キーコード入力レジスタ＃０のアドレス
ＡＬＵ２７の演算結果：キーコード入力レジスタ＃１のアドレス
ＭＵＬ２８の演算結果：キーコード入力レジスタ＃２のアドレス
ＦＰＵ２９の演算結果：キーコード入力レジスタ＃３のアドレス
ＳＨ２６の期待値    ：キーコード設定レジスタ＃０のアドレス
ＡＬＵ２７の期待値  ：キーコード設定レジスタ＃１のアドレス
ＭＵＬ２８の期待値  ：キーコード設定レジスタ＃２のアドレス
ＦＰＵ２９の期待値  ：キーコード設定レジスタ＃３のアドレス
ＳＨ２６の履歴      ：キーコード履歴レジスタ＃０のアドレス
ＡＬＵ２７の履歴    ：キーコード履歴レジスタ＃１のアドレス
ＭＵＬ２８の履歴    ：キーコード履歴レジスタ＃２のアドレス
ＦＰＵ２９の履歴    ：キーコード履歴レジスタ＃３のアドレス
以下、ＲＡＭ１３に記憶された一連のレジスタのアドレスをアドレステーブルという。なお、予めＲＯＭ１２にこのアドレステーブルを登録しておき、ＣＰＵ１１が演算器毎に演算結果の格納先のキーコード入力レジスタ４１を振り分けることもできる。アドレステーブルを見れば、演算結果を記憶すべきキーコード入力レジスタ＃０〜＃３が明らかになり、ＣＰＵ１１はキーコード履歴レジスタ＃０〜＃３を読み出せば異常の検出された演算器を特定できる。
【００５２】
以上により必要な設定値が各レジスタに設定された。この処理は、ＣＰＵ１１が起動する毎に１回だけ行えばよい。
【００５３】
〔自己診断例〕
各レジスタが初期化されるとアイドルタスクのタイミングで自己診断が実行される。
図７は、演算器毎に診断する自己診断ソフトの診断処理の手順を示すフローチャート図の一例を、図８はデータフローの一例をそれぞれ示す。同様に、ＣＰＵ１１は周期割込みなどによりアイドルタスクのタイミングになると、自己診断ソフトの実行を開始する。
【００５４】
ＣＰＵ１１は、ＲＯＭ１２からＳＨ２６の診断の演算に必要なデータを読み出す（Ｓ１１０）。
ＣＰＵ１１は、読み出したデータをパラメータにしてＳＨ２６を作動させる関数を実行する（Ｓ１２０）。この関数は、ＳＨ２６のシフト演算のみを必要とするものであり、１つ以上の命令のオペコードが実体である。ＳＨ２６がデータに対し関数を実行した演算結果がキーコードの１つとなる。
【００５５】
図８（ａ）はＳＨ２６が関数を実行する際のデータの流れを示す図である。ＳＨ２６を作動させる命令により動作する回路の順に、矢印がＩＦＵ２１、ＤＥＣ２２、ＲＦ２３、ＳＨ２６を経てＲＥＧ２４に到達している。これによりＲＥＧ２４に記憶されたデータにシフト演算が施される。
【００５６】
次に、ＣＰＵ１１は、ＳＨ２６に対応するキーコード設定レジスタ４２のアドレスを取得する（Ｓ１３０）。キーコード設定レジスタ４２のアドレスは、図６の初期化処理でＲＡＭ１３等にアドレステーブルとして記憶されている。
【００５７】
ＣＰＵ１１は、ＳＨ２６が関数を実行して得られた演算結果を、キーコード入力レジスタ４１に設定する(Ｓ１４０)。これにより、ＳＨ２６による演算結果が期待値と一致すれば、キー比較部３２は一致信号を出力する。
【００５８】
図８（ｂ）はキーコード入力レジスタ４１に演算結果を格納するまでのデータの流れを示す図である。ＲＥＧ２４のデータを指示するため、ＲＦ２３からＲＥＧ２４に到達する矢印と、ＬＳＵ２５がＲＥＧ２４の演算結果をストアするためにＲＦ２３からＬＳＵ２５に到達する矢印と、ＲＥＧ２４からＬＳＵ２５に演算結果を送信する矢印とが図示されている。また、ＬＳＵ２５はシステムバス１９を介してＢＲＧ１５に演算結果を送信し、ＢＲＧ１５はＩ／Ｏバス２０を介して演算結果をＷＤＴ１６に送信する。
【００５９】
図８（ｃ）は、ＷＤＴ１６のキーコード入力レジスタ４１に演算結果を格納する際のデータの流れを示す図である。ここではＳＨ２６用のキーコード入力レジスタ４１として、キーコード入力レジスタ＃０に演算結果が設定されている。
【００６０】
次に、ＣＰＵ１１は、ＡＬＵ２７、ＭＵＬ２８及びＦＰＵ２９について同様の演算を実行する（Ｓ１１１〜１４３）。ＳＨ２６，ＡＬＵ２７、ＭＵＬ２８、ＦＰＵ２９の診断の順番は特に制約がなく、フリーランカウンタ３８がオーバーフローするまでに４つの演算器による演算が完了すればよい。なお、実際には、パイプライン制御のため、Ｓ１１０の後、Ｓ１２０と共にＳ１１１が実行されるなど、全てのステップが逐次実行されるとは限らない。
【００６１】
図８（ｄ）〜（ｆ）はＦＰＵ２９を診断する際のデータフローの一例を示す。基本的な流れは図８（ａ）〜（ｃ）と同様である。図８（ｆ）に示すようにＦＰＵ２９が作動して得られた演算結果がキーコード入力レジスタ＃３に設定されることで、４つのキーコード入力レジスタ４１に演算結果が格納されたことになる。
【００６２】
そして、全てのキー比較部３２が一致信号を出力するとＡＮＤ回路３３がカウンタクリア部３４にフリーランカウンタ３８のクリアを要求する。キー比較部３２が出力する一致信号に生じるタイムラグはラッチ回路などにより調整する。
【００６３】
〔自己診断例２〕
各演算器が順番に関数を実行するのでなく、各演算器が可能な限り同時並行的に関数を実行することもできる。図９は、自己診断ソフトの診断処理の手順を示すフローチャート図の一例を、図１０はデータフローの一例をそれぞれ示す。
【００６４】
ＣＰＵ１１は、ＲＯＭ１２から自己診断の演算に必要なデータを読み出す（Ｓ１１０）。同時に複数の命令を実行するため、演算器の数（＝有効なレジスタセットの数ｋ）を上限に、複数個のデータを一度に読み出す。
【００６５】
ＣＰＵ１１は、読み出したデータをパラメータにして演算器を作動させる関数を実行する（Ｓ１２０）。この関数は、ＳＨ２６のシフト演算のみを必要とするもの、ＡＬＵ２７の算術演算やシフト演算のみを必要とするもの、ＭＵＬ２８の乗算のみを必要とするもの、及び、ＦＰＵ２９の浮動小数点演算のみを必要とするものであり、それぞれ１つ以上の命令のオペコードが実体である。各関数の実行結果がキーコードである。キーコードは有効なレジスタセットの数ｋだけ生成される。
【００６６】
ここで、各関数は演算器に特有とするので互いに独立に実行することができる。
データ＃００、データ＃０１→ＳＨ用の関数
データ＃１０、データ＃１１→ＡＬＵ用の関数
データ＃２０、データ＃２１→ＭＵＬ用の関数
データ＃３０、データ＃３１→ＦＰＵ用の関数
いずれかの関数が他の関数の実行結果を必要とすることもないので、理論上は全ての関数を同時に実行できる。このような複数の命令を同時に実行するため、コンパイラに明示的に最適化を指示したり、コンパイラが持つ、オブジェクトコードを生成する際に命令の配置を最適化する機能を利用することができる。また、ＣＰＵ１１が持つ、プリフェッチした命令の依存関係を解析して依存関係のない命令を連続的に実行させるようスケジュールする機能を利用することもできる。
【００６７】
実際には、各演算器がＲＥＧ２４や内部バスを共用するので４つ全ての関数を同時に実行することは困難でも、複数の関数を同時に実行することは可能である。したがって、図９のような手順では、診断ソフトの実行時間を短縮できる。なお、1命令の動作クロック数は演算器によって変わりうるので、全ての演算が同時に始まり同時に終わるということは困難だが、並行的に実行する時間帯を設けることができる。
【００６８】
図１０（ａ）はＳＨ２６、ＡＬＵ２７、ＭＵＬ２８、ＦＰＵ２９が作動する際のデータの流れを示す図である。ＳＨ２６、ＡＬＵ２７、ＭＵＬ２８、ＦＰＵ２９を作動させる命令により動作する回路の順に、同時期に、矢印がＩＦＵ２１、ＤＥＣ２２、ＲＦ２３、ＳＨ２６を経てＲＥＧ２４に、ＩＦＵ２１、ＤＥＣ２２、ＲＦ２３、ＡＬＵ２７を経てＲＥＧ２４に、ＩＦＵ２１、ＤＥＣ２２、ＲＦ２３、ＭＵＬ２８を経てＲＥＧ２４に、ＩＦＵ２１、ＤＥＣ２２、ＲＦ２３、ＦＰＵ２９を経てＲＥＧ２４に、到達している。
【００６９】
ＣＰＵ１１は、有効なレジスタセットの数ｋだけＷＤＴ１６のキーコード入力レジスタのアドレスを取得する（Ｓ１３０）。キーコード入力レジスタのアドレスは、図６の初期化処理でアドレステーブルとしてＲＡＭ１３等に記憶されている。
【００７０】
ＣＰＵ１１は、各演算器の演算結果を、キーコード入力レジスタ４１に設定する(Ｓ１４０)。同様に、設定すべき演算結果の数は有効なレジスタセットの数ｋだけあるので、ＣＰＵ１１は時間的に並行に合計でｋ回、演算結果をキーコード入力レジスタ４１に設定する。
【００７１】
図１０（ｂ）はキーコード入力レジスタ４１に演算結果を格納するまでのデータの流れを示す図である。ＲＥＧ２４のデータを指示するため、ＲＦ２３からＲＥＧ２４に到達する４つの矢印、ＬＳＵ２５がＲＥＧ２４の演算結果をストアするためにＲＦ２３からＬＳＵ２５に到達する４つの矢印と、ＲＥＧ２４からＬＳＵ２５に演算結果を送信する４つの矢印とが図示されている。各矢印はキーコード入力レジスタ４１のアドレスの違いを示したもので、複数の矢印のストアが並行に実行されることがある。
【００７２】
図１０（ｃ）は、ＷＤＴ１６のキーコード入力レジスタ４１に演算結果を格納する際のデータの流れを示す図である。ＳＨ２６、ＡＬＵ２７、ＭＵＬ２８、ＦＰＵ２９による演算結果がキーコード入力レジスタ＃０〜＃３に順次、設定されている。これにより、すべてのレジスタセットで期待値と入力値が一致すれば、フリーランカウンタ３８がクリアされる。
【００７３】
〔自己診断例３〕
自己診断ソフトは４つの演算器を必ず一度に診断する必要はなく、個別に１つ以上の演算器を診断することもできる。ここで「一度」とはフリーランカウンタ３８がオーバーフローするまでの監視周期をいう。
【００７４】
例えば、ＳＨ２６とＭＵＬ２８で耐用年数や故障率が大きく異なる場合、故障しやすい演算器のみ重点的に診断すれば消費電力の低減にもなる。個別の演算器を診断するためには、アイドルタスク毎に診断する演算器とその数を決定すればよい。
【００７５】
図１１は、アイドルタスク毎に診断する演算器の数と演算器を決定して、個別に演算器を診断する手順を示すフローチャート図の一例である。
【００７６】
アイドルタスクが始まるとＣＰＵ１１は、予め定められた手法で診断する演算器を決定する（Ｓ２）。例えば次のように決定する。
・診断する演算器の数を１〜４の間で無作為に決め、演算器に故障率などで重み付けをして無作為に抽出する。こうすることで、故障率の高い演算器の診断回数を多くすることができる。
・診断対象の１組の演算器が登録されたテーブルを利用して、アイドルタスク毎にテーブルから順番に診断対象の１組の演算器を特定する。演算器を特定する処理を必要とせずに、所望の演算器ほど診断する回数を多くすることができる。
・アイドルタスク毎に順番に診断対象の1つの演算器を特定する。均等に各演算器を診断することができる。
【００７７】
次にＣＰＵ１１は、使用しないレジスタセットをマスクする（Ｓ４）。使用しないレジスタセットとは、例えば、全部で４つの演算器があるが１つの演算器のみを診断する場合の３つのレジスタセットである。マスクには例えば次のような方法がある。
・アイドルタスク毎にキーコード有効レジスタ３１に診断する演算器の数を設定する方法（演算器とレジスタセットを対応させる方法には、例えば、キーコード有効レジスタ３１に演算器の数だけでなく各レジスタセットにどの演算器からの実行結果が格納されるのかを設定する方法、等がある）
・キーコード有効レジスタ３１は変更することなく、使用しないレジスタセットのキーコード入力レジスタ４１とキーコード設定レジスタにダミーの同じ値を設定する方法
前者の方法ではＡＮＤ回路３３が監視するキー比較部３２の数を制限でき、後者の方法では使用しないレジスタセットから必ず一致信号が出力されるようにできる。なお、後者の方法は、キー比較部３２の出力を無効化することと同等である。
【００７８】
以降の処理は、図９と同じなので説明は省略する。すなわち、この監視周期においては診断対象の演算器のみが演算器を作動させる関数を実行して、演算結果をキーコード入力レジスタ４１に入力する。図１１のような処理によれば、全ての演算器を診断することなく、消費電力を抑制でき、故障率の高い演算器ほど高頻度に診断することができる。
【００７９】
〔キー比較部３２が割込み信号を出力した場合〕
図１２は異常が検出された場合にキーコード履歴レジスタ４３に記録される履歴の一例を示す図である。図１２では、キーコード入力レジスタ４１の値とキーコード設定レジスタの値とが一致していない。この場合、キー比較部３２は割込み信号を出力するだけでなく、キーコード履歴レジスタ４３に異常が検出されたことを示す不一致信号を出力する。図では“ＦＦ”が、異常が検出されたことを示す履歴である。
【００８０】
図１３は、キー比較部３２が割込み信号を出力した場合のＣＰＵ１１の処理手順を示すフローチャート図の一例である。
【００８１】
ＩＮＴＣ１４は周辺機器からの割込み要求を監視しているので、ＩＮＴＣ１４はキー比較部３２から割込み信号を受け付けたか否かを判定する（Ｓ２１０）。キー比較部３２から割込み信号を受け付けない場合（Ｓ２１０のＮｏ）、ＣＰＵ１１はそれまでの処理（アイドルタスク）を継続する。
【００８２】
キー比較部３２から割込み信号を受け付けた場合（Ｓ２１０のＹｅｓ）、ＩＮＴＣ１４はより優先順位の低い処理を実行中か否かを判定する（Ｓ２２０）。キー比較部３２から割込み信号よりも優先順位の低い処理を実行していない場合（Ｓ２２０のＮｏ）、ＣＰＵ１１はそれまでの処理を継続する。
【００８３】
より優先順位の低い処理を実行している場合（Ｓ２２０のＹｅｓ）、ＩＮＴＣ１４はＣＰＵ１１に割込みして異常処理対応ソフトを起動する（Ｓ２３０）。この異常処理対応ソフトは、演算器に異常が検出された場合に、異常が検出された演算器の特定、異常の検出履歴の記憶等を行う。なお、閉塞処理が内部リセットの場合、フリーランカウンタ３８がオーバーフローする前に異常対応ソフトを実行することが好ましい。
【００８４】
まず、ＣＰＵ１１は有効なキーコード履歴レジスタ４３を全て読み出す（Ｓ２４０）。キーコード有効レジスタ３１を参照すれば、有効なキーコード履歴レジスタ４３が明かとなる。
【００８５】
次に、ＣＰＵ１１は異常の履歴を有するキーコード履歴レジスタ４３のアドレスに基づき演算器を特定する（Ｓ２５０）。ＣＰＵ１１はアドレステーブルから“ＦＦ”と記録されているキーコード履歴レジスタ４３に対応づけられた演算器を特定する。
【００８６】
そして、ＣＰＵ１１は異常対応処理を実行する（Ｓ２６０）。ＣＰＵ１１は、例えば、異常が検出された演算器の識別情報と現在時刻を不揮発メモリに記憶したり、異常が検出された演算器のみをリセットする。
【００８７】
このように、本実施形態のＷＤＴ１６は、キーコード履歴レジスタ４３を有することで、ＣＰＵ１１の複数の演算器から異常が検出された演算器を特定することができる。
【００８８】
〔キーコード履歴レジスタの利用〕
これまでキーコード履歴レジスタ４３には、キー比較部３２が不一致信号を出力した際にその履歴が記憶されると説明したが、キーコード履歴レジスタ４３に一致信号の履歴を記録してもよい。一致信号の履歴を記録することで、ＣＰＵ１１が演算器毎に確かに異常がなかったことを記録することができるようになる。
【００８９】
図１４（ａ）はキーコード履歴レジスタ４３に記録される履歴の一例を示す図である。図１４（ａ）では、キーコード入力レジスタ４１の値とキーコード設定レジスタの値とが一致している。この場合、キー比較部３２は一致信号をＡＮＤ回路３３に出力するだけでなく、キーコード履歴レジスタ４３に異常がなかったことを示す一致信号を出力する。図では“０Ｆ”が正常であることを示す履歴である。
【００９０】
他のレジスタセットのキー比較部３２も一致信号を出力すると、キー比較部３２は割込み信号を出力しない。このため、ＣＰＵ１１は最後の演算器の演算結果をキーコード入力レジスタ４１に設定した後、アイドルタスクの終了前に、各キーコード履歴レジスタ４３から履歴を読み出す。これにより、診断結果が正常であったことを記録することができる。
【００９１】
また、キーコード履歴レジスタ４３に、一致・不一致の履歴だけでなく時刻を記録しておくことが有効な場合がある。
【００９２】
図１４（ｂ）は時刻が記録されたキーコード履歴レジスタ４３の一例を示す図である。図１４（ｂ）では、キーコード入力レジスタ４１の値とキーコード設定レジスタの値とが一致しているので、一致信号の履歴として“０Ｆ”が記録されるのは図１４（ａ）と同様である。しかし、図１４（ｂ）では一致の履歴と共に日時「２０１００５１２１５３４」が登録されている。「２０１００５１２１５３４」は２０１０年５月１２日１５時３４分である。
【００９３】
図１４（ｃ）は時刻が記録されたキーコード履歴レジスタ４３の別の一例を示す図である。図１４（ｃ）では、キーコード入力レジスタ４１の値とキーコード設定レジスタの値とが一致していないので、不一致の履歴として“ＦＦ”が記録されるのは図１２と同様である。しかし、図１４（ｃ）では不一致の履歴と共に日時「２０１００５１２１５３４」が登録されている。
【００９４】
時刻の登録は次のように行う。ＣＰＵ１１がキーコード入力レジスタ４１に演算結果を格納する際、現在時刻を時計（カレンダ機能）から取得し、キーコード履歴レジスタ４３の下位又は上位数ビットに現在時刻を記録する。また、キー比較部３２が一致信号又は不一致信号をキーコード履歴レジスタ４３に出力する際、現在時刻を破壊することなく、一致信号又は不一致信号の履歴を記録する。
【００９５】
また、キー比較部３２に時計にアクセスする機能があれば、キー比較部３２がキーコード履歴レジスタ４３に一致信号又は不一致信号の履歴と共に、日時を登録してもよい。
【００９６】
そして、図１４（ｂ）のように異常が検出されない場合、ＣＰＵ１１は最後の演算器の演算結果と現在時刻をキーコード入力レジスタ４１に設定した後、アイドルタスクの終了前に、各キーコード履歴レジスタ４３から履歴を読み出す。これにより、診断結果が正常であったこと及び診断時刻を検出できる。各キーコード履歴レジスタ４３の時刻を比較することで、演算器が同期して診断されているか否か等を検証できる。
【００９７】
図１４（ｃ）のように異常が検出された場合、キー比較部３２が割込み信号を出力すると、ＣＰＵ１１は、各キーコード履歴レジスタ４３から履歴を読み出す。これにより、診断結果に異常が検出されたこと及びその時刻を検出できる。異常が検出された演算器の診断時刻により、異常の頻度などを検証できる。
【００９８】
以上のように本実施形態のＷＤＴ１６は、ＷＤＴにいくつかのレジスタと付随する回路を追加し、キーコード履歴レジスタ４３に履歴を記録することで、コスト増を抑制して、異常がある演算器を特定することができる。
【符号の説明】
【００９９】
１１    ＣＰＵ
１２    ＲＯＭ
１３    ＲＡＭ
１４    ＩＮＴＣ
１５    ＢＲＧ
１６    ＷＤＴ
２５    ＬＳＵ
２６    ＳＨ
２７    ＡＬＵ
２８    ＭＵＬ
２９    ＦＰＵ
４１    キーコード入力レジスタ
４２    キーコード設定レジスタ
４３    キーコード履歴レジスタ
１００  マイコン
【図１】
2012059127.tif 000003
【図２】
2012059127.tif 000004
【図３】
2012059127.tif 000005
【図４】
2012059127.tif 000006
【図５】
2012059127.tif 000007
【図６】
2012059127.tif 000008
【図７】
2012059127.tif 000009
【図８】
2012059127.tif 000010
【図９】
2012059127.tif 000011
【図１０】
2012059127.tif 000012
【図１１】
2012059127.tif 000013
【図１２】
2012059127.tif 000014
【図１３】
2012059127.tif 000015
【図１４】
2012059127.tif 000016