FPGA は 10G 10G ネットワーク UDP 通信を実現します 10G イーサネット サブシステムはネットワーク PHY チップを置き換えます エンジニアリング ソース コードと技術サポートを提供します

1 はじめに

現在、インターネット上でfpgaが実装しているudpの基本的なエコロジーは以下の通りです
。実際のプロジェクトでは使用されませんこのようなコードは、想像してみてください、マルチマシンの相互接続で問題が発生した場合、ネットワーク カードには ping 機能がなく、基本的なトラブルシューティング メカニズムさえありません。そのようなコードを使用するには?
2: ping 機能を備えた udp トランシーバー、コードは優れていて使いやすいですが、基本的にオープン ソースではなく、ソース コードは提供されません。この種のコードにも欠点があります。 ;
3: ザイリンクスのトライ モード イーサネット MAC トリプル スピード ネットワーク IP 実装を使用して、このコードも非常に優れていますが、それでも同じ問題があり、ソース コードはありません。 3 倍速ネットワーク IP にはライセンスが必要です、3 倍速ネットワーク IP は rgmii から gmii への変換を実現し、次に軸への変換を実現しました; 4
: FPGA の GTX リソースを使用して、SFP 光ポートを使用して UDP と通信を実現します.この種のソリューションは、外部ネットワーク トランスなしで完了. このソリューションは、そのような設計です。

この設計は、UDP プロトコル スタックを使用して UDP 通信の MAC 層設計を実現し、ザイリンクスの公式 10G イーサネット サブシステム IP コアを呼び出してネットワーク トランスフォーマーの機能を実現し、外部ネットワーク チップなしで UDP 通信のソリューションを実現します。普及している10G 10Gigabitネットワーク通信を簡単に実現.トップレベルコードはユーザーボタンを設定.ボタンが押されていないとき,エンジニアリング部門はUDPデータループバックテストを実行.ユーザーボタンを押した後,ネットワーク速度テストを実行できます. ; このルーチンで使用されている UDP プロトコル スタックは現在、オープン ソースではありません。複雑な UDP プロトコルであり、UDP の送受信を操作するための単純なユーザー インターフェイスのタイミングを気にするだけでよく、これは非常に単純です; この設計 fifo を介して UDP データのループバック送受信を実現し、コンピューターでネットワーク デバッグ アシスタントを使用します。 UDP の送受信を確認する側。

この設計は、1 つの SFP 光ポートに接続され、UDP サーバーとして構成されています.この設計は、多数の繰り返しテストの後、安定性と信頼性が高く、プロジェクトで直接移植して使用できます.プロジェクトコードは、包括的にコンパイルおよびデバッグできます.ボード上, 直接プロジェクト移植することができます. 学校の学生に適しています, 大学院のプロジェクト開発, また、オンザジョブエンジニアがプロジェクト開発を行うのに適しています, 医療、軍事、その他のデジタル通信分野に適用できます業界;
完全かつスムーズなエンジニアリング ソース コードと技術サポートを提供します;
エンジニアリング ソース コードと技術サポートの取得方法は、記事の最後に記載されています。

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

現在、私は次のUDPソリューションとアプリケーション例を持っています:
私のブログのホームページには無料のFPGAイーサネット通信コラムがあり、FPGAによって実装された多くのUDPアプリケーションがあり、従来のギガビットネットワークと10ギガビットネットワークソリューションを含む、兄弟ネットワーク通信が必要な場合は、直接クリックしてご覧ください。

3. 詳細設計図

従来の FPGA UDP ソリューション

設計方式について説明する前に、FPGA が UDP 通信方式を実装するために必要な条件を見てみましょう。これはおおまかに次のとおりです。 1: ユーザー ロジック: 開発者が送受信する必要がある実際のデータ
ここに画像の説明を挿入

、カスタム フォーマット、AXIS データ フロー フォーマットなどのさまざまな形式、ユーザー ロジックのインターフェイス タイミングは、MAC 層のインターフェイス タイミングと一致する必要があります; 2: MAC 層は、主に次のような特定のプロトコル ロジックで構成され
ます
。 UDP, IP, ARP, ICMP など, ネットワークデータのグループ化とアンパックを実現する. Sockte がソフトウェアで行うことと同じ. Sockte は CPU に依存してネットワークデータパケットを作成します. ここの MAC 層は直接ハードウェア リソースを使用してネットワーク データ パケットを作成し、ネットワーク データ パケットの奴隷化を CPU から解放します。今日のファッショナブルな RDMA には完全に反映されています。. . この設計の MAC 層は、Milink の UDP プロトコル スタックを使用します. この部分については、私の以前の記事を参照してください
3: ネットワーク トランスフォーマー
は、主に PCS/PMA で構成されています. PCS は、主に、クラシックなどの並列データのエンコードとデコードを実現します8b/10 エンコードとデコード、PMA は主にパラレル/シリアル/シリアル パラレル変換を実現し、出力インターフェイスは高速差動信号で、SFP または RG45 ネットワーク ポートに直接接続できます; 4: RJ45 ネットワーク ポート:
通称ネットワークケーブルに接続されたクリスタルヘッド。. .
5: リモートノード

この FPGA 10G UDP ソリューション (素晴らしい)

この FPGA 開発ボードはネットワーク カードとして理解でき、リモート ノードはそれに接続された別のネットワーク カードです;
この設計と上記の従来の FPGA 実装 UDP ソリューションの違いは、ネットワーク トランス部分であり、フロント ネットワーク トランスは実際のネットワーク PHY チップ、たとえば、私はよく RTL8211、B50610、88E1518 などを使用します; この設計はネットワーク トランスを使用しませんが、ザイリンクス公式の 10G イーサネット サブシステム IP コアを呼び出してネットワーク トランスの機能を実現します。 SFP光ポートの出力を介してリモートノードとの接続を実現. 接続, 設計ブロック図は次のとおりです.
ここに画像の説明を挿入
この設計は、コンピューター側のネットワークデバッグアシスタントを使用して開発ボードと通信し、UDPデータループバックテストを実現します. . このデザインは、外部ネットワーク トランスフォーマーを使用しませんが、ザイリンクスの公式の 10G イーサネット サブシステム IP コアを呼び出します. 出力形式が完成します。

最上位ファイル udp_test.v:
udp_ip のインスタンス化のために、ローカル IP アドレスを設定します。つまり、開発ボードの IP アドレスは 192.168.10.1、ローカル MAC アドレスは 000a3501fec0、宛先 IP アドレスは 192.168 に設定されます。 .10.2、送信元ポートは 61441、宛先ポートは 61441 です。ユーザー インターフェイスは受信と送信に分かれており、これらはすべて AXI4 ストリーム インターフェイスであり、同じ MAC インターフェイスも AXI4 ストリーム インターフェイスであり、10G MAC で接続されています。
IP アドレスとポート番号は自由に変更できます. 場所は次のとおりです. udp_test.v
ここに画像の説明を挿入
UDP ループバック モジュール:
UDP ループバック モジュールのファイルは udp_read_write_ctrl.v. 上位コンピュータは開発ボードにデータを送信し、開発ボードは受信したデータを送り返すモード、もう 1 つは速度測定モードで、開発ボードはデータ パケットを 10G デバイスに連続的に送信します。2 つのモードはボタンを押すことで切り替えられます。

MAC層:
カスタムIPを使用して実装します。つまり、動的ARP、ping、およびその他の機能を備えたUDPプロトコルスタックを実装し、UDP送受信を実現できます。

ここでは、ザイリンクスの公式 10G イーサネット サブシステム IP コアに焦点を当てます
! !
10G イーサネット サブシステム IP コアは、K7 以降の FPGA でのみ使用できます。

10G イーサネットのブロック図

上の図は 10G MAC の機能ブロック図で、pg157 ドキュメントを確認できます。このうち、送信部と受信部はともにAXIストリームインターフェースで、データ幅は64ビットです。MAC レジスタなどを設定するための AXI4-Lite インターフェイスもあります。私たちの注意の焦点は、主に送受信部分であるデータ転送インターフェースにあります。
ここに画像の説明を挿入

10G イーサネット送信分析

ここに画像の説明を挿入
上記の表から、IP コアを構成するときに選択される 64 ビットまたは 32 ビットとして AXIS インターフェイスを構成できることもわかります。異なるデータ幅に応じて、基準クロック周波数も異なり、64 ビット クロックは 156.25MHz、32 ビット クロックは 312.5MHz であることが文書で確認できます。この実験では 64 ビット データを使用し、その帯域幅は 156.25M 64bit=10Gbps です。
10GBASE-R は 64b/66b でエンコードされているため、トランシーバーの速度は 10Gbps
66/64 = 10.3125Gbps です。

以下は、通常モードでの 64 ビット送信側のタイミングで、DA は宛先 MAC アドレス、つまり宛先 MAC アドレス、SA は送信元 MAC アドレス、つまり送信元 MAC アドレス、L/T は長さ/タイプ情報、つまり、長さまたはタイプ; D はデータ情報です。通常モードでは CRC チェックがなく、この部分は MAC で完了していることがわかります。
ここに画像の説明を挿入
パケットのデータ部分の長さは、D 部分である 46 ~ 1500 バイトである必要があり、46 バイト未満の場合、MAC は自動的に 46 バイトまでデータを挿入します。ただし、MAC IP が FCS 部分、つまり CRC チェック部分で構成されている場合、ユーザーはデータ部分の長さが要件を満たしていることを確認する必要があります。そうでない場合、MAC IP によって不良フレームと見なされます。実験のこのセクションでは、FCS パーツを追加せずに通常モードを使用します。

10Gイーサネット受信解析

ここに画像の説明を挿入
受信部分と送信部分の最大の違いは、待機信号がないことです。つまり、ユーザーは準備完了信号を提供する必要はありませんが、データを受信し続けます。同時に、tuser は受信したパッケージが正しいかどうかを示し、ユーザーはこの信号に従ってパッケージの正しさを判断できます。
以下は正しいパッケージを受信した64ビットのタイミング図で、tlastが有効なときtuserも同時に有効で、パッケージが正しいことを示しています。
ここに画像の説明を挿入
以下はエラーパケットを受信した場合で、tlast が有効、tuser がローレベルの場合です。
ここに画像の説明を挿入
エラー パケットは、次の状況で表示されます。
1: FCS がエラーを検出した場合
2: データ パケットの長さが 64 バイト未満であり、DA(6)+SA(6)+L/T(2) の長さです。 )+D+FCS(4) で、D の長さは
46 バイト以上でなければなりません。
3: ジャンボ フレームが有効になっていない場合、ジャンボ フレームが受信される
4: データ パケットの長さが MTU 要件を超えている
ここに記載されていないエラーが発生する可能性がある他の状況があります. 詳細については、pg157 を参照してください書類。
受信部も同様に FCS を挿入するかどうかの構成を持っており、この実験ではデフォルトの通常モードを採用し、FCS は挿入されていません。

10G イーサネット レジスタ構成

多くのレジスタもドキュメントで紹介されています. これらのレジスタは AXI4-Lite バスを介して設定されます. 設定ソース コードはプロジェクトで提供されます. axi_10g_ethernet_0_axi_lite_sm.v は 10g mac のサンプル プロジェクトから取得されます. 変更する必要はありません.直接使用するだけです。具体的なレジスタの説明については、pg157 ドキュメントを参照してください。
ここに画像の説明を挿入

10G イーサネット UI 構成

IP 構成は次のとおりです。
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

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

開発ボード FPGA モデル: Xilinx xc7k325tffg900-2;
開発環境: vivado2019.1;
入出力: SFP 光ポート;
ネットワーク カード速度: 10G;テスト項目
: UDP データ ループバック、ping など; リソース消費と消費電力の見積もりは次のように:

ここに画像の説明を挿入

ここに画像の説明を挿入

5. ボードのデバッグ検証とデモンストレーション

この実験では、ユーザーが 10G ネットワーク カードを準備し、コンピューターのマザーボードに挿入する必要があります。下の写真は、ある魚で買った中古品です。. .
ここに画像の説明を挿入
接続方法は以下の通りです。
ここに画像の説明を挿入
開発ボード側の SFP 接続は以下の通りです。
ここに画像の説明を挿入

ping機能テスト

ボードの電源を入れてビットをダウンロードしたら、最初に次のように ping 機能をテストします
ここに画像の説明を挿入

ここに画像の説明を挿入

データ送受信テスト

次に、ネットワーク デバッグ アシスタントを使用してデータの送受信テストを実行します. ネットワーク カードが正常に接続された後、ネットワーク デバッグ アシスタントは FPGA によって送信されたテスト文字列を受信し、次のように 1 秒ごとに 1 回送信します。テスト用の大量のデータ. テスト結果は次のとおりです
ここに画像の説明を挿入

ここに画像の説明を挿入

10G インターネット速度テスト

スピード計測機能に注意!! ! コンピューターがひどくフリーズします。! !
スピード計測機能に注意!! ! コンピューターがひどくフリーズします。! !
スピード計測機能に注意!! ! コンピューターがひどくフリーズします。! !
最初にタスクマネージャを開き、パフォーマンスでイーサネットの伝送速度を確認し、
ここに画像の説明を挿入
最上層にバインドされたユーザーボタンを押すと、イーサネットの速度が変化します。
ここに画像の説明を挿入
コンピューターの開発ボードのイーサネット ポートの送信速度を観察します. この速度測定値は可能な限り最高の速度を表すだけであり, パケット損失のないコンピューターの実際の速度を表すものではありません. ポイントツーポイントの非パケット損失UDP の速度と、コンピューターのネットワーク カードと CPU の速度、メモリ速度、およびオペレーティング システムはすべて関連しています。. .
コンピュータがひどくフリーズした場合は、時間内にもう一度ボタンを押して、ループバック モードに切り替えてください。! !

6. 福利厚生:工学コードの取得

利点: エンジニアリング コードの取得
コードが大きすぎて電子メールで送信できないため、ある程度のネットワーク ディスク リンクで送信されます.
データの取得方法: プライベート、または記事の最後の V 名刺.
ネットワークディスク情報は次のとおりです。
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_41667729/article/details/130372967