(57)【要約】【課題】非再現性問題を回避できるプログラムトレース。【解決手段】命令コード記憶領域と、データ記憶領域を有するメインメモリ１１０と、命令コード記憶領域から命令コードを読み出すアドレスを指定するプログラムカウンタ２２１を制御する順序制御部２２０と、読み出した命令コードを解釈し制御信号を作る制御信号生成回路２３０と、を有する制御部２００と、制御信号に従い演算を行う演算回路と複数のレジスタを有する演算部３００と、からなる中央処理装置１００と、を有するマイクロコンピュータ１０のプログラムトレース装置において、順序制御部２２０は、プログラムカウンタ２２１の遷移に応じて、プログラムカウンタの値を複数のレジスタのうち命令コードが使用していない未使用レジスタに書き込む制御信号を演算部３００に送信するトレース部２２３を有する。【選択図】図２
2007156593.tif 000002
【特許請求の範囲】
【請求項１】
（１）命令コード記憶領域と、データ記憶領域と、を有するメインメモリと、
（２）前記命令コード記憶領域から命令コードを読み出すアドレスを指定するプログラムカウンタを制御する順序制御部と、読み出した前記命令コードを解釈し制御信号を作る制御信号生成回路と、を有する制御部と、前記制御信号に従い演算を行う演算回路と、複数のレジスタと、を有する演算部と、からなる中央処理装置と、
を有するマイクロコンピュータのプログラムトレース装置において、
前記順序制御部は、前記プログラムカウンタの遷移に応じて、前記プログラムカウンタの値を前記複数のレジスタのうち前記命令コードが使用していない未使用レジスタに書き込む制御信号を前記演算部に送信するトレース部を有する、
ことを特徴とするプログラムトレース装置。
【請求項２】
請求項１に記載のプログラムトレース装置において、前記トレース部は、前記マイクロコンピュータのプログラムトレースを行うデバッグ用コンピュータから前記未使用レジスタの先頭アドレスを取得し、前記プログラムカウンタの値を前記未使用レジスタに書き込む前に、すでに前記未使用レジスタに書き込まれた前記プログラムカウンタの値を次のアドレスの前記未使用レジスタに順送りに書き込んだ後、前記プログラムカウンタの値を前記未使用レジスタの前記先頭アドレスに書き込む、ことを特徴とするプログラムトレース装置。
【請求項３】
請求項１に記載のプログラムトレース装置において、前記トレース部は、前記未使用レジスタの所定のレジスタを未使用レジスタ管理フラグとし、前記デバッグ用コンピュータから前記未使用レジスタのアドレスを取得し、前記未使用レジスタ管理フラグに記録し、前記未使用レジスタ管理フラグに基づき前記未使用レジスタの空いているアドレスに前記プログラムカウンタの値を書き込み、書き込んだ前記未使用レジスタのアドレスを書き込み済みとなるように前記未使用レジスタ管理フラグを更新する、ことを特徴とするプログラムトレース装置。
【請求項４】
請求項１に記載のプログラムトレース装置において、前記トレース部は、前記未使用レジスタの所定のレジスタを未使用レジスタ管理インデックスとし、前記デバッグ用コンピュータから前記未使用レジスタのアドレスを取得し、前記未使用レジスタ管理インデックスに記録し、前記未使用レジスタ管理インデックスに基づき前記未使用レジスタの空いているアドレスに前記プログラムカウンタの値を書き込み、書き込んだ前記未使用レジスタのアドレスを書き込み済みとなるように前記未使用レジスタ管理インデックスを更新する、ことを特徴とするプログラムトレース装置。
【請求項５】
請求項１から４のいずれか一項に記載のプログラムトレース装置において、前記トレース部は、前記プログラムカウンタの値が前記制御信号生成回路または前記演算部からの指示に基づき変化した場合に、変化する前の前記プログラムカウンタの値を前記未使用レジスタに書き込む、ことを特徴とするプログラムトレース装置。
【請求項６】
（１）命令コード記憶領域と、データ記憶領域と、を有するメインメモリと、
（２）前記命令コード記憶領域から命令コードを読み出すアドレスを指定するプログラムカウンタを制御する順序制御部と、読み出した前記命令コードを解釈し制御信号を作る制御信号生成回路と、を有する制御部と、前記制御信号に従い演算を行う演算回路と、複数のレジスタと、を有する演算部と、からなる中央処理装置と、
を有するマイクロコンピュータのプログラムトレース方法において、
前記順序制御部は、前記プログラムカウンタの遷移に応じて、前記プログラムカウンタの値を前記複数のレジスタのうち前記命令コードが使用していない未使用レジスタに書き込む制御信号を前記演算部に送信するトレース工程からなる、
ことを特徴とするプログラムトレース方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロコンピュータを利用した処理システムのソフトウェア開発を支援するプログラムトレース装置及び方法に関する。
【背景技術】
【０００２】
一般に、開発中のハードウェアをデバッグする場合には、ホストコンピュータと開発中のシステムをＩＣＥ（In-Circuit Emulator）を介して接続し、このハードウェア上で動作するソフトウェアの動作状態をトレースすることがある。また、一方では、開発中のハードウェアのプロセッサに、デバッグ用コード（デバッグモニタ等）を組み込み、そのデバッグ用コードを介して、ホストコンピュータと開発中のハードウェアを接続し、同ハードウェアが備えるＣＰＵ（中央処理装置）にて動作するソフトウェアの動作状態をトレースすることがある。上記のような不具合の原因を解析するには、上記に示したハードウェアのＣＰＵ上にて動作するソフトウェアの動作状態をトレースできるデバッグシステムを用いて、ハードウェアに関するログ情報を収集するコードを埋め込んだソフトウェアを動作させ、バグが発生した時点で、ソフトウェアを停止させ、ログを解析する。
【０００３】
しかし、ログ情報を収集するコードを挿入してソフトウェアを実行させると、プログラムサイズの変化やメモリの使用状況の変化により不具合が発生しないことがある。
【０００４】
この問題を解決するために、例えば特許文献１には、プログラムの実行時にジャンプしたアドレスを記録するトレースストレージは、「専用バスによってトレースコントローラに接続された専用メモリ、ＣＰＵからアクセスできるメモリバスに接続された専用メモリ、または、オン−チップまたはオフ−チップでＣＰＵによってアクセスできるメモリと同じメモリ、に設ける」ことを想定し、さらにトレースストレージであるこのメモリに関するアドレス情報を管理するための独自のレジスタ・装置を用意する方法が記載されている。
【０００５】
【特許文献１】特開平１０−２４０５７２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１では、ＣＰＵの複雑さが増しコスト増となるばかりか、トレースストレージ用のメモリが必要であり、デバッグ時と非デバッグ時にメモリマップを変更するとか、デバッグのためだけのメモリを用意しなくてはならない。前者の場合はデバッグ時に不具合が発生しなくなることがある（非再現性問題）。後者の場合製品には不要なコスト増を招いたり、製品開発用とデバッグ用で別々のシステム（ハードウェア構成）を用意する必要がある。
【０００７】
本発明は、このような事情に鑑みてなされたものであり、プログラム実行には使用しないレジスタをトレースストレージとすることにより、プログラムトレース装置にかかるコストを削減することができ、非デバッグ時とデバッグ時で同じメモリ配置でプログラムを実行できるため、非再現性問題を回避できるプログラムトレース装置及び方法を提供することを目的とするものである。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、本発明のプログラムトレース装置では、（１）命令コード記憶領域と、データ記憶領域と、を有するメインメモリと、（２）前記命令コード記憶領域から命令コードを読み出すアドレスを指定するプログラムカウンタを制御する順序制御部と、読み出した前記命令コードを解釈し制御信号を作る制御信号生成回路と、を有する制御部と、前記制御信号に従い演算を行う演算回路と、複数のレジスタと、を有する演算部と、からなる中央処理装置と、を有するマイクロコンピュータのプログラムトレース装置において、前記順序制御部は、前記プログラムカウンタの遷移に応じて、前記プログラムカウンタの値を前記複数のレジスタのうち前記命令コードが使用していない未使用レジスタに書き込む制御信号を前記演算部に送信するトレース部を有する、ことを要旨とする。
【０００９】
この構成によれば、プログラム実行には使用しないレジスタをトレースストレージとすることにより、プログラムトレース装置にかかるコストを削減することができ、非デバッグ時とデバッグ時で同じメモリ配置でプログラムを実行できるため、非再現性問題を回避できる。
【００１０】
また、本発明のプログラムトレース装置では、前記トレース部は、前記マイクロコンピュータのプログラムトレースを行うデバッグ用コンピュータから前記未使用レジスタの先頭アドレスを取得し、前記プログラムカウンタの値を前記未使用レジスタに書き込む前に、すでに前記未使用レジスタに書き込まれた前記プログラムカウンタの値を次のアドレスの前記未使用レジスタに順送りに書き込んだ後、前記プログラムカウンタの値を前記未使用レジスタの前記先頭アドレスに書き込む。
【００１１】
この構成によれば、最新のプログラムカウンタの値を書き込むレジスタの位置を固定することができ、トレース部の処理を単純化できる。
【００１２】
また、本発明のプログラムトレース装置では、前記トレース部は、前記未使用レジスタの所定のレジスタを未使用レジスタ管理フラグとし、前記デバッグ用コンピュータから前記未使用レジスタのアドレスを取得し、前記未使用レジスタ管理フラグに記録し、前記未使用レジスタ管理フラグに基づき前記未使用レジスタの空いているアドレスに前記プログラムカウンタの値を書き込み、書き込んだ前記未使用レジスタのアドレスを書き込み済みとなるように前記未使用レジスタ管理フラグを更新する。
【００１３】
この構成によれば、最新のプログラムカウンタの値を書き込むレジスタの位置を未使用レジスタ管理フラグに基づき設定することができ、トレース部の処理を単純化できる。
【００１４】
また、本発明のプログラムトレース装置では、前記トレース部は、前記未使用レジスタの所定のレジスタを未使用レジスタ管理インデックスとし、前記デバッグ用コンピュータから前記未使用レジスタのアドレスを取得し、前記未使用レジスタ管理インデックスに記録し、前記未使用レジスタ管理インデックスに基づき前記未使用レジスタの空いているアドレスに前記プログラムカウンタの値を書き込み、書き込んだ前記未使用レジスタのアドレスを書き込み済みとなるように前記未使用レジスタ管理インデックスを更新する。
【００１５】
この構成によれば、最新のプログラムカウンタの値を書き込むレジスタの位置を未使用レジスタ管理インデックスに基づき設定することができ、トレース部の処理を単純化できる。
【００１６】
また、本発明のプログラムトレース装置では、前記トレース部は、前記プログラムカウンタの値が前記制御信号生成回路または前記演算部からの指示に基づき変化した場合に、変化する前の前記プログラムカウンタの値を前記未使用レジスタに書き込む。
【００１７】
この構成によれば、プログラムカウンタの値が順次変化しなかった場合の値をトレースするので、トレースストレージを節約でき、プログラムトレースが容易になる。
【００１８】
また、本発明のプログラムトレース方法では、（１）命令コード記憶領域と、データ記憶領域と、を有するメインメモリと、（２）前記命令コード記憶領域から命令コードを読み出すアドレスを指定するプログラムカウンタを制御する順序制御部と、読み出した前記命令コードを解釈し制御信号を作る制御信号生成回路と、を有する制御部と、前記制御信号に従い演算を行う演算回路と、複数のレジスタと、を有する演算部と、からなる中央処理装置と、を有するマイクロコンピュータのプログラムトレース方法において、前記順序制御部は、前記プログラムカウンタの遷移に応じて、前記プログラムカウンタの値を前記複数のレジスタのうち前記命令コードが使用していない未使用レジスタに書き込む制御信号を前記演算部に送信するトレース工程からなる。
【００１９】
この構成によれば、プログラム実行には使用しないレジスタをトレースストレージとすることにより、トレース機能の無いＩＣＥやデバッグモニターを使って、トレース機能を実現することができる。また製品開発用とデバッグ用で同一のシステム（ハードウェア構成）を用いてデバッグができる。
【発明を実施するための最良の形態】
【００２０】
以下、本発明を具体化した実施形態について図面に従って説明する。
（第１実施形態）
【００２１】
＜プログラムトレース装置の構成＞
まず、第１実施形態に係るプログラムトレース装置の構成について、図１を参照して説明する。図１は、本発明の第１実施形態に係るプログラムトレース装置の全体構成図である。図１に示すように、プログラムトレース装置１は、マイクロコンピュータ１０と、デバッグ用コンピュータ２０と、から構成されている。
【００２２】
マイクロコンピュータ１０は、中央処理装置（Central Processing Unit、ＣＰＵ）１００と、メインメモリ１１０と、入力装置１２０と、出力装置１３０と、から構成されている。さらに、ＣＰＵ１００は、制御部２００と、演算部３００と、から構成され、メインメモリ１１０は、命令コード記憶領域１１１と、データ記憶領域１１２と、から構成されている。
【００２３】
＜制御部の構成＞
次に、制御部２００の構成について図２を参照して説明する。図２は、制御部２００の構成図である。制御部２００は、メインメモリ１１０の命令コード記憶領域１１１から読み出した命令コードを保持する命令レジスタ（Instruction Register、以下ＩＲ）２１０と、読み出す命令コードのアドレスを指定するプログラムカウンタ（Program Counter、以下ＰＣ）２２１を制御する順序制御部２２０と、ＩＲ２１０に保持された命令コードを解釈し制御信号を生成する制御信号生成回路（以下デコーダ）２３０と、から構成されている。
【００２４】
順序制御部２２０は、現在の命令コードが実行された後、次のアドレスの命令コードに移動するためのＰＣ２２１を生成するためにＰＣ２２１の値を１つ増やすＰＣインクリメント２２２と、ＰＣ２２１がデコーダ２３０または演算部３００の制御に基づき所定のアドレスにジャンプするように設定された場合に、現在のＰＣ２２１の値を後述する演算部３００の有するレジスタ３０２に書き込む制御信号を演算部３００に送信するトレース部２２３と、から構成されている。
【００２５】
トレース部２２３は、トレース部実行フラグ２２４と書込みレジスタ特定レジスタ２２５を有する。トレース部実行フラグ２２４は、ＯＮであれば本発明のトレース機能を実現し、ＯＦＦであればトレース機能を停止する。デバッグを行うときにはデバッグ担当者がトレース部実行フラグ２２４をＯＮに設定する。製品として動作する場合は、トレース部実行フラグ２２４は通常ＯＦＦである。書込みレジスタ特定レジスタ２２５は、ＰＣ２２１の値を書き込むレジスタを特定する。なお、トレース部２２３内部に書込みレジスタ特定レジスタ２２５を設けずに、例えば、最後の未使用レジスタにその機能を割り当てるという構成でも構わない。
【００２６】
＜演算部の構成＞
次に、演算部３００の構成について図３を参照して説明する。図３は、演算部３００の構成図である。演算部３００は、デコーダ２３０からの制御信号に基づき演算の種類を切り替える演算回路３０１と、デコーダ２３０からの制御信号に基づき値を一時的に保持するｒ１〜ｒｎからなるレジスタ３０２と、から構成されている。また、各々のレジスタ３０２は、入力バス３１２の値を取り込むためのスイッチゲート３０３と、各々のレジスタ３０２毎に値を出力バス３１０、３１１に出力するためのスイッチゲート３０４、３０５と、から構成されている。さらに、出力バス３１１の値を、制御部２００に出力するためのスイッチゲート３０６と、メインメモリ１１０に出力するためのスイッチゲート３０７と、メインメモリ１１０の値を入力バス３１２に取り込むためのスイッチゲート３０８と、から構成されている。スイッチゲート３０３〜３０８のゲートの開閉は、デコーダ２３０からの制御信号に基づき制御される。
【００２７】
＜プログラムコード＞
次に、デバッグ用コンピュータ２０で、プログラムをコンパイルする際に、命令コードが使用する演算部３００のレジスタ３０２の数を制限する方法について図４を参照して説明する。図４（Ａ）は、同じプログラムコードをコンパイルする際に、レジスタ３０２のｒ６までを使用するように制限した命令コードの出力例であり、図４（Ｂ）は、同じプログラムコードをコンパイルする際に、レジスタ３０２のｒ３までを使用するように制限した命令コードの出力例である。
【００２８】
図４（Ａ）の命令コードの出力例に示すように、プログラムアドレス１０００では、メインメモリ１１０のアドレス１５００の値をレジスタｒ４に転送し、プログラムアドレス１００４において、レジスタｒ４の値をレジスタｒ１に入力するように命令コードが生成されている。プログラムアドレス１００１では、メインメモリ１１０のアドレス１５０１の値をレジスタｒ５に転送し、プログラムアドレス１００５において、レジスタｒ５の値をレジスタｒ２に入力するように命令コードが生成されている。プログラムアドレス１００２では、メインメモリ１１０のアドレス１５０２の値をレジスタｒ６に転送し、プログラムアドレス１０１０において、レジスタｒ６にレジスタｒ１の値を出力するように命令コードが生成されている。
【００２９】
一方、図４（Ｂ）の命令コードの出力例に示すように、プログラムアドレス１００４では、メインメモリ１１０のアドレス１５００の値を直接レジスタｒ１に入力し、プログラムアドレス１００５では、メインメモリ１１０のアドレス１５０１の値を直接レジスタｒ２に入力し、プログラムアドレス１０１０では、メインメモリ１１０のアドレス１５０２にレジスタｒ１の値を直接出力するように命令コードが生成されている。
【００３０】
図４で説明したように、命令コードで使用するレジスタ３０２の数を少なくすることにより、トレース部２２３が出力できる未使用レジスタの数を多くすることが可能となる。また、図４（Ａ）と図４（Ｂ）は使用するレジスタ３０２の数が異なるが、どちらもロジック的、機能的には同一であるため、ハードウェア、ソフトウェアを問わずロジック的、機能的なミス（バグ）は図４（Ａ）、（Ｂ）どちらを用いても再現、デバッグ可能である。
【００３１】
＜トレース部の動作＞
次に、第１実施形態に係るトレース部２２３の動作について図５及び図６を参照して説明する。図５は、第１実施形態に係るトレース部２２３の動作を説明するフローチャートであり、図６は、第１実施形態に係るトレース部の動作を説明する演算部のレジスタ３０２の動きを示す図である。なお、図６は、デバッグ用コンピュータ２０がプログラムコードをコンパイルする際に、レジスタ３０２のｒ１〜ｒ３までを使用するように制限した場合を示す。従って未使用レジスタは、レジスタｒ４〜ｒｎとなる。
【００３２】
先ず、ステップＳ０９０では、デバッグ用コンピュータ２０から指示を受け、トレース部実行フラグ２２４をＯＮに設定する。これによりトレース部が以下の動作を行うモードになる。デバッグＰＣで行う代わりに、プログラムコードに「トレース部実行フラグ２２４をＯＮ」にする命令コードを記述し、そのプログラムコードをＣＰＵで実行することでも、トレース部実行フラグ２２４を設定することができる。
【００３３】
次に、ステップＳ１００では、トレース部２２３は、デバッグ用コンピュータ２０から指示を受け、ＰＣ２２１の値を書き込む書き込みレジスタの位置を書込みレジスタ特定レジスタ２２５に設定する。図６（Ａ）では、未使用レジスタの先頭のレジスタｒ４が書き込みレジスタとして設定されている。
【００３４】
次に、ステップＳ１０２では、デコーダ２３０が命令コードを解析し演算部３００に制御信号を送信する。
【００３５】
次に、ステップＳ１０４では、順序制御部２２０は、ＰＣ２２１がデコーダ２３０または演算部３００からの制御に基づき所定のアドレスにジャンプするように制御された（Ｙｅｓ）か否か（Ｎｏ）を判定し、Ｙｅｓの場合は、ステップＳ１０６に移行し、Ｎｏの場合は、ステップＳ１０２に移行する。
【００３６】
次に、ステップＳ１０６では、トレース部２２３は、前回書き込みレジスタに書き込まれているＰＣ２２１の値を次のレジスタに、次のレジスタに書き込まれているＰＣ２２１の値をその次のレジスタに、というように順送りに書き込むように演算部３００に制御信号を送る。図６（Ｄ）では、レジスタｒ４に書き込まれていたＰＣ２２１の値ＰＣ２がレジスタｒ５に、レジスタｒ５に書き込まれていたＰＣ２２１の値ＰＣ１がレジスタｒ６に、それぞれ順送りに書き込む様子を示している。
【００３７】
次に、ステップＳ１０８では、トレース部２２３は、書き込みレジスタにＰＣ２２１の値を書き込む。図６（Ｄ）では、レジスタｒ４にＰＣ２２１の値ＰＣ３が書き込まれる。
【００３８】
次に、ステップＳ１１０では、最後の未使用レジスタまでＰＣ２２１の値が書き込まれたか（Ｙｅｓ）否か（Ｎｏ）を判定し、Ｙｅｓの場合は、ステップＳ１１２に移行し、Ｎｏの場合は、ステップＳ１０２に移行する。
【００３９】
次にステップＳ１１２では、トレース部２２３は、未使用レジスタに書き込まれたＰＣ２２１の値をデバッグ用コンピュータ２０に送信し、未使用レジスタの値をクリアするように演算部３００に制御信号を送信し、ステップＳ１０２に移行する。
【００４０】
以上、すべての命令コードが実行され終わるまで、ステップＳ１０２からＳ１１２が繰り返される。
【００４１】
以上に述べた前記実施形態によれば、以下の効果が得られる。
【００４２】
本実施形態では、プログラム実行には使用しないレジスタをトレースストレージとすることにより、プログラムトレース装置にかかるコストを削減することができ、非デバッグ時とデバッグ時で同じメモリ配置でプログラムを実行できるため、非再現性問題を回避できる。さらに、最新のプログラムカウンタの値を書き込むレジスタの位置を固定することができ、トレース部２２３の処理を単純化できる。
【００４３】
（第２実施形態）
次に、本発明に係るプログラムトレース装置の第２実施形態について説明する。第１実施形態においては、トレース部２２３は、未使用レジスタにＰＣ２２１の値を書き込む際、書き込みレジスタを固定にし、古いデータを次のレジスタに順送りに書き込む方法を説明したが、第２実施形態では、未使用レジスタの１つを未使用レジスタ管理フラグに設定し、未使用レジスタ管理フラグを参照し、空いているレジスタにＰＣ２２１の値を書き込む方法について図７及び図８を参照して説明する。
【００４４】
図７は、第２実施形態に係るトレース部２２３の動作を説明するフローチャートであり、図８は、第２実施形態に係るトレース部２２３の動作を説明する演算部３００のレジスタ３０２の動きを示す図である。なお、図８は、デバッグ用コンピュータ２０がプログラムコードをコンパイルする際に、レジスタ３０２のｒ１〜ｒ３までを使用するように制限した場合を示す。さらに、レジスタｒｎに未使用レジスタ管理フラグを設定している。従って未使用レジスタは、レジスタｒ４〜ｒｎ−１となる。
【００４５】
図８（Ａ）に示すように、未使用レジスタ管理フラグの各ビットは、レジスタｒ１〜ｒｎ−１に対応し、命令コードが使用するレジスタに対しては、１を設定し、命令コードが使用しないレジスタに対しては、０を設定する。図８（Ａ）では、レジスタｒ１〜ｒ３が命令コードで使用されているので、未使用レジスタ管理フラグは、ｒｎ＝１１１００００・・・に設定されている。トレース部２２３は、未使用レジスタ管理フラグを参照し、０が設定されているレジスタにＰＣ２２１の値を書き込み、さらに未使用レジスタ管理フラグの該当するレジスタのビットを１に更新する。
【００４６】
以下、図７に従い第２実施形態に係るトレース部２２３の動作を説明する。
【００４７】
先ず、ステップＳ１９０では、デバッグ用コンピュータ２０から指示を受け、トレース部実行フラグ２２４をＯＮに設定する。これによりトレース部が以下の動作を行うモードになる。デバッグＰＣで行う代わりに、プログラムコードに「トレース部実行フラグ２２４をＯＮ」にする命令コードを記述し、そのプログラムコードをＣＰＵで実行することでも、トレース部実行フラグ２２４を設定することができる。
【００４８】
次に、ステップＳ２００では、トレース部２２３は、デバッグ用コンピュータ２０から指示を受け、未使用レジスタ管理フラグを設定する。図８（Ａ）では、レジスタｒｎが未使用レジスタ管理フラグとして設定され、ｒｎ＝１１１００００・・・に設定されている。
【００４９】
次に、ステップＳ２０２では、デコーダ２３０が命令コードを解析し演算部３００に制御信号を送信する。
【００５０】
次に、ステップＳ２０４では、順序制御部２２０は、ＰＣ２２１がデコーダ２３０または演算部３００からの制御に基づき所定のアドレスにジャンプするように制御された（Ｙｅｓ）か否か（Ｎｏ）を判定し、Ｙｅｓの場合は、ステップＳ２０６に移行し、Ｎｏの場合は、ステップＳ２０２に移行する。
【００５１】
次に、ステップＳ２０６では、トレース部２２３は、未使用レジスタ管理フラグをチェックし、０が設定されている最初のビットのレジスタにＰＣ２２１の値を書き込む。図８（Ａ）の未使用レジスタ管理フラグは、ｒｎ＝１１１００００・・・なので、図８（Ｂ）では、レジスタｒ４に書き込まれる。
【００５２】
次に、ステップＳ２０８では、トレース部２２３は、ＰＣ２２１の値を書き込んだレジスタに対応する未使用レジスタ管理フラグのビットを１に設定する。図８（Ｂ）では、未使用レジスタ管理フラグの４番目のビットが１に更新され、ｒｎ＝１１１１０００・・・となる。
【００５３】
次に、ステップＳ２１０では、すべての未使用レジスタ管理フラグが１になったか（Ｙｅｓ）否か（Ｎｏ）を判定し、Ｙｅｓの場合は、ステップＳ２１２に移行し、Ｎｏの場合は、ステップＳ２０２に移行する。
【００５４】
次にステップＳ２１２では、トレース部２２３は、未使用レジスタのＰＣ２２１の値をデバッグ用コンピュータ２０に送信し、未使用レジスタ管理フラグを初期値（ステップＳ２００の状態）にリセットするように演算部３００に制御信号を送信し、ステップＳ２０２に移行する。
【００５５】
以上、すべての命令コードが実行され終わるまで、ステップＳ２０２からＳ２１２が繰り返される。
【００５６】
以上に述べた前記実施形態によれば、以下の効果が得られる。
【００５７】
本実施形態では、プログラム実行には使用しないレジスタをトレースストレージとすることにより、プログラムトレース装置にかかるコストを削減することができ、非デバッグ時とデバッグ時で同じメモリ配置でプログラムを実行できるため、非再現性問題を回避できる。さらに、最新のプログラムカウンタの値を書き込むレジスタの位置を未使用レジスタ管理フラグに基づき設定することができ、トレース部の処理を単純化できる。
【００５８】
以上、本発明の実施形態を説明したが、本発明はこうした実施の形態に何ら限定されるものではなく、本発明の趣旨を逸脱しない範囲内において様々な形態で実施し得ることができる。以下、変形例を挙げて説明する。
【００５９】
（変形例１）本発明に係るプログラムトレース装置の第１変形例について説明する。前記第１実施形態では、未使用レジスタの先頭に最新のＰＣ２２１の値を書き込み、古いＰＣ２２１の値をレジスタの番号の大きい方向に順送りに書き込むように説明したが、逆に、未使用レジスタの最後のレジスタに最新のＰＣ２２１の値を書き込み、古いＰＣ２２１の値をレジスタの番号の小さい方向に順送りに書き込むようにしてもよい。
【００６０】
（変形例２）本発明に係るプログラムトレース装置の第２変形例について説明する。前記第２実施形態では、未使用レジスタの最後のレジスタを未使用レジスタ管理フラグとして設定したが、未使用レジスタのどのレジスタを未使用レジスタ管理フラグとして設定しても構わない。この場合、書込みレジスタ特定レジスタ２２５には、未使用レジスタの先頭位置を設定しておけばよい。
【００６１】
（変形例３）本発明に係るプログラムトレース装置の第３変形例について説明する。前記第２実施形態では、未使用レジスタの１つのレジスタを未使用レジスタ管理フラグとして設定したが、例えば、レジスタのデータサイズが３２ビットで、レジスタの数が６４個ある場合などは、２つのレジスタを未使用レジスタ管理フラグとして設定すればよい。
【００６２】
（変形例４）本発明に係るプログラムトレース装置の第４変形例について説明する。前記第２実施形態では、未使用レジスタの１つのレジスタを未使用レジスタ管理フラグとしてビットの０／１でレジスタの未使用／使用を管理したが、未使用レジスタの１つのレジスタを未使用レジスタ管理インデックスとして設定しても構わない。例えば、ｒｎ＝１０ならばｒ１０にＰＣを保存し、ｒｎを＋１して次の未使用レジスタを指し示すようにすればよい。
【００６３】
（変形例５）本発明に係るプログラムトレース装置の第５変形例について説明する。前記第１実施形態および第２実施形態では、ステップＳ１１２もしくはステップＳ２１２において「レジスタデータのトレース」を行なっているが、トレース結果がいっぱいになったら、一番古いトレースデータを上書きしていき、デバッグ用コンピュータからの制御、あるいはプログラム中のＢＲＥＡＫ命令でＣＰＵの処理を停止した時点で、トレース結果をデバッグ用コンピュータに送るようにしてもよい。
【図面の簡単な説明】
【００６４】
【図１】本発明のプログラムトレース装置の全体構成図。
【図２】制御部の構成図。
【図３】演算部の構成図。
【図４】（Ａ）レジスタｒ６までを使用する命令コードの出力例、（Ｂ）レジスタｒ３までを使用する命令コードの出力例。
【図５】第１実施形態に係るトレース部の動作を説明するフローチャート。
【図６】第１実施形態に係るトレース部の動作を説明する演算部のレジスタの動きを示す図。
【図７】第２実施形態に係るトレース部の動作を説明するフローチャート。
【図８】第２実施形態に係るトレース部の動作を説明する演算部のレジスタの動きを示す図。
【符号の説明】
【００６５】
１…プログラムトレース装置、１０…マイクロコンピュータ、２０…デバッグ用コンピュータ、１００…中央処理装置（ＣＰＵ）、１１０…メインメモリ、１１１…命令コード記憶領域、１１２…データ記憶領域、１２０…入力装置、１３０…出力装置、２００…制御部、２１０…命令レジスタ（ＩＲ）、２２０…順序制御部、２２１…プログラムカウンタ（ＰＣ）、２２２…ＰＣインクリメント、２２３…トレース部、２２４…トレース部実行フラグ、２２５…書込みレジスタ特定レジスタ、２３０…制御信号生成回路（デコーダ）、３００…演算部、３０１…演算回路、３０２…レジスタ、３０３〜３０８…スイッチゲート、３１０、３１１…出力バス、３１２…入力バス。
【図１】
2007156593.tif 000003
【図２】
2007156593.tif 000004
【図３】
2007156593.tif 000005
【図４】
2007156593.tif 000006
【図５】
2007156593.tif 000007
【図６】
2007156593.tif 000008
【図７】
2007156593.tif 000009
【図８】
2007156593.tif 000010