(57)【特許請求の範囲】
【請求項１】
ＣＰＵコアと、当該ＣＰＵコアのデバッグ制御を行なうデバッグ制御ユニットと、周辺デバイスと、を各々含む複数のサブシステムと、
前記複数のサブシステムにおけるデバッグを制御するシステムデバッグ制御部と、
前記デバッグ制御ユニット、前記周辺デバイス、および前記システムデバッグ制御部が共通に接続され、前記システムデバッグ制御部から前記デバッグ制御ユニットおよび前記周辺デバイスへブレーク発生時の停止および当該停止後の再開の同期をとるための同期信号を転送するデバッグ用同期バスと、
前記デバッグ制御ユニットと前記システムデバッグ制御部とが共通に接続され、前記デバッグ制御ユニットの各々のトレースデータを前記システムデバッグ制御部に転送するデバッグ用内部バスと、
前記デバッグ制御ユニット、前記システムデバッグ制御部、およびデバッグＰＣと接続可能なデバッグインターフェースが共通に接続され、デバッグ制御用のコマンド、および前記システムデバッグ制御部に格納されている前記トレースデータを前記デバッグインターフェースを介して前記デバッグＰＣに転送可能な、前記デバッグ用同期バスおよび前記デバッグ用内部バスよりも低速なデバッグ用外部バスと、を備え、
前記デバッグ制御ユニットは、前記複数のサブシステムのいずれかが備える前記ＣＰＵコアによるプログラムの実行が前記デバッグＰＣで設定されたブレーク条件と一致した場合、前記ＣＰＵコアのプログラムの実行を停止し、前記デバッグ用同期バスを介して前記システムデバッグ制御部へブレークの発生を通知し、
前記システムデバッグ制御部は、前記ブレークの発生が通知された場合、前記プログラムの実行が停止されたＣＰＵコアと同期して停止するように選択された前記デバッグ制御ユニットおよび前記周辺デバイスに対して前記デバッグ用同期バスを介して実行停止を要求し、当該停止したサブシステムのデバッグ制御ユニットに格納されている、前記デバッグＰＣを用いて前記ＣＰＵコアに設定されたトレースポイントのトレースデータを前記デバッグ用内部バスを介して前記ブレークの発生が通知される毎に収集して格納し、当該格納したトレースデータを前記デバッグ用外部バスを介して前記デバッグＰＣに一度に転送可能である、
半導体集積回路装置。
【請求項２】
前記システムデバッグ制御部は、
前記サブシステムの動作停止後、前記停止したサブシステムの前記デバッグ制御ユニットに格納されている、前記デバッグＰＣを用いて前記ＣＰＵコアに設定されたトレースポイントのトレースデータを前記デバッグ用内部バスを介して複数収集するトレースデータ収集部と、
前記収集した複数のトレースデータを格納するトレースデータ格納部と、
前記格納した複数のトレースデータを前記デバッグ用外部バスを介して一度に出力するトレースデータ出力部と、を有する、
請求項１に記載の半導体集積回路装置。
【請求項３】
請求項１または２に記載の半導体集積回路装置と、当該半導体集積回路装置のデバッグを実施するための前記デバッグＰＣとを備えたデバッグシステム。
【請求項４】
半導体集積回路装置のデバッグ方法であって、
前記半導体集積回路装置は、
ＣＰＵコアと、当該ＣＰＵコアのデバッグ制御を行なうデバッグ制御ユニットと、周辺デバイスと、を各々含む複数のサブシステムと、
前記複数のサブシステムにおけるデバッグを制御するシステムデバッグ制御部と、
前記デバッグ制御ユニット、前記周辺デバイス、および前記システムデバッグ制御部が共通に接続され、前記システムデバッグ制御部から前記デバッグ制御ユニットおよび前記周辺デバイスへブレーク発生時の停止および当該停止後の再開の同期をとるための同期信号を転送するデバッグ用同期バスと、
前記デバッグ制御ユニットと前記システムデバッグ制御部とが共通に接続され、前記デバッグ制御ユニットの各々のトレースデータを前記システムデバッグ制御部に転送するデバッグ用内部バスと、
前記デバッグ制御ユニット、前記システムデバッグ制御部、およびデバッグＰＣと接続可能なデバッグインターフェースが共通に接続され、デバッグ制御用のコマンド、および前記システムデバッグ制御部に格納されている前記トレースデータを前記デバッグインターフェースを介して前記デバッグＰＣに転送可能な、前記デバッグ用同期バスおよび前記デバッグ用内部バスよりも低速なデバッグ用外部バスと、を備え、
前記デバッグ制御ユニットは、前記複数のサブシステムのいずれかが備える前記ＣＰＵコアによるプログラムの実行が前記デバッグＰＣで設定されたブレーク条件と一致した場合、前記ＣＰＵコアのプログラムの実行を停止し、前記デバッグ用同期バスを介して前記システムデバッグ制御部へブレークの発生を通知し、
前記システムデバッグ制御部は、前記ブレークの発生が通知された場合、前記プログラムの実行が停止されたＣＰＵコアと同期して停止するように選択された前記デバッグ制御ユニットおよび前記周辺デバイスに対して前記デバッグ用同期バスを介して実行停止を要求し、当該停止したサブシステムのデバッグ制御ユニットに格納されている、前記デバッグＰＣを用いて前記ＣＰＵコアに設定されたトレースポイントのトレースデータを前記デバッグ用内部バスを介して前記ブレークの発生が通知される毎に収集して格納し、当該格納したトレースデータを前記デバッグ用外部バスを介して前記デバッグＰＣに一度に転送する、
半導体集積回路装置のデバッグ方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体集積回路装置、それのデバッグシステム及びデバッグ方法に関し、特に、マイクロプロセッサを有する半導体集積回路装置、それをデバッグするデバッグシステム及びデバッグ方法に関する。
【背景技術】
【０００２】
近年、半導体集積回路装置（ＬＳＩ）では、搭載されるマイクロプロセッサの高速化・高性能化が進んでいる。そして、マイクロプロセッサ単体での性能の限界を超えて、さらなる性能向上のために複数のプロセッサを搭載したマルチプロセッサ構成の半導体集積回路装置が利用されている。
【０００３】
図１２は、一般的なマルチプロセッサ構成のＬＳＩの構成例を示している。このＬＳＩ８００は、図に示されるように、複数のサブシステム８１０ａ〜８１０ｃとメモリ８２０を有している。サブシステム８１０ａ〜８１０ｃのそれぞれには、ＣＰＵコア８１１ａ〜８１１ｃとＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）等の周辺デバイス８１３ａ〜８１３ｃが設けられている。ＣＰＵコア８１１ａ〜８１１ｃ、周辺デバイス８１３ａ〜８１３ｃ及びメモリ８２０はシステムバス８３０に共通に接続されている。システムバス８３０は、システムクロックを基準にして高速にデータ転送を行う高速バスである。
【０００４】
ＣＰＵコア８１１ａ〜８１１ｃと周辺デバイス８１３ａ〜８１３ｃは、メモリ８２０のデータを共有しながら、それぞれ並列に独立して処理を実行し、処理の高速化を図っている。例えば、メモリ８２０には、各サブシステムで実行するプログラムが格納されており、ＣＰＵコア８１１ａ〜８１１ｃは、メモリ８２０からプログラムを取得して実行したり、その実行結果のデータをメモリ８２０へ書き込んだりする。周辺デバイス８１３ａ〜８１３ｃは、ＣＰＵコア８１１ａ〜８１１ｃの指示にしたがってメモリ８２０にアクセスしたり、サブシステム８１０ａ〜８１０ｃの外部とメモリ８２０との間でデータ転送を行なったりする。
【０００５】
一方、このようなマルチプロセッサ構成のＬＳＩの動作を確認するために、デバッグが行われている。このデバッグには、ユーザが作成したプログラムを実行しプログラムのバグを除去するために行なうソフトウェア・デバッグや、検査用のプログラムを実行しプロセッサの動作不良を除去するために行なうハードウェア・デバッグがある。本明細書において、デバッグには、このソフトウェア・デバッグとハードウェア・デバッグを含むものとする。
【０００６】
図１３は、マルチプロセッサ構成のＬＳＩをデバッグするための従来のデバッグシステムの構成例を示している。この従来のデバッグシステムは、ＬＳＩ９００とデバッグＰＣ９９０を有している。ＬＳＩ９００とデバッグＰＣ９９０は、デバッグＩ／Ｆ（インタフェース）９４０を介して接続されている。
【０００７】
デバッグＰＣ９９０は、デバッグ制御用のプログラムからなるデバッガ９９１を有しており、ユーザがデバッガ９９１を操作することによりＬＳＩ９００のデバッグが行われる。
【０００８】
ＬＳＩ９００は、マルチプロセッサ構成のＬＳＩであり、複数のサブシステム９１０ａ〜９１０ｃとメモリ９２０を有している。サブシステム９１０ａ〜９１０ｃのそれぞれには、ＣＰＵコア９１１ａ〜９１１ｃとＤＣＵ（Ｄｅｂｕｇ  Ｃｏｎｔｒｏｌ  Ｕｎｉｔ：デバッグ制御ユニット）９１２ａ〜９１２ｃ、周辺デバイス９１３ａ〜９１３ｃが設けられている。
【０００９】
尚、この図は、デバッグ時に使用されるバスの接続関係を示しており、通常動作時に使用される接続関係は省略している。すなわち、図示を省略しているが、ＣＰＵコア９１１ａ〜９１１ｃ、周辺デバイス９１３ａ〜９１３ｃ及びメモリ９２０は、図１２と同様、システムバスに共通に接続されている。
【００１０】
図１３に示されるように、ＬＳＩ９００には、デバッグ時に使用されるバスとして、デバッグ用同期バス９３１とデバッグ用外部バス９３２が設けられている。デバッグ用同期バス９３１には、ＤＣＵ９１２ａ〜９１２ｃのそれぞれが共通に接続されている。デバッグ用外部バス９３２には、ＤＣＵ９１２ａ〜９１２ｃのそれぞれが共通に接続されるとともに、デバッグＩ／Ｆ９４０にも接続されている。デバッグ用同期バス９３１は、システムバスと同様に高速バスである。デバッグ用外部バス９３２は、デバッグＩ／Ｆ９４０の速度に合わせて低速バスである。
【００１１】
このようなデバッグシステムは、複数のデバッグモードによるデバッグが可能である。一般に、デバッグモードとして、ブレークモードとオンザフライトレースモードが知られている。ブレークモードは、ＣＰＵによるプログラムの実行が所定のブレークポイント（ブレーク条件）に達した場合に、プログラムの実行を停止し、デバッガの操作によりＣＰＵの内部状態等の観測を行うモードである。オンザフライトレースモードは、ＣＰＵによるプログラムの実行が所定のブレークポイント（ブレーク条件）に達した場合に、プログラムの実行を一時的に停止し、所定のトレースポイントのトレースデータを採取した後、すぐに自動的にプログラムの実行を再開するモードである。
【００１２】
図１４は、ブレークモードにおける従来のデバッグシステムの動作（デバッグ方法）を示している。例えば、デバッグＰＣ９９０のデバッガ９９１にて、ユーザがブレークモードを選択した後、以下の処理が行われる。
【００１３】
ブレークモードの場合、まず、デバッグＰＣ９９０は、デバッグ用外部バス９３２を介して、ユーザ所望のＤＣＵ、例えば、ＤＣＵ９１２ａに対しブレーク条件の設定を要求する（Ｓ８０１）。そうすると、ＤＣＵ９１２ａは、ＣＰＵコア９１１ａにブレーク条件を設定する。
【００１４】
次いで、デバッグＰＣ９９０は、デバッグ用外部バス９３２を介して、全てのＤＣＵ、すなわち、ＤＣＵ９１２ａ〜９１２ｃに対しプログラムの実行開始を要求する（Ｓ８０２）。そうすると、ＤＣＵ９１２ａ〜９１２ｃのそれぞれは、ＣＰＵコア９１１ａ〜９１１ｃにプログラムの実行を開始させる。
【００１５】
次いで、ＤＣＵ９１２ａは、プログラムの実行が設定したブレーク条件に一致したことを検出すると、ＣＰＵコア９１１ａにプログラムの実行を停止させるとともに、デバッグ用同期バス９３１を介して、他の全てのＤＣＵ、すなわち、ＤＣＵ９１２ｂ，９１２ｃに対しブレークの検出を通知する（Ｓ８０３）。そうすると、ＤＣＵ９１２ｂ，９１２ｃのそれぞれは、ＣＰＵコア９１１ｂ，９１１ｃにプログラムの実行を停止させる。
【００１６】
次いで、デバッグＰＣ９９０は、デバッグ用外部バス９３２を介して、ＤＣＵ９１２ａ〜ＤＣＵ９１２ｃから、ユーザ所望のＣＰＵコア９１１ａ〜９１１ｃの内部情報を取得する（Ｓ８０４）。そして、内部情報の確認が終わると、デバッグＰＣ９９０は、デバッグ用外部バス９３２を介して、全てのＤＣＵ、すなわち、ＤＣＵ９１２ａ〜９１２ｃに対しプログラムの実行の再開を要求する（Ｓ８０５）。そうすると、ＤＣＵ９１２ａ〜９１２ｃのそれぞれは、ＣＰＵコア９１１ａ〜９１１ｃにプログラムの実行を再開させる。
【００１７】
図１５は、オンザフライトレースモードにおける従来のデバッグシステムの動作（デバッグ方法）を示している。例えば、デバッグＰＣ９９０のデバッガ９９１にて、ユーザがオンザフライトレースモードを選択した後、以下の処理が行われる。
【００１８】
オンザフライトレースモードの場合、まず、デバッグＰＣ９９０は、デバッグ用外部バス９３２を介して、ユーザ所望のＤＣＵ、例えば、ＤＣＵ９１２ａに対しブレーク条件の設定を要求する（Ｓ９０１）。そうすると、ＤＣＵ９１２ａは、ＣＰＵコア９１１ａにブレーク条件を設定する。
【００１９】
次いで、デバッグＰＣ９９０は、デバッグ用外部バス９３２を介して、所望のＤＣＵ、例えば、ＤＣＵ９１２ａ〜９１２ｃに対しトレースポイントの設定を要求する（Ｓ９０２）。そうすると、ＤＣＵ９１２ａ〜９１２ｃのそれぞれは、ＣＰＵコア９１１ａ〜９１１ｃにトレースポイントを設定する。
【００２０】
次いで、デバッグＰＣ９９０は、デバッグ用外部バス９３２を介して、全てのＤＣＵ、すなわち、ＤＣＵ９１２ａ〜９１２ｃに対しプログラムの実行開始を要求する（Ｓ９０３）。そうすると、ＤＣＵ９１２ａ〜９１２ｃのそれぞれは、ＣＰＵコア９１１ａ〜９１１ｃにプログラムの実行を開始させる。
【００２１】
次いで、ＤＣＵ９１２ａは、プログラムの実行が設定したブレーク条件に一致したことを検出すると、ＣＰＵコア９１１ａにプログラムの実行を停止させるとともに、デバッグ用同期バス９３１を介して、他の全てのＤＣＵ、すなわち、ＤＣＵ９１２ｂ，ＤＣＵ９１２ｃに対しブレークの検出を通知する（Ｓ９０４）。そうすると、ＤＣＵ９１２ｂ，９１２ｃのそれぞれは、ＣＰＵコア９１３ｂ，９１３ｃにプログラムの実行を停止させる。そして、ＤＣＵ９１２ａ〜９１２ｃのそれぞれは、設定されたトレースポイントのトレースデータをＣＰＵコア９１１ａ〜９１１ｃから採取してＤＣＵ９１２ａ〜９１２ｃの内部に保持した後、ＣＰＵコア９１１ａ〜９１１ｃにプログラムの実行を再開させる（Ｓ９０５）。
【００２２】
その後、ＤＣＵ９１２ａによるブレークの検出ごとに、ブレーク通知〜トレースデータ保持を繰り返す（Ｓ９０４'，Ｓ９０５'）。そして、デバッグＰＣ９９０は、デバッグ用外部バス９３２を介して、ＤＣＵ９１２ａ〜９１３ｃに保持されているトレースデータを収集する（Ｓ９０６）。
【００２３】
しかしながら、従来のデバッグシステムでは、ブレークモードの場合、デバッグ用同期バスにより、各ＣＰＵコアのプログラム実行を停止させているが、各サブシステムの周辺デバイスを停止させていない。例えば、周辺デバイスが、ＣＰＵコアと並列で動作している場合、ＣＰＵコアのみが停止しても、周辺デバイスが動き続けると、ＣＰＵコアやメモリ等の内部状態が更新されてしまい、正確な内部状態を確認することが困難である。また、ブレーク発生時、常に、デバッグ用同期バスに接続されている全てのＣＰＵコアを停止してしまうため、必要なＣＰＵコアのみを停止することができなかった。
【００２４】
さらに、オンザフライトレースモードの場合、デバッグ用同期バスが高速バスであるため、各ＣＰＵコアのプログラム実行をすぐに停止し、トレースデータをＤＣＵ内部に保持することは可能であるが、デバッグ用外部バスが低速バスであるため、デバッグＰＣがトレースデータをＤＣＵから収集するまでに時間がかかってしまう。トレースデータを格納するためにＤＣＵに搭載するメモリは、一般にメモリ量が小さく、トレースデータを１つ程度しか保持できず、すぐに新しいトレースデータに更新されてしまうため、観測したいトレースデータを収集するのが困難である。
【００２５】
尚、マルチプロセッサ構成のＬＳＩをデバッグする従来技術として特許文献１及び２が知られている。
【特許文献１】特開２００４−３４２００１号公報
【特許文献２】特開２００３−１５９０６号公報
【発明の開示】
【発明が解決しようとする課題】
【００２６】
このように、従来のデバッグシステムでは、ブレーク発生時、デバッグ用同期バスによりＣＰＵコアのみ停止しているため、サブシステム内の周辺デバイス等により内部状態が変化してしまうことがあった。また、ブレーク発生時、常に、デバッグ用同期バスに接続されている全てのＣＰＵコアを停止してしまうため、必要なＣＰＵコアのみを停止させることができなかった。また、ＤＣＵを共通に接続するデバッグ用同期バスは高速バスであるが、デバッグ用外部バスは外部Ｉ／Ｆと同じ低速のバスであるため、必要なトレースデータを収集できない場合があった。
【００２７】
したがって、従来のデバッグシステムでは、正確にデバッグを行うことが困難であり、問題の見落としや原因究明までに時間がかかりデバッグ効率が悪いという問題があった。
【課題を解決するための手段】
【００２８】
本発明にかかる半導体集積回路装置は、プロセッサを含むサブシステムを複数有する半導体集積回路装置であって、前記複数のサブシステムのいずれかのプロセッサによるプログラムの実行が所定のブレーク条件と一致したことを検出するブレーク検出部と、前記ブレーク検出部の検出に応じて、前記複数のサブシステムのうち選択されたサブシステムの動作を停止させる停止制御部と、を有するものである。
【００２９】
この半導体集積回路装置によれば、所定のプロセッサによるプログラムの実行がブレーク条件に一致した場合に、複数のサブシステム（プロセッサや周辺デバイスなど）のいくつかを同期させて停止できるようになる。これにより、デバッグしたい情報に応じてサブシステムを同期させることができるため、デバッグしたい情報を精度よく収集でき、デバッグ効率を向上することができる。
【００３０】
本発明にかかる半導体集積回路装置は、プロセッサと、前記プロセッサによるプログラムの実行が所定のブレーク条件と一致したことを検出するブレーク検出部と、前記ブレーク検出部の検出に応じて、前記プロセッサから所定のトレースポイントのトレースデータを複数収集するトレース収集部と、前記収集した複数のトレースデータを格納するトレース格納部と、前記格納した複数のトレースデータを一度に出力するトレース出力部と、を有するものである。
【００３１】
この半導体集積回路装置によれば、半導体集積回路装置の内部で、トレースポイントのトレースデータを複数格納しておき、複数のトレースデータをまとめて出力するようになる。このため、半導体集積回路装置の内部でトレースデータが上書きされてしまうことがなくなるため、デバッグしたい情報を精度よく収集でき、デバッグ効率を向上することができる。
【００３２】
本発明にかかるデバッグシステムは、複数のプロセッサを有する半導体集積回路装置をデバッグするデバッグシステムであって、前記半導体集積回路装置は、前記複数のプロセッサによるプログラムの実行が所定のブレーク条件と一致したことを検出するブレーク検出部と、前記ブレーク検出部の検出に応じて、前記複数のプロセッサのうち選択されたプロセッサのプログラムの実行を停止させる停止制御部と、を有するものである。
【００３３】
このデバッグシステムによれば、所定のプロセッサによるプログラムの実行がブレーク条件に一致した場合に、複数のサブシステム（プロセッサや周辺デバイスなど）のいくつかを同期させて停止できるようになる。これにより、デバッグしたい情報に応じてサブシステムを同期させることができるため、デバッグしたい情報を精度よく収集でき、デバッグ効率を向上することができる。
【００３４】
本発明にかかるデバッグ方法は、プロセッサ及びブレーク検出部を含む複数のサブシステムと、前記複数のサブシステムの動作を制御する制御部とを有する半導体集積回路装置をデバッグするデバッグ方法であって、前記ブレーク検出部は、前記複数のプロセッサによるプログラムの実行が所定のブレーク条件と一致したことを検出し、前記制御部は、前記ブレーク条件の検出に応じて、前記複数のプロセッサのうち選択されたプロセッサのプログラムの実行を停止させるものである。
【００３５】
このデバッグ方法によれば、所定のプロセッサによるプログラムの実行がブレーク条件に一致した場合に、複数のサブシステム（プロセッサや周辺デバイスなど）のいくつかを同期させて停止できるようになる。これにより、デバッグしたい情報に応じてサブシステムを同期させることができるため、デバッグしたい情報を精度よく収集でき、デバッグ効率を向上することができる。
【発明の効果】
【００３６】
本発明によれば、デバッグしたい情報を精度よく収集し、デバッグ効率を向上できるデバッグシステム、デバッグ方法及び半導体集積回路装置を提供することができる。
【発明を実施するための最良の形態】
【００３７】
発明の実施の形態１．
まず、本発明の実施の形態１にかかるデバッグシステムについて説明する。本実施形態にかかるデバッグシステムは、ＬＳＩに設けたシステムデバッグ制御部により、ブレーク発生時の同期を制御するとともに、各ＤＣＵの複数のトレースデータをＬＳＩ内に格納することを特徴としている。
【００３８】
ここで、図１を用いて、本実施形態にかかるデバッグシステムの構成について説明する。このデバッグシステムは、マルチプロセッサ構成のＬＳＩをデバッグするシステムであり、ＬＳＩ１００とデバッグＰＣ１９０を有している。ＬＳＩ１００とデバッグＰＣ１９０は、デバッグＩ／Ｆ１４０を介して接続されている。デバッグＩ／Ｆ１４０は、デバッグ専用のインタフェースであり、例えば、ＪＴＡＧなどの低速なシリアル・インタフェースである。
【００３９】
デバッグＰＣ１９０は、例えば、パーソナルコンピュータ等のコンピュータにより構成されている。デバッグＰＣ１９０は、デバッグ制御用のプログラムからなるデバッガ１９１を有しており、ユーザがデバッガ１９１を操作することによりＬＳＩ１００のデバッグが行われる。デバッグＰＣ１９０には、デバッガ用のプログラムがメモリ等に格納されており、このプログラムをＣＰＵが実行することにより、デバッガ１９１の機能が実現されている。例えば、デバッガ１９１は、マウス等のユーザインタフェースを介したユーザの操作に応じて、ブレーク条件やトレースポイントの設定、実行開始などのデバッグ用のコマンドをＬＳＩ１００へ出力する。
【００４０】
ＬＳＩ１００は、マルチプロセッサ構成のＬＳＩであり、複数のサブシステム１１０ａ〜１１０ｃ、メモリ１２０及びシステムデバッグ制御部１５０を有している。サブシステム１１０（サブシステム１１０ａ〜１１０ｃのいずれか）は、単体で特定の機能を有し、それぞれ独立して並列に動作することができる。メモリ１２０は、各サブシステム１１０の動作に必要なプログラムやデータを格納するメインメモリであり、複数のサブシステム１１０でデータ等を共有する共有メモリである。システムデバッグ制御部１５０は、全てのサブシステム１１０に対してデバッグ制御を行う。システムデバッグ制御部１５０は、デバッグ制御として、ブレーク発生時の同期などのブレーク制御や、各サブシステムからのトレースデータの収集などのトレース制御などを行う。
【００４１】
サブシステム１１０ａ〜１１０ｃのそれぞれには、ＣＰＵコア１１１ａ〜１１１ｃとＤＣＵ（Ｄｅｂｕｇ  Ｃｏｎｔｒｏｌ  Ｕｎｉｔ：デバッグ制御ユニット）１１２ａ〜１１２ｃ、周辺デバイス１１３ａ〜１１３ｃが設けられている。ＣＰＵコア１１１（ＣＰＵコア１１１ａ〜１１１ｃのいずれか）は、プログラムをメモリ１２０から取得し、取得したプログラムを実行するプログラム実行部である。ＤＣＵ１１２（ＤＣＵ１１２ａ〜１１２ｃのいずれか）は、同じサブシステム内のＣＰＵコア１１１のデバッグ制御を行うＣＰＵデバッグ制御部である。ＤＣＵ１１２は、デバッグ制御として、ブレーク条件の設定やブレーク検出などのブレーク制御、トレースポイントの設定やトレースデータの採取などのトレース制御を行う。周辺デバイス１１３（周辺デバイス１１３ａ〜１１３ｃのいずれか）は、ＤＭＡやキャッシュメモリ等であり、ＣＰＵコア１１１の制御のもとでサブシステム１１０の種々の動作を補助する補助機能部である。周辺デバイス１１３は、ＣＰＵコア１１１と並列に独立して動作し、メインメモリ１２０にアクセスしたり、サブシステム１１０やＣＰＵコア１１１の内部情報等を更新する。
【００４２】
尚、この図は、デバッグ時に使用されるバスの接続関係を示しており、通常動作時に使用される接続関係は省略している。すなわち、図示を省略しているが、ＣＰＵコア１１１ａ〜１１１ｃ、周辺デバイス１１３ａ〜１１３ｃ及びメモリ１２０は、図１２と同様、システムバスに共通に接続されている。
【００４３】
図１に示されるように、ＬＳＩ１００には、デバッグ時に使用されるバスとして、デバッグ用同期バス１３１、デバッグ用外部バス１３２及びデバッグ用内部バス１３３が設けられている。
【００４４】
デバッグ用同期バス１３１には、ＤＣＵ１１２ａ〜１１２ｃ、周辺デバイス１１３ａ〜１１３ｃ、システムデバッグ制御部１５０のそれぞれが共通に接続されている。デバッグ用同期バス１３１は、各サブシステム１１０におけるブレーク発生時の停止や、停止後の再開の同期をとるための同期信号を転送するためのバスである。デバッグ用同期バス１３１は、システムバスと同様に高速バスである。
【００４５】
デバッグ用外部バス１３２には、ＤＣＵ１１２ａ〜１１２ｃ、システムデバッグ制御部１５０のそれぞれが共通に接続されるとともに、デバッグＩ／Ｆ１４０にも接続されている。デバッグ用外部バス１３２は、デバッグＩ／Ｆ１４０を介して、デバッグＰＣ１９０と、ＤＣＵ１１２又はシステムデバッグ制御部１５０との間で、デバッグ制御用のコマンドやトレースデータ等を転送するためのバスである。デバッグ用外部バス１３２は、デバッグＩ／Ｆ１４０の速度に合わせて低速バスである。
【００４６】
デバッグ用内部バス１３３には、ＤＣＵ１１２ａ〜１１２ｃ、システムデバッグ制御部１５０のそれぞれが共通に接続されている。デバッグ用内部バス１３３は、各ＤＣＵ１１２のトレースデータをシステムデバッグ制御部１５０に転送するためのバスである。デバッグ用内部バス１３３は、ＤＣＵ１１２からトレースデータをできるだけ早く収集するため、例えば、システムバスと同様に高速バスである。
【００４７】
次に、図２を用いて、本実施形態にかかるサブシステムの構成について説明する。サブシステム１１０は、上記のとおり、ＣＰＵコア１１１、ＤＣＵ１１２、周辺デバイス１１３を有している。ＣＰＵコア１１１とＤＣＵ１１２は、プロセッサ１１を構成している。すなわち、サブシステム１１０は、プロセッサ１１と周辺デバイス１１３から構成されている。
【００４８】
ＤＣＵ１１２は、図に示されるように、ＣＰＵブレーク制御部２１１、ＣＰＵトレース制御部２２０を有している。
【００４９】
ＣＰＵブレーク制御部２１１は、デバッグモードがブレークモードもしくはオンザフライトレースモードの場合に、１つのＣＰＵコア１１１のブレークに関する制御を行う。ＣＰＵブレーク制御部２１１は、ブレーク条件設定部２１１、ブレーク検出部２１２、停止／再開部２１３を有している。
【００５０】
ブレーク条件設定部２１１は、デバッグＰＣ１９０からの要求にしたがい、ＣＰＵコア１１１にブレーク条件を設定する。このブレーク条件は、ＣＰＵコア１１１のプログラムを一時停止し、通常状態（ＣＰＵコア１１１がプログラムを実行する状態）からブレーク状態（デバッグＰＣ１９０がＣＰＵコア１１１の内部情報を観測できる状態）もしくはトレース状態（ＤＣＵ１１２がＣＰＵコア１１１のトレースデータを採取する状態）に切り替える条件である。例えば、ブレーク条件は、特定のプログラム命令を実行した時や、メモリ１２０の特定のアドレスにアクセスした時などである。
【００５１】
ブレーク検出部２１２は、ＣＰＵコア１１１によるプログラムの実行が設定されたブレーク条件と一致したこと、すなわち、ＣＰＵコア１１１でブレークが発生したことを検出する。ブレーク検出部２１２は、さらに、ブレークの検出をシステムデバッグ制御部１５０へ通知する。
【００５２】
停止／再開部２１３は、システムデバッグ制御部１５０からの要求にしたがい、ＣＰＵコア１１１によるプログラムの実行の停止や再開を制御する。すなわち、停止／再開部２１３は、ＣＰＵコア１１１の動作状態を通常状態からブレーク状態もしくはトレース状態へ切り替えたり、ブレーク状態もしくはトレース状態から通常状態へ切り替える。
【００５３】
ＣＰＵトレース制御部２２０は、デバッグモードがオンザフライトレースモードの場合に、１つのＣＰＵコア１１１のトレースに関する制御を行う。ＣＰＵトレース制御部２２０は、トレースポイント設定部２２１、トレースデータ採取部２２２、トレースデータ保持部２２３を有している。
【００５４】
トレースポイント設定部２２１は、デバッグＰＣ１９０からの要求にしたがい、ＣＰＵコア１１１にトレースポイントを設定する。このトレースポイントは、トレースデータとして採取したいデータを示している。例えば、トレースポイントは、サブシステム１１０内の特定のレジスタや、メインメモリ１２０の特定のアドレスなどである。
【００５５】
トレースデータ採取部２２２は、ブレークの検出時（トレース状態に遷移した時）、設定されたトレースポイントのデータをトレースデータとして採取する。トレースデータ保持部２２３は、採取したトレースデータを一時的に保持する。例えば、トレースデータ保持部２２３には、トレースデータを１つ保持できる。
【００５６】
周辺デバイス１１３は、図に示されるように、停止／再開部３１０と内部回路３２０を有している。内部回路３２０は、周辺デバイス１１３の機能を実行する回路である。停止／再開部３１０は、システムデバッグ制御部１５０からの要求にしたがい、内部回路３２０の動作の停止や再開を制御する。すなわち、停止／再開部３１０は、内部回路３２０の動作状態を通常状態からブレーク状態もしくはトレース状態へ切り替えたり、ブレーク状態もしくはトレース状態から通常状態へ切り替える。
【００５７】
図３は、周辺デバイス１１３の回路の具体例を示している。図３（ａ）は、停止／再開部３１０として内部回路３２０の動作クロックを制御する例である。この停止／再開部３１０は、ＡＮＤ回路３１１を有している。ＡＮＤ回路３１１には、デバッグ用同期バス１３１の同期信号の反転信号と、内部回路３２０の動作クロックであるクロック信号が入力される。
【００５８】
例えば、デバッグ用同期バス１３１の同期信号がローレベル、すなわち、非同期（開始／再開）の場合、ＡＮＤ回路３１１は、クロック信号をそのまま内部回路３２０へ伝達し、内部回路３２０がクロック信号にしたがって動作する。また、同期信号がハイレベル、すなわち、同期（停止）の場合、ＡＮＤ回路３１１は、クロック信号の内部回路３２０への伝達を停止し、内部回路３２０の動作が停止する。
【００５９】
図３（ｂ）は、停止／再開部３１０として、内部回路３２０のＦ／Ｆのセレクタを制御する例である。例えば、内部回路３２０は、複数の組み合わせ回路３２１を有しており、組み合わせ回路３２１の前段と後段には、入力信号や出力信号をラッチするＦ／Ｆ３２２が設けられている。Ｆ／Ｆ３２２の入力には、セレクタ３２３が設けられている。セレクタ３２３には、Ｆ／Ｆ３２２の出力信号と前段の組み合わせ回路からの出力信号とが入力され、選択信号によって、いずれかの信号を選択し、Ｆ／Ｆ３２２へ入力する。停止／再開部３１０は、デバッグ用同期バス１３１の同期信号をセレクタ３２３の選択信号として出力する。
【００６０】
例えば、デバッグ用同期バス１３１の同期信号（選択信号）が、ローレベル、すなわち、非同期（開始／再開）の場合、セレクタ３２３は、前段の組み合わせ回路からの出力信号をＦ／Ｆ３２２へ入力する。そうすると、Ｆ／Ｆ３２２が、前段の組み合わせ回路の出力信号をラッチし、ラッチした信号を組み合わせ回路３２１へ入力して、組み合わせ回路３２１が入力に応じて動作する。また、同期信号（選択信号）がハイレベル、すなわち、同期（停止）になると、セレクタ３２３は、前段の組み合わせ回路からの出力信号ではなくＦ／Ｆ３２２の出力信号をＦ／Ｆ３２２へ出力する。そうすると、Ｆ／Ｆ３２２は、前段の組み合わせ回路の出力信号を組み合わせ回路３２１へ入力しなくなり、組み合わせ回路３２１は動作が停止する。
【００６１】
次に、図４を用いて、本実施形態にかかるシステムデバッグ制御部１５０の構成について説明する。図に示されるように、システムデバッグ制御部１５０は、システムブレーク制御部４１０とシステムトレース制御部４２０を有している。
【００６２】
システムブレーク制御部４１０は、デバッグモードがブレークモードもしくはオンザフライトレースモードの場合に、全てのＣＰＵコア１１１に対しブレークに関する制御を行う。システムブレーク制御部４１０は、同期情報格納部４１１、ブレーク選択部４１２、再開選択部４１３を有している。
【００６３】
同期情報格納部４１１は、デバッグＰＣ１９０からの要求にしたがい、ブレーク発生時や再開時に同期させるサブシステム１１０（ＣＰＵコア１１１や周辺デバイス１１３）を示す同期情報を格納する。ブレーク選択部４１２は、ＤＣＵ１１２からブレーク通知を受けたとき、すなわち、ブレーク発生時、同期情報格納部４１１の同期情報に基づき、同期して停止させるサブシステム１１０（ＣＰＵコア１１１や周辺デバイス１１３）を選択する。つまり、ブレーク選択部４１２は、ＤＣＵ１１２のブレーク検出部２１２によるブレークの検出に応じて、同期情報格納部４１１により選択されたサブシステム１１０の動作を停止させる停止制御部である。すなわち、ブレーク選択部４１２は、各サブシステム１１０が通常状態からブレーク状態もしくはトレース状態へ切り替わるタイミングを同期させる。
【００６４】
再開選択部４１３は、ブレーク発生後の再開時に、デバッグＰＣ１３０からの要求と同期情報格納部４１１の同期情報に基づき、同期して再開させるサブシステム１１０（ＣＰＵコア１１１や周辺デバイス１１３）を選択する。つまり、再開選択部４１３は、ブレーク選択部４１２によるサブシステム１１０の動作停止後、デバッグＰＣ１３０からの要求に応じて、同期情報格納部４１１により選択されたサブシステム１１０の動作を再開させる再開制御部である。すなわち、再開選択部４１３は、各サブシステム１１０がブレーク状態から通常状態へ切り替わるタイミングを同期させる。
【００６５】
システムトレース制御部４２０は、デバッグモードがオンザフライトレースモードの場合に、全てのＣＰＵコア１１１に対しトレースに関する制御を行う。システムトレース制御部４２０は、トレースデータ収集部４２１、トレースデータ格納部４２２及びトレースデータ出力部４２３を有している。
【００６６】
トレースデータ収集部４２１は、ブレーク発生時、各ＤＣＵ１１２に保持されているトレースデータを収集する。すなわち、トレースデータ収集部４２１は、ブレーク選択部４１２によるサブシステム１１０の動作停止後、停止しトレース状態となっているサブシステム１１０のＤＣＵ１１２から複数のトレースデータを収集する。
【００６７】
トレースデータ格納部４２２は、トレースデータ収集部４２１が収集した複数のトレースデータを格納する。トレースデータ格納部４２２は、デバッグＰＣ１９０によるトレースデータの取得が完了するまでの間、トレースデータを上書きすることなく保持できる程度のメモリ量を有している。トレースデータ格納部４２２は、システムデバッグ制御部１５０の内部に設けられたメモリでもよいし、システムデバッグ制御部１５０の外部のメモリ１２０等であってもよい。トレースデータ出力部４２３は、トレースデータ格納部４２３に格納された複数のトレースデータをまとめて一度に、デバッグＰＣ１９０へ出力する。
【００６８】
図５は、ブレーク制御部４１０の回路の具体例を示している。例えば、同期情報格納部４１１は、レジスタ５０１から構成され、ブレーク選択部４１２は、複数のＡＮＤ回路５０２から構成されている。
【００６９】
レジスタ５０１は、複数のビット情報を保持でき、各ビットは、サブシステム１１０（ＤＣＵ１１２や周辺デバイス１１３）にそれぞれ対応している。デバッグＰＣ１９０によって、ブレーク発生時に同期して停止させたいサブシステム１１０のビットがハイレベルに設定される。ＡＮＤ回路５０２は、レジスタ５０１の各ビット、すなわち、サブシステム１１０（ＤＣＵ１１２や周辺デバイス１１３）に対応して設けられ、各ＡＮＤ回路５０２には、レジスタ５０１のビットとデバッグ用同期バスの同期信号が入力される。
【００７０】
例えば、ＤＣＵ１１２からデバッグ用同期バス１３１の同期信号にハイレベルが入力されると、レジスタ５０１が設定されているＡＮＤ回路５０２がハイレベルを出力し、対応するサブシステム１１０（ＤＣＵ１１２や周辺デバイス１１３）に同期信号が入力される。
【００７１】
再開選択部４１３の場合も同様に、複数のＡＮＤ回路５０２から構成され、レジスタ５０１には同期して再開させたいサブシステム１１０のビットにハイレベルが設定される。例えば、デバッグＰＣ１９０から再開要求が入力されると、レジスタ５０１が設定されているＡＮＤ回路５０２がハイレベルを出力し、対応するサブシステム１１０（ＤＣＵ１１２や周辺デバイス１１３）に同期信号が入力される。
【００７２】
次に、図６乃至図９を用いて、本実施形態にかかるデバッグシステムの動作（デバッグ方法）について説明する。図６は、ブレークモードにおけるデバッグシステムの動作を示している。例えば、デバッグＰＣ１９０のデバッガ１９１にて、ユーザがブレークモードを選択した後、以下の処理が行われる。
【００７３】
ブレークモードの場合、まず、デバッグＰＣ１９０は、デバッグ用外部バス１３２を介して、ユーザ所望のＤＣＵ、例えば、ＤＣＵ１１２ａに対しブレーク条件の設定を要求する（Ｓ６０１）。そうすると、ＤＣＵ１１２ａのブレーク条件設定部２１１は、この要求にしたがってＣＰＵコア１１１ａにブレーク条件を設定する。
【００７４】
次いで、デバッグＰＣ１９０は、デバッグ用外部バス１３２を介して、システムデバッグ制御部１５０に対し、ブレーク発生時に同期して停止させたいブレーク用の同期情報を設定する（Ｓ６０２）。すなわち、システムデバッグ制御部１５０の同期情報格納部４１１に同期情報が格納される。例えば、周辺デバイス１１３ａ、ＤＣＵ１１２ｂ、周辺デバイス１１３ｂが同期するように設定する。
【００７５】
次いで、デバッグＰＣ１９０は、デバッグ用外部バス１３２を介して、全てのＤＣＵ、すなわち、ＤＣＵ１１２ａ〜１１２ｃに対しプログラムの実行開始を要求する（Ｓ６０３）。そうすると、ＤＣＵ１１２ａ〜１１２ｃのそれぞれは、ＣＰＵコア１１１ａ〜１１１ｃにプログラムの実行を開始させる。
【００７６】
次いで、ＤＣＵ１１２ａのブレーク検出部２１２は、プログラムの実行が設定したブレーク条件に一致したことを検出すると、ＣＰＵコア１１１ａにプログラムの実行を停止させ（ブレーク状態に切り替える）、さらに、デバッグ用同期バス１３１を介して、システムデバッグ制御部１５０へブレークの発生を通知する（Ｓ６０４）。
【００７７】
次いで、システムデバッグ制御部１５０は、設定されたブレーク用の同期情報に基づき、同期して停止するサブシステムへ、デバッグ用同期バス１３１を介して、実行停止を要求する（Ｓ６０５）。ここでは、Ｓ６０２で周辺デバイス１１３ａ、ＤＣＵ１１２ｂ、周辺デバイス１１３ｂが同期するように設定されているため、ＤＣＵ１１２ｃは停止の対象外となり、周辺デバイス１１３ａ、ＤＣＵ１１２ｂ、周辺デバイス１１３ｂへ実行停止を要求する。すなわち、システムデバッグ制御部１５０のブレーク選択部４１２は、ブレーク通知を受けると、同期情報格納部４１１の同期情報を参照し、停止させるＤＣＵ１１２と周辺デバイス１１３に対応するデバッグ用同期バス１３１の同期信号をハイレベルにする。そうすると、ＤＣＵ１１２ｂの停止／再開部２１３は、同期信号にしたがい、ＣＰＵコア１１１ｂにプログラムの実行を停止させる（ブレーク状態に切り替える）。周辺デバイス１１３ａ，１１３ｂの停止／再開部３１０も、同期信号にしたがい、その回路動作を停止させる（ブレーク状態に切り替える）。
【００７８】
次いで、デバッグＰＣ１９０は、デバッグ用外部バス１３２を介して、停止しているＤＣＵ１１２ａ，１１２ｂから、ユーザ所望のＣＰＵコア１１１ａ，１１１ｂの内部情報を取得する（Ｓ６０６）。
【００７９】
次いで、内部情報の確認が終わると、デバッグＰＣ１９０は、デバッグ用外部バス１３２を介して、システムデバッグ制御部１５０に対し、同期して再開させたい再開用の同期情報を設定する（Ｓ６０７）。すなわち、システムデバッグ制御部１５０の同期情報格納部４１１に同期情報が格納される。例えば、ＤＣＵ１１２ａ、周辺デバイス１１３ａ、ＤＣＵ１１２ｂ、周辺デバイス１１３ｂが同期するように設定する。
【００８０】
次いで、デバッグＰＣ１９０は、デバッグ用外部バス１３２を介して、システムデバッグ制御部１５０に対し実行再開を要求する（Ｓ６０８）。そうすると、システムデバッグ制御部１５０は、リスタートの同期情報の設定に基づいて、同期して再開させるサブシステム、ここでは、ＤＣＵ１１２ａ、周辺デバイス１１３ａ、ＤＣＵ１１２ｂ、周辺デバイス１１３ｂに実行再開を要求する（Ｓ６０９）。すなわち、システムデバッグ制御部１５０の再開選択部４１３は、再開要求を受けると、同期情報格納部４１１の同期情報を参照し、再開させるＤＣＵ１１２と周辺デバイス１１３に対応するデバッグ用同期バス１３１の同期信号をローレベルにする。そうすると、ＤＣＵ１１２ａ，１１２ｂの停止／再開部２１３は、同期信号にしたがい、ＣＰＵコア１１１ｂにプログラムの実行を再開させる（通常状態に切り替える）。周辺デバイス１１３ａ，１１３ｂの停止／再開部３１０も、同期信号にしたがい、その回路動作を再開させる（通常状態に切り替える）。
【００８１】
図７は、ブレークモードにおけるデバッグシステムの動作を示すタイミングチャートである。図に示すように、例えば、ＣＰＵコア１１１ａでブレークが発生すると、ＣＰＵコア１１１ａが動作を停止し通常状態からブレーク状態に切り替わるとともに、周辺デバイス１１３ａ、ＣＰＵコア１１１ｂ、周辺デバイス１１３ｂも、ほぼ同じタイミングで動作を停止し通常状態からブレーク状態に切り替わる。また、デバッグＰＣ１９０から実行再開を要求されると、ＣＰＵコア１１１ａ、周辺デバイス１１３ａ、ＣＰＵコア１１１ｂ、周辺デバイス１１３ｂが、ほぼ同じタイミングで動作を再開しブレーク状態から通常状態に切り替わる。
【００８２】
図８は、オンザフライトレースモードにおけるデバッグシステムの動作を示している。例えば、デバッグＰＣ１９０のデバッガ１９１にて、ユーザがオンザフライトレースモードを選択した後、以下の処理が行われる。
【００８３】
オンザフライトレースモードの場合、まず、デバッグＰＣ１９０は、デバッグ用外部バス１３２を介して、ユーザ所望のＤＣＵ、例えば、ＤＣＵ１１２ａに対しブレーク条件を設定する（Ｓ７０１）。そうすると、ＤＣＵ１１２ａのブレーク条件設定部２１１は、この要求にしたがってＣＰＵコア１１１ａにブレーク条件を設定する。
【００８４】
次いで、デバッグＰＣ１９０は、デバッグ用外部バス１３２を介して、ＤＣＵ１１２ａ，１１２ｂに対しトレースポイントの設定を要求する（Ｓ７０２）。そうすると、ＤＣＵ１１２ａ，１１２ｂのトレースポイント設定部２２１は、この要求にしたがってＣＰＵコア１１１ａ，１１１ｂにトレースポイントを設定する。
【００８５】
次いで、デバッグＰＣ１９０は、デバッグ用外部バス１３２を介して、システムデバッグ制御部１５０に対し、ブレーク発生時に同期して停止させたいブレーク用の同期情報を設定する（Ｓ７０３）。すなわち、システムデバッグ制御部１５０の同期情報格納部４１１に同期情報が格納される。例えば、周辺デバイス１１３ａ、ＤＣＵ１１２ｂ、周辺デバイス１１３ｂが同期するように設定する。
【００８６】
次いで、デバッグＰＣ１９０は、デバッグ用外部バス１３２を介して、全てのＤＣＵ、すなわち、ＤＣＵ１１２ａ〜１１２ｃに対しプログラムの実行開始を要求する（Ｓ７０４）。そうすると、ＤＣＵ１１２ａ〜１１２ｃのそれぞれは、ＣＰＵコア１１１ａ〜１１１ｃにプログラムの実行を開始させる。
【００８７】
次いで、ＤＣＵ１１２ａのブレーク検出部２１２は、プログラムの実行が設定したブレーク条件に一致したことを検出すると、ＣＰＵコア１１１ａにプログラムの実行を停止させ（トレース状態に切り替える）、さらに、デバッグ用同期バス１３１を介して、システムデバッグ制御部１５０へブレークの発生を通知する（Ｓ７０５）。
【００８８】
次いで、システムデバッグ制御部１５０は、設定されたブレーク用の同期情報に基づき、同期して停止するサブシステム、ここでは周辺デバイス１１３ａ、ＤＣＵ１１２ｂ、周辺デバイス１１３ｂへ、デバッグ用同期バス１３１を介して、実行停止を要求する（Ｓ７０６）。すなわち、システムデバッグ制御部１５０のブレーク選択部４１２は、ブレーク通知を受けると、同期情報格納部４１１の同期情報を参照し、停止させるＤＣＵ１１２と周辺デバイス１１３に対応するデバッグ用同期バス１３１の同期信号をハイレベルにする。そうすると、ＤＣＵ１１２ｂの停止／再開部２１３は、同期信号にしたがい、ＣＰＵコア１１１ｂにプログラムの実行を停止させる（トレース状態に切り替える）。周辺デバイス１１３ａ，１１３ｂの停止／再開部３１０も、同期信号にしたがい、その回路動作を停止させる（トレース状態に切り替える）。
【００８９】
次いで、ＤＣＵ１１２ａ，１１２ｂのトレースデータ採取部２２２は、設定されたトレースポイントのトレースデータを採取し、ＤＣＵ１１２ａ，１１２ｂのトレースデータ保持部２２３に保持した後、ＣＰＵコア１１１ａ，１１１ｂにプログラムの実行を再開させる（通常状態に切り替える）（Ｓ７０７）。このとき、周辺デバイス１１３ａ，１１３ｂも、回路動作を再開させる（通常状態に切り替える）。例えば、周辺デバイス１１３ａ，１１３ｂが再開するタイミングは、回路動作を停止してから、所定の時間経過後（所定のクロック後）などである。
【００９０】
次いで、システムデバッグ制御部１５０のトレースデータ収集部４２１は、デバッグ用内部バス１３３を介して、ＤＣＵ１１２ａ，１１２ｂに保持されているトレースデータを収集する（Ｓ７０８）。トレースデータ収集部４２１は、Ｓ７０５のブレーク通知を受けると、ＤＣＵ１１２に保持されているトレースデータが更新される前にトレースデータの収集を行い、収集したトレースデータをトレースデータ格納部４２２に格納する。トレースデータ収集部４２１がトレースデータを収集するタイミングは、各ＤＣＵ１１２でトレースデータの採取が完了した後から次のブレーク検出前までの間であり、例えば、ＤＣＵ１１２のブレーク通知を受けてから所定の時間経過後（所定のクロック後）でもよいし、ＣＰＵコア１１１の再開を検出したときでもよい。尚、ＣＰＵコア１１１の再開は、ブレーク通知と同様に、デバッグ用同期バス１３１の同期信号によって検出できる。
【００９１】
その後、ＤＣＵ１１２ａによるブレーク検出ごとに、ブレーク通知〜トレースデータ格納を繰り返す（Ｓ７０５'〜Ｓ７０８'）。
【００９２】
そして、デバッグＰＣ１９０は、デバッグ用外部バス１３２を介して、システムデバッグ制御部１５０のトレースデータ格納部４２２に格納されている複数のトレースデータを一括で取得する（Ｓ７０９）。このとき、例えば、デバッグＰＣ１９０は、全てのＤＣＵ、ＤＣＵ１１２ａ〜１１２ｃに対しプログラムの実行を停止させた後に、トレースの取得を行う。システムデバッグ制御部１５０のトレースデータ出力部４２３は、デバッグＰＣ１９０からのトレースデータの取得要求にしたがい、トレースデータ格納部４２２から複数のトレースデータを一度に出力する。
【００９３】
図９は、オンザフライトレースモードにおけるデバッグシステムの動作を示すタイミングチャートである。図に示すように、例えば、ＣＰＵコア１１１ａでブレークが発生すると、ＣＰＵコア１１１ａが通常状態からトレース状態に切り替わるとともに、周辺デバイス１１３ａ、ＣＰＵコア１１１ｂ、周辺デバイス１１３ｂも、ほぼ同じタイミングで通常状態からトレース状態に切り替わる。そして、ＣＰＵコア１１１ａ、周辺デバイス１１３ａ、ＣＰＵコア１１１ｂ、周辺デバイス１１３ｂは、ＣＰＵコア１１１ａとＣＰＵコア１１１ｂのトレースデータが採取されるとすぐに、ほぼ同じタイミングで通常状態へ切り替わる。さらに、システムデバッグ制御部１５０は、ＣＰＵコア１１１がトレース状態に切り替わった後、上記のような所定のタイミングで、各ＤＣＵ１１２からトレースデータを収集する。複数のトレースデータを収集した後、システムデバッグ制御部１５０は、収集した複数のトレースデータを出力する。
【００９４】
以上のように、本実施形態では、デバッグ用同期バスにＤＣＵの他、周辺デバイスも接続したことで、ブレーク発生時にＣＰＵコアに加えて周辺デバイスも同期させて停止できるようになる。このため、ブレーク発生時の内部情報の変化を防止することができ、ブレーク発生時の内部情報を正確に取得することができる。
【００９５】
また、システムデバッグ制御部を設け、ブレーク発生時や再開時に同期させるＣＰＵコアや周辺デバイスを選択させることにより、全てのＣＰＵコアを停止／再開させるのではなく、デバッグに必要なＣＰＵコアや周辺デバイスのみを停止／再開させることができる。このため、ブレーク発生時、マルチプロセッサ構成に合わせた正確な内部情報を取得することができる。
【００９６】
さらに、システムデバッグ制御部と各ＤＣＵを高速な内部バスで接続し、トレースデータを随時収集し格納しておき、低速な外部バスにより複数のトレースデータを一括で出力することにより、ＤＣＵに保持されたトレースデータが更新されても、すぐにはトレースデータが消えることがないため、観測したいトレースデータを確実に収集することができる。
【００９７】
この結果、本実施形態では、ユーザが観測したいＣＰＵコアの内部情報やトレースデータを精度よく取得できるため、正確なデバッグを行うことができ、デバッグ効率を向上することができる。
【００９８】
その他の発明の実施の形態．
上述の例では、デバッグするマルチプロセッサ構成のＬＳＩにおいて、プロセッサ間の関係は特に限定されない。例えば、複数のプロセッサが同等の関係で動作する並列型のマルチプロセッサでもよいし、複数のプロセッサが主従関係をもって動作するマスタスレーブ型のマルチプロセッサでもよい。図１０は、マスタスレーブ型のマルチプロセッサに本発明を適用した例である。
【００９９】
図１０は、図１の構成に加えて、ＬＳＩ１００にメインＣＰＵ１６０を有している。すなわち、メインＣＰＵ１６０がマスタとなるプロセッサであり、ＣＰＵコア１１１ａ〜１１１ｃがスレーブとなるプロセッサである。メインＣＰＵ１６０の構成は、図２と同様であり、メインＣＰＵ１６０をデバッグ用同期バス１３１、デバッグ用外部バス１３２、デバッグ用内部バス１３３に接続する。これにより、メインＣＰＵについても、システムデバッグ制御部１５０によって、ブレーク発生時や再開時の同期を制御でき、トレースデータの確実な収集も可能になる。
【０１００】
また、図１１に示すように、ＬＳＩ１００にデバッグ用同期バスをＬＳＩの外部と接続するデバッグ用外部同期Ｉ／Ｆ１４１を設けてもよい。デバッグ用外部同期Ｉ／Ｆ１４１を介して他のＬＳＩ１００ａのデバッグ用同期バス１３１ａに接続する。接続するＬＳＩ１００ａは、図１の本発明のＬＳＩ１００でもよいし、図１３の従来のＬＳＩ９００でもよい。これにより、他のＬＳＩ１００ａに設けられたサブシステム１１０ｘや１１０ｙについても、ブレーク発生時やリスタート時の同期を制御することができる。
【０１０１】
また、システムデバッグ制御部１５０は、デバッグモードとしてブレークモードやオンザフライトレースモードに加えて、さらに、その他のデバッグモードを有していてもよい。例えば、ＣＰＵコア等がシステムバスにより入出力する信号レベルを解析する信号解析モードを有してもよい。信号解析モードの場合、システムデバッグ制御部１５０は、メモリ１２０とＣＰＵコア１１１を接続するシステムバスの信号をサンプリングし、このサンプリングデータをリアルタイムで格納する。そして、デバッグＰＣでは、このサンプリングデータに基づき、信号の波形を表示する。これにより、ブレーク発生時などに、ＣＰＵコアの内部状態とともにバスの信号波形を確認することができるため、問題の解析を正確に行うことができ、デバッグ効率をさらに向上させることができる。
【０１０２】
また、上述の例では、マルチプロセッサ構成のＬＳＩについてのみデバッグを行ったが、シングルプロセッサ構成のＬＳＩとしてもよい。例えば、図１の構成で、サブシステム１１０ａ〜１１０ｃのうちの一つのみとしてもよい。サブシステムを一つとした場合でも、ブレーク発生時に周辺デバイスを同期して停止することができ、システムデバッグ制御部１５０で複数のトレースデータを格納することができる。
【０１０３】
このほか、本発明の要旨を逸脱しない範囲で種々の変形、実施が可能である。
【図面の簡単な説明】
【０１０４】
【図１】本発明にかかるデバッグシステムの構成図である。
【図２】本発明にかかるサブシステムの構成を示すブロック図である。
【図３】本発明にかかる周辺デバイスの構成例を示す回路図である。
【図４】本発明にかかるシステムデバッグ制御部の構成を示すブロック図である。
【図５】本発明にかかるシステムデバッグ制御部の構成例を示す回路図である。
【図６】本発明にかかるデバッグシステムの動作を示すシーケンスである。
【図７】本発明にかかるデバッグシステムの動作を示すタイミングチャートである。
【図８】本発明にかかるデバッグシステムの動作を示すシーケンスである。
【図９】本発明にかかるデバッグシステムの動作を示すタイミングチャートである。
【図１０】本発明にかかるデバッグシステムの構成図である。
【図１１】本発明にかかるデバッグシステムの構成図である。
【図１２】一般的なマルチプロセッサ構成のＬＳＩの構成図である。
【図１３】従来のデバッグシステムの構成図である。
【図１４】従来のデバッグシステムの動作を示すシーケンスである。
【図１５】従来のデバッグシステムの動作を示すシーケンスである。
【符号の説明】
【０１０５】
１００  ＬＳＩ
１１０  サブシステム
１１１  ＣＰＵコア
１１２  ＤＣＵ
１１３  周辺デバイス
１２０  メモリ
１３１  デバッグ用同期バス
１３２  デバッグ用外部バス
１３３  デバッグ用内部バス
１４０  デバッグＩ／Ｆ
１５０  システムデバッグ制御部
１９０  デバッグＰＣ
１９１  デバッガ
２１０  ＣＰＵブレーク制御部
２１１  ブレーク条件設定部
２１２  ブレーク検出部
２１３  停止／再開部
２２０  ＣＰＵトレース制御部
２２１  トレースポイント設定部
２２２  トレースデータ採取部
２２３  トレースデータ保持部
３１０  停止／再開部
３２０  内部回路
４１０  システムブレーク制御部
４１１  同期情報格納部
４１２  ブレーク選択部
４１３  再開選択部
４２１  トレースデータ収集部
４２２  トレースデータ格納部
４２３  トレースデータ出力部
【図１】
0004847734.tif 000002
【図２】
0004847734.tif 000003
【図３】
0004847734.tif 000004
【図４】
0004847734.tif 000005
【図５】
0004847734.tif 000006
【図６】
0004847734.tif 000007
【図７】
0004847734.tif 000008
【図８】
0004847734.tif 000009
【図９】
0004847734.tif 000010
【図１０】
0004847734.tif 000011
【図１１】
0004847734.tif 000012
【図１２】
0004847734.tif 000013
【図１３】
0004847734.tif 000014
【図１４】
0004847734.tif 000015
【図１５】
0004847734.tif 000016