FPGA は純粋な Verilog コードで書かれた NIC 25G UDP プロトコル スタック ネットワーク カードを実装し、エンジニアリング ソース コードと技術サポートを提供します。

1 はじめに

ネットワーク インターフェイス コントローラー (NIC) は、コンピューターがネットワークと対話する際に経由するゲートウェイです。NIC はソフトウェア プロトコル スタックとネットワーク間のブリッジを形成し、このブリッジの機能がネットワーク インターフェイスを定義します。ネットワーク インターフェイスの機能とその実装は両方とも急速に進化しています。これらの変更は、回線速度の向上と、高性能の分散コンピューティングおよび仮想化のための NIC 機能のサポートという 2 つの要件によって推進されています。ワイヤ速度の向上により、多くの NIC 機能をソフトウェアではなくハードウェアに実装する必要があります。同時に、高度なプロトコルとネットワーク アーキテクチャを実現するには、複数のキューにわたる正確な送信制御などの新しいネットワーク機能が必要です。

実用的な回線速度で新しいネットワーキング プロトコルとアーキテクチャのためのオープン開発プラットフォームのニーズを満たすために、私たちはオープンソースの FPGA ベースの高性能 NIC プロトタイピング プラットフォームを開発しています。この 25G/100G ネットワーク カード プラットフォームは 25G/100GGbps の速度で実行でき、そのドライバーと合わせてネットワーク プロトコル スタック全体で使用できます。この設計はポータブルでコンパクトで、さまざまなデバイスをサポートしながら、小型デバイスでもさらにカスタマイズできる十分なリソースを残しています。この 25G/100G NIC のモジュール設計とスケーラビリティにより、ハードウェア/ソフトウェア ソリューションを同時に最適化して、現実の環境で高度なネットワーク アプリケーションを開発およびテストできます。

FPGA ベースの NIC は、ASIC ベースの NIC とソフトウェア NIC の機能を組み合わせたものです。ワイヤ スピードで動作し、低レイテンシと正確なタイミングを実現でき、新機能の開発サイクルは比較的短いです。高性能の FPGA ベースの独自の NIC も開発されています。たとえば、Alibaba は、Precision Congestion Control Protocol (HPCC) のハードウェア実装を実行するために使用する、完全にカスタムの FPGA ベースの RDMA 専用 NIC を開発しました。 。Exablaze や Netcope が提供する製品など、商用製品も存在します。残念ながら、ASIC ベースの NIC と同様に、市販の FPGA ベースの NIC は、変更できない基本的な「ブラック ボックス」機能を備えている傾向があります。基本的な NIC 機能の閉鎖的な性質により、新しいネットワーク アプリケーションを開発する際の有用性と柔軟性が大幅に制限されます。

ザイリンクス XDMA コアや QDMA コアなどの市販の高性能 DMA コンポーネント、および Atomic Rules Arkville DPDK アクセラレーション コアは、転送データ フローを制御するための完全に構成可能なハードウェアを提供しません。ザイリンクス XDMA コアはコンピューティング オフロード アプリケーション向けに設計されているため、キューイング機能が非常に限られており、転送スケジューリングを制御する簡単な方法がありません。ザイリンクス QDMA コアと Atomic Rules Arkville DPDK アクセラレーション コアは、少数のキューをサポートし、DPDK ドライバーを提供することで、ネットワーク アプリケーション向けに設計されていますが、サポートされるキューの数は少ないです (XDMA コアのキューは 2K であるのに対し、XDMA コアのキューは 128)。 Arkville コア)と 2 つのコア どちらも、パケット送信を正確に制御する簡単な方法を提供しません。FPGA ベースのパケット処理ソリューションには、ネットワーク アプリケーション オフロード用の Catapult と、FPGA 上の再構成可能なマッチング エンジン用の FlowBlaze が含まれます。ただし、これらのプラットフォームは、標準の NIC 機能を独立した ASIC ベースの NIC に残し、完全に「オフライン RAID」として動作し、NIC スケジューラやキューに対する明示的な制御を提供しません。他の項目はソフトウェアを使用して実装されるか、部分的にハードウェアに実装されます。Shoal は、カスタム NIC と高速レイヤ 1 電気クロスポイント スイッチを使用して小規模ルーティングを実行するネットワーク アーキテクチャについて説明します。Shoal はハードウェアを使用して構築されていますが、ホスト接続のない合成トラフィックでのみ評価されます。SENIC は、NIC ベースのスケーラブルなレート制限について説明します。スケジューラーのハードウェア実装は個別に評価されますが、システムレベルの評価はカスタム キューイング規律 (qdisc) モジュールを使用してソフトウェアで実行されます。PIEO は、ハードウェアで個別に評価される柔軟な NIC スケジューラについて説明します。NDP は、データセンター アプリケーション用のプルモード トランスポート プロトコルです。NDP は、DPDK ソフトウェア NIC および FPGA ベースのスイッチで評価されています。Loom は、BESS を使用してソフトウェアで評価できる効率的な NIC 設計について説明しています。

この 25G/100G ネットワーク カードの開発は、これらすべてのプロジェクトとは異なります。完全に可視化された Verilog ソース コードであり、標準のホスト ネットワーク プロトコル スタックで実際のワイヤ速度で実行できるためです。フローをきめ細かく制御するためのスケーラブルな送信スケジューラを備えた数千の送信キューを提供します。その結果、ハードウェアとソフトウェアの機能を組み合わせた、Web アプリケーションを開発するための強力で柔軟なオープン ソース プラットフォームが誕生しました。

このデザインは 25G ネットワーク カードです。ザイリンクス Kintex UltraScale+ XCKU3P は、PCI Express IP コアの UltraScale+ Integrated Block (PCIE4) を呼び出し、FPGA ネットワーク カードとホスト コンピューター間のデータ対話を実現します。PCIE には、純粋な言語で書かれた DMA コントローラーが装備されています。 PCIE データの転送を実現するための verilog 作業; UltraScale FPGAs Transceivers Wizard GTY リソースを呼び出して、FPGA ネットワーク カードと他のネットワーク カード間のデータ相互作用を実現、GTY は XGMII インターフェイスとして設定され、GTY には純粋な Verilog コードで記述された XGMII データ トランシーバー インターフェイスが装備されていますGTY と UDP プロトコル スタック間のデータ対話を実現するため、UDP プロトコル スタックも純粋な Verilog コードで書かれ、XGMII データ対話インターフェイスが装備されています。FPGA ネットワーク カードは、FPGA ネットワーク カードの光ファイバーを介して他のネットワーク カードまたはスイッチに接続されます。 SFP 光ポートは、PCIE を介してホスト コンピュータに接続され、高速ネットワーク カードの機能を実現します。そのアーキテクチャは次のとおりです: UDP データは SFP 光ポートを介して送受信されます
ここに画像の説明を挿入
。 UDP プロトコル スタックと MAC は XGMII で、レートは最大 100G まで実行でき、ユーザー インターフェイスのタイミングで UDP の送受信を操作できます。

この設計は、多数の繰り返しテストの後でも安定性と信頼性があり、プロジェクトに直接移植して使用できます。エンジニアリング コードはボード上で包括的にコンパイルおよびデバッグでき、プロジェクトに直接移植できます。学生や大学院生のプロジェクト開発だけでなく、現役エンジニアのプロジェクト開発にも適しており、医療、軍事、その他の産業のデジタル通信分野に適用でき、完全かつスムーズなエンジニアリングソースコードと技術サポートを提供します
。 ;
エンジニアリング ソース コードとテクニカル サポートを入手する方法は記事の最後にありますので、最後までお待ちください。

2. ここにある UDP スキーム

現在、TCP プロトコルのプロジェクトだけでなく、UDP データ ループバック、ビデオ送信、AD 取得と送信などの UDP プロトコルのプロジェクト ソース コードを多数持っています。ネットワーク通信が必要な兄弟は、気軽にアクセスできます。見てください: 直接クリックして移動します

3. 25G/100Gネットワ​​ークカードの基本性能の紹介

この 25G/100G ネットワーク カードは、ザイリンクスのハイエンド シリーズ FPGA をベースとしたプラットフォームで、最大 100Gbps 以上のネットワーク インターフェイス開発プラットフォームに使用されます。このプラットフォームには、リアルタイムの高速動作のためのいくつかのコア機能が含まれています。パフォーマンス データ パス、10G/25G/100G イーサネット MAC、PCIExpress Gen 3、カスタム PCIeDMA エンジン、ネイティブの高精度 IEEE 1588 PTP タイムスタンプ。主な機能は、10,000 を超えるキューとスケーラブルな送信スケジューラをサポートできるスケーラブルなキュー管理で、パケット送信に対するきめ細かいハードウェア制御を可能にします。複数のネットワーク インターフェイス、インターフェイスごとの複数のポート、およびポートごとのイベント ドリブンの送信スケジューリングと組み合わせることで、これらの機能により、高度なネットワーク インターフェイス、アーキテクチャ、およびプロトコルの開発が可能になります。これらのハードウェア機能へのソフトウェア インターフェイスは、Linux ネットワーク プロトコル スタックの高性能ドライバーです。このプラットフォームは、スキャッター/ギャザー DMA、チェックサム オフロード、受信ストリーム ハッシュ、受信側スケーリングもサポートしています。開発とデバッグは、PCIExpress インターフェイスのドライバーやシミュレーション モデルからイーサネット インターフェイスに至るまで、システム全体を含む包括的なオープンソースの Python ベースのシミュレーション フレームワークによって促進されます。このプラットフォームのパワーと柔軟性は、CPU オーバーヘッドなしで 100Gbps のライン レートで TDMA スケジューリングを実行するマイクロ秒レベルの時分割多元接続 (TDMA) ハードウェア スケジューラを実装することによって実証されます。
この 25G/100G ネットワーク カードには、いくつかのユニークなアーキテクチャ上の特徴があります。まず、ハードウェア キューの状態が FPGA ブロック RAM に効率的に保存され、数千の個別に制御可能なキューが可能になります。これらのキューはインターフェイスに関連付けられており、各インターフェイスは複数のポートを持つことができ、それぞれが独自の独立した送信スケジューラを持ちます。これにより、パケット送信を非常にきめ細かく制御できます。スケジューラ モジュールは、変更または交換できるように設計されています。実験的なスケジューラを含め、さまざまな送信スケジューリング スキームを実装することは完全に可能です。PTP 時刻同期と組み合わせることで、高精度 TDMA を含む時間ベースのスケジューリングが可能になります。
この 25G/100G ネットワーク カードの設計はモジュール式で、高度にパラメータ化されています。インターフェイスとポートの数、キューの数、メモリ サイズ、スケジューラ タイプなど、多くの構成オプションと構造オプションを合成時に Verilog パラメータを介して設定できます。これらの設計パラメータは、ドライバが NIC 構成を決定するために読み取る構成レジスタで公開されるため、同じドライバが変更せずに多くの異なるボードや構成をサポートできるようになります。
現在のデザインは、ザイリンクス ウルトラスケール PCIe ハード IP コアにインターフェイスされる PCIe DMA コンポーネントをサポートしています。他の FPGA で一般的に使用される PCIe TLP インターフェイスのサポートはまだ実装されておらず、今後の作業です。このサポートは、より多くの FPGA で動作可能になるはずです。

4. 詳細設計計画

詳細な設計スキームは次のとおりです。
ここに画像の説明を挿入
概要から見ると、NIC は 3 つの主要なネストされたモジュールで構成されます。最上位モジュールには主にサポート コンポーネントとインターフェイス コンポーネントが含まれています。これらのコンポーネントには、PCI Express ハード IP コアと DMA インターフェイス、PTP ハードウェア クロック、MAC、PHY、および関連するシリアライザーを含むイーサネット インターフェイス コンポーネントが含まれます。最上位モジュールには、1 つ以上のインターフェイス モジュール インスタンスも含まれます。各インターフェイス モジュールは、オペレーティング システム レベルのネットワーク インターフェイス (eth0 など) に対応します。各インターフェイス モジュールには、キュー管理ロジックのほか、記述子および完了処理ロジックが含まれています。キュー管理ロジックは、すべての NIC キュー (送信キュー、送信完了キュー、受信キュー、受信完了キュー、イベント キュー) のキュー ステータスを維持します。各インターフェイス モジュールには、1 つ以上のポート モジュール インスタンスも含まれています。各ポート モジュールは MAC への AXI ストリーム インターフェイスを提供し、送信スケジューラ、送信および受信エンジン、送信および受信データ パス、および DMA 動作中に送受信されるデータ パケットを一時的に保存するためのスクラッチ RAM を備えています。
ポートごとに、ポート モジュールの送信スケジューラが、どのキューを送信に指定するかを決定します。送信スケジューラは、送信データパス上の動作を調整する送信エンジン用のコマンドを生成します。スケジューラ モジュールは、イベント駆動型の任意のスケジュールをサポートするために変更または置換できる柔軟な機能ブロックです。スケジューラのデフォルトの実装は単純なループです。同じインターフェイス モジュールに関連付けられたすべてのポートは、同じ送信キューのセットを共有し、オペレーティング システムには単一の統合インターフェイスとして見えます。これにより、ネットワーク スタックの残りの部分に影響を与えることなく、送信スケジューラ設定のみを変更することで、ポート間でフローを移行したり、複数のポート間で負荷分散したりすることができます。この動的なスケジューラ定義のキューからポートへのマッピングは、この 25G/100G NIC の独自の機能であり、P-FatTree などの並列ネットワークや RotorNet や Opera などの光スイッチ ネットワークを含む、新しいプロトコルやネットワーク アーキテクチャの研究を可能にします。 。

インターフェースの概要

ブロック図内のモジュールを次のように説明します:
PCIe HIP: PCIe ハード IP コア、AXIL M: AXI lite Master、DMA IF: DMA インターフェイス、PTP HC: PTP ハードウェア クロック、TXQ: 送信キュー マネージャー、TXCQ: 送信完了キュー管理 RXQ: 受信キュー マネージャー、RXCQ: 受信完了キュー マネージャー、EQ: イベント キュー マネージャー、MAC + PHY: イーサネット メディア アクセス コントローラー (MAC) および物理インターフェイス層 (PHY)。

PCIe HIP

PCIe ハード IP コア:
PCIe ハード IP コア。ここで呼ばれるものは、FPGA ネットワーク カードとホスト コンピューター間のデータ対話を実現する PCI Express IP コアの UltraScale+ Integrated Block (PCIE4) です。IP の位置と構成コード内の内容は次のとおりです。 私の FPGA
ここに画像の説明を挿入
ここに画像の説明を挿入
ボード カードのパフォーマンスが非常に高いため、PCIE3.0 X16 モードが直接使用され、速度は単一の Line 8G に直接達します。

DMA IF

DMA インターフェイス; 純粋な Verilog で書かれた DMA コントローラは PCIE データの処理を実現します; コード内でのこのモジュールの位置は次のとおりです:
ここに画像の説明を挿入
DMA IF は主に読み取りモジュールと書き込みモジュールで構成されており、データ処理を完了するのは非常に簡単です。

AXIバスインターフェイス

AXIL M: AXI lite マスター、つまり AXI-Lite バス マスター (PCIE IP にはバスのマウント要件に属する AXI-Lite コンフィギュレーション インターフェイスがあるため)、AXI M: AXI マスター、つまり
AXI-フル バス マスター。PCIE IP には AXI ユーザー インターフェイスがあるため、ここはバスのマウント要件に属します。

クロック同期

PHC: PTP ハードウェア クロック。クロック同期を行います。主に非同期の送信クロックと受信クロックのバランスをとります。コードの場所は次のとおりです。
ここに画像の説明を挿入

TXQ キューと RXQ キュー

送信キュー マネージャー; データ送信キュー マネージャー;
受信キュー マネージャー; データ受信キュー マネージャー;
コードの場所は次のとおりです。
ここに画像の説明を挿入

TXCQ および RXCQ キューが完了しました

送信完了キュー マネージャー; 送信完了キュー マネージャー;
受信完了キュー マネージャー; 受信完了キュー マネージャー;
コードの場所は次のとおりです。

EQ

イベントキューマネージャー; イベントキューマネージャー;

MAC + PHY

イーサネット メディア アクセス コントローラー (MAC) と物理インターフェイス層 (PHY)、イーサネット メディア アクセス コントローラー (MAC) と物理インターフェイス層 (PHY)、コードの位置は次のとおりです: 受信方向では、受信パケットはフロー ハッシュ モジュールを通過します
ここに画像の説明を挿入
。ターゲットの受信キューを管理し、受信データ パス上の操作を調整する受信エンジン用のコマンドを生成します。同じインターフェイス モジュール内のすべてのポートは同じ受信キュー セットを共有するため、異なるポート上の着信フローは同じキュー セットにマージされます。カスタム モジュールを NIC に追加して、受信パケットを PCIe バスに渡す前に前処理およびフィルタリングすることもできます。

NIC 上のコンポーネントは、AXI lite、AXI ストリーム、DMA 操作用のカスタム セグメント メモリ インターフェイスなど、いくつかの異なるインターフェイスと相互接続されています。これについては後で説明します。AXI lite は、ドライバーから NIC への制御パスに使用されます。これは、NIC コンポーネントの初期化と構成、および送受信操作中のキュー ポインタの制御に使用されます。AXI ストリーム インターフェイスは、PCIe トランスポート層パケット (TLP) やイーサネット フレームなどのパケット化されたデータを NIC 内で転送するために使用されます。セグメント化されたメモリ インターフェイスは、PCIe DMA インターフェイスを NIC データ パス、および記述子および完了処理ロジックに接続するために使用されます。NIC ロジックのほとんどは、PCIe ユーザー クロック ドメインで動作します。これは、現在のすべての設計バリアントで公称 250 MHz です。非同期 FIFO は、シリアライザーで実行されている MAC とのインターフェースとして使用され、クロック ドメイン (10G の場合は 156.25 MHz、25G の場合は 390.625 MHz、100G の場合は 322.266 MHz) を適切に送受信します。次のセクションでは、NIC のいくつかの主要な機能ブロックについて説明します。

パイプラインキュー管理

25G/100G ネットワーク カード NIC とドライバー間のパケット データ通信は、記述子と完了キューを通じて仲介されます。記述子キューはホストから NIC への通信チャネルを形成し、個々のパケットがシステム メモリ内のどこに保存されているかに関する情報を運びます。完了キューは、完了した操作と関連するメタデータに関する情報を含む、NIC からホストへの通信チャネルを形成します。記述子キューと完了キューは、DMA アクセス可能なシステム メモリ内に常駐するリング バッファとして実装され、NIC ハードウェアは必要なキュー状態情報を維持します。この状態情報には、リング バッファ DMA アドレスへのポインタ、リング バッファのサイズ、プロデューサおよびコンシューマ ポインタ、および関連する完了キューへの参照が含まれます。キューごとに必要な記述子の状態は 128 ビットに収まります。

この 25G/100G ネットワーク カード NIC のキュー管理ロジックは、数千のキューのステータスを効果的に保存および管理できなければなりません。これは、キューの状態をすべて FPGA のブロック RAM (BRAM) またはウルトラ RAM (URAM) に保存する必要があることを意味します。128 ビットの RAM が必要で、URAM ブロックは 72x4096 であるため、4096 個のキューの状態を保存するのに必要な URAM のインスタンスは 2 つだけです。キュー管理ロジックは、URAM インスタンスを使用してインターフェイスごとに少なくとも 32768 個のキューを処理するように拡張できます。

高スループットをサポートするには、この 25G/100G ネットワーク カード NIC が複数の記述子を並行して処理できる必要があります。したがって、キュー管理ロジックは、進行中の複数の操作を追跡し、操作が完了したときに更新されたキュー ポインターをドライバーに報告する必要があります。インプロセス操作を追跡するために必要な状態は記述子の状態よりもはるかに小さいため、フリップフロップや分散 RAM に保存できます。

25G/100G ネットワーク カードの NIC 設計は 2 つのキュー マネージャー モジュールを使用します。 queue_manager はホストから NIC への記述子キューの管理に使用され、cpl_queue_manager は NIC からホストへの完了キューの管理に使用されます。ポインタ処理、フィル処理、ドアベル/イベント生成におけるいくつかの小さな違いを除けば、モジュールは似ています。類似点があるため、このセクションでは queue_manager モジュールの操作についてのみ説明します。

キュー状態情報の保存に使用される BRAM または URAM アレイは、読み取り操作ごとに数サイクルのレイテンシー サイクルを必要とするため、queue_manager は複数の同時操作を容易にするパイプライン構造を使用して構築されています。パイプラインは、レジスタ読み取り、レジスタ書き込み、デキュー/エンキュー要求、デキュー/エンキュー コミットの 4 つの異なる操作をサポートします。AXI lite インターフェイスを介したレジスタ アクセス操作により、ドライバーはキューの状態を初期化し、割り当てられたホスト メモリへのポインタを提供できるほか、通常動作中にプロデューサおよびコンシューマ ポインタにアクセスできます。

コード内での queue_manager モジュールと cpl_queue_manager モジュールの位置は次のとおりです。
ここに画像の説明を挿入
実際、NIC のデータ帯域幅の使用率を向上させるために、ほとんどすべてのモジュールでパイプライン処理が採用され、高い同時実行性が促進されます。このセクションでは、キュー管理モジュールを使用して、操作テーブルと操作ポインターに基づいたパイプライン設計のアイデアを紹介します。

この 25G/100G ネットワーク カード NIC のキュー管理ロジックは、数千のキューのステータスを効果的に保存および管理できなければなりません。高スループットをサポートするには、NIC が複数の記述子を並行して処理できる必要があります。したがって、キュー管理ロジックは、進行中の複数の操作を追跡し、操作が完了したときに更新されたキュー ポインターをドライバーに報告する必要があります。NIC の操作テーブル項目には、アクティブ化フラグと送信フラグ、キュー番号、シャドウ ポインタが含まれます。操作ポインタには、操作テーブル開始ポインタと操作テーブル送信ポインタが含まれます。現在進行中の操作は、異なるポインタにインデックスを付けることで追跡できます。パイプライン操作をトリガーできるように、さまざまな操作項目がどのステップに進むか。詳細には、キュー管理はデキュー要求を受け取ると、コマンドをパイプラインに投入し、同時にキュー メッセージをトリガーします。コマンドが処理サイクルに達すると、対応するキューの情報がインデックス化され、キューの情報がインデックス化されます。デキューの場合 許可されると、必要な情報が操作テーブルに記録されます。処理ロジックは操作テーブルに継続的に書き込み、操作ポインタを更新するだけで済みます。デキュー ロジックは、操作テーブルのヘッダー 操作が送信されると、送信ロジックがトリガーされます。送信 操作テーブルの最後を論理的に処理し、操作テーブルを合理的に解放します。操作テーブルは進行中の処理プロセスを追跡するだけであるため、あまり大きく設定する必要はないことに注意してください。これとキュー管理の情報 RAM は二重リンク リストを形成します。つまり、正しいシャドウ ポインタを維持するには、キューにサービスを提供する最新の操作テーブル項目インデックスをキュー情報に格納する必要があります。その原理ブロック図は次のとおりです。
ここに画像の説明を挿入

スケジューラを送信する

この 25G/100G ネットワーク カード NIC で使用されるデフォルトの送信スケジューラは、tx_scheduler_rr モジュールに実装された単純なラウンドロビン スケジューラです。スケジューラは、NIC 送信キューから送信操作を開始するコマンドを送信エンジンに送信します。ラウンドロビン スケジューラにはすべてのキューの基本的なキュー ステータスが含まれており、FIFO は現在アクティブなキューを格納してラウンドロビン スケジューリングを実行するために使用され、操作テーブルは進行中の転送操作を追跡するために使用されます。キュー管理ロジックと同様に、ラウンドロビン送信スケジューラも、FPGA 上の BRAM または URAM にキュー状態情報を保存するため、多数のキューをサポートできるように拡張できます。転送スケジューラは、メモリ アクセスの待ち時間を隠すために処理パイプラインも使用します。コード内の tx_scheduler_rr モジュールの位置は次のとおりです。
ここに画像の説明を挿入
送信スケジューラ モジュールには、AXI lite レジスタ インターフェイスと 3 つのストリーム インターフェイスの 4 つの主要なインターフェイスがあります。AXI lite インターフェイスを使用すると、ドライバーはスケジューラ パラメーターを変更し、キューを有効/無効にすることができます。最初のストリーム インターフェイスは、ドライバーが送信のためにパケットをキューに入れるときに、キュー管理ロジックからドアベル イベントを提供します。2 番目のストリーム インターフェイスは、スケジューラによって生成された転送コマンドを送信エンジンに伝送します。各コマンドには、送信先のキューのインデックスと、進行中の操作を追跡するためのラベルが含まれています。最後のストリーミング インターフェイスは、転送操作ステータス情報をスケジューラに返します。ステータス情報は、送信されたパケットの長さ、またはキューが空か無効だったために送信操作が失敗したかどうかをスケジューラに通知します。

トランスポート スケジューラ モジュールは、任意のスケジューリング アルゴリズムを実装するために拡張または置き換えることができます。これにより、この 25G/100G NIC を、SENIC、Carousel、PIEO、Loom で提案されているものなど、実験的なスケジューリング アルゴリズムを評価するためのプラットフォームとして使用できるようになります。受信パスからのフィードバックを含む他の入力を送信スケジューラ ブロックに提供することも可能で、これを使用して新しいプロトコルや NDP や HPCC などの輻輳制御技術を実装できます。スケジューラを PTP ハードウェア クロックに接続すると、TDMA をサポートすることができ、これを使用して RotorNet、Opera、およびその他の回線交換アーキテクチャを実装できます。

ポートとインターフェース

この 25G/100G NIC のユニークなアーキテクチャ上の特徴は、ポートとネットワーク インターフェイスが分離されているため、複数のポートを同じインターフェイスに関連付けることができます。以下の図 a に示すように、最新の NIC はインターフェイスごとに 1 つのポートをサポートします。
ここに画像の説明を挿入
ネットワーク プロトコル スタックがネットワーク インターフェイス上で送信するパケットをキューに入れると、パケットはそのインターフェイスに関連付けられたネットワーク ポートを介してネットワークに挿入されます。ただし、Corundum では、各インターフェイスを複数のポートに関連付けることができるため、上の図 b に示すように、ハードウェアはデキュー時にパケットをネットワークに注入するポートを決定できます。

同じネットワーク インターフェイス モジュールに関連付けられたすべてのポートは、同じ送信キューのセットを共有し、オペレーティング システムには単一の統合インターフェイスとして見えます。このようにして、ネットワーク スタックの残りの部分に影響を与えることなく、送信スケジューラ設定のみを変更することで、ポート間でフローを移行したり、複数のポート間で負荷分散したりできます。スケジューラ定義の動的キュー対ポート マッピングにより、P-FatTree などの並列ネットワークや RotorNet や Opera などの光スイッチ ネットワークを含む、新しいプロトコルとネットワーク アーキテクチャの研究が可能になります。

データパスと送受信エンジン

この 25G/100G ネットワーク カードは、データ パスでメモリ マップド インターフェイスとストリーミング インターフェイスの両方を使用します。AXI ストリームは、ポート DMA モジュール、イーサネット MAC、チェックサムおよびハッシュ計算モジュールの間でイーサネット パケット データを送信するために使用されます。AXI ストリームは、PCIe ハード IP コアを PCIe AXI lite マスター ブロックおよび PCIe DMA インターフェイス ブロックに接続するためにも使用されます。カスタム セグメント メモリ インターフェイスは、PCIe DMA インターフェイス ブロック、ポート DMA ブロック、記述子および完了処理ロジックを内部スクラッチパッド RAM に接続するために使用されます。

AXI ストリーム インターフェイスの幅は、必要な帯域幅によって決まります。イーサネット MAC を除き、コア データパス ロジックは完全に 250 MHz PCIe ユーザー クロック ドメインで動作します。したがって、PCIe ハード IP コアへの AXI ストリーム インターフェイスは、ハード インターフェイス幅 (PCIe Gen 3 x8 の場合は 256 ビット、PCIe Gen 3 x16 の場合は 512 ビット) と一致する必要があります。イーサネット側では、250 MHz クロックが遅すぎて十分な帯域幅を提供できない場合を除き、インターフェイス幅は MAC インターフェイス幅と一致します。10G イーサネットの場合、MAC インターフェイスは 156.25 MHz で 64 ビットであり、同じ幅の 250 MHz クロック ドメインに接続できます。25G イーサネットの場合、MAC インターフェイスは 390.625 MHz で 64 ビットであるため、250 MHz で十分な帯域幅を提供するには、128 ビットに変換する必要があります。100G イーサネットの場合、この 25G/100G ネットワーク カードは、Ultrascale Plus FPGA 上のザイリンクス 100G ハード CMAC コアを使用します。MAC インターフェイスは 322.266 MHz で 512 ビットで、100 Gbps を実現するには約 195 MHz で動作する必要があるため、250 MHz クロック ドメインの 512 ビットで接続します。

この 25G/100G ネットワーク カードの NIC データ パスのブロック図を次の図に示します。
ここに画像の説明を挿入
これは、上記の第 4 章の詳細な設計スキーム図の簡略版です。PCIe ハード IP コア (PCIe HIP) は、NIC をホストに接続します。2 つの AXI ストリーム インターフェイスは、PCIe DMA インターフェイス ブロックを PCIe ハード IP コアに接続します。1 つのインターフェイスは読み取りおよび書き込み要求に使用され、もう 1 つのインターフェイスはデータの読み取りに使用されます。次に、PCIe DMA インターフェイス モジュールは、一連の DMA インターフェイス マルチプレクサを介して、記述子取得モジュール、書き込み完了モジュール、ポート一時記憶 RAM モジュール、RX および TX エンジンに接続されます。DMA インターフェイスに向かう方向では、マルチプレクサは複数のソースからの DMA 転送コマンドを結合します。逆方向では、トランスポート ステータス応答をルーティングします。また、読み取りと書き込みのためのセグメント化されたメモリ インターフェイスも管理します。トップレベルのマルチプレクサは、記述子トラフィックとパケット データ トラフィックを結合し、記述子トラフィックに高い優先順位を与えます。次に、一対のマルチプレクサが複数のインターフェイス モジュールからのトラフィックを結合します。最後に、各インターフェイス モジュール内の追加のマルチプレクサが、複数のポート インスタンスからのパケット データ トラフィックを結合します。

送信エンジンと受信エンジンは、パケットの送受信に必要な操作を調整する役割を果たします。送信エンジンと受信エンジンは、高いスループットを実現するために複数の送信中のパケットを処理できます。第 4 章の詳細な設計スキーム図に示されているように、送信エンジンと受信エンジンは、ポート DMA ブロック、ハッシュおよびチェックサム オフロード ブロック、記述子および完了ブロックなど、送信データ パスおよび受信データ パス内のいくつかのブロックに接続されています。処理ロジックとタイムスタンプ インターフェイス モジュール、イーサネット MAC モジュール。

送信エンジンは、データ パケットの送信を調整する責任があります。送信エンジンは、転送スケジューラの特定のキューからの転送要求を処理します。PCIe DMA エンジンを使用した低レベルの処理の後、パケットは送信チェックサム ブロック、MAC、および PHY を通過します。パケットが送信されると、送信エンジンは MAC から PTP タイムスタンプを受信し、完了レコードを作成して、完了書き込みモジュールに渡します。

送信エンジンと同様に、受信エンジンはパケットの受信を調整する役割を果たします。受信パケットは PHY と MAC を通過します。ハッシュやタイムスタンプなどの低レベルの処理の後、受信エンジンは 1 つ以上の書き込みリクエストを PCIe DMA エンジンに発行して、パケット データをホスト メモリに書き込みます。書き込み操作が完了すると、受信エンジンは完了レコードを作成し、それを完了書き込みモジュールに渡します。

記述子読み取りモジュールと完全書き込みモジュールは、送信エンジンと受信エンジンと同様に動作します。これらのモジュールは、送信および受信エンジンからの記述子/完了読み取り/書き込み要求を処理し、キュー マネージャーにエンキュー/デキュー要求を発行してホスト メモリ内のキュー要素アドレスを取得し、その後、PCIe DMA インターフェイスに要求を発行してデータを転送します。CompletionWrite モジュールは、適切なイベント キューに送信完了と受信完了をキューに入れ、イベント レコードを書き出すことによってイベントを処理する役割も果たします。

セグメント化されたメモリインターフェイス

PCIe 上の高性能 DMA のために、Corundum はカスタムのセグメント化されたメモリ インターフェイスを使用します。インターフェイスは最大 128 ビットのセグメントに分割され、全体の幅は PCIe ハード IP コアの AXI ストリーム インターフェイスの幅の 2 倍になります。たとえば、PCIe ハード コアで 512 ビット AXI ストリーム インターフェイスを備えた PCIe Gen 3 x16 を使用するデザインでは、それぞれ 128 ビットの 8 セグメントに分割された 1024 ビット セグメント インターフェイスが使用されます。単一の AXI インターフェイスを使用する場合と比較して、このインターフェイスは改善された「インピーダンス マッチング」を提供します。これにより、DMA エンジンのアライメントとインターコネクト ロジックのアービトレーションが不要になり、バックプレッシャーが排除され、PCIe リンクの使用率が向上します。具体的には、このインターフェイスは、DMA インターフェイスがクロック サイクルごとに全幅の非整列読み取りまたは書き込みを実行できることを保証します。さらに、単一方向のトラフィック専用のシンプルなデュアルポート RAM を使用することで、読み取りパスと書き込みパス間の競合が排除されます。

各セグメントは AXI lite と同様に動作しますが、5 つではなく 3 つのインターフェイスを使用する点が異なります。1 つのチャネルは書き込みアドレスとデータを提供し、1 つのチャネルは読み取りアドレスを提供し、もう 1 つのチャネルは読み取りデータを提供します。AXI とは異なり、バーストと並べ替えはサポートされていないため、インターフェイス ロジックが簡素化されます。相互接続コンポーネント (マルチプレクサ) は、複数の RAM にアクセスする場合でも、操作の順序を維持する役割を果たします。これらのセグメントは、個別のフロー制御接続および相互接続シーケンス ロジックの個別のインスタンスを通じて、互いに完全に独立して動作します。さらに、操作はアドレス デコードではなく、個々の選択信号に基づいてルーティングされます。この機能により、アドレスを割り当てる必要がなくなり、最小限の構成で操作を適切にルーティングするパラメータ化可能な相互接続コンポーネントの使用が可能になります。

バイト アドレスはセグメントのインターフェイス アドレスにマップされ、アドレスの最下位ビットはセグメント内のバイト レーンを識別し、次のビットはセグメントを選択し、最上位ビットはそのセグメントのワード アドレスを識別します。たとえば、8 つの 128 ビット セグメントに分割された 1024 ビット セグメント インターフェイスでは、アドレスの下位 4 ビットがセグメント内のバイト レーンを識別し、次の 3 ビットがセグメントを識別します。残りのビットは、セグメントのアドレス バスを決定します。

5. vivadoプロジェクトの詳細説明

開発ボード FPGA モデル: Xilinx–xcvu9p-fsgd2104-2L-e;
開発環境: Vivado2022.2;
入出力: PCIE3.0/SFP 光ポート
アプリケーション: 25G ネットワーク カード アプリケーション
プロジェクト コード構造は次のとおりです:
ここに画像の説明を挿入
IP コアこのプロジェクトで使用されるものには、MIG (DDR4)、GTY (UltraScale FPGA Transceivers Wizard)、PCI Express 用の UltraScale+ Integrated Block (PCIE4) があり、IP コアとロジック デザイン間の接続と機能は次のとおりです: GTY は 25G ライン レートを選択し、 PCIE は
ここに画像の説明を挿入
3.0
ここに画像の説明を挿入
標準を選択します。 8GT/s および X16 モードは次のとおりです。
ここに画像の説明を挿入
包括的なコンパイル後の推定 FPGA リソース消費量と消費電力は次のとおりです。
ここに画像の説明を挿入

6. ボードのデバッグと検証

オンボードデバッグは Linux システムで行う必要があり、現在テスト済みですが、速度は 25G 以下、20G 程度です ボード上でのテスト方法については、後日更新させていただきます。詳細なテスト方法と手順を書く時間がありません。プロジェクトのソース コードに興味のある友人は、まずそのコードを勉強することができます。コードはより複雑で、理解するのに半月かかる場合があります。

7. 福利厚生:技術コード取得

メリット: エンジニアリングコードの取得
コードは電子メールで送信するには大きすぎるため、ある程度のネットワークディスクリンクで送信
データの取得方法: 非公開、または記事末尾の V 名刺
ネットワークディスク情報は以下のとおりです。
ここに画像の説明を挿入
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_41667729/article/details/131624649
おすすめ