10GbEのサンプルプログラムの中身を見てみる

今日はドルフィンシステム福島です。
昨年末、前回NI USRP-2954で10GbEを動かしてみるでは、USRP-2954RとSFP+ケーブルを使用して10GbEのテストプログラムを動かしてみました。
今回はそのテストプログラムの中身を見てみます。

ソフト(ホスト側=PC)の中身を見てみる

10Gb Ethernet.lvprojに含まれている"Getting Started (Loopback Test).viを開きます。


まずPC側のソフトのソースコードを見てみると、下図のようになっています。
前半の初期化処理は、
  1. USRPオープン
  2. 自分のIPアドレスと送信先IPアドレスとポートの設定
を行い、
送信処理は、
  1. 送信動作開始(Finiteなので1回だけの単発送信)
  2. 0~256の送信データを生成
  3. USRPに送信
受信処理で、
  1. USRPからU8(バイト列)を受信し、グラフ描画する
という流れになっているようです。
1台のUSRPで送受信しているので、まず送信してから受信していますね。


FPGA(USRP-RIO)の中身を見てみる

では次はFPGAのソースコード"TenGbE_FPGA.vi"を開いてみます。


トップレベルを開くと色々な制御器類が目に入りますので、ぱっと見はうんざりしますが、冷静に見ると単純です。
上側のループの内 "Register Bus"はUSRPでいつも使われているループで、ホストからの設定値をUSRPに設定しています。
"Reads status signal from the CLIP"は、SPF+コネクタの状態を表示しているだけのループ。
下側の"PORT 0"と"PORT 1"は"SPFポート0と1"に対応する処理が実行されますが、ポート番号が違う以外は全く同じ内容で、このループの中で送受信が処理されています。


で、下図がループ"PORT 0"を拡大しました(クリックで拡大図)。
"RX"と"TX"と書かれたVIにパラメータを渡しているだけですね。実際の色々な処理はこの中で行われているようです。
ちなみにこのループのクロックは、"MGT Sockeet\CoreClk156Out"が配線されており、MGT Socketのクロックが使われています。


このクロックは、156.25MHzですね。
USRP-RIOのADC/DACのループは200MHzで動くので、ADC/DACのデータを10GbEで流すにはタイミングやデータ幅など慎重に検討した方が良さそうですね。

まとめ

  • FPGA"TenGbE_FPGA.vi"では、10GbE処理ループがポート毎に用意されており、PORT0とPORT1の送受信ループが有る。
  • PORT0とPORT1の処理内容はそれぞれ同じようだ。
  • 10GbE処理ループの動作クロックは、156.25MHzのようだ。
次回は、USRP-RIOの10GbEに対してpingを送って返ってくるか試して見ます。

以上、ドルフィンシステム福島でした。

コメント