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