(57)【要約】【課題】プログラムの実行時間の測定中にブレークが発生した場合であっても、プログラムの実行時間を正確に測定できるようにする。【解決手段】本発明に係るプログラムデバッグ装置１は、カウンタ２と、ブレークが発生する直前に実行された命令を特定する情報を保持するブレーク前情報保持部３と、ブレークの終了後に再実行される命令を特定する情報を保持する再実行開始情報保持部４と、通常時において直前に実行された命令と再実行される命令とが連続して実行される場合に要する実行時間を推定し、当該推定された実行時間に基づいて前記ブレークにより前記命令が無効にされたことに起因する誤差を補正するための補正値を生成する測定誤差演算部５とを有する。【選択図】図１
2013016010.tif 000002
【特許請求の範囲】
【請求項１】
パイプライン構造を有する半導体集積回路用のプログラムデバッグ装置であって、
複数の命令からなるプログラムの実行時間を測定するカウンタと、
ブレークが発生する直前に実行された前記命令を特定する情報を保持するブレーク前情報保持手段と、
前記ブレークの終了後に再実行される前記命令を特定する情報を保持する再実行開始情報保持手段と、
前記ブレーク前情報保持手段及び前記再実行開始情報保持手段により保持された情報に基づいて、前記ブレークが発生していない通常時において前記直前に実行された命令と前記再実行される命令とが連続して実行される場合に要する実行時間を推定し、当該推定された実行時間に基づいて前記ブレークにより前記命令が無効にされたことに起因する誤差を補正するための補正値を生成する測定誤差演算手段と、
を有するプログラムデバッグ装置。
【請求項２】
前記測定誤差演算手段は、
前記通常時において前記直前に実行された命令と前記再実行される命令とが連続して実行される場合に要する第１の実行時間と、前記直前に実行された命令及び前記再実行される命令をそれぞれ単独で実行した場合に要する第２の実行時間とを算出し、
前記第２の実行時間と前記第１の実行時間との差を前記補正値とする、
請求項１に記載のプログラムデバッグ装置。
【請求項３】
前記カウンタは、前記実行時間の実測値から前記補正値を減算した値を最終的な前記実行時間として出力する、
請求項２に記載のプログラムデバッグ装置。
【請求項４】
パイプライン構造を有する半導体集積回路用のプログラムデバッグ方法であって、
複数の命令からなるプログラムの実行時間を測定するカウントステップと、
ブレークが発生する直前に実行された前記命令を特定する情報を保持するブレーク前情報保持ステップと、
前記ブレークの終了後に再実行される前記命令を特定する情報を保持する再実行開始情報保持ステップと、
前記ブレーク前情報保持ステップ及び前記再実行開始情報保持ステップにより保持された情報に基づいて、前記ブレークが発生していない通常時において前記直前に実行された命令と前記再実行される命令とが連続して実行される場合に要する実行時間を推定し、当該推定された実行時間に基づいて前記ブレークにより前記命令が無効にされたことに起因する誤差を補正するための補正値を生成する測定誤差演算ステップと、
を有するプログラムデバッグ方法。
【請求項５】
コンピュータに、請求項４に記載の方法を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムデバッグ装置等に関し、特にブレーク発生時におけるプログラムの実行時間測定の補正に関する
【背景技術】
【０００２】
近年、インターネットの普及に伴い、高速動作が可能なルーター等の装置が増加してきている。このような装置を制御するための半導体集積回路（以降、マイクロコンピュータと称す）においては、プログラムが高速かつ高効率に動作する必要がある。
【０００３】
また、１命令にて複数の動作を行なうマイクロコンピュータ（以降、ＲＩＳＣマイコンと称す）が多く使用されている。このようなＲＩＳＣマイコンは、プログラムの実行効率を向上するために、パイプライン処理を採用している。一般に、パイプライン処理は、命令の読み出し、データの読み出し／書き込み、及びプログラムの実行を平行して行なうことができる。複数（多段）のパイプライン構造により、データを蓄積しておくことができ、命令やデータの先読みが可能となる。
【０００４】
特許文献１において、プログラム実行時間測定手段を有する電子計算機が開示されている。当該電子計算機は、任意のプログラム或いは１つのプログラムの一部分の実行時間を測定する場合にその都度プログラムを修正する必要があるとの問題を解決することを課題とし、被測定プログラムの開始アドレスと終了アドレスを設定することにより被測定プログラムが実行している間カウンタを作動させて実行時間を測定するものである。
【０００５】
その他、当該技術分野に関連するものとして、特許文献２〜５が開示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開昭６２−２３９２４７号公報
【特許文献２】特開２０００−２２２２４５号公報
【特許文献３】特開平０５−３４２０４８号公報
【特許文献４】特開２０１０−２４４３９３号公報
【特許文献５】特開平０３−０５４６４５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記パイプライン処理は、マイクロコンピュータ全体の実行効率を向上させる。しかしながら、上記高速動作が可能な装置の機能、性能の向上に伴い、マイクロコンピュータ上で動作するプログラム開発も複雑になってきている。特に、ハードウェア及びソフトウェアを含めたシステム検証は、一般的にエミュレータ等のプログラムデバッグ装置を用いた検証（以降、デバッグと称す）により行われる。特に、プログラム実行とハードウェア制御との関係が強い部分の性能検証は非常に難しい。特定の条件でのプログラム実行時間が、システム全体のパフォーマンスに大きく影響してしまう場合がある。例えば、データの受信よりもプログラムの実行時間が多くかかってしまう場合には、データの受信が待たされることにより、パフォーマンスが低下する。
【０００８】
このような問題に対処するために、通常のプログラムデバッグ装置はプログラムの実行時間を測定する機能を有している。しかしながら、通常、エミュレーション機能はマイクロコンピュータ外部で実現するものであり、正確な実行時間を得ることができないことが多い。
【０００９】
図５は、一般的なプログラムデバッグ装置１０１を例示している。プログラムデバッグ装置１０１は、被測定プログラムの開始アドレス及び終了アドレスを設定し保持するためのアドレス設定保持部１０２、プログラムカウンタ１０３、被測定プログラムが実行中であることを検出する被測定プログラム検出部１０４、割込み処理が実行中であることを検出する割込み処理検出部１０５、基準クロック発生器１０６、カウンタ１０７、及び表示部１０８を有する。
【００１０】
アドレス設定保持部１０２は、メンテナンスパネル１１１、アドレス設定回路１１２、アドレスレジスタＡ１１３、及びアドレスレジスタＢ１１４からなる。被測定プログラム検出部１０４は、比較回路Ａ１１７、比較回路Ｂ１１８、フリップフロップ１１９、及びＡＮＤゲート１２０を有する。
【００１１】
割込み処理検出部１０５は、フリップフロップ１２１，１２２，１２３及びＮＯＲゲート１２４を有する。
【００１２】
表示部１０８は、表示制御回路１２７及びメンテナンスパネル１１１を有する。
【００１３】
以下に、上記プログラムデバッグ装置１０１の動作を説明する。メンテナンスパネル１１１のスイッチ操作により、被測定プログラムの開始アドレス及び終了アドレスを設定する。これらの両アドレスは、それぞれアドレスレジスタＡ１１３及びアドレスレジスタＢ１１４に保持される。
【００１４】
計算機が実行状態になり、プログラムカウンタ１０３の内容がアドレスレジスタＡ１１３の内容と一致した時、比較回路Ａ１１７が信号を出力する。これにより、カウンタ１０７がクリアされると共にフリップフロップ１１９をセットされる。また、カウンタ１０７は、カウントイネーブルとなり、基準クロック発生器１０６が出力するクロックをカウントし始める。
【００１５】
その後、プログラムカウンタ１０３の内容がアドレスレジスタＢ１１４の内容と一致した時、比較回路Ｂ１１８が信号を出力する。これにより、フリップフロップ１１９がリセットされると共にカウンタ１０７がカウントを停止する。また、カウント値が表示制御回路１２７に転送され、メンテナンスパネル１１１上に表示される。ユーザは、この表示を目視することにより、プログラムの実行時間を知ることができる。
【００１６】
割込み処理検出部１０５のフリップフロップ１２１，１２２，１２３は、プログラムでアクセスできるものであり、割込み処理の中で開始時セットし終了時リセットするものである。その目的は、被測定プログラムが割込みにより中断されている間、カウンタ１０７のカウント動作を中止させることである。例えば、発生した割込みに対応する割込み処理の実行が開始すると、上記のように例えばフリップフロップ１２１がセットされ、ＮＯＲゲート１２４の出力が論理"０"となり、カウンタ１０７のカウントが中止する。プログラム実行中に発生するブレークは一種の割込み処理であるため、上記構成及び動作によりブレーク中の時間を除いた実行時間を測定することが可能となる。
【００１７】
しかしながら、多段のパイプライン構造を有するマイクロコンピュータのプログラム実行時間の測定を、上記のようなエミュレータ等を使用したプログラムデバッグ装置により測定し、ブレークが発生した場合には、測定結果に誤差が含まれるという問題がある。
【００１８】
図６及び図７は、上記プログラムデバッグ装置１０１におけるパイプライン処理の流れを例示している。本例は、三段パイプライン構造の場合である。基準クロック発生器１０６は、パイプラインの各ステージが１クロックカウントとなるようにＣＰＵクロックと同じ周波数で動作し、パイプライン制御により同時に複数の命令が実行される。
【００１９】
図中ｎは、実行時間測定のためのクロックカウントである。命令Ａ〜Ｅは、ｎの進行に合わせて順番に実行される。各命令の実行は、パイプラインのステージ毎に行われる。すなわち、ＩＦ（インストラクション・フェッチ）ステージは命令フェッチであり、ＩＤ（インストラクション・デコード）ステージにおいて命令のデコード及びアドレスの計算が行われ、ＭＥＭ（メモリ・アクセス）ステージにおいてデコードされた命令の実行及び対象となるアドレスへのアクセスが実行される。１命令の実行は、１クロック単位でＩＦ→ＩＤ→ＭＥＭの順で実行される。
【００２０】
図６は、プログラム実行時間測定時にブレークが発生しない場合のパイプライン処理の流れを例示している。命令Ａは、クロックＣＬＫがｎの時にＩＦステージ、ｎ＋１の時にＩＤステージ、ｎ＋２の時にＭＥＭステージを実行する。命令Ｂは、パイプライン処理として命令を先読みするために、ＣＬＫがｎ＋１の時にＩＦステージ、ｎ＋２の時にＩＤステージ、ｎ＋３の時にＭＥＭステージを実行する。同様に命令Ｃ〜Ｅは、パイプライン処理として命令を先読みするため、ＣＬＫを１クロックずらして命令フェッチを行う。本例においては、命令Ａ〜Ｅの実行に要する時間は、ｎ〜ｎ＋６の７クロックとなる。
【００２１】
図７は、プログラム実行時間測定時にブレークが発生した場合のパイプライン処理の流れを例示している。本例においては、命令Ｂの実行後であって命令ＣのＩＤステージ直後に、プログラムデバッグ装置によりプログラムの実行を停止させるブレークが発行されている。これにより、時間測定が停止：ＳＴＯＰし、エミュレータモード（ブレーク状態：ＢＲＥＡＫ）となり、プログラムデバッグ装置内において特定の処理が行われた後、プログラムが再実行して時間測定が再開：ＳＴＡＲＴされる。
【００２２】
ここで、命令ＣはＣＬＫのｎ＋２，ｎ＋３において既にＩＦ→ＩＤを読み込み済であり、命令Ｄはｎ＋３においてＩＦステージを読み込み済である。しかしながら、ブレークの発行により、これらの命令Ｃ及び命令Ｄの読み込みは無効となる。ＢＲＥＡＫ中は、プログラムデバッグ装置の機能により実行時間の測定が停止する。
【００２３】
プログラムの再実行はｎ＋４から開始され、実行時間の測定はＳＴＡＲＴから再開される。この時、ブレーク時に無効になった命令Ｃから再実行が開始される。そのため、命令Ａ〜Ｅの実行に要する時間は、ｎ〜ｎ＋８の９クロックとなる。このように、プログラム実行時間の測定結果に２クロック分の誤差が生ずる。
【課題を解決するための手段】
【００２４】
本発明の第１の態様は、パイプライン構造を有する半導体集積回路用のプログラムデバッグ装置であって、複数の命令からなるプログラムの実行時間を測定するカウンタと、ブレークが発生する直前に実行された前記命令を特定する情報を保持するブレーク前情報保持部と、前記ブレークの終了後に再実行される前記命令を特定する情報を保持する再実行開始情報保持部と、前記ブレーク前情報保持部及び前記再実行開始情報保持部により保持された情報に基づいて、前記ブレークが発生していない通常時において前記直前に実行された命令と前記再実行される命令とが連続して実行される場合に要する実行時間を推定し、当該推定された実行時間に基づいて前記ブレークにより前記命令が無効にされたことに起因する誤差を補正するための補正値を生成する測定誤差演算部とを有するものである。
【００２５】
本発明の第２の態様は、パイプライン構造を有する半導体集積回路用のプログラムデバッグ方法であって、複数の命令からなるプログラムの実行時間を測定するカウントステップと、ブレークが発生する直前に実行された前記命令を特定する情報を保持するブレーク前情報保持ステップと、前記ブレークの終了後に再実行される前記命令を特定する情報を保持する再実行開始情報保持ステップと、前記ブレーク前情報保持ステップ及び前記再実行開始情報保持ステップにより保持された情報に基づいて、前記ブレークが発生していない通常時において前記直前に実行された命令と前記再実行される命令とが連続して実行される場合に要する実行時間を推定し、当該推定された実行時間に基づいて前記ブレークにより前記命令が無効にされたことに起因する誤差を補正するための補正値を生成する測定誤差演算ステップとを有するものである。
【００２６】
本発明の第３の態様は、コンピュータに、上記第２の態様に記載の方法を実行させるためのプログラムである。
【００２７】
上記態様によれば、プログラムの実行時間の測定中にブレークが発生した場合に、当該ブレークが発生する直前に実行された命令を特定する情報及び当該ブレークの終了後に再実行される命令を特定する情報に基づいて、ブレークにより幾つかの命令が無効にされたことに起因する誤差が補正される。
【発明の効果】
【００２８】
本発明によれば、ブレークがどのようなタイミングで発生しても、自動的に適切な補正値を設定することが可能となる。これにより、ブレークが発生した場合であっても、プログラムの実行時間を正確に測定することが可能となる。
【図面の簡単な説明】
【００２９】
【図１】本発明の実施の形態１に係るプログラムデバッグ装置の基本的な構成を示すブロック図である。
【図２】実施の形態１に係るプログラムデバッグ装置の具体的な構成を示すブロック図である。
【図３】実施の形態１に係るプログラムデバッグ装置におけるプログラム実行時間測定の補正動作を示すフローチャートである。
【図４】実施の形態１に係るプログラムデバッグ装置における実行時間の測定時のタイミング図を例示する図である。
【図５】一般的なプログラムデバッグ装置を例示するブロック図である。
【図６】一般的なプログラムデバッグ装置においてプログラム実行時間測定時にブレークが発生しない場合のパイプライン処理の流れを例示する図である。
【図７】一般的なプログラムデバッグ装置においてプログラム実行時間測定時にブレークが発生した場合のパイプライン処理の流れを例示する図である。
【発明を実施するための形態】
【００３０】
実施の形態１
以下、図面を参照して本発明の実施の形態について説明する。図１は、本発明の実施の形態１に係るプログラムデバッグ装置１の基本的な構成を示している。プログラムデバッグ装置１は、パイプライン構造を有する半導体集積回路のデバッグを支援するためのものであり、カウンタ２、ブレーク前情報保持部３、再実行開始情報保持部４、及び測定誤差演算部５を有する。
【００３１】
カウンタ２は、複数の命令からなるプログラムの実行時間を測定する。
【００３２】
ブレーク前情報保持部３は、ブレークが発生する直前に実行された命令を特定する情報を保持する。
【００３３】
再実行開始情報保持部４は、ブレークの終了後に再実行される命令を特定する情報を保持する。
【００３４】
測定誤差演算部５は、ブレーク前情報保持部３及び再実行開始情報保持４により保持された情報に基づいて、ブレークが発生していない通常時において上記直前に実行された命令と上記再実行される命令とが連続して実行される場合に要する実行時間を推定し、当該推定された実行時間に基づいてブレークにより命令が無効にされたことに起因する誤差を補正するための補正値を生成する。
【００３５】
上記構成により、プログラムの実行時間の測定中にブレークが発生した場合に、当該ブレークが発生する直前に実行された命令を特定する情報及び当該ブレークの終了後に再実行される命令を特定する情報に基づいて、ブレークにより幾つかの命令が無効にされたことに起因する誤差が補正される。これにより、ブレークがどのようなタイミングで発生しても、自動的に適切な補正値を設定することが可能となり、プログラムの実行時間を正確に測定することが可能となる。
【００３６】
図２は、上記プログラムデバッグ装置１の具体的な構成を示している。プログラムデバッグ装置１は、被測定プログラムの実行を行ない、その実行時間を測定するエミュレータ１１と、プログラム作成を補助してエミュレータ１１の制御を行ない、実行結果を表示するデバッガ１２とを有する。
【００３７】
エミュレータ１１は、被測定プログラムの開始アドレス及び終了アドレスを保持するアドレス設定保持部２１と、プログラム実行中の命令アドレスを保持するプログラムカウンタ２２と、被測定プログラムが実行中であることを検出する被測定プログラム検出部２３と、実行時間を測定するカウンタ２と、ブレーク処理が実行中であることを検出するブレーク処理検出部２５と、時間測定のために基準となるクロックを発生する基準クロック発生器２６とを有する。
【００３８】
アドレス設定保持部２１は、被測定プログラムの開始アドレスを保持するアドレスレジスタＡ３１と、被測定プログラムの終了アドレスを保持するアドレスレジスタＢ３２とを有する。アドレスレジスタＡ３１は、アドレス設定部３５により設定され測定開始アドレスを保持し、比較回路Ａ３６により参照される。同様に、アドレスレジスタＢ３２は、アドレス設定部３５により設定され測定終了アドレスを保持し、比較回路Ｂ３７により参照される。
【００３９】
被測定プログラム検出部２３は、アドレスレジスタＡ３１とプログラムカウンタ２２との比較を行う比較回路Ａ３６と、アドレスレジスタＢ３２とプログラムカウンタ２２との比較を行う比較回路Ｂ３７と、フリップフロップ３８と、ＡＮＤゲート３９とを有する。
【００４０】
比較回路Ａ３６は、アドレスレジスタＡ３１とプログラムカウンタ２２とを比較し、比較結果をフリップフロップ３８及びカウンタ２へ出力する。
【００４１】
比較回路Ｂ３７は、アドレスレジスタＢ３２とプログラムカウンタ２２とを比較し、比較結果をフリップフロップ３８及び表示制御部４２へ出力する。
【００４２】
フリップフロップ３８は、比較回路Ａ３６及び比較回路Ｂ３７からの比較結果を入力とし、ＡＮＤゲート３９へ計測信号４３を出力する。
【００４３】
ＡＮＤゲート３９は、フリップフロップ３８及びフリップフロップ４６からの信号を入力とし、カウンタ２のＥＮＢＬ信号として出力する。
【００４４】
ブレーク処理検出部２５は、ブレーク処理の開始時にリセットされ終了時にセットされるフリップフロップ４６を有する。フリップフロップ４６の出力は、ブレーク信号４７としてＡＮＤゲート３９へ出力される。
【００４５】
デバッガ１２は、被測定プログラムの範囲設定や実行時間の測定結果を表示するユーザインターフェース４９と、ユーザインターフェース４９で指定された被測定プログラムの開始アドレスと終了アドレスをアドレスレジスタＡ３１及びアドレスレジスタＢ３２に設定するアドレス設定部３５と、被測定プログラムの実行後に測定結果をユーザインターフェース４９に表示させる表示制御部４２と、測定結果の保存や測定結果の誤差を算出しカウンタ２のカウント値を書き換える時間測定処理部５０とを有する。
【００４６】
ユーザインターフェース４９は、操作者により行われる被測定プログラムの開始アドレス及び終了アドレスの指定、表示制御部４２からの入力による測定結果の表示、及び操作者により行われるカウント保存部１０７に保存されている測定結果の消去を行う。
【００４７】
アドレス設定部３５は、ユーザインターフェース４９からのアドレス情報を入力とし、アドレスレジスタＡ３１及びアドレスレジスタＢ３２に対し、被測定プログラムの開始アドレス及び終了アドレスの設定を行う。
【００４８】
表示制御部４２は、カウント保存部５１に保存された過去のカウント値から現在のカウント値をユーザインターフェース４９に表示させる。
【００４９】
時間測定処理部５０は、カウント保存部５１、ブレーク前情報保持部３、再実行開始情報保持部４、及び測定誤差演算部５を有する。
【００５０】
カウント保存部５１は、カウンタ２のカウント値と比較回路Ｂ３７の比較結果とを入力とし、カウント値を保存し、表示制御部４２を介してユーザインターフェース４９に当該カウント値を測定結果として表示する。また、カウント保存部５１は、ユーザインターフェース４９から保存したカウント値のクリア指示が入力されると、保存しているカウント値をクリアする。
【００５１】
ブレーク前情報保持部３は、ブレーク前に実行した命令とアドレスを保持する。
【００５２】
再実行開始情報保持部４は、ブレーク後の再実行時に実行する命令とアドレスを保持する。
【００５３】
測定誤差演算部５は、ブレーク前情報保持部３及び再実行開始情報保持部４で保持される命令及びアドレスを入力とし、ブレーク前後の命令及びアドレスからブレークにより生じる測定誤差を算出し、算出した誤差を補正値としてカウンタ２へ出力する。
【００５４】
図３は、上記プログラムデバッグ装置１におけるプログラム実行時間測定の補正動作を示している。時間測定処理部５０は、ブレーク前にプログラムの実行時間測定をしていたかを判断し（Ｓ１０１）、測定していた場合（ＹＥＳ）にはステップＳ１０２に進み、測定していなかった場合（ＮＯ）にはステップＳ１０７に進む。
【００５５】
ステップＳ１０２において、最後に実行したアドレスと該アドレスの命令をブレーク前情報保持部３にブレーク前情報として保存する。次に、ブレーク後において、時間測定処理部５０は、プログラムの再実行によりブレーク前のプログラムの実行時間測定を継続するか否かを判断し（Ｓ１０３）、継続して実行時間を測定する場合（ＹＥＳ）にはステップＳ１０４に進み、実行時間の測定を停止する場合（ＮＯ）にはステップＳ１０７に進む。
【００５６】
ステップＳ１０４において、プログラムの再実行を開始するアドレスと該アドレスの命令を再実行開始情報保持部４に保存する。次に、ステップＳ１０５において、時間測定処理部５０は、ステップＳ１０２及びステップＳ１０４でそれぞれ保存した上記最後に実行した命令及び上記再実行される命令を連続して実行するのに要するクロック数Ｎ１を、測定誤差演算部５によるシミュレーションにより算出する。また、時間測定処理部５０は、ステップＳ１０２で保存した命令を単独で実行した場合に要するクロック数と、ステップＳ１０４で保存した命令を単独で実行した場合に要するクロック数との合計クロック数Ｎ２を、測定誤差演算部５によるシミュレーションにより算出する。なお、当該シミュレーションは、通常時におけるパイプラインの実行と同等の演算を行うものであることが好ましい。更に、時間測定処理部５０は、ブレークにより発生した測定誤差Ｔを、下記式（１）により算出する。
Ｔ＝Ｎ２−Ｎ１・・・（１）
更にまた、時間測定処理部５０は、カウンタ２の現在のカウント値を、当該カウント値から上記測定誤差Ｔを減算したカウント値に書き換える（ステップＳ１０６）。その後、エミュレータ１１は、被測定プログラムの実行を再開する（ステップＳ１０７）。
【００５７】
図４は、上記プログラムデバッグ装置１における実行時間の測定時のタイミングを例示している。同図において、プログラムの実行時間を測定するための開始・停止を指示する計測信号４３（図２参照）、プログラムデバッグ装置１の指示によるブレーク信号４７、及びカウンタ２のカウント値の変化が示されている。ブレーク信号４７は、ロウアクティブである。計測信号４３は、測定開始でハイになり、測定停止でロウになる。カウンタ２は、測定開始からカウントを開始し、測定停止でカウントを０に戻す。
【００５８】
本例は、任意の２つのアドレスをそれぞれアドレスレジスタＡ３１及びアドレスレジスタＢ３２に設定し、２つのアドレス区間を繰り返すプログラムを実行した場合を示している。カウンタ２に入力される基準クロックは、ＣＰＵクロックと同じ周波数であり、パイプラインの各ステージを実行するとカウンタ２のカウント値は１ずつ増加する。プログラム実行時間測定区間で実行される命令を、命令Ａ〜Ｅとする。
【００５９】
最初に、ブレーク信号４７がロウからハイに変わり、プログラムの実行をＲ１より開始する。プログラムが１度目の実行時間測定区間Ｓ１〜Ｅ１を通過した場合、アドレスレジスタＡ３１に保持された測定開始アドレスとプログラムカウンタ２２の値が一致することにより、計測信号４３がハイに変化する。この時、命令ＡのＩＦステージの実行からカウンタ１４が１ずつカウントされ、測定区間の最後の命令ＥのＭＥＭステージの実行完了まで７カウントを計測する。この７カウントが測定値Ｍ１となる。この時、アドレスレジスタＢ３２に保持された測定終了アドレスとプログラムカウンタ２２との値が一致することにより、計測信号４３がロウに変化する。
【００６０】
その後、プログラムが２度目の実行時間測定区間Ｓ２〜Ｅ２を通過する。本例においては、当該区間においてブレークが発生する。当該ブレークは、上述した図７に示す場合と同様であり、本発明特有の構成（時間測定処理部５０等）を有しない場合には、９カウントとなる。しかしながら、本実施の形態においては、当該区間Ｓ２〜Ｅ２における最終的な測定値Ｍ２は、上記時間測定処理部５０の補正動作により、区間Ｓ１〜Ｅ１の場合と同様に、７カウントとなる。以下に、当該補正動作について説明する。
【００６１】
区間Ｓ２〜Ｅ２においては、ブレーク区間Ｂ２〜Ｒ２でプログラムの実行を再開する直前の期間Ｗｔにおいて、図３のフローチャートに従い誤差の補正が行われる。本例は、ブレーク後に継続してプログラム実行をさせる場合を該当するため、ステップＳ１０１の判定においてＹＥＳが選択され、ステップＳ１０２においてブレーク前に実行した命令及びアドレスがブレーク前情報保持部３に保存される。
【００６２】
次に、プログラムを継続して実行させるため、再実行を開始するアドレス及びアドレス内の命令を再実行開始情報保持部４に保存する（ステップＳ１０４）。次に、ステップＳ１０２及びステップＳ１０４において保存した命令及びアドレスを、測定誤差演算部５に入力し、上述のようにシミュレーションによりクロック数Ｎ１，Ｎ２を算出する。なお、当該シミュレーションを行う手段は、パイプラインの合計クロック数を求めることができる演算器であれば、特にパイプラインシミュレータでなくても良い。
【００６３】
次に、上記式（１）により測定誤差Ｔを算出し（ステップＳ１０５）、カウンタ２の現在のカウント値から測定誤差Ｔを差し引き、カウンタ２に上書き保存する（ステップＳ１０６）。
【００６４】
ここで、ステップＳ１０２においてブレーク前情報保持部３に保存された命令は命令Ｂであり、ステップＳ１０４において再実行開始情報保持部４に保存された命令は命令Ｃである。通常時に命令Ｂ及び命令Ｃを連続して実行した場合のクロック数Ｎ１は４である。また、命令Ｂだけを実行するのに要するクロック数は３であり、命令Ｃだけを実行するのに要するクロック数は３であり、これらの合計クロック数Ｎ２は６である。従って、式（１）により、測定誤差Ｔ＝６−４＝２となる。そして、ブレーク状態におけるカウント値は４であるため、この値から測定誤差Ｔ＝２を差し引いた値である２を、カウンタ２の現在の値として上書きする（Ｓ１０６）。その後、ブレーク信号４７がハイになり、Ｒ２よりプログラムの実行が再開する（ステップＳ１０７）。
【００６５】
その後、Ｅ２に到達し、アドレスレジスタＢ３２に保持された測定終了アドレス及びプログラムカウンタ２２の値が一致すると計測信号４３はロウになり、最終的な測定結果として７カウント（測定値Ｍ２）が出力される。
【００６６】
以上のように、本実施の形態に係るプログラムデバッグ装置１によれば、プログラムの実行時間の測定中にブレークが発生した場合に、当該ブレークが発生する直前に実行された命令を特定する情報及び当該ブレークの終了後に再実行される命令を特定する情報に基づいて、ブレークにより幾つかの命令が無効にされたことに起因する誤差が補正される。これにより、ブレークがどのようなタイミングで発生しても、自動的に適切な補正値を設定することが可能となり、プログラムの実行時間を正確に測定することが可能となる。
【００６７】
なお、本発明は上記実施の形態に限られるものではなく、趣旨を逸脱しない範囲で適宜変更することが可能なものである。
【符号の説明】
【００６８】
１  プログラムデバッグ装置
２  カウンタ
３  ブレーク前情報保持部
４  再実行開始情報保持部
５  測定誤差演算部
１１  エミュレータ
１２  デバッガ
２１  アドレス設定保持部
２２  プログラムカウンタ
２３  被測定プログラム検出部
２５  ブレーク処理検出部
２６  基準クロック発生器
３１  アドレスレジスタＡ
３２  アドレスレジスタＢ
３６  比較回路Ａ
３７  比較回路Ｂ
３８  フリップフロップ
３９  ＡＮＤゲート
４２  表示制御部
４３  計測信号
４６  フリップフロップ
４７  ブレーク信号
４９  ユーザインターフェース
５０  時間測定処理部
５１  カウント保存部
【図１】
2013016010.tif 000003
【図２】
2013016010.tif 000004
【図３】
2013016010.tif 000005
【図４】
2013016010.tif 000006
【図５】
2013016010.tif 000007
【図６】
2013016010.tif 000008
【図７】
2013016010.tif 000009