JP2021090188A - ストリーミングファブリックインタフェース - Google Patents
ストリーミングファブリックインタフェース Download PDFInfo
- Publication number
- JP2021090188A JP2021090188A JP2020159410A JP2020159410A JP2021090188A JP 2021090188 A JP2021090188 A JP 2021090188A JP 2020159410 A JP2020159410 A JP 2020159410A JP 2020159410 A JP2020159410 A JP 2020159410A JP 2021090188 A JP2021090188 A JP 2021090188A
- Authority
- JP
- Japan
- Prior art keywords
- header
- data
- interface
- channel
- lanes
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4282—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/04—Generating or distributing clock signals or signals derived directly therefrom
- G06F1/10—Distribution of clock signals, e.g. skew
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/382—Information transfer, e.g. on bus using universal interface adapter
- G06F13/385—Information transfer, e.g. on bus using universal interface adapter for adaptation of a particular data processing system to different peripheral devices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/40—Bus structure
- G06F13/4004—Coupling between buses
- G06F13/4009—Coupling between buses with data restructuring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/40—Bus structure
- G06F13/4004—Coupling between buses
- G06F13/4022—Coupling between buses using switching circuits, e.g. switching matrix, connection or expansion network
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/40—Bus structure
- G06F13/4063—Device-to-bus coupling
- G06F13/4068—Electrical coupling
- G06F13/4081—Live connection to bus, e.g. hot-plugging
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4204—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
- G06F13/4221—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4265—Bus transfer protocol, e.g. handshake; Synchronisation on a point to point bus
- G06F13/4273—Bus transfer protocol, e.g. handshake; Synchronisation on a point to point bus using a clocked protocol
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4282—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
- G06F13/4291—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus using a clocked protocol
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4282—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
- G06F13/4295—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus using an embedded synchronisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/173—Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
- G06F15/17337—Direct connection machines, e.g. completely connected computers, point to point communication networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0026—PCI express
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/25—Routing or path finding in a switch fabric
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Information Transfer Systems (AREA)
- Bus Control (AREA)
- Multi Processors (AREA)
- Communication Control (AREA)
Abstract
【課題】エージェントをファブリックに結合するためのインタフェースを提供する。【解決手段】エージェントをファブリックに結合するためのインタフェース205は、ロード/ストア相互接続プロトコルをサポートし、複数の物理レーンの第1のサブセットに実装されるヘッダチャネルを含む。ヘッダ(HDR)チャネルは、パケットのヘッダデータを送信する際に使用するためのインタフェースの複数レーンの第1のセットである信号505、515、520のセットを具現化する。インタフェースは、さらに、複数の物理レーンの別個の第2のサブセットに実装されるデータチャネルを含む。データ(DATA)チャンネルは、インタフェースの複数レーンの追加セットにマップされ、メッセージのペイロードデータを送信する際に使用される、別の信号510、525、530のセットを具現化する。【選択図】図5
Description
[関連技術]
本出願は、2019年12月5日に出願された米国仮特許出願第62/944,207号の利益を主張するものであり、その開示は、本出願の開示の一部であるとみなされ、その全体が参照により本明細書に組み込まれる。
本出願は、2019年12月5日に出願された米国仮特許出願第62/944,207号の利益を主張するものであり、その開示は、本出願の開示の一部であるとみなされ、その全体が参照により本明細書に組み込まれる。
本開示は、コンピューティングシステム、特に(排他的ではないが)ポイントツーポイント相互接続(point-to-point interconnects)に関する。
半導体加工および論理設計の進歩により、集積回路デバイス上に存在し得るロジックの量の増加が可能になった。当然の結果として、コンピュータシステム構成は、システム内の単一または複数の集積回路から、個々の集積回路上に存在する複数のコア、複数のハードウェアスレッド、および複数の論理プロセッサ、ならびにそのようなプロセッサ内に集積された他のインタフェースへと進化してきた。プロセッサまたは集積回路は、典型的には、単一の物理的プロセッサダイを有し、プロセッサダイは、任意の数のコア、ハードウェアスレッド、論理プロセッサ、インタフェース、メモリコントローラハブなどを含むことができる。
より小さなパッケージにおいてより多くの処理能力を適合させるより大きな能力の結果として、より小さいコンピューティングデバイスは、人気が高まっている。スマートフォン、タブレット、超薄型ノートパソコン、および他のユーザ機器が指数関数的に伸びている。しかし、これらの小さいデバイスは、データ記憶およびフォームファクタを超える複雑な処理の両方のために、サーバに依存している。その結果、高性能コンピューティング市場(すなわち、サーバ空間)の需要も増加している。例えば、現代のサーバでは、典型的には、複数のコアを有する単一のプロセッサだけでなく、計算能力を増大させるための複数の物理的プロセッサ(マルチソケットとも呼ばれる)が存在する。しかし、処理能力がコンピューティングシステム内のデバイスの数と共に増加するにつれて、ソケットと他のデバイスとの間の通信は、より重要になる。
実際、相互接続は、主に電気通信を扱う従来のマルチドロップバスから、高速通信を容易にする本格的な相互接続アーキテクチャへと成長してきた。残念ながら、将来のプロセッサに対する需要はさらに高いレートで消費するので、対応する需要は、既存の相互接続アーキテクチャの能力に置かれる。
以下の説明では、本開示の完全な理解を提供するために、特定のタイプのプロセッサおよびシステム構成、特定のハードウェア構造、特定のアーキテクチャおよびマイクロアーキテクチャの詳細、特定のレジスタ構成、特定の命令タイプ、特定のシステムコンポーネント、特定の寸法/高さ、特定のプロセッサパイプラインステージおよび動作などの例のような、多数の特定の詳細が説明される。しかし、当業者には、これらの特定の詳細は、本開示の実施形態を実施するために使用される必要はないことが明らかであろう。他の例では、本開示を不必要に不明瞭にすることを避けるために、特定のおよび代替のプロセッサアーキテクチャ、記述されたアルゴリズムのための特定の論理回路/コード、特定のファームウェアコード、特定の相互接続動作、特定の論理構成、特定の製造技術および材料、特定のコンパイラ実装、コードにおけるアルゴリズムの特定の表現、特定のパワーダウンおよびゲーティング技術/論理ならびにコンピュータシステムの他の特定の動作詳細などの良く知られた構成要素または方法が詳細に説明されていない。
以下の実施形態は、コンピューティングプラットフォームまたはマイクロプロセッサなどの特定の集積回路における効率的な高速データ伝送およびコンフィギュアビリティを参照して説明することができるが、他の実施形態は、他のタイプの集積回路およびロジックデバイスに適用可能である。本明細書に記載する実施形態の同様の技術および教示は、より良いエネルギ効率およびエネルギ節約からも利益を得ることができる他のタイプの回路または半導体デバイスにも適用することができる。例えば、開示された実施形態は、サーバ、ブレード、デスクトップコンピュータシステム、システムオンチップ(SoC)デバイス、ハンドヘルドデバイス、タブレット、セットトップボックス、車載型コンピューティングシステム、コンピュータビジョンシステム、ゲームシステム、機械学習システム、および組み込みアプリケーションとして具現化されたコンピューティングシステムに適用することができる。以下の説明で容易に明らかになるように、本明細書に記載される方法、装置、およびシステムの実施形態(ハードウェア、ファームウェア、ソフトウェア、またはそれらの組み合わせに関するものであるか否かを問わない)は、高性能コンピュータ相互接続およびそれらのそれぞれのシステムの開発に有益である。
コンピューティングシステムが進歩するにつれて、その中のコンポーネントはより複雑になってきている。その結果、コンポーネント間で結合し通信するための相互接続アーキテクチャも、最適なコンポーネント動作のための帯域幅要件が満たされることを確実にするために、複雑さを増している。さらに、異なる市場セグメントは、市場のニーズに適合するために相互接続アーキテクチャの異なる態様を必要とする。例えば、サーバはより高いパフォーマンスを必要とするが、モバイルエコシステムは、時には、省電力のために全体的なパフォーマンスを犠牲にすることができる。しかし、最大の電力節約で可能な限り最高の性能を提供することは、ほとんどのファブリックの唯一の目的である。以下では、本明細書に記載される解決策の態様から潜在的に利益を得るであろう、いくつかの相互接続が議論される。
一例として、相互接続ファブリックアーキテクチャは、ペリフェラルコンポーネントインターコネクト(PCI)エクスプレス(PCIe)アーキテクチャを含む。PCIeの主な目的は、異なるベンダーのコンポーネントおよびデバイスが、複数の市場セグメント、クライアント(デスクトップおよびモバイル)、サーバ(スタンダードおよびエンタープライズ)、組み込みデバイスおよび通信デバイスにまたがるオープンアーキテクチャで相互運用できるようにすることである。PCIエクスプレスは、広範な将来のコンピューティングおよび通信プラットフォーム用に定義された高性能の汎用I/O相互接続である。使用モデル、ロードストアアーキテクチャ、およびソフトウェアインタフェースなどのいくつかのPCI属性は、その改訂によって維持されてきまたが、以前のパラレルバスの実装は、高度にスケーラブルな完全なシリアルインタフェースに置き換えられてきた。より最近のバージョンのPCIエクスプレスは、ポイントツーポイント相互接続、スイッチベースの技術、およびパケット化されたプロトコルの進歩を利用して、新しいレベルの性能と機能を提供している。パワーマネジメント、サービスの品質(QoS)、ホットプラグ/ホットスワップサポート、データ保全性、エラー処理は、PCIエクスプレスでサポートされている高度な機能の一部である。
ファブリックをプロトコルエージェントに結合するための従来のストリーミングインタフェースは、一般に、専有インタフェース(例えば、Intel(商標)On-Chip System Fabric(IOSF(商標)))、コヒーレントまたは順不同プロトコルのために開発されたインタフェース、および現代のプロトコルおよびアーキテクチャにおける進化するデータレートを扱うためのスケーリングにあまり適応していない他のインタフェースが含まれている。例えば、独自のインタフェースは、カスタムまたはユースケースに特有の情報または機能を持ち、これは、インタフェースの標準化を妨げたり、次世代帯域幅にスケールできない場合がある。他の従来のインタフェースは、例えば、パケットを運ぶためのデータバスとして、より一般的な方法で定義されることができる。しかし、伝統的なバス定義およびインタフェースは、特に、データレートが増加し、より多くのパケットがクロックサイクル毎に処理されることを可能にするにつれて、特に、複数のフロー制御クラスまたは仮想チャネルが存在する場合に、受信機デコードの複雑性をもたらす可能性がある。一例として、任意のチャネルまたはフロー制御の4つ(またはそれより多く)のパケットが所与のクロックサイクルに到達する可能性があり、これらが共有バッファにアクセスしている場合、対応する4つ(またはそれより多く)の論理書き込みポートが受信機に設けられる必要があり、その結果、そのようなロジック(およびバッファ)を提供する専用の過剰な表面積になる。いくつかの例では、従来のインタフェースは、単にインタフェースの複数のコピー(例えば、各フロー制御クラスに対して1つ)をスタンプすることによって、(異なるフロー制御クラスの)サイクル毎の複数のパケットの場合のユースケースを扱い、高いピンカウントをもたらす。さらに、従来のストリーミングインタフェースは、同じ物理的なワイヤ上で互いに続くヘッダおよびデータパケットを有し、待ち時間最適化の可能性を制限する。いくつかの従来のインタフェースは、その他の例示の欠点の中でも、フローをクレジット化する(crediting flows)ための効果的でフレキシブルなメカニズムを提供できない。
幾つかの実装形態では、プロトコル層とファブリックに結合された他のデバイス(例えば、CPU、エンドポイントデバイス、スイッチなど)との間など、デバイス上のエージェントロジックとファブリックとの間で、改善されたスケーラブルなストリーミングインタフェースを定義し得る。ストリーミングインタフェースは、他のロード/ストアプロトコルの中でも、PCIe、コンピュートエクスプレスリンク(CXL)(例えば、CXL.io)などのロード/ストアプロトコルをサポートし得る。改良されたストリーミングインタフェースは、他の例の中でも、特にプロトコルが、PCIe Gen5における32.0GT/s、または64.0GT/sへの動き、およびPCIe Gen6およびCXL3.0で開始することを超えるなど、より高速に近づくにつれて、一層重要となる、電力効率の良い帯域幅スケーリングの利点を提供しながら、実装中にチップ面積および待ち時間の利点を可能にするために、インタフェースルールおよびインタフェースのチャネルを定義し得る。このようなインタフェースは、ピン数対受信機デコードの複雑性の最良のバランスを最適化し得る。いくつかの実装形態では、本明細書で論じられる改良されたストリーミングインタフェースは、受信機バッファが複数の仮想チャネルおよびフロー制御クラスの間で共有される受信機バッファ上の適度な数の論理書き込みポートを可能にし得る。さらに、改良されたストリーミングインタフェースは、パケットのヘッダおよびデータを独立した物理チャネル(例えば、ヘッダチャネルおよびデータチャネル)に二分し、それによってデータが依然としてストリーミングしている間に受信機がヘッダの処理を開始することを可能にし、それによって全体的な待ち時間およびバッファサイズ決定および複雑性を低減するのを助ける。さらに、本明細書で論じる改良されたストリーミングインタフェースは、IPブロックのエコシステムが、従来の専有インタフェースではなく、スケーラブルで標準化されたインタフェースを採用するとともに開発することを可能にし、特に本明細書で論じるような例示的な特徴および利点の中でも、より多くの相互運用性のオプションを可能にするために、標準化され得る。
図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)ポート、二次記憶ブロック、およびシリコンダイなどの単一のダイまたは基板上の他の計算ブロックなどのコンポーネントを含み得る。
例示的な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)として実装され得る。
種々のブロック(例えば、110、115、120、125、130、135、140、145)による通信は、ブロック(例えば、110、115、120、125、130、135、140、145)上に設けられるプロトコルエージェント(例えば、160a〜h)を介して促進され得る。各エージェント(例えば、160a〜h)は、それを介して対応する計算ブロックがシステム内の他の計算ブロックと通信する1つまたは複数の相互接続プロトコル(例えば、PCIe、コンピュートエクスプレスリンク(CXL)、Gen−Z、OpenCAPI、インダイ(In-Die)インタフェース、アクセラレータ用のキャッシュコヒーレント相互接続(CCIX)、ウルトラパス相互接続(UPI)など)の層のすべてまたはサブセットを実装するためのロジック(例えば、ハードウェア回路、ファームウェア、および/またはソフトウェアで実装される)を含み得る。本明細書に記載されているように、エージェントは、それぞれのインタフェースを介してファブリック150に結合し得る。このようなエージェントは、伝統的に、専有のワイヤインタフェースを介してファブリックに結合されるが、1つまたは複数のエージェント(例えば、160a〜h)は、構成可能なフレキシブルオンダイワイヤインタフェースのそれぞれのインスタンス(instances)を利用し得、これは、SoC105の複数の異なるエージェントの複数の異なるプロトコルをサポートするように展開され得る。他の例では、エージェント(例えば、160a〜h)間のインタフェースは、非コヒーレントおよび/またはロード/ストアストリーミングプロトコルをサポートするようになり得るとともに、対応するストリーミングファブリックインタフェースは、他の実施例の中でも特に、ブロック(例えば、110、115、120、125、130、135、140、145)およびファブリック150上に定められ得るとともに実装され得る。
上述のように、改良されたストリーミングファブリックインタフェースアーキテクチャ(SFI)は、エージェントとファブリックとの間のロード/ストアプロトコル(例えば、PCIe、CXL.io)をマッピングするために、システムのコンポーネント(例えば、システムのファブリックを実装するIPブロックおよびコンポーネント)内に設けられ得る。SFIインタフェースは、そのようなプロトコルのための新たな次世代速度を含む、ロード/ストアプロトコルの高帯域幅要求を維持することができるスケーラブルストリーミングインタフェースを提供することができる。SFIインタフェースは、このような高いデータ転送速度を送信するときに、送信側と受信側の両方で実装を容易にし得る。加えて、SFIインタフェースを実装するロジックは、他の例示な利点の中で、受信機上の読み出し/書き込みポートのコンテキストにおけるストレージオーバーヘッドを大幅に単純化するために、インタフェース上の通信のためのルール(例えば、インタフェースによってサポートされているプロトコルで定義されているものを超える)を具体化し、実現し、実施し得る。
SFIインタフェースは、ホストCPUのコンテキスト(例えば、ルートコンプレックスを通して)またはデバイスエンドポイントのコンテキストの両方で使用され得る。どちらの場合も、SFIは、異なる処理エンティティ間でプロトコル層(トランザクション層)固有の情報を運ぶ役割を果たす。一例として、デバイス側では、SFIを使用して、PCIeコントローラとアプリケーション層(例えば、コントローラとファブリックとの間のファブリックまたはガスケット層)との間をインタフェースすることができる。同様に、ホスト側では、SFIを使用して、PCIeルートポートとCPUファブリックとの間をインタフェースすることができる。設定可能なパラメータは、SFIインタフェースで定義され、インタフェースのインスタンスが十分に広くパラメータ化され、サポートされているプロトコルとシステムの使用例(複数可)に従って単一の転送で複数のパケットを運ぶことを可能にし得る。与えられたSFIインタフェース上では、データ転送は一方向であり得る。従って、幾つかの実装形態では、通信ブロック間の双方向データ転送を利用する実装を容易にするために、一対のSFIインタフェースインスタンス(各方向に1つ)が設けられ得る。従って、本明細書では、多くの例が、SFIインタフェースの単一インスタンスに対する送信機(TX)及び受信機(RX)の対について論じる。
異なる構成(configurations)が、中間インタフェースとしてSFIを使用して有効にされることができる。例えば、SFIインタフェースは、インタフェースの送信機と受信機のプロトコルまたはアプリケーション固有の責任(responsibilities)について想定しなくてもよい。むしろ、SFIインタフェースは、単に広帯域パケット転送のためのメカニズムとルールを提供するだけでよい。例えば、図2は、2つのSFIインタフェースインスタンス205a、205bを介して、コントローラ210(例えば、エージェントの)をアプリケーション層215(例えば、ファブリックを介して実装される)に結合する例示の実装を示す簡略ブロック図200である。コントローラ210は、特定の相互接続プロトコル(例えば、PCIe)に従ってリンク220を確立し、リンク220を介した初期化、トレーニング、および通信に参加するためのプロトコル回路または他のロジックを含み得る。図2の例は、PCIeアプリケーションにおけるSFIの使用例を示し得る。SFIインスタンス205aは、PCIeコントローラ210を送信機として、アプリケーション層エレメント215を受信機として扱い得る。従って、アプリケーション層エレメント215は、フロー制御クレジット(SFIインタフェース205aのチャネルに対する共有クレジットを含む)を維持する際に使用するために、SFIインタフェース205aのための受信バッファを含み得る。同様に、SFIインタフェース205bは、アプリケーション層エレメント215を送信機と、およびPCIeコントローラ210を受信機と見なし得る(コントローラ210は、インタフェース205bと共に使用するための対応する受信機キューまたはバッファ225を含み得る)。
SFIのいくつかの実装は、PCIeベースのプロトコルのセマンティクスおよびヘッダフォーマットを利用し得るが、SFIはサポートされているPCIeベースのプロトコルに限定されない。さらに、SFIは新しいプロトコル定義を含まない。SFIセマンティクスは、他の例示の機能の中で、プロトコルが、SFIが提供するフロー制御(FC)および仮想チャネル(VC)セマンティクスにマッピングされるまたは適合されることができれば、様々な異なるプロトコルをサポートするために使用することができる。例えば、SFIは、受信側キューに対する0以上の共有クレジットプールの広告をサポートする(詳細は後述)。
図3を参照すると、簡略化されたブロック図300が示され、従来のSFIインタフェースを利用するルート複合スタックを示す。例えば、SFIインタフェース205a、205bは、プロトコルスタックロジック(例えば、305、310)を、非コヒーレントからコヒーレントへのプロトコル変換器315(例えば、プロトコルスタックロジックとシステムの相互接続ファブリック215との間に位置し得る)に結合するために使用され得る。例えば、プロトコルスタックロジックは、特定の非コヒーレントロード/ストア相互接続プロトコル(例えば、PCIe、CXL.ioなど)のためのエージェントまたはコントローラとして具体化され得、物理層ロジックおよびリンク層ロジックを含む下位層ロジック305(例えば、回路において実施される)を含み得る。また、トランザクション層ロジック310が設けられ得るとともに、SFIインタフェース(例えば、205a、205b)を介してコンバータ315とインタフェースする層であり得る。バッファ225(例えば、I/O/キュー(I/OQ)バッファ)が設けられ得るとともに、デバイスとホストとの間の物理的なリンク待ち時間を隠すために使用され得る。このようなバッファ225の深さは、典型的には浅く、必要とされる論理書き込みポートの数は、1クロックサイクルでリンクから利用可能な同時パケットの数である。例えば、一例では、PCIe Gen5の速度(32GT/s)では、最大4つのパケットが1つの1GHzサイクルで到達することができるので、パケットが異なるフロー制御クラスおよび/または仮想チャネルのものである可能性があるとすれば、これらのパケットを同時に処理するためには、4つの論理ポートがこのような例では必要となる。一方、ファブリック側バッファ230(例えば、ProcQバッファ)は、(例えば、インバウンド書き込みのために、所有権要求を取得し、データをコヒーレンスドメインにコミットする待ち時間に変換する)CPUファブリック待ち時間を隠すために使用される深いバッファとして実装され得る。これらは、1つまたは複数の書き込みポートを使用し得る。分割キューによる実装では、SFIセマンティクスは、さらなる最適化(例えば、ProcQ側でトランザクションの「バッチ処理」を実行する)を可能にし得る。実際、SFIセマンティクスは、他の例示の利点の中で、様々なシステム構成におけるバッファ実装を改善するように指向され、受信機の複雑さと帯域幅スケーリング能力のバランスを提供する。
例で採用された例示の特徴の中で、改善されたSFIインタフェース、受信機デコーディングは、広範囲のデータペイロード(例えば、4B程度から4KB程度(またはそれより多く))をサポートするように、インタフェーススケーリングで単純化され得る。改善されたストリーミングインタフェースは、同じサイクルで複数のパケットが配送されることを可能にし、共通のセマンティクスのセットと順序(例えば、PCIeベースなど)を維持しながら、様々なペイロードサイズにわたってスケーラブルインタフェースを可能にする。設定可能なパラメータは、受信機における論理書き込みポートの数(例えば、1または2)を含み得、これは、対応する数のフロー制御クラスおよび/または仮想チャネルを使用するためにクロックサイクルで送信される異なるパケットまたはヘッダの数を制限するインタフェースのためのルールを定義することによってサポートされ得る。受信機における論理書き込みポートの数を減らすことは、かなりの面積と複雑さを節約し得る。加えて、上述のように、改善されたストリーミングインタフェースは、データが遅延を改善するために(例えば、CPUホストの場合は、着信データストリームと所有権リクエストの遅延を重複させることを助けるために)、データをストリーミング中に開始することができるように、受信機でヘッダ処理(例えば、専用のヘッダチャネルを介して受信されたヘッダの処理)を開始することを可能にし得る。
コンピュートエクスプレスリンク(CXL)は、コヒーレンスプロトコル(CXL.cache)、メモリアクセスプロトコル(CXL.mem)、およびI/Oプロトコル(CXL.io)の動的プロトコル多重化(multiplexing)(または多重化(muxing))をサポートする、低遅延、高帯域幅の離散リンクまたはオンパッケージリンクである。CXL.cacheはホストメモリのデバイスキャッシュをサポートするエージェントコヒーレントプロトコルであり、CXL.memはデバイス接続メモリをサポートするメモリアクセスプロトコルであり、CXL.ioはアクセラレータサポートを強化するPCIeベースの非コヒーレントI/Oプロトコルである。CXLは、これにより、アクセラレータデバイスなどの広範囲のデバイスをサポートするための豊富なプロトコルのセットを提供することを意図している。特定のアクセラレータ使用モデルに依存して、すべてのCXLプロトコル(CXL.io、CXL.mem、CXL.cache)またはサブセットのみが、システムにアクセスするための対応する計算ブロックまたはデバイス(例えば、アクセラレータ)に対する、低遅延、高帯域幅のパスを提供することを可能にし得る。
上述のように、いくつかの実装では、CXL.ioプロトコルを実装するために利用されるエージェントは、本明細書に記載されるような、SFIインタフェースを利用するシステムファブリックに結合し得る。例えば、図4を参照すると、簡略化されたブロック図400が示されており、例示的なCXLエージェントおよびそのようなエージェントのファブリックへの結合が示されている。図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)が使用され得る。CXL.ioについては、コヒーレントCXL.memおよびCXL.cacheプロトコルとは別個のコントローラ420a〜bが提供され得る。プロトコル多重化は、フレックスバス(Flex Bus(商標))物理層(例えば、430a〜b)とインタフェースするCXLアービトレーション/多重化ロジック(例えば、ハードウェア回路で実装される425a〜b)を介して容易にされ得る。フレックスバスは、PCIeまたはCXLのいずれかをサポートするように静的に構成されるフレキシブル高速ポートとして実装され得る。フレックスバスは、PCIeプロトコルまたはCXLプロトコルのいずれかが、広帯域幅のオフパッケージリンク上で送信されることを可能にする。フレックスバスPHY430a〜bでのプロトコル選択は、アプリケーションに基づいて、オートネゴシエーションを介してブート時に行われ得る。
図4の例に続いて、第1のインタフェースタイプ450a、450bは、CXL.cacheおよびCXL.memなどのコヒーレントプロトコルに使用され、他の異なるワイヤインタフェース定義(例えば、205’、205”)(例えば、SFIインタフェース)は、PCIeおよびCXL.ioのようなロード/ストアプロトコルに使用される。一例では、SFI205’、205”は、中間インタフェースとして機能し、これは、送信機と受信機との間のプロトコルまたはアプリケーション特有の責任に関する仮定を行わず、ロード/ストアプロトコル(例えば、PCIe、CXL.ioなど)の高帯域幅要件を維持することができるスケーラブルなストリーミングインタフェースを提供する。SFIは、他の例およびインタフェースの実装の中で、スタンドアロンのプロトコル定義、フロー制御にマッピングされることができる異なるプロトコルをサポートするために提供されるSFIセマンティクス、SFI定義によって提供される仮想チャネルセマンティクス、を含んでいない。
図4に示すように、システムは、例示的なインタフェース450a、450bを使用して、ワイヤがファブリックで共有されることを可能にし、異なるコヒーレントプロトコルが共通のワイヤを共有することを可能にすることによって、ファブリックおよびエージェント周辺でワイヤ効率を達成し得る。例えば、エージェントから発信される種々のプロトコルのチャネルは、物理チャネルおよび仮想チャネルの最小限のセットに注意深くマッピングされ得るので、エージェントおよびプロトコルの帯域幅およびチャネル分離要件は、最低の総ワイヤ数で満足される。インタフェース450a、450bは、他の例示の実装の中で、これらの複数のプロトコルを共通のチャネルのセットにし得、これらのチャネル上の共通のフロー制御および仮想化機能を使用し得る。
いくつかの実装では、PCIeまたはPCIeのセマンティクス(例えば、PCIeまたはCXL.io)に少なくとも部分的に基づいたロード/ストアプロトコルをサポートするように改良されたストリーミングインタフェースが実装され得る。例えば、サポートされるプロトコルは、PCIeで定義されたフォーマットに基づくパケットフォーマットを利用し得る。さらに、フロー制御/仮想チャネルの概念がPCIe定義から拡張され得る。他の追加のプロトコル(例えば、非PCIeまたはCXLプロトコル)も、そのようなSFIインタフェースによってサポートされ得ることが理解されるべきである。実際、本明細書で論じた例の多くは、PCIe-またはCXL.io−ベースのプロトコルおよび実装を参照しているが、本明細書で論じた原理、特徴、および解決策は、他の例示のシステムの中で、例えば、他の様々なストリーミングまたはロード/ストアプロトコルに、より一般的に適用され得ることを理解されたい。
いくつかの実装では、SFIインタフェースは、それぞれが複数のパケットのヘッダまたはペイロードを同時に運ぶことができる、別々のヘッダ(HDR)とデータバスまたはチャネルを有し得る。さらに、正式なルールが、ヘッダおよびデータインタフェース上でパケットがどのようにパック/アンパック(packed/unpacked)されるかを支配するために、エージェントのロジックで設定および採用され得る。例えば、追加のメタデータチャネルまたはバスが、別個のヘッダおよびペイロードデータチャネルそれぞれで送られたヘッダ/データをどのようにアンパックするかを受信機が識別できるようにするために、メタデータを運ぶために改良されたインタフェース上に提供され得る。別々の並列ヘッダおよびデータチャネルを介して、システム(例えば、CPUホストのルートコンプレックス)は、例えば、対応するペイロードが受信される前に、潜在的に複数のヘッダを受信することによって、待ち時間の利益を享受し得る。この結果生じるリードタイムは、システムが、複数のヘッダ要求のデータが依然としてストリーミングされている間に、ヘッダを処理し、複数のヘッダ要求のキャッシュラインの所有権を取得し始めるために使用され得る。これは、他の例示の利点の中で、待ち時間の重複を助け、バッファレジデンシーの減少を助ける。
図5を参照すると、簡略化されたブロック図500が示されており、SFIインタフェースの例示の実装を示している。例えば、SFIインタフェースの各インスタンス(instance)では、一組の物理レーン(例えば、ワイヤまたは他の導体)が、インタフェースのために定義されるとともにインタフェースのそれぞれの物理レーンに割り当てられる信号の論理セットを具体化する種々のチャネルに提供され得るとともに割り当てられ得る。各デバイスは、ピンおよび対応するSFIロジック(ハードウェア回路および/またはソフトウェアで実装される)を有し、インタフェースの、その端部(送信機または受信機)、またはインスタンスを実装し、インタフェース上の送信機と受信機との間の接続を具体化する物理レーンに結合し得る。SFIインタフェースインスタンスは、さらに、送信機から受信機へのパケットまたは他のデータ転送メッセージの送信のための2つのチャネルを定義し得る。具体的には、いくつかの実装では、SFIインタフェース205は、それぞれ、パケットのヘッダデータを送信する際に使用するためのインタフェースの複数レーンの第1のセットである信号のセット(例えば、505、515、520)を具現化するヘッダ(HDR)チャネルを含み得る。SFIインタフェースは、さらに、インタフェース205の複数レーンの追加セットにマップされ、メッセージのペイロードデータを送信する際に使用される、別の信号のセット(例えば、510、525、530)を具現化するデータ(DATA)チャンネルを含む。HDRチャネルの信号は、ヘッダ自体を搬送するためのメインHDR信号505と、ヘッダメタデータ信号515と、ヘッダクレジットリターン信号520(受信機から送信機へ向けられる)とを含み得る。同様に、DATAチャネルは、他の例示の信号の中で、ペイロードデータを搬送するためのメインDATA信号510と、データメタデータ信号525と、データクレジットリターン信号530(受信機から送信機へも向けられる)とを含み得る。いくつかの実装では、SFIインタフェース205は、インタフェースのすべての物理チャネル(例えば、HDRおよびDATA)にわたって適用される双方向制御信号を含むグローバルチャネルまたは層(例えば、550)を追加的に含み得る。例えば、グローバルチャネルは、他の特徴の中で、インタフェースの初期化またはシャットダウンを実行し、インタフェースのための制御またはパラメータを通信するために使用され得るグローバル制御信号のセットを搬送し得る。
HDRチャンネルとDATAチャンネルは、同じ転送サイクルで複数のパケットを運ぶことができる。ほとんどのロード/ストアプロトコルはセマンティクスの順序付けに依存するので、SFIは複数のパケットが同じサイクルで送られるとき、暗黙の順序付けを想定する。パケットは、例えば、最下位の位置から最上位の位置まで順序付けされ得る。例えば、TLP 0がヘッダ信号505のバイト0から始まり、TLP 1がヘッダ信号505のバイト16から始まる場合、受信機は、そのような順序付けルールが適用されるとき、TLP 1がTLP 0の後ろに順序付けされると考える。異なるクロックサイクルにわたる転送については、関連するプロトコルの順序付けルールに従う(例えば、PCIeに使用される場合、SFIはすべてのPCIe順序付けルールを引き継ぐ)。リンクサブディビジョン(例えば、リンクの全体のレーンを2つ以上のより狭い幅のリンク(例えば、それぞれのルートポートに関連付けられる)に分割する)の場合、コントローラの観点からの異なるポートは、SFI上の異なる仮想チャネルにマップされる。例えば、そのような場合、実装は、同じ物理ブロック内の複数のポート設定をサポートすることができる(例えば、エージェントまたはコントローラとして実装される)。これらの場合、SFIの同じ物理チャネルを使用して、異なるポートに対してパケットを転送することができ、各ポートは、他の例示の実装の中で、独自の仮想チャネルのセット(例えば、ポート当たり1つまたは複数の仮想チャネル)にマップされる。
パラメータのセットが、SFIインタフェースのインスタンスに対して定義され、インスタンスのアスペクトを設定し得る。例えば、HDRチャンネルおよびDATAチャンネルのメタデータ信号は、設定可能なパラメータの1つまたは複数に基づき得る。例えば、パラメータは、メタデータ信号が、他の例の情報の中でも、単一転送内の異なるパケットの位置に関する情報を運ぶためにどのようにメタデータを運ぶかを識別し得る。例えば、SFIでは、それに関連付けられるデータを有するパケットヘッダが、HDRチャネル上のパケットヘッダを送信し、関連付けられたデータを、DATAチャネル上で別々に送信する。DATAチャンネルとHDRチャンネルの転送の間のタイミング関係が保証されていない場合がある。受信機は、各受信ヘッダに対して関連するデータ長を追跡し、関連するデータサイズのみを処理すると仮定する。データサイズは、パケットヘッダ情報と共に送信され得る(例えば、PCIeパケットヘッダフォーマットを使用するPCIe実装は、PCIeTLPヘッダの長さフィールド内のデータ量を識別し、いくつのデータの4バイトのチャンクがそのヘッダに関連付けられていることを示す)。メタデータ信号を介して送信されるメタデータ内の情報は、他の例示的な情報の中でも、どのヘッダがどのデータに(例えば、フロー制御および仮想チャネルIDの組み合わせを介して)マップされるか、パリティ情報、ヘッダフォーマットに関する情報(例えば、ヘッダサイズ)を決定するために、受信機によって使用され得る。
信号のグローバル層またはチャネル(例えば、550)は、制御信号、ベンダー定義信号、および他の例示の機能性を可能にする他の信号など、インタフェース205のすべての物理チャネルにわたって適用される信号を搬送し得る。例えば、グローバルチャネル550は、(例えば、以下に説明する実施例において)インタフェースの初期化およびシャットダウンにも使用される信号を搬送し得る。表1は、例示的なSFIインタフェースのグローバルチャネルの信号の例示的な実装を示す。
HDRチャンネルは、送信側から受信側への要求メッセージのヘッダを搬送する。様々な情報が、HDRチャネルを使用して送信されるヘッダの(プロトコル固有の)フィールドにカプセル化され得、アドレスおよび他のプロトコルレベルのコマンド情報を含む。表2は、例示のSFIインタフェースのHDRチャネルの信号の例示の実装を示す。
ヘッダサイズは、システムの期待または要求されるピーク持続帯域幅に基づく所定のパラメータであり得る。SFIインタフェース(および対応するロジック)は、パケットヘッダを開始し、同じ転送サイクルで終了するなど、HDRチャネルのルールを強制し得る。それにもかかわらず、複数のパケットヘッダは、ヘッダ信号レーンの第1のサブセット上のパケットヘッダの1つと、ヘッダ信号レーンの別のサブセット上の他のパケットヘッダを送ることによって、同じサイクルで送られ得る。しかし、インタフェースは、有効なヘッダ転送上の最初のパケットが(論理的にヘッダ信号レーンで表される)ヘッダフィールドのバイト0に対応するヘッダ信号のレーン上で開始することを定義し得る。
ヘッダ有効信号(hdr_valid)は、ヘッダ信号のレーン上の対応する有効値を示すためにアサートされ得る。いくつかの実装では、ヘッダ信号のレーン数は、ヘッダ信号上で搬送されるプロトコルヘッダの1つのサイズに対応するバイト単位のサブセット(例えば、各サブセットにおけるレーン幅の16バイトまたは32バイト)に論理的に分割され得る。さらに、各ヘッダ有効レーンは、有効ヘッダデータがヘッダ信号のレーンのサブセットの対応する1つのサブセット上に送信されていることを示すために、サブセットの1つにマップされ得る。さらに、ヘッダメタデータ信号(hdr_info_bytes)は、対応するヘッダをデコードするために受信機によって使用され得るキー属性を記述するために、メタデータ(例えば、ヘッダ信号上に搬送されるヘッダの1つと整列されたもの)を搬送し得る。
SFIインタフェースのDATA物理チャネルは、それに関連するデータを持つすべての要求のペイロードデータを搬送するために使用され得る。SFIでは、HDRチャンネルと、DATAチャンネルで搬送される関連データとの間に、明示的なタイミング関係や必要条件が存在しない場合がある。しかし、送信機は、HDRチャンネル上のヘッダデータまたはDATAチャンネル上のペイロードデータのいずれかをスケジュールする前に、HDRチャンネルとDATAチャンネルのクレジットの両方をチェックするロジックを備え得る。表3は、例示のSFIインタフェースのDATAチャンネルの信号の例示の実装を示している。
SFIインタフェースの実装において、ペイロードデータは、マルチバイトの粒度(granularity)(例えば、4バイトの粒度)に従って、DATAチャネルのデータ信号上に送信され得る。従って、任意のペイロードのデータは、データの特定の「チャンク」(例えば、特定の4バイトのチャンク)で終わるものとして識別され得る。一例として、データ信号Dの幅が64バイトの場合、可能なデータ終端位置の数はDE=64/4=16であり、data_end[0]はdata_bytes[3:0]に対応し、data_end[1]はdata_bytes[7:4]に対応し、data_end[DE−1]はdata_bytes[D−1:D−4]に対応するなどである。データ信号の開始(data_start)は、データ信号の終了と同じまたは異なる粒度を利用し得る。SFIインタフェースのインスタンスは、パラメータ化されて、クロックサイクルにおける最大開始数DSをサポートし(および、それに従ってペイロードの開始数を制限し)得る。一例として、データ信号バスDの幅が64バイトであり、かつSFIインタフェースのインスタンスが、1サイクルにおける開始数を2、DS=2に制限するように構成されている場合、データバスを、事実上、2つの32バイトのチャンクに分割し、そこで新しいペイロードが送信され得る。例えば、D=62およびDS=2の場合、他の例(データの開始およびデータチャンクの終了におけるより低いまたはより高い粒度(例えば、DS>2)、より小さいまたはより大きいデータバスサイズなどを含む)の中で。data_start[0]は、data byte[0]において始まるデータのチャンクに対応し、data_start[1]は、data byte[32]において始まるデータのチャンクに対応する。
SFIインタフェースのDATAチャネルの一つの例示的な実装では、データ開始信号の幅はDSに等しくてもよく、信号は、各ペイロードの開始に対応するデータ信号(例えば、同じクロックサイクル内で整列される)上の対応するデータの各チャンクを識別するためのマスクとして効果的に作用してもよい。さらに、各データ開始ビットは、それとともに送信される対応するペイロードのメタデータを示すdata_info_byte信号を有し得る。いくつかの実装では、data _info_byteは、(例えば、対応するデータ開始チャンクおよびdata _start_bitとともに)所与のペイロードに対して1回だけ送信されるが、他の例では、メタデータは、他の例示の実装の中で、同じペイロード内のすべてのデータのチャンクに対応するように送信され(例えば、反復され)得る。1つの実装では、data_info_byte信号は、データ信号バスを介して送信されるデータペイロードを処理する際の受信機による使用のための他の例示の情報の中で、FC IDを搬送する対応するパケット(例えば、data_info_byte[3:0]の4ビットを持つ)およびVC IDを搬送する(例えば、data_info_byte[7:4])他の4ビットのそれぞれのFC IDおよびVC IDを示し得る。
HDRチャンネルとは異なり、DATAチャンネルのいくつかの実装では、同じパケットからのデータチャンクが複数のサイクルにわたって転送されることができる。例えば、生データバス幅は、サイクル当たり64Bとして実装することができ、128Bデータパケットが2クロックサイクルにわたって転送されることを可能にする。いくつかの実装では、ペイロードが一旦送信を開始すると、送信機はペイロード中の全ての関連データチャンクがLSBからMSBへ連続的に且つ連続的なクロック(例えば、ギャップやバブルなしで)にわたって転送されることを保証し得る。いくつかの実装では、特定のFC ID/VC IDの組み合わせのうちの一つのパケットのみがインタフェース上で一度に送信され得る(FC ID/VC IDの組み合わせは、組み合わせを使用する前のパケットが送信を終了した後でのみ再利用される)。いくつかの実装では、異なるFC ID/VC IDの組み合わせを持つパケットは、他の例の中で、SFIインタフェース上でインタリーブされ得る(例えば、1つのFC ID/VC IDの組み合わせのパケットが、別のFC ID/VC IDの組み合わせを持つパケットの少なくとも一部を送信するために中断されている)。
データチャネル上のクレジットの粒度は、また、(例えば、設計コンパイル時に)設定可能であり得るとともに、Nバイトの倍数に対応し得る。例えば、一例では、粒度は4バイトの倍数であることが要求され得る。クレジット粒度が16バイトであるように選択される場合、転送された4バイトのデータパケットでさえ、例示的な実装の中で、1つの16バイト相当のクレジット(one 16-byte worth of credit)を使用する。
図6は、例示的なSFIインタフェースと共に使用するための受信バッファの例示的な実装を示す簡略化されたブロック図600である。一例では、受信バッファは、単一の書き込みポートを有するリンクリストとして実装され、1つのフロー制御クラス(FC0)の2つの仮想チャネル(例えば、VC0およびVC1)の間で共有され得る。この例では、サイクル当たり4つのヘッダが対応するSFIインタフェースで受信されることがきる。リンクリストは、4つのヘッダ位置のブロック(例えば、630a〜c)で一度に管理される。リンクされたリストは、論理的に隣接するメモリ内にあるように見え得るが、物理的なブロックは、隣接しないように、または別個の記憶素子にさえ実装され得る。一例において、与えられたブロック(例えば、630a)内の全ての位置は、次のブロック(例えば、630b)に移動する前に満たされることになる。バッファは、受信機によって一度に1ブロックずつ割り当てられ、したがって対応する共有クレジットもブロック粒度(block granularity)にあり得る。実装では、ブロック(例えば、630a)内の4つのヘッダ(例えば、605a〜d)のセットが、実際には別々のストレージ構造で作られている場合、これらのストレージカラムの各々は、単一の書き込みポートのみでうまく実装され得る。例えば、図6のリンクされたリストバッファに示された列の各々は、それぞれの単一の書き込みポートを有する別個のバッファ/記憶素子として物理的に実装され得る。さらに、次のブロックポインタは、4つのヘッダ(図6の例では)中の一度検索される必要があるだけなので、タイミングリリーフおよびパイプラインの可能性は、リンクされたリストポインタ(例えば、615、620、625)の「ブロック」管理を使用することによってアンロックされ得る。いくつかのストリーミングプロトコルでは、受信機は、一般的なケースでは、1サイクルあたり1つのだけのFC/VCの組み合わせを想定することはできないため、複数の書き込みポートを有して設計され得、それを備え得る(例えば、異なるFC/VCのテールが同じストレージカラム内で衝突する可能性があるため)。
上述したように、SFIインタフェース(および、送信機および/または受信機によってそのインタフェースの半分を実装するために利用される対応するロジックおよびバッファ/トラッカ)は、データがストリーミングしている間にヘッダ処理のパイプライン化を可能にし得る。実際、それを通して実現される待ち時間の節約は、ヘッダ処理の観点から、直接、受信機内の保存されたバッファに変換される。ロード/ストアプロトコルのコンテキストでは、ヘッダは制御パスによって大量に消費されるが、大部分のデータはデータパスに隔離されるので、受信機はいずれにしてもヘッダとデータを内部的に分離すると想定される。例示的なSFIインタフェース上でヘッダとデータチャネルを分割することによって、後続のリクエストのヘッダは、以前のリクエストのデータをバイパスさえし得、これは、データ転送が完了している間に受信機がヘッダを処理することを開始することを可能にすることができる。ホストCPUがインバウンド(デバイスからホストへ)書き込みを処理するコンテキストでは、これは、例示的な使用ケースおよび利点の中で、関連するキャッシュラインの所有権を取得する有利なスタートに変換し得る。実際、所有権を取得すること(fetching ownership)は、処理が書き込むときの待ち時間の最も重要なドライバの1つであるため、データがストリームする間にこれをオーバーラップすることは、CPUにおける全体的な待ち時間およびバッファを減らすのに役立つ。デッドロックは、ヘッダまたはデータのいずれかを送信する前に送信機がヘッダおよびデータクレジットの両方をチェックしていることを確認することによって回避される。
いくつかの実装では、SFIインタフェースのために定義された各VCとFCは、メッセージを送信するためにクレジットを使用し、受信機からクレジットリターンを収集する。ソースは、メッセージが完了するために必要なすべてのクレジットを消費し得る。送信機は、それぞれのチャンネルで対応するメッセージを受信機に送信する前に、HDRチャンネルとDATAチャンネル両方のクレジットをチェックする。HDRとDATAチャンネルのクレジットの粒度は、TXとRXとの間であらかじめ決められている。例えば、データチャネル上のクレジットの粒度は、Nバイトの倍数のみに設定され得る(例えば、設計コンパイル時に)。例えば、一例では、粒度は4バイトの倍数であることが要求され得る。クレジット単位が16バイトに選択される場合、転送される4バイトのデータパケットでさえ、他の例示的な実装の中で、1つの16バイト相当のクレジットを使用する。一例では、FC IDは、他の例示的な実装の中でも、PCIeセマンティクス(例えば、4’h0=ポストされている、4’h1=ポストされていない、4’h2=完了)に基づくことができる。さらに、物理チャネル(例えば、DATAおよびHDR)の各々は、(受信機から送信機に流れる残りのチャネルとは異なり、)専用のクレジットリターンワイヤが装備され得る。例えば、動作中に、受信機はメッセージを処理したとき(または次のトランザクションのバッファ位置を保証したとき)にいつでもクレジットを返す。
いくつかの実装では、SFIは、異なるFCおよびVC ID間のバッファ共有をサポートする2つのスキームを許可している。両方のスキームにおいて、受信機は、前方進行保証(forward progress guarantee)に必要な最小数の専用リソースを広告する。大きなパケット転送の場合、これは、最大ペイロードサイズが専用のクレジット広告に基づいていることを意味する。共有クレジットが使用される場合、送信機および受信機は、どのクレジットタイプまたはスキームが使用されるべきかを事前に決定する。この決定は、幾つかの実装では、設計時に行われ得る。他の実装では、クレジットスキームは、他の例の中で、動的に決定され得る(例えば、対応する構成レジスタに書き込まれたパラメータに基づいて)。
クレジット共有のための2つのスキームのうちの最初の1つは、送信機管理であり得る。このスキームでは、送信機は受信機内の共有バッファを管理する責任を負う。1つまたは複数の共有クレジットプールが、スペアのVC ID/FC IDエンコーディングで広告または消費される。送信機が共有クレジットプールクレジットを消費する時、送信機は対応するVC ID/FC IDエンコーディングを使用してパケットを送信する。受信機が、共有クレジットを使用したトランザクションの割り当てを解除するとき、対応するVC/FC IDの組み合わせに対してクレジットリターンを実行する。いくつかの実装では、クレジットが共有クレジットであるか否かを示すために、(HDRチャネル上の対応する信号と共に)ヘッダ内にビットが提供され得る。従って、受信機は、他の例の中で、パケットの実際のVC IDまたはFC IDを明示的に決定するために、ヘッダパケットをさらにデコードしなければならない場合がある。
送信機管理クレジットシェアリングの1つの例示の実装では、受信機によって広告された例示の共有クレジットプールのマッピング(例えば、PCIeベースの実装における)は、リンク上の2つのVCをサポートし、表4に示されている以下の例のマッピングを採用し得る:
2つのクレジット共有スキームのうちのもう1つのスキームは、受信機管理され得る。受信機管理スキームでは、レシーバは共有バッファを管理する責任がある。専用クレジットだけが送信機に広告される。典型的には、広告された専用クレジットは、SFIにわたるポイントツーポイントクレジットループをカバーし、共有クレジットは、より大きいクレジットループ(例えば、CPUファブリックまたはアプリケーション層待ち時間)をカバーするために使用される。特定のFC/VC IDトランザクションが受信され、共有クレジットが利用可能になった後、クレジットが、そのFC/VC IDの組み合わせに対して返されることができる(例えば、トランザクションが受信機キューから解放されるのを待つことなく)。これは暗黙のうちにそのFC/VC IDに対する共有バッファスポットを与える。内部的には、受信機はFC/VCベースで送信機に返されたクレジットを追跡し、送信機が現在消費しているクレジットをさらに追跡する。この追跡により、受信機はFC/VCごとに使用されるバッファの最大数を保証することができる。受信機は、他の例示の実装の中で、前方進行保証のために必要な専用リソースを保証し得る。
不正なフロー制御の場合のエラー処理は、未定義の動作になる可能性がある。従って、エージェントおよびファブリック上のSFIインタフェースロジックは、RTLにおけるアサーションをトリガするための不法なケースをチェックし、また、ポストシリコンデバッグを可能にするために致命的エラーをログ/シグナルし得る。例えば、SFIは、HDRストリームとDATAストリームの間の一貫性を維持することができ、これは、送信機が、対応するヘッダを送信するのと同じ順序でデータペイロードを送信することを意味し、その逆も同様である。幾つかの実装では、受信機ロジックは、他のエラー処理機能の中で、違反の致命的エラーを検出しフラグを立てる機能を含み得る。いくつかの実装では、SFIは、データ転送の終わりに送られることになるデータ汚染に備える。時々のエラーの場合、所有権要求は、変更することなく破棄/書き戻され得るか、またはホストは、他の例の中で、関連するキャッシュラインを汚染し、更新されたデータを書き込むことを選択し得る。
図7を参照すると、例示のメタデータフォーマット700の表現が示されており、これは、ヘッダメタデータ信号のレーン上で搬送され得る。最下位バイトと最下位ビットが右側に表示される。P(705)は、対応するヘッダのパリティビットである。幾つかの実装では、パリティビットに対するサポートはオプションであり得る(例えば、パリティビット705は追加の予約ビットとして扱われる)。サポートされる場合、パリティは、例えば、パケットヘッダのビットの少なくとも全てをXORする(XOR-ing)ことによってサポートされ得る。いくつかの実装では、関連するメタデータ700のビットおよび非パリティビットの両方が、他の例の中で、パリティを決定するためにXORされ(XOR-ed)得る。ビットD(710)は、ヘッダが、それに関連付けられる対応するペイロードデータを有するかどうかを示す。すべての予約ビット(例えば、715)は、受信機を無視し得る、又は、送信機によって0に駆動されることを要求され得る。いくつかの実装では、ウィッチ/ファブリックルータが、何らの変更もなく、予約ビット715をそのまま伝搬することを要求され得る。いくつかの実装では、予約ビット715は、他の例の中で、ベンダー定義のエンコーディングまたは将来の情報のために使用され得る。例示的なメタデータ700におけるヘッダサイズ(HDRサイズ)725は、ヘッダのサイズ(例えば、4バイト単位)を指定し得る。ヘッダサイズを計算するとき、ヘッダメタデータ(700)の長さは無視され得る(そしてヘッダの一部と見なされない)。
SFIインタフェースの実装では、インタフェース上の1サイクルで送信可能な最大パケットヘッダの数は予め決定され得る(例えば、インタフェースの設定可能なパラメータに記録され得る)。1サイクルあたりの最大パケットヘッダは、ヘッダ信号の幅(またはレーン数)(H)と最大パケットヘッダサイズによって決定され得る。SFIインタフェースは、ヘッダ幅(H)が、一般的なケースの使用法が最大スループットを維持することを可能にするように実装(および設計)され得る。一例として、一般的なアプリケーションヘッダサイズが16バイト(例えば、PCIeの4つのD−Wordヘッダへのマッピング)であり、インタフェースがサイクル当たり2つのヘッダを維持すると仮定すると、H=2*(16)=32バイトとなる。対応する有効な信号(およびレーン)が、サイクル当たりの所望のヘッダ数に対応するように、HDRチャネルに含まれ得る。一例として、インタフェースがサイクル当たり2つまでヘッダを維持することが望ましい場合、対応するM=2の有効レーンの数が、サイクル中の潜在的な2つのヘッダの各々に対して1つの有効な信号をサポートするために定義され得る(例えば、hdr_valid[0]はヘッダ信号のバイト0で始まるヘッダに対応し、hdr_valid[1]はヘッダ信号のバイト16で始まるヘッダに対応する。)。いくつかの場合、サポートされるプロトコルのヘッダフォーマットの1つ又は複数が、ヘッダ信号に定義されたレーンのサブセットの1つのみで送信され(および有効な信号レーンのそれぞれに割り当てられ)るには大きすぎる可能性があり、そのようなヘッダは、送信のためのヘッダ信号のレーンのサブセットの2つ以上を利用し得る(そして、2つ以上の関連した有効な信号のうち最初の(最下位)の1つのみがアサートされ得る)。このような場合、サイクル当たりの最大ヘッダが2に設定されているときに、より大きなヘッダフォーマットがヘッダ信号に対して送信される場合、1ヘッダのみがそのサイクルでは転送されることができ、hdr_valid[1]は、他の例の中で、主張されない。
図7の例に続き、ヘッダメタデータは、ヘッダ(および関連パケット)のフロー制御に使用するための情報を追加的に含み得る。例えば、メタデータは、ヘッダ用の仮想チャネル(VC)識別子(ID)720と、ヘッダ用のフロー制御クラス(FC)ID730とを含み得る。いくつかの場合、パケットの順序付けは、パケットのVC IDおよびFC ID(例えば、VC IDおよびFC IDの組み合わせ)に従い得る。幾つかの実装では、SFIインタフェースのパラメータは、インタフェースに対して、インタフェースの任意の与えられた転送サイクル(例えば、クロックサイクル)において使用されることが可能にされる、所定の数の最大FCおよびVC IDの組み合わせを設定するように構成され得る。このFC−VCの組み合わせの最大数は、送信機と受信機のインタフェースロジックの両方で、広告されるか、さもなければ設定され得る(例えば、設計コンパイル時)。この最大値は、例えば、受信機バッファがサポートされたFCおよび/またはVC間で共有されるときに、受信機のストレージにおける書き込みポートを最小化するのを支援するように設定され得る。一例として、インタフェースは、あるサイクルで最大の2つの異なるFC−VCの組み合わせを受け入れるようにパラメータ化され得、その結果、任意の所与のサイクルにおいて、転送された全てのパケットヘッダは、同一のVC内の最大2つの異なるFC、同一のFCだが2つの異なるVC、または同一のFC−VCの組み合わせに属することになる。
送信機は、FC、VC、またはFC−VCの組み合わせに関連するクレジットを利用して、パケットがチャネルを介して送信されるかどうかを判定し得る。例えば、パケットヘッダはそれに関連するデータがある場合、パケットヘッダはHDRチャンネルで送信され、関連するデータはDATAチャンネルで送信される。ヘッダまたはペイロードデータを送信する前に、送信機は、ヘッダまたはペイロードデータ転送をスケジュールする前に、ヘッダおよびペイロードデータ(および対応するHDRおよびDATAチャネル)の両方について利用可能なクレジットを(例えば、ローカルメモリにおけるトラッキングレコードを)チェックし得る。いくつかの実装では、ヘッダチャネルのクレジット粒度が最大サポートヘッダサイズに設定され得る。例えば、サポートされる最大ヘッダサイズが20バイトである場合、ヘッダチャネル上の1クレジットは、受信機での20バイト相当のストレージに対応し得る。いくつかの例では、たとえ16バイトのヘッダだけが送信される場合でも、他の例並びに同様の代替フロー制御及びクレジット実装の中で、完全な20バイトに対応する完全な1クレジットが消費され、
図8を参照すると、簡略化されたタイミング図800が、例示のSFIインタフェースのヘッダチャネルを使用するヘッダ転送の例を示すために示されている。ヘッダチャネルは、クロックレーン、ヘッダ有効信号専用の1つまたは複数のレーン(例えば、810、825)、ヘッダメタデータ通信専用のレーン(例えば、815、830)、およびヘッダバスの複数バイトを実装する専用のレーン(例えば、820、835)を含み得る。図8の例では、ヘッダバスの対応するサブセクション上の有効なヘッダデータの送信を制御するために、複数の有効な信号が提供される。例えば、ヘッダレーン810は、ヘッダバスのバイト0〜15を実装するレーン(例えば、820)に対応する有効な信号を搬送することができ、ヘッダレーン825は、ヘッダバスのバイト16〜31を実装するレーン(例えば、835)に対応する有効な信号を搬送することができる。従って、有効な信号810は、有効なデータがヘッダバスのバイト0〜15で送信される限り(例えば、クロックサイクル1、2、および4のように)、アサートされ得、同様に、有効な信号825は、バイト16〜31で送信される有効なデータに対応するようにアサートされ得る。一例では、図8のように、対応するヘッダデータは、対応するアサートされた有効な信号として整列して(例えば、同じクロックサイクル)送信され得、代替の実装では、他の例示の特徴および実装の中で、有効な信号のアサートとヘッダデータの送信との間で遅延が定義され得る。
図8の例に続き、ヘッダバスを実装するレーンのサブセクションはまた、それぞれのヘッダメタデータ(またはhdr_info)信号(例えば、815、830)に関連付けられ得る。例えば、ヘッダバイト0〜15(例えば、820)は、第1のヘッダメタデータ信号815に関連付けられ得、ヘッダバイト16〜31は、第2のヘッダメタデータ信号830に関連付けられ得る。ヘッダメタデータ信号は、対応するヘッダバスレーン上で搬送されるヘッダの属性を記述するサイクル毎にデータ(例えば、8バイト)を搬送し得る。いくつかの場合には、ヘッダバスの両方のサブセクションがより大きなヘッダを搬送するために利用され得、与えられたサイクル(例えば、クロックサイクル4)において送信される1サイクル当たりのヘッダの最大数よりも少ない数となる。ヘッダバスの2つ以上のサブセクションが単一のヘッダを送信するために使用される場合、いくつかの実装では、対応するメタデータ信号の1つ(例えば、ヘッダの最下位バイトに対応する信号)のみがデータを搬送し得、一方、残りのメタデータ信号はメタデータを全く搬送しない。このようにして、受信機は、ヘッダバスレーンの2つ以上のサブセットが、他の例の中でも、単一のヘッダを送信するために使用されていることを識別し得る(例えば、ヘッダを通信するために使用されるヘッダバスのサブセクションに対応する有効な信号(例えば、810、825)の一方または両方のアサーション)。
特に、図8の単純化された例では、5つのトランザクション層パケット(TLP)のヘッダが例示のSFIヘッダチャネルを介して送信されていることが示されている。例えば、ヘッダバスサブセクション820、835は、各々、クロックサイクル1および2内の2つの別個のTLPのヘッダ(例えば、TLP0(840)およびTLP1(845)のヘッダはサイクル1であり、TLP2(850)およびTLP3(855)のヘッダはサイクル2である)を搬送し得る。これはそれぞれのパケットのヘッダサイズに基づいて可能であり得る。さらに、対応するヘッダメタデータ(例えば、865、870、875、880)は、サイクル1および2において対応するヘッダメタデータ信号815、830上に送信され得る。有効な信号810、825は、サイクル3においてデアサートされ得、このサイクル中に追加のヘッダデータが送信されることはない。
サイクル4では、別のTLP、TLP4のヘッダが送信される。この例では、TLP4のヘッダのサイズは、単一クロックサイクルでHDRチャンネル上でヘッダを通信するために、両方のヘッダバスサブセクション820、835上の転送を必要とする。例えば、TLP0〜3のヘッダ(例えば、840、845、850、855)は、HDR_SIZE=4のサイズであり得、一方、TLP4ヘッダのサイズは、HDR_SIZE=5であり得る。従って、この例では、TLP4ヘッダ(860a〜b)のバイトは、両方のヘッダバスサブセクション820および835のレーン上で送信される。この例では、ヘッダの先頭(または最下位バイト)を搬送するヘッダバスのサブセクション(またはバイト)に対応する有効な信号810のみが(890で)高をアサートされ、一方、他の有効な信号825はクロックサイクル4においてデアサートされたままである。同様に、ヘッダメタデータ信号(例えば、815)のうちの1つのみが、TLP4ヘッダのメタデータ情報を搬送するために使用され得、ヘッダの最上位バイトに対応するメタデータ信号(例えば、830)は、ヌルまたは他の信号を搬送する。一例では、TLP0〜4のヘッダは、PCIeベースのプロトコルに従いえる。このような場合、TLP HDRバイトは、PCIエクスプレスベース仕様に記載されたフォーマットに従う。この例では、他の例示の実装の中で、HDR_start[0]はヘッダバイト[0]に関連付けられ、hdr_start[1]は常にヘッダバイト[16]に関連付けられる。
いくつかの実装では、SFIインタフェースは同期インタフェースとして実装され、インタフェースの両側は同じクロック上で動作する。それにもかかわらず、送信機及び受信機は、各々の装置においてリセットを調整することを要求されないことがある。代わりに、幾つかの実装では、インタフェースのために定義された初期化フローは、インタフェース上でトラフィックが始まる前に、インタフェースリセットおよびフロー制御に関する情報を送信機と受信機とで確実に交換するために、別個のハンドシェイクを定義し得る。
図9を参照すると、簡略化されたタイミング図900が、例示のSFIインタフェースのデータチャネルを使用するデータ転送の例を示すために示されている。この例では、DATAチャネルは、クロック905と、単一の有効信号910(例えば、チャネルの単一のレーン上)と、データバスの1つまたは複数のサブセクションを実装するレーンのセット(例えば、915、920)とを含む。図9の特定の例示的な例では、X−1サブセクションが示されている。有効な信号910がアサートされると(例えば、945において)、データバス上に現れるデータ(およびサポート信号(例えば、925、930、935、940))は、有効であるとみなされる。有効910がデアサートされるとき(例えば、966において)、データバス上のデータの送信は、有効が再アサートされるまで、一時停止または停止される。
SFI DATAチャネルのいくつかの実装では、データの開始(またはdata_start)信号が提供され得、これは、data_start信号の対応する数のビットを実装するために、レーンのセットに実装される。例えば、data_start信号は、対応するdata_startレーン(例えば、925、926、928など)がデータバス内のそれぞれのバイトまたはスパンにマップされたビットベクトルとして実装され得る。例えば、各data_startレーン(例えば、925、926、928等)は、データバスのX+1サブセクションの対応する1つにマップし得る。例えば、データバスの8つのサブセクションがある場合、データ信号の開始は、各ビットがサブセクションの1つにマップされた8つのビットまたはレーンから構成され得る。ペイロードの第1のバイト(例えば、最下位バイトから最上位バイトまで測定されるような)が特定のクロックサイクルで通信されるとき、データ信号の対応する開始(例えば、925)がアサートされ、その第1のペイロードバイトが見つかることができるデータバスのサブセクション(または、チャンク)を識別し得る(例えば、954において)。これにより、受信機は、チャネル上で通信される2つのペイロード間の境界を識別し得る。
HDRチャネルの例のように、SFI DATAチャネルはまた、専用のメタデータ(data_info)信号レーン(例えば、930、935)上のメタデータを運び、データバス上で送信される対応するペイロードデータを記述し得る。いくつかの実装では、ペイロードのメタデータは、ペイロードの開始に関連して(例えば、ペイロードの最初のバイトおよび対応するdata_start信号と整列して)、DATAチャネル上で通信され得る。実際、複数のメタデータ信号は、DATAチャネル上で定義され、搬送され得、1つがデータバスの対応する数のサブセクション(例えば、915、920)の各々に対応する。サブセクションまたはチャンクは、いくつかの実装では、data_start信号(および/またはdata_end信号940)において利用されるのと同じ論理チャンクに対応し得る。例えば、特定のチャンクが新しいペイロードの最初のバイトを搬送する場合、メタデータ信号のうちの対応するもの(例えば、930、935)は、そのペイロードの対応するメタデータを搬送する責任を負う。一例として、図9に示されるように、クロックサイクル1において、TLP0のペイロード(950)の開始は、データバスの第1のサブセクション(例えば、915)上で開始され得る。従って、data_start信号925は、(954において)サブセクション(例えば、データバスの0バイトに対応する)が新しいペイロードの開始を搬送することを示し得る。データバスの他のサブセクション(例えば、920)を使用して、同じペイロードの追加の他のチャンク(例えば、952)を通信し得る。さらに、データバスの第1のサブセクション(例えば、915)に対応するメタデータ信号(例えば、930)のうちの1つは、TLP0ペイロードのメタデータ(例えば、956)と共にエンコードされ得る。
図9の例を続けると、TLP0のペイロードデータ(例えば、950,952,960)は、それがすべて送信されるまで、データバス上の複数クロックサイクルにわたって送信され続け得る。データ(またはdata_end)信号940は、ペイロードデータの最終的なチャンクが、対応するクロックサイクル内に送られたデータバスのサブセクションを識別するためにマップされたいくつかのレーン(例えば、940、942)を有するデータ信号の開始と同様の方法で動作し得る。data_end信号によって参照されるサブセクションまたはチャンクの粒度は、data_start信号およびメタデータ信号で使用される粒度よりも高くても低くてもよく、または同じであってもよい。一例では、data_end信号940によって参照されるサブセクションまたはチャンクは、他の例の中で、4バイトであり得る。図9の特定の例では、TLP0のペイロードの最後のバイト/ビットは、data_end信号のために構成された粒度に従って測定されるように、データバスバイトおよびレーンのサブセクション「N」で送信される。従って、サブセクションNにマップされたdata_end信号のレーン(例えば、940)は、サブセクションNがペイロードの終了を搬送することを識別するためにアサートされ得る。いくつかの実装では、データの開始、データの終了、およびメタデータ信号によって使用されるデータバスサブセクションおよびチャンクの粒度は、他の例の中で、SFIインタフェースのための対応するパラメータセットを通して設定され得る。
図9の例で続けると、第2のパケット(例えば、TLP1)の第2のペイロードは、データバス上で送信され得る(例えば、第2のパケットの開始は、データチャンク/サブセクション「Y」で送信される)。いくつかの実装形態では、複数のパケットのペイロードが、データバス上(例えば、データバスの各サブセクションを使用して)で同時に送信され得る。この例では、TLP0のペイロードが終了し、TLP1のペイロードがクロックサイクル2で開始する。従って、データ終了信号(例えば、970)およびデータ開始信号(例えば、964)の両方が同じサイクルで送信され、データ開始信号964は、ペイロードの開始が現れるデータバスのサブセクションまたはチャンク(例えば、サブセクション「Y」、ここで、0<Y<X)を示す。図9の例では、データ信号の開始は、1バイトの粒度であり得、ペイロードが開始するデータバス内のバイトを具体的に識別する(例えば、TLP0のペイロードの場合はバイト0、TLP1のペイロードの場合はバイトYなど)。従って、データ開始信号及びデータ終了信号の幅は、使用されるそれぞれの粒度に基づき得る。さらに、図9の例では、TLP1のペイロードはクロックサイクル2で送信され始めるが、送信は、有効な信号910のデアサート(966)を介して一時的に中断され得、有効910が再アサートされるときに残りのバイト(例えば、972、974)が送信される。他の例では、他の例示的な実装の中で、転送中ペイロードのすべてのバイトが送られるまで、有効がアサートされたままであるように要求され得る。図8および図9の例は、他の例の中で、例示的なSFIHDRチャネルおよびDATAチャネルで実装され得るより一般的な原理(および代替的な実装)を説明するために提供される簡略化された非限定的な例であることが理解されるべきである。
幾つかの実装では、SFIインタフェースのための定義された接続および切断フローに参加するために、エージェント及びファブリックデバイス上に状態マシン又は他のロジックが提供され得る。例えば、このようなフローは、ブート/リセットの間、および、他の例示的な状態またはイベントの中で、低電力モードに入るときに呼び出され得る。いくつかの実装では、SFIは、接続が確立された後に受信機(RX)のクレジットアベイラビリティ(credit availability)に関する情報が送信機(TX)に伝達される初期化フェーズを定義する。場合によっては、リセットは、SFIのエージェント側とファブリック側との間で独立してデアサートすることができる。独立リセットのために、初期化信号は、リセット時に切断された状態に(例えば、グローバルチャネル上で)駆動され得、初期化が接続状態に達するまでトラフィックは送信されない。切断フローは、例えば、クレジットを再設定し、省電力を達成するために、エージェントによって追加的にサポートされ得る。このフローがなしでは、最初の接続が進む前に、すべてのSFIクレジットが最終値に設定され得る。
初期化においては、SFIインタフェースの送信機側及び受信機側(例えば、エージェント側及びファブリック側)は、近傍又は同時にリセットから取り出され得る。インタフェースの一端(例えば、リセットから出た後)は、いつ他端がリセットから出るべきかについて暗黙の要件を持たなくてもよい。いくつかの実装では、SFIはエージェントとファブリックの間の初期化の間に明示的なハンドシェイクを定義して、両方のエンドポイント(およびそれらの間のすべてのパイプラインステージ)がUFIインタフェース上でクレジットまたはトランザクションが送信される前にリセットされない(are out of reset)ことを確実にする。従って、リセットの後、受信機は送信機による使用のためにクレジットを送信することを開始し得る。
図10は、SFIインタフェースの例示の実装における初期化状態の例示の状態マシンを示す図1000である。状態は、切断済み状態1010(リセット1005に基づいて入り得る)、接続中状態1015、接続済み状態(1020、1035)、切断中状態1025、および拒否状態1030を含み得る。txcon_req信号、rxcon_ack信号、rxdiscon_nack信号の値の組み合わせは、それぞれの初期化状態を示し得る。一例として、切断中状態1025では、txcon_req信号はLOW(低)であり得、rxcon ack信号はHIGH(高)であり得、rxdiscon_nackはLOWであり得る。信号値の特定の1つを変更することは、ある初期化状態から別の初期化状態への遷移を引き起こし得る。例えば、図10の状態マシン例に例示されているように、他の例の中で、切断中状態1025の場合、rxcon ack信号をHIGHからLOWに変化させることは、切断済み状態1010への遷移を引き起こし得る一方、rxdiscon_nack信号をLOWからHIGHに変化させることは、拒否状態1030への遷移を引き起こし得る。UFIインタフェースでは、それぞれの初期化状態が、以下の表5で説明されている例示のアクションのように、受信機と送信機によって実行されることになるアクションを決定するために使用される。
シグナリング(Signaling)ルールは、グローバル初期化信号セットに対して定義され得る。一例では、0から1への遷移が接続要求を反映し、1から0への遷移が切断要求を反映するように、txcon_req信号が定義され得る。クレジットリターン信号は、例えば、クレジット有効(crd_valid)信号およびクレジット共有(crd_shared)信号で提供され得る。一例では、crd_valid=1は、プロトコルIDおよび仮想チャネルIDのための専用メッセージクレジットを解放することを意味するように定義され得、一方、crd_shared=1は、共有クレジット(専用メッセージクレジットリターンと並行して発生する可能性がある)を解放することを意味する。いくつかの実装では、クレジットリターンは、クレジットの最初の初期化の間と同じように、クレジットのランタイムリターンの間と同じように動作する。rx_empy信号は受信機から返された全てのチャネルクレジットを示し、全ての受信機キューは空である(しかし、これは、他の例示の問題の中で、クロッククロッシングキューのようなフライトまたは中間バッファにあるメッセージを考慮していないかもしれない)。いくつかの実装では、送信機は切断を開始する前にrx_emptyをチェックし得る。チェックすることによって、切断がすぐに受け入れられる確率が増加する(例えば、受信機でまだ登録されていない可能なインフライト(in-flight)要求がない場合)。幾つかの実装では、切断受入れの確率をさらに増加させるために、送信機は、他の例示の特徴の中で、受信機パイプラインが受信機キューに流入する時間を有するように、送信された最後の有効なメッセージの後にタイマ遅延を実装し得る。いくつかの実装では、初期化の間、送信者は、任意のクレジットが利用可能になり、rx_emptyアサーションに依存しないとすぐにメッセージを送る。代替的には、送信機はrx_emptyがアサートされるまで初期化後にパケットの送信を停止し得、送信機は受信したクレジットを受信機が広告した総クレジットの表示として使うことができる。SFIインタフェースの実装例では、送信機は、受信機から十分なクレジットを受信するときにパケットを送信することができる。送信機は、パケットが送信されることになることを識別し得、送信が開始する前に、パケットに対する十分なHDRおよびDataクレジットがそれぞれ存在することを決定し得る。
UFI実装で定義され得るシグナリングルールのさらなる例として、接続ACKは常に接続要求に従うように定義され得る。上述のように、接続要求は0→1から遷移するtxcon_reqによってシグナリングされ得る。この遷移は、送信機Txがクレジットを受け取る準備ができており、通常動作中であることの指示として役立つ。ACKは、0から1に繊維するrxcon_ackによってシグナリングされ得る。ACKは、受信機が完了する準備ができるまで、任意の時間の間停止され得る。同様に、切断ACKまたはNACKは、切断要求に従うように定義され得る。切断要求は、1から0のtxcon_req遷移によってシグナリングされ得る。切断ACKは、1から0のrxcon_ack遷移によってシグナリングされ得る。切断NACKは、0から1に遷移するrxdiscon_nackによってシグナリングされ得る。ルールは、他の例示的なポリシーおよび実装の中で、受信する各切断リクエストに対して、受信機にACKかNACKのいずれかで応答することを要求するように定義され得る。
図11を参照すると、例示的なタイミング図1100が、接続済み状態へのリセットからSFIインタフェースの初期化のために示される。図11に示す特定の例では、例示的な初期化フローが示され、SFIインタフェースのグローバルチャネルにおける初期化信号を利用している。図11に示すように、初期化信号セットは、受信機切断NACK信号1110、受信機接続ACK信号1115、および送信機接続要求信号1120を含み得る。追加の信号は、受信機リセット信号1130(エージェントをリセット条件に入らせる)、送信機リセット信号1135(ファブリックをリセット条件に入らせる)を含む特定の特徴を示すように示されている。また、SFIチャネルのクレジットリターン信号セット1125のうちの少なくとも1つ(例えば、HDRチャネルおよびDATAチャネルのうちの1つ又は複数に対してセットされたクレジット信号)の表現も示されている。
接続状態に入るために、一旦送信機がリセットされないと、送信機はtxcon_req信号1120をアサートして受信機への要求を識別し得る。同様に、受信機がリセットされていないとき、受信機はtxcon_req信号1120に対する接続要求を待つ。接続要求のアサーションは、リセット(例えば、1130)がアサートした後の任意のサイクル数とすることができる。接続が完了するまで、txcon_req信号1120は、アサートされたままであり、切断フローの一部としてのみデアサートされる。txcon_req信号1120上の接続要求を受信すると、受信機は、rxcon_ack信号1115をアサートして、要求を確認し得る。rxcon_ack信号1115は、受信機および送信機のリセットならびにtxcon_req信号1120のアサーションの後にアサートされ得る。rxcon_ack信号1115は、アサートされたままであり、切断フローにおいてのみ最初にデアサートされる。
このシーケンスは、初期化リンク状態1105を、切断済みから接続済み状態への接続へと進行させることを可能にし得る。接続済み状態に入ると(およびrxcon_ack信号を送信すると)、受信機は、直ちにクレジットを返すことを開始し得る(例えば、クレジットリターンワイヤ1125上で)。実際に、受信機は、rxcon_ack信号1115のアサーションと同時にクレジットの返すことを開始し得る。従って、例えば、中間バッファリングまたはクロック交差により、A2F_rxcon_ackの観測前に、クレジットリターンが観測される可能性があるため、送信機(例えば、エージェント)は、(例えば、クロックサイクルx4で)txcon_req信号1120をアサートする際に、クレジットリターンを受け入れる用意がある。最小クレジットを受信してパケットを送信した後、送信機はチャネルを介してパケットまたはメッセージの送信を開始することができる。再接続フローは、本明細書で説明するリセットフローからの接続と同様に実装され得るが、新しいクレジット初期化を開始するために、受信機は最初にそのクレジットカウンタをリセット値にリセットし、送信機は、他の例の中で、そのクレジット利用可能カウンタをゼロにリセットする。
図12を参照すると、例示的なタイミング図1200は、例示的なSFIインタフェースのための例示的な切断および再接続フローを示す。この例では、送信機は、時間x3において切断を容易にするために、txcon_req信号1120をデアサートし得る。いくつかの実装では、切断を進行させるために、rxdiscon_nack信号1110は、txcon_req信号1120がデアサートされる前にデアサートされる。切断が要求された時、送信機は、もはや(例えば、CHAN_is_validビットアサーションによって示される)いかなるチャネル上でもメッセージを送信しない。送信機による切断フローの開始に基づいて、受信機は切断を確認する(ACK)か否定的に確認する(NACKまたは拒否)かを決定する。切断を確認するために、受信機は、全てのパイプラインが空であることを保証した後に(例えば、クロックサイクルx4において)、rxcon_ack信号1115をデアサートし得、これは、(リンク状態インジケータ1105によって反映されるように)切断済み状態への入りをマークする。場合によっては、受信機は、すべてのクレジットが返されたことを保証することもできる。
図12の図1200は、切断要求が受信機によって肯定的に確認された場合のインスタンスを示しているが、図13は、受信機が否定確認応答(またはNACK)で応答する反対の例を示している。例えば、否定確認応答を送信するために、受信機は、代わりに、rxdiscon_nack信号1110否定確認(例えば、クロックサイクルx4)をアサートし得る。例えば、否定確認応答は、受信機が、他の例示の理由の中で、デッドロックのリスクなしにそのパイプラインを排出することができないと判断した場合に選択され得る。NACKの後、送信機は、txcon_req信号1120(例えば、クロックサイクルx6において)を再アサートする。受信機のNACKの送信機によるこの有効な確認応答の遵守に伴い、rxdiscon_nack信号1110は、(例えば、図13の例のクロックサイクルx6において示されるように)デアサートされることができる。
いくつかの実装では、接続および切断フローは、開始後数マイクロ秒以内に完了することが期待される。いくつかの実装では、タイムアウトは、明示的にまたは黙示的に定義され得る。例えば、受信機は、定義される又は推奨される時間枠内でACK又はNACKで応答するように構成され得る。例えば、エージェント、ファブリック、またはシステム(例えば、SoC)は、この期待を強制するためにタイムアウトまたは時間ウィンドウを定義することができる。
場合によっては、SFIインタフェースが接続状態にある間にエージェントまたはファブリックエレメントがリセットされ、その結果、突然のリセットが生じ得る。例えば、定義された、または推奨されたフローは、Reset(リセット)の前にDisconnect(切断)に入ることであり得る。一例として、rxcon_ack信号は、送信機のtxcon_req信号の値が1である間に、リンクの受信機側での突然のリセットのために遷移1→0を発生させ得る。このような場合、送信機は、それ自体を切断済み状態に強制的に移行させ、初期化を再開させ得る。送信機がアイドル状態にあるときにこれが発生する場合、メッセージを失うことなく回復することができる。別の突然のリセットの例として、rxcon_ackが1である間に、txcon_req信号がリンクの送信機側の突然のリセットのために1→0に遷移する場合、標準の切断フローに従い得る。受信機がアイドル状態にあるときにこれが発生する場合、送信機がリセットされたままであれば、切断はAckを受信し、切断済みの状態にきれいに到達すべきである。しかし、切断が受信機によって拒否(NACK)された場合、致命的または不正なリンク状態(例えば、回復不能エラー)が生じ得る。突然のリセットの場合、トラフィックがアクティブである場合(例えば、アイドル状態ではない場合)、プロトコルメッセージの損失が生じる可能性があり、通常の動作を継続する上で致命的になり得る。
上述したように、システム内のSFIインタフェースは、様々なパラメータに従って構成可能であり得る。例えば、一組のパラメータが、特定のSoC設計のような、所与のシステムの使用ケース、特徴、プロトコル、およびトポロジに従って、具体的に定義され得る。このようなパラメータは、他の例示のパラメータの中で、例えば、1つのサイクルで送信することができるヘッダの最大数、最大ヘッダサイズ、1つのサイクルで送信することができる異なるパケットのペイロードの最大数を定義し得る。パラメータの値は、例えば、インタフェースを介して接続されるエージェントおよびファブリックコンポーネントによって使用および参照されるために、構成レジスタまたは他のデータ構造に定義および保存され得る。表6は、SFIインタフェースの一例で設定可能なパラメータの一例を示す。
図14A〜14Bを参照すると、単純化されたフローチャート1400a〜bが示され、本明細書の例示の実装で説明されるような、SFIインタフェースを使用するための例示的な技術を例示する。例えば、図14Aの例では、SFIインタフェースは、メッセージをインタフェースの複数のチャネル(例えば、グローバル、HDR、およびDATA)のうちの特定のチャネル内の受信機に送信するために、一組の信号内のそれぞれの信号に割り当てられたレーン、ならびにメッセージの受信機から受信される信号に割り当てられたレーン(例えば、クレジットリターン信号)から構成され得る。グローバルチャネルは、インタフェースの初期化を含む、インタフェースの態様を制御するために、それぞれの信号を送受信するための複数のレーンを含見える。実際、初期化信号は、インタフェース1405上で通信されて、インタフェースのチャネル(例えば、HDRおよびDATA)にメッセージを送信するためのインタフェースを初期化1410し得る。他の例の中で、PCIeまたはCXL.ioなどの特定のストリーミングまたはロード/ストアプロトコルに従って、デバイス上のエージェントまたは他のロジック(例えば、IPブロック、布ブロック、ガスケットデバイス、または他のデバイス)のプロトコル層によって準備されたパケットが識別され1415得る。パケットのヘッダおよびペイロードは、インタフェースの専用ヘッダ(HDR)チャネルおよびペイロード(DATA)チャネルで別々に送信され得る。例えば、ヘッダは、ヘッダメタデータ信号専用のHDRチャネルのレーン上で送られた1425ヘッダメタデータを伴うヘッダチャネルのヘッダバスレーン上で送られ1420得る。同様に、DATAチャネルを使用して、DATAチャネルのデータバスレーン上のペイロードデータを送信し1430得、対応するペイロードメタデータは、DATAチャネルのための1つまたは複数のメタデータ信号を実装するDATAチャネルの別の他のレーン上で送られ得る。いくつかの実装では、ヘッダまたはペイロードをHDRまたはDATAチャンネルそれぞれの上で送信するために、有効な信号が対応するチャンネルの1つまたは複数のレーンの専用セットに送信され得る。いくつかの実装では、クレジットリターンは、他の例示の情報及び信号の中で、上記の例で論じたように、HDRおよびDATAチャネルで実装され得る、HDRおよびDATAチャネルの各々で使用されるそれぞれのクレジットに対応するパケットの送信者によって受信され得る。
図14Bの例では、技術は、SFIインタフェース上の受信機に関連付けられて示される。幾つかの実装では、単一のデバイスが、他の例示の構成の中で、SFIインタフェースの第1のインスタンスのための送信機と、SFIインタフェースの相補的な第2のインスタンスのための受信側とを実装し得る。一例では、初期化信号を通信して1435インタフェースを初期化する1440ために、受信側にグローバルチャネルが設けられ得る。初期化後、パケットデータは、パケットのヘッダおよびペイロードデータを含むインタフェースを介して受信され得る。例えば、パケットのヘッダは、ヘッダチャネルのレーン上で受信され得1450、ヘッダのためにヘッダチャネルの別々のメタデータレーン上でヘッダメタデータが受信される1455。パケットのペイロードデータは、別個のデータチャネルのレーンで受信され得る1460。ペイロードメタデータは、ペイロードの属性(例えば、フロー制御情報)を記述するために、データチャネルの追加のメタデータレーンで受信され得る1465。受信機は、ヘッダおよびデータチャネルのそれぞれのメタデータレーン上で送信されるヘッダおよびペイロードメタデータに基づいて、パケットを処理し得る1470(例えば、バッファ、ヘッダをそのパケットに関連付け、ヘッダをデコードし、データレーン上で送信されるペイロードの境界を識別するなど)。また、受信機は、受信機においてロジックによって提供される他の例示の機能性の中で、ヘッダおよびデータチャネルの追加の専用レーンにクレジットリターンを送信し得る。
上述の装置、方法、およびシステムは、前述のような任意の電子デバイスまたはシステムにおいて実装され得ることに留意されたい。具体的な例示として、以下の図は、本明細書に記載される解決策を利用するための例示的なシステム(例えば、SoC、コンピューティングブロック、ファブリックブロックなど)を提供する。以下のシステムがより詳細に説明されるが、多数の異なる相互接続、ユースケース、トポロジ、およびアプリケーションが、開示され、説明され、上記の議論から再度説明される。そして、容易に明らかなように、上述の進歩は、それらの相互接続、ファブリック、またはアーキテクチャのいずれか、およびそれらの複合構成要素に適用され得る。
図15を参照すると、マルチコアプロセッサを含むコンピューティングシステムのブロック図の一実施形態が描かれている。プロセッサ1500は、マイクロプロセッサ、埋め込みプロセッサ、デジタル信号プロセッサ(DSP)、ネットワークプロセッサ、ハンドヘルドプロセッサ、アプリケーションプロセッサ、コプロセッサ、システムオンチップ(SoC)、またはコードを実行する他のデバイスなどの任意のプロセッサまたは処理デバイスを含む。プロセッサ1500は、一実施形態では、非対称コアまたは対称コア(図示の実施形態)を含見える、少なくとも2つのコア−コア1501および1502を含む。しかし、プロセッサ1500は、対称または非対称であり得る任意の数の処理要素を含み得る。
一実施形態では、処理要素は、ソフトウェアスレッドをサポートするためのハードウェアまたはロジックを指す。ハードウェア処理要素の例は:スレッドユニット、スレッドスロット、スレッド、プロセスユニット、コンテキスト、コンテキストユニット、論理プロセッサ、ハードウェアスレッド、コア、および/または実行状態またはアーキテクチャ状態などのプロセッサのための状態を保持することができる任意の他の要素を含む。言い換えると、一実施形態では、処理要素は、ソフトウェアスレッド、オペレーティングシステム、アプリケーション、または他のコードなどの、コードと独立して関連付けることができる任意のハードウェアを指す。物理的プロセッサ(またはプロセッサソケット)は、典型的には、コアまたはハードウェアスレッドなどの任意の数の他の処理要素を潜在的に含む集積回路を指す。
コアは、独立したアーキテクチャ状態を維持することができる集積回路上に配置されたロジックを指すことが多く、各独立して維持されるアーキテクチャ状態は、少なくともいくつかの専用実行リソースと関連付けられる。コアとは対照的に、ハードウェアスレッドは、典型的には、独立したアーキテクチャ状態を維持することができる集積回路上に位置する任意のロジックを指し、独立して維持されるアーキテクチャ状態は、実行リソースへのアクセスを共有する。図からわかるように、特定のリソースが共有され、他のリソースがアーキテクチャ状態に専用である場合、ハードウェアスレッドの名称とコアの間の線は重なり合う。しかし、しばしば、コアおよびハードウェアスレッドは、オペレーティングシステムによって、個々の論理プロセッサとして見なされ、ここで、オペレーティングシステムは、各論理プロセッサ上でオペレーションを個別にスケジューリングすることができる。
物理プロセッサ1500は、図15に示すように、2つのコア−コア1501及び1502を含む。ここで、コア1501および1502は、対称コア、すなわち、同じ構成、機能ユニット、および/またはロジックを有するコアとみなされる。別の実施形態では、コア1501は、アウトオブオーダー(out-of-order)プロセッサコアを含み、コア1502は、インオーダー(in-order)プロセッサコアを含む。しかし、コア1501および1502は、ネイティブコア、ソフトウェア管理コア、ネイティブ命令セットアーキテクチャ(ISA)を実行するように適合されたコア、変換命令セットアーキテクチャ(ISA)を実行するように適合されたコア、共設計コア、または他の既知のコアなど、任意のタイプのコアから個別に選択され得る。異種コア環境(すなわち、非対称コア)では、バイナリ変換などの何らかの形式の変換が、一方または両方のコア上でコードをスケジュールまたは実行するために利用され得る。しかし、説明をさらに進めるために、コア1501に示された機能ユニットが以下でさらに詳細に説明され、コア1502のユニットが図示された実施形態において同様の方法で動作する。
図示されるように、コア1501は、2つのハードウェアスレッド1501aおよび1501bを含み、これらは、ハードウェアスレッドスロット1501aおよび1501bとも称される。したがって、一実施形態では、オペレーティングシステムなどのソフトウェアエンティティは、プロセッサ1500を4つの別個のプロセッサ、すなわち、4つのソフトウェアスレッドを同時に実行することが可能な4つの論理プロセッサまたは処理要素として潜在的に見なす。上述のように、第1のスレッドはアーキテクチャ状態レジスタ1501aに関連付けられ、第2のスレッドはアーキテクチャ状態レジスタ1501bに関連付けられ、第3のスレッドはアーキテクチャ状態レジスタ1502aに関連付けられ、第4のスレッドはアーキテクチャ状態レジスタ1502bに関連付けられ得る。ここで、各アーキテクチャ状態レジスタ(1301a、1501b、1502a、および1502b)は、上述のように、処理要素、スレッドスロット、またはスレッドユニットと称され得る。図示のように、アーキテクチャ状態レジスタ1501aは、アーキテクチャ状態レジスタ1501b内で複製されるので、個々のアーキテクチャ状態/コンテキストは、論理プロセッサ1501aおよび論理プロセッサ1501bのために記憶されることができる。コア1501では、アロケータおよびリネーマブロック1530における命令ポインタおよびリネームロジックなどの他のより小さいリソースも、スレッド1501aおよび1501bのために複製され得る。リオーダ(reorder)/リタイアメント(retirement)ユニット1535、ILTB1520、ロード/ストアバッファ、およびキューにおけるリオーダーバッファのようないくつかのリソースは、分割(partitioning)によって共有され得る。汎用内部レジスタ、ページテーブルベースレジスタ(複数可)、低レベルデータキャッシュおよびデータTLB1515、実行ユニット(複数可)1540、およびアウトオブオーダーユニット1535の部分などの他のリソースは、潜在的に完全に共有される。
プロセッサ1500は、しばしば、他のリソースを含み、これは、完全に共有されるか、パーティション分割によって共有されるか、または、処理エレメントによって/それに専用され得る。図15では、プロセッサの例示的な論理ユニット/リソースを有する純粋に例示的なプロセッサの一実施形態が示されている。プロセッサは、これらの機能ユニットのいずれかを含んでもよく、または省略してもよく、また、図示されていない任意の他の既知の機能ユニット、ロジック、またはファームウェアを含んでもよいことに留意されたい。図示のように、コア1501は、単純化された代表的なアウトオブオーダー(OOO)プロセッサコアを含む。しかし、異なる実施形態では、インオーダープロセッサを利用され得る。OOOコアは、実行/取得されることになるブランチを予測するためのブランチターゲットバッファ1520と、命令のためのアドレス変換エントリを格納するための命令−変換バッファ1520とを含む。
コア1501は、さらに、フェッチされた要素をデコードするためにフェッチユニット1520に結合されるデコードモジュール1525を含む。一実施形態では、フェッチロジックは、スレッドスロット1501a、1501bにそれぞれ関連付けられる個々のシーケンサを含む。通常、コア1501は、プロセッサ1500上で実行可能な命令を定義/指定する第1のISAと関連付けられる。第1のISAの一部であるマシンコード命令は、実行されるべき命令または操作を参照/指定する命令の一部(オペコードと呼ばれる)を含むことが多い。デコードロジック1525は、それらのオペコードからこれらの命令を認識し、第1のISAによって定義される処理のために、デコードされた命令をパイプライン内に渡す回路を含む。例えば、以下でより詳細に説明するように、一実施形態では、トランザクション命令などの特定の命令を認識するように設計または適合されたロジックを含む。デコーダ1525による認識の結果、アーキテクチャまたはコア1501は、適切な命令に関連付けられるタスクを実行するために、特定の予め定義されたアクションをとる。ここに記載されるタスク、ブロック、操作、および方法のいずれも、単一または複数の命令に応答して実行され得、そのうちのいくつかは、新規または旧来の命令であり得ることに留意することが重要である。デコーダ1526は、一実施形態では、同じISA(またはそのサブセット)を認識することに留意されたい。代替的には、異質コア環境では、デコーダ1526は、第2のISA(第1のISAのサブセットまたは別個のISAのいずれか)を認識する。
一例では、アロケータおよびリネーマブロック1530は、命令処理結果を記憶するためのレジスタファイルなどのリソースを予約するためのアロケータを含む。しかし、スレッド1501aおよび1501bは、アロケータおよびリネーマブロック1530が命令結果を追跡するためのリオーダーバッファなどの他のリソースも予約する場合には、アウトオブオーダーの実行が潜在的に可能である。ユニット1530はまた、プログラム/命令リファレンスレジスタをプロセッサ1500の内部の他のレジスタにリネームするレジスタリネーマを含み得る。リオーダ/リタイアメントユニット1535は、アウトオブオーダーの実行および後にアウトオブオーダーの実行された命令のインオーダーのリタイアメントをサポートするために、上述のリオーダーバッファ、ロードバッファ、および記憶バッファなどの構成要素を含む。
スケジューラおよび実行ユニット(複数可)ブロック1540は、一実施形態では、実行ユニット上の命令/操作をスケジュールするスケジューラユニットを含む。例えば、浮動小数点命令は、利用可能な浮動小数点実行ユニットを有する実行ユニットのポート上でスケジュールされる。また、実行ユニットに関連付けられるレジスタファイルも含まれ、情報命令処理結果を格納する。例示的な実行ユニットは、浮動小数点実行ユニット、整数実行ユニット、ジャンプ実行ユニット、ロード実行ユニット、ストア実行ユニット、および他の既知の実行ユニットを含む。
下位データキャッシュおよびデータ変換バッファ(D−TLB)1550は、実行ユニット(複数可)1540に結合される。データキャッシュは、メモリコヒーレンス状態に保持される可能性のあるデータオペランドなどの要素上に、最近使用/操作されたものを記憶する。D−TLBは、最近の仮想/線形/物理アドレス変換を記憶する。特定の例として、プロセッサは、物理メモリを複数の仮想ページに分割するページテーブル構造を含み得る。
ここで、コア1501および1502は、オンチップインタフェース1510に関連付けられる第2レベルキャッシュ(second level cache)などの、より高いレベルまたはより長いレベルのキャッシュへのアクセスを共有する。より高いレベルまたはさらに外(further-out)とは、キャッシュレベルが増加する、または実行ユニット(複数可)からさらに離れることを指す。一実施形態では、より高いレベルのキャッシュは、プロセッサ1500上のメモリ階層内の最後のレベルのデータキャッシュ−最後のキャッシュであり、例えば、第2または第3のレベルのデータキャッシュである。しかし、より高いレベルのキャッシュは、命令キャッシュと関連付けられ得るか、または命令キャッシュを含み得るので、それほど制限されない。トレースキャッシュ−命令キャッシュのタイプ−は、代わりに、デコーダ1525の後に結合されて、最近デコードされたトレースを格納し得る。ここで、命令は、潜在的にマクロ命令(すなわち、デコーダによって認識される一般的な命令)を参照し、これは、いくつかのマイクロ命令(マイクロ演算)にデコードし得る。
図示された構成では、プロセッサ1500はまた、オンチップインタフェースモジュール1510を含む。歴史的には、以下により詳細に説明するメモリコントローラが、プロセッサ1500の外部のコンピューティングシステムに含まれてきた。このシナリオでは、オンチップインタフェース1510は、システムメモリ1575、チップセット(メモリ1575に接続するためのメモリコントローラハブおよび周辺デバイスを接続するためのI/Oコントローラハブを含むことが多い)、メモリコントローラハブ、ノースブリッジ、または他の集積回路などの、プロセッサ1500の外部のデバイスと通信する。また、このシナリオでは、バス1505は、マルチドロップバス、ポイントツーポイント相互接続、シリアル相互接続、パラレルバス、コヒーレント(例えば、キャッシュコヒーレント)バス、レイヤードプロトコルアーキテクチャ、差動バス、およびGTLバスなどの任意の既知の相互接続を含み得る。
メモリ1575は、プロセッサ1500に専用であり得る、またはシステム内の他の装置と共用され得る。メモリ1575のタイプの一般的な例は、DRAM、SRAM、不揮発性メモリ、および他の既知の記憶装置を含む。デバイス1580は、メモリコントローラハブに結合されたグラフィックスアクセラレータ、プロセッサまたはカード、I/Oコントローラハブに結合されたデータストレージ、無線トランシーバ、フラッシュデバイス、オーディオコントローラ、ネットワークコントローラ、または他の既知のデバイスを含み得ることに留意されたい。
しかし、最近、より多くのロジックおよびデバイスが、SOCなどの単一のダイ上に統合されているので、これらのデバイスの各々は、プロセッサ1500上に組み込まれてもよい。例えば、一実施形態では、メモリコントローラハブは、プロセッサ1500と同じパッケージおよび/またはダイ上にある。ここで、コアの一部(オンコア部分)1510は、メモリ1575またはグラフィックスデバイス1580などの他のデバイスとインタフェースするための1つまたは複数のコントローラを含む。このようなデバイスとインタフェースするための相互接続およびコントローラを含む構成は、しばしばオンコア(または非コア構成(un-core configuration))と呼ばれる。一例として、オンチップインタフェース1510は、オンチップ通信のためのリング相互接続と、オフチップ通信のための高速シリアルポイントツーポイントリンク1505とを含む。しかし、SOC環境では、ネットワークインタフェース、コプロセッサ、メモリ1575、グラフィックスプロセッサ1580、および任意の他の既知のコンピュータデバイス/インタフェースなどの、さらに多くのデバイスが、単一のダイまたは集積回路上に集積されて、高機能性および低電力消費を有する小さいフォームファクタを提供し得る。
一実施形態では、プロセッサ1500は、コンパイラ、最適化、および/またはトランスレータコード1577を実行して、アプリケーションコード1576をコンパイル、変換、および/または最適化して、本明細書に記載される装置および方法をサポートするか、またはそれらとインタフェースすることができる。コンパイラは、しばしば、ソーステキスト/コードをターゲットテキスト/コードに変換するためのプログラムまたはプログラムのセットを含む。通常、プログラム/アプリケーションコードのコンパイラによるコンパイルは、複数のフェーズで行われ、ハイレベルのプログラミング言語コードを低レベルのマシンまたはアセンブリ言語コードに変換するためにパスされる。しかし、単一パスコンパイラが、単純なコンパイルのために依然として利用され得る。コンパイラは、任意の既知のコンパイラ技術を利用して、語彙解析、前処理、構文解析、セマンティック分析、コード生成、コード変換、およびコード最適化などの任意の既知のコンパイラ操作を実行し得る。
大規模なコンパイラは、しばしば複数のフェーズを含むが、ほとんどの場合、これらのフェーズは、(1)一般的に、構文処理、セマンティック処理、ある種の変換/最適化が行われるフロントエンドと、(2)一般的に、解析、変換、最適化、およびコード生成が行われるバックエンドの2つの一般的フェーズに含まれる。いくつかのコンパイラは、コンパイラのフロントエンドとバックエンドとの間の線引きのぼやけを例示するミドルを参照する。結果として、コンパイラの挿入、アソシエーション、生成、または他の動作への参照は、上記のフェーズまたはパス、ならびにコンパイラの他の既知のフェーズまたはパスのいずれかで行われ得る。例示的な例として、コンパイラは、コンパイルのフロントエンドフェーズにおけるコール/操作の挿入、次いで、トランスフォーメーションフェーズの間におけるコール/操作のより低いレベルのコードへの変換などの、コンパイルの1つまたは複数のフェーズにおける操作、コール、機能等を潜在的に挿入する。ダイナミックコンパイルの間、コンパイラコードまたはダイナミック最適化コードは、ランタイム中の実行のためにコードを最適化するだけでなく、そのような操作/呼び出しを挿入し得ることに留意されたい。具体的な例として、バイナリコード(すでにコンパイル済みのコード)は、ランタイム中に動的に最適化され得る。ここで、プログラムコードは、ダイナミック最適化コード、バイナリコード、またはそれらの組み合わせを含み得る。
コンパイラと同様に、バイナリトランスレータなどのトランスレータが、コードを静的または動的に変換し、コードを最適化および/または変換する。従って、コード、アプリケーションコード、プログラムコード、または他のソフトウェア環境の実行への参照は、(1)プログラムコードをコンパイルする、ソフトウェア構造を維持し、他の操作を実行し、コードを最適化し、またはコードを変換するための、コンパイラプログラム(複数可)、最適化コードオプティマイザ、またはトランスレータの動的または静的な実行、(2)最適化/コンパイルされたアプリケーションコードなどの操作/コールを含むメインプログラムコードの実行、(3)ソフトウェア構造を維持し、他のソフトウェア関連操作を実行し、またはコードを最適化するための、メインプログラムコードと関連付けられる、ライブラリなどの他のプログラムコードの実行、または(4)それらの組み合わせを参照し得る。
次に、図16を参照すると、マルチコアプロセッサの一実施形態のブロック図が示されている。図16の実施形態に示されるように、プロセッサ1600は、複数のドメインを含む。具体的には、コアドメイン1630は、複数のコア1630A〜1630Nを含み、グラフィックスドメイン1660は、メディアエンジン1665を有する1つまたは複数のグラフィックスエンジンを含み、システムエージェントドメイン1610がある。
様々な実施形態では、システムエージェントドメイン1610は、電力制御イベントおよび電力管理を扱い、その結果、ドメイン1630および1660の個々のユニット(例えば、コアおよび/またはグラフィックスエンジン)は、所与のユニットで生じるアクティビティ(または非アクティビティ)に照らして、適切な電力モード/レベル(例えば、アクティブ、ターボ、スリープ、休止状態、ディープスリープ、または他のアドバンストコンフィギュレーションパワーインタフェース様状態)で動的に動作するように、独立して制御可能である。ドメイン1630および1660の各々は、異なる電圧および/または電力で動作することができ、さらに、ドメイン内の個々のユニットは、各々が、独立した周波数および電圧で潜在的に動作する。3つのドメインのみで示されているが、本開示の範囲はこの点に限定されず、さらなるドメインが他の実施形態において存在し得ることに留意されたい。
図示されるように、各コア1630は、様々な実行ユニットおよび追加の処理要素に加えて、低レベルのキャッシュをさらに含む。ここで、種々のコアは、互いに結合され、かつ、最終レベルキャッシュ(LLC)1640A〜1640Nの複数のユニットまたはスライスから形成される共有キャッシュメモリに結合され、これらのLLCは、しばしば、ストレージおよびキャッシュコントローラ機能を含み、コア間、ならびにグラフィックスエンジン間でも潜在的に共有される。
図に示すように、リング相互接続1650は、コアを互いに結合し、コアとLLCスライスとの間の結合においてそれぞれ、複数のリングストップ1652A〜1652Nを介して、コアドメイン1630、グラフィックスドメイン1660、およびシステムエージェント回路1610の間の相互接続を提供する。図16に見られるように、相互接続1650は、アドレス情報、データ情報、確認通知情報、およびスヌープ/無効情報を含む様々な情報を搬送するために使用される。リング相互接続が図示されているが、任意の既知のオンダイ相互接続またはファブリックが利用され得る。例示的な例として、上述のファブリックのいくつか(例えば、別のオンダイ相互接続、オンチップシステムファブリック(OSF)、アドバンストマイクロコントローラバスアーキテクチャ(AMBA)相互接続、多次元メッシュファブリック、または他の既知の相互接続アーキテクチャ)が同様の態様で利用され得る。
さらに示されるように、システムエージェントドメイン1610は、関連するディスプレイの制御およびインタフェースを提供するディスプレイエンジン1612を含む。システムエージェントドメイン1610は、システムメモリ(例えば、複数のDIMMが実装されるDRAM、メモリコヒーレンス動作を実行するためのコヒーレンスロジック1622)へのインタフェースを提供する集積メモリコントローラ1620を含み得る。プロセッサと他の回路との間の相互接続を可能にするために、複数のインタフェースが存在し得る。例えば、一実施形態では、少なくとも1つのダイレクトメディアインタフェース(DMI)1616インタフェースが、1つまたは複数のPCIe(商標)インタフェース1614と共に提供される。ディスプレイエンジンおよびこれらのインタフェースは、典型的には、PCIe(商標)ブリッジ1618を介してメモリに結合される。さらに、追加のプロセッサまたは他の回路のような他のエージェント間の通信を提供するために、1つまたは複数の他のインタフェースが提供され得る。
次に、図17を参照すると、代表的なコアのブロック図、具体的には、図16のコア1630などのコアのバックエンドの論理ブロックが示される。一般に、図17に示される構造は、入ってくる命令を取り出し、種々の処理(例えば、キャッシュ、デコーディング、分岐予測など)を実行し、命令/操作をアウトオブオーダー(OOO)エンジン1780に沿って渡すために使用されるフロントエンドユニット1770を有するアウトオブオーダープロセッサを含む。OOOエンジン1780は、デコードされた命令に対してさらなる処理を実行する。
具体的には、図17の実施形態では、アウトオブオーダーエンジン1780は、1つまたは複数のマイクロ命令またはuopの形態であり得るデコードされた命令をフロントエンドユニット1770から受け取り、それらをレジスタなどのような適切なリソースに割り当てるためのアロケーションユニット1782を含む。次に、命令は、複数の実行ユニット1786A〜1786Nのうちの1つで実行するためのリソースを予約し、それらをスケジュールする、リザベーションステーション1784に提供される。例えば、算術論理ユニット(ALU)、ロードおよび記憶ユニット、ベクトル処理ユニット(VPU)、浮動小数点実行ユニットなど、様々なタイプの実行ユニットが存在し得る。これらの異なる実行ユニットからの結果は、順序付けされていない結果を受け取り、それらを正しいプログラム順序に戻すリオーダーバッファ1788に提供される。
依然として図17を参照すると、フロントエンドユニット1770およびアウトオブオーダーエンジン1780の両方が、メモリ階層の異なるレベルに結合されることに留意されたい。具体的に示されるのは、命令レベルキャッシュ1772であり、それは、次に、最終レベルキャッシュ1795に結合する中間レベルキャッシュ1776に結合する。一実施形態では、最終レベルキャッシュ1795は、オンチップ(時にはアンコアと呼ばれる)ユニット1790に実装される。例として、ユニット1790は、図17のシステムエージェント1710に類似している。上述のように、アンコア1790は、システムメモリ1799と通信し、これは、図示の実施形態では、ED RAMによって実装される。また、アウトオブオーダーエンジン1780内の種々の実行ユニット1786は、中間レベルキャッシュ1776とも通信する第1レベルキャッシュ1774と通信することにも留意されたい。また、追加のコア1730N−2〜1730Nは、LLC1795に結合可能であることに留意されたい。図17の実施形態ではこの高レベルで示されているが、種々の改変および追加の構成要素が存在し得ることを理解されたい。
図18を参照すると、命令を実行するための実行ユニットを含むプロセッサで形成された例示的なコンピュータシステムのブロック図であって、相互接続の1つまたは複数が、本開示の一実施形態に従って1つまたは複数の特徴を実装するブロック図が示されている。システム1800は、本明細書に記載される実施形態のように、本開示に従って、データを処理するためのアルゴリズムを実行するためのロジックを含む実行ユニットを使用するために、プロセッサ1802のような構成要素を含む。一実施形態では、サンプルシステム1800は、オペレーティングシステムおよび含まれるソフトウェアのあるバージョンを実行し、対応するグラフィカルユーザインタフェースを提供することもできる。しかし、本開示の実施形態は、ハードウェア回路とソフトウェアの特定の組み合わせに限定されるものではない。
実施形態は、コンピュータシステムに限定されない。本開示の代替実施形態は、ハンドヘルドデバイスおよび埋め込みアプリケーションなどの他のデバイスで使用することができる。ハンドヘルドデバイスのいくつかの例は、携帯電話、インターネットプロトコルデバイス、デジタルカメラ、パーソナルデジタルアシスタント(PDA)、およびハンドヘルドPCを含む。埋め込みアプリケーションは、マイクロコントローラ、デジタル信号プロセッサ(DSP)、システムオンチップ、ネットワークコンピュータ(NetPC)、セットトップボックス、ネットワークハブ、ワイドエリアネットワーク(WAN)スイッチ、または、少なくとも1つの実施形態に従って1つまたは複数の命令を実行することができる任意の他のシステムを含むことができる。
この図示された実施形態では、プロセッサ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など)は、当業者によく知られた従来の機能を実行する。
一実施形態では、プロセッサ1802は、レベル1(L1)内部キャッシュメモリ1804を含む。アーキテクチャに応じて、プロセッサ1802は、単一の内部キャッシュまたは複数のレベルの内部キャッシュを有し得る。他の実施形態は、特定の実装および必要性に応じて、内部キャッシュおよび外部キャッシュの両方の組み合わせを含む。レジスタファイル1806は、整数レジスタ、浮動小数点レジスタ、ベクトルレジスタ、バンクレジスタ、シャドウレジスタ、チェックポイントレジスタ、ステータスレジスタ、および命令ポインタレジスタを含む種々のレジスタに異なるタイプのデータを格納する。
整数および浮動小数点演算を実行するロジックを含む実行ユニット1808もまた、プロセッサ1802内に存在する。一実施形態では、プロセッサ1802は、マイクロコードを格納するマイクロコード(ucode)ROMを含み、このマイクロコードは、実行されたときに、特定のマクロ命令のアルゴリズムを実行するまたは複雑なシナリオを処理する。ここで、マイクロコードは、プロセッサ1802のロジックバグ/フィックスを処理するために潜在的に更新可能である。一実施形態では、実行ユニット1808は、パックされた命令セット1809を処理するためのロジックを含む。命令を実行する関連回路と共に、汎用プロセッサ1802の命令セットにパックされた命令セット1809を含めることによって、多くのマルチメディアアプリケーションによって使用される動作は、汎用プロセッサ1802内のパックされたデータを使用して実行され得る。従って、多くのマルチメディアアプリケーションは、パックされたデータ上で操作を実行するためにプロセッサのデータバスの全幅を使用することによって、加速され、より効率的に実行される。これは潜在的に、プロセッサのデータバスを介してより小さな単位のデータを転送し、一度に1つまたは複数の操作、すなわち1つのデータ要素を実行する必要を排除する。
実行ユニット1808の代替実施形態はまた、マイクロコントローラ、埋め込みプロセッサ、グラフィックスデバイス、DSP、および他のタイプの論理回路において使用され得る。システム1800は、メモリ1820を含む。メモリ1820は、ダイナミックランダムアクセスメモリ(DRAM)デバイス、スタティックランダムアクセスメモリ(SRAM)デバイス、フラッシュメモリデバイス、または他のメモリデバイスを含む。メモリ1820は、プロセッサ1802によって実行されることになるデータ信号によって表される命令および/またはデータを記憶する。
本開示の上述の特徴または態様および解決策のいずれかが、図18に示される1つまたは複数の相互接続上で利用され得ることに留意されたい。例えば、プロセッサ1802の内部ユニットを結合するための、図示されていないオンダイ相互接続(ODI)は、上述の実施形態の1つまたは複数の態様を実装する。または、実施形態は、プロセッサバス1810(例えば、他の既知の高性能コンピューティング相互接続)、メモリ1820への高帯域幅メモリ経路1818、グラフィックスアクセラレータ1812へのポイントツーポイントリンク(例えば、ペリフェラルコンポーネント相互接続エクスプレス(PCIe)準拠ファブリック)、コントローラハブ相互接続1822、他の例示された構成要素を結合するためのI/Oまたは他の相互接続(例えば、USB、PCI、PCIe)に関連付けられ得る。そのような構成要素のいくつかの例は、オーディオコントローラ1836、ファームウェアハブ(フラッシュBIOS)1828、無線トランシーバ1826、データストレージ1824、ユーザ入力およびキーボードインタフェース1842を含むレガシーI/Oコントローラ1840、ユニバーサルシリアルバス(USB)などのシリアル拡張ポート1838、およびネットワークコントローラ1834を含む。データストレージ1824は、ハードディスクドライブ、フロッピーディスクドライブ、CD−ROM装置、フラッシュメモリデバイス、または他の大容量記憶装置を含むことができる。
次に、図19を参照すると、本開示の実施形態による第2のシステム1900のブロック図が示されている。図19に示すように、マルチプロセッサシステム1900は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続1950を介して結合された第1のプロセッサ1970および第2のプロセッサ1980を含む。プロセッサ1970および1980の各々は、あるバージョンのプロセッサであり得る。一実施形態では、1952及び1954は、高性能アーキテクチャなどの、シリアル、ポイントツーポイントコヒーレント相互接続ファブリックの一部である。
2つのプロセッサ1970、1980のみで示されているが、本開示の範囲はそれに限定されないことが理解されるべきである。他の実施形態では、1つまたは複数の追加のプロセッサが与えられたプロセッサ内に存在し得る。
プロセッサ1970および1980は、それぞれ、集積メモリコントローラユニット1972および1982を含んで示される。プロセッサ1970はまた、そのバスコントローラユニットの一部として、ポイントツーポイント(P−P)インタフェース1976および1978を含み、同様に、第2のプロセッサ1980は、P−Pインタフェース1986および1988を含む。プロセッサ1970、1980は、P−Pインタフェース回路1978、1988を使用して、ポイントツーポイントインタフェース1950を介して情報を交換し得る。図19に示すように、IMC1972および1982は、プロセッサをそれぞれのメモリ、すなわち、メモリ1932およびメモリ1934に結合し、これらは、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部であり得る。
プロセッサ1970、1980は、各々、ポイントツーポイントインタフェース回路1976、1994、1986、1998を使用して、個々のP−Pインタフェース1952、1954を介してチップセット1990と情報を交換する。チップセット1990はまた、高性能グラフィックス相互接続1939に沿ってインタフェース回路1992を介して高性能グラフィックス回路1938と情報を交換する。
共有キャッシュ(図示せず)は、プロセッサまたは両方のプロセッサの外部のいずれかに含まれ得るが、P−P相互接続を介してプロセッサに接続され得、プロセッサが低電力モードに置かれた場合には、いずれかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュに記憶され得る。
チップセット1990は、インタフェース1996を介して第1のバス1916に結合され得る。一実施形態では、第1のバス1916は、ペリフェラルコンポーネント相互接続(PCI)バス、または、PCIエクスプレスバスまたは他の第3世代I/O相互接続バスなどのバスであり得るが、本開示の範囲はそれに限定されない。
図19に示すように、種々のI/Oデバイス1914は、第1のバス1916を第2のバス1920に結合するバスブリッジ1918と共に、第1のバス1916に結合される。一実施形態では、第2のバス1920は、ローピンカウント(LPC)バスを含む。例えば、一実施形態では、キーボードおよび/またはマウス1922、通信デバイス1927、およびディスクドライブまたはしばしば命令/コードおよびデータ1930を含む他の大容量記憶装置のような記憶ユニット1928を含む、種々のデバイスが第2のバス1920に結合される。さらに、オーディオI/O1924が第2のバス1920に結合されて示されている。他のアーキテクチャも可能であり、含まれる構成要素および相互接続アーキテクチャは様々であることに留意されたい。例えば、図19のポイントツーポイントアーキテクチャの代わりに、システムはマルチドロップバスまたは他のこのようなアーキテクチャを実装し得る。
次に図20を参照すると、上述の開示によるシステムオンチップ(SOC)設計の一実施形態が示されている。具体例として、SOC2000はユーザ機器(UE)に含まれている。一実施形態では、UEは、ハンドヘルド電話、スマートフォン、タブレット、超薄型ノートブック、ブロードバンドアダプタを備えたノートブック、またはその他の同様の通信装置など、エンドユーザが通信するために使用する任意のデバイスを指す。UEはしばしば基地局またはノードに接続し、これは本質的にGSMネットワーク内のモバイルステーション(MS)に対応する可能性がある。
ここでは、SOC2000は、2006と2007の2つのコアを含む。上述の説明と同様に、コア2006および2007は、Intel(登録商標) Architecture Core(商標)ベースのプロセッサ、Advanced Micro Devices, Inc.(AMD)プロセッサ、MIPSベースのプロセッサ、ARMベースのプロセッサ設計、またはそれらの顧客、ならびにそれらのライセンシーまたはアダプターなどのインストラクションセットアーキテクチャに適合し得る。コア2006および2007は、システム2000の他の部分と通信するために、バスインタフェースユニット2009およびL2キャッシュ2011に関連付けられるキャッシュ制御2008に結合される。相互接続2010は、IOSF、AMBA、または上述の他の相互接続などのオンチップ相互接続を含み、これは、本明細書に記載の1つまたは複数の態様を潜在的に実装する。
インタフェース2010は、SIMカードとインタフェースする加入者識別モジュール(SIM)2030、SOC2000を初期化およびブートするためのコア2006および2007による実行のためのブートコードを保持するブートROM2035、外部メモリ(例えば、DRAM2060)とインタフェースするためのSDRAMコントローラ2040、不揮発性メモリ(例えば、フラッシュ2065)とインタフェースするためのフラッシュコントローラ2045、周辺機器とインタフェースするための周辺制御装置2050(例えば、シリアル周辺機器インタフェース)、入力(例えば、タッチ対応入力)を表示および受信するためのビデオコーデック2020およびビデオインタフェース2025、グラフィックス関連の計算を実行するGPU2015などのような、他の構成要素への通信チャネルを提供する。これらのインタフェースのいずれも、本明細書に記載の実施形態の態様を組み込むことができる。
さらに、このシステムは、Bluetoothモジュール2070、3Gモデム2075、GPS2085、およびWiFi2085などの通信のための周辺機器を示す。上記のように、UEは通信用の無線装置を含むことに留意されたい。結果として、これらの周辺通信モジュールは、全て必要とされるわけではない。しかし、UEでは、何らかの形で、外部通信のための無線装置が含まれることになる。
本開示が限定された数の実施形態に関して説明されたが、当業者は、その実施形態から多くの修正および変形を理解するであろう。添付の特許請求の範囲は、本開示の真の精神および範囲内にあるすべてのそのような修正および変形をカバーすることが意図されている。
設計は、作成からシミュレーション、製造までの様々な段階を経ることができる。設計を表現するデータは、複数の方法で設計を表現し得る。第一に、シミュレーションにおいて有用であるように、ハードウェア記述言語または他の機能記述言語を使用して、ハードウェアが表され得る。さらに、論理ゲートおよび/またはトランジスタゲートを有する回路レベルモデルが、設計プロセスのいくつかの段階で生成され得る。さらに、大部分の設計は、ある段階で、ハードウェアモデルにおける種々のデバイスの物理的配置を表すデータのレベルに達する。従来の半導体製造技術が使用される場合、ハードウェアモデルを表すデータは、集積回路を製造するために使用されるマスクのための異なるマスク層上の種々の特徴の有無を指定するデータであり得る。設計の任意の表現において、データは、機械可読媒体の任意の形態で記憶され得る。メモリまたはディスクなどの磁気または光学記憶装置は、そのような情報を伝送するために変調または発生された光波または電波を介して伝送される情報を記憶する機械可読媒体であり得る。符号又は設計を表示又は搬送する電気搬送波が伝送されるとき、電気信号のコピー、バッファリング、又は再伝送が行われる程度に応じて、新しいコピーが行われる。従って、通信プロバイダまたはネットワークプロバイダは、本開示の実施形態の技術を具体化する、搬送波に符号化された情報などのアーティクルを、有形の機械可読媒体上に、少なくとも一時的に記憶し得る。
本明細書で使用されるモジュールは、ハードウェア、ソフトウェア、および/またはファームウェアの任意の組み合わせを指す。一例として、モジュールは、マイクロコントローラによって実行されるように適合されたコードを記憶するために非一時媒体に関連付けられる、マイクロコントローラなどのハードウェアを含む。従って、一実施形態では、モジュールへの言及は、非一時媒体上に保持されるべきコードを認識および/または実行するように特に構成されるハードウェアを指す。さらに、別の実施形態では、モジュールの使用は、コードを含む非一時媒体を指し、これは、マイクロコントローラによって実行されて所定の動作を実行するように特に適合されている。また、推測できるように、さらに別の実施形態では、モジュールという用語は(この例では)、マイクロコントローラと非一時媒体との組み合わせを指し得る。しばしば、別個のものとして示されるモジュール境界は、一般的に変化し、重複する可能性がある。例えば、第1および第2のモジュールは、ハードウェア、ソフトウェア、ファームウェア、またはそれらの組み合わせを共有してもよく、一方で、いくつかの独立したハードウェア、ソフトウェア、またはファームウェアを潜在的に保持してもよい。一実施形態では、ロジックという用語の使用は、トランジスタ、レジスタのようなハードウェア、またはプログラマブルロジックデバイスなどの他のハードウェアを含む。
一実施形態において、「構成される」という語句の使用は、指定された又は決定されたタスクを実行するために、装置、ハードウェア、ロジック、又は要素を配置し、組み立て、製造し、販売の申し出をし、輸入し、及び/又は設計することを指す。この例では、動作していない装置又はその要素は、指定されたタスクを実行するように設計、結合、及び/又は相互接続されている場合に、指定されたタスクを実行するように「構成」されている。純粋に例示的な例として、ロジックゲートは、動作中に0または1を提供し得る。しかし、クロックにイネーブル信号を提供するように「構成される」ロジックゲートは、1または0を提供し得る全ての潜在的なロジックゲートを含むわけではない。代わりに、ロジックゲートは、動作中に1または0の出力がクロックをイネーブルにするように何らかの方法で結合されたものである。ここでも、用語「構成される」の使用は、動作を必要とせず、代わりに装置、ハードウェア、および/または要素の潜伏状態に焦点を当て、潜伏状態では、装置、ハードウェア、および/または要素は、装置、ハードウェア、および/または要素が動作しているときに特定のタスクを実行するように設計されている。
さらに、一実施形態において、「するように」、「することができる」、および/または「するように動作可能」という語句の使用は、特定の方法で装置、ロジック、ハードウェア、および/または要素の使用を可能にするように設計された、いくつかの装置、ロジック、ハードウェア、および/または要素を指す。上述したように、一実施形態において、するようい、できる、またはするように動作可能の使用は、装置、論理、ハードウェア、および/または要素の潜在状態を指し、装置、論理、ハードウェア、および/または要素が動作していないが、特定の方法で装置の使用を可能にするような方法で設計される。
値は、本明細書で使用される場合、数字、状態、論理状態、またはバイナリ論理状態の任意の既知の表現を含む。しばしば、論理レベル、論理値(logic values)、または論理値(logical values)の使用は、1および0とも呼ばれ、単にバイナリ論理状態を表す。例えば、1は高論理レベルを示し、0は低論理レベルを示す。一実施形態では、トランジスタまたはフラッシュセルなどの記憶セルは、単一の論理値または複数の論理値を保持することができる。しかし、コンピュータシステムにおける値の他の表現が使用されてきた。例えば、10進数の10は1010のバイナリ値と16進数の文字Aとして表現され得る。したがって、値はコンピュータシステムに保持できる情報の表現を含む。
さらに、状態は、値または値の部分によって表現され得る。一例として、論理1のような第1の値はデフォルトまたは初期状態を表し得、論理ゼロのような第2の値はデフォルトではない状態を表し得る。さらに、リセットおよびセットという用語は、一実施形態では、それぞれデフォルトおよび更新された値または状態を指す。例えば、デフォルト値は、潜在的に、高い論理値、すなわち、リセットを含み、一方、更新された値は、潜在的に、低い論理値、すなわち、セットを含む。値の任意の組み合わせは、任意の数の状態を表現するために使用され得ることに留意されたい。
上記の方法、ハードウェア、ソフトウェア、ファームウェアまたはコードの実施形態は、処理要素によって実行可能な機械アクセス可能、機械可読、コンピュータアクセス可能、またはコンピュータ可読媒体に格納された命令またはコードによって実装され得る。非一時的な機械アクセス可能/読取可能媒体は、コンピュータまたは電子システムなどの、機械によって読取可能な形態で情報を提供する(すなわち、記憶および/または送信する)任意のメカニズムを含む。例えば、非一時的機械アクセス可能媒体は、スタティックRAM(SRAM)またはダイナミックRAM(DRAM)などのランダムアクセスメモリ、ROM、磁気または光記憶媒体、フラッシュメモリデバイス、電気記憶デバイス、光記憶デバイス、音響記憶デバイス、一時的(伝搬)信号(例えば、搬送波、赤外線信号、デジタル信号)から受け取った情報を保持するための他の形態の記憶デバイスなどを含み、これらはそこから情報を受け取ることができる非一時的媒体とは区別されるべきである。
本開示の実施形態を実行するためにロジックをプログラムするために使用される命令は、DRAM、キャッシュ、フラッシュメモリ、または他のストレージなどのシステム内のメモリ内に記憶され得る。さらに、命令は、ネットワークを介して、または他のコンピュータ可読媒体を介して配布されることができる。従って、機械可読媒体は、機械(例えば、コンピュータ)によって読取可能な形態で情報を記憶または送信するための任意の機構を含み得るが、これに限定されない、フロッピーディスケット、光ディスク、コンパクトディスク、リードオンリメモリ(CD−ROM)、および光磁気ディスク、リードオンリメモリ(ROM)、ランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、磁気もしくは光学カード、フラッシュメモリ、または電気、光学、音響、または他の形態の伝搬信号(例えば、搬送波、赤外線信号、デジタル信号など)を介して、インターネットで情報を伝送する際に使用される有形の機械可読ストレージを含み得る。したがって、コンピュータ可読媒体は、機械(例えば、コンピュータ)が読むことができる形態で電子命令または情報を記憶または送信するのに適した任意のタイプの有形の機械可読媒体を含む。
以下の例は、本明細書に従った実施形態に関する。例1は、ロード/ストア相互接続プロトコルを実装するプロトコル回路と、ファブリックに結合するためのインタフェースを実装するインタフェース回路とを含む装置であって、インタフェースは、複数の物理レーンの第1のサブセットに実装されるヘッダチャネルであって、レーンの第1のサブセットは、相互接続プロトコルに基づいてパケットのヘッダを搬送するための第1のレーンと、ヘッダのメタデータを搬送するための第2のレーンとを含む、ヘッダチャネルと、複数の物理レーンの別の第2のサブセットに実装されるデータチャネルであって、レーンの第2のサブセットは、パケットのペイロードを搬送するための第3のレーンと、ペイロードのメタデータを搬送するための第4のレーンとを含む、データチャネルとを含む。
例2は、例1の主題を含み、ヘッダは、単一クロックサイクルにおいてヘッダチャネルを介して送信され、ペイロードは、複数クロックサイクルを介して送信可能である。
例3は、例2の主題事項を含み、レーンの第1のサブセットは、さらに、ヘッダチャネルで別のパケットの別のヘッダを搬送するための第5のレーンと、別のヘッダのためのメタデータを搬送するための第6のレーンを含み、ヘッダおよび別のチャネルは、ヘッダチャネルで単一クロックサイクルで一緒に送信される。
例4は、例3の主題を含み、その後のクロックサイクルにおいて、第1及び第5のレーンの両方が、第3のパケットの第3のヘッダを搬送するために使用され、第3のヘッダのサイズは、ヘッダ及び他のヘッダよりも大きい。
例5は、例1〜4のいずれか1つの主題を含み、ヘッダチャネルは、第1のレーンの有効なヘッダデータを識別するために、レーンの第1のサブセットのうちの1つにヘッダ有効信号をさらに含み、データチャネルは、第3のレーンの有効なペイロードデータを識別するために、レーンの第2のサブセットのうちの1つにデータ有効信号をさらに含む。
例6は、例5の主題を含み、ヘッダ有効信号は、第2のレーン上の有効なメタデータをさらに識別することであり、データ有効信号は、第4のレーン上の有効なメタデータをさらに識別することである。
例7は、例1〜6のいずれか1つの主題を含み、レーンの第2のサブセットは、データチャネル上のペイロードの開始を示すためのデータ信号の開始を搬送する第5のレーンをさらに含み、データ信号の開始は、ペイロードバイトの開始を搬送するための特定のクロックサイクルにおいて使用される第3のレーンの第1の部分を識別するために特定のクロックサイクルにおいてアサートされる。
例8は、例7の主題を含み、レーンの第2のサブセットは、データチャネル上のペイロードの最終バイトを示すためにデータ信号の終端を搬送する第6のレーンをさらに含み、データ信号の終端は、ペイロードの最終バイトを搬送するために後続のクロックサイクルにおいて使用される第3のレーンの第2の部分を識別するために後続のクロックサイクルにおいてアサートされる。
例9は、例1〜8のいずれか1つの主題を含み、レーンの第1のサブセットは、ヘッダチャネルのクレジットリターンを搬送する第5のレーンをさらに含み、レーンの第2のサブセットは、データチャネルのクレジットリターンを搬送するための第6のレーンをさらに含む。
例10は、例9の主題を含み、ヘッダチャネルのクレジットおよびデータチャネルのクレジットのうちの1つは、共有クレジットを含む。
例11は、例1〜10のいずれか1つの主題を含み、ヘッダのメタデータおよびペイロードのメタデータの各々は、パケットのフロー制御情報を識別する。
例12は、例11の主題を含み、フロー制御情報は、インタフェース上のペイロードおよびヘッダの送信中に、インタフェース上のパケットに固有である。
例13は、例12の主題を含み、フロー制御情報は、パケットの仮想チャネル識別子およびフロー制御クラス識別子の組み合わせを含む。
例14は、例13の主題を含み、インタフェースは、与えられたクロックサイクルの間にインタフェース上で送信されるパケットについて、最大数の異なるフロー制御クラス識別子−仮想チャネル識別子の組み合わせを定義する。
例15は、例11〜14のいずれか1つの主題を含み、ヘッダのメタデータは、パリティ情報、ヘッダサイズ情報をさらに含み、ペイロードデータがヘッダに関連付けられているか否かを示す。
例16は、例1〜15のいずれかの主題を含み、インタフェースは、複数の物理レーンの第3のサブセットに実装されるグローバルチャネルをさらに含み、グローバルチャネルは、インタフェースのための制御信号を搬送する。
例17は、例16の主題を含み、制御信号は、インタフェースの接続および切断のフローで使用するための初期化信号のセットを含む。
例18は、例17の主題を含み、接続および切断のフローは、初期化状態マシンに従い、初期化状態マシンで定義される状態間の遷移が初期化信号のセットの値によって引き起こされる。
例19は、例1〜18のいずれか1つの主題を含み、複数のヘッダが、ペイロードの送信が完了する前に、ヘッダチャネル上で搬送される。
例20は、例1〜19のいずれか1つの主題を含み、インタフェースは、ファブリックにパケットを送信するためのインタフェースの第1のインスタンスを含み、装置は、ファブリックからパケットを受信するためのインタフェースの第2のインスタンスをさらに含み、インタフェースの第2のインスタンスは、第2のヘッダチャネルおよび第2のデータチャネルを含む。
例21は、例20の主題を含み、さらに、インタフェースの第2のインスタンスのための受信機バッファを実装するためのメモリを含み、受信機バッファはフロー制御クラスまたは仮想チャネル間のクレジット共有をサポートする。
例22は、例1〜21のいずれか1つの主題を含み、ロード/ストア相互接続プロトコルは、ペリフェラルコンポーネント相互接続エクスプレス(PCIe)プロトコルを含む。
例23は、例22の主題を含み、PCIeプロトコルがPCIe第6世代を含む。
例24は、例1〜23のいずれか1つの主題を含み、ロード/ストア相互接続プロトコルは、コンピュートエクスプレスリンク(CXL)プロトコルを含み、CXLプロトコルは、CXL.ioを含む。
例25は、例1〜24のいずれか1つの主題を含み、ファブリックは、システムオンチップ(SoC)デバイスの相互接続ファブリックを含み、この装置は、SoCのブロックを実装する計算回路をさらに含む。
例26は、システムの相互接続ファブリックの少なくとも一部を実装するファブリック回路と、コンピューティングデバイスに結合するインタフェースを実装するインタフェース回路とを含む装置であって、インタフェースは、複数の物理レーンの第1のサブセットに実装されるヘッダチャネルであって、レーンの第1のサブセットは、相互接続プロトコルに基づいてパケットのヘッダを搬送する第1のレーンと、ヘッダのメタデータを運ぶ第2のレーンとを含む、ヘッダチャネルと、複数の物理レーンの別の第2のサブセットに実装されるデータチャネルであって、レーンの第2のサブセットは、ペイロードのペイロードを搬送する第3のレーンと、ペイロードのメタデータを搬送する第4のレーンとを含む、データチャネルとを含む装置である。
例27は、例26の主題を含み、ヘッダは単一クロックサイクルにおいてヘッダチャネルを介して送信され、ペイロードは複数クロックサイクルを介して送信可能である。
例28は、例27の主題を含み、レーンの第1のサブセットは、さらに、ヘッダチャネル上で別のパケットの別のヘッダを搬送するための第5のレーンと、他のヘッダのためのメタデータを搬送するための第6のレーンを含み、ヘッダおよび他のチャネルは、ヘッダチャネル上で単一クロックサイクルで一緒に送信される。
例29は、例28の主題を含み、その後のクロックサイクルにおいて、第1及び第5のレーンの両方が、第3のパケットの第3のヘッダを搬送するために使用され、第3のヘッダのサイズは、ヘッダ及び他のヘッダよりも大きい。
例30は、例26〜29のいずれか1つの主題を含み、ヘッダチャネルは、第1のレーンの有効なヘッダデータを識別するためにレーンの第1のサブセットのうちの1つにヘッダ有効信号をさらに含み、データチャネルは、第3のレーンの有効なペイロードデータを識別するために、レーンの第2のサブセットのうちの1つにデータ有効信号をさらに含む。
例31は、例30の主題を含み、ヘッダ有効信号は、第2のレーン上の有効なメタデータをさらに識別し、データ有効信号は、第4のレーン上の有効なメタデータをさらに識別する。
例32は、例26〜31のいずれか1つの主題を含み、レーンの第2のサブセットは、データチャネル上のペイロードの開始を示すためのデータ信号の開始を搬送する第5のレーンをさらに含み、データ信号の開始は、ペイロードバイトの開始を搬送するために特定のクロックサイクルにおいて使用される第3のレーンの第1の部分を識別するために特定のクロックサイクルにおいてアサートされる。
例33は、例32の主題を含み、レーンの第2のサブセットは、データチャネル上のペイロードの最終バイトを示すためにデータ信号の終端を搬送する第6のレーンをさらに含み、データ信号の終端は、ペイロードの最終バイトを搬送するために後続のクロックサイクルにおいて使用される第3のレーンの第2の部分を識別するために後続のクロックサイクルにおいてアサートされる。
例34は、例26〜33のいずれか1つの主題を含み、レーンの第1のサブセットは、ヘッダチャネルのクレジットリターンを搬送する第5のレーンをさらに含み、レーンの第2のサブセットは、データチャネルのクレジットリターンを搬送するための第6のレーンをさらに含む。
例35は、例34の主題を含み、ヘッダチャネルのクレジットおよびデータチャネルのクレジットのうちの1つは、共有クレジットを含む。
例36は、例26〜35のいずれか1つの主題を含み、ヘッダのメタデータおよびペイロードのメタデータの各々は、パケットのフロー制御情報を識別する。
例37は、例36の主題を含み、フロー制御情報は、インタフェース上のペイロードおよびヘッダの送信中に、インタフェース上のパケットに固有である。
例38は、例37の主題を含み、フロー制御情報は、パケットの仮想チャネル識別子およびフロー制御クラス識別子の組み合わせを含む。
例39は、例38の主題を含み、インタフェースは、与えられたクロックサイクルの間にインタフェース上で送信されるパケットについて、最大数の異なるフロー制御クラス識別子−仮想チャネル識別子の組み合わせを定義する。
例40は、例36〜39のいずれか1つの主題を含み、ヘッダのメタデータは、パリティ情報、ヘッダサイズ情報をさらに含み、ペイロードデータがヘッダに関連付けられているか否かを示す。
例41は、例26〜40のいずれか1つの主題を含み、インタフェースは、複数の物理レーンの第3のサブセットに実装されるグローバルチャネルをさらに含み、グローバルチャネルは、インタフェースのための制御信号を搬送する。
例42は、例41の主題を含み、制御信号は、インタフェースの接続および切断のフローで使用するための初期化信号のセットを含む。
例43は、例42の主題を含み、接続および切断のフローは、初期化状態マシンに従い、初期化状態マシンで定義される状態間の遷移が初期化信号のセットの値によって引き起こされる。
例44は、例26〜43のいずれか1つの主題を含み、複数のヘッダが、ペイロードの送信が完了する前に、ヘッダチャネル上で搬送される。
例45は、例26〜44のいずれか1つの主題を含み、インタフェースは、ファブリックにパケットを送信するためのインタフェースの第1のインスタンスを含み、装置は、ファブリックからパケットを受信するためのインタフェースの第2のインスタンスをさらに含み、インタフェースの第2のインスタンスは、第2のヘッダチャネルおよび第2のデータチャネルを含む。
例46は、例45の主題を含み、さらに、インタフェースの第2のインスタンスのための受信機バッファを実装するためのメモリを含み、受信機バッファはフロー制御クラスまたは仮想チャネル間のクレジット共有をサポートする。
例47は、例26〜46のいずれか1つの主題を含み、ロード/ストア相互接続プロトコルは、ペリフェラルコンポーネント相互接続エクスプレス(PCIe)プロトコルを含む。
例48は、例47の主題を含み、PCIeプロトコルはPCIe第6世代を含む。
例49は、例26〜48のいずれか1つの主題を含み、ロード/ストア相互接続プロトコルは、コンピュートエクスプレスリンク(CXL)プロトコルを含み、CXLプロトコルがCXL.ioを含む。
例50は、例26〜49のいずれか1つの主題を含み、システムは、システムオンチップ(SoC)デバイスを含み、コンピューティングデバイスはSoCデバイスのブロックを含む。
例51は、方法であって:インタフェースを介してデバイスからパケットのヘッダを受信するステップであって、インタフェースは、第1の複数の物理レーンに実装されるヘッダチャネルと、別の第2の複数の物理レーンに実装されるデータチャネルとを含み、ヘッダは、第1の複数のレーンの第1のサブセットで受信される、ステップと;ヘッダチャネルの第1の複数のレーンの第2のサブセット上のヘッダのヘッダメタデータを受信するステップと;インタフェースのデータチャネル上でデバイスからパケットのペイロードデータを受信するステップであって、ペイロードデータは、第2の複数のレーンの第1のサブセット上で受信される、ステップと;第2の複数のレーンの第2のサブセット上でペイロードデータのペイロードメタデータを受信するステップと;ペイロードデータがヘッダメタデータおよびペイロードメタデータに基づいてヘッダに関連付けられることを決定するステップと;を含む、方法である。
例52は、例51の主題を含み、さらに、ヘッダメタデータに基づいてヘッダをデコードするステップを含む。
例53は、例51〜52のいずれか1つの主題を含み、さらに、第1の複数のレーンの第3のサブセット上でデバイスにヘッダクレジットリターンを送信するステップであって、ヘッダクレジットリターンはヘッダチャネルのクレジットリターンを含む、ステップと;第2の複数のレーンの第3のサブセット上でデバイスにデータクレジットリターンを送信するステップであって、データクレジットリターンはデータチャネルのクレジットリターンを含む、ステップと;を含む。
例54は、例53の主題を含み、ヘッダクレジットリターンまたはデータクレジットリターンのうちの1つは、共有クレジットを含む。
例55は、例51〜54のいずれか1つの主題を含み、ヘッダは、第1のパケットの第1のヘッダを含み、第1のヘッダは、特定のクロックサイクルにおいて、データチャネルを介してデバイスから受信され、本方法は、さらに、特定のクロックサイクルにおいて第1の複数のレーン上で第2のパケットの第2のヘッダを受信するステップを含む。
例56は、例55の主題を含み、さらに、第1の複数のレーンの第3のサブセット上で第2のパケットのヘッダメタデータを受信するステップを含み、第1および第2のヘッダのヘッダメタデータは両方とも、特定のクロックサイクルで受信される。
例57は、例55の主題を含み、さらに、後続のクロックサイクルにおいて、第3のパケットの第3のヘッダを受信するステップを含み、第3のヘッダは、第1のヘッダを搬送するために使用されるレーンと、第2のヘッダを搬送するために使用されるレーンの一部とで搬送される。
例58は、例51〜57のいずれか1つの主題を含み、さらに、第1の複数のレーンの有効な信号レーン上のヘッダ有効信号のアサーションを識別するステップであって、ヘッダ有効信号は、有効ヘッダデータが第1の複数のレーンの第1のサブセット上で送られることを識別する、ステップと;第2の複数のレーンの有効な信号レーン上のデータ有効信号のアサーションを識別するステップであって、データ有効信号は、有効ペイロードデータが第2の複数のレーンの第1のサブセット上で送られることを識別する、ステップと;を含む。
例59は、例58の主題を含み、ヘッダ有効信号は、第1の複数のレーンの第2のサブセット上の有効メタデータをさらに識別し、データ有効信号は、第2の複数のレーンの第2のサブセット上の有効メタデータをさらに識別する。
例60は、例51〜59のいずれか1つの主題を含み、さらに、データチャネルを実装する第2の複数のレーンの第3のサブセット上のデータ信号の開始を受信するステップを含み、データ信号の開始は、データチャネル上のペイロードの開始を示し、データ信号の開始は、ペイロードバイトの開始を搬送するために特定のクロックサイクルにおいて使用される第2の複数のレーンの第1のサブセットの第1の部分を識別するために、特定のクロックサイクルにおいてアサートされる。
例61は、例60の主題を含み、さらに、データチャネルを実装する第2の複数のレーンの第4のサブセット上のデータ信号の終端を受信するステップを含み、データ信号の終端は、ペイロードの最終バイトを搬送するために後続のクロックサイクルにおいて使用される第2の複数のレーンの第1のサブセットの対応する部分を識別するために、後続のクロックサイクルにおいてアサートされる。
例62は、例51〜61のいずれか1つの主題を含み、ヘッダメタデータおよびデータメタデータの各々は、パケットのフロー制御情報を識別する。
例63は、例62の主題を含み、フロー制御情報は、インタフェース上のペイロードおよびヘッダの送信中に、インタフェース上のパケットに固有である。
例64は、例63の主題を含み、フロー制御情報は、パケットの仮想チャネル識別子およびフロー制御クラス識別子の組み合わせを含む。
例65は、例64の主題を含み、インタフェースは、与えられたクロックサイクルの間にインタフェース上で送信されるパケットについて、最大数の異なるフロー制御クラス識別子−仮想チャネル識別子の組み合わせを定義する。
例66は、例62〜64のいずれか1つの主題を含み、ヘッダのメタデータは、パリティ情報、ヘッダサイズ情報をさらに含み、ペイロードデータがヘッダに関連付けられているか否かを示す。
例67は、例51〜66のいずれか1つの主題を含み、インタフェースは、第3の複数の物理的レーンを使用して実装されるグローバルチャネルをさらに含み、この方法は、さらに、インタフェースの初期化または切断フローを実行するために、グローバルチャネルを介してデバイスと通信するステップを含む。
例68は、例67の主題を含み、グローバルチャネルが第3の複数の物理レーンにマップされる制御信号のセットを定義する。
例69は、例68の主題を含み、制御信号のセットは、初期化状態マシンに従い初期化および切断のフローで使用するための初期化信号のセットを含み、初期化状態マシンで定義される状態間の遷移が、初期化信号のセットの値によって引き起こされる。
例70は、例51〜69のいずれか1つの主題を含み、さらに、ペイロードの受信がデータチャネル上で完了する前にヘッダを処理するステップを含む。
例71は、例51〜70のいずれか1つの主題を含み、さらに、インタフェースで使用されるクレジットのための受信機バッファを維持するステップを含む。
例72は、例51〜71のいずれか1つの主題を含み、パケットがペリフェラルコンポーネント相互接続エクスプレス(PCIe)プロトコルに基づいている。
例73は、例72の主題を含み、PCIeプロトコルがPCIe第6世代を含む。
例74は、例51−73のいずれか1つの主題を含み、パケットは、コンピュートエクスプレスリンク(CXL)プロトコルに基づいており、CXLプロトコルは、CXL.ioを含む。
例75は、例51〜74のいずれか1つの主題を含み、デバイスは、システムオンチップ(SoC)デバイスの相互接続ファブリックの少なくとも一部を実装し、インタフェースは、エージェントをSoCデバイスの相互接続ファブリックに結合する。
例76は、例51〜75のいずれか1つの主題を含み、デバイスはSoCデバイスの計算ブロックを実装し、インタフェースは、計算ブロックをSoCデバイスのファブリックに結合する。
例77は、例51〜76のいずれか1つの方法を実行する手段を含むシステムである。
例78は、例77の主題を含み、手段は、ハードウェア回路を含む。
例79は、例77〜78のいずれか1つの主題を含み、手段は、その上に記憶される命令を有する非一時的な機械可読記憶媒体を含み、命令は、プロセッサに例51〜76のいずれか1つの方法の少なくとも一部を実行させるようにプロセッサによって実行可能である。
例80は、方法であって:インタフェースを介してデバイスに送信されることになるパケットを識別するステップと;インタフェースのヘッダチャネルを介してデバイスにパケットのヘッダを送信するステップであって、ヘッダチャネルは、第1の複数の物理レーンを使用して実装され、ヘッダは、第1の複数の物理レーンの第1のサブセット上で送信される、ステップと;ヘッダチャネルの第1の複数のレーンの第2のサブセット上でヘッダのヘッダメタデータをデバイスに送信するステップと;インタフェースのデータチャネル上でデバイスにパケットのペイロードデータを送信するステップであって、データチャネルは別の第2の複数の物理レーンを用いて実装され、ペイロードデータは第2の複数のレーンの第1のサブセット上で受信される、ステップと;第2の複数のレーンの第2のサブセット上でデバイスにペイロードデータのペイロードメタデータを送信するステップと;を含む、方法である。
例81は、例80の主題を含み、さらに、第1の複数のレーンの第3のサブセット上でデバイスからヘッダクレジットリターンを受信するステップであって、ヘッダクレジットリターンはヘッダチャネルのクレジットリターンを含む、ステップと;第2の複数のレーンの第3のサブセット上でデバイスからデータクレジットリターンを受信するステップであって、データクレジットリターンはデータチャネルのクレジットリターンを含む、ステップと;を含む。
例82は、例81の主題を含み、ヘッダクレジットリターンまたはデータクレジットリターンのうちの1つは、共有クレジットを含む。
例83は、例80〜82のいずれか1つの主題を含み、ヘッダは、第1のパケットの第1のヘッダを含み、第1のヘッダは、特定のクロックサイクルにおいて送信され、本方法は、さらに、特定のクロックサイクルにおいて第1の複数のレーン上で第2のパケットの第2のヘッダを送信するステップをさらに含む。
例84は、例83の主題を含み、さらに、第1の複数のレーンの第3のサブセット上で第2のパケットのヘッダメタデータを送信するステップを含み、第1および第2のヘッダのヘッダメタデータは両方とも特定のクロックサイクルで送信される。
例85は、例83の主題を含み、さらに、後続のクロックサイクルにおいて、第3のパケットの第3のヘッダを、データチャネルを介してデバイスに送信するステップを含み、第3のヘッダは、第1のヘッダを搬送するために使用されるレーンおよび第2のヘッダを搬送するために使用されるレーンの一部分上で搬送される。
例86は、例80〜85のいずれか1つの主題を含み、さらに、第1の複数のレーンの有効な信号レーン上でヘッダ有効信号をアサートするステップであって、ヘッダ有効信号は、有効なヘッダデータが第1の複数のレーンの第1のサブセット上で送信されることを識別する、ステップと;第2の複数のレーンの有効な信号レーン上でデータ有効信号をアサートするステップであって、データ有効信号は、有効なペイロードデータが第2の複数のレーンの第1のサブセット上で送信されることを識別する、ステップと;を含む。
例87は、例86の主題を含み、ヘッダ有効信号は、第1の複数のレーンの第2のサブセット上の有効なメタデータをさらに識別し、データ有効信号は、第2の複数のレーンの第2のサブセット上の有効なメタデータをさらに識別する。
例88は、例80〜87のいずれか1つの主題を含み、さらに、データチャネルを実装する第2の複数のレーンの第3のサブセット上でデータ信号の開始を送信するステップを含み、データ信号の開始は、データチャネル上のペイロードの開始を示し、データ信号の開始は、ペイロードバイトの開始を搬送するために特定のクロックサイクルにおいて使用される第2の複数のレーンの第1のサブセットの第1の部分を識別するために、特定のクロックサイクルにおいて送信される。
例89は、例88の主題を含み、さらに、データチャネルを実装する第2の複数のレーンの第4のサブセット上でデータ信号の終端を送信するステップを含み、データ信号の終端は、ペイロードの最終バイトを搬送するために、後続のクロックサイクルにおいて使用される第2の複数のレーンの第1のサブセットの対応する部分を識別するために、後続のクロックサイクルにおいて送信される。
例90は、例80〜89のいずれか1つの主題を含み、ヘッダメタデータおよびデータメタデータの各々は、パケットのフロー制御情報を識別する。
例91は、例90の主題を含み、フロー制御情報は、インタフェース上のペイロードおよびヘッダの送信中に、インタフェース上のパケットに固有である。
例92は、例91の主題を含み、フロー制御情報は、パケットの仮想チャネル識別子とフロー制御クラス識別子との組み合わせを含む。
例93は、例92の主題を含み、インタフェースは、与えられたクロックサイクルの間にインタフェース上で送信されるパケットについて、最大数の異なるフロー制御クラス識別子−仮想チャネル識別子の組み合わせを定義する。
例94は、例90〜93のいずれか1つの主題を含み、ヘッダのメタデータは、パリティ情報、ヘッダサイズ情報をさらに含み、ペイロードデータがヘッダに関連付けられているか否かを示す。
例95は、例80〜94のいずれか1つの主題を含み、インタフェースは、第3の複数の物理レーンを使用して実施されるグローバルチャネルをさらに含み、本方法は、さらに、インタフェースの初期化または切断フローを実行するために、グローバルチャネルを介してデバイスと通信するステップを含む。
例96は、例95の主題を含み、グローバルチャネルは、第3の複数の物理レーンにマップされる制御信号のセットを定義する。
例97は、例96の主題を含み、制御信号のセットは、初期化状態マシンに従って初期化および切断のフローで使用するための初期化信号のセットを含み、初期化状態マシンで定義される状態間の遷移は、初期化信号のセットの値によって引き起こされる。
例98は、例80〜97のいずれか1つの主題を含み、パケットは、ペリフェラルコンポーネント相互接続エクスプレス(PCIe)プロトコルに基づいている。
例99は、例98の主題を含み、PCIeプロトコルがPCIe第6世代を含む。
例100は、例80〜99のいずれか1つの主題を含み、パケットは、コンピュートエクスプレスリンク(CXL)プロトコルに基づいており、CXLプロトコルは、CXL.ioを含む。
例101は、例80〜100のいずれか1つの主題を含み、デバイスは、システムオンチップ(SoC)デバイスの相互接続ファブリックの少なくとも一部を実装し、インタフェースは、エージェントをSoCデバイスの相互接続ファブリックに結合する。
例102は、例80〜101のいずれか1つの主題を含み、ここで、デバイスはSoCデバイスの計算ブロックを実装し、インタフェースは、計算ブロックをSoCデバイスのファブリックに結合する。
例103は、例80〜102のいずれか1つの方法を実行する手段を含むシステムである。
例104は、例103の主題を含み、手段はハードウェア回路を含む。
例105は、例103〜104のいずれか1つの主題を含み、手段は、その上に記憶された命令を有する非一時的な機械可読記憶媒体を含み、命令は、プロセッサに、例80〜102のいずれか1つの方法の少なくとも一部を実行させるために、プロセッサによって実行可能である。
例106は、システムであって:ファブリックと;ファブリックを介して通信可能に結合される複数の計算ブロックと、を含み、複数の計算ブロック内の特定の計算ブロックは:ロード/ストア相互接続プロトコルをサポートするエージェント回路と;ファブリックに結合するためのインタフェースを実装するインタフェース回路と、を含み、インタフェースは:複数の物理レーンの第1のサブセットに実装されるヘッダチャネルであって、レーンの第1のサブセットは、相互接続プロトコルに基づいてパケットのヘッダを搬送する第1のレーンと、ヘッダのメタデータを搬送する第2のレーンとを含む、ヘッダチャネルと;複数の物理レーンの別の第2のサブセットに実装されるデータチャネルであって、レーンの第2のサブセットは、パケットのペイロードを搬送する第3のレーンと、ペイロードのメタデータを搬送する第4のレーンとを含む、データチャネルと、を含む。
例107は、例106の主題を含み、ヘッダは、単一クロックサイクルにおいてヘッダチャネルを介して送信され、ペイロードは、複数クロックサイクルを介して送信可能である。
例108は、例107の主題を含み、レーンの第1のサブセットは、さらに、ヘッダチャネル上で別のパケットの別のヘッダを搬送する第5レーンと、他のヘッダのメタデータを搬送する第6レーンを含み、ヘッダおよび他のチャネルは、ヘッダチャネル上で単一クロックサイクルで一緒に送信される。
例109は、例108の主題を含み、その後のクロックサイクルにおいて、第1および第5のレーンの両方が、第3のパケットの第3のヘッダを搬送するために使用され、第3のヘッダのサイズは、ヘッダおよび他のヘッダよりも大きい。
例110は、例106〜109のいずれか1つの主題を含み、ヘッダチャネルは、第1のレーンの有効なヘッダデータを識別するためにレーンの第1のサブセットのうちの1つにヘッダ有効信号をさらに含み、データチャネルは、第3のレーンの有効なペイロードデータを識別するために、レーンの第2のサブセットのうちの1つにデータ有効信号をさらに含む。
例111は、例110の主題を含み、ヘッダ有効信号は、第2のレーン上の有効なメタデータをさらに識別し、データ有効信号は、第4のレーン上の有効なメタデータをさらに識別する。
例112は、例106〜111のいずれか1つの主題を含み、レーンの第2のサブセットは、データチャネル上のペイロードの開始を示すデータ信号の開始を搬送する第5レーンをさらに含み、データ信号の開始は、ペイロードバイトの開始を搬送するために特定のクロックサイクルにおいて使用される第3レーンの第1の部分を識別するために特定のクロックサイクルにおいてアサートされる。
例113は、例112の主題を含み、レーンの第2のサブセットは、データチャネル上のペイロードの最終バイトを示すためにデータ信号の終端を搬送する第6のレーンをさらに含み、データ信号の終端は、ペイロードの最終バイトを搬送するために後続のクロックサイクルにおいて使用される第3のレーンの第2の部分を識別するために後続のクロックサイクルにおいてアサートされる。
例114は、例106〜112のいずれか1つの主題を含み、レーンの第1のサブセットは、ヘッダチャネルのクレジットリターンを搬送する第5のレーンをさらに含み、レーンの第2のサブセットは、データチャネルのクレジットリターンを搬送するための第6のレーンをさらに含む。
例115は、例114の主題を含み、ヘッダチャネルのクレジットおよびデータチャネルのクレジットのうちの1つは、共有クレジットを含む。
例116は、例106〜115のいずれか1つの主題を含み、ヘッダのメタデータおよびペイロードのメタデータの各々は、パケットのフロー制御情報を識別する。
例117は、例116の主題を含み、フロー制御情報は、インタフェース上のペイロードおよびヘッダの送信中、インタフェース上のパケットに固有である。
例118は、例117の主題を含み、フロー制御情報は、パケットに対する仮想チャネル識別子およびフロー制御クラス識別子の組み合わせを含む。
例119は、例118の主題を含み、インタフェースは、与えられたクロックサイクルの間にインタフェース上で送信されるパケットについて、最大数の異なるフロー制御クラス識別子−仮想チャネル識別子の組み合わせを定義する。
例120は、例116〜119のいずれか1つの主題を含み、ヘッダのメタデータは、パリティ情報、ヘッダサイズ情報をさらに含み、ペイロードデータがヘッダに関連付けられているか否かを示す。
例121は、例106〜120のいずれか1つの主題を含み、インタフェースは、複数の物理的レーンの第3のサブセットに実装されるグローバルチャネルをさらに含み、グローバルチャネルは、インタフェースのための制御信号を搬送する。
例122は、例121の主題を含み、制御信号は、インタフェースの接続および切断のフローで使用するための初期化信号のセットを含む。
例123は、例122の主題を含み、接続および切断のフローは、初期化状態マシンに従い、初期化状態マシンで定義される状態間の遷移が初期化信号のセットの値によって引き起こされる。
例124は、例106〜123のいずれか1つの主題を含み、複数のヘッダが、ペイロードの送信が完了する前に、ヘッダチャネル上で保持される。
例125は、例106〜124のいずれか1つの主題を含み、インタフェースは、ファブリックにパケットを送信するためのインタフェースの第1のインスタンスを含み、システムは、さらに、ファブリックからパケットを受信するためのインタフェースの第2のインスタンスを含み、インタフェースの第2のインスタンスは、第2のヘッダチャネルおよび第2のデータチャネルを含む。
例126は、例125の主題を含み、さらに、インタフェースの第2のインスタンスのための受信機バッファを実装するためのメモリを含み、受信機バッファは、フロー制御クラスまたは仮想チャネルの間のクレジット共有をサポートする。
例127は、例106〜126のいずれか1つの主題を含み、ロード/ストア相互接続プロトコルは、ペリフェラルコンポーネント相互接続エクスプレス(PCIe)プロトコルを含む。
例128は、例127の主題を含み、PCIeプロトコルはPCIe第6世代を含む。
例129は、例106〜128のいずれか1つの主題を含み、ロード/ストア相互接続プロトコルがコンピュートエクスプレスリンク(CXL)プロトコルを含み、CXLプロトコルはCXL.ioを含む。
例130は、例106〜129のいずれか1つの主題を含み、さらに、システムオンチップ(SoC)デバイスを含み、SoCデバイスは、ファブリックおよび複数の計算ブロックを含む。
例131は、例106〜130のいずれか1つの主題を含み、サーバをさらに含む。
本明細書中で「一実施形態」又は「実施形態」と言うのは、実施形態に関連して説明される特定の特徴、構造、又は特性が本開示の少なくとも一実施形態に含まれていることを意味する。したがって、本明細書中の様々な箇所における「一実施形態において」又は「実施形態において」という語句の出現は、必ずしも同一の実施形態を指すとは限らない。さらに、特定の特徴、構造又は特性は1つまたは複数の実施形態において任意の適切な方法で組み合わせられ得る。
前述の明細書では、特定の例示的な実施形態を参照して詳細な説明を行った。しかし、添付の特許請求の範囲に記載された本発明のより広範な精神および範囲から逸脱することなく、様々な修正および変更を行うことができることは明らかであろう。したがって、明細書及び図面は、限定的な意味ではなく、例示的な意味とみなされる。さらに、実施形態および他の例示的言語の前述の使用は、必ずしも同一の実施形態または同一の例を参照するものではなく、異なる別個の実施形態、および潜在的に同一の実施形態を参照してもよい。
Claims (25)
- ロード/ストア相互接続プロトコルを実装するプロトコル回路と;
ファブリックに結合するためのインタフェースを実装するインタフェース回路であって、前記インタフェースは:
複数の物理レーンの第1のサブセットに実装されるヘッダチャネルであって、前記レーンの前記第1のサブセットは、前記相互接続プロトコルに基づいてパケットのヘッダを搬送するための第1のレーンと、前記ヘッダのメタデータを搬送するための第2のレーンとを有する、ヘッダチャネルと;
前記複数の物理レーンの別の第2のサブセットに実装されるデータチャネルであって、前記レーンの前記第2のサブセットは、前記パケットのペイロードを搬送するための第3のレーンと、前記ペイロードのメタデータを搬送するための第4のレーンとを含む、データチャネルと;を有する、
インタフェース回路と;
を有する、装置。 - 前記ヘッダは、単一クロックサイクルにおいて前記ヘッダチャネルを介して送信され、前記ペイロードは、複数クロックサイクルを介して前記データチャンネル上で送信されることを許可される、
請求項1に記載の装置。 - 前記レーンの前記第1のサブセットは、さらに、前記ヘッダチャネルで別のパケットの別のヘッダを搬送するための第5のレーンと、前記別のヘッダのためのメタデータを搬送するための第6のレーンを含み、前記ヘッダおよび前記別のチャネルは、前記ヘッダチャネルで単一クロックサイクルで一緒に送信されることになる、
請求項1又は2に記載の装置。 - その後のクロックサイクルにおいて、前記第1及び前記第5のレーンの両方が、第3のパケットの第3のヘッダを搬送するために使用され、前記第3のヘッダのサイズは、前記ヘッダ及び前記別のヘッダよりも大きい、
請求項3に記載の装置。 - 前記ヘッダチャネルは、前記第1のレーンの有効なヘッダデータを識別するために、前記レーンの前記第1のサブセットのうちの1つにヘッダ有効信号をさらに含み、前記データチャネルは、前記第3のレーンの有効なペイロードデータを識別するために、前記レーンの前記第2のサブセットのうちの1つにデータ有効信号をさらに含む、
請求項1乃至4のいずれか1項に記載の装置。 - 前記レーンの前記第2のサブセットは、前記データチャネル上の前記ペイロードの開始を示すためのデータ信号の開始を搬送する第5のレーンをさらに有し、前記データ信号の前記開始は、ペイロードバイトの開始を搬送するための特定のクロックサイクルにおいて使用される前記第3のレーンの第1の部分を識別するために前記特定のクロックサイクルにおいてアサートされる、
請求項1乃至5のいずれか1項に記載の装置。 - 前記レーンの前記第2のサブセットは、前記データチャネル上の前記ペイロードの最終バイトを示すために前記データ信号の終端を搬送する第6のレーンをさらに有し、前記データ信号の前記終端は、前記ペイロードの前記最終バイトを搬送するために後続のクロックサイクルにおいて使用される前記第3のレーンの第2の部分を識別するために前記後続のクロックサイクルにおいてアサートされる、
請求項6に記載の装置。 - 前記レーンの前記第1のサブセットは、前記ヘッダチャネルのクレジットリターンを搬送する第5のレーンをさらに有し、前記レーンの前記第2のサブセットは、前記データチャネルのクレジットリターンを搬送するための第6のレーンをさらに有する、
請求項1乃至7のいずれか1項に記載の装置。 - 前記ヘッダチャネルのクレジットおよび前記データチャネルのクレジットのうちの1つは、共有クレジットを含む、
請求項8に記載の装置。 - 前記ヘッダの前記メタデータおよび前記ペイロードの前記メタデータの各々は、対応する前記パケットの仮想チャネル識別子およびフロー制御クラス識別子を識別する、
請求項1乃至9のいずれか1項に記載の装置。 - 前記パケットの前記仮想チャネル識別子および前記フロー制御クラス識別子の組み合わせは、前記パケットが処理されている間に、前記インタフェース上で固有である、
請求項10に記載の装置。 - 前記インタフェースは、与えられたクロックサイクルの間に前記インタフェース上で同時に送信されるパケットについて、最大数の異なるフロー制御クラス識別子−仮想チャネル識別子の組み合わせを定義する、
請求項11に記載の装置。 - 前記ヘッダの前記メタデータは、パリティ情報、ヘッダサイズ情報をさらに含み、ペイロードデータが前記ヘッダに関連付けられているか否かを示す、
請求項10乃至12のいずれか1項に記載の装置。 - 前記インタフェースは、前記複数の物理レーンの第3のサブセットに実装されるグローバルチャネルをさらに有し、前記グローバルチャネルは、前記インタフェースのための制御信号を搬送する、
請求項1乃至13のいずれか1項に記載の装置。 - 前記制御信号は、前記インタフェースの接続および切断のフローで使用するための初期化信号のセットを含み、前記接続および前記切断のフローは、初期化状態マシンに従い、前記初期化状態マシンで定義される状態間の遷移が前記初期化信号のセットの値によって引き起こされる、
請求項14に記載の装置。 - 前記インタフェースは、前記ファブリックにパケットを送信するための前記インタフェースの第1のインスタンスを有し、前記装置は、前記ファブリックからパケットを受信するための前記インタフェースの第2のインスタンスをさらに有し、前記インタフェースの前記第2のインスタンスは、第2のヘッダチャネルおよび第2のデータチャネルを有する、
請求項1乃至15のいずれか1項に記載の装置。 - 前記ロード/ストア相互接続プロトコルは、ペリフェラルコンポーネント相互接続エクスプレス(PCIe)プロトコルまたはコンピュートエクスプレスリンク(CXL)I/Oプロトコル(CXL.io)のうちの1つを含む、
請求項1乃至16のいずれか1項に記載の装置。 - 前記ファブリックは、システムオンチップ(SoC)デバイスの相互接続ファブリックを有し、前記装置は、前記SoCデバイスのブロックを実装する計算回路をさらに有する、
請求項1乃至17のいずれか1項に記載の装置。 - インタフェースを介してデバイスからパケットのヘッダを受信するステップであって、前記インタフェースは、第1の複数の物理レーンに実装されるヘッダチャネルと、別の第2の複数の物理レーンに実装されるデータチャネルとを有し、前記ヘッダは、前記第1の複数のレーンの第1のサブセットで受信される、ステップと;
前記ヘッダチャネルの前記第1の複数のレーンの第2のサブセット上の前記ヘッダのヘッダメタデータを受信するステップと;
前記インタフェースの前記データチャネル上で前記デバイスから前記パケットのペイロードデータを受信するステップであって、前記ペイロードデータは、前記第2の複数のレーンの第1のサブセット上で受信される、ステップと;
前記第2の複数のレーンの第2のサブセット上で前記ペイロードデータのペイロードメタデータを受信するステップと;
前記ヘッダメタデータおよび前記ペイロードメタデータに基づいて前記パケットを処理するステップと;
を含む、方法。 - 前記ヘッダメタデータに基づいて前記ヘッダをデコードするステップをさらに含む、
請求項19に記載の方法。 - 前記第1の複数のレーンの第3のサブセット上で前記デバイスにヘッダクレジットリターンを送信するステップであって、前記ヘッダクレジットリターンは前記ヘッダチャネルのクレジットリターンを含む、ステップと;
前記第2の複数のレーンの第3のサブセット上で前記デバイスにデータクレジットリターンを送信するステップであって、前記データクレジットリターンは前記データチャネルのクレジットリターンを含む、ステップと;をさらに含む、
請求項19又は20に記載の方法。 - 請求項19乃至21のいずれか1項に記載の方法を実行する手段を有するシステム。
- ファブリックと;
前記ファブリックを介して通信可能に結合される複数の計算ブロックと、
を有する、システムであって、
前記複数の計算ブロック内の特定の計算ブロックは:
ロード/ストア相互接続プロトコルをサポートするエージェント回路と;
前記ファブリックに結合するためのインタフェースを実装するインタフェース回路と;を有し、
前記インタフェースは:
複数の物理レーンの第1のサブセットに実装されるヘッダチャネルであって、前記レーンの前記第1のサブセットは、前記相互接続プロトコルに基づいてパケットのヘッダを搬送する第1のレーンと、前記ヘッダのメタデータを搬送する第2のレーンとを有する、ヘッダチャネルと;
前記複数の物理レーンの別の第2のサブセットに実装されるデータチャネルであって、前記レーンの前記第2のサブセットは、前記パケットのペイロードを搬送する第3のレーンと、前記ペイロードのメタデータを搬送する第4のレーンとを有する、データチャネルと;
を有する、
システム。 - システムオンチップ(SoC)デバイスをさらに有し、前記SoCデバイスは、前記ファブリックおよび前記複数の計算ブロックを有する、
請求項23に記載のシステム。 - サーバをさらに有する、
請求項23に記載のシステム。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201962944207P | 2019-12-05 | 2019-12-05 | |
US62/944,207 | 2019-12-05 | ||
US16/914,339 | 2020-06-27 | ||
US16/914,339 US11762802B2 (en) | 2019-12-05 | 2020-06-27 | Streaming fabric interface |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2021090188A true JP2021090188A (ja) | 2021-06-10 |
JP2021090188A5 JP2021090188A5 (ja) | 2023-06-20 |
Family
ID=72747998
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2020159410A Pending JP2021090188A (ja) | 2019-12-05 | 2020-09-24 | ストリーミングファブリックインタフェース |
Country Status (5)
Country | Link |
---|---|
US (1) | US11762802B2 (ja) |
EP (2) | EP3832472B1 (ja) |
JP (1) | JP2021090188A (ja) |
CN (1) | CN112925736A (ja) |
BR (1) | BR102020019366A2 (ja) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11232058B2 (en) | 2019-03-08 | 2022-01-25 | Intel Corporation | Enabling sync header suppression latency optimization in the presence of retimers for serial interconnect |
US11914903B2 (en) | 2020-10-12 | 2024-02-27 | Samsung Electronics Co., Ltd. | Systems, methods, and devices for accelerators with virtualization and tiered memory |
KR20220064230A (ko) * | 2020-11-11 | 2022-05-18 | 삼성전자주식회사 | 다중 프로토콜에 기초하여 메모리에 액세스하기 위한 시스템, 장치 및 방법 |
US20220358042A1 (en) * | 2021-05-07 | 2022-11-10 | Samsung Electronics Co., Ltd. | Coherent memory system |
CN115687221A (zh) * | 2021-07-22 | 2023-02-03 | 智原微电子(苏州)有限公司 | 高速周边组件互连的事务层电路及其操作方法 |
US20220334995A1 (en) * | 2021-12-30 | 2022-10-20 | Debendra Das Sharma | Parameter exchange for a die-to-die interconnect |
US20230236742A1 (en) * | 2022-01-22 | 2023-07-27 | Micron Technology, Inc. | NONVOLATILE MEMORY EXPRESS (NVMe) OVER COMPUTE EXPRESS LINK (CXL) |
US11983133B2 (en) * | 2022-08-22 | 2024-05-14 | Xilinx, Inc. | Adaptive integrated programmable data processing unit |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6493776B1 (en) | 1999-08-12 | 2002-12-10 | Mips Technologies, Inc. | Scalable on-chip system bus |
US7386688B2 (en) * | 2004-07-29 | 2008-06-10 | Hewlett-Packard Development Company, L.P. | Communication among partitioned devices |
KR101925694B1 (ko) | 2013-12-26 | 2018-12-05 | 인텔 코포레이션 | 멀티칩 패키지 링크 |
US9720838B2 (en) | 2015-03-27 | 2017-08-01 | Intel Corporation | Shared buffered memory routing |
WO2017052575A1 (en) | 2015-09-25 | 2017-03-30 | Intel Corporation | Extending multichip package link off package |
DE112015006961T5 (de) | 2015-09-26 | 2018-06-14 | Intel Corporation | Verbindungsfehlerdetektion in mehrfachchipgehäusen |
US11698879B2 (en) | 2019-12-06 | 2023-07-11 | Intel Corporation | Flexible on-die fabric interface |
-
2020
- 2020-06-27 US US16/914,339 patent/US11762802B2/en active Active
- 2020-08-25 EP EP20192552.6A patent/EP3832472B1/en active Active
- 2020-08-25 EP EP23162498.2A patent/EP4220421A1/en active Pending
- 2020-09-24 JP JP2020159410A patent/JP2021090188A/ja active Pending
- 2020-09-24 CN CN202011013299.6A patent/CN112925736A/zh active Pending
- 2020-09-24 BR BR102020019366-0A patent/BR102020019366A2/pt unknown
Also Published As
Publication number | Publication date |
---|---|
US11762802B2 (en) | 2023-09-19 |
EP3832472A1 (en) | 2021-06-09 |
EP3832472B1 (en) | 2023-03-22 |
CN112925736A (zh) | 2021-06-08 |
US20200327088A1 (en) | 2020-10-15 |
EP4220421A1 (en) | 2023-08-02 |
BR102020019366A2 (pt) | 2021-06-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11657015B2 (en) | Multiple uplink port devices | |
JP7339223B2 (ja) | フレキシブルなオンダイファブリックインターフェイス | |
CN105793829B (zh) | 用于集成组件互连的装置、方法和系统 | |
JP6147840B2 (ja) | ルートポート及びRPIE(RootPortIntegratedEndpoint)のレジューム時間を向上させるための方法、装置及びシステム | |
JP2021090188A (ja) | ストリーミングファブリックインタフェース | |
CN105793830B (zh) | 一种在节点之间共享存储器和i/o服务的装置、方法、系统 | |
US20190005176A1 (en) | Systems and methods for accessing storage-as-memory | |
CN108604209B (zh) | 扁平化端口桥 | |
CN118051460A (zh) | 用于高速互连中低延迟的双模phy | |
CN116472523A (zh) | 器件互连中的源排序 | |
CN111797040A (zh) | 多个协议层封装互连的虚拟链路状态 | |
US10817454B2 (en) | Dynamic lane access switching between PCIe root spaces | |
CN113868173B (en) | Flattened port bridge |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20230612 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20230612 |