(57)【要約】      （修正有）【課題】プロセッサのクロックサイクル中、プロセッサが命令を実行し続ける間に、集積回路チップのプロセッサ上の命令実行をリアルタイムでトレースする方法を提供する。【解決手段】集積回路チップ上のトレース回路は、命令カウントを形成するために、時間内に連続するリタイアされた一連の命令の数をカウントする。次に、ストールカウントを形成するために、リタイアされた命令がない間のプロセッサの後続する連続したクロックサイクルの数をカウントすることによって、プロセッサの命令実行をモニタリングする、命令カウントおよびストールカウントを含むトレースメッセージを作成し出力する。【選択図】図４
2020184329.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサのクロックサイクル中、前記プロセッサが命令を実行し続ける間に、集積回路チップの前記プロセッサ上の命令実行をリアルタイムでトレースする方法であって、
前記集積回路チップ上のトレース回路において、
命令カウントを形成するために、時間内に連続するリタイアされた一連の命令の数をカウントすること、および
ストールカウントを形成するために、リタイアされた命令がない間の前記プロセッサの後続する連続したクロックサイクルの数をカウントすることによって、
前記プロセッサの前記命令実行をモニタリングすることと、
前記命令カウントおよび前記ストールカウントを含むトレースメッセージを生成することと、
前記トレースメッセージを出力することと、
を含む方法。
【請求項２】
前記ストールカウントをしきい値ストールカウントと比較することと、
前記ストールカウントが前記しきい値ストールカウントと同じであるか、または前記しきい値ストールカウントを超える場合にのみ、前記トレースメッセージを生成および出力すること、をさらに含む、請求項１に記載の方法。
【請求項３】
前記ストールカウントが前記しきい値ストールカウントよりも少ない場合に、
ストールカウンタを０カウントにリセットすることと、
連続するリタイアされた一連の命令のさらなる数をカウントすることと、
さらなるストールカウントを形成するために、リタイアされた命令がない間の前記プロセッサの後続する連続したクロックサイクルの数をカウントすることと、
前記さらなるストールカウントを前記しきい値ストールカウントと比較することを含み、
前記さらなるストールカウントが前記しきい値ストールカウントと同じであるか、または前記しきい値ストールカウントを超える場合にのみ、
さらなる命令カウントおよび前記さらなるストールカウントを含むトレースメッセージを生成することであって、前記さらなる命令カウントが、前記命令カウント、前記ストールカウント、および連続するリタイアされた一連の命令の前記さらなる数の和であることと、
前記トレースメッセージを出力することを含む、請求項２に記載の方法。
【請求項４】
インクリメントされた命令カウントを形成するために、前記ストールカウントによって前記命令カウントをインクリメントすることを含み、
連続するリタイアされた一連の命令の前記さらなる数をカウントすることが、前記インクリメントされた命令カウントから開始し、それによって、前記さらなる命令カウントを形成する、請求項３に記載の方法。
【請求項５】
命令カウンタを０カウントにリセットすることを含み、
連続するリタイアされた一連の命令の前記さらなる数をカウントすることが、０から開始し、
前記方法が、
前記さらなる命令カウントを形成するために、前記命令カウント、前記ストールカウント、および連続するリタイアされた一連の命令の前記さらなる数を加算することをさらに含む、請求項３に記載の方法。
【請求項６】
前記さらなるストールカウントが前記しきい値ストールカウントよりも少ない場合に、請求項３に記載の方法を反復して実施することを含み、反復ストールカウントが前記しきい値ストールカウントと同じであるか、または前記しきい値ストールカウントを超えるときにのみ、トレースメッセージを生成および出力することを含む、請求項３、４、または５に記載の方法。
【請求項７】
プロセッサのクロックサイクル中、前記プロセッサが多数の命令を同時に実行し続ける間に、集積回路チップの前記プロセッサ上の命令実行をリアルタイムでトレースする方法であって、前記プロセッサが、クロックサイクルごとに２つ以上の命令をリタイアすることが可能であり、前記方法が、
前記集積回路チップ上のトレース回路において、
クロックサイクルカウントを形成するために、各クロックサイクルにおいてリタイアされた命令の数をカウントすること、および
ストールカウントを形成するために、リタイアされた命令がない間の前記プロセッサの連続したクロックサイクルの数をカウントすることによって、
前記プロセッサの前記命令実行をモニタリングすることと、
前記クロックサイクルカウントおよび前記ストールカウントを含むトレースメッセージを生成することと、
前記トレースメッセージを出力すること、を含む方法。
【請求項８】
非リタイアカウントを形成するために、リタイアされていない命令実行の数をカウントすることをさらに含む、請求項７に記載の方法。
【請求項９】
前記トレースメッセージが前記非リタイアカウントをさらに含む、請求項８に記載の方法。
【請求項１０】
ランレングス符号化を使用して、前記トレースメッセージにおけるカウントを符号化することをさらに含む、請求項９に記載の方法。
【請求項１１】
エリアスガンマコードを使用して、前記トレースメッセージにおける前記カウントを符号化するステップを含む請求項１０に記載の方法。
【請求項１２】
プロセッサのクロックサイクル中、命令を実行するように構成された前記プロセッサと、
前記プロセッサの命令実行をリアルタイムでトレースするように構成されたトレース回路と、を含む集積回路チップであって、前記トレース回路が、
命令カウントを形成するために、時間内に連続するリタイアされた一連の命令の数をカウントするように構成された命令カウンタと、
ストールカウントを形成するために、リタイアされた命令がない間の前記プロセッサの後続する連続したクロックサイクルの数をカウントするように構成されたストールカウンタと、
前記命令カウントおよび前記ストールカウントを含むトレースメッセージを生成するように構成されたメッセージ生成器と、
前記トレースメッセージを出力するように構成された出力と、を含む、集積回路チップ。
【請求項１３】
前記ストールカウントをしきい値ストールカウントと比較するように構成された比較器をさらに含む、請求項１２に記載の集積回路チップ。
【請求項１４】
プロセッサのクロックサイクルごとに２つ以上の命令をリタイアするように構成された前記プロセッサと、
前記プロセッサの命令実行をリアルタイムでトレースするように構成されたトレース回路と、を含む集積回路チップであって、前記トレース回路が、
クロックサイクルカウントを形成するために、各クロックサイクルにおいてリタイアされた命令の数をカウントするように構成されたクロックサイクルカウンタと、
ストールカウントを形成するために、リタイアされた命令がない間の前記プロセッサの連続したクロックサイクルの数をカウントするように構成されたストールカウンタと、
前記クロックサイクルカウントおよび前記ストールカウントを含むトレースメッセージを生成するように構成されたメッセージ生成器と、
前記トレースメッセージを出力するように構成された出力と、を含む、集積回路チップ。
【請求項１５】
非リタイアカウントを形成するために、リタイアされていない命令実行の数をカウントするように構成されたさらなるカウンタをさらに含む、請求項１２から１４のいずれかに記載の集積回路チップ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、集積回路チップ上で、ＣＰＵ（中央処理ユニット）などのプロセッサ上の命令実行をトレースすることに関する。
【背景技術】
【０００２】
過去において、多数のコアデバイス（プロセッサ、メモリ、その他）を有した埋め込みシステムは、プリント回路基板（ＰＣＢ）上に組み込まれ、バスを介してＰＣＢ上で接続されていた。埋め込みシステムにおけるトラフィックは、これらのバスを通して搬送された。この配置は、オシロスコープおよび論理解析器などのモニタリングツールが、コアデバイスへの直接アクセスを許可するＰＣＢのバスに取り付けられることを可能にしたので、コアデバイスをモニタリングするために好都合であった。
【０００３】
半導体技術における進歩と相まって、より小さな製品に対する市場の需要が、システム・オンチップ（ＳｏＣ）デバイスの開発を導いてきた。ＳｏＣにおいて、埋め込みシステムの多数のコアデバイスは、単一のチップ上に統合される。ＳｏＣにおいて、埋め込みシステムにおけるトラフィックは、内部バスを通して搬送され、したがって、モニタリングツールの直接的なシステムバスへの接続は、もはや可能ではない。（多数の処理コアの統合、およびより高い内部クロッキング周波数を導くＳｏＣ技術の開発により）チップまわりで移送されるデータの増加量と相まって、結果として削減されたアクセスは、産業界によって要求される時間尺度内で、セキュリティ侵害、バグ、および安全性懸念についてシステムをモニタリングするための、外部モニタリングツールの能力を削減してきた。加えて、多数のコアデバイスが同じ単一のチップ上に埋め込まれるとき、各個々のコアデバイスの挙動は、他のコアデバイスとのその対話、ならびにトリガおよびアラートなどのリアルタイム・イベントにより、単独でのその挙動とは異なっている。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
したがって、ＳｏＣデバイスの開発は、モニタリング技術における関連開発を必要としたが、それは、ＳｏＣ上でのなんらかのモニタリング機能の統合に至る。今では、オンチップのモニタリング回路が、ＣＰＵなどのコアデバイス上で稼働するプログラムの実行をトレースすることが知られている。トレースデータは、一般に、オフチップの解析用に出力される。しかしながら、そのトレースデータが提供するのは、コアプロセッサのプログラム実行に関する限定された一時的な詳細である。より詳細なトレースデータが望ましい。
【課題を解決するための手段】
【０００５】
第１の態様によれば、プロセッサのクロックサイクル中、プロセッサが命令を実行し続ける間に、集積回路チップのプロセッサ上の命令実行をリアルタイムでトレースする方法が提供され、方法は、集積回路チップ上のトレース回路において、命令カウントを形成するために、時間内に連続するリタイアされた一連の命令の数をカウントすること、およびストールカウントを形成するために、リタイアされた命令がない間のプロセッサの後続する連続したクロックサイクルの数をカウントすることによって、プロセッサの命令実行をモニタリングすることと、命令カウントおよびストールカウントを含むトレースメッセージを生成することと、トレースメッセージを出力すること、を含む。
【０００６】
方法は、ストールカウントをしきい値ストールカウントと比較するステップと、ストールカウントがしきい値ストールカウントと同じであるか、またはしきい値ストールカウントを超える場合にのみ、トレースメッセージを生成するステップおよび出力するステップとをさらに含んでいてもよい。
【０００７】
方法は、ストールカウントがしきい値ストールカウントよりも少ない場合に、ストールカウンタを０カウントにリセットすることと、連続するリタイアされた一連の命令のさらなる数をカウントすることと、さらなるストールカウントを形成するために、リタイアされた命令がない間のプロセッサの後続する連続したクロックサイクルの数をカウントすることと、さらなるストールカウントをしきい値ストールカウントと比較することと、さらなるストールカウントがしきい値ストールカウントと同じであるか、またはしきい値ストールカウントを超える場合にのみ、さらなる命令カウントおよびさらなるストールカウントを含むトレースメッセージを生成することであって、さらなる命令カウントが、命令カウント、ストールカウント、および連続するリタイアされた一連の命令のさらなる数の和である、生成することと、トレースメッセージを出力すること、を含んでいてもよい。
【０００８】
方法は、インクリメントされた命令カウントを形成するために、ストールカウントによって命令カウントをインクリメントするステップを含んでいてもよく、連続するリタイアされた一連の命令のさらなる数をカウントするステップは、インクリメントされた命令カウントから開始し、それによって、さらなる命令カウントを形成する。
【０００９】
方法は、命令カウンタを０カウントにリセットすることを含んでいてもよく、連続するリタイアされた一連の命令のさらなる数をカウントすることは、０から開始し、方法は、さらなる命令カウントを形成するために、命令カウント、ストールカウント、および連続するリタイアされた一連の命令のさらなる数を加算することをさらに含む。
【００１０】
方法は、さらなるストールカウントがしきい値ストールカウントよりも少ない場合に、上述された方法を反復して実施することを含んでいてもよく、反復ストールカウントがしきい値ストールカウントと同じであるか、またはしきい値ストールカウントを超えるときにのみ、トレースメッセージを生成および出力することを含んでいてもよい。
【００１１】
第２の態様によれば、プロセッサのクロックサイクル中、プロセッサが多数の命令を同時に実行し続ける間に、集積回路チップのプロセッサ上の命令実行をリアルタイムでトレースする方法が提供され、プロセッサは、クロックサイクルごとに２つ以上の命令をリタイアすることが可能であり、方法は、集積回路チップ上のトレース回路において、クロックサイクルカウントを形成するために、各クロックサイクルにおいてリタイアされた命令の数をカウントすること、およびストールカウントを形成するために、リタイアされた命令がない間のプロセッサの連続したクロックサイクルの数をカウントすることによって、プロセッサの命令実行をモニタリングすることと、クロックサイクルカウントおよびストールカウントを含むトレースメッセージを生成することと、トレースメッセージを出力すること、を含む。
【００１２】
方法は、非リタイアカウントを形成するために、リタイアされていない命令実行の数をカウントすることをさらに含んでいてもよい。
【００１３】
トレースメッセージは、非リタイアカウントをさらに含んでいてもよい。
【００１４】
方法は、ランレングス符号化を使用して、トレースメッセージにおけるカウントを符号化することをさらに含んでいてもよい。
【００１５】
方法は、エリアスガンマコードを使用して、トレースメッセージにおけるカウントを符号化することを含んでいてもよい。
【００１６】
第３の態様によれば、プロセッサのクロックサイクル中、命令を実行するように構成されたプロセッサと、プロセッサの命令実行をリアルタイムでトレースするように構成されたトレース回路とを含む集積回路チップが提供され、トレース回路は、命令カウントを形成するために、時間内に連続するリタイアされた一連の命令の数をカウントするように構成された命令カウンタと、ストールカウントを形成するために、リタイアされた命令がない間のプロセッサの後続する連続したクロックサイクルの数をカウントするように構成されたストールカウンタと、命令カウントおよびストールカウントを含むトレースメッセージを生成するように構成されたメッセージ生成器と、トレースメッセージを出力するように構成された出力とを含む。
【００１７】
集積回路チップは、ストールカウントをしきい値ストールカウントと比較するように構成された比較器をさらに含んでいてもよい。
【００１８】
第４の態様によれば、プロセッサのクロックサイクルごとに２つ以上の命令をリタイアするように構成されたプロセッサと、プロセッサの命令実行をリアルタイムでトレースするように構成されたトレース回路とを含む集積回路チップが提供され、トレース回路は、クロックサイクルカウントを形成するために、各クロックサイクルにおいてリタイアされた命令の数をカウントするように構成されたクロックサイクルカウンタと、ストールカウントを形成するために、リタイアされた命令がない間のプロセッサの連続したクロックサイクルの数をカウントするように構成されたストールカウンタと、クロックサイクルカウントおよびストールカウントを含むトレースメッセージを生成するように構成されたメッセージ生成器と、トレースメッセージを出力するように構成された出力とを含む。
【００１９】
集積回路チップは、非リタイアカウントを形成するために、リタイアされていない命令実行の数をカウントするように構成されたさらなるカウンタをさらに含んでいてもよい。
【００２０】
本発明は、これより添付の図面を参照して、例として説明されることになる。
【図面の簡単な説明】
【００２１】
【図１】集積回路チップデバイス上の例示的なモニタリングアーキテクチャの概略図である。
【図２】集積回路チップデバイス上の例示的なモニタリングアーキテクチャの概略図である。
【図３】プロセッサをトレースするための例示的なモニタリングアーキテクチャの概略図である。
【図４】プロセッサの命令実行をトレースする方法を例証する図である。
【図５】プロセッサの命令実行をトレースするさらなる方法を例証する図である。
【図６】スーパースカラプロセッサをトレースするための例示的なモニタリングアーキテクチャの概略図である。
【図７】スーパースカラプロセッサの命令実行をトレースする方法を例証する図である。
【発明を実施するための形態】
【００２２】
以下の開示は、集積回路チップ上の実装に好適なモニタリングアーキテクチャを説明する。集積回路チップは、ＳｏＣ、またはマルチ・チップ・モジュール（ＭＣＭ）であってよい。
【００２３】
図１から図３および図６は、例示的なモニタリングアーキテクチャ、およびモニタリングアーキテクチャ内のコンポーネントの概略図である。これらの図は、機能ブロックの観点から構造を提示している。当技術分野においてよく知られた機能を遂行するためのいくつかの機能ブロックは、これらの図から所々で省略されている。図４、図５、および図７は、プロセッサをトレースする方法を例証するフローチャートである。各フローチャートは、そのフローチャートの方法が実施され得る順番を表す。しかしながら、フローチャートは、説明される方法が、表された順番で実装されることを制限するように意図されていない。方法のステップは、フローチャートに表された順番に対する代替の順番で遂行されてもよい。
【００２４】
図１は、ＳｏＣ１００のための例示的なモニタリングアーキテクチャの全体構造を例証する。モニタリング回路１０１は、システム回路１０２をモニタリングするように配置される。図２は、コアデバイスおよび通信インターフェースを含む例示的なシステム回路を例証する。ＳｏＣのコアデバイス２０１、２０２、および２０３は各々、モニタリング回路１０１に接続されている。図２は、３つのコアデバイスを例証しているが、任意の数のコアデバイスがモニタリングアーキテクチャの中に好適に統合されてよい。例示的なコアデバイスは、ＤＳＰ（デジタル信号プロセッサ）、ビデオプロセッサ、アプリケーションプロセッサ、ＣＰＵ、グラフィックスプロセッサ、システムメモリ、バス、システム相互接続、ＲＴＯＳ（リアルタイム・オペレーティング・システム）、ソフトウェア、データ、カスタム回路、およびデータエンジンを含む。しかしながら、ＳｏＣの任意のコンポーネントが、図２のコアデバイスとしてモニタリングアーキテクチャの中に組み込まれるために好適である。コアデバイスは、チップ上の他のデバイスのエミュレータまたはシミュレータであってもよい。例えば、コアデバイスは、プロセッサをエミュレートすることができる。
【００２５】
モニタリング回路は、コアデバイスの動作をモニタリングすることができ、オプションでまた、コアデバイスの動作を操作することができる。モニタリング回路は、通信インターフェース２０４に接続されている。通信インターフェース２０４は、オフチップのエンティティと通信するように構成されてよい。例えば、モニタリング回路１０１は、通信インターフェース２０４を介して、オフチップの解析器と通信することができる。通信インターフェース２０４はまた、オンチップの他のエンティティと通信するように構成されてもよい。例えば、モニタリング回路１０１は、通信インターフェース２０４を介して、オンチップの解析器と通信することができる。図２は１つの通信インターフェースを例証しているが、任意の数の通信インターフェースがＳｏＣ上に統合されてよい。実装される通信インターフェースは、行われることになる接続のタイプに依存して選択される。例示的な通信インターフェースは、ＪＴＡＧ、パラレル・トレース入力／出力、およびＡｕｒｏｒａベースの高速シリアル・インターフェース、ならびに、ＵＳＢ、イーサネット、ＲＳ２３２、ＰＣＩｅ、およびＣＡＮなどのシステム・インターフェースの再使用を含む。モニタリング回路１０１内に、各コアデバイスに関連付けられた別個のモニタリング回路が存在してもよい。代替的に、または加えて、あるモニタリング回路が２つ以上のコアデバイスに関連付けられていてもよい。
【００２６】
以下の説明は、図２のコアデバイスがプロセッサであり、そのプロセッサがモニタリング回路１０１のトレース回路によってモニタされている例に焦点を当てる。プロセッサは、例えば、ＣＰＵ、ＧＰＵ、またはＤＳＰであってよい。
【００２７】
図３に例証されたアーキテクチャを参照すると、プロセッサ３０１は、命令としても既知のプログラムを実行する処理論理回路３０２を含む。これらの実行可能な命令は、メモリ３０３に記憶されている。プロセッサは、クロッキング率でクロック制御されている。したがって、プロセッサ３０１は、プロセッサのクロックサイクル中に命令を実行する。クロッキング率は、プロセッサの内部にあるクロック３０４によって設定されたクロッキング率であってよい。プロセッサは、単一のクロックサイクルを費やして、命令の実行を完了してもよい。プロセッサは、いくつかのクロックサイクルを費やして、命令の実行を完了してもよい。パイプライン処理を使用して、プロセッサは、同じ時間にいくつかの命令の実行途中であってもよい。しかしながら、プロセッサは、各クロックサイクルにおいて、最大１つの命令の実行を開始する。プロセッサは、各クロックサイクルにおいて、最大１つの命令をリタイアする。本明細書で使用されるとき、用語「リタイアされる」は、命令と併せて使用されて、プロセッサがその命令の実行を完了したことを意味する。
【００２８】
トレース回路３０５は、プロセッサ３０１の命令実行をトレースする。これは、邪魔にならずに行われる。トレース回路３０５は、プロセッサの動作を中断せずに、プロセッサ３０１をモニタリングする。言い換えれば、トレース回路は、プロセッサが命令のその実行を一時停止する、または変更することを必要とせずに、プロセッサをトレースする。プロセッサは、通常通り稼働し続けることができる。したがって、プロセッサは、命令を実行し続け、チップ上の、および／またはチップ外の他の回路に出力し続けることができる。トレース回路は、プロセッサ３０１をトレースし、トレースデータをリアルタイムで出力する。
【００２９】
トレース回路３０５は、命令カウンタ３０７を含む。命令カウンタ３０７は、プロセッサ３０１からプロセッサ出力を受信する。命令カウンタ３０７はまた、クロック３０９からクロック入力３０８を受信することができる。クロック３０９は、トレース回路３０５の内部にある。クロック３０９は、プロセッサクロック３０４からそのクロック信号を受信することができる。命令カウンタ３０７は、命令カウントを形成するために、時間内に連続するリタイアされた一連の命令の数をカウントする。命令カウンタは、プロセッサが命令をリタイアしていない時間の合間を識別するとき、カウントを停止することによって応答する。命令カウンタは次いで、その命令カウントをメッセージ生成器３１０に出力してもよい。
【００３０】
トレース回路３０５はまた、ストールカウンタ３１１を含む。ストールカウンタ３１１は、プロセッサ３０１からプロセッサ出力を受信する。ストールカウンタ３１１はまた、クロック３０９からクロック入力３１２を受信する。ストールカウンタ３１１はまた、命令カウンタ３０７から出力３１３を受信する。この出力は、命令カウンタがいつカウントを停止したかを識別する。ストールカウンタは、ストールカウントを形成するために、リタイアされた命令がない間のプロセッサの連続したクロックサイクルの数をカウントする。ストールカウンタは、命令カウンタによってカウントされた、時間内に連続した一連の連続してリタイアされた命令の終了の直後に、このカウントを開始する。ストールカウンタは、命令カウンタがカウントを停止していることを識別する信号３１３を命令カウンタから受信すると、カウントを開始する。ストールカウンタは、命令がリタイアされたことを識別するとき、カウントを停止することによって応答する。ストールカウンタ３１１は、プロセッサ３０１と同じクロッキング率で、クロック３０９によってクロック制御されている。これは、クロック３０９がプロセッサのクロック信号３０４を受信しているおかげであってよい。したがって、ストールカウンタ３１１によってカウントされるクロックサイクルの数は、プロセッサがその間にストールしたプロセッサのクロックサイクルの数と同じである。ストールカウンタ３１１は、そのストールカウントをメッセージ生成器３１０に出力する。
【００３１】
メッセージ生成器３１０は、命令カウントおよびストールカウントを含むトレースメッセージを生成する。出力３１４は、トレース回路３０５からのトレースメッセージを出力する。トレースメッセージは次いで、通信インターフェース３０６に出力されてよい。通信インターフェース３０６は次いで、図２の通信インターフェース２０４を参照して上述されたように、トレースメッセージをオフチップで出力する、および／またはトレースメッセージをオンチップでルーティングしてもよい。
【００３２】
したがって、図４を参照すると、図３のトレース回路３０５は、プロセッサ３０１による命令実行を以下のようにモニタリングする。ステップ４０１で、命令カウンタ３０７は、命令カウントを形成するために、時間内に連続するリタイアされた一連の命令の数をカウントする。この直後、ステップ４０２で、ストールカウンタは、ストールカウントを形成するために、リタイアされた命令がない間のプロセッサの後続する連続したクロックサイクルの数をカウントする。ステップ４０３で、メッセージ生成器は、命令カウントおよびストールカウントを含むトレースメッセージを生成する。ステップ４０４で、出力３１４は、トレースメッセージを出力する。
【００３３】
命令カウンタは、プロセッサ３０１からプロセッサ出力を受信し続ける。その命令カウントをメッセージ生成器３１０に出力した後に、命令カウンタは、そのカウントを０にリセットする。命令カウンタ３０７は次いで、プロセッサ３０１から次のリタイアされた命令を受信するとき、再びカウントを開始し、図４の方法は繰り返す。ストールカウンタもまた、プロセッサ３０１からプロセッサ出力を受信し続ける。そのストールカウントをメッセージ生成器３１０に出力した後に、ストールカウンタは、そのカウントを０にリセットする。ストールカウンタ３１１は次いで、命令カウンタがカウントを停止していることを識別する次の信号３１３を命令カウンタから受信すると、再びカウントを開始する。
【００３４】
したがって、図３の装置および図４の方法は、オンチップのモニタリング回路が、プロセッサの命令実行をトレースすることを可能にし、プロセッサがいくつの一連の命令をリタイアし、命令実行を再開する前にプロセッサがどのくらいの長さストールするかを識別するタイミングデータを出力することを可能にする。プロセッサは、例えば、キャッシュが見逃される、命令に予期されていない分岐が存在する、命令が見逃される、または命令が未完了であるために、ストールすることがある。タイミングデータは次いで、他のモニタリングデータと共に解析される。これは、プログラム実行の流れを再構築するために行われてよい。それは、命令セットに対して行われ得る変更、および／またはプロセッサの動作を最適化するためのプロセッサの動作を識別し、命令実行をより効率的にするために行われてよい。他のモニタリングデータは、当業者に知られている任意のモニタリングデータであってよい。例えば、それは、プロセッサの実際の出力、レジスタアクセスの詳細、その他であってよい。
【００３５】
図３はまた、トレース回路の内部のさらなるオプションのコンポーネントを例証し、トレース回路は、図の上でそれらのコンポーネントの破線の略図によって識別される。この回路は、比較器３１５を含む。比較器３１５は、ストールカウンタ３１１から、第１の入力としてストールカウントを受信する。比較器３１５は、ストア３１６から、第２の入力としてしきい値ストールカウントを受信する。比較器は、ストールカウントをしきい値ストールカウントと比較する。比較器は、コントローラ３１７に出力する。コントローラ３１７は、命令カウンタ３０７への制御出力３１８を有する。コントローラ３１７はまた、ストールカウンタ３１１への制御出力３１９を有する。
【００３６】
これらの追加のコンポーネントの動作が、これより図５を参照して説明されることになる。ステップ５０１で、命令カウンタ３０７は、命令カウントを形成するために、時間内に連続するリタイアされた一連の命令の数をカウントする。この直後、ステップ５０２で、ストールカウンタが、ストールカウントを形成するために、リタイアされた命令がない間のプロセッサの後続する連続したクロックサイクルの数をカウントする。比較器３１５は、ストールカウンタからストールカウントを受信し、ストア３１６からしきい値ストールカウントもまた受信する。比較器は、ストールカウントをしきい値ストールカウントと比較し、結果をコントローラ３１７に出力する。
【００３７】
ステップ５０３で、ストールカウントがしきい値ストールカウントと同じであるか、またはしきい値ストールカウントを超える場合にのみ、コントローラ３１７は次いで、命令カウンタ３０７を、その命令カウントを出力するように制御し、コントローラ３１７は、ストールカウンタ３１１を、そのストールカウントを出力するように制御する。メッセージ生成器は、命令カウントとストールカウントの両方を受信し、ステップ５０６で、トレースメッセージを生成するように進む。ステップ５０７で、トレースメッセージが次いで出力される。ステップ５０３で、ストールカウントがしきい値ストールカウントよりも少ない場合、ステップ５０４で、コントローラ３１７は、ストールカウントを破棄するようにストールカウンタを制御する。言い換えれば、コントローラ３１７は、ストールカウンタを、そのストールカウントを０にリセットするように制御する。ステップ５０５で、コントローラは、インクリメントされた命令カウントを形成するために、命令カウンタを、ストールカウントによってその命令カウントをインクリメントするように制御する。
【００３８】
命令カウントおよびストールカウントは、命令カウンタおよびストールカウンタからメッセージ生成器に出力されない。したがって、命令カウントおよびストールカウントを収容するメッセージは生成されず、出力されない。代わりに、方法はステップ５０１に戻り、図５のフローチャートのさらなる反復を続ける。今回は、インクリメントされた命令カウントのカウントから開始して、命令カウンタは、さらなる命令カウントを形成するために、連続するリタイアされた一連の命令の数をカウントする。この直後、ステップ５０２で、０カウントから開始して、ストールカウンタは、さらなるストールカウントを形成するために、リタイアされた命令がない間のプロセッサの後続する連続したクロックサイクルの数をカウントする。ストールカウンタは、このさらなるストールカウントを比較器に出力する。比較器は次いで、さらなるストールカウントをしきい値ストールカウントと比較し、結果をコントローラ３１７に出力する。さらなるストールカウントがしきい値ストールカウントと同じであるか、またはしきい値ストールカウントを超える場合にのみ、コントローラ３１７は、命令カウンタ３０７を、そのさらなる命令カウントを出力するように制御し、ストールカウンタ３１１を、そのさらなるストールカウントを出力するように制御する。メッセージ生成器は、さらなる命令カウントおよびさらなるストールカウントの両方を受信し、ステップ５０６で、トレースメッセージを生成するように進む。ステップ５０７で、トレースメッセージが出力される。
【００３９】
しかしながら、さらなるストールカウントがしきい値ストールカウントよりも少ない場合、ステップ５０４で、コントローラは、ストールカウントを０にリセットするようにストールカウンタを制御し、ステップ５０５で、コントローラは、ストールカウントによって命令カウントをインクリメントするように命令カウンタを制御する。さらなる命令カウントおよびさらなるストールカウントを収容するトレースメッセージは生成されない。次いで図５のプロセスは再び繰り返す。
【００４０】
図５のプロセスは、反復ストールカウントがしきい値ストールカウントと同じであるか、またはしきい値ストールカウントを超えるまで、反復して繰り返す。一旦これが発生すると、コントローラは、関連付けられた反復命令カウントを出力するように命令カウンタを制御し、コントローラは、反復ストールカウントを出力するようにストールカウンタを制御する。メッセージ生成器は、これらのカウントを受信し、反復命令カウントおよび反復ストールカウントを収容するトレースメッセージを生成する。ステップ５０７で、このトレースメッセージが出力される。
【００４１】
命令カウンタは、プロセッサ３０１からプロセッサ出力を受信し続ける。その反復命令カウントをメッセージ生成器３１０に出力した後に、命令カウンタは、そのカウントを０にリセットする。命令カウンタ３０７は次いで、プロセッサ３０１から次のリタイアされた命令を受信するとき、再びカウントを開始し、図５の方法は繰り返す。ストールカウンタもまた、プロセッサ３０１からプロセッサ出力を受信し続ける。その反復ストールカウントをメッセージ生成器３１０に出力した後に、ストールカウンタは、そのカウントを０にリセットする。ストールカウンタ３１１は次いで、命令カウンタがカウントを停止していることを識別する次の信号３１３を命令カウンタから受信すると、再びカウントを開始する。
【００４２】
上述された方法において、ストールカウントがストールカウントしきい値よりも少ないと判定された場合、ストールカウンタは、０にリセットされ、命令カウンタは、ストールカウントによってインクリメントされる。代替的な実装において、ステップ５０３の後に、ストールカウントがストールカウントしきい値よりも少ない場合、コントローラ３１７は、命令カウントおよびストールカウントを一緒に加算するように加算器（図３には示されず）を制御する。ストールカウンタおよび命令カウンタの両方は次いで、０にリセットされる。方法は次いで、０カウントから開始して命令カウンタが連続するリタイアされた一連の命令の数をカウントする、ステップ５０１に戻る。ステップ５０２で、０カウントから開始して、ストールカウンタは、リタイアされた命令がない間のプロセッサの後続する連続したクロックサイクルの数をカウントする。ステップ５０３で、次のストールカウントがストールカウントしきい値よりも少ない場合、コントローラ３１７は、方法の現在の反復の命令カウントおよびストールカウントを以前の反復からの結果に加算するように加算器を制御する。コントローラは次いで、命令カウンタおよびストールカウンタのカウントを０にリセットし、方法は繰り返す。ステップ５０２からの反復ストールカウントがしきい値ストールカウントと同じであるか、またはしきい値ストールカウントを超えるとき、コントローラ３１７は、その現在の結果をメッセージ生成器に出力するように加算器を制御する。メッセージ生成器は、加算器の現在の結果を反復命令カウントとして収容するトレースメッセージを生成する。トレースメッセージはまた、反復ストールカウントも収容する。
【００４３】
代替的な実装において、ステップ５０１で、命令カウンタ３０７は、一連のリタイアされた命令の数、および連続したストールされたクロックサイクルの数をカウントする。言い換えれば、命令カウンタ３０７は、リタイアされた命令ごとに１だけインクリメントし、命令カウンタ３０７は、ストールされたクロックサイクルごとに１だけインクリメントする。ステップ５０２で、連続するリタイアされた一連の命令の数の後に、ストールカウンタ３１１は、ストールカウントを形成するために、リタイアされた命令がない間のプロセッサの後続する連続したクロックサイクルの数をカウントする。比較器３１５は、ストールカウントをしきい値ストールカウントと比較する。ストールカウントがしきい値ストールカウントよりも少ない場合、コントローラ３１７は、ストールカウンタを０にリセットする。コントローラ３１７は、命令カウンタ３０７に関してはなんの措置も取らない。命令カウンタは、ステップ５０１で、一連のリタイアされた命令の数、および連続したストールされたクロックサイクルの数をカウントし続ける。連続するリタイアされた一連の命令の数の後に、０カウントから開始して、ステップ５０２で、ストールカウンタ３１１は、反復ストールカウントを形成するために、リタイアされた命令がない間のプロセッサの後続する連続したクロックサイクルの数をカウントする。ステップ５０３で、次のストールカウントがストールカウントしきい値よりも少ない場合、コントローラ３１７は、ストールカウンタを０にリセットし、命令カウンタに関してはなんの措置も取らない。方法は繰り返す。ステップ５０２からの反復ストールカウントがしきい値ストールカウントと同じであるか、またはしきい値ストールカウントを超えるとき、コントローラ３１７は、反復ストールカウントをメッセージ生成器に出力するようにストールカウンタを制御する。コントローラ３１７はまた、命令カウンタを、その命令カウントを減算器（図３には示されず）に出力するように制御し、減算器は、反復命令カウントを形成するために、反復ストールカウントを命令カウントから差し引く。減算器は、反復命令カウントをメッセージ生成器に出力する。メッセージ出力器は、反復命令カウントおよび反復ストールカウントを収容するトレースメッセージを生成する。
【００４４】
しきい値ストールカウントは、製造時、ストア３１６に記憶されていてよい。代替的に、しきい値ストールカウントは、構成可能であってもよい。例えば、しきい値ストールカウントは、トレースメッセージを解析するエンティティによって、動的に再構成されてもよい。
【００４５】
図５に関して説明される方法は、プロセッサがしきい値ストールカウントよりも小さいサイクルの数の間にストールするとき、トレースメッセージを出力しない。代わりに、ストールは、リタイアされた命令として扱われ、トレース回路は、リタイアされた命令をカウントし続ける。これは、しきい値を利用しない図４の方法と比較して、生成され、出力されるトレースメッセージの数を削減し、したがって、より効率的なトレース方法である。好適には、しきい値ストールカウントは、エンティティが取得しようと試みるプロセッサ措置に従って、そのエンティティがトレースメッセージを解析することによって、またはそのエンティティがトレースメッセージを解析する代わりに、動的に構成される。
【００４６】
図３および付随する説明は、クロックサイクルごとに最大１つの命令の実行を開始すること、およびクロックサイクルごとに最大１つの命令をリタイアすることが可能なプロセッサを説明している。しかしながら、本明細書で説明される概念はまた、クロックサイクルごとに２つ以上の命令をリタイアすることが可能なプロセッサにも適用可能である。図６は、そのようなプロセッサ６０１の簡略版を例証する。プロセッサ６０１は、処理論理回路１  ６０２と、処理論理回路２  ６０３と、処理論理回路３  ６０４と、処理論理回路４  ６０５とを含む。これらの処理論理回路コンポーネントの各々は、プロセッサのクロックサイクル中、メモリ６０６に記憶された命令を実行する。各処理論理回路は、その実行された命令をバッファ６１７に出力する。各処理論理回路は、処理論理回路のうちの別の１つが別の命令の実行を開始する同じクロックサイクルにおいて、命令の実行を開始することができる。各処理論理回路は、処理論理回路のうちの別の１つが命令をリタイアする同じクロックサイクルにおいて、命令をリタイアすることができる。バッファ６１７は、リタイアされた命令を、それらが実行を開始した同じ順番で、プロセッサ６０１からリタイアされるように並べる。例えば、バッファ６１７は、４つのレーン０、１、２、および３を有することができる。バッファ６１７は、レーン０、１、２、および３上のリタイアされた命令が、それぞれ処理論理回路に入力された命令と同じ順番であるように、処理論理回路１、２、３、４からのリタイアされた実行を並べ替える。クロッキング率は、プロセッサ内部のクロック６０７によって設定されたクロッキング率であってよい。４つの処理論理回路コンポーネントが示されているが、同じ時間に命令実行を開始し、命令を実行し、命令をリタイアすることが可能な、２つの、３つの、または４つよりも多い処理論理回路コンポーネントがプロセッサ６０１に存在してもよい。バッファ６１７は、処理論理回路の数と同じ数のレーンを有する。
【００４７】
図３と同様に、トレース回路６０８は、プロセッサ６０１の命令実行をトレースする。トレース回路６０８は、邪魔にならずに、すなわち、プロセッサの動作を中断せずに、プロセッサ６０１をモニタリングする。
【００４８】
トレース回路６０８は、クロックサイクルカウンタ６０９を含む。クロックサイクルカウンタ６０９は、プロセッサ６０１からプロセッサ出力を受信する。クロックサイクルカウンタ６０９はまた、クロック６１１からクロック入力６１０を受信する。クロック６１１は、トレース回路６０８の内部にある。クロック６１１は、プロセッサクロック６０７からそのクロック信号を受信することができる。クロックサイクルカウンタは、クロックサイクルカウントを形成するために、プロセッサの各クロックサイクルにおいてリタイアされた命令の数をカウントする。プロセッサの各クロックサイクルにおいてリタイアされた命令の最大数は、プロセッサが同じクロックサイクルにおいてリタイアすることが可能な命令の数である。図６の例において、プロセッサ６０１は、同じクロックサイクルにおいて４つの命令をリタイアすることが可能であり、したがって、クロックサイクルカウントは、０、１、２、３、または４のいずれかである。クロックサイクルカウンタ６０９は、プロセッサ６０１と同じクロッキング率で、クロック６１１によってクロック制御されている。これは、クロック６１１がプロセッサのクロック信号６０７を受信しているおかげであってよい。したがって、クロックサイクルカウンタが各クロックサイクルにおいてリタイアされているとしてカウントする命令の数は、プロセッサがプロセッサのクロックサイクルの各々においてリタイアする命令の数である。クロックサイクルカウンタは、そのクロックサイクルカウントをメッセージ生成器６１２に出力する。
【００４９】
トレース回路６０８はまた、ストールカウンタ６１３を含む。ストールカウンタは、プロセッサ６０１からプロセッサ出力を受信する。ストールカウンタはまた、クロック６１１からクロック入力６１４を受信する。ストールカウンタは、ストールカウントを形成するために、リタイアされた命令がない間のプロセッサの連続したクロックサイクルの数をカウントする。ストールカウンタは、リタイアされた命令がない間のクロックサイクルがいつ存在するかを識別し、そのカウントを０から開始する。ストールカウンタは、命令がリタイアされたサイクルを識別するとき、カウントを停止する。ストールカウンタ６１３は、プロセッサ６０１と同じクロッキング率で、クロック６１１によってクロック制御されている。これは、クロック６１１がプロセッサのクロック信号６０７を受信しているおかげであってよい。したがって、ストールカウンタ６１３によってカウントされるクロックサイクルの数は、プロセッサがその間にストールしたプロセッサのクロックサイクルの数と同じである。ストールカウンタ６１３は、そのストールカウントをメッセージ生成器６１２に出力する。
【００５０】
メッセージ生成器６１２は、クロックサイクルカウントおよびストールカウントを含むトレースメッセージを生成する。出力６１５は、トレース回路６０８からのトレースメッセージを出力する。トレースメッセージは次いで、通信インターフェース６１６に出力されてよい。通信インターフェース６１６は次いで、図２の通信インターフェース２０４を参照して上述されたように、トレースメッセージをオフチップで出力する、および／またはトレースメッセージをオンチップでルーティングすることができる。
【００５１】
したがって、図７を参照すると、図６のトレース回路６０８は、以下のようにプロセッサ６０１による命令実行をモニタリングする。ステップ７０１で、クロックサイクルカウンタ６０９は、クロックサイクルカウントを形成するために、プロセッサのクロックサイクルにおいてリタイアされた命令の数をカウントする。この直後、ステップ７０２で、ストールカウンタが、ストールカウントを形成するために、リタイアされた命令がない間のプロセッサの連続したクロックサイクルの数をカウントする。クロックサイクルカウントを形成するためにクロックサイクルカウンタが解析したクロックサイクルの直後に、プロセッサがクロックサイクルにおいて１つまたは複数の命令をリタイアした場合、ストールカウンタは、ストールがなかったことを識別するストールカウントを出力する。例えば、このストールカウント値は、０であってよい。別の例として、このストールカウント値は、１であってもよい。ステップ７０３で、メッセージ生成器は、クロックサイクルカウントおよびストールカウントを含むトレースメッセージを生成する。ステップ７０４で、出力６１５は、トレースメッセージを出力する。
【００５２】
クロックサイクルカウンタは、プロセッサ６０１からプロセッサ出力を受信し続ける。その命令カウントをメッセージ生成器６１２に出力した後に、クロックサイクルカウンタ６０９は、そのカウントを０にリセットする。クロックサイクルカウンタ６０９は次いで、プロセッサの次のクロックサイクルで再びカウントを開始し、図７の方法は繰り返す。
【００５３】
したがって、図６の装置および図７の方法は、オンチップのモニタリング回路が、プロセッサの命令実行をトレースすることを可能にし、プロセッサの各サイクルでいくつの命令がリタイアされ、命令実行を再開する前にプロセッサがその間にストールしたクロックサイクルがいくつかを識別するタイミングデータを出力することを可能にする。そのタイミングデータは次いで、図３に関して説明されたように解析される。
【００５４】
図３および図６のトレース回路は、オプションで、非リタイアカウンタ８００をさらに含むことができる。これは、破線の略図で図に例証されている。非リタイアカウンタは、プロセッサ３０１、６０１からプロセッサ出力を受信する。非リタイアカウンタはまた、クロック３０９、６１１からクロック入力を受信する。非リタイアカウンタ８００は、プロセッサ３０１、６０１と同じクロッキング率で、クロック３０９、６１１によってクロック制御されている。非リタイアカウンタは、見逃されたリタイア機会の数をカウントする。言い換えれば、非リタイアカウンタは、命令がリタイアされ得たにもかかわらず、リタイアされなかった回数をカウントする。図５に関して説明された方法では、非リタイアカウンタは、時間内に連続するリタイアされた一連の命令のグループの後に、リタイアされた命令がない間のプロセッサの後続する連続したクロックサイクルの数をカウントすることができる。このカウントがしきい値ストールカウントよりも多い、またはしきい値ストールカウントと同じである場合、非リタイアカウンタは、カウントを破棄し、０にリセットする。カウントがしきい値ストールカウントよりも少ない場合、非リタイアカウンタは、このカウントを非リタイアカウントとしてメッセージ生成器に出力する。図７に関して説明された方法では、非リタイアカウンタは、クロックサイクル内でリタイアされ得たにもかかわらず、リタイアされなかった命令の数をカウントすることができる。図６の例においては、４つの命令がクロックサイクルごとにリタイアされ得る。したがって、非リタイアカウンタは、４つの、３つの、２つの、１つの、または０の命令がリタイアされた場合に、それぞれ、０、１、２、３、４の非リタイアカウントを有することになる。非リタイアカウンタは、この非リタイアカウントをメッセージ生成器に出力する。メッセージ生成器は、非リタイアカウントをトレースメッセージに含め、次いでそれが出力される。
【００５５】
メッセージ生成器３１０、６１２は、単一の命令カウント／クロックサイクルカウント、および単一のストールカウント、ならびにオプションで単一の非リタイアカウントを含むトレースメッセージを生成し、このトレースメッセージを出力することができる。代替的に、メッセージ生成器３１０は、いくつかの命令カウント／クロックサイクルカウント、およびストールカウント（ならびにオプションで非リタイアカウント）のグループを、本明細書で説明された方法のいくつかの反復から受信し、これらのカウントのグループを単一のトレースメッセージのペイロードにおいて連結し、次いでそのトレースメッセージを出力することができる。例えば、トレースメッセージは、最大ペイロード長を有することができる。命令カウント／クロックサイクルカウント、およびストールカウント（ならびにオプションで非リタイアカウント）のグループを受信すると、メッセージ生成器は、グループをトレースメッセージのペイロードに追加する。最大ペイロード長を超えない場合、メッセージ生成器は、トレースメッセージを出力しない。代わりに、メッセージ生成器は、さらなるカウントのグループを受信するために待つ。次のカウントのグループを受信すると、メッセージ生成器は、そのグループをトレースメッセージのペイロードに追加する。このプロセスは、最大ペイロード長を超えずに、ペイロード内に収まることになるさらなるカウント・グループがなくなるまで繰り返す。この時点で、メッセージ生成器は、トレースメッセージを出力３１４、６１５に出力する。
【００５６】
メッセージ生成器３１０、６１２は、トレースメッセージにおけるトレース回路カウンタからのカウント値を、圧縮フォーマットで符号化することができる。例えば、それは、ランレングス符号化を使用することができる。例えば、メッセージ生成器は、エリアスガンマコードを使用してカウント値を符号化することができる。エリアスガンマ符号化は、小さな数を符号化するときにとりわけ効率的である。プロセッサが頻繁にストールするシナリオにおいて、小さなカウント値を符号化するトレースメッセージは、本明細書で説明される方法によって高い割合で生成される。コード化効率は、トレースデータの報告に費やされる時間を最小化するのを支援するために、そのようなシナリオにおいてとりわけ重要である。
【００５７】
メッセージ生成器は、トレースデータを表現するトークンのグループを生成することができる。例えば、図４または図５の方法のケースにおいて、メッセージ生成器は、トークンペアを含むグループを生成することができる。第１のトークンは、エリアスガンマ符号化された命令カウントである。第２のトークンは、エリアスガンマ符号化されたストールカウントである。図７の方法のケースにおいて、メッセージ生成器は、トークンペアを含むグループを生成することができる。第１のトークンは、エリアスガンマ符号化されたクロックサイクルカウントである。第２のトークンは、エリアスガンマ符号化されたストールカウントである。いずれのケースにおいても、グループは、エリアスガンマ符号化された非リタイアカウントである第３のトークンを追加で含むことができる。
【００５８】
図１から図３、および図６に例証されたＳｏＣの各コンポーネントは、専用のハードウェアで実装されてよい。代替的に、図１から図３、および図６に例証されたＳｏＣの各コンポーネントは、ソフトウェアで実装されてもよい。いくつかのコンポーネントは、ソフトウェアで実装されてよく、一方他のコンポーネントは、専用のハードウェアで実装される。
【００５９】
説明されたＳｏＣは、好適には、コンピューティングベースのデバイス内に組み込まれる。コンピューティングベースのデバイスは、電子デバイスであってよい。好適には、コンピューティングベースのデバイスは、本明細書で説明された方法を実装するために、デバイスの動作を制御するようにコンピュータ実行可能命令を処理するための、１つまたは複数のプロセッサを含む。コンピュータ実行可能命令は、メモリなどの任意のコンピュータ可読媒体を使用して提供されてよい。本明細書で説明された方法は、有形のストレージ媒体上で、機械可読形式でソフトウェアによって実施されてよい。ソフトウェアは、本明細書で説明された方法を実装するために、コンピューティングベースのデバイスにおいて提供されてよい。例えば、トレース回路は、本明細書で説明されたカウント動作を実施するためのカウント論理回路を含むことができる。
【００６０】
上述した説明は、システム回路およびトレース回路を、同じＳｏＣ上に含まれるものとして説明している。代替的な実装において、システム回路およびトレース回路は、ＭＣＭの２つ以上の集積回路チップにわたって含まれる。ＭＣＭにおいて、集積回路チップは、一般に、インターポーザ基板上にスタックされる、または近接して設置される。あるシステム回路が、１つの集積回路チップ上に設置され、他のシステム回路が、そのＭＣＭの異なる集積回路チップ上に設置されてもよい。同様に、トレース回路が、ＭＣＭの２つ以上の集積回路チップにわたって分散されてもよい。したがって、ＳｏＣのコンテキストにおいて上述された方法および装置はまた、ＭＣＭのコンテキストにおいても適用される。
【００６１】
出願人は、これにより、本明細書で説明された各個々の特徴および２つ以上のそのような特徴の任意の組合せを、そのような特徴または特徴の組合せが本明細書で開示されたいかなる問題を解決するかどうかにかかわらず、かつ特許請求項の範囲を限定することなく、当業者の共通の一般的知識に照らし、全体としての本明細書に基づいて、そのような特徴または組合せが遂行されることが可能である範囲で、単独で開示する。出願人は、本発明の態様が、任意のそのような個々の特徴または特徴の組合せからなり得ることを指し示す。上述した説明を考慮して、さまざまな変更が本発明の範囲内で行われてよいことが当業者には明らかであろう。
【図１】
2020184329.tif 000003
【図２】
2020184329.tif 000004
【図３】
2020184329.tif 000005
【図４】
2020184329.tif 000006
【図５】
2020184329.tif 000007
【図６】
2020184329.tif 000008
【図７】
2020184329.tif 000009
【外国語明細書】
2020184329000001.pdf