(57)【要約】【課題】デバッグシステム及び半導体装置の回路構成を簡略化すること。【解決手段】ブレーク回路は、対象プログラムの実行中のプログラムカウンタ値が実行開始アドレス以下、又は、実行開始アドレスより大きく、かつ、複数のブレークポイントに対応する複数のアドレスのうち最も小さいアドレス以上の場合に、対象プログラムの実行を中断し、デバッグ制御部は、対象プログラムの実行中断時に、プログラムカウンタ値が複数のブレークポイントのいずれとも一致しない場合に、当該プログラムカウンタ値を実行開始アドレスとして第１のレジスタに設定し、当該プログラムカウンタ値より大きく、かつ、複数のブレークポイントのうち最も小さいアドレスを第２のレジスタに設定し、当該対象プログラムの実行を実行開始アドレスから再開する。【選択図】図２
2018128767.tif 000002
【特許請求の範囲】
【請求項１】
対象プログラム内の複数のブレークポイントを記憶する記憶部と、
前記対象プログラムのデバッグを制御するデバッグ制御部と、
前記対象プログラムの実行開始アドレスを保持する第１のレジスタと、前記実行開始アドレスより大きく、かつ、前記複数のブレークポイントに対応する複数のアドレスのうち最も小さいアドレスを保持する第２のレジスタと、を有するブレーク回路と、
を備え、
前記ブレーク回路は、
前記対象プログラムの実行中のプログラムカウンタ値が前記実行開始アドレス以下、又は、前記最も小さいアドレス以上の場合に、前記対象プログラムの実行を中断し、
前記デバッグ制御部は、
前記対象プログラムの実行中断時に、
前記プログラムカウンタ値が前記複数のブレークポイントのいずれとも一致しない場合に、当該プログラムカウンタ値を前記実行開始アドレスとして前記第１のレジスタに設定し、当該プログラムカウンタ値より大きく、かつ、前記複数のブレークポイントのうち最も小さいアドレスを前記最も小さいアドレスとして前記第２のレジスタに設定し、当該対象プログラムの実行を前記実行開始アドレスから再開する
デバッグシステム。
【請求項２】
前記ブレーク回路は、
前記第１のレジスタに設定された前記実行開始アドレスと、前記プログラムカウンタ値とを比較し、第１の比較結果を出力する第１の比較器と、
前記第１の比較結果において前記プログラムカウンタ値が前記実行開始アドレス以下である条件が複数回成立した場合に、条件成立信号を出力するカウンタ回路と、
前記第２のレジスタに設定された前記最も小さいアドレスと、前記プログラムカウンタ値とを比較し、第２の比較結果を出力する第２の比較器と、
前記条件成立信号又は前記第２の比較結果に基づき前記対象プログラムの実行を中断させる中断信号を出力するＯＲ回路と、
をさらに有する
請求項１に記載のデバッグシステム。
【請求項３】
前記カウンタ回路は、前記第１の比較結果において前記プログラムカウンタ値が前記実行開始アドレス以下である場合にカウンタを１ビット分加算し、当該カウンタがオーバーフローするごとに、前記条件成立信号を１として出力する１ビットカウンタである、
請求項２に記載のデバッグシステム。
【請求項４】
前記ブレーク回路は、
前記第１のレジスタの有効無効を示す第１のフラグと、
前記第２のレジスタの有効無効を示す第２のフラグと、
をさらに有し、
前記デバッグ制御部は、
前記複数のブレークポイントの中に、前記プログラムカウンタ値以下のアドレスが含まれる場合に、前記第１のフラグを有効に設定し、
前記複数のブレークポイントの中に、前記プログラムカウンタ値より大きいアドレスが含まれる場合に、前記第２のフラグを有効に設定し、
前記ブレーク回路は、
前記第１のフラグが有効な場合に、前記第１の比較結果を有効とし、
前記第２のフラグが有効な場合に、前記第２の比較結果を有効とする、
請求項２に記載のデバッグシステム。
【請求項５】
前記カウンタ回路は、前記第１のフラグが有効な場合に、前記条件成立信号を出力する
請求項４に記載のデバッグシステム。
【請求項６】
前記記憶部は、前記複数のブレークポイントのそれぞれに対応させて、前記プログラムカウンタ値が一致した回数である一致回数と、当該一致回数の上限回数とをさらに記憶し、
前記デバッグ制御部は、前記プログラムカウンタ値が前記複数のブレークポイントのいずれかと一致した場合に、当該一致したブレークポイントに対応する前記一致回数を加算し、当該加算後の一致回数が対応する前記上限回数に達した場合に、前記対象プログラムの実行の中断を維持する
請求項１に記載のデバッグシステム。
【請求項７】
前記第１及び第２のレジスタのビット数は、前記プログラムカウンタ値のビット数より大きく、
前記第１の比較器は、前記第１のレジスタに設定された前記実行開始アドレスと、前記プログラムカウンタ値とを符号付きで比較し、
前記第２の比較器は、前記第２のレジスタに設定された前記最も小さいアドレスと、前記プログラムカウンタ値とを符号無しで比較する
請求項２に記載のデバッグシステム。
【請求項８】
複数のブレークポイントが設定された対象プログラムの実行開始アドレスを保持する第１のレジスタと、
前記実行開始アドレスより大きく、かつ、前記複数のブレークポイントのうち最も小さいアドレスを保持する第２のレジスタと、
前記第１のレジスタに設定された前記実行開始アドレスと、プログラムカウンタ値とを比較し、第１の比較結果を出力する第１の比較器と、
前記第１の比較結果において前記プログラムカウンタ値が前記実行開始アドレス以下である条件が複数回成立した場合に、条件成立信号を出力するカウンタ回路と、
前記第２のレジスタに設定された前記最も小さいアドレスと、前記プログラムカウンタ値とを比較し、第２の比較結果を出力する第２の比較器と、
前記条件成立信号又は前記第２の比較結果に基づき前記対象プログラムの実行を中断させる中断信号を出力するＯＲ回路と、
を有する半導体装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデバッグシステム及び半導体装置に関し、例えば、複数のブレークポイントを設定したデバッグシステム及び半導体装置に関する。
【背景技術】
【０００２】
特許文献１には、ブレークポイント設定方式に関する技術が開示されている。特許文献１にかかる技術は、プログラムの実行アドレスがブレークポイントに到達した場合に、当該プログラムの実行を停止する。また、当該プログラムの分岐命令が発生した場合に、当該プログラムの実行を中断し、プログラムの実行再開アドレス以上、かつ、当該実行再開アドレスに最も近いブレークポイントの範囲の外に分岐先がある場合に、分岐トレース機構により当該プログラムの実行を再開する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平６−１０３１１０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献１にかかる技術では、ブレークポイントに到達してプログラムの実行を停止した場合と、分岐命令が発生してプログラムの実行を中断した場合とで、処理が異なる。そのため、処理構造が複雑になるという問題があった。
【０００５】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００６】
一実施の形態によれば、デバッグシステムは、対象プログラムの実行中のプログラムカウンタ値が実行開始アドレス以下、又は、実行開始アドレスより大きく、かつ、前記複数のブレークポイントに対応する複数のアドレスのうち最も小さいアドレス以上の場合に、対象プログラムの実行を中断し、デバッグ制御部が、前記対象プログラムの実行中断時に、前記プログラムカウンタ値が前記複数のブレークポイントのいずれとも一致しない場合に、当該プログラムカウンタ値を前記実行開始アドレスとして前記第１のレジスタに設定し、当該プログラムカウンタ値より大きく、かつ、前記複数のブレークポイントのうち最も小さいアドレスを前記最も小さいアドレスとして前記第２のレジスタに設定し、当該対象プログラムの実行を前記実行開始アドレスから再開するものである。
【発明の効果】
【０００７】
前記一実施の形態によれば、デバッグシステム及び半導体装置の回路構成を簡略化できる。
【図面の簡単な説明】
【０００８】
【図１】本実施の形態１にかかるデバッグシステムの全体構成を示すブロック図である。
【図２】本実施の形態１にかかるＨＷブレーク回路の構成を示すブロック図である。
【図３】本実施の形態１にかかる１ビットカウンタの構成を示すブロック図である。
【図４】本実施の形態１にかかるＨＷブレークポイント設定テーブルの構成例を示す図である。
【図５】本実施の形態１にかかるデバッグ支援処理の流れを示すフローチャートである。
【図６】本実施の形態１にかかるレジスタ等設定処理の流れを示すフローチャートである。
【図７】本実施の形態１にかかる実行例（１）における対象プログラムのアドレス設定例を示す図である。
【図８】本実施の形態１にかかる実行例（２）における対象プログラムのアドレス設定例を示す図である。
【図９】本実施の形態１にかかる実行例（３）における対象プログラムのアドレス設定例を示す図である。
【図１０】本実施の形態１にかかる実行例（４）における対象プログラムのアドレス設定例を示す図である。
【図１１】本実施の形態２にかかるＨＷブレーク回路の構成を示すブロック図である。
【図１２】本実施の形態３にかかるＨＷブレークポイント設定テーブルの構成例を示す図である。
【図１３】本実施の形態３にかかるデバッグ支援処理の流れを示すフローチャートである。
【図１４】本実施の形態４にかかるＨＷブレーク回路の構成を示すブロック図である。
【図１５】本実施の形態４にかかるレジスタ等設定処理の流れを示すフローチャートである。
【図１６】本実施の形態５にかかるデバッグシステムの全体構成を示すブロック図である。
【発明を実施するための形態】
【０００９】
以下では、上述した課題を解決するための手段を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略する。
【００１０】
以下の実施の形態においては便宜上その必要があるときは、複数のセクションまたは実施の形態に分割して説明するが、特に明示した場合を除き、それらはお互いに無関係なものではなく、一方は他方の一部または全部の変形例、応用例、詳細説明、補足説明等の関係にある。また、以下の実施の形態において、要素の数等（個数、数値、量、範囲等を含む）に言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではなく、特定の数以上でも以下でもよい。
【００１１】
さらに、以下の実施の形態において、その構成要素（動作ステップ等も含む）は、特に明示した場合および原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではない。同様に、以下の実施の形態において、構成要素等の形状、位置関係等に言及するときは、特に明示した場合および原理的に明らかにそうでないと考えられる場合等を除き、実質的にその形状等に近似または類似するもの等を含むものとする。このことは、上記数等（個数、数値、量、範囲等を含む）についても同様である。
【００１２】
ここで、以下の実施の形態を想到するに至った経緯を説明する。まず、プログラムをデバッグする際、特定のアドレスで実行を停止させ、そのときの変数やレジスタの値を確認する各種デバッグ処理が頻繁に行われる。特定のアドレスで実行を停止するためには、実行前ＰＣブレーク機能が使われる。
【００１３】
実行前ＰＣブレーク機能には、ＭＣＵ（Micro Control Unit）内蔵のデバッグ回路（ＯＣＤ（On Chip Debug）回路）を使うＨＷ（HardWare）ブレーク機能と、ブレークポイント位置の命令をＢＲＫ命令に書き換えるＳＷ（SoftWare）ブレーク機能の２種類がある。それぞれのブレーク機能には以下の特徴がある。
【００１４】
ＨＷブレーク機能は、命令書き換えが発生しないため設定に時間がかからず、命令書き換えがないためフラッシュメモリの寿命に影響がない。その反面、設定可能なブレークポイント数は、ＭＣＵに内蔵されているＯＣＤ回路の規模に依存するため設定可能なブレークポイント数が少ない。
【００１５】
ＳＷブレーク機能は、設定可能なブレークポイント数がＭＣＵのＯＣＤ回路に依存しないため、設定可能数が多い。その反面、命令書き換えを行うために設定に時間がかかり、フラッシュメモリの寿命に影響がある。
【００１６】
そこで、命令書き換えを行わずに多数の実行前ＰＣブレークを設定できる仕組みとして例えば、上述した特許文献１が挙げられる。しかしながら、特許文献１では、ブレークポイント検出機構とは別に、独立した分岐トレース機構が必要となる。そのため、処理構造が複雑となり得る。そこで、以下の実施の形態では、分岐トレース機構を削減し、ブレークポイントでのプログラム停止と分岐によるプログラム停止とを統一したハードウェア処理により実現するものである。そして、デバッグ支援プログラムの規模も縮小できるため、信頼性を高めることができる。
【００１７】
＜実施の形態１＞
図１は、本実施の形態１にかかるデバッグシステム１００の全体構成を示すブロック図である。デバッグシステム１００は、ＭＣＵ１０１と、デバッグ支援装置１１１と、コンピュータ端末１２０とを備える。
【００１８】
ＭＣＵ１０１は、ＣＰＵ（Central Processing Unit）１０２と、ＲＡＭ（Random Access Memory）１０３と、ＲＯＭ（Read Only Memory）１０４と、Ｉ／Ｏ（Input/Output）１０６と、デバッグ回路１０７と、通信Ｉ／Ｆ(Inter/Face)１１０とを備え、バス１０９を介して接続されている。ＲＯＭ１０４は、モニタプログラム１０５と、対象プログラム１２１とを記憶する。モニタプログラム１０５は、デバッグ支援装置１１１からの指示に応じてデバッグ回路１０７への各種設定処理等を行う処理が実装されたコンピュータプログラムである。対象プログラム１２１は、デバッグ対象となるユーザプログラムである。ＣＰＵ１０２は、ＲＡＭ１０３及びＲＯＭ１０４に格納されたプログラム等を読み込み、実行を行う。
【００１９】
デバッグ回路１０７は、ＨＷブレーク回路１０８を備える。ＨＷブレーク回路１０８は、対象プログラム１２１を実行する際のＣＰＵ１０２におけるプログラムカウンタ値が指定範囲外を示す場合に、対象プログラム１２１の動作を中断させるための回路である。尚、ＨＷブレーク回路１０８の具体的な構成は後述する。通信Ｉ／Ｆ１１０は、バス１０９を介してＭＣＵ１０１内部の各構成と通信し、通信Ｉ／Ｆ１１２を介してデバッグ支援装置１１１と通信を行うインタフェースである。
【００２０】
図２は、本実施の形態１にかかるＨＷブレーク回路１０８の構成を示すブロック図である。ＨＷブレーク回路１０８は、有効／無効フラグ３０２及び３０５と、実行開始アドレス格納レジスタ３０３と、ブレークポイント格納レジスタ３０４と、比較器Ａ３０６と、比較器Ｂ３０７と、１ビットカウンタ３０８と、ＡＮＤ回路３０９及び３１０と、ＯＲ回路３１１とを備える。実行開始アドレス格納レジスタ３０３は、対象プログラム１２１の実行開始時又は実行再開時のプログラムカウンタ値（実行開始アドレスＲＡ）を保持する第１のレジスタである。ブレークポイント格納レジスタ３０４は、実行開始アドレスより大きく、かつ、対象プログラム１２１に設定されたブレークポイントのうち最も小さい直近アドレスを保持する第２のレジスタである。言い換えれば、前記直近アドレスは、実行開始アドレスより大きく、かつ、前記実行開始アドレスに最も近いアドレスである。
【００２１】
比較器Ａ３０６は、実行開始アドレス格納レジスタ３０３に設定（保持）された実行開始アドレスＲＡと、プログラムカウンタ値ＰＣとを比較し、第１の比較結果を出力する第１の比較器である。具体的には、比較器Ａ３０６は、プログラムカウンタ値ＰＣが実行開始アドレスＲＡ以下になった場合に１を第１の比較結果として出力し、プログラムカウンタ値ＰＣが実行開始アドレスＲＡより大きい場合に０を第１の比較結果として出力する。
【００２２】
１ビットカウンタ３０８は、第１の比較結果においてプログラムカウンタ値ＰＣが実行開始アドレスＲＡ以下である場合に内部のカウンタ値に１ビット分をカウントし、カウンタ値が１ビットをオーバーフローした場合にオーバーフロー信号を出力する。言い換えると、１ビットカウンタ３０８は、カウンタ回路の一例であり、第１の比較結果においてプログラムカウンタ値ＰＣが実行開始アドレスＲＡ以下である条件が２回成立した場合に、条件成立信号を出力するものといえる。具体的には、１ビットカウンタ３０８は、比較器Ａ３０６の出力が１の場合に、カウンタ値を１加算する。そして、１ビットカウンタ３０８は、カウンタ値が１を超えるときに１を出力し、それ以外の場合は０を出力する。尚、１ビットカウンタ３０８の詳細な構成は後述する。
【００２３】
有効／無効フラグ３０２は、実行開始アドレス格納レジスタ３０３の有効又は無効を示すフラグである。具体的には、実行開始アドレス格納レジスタ３０３が有効な場合、フラグは１が設定され、実行開始アドレス格納レジスタ３０３が無効な場合、フラグは０が設定される。
【００２４】
ＡＮＤ回路３０９は、実行開始アドレス格納レジスタ３０３の有効／無効フラグ３０２の値と、１ビットカウンタ３０８の出力値の論理積をとった値を出力する。
【００２５】
比較器Ｂ３０７は、ブレークポイント格納レジスタ３０４に設定（保持）されたブレークポイントＢＰと、プログラムカウンタ値ＰＣとを比較し、第２の比較結果を出力する第２の比較器である。具体的には、比較器Ｂ３０７は、プログラムカウンタ値ＰＣがブレークポイントＢＰ以上になった場合に１を第２の比較結果として出力し、プログラムカウンタ値ＰＣがブレークポイントＢＰより小さい場合に０を第２の比較結果として出力する。
【００２６】
有効／無効フラグ３０５は、ブレークポイント格納レジスタ３０４の有効又は無効を示すフラグである。具体的には、ブレークポイント格納レジスタ３０４が有効な場合、フラグは１が設定され、ブレークポイント格納レジスタ３０４が無効な場合、フラグは０が設定される。
【００２７】
ＡＮＤ回路３１０は、ブレークポイント格納レジスタ３０４の有効／無効フラグ３０５の値と、比較器Ｂ３０７の出力値の論理積をとった値を出力する。
【００２８】
ＯＲ回路３１１は、ＡＮＤ回路３０９とＡＮＤ回路３１０の論理和をとった値を出力する。ＨＷブレーク回路１０８は、ＯＲ回路３１１の出力が１の場合に、対象プログラム１２１の実行を中断する。
【００２９】
図３は、本実施の形態１にかかる１ビットカウンタ３０８の構成を示すブロック図である。１ビットカウンタ３０８は、ＮＯＴ回路１２２と、ＸＯＲ回路１２３と、ＪＫフリップフロップ１２４と、ＡＮＤ回路１２５とを備える。
【００３０】
１ビットカウンタ３０８は、比較器Ａ３０６からの信号を入力し、ＡＮＤ回路３０９へ信号を出力する。１ビットカウンタ３０８には、対象プログラム１２１の実行開始又は実行再開の直前にＲｅｓｅｔ信号が入力される。Ｒｅｓｅｔ信号が入力されると、ＪＫフリップフロップ１２４は初期化され、ＡＮＤ回路１２５に１を出力する。ここで、対象プログラム１２１の実行開始又は実行再開の直前は、比較器Ａ３０６の出力が０であるため、ＡＮＤ回路１２５の出力は０となる。
【００３１】
ＪＫフリップフロップ１２４のＪ端子とＫ端子は、ＸＯＲ回路１２３に接続されている。ＸＯＲ回路１２３は、ＮＯＴ回路１２２により常に両端子が異なる値となるため、常に出力が１となる。ＪＫフリップフロップ１２４のＪ端子及びＫ端子の両方を常に１にしておくことによって、比較器Ａ３０６の条件が成立する度にＪＫフリップフロップ１２４の値が反転する。比較器Ａ３０６の条件成立１回目では、ＪＫフリップフロップ１２４からＡＮＤ回路１２５への出力が０となり、１ビットカウンタ３０８の出力は０となる。比較器Ａ３０６の条件成立２回目では、ＪＫフリップフロップ１２４からＡＮＤ回路１２５への出力が１となる。ＡＮＤ回路１２５は、比較器Ａ３０６及びＪＫフリップフロップ１２４からの入力が共に１となるため、１ビットカウンタ３０８の値が１となる。よって、比較器Ａ３０６の条件成立２回目のときにのみ１ビットカウンタ３０８の出力が１となる。
【００３２】
図1に戻り説明を続ける。デバッグ支援装置１１１は、通信Ｉ／Ｆ１１２と、ＣＰＵ１１４と、ＲＯＭ１１５と、ＲＡＭ１１７と、通信Ｉ／Ｆ１１９とを備え、バス１１３を介して接続されている。ＲＯＭ１１５は、デバッグ支援プログラム１１６を記憶する。デバッグ支援プログラム１１６は、本実施の形態にかかるデバッグ支援処理が実装されたコンピュータプログラムである。デバッグ支援プログラム１１６は、デバッグのための各種ルーチンの集合体である。
【００３３】
デバッグ支援プログラム１１６は、ＨＷブレーク回路１０８の各フラグ（有効／無効フラグ３０２及び３０５)や各レジスタ（実行開始アドレス格納レジスタ３０３及びブレークポイント格納レジスタ３０４）や１ビットカウンタ３０８に設定する値を決めるルーチン（レジスタ等設定処理）とＨＷブレーク回路１０８により対象プログラム１２１の実行が中断したときに、対象プログラム１２１の実行再開か中断の維持かを判定する処理等が含まれる。デバッグ支援プログラム１１６は、通信Ｉ／Ｆ１１２を通じてＭＣＵ１０１に各種コマンドを送信する。
【００３４】
ここで、モニタプログラム１０５は、デバッグ支援プログラム１１６から送信されてきたコマンドを解析し、ＨＷブレーク回路１０８の各フラグや各レジスタや１ビットカウンタ３０８に値を設定するルーチンが含まれる。
【００３５】
ＲＡＭ１１７は、ＨＷブレークポイント設定テーブル１１８を記憶する。ＨＷブレークポイント設定テーブル１１８は、ユーザが設定した実行前ＰＣブレークポイントを保存する情報である。尚、ＨＷブレークポイント設定テーブル１１８には、ブレークポイントがアドレスの小さい順に並んでいるものとする。図４は、本実施の形態１にかかるＨＷブレークポイント設定テーブル１１８の構成例を示す図である。ここでは、例えば、大小関係がＢＰ１＜ＢＰ２＜ＢＰ３であるものとする。
【００３６】
ＣＰＵ１１４は、ＲＡＭ１１７及びＲＯＭ１１５に格納されたプログラム等を読み込み、実行を行う。特に、ＣＰＵ１１４がＲＯＭ１１５に格納されたデバッグ支援プログラム１１６を読み込み、実行を行うことにより、デバッグ制御部として機能するものといえる。通信Ｉ／Ｆ１１２は、バス１１３を介してデバッグ支援装置１１１内部の各構成と通信し、通信Ｉ／Ｆ１１０を介してＭＣＵ１０１と通信を行うインタフェースである。また、通信Ｉ／Ｆ１１９は、バス１１３を介してデバッグ支援装置１１１内部の各構成と通信し、コンピュータ端末１２０と通信を行うインタフェースである。
【００３７】
コンピュータ端末１２０は、ユーザが対象プログラム１２１のデバッグを行うために操作する情報処理装置である。コンピュータ端末１２０は、デバッグ支援装置１１１を介してＭＣＵ１０１内の対象プログラム１２１のデバッグを行い、結果を表示する。
【００３８】
ここで、本実施の形態１にかかるデバッグシステムは次のように表現することもできる。すなわち、デバッグシステムは、対象プログラム内の複数のブレークポイントを記憶する記憶部と、前記対象プログラムのデバッグを制御するデバッグ制御部と、前記対象プログラムの実行開始アドレスを保持する第１のレジスタと、前記実行開始アドレスより大きく、かつ、前記複数のブレークポイントに対応する複数のアドレスのうち最も小さいアドレスを保持する第２のレジスタと、を有するブレーク回路と、を備える。そして、前記ブレーク回路は、前記対象プログラムの実行中のプログラムカウンタ値が前記実行開始アドレス以下、又は、前記最も小さいアドレス以上の場合に、前記対象プログラムの実行を中断する。また、前記デバッグ制御部は、前記対象プログラムの実行中断時に、前記プログラムカウンタ値が前記複数のブレークポイントのいずれとも一致しない場合に、当該プログラムカウンタ値を前記実行開始アドレスとして前記第１のレジスタに設定し、当該プログラムカウンタ値より大きく、かつ、前記複数のブレークポイントのうち最も小さいアドレスを前記最も小さいアドレスとして前記第２のレジスタに設定し、当該対象プログラムの実行を前記実行開始アドレスから再開する。これにより、特許文献１における分岐トレース機構を省略することができ、回路構成を簡略化できる。
【００３９】
また、前記ブレーク回路は、前記第１のレジスタに設定された前記実行開始アドレスと、前記プログラムカウンタ値とを比較し、第１の比較結果を出力する第１の比較器と、前記第１の比較結果において前記プログラムカウンタ値が前記実行開始アドレス以下である条件が複数回成立した場合に、条件成立信号を出力するカウンタ回路と、前記第２のレジスタに設定された前記最も小さいアドレスと、前記プログラムカウンタ値とを比較し、第２の比較結果を出力する第２の比較器と、前記条件成立信号又は前記第２の比較結果に基づき前記対象プログラムの実行を中断させる中断信号を出力するＯＲ回路と、をさらに有することが望ましい。これにより、第１の比較器における１回目の条件成立の場合には、対象プログラムの実行が中断されず、２回目の条件成立時において中断させることができる。そのため、特許文献１では、ブレークポイント検出機構と分岐トレース機構とが分かれていたものを、本実施の形態では、統一することができ、回路構成を簡略化できる。その上、デバッグ支援プログラムにおいて、ブレークポイントか分岐命令かの判定処理が不要となり、プログラム規模を縮小でき、信頼性を高めることができる。
【００４０】
さらに、前記カウンタ回路は、前記第１の比較結果において前記プログラムカウンタ値が前記実行開始アドレス以下である場合にカウンタを１ビット分加算し、当該カウンタがオーバーフローするごとに、前記条件成立信号を１として出力する１ビットカウンタであるとよい。
【００４１】
さらに、前記ブレーク回路は、前記第１のレジスタの有効無効を示す第１のフラグと、前記第２のレジスタの有効無効を示す第２のフラグと、をさらに有する。そして、前記デバッグ制御部は、前記複数のブレークポイントの中に、前記プログラムカウンタ値以下のアドレスが含まれる場合に、前記第１のフラグを有効に設定し、前記複数のブレークポイントの中に、前記プログラムカウンタ値より大きいアドレスが含まれる場合に、前記第２のフラグを有効に設定し、前記ブレーク回路は、前記第１のフラグが有効な場合に、前記第１の比較結果を有効とし、前記第２のフラグが有効な場合に、前記第２の比較結果を有効とすると良い。これにより、ブレークポイントが設定されていない範囲について不要なＯＲ演算を行うことを抑制できる。
【００４２】
または、本実施の形態１にかかる半導体装置は次のように表現することもできる。すなわち、半導体装置は、複数のブレークポイントが設定された対象プログラムの実行開始アドレスを保持する第１のレジスタと、前記実行開始アドレスより大きく、かつ、前記複数のブレークポイントのうち最も小さいアドレスを保持する第２のレジスタと、前記第１のレジスタに設定された前記実行開始アドレスと、プログラムカウンタ値とを比較し、第１の比較結果を出力する第１の比較器と、前記第１の比較結果において前記プログラムカウンタ値が前記実行開始アドレス以下である条件が複数回成立した場合に、条件成立信号を出力するカウンタ回路と、前記第２のレジスタに設定された前記最も小さいアドレスと、前記プログラムカウンタ値とを比較し、第２の比較結果を出力する第２の比較器と、前記条件成立信号又は前記第２の比較結果に基づき前記対象プログラムの実行を中断させる中断信号を出力するＯＲ回路と、を有する。これにより、特許文献１における分岐トレース機構を省略することができる。また、ブレークポイント検出機構と分岐トレース機構との処理を統一することができる。
【００４３】
図５は、本実施の形態１にかかるデバッグ支援処理の流れを示すフローチャートである。コンピュータ端末１２０は、ユーザの操作に応じてデバッグ支援処理を開始する。そして、デバッグ支援装置１１１のＣＰＵ１１４は、ＲＯＭ１１５のデバッグ支援プログラム１１６を読み込み実行して、以下の処理を進める。
【００４４】
まず、デバッグ支援装置１１１は、レジスタ等設定処理を行う（Ｓ２０）。ここで、図６は、本実施の形態１にかかるレジスタ等設定処理の流れを示すフローチャートである。デバッグ支援装置１１１は、ＨＷブレーク回路１０８の実行開始アドレス格納レジスタ３０３に実行開始時のアドレスを設定し、１ビットカウンタ３０８に０を設定する（Ｓ１１）。具体的には、ＣＰＵ１１４は、通信Ｉ／Ｆ１１２及び通信Ｉ／Ｆ１１０を介して、ＭＣＵ１０１へコマンドを送信し、モニタプログラム１０５を読み込んで実行しているＣＰＵ１０２が、ＨＷブレーク回路１０８に対して上述した設定を行う。以降も同様である。
【００４５】
次に、デバッグ支援装置１１１は、実行開始アドレスＲＡ以下にブレークポイントが設定されているか否かを判定する（Ｓ１２）。すなわち、デバッグ支援装置１１１は、実行開始アドレスＲＡ以下のアドレスがＨＷブレークポイント設定テーブル１１８に設定されているか否かを判定する。実行開始アドレスＲＡ以下のアドレスがＨＷブレークポイント設定テーブル１１８に設定されている場合、デバッグ支援装置１１１は、有効／無効フラグ３０２に１を設定する（Ｓ１３）。一方、ステップＳ１２において、実行開始アドレスＲＡ以下のアドレスがＨＷブレークポイント設定テーブル１１８に設定されていない場合、デバッグ支援装置１１１は、有効／無効フラグ３０２に０を設定する（Ｓ１４）。
【００４６】
続いて、デバッグ支援装置１１１は、実行開始アドレスＲＡより後にブレークポイントが設定されているか否かを判定する（Ｓ１５）。すなわち、デバッグ支援装置１１１は、実行開始アドレスＲＡより大きなアドレスがＨＷブレークポイント設定テーブル１１８に設定されているか否かを判定する。実行開始アドレスＲＡより大きなアドレスがＨＷブレークポイント設定テーブル１１８に設定されている場合、デバッグ支援装置１１１は、実行開始アドレスＲＡより大きく、かつ、実行開始アドレスＲＡに最も近い直近アドレスをブレークポイント格納レジスタ３０４に設定し、有効／無効フラグ３０５に１を設定する（Ｓ１６）。一方、ステップＳ１５において、実行開始アドレスＲＡより大きなアドレスがＨＷブレークポイント設定テーブル１１８に設定されていない場合、デバッグ支援装置１１１は、有効／無効フラグ３０５に０を設定する（Ｓ１７）。
【００４７】
図５に戻り説明を続ける。その後、デバッグ支援装置１１１は、対象プログラム１２１の実行を開始する（Ｓ２１）。このとき、ＣＰＵ１０２は、対象プログラム１２１の現在のプログラムカウンタ値ＰＣにおける命令を実行する。そして、デバッグ支援装置１１１は、対象プログラム１２１の実行が終了したか否かを判定する（Ｓ２２）。ＨＷブレーク回路１０８による実行の中断がない場合など、対象プログラム１２１の実行が終了した場合、当該デバッグ支援処理を終了する。一方、対象プログラム１２１の実行が終了しない場合、ＨＷブレーク回路１０８は、現在のプログラムカウンタ値ＰＣに応じて対象プログラム１２１の実行の中断を行うか否かを判定する。そして、デバッグ支援装置１１１は、ＨＷブレーク回路１０８により対象プログラム１２１の実行が中断されたか否かを判定する（Ｓ２３）。中断されていない場合、ＣＰＵ１０２は、プログラムカウンタ値ＰＣをカウントアップし（Ｓ２８）、ステップＳ２１へ戻る。
【００４８】
一方、ＨＷブレーク回路１０８により対象プログラム１２１の実行が中断された場合、デバッグ支援装置１１１は、プログラムカウンタ値ＰＣがブレークポイントのいずれかと一致するか否かを判定する（Ｓ２４）。すなわち、デバッグ支援装置１１１は、ＨＷブレークポイント設定テーブル１１８を参照し、プログラムカウンタ値ＰＣと等しいブレークポイントが設定されているか否かを判定する。プログラムカウンタ値ＰＣがブレークポイントのいずれかと一致する場合、デバッグ支援装置１１１は、コンピュータ端末１２０に対してその旨を通知し、各種デバッグ処理を行わせる（Ｓ２５）。つまり、コンピュータ端末１２０は、ユーザの指示に応じて、対象プログラム１２１の状態等を参照及び更新する。
【００４９】
一方、ステップＳ２４において、プログラムカウンタ値ＰＣがブレークポイントのいずれとも一致しない場合、デバッグ支援装置１１１は、レジスタ等設定処理を行う（Ｓ２６）。このとき、図６のステップＳ１１において、デバッグ支援装置１１１は、実行開始アドレス格納レジスタ３０３に現在のプログラムカウンタ値ＰＣを設定する。その他は、図６と同様である。ステップＳ２６の後、デバッグ支援装置１１１は、対象プログラム１２１の実行を再開する（Ｓ２７）。ＣＰＵ１０２は、プログラムカウンタ値ＰＣをカウントアップし（Ｓ２８）、対象プログラム１２１の実行終了までステップＳ２１からＳ２８を繰り返す。
【００５０】
続いて、対象プログラム１２１の実行開始からＨＷブレーク回路１０８によるブレークポイント位置での中断までの実行例を以下に示す。
【００５１】
実行例（１）：プログラム開始からブレークポイントまで分岐命令が発生しない場合
図７は、本実施の形態１にかかる実行例（１）における対象プログラムのアドレス設定例を示す図である。ここでは、ＨＷブレークポイント設定テーブル１１８にブレークポイントとして、ＢＰ１（０００１番地）、ＢＰ２（０００７番地）、ＢＰ３（００１１番地）が設定されている。そして、対象プログラム１２１の実行開始アドレスが０００３番地である。この状態で対象プログラム１２１のデバッグ支援処理を開始した場合、以下の（１−１）、（１−２）、（１−３）の順に実行される。
【００５２】
（１−１）ＨＷブレーク回路１０８への設定（Ｓ２０）
デバッグ支援装置１１１は、実行開始アドレス格納レジスタ３０３に実行開始アドレス（０００３番地）を設定する（Ｓ１１）。また、デバッグ支援装置１１１は、１ビットカウンタ３０８に０を設定する（Ｓ１１）。
デバッグ支援装置１１１は、実行開始アドレス以下にブレークポイントＢＰ１があるため、有効／無効フラグ３０２に１を設定する（Ｓ１３）。
デバッグ支援装置１１１は、ブレークポイント格納レジスタ３０４にＢＰ２（０００７番地）を設定する（Ｓ１６）。
デバッグ支援装置１１１は、実行開始アドレスより後に直近ブレークポイントＢＰ２があるため、有効／無効フラグ３０５に１を設定する（Ｓ１６）。
【００５３】
（１−２）対象プログラム１２１の実行（Ｓ２１）
実行開始直後は、プログラムカウンタ値ＰＣが０００３であるため、比較器Ａ３０６の条件が成立し、１ビットカウンタ３０８のカウンタ値が１になる。但し、１ビットカウンタ３０８のカウンタ値がオーバーフローしていないため、１ビットカウンタ３０８の出力は０のままである。また、このとき、比較器Ｂ３０７の条件も成立しない。よって、ＯＲ回路３１１の出力も０となり、ＨＷブレーク回路１０８は、対象プログラム１２１の実行を中断しない。
そして、プログラムカウンタ値ＰＣがカウントアップして（Ｓ２８）、０００７に到達するまで、比較器Ａ３０６及び比較器Ｂ３０７の条件は成立しない。よって、ＯＲ回路３１１の出力も０となり、ＨＷブレーク回路１０８は、対象プログラム１２１の実行を中断しない。
【００５４】
（１−３）対象プログラム１２１の実行中断
その後、プログラムカウンタ値ＰＣが０００７に到達したとき、比較器Ｂ３０７の条件が成立し、ＯＲ回路３１１の出力が１となる。よって、ＨＷブレーク回路１０８は、対象プログラム１２１の実行を中断する。そして、デバッグ支援装置１１１は、プログラムカウンタ値ＰＣが示すアドレス０００７がＨＷブレークポイント設定テーブル１１８にＢＰ２として設定されているため（Ｓ２４でＹＥＳ）、中断を維持する。これにより、コンピュータ端末１２０は、ＢＰ２における各種デバッグ処理（Ｓ２５）が可能となる。
【００５５】
実行例（２）：プログラム開始から直近のブレークポイントの間に分岐命令がある場合
図８は、本実施の形態１にかかる実行例（２）における対象プログラムのアドレス設定例を示す図である。ここでは、ＨＷブレークポイント設定テーブル１１８にブレークポイントとして、ＢＰ１（０００１番地）、ＢＰ２（０００７番地）、ＢＰ３（００１１番地）が設定されている。そして、対象プログラム１２１の実行開始アドレスが０００３番地である。さらに、０００５番地には、０００９番地（Ａ）への分岐命令がある。この状態で対象プログラム１２１のデバッグ支援処理を開始した場合、以下の（２−１）、（２−２）、（２−３）、（２−４）、（２−５）の順に実行される。
【００５６】
（２−１）ＨＷブレーク回路１０８への設定（Ｓ２０）
設定内容は、上記（１−１）と同様である。
【００５７】
（２−２）対象プログラム１２１の実行及び中断（Ｓ２１）
実行開始直後は、プログラムカウンタ値ＰＣが０００３であるため、比較器Ａ３０６の条件が成立し、１ビットカウンタ３０８のカウンタ値が１になる。但し、１ビットカウンタ３０８のカウンタ値がオーバーフローしていないため、１ビットカウンタ３０８の出力は０のままである。また、このとき、比較器Ｂ３０７の条件も成立しない。よって、ＯＲ回路３１１の出力も０となり、ＨＷブレーク回路１０８は、対象プログラム１２１の実行を中断しない。
そして、プログラムカウンタ値ＰＣがカウントアップして（Ｓ２８）、０００５に到達すると、分岐命令が実行され、プログラムカウンタ値ＰＣが分岐先の０００９となる。そのため、比較器Ｂ３０７の条件が成立し、ＯＲ回路３１１の出力が１となる。よって、ＨＷブレーク回路１０８は、対象プログラム１２１の実行を中断する。
【００５８】
（２−３）ＨＷブレーク回路１０８への再設定（Ｓ２６）
このとき、プログラムカウンタ値ＰＣが示すアドレス０００９がＨＷブレークポイント設定テーブル１１８に設定されていないため（Ｓ２４でＮＯ）、デバッグ支援装置１１１は、ＨＷブレーク回路１０８へのレジスタ及びフラグの再設定を行う（Ｓ２６）。
デバッグ支援装置１１１は、実行開始アドレス格納レジスタ３０３に実行開始アドレス（０００９番地）を設定する（Ｓ１１）。また、デバッグ支援装置１１１は、１ビットカウンタ３０８に０を設定する（Ｓ１１）。
デバッグ支援装置１１１は、実行開始アドレス以下にブレークポイントＢＰ２があるため、有効／無効フラグ３０２に１を設定する（Ｓ１３）。
デバッグ支援装置１１１は、ブレークポイント格納レジスタ３０４にＢＰ３（００１１番地）を設定する（Ｓ１６）。
デバッグ支援装置１１１は、実行開始アドレスより後に直近ブレークポイントＢＰ３があるため、有効／無効フラグ３０５に１を設定する（Ｓ１６）。
【００５９】
（２−４）対象プログラム１２１の実行の再開（Ｓ２７）
実行再開直後は、プログラムカウンタ値ＰＣが０００９であるため、比較器Ａ３０６の条件が成立し、１ビットカウンタ３０８のカウンタ値が１になる。但し、１ビットカウンタ３０８のカウンタ値がオーバーフローしていないため、１ビットカウンタ３０８の出力は０のままである。また、このとき、比較器Ｂ３０７の条件も成立しない。よって、ＯＲ回路３１１の出力も０となり、ＨＷブレーク回路１０８は、対象プログラム１２１の実行を中断しない。
そして、プログラムカウンタ値ＰＣがカウントアップして（Ｓ２８）、００１１に到達するまで、比較器Ａ３０６及び比較器Ｂ３０７の条件は成立しない。よって、ＯＲ回路３１１の出力も０となり、ＨＷブレーク回路１０８は、対象プログラム１２１の実行を中断しない。
【００６０】
（２−５）対象プログラム１２１の実行中断
その後、プログラムカウンタ値ＰＣが００１１に到達したとき、比較器Ｂ３０７の条件が成立し、ＯＲ回路３１１の出力が１となる。よって、ＨＷブレーク回路１０８は、対象プログラム１２１の実行を中断する。そして、デバッグ支援装置１１１は、プログラムカウンタ値ＰＣが示すアドレス００１１がＨＷブレークポイント設定テーブル１１８にＢＰ３として設定されているため（Ｓ２４でＹＥＳ）、中断を維持する。これにより、コンピュータ端末１２０は、ＢＰ３における各種デバッグ処理（Ｓ２５）が可能となる。
【００６１】
実行例（３）：プログラム開始から直近のブレークポイントの間に分岐命令があり、分岐先が範囲外の場合
図９は、本実施の形態１にかかる実行例（３）における対象プログラムのアドレス設定例を示す図である。ここでは、ＨＷブレークポイント設定テーブル１１８にブレークポイントとして、ＢＰ１（０００１番地）、ＢＰ２（０００７番地）、ＢＰ３（００１１番地）が設定されている。そして、対象プログラム１２１の実行開始アドレスが０００３番地である。さらに、０００５番地には、００００番地（Ｂ）への分岐命令がある。この状態で対象プログラム１２１のデバッグ支援処理を開始した場合、以下の（３−１）、（３−２）、（３−３）、（３−４）、（３−５）の順に実行される。
【００６２】
（３−１）ＨＷブレーク回路１０８への設定（Ｓ２０）
設定内容は、上記（１−１）と同様である。
【００６３】
（３−２）対象プログラム１２１の実行及び中断（Ｓ２１）
実行開始直後は、プログラムカウンタ値ＰＣが０００３であるため、比較器Ａ３０６の条件が成立し、１ビットカウンタ３０８のカウンタ値が１になる。但し、１ビットカウンタ３０８のカウンタ値がオーバーフローしていないため、１ビットカウンタ３０８の出力は０のままである。また、このとき、比較器Ｂ３０７の条件も成立しない。よって、ＯＲ回路３１１の出力も０となり、ＨＷブレーク回路１０８は、対象プログラム１２１の実行を中断しない。
そして、プログラムカウンタ値ＰＣがカウントアップして（Ｓ２８）、０００５に到達すると、分岐命令が実行され、プログラムカウンタ値ＰＣが分岐先の００００となる。そのため、比較器Ａ３０６の条件が成立し、１ビットカウンタ３０８のカウンタ値がオーバーフローするため、１ビットカウンタ３０８の出力は１となる。よって、ＯＲ回路３１１の出力が１となり、ＨＷブレーク回路１０８は、対象プログラム１２１の実行を中断する。
【００６４】
（３−３）ＨＷブレーク回路１０８への再設定（Ｓ２６）
このとき、プログラムカウンタ値ＰＣが示すアドレス００００がＨＷブレークポイント設定テーブル１１８に設定されていないため（Ｓ２４でＮＯ）、デバッグ支援装置１１１は、ＨＷブレーク回路１０８へのレジスタ及びフラグの再設定を行う（Ｓ２６）。
デバッグ支援装置１１１は、実行開始アドレス格納レジスタ３０３に実行開始アドレス（００００番地）を設定する（Ｓ１１）。また、デバッグ支援装置１１１は、１ビットカウンタ３０８に０を設定する（Ｓ１１）。
デバッグ支援装置１１１は、実行開始アドレス以下にブレークポイントがないため、有効／無効フラグ３０２に０を設定する（Ｓ１４）。
デバッグ支援装置１１１は、ブレークポイント格納レジスタ３０４にＢＰ１（０００１番地）を設定する（Ｓ１６）。
デバッグ支援装置１１１は、実行開始アドレスより後に直近ブレークポイントＢＰ１があるため、有効／無効フラグ３０５に１を設定する（Ｓ１６）。
【００６５】
（３−４）対象プログラム１２１の実行の再開（Ｓ２７）
実行再開直後は、プログラムカウンタ値ＰＣが００００であるため、比較器Ａ３０６の条件が成立し、１ビットカウンタ３０８のカウンタ値が１になる。但し、１ビットカウンタ３０８のカウンタ値がオーバーフローしていないため、１ビットカウンタ３０８の出力は０のままである。また、このとき、比較器Ｂ３０７の条件も成立しない。よって、ＯＲ回路３１１の出力も０となり、ＨＷブレーク回路１０８は、対象プログラム１２１の実行を中断しない。
【００６６】
（３−５）対象プログラム１２１の実行中断
その後、プログラムカウンタ値ＰＣが０００１に到達したとき、比較器Ｂ３０７の条件が成立し、ＯＲ回路３１１の出力が１となる。よって、ＨＷブレーク回路１０８は、対象プログラム１２１の実行を中断する。そして、デバッグ支援装置１１１は、プログラムカウンタ値ＰＣが示すアドレス０００１がＨＷブレークポイント設定テーブル１１８にＢＰ１として設定されているため（Ｓ２４でＹＥＳ）、中断を維持する。これにより、コンピュータ端末１２０は、ＢＰ１における各種デバッグ処理（Ｓ２５）が可能となる。
【００６７】
実行例（４）：プログラム開始から直近のブレークポイントの間に分岐命令があり、分岐先がプログラム開始位置の場合
図１０は、本実施の形態１にかかる実行例（４）における対象プログラムのアドレス設定例を示す図である。ここでは、ＨＷブレークポイント設定テーブル１１８にブレークポイントとして、ＢＰ１（０００３番地）、ＢＰ２（０００７番地）、ＢＰ３（００１１番地）が設定されている。そして、対象プログラム１２１の実行開始アドレスが０００３番地である。さらに、０００５番地には、０００３番地（Ｃ）への分岐命令がある。この状態で対象プログラム１２１のデバッグ支援処理を開始した場合、以下の（４−１）、（４−２）、（４−３）の順に実行される。
【００６８】
（４−１）ＨＷブレーク回路１０８への設定（Ｓ２０）
設定内容は、上記（１−１）と同様である。
【００６９】
（４−２）対象プログラム１２１の実行及び中断（Ｓ２１）
実行開始直後は、プログラムカウンタ値ＰＣが０００３であるため、比較器Ａ３０６の条件が成立し、１ビットカウンタ３０８のカウンタ値が１になる。但し、１ビットカウンタ３０８のカウンタ値がオーバーフローしていないため、１ビットカウンタ３０８の出力は０のままである。また、このとき、比較器Ｂ３０７の条件も成立しない。よって、ＯＲ回路３１１の出力も０となり、ＨＷブレーク回路１０８は、対象プログラム１２１の実行を中断しない。
そして、プログラムカウンタ値ＰＣがカウントアップして（Ｓ２８）、０００５に到達すると、分岐命令が実行され、プログラムカウンタ値ＰＣが分岐先の０００３となる。そのため、比較器Ｂ３０７の条件が成立し、ＯＲ回路３１１の出力が１となる。よって、ＨＷブレーク回路１０８は、対象プログラム１２１の実行を中断する。
そして、デバッグ支援装置１１１は、プログラムカウンタ値ＰＣが示すアドレス０００３がＨＷブレークポイント設定テーブル１１８にＢＰ１として設定されているため（Ｓ２４でＹＥＳ）、中断を維持する。これにより、コンピュータ端末１２０は、ＢＰ１における各種デバッグ処理（Ｓ２５）が可能となる。
【００７０】
＜実施の形態２＞
本実施の形態２は、上述した実施の形態１の変形例である。本実施の形態２にかかるカウンタ回路は、前記第１のフラグが有効な場合に、前記条件成立信号を出力するものである。言い換えると、本実施の形態２にかかる１ビットカウンタは、前記第１のフラグが有効な場合に、前記カウントを行い、前記オーバーフロー信号を出力するものである。
【００７１】
図１１は、本実施の形態２にかかるＨＷブレーク回路４０１の構成を示すブロック図である。ＨＷブレーク回路４０１は、実施の形態１で示した図２のＨＷブレーク回路１０８から、１ビットカウンタ３０８とＡＮＤ回路３０９の位置を入れ替えた回路である。そして、それ以外の構成はＨＷブレーク回路１０８と同様である。
【００７２】
ここで、図２のＨＷブレーク回路１０８では、有効／無効フラグ３０２の値に関係なく、比較器Ａ３０６の出力が１のときに１ビットカウンタ３０８はカウンタ値に１を加算する動作を行う。よって、その点においては無駄な電力を消費することになる。一方、本実施の形態２にかかるＨＷブレーク回路４０１では、有効／無効フラグ３０２の値が０のときには、ＡＮＤ回路３０９が０を出力する。この場合、１ビットカウンタ３０８は、カウンタ値に１を加算する動作を行わない。よって、ＨＷブレーク回路１０８と比べて消費電力を抑えつつ、同様の効果を奏することができる。
【００７３】
＜実施の形態３＞
本実施の形態３は、上述した実施の形態１又は２の改良例である。本実施の形態３にかかる記憶部は、前記複数のブレークポイントのそれぞれに対応させて、前記プログラムカウンタ値が一致した回数である一致回数と、当該一致回数の上限回数とをさらに記憶する。また、前記デバッグ制御部は、前記プログラムカウンタ値が前記複数のブレークポイントのいずれかと一致した場合に、当該一致したブレークポイントに対応する前記一致回数を加算し、当該加算後の一致回数が対応する前記上限回数に達した場合に、前記対象プログラムの実行の中断を維持する。例えば、ループ処理内のアドレスにブレークポイントを設定する場合、当該アドレスに到達する度に対象プログラム１２１の実行を中断する必要がなく、数回に一回だけ中断させて状態を確認すれば十分な場合等に役立つ。そのため、ブレークポイントごとに柔軟なデバッグを行うことができる。
【００７４】
図１２は、本実施の形態３にかかるＨＷブレークポイント設定テーブル５０１の構成例を示す図である。ＨＷブレークポイント設定テーブル５０１は、ブレークポイント設定領域５０２と、パスカウント領域５０３と、成立回数格納領域５０４とをそれぞれ示す領域を備える。ブレークポイント設定領域５０２は、ブレークポイントのアドレスを設定する領域である。パスカウント領域５０３は、各ブレークポイントに何回到達した場合（条件が成立した場合）に対象プログラム１２１の実行を中断させるかを示すパスカウンタを設定する領域である。成立回数格納領域５０４は、各ブレークポイントにプログラムカウンタ値ＰＣが到達して条件が成立した回数を示す成立回数を格納する領域である。
【００７５】
図１３は、本実施の形態３にかかるデバッグ支援処理の流れを示すフローチャートである。まず、ステップＳ２０におけるレジスタ等設定処理において、各ブレークポイントの成立回数格納領域５０４の値を０に設定する。そして、ステップＳ２４でＹＥＳの場合に、デバッグ支援装置１１１は、一致するブレークポイントの成立回数に１加算する（Ｓ２８）。その後、デバッグ支援装置１１１は、成立回数がパスカウンタ以上であるか否かを判定する（Ｓ２９）。成立回数がパスカウンタ以上の場合、ステップＳ２５へ進み、成立回数がパスカウンタ未満の場合、ステップＳ２７へ進む。
【００７６】
＜実施の形態４＞
本実施の形態４は、上述した実施の形態１乃至３の改良例である。本実施の形態４において、前記第１及び第２のレジスタのビット数は、前記プログラムカウンタ値のビット数より大きい。また、前記第１の比較器は、前記第１のレジスタに設定された前記実行開始アドレスと、前記プログラムカウンタ値とを符号付きで比較し、前記第２の比較器は、前記第２のレジスタに設定された前記最も小さいアドレスと、前記プログラムカウンタ値とを符号無しで比較する。これにより、実施の形態１乃至３におけるＨＷブレーク回路の有効／無効フラグ３０２及び３０５、ＡＮＤ回路３０９及び３１０を省略することができる。よって、回路規模を小さくし、消費電力を少なくすることができる。
【００７７】
図１４は、本実施の形態４にかかるＨＷブレーク回路６０１の構成を示すブロック図である。ＨＷブレーク回路６０１は、実行開始アドレス格納レジスタ６０２と、ブレークポイント格納レジスタ６０３と、比較器Ａ６０４と、比較器Ｂ６０５と、１ビットカウンタ６０６と、ＯＲ回路６０７とを備える。
【００７８】
実行開始アドレス格納レジスタ６０２は、プログラムカウンタ値ＰＣより１ビット大きいレジスタであり、最上位ビットを０又は１とし、以降に実行開始アドレスが設定される。比較器Ａ６０４は、実行開始アドレスＲＡａとプログラムカウンタ値ＰＣとを符号付きで比較し、比較結果を１ビットカウンタ６０６へ出力する。１ビットカウンタ６０６は、１ビットカウンタ３０８と同様である。
【００７９】
ブレークポイント格納レジスタ６０３は、プログラムカウンタ値ＰＣより１ビット大きいレジスタであり、最上位ビットを０又は１とし、以降に直近のブレークポイントが設定される。比較器Ｂ６０５は、ブレークポイントＢＰａとプログラムカウンタ値ＰＣとを符号なしで比較し、比較結果をＯＲ回路６０７へ出力する。ＯＲ回路６０７は、１ビットカウンタ６０６と比較器Ｂ６０５の論理和をとった値を出力する。ＨＷブレーク回路６０１は、ＯＲ回路６０７の出力が１の場合に、対象プログラム１２１の実行を中断する。
【００８０】
図１５は、本実施の形態４にかかるレジスタ等設定処理の流れを示すフローチャートである。まず、デバッグ支援装置１１１は、１ビットカウンタ６０６に０を設定する（Ｓ３１）。次に、デバッグ支援装置１１１は、実行開始アドレスＲＡ以下にブレークポイントが設定されているか否かを判定する（Ｓ３２）。実行開始アドレスＲＡ以下にブレークポイントが設定されている場合、デバッグ支援装置１１１は、実行開始アドレス格納レジスタ６０２に、最上位ビット０及びプログラムカウンタ値ＰＣを設定する（Ｓ３３）。一方、ステップＳ３２において、実行開始アドレスＲＡ以下にブレークポイントが設定されていない場合、デバッグ支援装置１１１は、実行開始アドレス格納レジスタ６０２の最上位ビットに１を設定する（Ｓ３４）。
【００８１】
続いて、デバッグ支援装置１１１は、実行開始アドレスＲＡより後にブレークポイントが設定されているか否かを判定する（Ｓ３５）。実行開始アドレスＲＡより後にブレークポイントが設定されている場合、デバッグ支援装置１１１は、最上位ビット０及び実行開始アドレスＲＡより大きく、かつ、実行開始アドレスＲＡに最も近い直近アドレスをブレークポイント格納レジスタ６０３に設定する（Ｓ３６）。一方、ステップＳ３５において、実行開始アドレスＲＡより後にブレークポイントが設定されていない場合、デバッグ支援装置１１１は、ブレークポイント格納レジスタ６０３の最上位ビットに１を設定する（Ｓ３７）。
【００８２】
ステップＳ３４のように、実行開始アドレス格納レジスタ６０２の最上位ビットに１を設定することにより、符号付きで比較を行う比較器Ａ６０４においては、実行開始アドレスＲＡａの値が負数として扱われる。そのため、実行開始アドレスＲＡａは、プログラムカウンタ値ＰＣより常に小さくなり、比較器Ａ６０４の出力は常に０となる。つまり、図２で有効／無効フラグ３０２に０が設定された場合と同じ効果を得ることができる。
【００８３】
また、ステップＳ３７のように、ブレークポイント格納レジスタ６０３の最上位ビットに１を設定することにより、符号なしで比較を行う比較器Ｂ６０５においては、ブレークポイントＢＰａがプログラムカウンタ値ＰＣより常に大きい値となる。そのため、比較器Ｂ６０５の出力は常に０となる。つまり、図２で有効／無効フラグ３０５に０が設定された場合と同じ効果を得ることができる。
【００８４】
＜実施の形態５＞
本実施の形態５は、上述した実施の形態１乃至４の変形例である。
図１６は、本実施の形態５にかかるデバッグシステム１００ａの全体構成を示すブロック図である。デバッグシステム１００ａは、ＭＣＵ１３１と、コンピュータ端末１２０とを備える。ＭＣＵ１３１は、ＣＰＵ１０２と、ＲＡＭ１０３と、ＲＯＭ１０４と、Ｉ／Ｏ１０６と、デバッグ回路１０７と、通信Ｉ／Ｆ１１０とを備え、バス１０９を介して接続されている。尚、図１と同等の構成には同一の符号を付し、詳細な説明を省略する。
【００８５】
ＲＡＭ１０３は、ＨＷブレークポイント設定テーブル１３２を記憶する。ＨＷブレークポイント設定テーブル１３２は、コンピュータ端末１２０から通信Ｉ／Ｆ１１０及びバス１０９を介して設定される。ＲＯＭ１０４は、モニタプログラム１０５と、デバッグ支援プログラム１３３と、対象プログラム１２１とを記憶する。デバッグ支援プログラム１３３は、コンピュータ端末１２０から通信Ｉ／Ｆ１１０及びバス１０９を介して起動される。この場合、ＣＰＵ１０２がＲＯＭ１０４に格納されたデバッグ支援プログラム１３３を読み込み、実行を行うことにより、デバッグ制御部として機能するものといえる。
【００８６】
このように、ＭＣＵ１３１に内蔵のＲＡＭ１０３にデバッグ支援プログラム１３３を配置し、ＲＡＭ１０３にＨＷブレークポイント設定テーブル１３２を配置することにより、デバッグ支援装置１１１を用いなくとも、上述した実施の形態１乃至４と同様の効果を実現できる。さらに、図１６では、デバッグ支援装置１１１を用いないため、図１と比べて安価にデバッグシステムを構築することができる。
【００８７】
＜その他の実施の形態＞
尚、上述した実施の形態１乃至４は、実施の形態５と比べて、ＭＣＵ内蔵のＲＯＭやＲＡＭにデバッグ支援プログラムやＨＷブレークポイントを格納するための領域が不要となるため、デバッグ対象のプログラムに使用するためのメモリ領域を十分に割り当てることができる、という効果も奏する。
【００８８】
また、上述の実施の形態では、本発明をハードウェアの構成として説明したが、本発明は、これに限定されるものではない。本発明は、任意の処理を、ＣＰＵ（Central Processing Unit）等のプロセッサにコンピュータプログラムを実行させることにより実現することも可能である。
【００８９】
上述の例において、プログラムは、様々なタイプの非一時的なコンピュータ可読媒体（non-transitory computer readable medium）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（tangible storage medium）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Read Only Memory）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Programmable ROM）、ＥＰＲＯＭ（Erasable PROM）、フラッシュＲＯＭ、ＲＡＭ（Random Access Memory））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（transitory computer readable medium）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００９０】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。
【符号の説明】
【００９１】
１００  デバッグシステム
１００ａ  デバッグシステム
１０１  ＭＣＵ
１０２  ＣＰＵ
１０３  ＲＡＭ
１０４  ＲＯＭ
１０５  モニタプログラム
１０６  Ｉ／Ｏ
１０７  デバッグ回路
１０８  ＨＷブレーク回路
１０９  バス
１１０  通信Ｉ／Ｆ
１１１  デバッグ支援装置
１１２  通信Ｉ／Ｆ
１１３  バス
１１４  ＣＰＵ
１１５  ＲＯＭ
１１６  デバッグ支援プログラム
１１７  ＲＡＭ
１１８  ＨＷブレークポイント設定テーブル
１１９  通信Ｉ／Ｆ
１２０  コンピュータ端末
１２１  対象プログラム
１２２  ＮＯＴ回路
１２３  ＸＯＲ回路
１２４  ＪＫフリップフロップ
１２５  ＡＮＤ回路
１３１  ＭＣＵ
１３２  ＨＷブレークポイント設定テーブル
１３３  デバッグ支援プログラム
３０２  有効／無効フラグ
３０３  実行開始アドレス格納レジスタ
３０４  ブレークポイント格納レジスタ
３０５  有効／無効フラグ
３０６  比較器Ａ
３０７  比較器Ｂ
３０８  １ビットカウンタ
３０９  ＡＮＤ回路
３１０  ＡＮＤ回路
３１１  ＯＲ回路
４０１  ＨＷブレーク回路
５０１  ＨＷブレークポイント設定テーブル
５０２  ブレークポイント設定領域
５０３  パスカウント領域
５０４  成立回数格納領域
６０１  ＨＷブレーク回路
６０２  実行開始アドレス格納レジスタ
６０３  ブレークポイント格納レジスタ
６０４  比較器Ａ
６０５  比較器Ｂ
６０６  １ビットカウンタ
６０７  ＯＲ回路
ＰＣ  プログラムカウンタ値
ＲＡ  実行開始アドレス
ＢＰ  ブレークポイント
ＲＡａ  実行開始アドレス
ＢＰａ  ブレークポイント
【図１】
2018128767.tif 000003
【図２】
2018128767.tif 000004
【図３】
2018128767.tif 000005
【図４】
2018128767.tif 000006
【図５】
2018128767.tif 000007
【図６】
2018128767.tif 000008
【図７】
2018128767.tif 000009
【図８】
2018128767.tif 000010
【図９】
2018128767.tif 000011
【図１０】
2018128767.tif 000012
【図１１】
2018128767.tif 000013
【図１２】
2018128767.tif 000014
【図１３】
2018128767.tif 000015
【図１４】
2018128767.tif 000016
【図１５】
2018128767.tif 000017
【図１６】
2018128767.tif 000018