本発明のエミュレーション、デバッグおよびシミュレーションツールを以下説明する。ここで説明するエミュレーションおよびデバッグの解決策は、オフチップで従来から実行されているデバッグ機能の多くが、もしこれらが開発者のデバッグ装備に留まっているならば、これらを製造デバイスに集積するという前提に基づくものである。デバッグ機能のチップ上への移行をサポートするために、本発明は、オンチップでの適用に適した強力な拡張性のあるデバッグ手段を提供する。この技術は、可視性を損なうことにより引き起こされる、可視性と制御可能性が損なわれる問題や使い易さについての問題に真正面から挑戦する能力を付加しつつ、初期のJTAG技術の全ての利点を継承するものである。
4つの重要な構造上の構成要素が、上述した可視性と制御可能性のギャップに関する課題を解決するカギとなる。
1.リアルタイム・エミュレーション(RTE)
2.リアルタイム・データ交換(RTDX)
3.トレース
4.高度解析
これらの要素は、表1に示すような、可視性と制御可能性に関する要求について対応するものである。
リアルタイム・エミュレーション(RTE)は、実時間での実行制御(実行、停止、休止等)と、レジスタ/メモリの可視性のための、予め仕込まれた能力の基本的な組を提供する。この要素によって、ユーザは、実時間での割り込みを許しながら、アプリケーションコードをデバッグすることができる。割り込み処理への影響を与えずに、レジスタとメモリへは、実時間でアクセスすることができる。ユーザは、実時間と非実時間の割り込みを区別し、実時間でのデバッグ時のメモリアクセスによって影響を受けることのないコードを記すことができる。この基本的なエミュレーション能力は、2つの単点ハードウェアブレークポイント、単一のデータ観測ポイント、イベントカウンタあるいはデータロギング機構として構成することができるハードウェアを含んでいる。EMUピン能力は、マルチプロセッサイベント処理のための取りがI/Oと、単一方向(ターゲットからホストへ向き)データロギング機構とを含んでいる。
RTDXTMは、エミュレータホストとターゲットアプリケーションとの間の実時間データ転送を提供する。この要素は、エミュレータによって実装される双方向および単一方向のDSPターゲット/ホスト間データ転送を提供する。DSP(あるいはターゲット)アプリケーションは、ホストへ転送されるターゲットデータあるいはホストからの受信データを収集し、一方、(DSPおよびエミュレータ中の)エミュレータハードウェアは、実際の転送を管理する。いくつかのRTDX転送機構がサポートされ、各々は、帯域要求に対するゲートとピンの可用性にトレードオフの関係となる、異なる帯域レベルとピン利用を提供する。
トレースは、アプリケーション動作についての可視性を提供する非侵入性の機構である。トレースは、プログラムフロー、メモリアクセスといったCPUに関する動作と、ASIC状態器械のようなシステムの動作と、データストリームおよびCPUが収集するデータとを監視するために用いられる。ヒストリカルトレース技術は、生産されるデバイスよりも多いピン数をもつ、ロジックアナライザのような収集および特別のエミュレーション(SE)デバイスを用いている。ロジックアナライザまたは同様のデバイスは、プログラミングインターフェース(フィルタ機構)のような状態器械を用いて、データの原形式を処理する。このトレースモデルは、格納、観測および解析に必要なデータを選択するための外部トリガーとともに出力される全ての活動に依存している。
しかし、既存のロジックアナライザと同種の技術は、高い集積化レベル、クロック周波数の増加およびより複雑度を増したパッケージ化によって損なわれた可視性を向上させる解決策を提供するものではない。このモデルでは、生産されるデバイスは、限られた数のピンによって可視性を向上させなければならない。出力されるデータは、必要とされる出力帯域を落とすために、符号化または圧縮される。記録機構は、出力されたデータを深いトレースメモリ中に積めこむ、純粋な記録デバイスとなる。トレースソフトウェアは、記録されたデータを、システム活動の記録に変換するために用いられる。
高速でのシリアルデータ出力をもつオンチップトレースは、高度解析と組み合わせて、SOC設計のための解決策を提供する。トレースは、プログラムフローやメモリアクセスなどのCPUに関連した動作と、ASIC状態機械などのシステム活動と、データストリームやCPU収集データを監視するために用いられる。これにより、4つの異なる種類のトレースデータが生まれる。
・DSPコアによって提供されるプログラムフローおよびタイミング(PCトレ ース)
・DSPコアまたはチップレベル周辺機器によるメモリデータの参照(データ読 み込み、書き込み)
・アプリケーション固有の信号およびデータ(ASIC活動)
・CPU収集データ
トレースデータの4つの種類のためのデータ収集機構は、モジュール化され、所望の帯域に対する要求を満たすために、機能性と、ゲートとピンの間のトレードオフとなっている。
RTDXとトレース機能は、同様の、しかし異なる形式の可視性を提供する。これらは、データがどのように収集されるかによって、また、最も効果的と思われる条件によって異なる。これを明確にするために、以下、概説する。
RTDXTM(実時間データ交換)は、CPUによってもたらされる、情報を交換するための解決策であり、交換されるデータは、プログラムフローに関連した明確な挙動を示すものとなっている。例えば、RTDXは、DSPアルゴリズムからの入力または出力バッファを記録することに用いられる。RTDXは、データを収集する際に、CPUの助けを必要とするため、これを行うために一定の、しかし小さいCPU帯域を必要とする。このように、RTDXは、低い反復オーバーヘッドコストで可視性を提供するための、アプリケーション内部の組み込み機構である。
トレースは、極めて高い帯域幅(BW)データ出力をもつ、ハードウェアによって行われる非侵入型の(バス探索のような)収集機構である。トレースは、極めて高いデータレートでデータを出力する必要がある際や、トレースするべき情報の挙動が未知であったり事実上不規則だったり、あるいはアドレスと関連づけられる場合に用いられる。プログラムフローは、事前に挙動を知ることができない場合の典型例である。この種類の情報を出力するために必要となる帯域幅は高いものである。特定のアドレスのデータトレースは、もう一つの例である。データトレースを出力するために必要な帯域幅は高いものである。
トレースデータは、ターゲットからホストのみ向かう、単一方向性をもっている。RTDXの単一方向形式(データロギング)がサポートされているにもかかわらず、RTDXは、いずれの方向にもデータを交換することができる。トレースデータ経路は、極めて高い速度の単一方向性RTDX(CPU収集トレースデータ)を提供するためにも用いられる。
トレースとRTDXの高いレベルの特徴を、表2に示す。
高度解析は、非侵入型のオンチップイベント検出とトリガー生成機構を提供する。高度解析により生成されるトリガー出力は、トレースやRTDXなど他のインフラ要素を制御する。ヒストリカルトレース技術は、ロジックアナライザ中でのトレースを制御するトリガーを生成したり、実行を中断させるためにデバイスに供給されるトリガーを生成するために、ロジックアナライザに出力されるバス挙動を用いる。これは、通常、生産するデバイス(SEまたは特別のエミュレーションデバイス)よりも多くの数のピンをもつチップを含む。今日のデバイスの集積化レベルとクロック周波数は、完全な可視性をもつバス出力を妨げるものであるため、この解析モデルは、チップ上システム(SOC)の段階では、良好に働くものではなかった。
高度解析は、歴史的にオフチップで実現されていたトリガー機能の最も重要な部分を再構成するために、実現可能なオンチップ命令とデータバスコンパレータ、シーケンサおよび状態機械、ならびにイベントカウンタを提供する。この構造上の要素は、イベントを識別し、イベントシーケンスを追跡し、これらのイベントの発生に応じて動作(実行中断、トレースの許可・禁止、カウント、RTDXの許可・禁止等)を割り当てる。この能力のためにモジュラー型の構成ブロックは、バス比較器、外部イベント生成器、状態機械あるいは状態シーケンサ、およびトリガ生成器を含んでいる。高度解析システムのモジュラー構成によって、機能性とゲート間のトレードオフとなる。
エミュレータの能力は、以下の4つのエミュレータ要素の相互作用によってもたらされる。
1.デバッガーアプリケーションプログラム
2.ホストコンピュータ
3.エミュレーションコントローラ、および
4.オンチップデバッグ機構
これらの構成要素は、図1に示すように接続されている。ホストコンピュータ10は、(ホストの外部にある)エミュレーションコントローラ12に接続され、そのエミュレーションコントローラ(以下、エミュレータあるいはコントローラと称する)はまた、ターゲットシステム16に接続されている。ユーザは、例えば、テキサスインスツルメンツ社のコード・コンポーザ・スタジオ・プログラムのような、ホストコンピュータ上で動作するデバッガーアプリケーションプログラムによってターゲットアプリケーションを制御する。
典型的なデバッグシステムを、図1に示す。このシステムは、エミュレータ12によってデバッグ機能にアクセスするホストコンピュータ10(通常、PCで構成される)を用いる。デバッガアプリケーションプログラムは、ユーザに分かりやすい形式で、ホストコンピュータを介してデバッグ機能を提供する。ユーザの負担を軽減するため、デバッグソフトウェアによって、デバッグ資源が必要に応じて割り当てられる。ソースレベルデバッグは、ユーザから資源の複雑さが見えないようにして、デバッグ資源を利用する。デバッガーは、オンチップトレースとトリガ機構とともに、注目しているチップ挙動を選択、記録し表示する手段を提供する。トレース表示は、トレースログを生成したソースコードに自動的に対応付けられる。エミュレータは、デバッグ制御とトレース記録の機能を提供する。
デバッグ機能(facilities)は、ターゲットチップのJTAGあるいは同様のシリアルデバッグインターフェースを介した標準的なエミュレータデバッグアクセスを用いてプログラムされる。ピンは非常に貴重であるため、本技術は、シリコン費用の少ない増分によって、トレース、トリガおよび他のデバッグ機能がデバッグピン群を分け合うようにする。固定されたピン形式もサポートされている。ピン選択を分け合うことが選択された際には、トレース出力の帯域幅を最大化するように、各デバッグセッションの最初に(チップがアプリケーションプログラムを実行するように命じられる前に)デバッグピンの利用が決定される。トレース帯域幅は、トレースする最大のピン数をに割り当てることにより、最大化される。
システム内でのデバッグ機能と構成ブロックは、変化する。従って、エミュレータソフトウェアは、その構成を実行時に確立する。この方法は、ハードウェアブロックに対し、構成(configuration)とレジスタ組織(organization)を扱う一群の制約を満足することを要求する。他の構成要素は、構成ブロックと他の周辺装置をシステムメモリマップに割り当てるためのハードウェア検索機能を提供する。エミュレータソフトウェアは、検索機能を使って、資源を割り当てる。モジュールが割り当てられるアドレスと種類IDは、見つかった各ブロックを一意に識別する。一旦、IDが発見されると、設計データベースを用いて、的確な構成と全てのシステム入出力が決定される。
ホストコンピュータは、通常、少なくとも64Mバイトのメモリを持ち、少なくとも、Windows(登録商標)95、サービスリリース2(SR2)、Windows(登録商標)NTあるいはWindows(登録商標)の最新バージョンを動作させることができるPCである。このPCは、エミュレータによって要求される、例えば、以下に示す通信インターフェースの一つをサポートする必要がある。
・イーサネット(登録商標)10Tおよび100T、TCP/IPプロトコル
・ユニバーサルシリアルバス(USB)、リビジョン1.x
・Firewire、IEEE1394、および、または
・パラレルポート(SPP、EPPおよびECP)
エミュレーションコントローラ12は、ホストコンピュータ10とターゲットシステム16との間のブリッジを提供し、ホストコンピュータ上で動作するデバッガアプリケーションプログラムと、DSP(あるいは他のターゲットプロセッサ)14の上で動作するターゲットアプリケーションの間を通過する全てのデバッグ情報を扱う。
一つのエミュレーター構成の例は、以下の全ての機能をサポートする。
・実時間エミュレーション
・RTDX
・トレース、および
・高度解析
更に、エミュレータ/ターゲット間インターフェースは、以下をサポートする。
・入出力トリガー
・ビットI/O、および
・特別の拡張動作モードの管理
エミュレーションコントローラ12は、3、4または5ビットのスキャンベースのインターフェイスを介して、実時間エミュレーション機能(実行制御、メモリおよびレジスタアクセス)にアクセスする。RTCX機能には、スキャンによって、または、3つの項帯域幅RTDXフォーマットを用いてアクセスされる。入出力トリガーによって、他のシステム構成要素から、チップにデバッグイベントを通知でき、その逆も可能である。
エミュレータ12は、通信部およびエミュレーション部に分割されている。通信部は、ホスト通信リンクでのホスト10との通信をサポートし、一方、エミュレーション部は、ターゲットに接続され、ターゲットデバッグ機能とデバイスデバッグポートを管理している。エミュレータ12は、例えば、前述した工業規格に基づく15の通信リンクの一つを用いて、ホスト10と通信する。ホスト/エミュレーター間の接続は、流通している汎用配線技術によって確立される。ホスト/エミュレータ間の分離は、用いられるインターフェースに適用される規格によって定められる。
エミュレーションコントローラ12は、17の一本のターゲットケーブルあるいは複数のケーブルを介して、ターゲットシステム16と通信する。デバッグ、トレースおよびRTDX機能は、ターゲットケーブルを共有し、ある場合には、同一のデバイスピンを共有する。ターゲットシステムが、一本のケーブルに収容できないトレース幅を用いる際には、一本以上のターゲットケーブルが必要となる。全てのトレース、RTDXおよびデバッグ通信は、このリンクを介して行われる。
図2は、図1のエミュレーションシステム内のトレースシステムの実施例の核心部分の概略を示すものである。図2に示すように、トレースシステムは、ターゲットチップ上に形成されたトリガーサブシステムとトレースサブシステム、エミュレータ中に設けられたトレースレコーダ、およびホストコンピュータ中に設けられた設定および後処理部からなっている。
トリガサブシステムは、例えば、なにがしかの好適な従来手法によって、ハードウェアおよびソフトウェアトリガを識別するために動作する。トレースサブシステムは、トリガサブシステムに接続され、ハードウェアおよび/またはソフトウェアトリガを受信するためのトレース収集部(あるいはトレースコレクター)21を含んでいる。また、トレースコレクターは、複数の情報源から従来のトレース入力情報(例えば、タイミング情報、プログラムフロー情報、メモリ書き込み情報およびメモリ読み出し情報)を受信し、そこからトレース情報を含むトレースパケットのストリームを生成する。トレースサブシステムは、更に、トレースパケットストリームを受信し、これを、トレース出力ポートからターゲットチップの適切な出力ピン(例えば、デバッグポートまたはシステムバスポート)に出力される伝送パケットのストリームとして、近似的に成形するトレース出力部を含む。伝送パケットのストリームは、ターゲットチップのピン境界から、エミュレータ内のトレースレコーダに配信される。トレースレコーダ(あるいは、トレースレシーバ)は、例えば、一つあるいは複数の(図2に示す付加チャネルを含む)トレースチャネルから供給されるトレースストリームを単に記録するだけの、単純な記録機構である。ホストコンピュータは、記録されたパケットを後で検索し、トレースパケットレコーダでデコードし、デコードされたパケット情報をトレースディスプレーに表示する。
トレースコレクタ21のいくつかの実施例は、トレース情報を、プログラムカウンタ(PC)情報、メモリ読み出し情報、メモリ書き込み情報およびタイミング情報として表す10ビットのエンコーディングを用いる。また、もっと広いエンコーディングも利用可能である。更に、以下で詳説するように、前述で例示した全ての種類の情報は、ターゲットチップの同一のピンを介して、エミュレータのアクセスに伝送される。上述した10ビットエンコーディングの結果は、10ビットのパケットとなり、これには、オペレーションコード(opcodes)またはデータ、あるいは、オペレーションコードおよびデータの両方が含まれている。エンコードされたパケットの各々は、送信されている情報の種類を示す1つのオペレーションコードを含んでいる。従って、2ビット長のオペレーションコードについては、エンコードされたパケットの残りの8ビットが、2ビットオペレーションコードに関連するデータを表すものとなる。一方、10ビットのオペレーションコードを含むエンコードされたパケットは、いかなるデータビットも含むことはない。
多くの場合、付加データを、与えられたオペレーションコードに関連付けることが必要である。例えば、2ビットのオペレーションコードについて、8つの付加ビットのみが現状のパケットでは利用可能である。もし、8つ以上の付加ビットが、所定の情報の通信にとって必要ならば、付加データビットは、以降のパケットに含ませることができ、以下、このパケットをデータパケットあるいは継続パケットと称する。継続パケットは、例えば、その2つの最上位ビットを10のオペレーションコードを定義するように設定することによって一意に識別される。このオペレーションコードは、以下、継続オペレーションコードと称する。継続パケットに含まれるデータビットは、10という継続オペレーションコード以外のオペレーションコードを含む、以前のパケットに関連した情報を表す。
オペレーションコード(すなわち、継続オペレーションコード以外の)パケットで始まり、オペレーションコードパケットに続く全ての必要な継続(または、データ)パケットを含むパケット列は、以下、コマンドと称する。初期の非継続オペレーションコードは、コマンドオペレーションコードと称する。コマンドは、0またはそれ以上のパラメータを持っている。各パラメータは、コマンドオペレーションコードに関連したデータの独立した要素である。予期されるパラメータの数は、コマンドオペレーションコードに依存する。コマンドの各パラメータは、一つまたは複数のパケット列としてエンコードされ、その先頭は、「パラメータの開始」オペレーションコードとして識別され、その残りは、継続パケットとなる。
コマンドの解釈は、2つの要因、すなわち、コマンドオペレーションコードとコマンドに含まれるパラメータ数に依存する。言い換えると、例えば、コマンドオペレーションコードパケットは、もし他のコマンドオペレーションパケットがその直後に続くならば一つの意味があり、もしコマンドオペレーションコードパケットの直後に継続パケットが続くならば、まったく別の意味を持つことになる。図3は、本発明によるトレースパケット形式の一例を示すものである。図3に示すように、いくつかのオペレーションコードは、10ビット長をもち、他のものは10ビット以下の長さである。10ビット長以下のオペレーションコードを含むパケットでは、残りのビット(図3では、xで示す)は、データ伝送のために用いられる。
図3に示すように、オペレーションコード11は、タイミング情報パケットを示す。タイミングパケット中の各データ(すなわち、非オペレーションコード)ビットは、ターゲットプロセッサの単一のクロックサイクルを表す。いくつかのタイミングパケットの例を、図4に示す。オペレーションコードの第一ビット(すなわち、最も左側のビット)は、タイミングパケット中に記録された最新クロックサイクルを表し、最終ビット(すなわち、最も右側のビット)は、タイミングパケット中に記録された最古のクロックサイクルを表す。更に、タイミングパケット中の、0というデータビット値は、単一の命令あるいは複数の命令がそのクロックサイクル中に実行されることを表している。タイミングパケット中の、1というデータビット値は、待ち状態が発生し、そのクロックサイクル中にプログラム実行が中断されることを表している。これにより、トレース中の各命令について、サイクルごとの正確なプロファイリングが可能となる。タイミングパケットの例を、図4に示し、その説明を加えた。
いくつかの実施例では、各命令(または、並列命令群)は、単一の0ビットによって表される。もし命令の実行中に、実行中断が発生すると、追加の中断サイクルが、1というビット値で表される。このような実施例では、実行の第一サイクルが、0というビット値で表され、全ての追加のサイクルが、1というビット値で表される。
上述した本発明によるタイミングパケットは、ピン境界から伝送パケットを出力するために用いられるトレース出力クロック(例えば、図2の発振器によるものと仮定すると)が、ターゲットプロセッサコアの内部クロック周波数よりも十分低い同一のクロック周波数(例えば、200MHz)で動作したとしても、エミュレーションシステムが、例えば、300MHzから1.2GHzというターゲットプロセッサのクロック周波数に「追従」できるようにするものである。
ここで再び図2によれば、、トレース発振器21によって生成されたパケットストリームの任意のポイントで、タイミングパケットを発生させることが可能である。例えば、あるコマンドの中心にタイミングパケットを挿入しても、エミュレータによるそのコマンドの解釈に対して、変化や影響を与えないことが可能となる。例えば、挿入されたタイミングパケットに続くコマンドのデータパケットが、あたかもタイミングパケットが存在しないかのように扱われる。パケットストリーム中の任意のポイントに、このタイミングパケットを挿入する機能は、伝送に先立って、トレース発振器21中でタイミングパケットが待行列に入ることを有利に避けることができる。
また再び図3によれば、タイミング同期ポイントパケットは、トレースストリーム中のタイミングパケットと、トレースストリーム中の他のトレース情報との関係を示すために用いられる。例えば、図5に示したタイミング同期ポイントは、タイミングパケット中のタイミング情報を、パケットストリームのパケットで伝送中でもあるPCトレース情報に対応付けるために用いられる。図5のタイミング同期ポイントは、タイミング同期ヘッダ(すなわち、オペレーションコード)と、本例では、3ビットPC同期IDとを含んでいる。タイミング同期ポイントは、タイミングパケットのストリーム中での位置を記録するために用いられる。同期ポイントは、それがマークするタイミングパケットの前にタイミングパケットストリームに挿入される。タイミングパケットのように、タイミング同期ポイントパケットは、他のコマンドの真中に挿入され、この際、これらの割り込みコマンドのパケットの解釈と干渉しないようになっている。PC同期IDは、PCトレースパケットのストリームと一体となった対応するPC同期ポイントパケットに対応づけられるために用いられる。
再び、図3によれば、PC同期ポイントは、PCトレースパケットストリームの様々な状況に応じて用いられる。いくつかの種類のプログラムイベントを表すために、様々な種類のPC同期ポイントがある。例えば、PC同期ポイントは、周期的に生成されるPCおよびタイミングパケット同期ポイントと、PCトレースセグメントの開始もしくはPCトレースセグメントの終了をマーク付けするために用いられる。このように、あらゆるPC同期ポイントは、図3に示したオペレーションコードでさえ、図6に示すような付加的な種類コード情報を含んでいる。この種類コード情報は、PC同期ポイントに対する原因を表している。図6は、例えば、PCトレースストリームの第一ポイント、PCトレースストリームの最終ポイント、周期的に生成される同期ポイントなど、いろいろな理由によって生成される様々な種類のPC同期ポイントの種類コードの例を示している。
図7は、PC同期ポイントコマンドの例を、更に詳細に示したものである。図7に示すように、PC同期ポイントコマンドは、PC同期ポイントオペレーションコードとPC同期ポイントの種類コードを含む第一パケットを含んでいる。最初のコマンドオペレーションコードパケットの後、PC同期IDを指定するために第一継続パケットが用いられる。このPC同期IDは、最終的には、PC同期ポイントを、同一のPC同期IDをもつ対応したタイミング同期ポイントと一致させるために、ホストコンピュータによって用いられる。このPC同期IDと同一のパケットは、3ビットの時間インデックスパラメータである。図2のトレース収集器によって生成されたパケットストリームでは、対応するPC同期ポイントが発生している間、タイミング同期ポイントの後の第一タイミングパケットが、タイミングビットを保持し続ける。そのタイミングパケットのビットに対する3ビット時間インデックスポイントは、PC同期ポイントで指定されたPCでの命令実行の第一サイクルを表す。例えば、もし時間インデックス値が000ならば、タイミング同期ポイントの直後にあるタイミングパケットの全てのビットは、図7のPC同期ポイントの最後の4つのパケットで指定されたPC値の間もしくは後に実行されるサイクルに対応する。
図8は、図2のトレース収集器21の実施例の主要部分の概略を示すものである。図8のトレース収集器は、タイミングパケットを生成するためのタイミングパケット発生器81とPCトレースパケットを生成するためのPCトレースパケット発生器82を含んでいる。タイミングパケット発生器81は、ターゲットプロセッサクロックを入力として受け取り、また、実行情報(すなわち、実行もしくは待ち状態)も受け取り、上述のようにタイミングパケットを生成することにより、これらの入力に対して応答する。PCトレースパケット発生器82は、PCトレースパケットストリームの中に埋め込むためのPCアドレスを受け取るPCレジスタに接続されている。また、PCトレースパケット発生器82は、PCトレース動作をいつ開始、停止するか、また、PCトレースパケットストリームの中にPC同期ポイントをいつ生成させるかを指定するトリガー情報も入力する。このトリガー情報は、あらゆる望ましい方法で生成することができるが、タイミングパケット生成器81へも提供され、PCトレースパケット発生器82がいつPC同期ポイントを生成するかをタイミングパケット発生器81が検知できるようになっていて、この検知によって、タイミングパケット発生器81が対応するタイミング同期ポイントと時間インデックスを生成し、PC同期ポイントに埋め込むために時間インデックスをPCトレースパケット発生器82に送り出すことが可能となる。
PC同期ポイントと、それに対応するタイミング同期ポイントが生成される際には、タイミングパケット発生器81とPCトレースパケット発生器82は、PC同期ID番号のテーブル83にアクセスし、各パケット発生器は、同一のID番号を取得し、タイミング同期ポイントを一意にPC同期ポイントに対応付けることができる。各々の新しいPCとタイミング同期ポイントの組み合わせによって、タイミングパケット発生器81とPCトレースパケット発生器82は、テーブル83から新しいID番号を取得する。
タイミングパケット発生器81とPCトレースパケット発生器82によって生成されたパケットストリームは、受信したパケットストリームと、他のトレース収集動作から受信した他のすべてのトレースパケットストリームとを組み合わせ、図2のトレース出力部への出力として複合パケットストリームを生成するストリーム組み合わせ器85に与えられる。上記のように、タイミングパケットとタイミング同期ポイントは、複合パケットストリームの任意のポイントに挿入することができるが、通常は、複合ストリーム中の与えられたコマンドは、他のコマンドのパケットによる割り込みを受けることはない。図3のオペレーションコード情報を用いて、図2のトレースパケットデコーダは、例えば、PCトレースコマンドを、他のコマンドとタイミングパケットから簡単に分離することができる。トレースパケットデコーダは、簡単にタイミング同期ポイントとPC同期ポイントとを検出し、これらのPC同期IDによってこれらを適切に関連付けることができ、これにより、PCトレースストリームを、タイミングストリームに同期させる(すなわち、ターゲットプロセッサのクロックに同期させる)。
図9は、本発明で用いられるパケットシーケンス(コマンド)の一例を示すものであり、メモリ読出しやメモリ書き込みといったメモリ参照について記述したものである。メモリ参照コマンドは、0011オペレーションコード(図3参照)によって示されている。図9のLD/STビットは、メモリ参照が、ロード(読み込み)命令なのかストア(書き込み)命令なのかを表す。第一パケットの“データ、アドレス、PC”部は、例えば、ロードまたはストアのデータ値がコマンドに含まれているか、全ての含まれるデータの容量、メモリ参照のアクセス容量、ロードまたはストアのメモリアドレスがコマンドに含まれているか、さらに、ロードまたはストアに関連するPCがネーティブPCとして含まれているのか最後のPC同期ポイントからのオフセットとして含まれているのかに関するエンコードされた情報を含んでいる。図9のメモリ参照コマンドの残りのパケットは、ロードもしくはストアされたデータ、ロードまたはストアに関連したデータアドレス、ならびに、ネーティブPCアドレス、もしくは最後のPC同期ポイントからのオフセットとして表されるPCアドレスを伝送する。
また、図9は、本発明のトレースパケットのフォーマットについての特徴の一例も示している。特に、図3も参照すると、(例えば)01オペレーションコードは、それが用いられる場面によって、いくつかの異なる意味を持っている。図9にあるように、このオペレーションコードは、コマンド中のパラメータの始まりを示すために用いられる。与えられたコマンドのパラメータの数は、オペレーションコード(例えば、図9のパケット91の“データ、アドレス、PC”部)によって特定され、これによりパラメータの始まりを表す01オペレーションコードの発生が、トレースデコーダで検出される。
一方、01オペレーションコードが、コマンドの外部に発見された場合には、それは分岐についての情報を伝達するものとなる(図3参照)。1つまたは複数の(オペレーションコード10)データパケットは、一つの01オペレーションコードパケットに続く時、01オペレーションコードパケットとそれに続くデータパケットは、間接的な分岐を表す。それ以外の場合には、01オペレーションコードパケットは、相対的な分岐を表す。
図10は、図9に示したようなメモリ参照を、PCトレースによって指定されたプログラムフローと同期させるのに用いられる、メモリ参照同期ポイントパケットを示す。図10のメモリ参照同期ポイントは、図8のPCトレースパケット発生器82によるPC同期ポイントの生成によって、起動される。図10のメモリ参照同期ポイントは、メモリ参照同期ポイントを起動したPC同期ポイントの後の複合パケットストリーム中に現れる。さらに、メモリ参照同期ポイントは、メモリ参照同期ポイントを起動したPC同期ポイントに関連する命令を含みこれに続く対応するすべてのメモリ参照パケットの前の複合パケットストリーム中にも現れる。図10に示すように、メモリ参照同期ポイントパケットは、メモリ参照同期ポイント(図2参照)としてそれ自身を特定するオペレーションコードを含んでおり、さらに、メモリ参照同期ポイントの生成を起こさせたPC同期ポイントのPC同期IDも含んでいる。メモリ参照同期ポイントについては、対応するメモリ参照パケットを発行する必要がなければ、これを発行する必要はなく、対応するメモリ参照パケットシーケンス(例えば、図9に示したシーケンス)の起動の後で発行する。
図11は、図8と関連して、図2のトレース収集器の更に他の実施例の主要部を示したものである。図11の実施例は、(図9に図示したような)データ/アドレストレースパケットストリームと(図10に図示したような)メモリ参照同期ポイントを生成するメモリアクセストレースパケット発生器111を含んでいる。図11のメモリアクセストレースパケット発生器111は、入力としてPCレジスタと接続し、ターゲットプロセッサコアからデータ/アドレス情報112を受け取る。メモリアクセストレースパケット発生器111は、また、例えば、メモリアクセストレース動作の開始と終了の時期を指定する、従来の方法で生成されたトリガー情報を受け取る。メモリアクセストレースパケット発生器111は、また、83のDC番号テーブルに接続され、これにより、図10のメモリ参照同期ポイントに、適切なPC同期ID番号が提供される。
トリガー情報に応答して、メモリアクセストレースパケット発生器111は、データ/アドレス情報112から、データ/アドレストレースパケットストリームを生成する。このパケットストリームは、図8のストリーム組み合わせ器85に入力され、図8の複合パケットストリーム中に埋め込まれる。
また、パケット発生器111は、115で(すなわち、図8のPCトレースパケット発生器82から)PC同期パケットの発行を示す情報を受け取る。この115からの情報に応答して、メモリアクセストレースパケット発生器111は、テーブル83から現在のPC同期ID番号を受け取り、(必要に応じ)図10に図示したようなメモリ参照同期ポイントを生成する。また、PC同期ポイントの発生は、PCレジスタが更新されるたびにロードされるクロック112をクリアする。このように、カウンタ112は、最後のPC同期ポイントの後の、新たなPCロードの数の記録を逐次更新することができる。従って、カウンタ112の計数出力は、現在のPC値が最後のPC同期ポイントからどれだけオフセットしているかを表すPCロードの数を示す。このように、PCトレースが動作可能となっている時には、(例えば、図8のPCトレースパケット発生器82からの)信号118によって示され、メモリアクセスパケット発生器111は、図9に図示したようなコマンド内部で、対応するPCを、全体のネイティブPC値ではなくそのオフセット値によって識別することができ、これにより、図9のメモリ参照コマンド内の情報量(すなわち、これに要求される帯域幅) を減少させることができる。ネイティブPC値は、もし、PCトレースが実行無効である場合には、図9のコマンドに含まれる。
図12は、例えば、図11のメモリアクセスパケット発生器111または図8のPCトレースパケット発生器82に設けられるデータ圧縮器の一実施例の主要部の概略を示したものである。図12のデータ圧縮器は、入力トレースデータを受け付けるための新データレジスタ121と、新しいトレースデータをレジスタ121の入力として受信した時に新データレジスタ121の現在の内容を受信するための旧データレジスタ122とを含んでいる。圧縮マップ発生器123は、各々、旧データレジスタ122と新データレジスタ121に接続された、2つの入力をもっている。符号拡張評価器124は、圧縮決定器125の入力に接続された一つの入力をもっており、符号拡張評価器124は、圧縮決定器125のもう一つの入力に接続された出力をもっている。圧縮決定器125は、さらに、新データレジスタ121に接続された入力をもっている。
符号拡張評価器124は、レジスタ121中の新トレースデータに応答し、新たに受信されたトレースデータに対して、符号拡張圧縮を適用できるかどうかを判定する。もし適用できるならば、符号拡張評価器124は、圧縮決定器125に対して適切に信号を送り、符号拡張圧縮が適用できる旨を通知する。圧縮マップ発生器123は、レジスタ121中の新データのある部分が、旧データレジスタ122中に格納されたトレースデータの対応する部分と同一かどうかを判定する。もし同一である場合には、圧縮マップ発生器は、新データのどの部分が旧データの対応する部分と同一であるかを示す圧縮マップを生成する。新データの同一と判定されたすべての部分については、レミュレータに出力する必要はない(図2参照)。圧縮マップは、圧縮決定器125に送られる。
圧縮決定器125は、圧縮マップ発生器123と、もし圧縮が可能なら、どのような圧縮がレジスタ121中の新データに適用できるのかを決定する符号拡張評価器124の各々の出力に応答して、動作可能となる。もし、なんらかの圧縮が可能な場合には、圧縮決定器125は、データレジスタ121中の新データに対して、この圧縮処理に適用し、圧縮されたデータを、図2のトレース収集器21のパケット編成部に出力し、そこで、パケット編成部は、圧縮されたデータを、適切なパケット、例えば、図3に図示したデータ搬送パケット内に埋め込む。一方、データレジスタ121中の新データに対して、データ圧縮が適用できない場合には、圧縮決定器125は、新データをそのままの圧縮しない形で、パケット編成部へ送る。この有利な点は、圧縮決定器125が、符号拡張圧縮のみを用いるのか、圧縮マップ情報のみを用いるのか、あるいは符号拡張圧縮と圧縮マップの両方を用いるのかを選択して制御するところにある。この選択的な制御は、例えば、適切な制御コードをエミュレータによってスキャンし、圧縮決定器125に取り込むことにより、実装することができる。
図13は、PCコマンドに適用される符号拡張圧縮の一例を図示したものである。図13の例では、バイト0がPCの最下位桁であり、バイト1がPCの次の最下位桁であり、バイト2がPCの次の最下位桁であり、さらにバイト3がPCの最上位桁である。なお本例では、オペレーションコードは、説明簡略化のため省略している。バイト0は、通常、パケット131で送られ、バイト1は、通常、パケット132で送られ、バイト2は、通常パケット133で送られ、さらにバイト4は、通常、パケット134で送られる。しかし、図13に示すように、図示したバイト1の条件が満足された場合には、バイト1だけが送られ、図示したバイト2の条件が満足された場合には、バイト2だけが送られ、さらに、図示したバイト3の条件が満足された場合には、バイト3だけが送られる。また、図13では、“!=”の表記は、“等しくない”ことを意味する。いくつかの実施例では、図12の符号拡張評価器124は、符号拡張圧縮の適用可能性の判定のため、図13にその一例を図示した判定基準に従って、新トレースデータを評価することも可能である。
図14から18は、図12のデータ圧縮によって行われる処理の一例を示したものである。図14から18の各例では、圧縮決定器は、符号拡張手法か圧縮マップ手法のどちらか一方を利用するように、あるいは、その両方を適用するようにプログラムされている。これらの例では、バイト0から3は、順次、右から左に現れ、最下位桁から最上位桁に向かって、各バイト中のビットは、右から左に進行する。図14の例では、符号拡張圧縮はバイト1から3に適用可能であるため、バイト0のみが伝送される。パケットデコーダ(図2参照)は、符号拡張圧縮が、現在のバイトに適用されていることを認識している。新データの各バイトが、旧データの対応するバイトと同一であることを示すデータ圧縮アップもまた伝送され、ホスト(図2参照)のパケットデコーダは、新データがすべて旧データと同一であることを認識している。本例では、符号拡張圧縮もしくは圧縮マップのいずれか一方が、1パケット分の情報の伝送を必要としている。ここでは、図19に一般的なものとして示しているように、圧縮マップは、与えられたコマンドに含ませ、コマンドの初期ヘッダパケットに続く継続パケットとすることが可能である。
図19では、190でのデータヘッダパケットは、上記の図9のパケット91に対応しており、従って、データ圧縮マップは継続パケット192として伝送される。従って、図19に示すように、データバイト伝送は、図9に示したものと同様に進行する。特に、図19に示したデータ圧縮マップを考慮すると、このマップは、基本的に1バイト(8ビット)のデータであり、ここでは1というビット値は、対応する新データバイトが、その対応する旧データバイトと同じであるために送信されないことを示し、さらに、0というビット値は、対応する新データバイトが、その対応する旧データバイトとは異なるために送信されることを示している。図19では、網掛けしたバイトは、データ圧縮アップでの0をあらわし、これらのバイトのみが送信される。図2中のトレースパケットデコーダは、データ圧縮マップを、簡単にデコードでき、以って、どのバイトが伝送されているのか、また、どのバイトが単に複製されるのみで、伝送されていないのかが判定できる。
図15の例では、新バイト0は、旧バイト0とは異なり、残りの新バイトは、対応する旧バイトと同一である。本例では、符号拡張圧縮が適用可能であり、新バイト0のみが伝送される。トレースデコーダでは、符号拡張圧縮は、待ち受けながらも受信されなかったバイト1から3の全てのバイトに適用するものと仮定している。
図16の例では、新バイト0のみが、旧データと異なり、新データのバイト1から3に対しては、符号拡張圧縮を適用することはできない。従って、バイト0のみが異なることを示す圧縮マップが、バイト0自身とともに伝送される。
図17の例では、新バイト0および1が、旧データのバイトと同じであるが、新バイト2および3は、旧データのものとは異なる。さらに、符号拡張圧縮は、新バイト2および3に適用する。本例では、圧縮マップのみが伝送され、新バイト2および3が、これらに対応する旧バイトとは異なることを示す。従って、ホストコンピュータのトレースパケットデコーダは、バイト0および1が旧データからは変化していないことを認識しており、デコーダは、バイト2および3が伝送されてくることを待ち受けていたものの、これらを受信していないため、符号拡張圧縮は、新バイト2および3に適用するものと仮定する。このように、図17の例では、図12の圧縮器は、圧縮マップ手法を符号拡張手法とを組み合わせたものと言える。
図18の例は、図17の例と同様である。特に、新バイト0および1は、ここでも、旧データと同一であり、新バイト2および3は旧データとは異なり、さらに、符号拡張圧縮が、新バイト2および3に適用される。従って、新バイト2および3が旧データとは異なることを示す圧縮マップは伝送されるが、バイト2および3は伝送されず、トレースデコーダは、符号拡張圧縮が新バイト2および3に適用可能であることを仮定する。
図20は、エミュレーション制御情報およびエミュレーションデータをターゲットチップからエミュレータに出力する、従来の方法を示したものである。図20の方法では、デバッグポートの9本のピンが、エミュレーション情報を搬送するために割り当てられ、その5本のピンが、制御情報のために割り当てられ、さらに、その4本のピンがデータに割り当てられている。このように、制御情報とデータとに区別してピンを固定して割り当てることにより、大量のデータ伝送に必要な帯域幅が要求される際(きわめて、普通に起こる状況)や、制御情報のために大量の伝送帯域幅が要求される際(それほど普通とはいえないが、ありえあいことではない状況)のボトルネックを解消することができる。
次に、図21と、上述した10ビットのトレースパケット形式(図3参照)に準じると、本発明は、データ中心に伝送を行うのか、あるいは、制御中心に伝送を行うのかといった状況への必要性に応じて、トレース出力帯域幅を割り当てることができるような、レースパケット形式に十分な柔軟性を備えることに利点があることがわかる。例えば、上述した継続パケットでは、制御の2ビットは、データの8ビットとともに提供される。一方、10ビットの制御情報を不空パケットは、210に示されるような必要性に応じて、提供される図22Aのパケット210は、例えば、図9に関連して上述したパケット91に対応しており、図21のパケット212は、例えば、図9のデータあるいはアドレスバイト継続パケットに対応している。このように、先に図3で図示したパケット形式は、継続パケットの利用を含むものであり、出力パケットストリーム中の制御とデータの帯域幅の柔軟な割り当てを提供できるという利点があり、これにより、従来技術で問題となっていたボトルネックの多くを解決することができる。
図22Aは、図2のトレース出力部の一実施例の主要部を図示したものである。図22Aに示すように、トレース出力部は、伝送フォーマッター220に接続されたFIFOバッファを含んでいる。FIFOバッファは、ストリーム組み合わせ器85(図8参照)によって生成された複合トレースストリームを受信する。伝送フォーマッター220は、パケットを所望の、例えば、ターゲットチップ上のデバッグポートのピンに配送するピンマネージャー224に対して、伝送パケットのストリームを出力する。上述した10ビットトレースパケットの例に準じると、ストリーム組み合わせ器85は、10ビットトレースパケットの複合ストリームを生成する。トレース出力部は、FIFOバッファと伝送フォーマッター220を含んでおり、複合パケットストリームのトレースパケットを、10ビットトレースパケットとは異なるビット幅をもつ伝送パケットのストリームに変換する。この伝送パケットストリームは、順次、ターゲットチップのピン境界から、図2のトレースレコーダへ送られる。伝送パケットは、例えば、デバッグポートまたは他のシステムバスポートを介して、トレースレコーダへ配信される。
上記のタイミングパケットを利用することにより、ピン境界からエミュレータに出力される伝送パケットに対応した伝送クロックは、完全に、ターゲットプロセッサ(あるいは、コア)のクロックと独立させることができるという利点がある。従って、例えば、ターゲットプロセッサのクロックが比較的低い場合、例えば、マイクロコンピュータチップで67MHzといった場合には、図22Aの伝送クロックは、ターゲットプロセッサのクロックよりもはるかに高速なものとすることができる。この伝送クロックは、例えば、エミュレータとターゲットチップとの間のスキャンインターフェースに用いられる従来手法によるスキャンクロックに基づいて生成することも可能であり、このように生成した伝送クロックは、実質的に、67MHzというターゲットプロセッサのクロックよりも高速とすることができる。このような状況によって、ターゲットチップの10本以下のピンを用いて、10ビットトレースパケットを出力するために必要とされる伝送帯域幅が得られる。例えば、200MHzの伝送クロックでは、67MHzのターゲットプロセッサクロックに基づくターゲットプロセッサ内部処理に速度を合わせながら、2つの10ビットトレースパケットを、5つの4ビット伝送パケットあるいは4つの5ビット伝送パケットとして出力することができる。このように、本例では、5本または6本のピンを、他に必要となる機能のために空けておくことができるという利点がある。
図23Aは、6つの10ビットトレースパケットを、10個の6ビット伝送パケットとして伝送する場合の他の例を示したものである。図22Aの伝送クロック周波数は、ターゲットプロセッサのクロック周波数を上回るため、より狭いデータ幅のパケットと、それに伴うより少数のピンを用いて、同じデータ伝送速度を得ることが可能である。例えば、66.7MHzのターゲットプロセッサのクロック周波数と、200MHzの伝送クロック周波数では、図2および22のトレース出力部は、3つの10ビットトレースパケットを、10個の3−ビット伝送パケットに変換することが可能であり、ストリーム組み合わせ器85からの10ビットのトレースパケットのフローに追従することが可能である。
図23Bおよび図23Cは、6つの10ビットトレースパケットが、5つの12ビット伝送パケットとして伝送される(図23B)動作と、8つの10ビットトレースパケットが、5つの16ビット伝送パケットとして伝送される(図23C)動作について示したものである。
図22Bは、図22Aの伝送フォーマッター220の一実施例の主要部の概略を示したものである。図22Bに示されるように、伝送フォーマッター220は、FIFOバッファからトレースパケットを受信する、現在のパケットレジスタ221を含んでいる。また、図22Bに図示した旧パケットレジスタ222は、単に、新パケットレジスタ221の内容の旧版を格納したものである。トレースパケットの幅が、伝送パケットの幅に均等に分割可能となるように、例えば、2ビットあるいは5ビットの伝送パケット幅と10ビットのパケット幅とした実施例では、新パケットレジスタ221のみが必要とされる。均等に分割する場合には、トレースパケットデータは、単純に新パケットレジスタにロードされ、狭い幅のパケット形式で送出される。
トレースパケット幅が、伝送パケット幅によっては一様に分割されない場合には、2つの連続したトレースパケットは、組み合わせて伝送パケットのいくつかを構成する必要がある。このような、不均等な分割の場合には、追加されたレジスタ、すなわち旧パケットレジスタ222を用いる。伝送パケットは、新パケットレジスタの最下位桁からはじまる、新パケットレジスタ221の内容から生成される。一つまたは複数の伝送パケットが、新パケットレジスタのビットから生成された後には、新パケットレジスタ内部には、伝送パケット幅よりも小さい幅の多くのビットが残存することになる(すなわち、トレースパケット幅を、伝送パケット幅で割った余り)。このような状況では、新しいトレースパケットが、新パケットレジスタ221にロードされる。このロードの後で、新パケットレジスタは、新しいトレースパケットを保持し、最新パケットレジスタ222は、新パケットレジスタの直前の内容を保持する。組み合わせ器223は、伝送されなかった以前のトレースパケットのビット(新パケットレジスタ222に格納されているビット)を、次の伝送パケットを完成させるために必要なだけの数の新パケットレジスタの最下位桁を組み合わせる。
図24は、10ビットトレースパケットを6ビットの伝送パケットに変換するための、図22Bの伝送フォーマッターの処理の例を示す。図24の例では、網掛けした箱は、伝送パケットで伝送されるビットを表し、各々の横線は、一つの、伝送クロックサイクルを表す。まず、最初の6ビット、すなわち、最初の10ビットトレースパケットの0から5ビットが伝送され、その後、第一トレースパケットの6から9ビットが、第二のトレースパケットの0および1ビットとともに伝送され、また、その後、第二のトレースパケットの2から7ビットが伝送され、次に、第二のトレースパケットの8から9ビットが第三のトレースパケットとともに伝送され、その後に、第三のトレースパケットの4から9ビットが伝送され、その後、最後に、第四のトレースパケットの0から5ビットが伝送される。6ビットの伝送パケットが、直ちに、図2のトレースパケットデコーダによって、10ビットトレースパケットに再フォーマットされる。
図25から27は、図24と同様に、追加のトレースパケットデータが必要であるが、FIFOからは利用可能なデータが得られない場合の、図22Aと22Bの伝送フォーマッターにより実行される処理の一例を示したものである。図25では、完全な6ビット伝送パケットを構成するために、(次のトレースパケットから得られる)十分な量の追加トレースパケットデータが(251で)利用可能となるまで、伝送フォーマッターが単純に処理停止している。
図26は、NOPトレースパケットをトレースパケットストリームに埋め込み、全ての有効なトレースパケット情報が(261で)伝送パケットの中に出力されるまで、出力パケットの伝送を継続することにより、全ての有効なパケット情報を吐き出す際の、他の方法を示すものである。もし、追加のトレースパケット情報が伝送に使える状況になると、伝送は中断する。NOPは、図26では、0によって表現されている。一旦、(全てのビットが、0からなる)完全なNOP伝送パケットが262に出力されると、新たな10ビットのトレースパケットが、263で利用可能になるまで、伝送は中断し、これにより、伝送パケットを作るために、このトレースパケットの最初の4ビット(ビット0から3)は、組み込まれたNOPパケットの最後の2ビットと組み合わされる。従って、新しいトレースパケットのビット4から9が、伝送パケットとして264に出力され、その後、次のトレースパケットのビット0から5が、伝送パケットとして265に出力される。
図27は、有効なトレーズパケットが伝送のために利用可能とならない間に、NOPが伝送される場合の、本発明による他の方法を示すものである。図27の伝送サイクルの最初の3サイクルは、図26に示した最初の3つの伝送サイクルと同一である。しかし、図27では、次の有効な伝送パケットが図27の271に到着するまで、NOP伝送パケットが、順次、出力され続けている。図27に示す、サイクル271と、それに続く複数のサイクルは、図26のサイクル263とそれに続く複数のサイクルと同一である。
以上のように、本発明の実施例を説明したが、本実施例は、本発明の範囲を限定するものではなく、様々な様態での実施が可能である。
本出願は、2000年3月2日付け仮出願60/186,326(Docket TI−30526)、および米国出願番号09/515,093として2000年3月2日付けで最初に出願され、その後2000年8月18日に許可された請願により変更され仮出願60/219,340(Docket TI−30498)のコペンディングのアメリカ特許法第119(e)(1)に基づく優先権を主張している。