(57)【要約】　　　（修正有）【課題】高速のＭＣＵのデバッグシステムにおいて、プログラムの分岐命令の分岐率を分析するためのトレースデータを取得することができるようにする。【解決手段】評価用ＭＣＵとそれに接続されるＩＣＥとを有するデバッグシステムにおいて、評価用ＭＣＵ内に設けられるＤＳＵが、実行される命令を監視して、分岐命令実行時に分岐命令フラグと、前回分岐実行以降の実行命令数と、分岐先アドレスとをトレースデータとしてＩＣＥに出力する。ＩＣＥまたはそれに接続されたホストコンピュータでは、上記分岐命令フラグに応答して、前回の分岐先アドレスと前回分岐実行以降の命令実行数とから分岐元アドレスを演算することで、分岐命令のアドレス（分岐元アドレス）を求めることができる。その結果、その分岐元アドレスと分岐先アドレスをもとにして、分岐命令の分岐率を求めることができる。【選択図】図１
2004021939.tif 000002
【特許請求の範囲】
【請求項１】
マイクロコントローラユニットのプログラムのデバッグシステムにおいて、
評価用マイクロコントローラユニットと外部トレースバスを介して接続されるインサーキットエミュレータとを有し、
前記評価用マイクロコントローラユニット内に、前記プログラム実行中に、実行される命令を監視して、分岐命令実行時に分岐命令フラグと、前回分岐実行以降の実行命令数と、分岐先アドレスとを前記外部トレースバスを経由して前記インサーキットエミュレータに出力するデバッグサポートユニットが設けられていることを特徴とするデバッグシステム。
【請求項２】
請求項１において、
前記インサーキットエミュレータまたはそれに接続されるホストコンピュータは、前回の分岐先アドレスと、前記分岐命令フラグと共に受信した前記実行命令数とにしたがって、当該分岐命令フラグに対応する分岐元アドレスを求めることを特徴とするデバッグシステム。
【請求項３】
請求項２において、
前記インサーキットエミュレータまたはそれに接続されるホストコンピュータは、前回の分岐先アドレスに前記実行命令数と前記プログラムの命令長との積を加算して、前記分岐元アドレスを求めることを特徴とするデバッグシステム。
【請求項４】
請求項１において、
前記デバッグサポートユニットは、前記プログラム実行中に、実行される命令を監視して、遅延分岐命令実行時に遅延分岐命令フラグと、前回分岐実行以降の実行命令数と、分岐先アドレスとを前記外部トレースバスを経由して前記インサーキットエミュレータに出力することを特徴とするデバッグシステム。
【請求項５】
請求項４において、
前記インサーキットエミュレータまたはそれに接続されるホストコンピュータは、前記実行命令数から前記遅延分岐命令の遅延スロット内命令数を減じた値と前記プログラムの命令長との積に、前回の分岐先アドレスを加算して、当該遅延分岐命令の分岐元アドレスを求めることを特徴とするデバッグシステム。
【請求項６】
請求項２または４において、
前記インサーキットエミュレータまたはそれに接続されるホストコンピュータは、更に、前記求めた分岐元アドレスと受信した分岐先アドレスとにしたがって、当該分岐元アドレスの分岐命令の分岐率を求めることを特徴とするデバッグシステム。
【請求項７】
請求項１において、
前記デバッグサポートユニットは、前記プログラム実行中に、実行される命令を監視して、割り込み発生時に当該割り込み発生時の命令アドレスと、割り込み発生フラグと、割り込みに伴う分岐先アドレスとを前記外部トレースバスを経由して前記インサーキットエミュレータに出力することを特徴とするデバッグシステム。
【請求項８】
請求項１において、
前記外部トレースバスは、アドレスバスと、命令数バスと、フラグバスとを有することを特徴とするデバッグシステム。
【請求項９】
請求項１において、
前記デバッグサポートユニットは、実行される命令を監視して、前記分岐命令の実行及び割り込み発生とを検出する実行命令判別部と、前記実行命令判別部からの指令に応答して、命令数をカウントする実行命令数カウンタと、実行中の命令のアドレスを保持する命令アドレスレジスタとを有することを特徴とするデバッグシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、マイクロコントローラユニットのデバッグシステムに関し、特に、分岐命令の分岐率を解析可能なデバッグシステムに関する。
【０００２】
【従来の技術】
マイクロコントローラユニット（以下ＭＣＵと称する）は、各種被制御装置の制御を行うための制御プログラムを実行することにより、当該被制御装置を制御する。この制御プログラムの開発には、多くの工数を有する。特に、開発した制御プログラムが適切に制御可能かどうかをチェックしながら、制御プログラムの修正を行うデバッグ工程では、制御プログラムの動作をトレースするツールが必要になる。
【０００３】
かかる開発段階でのデバッグ工程では、ＭＣＵの動作をある程度制御し、制御プログラム実行中のＭＣＵ内の状態をモニタするなどの機能を有するインサーキットエミュレータ（ＩＣＥ）をＭＣＵに接続して、エミュレータモードで制御プログラムを実行させることが行われる。このエミュレータモードでの動作を可能にするために、開発段階のＭＣＵ内にはＩＣＥへのアクセスを制御するデバッグサポートユニット（ＤＳＵ）が内蔵される。即ち、評価用のＭＣＵに内蔵されたＤＳＵは、ＩＣＥから供給される命令コードをＭＣＵ内のＣＰＵに実行させ、その時のＣＰＵの状態をＩＣＥに出力する。
【０００４】
この監視すべきＣＰＵの状態の一つに、制御プログラムのトレースデータがある。即ち、制御プログラムが適切に制御動作しているか、不適切な制御動作が発生した場合その原因はどこにあるのかなどを検証するためには、制御プログラムの実行にあたり、プログラムの各命令コードがどのように実行されているのかの命令実行履歴をトレースすることが有効な手段である。更に、命令実行履歴をもとに制御プログラム内の分岐命令の分岐率を調べることも、デバッグ工程では有効な方法である。前者の全ての命令の実行履歴をトレースする機能はＣ０カバレッジと呼ばれ、分岐命令の分岐率を測定する機能はＣ１カバレッジと呼ばれる。
【０００５】
従来のデバッグシステムでは、ＭＣＵの動作速度が低速であったため、ＭＣＵが実行する命令コードを全てトレースし、そのトレースデータから分岐命令の分岐率を求めることができた。更に、トレースデータ長が比較的短かったため、評価用ＭＣＵとＩＣＥとの接続用の入出力端子数はそれほど多くはなかった。
【０００６】
【発明が解決しようとする課題】
しかしながら、近年におけるＭＣＵは動作速度が飛躍的に速くなり、全ての命令実行履歴をＩＣＥに出力することが困難になっている。更に、ＲＩＳＣチップのように最低でも５０ＭＨｚの高い動作速度を有し、一つの命令コードの実行に対して複数のマイクロ命令が実行される場合は、そのマイクロ命令を全てトレースすることは更に困難である。
【０００７】
一方、ＭＣＵの動作を全てトレースするためには、評価用ＭＣＵとＩＣＥとの間に、多数のバス配線を接続する必要がある。このバス配線には、ＩＣＥから制御コマンドを与えるためのコントロールバスや、命令コードやデータをＩＣＥに出力するための命令コードバス、データバスなどが含まれる。特に、近年のＭＣＵは、命令長が長くなっており、トレースバスのバス幅が広くなり、接続用の入出力端子数が増大する傾向にある。
【０００８】
そこで、本発明の目的は、高速ＭＣＵに対して命令実行履歴を適切にトレースすることができ、分岐命令の分岐率を求めることができるデバッグシステムを提供することにある。
【０００９】
【課題を解決するための手段】
上記の目的を達成するために、本発明の一つの側面は、評価用ＭＣＵとそれに接続されるＩＣＥとを有するデバッグシステムにおいて、評価用ＭＣＵ内に設けられるＤＳＵが、実行される命令を監視して、分岐命令実行時に分岐命令フラグと、前回分岐実行以降の実行命令数と、分岐先アドレスとをトレースデータとしてＩＣＥに出力する。評価用ＭＣＵとＩＣＥとの間には、ＩＣＥから所望の制御命令を供給するコントロールバスと、評価用ＭＣＵから前記トレースデータを出力する外部トレースバスとが設けられる。
【００１０】
ＩＣＥまたはそれに接続されたホストコンピュータでは、上記分岐命令フラグに応答して、前回の分岐先アドレスと前回分岐実行以降の命令実行数とから分岐元アドレスを演算することで、分岐命令のアドレス（分岐元アドレス）を求めることができる。その結果、限られたトレースデータであっても、分岐命令に対する分岐元アドレスと分岐先アドレスとを逐一トレースすることができ、その分岐元アドレスと分岐先アドレスをもとにして、分岐命令の分岐率を求めることができる。
【００１１】
上記の分岐元アドレスの演算と分岐命令の分岐率の演算は、ＩＣＥにて行うことが好ましい。または、上記の分岐元アドレスの演算をＩＣＥにて行い、分岐率の演算をＩＣＥに接続されたホストコンピュータが行っても良い。或いは、ＩＣＥとホストコンピュータとの間に高速入出力バスを提供できる場合は、分岐元アドレスと分岐率の演算を、ホストコンピュータにて行うこともできる。いずれにしても、評価用ＭＣＵからＩＣＥへのトレースデータは、分岐命令実行時の分岐命令フラグ、前回分岐実行以降の実行命令数、分岐先アドレスに限定されるので、高速ＭＣＵであっても、トレースデータを取得することができる。
【００１２】
上記発明の側面において、好ましい実施例では、評価用ＭＣＵ内に設けられるＤＳＵが、実行される命令を監視して、分岐命令実行時の分岐命令フラグ、前回分岐実行以降の実行命令数、分岐先アドレスに加えて、割り込み発生時に当該割り込み発生時の命令アドレスと、割り込み発生フラグと、割り込みに伴う分岐先アドレスをトレースデータとしてＩＣＥに出力する。割り込み発生フラグを出力することで、ＩＣＥまたはホストコンピュータは、割り込み発生に伴う分岐動作を、通常の分岐命令実行による分岐動作と区別することができる。
【００１３】
更に、好ましい実施例では、評価用ＭＣＵ内に設けられるＤＳＵが、実行される命令を監視して、遅延分岐命令実行時に遅延分岐命令フラグと、前回分岐実行以降の実行命令数と、分岐先アドレスとをトレースデータとしてＩＣＥに出力する。遅延分岐命令フラグを出力することにより、ＩＣＥまたはホストコンピュータは、通常の分岐命令と区別して、遅延分岐命令のアドレスを適切に求めることができる。
【００１４】
【発明の実施の形態】
以下、図面を参照して本発明の実施の形態例を説明する。しかしながら、本発明の保護範囲は、以下の実施の形態例に限定されるものではなく、特許請求の範囲に記載された発明とその均等物にまで及ぶものである。
【００１５】
図１は、本実施の形態におけるデバッグシステムの構成図である。評価用のＭＣＵは、制御プログラムを実行する中央演算装置ＣＰＵと、外部バス制御などを行う入出力回路Ｉ／Ｏと、インサーキットエミュレータＩＣＥへのアクセスを制御するデバッグサポートユニットＤＳＵとを有する。ＭＣＵには、制御対象である被制御リソース１２や、制御プログラムやデータなどが格納された外部メモリ１４などが、入出力回路Ｉ／Ｏを介して接続される。
【００１６】
ＩＣＥは、評価用のＭＣＵと、コントロールバスＣ−ＢＵＳ及びトレースバスＴ−ＢＵＳとを介して接続される。また、ＩＣＥは、接続されるホストコンピュータ１０からの制御コマンドを評価用ＭＣＵに供給する外部コントローラ３２と、トレースバスＴ−ＢＵＳ経由で取得した圧縮されたトレースデータから、分岐命令の分岐率を求めるために必要な分岐元アドレスや分岐先アドレスを演算し、更に、それらをもとにして分岐命令の分岐率を演算するカバレッジ演算部３０とを有する。従って、図１の実施の形態では、ＩＣＥ内のカバレッジ演算部３０が、評価用ＭＣＵから限定的なトレースデータをトレースバスＴ−ＢＵＳ経由で取得して、Ｃ１カバレッジに対応する分岐命令の分岐率を求めて、接続されるホストコンピュータ１０に出力する。
【００１７】
ＩＣＥから評価用ＭＣＵへの制御命令には、例えば、制御プログラムを１命令ずつ実行するステップ実行、制御プログラムを連続的に実行して所望の命令で停止（ブレーク）させるブレーク命令、リセット命令など限られた命令が含まれる。これらの制御命令は、ホストコンピュータ１０から与えられ、ＩＣＥ内の外部コントローラ３２が、評価用ＭＣＵに適合する命令コードに変換して、コントロールバスＣ−ＢＵＳを経由してＤＳＵ内の外部コントローラ２４に与える。外部コントローラ２４は、それに応答して、制御信号を発生してＣＰＵの動作を制御する。
【００１８】
ＤＳＵは、ＣＰＵの命令実行履歴の全てをトレースせずに、分岐命令実行時や割り込み発生時など、分岐命令の分岐率を求めるに必要な特定のイベント発生時のデータをトレースして、トレースバスＴ−ＢＵＳを経由して、ＩＣＥに出力する。トレースバスＴ−ＢＵＳの構成は、例えば、３２ビットのアドレスバスＡＤＤと、３２ビットの実行命令数バスＣＵＮＴと、所定のフラグバスＦＬＧからなる。フラグバスＦＬＧは、プログラムの実行開始フラグと、分岐命令実行時の分岐命令フラグと、遅延分岐命令実行時の遅延分岐命令フラグと、割り込み発生時の割り込み発生フラグと、プログラムの実行終了フラグとをそれぞれ出力する。上記の例では、フラグバスＦＬＧは、５ビット構成になる。
【００１９】
それに対応して、ＤＳＵは、ＣＰＵが実行する命令コードを判別する実行命令判別部１８と、ＣＰＵが実行するプログラムのアドレスを一時的に格納する命令アドレスレジスタ１６と、命令実行毎にそれをカウントする実行命令数カウンタ２０と、前記イベントが発生した時に対応するフラグを格納するフラグレジスタ２２とを有する。
【００２０】
実行命令判別部１８は、ＣＰＵが実行する命令コードを判別して、プログラム実行開始時、分岐命令実行時、遅延分岐命令実行時、割込発生時、プログラム実行終了時を検出し、各イベントに対応するフラグをフラグレジスタ２２に格納し、フラグバスＦＬＧから出力させる。
【００２１】
また、実行命令判別部１８は、上記イベントの発生を検出し、その時の実行開始アドレスと、分岐命令実行に伴う分岐先アドレスと、遅延分岐命令実行に伴う分岐先アドレスと、割込発生時の命令アドレスと、その割込発生時に実行される分岐命令に伴う分岐先アドレスと、プログラム終了時の実行終了アドレスとを、命令アドレスレジスタ１６に格納させ、トレースバスＴ−ＢＵＳから出力させる。
【００２２】
更に、実行命令判別部１８は、分岐が実行される毎に実行命令数カウンタ２０をリセットし、命令が実行される毎に実行命令数カウンタ２０をインクリメントし、上記の分岐命令と遅延分岐命令実行時にその実行命令数カウンタ２０のカウント値をトレースバスＴ−ＢＵＳから出力させる。
【００２３】
上記のトレースバスＴ−ＢＵＳへの出力制御は、図示しない出力バッファに実行命令判別部がトリガを与えることで行ってもよい。
【００２４】
図２は、外部トレースバスＴ−ＢＵＳに出力されるトレースデータの一覧表の図表である。高速のＭＣＵに対して、命令実行履歴を全てトレースすることは困難である。従って、本実施の形態では、評価用ＭＣＵ内に設けたＤＳＵが、命令実行履歴の一部を圧縮してトレースする。
【００２５】
図２に示されるとおり、プログラム実行開始時は、命令アドレスレジスタ１６内の実行開始アドレスと、実行命令判別部１８により設定された実行開始フラグとがそれぞれ出力される。分岐命令実行時は、命令アドレスレジスタ１６内の分岐先アドレスと、実行命令数カウンタ２０内の前回の分岐実行後の実行命令数と、実行命令判別部１８により設定された分岐命令フラグとが、それぞれ出力される。遅延分岐命令実行時は、分岐先アドレスと、実行命令数と、遅延分岐命令フラグとがそれぞれ出力される。分岐命令実行時に、分岐元アドレスと分岐先アドレスの両方を出力することは、高速動作のため困難であるので、分岐元アドレスの演算に必要な前回分岐実行後の実行命令数を、分岐先アドレスと共に出力する。これらの情報は、トレースバスＴ−ＢＵＳのアドレスバスＡＤＤと命令数バスＣＵＮＴとを利用して、並列に出力することができる。
【００２６】
そして、割込発生時は、割込発生時の命令アドレスと、割込発生フラグとが出力され、その直後に、割込処理後の割込処理命令の先頭番地である分岐先アドレスが出力される。割込発生時は、割込発生後、その割込処理ルーチンに分岐する前に、割込処理を行う必要があり、その割込処理後に割込処理ルーチンへの分岐先アドレスが生成される。従って、割込発生時は、分岐命令実行時と異なり時間的余裕があるので、割込発生時の命令アドレスと、割込に伴う分岐先アドレスとをそれぞれ出力することができる。
【００２７】
最後に、プログラム実行終了時には、実行終了アドレスと実行終了フラグとがそれぞれ出力される。
【００２８】
図３は、本実施の形態における命令実行履歴とトレースバス動作との関係を示す図である。図３中の左側には、一例としてのプログラムＰＧＭが示されている。このプログラムＰＧＭは、アドレス１００ｈ〜４１４ｈにそれぞれ命令長２バイトの命令が記述されているものとする。プログラムには、保存命令ＳＴ、ロード命令ＬＤ、分岐命令ＢＲＡ、比較命令ＣＭＰ、条件分岐命令ＢＮＥ、終了命令ＥＮＤなどが含まれる。
【００２９】
このようなプログラムをデバッグする場合、事前にプログラムコード分析が行われ、どの番地にどの命令が記述されているかが確認される。そして、図１に示したデバッグシステムにおいて、プログラムを実行し、その実行命令履歴の一部の履歴を、ＤＳＵからトレースバスＴ−ＢＵＳを介してＩＣＥに出力する。
【００３０】
図３の中央に、プログラムを実行した時の命令実行履歴が示され、黒丸で示した実行命令がプログラムＰＧＭのどれに対応するかが示される。また、図３の右側には、上記命令実行履歴に対応して、トレースバスの動作が示される。プログラムの実行開始に伴いアドレス１００ｈの命令ＳＴが実行される。この時、実行命令判別部１８が実行開始を判別して、命令アドレスレジスタ１６にその命令アドレスを取り込ませ、フラグレジスタ２２の実行開始フラグをオンにする。それに伴い、トレースバスＴ−ＢＵＳには、実行開始アドレスと実行開始フラグとが出力される（Ｓ１）。この時、実行命令数カウンタ２０はリセットされる。
【００３１】
プログラム開始後、プログラムＰＧＭの各命令がアドレス順に実行され、実行命令判別部１８が命令の実行のたびに実行命令数カウンタ２０をインクリメントする。やがてアドレス２０４ｈの分岐命令ＢＲＡが実行される。この分岐命令ＢＲＡの実行が、ＤＳＵの実行命令判別部１８により検出され、それに応答して、分岐命令フラグがオンにされ、実行命令数カウンタ２０のカウント値が出力され、命令アドレスレジスタ１６が取り込んだ分岐先アドレスが出力される。つまり、分岐命令実行に伴い、分岐命令フラグと前回分岐命令実行後（若しくは命令実行開始後）の実行命令数と分岐先アドレスとがトレースバスのそれぞれ対応するバスＡＤＤ、ＣＵＮＴから並列に出力される（Ｓ２）。この時、実行命令数カウンタ２０は、リセットされる。
【００３２】
上記トレースされた実行開始アドレスと、分岐命令実行時の実行命令数とから、分岐元アドレスを演算することができる。即ち、各命令が２バイトの命令長を有するので、分岐元アドレスは、次の演算式で求められる。
分岐元アドレス＝実行開始アドレス＋（実行命令数×命令長）
図３の例では、実行開始アドレスが１００ｈ、実行命令数が５２ｈ命令であるので、分岐元アドレスは、
１００ｈ＋（５２ｈ×２）＝２０４ｈ
と求められる。
【００３３】
図１のデバッグシステムでは、ＩＣＥ内のカバレッジ演算部３０が、トレースデータから上記演算により分岐元アドレスを求める。この結果、演算により求めた分岐元アドレスとトレースデータとして取得した分岐先アドレスにより、分岐時の命令実行履歴をトレースすることができる。分岐元アドレスから実行された分岐命令を知ることができ、また、分岐先アドレスが分岐元アドレスの次のアドレスであれば、分岐は発生しなかったことを、次のアドレスでなければ、分岐は発生したことをそれぞれ示す。従って、分岐命令の分岐率を求めることができる。図１のデバッグシステムでは、カバレッジ演算部３０が分岐率まで求めてホストコンピュータ１０に出力する。
【００３４】
図３に戻り、アドレス２０４ｈの分岐命令ＢＲＡの実行により、分岐先アドレスＡ００ｈに分岐し、その後分岐先の命令が順次実行される。やがて、分岐先命令において分岐命令が実行され、図３の例では、アドレス２０６ｈの命令ＳＴに分岐している。この分岐命令の実行時も、前述と同様に、分岐命令フラグと、実行命令数と、分岐先アドレスとが出力され（Ｓ３）、実行命令数カウンタ２０がリセットされる。従って、この分岐命令の実行に対しても、分岐元アドレスを求めることができ、分岐命令の分岐率を求めることができる。但し、この場合の分岐元アドレスは、
分岐元アドレス＝前回の分岐先アドレス＋（実行命令数×命令長）
により求められる。
【００３５】
更に、アドレス２０６ｈから順次命令が実行され、アドレス３０Ｃｈの遅延分岐命令ＢＮＥが実行される。遅延分岐命令とは、分岐命令の直後に記述された命令を実行した後に、分岐先命令を実行する命令であり、分岐命令の実行サイクルと実際に分岐を実行するサイクルとの間に、遅延スロットが置かれ、その遅延スロットで分岐命令直後の所定数の命令が実行される。この遅延スロットにおける命令数は、プログラムの仕様により決められている。図３の例では、遅延分岐命令ＢＮＥの遅延スロットには、１命令が実行されるものとする。従って、アドレス３０Ｃｈの遅延分岐命令ＢＮＥが実行される時、次のアドレス３０Ｅｈの命令ＬＤが実行された後に、分岐命令ＢＮＥの分岐が実行されて、分岐先アドレスＢ００ｈに分岐している。
【００３６】
遅延分岐命令実行時には、分岐命令実行時と同様に、遅延分岐命令フラグと、実行命令数と、分岐先アドレスとがトレースバスから出力される。より厳密には、分岐が実行されるときの分岐先アドレスとその時点での実行命令数が出力される（Ｓ４）。そして、実行命令数カウンタ２０がリセットされる。
【００３７】
ＩＣＥ内のカバレッジ演算部３０は、遅延分岐フラグにより遅延スロットに１命令が加えられることが判明しているので、遅延元アドレスを次の演算式により求める。
遅延元アドレス＝前回の分岐先アドレス＋｛（実行命令数−１）×命令長｝
つまり、前回の分岐命令実行後の実行命令数から遅延スロットに置かれた命令数１を減じた命令数が、遅延分岐命令までの実行命令数に該当する。これにより、遅延分岐命令ＢＮＥの分岐元アドレス３０Ｃｈが演算により求められ、それと分岐先アドレスとから、遅延分岐命令の分岐率を求めることができる。
【００３８】
図３にもどり、分岐先の一連の命令が順番に実行され、やがて分岐命令が実行される。この時は、通常の分岐命令実行時と同様に、分岐命令フラグと、実行命令数と、分岐先アドレスとがトレースバスから出力される（Ｓ５）。そして、実行命令数カウンタ２０がリセットされる。この時の分岐元アドレスの算出は前述の通りである。
【００３９】
上記の分岐先アドレスは３１０ｈであり、そのアドレスの命令ＳＴ以下の命令が順次実行され、最後にアドレス４１４ｈの命令ＥＮＤが実行される。この時は、実行終了アドレスと実行終了フラグとがトレースバスから出力される（Ｓ６）。
【００４０】
図４は、本実施の形態における割込発生を伴う命令実行履歴とトレースバス動作との関係を示す図である。この例では、アドレス３０８ｈの命令ＬＤ実行中に割込が発生している。従って、プログラムＰＧＭのアドレス３０８ｈの実行までは、図３と同じであり、トレースバスの動作も工程Ｓ１，Ｓ２，Ｓ３と同じである。
【００４１】
割込の発生は、割込処理の実行に伴い、実行命令判別部１８が検出し、割込発生フラグをオンにし、その時の命令アドレスを命令アドレスレジスタ１６に取り込み、それらをトレースバスから出力させる（Ｓ１０）。割込が発生すると、その時の命令を一時的に中断し、必要なデータの退避などが行われる。そして、割り込みに対応する割り込みルーチンの先頭アドレスを取得するベクタフェッチが実行される。そして、ベクタフェッチで取得した割り込みルーチンの先頭アドレスへの分岐命令が実行される。この分岐命令実行時に、その分岐先アドレスが命令アドレスレジスタ１６に取り込まれ、トレースバスから出力される（Ｓ１１）。
【００４２】
このように、割り込みが発生すると、割り込み発生の検出に伴い、その時の命令アドレスが分岐元アドレスとして出力される。そして、データの退避やベクタフェッチ動作後の分岐命令実行時に、分岐先アドレスが出力される。この時、実行命令数は出力されずに、実行命令数カウンタ２０はリセットされる。割り込み発生に伴い割り込み処理が実行されので、通常の分岐命令と異なり、分岐元アドレスと分岐先アドレスとを両方ともトレースバスから出力することができる。
【００４３】
図３の例では、割り込み処理が終了すると、通常の分岐命令が実行され、割り込み発生時のアドレス３０８ｈの命令ＬＤに復帰している。従って、その分岐命令実行に伴い、分岐命令フラグと、実行命令数と、分岐先アドレスとがトレースバスから出力される（Ｓ１２）。その後は、図３と同じである。
【００４４】
割り込みが発生したことに伴う分岐命令の実行は、通常の分岐命令の実行とは区別される。それは、割り込み発生フラグによって、カバレッジ演算部３０は区別することができる。割り込み発生に伴う分岐命令の実行には、分岐率の演算は必要ない。但し、どのアドレスで割り込みが発生したかの履歴は残るので、デバッグ処理に対して何らかの役に立てることはできる。
【００４５】
図５は、カバレッジ演算部３０の動作を示すフローチャート図である。図５の例では、カバレッジ演算部３０は、プログラム実行中にトレースバスから供給されるトレースデータを蓄積し、その都度分岐命令実行時の分岐元アドレスを演算して蓄積し、プログラム実行終了後に、蓄積したトレースデータから分岐命令の分岐率を演算する。
【００４６】
カバレッジ演算部３０は、プログラム開始フラグを受信すると（Ｓ２０）、プログラム開始アドレスを図示しないトレースメモリに記録する（Ｓ２１）。同様に、分岐命令フラグを受信すると、分岐元アドレスを演算し、記録し、更に受信した分岐先アドレスも記録する（Ｓ２２，Ｓ２５）。
【００４７】
更に、カバレッジ演算部３０は、遅延分岐命令フラグを受信すると、分岐元アドレスを演算、記録し、受信した分岐先アドレスを記録する（Ｓ２４，Ｓ２６）。また、割り込み発生フラグを受信すると、受信した割り込み発生時のアドレスを記録し、更に受信した分岐先アドレスを記録する。上記の動作が、プログラム実行終了フラグを受信するまで繰り返される。そして、最後にプログラム実行終了フラグを受信すると、受信したプログラム実行終了アドレスを記録する（Ｓ２８，Ｓ２９）。
【００４８】
以上でトレースデータから分岐命令や割り込み発生時についての命令実行履歴を蓄積することができる。その後、カバレッジ演算部３０は、分岐元アドレスと分岐先アドレスとから、各分岐命令の分岐率を求めて（Ｓ３０）、求めた分岐率をホストコンピュータ１０に出力する（Ｓ３１）。
【００４９】
図５のカバレッジ演算部３０は、プログラム実行中にトレースデータを受信するたびに、分岐命令実行時の分岐元アドレスを演算している。そのために、カバレッジ演算部内にその演算を行う論理回路を設ける。専用の論理回路により、高速に分岐元アドレスを演算することができる。但し、この演算を全てのプログラム実行が終了した後で行うこともできる。
【００５０】
図６は、分岐率であるＣ１カバレッジの出力例を示す図である。図６（Ａ）の例は、図３，４に示したプログラムコード内の分岐命令ＢＲＡ、ＢＮＥの右横に、その分岐命令の実行回数と分岐率（％）とが記述された出力例である。これの出力を見ることで、プログラムコードのどこでどの程度の分岐が発生しているかを知ることができ、プログラムのデバッグに役立てることができる。
【００５１】
図６（Ｂ）の例は、分岐命令の番地２０４ｈと３０Ｃｈのそれぞれで、分岐命令回数と分岐率（％）とを示す出力例である。この場合は、分岐命令以外のプログラムコードを出力する必要がない。これ以外にも、Ｃ１カバレッジの出力例は種々考えられる。
【００５２】
図７は、本実施の形態のデバッグシステムの変形例を示す図である。図１と同じ構成要素には同じ番号を与えている。図７の例では、ＩＣＥは、トレースバスから受信するトレースデータから、分岐命令実行時の分岐元アドレスの演算のみ行い、分岐先アドレスなどと共にトレースバッファ３４に蓄積する。そして、その蓄積したトレースデータは、ホストコンピュータ１０に出力され、ホストコンピュータ１０にインストールされている分岐率演算プログラムにより、分岐命令の分岐率が演算される。
【００５３】
更に、本実施の形態の別のデバッグシステムでは、ＩＣＥがトレースバスから受信するトレースデータを蓄積して、その蓄積したトレースデータをホストコンピュータ１０に出力する。ホストコンピュータ１０では、そのトレースデータから分岐命令実行時の分岐元アドレスを演算し、更に分岐率を演算する。
【００５４】
また、本実施の形態の別のデバッグシステムでは、ＩＣＥとホストコンピュータ１０との間に高速データバスを設け、ＩＣＥがトレースバスから受信するトレースデータを全てオンラインでホストコンピュータに出力する。従って、ホストコンピュータは、オンラインで分岐命令の分岐率の変化を出力することができ、時間軸上の分岐率の変化を表示することができる。
【００５５】
以上、実施の形態例をまとめると以下の付記の通りである。
【００５６】
（付記１）マイクロコントローラユニットのプログラムのデバッグシステムにおいて、
評価用マイクロコントローラユニットと外部トレースバスを介して接続されるインサーキットエミュレータとを有し、
前記評価用マイクロコントローラユニット内に、前記プログラム実行中に、実行される命令を監視して、分岐命令実行時に分岐命令フラグと、前回分岐実行以降の実行命令数と、分岐先アドレスとを前記外部トレースバスを経由して前記インサーキットエミュレータに出力するデバッグサポートユニットが設けられていることを特徴とするデバッグシステム。
【００５７】
（付記２）付記１において、
前記インサーキットエミュレータまたはそれに接続されるホストコンピュータは、前回の分岐先アドレスと、前記分岐命令フラグと共に受信した前記実行命令数とにしたがって、当該分岐命令フラグに対応する分岐元アドレスを求めることを特徴とするデバッグシステム。
【００５８】
（付記３）付記２において、
前記インサーキットエミュレータまたはそれに接続されるホストコンピュータは、前回の分岐先アドレスに前記実行命令数と前記プログラムの命令長との積を加算して、前記分岐元アドレスを求めることを特徴とするデバッグシステム。
【００５９】
（付記４）付記１において、
前記デバッグサポートユニットは、前記プログラム実行中に、実行される命令を監視して、遅延分岐命令実行時に遅延分岐命令フラグと、前回分岐実行以降の実行命令数と、分岐先アドレスとを前記外部トレースバスを経由して前記インサーキットエミュレータに出力することを特徴とするデバッグシステム。
【００６０】
（付記５）付記４において、
前記インサーキットエミュレータまたはそれに接続されるホストコンピュータは、前記実行命令数から前記遅延分岐命令の遅延スロット内命令数を減じた値と前記プログラムの命令長との積に、前回の分岐先アドレスを加算して、当該遅延分岐命令の分岐元アドレスを求めることを特徴とするデバッグシステム。
【００６１】
（付記６）付記２または４において、
前記インサーキットエミュレータまたはそれに接続されるホストコンピュータは、更に、前記求めた分岐元アドレスと受信した分岐先アドレスとにしたがって、当該分岐元アドレスの分岐命令の分岐率を求めることを特徴とするデバッグシステム。
【００６２】
（付記７）付記１において、
前記デバッグサポートユニットは、前記プログラム実行中に、実行される命令を監視して、割り込み発生時に当該割り込み発生時の命令アドレスと、割り込み発生フラグと、割り込みに伴う分岐先アドレスとを前記外部トレースバスを経由して前記インサーキットエミュレータに出力することを特徴とするデバッグシステム。
【００６３】
（付記８）付記１において、
前記外部トレースバスは、アドレスバスと、命令数バスと、フラグバスとを有することを特徴とするデバッグシステム。
【００６４】
（付記９）付記１において、
前記デバッグサポートユニットは、前記プログラム実行中に、実行される命令を監視して、プログラム実行開始時に実行開始アドレスと実行開始フラグとを前記外部トレースバスを経由して前記インサーキットエミュレータに出力することを特徴とするデバッグシステム。
【００６５】
（付記１０）付記１において、
前記デバッグサポートユニットは、前記プログラム実行中に、実行される命令を監視して、プログラム実行終了時に実行終了アドレスと実行終了フラグとを前記外部トレースバスを経由して前記インサーキットエミュレータに出力することを特徴とするデバッグシステム。
【００６６】
（付記１１）付記１において、
前記デバッグサポートユニットは、実行される命令を監視して、前記分岐命令の実行及び割り込み発生とを検出する実行命令判別部と、前記実行命令判別部からの指令に応答して、命令数をカウントする実行命令数カウンタと、実行中の命令のアドレスを保持する命令アドレスレジスタとを有することを特徴とするデバッグシステム。
【００６７】
【発明の効果】
以上、本発明によれば、高速のＭＣＵのデバッグシステムにおいて、プログラムの分岐命令の分岐率を分析するためのトレースデータを取得することができる。
【図面の簡単な説明】
【図１】本実施の形態におけるデバッグシステムの構成図である。
【図２】外部トレースバスＴ−ＢＵＳに出力されるトレースデータの一覧表の図表である。
【図３】本実施の形態における命令実行履歴とトレースバス動作との関係を示す図である。
【図４】本実施の形態における割込発生を伴う命令実行履歴とトレースバス動作との関係を示す図である。
【図５】カバレッジ演算部３０の動作を示すフローチャート図である。
【図６】分岐率であるＣ１カバレッジの出力例を示す図である。
【図７】本実施の形態のデバッグシステムの変形例を示す図である。
【符号の説明】
ＭＣＵ　　　　マイクロコントローラユニット
ＤＳＵ　　　　デバッグサポートユニット
ＩＣＥ　　　　インサーキットエミュレータ
Ｔ−ＢＵＳ　　トレースバス
１０　　　　　ホストコンピュータ
１６　　　　　命令アドレスレジスタ
１８　　　　　実行命令判別部
２０　　　　　実行命令数カウンタ
【図１】
2004021939.tif 000003
【図２】
2004021939.tif 000004
【図３】
2004021939.tif 000005
【図４】
2004021939.tif 000006
【図５】
2004021939.tif 000007
【図６】
2004021939.tif 000008
【図７】
2004021939.tif 000009