先進のパッシブ・ヒートシンクを搭載したXUP-P3R

ホワイトペーパー

BittWare'sループバックアプリのノートと例の紹介

概要

BittWareのLoopbackの例では、いくつかのことを実証しています:

  • デザインでザイリンクス CMAC を完全に使用する方法。これには、DAC ケーブル長に基づくセルデスの送信プリエンファシス値の設定も含まれます。また、オプションの AN/LT 機能の設定や、アクティブな QSFP トランシーバーから受信した割り込みの処理も含まれます。
  • Xilinx HLS/C++ を使用してパケット処理パイプラインを構成する方法。BittWare は、パケット処理に RTL や P4 を使用するのではなく、HLS/C++ を推奨しています。
  • PCIeボードのコントロールプレーンを操作するために、BittWare ツールキットと連携してPythonを使用する方法を紹介します。さらに、リモートホスト上でPython Scapyを使用して、パケット指向ビットストリームをテストする方法(https://scapy.net/)
  • デバッグ作業を支援するグローバル統計レジスタスナップショットの実装方法。

機能性

ループバックの機能は、この例の主な焦点ではありません。私たちは、上記の箇条書きされた項目をすべて実証することに重点を置いています。BittWare NICカードやスイッチなどのサードパーティ製デバイスに接続する際、DACケーブルの設定を確認するために使用します。

Loopbackには、処理するフレームを選択するL2フィルターが含まれています。これらのフレームにIPv4パケットが含まれている場合、LoopbackはMAC層とIP層の両方でソースアドレスと宛先アドレスを入れ替えます。LoopbackはARPパケットに応答することができます。これは、サードパーティーのデバイスを特別に設定する必要をなくすために追加されたものです。

ループバックは、1つのQSFPケージで動作し、入力から出力までパケットをループさせます。追加の QSFP ケージは使用されません。

ループバック・ブロック図

ハードウェア

このLoopbackは、スピードグレード2のXilinx VU9Pチップを搭載したBittWare XUP-P3Rボードで設計、テストされました。ループバックは外部メモリを使用しないので、CMACを搭載したBittWare XilinxUltraScale+ チップに移植することができます。

FPGAビットストリームの概要

ループバックのFPGAビットストリームには、いくつかのコンポーネントが含まれています。各コンポーネントは、データプレーンとして使用される入力と出力の両方にまとめてAXI4-Streamインターフェイスを備えています。ビットストリームの制御プレーンは、物理PCIeインターフェイスに接続されたAXI4-Liteインターフェイスを使用します。

デザインの流れ

Loopback は、Xilinx IP Integrator Project として提供されます。いくつかのコンポーネントはVerilogで書かれています。3つは、Verilogを生成するXilinx HLSフローを使用して記述されています。

現在の実装では、IP Integrator の観点から、HLS で書かれた 3 つのコンポーネントを 1 つのコンポーネントにまとめています。しかし、これら 3 つのコンポーネントは、ここでは別々に文書化されています。実際には、これらは 4 つの異なるコンポーネントとして文書化されています。これは、HLS コンポーネントが共通の "パーサライブラリ" を共有しているためで、重複を避けるため、個別にドキュメントを作成します。

空の見出し

AXI4 フロースルーBittWare IP
AXI4 フロースルーBittWare IP

リセットと統計

哲学的には、リセット時にすべてのコンポーネントが有効になりますが、「最小の害」をもたらすモードで初期化されます。その後、ループバックが正常に動作し始める前に、ソフトウェアがコンポーネントを設定する必要があります。

また、各コンポーネントは、ハードウェアやソフトウェアのデバッグを支援するために、統計レジスタを公開しています。すべての統計レジスタの値が時間的に同期するように、スナップショット信号が含まれています。

AXIインターフェイス

ビットストリームのインターフェース幅とクロックスピードは、100ギガビットイーサネットのトラフィックをホストするために選択されました。データプレーンのAXI4-Streamインターフェイスは、512ビット幅です。CMACに触れる部分を除き、このインターフェイスのクロックは300MHzである。フレームメタデータは,AXI TUSER ビットという別のバスで移動し,AXI TLAST がハイのときに有効なデータとなる.

メタデータは、ビットストリーム全体で一貫性がありません。したがって、各コンポーネントに関連する文書には、そのコンポーネントが入力時に期待するメタデータと、出力時に転送するメタデータが記述されています。

注:このLoopbackの実装では、メタデータはフレームデータの後に続きます。これは、NetFPGA.orgの学術チームが行った設計上の決定とは逆です。彼らは、各フレームの宛先を事前に知っておくと便利なルーターを構築するために最適化したのです。一方、ループバックは、ビットストリームのサイズとレイテンシーを中心に最適化されました。メタデータを引きずることで、各コンポーネント内のバッファリングが少なくて済む。

ビ ッ ト ス ト リ ーム制御 イ ン タ ーフ ェ イ ス は、AXI4-Lite ス レーブで32 ビ ッ ト 幅です。すべての読み出しと書き込みは32ビットです。バ イ ト 順が重要な場合、 ループバ ッ ク は制御レ ジ ス タ がネ ッ ト ワ ー ク ま たはビ ッ グエンデ ィ ア ン バ イ ト 順でデー タ を保持す る こ と を前提 と し ています。

我々は、コンポーネント自体の記述とは別に、コンポーネントのコントロールプレーンレジスタを1つの場所で文書化しています。相互参照は、ユーザーが 2 つの場所を行き来するのに役立つように存在します。ループバックの制御レジスタに使用されるメモリ マップは、ザイリンクス HLS ツール チェーンの AXI4-Lite インターフェイスの実装要件に大きく影響されます。

AXI の正式な定義は、ザイリンクスの「AXI リファレンスガイド」(https://www.xilinx.com/support/documentation/ip_documentation/ug761_axi_reference_guide.pdf)による。

コントロールプレーンソフトウェアの概要

BittWare Loopback Exampleは、ホストコンピュータに挿入されたPCIeカード上で動作します。BittWare 、そのホストコンピュータがExampleの機能を制御するためのソフトウェアを提供します。この制御ソフトウェアは、ホスト上で動作するPython 3を使用します。

Example のソフトウェアは、BittWare'sBittWorks II Toolkit の上に構築されています。具体的には、BwHILとBmcLibライブラリにPythonバインディングを追加しています。そして、これらのバインディングを、例のビットストリームがPCIeアドレス空間で公開するレジスタを操作するために作成されたPythonコンポーネントのコレクション内で活用します。

また、Loopback Exampleのビットストリームでは、いくつかのハードウェアイベントをPCIeの割り込みに変換しています。これをサポートするために、Loopbackのソフトウェアは、これらの割り込みをPython呼び出しに変換します。

Loopback Exampleビットストリームを使用した、非常に基本的な操作方法を説明します:

$# 最初にToolkitのコマンドラインまたはGUIを使用してPCIeカードをマッピングします。
                $ bwconfig--add=usb # デバイス0として最初にUSBにマッピングされます。
                $ bwconfig--add=pci # デバイス1と同じカードがPCIeにマッピングされている。
                $ python3# python3 の起動
                >>> from components.hildev import *.
                >>>カード =カード(1)
                >>> card.show_stats()# 全コンポーネントの統計情報を表示します。
                >>># CMACの最初のコンポーネントの統計情報を、いくつかのオプションを付けて表示する。
                >>> card.cmac[0].show_stats(showall=False, doTick=False)
                >>> help()
                >>> exit()
                

すべてのPythonコンポーネントは、低レベルメソッドの共通のコレクションをサポートしています。なお、このPythonの実装では、PCIeメモリマップをハードコーディングしていません。代わりにPythonは、利用可能なFPGAビットストリームコンポーネントとそのレジスタ、およびPCIeアドレス空間内のレジスタの位置を定義するJSONデータベースを読み取ります。このJSONデータベースは、Loopback Exampleのドキュメントから自動的に生成されます。

Python API の完全なドキュメントは、BittWare's Developer Site で入手できます。

ローレベルのメソッドは以下の通りです:

  • list_regs()
  • find_reg(パターン)
  • list_fields()
  • find_field(パターン)
  • リード32()、ライト32()
  • リード64()、ライト64()
  • reg_get(), reg_set()
  • maton64(macaddr)、n64toma(val64)

利用可能な上位メソッドは、特定のコンポーネントに依存します。しかし、いくつかのメソッドは比較的一般的です:

  • イネーブル()
  • ショウ()
  • show_stats()

ループバックの詳細についてご興味のある方はこちら

Loopbackの詳細は、App Noteの無料ダウンロードで入手できますので、以下のフォームから今すぐ入手してください!

アプリノートを入手する

インスタントPDFダウンロード

このページで紹介するのは、Loopbackのサンプルです。アプリノートには、さらに詳しい情報が掲載されており、しかも無料でダウンロードできます!アプリノート全文のPDFをご希望の方は、フォームにご記入の上、お申し込みください。

"*"は必須項目

名称*
PDFはこのアドレスを使って送信されますので、これが有効なメールであることを確認してください。
住所・都市名*