(57)【要約】      （修正有）【課題】トレース機能が異常の場合に、ＣＰＵが長期間停止し続けることを避ける半導体装置を提供する。【解決手段】半導体装置１００は、ＣＰＵ３０の実行情報３４に基づくトレースデータを外部に出力する前に一時的に保存バッファ４１に保存するトレースデータ保存回路４０を含む。トレースデータ保存回路４０は、保存バッファ４１の保存量が閾値量を超えた場合に、ＣＰＵ３０に命令実行を停止させる停止要求４４を出力する。半導体装置１００は、さらに、トレース機能が異常か否かを判定する異常判定回路５０と、異常判定回路５０によって異常と判定された場合に停止要求４４をＣＰＵ３０に伝達しないゲート回路６０とを備える。【選択図】図１
2020173543.tif 000002
【特許請求の範囲】
【請求項１】
実行情報を出力する中央処理装置と、
前記実行情報に基づいたトレースデータを、外部に出力する前に一時的に保存バッファに保存するトレースデータ保存回路とを備え、前記トレースデータ保存回路は、前記保存バッファの保存量が閾値量を超えた場合に、前記中央処理装置に命令実行を停止させる停止要求を出力し、
前記実行情報、前記保存バッファに入力される前記トレースデータ、前記保存バッファから外部に出力される前記トレースデータ、および前記停止要求の少なくとも１つを監視対象情報として監視し、前記監視対象情報が異常か否かを判定する異常判定回路と、
前記監視対象情報が異常でないと判定された場合に、前記停止要求を前記中央処理装置に伝達することによって前記中央処理装置の動作を停止させ、前記監視対象情報が異常であると判定された場合に、前記停止要求を前記中央処理装置に伝達しないゲート回路とをさらに備える、半導体装置。
【請求項２】
前記監視対象情報は、前記停止要求であり、
前記異常判定回路は、前記停止要求が出力される時間に基づいて、前記停止要求が異常であるか否かを判定する、請求項１に記載の半導体装置。
【請求項３】
前記監視対象情報は、前記実行情報、前記保存バッファに入力される前記トレースデータ、および前記保存バッファから外部に出力される前記トレースデータのうちの少なくとも１つであり、
前記異常判定回路は、前記監視対象情報に含まれる少なくとも一部のデータの変化に基づいて、前記監視対象情報が異常であるか否かを判定する、請求項１に記載の半導体装置。
【請求項４】
前記異常判定回路は、前記監視対象情報が異常であると判定した場合に、前記中央処理装置に割り込み通知を出力する、請求項１に記載の半導体装置。
【請求項５】
前記異常判定回路は、前記異常判定回路の判定結果を保存するための結果保存レジスタを含み、
前記結果保存レジスタに保存された値は、前記半導体装置の外部から読み出し可能である、請求項１に記載の半導体装置。
【請求項６】
前記半導体装置は、
前記実行情報に基づいて前記トレースデータを生成するトレースデータ生成回路をさらに備え、
前記異常判定回路は、前記監視対象情報が異常であると判定した場合に、判定結果に関係するトレースメッセージを生成するように前記トレースデータ生成回路に要求するとともに、前記保存バッファのクリアを前記トレースデータ保存回路に要求する、請求項１に記載の半導体装置。
【請求項７】
前記異常判定回路は、
前記停止要求が出力されている間、カウント値をインクリメントするカウンタと、
前記カウンタのカウント値を閾値と比較する比較器とを含み、
前記異常判定回路は、前記カウンタのカウント値が前記閾値を超えたときに前記停止要求は異常であると判定する、請求項２に記載の半導体装置。
【請求項８】
前記異常判定回路は、前記閾値を保存する閾値保存レジスタを含み、
前記閾値保存レジスタの値は、前記半導体装置の外部から設定可能である、請求項７に記載の半導体装置。
【請求項９】
前記カウンタは、前記停止要求が取り下げられたときにカウント値をクリアする、請求項７に記載の半導体装置。
【請求項１０】
前記カウンタは、前記停止要求が取り下げられたときにカウント値のデクリメントを開始する、請求項７に記載の半導体装置。
【請求項１１】
前記カウンタは、前記停止要求が取り下げられたときにカウント値を現在の値のまま保持する、請求項７に記載の半導体装置。
【請求項１２】
前記異常判定回路は、
前記停止要求が出力されたときにカウント値のインクリメントを開始し、前記停止要求が取り下げられたときにカウント値を現在の値のまま保持する第１のカウンタと、
前記停止要求が出力されたときにカウント値をクリアし、前記停止要求が取り下げられたときにカウント値のインクリメントを開始する第２のカウンタとを備え、
前記異常判定回路は、前記第１のカウンタのカウント値が第１の閾値を超えたときに、前記停止要求が異常であると判定し、
前記第２のカウンタのカウント値が第２の閾値を超えたときに、前記第１のカウンタおよび前記第２のカウンタの各々は、カウント値をクリアする、請求項２に記載の半導体装置。
【請求項１３】
前記カウンタのカウント値の最大値を保持するための最大値保存回路をさらに備え、
前記最大値保存回路は、
最大値保存レジスタと、
前記カウンタから新たに出力されるカウント値と前記最大値保存レジスタに保存された値とを比較し、前記新たに出力されたカウント値が、前記最大値保存レジスタに保存された値よりも大きい場合に、前記新たに出力されたカウント値によって前記最大値保存レジスタに保存された値を更新する、請求項７に記載の半導体装置。
【請求項１４】
実行情報を出力する中央処理装置と、
前記中央処理装置の動作状態に基づいてシステムリセットを要求するウォッチドッグタイマと、
前記実行情報に基づいたトレースデータを、外部に出力する前に一時的に保存バッファに保存するトレースデータ保存回路とを備え、前記トレースデータ保存回路は、前記保存バッファの保存量が閾値量を超えた場合に、前記中央処理装置に命令実行を停止させる停止要求を出力し、
前記実行情報、前記保存バッファに入力される前記トレースデータ、前記保存バッファから外部に出力される前記トレースデータ、および前記停止要求の少なくとも１つを監視対象情報として監視し、前記監視対象情報が異常か否かを判定する異常判定回路と、
前記監視対象情報が異常であると判定された場合に、前記システムリセットの要求に基づいて、前記トレースデータ保存回路および前記異常判定回路をリセットし、前記監視対象情報が異常でないと判定された場合に、前記システムリセットの要求にかかわらず前記トレースデータ保存回路および前記異常判定回路をリセットしないリセットコントローラとをさらに備える、半導体装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この開示は、半導体装置に関し、たとえば、デバッグ機能を内蔵しているマイクロコントローラまたはマイクロプロセッサなどに関する。
【背景技術】
【０００２】
特開２００１−１０９６４３号公報（特許文献１）は、デバッグのためのトレース機能を内蔵したマイクロプロセッサを開示する。
【０００３】
具体的に、このプロセッサは、デバッグ処理部とデバッグ処理時間制御部とを備える。デバッグ処理部は、外部に出力するトレース情報を一時的に保存するバッファを含む。デバッグ処理部は、バッファのオーバーフローが発生すると、トレース情報の出力を完了するまでＣＰＵ（Central  Processing  Unit）における次の命令の実行を停止させることを要求できる。ただし、この要求は、デバッグ処理時間制御部によって許可された場合に限られる。
【０００４】
デバッグ処理時間制御部は、デバッグ対象のプログラムの実行時間を長引かせることなく、十分なデバッグ情報出力を得ることを目的とする。より詳細には、デバッグ処理時間制御部は、詳細なデバッグ情報が必要な期間において、ＣＰＵからの出力に基づいてＣＰＵの停止時間を計測する。デバッグ処理時間制御部は、この計測結果に基づいてＣＰＵに動作停止を許可する総時間を制限する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００１−１０９６４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記の特許文献１に開示された技術では、デバッグ機能に関係した故障が考慮されていないという問題がある。たとえば、上記のデバッグ処理時間制御部からの停止許可とは無関係に、デバッグ処理部からＣＰＵに対して命令の実行を停止させる要求を出力し続けるような故障が生じた場合を想定する。このような故障が生じると、デバッグ対象のプログラムの処理時間が著しく増大する。
【０００７】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００８】
一実施形態による半導体装置は、トレースデータ保存回路と、異常判定回路と、ゲート回路とを備える。トレースデータ保存回路は、保存バッファの保存量が閾値量を超えた場合に、ＣＰＵに命令実行を停止させる停止要求を出力する。異常判定回路は、トレース機能が異常か否かを判定する。ゲート回路は、異常判定回路によって異常と判定された場合にＣＰＵの停止要求をＣＰＵに伝達しない。
【発明の効果】
【０００９】
上記の実施形態によれば、ＣＰＵが長期間停止し続けることを防止できる。
【図面の簡単な説明】
【００１０】
【図１】第１の実施形態における半導体装置の構成の一例を模式的に示すブロック図である。
【図２】実行情報の一例を示す図である。
【図３】第２の実施形態における半導体装置の構成例を模式的に示すブロック図である。
【図４】図３に示す半導体装置の動作を示すフローチャートである。
【図５】図３の半導体装置の各種の信号の時間変化を示すタイミング図である。
【図６】第３の実施形態における半導体装置の構成例を模式的に示すブロック図である。
【図７】図６に示す半導体装置の動作を示すフローチャートである。
【図８】第４の実施形態における半導体装置の構成例を模式的に示すブロック図である。
【図９】図８に示す半導体装置の動作を示すフローチャートである。
【図１０】第５の実施形態における半導体装置の構成例を模式的に示すブロック図である。
【図１１】第６の実施形態における半導体装置の構成例を模式的に示すブロック図である。
【図１２】第７の実施形態の半導体装置において、異常判定回路に設けられたカウンタの動作を説明するためのタイミング図である。
【図１３】第７の実施形態による半導体装置の動作の一例を示すフローチャートである。
【図１４】第８の実施形態における半導体装置の構成例を模式的に示すブロック図である。
【図１５】図１４に示す半導体装置の動作を示すフローチャートである。
【図１６】図１４に示す半導体装置の動作を示すタイミング図である。
【図１７】第９の実施形態における半導体装置の構成を模式的に示すブロック図である。
【発明を実施するための形態】
【００１１】
以下、各実施形態について図面を参照して詳しく説明する。なお、同一または相当する部分には同一の参照符号を付して、その説明を繰り返さない。
【００１２】
＜第１の実施形態＞
［半導体装置の構成と動作］
図１は、第１の実施形態における半導体装置の構成の一例を模式的に示すブロック図である。半導体装置１００は、デバッグ機能を内蔵するマイクロコントローラまたはマイクロプロセッサである。半導体装置１００は、デバッグ機能の１つとして、ＣＰＵにおける実行情報３４に基づいて生成されたトレースデータ４６を、外部の開発ツール１０５に出力できる。
【００１３】
具体的に、半導体装置１００は、ＣＰＵ３０と、プログラム格納メモリ３５と、トレースデータ生成回路６５と、トレースデータ保存回路４０と、異常判定回路５０と、ゲート回路６０とを含む。
【００１４】
ＣＰＵ３０は、命令実行回路３１と、実行情報出力回路３２とを含む。命令実行回路３１は、プログラムカウンタに格納されているアドレスに従って、プログラム格納メモリ３５から命令３６を読み出し、読み出した命令３６を実行する。命令実行回路３１は、命令３６の実行結果３３を実行情報出力回路３２に出力する。
【００１５】
実行情報出力回路３２は、命令実行回路３１から受け取った実行結果３３を、実行情報３４の形式でＣＰＵ３０の外部に出力する。実行情報３４は、命令実行時にプログラムカウンタに格納されていたアドレス値（ＰＣ値とも称する）、命令の種別、およびアドレス情報などを含む。
【００１６】
図２は、実行情報の一例を示す図である。図２（Ａ）には、分岐命令が実行されたときの実行情報３４の例が示されている。図２（Ｂ）には、メモリアクセス命令が実行されたときの実行情報３４の例が示されている。
【００１７】
図２（Ａ）に示す例において、実行情報３４は、ＰＣ値１２０と、命令種別１２１と、分岐元アドレス１２２とを含む。この例の場合、命令種別１２１は分岐命令であり、ＰＣ値１２０は分岐先アドレスに相当する。
【００１８】
図２（Ｂ）に示す例において、実行情報３４は、ＰＣ値１２０と、命令種別１２１と、アクセスアドレス１２４と、アクセスデータ１２５とを含む。この例の場合、命令種別１２１はライト命令およびリード命令などである。
【００１９】
再び図１を参照して、トレースデータ生成回路６５は、実行情報出力回路３２から受け取った実行情報３４からデバッグに必要な情報を取り出す。すなわち、実行情報３４に対してフィルタリング処理が行われる。さらに、トレースデータ生成回路６５は、フィルタリング処理された実行情報３４を、規定のフォーマットに従うように変換する。これによって、トレースデータ６６が生成される。
【００２０】
なお、図１では、トレースデータ生成回路６５とトレースデータ保存回路４０とは別個の構成として示されている。これに代えて、トレースデータ生成回路６５はトレースデータ保存回路４０に含まれていてもよい。
【００２１】
トレースデータ保存回路４０は、保存バッファ４１と、保存量監視回路４２とを含む。トレースデータ保存回路４０は、トレースデータ生成回路６５から入力されたトレースデータ６６を、保存バッファ４１に保存する。トレースデータ保存回路４０は、ＦＩＦＯ（First  In、First  Out）方式で、保存バッファ４１に保存されているトレースデータ４６を半導体装置１００の外部の開発ツール１０５に出力する。外部に出力したトレースデータ４６は、保存バッファ４１から消去される。
【００２２】
保存量監視回路４２は、保存バッファ４１に保存されているトレースデータの保存量４３の情報を取得する。保存量４３とは、保存バッファ４１の全容量のうちどの程度がデータで埋まっているかを示す情報である。保存量監視回路４２は、保存量４３が閾値量Ｓｔｈ１を超えているときに、ＣＰＵ３０における命令実行を停止させるための停止要求４４を出力する。
【００２３】
以下の説明では、停止要求４４を出力することを、停止要求４４をアクティブにするとも言う。停止要求４４を出力しないことを、停止要求４４をインアクティブにするとも言う。
【００２４】
停止要求４４を出力する理由は次のとおりである。保存バッファ４１から開発ツール１０５へ出力されるトレースデータ４６のデータ量よりも、保存バッファ４１に入力されるトレースデータ６６のデータ量の方が多い状況を想定する。たとえば、ＣＰＵ３０から実行情報３４が連続して出力された場合などに、このような状況が生じ得る。上記の状況が生じたことによって保存バッファ４１がオーバーフローすると、トレースデータ保存回路４０はトレースデータ６６を受け取れない。結果として、トレースデータ６６を損失する。このようなデータの損失を防ぐために、保存バッファ４１がオーバーフローする前に、すなわち、保存バッファ４１の保存量４３が定められた閾値量Ｓｔｈ１を超えると、保存量監視回路４２は停止要求４４を出力する。なお、このようなトレース機能の実行モードを、ノンリアルタイムトレースという。
【００２５】
異常判定回路５０は、上記の実行情報３４、トレースデータ６６、トレースデータ４６、および停止要求４４のうちの少なくとも１つを監視対象情報として監視する。異常判定回路５０は、監視対象情報が正常か異常かを判定する。異常判定回路５０は、監視対象情報が特定の条件を満たすときにその監視対象情報を異常と判定する。監視対象情報が異常な場合、デバッグ処理に関係する上記の回路３２，６５，４０およびその接続配線などのいずれかにおいて故障が生じていると推定できる。
【００２６】
具体的な異常判定基準は、第２の実施形態および第３の実施形態において説明する。たとえば、第２の実施形態の場合、異常判定回路５０は、停止要求４４が閾値時間以上連続して出力されている場合に、停止要求４４を異常と判定する。第３の実施形態の場合、異常判定回路５０は、実行情報３４、トレースデータ６６、およびトレースデータ４６の少なくとも１つの信号を監視対象情報として監視する。異常判定回路５０は、同じ監視対象情報が予め定められた回数連続して出力されている場合に、その監視対象情報を異常と判定する。
【００２７】
異常判定回路５０は、監視対象情報を正常と判定した場合に、ゲート回路６０に出力する停止許可信号６１をアクティブにする。すなわち、ＣＰＵ３０による命令実行を停止することが許可される。半導体装置１００がリセットされた初期状態において、停止許可信号６１はアクティブである。
【００２８】
異常判定回路５０は、監視対象情報を異常と判定した場合に、ゲート回路６０に出力する停止許可信号６１をインアクティブにする。したがって、ＣＰＵ３０による命令実行を停止することが不許可にされる。一旦、停止許可信号６１を一旦インアクティブにすると、その後は、停止許可信号６１はインアクティブのまま維持される。したがって、ＣＰＵ３０による命令実行は、トレースデータ保存回路４０からの停止要求４４によって停止されることはない。すなわち、動作モードが、ノンリアルタイムトレースからリアルタイムトレースに変更された。
【００２９】
ゲート回路６０は、保存量監視回路４２から停止要求４４を受け取るとともに、異常判定回路５０から停止許可信号６１を受け取る。ゲート回路６０は、停止許可信号６１がアクティブ状態の期間、保存量監視回路４２から出力された停止要求４４を、そのままＣＰＵ３０に通知する。ゲート回路６０は、停止許可信号６１がインアクティブになると、保存量監視回路４２から出力された停止要求４４を不許可にする。
【００３０】
以上を言い替えると、ゲート回路６０は、入力された停止要求４４および停止許可信号６１が両方ともアクティブの場合に、ＣＰＵ３０に出力する停止要求４５をアクティブにする。ゲート回路６０は、入力された停止要求４４および停止許可信号６１のうち少なくとも一方がインアクティブのとき、ＣＰＵ３０に出力する停止要求４５をインアクティブにする。
【００３１】
ＣＰＵ３０は、入力された停止要求４５がアクティブの期間、次の命令の実行を停止する。これによって、保存バッファ４１には新たなトレースデータ６６が入力されなくなるので、保存バッファ４１のオーバーフローを防止できる。
【００３２】
［第１の実施形態の効果］
デバッグ機能を実現するために、様々な理由からＣＰＵ３０に対して命令実行の停止を要求することがある。本実施形態は、ＣＰＵ３０の実行情報３４をトレースデータの形式で、外部の開発ツール１０５またはメモリなどに転送する場合に関係する。たとえば、トレースデータ６６の一次保存に用いる保存バッファ４１のオーバーフローによるトレースデータ６６の損失を防止するために、ＣＰＵ３０に対して命令実行の停止が要求される。
【００３３】
通常、デバッグ機能を実現するために出力された停止要求４４は、停止要求４４の原因となった事象が解決されると取り下げられる。前述したような保存バッファ４１のオーバーフローの場合には、保存バッファ４１の保存量が閾値量Ｓｔｈ２以下に戻ると停止要求４４が取り下げられる。なお、閾値量Ｓｔｈ２の設定値は、０以上かつ閾値量Ｓｔｈ１以下の値から選択される。通常、停止要求４４がアクティブ状態とインアクティブ状態とに頻繁に切り替わることを避けるため、閾値量Ｓｔｈ２は閾値量Ｓｔｈ１よりも小さな値に設定される。
【００３４】
ここで、たとえば、半導体装置１００の保存バッファ４１から開発ツール１０５へのトレースデータ４６の出力経路において故障が発生した場合には、停止要求４４は取り下げられない。なぜなら、保存バッファ４１から外部の開発ツール１０５にトレースデータ４６が出力できないので、トレースデータ４６は保存バッファ４１に残る。このため、保存バッファ４１の保存量は閾値量Ｓｔｈ２以下に戻らず、保存量監視回路４２は停止要求４４を出力し続ける。すなわち、保存量監視回路４２から出力される停止要求４４は、アクティブの状態でロックされる。この結果、ＣＰＵ３０において命令の実行が停止された状態が長期間継続する。
【００３５】
本実施形態の場合には、ＣＰＵに対する停止要求がアクティブの状態でロックされることによりＣＰＵが長期間停止することを防止するために、異常判定回路５０とゲート回路６０とが設けられている。
【００３６】
前述のように、異常判定回路５０は、停止要求４４、トレースデータ４６、トレースデータ６６、および実行情報３４のうち少なくとも１つを監視対象情報として監視する。異常判定回路５０は、監視対象情報を異常と判定すると、停止許可信号６１をインアクティブにする。これによって、ＣＰＵ３０の命令実行回路３１に入力される停止要求４５は、強制的にインアクティブに切り替えられる。この結果、ＣＰＵ３０は命令の実行を再開できるので、ＣＰＵによる命令実行が長期に停止することを防止できる。
【００３７】
［特許文献１の技術との比較］
以下、本実施形態と前述の特許文献１に開示された技術とを比較する。前述の特許文献１の場合には、デバッグ処理時間制御部は、ＣＰＵからの出力に基づいてＣＰＵの停止時間を計測し、計測結果に基づいてＣＰＵに動作停止を許可する総時間を制限していた。このような回路構成では、ＣＰＵ自身が停止状態であることを出力できなくなると、正常に動作しない。これに対して、本実施形態の場合には、ＣＰＵの動作状態の情報には依存していない。
【００３８】
また、通常、ＣＰＵを初めとして、実際に市場に出た後に動作する回路は、故障が発生しない、または、故障が発生してもそれを検出することが可能な回路構成となっている。一方、デバッグ機能を実現するための回路は通常、市場で動作しないため、故障発生時のことを考慮した強固な回路構成となっていないことが多い。
【００３９】
本実施形態におけるデバッグ機能を実現するための回路は、基本的な回路構成に異常判定回路５０とゲート回路６０とを追加するだけで、ＣＰＵによる命令実行が停止した状態が長期に継続することを防止できる。
【００４０】
さらに、本実施形態の場合には、異常判定回路５０およびゲート回路６０のいずれか一方が故障したとしても、ＣＰＵによる命令実行が停止した状態が長期に継続することを防止できる。
【００４１】
たとえば、異常判定回路５０の故障によって、停止許可信号６１が意図せずにインアクティブ状態でロックした場合を想定する。この場合、ゲート回路６０からＣＰＵ３０に出力される停止要求４５がインアクティブ状態で固定される。したがって、保存バッファ４１のオーバーフローによってトレースデータの損失があったとしても、ＣＰＵの停止状態が長期間継続されることはない。
【００４２】
その他の例として、異常判定回路５０の故障によって、停止許可信号６１が意図せずにアクティブ状態でロックした場合を想定する。この場合、保存量監視回路４２から出力される停止要求４４がインアクティブ状態でロックすると、ＣＰＵの停止状態が長期間継続する。しかし、保存量監視回路４２と異常判定回路５０との２カ所が同時に故障する確率は極めて小さいと考えられる。
【００４３】
一方、前述の特許文献１の場合には、デバッグ処理時間制御部が正常に動作していたとしても、デバッグ処理部が故障するとＣＰＵの停止状態が継続する場合がある。具体的に、デバッグ処理部からＣＰＵに対して命令実行を停止させる要求を出力し続けるような故障が生じると、ＣＰＵの停止状態が継続する。
【００４４】
＜第２の実施形態＞
第２の実施形態では、図１の異常判定回路５０の詳細な構成の一例が示される。具体的に、第２の実施形態の半導体装置１００Ａにおける異常判定回路５０は、保存量監視回路４２から出力された停止要求４４を監視する。より詳細には、異常判定回路５０は、停止要求４４がアクティブとなっている期間を計測する。そして、異常判定回路５０は、停止要求４４がアクティブとなっている期間が閾値時間を超えて継続している場合に、停止許可信号６１をインアクティブに切り替える。以下、図面を参照して具体的に説明する。
【００４５】
［半導体装置の構成］
図３は、第２の実施形態における半導体装置の構成例を模式的に示すブロック図である。図３の半導体装置１００Ａは、図１の半導体装置１００を変形したものである。以下では、図１の半導体装置１００と異なる構成について説明し、同一または相当する構成については、同一または類似の参照符号を付すことによりその説明を繰り返さない。
【００４６】
図３の半導体装置１００Ａにおいて、異常判定回路５０は、カウンタ５１と、閾値保存レジスタ５２と、比較器５３とを含む。
【００４７】
カウンタ５１は、保存量監視回路４２から出力されるＣＰＵの停止要求４４がアクティブに切り替わるとカウントを開始する。カウンタ５１は、停止要求４４がインアクティブに切り替わるとリセットされる。これによって、カウンタ５１は、ＣＰＵの停止要求４４がアクティブ状態となっている期間を検出できる。
【００４８】
閾値保存レジスタ５２は、カウンタ５１のカウント値を比較するための閾値Ｃｔｈを保存する。ＣＰＵ３０は、閾値保存レジスタ５２に保存される閾値設定値７０を変更できる。外部の開発ツール１０５も、閾値保存レジスタ５２に保存される閾値設定値７１を変更できる。したがって、ユーザは、ＣＰＵ３０において動作させるプログラムまたは開発ツール１０５を利用することにより、閾値保存レジスタ５２に保存すべき閾値Ｃｔｈを任意の値に設定できる。
【００４９】
比較器５３は、カウンタ５１のカウント値と閾値保存レジスタ５２に保存されている閾値Ｃｔｈとを比較する。比較器５３は、カウント値が閾値Ｃｔｈよりも大きい場合に、ゲート回路６０に出力する停止許可信号６１をアクティブからインアクティブに切り替える。なお、カウント値が閾値Ｃｔｈよりも大きい場合とは、閾値Ｃｔｈに対応する時間を超えて停止要求４４のアクティブ状態が継続している場合に相当する。停止許可信号６１をインアクティブに切り替えることによって、ＣＰＵによる命令実行の停止状態が意図せずに長期に継続することを防止できる。
【００５０】
比較器５３は、さらに、カウント値が閾値Ｃｔｈよりも大きい場合に、割り込み通知５８をＣＰＵ３０の命令実行回路３１に出力してもよい。これによって、ＣＰＵ３０の命令実行回路３１は、現在実行中の処理フローから故障発生時に行うべき処理フローに切り替えることができる。たとえば、半導体装置１００Ａが実装されているシステム全体を安全に停止できる。
【００５１】
なお、停止要求４４が連続的に出力される期間は、保存バッファ４１へのトレースデータ６６の入力帯域と、保存バッファ４１からのトレースデータ４６の出力帯域とに基づいて概算できる。したがって、連続出力期間の概算値に基づいて、閾値保存レジスタ５２に格納すべき閾値Ｃｔｈを決定することができる。
【００５２】
［半導体装置の動作］
図４は、図３に示す半導体装置の動作を示すフローチャートである。以下、図３および図４を参照して、半導体装置１００Ａの動作について説明する。
【００５３】
ステップＳ１００において、ＣＰＵ３０の命令実行回路３１は、プログラムカウンタのＰＣ値に従って、プログラム格納メモリ３５から命令を取得し、取得した命令を実行する。
【００５４】
次のステップＳ１１０において、ＣＰＵ３０の実行情報出力回路３２は、命令実行回路３１による命令の実行結果３３に基づいて実行情報３４を出力する。
【００５５】
その次のステップＳ１２０において、トレースデータ生成回路６５は、実行情報３４からデバッグに必要なデータを取り出し、取り出したデータを規定のフォーマットに変換する。トレースデータ生成回路６５は、変換後のデータをトレースデータ６６としてトレースデータ保存回路４０に出力する。
【００５６】
その次のステップＳ１３０において、トレースデータ保存回路４０は、受け取ったトレースデータ６６を保存バッファ４１に一時的に保存する。
【００５７】
その次のステップＳ１４０において、トレースデータ保存回路４０は、保存バッファ４１に保存されているトレースデータ４６をＦＩＦＯ方式で外部の開発ツール１０５に出力する。
【００５８】
その次のステップＳ１５０において、保存量監視回路４２は、保存バッファ４１におけるトレースデータの保存量４３が閾値量Ｓｔｈ１を超えているか否かを判定する。保存バッファ４１における保存量４３が閾値量Ｓｔｈ１を超えていない場合には（ステップＳ１５０でＮＯ）、処理は最初のステップＳ１００に戻る。そして、命令実行回路３１は次の命令をプログラム格納メモリ３５から読み出す。
【００５９】
一方、保存バッファ４１における保存量４３が閾値量Ｓｔｈ１を超えている場合には（ステップＳ１５０でＹＥＳ）、保存量監視回路４２は、次のステップＳ１６０において停止要求４４をアクティブにする。すなわち、保存量監視回路４２は、ＣＰＵ３０における命令実行を停止させることを要求する。初期状態において停止許可信号６１はアクティブであるので、ゲート回路６０は、ＣＰＵ３０に対して停止要求４５を出力する。この結果、ＣＰＵ３０における命令実行が停止される。
【００６０】
その次のステップＳ１７０において、カウンタ５１は、停止要求４４がアクティブに切り替わったことに基づいて、カウント値のカウントアップを開始する。カウント値は１ずつインクリメントされる。その次のステップＳ１８０において、比較器５３は、カウンタ５１によるカウント値と閾値保存レジスタ５２に保存されている閾値Ｃｔｈとを比較する。
【００６１】
上記の比較の結果、カウンタ５１によるカウント値が閾値Ｃｔｈを超えていない場合には（ステップＳ１８０でＮＯ）、ＣＰＵの停止要求４４のアクティブ状態が継続される。したがって、ＣＰＵ３０から実行情報３４は出力されず、保存バッファ４１に新たにトレースデータ６６は保存されない。保存バッファ４１に保存されているトレースデータ４６の出力のみが継続される（ステップＳ２２０）。この結果、保存バッファ４１における保存量４３が閾値量Ｓｔｈ２以下となった場合には（ステップＳ２３０でＹＥＳ）、ステップＳ２４０に処理が進む。なお、閾値量Ｓｔｈ２の設定値は、０以上かつ閾値量Ｓｔｈ１以下の値から選択される。通常、閾値量Ｓｔｈ２は閾値量Ｓｔｈ１よりも小さな値に設定される。
【００６２】
ステップＳ２４０において、保存量監視回路４２は、停止要求４４をインアクティブにすることによって、ＣＰＵ３０における命令実行の停止を解除する。さらに、次のステップＳ２５０において、カウンタ５１は、カウント値を０にクリアする。その後、処理は最初のステップＳ１００に戻り、命令実行回路３１は次の命令をプログラム格納メモリ３５から読み出す。
【００６３】
一方、ステップＳ１８０における比較の結果、カウント値が閾値Ｃｔｈを超えた場合には（ＹＥＳ）、次のステップＳ１９０において、比較器５３は、停止許可信号６１をインアクティブに切り替える。すなわち、保存量監視回路４２から出力された停止要求４４は不許可にされる。この結果、ゲート回路６０からＣＰＵ３０に出力される停止要求４５は、インアクティブに切り替わるので、ＣＰＵ３０は命令の実行を再開する。
【００６４】
さらに、次のステップＳ２００において、比較器５３は、割り込み通知５８をＣＰＵ３０の命令実行回路３１に出力する。この割り込み通知５８に応答して、次のステップＳ２１０においてＣＰＵ３０の命令実行回路３１は、故障発生時に行うべき割り込み処理を実行する。
【００６５】
図５は、図３の半導体装置の各種の信号の時間変化を示すタイミング図である。図５において、停止要求４４、カウンタ５１のカウント値、停止許可信号６１、および停止要求４５の各時間変化と、ＣＰＵ３０の動作状態とが示されている。
【００６６】
以下の説明では、アクティブ状態はハイレベルに対応し、インアクティブ状態はローレベルに対応する。ただし、この対応関係は逆であっても構わない。図５において、信号のハイレベルおよびローレベルはそれぞれ“Ｈ”および“Ｌ”で表示される。以下、図３および図５を参照して、半導体装置１００Ａの動作についてさらに説明する。
【００６７】
図５の時刻ｔ１０よりも前は、ＣＰＵ３０は動作状態である。保存バッファ４１の保存量４３は閾値量Ｓｔｈ１を超えていないので、保存量監視回路４２から出力された停止要求４４はインアクティブ（Ｌレベル）である。異常判定回路５０から出力された停止許可信号６１は、アクティブ状態（Ｈレベル）に初期化されている。したがって、ゲート回路６０からＣＰＵ３０に出力された停止要求４５はインアクティブ状態（Ｌレベル）である。
【００６８】
時刻ｔ１０において、保存バッファ４１の保存量４３が閾値量Ｓｔｈ１を超えたために、保存量監視回路４２から出力される停止要求４４は、インアクティブ（Ｌレベル）からアクティブ（Ｈレベル）に切り替わる。これに伴い、カウンタ５１はカウントアップを開始する。カウンタ５１のカウント値は１ずつインクリメントされる。停止要求４４に応答して、ゲート回路６０からＣＰＵ３０に出力される停止要求４５も、インアクティブ（Ｌレベル）からアクティブ（Ｈレベル）に切り替わる。ＣＰＵ３０の命令実行回路３１は、このアクティブ状態の停止要求４５に応答して、命令の実行を停止する。
【００６９】
時刻ｔ１１において、カウンタのカウント値が閾値Ｃｔｈである５０を超えて５１になる。これによって、異常判定回路５０は、停止許可信号６１をインアクティブ（Ｌレベル）に切り替える。停止許可信号６１がインアクティブになると、ゲート回路６０からＣＰＵ３０に出力される停止要求４５もインアクティブ（Ｌレベル）に切り替わる。ＣＰＵ３０の命令実行回路３１は、このインアクティブ状態の停止要求４５を受けて、命令の実行を再開する。
【００７０】
以上により、ＣＰＵ３０の停止状態が継続することを防止することができる。また、時刻ｔ１１以降で、ＣＰＵ３０が異常判定回路５０から割り込み通知５８を受けている場合には、ＣＰＵ３０は、デバッグ機能の故障に応じた割り込み処理を実行できる。
【００７１】
一旦、異常判定回路５０から出力された停止許可信号６１がインアクティブ状態（Ｌレベル）に変化すると、特別な動作が行われない限り、停止許可信号６１のインアクティブ状態は維持される。すなわち、トレースモードはノンリアルタイムトレースからリアルタイムトレースに切り替わる。ここで、特別な動作とは、半導体装置１００Ａの全体をリセットさせる動作、および外部の開発ツール１０５によって異常判定回路５０をリセットする動作などである。
【００７２】
［第２の実施形態の効果］
以上のとおり、第２の実施形態では、第１の実施形態の半導体装置１００における異常判定回路５０の具体的構成例が示された。具体的に、第２の実施形態の半導体装置１００Ａにおいて異常判定回路５０は、トレースデータ保存回路４０から出力された停止要求４４を直接監視する。これによって、ＣＰＵの実行状態を監視することなく、ＣＰＵ３０に対して停止要求４４が意図せずに長期間出力され続けているか否かを判定できる。
【００７３】
また、第２の実施形態の半導体装置１００Ａにおいて異常判定回路５０は、停止要求４４の異常を検出した場合に、ＣＰＵ３０に対して割り込み通知５８を出力する。これによって、ＣＰＵ３０の命令実行回路３１は、現在実行中の処理フローから故障発生時に行うべき処理フローに切り替えることができる。たとえば、半導体装置１００Ａが実装されているシステム全体を安全に停止できる。
【００７４】
その他に関して、第２の実施形態における半導体装置１００Ａは、第１の実施形態における半導体装置１００とほぼ同様の効果を奏する。
【００７５】
＜第３の実施形態＞
第３の実施形態では、図１の異常判定回路５０の構成例として、第２の実施形態とは異なる構成が示される。具体的に、第３の実施形態の半導体装置１００Ｂにおける異常判定回路５０は、実行情報３４、トレースデータ６６、およびトレースデータ４６のうちの少なくとも１つを監視対象情報として監視する。以下、図面を参照して具体的に説明する。
【００７６】
［半導体装置の構成］
図６は、第３の実施形態における半導体装置の構成例を模式的に示すブロック図である。図６の半導体装置１００Ｂは、図１の半導体装置１００を変形したものである。以下では、図１の半導体装置１００と異なる構成について説明し、同一または相当する構成については、同一または類似の参照符号を付すことによりその説明を繰り返さない。
【００７７】
図３の半導体装置１００Ｂにおいて、異常判定回路５０は、情報解析回路５９を含む。情報解析回路５９は、実行情報３４、保存バッファ４１に入力されるトレースデータ６６、および保存バッファ４１から出力されたトレースデータ４６のうちの少なくとも１つを、監視対象情報として監視および解析する。情報解析回路５９は、監視対象情報を解析した結果として、監視対象情報が特定の条件を満たすときにその監視対象情報を異常と判定する。監視対象情報が異常な場合、デバッグ処理に関係した前述の回路３２，６５，４０およびその接続配線などにおいて故障が生じていると推定できる。
【００７８】
情報解析回路５９は、監視対象情報が異常であると判定した場合に、ゲート回路６０に出力する停止許可信号６１をアクティブからインアクティブに切り替える。さらに、情報解析回路５９は、監視対象情報が異常であると判定した場合に、割り込み通知５８をＣＰＵ３０の命令実行回路３１に出力してもよい。これによって、ＣＰＵ３０の命令実行回路３１は、現在実行中の処理フローから故障発生時に行うべき処理フローに切り替えることができる。
【００７９】
以下、どのような場合に、監視対象情報が異常と判定されるかについて、具体例を挙げて説明する。
【００８０】
（１．実行情報３４）
実行情報出力回路３２から出力されてトレースデータ生成回路６５に入力される実行情報３４を、監視対象情報として監視する場合について説明する。この場合、情報解析回路５９は、実行情報３４の少なくとも一部において、同じ情報が予め定める回数以上連続して現れる場合に、実行情報３４の異常と判定する。
【００８１】
具体的に、実行情報３４に含まれるプログラムカウンタ値（ＰＣ値）について、同じＰＣ値が予め定める回数連続して出力されている場合に、情報解析回路５９は実行情報３４を異常と判定する。この原因として、たとえば、ＣＰＵの実行に異常が発生して、プログラムの同じ箇所を何度も実行し続けることが考えられる。その他に、実行情報出力回路３２の故障の可能性がある。
【００８２】
（２．トレースデータ６６）
トレースデータ生成回路６５から出力されて保存バッファ４１に入力されるトレースデータ６６を、監視対象情報として監視する場合について説明する。この場合、情報解析回路５９は、トレースデータ６６の解析の結果として、同じトレースデータ６６が予め定める回数以上連続して現れる場合に、トレースデータ６６の異常と判定する。この原因として、たとえば、トレースデータ生成回路６５の故障が考えられる。
【００８３】
（３．トレースデータ４６）
保存バッファ４１から出力されて外部の開発ツール１０５に入力されるトレースデータ４６を、監視対象情報として監視する場合について説明する。この場合、情報解析回路５９は、トレースデータ４６を解析した結果として、同じトレースデータ４６が複数回連続して出力されている場合に、トレースデータ４６の異常と判定する。この原因として、たとえば、保存バッファ４１から開発ツール１０５に至るまでの伝送経路の故障が考えられる。
【００８４】
［半導体装置の動作］
図７は、図６に示す半導体装置の動作を示すフローチャートである。以下、図６および図７を参照して、半導体装置１００Ｂの動作について説明する。なお、図７に示すフローチャートは図４に示すフローチャートを変形したものである。以下の説明では、図４のフローチャートと共通するステップについては、同一の参照符号を付して説明を繰り返さない場合がある。
【００８５】
まず前提として、情報解析回路５９による監視対象情報の監視および解析は常時行われている。
【００８６】
最初のステップＳ１００からステップＳ１６０までは、図４の場合と同じである。したがって、詳しい説明を繰り返さない。ステップＳ１５０において、保存量監視回路４２は、保存バッファ４１における保存量４３が閾値量Ｓｔｈ１を超えていることを検出する（ステップＳ１５０でＹＥＳ）。この結果、次のステップＳ１６０において、保存量監視回路４２は、ＣＰＵの命令実行を一時的に停止させるために停止要求４４を出力する。
【００８７】
情報解析回路５９は、監視対象情報が異常であることを検出すると（ステップＳ１８１でＹＥＳ）、停止許可信号６１をインアクティブにする（ステップＳ１９０）。保存量監視回路４２から停止要求４４が出力されている（ステップＳ１６０）ときに、停止許可信号６１がインアクティブになると、当該停止要求４４は不許可にされる（ステップＳ１９０）。
【００８８】
さらに、次のステップＳ２００において、情報解析回路５９は、割り込み通知５８をＣＰＵ３０の命令実行回路３１に出力する。この割り込み通知５８に応答して、次のステップＳ２１０においてＣＰＵ３０の命令実行回路３１は、故障発生時に行うべき割り込み処理を実行する。
【００８９】
一方、停止要求４４が出力されている状態で、監視対象情報が正常である場合には、保存バッファ４１に保存されているトレースデータ４６の出力が継続される（ステップＳ２２０）。停止要求４４がアクティブであるので、ＣＰＵ３０から実行情報３４は出力されず、したがって、保存バッファ４１にトレースデータ６６は保存されない。
【００９０】
トレースデータ４６の出力（ステップＳ２２０）によって、保存バッファ４１における保存量４３が閾値量Ｓｔｈ２以下となった場合には（ステップＳ２３０でＹＥＳ）、ステップＳ２４０に処理が進む。なお、閾値量Ｓｔｈ２の設定値は、０以上かつ閾値量Ｓｔｈ１以下の値から選択される。通常、閾値量Ｓｔｈ２は閾値量Ｓｔｈ１よりも小さな値に設定される。
【００９１】
ステップＳ２４０において、保存量監視回路４２は、停止要求４４をインアクティブにすることによって、ＣＰＵ３０における命令実行の停止を解除する。その後、処理は上記のステップＳ１００に戻り、命令実行回路３１は次の命令をプログラム格納メモリ３５から読み出す。
【００９２】
［第３の実施形態の効果］
以上のとおり、第３の実施形態では、第１の実施形態の半導体装置１００における異常判定回路５０の具体的構成例が示された。具体的に、第３の実施形態の半導体装置１００Ｂにおいて異常判定回路５０は、実行情報３４、トレースデータ６６、およびトレースデータ４６のうちの少なくとも１つを、監視対象情報として監視する。これによって、デバッグ処理に関係した回路が故障しているか否かを判定できる。もし、監視対象情報を異常と判定した場合には、ＣＰＵ３０に対する停止要求４４を不許可にできる。
【００９３】
したがって、ＣＰＵ３０に対して停止要求４４が意図せずに長期間出力され続けることを防止できる。さらに、停止要求４４に応答してＣＰＵ３０が停止状態にある場合には、ＣＰＵ３０の動作を再開させて、ＣＰＵ３０に割り込み処理を実行させることができる。
【００９４】
また、第３の実施形態の半導体装置１００Ｂにおいて異常判定回路５０は、監視対象情報の異常を検出した場合に、ＣＰＵ３０に対して割り込み通知５８を出力する。これによって、ＣＰＵ３０の命令実行回路３１は、現在実行中の処理フローから故障発生時に行うべき処理フローに切り替えることができる。たとえば、半導体装置１００Ｂが実装されているシステム全体を安全に停止できる。
【００９５】
なお、トレースデータ６６および実行情報３４において異常が検出された場合、保存バッファ４１のオーバーフローの直接的な原因とならないことある。しかしながら、停止要求４４に応答してＣＰＵ３０の命令実行が停止状態である場合には、割り込み処理を実行するために当該停止要求４４を不許可にしなければならない。したがって、異常判定回路５０は、トレースデータ６６および実行情報３４の少なくとも一方の異常を検出したときにも、直ちに停止許可信号６１をインアクティブにする。
【００９６】
その他の点に関して、第３の実施形態における半導体装置１００Ｂは、第１の実施形態における半導体装置１００とほぼ同様の効果を奏する。
【００９７】
＜第４の実施形態＞
第４の実施形態の半導体装置１００Ｃは、第１〜第３の実施形態の場合と異なり、停止要求４４を不許可にするためのゲート回路６０を備えていない。したがって、停止要求４４はそのままＣＰＵ３０に出力される。ゲート回路６０に代えて、デバッグに関係する回路領域に対するシステムリセットを制御するためのリセットコントローラ８５が設けられる。
【００９８】
詳しくは後述するように、リセットコントローラ８５は、一般的なコンピュータシステムに設けられているウォッチドッグタイマからのリセット要求を利用する。リセットコントローラ８５は、通常は、このリセット要求に基づくシステムリセット信号を無効にする。しかし、異常判定回路５０によって監視対象情報の異常が検出された場合には、システムリセット信号を有効にする。この結果、ＣＰＵの実行を停止させる停止要求４４がアクティブ状態でロックされることによってＣＰＵ３０が長期間停止状態に陥ることを防止できる。以下、図面を参照して詳しく説明する。
【００９９】
なお、以下では、異常判定回路５０の具体的構成として、図３で説明した第２の実施形態における異常判定回路５０が示される。これに代えて、図６で説明した第３の実施形態における異常判定回路５０の場合にも、本実施形態の構成を適用可能である。
【０１００】
［半導体装置の構成］
図８は、第４の実施形態における半導体装置の構成例を模式的に示すブロック図である。図８の半導体装置１００Ｃは、ＣＰＵ３０と、プログラム格納メモリ３５と、トレースデータ生成回路６５と、トレースデータ保存回路４０と、異常判定回路５０とを含む。これらの構成は、図３の半導体装置１００Ａの場合とほぼ同様であるので詳しい説明を繰り返さない。
【０１０１】
半導体装置１００Ｃは、さらに、ウォッチドッグタイマ（ＷＤＴ：Watchdog  Timer）８１と、リセット回路８３と、リセットコントローラ８５と、レジスタ７５とを含む。これらの構成要素のうち、ウォッチドッグタイマ８１およびリセット回路８３は、一般的なコンピュータシステムに設けられている。
【０１０２】
ウォッチドッグタイマ８１は、その内部にカウンタ（不図示）を備える。このカウンタは、ＣＰＵ３０の命令実行回路３１から周期的に出力されるタイマクリア信号８０によってリセットされる。ＣＰＵ３０がデッドロックするなど何らかの原因によってタイマクリア信号８０が出力されなくなると、カウンタのカウント値が予め定められた閾値を超える。このとき、ウォッチドッグタイマ８１は、リセット回路８３にリセット要求８２を出力する。
【０１０３】
リセット回路８３は、リセット要求８２に応答して、半導体装置１００Ｃの内部回路を初期化するためのシステムリセット信号８４を出力する。なお、リセット回路８３は、ウォッチドッグタイマ８１以外の回路から出力されたリセット要求にも応答して、システムリセット信号８４を出力する。
【０１０４】
ここで、半導体装置１００Ｃの内部回路は、システムリセット信号８４に応答して直ちに初期化される領域と、直ちには初期化されない領域とに区分される。ＣＰＵリセットドメイン１１０と称する領域は、直ちに初期化される領域であり、ＣＰＵ３０およびプログラム格納メモリ３５を含む。デバッグリセットドメイン１１１と称する領域は、システムリセット信号８４がアクティブの場合でも直ちには初期化されない。この領域は、トレースデータ保存回路４０、トレースデータ生成回路６５、異常判定回路５０、およびレジスタ７５など、デバッグ機能に関係する回路を含む。
【０１０５】
レジスタ７５は、デバッグリセットドメイン１１１に対するシステムリセット信号８４を、有効にするか無効にするかの設定情報７７を格納する。この設定情報７７は、リセットコントローラ８５によって参照される。
【０１０６】
リセットコントローラ８５は、デバッグリセットドメイン１１１を初期化するためのリセット信号８６を出力する。リセット信号８６をアクティブにするか否かは、システムリセット信号８４、レジスタ７５の設定情報７７、および比較器５３から出力されるリセット許可信号８７に基づく。したがって、リセットコントローラ８５は、第１〜第３の実施形態におけるゲート回路６０と類似の機能を有している。
【０１０７】
ここで、異常判定回路５０に設けられた比較器５３は、図３の場合の停止許可信号６１に代えてリセット許可信号８７を出力する。半導体装置１００Ｃの初期状態において、リセット許可信号８７はインアクティブである。異常判定回路５０は、監視対象情報である停止要求４４が異常であると判定した場合に、リセット許可信号８７をアクティブにする。リセット許可信号８７がアクティブになると、デバッグリセットドメイン１１１に対するリセットが有効になる。
【０１０８】
リセットコントローラ８５は、レジスタ７５にリセット有効と設定されている場合には、リセット回路８３からシステムリセット信号８４に応答してリセット信号８６をアクティブにする。この結果、デバッグリセットドメイン１１１は初期化される。
【０１０９】
一方、レジスタ７５にリセット無効と設定されている場合には、リセットコントローラ８５は、リセット回路８３からシステムリセット信号８４を受け取っていても、基本的にはリセット信号８６をアクティブにしない。この結果として、デバッグリセットドメイン１１１は初期化されない。
【０１１０】
ただし、リセット許可信号８７がアクティブの場合には、レジスタ７５の設定情報７７がリセット無効であっても、リセット許可信号８７が優先される。この場合、リセットコントローラ８５は、リセット回路８３からシステムリセット信号８４を受け取ると、レジスタ７５の設定情報７７にかかわらず、リセット信号８６をアクティブにする。この結果、デバッグリセットドメイン１１１は初期化される。
【０１１１】
［半導体装置の動作］
図９は、図８に示す半導体装置の動作を示すフローチャートである。以下、図８および図９を参照して、半導体装置１００Ｃの動作について説明する。なお、図９に示すフローチャートは図４に示すフローチャートを変形したものである。以下の説明では、図４のフローチャートと共通するステップについては、同一の参照符号を付して説明を繰り返さない場合がある。
【０１１２】
まず初期状態では、レジスタ７５は、リセット有効に初期化されているため、デバッグ開始時にリセット無効に設定される（ステップＳ９０）。したがって、ウォッチドッグタイマ８１からのリセット要求８２に基づくシステムリセット信号８４を受けても、基本的には、デバッグリセットドメイン１１１は初期化されない。
【０１１３】
次のステップＳ１００からステップＳ１８０までと、ステップＳ１８０でＮＯの場合に実行されるステップＳ２２０からステップＳ２５０までは、図４の場合とほぼ同様である。したがって、若干の補足事項を除いて詳しい説明を繰り返さない。
【０１１４】
ステップＳ１５０において、保存量監視回路４２は、保存バッファ４１における保存量４３が閾値量Ｓｔｈ１を超えていることを検出する（ステップＳ１５０でＹＥＳ）。この結果、次のステップＳ１６０において、保存量監視回路４２は、ＣＰＵの命令実行を一時的に停止させるために停止要求４４を出力する。
【０１１５】
停止要求４４を受信することにより、ＣＰＵ３０は動作を停止し、周期的なタイマクリア信号８０の出力も停止する。この結果、ウォッチドッグタイマ８１に内蔵されたカウンタのカウント値が閾値を超えると、ウォッチドッグタイマ８１はリセット要求８２を出力する。このリセット要求８２に応答して、リセット回路８３は、システムリセット信号８４を出力する。前述のように、レジスタ７５はリセット無効に設定されている（ステップＳ９０）ので、この時点ではデバッグリセットドメイン１１１は初期化されない。
【０１１６】
その後、異常判定回路５０に設けられたカウンタ５１のカウント値が閾値Ｃｔｈを超えると（ステップＳ１８０でＹＥＳ）、異常判定回路５０から出力されるリセット許可信号８７がアクティブになる。
【０１１７】
依然としてＣＰＵ３０は動作を停止しているので、やがて、ウォッチドッグタイマ８１はリセット要求８２を出力する（ステップＳ２７０）。このリセット要求８２に応答して、リセット回路８３は、システムリセット信号８４を出力する。この結果、レジスタ７５の設定内容にかかわらず、リセットコントローラ８５から出力されるリセット信号８６はアクティブになる。これにより、ＣＰＵリセットドメイン１１０とともにデバッグリセットドメイン１１１も初期化されるので（ステップＳ２８０）、トレースデータ保存回路４０の保存バッファ４１がクリアされる。したがって、ＣＰＵの停止要求４４はインアクティブ状態に戻り、ＣＰＵ３０は、ＣＰＵリセットドメイン１１０のリセット解除後に命令を実行できる。
【０１１８】
［第４の実施形態の効果］
従来のマイクロコンピュータシステムでは、ウォッチドッグタイマ８１からリセット要求８２が出力されても、デバッグリセットドメイン１１１は初期化されない場合が多かった。この理由は、デバッグリセットドメイン１１１が初期化されると、外部の開発ツール１０５から各種レジスタの値を再設定する必要が生じるためである。この再設定の時間を短縮するためにデバッグリセットドメイン１１１は、リセット要求８２によって初期化されないようにしている。他の理由として、初期化される直前の実行情報を保存する必要があるが、デバッグリセットドメイン１１１が初期化されると、実行情報が保存できなくなるからである。
【０１１９】
しかしながら、上記のようなシステム構成の場合、ＣＰＵの停止要求４４がアクティブ状態でロックされたために、ウォッチドッグタイマからリセット要求が出力された場合に不都合が生じる。なぜなら、ＣＰＵリセットドメイン１１０が初期化された後も、ＣＰＵの停止要求４４がアクティブ状態でロックされ続け、ＣＰＵの停止状態が長期間継続するからである。この結果、ウォッチドッグタイマ８１によってマイクロコンピュータシステムを通常状態に復帰させることができない。
【０１２０】
第４の実施形態の半導体装置１００Ｃによれば、異常判定回路５０によって停止要求４４が意図せずに長時間出力され続けていると、リセット許可信号８７がアクティブ状態になる。この結果、レジスタ７５の設定情報にかかわらず、ウォッチドッグタイマ８１からのリセット要求８２に基づくシステムリセット信号８４に応答して、デバッグリセットドメイン１１１が初期化される。これにより、第１〜第３の実施形態の場合と同様に、ＣＰＵの停止状態が長期間継続することを防止できる。
【０１２１】
＜第５の実施形態＞
第５の実施形態の半導体装置１００Ｄでは、異常判定回路５０の判定結果を格納するための結果保存レジスタ９０が異常判定回路５０の内部に設けられる。結果保存レジスタ９０の内容は、ＣＰＵ３０からも外部の開発ツール１０５からも読み出し可能である。また、第５の実施形態の半導体装置１００Ｄにおいて、異常判定回路５０は、監視対象情報を異常と判定した場合に、割り込み通知５８をＣＰＵ３０に出力しなくてもよい。以下、図面を参照して詳しく説明する。
【０１２２】
なお、以下では、異常判定回路５０の具体的構成として、図３で説明した第２の実施形態における異常判定回路５０が示される。これに代えて、図６で説明した第３の実施形態における異常判定回路５０の場合にも、第５の実施形態の構成を適用可能である。
【０１２３】
［半導体装置の構成］
図１０は、第５の実施形態における半導体装置の構成例を模式的に示すブロック図である。
【０１２４】
図１０の半導体装置１００Ｄは、異常判定回路５０が結果保存レジスタ９０をさらに含む点において図３の半導体装置１００Ａと異なる。結果保存レジスタ９０は、比較器５３から出力される停止許可信号６１の値を格納する。結果保存レジスタ９０に格納されたデータは、ＣＰＵ３０からも開発ツール１０５からも読み出し可能である（符号９１を参照）。
【０１２５】
また、図１０の半導体装置１００Ｄにおいて、異常判定回路５０は、監視対象情報（具体的には、停止要求４４）を異常と判定した場合に、割り込み通知５８をＣＰＵ３０に出力しない。図１０のその他の点は図３の場合とほぼ同様であるので、同一または相当する部分には同一または類似の参照符号を付して説明を繰り返さない。
【０１２６】
［半導体装置の動作および第５の実施形態の効果］
第２の実施形態の半導体装置１００Ａの場合と同様に、異常判定回路５０は、ＣＰＵの停止要求４４の出力時間が閾値時間よりも長くなると、停止許可信号６１をインアクティブに切り替える。この結果、ゲート回路６０からＣＰＵ３０に出力される停止要求４５もインアクティブになるので、ＣＰＵ３０は再び命令を実行できる。この際に、結果保存レジスタ９０は、停止許可信号６１がインアクティブ状態になったことを格納する。結果保存レジスタ９０の保存データはＣＰＵ３０および開発ツール１０５の各々から読み出し可能である。
【０１２７】
異常判定回路５０によって監視対象情報が異常と判定された場合には、ＣＰＵ３０は特別な処理を実行する必要がある。第２および第３の実施形態の場合には、ＣＰＵ３０は、異常判定回路５０からの割り込み通知５８よって、監視対象情報が異常と判定されたことを知ることができた。これに対して、図１０に示す半導体装置１００Ｄの場合には、ＣＰＵ３０は、結果保存レジスタ９０にアクセスすることによって、監視対象情報が異常と判定されたことを検知できる。たとえば、ＣＰＵ３０は、自らの処理時間の空き時間を利用して結果保存レジスタ９０の保存内容を確認することができる。
【０１２８】
また、結果保存レジスタ９０の内容は、外部の開発ツール１０５からも確認することができる。したがって、ＣＰＵ３０で実行するプログラムの変更をせずに、監視対象情報が異常と判定されたことを検知できる。
【０１２９】
なお、第５の実施形態の半導体装置１００Ｄにおいて、異常判定回路５０は、監視対象情報を異常と判定した場合に割り込み通知５８をＣＰＵ３０に出力するように構成されていてもよい。すなわち、結果保存レジスタ９０への異常判定結果の格納と、ＣＰＵ３０への割り込み通知５８とを併用してもよい。
【０１３０】
＜第６の実施形態＞
第６の実施形態の半導体装置１００Ｅにおいて、異常判定回路５０は、監視対象情報を異常と判定した場合に、トレースメッセージの生成要求９２をトレースデータ生成回路６５に出力する。これによって、監視対象情報が異常と判定されたことを外部の開発ツール１０５に通知することができる。また、第５の実施形態の半導体装置１００Ｄにおいて、異常判定回路５０は、監視対象情報を異常と判定した場合に、割り込み通知５８をＣＰＵ３０に出力しなくてもよい。以下、図面を参照して詳しく説明する。
【０１３１】
なお、以下では、異常判定回路５０の具体的構成として、図３で説明した第２の実施形態における異常判定回路５０が示される。これに代えて、図６で説明した第３の実施形態における異常判定回路５０の場合にも、第６の実施形態の構成を適用可能である。また、図１０で説明した半導体装置１００Ｄの構成と組み合わせてもよい。
【０１３２】
［半導体装置の構成および動作］
図１１は、第６の実施形態における半導体装置の構成例を模式的に示すブロック図である。図１１に示す半導体装置１００Ｅの構成要素は、図３に示す半導体装置１００Ａの構成要素とほぼ同じであるが、異常判定回路５０およびトレースデータ生成回路６５の動作が異なる。
【０１３３】
具体的に、半導体装置１００Ｅの異常判定回路５０は、ＣＰＵの停止要求４４が出力されている期間が閾値時間を超えた場合に次の動作を実行する。第１に、異常判定回路５０は、図３示す場合と同様に、停止許可信号６１をインアクティブに切り替える。
【０１３４】
第２に、異常判定回路５０は、判定結果の異常に関する情報を出力するためにトレースメッセージの生成要求９２をトレースデータ生成回路６５に出力する。この生成要求９２を受けて、トレースデータ生成回路６５は、異常判定回路５０による判定結果の異常に関する情報を、トレースデータ保存回路４０に出力する。以下、この場合のトレースデータ６６を異常判定メッセージという。異常判定メッセージのフォーマットは特に限定されない。しかし、監視対象情報の異常が発生したことが外部の開発ツール１０５から検知できるように、ＣＰＵの実行情報３４から生成されるトレースメッセージと異常判定メッセージとを区別する必要がある。
【０１３５】
異常判定回路５０は、さらに、トレースメッセージの生成要求９２を出力する際に、保存バッファ４１のクリア要求９３を、トレースデータ保存回路４０に対して出力するのが望ましい。この理由は、保存バッファ４１の保存量が最大容量に近い場合には、異常判定回路５０の判定結果に関する情報が保存バッファ４１に格納できない場合があるからである。また、ＦＩＦＯ方式の場合には、異常判定回路５０の判定結果に関する情報を保存バッファ４１に格納できたとしても、その情報が外部の開発ツール１０５に出力されるまでに時間がかかるからである。
【０１３６】
なお、図１１の半導体装置１００Ｅにおいて、異常判定回路５０は、監視対象情報（具体的には、停止要求４４）を異常と判定した場合に、割り込み通知５８をＣＰＵ３０に出力しない。図１１のその他の点は図３の場合とほぼ同様であるので、同一または相当する部分には同一または類似の参照符号を付して説明を繰り返さない。
【０１３７】
［第６の実施形態の効果］
第２の実施形態の半導体装置１００Ａの場合と同様に、異常判定回路５０は、ＣＰＵの停止要求４４の出力時間が閾値時間よりも長くなると、停止許可信号６１をインアクティブに切り替える。この結果、ゲート回路６０からＣＰＵ３０に出力される停止要求４５もインアクティブになるので、ＣＰＵ３０は再び命令を実行できる。この際に、異常判定回路５０は、判定結果の異常に関する情報を出力するためにトレースメッセージの生成要求９２をトレースデータ生成回路６５に出力する。
【０１３８】
第２および第３の実施形態の場合には、異常判定回路５０よって監視対象情報が異常と判定されたことを、ＣＰＵ３０は、異常判定回路５０からの割り込み通知５８によって知ることができた。一方、第６の実施形態の場合には、異常判定回路５０よって監視対象情報が異常と判定されたことを、外部の開発ツール１０５は、異常判定メッセージによって知ることができる。したがって、たとえば、開発ツール１０５は、外部からリセット信号を半導体装置１００Ｅに入力することによって、半導体装置１００Ｅを初期化することができる。
【０１３９】
なお、第６の実施形態の半導体装置１００Ｅにおいて、異常判定回路５０は、監視対象情報を異常と判定した場合に割り込み通知５８をＣＰＵ３０に出力するように構成されていてもよい。すなわち、開発ツール１０５への異常判定メッセージの出力と、ＣＰＵ３０への割り込み通知５８とを併用してもよい。
【０１４０】
＜第７の実施形態＞
第７の実施形態では、第２の実施形態の半導体装置１００Ａにおいて、異常判定回路５０に設けられたカウンタ５１によるカウント方法が変更される。具体的に、第２の実施形態の場合には、保存バッファ４１における保存量が閾値量Ｓｔｈ２以下となったときに、異常判定回路５０におけるカウンタ５１のカウント値は０に戻った。第７の実施形態では、この場合に、現時点のカウント値からデクリメントするように構成される。以下、図面を参照して詳しく説明する。
【０１４１】
カウンタ５１以外の部分については、本実施形態の半導体装置の構成は、図３に示す第２の実施形態の半導体装置１００Ａの構成と同じである。なお、本実施形態で示すカウント方法は、第２の実施形態だけでなく、図８に示す第４の実施形態、図１０に示す第５の実施形態、および図１１に示す第６の実施形態のいずれにも適用できる。
【０１４２】
［異常判定回路に設けられたカウンタの動作］
図１２は、第７の実施形態の半導体装置において、異常判定回路に設けられたカウンタの動作を説明するためのタイミング図である。図１２において、停止要求４４、カウンタ５１のカウント値、停止許可信号６１、および停止要求４５の各時間変化と、ＣＰＵ３０の動作状態とが示されている。
【０１４３】
以下の説明では、アクティブ状態はハイレベルに対応し、インアクティブ状態はローレベルに対応する。ただし、この対応関係は逆であっても構わない。図１２において、信号のハイレベルおよびローレベルはそれぞれ“Ｈ”および“Ｌ”で表示される。以下、図３および図１２を参照して、カウンタ５１によるカウント方法について説明する。
【０１４４】
図１２の時刻ｔ２０よりも前は、ＣＰＵ３０は動作状態である。保存バッファ４１の保存量４３は閾値量Ｓｔｈ１を超えていないので、保存量監視回路４２から出力された停止要求４４はインアクティブ（Ｌレベル）である。異常判定回路５０から出力された停止許可信号６１は、アクティブ状態（Ｈレベル）に初期化されている。したがって、ゲート回路６０からＣＰＵ３０に出力された停止要求４５はインアクティブ状態（Ｌレベル）である。
【０１４５】
時刻ｔ２０において、保存バッファ４１の保存量４３が閾値量Ｓｔｈ１を超える。このため、保存量監視回路４２が出力するＣＰＵの停止要求４４は、インアクティブ（Ｌレベル）からアクティブ（Ｈレベル）に切り替わる。この結果、異常判定回路５０のカウンタ５１はカウントアップを開始する。すなわち、カウンタ５１のカウント値は０から１つずつインクリメントする。
【０１４６】
さらに、この停止要求４４の切り替わりに応答して、ゲート回路６０からＣＰＵ３０に出力される停止要求４５も、インアクティブ（Ｌレベル）からアクティブ（Ｈレベル）に切り替わる。この結果、ＣＰＵ３０の命令実行回路３１は、命令の実行を停止する。したがって、保存バッファ４１に新たにトレースデータ６６は保存されず、保存バッファ４１に既に保存されているトレースデータ４６の出力のみが継続される。
【０１４７】
時刻ｔ２１において、保存バッファ４１の保存量４３が閾値量Ｓｔｈ２以下となる。これにより、保存量監視回路４２が出力するＣＰＵの停止要求４４は、アクティブ（Ｈレベル）からインアクティブ（Ｌレベル）に切り替わる。この結果、ゲート回路６０からＣＰＵ３０に出力される停止要求４５も、アクティブ（Ｈレベル）からインアクティブ（Ｌレベル）に切り替わるので、ＣＰＵ３０は命令の実行を再開する。これによって、保存バッファ４１には、新たなトレースデータ６６が保存される。
【０１４８】
さらに、ＣＰＵの停止要求４４の取り下げによって、異常判定回路５０のカウンタ５１はカウントダウンを開始する。すなわち、カウンタ５１のカウント値は、現時点の値である４７から１ずつデクリメントされる。なお、閾値量Ｓｔｈ２の設定値は、０以上かつ閾値量Ｓｔｈ１以下の値から選択される。通常、閾値量Ｓｔｈ２は閾値量Ｓｔｈ１よりも小さな値に設定される。カウンタ５１のカウントダウンは、保存量４３が再び閾値量Ｓｔｈ１を超えない限り、カウント値が０に戻るまで継続される。
【０１４９】
次の時刻ｔ２２において、保存バッファ４１の保存量４３が再び閾値量Ｓｔｈ１を超えたため、保存量監視回路４２は、ＣＰＵの停止要求４４を再びアクティブ（Ｈレベル）にする。これにより、ゲート回路６０からＣＰＵ３０に出力される停止要求４５も、アクティブ（Ｈレベル）に切り替わるので、ＣＰＵは動作を停止する。停止要求４４のアクティブ状態への切り替わりによって、カウンタ５１はカウントアップを開始する。この場合、カウンタ５１のカウンタ値は現時点の値である４６から１つずつインクリメントされる。
【０１５０】
その次の時刻ｔ２３において、保存バッファ４１の保存量４３が閾値量Ｓｔｈ２以下となったため、保存量監視回路４２は、ＣＰＵの停止要求４４をインアクティブ（Ｌレベル）に切り替える。この結果、ゲート回路６０からＣＰＵ３０に出力される停止要求４５も、インアクティブ（Ｌレベル）に切り替わるので、ＣＰＵ３０は命令の実行を再開する。さらに、異常判定回路５０のカウンタ５１がカウントダウンを開始する。すなわち、カウンタ５１のカウント値は、現時点の値である５０から１ずつデクリメントされる。
【０１５１】
その次の時刻ｔ２４において、保存バッファ４１の保存量４３が再び閾値量Ｓｔｈ１を超えたため、保存量監視回路４２は、ＣＰＵの停止要求４４を再びアクティブ（Ｈレベル）にする。これにより、ゲート回路６０からＣＰＵ３０に出力される停止要求４５も、アクティブ（Ｈレベル）に切り替わるので、ＣＰＵは動作を停止する。停止要求４４のアクティブ状態への切り替わりによって、カウンタ５１はカウントアップを開始する。この場合、カウンタ５１のカウンタ値は現時点の値である４９から１つずつインクリメントされる。
【０１５２】
その次の時刻ｔ２５において、カウンタのカウント値が閾値Ｃｔｈである５０を超えて５１になる。これによって、異常判定回路５０は、停止許可信号６１をインアクティブ（Ｌレベル）に切り替える。停止許可信号６１がインアクティブになると、ゲート回路６０からＣＰＵ３０に出力される停止要求４５もインアクティブ（Ｌレベル）に切り替わる。ＣＰＵ３０の命令実行回路３１は、このインアクティブ状態の停止要求４５を受けて、命令の実行を再開する。一旦、異常判定回路５０から出力された停止許可信号６１がインアクティブ状態（Ｌレベル）に変化すると、特別な動作が行われない限り、停止許可信号６１のインアクティブ状態は維持される。ここで、特別な動作とは、半導体装置１００Ａの全体をリセットさせる動作、および外部の開発ツール１０５によって異常判定回路５０をリセットする動作などである。
【０１５３】
［半導体装置の動作］
図１３は、第７の実施形態による半導体装置の動作の一例を示すフローチャートである。図１３のフローチャートは、図４のフローチャートに対応するものである。具体的に、図１３のフローチャートは、ステップＳ２５０に代えてステップＳ２５１が実行される点で、図４のフローチャートと異なる。
【０１５４】
図４のフローチャートでは、保存バッファ４１における保存量４３が閾値量Ｓｔｈ２以下となった場合には（ステップＳ２３０でＹＥＳ）、カウンタ５１は、カウント値を０にクリアする（ステップＳ２５０）。一方、図１３のフローチャートでは、同様の場合に、カウンタ５１は、カウント値のカウントダウンを開始する。すなわち、カウンタ５１のカウント値は、現在の値から１つずつデクリメントされる（ステップＳ２５１）。
【０１５５】
したがって、その後、保存バッファ４１における保存量４３が閾値量Ｓｔｈ１を再び超えた場合（ステップＳ１５０でＹＥＳ）の動作も、図４と図１３とでカウンタ５１の動作が若干異なる。この場合、図４のフローチャートでは、カウンタ５１のカウント値は０からインクリメントされる（ステップＳ１７０）。一方、図１３のフローチャートでは、カウンタ５１のカウント値は、現在の値から１つずつインクリメントされる（ステップＳ１７０）。
【０１５６】
図１３のその他のステップは図４の場合とほぼ同様であるので、同一または相当する部分には同一の参照符号を付して説明を繰り返さない。
【０１５７】
［第７の実施形態の効果］
第２の実施形態の場合には、ＣＰＵの停止要求４４は、長期間継続するが、頻繁には生じない場合を想定している。たとえば、トレースデータ保存回路４０から開発ツール１０５に至るトレースデータ４６の出力経路が完全に断線した場合などが該当する。
【０１５８】
一方、第７の実施形態の場合には、ＣＰＵの停止要求４４は比較的短期間で取り下げられるが、頻繁に生じる場合を想定している。たとえば、ケーブルのコネクタの接触不良などによって、トレースデータ保存回路４０から開発ツール１０５へのトレースデータ４６の転送が頻繁に途切れる場合が該当する。もしくは、実行情報出力回路３２から保存バッファ４１に至るまでの故障によって、意図せずに大量のデータが頻繁に保存バッファ４１に入力される場合が該当する。通常、保存バッファ４１から開発ツール１０５への出力帯域に比べて、保存バッファ４１の入力帯域のほうが大きいので、保存バッファ４１の保存量は頻繁に閾値量Ｓｔｈ１を超える。しかし、保存バッファ４１から開発ツール１０５への出力経路に故障はないので、すぐに保存バッファ４１の保存量は閾値量Ｓｔｈ２以下となり、ＣＰＵの停止要求４４は取り下げられる。
【０１５９】
前述のように、第７の実施形態の半導体装置では、ＣＰＵの停止要求４４が取り下げられたときに、カウンタ５１のカウント値はクリアされるのでなく、デクリメントされる。したがって、ＣＰＵの停止要求４４が出力される頻度および１回の停止要求４４の継続時間の両方に基づいて、トレース機能に関係する部分の異常の有無を検出することができる。よって、第７の実施形態の半導体装置は、上記の想定故障のいずれの場合にも対応できる。
【０１６０】
［第７の実施形態の変形例］
上記では、保存バッファ４１におけるトレースデータの保存量４３が閾値量Ｓｔｈ２以下となった場合に（ステップＳ２３０ＹＥＳ）、カウンタ５１は、現在のカウンタ値をそのまま保持してもよい。この場合、その後、保存バッファ４１における保存量４３が閾値量Ｓｔｈ１を再び超えた場合（ステップＳ１５０でＹＥＳ）、カウンタ５１はその保持した値からカウントアップを開始する。
【０１６１】
＜第８の実施形態＞
第８の実施形態では、第２の実施形態の半導体装置１００Ａにおいて、異常判定回路５０に設けられたカウンタの構成が異なる。具体的に第８の実施形態では、第１カウンタ５１Ａと第２カウンタ５４との２種類のカウンタが設けられる。第１カウンタ５１Ａは、ＣＰＵの停止要求４４がアクティブ状態である累積時間を検出するためのカウンタであり、図３に示す第２の実施形態におけるカウンタ５１とほぼ同様の機能を有する。第２カウンタ５４は、ＣＰＵの停止要求４４がアクティブ状態からインアクティブ状態に戻ってからの時間を検出するためのカウンタである。以下、図面を参照して詳しく説明する。
【０１６２】
なお、本実施形態で示すカウンタの構成は、第２の実施形態だけでなく、図８に示す第４の実施形態、図１０に示す第５の実施形態、および図１１に示す第６の実施形態のいずれにも適用できる。
【０１６３】
［半導体装置の構成］
図１４は、第８の実施形態における半導体装置の構成例を模式的に示すブロック図である。図１４の半導体装置１００Ｆは、図３の半導体装置１００Ａを変形したものである。以下では、図３の半導体装置１００Ａと異なる構成について説明し、同一または相当する構成については、同一または類似の参照符号を付すことによりその説明を繰り返さない。
【０１６４】
図１４の半導体装置１００Ｆにおいて、異常判定回路５０は、第１カウンタ５１Ａと、第１閾値保存レジスタ５２Ａと、第２カウンタ５４と、第２閾値保存レジスタ５５とを含む。異常判定回路５０は、さらに、第１比較器５３Ａと、第２比較器５６とを含む。以下では、第１カウンタ５１Ａのカウント値を第１カウント値とも称し、第２カウンタのカウント値を第２カウント値とも称する。
【０１６５】
第１カウンタ５１Ａは、保存量監視回路４２から出力されるＣＰＵの停止要求４４がアクティブに切り替わるとカウントを開始する。第１カウンタ５１Ａは、停止要求４４がインアクティブに切り替わるとカウントを停止するが、直ちにはクリアされずカウント値を保持する。第１カウンタ５１Ａは、第２比較器５６からクリア信号５７を受信したときにクリアされる。
【０１６６】
第１閾値保存レジスタ５２Ａは、第１カウンタ５１Ａのカウント値と比較するための閾値Ｃｔｈ１を保持する。ＣＰＵ３０は、第１閾値保存レジスタ５２Ａに保存される閾値設定値７０を変更できる。外部の開発ツール１０５も、第１閾値保存レジスタ５２Ａに保存される閾値設定値７１を変更できる。
【０１６７】
第１比較器５３Ａは、第１カウンタ５１Ａのカウント値と第１閾値保存レジスタ５２Ａに保存されている閾値Ｃｔｈ１とを比較する。第１比較器５３Ａは、第１カウント値が閾値Ｃｔｈ１よりも大きい場合に、ゲート回路６０に出力する停止許可信号６１をアクティブからインアクティブに切り替える。この結果、ゲート回路６０からＣＰＵ３０に出力される停止要求４５はインアクティブに切り替わる。
【０１６８】
第２カウンタ５４は、保存量監視回路４２から出力されるＣＰＵの停止要求４４がアクティブからインアクティブに切り替わるとカウントを開始する。第２カウンタ５４は、第２比較器５６からクリア信号５７を受信したときにクリアされる。また、第２カウンタ５４は、カウントアップ中にＣＰＵの停止要求４４が再度アクティブに切り替わったときにクリアされる。
【０１６９】
第２閾値保存レジスタ５５は、第２カウンタ５４のカウント値と比較するための閾値Ｃｔｈ２を保持する。ＣＰＵ３０は、第２閾値保存レジスタ５５に保存される閾値設定値７０を変更できる。外部の開発ツール１０５も、第２閾値保存レジスタ５５に保存される閾値設定値７１を変更できる。
【０１７０】
第２比較器５６は、第２カウンタ５４のカウント値と第２閾値保存レジスタ５５に保存されている閾値Ｃｔｈ２とを比較する。第２比較器５６は、第２カウント値が閾値Ｃｔｈ２よりも大きい場合に、第１カウンタ５１Ａおよび第２カウンタ５４にクリア信号５７を出力する。
【０１７１】
［半導体装置の動作］
図１５は、図１４に示す半導体装置の動作を示すフローチャートである。以下、図１４および図１５を参照して、半導体装置１００Ｆの動作について説明する。なお、初期状態では、第１カウンタ５１Ａのカウント値および第２カウンタ５４のカウント値はいずれも０に初期化されている。以下の説明において、第１カウンタ５１Ａのカウント値を第１カウント値とも称し、第２カウンタ５４のカウント値を第２カウント値とも称する。
【０１７２】
ステップＳ１００において、ＣＰＵ３０の命令実行回路３１は、プログラムカウンタのＰＣ値に従って、プログラム格納メモリ３５から命令を取得し、取得した命令を実行する。
【０１７３】
次のステップＳ１１０において、ＣＰＵ３０の実行情報出力回路３２は、命令実行回路３１による命令の実行結果３３に基づいて実行情報３４を出力する。
【０１７４】
その次のステップＳ１２０において、トレースデータ生成回路６５は、実行情報３４からデバッグに必要なデータを取り出し、取り出したデータを規定のフォーマットに変換する。トレースデータ生成回路６５は、変換後のデータをトレースデータ６６としてトレースデータ保存回路４０に出力する。
【０１７５】
その次のステップＳ１３０において、トレースデータ保存回路４０は、受け取ったトレースデータ６６を保存バッファ４１に一時的に保存する。
【０１７６】
その次のステップＳ１４０において、トレースデータ保存回路４０は、保存バッファ４１に保存されているトレースデータ４６をＦＩＦＯ方式で外部の開発ツール１０５に出力する。
【０１７７】
ここで、第２カウント値が閾値Ｃｔｈ２よりも大きい場合（ステップＳ１４１でＹＥＳ）に、第１カウンタ５１Ａおよび第２カウンタ５４の両方をクリアする（ステップＳ１４２）。すなわち、第２比較器５６は、第１カウンタ５１Ａおよび第２カウンタ５４にクリア信号５７を出力する。
【０１７８】
なお、初期状態では、第１カウンタ５１Ａおよび第２カウンタ５４はいずれも０に初期化されているので、上記のステップＳ１４２は実行されない。また、ステップＳ１４１の比較ステップは、ステップＳ１００〜Ｓ１４０と並行して常時実行されている。
【０１７９】
その次のステップＳ１５０において、保存量監視回路４２は、保存バッファ４１におけるトレースデータの保存量４３が閾値量Ｓｔｈ１を超えているか否かを判定する。保存バッファ４１における保存量４３が閾値量Ｓｔｈ１を超えていない場合には（ステップＳ１５０でＮＯ）、処理は最初のステップＳ１００に戻る。そして、命令実行回路３１は次の命令をプログラム格納メモリ３５から読み出す。
【０１８０】
一方、保存バッファ４１における保存量４３が閾値量Ｓｔｈ１を超えている場合には（ステップＳ１５０でＹＥＳ）、保存量監視回路４２は、次のステップＳ１６０において停止要求４４をアクティブにする。すなわち、保存量監視回路４２は、ＣＰＵ３０における命令実行を停止させることを要求する。初期状態において停止許可信号６１はアクティブであるので、ゲート回路６０は、ＣＰＵ３０に対して停止要求４５を出力する。この結果、ＣＰＵ３０における命令実行が停止される。
【０１８１】
その次のステップＳ１７２において、停止要求４４がアクティブに切り替わったことに基づいて、第１カウンタ５１Ａはカウントアップを開始し、第２カウンタ５４はカウント値をクリアする。ここで、第１カウンタ５１Ａは、カウント値を現在の値からインクリメントする。したがって、初期状態の場合には第１カウンタ５１Ａはカウント値を０からインクリメントするが、初期状態でない場合には０からインクリメントするとは限らない。
【０１８２】
その次のステップＳ１８２において、第１比較器５３Ａは、第１カウンタ５１Ａのカウント値と第１閾値保存レジスタ５２Ａに保存された閾値Ｃｔｈ１とを比較する。
【０１８３】
上記ステップＳ１８２の比較の結果、第１カウンタ５１Ａのカウント値が閾値Ｃｔｈ１を超えていない場合には（ステップＳ１８２でＮＯ）、ＣＰＵの停止要求４４のアクティブ状態が継続される。したがって、ＣＰＵ３０から実行情報３４は出力されず、保存バッファ４１に新たにトレースデータ６６は保存されない。保存バッファ４１に保存されているトレースデータ４６の出力のみが継続される（ステップＳ２２０）。この結果、保存バッファ４１における保存量４３が閾値量Ｓｔｈ２以下となった場合には（ステップＳ２３０でＹＥＳ）、ステップＳ２４０に処理が進む。なお、閾値量Ｓｔｈ２の設定値は、０以上かつ閾値量Ｓｔｈ１以下の値から選択される。通常、閾値量Ｓｔｈ２は閾値量Ｓｔｈ１よりも小さな値に設定される。
【０１８４】
ステップＳ２４０において、保存量監視回路４２は、停止要求４４をインアクティブにすることによって、ＣＰＵ３０における命令実行の停止を解除する。さらに、次のステップＳ２５２において、第１カウンタ５１Ａはカウントアップを停止し、第２カウンタ５４は０からカウントアップを開始する。したがって、第１カウンタ５１Ａのカウント値は、現時点の値が保持される。
【０１８５】
その後、処理は最初のステップＳ１００に戻り、命令実行回路３１は次の命令をプログラム格納メモリ３５から読み出す。ここで、第２カウンタ５４のカウントアップは、第２カウント値が閾値Ｃｔｈ２を超えるまで又は保存バッファ４１における保存量４３が閾値量Ｓｔｈ１を超えるまで継続される。すなわち、図のステップＳ１４１でＹＥＳとなるまで又はステップＳ１５０でＹＥＳとなるまで継続される。これらのいずれかの条件が満たされた場合に、第２カウンタ５４はクリアされる（ステップＳ１４２またはステップＳ１７２）。
【０１８６】
一方、ステップＳ１８２の比較の結果、第１カウンタ５１Ａが閾値Ｃｔｈ１を超えた場合には（ステップＳ１８２でＹＥＳ）、次のステップＳ１９０に処理が進む。ステップＳ１９０において、第１比較器５３Ａは、停止許可信号６１をインアクティブに切り替える。すなわち、保存量監視回路４２から出力された停止要求４４は不許可にされる。この結果、ゲート回路６０からＣＰＵ３０に出力される停止要求４５は、インアクティブに切り替わるので、ＣＰＵ３０は命令の実行を再開する。
【０１８７】
さらに、次のステップＳ２００において、第１比較器５３Ａは、ＣＰＵ３０の命令実行回路３１に出力する。この割り込み通知５８に応答して、次のステップＳ２１０においてＣＰＵ３０の命令実行回路３１は、故障発生時に行うべき割り込み処理を実行する。
【０１８８】
図１６は、図１４に示す半導体装置の動作を示すタイミング図である。図１６において、ＣＰＵの停止要求４４、第１カウント値、第２カウント値、停止許可信号６１、および停止要求４５の各時間変化と、ＣＰＵ３０の動作状態とが示されている。
【０１８９】
以下の説明では、アクティブ状態はハイレベルに対応し、インアクティブ状態はローレベルに対応する。ただし、この対応関係は逆であっても構わない。図１６において、信号のハイレベルおよびローレベルはそれぞれ“Ｈ”および“Ｌ”で表示される。以下、図１４および図１６を参照して、カウンタ５１によるカウント方法について説明する。
【０１９０】
図１６の時刻ｔ３０よりも前は、ＣＰＵ３０は動作状態である。保存バッファ４１の保存量４３は閾値量Ｓｔｈ１を超えていないので、保存量監視回路４２から出力された停止要求４４はインアクティブ（Ｌレベル）である。異常判定回路５０から出力された停止許可信号６１は、アクティブ状態（Ｈレベル）に初期化されている。したがって、ゲート回路６０からＣＰＵ３０に出力された停止要求４５はインアクティブ状態（Ｌレベル）である。また、第１カウンタ５１Ａおよび第２カウンタ５４の各カウント値は０にクリアされている。
【０１９１】
時刻ｔ３０において、保存バッファ４１の保存量４３が閾値量Ｓｔｈ１を超える。このため、保存量監視回路４２が出力するＣＰＵの停止要求４４は、インアクティブ（Ｌレベル）からアクティブ（Ｈレベル）に切り替わる。この結果、異常判定回路５０の第１カウンタ５１Ａはカウントアップを開始する。すなわち、第１カウンタ５１Ａのカウント値は０から１つずつインクリメントする。
【０１９２】
さらに、この停止要求４４の切り替わりに応答して、ゲート回路６０からＣＰＵ３０に出力される停止要求４５も、インアクティブ（Ｌレベル）からアクティブ（Ｈレベル）に切り替わる。この結果、ＣＰＵ３０の命令実行回路３１は、命令の実行を停止する。したがって、保存バッファ４１に新たにトレースデータ６６は保存されず、保存バッファ４１に既に保存されているトレースデータ４６の出力のみが継続される。
【０１９３】
次の時刻ｔ３１において、保存バッファ４１の保存量４３が閾値量Ｓｔｈ２以下となる。これにより、保存量監視回路４２が出力するＣＰＵの停止要求４４は、アクティブ（Ｈレベル）からインアクティブ（Ｌレベル）に切り替わる。この結果、ゲート回路６０からＣＰＵ３０に出力される停止要求４５も、アクティブ（Ｈレベル）からインアクティブ（Ｌレベル）に切り替わるので、ＣＰＵ３０は命令の実行を再開する。これによって、保存バッファ４１には、新たなトレースデータ６６が保存される。
【０１９４】
さらに、ＣＰＵの停止要求４４の取り下げによって、異常判定回路５０の第１カウンタ５１Ａは、カウントアップを停止し、第２カウンタ５４はカウントアップを開始する。第１カウンタ５１Ａのカウント値は、現時点の値である４７が保持される。なお、閾値量Ｓｔｈ２の設定値は、０以上かつ閾値量Ｓｔｈ１以下の値から選択される。通常、閾値量Ｓｔｈ２は閾値量Ｓｔｈ１よりも小さな値に設定される。
【０１９５】
その次の時刻ｔ３２において、第２カウンタ５４のカウント値が閾値Ｃｔｈ２である３を超える。このため、第１カウンタ５１Ａおよび第２カウンタ５４のカウント値のいずれも０にリセットされる。
【０１９６】
その次の時刻ｔ３３において、保存バッファ４１の保存量４３が再び閾値量Ｓｔｈ１を超えたため、保存量監視回路４２は、ＣＰＵの停止要求４４を再びアクティブ（Ｈレベル）にする。これにより、ゲート回路６０からＣＰＵ３０に出力される停止要求４５も、アクティブ（Ｈレベル）に切り替わるので、ＣＰＵは動作を停止する。停止要求４４のアクティブ状態への切り替わりによって、カウンタ５１はカウントアップを開始する。この場合、カウンタ５１のカウンタ値は現時点の値である０から１つずつインクリメントされる。
【０１９７】
その次の時刻ｔ３４において、カウンタのカウント値が閾値Ｃｔｈである５０を超えて５１になる。これによって、異常判定回路５０は、停止許可信号６１をインアクティブ（Ｌレベル）に切り替える。停止許可信号６１がインアクティブになると、ゲート回路６０からＣＰＵ３０に出力される停止要求４５もインアクティブ（Ｌレベル）に切り替わる。ＣＰＵ３０の命令実行回路３１は、このインアクティブ状態の停止要求４５を受けて、命令の実行を再開する。一旦、異常判定回路５０から出力された停止許可信号６１がインアクティブ状態（Ｌレベル）に変化すると、特別な動作が行われない限り、停止許可信号６１のインアクティブ状態は維持される。ここで、特別な動作とは、半導体装置１００Ｆの全体をリセットさせる動作、および外部の開発ツール１０５によって異常判定回路５０をリセットする動作などである。
【０１９８】
［第８の実施形態の効果］
第８の実施形態の半導体装置１００Ｆによれば、ＣＰＵの停止要求４４がインアクティブとなる期間の累積時間に基づいて、停止許可信号６１をインアクティブにするか否かを判断することができる。ただし、ＣＰＵの停止要求４４がインアクティブとなる期間がある程度継続した場合には、累積時間の計算結果は０にクリアされる。
【０１９９】
ＣＰＵの停止要求４４がアクティブとなったりインアクティブとなったりすることが頻繁に生じる場合、その原因が故障によるものなのかどうか判断がし難い。しかし、ある程度の長い時間、停止要求４４のインアクティブ状態が継続する場合には、保存バッファ４１から開発ツール１０５に正常にトレースデータ４６が出力されていると考えられる。このため、第２カウンタ５４によってＣＰＵの停止要求４４がインアクティブとなる期間を計測する。そして、計測された期間が、閾値Ｃｔｈ２に対応する閾値時間を超えた場合に、第２カウンタ５４はクリアされる。
【０２００】
＜第９の実施形態＞
第９の実施形態では、第２の実施形態の半導体装置１００Ａにおいて、停止要求４４がアクティブとなる期間の最大値を保存するための最大値保存回路９５が設けられる。これによって、閾値保存レジスタ５２に保存される閾値Ｃｔｈの目安にできる。以下、図面を参照して詳しく説明する。
【０２０１】
なお、第９の実施形態の閾値保存レジスタ５２は、第２の実施形態だけでなく、図３、図８、図１０、図１１、図１４に示す第４〜第８の実施形態のいずれとも組み合わせることができる。
【０２０２】
［半導体装置の構成および動作］
図１７は、第９の実施形態における半導体装置の構成を模式的に示すブロック図である。図１７の半導体装置１００Ｇは、図３の半導体装置１００Ａを変形したものである。以下では、図３の半導体装置１００Ａと異なる構成について説明し、同一または相当する構成については、同一または類似の参照符号を付すことによりその説明を繰り返さない。
【０２０３】
図１７を参照して、半導体装置１００Ｇは、カウンタ５１から出力されるカウント値の最大値を保存する最大値保存回路９５をさらに含む。最大値保存回路９５は、比較器９６と最大値保存レジスタ９７とを含む。
【０２０４】
比較器９６は、カウンタ５１から出力されるカウント値と、最大値保存レジスタ９７に保存されたこれまでのカウント値の最大値とを比較する。比較器９６は、新たに出力されたカウント値が最大値保存レジスタ９７に保存されているカウント値よりも大きい場合に、新たに出力されたカウント値９８を最大値保存レジスタ９７に保存する。最大値保存レジスタ９７に保存されたカウント値は、ＣＰＵ３０および開発ツール１０５から読み出すことができる。
【０２０５】
［第９の実施形態の効果］
第９の実施形態の目的は、閾値保存レジスタ５２に保存する閾値Ｃｔｈを、開発ツール１０５またはＣＰＵ３０から設定する際の根拠となる情報を取得することである。このために、正常動作時におけるＣＰＵの停止要求４４の出力時間（実際にはカウンタ５１のカウント値）の最大値が保存される。この出力時間の最大値を開発ツール１０５またはＣＰＵ３０から読み出すことにより、ユーザがその情報を得ることができる。この場合の正常動作時とは、開発ツール１０５からトレースデータ４６を抜けなく取得できている状態をいい、取得したトレースデータ４６に基づいてプログラムの実行を復元できる。ユーザは、取得した停止要求４４の出力時間の最大値の情報に基づいて、閾値保存レジスタ５２に保存される閾値Ｃｔｈを適切に設定できる。
【０２０６】
＜付記＞
以下、上記の各実施形態の特徴の一部を示す。
【０２０７】
（付記１）
実行情報を出力する中央処理装置と、
前記中央処理装置の動作状態に基づいてシステムリセットを要求するウォッチドッグタイマと、
前記実行情報に基づいたトレースデータを、外部に出力する前に一時的に保存バッファ保存するトレースデータ保存回路とを備え、前記トレースデータ保存回路は、前記保存バッファの保存量が閾値量を超えた場合に、前記中央処理装置に命令実行を停止させる停止要求を出力し、
前記実行情報、前記保存バッファに入力される前記トレースデータ、前記保存バッファから外部に出力される前記トレースデータ、および前記停止要求の少なくとも１つを監視対象情報として監視し、前記監視対象情報が異常か否かを判定する異常判定回路と、
前記監視対象情報が異常であると判定された場合に、前記システムリセットの要求に基づいて、前記トレースデータ保存回路および前記異常判定回路をリセットし、前記監視対象情報が異常でないと判定された場合に、前記システムリセットの要求にかかわらず前記トレースデータ保存回路および前記異常判定回路をリセットしないリセットコントローラとをさらに備える、半導体装置。
【０２０８】
（付記２）
前記監視対象情報は、前記停止要求であり、
前記異常判定回路は、前記停止要求が出力される時間に基づいて、前記停止要求が異常であるか否かを判定する、付記１に記載の半導体装置。
【０２０９】
（付記３）
前記監視対象情報は、前記実行情報、前記保存バッファに入力される前記トレースデータ、および前記保存バッファから外部に出力される前記トレースデータのうちの少なくとも１つであり、
前記異常判定回路は、前記監視対象情報に含まれる少なくとも一部のデータの変化に基づいて、前記監視対象情報が異常であるか否かを判定する、付記１に記載の半導体装置。
【０２１０】
（付記４）
前記異常判定回路は、前記異常判定回路の判定結果を保存するための結果保存レジスタを含み、
前記結果保存レジスタに保存された値は、前記半導体装置の外部から読み出し可能である、付記１に記載の半導体装置。
【０２１１】
（付記５）
前記半導体装置は、
前記実行情報に基づいて前記トレースデータを生成するトレースデータ生成回路をさらに備え、
前記異常判定回路は、前記監視対象情報が異常であると判定した場合に、判定結果に関係するトレースメッセージを生成するように前記トレースデータ生成回路に要求するとともに、前記保存バッファのクリアを前記トレースデータ保存回路に要求する、付記１に記載の半導体装置。
【０２１２】
（付記６）
前記異常判定回路は、
前記停止要求が出力されている間、カウント値をインクリメントするカウンタと、
前記カウンタのカウント値を閾値と比較する比較器とを含み、
前記異常判定回路は、前記カウンタのカウント値が前記閾値を超えたときに前記停止要求は異常であると判定する、付記２に記載の半導体装置。
【０２１３】
（付記７）
前記異常判定回路は、前記閾値を保存する閾値保存レジスタを含み、
前記閾値保存レジスタの値は、前記半導体装置の外部から設定可能である、付記６に記載の半導体装置。
【０２１４】
（付記８）
前記カウンタは、前記停止要求が取り下げられたときにカウント値をクリアする、付記６に記載の半導体装置。
【０２１５】
（付記９）
前記カウンタは、前記停止要求が取り下げられたときにカウント値のデクリメントを開始する、付記６に記載の半導体装置。
【０２１６】
（付記１０）
前記カウンタは、前記停止要求が取り下げられたときにカウント値を現在の値のまま保持する、付記６に記載の半導体装置。
【０２１７】
（付記１１）
前記異常判定回路は、
前記停止要求が出力されたときにカウント値のインクリメントを開始し、前記停止要求が取り下げられたときにカウント値を現在の値のまま保持する第１のカウンタと、
前記停止要求が出力されたときにカウント値をクリアし、前記停止要求が取り下げられたときにカウント値のインクリメントを開始する第２のカウンタとを備え、
前記異常判定回路は、前記第１のカウンタのカウント値が第１の閾値を超えたときに、前記停止要求が異常であると判定し、
前記第２のカウンタのカウント値が第２の閾値を超えたときに、前記第１のカウンタおよび前記第２のカウンタの各々は、カウント値をクリアする、付記２に記載の半導体装置。
【０２１８】
（付記１２）
前記カウンタのカウント値の最大値を保持するための最大値保存回路をさらに備え、
前記最大値保存回路は、
最大値保存レジスタと、
前記カウンタから新たに出力されるカウント値と前記最大値保存レジスタに保存された値とを比較し、前記新たに出力されたカウント値が、前記最大値保存レジスタに保存された値よりも大きい場合に、前記新たに出力されたカウント値によって前記最大値保存レジスタに保存された値を更新する、付記６に記載の半導体装置。
【０２１９】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は上記実施形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【符号の説明】
【０２２０】
３０  ＣＰＵ（中央処理装置）、３１  命令実行回路、３２  実行情報出力回路、３３  実行結果、３４  実行情報、３５  プログラム格納メモリ、３６  命令、４０  トレースデータ保存回路、４１  保存バッファ、４２  保存量監視回路、４３  保存量、４４，４５  停止要求、４６，６６  トレースデータ、５０  異常判定回路、５１  カウンタ、５１Ａ  第１カウンタ、５２  閾値保存レジスタ、５２Ａ  第１閾値保存レジスタ、５３，９６  比較器、５３Ａ  第１比較器、５４  第２カウンタ、５５  第２閾値保存レジスタ、５６  第２比較器、５７  クリア信号、５８  割り込み通知、５９  情報解析回路、６０  ゲート回路、６１  停止許可信号、６５  トレースデータ生成回路、７５  レジスタ、８０  タイマクリア信号、８１  ウォッチドッグタイマ、８２  リセット要求、８３  リセット回路、８４  システムリセット信号、８５  リセットコントローラ、８６  リセット信号、８７  リセット許可信号、９０  結果保存レジスタ、９５  最大値保存回路、９７  最大値保存レジスタ、１０５  開発ツール、１１０  リセットドメイン、１１１  デバッグリセットドメイン。
【図１】
2020173543.tif 000003
【図２】
2020173543.tif 000004
【図３】
2020173543.tif 000005
【図４】
2020173543.tif 000006
【図５】
2020173543.tif 000007
【図６】
2020173543.tif 000008
【図７】
2020173543.tif 000009
【図８】
2020173543.tif 000010
【図９】
2020173543.tif 000011
【図１０】
2020173543.tif 000012
【図１１】
2020173543.tif 000013
【図１２】
2020173543.tif 000014
【図１３】
2020173543.tif 000015
【図１４】
2020173543.tif 000016
【図１５】
2020173543.tif 000017
【図１６】
2020173543.tif 000018
【図１７】
2020173543.tif 000019