以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一の部材には原則として同一の符号を付し、その繰り返しの説明は省略する。
以下においては、本発明の実施の形態の特徴を分かりやすくするために、本発明の前提となる従来技術(図13〜図15)と比較して説明する。
図13に、本発明の前提となる従来技術として、プロセッサであるCPUが周辺モジュールに内蔵されているレジスタの値を読み出すことで、診断を行うデータ処理装置の全体構成の一例を示す。
このデータ処理装置は、CPUバス30、CPU31、メモリ32、周辺バス40、周辺バス制御部41、第1の周辺モジュール(周辺モジュール#1)42−1〜第Nの周辺モジュール(周辺モジュール#N)42−N、バスブリッジ制御部100とから構成される。
CPUバス30は、周辺バス40よりも高速な周波数で動作するバスである。CPUバス30と周辺バス40は、コマンドバス(例えば4ビット)、アドレスバス(例えば32ビット)、データバス(例えば32ビット)などを区別せずにまとめて1つの線で示している。
CPUバス30には、プロセッサであるCPU31と、CPU31が使用するメモリ32と、バスブリッジ制御部100が接続される。周辺バス40には、周辺バス40を制御する周辺バス制御部41と、第1から第NまでのN個(1つ以上)の周辺モジュール42{42−1,42−2,・・・,42−N}と、バスブリッジ制御部100とが接続される。周辺モジュール42は、例えばA/D変換器やタイマーといったモジュールである。
周辺バス制御部41は、主に周辺バス40の調停処理を行うモジュールであり、周辺モジュール42やバスブリッジ制御部100から出力される周辺バス40の使用要求に対して、いずれか1つのモジュールに対して周辺バス40の使用許可を出力する。周辺バス使用許可を得たモジュールは、周辺バス40にコマンドを発行することが可能となる。
バスブリッジ制御部100は、CPUバス30と周辺バス40との間での信号の入出力処理を行うモジュールであり、CPU31が周辺モジュール42に対してアクセスする場合に、CPU31がCPUバス30に発行したコマンドやアドレスなどを変換して周辺バス40に出力したり、周辺モジュール42から出力された読み出しデータをCPUバス30に転送するといった処理を行う。
このバスブリッジ制御部100はデフォルトバスマスタであるため、周辺モジュール42へのアクセス応答性が良くなっている。デフォルトバスマスタとは、どの周辺モジュール42も周辺バス使用要求を出していない場合、周辺バス使用要求を出していなくてもデフォルトで周辺バス使用許可を得ることができる機能のことである。これにより、周辺バス40が使われていない場合には、CPU31からのアクセスによるコマンドを、直ぐに周辺バス40に出力することができるようになる。ちなみに、CPU31からのアクセスが無い時に、周辺バス使用許可を得た場合は、周辺バス40にNOPコマンドを出力する。
図14は、図13に示したバスブリッジ制御部100の構成の一例を示している。このバスブリッジ制御部100は、特にCPU31が周辺モジュール42に対して読み出しアクセスを行うための部分について示している。
図に示すように、バスブリッジ制御部100は、周辺バス信号発行制御部101と、通常コマンド生成部12と、NOPコマンド生成部20と、周辺バスコマンド選択部14と、通常アドレス生成部15と、NOPアドレス生成部21と、周辺バスアドレス選択部17と、データ乗せ替え部19と、CPUバス30や周辺バス40との間で入出力する信号線とで構成される。
周辺バス信号発行制御部101は、周辺バス40に出力する信号の発行タイミング制御や周辺バスデータ401の取り込みタイミング制御、周辺バス使用要求の生成などを行う。周辺バス使用要求111は、周辺バス40を使用したい時に、周辺バス制御部41から出力される周辺バス使用許可411がネゲート(無効)状態の場合に、周辺バス制御部41に対して出力する信号である。
通常コマンド生成部12は、CPU31がCPUバス30に周辺モジュール42に対するCPUバスコマンド301を発行した場合、CPUアクセスが発生したことをCPUアクセス発生通知122で周辺バス信号発行制御部101に通知するとともに、CPUバスコマンド301を通常コマンド121に変換する。NOPコマンド生成部20は、周辺バス40用のNOPコマンド201を生成する。
周辺バスコマンド選択部14は、周辺バス信号発行制御部101から出力される選択信号112に従って、通常コマンド121かNOPコマンド201のどちらか一方を選択し、周辺バスコマンド141として周辺バス40に出力する。選択信号112は、CPU31からのアクセスが有り、かつ周辺バス使用許可411がアサート(有効)状態であれば通常コマンド121を選択し、CPU31からのアクセスが無く、かつ周辺バス使用許可411がアサート(有効)状態であれば、NOPコマンド201を選択する信号である。
通常アドレス生成部15は、CPU31が上記したCPUバスコマンド301と同じタイミングで出力するCPUバスアドレス302を通常アドレス151に変換する。NOPアドレス生成部21は、周辺バス40用のNOPアドレス211を生成する。
周辺バスアドレス選択部17は、周辺バス信号発行制御部101から出力される選択信号112に従って、通常アドレス151かNOPアドレス211のどちらか一方を選択し、周辺バスアドレス171として周辺バス40に出力する。選択信号112は、CPU31からのアクセスが有り、かつ周辺バス使用許可411がアサート(有効)状態であれば通常アドレス151を選択し、CPU31からのアクセスが無く、かつ周辺バス使用許可411がアサート(有効)状態であればNOPアドレス211を選択する信号である。
データ乗せ替え部19は、周辺バス信号発行制御部101から出力されるデータ乗せ替えタイミング信号113に従って、周辺バスデータ401をCPUバスデータ191に乗せ替える。データ乗せ替えタイミング信号113は、バスブリッジ制御部100が発行した読み出しコマンドに対する有効な読み出しデータが周辺モジュールから出力された場合に、そのデータを取り込むタイミングを指示する信号である。
図15は、前記図13及び図14に示したデータ処理装置の動作の一例をタイムチャートで示したものである。t0〜t16は、CPUバスクロック33に対応した時間の単位である。本例では、CPUバスクロック33と周辺バスクロック43とのクロック比が4:1の場合を示している。また、バスブリッジ制御部100はデフォルトバスマスタであるため、周辺バス使用許可が常にアサート状態である場合を示している。ここでは、CPU31の周辺モジュール42への診断アクセスとして、読み出しアクセスを1回のみ行った場合を示している。
まずt0で、CPU31が周辺モジュール42に対して診断アクセスを行うために、CPUバスコマンド301(リードコマンド:R0)と、CPUバスアドレス302(A0)を出力する。これ以降のCPUバスコマンド301(R1、R2、R3)は、CPUバス30に接続されたメモリ32へのアクセスとする。次に、バスブリッジ制御部100はこのコマンド(R0)を受けて、周辺バスクロック43の立ち上がり(t1)から周辺バスコマンド141(R0)と、周辺バスアドレス171(A0)を出力する。これ以降の周辺バスコマンド141は、CPU31からのアクセスがないためNOPコマンドを出力する。NOPコマンドに対応するアドレスは不定で良い。
その後、周辺バスアドレス171(A0)に対応する周辺モジュール42が周辺バスコマンド141(R0)を受けて、t5から読み出しデータ(D0)を周辺バスデータ401に出力する。バスブリッジ制御部100は、この読み出しデータ(D0)が確定するタイミング(t9)で、CPUバスデータ191に乗せ替える。CPU31は、t9の読み出しデータ(D0)と予め用意してある期待値データとを比較することで、周辺モジュール42の内蔵レジスタが故障しているかどうかを判定する。
このように、CPU31が周辺モジュール42の診断を行う場合には、周辺モジュール42からの読み出しデータが届くまでの間、すなわちt2〜t10の期間CPUバス30は次に進めないためストール(停止)状態となる。ストール期間中は、CPU31も停止状態となるため、CPU性能が低下する。本例では、CPUバス30と周辺バス40のクロック比が4:1の場合を示したが、8:1や16:1といったクロック比では、CPUバス30のストール期間が4:1よりも長くなるため、CPU性能低下が非常に問題となる。そこで、以下に説明するような本発明の実施の形態が考えられた。
図1は、本発明の一実施の形態におけるデータ処理装置の全体構成の一例を示している。このデータ処理装置は、CPUバス30、CPU31、メモリ32、周辺バス40、周辺バス制御部41、第1の周辺モジュール(周辺モジュール#1)42−1〜第Nの周辺モジュール(周辺モジュール#N)42−N、バスブリッジ制御部1、診断情報設定部20とから構成される。バスブリッジ制御部1と診断情報設定部20以外の各部は、前提技術の構成と同様である。なお、診断情報設定部20をバスブリッジ制御部1の外部に設けた構成として示しているが、バスブリッジ制御部1の内部に設けた構成も可能である。
CPU31と、メモリ32と、バスブリッジ制御部1は、CPUバス30に接続される。第1から第NのN個(1つ以上)の周辺モジュール42{42−1,42−2,・・・,42−N}と、バスブリッジ制御部1は、周辺バス40に接続される。バスブリッジ制御部1は、CPUバス30と周辺バス40とを接続し、診断情報設定部20と、CPU31に接続される。CPU31に接続される診断通知181は、周辺モジュール42の診断結果である。診断情報設定部20に設定された値を診断情報設定値201としてバスブリッジ制御部1に出力する。診断情報設定値201は、バスブリッジ制御部1が周辺モジュール42の診断を行うために使用する値である。
本データ処理装置において、CPU31は診断アクセスによるCPUバス30のストールを回避するために、診断のための周辺モジュール42のアクセスを一切行わない。その代わりに、バスブリッジ制御部1が診断情報設定部20に設定された診断情報設定値201に従って、周辺モジュール42に対して診断コマンドを発行する。バスブリッジ制御部1はデフォルトバスマスタであるため、CPU31の周辺モジュール42に対するアクセスの応答性が向上している。
従来は、バスマスタになった場合に、CPU31から周辺モジュール42に対するアクセスが無い場合は、周辺バス40にNOPコマンドを出力していたが、本データ処理装置では、このNOPコマンドを出力する代わりに、周辺モジュール42への診断コマンドを発行する。診断対象となる周辺モジュール42は、診断コマンドに対する診断結果を周辺バス40に出力する。バスブリッジ制御部1は、この診断結果をCPU31に通知する。診断情報設定部20は、診断情報設定値201が設定・保持されるレジスタで構成される。特に、診断情報設定部20は外部から設定を行う構成に対応している。例えば、CPU31から診断情報設定部20のレジスタに対して読み出しや書き込みができる構成となっている。
図2は、図1に示した診断情報設定部20に設定する診断情報設定値201の一例を示している。本例では、診断コマンド発行部分に「1」を設定している。この設定値を、診断情報設定値201としてバスブリッジ制御部1に出力する。診断コマンド発行部分に「1」が設定された場合、バスブリッジ制御部1は周辺バス40の空きサイクルに周辺モジュール42に対する診断コマンドを発行する。診断コマンド発行部分に「0」が設定された場合は、周辺バス40の空きサイクルに診断コマンドを発行しない。つまり、従来と同様に空きサイクルにはNOPコマンドを発行する。診断コマンドが発行された周辺モジュール42は、次の周辺バスサイクルのタイミングで診断結果を周辺バス40に出力する。バスブリッジ制御部1は、出力された診断結果をCPU31に出力する。
図3は、図1に示したバスブリッジ制御部1の構成の一例を示している。本例では、特に周辺バス40からCPUバス30にデータを転送する読み出し制御部分について示している。図に示すように、バスブリッジ制御部1は、周辺バス信号発行制御部11と、通常コマンド生成部12と、診断コマンド生成部13と、周辺バスコマンド選択部14と、通常アドレス生成部15と、診断アドレス生成部16と、周辺バスアドレス選択部17と、診断結果出力部18と、データ乗せ替え部19と、CPUバス30や周辺バス40との間で入出力する信号線とで構成される。
周辺バス信号発行制御部11は、周辺バス40に出力する信号の発行タイミング制御や周辺バスデータ401の取り込みタイミング制御、周辺バス使用要求の生成などを行う。周辺バス使用要求111は、周辺バス制御部41から出力される周辺バス使用許可411がネゲート(無効)状態の時に、周辺バス40を使用したい場合に周辺バス制御部41に対して出力する信号である。
通常コマンド生成部12は、CPU31がCPUバス30に周辺モジュール42に対するCPUバスコマンド301を発行した場合、CPUアクセスが発生したことをCPUアクセス発生通知122で周辺バス信号発行制御部101に通知するとともに、CPUバスコマンド301を通常バスコマンド121に変換する。診断コマンド生成部13は、周辺モジュール42に対する診断コマンド131を生成する。但し、診断情報設定値201として、診断コマンドを発行しない設定となっている場合はNOPコマンドを診断コマンド131として生成する。
周辺バスコマンド選択部14は、周辺バス信号発行制御部101から出力される選択信号112に従って、通常コマンド121か診断コマンド131のどちらか一方を選択し、周辺バスコマンド141として周辺バス40に出力する。選択信号112は、CPU31からのアクセスが有り、かつ周辺バス使用許可411がアサート(有効)状態であれば通常コマンド121を選択し、CPU31からのアクセスが無く、かつ周辺バス使用許可411がアサート(有効)状態であれば診断コマンド131を選択する信号である。
通常アドレス生成部15は、CPU31が上記したCPUバスコマンド301と同じタイミングで出力するCPUアドレス302を通常アドレス151に変換する。診断アドレス生成部16は、周辺モジュール42を指定するための診断アドレス161を生成する。但し、診断情報設定値201として、診断コマンドを発行しない設定となっている場合はNOPアドレスを診断コマンド131として生成する。
周辺バスアドレス選択部17は、周辺バス信号発行制御部11から出力される選択信号112に従って、通常アドレス151か診断アドレス161のどちらか一方を選択し、周辺バスアドレス171として周辺バス40に出力する。選択信号112は、CPU31からのアクセスが有り、かつ周辺バス使用許可411がアサート(有効)状態であれば通常アドレス151を選択し、CPU31からのアクセスが無く、かつ周辺バス使用許可411がアサート(有効)状態であれば診断アドレス161を選択する信号である。
診断結果出力部18は、周辺モジュール42が周辺バスデータ401に出力する診断結果を、周辺バス信号制御部11から出力される診断結果判定タイミング信号114に従って判定し、その判定信号を診断通知181としてCPU31に出力する。
データ乗せ替え部19は、周辺バス信号発行制御部11から出力されるデータ乗せ替えタイミング信号113に従って、周辺バスデータ401をCPUバスデータ191に乗せ替える。データ乗せ替えタイミング信号113は、読み出しコマンドに対する有効な読み出しデータが周辺モジュールから出力された場合に、そのタイミングを指示する信号である。
図4は、図3に示したバスブリッジ制御部1の動作フローの一例を示している。本例では、特に周辺バスコマンド141の発行の流れについて示している。
まず、S1で診断情報設定部20に設定された診断情報設定値201の値に基づき、周辺モジュール42に対して診断コマンドを発行するかどうかを判定する。診断コマンドを発行する設定の場合(YES)にはS2に遷移し、発行しない設定の場合(NO)にはS5に遷移する。次に、S2でCPU31が周辺モジュール42に対してアクセスを要求しているかどうかを判定する。アクセス要求がない場合(YES)にはS3に遷移し、アクセス要求がある場合(NO)にはS6に遷移する。次に、S3で周辺バス使用許可が有効であるかどうかを判定する。使用許可が有効である場合(YES)にはS4に遷移し、使用許可が無効である場合(NO)にはS1に遷移する。
次に、S4で診断コマンドの発行条件が成立するため、周辺モジュールに診断コマンドを発行し、S1に遷移する。S5では、周辺モジュール42に対するCPUアクセス要求があるかどうかを判定する。アクセス要求がある場合(YES)にはS6に遷移し、アクセス要求が無い場合(NO)にはS1に遷移する。S6では、周辺バス使用許可が有効であるかどうかを判定する。使用許可が有効である場合(YES)にはS7に遷移し、使用許可が無効である場合(NO)にはS8に遷移する。S7では、CPUアクセスによる通常コマンドの発行条件が成立するため、通常コマンドを発行し、S1に遷移する。S8では、周辺バス使用許可が無効であるため、周辺バス使用要求を出力し、S6に遷移する。
図5は、図1に示した周辺バス制御部41の構成の一例を示している。本例では、特にバスブリッジ制御部1や各周辺モジュール42から出力される周辺バス使用要求に対して、周辺バス使用許可を出力する調停処理部について示している。
図に示すように、周辺バス制御部41には、バスブリッジ制御部1から出力される周辺バス使用要求111と、第1の周辺モジュール42−1から出力される周辺バス使用要求42−11と、第2の周辺モジュール42−2から出力される周辺バス使用要求42−21と、第Nの周辺モジュール42−Nから出力される周辺バス使用要求42−N1が入力される。これらの周辺バス使用要求を調停し、いずれか1つのモジュールに対して有効な周辺バス使用許可信号を出力する。
周辺バス使用許可が出力されたモジュールは周辺バス40のバスマスタとなり、周辺バス40を使用することが可能となる。周辺バス使用許可として、バスブリッジ制御部1に対する周辺バス使用許可411、第1の周辺モジュール42−1に対する周辺バス使用許可412、第2の周辺モジュール42−2に対する周辺バス使用許可413、第Nの周辺モジュール42−Nに対する周辺バス使用許可414を出力する。
次に、調停処理の動作内容について説明する。ここでは、各モジュールから出力される周辺バス使用要求がある場合は「1」、ない場合は「0」とする。バスブリッジ制御部1の周辺バス使用要求111が「1」の場合、残りの周辺バス使用要求の有無に関係なく、バスブリッジ制御部1に対する周辺バス使用許可を「1」にして、残りの周辺バス使用許可を「0」にする(図中(a))。
バスブリッジ制御部1の周辺バス使用要求111が「0」で、かつ第1の周辺モジュール42−1の周辺バス使用要求42−11が「1」の場合、残りの周辺バス使用要求の有無に関係なく、第1の周辺モジュール42−1に対する周辺バス使用許可412を「1」にして、残りの周辺バス使用許可を「0」にする(図中(b))。
バスブリッジ制御部1と、第1の周辺モジュール42−1の周辺バス使用要求が「0」で、かつ第2の周辺モジュール42−2の周辺バス使用要求42−21が「1」の場合、残りの周辺バス使用要求の有無に関係なく、第2の周辺モジュール42−2に対する周辺バス使用許可413を「1」にして、残りの周辺バス使用許可を「0」にする(図中(c))。
バスブリッジ制御部1と、第1の周辺モジュール42−1と、第2の周辺モジュール42−2の周辺バス使用要求が「0」で、かつ第Nの周辺モジュール42−Nの周辺バス使用要求42−N1が「1」の場合、第Nの周辺モジュール42−Nに対する周辺バス使用許可414を「1」にして、残りの周辺バス使用許可を「0」にする(図中(d))。
また、バスブリッジ制御部1をデフォルトバスマスタにするため、全周辺モジュールからの周辺バス使用要求が「0」の場合は、バスブリッジ制御部1に対する周辺バス使用許可を「1」にして、残りの周辺バス使用許可を「0」にする(図中(e))。
図6は、図1〜図5に示したデータ処理装置の動作の一例を説明するタイムチャートを示している。本例では、CPUバスクロック33と周辺バスクロック43のクロック比は、4:1となっている。また、診断情報設定値201は、診断コマンドを発行する設定となっているものとする。
CPU31は、診断によるCPUバス30のストールを回避するため、周辺モジュール42に対して診断のためのアクセスを行わない。そのため、CPU31は通常のプログラムを実行するために、CPUバス30に接続しているメモリ32に対してアクセスを行う(t0〜t2)。バスブリッジ制御部1は、CPU31から周辺モジュール42に対するアクセスが無く、かつ周辺バス使用許可411が「1」であるという条件が成立しているため、t1からt4の期間、周辺モジュール42に対して診断コマンドと診断アドレスを発行する。以降、上記条件が成立する場合は、順次診断コマンドと診断アドレスを発行する(t5〜t12)。
周辺モジュール42は、自モジュールに対する診断コマンドが発行された場合、次の周辺バスサイクルのタイミングで診断結果を周辺バスデータ401に出力する(t5〜t8)。以降、自モジュールに対して診断コマンドが発行された場合、順次診断結果を周辺バスデータ401に出力する(t9〜t16)。周辺モジュール42が実行する診断としては、例えば内蔵するレジスタの故障を検出するためのライト/リードチェックなどである。ここで、t5〜t8で発行した診断コマンドに対する診断結果がt9からt12で出力され、その結果が故障であると判定された場合(t12)、t13からCPU31に対し故障であることを通知するとともに、その故障内容も同時にCPU31に通知する。
ここでは、周辺モジュール自身が内蔵レジスタのチェックを行い、その結果を周辺バス40に出力する例を示したが、バスブリッジ制御部1が各周辺モジュールに内蔵されているレジスタ値をリードし、期待値と比較してその結果をCPU31に出力するような方法でもよい。
図7は、図1に示した周辺モジュール42が内蔵するレジスタの診断を行った場合などに周辺バス40に出力する診断結果の内容の一例を示している。図に示すように、出力内容としては診断結果、故障対象、故障箇所の情報が含まれる。
診断結果部分は、例えば、内蔵レジスタの故障を検出するために、ライト/リードチェックを行った結果などであり、正常であれば「0」、故障(異常)であれば「1」を出力する。レジスタのライト/リードチェック方法の一例としては、例えば、診断用に退避レジスタを1つ用意しておき、診断対象レジスタの値をこの退避レジスタに一時退避しておき、対象となるレジスタのチェックを行った後に、退避しておいたレジスタ値を診断対象レジスタに書き戻すことで実現できる。
故障対象部分は、診断結果が「1」、すなわち内蔵レジスタが故障であると判定された場合に有効となる値であり、どのレジスタが故障しているのかを識別するためのレジスタ番号などの情報である。例えば、ある周辺モジュール内に16種類のレジスタがある場合、0〜15までの番号を予めレジスタに割り付けておき、故障の場合は、このレジスタ番号を故障対象として出力する。
故障箇所部分は、故障と判定されたレジスタのどのビットが故障しているのかを示す値であり、これも診断結果が「1」、すなわち内蔵レジスタが故障であると判定された場合に有効となる値である。例えば、レジスタの3ビット目が故障している場合には「3」を故障箇所として出力する。
以上説明したように、本発明の実施の形態のデータ処理装置では、バスブリッジ制御部1が周辺バス40の空きサイクルに診断コマンドを発行することで、CPU31に負荷をかけること無く、かつ周辺バス40を効率良く使用して周辺モジュール42の診断を実施することが可能となる。
図8は、図1に示した診断情報設定部20に設定する診断情報設定値201の一例を示している。図に示すように、診断コマンドの発行を指示する診断コマンド発行部分と、診断方法を指示する先行診断部分とで構成される。本例では、診断コマンド発行部分に「1」、先行診断部分に「1」を設定している。診断コマンド発行部分が「1」の場合、図2で説明したように、バスブリッジ制御部1は、周辺バス40の空きサイクルに周辺モジュール42に対して診断コマンドを発行し、「0」の場合は診断コマンドを発行しない。また、先行診断部分は診断コマンド発行が「1」、つまり診断コマンドを発行する場合にのみ有効となる部分である。よって、診断コマンド発行部分が「0」の場合は、先行診断部分は「1」または「0」のどちらでも良い。
次に、各設定値における動作について説明する。診断コマンド発行部分が「1」で、かつ先行診断部分が「1」の場合、バスブリッジ制御部1は、周辺バス40の空きサイクルに周辺モジュール42に対して2種類の診断コマンドを発行する。1つ目のコマンドは、周辺モジュール42に対し、診断開始を指示するコマンドである。この診断実行開始コマンドを受け付けた周辺モジュール42は、例えば内蔵レジスタのライト/リードチェックといった診断を開始する。診断が終了した場合、内部に診断結果を保持しておき、すぐに診断結果を周辺バス40に出力しない。2つ目のコマンドは、1つ目の実行診断開始コマンドによって実行された診断の結果を要求するコマンドである。この診断結果要求コマンドを受けた周辺モジュール42は、保持している診断結果を周辺バス40に出力する。バスブリッジ制御部1は、出力された診断結果をCPU31に出力する。
診断コマンド発行部分が「1」で、かつ先行診断部分が「0」の場合は、通常の診断となり、図2で説明したものと同様の動作となる。この先行診断方式を行うことで、診断処理に時間がかかる周辺モジュール42によって、周辺バス40を長時間占有してしまうという問題を回避することが可能となる。
図9は、図8に示した診断情報設定値201の場合において、バスブリッジ制御部1の動作の一例を説明するタイムチャートを示している。本例では、CPUバスクロック33と周辺バスクロック43のクロック比は、2:1となっている。また、診断情報設定値201は、診断コマンド発行が「1」、先行診断が「1」となっているものとする。
CPU31は、診断によるCPUバス30のストールを回避するため、周辺モジュール42に対して診断のためのアクセスを行わない。そのため、CPU31は通常のプログラムを実行するために、CPUバス30に接続しているメモリ32に対してアクセスを行う(t0〜t2)。バスブリッジ制御部1は、CPU31から周辺モジュール42に対するアクセスが無く、かつ周辺バス使用許可411が「1」であるため、診断実行開始コマンドを周辺モジュール42に対して発行する(t1〜t6)。周辺モジュール42は、自モジュールに対する診断実行開始コマンドが発行された場合、内蔵レジスタなどの診断を開始し、診断結果を内部に保持しておく。
その後、バスブリッジ制御部1は、診断実行開始コマンドによる診断が終了した頃に、診断結果の出力を要求する診断結果要求コマンドを発行する(t7〜t12)。周辺モジュール42は、自モジュールに対する診断結果要求コマンドが発行された場合、診断結果を周辺バスデータ401に出力する(t9〜t14)。ここで、t9に発行した診断結果要求コマンドに対する診断結果が、t12で故障であると判定された場合、t13でCPU31に対し故障であることを通知するとともに、その故障内容も同時にCPU31に通知する。
ここでは、2種類の診断用コマンドを発行する例を示したが、例えば、周辺モジュール42に診断専用レジスタを内蔵し、そのレジスタに診断開始ビットを設け、バスブリッジ制御部1がその診断開始ビットに「1」を書き込むことで、周辺モジュール42が診断を開始し、その結果を診断専用レジスタ内の結果ビットに書き込み、その後、診断結果が書き込まれた診断専用レジスタを読み出して診断結果を確認する方法でもよい。
このように、先行診断方式を行うことで、診断実行に必要な時間を十分に確保できるため、診断結果が出るまでに時間がかかり、その間、周辺バス40を占有してしまうという問題を回避することができる。
図10は、図8及び図9に示して説明した先行診断方式を行う場合において、周辺モジュール42に診断専用のレジスタを内蔵する場合のレジスタ構成の一例を示している。図に示すように、診断専用レジスタには、診断開始、診断終了、診断結果、故障対象、故障箇所の情報が含まれる。この診断専用レジスタは、外部から読み出しおよび書き込みができる構成となっており、診断開始部分は外部からリードおよびライトが可能、その他の診断終了部分、診断結果部分、故障対象部分、故障箇所部分については外部からリードのみ可能となっている。
診断開始部分は、周辺モジュール42に対して診断開始を指示するための部分であり、この部分に「1」が書き込まれると、周辺モジュール42は内蔵レジスタの診断を開始する。実際に診断が開始されると、周辺モジュール自身で診断開始部分を「0」にクリアする。つまり、診断開始部分に「1」を書き込んだ後に、この部分を読み出すことで、現在診断実行中なのか、まだ診断を開始していないのかを判定できる。
診断終了部分は、診断処理が終了したことを示す部分であり、内蔵レジスタ等の診断処理が終了した場合に、周辺モジュール自身で「1」を書き込む。
診断結果部分は、診断の結果を示す部分であり、診断が終了した後に周辺モジュール自身が診断結果を書き込む。診断結果が正常であれば「0」を、故障であれば「1」を診断結果部分に書き込む。
故障対象部分は、診断結果が「1」、すなわち故障であると判定された場合に有効となる値であり、どのレジスタが故障しているのかを識別するためのレジスタ番号などの情報が周辺モジュール自身によって書き込まれる。例えば、ある周辺モジュール内に16種類のレジスタを内蔵している場合、0〜15までの番号を予めレジスタに割り付けておき、故障の場合は、このレジスタ番号を故障対象部分に書き込む。
故障箇所部分は、故障対象部分で故障と示されたレジスタのどのビットが故障しているのかを示す値であり、これも診断結果が「1」、すなわち故障であると判定された場合に有効となる値である。例えば、レジスタの3ビット目が故障している場合は、周辺モジュール自身が故障箇所部分に「3」を書き込む。
次に、この診断専用レジスタを用いた場合の診断手順について説明する。まずバスブリッジ制御部1は、周辺モジュール42に内蔵されている診断専用レジスタの診断開始部分に「1」を書き込んで診断開始を指示し、その後、診断が終了した頃に、この診断専用レジスタを読み出す。読み出した値に従って、バスブリッジ制御部1が周辺モジュール42の故障を判定し、その内容をCPU31に通知する。
読み出した診断専用レジスタの値において、診断終了部分が「1」である場合は診断処理が終了したものと判断し、次に診断結果部分を参照する。診断終了部分が「0」の場合は、診断処理がまだ終了していないものと判断し、診断結果や診断対象、診断箇所の部分は参照しない。診断終了部分が「1」で、かつ診断結果部分が「0」であれば正常と判断し、診断対象や診断箇所の部分は参照しない。診断終了部分が「1」で、かつ診断結果部分が「1」であれば、故障であると判断し、CPU31に故障であることを通知するとともに、診断対象部分および診断箇所部分の情報もあわせてCPU31に出力する。CPU31は、この故障通知を受けて、故障発生時の動作に移行する。
以上説明したように、先行診断方式を行う場合には、周辺モジュール42に診断専用レジスタを設けることで、バスブリッジ制御部1は診断専用レジスタへの書き込みまたは読み出しを行うことで容易に周辺モジュール42の診断を実施できる。
図11は、図1に示した診断情報設定部20に設定する診断情報設定値201の一例を示している。図に示すように、診断対象となる周辺モジュール42を指定する周辺モジュール名部分と、診断コマンドの発行を指示する診断コマンド発行部分と、診断方法を設定する先行診断部分から構成される。
診断コマンド発行部分と先行診断部分については、図8で説明したものと同様である。本例では、第1の周辺モジュールに対する診断コマンド発行部分に「1」、先行診断部分に「1」、第2の周辺モジュールに対する診断コマンド発行部分に「1」、先行診断部分に「0」、第Nの周辺モジュールに対する診断コマンド発行部分に「0」、先行診断部分に「0」を設定している。各設定における動作についても、診断対象となる周辺モジュールの指定を行う点以外は、図8で説明したものと同様である。
この例では、周辺モジュール名部分の他に、診断コマンド発行部分と先行診断部分も設定する構成を示したが、周辺モジュール名部分と診断コマンド発行部分のみの構成でも良い。この場合、診断対象となる周辺モジュール名の指定を行う点以外は、図2で説明したものと同様である。
図12は、図1に示したデータ処理装置を内蔵した多種の電子制御ユニット(ECU:Electronic Control Unit)を自動車に搭載した場合の一例を示している。現在の自動車には、ECUと呼ばれる自動車制御用のマイコンが多数搭載されており、多いものでは50個以上も搭載されている。本例では、多数のECUの中から特にX−by−Wireの導入により高い信頼性が要求されるECUについて説明する。
図に示すように、自動車50の中に搭載されるECUとしては、ステアリング制御ECU51、ブレーキ制御ECU52、エンジン制御ECU53がある。ステアリング制御ECU51は、ステアリング501の操舵角をセンサ503で電気信号に変換して入力し、その入力値に応じてモータ504を動かし、進行方向を変える制御を行う。ブレーキ制御ECU52は、ブレーキペダル502の踏み込み度をセンサ505で電気信号に変換して入力し、その入力値に応じてモータ506,507,508,509を動かし、各車輪にブレーキをかける。エンジン制御ECU53は、エンジンの点火時期制御などを行い、その動力を駆動輪に伝達する。
本例では、ステアリング制御ECU、ブレーキ制御ECU、エンジン制御ECUについて説明したが、これ以外の車載ECUに本発明を適用することも可能である。
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
1…バスブリッジ制御部、11…周辺バス信号発行制御部、12…通常コマンド生成部、13…診断コマンド生成部、14…周辺バスコマンド選択部、15…通常アドレス生成部、16…診断アドレス生成部、17…周辺バスアドレス選択部、18…診断結果出力部、19…データ乗せ替え部、20…診断情報設定部、30…CPUバス、31…CPU、32…メモリ、40…周辺バス、41…周辺バス制御部、42…周辺モジュール、50…自動車、51…ステアリング制御ECU、52…ブレーキ制御ECU、53…エンジン制御ECU、501…ステアリング、502…ブレーキペダル、503,505…センサ、504,506,507,508,509…モータ。