(57)【要約】【課題】故障診断による演算性能の低下を抑制すること。【解決手段】本発明に係る半導体装置９０は、それぞれスキャンチェーンを有する複数のＣＰＵコア９１〜９４と、ＣＰＵのスキャンチェーンを用いて複数のＣＰＵコア９１〜９４のスキャンテストを実施する診断テスト回路９５と、を備える。診断テスト回路９５は、複数のＣＰＵコア９１〜９４のそれぞれのスキャンテストを、スキャンテストの実施時間帯が相互に重複しないように所定の順序で周期的に実施する。【選択図】図３３
2015206785.tif 000002
【特許請求の範囲】
【請求項１】
スキャンチェーンを有する複数のＣＰＵコアと、
前記スキャンチェーンを用いて前記複数のＣＰＵコアのスキャンテストを実施する診断テスト回路と、を備え、
前記診断テスト回路は、前記複数のＣＰＵコアのそれぞれのスキャンテストを、前記スキャンテストの実施時間帯が相互に重複しないように所定の順序で周期的に実施する、
半導体装置。
【請求項２】
前記半導体装置は、さらに、前記複数のＣＰＵコアのそれぞれに割り込みを発生する割り込み回路を備え、
前記複数のＣＰＵコアのそれぞれは、前記割り込みに応じて、前記スキャンテストの開始を指示する指示信号を前記診断テスト回路に出力し、
前記診断テスト回路は、前記複数のＣＰＵコアのそれぞれからの指示信号の出力に応じて、前記複数のＣＰＵコアのそれぞれのスキャンテストを実施する、
請求項１に記載の半導体装置。
【請求項３】
前記複数のＣＰＵコアのそれぞれは、オペレーティングシステムによってスケジューリングされたプログラムを実行し、
前記複数のＣＰＵコアのそれぞれは、前記割り込みに応じて、自ＣＰＵコアが実行しているプログラムを実行待ち状態に移行させるとともに、前記オペレーティングシステムが自ＣＰＵコアに任意のプログラムをスケジューリングしないように設定する、
請求項２に記載の半導体装置。
【請求項４】
前記割り込み回路は、前記割り込みとして、所定の割り込み周期でタイマー割り込みを発生するシステムタイマーであり、
前記半導体装置は、さらに、前記複数のＣＰＵコアのそれぞれが前記指示信号を前記診断テスト回路に出力するときに、前記複数のＣＰＵコアのそれぞれにより、その時刻を示す時刻情報が格納される時刻情報記憶部を備え、
前記複数のＣＰＵコアのそれぞれは、前記タイマー割り込みに応じた割り込み処理で前記システムタイマーから取得した時刻と、前記時刻情報記憶部に格納された時刻情報が示す時刻との差が、前記スキャンテストの実行周期に達している場合に、前記指示信号を前記診断テスト回路に出力する、
請求項２に記載の半導体装置。
【請求項５】
前記半導体装置は、さらに、前記複数のＣＰＵコアのそれぞれが前記指示信号を前記診断テスト回路に出力するときに、前記複数のＣＰＵコアのそれぞれにより、その旨を記録する記録情報が格納される記録情報記憶部を備え、
前記複数のＣＰＵコアのそれぞれは、自ＣＰＵコアのスキャンテストの実行後に、前記記録情報記憶部に記録情報が格納されているときには、当該スキャンテストの実行結果を確認し、異常が検出された場合には、自ＣＰＵコアに任意のプログラムをスケジューリングするように戻す設定を抑止する、
請求項３に記載の半導体装置。
【請求項６】
前記割り込み回路は、前記割り込みとして、所定の割り込み周期でタイマー割り込みを発生するシステムタイマーであり、
前記半導体装置は、さらに、前記複数のＣＰＵコアのそれぞれが前記指示信号を前記診断テスト回路に出力するときに、前記複数のＣＰＵコアのそれぞれにより、その時刻を示す時刻情報が格納される時刻情報記憶部を備え、
前記複数のＣＰＵコアのそれぞれは、自ＣＰＵコアのスキャンテストの実行後に前記システムタイマーから取得した時刻と、前記時刻情報記憶部に格納された時刻情報が示す時刻との差が、所定の閾値を超えている場合には、自ＣＰＵコアに任意のプログラムをスケジューリングするように戻す設定を抑止する、
請求項３に記載の半導体装置。
【請求項７】
前記診断テスト回路は、前記スキャンチェーンを介して診断中のＣＰＵコアに複数の入力テストデータを順次入力し、
前記診断中のＣＰＵコアは、前記入力された複数の入力テストデータそれぞれに基づいて生成した複数の出力結果データを、前記スキャンチェーンを介して順次前記診断テスト回路に出力し、
前記診断テスト回路は、前記複数の入力テストデータと、前記複数の出力結果データの累積演算結果の期待値となる第１の累積演算結果とが格納されたテストデータ記憶部から、前記第１の累積演算結果を読み出し、読み出した第１の累積演算結果と、前記診断中のＣＰＵコアから順次出力された複数の出力結果データを累積演算した第２の累積演算結果とを比較することで前記診断中のＣＰＵコアを診断する、
請求項１に記載の半導体装置。
【請求項８】
前記半導体装置は、さらに、
前記診断テスト回路とシステムバスを介して接続され、前記スキャンテストにおいて前記スキャンチェーンに順次入力される複数の入力テストデータが格納されるテストデータ記憶部から、前記複数の入力テストデータを取得して、前記システムバスを介して前記診断テスト回路に順次ＤＭＡ転送するＤＭＡコントローラを備え、
前記診断テスト回路は、前記複数の入力テストデータの一部を一時的に格納するＦＩＦＯメモリを有し、前記ＦＩＦＯメモリに格納された入力テストデータを取得して前記スキャンチェーンを介して診断中のＣＰＵコアに入力する、
請求項１に記載の半導体装置。
【請求項９】
前記半導体装置は、さらに、前記診断テスト回路が前記複数のＣＰＵコアのスキャンテストを開始する前に、前記診断テスト回路のテストを実施する第２の診断テスト回路を備える、
請求項１に記載の半導体装置。
【請求項１０】
前記診断テスト回路は、前記スキャンテストを実施するときに、前記スキャンチェーンに入力される入力テストデータと、前記入力テストデータの誤り検出符号が格納されたテストデータ記憶部から、前記入力テストデータを取得して前記スキャンチェーンに入力し、
前記半導体装置は、さらに、前記診断テスト回路が前記複数のＣＰＵコアのスキャンテストを開始する前に、前記テストデータ記憶部に格納された入力テストデータから誤り検出符号を算出し、算出した誤り検出符号と、前記テストデータ記憶部に格納された誤り検出符号とを比較することで前記テストデータ記憶部を診断する記憶部診断回路と、を備えた、
請求項１に記載の半導体装置。
【請求項１１】
前記診断テスト回路は、前記スキャンチェーンを介して診断中のＣＰＵコアに複数の入力テストデータを順次入力し、
前記診断中のＣＰＵコアは、前記入力された複数の入力テストデータそれぞれに基づいて生成した複数の出力結果データを、前記複数の入力テストデータの入力から所定のサイクル分の差で前記診断テスト回路に出力し、
前記診断テスト回路は、前記複数の入力テストデータと、前記複数の出力結果データの期待値となる複数の期待値データとが、前記入力テストデータと前記所定のサイクル分前の入力テストデータに基づいて生成される期待値データとが同時に読み出されるように格納されるテストデータ記憶部から、前記期待値データを読み出し、前記入力テストデータに応じた出力結果データと、オンザフライで順次比較していくことで前記診断中のＣＰＵコアを診断する、
請求項１に記載の半導体装置。
【請求項１２】
前記診断テスト回路は、さらに、
状態退避記憶回路と、
前記スキャンテストが開始したときから順次出力されるデータを、前記スキャンチェーンの長さ分だけ取得して、前記状態退避記憶回路に格納し、前記スキャンテストを終了するときに前記状態退避記憶回路に格納したデータを前記スキャンチェーンに入力する状態退避制御回路と、を備えた、
請求項１に記載の半導体装置。
【請求項１３】
前記半導体装置は、さらに、前記スキャンテストにおいて前記スキャンチェーンに順次入力する複数の入力テストデータが格納されるテストデータ記憶部を備え、
前記診断テスト回路は、前記スキャンテストを実施する毎に、前記複数の入力テストデータが所定の数に分割された分割テストデータを順番に入力し、
前記複数のＣＰＵコアのそれぞれは、前記スキャンテストを開始するときにプログラムの実行を中断し、前記スキャンテストが終了するときに前記プログラムの実行を再開する、
請求項１に記載の半導体装置。
【請求項１４】
前記半導体装置は、さらに、
前記スキャンチェーンを有する代替用ＣＰＵコアと、
前記スキャンテストが開始したときから順次出力されるデータを、前記スキャンチェーンの長さ分だけ取得して、前記代替用ＣＰＵコアのスキャンチェーンに格納する代替コア制御回路と、を備え、
前記代替用ＣＰＵコアは、当該代替用ＣＰＵコアのスキャンチェーンに格納されたデータに基づいて、前記スキャンテストの実施されるＣＰＵコアの処理を代替して実行する、
請求項１に記載の半導体装置。
【請求項１５】
前記複数のＣＰＵコアは、複数の第１のＣＰＵコアであり、
前記半導体装置は、さらに、
スキャンチェーンを有する複数の第２のＣＰＵコアと、
前記複数の第１のＣＰＵコアと、スキャンチェーンを有し前記複数の第１のＣＰＵコアから共通利用される第１のＣＰＵ共通回路と、を含む第１のＣＰＵと、
前記複数の第２のＣＰＵコアと、スキャンチェーンを有し前記複数の第２のＣＰＵコアから共通利用される第２のＣＰＵ共通回路と、を含む第２のＣＰＵと、を備え、
前記診断テスト回路は、さらに、前記スキャンチェーンを用いて前記複数の第２のＣＰＵコアと、第１のＣＰＵ共通回路と、前記第２のＣＰＵ共通回路のスキャンテストを実施し、
前記診断テスト回路は、前記第１のＣＰＵ共通回路及び前記第２のＣＰＵ共通回路のそれぞれのスキャンテストを、前記スキャンテストの実施時間帯が相互に重複しないように所定の順序で周期的に実施する、
請求項１に記載の半導体装置。
【請求項１６】
前記診断テスト回路は、前記複数のＣＰＵコアのそれぞれのスキャンテストの実施後に、当該複数のＣＰＵコアのそれぞれをリセットし、
前記半導体装置は、さらに、
前記割り込みに応じて実行される割り込み処理における命令が格納される記憶部と、
前記リセットに応じて前記複数のＣＰＵコアのそれぞれが命令を読み出すアドレスを、リセットベクターから、前記割り込み処理において前記スキャンテストによって中断された位置における命令のアドレスに変更するリセットコントローラと、を備える、
請求項２に記載の半導体装置。
【請求項１７】
前記割り込み回路は、前記複数のＣＰＵコアのそれぞれに対して、当該複数のＣＰＵコアのそれぞれにおける前記スキャンテストの実施タイミングで前記割り込みを発生させる診断テストトリガー回路である、
請求項２に記載の半導体装置。
【請求項１８】
前記複数のＣＰＵコアは、自動車に搭載されたセンサユニットの検知結果に応じて、前記自動車に搭載されたアクチュエータユニットを制御する処理を実行する、
請求項１に記載の半導体装置。
【請求項１９】
第１のＣＰＵコア及び第２のＣＰＵコアを含む複数のＣＰＵコアの診断テスト方法であって、
前記第１のＣＰＵコアが有するスキャンチェーンを用いた前記第１のＣＰＵコアのスキャンテストの実行を開始し、
前記第１のＣＰＵコアのスキャンテストの実行終了後に、前記第２のＣＰＵコアが有するスキャンチェーンを用いた前記第１のＣＰＵコアのスキャンテストの実行を開始する、
診断テスト方法。
【請求項２０】
スキャンチェーンを有する複数のＣＰＵコアの故障診断を行う診断テスト回路であって、
前記スキャンチェーンを用いて、前記複数のＣＰＵコアのそれぞれのスキャンテストを、前記スキャンテストの実施時間帯が相互に重複しないように所定の順序で周期的に実施する、
診断テスト回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体装置、診断テスト方法及び診断テスト回路に関し、例えば、複数のＣＰＵコアの診断に好適に利用できるものである。
【背景技術】
【０００２】
高い演算性能を実現するためにはマルチコア構成のＣＰＵ（Central Processing Unit）システムが望ましい。その一方で、機能安全の観点では、万が一いずれかのＣＰＵコアに故障が発生した場合には速やかにそれを検出して安全な状態に移行させないといけない。しかしながら、高性能なＣＰＵコアの故障診断のために、命令セットベースで自己診断を行うプログラム（ソフトウェア）を使用することは、故障検出率（診断カバレッジ）と診断時間（プログラム実行時間）の両面において十分な結果を得ることができない。例えば、高い診断カバレッジを実現する自己診断プログラムを作成することができたとしても、その自己診断プログラムの実行時間がかなり長くなることが確実であるため、通常動作中に実行することは演算性能の低下につながり現実的ではない。
【０００３】
特許文献１には、複数のＣＰＵボードを介した１本のスキャンチェーンによって複数のＣＰＵボードのバウンダリスキャンを実施してＣＰＵボードの故障診断を行う技術が開示されている。また、特許文献２には、プロセッサのスキャンテストによる故障診断を実行中にアプリケーションの実行が要求された場合、スキャンテストを中断してアプリケーションを実行する技術が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平１０−１１３１９号公報
【特許文献２】特開２０１２−１９４１１１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、特許文献１に開示された技術では、全てのＣＰＵボードを介したスキャンチェーンによってバウンダリスキャンを実行しているため、バウンダリスキャンの実行時には全てのＣＰＵボードが動作できなくなり、演算性能が低下してしまうという問題がある。また、特許文献１には、テスト対象となるＣＰＵボードを個別に選択する技術も開示されているが、演算性能の低下を抑制するための具体的なバウンダリスキャン対象のＣＰＵボードの選択方法は何ら開示されていない。また、特許文献２に開示された技術も、演算性能の低下を抑制するための具体的なスキャンテスト対象のプロセッサの選択方法は何ら開示されていない。その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００６】
一実施の形態によれば、半導体装置は、複数のＣＰＵコアのそれぞれのスキャンテストを、スキャンテストの実施時間帯（実施期間）が相互に重複しないように所定の順序で周期的に実施するものである。
【発明の効果】
【０００７】
前記一実施の形態によれば、故障診断による演算性能の低下を抑制することができる。
【図面の簡単な説明】
【０００８】
【図１】高い演算性能を実現するＣＰＵシステムの一例の構成を示すブロック図である。
【図２】図１に示したＣＰＵの構成を示すブロック図である。
【図３】実施の形態１に係るＣＰＵシステムの構成を示すブロック図である。
【図４】図３に示したＣＰＵの構成を示すブロック図である。
【図５】図４に示したＣＰＵコアの構成を示すブロック図である。
【図６】実施の形態１におけるＣＰＵの各ＣＰＵコアの診断テストの実行の様子を示す説明図である。
【図７】図６に示したＣＰＵコアの診断テストの実行の詳細を示す説明図である。
【図８】図３に示した診断テストコントローラの構成を示すブロック図である。
【図９】実施の形態１において図３に示したＦＬＡＳＨメモリに格納するテストデータの内容を示す説明図である。
【図１０】図９に示したテストデータを用いて図８に示した診断テストコントローラによりスキャンテストを実行する様子を示す説明図である。
【図１１】実施の形態２に係る診断テストコントローラの構成を示すブロック図である。
【図１２】実施の形態２においてＦＬＡＳＨメモリに格納するテストデータの内容を示す説明図である。
【図１３】図１２に示したテストデータを用いて診断テストコントローラによりスキャンテストを実行する様子を示す説明図である。
【図１４】実施の形態３に係るＣＰＵシステムの構成を示すブロック図である。
【図１５】図１４に示した診断テストコントローラの構成を示すブロック図である。
【図１６】実施の形態４に係るＣＰＵシステムの構成を示すブロック図である。
【図１７】図１６に示した診断テストコントローラの構成を示すブロック図である。
【図１８】実施の形態４における診断テストを実行するためのソフトウェア処理のフロー図である。
【図１９】実施の形態５に係るＣＰＵシステムの構成を示すブロック図である。
【図２０】図１９に示したＣＰＵの構成を示すブロック図である。
【図２１】図２０に示したＣＰＵコアの構成を示すブロック図である。
【図２２】実施の形態５におけるＣＰＵコアの診断テストの実行の詳細を示す説明図である。
【図２３】実施の形態６におけるＣＰＵの各ＣＰＵコアの分割診断テストの実行の様子を示す説明図である。
【図２４】実施の形態６におけるＣＰＵの各ＣＰＵコアの分割診断テストの実行の様子の別の例を示す説明図である。
【図２５】実施の形態６における分割診断テストを実行するためのソフトウェア処理のフロー図である。
【図２６】実施の形態７に係るＣＰＵシステムの構成を示すブロック図である。
【図２７】図２６に示した診断テストコントローラの構成を示すブロック図である。
【図２８】実施の形態８に係るＣＰＵの構成を示すブロック図である。
【図２９】図２８に示したＣＰＵの各ＣＰＵコアの診断テストの実行の様子を示す説明図である。
【図３０】高い演算性能を実現するＣＰＵシステムの別の例におけるＣＰＵの構成を示すブロック図である。
【図３１】実施の形態９に係るＣＰＵの構成を示すブロック図である。
【図３２】図３１に示したＣＰＵの診断テストの実行の様子を示す説明図である。
【図３３】一実施の形態に係る半導体装置を示す図である。
【図３４】実施の形態４の変形例Ａに係るＣＰＵシステムの構成を示すブロック図である。
【図３５】実施の形態４の変形例Ａにおける診断テストを実行するためのソフトウェア処理のフロー図である。
【図３６】実施の形態４の変形例Ｂに係るＣＰＵシステムの構成を示すブロック図である。
【発明を実施するための形態】
【０００９】
以下に図面を参照しながら、好適な実施形態について説明する。以下の実施形態に示す具体的な数値等は、実施の形態の理解を容易とするための例示にすぎず、特に断る場合を除き、それに限定されるものではない。また、以下の記載及び図面では、説明の明確化のため、当業者にとって自明な事項等については、適宜、省略及び簡略化がなされている。
【００１０】
＜実施の形態１＞
まず、本実施の形態１について、図面を用いて、その構成と動作を説明する。
【００１１】
図１は、高い演算性能が必要となる車載ＥＣＵ（Electronic Control Unit）１のＡＤＡＳ（Advanced Driver Assistance System）向けのＣＰＵシステム２の一例の構成を示すブロック図である。車載ＥＣＵ１は、ＣＰＵシステム（メインマイコン）２、外付けのメモリとして複数のＤＤＲ（Double-Data-Rate）メモリ８を備える。ＣＰＵシステム２は、内部の処理回路として、マルチコア構成のＣＰＵ（マルチコア）１０、マルチコア構成のハードウェアアクセラレータ（マルチコア）１１、ＤＭＡＣ（Direct Memory Access Controller）１２、ＲＡＭ（Random Access Memory）１３、その他周辺回路１４を備える。また、ＣＰＵシステム２は、外部とのインタフェース回路として、センサＩ／Ｆ１５、アクチュエータＩ／Ｆ１６、ＤＤＲ Ｉ／Ｆ１７、その他Ｉ／Ｆ１８を備える。
【００１２】
これらの回路１０〜１８は、内部のシステムバスに接続されている。センサＩ／Ｆ１５には、前段に位置するレーダー及びカメラ等の自動車に搭載されたセンサユニットが接続される。アクチュエータＩ／Ｆ１６には、後段に位置するステアリング及びブレーキ等の自動車に搭載されたアクチュエータユニットが接続される。また、ＤＤＲ Ｉ／Ｆ１７には、複数のＤＤＲメモリ８が接続される。
【００１３】
ＣＰＵ１０は、センサユニットの検知結果に応じて、アクチュエータユニットを制御する。センサユニットは、検知した内容を示すセンサデータを生成する。センサデータは、レーダーであれば、例えば、障害物までの距離を示すデータであり、カメラであれば、例えば、撮像により得られた画像を示すデータである。ＣＰＵ１０は、センサユニットが生成したセンサデータをセンサＩ／Ｆ１５を介して取得し、取得したセンサデータに基づいて自動車の進行方向に障害物が存在するか否かを判定する。ＣＰＵ１０は、障害物が存在すると判定した場合、障害物を回避するようにアクチュエータユニットを制御する制御データを生成し、アクチュエータＩ／Ｆ１６を介してアクチュエータユニットに送信する。制御データは、ステアリングに向けたものであれば障害物の存在しない方向に自動車の進行方向を変更するように制御するデータであり、ブレーキに向けたものであれば障害物の手前で自動車を停止させるように制御するデータである。
【００１４】
なお、上述の説明では、ＣＰＵ１０がプリクラッシュセーフティシステムとしての制御を実施する場合について説明したが、これに限られない。ＣＰＵ１０は、プリクラッシュセーフティシステム以外の任意の制御を実施するようにしてもよい。
【００１５】
ここで、ＲＡＭ１３又はＤＤＲメモリ８には、上述の制御を実行させる命令を含むプログラム（ソフトウェア）が格納される。ＣＰＵ１０は、ＲＡＭ１３又はＤＤＲメモリ８に格納されたプログラムを実行することで、上述の制御を実現する。
【００１６】
ハードウェアアクセラレータ１１は、ＣＰＵ１０による上述の制御における演算処理の一部を補助的に実行する。例えば、ハードウェアアクセラレータ１１は、センサデータに基づいて自動車の進行方向に障害物が存在するか否かを判定する際に、センサデータに関する演算処理の一部を補助的に実行する。ハードウェアアクセラレータ１１として、例えば、複数のＧＰＵコアを含むＧＰＵ（Graphics Processing Unit）を利用してもよい。
【００１７】
ＤＭＡＣ１２は、システムバスに接続された各回路１３〜１８の間でのデータ転送を実行する。例えば、ＤＭＡＣ１２は、センサユニットが生成したセンサデータをセンサＩ／Ｆ１５及びＤＤＲ Ｉ／Ｆ１７を介してＤＤＲメモリ８に転送する。これにより、ＣＰＵ１０は、センサユニットが生成したセンサデータをＤＤＲメモリ８から取得可能となる。また、ＤＭＡＣ１２は、ＤＤＲメモリ８に格納された制御データをＤＤＲ Ｉ／Ｆ１７及びアクチュエータＩ／Ｆ１６を介してアクチュエータユニットに転送する。これにより、ＣＰＵ１０は、ＤＤＲメモリ８に制御データを格納することでアクチュエータユニットに制御データを送信可能となる。
【００１８】
ＲＡＭ１３は、各種データが格納される。ＲＡＭ１３は、例えば、ＣＰＵ１０及びハードウェアアクセラレータ１１の演算処理に関するデータが格納される。また、ＣＰＵシステム２は、その他周辺回路１４として任意の回路を備えるようにしてよい。
【００１９】
センサＩ／Ｆ１５は、センサユニットとシステムバスとを接続するためのインタフェース回路である。アクチュエータＩ／Ｆ１６は、アクチュエータユニットとシステムバスとを接続するためのインタフェース回路である。ＤＤＲ Ｉ／Ｆ１７は、ＤＤＲメモリ８とシステムバスとを接続するためのインタフェース回路である。その他Ｉ／Ｆ１８は、サブマイコン等の車載ＥＣＵ１が備える他のユニットとシステムバスとを接続するためのインタフェース回路である。
【００２０】
ＤＤＲメモリ８には、各種データが格納される。このデータは、例えば、上述したセンサデータ及び制御データ等である。すなわち、上述したように、ＣＰＵ１０は、ＤＭＡＣ１２の転送機能を利用することで、ＤＤＲメモリ８を介して、センサユニットからセンサデータを取得し、アクチュエータユニットに制御データを送信する。ＲＡＭ１３には、例えば、ＣＰＵ１０及びハードウェアアクセラレータ１１の演算処理に関するデータが格納される。
【００２１】
図２は、図１に示したＣＰＵ１０の構成を示すブロック図である。４つのＣＰＵコア１０１〜１０４とＣＰＵ共通回路１２０を備える。それぞれのＣＰＵコア１０１〜１０４にはＬ１キャッシュ（Ｉ，Ｄ）１１１〜１１４が付随する。ここで、Ｉは命令を、Ｄはデータを指すものである。また、ＣＰＵ共通回路１２０は、割り込みコントローラ１２１、システムタイマー１２２、キャッシュコヒーレンシーコントローラ１２３、Ｌ２キャッシュ１２４、Ｌ２キャッシュコントローラ１２５、システムバスＩ／Ｆ１２６、デバッグ・トレースＩ／Ｆ１２７を備える。
【００２２】
ＣＰＵコア１０１〜１０４は、上述のＣＰＵ１０における演算処理を分散して実行する回路である。ＣＰＵコア１０１〜１０４のそれぞれは、演算処理として、ＲＡＭ１３又はＤＤＲメモリ８に格納されたデータＤに対して、ＲＡＭ１３又はＤＤＲメモリ８に格納された命令Ｉを実行する。ＣＰＵコア１０１〜１０４は、この命令Ｉ及びデータＤがＬ２キャッシュ１２４にキャッシュされている場合には、その命令Ｉ及びデータＤを利用する。また、ＣＰＵコア１０１〜１０４のそれぞれは、Ｌ１キャッシュ１１１〜１１４のそれぞれに命令Ｉ及びデータＤがキャッシュされている場合には、その命令Ｉ及びデータＤを利用する。なお、このデータＤは、例えば、上述のセンサデータが該当する。また、この命令Ｉは、例えば、上述のプログラムに含まれる命令が該当する。
【００２３】
Ｌ１キャッシュ１１１〜１１４のそれぞれは、ＣＰＵコア１０１〜１０４のそれぞれに対応し、ＣＰＵコア１０１〜１０４のそれぞれの演算処理に関するデータが一時的に格納されるキャッシュメモリである。ＣＰＵコア１０１は、自身に対応するＬ１キャッシュ１１１を利用し、ＣＰＵコア１０２は、自身に対応するＬ１キャッシュ１１２を利用し、ＣＰＵコア１０３は、自身に対応するＬ１キャッシュ１１３を利用し、ＣＰＵコア１０４は、自身に対応するＬ１キャッシュ１１４を利用する。
【００２４】
割り込みコントローラ１２１には、ＣＰＵシステム２の外部からの割り込み要因や内部の割り込み要因が入力される。より具体的には、割り込みコントローラ１２１は、複数の割り込み要因のそれぞれに対応付けられた複数の割り込み信号が外部又は内部から入力される。割り込みコントローラ１２１は、割り込み信号の入力を受けた場合、任意のＣＰＵコアに割り込みを発生させる。
【００２５】
システムタイマー１２２は、ＣＰＵシステム２の時刻を計測する回路である。ＣＰＵコア１０１〜１０４は、システムタイマー１２２から時刻情報を取得することが可能である。また、システムタイマー１２２は、所定の時間が経過する毎にＣＰＵコア１０１〜１０４に対してタイマー割り込みを発生させることが可能である。
【００２６】
キャッシュコヒーレンシーコントローラ１２３は、Ｌ１キャッシュ１１１〜１１４のキャッシュコヒーレンシーを実現する回路である。例えば、キャッシュコヒーレンシーコントローラ１２３は、ＣＰＵコア１０１〜１０４のいずれかによってＲＡＭ１３内のあるアドレスに対してデータの書き込みが発生した場合、他のＣＰＵコアに対応するＬ１キャッシュに格納されている、そのアドレスのデータを無効化する。
【００２７】
Ｌ２キャッシュ１２４は、ＣＰＵコア１０１〜１０４が演算処理で利用するデータが一時的に格納されるキャッシュメモリである。Ｌ２キャッシュ１２４は、Ｌ１キャッシュ１１１〜１１４よりも下位のキャッシュメモリである。
【００２８】
Ｌ２キャッシュコントローラ１２５は、Ｌ２キャッシュ１２４の動作を制御するとともに、ＣＰＵコア１０１〜１０４のそれぞれに対応するＬ１キャッシュ１１１〜１１４とＬ２キャッシュ１２４との間のキャッシュコヒーレンシーを実現する回路である。Ｌ２キャッシュコントローラ１２５は、ＣＰＵコア１０１〜１０４からのＣＰＵ共通回路１２０を介したデータのリード及びライトを常時確認することで、Ｌ２キャッシュ１２４のキャッシュコヒーレンシーを実現する。
【００２９】
システムバスＩ／Ｆ１２６は、ＣＰＵ１０をシステムバスに接続するためのインタフェース回路である。デバッグ・トレースＩ／Ｆ１２７は、ＣＰＵシステム２の外部にデバッガを接続するためのインタフェース回路である。
【００３０】
図３は、本実施の形態１に係るＣＰＵシステム３の構成を示すブロック図である。図１に示したＣＰＵシステム２に対して、強い機能安全を実現するために、ＣＰＵ２０の故障診断のための診断テストコントローラ２１とエラー出力・制御回路２２を追加したものである。なお、ＣＰＵ２０は、ＣＰＵ１０に対して診断のための回路が追加されたものであり、詳細については後述する。ここで、ＣＰＵシステム３の外付けのメモリとして、診断テストコントローラ２１にテストデータを入力するＦＬＡＳＨメモリ９もＣＰＵシステム３に追加的に接続されている。
【００３１】
診断テストコントローラ２１は、診断テスト回路に対応するものであり、ＣＰＵ２０の故障診断を実施する。診断テストコントローラ２１は、ＦＬＡＳＨメモリ９に格納されたテストデータを取得し、取得したテストデータに基づいて、ＣＰＵ２０が故障しているか否かを判定する。診断テストコントローラ２１は、ＣＰＵ２０が故障であると判定した場合、ＣＰＵ２０の故障を通知する通知信号をエラー出力・制御回路２２に出力する。
【００３２】
エラー出力・制御回路２２は、ＣＰＵ２０の故障が検出された場合における制御を実行する。より具体的には、エラー出力・制御回路２２は、ＣＰＵ２０の故障を通知する通知信号を診断テストコントローラ２１から受けた場合、ＣＰＵ２０の故障を自動車の搭乗者に通知する処理、又は、故障が通知されたＣＰＵ２０における故障箇所を縮退する処理を実行する。エラー出力・制御回路２２は、ＣＰＵ２０の故障を自動車の搭乗者に通知する処理として、自動車の搭乗者への故障の通知を指示する指示信号をその他Ｉ／Ｆ１８を介してサブマイコンに送信する。サブマイコンは、エラー出力・制御回路２２からの指示信号の受信に応じて、自動車に搭載された出力装置によって故障を通知する。例えば、出力装置が故障を通知するＬＥＤ（Light Emitting Diode）である場合、サブマイコンは、ＬＥＤを点灯させる。出力装置が表示装置である場合、サブマイコンは、故障を通知する画像を表示装置に表示する。出力装置がスピーカーである場合、サブマイコンは、故障を通知する音声をスピーカーから出力する。
【００３３】
ＦＬＡＳＨメモリ９は、テストデータ記憶部に対応するものであり、上述したように、テストデータが格納される。ＲＡＭ１３、ＤＤＲメモリ８、ＦＬＡＳＨメモリ９は、各種データ（情報）が格納される記憶部として機能する。
【００３４】
図４は、図３に示したＣＰＵ２０の構成を示すブロック図である。図４に示すＣＰＵ２０は、図２に示したＣＰＵ１０に対して、ＣＰＵコア１０１〜１０４にそれぞれスキャンテスト用回路２０１〜２０４を追加したものである。
【００３５】
診断テストコントローラ２１は、上述のＣＰＵ２０の診断テスト回路として、ＣＰＵ２０に含まれるＣＰＵコア１０１〜１０４の故障診断を実施する。診断テストコントローラ２１は、例えば、ＣＰＵコア１０１〜１０４の故障診断をスキャンテストによって実施する。具体的には、診断テストコントローラ２１は、それぞれのＣＰＵコア１０１〜１０４のスキャンテスト用回路２０１〜２０４に対して、スキャンテストの制御を行う。また、診断テストコントローラ２１は、ＣＰＵ２０に対して、故障診断のためのスキャンテスト（診断テスト）の開始又は終了を通知するフラグ信号を出力する。このフラグ信号は、ＣＰＵ共通回路１２０に設けられた入力ポート（図示せず）に入力されるか、内部の割り込み要因の１つとして割り込みコントローラ１２１に入力される。
【００３６】
このフラグ信号は、診断テスト対象のＣＰＵコアを指定可能な信号である。フラグ信号は、ＣＰＵコア毎に別々の信号線を介して送受信することで、スキャンテスト対象のＣＰＵコアを指定可能としてもよい。また、フラグ信号は、その中にスキャンテスト対象のＣＰＵコアを示すデータを含めることで、スキャンテスト対象のＣＰＵコアを指定可能としてもよい。また、フラグ信号は、割り込み要因を通知する信号とする場合には、ＣＰＵコア１０１〜１０４のそれぞれで異なる割り込み要因を予め対応付けておくことで、割り込み要因に対応するＣＰＵコアとして、スキャンテスト対象のＣＰＵコアを指定可能としてもよい。
【００３７】
この故障診断により、診断テストコントローラ２１は、ＣＰＵコア１０１〜１０４の故障を検出する。そして、ＣＰＵコア１０１〜１０４のうち、故障が検出されたＣＰＵコアが異常箇所として、上述したエラー出力・制御回路２２によって縮退処理が施される。
【００３８】
図５は、図４に示したＣＰＵコア１０１とスキャンテスト用回路２０１の構成を示すブロック図である。ＣＰＵコア１０１は、スキャンテストのモードのときに有効となる複数本（例えば、４８０本）のスキャンチェーンを有している。ＣＰＵコア１０１とスキャンテスト用回路２０１は、診断テストコントローラ２１からの、スキャンテストのモードへの切り換えを指示するテストモード切り換え信号の入力に応じて、通常のモードからスキャンテストのモードに移行する。
【００３９】
また、スキャンテスト用回路２０１は、スキャンデータ伸長回路２１１、スキャンデータ圧縮回路２１２、テスト用ラッパ２１３、テスト用ラッパ２１４を備える。
【００４０】
診断テストコントローラ２１は、ＦＬＡＳＨメモリ９から取得したテストデータに含まれる入力テストパターンをスキャンデータ伸長回路２１１に入力する。診断テストコントローラ２１からスキャンデータ伸長回路２１１に入力される入力テストパターンは、複数ビット（例えば、６ビット）が並列に並んだ形態で入力される。スキャンデータ伸長回路２１１は、入力テストパターンをＣＰＵコア１０１が有するスキャンチェーンの本数（例えば、４８０ビット）に拡大し、ＣＰＵコア１０１が有するスキャンチェーンに入力する。また、スキャンデータ圧縮回路２１２は、そのスキャンチェーンの出力を、ＣＰＵコア１０１が有するスキャンチェーンの本数から複数ビット（例えば、２ビット）が並列に並んだ形態に縮小する。スキャンデータ圧縮回路２１２は、縮小した複数ビットのデータを出力結果データとして診断テストコントローラ２１に出力する。このようにスキャンテストの入出力本数をテスト対象の回路が有するスキャンチェーン本数よりも減らす（圧縮する）方式を圧縮スキャン方式と呼ぶ。
【００４１】
テスト用ラッパ２１３は、ＣＰＵコア１０１とＬ１キャッシュ１１１との間に挿入されている。また、テスト用ラッパ２１４は、ＣＰＵコア１０１とＣＰＵ共通回路１２０との間に挿入されている。
【００４２】
テスト用ラッパ２１３は、スキャンテストのモードのときに、ＣＰＵコア１０１とＬ１キャッシュ１１１との間で送受される通常の入出力信号を遮断するための回路である。テスト用ラッパ２１４は、スキャンテストのモードのときに、ＣＰＵコア１０１とＣＰＵ共通回路１２０との間で送受される通常の入出力信号を遮断するための回路である。
【００４３】
テスト用ラッパ２１３は、通常のモードのときには、ＣＰＵコア１０１とＬ１キャッシュ１１１との間で送受される通常の入出力信号を導通させる。テスト用ラッパ２１４は、通常のモードのときには、ＣＰＵコア１０１とＣＰＵ共通回路１２０との間で送受される通常の入出力信号を導通させる。テスト用ラッパ２１３とテスト用ラッパ２１４とＣＰＵコア１０１は、診断テストコントローラ２１からの、通常のモードへの切り換えを指示するテストモード切り換え信号の入力に応じて、スキャンテストのモードから通常のモードに移行する。通常のモードのときには、ＣＰＵコア１０１が有するスキャンチェーンが無効となる。
【００４４】
なお、ＣＰＵコア１０２〜ＣＰＵコア１０４に対応して配置されたスキャンテスト用回路２０２〜２０４も、図５と同等の構成であるため、説明を省略する。
【００４５】
図６に、本実施の形態１におけるＣＰＵ２０の各ＣＰＵコア１０１〜１０４の診断テストの実行の様子を示す。自動車のＡＤＡＳ向けのＣＰＵシステム３は、人間が頭で行っている綿密な認識・判断の処理を、短時間にこなし得る高い演算性能が必要であり、４つの高性能なＣＰＵコア１０１〜１０４を有するマルチコア構成のＣＰＵ２０を備えている。通常動作では、それぞれのＣＰＵコア１０１〜１０４には認識・判断の処理のタスク（一固まりの処理のプログラム）が割り当てられ、４つのＣＰＵコア１０１〜１０４のトータル性能が活用されて認識・判断の処理が実行される。この認識・判断の処理は、例えば、上述のセンサユニットの検知結果に応じてアクチュエータユニットを制御する処理に相当する。人間が最新の状況を認識して取るべき行動を判断するのにかかる時間は０．１秒のオーダーである。機能安全の観点からは、万が一ＣＰＵシステム３の中核を成すＣＰＵ２０のＣＰＵコア１０１〜１０４に故障が発生した場合でも、それと同程度の時間で安全な状態に移行させる（これが取るべき行動となる）ことが重要であり、強い機能安全のために、高い故障検出率でＣＰＵコア２０の故障を見つける必要がある。故障が発生してから安全な状態に移行させるまでをＦＴＴＩ（フォールトトレラント時間間隔）の時間内に実現しないといけない。
【００４６】
そのため、診断テストコントローラ２１は、ＣＰＵコア１０１〜１０４を順番に選択しながら、ＦＴＴＩ以下の診断テスト間隔（例えば、０．１秒）で周期的に各ＣＰＵコア１０１〜１０４のそれぞれの診断テストを行う。この診断テストは、選択した１つのＣＰＵコアをスキャンテストのモードに切り換え、ハードウェアとしての高速なスキャンテストを行うものである。診断テストが実行されるＣＰＵコアは、この診断テスト時間（例えば、０．０１秒以下）の間だけは通常動作が行えない状態となるが、残りの３つのＣＰＵコアはこの間も通常動作を継続している。そのため、このときは一時的に性能が３／４に低下するが、診断テストが終了すれば本来の性能に戻る。平均すれば、このような診断テストの実行による性能の低下は１０％未満に収まる。なお、ＣＰＵ共通回路１２０の故障診断のためには、その回路を二重化する方法が一例として挙げられる。このとき、二重化した各回路の出力信号（複数本あり）の一致を確認する比較回路を設け、いずれか一つでも出力信号の不一致が検出された場合には、ＣＰＵ共通回路１２０の故障を通知する通知信号をエラー出力・制御回路２２に出力するようにすればよい。
【００４７】
すなわち、図６に示すように、診断テストコントローラ２１は、ＣＰＵコア１０１〜１０４それぞれのスキャンテストの実施時間帯（実施期間）が相互に重複しないように所定の順序で周期的スキャンテストを実施する。診断テストコントローラ２１は、ＣＰＵコア１０１〜１０４の全てで同一の診断テスト間隔で周期的にスキャンテストを実施することで、スキャンテストの実施時間帯（実施期間）が相互に重複しにくくなるようにしている。この診断テスト間隔は、例えば、ＦＴＴＩ（例えば、０．１秒）以下の間隔となるように予め任意に定められる。ＣＰＵコア１０１〜１０４のそれぞれの診断テスト時間は、相互に重複しないのであれば、必ずしも等間隔（診断テスト間隔×１／４）でずれている必要はない。しかし、好ましくは、ＣＰＵコア１０１〜１０４のそれぞれの診断テスト時間を等間隔でずらすようにすることで、診断テストの実施時間帯（実施期間）のタイミング（近接または離間）による性能の偏りを低減することができる。
【００４８】
図７には、図６に示したＣＰＵコア１０１の診断テストの実行の詳細を示す。診断テストとしては、実際にはハードウェアとしてのスキャンテスト実行の前後に、若干のソフトウェアでの処理が行われる。通常のモードからスキャンテストのモードに移行するときには、ＣＰＵコア１０１で実行中のタスクを中断又は終了させる処理が行われる。ＣＰＵコア１０１は、診断テストコントローラ２１からＣＰＵ２０への、診断テストの開始を通知するフラグ信号の入力に応じて、実行中のタスクを中断又は終了させる処理を実行する。すなわち、このフラグ信号は、診断テスト対象のＣＰＵコア１０１を指定しているものとする。また、ＣＰＵ共通回路１２０は、診断テストコントローラ２１からＣＰＵ２０へのこのフラグ信号の入力に応じて、ＣＰＵ共通回路１２０から診断テスト対象のＣＰＵコア１０１へのアクセスを抑止する。この後で、ＣＰＵコア１０１及びそのスキャンテスト用回路２０１は、診断テストコントローラ２１からの、スキャンテストのモードへの切り換えを指示するテストモード切り換え信号の入力に応じて、ハードウェアとしてのスキャンテストのモードに入る。
【００４９】
タスクは一固まりの処理のプログラムであり、所定の演算処理を多数回ループさせる処理が中心である。そのため、所定の演算処理の終盤近くまで実行していた場合は、ＣＰＵコア１０１は、所定の演算処理を完了させ、１回のループを抜けるまで処理を実行させて所定の演算処理の結果のデータを外部のメモリ（例えば、ＤＤＲメモリ８）に格納してから、タスクを終了させる。所定の演算処理の中盤付近を実行中の場合は、ＣＰＵコア１０１は、その時点での内部のワークデータをメモリ（例えば、ＲＡＭ１３）に書き出してから、タスクを中断させる。中断中のタスクを復帰させる場合は、メモリに一時保存した内部のワークデータを読み出した上で、そこから処理を再開させることになる。所定の演算処理の序盤付近を実行している場合は、ＣＰＵコア１０１は、所定の演算処理実行をあきらめ、内部のワークデータは破棄してから、タスクを終了させてもよい。タスクを終了させた場合には、次に同じタスクを新たに投入する場合は、ループの始まりから処理の実行を開始させることになる。
【００５０】
一方、スキャンテストのモードから通常のモードに移行するときには、ＣＰＵコア１０１は、中断させたタスクを再開（復帰）させる、または終了させたタスクと同じタスクを新たに投入する処理を行う。これはＣＰＵコア１０１がスキャンテストのモードから抜け、ＣＰＵコア１０１にハードウェアリセットが行われた後に行われる処理である。ＣＰＵコア１０１は、診断テストコントローラ２１からの、通常のモードへの切り換えを指示するテストモード切り換え信号の入力に応じて、スキャンテストのモードから抜ける。すなわち、ＣＰＵコア１０１は、スキャンチェーンを無効にする。診断テストコントローラ２１は、そのテストモード切り換え信号のＣＰＵコア１０１への入力後に、診断テストの対象となっていたＣＰＵコア１０１にリセット信号を出力し、ＣＰＵコア１０１のハードウェアリセットを実行する。この後で、ＣＰＵ共通回路１２０は、診断テストコントローラ２１からＣＰＵ２０へ、診断テストの終了を通知するフラグ信号が入力されたときに、診断テストの対象となっていたＣＰＵコア１０１へのアクセス抑止を解除する。このフラグ信号は、診断テストの対象となっていたＣＰＵコア１０１を指定しているものとする。
【００５１】
この後に、ＣＰＵコア１０１を通常動作が可能な状態に設定するためのソフトウェアによる初期化が行われた後に、タスクを復帰又は投入させる処理が行われる。短いながらも、これらのソフトウェアでの処理（タスクの中断又は終了処理時間ＯＨ１とタスクの復帰又は投入処理時間ＯＨ２）にかかる時間がオーバーヘッド時間となる。このオーバーヘッド時間と、純粋にハードウェアとしてのスキャンテストにかかる診断時間との合計が診断テスト時間となる。
【００５２】
ここで、上述のタスクの処理がループの序盤、中盤、終盤のいずれまで実行しているかは、例えば、処理の進行状況をメモリ（例えば、ＲＡＭ１３）に記録することによって判別可能とする。なお、１回のループにおいて実行される所定の処理は、序盤、中盤、及び終盤の範囲が予め定められているものとする。タスクの処理として、ループの序盤の処理が終了したことを示す進行状況記録データをメモリに格納する処理を含め、中盤の処理が終了したことを示す進行状況記録データをメモリに格納する処理を含めておく。
【００５３】
これにより、ＣＰＵコア１０１は、タスクの実行時に、ループにおける処理の進行状況に応じて進行状況記録データをメモリに格納する。ＣＰＵコア１０１は、スキャンテストのモードに移行する際に、序盤の処理が終了したことを示す進行状況記録データがメモリに格納されている場合には、ループの中盤を実行中であると判定する。ＣＰＵコア１０１は、中盤の処理が終了したことを示す進行状況記録データがメモリに格納されている場合には、ループの終盤を実行中であると判定する。ＣＰＵコア１０１は、いずれの進行状況記録データもメモリに格納されていない場合には、ループの序盤を実行中であると判定する。なお、ＣＰＵコア１０１はループが終了したときに進行状況記録データを削除することで、２回目以降のループにおける、このループの序盤を実行中との判定を可能とすればよい。そして、ＣＰＵコア１０１は、ループの序盤又は終盤を実行中であると判定した場合には、タスクを終了し、ループの中盤を実行中であると判定した場合には、ワークデータをメモリに一時的に格納し、中断した処理を再開可能とすればよい。なお、ワークデータとは、例えば、ＣＰＵコア１０１のレジスタのデータである。
【００５４】
これによれば、タスクの中断又は終了処理時間ＯＨ１と、タスクの復帰又は投入処理時間ＯＨ２とを低減することができる。これは、ループの序盤を実行中で演算のやり直しにかかる時間が短い場合のみにワークデータを破棄してタスクを速やかに終了するようにしているからである。また、ループの中盤を実行中で演算のやり直しにかかる時間が長い場合のみにワークデータを保存して、そのワークデータにより処理を再開するようにしているからである。また、ループの終盤を実行中でループの終了まで処理を実行しても時間がかからない場合のみにループの終了まで処理を実行して、処理の再開時にワークデータの復元を不要としているからである。
【００５５】
なお、上述のループの処理は、例えば、上述したセンサデータに基づいてアクチュエータユニットを制御する処理となる。このループの処理は、ＣＰＵコア１０１が、その処理を実現するタスクを実行することで定期的に繰り返し実行される。
【００５６】
なお、ＣＰＵコア１０２〜ＣＰＵコア１０４の診断テストの実行の詳細も、図７と同様であるため、説明を省略する。
【００５７】
図８は、図３に示した診断テストコントローラ２１の構成を示すブロック図である。テスト制御回路２２１、テストデータ入力回路２２２、テスト結果比較回路２２３、セレクタ２２４、周期カウンタ２２５を備える。
【００５８】
テスト制御回路２２１は、周期カウンタ２２５からの周期的なトリガー信号に基づき、ＣＰＵコア１０１〜１０４のいずれか１つを順番に選択するとともに、診断テストを開始するタイミングを決定する。すなわち、テスト制御回路２２１は、トリガー信号が所定回数入力される毎のタイミングを、ＣＰＵコアの診断テストを開始するタイミングとして決定する。また、テスト制御回路２２１は、診断テストを開始するタイミングとなる毎に、診断テストの対象として選択するＣＰＵコアを予め定めた順番に従って切り換える。よって、図６の例では、トリガー信号が所定回数カウントされる時間は、あるＣＰＵコアでの診断テストの開始から、次のＣＰＵコアの診断テストの開始までの時間に相当する。また、トリガー信号の所定回数のカウントが４回繰り返されて全てのＣＰＵコアの診断テストを終えて一巡するまでの時間が、診断テスト間隔に相当する。
【００５９】
テスト制御回路２２１は、診断テストを開始するタイミングで、ＣＰＵ２０に対して診断テストの開始を通知するフラグ信号を出力して、今からどのＣＰＵコアの診断テストを行うかを通知する。テスト制御回路２２１は、フラグ信号を出力してから、ソフトウェアによるタスクの中断又は終了の処理が終わるまでの時間が経過した後で、診断テストを行うＣＰＵコア及びそのスキャンテスト用回路に対するテストモード切り換え信号を出力して、そのＣＰＵコア及びそのスキャンテスト用回路をスキャンテストのモードに移行させる。
【００６０】
ここで、フラグ信号を出力してからテストモード切り換え信号を出力するまでの時間として、ＣＰＵコア１０１〜１０４によるタスクの中断又終了処理時間を十分に超えるだけの時間を予め定めておく。そして、テスト制御回路２２１は、診断テスト対象のＣＰＵコア及びそのスキャンテスト用回路をスキャンテストのモードに移行させた後に、スキャンテストの開始を指示する指示信号をテストデータ入力回路２２２及びテスト結果比較回路２２３に出力する。
【００６１】
テストデータ入力回路２２２は、テスト制御回路２２１からの指示信号の入力に応じて、外付けのＦＬＡＳＨメモリ９からのテストデータの読み出しを開始し、入力テストパターン（６ビット）が並列に並んだ形態でＣＰＵコアに対して順番に出力していく。この入力テストパターンは、スキャンテスト用回路２０１〜２０４に入力されるが、スキャンテストのモードとなっているスキャンテスト用回路のみで処理され、スキャンテストのモードとなっているＣＰＵコアのみに入力される。
【００６２】
これにより、診断テスト対象のＣＰＵコアのスキャンテストが実行開始される。入力テストパターンが出力されてからスキャンチェーンの長さに応じた所定の時間が経過した後で、その入力テストパターンの処理結果となる出力結果データが順番に診断テストコントローラ２１に戻ってくる。ここで、診断テスト対象のＣＰＵコアからの出力結果データがセレクタ２２４で選択されて、テスト結果比較回路２２３に入力される。セレクタ２２４は、テスト制御回路２２１により、診断テスト対象のＣＰＵコアからの出力結果データを選択して、テスト結果比較回路２２３に出力するように制御される。
【００６３】
テスト結果比較回路２２３も、テスト制御回路２２１からの指示信号の入力に応じて、診断テストの動作を開始している。テスト結果比較回路２２３は、順番に出力結果データと、その期待値データ（２ビット）とを比較していく。この期待値データは、ＦＬＡＳＨメモリ９から読み出されるテストデータに含まれている。テストデータ入力回路２２２は、入力テストパターンをＣＰＵコアに出力してから上記スキャンチェーンの長さに応じた所定の時間が経過したときに、その入力テストパターンに対応する期待値データをテスト結果比較回路２２３に入力する。これにより、テスト結果比較回路２２３は、出力結果データが入力されるタイミングで、その期待値データも入力され、それらのデータの比較が可能となる。この仕組みについては、図９及び図１０を参照して後述する。テスト結果比較回路２２３は、スキャンテストにおけるテストクロックのサイクル毎にこの比較処理を行い、データが一致していればＯＫ、不一致ならばＮＧと判定する。一連の入力テストパターンがすべてＣＰＵコアに入力され、その出力結果データがすべて出力された後で、最終の判定結果（ＯＫまたはＮＧ）が決定され、エラー出力・制御回路２２に通知される。
【００６４】
すなわち、テスト結果比較回路２２３は、最終の判定結果をＯＫと決定した場合には、診断テスト対象のＣＰＵコアは正常であることを通知する通知信号をエラー出力・制御回路２２に出力する。また、テスト結果比較回路２２３は、最終の判定結果をＮＧと決定した場合には、診断テスト対象のＣＰＵコアが故障していることを通知する通知信号をエラー出力・制御回路２２に出力する。
【００６５】
図９には、本実施の形態１において図３に示したＦＬＡＳＨメモリ９に格納するテストデータの内容を示す。縦軸は下向きにＦＬＡＳＨメモリ９のアドレスが増えていく様子を示し、横軸はＦＬＡＳＨメモリ９のデータ単位である１バイト（８ビット）の並びを示している。この１バイトのデータ単位は、テストデータ入力回路２２２によって１回の読み出しで読み出される単位となる。１回で読み出される１バイトのテストデータは、上位の６ビットを入力テストパターンとし、下位の２ビットを期待値データとするデータ構成としている。それぞれの入力テストパターンは、ＣＰＵコアのスキャンチェーンの長さに対応したＮ個のデータ（各６ビット）で１つのセットを構成し、それが複数セットで入力テストパターンの全体を構成している（Ｎは、ＣＰＵコアの回路に応じて決まる正整数）。同様にして、入力テストパターンに対応してＣＰＵコアから出力されるはずの出力結果の期待値データも、やはりＮ個のデータ（各２ビット）で１つのセットを構成し、それが複数セットで期待値データの全体を構成している。ここで、入力テストパターンと期待値データは、所定のアドレス分だけ対応関係をずらした（期待値データの方を後ろにずらした）状態で、ＦＬＡＳＨメモリ９に格納されている。
【００６６】
図１０に、図９に示したテストデータを用いて図８に示した診断テストコントローラ２１によりスキャンテストを実行する様子を示す。テストデータ入力回路２２２がＦＬＡＳＨメモリ９から読み出した入力テストパターン（リードデータの上位６ビット）は、一定の処理遅延時間が経過した後で、ＣＰＵコアに対して出力される。テストデータ入力回路２２２は、入力テストパターンの１個のデータをＣＰＵコアに入力する毎に、テストクロックもＣＰＵコアに入力する。この動作をＮ回繰り返すことで、１セットの入力テストパターンがＣＰＵコアのスキャンチェーンに入力される。そして、テストデータ入力回路２２２は、そのスキャンチェーンに入力した入力テストパターンによってＣＰＵコアを動作させる。その後、テストデータ入力回路２２２は、ＣＰＵコアのスキャンチェーンの長さに対応した複数回のテストクロックをＣＰＵコアに入力することでスキャンチェーンをシフトする。このときに、テストデータ入力回路２２２は、次の１セットの入力テストパターンも入力する。そして、その複数回のテストクロック分のサイクル数が経過するにつれて、ＣＰＵコアから１セットの出力結果データがテスト結果比較回路２２３に入力される。
【００６７】
一方、テストデータ入力回路２２２がＦＬＡＳＨメモリ９から読み出した期待値データ（リードデータの下位２ビット）も、一定の処理遅延時間が経過した後で、テスト結果比較回路２２３に供給される。そして、テスト結果比較回路２２３は、ＣＰＵコアからの出力結果データとそれに対応する期待値データとを、テストクロックのサイクル毎にオンザフライで比較する。すなわち、テスト結果比較回路２２３は、テストクロックのサイクル毎に、出力結果データ（２ビット）と、期待値データ（２ビット）とを順次比較していく。これを実現するために、図９に示した通り、ＦＬＡＳＨメモリ９に格納する入力テストパターンと期待値データは、所定のサイクル数分だけ対応関係をずらした（期待値データの方を後ろにずらした）状態としている。
【００６８】
このように、本実施の形態１の例では、図１０に示すように、あるセットにおける２番目の入力テストパターンがＣＰＵコアに入力されるときに、その１つ前の入力テストパターンのセットに対応する出力結果データのセットがテスト結果比較回路２２３に入力され始める。言い換えると、入力テストパターンをＣＰＵコアが入力されるときに、Ｎ＋１回前に入力を開始した入力テストパターンのセットに対応する出力結果データのセットがテスト結果比較回路２２３に入力され始める。そのため、図９に示すように、ＦＬＡＳＨメモリ９では、あるセットの入力テストパターンの先頭アドレスと、そのセットの入力テストパターンの出力結果データの期待値データの先頭アドレスとは、Ｎ＋１回の読み出し分だけずれた位置としている。これによれば、テストデータ入力回路２２２が１バイトのテストデータを読み出して、そのテストデータに含まれる入力テストパターンをＣＰＵコアに入力するときに、テスト結果比較回路２２３が、そのテストデータに含まれる期待値データとして、テスト結果比較回路２２３に入力される出力結果データに対応する期待値データを得ることができる。
【００６９】
テスト結果比較回路２２３は、最終の判定結果（ＯＫまたはＮＧ）として、すべてのサイクルでの比較結果が一致すればＯＫと判定し、１つのサイクルでも比較結果が不一致となればＮＧと判定する。
【００７０】
以上に説明した本実施の形態１によれば、複数のＣＰＵコアのそれぞれのスキャンテストを、スキャンテストの実施時間帯（実施期間）が相互に重複しないように所定の順序で周期的に実施する。これによれば、スキャンテストの実施時間帯（実施期間）を相互に重複しないようにしているため、演算性能の低下を低減することができる。また、スキャンテストを周期的に実行しているため、ＣＰＵコアの故障を迅速に検出することができる。したがって、通常動作に与える影響（演算性能の低下）を小さく抑えながらも、機能安全のために求められる高い診断カバレッジを実現でき、万が一そのＣＰＵコアに故障が発生した場合には速やかにそれを検出して安全な状態に移行させることができる。
【００７１】
また、本実施の形態１では、ＦＬＡＳＨメモリ９は、複数の入力テストパターンと、複数の出力結果データの期待値となる複数の期待値データとが、入力テストパターンと所定のサイクル分前の入力テストパターンに基づいて生成される期待値データとが同時に読み出されるように格納されるようにしている。この所定のサイクルは、診断テストコントローラ２１がＣＰＵコアに入力テストパターンを入力してから、その入力テストパターンに基づいて生成された出力結果データが診断テストコントローラ２１に出力されるまでのサイクルである。そして、診断テストコントローラ２１は、ＦＬＡＳＨメモリ９から期待値データを読み出し、前記入力テストパターンに応じた出力結果データと、オンザフライで順次比較していくことで診断中のＣＰＵコアを診断するようにしている。これによれば、スキャンテストをオンザフライで実行することができるため、ＣＰＵコアの診断時間を短縮することができる。
【００７２】
＜実施の形態２＞
次に、本実施の形態２について、図面を用いて、その構成と動作を説明する。
【００７３】
この実施の形態２の構成と動作は、図３に示したＣＰＵシステム３、図４に示したＣＰＵ２０、そして図５に示したＣＰＵコア１０１（ＣＰＵコア１０２〜１０４も同様）とスキャンテスト用回路２０１（スキャンテスト用回路２０２〜２０４も同様）のように、実施の形態１の構成と動作と基本的に同じである。また、実施の形態２のＣＰＵコア１０１〜１０４の診断テストの実行の様子も、図６と図７に示したＣＰＵコアの診断テストの実行の様子と同じである。
【００７４】
ただし、実施の形態２では、ＣＰＵコア１０１〜１０４に入力するスキャンテストのための入力テストパターンは８ビット（実施の形態１では６ビット）としている。そのため、実施の形態２では、ＣＰＵコア１０１〜１０４に付随するスキャンテスト用回路２０１〜２０４に含まれるスキャンデータ伸長回路２１１の構成はこれに対応したものとする。
【００７５】
これに関係して、実施の形態２では、ＦＬＡＳＨメモリ９に格納するテストデータの内容（実施の形態１では図９）と診断テストコントローラ２３によりスキャンテストを実行する様子（実施の形態１では図１０）が実施の形態１とは異なる。
【００７６】
図１１は、本実施の形態２に係る診断テストコントローラ２３の構成を示すブロック図である。図１１に示した診断テストコントローラ２３の構成は、図８に示した実施の形態１における診断テストコントローラ２１と基本的に同じであるが、その一部の動作は実施の形態１とは異なる。より具体的には、図１１に示す実施の形態２に係るテストデータ入力回路２２６及びテスト結果比較回路２２７の動作が、図８に示した実施の形態１に係るテストデータ入力回路２２２及びテスト結果比較回路２２３の動作とは異なる。
【００７７】
テストデータ入力回路２２６は、上述したように、入力テストパターンとして８ビットのデータをＣＰＵコア１０１〜１０４に入力する。また、これに関係して、テストデータ入力回路２２６は、期待値データも８ビットずつ３回、テスト結果比較回路２２７に入力する。詳細には、図１２に示すＦＬＡＳＨメモリ９に格納されるデータの内容とあわせて後述する。
【００７８】
テスト結果比較回路２２７は、テストクロックのサイクル毎に出力結果データと期待値データとを比較せず、出力結果データを累積演算する。テスト結果比較回路２２７は、その累積演算をする回路であるＬＦＳＲ（線形帰還シフトレジスタ）２２８を有している。テスト結果比較回路２２７は、出力結果データの累積演算結果（例えば、２４ビット）に基づいて、ＣＰＵコアが故障しているか否かを最後に一括して判定する。
【００７９】
図１２には、本実施の形態２においてＦＬＡＳＨメモリ９に格納するテストデータの内容を示す。入力パターンデータ（８ビット）がＮ個で１つのセットを構成し、それが複数セットで入力テストパターンの全体を構成している。ＦＬＡＳＨメモリ９には、この一連の入力テストパターンがまず格納され、その次に１つの累積期待値データ（例えば、２４ビット）が格納される。この累積期待値データは、一連の入力テストパターンに対応してＣＰＵコアから出力されるはずの出力結果データを、テストクロックのサイクル毎に累積して得られる１つの累積出力の期待値データである。この累積処理は、実際にはＬＦＳＲによりシグネチャを生成する処理である。
【００８０】
図１３に、図１２に示したテストデータを用いて診断テストコントローラ２１によりスキャンテストを実行する様子を示す。テストデータ入力回路２２６がＦＬＡＳＨメモリ９から読み出した入力テストパターン（リードデータそのものの８ビット）は、一定の処理遅延時間が経過した後で、ＣＰＵコアに対して出力される。テストデータ入力回路２２６は、実施の形態１で説明したように、ＣＰＵコアのスキャンチェーンに１セットの入力テストパターンを入力し、ＣＰＵコアを動作させる。その後、テストデータ入力回路２２６は、ＣＰＵコアのスキャンチェーンの長さに対応した複数回のテストクロックをＣＰＵコアに入力することでスキャンチェーンをシフトする。その複数回のテストクロック分のサイクル数が経過するにつれて、ＣＰＵコアから１セットの出力結果データがセレクタ２２４を経由してテスト結果比較回路２２７に入力される。
【００８１】
この動作が全ての入力テストパターンのセットに対して実施されるときに出力される全ての出力結果データ（２ビット）が、テストクロックのサイクル毎にテスト結果比較回路２２７の中にあるＬＦＳＲ２２８に入力されてオンザフライで累積処理され、最終的に一連の入力テストパターンに対応した出力結果データのシグネチャが生成される。そして、テスト結果比較回路２２７は、この累積出力データ（シグネチャ）と最後にＦＬＡＳＨメモリ９から読み出された累積期待値データ（２４ビット）とを比較し、最終的な判定結果（ＯＫまたはＮＧ）を決定する。
【００８２】
このように、本実施の形態２では、テストデータ入力回路２２６は、ＦＬＡＳＨメモリ９から入力テストパターンが格納される領域のデータを読み出している場合は、１回の読み出しで取得した１バイト（８ビット）のデータの全てをＣＰＵコアに出力する。テストデータ入力回路２２６は、入力テストパターンを読み出した回数をカウントし、全ての入力テストパターンが読み出される回数（閾値）に達した場合には、ＦＬＡＳＨメモリ９から読み出したデータの出力先をＣＰＵコアからテスト結果比較回路２２７に切り換える。これにより、テストデータ入力回路２２６は、ＦＬＡＳＨメモリ９から累積期待値データが格納される領域のデータを読み出している場合は、１回の読み出しで取得した１バイト（８ビット）のデータの全てをテスト結果比較回路２２７に出力する。よって、図１２に示した例では、ＦＬＡＳＨメモリ９から読み出したデータのうち、最後の３回分読み出したデータがテスト結果比較回路２２７に出力される。
【００８３】
テスト結果比較回路２２７は、テストデータ入力回路２２６から複数回出力されたデータを結合して、累積出力データの期待値データとして、ＬＦＳＲ２２８によって累積演算した累積出力データと比較する。よって、図１１に示した例では、テスト結果比較回路２２７は、テストデータ入力回路２２６から出力された３つの１バイト（８ビット）のデータを結合した２４ビットのデータを累積期待値データとして生成する。
【００８４】
ここで、テストデータ入力回路２２６は、全ての入力テストパターンが読み出される回数（閾値）は、任意の方法によって認識するようにしてよい。例えば、ＦＬＡＳＨメモリ９の特定の領域に閾値を予め格納しておくようにし、テストデータ入力回路２２６が、それを読み出すことで認識可能としてもよい。また、ＣＰＵシステム３の起動時に、テストデータ入力回路２２６が、ＣＰＵ２０から閾値の通知を受けるようにすることで認識可能としてもよい。この場合、診断テストコントローラ２３もシステムバスに接続されるようにし、テストデータ入力回路２２６が、システムバスを介して、ＣＰＵ２０から閾値の通知を受けるようにしてもよい。また、ＣＰＵ２０がＦＬＡＳＨメモリ９から累積期待値データ（２４ビット）を読み出して、テストデータ入力回路２２６やテスト結果比較回路２２７のレジスタに設定するようにしてもよい。
【００８５】
以上に説明した本実施の形態２によれば、実施の形態１と同じく、通常動作に与える影響（演算性能の低下）を小さく抑えながらも、機能安全のために求められる高い診断カバレッジを実現でき、万が一そのＣＰＵコアに故障が発生した場合には速やかにそれを検出して安全な状態に移行させることができる。
【００８６】
さらに、本実施の形態２によれば、スキャンテストの結果出力データからシグネチャを生成するようにし、それに対応した累積期待値データを第１の累積演算結果としてＦＬＡＳＨメモリ９に用意するようにしている。すなわち、診断テストコントローラ２３は、ＦＬＡＳＨメモリ９から読み出した第１の累積演算結果と、診断中のＣＰＵコアから順次出力された複数の出力結果データを累積演算した第２の累積演算結果とを比較することで診断中のＣＰＵコアを診断するようにしている。これによれば、外付けのＦＬＡＳＨメモリ９に格納するテストデータの容量を増やすことなく、入力テストパターンのビット数（診断テストするＣＰＵコア１０１〜１０４のスキャンテスト用回路２０１〜２０４の中にあるスキャンデータ伸長回路２１１に並列な形態で入力される）を増加させることができる。これにより、このスキャンデータ伸長回路２１１におけるスキャンデータの拡大率を減らせるため、スキャンテストの効率を上げられる。つまり、同じパターンの長さ（Ｎ個のデータ×複数セット）であれば、故障検出率が上がる。逆に、実施の形態１と同等の故障検出率を達成するために必要な入力テストパターンの長さが短くなる。
【００８７】
＜実施の形態３＞
続いて、本実施の形態３について、図面を用いて、その構成と動作を説明する。
【００８８】
図１４は、本実施の形態３に係るＣＰＵシステム４の構成を示すブロック図である。図３に示した実施の形態１におけるＣＰＵシステム３との違いは、ＣＰＵシステム４には、診断テストコントローラ２５を起動時に診断テストする起動時テスト回路２４が追加されている点である。
【００８９】
起動時テスト回路２４は、ＣＰＵシステム４の起動時に、診断テストコントローラ２５によってＣＰＵコア１０１〜１０４の診断テストの実行が開始されるのに先立ち、診断テストコントローラ２５の診断テストを実施する。なお、本実施の形態３に係る診断テストコントローラ２５は、実施の形態１に係る診断テストコントローラ２１に対して、診断テストコントローラ２５を診断テストするための回路が追加されたものであり、詳細については後述する。
【００９０】
図１５は、図１４に示した診断テストコントローラ２５の構成を示すブロック図である。図８に示した実施の形態１における診断テストコントローラ２１との違いは、診断テストコントローラ２５は、さらに、テスト実行回路２４１〜２４３が追加されている点と、起動時テスト回路２４からテスト指示信号がテスト実行回路２４１〜２４３のそれぞれに入力されている点である。
【００９１】
テスト実行回路２４１は、起動時テスト回路２４からのテスト指示信号の入力に応じて、テスト制御回路２２１の診断テストを実行する。テスト実行回路２４２は、起動時テスト回路２４からのテスト指示信号の入力に応じて、テストデータ入力回路２２２の診断テストを実行する。テスト実行回路２４３は、起動時テスト回路２４からのテスト指示信号の入力に応じて、テスト結果比較回路２２３の診断テストを実行する。テスト実行回路２４１〜２４３のそれぞれは、テスト制御回路２２１、テストデータ入力回路２２２、テスト結果比較回路２２３のそれぞれの診断テストとしてスキャンテストを実施する。また、テスト実行回路２４２は、診断テストとして、さらに、ＦＬＡＳＨメモリ９（そのデータを含む）の診断テストも実施する。
【００９２】
なお、図１５の例では、テスト実行回路２４１がテスト制御回路２２１に含まれ、テスト実行回路２４２がテストデータ入力回路２２２に含まれ、テスト実行回路２４３がテスト結果比較回路２２３に含まれるものとする。よって、図１５の例では、起動時テスト回路２４からのテスト指示信号が、診断テストコントローラ２５の中にあるテスト制御回路２２１、テストデータ入力回路２２２、テスト結果比較回路２２３に入力されることになる。しかしながら、テスト実行回路２４１〜２４３は、スキャンテスト対象の回路２２１〜２２３の外部に設けられていてもよい。
【００９３】
起動時テスト回路２４は、起動時に適切なタイミングでそれぞれ個別のテスト指示信号をテスト実行回路２４１〜２４３に入力するようにしている。もちろん全く同じタイミングで起動時の診断テストを行って構わない場合には、１つのテスト指示信号にまとめてもよい。
【００９４】
ここで、適切なタイミングとは、例えば、テスト制御回路２２１、テストデータ入力回路２２２、テスト結果比較回路２２３が相互に影響を与えないようにスキャンテストを実施することができるタイミングである。すなわち、各回路２２１〜２２３のスキャンテストを同時に実行すると相互に影響を与えてしまうような場合には、起動時テスト回路２４は、各回路２２１〜２２３のスキャンテストが実施される期間が相互に重複しないように、各回路２２１〜２２３のそれぞれにテスト指示信号を出力するタイミングをずらす。例えば、起動時テスト回路２４は、テスト制御回路２２１にテスト指示信号を出力したときから、テスト制御回路２２１のスキャンテストが十分に終了するとして予め定めた時間が経過してから、次のスキャンテスト対象のテストデータ入力回路２２２にテスト指示信号を出力する。また、起動時テスト回路２４は、テストデータ入力回路２２２にテスト指示信号を出力したときから、テストデータ入力回路２２２のスキャンテストが十分に終了するとして予め定めた時間が経過してから、次のスキャンテスト対象のテスト結果比較回路２２３にテスト指示信号を出力する。なお、このスキャンテストの順序は、一例にすぎず、これに限定されるものではない。
【００９５】
機能安全の観点からは、ＣＰＵコア１０１〜１０４の故障診断のための診断テストに関係する回路（つまりスキャンテストを実行する制御回路）と、テストデータを格納する外部メモリ（例えば、ＦＬＡＳＨメモリ９）は、起動時に別の方法で診断テストする必要がある。診断テストコントローラ２５が、前者のスキャンテストを実行する制御回路に相当し、外付けのＦＬＡＳＨメモリ９が、後者のテストデータを格納する外部メモリに相当する。制御回路は、ハードウェアによる故障診断（これもスキャンテストが例）の回路を別に設け、起動時には本来の動作（ＣＰＵコアの診断テストの制御）を開始する前に診断テストする。
【００９６】
制御回路として機能する診断テストコントローラ２５を起動時に診断テストするためのテスト実行回路２４１〜２４３は、起動時テスト回路２４からのテスト指示信号に基づいて動作する。テスト実行回路２４１〜２４３は、内部に疑似乱数をベースとしてスキャンテストのパターンを生成する回路と、それを診断テストコントローラ２５の対象ブロック（テスト制御回路２２１、テストデータ入力回路２２２、テスト結果比較回路２２３）のスキャンチェーンに入力し、その出力結果データが正常かどうかを判定する回路を備える。この出力結果が正常かどうかを判定する回路は、出力結果データの累積演算をする回路であるＬＦＳＲと、累積演算結果の期待値となる累積期待値データが格納される回路（例えば、レジスタ）を備える。これにより、テスト実行回路２４１〜２４３は、累積演算結果と累積期待値データとが一致する場合、診断テスト対象ブロックが正常であると判定し、不一致の場合には、診断テスト対象ブロックが故障していると判定する。
【００９７】
また、ＦＬＡＳＨメモリ９は、所定の固まりのデータにＣＲＣ（Cyclic Redundancy Check）を付けて格納するようにしておく。例えば、１６バイトのテストデータ単位でＣＲＣを付与するようにしてもよい。この場合、ＦＬＡＳＨメモリ９から１回で読み出されるデータは、入力テストパターンと期待値データを含む１６バイトのテストデータと、その入力テストパターンと期待値データから算出されるＣＲＣとを含むこととなる。また、例えば、ＦＬＡＳＨメモリ９において、Ｎ個のデータから成る１セットのテストデータが格納される領域に続く所定の数バイトの領域に、その１セットのテストデータのＣＲＣを格納するようにしてよい。
【００９８】
テストデータ入力回路２２２に対応するテスト実行回路２４２は、起動時テスト回路２４からのテスト指示信号に基づき、起動時にＦＬＡＳＨメモリ９に格納されているテストデータを読み出して、正常に読み出せたかどうかを付随するＣＲＣによりチェックする。なお、診断テストコントローラ２５が本来の動作を開始した後でも、テストデータの読み出し時には必ずＣＲＣによるチェックを行うようにしても構わない。テスト実行回路２４２は、ＦＬＡＳＨメモリ９からＣＲＣが付与された単位のデータを読み出し、読み出したデータについてＣＲＣを算出する。テスト実行回路２４２は、読み出したデータに付与されているＣＲＣと、読み出したデータから算出したＣＲＣを比較し、一致する場合は、ＦＬＡＳＨメモリ９が正常であると判定し、不一致の場合にはＦＬＡＳＨメモリ９が故障している（又はそのテストデータが破損している）と判定する。
【００９９】
テスト実行回路２４１〜２４３のそれぞれは、診断テスト対象が正常であると判定した場合、診断テスト対象の動作を開始させる。すなわち、テスト制御回路２２１、テストデータ入力回路２２２、テスト結果比較回路２２３によるＣＰＵコア１０１〜１０４の診断テストを開始させる。テスト実行回路２４１〜２４３のそれぞれは、診断テスト対象が異常であると判定した場合は、その異常を通知する通知信号をエラー出力・制御回路２２に通知するようにしてよい。この場合、サブマイコンは、上述のＣＰＵ２０（ＣＰＵコア１０１〜１０４）の異常が検出された場合と同様に、出力装置によって異常を通知する。また、この場合は、テスト実行回路２４１〜２４３とエラー出力・制御回路２２との間に通知信号を伝達するための信号線（図示せず）を有することになる。
【０１００】
または、ＣＰＵコアの故障診断のための診断テストに関係する回路（つまりスキャンテストを実行する制御回路）と、テストデータを格納する外部メモリは、起動時にさらに別の方法で診断テストするようにしてもよい。
【０１０１】
例えば、診断テストコントローラ２５は、ソフトウェアによる診断テストのためのテストモード（テスト回路）を内部に設けるようにしてもよい。この場合、診断テストコントローラ２５は、起動時テスト回路２４からのテスト指示信号に基づき、起動時には本来の動作（ＣＰＵコア１０１〜１０４の診断テストの制御）は停止状態とする。先にＣＰＵコア１０１〜１０４が動作可能となったときに、ＣＰＵコア１０１〜１０４の少なくとも１つが、ソフトウェアを実行することにより、テストモードに移行している診断テストコントローラ２５の対象ブロック（テスト制御回路２２１、テストデータ入力回路２２２、テスト結果比較回路２２３）を順番に診断テストする。
【０１０２】
例えば、診断テストを実行するＣＰＵコアは、診断テストとして、テスト制御回路２２１、テストデータ入力回路２２２、テスト結果比較回路２２３のレジスタにデータを書き込み、テストモードで動作させた結果の出力データを読み出し、その期待値データと比較する。これは、例えば、診断テストコントローラ２５もシステムバスに接続されるようにし、ＣＰＵコアがシステムバスを介してデータを読み書きするようにすればよい。ＣＰＵコアは、比較したデータが一致する場合は正常であると判定し、比較したデータが不一致である場合には故障していると判定する。
【０１０３】
ＣＰＵコアは、すべての回路２２１〜２２３が正常と判定できたら、本来の動作を開始させる。例えば、ＣＰＵコアは、すべての回路２２１〜２２３が正常と判定した場合は、テストモードを解除する信号を各回路２２１〜２２３に送信する。なお、ＣＰＵコアは、診断テスト対象の回路２２１〜２２３のいずれかが故障であると判定した場合は、その異常を通知する通知信号をその他Ｉ／Ｆ１８を介してサブマイコンに通知するようにしてよい。この場合、サブマイコンは、上述のＣＰＵ２０（ＣＰＵコア１０１〜１０４）の故障が検出された場合と同様に、出力装置によって故障を通知するようにしてもよい。
【０１０４】
また、例えば、ＦＬＡＳＨメモリ９は、ＣＲＣに代えて、所定の固まりのデータにＥＣＣ（Error Correction Code）を付けて格納する（例えば、データ６４ｂｉｔに対してＥＣＣ８ｂｉｔを付加）ようにしてもよい。この場合、テスト実行回路２４２は、起動時テスト回路２４からのテスト指示信号に基づき、ＦＬＡＳＨメモリ９からのテストデータ読み出し時に、このＥＣＣによりデータに対する１ビットエラー訂正・２ビットエラー検出を実現する。テスト実行回路２４２は、２ビットエラーを実施された場合のみ故障と判定するようにしてもよい。しかしながら、好ましくは、テスト実行回路２４２は、起動時の診断テストとしては、１ビットエラー訂正及び２ビットエラー検出のいずれでも実施された場合には、故障と判定するとよい。なお、このＥＣＣによるチェックは、起動時だけに限らず、診断テストコントローラ２５が本来の動作を行なっている場合には必ず実施するようにした方がよい。
【０１０５】
なお、上述の誤り検出符号（ＣＲＣ又はＥＣＣ）によるＦＬＡＳＨメモリ９のテストは、ＦＬＡＳＨメモリ９の全域において、所定のサイズのデータ毎に誤り検出符号を付与する例について説明したが、これに限られない。例えば、ＦＬＡＳＨメモリ９の一か所のみ（例えば、先頭又は末尾のみ）にテスト用データ（データと、その誤り検出符号）を格納しておくようにし、そのテスト用データによって故障検出を行うようにしてもよい。また、ＦＬＡＳＨメモリ９の数か所（例えば、先頭、中間、末尾）に離散的にテスト用データを格納しておくようにし、それらのテスト用データによって故障検出を行うようにしてもよい。
【０１０６】
また、以上の説明では、テスト実行回路２４１〜２４３を、テスト対象の回路２２１〜２２３のそれぞれに対して備える例について説明したが、これに限られない。例えば、テスト対象の回路２２１〜２２３の外部に、１つのテスト実行回路を備えるようにしてもよい。この場合、テスト実行回路は、起動時テスト回路２４からのテスト指示信号の入力に応じて、各回路２２１〜２２３を順番にスキャンテストする。また、テスト実行回路は、診断テストコントローラ２５の内部ではなく、外部に備えるようにしてもよい。この場合、テスト実行回路は、起動時テスト回路２４に含まれていてもよい。
【０１０７】
また、以上の説明では、実施の形態１に対して、本実施の形態３に係る起動時テスト回路２４及びテスト実行回路２４１〜２４３を適用した例について説明したが、当然に、実施の形態２に対しても適用することが可能である。
【０１０８】
以上に説明した実施の形態３によれば、実施の形態１及び実施の形態２と同じく、通常動作に与える影響（演算性能の低下）を小さく抑えながらも、機能安全のために求められる高い診断カバレッジを実現でき、万が一そのＣＰＵコア１０１〜１０４に故障が発生した場合には速やかにそれを検出して安全な状態に移行させることができる。
【０１０９】
さらに、実施の形態３によれば、ＣＰＵコア１０１〜１０４の故障診断を行うために付加した制御回路や外部メモリを起動時に診断テストするようにしている。すなわち、診断テストコントローラ２５がＣＰＵコア１０１〜１０４のスキャンテストを開始する前に、起動時テスト回路２４及びテスト実行回路２４１〜２４３が、診断テストコントローラ２５のテストを実施するようにしている。そのため、機能安全の観点でより優れたシステムとすることができる。
【０１１０】
また、実施の形態３によれば、診断テストコントローラ２５がＣＰＵコア１０１〜１０４のスキャンテストを開始する前に、ＦＬＡＳＨメモリ９に格納されたテストデータから誤り検出符号を算出し、算出した誤り検出符号と、ＦＬＡＳＨメモリ９に格納された誤り検出符号とを比較することでＦＬＡＳＨメモリ９を診断するようにしている。これによれば、誤ったテストデータを利用したスキャンテストにおける故障の誤検出を回避することができる。
【０１１１】
＜実施の形態４＞
さらに、本実施の形態４について、図面を用いて、その構成と動作を説明する。
【０１１２】
図１６は、本実施の形態４に係るＣＰＵシステム５の構成を示すブロック図である。本実施の形態４に係るＣＰＵシステム５と、図１４に示した実施の形態３に係るＣＰＵシステム４との違いは、診断テストコントローラ２６がシステムバスに接続されている点である。この構成により、ＣＰＵ２０と診断テストコントローラ２６とは、システムバスを介して、相互に任意のデータ（信号）を送受信することが可能である。
【０１１３】
図１７は、本実施の形態４に係る診断テストコントローラ２６の構成を示すブロック図である。本実施の形態４に係る診断テストコントローラ２６と、図１５に示した実施の形態３に係る診断テストコントローラ２５との違いは、周期的な診断テストの開始タイミングを決める周期カウンタ２２５を備えていない点と、ＣＰＵ２０から診断テスト開始指示信号を受け取るようにしている点と、それに伴い診断テストの開始を通知するフラグ信号の出力は無くしている点である。また、図１７に示す本実施の形態４に係るテスト制御回路２２９の動作は、図１５に示した実施の形態３に係るテスト制御回路２２１の動作と一部異なる。
【０１１４】
テスト制御回路２２９は、ＣＰＵ２０からの診断テスト開始指示信号の入力に応じて、ＣＰＵコアの診断テストを開始する。以降、テスト制御回路２２９が、テストモード切り換え信号をテスト対象のＣＰＵコアに出力してからの動作は、図１５に示したテスト制御回路２２１と同様となる。
【０１１５】
この実施の形態４は、ＣＰＵシステム５、ＣＰＵ２０、ＣＰＵコア１０１〜１０４の構成と動作は、実施の形態３の場合と基本的に同じであるが、実施の形態１において図７を用いて説明したＣＰＵコアの診断テストの実行の詳細が一部異なる。具体的には、タスクの中断又は終了と、タスクの復帰又は投入というソフトウェアでの処理が異なる。実施の形態１の場合では、そのＣＰＵコア１０１〜１０４で実行させているタスクの処理のループのどの辺りの位置まで到達しているかをチェックして、タスクの中断又は終了のいずれの処理とするかを切り換え、これに対応してタスクを復帰又は投入のいずれの処理とするかも切り換えていたが、このようにソフトウェアを作り込む必要をなくしたものである。
【０１１６】
図１８は、本実施の形態４における診断テストを実行するためのソフトウェア処理のフロー図である。１つのＣＰＵコアにおける通常動作と診断テスト動作の切り換えの様子を示している。図１８は、上から下にプログラムが実行されていくフローを示しており、ＣＰＵコアとしての通常動作は、一番左のフローに示す通常処理に相当する。真ん中のフローに示す割り込み処理から診断テストに入り、スキャンテストの様子は一番右に示している。
【０１１７】
実施の形態１では、ＣＰＵコアを通常動作から診断テスト（スキャンテストによる故障診断）動作に切り換えるときは、そのＣＰＵコアで実行中のタスクを中断させて、別のＣＰＵコアで実行を継続させる、またはタスクを所定の短い時間内で終了させる必要がある。この実施の形態４は、マルチコア対応のＯＳ（Operating System）によってタスクスケジューリングが行われている。すなわち、上述のＣＰＵ２０（ＣＰＵコア１０１〜１０４）が実行するプログラムには、このＯＳが含まれる。ＣＰＵシステム５において、ＣＰＵコア１０１〜１０４のそれぞれには、そのときどきで何らかのタスクが割り当てられ、それに対応する演算処理が実行されている通常動作の状態となる。本実施の形態４は、この場合に、任意のタイミングで実行中のタスクを中断させて通常動作から診断テスト動作に切り換え可能とするものである。また、このとき中断されたタスクは、他のＣＰＵコアで実行再開することが可能な自由度の高い切り換え方法としている。
【０１１８】
具体的には、通常動作として一番左のフローに示す通りに所定のタスクが実行されているときに、システムタイマー１２２から所定の閾値よりも高い優先度を有する高優先度のタイマー割り込みが発生したタイミングで、それを受け付けたＣＰＵコアは真ん中のフローに示す割り込み処理に飛ぶ。この割り込み処理ルーチンでは、まず実行中タスクを中断させて実行待ち状態（実行可能状態：Ready）に移行させる。これはマルチコア対応ＯＳが用意しているシステムＡＰＩ関数をコールすることによって実現できる。このとき、ＣＰＵコアが備える主要なレジスタの値は外部のメモリ（例えば、ＲＡＭ１３）に退避され、中断されたタスクは実行待ち状態になる。この中断されたタスクは、そのときに実行待ち状態になっている他のタスクよりも優先度が高ければ、他のＣＰＵコアが空いたタイミングで、そのＣＰＵコアの方に投入されて実行が再開されることになる。
【０１１９】
次に、これから診断テスト動作に切り換えるこのＣＰＵコアには、新たな別のタスクがＯＳのタスクスケジューラによって投入されないよう、タスクスケジューリングの対象外に設定する。そして、ＣＰＵコアは、ＣＰＵコアに付随するＬ１キャッシュのデータをフラッシュして無効な状態とした後、診断テストコントローラ２６に対して診断テスト開始指示信号を出力する処理で終わる。このときに、診断テスト動作から通常動作に戻るときに参照すべきフラグ情報（後述）を外部のメモリに退避しておく。また、ＣＰＵコアは、ＣＰＵ共通回路１２０からこのＣＰＵコアへのアクセスを抑止するように、ＣＰＵ共通回路１２０に対して設定を行う。なお、実行中タスクの実行待ち状態への移行、主要なレジスタの値の退避、ＣＰＵコアをタスクスケジューリング対象外にする設定、Ｌ１キャッシュのフラッシュ、及びフラグ情報の退避を実行する順序は、ここで例示した順序に限られない。
【０１２０】
診断テストコントローラ２６は、ＣＰＵコアから診断テスト開始指示信号を受けると、そのＣＰＵコアに対するテストモード切り換え信号を出力して、そのＣＰＵコアをスキャンテストのモードに移行させる。これにより、ＣＰＵコアは通常動作としての処理が停止され、一番右に示す通りに診断テスト動作（すなわちハードウェアとしてのスキャンテスト）が実行される。
【０１２１】
その後、ＣＰＵコアを診断テスト動作から通常動作に切り換える（戻す）ときは、まず診断テストコントローラ２６は、診断テストが完了したタイミングでＣＰＵコアに対するテストモード切り換え信号を出力する。これにより、ＣＰＵコアが元の通常のモードに戻される。また、それと同時に診断テストコントローラ２６は、ＣＰＵコアに対してリセット信号を出力し、ＣＰＵコアのハードウェアリセットを掛ける。これにより、ＣＰＵコアは、リセットルーチンから実行を開始することになる。また、診断テストコントローラ２６は、診断テストの終了を通知するフラグ信号をＣＰＵ２０に出力する。これにより、ＣＰＵ共通回路１２０は、診断テストの対象となっていたＣＰＵコアへのアクセス抑止を解除する。
【０１２２】
このときに、ＣＰＵコアは、外部のメモリに退避しておいたフラグ情報を取得する。このフラグ情報は、例えば、診断テスト開始指示信号を自らが出力したことを示す記録情報と、そのときのシステムタイマー１２２から取得した時刻情報とを含む。この診断テスト開始指示信号を自らが出力したことを示す記録情報は、ＣＰＵコアが自らが診断テスト後のハードウェアリセットにより再起動されていたことを、ＣＰＵシステム５の電源ＯＮ時などに実施される通常のシステムリセット後の起動と識別するための情報として機能する。よって、ＣＰＵコアは、ハードウェアリセット後に動作可能となったときには、まず、外部のメモリに記録情報が格納されている（フラグ情報を取得できる）か否かを判定する。外部のメモリに記録情報が格納されていない場合、ＣＰＵコアは、通常のシステムリセット後の起動時における初期化処理を実行する。
【０１２３】
一方、外部のメモリに記録情報が格納されている場合、ＣＰＵコアは、次に説明する診断テスト後の起動時における初期化処理を実行する。この場合、ＣＰＵコアは、診断テストの判定結果がＯＫであるかＮＧであるかをエラー出力・制御回路２２、または診断テストコントローラ２６の中にあるテスト結果比較回路２２３に格納された情報によって確認する。例えば、エラー出力・制御回路２２によって確認する場合は、エラー出力・制御回路２２において診断テストコントローラ２６のテスト結果比較回路２２３からの通信信号が示す判定結果の情報を保持しておくようにし、ＣＰＵコアがその他Ｉ／Ｆ１８を介してその判定結果の情報を取得し、確認するようにすればよい。また、テスト結果比較回路２２３によって確認する場合は、テスト結果比較回路２２３において判定結果の情報を保持しておくようにし、ＣＰＵコアがシステムバスを介してその判定結果の情報を取得し、確認するようにすればよい。
【０１２４】
また、ＣＰＵコアは、システムタイマー１２２から時刻を取得し、取得した時刻と、外部のメモリに格納された時刻情報が示す時刻とを比較する。ＣＰＵコアは、両者の時刻の差が、所定の閾値よりも大きい場合には、異常と判定し、その所定の閾値以下である場合には、正常であると判定する。この閾値として、ＣＰＵコアの診断テストが正常に実行されず予定よりも長引いてしまったと考えられる時間を任意に定めるようにする。
【０１２５】
確認した診断テストの判定結果がＯＫであり、かつ、時刻の比較結果も正常であると判定した場合、ＣＰＵシステム５の電源ＯＮで全体が立ち上がる起動時とは異なり、真ん中のフローに示す割り込み処理の途中に復帰する。ここで、ハードウェアリセットされたＣＰＵコアは、通常動作を行うために設定必要なレジスタの初期化を行い、タスクスケジューリングの対象に戻す設定を行うことにより、新たなタスクの投入が可能な状態に復帰する。このタスクスケジューリングの対象に戻す設定も、マルチコア対応ＯＳが用意しているシステムＡＰＩ関数をコールすることによって実現できる。このとき、必要なレジスタの値は、退避していた外部のメモリから復元される。なお、レジスタの初期化、主要なレジスタの値の復元、フラグ情報の復帰、及びＣＰＵコアをタスクスケジューリング対象に戻す設定、Ｌ１キャッシュのフラッシュ、及びフラグ情報の退避を実行する順序は、ここで例示した順序に限られない。
【０１２６】
以上の処理が終わったら、割り込みルーチンから抜けて、一番左のフローに示す通常処理が可能な状態に戻る。この際に、ＣＰＵコアは、割り込み処理への移行時に禁止していた他の割り込みの受け付けを許可する。他のＣＰＵコアについても同様である。この後、ＯＳのタスクスケジューラによって、そのときに実行待ち状態になっている最も優先度の高いタスクがこのＣＰＵコアに投入され、そのタスクの処理が始まる。
【０１２７】
一方、確認した診断テストの判定結果がＮＧである、または、時刻の比較結果が異常であると判定した場合は、ＣＰＵコアは、上述の処理について、タスクスケジューリングの対象に戻す設定は行わないようにすればよい。
【０１２８】
ここで、上述のフラグ情報として外部のメモリに格納された時刻情報は、図６を参照して説明した周期的な診断テストの実行タイミングを把握するためにも利用される。ＣＰＵコア１０１〜１０４は、システムタイマー１２２からタイマー割り込みが発生し、割り込み処理を開始したときに、まず、システムタイマー１２２から時刻情報を取得する。ＣＰＵコア１０１〜１０４は、外部のメモリに格納された時刻情報が示す時刻から、システムタイマー１２２から取得した時刻情報が示す時刻までに経過した時間が、診断テスト間隔に達した場合に、診断テスト開始指示信号を診断テストコントローラ２６に出力する。言い換えると、外部のメモリに記録した前回の診断テスト開始時刻と、システムタイマー１２２から取得した現在時刻との差が、診断テスト間隔の時間として定められた経過時間閾値を超えた場合に、ＣＰＵコア１０１〜１０４は、診断テスト開始指示信号を出力する。これによれば、ＣＰＵコア１０１〜１０４が診断テスト間隔毎に診断テスト開始指示信号を出力し、診断テスト間隔毎に自己の診断テストを診断テストコントローラ２６により実施させることが可能である。なお、ＣＰＵコア１０１〜１０４は、最初に診断テスト開始指示信号を診断テストコントローラ２６に出力するタイミングを相互にずらすことで、スキャンテストを実施する期間が相互に重複しないようにすればよい。
【０１２９】
また、以上の説明では、実施の形態３に対して、本実施の形態４に係る診断テスト実施方法を適用した例について説明したが、当然に、実施の形態１、２のいずれに対しても適用することが可能である。また、本実施の形態４に係る診断テスト実施方法を、本実施の形態３に係る起動時テスト回路２４及びテスト実行回路２４１〜２４３を実施の形態２に対して適用した形態に対しても適用することが可能である。
【０１３０】
以上に説明した実施の形態４によれば、ＣＰＵコアは、タイマー割り込みに応じて、実行しているプログラムを実行待ち状態に移行させて、オペレーティングシステムがそのＣＰＵコアに任意のプログラムをタスクスケジューリングしないように設定するとともに、スキャンテストの開始を指示する指示信号を診断テストコントローラ２６に出力するようにしている。これによれば、実施の形態１〜３の効果に加えて、ＣＰＵコア１０１〜１０４で実行させるタスクの中断と復帰の切り換え方法の自由度が高く、ＣＰＵ２０の全体で実行させる処理を各ＣＰＵコア１０１〜１０４にどのように割り振るかはマルチコア対応ＯＳのタスクスケジューラに任せることができるという効果が得られる。
【０１３１】
＜実施の形態４の変形例Ａ＞
ここで、本実施の形態４の変形例Ａについて、図面を用いて、その構成と動作を説明する。
【０１３２】
図３４は、本実施の形態４の変形例Ａに係るＣＰＵシステム５Ａの構成を示すブロック図である。本実施の形態４の変形例Ａに係るＣＰＵシステム５Ａと、図１６に示した実施の形態４におけるＣＰＵシステム５との違いは、マスクＲＯＭ４１と、リセットコントローラ４２とが追加されている点である。
【０１３３】
マスクＲＯＭ４１は、ＣＰＵコア１０１〜１０４のリセットベクターが割り当てられている。リセットベクターは、ＣＰＵコア１０１〜１０４がシステムリセット後の起動時にアクセスするアドレスである。マスクＲＯＭ４１は、リセットベクターに該当するアドレスに、ブートローダへのジャンプ命令が格納されている。すなわち、ＣＰＵコア１０１〜１０４は、そのリセット後（診断テスト後のハードウェアリセット後及び電源ＯＮ時のシステムリセット後）の起動時にリセットベクターに格納された命令を読み出して実行することで、ブートローダの実行を可能としている。なお、ブートローダは、マスクＲＯＭ４０１内に格納されていてもよく、それ以外の記憶装置（例えば、ＦＬＡＳＨメモリ９）に格納されていてもよい。ＦＬＡＳＨメモリ９にブートローダを格納する場合、ＦＬＡＳＨメモリ９もシステムバスに接続されるようにすることで、ＣＰＵコア１０１〜１０４からアクセス可能とすればよい。
【０１３４】
リセットコントローラ４２は、ＣＰＵ２０（ＣＰＵコア１０１〜１０４）とシステムバスとの間に接続される。よって、ＣＰＵ２０（ＣＰＵコア１０１〜１０４）は、リセットコントローラ４２を介して、他の回路１１〜１８、２６、４１にアクセスする。リセットコントローラ４２は、ＣＰＵコア１０１〜１０４がリセットベクターにアクセスする際に、そのリセットベクターを他のアドレスに書き換える機能を有する。すなわち、リセットコントローラ４２は、ＣＰＵコア１０１〜１０４が命令を読み出すアドレスを、マスクＲＯＭ４１に格納されたブートローダへのジャンプ命令のアドレスから、他の記憶装置に格納された命令のアドレスに変更する機能を有する。
【０１３５】
この実施の形態４の変形例Ａは、実施の形態４において図１８を用いて説明したＣＰＵコアの診断テストの実行の詳細が一部異なる。具体的には、実施の形態４では、診断テスト後のハードウェアリセットによる再起動と、電源ＯＮ時のシステムリセット後の起動との識別をフラグ情報によって行っていたが、本実施の形態４の変形例Ａでは、その識別を上述のリセットベクターの書き換えにより不要としたものである。
【０１３６】
図３５は、本実施の形態４の変形例Ａにおける診断テストを実行するためのソフトウェア処理のフロー図である。実施の形態４において図１８を用いて説明した診断テストを実行するためのソフトウェア処理のフロー図と比べると、リセットベクターの書き換えにより、フラグ情報の退避・復帰という処理がなくなっている。また、実行中タスクの実行待ち状態への移行、及び診断テスト対象のＣＰＵコアをタスクスケジューリングの対象外とする設定がなくなっている。
【０１３７】
ＣＰＵコアを通常動作から診断テスト動作に切り換えるときにはタスク停止の処理、そして診断テスト動作から通常動作に戻すときにはタスク再開の処理という若干のソフトウェアでの処理が行われる。また、ハードウェアのスキャンテストによる診断テスト動作から通常動作に戻すときに、ＣＰＵコアに対してハードウェアリセットを掛ける。
【０１３８】
通常動作として一番左のフローに示す通りに所定のタスクが実行されているときに、システムタイマー１２２から所定の閾値よりも高い優先度を有する高優先度のタイマー割り込みが発生したタイミングで、それを受け付けたＣＰＵコアは真ん中のフローに示す割り込み処理に飛ぶ。この割り込み処理ルーチンに入った時点で、通常動作で実行されていたタスクは停止されることになる。このときに、このＣＰＵコアは、他の割り込みの受け付けを禁止する。このＣＰＵコアは、まず、そのＣＰＵコアに付随するＬ１キャッシュをフラッシュして無効な状態とする。次に、ＣＰＵコアは、そのＣＰＵコアが備える主要なレジスタ（システムレジスタや汎用レジスタ）の値を外部のメモリ（例えば、ＲＡＭ１３）に退避し、リセットコントローラ４２に対してリセットベクターの書き換えを有効化する設定を行う。なお、Ｌ１キャッシュのフラッシュ、主要なレジスタの値の退避、及びリセットベクターの書き換えの有効化を実行する順序は、ここで例示した順序に限られない。例えば、主要なレジスタの値の退避、Ｌ１キャッシュのフラッシュ、リセットベクターの書き換えの有効化の順に実行されるようにしてもよい。
【０１３９】
このリセットベクターの書き換えは、後でＣＰＵコアを診断テスト動作から通常動作に戻すときに、ＣＰＵコアのハードウェアリセットが掛かった後、直ちに真ん中のフローに示す割り込み処理の途中に復帰するよう、その割り込み処理内に定義した復帰アドレスを飛び先としてリセットベクターを変更するものである。例えば、割り込み処理の命令がＲＡＭ１３に格納されているときには、リセットコントローラ４２は、リセットベクターの書き換えを有効化されている場合、ＣＰＵコアが命令を読み出すアドレスを、リセットベクターから、そのＲＡＭ１３において割り込み処理における複数の命令のうち、復帰先の命令が格納されているアドレスに変更するように動作する。この割り込み処理の命令が格納されているアドレスは、例えば、リセットベクターの書き換えを有効化する際に、ＣＰＵコアからリセットコントローラ４２に対して設定可能とすればよい。
【０１４０】
その後で、ＣＰＵコアが診断テストコントローラ２６に対して診断テスト開始指示信号を出力すると、診断テストコントローラ２６によりＣＰＵコアがスキャンテストのモードに移行され、一番右に示す通りに診断テスト動作（すなわちハードウェアとしてのスキャンテスト）が実行される。このとき、診断テストが完了したタイミングで、ＣＰＵコアは元の通常のモードに戻され、ＣＰＵコアに対してリセット信号が出力される。これにより、ＣＰＵコアのハードウェアリセットが掛かり、割り込み処理の途中からＣＰＵコアの動作が継続されるように、リセットベクターから変更されたアドレスが示す飛び先に復帰する。
【０１４１】
診断テストの判定結果がＯＫであったかＮＧであったかを示す情報は、診断テストコントローラ２６の中にあるテスト結果比較回路２２３に格納される。また、テスト結果比較回路２２３は、その情報をエラー出力・制御回路２２に通知信号として出力する。判定結果がＮＧであった場合は、ＣＰＵシステム５を安全な状態に移行させる処理（上述の故障の通知又は故障ＣＰＵコアの縮退）が行われる。判定結果がＯＫであった場合は、ＣＰＵコアは、テスト結果比較回路２２３に格納されたその情報を確認後、割り込み処理を継続する。ＣＰＵコアは、外部のメモリに退避していた主要なレジスタの値を読み出して復元し、リセットベクターとして通常のシステムリセットの後の起動時における初期化処理の先頭が飛び先となるように、リセットコントローラ４２に対してリセットベクターの書き換えを無効化する設定を行う。なお、主要なレジスタの値の復元、及びリセットベクターの書き換えの無効化を実行する順序は、ここで例示した順序に限られない。例えば、リセットベクターの書き換えの無効化、主要なレジスタの値の復元の順に実行されるようにしてもよい。
【０１４２】
その後、割り込みルーチンから抜けて、一番左のフローに示す通常処理に戻り、通常動作で実行されていたタスクが再開されることになる。このとき、ＣＰＵコアは、他の割り込みの受け付け禁止を解除し、割り込みの受け付けを許可した状態に戻る。なお、図１８を用いて説明した実施の形態４のソフトウェア処理では、タスクを実行待ち状態にしているが、本実施の形態４の変形例Ａのソフトウェア処理では、ＣＰＵコアは、中断していたタスクの実行を再開する。そのため、この主要なレジスタの値の復元は、本実施の形態４の変形例Ａではタスクの実行再開に必要な値を全て復元する必要があるが、実施の形態４ではそれと比較して一部の値の復元を省略することができる。
【０１４３】
図６と同様に各ＣＰＵコア１０１〜１０４の診断テストの実行を進めていく上では、それぞれのＣＰＵコア１０１〜１０４がシステムタイマー１２２からのタイマー割り込みをトリガーとし、システムタイマー１２２から取得した時刻情報を利用して前回の診断テストからの経過時間を確認する。なお、前回の診断テストを実行した時刻は、実施の形態４と同様に、前回に診断テストを開始したときに、その時刻を示す時刻情報を外部のメモリ（例えばＲＡＭ１３）に格納しておくことで把握可能とすればよい。そして、実施の形態４と同様に、前回の診断テスト開始時刻と現在時刻とを比較することで、診断テストを実行するタイミングになったと判定した場合に、ＣＰＵコア１０１〜１０４は、以上に説明した通りに割り込み処理から診断テストを実行するようにすればよい。まだ診断テストを実行するタイミングになっていないと判定した場合は、割り込みルーチンから直ちに抜けて通常処理に戻ればよい。
【０１４４】
また、以上の説明では、実施の形態４の診断テスト実施方法を変更して、実施の形態３に対して適用した例について説明したが、当然に、実施の形態１、２のいずれに対しても適用することが可能である。また、当然に、実施の形態１〜３の任意の２つ以上を組み合わせた形態に対しても、本実施の形態４の変形例Ａに係る診断テスト実施方法を適用することが可能である。
【０１４５】
以上に説明した実施の形態４の変形例Ａによれば、リセットコントローラ４２は、スキャンテストの実行後のリセットに応じてＣＰＵコアが命令を読み出すアドレスを、リセットベクターから、割り込み処理においてスキャンテストによって中断された位置における命令のアドレスに変更するようにしている。これによれば、ＣＰＵコアは、割り込み処理ルーチンの中で、若干のソフトウェア処理を前後に含む形で、診断テストにおけるスキャンテストを終了させることができる。よって、実施の形態１〜３の効果に加えて、ＣＰＵコアの診断テストがＣＰＵシステムの全体処理に与える影響を抑えられるという効果が得られる。
【０１４６】
＜実施の形態４の変形例Ｂ＞
次に、本実施の形態４の変形例Ｂについて、図面を用いて、その構成と動作を説明する。
【０１４７】
図３６は、本実施の形態４の変形例Ｂに係るＣＰＵシステム５Ｂの構成を示すブロック図である。本実施の形態４の変形例Ｂに係るＣＰＵシステム５Ｂと、実施の形態４の変形例Ａにおいて図３４を用いて説明したＣＰＵシステム５Ａとの違いは、システムバスに接続される診断テストトリガー回路４３が追加されている点である。この診断テストトリガー回路４３は、所定のタイミングでＣＰＵ２０の中にある割り込みコントローラ１２１に割り込み信号（図示せず）を出力する。割り込みコントローラ１２１は、診断テストトリガー回路４３からの割り込み信号に応じて、各ＣＰＵコア１０１〜１０４にトリガー割り込みが与えられる。この割り込み信号及びトリガー割り込みは、ＣＰＵコア１０１〜１０４のうち、任意のＣＰＵコアに対して発生させることができる。
【０１４８】
実施の形態４の変形例Ａでは診断テストのシーケンス制御のためにシステムタイマー１２２を利用していたが、本実施の形態４の変形例Ｂは、各ＣＰＵコア１０１〜１０４に対して実行する診断テストのタイミングを指示する専用の診断テストトリガー回路４３を設けたものである。診断テストトリガー回路４３は、各ＣＰＵコア１０１〜１０４に対して、それぞれの診断テストを実行開始するタイミングで個別の割り込み信号を出力する。診断テストトリガー回路４３には、システムバスを介してＣＰＵ２０から、図６に示した診断テスト間隔の情報、その間で実行する各ＣＰＵコアのそれぞれの診断テストのタイミング（診断テスト間隔の先頭タイミングからの経過時間）の情報、等を予めレジスタで設定可能としている。これにより、診断テストトリガー回路４３は、レジスタに設定された情報に基づいて、図６に示したような各ＣＰＵコア１０１〜１０４に対する診断テストの実行開始タイミングで、割り込みコントローラ１２１経由で所望のＣＰＵコアに対してトリガー割り込みを与えることができる。
【０１４９】
なお、診断テスト間隔における最初の診断テストの実行開始タイミングになったときだけ、診断テストトリガー回路４３からＣＰＵコア１０１に対して割り込み信号が出力されるようにして、後のＣＰＵコア１０１の診断テストや他のＣＰＵコア１０２〜１０４の診断テストを実行するシーケンス制御は別の方法で行うようにしてもよい。
【０１５０】
例えば、ＣＰＵシステム５Ｂは、ＣＰＵ２０内のシステムタイマー１２２とは別に、その他周辺回路１４に含まれる汎用タイマーを利用する。トリガー割り込みが与えられたＣＰＵコア１０１が、この汎用タイマーを起動する。ＣＰＵコア１０１〜１０４は、この汎用タイマーからのタイマー割り込みを利用することで、後のＣＰＵコア１０１〜１０４の診断テストを実行するタイミングを判定するようにしてもよい。なお、具体的な診断テスト実行タイミングの判定方法は、システムタイマー１２２を利用する場合と同様であるため、説明を省略する。また、例えば、プロセッサ間割り込みを用いたソフトウェアの処理により制御するようにしてもよい。より具体的には、ＣＰＵコア１０１〜１０４のうち、１つのＣＰＵコアだけがトリガー割り込みを受けて、その１つのＣＰＵコアが全てのＣＰＵコア１０１〜１０４のそれぞれについて診断テストを実行するタイミングを判定するようにしてもよい。そして、その１つのＣＰＵコアが他のＣＰＵコアの診断テストを実行するタイミングとなったと判定した場合、その１つのＣＰＵコアがその他のＣＰＵコアにプロセッサ間割り込みで診断テストの実行タイミングとなったことを通知する。そして、その他のＣＰＵコアは、プロセッサ割り込みに応じて診断テストを実行するようにしてもよい。
【０１５１】
また、以上の説明では、実施の形態４の変形例Ａに対して、本実施の形態４の変形例Ｂの診断テストトリガー回路４３を適用した例について説明したが、当然に、実施の形態４に対しても適用することが可能である。また、当然に、実施の形態１〜３の任意の２つ以上を組み合わせた形態に対して実施の形態４又はその変形例Ａに係る診断テスト実施方法を適用した形態に対しても、本実施の形態４の変形例Ｂに係る診断テストトリガー回路４３を適用することが可能である。
【０１５２】
以上に説明した実施の形態４の変形例Ｂによれば、実施の形態４の変形例Ａと同様に、診断テストにおけるスキャンテストを、若干のソフトウェア処理とともに割り込みルーチン内で終了させることができる。また、実施の形態４の変形例Ｂでは、診断テストトリガー回路４３が複数のＣＰＵコア１０１〜１０４のそれぞれに対して、ＣＰＵコア１０１〜１０４のそれぞれにおけるスキャンテストの実施タイミングで割り込みを発生させるようにしている。これによれば、実施の形態４、及び実施の形態４の変形例Ａの効果に加えて、システムタイマー１２２から取得した時刻情報を利用して前の診断テストからの経過時間を確認するというソフトウェアでの処理が不要となるという効果が得られる。また、この診断テストトリガー回路４３により、ＣＰＵコアに対する診断テストの実行パターンの自由度を高めることができる。
【０１５３】
＜実施の形態５＞
また、本実施の形態５について、図面を用いて、その構成と動作を説明する。
【０１５４】
図１９は、本実施の形態５に係るＣＰＵシステム６の構成を示すブロック図である。図１６に示した実施の形態４におけるＣＰＵシステム５との違いは、ＣＰＵ２０の中にあるＣＰＵコア１０１〜１０４が有するスキャンチェーンのＦＦ（Flip Flop）状態を退避する状態退避メモリ２７を設けている点である。
【０１５５】
状態退避メモリ２７は、診断テスト回路に対応するものであり、診断テスト対象のＣＰＵコアの診断テストを開始するときに、そのＣＰＵコアのスキャンチェーンのＦＦから退避されたデータが格納される。状態退避メモリ２７は、そのＣＰＵコアの診断テストが終了したときに、退避していたデータをＣＰＵコアのスキャンチェーンのＦＦに戻す。
【０１５６】
図２０は、図１９に示したＣＰＵ３０の構成を示すブロック図である。実施の形態１において図４で説明したＣＰＵ２０との違いは、４つのＣＰＵコアと外部に設けた状態退避メモリ２７との間の入出力信号線が追加されている点である。また、それに伴い、図２０に示す本実施の形態５に係るスキャンテスト用回路２５１〜２５４の動作が、図４に示した実施の形態１に係るスキャンテスト用回路２０１〜２０４の動作と一部異なる。
【０１５７】
スキャンテスト用回路２５１〜２５４は、スキャンチェーンへのデータの入力元として、診断テストコントローラ２６と状態退避メモリ２７のいずれかを選択する。また、スキャンテスト用回路２５１〜２５４は、スキャンチェーンからのデータを、診断テストコントローラ２６に加えて状態退避メモリ２７にも出力する。
【０１５８】
図２１は、図２０に示したＣＰＵコア１０１とスキャンテスト用回路２５１の構成を示すブロック図である。本実施の形態５に係るスキャンテスト用回路２５１と、実施の形態１において図５で説明したスキャンテスト用回路２０１との主な違いは、このＣＰＵコア１０１のスキャンテスト用回路２５１において、分配回路２１６と、スキャンデータ伸長回路２１１の出力（すなわち、ＣＰＵコアのスキャンチェーンへの入力）のところに、選択回路２１５を設けている点である。選択回路２１５は、スキャンデータ伸長回路２１１からの入力信号線と外部の状態退避メモリ２７からの入力信号線との間で接続先を切り換える。分配回路２１６は、スキャンデータ圧縮回路２１２の入力（すなわち、ＣＰＵコアのスキャンチェーンからの出力）を分配して外部の状態退避メモリ２７に出力する。
【０１５９】
状態退避メモリ２７は、診断テスト対象のＣＰＵコアのスキャンチェーンにテスト開始時に格納されていたデータが格納される。状態退避メモリ２７は、このＣＰＵコアのデータの退避及び復元を制御する状態退避制御回路２６０を有している。状態退避制御回路２６０も、診断テストコントローラ２６のテスト制御回路２２９からテストモード切り換え信号の入力を受ける。状態退避制御回路２６０は、テスト制御回路２２９からテストモード切り換え信号の入力によってスキャンテストの開始を認識し、スキャンテストが開始してからＣＰＵコア１０１から出力されたデータを、スキャンチェーンのサイズ分だけ取得し、状態退避メモリ２７に格納する。また、状態退避制御回路２６０は、例えば、スキャンクロックによってスキャンテストの進行状況を観測し、全ての入力テストパターンの入力が終了したタイミングで選択回路２１５の接続先を状態退避メモリ２７に切り換える。そして、状態退避制御回路２６０は、状態退避メモリ２７に退避したデータを、選択回路２１５を介してＣＰＵコア１０１に順次入力する。すなわち、状態退避制御回路２６０は、全ての入力テストパターンの入力が終了してから、最後の出力結果データが出力されるまでのスキャンチェーンの駆動期間を利用して、ＣＰＵコア１０１のスキャンチェーンに元のデータを復元する。
【０１６０】
なお、ＣＰＵコア１０２〜ＣＰＵコア１０４それぞれに対応して配置されたスキャンテスト用回路２５２〜２５４も、図２１と同等の構成であるため、説明を省略する。
【０１６１】
図２２には、本実施の形態５におけるＣＰＵコア１０１の診断テストの実行の詳細を示す。実施の形態１において図７を用いて説明した若干のソフトウェアでの処理（タスク中断・終了とタスク復帰・投入の処理）を不要とし、ハードウェアのスキャンテストによる診断テスト動作から通常動作に戻すときのハードウェアリセットも不要にした点に特徴がある。
【０１６２】
スキャンチェーンから出力されたＣＰＵコア１０１の内部のＦＦ状態を退避するメモリ（ＦＦ群やＳＲＡＭ）を有する状態退避メモリ２７をさらに設けている。そのため、スキャンテストのモードにおいて、通常のモードからスキャンテストのモードに切り換えて最初の入力テストパターンをスキャンチェーンに入力するときに、内部のＦＦ状態をその状態退避メモリ２７出力させて記憶させることができる。そして、最後の入力テストパターンに対する結果出力がスキャンチェーンから出力されるときに、状態退避メモリ２７に退避していたＦＦ状態をＣＰＵコア１０１に入力して診断テスト動作に入る直前の状態に復帰させることができる。これにより、直ちに元の通常動作を再開させることができる。
【０１６３】
なお、ＣＰＵコア１０２〜ＣＰＵコア１０４の診断テストの実行の詳細も、図２２と同様であるため、説明を省略する。
【０１６４】
また、以上の説明では、実施の形態４に対して、本実施の形態５に係る状態退避メモリ２７及びスキャンテスト用回路２５１〜２５４を適用した例について説明したが、当然に、実施の形態１〜３のいずれに対しても適用することが可能である。また、当然に、実施の形態１〜４、及び実施の形態４の変形例Ａ、Ｂの任意の２つ以上を組み合わせた形態に対しても、本実施の形態５に係る状態退避メモリ２７及びスキャンテスト用回路２５１〜２５４を適用することが可能である。
【０１６５】
以上に説明した実施の形態５によれば、スキャンテストが開始したときから順次出力されるデータを、スキャンチェーンの長さ分だけ取得して、状態退避メモリ２７に格納するようにしている。また、スキャンテストを終了するときに状態退避メモリ２７に格納したデータをスキャンチェーンに入力するようにしている。これによれば、実施の形態１〜４の効果に加えて、ＣＰＵコア１０１〜１０４で実行させるタスクの中断・終了と復帰・投入というソフトウェアでの処理が不要となり、ＣＰＵ３０の全体で実行させる処理からはこの周期的に行うＣＰＵコア１０１〜１０４の診断テストを意識する必要がなくなるという効果が得られる。
【０１６６】
＜実施の形態６＞
また、本実施の形態６について、図面を用いて、その構成と動作を説明する。
【０１６７】
この本実施の形態６は、ＣＰＵシステム６、ＣＰＵ３０、ＣＰＵコア１０１〜１０４、診断テストコントローラ２６の構成と動作は、本実施の形態５の場合と基本的に同じであるが、本実施の形態１において図６を用いて説明したＣＰＵコアの診断テストの実行の様子が異なる。
【０１６８】
図２３には、本実施の形態６におけるＣＰＵ３０の各ＣＰＵコア１０１〜１０４の分割診断テストの実行の様子を示す。この実施の形態６は、ＣＰＵコアの診断テストをＫ個の分割診断テストに分けて実行する点に特徴がある（Ｋは、予め任意に定められた正整数）。まず、ＣＰＵコア１０１に対してＫ回の分割診断テストを順次行い、次にＣＰＵコア１０２〜１０４に対してそれぞれＫ回の分割診断テストを順次行っていく。以上で４つのＣＰＵコア１０１〜１０４に対する診断テストが所定の診断テスト間隔で終了し、その後も同様に診断テストが繰り返されていく。
【０１６９】
すなわち、本実施の形態６では、テストデータ入力回路２２２及びテスト結果比較回路２２３は、例えば、ＦＬＡＳＨメモリ９に格納される全てのテストデータの１／Ｋのデータを単位にスキャンテストを実施する。しかしながら、各分割診断テストにおけるテストデータの個数は、必ずしも同数でなくてもよい。また、テストデータ入力回路２２２は、スキャンテストを終了するときには、ＦＬＡＳＨメモリ９のテストデータのうち、どのテストデータまでスキャンテストを実施したか示す情報を保持し、次のスキャンテストではその情報に基づいて続きからスキャンテストを実施する。
【０１７０】
また、この場合、ＣＰＵコア１０１〜１０４は、フラグ情報の時刻情報が示す前回の分割診断テスト開始時の時刻と、システムタイマー１２２から取得した時刻情報が示す現在時刻との差に対して使用する経過時間閾値として、１回目の分割診断テストと、２回目〜Ｋ回目の分割診断テストとで異なる時間を利用することになる。すなわち、図２３に示すように、１回目の分割診断テストの開始を判定するための経過時間閾値は、２回目〜Ｋ回目の分割診断テストの開始を判定するための経過時間閾値よりも長い時間となる。
【０１７１】
例えば、ＣＰＵコア１０１〜１０４は、Ｋ回目の分割診断テストの実施後に、次の診断テストにおける１回目の分割診断テストの開始を判定する際には、経過時間閾値として、（診断テスト間隔−（診断テスト間隔×１／４×（Ｋ−１）／Ｋ））を利用するようにすればよい。また、例えば、ＣＰＵコア１０１〜１０４は、１回目〜Ｋ−１回目のいずれかの分割診断テストの実施後に、その次の分割診断テストを開始する際には、経過時間閾値として、（診断テスト間隔×１／４×１／Ｋ）を利用するようにすればよい。
【０１７２】
図２４には、本実施の形態６におけるＣＰＵ３０の各ＣＰＵコア１０１〜１０４の分割診断テストの実行の様子の別の例を示す。この場合は、ＣＰＵコア１０１に対して１番目の分割診断テストを行った後、ＣＰＵコア１０２〜１０４に対して同様に１番目の分割診断テストを行い、次にＣＰＵコア１０１に戻って２番目の分割診断テストを行う。このように１つの分割診断テストを単位に４つのＣＰＵコア１０１〜１０４を巡回させながら診断テストを進めていく、つまり入れ子の状態で分割診断テストを行うものである。
【０１７３】
この場合も、テストデータ入力回路２２２及びテスト結果比較回路２２３は、ＦＬＡＳＨメモリ９の全てのテストデータの１／Ｋのデータを単位にスキャンテストを実施する。また、テストデータ入力回路２２２は、上述の通り、スキャンテストの進行状況を記録する。
【０１７４】
また、この場合、ＣＰＵコア１０１〜１０４は、フラグ情報の時刻情報が示す前回の分割診断テスト開始時の時刻と、システムタイマー１２２から取得した時刻情報が示す時刻との差に対して使用する経過時間閾値として、１回目〜Ｋ回目の分割診断テストとで全て同一の時間を利用することになる。例えば、ＣＰＵコア１０１〜１０４は、分割診断テストの実施後に、その次の分割診断テストの開始を判定する際には、経過時間閾値として、（診断テスト間隔×１／４）を利用するようにすればよい。
【０１７５】
図２５は、本実施の形態６における分割診断テストを実行するためのソフトウェア処理のフロー図である。実施の形態４において図１８を用いて説明した診断テストを実行するためのソフトウェア処理のフロー図と比べると、状態退避メモリ２７の利用によって、タスク中断又は終了やタスク復帰又は投入というソフトウェアでの処理がなくなっているとともに、Ｋ個に分割された１つの分割診断テストは短い時間で完了するため、割り込みルーチンで通常処理が停止される時間がそれに対応して短い時間に収まることが分かる。
【０１７６】
このようにスキャンテストのパターンを細分化し、割り込みルーチン内で分割実行することにより、一般的にＣＰＵシステムが取り扱う各種の割り込みに対する処理と同等か、それ以内の時間に抑えることできるため、この分割診断テストの間の通常処理の停止が、そのような本来の割り込みに対する処理に悪影響を与えることはない。
【０１７７】
また、例えば、オペレーティングシステムでは、一般的に、あるＣＰＵコアが割り込み処理を実行中である場合、そのＣＰＵコアでの他の割り込みの受け付けは禁止される。また、他のＣＰＵコアに対する割り込み処理が禁止された状態とされる。それに対して、この分割診断テストによれば、割り込み処理から通常処理に迅速に復帰することが可能となるため、ＣＰＵコアによる本来の割り込み処理の実行が阻害されることもなくなる。
【０１７８】
以上に説明した実施の形態６によれば、ＣＰＵコアは、診断テストが分割された分割診断テスト（分割スキャンテスト）が終了する毎に割り込み処理から抜けるようにしている。すなわち、ＣＰＵコアは、分割スキャンテストを開始するときにタスク（プログラム）の実行を中断し、分割スキャンテストが終了するときにタスクの実行を再開するようにしている。これに対して、診断テストコントローラ２６は、分割スキャンテストを実施する毎に、ＦＬＡＳＨメモリ９に格納された複数の入力テストデータが所定の数に分割された分割テストデータを順番に入力してＣＰＵコアを診断するようにしている。すなわち、ＣＰＵコアの分割された診断テストを短い時間で完了することができる。これによれば、実施の形態５の効果に加えて、ＣＰＵシステムの全体の処理に与える影響が見えない形でＣＰＵコアの診断テストを隠せるという効果が得られる。
【０１７９】
また、以上の説明では、実施の形態６に係る分割診断テストの実行を実施の形態５に対して適用した例について説明したが、当然に、実施の形態１〜４、及び実施の形態４の変形例Ａ、Ｂのいずれに対しても適用することが可能である。また、当然に、実施の形態１〜５、及び実施の形態４の変形例Ａ、Ｂの任意の２つ以上を組み合わせた形態に対しても、実施の形態６に係る分割診断テストの実行を適用することが可能である。
【０１８０】
しかしながら、特に好適には、実施の形態６に係る分割診断テストの実行を、実施の形態４の変形例Ａの診断テスト実施方法が組み合わせられた形態に対して適用するとよい。実施の形態４の変形例Ａの診断テスト実施方法では、ＣＰＵコアは、割り込み処理ルーチンの中で、若干のソフトウェア処理を前後に含む形で、分割診断テストにおけるスキャンテスト（分割スキャンテスト）を終了させるようにしている。これによれば、上述したようにＣＰＵコアの診断テストがＣＰＵシステムの全体処理に与える影響を抑えられるという効果が得られる。これによれば、一般的にＣＰＵシステムが取り扱う各種の割り込みに対する処理と同等か、それ以内の時間に、１回の分割診断テストの処理を終えることができるため、この分割診断テストの実行によりＣＰＵコアによる本来の割り込み処理の実行を阻害することが避けられる。
【０１８１】
また、実施の形態６に係る分割診断テストの実行を、実施の形態４の変形例Ｂの診断テスト実施方法が組み合わせられた形態に対して適用した場合には、診断テストトリガー回路４３には、システムバスを介してＣＰＵ２０から、図２３又は図２４に示した診断テスト間隔（すべてのＣＰＵコアに対する各Ｋ回の分割診断テストを完了させる期間）の情報、その間で実行する各ＣＰＵコアのそれぞれの分割診断テストのタイミング（診断テスト間隔の先頭タイミングからの経過時間）の情報、等を予めレジスタで設定することになる。これにより、図２３又は図２４に示したような各ＣＰＵコアに対する分割診断テスト（１番めからＫ番めまで）の実行開始タイミングで、割り込みコントローラ１２１経由で所望のＣＰＵコアに対してトリガー割り込みを与えることができる。
【０１８２】
なお、この場合にも、上述と同様に、診断テスト間隔における最初の分割診断テストの実行開始タイミングになったときだけ、診断テストトリガー回路４３からＣＰＵコア１０１に対して割り込み信号が出力されるようにして、後のＣＰＵコア１０１の分割診断テストや他のＣＰＵコア１０２〜１０４の分割診断テストを実行するシーケンス制御は別の方法で行うようにしてもよい。
【０１８３】
＜実施の形態７＞
また、本実施の形態７について、図面を用いて、その構成と動作を説明する。
【０１８４】
図２６は、本実施の形態７に係るＣＰＵシステム７の構成を示すブロック図である。図１６に示した実施の形態４におけるＣＰＵシステム５との違いは、テストデータを格納する外部メモリであるＦＬＡＳＨメモリ９が、診断テストコントローラ２６に直接的に接続される形態ではなく、システムバスを介して（診断テストコントローラ２８に）間接的に接続される形態になっている点である。
【０１８５】
図２７は、図２６に示した診断テストコントローラ２８の構成を示すブロック図である。ＤＭＡＣ１２は、テストデータを格納するＦＬＡＳＨメモリ９から、ＣＰＵシステム７の起動時に、すべてのテストデータを外付けで高速大容量のＤＤＲメモリ８に転送する。ここで、ＦＬＡＳＨメモリ９に、ＣＰＵコア１０１〜１０４が実行するプログラムも予め格納しておくようにし、そのプログラムもテストデータと同時にＤＤＲメモリ８に転送するようにしてよい。
【０１８６】
また、ＤＭＡＣ１２は、ＣＰＵコアを診断テスト（スキャンテストによる故障診断）する際に必要となるテストデータを、そのＤＤＲメモリ８からスキャンテストの制御回路（すなわち、診断テストコントローラ２８）にＤＭＡ転送する。本実施の形態７では、診断テストコントローラ２８のテストデータ入力回路２３１にシステムバスとのＩ／Ｆがある。テストデータ入力回路２３１は、ＤＭＡ転送によるテストデータの受け取りとＣＰＵコアへのパターンの供給を行う。
【０１８７】
ＣＰＵシステム７におけるシステムバスは、多種多様なデータが流れる高いバンド幅を持つ内部バスであり、各種アクセスはその優先順位やタイミング規定に基づいてバスアクセスの調停が行われる。そのため、診断テスト用の複数のテストデータのそれぞれをこのシステムバス経由で診断テストコントローラ２８にＤＭＡ転送するタイミングにはある程度の偏りが発生する。このタイミングの偏りを吸収する小容量のＦＩＦＯメモリ２３０を設け、テストデータ入力回路２３１からのアクセスを可能としている。
【０１８８】
すなわち、スキャンテストの実行時には、ＤＭＡＣ１２は、ＤＤＲメモリ８に格納されたテストデータを、テストデータ入力回路２３１のＦＩＦＯメモリ２３０に順次ＤＭＡ転送する。そして、診断テストコントローラ２８は、ＦＩＦＯメモリ２３０に格納されたテストデータ（入力テストパターン）を順次取得して、ＣＰＵコア１０１〜１０４のスキャンチェーンに入力する。
【０１８９】
典型的には、本実施の形態７を実施の形態２に対して適用した場合には、図１２で説明した入力パターンデータの１セット分（８ビットのデータ×Ｎ個）が格納できる容量があればよい。また、ＦＩＦＯメモリ２３０は、２セット分の入力パターンデータを格納できる容量のダブルバッファ形式のメモリとしても構わない。この場合、最後の累積期待値データ（例えば、２４ビット）は、このＦＩＦＯメモリ２３０及びＤＤＲメモリ８には格納しない。例えば、ＣＰＵシステム７の起動時に、テストデータ入力回路２３１がＦＬＡＳＨメモリ９から読み出し、自身が有するレジスタ（図示せず）に格納するようにしてもよい。また、ＣＰＵ２０がＦＬＡＳＨメモリ９から読み出して、テストデータ入力回路２３１のレジスタに設定するようにしてもよい。しかしながら、必ずしも、累積期待値データをＦＩＦＯメモリ２３０及びＤＤＲメモリ８に格納しないようにすることには限定されない。累積期待値データも、他のテストデータと同様にＤＤＲメモリ８を介してテストデータ入力回路２３１にＤＭＡ転送されるようにしてもよい。
【０１９０】
また、以上の説明では、実施の形態４に対して、本実施の形態７に係るテストデータ転送方法を適用した例について説明したが、当然に、実施の形態１〜３、５〜６、及び実施の形態４の変形例Ａ、Ｂのいずれに対しても適用することが可能である。また、当然に、実施の形態１〜６、及び実施の形態４の変形例Ａ、Ｂの任意の２つ以上を組み合わせた形態に対しても、本実施の形態７に係るテストデータ転送方法を適用することが可能である。
【０１９１】
以上に説明した実施の形態７によれば、テストデータを格納するＦＬＡＳＨメモリ９をシステムバスに接続する形態とし、ＣＰＵシステム７の起動時に、ＦＬＡＳＨメモリ９に格納された複数の入力テストデータを、システムバスを介してＤＤＲメモリ８にＤＭＡ転送して格納するようにしている。そして、ＤＤＲメモリ８に格納された複数の入力テストデータを、システムバスを介して診断テストコントローラ２８に順次ＤＭＡ転送するようにしている。また、診断テストコントローラ２８は、前記ＤＭＡコントローラによって転送された入力テストパターンの一部を一時的に格納するＦＩＦＯメモリ２３０を有し、ＦＩＦＯメモリ２３０に格納された入力テストパターンをＣＰＵコア１０１〜１０４のスキャンチェーンに入力するようにしている。そのため、実施の形態１〜６、及び実施の形態４の変形例Ａ、Ｂの効果に加えて、また、通常のプログラム格納用のＦＬＡＳＨメモリ９（例えば、起動時に必要なプログラムが外付けのＤＤＲメモリ８に転送され、動作時にはそのＤＤＲメモリ８からプログラムが読み出されてＣＰＵ２０が動作する）と兼用することもできるという効果が得られる。また、そのようにしても、システムバスにおける伝送の遅延に影響されることなく、スキャンテストを実施することが可能である。
【０１９２】
＜実施の形態８＞
また、本実施の形態８について、図面を用いて、その構成と動作を説明する。
【０１９３】
図２８は、本実施の形態８に係るＣＰＵ４０の構成を示すブロック図である。実施の形態５において図２０で説明したＣＰＵ３０との違いは、いずれか１つのＣＰＵコアが保持するＦＦ状態を退避可能な状態退避メモリ２７を外部に設けるのではなく、ＣＰＵ４０の中に、いずれか１つのＣＰＵコアが保持するＦＦ状態を転送して通常動作を引き継ぐことが可能な代替用のＣＰＵコア１０９を設けた点である。ＣＰＵコア１０１〜１０４と、Ｌ１キャッシュ１１１〜１１４との間の入出力信号線のそれぞれに、セレクタ２７１〜２７４を追加している。また、ＣＰＵコア１０１〜１０４と、ＣＰＵ共通回路１２０との間の入出力信号線のそれぞれに、セレクタ２７５〜２７８も追加している。
【０１９４】
セレクタ２７１は、Ｌ１キャッシュ１１１の接続先を、ＣＰＵコア１０１とＣＰＵコア１０９のいずれかに切り換える。セレクタ２７２は、Ｌ１キャッシュ１１２の接続先を、ＣＰＵコア１０２とＣＰＵコア１０９のいずれかに切り換える。セレクタ２７３は、Ｌ１キャッシュ１１３の接続先を、ＣＰＵコア１０３とＣＰＵコア１０９のいずれかに切り換える。セレクタ２７４は、Ｌ１キャッシュ１１４の接続先を、ＣＰＵコア１０４とＣＰＵコア１０９のいずれかに切り換える。
【０１９５】
セレクタ２７５は、ＣＰＵ共通回路１２０の接続先を、ＣＰＵコア１０１とＣＰＵコア１０９のいずれかに切り換える。セレクタ２７６は、ＣＰＵ共通回路１２０の接続先を、ＣＰＵコア１０２とＣＰＵコア１０９のいずれかに切り換える。セレクタ２７７は、ＣＰＵ共通回路１２０の接続先を、ＣＰＵコア１０３とＣＰＵコア１０９のいずれかに切り換える。セレクタ２７８は、ＣＰＵ共通回路１２０の接続先を、ＣＰＵコア１０４とＣＰＵコア１０９のいずれかに切り換える。
【０１９６】
また、本実施の形態８に係るスキャンテスト用回路２５１〜２５４の動作及び構成は、実施の形態５に係るスキャンテスト用回路２５１〜２５４と同様であるが、選択回路２１５及び分配回路２１６の接続先が状態退避メモリ２７に代えて、ＣＰＵコア１０９とされている。
【０１９７】
代替制御回路２５９は、診断テストコントローラ２６のテスト制御回路２２９からテストモード切り換え信号の入力を受ける。代替制御回路２５９は、テスト制御回路２２９からのテストモードへの切り換えを指示するテストモード切り換え信号の入力によってスキャンテストの開始を認識し、スキャンテストが開始してからＣＰＵコアから出力されたデータを、分配回路２１６によりスキャンチェーンのサイズ分だけ取得し、ＣＰＵコア１０９のスキャンチェーンに格納する。また、ＣＰＵコア１０９は、テスト制御回路２２９からのテストモード切り換え信号の入力に応じて、セレクタ２７１〜２７８のうち、診断テスト対象のＣＰＵコアに対応するセレクタの接続先を、診断テスト対象のＣＰＵコアからＣＰＵコア１０９に切り換える。これにより、ＣＰＵコア１０９は、ＣＰＵコア１０９のスキャンチェーンに格納されたデータに基づいて、診断テスト対象のＣＰＵコアの処理を代替して実行する。また、この際に、ＣＰＵコア１０９は、診断テスト対象のＣＰＵコアに代わり、診断テスト対象のＣＰＵコアに対応するＬ１キャッシュと、ＣＰＵ共通回路１２０にもアクセスして処理を進めることができる。
【０１９８】
また、代替制御回路２５９は、例えば、スキャンクロックによってスキャンテストの進行状況を観測し、全ての入力テストパターンの入力が終了したタイミングで選択回路２１５の接続先をＣＰＵコア１０９に切り換える。そして、代替制御回路２５９は、ＣＰＵ１０９のスキャンチェーンに格納されたデータを、選択回路２１５を介してＣＰＵコアに順次入力する。すなわち、代替制御回路２５９は、全ての入力テストパターンの入力が終了してから、最後の出力結果データが引き出されるまでのスキャンチェーンの駆動期間を利用して、ＣＰＵコアのスキャンチェーンにＣＰＵコア１０９からデータを戻す。これによれば、診断テスト対象であったＣＰＵコアは、ＣＰＵコア１０９で代替して実行されていた処理を引き継ぐことができきる。
【０１９９】
図２９には、図２８に示したＣＰＵ４０の各ＣＰＵコア１０１〜１０４の診断テストの実行の様子を示す。実施の形態１において図６を用いて説明した診断テストの実行の様子と比べると、ＣＰＵコア１０１〜１０４を診断テスト（スキャンテストによる故障診断）動作に切り換える際にその通常動作を引き継ぐＣＰＵコア１０９をさらに設けた構成となっているため、スキャンチェーンを用いてＣＰＵコア１０１〜１０４の内部のＦＦ状態をＣＰＵコア１０９に移して通常動作を継続（代替動作）させることができることが分かる。このとき、診断テスト対象のＣＰＵコアに直結されているＬ１キャッシュメモリ１１１〜１１４（のいずれか）及びＣＰＵ共通回路１２０等の接続先はＣＰＵコア１０９に切り換えられる。
【０２００】
診断テスト動作が完了したら、同様の方法でＦＦ状態をＣＰＵコア１０９から元のＣＰＵコアに戻し、本来の姿での元のＣＰＵコアの通常動作を継続させる。ＣＰＵコア１０９を動作させる必要がない期間はその動作を停止させる。なお、ＣＰＵコア１０９がセレクタを経由してＬ１キャッシュやＣＰＵ共通回路１２０と入出力するパスは、本来のＣＰＵコアが入出力するパスよりも信号線長が長くなるため、ＣＰＵコア１０９における代替動作の周波数はそれに対応して落とすことが望ましい。すなわち、好ましくは、ＣＰＵコア１０９の動作周波数は、ＣＰＵコア１０１〜１０４よりも低い動作周波数とする。
【０２０１】
また、以上に説明した本実施の形態８に係るＣＰＵコア１０９、スキャンテスト用回路２５１〜２５４、及び代替制御回路２５９は、実施の形態５と競合しない形態であれば、実施の形態１〜４、６〜７、及び実施の形態４の変形例Ａ、Ｂのいずれに対しても適用することが可能である。また、当然に、実施の形態１〜４、６〜７、及び実施の形態４の変形例Ａ、Ｂの任意の２つ以上を組み合わせた形態に対しても、本実施の形態８に係るＣＰＵコア１０９、スキャンテスト用回路２５１〜２５４、及び代替制御回路２５９を適用することが可能である。
【０２０２】
以上に説明した実施の形態８によれば、スキャンテストが開始したときから順次出力されるデータを、スキャンチェーンの長さ分だけ取得して、代替用のＣＰＵコア１０９のスキャンチェーンに格納するようにしている。そして、代替用のＣＰＵコア１０９は、ＣＰＵコア１０９のスキャンチェーンに格納されたデータに基づいて、スキャンテストの実施されるＣＰＵコアの処理を代替して実行する。そのため、実施の形態１〜４、６〜７、及び実施の形態４の変形例Ａ、Ｂの効果に加えて、ＣＰＵコアの診断テストの実行による性能の低下を大幅に減らせるという効果が得られる。
【０２０３】
＜実施の形態９＞
また、本実施の形態９について、図面を用いて、その構成と動作を説明する。
【０２０４】
以下、本実施の形態に係るＣＰＵ６０を、実施の形態１に係るＣＰＵシステム３に対して適用した場合について説明する。図３０は、高い演算性能を実現するＣＰＵシステム２の別の例におけるＣＰＵ５０の構成を示すブロック図である。図２に示したＣＰＵシステム２におけるＣＰＵ１０は４つのＣＰＵコア１０１〜１０４とＣＰＵ共通回路１２０から成っていたが、このＣＰＵ５０はそれを２倍に増やした構成に相当する。４つのＣＰＵコアとＣＰＵ共通回路から成るＣＰＵグループを２つ設ける形態とし、両者をシステムバスに接続するためのＣＰＵ全体共通回路１４０も設けている。なお、それぞれのＣＰＵコア１０１〜１０８のそれぞれに付随するＬ１キャッシュ（Ｌ，Ｄ）は図示を省略している。
【０２０５】
ＣＰＵ５０は、ＣＰＵコア１０１〜１０８、ＣＰＵ全体共通回路１４０、ＣＰＵ共通回路１４１、１４２を備える。ＣＰＵ全体共通回路１４０は、割り込みコントローラ１２１、システムタイマー１２２、デバッグ・トレースＩ／Ｆ１２７を備える。ＣＰＵ共通回路１４１は、Ｌ２キャッシュ１２４、Ｌ２キャッシュコントローラ１２５、キャッシュコヒーレンシーコントローラ１４３を備える。ＣＰＵ共通回路１４２は、Ｌ２キャッシュ１２８、Ｌ２キャッシュコントローラ１２９、キャッシュコヒーレンシーコントローラ１４４を備える。ＣＰＵコア１０１〜１０４及びＣＰＵ共通回路１４１は、ＣＰＵグループＡに含まれ、ＣＰＵコア１０５〜１０８及びＣＰＵ共通回路１４２は、ＣＰＵグループＢに含まれる。
【０２０６】
ＣＰＵコア１０５〜１０８は、基本的にＣＰＵコア１０１〜１０４と同様に動作する。しかし、ＣＰＵコア１０５〜１０８は、ＣＰＵコア１０１〜１０４と比較して小型で低消費電力となっている。例えば、ＣＰＵ５０は、処理性能を必要とするタスクは、ＣＰＵコア１０１〜１０４で実行し、処理性能を必要としないタスクは、ＣＰＵコア１０５〜１０８で実行するようにすることで、消費電力を低減しつつ、処理が要求されるときのパフォーマンスも提供する。
【０２０７】
本実施の形態９に係るＬ２キャッシュ１２４、Ｌ２キャッシュコントローラ１２５は、実施の形態１におけるものと同様である。Ｌ２キャッシュ１２８、Ｌ２キャッシュコントローラ１２９は、利用対象がＣＰＵコア１０５〜１０８となっていること以外は、Ｌ２キャッシュ１２４、Ｌ２キャッシュコントローラ１２５と同様である。
【０２０８】
本実施の形態９に係るキャッシュコヒーレンシーコントローラ１４３及びキャッシュコヒーレンシーコントローラ１４４は、実施の形態１に係るキャッシュコヒーレンシーコントローラ１２３と同様にＬ１キャッシュのキャッシュコヒーレンシーを実現する。キャッシュコヒーレンシーコントローラ１４３は、制御対象をＣＰＵコア１０１〜１０４のＬ１キャッシュとしている。キャッシュコヒーレンシーコントローラ１４４は、制御対象をＣＰＵコア１０５〜１０８のＬ１キャッシュとしている。また、キャッシュコヒーレンシーコントローラ１４３及びキャッシュコヒーレンシーコントローラ１４４は、キャッシュコヒーレンシーコントローラ１２３と比較して、さらにＣＰＵグループ間でのＬ１キャッシュ及びＬ２キャッシュ１２４、１２８のキャッシュコヒーレンシーも実現する。例えば、キャッシュコヒーレンシーコントローラ１４３は、ＣＰＵグループＢのＣＰＵコア１０５〜１０８のいずれかによってＲＡＭ１３のあるアドレスに対してデータの書き込みが発生した場合、ＣＰＵコア１０１〜１０４に対応するＬ１キャッシュ及びＬ２キャッシュ１２４に格納されている、そのアドレスのデータを無効化する。
【０２０９】
本実施の形態９に係るシステムバスＩ／Ｆ１２６、割り込みコントローラ１２１、システムタイマー１２２、デバッグ・トレースＩ／Ｆ１２７は、実施の形態１におけるものと基本的に同様である。ただし、本実施の形態９では、割り込みコントローラ１２１及びシステムタイマー１２２は、ＣＰＵコア１０５〜１０８にも割り込みを発生することが可能である。
【０２１０】
図３１は、本実施の形態９に係るＣＰＵシステム３のＣＰＵ６０の構成を示すブロック図である。図３０に示したＣＰＵ５０に対して、ＣＰＵグループＡのＣＰＵコア１０１〜１０４と、ＣＰＵグループＢのＣＰＵコア１０５〜１０８にそれぞれスキャンテスト用回路２０１〜２０４と、スキャンテスト用回路２０５〜２０８を追加し、さらに、ＣＰＵグループＡのＣＰＵ共通回路１４１と、ＣＰＵグループＢのＣＰＵ共通回路１４２にもスキャンテスト用回路２８１、２８２を追加したものである。これらのスキャンテスト用回路２８１、２８２は、個々に診断テストコントローラ２１と接続され、スキャンテストの制御が行われる。すなわち、本実施の形態９に係る診断テストコントローラ２１では、ＣＰＵコア１０５〜１０８及びＣＰＵ共通回路１４１、１４２に対しても、リセット信号、フラグ信号、テストモード切り換え信号、入力テストパターンを出力可能とされている。また、診断テストコントローラ２１のセレクタ２２４も、ＣＰＵコア１０５〜１０８及びＣＰＵ共通回路１４１、１４２からの出力結果データも選択可能とされている。なお、ここでも図３０の場合と同様に、それぞれのＣＰＵコア１０１〜１０８に付随するＬ１キャッシュ（Ｌ，Ｄ）は図示を省略している。
【０２１１】
本実施の形態に係るスキャンテスト用回路２０１〜２０４は、実施の形態１におけるものと同様である。スキャンテスト用回路２０５〜２０８は、スキャンテスト用回路２０１〜２０４と同様である。ただし、スキャンテスト用回路２０５〜２０８のそれぞれの制御対象は、ＣＰＵコア１０５〜１０８のそれぞれとなる。
【０２１２】
また、スキャンテスト用回路２８１、２８２も、スキャンテスト用回路２０１〜２０４と同様に、スキャンデータ伸長回路２１１及びスキャンデータ圧縮回路２１２を有する。ただし、このスキャンデータ伸長回路２１１及びスキャンデータ圧縮回路２１２は、ＣＰＵ共通回路１４１、１４２が有するスキャンチェーンの本数に応じてデータの拡大または縮小を行うことになる。なお、ＣＰＵ全体共通回路１４０の故障診断のためには、その回路を二重化する方法が一例として挙げられる。このとき、二重化した各回路の出力信号（複数本あり）の一致を確認する比較回路を設け、いずれか一つでも出力信号の不一致が検出された場合には、ＣＰＵ全体共通回路１４０の故障を通知する通知信号を出力するようにすればよい。
【０２１３】
図３２は、図３１に示したＣＰＵ６０の診断テストの実行の様子を示す説明図である。複数のＣＰＵコア１０１〜１０８を備え、ＣＰＵグループを複数備えるマルチコア構成のＣＰＵシステム３において、通常動作中に各ＣＰＵグループＡ、ＢのＣＰＵコア１０１〜１０８を順番に選択しながら、周期的に個々のＣＰＵコアに対する故障診断を行う点は、実施の形態１の場合と同じである。しかしながら、この実施の形態９は、所定のタイミングではいずれか１つのＣＰＵグループを順次選択してその中のＣＰＵ共通回路１４１、１４２に対する故障診断も行う点に特徴がある。それぞれのＣＰＵコア１０１〜１０８の故障診断に加えて、実施の形態１では診断テストの対象外としていたＣＰＵ共通回路１４１、１４２の故障診断も、高速なハードウェアとしてのスキャンテストにより実現することができる。
【０２１４】
この図３２に示したそれぞれのＣＰＵコア１０１〜１０８とＣＰＵ共通回路１４１、１４２の診断テスト（スキャンテストによる故障診断）の様子は一例である。ＣＰＵグループＡにおけるＣＰＵ共通回路１４１の診断テストをＣＰＵコア１０１〜１０４とは別のタイミングで実行する場合、そのタイミングではそれぞれのＣＰＵコアの動作にシステムバスと通信できないという制限が生じることに注意が必要である。よって、ＣＰＵ共通回路１４１の診断テスト中には、ＣＰＵコア１０１〜１０４は所定の制限動作を行うようにしてもよい。例えば、ＣＰＵコア１０１〜１０４の処理を停止するようにしてもよい。
【０２１５】
また、図３２に示すように、例えば、ＣＰＵグループＢにおけるＣＰＵ共通回路１４２の診断テストをＣＰＵコア１０５〜１０８のいずれかの診断テストと同じタイミングで実行することも可能である。すなわち、そのタイミングではそれぞれのＣＰＵコア１０５〜１０８がシステムバスと通信できないため、すべてのＣＰＵコア１０５〜１０８をＣＰＵ共通回路１４２と同時に診断テストするようにしても構わない。
【０２１６】
なお、それぞれのＣＰＵグループが備える４つのＣＰＵコアは全く同じ回路であるため、その診断テストのために必要なテストデータは同一となるが、ＣＰＵ共通回路はそれとは異なる回路となるため、その診断テストのために必要なテストデータも異なる。すなわち、そのデータ量や診断テスト時間も異なるものとなる。ＣＰＵグループＢの場合のように、複数のＣＰＵコア１０５〜１０８とＣＰＵ共通回路１４２も同じタイミングで診断テストする場合には、診断テストコントローラ２１の構成と動作はその並列度に合わせたものとしておく必要がある。すなわち、テストデータ入力回路２２２、テスト結果比較回路２２３、及びセレクタ２２４を、ＣＰＵコア１０５〜１０８とＣＰＵ共通回路１４２とで別々に設けるようにする。
【０２１７】
ここで、図３２に示すように、診断テストコントローラ２１は、ＣＰＵ共通回路１４１、１４２それぞれのスキャンテストの実施時間帯（実施期間）が相互に重複しないように所定の順序で周期的にスキャンテストを実施する。診断テストコントローラ２１は、ＣＰＵ共通回路１４１、１４２を同一の診断テスト間隔で周期的にスキャンテストを実施することで、スキャンテストの実施時間帯（実施期間）が相互に重複しにくくなるようにしている。この診断テスト間隔も、例えば、ＦＴＴＩ（例えば、０．１秒）以下の間隔となるように予め任意に定められる。ＣＰＵ共通回路１４１、１４２のそれぞれの診断テスト時間は、相互に重複しないのであれば、必ずしも等間隔（診断テスト間隔×１／２）でずれている必要はない。しかし、好ましくは、ＣＰＵ共通回路１４１、１４２のそれぞれの診断テスト時間を等間隔でずらすようにすることで、診断テストの実施時間帯（実施期間）のタイミング（近接または離間）による性能の偏りを低減することができる。
【０２１８】
また、以上の説明では、実施の形態１に対して、本実施の形態９に係るＣＰＵ６０及びその診断テスト方法を適用した例について説明したが、当然に、実施の形態２〜８、及び実施の形態４の変形例Ａ、Ｂのいずれに対しても適用することが可能である。また、当然に、実施の形態１〜８、及び実施の形態４の変形例Ａ、Ｂの任意の２つ以上を組み合わせた形態に対しても、本実施の形態９に係るＣＰＵ６０及びその診断テスト方法を適用することが可能である。例えば、実施の形態４に対して適用する場合には、ＣＰＵ共通回路１４１の診断テスト開始信号は、それと同一のＣＰＵグループＡに属するＣＰＵ１０１〜１０４が代替して診断テストコントローラ２６に出力するようにすればよい。これについては、ＣＰＵグループＢについても同様である。
【０２１９】
以上に説明した実施の形態９によれば、ＣＰＵ共通回路１４１及びＣＰＵ共通回路１４２のそれぞれのスキャンテストも、スキャンテストの実施時間帯（実施期間）が相互に重複しないように所定の順序で周期的に実施するようにしている。これによれば、これまでに説明した実施例の効果に加えて、ＣＰＵにおける診断テストの対象を広げ、ＣＰＵコア１０１〜１０８だけでなくＣＰＵ共通回路１４１、１４２の故障診断も実現できるという効果が得られる。
【０２２０】
＜他の実施の形態＞
最後に、その他の実施の形態（バリエーション）について、以下、説明する。
【０２２１】
ここまでに示した各実施の形態はいずれも、スキャンテストとして圧縮スキャン方式を適用し、入力本数＞出力本数としていたが、ハードウェアとしてスキャンテストで故障診断する方法としては、様々なバリエーションが考えられる。圧縮スキャン方式を適用する場合に入力本数＝出力本数としても構わない。また、一般的にテストデータの容量が大きくなり、診断テストのための入力データレートを高める必要が生じるものの、圧縮スキャン方式ではなく通常のスキャンテスト（入力本数や出力本数がスキャンチェーン本数と同じ）の形態としてもよい。
【０２２２】
診断テストのテストデータを格納する外付けのＦＬＡＳＨメモリ９としては、Ｓｅｒｉａｌ ＦＬＡＳＨを始めとして様々なタイプのものが候補となる。また、そのＦＬＡＳＨメモリ９に格納するテストデータの格納方法（データ単位のビット幅やアドレス範囲他）も、図９や図１２で説明したものから変えることも可能である。さらに、同等の故障検出率を達成するために必要なパターンの長さが長くなる傾向はあるが、テスト対象の回路で診断時間が十分短くできるのであれば、テストデータを外付けのＦＬＡＳＨメモリ９に格納しておいて使用するのではなく、疑似乱数をベースとしてスキャンテストのパターンを生成する回路を内部に設けて使用する方法としてもよい。
【０２２３】
また、これまでに示した各実施の形態では、診断テストの対象とする回路をマルチコア構成のＣＰＵにおける各ＣＰＵコアとしていたが、同じ考え方で他のマルチコア構成の処理回路も診断テストすることが可能である。例えば、図３、図１４、図１６、図１９、図２６、図３４、又は図３６に示したＣＰＵシステムのブロック図にあるハードウェアアクセラレータ１１の各コア（ＰＥ：Processing Element）を、同様の診断テストの対象としてもよい。
【０２２４】
実施の形態３の説明では、診断テストコントローラ（ＣＰＵコアの診断テストの制御を行う回路）２５を、起動時に診断テストするための回路（疑似乱数をベースとしてスキャンテストのパターンを生成して、スキャンテストを実行する回路）２４１〜２４３も追加で設けることとしたが、両方の回路を同じ方法でテスト対象の回路を診断テストすることとすることも可能である。つまり、同等の診断テストコントローラを２つ設けて、起動時には順番にお互いの診断テストを行って正常であることを確認した上で、本来の動作（テスト対象回路の診断テスト）を開始するようにしてもよい。また、本来の動作を行うときには、２つある診断テストコントローラが二重化された冗長構成（双方の出力信号を常時比較する回路を追加）となるようにしてもよい。あるいは、その２つの診断テストコントローラは、実施の形態９のようにテスト対象が２つのＣＰＵグループに分かれている場合や、ＣＰＵコア１０１〜１０８とＣＰＵ共通回路１４１、１４２という異なる回路に分かれている場合には、それぞれの診断テストを制御する回路として動作するようにしてもよい。
【０２２５】
実施の形態４の説明では、診断テストコントローラ２６は、ＣＰＵコアから診断テスト開始指示信号を受けると、そのテスト制御回路２２９がＣＰＵコアに、テストモード切り換え信号をスキャンテストのモードに設定して出力し、その後、診断テストが完了したタイミングではテストモード切り換え信号を通常のモードに戻して出力し、さらにＣＰＵコアに対してリセット信号を出力することとしていた。しかしながら、これらの処理をプログラマブルな回路（例えば、別に設けたサブＣＰＵ）で制御して、信号出力のタイミング等の自由度を高められる構成としてもよい。
【０２２６】
なお、スキャンテスト（圧縮スキャン方式を含む）の技術は、半導体デバイスの量産テストで広く用いられているものであり、ＣＰＵコアの診断テストのための診断テストコントローラやＣＰＵコアに付けるスキャンテスト回路を、その量産テストのために付加されるテスト回路と上手く共有するとよい。
【０２２７】
ここで、上述の各実施の形態から抽出される一実施の形態について、図３３を参照して説明する。図３３は、上述の各実施の形態から抽出される一実施の形態に係る半導体装置９０を示す図である。
【０２２８】
半導体装置９０は、複数のＣＰＵコア９１〜９４と、診断テスト回路９５を有する。半導体装置９０は、ＣＰＵシステム２、３、４、５、６、７、５Ａ、５Ｂに対応する。複数のＣＰＵコア９１〜９４のそれぞれは、スキャンチェーンを有する。ＣＰＵコア９１〜９４は、ＣＰＵコア１０１、１０２、１０３、１０４、１０５、１０６、１０７、１０８、１０９に対応する。診断テスト回路９５は、スキャンチェーンを用いてＣＰＵコア９１〜９４のスキャンテストを実施する。診断テスト回路９５は、診断テストコントローラ２１、２３、２５、２６、２８に対応する。
【０２２９】
ここで、診断テスト回路９５は、複数のＣＰＵコア９１〜９４のそれぞれのスキャンテストを、スキャンテストの実施時間帯（実施期間）が相互に重複しないように所定の順序で周期的に実施する。これによれば、演算性能の低下を抑制することができる。
【０２３０】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【符号の説明】
【０２３１】
１  車載ＥＣＵ
２、３、４、５、６、７、５Ａ、５Ｂ  ＣＰＵシステム（メインマイコン）
８  ＤＤＲメモリ
９  ＦＬＡＳＨメモリ
１０、２０、３０、４０、５０、６０  ＣＰＵ（マルチコア）
１１  ハードウェアアクセラレータ（マルチコア）
１２  ＤＭＡＣ
１３  ＲＡＭ
１４  その他周辺回路
１５  センサＩ／Ｆ
１６  アクチュエータＩ／Ｆ
１７  ＤＤＲ Ｉ／Ｆ
１８  その他Ｉ／Ｆ
２１、２３、２５、２６、２８  診断テストコントローラ
２２  エラー出力・制御回路
２４  起動時テスト回路
２７  状態退避メモリ
４１  マスクＲＯＭ
４２  リセットコントローラ
４３  診断テストトリガー回路
９０  半導体装置
９１、９２、９３、９４  ＣＰＵコア
９５  診断テスト回路
１０１、１０２、１０３、１０４、１０５、１０６、１０７、１０８、１０９  ＣＰＵコア
１１１、１１２、１１３、１１４  Ｌ１キャッシュ
１２０、１４１、１４２  ＣＰＵ共通回路
１２１  割り込みコントローラ
１２２  システムタイマー
１２３、１４３、１４４  キャッシュコヒーレンシーコントローラ
１２４、１２８  Ｌ２キャッシュ
１２５、１２９  Ｌ２キャッシュコントローラ
１２６  システムバスＩ／Ｆ
１２７  デバッグ・トレースＩ／Ｆ
１４０  ＣＰＵ全体共通回路
２０１、２０２、２０３、２０４、２０５、２０６、２０７、２０８、２５１、２５２、２５３、２５４、２８１、２８２  スキャンテスト用回路
２１１  スキャンデータ伸長回路
２１２  スキャンデータ圧縮回路
２１３、２１４  テスト用ラッパ
２１５  選択回路
２１６  分配回路
２２１、２２９  テスト制御回路
２２２、２２６、２３１  テストデータ入力回路
２２３、２２７  テスト結果比較回路
２２４  セレクタ
２２５  周期カウンタ
２２８  ＬＦＳＲ
２３０  ＦＩＦＯメモリ
２４１、２４２、２４３  テスト実行回路
２５９  代替制御回路
２６０  状態退避制御回路
２７１、２７２、２７３、２７４、２７５、２７６、２７７、２７８  セレクタ
【図１】
2015206785.tif 000003
【図２】
2015206785.tif 000004
【図３】
2015206785.tif 000005
【図４】
2015206785.tif 000006
【図５】
2015206785.tif 000007
【図６】
2015206785.tif 000008
【図７】
2015206785.tif 000009
【図８】
2015206785.tif 000010
【図９】
2015206785.tif 000011
【図１０】
2015206785.tif 000012
【図１１】
2015206785.tif 000013
【図１２】
2015206785.tif 000014
【図１３】
2015206785.tif 000015
【図１４】
2015206785.tif 000016
【図１５】
2015206785.tif 000017
【図１６】
2015206785.tif 000018
【図１７】
2015206785.tif 000019
【図１８】
2015206785.tif 000020
【図１９】
2015206785.tif 000021
【図２０】
2015206785.tif 000022
【図２１】
2015206785.tif 000023
【図２２】
2015206785.tif 000024
【図２３】
2015206785.tif 000025
【図２４】
2015206785.tif 000026
【図２５】
2015206785.tif 000027
【図２６】
2015206785.tif 000028
【図２７】
2015206785.tif 000029
【図２８】
2015206785.tif 000030
【図２９】
2015206785.tif 000031
【図３０】
2015206785.tif 000032
【図３１】
2015206785.tif 000033
【図３２】
2015206785.tif 000034
【図３３】
2015206785.tif 000035
【図３４】
2015206785.tif 000036
【図３５】
2015206785.tif 000037
【図３６】
2015206785.tif 000038
【手続補正書】
【提出日】平成27年3月6日(2015.3.6)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
スキャンチェーンを有する複数のＣＰＵコアと、
前記スキャンチェーンを用いて前記複数のＣＰＵコアのスキャンテストを実施する診断テスト回路と、を備え、
前記診断テスト回路は、前記複数のＣＰＵコアのそれぞれのスキャンテストを、前記スキャンテストの実施時間帯が相互に重複しないように所定の順序で周期的に実施する、
半導体装置。
【請求項２】
前記半導体装置は、さらに、前記複数のＣＰＵコアのそれぞれに割り込みを発生する割り込み回路を備え、
前記複数のＣＰＵコアのそれぞれは、前記割り込みに応じて、前記スキャンテストの開始を指示する指示信号を前記診断テスト回路に出力し、
前記診断テスト回路は、前記複数のＣＰＵコアのそれぞれからの指示信号の出力に応じて、前記複数のＣＰＵコアのそれぞれのスキャンテストを実施する、
請求項１に記載の半導体装置。
【請求項３】
前記複数のＣＰＵコアのそれぞれは、オペレーティングシステムによってスケジューリングされたプログラムを実行し、
前記複数のＣＰＵコアのそれぞれは、前記割り込みに応じて、自ＣＰＵコアが実行しているプログラムを実行待ち状態に移行させるとともに、前記オペレーティングシステムが自ＣＰＵコアに任意のプログラムをスケジューリングしないように設定する、
請求項２に記載の半導体装置。
【請求項４】
前記割り込み回路は、前記割り込みとして、所定の割り込み周期でタイマー割り込みを発生するシステムタイマーであり、
前記半導体装置は、さらに、前記複数のＣＰＵコアのそれぞれが前記指示信号を前記診断テスト回路に出力するときに、前記複数のＣＰＵコアのそれぞれにより、その時刻を示す時刻情報が格納される時刻情報記憶部を備え、
前記複数のＣＰＵコアのそれぞれは、前記タイマー割り込みに応じた割り込み処理で前記システムタイマーから取得した時刻と、前記時刻情報記憶部に格納された時刻情報が示す時刻との差が、前記スキャンテストの実行周期に達している場合に、前記指示信号を前記診断テスト回路に出力する、
請求項２に記載の半導体装置。
【請求項５】
前記半導体装置は、さらに、前記複数のＣＰＵコアのそれぞれが前記指示信号を前記診断テスト回路に出力するときに、前記複数のＣＰＵコアのそれぞれにより、その旨を記録する記録情報が格納される記録情報記憶部を備え、
前記複数のＣＰＵコアのそれぞれは、自ＣＰＵコアのスキャンテストの実行後に、前記記録情報記憶部に記録情報が格納されているときには、当該スキャンテストの実行結果を確認し、異常が検出された場合には、自ＣＰＵコアに任意のプログラムをスケジューリングするように戻す設定を抑止する、
請求項３に記載の半導体装置。
【請求項６】
前記割り込み回路は、前記割り込みとして、所定の割り込み周期でタイマー割り込みを発生するシステムタイマーであり、
前記半導体装置は、さらに、前記複数のＣＰＵコアのそれぞれが前記指示信号を前記診断テスト回路に出力するときに、前記複数のＣＰＵコアのそれぞれにより、その時刻を示す時刻情報が格納される時刻情報記憶部を備え、
前記複数のＣＰＵコアのそれぞれは、自ＣＰＵコアのスキャンテストの実行後に前記システムタイマーから取得した時刻と、前記時刻情報記憶部に格納された時刻情報が示す時刻との差が、所定の閾値を超えている場合には、自ＣＰＵコアに任意のプログラムをスケジューリングするように戻す設定を抑止する、
請求項３に記載の半導体装置。
【請求項７】
前記診断テスト回路は、前記スキャンチェーンを介して診断中のＣＰＵコアに複数の入力テストデータを順次入力し、
前記診断中のＣＰＵコアは、前記入力された複数の入力テストデータそれぞれに基づいて生成した複数の出力結果データを、前記スキャンチェーンを介して順次前記診断テスト回路に出力し、
前記診断テスト回路は、前記複数の入力テストデータと、前記複数の出力結果データの累積演算結果の期待値となる第１の累積演算結果とが格納されたテストデータ記憶部から、前記第１の累積演算結果を読み出し、読み出した第１の累積演算結果と、前記診断中のＣＰＵコアから順次出力された複数の出力結果データを累積演算した第２の累積演算結果とを比較することで前記診断中のＣＰＵコアを診断する、
請求項１に記載の半導体装置。
【請求項８】
前記半導体装置は、さらに、
前記診断テスト回路とシステムバスを介して接続され、前記スキャンテストにおいて前記スキャンチェーンに順次入力される複数の入力テストデータが格納されるテストデータ記憶部から、前記複数の入力テストデータを取得して、前記システムバスを介して前記診断テスト回路に順次ＤＭＡ転送するＤＭＡコントローラを備え、
前記診断テスト回路は、前記複数の入力テストデータの一部を一時的に格納するＦＩＦＯメモリを有し、前記ＦＩＦＯメモリに格納された入力テストデータを取得して前記スキャンチェーンを介して診断中のＣＰＵコアに入力する、
請求項１に記載の半導体装置。
【請求項９】
前記半導体装置は、さらに、前記診断テスト回路が前記複数のＣＰＵコアのスキャンテストを開始する前に、前記診断テスト回路のテストを実施する第２の診断テスト回路を備える、
請求項１に記載の半導体装置。
【請求項１０】
前記診断テスト回路は、前記スキャンテストを実施するときに、前記スキャンチェーンに入力される入力テストデータと、前記入力テストデータの誤り検出符号が格納されたテストデータ記憶部から、前記入力テストデータを取得して前記スキャンチェーンに入力し、
前記半導体装置は、さらに、前記診断テスト回路が前記複数のＣＰＵコアのスキャンテストを開始する前に、前記テストデータ記憶部に格納された入力テストデータから誤り検出符号を算出し、算出した誤り検出符号と、前記テストデータ記憶部に格納された誤り検出符号とを比較することで前記テストデータ記憶部を診断する記憶部診断回路と、を備えた、
請求項１に記載の半導体装置。
【請求項１１】
前記診断テスト回路は、前記スキャンチェーンを介して診断中のＣＰＵコアに複数の入力テストデータを順次入力し、
前記診断中のＣＰＵコアは、前記入力された複数の入力テストデータそれぞれに基づいて生成した複数の出力結果データを、前記複数の入力テストデータの入力から所定のサイクル分の差で前記診断テスト回路に出力し、
前記診断テスト回路は、前記複数の入力テストデータと、前記複数の出力結果データの期待値となる複数の期待値データとが、前記入力テストデータと前記所定のサイクル分前の入力テストデータに基づいて生成される期待値データとが同時に読み出されるように格納されるテストデータ記憶部から、前記期待値データを読み出し、前記入力テストデータに応じた出力結果データと、オンザフライで順次比較していくことで前記診断中のＣＰＵコアを診断する、
請求項１に記載の半導体装置。
【請求項１２】
前記診断テスト回路は、さらに、
状態退避記憶回路と、
前記スキャンテストが開始したときから順次出力されるデータを、前記スキャンチェーンの長さ分だけ取得して、前記状態退避記憶回路に格納し、前記スキャンテストを終了するときに前記状態退避記憶回路に格納したデータを前記スキャンチェーンに入力する状態退避制御回路と、を備えた、
請求項１に記載の半導体装置。
【請求項１３】
前記半導体装置は、さらに、前記スキャンテストにおいて前記スキャンチェーンに順次入力する複数の入力テストデータが格納されるテストデータ記憶部を備え、
前記診断テスト回路は、前記スキャンテストを実施する毎に、前記複数の入力テストデータが所定の数に分割された分割テストデータを順番に入力し、
前記複数のＣＰＵコアのそれぞれは、前記スキャンテストを開始するときにプログラムの実行を中断し、前記スキャンテストが終了するときに前記プログラムの実行を再開する、
請求項１に記載の半導体装置。
【請求項１４】
前記半導体装置は、さらに、
前記スキャンチェーンを有する代替用ＣＰＵコアと、
前記スキャンテストが開始したときから順次出力されるデータを、前記スキャンチェーンの長さ分だけ取得して、前記代替用ＣＰＵコアのスキャンチェーンに格納する代替コア制御回路と、を備え、
前記代替用ＣＰＵコアは、当該代替用ＣＰＵコアのスキャンチェーンに格納されたデータに基づいて、前記スキャンテストの実施されるＣＰＵコアの処理を代替して実行する、
請求項１に記載の半導体装置。
【請求項１５】
前記複数のＣＰＵコアは、複数の第１のＣＰＵコアであり、
前記半導体装置は、さらに、
スキャンチェーンを有する複数の第２のＣＰＵコアと、
前記複数の第１のＣＰＵコアと、スキャンチェーンを有し前記複数の第１のＣＰＵコアから共通利用される第１のＣＰＵ共通回路と、を含む第１のＣＰＵと、
前記複数の第２のＣＰＵコアと、スキャンチェーンを有し前記複数の第２のＣＰＵコアから共通利用される第２のＣＰＵ共通回路と、を含む第２のＣＰＵと、を備え、
前記診断テスト回路は、さらに、前記スキャンチェーンを用いて前記複数の第２のＣＰＵコアと、第１のＣＰＵ共通回路と、前記第２のＣＰＵ共通回路のスキャンテストを実施し、
前記診断テスト回路は、前記第１のＣＰＵ共通回路及び前記第２のＣＰＵ共通回路のそれぞれのスキャンテストを、前記スキャンテストの実施時間帯が相互に重複しないように所定の順序で周期的に実施する、
請求項１に記載の半導体装置。
【請求項１６】
前記診断テスト回路は、前記複数のＣＰＵコアのそれぞれのスキャンテストの実施後に、当該複数のＣＰＵコアのそれぞれをリセットし、
前記半導体装置は、さらに、
前記割り込みに応じて実行される割り込み処理における命令が格納される記憶部と、
前記リセットに応じて前記複数のＣＰＵコアのそれぞれが命令を読み出すアドレスを、リセットベクターから、前記割り込み処理において前記スキャンテストによって中断された位置における命令のアドレスに変更するリセットコントローラと、を備える、
請求項２に記載の半導体装置。
【請求項１７】
前記割り込み回路は、前記複数のＣＰＵコアのそれぞれに対して、当該複数のＣＰＵコアのそれぞれにおける前記スキャンテストの実施タイミングで前記割り込みを発生させる診断テストトリガー回路である、
請求項２に記載の半導体装置。
【請求項１８】
前記複数のＣＰＵコアは、自動車に搭載されたセンサユニットの検知結果に応じて、前記自動車に搭載されたアクチュエータユニットを制御する処理を実行する、
請求項１に記載の半導体装置。
【請求項１９】
第１のＣＰＵコア及び第２のＣＰＵコアを含む複数のＣＰＵコアの診断テスト方法であって、
前記第１のＣＰＵコアが有するスキャンチェーンを用いた前記第１のＣＰＵコアのスキャンテストの実行を開始し、
前記第１のＣＰＵコアのスキャンテストの実行終了後に、前記第２のＣＰＵコアが有するスキャンチェーンを用いた前記第２のＣＰＵコアのスキャンテストの実行を開始し、
前記第２のＣＰＵコアのスキャンテストの実行終了後に、前記第１のＣＰＵコアが有するスキャンチェーンを用いた前記第１のＣＰＵコアのスキャンテストの実行を開始する、
診断テスト方法。
【請求項２０】
スキャンチェーンを有する複数のＣＰＵコアの故障診断を行う診断テスト回路であって、
前記スキャンチェーンを用いて、前記複数のＣＰＵコアのそれぞれのスキャンテストを、前記スキャンテストの実施時間帯が相互に重複しないように所定の順序で周期的に実施する、
診断テスト回路。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００２０
【補正方法】変更
【補正の内容】
【００２０】
ＤＤＲメモリ８には、各種データが格納される。このデータは、例えば、上述したセンサデータ及び制御データ等である。すなわち、上述したように、ＣＰＵ１０は、ＤＭＡＣ１２の転送機能を利用することで、ＤＤＲメモリ８を介して、センサユニットからセンサデータを取得し、アクチュエータユニットに制御データを送信する。ＤＤＲメモリ８には、例えば、ＣＰＵ１０及びハードウェアアクセラレータ１１の演算処理に関するデータが格納される。