(57)【特許請求の範囲】
【請求項１】
第１及び第２のスキャンテストを実施する半導体装置であって、
スキャンチェーンを含み、前記第１のスキャンテストを指示する機能を有する被テスト回路と、
前記スキャンチェーンを用いて前記被テスト回路の前記第１及び第２のスキャンテストをそれぞれ実施する第１のテスト制御装置及び第２のテスト制御装置と、
第１及び第２の期待値を用いて、前記第１のスキャンテスト及び前記第２のスキャンテストのそれぞれによって前記被テスト回路から取得した第１及び第２のテスト結果を判定する結果判定装置と、を備え、
前記第２のテスト制御装置は、前記半導体装置の起動時に、前記被テスト回路に対し前記第２のスキャンテストを実施し、
前記結果判定装置は、前記第２のスキャンテストの実施によって取得した前記第２のテスト結果と前記第２の期待値とを比較し、一致する場合には正常であると判定し、一致しない場合にはエラーであると判定し、
前記被テスト回路は、前記第２のスキャンテストが実施され、前記半導体装置の起動完了後に、前記第１のテスト制御装置に前記第１のスキャンテストの実施を指示し、
前記第１のテスト制御装置は、前記被テスト回路からの指示に応じて、前記被テスト回路に対し前記第１のスキャンテストを実施し、
前記結果判定装置は、前記第１のスキャンテストの実施によって取得した前記第１のテスト結果と前記第１の期待値とを比較し、一致する場合には正常であると判定し、一致しない場合にはエラーであると判定する、
半導体装置。
【請求項２】
前記第２のテスト制御装置は、前記半導体装置の起動時に、テストパタンを生成して前記スキャンチェーンに入力することで、前記第２のスキャンテストを実施するものであり、
前記第１のテスト制御装置は、前記第２のスキャンテストが実施され、前記半導体装置の起動完了後に、前記半導体装置に接続された外部記憶回路からテストパタンを取得し、前記スキャンチェーンに入力することで、前記第１のスキャンテストを実施するものである、
請求項１に記載の半導体装置。
【請求項３】
前記半導体装置は、前記第１及び第２のスキャンテストの実施時間を計測し、計測した実施時間が所定の閾値を超えた場合に、エラーを通知するタイマーをさらに備え、
前記第１のテスト制御装置及び前記第２のテスト制御装置のそれぞれは、前記被テスト回路の前記第１及び第２のスキャンテストを開始するときに、前記実施時間の計測開始を前記タイマーに指示し、前記被テスト回路の前記第１及び第２のスキャンテストを終了したときに、前記実施時間の計測終了を前記タイマーに指示する、
請求項１に記載の半導体装置。
【請求項４】
前記半導体装置は、
前記第１のスキャンテストによって前記被テスト回路から取得したテスト結果の期待値である前記第１の期待値が格納される第１の期待値記憶部と、
前記第２のスキャンテストによって前記被テスト回路から取得したテスト結果の期待値である前記第２の期待値が格納される第２の期待値記憶部と、
前記結果判定装置の判定結果に応じて、前記半導体装置を制御するシステム制御回路と、を更に備え、
前記システム制御回路は、前記第２のスキャンテストを実施する前に、前記結果判定装置に異なる値を比較させて、一致すると判定された場合に、前記半導体装置の動作を停止させる、
請求項１に記載の半導体装置。
【請求項５】
前記半導体装置は、
複数の前記被テスト回路と、
前記複数の被テスト回路のそれぞれの前記第２のスキャンテストを実行する複数の前記第２のテスト制御装置と、を備え、
前記複数の第２のテスト制御装置のそれぞれは、前記半導体装置の起動時に、前記第２のスキャンテストを実施するものであり、
前記第１のテスト制御装置は、前記複数の被テスト回路のそれぞれの前記第２のスキャンテストが実施され、前記半導体装置の起動完了後に、前記第１のスキャンテストを実施するものであり、
前記半導体装置は、前記複数の被テスト回路のそれぞれについて、前記半導体装置の起動時における、前記第２のスキャンテストの対象であるか否かを示すテスト対象値が格納されるテスト対象設定回路をさらに備え、
前記複数の第２のテスト制御装置のそれぞれは、前記テスト対象値に従って、前記第２のスキャンテストを実施する、
請求項１に記載の半導体装置。
【請求項６】
前記複数の被テスト回路のそれぞれは、前記第２のスキャンテストが実施された後に起動されて、前記第１のスキャンテストの指示を含む処理を実行し、
前記テスト対象値が前記第２のスキャンテストの対象であると示す被テスト回路は、前記処理において、前記半導体装置の起動後に、前記テスト対象値が前記第２のスキャンテストの対象でないと示す被テスト回路のうち、所定の被テスト回路に対応する第２のテスト制御装置に対して、前記第２のスキャンテストの実施を指示する、
請求項５に記載の半導体装置。
【請求項７】
前記第２のテスト制御装置は、前記被テスト回路とともに前記第１のテスト制御装置のスキャンテストも実施する、
請求項１に記載の半導体装置。
【請求項８】
前記第１のテスト制御装置及び前記第２のテスト制御装置は、同一のテスト制御装置であり、
前記半導体装置は、
前記テスト制御装置が前記半導体装置に接続された外部記憶回路から前記第１のスキャンテストで前記スキャンチェーンに入力するテストパタンを取得する際に使用されるシステムバスと、
前記第２のスキャンテストで前記スキャンチェーンに入力するテストパタンが格納された内部記憶回路と、をさらに備え、
前記テスト制御装置は、
前記システムバスを初期化しているときに、前記内部記憶回路から前記テストパタンを取得し、取得したテストパタンを前記スキャンチェーンに入力して前記第２のスキャンテストを実施し、
前記システムバスの初期化後に、前記システムバスを介して前記外部記憶回路から前記テストパタンを取得し、取得したテストパタンを前記スキャンチェーンに入力して前記第１のスキャンテストを実施する、
請求項１に記載の半導体装置。
【請求項９】
前記第１のテスト制御装置及び前記第２のテスト制御装置は、同一のテスト制御装置であり、
前記半導体装置は、
前記テスト制御装置が前記半導体装置に接続された外部記憶回路から前記第１のスキャンテスト及び前記第２のスキャンテストで前記スキャンチェーンに入力するテストパタンを取得する際に使用されるシステムバスと、
前記テスト制御装置が前記外部記憶回路から前記システムバスを介さずに前記テストパタンを取得する際に使用される外部インターフェース回路と、をさらに備え、
前記テスト制御装置は、
前記システムバスを初期化しているときに、前記外部インターフェース回路を介して前記外部記憶回路から前記テストパタンを取得し、取得したテストパタンを前記スキャンチェーンに入力して前記第２のスキャンテストを実施し、
前記システムバスの初期化後に、前記システムバスを介して前記外部記憶回路から前記テストパタンを取得し、取得したテストパタンを前記スキャンチェーンに入力して前記第１のスキャンテストを実施する、
請求項１に記載の半導体装置。
【請求項１０】
前記半導体装置は、複数の前記被テスト回路を備え、
前記第１のテスト制御装置及び前記第２のテスト制御装置は、前記複数の被テスト回路のそれぞれの前記第１及び第２のスキャンテストを所定の順序で実施する、
請求項１に記載の半導体装置。
【請求項１１】
前記半導体装置は、
複数の前記被テスト回路と、
前記複数の被テスト回路のそれぞれの前記第２のスキャンテストを実行する複数の前記第２のテスト制御装置と、を備え、
前記複数の第２のテスト制御装置のそれぞれは、前記半導体装置の起動時に、前記第２のスキャンテストを実施するものであり、
前記第１のテスト制御装置は、前記複数の被テスト回路のそれぞれの前記第２のスキャンテストが実施され、前記半導体装置の起動完了後に、前記第１のスキャンテストを実施するものであり、
前記複数の第２のテスト制御装置のそれぞれは、相互に並行して前記第２のスキャンテストのそれぞれの実施する、
請求項１に記載の半導体装置。
【請求項１２】
前記結果判定装置は、
前記第１のテスト結果と前記第１の期待値とを比較することによって、前記被テスト回路の前記半導体装置の起動完了後の動作の故障を検出可能とし、
前記第２のテスト結果と前記第２の期待値とを比較することによって、前記第１のテスト制御装置に前記第１のスキャンテストを指示する前記被テスト回路の機能の故障を検出可能とする、
請求項１に記載の半導体装置。
【請求項１３】
前記被テスト回路は、前記第１のテスト制御装置に前記第１のスキャンテストの実施の指示をした後に、停止状態に遷移する、
請求項１に記載の半導体装置。
【請求項１４】
前記半導体装置は、
システムバスと、
前記被テスト回路と前記システムバスとの間に接続された遮断回路と、を更に備え、
前記第２のテスト制御装置は、前記第２のスキャンテストを実施中に、前記被テスト回路と前記システムバスとの間で伝送される信号を遮断するように前記遮断回路を制御する、
請求項１に記載の半導体装置。
【請求項１５】
スキャンチェーンを含み、第１のスキャンテストを指示する機能を有する被テスト回路と、
前記スキャンチェーンを用いて前記被テスト回路の前記第１のスキャンテスト及び第２のスキャンテストをそれぞれ実施する第１のテスト制御装置及び第２のテスト制御装置と、
第１及び第２の期待値を用いて、前記第１のスキャンテスト及び前記第２のスキャンテストのそれぞれによって前記被テスト回路から取得した第１及び第２のテスト結果を判定する結果判定装置と、を備えた半導体装置の診断テスト方法であって、
前記第２のテスト制御装置が、前記半導体装置の起動時に、前記被テスト回路に対し前記第２のスキャンテストを実施し、
前記結果判定装置が、前記第２のスキャンテストの実施によって取得した前記第２のテスト結果と前記第２の期待値とを比較し、一致する場合には正常であると判定し、一致しない場合にはエラーであると判定し、
前記被テスト回路が、前記第２のスキャンテストが実施され、前記半導体装置の起動完了後に、前記第１のテスト制御装置に前記第１のスキャンテストの実施を指示し、
前記第１のテスト制御装置が、前記被テスト回路からの指示に応じて、前記被テスト回路に対し前記第１のスキャンテストを実施し、
前記結果判定装置が、前記第１のスキャンテストの実施によって取得した前記第１のテスト結果と前記第１の期待値とを比較し、一致する場合には正常であると判定し、一致しない場合にはエラーであると判定する、
半導体装置の診断テスト方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体装置及び診断テスト方法に関し、特に、被テスト回路のスキャンテストを実施する技術に関する。
【背景技術】
【０００２】
近年、自動車の電気・電子化が進み、ウインドウ又はライト等のボディ制御のみならず、ブレーキ又はステアリング等のシャシー制御、及び、衝突回避といった先進運転支援システムのように、直接、搭乗者及び通行者の安全に影響する機構にも半導体装置が使用されるようになってきている。このような半導体装置には、その機能に対して高い安全性が要求されている。自動車向けの機能安全規格であるＩＳＯ２６２６２では、その用途及び使用される社会的環境に応じて安全性を向上させる対策を講じる必要性が述べられている。【０００３】
例えば、単一の故障による障害であるシングルポイントフォールト（以下、ＳＰＦ）や、複数の故障が同時に発生することによる障害であるレイテントフォールト（以下、ＬＦ）を検出することのできる安全機構を、半導体装置に実装することがその対策の一つとして認知されている。言い換えると、ＳＰＦ及びＬＦの両方を検出可能とすることで、より信頼性の向上した半導体装置が要求されている。【０００４】
特許文献１には、２つのプロセッサにより同一の演算処理を行い、その演算結果を比較器によって比較して演算結果が一致するか不一致となるかを判定することで、プロセッサが正常であるか否かを診断する制御装置が開示されている。また、この制御装置は、比較器を、ＢＩＳＴ（Ｂｕｉｌｔ−Ｉｎ−Ｓｅｌｆ−Ｔｅｓｔ）によって診断することで、さらに信頼性を向上させている。しかしながら、この制御装置は、後述するように、複数の被テスト対象の回路を必要とすることなく、ＳＰＦ及びＬＦの両方を検出可能とした技術を開示したものではない。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−２６７９９９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上述したように、複数の被テスト対象の回路を必要とすることなく、ＳＰＦ及びＬＦの両方を検出可能とする、より信頼性の向上した半導体装置が無いという問題がある。【０００７】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００８】
一実施の形態によれば、半導体装置は、第２のテスト制御装置が被テスト回路の第２のスキャンテストを実施した後に、被テスト回路が第１のテスト制御装置に第１のスキャンテストの実施を指示するようにしたものである。
【発明の効果】
【０００９】
前記一実施の形態によれば、より信頼性を向上した半導体装置を提供することができる。
【図面の簡単な説明】
【００１０】
【図１】実施の形態に係る半導体装置の概略構成を示すブロック図である。
【図２】実施の形態１に係る半導体装置の構成を示すブロック図である。
【図３】実施の形態１に係る半導体装置の動作を示すブロック図である。
【図４】実施の形態１の変形例に係る半導体装置の構成を示すブロック図である。
【図５】実施の形態２に係る半導体装置の構成を示すブロック図である。
【図６】実施の形態３に係る半導体装置の構成を示すブロック図である。
【図７】実施の形態３に係る半導体装置の動作を示すブロック図である。
【図８】実施の形態４に係る半導体装置の構成を示すブロック図である。
【図９】実施の形態４に係る半導体装置の動作を示すブロック図である。
【図１０】実施の形態５に係る半導体装置の構成を示すブロック図である。
【図１１】実施の形態６に係る半導体装置の構成を示すブロック図である。
【図１２】実施の形態７に係る半導体装置の構成を示すブロック図である。
【図１３】実施の形態７に係る半導体装置の前半の動作を示すブロック図である。
【図１４】実施の形態７に係る半導体装置の後半の動作を示すブロック図である。
【図１５】実施の形態８に係る半導体装置の構成を示すブロック図である。
【図１６】実施の形態８に係る半導体装置の前半の動作を示すブロック図である。
【図１７】実施の形態８に係る半導体装置の後半の動作を示すブロック図である。
【発明を実施するための形態】
【００１１】
以下、図面を参照しながら、好適な実施の形態について説明する。以下の実施の形態に示す具体的な数値などは、実施の形態の理解を容易とするための例示にすぎず、特に断る場合を除き、それに限定されるものではない。また、以下の記載及び図面では、説明の明確化のため、当業者にとって自明な事項などについては、適宜、省略及び簡略化がなされている。
【００１２】
＜実施の形態の概略＞
図１を参照して、後述の実施の形態に係る半導体装置の概略構成について説明する。図１は、後述の実施の形態に係る半導体装置の概略となる半導体装置を示すブロック図である。
【００１３】
半導体装置（１）は、被テスト回路（２）と、第１のテスト制御装置（３）と、第２のテスト制御装置（４）と、共通結果判定装置（５）とを有する。
【００１４】
被テスト回路（２）は、スキャンチェーンを有する。第１のテスト制御装置（３）及び第２のテスト制御装置（４）のそれぞれは、被テスト回路（２）のスキャンチェーンを用いて、被テスト回路（２）のスキャンテストを実施する。共通結果判定装置（５）は、第１のテスト制御装置（３）及び第２のテスト制御装置（４）のそれぞれによって実施されたスキャンテストによって得られた被テスト回路（２）のテスト結果を判定する。
【００１５】
第２のテスト制御装置（４）は、被テスト回路（２）のスキャンチェーンにテストパタンをスキャンインし、被テスト回路（２）をテストパタンで動作させ、被テスト回路（２）のスキャンチェーンからテスト結果をスキャンアウトする。第２のテスト制御装置（４）は、テスト結果を共通結果判定装置（５）に出力する。共通結果判定装置（５）は、第２のテスト制御装置（４）から出力されたテスト結果に基づいて、被テスト回路（２）に故障が発生しているか否かを判定する。
【００１６】
第２のテスト制御装置（４）は、被テスト回路（２）のスキャンテストを実施する。被テスト回路（２）が、第２のテスト制御装置（４）が被テスト回路（２）のスキャンテストを実施した後に、第１のテスト制御装置（３）にスキャンテストの実施を指示する。第１のテスト制御装置（３）が、被テスト回路（２）からのスキャンテストの指示に応じて、被テスト回路（２）のスキャンテストを実施する。
【００１７】
これによれば、第１のテスト制御装置（３）によるスキャンテストによって、被テスト回路（２）の通常の機能の故障（すなわち、ＳＰＦ）を検出することができる。さらに、第２のテスト制御装置（４）によるスキャンテストによって、第１のテスト制御装置（３）によるスキャンテストを起動する機能の故障（すなわち、ＬＦ）を検出することができる。よって、ＳＰＦ及びＬＦの両方を検出して、半導体装置（１）の信頼性をより向上させることができる。
【００１８】
＜実施の形態１＞
［全体構成］
続いて、実施の形態１について説明する。図２を参照して、実施の形態１に係る半導体装置（１Ａ）の構成について説明する。図２は、実施の形態１に係る半導体装置（１Ａ）の構成を示すブロック図である。
【００１９】
図２に示すように、半導体装置（１Ａ）は、その機能を実現する要素として、ＣＰＵ（１０）と、内蔵メモリ（１１）と、外部Ｉ／Ｆ（インターフェース）（１２）と、システムバス（１３）と、システム制御回路（１５）を有する。
【００２０】
ＣＰＵ（１０）と内蔵メモリ（１１）と外部Ｉ／Ｆ（１２）は、システムバス（１３）を介して相互に接続されている。よって、ＣＰＵ（１０）と内蔵メモリ（１１）と外部Ｉ／Ｆ（１２）の間で相互に必要なデータが転送される。
【００２１】
ＣＰＵ（１０）は、半導体装置（１Ａ）を動作させるアプリケーションプログラムを実行する。したがって、このアプリケーションプログラムは、半導体装置（１Ａ）における機能を実現する各種処理を、ＣＰＵ（１０）に実行させるための複数の命令が含まれている。ＣＰＵ（１０）は、このアプリケーションプログラムを実行することで、半導体装置（１Ａ）を統括的に制御する演算回路である。
【００２２】
ここで、本実施の形態１においては、ＣＰＵ（１０）が被テスト回路（テスト対象の回路）であるものとして説明する。ＣＰＵ（１０）は、複数のスキャンチェーンを有している。ＣＰＵ（１０）は、この複数のスキャンチェーンを利用してスキャンテストによる診断が可能である。
【００２３】
内蔵メモリ（１１）は、上述した各種処理をＣＰＵ（１０）が実行するために使用するデータが格納される記憶回路である。よって、この各種データには、例えば、上述したアプリケーションプログラムが含まれる。ＣＰＵ（１０）は、内蔵メモリ（１１）に格納されたデータを読み出し、読み出したデータに基づいて処理を実行する。また、ＣＰＵ（１０）は、その処理の実行に応じて生成したデータを内蔵メモリ（１１）に書き込む。内蔵メモリ（１１）は、例えばＲＡＭ（Random Access Memory）等の揮発性のメモリである。
【００２４】
外部Ｉ／Ｆ（１２）は、半導体装置（１Ａ）の外部に配置される外部メモリ（１４）とも接続されている。外部Ｉ／Ｆ（１２）は、外部メモリ１４と、システムバス（１３）に接続された回路（ＣＰＵ（１０）等）との間でデータの送受信を行う回路である。したがって、ＣＰＵ（１０）は、システムバス（１３）及び外部Ｉ／Ｆ（１２）を介して、外部メモリ（１４）に格納されたデータの読み出し、及び、外部メモリ（１４）へのデータの書き込みを行う。
【００２５】
外部メモリ（１４）は、任意のデータが格納される記憶回路である。外部メモリ（１４）にも、上述した各種処理をＣＰＵ（１０）が実行するために使用するデータが格納されるようにしてもよい。例えば、外部メモリ（１４）は、上述したアプリケーションプログラムが予め格納されていてもよい。そして、ＣＰＵ（１０）は、外部メモリ（１４）に格納されたアプリケーションプログラムを内蔵メモリ（１１）にロードしてから実行するようにしてもよい。すなわち、ＣＰＵ（１０）は、外部メモリ（１４）に格納されたデータを読み出し、読み出したデータに基づいて処理を実行してもよい。また、ＣＰＵ（１０）は、その処理の実行に応じて生成したデータを外部メモリ（１４）に書き込んでもよい。外部メモリ（１４）は、例えばＲＯＭ（Read Only Memory）又はＦＬＡＳＨメモリ等の不揮発性メモリである。
【００２６】
ここで、本実施の形態１では、ＣＰＵ（１０）のスキャンテストの実行に利用される複数のテストパタンが、内蔵メモリ（１１）又は外部メモリ（１４）に予め格納されている。
【００２７】
システム制御回路（１５）は、半導体装置（１Ａ）の起動などの全体的な制御を行う。システム制御回路（１５）は、ＣＰＵ（１０）、内蔵メモリ（１１）、及び、外部Ｉ／Ｆ（１２）に対して、システムバス（１３）、若しくは、直接接続された信号線を介して、リセット制御等の各種制御を行う。また、システム制御回路（１５）は、ＣＰＵ（１０）、内蔵メモリ（１１）、及び、外部Ｉ／Ｆ（１２）に対して、直接接続されたクロック信号線（図示せず）を介してクロックを供給する。
【００２８】
半導体装置（１Ａ）は、第１のテスト制御装置（３）として、第１のテスト制御回路（１００）と、パタン入力回路（１０１）と、第１の結果圧縮回路（２０６）と、第１の期待値記憶回路（１０３）を有する。また、半導体装置（１Ａ）は、第２のテスト制御装置（４）として、第２のテスト制御回路（２００）と、パタン発生回路（２０１）と、第２の結果圧縮回路（２０７）と、第２の期待値記憶回路（２０３）を有する。さらに、半導体装置（１Ａ）は、共通結果判定装置（５）として、再帰型圧縮回路（２０８）と、比較回路（２０９）と、タイマー（２０５）を有する。
【００２９】
［第１のテスト制御装置（３）］
第１のテスト制御装置（３）の構成要素は、全体構成の説明で述べた通りである。第１のテスト制御回路（１００）は、システムバス（１３）を介して、ＣＰＵ（１０）と接続されている。第１のテスト制御回路（１００）は、ＣＰＵ（１０）からの要求に従い、ＣＰＵ（１０）のスキャンテストを実行する。
【００３０】
パタン入力回路（１０１）は、第１のテスト制御回路（１００）及びシステムバス（１３）と接続されている。パタン入力回路（１０１）は、第１のテスト制御回路（１００）からの要求に従い、システムバス（１３）を介して、内蔵メモリ（１１）、若しくは、外部メモリ（１４）から複数のテストパタンを読み込む。なお、例えば、このテストパタンが外部メモリ（１４）に予め格納されている場合、半導体装置（１Ａ）の起動完了後に、ＣＰＵ（１０）は、外部メモリ（１４）から内蔵メモリ（１１）に転送してもよい。そして、パタン入力回路（１０１）は、内蔵メモリ（１１）に転送されたテストパタンを読み込むようにしてもよい。
【００３１】
また、パタン入力回路（１０１）は、選択回路（３００）を介して、ＣＰＵ（１０）と接続されている。パタン入力回路（１０１）は、選択回路（３００）を介して、読み込んだ複数のテストパタンを順次ＣＰＵ（１０）の複数のスキャンチェーンに供給する。
【００３２】
すなわち、１つのテストパタンは、ＣＰＵ（１０）のスキャンチェーンの本数と同じビット数のデータとなる。１シフトサイクル（１クロック）毎に１つのテストパタンが複数のスキャンチェーンに入力される。ここで、外部メモリ（１４）又は内蔵メモリ（１１）に格納されたテストパタンのビット数がＣＰＵ（１０）のスキャンチェーンの本数よりも少ない場合（すなわち、圧縮スキャンテストを採用した場合）、パタン入力回路（１０１）は、テストパタンをＣＰＵ（１０）のスキャンチェーンの本数と同じビット数のデータに伸長して、スキャンチェーンに入力する。
【００３３】
第１の結果圧縮回路（２０６）は、ＣＰＵ（１０）の複数のスキャンチェーンから出力される多ビットのテスト結果を空間軸方向に圧縮する。ここで、テスト結果は、１シフトサイクルあたりに複数のスキャンチェーンから出力される多ビットのデータを意味する。よって、テスト結果は、ＣＰＵ（１０）が有するスキャンチェーンの本数と同じビット数の多ビット（例えば、数十から数百ビット）のデータとなる。第１の結果圧縮回路（２０６）は、例えば、ＸＯＲをツリー状に構成した圧縮回路によって、多ビットのテスト結果を１ビットの符号に圧縮する。第１のテスト制御装置（３）は、圧縮スキャンテスト技術を想定したものである。第１の結果圧縮回路（２０６）は、選択回路（３０１）を介して、再帰型圧縮回路（２０８）と接続されている。第１の結果圧縮回路（２０６）は、選択回路（３０１）を介して、圧縮後のテスト結果（上記符号）を再帰型圧縮回路（２０８）に出力する。
【００３４】
第１の期待値記憶回路（１０３）は、第１の結果圧縮回路（２０６）から出力されたテスト結果を再帰型圧縮回路（２０８）で圧縮後の符号の期待値である第１の期待値が格納される。第１の期待値記憶回路（１０３）は、外部メモリ１４又は内蔵メモリ１１に格納される複数のテストパタンに応じた第１の期待値が予め格納されていてもよい。また、複数のテストパタンとともに外部メモリ１４又は内蔵メモリ１１に予め格納しておき、システム制御回路（１５）が半導体装置（１Ａ）の起動完了後に、外部メモリ１４又は内蔵メモリ１１から第１の期待値を読み出し、第１の期待値記憶回路（１０３）に書き込んでもよい。第１の期待値記憶回路（１０３）は、選択回路（３０２）を介して、比較回路（２０９）と接続されている。第１の期待値記憶回路（１０３）は、選択回路（３０２）を介して、第１の期待値を比較回路（２０９）に出力する。
【００３５】
［第２のテスト制御装置（４）］
第２のテスト制御装置（４）の構成要素は、全体構成の説明で述べた通りである。第２のテスト制御回路（２００）は、システム制御回路（１５）と接続されている。第２のテスト制御回路（２００）は、システム制御回路（１５）からの要求に従い、ＣＰＵ（１０）のスキャンテストを実行する。
【００３６】
パタン発生回路（２０１）は、第２のテスト制御回路（２００）と接続されている。パタン発生回路（２０１）は、第２のテスト制御回路（２００）の要求に従い、疑似乱数によって複数のテストパタンを発生（生成）させる。パタン発生回路（２０１）は、選択回路（３００）を介して、ＣＰＵ（１０）と接続されている。パタン発生回路（２０１）は、選択回路（３００）を介して、発生させた複数のテストパタンを順次ＣＰＵ（１０）の複数のスキャンチェーンに供給する。
【００３７】
第２の結果圧縮回路（２０７）は、ＣＰＵ（１０）の複数のスキャンチェーンから出力される複数の多ビットのテスト結果を時間軸方向に圧縮する。第２の結果圧縮回路（２０７）は、例えば、ＭＩＳＲ（Ｍｕｌｔｉｐｌｅ  Ｉｎｐｕｔ  ｓｉｇｎａｔｕｒｅ  Ｒｅｇｉｓｔｅｒ）によって、全てのテスト結果を、１つの多ビットの符号に圧縮する。すなわち、この符号は、複数のスキャンチェーンの本数と同じビット数の多ビットのデータとなる。なお、ＸＯＲをツリー状に構成した圧縮回路によって空間方向に圧縮されたテスト結果をＭＩＳＲの入力としても良い。すなわち、符号のビット数は、スキャンチェーンの本数よりも少なくなっても良い。第２のテスト制御装置（４）は、ＬｏｇｉｃＢＩＳＴ技術を想定したものである。第２の結果圧縮回路（２０７）は、選択回路（３０１）を介して、再帰型圧縮回路（２０８）と接続されている。第２の結果圧縮回路（２０７）は、選択回路（３０１）を介して、圧縮後のテスト結果（上記符号）を再帰型圧縮回路（２０８）に出力する。
【００３８】
第２の期待値記憶回路（２０３）は、第２の結果圧縮回路（２０７）から出力されたテスト結果を再帰型圧縮回路（２０８）で圧縮後の符号の期待値である第２の期待値が格納される。この第２の期待値は、例えば、パタン発生回路（２０１）が自身で生成したテストパタンに応じて生成し、第２の期待値記憶回路（２０３）に格納する。第２の期待値記憶回路（２０３）は、選択回路（３０２）を介して、比較回路（２０９）と接続されている。第２の期待値記憶回路（２０３）は、選択回路（３０２）を介して、第２の期待値を比較回路（２０９）に出力する。
【００３９】
なお、第１の期待値記憶回路（１０３）及び第２の期待値記憶回路（２０３）等のように、半導体装置（１Ａ）が有する記憶回路は、例えば、電源及びグランドを利用して予め定められた値を固定的に示す回路、レジスタ、又は、メモリ等である。メモリは、例えば、ＲＡＭ、ＲＯＭ（例えばヒューズＲＯＭを含む）、ＦＬＡＳＨメモリ等である。これは、以降の説明においても同様である。
【００４０】
［共通結果判定装置（５）］
共通結果判定装置（５）の構成要素は、全体構成の説明で述べた通りである。再帰型圧縮回路（２０８）は、圧縮後のテスト結果を時間軸方向に圧縮する。再帰型圧縮回路（２０８）は、例えば、ＳＩＳＲ（Ｓｉｎｇｌｅ  Ｉｎｐｕｔ  ｓｉｇｎａｔｕｒｅ  Ｒｅｇｉｓｔｅｒ）のように、自身に格納されるデータを循環させながら、入力されたデータと自身に格納されるデータとのＸＯＲ演算をし、その演算結果を自身に格納する複数ビットのレジスタで構成されている。再帰型圧縮回路（２０８）は、比較回路（２０９）と接続されている。再帰型圧縮回路（２０８）は、圧縮後のテスト結果を比較回路（２０９）に出力する。
【００４１】
比較回路（２０９）は、選択回路（３０２）を介して、第１の期待値記憶回路（１０３）、及び、第２の期待値記憶回路（２０３）と接続されている。また、比較回路（２０９）は、システム制御回路（１５）とも接続されている。比較回路（２０９）は、再帰型圧縮回路（２０８）から出力された圧縮後のテスト結果と、第１の期待値記憶回路（１０３）、又は、第２の期待値記憶回路（２０３）からの出力された期待値とを比較する。比較回路（２０９）は、テスト結果と期待値とが不一致である場合、システム制御回路（１５）に対して、エラーを通知する。一方、比較回路（２０９）は、テスト結果と期待値とが一致する場合、システム制御回路（１５）に対して、正常を通知する。
【００４２】
タイマー（２０５）は、第１のテスト制御回路（１００）及び第２のテスト制御回路（２００）のそれぞれによるスキャンテスト実行時間を監視する回路である。すなわち、タイマー（２０５）は、いわゆる、ウォッチドックタイマーである。タイマー（２０５）は、第１のテスト制御回路（１００）、若しくは、第２のテスト制御回路（２００）からスキャンテストの開始を通知された時刻から、予め定めた時間が経過するまでに、第１のテスト制御回路（１００）、若しくは、第２のテスト制御回路（２００）からスキャンテストの終了が通知されなかった場合、システム制御回路（１５）に対して、エラーを通知する。これによれば、第１のテスト制御回路（１００）及び第２のテスト制御回路（２００）によるスキャンテストが正常に終了しない異常を検出することができる。一方、タイマー（２０５）は、第１のテスト制御回路（１００）、若しくは、第２のテスト制御回路（２００）からスキャンテストの開始を通知された時刻から、予め定めた時間が経過するまでに、第１のテスト制御回路（１００）、若しくは、第２のテスト制御回路（２００）からスキャンテストの終了が通知された場合、システム制御回路（１５）に対して、エラーは通知しない。
【００４３】
選択回路（３００）は、パタン入力回路（１０１）及びパタン発生回路（２０１）のうち、いずれか一方から出力されたテストパタンを選択的にＣＰＵ（１０）に出力する。選択回路（３０１）は、第１の結果圧縮回路（２０６）及び第２の結果圧縮回路（２０７）のうち、いずれか一方から出力されたテスト結果を再帰型圧縮回路（２０８）に出力する。選択回路（３０２）は、第１の期待値記憶回路（１０３）及び第２の期待値記憶回路（２０３）のうち、いずれか一方から出力された期待値を比較回路（２０９）に出力する。
【００４４】
続いて、図３を参照して、実施の形態１に係る半導体装置（１Ａ）の自己診断時の動作について説明する。図３は、実施の形態１に係る半導体装置（１Ａ）の自己診断時の動作を示すフロー図である。
【００４５】
図３では、各動作イベント（各処理ブロック）が矢印で連結されており、矢印の向きに従って時系列に動作イベントを行うことが表されている。矢印が分岐しているところは処理が並列して実行されることを示している。なお、ひし形の動作イベントは、条件分岐を表している。ひし形の動作イベントは、基本的に、下向きの矢印が動作イベントの条件に対して正常な判定がされた場合の分岐先を示しており、横向きの矢印が動作イベントの条件に対して異常な判定がされた場合の分岐先を示している。本実施の形態１に係る半導体装置（１Ａ）の動作について、図２に示す半導体装置（１Ａ）の例と、図３に示す動作フローを照らし合わせながら説明する。
【００４６】
［全体動作フロー］
半導体装置（１Ａ）は、その電源が投入され、第２のテスト制御装置（４）及び共通結果判定装置（５）のリセットが解除されると、最初に、ＬＦを検出するための診断を行う。以下、この診断を「起動時診断」とも言う。起動時診断には、第２のテスト制御装置（４）と共通結果判定装置（５）が用いられる。ここで、ＬＦが検出されなければ、半導体装置（１Ａ）は、通常動作を開始する。
【００４７】
また、半導体装置（１Ａ）は、通常動作中、定期的に、その処理を中断してＳＰＦを検出するための診断を行う。以下、この診断を「動作中診断」とも言う。ここで、動作中診断には、第１のテスト制御装置（３）と共通結果判定装置（５）が用いられる。ＳＰＦが検出されなければ、半導体装置（１Ａ）は、通常動作を再開する。起動時診断、若しくは、動作中診断において、ＬＦ又はＳＰＦが検出された場合、共通結果判定装置（５）は、システム制御回路（１５）にエラーを通知する。
【００４８】
［起動時診断（ＬＦ検出フロー）］
起動時診断が開始されると、システム制御回路（１５）は、ＣＰＵ（１０）の診断の開始を指示する診断開始信号をアサートして第２のテスト制御回路（２００）に出力する。第２のテスト制御回路（２００）は、診断開始信号のアサートに応じて、ＣＰＵ（１０）の診断を開始する（Ｓ１０１）。また、第２のテスト制御回路（２００）は、診断を開始するときに、第２のテスト制御装置（４）側（図２では「２」側）を選択するように、選択回路（３００、３０１、３０２）を制御する。なお、この選択回路（３００、３０１、３０２）の制御は、システム制御回路（１５）が診断開始信号をアサートする前に実施してもよい。
【００４９】
また、第２のテスト制御回路（２００）は、診断を開始するときに、ＣＰＵ（１０）に対して実施するスキャンテストの開始を通知する開始通知信号をタイマー（２０５）に出力する。タイマー（２０５）は、第２のテスト制御回路（２００）からの開始通知信号に応じて、その開始通知信号が通知された時点からの経過時間の計測を開始する（Ｓ１０２）。タイマー（２０５）は、第２のテスト制御回路（２００）によって実行されるスキャンテストと並行して動作する。タイマー（２０５）は、計測する経過時間が予め定めた閾値に達するまでに、スキャンテストが完了しなかった場合（つまり、第２のテスト制御回路（２００）からスキャンテストの終了を通知する終了通知信号の出力が無い場合）、システム制御回路（１５）にエラー（タイムアウト）を通知する通知信号を出力する（Ｓ１０２：タイムアウト）。なお、このタイマー（２０５）への終了通知信号の出力は、システム制御回路（１５）が後述する比較回路（２０９）から通知信号を受けたときに実施してもよい。
【００５０】
なお、例えば、半導体装置（１Ａ）が有する記憶回路（図示せず）に閾値が予め格納されており、タイマー（２０５）は、この記憶回路に格納された閾値を参照する。ここでは、第２のテスト制御回路（２００）がタイマー（２０５）を制御する例について説明したが、システム制御回路（１５）がタイマー（２０５）を直接制御するようにしてもよい。
【００５１】
第２のテスト制御回路（２００）は、ＣＰＵ（１０）の診断を開始するため、パタン発生回路（２０１）にテストパタンを発生させる指示信号を出力する。パタン発生回路（２０１）は、第２のテスト制御回路（２００）からの指示信号に応じて、テストパタンを発生する。テストパタンの発生には、例えば、ＬＦＳＲ（Ｌｉｎｅａｒ  Ｆｅｅｄｂａｃｋ  Ｓｈｉｆｔ  Ｒｅｇｉｓｔｅｒ）を利用したＰＲＰＧ（Ｐｓｅｕｄｏ  Ｒａｎｄｏｍ  Ｐａｔｔｅｒｎ Ｇｅｎｅｒａｔｏｒ）を使用する。すなわち、この場合、第２のテスト制御回路（２００）は、ＰＲＰＧを有する。
【００５２】
このようにテストパタンを発生するようにしている理由は、半導体装置（１Ａ）の起動中の状態では、半導体装置（１Ａ）においてシステムバス（１３）を含む多くのモジュールはその診断のために休止状態であり、システムバス（１３）を介して、内蔵メモリ（１１）又は外部メモリ（１４）からテストパタンを読み込むことができないからである。そのため、記憶回路にテストパタンを保持する方法を採用する場合には、システムバス（１３）を介さずにアクセスできる専用の記憶回路（例えばＦＬＡＳＨメモリ又はＲＯＭ等）を用意する必要があるといったように手段が限られてしまう。
【００５３】
これに対して、上述したように、半導体装置（１Ａ）の起動中における第２のテスト制御装置（４）及び共通結果判定装置（５）による診断では、疑似乱数を利用してテストパタンを発生させることで、半導体装置（１Ａ）に専用の記憶回路を備える必要を無くし、半導体装置（１Ａ）の面積コストを低く抑えることができる。
【００５４】
ここで、システムバス（１３）の診断が終了してから、システムバス（１３）を介して、内蔵メモリ（１１）又は外部メモリ（１４）からテストパタンを読み込むようにすることで、専用の記憶回路を備える必要は無くなる。しかしながら、この方法では、システムバス（１３）の診断が終了するまで、ＣＰＵ（１０）の起動時診断を開始することができなくなってしまう。これは、半導体装置は起動完了するまでの時間が制限されていることが多いため（例えば５０ｍｓｅｃ以内）、好ましくない。それに対して、上述したように、疑似乱数を利用してテストパタンを発生させることで、システムバス（１３）の診断と並行して、ＣＰＵ（１０）の起動時診断を実行することができるため、半導体装置（１Ａ）の起動時間を短縮し、半導体装置（１Ａ）を制限時間内に起動完了することが可能となる。
【００５５】
パタン発生回路（２０１）は、発生させた複数のテストパタンを、順次ＣＰＵ（１０）のスキャンチェーンに供給し、ＣＰＵ（１０）のスキャンテストを実行する。すなわち、ＣＰＵ（１０）は、スキャンチェーンに供給されたテストパタンによる動作（キャプチャ）を行う。この動作の結果、スキャンチェーンに格納されたテスト結果は、逐次、第２の結果圧縮回路（２０７）によって取得されて、全てのテスト結果が１つの符号に圧縮される。
【００５６】
ＣＰＵ（１０）の起動時診断として必要な全てのテストパタンの供給が完了し、全てのテスト結果を第２の結果圧縮回路（２０７）で圧縮した後、第２の結果圧縮回路（２０７）は、複数のテスト結果（符号）を１ビットずつシリアルに再帰型圧縮回路（２０８）に出力する。再帰型圧縮回路（２０８）は、第２の結果圧縮回路（２０７）から出力された圧縮後のテスト結果を再圧縮する。これにより、再帰型圧縮回路（２０８）がＳＩＳＲを有する場合には、（第２の結果圧縮回路（２０７）によって圧縮後の多ビットのテスト結果のビット数×１）のサイズのテスト結果がＳＩＳＲの段数のサイズに圧縮される。再帰型圧縮回路（２０８）は、圧縮後のテスト結果を比較回路（２０９）に出力する。
【００５７】
比較回路（２０９）は、再帰型圧縮回路（２０８）から出力された圧縮後のテスト結果と、第２の期待値記憶回路（２０３）に格納された第２の期待値とが一致しているか否かを判定する（Ｓ１０３）。
【００５８】
比較回路（２０９）は、比較結果が一致した場合、ＣＰＵ（１０）が正常であると判定する（Ｓ１０３：正常）。この場合、比較回路（２０９）は、正常を通知する通知信号をシステム制御回路（１５）に出力する。
【００５９】
一方、比較回路（２０９）は、比較結果が不一致であった場合、ＣＰＵ（１０）が異常であると判定する（Ｓ１０３：異常）。すなわち、この場合は、ＬＦが検出されたことになる。この場合、比較回路（２０９）は、エラーを通知する通知信号をシステム制御回路（１５）に出力する。
【００６０】
タイマー（２０５）又は比較回路（２０９）からエラーを通知する通知信号が出力された場合、システム制御回路（１５）は、速やかに半導体装置（１Ａ）におけるシステムを停止させる処理を行い、半導体装置（１Ａ）におけるシステムを停止させる（Ｓ１１１）。すなわち、システム制御回路（１５）は、半導体装置（１Ａ）の起動を抑止する。
【００６１】
また、第２のテスト制御回路（２００）は、スキャンテストが終了したときに、スキャンテストの終了を通知する終了通知信号をタイマー（２０５）に出力する。
【００６２】
［動作中診断（ＳＰＦ検出フロー）］
ＣＰＵ（１０）のＬＦの診断結果が正常である場合（Ｓ１０３：正常）、システム制御回路（１５）は、ＣＰＵ（１０）の起動を開始する（Ｓ１０４）。ＣＰＵ（１０）は、その起動完了後、アプリケーションプログラムの処理を実行する（Ｓ１０５）。また、ＣＰＵ（１０）は、このアプリケーションプログラムの処理において、定期的（所定時間経過する毎）に自己診断を行う処理も実行する。所定時間が経過して自己診断を行う処理に入ると（Ｓ１０６：Ｙｅｓ）、ＣＰＵ（１０）は、システムバス（１３）を介して、ＣＰＵ（１０）の診断の開始を指示する診断開始信号をアサートして第１のテスト制御回路（１００）に出力し、自身は処理を停止した状態（例えば、スリープ状態）に遷移する（Ｓ１０７）。
【００６３】
第１のテスト制御回路（１００）は、診断開始信号のアサートに応じて、ＣＰＵ（１０）の診断を開始する（Ｓ１０８）。また、第１のテスト制御回路（１００）は、第１のテスト制御装置（３）側、図２では「１」側）を選択するように、選択回路（３００、３０１、３０２）を制御する。なお、この選択回路（３００、３０１、３０２）の制御は、ＣＰＵ（１０）が診断開始信号をアサートする前に実施してもよい。
【００６４】
また、第１のテスト制御回路（１００）は、診断を開始するときに、ＣＰＵ（１０）に対して実施するスキャンテストの開始を通知する開始通知信号をタイマー（２０５）に出力する。タイマー（２０５）は、第１のテスト制御回路（１００）からの開始通知信号に応じて、その開始通知信号が通知された時点からの経過時間の計測を開始する（Ｓ１０９）。タイマー（２０５）は、第１のテスト制御回路（１００）によって実行されるスキャンテストと並行して動作する。タイマー（２０５）は、計測する経過時間が予め定めた閾値に達するまでに、スキャンテストテストが完了しなかった場合（つまり、第１のテスト制御回路（１００）からスキャンテストの終了を通知する終了通知信号の出力が無い場合）、システム制御回路（１５）にエラー（タイムアウト）を通知する（Ｓ１０９：タイムアウト）。なお、このタイマー（２０５）への終了通知信号の出力は、システム制御回路（１５）が、後述する比較回路（２０９）から通知信号を受けたときに実施してもよい。
【００６５】
なお、例えば、上述したように、タイマー（２０５）が、半導体装置（１Ａ）が有する記憶回路に格納された閾値を参照する。また、この動作中診断で使用される閾値と、起動時診断で使用される閾値とは異なっていてもよい。
【００６６】
第１のテスト制御回路（１００）は、ＣＰＵ（１０）の診断を開始するため、パタン入力回路（１０１）に、システムバス（１３）を介して、テストパタンの入力を指示する指示信号を出力する。パタン入力回路（１０１）は、第１のテスト制御回路（１００）からの指示信号に応じて、内蔵メモリ（１１）、若しくは、外部メモリ（１４）からテストパタンを取得する。
【００６７】
これは、短いテスト時間で、高い故障検出率を実現するために、任意の値で構成させたテストパタンを利用するためである。任意の値を利用することから、データ量が大きくなり易い。しかしながら、テストパタンを外部メモリ（１４）に格納した場合には、半導体装置（１Ａ）の面積コストを低く抑えることができる。
【００６８】
パタン入力回路（１０１）は、取得した複数のテストパタンを、ＣＰＵ（１０）のスキャンチェーンに供給し、ＣＰＵ（１０）のスキャンテストを実行する。すなわち、ＣＰＵ（１０）は、スキャンチェーンに供給されたテストパタンによる動作（キャプチャ）を行う。この動作の結果、スキャンチェーンに格納されたテスト結果は、逐次、第１の結果圧縮回路（２０６）によって取得されて、１ビットの符号に圧縮される。第１の結果圧縮回路（２０６）は、圧縮後のテスト結果（符号）を１ビットずつシリアルに再帰型圧縮回路（２０８）に出力する。再帰型圧縮回路（２０８）は、第１の結果圧縮回路（２０６）から出力された圧縮後のテスト結果（符号）を再圧縮する。これにより、再帰型圧縮回路（２０８）がＳＩＳＲを有する場合には、（第１の結果圧縮回路（２０６）によって圧縮後の１ビットのテスト結果×その個数）のサイズのテスト結果がＳＩＳＲの段数のサイズに圧縮される。再帰型圧縮回路（２０８）は、圧縮後のテスト結果を比較回路（２０９）に出力する。
【００６９】
比較回路（２０９）は、再帰型圧縮回路（２０８）から出力された圧縮後のテスト結果と、第１の期待値記憶回路（１０３）に格納された第１の期待値とが一致しているか否かを判定する（Ｓ１１０）。
【００７０】
比較回路（２０９）は、比較結果が一致した場合、正常を通知する通知信号をシステム制御回路（１５）に出力する。比較回路（２０９）から正常を通知する通知信号が出力された場合、システム制御回路（１５）は、ＣＰＵ（１０）が正常であると判定する（Ｓ１１０：正常）。
【００７１】
ＣＰＵ（１０）が正常であると判定された場合（Ｓ１１０：正常）、システム制御回路（１５）は、ＣＰＵ（１０）をリセットし、再起動する（Ｓ１０４）。ＣＰＵ（１０）は、再起動完了後、上述のステップＳ１０７で停止していた処理を再開する（Ｓ１０５）。そして、ＣＰＵ（１０）は、所定時間の経過後（Ｓ１０６：Ｙｅｓ）、再度、自己診断を行う処理を実行する（Ｓ１０７）。
【００７２】
一方、比較回路（２０９）は、比較結果が不一致であった場合、エラーを通知する通知信号をシステム制御回路（１５）に出力する。比較回路（２０９）からエラーを通知する通知信号が出力された場合、システム制御回路（１５）は、ＣＰＵ（１０）が異常であると判定する（Ｓ１１０：異常）。すなわち、この場合は、ＳＰＦが検出されたことになる。
【００７３】
ＣＰＵ（１０）が異常であると判定された場合（Ｓ１１０：異常）、システム制御回路（１５）は、速やかに半導体装置（１Ａ）におけるシステムを停止させる処理を行い、半導体装置（１Ａ）におけるシステムを停止させる（Ｓ１１１）。
【００７４】
［機能安全の観点におけるＳＰＦ／ＬＦ検出の補足説明］
本実施の形態１の構成および動作において、ＳＰＦとＬＦの両方の検出が実施できており、機能安全が有効とされている理由を、以下に説明する。
【００７５】
ＳＰＦは、単一の故障による障害であって、本実施の形態１においては、ＣＰＵ（１０）の故障により発生する障害が該当する。ＣＰＵ（１０）の故障は、第１のテスト制御装置（３）によって定期的に実施されるスキャンテストと、共通結果判定装置（５）による結果判定により検出されており、本実施の形態１によって半導体装置（１Ａ）のＳＰＦに対する安全性（信頼性）は向上していると言える。
【００７６】
ＬＦは、複数の故障が同時に発生することによる障害である。例えば、安全機構に発生した故障により、本来、安全機構が検出すべきＳＰＦが検出されなくなる障害のことである。本実施の形態１においては、ＣＰＵ（１０）、及び、共通結果判定装置（５）の故障により発生する障害が該当する。より具体的には、ＣＰＵ（１０）は、ＳＰＦを検出するための動作（以降、動作中診断）を開始するモジュールであるが、ＣＰＵ（１０）の動作中診断を起動する機構に故障が発生して動作中診断が起動できなかった場合、それと同時に発生したＣＰＵ（１０）の故障が見逃されてしまう。その結果、安全性の向上が妨げられてしまう。次に、共通結果判定装置（５）については、テスト結果と期待値との比較結果に依らず、常にＣＰＵ（１０）が正常であるとシステム制御回路（１５）に通知してしまうような故障が共通結果判定装置（５）に発生してしまった場合、動作中診断により検出できたはずのＣＰＵ（１０）の故障がシステム制御回路（１５）に通知されなくなり、やはり安全性の向上が妨げられてしまう。
【００７７】
ＣＰＵ（１０）の故障については、第２のテスト制御装置（４）と共通結果判定装置（５）によって半導体装置（１Ａ）の起動時に実施されるスキャンテストにより検出される。共通結果判定装置（５）の故障については、ＬＦを検出するための動作（以降、起動時診断）によって機能的に診断されている。なぜなら、共通結果判定装置（５）が有する再帰型圧縮回路（２０８）は、入力されたデータと自身のデータのＸＯＲを取りながら、さらに自身の値も循環させる複数ビットのレジスタを有しているため、１ビットの反転が結果を大きく変える構造となっている。そのため、第２のテスト制御装置（４）が出力するテスト結果のみならず、再帰型圧縮回路（２０８）が期待と異なる動作を行えば、テスト結果が期待値とは異なる値となることで現れるからである。なお、比較回路（２０９）の誤判定については、起動時診断において、後述する比較回路（２０９）の診断を追加することで実現できる。
【００７８】
なお、第１のテスト制御装置（３）については、どこが故障したとしても安全性向上が妨げられることはない。例えば、パタン入力回路（１０１）とＣＰＵ（１０）に対して同時に故障が発生したとしても、その故障は、再帰型圧縮回路（２０８）が生成する最終的なテスト結果と期待値の不一致として具現化する。その結果、システム制御回路（１５）にエラーが通知され、システムを安全状態に移行させる制御を行うことができる。つまり、ＣＰＵ（１０）による動作中診断が正常に行われ、共通結果判定装置（５）による評価が正しければ、その診断中の動作がどうであれ、安全性向上の妨げとはならない。
【００７９】
以上の理由により、本実施の形態１によれば、半導体装置（１Ａ）のＬＦに対する安全性は向上していると言える。すなわち、本実施の形態１によれば、ＳＰＦ及びＬＦの両方を検出することができ、半導体装置（１Ａ）の信頼性をより向上させることができる。
【００８０】
また、実施の形態１では、再帰型圧縮回路（２０８）と比較回路（２０９）を有する共通結果判定装置（５）が、ＣＰＵ（１０）のＳＰＦを検出する第１のテスト制御装置（３）と、ＣＰＵ（１０）のＬＦを検出する第２のテスト制御装置（４）とで、共有されている点である。本構成により、起動時診断を実施することによって再帰型圧縮回路（２０８）と比較回路（２０９）のＬＦが検出されるので、「ＣＰＵ（１０）のＳＰＦを検出する診断装置」に対して、さらにＬＦを検出するための追加の診断装置が不要になる。
【００８１】
さらに、実施の形態１は、ＳＰＦを検出するためにスキャンテスト（圧縮スキャン）を利用した第１のテスト制御装置（３）を用い、ＬＦを検出するために同じくスキャンテスト（ＬｏｇｉｃＢＩＳＴ）を利用した第２のテスト制御装置（４）を用いている。
【００８２】
本構成によれば、ＳＰＦとＬＦの両方が検出可能な、安全性の高い半導体装置を低コストで実現することができる。具体的には、ＣＰＵ（１０）の動作中診断において、第１のテスト制御装置（３）によりＣＰＵ（１０）のスキャンテストを実施することで、ＣＰＵ（１０）を二重化せずともＳＰＦの検出が可能になり、ＣＰＵ（１０）の二重化にかかる面積及び消費電力を削減することで低コスト化ができる。また、ＣＰＵ（１０）の起動時診断において、第２のテスト制御装置（４）によるＣＰＵ（１０）のスキャンテストを実施し、ＳＰＦの検出にも共通で使用する再帰型圧縮回路（２０８）及び比較回路（２０９）でその結果を用いた判定を行うことで、スキャンテストによってＣＰＵ（１０）のＬＦを検出し、再帰型圧縮回路（２０８）と比較回路（２０９）のＬＦを検出することで、安全性を高めることができる。
【００８３】
なお、本実施の形態１において、被テスト回路（診断対象の回路）がＣＰＵである例について説明したが、被テスト回路はＣＰＵに限定されるものではない。高い安全性が必要とされる半導体装置において、各種処理モジュールに対して適用できるものである。
【００８４】
＜実施の形態１の変形例＞
続いて、実施の形態１の変形例について説明する。図４を参照して、実施の形態１の変形例に係る半導体装置（１Ａ）の自己診断時の動作について説明する。図４は、実施の形態１の変形例に係る半導体装置（１Ａ）の自己診断時の動作を示すフロー図である。図３に示した動作において、起動時診断において、比較回路（２０９）が故障していないかどうかを診断する動作を追加してもよい。図４では、その動作について説明する。図４に示す動作は、図３に示した動作と比較して、ステップＳ１０１及びＳ１０２と、ステップＳ１０３との間に、ステップＳ１１２が追加されている。
【００８５】
システム制御回路（１５）は、ＣＰＵ（１０）の診断の開始を指示する前に、比較回路（２０９）の診断の開始を指示する診断開始信号をアサートして第２のテスト制御回路（２００）に出力する。第２のテスト制御回路（２００）は、診断開始信号のアサートに応じて、比較回路（２０９）の診断を開始する（Ｓ１１２）。
【００８６】
ステップＳ１１２は、ステップＳ１０３と同様に、ＣＰＵ（１０）のスキャンテストを実施するが、第２のテスト制御回路（２００）が第２の期待値記憶回路（２０３）に格納する第２の期待値が、故意にエラーが発生する値であるという点が異なる。
【００８７】
よって、ステップＳ１１２では、比較回路（２０９）からエラーを通知する通知信号が出力された場合、システム制御回路（１５）は、比較回路（２０９）が正常であると判定する（Ｓ１１２：正常）。この場合、半導体装置（１Ａ）の動作は、ステップＳ１０３に進む。
【００８８】
一方、比較回路（２０９）から正常を通知する通知信号が出力された場合、システム制御回路（１５）は、ＣＰＵ（１０）が異常であると判定する（Ｓ１１２：異常）。この場合、システム制御回路（１５）は、速やかに半導体装置（１Ａ）におけるシステムを停止させる処理を行い、半導体装置（１Ａ）におけるシステムを停止させる（Ｓ１１１）。すなわち、システム制御回路（１５）は、半導体装置（１Ａ）の起動を抑止する。  
【００８９】
なお、比較回路（２０９）の診断は、上述したようにスキャンテストを実施することに限られない。例えば、システム制御回路（１５）は、半導体装置（１Ａ）の起動時に、再帰型圧縮回路（２０８）から比較回路（２０９）に出力される初期値と異なる第２の期待値を第２の期待値記憶回路（２０３）に格納し、比較回路（２０９）から出力される初期値と、第２の期待値記憶回路（２０３）に格納された第２の期待値の比較動作及びその比較結果に応じた通知のみを比較回路（２０９）に実施させることで、比較回路（２０９）を診断するようにしてもよい。
【００９０】
以上に説明したように、本実施の形態１の変形例では、スキャンテストを実施する前に、比較回路（２０９）に異なる値を比較させて、一致すると判定された場合に、半導体装置（１Ａ）の動作を停止させるようにしている。これによれば、比較回路（２０９）の故障を検出し、故障している比較回路（２０９）によってテスト結果が判定されてしまうことを防止することができる。
【００９１】
＜実施の形態２＞
続いて、実施の形態２について説明する。以下の実施の形態２の説明では、上述した実施の形態１と同様の内容については、同一の符号を付す等して、適宜、その説明を省略する。図５を参照して、実施の形態２に係る半導体装置（１Ｂ）の構成について説明する。図５は、実施の形態２に係る半導体装置（１Ｂ）の構成を示すブロック図である。
【００９２】
図５に示すように、半導体装置（１Ｂ）は、その機能を構成する要素として、複数の被テスト回路（４０、５０、６０）と、システム制御回路（１５）を有する。なお、図５では、被テスト回路の数が３つである例について示しているが、被テスト回路の数は、これに限られない。
【００９３】
被テスト回路（４０、５０、６０）のそれぞれは、被テスト回路（２）と同様である。したがって、被テスト回路（４０、５０、６０）のそれぞれは、例えば、ＣＰＵ（１０）である。
【００９４】
また、半導体装置（１Ｂ）は、複数の第１のテスト制御装置（４１、５１、６１）と、複数の第２のテスト制御装置（４２、５２、６２）と、複数の共通結果判定装置（４３、５３、６３）とを有する。
【００９５】
複数の第１のテスト制御装置（４１、５１、６１）のそれぞれは、第１のテスト制御装置（３）と同様である。よって、複数の第１のテスト制御装置（４１、５１、６１）のそれぞれは、第１のテスト制御回路（１００）と、パタン入力回路（１０１）と、第１の結果圧縮回路（２０６）と、第１の期待値記憶回路（１０３）を有する（図示せず）。
【００９６】
第２のテスト制御装置（４２、５２、６２）のそれぞれは、第２のテスト制御装置（４）と同様である。よって、第２のテスト制御装置（４２、５２、６２）のそれぞれは、第２のテスト制御回路（２００）と、パタン発生回路（２０１）と、第２の結果圧縮回路（２０７）と、第２の期待値記憶回路（２０３）を有する（図示せず）。
【００９７】
共通結果判定装置（４３、５３、６３）のそれぞれは、共通結果判定装置（５）と同様である。よって、共通結果判定装置（４３、５３、６３）のそれぞれは、再帰型圧縮回路（２０８）と、比較回路（２０９）と、タイマー（２０５）を有する。
【００９８】
すなわち、第１のテスト制御装置（４１、５１、６１）のそれぞれ及び共通結果判定装置（４３、５２、６２）のそれぞれは、被テスト回路（４０、５０、６０）のそれぞれの動作中診断を実施する装置に相当する。第２のテスト制御装置（４２、５２、６２）のそれぞれ及び共通結果判定装置（４３、５３、６３）のそれぞれは、被テスト回路（４０、５０、６０）のそれぞれの起動時診断を実施する装置に相当する。
【００９９】
また、半導体装置（１Ｂ）は、ＡＮＤゲート（４４、５４、６４）と、テスト対象設定回路（７０）とを有する。
【０１００】
ＡＮＤゲート（４４）は、システム制御回路（１５）から第２のテスト制御装置（４２）に対する診断開始信号が伝送される信号線に挿入される。ＡＮＤゲート（５４）は、システム制御回路（１５）から第２のテスト制御装置（５２）に対して診断開始信号が伝送される信号線に挿入される。ＡＮＤゲート（６４）は、システム制御回路（１５）から第２のテスト制御装置（６２）に対する診断開始信号が伝送される信号線に挿入される。
【０１０１】
ＡＮＤゲート（４４）は、システム制御回路（１５）から出力される診断開始信号と、テスト対象設定回路（７０）から出力されるテスト対象設定信号の反転値が入力される。ＡＮＤゲート（５４）は、システム制御回路（１５）から出力される診断開始信号と、テスト対象設定回路（７０）から出力されるテスト対象設定信号の反転値が入力される。ＡＮＤゲート（６４）は、システム制御回路（１５）から出力される診断開始信号と、テスト対象設定回路（７０）から出力されるテスト対象設定信号の反転値が入力される。
【０１０２】
ＡＮＤゲート（４４、５４、６４）のそれぞれは、テスト対象設定回路（７０）から出力されるテスト対象設定信号の反転値と、システム制御回路（１５）から出力される診断開始信号とをＡＮＤ演算し、その演算結果となる信号を、第２のテスト制御装置（４２）に出力する。
【０１０３】
テスト対象設定回路（７０）が有する記憶回路（図示せず）は、被テスト回路（４０、５０、６０）のそれぞれについて、半導体装置（１Ｂ）の起動時における起動時診断の対象であるか否かを示す値が格納される。この記憶回路は、例えば、半導体装置（１Ｂ）の製造完了以降の工程で、任意にその値を変更可能なメモリである。このメモリは、例えば、ＦＬＡＳＨメモリ又はヒューズＲＯＭ等である。テスト対象設定回路（７０）は、被テスト回路（４０、５０、６０）のそれぞれについての値を、テスト対象設定信号としてＡＮＤゲート（４４、５４、６４）のそれぞれに出力する。より具体的には、半導体装置（１Ｂ）の起動時における起動時診断の対象である場合には、Ｌｏｗレベルのテスト対象設定信号が出力され、半導体装置（１Ｂ）の起動時における起動時診断の対象でない場合には、Ｈｉｇｈレベルのテスト対象設定信号が出力される。
【０１０４】
テスト対象設定回路（７０）から出力されるテスト対象設定信号がＬｏｗレベルである場合、ＡＮＤゲート（４４）は、システム制御回路（１５）から出力される診断開始信号を、そのまま第２のテスト制御装置（４２）に出力する。つまり、システム制御回路（１５）から出力されるＨｉｇｈレベルの診断開始信号（アサートされた診断開始信号）を、そのまま第２のテスト制御装置（４２）に出力することができる。よって、システム制御回路（１５）によって第２のテスト制御装置（４２）による起動時診断を開始することが可能である。
【０１０５】
一方、テスト対象設定回路（７０）から出力されるテスト対象設定信号がＨｉｇｈレベルである場合、ＡＮＤゲート（４４）は、システム制御回路（１５）から出力される診断開始信号の値に関わらず、常にＬｏｗレベルの信号（ネゲートされた信号）を、診断開始信号として第２のテスト制御装置（４２）に出力する。つまり、システム制御回路（１５）によって第２のテスト制御装置（４２）による起動時診断が開始することができなくなる。
【０１０６】
なお、以上に説明した動作は、ＡＮＤゲート（５４、６４）も同様であるため、その説明は省略する。
【０１０７】
以上に説明したように、本実施の形態２では、テスト対象設定回路（７０）に、複数の被テスト回路（４０、５０、６０）のそれぞれについて、半導体装置（１Ｂ）の起動時における、複数の第２のテスト制御装置（４２、５２、６２）によるスキャンテストの対象であるか否かを示す値が格納されている。そして、複数の第２のテスト制御装置（４２、５２、６２）のそれぞれは、その値に従って、半導体装置（１Ｂ）の起動時に、スキャンテストを実施するようにしている。そのため、任意の被テスト回路の起動時診断自体を無効にして、起動時診断の対象を削減することができる。すなわち、任意の被テスト回路に対して、起動時診断を実施しないことにより、半導体装置（１Ｂ）の起動時間を短縮できる。これによれば、半導体製品を出荷する前に、その設定を変更できるため、安全性向上を優先する場合、及び、起動速度を優先する場合等のように、複数の顧客ニーズに対応することができる。
【０１０８】
＜実施の形態３＞
続いて、実施の形態３について説明する。以下の実施の形態３の説明では、上述した実施の形態２と同様の内容については、同一の符号を付す等して、適宜、その説明を省略する。
【０１０９】
［構成］
図６を参照して、実施の形態３に係る半導体装置（１Ｃ）の構成について説明する。図６は、実施の形態３に係る半導体装置（１Ｃ）の構成を示すブロック図である。図３に示すように、半導体装置（１Ｃ）は、実施の形態２に係る半導体装置（１Ｂ）と比較して、さらに、複数のＯＲゲート（４５、５５、６５）を有する。また、図６では、システムバス（１３）を明示している。
【０１１０】
ＯＲゲート（４５）は、ＡＮＤゲート（４４）から第２のテスト制御装置（４２）に対する診断開始信号が伝送される信号線に挿入される。ＯＲゲート（５５）は、ＡＮＤゲート（５４）から第２のテスト制御装置（５２）に対する診断開始信号が伝送される信号線に挿入される。ＯＲゲート（６５）は、ＡＮＤゲート（６４）から第２のテスト制御装置（６２）に対する診断開始信号が伝送される信号線に挿入される。
【０１１１】
ＯＲゲート（４５、５５、６５）のそれぞれの一方の入力端子は、上述したようにＡＮＤゲート（４４、５４、６４）のそれぞれの出力端子に接続されており、ＯＲゲート（４５、５５、６５）のそれぞれの他方の入力端子は、システムバス（１３）に接続されている。
【０１１２】
ＯＲゲート（４５、５５、６５）のそれぞれは、ＡＮＤゲート（４４、５４、６４）のそれぞれから出力される診断開始信号と、システムバス（１３）から出力される診断開始信号とをＯＲ演算し、演算結果となる信号を、第２のテスト制御装置（４２）に出力する。
【０１１３】
［動作］
システムバス（１３）から出力される診断開始信号がＬｏｗレベルである場合、ＯＲゲート（４５）は、ＡＮＤゲート（４４）から出力される診断開始信号をそのまま第２のテスト制御装置（４２）に出力する。つまり、テスト対象設定回路（７０）において被テスト回路（４０）がテスト対象として設定されており、テスト対象設定回路（７０）からＡＮＤゲート（４４）に出力されるテスト対象設定信号がＬｏｗレベルである場合、システム制御回路（１５）によって、第２のテスト制御装置（４２）による起動時診断を開始することが可能である。
【０１１４】
一方で、システムバス（１３）から出力される診断開始信号がＨｉｇｈレベルである場合、ＯＲゲート（４５）は、ＡＮＤゲート（４４）から出力される診断開始信号の値に関わらず、常にＨｉｇｈレベルの信号を診断開始信号として第２のテスト制御装置（４２）に出力する。つまり、テスト対象設定回路（７０）において、被テスト回路（４０）がテスト対象として設定されておらず、テスト対象設定回路（７０）からＡＮＤゲート（４４）に出力されるテスト対象設定信号がＨｉｇｈレベルである場合であっても、システムバス（１３）から出力される診断開始信号がアサートされたとき（ＬｏｗレベルからＨｉｇｈレベルに変更されたとき）に、第２のテスト制御装置（４２）による起動時診断を開始することが可能である。
【０１１５】
なお、以上に説明した動作は、ＯＲゲート（５５、６５）も同様であるため、その説明は省略する。
【０１１６】
続いて、図７を参照して、実施の形態３に係る半導体装置（１Ｃ）の自己診断時の動作について説明する。図７は、実施の形態３に係る半導体装置（１Ｃ）の自己診断時の動作を示すフロー図である。
【０１１７】
図７では、各動作イベントが矢印で連結されており、矢印の向きに従って時系列にイベントを行うことが表されている。矢印が分岐しているところは処理が並列して実行されることを示している。なお、ひし形のイベントについては、分岐を表す。ひし形のイベントは、基本的に、下向きの矢印がイベントの内容に対して正常な状態であった場合の次処理を指している。本実施の形態３における動作の説明は、図６に示す半導体装置（１Ｃ）の例と、図７に示す動作フローを照らし合わせながら行う。
【０１１８】
［動作フロー］
ここでは、テスト対象設定回路（７０）において、被テスト回路（４０、５０、６０）のうち、被テスト回路（４０）のみが、半導体装置（１Ｃ）の起動時における起動時診断の対象として定められているものとする。半導体装置（１Ｃ）は、その電源が投入され、第２のテスト制御装置（４２、５２、６２）及び共通結果判定装置（４３、５３、６３）のリセットが解除されると、起動時診断を開始する。起動時診断が開始されると、システム制御回路（１５）は、第２のテスト制御装置（４２）によって被テスト回路（４０）の診断を開始する（Ｓ２０１）。
【０１１９】
共通結果判定装置（４３）は、テスト結果と期待値が不一致であると判定した場合（Ｓ２０２：異常）、被テスト回路（４０）が異常であるとして、システム制御回路（１５）にエラーを通知する。なお、タイマー（２０５）でタイムアウトを検出した場合も同様である。一方、共通結果判定装置（４３）は、被テスト回路（４０）が正常であると判定した場合（Ｓ２０２：正常）、システム制御回路（１５）に正常である旨を通知する。システム制御回路（１５）は、この通知に応じて、被テスト回路（４０）を起動する（Ｓ２０３）。これにより、被テスト回路（４０）は、通常動作状態となり、その機能に応じた処理を開始する（Ｓ２０４）。
【０１２０】
なお、ステップＳ２０１、Ｓ２０２における具体的な動作は、図３のステップＳ１０１〜Ｓ１０３における動作と同様であるため、その説明は省略する。
【０１２１】
被テスト回路（４０）が通常動作を開始することで、半導体装置（１Ｃ）のシステムが立ち上がる（すなわち、半導体装置（１Ｃ）の起動が完了する）。半導体装置（１Ｃ）の起動後に、被テスト回路（４０）は、その機能に応じた処理として、システムバス（１３）を介して、第２のテスト制御装置（５２）及び第２のテスト制御装置（６２）のそれぞれに対して、被テスト回路（５０）及び被テスト回路（６０）のそれぞれの診断の開始を要求する。すなわち、被テスト回路（４０）は、システムバス（１３）を介してＯＲゲート（５５、６５）のそれぞれに出力している診断開始信号をアサートする（診断開始信号をＬｏｗレベルからＨｉｇｈレベルに変更する）。これにより、第２のテスト制御装置（５２）及び第２のテスト制御装置（６２）のそれぞれによって、被テスト回路（５０）及び被テスト回路（６０）のそれぞれの診断が開始される（Ｓ２０５、Ｓ２０９）。
【０１２２】
ここで、被テスト回路（４０）は、例えば、システムバス（１３）を介して、テスト対象設定回路（７０）に格納された値を参照し、その値が起動時診断の対象でないと示す被テスト回路（５０、６０）に対応する第２のテスト制御装置（５２）及び第２のテスト制御装置（６２）に対して、起動時診断の診断開始信号をアサートする。なお、被テスト回路（４０）は、起動時診断の対象でないと示された被テスト回路（５０、６０）の全てについて起動時診断を実施しなくてもよい。被テスト回路（４０）は、起動時診断の対象でないと示された被テスト回路（５０、６０）のうち、予め定められた一部の被テスト回路のみについて起動時診断を実施するようにしてもよい。例えば、この起動時診断の対象となる被テスト回路は、テスト対象設定回路（７０）に起動時診断の対象を示す値とは別途格納された値によって示されていてもよく、被テスト回路（４０）が実行するアプリケーションプログラムの処理として定められていてもよく、外部メモリ（１４）に格納された値によって示されていてもよい。
【０１２３】
共通結果判定装置（５３）は、テスト結果と期待値が不一致であると判定した場合（Ｓ２０６：異常）、被テスト回路（５０）が異常であるとして、システム制御回路（１５）にエラーを通知する。なお、タイマー（２０５）でタイムアウトを検出した場合も同様である。一方、共通結果判定装置（５３）は、被テスト回路（５０）が正常であると判定した場合（Ｓ２０６：正常）、システム制御回路（１５）に正常である旨を通知する。システム制御回路（１５）は、この通知に応じて、被テスト回路（５０）を起動する（Ｓ２０７）。これにより、被テスト回路（５０）は、通常動作状態となり、その機能に応じた処理を開始する（Ｓ２０８）。
【０１２４】
共通結果判定装置（６３）は、テスト結果と期待値が不一致であると判定した場合（Ｓ２１０：異常）、被テスト回路（６０）が異常であるとして、システム制御回路（１５）にエラーを通知する。なお、タイマー（２０５）でタイムアウトを検出した場合も同様である。一方、共通結果判定装置（６３）は、被テスト回路（６０）が正常であると判定した場合（Ｓ２１０：正常）、システム制御回路（１５）に正常である旨を通知する。システム制御回路（１５）は、この通知に応じて、被テスト回路（６０）を起動する（Ｓ２１１）。これにより、被テスト回路（６０）は、通常動作状態となり、その機能に応じた処理を開始する（Ｓ２１２）。
【０１２５】
システム制御回路は（１５）は、エラーが通知された場合、速やかに半導体装置（１Ｃ）におけるシステムを停止させる処理を行い、半導体装置（１Ｃ）におけるシステムを停止させる（Ｓ２１３）。なお、システム制御回路は（１５）は、被テスト回路（５０）及び被テスト回路（６０）の少なくとも１つについて、エラーが通知された場合には、エラーが通知された被テスト回路（５０）及び被テスト回路（６０）の起動を抑止して、システムの動作を継続させてもよい。
【０１２６】
なお、被テスト回路（４０、５０、６０）のそれぞれは、通常動作の処理において、定期的に自身の起動時診断を開始させるが、この動作は、実施の形態１で説明した内容と同様であるため、その説明を省略する。
【０１２７】
［特徴及び効果］
以上に説明した本実施の形態３では、複数の起動時診断の対象のそれぞれに対して、診断の開始を指示する経路を複数有している。本実施の形態３では、電源投入直後のリセット解除後にシステム制御回路（１５）から診断が起動される経路と、半導体装置（１Ｃ）のシステムの立ち上げが完了した後にシステムバス（１３）を介して診断が起動される経路と、の２つの経路を有している。言い換えると、テスト対象設定回路（７０）に格納された値が、第２のテスト制御装置によるスキャンテストの対象であると示す被テスト回路（４０）は、テスト対象設定回路（７０）に格納された値が、第２のテスト制御装置によるスキャンテストの対象でないと示す被テスト回路（５０、６０）のうち、所定の被テスト回路（全部又は一部の被テスト回路）に対応する第２のテスト制御装置（５２、６２）に対して、起動時診断（スキャンテスト）の実施を指示するようにしている。これによれば、高い安全性を担保しながらもシステムの立ち上げ時間を短縮できる。
【０１２８】
その理由は、半導体装置（１Ｃ）における被テスト回路（４０、５０、６０）の全てが、その起動直後から動作を開始するものではないため、その自己診断においても優先順位がつけられるという考えに基づく。例えば、被テスト回路が、外部ネットワークと通信を行う通信モジュールである場合には早々に起動する必要があり、起動直後にその自己診断が実施されなければならない。一方で、被テスト回路が、画像処理を行うモジュールのように、その動作が期待されるタイミングが通信モジュールと比べて後になるものに対しては、半導体装置（１Ｃ）の起動が完了した後にゆっくり自己診断を実施すればよい。何故なら、その動作が期待される前に発生する故障は、ＬＦにも該当しないとみなせるからである。
【０１２９】
＜実施の形態４＞
続いて、実施の形態４について説明する。以下の実施の形態４の説明では、上述した実施の形態１と同様の内容については、同一の符号を付す等して、適宜、その説明を省略する。
【０１３０】
［構成］
図８を参照して、実施の形態４に係る半導体装置（１Ｄ）の構成について説明する。図８は、実施の形態４に係る半導体装置（１Ｄ）の構成を示すブロック図である。図８に示すように、半導体装置（１Ｄ）は、実施の形態１に係る半導体装置（１Ａ）と比較して、第１の結果圧縮回路（２０６）、第２の結果圧縮回路（２０７）及び共通結果判定装置（５）（タイマー（２０５）、再帰型圧縮回路（２０８）及び比較回路（２０９））に代えて、第１の結果判定回路（１０２）、第１のタイマー（１０４）、第２の結果判定回路（２０２）及び第２のタイマー（２０４）を有する点と、さらに遮断回路（１６、１７）を有する点が異なる。
【０１３１】
第１の結果判定回路（１０２）は、第１の結果圧縮回路（２０６）と、再帰型圧縮回路（２０８）と、比較回路（２０９）とを有する（図示せず）。第２の結果判定回路（２０２）は、第２の結果圧縮回路（２０７）と、再帰型圧縮回路（２０８）と、比較回路（２０９）とを有する（図示せず）。
【０１３２】
すなわち、実施の形態１に係る半導体装置（１Ａ）は、テスト結果を判定する回路として、起動時診断と動作中診断で共用される共通結果判定装置（５）を有していたが、本実施の形態４に係る半導体装置（１Ｄ）は、テスト結果を判定する回路として、起動時診断と動作中診断とで別々に利用される回路を有している。半導体装置（１Ｄ）は、動作中診断に利用される回路として、第１の結果判定回路（１０２）と第１のタイマー（１０４）を有し、起動時診断に利用される回路として、第２の結果判定回路（２０２）と第２のタイマー（２０４）を有している。
【０１３３】
よって、本実施の形態４では、第１のテスト制御回路（１００）、パタン入力回路（１０１）、第１の結果判定回路（１０２）の一部（第１の結果圧縮回路（２０６））、及び、第１の期待値記憶回路（１０３）が、第１のテスト制御装置（３）として機能する。また、第２のテスト制御回路（２００）、パタン発生回路（２０１）、第２の結果判定回路（２０２）の一部（第２の結果圧縮回路（２０７））、及び、第２の期待値記憶回路（２０３）が、第２のテスト制御装置（４）として機能する。
【０１３４】
第１の結果判定回路（１０２）は、ＣＰＵ（１０）のスキャンチェーンから出力されるテスト結果を取得し、取得したテスト結果を第１の結果圧縮回路（２０６）及び再帰型圧縮回路（２０８）によって圧縮する。第１の結果判定回路（１０２）は、圧縮後のテスト結果と、第１の期待値記憶回路（１０３）から出力された第１の期待値とを、比較回路（２０９）によって比較する。なお、具体的なテスト結果の圧縮方法と、比較結果に応じたシステム制御回路（１５）への通知内容等については、実施の形態１と同様であるため、その説明を省略する。
【０１３５】
ここで、半導体装置（１Ｄ）は、第１のテスト制御回路（１００）、パタン入力回路（１０１）、第１の結果判定回路（１０２）、第１の期待値記憶回路（１０３）、及び、第１のタイマー（１０４）、を含む動作中診断装置（２０）を有している。動作中診断装置（２０）は、自身をスキャンテストするための複数のスキャンチェーンを有している。なお、動作中診断装置（２０）のスキャンチェーンのうち、ＣＰＵ（１０）における部分は、第１のテスト制御装置（３）によって利用されるＣＰＵ（１０）のスキャンチェーンと共用されていてもよい。そして、本実施の形態４では、実施の形態１と異なり、第２のテスト制御装置（４）がスキャンテストの対象とする回路は、ＣＰＵ（１０）のみではなく、ＣＰＵ（１０）を含む動作中診断装置（２０）である。よって、本実施の形態４では、実施の形態１と異なり、パタン発生回路（２０１）は、ＣＰＵ（１０）のみのスキャンチェーンではなく、動作中診断装置（２０）のスキャンチェーンにテストパタンを入力する。
【０１３６】
第２の結果判定回路（２０２）は、動作中診断装置（２０）のスキャンチェーンから出力されるテスト結果を取得し、取得したテスト結果を第２の結果圧縮回路（２０７）及び再帰型圧縮回路（２０８）によって圧縮する。第２の結果判定回路（２０２）は、圧縮後のテスト結果と、第２の期待値記憶回路（２０３）から出力された第２の期待値とを、比較回路（２０９）によって比較する。なお、具体的なテスト結果の圧縮方法と、比較結果に応じたシステム制御回路（１５）への通知内容等については、実施の形態１と同様であるため、その説明を省略する。
【０１３７】
第１のタイマー（１０４）及び第２のタイマー（２０４）のそれぞれの動作は、タイマー（２０５）の動作と同様であるため、説明を省略する。ただし、第１のタイマー（１０４）は、第２のテスト制御回路（２００）によるスキャンテスト実行時間は監視せず、第１のテスト制御回路（１００）によるスキャンテスト実行時間を監視する。また、第２のタイマー（２０４）は、第１のテスト制御回路（１００）によるスキャンテスト実行時間は監視せず、第２のテスト制御回路（２００）によるスキャンテスト実行時間を監視する。
【０１３８】
よって、第１のテスト制御回路（１００）は、スキャンテストを開始するときに、スキャンテストの開始を通知する開始通知信号を第１のタイマー（１０４）に出力する。第１のテスト制御回路（１００）は、スキャンテストを終了したときに、スキャンテストの終了を通知する終了通知信号を第１のタイマー（１０４）に出力する。
【０１３９】
また、第２のテスト制御回路（２００）は、スキャンテストを開始するときに、スキャンテストの開始を通知する開始通知信号を第２のタイマー（２０４）に出力する。第２のテスト制御回路（２００）は、スキャンテストを終了したときに、スキャンテストの終了を通知する終了通知信号を第２のタイマー（２０４）に出力する。
【０１４０】
遮断回路（１６）は、起動時診断におけるスキャンテスト中に、システムバス（１３）から動作中診断装置（２０）に出力される信号を遮断する。この信号は、例えば、システムバス（１３）から、ＣＰＵ（１０）、パタン入力回路（１０１）及び、第１のテスト制御回路（１００）のそれぞれに出力される信号である。また、遮断回路（１６）は、起動時診断におけるスキャンテスト中に、動作中診断装置（２０）からシステムバス（１３）に出力される信号を遮断する。この信号は、例えば、ＣＰＵ（１０）、パタン入力回路（１０１）、及び、第１のテスト制御回路（１００）のそれぞれからシステムバス（１３）に出力される信号である。
【０１４１】
これによれば、起動時診断中にシステムバス（１３）から動作中診断装置（２０）に出力された信号によって、動作中診断装置（２０）が誤動作を起こし、動作中診断装置（２０）が故障していないのに、第２の期待値と異なるテスト結果が得られてしまうことを防止することができる。また、起動時診断中に動作中診断装置（２０）からシステムバス（１３）に意図せず出力された信号によって、システムバス（１３）に接続される回路（内蔵メモリ（１１）及び外部Ｉ／Ｆ（１２）等）の誤動作が発生してしまうことを防止することができる。
【０１４２】
遮断回路（１７）は、起動時診断におけるスキャンテスト中に、動作中診断装置（２０）からシステム制御回路（１５）に出力される信号を遮断する。この信号は、例えば、第１の結果判定回路（１０２）（比較回路（２０９））から出力される通知信号、及び、第１のタイマー（１０４）から出力される通知信号である。これによれば、動時診断中に動作中診断装置（２０）からシステム制御回路（１５）に意図せず出力された通知信号によって、エラーを誤検出してしまうことを防止することができる。
【０１４３】
また、本実施の形態４では、このように、起動時診断と動作中診断とで診断を実施する回路を、共用せず、別々の回路としているため、選択回路（３００、３０１、３０２）は不要とされている。すなわち、本実施の形態４に係る半導体装置（１Ｄ）は、実施の形態１に係る半導体装置（１Ａ）と異なり、選択回路（３００、３０１、３０２）を有さない。
【０１４４】
［動作］
続いて、図９を参照して、実施の形態４に係る半導体装置（１Ｄ）の自己診断時の動作について説明する。図９は、実施の形態４に係る半導体装置（１Ｄ）の自己診断時の動作を示すフロー図である。
【０１４５】
図９では、各動作イベントが矢印で連結されており、矢印の向きに従って時系列にイベントを行うことが表されている。矢印が分岐しているところは処理が並列して実行されることを示している。なお、ひし形のイベントは、分岐を表す。ひし形のイベントは、基本的に、下向きの矢印がイベントの内容に対して正常な状態であった場合の次処理を指している。本実施の形態４における動作の説明は、図８に示す半導体装置（１Ｄ）の例と、図９に示す動作フローを照らし合わせながら行う。
【０１４６】
［動作フロー］
半導体装置（１Ｄ）は、その電源が投入され、起動時診断を実施する回路（２００〜２０４）のリセットが解除されると、その起動時診断を開始する。起動時診断が開始されると、システム制御回路（１５）は、動作中診断装置（２０）の診断の開始を指示する診断開始信号をアサートして第２のテスト制御回路（２００）に出力する。第２のテスト制御回路（２００）は、診断開始信号のアサートに応じて、動作中診断装置（２０）の診断を開始する（Ｓ３０１）。
【０１４７】
第２のテスト制御回路（２００）は、診断を開始したときに（動作中診断装置（２０）のスキャンテストを開始する前に）、システムバス（１３）と動作中診断装置（２０）との間で伝送される信号を遮断するように遮断回路（１６）を制御する。また、第２のテスト制御回路（２００）は、システムバス（１３）と動作中診断装置（２０）との間で伝送される信号を遮断するように遮断回路（１７）を制御する。これにより、上述したように、システムバス（１３）及びシステム制御回路（１５）が、診断中に誤動作すること等を防止する。
【０１４８】
第２のテスト制御回路（２００）は、診断を開始したときに、ＣＰＵ（１０）に対して実施するスキャンテストの開始を通知する開始通知信号を第２のタイマー（２０４）に出力する。第２のタイマー（２０４）の具体的な判定内容及び判定結果に応じた動作（Ｓ３０２）については、タイマー（２０５）と同様である（図１のステップＳ１０２と同様）ため、その説明は省略する。ここで、第２のタイマー（２０４）の制御も、上述したように、第２のテスト制御回路（２００）に限られず、システム制御回路（１５）が実施するようにしてもよい。
【０１４９】
第２のテスト制御回路（２００）は、動作中診断装置（２０）の診断を開始するため、パタン発生回路（２０１）にテストパタンの発生を指示し、動作中診断装置（２０）のスキャンテストを実施する。なお、スキャンテストにおける動作は、その対象がＣＰＵ（１０）のみではなく、ＣＰＵ（１０）を含む動作中診断装置（２０）となったこと以外は、実施の形態１と同様であるため、その説明は省略する。
【０１５０】
第２の結果判定回路（２０２）は、動作中診断装置（２０）から取得したテスト結果を圧縮し、圧縮後のテスト結果と、第２の期待値記憶回路（２０３）に格納された第２の期待値とが一致しているか否かを判定する（Ｓ３０３）。
【０１５１】
実施の形態１（図１のステップＳ１０３）と同様に、第２の結果判定回路（２０２）は、比較結果が一致する場合、正常を通知する通知信号をシステム制御回路（１５）に出力し（Ｓ３０３：正常）、比較結果が不一致である場合、エラーを通知する通知信号をシステム制御回路（１５）に出力する（Ｓ３０３：異常）。
【０１５２】
また、第２のテスト制御回路（２００）は、スキャンテストを終了した後（全てのテスト結果がスキャンチェーンから出力された後）に、システムバス（１３）と動作中診断装置（２０）との間で伝送される信号を遮断しないように遮断回路（１６）を制御する。また、第２のテスト制御回路（２００）は、システムバス（１３）と動作中診断装置（２０）との間で伝送される信号を遮断しないように遮断回路（１７）を制御する。
【０１５３】
動作中診断装置（２０）の診断結果が正常である場合（Ｓ３０３：正常）、実施の形態１で説明した図１のステップＳ１０４、Ｓ１０５と同様に、テスト制御回路（１０５）がＣＰＵ（１０）の起動を開始し（Ｓ３０４）、ＣＰＵ（１０）が処理を実行する（Ｓ３０５）。ＣＰＵ（１０）は、実施の形態１で説明した図１のステップＳ１０６、Ｓ１０７と同様に、所定時間が経過する毎に（Ｓ３０６：Ｙｅｓ）、第１のテスト制御回路（１００）に対してＣＰＵ（１０）の診断を指示して、その処理を停止させる（Ｓ３０７）。第１のテスト制御回路（１００）は、実施の形態１で説明した図１のステップＳ１０８と同様に、ＣＰＵ（１０）からの指示に応じて、ＣＰＵ（１０）の診断を開始する（Ｓ３０８）。
【０１５４】
第１のテスト制御回路（１００）は、診断を開始したときに、ＣＰＵ（１０）に対して実施するスキャンテストの開始を通知する開始通知信号を第１のタイマー（１０４）に出力する。第１のタイマー（１０４）の具体的な判定内容及び判定結果に応じた動作（Ｓ３０９）については、タイマー（２０５）と同様（図１のステップＳ１０９と同様）であるため、その説明は省略する。ここで、第１のタイマー（１０４）の制御も、上述したように、第１のテスト制御回路（１００）に限られず、システム制御回路（１５）が制御するようにしてもよい。
【０１５５】
第１のテスト制御回路（１００）は、ＣＰＵ（１０）の診断を開始するため、パタン入力回路（１０１）に、システムバス（１３）を介して、テストパタンの入力を指示し、ＣＰＵ（１０）のスキャンテストを実施する。なお、スキャンテストにおける動作は、実施の形態１と同様であるため、その説明は省略する。
【０１５６】
第１の結果判定回路（１０２）は、ＣＰＵ（１０）から取得したテスト結果を圧縮し、圧縮後のテスト結果と、第１の期待値記憶回路（１０３）に格納された第１の期待値とが一致しているか否かを判定する（Ｓ３１０）。
【０１５７】
実施の形態１（図１のステップＳ１１０）と同様に、第１の結果判定回路（１０２）は、比較結果が一致した場合、正常を通知する通知信号をシステム制御回路（１５）に出力し（Ｓ３１０：正常）、比較結果が不一致であった場合、エラーを通知する通知信号をシステム制御回路（１５）に出力する（Ｓ３１０：異常）。第１のタイマー（１０４）、第２のタイマー（２０４）、第１の結果判定回路（１０２）又は第２の結果判定回路（２０２）からエラーが通知された場合、システム制御回路（１５）は、実施の形態１で説明した図１のステップＳ１１１と同様に、速やかに半導体装置（１Ｄ）におけるシステムを停止させる処理を行い、半導体装置（１Ｄ）におけるシステムを停止させる（Ｓ３１１）。
【０１５８】
［特徴及び効果］
実施の形態４では、ＬＦを検出するための起動時診断として、ＣＰＵ（１０）を含む動作中診断装置（２０）全体を、診断の対象としている。言い換えると、ＣＰＵ（１０）とともに第１のテスト制御装置（３）のスキャンテストも実施するようにしている。本構成により、単一のＣＰＵ（１０）に対して動作中にスキャンテストを実施することで、ＣＰＵを二重化するよりも低コストでその安全性を担保すると同時に、動作中診断に用いられる回路（１０、１００〜１０４）の安全性についても担保する。
【０１５９】
＜実施の形態５＞
続いて、実施の形態５について説明する。以下の実施の形態５の説明では、上述した実施の形態４と同様の内容については、同一の符号を付す等して、適宜、その説明を省略する。
【０１６０】
［構成］
図１０を参照して、実施の形態５に係る半導体装置（１Ｅ）の構成について説明する。図１０は、実施の形態５に係る半導体装置（１Ｅ）の構成を示すブロック図である。図１０に示すように、半導体装置（１Ｅ）は、実施の形態４に係る半導体装置（１Ｅ）と比較して、遮断回路（１６）、（１７）、第２のテスト制御回路（２００）、パタン発生回路（２０１）、第２の結果判定回路（２０２）、第２の期待値記憶回路（２０３）、及び、第２のタイマー（２０４）を有さない点が異なる。また、半導体装置（１Ｅ）は、実施の形態４に係る半導体装置（１Ｅ）と比較して、第１のテスト制御回路（１００）、パタン入力回路（１０１）、第１の結果判定回路（１０２）、第１の期待値記憶回路（１０３）、及び、第１のタイマー（１０４）に代えて、テスト制御回路（６００）、パタン入力回路（６０１）、結果判定回路（６０２）、期待値記憶回路（６０３）、及び、タイマー（６０４）を有する点が異なる。また、半導体装置（１Ｅ）は、実施の形態４に係る半導体装置（１Ｅ）と比較して、さらに、ＲＯＭ（４００）と、選択回路（４０１）とを有する点が異なる。
【０１６１】
本実施の形態５では、テスト制御回路（６００）、パタン入力回路（６０１）、結果判定回路（６０２）、期待値記憶回路（６０３）、及び、タイマー（６０４）によって、起動時診断と動作中診断の両方を実施する。すなわち、本実施の形態５では、結果判定回路（６０２）は、第１の結果圧縮回路（２０６）と、第２の結果圧縮回路（２０７）と、再帰型圧縮回路（２０８）と、比較回路（２０９）とを有する（図示せず）。
【０１６２】
よって、本実施の形態５では、テスト制御回路（６００）、パタン入力回路（６０１）、結果判定回路（６０２）の一部（第１の結果圧縮回路（２０６）及び第２の結果圧縮回路（２０７））、期待値記憶回路（６０３）、及び、タイマー（６０４）は、第１のテスト制御装置（３）及び第２のテスト制御装置（４）として機能する。また、期待値記憶回路（６０３）は、動作中診断で利用される第１の期待値と、起動時診断で利用される第２の期待値の両方が予め格納されている。
【０１６３】
テスト制御回路（６００）は、実施の形態４に係る第１のテスト制御回路（１００）と比較し、さらに、起動時診断におけるＣＰＵ（１０）のスキャンテストも実施する点が異なる。すなわち、テスト制御回路（６００）は、半導体装置（１Ｅ）の起動時におけるシステム制御回路（１５）からの要求に従い、起動時診断におけるＣＰＵ（１０）のスキャンテストを実行する。
【０１６４】
パタン入力回路（６０１）は、選択回路（４０１）を介して、システムバス（１３）及びＲＯＭ（４００）と接続されている。ＲＯＭ（４００）は、起動時診断に使用される複数のテストパタンが予め格納されている。選択回路（４０１）は、システムバス（１３）及びＲＯＭ（４００）のうち、いずれか一方から出力されたテストパタンを選択的にパタン入力回路（６０１）に出力する。
【０１６５】
選択回路（４０１）は、起動時診断を開始するときに、パタン入力回路（６０１）との接続先としてＲＯＭ（４００）側が選択されるように、テスト制御回路（６００）、若しくは、システム制御回路（１５）によって制御される。例えば、テスト制御回路（６００）が、システム制御回路（１５）からの診断開始信号のアサートに応じて制御してもよく、システム制御回路（１５）が診断開始信号をアサートする前に制御してもよい。
【０１６６】
パタン入力回路（１０１）は、起動時診断においては、第１のテスト制御回路（１００）からの要求に従い、ＲＯＭ（４００）からテストパタンを読み込み、ＣＰＵ（１０）のスキャンチェーンに供給する。
【０１６７】
結果判定回路（６０２）は、実施の形態４に係る第２の結果判定回路（２０２）と同様に、ＣＰＵ（１０）のスキャンチェーンから出力されるテスト結果を取得し、取得したテスト結果を第２の結果圧縮回路（２０７）及び再帰型圧縮回路（２０８）によって圧縮する。結果判定回路（６０２）は、圧縮後のテスト結果と、期待値記憶回路（６０３）から出力された第２の期待値とを、比較回路（２０９）によって比較する。すなわち、結果判定回路（６０２）は、第２の結果判定回路（２０２）とは異なり、動作中診断装置（２０）ではなく、ＣＰＵ（１０）を診断する。なお、具体的なテスト結果の圧縮方法と、比較結果に応じたシステム制御回路（１５）への通知内容等については、実施の形態４に係る第２の結果判定回路（２０２）と同様であるため、その説明を省略する。
【０１６８】
タイマー（６０４）の動作は、実施の形態１に係るタイマー（２０５）の動作と同様であるため、説明を省略する。ただし、タイマー（６０４）は、実施の形態１に係るタイマー（２０５）と異なり、起動時診断と動作中診断とで異なるテスト制御回路（１００、２００）によるスキャンテスト実行時間を監視するのではなく、起動時診断と動作中診断の両方でテスト制御回路（６００）によるスキャンテスト実行時間を監視する点が異なる。
【０１６９】
動作中診断におけるテスト制御回路（６００）、パタン入力回路（６０１）、結果判定回路（６０２）、及び、タイマー（６０４）の動作は、実施の形態４に係る第１のテスト制御回路（１００）、パタン入力回路（１０１）、第１の結果判定回路（１０２）、及び、第１のタイマー（１０４）の動作と同様であるため、その説明を省略する。なお、本実施の形態５では、選択回路（４０１）は、動作中診断を開始するときに、パタン入力回路（６０１）との接続先としてシステムバス（１３）側が選択されるように、テスト制御回路（６００）、若しくは、ＣＰＵ（１０）によって制御される。例えば、テスト制御回路（６００）が、ＣＰＵ（１０）からの診断開始信号のアサートに応じて制御してもよく、ＣＰＵ（１０）が診断開始信号をアサートする前に制御してもよい。
【０１７０】
［動作］
本実施の形態５に係る半導体装置（１Ｅ）の動作については、実施の形態４に係る半導体装置（１Ｄ）の動作（図９に示した動作）と同様であるため、その説明を省略する。ただし、上述したように、半導体装置（１Ｅ）の動作は、半導体装置（１Ｄ）の動作と比較し、起動時診断と動作中診断の両方をテスト制御回路（６００）、パタン入力回路（６０１）、結果判定回路（６０２）、及び、タイマー（６０４）が実施する点と、起動時診断と動作中診断の開始時に選択回路（４０１）を制御する点と、起動時診断におけるテストパタンを発生するのではなく、ＲＯＭ（４００）から取得する点が異なる。
【０１７１】
［特徴及び効果］
本実施の形態５では、起動時診断と起動中診断を実施する回路を共用している。ここで、起動時は、システムバス（１３）を含む多くのモジュールは診断のために休止状態である。そのため、テストパタンを、システムバス（１３）を介して、取得することは困難である。その課題に対して、本実施の形態５では、起動時診断で利用するテストデータを専用のＲＯＭ（４００）に有するようにしている。すなわち、システムバス（１３）を初期化しているときに、ＲＯＭ（４００）からテストパタンを取得し、取得したテストパタンをＣＰＵ（１０）のスキャンチェーンに入力して起動時診断におけるスキャンテストを実施する。そして、システムバス（１３）の初期化後に、システムバス（１３）を介して外部メモリ（１４）からテストパタンを取得し、取得したテストパタンをＣＰＵ（１０）のスキャンチェーンに入力して動作中診断におけるスキャンテストを実施するようにしている。本構成により、起動時診断と起動中診断を実施する回路を共用しつつも、単一のＣＰＵ（１０）に対して動作中にスキャンテストを実施することで、ＣＰＵを二重化するよりも低コストでその安全性を担保すると同時に、動作中診断に用いられる診断装置の安全性についても担保することができる。
【０１７２】
＜実施の形態６＞
続いて、実施の形態６について説明する。以下の実施の形態６の説明では、上述した実施の形態５と同様の内容については、同一の符号を付す等して、適宜、その説明を省略する。
【０１７３】
［構成］
図１１を参照して、実施の形態６に係る半導体装置（１Ｆ）の構成について説明する。図１１は、実施の形態６に係る半導体装置（１Ｆ）の構成を示すブロック図である。図１１に示すように、半導体装置（１Ｆ）は、図１０に示した実施の形態５に係る半導体装置（１Ｅ）と比較して、さらに、外部Ｉ／Ｆ（１８）と、選択回路（４０２）とを有する点が異なる。また、半導体装置（１Ｆ）は、実施の形態５に係る半導体装置（１Ｅ）と比較して、ＲＯＭ（４００）を有さない点が異なる。
【０１７４】
本実施の形態６では、実施の形態５と異なり、外部メモリ（１４）に、起動時診断で使用するテストパタンと、動作中診断で使用するテストパタンの両方が格納されている。また、本実施の形態６では、実施の形態５と異なり、選択回路（４０１）に対して、ＲＯＭ（４００）に代えて、外部Ｉ／Ｆ（１８）が接続されている。また、外部メモリ（１４）は、選択回路（４０２）を介して、外部Ｉ／Ｆ（１２）及び外部Ｉ／Ｆ（１８）と接続される。外部Ｉ／Ｆ（１８）は、選択回路（４０２）を介して、外部メモリ１４と選択回路（４０１）との間でデータの送受信を行う回路である。
【０１７５】
すなわち、本実施の形態６では、選択回路（４０１）は、システムバス（１３）及び外部Ｉ／Ｆ（１８）のうち、いずれか一方から入力されたテストパタンを選択的にパタン入力回路（６０１）に出力する。また、選択回路（４０２）は、外部メモリ（１４）から入力されたテストパタンを、外部Ｉ／Ｆ（１２）及び外部Ｉ／Ｆ（１８）のうち、いずれか一方に選択的に出力する。
【０１７６】
よって、本実施の形態６では、選択回路（４０１）は、起動時診断を開始するときに、パタン入力回路（６０１）との接続先として外部Ｉ／Ｆ（１８）側が選択されるように、テスト制御回路（６００）、若しくは、システム制御回路（１５）によって制御される。また、選択回路（４０２）は、起動時診断を開始するときに、外部メモリ（１４）との接続先として外部Ｉ／Ｆ（１８）側が選択されるように、テスト制御回路（６００）、若しくは、システム制御回路（１５）によって制御される。例えば、テスト制御回路（６００）が、システム制御回路（１５）からの診断開始信号のアサートに応じて制御してもよく、システム制御回路（１５）が診断開始信号をアサートする前に制御してもよい。
【０１７７】
したがって、パタン入力回路（６０１）は、起動時診断においては、第１のテスト制御回路（１００）からの要求に従い、システムバス（１３）を介さず、外部Ｉ／Ｆ（１８）を介して、外部メモリ（１４）からテストパタンを読み込み、ＣＰＵ（１０）のスキャンチェーンに供給する。
【０１７８】
そして、選択回路（４０１）は、動作中診断を開始するときに、パタン入力回路（６０１）との接続先としてシステムバス（１３）側が選択されるように、テスト制御回路（６００）、若しくは、ＣＰＵ（１０）によって制御される。また、選択回路（４０２）は、動作中診断を開始するときに、外部メモリ（１４）との接続先として外部Ｉ／Ｆ（１２）側が選択されるように、テスト制御回路（６００）、若しくは、ＣＰＵ（１０）によって制御される。例えば、テスト制御回路（６００）が、ＣＰＵ（１０）からの診断開始信号のアサートに応じて制御してもよく、ＣＰＵ（１０）が診断開始信号をアサートする前に制御してもよい。
【０１７９】
なお、動作中診断における動作は、実施の形態５と同様であるため、その説明を省略する。
【０１８０】
［動作］
本実施の形態６に係る半導体装置（１Ｆ）の動作については、実施の形態５に係る半導体装置（１Ｅ）の動作と同様であるため、その説明を省略する。ただし、半導体装置（１Ｆ）の動作は、半導体装置（１Ｅ）の動作と比較し、起動時診断と動作中診断の開始時にさらに選択回路（４０２）を制御する点と、起動時診断におけるテストパタンをＲＯＭ（４００）ではなく、外部メモリ（１４）から取得する点が異なる。
【０１８１】
［特徴及び効果］
本実施の形態６は、実施の形態５と同様に、起動時診断と起動中診断を実施する回路を共用している。すなわち、本実施の形態６では、システムバス（１３）を初期化しているときに、外部Ｉ／Ｆ（１８）を介して外部メモリ（１４）からテストパタンを取得し、取得したテストパタンをＣＰＵ（１０）のスキャンチェーンに入力して起動時診断におけるスキャンテストを実施する。そして、システムバス（１３）の初期化後に、システムバス（１３）を介して外部メモリ（１４）からテストパタンを取得し、取得したテストパタンをＣＰＵ（１０）のスキャンチェーンに入力して動作中診断におけるスキャンテストを実施するようにしている。本構成により、起動時診断と起動中診断を実施する回路を共用しつつも、単一のＣＰＵ（１０）に対して動作中にスキャンテストを実施することで、ＣＰＵを二重化するよりも低コストでその安全性を担保すると同時に、動作中診断に用いられる診断装置の安全性についても担保する。また、半導体装置（１Ｆ）がＲＯＭ（４００）を有する必要がないため、より低コストとすることができる。
【０１８２】
＜実施の形態７＞
続いて、実施の形態７について説明する。以下の実施の形態７の説明では、上述した実施の形態１と同様の内容については、同一の符号を付す等して、適宜、その説明を省略する。
【０１８３】
［構成］
［全体構成］
図１２を参照して、実施の形態７に係る半導体装置（１Ｇ）の構成について説明する。図１２は、実施の形態７に係る半導体装置（１Ｇ）の構成を示すブロック図である。図１２に示すように、半導体装置（１Ｇ）は、実施の形態１に係る半導体装置（１Ａ）と比較して、１つのＣＰＵ（１０）ではなく、複数のＣＰＵ（１０Ａ〜１０Ｄ）を有する点が異なる。また、半導体装置（１Ｇ）は、実施の形態１に係る半導体装置（１Ａ）と比較して、さらに、選択回路（５０１）を有する点が異なる。
【０１８４】
ＣＰＵ（１０Ａ〜１０Ｄ）のそれぞれは、実施の形態１に係るＣＰＵ（１０）と同様であるため、その説明は省略する。すなわち、半導体装置（１Ｇ）は、同一構成のＣＰＵを複数搭載したマルチプロセッサ構成を採用している。
【０１８５】
［第１のテスト制御装置（３）］
第１のテスト制御回路（１００）は、システムバス（１３）を介して、ＣＰＵ（１０Ａ〜１０Ｄ）のそれぞれと接続されている。第１のテスト制御回路（１００）は、ＣＰＵ（１０Ａ）からの要求に従い、ＣＰＵ（１０Ａ）のスキャンテストを実行し、ＣＰＵ（１０Ｂ）からの要求に従い、ＣＰＵ（１０Ｂ）のスキャンテストを実行し、ＣＰＵ（１０Ｃ）からの要求に従い、ＣＰＵ（１０Ｃ）のスキャンテストを実行し、ＣＰＵ（１０Ｄ）からの要求に従い、ＣＰＵ（１０Ｄ）のスキャンテストを実行する。
【０１８６】
全てのＣＰＵ（１０Ａ〜１０Ｄ）は、選択回路（３００）を介して、パタン入力回路（１０１）及びパタン発生回路（２０１）と接続されている。すなわち、パタン入力回路（１０１）及びパタン発生回路（２０１）のそれぞれから出力されたテストパタンは、選択回路（３００）を介して、全てのＣＰＵ（１０Ａ〜１０Ｄ）に入力される。
【０１８７】
ここで、第１のテスト制御回路（１００）は、スキャンテストを実施する場合、ＣＰＵ（１０Ａ〜１０Ｄ）のそれぞれに出力されるスキャンイネーブル信号のうち、テスト対象のＣＰＵに出力されるスキャンイネーブル信号をアサートし、他のＣＰＵのそれぞれに出力されるスキャンイネーブル信号はネゲートされたままとする。
【０１８８】
ＣＰＵ（１０Ａ〜１０Ｄ）のそれぞれは、アサートされたスキャンイネーブル信号が入力されている間、スキャンシフト動作を行って、選択回路（３００）を介して入力されるテストパタンを自身が有するスキャンチェーンにスキャンインするとともに、そのスキャンチェーンに格納されたテスト結果をスキャンアウトする。一方、ＣＰＵ（１０Ａ〜１０Ｄ）のそれぞれは、ネゲートされたスキャンイネーブル信号が入力されている間は、スキャンシフト動作は行わず、選択回路（３００）を介して入力されるテストパタンを自身が有するスキャンチェーンにはスキャンインせず、また、そのスキャンチェーンに格納されたデータもスキャンアウトしない。
【０１８９】
このような動作により、テスト対象のＣＰＵのみに対してスキャンテストを実施するとともに、テスト対象外のＣＰＵは、通常動作を継続することを可能としている。
【０１９０】
［第２のテスト制御装置（４）］
本実施の形態７では、実施の形態１と同様に、第２のテスト制御回路（２００）は、システム制御回路（１５）からの要求に従い、ＣＰＵ（１０Ａ〜１０Ｄ）のそれぞれのスキャンテストを実行する。ただし、本実施の形態７では、実施の形態１と異なり、その要求において、システム制御回路（１５）が第２のテスト制御回路（２００）に対してテスト対象とするＣＰＵを指定する。第２のテスト制御回路（２００）は、システム制御回路（１５）から指定されたＣＰＵのスキャンテストを実施する。
【０１９１】
第２のテスト制御回路（２００）も、第１のテスト制御回路（１００）と同様に、テスト対象のＣＰＵに対するスキャンイネーブル信号をアサートすることで、テスト対象のＣＰＵに対してスキャンテストを実施する。その具体的な動作については、上述と同様であるため、その説明を省略する。
【０１９２】
［共通結果判定装置（５）］
第１の結果圧縮回路（２０６）及び第２の結果圧縮回路（２０７）は、選択回路（５０１）を介して、ＣＰＵ（１０Ａ〜１０Ｄ）のそれぞれと接続されている。選択回路（５０１）は、ＣＰＵ（１０Ａ〜１０Ｄ）のうち、いずれか１つから出力されたテスト結果を選択的に第１の結果圧縮回路（２０６）及び第２の結果圧縮回路（２０７）のそれぞれに出力する。選択回路（５０１）は、起動時診断を開始するときに、第１の結果圧縮回路（２０６）及び第２の結果圧縮回路（２０７）との接続先としてテスト対象のＣＰＵが選択されるように、第２のテスト制御回路（２００）、若しくは、システム制御回路（１５）によって制御される。例えば、第２のテスト制御回路（２００Ａ〜２００Ｄ）のそれぞれが、システム制御回路（１５）からの診断開始信号のアサートに応じて制御してもよく、システム制御回路（１５）が診断開始信号をアサートする前に制御してもよい。
【０１９３】
また、選択回路（５０１）は、動作中診断を開始するときに、第１の結果圧縮回路（２０６）及び第２の結果圧縮回路（２０７）との接続先としてテスト対象のＣＰＵが選択されるように、第１のテスト制御回路（１００）、若しくは、テスト対象のＣＰＵによって制御される。例えば、第１のテスト制御回路（１００）が、テスト対象のＣＰＵからの診断開始信号のアサートに応じて制御してもよく、テスト対象のＣＰＵが診断開始信号をアサートする前に制御してもよい。
【０１９４】
これにより、第１の結果圧縮回路（２０６）及び第２の結果圧縮回路（２０７）は、スキャンテストが実施されているＣＰＵからテスト結果を取得して圧縮することが可能とされている。なお、共通結果判定装置（５）の動作については、実施の形態１と同様であるため、その説明を省略する。
【０１９５】
［動作］
続いて、図１３及び図１４を参照して、実施の形態７に係る半導体装置（１Ｇ）の自己診断時の動作について説明する。図１３及び図１４は、実施の形態７に係る半導体装置（１Ｇ）の自己診断時の動作を示すフロー図である。
【０１９６】
図１３及び図１４では、各動作イベントが矢印で連結されており、矢印の向きに従って時系列にイベントを行うことが表されている。矢印が分岐しているところは処理が並列して実行されることを示している。なお、ひし形のイベントは、分岐を表す。ひし形のイベントは、基本的に、下向きの矢印がイベントの内容に対して正常な状態であった場合の次処理を指しており、右向きの矢印がイベントの内容に対して異常な状態であった場合の次処理を指す。本実施の形態７における動作の説明は、図１２に示す半導体装置（１Ｇ）の例と、図１３及び図１４に示す動作フローを照らし合わせながら行う。
【０１９７】
［全体動作フロー］
半導体装置（１Ｇ）は、その電源が投入され、第２のテスト制御装置（４）及び共通結果判定装置（５）のリセットが解除されると、最初に、ＬＦを検出するための起動時診断を行う。ＣＰＵ（１０Ａ〜１０Ｄ）のそれぞれに対して所定の順序で起動時診断を実施する。ここでＬＦが検出されなければ、半導体装置（１Ｇ）は、通常動作を開始する。
【０１９８】
また、半導体装置（１Ｇ）は、通常動作中、定期的に、ＣＰＵ（１０Ａ〜１０Ｄ）のうち、いずれか１つのＣＰＵの処理を中断して、処理を中断したＣＰＵのＳＰＦを検出するための動作中診断を行う。ここでＳＰＦが検出されなければ、半導体装置（１Ｇ）は、起動時診断を実施したＣＰＵは通常動作を再開する。なお、ＳＰＦの検出のための診断動作は、例えば、ＣＰＵ（１０Ａ〜１０Ｄ）のそれぞれに対して所定の順序で実施し、２つ以上のＣＰＵに対して同時には実施しない。
【０１９９】
［起動時診断フロー（ＬＦ検出フロー）］
起動時診断の診断動作が開始されると、システム制御回路（１５）は、比較回路（２０９）の診断を実施する（Ｓ４０１）。システム制御回路（１５）は、比較回路（２０９）の診断開始を指示する診断開始信号をアサートして第２のテスト制御回路（２００）に出力する。第２のテスト制御回路（２００）は、比較回路（２０９）の診断開始を指示する診断開始信号のアサートに応じて、比較回路（２０９）の診断を実施する。なお、このステップＳ４０１における動作は、実施の形態１の変形例で説明した図４のステップＳ１１２の動作と同様であるため、その説明は省略する。
【０２００】
次に、システム制御回路（１５）は、ＣＰＵ（１０Ａ）の診断開始を指示する診断開始信号をアサートして第２のテスト制御回路（２００）に出力する。第２のテスト制御回路（２００）は、ＣＰＵ（１０Ａ）の診断開始を指示する診断開始信号のアサートに応じて、ＣＰＵ（１０Ａ）の診断を開始する（Ｓ４０２）。なお、ステップＳ４０２の具体的な動作については、実施の形態１における図３のステップＳ１０１と同様であるため、その説明を省略する。これについては、後述するＣＰＵ（１０Ｂ〜１０Ｄ）に対する動作においても同様である。
【０２０１】
ただし、本実施の形態７では、実施の形態１と比較し、第２のテスト制御回路（２００）又はシステム制御回路（１５）が、ＣＰＵ（１０Ａ）の起動時診断を開始する前に、テスト対象のＣＰＵ（１０Ａ）が選択されるように選択回路（５０１）を制御する点が異なる。
【０２０２】
ここで、第２のテスト制御回路（２００）は、最初のＣＰＵ（１０Ａ）の診断を開始する前に、実施の形態１における図３のステップＳ１０２と同様に、タイマー（２０５）を起動する（Ｓ４０３）。具体的なタイマー（２０５）による判定内容及び判定結果に応じた通知内容については、実施の形態１における図３のステップＳ１０２と同様であるため、その説明を省略する。ただし、本実施の形態７では、タイマー（２０５）は、最初のＣＰＵ（１０Ａ）の診断が開始されたときから、後述する最後のＣＰＵ（１０Ｄ）の診断が終了するまでの時間を監視する。
【０２０３】
そして、ＣＰＵ（１０Ａ）のスキャンテストの終了後、比較回路（２０９）は、スキャンテストで得られたテスト結果を判定する（Ｓ４０４）。なお、ステップＳ４０４の具体的な動作については、実施の形態１における図３のステップＳ１０４と同様であるため、その説明を省略する。これについては、後述するＣＰＵ（１０Ｂ〜１０Ｄ）に対する動作においても同様である。
【０２０４】
システム制御回路（１５）は、比較回路（２０９）からＣＰＵ（１０Ａ）の診断結果としてエラーが通知された場合（Ｓ４０４：異常）、速やかにシステムを停止させる処理を行い、システムを停止させる（Ｓ４２３）。すなわち、システム制御回路（１５）は、半導体装置（１Ｇ）の起動を抑止する。これについては、後述するＣＰＵ（１０Ｂ〜１０Ｄ）に対する動作においても同様である。
【０２０５】
比較回路（２０９）からＣＰＵ（１０Ａ）の診断結果として正常を通知する通知信号が出力された場合（Ｓ４０４：正常）、システム制御回路（１５）は、ＣＰＵ（１０Ｂ）の診断開始を指示する診断開始信号をアサートして第２のテスト制御回路（２００）に出力する。第２のテスト制御回路（２００）は、ＣＰＵ（１０Ｂ）の診断開始を指示する診断開始信号のアサートに応じて、ＣＰＵ（１０Ｂ）の診断を開始する（Ｓ４０５）。なお、第２のテスト制御回路（２００）又はシステム制御回路（１５）は、ＣＰＵ（１０Ｂ）の起動時診断を開始する前に、テスト対象のＣＰＵ（１０Ｂ）が選択されるように選択回路（５０１）を制御する。そして、ＣＰＵ（１０Ｂ）のスキャンテストの終了後、比較回路（２０９）は、スキャンテストで得られたテスト結果を判定する（Ｓ４０６）。
【０２０６】
比較回路（２０９）からＣＰＵ（１０Ｂ）の診断結果として正常を通知する通知信号が出力された場合（Ｓ４０６：正常）、システム制御回路（１５）は、ＣＰＵ（１０Ｃ）の診断開始を指示する診断開始信号をアサートして第２のテスト制御回路（２００）に出力する。第２のテスト制御回路（２００）は、ＣＰＵ（１０Ｃ）の診断開始を指示する診断開始信号のアサートに応じて、ＣＰＵ（１０Ｃ）の診断を開始する（Ｓ４０７）。なお、第２のテスト制御回路（２００）又はシステム制御回路（１５）は、ＣＰＵ（１０Ｃ）の起動時診断を開始する前に、テスト対象のＣＰＵ（１０Ｃ）が選択されるように選択回路（５０１）を制御する。そして、ＣＰＵ（１０Ｃ）のスキャンテストの終了後、比較回路（２０９）は、スキャンテストで得られたテスト結果を判定する（Ｓ４０８）。
【０２０７】
比較回路（２０９）からＣＰＵ（１０Ｃ）の診断結果として正常を通知する通知信号が出力された場合（Ｓ４０８：正常）、システム制御回路（１５）は、ＣＰＵ（１０Ｄ）の診断開始を指示する診断開始信号をアサートして第２のテスト制御回路（２００）に出力する。第２のテスト制御回路（２００）は、ＣＰＵ（１０Ｄ）の診断開始を指示する診断開始信号のアサートに応じて、ＣＰＵ（１０Ｄ）の診断を開始する（Ｓ４０９）。なお、第２のテスト制御回路（２００）又はシステム制御回路（１５）は、ＣＰＵ（１０Ｄ）の起動時診断を開始する前に、テスト対象のＣＰＵ（１０Ｄ）が選択されるように選択回路（５０１）を制御する。そして、ＣＰＵ（１０Ｄ）のスキャンテストの終了後、比較回路（２０９）は、スキャンテストで得られたテスト結果を判定する（Ｓ４１０）。
【０２０８】
また、第２のテスト制御回路（２００）は、最後のＣＰＵ（１０Ｄ）のスキャンテストを終了したときに、スキャンテストの終了を通知する通知信号をタイマー（２０５）に出力する。タイマー（２０５）は、第２のテスト制御回路（２００）からの通知信号に応じて、経過時間の計測を終了する。
【０２０９】
なお、タイマー（２０５）による監視は、ＣＰＵ（１０Ａ〜１０Ｄ）のそれぞれの起動時診断を行う単位で実施するようにしてもよい。例えば、第２のテスト制御回路（２００）は、ＣＰＵ（１０Ａ〜１０Ｄ）のそれぞれのスキャンテストの実行を開始するときに開始通知信号をタイマー（２０５）に出力し、ＣＰＵ（１０Ａ〜１０Ｄ）のそれぞれのスキャンテストの実行を終了したときに終了通知信号をタイマー（２０５）に出力するようにしてもよい。
【０２１０】
また、ＣＰＵ（１０Ａ〜１０Ｄ）のうち、診断結果としてエラーが通知されたＣＰＵのみを縮退して、残りのＣＰＵを起動することで、半導体装置（１Ｇ）におけるシステムを立ち上げるようにしてもよい。
【０２１１】
［動作中診断（ＳＰＦ検出フロー）］
全てのＣＰＵ（１０Ａ〜１０Ｄ）の診断結果が正常である場合、システム制御回路（１５）は、実施の形態１で説明した図１のステップＳ１０４、１０５と同様に、全てのＣＰＵ（１０Ａ〜１０Ｄ）の起動を開始し（Ｓ４１１、Ｓ４１８、Ｓ４２１、Ｓ４２４）、ＣＰＵ（１０Ａ〜１０Ｄ）のそれぞれが処理を実行する（Ｓ４１２、Ｓ４１９、Ｓ４２２、Ｓ４２５）。
【０２１２】
この処理には、実施の形態１と同様に、定期的に自己診断を行う処理も含まれている。ここで、本実施の形態７では、複数のＣＰＵが同時に自己診断状態に入らないように、システム制御回路（１５）によって、若しくは、ＣＰＵ（１０Ａ〜１０Ｄ）間の協調動作によって制御される。本実施の形態７では、ＣＰＵ（１０Ａ）、ＣＰＵ（１０Ｂ）、ＣＰＵ（１０Ｃ）、ＣＰＵ（１０Ｄ）の順に自己診断が実行される例について説明する。
【０２１３】
最初にＣＰＵ（１０Ａ）は、所定時間が経過すると（Ｓ４１３：Ｙｅｓ）、自己診断を実行する（Ｓ１０）。このステップＳ１０の動作には、ステップＳ４１４〜Ｓ４１７の動作が含まれるが、それらの具体的な動作は、実施の形態１（図３）のステップＳ１０７〜Ｓ１１０と同様であるため、それらの説明は省略する。なお、第１のテスト制御回路（１００）又はＣＰＵ（１０Ａ）は、ＣＰＵ（１０Ａ）の動作中診断を開始する前に、テスト対象のＣＰＵ（１０Ａ）が選択されるように選択回路（５０１）を制御する。また、診断結果が異常であった場合における動作（Ｓ４１６：異常又はＳ４１７：異常、Ｓ４２７）も、実施の形態１（図３）のステップＳ１０９：異常又はＳ１１０：異常、Ｓ１１１の動作と同様であるため、その説明を省略する。
【０２１４】
ＣＰＵ（１０Ａ）の診断結果が正常である場合（Ｓ４１７：正常）、システム制御回路（１５）は、ＣＰＵ（１０Ａ）を再起動する（Ｓ４１１）。ＣＰＵ（１０Ａ）は、再起動後、停止していた処理を再開する（Ｓ４１２）。
【０２１５】
次に、ＣＰＵ（１０Ｂ）は、所定時間が経過すると（Ｓ４２０：Ｙｅｓ）、自己診断を実行する（Ｓ１１）。すなわち、ＣＰＵ（１０Ｂ）について所定時間の経過を計測する起算時刻は、ＣＰＵ（１０Ａ）について所定時間の経過を計測する起算時刻よりも後の時刻となる。このステップＳ１１の動作は、ステップＳ１０と同様であるため、その説明を省略する。なお、第１のテスト制御回路（１００）又はＣＰＵ（１０Ｂ）は、ＣＰＵ（１０Ｂ）の動作中診断を開始する前に、テスト対象のＣＰＵ（１０Ｂ）が選択されるように選択回路（５０１）を制御する。ＣＰＵ（１０Ｂ）の診断結果が正常である場合、システム制御回路（１５）は、ＣＰＵ（１０Ｂ）を再起動する（Ｓ４１８）。ＣＰＵ（１０Ｂ）は、再起動後、停止していた処理を再開する（Ｓ４１９）。
【０２１６】
次に、ＣＰＵ（１０Ｃ）は、所定時間が経過すると（Ｓ４２３：Ｙｅｓ）、自己診断を実行する（Ｓ１２）。すなわち、ＣＰＵ（１０Ｃ）について所定時間の経過を計測する起算時刻は、ＣＰＵ（１０Ｂ）について所定時間の経過を計測する起算時刻よりも後の時刻となる。このステップＳ１２の動作は、ステップＳ１０と同様であるため、その説明を省略する。なお、第１のテスト制御回路（１００）又はＣＰＵ（１０Ｃ）は、ＣＰＵ（１０Ｃ）の動作中診断を開始する前に、テスト対象のＣＰＵ（１０Ｃ）が選択されるように選択回路（５０１）を制御する。ＣＰＵ（１０Ｃ）の診断結果が正常である場合、システム制御回路（１５）は、ＣＰＵ（１０Ｃ）を再起動する（Ｓ４２１）。ＣＰＵ（１０Ｃ）は、再起動後、停止していた処理を再開する（Ｓ４２２）。
【０２１７】
次に、ＣＰＵ（１０Ｄ）は、所定時間が経過すると（Ｓ４２６：Ｙｅｓ）、自己診断を実行する（Ｓ１３）。すなわち、ＣＰＵ（１０Ｄ）について所定時間の経過を計測する起算時刻は、ＣＰＵ（１０Ｃ）について所定時間の経過を計測する起算時刻よりも後の時刻となる。このステップＳ１３の動作は、ステップＳ１０と同様であるため、その説明を省略する。なお、第１のテスト制御回路（１００）又はＣＰＵ（１０Ｄ）は、ＣＰＵ（１０Ｄ）の動作中診断を開始する前に、テスト対象のＣＰＵ（１０Ｄ）が選択されるように選択回路（５０１）を制御する。ＣＰＵ（１０Ｄ）の診断結果が正常である場合、システム制御回路（１５）は、ＣＰＵ（１０Ｄ）を再起動する（Ｓ４２４）。ＣＰＵ（１０Ｄ）は、再起動後、停止していた処理を再開する（Ｓ４２５）。
【０２１８】
システム制御回路（１５）は、各自己診断によるエラーが比較回路（２０９）やタイマー（２０５）から通知された場合、速やかにシステムを停止させる処理を行い、システムを停止させる（Ｓ４２７）。
【０２１９】
なお、上述のＣＰＵ（１０Ａ〜１０Ｄ）のそれぞれの自己診断（起動中診断）を重複しないタイミングで定期的に実行する方法として、任意の方法を採用するようにしてもよい。例えば、ＣＰＵ（１０Ａ）にタイマーから定期的に割り込みを通知するようにし、ＣＰＵ（１０Ａ）は、タイマーからの割り込みに応じて自己診断を実行するようにしてもよい。そして、ＣＰＵ（１０Ａ〜１０Ｃ）のそれぞれは、再起動後の動作再開時に、次に自己診断を実行するＣＰＵ（１０Ｂ〜１０Ｄ）のそれぞれにＣＰＵ間割り込みを通知することで、そのＣＰＵ間割り込みに応じて、ＣＰＵ（１０Ｂ〜１０Ｄ）のそれぞれが自己診断を実行するようにしてもよい。また、ＣＰＵ（１０Ａ〜１０Ｄ）のそれぞれに対して、ＣＰＵ（１０Ａ〜１０Ｄ）のそれぞれに対応する複数のタイマーから、自己診断（起動中診断）が重複しないタイミングで定期的に割り込みを通知するようにし、ＣＰＵ（１０Ａ〜１０Ｄ）のそれぞれが、タイマーからの割り込みに応じて自己診断を実行するようにしてもよい。
【０２２０】
［特徴及び効果］
実施の形態７は、マルチＣＰＵを搭載した半導体装置（１Ｇ）においてＬＦ及びＳＰＦを検出する構成を示したもので、第１のテスト制御装置（３）と第２のテスト制御装置（４）と共通結果判定装置（５）を複数のＣＰＵで共有化している。すなわち、第１のテスト制御装置（３）及び第２のテスト制御装置（４）は、複数のＣＰＵ（１０Ａ〜１０Ｄ）のそれぞれのスキャンテストを所定の順序で実施する。これによれば、回路面積を削減することができる。また、実施の形態１における特徴と効果も併せ持っており、搭載するＣＰＵの数に比例して診断用のＣＰＵが増えることが無いため、ＣＰＵ数が増えるほど、本実施の形態７による面積、電力削減効果は大きなものとなる。
【０２２１】
＜実施の形態８＞
続いて、実施の形態８について説明する。以下の実施の形態８の説明では、上述した実施の形態１と同様の内容については、同一の符号を付す等して、適宜、その説明を省略する。
【０２２２】
［構成］
［全体構成］
図１５を参照して、実施の形態８に係る半導体装置（１Ｈ）の構成について説明する。図１５は、実施の形態８に係る半導体装置（１Ｈ）の構成を示すブロック図である。図１５に示すように、半導体装置（１Ｇ）は、実施の形態１に係る半導体装置（１Ａ）と比較して、複数のＣＰＵ（１０Ａ、１０Ｂ、１０Ｃ、１０Ｄ）と、複数の第２のテスト制御回路（２００Ａ〜２００Ｄ）と、複数のパタン発生回路（２０１Ａ〜２０１Ｄ）と、複数の結果圧縮回路（２０７Ａ〜２０７Ｄ）と、複数の選択回路（３００Ａ〜３００Ｄ）とを有する点が異なる。また、半導体装置（１Ｇ）は、実施の形態１に係る半導体装置（１Ａ）と比較して、さらに、ＡＮＤゲート（５００）と、選択回路（５０１）と、選択回路（５０２）と、ＡＮＤゲート（５０３）とを有する点が異なる。
【０２２３】
ＣＰＵ（１０Ａ〜１０Ｄ）のそれぞれは、実施の形態１に係るＣＰＵ（１０）と同様であるため、その説明は省略する。すなわち、半導体装置（１Ｈ）は、同一構成のＣＰＵを複数搭載したマルチプロセッサ構成を採用している。
【０２２４】
第２のテスト制御回路（２００Ａ〜２００Ｄ）のそれぞれは、実施の形態１に係る第２のテスト制御回路（２００）と同様であるため、その説明は省略する。すなわち、半導体装置（１Ｈ）は、同一構成のＣＰＵを複数搭載したマルチプロセッサ構成を採用している。
【０２２５】
パタン発生回路（２０１Ａ〜２０１Ｄ）のそれぞれは、実施の形態１に係るパタン発生回路（２０１）と同様であるため、その説明は省略する。第２の結果圧縮回路（２０７Ａ〜２０７Ｄ）のそれぞれは、実施の形態１に係る第２の結果圧縮回路（２０７）と同様であるため、その説明は省略する。選択回路（３００Ａ〜３００Ｄ）のそれぞれは、実施の形態１に係る選択回路（３００）と同様であるため、その説明は省略する。
【０２２６】
ＡＮＤゲート５００は、複数の第２のテスト制御回路（２００Ａ〜２００Ｄ）のそれぞれから出力された開始通知信号をＡＮＤ演算し、演算結果となる信号を開始通知信号としてタイマー（２０５）に出力する。また、ＡＮＤゲート５０４は、複数の第２のテスト制御回路（２００Ａ〜２００Ｄ）のそれぞれから出力された終了通知信号をＡＮＤ演算し、演算結果となる信号を終了通知信号としてタイマー（２０５）に出力する。
【０２２７】
本実施の形態８では、実施の形態７と異なり、ＣＰＵ（１０Ａ〜１０Ｄ）のそれぞれから出力されたテスト結果が、選択回路（５０１）を介さずに、第２の結果圧縮回路（２０７Ａ〜２０７Ｄ）のそれぞれに入力される。よって、本実施の形態８に係る選択回路（５０１）は、実施の形態７に係る選択回路（５０１）と比較して、テスト結果を、第２の結果圧縮回路（２０７Ａ〜２０７Ｄ）には出力せず、第１の結果圧縮回路（２０６）に出力する。また、これにより、起動時診断を開始するときに、選択回路（５０１）の制御は不要となる。
【０２２８】
選択回路（５０２）は、複数の結果圧縮回路（２０７Ａ〜２０７Ｄ）のうち、いずれか１つから出力されたテスト結果を選択的に選択回路（３０１）に出力する。
【０２２９】
［第１のテスト制御装置（３）］
第１のテスト制御回路（１００）は、システムバス（１３）を介して、ＣＰＵ（１０Ａ〜１０Ｄ）のそれぞれと接続されている。第１のテスト制御回路（１００）は、ＣＰＵ（１０Ａ）からの要求に従い、ＣＰＵ（１０Ａ）のスキャンテストを実行し、ＣＰＵ（１０Ｂ）からの要求に従い、ＣＰＵ（１０Ｂ）のスキャンテストを実行し、ＣＰＵ（１０Ｃ）からの要求に従い、ＣＰＵ（１０Ｃ）のスキャンテストを実行し、ＣＰＵ（１０Ｄ）からの要求に従い、ＣＰＵ（１０Ｄ）のスキャンテストを実行する。
【０２３０】
ＣＰＵ（１０Ａ〜１０Ｄ）のそれぞれは、選択回路（３００Ａ〜３００Ｄ）を介して、パタン入力回路（１０１）及びパタン発生回路（２０１Ａ〜２０１Ｄ）のそれぞれと接続されている。すなわち、パタン発生回路（２０１Ａ〜２０１Ｄ）のそれぞれから出力されたテストパタンは、選択回路（３００Ａ〜３００Ｄ）のそれぞれを介して、ＣＰＵ（１０Ａ〜１０Ｄ）のそれぞれに入力される。
【０２３１】
パタン入力回路（１０１）は、全ての選択回路（３００Ａ〜３００Ｄ）のそれぞれにテストパタンを出力する。パタン入力回路（１０１）から出力されたテストパタンは、選択回路（３００Ａ〜３００Ｄ）のそれぞれを介して、全てのＣＰＵ（１０Ａ〜１０Ｄ）に入力される。
【０２３２】
ここで、第１のテスト制御回路（１００）は、スキャンテストを実施する場合、ＣＰＵ（１０Ａ〜１０Ｄ）のそれぞれに出力されるスキャンイネーブル信号のうち、テスト対象のＣＰＵに出力されるスキャンイネーブル信号をアサートし、他のＣＰＵのそれぞれに出力されるスキャンイネーブル信号はネゲートされたままとする。これにより、実施の形態７と同様に、テスト対象のＣＰＵのみに対してスキャンテストを実施するとともに、テスト対象外のＣＰＵは、通常動作を継続することを可能としている。
【０２３３】
［第２のテスト制御装置（４）］
第２のテスト制御回路（２００Ａ〜２００Ｄ）のそれぞれは、システム制御回路（１５）と接続されている。第２のテスト制御回路（２００Ａ）は、システム制御回路（１５）からの要求に従い、ＣＰＵ（１０Ａ）のスキャンテストを実行する。第２のテスト制御回路（２００Ｂ）は、システム制御回路（１５）からの要求に従い、ＣＰＵ（１０Ｂ）のスキャンテストを実行する。第２のテスト制御回路（２００Ｃ）は、システム制御回路（１５）からの要求に従い、ＣＰＵ（１０Ｃ）のスキャンテストを実行する。第２のテスト制御回路（２００Ｄ）は、システム制御回路（１５）からの要求に従い、ＣＰＵ（１０Ｄ）のスキャンテストを実行する。
【０２３４】
第２の結果圧縮回路（２０７Ａ〜２０７Ｄ）のそれぞれは、ＣＰＵ（１０Ａ〜１０Ｄ）のそれぞれと接続される。第２の結果圧縮回路（２０７Ａ）は、実施の形態１の第２の結果圧縮回路（２０７）と同様に、ＣＰＵ（１０Ａ）のスキャンチェーンから出力されるテスト結果を圧縮する。第２の結果圧縮回路（２０７Ｂ）は、実施の形態１の第２の結果圧縮回路（２０７）と同様に、ＣＰＵ（１０Ｂ）のスキャンチェーンから出力されるテスト結果を圧縮する。第２の結果圧縮回路（２０７Ｃ）は、実施の形態１の第２の結果圧縮回路（２０７）と同様に、ＣＰＵ（１０Ｃ）のスキャンチェーンから出力されるテスト結果を圧縮する。第２の結果圧縮回路（２０７Ｄ）は、実施の形態１の第２の結果圧縮回路（２０７）と同様に、ＣＰＵ（１０Ｄ）のスキャンチェーンから出力されるテスト結果を圧縮する。
【０２３５】
［共通結果判定装置（５）］
ＡＮＤゲート（５００）は、第２のテスト制御回路（２００Ａ〜２００Ｄ）のそれぞれから出力された開始通知信号をＡＮＤ演算し、演算結果となる開始通知信号をタイマー（２０５）に出力する。すなわち、タイマー（２０５）は、第２のテスト制御回路（２００Ａ〜２００Ｄ）の全てが開始通知信号を出力した時点からの経過時間の計測を開始する。
【０２３６】
また、ＡＮＤゲート（５０３）は、第２のテスト制御回路（２００Ａ〜２００Ｄ）のそれぞれから出力された終了通知信号をＡＮＤ演算し、演算結果となる終了通知信号をタイマー（２０５）に出力する。すなわち、タイマー（２０５）は、第２のテスト制御回路（２００Ａ〜２００Ｄ）の全てが終了通知信号を出力した時点で経過時間の計測を終了する。
【０２３７】
［動作］
続いて、図１６及び図１７を参照して、実施の形態８に係る半導体装置（１Ｈ）の自己診断時の動作について説明する。図１６及び図１７は、実施の形態８に係る半導体装置（１Ｈ）の自己診断時の動作を示すフロー図である。
【０２３８】
図１６及び図１７では、各動作イベントが矢印で連結されており、矢印の向きに従って時系列にイベントを行うことが表されている。矢印が分岐しているところは処理が並列して実行されること処理を示している。なお、ひし形のイベントは、分岐を表す。ひし形のイベントは、基本的に、下向きの矢印がイベントの内容に対して正常な状態であった場合の次処理を指しており、右向きの矢印がイベントの内容に対して異常な状態であった場合の次処理を指す。本実施の形態８における動作の説明は、図１５に示す半導体装置（１Ｈ）の例と、図１６及び図１７に示す動作フローを照らし合わせながら行う。
【０２３９】
［全体動作フロー］
半導体装置（１Ｈ）は、その電源が投入され、複数の第２のテスト制御装置（４）及び共通結果判定装置（５）のリセットが解除されると、最初に、ＬＦを検出するための診断動作を行う。ＬＦの検出には、複数の第２のテスト制御装置（４）と共通結果判定装置（５）が用いられ、ＣＰＵ（１０Ａ〜１０Ｄ）のそれぞれの起動時診断は、そのテスト結果の判定を除き、同時並列に実施される。ここでＬＦが検出されなければ、半導体装置（１Ｈ）は、通常動作を開始する。
【０２４０】
また、半導体装置（１Ｈ）は、通常動作中、定期的に、ＣＰＵ（１０Ａ〜１０Ｄ）のうち、いずれか１つのＣＰＵの処理を中断して、処理を中断したＣＰＵのＳＰＦを検出するための動作中診断を行う。ここでＳＰＦが検出されなければ、半導体装置（１Ｈ）は、起動時診断を実施したＣＰＵは通常動作を再開する。なお、ＳＰＦの検出のための診断動作は、例えば、ＣＰＵ（１０Ａ〜１０Ｄ）のそれぞれに対して所定の順序で実施し、２つ以上のＣＰＵに対して同時には実施しない。
【０２４１】
［起動時診断（ＬＦ検出フロー）］
起動時診断の診断動作が開始されると、システム制御回路（１５）は、比較回路（２０９）の診断を実施する（Ｓ５０１）。システム制御回路（１５）は、比較回路（２０９）の診断開始を指示する診断開始信号をアサートして第２のテスト制御回路（２００Ａ〜２００Ｄ）に出力する。第２のテスト制御回路（２００Ａ〜２００Ｄ）は、比較回路（２０９）の診断開始を指示する診断開始信号のアサートに応じて、比較回路（２０９）の診断を実施する。なお、このステップＳ５０１における動作は、実施の形態１の変形例で説明した図４のステップＳ１１２の動作と同様であるため、その説明は省略する。
【０２４２】
また、システム制御回路（１５）は、第２のテスト制御回路（２００Ａ〜２００Ｄ）のいずれか１つに対してアサートした診断開始信号を出力して、ＣＰＵ（１０Ａ〜１０Ｄ）のうち、その第２のテスト制御回路に対応するＣＰＵのスキャンテストを実施することによって比較回路（２０９）を診断するようにしてもよい。また、実施の形態１の変形例で説明したように、スキャンテストを実施せず、システム制御回路（１５）が、比較回路（２０９）に異なる値の比較のみを実施させるようにしてもよい。
【０２４３】
次に、システム制御回路（１５）は、ＣＰＵ（１０Ａ〜１０Ｄ）のそれぞれの診断開始を指示する診断開始信号をアサートして第２のテスト制御回路（２００Ａ〜２００Ｄ）のそれぞれに出力する。第２のテスト制御回路（２００Ａ〜２００Ｄ）のそれぞれは、ＣＰＵ（１０Ａ〜１０Ｄ）のそれぞれの診断開始を指示する診断開始信号のアサートに応じて、ＣＰＵ（１０Ａ〜１０Ｄ）のそれぞれの診断を開始する（Ｓ５０２、Ｓ５０３、Ｓ５０４、Ｓ５０５）。なお、ステップＳ５０２、Ｓ５０３、Ｓ５０４、Ｓ５０５のそれぞれの具体的な動作については、実施の形態１における図３のステップＳ１０１と同様であるため、その説明を省略する。
【０２４４】
ただし、本実施の形態８では、複数のパタン発生回路（２０１Ａ〜２０１Ｄ）のそれぞれが、複数のＣＰＵ（１０Ａ〜１０Ｄ）のそれぞれに並列にテストパタンを入力する。また、複数の第２の結果圧縮回路（２０７Ａ〜２０７Ｄ）のそれぞれが、複数のＣＰＵ（１０Ａ〜１０Ｄ）のそれぞれのスキャンチェーンからテスト結果を取得し、圧縮する。
【０２４５】
ここで、第２のテスト制御回路（２００Ａ〜２００Ｄ）のそれぞれは、ＣＰＵ（１０Ａ〜１０Ｄ）のそれぞれの診断を開始する前に、実施の形態１における図３のステップＳ１０２と同様に、タイマー（２０５）を起動する（Ｓ５０６）。具体的なタイマー（２０５）による判定内容及び判定結果に応じた通知内容については、実施の形態１における図３のステップＳ１０２と同様であるため、その説明を省略する。ただし、本実施の形態８では、実施の形態１とは異なり、上述したように、タイマー（２０５）は、第２のテスト制御回路（２００Ａ〜２００Ｄ）の全てから開始通知信号が出力されたときに、経過時間の計測を開始する。
【０２４６】
全てのスキャンテスト結果を第２の結果圧縮回路（２０７Ａ〜２０７Ｄ）のそれぞれで圧縮後、ＣＰＵ（１０Ａ）、ＣＰＵ（１０Ｂ）、ＣＰＵ（１０Ｃ）、ＣＰＵ（１０Ｄ）の順にテスト結果を判定する。
【０２４７】
最初に、第２のテスト制御回路（２００Ａ）又は第２の結果圧縮回路（２０７Ａ）は、第２の結果圧縮回路（２０７Ａ）が選択されるように選択回路（５０２）を制御する。ＣＰＵ（１０Ａ）に対応する第２の結果圧縮回路（２０７Ａ）は、選択回路（５０２）を介して圧縮後のテスト結果を１ビットずつシリアルに再帰型圧縮回路（２０８）に対して出力する。テスト結果を判定していないＣＰＵ（１０Ｂ〜１０Ｄ）に対応する他の第２の結果圧縮回路（２０７Ｂ〜２０７Ｄ）は、圧縮後のテスト結果を保持したまま停止する。再帰型圧縮回路（２０８）は、第２の結果圧縮回路（２０７Ａ）からのＣＰＵ（１０Ａ）のテスト結果を再圧縮する。比較回路（２０９）は、再帰型圧縮回路（２０８）で圧縮後のテスト結果を判定する（Ｓ５０７）。なお、ステップＳ５０７の具体的な動作については、実施の形態１における図３のステップＳ１０４と同様であるため、その説明を省略する。これについては、後述するＣＰＵ（１０Ｂ〜１０Ｄ）に対する動作においても同様である。
【０２４８】
システム制御回路（１５）は、比較回路（２０９）からＣＰＵ（１０Ａ）の診断結果としてエラーが通知された場合（Ｓ５０７：異常）、速やかにシステムを停止させる処理を行い、システムを停止させる（Ｓ５２７）。すなわち、システム制御回路（１５）は、半導体装置（１Ｈ）の起動を抑止する。これについては、後述するＣＰＵ（１０Ｂ〜１０Ｄ）に対する動作においても同様である。
【０２４９】
次に、第２のテスト制御回路（２００Ｂ）又は第２の結果圧縮回路（２０７Ｂ）は、第２の結果圧縮回路（２０７Ｂ）が選択されるように選択回路（５０２）を制御する。ＣＰＵ（１０Ｂ）に対応する第２の結果圧縮回路（２０７Ｂ）は、選択回路（５０２）を介して圧縮後のテスト結果を１ビットずつシリアルに再帰型圧縮回路（２０８）に対して出力する。テスト結果を判定していないＣＰＵ（１０Ｃ、１０Ｄ）に対応する他の第２の結果圧縮回路（２０７Ｃ、２０７Ｄ）は、圧縮後のテスト結果を保持したまま停止する。再帰型圧縮回路（２０８）は、第２の結果圧縮回路（２０７Ｂ）からのＣＰＵ（１０Ｂ）のテスト結果を再圧縮する。比較回路（２０９）は、再帰型圧縮回路（２０８）で圧縮後のテスト結果を判定する（Ｓ５０８）。
【０２５０】
次に、第２のテスト制御回路（２００Ｃ）又は第２の結果圧縮回路（２０７Ｃ）は、第２の結果圧縮回路（２０７Ｃ）が選択されるように選択回路（５０２）を制御する。ＣＰＵ（１０Ｃ）に対応する第２の結果圧縮回路（２０７Ｃ）は、選択回路（５０２）を介して圧縮後のテスト結果を１ビットずつシリアルに再帰型圧縮回路（２０８）に対して出力する。テスト結果を判定していないＣＰＵ（１０Ｄ）に対応する他の第２の結果圧縮回路（２０７Ｄ）は、圧縮後のテスト結果を保持したまま停止する。再帰型圧縮回路（２０８）は、第２の結果圧縮回路（２０７Ｃ）からのＣＰＵ（１０Ｃ）のテスト結果を再圧縮する。比較回路（２０９）は、再帰型圧縮回路（２０８）で圧縮後のテスト結果を判定する（Ｓ５０９）。
【０２５１】
次に、第２のテスト制御回路（２００Ｄ）又は第２の結果圧縮回路（２０７Ｄ）は、第２の結果圧縮回路（２０７Ｄ）が選択されるように選択回路（５０２）を制御する。ＣＰＵ（１０Ｄ）に対応する第２の結果圧縮回路（２０７Ｄ）は、選択回路（５０２）を介して圧縮後のテスト結果を１ビットずつシリアルに再帰型圧縮回路（２０８）に対して出力する。再帰型圧縮回路（２０８）は、第２の結果圧縮回路（２０７Ｄ）からのＣＰＵ（１０Ｄ）のテスト結果を再圧縮する。比較回路（２０９）は、再帰型圧縮回路（２０８）で圧縮後のテスト結果を判定する（Ｓ５１０）。
【０２５２】
［起動中診断（ＳＰＦ検出フロー）］
全てのＣＰＵ（１０Ａ〜１０Ｄ）の診断結果が正常である場合、システム制御回路（１５）は、ステップＳ５１１〜Ｓ５２７、Ｓ２０〜Ｓ２３の動作を行う。なお、ステップＳ５１１〜Ｓ５２７、Ｓ２０〜Ｓ２３の動作は、実施の形態７におけるステップＳ４１１〜４２７、Ｓ１０〜１３の動作と同様であるため、それらの説明は省略する。
【０２５３】
［特徴及び効果］
実施の形態８は、実施の形態７に対して、ＬＦを検出するためのスキャンテストを実施する装置（第２のテスト制御装置（４））をＣＰＵ毎に設けたものである。すなわち、複数の第２のテスト制御装置のそれぞれが、相互に並行して起動時診断におけるスキャンテストのそれぞれの実施するようにしている。これにより、複数のＣＰＵのＬＦ検出が同時に実施できるため、起動時診断にかかる時間を短縮することができる。
【０２５４】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【０２５５】
なお、実施の形態７、８では、複数の被テスト回路として、マルチプロセッサにおける複数のＣＰＵを対象とした例について説明したが、これに限られない。マルチコアにおける複数のコアを対象としてもよい。すなわち、被テスト回路として、各種演算回路を対象とすることができる。
【０２５６】
また、実施の形態７、８では、起動中診断を２つ以上のＣＰＵに対して同時には実施しない例について説明したが、これに限られない。起動中診断を２つ以上のＣＰＵに対してＣＰＵ（例えば、２つ又は３つ）に対して同時に実施するようにしてもよい。ただし、好ましくは、上述したように、起動中診断を２つ以上のＣＰＵに対して同時に実施しないようにすることで、起動中診断時におけるシステム性能の劣化を低減することができる。
【０２５７】
また、実施の形態３では、半導体装置（１Ｃ）の起動中に起動時診断を実施していない被テスト回路（５０、６０）のみに対して、半導体装置（１Ｃ）の起動完了後に、起動時診断を実施する例について説明したが、これに限られない。例えば、半導体装置（１Ｃ）の起動中に起動時診断を実施した被テスト回路（４０）に対しても、半導体装置（１Ｃ）の起動完了後に、起動時診断を実施するようにしてもよい。例えば、システム制御回路（１５）が、被テスト回路（４０）の起動時診断を終了した後に第２のテスト制御装置（５２）に対する診断開始信号をネゲートする。そして、半導体装置（１Ｃ）の起動完了後に、被テスト回路（４０）が、自身を含む被テスト回路（４０、５０、６０）に対応する第２のテスト制御装置（４２、５２、６２）のそれぞれに対してシステムバス（１３）を介してアサートされた診断開始信号を出力してもよい。
【符号の説明】
【０２５８】
１、１Ａ、１Ｂ、１Ｃ、１Ｄ、１Ｅ、１Ｆ、１Ｇ、１Ｈ  半導体装置
２、４０、５０、６０  被テスト回路
３、４１、５１、６１  第１のテスト制御装置
４、４２、５２、６２  第２のテスト制御装置
５、４３、５３、６３  共通結果判定装置
１０、１０Ａ、１０Ｂ、１０Ｃ、１０Ｄ  ＣＰＵ
１１  内蔵メモリ
１２  外部Ｉ／Ｆ
１３  システムバス
１４  外部メモリ
１５  システム制御回路
１６、１７  遮断回路
２０  動作中診断装置
４４、５４、６４、５００  ＡＮＤゲート
４５、５５、６５  ＯＲゲート
７０  テスト対象設定回路
１００  第１のテスト制御回路
１０１  パタン入力回路
１０２  第１の結果判定回路
１０３  第１の期待値記憶回路
１０４  第１のタイマー
２００、２００Ａ、２００Ｂ、２００Ｃ、２００Ｄ  第２のテスト制御回路
２０１、２０１Ａ、２０１Ｂ、２０１Ｃ、２０１Ｄ  パタン発生回路
２０２  第２の結果判定回路
２０３  第２の期待値記憶回路
２０４  第２のタイマー
２０５  タイマー
２０６  第１の結果圧縮回路
２０７、２０７Ａ、２０７Ｂ、２０７Ｃ、２０７Ｄ  第２の結果圧縮回路
２０８  再帰型圧縮回路
２０９  比較回路
２０３  第２の期待値記憶回路
３００、３００Ａ、３００Ｂ、３００Ｃ、３００Ｄ、３０１、３０２、４０１、４０２、５０１、５０２  選択回路
４００  ＲＯＭ
６００  テスト制御回路
６０１  パタン入力回路
６０２  結果判定回路
６０３  期待値記憶回路
【図１】
0006462870.tif 000002
【図２】
0006462870.tif 000003
【図３】
0006462870.tif 000004
【図４】
0006462870.tif 000005
【図５】
0006462870.tif 000006
【図６】
0006462870.tif 000007
【図７】
0006462870.tif 000008
【図８】
0006462870.tif 000009
【図９】
0006462870.tif 000010
【図１０】
0006462870.tif 000011
【図１１】
0006462870.tif 000012
【図１２】
0006462870.tif 000013
【図１３】
0006462870.tif 000014
【図１４】
0006462870.tif 000015
【図１５】
0006462870.tif 000016
【図１６】
0006462870.tif 000017
【図１７】
0006462870.tif 000018