JP2012059127A - 情報処理装置、ウォッチドッグタイマ、異常検出方法 - Google Patents

情報処理装置、ウォッチドッグタイマ、異常検出方法 Download PDF

Info

Publication number
JP2012059127A
JP2012059127A JP2010203291A JP2010203291A JP2012059127A JP 2012059127 A JP2012059127 A JP 2012059127A JP 2010203291 A JP2010203291 A JP 2010203291A JP 2010203291 A JP2010203291 A JP 2010203291A JP 2012059127 A JP2012059127 A JP 2012059127A
Authority
JP
Japan
Prior art keywords
processing apparatus
information processing
abnormality
register
expected value
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2010203291A
Other languages
English (en)
Inventor
Tetsuaki Wakabayashi
哲明 若林
Koji Yamauchi
康司 山内
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toyota Motor Corp
Original Assignee
Toyota Motor Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Toyota Motor Corp filed Critical Toyota Motor Corp
Priority to JP2010203291A priority Critical patent/JP2012059127A/ja
Publication of JP2012059127A publication Critical patent/JP2012059127A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)
  • Test And Diagnosis Of Digital Computers (AREA)

Abstract

【課題】高い故障検出率を低コストで実現する情報処理装置、ウォッチドッグタイマ及び異常検出方法を提供する。
【解決手段】複数の演算器を有するプロセッサ11と、各演算器を選択的に作動させる1つ以上の関数が記述されたプログラムを記憶するプログラム記憶手段と、演算器が関数を実行した演算結果を記憶する第一の記憶手段41と、演算器が関数を正常に実行して得られる期待値を記憶する第二の記憶手段42と、演算結果と期待値を比較して演算器の異常を検出する第一の異常検出手段32と、演算結果と期待値の比較結果を記憶する演算器に関連付けられた第三の記憶手段43と、を有する。
【選択図】図1

Description

本発明は、複数の演算器を備えた情報処理装置等に関し、演算器の異常を検出可能な情報処理装置、ウォッチドッグタイマ及び異常検出方法に関する。
製品の安全性能を向上させる機運が高まっており、従来、不具合が比較的広範囲に影響する産業分野でのみ用いられていた機能安全規格が車両にも適用されることが予定されている。機能安全規格は、安全な製品を開発するために有効と考えられる開発手法や管理方式の標準体系であり、IEC61508/ISO26262等に規格化されている。機能安全規格への要求に対する施策の1つは、マイコン自体の故障検出率を向上させることである。
一般的な故障検出手法としては従来から以下の手法が用いられている。
(1)故障検出回路の追加(ハード処理)
例えば、ロックステップ機能を備えたデュアルCPUのように、リダンダンシ回路を追加する手法がある。このようなデュアルCPUは、各CPUが同一のコードをそれぞれ実行する冗長処理を実装し、両者の結果をマッチングすることによりデュアルCPU又は周辺の回路が正常であることを監視する。
(2)自己診断プログラム(ソフト処理)
CPUがアプリケーションとは別に自己診断プログラムを周期的に実行し、その値が期待値と一致することにより、CPU又は周辺の回路が正常であることを監視する。
(3)ウォッチドッグタイマ監視(ソフト+ハード処理)
CPUが実行するプログラムが周期的にタイマをリセットすることで、タイマがオーバーフローしない状態を維持して、プログラムが暴走していないことを監視する。
ウォッチドッグタイマの一例として、起動された複数のプロセッサエレメント(PE)がタイマをリセットする技術が考案されている(例えば、特許文献1参照。)。特許文献1には、各PEが演算の終了によりタイマをリセットするが、異常により演算が終了しない場合はタイマがリセットされないのでオーバーフローが発生し、異常を検出することができる。
特開昭61−52750号公報
しかしながら、上記(1)〜(3)には以下のような問題がある。
(1)完全にハード的に異常検出するので故障検出率は期待できるが、冗長回路を搭載するためにコスト増となってしまう。
(2)故障検出の全て(実行、比較、異常検出)をソフト的に実行するため(CPUがプログラムを実行するため)、故障検出率を向上させるためには、充分なスペックのCPU及びメモリリソースを用意する必要が生じる。このため、単に車両制御用のアプリケーションを実行する場合よりも高いスペックのCPUや大容量のメモリが必要になりコスト増となってしまう。
(3)回路やCPUリソースに付加する要素はほとんど必要ないが、プログラムが暴走してもタイマをリセットする場合があるなど故障検出率が不十分であるといわれている。また、特にCPUの個々の回路ブロックの故障を検出できないという致命的な欠陥がある。例えば、特許文献1においても、タイマがオーバーフローした場合に、どのPEに異常が生じたのかを解析できない。
このように、従来の故障検出手法では、高い故障検出率を低コストで実現する最適な手法が存在しない。機能安全規格を満たすことは車両の商品価値向上に寄与しにくいので、機能安全規格を満たすことによるコスト増は可能な限り抑制しないと車載することが困難である。
本発明は、上記課題に鑑み、高い故障検出率を低コストで実現する情報処理装置、ウォッチドッグタイマ及び異常検出方法を提供することを目的とする。
上記課題に鑑み、本発明は、複数の演算器を有するプロセッサと、各演算器を選択的に作動させる1つ以上の関数が記述されたプログラムを記憶するプログラム記憶手段と、前記演算器が前記関数を実行した演算結果を記憶する第一の記憶手段と、前記演算器が前記関数を正常に実行して得られる期待値を記憶する第二の記憶手段と、前記演算結果と前記期待値を比較して前記演算器の異常を検出する第一の異常検出手段と、前記演算結果と前記期待値の比較結果を記憶する前記演算器に関連付けられた第三の記憶手段と、を有することを特徴とする情報処理装置を提供する。
高い故障検出率を低コストで実現する情報処理装置、ウォッチドッグタイマ及び異常検出方法を提供することができる。
WDTの概略を説明する図の一例である。 WDTのマイコンへの実装例の一例を示す図である。 WDTと自己診断ソフトの融合を説明する図の一例である。 CPUの回路ブロック図の一例である。 EDTの機能ブロック図の一例である。 自己診断ソフトの初期化処理の手順を示すフローチャート図の一例である。 演算器毎に診断する自己診断ソフトの診断処理の手順を示すフローチャート図の一例である。 データフローの一例を示す図である。 自己診断ソフトの診断処理の手順を示すフローチャート図の一例である。 データフローの一例を示す図である。 アイドルタスク毎に診断する演算器の数と演算器を決定して、個別に演算器を診断する手順を示すフローチャート図の一例である。 異常が検出された場合にキーコード履歴レジスタに記録される履歴の一例を示す図である。 キー比較部が割込み信号を出力した場合のCPUの処理手順を示すフローチャート図の一例である。 キーコード履歴レジスタに記録される履歴の一例を示す図である。
以下、本発明を実施するための形態について図面を参照しながら説明する。
図1は、本実施形態のWDTの概略を説明する図の一例である。
(a)CPU11は、SH(Shifter)、ALU(Arithmetic Logic Unit)、MUL(Multiplier)、FPU(Flaoting Point Unit)等のいくつかの演算器を有し、選択的に演算器を使用することで演算結果が得られる関数を実行する。
(b)演算結果は関数毎に定められたキーコード入力レジスタ41に入力される。各キーコード入力レジスタ41は、正常値が予め設定されているキーコード設定レジスタ42と併設されている。
(c)キー比較部(比較器)32はキーコード入力レジスタ41とキーコード設定レジスタ42の値を比較し、比較結果に応じてAND回路33又はキーコード履歴レジスタ43に信号を出力する。
(d)値が一致しない場合、キー比較部32はキーコード履歴レジスタ43に一致しないことを示す履歴を記憶する。
(e)全てのキー比較部32が一致するという信号をAND回路33に出力すると、フリーランしているフリーランカウンタ38がクリアされる。
このようなWDT16であれば、いくつかのレジスタと付随する回路があれば実現でき、リダンタンシ回路のように大規模なハードを搭載する必要がないので、コスト増を抑制できる。
また、CPU11が実行する関数として従来の自己診断ソフトを利用しても、本実施形態ではCPU11が期待値の読み出し、及び、期待値マッチングを実行する必要がないので、CPU11のソフト処理を最小限に抑制でき、CPU11の高スペック化やメモリ容量の増大を抑制できる。
また、故障検出をソフトで実現するので、CPU11の構造(例えばパイプラインアーキテクト)に依存せず自己診断ソフトを流用できる。よって多くの車種で同じ手法を用いることでコスト増も抑制しやすくなる。
〔WDT16の実装例〕
図2は、WDT16のマイコン100への実装例の一例を示す。マイコン100は例えばECU(electronic control unit)と称され、各種の車載装置を制御するために用いられる。マイコン100は、システムバス19に接続されたCPU11、ROM12、RAM13及びINTC(割込みコントローラ)14、I/Oバス20に接続されたWDT16及びI/O17、並びに、システムバス19とI/Oバス20に接続されたBRG(バスブリッジ)15を有する。
ROM12には、このマイコン100が制御のために実行するアプリケーションプログラムが記憶されている。OSやデバイスドライバ(プラットフォーム)も記憶されている。アプリケーションプログラムは、優先度が高いメインタスクと優先度が低いアイドルタスクを有する場合がある(2つのタスクで1つのプログラムである)。
マイコン100は、一般的に、イベントが発生したり、メインタスクのタイミングが到来するとメインタスクを開始し、優先度が高いメインタスクが終了すると、引き続き優先度が低いアイドルタスクを実行する。アイドルタスクは、メインタスクが実行されていない場合に、レジスタチェック、フェールセーフ処理、又は、無限ループによるメインタスクの待ち状態等を提供するタスクである。本実施形態においてもアイドルタスクにより、自己診断のためのタスクを実行する。以下、メインタスクを通常タスク、自己診断ソフトが実行されるタスクをアイドルタスクとして説明するが、自己診断ソフトをアプリケーションプログラムとは別に用意することもできるし、プラットフォームの一部として実装することもできる。
RAM13はCPU11がアプリケーションプログラムを実行する際の作業メモリであり、INTC14は、WDT16や他の周辺機器(タイマ、センサ、他のECU等)からの割込み要因を調停して、CPU11に割込み要求する。BRG15は、システムバス19とI/Oバス20の間で相互に周波数や電圧値などを変換する。I/O17はマイコン100と外部の機器を接続するインタフェースであり、例えば、各種のアクチュエータ、センサ、スイッチ等が接続される。
WDT16は、何らかのクロックソースに基づきカウントアップするタイマであり、ある一定値に到達した時に、または、カウントダウンしてカウンタがゼロになった時に(以下、いずれの場合も単に「オーバーフロー」という)、CPU11に割込み信号を出力する(a)。これによりCPU11は所定の処理を実行することができる。また、WDT16は、タイマがオーバーフローした際に、外部出力信号を活性化して他のECU等に通知することもできるし(b)、Reset18にマイコン100の内部のリセットを要求することもできる(c)。
異常がないという前提では、CPU11が実行するソフト処理によりWDT16のタイマがオーバーフローする前にクリアされることが期待されている。すなわち、ソフトウェアが暴走した場合、WDT16のタイマもクリアされないと仮定して、タイマがオーバーフローしないことでソフトウェアが暴走していない(=正常であると)とみなす。
なお、CPU11からWDT16へのアクセスは、システムバス19・BRG15、I/Oバス20、WDT16の順である。逆にWDT16からCPU11へのアクセスは、INTC14・CPU11の順となる。
〔本実施形態のWDTの概念〕
本実施形態のWDT16は、WDT16と自己診断ソフトを融合させたというべき構成を備える。図3は、WDT16と自己診断ソフトの融合を説明する図の一例である。
まず、図3の左の従来のWDT16について説明する。上記のように、INTC14が例えば周期的にCPU11に割込みすると、CPU11は通常タスクを実行する。CPU11が通常タスクを実行している間、WDT16のタイマはカウントアップを継続している。
CPU11が通常タスクの実行を終了すると、続いてアイドルタスクを実行するが、このアイドルタスクにWDT16のタイマをクリアする処理が含まれている。よって、CPU11がアイドルタスクを実行することでWDT16のタイマをクリアする。クリアの際、WDT16はノイズなどをCPU11からのクリア信号と誤認しないように、例えばコードなどでCPU11を認証する。WDT16はCPU11を認証すると、タイマをクリアする。
次に、図3の右の従来の自己診断ソフトについて説明する。こちらも、INTC14が例えば周期的にCPU11に割込みをかけると、CPU11は通常タスクを実行する。CPU11が通常タスクの実行を終了すると、続いてアイドルタスクを実行するが、このアイドルタスクに、自己診断のための演算処理、期待値取得及び結果比較の処理が含まれている。CPU11は、演算処理、期待値取得及び結果比較を実行し、比較結果が一致しないと判定すると、予め決められた閉塞処理を実行する。
本実施形態のWDT16は、WDT16と自己診断ソフトによる異常検出を融合しているということができる。すなわち、
WDTとして) INTC14が例えば周期的にCPU11に割込みをかけると、CPU11は通常タスクを実行する。CPU11が通常タスクを実行している間、WDT16のタイマはカウントアップを継続している。
自己診断ソフトとして) CPU11が通常タスクの実行を終了すると、続いてアイドルタスクを実行するが、このアイドルタスクに演算処理及びキーコード入力の処理が含まれている。期待値取得及び結果比較の処理は含まれないが、従来の自己診断ソフトをそのまま又は一部を変更するのみで利用できる。
WDTとして) WDT16は、キーコード入力を受け付け、WDT16は予め設定されているキーコードと入力されたキーコードを比較する。この比較処理は従来の認証処理に近く、WDT16の基本機能に大きな変更はない。
このように、WDT16は、WDT16と自己診断ソフトを適切に変更して融合することで、コスト増を抑制して柔軟な異常検出を可能にする。また、変更箇所も最小限なので実装も容易である。
〔構成〕
図4は、CPU11の回路ブロック図の一例を示す。CPU11は、IFU(Instruction Fetch Unit)21、DEC(DECoder)22、RF(Register Fetch)23、REG(REGister)24、LSU(Load Store Unit)25、SH26、ALU27、MUL28及びFPU29を有する。
これら各回路は一般的な機能を提供するものでありWDT16に対応するための特別なハードウェアは必要としない。IFU21は、プログラムカウンタが示すアドレスの命令をシステムバス19を介してROM12から読み出す。DEC22は、読み出された命令からオペコードとオペランドを取り出し、オペコードのビット列に応じて演算の内容を決定する。これによりCPU11が使用する演算器も決定される。
RF23は、演算がレジスタに格納されているデータを必要とする場合にREG24に格納されたデータを演算器に提供する。LSU25は、所定のアドレッシングモードとオペランドで決まるアドレスのデータをシステムバス19を介しROM12、RAM13又はBRGから読み出しREG24に格納し、又は、REG24から読み出したデータをRAM13又はBRG15に記憶する。
SH26、ALU27、MUL28及びFPU29が演算器の例である。SH26は、命令が定めるビット単位で右又は左にデータを算術シフト又は論理シフトする。ALU27は、命令に応じて、REG24に格納された2つのデータ同士を、加算、減算、乗算、除算し、又は、REG24に格納されているデータにシフト演算を行う。MUL28はREG24に格納されている2つのデータ同士を乗算する。FPU29は、REG24に記憶されたデータに浮動小数点演算を施す。演算器による演算結果はREG24に格納され、必要であれば再度の演算に提供され、その後、ストア命令によってLSU25によりRAM13等に記憶される。
自己診断ソフトには、各演算器のみを1回以上使用するいくつかの関数が記述されている。よって、各関数は各演算器に対応している。IFU21が読み込む命令はコンパイラが最適化したものなので、コンパイラが各演算器のみを1回以上使用するオブジェクトコードを生成するように、ソースコードが記述されている。
図5は、WDT16の機能ブロック図の一例を示す。まず、WDT16は、従来のWDT16と同様に、クロックセレクトレジスタ40、クロックセレクタ39、フリーランカウンタ38、監視周期設定レジスタ36、カウンタ比較部30、及び、閉塞処理部35を有する。クロックセレクトレジスタ40はI/Oバス20に接続されており、入力ソース(クロック)の選択値が設定される。入力ソースは周波数が異なる複数のクロックなので、入力ソースを選択することで、フリーランカウンタ38がカウントアップする時間間隔を調整することができる。クロックセレクタ39は、クロックセレクトレジスタ40の選択値に応じて入力ソースを選択的に通過させる。なお、同様の構成は、1つの入力ソースと分周器によっても実現できる。フリーランカウンタ38は、32bitのカウント値を有し、クロックセレクタ39が出力するパルスをカウントアップする。
監視周期設定レジスタ36は、I/Oバス20と接続されており、WDT16の監視周期が設定される。監視周期は、カウンタクリア部34がフリーランカウンタ38をクリアするまでの時間として許容された上限の時間であり、正常状態では、フリーランカウンタ38が監視周期に到達するまでにフリーランカウンタ38がクリアされる。
カウンタ比較部30は、監視周期設定レジスタ36に設定された監視周期とフリーランカウンタ38のカウント値を比較し、カウント値が監視周期以上になると閉塞処理部35に閉塞処理を要求する。図5では閉塞処理は、外部出力、割込み信号の出力及び内部リセットのいずれか1つ以上を実行する。このような閉塞処理により外部のECUが異常を検知したり、CPU11が記録を取ることができ、また、CPU11が内部リセットにより異常状態から回復することが期待できる。
また、WDT16は、特徴の1つとして、キーコード入力レジスタ41、キーコード設定レジスタ42及びキーコード履歴レジスタ43を1組とするn+1個のレジスタセットを有する。レジスタセットの入力側は、I/Oバス20と接続されている。CPU11が自己診断ソフトを実行することでキーコード入力レジスタ41に演算器の実行結果が設定される。キーコード設定レジスタ42には演算器が正常に関数を実行した場合の期待値(正解の値)が格納される。
キーコード入力レジスタ41とキーコード設定レジスタ42に格納されたキーコードは、キー比較部32に出力され、キー比較部32が一致するか否かを比較する。一致する場合、キー比較部32は一致信号をAND回路33に出力し、一致しない場合、キーコード履歴レジスタ43に不一致信号を出力すると共に、INTC14に割込み信号を出力する。キーコード履歴レジスタ43は、不一致信号の履歴をデータとして記憶する。履歴のデータは異常が検出されたことがわかればよく、例えば「FF」である。
なお、INTC14は、キー比較部32からの割込み信号とアイドルタスクのトリガとなる周期割込みの優先順位に基づき、CPU11に割込みするか否かを判定する。キー比較部32からの割込み信号の方が周期割込みよりも優先順位が高いと、異常が検出された時点で自己診断ソフトは中断される。一度に複数の演算器から異常が検出される確率が極めて低いような場合、早期に異常対応が可能になる。キー比較部32からの割込み信号の方が周期割込みよりも優先順位が低いと、CPU11は全ての演算器を診断することができる。1つの演算器に異常が検出されると、他の演算器からも異常が検出されやすくなる場合、全ての演算器の全てを診断できるので異常の解析に役立てることができる。
このような優先順位の設定は、CPU11が起動時にINTC14に設定することができる。本実施形態では、キー比較部32からの割込み信号と周期割込みの優先順位のどちらが高くてもよいので特に限定せずに説明する。
AND回路33は、予め定めた有効なキー比較部32の全てから一致信号が入力されると、カウンタクリア部34にフリーランカウンタ38のクリアを要求する。「有効な」キー比較部32とは、キーコード有効レジスタ31に設定された数の、例えばアドレスの若い順のレジスタセットに対応したキー比較部32である。
キーコード有効レジスタ31は、n+1個のキー比較部32(レジスタセット)のうち、有効なキー比較部32の数が設定されるレジスタである。CPU11によって搭載する演算器の数が異なることがあるため、レジスタセットの全てが必要でない場合がある。このため、キーコード有効レジスタ31に有効なキー比較部32の数を設定することで、WDT16を種々のCPU11に対応させることができる。有効でないキー比較部32の出力は無効化される(一致信号又は不一致信号を仮に出力しても無視される)。
以上のような構成によれば、WDT16は次のように動作する。
・正常動作:キーコード有効レジスタ31に設定された数だけ、キーコード入力レジスタ41とキーコード設定レジスタ42のキーコードが比較され、全てのレジスタセットでキーコードが一致すればカウンタクリア部34がフリーランカウンタ38をクリアする。
・異常処理1:キーコード有効レジスタ31に設定された数だけ、キーコード入力レジスタ41とキーコード設定レジスタ42のキーコードが比較され、いずれか1つ以上のレジスタセットでキーコードが異なった場合、キーコード履歴レジスタ43に履歴が保持されると共にINTC14に割込みが通知される。CPU11はINTC14からの割込みにより、有効なキーコード履歴レジスタ43から履歴を全て読み出すことで、異常が検出された演算器を特定することができる。
・異常処理2:監視周期設定レジスタ36に設定された有効な監視周期(ゼロ以外)とフリーランカウンタ38のカウント値が比較され、一致した場合又はフリーランカウンタ38がオーバーフローした場合、閉塞処理が実行される。なお、異常処理1が発生すれば時間をおいて異常処理2も発生する。
〔初期化の動作手順〕
図6は、自己診断ソフトの初期化処理の手順を示すフローチャート図の一例である。
CPU11は周期割込みなどによりアイドルタスクのタイミングになると、自己診断ソフトの実行を開始する。まず、初期化処理として各種のレジスタに値を設定する。
CPU11は、自己診断ソフトに記述されているか又はROM12に記憶されている選択値をクロックセレクトレジスタ40に設定する(S10)。
次に、CPU11は、自己診断ソフトに記述されているか又はROM12に記憶されている監視周期を監視周期設定レジスタ36に設定する(S20)。
次に、CPU11は、自己診断ソフトに記述されているか又はROM12に記憶されている有効なレジスタセットの数kをキーコード履歴レジスタ43に設定する(S30)。
次に、CPU11は、自己診断ソフトに記述されているか又はROM12に記憶されている関数の実行結果の期待値をキーコード設定レジスタ42に設定する(S40)。設定すべき期待値の数は有効なレジスタセットの数kと同じなので、CPU11はk回、期待値をキーコード設定レジスタ42に設定する。
なお、演算器毎に、期待値を設定したキーコード設定レジスタ42、キーコード設定レジスタ42と一対のキーコード入力レジスタ41及びキーコード履歴レジスタ43のアドレスをRAM13等に記憶しておく。
SH26の演算結果 :キーコード入力レジスタ#0のアドレス
ALU27の演算結果:キーコード入力レジスタ#1のアドレス
MUL28の演算結果:キーコード入力レジスタ#2のアドレス
FPU29の演算結果:キーコード入力レジスタ#3のアドレス
SH26の期待値 :キーコード設定レジスタ#0のアドレス
ALU27の期待値 :キーコード設定レジスタ#1のアドレス
MUL28の期待値 :キーコード設定レジスタ#2のアドレス
FPU29の期待値 :キーコード設定レジスタ#3のアドレス
SH26の履歴 :キーコード履歴レジスタ#0のアドレス
ALU27の履歴 :キーコード履歴レジスタ#1のアドレス
MUL28の履歴 :キーコード履歴レジスタ#2のアドレス
FPU29の履歴 :キーコード履歴レジスタ#3のアドレス
以下、RAM13に記憶された一連のレジスタのアドレスをアドレステーブルという。なお、予めROM12にこのアドレステーブルを登録しておき、CPU11が演算器毎に演算結果の格納先のキーコード入力レジスタ41を振り分けることもできる。アドレステーブルを見れば、演算結果を記憶すべきキーコード入力レジスタ#0〜#3が明らかになり、CPU11はキーコード履歴レジスタ#0〜#3を読み出せば異常の検出された演算器を特定できる。
以上により必要な設定値が各レジスタに設定された。この処理は、CPU11が起動する毎に1回だけ行えばよい。
〔自己診断例〕
各レジスタが初期化されるとアイドルタスクのタイミングで自己診断が実行される。
図7は、演算器毎に診断する自己診断ソフトの診断処理の手順を示すフローチャート図の一例を、図8はデータフローの一例をそれぞれ示す。同様に、CPU11は周期割込みなどによりアイドルタスクのタイミングになると、自己診断ソフトの実行を開始する。
CPU11は、ROM12からSH26の診断の演算に必要なデータを読み出す(S110)。
CPU11は、読み出したデータをパラメータにしてSH26を作動させる関数を実行する(S120)。この関数は、SH26のシフト演算のみを必要とするものであり、1つ以上の命令のオペコードが実体である。SH26がデータに対し関数を実行した演算結果がキーコードの1つとなる。
図8(a)はSH26が関数を実行する際のデータの流れを示す図である。SH26を作動させる命令により動作する回路の順に、矢印がIFU21、DEC22、RF23、SH26を経てREG24に到達している。これによりREG24に記憶されたデータにシフト演算が施される。
次に、CPU11は、SH26に対応するキーコード設定レジスタ42のアドレスを取得する(S130)。キーコード設定レジスタ42のアドレスは、図6の初期化処理でRAM13等にアドレステーブルとして記憶されている。
CPU11は、SH26が関数を実行して得られた演算結果を、キーコード入力レジスタ41に設定する(S140)。これにより、SH26による演算結果が期待値と一致すれば、キー比較部32は一致信号を出力する。
図8(b)はキーコード入力レジスタ41に演算結果を格納するまでのデータの流れを示す図である。REG24のデータを指示するため、RF23からREG24に到達する矢印と、LSU25がREG24の演算結果をストアするためにRF23からLSU25に到達する矢印と、REG24からLSU25に演算結果を送信する矢印とが図示されている。また、LSU25はシステムバス19を介してBRG15に演算結果を送信し、BRG15はI/Oバス20を介して演算結果をWDT16に送信する。
図8(c)は、WDT16のキーコード入力レジスタ41に演算結果を格納する際のデータの流れを示す図である。ここではSH26用のキーコード入力レジスタ41として、キーコード入力レジスタ#0に演算結果が設定されている。
次に、CPU11は、ALU27、MUL28及びFPU29について同様の演算を実行する(S111〜143)。SH26,ALU27、MUL28、FPU29の診断の順番は特に制約がなく、フリーランカウンタ38がオーバーフローするまでに4つの演算器による演算が完了すればよい。なお、実際には、パイプライン制御のため、S110の後、S120と共にS111が実行されるなど、全てのステップが逐次実行されるとは限らない。
図8(d)〜(f)はFPU29を診断する際のデータフローの一例を示す。基本的な流れは図8(a)〜(c)と同様である。図8(f)に示すようにFPU29が作動して得られた演算結果がキーコード入力レジスタ#3に設定されることで、4つのキーコード入力レジスタ41に演算結果が格納されたことになる。
そして、全てのキー比較部32が一致信号を出力するとAND回路33がカウンタクリア部34にフリーランカウンタ38のクリアを要求する。キー比較部32が出力する一致信号に生じるタイムラグはラッチ回路などにより調整する。
〔自己診断例2〕
各演算器が順番に関数を実行するのでなく、各演算器が可能な限り同時並行的に関数を実行することもできる。図9は、自己診断ソフトの診断処理の手順を示すフローチャート図の一例を、図10はデータフローの一例をそれぞれ示す。
CPU11は、ROM12から自己診断の演算に必要なデータを読み出す(S110)。同時に複数の命令を実行するため、演算器の数(=有効なレジスタセットの数k)を上限に、複数個のデータを一度に読み出す。
CPU11は、読み出したデータをパラメータにして演算器を作動させる関数を実行する(S120)。この関数は、SH26のシフト演算のみを必要とするもの、ALU27の算術演算やシフト演算のみを必要とするもの、MUL28の乗算のみを必要とするもの、及び、FPU29の浮動小数点演算のみを必要とするものであり、それぞれ1つ以上の命令のオペコードが実体である。各関数の実行結果がキーコードである。キーコードは有効なレジスタセットの数kだけ生成される。
ここで、各関数は演算器に特有とするので互いに独立に実行することができる。
データ#0、データ#0→SH用の関数
データ#1、データ#1→ALU用の関数
データ#2、データ#2→MUL用の関数
データ#3、データ#3→FPU用の関数
いずれかの関数が他の関数の実行結果を必要とすることもないので、理論上は全ての関数を同時に実行できる。このような複数の命令を同時に実行するため、コンパイラに明示的に最適化を指示したり、コンパイラが持つ、オブジェクトコードを生成する際に命令の配置を最適化する機能を利用することができる。また、CPU11が持つ、プリフェッチした命令の依存関係を解析して依存関係のない命令を連続的に実行させるようスケジュールする機能を利用することもできる。
実際には、各演算器がREG24や内部バスを共用するので4つ全ての関数を同時に実行することは困難でも、複数の関数を同時に実行することは可能である。したがって、図9のような手順では、診断ソフトの実行時間を短縮できる。なお、1命令の動作クロック数は演算器によって変わりうるので、全ての演算が同時に始まり同時に終わるということは困難だが、並行的に実行する時間帯を設けることができる。
図10(a)はSH26、ALU27、MUL28、FPU29が作動する際のデータの流れを示す図である。SH26、ALU27、MUL28、FPU29を作動させる命令により動作する回路の順に、同時期に、矢印がIFU21、DEC22、RF23、SH26を経てREG24に、IFU21、DEC22、RF23、ALU27を経てREG24に、IFU21、DEC22、RF23、MUL28を経てREG24に、IFU21、DEC22、RF23、FPU29を経てREG24に、到達している。
CPU11は、有効なレジスタセットの数kだけWDT16のキーコード入力レジスタのアドレスを取得する(S130)。キーコード入力レジスタのアドレスは、図6の初期化処理でアドレステーブルとしてRAM13等に記憶されている。
CPU11は、各演算器の演算結果を、キーコード入力レジスタ41に設定する(S140)。同様に、設定すべき演算結果の数は有効なレジスタセットの数kだけあるので、CPU11は時間的に並行に合計でk回、演算結果をキーコード入力レジスタ41に設定する。
図10(b)はキーコード入力レジスタ41に演算結果を格納するまでのデータの流れを示す図である。REG24のデータを指示するため、RF23からREG24に到達する4つの矢印、LSU25がREG24の演算結果をストアするためにRF23からLSU25に到達する4つの矢印と、REG24からLSU25に演算結果を送信する4つの矢印とが図示されている。各矢印はキーコード入力レジスタ41のアドレスの違いを示したもので、複数の矢印のストアが並行に実行されることがある。
図10(c)は、WDT16のキーコード入力レジスタ41に演算結果を格納する際のデータの流れを示す図である。SH26、ALU27、MUL28、FPU29による演算結果がキーコード入力レジスタ#0〜#3に順次、設定されている。これにより、すべてのレジスタセットで期待値と入力値が一致すれば、フリーランカウンタ38がクリアされる。
〔自己診断例3〕
自己診断ソフトは4つの演算器を必ず一度に診断する必要はなく、個別に1つ以上の演算器を診断することもできる。ここで「一度」とはフリーランカウンタ38がオーバーフローするまでの監視周期をいう。
例えば、SH26とMUL28で耐用年数や故障率が大きく異なる場合、故障しやすい演算器のみ重点的に診断すれば消費電力の低減にもなる。個別の演算器を診断するためには、アイドルタスク毎に診断する演算器とその数を決定すればよい。
図11は、アイドルタスク毎に診断する演算器の数と演算器を決定して、個別に演算器を診断する手順を示すフローチャート図の一例である。
アイドルタスクが始まるとCPU11は、予め定められた手法で診断する演算器を決定する(S2)。例えば次のように決定する。
・診断する演算器の数を1〜4の間で無作為に決め、演算器に故障率などで重み付けをして無作為に抽出する。こうすることで、故障率の高い演算器の診断回数を多くすることができる。
・診断対象の1組の演算器が登録されたテーブルを利用して、アイドルタスク毎にテーブルから順番に診断対象の1組の演算器を特定する。演算器を特定する処理を必要とせずに、所望の演算器ほど診断する回数を多くすることができる。
・アイドルタスク毎に順番に診断対象の1つの演算器を特定する。均等に各演算器を診断することができる。
次にCPU11は、使用しないレジスタセットをマスクする(S4)。使用しないレジスタセットとは、例えば、全部で4つの演算器があるが1つの演算器のみを診断する場合の3つのレジスタセットである。マスクには例えば次のような方法がある。
・アイドルタスク毎にキーコード有効レジスタ31に診断する演算器の数を設定する方法(演算器とレジスタセットを対応させる方法には、例えば、キーコード有効レジスタ31に演算器の数だけでなく各レジスタセットにどの演算器からの実行結果が格納されるのかを設定する方法、等がある)
・キーコード有効レジスタ31は変更することなく、使用しないレジスタセットのキーコード入力レジスタ41とキーコード設定レジスタにダミーの同じ値を設定する方法
前者の方法ではAND回路33が監視するキー比較部32の数を制限でき、後者の方法では使用しないレジスタセットから必ず一致信号が出力されるようにできる。なお、後者の方法は、キー比較部32の出力を無効化することと同等である。
以降の処理は、図9と同じなので説明は省略する。すなわち、この監視周期においては診断対象の演算器のみが演算器を作動させる関数を実行して、演算結果をキーコード入力レジスタ41に入力する。図11のような処理によれば、全ての演算器を診断することなく、消費電力を抑制でき、故障率の高い演算器ほど高頻度に診断することができる。
〔キー比較部32が割込み信号を出力した場合〕
図12は異常が検出された場合にキーコード履歴レジスタ43に記録される履歴の一例を示す図である。図12では、キーコード入力レジスタ41の値とキーコード設定レジスタの値とが一致していない。この場合、キー比較部32は割込み信号を出力するだけでなく、キーコード履歴レジスタ43に異常が検出されたことを示す不一致信号を出力する。図では“FF”が、異常が検出されたことを示す履歴である。
図13は、キー比較部32が割込み信号を出力した場合のCPU11の処理手順を示すフローチャート図の一例である。
INTC14は周辺機器からの割込み要求を監視しているので、INTC14はキー比較部32から割込み信号を受け付けたか否かを判定する(S210)。キー比較部32から割込み信号を受け付けない場合(S210のNo)、CPU11はそれまでの処理(アイドルタスク)を継続する。
キー比較部32から割込み信号を受け付けた場合(S210のYes)、INTC14はより優先順位の低い処理を実行中か否かを判定する(S220)。キー比較部32から割込み信号よりも優先順位の低い処理を実行していない場合(S220のNo)、CPU11はそれまでの処理を継続する。
より優先順位の低い処理を実行している場合(S220のYes)、INTC14はCPU11に割込みして異常処理対応ソフトを起動する(S230)。この異常処理対応ソフトは、演算器に異常が検出された場合に、異常が検出された演算器の特定、異常の検出履歴の記憶等を行う。なお、閉塞処理が内部リセットの場合、フリーランカウンタ38がオーバーフローする前に異常対応ソフトを実行することが好ましい。
まず、CPU11は有効なキーコード履歴レジスタ43を全て読み出す(S240)。キーコード有効レジスタ31を参照すれば、有効なキーコード履歴レジスタ43が明かとなる。
次に、CPU11は異常の履歴を有するキーコード履歴レジスタ43のアドレスに基づき演算器を特定する(S250)。CPU11はアドレステーブルから“FF”と記録されているキーコード履歴レジスタ43に対応づけられた演算器を特定する。
そして、CPU11は異常対応処理を実行する(S260)。CPU11は、例えば、異常が検出された演算器の識別情報と現在時刻を不揮発メモリに記憶したり、異常が検出された演算器のみをリセットする。
このように、本実施形態のWDT16は、キーコード履歴レジスタ43を有することで、CPU11の複数の演算器から異常が検出された演算器を特定することができる。
〔キーコード履歴レジスタの利用〕
これまでキーコード履歴レジスタ43には、キー比較部32が不一致信号を出力した際にその履歴が記憶されると説明したが、キーコード履歴レジスタ43に一致信号の履歴を記録してもよい。一致信号の履歴を記録することで、CPU11が演算器毎に確かに異常がなかったことを記録することができるようになる。
図14(a)はキーコード履歴レジスタ43に記録される履歴の一例を示す図である。図14(a)では、キーコード入力レジスタ41の値とキーコード設定レジスタの値とが一致している。この場合、キー比較部32は一致信号をAND回路33に出力するだけでなく、キーコード履歴レジスタ43に異常がなかったことを示す一致信号を出力する。図では“0F”が正常であることを示す履歴である。
他のレジスタセットのキー比較部32も一致信号を出力すると、キー比較部32は割込み信号を出力しない。このため、CPU11は最後の演算器の演算結果をキーコード入力レジスタ41に設定した後、アイドルタスクの終了前に、各キーコード履歴レジスタ43から履歴を読み出す。これにより、診断結果が正常であったことを記録することができる。
また、キーコード履歴レジスタ43に、一致・不一致の履歴だけでなく時刻を記録しておくことが有効な場合がある。
図14(b)は時刻が記録されたキーコード履歴レジスタ43の一例を示す図である。図14(b)では、キーコード入力レジスタ41の値とキーコード設定レジスタの値とが一致しているので、一致信号の履歴として“0F”が記録されるのは図14(a)と同様である。しかし、図14(b)では一致の履歴と共に日時「201005121534」が登録されている。「201005121534」は2010年5月12日15時34分である。
図14(c)は時刻が記録されたキーコード履歴レジスタ43の別の一例を示す図である。図14(c)では、キーコード入力レジスタ41の値とキーコード設定レジスタの値とが一致していないので、不一致の履歴として“FF”が記録されるのは図12と同様である。しかし、図14(c)では不一致の履歴と共に日時「201005121534」が登録されている。
時刻の登録は次のように行う。CPU11がキーコード入力レジスタ41に演算結果を格納する際、現在時刻を時計(カレンダ機能)から取得し、キーコード履歴レジスタ43の下位又は上位数ビットに現在時刻を記録する。また、キー比較部32が一致信号又は不一致信号をキーコード履歴レジスタ43に出力する際、現在時刻を破壊することなく、一致信号又は不一致信号の履歴を記録する。
また、キー比較部32に時計にアクセスする機能があれば、キー比較部32がキーコード履歴レジスタ43に一致信号又は不一致信号の履歴と共に、日時を登録してもよい。
そして、図14(b)のように異常が検出されない場合、CPU11は最後の演算器の演算結果と現在時刻をキーコード入力レジスタ41に設定した後、アイドルタスクの終了前に、各キーコード履歴レジスタ43から履歴を読み出す。これにより、診断結果が正常であったこと及び診断時刻を検出できる。各キーコード履歴レジスタ43の時刻を比較することで、演算器が同期して診断されているか否か等を検証できる。
図14(c)のように異常が検出された場合、キー比較部32が割込み信号を出力すると、CPU11は、各キーコード履歴レジスタ43から履歴を読み出す。これにより、診断結果に異常が検出されたこと及びその時刻を検出できる。異常が検出された演算器の診断時刻により、異常の頻度などを検証できる。
以上のように本実施形態のWDT16は、WDTにいくつかのレジスタと付随する回路を追加し、キーコード履歴レジスタ43に履歴を記録することで、コスト増を抑制して、異常がある演算器を特定することができる。
11 CPU
12 ROM
13 RAM
14 INTC
15 BRG
16 WDT
25 LSU
26 SH
27 ALU
28 MUL
29 FPU
41 キーコード入力レジスタ
42 キーコード設定レジスタ
43 キーコード履歴レジスタ
100 マイコン

Claims (16)

  1. 複数の演算器を有するプロセッサと、
    各演算器を選択的に作動させる関数が記述されたプログラムを記憶するプログラム記憶手段と、
    前記演算器による前記関数の演算結果を記憶する第一の記憶手段と、
    前記演算器が前記関数を正常に実行して得られる期待値を記憶する第二の記憶手段と、
    前記演算結果と前記期待値を比較して前記演算器の異常を検出する第一の異常検出手段と、
    前記演算結果と前記期待値の比較結果を記憶する前記演算器に関連付けられた第三の記憶手段と、
    を有することを特徴とする情報処理装置。
  2. 前記演算器は、ALU、MPU又はFPUである、ことを特徴とする請求項1記載の情報処理装置。
  3. 前記第一の異常検出手段は、前記演算結果と前記期待値が一致しない場合、前記第三の記憶手段に、前記演算結果を出力した前記演算器の異常が検出されたという比較結果を記憶する、ことを特徴とする請求項1又は2記載の情報処理装置。
  4. 前記第一の異常検出手段は、前記演算結果と前記期待値が一致した場合、前記第三の記憶手段に正常であるという比較結果を記憶する、
    ことを特徴とする請求項1〜3いずれか1項記載の情報処理装置。
  5. 前記プロセッサは、前記演算結果を出力した際の時刻情報を、前記比較結果と共に前記第三の記憶手段に記憶する、
    ことを特徴とする請求項1〜4いずれか1項記載の情報処理装置。
  6. 前記第一の異常検出手段が出力した、各演算器による前記演算結果と前記期待値の比較結果を受け付ける第二の異常検出手段と、
    所定時間の経過を計測する時間計測手段と、を有し、
    前記第二の異常検出手段は、前記時間計測手段が所定の時間を計測するまでに、前記演算結果と前記期待値が一致したという比較結果を各演算器から得られない場合、複数の前記演算器のいずれかに異常があることを検出する、
    ことを特徴とする請求項1〜5いずれか1項記載の情報処理装置。
  7. 複数の各演算器の2つ以上が、同時並行的に前記関数を実行する、
    ことを特徴とする請求項1〜6いずれか1項記載の情報処理装置。
  8. 複数の各演算器は、時間的に重複することなく個別に前記関数を実行する、
    ことを特徴とする請求項1〜6いずれか1項記載の情報処理装置。
  9. 前記プログラムは、当該情報処理装置が装置を制御するために実行するアプリケーションソフトの一部として記述されているか、又は、プラットフォームの一部として記述されている、
    ことを特徴とする請求項1〜8いずれか1項記載の情報処理装置。
  10. 前記第二の異常検出手段と前記時間計測手段は、ウォッチドッグタイマ内に配置されている、
    ことを特徴とする請求項6項記載の情報処理装置。
  11. 前記異常検出手段は、前記演算結果と前記期待値が一致しない場合、前記プロセッサに割込みする、ことを特徴とする請求項3記載の情報処理装置。
  12. 前記プロセッサは、前記第一の異常検出手段からの割込み要求により実行中の処理を中断して、異常対応処理を開始する、ことを特徴とする請求項11記載の情報処理装置。
  13. 前記プロセッサは、前記第一の異常検出手段からの割込み要求に対し実行中の処理を継続する、ことを特徴とする請求項11記載の情報処理装置。
  14. 前記プロセッサは、前記関数を実行する前記演算器を所定の方法で選別し、
    前記関数を実行しない前記演算器の異常を検出する前記第一の異常検出手段の出力を無効化する、
    ことを特徴とする請求項1〜13いずれか1項記載の情報処理装置。
  15. 複数の演算器を有するプロセッサと、バスを介して接続されるウォッチドッグタイマであって、
    前記プロセッサがプログラム記憶手段から演算器を選択的に作動させる関数が記述されたプログラムを読み出し、前記演算器に前記関数を実行させて得た演算結果を記憶させる第一の記憶手段と、
    前記演算器が前記関数を正常に実行して得られる期待値を記憶する第二の記憶手段と、
    前記演算結果と前記期待値を比較して前記演算器の異常を検出する第一の異常検出手段と、
    前記演算結果と前記期待値の比較結果を記憶する前記演算器に関連付けられた第三の記憶手段と、
    を有することを特徴とするウォッチドッグタイマ。
  16. 複数の演算器を有するプロセッサと、各演算器を選択的に作動させる関数が記述されたプログラムを記憶するプログラム記憶手段と、を有する情報処理装置の異常検出方法であって、
    前記演算器が前記関数を実行した演算結果を第一の記憶手段に記憶するステップと、
    前記演算器が前記関数を正常に実行して得られる期待値を第二の記憶手段に記憶するステップと、
    第一の異常検出手段が、前記演算結果と前記期待値を比較して前記演算器の異常を検出するステップと、
    前記演算結果と前記期待値の比較結果を前記演算器に関連付けられた第三の記憶手段に記憶するステップと、
    を有することを特徴とする異常検出方法。
JP2010203291A 2010-09-10 2010-09-10 情報処理装置、ウォッチドッグタイマ、異常検出方法 Pending JP2012059127A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010203291A JP2012059127A (ja) 2010-09-10 2010-09-10 情報処理装置、ウォッチドッグタイマ、異常検出方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010203291A JP2012059127A (ja) 2010-09-10 2010-09-10 情報処理装置、ウォッチドッグタイマ、異常検出方法

Publications (1)

Publication Number Publication Date
JP2012059127A true JP2012059127A (ja) 2012-03-22

Family

ID=46056124

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010203291A Pending JP2012059127A (ja) 2010-09-10 2010-09-10 情報処理装置、ウォッチドッグタイマ、異常検出方法

Country Status (1)

Country Link
JP (1) JP2012059127A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015186170A1 (ja) * 2014-06-02 2015-12-10 三菱電機株式会社 演算回路診断装置および演算回路診断プログラム
CN113671894A (zh) * 2015-11-05 2021-11-19 三菱电机株式会社 功能单元及控制装置

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015186170A1 (ja) * 2014-06-02 2015-12-10 三菱電機株式会社 演算回路診断装置および演算回路診断プログラム
CN113671894A (zh) * 2015-11-05 2021-11-19 三菱电机株式会社 功能单元及控制装置
CN113671894B (zh) * 2015-11-05 2024-02-13 三菱电机株式会社 功能单元及控制装置

Similar Documents

Publication Publication Date Title
US8090982B2 (en) Multiprocessor system enabling controlling with specific processor under abnormal operation and control method thereof
CN102354294B (zh) 一种星载dsp芯片的空间单粒子翻转检测方法
US20090113240A1 (en) Detecting Soft Errors Via Selective Re-Execution
US5109381A (en) Apparatus and method for detecting errors in a pipeline data processor
US10810094B2 (en) Methods and apparatus for anomaly response
GB2362729A (en) Memory access debug using an emulator
US9251340B2 (en) Malicious activity detection of a processing thread
US9348681B2 (en) Apparatus and method for detecting fault of processor
Wei et al. Comparing the effects of intermittent and transient hardware faults on programs
US20020116670A1 (en) Failure supervising method and apparatus
JP4893427B2 (ja) マイクロコンピュータシステム
US9088597B2 (en) Malicious activity detection of a functional unit
JP2012059127A (ja) 情報処理装置、ウォッチドッグタイマ、異常検出方法
JP5517301B2 (ja) データ処理システム
US8954794B2 (en) Method and system for detection of latent faults in microcontrollers
US11656964B2 (en) Processor with non-intrusive self-testing
JP2019114244A (ja) 電子制御装置
JP2013061783A (ja) マルチコア・プロセッサ
JP5057911B2 (ja) マルチプロセッサシステム
JP5733515B2 (ja) Ras機能を備える組み込み機器
US8195926B2 (en) Method and system for purging pattern history tables as a function of global accuracy in a state machine-based filtered gshare branch predictor
US11645185B2 (en) Detection of faults in performance of micro instructions
WO2012137321A1 (ja) 情報処理装置、及びその方法
US9342359B2 (en) Information processing system and information processing method
WO2011142015A1 (ja) 演算器異常判定装置及び方法