(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-06-24
(45)【発行日】2024-07-02
(54)【発明の名称】命令実行のトレース
(51)【国際特許分類】
G06F 9/38 20180101AFI20240625BHJP
G06F 15/78 20060101ALI20240625BHJP
G06F 11/36 20060101ALI20240625BHJP
【FI】
G06F9/38 380C
G06F15/78 516
G06F11/36 164
【外国語出願】
(21)【出願番号】P 2020072872
(22)【出願日】2020-04-15
【審査請求日】2022-03-16
(32)【優先日】2019-04-16
(33)【優先権主張国・地域又は機関】GB
(73)【特許権者】
【識別番号】520161964
【氏名又は名称】シーメンス インダストリー ソフトウェア インコーポレイテッド
(74)【代理人】
【識別番号】100114890
【氏名又は名称】アインゼル・フェリックス=ラインハルト
(74)【代理人】
【識別番号】100098501
【氏名又は名称】森田 拓
(74)【代理人】
【識別番号】100116403
【氏名又は名称】前川 純一
(74)【代理人】
【識別番号】100134315
【氏名又は名称】永島 秀郎
(74)【代理人】
【識別番号】100135633
【氏名又は名称】二宮 浩康
(74)【代理人】
【識別番号】100162880
【氏名又は名称】上島 類
(72)【発明者】
【氏名】ガジンダー、パネザー
【審査官】坂東 博司
(56)【参考文献】
【文献】米国特許第06085338(US,A)
【文献】米国特許出願公開第2016/0062869(US,A1)
【文献】特表2013-537346(JP,A)
【文献】米国特許出願公開第2008/0201591(US,A1)
【文献】米国特許出願公開第2008/0294881(US,A1)
【文献】米国特許出願公開第2010/0318972(US,A1)
【文献】米国特許出願公開第2009/0019317(US,A1)
【文献】米国特許第07231551(US,B1)
【文献】特開平5-158734(JP,A)
【文献】特開平5-224930(JP,A)
【文献】特表2020-512613(JP,A)
【文献】特開2003-150403(JP,A)
【文献】PowerPC 604e RISC Microprocessor User's Manual, Chapter 9: Performance Monitor,POWERPC 604W RISC MICROPROCESSOR USER'S MANUAL,米国,1994年11月,9-1~9-11頁,<URL:https://vintageapple.org/macprogramming/pdf/PowerPC_604_RISC_Microprocessor_Users_Manual_1994.pdf>,[令和5年5月2日検索]
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/38
G06F 15/78
G06F 11/36
(57)【特許請求の範囲】
【請求項1】
プロセッサのクロックサイクル中、前記プロセッサが命令を実行し続ける間に、集積回路チップの前記プロセッサ上の命令実行をリアルタイムでトレースする方法であって、
前記集積回路チップ上のトレース回路において、
命令カウントを形成するために、時間内に連続
してリタイアされた一連の命令の数をカウントすること、および
ストールカウントを形成するために、リタイアされた命令がない間の前記プロセッサの後続する連続したクロックサイクルの数をカウントすること
によって、前記プロセッサの前記命令実行をモニタリングすることと、
前記命令カウントおよび前記ストールカウントを含むトレースメッセージを生成することと、
前記トレースメッセージを出力することと、
を含む方法。
【請求項2】
前記ストールカウントをしきい値ストールカウントと比較することと、
前記ストールカウントが前記しきい値ストールカウントと同じであるか、または前記しきい値ストールカウントを超える場合にのみ、前記トレースメッセージを生成および出力すること、
をさらに含む、請求項1に記載の方法。
【請求項3】
前記ストールカウントが前記しきい値ストールカウントよりも少ない場合に、
ストールカウンタを0カウントにリセットすることと、
連続
してリタイアされた一連の命令のさらなる数をカウントすることと、
さらなるストールカウントを形成するために、リタイアされた命令がない間の前記プロセッサの後続する連続したクロックサイクルの数をカウントすることと、
前記さらなるストールカウントを前記しきい値ストールカウントと比較すること
を含み、
前記さらなるストールカウントが前記しきい値ストールカウントと同じであるか、または前記しきい値ストールカウントを超える場合にのみ、
さらなる命令カウントおよび前記さらなるストールカウントを含むトレースメッセージを生成することであって、前記さらなる命令カウントが、前記命令カウント、前記ストールカウント、および連続
してリタイアされた一連の命令の前記さらなる数の和であることと、
前記トレースメッセージを出力すること
を含む、
請求項2に記載の方法。
【請求項4】
インクリメントされた命令カウントを形成するために、前記ストールカウントによって前記命令カウントをインクリメントすることを含み、
連続
してリタイアされた一連の命令の前記さらなる数をカウントすることが、前記インクリメントされた命令カウントから開始し、それによって、前記さらなる命令カウントを形成する、
請求項3に記載の方法。
【請求項5】
命令カウンタを0カウントにリセットすることを含み、
連続
してリタイアされた一連の命令の前記さらなる数をカウントすることが、0から開始し、
前記方法が、
前記さらなる命令カウントを形成するために、前記命令カウント、前記ストールカウント、および連続
してリタイアされた一連の命令の前記さらなる数を加算することをさらに含む、
請求項3に記載の方法。
【請求項6】
前記さらなるストールカウントが前記しきい値ストールカウントよりも少ない場合に、請求項3に記載の方法を反復して実施することを含み、
反復ストールカウントが前記しきい値ストールカウントと同じであるか、または前記しきい値ストールカウントを超えるときにのみ、トレースメッセージを生成および出力することを含む、
請求項3、4、または5に記載の方法。
【請求項7】
プロセッサのクロックサイクル中、前記プロセッサが多数の命令を同時に実行し続ける間に、集積回路チップの前記プロセッサ上の命令実行をリアルタイムでトレースする方法であって、前記プロセッサが、クロックサイクルごとに2つ以上の命令をリタイアすることが可能であり、前記方法が、
前記集積回路チップ上のトレース回路において、
クロックサイクルカウントを形成するために、各クロックサイクルにおいてリタイアされた命令の数をカウントすること、および
ストールカウントを形成するために、リタイアされた命令がない間の前記プロセッサの連続したクロックサイクルの数をカウントすること
によって、前記プロセッサの前記命令実行をモニタリングすることと、
前記クロックサイクルカウントおよび前記ストールカウントを含むトレースメッセージを生成することと、
前記トレースメッセージを出力すること、
を含む方法。
【請求項8】
非リタイアカウントを形成するために、リタイアされていない命令実行の数をカウントすることをさらに含む、請求項7に記載の方法。
【請求項9】
前記トレースメッセージが前記非リタイアカウントをさらに含む、請求項8に記載の方法。
【請求項10】
ランレングス符号化を使用して、前記トレースメッセージにおけるカウントを符号化することをさらに含む、請求項9に記載の方法。
【請求項11】
エリアスガンマコードを使用して、前記トレースメッセージにおける前記カウントを符号化するステップを含む請求項10に記載の方法。
【請求項12】
プロセッサのクロックサイクル中、命令を実行するように構成された前記プロセッサと、
前記プロセッサの命令実行をリアルタイムでトレースするように構成されたトレース回路と、
を含む集積回路チップであって、
前記トレース回路が、
命令カウントを形成するために、時間内に連続
してリタイアされた一連の命令の数をカウントするように構成された命令カウンタと、
ストールカウントを形成するために、リタイアされた命令がない間の前記プロセッサの後続する連続したクロックサイクルの数をカウントするように構成されたストールカウンタと、
前記命令カウントおよび前記ストールカウントを含むトレースメッセージを生成するように構成されたメッセージ生成器と、
前記トレースメッセージを出力するように構成された出力と、
を含む、
集積回路チップ。
【請求項13】
前記ストールカウントをしきい値ストールカウントと比較するように構成された比較器をさらに含む、請求項12に記載の集積回路チップ。
【請求項14】
プロセッサのクロックサイクルごとに2つ以上の命令をリタイアするように構成された前記プロセッサと、
前記プロセッサの命令実行をリアルタイムでトレースするように構成されたトレース回路と、
を含む集積回路チップであって、
前記トレース回路が、
クロックサイクルカウントを形成するために、各クロックサイクルにおいてリタイアされた命令の数をカウントするように構成されたクロックサイクルカウンタと、
ストールカウントを形成するために、リタイアされた命令がない間の前記プロセッサの連続したクロックサイクルの数をカウントするように構成されたストールカウンタと、
前記クロックサイクルカウントおよび前記ストールカウントを含むトレースメッセージを生成するように構成されたメッセージ生成器と、
前記トレースメッセージを出力するように構成された出力と、
を含む、
集積回路チップ。
【請求項15】
非リタイアカウントを形成するために、リタイアされていない命令実行の数をカウントするように構成されたさらなるカウンタをさらに含む、請求項12から14のいずれかに記載の集積回路チップ。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、集積回路チップ上で、CPU(中央処理ユニット)などのプロセッサ上の命令実行をトレースすることに関する。
【背景技術】
【0002】
過去において、多数のコアデバイス(プロセッサ、メモリ、その他)を有した埋め込みシステムは、プリント回路基板(PCB)上に組み込まれ、バスを介してPCB上で接続されていた。埋め込みシステムにおけるトラフィックは、これらのバスを通して搬送された。この配置は、オシロスコープおよび論理解析器などのモニタリングツールが、コアデバイスへの直接アクセスを許可するPCBのバスに取り付けられることを可能にしたので、コアデバイスをモニタリングするために好都合であった。
【0003】
半導体技術における進歩と相まって、より小さな製品に対する市場の需要が、システム・オンチップ(SoC)デバイスの開発を導いてきた。SoCにおいて、埋め込みシステムの多数のコアデバイスは、単一のチップ上に統合される。SoCにおいて、埋め込みシステムにおけるトラフィックは、内部バスを通して搬送され、したがって、モニタリングツールの直接的なシステムバスへの接続は、もはや可能ではない。(多数の処理コアの統合、およびより高い内部クロッキング周波数を導くSoC技術の開発により)チップまわりで移送されるデータの増加量と相まって、結果として削減されたアクセスは、産業界によって要求される時間尺度内で、セキュリティ侵害、バグ、および安全性懸念についてシステムをモニタリングするための、外部モニタリングツールの能力を削減してきた。加えて、多数のコアデバイスが同じ単一のチップ上に埋め込まれるとき、各個々のコアデバイスの挙動は、他のコアデバイスとのその対話、ならびにトリガおよびアラートなどのリアルタイム・イベントにより、単独でのその挙動とは異なっている。
【発明の概要】
【発明が解決しようとする課題】
【0004】
したがって、SoCデバイスの開発は、モニタリング技術における関連開発を必要としたが、それは、SoC上でのなんらかのモニタリング機能の統合に至る。今では、オンチップのモニタリング回路が、CPUなどのコアデバイス上で稼働するプログラムの実行をトレースすることが知られている。トレースデータは、一般に、オフチップの解析用に出力される。しかしながら、そのトレースデータが提供するのは、コアプロセッサのプログラム実行に関する限定された一時的な詳細である。より詳細なトレースデータが望ましい。
【課題を解決するための手段】
【0005】
第1の態様によれば、プロセッサのクロックサイクル中、プロセッサが命令を実行し続ける間に、集積回路チップのプロセッサ上の命令実行をリアルタイムでトレースする方法が提供され、方法は、集積回路チップ上のトレース回路において、命令カウントを形成するために、時間内に連続するリタイアされた一連の命令の数をカウントすること、およびストールカウントを形成するために、リタイアされた命令がない間のプロセッサの後続する連続したクロックサイクルの数をカウントすることによって、プロセッサの命令実行をモニタリングすることと、命令カウントおよびストールカウントを含むトレースメッセージを生成することと、トレースメッセージを出力すること、を含む。
【0006】
方法は、ストールカウントをしきい値ストールカウントと比較するステップと、ストールカウントがしきい値ストールカウントと同じであるか、またはしきい値ストールカウントを超える場合にのみ、トレースメッセージを生成するステップおよび出力するステップとをさらに含んでいてもよい。
【0007】
方法は、ストールカウントがしきい値ストールカウントよりも少ない場合に、ストールカウンタを0カウントにリセットすることと、連続するリタイアされた一連の命令のさらなる数をカウントすることと、さらなるストールカウントを形成するために、リタイアされた命令がない間のプロセッサの後続する連続したクロックサイクルの数をカウントすることと、さらなるストールカウントをしきい値ストールカウントと比較することと、さらなるストールカウントがしきい値ストールカウントと同じであるか、またはしきい値ストールカウントを超える場合にのみ、さらなる命令カウントおよびさらなるストールカウントを含むトレースメッセージを生成することであって、さらなる命令カウントが、命令カウント、ストールカウント、および連続するリタイアされた一連の命令のさらなる数の和である、生成することと、トレースメッセージを出力すること、を含んでいてもよい。
【0008】
方法は、インクリメントされた命令カウントを形成するために、ストールカウントによって命令カウントをインクリメントするステップを含んでいてもよく、連続するリタイアされた一連の命令のさらなる数をカウントするステップは、インクリメントされた命令カウントから開始し、それによって、さらなる命令カウントを形成する。
【0009】
方法は、命令カウンタを0カウントにリセットすることを含んでいてもよく、連続するリタイアされた一連の命令のさらなる数をカウントすることは、0から開始し、方法は、さらなる命令カウントを形成するために、命令カウント、ストールカウント、および連続するリタイアされた一連の命令のさらなる数を加算することをさらに含む。
【0010】
方法は、さらなるストールカウントがしきい値ストールカウントよりも少ない場合に、上述された方法を反復して実施することを含んでいてもよく、反復ストールカウントがしきい値ストールカウントと同じであるか、またはしきい値ストールカウントを超えるときにのみ、トレースメッセージを生成および出力することを含んでいてもよい。
【0011】
第2の態様によれば、プロセッサのクロックサイクル中、プロセッサが多数の命令を同時に実行し続ける間に、集積回路チップのプロセッサ上の命令実行をリアルタイムでトレースする方法が提供され、プロセッサは、クロックサイクルごとに2つ以上の命令をリタイアすることが可能であり、方法は、集積回路チップ上のトレース回路において、クロックサイクルカウントを形成するために、各クロックサイクルにおいてリタイアされた命令の数をカウントすること、およびストールカウントを形成するために、リタイアされた命令がない間のプロセッサの連続したクロックサイクルの数をカウントすることによって、プロセッサの命令実行をモニタリングすることと、クロックサイクルカウントおよびストールカウントを含むトレースメッセージを生成することと、トレースメッセージを出力すること、を含む。
【0012】
方法は、非リタイアカウントを形成するために、リタイアされていない命令実行の数をカウントすることをさらに含んでいてもよい。
【0013】
トレースメッセージは、非リタイアカウントをさらに含んでいてもよい。
【0014】
方法は、ランレングス符号化を使用して、トレースメッセージにおけるカウントを符号化することをさらに含んでいてもよい。
【0015】
方法は、エリアスガンマコードを使用して、トレースメッセージにおけるカウントを符号化することを含んでいてもよい。
【0016】
第3の態様によれば、プロセッサのクロックサイクル中、命令を実行するように構成されたプロセッサと、プロセッサの命令実行をリアルタイムでトレースするように構成されたトレース回路とを含む集積回路チップが提供され、トレース回路は、命令カウントを形成するために、時間内に連続するリタイアされた一連の命令の数をカウントするように構成された命令カウンタと、ストールカウントを形成するために、リタイアされた命令がない間のプロセッサの後続する連続したクロックサイクルの数をカウントするように構成されたストールカウンタと、命令カウントおよびストールカウントを含むトレースメッセージを生成するように構成されたメッセージ生成器と、トレースメッセージを出力するように構成された出力とを含む。
【0017】
集積回路チップは、ストールカウントをしきい値ストールカウントと比較するように構成された比較器をさらに含んでいてもよい。
【0018】
第4の態様によれば、プロセッサのクロックサイクルごとに2つ以上の命令をリタイアするように構成されたプロセッサと、プロセッサの命令実行をリアルタイムでトレースするように構成されたトレース回路とを含む集積回路チップが提供され、トレース回路は、クロックサイクルカウントを形成するために、各クロックサイクルにおいてリタイアされた命令の数をカウントするように構成されたクロックサイクルカウンタと、ストールカウントを形成するために、リタイアされた命令がない間のプロセッサの連続したクロックサイクルの数をカウントするように構成されたストールカウンタと、クロックサイクルカウントおよびストールカウントを含むトレースメッセージを生成するように構成されたメッセージ生成器と、トレースメッセージを出力するように構成された出力とを含む。
【0019】
集積回路チップは、非リタイアカウントを形成するために、リタイアされていない命令実行の数をカウントするように構成されたさらなるカウンタをさらに含んでいてもよい。
【0020】
本発明は、これより添付の図面を参照して、例として説明されることになる。
【図面の簡単な説明】
【0021】
【
図1】集積回路チップデバイス上の例示的なモニタリングアーキテクチャの概略図である。
【
図2】集積回路チップデバイス上の例示的なモニタリングアーキテクチャの概略図である。
【
図3】プロセッサをトレースするための例示的なモニタリングアーキテクチャの概略図である。
【
図4】プロセッサの命令実行をトレースする方法を例証する図である。
【
図5】プロセッサの命令実行をトレースするさらなる方法を例証する図である。
【
図6】スーパースカラプロセッサをトレースするための例示的なモニタリングアーキテクチャの概略図である。
【
図7】スーパースカラプロセッサの命令実行をトレースする方法を例証する図である。
【発明を実施するための形態】
【0022】
以下の開示は、集積回路チップ上の実装に好適なモニタリングアーキテクチャを説明する。集積回路チップは、SoC、またはマルチ・チップ・モジュール(MCM)であってよい。
【0023】
図1から
図3および
図6は、例示的なモニタリングアーキテクチャ、およびモニタリングアーキテクチャ内のコンポーネントの概略図である。これらの図は、機能ブロックの観点から構造を提示している。当技術分野においてよく知られた機能を遂行するためのいくつかの機能ブロックは、これらの図から所々で省略されている。
図4、
図5、および
図7は、プロセッサをトレースする方法を例証するフローチャートである。各フローチャートは、そのフローチャートの方法が実施され得る順番を表す。しかしながら、フローチャートは、説明される方法が、表された順番で実装されることを制限するように意図されていない。方法のステップは、フローチャートに表された順番に対する代替の順番で遂行されてもよい。
【0024】
図1は、SoC100のための例示的なモニタリングアーキテクチャの全体構造を例証する。モニタリング回路101は、システム回路102をモニタリングするように配置される。
図2は、コアデバイスおよび通信インターフェースを含む例示的なシステム回路を例証する。SoCのコアデバイス201、202、および203は各々、モニタリング回路101に接続されている。
図2は、3つのコアデバイスを例証しているが、任意の数のコアデバイスがモニタリングアーキテクチャの中に好適に統合されてよい。例示的なコアデバイスは、DSP(デジタル信号プロセッサ)、ビデオプロセッサ、アプリケーションプロセッサ、CPU、グラフィックスプロセッサ、システムメモリ、バス、システム相互接続、RTOS(リアルタイム・オペレーティング・システム)、ソフトウェア、データ、カスタム回路、およびデータエンジンを含む。しかしながら、SoCの任意のコンポーネントが、
図2のコアデバイスとしてモニタリングアーキテクチャの中に組み込まれるために好適である。コアデバイスは、チップ上の他のデバイスのエミュレータまたはシミュレータであってもよい。例えば、コアデバイスは、プロセッサをエミュレートすることができる。
【0025】
モニタリング回路は、コアデバイスの動作をモニタリングすることができ、オプションでまた、コアデバイスの動作を操作することができる。モニタリング回路は、通信インターフェース204に接続されている。通信インターフェース204は、オフチップのエンティティと通信するように構成されてよい。例えば、モニタリング回路101は、通信インターフェース204を介して、オフチップの解析器と通信することができる。通信インターフェース204はまた、オンチップの他のエンティティと通信するように構成されてもよい。例えば、モニタリング回路101は、通信インターフェース204を介して、オンチップの解析器と通信することができる。
図2は1つの通信インターフェースを例証しているが、任意の数の通信インターフェースがSoC上に統合されてよい。実装される通信インターフェースは、行われることになる接続のタイプに依存して選択される。例示的な通信インターフェースは、JTAG、パラレル・トレース入力/出力、およびAuroraベースの高速シリアル・インターフェース、ならびに、USB、イーサネット、RS232、PCIe、およびCANなどのシステム・インターフェースの再使用を含む。モニタリング回路101内に、各コアデバイスに関連付けられた別個のモニタリング回路が存在してもよい。代替的に、または加えて、あるモニタリング回路が2つ以上のコアデバイスに関連付けられていてもよい。
【0026】
以下の説明は、
図2のコアデバイスがプロセッサであり、そのプロセッサがモニタリング回路101のトレース回路によってモニタされている例に焦点を当てる。プロセッサは、例えば、CPU、GPU、またはDSPであってよい。
【0027】
図3に例証されたアーキテクチャを参照すると、プロセッサ301は、命令としても既知のプログラムを実行する処理論理回路302を含む。これらの実行可能な命令は、メモリ303に記憶されている。プロセッサは、クロッキング率でクロック制御されている。したがって、プロセッサ301は、プロセッサのクロックサイクル中に命令を実行する。クロッキング率は、プロセッサの内部にあるクロック304によって設定されたクロッキング率であってよい。プロセッサは、単一のクロックサイクルを費やして、命令の実行を完了してもよい。プロセッサは、いくつかのクロックサイクルを費やして、命令の実行を完了してもよい。パイプライン処理を使用して、プロセッサは、同じ時間にいくつかの命令の実行途中であってもよい。しかしながら、プロセッサは、各クロックサイクルにおいて、最大1つの命令の実行を開始する。プロセッサは、各クロックサイクルにおいて、最大1つの命令をリタイアする。本明細書で使用されるとき、用語「リタイアされる」は、命令と併せて使用されて、プロセッサがその命令の実行を完了したことを意味する。
【0028】
トレース回路305は、プロセッサ301の命令実行をトレースする。これは、邪魔にならずに行われる。トレース回路305は、プロセッサの動作を中断せずに、プロセッサ301をモニタリングする。言い換えれば、トレース回路は、プロセッサが命令のその実行を一時停止する、または変更することを必要とせずに、プロセッサをトレースする。プロセッサは、通常通り稼働し続けることができる。したがって、プロセッサは、命令を実行し続け、チップ上の、および/またはチップ外の他の回路に出力し続けることができる。トレース回路は、プロセッサ301をトレースし、トレースデータをリアルタイムで出力する。
【0029】
トレース回路305は、命令カウンタ307を含む。命令カウンタ307は、プロセッサ301からプロセッサ出力を受信する。命令カウンタ307はまた、クロック309からクロック入力308を受信することができる。クロック309は、トレース回路305の内部にある。クロック309は、プロセッサクロック304からそのクロック信号を受信することができる。命令カウンタ307は、命令カウントを形成するために、時間内に連続するリタイアされた一連の命令の数をカウントする。命令カウンタは、プロセッサが命令をリタイアしていない時間の合間を識別するとき、カウントを停止することによって応答する。命令カウンタは次いで、その命令カウントをメッセージ生成器310に出力してもよい。
【0030】
トレース回路305はまた、ストールカウンタ311を含む。ストールカウンタ311は、プロセッサ301からプロセッサ出力を受信する。ストールカウンタ311はまた、クロック309からクロック入力312を受信する。ストールカウンタ311はまた、命令カウンタ307から出力313を受信する。この出力は、命令カウンタがいつカウントを停止したかを識別する。ストールカウンタは、ストールカウントを形成するために、リタイアされた命令がない間のプロセッサの連続したクロックサイクルの数をカウントする。ストールカウンタは、命令カウンタによってカウントされた、時間内に連続した一連の連続してリタイアされた命令の終了の直後に、このカウントを開始する。ストールカウンタは、命令カウンタがカウントを停止していることを識別する信号313を命令カウンタから受信すると、カウントを開始する。ストールカウンタは、命令がリタイアされたことを識別するとき、カウントを停止することによって応答する。ストールカウンタ311は、プロセッサ301と同じクロッキング率で、クロック309によってクロック制御されている。これは、クロック309がプロセッサのクロック信号304を受信しているおかげであってよい。したがって、ストールカウンタ311によってカウントされるクロックサイクルの数は、プロセッサがその間にストールしたプロセッサのクロックサイクルの数と同じである。ストールカウンタ311は、そのストールカウントをメッセージ生成器310に出力する。
【0031】
メッセージ生成器310は、命令カウントおよびストールカウントを含むトレースメッセージを生成する。出力314は、トレース回路305からのトレースメッセージを出力する。トレースメッセージは次いで、通信インターフェース306に出力されてよい。通信インターフェース306は次いで、
図2の通信インターフェース204を参照して上述されたように、トレースメッセージをオフチップで出力する、および/またはトレースメッセージをオンチップでルーティングしてもよい。
【0032】
したがって、
図4を参照すると、
図3のトレース回路305は、プロセッサ301による命令実行を以下のようにモニタリングする。ステップ401で、命令カウンタ307は、命令カウントを形成するために、時間内に連続するリタイアされた一連の命令の数をカウントする。この直後、ステップ402で、ストールカウンタは、ストールカウントを形成するために、リタイアされた命令がない間のプロセッサの後続する連続したクロックサイクルの数をカウントする。ステップ403で、メッセージ生成器は、命令カウントおよびストールカウントを含むトレースメッセージを生成する。ステップ404で、出力314は、トレースメッセージを出力する。
【0033】
命令カウンタは、プロセッサ301からプロセッサ出力を受信し続ける。その命令カウントをメッセージ生成器310に出力した後に、命令カウンタは、そのカウントを0にリセットする。命令カウンタ307は次いで、プロセッサ301から次のリタイアされた命令を受信するとき、再びカウントを開始し、
図4の方法は繰り返す。ストールカウンタもまた、プロセッサ301からプロセッサ出力を受信し続ける。そのストールカウントをメッセージ生成器310に出力した後に、ストールカウンタは、そのカウントを0にリセットする。ストールカウンタ311は次いで、命令カウンタがカウントを停止していることを識別する次の信号313を命令カウンタから受信すると、再びカウントを開始する。
【0034】
したがって、
図3の装置および
図4の方法は、オンチップのモニタリング回路が、プロセッサの命令実行をトレースすることを可能にし、プロセッサがいくつの一連の命令をリタイアし、命令実行を再開する前にプロセッサがどのくらいの長さストールするかを識別するタイミングデータを出力することを可能にする。プロセッサは、例えば、キャッシュが見逃される、命令に予期されていない分岐が存在する、命令が見逃される、または命令が未完了であるために、ストールすることがある。タイミングデータは次いで、他のモニタリングデータと共に解析される。これは、プログラム実行の流れを再構築するために行われてよい。それは、命令セットに対して行われ得る変更、および/またはプロセッサの動作を最適化するためのプロセッサの動作を識別し、命令実行をより効率的にするために行われてよい。他のモニタリングデータは、当業者に知られている任意のモニタリングデータであってよい。例えば、それは、プロセッサの実際の出力、レジスタアクセスの詳細、その他であってよい。
【0035】
図3はまた、トレース回路の内部のさらなるオプションのコンポーネントを例証し、トレース回路は、図の上でそれらのコンポーネントの破線の略図によって識別される。この回路は、比較器315を含む。比較器315は、ストールカウンタ311から、第1の入力としてストールカウントを受信する。比較器315は、ストア316から、第2の入力としてしきい値ストールカウントを受信する。比較器は、ストールカウントをしきい値ストールカウントと比較する。比較器は、コントローラ317に出力する。コントローラ317は、命令カウンタ307への制御出力318を有する。コントローラ317はまた、ストールカウンタ311への制御出力319を有する。
【0036】
これらの追加のコンポーネントの動作が、これより
図5を参照して説明されることになる。ステップ501で、命令カウンタ307は、命令カウントを形成するために、時間内に連続するリタイアされた一連の命令の数をカウントする。この直後、ステップ502で、ストールカウンタが、ストールカウントを形成するために、リタイアされた命令がない間のプロセッサの後続する連続したクロックサイクルの数をカウントする。比較器315は、ストールカウンタからストールカウントを受信し、ストア316からしきい値ストールカウントもまた受信する。比較器は、ストールカウントをしきい値ストールカウントと比較し、結果をコントローラ317に出力する。
【0037】
ステップ503で、ストールカウントがしきい値ストールカウントと同じであるか、またはしきい値ストールカウントを超える場合にのみ、コントローラ317は次いで、命令カウンタ307を、その命令カウントを出力するように制御し、コントローラ317は、ストールカウンタ311を、そのストールカウントを出力するように制御する。メッセージ生成器は、命令カウントとストールカウントの両方を受信し、ステップ506で、トレースメッセージを生成するように進む。ステップ507で、トレースメッセージが次いで出力される。ステップ503で、ストールカウントがしきい値ストールカウントよりも少ない場合、ステップ504で、コントローラ317は、ストールカウントを破棄するようにストールカウンタを制御する。言い換えれば、コントローラ317は、ストールカウンタを、そのストールカウントを0にリセットするように制御する。ステップ505で、コントローラは、インクリメントされた命令カウントを形成するために、命令カウンタを、ストールカウントによってその命令カウントをインクリメントするように制御する。
【0038】
命令カウントおよびストールカウントは、命令カウンタおよびストールカウンタからメッセージ生成器に出力されない。したがって、命令カウントおよびストールカウントを収容するメッセージは生成されず、出力されない。代わりに、方法はステップ501に戻り、
図5のフローチャートのさらなる反復を続ける。今回は、インクリメントされた命令カウントのカウントから開始して、命令カウンタは、さらなる命令カウントを形成するために、連続するリタイアされた一連の命令の数をカウントする。この直後、ステップ502で、0カウントから開始して、ストールカウンタは、さらなるストールカウントを形成するために、リタイアされた命令がない間のプロセッサの後続する連続したクロックサイクルの数をカウントする。ストールカウンタは、このさらなるストールカウントを比較器に出力する。比較器は次いで、さらなるストールカウントをしきい値ストールカウントと比較し、結果をコントローラ317に出力する。さらなるストールカウントがしきい値ストールカウントと同じであるか、またはしきい値ストールカウントを超える場合にのみ、コントローラ317は、命令カウンタ307を、そのさらなる命令カウントを出力するように制御し、ストールカウンタ311を、そのさらなるストールカウントを出力するように制御する。メッセージ生成器は、さらなる命令カウントおよびさらなるストールカウントの両方を受信し、ステップ506で、トレースメッセージを生成するように進む。ステップ507で、トレースメッセージが出力される。
【0039】
しかしながら、さらなるストールカウントがしきい値ストールカウントよりも少ない場合、ステップ504で、コントローラは、ストールカウントを0にリセットするようにストールカウンタを制御し、ステップ505で、コントローラは、ストールカウントによって命令カウントをインクリメントするように命令カウンタを制御する。さらなる命令カウントおよびさらなるストールカウントを収容するトレースメッセージは生成されない。次いで
図5のプロセスは再び繰り返す。
【0040】
図5のプロセスは、反復ストールカウントがしきい値ストールカウントと同じであるか、またはしきい値ストールカウントを超えるまで、反復して繰り返す。一旦これが発生すると、コントローラは、関連付けられた反復命令カウントを出力するように命令カウンタを制御し、コントローラは、反復ストールカウントを出力するようにストールカウンタを制御する。メッセージ生成器は、これらのカウントを受信し、反復命令カウントおよび反復ストールカウントを収容するトレースメッセージを生成する。ステップ507で、このトレースメッセージが出力される。
【0041】
命令カウンタは、プロセッサ301からプロセッサ出力を受信し続ける。その反復命令カウントをメッセージ生成器310に出力した後に、命令カウンタは、そのカウントを0にリセットする。命令カウンタ307は次いで、プロセッサ301から次のリタイアされた命令を受信するとき、再びカウントを開始し、
図5の方法は繰り返す。ストールカウンタもまた、プロセッサ301からプロセッサ出力を受信し続ける。その反復ストールカウントをメッセージ生成器310に出力した後に、ストールカウンタは、そのカウントを0にリセットする。ストールカウンタ311は次いで、命令カウンタがカウントを停止していることを識別する次の信号313を命令カウンタから受信すると、再びカウントを開始する。
【0042】
上述された方法において、ストールカウントがストールカウントしきい値よりも少ないと判定された場合、ストールカウンタは、0にリセットされ、命令カウンタは、ストールカウントによってインクリメントされる。代替的な実装において、ステップ503の後に、ストールカウントがストールカウントしきい値よりも少ない場合、コントローラ317は、命令カウントおよびストールカウントを一緒に加算するように加算器(
図3には示されず)を制御する。ストールカウンタおよび命令カウンタの両方は次いで、0にリセットされる。方法は次いで、0カウントから開始して命令カウンタが連続するリタイアされた一連の命令の数をカウントする、ステップ501に戻る。ステップ502で、0カウントから開始して、ストールカウンタは、リタイアされた命令がない間のプロセッサの後続する連続したクロックサイクルの数をカウントする。ステップ503で、次のストールカウントがストールカウントしきい値よりも少ない場合、コントローラ317は、方法の現在の反復の命令カウントおよびストールカウントを以前の反復からの結果に加算するように加算器を制御する。コントローラは次いで、命令カウンタおよびストールカウンタのカウントを0にリセットし、方法は繰り返す。ステップ502からの反復ストールカウントがしきい値ストールカウントと同じであるか、またはしきい値ストールカウントを超えるとき、コントローラ317は、その現在の結果をメッセージ生成器に出力するように加算器を制御する。メッセージ生成器は、加算器の現在の結果を反復命令カウントとして収容するトレースメッセージを生成する。トレースメッセージはまた、反復ストールカウントも収容する。
【0043】
代替的な実装において、ステップ501で、命令カウンタ307は、一連のリタイアされた命令の数、および連続したストールされたクロックサイクルの数をカウントする。言い換えれば、命令カウンタ307は、リタイアされた命令ごとに1だけインクリメントし、命令カウンタ307は、ストールされたクロックサイクルごとに1だけインクリメントする。ステップ502で、連続するリタイアされた一連の命令の数の後に、ストールカウンタ311は、ストールカウントを形成するために、リタイアされた命令がない間のプロセッサの後続する連続したクロックサイクルの数をカウントする。比較器315は、ストールカウントをしきい値ストールカウントと比較する。ストールカウントがしきい値ストールカウントよりも少ない場合、コントローラ317は、ストールカウンタを0にリセットする。コントローラ317は、命令カウンタ307に関してはなんの措置も取らない。命令カウンタは、ステップ501で、一連のリタイアされた命令の数、および連続したストールされたクロックサイクルの数をカウントし続ける。連続するリタイアされた一連の命令の数の後に、0カウントから開始して、ステップ502で、ストールカウンタ311は、反復ストールカウントを形成するために、リタイアされた命令がない間のプロセッサの後続する連続したクロックサイクルの数をカウントする。ステップ503で、次のストールカウントがストールカウントしきい値よりも少ない場合、コントローラ317は、ストールカウンタを0にリセットし、命令カウンタに関してはなんの措置も取らない。方法は繰り返す。ステップ502からの反復ストールカウントがしきい値ストールカウントと同じであるか、またはしきい値ストールカウントを超えるとき、コントローラ317は、反復ストールカウントをメッセージ生成器に出力するようにストールカウンタを制御する。コントローラ317はまた、命令カウンタを、その命令カウントを減算器(
図3には示されず)に出力するように制御し、減算器は、反復命令カウントを形成するために、反復ストールカウントを命令カウントから差し引く。減算器は、反復命令カウントをメッセージ生成器に出力する。メッセージ出力器は、反復命令カウントおよび反復ストールカウントを収容するトレースメッセージを生成する。
【0044】
しきい値ストールカウントは、製造時、ストア316に記憶されていてよい。代替的に、しきい値ストールカウントは、構成可能であってもよい。例えば、しきい値ストールカウントは、トレースメッセージを解析するエンティティによって、動的に再構成されてもよい。
【0045】
図5に関して説明される方法は、プロセッサがしきい値ストールカウントよりも小さいサイクルの数の間にストールするとき、トレースメッセージを出力しない。代わりに、ストールは、リタイアされた命令として扱われ、トレース回路は、リタイアされた命令をカウントし続ける。これは、しきい値を利用しない
図4の方法と比較して、生成され、出力されるトレースメッセージの数を削減し、したがって、より効率的なトレース方法である。好適には、しきい値ストールカウントは、エンティティが取得しようと試みるプロセッサ措置に従って、そのエンティティがトレースメッセージを解析することによって、またはそのエンティティがトレースメッセージを解析する代わりに、動的に構成される。
【0046】
図3および付随する説明は、クロックサイクルごとに最大1つの命令の実行を開始すること、およびクロックサイクルごとに最大1つの命令をリタイアすることが可能なプロセッサを説明している。しかしながら、本明細書で説明される概念はまた、クロックサイクルごとに2つ以上の命令をリタイアすることが可能なプロセッサにも適用可能である。
図6は、そのようなプロセッサ601の簡略版を例証する。プロセッサ601は、処理論理回路1 602と、処理論理回路2 603と、処理論理回路3 604と、処理論理回路4 605とを含む。これらの処理論理回路コンポーネントの各々は、プロセッサのクロックサイクル中、メモリ606に記憶された命令を実行する。各処理論理回路は、その実行された命令をバッファ617に出力する。各処理論理回路は、処理論理回路のうちの別の1つが別の命令の実行を開始する同じクロックサイクルにおいて、命令の実行を開始することができる。各処理論理回路は、処理論理回路のうちの別の1つが命令をリタイアする同じクロックサイクルにおいて、命令をリタイアすることができる。バッファ617は、リタイアされた命令を、それらが実行を開始した同じ順番で、プロセッサ601からリタイアされるように並べる。例えば、バッファ617は、4つのレーン0、1、2、および3を有することができる。バッファ617は、レーン0、1、2、および3上のリタイアされた命令が、それぞれ処理論理回路に入力された命令と同じ順番であるように、処理論理回路1、2、3、4からのリタイアされた実行を並べ替える。クロッキング率は、プロセッサ内部のクロック607によって設定されたクロッキング率であってよい。4つの処理論理回路コンポーネントが示されているが、同じ時間に命令実行を開始し、命令を実行し、命令をリタイアすることが可能な、2つの、3つの、または4つよりも多い処理論理回路コンポーネントがプロセッサ601に存在してもよい。バッファ617は、処理論理回路の数と同じ数のレーンを有する。
【0047】
図3と同様に、トレース回路608は、プロセッサ601の命令実行をトレースする。トレース回路608は、邪魔にならずに、すなわち、プロセッサの動作を中断せずに、プロセッサ601をモニタリングする。
【0048】
トレース回路608は、クロックサイクルカウンタ609を含む。クロックサイクルカウンタ609は、プロセッサ601からプロセッサ出力を受信する。クロックサイクルカウンタ609はまた、クロック611からクロック入力610を受信する。クロック611は、トレース回路608の内部にある。クロック611は、プロセッサクロック607からそのクロック信号を受信することができる。クロックサイクルカウンタは、クロックサイクルカウントを形成するために、プロセッサの各クロックサイクルにおいてリタイアされた命令の数をカウントする。プロセッサの各クロックサイクルにおいてリタイアされた命令の最大数は、プロセッサが同じクロックサイクルにおいてリタイアすることが可能な命令の数である。
図6の例において、プロセッサ601は、同じクロックサイクルにおいて4つの命令をリタイアすることが可能であり、したがって、クロックサイクルカウントは、0、1、2、3、または4のいずれかである。クロックサイクルカウンタ609は、プロセッサ601と同じクロッキング率で、クロック611によってクロック制御されている。これは、クロック611がプロセッサのクロック信号607を受信しているおかげであってよい。したがって、クロックサイクルカウンタが各クロックサイクルにおいてリタイアされているとしてカウントする命令の数は、プロセッサがプロセッサのクロックサイクルの各々においてリタイアする命令の数である。クロックサイクルカウンタは、そのクロックサイクルカウントをメッセージ生成器612に出力する。
【0049】
トレース回路608はまた、ストールカウンタ613を含む。ストールカウンタは、プロセッサ601からプロセッサ出力を受信する。ストールカウンタはまた、クロック611からクロック入力614を受信する。ストールカウンタは、ストールカウントを形成するために、リタイアされた命令がない間のプロセッサの連続したクロックサイクルの数をカウントする。ストールカウンタは、リタイアされた命令がない間のクロックサイクルがいつ存在するかを識別し、そのカウントを0から開始する。ストールカウンタは、命令がリタイアされたサイクルを識別するとき、カウントを停止する。ストールカウンタ613は、プロセッサ601と同じクロッキング率で、クロック611によってクロック制御されている。これは、クロック611がプロセッサのクロック信号607を受信しているおかげであってよい。したがって、ストールカウンタ613によってカウントされるクロックサイクルの数は、プロセッサがその間にストールしたプロセッサのクロックサイクルの数と同じである。ストールカウンタ613は、そのストールカウントをメッセージ生成器612に出力する。
【0050】
メッセージ生成器612は、クロックサイクルカウントおよびストールカウントを含むトレースメッセージを生成する。出力615は、トレース回路608からのトレースメッセージを出力する。トレースメッセージは次いで、通信インターフェース616に出力されてよい。通信インターフェース616は次いで、
図2の通信インターフェース204を参照して上述されたように、トレースメッセージをオフチップで出力する、および/またはトレースメッセージをオンチップでルーティングすることができる。
【0051】
したがって、
図7を参照すると、
図6のトレース回路608は、以下のようにプロセッサ601による命令実行をモニタリングする。ステップ701で、クロックサイクルカウンタ609は、クロックサイクルカウントを形成するために、プロセッサのクロックサイクルにおいてリタイアされた命令の数をカウントする。この直後、ステップ702で、ストールカウンタが、ストールカウントを形成するために、リタイアされた命令がない間のプロセッサの連続したクロックサイクルの数をカウントする。クロックサイクルカウントを形成するためにクロックサイクルカウンタが解析したクロックサイクルの直後に、プロセッサがクロックサイクルにおいて1つまたは複数の命令をリタイアした場合、ストールカウンタは、ストールがなかったことを識別するストールカウントを出力する。例えば、このストールカウント値は、0であってよい。別の例として、このストールカウント値は、1であってもよい。ステップ703で、メッセージ生成器は、クロックサイクルカウントおよびストールカウントを含むトレースメッセージを生成する。ステップ704で、出力615は、トレースメッセージを出力する。
【0052】
クロックサイクルカウンタは、プロセッサ601からプロセッサ出力を受信し続ける。その命令カウントをメッセージ生成器612に出力した後に、クロックサイクルカウンタ609は、そのカウントを0にリセットする。クロックサイクルカウンタ609は次いで、プロセッサの次のクロックサイクルで再びカウントを開始し、
図7の方法は繰り返す。
【0053】
したがって、
図6の装置および
図7の方法は、オンチップのモニタリング回路が、プロセッサの命令実行をトレースすることを可能にし、プロセッサの各サイクルでいくつの命令がリタイアされ、命令実行を再開する前にプロセッサがその間にストールしたクロックサイクルがいくつかを識別するタイミングデータを出力することを可能にする。そのタイミングデータは次いで、
図3に関して説明されたように解析される。
【0054】
図3および
図6のトレース回路は、オプションで、非リタイアカウンタ800をさらに含むことができる。これは、破線の略図で図に例証されている。非リタイアカウンタは、プロセッサ301、601からプロセッサ出力を受信する。非リタイアカウンタはまた、クロック309、611からクロック入力を受信する。非リタイアカウンタ800は、プロセッサ301、601と同じクロッキング率で、クロック309、611によってクロック制御されている。非リタイアカウンタは、見逃されたリタイア機会の数をカウントする。言い換えれば、非リタイアカウンタは、命令がリタイアされ得たにもかかわらず、リタイアされなかった回数をカウントする。
図5に関して説明された方法では、非リタイアカウンタは、時間内に連続するリタイアされた一連の命令のグループの後に、リタイアされた命令がない間のプロセッサの後続する連続したクロックサイクルの数をカウントすることができる。このカウントがしきい値ストールカウントよりも多い、またはしきい値ストールカウントと同じである場合、非リタイアカウンタは、カウントを破棄し、0にリセットする。カウントがしきい値ストールカウントよりも少ない場合、非リタイアカウンタは、このカウントを非リタイアカウントとしてメッセージ生成器に出力する。
図7に関して説明された方法では、非リタイアカウンタは、クロックサイクル内でリタイアされ得たにもかかわらず、リタイアされなかった命令の数をカウントすることができる。
図6の例においては、4つの命令がクロックサイクルごとにリタイアされ得る。したがって、非リタイアカウンタは、4つの、3つの、2つの、1つの、または0の命令がリタイアされた場合に、それぞれ、0、1、2、3、4の非リタイアカウントを有することになる。非リタイアカウンタは、この非リタイアカウントをメッセージ生成器に出力する。メッセージ生成器は、非リタイアカウントをトレースメッセージに含め、次いでそれが出力される。
【0055】
メッセージ生成器310、612は、単一の命令カウント/クロックサイクルカウント、および単一のストールカウント、ならびにオプションで単一の非リタイアカウントを含むトレースメッセージを生成し、このトレースメッセージを出力することができる。代替的に、メッセージ生成器310は、いくつかの命令カウント/クロックサイクルカウント、およびストールカウント(ならびにオプションで非リタイアカウント)のグループを、本明細書で説明された方法のいくつかの反復から受信し、これらのカウントのグループを単一のトレースメッセージのペイロードにおいて連結し、次いでそのトレースメッセージを出力することができる。例えば、トレースメッセージは、最大ペイロード長を有することができる。命令カウント/クロックサイクルカウント、およびストールカウント(ならびにオプションで非リタイアカウント)のグループを受信すると、メッセージ生成器は、グループをトレースメッセージのペイロードに追加する。最大ペイロード長を超えない場合、メッセージ生成器は、トレースメッセージを出力しない。代わりに、メッセージ生成器は、さらなるカウントのグループを受信するために待つ。次のカウントのグループを受信すると、メッセージ生成器は、そのグループをトレースメッセージのペイロードに追加する。このプロセスは、最大ペイロード長を超えずに、ペイロード内に収まることになるさらなるカウント・グループがなくなるまで繰り返す。この時点で、メッセージ生成器は、トレースメッセージを出力314、615に出力する。
【0056】
メッセージ生成器310、612は、トレースメッセージにおけるトレース回路カウンタからのカウント値を、圧縮フォーマットで符号化することができる。例えば、それは、ランレングス符号化を使用することができる。例えば、メッセージ生成器は、エリアスガンマコードを使用してカウント値を符号化することができる。エリアスガンマ符号化は、小さな数を符号化するときにとりわけ効率的である。プロセッサが頻繁にストールするシナリオにおいて、小さなカウント値を符号化するトレースメッセージは、本明細書で説明される方法によって高い割合で生成される。コード化効率は、トレースデータの報告に費やされる時間を最小化するのを支援するために、そのようなシナリオにおいてとりわけ重要である。
【0057】
メッセージ生成器は、トレースデータを表現するトークンのグループを生成することができる。例えば、
図4または
図5の方法のケースにおいて、メッセージ生成器は、トークンペアを含むグループを生成することができる。第1のトークンは、エリアスガンマ符号化された命令カウントである。第2のトークンは、エリアスガンマ符号化されたストールカウントである。
図7の方法のケースにおいて、メッセージ生成器は、トークンペアを含むグループを生成することができる。第1のトークンは、エリアスガンマ符号化されたクロックサイクルカウントである。第2のトークンは、エリアスガンマ符号化されたストールカウントである。いずれのケースにおいても、グループは、エリアスガンマ符号化された非リタイアカウントである第3のトークンを追加で含むことができる。
【0058】
図1から
図3、および
図6に例証されたSoCの各コンポーネントは、専用のハードウェアで実装されてよい。代替的に、
図1から
図3、および
図6に例証されたSoCの各コンポーネントは、ソフトウェアで実装されてもよい。いくつかのコンポーネントは、ソフトウェアで実装されてよく、一方他のコンポーネントは、専用のハードウェアで実装される。
【0059】
説明されたSoCは、好適には、コンピューティングベースのデバイス内に組み込まれる。コンピューティングベースのデバイスは、電子デバイスであってよい。好適には、コンピューティングベースのデバイスは、本明細書で説明された方法を実装するために、デバイスの動作を制御するようにコンピュータ実行可能命令を処理するための、1つまたは複数のプロセッサを含む。コンピュータ実行可能命令は、メモリなどの任意のコンピュータ可読媒体を使用して提供されてよい。本明細書で説明された方法は、有形のストレージ媒体上で、機械可読形式でソフトウェアによって実施されてよい。ソフトウェアは、本明細書で説明された方法を実装するために、コンピューティングベースのデバイスにおいて提供されてよい。例えば、トレース回路は、本明細書で説明されたカウント動作を実施するためのカウント論理回路を含むことができる。
【0060】
上述した説明は、システム回路およびトレース回路を、同じSoC上に含まれるものとして説明している。代替的な実装において、システム回路およびトレース回路は、MCMの2つ以上の集積回路チップにわたって含まれる。MCMにおいて、集積回路チップは、一般に、インターポーザ基板上にスタックされる、または近接して設置される。あるシステム回路が、1つの集積回路チップ上に設置され、他のシステム回路が、そのMCMの異なる集積回路チップ上に設置されてもよい。同様に、トレース回路が、MCMの2つ以上の集積回路チップにわたって分散されてもよい。したがって、SoCのコンテキストにおいて上述された方法および装置はまた、MCMのコンテキストにおいても適用される。
【0061】
出願人は、これにより、本明細書で説明された各個々の特徴および2つ以上のそのような特徴の任意の組合せを、そのような特徴または特徴の組合せが本明細書で開示されたいかなる問題を解決するかどうかにかかわらず、かつ特許請求項の範囲を限定することなく、当業者の共通の一般的知識に照らし、全体としての本明細書に基づいて、そのような特徴または組合せが遂行されることが可能である範囲で、単独で開示する。出願人は、本発明の態様が、任意のそのような個々の特徴または特徴の組合せからなり得ることを指し示す。上述した説明を考慮して、さまざまな変更が本発明の範囲内で行われてよいことが当業者には明らかであろう。