以下に図面を参照しながら、好適な実施形態について説明する。以下の実施形態に示す具体的な数値等は、実施の形態の理解を容易とするための例示にすぎず、特に断る場合を除き、それに限定されるものではない。また、以下の記載及び図面では、説明の明確化のため、当業者にとって自明な事項等については、適宜、省略及び簡略化がなされている。
<実施の形態1>
まず、本実施の形態1について、図面を用いて、その構成と動作を説明する。
図1は、高い演算性能が必要となる車載ECU(Electronic Control Unit)1のADAS(Advanced Driver Assistance System)向けのCPUシステム2の一例の構成を示すブロック図である。車載ECU1は、CPUシステム(メインマイコン)2、外付けのメモリとして複数のDDR(Double-Data-Rate)メモリ8を備える。CPUシステム2は、内部の処理回路として、マルチコア構成のCPU(マルチコア)10、マルチコア構成のハードウェアアクセラレータ(マルチコア)11、DMAC(Direct Memory Access Controller)12、RAM(Random Access Memory)13、その他周辺回路14を備える。また、CPUシステム2は、外部とのインタフェース回路として、センサI/F15、アクチュエータI/F16、DDR I/F17、その他I/F18を備える。
これらの回路10〜18は、内部のシステムバスに接続されている。センサI/F15には、前段に位置するレーダー及びカメラ等の自動車に搭載されたセンサユニットが接続される。アクチュエータI/F16には、後段に位置するステアリング及びブレーキ等の自動車に搭載されたアクチュエータユニットが接続される。また、DDR I/F17には、複数のDDRメモリ8が接続される。
CPU10は、センサユニットの検知結果に応じて、アクチュエータユニットを制御する。センサユニットは、検知した内容を示すセンサデータを生成する。センサデータは、レーダーであれば、例えば、障害物までの距離を示すデータであり、カメラであれば、例えば、撮像により得られた画像を示すデータである。CPU10は、センサユニットが生成したセンサデータをセンサI/F15を介して取得し、取得したセンサデータに基づいて自動車の進行方向に障害物が存在するか否かを判定する。CPU10は、障害物が存在すると判定した場合、障害物を回避するようにアクチュエータユニットを制御する制御データを生成し、アクチュエータI/F16を介してアクチュエータユニットに送信する。制御データは、ステアリングに向けたものであれば障害物の存在しない方向に自動車の進行方向を変更するように制御するデータであり、ブレーキに向けたものであれば障害物の手前で自動車を停止させるように制御するデータである。
なお、上述の説明では、CPU10がプリクラッシュセーフティシステムとしての制御を実施する場合について説明したが、これに限られない。CPU10は、プリクラッシュセーフティシステム以外の任意の制御を実施するようにしてもよい。
ここで、RAM13又はDDRメモリ8には、上述の制御を実行させる命令を含むプログラム(ソフトウェア)が格納される。CPU10は、RAM13又はDDRメモリ8に格納されたプログラムを実行することで、上述の制御を実現する。
ハードウェアアクセラレータ11は、CPU10による上述の制御における演算処理の一部を補助的に実行する。例えば、ハードウェアアクセラレータ11は、センサデータに基づいて自動車の進行方向に障害物が存在するか否かを判定する際に、センサデータに関する演算処理の一部を補助的に実行する。ハードウェアアクセラレータ11として、例えば、複数のGPUコアを含むGPU(Graphics Processing Unit)を利用してもよい。
DMAC12は、システムバスに接続された各回路13〜18の間でのデータ転送を実行する。例えば、DMAC12は、センサユニットが生成したセンサデータをセンサI/F15及びDDR I/F17を介してDDRメモリ8に転送する。これにより、CPU10は、センサユニットが生成したセンサデータをDDRメモリ8から取得可能となる。また、DMAC12は、DDRメモリ8に格納された制御データをDDR I/F17及びアクチュエータI/F16を介してアクチュエータユニットに転送する。これにより、CPU10は、DDRメモリ8に制御データを格納することでアクチュエータユニットに制御データを送信可能となる。
RAM13は、各種データが格納される。RAM13は、例えば、CPU10及びハードウェアアクセラレータ11の演算処理に関するデータが格納される。また、CPUシステム2は、その他周辺回路14として任意の回路を備えるようにしてよい。
センサI/F15は、センサユニットとシステムバスとを接続するためのインタフェース回路である。アクチュエータI/F16は、アクチュエータユニットとシステムバスとを接続するためのインタフェース回路である。DDR I/F17は、DDRメモリ8とシステムバスとを接続するためのインタフェース回路である。その他I/F18は、サブマイコン等の車載ECU1が備える他のユニットとシステムバスとを接続するためのインタフェース回路である。
DDRメモリ8には、各種データが格納される。このデータは、例えば、上述したセンサデータ及び制御データ等である。すなわち、上述したように、CPU10は、DMAC12の転送機能を利用することで、DDRメモリ8を介して、センサユニットからセンサデータを取得し、アクチュエータユニットに制御データを送信する。DDRメモリ8には、例えば、CPU10及びハードウェアアクセラレータ11の演算処理に関するデータが格納される。
図2は、図1に示したCPU10の構成を示すブロック図である。4つのCPUコア101〜104とCPU共通回路120を備える。それぞれのCPUコア101〜104にはL1キャッシュ(I,D)111〜114が付随する。ここで、Iは命令を、Dはデータを指すものである。また、CPU共通回路120は、割り込みコントローラ121、システムタイマー122、キャッシュコヒーレンシーコントローラ123、L2キャッシュ124、L2キャッシュコントローラ125、システムバスI/F126、デバッグ・トレースI/F127を備える。
CPUコア101〜104は、上述のCPU10における演算処理を分散して実行する回路である。CPUコア101〜104のそれぞれは、演算処理として、RAM13又はDDRメモリ8に格納されたデータDに対して、RAM13又はDDRメモリ8に格納された命令Iを実行する。CPUコア101〜104は、この命令I及びデータDがL2キャッシュ124にキャッシュされている場合には、その命令I及びデータDを利用する。また、CPUコア101〜104のそれぞれは、L1キャッシュ111〜114のそれぞれに命令I及びデータDがキャッシュされている場合には、その命令I及びデータDを利用する。なお、このデータDは、例えば、上述のセンサデータが該当する。また、この命令Iは、例えば、上述のプログラムに含まれる命令が該当する。
L1キャッシュ111〜114のそれぞれは、CPUコア101〜104のそれぞれに対応し、CPUコア101〜104のそれぞれの演算処理に関するデータが一時的に格納されるキャッシュメモリである。CPUコア101は、自身に対応するL1キャッシュ111を利用し、CPUコア102は、自身に対応するL1キャッシュ112を利用し、CPUコア103は、自身に対応するL1キャッシュ113を利用し、CPUコア104は、自身に対応するL1キャッシュ114を利用する。
割り込みコントローラ121には、CPUシステム2の外部からの割り込み要因や内部の割り込み要因が入力される。より具体的には、割り込みコントローラ121は、複数の割り込み要因のそれぞれに対応付けられた複数の割り込み信号が外部又は内部から入力される。割り込みコントローラ121は、割り込み信号の入力を受けた場合、任意のCPUコアに割り込みを発生させる。
システムタイマー122は、CPUシステム2の時刻を計測する回路である。CPUコア101〜104は、システムタイマー122から時刻情報を取得することが可能である。また、システムタイマー122は、所定の時間が経過する毎にCPUコア101〜104に対してタイマー割り込みを発生させることが可能である。
キャッシュコヒーレンシーコントローラ123は、L1キャッシュ111〜114のキャッシュコヒーレンシーを実現する回路である。例えば、キャッシュコヒーレンシーコントローラ123は、CPUコア101〜104のいずれかによってRAM13内のあるアドレスに対してデータの書き込みが発生した場合、他のCPUコアに対応するL1キャッシュに格納されている、そのアドレスのデータを無効化する。
L2キャッシュ124は、CPUコア101〜104が演算処理で利用するデータが一時的に格納されるキャッシュメモリである。L2キャッシュ124は、L1キャッシュ111〜114よりも下位のキャッシュメモリである。
L2キャッシュコントローラ125は、L2キャッシュ124の動作を制御するとともに、CPUコア101〜104のそれぞれに対応するL1キャッシュ111〜114とL2キャッシュ124との間のキャッシュコヒーレンシーを実現する回路である。L2キャッシュコントローラ125は、CPUコア101〜104からのCPU共通回路120を介したデータのリード及びライトを常時確認することで、L2キャッシュ124のキャッシュコヒーレンシーを実現する。
システムバスI/F126は、CPU10をシステムバスに接続するためのインタフェース回路である。デバッグ・トレースI/F127は、CPUシステム2の外部にデバッガを接続するためのインタフェース回路である。
図3は、本実施の形態1に係るCPUシステム3の構成を示すブロック図である。図1に示したCPUシステム2に対して、強い機能安全を実現するために、CPU20の故障診断のための診断テストコントローラ21とエラー出力・制御回路22を追加したものである。なお、CPU20は、CPU10に対して診断のための回路が追加されたものであり、詳細については後述する。ここで、CPUシステム3の外付けのメモリとして、診断テストコントローラ21にテストデータを入力するFLASHメモリ9もCPUシステム3に追加的に接続されている。
診断テストコントローラ21は、診断テスト回路に対応するものであり、CPU20の故障診断を実施する。診断テストコントローラ21は、FLASHメモリ9に格納されたテストデータを取得し、取得したテストデータに基づいて、CPU20が故障しているか否かを判定する。診断テストコントローラ21は、CPU20が故障であると判定した場合、CPU20の故障を通知する通知信号をエラー出力・制御回路22に出力する。
エラー出力・制御回路22は、CPU20の故障が検出された場合における制御を実行する。より具体的には、エラー出力・制御回路22は、CPU20の故障を通知する通知信号を診断テストコントローラ21から受けた場合、CPU20の故障を自動車の搭乗者に通知する処理、又は、故障が通知されたCPU20における故障箇所を縮退する処理を実行する。エラー出力・制御回路22は、CPU20の故障を自動車の搭乗者に通知する処理として、自動車の搭乗者への故障の通知を指示する指示信号をその他I/F18を介してサブマイコンに送信する。サブマイコンは、エラー出力・制御回路22からの指示信号の受信に応じて、自動車に搭載された出力装置によって故障を通知する。例えば、出力装置が故障を通知するLED(Light Emitting Diode)である場合、サブマイコンは、LEDを点灯させる。出力装置が表示装置である場合、サブマイコンは、故障を通知する画像を表示装置に表示する。出力装置がスピーカーである場合、サブマイコンは、故障を通知する音声をスピーカーから出力する。
FLASHメモリ9は、テストデータ記憶部に対応するものであり、上述したように、テストデータが格納される。RAM13、DDRメモリ8、FLASHメモリ9は、各種データ(情報)が格納される記憶部として機能する。
図4は、図3に示したCPU20の構成を示すブロック図である。図4に示すCPU20は、図2に示したCPU10に対して、CPUコア101〜104にそれぞれスキャンテスト用回路201〜204を追加したものである。
診断テストコントローラ21は、上述のCPU20の診断テスト回路として、CPU20に含まれるCPUコア101〜104の故障診断を実施する。診断テストコントローラ21は、例えば、CPUコア101〜104の故障診断をスキャンテストによって実施する。具体的には、診断テストコントローラ21は、それぞれのCPUコア101〜104のスキャンテスト用回路201〜204に対して、スキャンテストの制御を行う。また、診断テストコントローラ21は、CPU20に対して、故障診断のためのスキャンテスト(診断テスト)の開始又は終了を通知するフラグ信号を出力する。このフラグ信号は、CPU共通回路120に設けられた入力ポート(図示せず)に入力されるか、内部の割り込み要因の1つとして割り込みコントローラ121に入力される。
このフラグ信号は、診断テスト対象のCPUコアを指定可能な信号である。フラグ信号は、CPUコア毎に別々の信号線を介して送受信することで、スキャンテスト対象のCPUコアを指定可能としてもよい。また、フラグ信号は、その中にスキャンテスト対象のCPUコアを示すデータを含めることで、スキャンテスト対象のCPUコアを指定可能としてもよい。また、フラグ信号は、割り込み要因を通知する信号とする場合には、CPUコア101〜104のそれぞれで異なる割り込み要因を予め対応付けておくことで、割り込み要因に対応するCPUコアとして、スキャンテスト対象のCPUコアを指定可能としてもよい。
この故障診断により、診断テストコントローラ21は、CPUコア101〜104の故障を検出する。そして、CPUコア101〜104のうち、故障が検出されたCPUコアが異常箇所として、上述したエラー出力・制御回路22によって縮退処理が施される。
図5は、図4に示したCPUコア101とスキャンテスト用回路201の構成を示すブロック図である。CPUコア101は、スキャンテストのモードのときに有効となる複数本(例えば、480本)のスキャンチェーンを有している。CPUコア101とスキャンテスト用回路201は、診断テストコントローラ21からの、スキャンテストのモードへの切り換えを指示するテストモード切り換え信号の入力に応じて、通常のモードからスキャンテストのモードに移行する。
また、スキャンテスト用回路201は、スキャンデータ伸長回路211、スキャンデータ圧縮回路212、テスト用ラッパ213、テスト用ラッパ214を備える。
診断テストコントローラ21は、FLASHメモリ9から取得したテストデータに含まれる入力テストパターンをスキャンデータ伸長回路211に入力する。診断テストコントローラ21からスキャンデータ伸長回路211に入力される入力テストパターンは、複数ビット(例えば、6ビット)が並列に並んだ形態で入力される。スキャンデータ伸長回路211は、入力テストパターンをCPUコア101が有するスキャンチェーンの本数(例えば、480ビット)に拡大し、CPUコア101が有するスキャンチェーンに入力する。また、スキャンデータ圧縮回路212は、そのスキャンチェーンの出力を、CPUコア101が有するスキャンチェーンの本数から複数ビット(例えば、2ビット)が並列に並んだ形態に縮小する。スキャンデータ圧縮回路212は、縮小した複数ビットのデータを出力結果データとして診断テストコントローラ21に出力する。このようにスキャンテストの入出力本数をテスト対象の回路が有するスキャンチェーン本数よりも減らす(圧縮する)方式を圧縮スキャン方式と呼ぶ。
テスト用ラッパ213は、CPUコア101とL1キャッシュ111との間に挿入されている。また、テスト用ラッパ214は、CPUコア101とCPU共通回路120との間に挿入されている。
テスト用ラッパ213は、スキャンテストのモードのときに、CPUコア101とL1キャッシュ111との間で送受される通常の入出力信号を遮断するための回路である。テスト用ラッパ214は、スキャンテストのモードのときに、CPUコア101とCPU共通回路120との間で送受される通常の入出力信号を遮断するための回路である。
テスト用ラッパ213は、通常のモードのときには、CPUコア101とL1キャッシュ111との間で送受される通常の入出力信号を導通させる。テスト用ラッパ214は、通常のモードのときには、CPUコア101とCPU共通回路120との間で送受される通常の入出力信号を導通させる。テスト用ラッパ213とテスト用ラッパ214とCPUコア101は、診断テストコントローラ21からの、通常のモードへの切り換えを指示するテストモード切り換え信号の入力に応じて、スキャンテストのモードから通常のモードに移行する。通常のモードのときには、CPUコア101が有するスキャンチェーンが無効となる。
なお、CPUコア102〜CPUコア104に対応して配置されたスキャンテスト用回路202〜204も、図5と同等の構成であるため、説明を省略する。
図6に、本実施の形態1におけるCPU20の各CPUコア101〜104の診断テストの実行の様子を示す。自動車のADAS向けのCPUシステム3は、人間が頭で行っている綿密な認識・判断の処理を、短時間にこなし得る高い演算性能が必要であり、4つの高性能なCPUコア101〜104を有するマルチコア構成のCPU20を備えている。通常動作では、それぞれのCPUコア101〜104には認識・判断の処理のタスク(一固まりの処理のプログラム)が割り当てられ、4つのCPUコア101〜104のトータル性能が活用されて認識・判断の処理が実行される。この認識・判断の処理は、例えば、上述のセンサユニットの検知結果に応じてアクチュエータユニットを制御する処理に相当する。人間が最新の状況を認識して取るべき行動を判断するのにかかる時間は0.1秒のオーダーである。機能安全の観点からは、万が一CPUシステム3の中核を成すCPU20のCPUコア101〜104に故障が発生した場合でも、それと同程度の時間で安全な状態に移行させる(これが取るべき行動となる)ことが重要であり、強い機能安全のために、高い故障検出率でCPUコア20の故障を見つける必要がある。故障が発生してから安全な状態に移行させるまでをFTTI(フォールトトレラント時間間隔)の時間内に実現しないといけない。
そのため、診断テストコントローラ21は、CPUコア101〜104を順番に選択しながら、FTTI以下の診断テスト間隔(例えば、0.1秒)で周期的に各CPUコア101〜104のそれぞれの診断テストを行う。この診断テストは、選択した1つのCPUコアをスキャンテストのモードに切り換え、ハードウェアとしての高速なスキャンテストを行うものである。診断テストが実行されるCPUコアは、この診断テスト時間(例えば、0.01秒以下)の間だけは通常動作が行えない状態となるが、残りの3つのCPUコアはこの間も通常動作を継続している。そのため、このときは一時的に性能が3/4に低下するが、診断テストが終了すれば本来の性能に戻る。平均すれば、このような診断テストの実行による性能の低下は10%未満に収まる。なお、CPU共通回路120の故障診断のためには、その回路を二重化する方法が一例として挙げられる。このとき、二重化した各回路の出力信号(複数本あり)の一致を確認する比較回路を設け、いずれか一つでも出力信号の不一致が検出された場合には、CPU共通回路120の故障を通知する通知信号をエラー出力・制御回路22に出力するようにすればよい。
すなわち、図6に示すように、診断テストコントローラ21は、CPUコア101〜104それぞれのスキャンテストの実施時間帯(実施期間)が相互に重複しないように所定の順序で周期的スキャンテストを実施する。診断テストコントローラ21は、CPUコア101〜104の全てで同一の診断テスト間隔で周期的にスキャンテストを実施することで、スキャンテストの実施時間帯(実施期間)が相互に重複しにくくなるようにしている。この診断テスト間隔は、例えば、FTTI(例えば、0.1秒)以下の間隔となるように予め任意に定められる。CPUコア101〜104のそれぞれの診断テスト時間は、相互に重複しないのであれば、必ずしも等間隔(診断テスト間隔×1/4)でずれている必要はない。しかし、好ましくは、CPUコア101〜104のそれぞれの診断テスト時間を等間隔でずらすようにすることで、診断テストの実施時間帯(実施期間)のタイミング(近接または離間)による性能の偏りを低減することができる。
図7には、図6に示したCPUコア101の診断テストの実行の詳細を示す。診断テストとしては、実際にはハードウェアとしてのスキャンテスト実行の前後に、若干のソフトウェアでの処理が行われる。通常のモードからスキャンテストのモードに移行するときには、CPUコア101で実行中のタスクを中断又は終了させる処理が行われる。CPUコア101は、診断テストコントローラ21からCPU20への、診断テストの開始を通知するフラグ信号の入力に応じて、実行中のタスクを中断又は終了させる処理を実行する。すなわち、このフラグ信号は、診断テスト対象のCPUコア101を指定しているものとする。また、CPU共通回路120は、診断テストコントローラ21からCPU20へのこのフラグ信号の入力に応じて、CPU共通回路120から診断テスト対象のCPUコア101へのアクセスを抑止する。この後で、CPUコア101及びそのスキャンテスト用回路201は、診断テストコントローラ21からの、スキャンテストのモードへの切り換えを指示するテストモード切り換え信号の入力に応じて、ハードウェアとしてのスキャンテストのモードに入る。
タスクは一固まりの処理のプログラムであり、所定の演算処理を多数回ループさせる処理が中心である。そのため、所定の演算処理の終盤近くまで実行していた場合は、CPUコア101は、所定の演算処理を完了させ、1回のループを抜けるまで処理を実行させて所定の演算処理の結果のデータを外部のメモリ(例えば、DDRメモリ8)に格納してから、タスクを終了させる。所定の演算処理の中盤付近を実行中の場合は、CPUコア101は、その時点での内部のワークデータをメモリ(例えば、RAM13)に書き出してから、タスクを中断させる。中断中のタスクを復帰させる場合は、メモリに一時保存した内部のワークデータを読み出した上で、そこから処理を再開させることになる。所定の演算処理の序盤付近を実行している場合は、CPUコア101は、所定の演算処理実行をあきらめ、内部のワークデータは破棄してから、タスクを終了させてもよい。タスクを終了させた場合には、次に同じタスクを新たに投入する場合は、ループの始まりから処理の実行を開始させることになる。
一方、スキャンテストのモードから通常のモードに移行するときには、CPUコア101は、中断させたタスクを再開(復帰)させる、または終了させたタスクと同じタスクを新たに投入する処理を行う。これはCPUコア101がスキャンテストのモードから抜け、CPUコア101にハードウェアリセットが行われた後に行われる処理である。CPUコア101は、診断テストコントローラ21からの、通常のモードへの切り換えを指示するテストモード切り換え信号の入力に応じて、スキャンテストのモードから抜ける。すなわち、CPUコア101は、スキャンチェーンを無効にする。診断テストコントローラ21は、そのテストモード切り換え信号のCPUコア101への入力後に、診断テストの対象となっていたCPUコア101にリセット信号を出力し、CPUコア101のハードウェアリセットを実行する。この後で、CPU共通回路120は、診断テストコントローラ21からCPU20へ、診断テストの終了を通知するフラグ信号が入力されたときに、診断テストの対象となっていたCPUコア101へのアクセス抑止を解除する。このフラグ信号は、診断テストの対象となっていたCPUコア101を指定しているものとする。
この後に、CPUコア101を通常動作が可能な状態に設定するためのソフトウェアによる初期化が行われた後に、タスクを復帰又は投入させる処理が行われる。短いながらも、これらのソフトウェアでの処理(タスクの中断又は終了処理時間OH1とタスクの復帰又は投入処理時間OH2)にかかる時間がオーバーヘッド時間となる。このオーバーヘッド時間と、純粋にハードウェアとしてのスキャンテストにかかる診断時間との合計が診断テスト時間となる。
ここで、上述のタスクの処理がループの序盤、中盤、終盤のいずれまで実行しているかは、例えば、処理の進行状況をメモリ(例えば、RAM13)に記録することによって判別可能とする。なお、1回のループにおいて実行される所定の処理は、序盤、中盤、及び終盤の範囲が予め定められているものとする。タスクの処理として、ループの序盤の処理が終了したことを示す進行状況記録データをメモリに格納する処理を含め、中盤の処理が終了したことを示す進行状況記録データをメモリに格納する処理を含めておく。
これにより、CPUコア101は、タスクの実行時に、ループにおける処理の進行状況に応じて進行状況記録データをメモリに格納する。CPUコア101は、スキャンテストのモードに移行する際に、序盤の処理が終了したことを示す進行状況記録データがメモリに格納されている場合には、ループの中盤を実行中であると判定する。CPUコア101は、中盤の処理が終了したことを示す進行状況記録データがメモリに格納されている場合には、ループの終盤を実行中であると判定する。CPUコア101は、いずれの進行状況記録データもメモリに格納されていない場合には、ループの序盤を実行中であると判定する。なお、CPUコア101はループが終了したときに進行状況記録データを削除することで、2回目以降のループにおける、このループの序盤を実行中との判定を可能とすればよい。そして、CPUコア101は、ループの序盤又は終盤を実行中であると判定した場合には、タスクを終了し、ループの中盤を実行中であると判定した場合には、ワークデータをメモリに一時的に格納し、中断した処理を再開可能とすればよい。なお、ワークデータとは、例えば、CPUコア101のレジスタのデータである。
これによれば、タスクの中断又は終了処理時間OH1と、タスクの復帰又は投入処理時間OH2とを低減することができる。これは、ループの序盤を実行中で演算のやり直しにかかる時間が短い場合のみにワークデータを破棄してタスクを速やかに終了するようにしているからである。また、ループの中盤を実行中で演算のやり直しにかかる時間が長い場合のみにワークデータを保存して、そのワークデータにより処理を再開するようにしているからである。また、ループの終盤を実行中でループの終了まで処理を実行しても時間がかからない場合のみにループの終了まで処理を実行して、処理の再開時にワークデータの復元を不要としているからである。
なお、上述のループの処理は、例えば、上述したセンサデータに基づいてアクチュエータユニットを制御する処理となる。このループの処理は、CPUコア101が、その処理を実現するタスクを実行することで定期的に繰り返し実行される。
なお、CPUコア102〜CPUコア104の診断テストの実行の詳細も、図7と同様であるため、説明を省略する。
図8は、図3に示した診断テストコントローラ21の構成を示すブロック図である。テスト制御回路221、テストデータ入力回路222、テスト結果比較回路223、セレクタ224、周期カウンタ225を備える。
テスト制御回路221は、周期カウンタ225からの周期的なトリガー信号に基づき、CPUコア101〜104のいずれか1つを順番に選択するとともに、診断テストを開始するタイミングを決定する。すなわち、テスト制御回路221は、トリガー信号が所定回数入力される毎のタイミングを、CPUコアの診断テストを開始するタイミングとして決定する。また、テスト制御回路221は、診断テストを開始するタイミングとなる毎に、診断テストの対象として選択するCPUコアを予め定めた順番に従って切り換える。よって、図6の例では、トリガー信号が所定回数カウントされる時間は、あるCPUコアでの診断テストの開始から、次のCPUコアの診断テストの開始までの時間に相当する。また、トリガー信号の所定回数のカウントが4回繰り返されて全てのCPUコアの診断テストを終えて一巡するまでの時間が、診断テスト間隔に相当する。
テスト制御回路221は、診断テストを開始するタイミングで、CPU20に対して診断テストの開始を通知するフラグ信号を出力して、今からどのCPUコアの診断テストを行うかを通知する。テスト制御回路221は、フラグ信号を出力してから、ソフトウェアによるタスクの中断又は終了の処理が終わるまでの時間が経過した後で、診断テストを行うCPUコア及びそのスキャンテスト用回路に対するテストモード切り換え信号を出力して、そのCPUコア及びそのスキャンテスト用回路をスキャンテストのモードに移行させる。
ここで、フラグ信号を出力してからテストモード切り換え信号を出力するまでの時間として、CPUコア101〜104によるタスクの中断又終了処理時間を十分に超えるだけの時間を予め定めておく。そして、テスト制御回路221は、診断テスト対象のCPUコア及びそのスキャンテスト用回路をスキャンテストのモードに移行させた後に、スキャンテストの開始を指示する指示信号をテストデータ入力回路222及びテスト結果比較回路223に出力する。
テストデータ入力回路222は、テスト制御回路221からの指示信号の入力に応じて、外付けのFLASHメモリ9からのテストデータの読み出しを開始し、入力テストパターン(6ビット)が並列に並んだ形態でCPUコアに対して順番に出力していく。この入力テストパターンは、スキャンテスト用回路201〜204に入力されるが、スキャンテストのモードとなっているスキャンテスト用回路のみで処理され、スキャンテストのモードとなっているCPUコアのみに入力される。
これにより、診断テスト対象のCPUコアのスキャンテストが実行開始される。入力テストパターンが出力されてからスキャンチェーンの長さに応じた所定の時間が経過した後で、その入力テストパターンの処理結果となる出力結果データが順番に診断テストコントローラ21に戻ってくる。ここで、診断テスト対象のCPUコアからの出力結果データがセレクタ224で選択されて、テスト結果比較回路223に入力される。セレクタ224は、テスト制御回路221により、診断テスト対象のCPUコアからの出力結果データを選択して、テスト結果比較回路223に出力するように制御される。
テスト結果比較回路223も、テスト制御回路221からの指示信号の入力に応じて、診断テストの動作を開始している。テスト結果比較回路223は、順番に出力結果データと、その期待値データ(2ビット)とを比較していく。この期待値データは、FLASHメモリ9から読み出されるテストデータに含まれている。テストデータ入力回路222は、入力テストパターンをCPUコアに出力してから上記スキャンチェーンの長さに応じた所定の時間が経過したときに、その入力テストパターンに対応する期待値データをテスト結果比較回路223に入力する。これにより、テスト結果比較回路223は、出力結果データが入力されるタイミングで、その期待値データも入力され、それらのデータの比較が可能となる。この仕組みについては、図9及び図10を参照して後述する。テスト結果比較回路223は、スキャンテストにおけるテストクロックのサイクル毎にこの比較処理を行い、データが一致していればOK、不一致ならばNGと判定する。一連の入力テストパターンがすべてCPUコアに入力され、その出力結果データがすべて出力された後で、最終の判定結果(OKまたはNG)が決定され、エラー出力・制御回路22に通知される。
すなわち、テスト結果比較回路223は、最終の判定結果をOKと決定した場合には、診断テスト対象のCPUコアは正常であることを通知する通知信号をエラー出力・制御回路22に出力する。また、テスト結果比較回路223は、最終の判定結果をNGと決定した場合には、診断テスト対象のCPUコアが故障していることを通知する通知信号をエラー出力・制御回路22に出力する。
図9には、本実施の形態1において図3に示したFLASHメモリ9に格納するテストデータの内容を示す。縦軸は下向きにFLASHメモリ9のアドレスが増えていく様子を示し、横軸はFLASHメモリ9のデータ単位である1バイト(8ビット)の並びを示している。この1バイトのデータ単位は、テストデータ入力回路222によって1回の読み出しで読み出される単位となる。1回で読み出される1バイトのテストデータは、上位の6ビットを入力テストパターンとし、下位の2ビットを期待値データとするデータ構成としている。それぞれの入力テストパターンは、CPUコアのスキャンチェーンの長さに対応したN個のデータ(各6ビット)で1つのセットを構成し、それが複数セットで入力テストパターンの全体を構成している(Nは、CPUコアの回路に応じて決まる正整数)。同様にして、入力テストパターンに対応してCPUコアから出力されるはずの出力結果の期待値データも、やはりN個のデータ(各2ビット)で1つのセットを構成し、それが複数セットで期待値データの全体を構成している。ここで、入力テストパターンと期待値データは、所定のアドレス分だけ対応関係をずらした(期待値データの方を後ろにずらした)状態で、FLASHメモリ9に格納されている。
図10に、図9に示したテストデータを用いて図8に示した診断テストコントローラ21によりスキャンテストを実行する様子を示す。テストデータ入力回路222がFLASHメモリ9から読み出した入力テストパターン(リードデータの上位6ビット)は、一定の処理遅延時間が経過した後で、CPUコアに対して出力される。テストデータ入力回路222は、入力テストパターンの1個のデータをCPUコアに入力する毎に、テストクロックもCPUコアに入力する。この動作をN回繰り返すことで、1セットの入力テストパターンがCPUコアのスキャンチェーンに入力される。そして、テストデータ入力回路222は、そのスキャンチェーンに入力した入力テストパターンによってCPUコアを動作させる。その後、テストデータ入力回路222は、CPUコアのスキャンチェーンの長さに対応した複数回のテストクロックをCPUコアに入力することでスキャンチェーンをシフトする。このときに、テストデータ入力回路222は、次の1セットの入力テストパターンも入力する。そして、その複数回のテストクロック分のサイクル数が経過するにつれて、CPUコアから1セットの出力結果データがテスト結果比較回路223に入力される。
一方、テストデータ入力回路222がFLASHメモリ9から読み出した期待値データ(リードデータの下位2ビット)も、一定の処理遅延時間が経過した後で、テスト結果比較回路223に供給される。そして、テスト結果比較回路223は、CPUコアからの出力結果データとそれに対応する期待値データとを、テストクロックのサイクル毎にオンザフライで比較する。すなわち、テスト結果比較回路223は、テストクロックのサイクル毎に、出力結果データ(2ビット)と、期待値データ(2ビット)とを順次比較していく。これを実現するために、図9に示した通り、FLASHメモリ9に格納する入力テストパターンと期待値データは、所定のサイクル数分だけ対応関係をずらした(期待値データの方を後ろにずらした)状態としている。
このように、本実施の形態1の例では、図10に示すように、あるセットにおける2番目の入力テストパターンがCPUコアに入力されるときに、その1つ前の入力テストパターンのセットに対応する出力結果データのセットがテスト結果比較回路223に入力され始める。言い換えると、入力テストパターンをCPUコアが入力されるときに、N+1回前に入力を開始した入力テストパターンのセットに対応する出力結果データのセットがテスト結果比較回路223に入力され始める。そのため、図9に示すように、FLASHメモリ9では、あるセットの入力テストパターンの先頭アドレスと、そのセットの入力テストパターンの出力結果データの期待値データの先頭アドレスとは、N+1回の読み出し分だけずれた位置としている。これによれば、テストデータ入力回路222が1バイトのテストデータを読み出して、そのテストデータに含まれる入力テストパターンをCPUコアに入力するときに、テスト結果比較回路223が、そのテストデータに含まれる期待値データとして、テスト結果比較回路223に入力される出力結果データに対応する期待値データを得ることができる。
テスト結果比較回路223は、最終の判定結果(OKまたはNG)として、すべてのサイクルでの比較結果が一致すればOKと判定し、1つのサイクルでも比較結果が不一致となればNGと判定する。
以上に説明した本実施の形態1によれば、複数のCPUコアのそれぞれのスキャンテストを、スキャンテストの実施時間帯(実施期間)が相互に重複しないように所定の順序で周期的に実施する。これによれば、スキャンテストの実施時間帯(実施期間)を相互に重複しないようにしているため、演算性能の低下を低減することができる。また、スキャンテストを周期的に実行しているため、CPUコアの故障を迅速に検出することができる。したがって、通常動作に与える影響(演算性能の低下)を小さく抑えながらも、機能安全のために求められる高い診断カバレッジを実現でき、万が一そのCPUコアに故障が発生した場合には速やかにそれを検出して安全な状態に移行させることができる。
また、本実施の形態1では、FLASHメモリ9は、複数の入力テストパターンと、複数の出力結果データの期待値となる複数の期待値データとが、入力テストパターンと所定のサイクル分前の入力テストパターンに基づいて生成される期待値データとが同時に読み出されるように格納されるようにしている。この所定のサイクルは、診断テストコントローラ21がCPUコアに入力テストパターンを入力してから、その入力テストパターンに基づいて生成された出力結果データが診断テストコントローラ21に出力されるまでのサイクルである。そして、診断テストコントローラ21は、FLASHメモリ9から期待値データを読み出し、前記入力テストパターンに応じた出力結果データと、オンザフライで順次比較していくことで診断中のCPUコアを診断するようにしている。これによれば、スキャンテストをオンザフライで実行することができるため、CPUコアの診断時間を短縮することができる。
<実施の形態2>
次に、本実施の形態2について、図面を用いて、その構成と動作を説明する。
この実施の形態2の構成と動作は、図3に示したCPUシステム3、図4に示したCPU20、そして図5に示したCPUコア101(CPUコア102〜104も同様)とスキャンテスト用回路201(スキャンテスト用回路202〜204も同様)のように、実施の形態1の構成と動作と基本的に同じである。また、実施の形態2のCPUコア101〜104の診断テストの実行の様子も、図6と図7に示したCPUコアの診断テストの実行の様子と同じである。
ただし、実施の形態2では、CPUコア101〜104に入力するスキャンテストのための入力テストパターンは8ビット(実施の形態1では6ビット)としている。そのため、実施の形態2では、CPUコア101〜104に付随するスキャンテスト用回路201〜204に含まれるスキャンデータ伸長回路211の構成はこれに対応したものとする。
これに関係して、実施の形態2では、FLASHメモリ9に格納するテストデータの内容(実施の形態1では図9)と診断テストコントローラ23によりスキャンテストを実行する様子(実施の形態1では図10)が実施の形態1とは異なる。
図11は、本実施の形態2に係る診断テストコントローラ23の構成を示すブロック図である。図11に示した診断テストコントローラ23の構成は、図8に示した実施の形態1における診断テストコントローラ21と基本的に同じであるが、その一部の動作は実施の形態1とは異なる。より具体的には、図11に示す実施の形態2に係るテストデータ入力回路226及びテスト結果比較回路227の動作が、図8に示した実施の形態1に係るテストデータ入力回路222及びテスト結果比較回路223の動作とは異なる。
テストデータ入力回路226は、上述したように、入力テストパターンとして8ビットのデータをCPUコア101〜104に入力する。また、これに関係して、テストデータ入力回路226は、期待値データも8ビットずつ3回、テスト結果比較回路227に入力する。詳細には、図12に示すFLASHメモリ9に格納されるデータの内容とあわせて後述する。
テスト結果比較回路227は、テストクロックのサイクル毎に出力結果データと期待値データとを比較せず、出力結果データを累積演算する。テスト結果比較回路227は、その累積演算をする回路であるLFSR(線形帰還シフトレジスタ)228を有している。テスト結果比較回路227は、出力結果データの累積演算結果(例えば、24ビット)に基づいて、CPUコアが故障しているか否かを最後に一括して判定する。
図12には、本実施の形態2においてFLASHメモリ9に格納するテストデータの内容を示す。入力パターンデータ(8ビット)がN個で1つのセットを構成し、それが複数セットで入力テストパターンの全体を構成している。FLASHメモリ9には、この一連の入力テストパターンがまず格納され、その次に1つの累積期待値データ(例えば、24ビット)が格納される。この累積期待値データは、一連の入力テストパターンに対応してCPUコアから出力されるはずの出力結果データを、テストクロックのサイクル毎に累積して得られる1つの累積出力の期待値データである。この累積処理は、実際にはLFSRによりシグネチャを生成する処理である。
図13に、図12に示したテストデータを用いて診断テストコントローラ21によりスキャンテストを実行する様子を示す。テストデータ入力回路226がFLASHメモリ9から読み出した入力テストパターン(リードデータそのものの8ビット)は、一定の処理遅延時間が経過した後で、CPUコアに対して出力される。テストデータ入力回路226は、実施の形態1で説明したように、CPUコアのスキャンチェーンに1セットの入力テストパターンを入力し、CPUコアを動作させる。その後、テストデータ入力回路226は、CPUコアのスキャンチェーンの長さに対応した複数回のテストクロックをCPUコアに入力することでスキャンチェーンをシフトする。その複数回のテストクロック分のサイクル数が経過するにつれて、CPUコアから1セットの出力結果データがセレクタ224を経由してテスト結果比較回路227に入力される。
この動作が全ての入力テストパターンのセットに対して実施されるときに出力される全ての出力結果データ(2ビット)が、テストクロックのサイクル毎にテスト結果比較回路227の中にあるLFSR228に入力されてオンザフライで累積処理され、最終的に一連の入力テストパターンに対応した出力結果データのシグネチャが生成される。そして、テスト結果比較回路227は、この累積出力データ(シグネチャ)と最後にFLASHメモリ9から読み出された累積期待値データ(24ビット)とを比較し、最終的な判定結果(OKまたはNG)を決定する。
このように、本実施の形態2では、テストデータ入力回路226は、FLASHメモリ9から入力テストパターンが格納される領域のデータを読み出している場合は、1回の読み出しで取得した1バイト(8ビット)のデータの全てをCPUコアに出力する。テストデータ入力回路226は、入力テストパターンを読み出した回数をカウントし、全ての入力テストパターンが読み出される回数(閾値)に達した場合には、FLASHメモリ9から読み出したデータの出力先をCPUコアからテスト結果比較回路227に切り換える。これにより、テストデータ入力回路226は、FLASHメモリ9から累積期待値データが格納される領域のデータを読み出している場合は、1回の読み出しで取得した1バイト(8ビット)のデータの全てをテスト結果比較回路227に出力する。よって、図12に示した例では、FLASHメモリ9から読み出したデータのうち、最後の3回分読み出したデータがテスト結果比較回路227に出力される。
テスト結果比較回路227は、テストデータ入力回路226から複数回出力されたデータを結合して、累積出力データの期待値データとして、LFSR228によって累積演算した累積出力データと比較する。よって、図11に示した例では、テスト結果比較回路227は、テストデータ入力回路226から出力された3つの1バイト(8ビット)のデータを結合した24ビットのデータを累積期待値データとして生成する。
ここで、テストデータ入力回路226は、全ての入力テストパターンが読み出される回数(閾値)は、任意の方法によって認識するようにしてよい。例えば、FLASHメモリ9の特定の領域に閾値を予め格納しておくようにし、テストデータ入力回路226が、それを読み出すことで認識可能としてもよい。また、CPUシステム3の起動時に、テストデータ入力回路226が、CPU20から閾値の通知を受けるようにすることで認識可能としてもよい。この場合、診断テストコントローラ23もシステムバスに接続されるようにし、テストデータ入力回路226が、システムバスを介して、CPU20から閾値の通知を受けるようにしてもよい。また、CPU20がFLASHメモリ9から累積期待値データ(24ビット)を読み出して、テストデータ入力回路226やテスト結果比較回路227のレジスタに設定するようにしてもよい。
以上に説明した本実施の形態2によれば、実施の形態1と同じく、通常動作に与える影響(演算性能の低下)を小さく抑えながらも、機能安全のために求められる高い診断カバレッジを実現でき、万が一そのCPUコアに故障が発生した場合には速やかにそれを検出して安全な状態に移行させることができる。
さらに、本実施の形態2によれば、スキャンテストの結果出力データからシグネチャを生成するようにし、それに対応した累積期待値データを第1の累積演算結果としてFLASHメモリ9に用意するようにしている。すなわち、診断テストコントローラ23は、FLASHメモリ9から読み出した第1の累積演算結果と、診断中のCPUコアから順次出力された複数の出力結果データを累積演算した第2の累積演算結果とを比較することで診断中のCPUコアを診断するようにしている。これによれば、外付けのFLASHメモリ9に格納するテストデータの容量を増やすことなく、入力テストパターンのビット数(診断テストするCPUコア101〜104のスキャンテスト用回路201〜204の中にあるスキャンデータ伸長回路211に並列な形態で入力される)を増加させることができる。これにより、このスキャンデータ伸長回路211におけるスキャンデータの拡大率を減らせるため、スキャンテストの効率を上げられる。つまり、同じパターンの長さ(N個のデータ×複数セット)であれば、故障検出率が上がる。逆に、実施の形態1と同等の故障検出率を達成するために必要な入力テストパターンの長さが短くなる。
<実施の形態3>
続いて、本実施の形態3について、図面を用いて、その構成と動作を説明する。
図14は、本実施の形態3に係るCPUシステム4の構成を示すブロック図である。図3に示した実施の形態1におけるCPUシステム3との違いは、CPUシステム4には、診断テストコントローラ25を起動時に診断テストする起動時テスト回路24が追加されている点である。
起動時テスト回路24は、CPUシステム4の起動時に、診断テストコントローラ25によってCPUコア101〜104の診断テストの実行が開始されるのに先立ち、診断テストコントローラ25の診断テストを実施する。なお、本実施の形態3に係る診断テストコントローラ25は、実施の形態1に係る診断テストコントローラ21に対して、診断テストコントローラ25を診断テストするための回路が追加されたものであり、詳細については後述する。
図15は、図14に示した診断テストコントローラ25の構成を示すブロック図である。図8に示した実施の形態1における診断テストコントローラ21との違いは、診断テストコントローラ25は、さらに、テスト実行回路241〜243が追加されている点と、起動時テスト回路24からテスト指示信号がテスト実行回路241〜243のそれぞれに入力されている点である。
テスト実行回路241は、起動時テスト回路24からのテスト指示信号の入力に応じて、テスト制御回路221の診断テストを実行する。テスト実行回路242は、起動時テスト回路24からのテスト指示信号の入力に応じて、テストデータ入力回路222の診断テストを実行する。テスト実行回路243は、起動時テスト回路24からのテスト指示信号の入力に応じて、テスト結果比較回路223の診断テストを実行する。テスト実行回路241〜243のそれぞれは、テスト制御回路221、テストデータ入力回路222、テスト結果比較回路223のそれぞれの診断テストとしてスキャンテストを実施する。また、テスト実行回路242は、診断テストとして、さらに、FLASHメモリ9(そのデータを含む)の診断テストも実施する。
なお、図15の例では、テスト実行回路241がテスト制御回路221に含まれ、テスト実行回路242がテストデータ入力回路222に含まれ、テスト実行回路243がテスト結果比較回路223に含まれるものとする。よって、図15の例では、起動時テスト回路24からのテスト指示信号が、診断テストコントローラ25の中にあるテスト制御回路221、テストデータ入力回路222、テスト結果比較回路223に入力されることになる。しかしながら、テスト実行回路241〜243は、スキャンテスト対象の回路221〜223の外部に設けられていてもよい。
起動時テスト回路24は、起動時に適切なタイミングでそれぞれ個別のテスト指示信号をテスト実行回路241〜243に入力するようにしている。もちろん全く同じタイミングで起動時の診断テストを行って構わない場合には、1つのテスト指示信号にまとめてもよい。
ここで、適切なタイミングとは、例えば、テスト制御回路221、テストデータ入力回路222、テスト結果比較回路223が相互に影響を与えないようにスキャンテストを実施することができるタイミングである。すなわち、各回路221〜223のスキャンテストを同時に実行すると相互に影響を与えてしまうような場合には、起動時テスト回路24は、各回路221〜223のスキャンテストが実施される期間が相互に重複しないように、各回路221〜223のそれぞれにテスト指示信号を出力するタイミングをずらす。例えば、起動時テスト回路24は、テスト制御回路221にテスト指示信号を出力したときから、テスト制御回路221のスキャンテストが十分に終了するとして予め定めた時間が経過してから、次のスキャンテスト対象のテストデータ入力回路222にテスト指示信号を出力する。また、起動時テスト回路24は、テストデータ入力回路222にテスト指示信号を出力したときから、テストデータ入力回路222のスキャンテストが十分に終了するとして予め定めた時間が経過してから、次のスキャンテスト対象のテスト結果比較回路223にテスト指示信号を出力する。なお、このスキャンテストの順序は、一例にすぎず、これに限定されるものではない。
機能安全の観点からは、CPUコア101〜104の故障診断のための診断テストに関係する回路(つまりスキャンテストを実行する制御回路)と、テストデータを格納する外部メモリ(例えば、FLASHメモリ9)は、起動時に別の方法で診断テストする必要がある。診断テストコントローラ25が、前者のスキャンテストを実行する制御回路に相当し、外付けのFLASHメモリ9が、後者のテストデータを格納する外部メモリに相当する。制御回路は、ハードウェアによる故障診断(これもスキャンテストが例)の回路を別に設け、起動時には本来の動作(CPUコアの診断テストの制御)を開始する前に診断テストする。
制御回路として機能する診断テストコントローラ25を起動時に診断テストするためのテスト実行回路241〜243は、起動時テスト回路24からのテスト指示信号に基づいて動作する。テスト実行回路241〜243は、内部に疑似乱数をベースとしてスキャンテストのパターンを生成する回路と、それを診断テストコントローラ25の対象ブロック(テスト制御回路221、テストデータ入力回路222、テスト結果比較回路223)のスキャンチェーンに入力し、その出力結果データが正常かどうかを判定する回路を備える。この出力結果が正常かどうかを判定する回路は、出力結果データの累積演算をする回路であるLFSRと、累積演算結果の期待値となる累積期待値データが格納される回路(例えば、レジスタ)を備える。これにより、テスト実行回路241〜243は、累積演算結果と累積期待値データとが一致する場合、診断テスト対象ブロックが正常であると判定し、不一致の場合には、診断テスト対象ブロックが故障していると判定する。
また、FLASHメモリ9は、所定の固まりのデータにCRC(Cyclic Redundancy Check)を付けて格納するようにしておく。例えば、16バイトのテストデータ単位でCRCを付与するようにしてもよい。この場合、FLASHメモリ9から1回で読み出されるデータは、入力テストパターンと期待値データを含む16バイトのテストデータと、その入力テストパターンと期待値データから算出されるCRCとを含むこととなる。また、例えば、FLASHメモリ9において、N個のデータから成る1セットのテストデータが格納される領域に続く所定の数バイトの領域に、その1セットのテストデータのCRCを格納するようにしてよい。
テストデータ入力回路222に対応するテスト実行回路242は、起動時テスト回路24からのテスト指示信号に基づき、起動時にFLASHメモリ9に格納されているテストデータを読み出して、正常に読み出せたかどうかを付随するCRCによりチェックする。なお、診断テストコントローラ25が本来の動作を開始した後でも、テストデータの読み出し時には必ずCRCによるチェックを行うようにしても構わない。テスト実行回路242は、FLASHメモリ9からCRCが付与された単位のデータを読み出し、読み出したデータについてCRCを算出する。テスト実行回路242は、読み出したデータに付与されているCRCと、読み出したデータから算出したCRCを比較し、一致する場合は、FLASHメモリ9が正常であると判定し、不一致の場合にはFLASHメモリ9が故障している(又はそのテストデータが破損している)と判定する。
テスト実行回路241〜243のそれぞれは、診断テスト対象が正常であると判定した場合、診断テスト対象の動作を開始させる。すなわち、テスト制御回路221、テストデータ入力回路222、テスト結果比較回路223によるCPUコア101〜104の診断テストを開始させる。テスト実行回路241〜243のそれぞれは、診断テスト対象が異常であると判定した場合は、その異常を通知する通知信号をエラー出力・制御回路22に通知するようにしてよい。この場合、サブマイコンは、上述のCPU20(CPUコア101〜104)の異常が検出された場合と同様に、出力装置によって異常を通知する。また、この場合は、テスト実行回路241〜243とエラー出力・制御回路22との間に通知信号を伝達するための信号線(図示せず)を有することになる。
または、CPUコアの故障診断のための診断テストに関係する回路(つまりスキャンテストを実行する制御回路)と、テストデータを格納する外部メモリは、起動時にさらに別の方法で診断テストするようにしてもよい。
例えば、診断テストコントローラ25は、ソフトウェアによる診断テストのためのテストモード(テスト回路)を内部に設けるようにしてもよい。この場合、診断テストコントローラ25は、起動時テスト回路24からのテスト指示信号に基づき、起動時には本来の動作(CPUコア101〜104の診断テストの制御)は停止状態とする。先にCPUコア101〜104が動作可能となったときに、CPUコア101〜104の少なくとも1つが、ソフトウェアを実行することにより、テストモードに移行している診断テストコントローラ25の対象ブロック(テスト制御回路221、テストデータ入力回路222、テスト結果比較回路223)を順番に診断テストする。
例えば、診断テストを実行するCPUコアは、診断テストとして、テスト制御回路221、テストデータ入力回路222、テスト結果比較回路223のレジスタにデータを書き込み、テストモードで動作させた結果の出力データを読み出し、その期待値データと比較する。これは、例えば、診断テストコントローラ25もシステムバスに接続されるようにし、CPUコアがシステムバスを介してデータを読み書きするようにすればよい。CPUコアは、比較したデータが一致する場合は正常であると判定し、比較したデータが不一致である場合には故障していると判定する。
CPUコアは、すべての回路221〜223が正常と判定できたら、本来の動作を開始させる。例えば、CPUコアは、すべての回路221〜223が正常と判定した場合は、テストモードを解除する信号を各回路221〜223に送信する。なお、CPUコアは、診断テスト対象の回路221〜223のいずれかが故障であると判定した場合は、その異常を通知する通知信号をその他I/F18を介してサブマイコンに通知するようにしてよい。この場合、サブマイコンは、上述のCPU20(CPUコア101〜104)の故障が検出された場合と同様に、出力装置によって故障を通知するようにしてもよい。
また、例えば、FLASHメモリ9は、CRCに代えて、所定の固まりのデータにECC(Error Correction Code)を付けて格納する(例えば、データ64bitに対してECC8bitを付加)ようにしてもよい。この場合、テスト実行回路242は、起動時テスト回路24からのテスト指示信号に基づき、FLASHメモリ9からのテストデータ読み出し時に、このECCによりデータに対する1ビットエラー訂正・2ビットエラー検出を実現する。テスト実行回路242は、2ビットエラーを実施された場合のみ故障と判定するようにしてもよい。しかしながら、好ましくは、テスト実行回路242は、起動時の診断テストとしては、1ビットエラー訂正及び2ビットエラー検出のいずれでも実施された場合には、故障と判定するとよい。なお、このECCによるチェックは、起動時だけに限らず、診断テストコントローラ25が本来の動作を行なっている場合には必ず実施するようにした方がよい。
なお、上述の誤り検出符号(CRC又はECC)によるFLASHメモリ9のテストは、FLASHメモリ9の全域において、所定のサイズのデータ毎に誤り検出符号を付与する例について説明したが、これに限られない。例えば、FLASHメモリ9の一か所のみ(例えば、先頭又は末尾のみ)にテスト用データ(データと、その誤り検出符号)を格納しておくようにし、そのテスト用データによって故障検出を行うようにしてもよい。また、FLASHメモリ9の数か所(例えば、先頭、中間、末尾)に離散的にテスト用データを格納しておくようにし、それらのテスト用データによって故障検出を行うようにしてもよい。
また、以上の説明では、テスト実行回路241〜243を、テスト対象の回路221〜223のそれぞれに対して備える例について説明したが、これに限られない。例えば、テスト対象の回路221〜223の外部に、1つのテスト実行回路を備えるようにしてもよい。この場合、テスト実行回路は、起動時テスト回路24からのテスト指示信号の入力に応じて、各回路221〜223を順番にスキャンテストする。また、テスト実行回路は、診断テストコントローラ25の内部ではなく、外部に備えるようにしてもよい。この場合、テスト実行回路は、起動時テスト回路24に含まれていてもよい。
また、以上の説明では、実施の形態1に対して、本実施の形態3に係る起動時テスト回路24及びテスト実行回路241〜243を適用した例について説明したが、当然に、実施の形態2に対しても適用することが可能である。
以上に説明した実施の形態3によれば、実施の形態1及び実施の形態2と同じく、通常動作に与える影響(演算性能の低下)を小さく抑えながらも、機能安全のために求められる高い診断カバレッジを実現でき、万が一そのCPUコア101〜104に故障が発生した場合には速やかにそれを検出して安全な状態に移行させることができる。
さらに、実施の形態3によれば、CPUコア101〜104の故障診断を行うために付加した制御回路や外部メモリを起動時に診断テストするようにしている。すなわち、診断テストコントローラ25がCPUコア101〜104のスキャンテストを開始する前に、起動時テスト回路24及びテスト実行回路241〜243が、診断テストコントローラ25のテストを実施するようにしている。そのため、機能安全の観点でより優れたシステムとすることができる。
また、実施の形態3によれば、診断テストコントローラ25がCPUコア101〜104のスキャンテストを開始する前に、FLASHメモリ9に格納されたテストデータから誤り検出符号を算出し、算出した誤り検出符号と、FLASHメモリ9に格納された誤り検出符号とを比較することでFLASHメモリ9を診断するようにしている。これによれば、誤ったテストデータを利用したスキャンテストにおける故障の誤検出を回避することができる。
<実施の形態4>
さらに、本実施の形態4について、図面を用いて、その構成と動作を説明する。
図16は、本実施の形態4に係るCPUシステム5の構成を示すブロック図である。本実施の形態4に係るCPUシステム5と、図14に示した実施の形態3に係るCPUシステム4との違いは、診断テストコントローラ26がシステムバスに接続されている点である。この構成により、CPU20と診断テストコントローラ26とは、システムバスを介して、相互に任意のデータ(信号)を送受信することが可能である。
図17は、本実施の形態4に係る診断テストコントローラ26の構成を示すブロック図である。本実施の形態4に係る診断テストコントローラ26と、図15に示した実施の形態3に係る診断テストコントローラ25との違いは、周期的な診断テストの開始タイミングを決める周期カウンタ225を備えていない点と、CPU20から診断テスト開始指示信号を受け取るようにしている点と、それに伴い診断テストの開始を通知するフラグ信号の出力は無くしている点である。また、図17に示す本実施の形態4に係るテスト制御回路229の動作は、図15に示した実施の形態3に係るテスト制御回路221の動作と一部異なる。
テスト制御回路229は、CPU20からの診断テスト開始指示信号の入力に応じて、CPUコアの診断テストを開始する。以降、テスト制御回路229が、テストモード切り換え信号をテスト対象のCPUコアに出力してからの動作は、図15に示したテスト制御回路221と同様となる。
この実施の形態4は、CPUシステム5、CPU20、CPUコア101〜104の構成と動作は、実施の形態3の場合と基本的に同じであるが、実施の形態1において図7を用いて説明したCPUコアの診断テストの実行の詳細が一部異なる。具体的には、タスクの中断又は終了と、タスクの復帰又は投入というソフトウェアでの処理が異なる。実施の形態1の場合では、そのCPUコア101〜104で実行させているタスクの処理のループのどの辺りの位置まで到達しているかをチェックして、タスクの中断又は終了のいずれの処理とするかを切り換え、これに対応してタスクを復帰又は投入のいずれの処理とするかも切り換えていたが、このようにソフトウェアを作り込む必要をなくしたものである。
図18は、本実施の形態4における診断テストを実行するためのソフトウェア処理のフロー図である。1つのCPUコアにおける通常動作と診断テスト動作の切り換えの様子を示している。図18は、上から下にプログラムが実行されていくフローを示しており、CPUコアとしての通常動作は、一番左のフローに示す通常処理に相当する。真ん中のフローに示す割り込み処理から診断テストに入り、スキャンテストの様子は一番右に示している。
実施の形態1では、CPUコアを通常動作から診断テスト(スキャンテストによる故障診断)動作に切り換えるときは、そのCPUコアで実行中のタスクを中断させて、別のCPUコアで実行を継続させる、またはタスクを所定の短い時間内で終了させる必要がある。この実施の形態4は、マルチコア対応のOS(Operating System)によってタスクスケジューリングが行われている。すなわち、上述のCPU20(CPUコア101〜104)が実行するプログラムには、このOSが含まれる。CPUシステム5において、CPUコア101〜104のそれぞれには、そのときどきで何らかのタスクが割り当てられ、それに対応する演算処理が実行されている通常動作の状態となる。本実施の形態4は、この場合に、任意のタイミングで実行中のタスクを中断させて通常動作から診断テスト動作に切り換え可能とするものである。また、このとき中断されたタスクは、他のCPUコアで実行再開することが可能な自由度の高い切り換え方法としている。
具体的には、通常動作として一番左のフローに示す通りに所定のタスクが実行されているときに、システムタイマー122から所定の閾値よりも高い優先度を有する高優先度のタイマー割り込みが発生したタイミングで、それを受け付けたCPUコアは真ん中のフローに示す割り込み処理に飛ぶ。この割り込み処理ルーチンでは、まず実行中タスクを中断させて実行待ち状態(実行可能状態:Ready)に移行させる。これはマルチコア対応OSが用意しているシステムAPI関数をコールすることによって実現できる。このとき、CPUコアが備える主要なレジスタの値は外部のメモリ(例えば、RAM13)に退避され、中断されたタスクは実行待ち状態になる。この中断されたタスクは、そのときに実行待ち状態になっている他のタスクよりも優先度が高ければ、他のCPUコアが空いたタイミングで、そのCPUコアの方に投入されて実行が再開されることになる。
次に、これから診断テスト動作に切り換えるこのCPUコアには、新たな別のタスクがOSのタスクスケジューラによって投入されないよう、タスクスケジューリングの対象外に設定する。そして、CPUコアは、CPUコアに付随するL1キャッシュのデータをフラッシュして無効な状態とした後、診断テストコントローラ26に対して診断テスト開始指示信号を出力する処理で終わる。このときに、診断テスト動作から通常動作に戻るときに参照すべきフラグ情報(後述)を外部のメモリに退避しておく。また、CPUコアは、CPU共通回路120からこのCPUコアへのアクセスを抑止するように、CPU共通回路120に対して設定を行う。なお、実行中タスクの実行待ち状態への移行、主要なレジスタの値の退避、CPUコアをタスクスケジューリング対象外にする設定、L1キャッシュのフラッシュ、及びフラグ情報の退避を実行する順序は、ここで例示した順序に限られない。
診断テストコントローラ26は、CPUコアから診断テスト開始指示信号を受けると、そのCPUコアに対するテストモード切り換え信号を出力して、そのCPUコアをスキャンテストのモードに移行させる。これにより、CPUコアは通常動作としての処理が停止され、一番右に示す通りに診断テスト動作(すなわちハードウェアとしてのスキャンテスト)が実行される。
その後、CPUコアを診断テスト動作から通常動作に切り換える(戻す)ときは、まず診断テストコントローラ26は、診断テストが完了したタイミングでCPUコアに対するテストモード切り換え信号を出力する。これにより、CPUコアが元の通常のモードに戻される。また、それと同時に診断テストコントローラ26は、CPUコアに対してリセット信号を出力し、CPUコアのハードウェアリセットを掛ける。これにより、CPUコアは、リセットルーチンから実行を開始することになる。また、診断テストコントローラ26は、診断テストの終了を通知するフラグ信号をCPU20に出力する。これにより、CPU共通回路120は、診断テストの対象となっていたCPUコアへのアクセス抑止を解除する。
このときに、CPUコアは、外部のメモリに退避しておいたフラグ情報を取得する。このフラグ情報は、例えば、診断テスト開始指示信号を自らが出力したことを示す記録情報と、そのときのシステムタイマー122から取得した時刻情報とを含む。この診断テスト開始指示信号を自らが出力したことを示す記録情報は、CPUコアが自らが診断テスト後のハードウェアリセットにより再起動されていたことを、CPUシステム5の電源ON時などに実施される通常のシステムリセット後の起動と識別するための情報として機能する。よって、CPUコアは、ハードウェアリセット後に動作可能となったときには、まず、外部のメモリに記録情報が格納されている(フラグ情報を取得できる)か否かを判定する。外部のメモリに記録情報が格納されていない場合、CPUコアは、通常のシステムリセット後の起動時における初期化処理を実行する。
一方、外部のメモリに記録情報が格納されている場合、CPUコアは、次に説明する診断テスト後の起動時における初期化処理を実行する。この場合、CPUコアは、診断テストの判定結果がOKであるかNGであるかをエラー出力・制御回路22、または診断テストコントローラ26の中にあるテスト結果比較回路223に格納された情報によって確認する。例えば、エラー出力・制御回路22によって確認する場合は、エラー出力・制御回路22において診断テストコントローラ26のテスト結果比較回路223からの通信信号が示す判定結果の情報を保持しておくようにし、CPUコアがその他I/F18を介してその判定結果の情報を取得し、確認するようにすればよい。また、テスト結果比較回路223によって確認する場合は、テスト結果比較回路223において判定結果の情報を保持しておくようにし、CPUコアがシステムバスを介してその判定結果の情報を取得し、確認するようにすればよい。
また、CPUコアは、システムタイマー122から時刻を取得し、取得した時刻と、外部のメモリに格納された時刻情報が示す時刻とを比較する。CPUコアは、両者の時刻の差が、所定の閾値よりも大きい場合には、異常と判定し、その所定の閾値以下である場合には、正常であると判定する。この閾値として、CPUコアの診断テストが正常に実行されず予定よりも長引いてしまったと考えられる時間を任意に定めるようにする。
確認した診断テストの判定結果がOKであり、かつ、時刻の比較結果も正常であると判定した場合、CPUシステム5の電源ONで全体が立ち上がる起動時とは異なり、真ん中のフローに示す割り込み処理の途中に復帰する。ここで、ハードウェアリセットされたCPUコアは、通常動作を行うために設定必要なレジスタの初期化を行い、タスクスケジューリングの対象に戻す設定を行うことにより、新たなタスクの投入が可能な状態に復帰する。このタスクスケジューリングの対象に戻す設定も、マルチコア対応OSが用意しているシステムAPI関数をコールすることによって実現できる。このとき、必要なレジスタの値は、退避していた外部のメモリから復元される。なお、レジスタの初期化、主要なレジスタの値の復元、フラグ情報の復帰、及びCPUコアをタスクスケジューリング対象に戻す設定、L1キャッシュのフラッシュ、及びフラグ情報の退避を実行する順序は、ここで例示した順序に限られない。
以上の処理が終わったら、割り込みルーチンから抜けて、一番左のフローに示す通常処理が可能な状態に戻る。この際に、CPUコアは、割り込み処理への移行時に禁止していた他の割り込みの受け付けを許可する。他のCPUコアについても同様である。この後、OSのタスクスケジューラによって、そのときに実行待ち状態になっている最も優先度の高いタスクがこのCPUコアに投入され、そのタスクの処理が始まる。
一方、確認した診断テストの判定結果がNGである、または、時刻の比較結果が異常であると判定した場合は、CPUコアは、上述の処理について、タスクスケジューリングの対象に戻す設定は行わないようにすればよい。
ここで、上述のフラグ情報として外部のメモリに格納された時刻情報は、図6を参照して説明した周期的な診断テストの実行タイミングを把握するためにも利用される。CPUコア101〜104は、システムタイマー122からタイマー割り込みが発生し、割り込み処理を開始したときに、まず、システムタイマー122から時刻情報を取得する。CPUコア101〜104は、外部のメモリに格納された時刻情報が示す時刻から、システムタイマー122から取得した時刻情報が示す時刻までに経過した時間が、診断テスト間隔に達した場合に、診断テスト開始指示信号を診断テストコントローラ26に出力する。言い換えると、外部のメモリに記録した前回の診断テスト開始時刻と、システムタイマー122から取得した現在時刻との差が、診断テスト間隔の時間として定められた経過時間閾値を超えた場合に、CPUコア101〜104は、診断テスト開始指示信号を出力する。これによれば、CPUコア101〜104が診断テスト間隔毎に診断テスト開始指示信号を出力し、診断テスト間隔毎に自己の診断テストを診断テストコントローラ26により実施させることが可能である。なお、CPUコア101〜104は、最初に診断テスト開始指示信号を診断テストコントローラ26に出力するタイミングを相互にずらすことで、スキャンテストを実施する期間が相互に重複しないようにすればよい。
また、以上の説明では、実施の形態3に対して、本実施の形態4に係る診断テスト実施方法を適用した例について説明したが、当然に、実施の形態1、2のいずれに対しても適用することが可能である。また、本実施の形態4に係る診断テスト実施方法を、本実施の形態3に係る起動時テスト回路24及びテスト実行回路241〜243を実施の形態2に対して適用した形態に対しても適用することが可能である。
以上に説明した実施の形態4によれば、CPUコアは、タイマー割り込みに応じて、実行しているプログラムを実行待ち状態に移行させて、オペレーティングシステムがそのCPUコアに任意のプログラムをタスクスケジューリングしないように設定するとともに、スキャンテストの開始を指示する指示信号を診断テストコントローラ26に出力するようにしている。これによれば、実施の形態1〜3の効果に加えて、CPUコア101〜104で実行させるタスクの中断と復帰の切り換え方法の自由度が高く、CPU20の全体で実行させる処理を各CPUコア101〜104にどのように割り振るかはマルチコア対応OSのタスクスケジューラに任せることができるという効果が得られる。
<実施の形態4の変形例A>
ここで、本実施の形態4の変形例Aについて、図面を用いて、その構成と動作を説明する。
図34は、本実施の形態4の変形例Aに係るCPUシステム5Aの構成を示すブロック図である。本実施の形態4の変形例Aに係るCPUシステム5Aと、図16に示した実施の形態4におけるCPUシステム5との違いは、マスクROM41と、リセットコントローラ42とが追加されている点である。
マスクROM41は、CPUコア101〜104のリセットベクターが割り当てられている。リセットベクターは、CPUコア101〜104がシステムリセット後の起動時にアクセスするアドレスである。マスクROM41は、リセットベクターに該当するアドレスに、ブートローダへのジャンプ命令が格納されている。すなわち、CPUコア101〜104は、そのリセット後(診断テスト後のハードウェアリセット後及び電源ON時のシステムリセット後)の起動時にリセットベクターに格納された命令を読み出して実行することで、ブートローダの実行を可能としている。なお、ブートローダは、マスクROM401内に格納されていてもよく、それ以外の記憶装置(例えば、FLASHメモリ9)に格納されていてもよい。FLASHメモリ9にブートローダを格納する場合、FLASHメモリ9もシステムバスに接続されるようにすることで、CPUコア101〜104からアクセス可能とすればよい。
リセットコントローラ42は、CPU20(CPUコア101〜104)とシステムバスとの間に接続される。よって、CPU20(CPUコア101〜104)は、リセットコントローラ42を介して、他の回路11〜18、26、41にアクセスする。リセットコントローラ42は、CPUコア101〜104がリセットベクターにアクセスする際に、そのリセットベクターを他のアドレスに書き換える機能を有する。すなわち、リセットコントローラ42は、CPUコア101〜104が命令を読み出すアドレスを、マスクROM41に格納されたブートローダへのジャンプ命令のアドレスから、他の記憶装置に格納された命令のアドレスに変更する機能を有する。
この実施の形態4の変形例Aは、実施の形態4において図18を用いて説明したCPUコアの診断テストの実行の詳細が一部異なる。具体的には、実施の形態4では、診断テスト後のハードウェアリセットによる再起動と、電源ON時のシステムリセット後の起動との識別をフラグ情報によって行っていたが、本実施の形態4の変形例Aでは、その識別を上述のリセットベクターの書き換えにより不要としたものである。
図35は、本実施の形態4の変形例Aにおける診断テストを実行するためのソフトウェア処理のフロー図である。実施の形態4において図18を用いて説明した診断テストを実行するためのソフトウェア処理のフロー図と比べると、リセットベクターの書き換えにより、フラグ情報の退避・復帰という処理がなくなっている。また、実行中タスクの実行待ち状態への移行、及び診断テスト対象のCPUコアをタスクスケジューリングの対象外とする設定がなくなっている。
CPUコアを通常動作から診断テスト動作に切り換えるときにはタスク停止の処理、そして診断テスト動作から通常動作に戻すときにはタスク再開の処理という若干のソフトウェアでの処理が行われる。また、ハードウェアのスキャンテストによる診断テスト動作から通常動作に戻すときに、CPUコアに対してハードウェアリセットを掛ける。
通常動作として一番左のフローに示す通りに所定のタスクが実行されているときに、システムタイマー122から所定の閾値よりも高い優先度を有する高優先度のタイマー割り込みが発生したタイミングで、それを受け付けたCPUコアは真ん中のフローに示す割り込み処理に飛ぶ。この割り込み処理ルーチンに入った時点で、通常動作で実行されていたタスクは停止されることになる。このときに、このCPUコアは、他の割り込みの受け付けを禁止する。このCPUコアは、まず、そのCPUコアに付随するL1キャッシュをフラッシュして無効な状態とする。次に、CPUコアは、そのCPUコアが備える主要なレジスタ(システムレジスタや汎用レジスタ)の値を外部のメモリ(例えば、RAM13)に退避し、リセットコントローラ42に対してリセットベクターの書き換えを有効化する設定を行う。なお、L1キャッシュのフラッシュ、主要なレジスタの値の退避、及びリセットベクターの書き換えの有効化を実行する順序は、ここで例示した順序に限られない。例えば、主要なレジスタの値の退避、L1キャッシュのフラッシュ、リセットベクターの書き換えの有効化の順に実行されるようにしてもよい。
このリセットベクターの書き換えは、後でCPUコアを診断テスト動作から通常動作に戻すときに、CPUコアのハードウェアリセットが掛かった後、直ちに真ん中のフローに示す割り込み処理の途中に復帰するよう、その割り込み処理内に定義した復帰アドレスを飛び先としてリセットベクターを変更するものである。例えば、割り込み処理の命令がRAM13に格納されているときには、リセットコントローラ42は、リセットベクターの書き換えを有効化されている場合、CPUコアが命令を読み出すアドレスを、リセットベクターから、そのRAM13において割り込み処理における複数の命令のうち、復帰先の命令が格納されているアドレスに変更するように動作する。この割り込み処理の命令が格納されているアドレスは、例えば、リセットベクターの書き換えを有効化する際に、CPUコアからリセットコントローラ42に対して設定可能とすればよい。
その後で、CPUコアが診断テストコントローラ26に対して診断テスト開始指示信号を出力すると、診断テストコントローラ26によりCPUコアがスキャンテストのモードに移行され、一番右に示す通りに診断テスト動作(すなわちハードウェアとしてのスキャンテスト)が実行される。このとき、診断テストが完了したタイミングで、CPUコアは元の通常のモードに戻され、CPUコアに対してリセット信号が出力される。これにより、CPUコアのハードウェアリセットが掛かり、割り込み処理の途中からCPUコアの動作が継続されるように、リセットベクターから変更されたアドレスが示す飛び先に復帰する。
診断テストの判定結果がOKであったかNGであったかを示す情報は、診断テストコントローラ26の中にあるテスト結果比較回路223に格納される。また、テスト結果比較回路223は、その情報をエラー出力・制御回路22に通知信号として出力する。判定結果がNGであった場合は、CPUシステム5を安全な状態に移行させる処理(上述の故障の通知又は故障CPUコアの縮退)が行われる。判定結果がOKであった場合は、CPUコアは、テスト結果比較回路223に格納されたその情報を確認後、割り込み処理を継続する。CPUコアは、外部のメモリに退避していた主要なレジスタの値を読み出して復元し、リセットベクターとして通常のシステムリセットの後の起動時における初期化処理の先頭が飛び先となるように、リセットコントローラ42に対してリセットベクターの書き換えを無効化する設定を行う。なお、主要なレジスタの値の復元、及びリセットベクターの書き換えの無効化を実行する順序は、ここで例示した順序に限られない。例えば、リセットベクターの書き換えの無効化、主要なレジスタの値の復元の順に実行されるようにしてもよい。
その後、割り込みルーチンから抜けて、一番左のフローに示す通常処理に戻り、通常動作で実行されていたタスクが再開されることになる。このとき、CPUコアは、他の割り込みの受け付け禁止を解除し、割り込みの受け付けを許可した状態に戻る。なお、図18を用いて説明した実施の形態4のソフトウェア処理では、タスクを実行待ち状態にしているが、本実施の形態4の変形例Aのソフトウェア処理では、CPUコアは、中断していたタスクの実行を再開する。そのため、この主要なレジスタの値の復元は、本実施の形態4の変形例Aではタスクの実行再開に必要な値を全て復元する必要があるが、実施の形態4ではそれと比較して一部の値の復元を省略することができる。
図6と同様に各CPUコア101〜104の診断テストの実行を進めていく上では、それぞれのCPUコア101〜104がシステムタイマー122からのタイマー割り込みをトリガーとし、システムタイマー122から取得した時刻情報を利用して前回の診断テストからの経過時間を確認する。なお、前回の診断テストを実行した時刻は、実施の形態4と同様に、前回に診断テストを開始したときに、その時刻を示す時刻情報を外部のメモリ(例えばRAM13)に格納しておくことで把握可能とすればよい。そして、実施の形態4と同様に、前回の診断テスト開始時刻と現在時刻とを比較することで、診断テストを実行するタイミングになったと判定した場合に、CPUコア101〜104は、以上に説明した通りに割り込み処理から診断テストを実行するようにすればよい。まだ診断テストを実行するタイミングになっていないと判定した場合は、割り込みルーチンから直ちに抜けて通常処理に戻ればよい。
また、以上の説明では、実施の形態4の診断テスト実施方法を変更して、実施の形態3に対して適用した例について説明したが、当然に、実施の形態1、2のいずれに対しても適用することが可能である。また、当然に、実施の形態1〜3の任意の2つ以上を組み合わせた形態に対しても、本実施の形態4の変形例Aに係る診断テスト実施方法を適用することが可能である。
以上に説明した実施の形態4の変形例Aによれば、リセットコントローラ42は、スキャンテストの実行後のリセットに応じてCPUコアが命令を読み出すアドレスを、リセットベクターから、割り込み処理においてスキャンテストによって中断された位置における命令のアドレスに変更するようにしている。これによれば、CPUコアは、割り込み処理ルーチンの中で、若干のソフトウェア処理を前後に含む形で、診断テストにおけるスキャンテストを終了させることができる。よって、実施の形態1〜3の効果に加えて、CPUコアの診断テストがCPUシステムの全体処理に与える影響を抑えられるという効果が得られる。
<実施の形態4の変形例B>
次に、本実施の形態4の変形例Bについて、図面を用いて、その構成と動作を説明する。
図36は、本実施の形態4の変形例Bに係るCPUシステム5Bの構成を示すブロック図である。本実施の形態4の変形例Bに係るCPUシステム5Bと、実施の形態4の変形例Aにおいて図34を用いて説明したCPUシステム5Aとの違いは、システムバスに接続される診断テストトリガー回路43が追加されている点である。この診断テストトリガー回路43は、所定のタイミングでCPU20の中にある割り込みコントローラ121に割り込み信号(図示せず)を出力する。割り込みコントローラ121は、診断テストトリガー回路43からの割り込み信号に応じて、各CPUコア101〜104にトリガー割り込みが与えられる。この割り込み信号及びトリガー割り込みは、CPUコア101〜104のうち、任意のCPUコアに対して発生させることができる。
実施の形態4の変形例Aでは診断テストのシーケンス制御のためにシステムタイマー122を利用していたが、本実施の形態4の変形例Bは、各CPUコア101〜104に対して実行する診断テストのタイミングを指示する専用の診断テストトリガー回路43を設けたものである。診断テストトリガー回路43は、各CPUコア101〜104に対して、それぞれの診断テストを実行開始するタイミングで個別の割り込み信号を出力する。診断テストトリガー回路43には、システムバスを介してCPU20から、図6に示した診断テスト間隔の情報、その間で実行する各CPUコアのそれぞれの診断テストのタイミング(診断テスト間隔の先頭タイミングからの経過時間)の情報、等を予めレジスタで設定可能としている。これにより、診断テストトリガー回路43は、レジスタに設定された情報に基づいて、図6に示したような各CPUコア101〜104に対する診断テストの実行開始タイミングで、割り込みコントローラ121経由で所望のCPUコアに対してトリガー割り込みを与えることができる。
なお、診断テスト間隔における最初の診断テストの実行開始タイミングになったときだけ、診断テストトリガー回路43からCPUコア101に対して割り込み信号が出力されるようにして、後のCPUコア101の診断テストや他のCPUコア102〜104の診断テストを実行するシーケンス制御は別の方法で行うようにしてもよい。
例えば、CPUシステム5Bは、CPU20内のシステムタイマー122とは別に、その他周辺回路14に含まれる汎用タイマーを利用する。トリガー割り込みが与えられたCPUコア101が、この汎用タイマーを起動する。CPUコア101〜104は、この汎用タイマーからのタイマー割り込みを利用することで、後のCPUコア101〜104の診断テストを実行するタイミングを判定するようにしてもよい。なお、具体的な診断テスト実行タイミングの判定方法は、システムタイマー122を利用する場合と同様であるため、説明を省略する。また、例えば、プロセッサ間割り込みを用いたソフトウェアの処理により制御するようにしてもよい。より具体的には、CPUコア101〜104のうち、1つのCPUコアだけがトリガー割り込みを受けて、その1つのCPUコアが全てのCPUコア101〜104のそれぞれについて診断テストを実行するタイミングを判定するようにしてもよい。そして、その1つのCPUコアが他のCPUコアの診断テストを実行するタイミングとなったと判定した場合、その1つのCPUコアがその他のCPUコアにプロセッサ間割り込みで診断テストの実行タイミングとなったことを通知する。そして、その他のCPUコアは、プロセッサ割り込みに応じて診断テストを実行するようにしてもよい。
また、以上の説明では、実施の形態4の変形例Aに対して、本実施の形態4の変形例Bの診断テストトリガー回路43を適用した例について説明したが、当然に、実施の形態4に対しても適用することが可能である。また、当然に、実施の形態1〜3の任意の2つ以上を組み合わせた形態に対して実施の形態4又はその変形例Aに係る診断テスト実施方法を適用した形態に対しても、本実施の形態4の変形例Bに係る診断テストトリガー回路43を適用することが可能である。
以上に説明した実施の形態4の変形例Bによれば、実施の形態4の変形例Aと同様に、診断テストにおけるスキャンテストを、若干のソフトウェア処理とともに割り込みルーチン内で終了させることができる。また、実施の形態4の変形例Bでは、診断テストトリガー回路43が複数のCPUコア101〜104のそれぞれに対して、CPUコア101〜104のそれぞれにおけるスキャンテストの実施タイミングで割り込みを発生させるようにしている。これによれば、実施の形態4、及び実施の形態4の変形例Aの効果に加えて、システムタイマー122から取得した時刻情報を利用して前の診断テストからの経過時間を確認するというソフトウェアでの処理が不要となるという効果が得られる。また、この診断テストトリガー回路43により、CPUコアに対する診断テストの実行パターンの自由度を高めることができる。
<実施の形態5>
また、本実施の形態5について、図面を用いて、その構成と動作を説明する。
図19は、本実施の形態5に係るCPUシステム6の構成を示すブロック図である。図16に示した実施の形態4におけるCPUシステム5との違いは、CPU20の中にあるCPUコア101〜104が有するスキャンチェーンのFF(Flip Flop)状態を退避する状態退避メモリ27を設けている点である。
状態退避メモリ27は、診断テスト回路に対応するものであり、診断テスト対象のCPUコアの診断テストを開始するときに、そのCPUコアのスキャンチェーンのFFから退避されたデータが格納される。状態退避メモリ27は、そのCPUコアの診断テストが終了したときに、退避していたデータをCPUコアのスキャンチェーンのFFに戻す。
図20は、図19に示したCPU30の構成を示すブロック図である。実施の形態1において図4で説明したCPU20との違いは、4つのCPUコアと外部に設けた状態退避メモリ27との間の入出力信号線が追加されている点である。また、それに伴い、図20に示す本実施の形態5に係るスキャンテスト用回路251〜254の動作が、図4に示した実施の形態1に係るスキャンテスト用回路201〜204の動作と一部異なる。
スキャンテスト用回路251〜254は、スキャンチェーンへのデータの入力元として、診断テストコントローラ26と状態退避メモリ27のいずれかを選択する。また、スキャンテスト用回路251〜254は、スキャンチェーンからのデータを、診断テストコントローラ26に加えて状態退避メモリ27にも出力する。
図21は、図20に示したCPUコア101とスキャンテスト用回路251の構成を示すブロック図である。本実施の形態5に係るスキャンテスト用回路251と、実施の形態1において図5で説明したスキャンテスト用回路201との主な違いは、このCPUコア101のスキャンテスト用回路251において、分配回路216と、スキャンデータ伸長回路211の出力(すなわち、CPUコアのスキャンチェーンへの入力)のところに、選択回路215を設けている点である。選択回路215は、スキャンデータ伸長回路211からの入力信号線と外部の状態退避メモリ27からの入力信号線との間で接続先を切り換える。分配回路216は、スキャンデータ圧縮回路212の入力(すなわち、CPUコアのスキャンチェーンからの出力)を分配して外部の状態退避メモリ27に出力する。
状態退避メモリ27は、診断テスト対象のCPUコアのスキャンチェーンにテスト開始時に格納されていたデータが格納される。状態退避メモリ27は、このCPUコアのデータの退避及び復元を制御する状態退避制御回路260を有している。状態退避制御回路260も、診断テストコントローラ26のテスト制御回路229からテストモード切り換え信号の入力を受ける。状態退避制御回路260は、テスト制御回路229からテストモード切り換え信号の入力によってスキャンテストの開始を認識し、スキャンテストが開始してからCPUコア101から出力されたデータを、スキャンチェーンのサイズ分だけ取得し、状態退避メモリ27に格納する。また、状態退避制御回路260は、例えば、スキャンクロックによってスキャンテストの進行状況を観測し、全ての入力テストパターンの入力が終了したタイミングで選択回路215の接続先を状態退避メモリ27に切り換える。そして、状態退避制御回路260は、状態退避メモリ27に退避したデータを、選択回路215を介してCPUコア101に順次入力する。すなわち、状態退避制御回路260は、全ての入力テストパターンの入力が終了してから、最後の出力結果データが出力されるまでのスキャンチェーンの駆動期間を利用して、CPUコア101のスキャンチェーンに元のデータを復元する。
なお、CPUコア102〜CPUコア104それぞれに対応して配置されたスキャンテスト用回路252〜254も、図21と同等の構成であるため、説明を省略する。
図22には、本実施の形態5におけるCPUコア101の診断テストの実行の詳細を示す。実施の形態1において図7を用いて説明した若干のソフトウェアでの処理(タスク中断・終了とタスク復帰・投入の処理)を不要とし、ハードウェアのスキャンテストによる診断テスト動作から通常動作に戻すときのハードウェアリセットも不要にした点に特徴がある。
スキャンチェーンから出力されたCPUコア101の内部のFF状態を退避するメモリ(FF群やSRAM)を有する状態退避メモリ27をさらに設けている。そのため、スキャンテストのモードにおいて、通常のモードからスキャンテストのモードに切り換えて最初の入力テストパターンをスキャンチェーンに入力するときに、内部のFF状態をその状態退避メモリ27出力させて記憶させることができる。そして、最後の入力テストパターンに対する結果出力がスキャンチェーンから出力されるときに、状態退避メモリ27に退避していたFF状態をCPUコア101に入力して診断テスト動作に入る直前の状態に復帰させることができる。これにより、直ちに元の通常動作を再開させることができる。
なお、CPUコア102〜CPUコア104の診断テストの実行の詳細も、図22と同様であるため、説明を省略する。
また、以上の説明では、実施の形態4に対して、本実施の形態5に係る状態退避メモリ27及びスキャンテスト用回路251〜254を適用した例について説明したが、当然に、実施の形態1〜3のいずれに対しても適用することが可能である。また、当然に、実施の形態1〜4、及び実施の形態4の変形例A、Bの任意の2つ以上を組み合わせた形態に対しても、本実施の形態5に係る状態退避メモリ27及びスキャンテスト用回路251〜254を適用することが可能である。
以上に説明した実施の形態5によれば、スキャンテストが開始したときから順次出力されるデータを、スキャンチェーンの長さ分だけ取得して、状態退避メモリ27に格納するようにしている。また、スキャンテストを終了するときに状態退避メモリ27に格納したデータをスキャンチェーンに入力するようにしている。これによれば、実施の形態1〜4の効果に加えて、CPUコア101〜104で実行させるタスクの中断・終了と復帰・投入というソフトウェアでの処理が不要となり、CPU30の全体で実行させる処理からはこの周期的に行うCPUコア101〜104の診断テストを意識する必要がなくなるという効果が得られる。
<実施の形態6>
また、本実施の形態6について、図面を用いて、その構成と動作を説明する。
この本実施の形態6は、CPUシステム6、CPU30、CPUコア101〜104、診断テストコントローラ26の構成と動作は、本実施の形態5の場合と基本的に同じであるが、本実施の形態1において図6を用いて説明したCPUコアの診断テストの実行の様子が異なる。
図23には、本実施の形態6におけるCPU30の各CPUコア101〜104の分割診断テストの実行の様子を示す。この実施の形態6は、CPUコアの診断テストをK個の分割診断テストに分けて実行する点に特徴がある(Kは、予め任意に定められた正整数)。まず、CPUコア101に対してK回の分割診断テストを順次行い、次にCPUコア102〜104に対してそれぞれK回の分割診断テストを順次行っていく。以上で4つのCPUコア101〜104に対する診断テストが所定の診断テスト間隔で終了し、その後も同様に診断テストが繰り返されていく。
すなわち、本実施の形態6では、テストデータ入力回路222及びテスト結果比較回路223は、例えば、FLASHメモリ9に格納される全てのテストデータの1/Kのデータを単位にスキャンテストを実施する。しかしながら、各分割診断テストにおけるテストデータの個数は、必ずしも同数でなくてもよい。また、テストデータ入力回路222は、スキャンテストを終了するときには、FLASHメモリ9のテストデータのうち、どのテストデータまでスキャンテストを実施したか示す情報を保持し、次のスキャンテストではその情報に基づいて続きからスキャンテストを実施する。
また、この場合、CPUコア101〜104は、フラグ情報の時刻情報が示す前回の分割診断テスト開始時の時刻と、システムタイマー122から取得した時刻情報が示す現在時刻との差に対して使用する経過時間閾値として、1回目の分割診断テストと、2回目〜K回目の分割診断テストとで異なる時間を利用することになる。すなわち、図23に示すように、1回目の分割診断テストの開始を判定するための経過時間閾値は、2回目〜K回目の分割診断テストの開始を判定するための経過時間閾値よりも長い時間となる。
例えば、CPUコア101〜104は、K回目の分割診断テストの実施後に、次の診断テストにおける1回目の分割診断テストの開始を判定する際には、経過時間閾値として、(診断テスト間隔−(診断テスト間隔×1/4×(K−1)/K))を利用するようにすればよい。また、例えば、CPUコア101〜104は、1回目〜K−1回目のいずれかの分割診断テストの実施後に、その次の分割診断テストを開始する際には、経過時間閾値として、(診断テスト間隔×1/4×1/K)を利用するようにすればよい。
図24には、本実施の形態6におけるCPU30の各CPUコア101〜104の分割診断テストの実行の様子の別の例を示す。この場合は、CPUコア101に対して1番目の分割診断テストを行った後、CPUコア102〜104に対して同様に1番目の分割診断テストを行い、次にCPUコア101に戻って2番目の分割診断テストを行う。このように1つの分割診断テストを単位に4つのCPUコア101〜104を巡回させながら診断テストを進めていく、つまり入れ子の状態で分割診断テストを行うものである。
この場合も、テストデータ入力回路222及びテスト結果比較回路223は、FLASHメモリ9の全てのテストデータの1/Kのデータを単位にスキャンテストを実施する。また、テストデータ入力回路222は、上述の通り、スキャンテストの進行状況を記録する。
また、この場合、CPUコア101〜104は、フラグ情報の時刻情報が示す前回の分割診断テスト開始時の時刻と、システムタイマー122から取得した時刻情報が示す時刻との差に対して使用する経過時間閾値として、1回目〜K回目の分割診断テストとで全て同一の時間を利用することになる。例えば、CPUコア101〜104は、分割診断テストの実施後に、その次の分割診断テストの開始を判定する際には、経過時間閾値として、(診断テスト間隔×1/4)を利用するようにすればよい。
図25は、本実施の形態6における分割診断テストを実行するためのソフトウェア処理のフロー図である。実施の形態4において図18を用いて説明した診断テストを実行するためのソフトウェア処理のフロー図と比べると、状態退避メモリ27の利用によって、タスク中断又は終了やタスク復帰又は投入というソフトウェアでの処理がなくなっているとともに、K個に分割された1つの分割診断テストは短い時間で完了するため、割り込みルーチンで通常処理が停止される時間がそれに対応して短い時間に収まることが分かる。
このようにスキャンテストのパターンを細分化し、割り込みルーチン内で分割実行することにより、一般的にCPUシステムが取り扱う各種の割り込みに対する処理と同等か、それ以内の時間に抑えることできるため、この分割診断テストの間の通常処理の停止が、そのような本来の割り込みに対する処理に悪影響を与えることはない。
また、例えば、オペレーティングシステムでは、一般的に、あるCPUコアが割り込み処理を実行中である場合、そのCPUコアでの他の割り込みの受け付けは禁止される。また、他のCPUコアに対する割り込み処理が禁止された状態とされる。それに対して、この分割診断テストによれば、割り込み処理から通常処理に迅速に復帰することが可能となるため、CPUコアによる本来の割り込み処理の実行が阻害されることもなくなる。
以上に説明した実施の形態6によれば、CPUコアは、診断テストが分割された分割診断テスト(分割スキャンテスト)が終了する毎に割り込み処理から抜けるようにしている。すなわち、CPUコアは、分割スキャンテストを開始するときにタスク(プログラム)の実行を中断し、分割スキャンテストが終了するときにタスクの実行を再開するようにしている。これに対して、診断テストコントローラ26は、分割スキャンテストを実施する毎に、FLASHメモリ9に格納された複数の入力テストデータが所定の数に分割された分割テストデータを順番に入力してCPUコアを診断するようにしている。すなわち、CPUコアの分割された診断テストを短い時間で完了することができる。これによれば、実施の形態5の効果に加えて、CPUシステムの全体の処理に与える影響が見えない形でCPUコアの診断テストを隠せるという効果が得られる。
また、以上の説明では、実施の形態6に係る分割診断テストの実行を実施の形態5に対して適用した例について説明したが、当然に、実施の形態1〜4、及び実施の形態4の変形例A、Bのいずれに対しても適用することが可能である。また、当然に、実施の形態1〜5、及び実施の形態4の変形例A、Bの任意の2つ以上を組み合わせた形態に対しても、実施の形態6に係る分割診断テストの実行を適用することが可能である。
しかしながら、特に好適には、実施の形態6に係る分割診断テストの実行を、実施の形態4の変形例Aの診断テスト実施方法が組み合わせられた形態に対して適用するとよい。実施の形態4の変形例Aの診断テスト実施方法では、CPUコアは、割り込み処理ルーチンの中で、若干のソフトウェア処理を前後に含む形で、分割診断テストにおけるスキャンテスト(分割スキャンテスト)を終了させるようにしている。これによれば、上述したようにCPUコアの診断テストがCPUシステムの全体処理に与える影響を抑えられるという効果が得られる。これによれば、一般的にCPUシステムが取り扱う各種の割り込みに対する処理と同等か、それ以内の時間に、1回の分割診断テストの処理を終えることができるため、この分割診断テストの実行によりCPUコアによる本来の割り込み処理の実行を阻害することが避けられる。
また、実施の形態6に係る分割診断テストの実行を、実施の形態4の変形例Bの診断テスト実施方法が組み合わせられた形態に対して適用した場合には、診断テストトリガー回路43には、システムバスを介してCPU20から、図23又は図24に示した診断テスト間隔(すべてのCPUコアに対する各K回の分割診断テストを完了させる期間)の情報、その間で実行する各CPUコアのそれぞれの分割診断テストのタイミング(診断テスト間隔の先頭タイミングからの経過時間)の情報、等を予めレジスタで設定することになる。これにより、図23又は図24に示したような各CPUコアに対する分割診断テスト(1番めからK番めまで)の実行開始タイミングで、割り込みコントローラ121経由で所望のCPUコアに対してトリガー割り込みを与えることができる。
なお、この場合にも、上述と同様に、診断テスト間隔における最初の分割診断テストの実行開始タイミングになったときだけ、診断テストトリガー回路43からCPUコア101に対して割り込み信号が出力されるようにして、後のCPUコア101の分割診断テストや他のCPUコア102〜104の分割診断テストを実行するシーケンス制御は別の方法で行うようにしてもよい。
<実施の形態7>
また、本実施の形態7について、図面を用いて、その構成と動作を説明する。
図26は、本実施の形態7に係るCPUシステム7の構成を示すブロック図である。図16に示した実施の形態4におけるCPUシステム5との違いは、テストデータを格納する外部メモリであるFLASHメモリ9が、診断テストコントローラ26に直接的に接続される形態ではなく、システムバスを介して(診断テストコントローラ28に)間接的に接続される形態になっている点である。
図27は、図26に示した診断テストコントローラ28の構成を示すブロック図である。DMAC12は、テストデータを格納するFLASHメモリ9から、CPUシステム7の起動時に、すべてのテストデータを外付けで高速大容量のDDRメモリ8に転送する。ここで、FLASHメモリ9に、CPUコア101〜104が実行するプログラムも予め格納しておくようにし、そのプログラムもテストデータと同時にDDRメモリ8に転送するようにしてよい。
また、DMAC12は、CPUコアを診断テスト(スキャンテストによる故障診断)する際に必要となるテストデータを、そのDDRメモリ8からスキャンテストの制御回路(すなわち、診断テストコントローラ28)にDMA転送する。本実施の形態7では、診断テストコントローラ28のテストデータ入力回路231にシステムバスとのI/Fがある。テストデータ入力回路231は、DMA転送によるテストデータの受け取りとCPUコアへのパターンの供給を行う。
CPUシステム7におけるシステムバスは、多種多様なデータが流れる高いバンド幅を持つ内部バスであり、各種アクセスはその優先順位やタイミング規定に基づいてバスアクセスの調停が行われる。そのため、診断テスト用の複数のテストデータのそれぞれをこのシステムバス経由で診断テストコントローラ28にDMA転送するタイミングにはある程度の偏りが発生する。このタイミングの偏りを吸収する小容量のFIFOメモリ230を設け、テストデータ入力回路231からのアクセスを可能としている。
すなわち、スキャンテストの実行時には、DMAC12は、DDRメモリ8に格納されたテストデータを、テストデータ入力回路231のFIFOメモリ230に順次DMA転送する。そして、診断テストコントローラ28は、FIFOメモリ230に格納されたテストデータ(入力テストパターン)を順次取得して、CPUコア101〜104のスキャンチェーンに入力する。
典型的には、本実施の形態7を実施の形態2に対して適用した場合には、図12で説明した入力パターンデータの1セット分(8ビットのデータ×N個)が格納できる容量があればよい。また、FIFOメモリ230は、2セット分の入力パターンデータを格納できる容量のダブルバッファ形式のメモリとしても構わない。この場合、最後の累積期待値データ(例えば、24ビット)は、このFIFOメモリ230及びDDRメモリ8には格納しない。例えば、CPUシステム7の起動時に、テストデータ入力回路231がFLASHメモリ9から読み出し、自身が有するレジスタ(図示せず)に格納するようにしてもよい。また、CPU20がFLASHメモリ9から読み出して、テストデータ入力回路231のレジスタに設定するようにしてもよい。しかしながら、必ずしも、累積期待値データをFIFOメモリ230及びDDRメモリ8に格納しないようにすることには限定されない。累積期待値データも、他のテストデータと同様にDDRメモリ8を介してテストデータ入力回路231にDMA転送されるようにしてもよい。
また、以上の説明では、実施の形態4に対して、本実施の形態7に係るテストデータ転送方法を適用した例について説明したが、当然に、実施の形態1〜3、5〜6、及び実施の形態4の変形例A、Bのいずれに対しても適用することが可能である。また、当然に、実施の形態1〜6、及び実施の形態4の変形例A、Bの任意の2つ以上を組み合わせた形態に対しても、本実施の形態7に係るテストデータ転送方法を適用することが可能である。
以上に説明した実施の形態7によれば、テストデータを格納するFLASHメモリ9をシステムバスに接続する形態とし、CPUシステム7の起動時に、FLASHメモリ9に格納された複数の入力テストデータを、システムバスを介してDDRメモリ8にDMA転送して格納するようにしている。そして、DDRメモリ8に格納された複数の入力テストデータを、システムバスを介して診断テストコントローラ28に順次DMA転送するようにしている。また、診断テストコントローラ28は、前記DMAコントローラによって転送された入力テストパターンの一部を一時的に格納するFIFOメモリ230を有し、FIFOメモリ230に格納された入力テストパターンをCPUコア101〜104のスキャンチェーンに入力するようにしている。そのため、実施の形態1〜6、及び実施の形態4の変形例A、Bの効果に加えて、また、通常のプログラム格納用のFLASHメモリ9(例えば、起動時に必要なプログラムが外付けのDDRメモリ8に転送され、動作時にはそのDDRメモリ8からプログラムが読み出されてCPU20が動作する)と兼用することもできるという効果が得られる。また、そのようにしても、システムバスにおける伝送の遅延に影響されることなく、スキャンテストを実施することが可能である。
<実施の形態8>
また、本実施の形態8について、図面を用いて、その構成と動作を説明する。
図28は、本実施の形態8に係るCPU40の構成を示すブロック図である。実施の形態5において図20で説明したCPU30との違いは、いずれか1つのCPUコアが保持するFF状態を退避可能な状態退避メモリ27を外部に設けるのではなく、CPU40の中に、いずれか1つのCPUコアが保持するFF状態を転送して通常動作を引き継ぐことが可能な代替用のCPUコア109を設けた点である。CPUコア101〜104と、L1キャッシュ111〜114との間の入出力信号線のそれぞれに、セレクタ271〜274を追加している。また、CPUコア101〜104と、CPU共通回路120との間の入出力信号線のそれぞれに、セレクタ275〜278も追加している。
セレクタ271は、L1キャッシュ111の接続先を、CPUコア101とCPUコア109のいずれかに切り換える。セレクタ272は、L1キャッシュ112の接続先を、CPUコア102とCPUコア109のいずれかに切り換える。セレクタ273は、L1キャッシュ113の接続先を、CPUコア103とCPUコア109のいずれかに切り換える。セレクタ274は、L1キャッシュ114の接続先を、CPUコア104とCPUコア109のいずれかに切り換える。
セレクタ275は、CPU共通回路120の接続先を、CPUコア101とCPUコア109のいずれかに切り換える。セレクタ276は、CPU共通回路120の接続先を、CPUコア102とCPUコア109のいずれかに切り換える。セレクタ277は、CPU共通回路120の接続先を、CPUコア103とCPUコア109のいずれかに切り換える。セレクタ278は、CPU共通回路120の接続先を、CPUコア104とCPUコア109のいずれかに切り換える。
また、本実施の形態8に係るスキャンテスト用回路251〜254の動作及び構成は、実施の形態5に係るスキャンテスト用回路251〜254と同様であるが、選択回路215及び分配回路216の接続先が状態退避メモリ27に代えて、CPUコア109とされている。
代替制御回路259は、診断テストコントローラ26のテスト制御回路229からテストモード切り換え信号の入力を受ける。代替制御回路259は、テスト制御回路229からのテストモードへの切り換えを指示するテストモード切り換え信号の入力によってスキャンテストの開始を認識し、スキャンテストが開始してからCPUコアから出力されたデータを、分配回路216によりスキャンチェーンのサイズ分だけ取得し、CPUコア109のスキャンチェーンに格納する。また、CPUコア109は、テスト制御回路229からのテストモード切り換え信号の入力に応じて、セレクタ271〜278のうち、診断テスト対象のCPUコアに対応するセレクタの接続先を、診断テスト対象のCPUコアからCPUコア109に切り換える。これにより、CPUコア109は、CPUコア109のスキャンチェーンに格納されたデータに基づいて、診断テスト対象のCPUコアの処理を代替して実行する。また、この際に、CPUコア109は、診断テスト対象のCPUコアに代わり、診断テスト対象のCPUコアに対応するL1キャッシュと、CPU共通回路120にもアクセスして処理を進めることができる。
また、代替制御回路259は、例えば、スキャンクロックによってスキャンテストの進行状況を観測し、全ての入力テストパターンの入力が終了したタイミングで選択回路215の接続先をCPUコア109に切り換える。そして、代替制御回路259は、CPU109のスキャンチェーンに格納されたデータを、選択回路215を介してCPUコアに順次入力する。すなわち、代替制御回路259は、全ての入力テストパターンの入力が終了してから、最後の出力結果データが引き出されるまでのスキャンチェーンの駆動期間を利用して、CPUコアのスキャンチェーンにCPUコア109からデータを戻す。これによれば、診断テスト対象であったCPUコアは、CPUコア109で代替して実行されていた処理を引き継ぐことができきる。
図29には、図28に示したCPU40の各CPUコア101〜104の診断テストの実行の様子を示す。実施の形態1において図6を用いて説明した診断テストの実行の様子と比べると、CPUコア101〜104を診断テスト(スキャンテストによる故障診断)動作に切り換える際にその通常動作を引き継ぐCPUコア109をさらに設けた構成となっているため、スキャンチェーンを用いてCPUコア101〜104の内部のFF状態をCPUコア109に移して通常動作を継続(代替動作)させることができることが分かる。このとき、診断テスト対象のCPUコアに直結されているL1キャッシュメモリ111〜114(のいずれか)及びCPU共通回路120等の接続先はCPUコア109に切り換えられる。
診断テスト動作が完了したら、同様の方法でFF状態をCPUコア109から元のCPUコアに戻し、本来の姿での元のCPUコアの通常動作を継続させる。CPUコア109を動作させる必要がない期間はその動作を停止させる。なお、CPUコア109がセレクタを経由してL1キャッシュやCPU共通回路120と入出力するパスは、本来のCPUコアが入出力するパスよりも信号線長が長くなるため、CPUコア109における代替動作の周波数はそれに対応して落とすことが望ましい。すなわち、好ましくは、CPUコア109の動作周波数は、CPUコア101〜104よりも低い動作周波数とする。
また、以上に説明した本実施の形態8に係るCPUコア109、スキャンテスト用回路251〜254、及び代替制御回路259は、実施の形態5と競合しない形態であれば、実施の形態1〜4、6〜7、及び実施の形態4の変形例A、Bのいずれに対しても適用することが可能である。また、当然に、実施の形態1〜4、6〜7、及び実施の形態4の変形例A、Bの任意の2つ以上を組み合わせた形態に対しても、本実施の形態8に係るCPUコア109、スキャンテスト用回路251〜254、及び代替制御回路259を適用することが可能である。
以上に説明した実施の形態8によれば、スキャンテストが開始したときから順次出力されるデータを、スキャンチェーンの長さ分だけ取得して、代替用のCPUコア109のスキャンチェーンに格納するようにしている。そして、代替用のCPUコア109は、CPUコア109のスキャンチェーンに格納されたデータに基づいて、スキャンテストの実施されるCPUコアの処理を代替して実行する。そのため、実施の形態1〜4、6〜7、及び実施の形態4の変形例A、Bの効果に加えて、CPUコアの診断テストの実行による性能の低下を大幅に減らせるという効果が得られる。
<実施の形態9>
また、本実施の形態9について、図面を用いて、その構成と動作を説明する。
以下、本実施の形態に係るCPU60を、実施の形態1に係るCPUシステム3に対して適用した場合について説明する。図30は、高い演算性能を実現するCPUシステム2の別の例におけるCPU50の構成を示すブロック図である。図2に示したCPUシステム2におけるCPU10は4つのCPUコア101〜104とCPU共通回路120から成っていたが、このCPU50はそれを2倍に増やした構成に相当する。4つのCPUコアとCPU共通回路から成るCPUグループを2つ設ける形態とし、両者をシステムバスに接続するためのCPU全体共通回路140も設けている。なお、それぞれのCPUコア101〜108のそれぞれに付随するL1キャッシュ(L,D)は図示を省略している。
CPU50は、CPUコア101〜108、CPU全体共通回路140、CPU共通回路141、142を備える。CPU全体共通回路140は、割り込みコントローラ121、システムタイマー122、デバッグ・トレースI/F127を備える。CPU共通回路141は、L2キャッシュ124、L2キャッシュコントローラ125、キャッシュコヒーレンシーコントローラ143を備える。CPU共通回路142は、L2キャッシュ128、L2キャッシュコントローラ129、キャッシュコヒーレンシーコントローラ144を備える。CPUコア101〜104及びCPU共通回路141は、CPUグループAに含まれ、CPUコア105〜108及びCPU共通回路142は、CPUグループBに含まれる。
CPUコア105〜108は、基本的にCPUコア101〜104と同様に動作する。しかし、CPUコア105〜108は、CPUコア101〜104と比較して小型で低消費電力となっている。例えば、CPU50は、処理性能を必要とするタスクは、CPUコア101〜104で実行し、処理性能を必要としないタスクは、CPUコア105〜108で実行するようにすることで、消費電力を低減しつつ、処理が要求されるときのパフォーマンスも提供する。
本実施の形態9に係るL2キャッシュ124、L2キャッシュコントローラ125は、実施の形態1におけるものと同様である。L2キャッシュ128、L2キャッシュコントローラ129は、利用対象がCPUコア105〜108となっていること以外は、L2キャッシュ124、L2キャッシュコントローラ125と同様である。
本実施の形態9に係るキャッシュコヒーレンシーコントローラ143及びキャッシュコヒーレンシーコントローラ144は、実施の形態1に係るキャッシュコヒーレンシーコントローラ123と同様にL1キャッシュのキャッシュコヒーレンシーを実現する。キャッシュコヒーレンシーコントローラ143は、制御対象をCPUコア101〜104のL1キャッシュとしている。キャッシュコヒーレンシーコントローラ144は、制御対象をCPUコア105〜108のL1キャッシュとしている。また、キャッシュコヒーレンシーコントローラ143及びキャッシュコヒーレンシーコントローラ144は、キャッシュコヒーレンシーコントローラ123と比較して、さらにCPUグループ間でのL1キャッシュ及びL2キャッシュ124、128のキャッシュコヒーレンシーも実現する。例えば、キャッシュコヒーレンシーコントローラ143は、CPUグループBのCPUコア105〜108のいずれかによってRAM13のあるアドレスに対してデータの書き込みが発生した場合、CPUコア101〜104に対応するL1キャッシュ及びL2キャッシュ124に格納されている、そのアドレスのデータを無効化する。
本実施の形態9に係るシステムバスI/F126、割り込みコントローラ121、システムタイマー122、デバッグ・トレースI/F127は、実施の形態1におけるものと基本的に同様である。ただし、本実施の形態9では、割り込みコントローラ121及びシステムタイマー122は、CPUコア105〜108にも割り込みを発生することが可能である。
図31は、本実施の形態9に係るCPUシステム3のCPU60の構成を示すブロック図である。図30に示したCPU50に対して、CPUグループAのCPUコア101〜104と、CPUグループBのCPUコア105〜108にそれぞれスキャンテスト用回路201〜204と、スキャンテスト用回路205〜208を追加し、さらに、CPUグループAのCPU共通回路141と、CPUグループBのCPU共通回路142にもスキャンテスト用回路281、282を追加したものである。これらのスキャンテスト用回路281、282は、個々に診断テストコントローラ21と接続され、スキャンテストの制御が行われる。すなわち、本実施の形態9に係る診断テストコントローラ21では、CPUコア105〜108及びCPU共通回路141、142に対しても、リセット信号、フラグ信号、テストモード切り換え信号、入力テストパターンを出力可能とされている。また、診断テストコントローラ21のセレクタ224も、CPUコア105〜108及びCPU共通回路141、142からの出力結果データも選択可能とされている。なお、ここでも図30の場合と同様に、それぞれのCPUコア101〜108に付随するL1キャッシュ(L,D)は図示を省略している。
本実施の形態に係るスキャンテスト用回路201〜204は、実施の形態1におけるものと同様である。スキャンテスト用回路205〜208は、スキャンテスト用回路201〜204と同様である。ただし、スキャンテスト用回路205〜208のそれぞれの制御対象は、CPUコア105〜108のそれぞれとなる。
また、スキャンテスト用回路281、282も、スキャンテスト用回路201〜204と同様に、スキャンデータ伸長回路211及びスキャンデータ圧縮回路212を有する。ただし、このスキャンデータ伸長回路211及びスキャンデータ圧縮回路212は、CPU共通回路141、142が有するスキャンチェーンの本数に応じてデータの拡大または縮小を行うことになる。なお、CPU全体共通回路140の故障診断のためには、その回路を二重化する方法が一例として挙げられる。このとき、二重化した各回路の出力信号(複数本あり)の一致を確認する比較回路を設け、いずれか一つでも出力信号の不一致が検出された場合には、CPU全体共通回路140の故障を通知する通知信号を出力するようにすればよい。
図32は、図31に示したCPU60の診断テストの実行の様子を示す説明図である。複数のCPUコア101〜108を備え、CPUグループを複数備えるマルチコア構成のCPUシステム3において、通常動作中に各CPUグループA、BのCPUコア101〜108を順番に選択しながら、周期的に個々のCPUコアに対する故障診断を行う点は、実施の形態1の場合と同じである。しかしながら、この実施の形態9は、所定のタイミングではいずれか1つのCPUグループを順次選択してその中のCPU共通回路141、142に対する故障診断も行う点に特徴がある。それぞれのCPUコア101〜108の故障診断に加えて、実施の形態1では診断テストの対象外としていたCPU共通回路141、142の故障診断も、高速なハードウェアとしてのスキャンテストにより実現することができる。
この図32に示したそれぞれのCPUコア101〜108とCPU共通回路141、142の診断テスト(スキャンテストによる故障診断)の様子は一例である。CPUグループAにおけるCPU共通回路141の診断テストをCPUコア101〜104とは別のタイミングで実行する場合、そのタイミングではそれぞれのCPUコアの動作にシステムバスと通信できないという制限が生じることに注意が必要である。よって、CPU共通回路141の診断テスト中には、CPUコア101〜104は所定の制限動作を行うようにしてもよい。例えば、CPUコア101〜104の処理を停止するようにしてもよい。
また、図32に示すように、例えば、CPUグループBにおけるCPU共通回路142の診断テストをCPUコア105〜108のいずれかの診断テストと同じタイミングで実行することも可能である。すなわち、そのタイミングではそれぞれのCPUコア105〜108がシステムバスと通信できないため、すべてのCPUコア105〜108をCPU共通回路142と同時に診断テストするようにしても構わない。
なお、それぞれのCPUグループが備える4つのCPUコアは全く同じ回路であるため、その診断テストのために必要なテストデータは同一となるが、CPU共通回路はそれとは異なる回路となるため、その診断テストのために必要なテストデータも異なる。すなわち、そのデータ量や診断テスト時間も異なるものとなる。CPUグループBの場合のように、複数のCPUコア105〜108とCPU共通回路142も同じタイミングで診断テストする場合には、診断テストコントローラ21の構成と動作はその並列度に合わせたものとしておく必要がある。すなわち、テストデータ入力回路222、テスト結果比較回路223、及びセレクタ224を、CPUコア105〜108とCPU共通回路142とで別々に設けるようにする。
ここで、図32に示すように、診断テストコントローラ21は、CPU共通回路141、142それぞれのスキャンテストの実施時間帯(実施期間)が相互に重複しないように所定の順序で周期的にスキャンテストを実施する。診断テストコントローラ21は、CPU共通回路141、142を同一の診断テスト間隔で周期的にスキャンテストを実施することで、スキャンテストの実施時間帯(実施期間)が相互に重複しにくくなるようにしている。この診断テスト間隔も、例えば、FTTI(例えば、0.1秒)以下の間隔となるように予め任意に定められる。CPU共通回路141、142のそれぞれの診断テスト時間は、相互に重複しないのであれば、必ずしも等間隔(診断テスト間隔×1/2)でずれている必要はない。しかし、好ましくは、CPU共通回路141、142のそれぞれの診断テスト時間を等間隔でずらすようにすることで、診断テストの実施時間帯(実施期間)のタイミング(近接または離間)による性能の偏りを低減することができる。
また、以上の説明では、実施の形態1に対して、本実施の形態9に係るCPU60及びその診断テスト方法を適用した例について説明したが、当然に、実施の形態2〜8、及び実施の形態4の変形例A、Bのいずれに対しても適用することが可能である。また、当然に、実施の形態1〜8、及び実施の形態4の変形例A、Bの任意の2つ以上を組み合わせた形態に対しても、本実施の形態9に係るCPU60及びその診断テスト方法を適用することが可能である。例えば、実施の形態4に対して適用する場合には、CPU共通回路141の診断テスト開始信号は、それと同一のCPUグループAに属するCPU101〜104が代替して診断テストコントローラ26に出力するようにすればよい。これについては、CPUグループBについても同様である。
以上に説明した実施の形態9によれば、CPU共通回路141及びCPU共通回路142のそれぞれのスキャンテストも、スキャンテストの実施時間帯(実施期間)が相互に重複しないように所定の順序で周期的に実施するようにしている。これによれば、これまでに説明した実施例の効果に加えて、CPUにおける診断テストの対象を広げ、CPUコア101〜108だけでなくCPU共通回路141、142の故障診断も実現できるという効果が得られる。
<他の実施の形態>
最後に、その他の実施の形態(バリエーション)について、以下、説明する。
ここまでに示した各実施の形態はいずれも、スキャンテストとして圧縮スキャン方式を適用し、入力本数>出力本数としていたが、ハードウェアとしてスキャンテストで故障診断する方法としては、様々なバリエーションが考えられる。圧縮スキャン方式を適用する場合に入力本数=出力本数としても構わない。また、一般的にテストデータの容量が大きくなり、診断テストのための入力データレートを高める必要が生じるものの、圧縮スキャン方式ではなく通常のスキャンテスト(入力本数や出力本数がスキャンチェーン本数と同じ)の形態としてもよい。
診断テストのテストデータを格納する外付けのFLASHメモリ9としては、Serial FLASHを始めとして様々なタイプのものが候補となる。また、そのFLASHメモリ9に格納するテストデータの格納方法(データ単位のビット幅やアドレス範囲他)も、図9や図12で説明したものから変えることも可能である。さらに、同等の故障検出率を達成するために必要なパターンの長さが長くなる傾向はあるが、テスト対象の回路で診断時間が十分短くできるのであれば、テストデータを外付けのFLASHメモリ9に格納しておいて使用するのではなく、疑似乱数をベースとしてスキャンテストのパターンを生成する回路を内部に設けて使用する方法としてもよい。
また、これまでに示した各実施の形態では、診断テストの対象とする回路をマルチコア構成のCPUにおける各CPUコアとしていたが、同じ考え方で他のマルチコア構成の処理回路も診断テストすることが可能である。例えば、図3、図14、図16、図19、図26、図34、又は図36に示したCPUシステムのブロック図にあるハードウェアアクセラレータ11の各コア(PE:Processing Element)を、同様の診断テストの対象としてもよい。
実施の形態3の説明では、診断テストコントローラ(CPUコアの診断テストの制御を行う回路)25を、起動時に診断テストするための回路(疑似乱数をベースとしてスキャンテストのパターンを生成して、スキャンテストを実行する回路)241〜243も追加で設けることとしたが、両方の回路を同じ方法でテスト対象の回路を診断テストすることとすることも可能である。つまり、同等の診断テストコントローラを2つ設けて、起動時には順番にお互いの診断テストを行って正常であることを確認した上で、本来の動作(テスト対象回路の診断テスト)を開始するようにしてもよい。また、本来の動作を行うときには、2つある診断テストコントローラが二重化された冗長構成(双方の出力信号を常時比較する回路を追加)となるようにしてもよい。あるいは、その2つの診断テストコントローラは、実施の形態9のようにテスト対象が2つのCPUグループに分かれている場合や、CPUコア101〜108とCPU共通回路141、142という異なる回路に分かれている場合には、それぞれの診断テストを制御する回路として動作するようにしてもよい。
実施の形態4の説明では、診断テストコントローラ26は、CPUコアから診断テスト開始指示信号を受けると、そのテスト制御回路229がCPUコアに、テストモード切り換え信号をスキャンテストのモードに設定して出力し、その後、診断テストが完了したタイミングではテストモード切り換え信号を通常のモードに戻して出力し、さらにCPUコアに対してリセット信号を出力することとしていた。しかしながら、これらの処理をプログラマブルな回路(例えば、別に設けたサブCPU)で制御して、信号出力のタイミング等の自由度を高められる構成としてもよい。
なお、スキャンテスト(圧縮スキャン方式を含む)の技術は、半導体デバイスの量産テストで広く用いられているものであり、CPUコアの診断テストのための診断テストコントローラやCPUコアに付けるスキャンテスト回路を、その量産テストのために付加されるテスト回路と上手く共有するとよい。
ここで、上述の各実施の形態から抽出される一実施の形態について、図33を参照して説明する。図33は、上述の各実施の形態から抽出される一実施の形態に係る半導体装置90を示す図である。
半導体装置90は、複数のCPUコア91〜94と、診断テスト回路95を有する。半導体装置90は、CPUシステム2、3、4、5、6、7、5A、5Bに対応する。複数のCPUコア91〜94のそれぞれは、スキャンチェーンを有する。CPUコア91〜94は、CPUコア101、102、103、104、105、106、107、108、109に対応する。診断テスト回路95は、スキャンチェーンを用いてCPUコア91〜94のスキャンテストを実施する。診断テスト回路95は、診断テストコントローラ21、23、25、26、28に対応する。
ここで、診断テスト回路95は、複数のCPUコア91〜94のそれぞれのスキャンテストを、スキャンテストの実施時間帯(実施期間)が相互に重複しないように所定の順序で周期的に実施する。これによれば、演算性能の低下を抑制することができる。
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。