(57)【特許請求の範囲】
【請求項１】
一連のソフトウェア命令を実行するように適合される電子プロセッサベースのデバイスであって、前記プロセッサベースのデバイスにはピンが設けられ外部導体への接続ができ、前記電子プロセッサベースのデバイスは、
プロセッサコアと、
前記プロセッサコアに結合され前記プロセッサコアにより実行されるソフトウェア命令に関連するソフトウェア性能プロファイリング情報をストアするためのトレースメモリとを含み、前記トレースメモリは一連の記憶素子を含み、各記憶素子はソフトウェア性能プロファイリング情報をストアするよう適合され、前記トレースメモリはファーストインファーストアウト（ＦＩＦＯ）循環バッファであり、前記電子プロセッサベースのデバイスはさらに
前記トレースメモリとピンの選択されたものとの間に接続され前記トレースメモリから外部デバイスへソフトウェア性能プロファイリング情報を送信するための通信チャネルと、
前記ソフトウェア性能プロファイリング情報を集めて前記ソフトウェア性能プロファイリング情報を前記トレースメモリにもたらすトレース制御回路を含み、前記トレース制御回路は
前記トレースメモリに結合される第１のソフトウェアプロファイルカウンタと、
前記第１のソフトウェアプロファイルカウンタに結合される第１のソフトウェアプロファイルトリガ制御レジスタとを含み、前記第１のソフトウェアプロファイルトリガ制御レジスタは、予め定められたソフトウェア命令の実行の際に前記第１のソフトウェアプロファイルカウンタに経過時間のカウントを開始させ、前記トレース制御回路はさらに
前記第１のソフトウェアプロファイルカウンタに結合される第２のソフトウェアプロファイルトリガ制御レジスタを含み、前記第２のソフトウェアプロファイルトリガ制御レジスタは、さらなる予め定められたソフトウェア命令の実行の際に前記第１のソフトウェアプロファイルカウンタに経過時間のカウントを停止させ、
前記第１のソフトウェアプロファイルカウンタによる経過時間の計測の停止によりそのカウント値が前記トレースメモリ内にストアされ、
前記トレース制御回路は
前記トレースメモリに結合され、経過時間をカウントする第２のソフトウェアプロファイルカウンタをさらに含み、
前記第２のソフトウェアプロファイルトリガ制御レジスタは、前記さらなる予め定められたソフトウェア命令の実行の際に前記第２のソフトウェアプロファイルカウンタを初期化し、前記第２のソフトウェアプロファイルカウンタの初期化により、初期化の直前のそのカウント値が前記トレースメモリ内にストアされる、プロセッサベースのデバイス。
【請求項２】
前記予め定められたソフトウェア命令は特定されたソフトウェアプロシジャへ入ったことを示し、前記さらなる予め定められたソフトウェア命令は特定されたソフトウェアプロシジャから出たことを示す、請求項１に記載のプロセッサベースのデバイス。
【請求項３】
前記予め定められたソフトウェア命令は特定された割込ハンドラへ入ったことを示し、前記さらなる予め定められたソフトウェア命令は前記特定された割込ハンドラから出たことを示す、請求項１に記載のプロセッサベースのデバイス。
【請求項４】
前記通信チャネルは前記トレースメモリとピンの選択されたものとの間にパラレルインターフェイスを含む、請求項１に記載のプロセッサベースのデバイス。
【請求項５】
前記通信チャネルは前記トレースメモリとピンの選択されたものとの間にシリアルインターフェイスを含む、請求項１に記載のプロセッサベースのデバイス。
【請求項６】
前記シリアルインターフェイスはシリアルインターフェイス規格に準拠する、請求項５に記載のプロセッサベースのデバイス。
【請求項７】
前記シリアルインターフェイスはＩＥＥＥ−１１４９．１−１９９０ＪＴＡＧインターフェイス規格に準拠する、請求項６に記載のプロセッサベースのデバイス。
【請求項８】
一連のソフトウェア命令を実行するプロセッサコアを有するプロセッサベースのデバイス内に、ソフトウェア性能プロファイリング情報をもたらす方法であって、
前記プロセッサコアにより実行されるソフトウェア命令に関連するソフトウェア性能プロファイリング情報を生成するステップを含み、前記生成するステップは
予め定められたソフトウェア命令の実行の際に第１のソフトウェアプロファイルカウンタに経過時間のカウントを開始させるステップと、
さらなる予め定められたソフトウェア命令の実行の際に前記第１のソフトウェアプロファイルカウンタに経過時間のカウントを停止させるステップと、
前記さらなる予め定められたソフトウェア命令の実行の際に経過時間をカウントする第２のソフトウェアプロファイルカウンタを初期化するステップとを含み、前記ソフトウェア性能プロファイリング情報は経過時間のカウントが停止された後の前記第１のソフトウェアプロファイルカウンタのカウント値および前記第２のソフトウェアプロファイルカウンタが初期化された直前の前記第２のソフトウェアプロファイルカウンタのカウント値を含んでおり、前記方法はさらに
前記プロセッサベースのデバイス内に設けられたファーストインファーストアウト（ＦＩＦＯ）循環バッファにおいて前記ソフトウェア性能プロファイリング情報をストアするよう適合される一連の記憶素子内に前記ソフトウェア性能プロファイリング情報をストアするステップを含む、方法。
【請求項９】
前記予め定められたソフトウェア命令は特定されたソフトウェアプロシジャへ入ったことを示し、前記さらなる予め定められたソフトウェア命令は特定されたソフトウェアプロシジャから出たことを示す、請求項８に記載の方法。
【請求項１０】
前記予め定められたソフトウェア命令は特定された割込ハンドラへ入ったことを示し、前記さらなる予め定められたソフトウェア命令は前記特定された割込ハンドラから出たことを示す、請求項８に記載の方法。
【請求項１１】
前記ソフトウェア性能プロファイリング情報を前記ＦＩＦＯ循環バッファからデバッグシステムへ通信チャネルを介して通信するステップとをさらに含む、請求項８に記載の方法。
【請求項１２】
前記通信ステップにおいて用いられる前記通信チャネルはシリアルインターフェイスである、請求項１１に記載の方法。
【請求項１３】
前記通信ステップにおいて用いられる前記通信チャネルはパラレルインターフェイスである、請求項１１に記載の方法。
【請求項１４】
ソフトウェア性能プロファイリング情報を生成し分析するためのソフトウェア開発システムであって
一連のソフトウェア命令を実行するよう適合される電子プロセッサベースのデバイスを含み、前記プロセッサベースのデバイスは
外部導体へ接続するためのピンと、
プロセッサコアと、
前記プロセッサコアに結合され前記プロセッサコアにより実行されるソフトウェア命令に関連するソフトウェア性能プロファイリング情報をストアするためのトレースメモリとを含み、前記トレースメモリは一連の記憶素子を含み、前記記憶素子はソフトウェア性能プロファイリング情報をストアするよう適合されており、前記トレースメモリはファーストインファーストアウト（ＦＩＦＯ）循環バッファであり、前記プロセッサベースのデバイスはさらに
前記ソフトウェア性能プロファイリング情報を集め前記ソフトウェア性能プロファイリング情報を前記トレースメモリにもたらすトレース制御回路を含み、前記トレース制御回路は
前記トレースメモリに結合される第１のソフトウェアプロファイルカウンタと、
前記第１のソフトウェアプロファイルカウンタに結合される第１のソフトウェアプロファイルトリガ制御レジスタとを含み、前記第１のソフトウェアプロファイルトリガ制御レジスタは予め定められたソフトウェア命令の実行の際に前記第１のソフトウェアプロファイルカウンタに経過時間のカウントを開始させ、前記トレース制御回路はさらに
前記第１のソフトウェアプロファイルカウンタに結合される第２のソフトウェアプロファイルトリガ制御レジスタを含み、前記第２のソフトウェアプロファイルトリガ制御レジスタはさらなる予め定められたソフトウェア命令の実行の際に前記第１のソフトウェアプロファイルカウンタに経過時間のカウントを停止させ、
前記第１のソフトウェアプロファイルカウンタによる経過時間のカウントの停止によりそのカウント値が前記トレースメモリ内にストアされ、前記トレース制御回路は
前記トレースメモリに結合され、経過時間をカウントする第２のソフトウェアプロファイルカウンタをさらに含み、
前記第２のソフトウェアプロファイルトリガ制御レジスタは、前記さらなる予め定められたソフトウェア命令の実行の際に前記第２のソフトウェアプロファイルカウンタを初期化し、前記第２のソフトウェアプロファイルカウンタの初期化により、初期化の直前のそのカウント値が前記トレースメモリ内にストアされ、前記プロセッサベースのデバイスはさらに
前記プロセッサベースのデバイスの前記ピンに通信可能に結合され前記トレースメモリからソフトウェア性能プロファイリング情報を受信するためのホストシステムを含み、前記ホストシステムはソフトウェア性能プロファイル情報を分析するためのソフトウェアを含む、ソフトウェア開発システム。
【発明の詳細な説明】
【０００１】
技術分野
この発明はマイクロプロセッサにおけるソフトウェア性能プロファイリングサポートに関し、より特定的にはソフトウェア性能プロファイルデータをキャプチャする能力を有するオンチップトレースキャッシュを組込んだマイクロプロセッサベースのデバイスに関する。
【０００２】
背景技術
ソフトウェア性能プロファイリングとは、ソフトウェアプログラム内での種々のソフトウェアプロシジャの実行時間、頻度およびコールパターンを調べることである。ソフトウェアアプリケーションの実行時間を最適化しようと試みるソフトウェアエンジニアにとって、性能プロファイリングは非常に有効なツールとなり得る。ソフトウェアプロファイリングを実行するために、統計的分析に基づく数多くの技術を含むさまざまな技術が現在用いられている。ソフトウェアプロファイリングを実行する際に、実行時間およびサブルーチンコールリンクは時々、ソフトウェアを実行しているコンピュータシステムのシステムバスをモニタする外部の（オフチップの）計測器によりキャプチャされる。代わりに、ソフトウェアが実行されるコンピュータシステムに直接プロファイリング情報をもたらすようソフトウェアに「計測機能を付ける」またはソフトウェアを変形することができる。
【０００３】
ソフトウェアがますます複雑になり、これに相まってプロセッサのクロック速度が増加していることから、アプリケーションソフトウェアの開発者らの負担が増し、性能プロファイリングの課題が複雑になっている。現在、新しいソフトウェア製品の開発、デバッグおよび最適化に関連するコストはプロセッサを選択する上で重要な要素である。性能プロファイリングを含む、ソフトウェアデバッグを十分容易にするプロセッサ機能により、顧客による開発にかかる時間が短くなり産業においてそのプロセッサを用いることの魅力が増す。ソフトウェアデバッグサポートを提供することは、専門化されたオンチップ回路がしばしばプロセッサコアと組合されている組込製品産業において特に必要とされている。
【０００４】
ロジックアナラザイザ、読出専用メモリ（ＲＯＭ）エミュレータおよびインサーキットエミュレータ（ＩＣＥ）がソフトウェア性能プロファイリングデータをキャプチャするのにしばしば用いられる。インサーキットエミュレータは他のデバッグ環境に比べて、メモリおよびレジスタの内容に対する完全な可制御性および可観測性をもたらし、システムメモリが不十分である場合にはオーバレイおよびトレースメモリをも提供するなどの利点がある。しかしながら、カスタムエミュレータバックエンドをプロセッサソケットとインターフェイスしてエミュレーション装置とターゲットシステムとの通信を可能にする従来のインサーキットエミュレータの使用は今日の非定型のパッケージおよび製品寿命サイクル短縮の時代においてはますます困難であり費用が高くなりつつある。
【０００５】
別のアプローチ（モトローラ社（Motorola，Inc．）による「バックグラウンドデバッグモード」（“Background Debug Mode”））では、基本的な実行制御のため、限られたオンチップデバッグ回路が提供される。このアプローチでは、さらなるピンを必要とする専用シリアルリンクを介してデバッガ／性能プロファイラがターゲットシステムを開始および停止し、かつシステムメモリに特殊な命令を挿入することにより基本的なコードのブレークポイントを適用することを可能にする。ブレークポイントレジスタが、タイマを開始し停止するよう機能するオフチップトリガパルスを発生するのに用いられる。しかしながら、シリアルリンクはオンチップのソフトウェア性能プロファイリングキャプチャ能力を提供せず、プロファイルデータをもたらすにはさらなる専用のピンおよび外部トレースキャプチャハードウェアが必要である。
【０００６】
上述のように、時々ソフトウェア自体に計測機能が付いているためソフトウェアを分析して性能プロファイリングデータを収集することができる。多くの場合、計測機能付コードは、選択されたプロシジャを分析するために、プロファイリング情報を挿入するように構成されるコンパイラによって生成される。たとえば、プロシジャコールのプロローグおよび終りのエピローグにおいて、コンパイラは実行時間をトラッキングするカウンタを活性化するのに用いられるコードを挿入してもよい。特定されたプログラム実行コールが実行されると、挿入されたルーチンへのジャンプが行なわれカウンタ／タイマをマークする。他の補助プロシジャをコールする親プロシジャの実行時間は、親プロシジャの全実行時間から補助プロシジャの実行時間を減算することによって定められる。あるモジュールのすべてのプロシジャを分析することによって、そのモジュールの全実行時間を計算できる。むろん、所与のプロシジャの実行時間はプロシジャにおける変数の状態に応じて変動することがあり、統計的サンプリングを利用することが必要となる。
【０００７】
このように、ソフトウェア性能プロファイリングに対する数多くの現在の解決策には、コードに計測機能を付けることの必要、パッケージングおよび開発のコストの増加、回路の複雑さ、ならびに帯域幅整合の困難を含む、さまざまなハードウェアおよびソフトウェアの制約がある。特に、内部プロセッサのクロック周波数が増加し続けるにつれ、将来、既存の解決策の制約が悪化する可能性が高いため、プロファイルデータをキャプチャするための低コストのプロシジャは非常に望ましいものである。
【０００８】
米国特許第５，０５８，１１４号では、トレース機能を組込んだプログラム制御装置が記載されている。ある特定の動作モードの間に活性化され外部条件に対応する情報とプログラム制御装置の動作シーケンスにかかった時間に関する情報とを連続してストアする記憶回路が提供される。
【０００９】
発明の開示
簡単に、この発明によるプロセッサベースのデバイスは、ソフトウェア性能プロファイリング情報を提供するためのオンチップトレースキャッシュおよびサポート回路を含む。トレースキャッシュは選択されたプロシジャにおいて費やされた実行時間に関する情報を集める。よって性能プロファイリング情報が、コードに計測機能を付けたり、プログラム実行速度に悪影響を与えたり、または高価なオフチップサポート装置を用いることなく集められる。
【００１０】
この発明によるシステムにおいて、ブレークポイントまたはトリガ制御レジスタは、選択されたプロシジャに入る際に第１のオンチップカウンタを初期化およびトリガ（開始）するよう構成される。第２のブレークポイントまたはトリガ制御レジスタは、選択されたプロシジャのプロシジャエピローグに入った際に第１のカウンタを停止するのに用いられる。選択されたプロシジャの経過した実行時間を反映するカウンタ値はそこでオンチップトレースキャッシュにストアされる。割込ハンドラ実行時間などの他のパラメータを測定するのに類似の技術を用いることができる。
【００１１】
この発明の開示される実施例では、第２のカウンタも設けられる。第２のカウンタは連続して実行されるが、第２のトリガ制御レジスタにより生じる停止トリガイベントの後にゼロにリセットされる。また、停止トリガイベントによって第２のカウンタの値がオンチップトレースキャッシュ内に入れられる。この第２のカウンタ値は関心の対象であるプロシジャの発生の頻度を得るのに有効である一方、第１のカウンタはプロシジャの実行時間に関する情報をもたらす。
【００１２】
プロファイルデータは、選択されるプロシジャが実行されるコンピュータシステム内にある後処理ソフトウェアによって、デバッグポートを利用するホストシステムによって、またはチップ外のトレースキャプチャ用ハードウェアを介して分析できる。一般的に、一度に１つのプロシジャだけについてプロファイルがとられる。トレースキャッシュを調べることによって、あるプロシジャにおいて費やされた最小、平均および最大時間ならびに他の統計的データを判定できる。この発明の有益な局面の１つはプロシジャプロローグおよびエピローグを修正する必要がないことである。しかしながら、なおコンパイラを利用してこの発明に使用するためのプロファイリング情報を加えるようにしてもよい。
【００１３】
トレース情報を外部デバイスに通信するためにシリアルおよびパラレル通信チャネルの両方が設けられる。この発明の開示される実施例では、ＩＥＥＥ−１１４９．１−１９９０に従ったＪＴＡＧ（ジョイントテストアクショングループ）インターフェイスまたは、プロセッサベースのデバイスに統合される類似の規格化されたインターフェイスを用いるソフトウェアデバッグポートを介してプロファイル（またはトレース）キャッシュの可制御性および可観測性が達成される。
【００１４】
このように、ソフトウェア性能プロファイリング情報をもたらすための柔軟な高性能の解決策を提供するプロセッサベースのデバイスが提供される。また、開示されるオンチップトレースキャッシュにより、数多くの既存の解決策において生じている帯域幅およびクロック同期のさまざまな問題が軽減される。
【００１５】
この発明は好ましい実施例の以下の詳細な説明を以下の図面と関連して考慮する際によりよく理解できるであろう。
【００１６】
発明を実施するための形態
図面を参照して、図１はこの発明のある考えられる用途を示す例示的なソフトウェアデバッグ環境を示す。ターゲットシステムＴはシステムメモリ１０６に結合される、この発明による組込プロセッサデバイス１０２を含んでいるのが示される。組込プロセッサデバイス１０２はプロセッサコア１０４、トレースキャッシュ２００（図２）およびデバッグポート１００を組込んでいる。この発明には重要ではないが、組込プロセッサデバイス１０２は応用に特有の機能を実行するためのさらなる回路（図示せず）を組込んでいてもよく、またはスタンドアロンプロセッサまたはデジタル信号プロセッサの形をとっていてもよい。好ましくは、デバッグポート１００はＩＥＥＥ−１１４９．１−１９９０に従ったＪＴＡＧインターフェイスまたは他の類似の規格化されたシリアルポートインターフェイスを用いる。
【００１７】
ホストシステムＨを用いてデバッグ制御ソフトウェア１１２を実行し、高レベルのコマンドを転送し、ターゲットシステムＴにより生成されるソフトウェア性能プロファイリング情報の抽出および分析を制御する。この発明の開示される実施例のホストシステムＨおよびターゲットシステムＴはシリアルリンク１１０を介して通信する。ほとんどのコンピュータはシリアルまたはパラレルインターフェイスを備えており、これはさほど費用をかけずにシリアルコネクタ１０８によりデバッグポート１００に接続でき、さまざまなコンピュータがホストシステムＨとして機能できるようにする。代わりに、シリアルコネクタ１０８をより高速のＪＴＡＧ−ネットワーク変換装置で置換えてもよい。さらに、ターゲットシステムＴは内部でソフトウェア性能プロファイリングデータを分析するよう構成してもよい。
【００１８】
次に図２を参照して、この発明による組込プロセッサデバイス１０２の詳細が示される。プロセッサコア１０４に加えて、図２ではトレースキャッシュ２００を利用し制御する能力を有するデバッグポート１００の強化型実施例のさまざまな要素が示される。当業者には明らかとなるように数多くの他の構成が可能であり、以下に説明するさまざまなプロセッサデバイス１０２の構成要素はオンチップトレースキャッシュ２００を提供することに関連する利益を例示する目的で示される。
【００１９】
この発明の開示される実施例のトレース制御回路２１８およびトレースキャッシュ２００はまた、ソフトウェア性能プロファイリング情報をキャプチャするよう協働してもよい。さらに、トレース制御回路２１８はトレースパッドインターフェイスポート２２０またはトレースキャッシュ２００への「トレーシング」をサポートし、ソフトウェア性能プロファイリングデータのキャプチャを選択的に活性化するためのユーザ制御をもたらす。トレース制御回路２１８により可能となる他の特徴には、以下に詳しく説明するように、ユーザ特定のトレースレコードおよび同期アドレス生成のプログラム可能性が含まれる。
【００２０】
最低限として、この発明の説明される実施例ではソフトウェアデバッグポート１００において従来のＪＴＡＧピンのみをサポートすればよい。ＪＴＡＧピンは実質的に、既存のピンを用いて、プロセッサコア１０４が実行すべきプロファイリングおよび他のコマンドを入れるための移送機構となる。より特定的には、ＪＴＡＧテストアクセスポート（ＴＡＰ）コントローラ２０４へ与えられ、かつこれにより駆動されるテストクロック信号ＴＣＫ、テストモード選択信号ＴＭＳ、テストデータ入力信号ＴＤＩおよびテストデータ出力信号ＴＤＯは従来のＪＴＡＧサポート信号であり当業者には公知である。以下により詳しく説明するように、デバッグポート１００の「強化型」実施例では標準ＪＴＡＧインターフェイスにコマンド確認信号ＣＭＤＡＣＫ、ブレークリクエスト／トレースキャプチャ信号ＢＲＴＣ、送信停止信号ＳＴＯＰＴＸおよびトリガ信号ＴＲＩＧが加えられる。この付加的な信号により、非常に正確な外部ブレークポイントのアサーションおよびモニタリングが可能となり、内部ブレークポイントに応答して外部デバイスがトリガされ、ＪＴＡＧシリアルインターフェイスのステータスのポーリングがなくなる。これらの「側波帯」信号によって追加の機能性がもたらされ、デバッグポート１００のための通信速度が向上する。また、これらの信号は、開示される組込プロセッサデバッグ１０２の特殊なボンドアウトタイプのものに設けられる任意のパラレルポート２１４の動作を助ける。
【００２１】
ＪＴＡＧ  ＴＡＰコントローラ２０４は従来のＪＴＡＧ信号を介して標準のＪＴＡＧシリアルデータおよび制御を受入れる。ＤＥＢＵＧ命令がＪＴＡＧ命令レジスタに書かれると、シリアルデバッグシフタ２１２がＪＴＡＧテストデータ入力信号ＴＤＩおよびテストデータ出力信号ＴＤＯに接続され、コマンドおよびデータをデバッグレジスタ２１０にロードし、およびこれらをデバッグレジスタ２１０から読むことができるようにする。この発明の開示される実施例では、デバッグレジスタ２１０はデータを送信するため（ＴＸ＿ＤＡＴＡレジスタ）および受信するため（ＲＸ＿ＤＡＴＡレジスタ）の２つのデバッグレジスタと、命令トレース設定レジスタ（ＩＴＣＲ）と、デバッグ制御ステータスレジスタ（ＤＣＳＲ）とを含む。
【００２２】
制御インターフェイスステートマシン２０６は、シリアルデバッグシフタ２１２およびデバッグレジスタ２１０へ／からのデータのローディング／読取を調整する。コマンドデコードおよび処理ブロック２０８はコマンド／データをデコードし、これらをプロセッサインターフェイス論理２０２およびトレースデバッグインターフェイス論理２１６にディスパッチする。他の機能を実行することに加えて、トレースデバッグインターフェイス論理２１６およびトレース制御論理２１８はトレースキャッシュ２００からＴＡＰコントローラ２０４へのソフトウェア性能プロファイリングおよび他のトレース情報の通信を調整する。プロセッサインターフェイス論理２０２はプロセッサコア１０４ともトレース制御論理２１８とも直接通信する。以下により完全に説明するように、パラレルポート論理２１４は制御インターフェイスステートマシン２０６およびデバッグレジスタ２１０と通信して、オプションのボンドアウトタイプの組込プロセッサデバイス１０２においてパラレルデータ読取／書込動作を実行する。
【００２３】
デバッグポート１００を介して（従来のＪＴＡＧ信号のみを用いて）ソフトウェア性能プロファイリング情報が通信される前に、ポート１００がパブリックＪＴＡＧ命令ＤＥＢＵＧをＴＡＰコントローラ２０４内に含まれるＪＴＡＧ命令レジスタに書込むことによりイネーブルされる。以下に示すように、開示される実施例のＪＴＡＧ命令レジスタは３８ビットレジスタであり、３２ビットのデータフィールド（debug_data［３１：０］）と、デバッグポート１００がもたらす機能およびさまざまの内部レジスタを示すための４ビットのコマンドフィールドと、コマンド係属中フラグと、コマンド完了フラグとを含む。いくつかのコマンドでは、debug_dataフィールドからのビットをサブフィールドとして用いて利用可能なコマンドの数を増やすことも可能である。
【００２４】
【表１】
0004138021.tif 000002
【００２５】
このＪＴＡＧ命令レジスタはテストモード選択信号ＴＭＳをトグルすることにより選択される。テストモード選択信号ＴＭＳはスキャンパス内のＪＴＡＧのクロック供給の経路を変更することを可能にし、異なる長さの複数の経路を用いることができるようにする。好ましくは、ＪＴＡＧ命令レジスタは短い経路を介してアクセスすることが可能である。このレジスタは、特定されたシステムレジスタへロードすべき、またはそれらから受けるべき値を保持するための「ソフト」レジスタを含むよう構成される。
【００２６】
次に図３を参照して、この発明による組込プロセッサデバイス１０２の例示的なトレースキャッシュ２００と他の構成要素との関係を示す簡略化されたブロック図が示される。この発明のある考えられる実施例では、トレースキャッシュ２００は１２８エントリのファーストインファーストアウト（ＦＩＦＯ）循環キャッシュである。トレースキャッシュ２００のサイズを大きくすることにより、必要となるシリコン領域の量が増加するかもしれないが、キャプチャできるソフトウェア性能プロファイルおよび他の命令トレース情報の量も増加する。
【００２７】
以下により詳しく説明するように、この発明の開示される実施例のトレースキャッシュ２００は、ソフトウェア性能プロファイリングおよび他のトレース情報などの、複数の２０ビット（またはそれ以上）のトレースエントリをストアする。タスク識別子およびトレースキャプチャ停止／開始情報などの付加的な情報もまたトレースキャッシュ２００内に入れることができる。トレースキャッシュ２００の内容はホストシステムＨなどの外部ハードウェアにシリアルまたはパラレルのいずれかのトレースピン２３０を介して与えられる。代わりに、内部でトレースキャッシュ２００の内容を調べるようにターゲットシステムＴを構成してもよい。
【００２８】
図４では、標準ＪＴＡＧインターフェイスを用いた際のコマンド処理過程の高レベルのフローチャートが示される。ステップ４００においてデバッグモードに入る際、ＤＥＢＵＧ命令がステップ４０２においてＴＡＰコントローラ２０４に書かれる。次に、ステップ４０４で、コマンド係属中フラグがセットされ、かつデータフィールドに所望のデータがある（これは当てはまる場合であり、そうでなければ０）状態で、３８ビットのシリアル値が一まとまりとしてシフトインされる。制御はステップ４０６に進み、ここで係属中コマンドはロード／アンロードされ、コマンド完了フラグがチェックされる。コマンドの完了は典型的に、データレジスタとプロセッサレジスタまたは記憶／ＩＯ場所との間での値の転送を伴う。コマンドが完了した後、プロセッサ１０４はコマンド係属中フラグをクリアし、コマンド完了フラグをセットすると同時に、当てはまる場合にはデータフィールドに値をストアする。３８ビットレジスタ全体をスキャンしてコマンド完了フラグおよびコマンド係属中フラグをモニタする。係属中フラグが０にリセットされ、完了フラグが１に設定されている場合、前のコマンドは完了している。フラグのステータスは制御インターフェイスステートマシン２０６によりキャプチャされる。フラグのステータスのスレーブコピーが内部に保存され、次の命令をロードすべきであるかどうかを定める。ＴＡＰコントローラ２０４の状態の間のフラグステータスの変化の可能性があるためスレーブコピーは維持される。このことによりプロセッサ１０４は次の命令をロードする前に前の命令が完了しているかどうかを判定することができる。
【００２９】
完了フラグがステップ４０８においてセットされていないと判定された場合、制御はステップ４１０に進み、３８ビットコマンドのロード／アンロードが繰返される。コマンド終了フラグもチェックされる。制御は次にステップ４０８に戻る。完了フラグがステップ４０８において定められるようにセットされていれば、制御はステップ４０６に戻り次のコマンドを処理する。ＤＥＢＵＧモードから出るには典型的なＪＴＡＧプロセスを介する。
【００３０】
再び図２を参照して、前述の任意の側波帯信号を強化されたデバッグポート１００において利用して余分の機能性をもたらすようにする。任意の側波帯信号は、デバッグ制御／ステータスレジスタにおいてセットされるビットのステータスに応じてブレークリクエスト信号またはトレースキャプチャイネーブル信号として機能できるフレークリクエスト／トレースキャプチャ信号ＢＲＴＣを含む。ブレークリクエスト／トレースキャプチャ信号ＢＲＴＣがブレークリクエスト信号として機能するよう設定される場合、これはアサートされてプロセッサ１０４がデバッグモードに入るようにさせる（プロセッサ１０４は従来のＪＴＡＧ信号を介してホールトコマンドをスキャンインすることにより停止することもできる）。トレースキャプチャイネーブル信号として機能するよう設定されている場合は、ブレークリクエスト／トレースキャプチャ信号ＢＲＴＣをアサートすることでトレース情報のキャプチャがイネーブルされる。この信号がデアサートされるとトレースキャプチャは停止される。信号は、検出された後、次の命令の境界において有効となり、かつ内部プロセッサクロックと同期化される。ブレークリクエスト／トレースキャプチャ信号ＢＲＴＣはどの時点でアサートしてもよい。
【００３１】
トリガ信号ＴＲＩＧは内部プロセッサブレークポイントがアサートされるといつでもパルスを生じるよう構成される。トリガ信号ＴＲＩＧはロジックアナライザなどの外部キャプチャデバイスをトリガするのに用いてもよく、トレースレコードキャプチャクロック信号ＴＲＡＣＥＣＬＫと同期する。ブレークポイントが生成されると、そのイベントはトレースキャプチャクロック信号ＴＲＡＣＥＣＬＫと同期し、その後にトリガ信号ＴＲＩＧはトレースキャプチャの持続時間にわたってアクティブに保たれる。
【００３２】
送信停止信号ＳＴＯＰＴＸは、プロセッサ１０４がＤＥＢＵＧモードに入り、かつレジスタ問合せ／変更、デバッグポート１００を介してのメモリまたはＩ／Ｏ読取および書込の準備ができている際にアサートされる。この発明の開示される実施例では、送信停止信号ＳＴＯＰＴＸはデバッグ制御ステータスレジスタ（ＤＣＳＲ）内のビットの状態を反映する。送信停止信号ＳＴＯＰＴＸはトレースキャプチャクロック信号ＴＲＡＣＥＣＬＫと同期する。
【００３３】
コマンド確認信号ＣＭＤＡＣＫは図５に関連して説明され、図５は図２の強化されたデバッグポート１００における簡略化されたコマンド処理過程を示す。再び、ターゲットシステムＴをＤＥＢＵＧモードに入れるため、ＤＥＢＵＧ命令がステップ５０２においてＴＡＰコントローラ２０４に書かれる。制御はステップ５０４に進み、コマンド完了ステータスを判定するためホストシステムＨによりコマンド確認信号ＣＭＤＡＣＫがモニタされる。この信号はコマンド完了フラグと同時にターゲットシステムＴによってハイにアサートされ、次のシフトサイクルが開始するまでハイのままである。コマンド確認信号ＣＭＤＡＣＫを用いる際に、コマンド完了フラグステータスをキャプチャするのにＪＴＡＧ命令レジスタをシフトアウトする必要はない。コマンド確認信号ＣＭＤＡＣＫは、コマンド完了フラグが０から１に変化した後のテストクロック信号ＴＣＫの次の立上がりエッジにおいてハイに遷移する。強化型ＪＴＡＧ信号を用いる場合、コマンド確認信号ＣＭＤＡＣＫピンがハイにアサートされるまではホストシステムＨによって新しいシフトシーケンス（ステップ５０６）は開始されない。コマンド確認信号ＣＭＤＡＣＫはテストクロック信号ＴＣＫと同期する。テストクロック信号ＴＣＫは常にクロックされる必要はないが、理想的にはコマンド確認信号ＣＭＤＡＣＫの応答を待っている間は連続してクロックされる。
【００３４】
デバッグポート１００を介するオペレーティングシステム／アプリケーション通信
デバッグレジスタブロック２１０にはまた、命令トレース設定レジスタ（ＩＴＣＲ）が含まれる。この３２ビットレジスタはソフトウェア性能プロファイルおよび命令トレースデバッグ機能のイネーブル／ディセーブルおよび設定を行なう。、トレース同期強制カウント、トレース初期化、命令トレーシングモーこのような機能は数多く考えられ、さまざまなレベルのトレーシングド、クロック分周比情報および下の表に示されるさらなる機能が含まれる。ＩＴＣＲはデバッグレジスタブロック２１０の他のレジスタの場合と同様にＪＴＡＧ命令レジスタ書込／読取コマンドを介してアクセスされるか、または予約された命令を介してアクセスされる。
【００３５】
【表２】
0004138021.tif 000003
【００３６】
別のデバッグレジスタであるデバッグ制御／ステータスレジスタ（ＤＣＳＲ）はプロセッサ１０４がいつデバッグモードに入ったかを示す表示をもたらし、プロセッサ１０４が強化型ＪＴＡＧインターフェイスを介してＤＥＢＵＧモードに入るように強いることができる。下の表に示されるように、ＤＣＳＲはまた、プロセッサ１０４へのレディ信号の強制、デバッグポートを介して開始されるアクセスに対するメモリアクセス空間の制御、ＤＥＢＵＧモードに入った際のキャッシュフラッシュのディセーブル、ＴＸおよびＲＸビット、パラレルポート２１４のイネーブル、強制ブレーク、強制グローバルリセットおよび他の機能など、さまざまな制御特徴をイネーブルする。ＩＴＣＲまたはＤＣＳＲのどちらかにおけるさまざまなビットの順序または存在はこの発明の動作にとり重要ではない。
【００３７】
【表３】
0004138021.tif 000004
【００３８】
図１のようなクロスデバッグ環境にある場合、ターゲットシステムＴにおいて実行中の親タスクがこれを制御するホストプラットホームＨに情報を送ることが望ましい。このデータはたとえば、printf()コールからの文字ストリームまたはタスク制御ブロック（ＴＣＢ）からのレジスタ情報を含んでいてもよい。データを転送するためのある考えられる方法は、オペレーティングシステムがデータを既知の領域に入れて、次にトラップ命令を介してＤＥＢＵＧモードに入るようにさせることである。
【００３９】
ホストシステムＨは次に、デバッグポート１００のコマンドを介して、ＤＥＢＵＧモードに入った理由を判定し、予約された領域からデータを引出すことにより応答することができる。しかしながら、プロセッサ１０４がＤＥＢＵＧモードに入っている間、通常のプロセッサ実行は停止されている。上記のとおり、これは数多くのリアルタイムのシステムにおいては望ましいことではない。
【００４０】
この状況はこの発明によれば、デバッグポート１００においてデータを送信するため（ＴＸ＿ＤＡＴＡレジスタ）および受信するため（ＲＸ＿ＤＡＴＡレジスタ）の２つのデバッグレジスタを設けることによって対処される。これらのレジスタはソフトアドレスおよびＪＴＡＧ命令レジスタコマンドを用いてアクセスできる。上述のように、ホストシステムＨがデバッグ命令をＪＴＡＧ命令レジスタに書いた後、シリアルデバッグシフタ２１２がテストデータ入力信号ＴＤＩラインおよびテストデータ出力信号ＴＤＯラインに結合される。
【００４１】
プロセッサ１０４がコードを実行し、それによりこれがデータを送信するようにさせると、これはまずＩＴＣＲにおけるＲＸビットをテストする。ＴＸビットが０に設定されている場合、プロセッサ１０４はプロセッサ命令（メモリまたはＩ／Ｏ書込のいずれか）を実行してデータをＴＸ＿ＤＡＴＡレジスタに転送する。デバッグポート１００はＤＣＳＲおよびＩＴＣＲにおいてＴＸビットをセットし、ホストシステムＨに対してこれがデータを送信する準備ができたことを示す。また、ＳＴＯＰＴＸピンはハイに設定される。ホストシステムＨがＴＸ＿ＤＡＴＡレジスタからの送信データの読取を終えると、ＴＸビットは０に設定される。そこで、ＩＴＣＲにおけるＴＸＩＮＴＥＮビットがセットされ、プロセッサ１０４に割込みの信号を発生する。この割込みはＩＴＣＲにおけるＴＸビットが０に遷移したときのみ生成される。ＴＸＩＮＴＥＮビットがセットされていない場合、プロセッサ１０４はＩＴＣＲをポーリングして、さらにデータを送信するためにＴＸビットのステータスを判定する。
【００４２】
ホストシステムＨがデータを送ることを望む場合、ホストシステムＨはまずＩＴＣＲにおけるＲＸビットをテストする。ＲＸビットが０に設定されている場合、ホストシステムＨはデータをＲＸ＿ＤＡＴＡレジスタに書き、ＲＸビットがＤＣＳＲおよびＩＴＣＲの双方において１に設定される。そこで、ＲＸＩＮＴビットがＩＧＣＲにおいてセットされ、プロセッサ１０４に割込みの信号を発生する。この割込みはＩＴＣＲにおけるＲＸが１に遷移したときのみ生成される。ＲＸＩＮＴＥＮビットがセットされていない場合、プロセッサ１０４はＩＴＣＲをポーリングしてＲＸビットのステータスを確かめる。ＲＸビットが１に設定されている場合、プロセッサ命令が実行されＲＸ＿ＤＡＴＡレジスタからデータが読まれる。プロセッサ１０４によりＲＸ＿ＤＡＴＡレジスタからデータが読まれた後に、ＲＸビットは０に設定される。ホストシステムＨは連続してＩＴＣＲを読み、さらにデータを送るためにＲＸビットのステータスを判定する。
【００４３】
この技術ではプロセッサ１０４の実行を停止することなくオペレーティングシステムまたはアプリケーションがホストシステムＨと通信することが可能となる。通信はデバッグポート１００を介して好都合に行なわれ、オンチップアプリケーションリソースへの影響は最小である。場合によってはシステム割込みをディセーブルする必要がある。このため、プロセッサ１００がＲＸビットおよびＴＸビットを調べる必要がある。この場合には、通信リンクはポーリングモードで駆動される。
【００４４】
デバッグポート１００へのパラレルインターフェイス
いくつかの組込システムでは、Ｉ／Ｏおよびデータ処理動作を維持しながら命令トレースを調べることが必要となる。マルチタスクのオペレーティングシステムを用いない場合は、デバッグポート１００を介してトレースキャッシュ２００を調べるにはプロセッサ１０４を停止する必要があるため、トレースデータをもたらすのにボンドアウトタイプの組込プロセッサデバイス１０２が好ましい。
【００４５】
この発明の開示される実施例では、パラレルポート２１４がオプションのボンドアウトタイプの組込プロセッサデバイス１０２に設けられ、デバッグポート１００にパラレルコマンドおよびデータアクセスを提供する。このインターフェイスは１６ビットのデータ経路をもたらし、これはトレースパッドインターフェイスポート２２０で多重化される。より特定的には、パラレルポート２１４は、１６ビット幅の二方向性データバス（ＰＤＡＴＡ［１５：０］）、３ビットアドレスバス（ＰＡＤＲ［２：０］）、パラレルデバッグポート読取／書込選択信号（ＰＲＷ）、トレース有効信号ＴＶおよび命令トレースレコード出力クロックＴＲＡＣＥＣＬＯＣＫ（ＴＣ）をもたらす。トレースパッドインターフェイスポート２２０と共有されないが、パラレルバスリクエスト／グラント信号対ＰＢＲＥＱ／ＰＢＧＮＴ（図示せず）も提供される。パラレルポート２１４はＤＣＳＲにおけるあるビットをセットすることによりイネーブルされる。デバッグポート１００を介するシリアル通信はパラレルポート２１４がイネーブルされる際にディセーブルされない。
【００４６】
【表４】
0004138021.tif 000005
【００４７】
パラレルポート２１４は主に、ターゲットシステムＴのメモリに対する高速のダウンロード／アップロードに用いることが意図される。しかしながら、パラレルポート２１４はプロセッサ１０４が停止したときはいつでもターゲットシステムＴとのすべてのデバッグ通信のために用いることができる。シリアルデバッグ信号（標準または強化型）はプロセッサ１０４が命令を実行している際にターゲットシステムＴへのデバッグアクセスのために用いられる。
【００４８】
ＪＴＡＧ規格と類似した態様で、パラレルポート２１４へのすべての入力はテストクロック信号ＴＣＫの立上がりエッジにおいてサンプリングされ、すべての出力はテストクロック信号ＴＣＫの立下がりエッジにおいて変更される。開示される実施例では、パラレルポート２１４はトレースパッドインターフェイス２２０とピンを共用しており、プロセッサ１０４が停止されトレースパッドインターフェイス２２０が共有バスから切断されている間だけパラレルコマンドの開始が必要となる。
【００４９】
パラレルバスリクエスト信号ＰＢＲＥＱおよびパラレルバスグラント信号ＰＢＧＮＴは、トレースキャッシュ２００とパラレルポート２１４との間で共有バス信号の多重化を促進するために提供される。パラレルポート２１４へのホストインターフェイスはパラレルバスリクエスト信号ＰＢＲＥＱがアサートされていることを判定すると、パラレルポート２１４の信号を駆動し始めパラレルバスグラント信号ＰＢＧＮＴをアサートする。
【００５０】
パラレルポート２１４がイネーブルされた状態でＤＥＢＵＧモードに入るかまたはＤＥＢＵＧモードから出る場合、プロセッサ状態保存および復元サイクルのためにパラレルポート２１４が用いられる。パラレルバスリクエスト信号ＰＢＲＥＱは、ＤＥＢＵＧモードに入る前の状態保存シーケンスが始まる直前にアサートされる。最後の状態復元サイクルにおいて、パラレルバスリクエスト信号ＰＢＲＥＱは書込データをラッチした後にデアサートされる。パラレルポート２１４のホストインターフェイスはパラレルバスリクエスト信号ＰＢＲＥＱのデアサーションに応答してそのパラレルポートドライバをトライステート状態とし、パラレルバスグラント信号ＰＢＧＮＴをデアサートする。次に、パラレルポート２１４はデバッグトレースポートピンドライバをイネーブルし、最後の状態復元サイクルを完了し、コマンド確認信号ＣＭＤＡＣＫをアサートし、インターフェイスの制御をトレース制御論理２１８に戻す。
【００５１】
パラレルポート２１４を介して通信する際に、アドレスピンＰＡＤＲ［２：０］を用いてＪＴＡＧ命令レジスタのフィールドを選択し、これは下の表に示されるように１６ビットデータバスＰＤＡＴＡ［１５：０］にマッピングされる。
【００５２】
【表５】
0004138021.tif 000006
【００５３】
debug_data［３１：０］レジスタの一方の半分のみが用いられている場合（たとえば８ビットＩ／Ｏサイクルデータ書込など）は、debug_data［３１：０］レジスタの両半分を更新する必要はない。コマンド係属中フラグは４ビットコマンドレジスタへの書込動作を行なう際に自動的にセットされ、コマンド完了フラグがアサートされるとクリアされる。ホストシステムＨはコマンド確認信号ＣＭＤＡＣＫをモニタして完了フラグがいつアサートされたかを判定することができる。パラレルポート２１４を用いることにより、プロセッサコア１０４を減速することなく実行履歴を完全に見ることができる。必要であればトレースキャッシュ２００をパラレルポート２１４に対するバッファとして用いるように構成して帯域幅整合の問題などあれば軽減するようにしてもよい。
【００５４】
オペレーティングシステムおよびデバッガ統合
この発明の開示される実施例では、トレースキャッシュ２００を含むすべてのデバッグサポート特徴の動作はデバッグポート１００またはプロセッサ命令を介して制御することができる。これらのプロセッサ命令はモニタプログラム、ターゲットで動作するデバッガまたは従来のポッドウェアからのものであってもよい。デバッグポート１００は、プロセッサ命令によってではなくシリアルデータポートコマンドによって開始されるデータ移動を行なう。
【００５５】
従来のポッド空間からのプロセッサコア１０４の動作はモニタプログラムからＤＥＢＵＧモードにおいて動作するのによく類似している。すべてのデバッグ動作はプロセッサ命令を介して制御できる。これらの命令がポッド空間から来たものであろうと通常のメモリから来たものであろうと関係がない。このことにより、オペレーティングシステムをさらなるデバッグ能力を含むよう拡張することが可能となる。
【００５６】
むろん、ptrace()などの特権システムコールを介して、オペレーティングシステムは長い間デバッガをサポートしてきた。しかしながら、今、オンチップトレースキャッシュ２００を組込むことによってオペレーティングシステムがソフトウェア性能プロファイリングおよび命令トレース能力をもたらすことが可能である。この発明によるデバッグ環境では、「外部」ロジックアナライザまたはインサーキットエミュレータを組込むことなくオペレーティングシステムを強化して限られたトレースをサポートすることができる。
【００５７】
トレースキャッシュ２００の内容の内部ローディングおよび読出をサポートするのに用いられる命令の例にはロード命令トレースキャッシュレコードコマンドＬＩＴＣＲおよびストア命令トレースキャッシュレコードコマンドＳＩＴＣＲが含まれる。コマンドＬＩＴＣＲは、プロセッサコア１０４のＥＡＸレジスタの内容とともに、トレースキャッシュポインタＩＴＲＥＣ．ＰＴＲによる指定にしたがってトレースキャッシュ２００内に指標付きレコードをロードする。トレースキャッシュポインタＩＴＲＥＣ．ＰＴＲはコマンドＬＩＴＣＲの一般的な動作が以下のとおりとなるように予めインクリメントされる。
【００５８】
【数１】
0004138021.tif 000007
【００５９】
命令トレースレコード（以下のトレースレコードフォーマットの説明を参照のこと）がＥＡＸレコードより小さい場合には、ＥＡＸレジスタの一部のみが利用される。
【００６０】
同様に、ストア命令トレースキャッシュレコードコマンドＳＩＴＣＲはトレースキャッシュ２００から指標付きレコードを取出し（ＥＡＸレジスタ内に）ストアするのに用いられる。プロセッサコア１０４のＥＣＸレジスタの内容は、トレースキャッシュ２００内への指標を作るためトレースキャッシュポインタＩＴＲＥＣ．ＰＴＲに加えられるオフセットとして用いられる。ＥＣＸレジスタは後でインクリメントされるが、トレースキャッシュポインタＩＴＲＥＣ．ＰＴＲは影響を受けず、以下のとおりとなる。
【００６１】
【数２】
0004138021.tif 000008
【００６２】
ＬＩＴＣＲおよびＳＩＴＣＲコマンドのフォーマットの数多くの変形は当業者には明らかになるであろう。
【００６３】
オペレーティングシステムを拡張してオンチップトレースをサポートすることには通信産業においてある利点を有する。タスクがトレースされている間、システムＩ／Ｏおよび通信活動を維持することが可能になる。従来、インサーキットエミュレータを使用すると、（ptrace()とは異なり）プロセッサの状態およびトレースを調べられるようにするにはまずプロセッサを停止する必要があった。このため、Ｉ／Ｏデータ処理の連続したサポートが中断されることになる。
【００６４】
さらに、トレースキャッシュ２００は、現場の装置とともに用いると非常に有効である。予期せずシステムクラッシュが起こった場合、トレースキャッシュ２００を調べてクラッシュイベントに達するまでの実行履歴を観察できる。電力消費が問題となるポータブルシステムまたは他の環境において用いる場合には、トレースキャッシュ２００を必要に応じて電力管理回路を介してディセーブルしてもよい。
【００６５】
例示的なトレースレコードフォーマット
この発明の開示される実施例では、命令トレースレコードは２０ビット幅であり、ＴＣＯＤＥ（トレースコード）およびＴＤＡＴＡ（トレースデータ）の２つのフィールドと有効ビットＶとを含む。ＴＣＯＤＥフィールドはＴＤＡＴＡフィールド内のデータのタイプを識別するコードである。ＴＤＡＴＡフィールドはデバッグの目的に用いられるソフトウェア性能プロファイルおよび他のトレース情報を含む。
【００６６】
【表６】
0004138021.tif 000009
【００６７】
この発明のある考えられる実施例では、組込プロセッサデバイス１０２は下の表に提示される性能プロファイリングデータおよび他の１０個のトレースコードに対応するデータを報告する。
【００６８】
【表７】
0004138021.tif 000010
【００６９】
トレースキャッシュ２００の記憶容量は限られているため、キャプチャされたトレースデータのある程度の量の「圧縮」が望ましい。トレースデータをキャプチャする上で、以下の説明ではトレースされるプログラムのイメージがホストシステムＨにとり入手可能であることを前提とする。プログラムイメージ（オブジェクトモジュール）からアドレスを得られる場合、そのアドレスはトレースデータ内にはもたらされない。好ましくは、命令フローを中断する命令のみが報告され、さらに、ターゲットアドレスが何らかの態様でデータに依存するもののみが報告される。たとえば、このような「中断する」イベントには、コール命令、またはターゲットアドレスがデータレジスタまたはスタックなどの他の記憶場所からもたらされる無条件分岐命令が含まれる。
【００７０】
上の表に示されるように、キャプチャできる他のトレース情報には、トラップまたは割込ハンドラのターゲットアドレス、リターン命令のターゲットアドレス、データレジスタに依存する（そうでなければ、必要となるのは分岐がとられたかとられていないかを示す１ビットのトレースだけである）ターゲットアドレスを有する条件付き分岐命令および、より多くの場合はプロシジャリターンからのアドレスが含まれる。タスク識別子およびトレースキャプチャ停止／開始情報などの他の情報もトレースキャッシュ２００内に入れることができる。トレースレコードの厳密な内容および性質はこの発明において重要なことではない。
【００７１】
次に図６Ａを参照して、例示的な性能プロファイルカウンタシーケンスが示される。この発明によるシステムでは、トリガ制御レジスタ２１９は、特定されたプロシジャに対して実行の経過時間を測定するカウンタを開始および停止するよう構成される。トリガ制御レジスタ２１９の厳密な実現はこの発明にとって重要ではないが、（いくつかの先行技術のマイクロプロセッサコアに存在するデバッグレジスタＤＲ０−ＤＲ７のいずれかなどの）従来のブレークポイントレジスタを使用してトリガ機能を実行することが好ましい。さらに、この発明の開示される実施例では、プロファイリング情報を集めている間は通常の命令実行が割込まれないことに注目すべきである。
【００７２】
さらに具体的に図６Ａを参照して、第１のオンチップトリガ制御レジスタ２１９ａは、特定されたプロシジャに入る際に第１のカウンタをトリガ（開始）するよう構成される。第２のトリガ制御レジスタ２１９ｂは、特定されたプロシジャのプロローグに入る際にカウンタを停止するよう用いられる。第１のカウンタが開始トリガによって開始されると、これはゼロに初期化される。第２のトリガ制御レジスタ２１９ｂにより特定されるのにしたがい停止トリガが生成されると、第１のカウンタのカウント値がＴＣＯＤＥ＝１０１０トレースエントリ（図６Ｂ）を用いてトレースキャッシュ２００内に入れられる。同様の技術を用いて割込ハンドラ実行時間などの他のパラメータを測定してもよい。上述のように、トリガ制御レジスタ２１９はまた、トリガ信号ＴＲＩＧを生じさせ、実行トレースが開始および停止すべきところのプログラムアドレスを選択するよう用いてもよい。
【００７３】
この発明の開示される実施例では、第２のカウンタも用いられる。第２のカウンタは連続して実行されるが、停止トリガイベントの後にゼロにリセットされる。また、停止トリガイベントによって第２のカウンタの値がトレースキャッシュ２００内に入れられる。この第２のカウンタ値は関心の対象であるプロシジャの発生の頻度を得るのに有効である一方、第１のカウンタはプロシジャの実行時間に関する情報をもたらす。
【００７４】
図６Ｂを参照して、この発明によるソフトウェア性能プロファイリング情報を報告するためのトレースキャッシュ２００エントリのセットの一般的なフォーマットが示される。示されるように、第１のカウンタのカウント値はＴＣＯＤＥ＝１０１０トレースエントリによって１６ビット値を用いてトレースキャッシュ２００内に入れられる。このＴＣＯＤＥ＝１０１０トレースエントリの後に、第２のカウンタの値を反映する３２ビットカウント値を含むＴＣＯＤＥ＝０１１１エントリ対が続いていてもよい。
【００７５】
この発明の一実施例では、第１および第２のカウンタのカウンタ周波数（すなわち分解能）は２つの値のうちのいずれかになるようにプログラムされる。これにより、非常に低い周波数または高い周波数のイベントのプロファイルをとる際により高い精度が可能となる。たとえば、下の表には、カウンタの２つの累算周波数が示される。
【００７６】
【表８】
0004138021.tif 000011
【００７７】
特権レベルリング０またはリング１に入る際に、時にすべての計数（両方のカウンタ）を停止することが望ましいこともある。これにより、測定されたプロファイリング値からシステムコールおよび割込みをなくすことができる。また、計数をイネーブル／ディセーブルし、また双方のカウント値を同時にリセットする手段を含む、２つのさらなるサポート特徴を組込んでもよい。この発明の開示される実施例のこの局面は、モニタされる（単一のタスク内の）プロシジャの間に生じるタスクコンテキストスイッチングを助ける。また、周期的割込ハンドラを介してプロシジャを１つずつ調べることも可能である。
【００７８】
後処理ソフトウェアは任意のオフチップトレースキャプチャハードウェアとともに、プロファイルデータを分析するのに利用できる。このため、トレースキャッシュ２００を利用して、選択されるプロシジャにおいて費やされる実行時間に関する情報が集められる。一般的に、一度に１つのプロシジャだけのプロファイルがとられる。トレースキャッシュ２００を調べることにより、あるプロシジャにおいて費やされる最小平均および最大時間を（集められたサンプルの制限内で）判定できる。また、コード範囲プロファイリング能力を加えてテストランの間に実行されるおよび実行されない特定のアドレスを示すようにしてもよい。トレースキャッシュ２００により、ストアできる限りの数のサンプルを用いて統計的分析を行なうことが可能となる。
【００７９】
図７Ａには、条件分岐イベントを報告するための例示的なフォーマットが示される。最大１５の分岐イベントの結果を１つのトレースエントリとしてまとめることができる。１６ビットのＴＤＡＴＡフィールド（または「ＢＦＩＥＬＤ」）は１ビットの分岐結果トレースエントリを含み、ＴＣＯＤＥ＝０００１エントリと記される。ＴＤＡＴＡフィールドは、１に設定される最も左のビットを除いて初めにクリアされる。新しい条件分岐に出会うたびに、新しい１ビットエントリが左に加えられ、それ以外のエントリは１ビットずつ右へシフトされる。
【００８０】
１２８エントリのトレースキャッシュ２００を用いることで、３２０バイトの情報をストアできる。６つの命令につき１つの分岐という分岐頻度を仮定すると、開示されるトレースキャッシュ２００は、１５３６個の命令の有効なトレースレコードをもたらす。この推定値はコール、ジャンプおよびリターン命令の発生を考慮していない。
【００８１】
トレース制御論理２１８はプロセッサインターフェイス論理２０２を介して命令実行をモニタする。分岐ターゲットアドレスを報告しなければならない場合、１５のエントリが蓄積されていなくても、カレント条件分岐ＴＤＡＴＡフィールド内に含まれる情報がトレース制御論理２１８によって完全なものとしてマークされる。図７Ｂに示されるように、（３２ビットアドレッシングを用いるプロセッサベースのデバイス１０２における）ターゲットアドレスはそこでトレースエントリ対に記録され、その第１のエントリ（ＴＣＯＤＥ＝００１０）はターゲットアドレスの上位１６ビットをもたらし、第２のエントリ（ＴＣＯＤＥ＝０１１１）はターゲットアドレスの下位１６ビットをもたらす。分岐ターゲットアドレスが条件ジャンプ命令のために与えられる場合、報告される分岐に対する１ビットの分岐結果トレースエントリは現われない。
【００８２】
トレースキャプチャの開始および停止
次に、図７Ｃを参照して、たとえばタスクコンテキストスイッチが生じた際など、プログラム実行のあるセクションの間にトレース収集を開始および停止することが望ましいことがある。トレースキャプチャが停止されると、トレースエントリはトレースキャッシュ２００に入れられず、トレースポート２１４のボンドアウトピンにも現われない。トレースキャプチャをイネーブルおよびディセーブルするためにさまざまな方法が考えられる。たとえば、ｘ８６コマンドを提供し、または既存のｘ８６コマンドを利用してＩ／Ｏポート位置におけるビットをトグルしてもよい。代わりに、オンチップトリガ制御レジスタ２１９をトレースキャプチャが開始／停止すべきところのアドレスを示すように構成してもよい。トレーシングがホールトされると、最後のトレースアドレスを記録しているトレースエントリ（ＴＣＯＤＥ＝１０００、ＴＣＯＤＥ＝０１１１）がトレースストリームに入れられる。トレーシングが再開されると、現在実行されている命令のアドレスを含むトレース同期エントリ（ＴＣＯＤＥ＝０１１０、ＴＣＯＤＥ＝０１１１）が生成される。
【００８３】
トレーシングが停止されている間に生じるセグメント変化を考慮することは重要であるかもしれない。この状態は、図７Ｃに示されるように、ＴＣＯＤＥ＝１０００エントリの直後にカレントセグメントベースアドレスエントリ（ＴＣＯＤＥ＝０１００、ＴＣＯＤＥ＝０１１１）を続けるオプションを選択することによって一部は解決できる。あるトレースの終りにデバッグモードに入る前にカレントセグメントベースアドレスエントリをイネーブルするための設定オプションもまた望ましい。これと比較して、割込みが生じた際など、ベースが変化していない場合にセグメントベース情報をもたらすことは望ましくないかもしれない。
【００８４】
図７Ｄを参照して、割込みまたはトラップなどの非同期または同期イベントの発生の後に、ＴＣＯＤＥ＝０１０１トレースエントリが生成され、ターゲット割込ハンドラのアドレスをもたらす。しかしながら、割込エントリの直前にトレース同期（ＴＣＯＤＥ＝０１１０）エントリを生成することによって割込まれた命令のアドレスと、前セグメントベースアドレス（ＴＣＯＤＥ＝００１１）とを記録することも望ましい。トレース同期エントリは割込ハンドラが始まる前にリタイアした最後の命令のアドレスを含む。
【００８５】
セグメントの変化
図７Ｅは、セグメントパラメータの変化を報告するのに用いられるトレースエントリを示している。トレースストリームを処理する際にトレースアドレス値をセグメントベースアドレスと組合せて命令の線形アドレスを定める。ベースアドレスおよびデフォルトデータオペランドサイズ（３２または１６ビットモード）は変更することができる。この結果、ＴＣＯＤＥ＝００１１および０１１１エントリは正確に命令フローを再構築するのに必要な情報をもたらすよう構成される。ＴＣＯＤＥ＝００１１エントリに対応するＴＤＡＴＡフィールドは前セグメントベースアドレスの上位１６ビットを含むが、関連付けられたＴＣＯＤＥ＝０１１１エントリは下位１５ビットまたは４ビットを含む（これは命令がリアルモードで実行されるかプロテクトモードで実行されるかに依存する）。また、ＴＣＯＤＥ＝０１１１エントリはカレントセグメントサイズ（３２ビットまたは１６ビット）を示すビットと、動作モード（リアルまたはプロテクト）を示すビットと、ページングが用いられているかどうかを示すビットとを含む。セグメント情報は一般的に、カレント（ターゲット）セグメントではなく前セグメントに関連している。カレントセグメント情報はプロセッサコア１０４を停止してその状態を調べることによって得られる。
【００８６】
ユーザ特定のトレースエントリ
アプリケーションプログラムまたはオペレーティングシステムが付加的な情報をトレースストリームに加えることを望む場合がある。このためには、好ましくは、所望の実行位置において１６ビットデータ値をトレースストリームに入れることを可能にするｘ８６命令が提供される。この命令はＩ／Ｏ空間への移動として実現でき、オペランドはメモリまたはレジスタにより与えられる。プロセッサコア１０４がこの命令を実行すると、ユーザ特定のトレースエントリがトレース制御論理２１８によりキャプチャされ、トレースキャッシュ２００に入れられる。図７Ｆに示されるように、この発明の開示される実施例ではＴＣＯＤＥ＝１００１エントリがこの目的に用いられる。このエントリはたとえば、マルチタスクのオペレーティングシステムにおいてタスクスイッチが生じた際に前のまたは現在のタスク識別子を提供してもよい。
【００８７】
トレースデータの同期
プロセッサベースのデバイス１０２において典型的なソフトウェアを実行する際に、アドレス値を含むトレースエントリは少ない。ほとんどのエントリはＴＣＯＤＥ＝０００１フォーマットのものであり、１つのビットが条件動作の結果を示している。しかしながら、トレースストリームを調べる場合には、データは既知のプログラムアドレスに関連してでなければ検討することができない。たとえば、トレースキャッシュ２００における最も古いエントリから始まってアドレスエントリまでのすべてのエントリは利用価値が少ない。アルゴリズム同期は典型的に、ターゲットアドレスをもたらすトレースエントリから始まる。
【００８８】
トレースキャッシュ２００が、アドレスをもたらすエントリを１つも含んでいない場合、トレース分析はできない。この状況は稀ではあるが起こり得る。このため、開示される実施例では同期レジスタＴＳＹＮＣを提供して同期化アドレス情報の注入を制御する。同期レジスタＴＳＹＮＣが０に設定されると、トレース同期エントリは生成されない。
【００８９】
【表９】
0004138021.tif 000012
【００９０】
図７Ｇでは、例示的なトレース同期エントリが示される。動作中、カウンタレジスタは、ターゲットアドレスを含むトレースエントリが生成されるたびに同期レジスタＴＳＹＮＣに含まれる値にセットされる。他のすべてのトレースエントリに対してカウンタは１だけデクリメントされる。カウンタが０に達すると、最も最近リタイアした命令（または代わりに係属中の命令）のアドレスを含むトレースエントリ（ＴＣＯＤＥ＝０１１０）が挿入される。さらに、同期化エントリがトレースキャッシュ２００に記録されると、これはトレースピン２２０にも現われ、全機能ＩＣＥ装置に対して同期化トレースデータが十分に利用可能であることを確実にする。
【００９１】
また、トレースエントリ情報を拡張して、コード範囲または実行性能に関するデータを含むようにしてもよい。この情報はたとえばコードテストおよび性能チューニングなどに有効である。こうした強化がなくても、プロセッサコア１０４がトレースキャッシュ２００にアクセスするのを可能にすることは望ましい。マイクロコントローラデバイスの場合、この特徴はトレースキャッシュ２００をＩ／Ｏまたはメモリ空間内にマッピングすることにより達成できる。より一般的なアプローチでは、トレースキャッシュ２００のデータのシステムメモリへの移動をサポートする命令を含めるようにする。
【００９２】
このように、ソフトウェア性能プロファイリング情報をもたらすための柔軟な高性能の解決策を提供するプロセッサベースのデバイスについて説明した。プロセッサベースのデバイスは、プロファイリング情報をキャプチャし、かつ提供する能力を有するトレースキャッシュを組込んでいる。プロファイリング情報を外部デバイスに通信するためにシリアルおよびパラレル通信チャネルの双方が設けられる。開示されるオンチップトレースキャッシュにより、数多くの既存の解決策において生じる帯域幅およびクロック同期のさまざまな問題が軽減され、また、さほど高価でない外部キャプチャハードウェアを用いる際にはこれを利用することが可能となる。
【００９３】
この発明の上記の開示および説明は例示的かつ説明的なものであり、この発明の精神から逸脱することなく大きさ、形状、材料、構成要素、回路素子、ワイヤ接続および接触のさまざまな変更ならびに例示される回路の詳細、構成および動作の方法におけるさまざまな変更を行なうことができる。
【図面の簡単な説明】
【００９４】
【図１】図１は、この発明によるソフトウェアプロファイリングおよびデバッグ解決策を利用するソフトウェアデバッグ環境のブロック図である。
【図２】図２は、この発明によるオンチップトレースキャッシュを組込んだ例示的な組込プロセッサ製品の詳細を示すブロック図である。
【図３】図３は、この発明による組込プロセッサ製品の例示的なトレースキャッシュと他の構成要素との関係を示す簡略化されたブロック図である。
【図４】図４は、この発明の一実施例によるソフトウェアデバッグコマンド処理過程を示すフローチャートである。
【図５】図５は、この発明の第２の実施例による強化されたコマンド処理過程を示すフローチャートである。
【図６Ａ】図６Ａは、この発明による性能プロファイルカウンタシーケンスを示す。
【図６Ｂ】図６Ｂは、この発明によるソフトウェア性能プロファイリング情報を報告するためのトレースキャッシュエントリのセットの一般的なフォーマットを示す。
【図７Ａ】図７Ａは、命令実行情報を報告するためのさまざまなオプションのトレースキャッシュエントリの一般的なフォーマットを示す。
【図７Ｂ】図７Ｂは命令実行情報を報告するためのさまざまなオプションのトレースキャッシュエントリの一般的なフォーマットを示す。
【図７Ｃ】命令実行情報を報告するためのさまざまなオプションのトレースキャッシュエントリの一般的なフォーマットを示す。
【図７Ｄ】命令実行情報を報告するためのさまざまなオプションのトレースキャッシュエントリの一般的なフォーマットを示す。
【図７Ｅ】命令実行情報を報告するためのさまざまなオプションのトレースキャッシュエントリの一般的なフォーマットを示す。
【図７Ｆ】命令実行情報を報告するためのさまざまなオプションのトレースキャッシュエントリの一般的なフォーマットを示す。
【図７Ｇ】命令実行情報を報告するためのさまざまなオプションのトレースキャッシュエントリの一般的なフォーマットを示す。
【図１】
0004138021.tif 000013
【図２】
0004138021.tif 000014
【図３】
0004138021.tif 000015
【図４】
0004138021.tif 000016
【図５】
0004138021.tif 000017
【図６Ａ】
0004138021.tif 000018
【図６Ｂ】
0004138021.tif 000019
【図７Ａ】
0004138021.tif 000020
【図７Ｂ】
0004138021.tif 000021
【図７Ｃ】
0004138021.tif 000022
【図７Ｄ】
0004138021.tif 000023
【図７Ｅ】
0004138021.tif 000024
【図７Ｆ】
0004138021.tif 000025
【図７Ｇ】
0004138021.tif 000026