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