U50 用の 100G Ether をコンパイル
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。
関連する 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 で書いている(らしい。要確認)
これを理解すると LED とか簡単に使えるようになる、、、かもね。 書く xo の(CU の) connectivity は config_files の下にある。 これでどう接続されているかがわかる。やっぱり AXIS しかないのね。 あと SLR のどっちに配置するかもここに書かれている。
100G-fpga-network-stack-core これ面白そうね。TOE とか HLS で書いてある。かなり使えそう。