U50 用の 100G Ether をコンパイル

U50

U50 用の Ether まわりの活用方法を模索していたら、たまたま、 知り合いから Xilinx の github にある情報を教えてもらったので それをコンパイルした。

github から clone

xup_vitis_network_example からまずはサンプルを clone する。 次に 100G-fpga-network-stack-core も該当するディレクトリに移動して clone。

私の環境が Vitis 2021.1 なので 100G-fpga-network-stack-core だけ branch の vnx-vitis-hls を checkout。

> git clone https://github.com/Xilinx/xup_vitis_network_example
> cd NetLayers
> git clone https://github.com/hpcn-uam/100G-fpga-network-stack-core
> git checkout vnx-vitis-hls

ライセンスを取得

100G の Ether の IP は Xilinx の無償ライセンスが必要なので 予め取得して置き $HOME/.Xilinx へコピーしておく。

コンパイル

100G-fpga-network-stack-core が xcu280 専用になっているので トップの Makefile を書き換える。

> git diff
diff --git a/Makefile b/Makefile
index c7e59ae..a42d8eb 100644
--- a/Makefile
+++ b/Makefile
@@ -10,7 +10,7 @@ create_folder_noHBM:

 .PHONY:hbm
 hbm: create_folder_HBM
-       make -C synthesis_results_HMB FPGAPART=xcu280-fsvh2892-2L-e -j4
+       make -C synthesis_results_HMB FPGAPART=xcu50-fsvh2104-2L-e -j4

 create_folder_HBM:
        mkdir -p synthesis_results_HMB

これであとは xup_vitis_network_example のトップで make すればできあがる。 DESIGN は benchmark を選んだ。basic というのもあるらしい。INTERFACE は U50 の場合1つしか口がないので 0 を指定する。

> make all DEVICE=xilinx_u50_gen3x16_xdma_201920_3 INTERFACE=0 DESIGN=benchmark

エラー

ライセンスがないとエラーになる。

> ERROR: [VPL 17-69] Command failed: This design contains one or more cells for which bitstream generation is not permitted:

ライセンスが通っているかどうかは benchmark.intf0.xilinx_u50_gen3x16_xdma_201920_3/link/vivado/vpl/prj/prj.xpr の GUI を立ち上げて IP Report を見ればわかる。Purchased なら OK。

IP Report

関連する Xilinx の情報:AR58758

テスト!!

さぁテストだ。とおもったら QSFP28 のケーブルを含む 100G の環境がない。 この環境を構築しようと思ったらうん十万円の出費になりそう。

とりあえず fs.com で次の二つを購入

  • QSFP28 100G 用 loopback コネクタ
  • QSFP28 を SFP+ へ変換するコネクタ

テストはそれが来てから

おまけ

コンパイルしてできる xo は次の通り

./Ethernet/_x.xilinx_u50_gen3x16_xdma_201920_3/cmac_0.xo
./Benchmark_kernel/_x.xilinx_u50_gen3x16_xdma_201920_3/collector.xo
./Benchmark_kernel/_x.xilinx_u50_gen3x16_xdma_201920_3/traffic_generator.xo
./Benchmark_kernel/_x.xilinx_u50_gen3x16_xdma_201920_3/switch_wrapper.xo
./NetLayers/_x.xilinx_u50_gen3x16_xdma_201920_3/networklayer.xo

これを実行する host プログラムは、、、どうやら python のみたい。Notebooks の下に ipynb などがある。

このプログラムどうやって QSFP28 の口を見つけているかというと、、、 v++ にはその機能がない!ので tcl で書いている(らしい。要確認)

post_sys_link.tcl

これを理解すると LED とか簡単に使えるようになる、、、かもね。 書く xo の(CU の) connectivity は config_files の下にある。 これでどう接続されているかがわかる。やっぱり AXIS しかないのね。 あと SLR のどっちに配置するかもここに書かれている。

100G-fpga-network-stack-core これ面白そうね。TOE とか HLS で書いてある。かなり使えそう。