IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ザイリンクス インコーポレイテッドの特許一覧

特許7592066プログラマブル集積回路を使用した動的に再構成可能なネットワーク
<>
  • 特許-プログラマブル集積回路を使用した動的に再構成可能なネットワーク 図1
  • 特許-プログラマブル集積回路を使用した動的に再構成可能なネットワーク 図2A
  • 特許-プログラマブル集積回路を使用した動的に再構成可能なネットワーク 図2B
  • 特許-プログラマブル集積回路を使用した動的に再構成可能なネットワーク 図3
  • 特許-プログラマブル集積回路を使用した動的に再構成可能なネットワーク 図4
  • 特許-プログラマブル集積回路を使用した動的に再構成可能なネットワーク 図5
  • 特許-プログラマブル集積回路を使用した動的に再構成可能なネットワーク 図6
  • 特許-プログラマブル集積回路を使用した動的に再構成可能なネットワーク 図7
  • 特許-プログラマブル集積回路を使用した動的に再構成可能なネットワーク 図8
  • 特許-プログラマブル集積回路を使用した動的に再構成可能なネットワーク 図9
  • 特許-プログラマブル集積回路を使用した動的に再構成可能なネットワーク 図10
  • 特許-プログラマブル集積回路を使用した動的に再構成可能なネットワーク 図11
  • 特許-プログラマブル集積回路を使用した動的に再構成可能なネットワーク 図12
  • 特許-プログラマブル集積回路を使用した動的に再構成可能なネットワーク 図13
  • 特許-プログラマブル集積回路を使用した動的に再構成可能なネットワーク 図14
  • 特許-プログラマブル集積回路を使用した動的に再構成可能なネットワーク 図15
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-11-21
(45)【発行日】2024-11-29
(54)【発明の名称】プログラマブル集積回路を使用した動的に再構成可能なネットワーク
(51)【国際特許分類】
   H04L 49/10 20220101AFI20241122BHJP
【FI】
H04L49/10
【請求項の数】 14
(21)【出願番号】P 2022507696
(86)(22)【出願日】2020-08-10
(65)【公表番号】
(43)【公表日】2022-10-17
(86)【国際出願番号】 US2020045647
(87)【国際公開番号】W WO2021030282
(87)【国際公開日】2021-02-18
【審査請求日】2023-07-24
(31)【優先権主張番号】16/537,605
(32)【優先日】2019-08-11
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591025439
【氏名又は名称】ザイリンクス インコーポレイテッド
【氏名又は名称原語表記】XILINX INCORPORATED
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】スヤマゴンドル,チャンドラセカール・エス
(72)【発明者】
【氏名】スンカバッリ,ラビ
(72)【発明者】
【氏名】クーラグンダ,ラビ・エヌ
(72)【発明者】
【氏名】コッチェル,エレリー
【審査官】長谷川 未貴
(56)【参考文献】
【文献】特開2017-069777(JP,A)
【文献】米国特許出願公開第2019/0096813(US,A1)
【文献】米国特許第09257987(US,B1)
【文献】特開2010-074461(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
H04L 12/00-101/00
(57)【特許請求の範囲】
【請求項1】
集積回路であって、
プログラマブル回路の静的領域に少なくとも部分的に実装されたプラットフォームであって、ホストインタフェースおよびネットワークインタフェースに結合されたネットワークインタフェースカードコントローラを含むプラットフォームと、
前記プラットフォームと通信するユーザ指定回路を実装するように構成されたプログラマブル回路の動的領域であって、前記ユーザ指定回路は1つまたは複数のパケット処理機能を実装する、プログラマブル回路の動的領域と、を備え、
前記ネットワークインタフェースカードコントローラは、前記動的領域に接続された複数の通信インタフェースを含み、
前記プラットフォームは、前記ホストインタフェースを使用してホストデータ処理システムとの第1の通信リンクと、前記ネットワークインタフェースを使用してネットワークとの第2の通信リンクとを確立し、維持するように構成され、
前記プラットフォームは、プログラマブル回路の前記動的領域の少なくとも一部がその中に異なるユーザ指定回路を実装するように動的に再構成されている間、前記ネットワークと前記ホストデータ処理システムとの間でデータを転送し続けるように構成され、
前記ネットワークインタフェースは、前記ネットワークインタフェースカードコントローラのコア回路と前記ネットワークインタフェースとの間の前記静的領域に位置する調停回路に結合され、
前記複数の通信インタフェースのうちの第1の通信インタフェースは、前記動的領域内の前記ユーザ指定回路を前記調停回路に接続する、集積回路。
【請求項2】
前記ネットワークインタフェースはイーサネットインタフェースを含む、請求項1に記載の集積回路。
【請求項3】
前記調停回路は、前記ネットワークインタフェースから受信したデータを前記ネットワークインタフェースに戻して前記ネットワークにルーティングするように構成されている、請求項に記載の集積回路。
【請求項4】
前記調停回路は、前記ユーザ指定回路による処理の後に前記データを前記ネットワークインタフェースにルーティングして戻す、請求項に記載の集積回路。
【請求項5】
前記調停回路は、前記ネットワークインタフェースカードコントローラから受信したデータを前記ネットワークインタフェースカードコントローラにルーティングして戻すように構成されている、請求項に記載の集積回路。
【請求項6】
前記調停回路は、前記ユーザ指定回路による処理の後に前記データを前記ネットワークインタフェースカードコントローラにルーティングして戻す、請求項に記載の集積回路。
【請求項7】
前記複数の通信インタフェースは、前記ホストデータ処理システムによって選択的に有効にされる、請求項1に記載の集積回路。
【請求項8】
前記ネットワークインタフェースカードコントローラは複数の段を含み、前記複数の通信インタフェースの各通信インタフェースは、前記複数の段のうちの異なる段に接続する、請求項1に記載の集積回路。
【請求項9】
前記動的領域は複数の部分再構成領域を含み、各通信インタフェースは前記複数の部分再構成領域のうちの異なる1つに接続し、
複数の部分再構成領域の各々は、その中に異なるユーザ指定回路を実装するように独立して再構成可能である、
請求項に記載の集積回路。
【請求項10】
前記ホストインタフェースは、ペリフェラルコンポーネントインターコネクト(PCIe)インタフェースである、請求項1に記載の集積回路。
【請求項11】
前記静的領域に実装された直接メモリアクセス回路であって、前記ネットワークインタフェースカードコントローラおよび前記ホストインタフェースに接続された直接メモリアクセス回路と、
前記静的領域に実装されたメモリコントローラであって、前記動的領域内の前記直接メモリアクセス回路および前記ユーザ指定回路に結合されている、メモリコントローラと、をさらに備える、
請求項1に記載の集積回路。
【請求項12】
集積回路であって、
プログラマブル回路の静的領域に少なくとも部分的に実装されたプラットフォームであって、ホストインタフェースおよびネットワークインタフェースに結合されたネットワークインタフェースカードコントローラを含むプラットフォームと、
前記プラットフォームと通信するユーザ指定回路を実装するように構成されたプログラマブル回路の動的領域であって、前記ユーザ指定回路は1つまたは複数のパケット処理機能を実装する、プログラマブル回路の動的領域と、
前記静的領域に実装された直接メモリアクセス回路であって、前記ネットワークインタフェースカードコントローラおよび前記ホストインタフェースに接続された直接メモリアクセス回路と、
前記静的領域に実装されたメモリコントローラであって、前記動的領域内の前記直接メモリアクセス回路および前記ユーザ指定回路に結合されている、メモリコントローラと、を備え、
前記ネットワークインタフェースカードコントローラは、前記動的領域に接続された複数の通信インタフェースを含み、
前記プラットフォームは、前記ホストインタフェースを使用してホストデータ処理システムとの第1の通信リンクと、前記ネットワークインタフェースを使用してネットワークとの第2の通信リンクとを確立し、維持するように構成され、
前記プラットフォームは、プログラマブル回路の前記動的領域の少なくとも一部がその中に異なるユーザ指定回路を実装するように動的に再構成されている間、前記ネットワークと前記ホストデータ処理システムとの間でデータを転送し続けるように構成され、
前記ネットワークインタフェースカードコントローラは、前記ネットワークインタフェースに接続されたネットワークインタフェースコアと、前記直接メモリアクセス回路に接続されたアクセラレータ調停回路とを含み、前記アクセラレータ調停回路は、ストリームインタフェースを介して前記動的領域の複数の部分再構成領域のうちの1つまたは複数に結合し、各部分再構成領域は異なる機能を実装する、集積回路。
【請求項13】
前記ストリームインタフェースは、前記複数の部分再構成領域のうちの第1の部分再構成領域に実装され、前記ネットワークインタフェースカードコントローラの前記アクセラレータ調停回路および前記複数の部分再構成領域のうちの1つまたは複数の他の部分再構成領域に実装された前記ユーザ指定回路に接続する、請求項12に記載の集積回路。
【請求項14】
前記複数の部分再構成領域のうちの1つまたは複数は、前記ホストデータ処理システムからオフロードされた計算ハードウェア加速タスクを実行するように構成された1つまたは複数のカーネル回路を含む、請求項12に記載の集積回路。
【発明の詳細な説明】
【技術分野】
【0001】
技術分野
本開示は、集積回路(IC)に関し、より詳細には、プログラマブルICを使用した動的に再構成可能なネットワークに関する。
【背景技術】
【0002】
背景
プログラマブル集積回路(IC)は、プログラマブル論理を含むタイプのデバイスを指す。プログラマブルICの一例は、フィールドプログラマブルゲートアレイ(FPGA)である。FPGAは、プログラマブル回路ブロックを含むことを特徴とする。プログラマブル回路ブロックの例には、入力/出力ブロック(IOB)、構成可能論理ブロック(CLB)、専用ランダムアクセスメモリブロック(BRAM)、デジタル信号処理ブロック(DSP)、プロセッサ、クロックマネージャ、および遅延ロックループ(DLL)が含まれるが、これらに限定されない。
【0003】
各プログラマブルタイルは、通常、プログラマブル相互接続回路とプログラマブル論理回路の両方を含む。プログラマブル相互接続回路は、通常、プログラマブル相互接続点(PIP)によって相互接続された様々な長さの多数の相互接続線を含む。プログラマブル論理回路は、例えば、関数発生器、レジスタ、算術論理などを含むことができるプログラマブル要素を使用してユーザ設計の論理を実装する。
【0004】
プログラマブル相互接続およびプログラマブル論理回路は、通常、プログラマブル要素がどのように構成されるかを定義する内部構成メモリセルに構成データのストリームをロードすることによってプログラムされる。構成データは、メモリ(例えば、外部PROM)から読み出したり、外部デバイスからFPGAに書き込んだりすることができる。次いで、個々のメモリセルの集合的な状態がFPGAの機能を決定する。
【0005】
現代のプログラマブルICは、1つまたは複数の他のサブシステムと組み合わせてプログラマブル論理を含むように進化している。例えば、いくつかのプログラマブルICは、プログラマブル論理とハードワイヤードプロセッサの両方を含むシステムオンチップまたは「SoC」に進化している。他の種類のプログラマブルICは、追加のおよび/または異なるサブシステムを含む。「プログラマブルIC」という語句は、プログラマブル論理の少なくとも一部を含み、部分的または完全にプログラム可能なデバイスを指す。
【0006】
一般に、プログラマブルICの機能は、その目的のためにデバイスに提供されるデータビットによって制御される。データビットは、揮発性メモリ(例えば、FPGAや、複合プログラマブル論理デバイス(CPLD)などのいくつかの他のプログラマブルICのようなスタティックメモリセル)、不揮発性メモリ(例えば、いくつかのCPLDにおけるようなフラッシュメモリ)、または任意の他のタイプのメモリセルに記憶することができる。
【発明の概要】
【課題を解決するための手段】
【0007】
概要
集積回路は、プログラマブル回路の静的領域に少なくとも部分的に実装されたプラットフォームを含むことができる。プラットフォームは、ホストインタフェースおよびネットワークインタフェースに結合されたネットワークインタフェースカードコントローラを含むことができる。ICは、プラットフォームと通信するユーザ指定回路を実装するように構成されたプログラマブル回路の動的領域を含むことができる。ユーザ指定回路は、1つまたは複数のパケット処理機能を実装することができる。ネットワークインタフェースカードコントローラは、動的領域に接続された複数の通信インタフェースを含むことができる。プラットフォームは、ホストインタフェースを使用してホストデータ処理システムとの第1の通信リンクと、ネットワークインタフェースを使用してネットワークとの第2の通信リンクを確立し、維持するように構成され得る。プラットフォームは、プログラマブル回路の動的領域の少なくとも一部がその中に異なるユーザ指定回路を実装するように動的に再構成されている間、ネットワークとホストデータ処理システムとの間でデータを転送し続けるように構成することができる。
【0008】
この概要セクションは、特定の概念を紹介するためにのみ提供され、特許請求される主題の重要なまたは本質的な特徴を特定するためのものではない。本発明の構成の他の特徴は、添付の図面および以下の詳細な説明から明らかになるであろう。
【0009】
図面の簡単な説明
本発明の構成は、例として添付の図面に示されている。しかしながら、図面は、示された特定の実施態様のみに本発明の構成を限定するものと解釈されるべきではない。以下の詳細な説明を検討し、図面を参照すると、様々な態様および利点が明らかになるであろう。
【図面の簡単な説明】
【0010】
図1】ホストデータ処理システムおよびハードウェアアクセラレーションカードの一例を示す。
図2A】プログラマブル集積回路(IC)に実装された例示的なプラットフォームを示す。
図2B】プログラマブルICに実装された別の例示的なプラットフォームを示す。
図3】プログラマブルICに実装された別の例示的なプラットフォームを示す。
図4】プログラマブルICに実装された別の例示的なプラットフォームを示す。
図5】プログラマブルICに実装された別の例示的なプラットフォームを示す。
図6】プログラマブルICに実装された別の例示的なプラットフォームを示す。
図7】プログラマブルICに実装された別の例示的なプラットフォームを示す。
図8】プログラマブルICに実装された別の例示的なプラットフォームを示す。
図9】プラットフォーム内のネットワークインタフェースカード(NIC)コントローラの例示的な実施態様を示す。
図10】プログラマブルICに実装された別の例示的なプラットフォームを示す。
図11】プログラマブルICに実装された別の例示的なプラットフォームを示す。
図12】プログラマブルICに実装された別の例示的なプラットフォームを示す。
図13】本明細書に記載のスマートNIC機能を実装するプログラマブルICを動作させる例示的な方法を示す。
図14】プログラマブルIC上にプラットフォームを実装する例示的な方法を示す。
図15】ICの例示的なアーキテクチャを示す。
【発明を実施するための形態】
【0011】
詳細な説明
本開示は、新規な特徴を定義する特許請求の範囲で完結するが、本開示内で説明される様々な特徴は、図面と併せて説明を考慮することによってよりよく理解されると考えられる。本明細書に記載の1つまたは複数のプロセス、1つまたは複数の機械、1つまたは複数の製造物、およびそれらの任意の変形は、例示の目的で提供される。本開示内に記載された特定の構造的および機能的詳細は、限定として解釈されるべきではなく、単に特許請求の範囲の基礎として、および実質的に任意の適切に詳細な構造に記載された特徴を様々に使用することを当業者に教示するための代表的な基礎として解釈されるべきである。さらに、本開示内で使用される用語および語句は、限定することを意図するものではなく、むしろ記載された特徴の理解可能な説明を提供することを意図している。
【0012】
本開示は、集積回路(IC)に関し、より詳細には、プログラマブルICを使用した動的に再構成可能なネットワークに関する。本明細書に記載の本発明の構成によれば、プログラマブルICを使用して、動的に再構成可能なネットワーク接続型加速機能を実装および展開する。記載された機能は、単一のデバイス内で提供されてもよい。例えば、本明細書で説明するように、プログラマブルICに実装されたプラットフォームは、単一のプログラマブルIC内で計算、記憶、およびネットワーキング加速機能を提供することができる。プラットフォームは、1つまたは複数のネットワーク接続型加速機能を実行するためのユーザ指定回路の実装および展開をサポートする。これらのユーザ指定回路は、プログラマブルICのプラットフォームによって処理されるネットワークトラフィックに影響を与えることなく、オンザフライでプラットフォームに動的に挿入および/またはプラットフォームから除去することができる。したがって、プラットフォームは、プログラマブルICの動作中に経時的にユーザ指定回路を包含、除去、および/または交換することによって機能的に拡張することができる。
【0013】
ネットワーク接続型加速は、通信バスを介してサーバ(例えば、ホストシステム)などのデータ処理システムに差し込まれたネットワークインタフェースカード(NIC)上で通常実行される処理を指す。NICは、特定用途向け集積回路(ASIC)に接続されたフィールドプログラマブルゲートアレイ(FPGA)を含むことができる。ASICは、通常、ネットワークポートを介してデータを受信して基本的なパケット処理機能を実行し、FPGAは、データに対して「スマートNIC」機能と呼ばれる他の拡張ネットワーク加速機能を実行するために使用される。次いで、ASICは、処理されたデータをホストシステムに配信することができる。
【0014】
本開示内に記載された本発明の構成によれば、単一のデバイス、例えばFPGAなどの単一のプログラマブルICを使用して、ASIC機能と拡張またはスマートNIC機能との両方を提供することができる。本明細書に記載のプラットフォームは、プログラマブルICに実装されると、記載のデータ処理、およびプログラマブルICが基本的なNIC機能を実行し続ける能力を妨げることなく、経時的に異なるカスタムまたはユーザ指定回路を実装する能力をサポートする。したがって、プログラマブルICの一部は、計算、記憶、および/またはネットワーキング加速機能に関連するパケット処理動作を実行するように動的に再構成(例えば、部分的に再構成)することができ、プログラマブルIC上の他の領域は、データまたはネットワークへの通信リンクを失わないように中断されずに動作し続けることができる。プログラマブルICはまた、ホストシステムへの通信リンクを維持することができる。このように、プログラマブルICは、ネットワークデータを処理するために実行時に1つまたは複数の異なるユーザ指定回路が動的に挿入、除去、および/または置換される間、データを失うことなくネットワークとホストシステムとの間でデータを渡し続けることができる。
【0015】
本発明の構成は、NICコントローラによって提供される基本的なNIC機能に追加の機能を追加することができるプラットフォームを提供する。追加の機能は、ネットワーキング、計算、および/またはストレージ加速に関連し得る。開発者は、プラットフォームによって提供されるNICインフラストラクチャ全体を再作成する必要なく、特定の機能を作成することができる。プラットフォームの使用は様々な利点を提供する。これらの利点は、開発される異なるユーザ指定回路ごとにプラットフォームを再実装する必要がないため、プログラマブルICでの実装のためにハードウェアを開発するときのコンパイル時間の短縮を含むことができる。これらの利点はまた、異なるユーザ指定回路が追加、除去、および/または変更されるたびにプラットフォームをプログラマブルICに再実装する必要がないため、実行時にユーザ指定回路を実装するために構成データをプログラマブルICにダウンロードする時間の短縮を含むことができる。
【0016】
本発明の構成のさらなる態様および/または利点は、図面を参照して以下により詳細に説明される。説明を簡単かつ明確にするために、図に示す要素は必ずしも縮尺通りに描かれていない。例えば、いくつかの要素の寸法は、明確にするために他の要素に対して誇張されている場合がある。さらに、適切であると考えられる場合、対応する、類似の、または同様の特徴を示すために、図面間で参照番号が繰り返される。
【0017】
図1は、ホストデータ処理システム(ホストシステム)100およびハードウェアアクセラレーションカード(カード)104の一例を示す。ホストシステム100の構成要素は、限定はしないが、1つまたは複数のプロセッサ106(例えば、中央処理装置)、メモリ108、およびメモリ108を含む様々なシステム構成要素をプロセッサ106に結合するバス110を含むことができる。プロセッサ106は、プログラムコードを実行することができる様々なプロセッサのいずれかを含むことができる。例示的なプロセッサタイプは、x86タイプのアーキテクチャ(IA-32、IA-64など)を有するプロセッサ、パワーアーキテクチャ、ARMプロセッサなどを含むが、これらに限定されない。
【0018】
バス110は、メモリバスまたはメモリコントローラ、周辺バス、加速グラフィックスポート、および様々な利用可能なバスアーキテクチャのいずれかを使用するプロセッサまたはローカルバスを含む、いくつかのタイプの通信バス構造のいずれかのうちの1つまたは複数を表す。限定ではなく例として、そのようなアーキテクチャは、業界標準アーキテクチャ(ISA)バス、マイクロチャネルアーキテクチャ(MCA)バス、拡張ISA(EISA)バス、ビデオエレクトロニクス標準化協会(VESA)ローカルバス、ペリフェラルコンポーネントインターコネクト(PCI)バス、およびPCI Express(PCIe)バスを含む。
【0019】
ホストシステム100は、典型的には、様々なコンピュータ可読媒体を含む。そのような媒体は、ホストシステム100によってアクセス可能な任意の利用可能な媒体であってもよく、揮発性媒体、不揮発性媒体、リムーバブルメディア、および/または非リムーバブルメディアの任意の組み合わせを含んでもよい。
【0020】
メモリ108は、ランダムアクセスメモリ(RAM)112および/またはキャッシュメモリ114などの揮発性メモリの形態のコンピュータ可読媒体を含むことができる。ホストシステム100はまた、他のリムーバブル/非リムーバブル、揮発性/不揮発性コンピュータシステム記憶媒体を含んでもよい。一例として、記憶システム116は、非リムーバルな不揮発性磁気媒体(図示せず、典型的には「ハードドライブ」と呼ばれる)からの読み出しおよびそれへの書き込みのために提供されてもよい。図示されていないが、リムーバル、非リムーバルな不揮発性磁気ディスク(例えば、「フロッピー(登録商標)ディスク」)から読み出しおよびそれへ書き込むための磁気ディスクドライブ、およびCD-ROM、DVD-ROM、または他の光学媒体などのリムーバルな不揮発性光ディスクから読み出しおよびそれへ書き込むための光ディスクドライブを提供することができる。そのような場合、各々は、1つまたは複数のデータメディアインタフェースによってバス110に接続することができる。以下にさらに示され説明されるように、メモリ108は、本開示内で説明される機能および/または動作を実行するように構成されたプログラムモジュール(例えば、プログラムコード)のセット(例えば、少なくとも1つ)を有する少なくとも1つのコンピュータプログラム製品を含むことができる。
【0021】
例えば、限定はしないが、オペレーティングシステム、1つまたは複数のアプリケーションプログラム、他のプログラムモジュール、および/またはプログラムデータを含むことができるプログラムモジュール120のセット(少なくとも1つ)を有するプログラム/ユーティリティ118は、メモリ108に記憶される。プログラムモジュール120は、一般に、少なくともホストシステム100によって実行される動作に関して本明細書で説明される機能および/または方法論を実行する。例えば、プログラムモジュール120は、ハードウェアアクセラレーションカード104および/またはプログラマブルIC132と通信するための、1つまたは複数のアプリケーションおよびドライバまたはデーモンを含むことができる。
【0022】
プログラム/ユーティリティ118は、プロセッサ106によって実行可能である。プログラム/ユーティリティ118ならびにプロセッサ106によって使用、生成、および/または操作される任意のデータ項目は、プロセッサ106によって使用されると機能性を付与する機能データ構造である。本開示内で定義されるように、「データ構造」は、物理メモリ内のデータモデルのデータ構成の物理的な実装である。したがって、データ構造は、メモリ内の特定の電気的または磁気的構造要素から形成される。データ構造は、プロセッサを使用して実行されるアプリケーションプログラムによって使用されるように、メモリに記憶されたデータに物理的編成を課す。
【0023】
ホストシステム100は、バス110に通信可能にリンクされた1つまたは複数の入力/出力(I/O)インタフェース128を含むことができる。I/Oインタフェース128は、ホストシステム100に、外部デバイスと通信すること、ユーザがホストシステム100と対話することを可能にする外部デバイスに結合すること、ホストシステム100が他のコンピューティングデバイスと通信することを可能にする外部デバイスに結合することなどを可能にする。例えば、ホストシステム100は、I/Oインタフェース128を介してハードウェアアクセラレーションカード104に通信可能にリンクされてもよい。ホストシステム100は、I/Oインタフェース128を介してキーボードおよび/またはディスプレイ(図示せず)などの他の外部装置に結合されてもよい。I/Oインタフェース128の例は、ネットワークカード、モデム、ネットワークアダプタ、ハードウェアコントローラなどを含むことができるが、これらに限定されない。
【0024】
例示的な実装形態では、ホストシステム100がハードウェアアクセラレーションカード104と通信するためのI/Oインタフェース128は、PCIeアダプタである。ハードウェアアクセラレーションカード104は、ホストシステム100に結合する回路基板として実装されてもよい。ハードウェアアクセラレーションカード104は、例えば、カードスロット、例えば、ホストシステム100の利用可能なバスおよび/またはPCIeスロットに挿入されてもよい。
【0025】
ハードウェアアクセラレーションカード104は、プログラマブルIC132を含む。ハードウェアアクセラレーションカード104はまた、プログラマブルIC132に結合された揮発性メモリ134と、同じくプログラマブルIC132に結合された不揮発性メモリ136とを含む。揮発性メモリ134は、RAMとして実装されてもよく、プログラマブルIC132の「ローカルメモリ」とみなされ、一方、ホストシステム100内にあるメモリ108は、プログラマブルIC132に対してローカルとみなされない。メモリ108は、例えば、ホストシステム100に対してローカルである。いくつかの実施態様では、揮発性メモリ134は、複数ギガバイトのRAM、例えば64GBのRAMを含むことができる。不揮発性メモリ136は、フラッシュメモリとして実装されてもよい。不揮発性メモリ136は、プログラマブルIC132に対してローカルであるとみなされる。
【0026】
図1の例では、プログラマブルIC132はネットワーク138に接続されている。一例では、ネットワーク138はイーサネット(登録商標)タイプのネットワークである。ネットワーク138は、様々な異なる速度のいずれかで動作することができる。例えば、ネットワーク138は、10G、25G、50G、100G、200G、400G、または他の速度ネットワークであってもよい。特定の実施態様では、ネットワーク138は、5Gネットワークであり得るか、それを含み得るか、またはそれに結合し得る。プログラマブルIC132は、プログラマブルIC132をネットワーク138に接続する、例えば通信可能にリンクするために使用されるイーサネットインタフェース(図示せず)を含む。例えば、プログラマブルIC132は、ネットワーク138を介してイーサネットスイッチあるいは1つまたは複数の他のネットワーク接続デバイスに接続することができる。例示の目的で、「ネットワーク」という用語は、本明細書ではネットワーク138、例えばイーサネットネットワークを指す。
【0027】
図1は、本明細書に記載の例の使用または機能の範囲に関するいかなる限定も示唆することを意図していない。ホストシステム100は、ハードウェアアクセラレーションカード104および/またはプログラマブルIC132に関連して本開示内で説明される様々な動作を実行することができるコンピュータハードウェア(例えば、システム)の例である。
【0028】
ホストシステム100は、ハードウェアアクセラレーションカードと共に使用することができるコンピュータの一実施例にすぎない。ホストシステム100は、コンピュータまたはサーバなどのコンピューティングデバイスの形態で示されている。ホストシステム100は、スタンドアロンデバイスとして、ベアメタルサーバとして、クラスタ内で、または分散クラウドコンピューティング環境内で実装することができる。分散クラウドコンピューティング環境では、タスクは、通信ネットワークを介してリンクされたリモート処理デバイスによって実行される。分散クラウドコンピューティング環境では、プログラムモジュールは、メモリ記憶装置を含むローカルおよびリモートコンピュータシステム記憶媒体の両方に配置することができる。
【0029】
本明細書で使用される場合、「クラウドコンピューティング」という用語は、ネットワーク、サーバ、ストレージ、アプリケーション、IC(例えば、プログラマブルIC)および/またはサービスなどの構成可能なコンピューティングリソースの共有プールへの便利なオンデマンドネットワークアクセスを容易にするコンピューティングモデルを指す。これらのコンピューティングリソースは、最小限の管理労力またはサービスプロバイダ相互作用で迅速に提供および解放することができる。クラウドコンピューティングは、可用性を促進し、オンデマンドのセルフサービス、広範なネットワークアクセス、リソースの共用、迅速な融通性、および測定可能なサービスによって特徴付けられ得る。
【0030】
いくつかのコンピューティング環境、例えば、ホストシステム100または他の適切なデータ処理システムを使用するクラウドコンピューティング環境および/またはエッジコンピューティング環境は、一般に、ユーザ機能がユーザ指定またはカスタム回路設計としてハードウェア加速され、ホストコンピュータシステムの制御下で動作するプログラマブルIC内に実装される、FPGA-as-a-Service(FaaS)モデルをサポートする。クラウドコンピューティングモデルの他の例は、米国国立標準技術研究所(NIST)、より具体的には、NISTの情報技術研究所によって説明されている。
【0031】
ホストシステム100は、他の多数の汎用または専用コンピューティングシステム環境または構成で動作可能である。ホストシステム100と共に使用するのに適し得るコンピューティングシステム、環境、および/または構成の例には、パーソナルコンピュータシステム、サーバコンピュータシステム、シンクライアント、シッククライアント、ハンドヘルドデバイスまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラマブル家電、ネットワークPC、ミニコンピュータシステム、メインフレームコンピュータシステム、および上記のシステムまたはデバイスのいずれかを含む分散クラウドコンピューティング環境などが含まれるが、これらに限定されない。
【0032】
図2Aは、図1のプログラマブルIC132に実装された例示的なプラットフォーム218を示す。プログラマブルIC132は、プログラマブル回路の静的領域202およびプログラマブル回路の動的領域204を含む。静的領域202および動的領域204の両方はプログラマブル回路を使用して実装されるが、一方または両方の領域は、残りの図に関連してより詳細に本明細書で説明するように、1つまたは複数のハードワイヤード回路ブロックを含むことができることを理解されたい。
【0033】
静的領域202は、回路設計で構成されると経時的に変化しない、プログラマブルIC132のプログラマブル回路の領域を表す。静的領域202は再構成され得るが、そのような動作は、プログラマブルIC132をオフライン(例えば、ホストシステム100および/またはネットワーク138からオフライン)にする。例示の目的のために、静的領域202は網掛けで示されており、ネットワーキング動作を提供するプラットフォーム218を実装するために使用される。プラットフォーム218は、例えば構成ビットストリームとしてプログラマブルIC132にロードされる回路設計によって指定される。図2Aの例では、プラットフォーム218は、網掛け領域に含まれる様々な回路ブロックを含む。プラットフォーム218は、プログラマブルIC132に実装されると、動作期間中、機能的ネットワーキング、ホストシステムインタフェース、および任意選択的にメモリインタフェースを提供する。プラットフォーム218は、基本的なネットワークインタフェースコントローラ(NIC)機能を有する通信バスを介して、イーサネットインタフェースからホストシステム100(例えば、プロセッサ106)にネットワークデータを渡すことができる。
【0034】
動的領域204は、異なるユーザ指定(例えば、カスタム)回路を実装するために経時的に動的に再構成され得るプログラマブルIC132のプログラマブル回路の領域を表す。動的領域204に実装されたユーザ指定回路は、静的領域202内のプラットフォーム218に実装された回路ブロックに接続するように設計されている。一般に、動的領域204に実装されたユーザ指定回路は、プラットフォーム218の機能性および/または動作性を拡張するために使用される。
【0035】
静的領域202内には、プラットフォーム218を形成するために回路設計がロードされている。例えば、完全なまたは部分的な構成ビットストリーム指定プラットフォーム218が、プログラマブルIC132にロードされる。図2Aの例では、プラットフォーム218は、イーサネットインタフェース206と、NICコントローラ208と、直接メモリアクセス(DMA)回路210と、ペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)コントローラ212とを含む。これにより、イーサネットインタフェース206、NICコントローラ208、DMA回路210、およびPCIeコントローラ212は、静的領域202に実装される。イーサネットインタフェース206は、NICコントローラ208に接続されている。NICコントローラ208は、DMA回路210に接続する。DMA回路210は、PCIeコントローラ212に接続する。イーサネットインタフェース206は、ネットワーク138(例えば、その中のノードまたはスイッチ)への通信リンクを確立することができる。PCIeコントローラ212は、ホストシステム100との通信リンクを確立することができる。
【0036】
他の例では、プラットフォーム218は、ネットワーク138に接続するために他のタイプのインタフェースを使用することができる。さらに、プラットフォーム218は、ホストシステム100に接続するために他のタイプのインタフェースを使用することができる。本開示内で説明される特定の例は、限定ではなく例示を目的として提供される。他の代替タイプのインタフェースが使用されてもよい。
【0037】
図2Aの例では、イーサネットインタフェース206、NICコントローラ208、DMA回路210、およびPCIeコントローラ212の各々は、プログラマブル回路を使用して実装される。1つまたは複数の他の例示的な実施態様では、イーサネットインタフェース206、DMA回路210、および/またはPCIeコントローラ212のうちの1つまたは複数あるいはすべて(例えば、任意の組み合わせ)は、ハードワイヤード回路ブロックとして実装される。
【0038】
NICコントローラ208は、動的領域204に接続する1つまたは複数の通信インタフェース214で実装される。特定の実施態様では、通信インタフェース214および/またはNICコントローラ208と動的領域204との間の他の通信インタフェースは、ストリームインタフェースとして実装されてもよい。ストリームインタフェースの一例は、AMBA(登録商標)4 AXI4-Streamプロトコル(例えば、「AXI」)に準拠したものである。NICコントローラ208を動的領域204に接続するために他のタイプのストリームインタフェースを使用することができ、AXIは非限定的な例としてのみ提供されることを理解されたい。ストリームインタフェースの別の例は、ネットワークオンチップであってもよい。
【0039】
一態様において、通信インタフェース214は、ソフトウェア制御可能である。例えば、ユーザ指定回路を実装するために使用される構成ビットストリームは、関連するメタデータと共に記憶されてもよい。メタデータは、通信インタフェース214の状態、例えば、オンかオフかを指定することができる。メタデータは、そのようなインタフェースが複数ある場合、どの通信インタフェース214が使用可能であり、使用すべきかを指定することができる。これに関して、メタデータは、プラットフォーム218と動的領域204および/またはユーザ指定回路216との間の接続性を記述する。
【0040】
一例として、通信インタフェース214は、制御インタフェースから制御信号(例えば、選択信号)を提供され得る1つまたは複数のマルチプレクサを使用して実装することができる。選択信号は、メタデータによって指定されてもよい。ユーザ指定回路216を実装するために構成ビットストリームがプログラマブルIC132にロードされると、ホストシステム100は、構成ビットストリームに対応するメタデータを取得し、メタデータをプログラマブルIC132に書き込むことができる。メタデータは、ユーザ指定回路216と通信するために必要に応じて通信インタフェース214をアクティブ化および/または非アクティブ化するために通信インタフェース214のマルチプレクサへの適切な選択信号を生成する制御インタフェースに提供されてもよい。
【0041】
通信インタフェース214を介して、データはプラットフォーム218から動的領域20に移動し、動的領域20内のユーザ指定回路216に入り、それによって処理され、プラットフォーム218に戻ることができる。NICコントローラ208は、説明したようにソフトウェア制御可能であり得る複数の通信インタフェースを有することができる。例えば、入力に関して、NICコントローラ208は、イーサネットインタフェース206を介してネットワーク138からデータを受信することができる。NICコントローラ208は、通信インタフェース214を介してユーザ指定回路216にデータを提供する前に、データに対して動作してもしなくてもよい。ユーザ指定回路216は、受信されたデータに対して動作し、処理されたデータを通信インタフェース214を介してNICコントローラ208に提供することができる。ユーザ指定回路216は、例えば、1つまたは複数のパケット処理、つまりスマートNIC機能を実行することができる。NICコントローラ208は、データに対してさらなる処理を実行してもしなくてもよく、DMA回路210およびPCIeコントローラ212を介してホストシステム100にデータを提供する。別の例では、NICコントローラ208は、NICコントローラ208および/またはユーザ指定回路216によって実行された処理後に、またはそのような処理なしで、イーサネットインタフェース206から受信したデータをイーサネットインタフェース206に戻してネットワーク138にルーティングするように構成されてもよい。
【0042】
出力に関して、NICコントローラ208は、PCIeコントローラ212およびDMA回路210を介してホストシステム100からデータを受信することができる。NICコントローラ208は、通信インタフェース214を介してユーザ指定回路216にデータを提供する前に、データに対して動作してもしなくてもよい。ユーザ指定回路216は、受信されたデータに対して動作し、処理されたデータを通信インタフェース214を介してNICコントローラ208に提供することができる。NICコントローラ208は、イーサネットインタフェース206を介してネットワーク138にデータを提供する前に、データに対してさらなる処理を実行してもしなくてもよい。別の例では、NICコントローラ208は、NICコントローラ208および/またはユーザ指定回路216によって実行される処理の後に、またはそのような処理なしで、ホストシステム100から受信したデータをホストシステム100に戻すようルーティングするように構成されてもよい。
【0043】
動的領域204は、1つまたは複数の部分的な再構成(PR)領域を含むように実装される。プログラマブルIC132のPR領域は、経時的に動的に1つまたは複数の異なるユーザ指定(例えば、カスタム)回路設計を実装するために確保されるプログラマブル回路の領域を指す。動的領域204は、複数のPR領域を含んでもよい。一般に、動的領域204に実装される異なるPR領域の各々は、独立して再構成可能である。図2Aの例では、動的領域204は単一のPR領域を実装する。
【0044】
図2Aの例では、静的領域202は、動的領域204の外部にあるプログラマブルIC132の一部を指す。静的領域202に実装されるプラットフォーム218は変化しない、例えば静的なままであるが、動的領域204内の回路は、経時的に他の異なるユーザ指定回路設計を実装するように変更することができる。図2Aの例では、ユーザ指定回路設計が動的領域204に実装され、ユーザ指定回路216として示されている。動的領域204は、静的領域202内のプラットフォーム218が中断することなく動作し続けている間に、異なるユーザ指定回路(例えば、ユーザ指定回路216以外の回路)を実装するために経時的に再構成することができる。
【0045】
ユーザ指定回路216は、例えば、様々なネットワーク加速機能のいずれかを実行することができる。これに関して、プラットフォーム218および例えばNICコントローラ208の機能は、それ自体は静的であるが、ユーザ指定回路216の追加によって増強され得る。一態様では、NICコントローラ208がメタデータを渡すことができるので、ユーザ指定回路216は、例えばNICコントローラ208によって既に実行された動作を繰り返す必要がないため、ユーザ指定回路216は、様々な増分ネットワーク加速機能のいずれかを実行することができる。
【0046】
ユーザ指定回路216は、プログラマブルIC132の動作中にネットワーク138とホストシステム100との間の静的領域202内のプラットフォーム218を通って流れるデータ(例えば、ネットワーク138からのデータ(「ネットワーク」または「入力」データと呼ばれる)および/またはホストシステム100からのデータ(「ホスト」または「出力」データと呼ばれる))に従って、そのようなデータの中断または損失なしに、動的に挿入、除去、および/または置き換えることができる。別の態様では、ホストシステム100で実行される仮想マシンの場合、「出力」および「入力」という用語は、仮想マシンに対して使用され得る。例えば、ホストシステム100で実行されている仮想マシンの出力データは、ネットワーク138に、またはホストシステム100でも実行されている別の仮想マシンの入力に向けられてもよい。いずれの場合でも、プラットフォーム218は、動的領域204が動的に再構成されている間、イーサネットインタフェース206を介したネットワーク138との通信リンク、およびPCIeコントローラ212を介したホストシステム100との通信リンクを維持することができる。したがって、動的領域204が再構成されている間、プログラマブルIC132は、ホストシステム100、およびネットワーク138を介してプログラマブルIC132に接続する他のデバイスに対して「オンライン」または動作可能であるように見える。
【0047】
図2の例では、NICコントローラ208は1つの通信インタフェース214を含むように示されているが、NICコントローラ208は複数の異なる通信インタフェースを含んでもよい。通信インタフェースは、NICコントローラ208に含まれる1つまたは複数の異なる段に含まれてもよい。これにより、NICコントローラ208は、その中の様々な異なる処理段階のいずれかでユーザ指定回路216とデータを交換することができる。
【0048】
図2Bは、図1のプログラマブルIC132に実装されたプラットフォーム218の別の例を示す。図2Bのプラットフォーム218は、図2Aの例と実質的に同様である。しかしながら、図2Bの例では、プラットフォーム218は静的領域202に部分的に実装される。例えば、PCIeコントローラ212は、静的領域202に実装される。イーサネットインタフェース206、NICコントローラ208、およびDMA回路210は、それぞれ異なるPR領域(例えば、それぞれPR領域220、222、224)に実装される。図2Bの例では、動的領域204は、PR領域220、222および224とは別個かつ独立している別のPR領域として実装されてもよい。
【0049】
図2Bの例は、プラットフォーム218の異なる構成要素が経時的に更新されることを可能にする。実際には、プラットフォーム218は構成可能である。静的領域202内の回路に対する更新は、通常、ユーザ回路の再コンパイルを必要とする。図2Bの実装は、静的領域202に実装されるプラットフォーム218の一部を最小化する。静的領域202に実装されるプラットフォーム218の量を最小化することによって、ユーザ指定回路を再コンパイルする必要がある可能性が低減される。例えば、DMA回路210、NICコントローラ208、およびイーサネットインタフェース206は、ユーザ指定回路216の再コンパイルを必要とせずに変更することができる(PR領域は、そのような構成要素の異なる実装で再構成することができる)。PCIeコントローラ212への変更は、ユーザ指定回路216の再コンパイルを必要とする。ユーザ回路(例えば、ユーザ指定回路216)を再コンパイルすることは、望ましくなく、Faas用途では特に望ましくない場合がある時間のかかる作業である。図2Bの例では、プラットフォーム218の大部分は、ユーザ指定回路の再コンパイルを必要とせずに経時的に更新され得る。これは、静的領域202内の回路を更新しなければならない可能性を低減し、したがって、ユーザ回路設計を再コンパイルする必要がある可能性を低減する。
【0050】
図2Bは、例示を目的として提供されている。他の例示的な実施態様は、プラットフォーム218を実装するために異なる数のPR領域を使用することができる。例えば、プラットフォーム218は、静的領域202にPCIeコントローラ212を実装し、単一のPR領域にイーサネットインタフェース206、NICコントローラ208、およびDMA回路210を実装することができる。別の例では、2つのPR領域が使用されてもよく、イーサネットインタフェース206、NICコントローラ208、およびDMA回路210のうちの任意の2つが第1のPR領域に実装され、残りの構成要素が第2のPR領域に実装される。残りの図に示されている様々な例示的なプラットフォーム218には具体的に示されていないが、プラットフォーム218は、図2Bに関連して説明したように提示されている例の各々において1つまたは複数のPR領域を使用して実装されてもよいことを理解されたい。
【0051】
図3は、プログラマブルIC132に実装されたプラットフォーム218の別の例を示す。図3の例では、イーサネットインタフェース206がより詳細に示されている。イーサネットインタフェース206は、媒体アクセス制御(MAC)304に接続された物理層(PHY)302を含む。PHY302は、ネットワーク138に接続する。MAC304はNICコントローラ208に接続する。例えば、MAC304は、NICコントローラ208に含まれるイーサネットインタフェース(図示せず)に接続することができる。
【0052】
図4は、プログラマブルIC132に実装されたプラットフォーム218の別の例を示す。図4の例では、1つまたは複数のメモリコントローラ402は、プラットフォーム218の一部として静的領域202に実装される。メモリコントローラ402は、揮発性メモリ(例えば、RAM)134に接続されている。メモリコントローラ402は、プログラマブル回路を使用して実装されてもよい。しかしながら、別の例では、メモリコントローラ402のうちの1つまたは複数は、ハードワイヤード回路ブロックとして実装されてもよい。
【0053】
メモリコントローラ402は、動的領域204に実装されたユーザ指定回路216に接続することができる。さらに、メモリコントローラ402は、DMA回路210に結合することができる。したがって、ユーザ指定回路216は、動作中に揮発性メモリ134にアクセスすることができる。さらに、ホストシステム100は、メモリコントローラ402を介して揮発性メモリ134を読み出すおよび/または書き込むことができる。これにより、ホストシステム100は、ユーザ指定回路216とデータを共有することができる。
【0054】
本開示内では、メモリコントローラと共に示されているかどうかにかかわらず、示されている様々な例示的なプラットフォームは、1つまたは複数のメモリコントローラを含んで実装されてもよい。メモリコントローラは、任意選択的に含まれてもよい。さらに、プラットフォーム218が1つまたは複数のPR領域を使用して実装される実施態様では、メモリコントローラは、それ自体のPR領域に実装されてもよく、またはプラットフォーム218の1つまたは複数の他の構成要素と共に別のPR領域に含まれてもよい。
【0055】
図5は、プログラマブルIC132に実装されたプラットフォーム218の別の例を示す。図5の例では、プラットフォーム218は、NICコントローラ208に実装されたソフトウェア定義ネットワーク(SDN)データプレーン502を含む。SDNデータプレーン502は、プラットフォーム218の一部としてデータプレーンを実装することによって、データと制御プレーンとを分離することができる。この例では、データプレーンソフトウェアは、ホストシステム100で実行されるソフトウェアにデータプレーンを実装するのではなくハードウェア加速され、NICコントローラ208内のSDNデータプレーン502として実装される。
【0056】
いくつかの例示的な実施態様では、SDNデータプレーン502は、ユーザ指定回路504(および/または通信インタフェース506を介してSDNデータプレーン502に接続されている動的領域204内の他のユーザ指定回路)を使用してカスタマイズすることができる。例えば、SDNデータプレーン502を動的領域204と接続するポートを用いて、ユーザ指定回路504は、カスタムGREヘッダをデータに追加する、および/またはカスタムパーサを実装するように構成され得る。カスタムパーサでは、例えば、メタデータが渡され、新しいパーサデータに関連付けられ得る。さらに、GREは、ユーザ指定回路504によって、ネットワークオーバーレイを用いて修正することができる。いずれの場合でも、1つまたは複数の通信インタフェース506の可用性により、SDNデータプレーン502を、動的領域204内のプログラマブル回路を使用してカスタマイズすることが可能になる。
【0057】
SDNデータプレーン502は、ネットワーク管理をより柔軟にするためのプログラムによるアクセスを可能にする。例えば、NICコントローラ208および/またはSDNデータプレーン502がルックアップインタフェース上で検索される大きなフローテーブルを利用する限りにおいて、カスタマイズされたフローテーブルは、動的領域204内のユーザ指定回路216および/または504として実装されてもよい。SDNデータプレーン502は、そうでなければデータプレーンソフトウェアを実行するためにホストシステム100に課されるであろう処理負荷を軽減する。
【0058】
図5の例では、SDNデータプレーン502は、通信インタフェース506を介して動的領域204に接続することができる。SDNデータプレーン502は、動的領域204に接続された複数の通信インタフェースを有することができる。他の例では、SDNデータプレーン502は、動的領域204への通信インタフェースを含まなくてもよい。メモリコントローラ402が示されているが、メモリコントローラ402は任意選択であり、省略されてもよい。メモリコントローラ402は、含まれる場合、ユーザ指定回路504および214による揮発性メモリ134の読み出しや書き込みを可能にする。さらに、メモリコントローラ402は、ホストシステム100による揮発性メモリ134の読み出しや書き込みを可能にする。
【0059】
例示の目的で、動的領域204は、追加のユーザ指定回路504を含む。一例では、ユーザ指定回路504は、通信インタフェース506を介してNICコントローラ208および/またはSDNデータプレーン502に接続する。ユーザ指定回路504は、NICコントローラ208がデータフロー迂回を実装することを可能にするカスタムフローテーブルを実装することができる。
【0060】
別の例では、ユーザ指定回路216は、ビデオデコーダおよびスケーリング回路を実装することができる。ユーザ指定回路504は、機械学習オブジェクト検出回路を実装することができる。この構成により、動的領域204は、リアルタイムの映像処理や機械学習を行うことができる。この例は、オブジェクト検出および/または分類が後に続くネットワーク接続リアルタイムビデオ復号が、プラットフォーム218を使用してどのように実施され得るかを示す。
【0061】
例えば、ビデオデコーダおよびスケーリング回路は、ネットワーク138を介して受信された複数の異なるビデオストリーム上で動作することができる。ビデオストリームは、ネットワーク138に通信可能にリンクされたセキュリティシステムおよび/またはカメラからのものであってもよい。ビデオデコーダおよびスケーリング回路は、受信したビデオストリームを復号することができる。ビデオデコーダおよびスケーリング回路は、異なるビデオストリームから1つまたは複数の個々のフレームを抽出し、抽出されたフレームを機械学習オブジェクト検出回路による使用のためにスケーリングすることができる。
【0062】
図5の例では、NICコントローラ208は、基本的なNIC機能を実行することができる。ビデオ復号およびスケーリング機能ならびにオブジェクト検出および/または画像分類機能のための機械学習推論は、動的領域204内のハードウェア加速カーネルとして実装される。動的領域204内のカーネルとして機能を実装することにより、カーネルはリアルタイムでビデオストリーム上で動作することができる。ビデオストリームがホストシステム100のネットワークスタックを通過することなく処理が実行され得るので(例えば、ユーザ指定回路504および216は、データがホストシステム100に到達する前にビデオに対して動作する)、リアルタイム動作はレイテンシを低減する。これにより、プログラマブルIC132による処理が加速する。さらに、プラットフォーム218は、フラグつきオブジェクトを有する画像(例えば、フレーム)をさらなる分析のために保存しながら、フラグつきオブジェクトのない画像を破棄することができるため、記憶要件を低減する。さらに、プロセッサ106のサイクルを他の動作に使用することができるため、ホストシステム100にかかる作業負荷が大幅に低減される。
【0063】
別の例では、図5のプラットフォーム218を使用して、暗号化されたデータトラフィックに対してインラインマルウェア検出を実行することができる。この例では、プラットフォーム218は、データフローから特定の情報を抽出することに基づいて動作することができる。情報は、データフローの持続時間、クライアントから送信されたパケットの数、サーバから送信されたパケットの数、クライアントから送信されたバイトの数、およびサーバから送信されたバイトの数を含むことができる。例えば、ユーザ指定回路216は、分類および特徴抽出回路を実装することができる。抽出された情報は、ユーザ指定回路504によって実装されるランダムフォレスト分類器を訓練するために、ユーザ指定回路216によって同様に抽出されたパケットヘッダの非暗号化部分からのメタデータと共に使用され得る。次いで、訓練された分類器を使用して、マルウェアを検出することができる。
【0064】
一態様では、分類器は、ネットワーク138からプログラマブルIC132に入るパケットに対してリアルタイムで実行することができる。ユーザ指定回路216は、特徴を抽出し、パケットをデータフローに分類することができる。ユーザ指定回路216は、決定された情報をユーザ指定回路504に供給することができる。ユーザ指定回路504は、対象のマルウェアについて訓練されたモデルをあらかじめロードすることができる。ユーザ指定回路504がマルウェアを検出したことに応答して、ユーザ指定回路504は、攻撃者から送信されたさらなるネットワークデータがホストシステム100に到達するのを防ぐために、SDNデータプレーン502内にフィルタを設定するためのメッセージを送信することができる。この例では、NICコントローラ208およびSDNデータプレーン502は、プラットフォーム218の一部として実行され、一方、マルウェア検出のための特徴抽出機能および分類は、動的領域204にロードされるカーネルとして実行される。
【0065】
分類、抽出、およびマルウェア検出をリアルタイムで行うことにより、マルウェアがプログラマブルIC132からホストシステム100へのPCIeバスを物理的に横断する前に、マルウェアをブロックすることができる。これは、ホストシステム100のためのより堅牢な保護を提供する。ランダムフォレスト分類技術は、複雑な復号およびプロキシ技術を必要とせずに、暗号化されたトラフィック上のマルウェアの検出を可能にする。さらに、機器ではなくプログラマブルIC132上でこの機能を実行することは、ワークロードの分散を通じてより良好なスケーリングを提供し、攻撃に対してデータセンタ内から保護する。
【0066】
本明細書に記載の特定のユーザ指定回路は、限定ではなく例示を目的として提供される。これらの例は、プラットフォーム218の能力を拡張するために、任意のユーザ指定回路が動的領域204に実装され得ることを示している。さらに、NICコントローラ208と通信するためにユーザ指定回路の異なるブロックを含めることができるが、ユーザ指定回路の異なるブロックは互いに通信してもしなくてもよい。
【0067】
図5の例では、動的領域204は単一のPR領域として実装される。1つまたは複数の他の例では、各ユーザ指定回路ブロック(例えば、504および216)は、それ自体の独立して再構成可能なPR領域内に実装されてもよい。そのような構成では、各PR領域に実装されている特定のユーザ指定回路は、動的領域204に実装されている他のユーザ指定回路を変更することなく、動的に変更可能(例えば、再構成可能)である。例えば、ユーザ指定回路504が第1のPR領域にあり、ユーザ指定回路216が第2のPR領域にある場合、ユーザ指定回路216の動作を中断することなく、ユーザ指定回路504を除去し、異なるユーザ指定回路を第1のPR領域に追加することができる。同様に、ユーザ指定回路504の動作を中断することなく、ユーザ指定回路216を除去し、異なるユーザ指定回路を第2のPR領域に追加することができる。いずれの場合も、プラットフォーム218は中断されずに動作し続ける。図5のプラットフォーム218はまた、本明細書中に記載されるような1つまたは複数のPR領域を使用して実装されてもよい。
【0068】
図6は、プログラマブルIC132に実装されたプラットフォーム218の別の例を示す。図6のプラットフォーム218は、図5の例と実質的に同様である。しかしながら、図6の例では、SDNデータプレーン502は、Open Virtual SwitchまたはOpen vSwitch(OVS)データプレーン602に置き換えられる。OVSデータプレーン602は、仮想化サーバに接続することができる。OVSデータプレーン602は、仮想スイッチのハードウェア加速バージョンを実装する。仮想スイッチソフトウェアは、ホストシステム100で実行されるソフトウェアに仮想スイッチを実装するのではなくハードウェア加速され、プラットフォーム218内のOVSデータプレーン602として実装される。OVSデータプレーン602は、そうでなければホストシステム100に課されるであろう処理負担を軽減する。図6の例では、OVSデータプレーン602および/またはフローテーブルは、ユーザ指定回路504および/またはユーザ指定回路216を使用して(例えば、動的領域204に実装され、1つまたは複数の通信インタフェースを介してOVSデータプレーン602および/またはNICコントローラ208に接続されたユーザ指定回路を使用して)カスタマイズすることができる。
【0069】
図6の例では、OVSデータプレーン602は、通信インタフェース604を介して動的領域204に接続することができる。OVSデータプレーン602は、動的領域204に接続された複数の通信インタフェースを有することができる。別の例では、OVSデータプレーン602は、動的領域204への通信インタフェースを有さなくてもよい。メモリコントローラ402が示されているが、メモリコントローラ402は任意選択である。メモリコントローラ402は、含まれる場合、ユーザ指定回路504および214による揮発性メモリ134の読み出しや書き込みを可能にする。さらに、メモリコントローラ402は、ホストシステム100による揮発性メモリ134の読み出しや書き込みを可能にする。
【0070】
例示の目的で、動的領域204は、追加のユーザ指定回路504を含む。ユーザ指定回路504は、インタフェース604を介してNICコントローラ208および/またはOVSデータプレーン602に接続することができる。一例では、ユーザ指定回路216は、ストレージ圧縮、暗号化、および/または重複排除動作のうちの1つまたは複数を実行することができる回路を実装することができる。
【0071】
図6の例では、プラットフォーム218を使用して、ネットワーキングおよびストレージ用の統合型スマートNICを実装することができる。プラットフォーム218は、ネットワークおよびストレージの両方のオフロードおよび加速を実行することができる。プラットフォーム218は、OVSデータプレーン602、イーサネットインタフェース206、PCIeコントローラ212、およびメモリコントローラ402を有するNICコントローラ208を提供する。動的領域204に実装されたユーザ指定回路216および504は、圧縮および/または暗号化などの動作を実行することができる。説明したように、プラットフォーム218とユーザ指定回路216および504との間のデータフローは、例えばストリームインタフェースを使用して実装することができる。
【0072】
制御プレーンとスローパスの処理は、ホストシステム100において行われてもよい。しかしながら、別の例示的な実装形態では、プログラマブルIC132内の組み込みハードワイヤードプロセッサおよび/またはソフトプロセッサ(例えば、図7を参照)、あるいはホストシステム100内のプロセッサ以外の外部接続プロセッサ(例えば、図8を参照)が、ストレージオフロードを実行することができる。組み込みプロセッサまたは外部プロセッサを含む後者のモデルは、そのような機能を実行するホストシステムプロセッサとは対照的に、組み込みプロセッサまたは外部プロセッサがネットワーク機能、ストレージなどを管理する「ベアメタル」実装で使用され得る。
【0073】
本明細書に記載の特定のユーザ指定回路は、限定ではなく例示を目的として提供される。これらの例は、プラットフォーム218の能力を拡張するために、任意のユーザ指定回路が動的領域204に実装され得ることを示している。さらに、図示されたユーザ指定回路ブロックは、実装に応じて同じPR領域または異なるPR領域に含まれてもよい。同様に、図6のプラットフォーム218は、本明細書に記載されるような1つまたは複数のPR領域を使用して実装されてもよい。
【0074】
図7は、プログラマブルIC132に実装されたプラットフォーム218の別の例を示す。図7の例では、静的領域202はプロセッサ702を含むように実装される。プロセッサ702は、プログラマブルIC132内の組み込みプロセッサである。一態様では、プロセッサ702は、プログラマブルIC132のプログラマブル回路を使用して実装されるソフトプロセッサである。例示的な実装形態では、ソフトプロセッサ702は、カリフォルニア州サンノゼのXilinx社から入手可能なMicroBlaze(商標)プロセッサとして実装される。さらに、プロセッサ702は、プログラムコードを実行することができる様々なプロセッサのいずれかとして実装されてもよい。別の例では、プロセッサ702は、ハードワイヤードプロセッサである。例えば、プロセッサ702は、ARMタイプのプロセッサまたはx86タイプのプロセッサとして実装されてもよい。
【0075】
図示のように、プロセッサ702は、オンチップ相互接続704に接続されている。一例では、オンチップ相互接続704は、メモリマップドインタフェースとして実装される。メモリマップドインタフェースの一例は、メモリマップドAXIインタフェースである。AXIは、インタフェースの例示的な例として提供されており、本開示内に記載された本発明の構成の限定としては意図されていない。オンチップ相互接続の他の例には、他のタイプのバス、ネットワークオンチップ、クロスバー、または他のタイプのスイッチが含まれるが、これらに限定されない。
【0076】
プロセッサ702は、様々な異なる機能のいずれかを実行することができる。プロセッサ702によって実行され得る機能の例には、OVS制御プレーン、記憶、管理などが含まれるが、これらに限定されない。図7の例では、プラットフォーム218は、図示のようにローカルインタフェースを介して(例えば、NICコントローラ208、DMA回路210、およびメモリマップドインタフェース704を介して)イーサネットインタフェース206から組み込みプロセッサ702にネットワークデータを渡すことができる。
【0077】
図7の例では、メモリコントローラはプラットフォーム218に含まれていない。1つまたは複数の他の例では、メモリコントローラがプラットフォーム218に含まれてもよい。メモリコントローラは、プロセッサ702、動的領域204内のユーザ指定回路216および/または504、ならびに/またはホストシステム100に接続することができる。説明したように、プラットフォーム218は、1つまたは複数のPR領域を用いて実装されてもよい。
【0078】
図8は、プログラマブルIC132に実装されたプラットフォーム218の別の例を示す。図8の例では、プラットフォーム218は、追加の(例えば、第2の)PCIeコントローラ802を含むように実装される。PCIeコントローラ802は、プログラマブル回路を使用して実装される。PCIeコントローラ802は、外部プロセッサ804に接続されている。外部プロセッサ804は、プログラムコードを実行することができ、ハードウェアアクセラレーションカード104上に、またはハードウェアアクセラレーションカード104に結合された異なる回路基板もしくはシステム上に配置することができる。
【0079】
外部プロセッサ804は、様々な異なる機能のいずれかを実行することができる。プロセッサ804によって実行され得る機能の例には、OVS制御プレーン、記憶、管理などが含まれるが、これらに限定されない。
【0080】
図8の例では、メモリコントローラは静的領域202に含まれていない。1つまたは複数の他の例では、メモリコントローラがプラットフォーム218に含まれてもよい。メモリコントローラは、DMA回路210、動的領域204内のユーザ指定回路216および/または504、ならびに/またはホストシステム100に接続することができる。説明したように、プラットフォーム218は、1つまたは複数のPR領域を用いて実装されてもよい。一態様において、PCIeコントローラ212およびPCIeコントローラ802は静的領域202に実装されてもよいが、他の構成要素は1つまたは複数のPR領域に含まれる。
【0081】
図7および図8の例示的な実施態様を参照すると、ホストシステムは、1つまたは複数の仮想マシンを実装することができる。各仮想マシンは、2つの別々の仮想インタフェースを有する。一方の仮想インタフェースはネットワーキング用であり、他方の仮想インタフェースはストレージ用である。ネットワークトラフィックは、マルチキューDMAインタフェースに付加され、受信側スケーリング(RSS)、LSO/TSO(大量送信オフロード/TCPセグメンテーションオフロード)、仮想拡張(VX)Lan/NVGRE(汎用ルーティングカプセル化を使用したネットワーク仮想化)トンネルオフロードなどのネットワークオフロード、およびOVSなどのSDNマッチ/アクション処理を含む処理パイプラインを通過する。ストレージトラフィックは、RDMA機能で任意選択的にプログラムされた組み込みプロセッサ702または外部プロセッサ804を介してオフロードされる。ストレージトラフィックは、NVMeと、動的領域204で実行される圧縮および/または暗号化などのストレージオフロード動作とを含む処理パイプラインを通過することができる。次いで、処理されたデータは、NICコントローラ208のデータパイプラインとマージすることができる。
【0082】
図9は、NICコントローラ208の例示的な実装を示す。図9の例では、NICコントローラ208は、イーサネットインタフェース902、バンプインザワイヤ(BITW)調停回路904、NICコア906、アクセラレータ調停回路908、およびDMAインタフェース910を含む。例示および説明の目的のために、NICコア906およびアクセラレータ調停回路908はそれぞれ、NICコントローラ208の「段」と呼ばれる場合がある。いくつかの例示的な実施態様では、NICコア906自体は、複数の異なる段の回路から形成されるか、またはそれらを含むことができる。
【0083】
図9の例では、イーサネットインタフェース902は、イーサネットインタフェース206(例えば、MAC304)に接続されている。DMAインタフェース910は、DMA回路210に接続されている。DMAインタフェース910、アクセラレータ調停回路908、NICコア906、BITW調停回路904、およびイーサネットインタフェース902はそれぞれ、入力データフロー(例えば、データは、イーサネットインタフェース206からNICコントローラ208に流入する)および出力データフロー(例えば、データは、NICコントローラ208からイーサネットインタフェース206に流出する)をサポートする。
【0084】
図示のように、BITW調停回路904、NICコア906、アクセラレータ調停回路908、およびDMAインタフェース910の各々は、動的領域204への入力通信インタフェースおよび動的領域204への出力通信インタフェースを含む。1つの態様では、通信インタフェースは、入力通信インタフェースおよび出力通信インタフェースを含むことができる。例えば、図9を参照すると、各入力/出力対は、1つの通信インタフェースを表すことができる。しかしながら、他の例では、通信インタフェースは、入力通信インタフェース(複数可)のみ、または出力通信インタフェース(複数可)のみを含むことができる。動的領域204への通信インタフェース(単数または複数)を有するものとして説明される回路ブロックの各々は、適切な入力または出力通信インタフェースを介して、動的領域204に示される様々なユーザ回路912、914、916、918、920、および/または922のいずれか内でのさらなる処理のために、出力データおよび/または入力データを送信することができる。
【0085】
別の例示的な実装形態では、BITW調停回路904は、入力データパスおよび/または出力データパスを動的領域204に接続する1つまたは複数のマルチプレクサ(例えば、スイッチ)として実装されてもよい。BITW調停回路904は、NICコントローラ208がイーサネットインタフェース902とNICコア906との間に1つまたは複数のインタフェースを含むことを可能にする。BITW調停回路904は、イーサネットインタフェース902から受信したデータを、パケット処理のために入力通信インタフェースを介してユーザ回路914などの1つまたは複数のユーザ回路に直接送信することができる。ユーザ回路914は、受信されたデータに対してパケット処理を実行し、処理されたデータを入力通信インタフェースを介してBITW調停回路904に戻すことができる。次いで、BITW調停回路904は、処理されたデータをNICコントローラコア906に転送することができる。
【0086】
特定の実施態様では、BITW調停回路904は、データを転回するように構成されてもよい。例えば、BITW調停回路904は、イーサネットインタフェース902からデータを受信し、そのデータをイーサネットインタフェース902に送り返してイーサネットインタフェース206に出力することができる。BITW調停回路904は、データを転回する前に、動的領域204内のユーザ回路にデータを提供してもしなくてもよい。いずれの場合でも、NICコントローラ208がネットワーク138から受信したデータは、任意選択的に処理され、転回され、BITW調停回路904を使用してNICコントローラ208からネットワーク138に送り返されてもよい。
【0087】
BITW調停回路904はさらに、NICコア906から受信したデータを、パケット処理のために出力通信インタフェースを介してユーザ回路912などの1つまたは複数のユーザ回路に直接送信することができる。ユーザ回路912は、受信されたデータに対してパケット処理を実行し、処理されたデータを出力通信インタフェースを介してBITW調停回路904に戻すことができる。次いで、BITW調停回路904は、処理されたデータをイーサネットインタフェース902に転送することができる。別の例では、BITW調停904を介してユーザ回路912および/またはユーザ回路914の間で十分なデータが交換されると、NICコア906は、後続の上位プロトコル層の解析などの動作を実行することができる。
【0088】
特定の実施態様では、BITW調停回路904は、データを転回するように構成されてもよい。例えば、BITW調停回路904は、NICコントローラ906からデータを受信し、そのデータをNICコントローラ906に送り返してDMA回路210に出力することができる。BITW調停回路904は、データを転回する前に、動的領域204内のユーザ回路にデータを提供してもしなくてもよい。いずれの場合でも、NICコントローラ208がホストシステムから受信したデータは、任意選択的に処理され、転回され、BITW調停回路904を使用してNICコントローラ208からホストシステムに送り返されてもよい。
【0089】
したがって、BITW調停回路904は、入力データがNICコントローラ208の処理段に入る前に動的領域204内のユーザ指定回路に提供され得るスイッチまたはインタフェースとして機能する。同様に、BITW調停回路904は、出力データがNICコントローラ208を出る直前に動的領域204内のユーザ指定回路に提供され得るスイッチまたはインタフェースとして機能する。説明したように、BITW調停回路904はまた、入力データおよび/または出力データを転回させることができる。
【0090】
一態様では、入力および出力通信インタフェースはストリームインタフェースとして実装される。一実装例では、ユーザ回路912およびユーザ回路914は、インターネットプロトコルセキュリティ(IPsec)回路ブロックを実装してもよい。例えば、ユーザ回路914による処理の後、NICコア906に向けられた入力パケットは、伝送制御プロトコル(TCP)などの上位層プロトコルがさらに処理され得るように完全に復号されてもよい。NICコア906からの暗号化されていない出力パケット(例えば、平文)は、ユーザ回路912によって暗号化されてもよい。
【0091】
別の態様では、ユーザ回路912は、イーサネットIPおよびTCPヘッダまたはGREを追加するなどの動作を実行することができる。ユーザ回路914は、デカプセル化としても知られるGREヘッダ除去を実装するために使用されてもよい。ユーザ回路912は、カプセル化としても知られるGREヘッダ挿入を実行することができる。ここでも、ユーザ回路912および/または914は、イーサネットインタフェース206とNICコア906との間のデータパス内の点でデータに対して動作を実行することができる。
【0092】
NICコア906は、BITW調停回路904から受信したデータを、パケット処理のために入力通信インタフェースを介してユーザ回路918などの1つまたは複数のユーザ回路に直接送信することができる。ユーザ回路918は、受信されたデータに対してパケット処理を実行し、処理されたデータを入力通信インタフェースを介してNICコア906に戻すことができる。次いで、NICコア906は、処理されたデータをアクセラレーション調停回路908に転送することができる。
【0093】
NICコア906は、アクセラレーション調停回路908から受信したデータを、パケット処理のために出力通信インタフェースを介してユーザ回路916などの1つまたは複数のユーザ回路に直接送信することができる。ユーザ回路916は、受信されたデータに対してパケット処理を実行し、処理されたデータを出力通信インタフェースを介してNICコア906に戻すことができる。次いで、NICコア906は、処理されたデータをBITW調停回路904に転送することができる。
【0094】
一態様において、NICコア906の入出力通信インタフェースは、三値連想メモリ(TCAM)インタフェース(例えば、少なくとも1つは入力用であり、少なくとも1つは出力用である)として実装される。ユーザ回路916および/またはユーザ回路918は、アクセス制御リスト/フローテーブル、アルゴリズムTCAM、MACフィルタ、および/またはアルゴリズム連想メモリ(CAM)を含む様々な異なる回路のいずれかを実装することができるが、これらに限定されない。
【0095】
別の例では、映像処理の場合、UDPやチェックサムオフロードなどの動作は、NICコア906で行われてもよい。ユーザ回路918および/または916を使用してフロールックアップを実行し、データを向けるべき場所を識別することができる。データは、フローテーブルを実装するユーザ回路918および/または916が示す場所に向けられてもよい。例えば、ユーザは、NICコア906に実装され得るよりも大きなテーブルを使用したい場合がある。したがって、ユーザ回路918および/または916は、NICコア906に含まれるテーブルを拡張するために、動的領域20内の追加のRAMを使用することができる。
【0096】
アクセラレーション調停回路908は、NICコア906から受信したデータを、パケット処理のために入力通信インタフェースを介してユーザ回路922などの1つまたは複数のユーザ回路に直接送信することができる。ユーザ回路922は、受信されたデータに対してパケット処理を実行し、処理されたデータを入力通信インタフェースを介してアクセラレーション調停回路908に戻すことができる。次いで、アクセラレーション調停回路908は、処理されたデータをDMAインタフェース910に転送することができる。
【0097】
アクセラレーション調停回路908は、DMAインタフェース910から受信したデータを、パケット処理のために出力通信インタフェースを介してユーザ回路920などの1つまたは複数のユーザ回路に直接送信することができる。ユーザ回路920は、受信されたデータに対してパケット処理を実行し、処理されたデータを出力通信インタフェースを介してアクセラレーション調停回路908に戻すことができる。次いで、アクセラレーション調停回路908は、処理されたデータをNICコア906に転送することができる。
【0098】
例示的な実装形態では、アクセラレータ調停回路908は、TCP/IP、チェックサムオフロード、および他の高レベル機能が実行された後のデータパスに配置される。パケットおよび関連するメタデータは、ユーザ回路(例えば、ユーザ回路920および/または922)が増分加速を実行することができる動的領域20に渡すことができる。すなわち、ユーザ回路920および/または922が高レベル動作を実行している場合、回路は、NICコントローラ208のデータパイプライン内の他の場所で実行された以前の動作を新たに実行する必要はない。
【0099】
一態様では、入力および出力通信インタフェースはストリームインタフェース(例えば、少なくとも1つは入力用であり、少なくとも1つは出力用である)として実装される。例示的な実施態様では、ユーザ回路920およびユーザ回路922は、レイヤ4以上の深いパケット検査を実行するための回路を実装することができる。
【0100】
DMAインタフェース910は、アクセラレーション調停回路908から受信したデータをDMA回路210に送信することができる。DMAインタフェース910は、DMA回路210から受信したデータをアクセラレータ調停回路908に送信することができる。
【0101】
図9の例では、ユーザ回路は単一のPR領域に実装されているものとして示されている。ユーザ回路の様々な組み合わせを含む動的領域204内に2つ以上のPR領域を実装できることを理解されたい。別の例では、ユーザ回路912および914は1つのPR領域内に実装され、ユーザ回路916および918は別のPR領域に実装され、ユーザ回路920および922はさらに別のPR領域に実装される。さらに、異なるユーザ回路およびインタフェースの様々な例は、限定ではなく例示を目的としている。別の例では、各ユーザ回路は異なるPR領域に実装されてもよい。
【0102】
図9の例に示すように、プラットフォーム218は、動的領域204に複数の異なる通信インタフェースを提供することができる。これらの通信インタフェース、例えば接続点は、プラットフォーム218と、サポートされている様々な接続点のいずれかで動的領域204に実装される動的にロードされる機能との間でデータが移動することを可能にする。上述したように、プラットフォーム218を動的領域204に接続する記載された通信インタフェース(例えば、NICコントローラ208の通信インタフェース)のうちの1つまたは複数あるいはすべては、ソフトウェア制御可能である。したがって、プログラマブルIC132内の組み込みプロセッサ(図7に示すようにソフトまたはハードワイヤードにかかわらず)あるいは外部デバイスまたはプロセッサ(例えば、図8に示すような)、および/またはホストシステムのプロセッサは、静的プラットフォーム218と動的領域204との間でデータを交換するために通信インタフェースの各々がオンにされるか、またはプラットフォーム218と動的領域204との間のデータの交換を防止するためにオフにされるかを個別に制御することができる。
【0103】
図10は、プログラマブルIC132に実装されたプラットフォーム218の別の例を示す。図10の例では、プラットフォーム218は、ストリームトラフィックマネージャ1002を含む。ストリームトラフィックマネージャ1002は、アクセラレータ調停回路908およびDMA回路210に接続されている。図10には示されていないが、ストリームトラフィックマネージャ1002は、動的領域204への1つまたは複数の接続を含むことができる。
【0104】
ストリームトラフィックマネージャ1002は、ホストシステム100と動的領域204に実装された回路との間のデータストリーム/パケットのフローを調整することができる。図10の例では、ストリームトラフィックマネージャ1002は、ホストシステム100とユーザ回路1010および/またはユーザ回路1012との間のデータの流れを調整する。他の例では、動的領域204は、相互接続(図示せず)を介してストリームトラフィックマネージャ1002に接続することができる追加のユーザ回路、例えばカーネル回路を含むことができる。
【0105】
図10の例では、動的領域204は、PR領域1006および1008に分割される。PR領域1006は、ユーザ回路1010を含む。PR領域1008は、ユーザ回路1012を含む。PR領域1006および1008の各々は、互いに独立して動的に再構成されてもよい。したがって、ユーザ回路1010がPR領域1006内にあり、ユーザ回路1012がPR領域1008内にあるので、ユーザ回路1012またはプラットフォーム218の動作に影響を与えることなく、ユーザ回路1010を除去または交換することができる。同様に、ユーザ回路1012はPR領域1008内に実装されているため、ユーザ回路1010またはプラットフォーム218の動作に影響を与えることなく、ユーザ回路1012を除去または置換することができる。説明したように、プラットフォーム218の動作を中断することなく、PR領域1006、1008の一方または両方(例えば、動的領域204の全体)を再構成することができる。動的領域204は2つのPR領域を含むように示されているが、別の例では、ユーザ回路1010およびユーザ回路1012は単一のPR領域に実装されてもよいことを理解されたい。
【0106】
一態様では、ユーザ回路1012は、高速パケット処理を実行することができるアルゴリズムTCAMを実装する。ユーザ回路1010は、データ認証、完全性、および/または機密性を含むがこれらに限定されない、IPネットワーク上の2つの通信ポイント間の動作を実行することができるIPsec回路を実装する。
【0107】
図10の例では、ユーザ回路1010は、NICコア906からデータを受信し、データを処理し、処理されたデータをNICコア906に戻すことができる。ユーザ回路1012は、ユーザ回路1012(例えば、IPsec回路)がホストシステム100によってプログラムされ得る例を示す。この場合、ホストシステム100(例えば、または内部または外部にかかわらず別の信頼できるプロセッサ)は、PCIeコントローラ212およびそれに結合されたユーザ回路1012の制御インタフェースを介して、ユーザ回路1012にポスト構成データを送信することができる。制御インタフェースの例は、AXI-Lightプロトコルに準拠したものであるが、他の制御インタフェースが使用されてもよい。
【0108】
図11は、プログラマブルIC132に実装されたプラットフォーム218の別の例を示す。図11の例では、ストリームトラフィックマネージャ1002が、動的領域204内の相互接続1102および相互接続1106に接続されている。相互接続1102はメモリマップド相互接続であってもよく、相互接続1106はストリーム相互接続であってもよい。相互接続1102は、1つまたは複数のネットワークカーネル1104に接続されている。相互接続1106は、1つまたは複数の計算カーネル1108に接続されている。ストリームトラフィックマネージャ1002および/またはアクセラレータ調停回路908は、ホストシステム100とネットワークカーネル1104および計算カーネル1108との間のデータフローを管理(例えば、データフローの指示)することができる。図11の例では、アクセラレータ調停回路908は、ストリームトラフィックマネージャ1002を介して動的領域204に実装されたユーザ回路と通信することができる。
【0109】
動的領域204は単一のPR領域を含むものとして示されているが、別の態様では、動的領域204は複数のPR領域を含んでもよい。例えば、ユーザ回路1012は第1のPR領域に実装されてもよく、ユーザ回路1010は第2のPR領域に実装される。さらに、相互接続1102、1106、ネットワークカーネル1104、および計算カーネル1108は、第3のPR領域内に実装されてもよい。別の態様では、相互接続1102およびネットワークカーネル1104は第3のPR領域に実装され、相互接続1106および計算カーネル1108は、第4のPR領域に実装される。図10および図11の例では、ストリームトラフィックマネージャ1002は、単独でPR領域内に、またはプラットフォーム218の1つまたは複数の他の構成要素と共にPR領域内に実装されてもよい。あるいは、ストリームトラフィックマネージャ1002は静的領域202に実装されてもよい。
【0110】
少なくとも部分的にスイッチとして動作することができるストリームトラフィックマネージャ1002を使用して、ホストシステムからのデータを、相互接続1102に、および1つまたは複数のネットワークカーネル1104に、相互接続1106に、および1つまたは複数の計算カーネル1108に、またはアクセラレータ調停回路908を介してNICコントローラ208にルーティングすることができる。例えば、ストリームトラフィックマネージャ1002は、指定されたフロー(例えば、ルートまたは目的地)を有するパケットを受信することができる。ストリームトラフィックマネージャ1002は、受信したパケットのフローを識別し、識別したフローに対応する宛先にパケットを配信することができる。これにより、動的領域204は、計算機能(例えば、ホストシステム100からオフロードされたタスクのハードウェア加速)を実行し、同時にネットワーク機能を実行することができる。
【0111】
別の例として、図11に示すアーキテクチャは、データ(例えば、パケット)が、ホストシステム100から処理のために動的領域204に(例えば、計算カーネルおよび/またはネットワークカーネルによって)流れ、ホストシステム100に戻るか、またはホストシステム100から処理のために動的領域204に(例えば、計算カーネルおよび/またはネットワークカーネルによって)流れ、NICコントローラ208を介してイーサネットに出ることを可能にし、NICコントローラ208は、動的領域204(例えば、ユーザ回路1010および/または1012)を使用してデータをさらに処理してもしなくてもよい。したがって、ホストシステム100は、処理のために動的領域204(例えば、計算カーネル1108)にデータを送信することができる。ストリームトラフィックマネージャ1002は、動的領域204から出力された結果データをホストシステム100またはNICコントローラ208に送り返すかどうかを決定することができる。
【0112】
図11には示されていないが、別の例では、データは、計算カーネルとネットワークカーネル(またはNICコントローラ208に接続されたユーザ回路)との間で直接交換されてもよい。
【0113】
図12は、プログラマブルIC132に実装された別の例示的なプラットフォームを示す。図12の例では、NICコントローラ208およびストリームトラフィックマネージャ1002を含む静的領域202の一部が示されている。静的領域202の他の要素は、説明を容易にするために示されていない。さらに、NICコントローラ208の構成要素間の通信インタフェースは、別々の入力および出力通信インタフェースを示すのとは対照的に、より一般的に示されている。
【0114】
図12に示すアーキテクチャは、プラットフォーム218およびNICコントローラ208の機能を拡張するために使用することができるより複雑で強力な処理を示すための例示を目的としている。この例では、動的領域204が複数のドメインに細分化されている。各ドメインは、特定の機能専用である。例えば、動的領域20は、NIC拡張ドメイン1202、ストレージドメイン1204、ストリームドメイン1206、およびメモリマップドドメイン1208を含む。一態様では、各ドメインは異なるPR領域として実装される。
【0115】
NIC拡張ドメイン1202は、アクセラレーション調停回路908に接続されたストリームインタフェース1210を含むことができる。ストリームインタフェース1210は、RDMA回路1212に接続されている。ストリームインタフェース1210は、ストリームドメイン1206内のストリーム相互接続1230およびストリーム-メモリマップドインタフェース1228にさらに接続されている。ストリーム-メモリマップドインタフェース1228は、ドメイン1206および1208をブリッジする。例えば、インタフェース1228のストリーム-メモリ間マップ回路はドメイン1206内に位置してもよく、インタフェース1228のメモリ-ストリーム間マップ回路はドメイン1208内に位置してもよい。NIC拡張ドメイン1202は、NICコア906に接続されたアルゴリズム検索回路1214と、BITWインタフェース904に接続されたレイヤ4処理および検索回路1216とをさらに含む。
【0116】
ストレージドメイン1204は、ストリームトラフィックマネージャ1002に接続されたNVMe EP1218を含む。NVMe EP1218はさらに、NVMe-NVMeoF1220およびNVMe/集約/暗号化回路1222に接続する。NVMe-NVMeoF1220はさらに、NIC拡張ドメイン1202のRDMA1212に接続する。NVMe/集約/暗号化回路1222は、同じくストレージドメイン1204に含まれるPCIe RP1224およびPCIe1226に接続する。PCIe RP1224、1226は、外部の不揮発性ストレージ(例えば、SSDなどの不揮発性記憶装置136)に接続することができる。
【0117】
ストリームドメイン1206は、ストリームトラフィックマネージャ1002に接続されたストリーム相互接続1230を含む。ストリームドメイン1206はまた、ストリーム相互接続1230に接続された1つまたは複数のストリームカーネル1232を含む。メモリマップドドメイン1208は、ストリームトラフィックマネージャ1002に接続されたメモリマップド相互接続1234を含む。メモリマップドドメイン1208は、メモリマップド相互接続1234に接続された1つまたは複数のメモリマップドカーネル1236をさらに含む。メモリマップド相互接続1234は、1つまたは複数のメモリコントローラ(図示せず)を介して、1つまたは複数の外部DDRメモリ(例えば、揮発性メモリ134)に接続することができる。ストリーム-メモリマップドインタフェース1228はまた、1つまたは複数のメモリコントローラ(図示せず)を介して、1つまたは複数の外部DDRメモリ(例えば、揮発性メモリ134)に接続することもできる。
【0118】
図12は、限定ではなく例示を目的として提供されている。他の例では、ドメインの1つまたは複数あるいは任意の組み合わせは、動的領域20内に任意の所与の時間に実装されてもよい。さらに、動的部分再構成を使用して、プログラマブルIC132の動作中に必要に応じて特定のドメインを追加および/または削除することができる。
【0119】
例えば、プラットフォームがプログラマブルIC132に実装されると、第1の部分構成ビットストリームがプログラマブルIC132にロードされて、ストリームドメイン1206およびメモリマップドドメイン1208のみを含むように動的領域20を構成することができる。別の時点で、第2の部分構成ビットストリームがプログラマブルIC132にロードされて、ストレージドメイン1204、ストリームドメイン1206、およびメモリマップドドメイン1208を実装するように動的領域20を構成することができる。別の時点で、第3の部分構成ビットストリームがプログラマブルIC132にロードされて、NIC拡張ドメイン1202、ストレージドメイン1204、ストリームドメイン1206、およびメモリマップドドメイン1208を実装するように動的領域20を構成することができる。
【0120】
別の態様では、各ドメインは異なるPR領域として実装される。したがって、各々のドメインに実装された回路は、他のドメインの回路を中断することなく経時的に変更することができる。ドメインが互いにインタフェースする場合、接続PR領域が部分的再構成を受け終えるまで、データフローを一時的に停止することができる。
【0121】
図13は、本明細書に記載のスマートNIC機能を実装するプログラマブルICを動作させる例示的な方法1300を示す。一態様では、プログラマブルICの構成に関する図13に関連して説明される動作は、ホストシステムによって実行または開始することができる。
【0122】
ブロック1302において、プログラマブルICは、プラットフォームをデバイスに実装する。プラットフォームは、プログラマブルICの静的回路に少なくとも部分的に実装される。例えば、ホストシステムは、プラットフォームを指定する構成ビットストリーム(例えば、完全または部分構成ビットストリーム)を不揮発性メモリ136に書き込むことができる。プログラマブルICは、それ自体をブートストラップし、ブート時にプラットフォームの構成ビットストリームをロードすることができる。プラットフォームの構成ビットストリームは、動作期間中、プログラマブルIC内に常駐し続けることができる。説明したように、構成ビットストリームは静的領域を定義し、プラットフォームを少なくとも部分的に静的領域に物理的に実装する。ブロック1302における構成ビットストリームのロードはまた、プラットフォームを実装するために使用されないプログラマブルICの部分としてデバイスの動的領域を定義することもできる。
【0123】
プラットフォームが1つまたは複数のPR領域を使用して実装される実施態様では、プラットフォームは、複数の部分構成ビットストリームをロードすることによって指定することができる。例えば、プラットフォームの一部を静的領域に実装する1つの部分構成ビットストリームをロードすることができる。プラットフォームを実装するために使用される各PR領域について、別の部分構成ビットストリームがそのPR領域のためにロードされる。
【0124】
ブロック1304において、プログラマブルICは、ホストシステムおよびネットワークとの通信リンクを確立する。例えば、プラットフォームのPCIeコントローラは、ホストシステムとの通信リンクを確立する。プラットフォームのイーサネットインタフェースは、ネットワーク、例えばネットワーク内のノードまたはスイッチとの通信リンクを確立する。プラットフォームがプログラマブルICに実装されると、プログラマブルICは、ホストシステムとネットワークとの間でデータをやりとりできることを理解されたい。
【0125】
ブロック1306において、プログラマブルICは、デバイスの動的領域にユーザ指定回路を実装する。例えば、ホストシステムは、部分構成ビットストリームをその中にロードすることによってプログラマブルICの部分的再構成を開始することができる。部分構成ビットストリームは、デバイスの動的領域にユーザ指定回路を実装する。動的領域が単一のPR領域を含む場合、単一の部分構成ビットストリームがロードされうる。動的領域が複数のPR領域を含む場合、ホストシステムは、複数の部分構成ビットストリームのプログラマブルICへのロードを開始することができる。例えば、PR領域毎に1つの部分構成ビットストリームがロードされてもよい。いずれの場合でも、ユーザ指定回路を実装するために、動的領域の各PR領域に1つまたは複数のカーネルを実装することができる。
【0126】
一態様では、ユーザ指定回路の実装の一部として、通信インタフェースは、ロードされた部分構成ビットストリームに関連するメタデータに基づいて選択的に有効および/または無効にされる。動的領域が複数のPR領域を含む場合、所与のPR領域に対する部分構成ビットストリームは、その特定のPR領域に結合するNICコントローラの通信インタフェースをプログラムするために必要なメタデータを含むことができる。
【0127】
ブロック1308において、プログラマブルICは、本開示内で説明されるように、ユーザ指定回路を使用して1つまたは複数の動作を実行することができる。ブロック1308において、ユーザ指定回路は、出力データおよび入力データの両方について非対称にデータを処理するように動作可能である。すなわち、入力データは、動的領域内の1つまたは複数のカーネルによって処理されるか、またはそのようなカーネルを使用してまったく処理されないが、出力データは、入力データに対して実行される処理とは無関係に、動的領域内の1つまたは複数の異なるカーネルによって処理されるか、またはそのようなカーネルによってまったく処理されなくてもよい。
【0128】
ブロック1308において、左側のブロックは入力データの処理を示し、右側のブロックは出力データの処理を示す。ブロック1310において、プログラマブルICはネットワークからデータを受信する。イーサネットインタフェースは、データを受信し、データをNICコントローラに提供する。ブロック1312において、プラットフォーム内のNICコントローラは、動的領域内のユーザ指定回路とデータを交換することができる。データは、ソフトウェア制御通信インタフェースのうちの1つまたは複数から送信され、ユーザ指定回路によって処理され、プラットフォームに返される。ブロック1314において、プラットフォームは、処理されたデータをホストシステムに送信する。例えば、データは、DMA回路およびPCIeコントローラに提供される。PCIeコントローラは、処理されたデータをホストシステムに提供する。
【0129】
ブロック1316において、プログラマブルICは、ホストシステムからデータを受信する。PCIeコントローラは、ホストシステムからデータを受信し、そのデータをDMA回路に提供する。DMA回路は、プラットフォーム内の1つまたは複数の他の回路にデータを提供する。ブロック1318において、NICコントローラは、動的領域内のユーザ指定回路とデータを交換することができる。データは、ソフトウェア制御通信インタフェースのうちの1つまたは複数から送信され、ユーザ指定回路によって処理され、プラットフォームに返される。ブロック1320において、プラットフォームは、処理されたデータをネットワークに送信する。例えば、データはイーサネットインタフェースに提供される。イーサネットインタフェースは、処理されたデータをネットワークに提供する。
【0130】
一態様では、ブロック1308の一部として、または本明細書に記載のプロセッサの制御下でいつでも、プラットフォームのソフトウェア制御通信インタフェースのうちの1つまたは複数をオンまたはオフにすることができる。例えば、ソフトウェア制御通信インタフェースの各々は、動的領域の実装時に特定の状態(オンまたはオフ)にすることができる。プログラマブルICが動作し続けるとき、ソフトウェア制御通信インタフェースは、互いに独立して、かつ動的領域の部分的な再構成から独立して、オンまたはオフにすることができる。
【0131】
例えば、所与のソフトウェア制御通信インタフェースをオンにし、次いで動的領域を中断することなく動作させ続けながらオフにすることができる。場合によっては、ソフトウェア制御通信インタフェースは、それに接続された動的領域の部分(例えば、特定のPR領域)が部分的な再構成を受けているときは非アクティブ化されてもよい。PR領域の部分的な再構成が成功すると、ソフトウェア制御通信インタフェースは再びオンにされてもよい。いずれの場合でも、説明したような通信インタフェースに対する動的制御は、動的領域内の部分的な再構成を開始することなく、動的領域を通るデータフローを動的に変更することを可能にする。
【0132】
ブロック1322において、トリガイベントが検出されたかどうかに関する判定が行われる。一態様において、ホストシステムは、プログラマブルIC内に実装されるべき異なるタイプのユーザ指定回路に対する要求を受信することができ、要求は、部分的な再構成のためのトリガイベントとみなされる。別の例では、トリガイベントは、プログラマブルICに部分的な再構成が必要であるという通知をホストシステムに通知させる、プログラマブルIC自体によって検出された信号または信号の組み合わせであってもよい。いずれの場合も、トリガイベントの検出に応答して、方法1300はブロック1306にループバックする。トリガイベントを検出しないことに応答して、方法1300はブロック1324に進み、ここで、プログラマブルICは、プラットフォームおよび動的領域の両方について現在の構成で動作し続ける。方法1300は、トリガイベントが検出されるまでブロック1322と1324との間で反復することができる。
【0133】
ブロック1306において、プログラマブルICが部分的に再構成される。ホストシステムは、例えば、1つまたは複数の他の部分構成ビットストリームをプログラマブルICにロードする。プログラマブルICは、完全に新しいユーザ指定回路を動的領域に(例えば、動的領域が単一のPR領域を含む場合)、または新しい/異なるユーザ指定回路のみを動的領域の1つもしくは複数の選択されたもしくはすべてのPR領域に実装することができる。さらに、動的領域の従来の構成と比較して動的領域に実装されるPR領域の数を変更することができる。
【0134】
本明細書に記載の本発明の構成は、ネットワークトラフィックに従って機能の動的な、例えばランタイム中の挿入および/または置換をサポートするプログラマブルICに実装されたプラットフォームを示す。プログラマブルICは、プラットフォームによって、データ損失なしにネットワークとホストシステムとの間でネットワークトラフィックを通過させ続けることができる。挿入された機能は、プラットフォームを通るデータフロー内の様々な挿入点のいずれかに挿入することができる。
【0135】
図14は、プログラマブルIC上にプラットフォームを実装する例示的な方法1400を示す。ブロック1402において、プログラマブル回路の静的領域に少なくとも部分的に実装されたプラットフォームがデバイス上に提供される。ブロック1404において、プラットフォームと通信するユーザ指定回路を実装するように構成されたプログラマブル回路の動的領域がデバイス上に提供される。プラットフォームは、プログラマブル回路の動的領域の少なくとも一部が動的に再構成されている間に、ホストデータ処理システムとの第1の通信リンクおよびネットワークとの第2の通信リンクを確立し維持するように構成される。
【0136】
図15は、ICの例示的なアーキテクチャ1500を示す。アーキテクチャ1500は、プログラマブルIC132などの本明細書に記載のプログラマブルICを実装するために使用することができる。一例として、アーキテクチャ1500は、フィールドプログラマブルゲートアレイ(FPGA)を実装するために使用することができる。アーキテクチャ1500はまた、システムオンチップ(SoC)タイプのICを表すこともできる。SoCは、プログラムコードを実行するプロセッサおよび1つ以上の他の回路を含むICである。他の回路は、ハードワイヤード回路、プログラマブル回路、および/またはそれらの組み合わせとして実装されてもよい。回路は、互いにおよび/またはプロセッサと協働して動作することができる。
【0137】
図示されるように、アーキテクチャ1500は、いくつかの異なるタイプのプログラマブル回路、例えば論理ブロックを含む。例えば、アーキテクチャ1500は、マルチギガビットトランシーバ(MGT)1501、構成可能論理ブロック(CLB)1502、ランダムアクセスメモリブロック(BRAM)1503、入力/出力ブロック(IOB)1504、構成およびクロッキング論理(CONFIG/CLOCKS)1505、デジタル信号処理ブロック(DSP)1506、特殊I/Oブロック1507(例えば、構成ポートおよびクロックポート)、ならびにデジタルクロックマネージャ、アナログデジタルコンバータ、システム監視論理などの他のプログラマブル論理1508を含む多数の異なるプログラマブルタイルを含むことができる。
【0138】
いくつかのICでは、各プログラマブルタイルは、各隣接タイル内の対応する相互接続要素(INT)1511との間の標準化された接続を有するプログラマブルINT1511を含む。したがって、INT1511は、一緒に、図示のICのためのプログラマブル相互接続構造を実装する。各INT1511はまた、図15の上部に含まれる例によって示されるように、同じタイル内のプログラマブル論理要素との接続を含む。
【0139】
例えば、CLB1502は、単一のINT1511に加えてユーザ論理を実装するようにプログラムすることができる構成可能論理素子(CLE)1512を含むことができる。BRAM1503は、1つまたは複数のINT1511に加えて、BRAM論理要素(BRL)1513を含むことができる。通常、タイルに含まれるINT1511の数は、タイルの高さに依存する。図示のように、BRAMタイルは5つのCLBと同じ高さを有するが、他の数(例えば、4)を使用することもできる。DSPタイル1506は、適切な数のINT1511に加えて、DSP論理要素(DSPL)1514を含むことができる。IOB1504は、例えば、INT1511の1つのインスタンスに加えて、I/O論理要素(IOL)1515の2つのインスタンスを含むことができる。IOL1515に接続される実際のI/Oパッドは、IOL1515の領域に限定されなくてもよい。
【0140】
図15に図示された例では、例えば領域1505、1507、および1508から形成されたダイの中心付近の水平領域は、構成、クロック、および他の制御論理に使用することができる。この水平領域から延びる垂直領域1509は、プログラマブルICの幅全体にクロックおよび構成信号を分配するために使用することができる。
【0141】
図15に示すアーキテクチャを利用するいくつかのICは、ICの大部分を構成する規則的な柱状構造を破壊する追加の論理ブロックを含む。追加の論理ブロックは、プログラマブルブロックおよび/または専用回路であってもよい。例えば、PROC1510として示されているプロセッサブロックは、CLBおよびBRAMのいくつかの列にまたがっている。
【0142】
一態様では、PROC1510は、ICのプログラマブル回路を実装するダイの一部として製造される専用回路、例えばハードワイヤードプロセッサとして実装されてもよい。PROC1510は、個々のプロセッサ、例えばプログラムコードを実行することができる単一のコアから、1つまたは複数のコア、モジュール、コプロセッサ、インタフェースなどを有するプロセッサシステム全体までの複雑さの範囲に及ぶ、様々な異なるプロセッサタイプおよび/またはシステムのいずれかを表すことができる。
【0143】
別の態様では、PROC1510は、アーキテクチャ1500から省略され、記載されたプログラマブルブロックの他のタイプのうちの1つまたは複数と置き換えられてもよい。さらに、そのようなブロックは、プログラマブル回路の様々なブロックを使用して、PROC1510の場合のようにプログラムコードを実行することができるプロセッサを形成することができるという点で、「ソフトプロセッサ」を形成するために利用することができる。
【0144】
「プログラマブル回路」という語句は、IC内のプログラマブル回路要素、例えば、本明細書に記載の様々なプログラム可能または構成可能な回路ブロックまたはタイル、ならびにICにロードされた構成データに従って様々な回路ブロック、タイル、および/または要素を選択的に結合する相互接続回路を指す。例えば、CLB1502およびBRAM1503などのPROC1510の外部にある図15に示す回路ブロックは、ICのプログラマブル回路と考えられる。
【0145】
一般に、プログラマブル回路の機能は、構成データがICにロードされるまで確立されない。構成ビットのセットは、FPGAなどのICのプログラマブル回路をプログラムするために使用され得る。構成ビットは、通常、「構成ビットストリーム」と呼ばれる。一般に、プログラマブル回路は、最初に構成ビットストリームをICにロードしなければ動作または機能しない。構成ビットストリームは、プログラマブル回路に特定の回路設計を効果的に実装する。回路設計は、例えば、プログラマブル回路ブロックの機能的態様、および様々なプログラマブル回路ブロック間の物理的接続を指定する。
【0146】
「ハードワイヤード」または「硬化」、すなわちプログラム不可能な回路は、ICの一部として製造される。プログラマブル回路とは異なり、ハードワイヤード回路または回路ブロックは、ICの製造後は、構成ビットストリームのロードによって実装されない。ハードワイヤード回路は、一般に、例えば、最初に構成ビットストリームをIC、例えばPROC1510にロードすることなく機能する専用の回路ブロックおよび相互接続を有すると考えられる。
【0147】
場合によっては、ハードワイヤード回路は、IC内の1つまたは複数のメモリ要素に記憶されたレジスタ設定または値に従って設定または選択することができる1つまたは複数の動作モードを有することができる。動作モードは、例えば、構成ビットストリームをICにロードすることによって設定することができる。この能力にもかかわらず、ハードワイヤード回路はICの一部として製造されるときに動作可能であり、特定の機能を有するので、ハードワイヤード回路はプログラマブル回路とはみなされない。
【0148】
SoCの場合、構成ビットストリームは、プログラマブル回路内に実装されるべき回路およびPROC1510またはソフトプロセッサによって実行されるべきプログラムコードを指定することができる。場合によっては、アーキテクチャ1500は、構成ビットストリームを適切な構成メモリおよび/またはプロセッサメモリにロードする専用構成プロセッサを含む。専用構成プロセッサは、ユーザ指定のプログラムコードを実行しない。他の場合には、アーキテクチャ1500は、PROC1510を利用して、構成ビットストリームを受信し、構成ビットストリームを適切な構成メモリにロードし、および/または実行のためにプログラムコードを抽出することができる。
【0149】
図15は、プログラマブル回路、例えばプログラマブルファブリックを含むICを実装するために使用され得る例示的なアーキテクチャを示すことを意図している。例えば、図15の上部に含まれる列の論理ブロックの数、列の相対幅、列の数および順序、列に含まれる論理ブロックのタイプ、論理ブロックの相対サイズ、および相互接続/論理の実装は、純粋に例示的なものである。実際のICでは、例えば、ユーザ回路設計の効率的な実装を容易にするために、CLBが現れる場所には常に、CLBの2つ以上の隣接する列が通常含まれる。しかしながら、隣接するCLB列の数は、ICの全体サイズに応じて変化し得る。さらに、IC内のPROC1510などのブロックのサイズおよび/または配置は、例示のみを目的としており、限定として意図されていない。
【0150】
説明の目的で、本明細書に開示される様々な発明概念の完全な理解を提供するために、特定の専門語が記載される。しかしながら、本明細書で使用される用語は、本発明の構成の特定の態様を説明することのみを目的としており、限定することを意図するものではない。
【0151】
本明細書で定義されるように、単数形「a」、「an」、および「the」は、文脈が明らかにそうでないことを示さない限り、複数形も含むことが意図される。
【0152】
本明細書で定義されるように、「少なくとも1つ」、「1つまたは複数の」、および「および/または」という用語は、特に明記しない限り、動作において連言的および選言的の両方であるオープンエンド表現である。例えば、「A、B、およびCのうちの少なくとも1つ」、「A、B、またはCのうちの少なくとも1つ」、「A、B、およびCのうちの1つまたは複数」、「A、B、またはCのうちの1つまたは複数」および「A、B、および/またはC」という表現はそれぞれ、Aのみ、Bのみ、Cのみ、AとBとを一緒に、AとCとを一緒に、BとCとを一緒に、またはA、BとCとを一緒に、を意味する。
【0153】
本明細書で定義される場合、「自動的に」という用語は、人間の介入がないことを意味する。
【0154】
本明細書で定義される場合、「コンピュータ可読記憶媒体」という用語は、命令実行システム、装置、またはデバイスによって、またはそれに関連して使用されるプログラムコードを含むまたは記憶する記憶媒体を意味する。本明細書で定義される場合、「コンピュータ可読記憶媒体」は、一時的な伝播信号自体ではない。コンピュータ可読記憶媒体は、電子記憶装置、磁気記憶装置、光記憶装置、電磁記憶装置、半導体記憶装置、またはこれらの任意の適切な組み合わせであってもよいが、これらに限定されない。本明細書に記載の様々な形態のメモリは、コンピュータ可読記憶媒体の例である。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストは、ポータブルコンピュータディスケット、ハードディスク、RAM、読み出し専用メモリ(ROM)、消去可能プログラマブル読み出し専用メモリ(EPROMまたはフラッシュメモリ)、電子的消去可能プログラマブル読み出し専用メモリ(EEPROM)、スタティックランダムアクセスメモリ(SRAM)、ポータブルコンパクトディスク読み出し専用メモリ(CD-ROM)、デジタル多用途ディスク(DVD)、メモリスティック、フロッピーディスクなどを含むことができる。
【0155】
本明細書で定義される場合、用語「である場合」は、文脈に応じて「ときに」または「際に」または「応答して」または「反応して」を意味する。したがって、語句「決定された場合」または「[記載された状態またはイベント]が検出された場合」は、文脈に応じて、「決定する際に」または「決定することに応答して」または「[記載された状態またはイベント]を検出すると」または「[記載された状態またはイベント]の検出に応答して」または「[記載された状態またはイベント]の検出に応答して」を意味すると解釈され得る。
【0156】
本明細書で定義される場合、「応答して」という用語および上記と同様の用語、例えば「である場合」、「ときに」または「際に」は、アクションまたはイベントに容易に応答または反応することを意味する。応答または反応は自動的に行われる。したがって、第2の動作が第1の動作に「応答して」実行される場合、第1の動作の発生と第2の動作の発生との間に因果関係がある。「応答して」は因果関係を示す。
【0157】
本明細書で定義される場合、「プロセッサ」という用語は、少なくとも1つのハードウェア回路を意味する。ハードウェア回路は、プログラムコードに含まれる命令を実行するように構成されてもよい。ハードウェア回路は、集積回路であってもよい。プロセッサの例には、中央処理装置(CPU)、アレイプロセッサ、ベクトルプロセッサ、デジタル信号プロセッサ(DSP)、FPGA、プログラマブル論理アレイ(PLA)、ASIC、プログラマブル論理回路、およびコントローラが含まれるが、これらに限定されない。
【0158】
本明細書で定義される場合、「リアルタイム」という用語は、特定のプロセスまたは決定が行われるのに十分に即時であるとユーザまたはシステムが感知する、またはプロセッサが何らかの外部プロセスに追いつくことを可能にする処理応答性のレベルを意味する。
【0159】
本明細書で定義される場合、「実質的に」という用語は、列挙された特性、パラメータ、または値が正確に達成される必要はないが、例えば公差、測定誤差、測定精度限界、および当業者に既知の他の要因を含む偏差または変動が、特性が提供しようとした効果を排除しない量で発生し得ることを意味する。
【0160】
第1、第2などの用語は、様々な要素を説明するために本明細書で使用され得る。特に明記しない限り、または文脈が明らかにそうでないことを示さない限り、これらの用語は1つの要素を別の要素から区別するためにのみ使用されるので、これらの要素はこれらの用語によって限定されるべきではない。
【0161】
コンピュータプログラム製品は、プロセッサに本明細書に記載の本発明の構成の態様を実行させるためのコンピュータ可読プログラム命令を有するコンピュータ可読記憶媒体を含むことができる。本開示内で、用語「プログラムコード」は、用語「コンピュータ可読プログラム命令」と交換可能に使用される。本明細書に記載のコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理装置に、またはネットワーク、例えばインターネット、LAN、WANおよび/または無線ネットワークを介して外部コンピュータもしくは外部記憶装置にダウンロードすることができる。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータ、および/またはエッジサーバを含むエッジデバイスを含むことができる。各コンピューティング/処理装置内のネットワークアダプタカードまたはネットワークインタフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、それぞれのコンピューティング/処理装置内のコンピュータ可読記憶媒体に記憶するためにコンピュータ可読プログラム命令を転送する。
【0162】
本明細書に記載の本発明の構成のための動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、またはオブジェクト指向プログラミング言語および/または手続き型プログラミング言語を含む1つまたは複数のプログラミング言語の任意の組み合わせで記述されたソースコードまたはオブジェクトコードのいずれかであってもよい。コンピュータ可読プログラム命令は、状態設定データを含むことができる。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロンソフトウェアパッケージとして、部分的にユーザのコンピュータ上で、部分的にリモートコンピュータ上で、または完全にリモートコンピュータもしくはサーバ上で実行することができる。後者のシナリオでは、リモートコンピュータは、LANまたはWANを含む任意のタイプのネットワークを介してユーザのコンピュータに接続されてもよく、または(例えば、インターネットサービスプロバイダを使用してインターネットを介して)外部コンピュータに接続されてもよい。場合によっては、例えば、プログラマブル論理回路FPGA、またはPLAを含む電子回路は、本明細書に記載の本発明の構成の態様を実行するために、コンピュータ可読プログラム命令の状態情報を利用して電子回路をパーソナライズすることによってコンピュータ可読プログラム命令を実行することができる。
【0163】
本発明の構成の特定の態様は、方法、装置(システム)、およびコンピュータプログラム製品のフローチャート図および/またはブロック図を参照して本明細書で説明される。フローチャート図および/またはブロック図の各ブロック、ならびにフローチャート図および/またはブロック図のブロックの組み合わせは、コンピュータ可読プログラム命令、例えばプログラムコードによって実施され得ることが理解されよう。
【0164】
これらのコンピュータ可読プログラム命令は、汎用コンピュータ、専用コンピュータ、または他のプログラマブルデータ処理装置のプロセッサに提供されて機械を生成することができ、その結果、コンピュータまたは他のプログラマブルデータ処理装置のプロセッサを介して実行する命令は、フローチャートおよび/またはブロック図の1つまたは複数のブロックで指定された機能/動作を実施するための手段を作成する。これらのコンピュータ可読プログラム命令はまた、コンピュータ、プログラマブルデータ処理装置、および/または他のデバイスに特定の方法で機能するように指示することができるコンピュータ可読記憶媒体に記憶されてもよく、その結果、記憶された命令を有するコンピュータ可読記憶媒体は、フローチャートおよび/またはブロック図の1つまたは複数のブロックで指定された動作の態様を実施する命令を含む製品を含む。
【0165】
コンピュータ可読プログラム命令はまた、コンピュータ、他のプログラマブル装置、または他のデバイス上で一連の動作を実行させてコンピュータ実施プロセスを生成するために、コンピュータ、他のプログラマブルデータ処理装置、または他のデバイスにロードされてもよく、その結果、コンピュータ、他のプログラマブル装置、または他のデバイス上で実行する命令は、フローチャートおよび/またはブロック図の1つまたは複数のブロックで指定された機能/動作を実施する。
【0166】
図のフローチャートおよびブロック図は、本発明の構成の様々な態様によるシステム、方法、およびコンピュータプログラム製品の可能な実装のアーキテクチャ、機能、および動作を示す。これに関して、フローチャートまたはブロック図の各ブロックは、指定された動作を実施するための1つまたは複数の実行可能命令を含むモジュール、セグメント、または命令の一部を表すことができる。
【0167】
いくつかの代替実施態様では、ブロックに記載された動作は、図に記載された順序とは異なる順序で行われてもよい。例えば、連続して示される2つのブロックは、実質的に同時に実行されてもよく、またはブロックは、関連する機能に応じて、時には逆の順序で実行されてもよい。他の例では、ブロックは、一般に、昇順で実行されてもよいが、さらに他の例では、1つまたは複数のブロックは、様々な順序で実行されてもよく、結果は、後続のブロックまたは直後には続かない他のブロックで記憶および利用される。また、ブロック図および/またはフローチャート図の各ブロック、ならびにブロック図および/またはフローチャート図のブロックの組み合わせは、指定された機能または動作を実行するか、専用ハードウェアとコンピュータ命令の組み合わせを実行する、専用ハードウェアベースのシステムによって実装されてもよいことに留意されたい。
【0168】
以下の特許請求の範囲に見出すことができるすべてのミーンズプラスファンクションまたはステッププラスファンクションの要素の対応する構造、材料、動作、および均等物は、具体的に特許請求されている他の特許請求されている要素と組み合わせて機能を実行するための任意の構造、材料、または動作を含むことが意図されている。
【0169】
デバイスは、プログラマブル回路の静的領域に少なくとも部分的に実装されたプラットフォームと、プラットフォームと通信するユーザ指定回路を実装するように構成されたプログラマブル回路の動的領域とを含む。プラットフォームは、プログラマブル回路の動的領域の少なくとも一部が動的に再構成されている間に、ホストデータ処理システムとの第1の通信リンクおよびネットワークとの第2の通信リンクを確立し維持するように構成される。
【0170】
前述および他の実施態様はそれぞれ、単独でまたは組み合わせて、以下の特徴のうちの1つまたは複数を任意選択的に含むことができる。いくつかの例示的な実施態様は、以下の特徴のすべてを組み合わせて含む。
【0171】
別の態様では、プラットフォームは、NICコントローラに結合されたイーサネットインタフェースと、ネットワークインタフェースカードコントローラに結合されたDMA回路と、DMA回路に結合されたPCIeインタフェースとを含む。
【0172】
別の態様では、イーサネットインタフェース、DMA回路、またはネットワークインタフェースカードコントローラのうちの少なくとも1つは、部分的に再構成可能な領域に実装される。
【0173】
別の態様では、ユーザ指定回路は、パケット処理を実行するように構成される。
別の態様では、プラットフォームは、動的領域に接続された通信インタフェースを有するNICコントローラを含む。
【0174】
別の態様では、通信インタフェースは、MACとNICコントローラの第1の段との間に配置される。
【0175】
別の態様では、通信インタフェースはソフトウェア起動可能である。
別の態様では、NICコントローラは、複数の相互接続された段を含み、複数の相互接続された段のうちの少なくとも1つは、通信インタフェースを有する。
【0176】
別の態様では、複数の相互接続された段の第1の段および第2の段はそれぞれ、動的領域に接続するように構成された独立した通信インタフェースを有する。
【0177】
別の態様では、各通信インタフェースは動的領域内の異なる部分再構成領域に接続し、各部分再構成領域は異なるユーザ指定回路を実装するために独立して再構成可能である。
【0178】
別の態様では、プラットフォームは、動的領域がプラットフォームと通信する異なるユーザ指定回路を実装するように再構成されている間、中断されずに動作し続ける。
【0179】
方法は、プログラマブル回路の静的領域に少なくとも部分的に実装されたプラットフォームをデバイス上に提供することと、プラットフォームと通信するユーザ指定回路を実装するように構成されたプログラマブル回路の動的領域をデバイス上に提供することとを含む。プラットフォームは、プログラマブル回路の動的領域の少なくとも一部が動的に再構成されている間に、ホストデータ処理システムとの第1の通信リンクおよびネットワークとの第2の通信リンクを確立し維持するように構成される。
【0180】
前述および他の実施態様はそれぞれ、単独でまたは組み合わせて、以下の特徴のうちの1つまたは複数を任意選択的に含むことができる。いくつかの例示的な実施態様は、以下の特徴のすべてを組み合わせて含む。
【0181】
別の態様では、プラットフォームは、NICコントローラに結合されたイーサネットインタフェースと、NICコントローラに結合されたDMA回路と、DMA回路に結合されたPCIeインタフェースとを含む。
【0182】
別の態様では、イーサネットインタフェース、DMA回路、またはネットワークインタフェースカードコントローラのうちの少なくとも1つは、部分的に再構成可能な領域に実装される。
【0183】
別の態様では、ユーザ指定回路は、パケット処理を実行するように構成される。
別の態様では、方法は、プラットフォーム内に、動的領域に接続された通信インタフェースを有するNICコントローラを提供することを含む。
【0184】
別の態様では、通信インタフェースは、MACとNICコントローラの第1の段との間に配置される。
【0185】
別の態様では、方法は、ソフトウェア制御下で通信インタフェースを選択的に起動することを含む。
【0186】
別の態様では、方法は、ネットワークインタフェースカードコントローラに複数の相互接続された段を提供することと、複数の相互接続された段のうちの少なくとも1つのための通信インタフェースを提供することとを含む。
【0187】
別の態様では、方法は、複数の相互接続された段の第1の段および第2の段を提供することを含み、第1の段および第2の段はそれぞれ、動的領域に接続するように構成された独立した通信インタフェースを有する。
【0188】
別の態様では、各通信インタフェースは動的領域内の異なる部分再構成領域に接続し、各部分再構成領域は異なるユーザ指定回路を実装するために独立して再構成可能である。
【0189】
別の態様では、方法は、プラットフォームが中断なく動作し続けている間に、プラットフォームと通信する異なるユーザ指定回路を実装するように動的領域を再構成することを含む。
【0190】
ICは、プログラマブル回路の静的領域に少なくとも部分的に実装されたプラットフォームを含むことができ、プラットフォームは、ホストインタフェースおよびネットワークインタフェースに結合されたネットワークインタフェースカードコントローラを含む。ICはまた、プラットフォームと通信するユーザ指定回路を実装するように構成されたプログラマブル回路の動的領域を含むことができる。ユーザ指定回路は、1つまたは複数のパケット処理機能を実装することができる。ネットワークインタフェースカードコントローラは、動的領域に接続された複数の通信インタフェースを含む。プラットフォームは、ホストインタフェースを使用してホストデータ処理システムとの第1の通信リンクと、ネットワークインタフェースを使用してネットワークとの第2の通信リンクを確立し、維持するように構成され得る。プラットフォームは、プログラマブル回路の動的領域の少なくとも一部がその中に異なるユーザ指定回路を実装するように動的に再構成されている間、ネットワークとホストデータ処理システムとの間でデータを転送し続けるように構成することができる。
【0191】
前述および他の実施態様はそれぞれ、単独でまたは組み合わせて、以下の特徴のうちの1つまたは複数を任意選択的に含むことができる。いくつかの例示的な実施態様は、以下の特徴のすべてを組み合わせて含む。
【0192】
別の態様では、ネットワークインタフェースはイーサネットインタフェースを含む。
別の態様では、ネットワークインタフェースは、ネットワークインタフェースカードコントローラの第1段とネットワークインタフェースとの間の静的領域に位置する調停回路に結合されている。複数の通信インタフェースのうちの第1の通信インタフェースは、動的領域内のユーザ指定回路を調停回路に接続する。
【0193】
別の態様では、調停回路は、データをネットワークインタフェースカードコントローラに提供することなく、ネットワークインタフェースから受信したデータをネットワークインタフェースに戻してネットワークにルーティングするように構成される。
【0194】
別の態様では、調停回路は、ユーザ指定回路による処理の後にデータをネットワークインタフェースにルーティングして戻す。
【0195】
別の態様では、調停回路は、データをネットワークインタフェースに提供することなく、ネットワークインタフェースカードコントローラから受信したデータをネットワークインタフェースカードコントローラにルーティングして戻すように構成される。
【0196】
別の態様では、調停回路は、ユーザ指定回路による処理の後にデータをネットワークインタフェースカードコントローラにルーティングして戻す。
【0197】
別の態様では、複数の通信インタフェースは、ホストデータ処理システムによって選択的に有効にされる。
【0198】
別の態様では、ネットワークインタフェースカードコントローラは複数の段を含み、複数の通信インタフェースの各通信インタフェースは、複数の段のうちの異なる段に接続する。
【0199】
別の態様では、動的領域は複数の部分再構成領域を含み、各通信インタフェースは複数の部分再構成領域のうちの異なる1つに接続する。複数の部分再構成領域の各々は、その中に異なるユーザ指定回路を実装するように独立して再構成可能である。
【0200】
別の態様では、ホストインタフェースはPCIeインタフェースである。
別の態様では、ICは、静的領域に実装されたDMA回路を含むことができ、DMA回路は、ネットワークインタフェースカードコントローラおよびホストインタフェースに接続されている。メモリコントローラは、静的領域に実装されてもよい。メモリコントローラは、動的領域内のDMA回路およびユーザ指定回路に結合されてもよい。
【0201】
別の態様では、ネットワークインタフェースカードコントローラは、ネットワークインタフェースに接続されたネットワークインタフェースコアと、DMA回路に接続されたアクセラレータ調停回路とを含む。アクセラレーション調停回路は、ストリームインタフェースを介して動的領域の複数の部分再構成領域のうちの1つまたは複数に結合する。各部分再構成領域は、異なる機能を実装することができる。
【0202】
別の態様では、ストリームインタフェースは、複数の部分再構成領域のうちの第1の部分再構成領域に実装され、ネットワークインタフェースコントローラのアクセラレータ調停回路に接続する。ユーザ指定回路は、複数の部分再構成領域のうちの1つまたは複数の他の部分再構成領域に実装されてもよい。
【0203】
別の態様では、複数の部分再構成領域のうちの1つまたは複数は、ホストデータ処理システムからオフロードされた計算ハードウェア加速タスクを実行するように構成された1つまたは複数のカーネル回路を含む。
【0204】
本明細書で提供される本発明の構成の説明は、例示を目的とするものであり、網羅的であること、または開示された形態および例に限定されることを意図するものではない。本明細書で使用される用語は、本発明の構成の原理、実際の用途または市場で見られる技術に対する技術的改善を説明するために、および/または当業者が本明細書に開示される本発明の構成を理解することを可能にするために選択された。記載された本発明の構成の範囲および精神から逸脱することなく、修正および変形が当業者には明らかであり得る。したがって、そのような特徴および実施態様の範囲を示すものとして、前述の開示ではなく、以下の特許請求の範囲を参照すべきである。
図1
図2A
図2B
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15