(57)【要約】【課題】システムの稼働中に実施する自己診断にかかるオーバヘッド時間を低減できる半導体装置を提供することにある。【解決手段】半導体装置は、入力データを保持する複数のフリップフロップと、前記複数のフリップフロップからの出力の多数決結果を出力する多数決回路と、を含む。自己診断において、前記複数のフリップフロップの内の１つのフリップフロップをスキャンチェーンに含ませ、前記複数のフリップフロップの残りのフリップフロップにデータを保持させる。【選択図】図４
2019191064.tif 000002
【特許請求の範囲】
【請求項１】
入力データを保持する複数のフリップフロップと、
前記複数のフリップフロップからの出力の多数決結果を出力する多数決回路と、を含み、
自己診断において、前記複数のフリップフロップの内の１つのフリップフロップをスキャンチェーンに含ませ、
前記複数のフリップフロップの残りのフリップフロップにデータを保持させる、
半導体装置。
【請求項２】
請求項１の半導体装置において、
前記自己診断の実行後において、前記残りフリップフロップに保持されたデータを前記多数決回路に入力し、
前記多数決回路の多数決結果を、前記複数のフリップフロップに復元する、半導体装置。
【請求項３】
請求項１の半導体装置において、
さらに、エラー判定回路を含み、
前記エラー判定回路は、前記残りフリップフロップに保持されたデータが不一致の場合、エラーを通知する、半導体装置。
【請求項４】
スキャン制御部と、
機能ブロックと、を含み、
前記機能ブロックは、
組み合わせ回路と、
複数のフリップフロップブロックと、を含み、
前記スキャン制御部は、リフレッシュ信号と、スキャンイネーブル信号と、第１保持制御信号と、第２保持制御信号と、第３保持制御信号と、を生成し、
前記スキャン制御部は、自己診断において、スキャンイネーブル信号によって、前記複数のフリップフロップブロックをシリアルに接続してスキャンチェーンを構成し、
前記複数のフリップフロップブロックの各々は、
データ入力端子と、
第１スキャン入力端子、第２スキャン入力端子、および第３スキャン入力端子と、
データを保持する第１フリップフロップ、第２フリップフロップおよび第３フリップフロップと、
前記第１フリップフロップ、前記第２フリップフロップおよび前記第３フリップフロップの出力のそれぞれに接続された第１スキャン出力端子、第２スキャン出力端子および第３スキャン出力端子と、
前記前記第１フリップフロップ、前記第２フリップフロップおよび前記第３フリップフロップの出力の多数決結果を出力する多数決回路と、
前記リフレッシュ信号に基づいて、前記データ入力端子の値と前記多数決結果との一方を選択する第1選択回路、第２選択回路および第３選択回路と、
前記スキャンイネーブル信号に基づいて、前記第１選択回路の出力と前記第１スキャン入力端子の値との一方を選択する第４選択回路と、
前記スキャンイネーブル信号に基づいて、前記第２選択回路の出力と前記第２スキャン入力端子の値との一方を選択する第５選択回路と、
前記スキャンイネーブル信号に基づいて、前記第３選択回路の出力と前記第３スキャン入力端子の値との一方を選択する第６選択回路と、
前記第１保持制御信号に基づいて、前記第４選択回路の出力と前記第１フリップフロップの出力との一方を選択し、前記第１フリップフロップの入力へ供給する第７選択回路と、
前記第２保持制御信号に基づいて、前記第５選択回路の出力と前記第２フリップフロップの出力との一方を選択し、前記第２フリップフロップの入力へ供給する第８選択回路と、
前記第３保持制御信号に基づいて、前記第６選択回路の出力と前記第３フリップフロップの出力との一方を選択し、前記第３フリップフロップの入力へ供給する第９選択回路と、を含む、
半導体装置。
【請求項５】
請求項４の半導体装置において、
前記複数のフリップフロップブロックの各々は、エラー判定回路を含み、
前記エラー判定回路は、前記第１フリップフロップ、前記第２フリップフロップおよび前記第３フリップフロップに保持されたデータが不一致の場合、エラーを通知する、半導体装置。
【請求項６】
請求項５の半導体装置において、
前記スキャン制御部は、
前記スキャンイネーブル信号に基づいて、前記第４選択回路に前記第１スキャン入力端子の値を選択させ、
前記第１保持制御信号に基づいて、前記第７選択回路に前記第４選択回路の出力を選択させて、前記第１フリップフロップを前記スキャンチェーンに含ませ、
前記第２保持制御信号に基づいて、前記第８選択回路に前記第２フリップフロップの出力を選択させ、
前記第３保持制御信号に基づいて、前記第９選択回路に前記第３フリップフロップの出力を選択させる、半導体装置。
【請求項７】
請求項６の半導体装置において、
前記エラー判定回路は、前記第２フリップフロップおよび前記第３フリップフロップに保持されたデータが不一致の場合、エラーを通知する、半導体装置。
【請求項８】
請求項６の半導体装置において、
前記スキャン制御部は、
前記自己診断の実行後において、前記第２フリップフロップおよび前記第３フリップフロップに保持されたデータを前記多数決回路に入力し、
前記多数決回路の多数決結果を、前記第１フリップフロップ、前記第２フリップフロップおよび前記第３フリップフロップに復元する様に、前記リフレッシュ信号、前記スキャンイネーブル信号、前記第１保持制御信号、前記第２保持制御信号および前記第３保持制御信号を生成する、半導体装置。
【請求項９】
請求項５の半導体装置において、
前記スキャン制御部は、
前記スキャンイネーブル信号に基づいて、前記第５選択回路に前記第２スキャン入力端子の値を選択させ、
前記第１保持制御信号に基づいて、前記第７選択回路に前記第１フリップフロップの出力を選択させ、
前記第２保持制御信号に基づいて、前記第８選択回路に前記第５選択回路の出力を選択させて、前記第２フリップフロップを前記スキャンチェーンに含ませ、
前記第３保持制御信号に基づいて、前記第９選択回路に前記第３フリップフロップの出力を選択させる、半導体装置。
【請求項１０】
請求項５の半導体装置において、
前記スキャン制御部は、
前記スキャンイネーブル信号に基づいて、前記第６選択回路に前記第３スキャン入力端子の値を選択させ、
前記第１保持制御信号に基づいて、前記第７選択回路に前記第１フリップフロップの出力を選択させ、
前記第２保持制御信号に基づいて、前記第８選択回路に前記第２フリップフロップの出力を選択させ、
前記第３保持制御信号に基づいて、前記第９選択回路に前記第６選択回路の出力を選択させて、前記第３フリップフロップを前記スキャンチェーンに含ませ、
半導体装置。
【請求項１１】
請求項５の半導体装置において、
前記スキャン制御部は、
前記スキャンイネーブル信号に基づいて、前記第４選択回路に前記第１スキャン入力端子の値を選択させ、
前記スキャンイネーブル信号に基づいて、前記第５選択回路に前記第２スキャン入力端子の値を選択させ、
前記第１保持制御信号に基づいて、前記第７選択回路に前記第４選択回路の出力を選択させて、前記第１フリップフロップを前記スキャンチェーンに含ませ、
前記第２保持制御信号に基づいて、前記第８選択回路に前記第５選択回路の出力を選択させて、前記第２フリップフロップを前記スキャンチェーンに含ませ、
前記第３保持制御信号に基づいて、前記第９選択回路に前記第３フリップフロップの出力を選択させる、半導体装置。
【請求項１２】
請求項１１の半導体装置において、
前記スキャン制御部は、
前記自己診断の実行後において、前記第３フリップフロップに保持されたデータを前記第１ないし第３フリップフロップに復元する様に、前記リフレッシュ信号、前記スキャンイネーブル信号、前記第１保持制御信号、前記第２保持制御信号および前記３保持制御信号を生成する、半導体装置。
【請求項１３】
請求項５の半導体装置において、
前記スキャン制御部は、
前記スキャンイネーブル信号に基づいて、前記第４選択回路に前記第１スキャン入力端子の値を選択させ、
前記スキャンイネーブル信号に基づいて、前記第６選択回路に前記第３スキャン入力端子の値を選択させ、
前記第１保持制御信号に基づいて、前記第７選択回路に前記第４選択回路の出力を選択させて、前記第１フリップフロップを前記スキャンチェーンに含ませ、
前記第２保持制御信号に基づいて、前記第８選択回路に前記第２フリップフロップの出力を選択させ、
前記第３保持制御信号に基づいて、前記第９選択回路に前記第６選択回路の出力を選択させて、前記第３フリップフロップを前記スキャンチェーンに含ませる、半導体装置。
【請求項１４】
請求項５の半導体装置において、
前記スキャン制御部は、
前記スキャンイネーブル信号に基づいて、前記第５選択回路に前記第２スキャン入力端子の値を選択させ、
前記スキャンイネーブル信号に基づいて、前記第６選択回路に前記第３スキャン入力端子の値を選択させ、
前記第１保持制御信号に基づいて、前記第７選択回路に前記第１フリップフロップの出力を選択させ、
前記第２保持制御信号に基づいて、前記第８選択回路に前記第５選択回路の出力を選択させて、前記第２フリップフロップを前記スキャンチェーンに含ませ、
前記第３保持制御信号に基づいて、前記第９選択回路に前記第６選択回路の出力を選択させて、前記第３フリップフロップを前記スキャンチェーンに含ませる、半導体装置。
【請求項１５】
自己診断実行制御部と、
第１スキャン制御部および第２スキャン制御部と、
第１機能ブロックおよび第２機能ブロックと、を含み、
前記第１スキャン制御部は、前記第１機能ブロックの自己診断を制御し、
前記第２スキャン制御部は、前記第２機能ブロックの自己診断を制御し、
前記第１機能ブロックおよび前記第２機能ブロックの各々は、
組み合わせ回路と、
複数のフリップフロップブロックと、を含み、
前記第１スキャン制御部および前記第２スキャン制御部の各々は、前記自己診断において、前記複数のフリップフロップブロックをシリアルに接続してスキャンチェーンを構成し、
前記複数のフリップフロップブロックの各々は、
入力データを保持する複数のフリップフロップと、
前記複数のフリップフロップからの出力の多数決結果を出力する多数決回路と、を含み、
前記第１スキャン制御部および前記第２スキャン制御部の各々は、
前記自己診断において、前記複数のフリップフロップの内の１つのフリップフロップを前記スキャンチェーンに含ませ、
前記複数のフリップフロップの残りのフリップフロップにデータを保持させ、
前記自己診断実行制御部は、
前記第１機能ブロックの未使用時において、前記第１スキャン制御部へ前記自己診断の開始を指示し、
前記第２機能ブロックの未使用時において、前記第２スキャン制御部へ前記自己診断の開始を指示する、
半導体装置。
【請求項１６】
請求項１５の半導体装置において、
前記第１機能ブロックおよび前記第２機能ブロックの各々は、
前記自己診断の実行後において、前記残りのフリップフロップに保持されたデータを前記多数決回路に入力し、
前記多数決回路の多数決結果を、前記複数のフリップフロップに復元する、半導体装置。
【請求項１７】
請求項１５の半導体装置において、
前記複数のフリップフロップブロックの各々は、さらに、エラー判定回路を含み、
前記エラー判定回路は、前記残りのフリップフロップに保持されたデータが不一致の場合、エラーを通知する、半導体装置。
【請求項１８】
請求項１５の半導体装置において、
前記第１スキャン制御部および前記第２スキャン制御部の各々は、
前記自己診断において、前記スキャンチェーンに含ませる前記１つのフリップフロップを他のフリップフロップへ順次切り替える、半導体装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は半導体装置に関し、例えば自己診断機能を備える半導体装置に適用可能である。
【背景技術】
【０００２】
車載電子機器等の機能安全規格として、国際標準化機構のＩＳＯ２６２６２が注目を集めている。機能安全とは、車載電子機器の構成要素であるマイクロコントローラ等の半導体装置に故障が発生したとしても、機能的な工夫を施すことによって要求され得る最低限の安全を確保することである。ＩＳＯ２６２６２では、高い故障検出率が要求されるため、車載用マイクロコントローラでは、ＢＩＳＴ（Build In Self Test）を行うためのスキャン回路が実装される。そしてＢＩＳＴの実行は、マイクロコントローラに電源が投入されてからマイクロコントローラの実動作（エンジン制御、ブレーキ制御等の各種車載制御）が始まるまでに行われるのが一般的である。
【０００３】
近年では、車載用マイクロコントローラの稼働中、すなわち、車載電子機器等のシステムの稼働中に、車載用マイクロコントローラの一部の機能（未使用の周辺回路等）を切り離し、切り離した機能に対して自己診断（ＢＩＳＴの実行）を実施し、自己診断の実施後に切り離した機能を復帰させるという対応が求められるようになってきた。
【０００４】
自動車に利用される車載電子機器などのように、システム稼働に必要なパラメータ等を保持する保持回路(フリップフロップ)には高い安全性が求められる。そのため、ＴＭＲ（ｔｒｉｐｌｅ ｍｏｄｕｌａｒ ｒｅｄｕｎｄａｎｔ）構成の保持回路を用いて、保持するパラメータ値の安全性を高める技術が提案されている（特許文献１参照）。
【０００５】
また、内部状態の退避・回復させるため、対象回路が保持するパラメータ値を含む内部状態がスキャンチェーンを利用して全てバックアップメモリに退避させ、バックアップメモリに退避された内部状態がスキャンチェーンを利用して対象回路に回復させる技術が提案されている（特許文献２参照）。特許文献２に記載の技術によれば、バックアップ完了後に自己診断を実施し、自己診断終了後に対象回路の内部状態を正しい状態に回復させることが可能である。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１１−１８８２０３号公報
【特許文献２】特開２００８−２５１０１３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、特許文献２に記載の技術は、スキャンチェーンを用いて内部状態の退避／回復を行うため、退避／回復の処理に時間（オーバヘッド時間）が長くかかってしまう虞がある。また、内部状態の退避／回復を行うための専用のバックアップメモリが必要になってしまう。
【０００８】
本開示の課題は、システムの稼働中に実施する自己診断にかかるオーバヘッド時間を低減できる半導体装置を提供することにある。
【０００９】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１０】
本開示のうち代表的なものの概要を簡単に説明すれば下記の通りである。
【００１１】
すなわち、半導体装置は、入力データを保持する複数のフリップフロップと、前記複数のフリップフロップからの出力の多数決結果を出力する多数決回路と、を含む。自己診断において、前記複数のフリップフロップの内の１つのフリップフロップをスキャンチェーンに含ませ、前記複数のフリップフロップの残りのフリップフロップにデータを保持させる。
【発明の効果】
【００１２】
上記半導体装置によれば、システムの稼働中に実施する自己診断にかかるオーバヘッド時間を低減することが可能である。
【図面の簡単な説明】
【００１３】
【図１】実施例に係る半導体装置のテスト構成の概略を説明するための図である。
【図２】実施例に係る機能ブロックのテスト時の構成を概略的に示す図である。
【図３】実施例に係る半導体装置の機能ブロックのテスト時の構成を概念的に示す図である。
【図４】図１のＴＭＲ構成のフリップフロップブロックの回路図である。
【図５】図４のエラー判定回路の回路図である。
【図６】図４の多数決回路の真理値表を示す図である。
【図７】図４のエラー判定回路の真理値表を説明するための図である。
【図８】図１のスキャン制御部により制御されるフリップフロップブロックの動作モードを示す図である。
【図９】ノーマルＦＦ動作（保持）およびノーマルＦＦ動作（アクティブ）におけるフリップフロップブロック２１０のデータ経路を説明する図である。
【図１０】データバックアップ（保持）におけるフリップフロップブロック２１０のデータ経路を説明する図である。
【図１１】スキャンテスト（スキャンシフト）におけるフリップフロップブロック２１０のデータ経路を説明する図である。
【図１２】スキャンテスト（キャプチャ）におけるフリップフロップブロック２１０のデータ経路を説明する図である。
【図１３】データリストア（多数決値）におけるフリップフロップブロック２１０のデータ経路を説明する図である。
【図１４】変形例に係るエラー判定回路３６０の真理値表を説明する図である。
【図１５】変形例に係るスキャン制御部により制御されるフリップフロップブロックの動作モードを示す図である。
【図１６】データバックアップ（保持）におけるフリップフロップブロック２１０のデータ経路を説明する図である。
【図１７】スキャンテスト（スキャンシフト）におけるフリップフロップブロック２１０のデータ経路を説明する図である。
【図１８】スキャンテスト（キャプチャ）におけるフリップフロップブロック２１０のデータ経路を説明する図である。
【図１９】データリストア（多数決値）におけるフリップフロップブロック２１０のデータ経路を説明する図である。
【図２０】応用例に係る半導体装置のテスト構成の概略を示す図である。
【図２１】応用例に係る半導体装置の自己診断の実施期間を概略的に示す図である。
【図２２】応用例に係る半導体装置の全体構成を示す図である。
【発明を実施するための形態】
【００１４】
以下、実施例、変形例、および応用例について、図面を用いて説明する。ただし、以下の説明において、同一構成要素には同一符号を付し、繰り返しの説明を省略することがある。なお、図面は説明をより明確にするため、実際の態様に比べ、模式的に表される場合があるが、あくまで一例であって、本発明の解釈を限定するものではない。
【実施例】
【００１５】
まず、図１〜図６を用いて、実施例を説明する。
【００１６】
図１は、実施例に係る半導体装置のテスト構成の概略を説明するための図である。図２は、実施例に係る機能ブロックのテスト時の構成を概略的に示す図である。図３は、実施例に係る半導体装置の機能ブロックのテスト時の構成を概念的に示す図である。図４は、図１のＴＭＲ（ｔｒｉｐｌｅ  ｍｏｄｕｌａｒ  ｒｅｄｕｎｄａｎｔ）構成のフリップフロップブロック２１０の回路図である。図５は、図４のエラー判定回路３６０の回路図である。図６は、図４の多数決回路３４０の真理値表を示す図である。図７は、図４のエラー判定回路の真理値表を説明するための図である。
【００１７】
図１に示すように、車載電子機器の構成要素であるマイクロコントローラ等の半導体装置１は、スキャン制御部１００と、機能ブロック２００とを有する。スキャン制御部１００は、機能ブロック２００のキャンテストを制御する。機能ブロック２００は、複数のＴＭＲ構成のフリップフロップブロック２１０を有する。フリップフロップブロック２１０は、スキャン機能を有するフリップフロップ部（ＳＦＦ）と見做すこともできる。
【００１８】
スキャン制御部１００は、ＢＩＳＴの実行を制御する自己診断実行制御部（図２０参照）からシステムクロックＳＹＳＣＬＫとスキャンモード信号ＳＭＣとを受け、スキャンイネーブル信号ＳＥＮ、複数の保持制御信号ＨＯＬＤｎ、複数の選択信号ＳＥＬｎ、リフレッシュ制御信号Ｒｅｆｒｅｓｈ、および、クロック信号ＣＬＫを生成し、各々のフリップフロップブロック２１０へ供給する。複数の保持制御信号ＨＯＬＤｎおよび複数の選択信号ＳＥＬｎは、例えば、図４に示すＴＭＲ構成のフリップフロップブロック２１０を利用する場合、３つの保持制御信号ＨＯＬＤ１、ＨＯＬＤ２、ＨＯＬＤ３、および、３つの選択信号ＳＥＬ１、ＳＥＬ２、ＳＥＬ３により構成される。
【００１９】
複数のフリップフロップブロック２１０の各々は、スキャン制御部１００から供給されたスキャンイネーブル信号ＳＥＮ、複数の保持制御信号ＨＯＬＤｎ、複数の選択信号ＳＥＬｎ、リフレッシュ制御信号Ｒｅｆｒｅｓｈ、および、クロック信号ＣＬＫを受ける信号端子（ＳＥＮ、ＨＯＬＤｎ、ＳＥＬｎ、Ｒｅｆｒｅｓｈ、ＣＬＫ）をそれぞれ有する。複数のフリップフロップブロック２１０の各々は、また、スキャン用のテストデータまたはテスト結果データが入力されるスキャン入力端子ＳＩＮｎと、データを受けるデータ入力端子Ｄと、データを出力するデータ出力端子Ｑと、スキャン用のテストデータまたはテスト結果データが出力されるスキャン出力端子ＳＯＵＴｎと、エラー判定結果信号を出力するエラー出力端子ＥＲＲと、を有する。
【００２０】
スキャン用のテストデータの入力時（スキャンイン）およびスキャン用のテスト結果データの出力時（スキャンアウト）において、複数のフリップフロップブロック（ＳＦＦ）２１０は、シリアルに接続される。すなわち、図１に示すように、１番目のフリップフロップブロック２１０のスキャン出力端子ＳＯＵＴｎが、２番目のフリップフロップブロック２１０のスキャン入力端子ＳＩＮｎに接続される。スキャン入力端子ＳＩＮｎおよびスキャン出力端子ＳＯＵＴｎは、例えば、図４に示すＴＭＲ構成のフリップフロップブロック２１０を利用する場合、３つのスキャン入力端子ＳＩＮ１、ＳＩＮ２、ＳＩＮ３、および、３つのスキャン出力端子ＳＯＵＴ１、ＳＯＵＴ２、ＳＯＵＴ３により構成される。例えば、１番目のフリップフロップブロック２１０のスキャン出力端子ＳＯＵＴ１が２番目のフリップフロップブロック２１０のスキャン入力端子ＳＩＮ１に接続される場合、１番目のフリップフロップブロック２１０のスキャン出力端子ＳＯＵＴ２が２番目のフリップフロップブロック２１０のスキャン入力端子ＳＩＮ２に接続される場合、あるいは、１番目のフリップフロップブロック２１０のスキャン出力端子ＳＯＵＴ３が２番目のフリップフロップブロック２１０のスキャン入力端子ＳＩＮ３に接続される場合等がある。
【００２１】
複数のフリップフロップブロック（ＳＦＦ）２１０の各々のデータ入力端子Ｄは機能ブロック２００内の組み合わせ回路（ＣＬ）からのデータを入力される様に接続され、複数のフリップフロップブロック２１０各々のデータ出力端子Ｑは機能ブロック２００内の組み合わせ回路（ＣＬ）へデータを出力する様に接続される（図２参照）。
【００２２】
図２および図３を用いて、自己診断（ロジックＢＩＳＴ）で行うスキャンテストについて、基本的な動作を説明する。
【００２３】
スキャンテストは、テストを容易にする設計手法であるＤＦＴ（Design for Testability）技術の一つで、ＡＮＤ回路、ＯＲ回路、インバータ、フリップフロップなどの論理回路を組み合わせて所定の論理機能を構成したランダムロジックを含む機能ブロック２００を対象にする。スキャンテストでは、機能ブロック２００内のスキャン用フリップフロップブロック（ＳＦＦ）２１０を利用して行う。
【００２４】
図２に示すように、テストモード時には機能ブロック２００内のスキャン用フリップフロップ（ＳＦＦ）２１０をシリアルに接続することでシフトレジスタを形成し、スキャンテスト対象ブロックの入出力端子（ＳＩＮｎ、ＳＯＵＴｎ）からスキャン用フリップフロップ（ＳＦＦ）を制御・観測できるような経路（スキャンチェーン（ＳＣＡＮ ＣＨＡＩＮ））を設ける。このような構成を採ると、スキャン用フリップフロップがスキャンテスト対象ブロックの入出力端子と等価と見なせるため、テストの対象は組み合わせ回路（ＣＬ）のみとなる。組み合わせ回路（ＣＬ）に対してのテストパターン生成技術は、ＡＴＰＧ（Automatic Test Pattern Generation）として確立しており、効率良くテストパターンを自動生成できる。
【００２５】
スキャンテストは、スキャンイン（ＳＣＡＮ ＩＮ）→キャプチャ（ＣＡＰＴＵＲＥ）→スキャンアウト（ＳＣＡＮ ＯＵＴ）という一連の動作を複数回繰り返して進められる。まず、スキャンイネーブル信号ＳＥＮによりスキャンモードに設定し、スキャンイン端子（ＳＩＮｎ）からスキャン用フリップフロップ（ＳＦＦ）に対して、図３に示すように、テストパターン発生回路ＰＧからテストパターン（テストデータ）を設定する。次に、スキャンイネーブル信号ＳＥＮにより通常動作モードに設定し、スキャン用フリップフロップ（ＳＦＦ）間の組み合わせ回路（ＣＬ）を動作させる。そして、クロック信号ＣＬＫを動作させて、組み合わせ回路（ＣＬ）の出力をスキャン用フリップフロップ（ＳＦＦ）に取り込む。その次に、再びスキャンイネーブル信号ＳＥＮによりスキャンモードに設定し、スキャン用フリップフロップ（ＳＦＦ）に取り込んだ値をスキャンアウト端子（ＳＯＵＴｎ）で観測する。図３に示すように、スキャンアウト端子（ＳＯＵＴｎ）から出力された値は、圧縮回路（ＣＯＭＰ）により圧縮され、比較結果保持回路（ＲＣＳ）に格納する。比較結果保持回路（ＲＣＳ）では、期待値と圧縮されたテスト結果とを比較し、その結果を保持する。例えば、車載マイクロコントローラに内蔵されたＣＰＵが比較結果保持回路（ＲＣＳ）から比較結果を読み出してテスト結果の判定を行うことが出来る。
【００２６】
なお、図２の説明では、理解を容易にするために、スキャンテストがスキャンイン（ＳＣＡＮ ＩＮ）→キャプチャ（ＣＡＰＴＵＲＥ）→スキャンアウト（ＳＣＡＮ ＯＵＴ）という一連の動作を複数回繰り返して進められるとして説明した。図１のフリップフロップブロック２１０の動作は、後述の図８または図１５で説明されるように、データバックアップ（保持）→スキャンイン（スキャンテスト（スキャンシフト））→スキャンテスト（キャプチャ）→スキャンアウト（スキャンテスト（スキャンシフト））→データリストア（多数決値または保持値）という一連の動作を複数回繰り返して進められることとなる。
【００２７】
次に、図４〜図７を用いて、図１のフリップフロップブロック２１０の回路構成例を説明する。
【００２８】
図４に示すように、フリップフロップブロック２１０は、３つのフリップフロップＱ１、Ｑ２、Ｑ３と、３つのフリップフロップＱ１、Ｑ２、Ｑ３の出力に接続された多数決回路３４０と、フリップフロップＱ１、Ｑ２、Ｑ３および多数決回路３４０の４つの出力から、選択信号ＳＥＬｎに従って１つの出力を選択し、出力端子Ｑへ出力するデータ選択回路ＳＬ１０と、を有する。また、フリップフロップブロック２１０は、３つのフリップフロップＱ１、Ｑ２、Ｑ３の出力に接続されたエラー判定回路（ＥＲ）３６０を有する。３つのフリップフロップＱ１、Ｑ２、Ｑ３のクロック端子には、クロック信号ＣＬＫが接続される。３つのフリップフロップＱ１、Ｑ２、Ｑ３の出力のそれぞれは、スキャンアウト端子ＳＯＵＴ１、ＳＯＵＴ２、ＳＯＵＴ３に接続される。
【００２９】
３つのフリップフロップＱ１、Ｑ２、Ｑ３の入力には、以下の様に複数の選択回路が設けられる。
【００３０】
１）第１の選択回路群（選択回路ＳＬ１、ＳＬ２、ＳＬ３）
選択回路（第１選択回路）ＳＬ１、選択回路（第２選択回路）ＳＬ２、選択回路（第３選択回路）ＳＬ３は、リフレッシュ制御信号Ｒｅｆｒｅｓｈにより制御され、データ入力端子Ｄから入力される値とデータ選択回路ＳＬ１０から出力される値のいずれか一方を選択する。リフレッシュ制御信号Ｒｅｆｒｅｓｈが、例えば、ロウレベル（非選択レベル）であることを示す第１の値「０」の時、データ入力端子Ｄの値が選択されて、選択回路ＳＬ１、ＳＬ２、ＳＬ３の出力に伝達される。リフレッシュ制御信号Ｒｅｆｒｅｓｈが、例えば、第１の値「０」と異なるハイレベル（選択レベル）であることを示す第２の値「１」の時、データ選択回路ＳＬ１０の値が選択されて、選択回路ＳＬ１、ＳＬ２、ＳＬ３の入力に伝達される。
【００３１】
２）第２の選択回路群（選択回路ＳＬ４、ＳＬ５、ＳＬ６）
選択回路（第４選択回路）ＳＬ４、選択回路（第５選択回路）ＳＬ５、選択回路（第６選択回路）ＳＬ６は、スキャンイネーブル信号ＳＥＮにより制御され、選択回路ＳＬ１、ＳＬ２、ＳＬ３の出力値とスキャン入力端子ＳＩＮ１、ＳＩＮ２、ＳＩＮ３に入力される値の一方を選択する。スキャンイネーブル信号ＳＥＮが、例えば、ロウレベル（非選択レベル）であることを示す第１の値「０」の時、選択回路ＳＬ１、ＳＬ２、ＳＬ３の出力が選択されて、選択回路ＳＬ４、ＳＬ５、ＳＬ６の入力にそれぞれ伝達される。スキャンイネーブル信号ＳＥＮが、例えば、第１の値「０」と異なるハイレベル（選択レベル）であることを示す第２の値「１」の時、スキャン入力端子ＳＩＮ１、ＳＩＮ２、ＳＩＮ３の値が選択されて、選択回路ＳＬ４、ＳＬ５、ＳＬ６の出力にそれぞれ伝達される。
【００３２】
３）第３の選択回路群（選択回路ＳＬ７、ＳＬ８、ＳＬ９）
選択回路ＳＬ７、ＳＬ８、ＳＬ９は、保持制御信号ＨＯＬＤ１、ＨＯＬＤ２、ＨＯＬＤ３により制御され、選択回路ＳＬ４、ＳＬ５、ＳＬ６の出力とフリップフロップＱ１、Ｑ２、Ｑ３の出力のいずれか一方を選択する。
【００３３】
選択回路（第７選択回路）ＳＬ７は、保持制御信号ＨＯＬＤ１が例えば、ロウレベル（非選択レベル）であることを示す第１の値「０」の時、選択回路ＳＬ４の出力を選択して、フリップフロップＱ１の入力に伝達する。選択回路ＳＬ７は、保持制御信号ＨＯＬＤ１が例えば、第１の値「０」と異なるハイレベル（選択レベル）であることを示す第２の値「１」の時、フリップフロップＱ１の出力を選択して、フリップフロップＱ１の入力に伝達する。これにより、フリップフロップＱ１の値が保持状態になる。選択回路（第８選択回路）ＳＬ８は、保持制御信号ＨＯＬＤ２が例えば、ロウレベル（非選択レベル）であることを示す第１の値「０」の時、選択回路ＳＬ５の出力を選択して、フリップフロップＱ２の入力に伝達する。選択回路ＳＬ８は、保持制御信号ＨＯＬＤ２が例えば、第１の値「０」と異なるハイレベル（選択レベル）であることを示す第２の値「１」の時、フリップフロップＱ２の出力を選択して、フリップフロップＱ２の入力に伝達する。これにより、フリップフロップＱ２の値が保持状態になる。選択回路（第９選択回路）ＳＬ９は、保持制御信号ＨＯＬＤ３が例えば、ロウレベル（非選択レベル）であることを示す第１の値「０」の時、選択回路ＳＬ６の出力を選択して、フリップフロップＱ３の入力に伝達する。選択回路ＳＬ９は、保持制御信号ＨＯＬＤ３が例えば、第１の値「０」と異なるハイレベル（選択レベル）であることを示す第２の値「１」の時、フリップフロップＱ３の出力を選択して、フリップフロップＱ３の入力に伝達する。これにより、フリップフロップＱ３の値が保持状態になる。
【００３４】
データ選択回路ＳＬ１０は、選択信号ＳＥＬｎ（ＳＥＬ１、ＳＥＬ２、ＳＥＬ３）が（０００）の時、多数決回路３４０の出力を選択して、フリップフロップブロック２１０のデータ出力端子Ｑへ伝達する。
【００３５】
データ選択回路ＳＬ１０は、選択信号ＳＥＬｎ（ＳＥＬ１、ＳＥＬ２、ＳＥＬ３）が（１００）の時、フリップフロップＱ１の出力を選択して、フリップフロップブロック２１０のデータ出力端子Ｑへ伝達する。データ選択回路ＳＬ１０は、選択信号ＳＥＬｎ（ＳＥＬ１、ＳＥＬ２、ＳＥＬ３）が（０１０）の時、フリップフロップＱ２の出力を選択して、フリップフロップブロック２１０のデータ出力端子Ｑへ伝達する。また、データ選択回路ＳＬ１０は、選択信号ＳＥＬｎ（ＳＥＬ１、ＳＥＬ２、ＳＥＬ３）が（００１）の時、フリップフロップＱ３の出力を選択して、フリップフロップブロック２１０のデータ出力端子Ｑへ伝達する。
【００３６】
図５に示すように、エラー判定回路３６０は、３つの排他的論理和回路ＸＯＲ１−ＸＯＲ３と、３つの論理積回路ＡＮ１−ＡＮ３と、論理和回路ＯＲと、を有する。ＸＯＲ１は、フリップフロップＱ１、Ｑ２の出力の排他的論理和をとる。ＸＯＲ２は、フリップフロップＱ２、Ｑ３の出力の排他的論理和をとる。ＸＯＲ３は、フリップフロップＱ１、Ｑ３の出力の排他的論理和をとる。ＡＮ１は、ＸＯＲ１の出力と保持制御信号ＨＯＬＤ３の反転入力とを受け、その出力は論理和回路ＯＲへ入力される。ＡＮ２は、ＸＯＲ２の出力と保持制御信号ＨＯＬＤ１の反転入力とを受け、その出力は論理和回路ＯＲへ入力される。ＡＮ３は、ＸＯＲ３の出力と保持制御信号ＨＯＬＤ３の反転入力とを受け、その出力は論理和回路ＯＲへ入力される。論理和回路ＯＲの出力は、エラー判定回路３６０のエラー判定出力ＥＲＲとして出力される。
【００３７】
エラー判定回路３６０は、２つの判定基準にてエラー判定の通知を行い、その判定基準は保持制御信号ＨＯＬＤ１、ＨＯＬＤ２、ＨＯＬＤ３の値に応じて選択される。
【００３８】
判定基準１）ＨＯＬＤ１、ＨＯＬＤ２、ＨＯＬＤ３の値が（０００）の場合、３つのフリップフロップＱ１、Ｑ２、Ｑ３が保持する値が一つでも異なる値（不一致）を示す場合に、エラー判定出力ＥＲＲを通知する。
【００３９】
判定基準２）ＨＯＬＤ１、ＨＯＬＤ２、ＨＯＬＤ３の値が（１１０）、（０１１）、および、（１０１）の場合、３つのフリップフロップＱ１、Ｑ２、Ｑ３の内のいずれか２つのフリップフロップ（要は、Ｑ１とＱ２、Ｑ２とＱ３、Ｑ１とＱ３のいずれか）が保持する値が異なる場合にエラー判定出力ＥＲＲを通知する。
【００４０】
次に、図６および図７を用いて、多数決回路３４０およびエラー判定回路３６０の真理値表を説明する。
【００４１】
図６に示すように、多数決回路３４０は、フリップフロップＱ１、Ｑ２、Ｑ３が保持する値の多数決結果を出力する。すなわち、多数決回路３４０は、フリップフロップＱ１、Ｑ２、Ｑ３の保持する値の内、３つの値が同じ値の場合、または、フリップフロップＱ１、Ｑ２、Ｑ３の保持する値の内、２つ値が同じ値の場合、その値を出力する。つまり、多数決回路３４０は、次式（１）に従って、その出力を生成する。
ＯＲ（Ｑ１＆Ｑ２、Ｑ２＆Ｑ３、Ｑ３＆Ｑ１）・・・式（１）
図７(Ａ)は保持制御信号ＨＯＬＤ１、ＨＯＬＤ２、ＨＯＬＤ３の値を示す表であり、図７(Ｂ)はフリップフロップＱ１、Ｑ２、Ｑ３が保持する値を示す表であり、図７(Ｃ)はエラー判定回路３６０の真理値表である。先に記載したように、エラー判定回路３６０の判定基準は保持制御信号ＨＯＬＤ１、ＨＯＬＤ２、ＨＯＬＤ３の値に応じて選択される。
【００４２】
判定基準１は、通常動作時、すなわち、保持制御信号ＨＯＬＤ１、ＨＯＬＤ２、ＨＯＬＤ３の値が（０００）の時であり、フリップフロップＱ１、Ｑ２、Ｑ３の値が全て同じ（具体的には、（０００）または（１１１））であれば、エラー判定出力ＥＲＲはエラー無（０）を出力する。一方、フリップフロップＱ１、Ｑ２、Ｑ３の値が１つでも違う値（不一致）であれば、エラー判定出力ＥＲＲはエラー有り（１）を出力する。つまり、保持制御信号ＨＯＬＤ１、ＨＯＬＤ２、ＨＯＬＤ３＝０００であれば、ＯＲ（Ｑ１＾Ｑ２、Ｑ２＾Ｑ３、Ｑ３＾Ｑ１）の式に従って、エラー判定出力ＥＲＲが出力される。
【００４３】
判定基準２は、以下の３つ場合がある。
【００４４】
２−１）フリップフロップＱ１、Ｑ２で値を保持させているとき（ＨＯＬＤ３＝０、ＨＯＬＤ２＝１、ＨＯＬＤ１＝１）は、フリップフロップＱ１の値とフリップフロップＱ２の値とが同じであれば、エラーなし（０）。フリップフロップＱ１の値がフリップフロップＱ２の値と違う値（不一致）の場合、エラー有り（１）とする。つまり、（Ｑ１＾Ｑ２）の式に従って、エラー判定出力ＥＲＲが出力される。
【００４５】
２−２）フリップフロップＱ２、Ｑ３が値を保持しているとき(ＨＯＬＤ３＝１、ＨＯＬＤ２＝１、ＨＯＬＤ１＝０)は、フリップフロップＱ２の値とフリップフロップＱ３の値とが同じであれば、エラーなし（０）。フリップフロップＱ２の値とフリップフロップＱ３の値とが違う値（不一致）の場合はエラー有り（１）とする。つまり、（Ｑ２＾Ｑ３）の式に従って、エラー判定出力ＥＲＲが出力される。
【００４６】
２−３）フリップフロップＱ３、Ｑ１が値を保持しているとき（ＨＯＬＤ３＝１、ＨＯＬＤ２＝０、ＨＯＬＤ１＝１）は、フリップフロップＱ３の値とフリップフロップＱ１の値とが同じであれば、エラーなし（０）。フリップフロップＱ３の値とフリップフロップＱ１の値とが違う値（不一致）の場合、エラー有り（１）とする。つまり、（Ｑ３＾Ｑ１）の式に従って、エラー判定出力ＥＲＲが出力される。
【００４７】
なお、保持制御信号ＨＯＬＤ１、ＨＯＬＤ２、ＨＯＬＤ３の値が（０００）、（１１０）、（０１１）、（１０１）以外の場合、エラー判定回路３６０はエラーの検出動作は行わず、エラー判定出力ＥＲＲの出力はエラーなし（０）となる。
【００４８】
次に、図８〜図１３を用いて、スキャン制御部により制御されるフリップフロップブロック２１０の動作モードおよび、各動作モードにおけるデータ経路を説明する。
【００４９】
図８は、図１のスキャン制御部により制御されるフリップフロップブロック２１０の動作モードを示す図である。図８の左半分を図８（Ａ）、右半分を図８（Ｂ）に示す。図９は、ノーマルＦＦ動作（保持）およびノーマルＦＦ動作（アクティブ）におけるフリップフロップブロック２１０のデータ経路を説明する図である。図１０は、データバックアップ（保持）におけるフリップフロップブロック２１０のデータ経路を説明する図である。図１１は、スキャンテスト（スキャンシフト）におけるフリップフロップブロック２１０のデータ経路を説明する図である。図１２は、スキャンテスト（キャプチャ）におけるフリップフロップブロック２１０のデータ経路を説明する図である。図１３は、データリストア（多数決値）におけるフリップフロップブロック２１０のデータ経路を説明する図である。
【００５０】
図８に示すように、スキャン制御部により制御されるフリップフロップブロック２１０の動作モードは、ノーマルＦＦ動作（保持）と、ノーマルＦＦ動作（アクティブ）と、データバックアップ（保持）と、スキャンテスト（スキャンシフト）と、スキャンテスト（キャプチャ）と、データリストア（多数決値）と、に大別される。フリップフロップブロック２１０の動作モードは、自己診断において、データバックアップ（保持）→スキャンイン（スキャンテスト（スキャンシフト））→スキャンテスト（キャプチャ）→スキャンアウト（スキャンテスト（スキャンシフト））→データリストア（多数決値）と遷移する。データリストア（多数決値）の後、フリップフロップブロック２１０の動作モードは、通常動作モードへ遷移し、通常動作モードにおいて、ノーマルＦＦ動作（保持）とノーマルＦＦ動作（アクティブ）とが繰り返される。
【００５１】
以下の各動作モードの説明では、図８（Ａ）、図８（Ｂ）に示される各動作モードの行の記述が参照される。
【００５２】
１）ノーマルＦＦ動作（保持）
ノーマルＦＦ動作（保持）は、通常の動作モードであり、フリップフロップブロック２１０のフリップフロップＱ１、Ｑ２、Ｑ３がデータを保持している状態である。この場合、クロック信号ＣＬＫは例えばロウレベルであることを示す値（０）である。リフレッシュ制御信号Ｒｅｆｒｅｓｈおよびスキャンイネーブル信号ＳＥＮの値は（０）とされる。また、選択信号ＳＥＬ１、ＳＥＬ２、ＳＥＬ３の値は０００、保持制御信号ＨＯＬＤ１、ＨＯＬＤ２、ＨＯＬＤ３の値は０００である。多数決回路３４０は、フリップフロップＱ１、Ｑ２、Ｑ３に入力された保持データに基づいて、出力を生成する。選択回路ＳＬ１０は、多数決回路３４０の出力をフリップフロップブロック２１０の出力端子Ｑに接続する。また、エラー判定回路３６０は、判定基準１に従って、エラー判定出力ＥＲＲを通知する。この状態で、クロック信号ＣＫＬが変化して、例えば、クロック信号ＣＬＫの立ち上がりエッジ（ｐｏｓ）が検出されると、フリップフロップブロック２１０の動作モードは、ノーマルＦＦ動作（アクティブ）へと遷移する。
【００５３】
２）ノーマルＦＦ動作（アクティブ）
ノーマルＦＦ動作（アクティブ）は、組み合わせ回路（ＣＬ）からのデータ（ｄａｔａ１）がフリップフロップブロック２１０のデータ入力端子Ｄに供給され、データ（ｄａｔａ１）がフリップフロップＱ１、Ｑ２、Ｑ３に取り込まれ、保持されるモードである。多数決回路３４０はフリップフロップＱ１、Ｑ２、Ｑ３の保持データ（ｄａｔａ１）の入力に基づいて、出力（ｄａｔａ１）を生成し、フリップフロップブロック２１０の出力端子Ｑに供給する。
【００５４】
なお、半導体装置１の通常の動作モードでは、ノーマルＦＦ動作（保持）とノーマルＦＦ動作（アクティブ）とが、クロック信号ＣＬＫの信号レベルに応じて、繰り返されることで、機能ブロック２００は所定の論理機能および論理動作を実行する。
【００５５】
なお、ノーマルＦＦ動作（保持）およびノーマルＦＦ動作（アクティブ）は、通常動作時の動作であり、図９に太線で示すデータ経路となる。
【００５６】
３）データバックアップ（保持）
機能ブロック２００の自己診断（ＢＩＳＴ）を行う場合、まず、データバックアップ（保持）が行われる。データバックアップでは、例えば、保持制御信号ＨＯＬＤ１、ＨＯＬＤ２、ＨＯＬＤ３の値は（０１１）に設定される。これにより、フリップフロップＱ２、Ｑ３に保持されたそれぞれの保持データ（ｄａｔａ２）が、フリップフロップＱ２、Ｑ３のそれぞれの出力から、選択回路ＳＬ８、ＳＬ９を介して、フリップフロップＱ２、Ｑ３のそれぞれの入力へ供給されて、保持される。この状態は、図１０に太線で示すデータ経路となる。
【００５７】
また、この時、エラー判定回路３６０は、判定基準２の２−２）に従って、エラー判定出力ＥＲＲを通知する。
【００５８】
この状態で、スキャンイネーブル信号ＳＥＮの値が（１）に設定されると、フリップフロップブロック２１０の動作モードはスキャンテスト（スキャンシフト）へ遷移する。
【００５９】
４）スキャンテスト（スキャンシフト）
スキャンテスト（スキャンシフト）は、スキャンテストの「スキャンイン動作」および「スキャンアウト動作」に利用することが可能である。スキャンテスト（スキャンシフト）では、スキャンイネーブル信号ＳＥＮの値が（１）に設定されるので、スキャン入力端子ＳＩＮ１からのデータ（ｄａｔａ３）がフリップフロップＱ１の入力に供給され、クロック信号ＣＬＫの信号レベルを変化させることで、データ（ｄａｔａ３）がフリップフロップＱ１に保持される。また、フリップフロップＱ１に保持されたデータ（ｄａｔａ３）はスキャン出力端子ＳＯＵＴ１に供給されて、例えば、次段のフリップフロップブロック２１０のスキャン入力端子ＳＩＮ１へ伝達される。すなわち、機能ブロック２００内の各フリップフロップブロック２１０がシリアルに接続されて、スキャンチェーンが構成される。この状態は、図１１に太線で示すデータ経路となる。なお、フリップフロップＱ２、Ｑ３のそれぞれは、データバックアップによって保持したデータ（ｄａｔａ２）を継続して保持する。
【００６０】
この状態で、リフレッシュ制御信号Ｒｅｆｒｅｓｈおよびスキャンイネーブル信号ＳＥＮの値が（０）に設定され、選択信号ＳＥＬ１、ＳＥＬ２、ＳＥＬ３が（１００）に設定されると、フリップフロップブロック２１０の動作モードはスキャンテスト（キャプチャ）へ遷移する。
【００６１】
５）スキャンテスト（キャプチャ）
スキャンテスト（キャプチャ）では、データ入力端子Ｄのデータ（ｄａｔａ４）がフリップフロップＱ１の入力に供給され、フリップフロップＱ１の出力が選択回路ＳＬ１０を介してデータ出力端子Ｑに接続される。これにより、機能ブロック２００が「スキャンイン動作」におけるスキャンシフトによってフリップフロップＱ１に取り込まれたテストデータに基づいて動作し、テスト結果データが機能ブロック２００内の他のフリップフロップブロック２１０に取り込まれる。この状態は、図１２に太線で示すデータ経路となる。なお、フリップフロップＱ２、Ｑ３のそれぞれは、データバックアップによって保持したデータ（ｄａｔａ２）を継続して保持する。
【００６２】
この後、再度、フリップフロップブロック２１０の動作モードがスキャンテスト（スキャンシフト）に遷移され、「スキャンアウト動作」が実行される。「スキャンアウト動作」では、機能ブロック２００内の各フリップフロップブロック２１０がシリアルに接続されて、スキャンチェーンが構成され、各フリップフロップブロック２１０に格納されたテスト結果データが、図３で説明した様に、スキャンアウトされて、圧縮回路ＣＯＭＰへ送付される。
【００６３】
次に、リフレッシュ制御信号Ｒｅｆｒｅｓｈの値が（１）、スキャンイネーブル信号ＳＥＮの値が（０）、選択信号ＳＥＬ１、ＳＥＬ２、ＳＥＬ３の値が（０００）、保持制御信号ＨＯＬＤ１、ＨＯＬＤ２、ＨＯＬＤ３の値が（０００）にそれぞれ設定される。これにより、フリップフロップブロック２１０の動作モードはデータリストア（多数決値）へ遷移する。
【００６４】
６）データリストア（多数決値）
データリストアは、スキャンテストによる機能ブロック２００の自己診断の実施が終了した時に、フリップフロップブロック２１０内のフリップフロップＱ１、Ｑ２、Ｑ３の状態を自己診断の前の状態へ復元ないし復帰するための動作モードである。
【００６５】
データリストアでは、データバックアップにおいてフリップフロップＱ２、Ｑ３に保持されたデータが多数決回路３４０に入力される。多数決回路３４０の出力は、選択回路ＳＬ１０および選択回路ＳＬ１−ＳＬ９を介して、フリップフロップＱ１、Ｑ２、Ｑ３のそれぞれの入力に供給される。これにより、フリップフロップＱ１、Ｑ２、Ｑ３のデータが、フリップフロップＱ２、Ｑ３に保持されたデータにより上書きされ、フリップフロップブロック２１０内のフリップフロップＱ１、Ｑ２、Ｑ３の状態が自己診断の前の状態に復帰する。この状態は、図１３に太線で示すデータ経路となる。
【００６６】
以上の説明では、３つのフリップフロップＱ１、Ｑ２、Ｑ３の内、フリップフロップＱ１をスキャンテスト（スキャンシフト）およびスキャンテスト（キャプチャ）に用い、フリップフロップＱ２、Ｑ３を保持用に用いる構成を述べた。これは一例であり、スキャンテスト（スキャンシフト）およびスキャンテスト（キャプチャ）に用いるフリップフロップはフリップフロップＱ１に限らず、フリップフロップＱ２あるいはフリップフロップＱ３を用いる構成としてもよい。この場合、図７に示すように、保持制御信号ＨＯＬＤ１、ＨＯＬＤ２、ＨＯＬＤ３の値を（１１０）または（１０１）に設定すれば、スキャンテスト（スキャンシフト）およびスキャンテスト（キャプチャ）に用いるフリップフロップを、フリップフロップＱ３またはフリップフロップＱ２とすることが出来る。この場合において、保持制御信号ＨＯＬＤ１、ＨＯＬＤ２、ＨＯＬＤ３の値を（１１０）に設定すれば、フリップフロップＱ１、Ｑ２によりデータが保持される。保持制御信号ＨＯＬＤ１、ＨＯＬＤ２、ＨＯＬＤ３の値を（１０１）に設定すれば、フリップフロップＱ１、Ｑ３によりデータが保持される。
【００６７】
また、最初の自己診断の時、保持制御信号ＨＯＬＤ１、ＨＯＬＤ２、ＨＯＬＤ３の値を（０１１）とし、２回目の自己診断の時、保持制御信号ＨＯＬＤ１、ＨＯＬＤ２、ＨＯＬＤ３の値を（１１０）とし、３回目の自己診断の時、保持制御信号ＨＯＬＤ１、ＨＯＬＤ２、ＨＯＬＤ３の値を（１０１）とすれば、異なるデータ経路の自己診断が可能になる。
【００６８】
実施例によれば、以下の１または複数の効果を得ることが出来る。
【００６９】
１）３つのフリップフロップＱ１、Ｑ２、Ｑ３の内、２つのフリップフロップ（Ｑ２、Ｑ３）で、自己診断の前のフリップフロップの値を保持する（データバックアップ）。これにより、自己診断の前のフリップフロップの値の退避を瞬時に行うことが出来る。
【００７０】
２）２つのフリップフロップ（Ｑ２、Ｑ３）の値が異なる場合に、エラー通知することができる。これにより、退避した２つの値が異なる場合にはシステムにエラーを通知することができる。
【００７１】
３）多数決回路３４０を用いて、２つのフリップフロップ（Ｑ２、Ｑ３）に保持した値を、３つの３つのフリップフロップＱ１、Ｑ２、Ｑ３に復元することができる（データリストア）。これにより、自己診断の前のフリップフロップの値の３つのフリップフロップＱ１、Ｑ２、Ｑ３への復帰を瞬時に行うことが出来る。
【００７２】
４）ＴＭＲ構成のフリップフロップブロック２１０を用いることで、システム稼働中の自己診断のオーバヘッド時間を低減することができる。
【００７３】
（変形例）
次に、図面を用いて、変形例を説明する。
【００７４】
実施例では、データバックアップにおいて、２つのフリップフロップＱ２、Ｑ３にデータを保持する構成例を説明したが、それに限定されない。変形例では、１つのフリップフロップＱ３にデータを保持する構成例を説明する。
【００７５】
図１４は、変形例に係るエラー判定回路３６０の真理値表を説明する図である。図１４(Ａ)は保持制御信号ＨＯＬＤ１、ＨＯＬＤ２、ＨＯＬＤ３の値を示す表であり、図１４(Ｂ)はフリップフロップＱ１、Ｑ２、Ｑ３が保持する値を示す表であり、図１４(Ｃ)はエラー判定回路３６０の真理値表である。
【００７６】
図１４に示すエラー判定回路３６０の真理値表では、保持制御信号ＨＯＬＤ１、ＨＯＬＤ２、ＨＯＬＤ３の値が（０００）のみとされている点が、図７と異なる点である。すなわち、エラー判定回路３６０は、保持制御信号ＨＯＬＤ１、ＨＯＬＤ２、ＨＯＬＤ３の値が（０００）の時のみ、判定基準１に従ったエラー判定を行う様に変更される。
【００７７】
次に、図１５〜図１９を用いて、スキャン制御部により制御されるフリップフロップブロック２１０の動作モードおよび、各動作モードにおけるデータ経路を説明する。
【００７８】
図１５は、変形例に係るスキャン制御部により制御されるフリップフロップブロックの動作モードを示す図である。図１５において、図１５（Ａ）の右側が図１５（Ｂ）の左側に接続されて、１つの表を構成する。図１６は、データバックアップ（保持）におけるフリップフロップブロック２１０のデータ経路を説明する図である。図１７は、スキャンテスト（スキャンシフト）におけるフリップフロップブロック２１０のデータ経路を説明する図である。図１８は、スキャンテスト（キャプチャ）におけるフリップフロップブロック２１０のデータ経路を説明する図である。図１９は、データリストア（多数決値）におけるフリップフロップブロック２１０のデータ経路を説明する図である。
【００７９】
図１５（Ａ）、図１５（Ｂ）に示すように、スキャン制御部により制御されるフリップフロップブロック２１０の動作モードは、ノーマルＦＦ動作（保持）と、ノーマルＦＦ動作（アクティブ）と、データバックアップ（保持）と、スキャンテスト（スキャンシフト）と、スキャンテスト（キャプチャ）と、データリストア（保持値）と、を有する。
【００８０】
フリップフロップブロック２１０の動作モードは、自己診断において、データバックアップ（保持）→スキャンイン（スキャンテスト（スキャンシフト））→スキャンテスト（キャプチャ）→スキャンアウト（スキャンテスト（スキャンシフト））→データリストア（保持値）と遷移する。データリストア（保持値）の後、フリップフロップブロック２１０の動作モードは、通常動作へ遷移し、通常動作おいて、ノーマルＦＦ動作（保持）とノーマルＦＦ動作（アクティブ）とが繰り返される。
【００８１】
以下の各動作モードの説明では、図１５（Ａ）、図１５（Ｂ）に示される各動作モードの行の記述が参照される。
【００８２】
１）ノーマルＦＦ動作（保持）
先に説明した実施例のノーマルＦＦ動作（保持）と同じ動作であり、説明は省略する。
【００８３】
２）ノーマルＦＦ動作（アクティブ）
先に説明した実施例のノーマルＦＦ動作（アクティブ）と同じ動作であり、説明は省略する。
【００８４】
３）データバックアップ（保持）
データバックアップでは、例えば、保持制御信号ＨＯＬＤ１、ＨＯＬＤ２、ＨＯＬＤ３の値は（００１）に設定される。これにより、フリップフロップＱ３に保持された保持データ（ｄａｔａ２）が、フリップフロップＱ３の出力から、選択回路ＳＬ９を介して、フリップフロップＱ３の入力へ供給されて、保持される。この状態は、図１６に太線で示される様なデータの経路となる。この時、エラー判定回路３６０は、エラー判定は行わない。
【００８５】
この状態で、スキャンイネーブル信号ＳＥＮの値が（１）に設定されると、フリップフロップブロック２１０の動作モードはスキャンテスト（スキャンシフト）へ遷移する。
【００８６】
４）スキャンテスト（スキャンシフト）
スキャンテスト（スキャンシフト）では、スキャンイネーブル信号ＳＥＮの値が（１）に設定されるので、スキャン入力端子ＳＩＮ１からのデータ（ｄａｔａ３−１）がフリップフロップＱ１の入力に供給され、クロック信号ＣＬＫの信号レベルを変化させることで、データ（ｄａｔａ３）がフリップフロップＱ１に保持される。また、スキャン入力端子ＳＩＮ２からのデータ（ｄａｔａ３−２）がフリップフロップＱ２の入力に供給され、クロック信号ＣＬＫの信号レベルを変化させることで、データ（ｄａｔａ３−２）がフリップフロップＱ２に保持される。
【００８７】
また、フリップフロップＱ１に保持されたデータ（ｄａｔａ３−１）はスキャン出力端子ＳＯＵＴ１に供給されて、例えば、次段のフリップフロップブロック２１０のスキャン入力端子ＳＩＮ１へ伝達される。フリップフロップＱ２に保持されたデータ（ｄａｔａ３−２）はスキャン出力端子ＳＯＵＴ２に供給されて、例えば、次段のフリップフロップブロック２１０のスキャン入力端子ＳＩＮ２へ伝達される。あるいは、フリップフロップブロック２１０のスキャン出力端子ＳＯＵＴ１をフリップフロップブロック２１０のスキャン入力端子ＳＩＮ２へ接続する様なスキャンチェーンを設定することも可能である。
【００８８】
この状態は、図１７に太線で示される様なデータの経路となる。なお、フリップフロップＱ３は、データバックアップによって保持したデータ（ｄａｔａ２）を継続して保持する。
【００８９】
この状態で、リフレッシュ制御信号Ｒｅｆｒｅｓｈおよびスキャンイネーブル信号ＳＥＮの値が（０）に設定され、選択信号ＳＥＬ１、ＳＥＬ２、ＳＥＬ３が（０００）に設定されると、フリップフロップブロック２１０の動作モードはスキャンテスト（キャプチャ）へ遷移する。
【００９０】
５）スキャンテスト（キャプチャ）
スキャンテスト（キャプチャ）では、データ入力端子Ｄのデータ（ｄａｔａ４）がフリップフロップＱ１、Ｑ２の入力に供給され、フリップフロップＱ１、Ｑ２の出力が多数決回路３４０および選択回路ＳＬ１０を介してデータ出力端子Ｑに接続される。これにより、機能ブロック２００がスキャンシフトによってフリップフロップＱ１、Ｑ２に取り込まれたテストデータに基づいて動作し、テスト結果データが機能ブロック２００内の他のフリップフロップブロック２１０に取り込まれる。この状態は、図１８に太線で示される様なデータの経路となる。なお、フリップフロップＱ３のそれぞれは、データバックアップによって保持したデータ（ｄａｔａ２）を継続して保持する。この構成により、多数決回路３４０のテストも行うことが出来る。
【００９１】
次に、リフレッシュ制御信号Ｒｅｆｒｅｓｈの値が（１）にされ、スキャンイネーブル信号ＳＥＮの値が（０）にされ、選択信号ＳＥＬ１、ＳＥＬ２、ＳＥＬ３の値が（００１）にされ、保持制御信号ＨＯＬＤ１、ＨＯＬＤ２、ＨＯＬＤ３の値が（０００）にされる。これにより、フリップフロップブロック２１０の動作モードはデータリストア（保持値）へ遷移する。
【００９２】
６）データリストア（保持値）
データリストアでは、データバックアップにおいてフリップフロップＱ３に保持されたデータ（ｄａｔａ５）が、選択回路ＳＬ１０および選択回路ＳＬ１−ＳＬ９を介して、フリップフロップＱ１、Ｑ２、Ｑ３のそれぞれの入力に供給される。これにより、フリップフロップＱ１、Ｑ２、Ｑ３のデータが、フリップフロップＱ３に保持されたデータにより上書きされ、フリップフロップブロック２１０内のフリップフロップＱ１、Ｑ２、Ｑ３の状態が自己診断の前の状態へ復元ないし復帰される。この状態は、図１９に太線で示される様なデータの経路となる。
【００９３】
以上の変形例の説明では、３つのフリップフロップＱ１、Ｑ２、Ｑ３の内、フリップフロップＱ１、Ｑ２をスキャンテスト（スキャンシフト）およびスキャンテスト（キャプチャ）に用い、フリップフロップＱ３を保持用に用いる構成を述べた。これは例であり、スキャンテスト（スキャンシフト）およびスキャンテスト（キャプチャ）に用いるフリップフロップはフリップフロップＱ１、Ｑ２の組み合わせに限らず、フリップフロップＱ１、Ｑ３の組み合わせ、あるいは、フリップフロップＱ２、Ｑ３の組み合わせを用いた構成に応用することも可能である。この場合、保持制御信号ＨＯＬＤ１、ＨＯＬＤ２、ＨＯＬＤ３の値が（０１０）または（１００）に設定すれば、スキャンテスト（スキャンシフト）およびスキャンテスト（キャプチャ）に用いるフリップフロップを、フリップフロップＱ１、Ｑ３の組み合わせあるいはフリップフロップＱ２、Ｑ３の組み合わせとすることが出来る。この場合において、保持制御信号ＨＯＬＤ１、ＨＯＬＤ２、ＨＯＬＤ３の値を（０１０）に設定すれば、フリップフロップＱ２によりデータが保持される。保持制御信号ＨＯＬＤ１、ＨＯＬＤ２、ＨＯＬＤ３の値を（１００）に設定すれば、フリップフロップＱ３によりデータが保持される。
【００９４】
また、最初の自己診断の時、保持制御信号ＨＯＬＤ１、ＨＯＬＤ２、ＨＯＬＤ３の値を（００１）とし、２回目の自己診断の時、保持制御信号ＨＯＬＤ１、ＨＯＬＤ２、ＨＯＬＤ３の値を（１００）とし、３回目の自己診断の時、保持制御信号ＨＯＬＤ１、ＨＯＬＤ２、ＨＯＬＤ３の値を（０１０）とすれば、異なるデータ経路の自己診断が可能になる。
【００９５】
変形例によれば、３つのフリップフロップＱ１、Ｑ２、Ｑ３の内、１つのフリップフロップ（Ｑ３）で自己診断の前のフリップフロップの値を保持し、残りの２つのフリップフロップＱ１、Ｑ２をスキャンテスト（スキャンシフト）およびスキャンテスト（キャプチャ）に用いる。これにより、多数決回路３４０のテストが可能になる。
【００９６】
（応用例）
次に、図２０〜図２２を用いて、応用例を説明する。
【００９７】
図２０は応用例に係る半導体装置のテスト構成の概略を示す図である。図２１は、応用例に係る半導体装置の自己診断の実施期間を概略的に示す図である。図２２は、応用例に係る半導体装置の全体構成を示す図である。
【００９８】
図２０に示すように、半導体装置１は、自己診断制御部４００と、複数のスキャン制御部１００、１００ａ、１００ｂと、複数の機能ブロック２００、２００ａ、２００ｂと、を含む。自己診断制御部４００は、スキャン制御部１００、１００ａ、１００ｂに対して自己診断の実施を指示する。スキャン制御部１００は、機能ブロック２００の自己診断を制御する。同様に、スキャン制御部１００ａは機能ブロック２００ａの自己診断を制御し、スキャン制御部１００ｂは機能ブロック２００ｂの自己診断を制御する。スキャン制御部１００、１００ａ、１００ｂ及び機能ブロック２００、２００ａ、２００ｂは、実施例および変形例で説明したスキャン制御部および機能ブロックと同じである。
【００９９】
自己診断実行制御部４００は、機能ブロック２００、２００ａ、２００ｂの動作状況を考慮し、機能ブロック２００、２００ａ、２００ｂが使用されていない期間（未動作期間、未使用期間）に、対応するスキャン制御部１００、１００ａ、１００ｂに対して、スキャンテストの実行を制御信号ＳＭＣ１、ＳＭＣ２、ＳＭＣ３によって指示する。また、自己診断実行制御部４００は、機能ブロック２００、２００ａ、２００ｂに対してシステムクロック信号ＳＹＳＣＬＫ１、ＳＹＳＣＬＫ２、ＳＹＳＣＬＫ３を出力する。
【０１００】
図２１に示すように、例えば、機能ブロック２００が通常動作ＯＰ１と通常動作ＯＰ２との間に、使用されていない期間が存在する場合において、自己診断実行制御部４００は、その使用されていない期間に、スキャン制御部１００に対して制御信号ＳＭＣ１を出力する。これにより、機能ブロック２００の自己診断（ＴＥＳＴ１）が実施される。同様に、自己診断実行制御部４００は、機能ブロック２００ａの通常動作ＯＰ３と通常動作ＯＰ４との間の使用されていない期間に、スキャン制御部１００ａに対して制御信号ＳＭＣ２を出力する。これにより、機能ブロック２００の自己診断（ＴＥＳＴ２）が、機能ブロック２００ａの使用されていない期間に、実施される。また、自己診断実行制御部４００は、機能ブロック２００ｂの通常動作ＯＰ３の期間を除いた未使用期間に、スキャン制御部１００ｂに対して制御信号ＳＭＣ３を出力する。これにより、機能ブロック２００ｂの自己診断（ＴＥＳＴ３）が、機能ブロック２００ｂの使用されていない期間に、実施される。なお、図２１に点線で示されているように、例えば、機能ブロック２００ａの自己診断（ＴＥＳＴ２）の実行期間と機能ブロック２００ｂの自己診断（ＴＥＳＴ３ａ）の実行期間とは、同じ期間でもよいし、一部が重なっても良い。
【０１０１】
自己診断実行制御部４００の出力する制御信号ＳＭＣ１、ＳＭＣ２、ＳＭＣ３のそれぞれは複数ビットの制御信号とされてよい。
【０１０２】
また、自己診断実行制御部４００の出力する制御信号ＳＭＣ１、ＳＭＣ２、ＳＭＣ３は、実施例および変形例で説明した様に、保持制御信号ＨＯＬＤ１、ＨＯＬＤ２、ＨＯＬＤ３の値を制御する機能を持たせるのが良い。これにより、例えば、最初の自己診断の時、保持制御信号ＨＯＬＤ１、ＨＯＬＤ２、ＨＯＬＤ３の値を（０１１）とし、２回目の自己診断の時、保持制御信号ＨＯＬＤ１、ＨＯＬＤ２、ＨＯＬＤ３の値を（１１０）とし、３回目の自己診断の時、保持制御信号ＨＯＬＤ１、ＨＯＬＤ２、ＨＯＬＤ３の値を（１０１）とするような制御が可能になる。
【０１０３】
図２２は、車載電子機器の構成要素であるマイクロコントローラ等の半導体装置１の全体構成を示す図である。半導体装置１は、半導体チップに形成されており、複数の中央処理装置ＣＰＵ１、ＣＰＵ２と、ＳＲＡＭの様なランダムアクセスメモリＲＡＭと、フラシュメモリの様な不揮発性メモリＲＯＭと、複数の機能ブロックとされる周辺回路（ＴＭＲ、ＡＤＣ、ＳＣＩ、ＣＡＮ）と、テスト制御回路ＴＥＳＴＣと、を含む。これらの回路（ＣＰＵ１，ＣＰＵ２，ＲＡＭ，ＲＯＭ、ＴＭＲ、ＡＤＣ、ＳＣＩ、ＣＡＮ、ＴＥＳＴＣ）は、バスＢＵＳによって相互に接続されている。
【０１０４】
周辺回路（ＴＭＲ、ＡＤＣ、ＳＣＩ、ＣＡＮ）において、ＴＭＲはタイマ回路であり、ＡＤＣはアナログデジタル変換回路、ＳＣＩはシリアル通信回路であり、ＣＡＮはコントローラエリアネットワーク回路である。周辺回路は、自己診断の対象とされる機能ブロックである。
【０１０５】
テスト制御回路ＴＥＳＴＣは、図１、図３、図２０で説明した、スキャン制御部（１００，１００ａ、１００ｂ）と、テストパターン発生回路ＰＧと、圧縮回路ＣＯＭＰと、比較結果保持回路（ＲＣＳ）と、自己診断制御部４００と、を含む。テスト制御回路ＴＥＳＴＣは、図２１で説明した様に、機能ブロックが使用されていない期間に、対応するスキャン制御部に対して、スキャンテストの実行を制御信号によって指示し、実施例および変形例で説明した様に、機能ブロックにおいて自己診断が実施される。テスト制御回路ＴＥＳＴＣは、各機能ブロックからのエラー判定結果信号を受信し、車載電子機器のシステム制御装置へエラーの有無を通知する。
【０１０６】
なお、上記では、自己診断の対象を、周辺回路（ＴＭＲ、ＡＤＣ、ＳＣＩ、ＣＡＮ）としたが、それに限定されるわけではない。自己診断の対象は、複数の中央処理装置ＣＰＵ１、ＣＰＵ２を含んでも良い。この場合、例えば、中央処理装置ＣＰＵ１、ＣＰＵ２の一方がスリープなどで非動作となっている時に、スリープ状態の中央処理装置の自己診断を行えばよい。
【０１０７】
以上、本発明者によってなされた発明を実施例に基づき具体的に説明したが、本発明は、上記実施形態および実施例に限定されるものではなく、種々変更可能であることはいうまでもない。
【符号の説明】
【０１０８】
１：半導体装置、１００：スキャン制御部、２００：機能ブロック、Ｑ１，Ｑ２，Ｑ３：フリップフロップ、３４０：多数決回路、３６０：エラー判定回路、４００：自己診断実行制御部。
【図１】
2019191064.tif 000003
【図２】
2019191064.tif 000004
【図３】
2019191064.tif 000005
【図４】
2019191064.tif 000006
【図５】
2019191064.tif 000007
【図６】
2019191064.tif 000008
【図７】
2019191064.tif 000009
【図８】
2019191064.tif 000010
【図９】
2019191064.tif 000011
【図１０】
2019191064.tif 000012
【図１１】
2019191064.tif 000013
【図１２】
2019191064.tif 000014
【図１３】
2019191064.tif 000015
【図１４】
2019191064.tif 000016
【図１５】
2019191064.tif 000017
【図１６】
2019191064.tif 000018
【図１７】
2019191064.tif 000019
【図１８】
2019191064.tif 000020
【図１９】
2019191064.tif 000021
【図２０】
2019191064.tif 000022
【図２１】
2019191064.tif 000023
【図２２】
2019191064.tif 000024