(57)【要約】【課題】  命令コードの実行時間を低下させることなく、効率よくマイクロコンピュータのプログラムトレースができる。【解決手段】  複数の命令ユニット１０４と、プログラムの命令コードを命令レジスタ１０２に転送し、命令コードに該当する命令ユニットを選択する命令デコーダ１０３とを有し、命令ユニット毎に例外を発生させるか否かを設定するステータスフラグを記憶するステータスレジスタ１１１と、プログラムに記述されたステータスフラグの状態を設定する設定コードに従いステータスフラグを更新するステータス更新部１１０と、命令ユニットが選択された時点で、命令ユニットに対応するステータスフラグをチェックし、ステータスフラグがオン状態の場合に例外を発生する命令ユニット毎に設けられた例外発生部１５１と、例外が発生したか否かを監視し、例外が発生した時点でプログラムカウンタの値をデータ記憶領域１２に書き込む。【選択図】      図１
2007086966.tif 000002
【特許請求の範囲】
【請求項１】
プログラム記憶領域と、データ記憶領域と、データトレース部と、を有する外部メモリと、
複数の命令ユニットと、プログラムカウンタと、前記外部メモリのプログラム記憶領域に記憶されたプログラムから順次命令コードを命令レジスタに転送する命令フェッチと、前記命令コードに該当する前記命令ユニットを選択し前記命令コードを実行させる命令デコーダと、からなるマイクロコンピュータと、
を有し、
前記マイクロコンピュータは、さらに、
前記複数の命令ユニットの各々に例外発生通知信号を出力させる（オン状態）か否か（オフ状態）を設定するステータスフラグを記憶するステータスレジスタと、
前記プログラムに記述された前記ステータスフラグの状態を設定する設定コードに従い前記ステータスレジスタに記憶されている前記ステータスフラグを更新するステータス更新部と、
前記命令ユニットが選択された時点で、前記命令ユニットに対応する前記ステータスフラグをチェックし、前記ステータスフラグがオン状態の場合に前記例外発生通知信号を出力する前記複数の命令ユニットの各々に設けられた例外発生部と、
前記例外発生通知信号を受信したか否かを判定し、前記例外発生通知信号を受信した時点で前記プログラムカウンタの値を前記データ記憶領域に書き込む処理を前記データトレース部に指示する例外処理部と、
を有する、
ことを特徴とするプログラムトレース装置。
【請求項２】
請求項１に記載のプログラムトレース装置において、前記例外発生部は、分岐命令コードを含む前記命令ユニットに搭載される、ことを特徴とするプログラムトレース装置。
【請求項３】
請求項１または２に記載のプログラムトレース装置において、前記ステータスフラグは、さらに、前記命令ユニットの個々の命令に対してサブステータスフラグが設定され、前記例外発生部は、前記サブステータスフラグがオン状態の場合に前記例外発生通知信号を出力する、ことを特徴とするプログラムトレース装置。
【請求項４】
プログラム記憶領域と、データ記憶領域と、データトレース部と、を有する外部メモリと、
複数の命令ユニットと、プログラムカウンタと、前記外部メモリのプログラム記憶領域に記憶されたプログラムから順次命令コードを命令レジスタに転送する命令フェッチと、前記命令コードに該当する前記命令ユニットを選択し前記命令コードを実行させる命令デコーダと、からなるマイクロコンピュータと、
を有し、
前記複数の命令ユニットの各々に例外発生通知信号を出力させる（オン状態）か否か（オフ状態）を設定するステータスフラグを記憶するステータスフラグ記憶工程と、
前記プログラムに記述された前記ステータスフラグの状態を設定する設定コードに従い前記ステータスレジスタに記憶されている前記ステータスフラグを更新するステータス更新工程と、
前記命令ユニットが選択された時点で、前記命令ユニットに対応する前記ステータスフラグをチェックし、前記ステータスフラグがオン状態の場合に前記例外発生通知信号を出力する前記複数の命令ユニットの各々に設けられた例外発生工程と、
前記例外発生通知信号を受信したか否かを判定し、前記例外発生通知信号を受信した時点で前記プログラムカウンタの値を前記データ記憶領域に書き込む処理を前記データトレース部に指示する例外処理工程と、
からなる、
ことを特徴とするプログラムトレース方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロコンピュータを利用した処理システムのソフトウェア開発を支援するプログラムトレース装置及び方法に関する。
【背景技術】
【０００２】
一般に、開発中のハードウェアをデバッグする場合には、ホストコンピュータと開発中のシステムをＩＣＥ（In Circuit Emulator）を介して接続し、このハードウェア上で動作するソフトウェアの動作状態をトレースすることがある。また、一方では、開発中のハードウェアのプロセッサに、デバッグ用コード（デバッグモニタ等）を組み込み、そのデバッグ用コードを介して、ホストコンピュータと開発中のハードウェアを接続し、同ハードウェアが備えるＣＰＵにて動作するソフトウェアの動作状態をトレースすることがある。上記のような不具合の原因を解析するには、上記に示したハードウェアのＣＰＵ上にて動作するソフトウェアの動作状態をトレースできるデバッグシステムを用いて、ハードウェアに関するログ情報を収集するコードを埋め込んだソフトウェアを動作させ、バグが発生した時点で、ソフトウェアを停止させ、ログを解析する。
【０００３】
しかし、ログ情報を収集するコードを挿入してソフトウェアを実行させると、プログラムサイズの変化やメモリの使用状況の変化により不具合が発生しないことがある。
【０００４】
この問題を解決するために、例えば特許文献１には、エミュレーションメモリを配置し、ＣＰＵが実行する命令コードのアドレスをアドレス情報記憶部に採取し、アドレス情報記憶部内のアドレスの指す命令コードが更新される際には、更新される前の命令コードを命令情報記憶部に退避させ記憶させ、アドレス情報記憶部のアドレスに基づいて命令コードを命令メモリから読み出し、命令コードが更新されている場合には命令メモリでなく命令情報記憶部から命令コードを読み出すことによりプログラムトレースを生成する方法が記載されている。
【０００５】
【特許文献１】特開２００３−５０７１７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１では、エミュレーションメモリを配置する必要があるため回路規模が大きくなる、という問題があった。
【０００７】
本発明は、このような事情に鑑みてなされたものであり、ＩＣＥを必要とせず、回路規模を増大させること無く、効率よくマイクロコンピュータのプログラムトレースができるプログラムトレース装置及び方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、本発明のプログラムトレース装置では、プログラム記憶領域と、データ記憶領域と、データトレース部と、を有する外部メモリと、複数の命令ユニットと、プログラムカウンタと、前記外部メモリのプログラム記憶領域に記憶されたプログラムから順次命令コードを命令レジスタに転送する命令フェッチと、前記命令コードに該当する前記命令ユニットを選択し前記命令コードを実行させる命令デコーダと、からなるマイクロコンピュータと、を有し、前記マイクロコンピュータは、さらに、前記複数の命令ユニットの各々に例外発生通知信号を出力させる（オン状態）か否か（オフ状態）を設定するステータスフラグを記憶するステータスレジスタと、前記プログラムに記述された前記ステータスフラグの状態を設定する設定コードに従い前記ステータスレジスタに記憶されている前記ステータスフラグを更新するステータス更新部と、前記命令ユニットが選択された時点で、前記命令ユニットに対応する前記ステータスフラグをチェックし、前記ステータスフラグがオン状態の場合に前記例外発生通知信号を出力する前記複数の命令ユニットの各々に設けられた例外発生部と、前記例外発生通知信号を受信したか否かを判定し、前記例外発生通知信号を受信した時点で前記プログラムカウンタの値を前記データ記憶領域に書き込む処理を前記データトレース部に指示する例外処理部と、を有する、ことを要旨とする。
【０００９】
この構成によれば、プログラムの命令コードに応じた命令ユニットを命令デコーダが選択した時点で例外発生部がステータスフラグをチェックし、例外発生通知信号を出力させるオン状態になっている場合、例外発生通知信号を出力し、例外発生通知信号を受信した時点でのプログラムカウンタの値をトレースすることができるので、プログラムの命令コードにデバッグコードを埋め込む必要が無く、実際のプログラムを実行させた状態でのプログラムトレースを行うことができるので、ＩＣＥを必要とせず、回路規模を増大させること無く、プログラムの不具合を的確に把握することができる。
【００１０】
また、本発明のプログラムトレース装置では、前記例外発生部は、分岐命令コードを含む前記命令ユニットに搭載される。
【００１１】
この構成によれば、分岐命令コードを含む命令ユニットが選択された時点でプログラムトレースを行うことができ、プログラムの不具合を的確に把握することができる。
【００１２】
また、本発明のプログラムトレース装置では、前記ステータスフラグは、さらに、前記命令ユニットの個々の命令に対してサブステータスフラグが設定され、前記例外発生部は、前記サブステータスフラグがオン状態の場合に例外発生通知信号を出力する。
【００１３】
この構成によれば、命令ユニットの個々の命令に対して例外発生通知信号を出力させることができるので、より詳細にプログラムの不具合を的確に把握することができる。
【００１４】
また、本発明のプログラムトレース方法では、プログラム記憶領域と、データ記憶領域と、データトレース部と、を有する外部メモリと、複数の命令ユニットと、プログラムカウンタと、前記外部メモリのプログラム記憶領域に記憶されたプログラムから順次命令コードを命令レジスタに転送する命令フェッチと、前記命令コードに該当する前記命令ユニットを選択し前記命令コードを実行させる命令デコーダと、からなるマイクロコンピュータと、を有し、前記複数の命令ユニットの各々に例外発生通知信号を出力させる（オン状態）か否か（オフ状態）を設定するステータスフラグを記憶するステータスフラグ記憶工程と、前記プログラムに記述された前記ステータスフラグの状態を設定する設定コードに従い前記ステータスレジスタに記憶されている前記ステータスフラグを更新するステータス更新工程と、前記命令ユニットが選択された時点で、前記命令ユニットに対応する前記ステータスフラグをチェックし、前記ステータスフラグがオン状態の場合に前記例外発生通知信号を出力する前記複数の命令ユニットの各々に設けられた例外発生工程と、前記例外発生通知信号を受信したか否かを判定し、前記例外発生通知信号を受信した時点で前記プログラムカウンタの値を前記データ記憶領域に書き込む処理を前記データトレース部に指示する例外処理工程と、からなる。
【００１５】
この構成によれば、プログラムの命令コードに応じた命令ユニットを命令デコーダが選択した時点で例外発生部がステータスフラグをチェックし、例外発生通知信号を出力させるオン状態になっている場合、例外発生通知信号を出力し、例外発生通知信号を受信した時点でのプログラムカウンタの値をトレースすることができるので、プログラムの命令コードにデバッグコードを埋め込む必要が無く、実際のプログラムを実行させた状態でのプログラムトレースを行うことができるので、ＩＣＥを必要とせず、回路規模を増大させること無く、プログラムの不具合を的確に把握することができる。
【発明を実施するための最良の形態】
【００１６】
以下、本発明を具体化した実施形態について図面に従って説明する。
（第１実施形態）
【００１７】
＜プログラムトレース装置の構成＞
図１は、本発明の一実施形態に係るプログラムトレース装置の全体構成図である。
【００１８】
図１に示すように、プログラムトレース装置１は、外部メモリ１０と、マイクロコンピュータ１００と、から構成される。プログラムトレース装置１は、さらに、ＵＳＢ（Universal Serial Bus）などのシリアル通信インターフェースを有し、デバッグ用ＰＣ２０をＵＳＢケーブル２１で接続してプログラムのデバッグを行う。
【００１９】
外部メモリ１０は、マイクロコンピュータ１００を動作させるためにデバッグ用ＰＣ２０からＵＳＢケーブル２１により転送されるプログラムを記憶するプログラム記憶領域１１と、データ記憶領域１２と、データトレース部１３を有する。
【００２０】
マイクロコンピュータ１００は、外部メモリ１０のプログラム記憶領域１１に記憶されたプログラムから命令コードを読み込み、命令レジスタ１０２に格納する命令フェッチ１０１と、命令レジスタ１０２に格納された命令コードを１つずつ解読し、命令コードに対応する命令ユニット１０４を選択し、命令コードを実行させる命令デコーダ１０３と、命令ユニット１０４が命令コードを実行する際に命令コードが扱うデータを格納する汎用レジスタ１０５と、プログラムカウンタ１０６と、を有する。
【００２１】
本実施形態では、命令ユニット１０４は、ステータス更新部１１０と、乗算ユニット１２０と、加減算／シフトユニット１３０と、ロード／ストアユニット１４０と、ブランチ／ジャンプユニット１５０から構成されている。
【００２２】
プログラムの命令コードには、図２（Ａ）に示すように、命令ユニット１０４のそれぞれのユニット毎に例外発生通知信号を出力させる（オン状態＝１）か否か（オフ状態＝０）を設定するステータスフラグが記述されている。例えば、図２（Ａ）の（１）行目のＳＥＴ  ＪＵＭＰ＿ＵＮＩＴ＿ＦＬＡＧ＝１は、ブランチ／ジャンプユニット１５０のステータスフラグＪＵＭＰ＿ＵＮＩＴ＿ＦＬＡＧをオン状態にする設定である。
【００２３】
命令デコーダ１０３は、図２（Ａ）の命令コードを解読し、ステータス更新部１１０を選択する。ステータス更新部１１０は、図２（Ａ）の命令コードに従い、マイクロコンピュータ１００が有するステータスレジスタ１１１のステータスフラグの値を図２（Ｂ）に示すように更新する。例えば、図２（Ｂ）の（１）行目は、ブランチ／ジャンプユニット１５０のステータスフラグＪＵＭＰ＿ＵＮＩＴ＿ＦＬＡＧがオン状態である１に設定される。
【００２４】
乗算ユニット１２０と加減算／シフトユニット１３０とロード／ストアユニット１４０は、汎用レジスタ１０５の所定のアドレスの領域を使い、演算やデータの置き換えを行う。
【００２５】
ブランチ／ジャンプユニット１５０は、条件判定を行い条件を満たした場合に分岐するブランチ命令ＢＥＱと、無条件に分岐するジャンプ命令Ｊと、関数を呼び出すＣＡＬＬ命令を含む。プログラムトレース装置１は、プログラムの実行過程において分岐命令コードをトレースすることにより、プログラムのコーディングミスなどを詳細に追うことが可能となる。従って、本実施形態のプログラムトレース装置１は、ブランチ／ジャンプユニット１５０に、命令デコーダ１０３から選択された時点で例外発生通知信号を出力するか否かを判断する例外発生部１５１を搭載している。
【００２６】
ブランチ／ジャンプユニット１５０に搭載された例外発生部１５１は、ステータスレジスタ１１１に記憶されたステータスフラグＪＵＭＰ＿ＵＮＩＴ＿ＦＬＡＧの設定に従い、オン状態の場合に例外発生通知信号を出力する。
【００２７】
なお、ステータス更新部１１０と乗算ユニット１２０と加減算／シフトユニット１３０とロード／ストアユニット１４０は、分岐命令コードを有しないため、例外発生部は搭載されない。
【００２８】
マイクロコンピュータ１００は、さらに、例外処理部１６０を有し、例外発生通知信号を受信したか否かを判定し、例外発生通知信号を受信した時点でデータトレース部１３にプログラムカウンタ１０６の分岐する前の値と、分岐した後の値をトレースする処理を指示する。
【００２９】
データトレース部１３は、例外処理部１６０からの指示に従い、例外発生通知信号を受信した時点でプログラムカウンタ１０６の分岐する前の値と、分岐した後の値を抽出し、データ記憶領域１２に書き込む。
【００３０】
ここで、図２（Ａ）において、前述した（１）行目の命令コードは、命令ユニット毎に対するステータスフラグであり、命令ユニットが選択された時点で例外発生通知信号を出力させるか否かを設定できるが、複数の命令を持つ命令ユニットの個々の命令毎に例外発生通知信号を出力させる（オン状態＝１）か否か（オフ状態＝０）のサブステータスフラグを設定することもできる。
【００３１】
例えば、図２（Ａ）の（２）行目のＳＥＴ  ＢＥＱ＿ＯＲＤＥＲ＿ＦＬＡＧ＝０は、ブランチ／ジャンプユニット１５０のＢＥＱ命令のサブステータスフラグＢＥＱ＿ＯＲＤＥＲ＿ＦＬＡＧをオフ状態にする設定であり、図２（Ａ）の（３）行目のＳＥＴ  Ｊ＿ＯＲＤＥＲ＿ＦＬＡＧ＝０は、ブランチ／ジャンプユニット１５０のＪ命令のサブステータスフラグＪ＿ＯＲＤＥＲ＿ＦＬＡＧをオフ状態にする設定である。
【００３２】
＜例外発生部の動作＞
次に、図３を参照して例外発生部１５１の動作を説明する。図３は、ブランチ／ジャンプユニット１５０の例外発生部１５１の動作を説明するフローチャートである。
【００３３】
先ず、ステップＳ１００では、命令デコーダ１０３がブランチ／ジャンプユニット１５０を選択したか否かを判定し、選択された場合は、ステップＳ１０２に移行し、選択されていない場合は、監視を続ける。
【００３４】
次に、ステップＳ１０２では、ステータスレジスタ１１１のブランチ／ジャンプユニット１５０のステータスフラグＪＵＭＰ＿ＵＮＩＴ＿ＦＬＡＧの設定をチェックし、オン状態か否かを判定し、オン状態の場合は、ステップＳ１０６に移行し、オフ状態の場合は、ステップＳ１０４に移行する。
【００３５】
次に、ステップＳ１０６では、例外発生通知信号を出力させ、ステップＳ１００に戻る。
【００３６】
一方、ステップＳ１０４では、命令コードに応じて、ステータスレジスタ１１１のブランチ／ジャンプユニット１５０のＢＥＱ命令のサブステータスフラグＢＥＱ＿ＯＲＤＥＲ＿ＦＬＡＧ、または、Ｊ命令のサブステータスフラグＪ＿ＯＲＤＥＲ＿ＦＬＡＧの設定をチェックし、オン状態か否かを判定し、オン状態の場合は、ステップＳ１０６に移行し、オフ状態の場合は、ステップＳ１００に戻る。
【００３７】
＜例外処理部の動作＞
次に、図４を参照して例外処理部１６０の動作を説明する。図４は、例外処理部１６０の動作を説明するフローチャートである。
【００３８】
先ず、ステップＳ１５２では、例外発生部１５１から例外発生通知信号を受信したか否かを判定し、例外発生通知信号を受信した場合は、ステップＳ１５４に移行し、選択されていない場合は、監視を続ける。
【００３９】
次に、ステップＳ１５４では、データトレース部１３に対して、命令レジスタ１０２の命令コードをトレースする処理を指示し、ステップＳ１５２に戻る。
【００４０】
＜プログラムとプログラムトレースされた結果＞
次に、図５を参照してプログラムトレース装置全体の動作を説明する。図５は、プログラムとプログラムトレースされた結果を説明する図である。
【００４１】
図５（Ａ）は、プログラムコードの一例である。（１）行目の命令コードＡＤＤ  ｒ［０］，ｒ［１］，ｒ［２］は、加減算／シフトユニット１３０のＡＤＤ命令により汎用レジスタ１０５のアドレスｒ［１］とｒ［２］に格納されたデータを加算し、アドレスｒ［０］に格納する命令（または、ｒ［０］に指定されたメモリ番地に格納する命令）である。（２）行目の命令コードＭＰ  ｒ［０］，ｒ［１］，ｒ［２］は、乗算ユニット１２０のＭＰ命令により汎用レジスタ１０５のアドレスｒ［１］とｒ［２］に格納されたデータを乗算し、アドレスｒ［０］に格納する命令（または、ｒ［０］に指定されたメモリ番地に格納する命令）である。
【００４２】
（３）行目の命令コードＢＥＱ  ｒ［１］，ｒ［２］，Ｌ２００は、ブランチ／ジャンプユニット１５０のＢＥＱ命令により汎用レジスタ１０５のアドレスｒ［１］とｒ［２］に格納されたデータを比較し、値が等しい場合ラベルＬ２００にジャンプする命令である。（４）行目の命令コードＪ  Ｌ１００は、ブランチ／ジャンプユニット１５０のＪ命令により無条件にラベルＬ１００にジャンプする命令である。
【００４３】
（５）行目の命令コードＬＷ  ｒ［０］，＃ａは、ロード／ストアユニット１４０のＬＷ命令により外部メモリ１０のアドレス＃ａのデータを汎用レジスタ１０５のアドレスｒ［０］にロードする命令である。（６）行目の命令コードＳＷ  ｒ［０］，＃ｂは、ロード／ストアユニット１４０のＳＷ命令により汎用レジスタ１０５のアドレスｒ［０］のデータ外部メモリ１０のアドレス＃ｂにストアする命令である。
【００４４】
＜プログラムトレース装置全体の動作＞
先ず、デバッグ用ＰＣ２０は、図２（Ａ）のステータスフラグ設定用の命令コードと、図５（Ａ）のプログラムコードを外部メモリ１０のプログラム記憶領域１１に転送する。
【００４５】
次に、命令フェッチ１０１は、プログラム記憶領域１１から順次命令コードを読み出し、命令レジスタ１０２に格納していく。
【００４６】
次に、命令デコーダ１０３は、命令レジスタ１０２に格納された命令コードを１つずつ解読し、命令ユニット１０４を選択する。最初に、図２（Ａ）のステータスフラグ設定用の命令コードをステータス更新部１１０に実行させ、図２（Ｂ）のようにステータスレジスタ１１１の値を更新する。
【００４７】
次に、図５（Ａ）のプログラムコードを解析し、命令ユニット１０４を選択する。最初に（１）行目の命令コードＡＤＤ  ｒ［０］，ｒ［１］，ｒ［２］が解読され、加減算／シフトユニット１３０が選択される。加減算／シフトユニット１３０は、例外発生部を搭載していないので、例外発生通知信号を出力しない。
【００４８】
図５（Ａ）の（２）行目の命令コードＭＰ  ｒ［０］，ｒ［１］，ｒ［２］についても同様に、例外発生通知信号を出力しない。
【００４９】
次に、図５（Ａ）の（３）行目の命令コードＢＥＱ  ｒ［１］，ｒ［２］，Ｌ２００が解読され、ブランチ／ジャンプユニット１５０が選択される。この時点で、ブランチ／ジャンプユニット１５０の例外発生部１５１は、ステータスレジスタ１１１のＪＵＭＰ＿ＵＮＩＴ＿ＦＬＡＧの設定をチェックし、図２（Ｂ）の（１）行目に示すようにＪＵＭＰ＿ＵＮＩＴ＿ＦＬＡＧ＝１に設定されているので、例外発生通知信号を出力する。
【００５０】
例外発生通知信号を受信したので、例外処理部１６０は、データトレース部１３にプログラムカウンタ１０６の分岐する前の値と、分岐した後の値をトレースする処理を指示する。図５（Ｂ）の（３）行目に示すように、プログラムカウンタ１０６の分岐する前の値００１０と、分岐した後の値０２００が、データ記憶領域１２に書き込まれる。
【００５１】
汎用レジスタ１０５のアドレスｒ［１］とｒ［２］に格納されたデータが等しくなかったとすると、図５（Ａ）の（４）行目の命令コードＪ  Ｌ１００が解読され、ブランチ／ジャンプユニット１５０が選択される。この時点で、ブランチ／ジャンプユニット１５０の例外発生部１５１は、ステータスレジスタ１１１のＪＵＭＰ＿ＵＮＩＴ＿ＦＬＡＧの設定をチェックし、図２（Ｂ）の（１）行目に示すようにＪＵＭＰ＿ＵＮＩＴ＿ＦＬＡＧ＝１に設定されているので、例外発生通知信号を出力する。
【００５２】
例外発生通知信号を受信したので、例外処理部１６０は、データトレース部１３にプログラムカウンタ１０６の分岐する前の値と、分岐した後の値をトレースする処理を指示する。図５（Ｂ）の（４）行目に示すように、プログラムカウンタ１０６の分岐する前の値００１１と、分岐した後の値０１００が、データ記憶領域１２に書き込まれる。
【００５３】
次に、図５（Ａ）の（５）行目の命令コードＬＷ  ｒ［０］，＃ａが解読され、ロード／ストアユニット１４０が選択される。ロード／ストアユニット１４０は、例外発生部を搭載していないので、例外発生通知信号を出力しない。
【００５４】
次に、図５（Ａ）の（６）行目の命令コードＳＷ  ｒ［０］，＃ｂが解読され、ロード／ストアユニット１４０が選択される。ロード／ストアユニット１４０は、例外発生部を搭載していないので、例外発生通知信号を出力しない。
【００５５】
以上に述べた前記実施形態によれば、以下の効果が得られる。
【００５６】
本実施形態では、プログラムの命令コードに応じた命令ユニットを命令デコーダが選択した時点で例外発生部がステータスフラグをチェックし、例外発生通知信号を出力させるオン状態になっている場合、例外発生通知信号を出力し、例外発生通知信号を受信した時点でのプログラムカウンタ１０６の分岐する前の値と、分岐した後の値をトレースすることができるので、プログラムの命令コードにデバッグコードを埋め込む必要が無く、実際のプログラムを実行させた状態でのプログラムトレースを行うことができるので、ＩＣＥを必要とせず、回路規模を増大させること無く、プログラムの不具合を的確に把握することができる。
【００５７】
なお、本実施形態では、サブステータスフラグがある場合について説明したが、サブステータスフラグは無くてもよい。その場合、回路規模をさらに小さくすることができる。
【００５８】
以上、本発明の実施形態を説明したが、本発明はこうした実施の形態に何ら限定されるものではなく、本発明の趣旨を逸脱しない範囲内において様々な形態で実施し得ることができる。以下、変形例を挙げて説明する。
【００５９】
（変形例１）本発明に係るプログラムトレース装置の第１変形例について説明する。前記第１実施形態では、例外発生通知信号を受信した時点でのプログラムカウンタ１０６の分岐する前の値と、分岐した後の値をデータ記憶領域１２に書き込むように説明したが、さらに、例外発生通知信号を受信した時点の時刻を記録するようにしてもよい。時刻を記録することにより、ＣＡＬＬ命令などでどのくらい時間がかかっているかを測定することが可能になる。
【図面の簡単な説明】
【００６０】
【図１】本発明のプログラムトレース装置の全体構成図。
【図２】ステータスレジスタの構成図。
【図３】例外発生部の動作を説明するフローチャート。
【図４】例外処理部の動作を説明するフローチャート。
【図５】プログラムとプログラムトレースされた結果を説明する図。
【符号の説明】
【００６１】
１…プログラムトレース装置、１０…外部メモリ、１１…プログラム記憶領域、１２…データ記憶領域、１３…データトレース部、２０…デバッグ用ＰＣ、２１…ＵＳＢケーブル、１００…マイクロコンピュータ、１０１…命令フェッチ、１０２…命令レジスタ、１０３…命令デコーダ、１０４…命令ユニット、１０５…汎用レジスタ、１０６…プログラムカウンタ、１１０…ステータス更新部、１１１…ステータスレジスタ、１２０…乗算ユニット、１３０…加減算／シフトユニット、１４０…ロード／ストアユニット、１５０…ブランチ／ジャンプユニット、１５１…例外発生部、１６０…例外処理部。
【図１】
2007086966.tif 000003
【図２】
2007086966.tif 000004
【図３】
2007086966.tif 000005
【図４】
2007086966.tif 000006
【図５】
2007086966.tif 000007