(57)【特許請求の範囲】
【請求項１】
実行トレーシングプロセス中のマルチスレッドプロセッサのスレッド間のインタースレッドトレースタイミングアライメントのための方法であって、
共通所定イベントに関するタイミングデータを記録することと、前記共通所定イベントはコアプロセッサ実行トレーシング中に前記マルチスレッドプロセッサのすべての動作スレッドによって参照可能であり、
前記共通所定イベントに関連する前記スレッドに関する実行トレーシングのタイミングを維持するために、前記共通所定イベントへの実行トレーシングを前記スレッドが開始する時間を参照することと、
前記スレッドが実行トレーシングを開始した前記時間に関連づけるために、前記共通所定イベントに関する前記タイミングデータを更新することと、それによって、実行トレーシングが発生し得る前記マルチスレッドプロセッサのすべての他のスレッドに関連するタイミングデータに、前記スレッドが実行トレーシングを開始した前記時間を、アライメントすることと、を備える方法。
【請求項２】
前記共通所定イベントを、最後のスレッドが実行トレーシングをオンにした時間に関連づけることをさらに備える請求項１の方法。
【請求項３】
前記共通所定イベントを、すべてのスレッドが実行トレーシングをオフにしてからのマルチスレッドプロセッササイクルの数に関連づけることをさらに備える請求項１の方法。
【請求項４】
複数のデータパケットに前記共通所定イベントを記録することをさらに備える請求項１の方法。
【請求項５】
前記共通所定イベントに関連した複数のデータパケットを用いて、前記マルチスレッドプロセッサにおいて動作するスレッドに関する相互関係のある実行トレーシング情報を再構成することをさらに備える請求項１の方法。
【請求項６】
前記共通所定イベントに関する前記タイミングデータを同期させることをさらに備える請求項１の方法。
【請求項７】
前記共通所定イベントの発生からのサイクルのグローバルカウントを生成することをさらに備える請求項１の方法。
【請求項８】
前記共通所定イベントからのサイクルのグローバルカウントを用いて、実行トレーシングを行っているすべてのスレッド間でインタースレッドタイミングデータを再確立することをさらに備える請求項１の方法。
【請求項９】
データ損失を決定し、前記データ損失のイベントにおいて、前記データ損失に応じて前記共通所定イベントからのサイクルのグローバルカウントを用いて、実行トレーシングを行っているすべてのスレッド間でインタースレッドタイミングデータを再確立することをさらに備える請求項１の方法。
【請求項１０】
ゼロ値を介して繰り返されるグローバルカウンタのイベントにおいてすべてのスレッドに関する同期パケットを生成することをさらに備える請求項１の方法。
【請求項１１】
パーソナル電子デバイスを支援する動作に関するマルチスレッドデジタル信号プロセッサであって、実行トレーシングプロセスを行い、これに関連して前記マルチスレッドプロセッサのスレッド間でインタースレッドトレースタイミングをアライメントするためのデバッギング手段を備えている前記マルチスレッドデジタル信号プロセッサは、
共通所定イベントに関するタイミングデータを記録するための手段と、前記共通所定イベントはコアプロセッサ実行トレーシング中に前記マルチスレッドプロセッサのすべての動作スレッドによって参照可能であり、
前記共通所定イベントに関連するスレッドに関する実行トレーシングのタイミングを維持するために、前記共通所定イベントへの実行トレーシングを前記スレッドが開始する時間を参照するための手段と、
前記スレッドが実行トレーシングを開始した前記時間に関連づけるために、前記共通所定イベントに関する前記タイミングデータを更新し、それによって、実行トレーシングが発生し得る前記マルチスレッドプロセッサのすべての他のスレッドに関連するタイミングデータに、前記スレッドが実行トレーシングを開始した前記時間を、アライメントするための手段と、
を備えるデジタル信号プロセッサ。
【請求項１２】
前記共通所定イベントを、最後のスレッドが実行トレーシングをオンにした時間に関連づける手段をさらに備える請求項１１のデジタル信号プロセッサ。
【請求項１３】
前記共通所定イベントを、すべてのスレッドが実行トレーシングをオフにしてからのマルチスレッドプロセッササイクルの数に関連づける手段をさらに備える請求項１１のデジタル信号プロセッサ。
【請求項１４】
複数のデータパケットに前記共通所定イベントを記録する手段をさらに備える請求項１１のデジタル信号プロセッサ。
【請求項１５】
前記共通所定イベントに関連した複数のデータパケットを用いて、前記マルチスレッドプロセッサにおいて動作するスレッドに関する相互関係のある実行トレーシング情報を再構成する手段をさらに備える請求項１１のデジタル信号プロセッサ。
【請求項１６】
前記共通所定イベントに関する前記タイミングデータを同期させる手段をさらに備える請求項１１のデジタル信号プロセッサ。
【請求項１７】
前記共通所定イベントの発生からのサイクルのグローバルカウントを生成する手段をさらに備える請求項１１のデジタル信号プロセッサ。
【請求項１８】
前記共通所定イベントからのサイクルのグローバルカウントを用いて、実行トレーシングを行っているすべてのスレッド間でインタースレッドタイミングデータを再確立する手段をさらに備える請求項１１のデジタル信号プロセッサ。
【請求項１９】
データ損失を決定し、前記データ損失に応じて前記共通所定イベントからのサイクルのグローバルカウントを用いて、実行トレーシングを行っているすべてのスレッド間でインタースレッドタイミングデータを再確立する手段をさらに備える請求項１１のデジタル信号プロセッサ。
【請求項２０】
ゼロ値を介して繰り返されるグローバルカウンタのイベントにおいてすべてのスレッドに関する同期パケットを生成する手段をさらに備える請求項１１のデジタル信号プロセッサ。
【請求項２１】
実行トレーシングプロセスを行うことと、これに関連してマルチスレッドプロセッサのスレッド間でインタースレッドトレースタイミングをアライメントすることを含むマルチスレッドデジタル信号プロセッサをデバッギングするために具現化されたコンピュータ読取可能なプログラムコード手段を有するコンピュータ使用可能な媒体であって、
共通所定イベントに関するタイミングデータを記録するためのコンピュータ読取可能なプログラムコード手段と、前記共通所定イベントはコアプロセッサ実行トレーシング中に前記マルチスレッドプロセッサのすべての動作スレッドによって参照可能であり、
前記共通所定イベントに関連する前記スレッドに関する実行トレーシングのタイミングを維持するために、前記共通所定イベントへの実行トレーシングを前記スレッドが開始する時間を参照するコンピュータ読取可能なプログラムコード手段と、
前記スレッドが実行トレーシングを開始した前記時間に関連づけるために、前記共通所定イベントに関する前記タイミングデータを更新し、それによって、実行トレーシングが発生し得る前記マルチスレッドプロセッサのすべての他のスレッドに関連するタイミングデータに、前記スレッドが実行トレーシングを開始する前記時間をアライメントするためのコンピュータ読取可能なプログラムコード手段と、
を備えるコンピュータ使用可能な媒体。
【請求項２２】
前記共通所定イベントを、最後のスレッドが実行トレーシングをオンにした時間に関連づけるためのコンピュータ読取可能なプログラムコード手段をさらに備える請求項２１のコンピュータ使用可能な媒体。
【請求項２３】
前記共通所定イベントを、すべてのスレッドが実行トレーシングをオフにしてからのマルチスレッドプロセッササイクルの数に関連づけるためのコンピュータ読取可能なプログラムコード手段をさらに備える請求項２１のコンピュータ使用可能な媒体。
【請求項２４】
複数のデータパケットに前記共通所定イベントを記録するためのコンピュータ読取可能なプログラムコード手段をさらに備える請求項２１のコンピュータ使用可能な媒体。
【請求項２５】
前記共通所定イベントに関連した複数のデータパケットを用いて、前記マルチスレッドプロセッサにおいて動作するスレッドに関する相互関係のある実行トレーシング情報を再構成するためのコンピュータ読取可能なプログラムコード手段をさらに備える請求項２１のコンピュータ使用可能な媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
＜関連出願＞
本出願は次の同時係属の米国特許出願番号と関連する。NON-INTRUSIVE, THREAD-SELECTIVE, DEBUGGING METHOD AND SYSTEM FOR A MULTI-THREAD DIGITAL SIGNAL PROCESSORと題され、２００６年１１月１５日に出願された出願番号１１／５６０，２１７と、METHOD AND SYSTEM FOR A DIGITAL SIGNAL PROCESSOR DEBUGGING DURING POWER TRANSITIONSと題され、２００６年１１月１５日に出願された出願番号１１／５６０，３２３と、METHOD AND SYSTEM FOR TRUSTED/UNTRUSTED DIGITAL SIGNAL PROCESSOR DEBUGGING OPERATIONSと題され、２００６年１１月１５日に出願された出願番号１１／５６０，３３２と、EMBEDDED TRACE MACROCELL FOR ENHANCED DIGITAL SIGNAL PROCESSOR DEBUGGING OPERATIONSと題され、２００６年１１月１５日に出願された出願番号１１／５６０，３３９と、METHOD AND SYSTEM FOR INSTRUCTION STUFFING OPERATIONS DURING NON-INTRUSIVE DIGITAL SIGNAL PROCESSOR DEBUGGINGと題され、２００６年１１月１５日に出願された出願番号１１／５６０，３４４。
[0001]  開示された主題は、データ通信および同じようなアプリケーションでの使用を見つけ得るような、データ処理システムとプロセスに関する。より詳しくは、この開示は、マルチスレッドプロセッサのためのインタースレッドトレースアライメント方法およびシステムを提供することを含むデジタル信号処理デバッギング動作のための新しく改善された方法およびシステムに関する。
【０００２】
【背景技術】
【０００３】
[0002]  テレコミュニケーション、他のタイプの電子機器およびサポートビデオ、合成音声、テレビ会議、および他の豊富なソフトウェアアプリケーションは、ますます信号処理を含んでいる。信号処理は、複雑だが反復のアルゴリズムにおいて、高速の数学的な計算およびデータ生成を必要とする。多くのアプリケーションがリアルタイムな計算（すなわち、信号が時間の連続関数であり、それはサンプリングされ、数値処理のためのデジタル信号に変換されなければならない）を必要とする。プロセッサは、計算が達するように、サンプルについて個別の計算を行うアルゴリズムを実行しなければならない。
【０００４】
[0003]  デジタル信号プロセッサ（ＤＳＰ）のアーキテクチャは上記のアルゴリズムを処理するために最適化される。よい信号処理エンジンの特性は、高速の融通性のある演算計算ユニット、計算ユニットへのまたは計算ユニットからの制約のないデータフロー、計算ユニットでの拡張精度およびダイナミックレンジ、デュアルアドレス生成器、効率的なプログラムシーケンス、およびプログラミングの容易さを含んでいる。
【０００５】
[0004]  ＤＳＰ技術の１つの有望なアプリケーションは、テキストメッセージングおよび他のアプリケーションだけでなく、衛星または地上波のリンク上のユーザー間で、音声およびデータ通信をサポートする符号分割多元接続（ＣＤＭＡ）システムのような通信システムを含んでいる。多重アクセス通信システムにおけるＣＤＭＡ技術の使用は、“SPREAD SPECTRUM MULTIPLE ACCESS COMMUNICATION SYSTEM USING SATELLITE OR TERRESTRIAL REPEATERS”と題された米国特許４，９０１，３０７番と、“SYSTEM AND METHOD FOR GENERATING WAVEFORMS IN A CDMA CELLULAR TELEHANDSET SYSTEM”と題された米国特許５，１０３，４５９番と、に開示されていて、両方はクレームされた主題の譲受人に譲渡されている。
【０００６】
[0005]  ＣＤＭＡシステムは、１以上の標準規格に準拠するように典型的に設計されている。１つの上記の第１世代標準規格は、“TIA/EIA/IS-95 Terminal-Base Station Compatibility Standard for Dual-Mode Wideband Spread Spectrum Cellular System”であり、以下ＩＳ−９５標準規格と称する。ＩＳ−９５ＣＤＭＡシステムは音声データとパケットのデータを送信することができる。より効率的にパケットデータを送信し得るより新規の世代標準規格は、“3rd Generation Partnership Project”（３ＧＰＰ（登録商標））と名付けたコンソーシアムによって提示され、文献番号３Ｇ ＴＳ ２５．２１１、３Ｇ ＴＳ ２５．２１２、３Ｇ ＴＳ ２５．２１３、および３Ｇ ＴＳ ２５．２１４（これらは公に容易に入手可能である）を含む１セットの文献に具体化されている。３ＧＰＰ標準規格は以下ではＷ−ＣＤＭＡ（登録商標）標準規格と称す。
【０００７】
[0006]  Ｗ−ＤＣＭＡ標準規格を用いる複雑なＤＳＰオペレーショナルソフトウェアは例えば、ロバストな開発ツールを必要とする。上記の開発ツールは、コード生成、統合、試験、デバッギング、およびアプリケーションのパフォーマンス評価することに関するツールを含み得る。高度なテレコミュニケーションアプリケーションのような、開発中かつ動作するソフトまたは複雑なＤＳＰアプリケーションでは、精巧であるにもかかわらず、非侵入型の（non-intrusive）デバッギングソフトウェアの必要がある。すなわち、デバッキングソフトウェアアプリケーションは、ソフトウェアの欠陥および運用上の問題の修正を監視し、試験し、かつサポートするために十分にロバストであるだけであってはならない。同時に、デバッキングソフトウェアは、同時デバッギング動作中にコアプロセッサソフトウェア動作に干渉しないように動作する必要があり得る。そうでなければ、コア処理ソフトウェアにおける任意の問題は、ソフトウェアデバッギング動作中に検出されないか、適切に検出されない可能性がある。
【０００８】
[0007]  デバッギング動作中に、ＤＳＰの内の動作スレッドの処理の動作をトレースするための非侵入型のソフトウェアデバッギング動作トレーシング機能に関連づける必要がある。上記のシステムは、特定のイベントが発生する前および後の両方に情報をキャプチャーするためのＤＳＰの状態パラメーターについてのそのような情報を提供し得る。同時に望ましいトレーシング機能は、ＤＳＰが全力で動作している間にさえ、プロセッサの性能に重大な負担を加えることができない。非侵入型のデバッギング動作と共に、上記のトレーシングプロセスは特定のタイプの情報をキャプチャーし得る。従ってトレーシング機能は、マルチスレッドプロセッサにおいて非侵入型のデバッギング動作と共に、監視し記録することを提供する。
【０００９】
[0008]  トレーシング機能が提供し得る情報の特に有用な１つのセットは、インタースレッド実行動作を含んでいる。すなわち、マルチスレッドＤＳＰの異なるスレッド間でのトレーシングデータを相互に関連付ける能力がある１セットのトレースする機能の必要がある。既知のシステムは上記の情報を提供しない。デバッギングソフトウェア動作において、ユーザーは、マルチスレッドプロセッサが特定の時点で実行し得る命令がどれかを知るために任意の時点を選ぶことを望み得る。この情報は、異なるスレッドが異なる時間で異なるスレッドごとのデバッギング動作を起動するインスタンスにおいて特に価値があり得る。
【００１０】
[0009]  インタリーブされたマルチスレッドＤＳＰにおいて、多重命令シーケンスの実行が同時に発生し得る。そのため、プロセッサはいくつかの単一スレッドで構成された独立に動作するプロセッサとして見なされ得る。一旦、上記のプロセッサは、動作スレッドの各々のランタイム実行シーケンスを記録する実行トレーシングユニットを含み得る。これらのトレースは、プログラムフローをパケットのシーケンスに分解することにより、プログラムデバッギング動作を容易にする。このようなシステムでは、スレッド数フィールドは、どのパケットがどのスレッドに属するかを識別するために、あるパケットに加えられ得る。このようなアプローチで、特定のスレッドに関するパケットシーケンスはそれぞれ、すべてのプログラムフロー変更およびすべての命令タイミングを含む全実行シーケンスを再作成し得る。
【００１１】
[0010]  どのパケットがどのスレッドに属するかを識別することが有利である一方、既知のトレーシング機能は、実行トレーシング中にインタースレッドタイミング関係を識別する能力を提供しない。例えば、トレース起動間の時間差は、あるスレッドから別のスレッドまで非常に大きいかもしれない。スレッドトレーシングが異なる時間にある異なるスレッドにおいて開始する場合、１つのスレッドのタイミングをトレースされる他のスレッドと整列させることは可能ではないかもしれない。
【００１２】
[0011]  従って、異なるＤＳＰスレッド間でタイミング関係を確立し維持する非侵入型のデバッギングプロセス内で動作することができる１セットのトレース機能が必要である。
【００１３】
[0012]  しかし、マルチスレッドプロセッサの埋め込まれたトレースマクロセルプロセスと関連した使用に関してマルチスレッドプロセッサの異なるスレッドのアライメントを可能にする方法およびシステムがさらに必要である。
【００１４】
[0013]  またさらに、コアプロセッサソフトウェア動作中に発生する非侵入型のインシリコンデバッギングプロセスの広いアレイと共同して動作することができるインタリーブされたマルチスレッドプロセッサのためのインタースレッドトレースアライメント方法およびシステムが必要である。
【発明の概要】
【００１５】
[0014]  マルチスレッドプロセッサにおいてインタースレッドトレースアライメントを提供するための技術は開示される。その技術は、インタースレッドタイミング関係を識別するために異なるスレッド間の種々のタイミング関係を確立し維持するために、埋め込まれたトレースマクロセルと協働する。ここで開示された方法およびシステムは、関連したデジタルプロセッサ速度およびサービス品質を増大させるだけでなく、パーソナルコンピュータ、携帯情報端末、無線ハンドセットおよび同じような電子機器において動作するアプリケーションを含むますます強力なソフトウェアアプリケーションのために、デジタル信号プロセッサの動作とデジタル信号プロセッサ命令の効率的な使用との両方を改善する。開示された主題の一の態様によれば、共通所定イベントに関するタイミングデータを記録することを含む、実行トレース処理でのインタースレッドトレースアライメントのための方法とシステムが、提供される。このような共通所定イベントは、最後のスレッドが実行トレーシングを開始してからのサイクル数であってもよく、または全てのスレッドが実行トレーシングを終了してからのサイクル数でもよい。スレッドが実行トレーシングを開始するサイクル数は、実行トレーシングのタイミングを維持するために共通所定イベントに参照される。その後、共通所定イベントに関するデータは、スレッドが実行トレーシングを開始した時間と関連づけるために更新される。その結果、すべてのスレッドに関連したタイミングデータを整列させることを可能にする。相互関係があるレコードは、すべての動作スレッドについてタイミングデータを同期させるだけでなく、マルチスレッドプロセッサにおいて動作するスレッドに関する相互依存の実行トレーシング情報を再構成することも可能にする。
【００１６】
[0015]  開示された主題のこれらおよび他の利点は、追加の新規な特徴だけでなく、ここで提供される詳細な説明から明白になる。この要約の意図は、クレームされた主題の包括的な詳細な説明であることではなく、むしろ主題の機能性のうちのいくらかの短い概要を提供することである。ここで提供される他のシステム、方法、特徴および利点は、以下の図および詳細な説明の試験時に、当業者に明白になるだろう。このような追加のシステム、方法、特徴および利点すべてがこの詳細な説明内に含まれ、また、添付の請求項の範囲内であることが意図される。
【図面の簡単な説明】
【００１７】
[0016]  開示された主題の特徴、性質および利点は、同じ参照文字が全体にわたって対応して識別する図面と合わせられると、以下で述べられる詳細な説明からより明白になり得る。
【図１】[0017]  図１はここで開示された種々の実施形態のうちの１つを実装し得る通信システムの単純化されたブロック図である。
【図２】[0018]  図２は本開示の教えを先へ進めるためのＤＳＰアーキテクチャを示す。
【図３】[0019]  図３は現在開示された主題の技術的な利点を組込むマルチスレッドデジタル信号プロセッサの一実施形態のアーキテクチャブロック図を提供する。
【図４】[0020]  図４は本開示のＩＳＤＢ／ＪＴＡＧインターフェースの特徴を適用するデジタル信号プロセッサコアのある態様を開示する。
【図５】[0021]  図５は本開示が関係する動作のデバッギングモードを含む、デジタル信号プロセッサの動作モードに適用可能なプロセスフロー図を提示する。
【図６】[0022]  図６は本開示の埋め込まれたトレースマクロセルの全体の機能概観を表すブロック図を提供する。
【図７】[0023]  図７は、開示された埋め込まれたトレースマクロセルプロセスおよびシステムのトリガーブロック回路を示す。
【図８】[0024]  図８は現在開示されたインタースレッドトレースアライメントプロセスの重要な概念を示す。
【図９】[0025]  図９は開示された主題において適用可能なものとしてパケット生成ユニットの機能概要を示す。
【図１０】[0026]  図１０は現在開示された主題の命令に適用可能な種々のアトムに関する定義の表を示す。
【図１１】[0027]  図１１は本開示に役立つものとして３２ビットのＴＩＤフィールドをサポートする本開示に関するｂｒａｎｃｈ−ａｄｄｒｅｓｓパケットを提供する。
【図１２】[0028]  図１２は現在開示されたプロセスでの使用のためのｉｓｙｎｃ−ｒｅｓｔａｒｔパケットの典型的な内容を提示する。
【図１３】[0029]  図１３は現在開示された主題をサポートするためのｉｓｙｎｃ−ｐｅｒｉｏｄｉｃパケットの実施形態を表す。
【図１４】[0030]  図１４はこの開示されたプロセスでの使用のためのサイクルカウントパケットを提示する。
【図１５】[0031]  図１５は本開示に適切なものとしてｐｈｅａｄｅｒフォーマット４パケットの一実施形態を示す。
【図１６】[0032]  図１６は開示された主題の実施形態による使用のためのａｓｙｎｃパケットを表す。
【図１７】図１７は、本出願に関する参考図である。
【発明を実施するための形態】
【００１８】
[0033]  マルチスレッドデジタル信号プロセッサの実行トレースプロセスに関連した使用のためのインタースレッドトレースアライメント方法およびシステムは、ここで提示される利点が有利になる可能性があるあらゆるタイプのマルチスレッド処理に関するアプリケーションを持っている。上記の１つのアプリケーションが、テレコミュニケーション、および特に１以上のデジタル信号処理回路を用いる無線ハンドセットに見られる。上記の無線ハンドセットがどのように用いられ得るかを説明するために、図１は、開示された割込み処理方法およびシステムの本実施形態を実装し得る通信システム１０の単純化されたブロック図を提供する。送信機ユニット１２では、データは、データソース１４から、１以上のアナログ信号を生成するためにデータをフォーマットし、符号化し、処理する送信（ＴＸ）データプロセッサ１６へ、典型的にはブロックで送られる。その後、アナログ信号は、変調された信号を生成するために、ベースバンド信号を変調し、フィルターし、増幅し、アップコンバートする送信機（ＴＭＴＲ）１８に提供される。その後、変調された信号は、１以上の受信機ユニットにアンテナ２０を介して送信される。
【００１９】
[0034]  受信機ユニット２２では、送信された信号は、アンテナ２４によって受信され、受信機（ＲＣＶＲ）２６に提供される。受信機２６内では、受信信号は、フェーズ（Ｉ）および（Ｑ）サンプルにおいて生成するために、増幅され、フィルターされ、ダウンコンバートされ、復調され、デジタル化される。その後サンプルは、送信データを回復するために、受信（ＲＸ）データプロセッサ２８によって復号され処理される。受信機ユニット２２で復号することおよび処理することは、送信機ユニット１２で行われる処理および符号化と相互補完的に行われる。その後、回復されたデータは、データシンク３０に提供される。
【００２０】
[0035]  以上記述された信号処理は、音声、ビデオ、パケットデータ、メッセージング、および一方向での他の通信タイプの送信をサポートする。双方向通信システムは双方向データ送信をサポートする。しかし、別の方向に関する信号処理は単純化のため図１に示されない。通信システム１０は、符号分割多元接続（ＣＤＭＡ）システム、時分割多重アクセス（ＴＤＭＡ）通信システム（例えばＧＳＭ（登録商標）システム）、周波数分割多元接続（ＦＤＭＡ）通信システム、または地上波のリンク上でのユーザー間の音声およびデータ通信をサポートする他の多重アクセス通信システムであり得る。特定の実施形態では、通信システム１０はＷ−ＣＤＭＡ標準規格に準拠するＣＤＭＡシステムである。
【００２１】
[0036]  図２は、図１の受信データプロセッサ２８および送信データプロセッサ１６として役立ち得るＤＳＰ ４０アーキテクチャを示す。我々は、ＤＳＰ ４０が、ここで提示される教えと概念を有効に使用する非常に多数の可能なデジタル信号プロセッサの実施形態のなかの単に一実施形態を表しているに過ぎないことを強調する。従ってＤＳＰ ４０では、スレッドＴ０からＴ５（参照番号４２から５２）は、異なるスレッドからの命令のセットを含んでいる。回路５４は命令アクセス機構を表し、スレッドＴ０からＴ５について命令をフェッチすることに用いられる。回路５４に関する命令は命令キュー５６の待ち行列に入れられる（queued）。命令キュー５６での命令は、プロセッサパイプライン６６（以下を参照）へ発行される準備ができている。命令キュー５６から、単一のスレッド（例えばスレッドＴ０）は問題論理回路５８によって選択され得る。選択されたスレッドのレジスタファイル６０が読取られ、読取られたデータはＳＬＯＴ０からＳＬＯＴ３について実行データパス６２に送られる。この例においてＳＬＯＴ０からＳＬＯＴ３は、本実施形態において用いられた組合せをグループ化するパケットを提供する。
【００２２】
[0037]  実行データパス６２からの出力は、ＤＳＰ ４０の動作から結果を返すために、個別のスレッドＴ０からＴ５を適応するように構成されて、レジスタファイル書込み回路６４に行く。このように、回路５４およびその前方からレジスタファイル書込み回路６４までのデータ経路は、処理パイプライン６６を形成する。本実施形態は、最大６つのスレッドＴ０からＴ５を有するシングルプロセッサを用いて、異種機種環境にある要素プロセッサ（ＨＥＰ：heterogeneous element processor）システムのハイブリッドを用い得る。プロセッサパイプライン６６は、６つの段階を持っていて、回路５４からレジスタ６０および６４までのデータ項目をフェッチするのに必要な、プロセッササイクルの最小数と一致する。ＤＳＰ ４０は、同時にプロセッサパイプライン６６内の異なるスレッドＴ０からＴ５の命令を実行する。すなわち、ＤＳＰ ４０は、６つの独立したプログラムカウンタ、プロセッサパイプライン６６内のスレッドＴ０からＴ５の命令を区別する内部タギング機構、およびスレッドスイッチをトリガーする機構を提供する。スレッドスイッチオーバーヘッドはゼロからほんの少しのサイクルまで様々である。
【００２３】
[0038]  ＤＳＰ ４０は、従って、種々様々の信号、画像およびビデオの処理アプリケーションにわたって、高性能および低電力であるように設計された汎用のデジタル信号プロセッサを提供する。図３は、開示された主題の１つの明示に関する関連した命令セットアーキテクチャのいくつかの態様を含むＤＳＰ４０アーキテクチャの概要を提供する。ＤＳＰ ４０アーキテクチャの実装はインターリーブマルチスレッド（ＩＭＴ）処理をサポートする。この実行モデルでは、ハードウェアが、パイプラインでの異なるスレッドからの命令をインタリーブすることによって、多重ハードウェアスレッドＴ０からＴ５の同時実行をサポートする。この特徴は、常に高いコアおよびメモリ使用を維持しながら、ＤＳＰ ４０がアグレッシブなクロック周波数を含むことを可能にする。ＩＭＴ処理は、正常でない実行、広範囲な転送ネットワークなどのような高価な補償機構の必要なく高スループットを提供する。さらに、ＤＳＰ ４０は、ＩＭＴ処理の変型例、例えば、Ｍ．Ａｈｍｅｄらによる「Variable Interleaved Multi-threaded Processor Method and System」、「Method and System for Variable Thread Allocation and Switching in a Multi-threaded Processor」と題された、同一出願人による米国特許出願において開示された変型例と新規のアプローチを含んでも良い。
【００２４】
[0039]  図３は、特に、開示された主題の教えを用い得る単一のスレッドに適用されるようなＤＳＰ ４０についてコアプロセシングアーキテクチャブロック図７０を提供する。ブロック図７０は、ＡＸＩバス７４からバスインタフェース（Ｉ／Ｆ）７３を介して命令を受信する、共有される命令キャッシュ７２を表す、それらの命令は混合された１６ビットおよび３２ビットの命令を含んでいる。これらの命令は、スレッドＴ０からＴ５の、スーパーバイザー制御レジスタ８０、シーケンサー７６、およびユーザー制御レジスタ７８に達する。開示された主題のコアレベルシステムアーキテクチャーはまた、インシリコンデバッギングシステム（ＩＳＤＢ）８２を含んでいる。それはＪＴＡＧインターフェース８４を通じてコアプロセッサ７０を接続する、それらの両方はより詳細に以下で説明される。
【００２５】
[0040]  シーケンサー７６は、Ｓパイプユニット８６、Ｍ−パイプユニット８８、ＬＤ［Ｌｏａｄ］−パイプ９０、およびＬＤ／ＳＴ［Ｓｔｏｒｅ］−パイプユニット９２、これらのすべては汎用レジスタ９４と通信する、に、ハイブリッドの双方向のスーパースカラー命令および４方向のＶＬＩＭ命令を提供する。ＡＸＩバス７４はまた、スレッドＴ０からＴ５へのＬＤ／ＳＴ命令を、バスＩ／Ｆ ７３を介して共用データキャッシュ９６と通信する。オプションのＬ２キャッシュ／ＴＣＭ ９８信号は、共用データＴＣＭ １００を有するＬＤ／ＳＴ命令を含んでおり、ＬＤ／ＳＴ命令はさらにスレッド汎用レジスタ９４に流れる。ＡＨＢ周辺バス１０２から、ＭＳＭ特定コントローラ１０４はＴ０からＴ５で、割込みコントローラ命令、デバッギング命令、およびタイミング命令を含む割込みを通信する。グローバル制御レジスタ１０６はスレッドＴ０からＴ５で制御レジスタ命令を通信する。
【００２６】
[0041]  ＤＳＰ ４０は従って、それぞれグローバル制御レジスタ１０６およびプライベートスーパーバイザー制御レジスタ８０を含む６つの仮想ＤＳＰコアを含んでいる。グローバル制御レジスタ１０６はすべてのスレッド間で共有される。スレッドはそれぞれ共通データキャッシュおよび共通の命令キャッシュを共有する。ロード、蓄積およびフェッチ動作は共通バスインタフェースによって提供される。高性能ＡＸＩバス７４およびより低い性能のＡＨＢバス１０２は、オフコアメモリおよび周辺装置にデータおよび命令トラフィックを接続するために用いられる。統合レベル２のメモリ（キャッシュおよび／またはＴＣＭ）入力９８はオプションである。周辺のアクセスはメモリマップされたロードおよびストアを介し得る。ＡＨＢとＡＸＩとの間の物理アドレスパーティションはＭＳＭレベルで構成され得る。
【００２７】
[0042]  明確に、ＤＳＰ ４０に関する提示されたアーキテクチャは時間とともに発展し変り得る。例えば、ＤＳＰ ４０が用い得る命令キャッシュの数は、６から１に、または他のキャッシュ数に変化する。スーパースカラーディスパッチ、ＴＣＭ ９８でのＬ１データ、および他のアーキテクチャの態様は変り得る。しかし、現在の主題は、種々様々の構成においてかつＤＳＰ ４０の変更の大きなファミリーに対して、引き続き有効であり得る。
【００２８】
[0043]  ＩＳＤＢ ８２は、ＪＴＡＧインターフェース８４を介して、ＤＳＰ ４０にハードウェアデバッガを提供する。ＩＳＤＢ ８２はシステムまたはスーパーバイザーのみのレジスタを共有することによってＪＴＡＧインターフェース８４を介してソフトウェアデバッグ特徴を提供する。これらのレジスタは、すべてのスレッド間のグローバル制御レジスタ１０６だけでなく、各スレッドベースでスーパーバイザー制御レジスタ８０に分割される。システム制御レジスタは、スレッドごとの割込み、および例外処理制御およびスレッドごとの記憶管理動作に使用される。グローバルレジスタはデバッギング動作のためにＩＳＤＢ ８２と相互作用することを可能にする。
【００２９】
[0044]  ＩＳＤＢ ８２によって、ソフトウェア開発者はＤＳＰ ４０が動作している間にソフトウェアをデバッグすることができる。ＩＳＤＢ ８２ハードウェアは、ＩＳＤＢ ８２で動作するソフトウェアデバッガプログラムと組み合わされて、システムソフトウェアを操作するＤＳＰ ４０をデバッグするために用いられ得る。ＩＳＤＢ ８２はハードウェアスレッドを個々にデバッグすることをサポートする。ユーザーは、スレッド実行を一時停止し、スレッドレジスタを調査して変更し、命令およびデータメモリを調査して変更し、複数のステップスレッドを選出し、スレッドに命令を詰め、スレッド実行を再開し得る。
【００３０】
信頼されているユーザーはＩＳＤＢ ８２特徴のすべてへのアクセス権を有するが、信頼されていないユーザーは特徴のサブセットへのアクセス権を有している。
【００３１】
[0045]  ＩＳＤＢ ８２は、ＩＳＤＢ ８２がプログラムカウンタ（ＰＣ）に存在するソフトウェアをデバッグしながら通信するために、すべてＪＴＡＧインターフェース８４を介してであるが、デバッガインターフェースカードと接続し得る。ホストデバッガソフトウェアは、ＩＳＤＢ制御レジスタを読取りおよび書込みすることにより、ＩＳＤＢ ８２と相互に作用し得る。通信は、例えば、３２ビットのデータペイロードと同様に、読取りまたは書込みが発生するＩＳＤＢレジスタを識別する４０ビットのパケットを介し得る。この動作をサポートするパケットフォーマットは、各々３２ビット幅であり得る最大６４の制御レジスタであり得る。
【００３２】
[0046]  図４は、デバッギング機構と開示された主題のコアプロセッサとの間のＩＳＤＢ／ＪＴＡＧインターフェース１１０の重要な態様を示す。ＤＳＰ ４０コアアーキテクチャ７０と共同して、ＩＳＤＢ ８２は、ＩＳＤＢ ＪＴＡＧ回路１１４から経路ＪＴＡＧインターフェース経路１１２を介してＪＴＡＧ ８４と通信する。ＩＳＤＢ ＪＴＡＧ回路１１４は、ＪＴＡＧ ８４とＩＳＤＢ ８２との間のデータの流れを処理する。ＩＳＤＢ ＪＴＡＧ回路１１４はさらにＩＳＤＢ ＪＴＡＧＳｙｎｃ回路１１６を接続する。ＩＳＤＢ ＪＴＡＧＳｙｎｃ回路１１６は、ＩＳＤＢコントローラ１１８、命令ユニット（ＩＵ）１２０および制御ユニット（ＣＵ）１２２とさらに通信する。特に、ＩＳＤＢ ＪＴＡＧＳｙｎｃ回路１１６は、ＩＵ １２０のＩＵ ＩＳＤＢ論理回路とＣＵ１２２のＣＵ ＩＳＤＢコントローラ１２６をインターフェースで接続する。ＣＵ ＩＳＤＢコントローラ１２６は、ＩＳＤＢコントローラ１１８だけでなく、ＣＵ ＩＳＤＢ論理回路１２８と通信する。ＩＳＤＢコントローラ１１８からの制御出力は、ＩＳＤＢデータ出力１３０、ＩＳＤＢリセット信号１３２およびＩＳＤＢ割込み１３４を含んでいる。さらにＩＳＤＢコントローラ１１８へのインターフェースは、ＭＣＤインターフェース１３６およびＥＴＭブレークポイントトリガー１３８を含んでいる。
【００３３】
[0047]  図５は、デバッギングプロセス中にＩＳＤＢ ８２の動作を含むＤＳＰ ４０の、種々のモード制御態様についての処理モード図１４０を示す。図５では、ＤＳＰ ４０はすべてのスレッドに対してグローバルであり、個々のスレッドに対してローカルでもある処理モードをサポートする。ＤＳＰ ４０ハードウェアスレッドはそれぞれ、すべて図５に見られるように、個々に２つの実行モード、すなわちユーザモード１４２およびスーパーバイザーモード１４４、３つの非処理モード、すなわち待機モード１４６、オフモード１４８およびデバッグモード１５０をサポートする。スレッドのモードは他のスレッドに依存せず、例えば、一方のスレッドは待機モード１４６であってもう一方がユーザモード１４２であり得る。
【００３４】
[0048]  図５のスレッドごとのモード状態図は種々の命令またはイベントによってサポートされる。これらは、「除外」、すなわち内部例外イベント、「Ｉｎｔ」、すなわち外部割込みイベント、「ＲＴＥ」、すなわち例外モードからのソフトウェアリターン命令、「ＳＳＲ」、すなわちＳＳＲレジスタ命令へのアップデート、「停止」、すなわち任意のモードから入り得るソフトウェア停止命令、同様に任意のモードから入ってもよい「開始」、すなわちソフトウェア開始命令、「ｔｒａｐ」、すなわちソフトウェアトラップ命令、「待機」、すなわちソフトウェア待機命令、「レジューム」、すなわちソフトウェアレジューム命令、「ＤＥ」、すなわちデバッグイベント、および、「ＤＲ」、すなわちデバッグ命令を含む。クレームされた主題の異なる実行における機能はここで提示されたものとわずかに異なり得、「開始」、「待機」、「レジューム」、「ＤＥ」および／または「ＤＲ」の意味は、クレームされた主題の範囲と一致するそれらの最も広い解釈を与えられ得る。
【００３５】
[0049]  レジスタは、ユーザモード１４２およびスーパーバイザーモード１４４の両方におけるＤＳＰ ４０において利用可能である。ユーザーモードレジスタは、１セットの汎用レジスタおよび１セットの制御レジスタに分割される。汎用レジスタは、アドレス生成、スカラーおよびベクトル算術を含むすべての多目的計算のために用いられる。制御レジスタは、ハードウェアループ、述語などのような専用機能性をサポートする。多目的レジスタは、３２ビット幅で、単一のレジスタ、または整列したペアの２つのレジスタとしてアクセスされ得る。汎用レジスタファイルは、ロード／蓄積のためのアドレス、数値に関する命令のためのデータオペランド、およびベクトル命令のためのベクトルオペランドを含む命令に関するオペランドをすべて提供する。
【００３６】
[0050]  デバッグモード１５０は、スレッドがＩＳＤＢ ８２からのコマンドを待機している特別な状態を提供する。ソフトウェアブレークポイント命令の実行、ＩＳＤＢ ８２からのブレークポイントコマンド、またはハードウェアブレークポイントの発生によって、ＩＳＤＢデバッグイベントが発生する場合は常に、指示されたスレッドはデバッグモード１５０に入り得る。デバッグモード１５０の間、コアはＪＴＡＧインターフェース８４からのコマンドを介してＩＳＤＢ ８２によって制御される。ＩＳＤＢ ８２がレジュームコマンドの実行によりスレッドを解放する場合、スレッドはそれらの現在モード設定に従って動作を再開し得る。スレッドがデバッグモード１５０にある場合、それはＩＳＤＢ ８２によって制御され、他のスレッドによって制御されることはできない。デバッグモード１５０にあるスレッドをターゲットとする、実行中のスレッドからの待機、再開、開始、あるいは停止命令は無視され得る。同様に、マスク不可能割り込み（ＮＭＩ：Non-Maskable Interrupt）はデバッグモード１５０にあるスレッドによって無視され得る。
【００３７】
[0051]  ＨＡＲＤＷＡＲＥ ＲＥＳＥＴモード（図５に図示せず）およびデバッグモード１５０は、すべてのスレッドに対してグローバルである。任意のスレッドの処理状態にかかわらず、ハードウェアリセットピンがアサートされる場合は常に、ＤＳＰ ４０はＨＡＲＤＷＡＲＥ ＲＥＳＥＴモードに入り得る。ＨＡＲＤＷＡＲＥ ＲＥＳＥＴモードにおいて、レジスタはすべてそれらのリセット値に設定される。ハードウェアリセットピンがデアサートされるまで、処理は発生しない。リセットピンがアサートされる場合、プロセッサはリセットモードへ移行し、レジスタはすべてそれらのＨＡＲＤＷＡＲＥ ＲＥＳＥＴ値にリセットされ得る。リセットピンがデアサートされた後、スレッドＴ０はソフトリセット割込みを与えられ得る。これはスレッドＴ０をスーパーバイザーモード１４４に入らせ、リセットベクトル位置で実行を開始させ得る。他のすべてのスレッドはオフのままであり得る。この点では、ソフトウェアは、各スレッドそれぞれに関するモード遷移を個々に自由に制御できる。
【００３８】
[0052]  図６から図１７は、ＤＳＰ ４０の埋め込まれたトレースマクロセル（ＥＴＭ）ユニットの現在開示された新規かつ有利な特徴に関し、それは、ソフトウェア実行フローに関する詳細情報をリアルタイムでキャプチャーすることによってコードのユーザーデバッギングを向上させる。ＥＴＭは、選択されたＤＳＰ ４０実行を非侵入的に監視して記録し、実行情報をパケットにフォーマット化し、パケットストリームをＥＴＢとして知られるオンチップメモリまたはオフチップへ送る。ＥＴＭはまた、関与する領域へトレース情報の生成を制限するか集中させるために多くの機構を含んでいる。パケットストリームを用いると、実行の再構成が引き起こされることができ、ユーザーにコードのランタイム動作の直接視認を与える。
【００３９】
[0053]  ＥＴＭは従って、ＤＳＰ ４０および他の同じようなデジタル信号プロセッサに関する包括的なデバッグおよびトレース機能を提供する。これらの機能は、特定のイベントの前後でプロセッサの状態についての情報がキャプチャーされることを可能にし、一方で、ＤＳＰ ４０がフルスピードで動作するときでさえも、プロセッサの性能に負担を加えない。ＥＴＭは、精選されたトレース情報だけを条件の特殊シーケンスの後にだけキャプチャーするようにソフトウェアで構成され得る。専用の設定可能なトレースポートおよびＦＩＦＯは、圧縮トレースデータが、プロセッサに割り込まず、影響を及ぼすことなく、外部のトレースポート解析器によってチップから読取られることを可能にする。
【００４０】
[0054]  トレースポートはコアクロックに対して独立したトレースクロックと共に１から３２のビットデータバスで構成されることができる。例えば、ＥＴＭからのデータレートは、コアクロックの半分であることができ、ピンの数はデータ帯域幅を維持するために増加されることができる。同様に、ピンの数は半分にすることができ、データレートは増加されることができる。ＥＴＭは、スタンドアロンおよびマルチコア環境内の両方において用いられ得る。開発者が多重かつ非同期コアからの同時かつ相関したトレースを調査することを可能にする。
【００４１】
[0055]  図６は、本開示をサポートする様々な全体のＥＴＭ機能を表すブロック図１６０を提供する。ＤＳＰコアプロセッサ７０は、ＥＴＭ１６２をインターフェース接続し、それは、トリガリングフィルタリング回路１６４および圧縮パケット化回路１６６を含んでいる。トリガリングフィルタリング回路１６４および圧縮パケット化回路１６６による処理に続いて、ＥＴＭ出力１６８は、例えば埋め込まれたトレースバッファ（ＥＴＢ）回路またはオフチップ回路であり得るトレース保存部１７０に流れる。トレース保存部１７０から、ソフトウェア実行記録はデバッグホスト１７３へ出力１７２として流れる。デバッグホスト１７３は、トレース保存部出力１７２を受信し再構成された実行フロー１７６からそこに生成するためのデコンプレッサ成分１７４を含んでいる。ＥＴＭ１６２はＪＴＡＧ ８４から、入力したＪＴＡＧ ８４がデバッグホスト１７３からのデータおよび命令に応じて生成する制御入力１７８を受信する。
【００４２】
[0056]  図６に示すように、ＥＴＭ１６２はＤＳＰ ４０パイプラインを監視する。この情報を用いて、ＥＴＭ１６２は２つの主要な機能（フィルタリング／トリガリング、および圧縮／パケット化）を行う。フィルタリングおよびトリガリング動作は、ＪＴＡＧインターフェース８４を介してユーザーによってプログラムされ、トレーシングをいつオンオフすべきかを定義するために用いられる。圧縮／パケット化ユニットはＤＳＰ ４０に実行情報を持ち込み、効率的にそれを、トレースポートを介してＥＴＭ１６２から送り出されるパケットにフォーマット化する。ＥＴＭ１６２を出るトレースストリームは、トレース保存部１７０に供給される。トレース保存部１７０は、トレース記録を記録するために大きなメモリキャパシティを提供し、オフチップまたはオンチップのいずれかであり得る。オンチップ保存部は埋め込まれたトレースバッファ（ＥＴＢ）として知られている。デコンプレッサコンポーネント１７４は、トレース保存部１７０からパケットストリームを取り、プログラムイメージに加えて、ＤＳＰ ４０の実行フローを再構成してユーザーにＤＳＰパイプライン６６への詳細な視界を与える、デバッグホスト１７３上で動作するソフトウェアコンポーネントである。
【００４３】
[0057]  ＥＴＭ１６２は、プロファイリングカウント（キャッシュミス、バンクコンフリクトおよびミクロｔｌｂのミス）を記録し送り出す能力だけでなく、６つのスレッドすべてに関するトレース命令順序付けおよびタイミングを提供する。
【００４４】
ＥＴＭ１６２は、ＬＤＳＴデータだけでなく、ＰＣとＬＤＳＴのアドレスについてもトリガーし得る。ＥＴＭ１６２はシリアルかつ外部のイベント検出をサポートする。さらにＥＴＭ１６２はまた、ＩＳＤＢブレークポイントトリガーイベント、外部トリガーイベントおよびＤＳＰ ４０割込みを生成し得る。ある実施形態では、ＥＴＭ１６２はＪＴＡＧ ８４を介してプログラム可能であり、ある実施形態では５１２ｘ３２ビットの専用のＥＴＢトレース保存部をサポートし得る。ＥＴＭ１６２は４つのトリガーブロック（各々２つのアドレスおよび１つのデータコンパレーターを有する）を含み、３つの状態のシーケンサーを含み得る。ＥＴＭ１６２トレーシングは、安全なＤＳＰ ４０の制御下でイネーブルレジスタを動作し得、ＤＳＰ ４０パワー下落中の動作のためにプログラムされ得る。
【００４５】
[0058]  ＥＴＭ１６２は、時間内に所定のウィンドウ上のスレッドに関するプログラムカウンタの十分な進行の記録として命令トレースを生成する。オプションで、プログラムカウンタ進行のタイミング（つまりストールサイクルの識別）も、命令トレースに含まれることができる。イベントリソース機構はいつこれらの命令トレースを生成するべきであるかを定義するために用いられる。トリガーとフィルタリング機能はイベントリソースのプログラミングを通じて制御される。より詳細には、イベントリソースは、フィルタリング、トリガリング、およびＩＳＤＢブレークポイント生成を制御する。フィルタリングは、いつ命令トレースを有効にし無効にするべきであるかを決定する機能を含んでいる。トリガリングはいつトリガーマーカーをパケットストリームに挿入するかを決定することを含んでいる。ＩＳＤＢブレークポイント判定は、ＩＳＤＢ ８２がデバッギング動作のためのブレークポイントを生成しブレークポイントに応答する条件を指定することを含んでいる。
【００４６】
[0059]  ＥＴＭ１６２は、ＤＳＰ ４０内の特定の条件がいつ発生するか（例えば、あるＰＣが実行されるかどうか、またはある記憶位置が読取られるかどうか）を検知するために、複数のプライマリイベントリソース（例えばアドレスおよびデータコンパレーター）を含んでいる。更に、イベントのより複雑な配置の検出を可能にする第２のイベントリソース（トリガーブロックおよびシーケンサー）がある。
【００４７】
[0060]  ＥＴＢトレース保存部１７０は、トレース情報がデバイスのピンでトレースポートを介して直ちにエキスポートされるのではなくキャプチャーの間に記憶される、オンチップメモリエリアを提供する。その後保存された情報は、一旦キャプチャーが完了したならば、ＥＴＢトレース保存部１７０から減じられたクロックレートで読取られることができる。これはＪＴＡＧインターフェース８４を介してなされる。この２ステップのプロセスは、多数の高速デバイスピンを用いる広範のトレースポートの必要性を除去する。事実上、「ゼロピン」トレースポートは、デバイスがピンに既にＪＴＡＧポートを有するところに生成される。ＥＴＢトレース保存部１７０は、トレースポート帯域幅制約を超えて、より高い周波数かつ全３２ビットのデータポートでデータを読取り、システムインテグレーターによって供給されたＲＡＭブロックで統合され得る。
【００４８】
[0061]  一実施形態において、ＥＴＢトレース保存部１７０は、５１２のエントリとして設けられる２ＫＢのサイズを有していて、それぞれ３２ビット幅である。しかし、ＥＴＢトレース保存部に関する他のサイズは、明らかに開示された主題の範囲内である。ＥＴＢトレース保存部１７０は、１セットのＪＴＡＧアクセス可能なレジスタを介してユーザーをインターフェース接続する。レジスタはそれぞれ、ＪＴＡＧインターフェース８４を介して読取られまたは書込まれることができる。これらのレジスタは、一旦トレースキャプチャーが完了すると、トレースキャプチャーセッションに関するＥＴＢトレース保存部１７０をセットアップし、かつＥＴＢトレース保存部１７０の内容を読取るために用いられる。ＥＴＢトレース保存部１７０は、ＥＴＢトレース保存部１７０のメモリアレイの中へインデックスとして読取りポインタを提供する。ＪＴＡＧインターフェース８４を介してＥＴＢトレース保存部１７０の内容を読取る場合、読取りポインタは読む位置を指示する。ＥＴＢトレース保存部１７０はまた、ＥＴＢトレース保存部１７０メモリアレイの中へインデックスとして書込みポインタを提供する。トレースデータがＥＴＢトレース保存部１７０へ書込まれる場合、それは書込みポインタによって指示されたエントリに書込まれる。書込み動作の各々は、書込みが発生する後に、次の位置への書込みポインタを自動インクリメントする。ＥＴＢトレース保存部１７０は、単にＥＴＭトレースストリームの小さなウィンドウをキャプチャーし得る。ＥＴＢは、いつデータをキャプチャーするかを決定するためにＥＴＭからトリガーパケットを捜し、およびトリガーカウンタは、ＥＴＢトレース保存部２４０によってキャプチャーされたトリガー前のデータとトリガー後のデータとの間の境界を特定するために使用される。
【００４９】
[0062]  ＥＴＭ１６２は、従って、プログラマがＤＳＰ ４０に関するコードをデバッグするのを援助する。ＥＴＭ１６２は、時間内に所定のウィンドウ上のスレッドに関する実行フローの記録である命令トレースを生成する。記録された命令トレースを用いると、プログラマは、それらのコードのランタイム動作についての詳細な表示を見ることができる。例えば、ユーザーのプログラムが原因不明の例外を生成する場合、ＥＴＭ１６２は例外に至るまでの命令のフローを決定するのを援助し、その結果ユーザーが厳密に起こったことを評価することを可能にする。ＥＴＭ１６２は、効率的にプログラムフローを表し、トレースデータの生成を最小化するためにパケットに基いた特定のプロトコルを用いる。
【００５０】
[0063]  ＥＴＭ１６２の一態様は、イベントおよびより複雑なイベント検出シナリオをつなぐためのシーケンサープロセスを含んでいる。シーケンサープロセスおよび関連するトリガーブロック回路１８０の動作を例証するために、図７はシーケンサーフロー図１９０を提示する。トリガーブロック回路入力１８２から１８８に応じて、シーケンサープロセス１８０は３つの状態（Ｓ０からＳ２）で示された例において動作する。シーケンサープロセス３１０の動作については、状態Ｓ０から、プロセスフローはＳ１またはＳ２に進み得る。Ｓ１から、順序付けは、前方へＳ２にまたは後方へＳ０に、のいずれかに進む。Ｓ２から、順序付けは、Ｓ１またはＳ０のいずれかに進む。
【００５１】
[0064]  シーケンサープロセス１８０は従って、状態間での遷移がプログラム可能でありトリガーブロック回路（１８２から１８８）からの一致に基づく、３つの状態（Ｓ０からＳ２）を含んでいる。シーケンサープロセス１８０は、状態イネーブル（state-enable）が条件として設けられることを各トリガーブロック回路（１８２から１８８）に可能にするためのトレースフィルタリングで使用する。これは、トレーシングがある状態に制限されることを可能にする。新規の状態に入る際、各トリガーブロック回路（１８２から１８８）でのカウンタは初期値にリロードされ得る。所定の状態に入る際、ＩＳＤＢブレークポイントはアサートされることができる。所定の状態に入ると、トリガーマーカーはトレースストリームに挿入されることができる。所定の状態に入ると、外部トリガー制御もアサートされ得る。外部トリガーは、シーケンサーが所定の状態であるといつでもアサートされたままであり得る。所定の状態に入ると、ＤＳＰ ４０への割込みがアサートされ得る。リセットの後、カウンタはＳ０に初期化される。多重の遷移が同時に起きる場合、シーケンサーは現在の状態のままである。
【００５２】
[0065]  一実施形態において、ＥＴＭ１６２は、ＤＳＰ ４０性能に関係する種々のイベントを記録することができる６つのカウンタを含んでいる。基本動作はプログラム可能なソースとして各カウンタを利用する。ユーザプログラム可能な領域カウンタは実行をサイクルの固定数のウィンドウに分割する。ウィンドウ中に、イベントはカウンタへ蓄積される。ウィンドウの端では、カウンタ値はパケットにフォーマット化され、トレースポートを介して送られる。その後、カウンタはリセットされ、プロセスはまた始まる。プロファイリングユニットがプログラムフロートレーシングと同時に動作される場合、これは結果として、プログラムフロートレースが性能イベントに関する詳細情報でオーバーレイされることをもたらす。更に、プロファイリングユニットは、ユニットがアクティブである時間を制限するために状態イネーブルマスクを含んでいる。
【００５３】
[0066]  領域カウンタは実行をサイクルの固定数のウィンドウに分割するために用いられる。領域のサイズはユーザプログラム可能なレジスタによって決定される。領域カウンタはユーザーに指定された値に初期化され、全てのプロファイリングイベントカウンタがリセットされる。その後、領域カウンタはカウントダウンを始める。領域カウンタがゼロに達する場合、プロファイリングイベントカウントの各々に関する値はトレースストリームにおいて放出される。その後、プロセスはまた始まる。領域カウンタは状態イネーブルが一致するときを単に数える。プロファイリングが不活発な場合、領域カウンタは、その値を維持し、イネーブル状態に再び入る場合に再び始まる。
【００５４】
[0067]  プロファイリングカウンタが情報を蓄積し得る異なるイベントは（ａ）ｄキャッシュミスと、（ｂ）ｄキャッシュストールサイクルと、（ｃ）ｉキャッシュミスと、（ｄ）ｉキャッシュストールサイクルと、（ｅ）ＩＴＬＢとＤＴＬＢのミスと、（ｆ）合計のストールサイクルと、を含む。更に、プロファイリングカウンタはそれぞれ、あるハードウェアスレッドに発生するイベントにカウンタを制限するために、６つのスレッドマスクを含んでいる。
【００５５】
[0068]  領域カウンタのように、状態イネーブルマスクが現在の状態に一致する場合、プロファイリングカウンタはアクティブであるのみである。すべての他の時間中にカウントはそれらの値を維持し、イネーブル状態が再び入れられる場合、カウントすることが再び始まる。
【００５６】
[0069]  本開示は、インタースレッドトレースアライメントをサポートするために新しいパケットプロトコル機能セットを提供する。すなわち、ＥＴＭ１６２を用いてトレースされているあらゆるスレッドについては、任意の時点では、本開示はトレースされている他のすべてのスレッドについて、その時点でのそれらのスレッドのプログラムカウンタ値および指示状態（例えば、ストール、実行済みなど）を識別することを可能にする。このように、ＥＴＭ１６２がサイクルに正確なモードで動作する場合、トレースアライメントはインタースレッドトレースアライメントをサポートするトレースポートプロトコルを利用する。従って、本開示は、インタースレッドアライメントに関する完全に正確なサイクルカウントフィールドだけでなく、ｉｓｙｎｃ−ｒｅｓｔａｒｔパケットスレッドに関するサイクルカウントフィールドをスレッド相対（thread relative）にする。この開示配置は、すべてのスレッドに関する同じスレッドサイクルでｉｓｙｎｃ−ｐｅｒｉｏｄｉｃパケットを生成する。スレッドアライメントが任意の理由で失われる場合、これはさらに再アライメントを可能にさせる。
【００５７】
[0070]  本開示に一実施形態において、同時に発生する多重の命令シーケンスの実行を提供し、その間にＤＳＰ ４０は独立して動作する、いくつかの単一スレッドで構成されたプロセッサとして見なされ得る。ＥＴＭ１６２では、プログラムフローはパケットのシーケンスに分割され、それはどのパケットがどのスレッドに属するかを識別するためにあるパケットに対してスレッド数（ｔｎｕｍ）フィールドを含んでいる。インタースレッドタイミング関係を識別するために、本開示は、異なるスレッド間のタイミング関係を確立し維持する。スレッドがそれぞれ命令トレーシングを独立して有効かつ無効にし得るので、スレッドが命令トレーシングをオンする場合、他のスレッドは暫くの間それらのトレーシングを可能にし得る。現在開示された方法およびシステムは、スレッドがトレーシングをオンする場合と、他のスレッドがオンされ、続いてトレーシングをオンする場合との間のオフセットをマーキングすることによって、スレッド実行順序の相対的なタイミングを確立する。
【００５８】
[0071]  従って本開示は、最後のスレッドがトレーシングをオンしてからのサイクル数を指示するためのスレッドサイクルオフセットフィールドを含んでいる。また、他のスレッドがアクティブでない場合、サイクルオフセットフィールドは、最近のトレースがすべてのスレッド間でオフしてからのサイクル数を含んでいる。トレースセッションの後、パケットはスレッド実行を再構成することを可能にさせる。その後、オフセットフィールドを用いて、実行順序は適切にスレッド間で整列され得る。更に、命令アライメント機構はデータ損失の場合には実行トレーシングを再確立することを可能にする。
【００５９】
[0072]  開示された主題はインタースレッドタイミング関係を再確立することを更に可能にする。同期パケットを周期的に生成することを許可するグローバルなカウンタを維持することによって、カウンタがゼロに達する場合、パケットは各スレッドに生成され得る。上記のパケットは、そのスレッドに対する現在のプログラムカウンタ値を含んでいる。ここで、すべてのスレッドに関する同時のパケット生成に関するＤＳＰ ４０と存在し得る種々の制約のために、本開示は同期パケットへのサイクルオフセットフィールドを含んでいる。（他のスレッド間の）最後のスレッドが同期パケットを生成してから、サイクルオフセットフィールドはサイクル数を指示する。サイクルオフセットフィールドは制限のあるサイズであり、かつカウントが飽和すれば（the count saturates）、同期は実現されることができず、カウンタを待ち得る。以下により完全に記述されるこれらの機構を用いて、本開示は１つのスレッドに関する任意のある点でインタースレッド実行タイミング関係を維持することを可能にする。結果は、デバッギングおよび他の重要な目的のためのすべてのスレッドの動作および状態を観測する能力である。
【００６０】
[0073]  この理解では、図８は、現在開示されたインタースレッドトレースアライメントプロセスの重要な概念を示す。図８を参照すると、タイムライン２０２が示すように、インタースレッドアライメントプロセス２００は時間ｔ＝０に基づいている。ＤＳＰ４０上で動作し得る種々のスレッド２０４、２０６、２０８、２１０および２１２については、スレッド開始が異なる時点で発生し得る。このように、時間ｔ＝ｔ０では、スレッド２０４が動作を開始し得る。その後遅い時間ｔ＝ｔ１で、スレッド２０６が動作を開始し得る。時間ｔ＝ｔ２で、スレッド２０８は始まり、ｔ＝ｔ３でスレッド２１０が動作を始め、ｔ＝ｔ４でスレッド２１２が動作を開始する。より完全に以下で説明されるように、継続期間２１４では、トレーシングがスレッド２１２に関してアクティブになるまでのサイクル数を表す。継続期間２１４は、ｉｓｙｎｃ−ｒｅｓｔａｒｔパケットからトレース開始プログラムカウンタ（ＰＣ）に関するサイクル数を表す。すべての相互関連するスレッド（２０４から２１２）については、ｉｓｙｎｃ−ｐｅｒｉｏｄｉｃパケットはすべてのスレッドについて同時に生成される。更に、継続期間２２０は、例えばスレッド２１２で、発生している長いストールの状況に対処している。
【００６１】
[0074]  より完全に本開示のインタースレッド動作を説明するために、図９は、パケット生成ユニット２３０の一実施形態の機能概要を示す。パケット生成ユニット２３０は、パケット生成制御回路２３２を含んでおり、それは、ＦＩＦＯ入力ｍｕｘ２３４へ、ｇｅｎＩｓｙｎｃＰ、ｇｅｎＡｓｙｎｃ、ｇｅｎＢｒａｎｃｈ、ｇｅｎＰｈｅａｄｅｒ、ｇｅｎＩｓｙｎｃＲ、ｇｅｎＰｒｏｆおよびｇｅｎＣＣｏｕｎｔの出力を生成するためのアトムＷ、アトムＮおよびアトムＥの入力を受信した。Ｐｈｅａｄｅｒ生成回路２３６は、アトムＥ入力、およびパケット生成制御回路２３２からｗカウント、ｅカウントおよびｎカウント入力を受信する、すべてＦＩＦＯ入力ｍｕｘ２３４へのｐｈｅａｄｅｒＰＫ出力を生成するためのものである。ＰＣ／ｔｌｄ／ａｓｉｄ／ｔｎｕｍ入力は、ｉｓｙｎｃ−ｒｅｓｔａｒｔ／ｃｙｃｌｅ−ｃｏｕｎｔ生成機能２３８、ｉｓｙｎｃ−ｐｅｒｉｏｄｉｃ生成機能２４０およびｂｒａｎｃｈ−ａｄｄｒｅｓｓ生成機能２４２に流れる。ｉｓｙｎｃ−ｒｅｓｔａｒｔ／ｃｙｃｌｅ−ｃｏｕｎｔ生成機能２３８は、ＦＩＦＯ入力ｍｕｘ２３４への、ｉｓｙｎｃＲＰＫ、ｉｓｙｎｃＲＬｅｎ、ＣＣＰＫおよびＣＣＬｅｎ出力を提供する。ｉｓｙｎｃ−ｐｅｒｉｏｄｉｃ生成機能２４０は、ＦＩＦＯ入力ｍｕｘ２３４へｉｓｙｎｃＰＰＫとｉｓｙｎｃＰＬｅｎの入力を提供する。ｂｒａｎｃｈ−ａｄｄｒｅｓｓ生成機能２４２（また、それらはｂｒａｎｃｈタイプの入力を受信する）は、ＦＩＦＯ入力ｍｕｘ２３４へｂｒａｎｃｈＰＫとｂｒａｎｃｈＬｅｎの出力を提供する。更に、プロファイル生成機能２４４は、ＦＩＦＯ入力ｍｕｘ２３４へのｐｒｏｆＰＫとｐｒｏｆＬｅｎの出力を生成するためのプロファイル識別子入力を受信する。
【００６２】
[0075]  ＦＩＦＯ入力ｍｕｘ２３４は、所与のサイクルで生成される必要のあるすべてのパケットをとり、それらを連続的なチャンクに形成する。ＦＩＦＯ入力ｍｕｘ２３４は、その連結を行うときに可変サイズであるパケットを構成しなければならない。ＦＩＦＯ入力ｍｕｘ２３４の出力はＦＩＦＯに送り出される前に記録される。
【００６３】
[0076]  本開示パケット生成およびＦＩＦＯ入力ｍｕｘ２３４に関しては、動作が３つの段階にわたって発生する。パケット生成の第１の段階では、パケット生成制御機能２３２および個別のパケット生成エンジン２３６から２４４は、アトムカウンタｗ−カウント、ｅ−カウントおよびｎ−カウントインクリメントだけでなく、作動する。ＦＩＦＯ入力ｍｕｘ２３４の動作は、この第１の段階における連続ブロックへのサイクルで生成されたパケットをすべて合併することを含んでいる。第２の段階では、ＦＩＦＯ書込みが生じ、ＦＩＦＯ書込みポインタに整列させるべきデータを循環させること、書込み可能性を計算して循環させること、および、データをＦＩＦＯｍｕｘ２３４レジスタに書込むことを含む。ＦＩＦＯ読取り段階である第３の段階では、データがＦＩＦＯレジスタから読取られ得る。この第３の段階では、トリガーパケットを挿入し、ＥＴＢにデータを送る特別なケースも発生する。
【００６４】
[0077]  図９において見られるように、個別のパケット生成ユニットの各々はそのそれぞれのデータをパケットにし、次に、連結について結果として生じるパケットおよび長さをＦＩＦＯ入力ｍｕｘ２３４へ送る。更に、パケット生成制御回路２３２はアトムカウンタを維持し、特定のサイクルでどのパケットを生成するかを決定する。パケット生成ユニット２３０は、今後のｐｈｅａｄｅｒまたはサイクルカウントパケットで送り出され得る未決のアトムの数を記録するために３つのカウンタを保持している。Ｅ−アトムに直面する場合は常に、Ｅ−アトムカウンタはインクリメントする。Ｎ−アトムに直面し、カウントが現在のアトムを含んでいる場合は常に、Ｎ−アトムカウンタはインクリメントする。すなわち、現在のアトムがＮならば、それはＮ−アトムカウントに含まれる。Ｗ−アトムに直面する場合は常に、Ｗ−アトムカウンタはインクリメントする。これらのカウンタはスレッドごとのカウンタであり、また、そういうものとして、本実施形態では各々の６つのコピーがある。カウンタがｐｈｅａｄｅｒまたはサイクルカウントパケットを介して送り出される場合は常に、カウンタはリセットされる。
【００６５】
[0078]  ｂｒａｎｃｈ−ａｄｄｒｅｓｓ生成機能２４２から、ｂｒａｎｃｈ−ａｄｄｒｅｓｓパケットが、ターゲットが先のループバックとは異なる場合、間接のブランチループバックのターゲットに対して生成され得る。全ループバックモードが設定される場合、パケットはすべてのループバックに対して送り出される。また、ｉｓｙｎｃ−ｒｅｓｔａｒｔおよびｉｓｙｎｃ−ｐｅｒｉｏｄｉｃパケットが生成された後、新規のループバックパケットは強制的に出される。その後ＰＣ相対ブランチＩＦ直接のブランチモードのターゲットはセットされる。イベント（割込み、例外、ＳＷＩ、ＴＲＡＰなど）のターゲットはＲＴＥ命令に返答する。トレースイネーブルがアサートされ、かつそれがトレーシングの第１のサイクルでない（、代わりにｉｓｙｎｃ−ｒｅｓｔａｒｔパケットが生成され得る）場合、ｂｒａｎｃｈ−ａｄｄｒｅｓｓパケットが生成され得る。パケット生成制御ユニットは、ループバックｂｒａｎｃｈ−ａｄｄｒｅｓｓパケットが必要とされるかどうかを判定するために、各々スレッドに対して前のループバックのターゲットレジスタを維持する。
【００６６】
[0079]  図１０は、現在開示された主題の命令に適用可能な種々のアトムに関する定義の表２５０を示す。パケットプロトコルの主な目的はインタースレッドトレースアライメントをサポートすることである。すなわち、トレースされているあらゆるスレッドについては、任意の時点で、ユーザーは、その時点でのこれらのスレッドのプログラムカウンタ値および命令状態（ストール、実行済み）を、トレースされている他のすべてのスレッドについて識別することができるべきである。ＥＴＭ１６２がサイクルに正確なモードで動作する場合、トレースアライメントは役に立つ。トレースポートプロトコルはインタースレッドトレースアライメントをサポートするために拡張されている。「Ｓ」タイプの命令アトムは、デュアルジャンプとして知られているブランチ機構を提供する。ここで、ＥＴＭ１６２はＳタイプを含んでおり、それはアトムを保持するためにｐｈｅａｄｅｒ−ｆｏｒｍａｔ４パケットタイプを用いて定義される。
【００６７】
[0080]  図１１は、３２ビットのＴＩＤフィールドをサポートする本開示に関するｂｒａｎｃｈ−ａｄｄｒｅｓｓパケット２８０を提供する。現在開示されたｂｒａｎｃｈ−ａｄｄｒｅｓｓパケットは３２ビットのＴＩＤフィールドをサポートする、その内容は図１１に見られる。ｂｒａｎｃｈ−ａｄｄｒｅｓｓパケットは１バイト乃至１１バイトを含む可変長である。バイト０から４のＭＳＢでの連続ビットは、パケットがその点を越えて連続するかどうかを示す。別個に、Ｔ−ビットは、タイプフィールドがパケットの終わりに付加されるかどうかを示す。バイト４のＭＳＢにおける１は、５バイトが続くということを示す（４バイトのＴＩＤおよび１バイトのＡＳＩＤ）。
【００６８】
[0081]  ｂｒａｎｃｈ−ａｄｄｒｅｓｓパケットはＰＣ、ＴＩＤ／ＡＳＩＤおよびタイプ圧縮によって異なる。ＴＩＤ／ＡＳＩＤは、どちらか一つがｔｎｕｍに関して最後のｂｒａｎｃｈ−ａｄｄｒｅｓｓパケットまたはｉｓｙｎｃ（ｒｅｓｔａｒｔ ｏｒ ｐｅｒｉｏｄｉｃ）以来変っている場合、送り出され得る。タイプは、最後のタイプが送り出されてからそれが変っている場合、送り出され得る。それはｉｓｙｎｃ−ｒｅｓｔａｒｔまたはｉｓｙｎｃ−ｐｅｒｉｏｄｉｃの後に最初のｂｒａｎｃｈ−ａｄｄｒｅｓｓパケットにおいて生成され得る。ＰＣは、ｂｒａｎｃｈ−ａｄｄｒｅｓｓ、ｉｓｙｎｃ−ｒｅｓｔａｒｔ、またはｉｓｙｎｃ−ｐｅｒｉｏｄｉｃによって送られた先のＰＣと比較して圧縮される。変化したＰＣのより低い部分が送り出され得る。各スレッドについては、先のＰＣ、先のＴＩＤ／ＡＳＩＤ、および先のタイプレジスタは適切な圧縮を決定するために用いられる。
【００６９】
[0082]  図１２は、現在開示されたプロセスで使用されるためのｉｓｙｎｃ−ｒｅｓｔａｒｔパケット２６０の典型的な内容を提示する。ｉｓｙｎｃ−ｒｅｓｔａｒｔパケットは、トレーシングが開始される（トレースイネーブルが以前低かった）場合、生成され得る。更に、オーバフロー条件を脱するときで、トレースイネーブルがまだ高い場合には、ｉｓｙｎｃ−ｒｅｓｔａｒｔパケットはオーバフローがあったことを示す理由フィールドで生成され得る。本開示は、ｉｓｙｎｃ−ｒｅｓｔａｒｔパケットを用いて、アライメントを提供する。命令アライメントは、トレースされているすべてのスレッドのすべてのサイクルに、グローバルなスレッドサイクルを割り当てることとして見なされることができる。デコンプレッサ手順は、ｉｓｙｎｃ−ｒｅｓｔａｒｔパケットがトレースストリームにおいて利用可能な場合にこれを遂行する。デコンプレッサは、最後のｉｓｙｎｃ−ｒｅｓｔａｒｔカウントのカウンタ値を維持する。
【００７０】
[0083]  ｉｓｙｎｃ−ｒｅｓｔａｒｔパケットに直面するときはいつでも、本開示はサイクルカウントフィールドおよびサイクルカウントタイプフィールドを検査し得る。タイプフィールドが「グローバル」である場合、プロセスはサイクルカウントフィールド値に最後のｉｓｙｎｃ−ｒｅｓｔａｒｔカウントを割り当てて、最後のｉｓｙｎｃ−ｒｅｓｔａｒｔカウントを有するそのパケットにアノテーションする。タイプフィールドが「オフセット」である場合、プロセスはサイクルカウントフィールドでの値によって最後のｉｓｙｎｃ−ｒｅｓｔａｒｔカウントをインクリメントし、さらに、最後のｉｓｙｎｃ−ｒｅｓｔａｒｔカウントを有するパケットにアノテーションし得る。その点で、ｉｓｙｎｃ−ｒｅｓｔａｒｔパケットはそれぞれグローバルスレッドサイクル値でアノテーションされる。
【００７１】
[0084]  次のステップはアトムにアノテーションすることである。そのプロセスは、トレースストリームを、パケットストリームにおけるｔｎｕｍ値に基いて個別のスレッドローカルのパケットストリームに分割する。各スレッドローカルのパケットストリームについては、プロセスは可変にグローバルスレッドサイクルを維持する。この値は、ｉｓｙｎｃ−ｒｅｓｔａｒｔパケットに直面するときはいつでも、グローバルスレッドサイクルはアノテーションされた値に割当てられるように維持される。命令アトムに直面する（Ｅ、Ｎ、ＳまたはＷ）ごとに、そのプロセスは、グローバルスレッドサイクルを有するそのアトムをアノテーションし、グローバルスレッドサイクルを１だけインクリメントし得る。通常のデコンプレッション手順を用いて、プロセスは、各アトムに関するプログラムカウンタ値を決定する。この手順が適用された後、トレースされているすべてのスレッドのすべてのサイクルはグローバルスレッドサイクルカウント値にアノテーションされ得る。結果として、例えば所定のスレッドサイクルに関して、６つのスレッドすべてに関する現在のプログラムカウンタ値は、それらのスレッドに関するパイプラインの状態（ストール、実行済みなど）と同様に決定され得る。
【００７２】
[0085]  サイクルに正確でないバージョンについては、ＴＩＤフィールドは３２ビットまで拡大される。サイクル正確なバージョンについては、ＴＩＤは３２ビットまで拡大され、新規のサイクルカウントフィールドはトレースアライメントをサポートするために定義される。グローバルなサイクルカウントは、最後のハードウェアリセットからスレッドサイクル数を示す。最後のｉｓｙｎｃ−ｒｅｓｔａｒｔパケットが生成されてから、オフセットサイクルカウントはサイクル数を示す。
【００７３】
[0086]  図１３は、現在開示された主題をサポートするためのｉｓｙｎｃ−ｐｅｒｉｏｄｉｃパケット２９０の実施形態を表す。ｉｓｙｎｃ−ｐｅｒｉｏｄｉｃパケットは、（すべてのスレッド間で）最後のｉｓｙｎｃ−ｐｅｒｉｏｄｉｃパケットが生成されてから、スレッドサイクル数を示す「オフセット」フィールドを含んでいる。開示されたプロセスはまたｉｓｙｎｃ−ｐｅｒｉｏｄｉｃパケットを用いて、アライメントをサポートする。場合によっては、トレースデータの制限されたウィンドウだけが利用可能である。従って、ｉｓｙｎｃ−ｒｅｓｔａｒｔパケットは利用可能ではない可能性がある。これらの場合では、ｉｓｙｎｃ−ｐｅｒｉｏｄｉｃパケットはインタースレッドアライメントを決定するために用いられ得る。パケット境界が未知の場合、プロセスはパケットアライメントを回復するためにａｓｙｎｃパケットを探索し得る。デコンプレッサはカウンタｌａｓｔ−ｉｓｙｎｃ−ｐｅｒｉｏｄｉｃ−ｃｏｕｎｔを維持し得る。マルチスレッドパケットストリームを通過すると、プロセスはオフセットフィールドがない最も古いｉｓｙｎｃ−ｐｅｒｉｏｄｉｃパケットを探索することを含み得る。その後、プロセスはｌａｓｔ−ｉｓｙｎｃ−ｐｅｒｉｏｄｉｃ−ｃｏｕｎｔを０に割り当て、その値を有するそのパケットをアノテーションする。他のｔｎｕｍｓからの次のｉｓｙｎｃ−ｐｅｒｉｏｄｉｃパケットの各々については、プロセスは、オフセットフィールド値、およびｉｓｙｎｃ−ｐｅｒｉｏｄｉｃ−ｃｏｕｎｔを有するｉｓｙｎｃ−ｐｅｒｉｏｄｉｃパケットの各々によってｉｓｙｎｃ−ｐｅｒｉｏｄｉｃ−ｃｏｕｎｔをインクリメントし得る。その後、プロセスはスレッドを個別のパケットストリームに分割し、それらを別々に解凍する。
【００７４】
[0087]  ＥＴＭｉｓｙｎｃ−ｐｅｒｉｏｄｉｃカウンタは、パケットバイトがＦＩＦＯに送られる場合は常に、ディクリメントされ得る。カウンタがスレッドに関してゼロに達する場合、ｉｓｙｎｃ−ｐｅｒｉｏｄｉｃパケットが未決としてマークされ得る。次の機会では、ｉｓｙｎｃ−ｐｅｒｉｏｄｉｃパケットが生成される。１つのｉｓｙｎｃ−ｐｅｒｉｏｄｉｃは、次のパケットのうちのどれかが生成されている場合（ｉｓｙｎｃ−ｒｅｓｔａｒｔ、トリガー、ｂｒａｎｃｈ−ａｄｄｒｅｓｓ、ａｓｙｎｃ、プロファイル）、阻止され得る。スレッドはそれぞれそれ自身のｉｓｙｎｃ−ｐｅｒｉｏｄｉｃカウンタを維持し得る。ｉｓｙｎｃカウンタは、いずれかｉｓｙｎｃ−ｒｅｓｔａｒｔパケットがそのスレッドに対して生成される場合は常に、リセットされ得る。
【００７５】
[0088]  図１４は、現在開示されたプロセスで使用される１セットのサイクルカウントパケットを提示する。サイクルカウントパケットはＷ−アトムを蓄積するために用いられ得る。また、サイクルカウントパケットは単にサイクルに正確なモードにおいて生成され得る。サイクルカウントパケットは次の場合に生成され得る。ＷからＥまたはＷからＮへ切り替え、Ｗ−アトムカウントがフォーマット３ｐｈｅａｄｅｒキャパシティに適合しない場合、未決のＷ−アトムをもつアトムブレークの場合、およびＷ−アトムが多すぎてフォーマット３ｐｈｅａｄｅｒに適合しない場合。Ｗ−アトムはサイクルカウントパケット中に位置され得、また、およびＥまたはＮアトムはフォーマット１ｐｈｅａｄｅｒで出てき得、サイクルカウントパケットはその完全に正確な最大値に達し得る。サイクルカウントパケットが、それがその最大の３２ビット値に達するまでインクリメントすることを可能にする代りに、ＥＴＭは十分な正確さと制限された正確さとの間の境界で多数のより小さなサイクルカウント値を送り出す。この場合、現在のアトムはＷ−アトムであり得る。このアトムがパケットに含まれていないので、カウントは０の代りに１にリセットされる。
【００７６】
[0089]  ｉｓｙｎｃ−ｒｅｓｔａｒｔパケットでのサイクルカウントは２つの可能なタイプとして再定義されている：最後のハードウェアリセットから参照される６４ビットの「グローバル」カウント、および（すべてのスレッド間の）最後のｉｓｙｎｃ−ｒｅｓｔａｒｔパケットからのスレッドサイクル数を示す１６ビットのオフセットカウント。
【００７７】
[0090]  ２バイト３００および３バイト３１０のサイクルカウントパケットに加えて、本開示は、１６ビットのペイロードに３２ビットの値を適合させるために３バイトパケット３２０を提供する。現在の主題では、１バイトのヘッダーおよび４バイトのペイロードを含む５バイトのパケットは、図１４に示されるように定義される。各スレッドについては、開示されたプロセスはカウントグローバルスレッドサイクルを維持する。直面する最初のｉｓｙｎｃ−ｐｅｒｉｏｄｉｃパケットについては、プロセスはグローバルスレッドサイクルをそのパケットのアノテーションされた値に設定し、その値で先のアトムにアノテーションする。その後、グローバルスレッドサイクルは１だけインクリメントされる。アトム（Ｅ、Ｎ、Ｓ、Ｗ）に直面するといつでも、プロセスはそのアトムにグローバルスレッドサイクルでアノテーションし、グローバルスレッドカウントを１だけインクリメントする。プロセスは、各アトムにプログラムカウンタ値を割当てるために通常として、ストリームを解凍し得る。この点では以前のように、トレースされているすべてのスレッドのすべてのサイクルはそれに関連したグローバルスレッドサイクルを有する。
【００７８】
[0091]  図１５は、本開示に適切なものとしてｐｈｅａｄｅｒ  ｆｏｒｍａｔ４パケット３３０の一実施形態を示す。ｐｈｅａｄｅｒパケットは異なる場合に生成され得る。例えば、パケットの中にこれ以上のアトムを保持することができない場合、およびｂｒａｎｃｈ−ａｄｄｒｅｓｓ、プロファイルまたはｉｓｙｎｃ−ｐｅｒｉｏｄｉｃパケットが生成される場合、ｐｈｅａｄｅｒはアトムストリーム内のそれぞれのパケットの位置をマークするために生成される。フォーマット１ｐｈｅａｄｅｒパケットは３つのアトムペイロードフィールドがあり得る：０から３１のＥアトム（フィールド０）、続いて０から３のＮアトム（フィールド１）、続いて０から１のＥアトム（フィールド２）。フォーマット１ｐｈｅａｄｅｒパケットを生成するための規則は、最大で、アトムＥカウントであることであり得、現在のアトムがＥである。カウントされたＥは、フィールド０に入り、現在のＥアトムはフィールド２に位置され得る。最大でアトムＮカウント（カウントは現在のＮアトムを含んでいる）。カウントされたＥは、フィールド０に位置され、Ｎアトムカウントはフィールド１に位置され得る。現在のアトムはＥであり、Ｎアトムカウントは０でない。カウントされたＥおよびＮアトムカウントは、フィールド０およびフィールド１に位置され得、現在のＥアトムはフィールド２に位置され得る。現在のアトムがＷであり、ＥまたはＮアトムが未決の場合、現在のＥおよびＮカウントはペイロードフィールド０およびフィールド１で送り出され得る。アトムブレークおよび未決のＷ−アトムがない場合、現在のＥおよびＮカウントはフィールド０およびフィールド１に位置され得、また、現在のアトムがＥである場合、それはフィールド２に位置され得る。
【００７９】
[0092]  図１６は、開示された主題の実施形態での使用のためのａｓｙｎｃパケット３４０を表す。ａｓｙｎｃパケット長はより長いサイクルカウントフィールドを調整し、例えば１０バイトを含み得る。ａｓｙｎｃ−ｐｅｒｉｏｄｉｃカウンタもａｓｙｎｃパケットがいつ生成されるかを定義するために用いられ得る。ａｓｙｎｃパケットは、ＥＴＭの周期的なカウンタが達する場合は常に、未決のものとしてマークされる。ａｓｙｎｃパケットは単独で現れなければならないし、他のパケットが生成される場合は常に未決のままである。ａｓｙｎｃカウンタはグローバルでかつ、パケットバイトがＦＩＦＯに送られる場合は常に、ディクリメントされ得る。
【００８０】
[0093]  要約すると、開示された主題は、実行トレース処理での使用についてマルチスレッドプロセッサによるインタースレッドトレースアライメントのための方法およびシステムを提供する。従って開示された主題は、共通所定イベントに関するタイミングデータを記録することを含んでいる。上記のイベントは、最後のスレッドが実行トレーシングを開始してからのサイクル数であるか、すべてのスレッドが実行トレーシングを終了してからのサイクル数であり得る。スレッドが実行トレーシングを開始するサイクル数は、実行トレーシングのタイミングを維持するために共通所定イベントに参照される。共通所定イベントに関するデータはその後、スレッドが実行トレーシングを開始した時と関連づけるために更新され得る。結果はすべてのスレッドに関連したタイミングデータを整列させることを可能にする。相互関係する記録は、すべての動作スレッドに関してタイミングデータを同期させると同様に、マルチスレッドプロセッサにおいて動作するスレッドに関する相互依存の実行トレーシング情報を再構成することを可能にする。
【００８１】
[0094]  上記でわかるように、インタリーブされたマルチスレッドプロセッサを含むマルチスレッドデジタル信号プロセッサでマルチスレッドプロセッサによるインタースレッドトレースアライメントについて本明細書で記述された処理特徴および機能は、種々の手法で実装され得る。例えば、ＤＳＰ ４０は上記動作を行うだけでなく、本実施形態は特定用途向け集積回路（ＡＳＩＣ）、マイクロコントローラ、デジタル信号プロセッサまたはここに記述された機能を行うように設計された他の電子回路において実装され得る。さらに、ここで記述されたプロセスと特徴は、上記の種々の信号および命令処理システムによる読取りおよび実行に関して、磁気記録媒体、光学の記録媒体、または他の記録媒体に記憶され得る。従って、好ましい実施形態の先の詳細な説明は、いかなる当業者にもクレームされた主題を生成するか用いることを可能にするために提供される。これらの実施形態への種々の変更は当業者に容易に明白になり、本明細書で定義された総括的な原理は、革新的な能力の使用のない他の実施形態に適用され得る。このように、クレームされた主題は、本明細書で示された実施形態に限定されることは意図されず、本明細書で開示された原理と新規な特徴に一致する最も広い範囲を与えられるべきである。
以下に本願の出願当初の特許請求の範囲に記載された発明を付記する。
［Ｃ１］
実行トレーシングプロセスの間にマルチスレッドプロセッサのスレッド間のインタースレッドトレースタイミングアライメントのための方法であって、
共通所定イベントに関するタイミングデータを記録し、前記共通所定イベントはコアプロセッサ実行トレーシング中に前記マルチスレッドプロセッサの全ての動作スレッドによって参照可能であり、
前記共通所定イベントに関連するスレッドに関する実行トレーシングのタイミングを維持するための前記共通所定イベントへの実行トレーシングを前記スレッドが開始する時間を参照し、
前記スレッドが実行トレーシングを開始した前記時間に関連づけるために、前記共通所定イベントを更新し、その結果、実行トレーシングが発生している前記マルチスレッドプロセッサの全ての他のスレッドに関連したタイミングデータに実行トレーシングを前記スレッドが開始した前記時間を整合させる方法。
［Ｃ２］
前記共通所定イベントを、最後のスレッドが実行トレーシングをオンした時間に関連づけることをさらに具備するＣ１の方法。
［Ｃ３］
前記共通所定イベントを、全てのスレッドが実行トレーシングをオフしてからのマルチスレッドプロセッササイクル数に関連づけることをさらに具備するＣ１の方法。
［Ｃ４］
複数のデータパケットに前記共通所定イベントを記録することをさらに具備するＣ１の方法。
［Ｃ５］
前記共通所定イベントに関連した複数のデータパケットを用いて、前記マルチスレッドプロセッサにおいて動作するスレッドに関して相互関係のある実行トレーシング情報を再構成することをさらに具備するＣ１の方法。
［Ｃ６］
前記共通所定イベントに関する前記タイミングデータを同期させることをさらに具備するＣ１の方法。
［Ｃ７］
前記共通所定イベントの発生からのサイクルのグローバルカウントを生成することをさらに具備するＣ１の方法。
［Ｃ８］
前記共通所定イベントからのサイクルのグローバルカウントを用いて、実行トレーシングを行うすべてのスレッド間でのインタースレッドタイミングデータを再確立することをさらに具備するＣ１の方法。
［Ｃ９］
データ損失の前記イベントにおいて、データ損失を決定し、前記データ損失に応じて前記共通所定イベントからのサイクルのグローバルカウントを用いて、実行トレーシングを行うすべてのスレッド間でインタースレッドタイミングデータを再確立することをさらに具備するＣ１の方法。
［Ｃ１０］
ゼロ値を介して繰り返されるグローバルカウンタのイベントにおいてすべてのスレッドに関する同期パケットを生成することをさらに具備するＣ１の方法。
［Ｃ１１］
デジタル信号プロセッサと関連する動作に関するデジタル信号プロセッサデバッギングシステムであって、マルチスレッドソフトウェア実行フローの間にマルチスレッドプロセッサのスレッドに関して相互に関係するタイミングデータへの能力を含むシステムであって、
共通所定イベントに関するタイミングデータを記録するための複数のオフセットフィールドと、
前記共通所定イベントはコアプロセッサ実行トレーシング中に前記マルチスレッドプロセッサの全ての動作スレッドによって参照可能であり、
前記共通所定イベントに関連するスレッドに関する実行トレーシングのタイミングを維持するための前記共通所定イベントへの実行トレーシングを前記スレッドが開始する時間を参照するための複数の時間参照命令パケットと、
前記スレッドが実行トレーシングを開始した前記時間に関連づけるために、前記共通所定イベントを更新し、その結果、実行トレーシングが発生している前記マルチスレッドプロセッサの全ての他のスレッドに関連したタイミングデータに実行トレーシングを前記スレッドが開始した前記時間を整合させるための複数の時間参照更新パケットと、を具備するデジタル信号プロセッサデバッギングシステム。
［Ｃ１２］
前記共通所定イベントを、最後のスレッドが実行トレーシングをオンした時間に関連づけるための複数の命令および回路網をさらに具備するＣ１１のデジタル信号プロセッサデバッギングシステム。
［Ｃ１３］
前記共通所定イベントを、全てのスレッドが実行トレーシングをオフしてからのマルチスレッドプロセッササイクル数に関連づけるための複数の命令および回路網をさらに具備するＣ１１のデジタル信号プロセッサデバッギングシステム。
［Ｃ１４］
複数のデータパケットに前記共通所定イベントを記録するための複数の命令および回路網をさらに具備するＣ１１のデジタル信号プロセッサデバッギングシステム。
［Ｃ１５］
前記共通所定イベントに関連した複数のデータパケットを用いて、前記マルチスレッドプロセッサにおいて動作するスレッドに関して相互関係のある実行トレーシング情報を再構成するための複数の命令および回路網をさらに具備するＣ１１のデジタル信号プロセ
ッサデバッギングシステム。
［Ｃ１６］
前記共通所定イベントに関する前記タイミングデータを同期させるための複数の命令および回路網をさらに具備するＣ１１のデジタル信号プロセッサデバッギングシステム。
［Ｃ１７］
前記共通所定イベントの発生からのサイクルのグローバルカウントを生成するための複数の命令および回路網をさらに具備するＣ１１のデジタル信号プロセッサデバッギング
システム。
［Ｃ１８］
前記共通所定イベントからのサイクルのグローバルカウントを用いて、実行トレーシングを行うすべてのスレッド間でのインタースレッドタイミングデータを再確立するための複数の命令および回路網をさらに具備するＣ１１のデジタル信号プロセッサデバッギン
グシステム。
［Ｃ１９］
データ損失を決定し、前記データ損失に応じて前記共通所定イベントからのサイクルのグローバルカウントを用いて、実行トレーシングを行うすべてのスレッド間でインタースレッドタイミングデータを再確立するための実行トレーシング命令をさらに具備するＣ１１のデジタル信号プロセッサデバッギングシステム。
［Ｃ２０］
ゼロ値を介して繰り返されるグローバルカウンタのイベントにおいてすべてのスレッドに関する同期パケットを生成するための複数の同期命令をさらに具備するＣ１１のデジ
タル信号プロセッサデバッギングシステム。
［Ｃ２１］
パーソナル電子デバイスを支援する動作に関するマルチスレッドデジタル信号プロセッサであって、実行トレーシングプロセスを行い、これに関連して前記マルチスレッドプロセッサのスレッド中でインタースレッドトレースタイミングを整合させるデバッギング手段を具備しているプロセッサにおいて、
共通所定イベントに関するタイミングデータを記録する手段と、
前記共通所定イベントはコアプロセッサ実行トレーシング中に前記マルチスレッドプロセッサの全ての動作スレッドによって参照可能であり、
前記共通所定イベントに関連するスレッドに関する実行トレーシングのタイミングを維持するための前記共通所定イベントへの実行トレーシングを前記スレッドが開始する時間を参照する手段と、
前記スレッドが実行トレーシングを開始した前記時間に関連づけるために、前記共通所定イベントを更新し、その結果、実行トレーシングが発生している前記マルチスレッドプロセッサの全ての他のスレッドに関連したタイミングデータに実行トレーシングを前記スレッドが開始した前記時間を整合させる手段と、を具備するデジタル信号プロセッサシステム。
［Ｃ２２］
前記共通所定イベントを、最後のスレッドが実行トレーシングをオンした時間に関連づける手段をさらに具備するＣ２１のデジタル信号プロセッサシステム。
［Ｃ２３］
前記共通所定イベントを、全てのスレッドが実行トレーシングをオフしてからのマルチスレッドプロセッササイクル数に関連づける手段をさらに具備するＣ２１のデジタル信
号プロセッサシステム。
［Ｃ２４］
複数のデータパケットに前記共通所定イベントを記録する手段をさらに具備するＣ２１のデジタル信号プロセッサシステム。
［Ｃ２５］
前記共通所定イベントに関連した複数のデータパケットを用いて、前記マルチスレッドプロセッサにおいて動作するスレッドに関して相互関係のある実行トレーシング情報を再構成する手段をさらに具備するＣ２１のデジタル信号プロセッサシステム。
［Ｃ２６］
前記共通所定イベントに関する前記タイミングデータを同期させるための複数の命令および回路網をさらに具備するＣ２１のデジタル信号プロセッサシステム。
［Ｃ２７］
前記共通所定イベントの発生からのサイクルのグローバルカウントを生成する手段をさらに具備するＣ２１のデジタル信号プロセッサシステム。
［Ｃ２８］
前記共通所定イベントからのサイクルのグローバルカウントを用いて、実行トレーシングを行うすべてのスレッド間でのインタースレッドタイミングデータを再確立する手段をさらに具備するＣ２１のデジタル信号プロセッサシステム。
［Ｃ２９］
データ損失を決定し、前記データ損失に応じて前記共通所定イベントからのサイクルのグローバルカウントを用いて、実行トレーシングを行うすべてのスレッド間でインタースレッドタイミングデータを再確立する手段をさらに具備するＣ２１のデジタル信号プロ
セッサシステム。
［Ｃ３０］
ゼロ値を介して繰り返されるグローバルカウンタのイベントにおいてすべてのスレッドに関する同期パケットを生成する手段をさらに具備するＣ２１のデジタル信号プロセッ
サシステム。
［Ｃ３１］
実行トレーシングプロセスを行うことと、これに関連してマルチスレッドプロセッサのスレッド中でインタースレッドトレースタイミングを整合させることを含むマルチスレッドデジタル信号プロセッサをデバッギングするコンピュータ読取可能な具現化されるプログラムコード手段を有するコンピュータ使用可能な媒体であって、
共通所定イベントに関するタイミングデータを記録するコンピュータ読取可能なプログラムコード手段と、
前記共通所定イベントはコアプロセッサ実行トレーシング中に前記マルチスレッドプロセッサの全ての動作スレッドによって参照可能であり、
前記共通所定イベントに関連するスレッドに関する実行トレーシングのタイミングを維持するための前記共通所定イベントへの実行トレーシングを前記スレッドが開始する時間を参照するコンピュータ読取可能なプログラムコード手段と、
前記スレッドが実行トレーシングを開始した前記時間に関連づけるために、前記共通所定イベントを更新し、その結果、実行トレーシングが発生している前記マルチスレッドプロセッサの全ての他のスレッドに関連したタイミングデータに実行トレーシングを前記スレッドが開始した前記時間を整合させるコンピュータ読取可能なプログラムコード手段と、を具備するコンピュータ使用可能な媒体。
［Ｃ３２］
前記共通所定イベントを、最後のスレッドが実行トレーシングをオンした時間に関連づけるコンピュータ読取可能なプログラムコード手段をさらに具備するＣ３１のコンピュータ使用可能な媒体。
［Ｃ３３］
前記共通所定イベントを、全てのスレッドが実行トレーシングをオフしてからのマルチスレッドプロセッササイクル数に関連づけるコンピュータ読取可能なプログラムコード手段をさらに具備するＣ３１のコンピュータ使用可能な媒体。
［Ｃ３４］
複数のデータパケットに前記共通所定イベントを記録するコンピュータ読取可能なプログラムコード手段をさらに具備するＣ３１のコンピュータ使用可能な媒体。
［Ｃ３５］
前記共通所定イベントに関連した複数のデータパケットを用いて、前記マルチスレッドプロセッサにおいて動作するスレッドに関して相互関係のある実行トレーシング情報を再構成するコンピュータ読取可能なプログラムコード手段をさらに具備するＣ３１のコン
ピュータ使用可能な媒体。
【図１】
0006423037.tif 000002
【図２】
0006423037.tif 000003
【図３】
0006423037.tif 000004
【図４】
0006423037.tif 000005
【図５】
0006423037.tif 000006
【図６】
0006423037.tif 000007
【図７】
0006423037.tif 000008
【図８】
0006423037.tif 000009
【図９】
0006423037.tif 000010
【図１０】
0006423037.tif 000011
【図１１】
0006423037.tif 000012
【図１２】
0006423037.tif 000013
【図１３】
0006423037.tif 000014
【図１４】
0006423037.tif 000015
【図１５】
0006423037.tif 000016
【図１６】
0006423037.tif 000017
【図１７】
0006423037.tif 000018