(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-08-28
(45)【発行日】2023-09-05
(54)【発明の名称】フレキシブルなオンダイファブリックインターフェイス
(51)【国際特許分類】
G06F 13/38 20060101AFI20230829BHJP
G06F 13/42 20060101ALI20230829BHJP
G06F 15/173 20060101ALI20230829BHJP
G06F 15/78 20060101ALI20230829BHJP
【FI】
G06F13/38 340A
G06F13/42 310
G06F13/38 340D
G06F15/173 685S
G06F15/78 530
【外国語出願】
(21)【出願番号】P 2020159415
(22)【出願日】2020-09-24
【審査請求日】2022-06-02
(32)【優先日】2019-12-06
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2020-06-27
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】593096712
【氏名又は名称】インテル コーポレイション
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】スワデシュ チャウダリー
(72)【発明者】
【氏名】ロバート ジー. ブランケンシップ
(72)【発明者】
【氏名】シヴァ プラサード ガデイ
(72)【発明者】
【氏名】サイレシュ クマール
(72)【発明者】
【氏名】ヴィニト マシュー アブラハム
(72)【発明者】
【氏名】イェン‐チェン リュー
【審査官】田中 啓介
(56)【参考文献】
【文献】米国特許出願公開第2015/0254182(US,A1)
【文献】特開2013-012235(JP,A)
【文献】特開平07-311751(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F12/08-12/128
G06F13/38-13/42
G06F15/16-15/177、15/78
(57)【特許請求の範囲】
【請求項1】
機器であって、当該機器は、
複数のコヒーレントプロトコルをサポートする回路を含むエージェントブロックであって、ファブリックと通信するためのインターフェイスを含むエージェントブロックを含み、
該インターフェイスは、
第1のワイヤセットを使用するグローバルチャネルであって、前記インターフェイスを初期化するための信号を搬送するためのグローバルチャネルと、
第2のワイヤセットを使用する要求チャネルであって、前記エージェントブロックから送信された要求に関連するアドレス及びプロトコルレベルのコマンド情報を搬送するための要求チャネルと、
第3のワイヤセットを使用する応答チャネルであって、前記エージェントブロックから送信された前記要求に対する応答を搬送するための応答チャネルと、
第4のワイヤセットを使用するデータチャネルであって、前記エージェントブロックから前記ファブリックを介して他のエージェントにデータ転送を行うためのデータチャネルと、を含む、
機器。
【請求項2】
前記グローバルチャネルには、エージェントからファブリックへの(A2F)グローバルチャネル及びファブリックからエージェントへの(F2A)グローバルチャネルが含まれ、前記要求チャネルには、A2F要求チャネル及びF2A要求チャネルが含まれ、前記応答チャネルには、A2F応答チャネル及びF2A応答チャネルが含まれ、前記データチャネルには、A2Fデータチャネル及びF2Aデータチャネルが含まれる、請求項1に記載の機器。
【請求項3】
前記第2のワイヤセットには複数のワイヤが含まれ、前記要求チャネルには複数の信号が含まれ、該複数の信号のそれぞれが前記複数のワイヤのそれぞれのサブセットに割り当てられる、請求項1に記載の機器。
【請求項4】
前記第3のワイヤセットには複数のワイヤが含まれ、前記応答チャネルには複数の信号が含まれ、該複数の信号のそれぞれが前記複数のワイヤのそれぞれのサブセットに割り当てられる、請求項1に記載の機器。
【請求項5】
前記第4のワイヤセットには複数のワイヤが含まれ、前記データチャネルには複数の信号が含まれ、前記複数の信号のそれぞれが前記複数のワイヤのそれぞれのサブセットに割り当てられる、請求項1に記載の機器。
【請求項6】
前記要求チャネル、前記応答チャネル、及び前記データチャネルのそれぞれには、前記エージェントから前記ファブリックへのそれぞれの転送信号と、前記ファブリックから前記エージェントへのそれぞれのフロー制御信号とが含まれる、請求項1に記載の機器。
【請求項7】
前記要求チャネル、前記応答チャネル、及び前記データチャネルのそれぞれが、
それぞれの有効信号、
それぞれのプロトコル識別子信号、
それぞれの仮想チャネル識別子フィールド、及び
それぞれのヘッダー信号、をサポートし、
前記有効信号は、前記ヘッダー信号の有効なインスタンスに合わせてアサートされ、前記ヘッダー信号には特定のメッセージのヘッダーが含まれ、
前記ヘッダー信号には特定のメッセージのヘッダーが含まれ、前記プロトコル識別子信号によって前記ヘッダーに関連付けられたプロトコルが識別され、仮想チャネル識別子信号によって前記特定のメッセージに使用される仮想チャネルが識別される、請求項1に記載の機器。
【請求項8】
前記複数のコヒーレントプロトコルには複数のプロトコルが含まれ、前記プロトコル識別子信号によって、前記ヘッダーに関連付けられるものとして、前記複数のプロトコルのうちの1つが識別される、請求項7に記載の機器。
【請求項9】
前記複数のコヒーレントプロトコルには、CXL(Compute Express Link)プロトコルが含まれ、該CXLプロトコルには、CXL.cacheプロトコル及びCXL.memプロトコルが含まれる、請求項8に記載の機器。
【請求項10】
前記要求チャネル、前記応答チャネル、及び前記データチャネルのそれぞれには、ブロッキング要求を受け取るための
それぞれのブロッキング信号がさらに含まれ、前記ブロッキング要求は、対応するチャネルの前記有効信号のデアサートを生じさせる、請求項7に記載の機器。
【請求項11】
前記有効信号は、前記ブロッキング信号のアサート後に特定の数のクロックサイクルでデアサートされ、該特定の数のクロックサイクルには、前記インターフェイスの構成可能なパラメータが含まれる、請求項10に記載の機器。
【請求項12】
前記要求チャネル、前記応答チャネル、及び前記データチャネルのそれぞれには、それぞれのペイロードデータ信号がさらに含まれ、該ペイロードデータ信号は前記ヘッダー信号に対応しており、前記ペイロードデータ信号は、チャネル内で前記ヘッダー信号を送信した後に、複数のクロックサイクルで送信され、該複数のクロックサイクルに
おいて、前記インターフェイスの構成可能なパラメータが
送信される、請求項8に記載の機器。
【請求項13】
前記エージェントブロックには、システムオンチップ(SOC)の知的財産(IP)ブロックが含まれる、請求項1に記載の機器。
【請求項14】
機器であって、当該機器は、
ファブリックと、
第1のエージェントと、
第2のエージェン
トと、
複数のエージェントデバイスを相互接続するファブリックブロックと、を含み、
前記第1のエージェントは、前記ファブリックを介して前記第2のエージェントと通信しており、
該ファブリックブロックは、
前記複数のエージェントデバイス内の第1のエージェントデバイスに結合するための第1のインターフェイスと、
前記複数のエージェントデバイス内の第2のエージェントデバイスに結合するための第2のインターフェイスと、を含み、
前記第2のインターフェイスは、
第1の物理チャネルセットを使用するグローバルチャネルであって、前記第2のインターフェイスを初期化するための信号を搬送するグローバルチャネルと、
第2の物理チャネルセットを使用する要求チャネルであって、前記第1のエージェントデバイス又は前記第2のエージェントデバイスの一方から送信された要求に関連付けられたアドレス及びプロトコルレベルのコマンド情報を搬送する要求チャネルと、
第3の物理チャネルセットを使用する応答チャネルであって、前記要求に対する応答を搬送する応答チャネルと、
第4の物理チャネルセットを使用するデータチャネルであって、前記ファブリックを介して前記第1のエージェントデバイスと前記第2のエージェントデバイスとの間でデータ転送を行うデータチャネルと、を含む、
機器。
【請求項15】
前記第2のインターフェイスは、複数のプロトコルのトランザクションをサポートする、請求項14に記載の機器。
【請求項16】
複数のコヒーレント相互接続プロトコルには、CXL(Compute Express Link)プロトコルが含まれ、該CXLプロトコルには、CXL.cacheプロトコル及びCXL.memプロトコルが含まれる、請求項15に記載の機器。
【請求項17】
システムであって、当該システムは、
ファブリックと、
第1のエージェントと、
第2のエージェン
トと、を含み、
前記第1のエージェントは、前記ファブリックを介して前記第2のエージェントと通信しており、
前記第1のエージェントは、
複数のコヒーレントプロトコルを実装するためのプロトコル回路と、
前記ファブリックに結合するためのインターフェイスと、を含み、
前記インターフェイスは、
第1のワイヤセットを使用するグローバルチャネルであって、第2のインターフェイスを初期化するための信号を搬送するグローバルチャネルと、
第2のワイヤセットを使用する要求チャネルであって、前記第1のエージェントから送信された要求に関連付けられたアドレス及びプロトコルレベルのコマンド情報を搬送する要求チャネルと、
第3のワイヤセットを使用する応答チャネルであって、前記第1のエージェントから送信された前記要求に対する応答を搬送する応答チャネルと、
第4のワイヤセットを使用するデータチャネルであって、前記ファブリックを介して前記第1のエージェントから前記第2のエージェントへのデータ転送を行うデータチャネルと、を含む、
システム。
【請求項18】
前記ファブリックには、第1の知的財産(IP)ブロックが含まれ、前記第1のエージェントには、第2のIPブロックが含まれる、請求項17に記載のシステム。
【請求項19】
前記複数のコヒーレントプロトコルのデータは、前記インターフェイスを実装するワイヤ上で多重化される、請求項17に記載のシステム。
【請求項20】
前記データ転送は、フリットベースのデータ転送を含む、請求項17に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願
本願は、2019年12月6日に出願された米国仮特許出願第62/944,773号に対する利益を主張するものであり、その開示は、本願の開示の一部と見なされ、その全体が参照により本明細書に組み入れられる。
【0002】
本開示は、コンピュータシステムに関し、特にポイントツーポイント相互接続に関する(ただし、これに限定されない)。
【背景技術】
【0003】
半導体処理及び論理設計の進歩により、集積回路装置上に存在し得るロジックの量の増大が可能になった。当然の結果として、コンピュータシステム構成は、システム内の単一又は複数の集積回路から、個々の集積回路上に存在する複数のコア、複数のハードウェアスレッド、及び複数の論理プロセッサだけでなく、そのようなプロセッサ内に統合された他のインターフェイスにも進展してきた。プロセッサ又は集積回路は、典型的に、単一の物理プロセッサダイを含み、プロセッサダイには、任意の数のコア、ハードウェアスレッド、論理プロセッサ、インターフェイス、メモリ、コントローラハブ等が含まれ得る。
【0004】
より小さいパッケージにより多くの処理能力を適合させるより大きな能力の結果として、小型コンピュータ装置の人気が高まっている。スマートフォン、タブレット、超薄型ノートブック、他のユーザ機器が飛躍的に成長している。ただし、これらの小型装置は、フォームファクタを超えるデータストレージと複雑な処理との両方をサーバーに依存している。その結果、高性能コンピュータ市場(つまり、サーバー空間)での需要も高まっている。例えば、最近のサーバーでは、典型的に、複数のコアを含む単一のプロセッサだけでなく、計算能力を高めるために複数の物理プロセッサ(マルチソケットとも呼ばれる)も存在する。しかし、処理能力がコンピュータシステム内の装置の数とともに増大するにつれて、ソケットと他の装置との間の通信がより重要になってくる。
【0005】
実際に、相互接続は、電気通信を主に処理していたより従来型のマルチドロップバスから、高速通信を容易にする本格的な相互接続アーキテクチャに成長している。残念ながら、将来のプロセッサがさらに高いレートで対応する需要を消費する要求は、既存の相互接続アーキテクチャの能力に課せられる。
【図面の簡単な説明】
【0006】
【
図1】システムオンチップ(SoC)デバイスの例示的な実施形態を示す簡略化したブロック図である。
【
図2】例示的なコンピュータシステムの例示的な論理フロー図の簡略化したブロック図である。
【
図3】例示的なフレキシブルなオンダイファブリックインターフェイスを示す簡略化したブロック図である。
【
図4】例示的なCXL(Compute Express Link)トポロジーを示す簡略化したブロック図である。
【
図5A】フレキシブルなオンダイファブリックインターフェイスの実施形態を示す簡略化したブロック図である。
【
図5B】フレキシブルなオンダイファブリックインターフェイスの実施形態を示す簡略化したブロック図である。
【
図6】例示的なフレキシブルなオンダイファブリックインターフェイスのチャネルを介したシグナリングを示すタイミング図である。
【
図7】ブロッキング信号の使用を含む、例示的なフレキシブルなオンダイファブリックインターフェイスのチャネルを介したシグナリングを示すタイミング図である。
【
図8】例示的なフレキシブルなオンダイファブリックインターフェイスのチャネルを介したクレジットリターンシグナリングを示すタイミング図である。
【
図9】例示的なフレキシブルなオンダイファブリックインターフェイスのグローバルチャネルの一部を示す簡略化したブロック図である。
【
図10】例示的なフレキシブルなオンダイファブリックインターフェイスの例示的な初期化状態マシンを示す図である。
【
図11】例示的なフレキシブルなオンダイファブリックインターフェイスの初期化を示すタイミング図である。
【
図12】例示的なフレキシブルなオンダイファブリックインターフェイスにおける切断フローの第1の例を示すタイミング図である。
【
図13】例示的なフレキシブルなオンダイファブリックインターフェイスにおける切断フローの第2の例を示すタイミング図である。
【
図14A】例示的なフレキシブルなオンダイファブリックインターフェイスを用いてシグナリングするための例示的な技法を示すフロー図である。
【
図14B】例示的なフレキシブルなオンダイファブリックインターフェイスを用いてシグナリングするための例示的な技法を示すフロー図である。
【
図15】マルチコアプロセッサを含むコンピュータシステムの実施形態のブロック図である。
【
図16】マルチコアプロセッサを含むコンピュータシステムの別の実施形態のブロック図である。
【
図17】プロセッサの実施形態のブロック図である。
【
図18】プロセッサを含むコンピュータシステムの別の実施形態のブロック図である。
【
図19】複数のプロセッサを含むコンピュータシステムの実施形態のブロック図である。
【
図20】システムオンチップ(SoC)として実装された例示的なシステムを示す図である。
【発明を実施するための形態】
【0007】
以下の説明では、本開示の完全な理解を与えるために、特定のタイプのプロセッサ及びシステム構成、特定のハードウェア構造、特定のアーキテクチャ及びマイクロアーキテクチャの詳細、特定のレジスタ構成、特定の命令タイプ、特定のシステムコンポーネント、特定の測定/高さ、特定のプロセッサパイプライン段階及び操作等の例等、多くの特定の詳細が示される。しかしながら、これらの特定の詳細は、本開示の実施形態を実施するために使用しなくてもよいことは、当業者には明らかであろう。他の例では、本開示を不必要に不明瞭にすることを避けるために、特定の及び代替のプロセッサアーキテクチャ、説明するアルゴリズムの特定の論理回路/コード、特定のファームウェアコード、特定の相互接続動作、特定の論理構成、特定の製造技術及び材料、特定のコンパイラ実装、アルゴリズムのコードでの特定の表現、特定のパワーダウン及びゲーティング技術/論理、及びコンピュータシステムの他の特定の動作の詳細等のよく知られたコンポーネント又は方法ついて、詳細に説明していない。
【0008】
以下の実施形態は、コンピュータプラットフォーム又はマイクロプロセッサ等の特定の集積回路における効率的な高速データ伝送及び構成可能性に関して説明し得るが、他の実施形態が、他のタイプの集積回路及び論理装置に適用可能である。本明細書で説明する実施形態の同様の技法及び教示は、より良好なエネルギー効率及びエネルギー保存から利益を得ることもできる他のタイプの回路又は半導体装置に適用することができる。例えば、開示する実施形態は、サーバー、ブレード、デスクトップコンピュータシステム、システムオンチップ(SoC)デバイス、ハンドヘルド装置、タブレット、セットトップボックス、車載コンピュータシステム、コンピュータビジョンシステム、ゲームシステム、機械学習システム、及び組込みアプリケーションとして具体化されたコンピュータシステムに適用し得る。以下の説明で容易に明らかになるように、本明細書で説明する方法、機器、及びシステムの実施形態は(ハードウェア、ファームウェア、ソフトウェア、又はこれらの組合せに関して)、高性能コンピュータ相互接続及びそれぞれのシステムの開発に有益である。
【0009】
コンピュータシステムが進歩するにつれて、その中のコンポーネントはより複雑になってきている。その結果、コンポーネント同士の間の結合及び通信を行う相互接続アーキテクチャはまた、コンポーネントの最適な動作のために帯域幅要件を満たすのを保証するために、複雑さが増している。さらに、異なる市場セグメントは、市場のニーズに合わせて相互接続アーキテクチャの異なる態様を要求する。例えば、サーバーはより高い性能を必要とするが、モバイルエコシステムは時には省電力化のために全体的な性能を犠牲にすることがある。しかし、殆どのファブリックの唯一の目的は、省電力を最大限にして最高の性能を提供することである。以下では、いくつかの相互接続について説明するが、これらの相互接続は、本明細書で説明する解決策の態様から潜在的に利益を得る。
【0010】
相互接続ファブリックアーキテクチャの一例は、周辺機器相互接続(PCI)エクスプレス(PCIe)アーキテクチャを含む。PCIeの主な目標は、様々なベンダーのコンポーネント及びデバイスが、複数の市場セグメント(クライアント(デスクトップ及びモバイル)、サーバー(標準及びエンタープライズ)、埋込み型装置及び通信装置)にまたがるオープンアーキテクチャで相互運用できるようにすることである。PCI Expressは、様々な将来のコンピューティング及び通信プラットフォームのために規定された、高性能の汎用I/O相互接続である。使用モデル、ロード/ストアアーキテクチャ、ソフトウェアインターフェイス等のいくつかのPCI属性は、その改訂を通じて維持されているが、以前のパラレルバス実装は、高度にスケーラブルな完全にシリアルなインターフェイスに置き換えられている。PCI Expressの最新バージョンは、ポイントツーポイント相互接続、スイッチベースの技術、及びパケット化プロトコルの進歩を利用して、新しいレベルの性能及び特徴を提供する。PCI Expressがサポートする高度な機能には、電源管理、サービス品質(QoS)、ホットプラグ/ホットスワップのサポート、データの整合性、エラー処理等がある。
【0011】
従来、専用の有線インターフェイスは、システムでサポートされるプロトコル(例えば、IDI、CMI、CXL等)毎に別々に提供される。例えば、SoCでは、各IPブロックエージェントには、SoCの相互接続ファブリック及びアプリケーション層を実装する1つ又は複数のSoCコンポーネント(例えば、ファブリックブロック、ネットワークオンチップ(NOC)デバイス、バス、スイッチ等)に結合する及びそれとの通信を可能にするそれ自体の独自の有線インターフェイスが装備され得る。各専用有線インターフェイスには、接続、リセット、切断、フロー制御等のリンク層機能を実装する様々な方法があり得る。このような専用インターフェイスはまた、複数のプロトコルを使用するエージェントのために多数のワイヤを利用する。このワイヤ数が多いと、システムの設計面積及び消費電力が増大する。ファブリック固有のインターフェイスも使用されており、これは複数のプロトコル及びより高いワイヤ効率を可能にし得るが、ファブリックが、数ある例示的な欠点の中でも、後続の各世代又はシステム修正のために再設計する必要がある特定のシステム用のカスタム設計の複雑なインターフェイスであるため、拡張性は殆どない。
【0012】
本明細書で説明するようなフレキシブルな有線インターフェイスは、例えば、数ある例の中でも、サーバーアプリケーション、クライアントCPU SoC開発における相互接続を含む潜在的なファブリック相互接続のニーズを満たすように構成可能にすることにより、従来のシステムに存在するこれら及び他の問題に対処することができる。いくつかの実装形態では、そのようなフレキシブルなオンダイ有線インターフェイス(又はリンク層)は、数ある例の中でも、IDI、UPI、及びメモリプロトコル等の複数の様々なプロトコルをサポートするように規定され得る。一例では、インターフェイス規定を適用して、外部IP開発のために、CXL(Compute Express Link)のサブプロトコル(CXL.mem及びCXL.cacheプロトコル等)をサポートするインターフェイスを実装できる。インターフェイス規定は、アップストリーム(例えば、デバイス)とダウンストリーム(例えば、ホスト)の方向をサポートし得る。いくつかの実装形態は、数ある例の中でも、スイッチ及び非ホストファブリック拡張をさらにサポートし得る。
【0013】
図1の簡略化したブロック
図100に移ると、システムオンチップ(SoC)デバイス105の簡略化した例が示されている。SoCマップは、コンピュータの複数のコンポーネント、又は計算ブロック(又は知的財産(IP)ブロック)を組み込んだ集積回路として実装され得る。そのようなブロック(例えば、110、115、120、125、130、135、140、145)は、1つ又は複数のCPUコンポーネント110、115、120、125(例えば、マイクロプロセッサ又はマイクロコントローラ)、専用プロセッサ130、135(例えば、グラフィック処理装置(GPU)、画像信号プロセッサ(ISP)、テンソル処理装置、アクセラレータ装置等)、メモリコンポーネント、入出力(I/O)ポート、2次ストレージブロック、及びシリコンダイ等の単一のダイ又は基板上の他の計算ブロック等のコンポーネントを含み得る。
【0014】
例示的なSoC105の計算ブロック(例えば、110、115、120、125、130、135、140、145)は、SoCファブリック(例えば、150)によって相互接続され得る。ファブリック150は、計算ブロック(例えば、110、115、120、125、130、135、140、145)の間の通信を容易にする1つ又は複数のIPブロックのセットを用いてそれ自体を実装することができる。いくつかの実装形態では、ファブリック150は、ネットワークオンチップ(NOC)実装型の1つ又は複数の回路ブロック等のネットワークオンチップ(NOC)として実装され得る。
【0015】
様々なブロック(例えば、110、115、120、125、130、135、140、145)による通信は、ブロック(例えば、110、115、120、125、130、135、140、145)上に提供されるプロトコルエージェント(例えば、160a~h)を介して促進され得る。各エージェント(160a~h等)には、1つ又は複数の相互接続プロトコル(例えば、PCIe、CXL(Compute Express Link)、Gen-Z、OpenCAPI、インダイインターフェイス(IDI)、CCIX(Cache Coherent Interconnect for Accelerators)、UPI(UltraPath
Interconnect)等)の全て又は一部の層(レイヤー)を実装するロジック(例えば、ハードウェア回路、ファームウェア、ソフトウェアで実装される)を含めることができ、相互接続プロトコルを介して、対応する計算ブロックが、システム内の他の計算ブロックと通信する。本明細書で説明するように、エージェントは、それぞれのインターフェイスを介してファブリック150に結合することができる。このようなエージェントは従来、独自の有線インターフェイスを介してファブリックに結合していたが、1つ又は複数のエージェント(例えば、160a~h)は、構成可能でフレキシブルなオンダイ有線インターフェイスのそれぞれのインスタンスを利用でき、これは、数ある例示的な実装形態の中でも、SoC105の複数の異なるエージェントの複数の異なるプロトコルをサポートするように展開され得る。
【0016】
上で紹介したように、フレキシブルな有線インターフェイス、又は統合(unified)ファブリックインターフェイス(UFI)により、エージェントをファブリックに結合する単一の有線インターフェイス上で多くのプロトコルを流すことができるため、カスタムのファブリック固有インターフェイスと同様のワイヤ効率が可能になる。いくつかの実装形態では、UFIは、ファブリック固有の詳細を省略し、知的財産(IP)ブロック、又は他の計算ブロック(例えば、160a~h)をファブリック150から分離して開発することができる。その結果は、数ある利点の例の中でも、コンポーネント計算ブロックを変更せずにシステム相互接続ファブリックを時間をかけて進化させ、且つシステム(例えば、システムオンチップ(SoC))ファブリック150とインターフェイスする一貫性のあるシンプルなリンク層フロー(例えば、リセット、接続、切断、フロー制御)を可能にしながら、再利用を可能にするクリーンな計算ブロックインターフェイスである。こうして、UFIは、数ある例の中でも、エージェントIPブロック(例えば、PCIe、CXL、コア)とファブリックIPブロック(例えば、サーバーコヒーレントファブリック(SCF)、クライアントコヒーレントファブリック(CCF)、netspeed(登録商標)等)との両方のブロック開発モデルを計算するためのシンプルでクリーンな検証可能なインターフェイスを提供することができる。
【0017】
図2は、例示的なコンピュータシステム(例えば、SoC)の例示的な論理フロー図を示す簡略化したブロック
図200である。SoCは、SoC IPブロック(例えば、205)、1つ又は複数のガスケット(例えば、210)、及び相互接続ファブリック(例えば、150)を含み得る。SoC IPブロック(例えば、205)には、数あるIPブロックの例の中でも、プロセッサコアブロック(例えば、225)、メモリブロック(例えば、230)、及び入出力(I/O)プロトコルブロック等の相互接続プロトコルブロック(例えば、235)、直接メモリアクセス(DMA)ブロック(例えば、240)、プロセッサ間通信プロトコル(UPI)ブロック(例えば、245)、キャッシュコヒーレンシプロトコル(例えば、CXL.mem/CXL.cache)ブロック(例えば、250)が含まれ得る。場合によっては、いくつかのエージェント(例えば、ブロック245、250)のプロトコル固有のロジックは、ファブリックトポロジーを少なくともある程度認識している(例えば、システム内のソケット、システムのキャッシングエージェント等を認識している)可能性があり、且つファブリックと直接インターフェイスし得る。ガスケット(例えば、210)は、ファブリックトポロジーを認識しない他のいくつかのブロック(例えば、225、230、235、240)の通信を容易にするために利用され得る。ガスケット210は、ファブリック150のIPブロックの間のトポロジー及びプロトコル認識変換を提供するロジックを含み得、これはファブリックのネットワーク層へのプロトコル層変換を提供する。ガスケットの例には、コアガスケット255、メモリ暗号化ロジック260、2レベルメモリ(2LM)ロジック265、ホストI/Oプロセッサ(HIOP)270(例えば、生産者/消費者のワークフローが機能することを可能にするシステム要件を維持しながら、PCIeのようなロード/ストアプロトコルをIDI/UPIのような順不同のプロトコルに変換する)、及びuBoxロジック275が含まれ得る。ガスケットは、数ある例の中でも、他のインターフェイス215へのブリッジ(例えば、(IOSFインターフェイス等への)ブリッジ)としても機能する。
【0018】
本明細書で議論するようなUFIインターフェイス220は、システムのファブリック150又はガスケット210の周囲にクリーンなプロトコル境界を提供するためにシステムに実装され得、システム(例えば、SoC)内の計算ブロック205(例えば、IPブロック)がファブリックの詳細を知らなくても動作できるようにする。例えば、ファブリックは、標準及びシンプルなブリッジを実装し得、アドレスのデコード及びフロー制御等の基本的な機能を提供する。ガスケットは、ファブリックとエージェントの間にある(ファブリック及びエージェントにUFIを実装する)オプションのSoC固有のスタンドアロン機能を実装し得る。さらに、UFIインターフェイスは、数ある例示的な特徴及び利点の中でも、個々の計算ブロックの帯域幅要件を満たすように構成可能な物理チャネルを規定し得る。
【0019】
UFIは、エージェントとシステムの相互接続ファブリックとの間の標準インターフェイスを規定することができる。エージェントは、ファブリックに接続された様々なIPブロック又は他の計算要素(例えば、ハードウェア要素)であり得、様々なプロファイル(アップストリームポート及び/又はダウンストリームポート)だけでなく、様々なプロトコル又は帯域幅の要件を有し得る。ファブリックは、UFIの範囲内のエージェント及びUFIでトンネリングされる関連プロトコルの要件をサポートすることが期待されている。
図3に移ると、エージェント305をファブリック150に結合する例示的なUFIインターフェイス220のチャネルを示す簡略化したブロック
図300が示されている。いくつかの実装形態では、UFIは、3つの物理チャネル(1組のエージェントからファブリックへの(A2F)チャネル310、及び1組のファブリックからエージェントへの(F2A)チャネル315)を各方向に規定して、要求(REQ)物理チャネル(例えば、330、350)、応答(RSP)物理チャネル(例えば、335、355)、及びデータ(DATA)物理チャネル(例えば、325、345)を含むインターフェイス220を実装することができる。いくつかの実装形態では、UFIは、3つの主要な物理チャネルに亘って共通のグローバル制御信号をサポートするためのグローバル制御チャネル320、340をさらに含む。
【0020】
UFI規定は、これらの物理チャネルを介して、複数の様々なプロトコル(例えば、インダイインターフェイス(IDI)、UPI、CXL.mem等)を柔軟にマッピングすることができる。UFIは、展開されたシステム内で実質的な構成可能性を提供する。例えば、数ある要因の中でも、サポートされるプロトコルだけでなく、性能を満たすために必要なチャネル数、及びシステムで使用される潜在的な異なるファブリックを構成することができる。例えば、以下の表1及び表2は、プロトコルプロファイル及び物理チャネルの数が異なる場合の使用例を示している。プロトコルとチャネル数との組合せは、「エージェントプロファイル」と見なすことができる。
【0021】
【0022】
【0023】
表1は、システムに含まれるIPブロックに含まれ得る例示的なエージェント(例えば、コア、UPIエージェント等)のリストを示し、対応するエージェントのロジックがサポートするプロトコルのコレクションを識別する(例えば、ISOFエージェントは、IDI及び非コヒーレントUPI(UPI_NC)をサポートするが、uBoxエージェントは、IDI、IDIシステムエージェント(IDI_SA)、非コヒーレントUPI等をサポートする)。従来のシステムでは、エージェントのサポートされるプロトコルのそれぞれに、(エージェントをファブリックに接続する)異なる個別の有線インターフェイスが提供され得る(例えば、3つのプロトコルをサポートするuBoxエージェントの例では、3つの個別の有線インターフェイスが提供され得る)。UFIインターフェイスを適用すると、IPブロックでこれらの複数のインターフェイスを単一のUFIインターフェイスに置き換えて、サポートされている複数のプロトコルのいずれかを用いた通信をサポートするファブリックに接続できる。例えば、表2は、表2の左端の列に載っている各エージェント例をサポートするために単一のUFIインターフェイスに実装されるUFIチャネルの例を示している。例えば、例示的なCXLエージェントのUFIインターフェイスは、IDIとCXL.memとの両方をサポートし得、A2F方向に1つの要求チャネル、1つのデータチャネル、及び2つの応答チャネルと、F2A方向に2つの要求チャネル、1つのデータチャネル、及び1つの応答チャネルを含む。場合によっては、サポートされているプロトコルがUFIチャネルのうちの1つを使用しないことがある。従って、そのようなチャネルがいくつかのUFIインスタンスでは省略される場合がある。例として、表2に確認されるuBoxエージェントは、IDI_SA、IDI、及びUPI_NCをサポートし、これらのプロトコルに基づいて、数ある例の中でも、F2A方向の要求チャネル(そのUFIインスタンスでは省略される)を必要としない。
【0024】
図3の議論に戻ると、各チャネル(例えば、320、325、330、335、340、345、350、355)は、1組の物理的なワイヤ又はレーンから構成してもよく、各ワイヤは、特定のタイプの信号を伝送するために割り当てられる。UFIインターフェイスでは、1組の物理レーン(例えば、ワイヤ又は他の導体)が、提供され且つ様々なチャネルに割り当てられ、これは、インターフェイスに対して規定され、且つインターフェイスのそれぞれの物理レーンに割り当てられる信号の論理セットを具体化する。各デバイスは、ピン及び対応するUFIロジック(ハードウェア回路及び/又はソフトウェアに実装される)を所有して、インターフェイスの終端(送信側(transmitter)又は受信側(receiver))又はインスタンスを実装し、インターフェイス上の送信側と受信側との間の接続を具体化する物理レーンに結合する。従って、以下で議論するように、信号のセットは、各チャネルのUFIの下で規定できる。規定された信号のいくつかは、対応するUFIインターフェイスでサポートされているプロトコルに関係なく、チャネルインスタンス毎に幅及びフォーマットが規定され得る。他の信号は、数ある例示的な特徴の中でも、サポートされているプロトコルの属性(例えば、プロトコルのヘッダーの長さ)と、エージェントの動作速度(例えば、ファブリックより実行速度が遅いエージェントは、長いデータチャネルで補正する)とに基づいている場合がある。このようにして、データは、数ある例示的な利点の中でも、システムのコヒーレンシを管理するために使用される要求及び応答と並行して、専用グローバル制御チャネル(例えば、320、340)を介して送信されるリンクトレーニング及び制御信号とともに送信され得る。
【0025】
UFIの特定の一般原理を説明するために、潜在的なUFI実装の非限定的な例を本明細書で説明する。例えば、そのような一例として、UFIインターフェイスは、UFIの物理チャネルにマッピングされるCXLの複数の異なるサブプロトコル(例えば、CXL.io、CXL.mem、CXL.cache等)をサポートするように構成され得る。そのような実装は、エージェントとファブリックとの間でそのようなコヒーレントなプロトコルをマッピングするため、CXL.cache/memプロトコルインターフェイス(CPI)と呼ばれ得る。上記に従って、UFI実装(例えば、CPI)によって、同じ物理ワイヤ(UFIインターフェイスのチャネルを実装する)に複数の異なるプロトコル(例えば、CXL.mem及びCXL.cache)のマッピングが可能になり得る。
【0026】
CXL(Compute Express Link)は、コヒーレンシプロトコル(CXL.cache)、メモリアクセスプロトコル(CXL.mem)、及びIOプロトコル(CXL.io)の動的プロトコル多重化(multiplexing)(又は多重化(muxing))をサポートする、低レイテンシ、高帯域幅のディスクリート又はオンパッケージのリンクである。CXL.cacheは、ホストメモリのデバイスキャッシングをサポートするエージェントコヒーレンシプロトコルであり、CXL.memは、デバイス取付けメモリをサポートするメモリアクセスプロトコルであり、CXL.ioは、アクセラレータのサポートを強化したPCIeベースの非コヒーレントI/Oプロトコルである。CXLは、豊富なプロトコルセットを提供して、それによりアクセラレータ装置等のデバイスの幅広いスペクトルをサポートすることを目的としている。特定のアクセラレータの使用モデルに応じて、全てのCXLプロトコル(CXL.io、CXL.mem、CXL.cache)又はサブセットのみを有効にして、対応する計算ブロック又はデバイス(アクセラレータ等)がシステムにアクセスするための低レイテンシ、広帯域幅経路を提供することができる。
【0027】
UFIでは、異なるプロトコルの間のチャネルマッピング及び物理ワイヤ共有の特定の選択は、プロトコル及び実装固有であり得、これらの様々なマッピングは全て、UFI規定によって許可され得る。例えば、いくつかの実装態様では、コンポーネントがダウンストリームポートかアップストリームポートかによって、CXL.cache及びCXL.memの異なるチャネルが、エージェントからファブリックへの(A2F)方向かファブリックからエージェントへの(F2A)方向かに関連する。例えば、
図3の例では、CXL.cache及びCXL.memプロトコルは、数ある例の中でも、対応するCXLエージェントをファブリックに接続する物理チャネル(例えば、320、325、330、335、340、345、350、355)にマッピングされ得る。表3は、CPI UFI実装の一例で使用され得るチャネルの例を示している。例えば、表3は、UFIの実装例におけるアップストリームポート及びダウンストリームポートのエージェントからファブリックへの接続のコンテキストで、CXL.cache及びCXL.memの物理チャネルの観点からプロファイルをキャプチャする。CPIの場合に、CXL.cache及びCXL.memの数、エージェントが使用する各物理チャネルは、例えば、エージェントの帯域幅要件に基づいて実装の選択肢になる場合がある。
【0028】
【表3】
表3:CPIエージェントプロファイルの例
【0029】
図4に移ると、例示的なエージェント及びそのようなエージェントのファブリックへの結合を示す簡略化したブロック
図400が示されている。
図4は、CXLリンク415をサポートするポートの例示的なシステムトポロジーを示す。例えば、CXLリンク415は、CPUホストデバイス405を別のデバイス410(例えば、メモリ装置又はアクセラレータ装置)に結合することができる。(デバイス405、410上の)各エージェントは、CXLの各サブプロトコル(例えば、CXL.io、CXL.mem、CXL.cache)をサポートするリンク層ロジック(例えば、420a~b、425a~b)を含み得る。CXL.mem及びCXL.cacheの場合に、共通のコントローラ(例えば、425a~b)を使用できる。プロトコルの多重化は、Flex Bus(商標)物理層(430a~b等)とインターフェイスするCXL調停/多重化ロジック(例えば、ハードウェア回路に実装された425a~b)によって促進できる。Flex Busは、PCIe又はCXLのいずれかをサポートするように静的に構成されたフレキシブルな高速ポートとして実装できる。Flex Busによって、PCIeプロトコル又はCXLプロトコルのいずれかを、高帯域幅のオフパッケージリンクを介して送信できる。Flex Bus PHY430a~bでのプロトコル選択は、アプリケーションに基づいて、自動ネゴシエーションを介してブート時に行われ得る。
【0030】
図4の例を続けると、UFI実装(例えば、CPI)220a、220bは、CXL.cache及びCXL.mem等のコヒーレントプロトコルに使用されるが、別のUFI実装又は異なる有線インターフェイス規定(430a、430b)(例えば、ストリーミングファブリックインターフェイス(SFI))は、PCIe及びCXL.ioのようなロード/ストアプロトコルに使用される。一例では、ストリーミングファブリックインターフェイス(SFI)430a~bは中間インターフェイスとして機能し、これは、送信側と受信側との間のプロトコル又はアプリケーション固有の責任を想定せず、ロード/ストアプロトコル(例えば、PCIe、CXL.io等の)高帯域幅要件を維持できるスケーラブルなストリーミングインターフェイスを提供する。SFIには、数ある例及びインターフェイス実装の中でも、スタンドアロンのプロトコル規定、フロー制御にマッピングできる様々なプロトコルをサポートするために提供されるSFIセマンティクス、及びSFI規定によって提供される仮想チャネルセマンティクスが含まれていない。
【0031】
図4に示されるように、システムは、例示的なUFIインスタンス化220a~b(例えば、CPIインスタンス化)を使用することができる。そのようなUFIインスタンス化220a~bによって、ワイヤをファブリックで共有でき、異なるプロトコルが共通のワイヤを共有するのを可能にすることにより、ファブリック及びエージェントの周辺でワイヤ効率を達成できる。例えば、UFI実装では、エージェントから発信された様々なプロトコルのチャネルは、物理チャネル及び仮想チャネルの最小セットに慎重にマッピングされるため、エージェント及びプロトコルの帯域幅及びチャネル間隔の要件は、総ワイヤ数が最も少なくなるように満たされる。UFIには、新しいプロトコル規定が含まれない場合がある。代わりに、UFIは既存のプロトコルを共通のチャネルセットにマッピングする。様々なプロトコルに亘るワイヤ共有を最大化するために、UFIによって、プロトコルがそれらのチャネルで共通のフロー制御及び仮想化特徴(例えば、UFIで規定される)を使用することが提供される。UFIのいくつかの実装態様では、インスタンス化に応じて、共通のデータ幅及び制御信号幅を使用するために、特定のプロトコルをマッピングすることができる。場合によっては、UFIの仮想チャネル規定が全てのマッピングされたプロトコルに含まれる。チャネル内又はチャネル間での順序付けの考慮事項を設定できるが、数ある例示的な特徴の中でも、順序付けの考慮事項が未規定のままの場合に、メッセージは順序付けされていないと見なされる場合がある。
【0032】
図5A~
図5Bに移ると、UFIインターフェイスのいくつかの実装態様では、同じインターフェイスを使用して、エージェントのサポートされるプロトコルのいずれかを用いてエージェントとファブリックとの間の通信をサポートできる。例えば、
図5Aのブロック
図500aは、UFIインターフェイスの単一のインスタンスが、CPI実装においてCXL.cacheとCXL.memとの両方をサポートするために使用される例を示す。一方、
図5Bのブロック
図500bに示されるように、UFIインターフェイスの代替の実装形態は、数ある例示的なエージェント及びプロトコルの中でも、UFIインターフェイスの2つの別個のインスタンス、つまり第1のCXL.cache(310a、315a)、及び第2のCXL.mem(310b、315b)を提供し得る。実際に、いくつかのエージェントは、UFIインターフェイス毎に1つのプロトコルのみを公開し得、複数のプロトコルを1つのUFIインターフェイスにマッピングするのではなく、UFIインターフェイスを複製することを代わりに選択する場合がある。このような実装態様を選択することにより、追加のワイヤ及びロジックを用いるという犠牲を払って、設計を簡略化することができる。
【0033】
上で紹介したように、UFIインターフェイスは、各方向に3つの物理チャネル、すなわち、要求(REQ)、応答(RSP)、及びデータ(DATA)を規定する。REQチャネルは、エージェントからファブリック及びファブリックからエージェントへの要求をそれぞれ伝送する。トランザクションのアドレス及びプロトコルレベルのコマンド情報は、チャネルを介して送信されるデータのヘッダーフィールドにカプセル化される。物理REQチャネルは、サイクル毎に1つのトランザクションを転送でき、チャネルの幅(例えば、チャネルを実装するために提供される物理レーンの数)は、この物理チャネルを共有する全てのプロトコルの間で、1つの要求を転送するために必要な最大幅によって決定され得る。データチャネルは、エージェント同士の間でデータを転送する全てのメッセージを伝送する。これには、書込みデータ、読取り応答データ、スヌープ応答データ等が含まれ得る。データチャネルによって、複数のFLIT(FLow Control UnIT)でトランザクションを送信できる。例えば、32Bのデータを伝送するデータチャネルを伴う64B転送は、数ある例の中でも、2つのFLITを介して送信され得る。RSPチャネルは、データなしで応答を伝送する。エージェントによって生成された要求の場合に、ファブリックからエージェントを受信すると、この物理チャネルを用いて応答が返送される。これらの応答には、完了、スヌープ応答等があり得る。そのような応答はアドレスビットを伝送しない場合があり、そのためいくつかの実装形態では、このチャネルは、REQより比較的狭いヘッダーフィールドを利用する場合がある。実際に、RSP物理チャネルは、単一のフロー制御ユニット(FLIT)メッセージを転送できる。全ての物理チャネルに適用される共通信号はグローバル信号と呼ばれ、そのような信号を伝送するためにインターフェイスの追加のレーンを規定できる。例えば、数ある機能の中でも、グローバル信号を使用して、初期化、切断、他のエラー報告をサポートすることができる。UFI物理チャネルは、UFIインターフェイスにマッピングされている様々なプロトコルによって使用される。リンク帯域幅をファブリック帯域幅に一致させるために、REQ、DATA、及びRSPチャネルの同じチャネルの複数のインスタンス化が許可される場合がある。さらに、数ある例示的な特徴及び実装の中でも、全てのプロトコルがUFIの全てのチャネルを使用する必要はない。
【0034】
UFIインスタンスは、エージェントとファブリックとの間の各方向に、グローバルチャネルと、可変数のREQ、DATA、及びRSPチャネルとを有することができる。第1のレベルでは、信号はエージェントからファブリックへの(A2F)及びファブリックからエージェントへの(F2A)方向としてデータの流れの方向にグループ化される。グローバル層は、全ての物理チャネルに亘って適用する信号を伝送する。例えば、表4は例示的なA2Fグローバル信号を示し、表5は例示的なF2Aグローバル信号を示す。幅は、信号を実装するためにチャネルで使用される物理的な接続(例えば、ワイヤ又はレーン)の数を特定する。
【0035】
【0036】
【0037】
UFIの要求、つまりREQ層は、エージェントからファブリック及びファブリックからエージェントへの要求を伝送する。アドレス及びプロトコルレベルのコマンド情報は、REQ層のヘッダーフィールド又は信号にカプセル化される。ヘッダー及びヘッダー内に含まれる情報がプロトコル固有であり得るため、プロトコル固有の情報をビット(及び、それらのビットを送信するために使用される特定のワイヤ)にマッピングするようにマッピングを規定できる。さらに、ヘッダーのプロトコル固有の性質を考慮すると、ヘッダー信号の幅は、構成可能でもあり、UFIに実装されたプロトコルをサポートするように調整できる。他のフィールド又は信号は、プロトコルに依存しない(agnostic)場合があり、信号幅は固定され得る。UFIのREQ層信号は、いくつかのプロトコルがそのような対称性を利用又は提供しない場合でも、A2F及びF2A方向で対称になるように提供され得る。例として、CXL.cache及びCXL.memは対称プロトコルではない。こうして、CXL.cache及びCXL.memのアップストリーム及びダウンストリームバージョンは、異なるプロトコルとしてマッピングされる。実際に、実装は、機能に使用されるプロトコルの関連サブセットのみをサポートする場合がある。表6は、UFI REQ層内の信号及び信号幅の例を示す。方向は、パケットの送信側(Tx)とパケットの受信側(Rx)の観点から信号方向を指定する。
【0038】
【0039】
上記のように、ヘッダー信号(HDR)のサイズは、可変であり、且つUFIインターフェイスを介して転送されているプロトコルに基づいている。複数のプロトコルがUFIインターフェイスを介して伝送される場合に、HDRの幅は、インターフェイスを介して転送されているHDRの最大サイズ、又はサポートされる複数のプロトコルの最大ヘッダーサイズにサイズ決めされる。予約(reserved)フィールド幅は、主にHDRの未使用部分をカバーするために使用される。送信側は予約フィールドで0を駆動し、対応する受信側はこのフィールドを無視する。
【0040】
プロトコルヘッダーのUFI HDR信号への例示的なマッピングを示すために、表7及び表8は、アップストリーム及びダウンストリーム方向におけるCXL.cacheプロトコルの要求チャネルHDR信号への例示的なマッピングを示す。例えば、様々なフィールドの幅(アドレスパリティを除く)は、CXL.cacheの仕様により指定される。一例では、アドレスパリティは、Address(アドレス)フィールドの全てのビットのXORとして計算される。アップストリームポートの場合に、A2FはCXL(compute express link)上のホストからデバイスへの(H2D)チャネルに対応し、F2AはCXL上のデバイスからホストへの(D2H)チャネルに対応する。ダウンストリームポートの場合に、A2FはCXL上のD2Hチャネルに対応し、F2AはCXL上のH2Dチャネルに対応する。ダウンストリームポートの場合に、CXLセキュリティポリシーレジスタで規定されるDevice Trust LevelフィールドもD2H要求の一部である。この例では、CXL.cacheのこれらのチャネルでサポートされる仮想チャネルは1つだけである。
【0041】
【表7】
表7:アップストリームポートのCXL.cacheプロトコルのHDRへのマッピング
【0042】
【表8】
表8:ダウンストリームポートのCXL.cacheプロトコルのHDRへのマッピング
【0043】
同様に、CXL.cacheとCXL.memとの両方が同じUFI実装で(例えば、CPIで)サポートされる例では、CXL.memヘッダーも、表9及び表10の例に示されるように、HDR信号にマッピングされ得る。この例では、異なるフィールド(アドレスパリティを除く)の幅はCXL仕様に従って指定され、アドレスパリティはアドレスフィールドの全てのビットのXORとして計算される。アップストリームポートの場合に、A2FはCXL.mem上でマスターから下位への(M2S)REQチャネルにマッピングする。ダウンストリームポートの場合に、数ある例の中でも、A2Fは下位からマスター(S2M)にマッピングされ(例えば、この方向にREQチャネルはない)、F2AはM2S REQにマッピングされる。現在、CXL.memのこれらのチャネルでサポートされる仮想チャネルは1つだけである。
【0044】
【表9】
表9:アップストリームポートのCXL.memプロトコルのHDRへのマッピング
【0045】
【表10】
表10:ダウンストリームポートのCXL.memプロトコルのHDRへのマッピング
【0046】
いくつかのUFI実装では、UFIによって可能にされる数ある実装固有の要因及び構成の中でも、順序付けルールが、使用されるプロトコルに基づいて規定及び適用され得る。例として、REQチャネルの複数のインスタンス化が(例えば、リンク帯域幅をファブリック帯域幅に一致させるために)実装される場合に、順序付けが必要になる場合がある。例えば、CPIの例では、次の順序付けルールをCXL.cacheトラフィックに適用して、複数のREQチャネルが実装されている場合にCXL仕様で概説される順序付けのセマンティクス(semantics)を維持できる。同じクロックサイクルの同時メッセージは、互いに順序付けられていない。RSPチャネルで受信した応答は、同じクロックサイクルでREQチャネル上で受信した要求よりも先行していると見なす必要がある。同様に、CXL.memトラフィックの場合に、CXL.mem要求がアドレスに基づくハッシュを用いて特定のインスタンスにマッピングされるように、順序付けルールを規定して適用できる。特定のハッシュは実装に固有であるが、全てのアドレスは1つのインスタンスにのみマッピングして、CXL仕様で概説しているCXL.mem M2Sチャネルの順序が維持されるのを保証するようにする。
【0047】
UFIでは、DATA物理チャネルは、エージェント同士の間のデータ転送がある全てのメッセージを伝送する。これには、書込みデータ、読取り応答データ、スヌープ応答データ等が含まれ得る。データを含むデータ物理チャネルメッセージは、複数のフロー制御ユニット(つまり、FLIT)として送信できる。いくつかのプロトコル(例えば、CXL.cache及びCXL.mem)が対称ではない場合でも、データ層信号はA2F及びF2A方向で対称になるように提供され得る。データ信号が非対称である例では、DATAチャネルのアップストリームバージョン及びダウンストリームバージョン(例えば、CXL.cache及びCXL.mem)が異なるプロトコルとしてマッピングされる。表11は、UFIデータ層を実装するために利用される様々な信号(及び、対応するワイヤ)を示しており、方向列はパケットの送信側(Tx)及びパケットの受信側(Rx)の観点から信号の方向を特定する。
【0048】
【0049】
REQチャネルと同様に、DATA層のヘッダー信号(HDR)のサイズは可変であり、且つインターフェイスを介して転送されているプロトコルに基づいている。複数のプロトコルがインターフェイスを介して伝送される場合に、HDR幅は、UFIインターフェイスを介して転送されているHDRの最大サイズにサイズ決めされる。予約フィールド幅は、HDRの未使用部分をカバーするために使用される。例えば、送信側は予約フィールドで0を駆動し、受信側はこのフィールドを無視する。いくつかの実装態様では、サポートされているプロトコルのメッセージは64Bのデータを伝送する。32BペイロードのメッセージもDATAチャネルでサポートされる場合がある。どちらの場合も、64B相当のクレジットを使用できる。
【0050】
DATAチャネル上のプロトコルヘッダーマッピングの例として、(例えば、CPI実装における)CXL.cache及びCXL.memのマッピングが、例示的な例として提供される。64Bのデータを伝送するインターフェイスの場合に、64B転送は1サイクルに亘って送信される。ヘッダー全体も1サイクルに亘って送信される。32Bのデータを伝送するインターフェイスの場合に、data_bodyは256ビット幅であり、64B転送は2サイクルに亘って送信される。data_eop信号は第2のサイクルでアサートする必要があり、data_headerは第1のサイクルで有効であり、第2のサイクルは予約されている。16Bのデータを伝送するインターフェイスの場合に、data_bodyは128ビット幅であり、64B転送は4サイクルに亘って送信される。data_eop信号はサイクル4でアサートする必要があり、数ある例の中でも、data_headerは第1のサイクルで有効であり、第2、第3、第4のサイクルは予約されている。アップストリームポート及びダウンストリームポートそれぞれについて、CXL.cacheデータヘッダーフィールドのdata_headerへのマッピングの例が表12及び表13に示されている。アップストリームポートの場合に、A2FはCXLからのH2Dに対応し、F2AはCXLからのD2Hに対応する。ダウンストリームポートの場合に、A2FはD2Hに対応し、F2AはH2Dに対応する。いくつかの実装態様では、CXL.cache及びCXL.memのこれらのチャネルでサポートされる仮想チャネルは1つだけである。
【0051】
【表12】
表12:アップストリームポートのCXL.cacheプロトコルのdata_headerへのマッピング
【0052】
【表13】
表13:ダウンストリームポートのCXL.cacheプロトコルのdata_headerへのマッピング
【0053】
同様に、表14及び表15は、CXL.memのDATAヘッダー信号への例示的なマッピングを示す。64Bのデータを伝送するインターフェイスの場合に、64B転送が1サイクルに亘って送信される。ヘッダー全体も1サイクルに亘って送信される。32Bのデータを伝送するインターフェイスの場合に、data_bodyは256ビット幅であり、64B転送は2サイクルに亘って送信される。data_eop信号はサイクル2でアサートする必要があり、data_headerは2つのサイクル間で均等に分割される。data_headerがHビット幅の場合に、必要に応じて予約ビットでパディングすることによってもHが作成される。H/2ビット([H/2-1:0])は第1のサイクルで送信され、残りのビットは第2のサイクルで送信される。16Bのデータを伝送するインターフェイスの場合に、data_bodyは128ビット幅であり、64B転送は4サイクルに亘って送信される。data_eop信号はサイクル4でアサートする必要があり、data_headerは4つのサイクルの間で均等に分割される。data_headerがHビット幅の場合に、必要に応じて、予約ビットでパディングすることにより、Hは4の倍数になる。数ある例の中でも、H/4ビット([H/4-1:0])が第1のサイクルで送信され、([H/2-1:H/4])が第2のサイクルで送信され、([3H/4-1:H/2])は第3のサイクルで送信され、残りのビットは第4のサイクルで送信される。アップストリームポート及びダウンストリームポートのそれぞれについて、CXL.memデータヘッダーフィールドのdata_headerへのマッピングの例が表14及び表15に示されている。アップストリームポートの場合に、A2FはCXLからのM2S RwDに対応し、F2AはCXLからのS2M DRSに対応する。ダウンストリームポートの場合に、A2FはS2M DRSに対応し、F2AはM2S RwDに対応する。
【0054】
【表14】
表14:アップストリームポートのCXL.memプロトコルのdata_headerへのマッピング
【0055】
【表15】
表15:ダウンストリームポートのCXL.memプロトコルのdata_headerへのマッピング
【0056】
インターフェイスのDATA層の更なる構成を可能にし得る様々なパラメータを、UFIに提供することができる。例えば、DataHdrSepパラメータを規定し、そのパラメータの値を設定して、ペイロードがDATAチャネルの対応するヘッダーをどのように続くかを規定できる。例えば、DataHdrSepパラメータは、ペイロードが、パラメータ値で規定される0~3サイクルの固定間隔で対応するヘッダーの送信に続くことを示す。このパラメータは、独立した制御を可能にするために、各方向(A2F及びF2A)に規定できる。DataHdrSepパラメータの値セットは、所与のUFIの全てのプロトコルに適用できる。固定間隔によって、ペイロードに個別の有効な指標がなくてもペイロードを送信できる。
【0057】
いくつかの実装形態では、UFIは、プロトコル内又はプロトコル間でのパケット内レベルのインターリーブを許可しない場合がある。例えば、パケットがインターフェイスを介して送信を開始した後に、同じプロトコル又は別のプロトコルからの異なるパケットが送信を開始する前に、最後のパケット(EOP:end of packet)が到達してアサートされるまで、UFIによってパケットがインターフェイスを介して送信されることがある。この特徴を採用する実装形態では、インターフェイスはこの簡素化から恩恵を受ける可能性があり、数ある例示的な利点及び代替の実装形態の中でも、ファブリック及びエージェントの設計を簡素化できる。
【0058】
エージェント又はファブリックによって生成された要求の場合に、受信エージェント又はファブリックは、RSP物理チャネルを用いて対応する応答を送り返す。そのような応答には、完了、スヌープ応答等が含まれ得る。UFIは、RSP層信号がA2F及びF2A方向で対称であることを提供するが、いくつかのプロトコルは信号を対称的に使用しない(及び、使用する必要がない)場合がある。この場合も、CXL.cache及びCXL.mem等のプロトコルは対称的ではないため、こうして、CXL.cache及びCXL.memのアップストリーム及びダウンストリームバージョンを異なるマッピングプロトコルとして実装できる。表16は、UFIの実装における信号の例を示しており、方向列は、パケットの送信側(Tx)及びパケットの受信側(Rx)の観点から信号の方向を特定する。
【0059】
【0060】
REQ及びDATAチャネルと同様に、RSP HDRのサイズは、可変であり、且つインターフェイスを介して転送されているプロトコルに基づいている。複数のプロトコルがインターフェイスを介して伝送される場合に、HDRの幅は、インターフェイスを介して転送されているRSP HDRの最大サイズにサイズ決めされる。予約フィールド幅は、HDRの未使用部分をカバーするために使用され、送信側は予約ワイヤ(フィールド)で0を駆動し、受信側はこのフィールドを無視する。さらに、REQ及びDATAチャネルと同様に、個々のプロトコルはRSP HDR信号にマッピングされ得、それぞれのプロトコルに応じて異なるプロトコル固有のヘッダーフィールドの幅が規定される。表17及び表18は、アップストリームポート及びダウンストリームポートのCXL.cacheのマッピング例を示している。CXL.cacheの例では、アップストリームポートにおいて、A2FがH2D応答にマッピングされ、F2AがD2H応答にマッピングされる。ダウンストリームポートの場合に、A2FはD2H応答にマッピングされ、F2AはH2D応答にマッピングされる。場合によっては、(例えば、CPIインターフェイスでの)CXL.cache及びCXL.mem実装では、これらのチャネルで単一の仮想チャネルがサポートされる。
【0061】
【表17】
表17:アップストリームポートのCXL.cacheのHDRへのマッピング
【0062】
【表18】
表18:ダウンストリームポートのCXL.cacheのHDRへのマッピング
【0063】
同様に、CXL.memヘッダーのUFI RSP HDR信号への例示的なマッピングでは、異なるフィールドの幅は、表19及び表20に示されるように、プロトコルで規定され得る。CXL.memの場合であって、アップストリームポートの場合に、F2AはS2M NDRにマッピングする。ダウンストリームポートの場合に、A2FはS2M NDR(No Data Response)にマッピングする。
【0064】
【表19】
表19:アップストリームポートのCXL.memのHDRへのマッピング
【0065】
【表20】
表20:ダウンストリームポートのCXL.memのHDRへのマッピング
【0066】
図6は、UFIインターフェイスの例示的なA2F DATAチャネルにおける信号の例示的なタイミング
図600を示す。
図6の例がA2F DATAチャネルを指定しているが、この例で議論する以下の特徴及び原理は、F2A DATAチャネルに等しく適用し得ることを理解すべきである。また、
図6の例はDATAチャネルを対象にしているが、同様の原理及び動作が他のUFIチャネルタイプ(RSP及びREQ)を支配し得ることを理解すべきである。DATAチャネルに含めるために規定された信号には、数ある例の中でも、クロック信号605、有効データ信号610(例えば、A2F_data_is_valid)、データプロトコルID信号615(例えば、A2F_data_protocol_id)、データ仮想チャネルID信号620(例えば、A2F_data_vc_id)、共有クレジット信号625(例えば、A2F_data_shared_credit)、データヘッダー信号630(例えば、A2F_data_header)、最後のパケット(を示すパケット終了)信号635(例えば、A2F_data_eop)、及びデータペイロード信号640(例えば、A2F_data_payload)が含まれ得る。チャネル内の各信号(例えば、605、610、615、620、625、630、635、640)は、(例えば、上記表6、表11、及び表16に示される例と一致して列挙された)1つ又は複数の物理レーンのセットから構成され得る。
【0067】
図6の特定の例では、各信号線は、クロックサイクル605毎に1回、ロー(low)値とハイ(high)値との間でトグルし得る。有効データ信号610は、ハイの場合に、有効データを送信すべきであることを示し得る。従って、データヘッダー信号630のレーンは、ヘッダーの送信の開始が有効信号と(例えば、サイクルx2で)整列される(aligned with:合う)ように、対応するペイロードデータのヘッダーを具現化するデータでエンコードされ得る。データプロトコルID信号615、VC ID信号620、及び共有クレジット信号625で送信された値はまた、有効信号610及び/又はヘッダーと整列されて、ヘッダー(例えば、CXL.mem)及びそのペイロードデータに適用される(潜在的に複数のプロトコルの)特定のプロトコルだけでなく、送信に使用される仮想チャネル(例えば、VC0)及びヘッダーによって使用されるクレジットタイプ(例えば、共有又は専用(VC毎))を識別することもできる。共有クレジット信号625が、専用クレジットが使用されていることを示すとき(例えば、信号625がロー、又は「0」のとき)、整列されたVC ID信号は、専用クレジットのVC IDも識別する。ヘッダーのサイズ及びヘッダー信号の幅に応じて、ヘッダーを送信するために複数のクロックサイクル(例えば、2サイクル)を必要とする場合がある。データの一部又は「ポンプ(pump)」(例えば、単一のフリットとして具体化される)は、単一のクロックサイクル内で複数のレーンで送信され得る。同様に、ペイロードデータレーン640は、ペイロードデータでエンコードしてもよく、ペイロードデータの送信のタイミングは、対応するヘッダーの送信に基づいてもよい。
【0068】
図6の例では、チャネルは、ペイロードデータの開始(例えば、648、649)と対応するヘッダーデータの開始(例えば、644、646)との間に遅延又は分離がないように構成され得る。従って、そのような例では、ペイロードデータ(例えば、ペイロードポンプ648)の開始は、ヘッダーデータ(例えば、ヘッダーポンプ0 644)の開始に合わせて送信され得る。チャネル上で送信された信号から、受信側は、ペイロードデータがヘッダーに関連付けられていることや、データが(整列されたプロトコルID信号615に基づく)CXL.memプロトコルに従っており、且つ(整列された仮想チャネル信号620に基づく)仮想チャネルVC0に関連付けされていることを識別し得る。受信側はさらに、整列された共有クレジット信号625(及び、VC ID信号)から、ヘッダーによって使用されているクレジットの性質を識別し得る。
【0069】
パケット終了信号630を使用して、所与のパケットのデータの最後のポンプ又はフリットがいつ(例えば、どのフリット又はクロックサイクルで)送信されているかを示すことができる。例えば、一実装形態では、EOP信号630の値がローの場合に、それは、チャネル上で送信されているペイロードデータ(及び/又はヘッダーデータ)が、パケットのデータの最後のポンプでは「ない」ことを示し得る。しかしながら、EOP信号630がハイの場合に、これは、ペイロードデータのポンプ(例えば、650)がパケットの最後のデータであることを示し、それにより1つのパケットの最後を示し、それによってこれらの信号(例えば、ペイロード及びヘッダー信号)で受信した後続のデータは、後続の異なるパケットに属していることを示し得る。例えば、EOP信号635は、ヘッダー644及びペイロード648の第1のポンプが送信されるときに、クロックサイクルx2でロー(low)であるが、対応するパケットの終了を示すために最後のポンプ(例えば、646、650)が送信されるときに、クロックサイクルx3でハイ(high)に遷移する。
【0070】
図6の例にさらに示されるように、有効信号610を利用して、チャネル上でのパケット(及び、それに対応するデータ及びヘッダーフリット)の送信を中断することができる。実際に、valid(有効)はメッセージの途中でデアサートする可能性があり、これによりvalidが再度アサートされるまで転送を一時停止する。例えば、EOP信号635は、クロック信号x5においてローになり、有効信号610がハイになり、新しいパケットの開始、ヘッダー信号630上の対応するヘッダーデータ(例えば、656)、及びペイロード信号640上のペイロードデータ(例えば、660)を示すことができる。これらの原理の例示を簡略化するために、この次のパケットはまた、送信するために2クロックサイクル、又はフリットを必要とし得る。しかしながら、2つのポンプのヘッダー及びペイロードデータ(例えば、656、658及び660、662)を連続したクロックサイクルで送信するのではなく、有効信号610をクロックサイクルx6でローにして、パケットの送信を中断することができる。後続のサイクル(クロックサイクルx7)で有効信号610をハイに戻して、最後のヘッダーポンプ658及びペイロードポンプ662を(ヘッダー信号630で送信された対応するヘッダーの各ポンプ(例えば、656、658)と整列されるプロトコルID615、VD ID620、及び共有クレジット625信号のデータと共に)送信できるようにする。さらに、最後のパケットを示すパケットの最後のヘッダーポンプ658の送信に合わせて、EOP信号635をハイに戻すことができる。
【0071】
チャネルを介して(例えば、ペイロードデータ648、650、660、662等として)送信されているチャネルデータに加えて、以下でより詳細に議論するように、(共有クレジットと専用クレジットとの両方の)クレジットリターンのフローが、対応するチャネルのF2A方向で受け取られ得る。これらのクレジットリターンは、チャネルのA2F方向で同時に送信されているパケットに関連付けられたトランザクションとは全く関係がない場合がある。
【0072】
いくつかの実装形態では、エージェント及びファブリック(及び、ファブリックを介して接続された他のエージェント及びコンポーネント)は、クロックを共有することができる。他の実装形態では、1つ又は複数のエージェントは、ファブリックによって利用されるクロックとは別のクロックを利用することができる。さらに、いくつかの実装態様では、エージェント及びファブリックを個別にリセットできる。初期化フローにより、同期ハンドシェイクが保証され、パケット転送が開始する前に送信側と受信側との両方の準備が整っていることを確認する。UFIインターフェイスは同期であるが、それは、受信側でクロッククロッシング(clock crossing)キュー(例えば、先入れ先出し(FIFO))を配置できる。クロッククロッシング(及び、対応するクロッククロッシングFIFO)によるFIFOバックプレッシャーの問題に対応するために、UFIはブロッキング信号(例えば、*_block及び*_txblock_crd_flow)を規定する場合があり、これは、追加メッセージの注入(injection)を潜在的に停止又はブロックするために受信側によって日和見的にアサートされ得る。UFIはさらに、ブロッキング信号のアサーションとメッセージ注入の実際のブロッキングとの間の遅延を構成可能に調整するために、ブロッキング信号の構成を有効にすることができる。例えば、ブロッキング信号は、構成されたクロックサイクル数(例えば、1~3クロック)の間に、メッセージの注入がブロックされるのを可能にするために、送信側におけるタイミング要件を満たすように構成され得る。クロッククロッシングが存在しない実装形態では、ブロッキング信号は、使用できず、(例えば、0に)結び付けることが許可される。いくつかの実装形態では、初期化信号は、数ある例示的な特徴及び実装形態の中でも、簡素なシンクロナイザーを介してクロックの差をサポートし、クロック比についての仮定を行わない。
【0073】
図7のタイミング
図700に移ると、
図6の例の代替の実装形態が、チャネルに対するブロッキング信号(例えば、705)の影響だけでなく、ヘッダーからペイロードへの分離パラメータの非ゼロ値への構成を示すために、例示の目的で提示されている。UFIのいくつかの実装態様では、(チャネル上の受信側から送信側への)ブロッキング信号の送信により、送信側は有効信号をデアサートし、(例えば、
図6の例に示されるように)パケット又はメッセージの送信の際に停止又は中断させ得る。受信側からのブロッキング信号705の送信により、有効信号が直ぐにデアサートされない場合があり、代わりに、パラメータは、送信側がブロッキング信号の送信後に有効な規定された(非ゼロの)クロックサイクル数をデアサートするルールを規定するように構成され得る。例えば、
図7の例では、(例えば、クロックサイクルx3での)ブロッキング信号705の受信は、有効信号705がクロックサイクルx6でローになるように、(構成された値に基づいて)3クロックサイクル後にvalid(有効)705のデアサートを強制することである。
図7にも示されているように、ブロッキング信号は、複数の連続するサイクル(例えば、クロックサイクルx5~x10)でアサートされ得、3つのクロックサイクルがブロック信号705(図示せず)のデアサートに続くまで、(例えば、クロックサイクルx8から)3サイクル後の有効信号の関連するデアサートに基づいて対応する停止を生じさせる。結果は、
図6の例におけるタイミングと一致するタイミングでのヘッダーポンプ644、646、656、658の送信である。
【0074】
図6の例とは逆の例として、
図7は、非ゼロのペイロードオフセットパラメータの使用を示している。例えば、データヘッダー分離パラメータ(例えば、A2F_DataHdrSep)は、ヘッダーの開始から対応するペイロードの開始までの望ましいオフセットを提供するように構成できる。
図7の例では、データヘッダー分離パラメータは2クロックサイクル分離(間隔)に設定され、それによって各ペイロードポンプは、(対応するヘッダーポンプ(例えば、644、646、656、658)が整列される)ハイ状態の有効信号610に続く2クロックサイクルで送信される。
図6及び
図7に示される例は、ヘッダーを送信するために使用されるサイクル数と対応するペイロードを送信するために使用されるサイクル数との間の相関を示すが、いくつかの実装形態では、ペイロードを送信するには、ヘッダーよりも多くのクロックサイクルを必要とする場合がある。そのような場合に、対応するヘッダーポンプなしでペイロードポンプ(又は、フリット)を送信できる。他の実装形態では、関連する各ペイロードポンプに対応するために、数ある他の例示的な実装形態の中でも、ヘッダーのコピーを送信できる。
【0075】
例えば、
図7において、valid(有効)はクロックサイクルx2及びx3でアサートされ得、ヘッダーポンプ644、646の結果(及び、プロトコルID615、VC ID620、及び共有クレジット625信号の対応する値)も同じクロックサイクルで送信される。さらに、2サイクルのデータヘッダー分離パラメータに基づいて、ヘッダー(例えば、ポンプ644、646)に関連するペイロードデータ(例えば、ポンプ648、650)の送信は、サイクルx2及びx3で有効であるとのアサーションから2サイクル遅れることがあり、それによって関連するペイロードデータポンプ(例えば、648、650)がサイクルx4及びx5で送信される。場合によっては、この遅延は、
図7の例のように、先行するパケットのペイロードデータ(例えば、650)が、後続のパケットのヘッダーデータ(例えば、656)と同じサイクルで送信されることになる場合がある。この同じ遅延が、数ある例の中でも、チャネル上の後続の全てのパケットのペイロードデータ(例えば、クロックサイクルx5及びx7での有効なアサーションに合わせて送信されたヘッダーポンプ656、658に対応するペイロードポンプ660、662)に適用され得る。
【0076】
図6及び
図7は、UFIインターフェイスの対応する一般的な原理を示すために、ここに示され説明される非限定的な簡略化した例示的な例として理解すべきである。実際に、UFI DATAチャネルへの適用として
図6及び
図7に示される原理及び特徴は、他のUFIチャネルに等しく適用され得、特にUFI REQ及びRSPチャネルの信号の少なくともいくつかに等しく適用され得る。例えば、REQ及びRSPチャネルでは、対応するヘッダー信号(例えば、REQ HDR又はRSP HDR)だけでなく、それぞれのチャネルで提供される対応するフロー制御及びプロトコル識別子信号に合わせて、それぞれの有効信号を含めてアサートできる。REQ及びRSPチャネルはまた、受信側がチャネル上のメッセージを停止することを可能にするために(例えば、FIFOバックプレッシャーを緩和することを試みるために)それぞれのブロッキング信号を含み得る。同様に、受信側から送信側へ向けられたクレジットリターンチャネル(そのチャネルの専用クレジットと共有クレジットとの両方)は、数ある例示的な特徴の中でも、チャネルで送信されたパケット及びメッセージと並行してそのようなクレジットリターンを行うために提供され得る。
【0077】
図8は、例示的なUFIインターフェイスのチャネルを介したクレジットリターンの簡略化した例を示すタイミング
図800を示す。例えば、各物理チャネルは、受信側からのクレジットリターンインターフェイスを含み得る。このセクションでは、CHANは特定の物理チャネル(REQ、DATA、RSP)のうちの1つの抽象化を指す。例えば、チャネルには、数ある例示的な信号の中でも、クレジットリターン(及び、
図7の例において議論したブロッキング機能と同様の機能)のためのブロッキング信号(例えば、805)、共有クレジットリターン信号810、クレジットリターン有効信号815(これは、
図6及び
図7の例で議論した有効信号と同様に機能し得る)、(専用クレジットリターンが適用される仮想チャネルを識別するための)VC ID信号820、及びクレジットリターンのためのプロトコルID信号825が含まれ得る。そのようなクレジットリターン信号は、上記の表6、表11、及び表16で議論した例に従うことができる。
【0078】
図8の例では、UFIインターフェイスの実装形態において、*CHAN_rxcrd_shared信号がアサートされる810ときに、それは、共有クレジットが返されていることを示す。*CHAN_rxcrd_valid信号815のアサーションは、専用クレジットが返されていることを示す。共有クレジット及び専用クレジットは、チャネルのクレジットリターンインターフェイスを介して並行して同時に返すことができる。*CHAN_rxcrd_VC_ID820は返された専用クレジットのVC IDを示し、*CHAN_rxcrd_protocol_ID信号825は返された専用クレジットのプロトコル(複数のプロトコルがチャネルでサポートされている場合)を識別する。
図8の例では、クロックサイクルx1~x3の間に、*CHAN_rxcrd_shared810のアサーションによって示されるように、共有クレジットが返される。クロックサイクルx4の間に、(プロトコル2のVC1の場合に)*CHAN_rxcrd_valid815のアサーションによって示されるように、専用クレジットのみが返される。クロックサイクルx5~x8まで、*CHAN_rxcrd_shared810及び*CHAN_rxcrd_valid815との両方がアサートされて、共有クレジットと専用クレジットとの両方が返される。
【0079】
図8にさらに示されるように、受信側がクレジットリターンのフローを一時停止又は停止できるように、ブロック信号が、UFIインターフェイスにおけるクレジットリターン信号セットのいくつかの実装形態において適用され得る。例えば、クロックサイクルx7では、ブロッキング信号*CHAN_Txblock_crdフロー805がアサートされ、これにより、ブロッキング信号805がアサートされた後に、クロックサイクル数が返されてクレジットが停止される。サイクル数は、構成可能なパラメータに従って規定され得る。例えば、
図8の例では、パラメータは2サイクルに設定されており、*CHAN_rxcrd_shared810と*CHAN_rxcrd_valid815との両方のデアサートによって示されるように、サイクルx9でクレジットリターンが停止される。ブロッキング信号805が(例えば、クロックサイクルx8で)デアサートされると、(例えば、構成されたパラメータに関連して2サイクル後に)クレジットリターンの継続が許可される。
図8の例を続けると、数ある例示的な実施形態の中でも、クロックサイクルx9で、ブロッキング信号805が再度アサートされ、その結果、2サイクル後にクレジットリターンの一時停止が再び開始する。
【0080】
いくつかの実装形態では、クレジットリターン及びアカウンティングの維持を容易にするために、リンクの送信側は、サポートされるクレジットタイプ(共有タイプと専用タイプとの両方)毎にクレジットカウンター(例えば、8ビットのクレジットカウンター)を含み得る。従って、クレジットを返すリンクの受信側は、数ある特徴の中でも、クレジットカウンターの粒度(例えば、対応する8ビットカウンター(例えば、255クレジット)に収まるだけのもの)に従ってクレジットを返す必要がある。
【0081】
本明細書で説明するように、UFIのいくつかの実装形態では、対応する仮想チャネル(VC)と仮想ネットワーク(VN)との両方が、ベースラインチャネル規定を超えてメッセージを更なるフロー制御クラスに分離することができる。ベースラインチャネルフロー制御は、各プロトコル内のトラフィックのクラス毎に非ブロッキングフロー制御を提供する。いくつかのインスタンスはプロトコルの複数の仮想チャネル及びトラフィッククラスを提供し得るが、他の実装形態及びアプリケーション(及び、対応するプロトコル(例えば、CXL.cache及びCXL.mem))では、物理チャネル毎、方向毎に単一の仮想チャネルしか提供できない。UFIのいくつかの実装態様では、数ある例示的な特徴の中でも、サービス品質のメトリック及び/又は適用を支援するために追加のフィールドが提供される場合がある。
【0082】
いくつかの実装形態では、エージェントは、(ネットワーク層の依存を含む)依存なしにシンク(sink)することが保証される(例えば、VC_IDSのための)共有クレジットのみを通知することができる。これは、VC_ID毎の専用クレジットの必要性を回避するために行うことができる。プロトコルエージェントのRSPチャネルは、これが可能な例であり、例えば、応答を受け入れることができる事前に割り当てられた追跡構造がある。
【0083】
不正なフロー制御の場合のエラー処理は、未規定の動作を生じさせる可能性がある。従って、エージェントとファブリックコンポーネントは、レジスタ転送ロジック(RTL)でアサーションをトリガーする不正なケースをチェックするロジックを備えている場合があり、さらにエラーイベントをログに記録するか、致命的なエラーを示す信号を送信して、デバッグ又は修復を可能にし得る。検出される可能性のあるこのようなエラー条件には、数ある例の中でも、パケットが完了しておらず(例えば、2FLITメッセージエンコーディング中であるが、EOPが第1のFLITに設定されている場合)、キューのオーバーフローを受信し、FIFOオーバーフロー条件をクロッククロッシングするときに、最後のパケット(EOP)信号のアサーションが含まれる。
【0084】
いくつかの実装形態では、状態マシン又は他のロジックが、UFIの規定された接続及び切断フローに参加するために、エージェント及びファブリックデバイス上に提供され得る。例えば、そのようなフローは、数ある例示的な状態又はイベントの中でも、ブート/リセット中に、及び低電力モードに入るときに呼び出される。いくつかの実装態様では、UFIは初期化フェーズを規定し、このフェーズでは、接続が確立された後に、受信側(RX)でのクレジットの可用性に関する情報が送信側(TX)に通知される。場合によっては、リセットはUFIのエージェント側とファブリック側との間で個別にデアサートできる。独立リセットの場合に、リセット時に初期化信号が(例えば、グローバルチャネルで)切断状態に駆動され得、初期化が接続状態になるまでトラフィックが送信されない場合がある。切断フローは、例えば、クレジットを再構成して省電力を実現するために、エージェントによってさらにサポートされ得る。このフローがない場合に、全てのCPIクレジットは、最初の接続を続行する前に最終値に構成され得る。
【0085】
UFI内の接続は、A2F及びF2A方向に分離され得る。接続のシグナリングは、システムのエージェント305をファブリック150に結合するUFIインターフェイスの初期化グローバル物理チャネルにある。例えば、
図9は、UFIインターフェイスを初期化する際に使用するための信号セット905、910を含む、UFIインターフェイスのグローバルチャネルの例を示す。例えば、A2F初期化信号セット905及びF2A初期化信号セット910が提供され得る。リセット信号(例えば、915、920)は、エージェント及びファブリックレベルでさらに規定でき、これにより、ソフトウェア又はハードウェアコントローラがエージェント305及び/又はファブリック140のリセットを開始できる。A2F及びF2Aグローバル信号セットのそれぞれには、送信側接続要求(txcon_req)信号、受信側接続確認(rxcon_ack)信号、及び受信側切断NACK(rxdiscon_nack)信号が含まれ得る。この3つの信号セット(例えば、txcon_req信号、rxcon_ack信号、及びrxdiscon_nack)は、初期化状態を規定し、これらの状態同士の間の遷移を生じさせ得る。場合によっては、グローバル初期化信号セット905、910は、数ある例示的な信号の中でも、受信側キューが全てのチャネルに関して空であり、クレジットが返されたことを識別するために、rx_empty信号も含み得る。
【0086】
初期化において、UFIインターフェイスのエージェント側及びファブリック側は、同時に又はその近くでリセットされないようにされ得る。インターフェイスの一方の端(例えば、リセットから復帰した後に)には、もう一方の端がリセットから復帰するタイミングに関する暗黙の要件がない場合がある。いくつかの実装態様では、UFIは、エージェントとファブリックとの間の初期化中に明示的なハンドシェイクを規定して、任意のクレジット又はトランザクションがUFIインターフェイスで送信される前に、両方のエンドポイント(及び、それらの間の全てのパイプライン段階)がリセットされないようにする。従って、リセット後に、受信側は専用のVCバッファ及び共有バッファのクレジットの送信を開始することができる。いくつかの実装態様では、UFIは、クレジットリターンのために実行中に送信側によって送信されるブロッキング信号をサポートし得る。
【0087】
図10は、UFIの例示的な実装形態における初期化状態のための例示的な状態マシンを示す
図1000である。状態には、切断(disconnected)状態1010(リセット1005に基づいて入力され得る)、接続中(connecting)状態1015、接続(connected)状態(1020、1035)、切断中(disconnecting)状態1025、及び拒否状態1030が含まれ得る。txcon_req信号、rxcon_ack信号、及びrxdiscon_nack信号の値の組合せは、それぞれの初期化状態を示し得る。例として、切断中の状態1025では、txcon_req信号がローであり得、rxcon_ack信号がハイであり得、rxdiscon_nackがローであり得る。信号値の特定の1つを変更すると、ある初期化状態から別の初期化状態に遷移し得る。例えば、
図10の状態マシンの例に示されるように数ある例の中でも、切断中の状態1025で、rxcon_ack信号をハイからローに変更すると切断状態1010に移行し得る一方、rxdiscon_nack信号をローからハイに変更すると拒否状態1030に移行し得る。UFIインターフェイスでは、それぞれの初期化状態を使用して、以下の表21で説明する例示的な動作等、受信側及び送信側によって実行される動作を決定する。
【0088】
【0089】
シグナリングルールは、グローバル初期化信号セットに対して規定され得る。一例では、txcon_req信号は、0から1への遷移が接続要求を反映し、1から0への遷移が切断要求を反映するように規定され得る。クレジットリターン信号は、例えば、クレジット有効(crd_valid)信号及びクレジット共有(crd_shared)信号とともに提供され得る。一例では、crd_valid=は、プロトコルID及び仮想チャネルIDの専用メッセージクレジットを解放することを意味するように規定でき、crd_shared=1は、共有クレジット(専用メッセージクレジットリターンと並行して発生する可能性がある)を解放(release)することを意味する。いくつかの実装態様では、クレジットリターンは、クレジットの最初の初期化中に、実行中のクレジットリターンと同じように動作する。rx_empty信号は、受信側から返された全てのチャネルクレジットと全ての受信側キューが空であることを示す(が、これは、数ある例示的な問題の中でも、進行中のメッセージ又はクロッククロッシングキュー等の中間バッファにあるメッセージとは限らない)。いくつかの実装態様では、送信側は切断を開始する前にrx_emptyをチェックする。チェックすることで、切断が迅速に受け入れられる可能性が高くなる(例えば、受信側でまだ登録されていない可能性のある進行中の要求がない場合)。いくつかの実装形態では、切断受け入れの可能性をさらに高めるために、送信側は、数ある例示的な特徴の中でも、受信側パイプラインが受信側キューに流れる時間を有するように、最後の有効なメッセージが送信された後にタイマー遅延を実装することができる。いくつかの実装態様では、初期化中に、クレジットが利用可能になり、且つrx_emptyアサーションに依存しなくなると直ぐに、送信側はメッセージを送信する。あるいはまた、送信側は、初期化後に、rx_emptyがアサートされるまで、パケットの送信を停止する場合があり、送信側は、受信したクレジットを、受信側が通知した合計クレジットの指標として使用できる。
【0090】
UFIインターフェイスの例示的な実装形態では、送信側は、任意の所与の物理チャネル上のメッセージについて十分な数のクレジットを受信すると、パケットを送信することができる。送信は、正しいクレジットがあるかどうかにも依存する。共有クレジットは任意のメッセージよって使用され得、専用クレジットは単一のVC及びプロトコルの組合せのメッセージでのみ使用される。いくつかの実装態様では、受信側は、CHAN_txblock_crd_flowがアサートされた後に、Nサイクルに亘ってクレジットリリースを停止し得る。構成可能なAgentBlockingパラメータは、Nサイクルの値を規定する。crd_valid及びcrd_shared信号が対応するブロック又はブロック解除を反映するまで、txblock_crd_flow状態の変化の間にNサイクルの遅延が発生する。このようなブロッキング信号は、例えば、クレジットリターンのクロッククロッシングのインスタンスで使用でき、例えば、クロッククロッシングFIFOの空きエントリがNの場合に、txblock_crd_flowがアサートされる。クロッククロッシングが問題にならない実装形態では、数ある例示的な実装形態の中でも、txblock_crd_flow信号は0に結び付けることができる。
【0091】
UFI実装で規定され得るシグナリングルールの更なる例として、接続ACKは、常に接続要求に従うように規定され得る。上記のように、接続要求は、txcon_reqが0から1に遷移することで通知され得る。この遷移は、送信側がクレジットを受信する準備ができており、正常に動作していることの指標として機能する。ACKは、rxcon_ackが0から1に遷移することで通知され得る。ACKは、受信側が完了する準備ができるまで、任意の時間に亘って停止し得る。同様に、切断ACK又はNACKは、切断要求に従うように規定できる。切断要求は、txcon_reqが1から0に遷移することで通知され得る。切断ACKは、rxcon_ackが1から0に遷移することで通知され得る。切断NACKは、rxdiscon_nackが0から1に遷移することで通知され得る。数ある例示的なポリシー及び実装形態の中でも、ルールは、受信側が受信する各切断要求に対してACK又はNACKで応答することを受信側に要求するように規定され得る。
【0092】
図11に移ると、リセットから接続状態へのUFIインターフェイスの初期化のための例示的なタイミング
図1100が示されている。
図11に示される特定の例では、UFIインターフェイスのグローバルチャネルで初期化信号を利用する例示的なA2F初期化フローが示されている。A2Fフローの対応するもの(例えば、ミラー)は、F2A方向において反対のドライバを用いて実装してもよいことを理解すべきである。
図11に示されるように、初期化信号セットには、受信側切断NACK信号1110、受信側接続ACK信号1115、及び送信側接続要求信号1120が含まれ得る。エージェントリセット信号915(エージェントをリセット状態に入れる)、ファブリックリセット信号920(ファブリックをリセット状態に入れる)を含む追加の信号が、特定の特徴を例示するために示される。また、UFIチャネルのクレジットリターン信号セット1125の少なくとも1つの表現(例えば、REQ、DATA、及びRSPチャネルのうちの1つ又は複数のクレジット信号セット)も示される。
図11及び
図12の例示において、信号名の後の「F」は、信号のドライバとしてのファブリックを表し、「A」は、信号のドライバとしてのエージェントを表す。
【0093】
接続状態に入るには、送信側がリセット(例えば、対応するリセット信号(例えば、915、920))から外れると、その送信側は、受信側への要求を識別するために、txcon_req信号1120をアサートすることができる。同様に、受信側がリセットから外れると、その受信側は、txcon_req信号1120での接続要求を待つ。接続要求のアサーションは、リセット(例えば、915)がアサートした後に、任意のサイクル数にすることができる。接続が完了するまで、txcon_req信号1120は、アサートされたままであり、切断フローの一部としてのみデアサートされる。txcon_req信号1120での接続要求を受け取ると、受信側は、要求を確認するために、rxcon_ack信号1115をアサートする。rxcon_ack信号1115は、リセット(例えば、ファブリックリセット920)とtxcon_req信号1120との両方がアサートされた後にアサートされ得る。rxcon_ack信号1115は、アサートされたままであり、切断フローでのみ最初にデアサートされる。
【0094】
このシーケンスによって、初期化リンク状態1105が、切断状態から接続中の状態を経て接続状態に進むことが可能になり得る。接続状態に入ると(及び、rxcon_ack信号を送信すると)、受信側は(例えば、クレジットリターンワイヤ1125上で)直ぐにクレジットを返し始めることができる。実際に、受信側はrxcon_ack信号のアサーション1115と同時にクレジットを返し始めることができる。従って、送信側(例えば、エージェント)は、txcon_req信号1120を(例えば、クロックサイクルx4で)アサートするとクレジットリターンを受け入れる準備ができている。これは、例えば、中間バッファリング又はクロッククロッシングによりA2F_rxcon_ackが観測される前にクレジットリターンが観測される可能性があるためである。パケットを送信するための最小のクレジットが受信されると、送信側はチャネルを介してパケット又はメッセージの送信を開始できる。再接続フローは、本明細書で説明するリセットフローからの接続と同様に実装できるが、新しいクレジットの初期化を開始するには、数ある例示的な実装形態の中でも、受信側はそのクレジットカウンターを最初にリセットして値をリセットし、送信側は、その利用可能なクレジットカウンターをゼロにリセットする。
【0095】
図12に移ると、例示的なUFIインターフェイスの例示的な切断及び再接続フローを示す例示的なタイミング
図1200が示されている。この例では、送信側は、時間x3での切断を容易にするためにtxcon_req信号1120をデアサートすることができる。いくつかの実装形態では、切断の進行を可能にするために、txcon_req信号1120をデアサートする前に、rxdiscon_nack信号1110がデアサートされる。切断が要求されると、送信側はどのチャネルでもメッセージを送信しなくなる(例えば、CHAN_is_validビットのアサーションで示される)。送信側による切断フローの開始に基づいて、受信側は切断を確認する(ACK)か、又は否定的に確認する(NACK又は拒否)かを決定する。切断を確認するために、受信側は、全てのパイプラインが空であることを(例えば、クロックサイクルx4で)確認した後に、rxcon_ack信号1115をデアサートし、これは、(リンク状態インジケーター1105によって反映される)切断状態へのエントリをマークする。場合によっては、受信側は全てのクレジットが返されたことを確認することもできる。
【0096】
図12のダイアグラム1200は、切断要求が受信側によって肯定応答された例を示す。
図13は、受信側が否定応答(つまり、NACK)で応答する反対の例を示す。例えば、否定応答を送信するために、受信側は、代わりにrxdiscon_nack信号1110を(例えば、クロックサイクルx4で)アサートし得る。例えば、数ある例示的なの理由の中でも、受信側がデッドロック(deadlock)のリスクなしにそのパイプラインを流すことができないと判定した場合に、否定応答が選択されることがある。NACKの後に、送信側は、txcon_req信号1120を(例えば、クロックサイクルx5で)再アサートすることができる。送信側による受信側のNACKのこの効果的な確認を遵守すると、rxdiscon_nack信号1110を(例えば、
図13の例のクロックサイクルx6で示されるように)デアサートすることができる。
【0097】
いくつかの実装形態では、接続及び切断フローは、開始後数マイクロ秒以内に完了すると予想される。いくつかの実装態様では、タイムアウトを明示的又は暗黙的に規定できる。例えば、受信側は、規定された又は推奨される時間枠内でACK又はNACKで応答するように構成され得る。例えば、エージェント、ファブリック、又はシステム(例えば、SoC)は、タイムアウト又は時間枠を規定して、この予想を実現できる。
【0098】
いくつかの例では、UFIインターフェイスが接続状態にある間に、エージェント又はファブリック要素がリセットすることがあり、突然のリセットを生じさせる。例えば、規定又は推奨されるフローは、リセット前に切断を入力することであり得る。一例として、送信側のtxcon_req信号の値が1である間にリンクの受信側で突然のリセットが発生するため、Rxcon_ack信号が1から0に遷移し得る。このような場合に、送信側はそれ自体を強制的に切断状態にし、初期化を再起動する。送信側がアイドル状態のときにこれ(突然のリセット)が発生した場合に、その送信側はメッセージを失うことなく回復できる。突然のリセットの別の例として、rxcon_ackが1である間にリンクの送信側の突然のリセットが原因でtxcon_req信号が1から0に遷移する場合に、標準の切断フローに従うこことができる。Rxがアイドル状態のときにこれ(突然のリセット)が発生した場合に、Txがリセット状態のままであれば、切断はACKを受信し、切断状態に完全に到達するはずである。ただし、受信側によって切断が拒否(NACK)された場合に、致命的又は不正なリンク状態(例えば、回復不能エラー)が生じる可能性がある。突然のリセットが発生した場合に、トラフィックがアクティブである(例えば、アイドルではない)場合に、プロトコルメッセージが失われる可能性があり、正常な動作を続行するには致命的になる場合がある。
【0099】
上述したように、システム内のUFIインターフェイスは、様々なパラメータに従って構成可能であり得る。例えば、パラメータのセットは、特定のSoC設計等、所与のシステムのユースケース、特徴、プロトコル、及びトポロジーに従って具体的に規定できる。このようなパラメータは、例えば、インターフェイスを介して伝送及びサポートされるプロトコル、ヘッダーのサイズ(従って、対応するチャネルの幅)、ヘッダーとペイロードデータとの間の分離、ブロッキング信号とメッセージ及び/又はクレジットフローの注入阻止との間の遅延、時間枠、他のパラメータの例を規定し得る。いくつかの実装形態では、パラメータは物理チャネル基準毎に規定できる。他の例では、数ある例の中でも、パラメータは、UFIインターフェイスインスタンス全体(例えば、パラメータがインターフェイスの全てのチャネルに適用される場合)に対して規定できる。パラメータ値は、例えば、構成レジスタ又は他のデータ構造に規定及び保存して、インターフェイスを介して接続されたエージェント及びファブリックコンポーネントが使用及び参照できるようにし得る。表22は、UFIインターフェイスのCPI実装の一例で設定できるパラメータの例を示している。
【0100】
【0101】
上記の多くの例は、CXLベースのプロトコルをサポートするUFIを説明しているが、UFIはそれほど限定されず、任意のコヒーレント相互接続プロトコルを潜在的にサポートするように構成でき、数ある例及び代替のユースケース及び実装形態の中でも、これらのプロトコルの対応するヘッダーが、UFIの要求、データ、及び応答チャネルのヘッダー信号にマッピングされることを強調する必要がある。
【0102】
図14A~
図14Bに移ると、本明細書の例示的な実装形態で議論されるような、UFIインターフェイスを使用するための例示的な技法を示す簡略化したフローチャート1400a~bが示されている。例えば、
図14Aの例では、UFIインターフェイスの送信側は、メッセージを受信側にインターフェイスの複数のチャネルのうちの特定の1つ(例えば、REQ、RSP、又はDATA)で送信するために信号のセット内のそれぞれの信号に割り当てられるレーンだけでなく、メッセージの受信側から受け取る信号に割り当てられるレーンから構成され得る。グローバルチャネルは、インターフェイスの初期化を含むインターフェイスの態様を制御するためにそれぞれの信号を送受信する複数のレーンを含み得る。実際に、初期化信号をインターフェイス上で通信して(1405)、チャネルのいずれか1つ(例えば、REQ、RSP、又はDATA)上でメッセージを送信するためにインターフェイスを初期化する(1410)ことができる。チャネル上でメッセージを送信するために、チャネルの1つ又は複数のレーンの専用セットで有効信号を送信し得(1415)、対応するヘッダー信号、VC ID信号、及びクレジットタイプ信号(例えば、共有又は専用)を(例えば、これらの信号が有効な情報を伝送することを示すために)アサートされた有効信号に合わせて送信できる。同じチャネル上で、メッセージ(例えば、要求、データなしの応答、又はデータ転送)の送信側が、クレジットリターンを受信すると同時に、チャネル上の(クレジットリターン信号のセットに割り当てられる)別々のクレジットリターンレーンでメッセージを送信できる。メッセージが完了すると、最後のパケットの信号が(別のレーンで)送信され、メッセージの終わりに対応する最終的なポンプ、フリット、又は他のデータの量を識別する(及び、チャンネル上での次のメッセージの送信を可能にする。)。
【0103】
図14Bの例では、UFIインターフェイスのチャネル(例えば、REQ、DATA、RSP)の受信側(例えば、
図14Bの例で議論した送信側と同じチャネルの受信側)に関連する技法が示されている。例えば、初期化信号を通信して(1435)、インターフェイスを初期化する(1440)ために、受信側にグローバルチャネルを提供することもできる。初期化後に、チャネルの有効信号レーンで有効信号を受信することができ(1445)、対応するヘッダー信号、VC ID信号、及びクレジットタイプ信号をチャネルの対応する別個のレーンで受信することができる(1450)。これらの信号は、有効信号がこれらの信号に適用されることを識別するために、有効信号に合わせて受信され得る(1450)。メッセージは、これらの信号を介してチャネルで受信され、メッセージは、集合信号(及び、プロトコルID信号等の他の信号(複数のプロトコルのうちの、メッセージのヘッダー及び残りの部分に適用される1つを識別する))の情報に基づいて処理され得る(1455)。例えば、メッセージに使用されるクレジットは、数ある例の中でも、クレジットタイプ信号及び(メッセージに適用される仮想チャネルを識別することもできる)VC ID信号で識別することができる。チャネル上でメッセージを受信している間に、チャネルの専用レーン上のチャネルに対して、クレジットリターンを送信できる(1460)。数ある例の中でも、チャネル上のメッセージデータを停止するためのブロッキング信号等の他の信号も送信し得る。メッセージの終わりは、(例えば、EOP信号が有効信号と同じクロックサイクルで送信されるときに)インターフェイスの別の専用レーン上の最後のパケット信号のアサーションに基づいて決定され得る(1465)。メッセージの終わりを決定すると、後続のメッセージがチャネル上で受信され、識別される。
図14A~
図14Bの例におけるフローは、A2F及びF2A(又は、送信/受信、アップストリーム/ダウンストリーム)方向の両方において、インターフェイスチャネル(例えば、REQ、DATA、及びRSP)のそれぞれに亘って共通であり得る。いくつかのチャネル(例えば、DATAチャネル)は、数ある例示的な実装形態の中でも、これらの共通の又は類似のチャネルの信号セットを超えるチャネルの機能に基づいて、追加又は異なる信号を所有し得る。
【0104】
上述した機器、方法、及びシステムは、前述のような任意の電子装置又はシステムで実装され得ることに留意されたい。特定の例示として、以下の図は、本明細書で説明する解決策を利用するための例示的なシステム(例えば、SoC、計算ブロック、ファブリックブロック等)を提供する。以下のシステムをより詳細に説明するため、多くの異なる相互接続、ユースケース、トポロジー、及びアプリケーションが開示され、説明され、上記の議論から再検討される。そして容易に明らかであるように、上記の進捗は、それらの相互接続、ファブリック、又はアーキテクチャ及びそれらの複合コンポーネントのいずれにも適用され得る。
【0105】
図15を参照すると、マルチコアプロセッサを含むコンピュータシステムのブロック図の実施形態が示されている。プロセッサ1500には、マイクロプロセッサ、埋込み型プロセッサ、デジタル信号プロセッサ(DSP)、ネットワークプロセッサ、ハンドヘルドプロセッサ、アプリケーションプロセッサ、コプロセッサ、システムオンチップ(SoC)、又はコードを実行する他のデバイス等の任意のプロセッサ又は処理装置が含まれる。一実施形態では、プロセッサ1500は、少なくとも2つのコア、すなわち、非対称コア又は対称コア(図示の実施形態)を含むことができるコア1501及び1502を含む。しかしながら、プロセッサ1500は、対称又は非対称であり得る任意の数の処理要素を含み得る。
【0106】
一実施形態では、処理要素は、ソフトウェアスレッドをサポートするためのハードウェア又はロジックを指す。ハードウェア処理要素の例には、実行状態又はアーキテクチャ状態等、プロセッサの状態を保持できる、スレッドユニット、スレッドスロット、スレッド、プロセスユニット、コンテキスト、コンテキストユニット、論理プロセッサ、ハードウェアスレッド、コア、及び/又は他の要素が含まれる。換言すれば、一実施形態では、処理要素は、ソフトウェアスレッド、オペレーティングシステム、アプリケーション、又は他のコード等のコードに独立して関連付けることができる任意のハードウェアを指す。物理プロセッサ(又は、プロセッサソケット)は、典型的に、コア又はハードウェアスレッド等、複数の他の処理要素を潜在的に含む集積回路を指す。
【0107】
コアは、大抵の場合、独立したアーキテクチャ状態を維持することができる集積回路上に配置されたロジックを指し、それぞれ独立して維持されたアーキテクチャ状態は、少なくともいくつかの専用実行リソースに関連付けられる。コアとは対照的に、ハードウェアスレッドは、典型的に、独立したアーキテクチャ状態を維持できる集積回路上に配置されたロジックを指し、独立して維持されるアーキテクチャ状態は、実行リソースへのアクセスを共有する。確認されるように、特定のリソースが共有され、他のリソースがアーキテクチャ状態専用になっている場合に、ハードウェアスレッドとコアの名称の間のラインが重なっている。それでも大抵の場合、コア及びハードウェアスレッドは、オペレーティングシステムによって個別の論理プロセッサと見なされ、オペレーティングシステムは各論理プロセッサでの動作を個別にスケジュールできる。
【0108】
図15に示されるように、物理プロセッサ1500は、2つのコア、つまりコア1501及び1502を含む。ここで、コア1501及び1502は、対称コア、すなわち、同じ構成、機能ユニット、及び/又は論理を有するコアと見なされる。別の実施形態では、コア1501は、アウトオブオーダーのプロセッサコアを含み、コア1502は、インオーダのプロセッサコアを含む。しかしながら、コア1501及び1502は、ネイティブコア、ソフトウェア管理コア、ネイティブの命令セットアーキテクチャ(ISA)を実行するように適合されたコア、変換された命令セットアーキテクチャ(ISA)を実行するように適合されたコア、共同設計されたコア、又は他の既知のコア等、任意のタイプのコアから個別に選択できる。異種コア環境(つまり、非対称コア)では、バイナリ変換等のいくつかの変換形式を使用して、一方又は両方のコアでコードをスケジュール又は実行できる。さらに議論を進めるために、コア1501内に示されている機能ユニットを以下でさらに詳細に説明し、コア1502内のユニットが描かれた実施形態において同様の方法で動作する。
【0109】
図示されるように、コア1501は、2つのハードウェアスレッド1501a及び1501bを含み、これらは、ハードウェアスレッドスロット1501a及び1501bとも呼ばれ得る。従って、一実施形態では、オペレーティングシステム等のソフトウェアエンティティは、プロセッサ1500を4つの別個のプロセッサ、すなわち4つのソフトウェアスレッドを同時に実行できる4つの論理プロセッサ又は処理要素と潜在的に見なす。上記で言及したように、第1のスレッドはアーキテクチャ状態レジスタ1501aに関連付けられ、第2のスレッドはアーキテクチャ状態レジスタ1501bに関連付けられ、第3のスレッドはアーキテクチャ状態レジスタ1502aに関連付けられ得、第4のスレッドはアーキテクチャ状態レジスタ1502bに関連付けられ得る。ここで、アーキテクチャ状態レジスタ(1501a、1501b、1502a、及び1502b)のそれぞれは、上述したように、処理要素、スレッドスロット、又はスレッドユニットと呼ばれ得る。図示されるように、アーキテクチャ状態レジスタ1501aは、アーキテクチャ状態レジスタ1501bで複製され、そのため、個々のアーキテクチャ状態/コンテキストは、論理プロセッサ1501a及び論理プロセッサ1501bのために格納可能である。コア1501では、アロケータ及びリネーマ(renamer)ブロック1530内の命令ポインタ及びリネームロジック等、他の小さなリソースもスレッド1501a及び1501bに複製され得る。リオーダー/リタイアメントユニット1535のリオーダーバッファ、ILTB1520、ロード/ストアバッファ、キュー等のいくつかのリソースは、パーティショニングによって共有され得る。汎用内部レジスタ、ページテーブルベースレジスタ、低レベルデータキャッシュ及びデータTLB1515、実行ユニット1540、及びアウトオブオーダーユニット1535の一部等、他のリソースは潜在的に完全に共有される。
【0110】
プロセッサ1500は、大抵の場合、他のリソースを含み、それらリソースは、完全に共有されるか、パーティショニングを通じて共有されるか、又は処理要素によって/処理要素に専用化され得る。
図15において、プロセッサの例示的な論理ユニット/リソースを含む純粋に例示的なプロセッサの実施形態が示されている。プロセッサは、これらの機能ユニットのいずれかを含むか、又は省略し、図示されていない他の既知の機能ユニット、ロジック、又はファームウェアを含み得ることに注意されたい。図示されるように、コア1501は、簡略化した代表的なアウトオブオーダー(OOO)プロセッサコアを含む。しかし、インオーダープロセッサを異なる実施形態で利用してもよい。OOOコアには、実行/行われる分岐を予測する分岐ターゲットバッファ1520と、命令のアドレス変換エントリを格納する命令変換バッファ(I-TLB)1520とが含まれる。
【0111】
コア1501は、フェッチされた要素をデコードするためにフェッチユニット1520に結合されたデコードモジュール1525をさらに含む。一実施形態では、フェッチロジックは、スレッドスロット1501a、1501bにそれぞれ関連付けられた個々のシーケンサーを含む。通常、コア1501は、プロセッサ1500で実行可能な命令を規定/指定する第1のISAに関連付けられる。大抵の場合、第1のISAの一部であるマシンコード命令には、実行すべき命令又は動作を参照/指定する命令の一部(オペコードと呼ばれる)が含まれる。デコードロジック1525は、これらの命令をそれらのオペコードから認識し、第1のISAで規定された処理のためにデコードした命令をパイプラインに渡す回路を含む。例えば、以下でより詳細に説明するように、一実施形態では、デコーダ1525は、トランザクション命令等の特定の命令を認識するように設計又は適合された論理を含む。デコーダ1525による認識の結果として、アーキテクチャ又はコア1501は、適切な命令に関連するタスクを実行するために特定の事前に規定された動作を行う。本明細書で説明しているタスク、ブロック、操作、及び方法のいずれかが、単一又は複数の命令に応答して実行され得、そのいくつかが新しい又は古い命令であり得ることに留意することが重要である。一実施形態では、デコーダ1526は、同じISA(又は、そのサブセット)を認識することに留意されたい。あるいはまた、異種コア環境では、デコーダ1526は、第2のISA(第1のISAのサブセット又は個別のISA)を認識する。
【0112】
一例では、アロケータ及びリネーマブロック1530は、命令処理結果を格納するレジスタファイル等のリソースを予約するアロケータを含む。しかしながら、スレッド1501a及び1501bは、アウトオブオーダー実行が潜在的に可能であり、アロケータ及びリネーマブロック1530は、命令結果を追跡するためのリオーダーバッファ等の他のリソースも予約する。ユニット1530は、プログラム/命令参照レジスタをプロセッサ1500の内部の他のレジスタに名前変更するレジスタリネーマを含むこともできる。リオーダー/リタイアメントユニット1535は、上記のリオーダーバッファ、ロードバッファ、ストアバッファ等のコンポーネントを含み、アウトオブオーダー実行、及びアウトオブオーダーで実行された命令のその後のインオーダリタイアをサポートする。
【0113】
一実施形態では、スケジューラ及び実行ユニットブロック1540は、実行ユニットに対する命令/動作をスケジュールするためのスケジューラユニットを含む。例えば、浮動小数点命令は、使用可能な浮動小数点実行ユニットを有する実行ユニットのポートでスケジュールされる。情報命令の処理結果を格納するために、実行ユニットに関連付けられたレジスタファイルも含まれる。例示的な実行ユニットは、浮動小数点実行ユニット、整数実行ユニット、ジャンプ実行ユニット、ロード実行ユニット、ストア実行ユニット、及び他の既知の実行ユニットを含む。
【0114】
下位レベルのデータキャッシュ及びデータ変換バッファ(D-TLB)1550は、実行ユニット1540に結合される。データキャッシュは、メモリコヒーレンシ状態に潜在的に保持されるデータオペランド等の要素で最近使用/操作されたものを格納する。D-TLBは、最近の仮想/線形変換から物理アドレスへの変換を格納する。特定の例として、プロセッサは、物理メモリを複数の仮想ページに分割するためのページテーブル構造を含むことができる。
【0115】
ここで、コア1501及び1502は、オンチップインターフェイス1510に関連付けられた第2レベルのキャッシュ等の、より高いレベル又はさらに遠くのキャッシュへのアクセスを共有する。より高いレベル又はさらに遠いは、キャッシュレベルが増大すること、又は実行ユニットからさらに遠くに離れているキャシュレベルを指す。一実施形態では、より高いレベルのキャッシュは、第2又は第3レベルのデータキャッシュ等、最終レベルのデータキャッシュ(プロセッサ1500上のメモリ階層における最後のキャッシュ)である。しかしながら、より高いレベルのキャッシュは、そのキャッシュが命令キャッシュに関連付けられるか又はそれを含み得るので、それほど限定されない。代わりに、トレースキャッシュ(命令キャッシュの一種)をデコーダ1525の後に結合して、最近デコードされたトレースを格納することができる。ここで、命令は潜在的にマクロ命令(すなわち、デコーダによって認識された一般的な命令)を指し、これは複数のマイクロ命令(マイクロオペレーション)にデコードすることができる。
【0116】
図示された構成では、プロセッサ1500は、オンチップインターフェイスモジュール1510も含む。歴史的に、以下でより詳細に説明するメモリコントローラは、プロセッサ1500の外部のコンピュータシステムに含まれていた。このシナリオでは、オンチップインターフェイス1510は、システムメモリ1575、チップセット(大抵の場合、メモリ1575に接続するメモリコントローラハブ、及び周辺装置を接続するI/Oコントローラハブを含む)、メモリコントローラハブ、ノースブリッジ、又は他の集積回路等の、プロセッサ1500の外部のデバイスと通信する。そして、このシナリオでは、バス1505は、マルチドロップバス、ポイントツーポイント相互接続、シリアル相互接続、パラレルバス、コヒーレント(例えば、キャッシュコヒーレント)バス、階層化プロトコルアーキテクチャ、差動バス、及びGTLバス等の既知の相互接続を含み得る。
【0117】
メモリ1575は、プロセッサ1500に専用であってもよく、又はシステム内の他のデバイスと共有してもよい。メモリ1575のタイプの一般的な例には、DRAM、SRAM、不揮発性メモリ(NVメモリ)、及び他の既知の記憶装置が含まれる。デバイス1580は、メモリコントローラハブに結合されたグラフィックアクセラレータ、プロセッサ、又はカード、I/Oコントローラハブに結合されたデータストレージ、ワイヤレストランシーバ、フラッシュデバイス、音声コントローラ、ネットワークコントローラ、又は他の既知のデバイスを含み得ることに留意されたい。
【0118】
しかしながら、最近、より多くのロジック及びデバイスがSOC等の単一のダイ上に集積されているので、これらのデバイスのそれぞれは、プロセッサ1500上に組み込むことができる。例えば、一実施形態では、メモリコントローラハブは、プロセッサ1500と同じパッケージ及び/又はダイ上にある。ここで、コアの一部(オンコア部分)1510は、メモリ1575又はグラフィック装置1580等の他のデバイスとインターフェイスするための1つ又は複数のコントローラを含む。そのようなデバイスとインターフェイスするための相互接続及びコントローラを含む構成は、大抵の場合、オンコア(又はアンコア(un-core)構成)と呼ばれる。一例として、オンチップインターフェイス1510は、オンチップ通信のためのリング相互接続と、オフチップ通信のための高速シリアルポイントツーポイントリンク1505とを含む。さらに、SoC環境では、ネットワークインターフェイス、コプロセッサ、メモリ1575、グラフィックプロセッサ1580、及び他の既知のコンピュータ装置/インターフェイス等、さらに多くのデバイスを単一のダイ又は集積回路に統合して、小さなフォームファクタで高機能及び低消費電力を提供できる。
【0119】
一実施形態では、プロセッサ1500は、コンパイラ、最適化、及び/又はトランスレータコード1577を実行して、本明細書で説明する機器及び方法をサポートするか、又はそれらとインターフェイスするアプリケーションコード1576をコンパイル、変換、及び/又は最適することができる。コンパイラには、大抵の場合、ソーステキスト/コードをターゲットテキスト/コードに変換するプログラム又はプログラムセットが含まれている。通常、コンパイラによるプログラム/アプリケーションコードのコンパイルは、複数のフェーズで行われ、高レベルのプログラミング言語コードを低レベルのマシン又はアセンブリ言語コードに変換するために渡される。しかし、シングルパスコンパイラは、簡素なコンパイルに引き続き使用できる。コンパイラは、既知のコンパイル技法を利用して、字句解析、前処理、構文解析、意味解析、コード生成、コード変換、及びコード最適化等の既知のコンパイラ操作を実行できる。
【0120】
より大きなコンパイラは大抵の場合複数のフェーズを含むが、殆どの場合これらのフェーズは2つの一般的なフェーズ内に含まれる:(1)フロントエンド、すなわち一般に構文処理、意味論的処理、及びいくつかの変換/最適化が行われ得る場合、及び(2)バックエンド、つまり一般に、解析、変換、最適化、及びコード生成が行われる場合。いくつかのコンパイラは、コンパイラのフロントエンドとバックエンドとの間の線引きの曖昧さを示す中間(middle)を参照している。その結果、コンパイラの挿入、関連付け、生成、又は他の操作への参照は、前述のフェーズ又はパスのいずれかだけでなく、コンパイラの他の既知のフェーズ又はパスで発生する可能性がある。説明的な例として、コンパイラは、コンパイルの1つ又は複数のフェーズで、コンパイルのフロントエンドフェーズでの呼出し/操作の挿入、及び次に変換フェーズ中に呼出し/操作の下位レベルコードへの変換等の、操作、呼出し、関数等を潜在的に挿入する。動的なコンパイル中に、コンパイラコード又は動的最適化コードがそのような操作/呼出しを挿入するだけでなく、実行中に実行のためにコードを最適化する場合があることに注意されたい。特定の例示的な例として、バイナリコード(既にコンパイルされたコード)は、実行中に動的に最適化され得る。ここで、プログラムコードは、動的な最適化コード、バイナリコード、又はそれらの組合せを含み得る。
【0121】
コンパイラと同様に、バイナリトランスレータ等のトランスレータは、コードを静的又は動的に変換して、コードを最適化及び/又は変換する。従って、コード、アプリケーションコード、プログラムコードの実行、又は他のソフトウェア環境への言及は、(1)動的又は静的なコンパイラプログラム、最適化コードオプティマイザ、又はトランスレータの実行、プログラムコードのコンパイル、ソフトウェア構造の維持、他の操作の実行、コードの最適化、又はコードの変換、(2)最適化/コンパイルされたアプリケーションコード等の、操作/呼出しを含むメインプログラムコードの実行、(3)ソフトウェア構造を維持し、他のソフトウェア関連の操作を実行し、コードを最適化するためにメインプログラムコードに関連付けられた、ライブラリ等の他のプログラムコードの実行、又は(4)それらの組合せを参照する場合がある。
【0122】
ここで
図16を参照すると、マルチコアプロセッサの実施形態のブロック図が示されている。
図16の実施形態に示されるように、プロセッサ1600は複数のドメインを含む。具体的には、コアドメイン1630は、複数のコア1630A~1630Nを含み、グラフィックドメイン1660は、メディアエンジン1665を有する1つ又は複数のグラフィックエンジンと、システムエージェントドメイン1610とを含む。
【0123】
様々な実施形態において、システムエージェントドメイン1610は、ドメイン1630及び1660(例えば、コア及び/又はグラフィックスエンジン)の個々のユニットが、所与のユニットで発生するアクティビティ(又は非アクティビティ)に照らして適切な電力モード/レベル(例えば、アクティブ、ターボ、スリープ、休止状態(hibernate)、ディープスリープ、又は他のAdvanced Configuration Power Interfaceのような状態)で動的に動作するように独立して制御可能であるように、電力制御イベント及び電力管理を処理する。ドメイン1630及び1660のそれぞれは、異なる電圧及び/又は電力で動作することができ、さらに、ドメイン内の個々のユニットはそれぞれ、独立した周波数及び電圧で潜在的に動作する。3つのドメインでのみ示されているが、本開示の範囲はこの点に限定されず、他の実施形態では追加のドメインが存在し得ることに注意されたい。
【0124】
示されるように、各コア1630は、様々な実行ユニット及び追加の処理要素に加えて、低レベルキャッシュをさらに含む。ここで、様々なコアは、互いに結合され、且つ最終レベルキャッシュ(LLC)1640A~1640Nの複数のユニット又はスライスから形成される共有キャッシュメモリに結合される。これらのLLCは、大抵の場合、ストレージ及びキャッシュコントローラ機能を含み、コアの間で共有されるだけでなく、グラフィックエンジンの間でも潜在的に共有される。
【0125】
確認されるように、リング相互接続1650は、コアを一緒に結合し、コアドメイン1630、グラフィックドメイン1660、及びシステムエージェント回路1610の間の相互接続を複数のリングストップ1652A~1652Nを介して提供し、各リングストップはコアとLLCスライスとの間の結合にある。
図16に確認されるように、相互接続1650は、アドレス情報、データ情報、肯定応答情報、及びスヌープ/無効情報を含む様々な情報を伝送するために使用される。リング相互接続が示されているが、任意の既知のオンダイ相互接続又はファブリックを利用してもよい。説明的な例として、上記のファブリックのいくつか(例えば、別のオンダイ相互接続、オンチップシステムファブリック(OSF)、高度なマイクロコントローラバスアーキテクチャ(AMBA)相互接続、多次元メッシュファブリック、又は他の既知の相互接続アーキテクチャ)も同様の方法で利用してもよい。
【0126】
さらに図示されるように、システムエージェントドメイン1610は、関連するディスプレイへの制御及びインターフェイスを提供するディスプレイエンジン1612を含む。システムエージェントドメイン1610には、システムメモリ(例えば、複数のDIMMで実装されたDRAM)へのインターフェイスを提供する統合メモリコントローラ1620、メモリコヒーレンス操作を実行するコヒーレンスロジック1622等、他のユニットが含まれ得る。プロセッサと他の回路との間の相互接続を可能にする複数のインターフェイスが存在し得る。例えば、一実施形態では、少なくとも1つのダイレクトメディアインターフェイス(DMI)1616インターフェイスだけでなく、1つ又は複数のPCIe(商標)インターフェイス1614も提供される。ディスプレイエンジン及びこれらのインターフェイスは、典型的にPCIe(商標)ブリッジを介してメモリに結合する。さらに、追加のプロセッサ又は他の回路等の他のエージェント同士の間の通信を提供するために、1つ又は複数の他のインターフェイスを提供することができる。
【0127】
ここで
図17を参照すると、代表的なコア、具体的には、
図16のコア1630等のコアのバックエンドの論理ブロックのブロック図が示されている。一般的には、
図17に示される構造は、アウトオブオーダープロセッサを含み、このアウトオブオーダープロセッサは、入ってくる命令をフェッチし、様々な処理(例えば、キャッシング、デコーディング、分岐予測等)を実行し、命令/オペレーションをアウトオブオーダー(OOO)エンジン1780に渡すために使用されるフロントエンドユニット1770を有する。OOOエンジン1780は、デコードされた命令に対して更なる処理を行う。
【0128】
具体的には、
図17の実施形態では、アウトオブオーダーエンジン1780は、フロントエンドユニット1770から1つ又は複数のマイクロ命令又はuopの形式であり得るデコードされた命令を受け取り、それらをレジスタ等の適切なリソース等に割り当てるための割当てユニット1782を含む。次に、命令は予約ステーション1784に提供され、予約ステーションは、リソースを予約し、それら命令を複数の実行ユニット1786A~1786Nのうちの1つで実行するためにスケジュールする。例えば、とりわけ、算術論理ユニット(ALU)、ロード及びストアユニット、ベクトル処理ユニット(VPU)、浮動小数点実行ユニットを含む、様々なタイプの実行ユニットが存在し得る。これらの異なる実行ユニットからの結果は、リオーダーバッファ(ROB)1788に提供され、リオーダーバッファは、順序付けされていない結果を受け取り、それら結果を正しいプログラム順序に戻す。
【0129】
さらに
図17を参照すると、フロントエンドユニット1770とアウトオブオーダーエンジン1780との両方が、メモリ階層の異なるレベルに結合されることに留意されたい。次に中間レベルキャッシュ1776に結合し、次に最終レベルキャッシュ1795に結合する命令レベルキャッシュ1772が、具体的に示されている。一実施形態では、最終レベルキャッシュ1795は、オンチップ(時にはアンコア(uncore)と呼ばれる)に実装される。例として、ユニット1790は、
図17のシステムエージェント1710と同様である。上述したように、アンコア1790は、システムメモリ1799と通信し、システムメモリ1799は、図示の実施形態では、ED RAMを介して実装される。アウトオブオーダーエンジン1780内の様々な実行ユニット1786が、中間レベルキャッシュ1776とも通信している第1のレベルキャッシュ1774と通信していることにも注意されたい。追加のコア1730N-2~1730Nが、LLC1795と結合できることも注意されたい。
図17の実施形態ではこの高レベルで示されるが、様々な変更及び追加の構成要素が存在し得ることを理解されたい。
【0130】
図18に移ると、本開示の一実施形態による、命令を実行する実行ユニットを含むプロセッサで形成された例示的なコンピュータシステムのブロック図が示されており、1つ又は複数の相互接続が1つ又は複数の特徴を実装する。システム1800は、本明細書で説明する実施形態等の本開示による、プロセスデータのアルゴリズムを実行するロジックを含む実行ユニットを使用するプロセッサ1802等のコンポーネントを含む。一実施形態では、サンプルシステム1800は、オペレーティングシステム及び含まれるソフトウェアのバージョンを実行し、対応するグラフィカルユーザインターフェイスを提供し、これを使用することもできる。しかしながら、本開示の実施形態は、ハードウェア回路及びソフトウェアの特定の組合せに限定されない。
【0131】
実施形態は、コンピュータシステムに限定されない。本開示の代替実施形態は、ハンドヘルド装置及び組込みアプリケーション等の他のデバイスで使用することができる。ハンドヘルド装置のいくつかの例には、携帯電話、インターネットプロトコルデバイス、デジタルカメラ、携帯情報端末(PDA)、ハンドヘルドPC等が含まれる。組込みアプリケーションには、マイクロコントローラ、デジタルシグナルプロセッサ(DSP)、システムオンチップ、ネットワークコンピュータ(NetPC)、セットトップボックス、ネットワークハブ、広域ネットワーク(WAN)スイッチ、又は少なくとも1つの実施形態による1つ又は複数の命令を実行できる他のシステムが含まれ得る。
【0132】
この例示された実施形態では、プロセッサ1802は、少なくとも1つの命令を実行することになるアルゴリズムを実装するために1つ又は複数の実行ユニット1808を含む。一実施形態は、シングルプロセッサのデスクトップ又はサーバシステムの文脈で説明され得るが、代替実施形態は、マルチプロセッサシステムに含まれ得る。システム1800は「ハブ」システムアーキテクチャの例である。コンピュータシステム1800は、データ信号を処理するためのプロセッサ1802を含む。例示的な一例として、プロセッサ1802は、例えば、複雑な命令セットコンピュータ(CISC)マイクロプロセッサ、縮小命令セットコンピューティング(RISC)マイクロプロセッサ、超長命令語(VLIW)マイクロプロセッサ、命令セットの組合せを実装するプロセッサ、又はデジタル信号プロセッサ等の他のプロセッサデバイスを含む。プロセッサ1802は、プロセッサ1802とシステム1800内の他のコンポーネントとの間でデータ信号を送信するプロセッサバス1810に結合される。システム1800の要素(例えば、グラフィックアクセラレータ1812、メモリコントローラハブ1816、メモリ1820、I/Oコントローラハブ1825、ワイヤレストランシーバ1826、フラッシュBIOS1828、ネットワークコントローラ1834、音声コントローラ1836、シリアル拡張ポート1838、I/Oコントローラ1840等)は、当業者によく知られている従来の機能を実行する。
【0133】
一実施形態では、プロセッサ1802は、レベル1(L1)内部キャッシュメモリ1804を含む。アーキテクチャに応じて、プロセッサ1802は、単一の内部キャッシュ又は複数のレベルの内部キャッシュを有し得る。他の実施形態は、特定の実装形態及び必要性に応じて、内部キャッシュと外部キャッシュとの両方の組合せを含む。レジスタファイル1806は、整数レジスタ、浮動小数点レジスタ、ベクトルレジスタ、バンク(banked)レジスタ、シャドウレジスタ、チェックポイントレジスタ、ステータスレジスタ、及び命令ポインタレジスタを含む様々なレジスタに様々なタイプのデータを格納する。
【0134】
整数及び浮動小数点演算を行うロジックを含む実行ユニット1808も、プロセッサ1802に常駐する。一実施形態では、プロセッサ1802は、実行時に特定のマクロ命令のアルゴリズムを実行する又は複雑なシナリオを処理するマイクロコードを格納するマイクロコード(uコード)ROMを含む。ここで、マイクロコードは、プロセッサ1802のロジックバグ/修正を処理するために潜在的に更新可能である。一実施形態では、実行ユニット1808は、パックされた命令セット1809を処理するロジックを含む。命令を実行するための関連回路とともに、汎用プロセッサ1802の命令セットにパックされた命令セット1809を含めることにより、多くのマルチメディアアプリケーションで使用される操作は、汎用プロセッサ1802でパックされたデータを用いて実行できる。こうして、多くのマルチメディアアプリケーションは、パックされたデータに対して操作を実行するためのプロセッサのデータバスの全幅を用いることにより、加速されより効率的に実行される。これにより、1つのデータ要素に対して一度に1つ又は複数の操作を実行するために、プロセッサのデータバスを介してより小さなユニットのデータを転送する必要が潜在的に排除される。
【0135】
実行ユニット1808の代替の実施形態は、マイクロコントローラ、埋込み型プロセッサ、グラフィック装置、DSP、及び他のタイプの論理回路でも使用され得る。システム1800は、メモリ1820を含む。メモリ1820には、ダイナミックランダムアクセスメモリ(DRAM)装置、スタティックランダムアクセスメモリ(SRAM)装置、フラッシュメモリ装置、又は他のメモリ装置が含まれる。メモリ1820は、プロセッサ1802によって実行すべきデータ信号によって表される命令及び/又はデータを格納する。
【0136】
本開示及び解決策の前述した特徴又は態様のいずれかは、
図18に示される1つ又は複数の相互接続で利用され得ることに留意されたい。例えば、プロセッサ1802の内部ユニットを結合するためのオンダイ相互接続(ODI)(図示せず)は、上述した実施形態の1つ又は複数の態様を実装する。或いは、実施形態は、プロセッサバス1810(例えば、他の既知の高性能コンピューティング相互接続)、メモリ1820への高帯域幅メモリパス1818、グラフィックアクセラレータ1812へのポイントツーポイントリンク(例えば、周辺コンポーネント相互接続エクスプレス(PCIe)準拠ファブリック)、コントローラハブ相互接続1822、他の図示されているコンポーネントを結合するI/O又は他の相互接続(例えば、USB、PCI、PCIe)に関連付けられる。そのようなコンポーネントのいくつかの例には、音声コントローラ1836、ファームウェアハブ(フラッシュBIOS)1828、ワイヤレストランシーバ1826、データストレージ1824、ユーザ入力及びキーボードインターフェイス1842を含むレガシーI/Oコントローラ1810、ユニバーサルシリアルバス(USB)等のシリアル拡張ポート1838、及びネットワークコントローラ1834が含まれる。データストレージ装置1824は、ハードディスクドライブ、フロッピーディスクドライブ、CD-ROM装置、フラッシュメモリ装置、又は他の大容量記憶装置を含むことができる。
【0137】
次に、
図19を参照すると、本開示の実施形態による第2のシステム1900のブロック図が示されている。
図19に示されるように、マルチプロセッサシステム1900は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続1950を介して結合された第1のプロセッサ1970及び第2のプロセッサ1980を含む。プロセッサ1970及び1980のそれぞれは、プロセッサのいくつかのバージョンであり得る。一実施形態では、1952及び1954は、高性能アーキテクチャ等の、シリアルポイントツーポイントコヒーレント相互接続ファブリックの一部である。
【0138】
2つのプロセッサ1970、1980のみが示されているが、本開示の範囲はそのように限定されないことを理解すべきである。他の実施形態では、所与のプロセッサに1つ又は複数の追加のプロセッサが存在し得る。
【0139】
プロセッサ1970及び1980は、それぞれ統合メモリコントローラユニット1972及び1982を含むように示されている。プロセッサ1970は、そのバスコントローラユニットの一部として、ポイントツーポイント(P-P)インターフェイス1976及び1978も含み、同様に、第2のプロセッサ1980は、P-Pインターフェイス1986及び1988を含む。プロセッサ1970、1980は、P-Pインターフェイス回路1978、1988を用いて、ポイントツーポイント(P-P)インターフェイス1950を介して情報を交換することができる。
図19に示されるように、IMC1972及び1982は、プロセッサをそれぞれのメモリ、すなわち、(それぞれのプロセッサにローカルに接続されたメインメモリの一部であり得る)メモリ1932及びメモリ1934に結合する。
【0140】
プロセッサ1970、1980はそれぞれ、ポイントツーポイントインターフェイス回路1976、1994、1986、1998を用いて個々のP-Pインターフェイス1952、1954を介してチップセット1990と情報を交換する。チップセット1990はまた、高性能グラフィック相互接続1939に沿ったインターフェイス回路1992を介して高性能グラフィックス回路1938と情報を交換する。
【0141】
共有キャッシュ(図示せず)は、いずれのプロセッサに含まれても、両方のプロセッサの外部に含まれてもよいが、P-P相互接続を介してプロセッサに接続されているため、プロセッサが低電力モードになった場合に、どちらか一方又は両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得る。
【0142】
チップセット1990は、インターフェイス1996を介して第1のバス1916に結合され得る。一実施形態では、第1のバス1916は、周辺機器相互接続(PCI)バス、或いはPCIエクスプレスバス又は別の第3世代のI/O相互接続バス等のバスであり得るが、本開示の範囲はそのように限定されない。
【0143】
図19に示されるように、様々なI/O装置1914が、第1のバス1916を第2のバス1920に結合するバスブリッジ1918と共に、第1のバス1916に結合される。一実施形態では、第2のバス1920は、LPC(low pin count)バスを含む。一実施形態では、例えば、キーボード及び/又はマウス1922、通信装置1927、並びに大抵の場合、命令/コード及びデータ1930を含むディスクドライブ又は他の大容量記憶装置等の記憶ユニット1928を含む様々なデバイスが、第2のバス1920に結合される。さらに、音声I/O1924が、第2のバス1920に結合されて示されている。含まれるコンポーネント及び相互接続アーキテクチャが異なる他のアーキテクチャも可能であることに留意されたい。例えば、
図19のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバス又は他のそのようなアーキテクチャを実装することができる。
【0144】
次に、
図20に移ると、上記の開示によるシステムオンチップ(SOC)設計の実施形態が示されている。特定の例示的な例として、SOC2000が、ユーザ機器(UE)に含まれる。一実施形態では、UEは、携帯電話、スマートフォン、タブレット、超薄型ノートブック、ブロードバンドアダプタを含むノートブック、又は他の同様の通信装置等の、通信するためにエンドユーザによって使用される任意の装置を指す。大抵の場合、UEは基地局又はノードに接続し、基地局又はノードは、GSMネットワーク内の移動局(MS)に潜在的に対応する。
【0145】
ここで、SOC2000は、2つのコア2006及び2007を含む。上記の議論と同様に、コア2006及び2007は、インテル(登録商標)アーキテクチャコア(商標)ベースのプロセッサ、AMD(Advanced Micro Devices)社製プロセッサ、MIPSベースのプロセッサ、ARMベースのプロセッサ設計、又はそれらのカスタマー、並びにそれらのライセンシー又はアダプター等の命令セットアーキテクチャに準拠し得る。コア2006及び2007は、バスインターフェイスユニット2009及びL2キャッシュ2011に関連付けられたキャッシュ制御2008に結合され、システム2000の他の部分と通信する。相互接続2010には、上記で議論したIOSF、AMBA、又は他の相互接続等のオンチップ相互接続が含まれ、この相互接続は、本明細書で説明する1つ又は複数の態様を潜在的に実装する。
【0146】
インターフェイス2010は、SIMカードとインターフェイスするための加入者識別モジュール(SIM)2030、コア2006及び2007による実行のためのブートコードを保持してSOC2000を初期化及びブートするためのブートROM2035、外部メモリ(例えば、DRAM2060)とインターフェイスするためのSDRAMコントローラ2040、不揮発性メモリ(例えば、フラッシュ2065)とインターフェイスするためのフラッシュコントローラ2045、周辺機器とインターフェイスする周辺制御2050(例えば、シリアル周辺機器インターフェイス)、入力(例えば、タッチ可能入力)を表示及び受け取るためのビデオコード2020及びビデオインターフェイス2025、グラフィック関連の計算を行うためのGPU2015等の他のコンポーネントへの通信チャネルを提供する。これらのインターフェイスのいずれも、本明細書で説明する実施形態の態様を組み込むことができる。
【0147】
さらに、システムは、Bluetooth(登録商標)モジュール2070、3Gモデム2075、GPS2085、及びWiFi(登録商標)2085等の通信のための周辺機器を示す。上述したように、UEは通信のための無線機を含むことに留意されたい。その結果、これらの周辺通信モジュールの全てが必要になるわけではない。ただし、UEには外部通信用の無線機のいくつかの形態が含まれる。
【0148】
本開示は、限られた数の実施形態を参照して説明してきたが、当業者は、そこからの多数の修正及び変形を理解するであろう。添付の特許請求の範囲は、本開示の真の精神及び範囲内に含まれるそのような修正及び変形の全てを網羅することを意図している。
【0149】
設計は、作成からシミュレーション、製造までの様々な段階を経ることがある。設計を表すデータは、複数の方法で設計を表すことができる。まず、シミュレーションで役立つように、ハードウェアは、ハードウェア記述言語又は別の機能記述言語を用いて表現できる。さらに、ロジック及び/又はトランジスタゲートを含む回路レベルモデルは、設計プロセスのいくつかの段階で作成できる。さらに、殆どの設計は、ある段階で、ハードウェアモデル内の様々なデバイスの物理的な配置を表すデータレベルに達する。従来の半導体製造技術が使用される場合に、ハードウェアモデルを表すデータは、集積回路を製造するために使用されるマスクの異なるマスク層上の様々な特徴の有無を指定するデータであり得る。設計の任意の表現において、データは、任意の形式の機械可読媒体に格納され得る。メモリ、或いはディスク等の磁気又は光ストレージは、そのような情報を送信するために変調又は他に生成される光又は電波を介して送信される情報を格納するための機械可読媒体であり得る。コード又はデザインを示す又は伝送する電気搬送波が送信されると、電気信号のコピー、バッファリング、又は再送信が実行される範囲で、新しいコピーが作成される。こうして、通信プロバイダ又はネットワークプロバイダは、本開示の実施形態の技法を具体化する、搬送波にエンコードされた情報等の箇条書きを少なくとも一時的に有形の機械可読媒体に格納することができる。
【0150】
本明細書で使用されるモジュールは、ハードウェア、ソフトウェア、及び/又はファームウェアの任意の組合せを指す。一例として、モジュールは、マイクロコントローラによって実行されるように適合されたコードを格納するための非一時的媒体に関連付けられたマイクロコントローラ等のハードウェアを含む。従って、一実施形態では、モジュールへの言及は、非一時的媒体に保持されるコードを認識及び/又は実行するように特に構成されたハードウェアを指す。さらに、別の実施形態では、モジュールの使用は、所定の動作を行うためにマイクロコントローラによって実行されるように特に適合されたコードを含む非一時的媒体を指す。そして推論できるように、さらに別の実施形態では、(この例では)モジュールという用語は、マイクロコントローラと非一時的媒体との組合せを指すことがある。大抵の場合、別々に示されるモジュール境界は一般に異なり、潜在的に重複する。例えば、第1及び第2のモジュールは、いくつかの独立したハードウェア、ソフトウェア、又はファームウェアを潜在的に保持しながら、ハードウェア、ソフトウェア、ファームウェア、又はそれらの組合せを共有することができる。一実施形態では、ロジック(論理)という用語の使用は、トランジスタ、レジスタ等のハードウェア、又はプログラマブル論理装置等のハードウェアを含む。
【0151】
一実施形態では、「~ように構成された」という句の使用は、指定された又は決定されたタスクを実行するための機器、ハードウェア、ロジック、又は要素の配置、組み立て、製造、販売の申し出、インポート及び/又は設計を指す。この例では、動作していない機器又はその要素は、その指定されたタスクを実行するように設計、結合、及び/又は相互接続された場合に、指定されたタスクを実行するようにさらに「構成」される。純粋に例示的な例として、論理ゲートは、動作中に0又は1を提供する。ただし、クロックにイネーブル信号を提供する「ように構成された」論理ゲートには、1又は0を提供し得る全ての潜在的な論理ゲートが含まれているわけではない。代わりに、論理ゲートは、動作中に1又は0の出力がクロックを有効にする方法で結合されたゲートである。「~ように構成された」という用語の使用は操作を必要とせず、代わりに、機器、ハードウェア、及び/又は要素の潜在状態に焦点を当てており、潜在状態では、機器、ハードウェア、及び/又は要素は、機器、ハードウェア、要素が動作しているときに特定のタスクを実行するように設計されることに再び注意されたい。
【0152】
さらに、一実施形態では、「~の/に可能」、及び/又は「~に動作可能」という句の使用は、特定の方法で機器、ロジック、ハードウェア、及び/又は要素の使用を可能にするように設計された、いくつかの機器、論理、ハードウェア、及び/又は要素を指す。上記のように、一実施形態では、「~に可能」、又は「~に動作可能」という句の使用は、機器、論理、ハードウェア、及び/又は要素の潜在状態を指し、機器、論理、ハードウェア、及び/又は要素は、動作していないが、特定の方法で機器を使用できるように設計されている。
【0153】
本明細書で使用される値は、数、状態、論理状態、又はバイナリ論理状態の任意の既知の表現を含む。大抵の場合、論理レベル、ロジック値、又は論理値の使用は、1及び0とも呼ばれ、単にバイナリ論理状態を表す。例えば、1は高論理レベルを示し、0は低論理レベルを示す。一実施形態では、トランジスタ又はフラッシュセル等の記憶セルは、単一の論理値又は複数の論理値を保持することができてもよい。しかしながら、コンピュータシステムにおける値の他の表現が使用されてきた。例えば、10進数の10は、1010のバイナリ値と16進数の文字Aとして表すこともできる。従って、値には、コンピュータシステムで保持できる情報の表現が含まれる。
【0154】
さらに、状態は、値又は値の一部によって表され得る。一例として、論理1等の第1の値はデフォルト又は初期状態を表すことができる一方、論理0等の第2の値は非デフォルト状態を表すことができる。さらに、一実施形態では、リセット及びセットという用語は、それぞれデフォルトの及び更新された値又は状態を指す。例えば、デフォルト値には高い論理値、つまりリセットが潜在的に含まれるが、更新された値には低い論理値、つまりセットが潜在的に含まれる。値の任意の組合せを使用して、任意の数の状態を表すことができることに注意されたい。
【0155】
上記の方法、ハードウェア、ソフトウェア、ファームウェア、又はコードの実施形態は、処理要素によって実行可能な、機械アクセス可能、機械読み取り可能、コンピュータクセス可能、又はコンピュータ読み取り可能媒体に格納された命令又はコードを介して実装され得る。非一時的な機械アクセス可能/読み取り可能な媒体は、コンピュータ又は電子システム等の機械によって読み取り可能な形式で情報を提供する(すなわち、格納及び/又は送信する)任意のメカニズムを含む。例えば、非一時的な機械アクセス可能な媒体には、スタティックRAM(SRAM)又はダイナミックRAM(DRAM)等のランダムアクセスメモリ(RAM);ROM;磁気又は光学記憶媒体;フラッシュメモリ装置;蓄電装置;光学記憶装置;音響記憶装置;一時的な(伝播された)信号(例えば、搬送波、赤外線信号、デジタル信号)から受信した情報を保持するための他の形式の記憶装置等が含まれ、これらは、そこから情報を受け取り得る非一時的媒体とは区別される。
【0156】
本開示の実施形態を実行するためのロジックをプログラムするために使用される命令は、DRAM、キャッシュ、フラッシュメモリ、又は他のストレージ等のシステム内のメモリ内に格納され得る。さらに、命令は、ネットワークを介して、又は他のコンピュータ可読媒体を介して配信することができる。こうして、機械可読媒体は、機械(例えば、コンピュータ)によって読み取り可能な形式で情報を格納又は送信するための任意のメカニズムを含み得るが、機械可読媒体は、フロッピーディスケット、光ディスク、コンパクトディスク、読み取り専用メモリ(CD-ROM)、及び光磁気ディスク、読み取り専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、消去可能なプログラマブル読み取り専用メモリ(EPROM)、電気的消去可能なプログラマブル読み取り専用メモリ(EEPROM)、磁気又は光学カード、フラッシュメモリ、或いは電気的、光学的、音響的、又は他の形態の伝播信号(例えば、搬送波、赤外線信号、デジタル信号等)によるインターネットを介した情報の送信に使用される有形の機械可読ストレージを含むが、これらに限定されるものではない。従って、コンピュータ可読媒体は、機械(例えば、コンピュータ)によって読み取り可能な形式で電子命令又は情報を格納又は送信するのに適した任意のタイプの有形の機械可読媒体を含む。
【0157】
以下の例は、本明細書による実施形態に関する。例1は、機器であって、この機器は、1組のコヒーレント相互接続プロトコルをサポートするエージェント回路と;相互接続ファブリックに結合するインターフェイスであって、1組のコヒーレント相互接続プロトコルをサポートするように構成されるインターフェイスと;を含む。インターフェイスは、第1の複数の物理レーンに結合するグローバルチャネルであって、インターフェイスをサポートする制御信号を通信するためのグローバルチャネルと;第2の複数の物理レーンに結合する要求チャネルであって、要求に関連するメッセージをファブリック上の他のエージェントに通信するための要求チャネルと;第3の複数の物理レーンに結合する応答チャネルであって、応答チャネルは、応答に関連するメッセージをファブリック上の他のエージェントに通信するためのチャネルであり、応答にはペイロードデータのない応答が含まれる、応答チャネルと;第4の複数の物理レーンに結合するデータチャネルであって、データチャネルは、データ転送に関連するメッセージをファブリック上の他のエージェントに通信するためのチャネルであり、データ転送にはペイロードデータが含まれる、データチャネルと、を含む。
【0158】
例2は、例1の主題を含み、要求は、システムのメモリを対象とする要求である。
【0159】
例3は、例1~2のいずれか1つの主題を含み、要求チャネル、応答チャネル、及びデータチャネルのそれぞれが、それぞれの複数の信号を含み、複数の信号の各信号が、チャネルの物理レーンのそれぞれのサブセットに割り当てられる。
【0160】
例4は、例3の主題を含み、複数の信号の第1の部分がファブリックに送信され、複数の信号の第2の部分がファブリックから受信される。
【0161】
例5は、例3~4のいずれか1つの主題を含み、要求チャネル、応答チャネル、及びデータチャネルの複数の信号のそれぞれが、それぞれの有効信号、プロトコル識別子信号、仮想チャネル識別子フィールド、及びヘッダー信号を含み、有効信号は、ヘッダー信号の有効なインスタンスに合わせてアサートされ、ヘッダー信号には特定のメッセージのヘッダーが含まれ、プロトコル識別子信号はヘッダーに関連するプロトコルを識別し、仮想チャネル識別子信号(フィールド)は特定のメッセージに使用される仮想チャネルを識別する。
【0162】
例6は、例5の主題を含み、1組のコヒーレント相互接続プロトコルは複数のプロトコルを含み、プロトコル識別子信号は、ヘッダーに関連するものとして、複数のプロトコルのうちの1つを識別する。
【0163】
例7は、例6の主題を含み、複数のプロトコルは、CXL(Compute Express Link)プロトコルを含み、CXLプロトコルは、CXL.cacheプロトコル及びCXL.memプロトコルを含む。
【0164】
例8は、例6~7のいずれか1つの主題を含み、ヘッダー信号は、複数のプロトコルの最大のヘッダーフォーマットをサポートする幅を有する。
【0165】
例9は、例5~8のいずれか1つの主題を含み、データチャネルの複数の信号は、ペイロードデータを伝送するためのペイロードデータ信号をさらに含み、ペイロードデータ信号には、複数のレーンが含まれる。
【0166】
例10は、例9の主題を含み、ペイロードデータ信号はヘッダー信号に対応しており、ペイロードデータ信号は、ヘッダー信号の送信後に、複数のクロックサイクルで送信される。
【0167】
例11は、例10の主題を含み、複数のクロックサイクルには、インターフェイスの構成可能なパラメータが含まれる。
【0168】
例12は、例5~11のいずれか1つの主題を含み、要求チャネル、応答チャネル、及びデータチャネルの複数の信号のそれぞれが、それぞれのチャネルに関連するクレジットリターンの受け取りをサポートするクレジットリターン信号をさらに含む。
【0169】
例13は、例12の主題を含み、クレジットは、少なくともヘッダー信号を用いたメッセージの送信と並行してクレジットリターン信号で返される。
【0170】
例14は、例12~13のいずれか1つの主題を含み、クレジットリターンは、仮想チャネル専用クレジット及び共有クレジットのリターンを含む。
【0171】
例15は、例5~14のいずれか1つの主題を含み、要求チャネル、応答チャネル、及びデータチャネルの複数の信号のそれぞれが、ブロッキング要求を受け取るためのブロッキング信号をさらに含み、ブロッキング要求は、対応するチャネルの有効信号のデアサートを生じさせる。
【0172】
例16は、例15の主題を含み、有効信号は、ブロッキング信号のアサート後に特定の数のクロックサイクルでデアサートされる。
【0173】
例17は、例16の主題を含み、特定の数のクロックサイクルには、インターフェイスの構成可能なパラメータが含まれる。
【0174】
例18は、例3~17のいずれか1つの主題を含み、グローバルチャネルには、グローバルチャネルのエージェントからファブリックへのインスタンスが含まれ、要求チャネルには、要求チャネルのエージェントからファブリックへのインスタンスが含まれ、応答チャネルには、応答チャネルのエージェントからファブリックへのインスタンスが含まれ、データチャネルには、データチャネルのエージェントからファブリックへのインスタンスが含まれる。インターフェイスは、第5の複数の物理レーンに割り当てられたグローバルチャネルのファブリックからエージェントへのインスタンス、第6の複数の物理レーンに割り当てられた要求チャネルのファブリックからエージェントへのインスタンス、第7の複数の物理レーンに割り当てられた応答チャネルのファブリックからエージェントへのインスタンス、及び第8の複数の物理レーンに割り当てられたデータチャネルのファブリックからエージェントへのインスタンスをさらに含む。
【0175】
例19は、例1~18のいずれか1つの主題を含み、プロトコルのセットは複数のプロトコルを含み、要求チャネル、応答チャネル、及びデータチャネルは、複数のプロトコルのそれぞれのメッセージをサポートする。
【0176】
例20は、例1~19のいずれか1つの主題を含み、インターフェイスは、要求チャネル、応答チャネル、及びデータチャネルのうちの1つの第2のインスタンスを含む。
【0177】
例21は、例1~20のいずれか1つの主題を含み、グローバルチャネルには、インターフェイスを初期化するための信号のセットが含まれる。
【0178】
例22は、例21の主題を含み、インターフェイスの初期化は状態マシンによるものであり、状態マシンはインターフェイスのための複数の初期化状態を含み、信号のセットの値によって複数の初期化状態の間の遷移を生じさせる。
【0179】
例23は、例1~22のいずれか1つの主題を含み、計算ブロック回路をさらに含み、計算ブロック回路は、システムオンチップ(SoC)内に計算ブロックを実装し、相互接続ファブリックは、SoCの相互接続ファブリックを含む。
【0180】
例24は、例23の主題を含み、計算ブロック回路にはデータプロセッサが含まれる。
【0181】
例25は、例23~24のいずれか1つの主題を含み、計算ブロック回路にはコンピュータメモリが含まれる。
【0182】
例26は、機器であり、この機器は、システムの相互接続ファブリックの少なくとも一部を実装するファブリック回路と;計算ブロックのエージェントに結合するインターフェイスであって、1組のコヒーレント相互接続プロトコルをサポートするように構成されるインターフェイスと;を含む。インターフェイスは、第1の複数の物理レーンに結合するグローバルチャネルであって、インターフェイスをサポートするための制御信号を通信するためのグローバルチャネルと;第2の複数の物理レーンに結合する要求チャネルであって、要求に関連するメッセージをエージェントに通信するための要求チャネルと;第3の複数の物理レーンに結合する応答チャネルであって、応答チャネルは、応答に関連するメッセージをエージェントに通信するためのチャネルであり、応答には、ペイロードデータなしの応答が含まれる、応答チャネルと;第4の複数の物理レーンに結合するデータチャネルであって、データチャネルは、データ転送に関連するメッセージを通信するためのチャネルであり、データ転送にはペイロードデータが含まれる、データチャネルと;を含む。
【0183】
例27は、例26の主題を含み、要求は、計算ブロックのメモリを対象とする要求である。
【0184】
例28は、例26~27のいずれか1つの主題を含み、要求チャネル、応答チャネル、及びデータチャネルのそれぞれが、それぞれの複数の信号を含み、複数の信号の各信号が、チャネルの物理レーンのそれぞれのサブセットに割り当てられる。
【0185】
例29は、例28の主題を含み、複数の信号の第1の部分がファブリックに送信され、複数の信号の第2の部分がファブリックから受信される。
【0186】
例30は、例28~29のいずれか1つの主題を含み、要求チャネル、応答チャネル、及びデータチャネルの複数の信号のそれぞれが、それぞれの有効信号、プロトコル識別子信号、仮想チャネル識別子フィールド、及びヘッダー信号を含み、有効信号は、ヘッダー信号の有効なインスタンスに合わせてアサートされ、ヘッダー信号には特定のメッセージのヘッダーが含まれ、プロトコル識別子信号はヘッダーに関連するプロトコルを識別し、仮想チャネル識別子信号(フィールド)は、特定のメッセージに使用される仮想チャネルを識別する。
【0187】
例31は、例30の主題を含み、1組のコヒーレント相互接続プロトコルは複数のプロトコルを含み、プロトコル識別子信号は、ヘッダーに関連するものとして、複数のプロトコルのうちの1つを識別する。
【0188】
例32は、例31の主題を含み、複数のプロトコルは、CXL(Compute Express Link)プロトコルを含み、CXLプロトコルは、CXL.cacheプロトコル及びCXL.memプロトコルを含む。
【0189】
例33は、例31~32のいずれか1つの主題を含み、ヘッダー信号は、複数のプロトコルの最大のヘッダーフォーマットをサポートする幅を有する。
【0190】
例34は、例30~33のいずれか1つの主題を含み、データチャネルの複数の信号は、ペイロードデータを伝送するためのペイロードデータ信号をさらに含み、ペイロードデータ信号には、複数のレーンが含まれる。
【0191】
例35は、例34の主題を含み、ペイロードデータ信号はヘッダー信号に対応しており、ペイロードデータ信号は、ヘッダー信号の送信後に、複数のクロックサイクルで送信される。
【0192】
例36は、例35の主題を含み、複数のクロックサイクルには、インターフェイスの構成可能なパラメータが含まれる。
【0193】
例37は、例30~36のいずれか1つの主題を含み、要求チャネル、応答チャネル、及びデータチャネルの複数の信号のそれぞれが、それぞれのチャネルに関連するクレジットリターンの受け取りをサポートするクレジットリターン信号をさらに含む。
【0194】
例38は、例37の主題を含み、クレジットは、少なくともヘッダー信号を用いたメッセージの送信と並行してクレジットリターン信号で返される。
【0195】
例39は、例37~38のいずれか1つの主題を含み、クレジットリターンは、仮想チャネル専用クレジット及び共有クレジットのリターンを含む。
【0196】
例40は、例30~39のいずれか1つの主題を含み、要求チャネル、応答チャネル、及びデータチャネルの複数の信号のそれぞれが、ブロッキング要求を受け取るためのブロッキング信号をさらに含み、ブロッキング要求は、対応するチャネルの有効信号のデアサートを生じさせる。
【0197】
例41は、例40の主題を含み、有効信号は、ブロッキング信号のアサート後に特定の数のクロックサイクルでデアサートされる。
【0198】
例42は、例41の主題を含み、特定の数のクロックサイクルには、インターフェイスの構成可能なパラメータが含まれる。
【0199】
例43は、例28~42のいずれか1つの主題を含み、グローバルチャネルには、グローバルチャネルのファブリックからエージェントへのインスタンスが含まれ、要求チャネルには、要求チャネルのファブリックからエージェントへのインスタンスが含まれ、応答チャネルには、応答チャネルのファブリックからエージェントへのインスタンスが含まれ、データチャネルには、データチャネルのファブリックからエージェントへのインスタンスが含まれる。インターフェイスは、第5の複数の物理レーンに割り当てられたグローバルチャネルのエージェントからファブリックへのインスタンス、第6の複数の物理レーンに割り当てられた要求チャネルのエージェントからファブリックへのインスタンス、第7の複数の物理レーンに割り当てられた応答チャネルのエージェントからファブリックへのインスタンス、及び第8の複数の物理レーンに割り当てられたデータチャネルのエージェントからファブリックへのインスタンスをさらに含む。
【0200】
例44は、例25~43のいずれか1つの主題を含み、プロトコルのセットは複数のプロトコルを含み、要求チャネル、応答チャネル、及びデータチャネルは、複数のプロトコルのそれぞれのメッセージをサポートする。
【0201】
例45は、例25~44のいずれか1つの主題を含み、インターフェイスは、要求チャネル、応答チャネル、及びデータチャネルのうちの1つの第2のインスタンスを含む。
【0202】
例46は、例25~45のいずれか1つの主題を含み、グローバルチャネルには、インターフェイスを初期化するための信号のセットが含まれる。
【0203】
例47は、例46の主題を含み、インターフェイスの初期化は状態マシンによるものであり、状態マシンはインターフェイスのための複数の初期化状態を含み、信号のセットの値によって複数の初期化状態の間の遷移を生じさせる。
【0204】
例48は、例25~47のいずれか1つの主題を含み、ファブリック回路はネットワークオンチップデバイスを含み、ネットワークオンチップデバイスはインターフェイスを含む。
【0205】
例49は、方法であり、この方法は、第1のクロックサイクルで、インターフェイスの特定のチャネルの1組の有効なレーンでアサートされた有効信号、特定のチャネルの1組のヘッダーレーンで第1のヘッダー信号、特定のチャネルの1組の仮想チャネル識別子(VC ID)レーンでVC ID信号、及び特定のチャネルの1組のプロトコル識別子レーンでプロトコル識別子信号を受信するステップであって、インターフェイスはエージェントをファブリックに結合し、第1のヘッダー信号は有効信号に合わせられ、第1のヘッダー信号はパケットのヘッダーの少なくとも一部を含み、プロトコル識別子信号は、インターフェイスでサポートされる複数のコヒーレントプロトコルのうちの特定の1つを識別してパケットに適用し、及び特定のチャネルはインターフェイスの複数のチャネルのうちの1つを含み、複数のチャネルは、要求チャネル、データチャネル、及び応答チャネルを含む、受信するステップと;後続のクロックサイクルで、アサートされた有効信号、特定のチャネルの1組の最後のパケット(EOP)レーンでアサートされたEOP信号、1組のヘッダーレーンで第2のヘッダー信号を受信するステップであって、第2のヘッダー信号はパケットのヘッダーの少なくとも一部を含む、受信するステップと;アサートされた有効信号を含む後続のクロックサイクルで、アサートされたEOP信号に基づいて最後のパケットを決定するステップと;を含む。
【0206】
例50は、例49の主題を含み、有効信号のデアサートを識別するステップをさらに含み、有効信号のデアサートにより、ヘッダー信号が中断される。
【0207】
例51は、例49~50のいずれか1つの主題を含み、第1のクロックサイクルで、特定のチャネルの1組の共有クレジットレーンで共有クレジット信号を受信するステップをさらに含み、共有クレジット信号により、共有クレジットと専用クレジットのどちらをヘッダーと共に使用するかが特定される。
【0208】
例52は、例51の主題を含み、共有クレジット信号により、専用クレジットが使用されることが特定されたときに、VC ID信号は、専用クレジットに関連する特定の仮想チャネルを識別する。
【0209】
例53は、例49~52のいずれか1つの主題を含み、特定のチャネルはデータチャネルを含み、方法は、データチャネルのペイロードデータ信号の1組のレーンでペイロードデータを受信するステップと;ヘッダーに基づいてペイロードデータがパケットに関連付けられていると判定するステップと;をさらに含む。
【0210】
例54は、例53の主題を含み、ペイロードデータは、ヘッダー信号の受信に続いて特定の数のクロックサイクルに到達するように規定される。
【0211】
例55は、例54の主題を含み、特定の数のクロックサイクルは、インターフェイスのヘッダーペイロード分離パラメータにおいて構成される。
【0212】
例56は、例49~55のいずれか1つの主題を含み、特定のチャネルのブロッキング信号レーンでブロッキング信号を送信するステップをさらに含み、ブロッキング信号により、1組の有効なレーンで有効信号のデアサートが生じる。
【0213】
例57は、例56の主題を含み、キュー内のバックプレッシャーを決定するステップをさらに含み、ブロッキング信号は、決定されたバックプレッシャーに基づいて送信される。
【0214】
例58は、例49~57のいずれか1つの主題を含み、ヘッダー信号の幅は、複数のコヒーレントプロトコルの中で最大のヘッダーフォーマットに基づく。
【0215】
例59は、例49~58のいずれか1つの主題を含み、要求チャネルは、要求に関連するメッセージをエージェントに通信するためのチャネルであり、応答チャネルは、応答に関連するメッセージをエージェントに通信するためのチャネルであり、応答にはペイロードデータなしの応答が含まれ、データチャネルは、ペイロードデータを含むデータ転送に関連するメッセージを通信するためのチャネルである。
【0216】
例60は、例49~59のいずれか1つの主題を含み、相互接続のグローバルチャネル内の初期化信号のセットを用いてインターフェイスを初期化するステップをさらに含み、グローバルチャネルは、複数のグローバルチャネルレーンに関連付けられ、初期化信号のセット内の各信号が、複数のグローバルチャネルレーンのそれぞれ1つにマッピングされる。
【0217】
例61は、例60の主題を含み、インターフェイスの初期化は状態マシンによるものであり、状態マシンは複数の初期化状態を規定し、複数の初期化状態の間の遷移は、初期化信号のセットの値に基づく。
【0218】
例62は、例61の主題を含み、メッセージは、インターフェイスの初期化の完了後にチャネル上で受信される。
【0219】
例63は、例62の主題を含み、初期化の完了時に、要求チャネル、応答チャネル、及びデータチャネルのそれぞれの、それぞれのフロー制御信号レーンでフロー制御クレジットを送信するステップをさらに含む。
【0220】
例64は、例49~63のいずれか1つの主題を含み、要求チャネル、応答チャネル、及びデータチャネルのそれぞれに含まれるそれぞれのクレジットリターンレーンでクレジットリターンを送信するステップをさらに含む。
【0221】
例65は、例64の主題を含み、クレジットリターンは、専用及び共有クレジットのリターンを含む。
【0222】
例66は例49~65のいずれか1つの主題を含み、複数のコヒーレントプロトコルは、CXL.memプロトコル及びCXL.cacheプロトコルを含む。
【0223】
例67は、例49~66のいずれか1つの方法を実行する手段を含むシステムである。
【0224】
例68は、方法であり、この方法は、第1のクロックサイクルで、インターフェイスの特定のチャネルの1組の有効なレーンでアサートされた有効信号、特定のチャネルの1組のヘッダーレーンで第1のヘッダー信号、特定のチャネルの1組の仮想チャネル識別子(VC ID)レーンでVC ID信号、及び特定のチャネルの1組のプロトコル識別子レーンでプロトコル識別子信号を送信するステップであって、インターフェイスはエージェントをファブリックに結合し、第1のヘッダー信号は有効信号に合わせられ、第1のヘッダー信号はパケットのヘッダーの少なくとも一部を含み、プロトコル識別子信号は、インターフェイスでサポートされる複数のコヒーレントプロトコルのうちの特定の1つを識別してパケットに適用し、特定のチャネルは、インターフェイスの複数のチャネルのうちの1つを含み、複数のチャネルは、要求チャネル、データチャネル、及び応答チャネルを含む、送信するステップと;最後のパケットを決定するステップと;後続のクロックサイクルで、アサートされた有効信号、特定のチャネルの1組のEOPレーンでアサートされた最後のパケット(EOP)信号、及び1組のヘッダーレーンで第2のヘッダー信号を送信するステップであって、第2のヘッダー信号は、パケットのヘッダーの少なくとも一部を含み、アサートされたEOP信号は最後のパケットを識別する、送信するステップと;を含む。
【0225】
例69は、例68の主題を含み、有効信号のデアサートを識別するステップをさらに含み、有効信号のデアサートにより、ヘッダー信号が中断される。
【0226】
例70は、例68~69のいずれか1つの主題を含み、第1のクロックサイクルで、特定のチャネルの1組の共有クレジットレーンで共有クレジット信号を送信するステップをさらに含み、共有クレジット信号により、共有クレジットと専用クレジットのどちらをヘッダーと共に使用するかが特定される。
【0227】
例71は、例70の主題を含み、共有クレジット信号により、専用クレジットが使用されることが特定されたとき、VC ID信号は、専用クレジットに関連する特定の仮想チャネルを識別する。
【0228】
例72は、例68~71のいずれか1つの主題を含み、特定のチャネルはデータチャネルを含み、方法は、データチャネルのペイロードデータ信号の1組のレーンでペイロードデータを送信するステップをさらに含む。
【0229】
例73は、例72の主題を含み、ペイロードデータは、ヘッダー信号の受信に続いて特定の数のクロックサイクルで送信されるように規定される。
【0230】
例74は、例73の主題を含み、特定の数のクロックサイクルは、インターフェイスのヘッダーペイロード分離パラメータにおいて構成される。
【0231】
例75は、例68~74のいずれか1つの主題を含み、特定のチャネルのブロッキング信号レーンでブロッキング信号を受信するステップと;ブロッキング信号の受信に基づいて、1組の有効なレーンで有効信号をデアサートするステップと;をさらに含む。
【0232】
例76は、例75の主題を含み、インターフェイスの構成パラメータにおいて規定された数のクロックサイクルを決定するステップをさらに含み、有効信号は、ブロッキング信号の受信後に、規定された数のクロックサイクルをデアサートする。
【0233】
例77は、例68~76のいずれか1つの主題を含み、ヘッダー信号の幅は、複数のコヒーレントプロトコルの中で最大のヘッダーフォーマットに基づく。
【0234】
例78は、例68~77のいずれか1つの主題を含み、要求チャネルは、要求に関連するメッセージをエージェントに通信するためのチャネルであり、応答チャネルは、応答に関連するメッセージをエージェントに通信するためのチャネルであり、応答にはペイロードデータなしの応答が含まれ、データチャネルは、ペイロードデータを含むデータ転送に関連するメッセージを通信するためのチャネルである。
【0235】
例79は、例68~78のいずれか1つの主題を含み、相互接続のグローバルチャネル内の初期化信号のセットを用いてインターフェイスを初期化するステップをさらに含み、グローバルチャネルは、複数のグローバルチャネルレーンに関連付けられ、初期化信号のセット内の各信号が、複数のグローバルチャネルレーンのそれぞれ1つにマッピングされる。
【0236】
例80は、例79の主題を含み、インターフェイスの初期化は状態マシンによるものであり、状態マシンは複数の初期化状態を規定し、複数の初期化状態の間の遷移は、初期化信号のセットの値に基づく。
【0237】
例81は、例80の主題を含み、メッセージは、インターフェイスの初期化の完了後にチャネル上で送信される。
【0238】
例82は、例81の主題を含み、初期化の完了時に、要求チャネル、応答チャネル、及びデータチャネルのそれぞれの、それぞれのフロー制御信号レーンでフロー制御クレジットを受信するステップをさらに含む。
【0239】
例83は、例68~82のいずれか1つの主題を含み、要求チャネル、応答チャネル、及びデータチャネルのそれぞれに含まれるそれぞれのクレジットリターンレーンでクレジットリターンを受け取るステップをさらに含む。
【0240】
例84は、例83の主題を含み、クレジットリターンは、専用及び共有クレジットのリターンを含む。
【0241】
例85は、例68~84のいずれか1つの主題を含み、複数のコヒーレントプロトコルは、CXL.memプロトコル及びCXL.cacheプロトコルを含む。
【0242】
例86は、例68~85のいずれか1つの方法を実行する手段を含むシステムである。
【0243】
例87は、システムであり、このシステムは、ファブリックと;ファブリックを介して通信可能に結合された複数の計算ブロックと;を含み、複数の計算ブロック内の特定の計算ブロックが、1組のコヒーレント相互接続プロトコルをサポートするエージェント回路と;相互接続ファブリックに結合するインターフェイスであって、1組のコヒーレント相互接続プロトコルをサポートするように構成されるインターフェイスと;を含む。インターフェイスは、第1の複数の物理レーンに結合するグローバルチャネルであって、インターフェイスをサポートする制御信号を通信するためのグローバルチャネルと;第2の複数の物理レーンに結合する要求チャネルであって、要求に関連するメッセージをファブリック上の他のエージェントに通信するための要求チャネルと;第3の複数の物理レーンに結合する応答チャネルであって、応答チャネルは、応答に関連するメッセージをファブリック上の他のエージェントに通信するためのチャネルであり、応答にはペイロードデータのない応答が含まれる、応答チャネルと;第4の複数の物理レーンに結合する複数のデータチャネルであって、データチャネルは、データ転送に関連するメッセージをファブリック上の他のエージェントに通信するためのチャネルであり、データ転送にはペイロードデータが含まれる、データチャネルと;を含む。
【0244】
例88は、例87の主題を含み、システムは、システムオンチップ(SoC)を含み、SoCは、ファブリック及び複数の計算ブロックを含む。
【0245】
例89は、例87~88のいずれか1つの主題を含み、ファブリックは、ネットワークオンチップデバイスを含む。
【0246】
例90は、例87~89のいずれか1つの主題を含み、コンピュータメモリをさらに含み、要求は、コンピュータメモリを対象とする要求である。
【0247】
例91は、例87~90のいずれか1つの主題を含み、要求チャネル、応答チャネル、及びデータチャネルのそれぞれが、それぞれの複数の信号を含み、複数の信号の各信号は、チャネルの物理レーンのそれぞれのサブセットに割り当てられる。
【0248】
例92は、例91の主題を含み、複数の信号の第1の部分がファブリックに送信され、複数の信号の第2の部分がファブリックから受信される。
【0249】
例93は、例91~92のいずれか1つの主題を含み、要求チャネル、応答チャネル、及びデータチャネルの複数の信号のそれぞれが、それぞれの有効信号、プロトコル識別子信号、仮想チャネル識別子フィールド、及びヘッダー信号を含み、有効信号は、ヘッダー信号の有効なインスタンスに合わせてアサートされ、ヘッダー信号には特定のメッセージのヘッダーが含まれ、プロトコル識別子信号はヘッダーに関連するプロトコルを識別し、仮想チャネル識別子信号(フィールド)は、特定のメッセージに使用される仮想チャネルを識別する。
【0250】
例94は、例93の主題を含み、1組のコヒーレント相互接続プロトコルは、複数のプロトコルを含み、プロトコル識別子信号は、ヘッダーに関連するものとして、複数のプロトコルのうちの1つを識別する。
【0251】
例95は、例94の主題を含み、複数のプロトコルは、CXL(Compute Express Link)プロトコルを含み、CXLプロトコルは、CXL.cacheプロトコル及びCXL.memプロトコルを含む。
【0252】
例96は、例94~95のいずれか1つの主題を含み、ヘッダー信号は、複数のプロトコルの最大のヘッダーフォーマットをサポートする幅を有する。
【0253】
例97は、例93~96のいずれか1つの主題を含み、データチャネルの複数の信号は、ペイロードデータを伝送するペイロードデータ信号をさらに含み、ペイロードデータ信号には、複数のレーンが含まれる。
【0254】
例98は、例97の主題を含み、ペイロードデータ信号はヘッダー信号に対応しており、ペイロードデータ信号は、ヘッダー信号の送信後に、複数のクロックサイクルで送信される。
【0255】
例99は、例98の主題を含み、複数のクロックサイクルには、インターフェイスの構成可能なパラメータが含まれる。
【0256】
例100は、例93~99のいずれか1つの主題を含み、要求チャネル、応答チャネル、及びデータチャネルの複数の信号のそれぞれが、それぞれのチャネルに関連するクレジットリターンの受け取りをサポートするクレジットリターン信号をさらに含む。
【0257】
例101は、例100の主題を含み、クレジットは、少なくともヘッダー信号を用いたメッセージの送信と並行してクレジットリターン信号で返される。
【0258】
例102は、例100~101のいずれか1つの主題を含み、クレジットリターンは、仮想チャネル専用クレジット及び共有クレジットのリターンを含む。
【0259】
例103は、例93~102のいずれか1つの主題を含み、要求チャネル、応答チャネル、及びデータチャネルの複数の信号のそれぞれが、ブロッキング要求を受け取るためのブロッキング信号をさらに含み、ブロッキング要求は、対応するチャネルの有効信号のデアサートを生じさせる。
【0260】
例104は、例103の主題を含み、有効信号は、ブロッキング信号のアサート後に特定の数のクロックサイクルでデアサートされる。
【0261】
例105は、例104の主題を含み、特定の数のクロックサイクルには、インターフェイスの構成可能なパラメータが含まれる。
【0262】
例106は、例91~105のいずれか1つの主題を含み、グローバルチャネルには、グローバルチャネルのエージェントからファブリックへのインスタンスが含まれ、要求チャネルには、要求チャネルのエージェントからファブリックへのインスタンスが含まれ、応答チャネルには、応答チャネルのエージェントからファブリックへのインスタンスが含まれ、データチャネルには、データチャネルのエージェントからファブリックへのインスタンスが含まれる。インターフェイスは、第5の複数の物理レーンに割り当てられたグローバルチャネルのファブリックからエージェントへのインスタンス、第6の複数の物理レーンに割り当てられた要求チャネルのファブリックからエージェントへのインスタンス、第7の複数の物理レーンに割り当てられた応答チャネルのファブリックからエージェントへのインスタンス、及び第8の複数の物理レーンに割り当てられたデータチャネルのファブリックからエージェントへのインスタンスをさらに含む。
【0263】
例107は、例87~106のいずれか1つの主題を含み、プロトコルのセットは複数のプロトコルを含み、要求チャネル、応答チャネル、及びデータチャネルは、複数のプロトコルのそれぞれのメッセージをサポートする。
【0264】
例108は、例87~107のいずれか1つの主題を含み、インターフェイスは、要求チャネル、応答チャネル、及びデータチャネルのうちの1つの第2のインスタンスを含む。
【0265】
例109は、例87~108のいずれか1つの主題を含み、グローバルチャネルには、インターフェイスを初期化するための信号のセットが含まれる。
【0266】
実施例110は、実施例109の主題を含み、インターフェイスの初期化は状態マシンによるものであり、状態マシンはインターフェイスの複数の初期化状態を含み、信号のセットの値によって複数の初期化状態の間の遷移を生じさせる。
【0267】
例111は、例87~110のいずれか1つの主題を含み、計算ブロック回路をさらに含み、計算ブロック回路は、システムオンチップ(SoC)内に計算ブロックを実装し、相互接続ファブリックは、SoCの相互接続ファブリックを含む。
【0268】
例112は、例111の主題を含み、計算ブロック回路にはデータプロセッサが含まれる。
【0269】
例113は、例111の主題を含み、計算ブロック回路にはコンピュータメモリが含まれる。
【0270】
例114は、例1~113のいずれか1つの主題を含み、インターフェイスは、等しくない数の要求チャネル、応答チャネル、及びデータチャネルを含む。
【0271】
例115は、例1~114のいずれか1つの主題を含み、インターフェイスは、要求チャネル、応答チャネル、及びデータチャネルのそれぞれの少なくとも1つを含む。
【0272】
本明細書を通して「一実施形態」又は「実施形態」への言及は、実施形態に関連して説明した特定の特徴、構造、又は特性が本開示の少なくとも1つの実施形態に含まれることを意味する。こうして、本明細書全体に亘る様々な場所での「一実施形態では」又は「実施形態では」という句の出現は、必ずしも全てが同じ実施形態を指しているわけではない。さらに、特定の特徴、構造、又は特性は、1つ又は複数の実施形態において任意の適切な方法で組み合わせることができる。
【0273】
上記の明細書では、特定の例示的な実施形態を参照して詳細な説明を行った。しかしながら、添付の特許請求の範囲に記載されている本発明のより広い精神及び範囲から逸脱することなく、様々な修正及び変更を行うことができることは明らかであろう。従って、明細書及び図面は、制限的な意味ではなく、例示的な意味で見なすべきである。さらに、前述した実施形態及び他の例示的な言語の使用は、必ずしも同じ実施形態又は同じ例を指すとは限らず、異なる及び別個の実施形態、並びに潜在的に同じ実施形態を指し得る。