Weekly Report

dg_toe_ip_refdesign_jp.doc
TOE-IP リファレンス・デザイン説明書
Rev2.1 8/2/2010
このドキュメントは TCP オフローディングエンジン IP コアを用いたリファレンス・デザインに関して説明し
たものです。
1. 本リファレンス・デザインを理解するために必要な知識
本リファレンス・デザインを理解するためには、以下の知識を要します。
1.
2.
3.
4.
Xilinx FPGA 設計ツール ISE に関する基本的な操作方法についての知識
Xilinx FPGA 設計ツール EDK に関する基本的な操作方法についての知識
C 言語に関する知識
TCP/IP の動作に関する知識
TCP/IP の動作につきましては、各種解説書、Web サイト、雑誌などをご参照ください。
(CQ 出版 Interface 誌 2009 年 12 月号にて、TCP/IP の特集が組まれております。)
2010/08/02
Page 1
dg_toe_ip_refdesign_jp.doc
2. 動作環境
本リファレンス・デザインは以下の環境で動作します。
1. リファレンス・デザインの対応している Xilinx 製 FPGA 評価ボード(ML506 など)
2. Xilinx 製 Platform cable USB
3. シリアルケーブル
4. ISE 11.5 以降 / EDK 11.5 以降
5. ギガビットイーサネットポートを持った TCP データ受信用 PC(動作周波数 2GHz 以上のデュア
ルコアプロセッサー搭載 PC を推奨)
6. イーサネットケーブル(Cat5e もしくは Cat6)
図 1: リファレンス・デザインの動作環境
2010/08/02
Page 2
dg_toe_ip_refdesign_jp.doc
3. リファレンス・デザインの提供形態
本リファレンス・デザインは ISE と EDK を用いて作成されており、デザインの再コンパイル等を行
うためには、PC に ISE と EDK がインストールされている必要があります。
また、Spartan-3A DSP など、ハードコアで TEMAC の入っていないデバイスにおいては、再コンパ
イルの際に Xilinx 製 Gigabit Ethernet MAC IP コアのライセンスが必要になります。
主なファイルは以下のとおりです。
・ ise/ise.xise : ISE プロジェクトファイル。デザインの確認/変更をする場合は、まずこのファイ
ルを ISE で開いてください。
・ system.xmp : EDK プロジェクトファイル。EDK 部分のデザインや、簡易 TCP/IP スタックソフト
ウェアは EDK から確認できます。EDK から直接開かず、ISE から起動してください。
・ ise/system_stub.vhd : 本リファレンス・デザインの EDK 部分以外のハードウェアの記述がさ
れています。
・ test/recv_tcp_client.exe(test/recv_tcp_client.c) : 高速転送用 TCP データ受信テストソフトウ
ェア。データのパターンをチェックして、正しくデータが受信できているか、どのくらいの速度で受
信できているかを表示します。
・ test/echo_tcp_client.exe(test/echo_tcp_client.c) : 低速転送用 TCP データ送受信テストソフト
ウェア。指定したポート番号へ、指定した転送タイミングでデータの送受信を行います。
(上記 2 つの実行ファイルは、メール送信時の実行ファイル排除対策のため、tar.bz2 圧縮され
ていたり、存在しなかったりする場合があります。)
・ ise/gemac_core.xco : Xilinx 製ギガビットイーサネット MAC コアの CoreGenerator ファイル。ハ
ードコア TEMAC を持っているデバイスではこのファイルがない場合もあります。
・ ise/gemac_core_block.vhd, gmii_if.vhd : gemac_core.xco から生成された Xilinx 製ギガビットイ
ーサネット MAC コアのラッパーファイルおよび GMII インターフェース回路。
・ tcp_hw フォルダ : 簡易 TCP/IP スタックのソースが格納されているフォルダ。
IP コアに関するファイルはユーザーガイドのほうをご覧ください。
2010/08/02
Page 3
dg_toe_ip_refdesign_jp.doc
4. ハードウエアの説明
今回の TOE-IP コアは TCP の処理の一部をハードウェア化したものであり、コネクションのオー
プン/クローズ、ACK の処理、TCP 以外のプロトコルなどはすべて外付けのホストプロセッサで処理
をする必要があります。TOE に対応している OS(Windows や Linux など)であれば、TOE を活用す
るドライバを作成するだけで、本 IP コアを使用することができますが、TOE をサポートしていない
OS や、OS なしの場合は、TCP/IP スタックを作成するか、既存の TCP/IP スタックを改造する必要
があります。
本リファレンス・デザインでは、MicroBlaze を用い、OS なしで TCP データの送信ができるように
作成されており、簡易 TCP/IP スタックのほか、TOE-IP コアと Xilinx 製 GEMAC IP コアとの接続回
路、フレーム受信回路、MicroBlaze との接続回路を含んだものとなっております。
図 2: TCP データ送信リファレンス・デザインのブロック接続図
・
GEMAC
本リファレンス・デザインでは Xilinx 製 Gigabit Ethernet MAC IP コアを使用しております。TOE-IP
コアは、Xilinx 製 Gigabit Ethernet MAC IP コアと容易に接続できるよう作成されております。TOEIP コアは TCP データの送信の一部処理をハードウェア化したものなので、受信するための回路は
含まれておりません。したがって、リファレンス・デザインでは、受信するための回路が含まれてい
ます。
・ フレーム受信回路
4kbyte のリングバッファになっており、受信したフレームデータが連続して格納されます。各フレー
ムの格納アドレスは別に用意された 64 ワードのリングバッファに、受信ステータス( Good フレーム
か Bad フレームなのか)と一緒に格納されます。最新の格納アドレスがどこなのかが読み出せるよ
2010/08/02
Page 4
dg_toe_ip_refdesign_jp.doc
うになっているため、ユーザーは、最新の格納アドレスと一致するまで読み出すことで、すべてのフ
レームデータを読み出すことができます。
フレームを受信するごとに割り込みが発生します。
・ 送信データパターン作成回路
TCP で送信するデータを作成する回路です。TOE-IP のデータポートへ接続されています。指定し
たデータ数ごとに、インクリメントされた 32bit のデータを生成します。生成するデータの数も指定で
きます。受信する PC 側でデータをチェックすることで、正しくデータが送信されているかどうかが確
認できます。
・ EDK デザイン
MicroBlaze、割り込みコントローラー、LMB-BRAM インターフェースなどから構成されます。TOEIP や各種ユーザー回路へは LMB-BRAM インターフェースを介して接続されます。
注 : EDK11.5 では、EDK 標準の LMB-BRAM インターフェース IP コアは、BRAM インターフェース
の外部接続を許可しておりません。したがって、このコアを外部に接続できるよう改造したものを
pcores フォルダにユーザー IP コアとして作成してあります。
2010/08/02
Page 5
dg_toe_ip_refdesign_jp.doc
5. メモリーマップ
本リファレンス・デザインのメモリーマップは以下のようになっています。
レジスタ名
アドレス
R/W
有効ビット
説明
フレーム受信回路用レジスタ
受信フレーム格納アドレス
0x10000000-
R
[29:0]
0x100000ff
受信フレーム格納アドレスなどが格納されているリングバッファ。先頭から順に
読んで行き、最後まできたらまた先頭から読み出す。
[13:0] 受信フレーム格納アドレス。
[14] Good フレームであれば1が格納されている。
[15] Bad フレームであれば 1 が格納されている。
[29:16] 最新の受信フレーム格納アドレス。
受信割り込みクリア
0x1000100c
R/W
[0:0]
リード時:[31] 割り込み発生時に 1 になる。クリア完了後 0 になる。
ライト時:1 を書き込むことで受信割り込みがクリアされる。
受信バッファ
0x20000000-
R
[31:0]
0x2000ffff
受信したフレームデータが格納されているリングバッファ。各フレームデータの
先頭アドレスは受信フレーム格納アドレスレジスタより読み出した値に、受信
バッファベースアドレスを加算することで得られる。アドレス範囲としては
64kbyte が割り当てられているが、実際は 4kbyte のバッファになってい
る。64kbyte のアドレス範囲のうち上位 4bit は無視されているため、1つのフ
レームデータ格納中にリングバッファの最後に達し、データの途中からリング
バッファの先頭に戻っても、MicroBlaze からは連続した領域に格納されている
ように見える。
レジスタ名
アドレス
R/W
有効ビット
説明
データパターン生成回路用レジスタ
パターン長
0x10001000
W
[31:0]
ここでセットしたバイト数+1 ごとにデータがインクリメントされる。
パターン生成開始
0x10001008
W
[0:0]
1 を書き込むことでパターンの生成が開始され、TOE-IP コアへデータが書き込
生成データ数
0x10001014
W
[31:0]
まれる。0 を書くとデータの生成が停止する。
生成したいデータ数を書き込む。(パターン長+1)×データ数のデータが生成さ
れる。
レジスタ名
アドレス
R/W
有効ビット
説明
その他
TOE-IP コアコントロール
0x30000000
W
[31:0]
TOE-IP コアのコントロールインターフェースのベースアドレス。各レジスタの詳
IFG 長
0x10001004
W
[7:0]
イーサネットの IFG 長を設定できる。
リセット
0x10001010
W
[0:0]
1 を書き込むと TOE-IP コア、データパターン生成回路がリセットされる。0 を書
細は TOE-IP コアのデータシートを参照のこと。
き込むことでリセットが解除される。.
2010/08/02
Page 6
dg_toe_ip_refdesign_jp.doc
6. 動作手順
動作手順に関しましては、デモ・デザイン動作手順書(dg_toe_ip_demoguide_jp.doc)をご覧ください。
7. ソフトウェア解説
本リファレンス・デザインで用意されているソフトウェアの大きな流れは以下のようになります。詳
細は、ソースコードのコメントを参照ください。
1. ARP リクエストを出して接続先 MAC アドレスを得る。
2. TCP コネクションの接続要求を待つ。
3. 高速転送コネクションがオープンされたら、 TOE-IP を用いてパターンデータの送信を行う。デ
ータ送信完了したら、コネクションをクローズし、接続要求待ちに戻る。
4. 低速転送コネクションがオープンされたら、データを受信し、データの比較を行い、そのデータ
をそのまま送信する(エコーバック)。コネクションがクローズされたら、接続要求待ちに戻る。
5. 3、4 を繰り返す。
本リファレン スデザインは、 複数のコネクシ ョン をサポートし ていま す。 その 最大 数は 、
mytcp.h の MAX_CONN にて設定します。シーケンス番号、ACK 番号、受信バッファなどは、グロ
ーバル変数で管理され、MAX_CONN で指定した数だけ用意されます。本リファレンスデザイン
では、コネクション管理番号と呼ぶ番号でこれらコネクションを管理します。
まずはじめに、接続先 IP アドレスへ ARP を送信します。以後、ここで得られた MAC アドレス
に対してパケットを送信します。
その後、TCP コネクションの接続要求待ちになります。これは、SYN パケットが来ているかど
うかチェックし、来ていればオープン処理を行う open_connection 関数を、コネクション管理番号
を変えてループされることで行います。
今回、0 番のコネクション管理番号は、高速データ転送用コネクションとしています。このコネ
クションがオープンされた場合、TOE-IP を用いた高速データ転送が行われます。
高速データ転送を行うには、TOE-IP へ、シーケンス番号の書き込み、ヘッダ長、データ長の
設 定 な ど の 初 期 設 定 を し た 後 ( fastsend_setup 関 数 ) 、 デ ー タ パ タ ー ン の 生 成 開 始
(patterndata_reset 関数)を行います。その後、転送の指示を TOE-IP に発行します(fastsend 関
数)。fastsend 関数は、繰り返し呼び出されることで、継続した転送を行います。処理内容として
は、ウインドウサイズを MSS で割り算して、送信パケット数レジスタにセットします。以下、ウイン
ドウサイズから、受信した ACK の番号と送信シーケンス番号の差を引いたものを MSS で割っ
て、その値を送信パケット数レジスタにセットします。こうすることで、常にウインドウサイズいっ
ぱいのデータ転送を行います。ウインドウサイズを 65000 バイトに設定した場合で、MSS を十分
大きく(1460 バイトなど)し、受信側 PC の性能が十分高い場合は、本リファレンス・デザインで
平均 900Mbps 以上のデータ転送が可能になります。
受信した ACK 番号は、送信シーケンス番号の初期値を引いた値を送信完了アドレスレジス
タに書き込むことで、送信完了データの破棄を行います。
再送は、受信した ACK の ACK 番号が 3 回同じだった場合、ターゲットの受信ウインドウサイ
ズが 0 になった場合、ACK が一定時間帰ってこなかった場合の他、高速転送中に他のコネクシ
ョンや ARP のコマンド/データ発行が行われた場合に行います。retransmit フラグを立てること
で、再送処理ルーチンに入るようにしてあります。
再送処理ルーチンでは、シーケンス番号をセットして、再送指示を出し、パケットを 2 つ送りま
す。新しい ACK が帰ってくるのを確認してから、次の処理に移ります。(パケットを 2 つ送ること
で、遅延 ACK による速度低下を防ぎます。)
2010/08/02
Page 7
dg_toe_ip_refdesign_jp.doc
一度にたくさんのパケットを送っている関係上、その途中のパケットのみロストした場合、ロス
トしたパケットの再送信後、現在送っているシーケンス番号が、受信した ACK 番号より古くなる
場合があります。その場合、この ACK 番号を次の送信シーケンス番号としてセットし、再送信を
行います。
送信の最後では、必ずしもデータの残りが MSS サイズではない場合があるため、データの最
後から MSS サイズ前のデータを、MSS サイズ分送ります。こうすることで、最後のパケットも
MSS サイズとなります。この処理は、再送処理ルーチンを流用して実行されます。最後のパケ
ットだけ送信データ長を変える方法もありますが、本 TOE-IP コアは 200 バイト以下のデータ送
信をサポートしていないため、最後のデータの長さが 200 バイト以下になったときは別途対策
が必要になるため、このように次の先頭データを最終データに結合しパケット長を MSS サイズ
に合わせる方法を採用しています。
fastsend 関数は、返り値として、コネクション確立から転送完了したデータ数を返します。これ
が送りた いデータ 数と 一致 した場合、 転送 完了 となり ますので、コネク シ ョンのクロ ーズ
(close_connection 関数)を行います。
低速転送コネクションでは、コネクションのオープンは同様に行います。受信したデータは、受
信割り込み内で、データ部分を取り出し、各コネクションごとに用意されたテンポラリバッファへ
転送されます。その後、recv_data 関数内で、指定された数のデータを取り出し、ユーザーのバ
ッファへコピーします。FIN フラグを受け取っている場合は、コネクションのクローズ処理を行い
ます。main 関数内で、データパターンの照合を行い、その後そのデータをそのまま送信するよう
になっています。
長時間転送を行っていると、接続先から ARP リクエストが送信される場合がありますので、
それに応答できるように、ARP 応答ルーチンをループ部分に入れています。ARP 応答ルーチン
では、ヘッダの内容を ARP 応答フレームに書き換え、ARP 応答を送信し、元のヘッダ情報を欠
き戻すようになっています。
これら実装はあくまで一例で、輻輳制御を入れる、再送のタイミングや手法を改善する、など
で動作もかなり変わってきます。受信側機器によってどの手法が有効かも変わってきますので、
ソースを改変していろいろお試しいただくのがよろしいかと思います。
2010/08/02
Page 8
dg_toe_ip_refdesign_jp.doc
8. 制約事項・注意点
現在のリファレンスデザインは 32bit プロセッサーで使われることを前提としているため 32bit アドレ
ス空間という制約から 4GByte 以上のデータ転送には対応しておりません。 ただし TOE-IP コアのハ
ードウエア自体としては 4GByte を超えるデータ転送に対応しておりますので、32bit のプロセッサーで
あっても、ソフトウェア側で 4GB 以上のデータを扱うようにプログラムを変更することで対応可能です。
2010/08/02
Page 9
dg_toe_ip_refdesign_jp.doc
9. 改定履歴
リビジョン
1.0
1.1
1.2
2.0
2.1
日付
2009/11/09
2009/12/02
2010/02/05
2010/04/07
8月2日
内容
第 1 版のリリース
低速版サンプルソフトウェアの記述を削除
転送中の ARP およびデータ転送終了処理の実装による説明を追記
複数同時コネクションおよびデータ受信に対応
エコーバックバージョンに変更
Copyright: 2009-2010 Design Gateway Co,Ltd.
2010/08/02
Page 10