SiTCP ラ イ ブ ラ リ
第 1.2 版

2021 年 5 月 26 日

内田智久
Electronics system group, IPNS, KEK

加筆修正：(株)Bee Beans Technologies

1 / 13

履歴修正日版数

内容

2011/01/18

1.0

初版制定

2012/10/24

1.1

1.1 版

以後、メンテナンスとして(株)Bee Beans Technologies が加筆修正
2021/05/26

1.2⚫

章「はじめに」の追加⚫

SiTCP バージョンに関する記述修正⚫

Xilinx ツール（Vivado）およびファイル形式（edf）を追記⚫

図 1 のタイトル挿入

2 / 13

はじめに本文書は、内田智久博士が作成した「SiTCP ライブラリ」を(株)Bee Beans Technologies（以下 BBT）が加筆修正したものです。SiTCP は内田智久博士が開発し、BBT が管理・配布を行っているネットワーク・プロセッサです。

内容
BBT から配布されているネットワーク・プロセッサ(SiTCP)のライブラリ使用方法を解説した文書です。
SiTCP の概要や各信号意味などは別文書「SiTCP 説明書」を読んでください。
Verilog-HDL を用いて説明しますが VHDL でも同様の方法で合成する事が可能です。

予備知識⚫

Xilinx 社の ISE Design Suite（以下 ISE）および Vivado Design Suite（以下 Vivado）の使い方⚫

TCP/IP および Ethernet の基礎知識

Verilog-HDL ソースコードから Xilinx 社の ISE または Vivado を使用して FPGA に回路を実装できる事と、実装後にネットワークを用いて動作確認する事ができる程度のネットワークに関する予備知識を想定しています。

適用バージョン
BBT から配布されている SiTCP ライブラリのバージョン 11.0 に適用します。バージョンはファイル名から知る事が出来ます。ファイル名の見方は「配布ファイル」章を見てください。

3 / 13

SiTCP ラ イ ブ ラ リ 概 要
SiTCP ライブラリは ngc ファイル形式または edf ファイル形式のネットリストで配布されています。
Xilinx 社のライブラリと同様に ISE または Vivado を用いて合成する事が出来ます。
FPGA ファミリー毎に使用するライブラリが異なりますので注意してください。

配布ファイルSiTCP ライブラリは以下の 4 つのファイルで構成されます。
1.

SiTCP ライブラリ本体である ngc/edf ファイル2.

論理合成時に使用する SiTCP ライブラリの入出力定義モジュール(v ファイル)3.

論理合成時に使用する SiTCP ライブラリのラッパー（v ファイル）4.

論理合成時に使用する SiTCP 用タイマーモジュール(TIMER.V)

ファイル名について1（ngc/edf ファイル）と 2（入出力定義モジュール）のファイル名は下の形式に従っています。
SiTCP_XC6S_32K_BBT_V110.V/ngc/edf
アンダースコアが区切り文字です。先頭から順番に下の様な意味です。
⚫

SiTCP（ライブリ名）：SiTCP ライブラリ⚫

XC6S（適用 FPGA ファミリー名）：Xilinx 社 Spartan6 ファミリー用⚫

32K（ TCP 送信バッファ容量）：32Kbyte⚫

BBT（準拠 MAC 書き込み手順）： BBT の書き込み手順に準拠⚫

V110（ バージョン）：11.0

ngc/edf ファイルはソースコードが VHDL の場合でも同様に使用する事が出来ます。
3（ラッパー）のファイル名は下の形式になっています。
4 / 13

WRAP_SiTCP_GMII_XC6S_32K.V
アンダースコアが区切り文字です。先頭から順番に下の様な意味です。
⚫

WRAP：ラッパーを意味⚫

SiTCP（ラップするライブラリ名）：SiTCP ライブラリのラッパー⚫

GMII（対応インタフェース）：GMII 用にラップ⚫

XC6S_32K（ラップするライブラリ名の詳細）：
SiTCP_XC6S_32K_BBT_V110 用

各ファイルの関係
以下に各ファイルの意味と合成工程を示します。

図 1 各ファイルを用いた合成工程
ライブラリは ngc/edf ファイル形式のネットリストで配布されます。ngc/edf ファイルは論理合成済みのファイルです。
ユーザーが回路を設計する時は HDL コードであり論理合成する前の状態です。この状
態で論理合成済みのライブラリを使用する為にはライブラリの入出力定義さえあればライブラリ部分を空にしたまま論理合成する事が出来ます。
論理合成するとユーザーの HDL コードも ngc ファイルになります。この ngc ファイルの中で SiTCP ライブラリは空のモジュールとして定義されています。
5 / 13

空のライブラリ部分にライブラリ本体を組み込んで一つの合成済みファイルが完成します。この完成したネットリストを用いて配置配線を行い合成が終了します。
以上から、論理合成する時には空のライブラリ HDL モジュール・ファイルが必要である事、配置配線する時には ngc/edf ファイルを読み込む必要があります。
ISE/Vivado は配置配線時に空モジュールのネットリストファイル（ngc/edf ファイル）を作業ディレクトリから自動的に探し出して合成します。従って、ngc/edf ファイルは必ず ISE/Vivado 作業ディレクトリに置かなければいけません（BBT 補足：ISE では[AddSource]、Vivado では[Add Sources] - [Add or create design sources]で追加した場合はディレクトリを任意に設定可能）。空の HDL モジュールは他のソースファイル（HDLモジュール）と同じ扱いです。

シミュレーション・モデル
SiTCP はシミュレーション・モデルを用意していません。理由として次の 2 つがあります。シミュレーション・モデルが必要なほど複雑なインタフェースではない事、
TCP/Ethernet をシミュレートする為にはユーザーが作成する PC のシミュレーショ
ン・モデルが複雑になり過ぎる事です。

シミュレーション時に注意する点
シミュレーション・モデルが無いので SiTCP を含むシミュレーションはできません。
そこで以下の事に注意して設計した回路のシミュレーションを行ってください。
1.

TCP コネクション開始、終了時の動作

2.

TCP I/F の FIFO Full 時の動作

1 について：TCP コネクションが確立した時に TCP_OPEN_ACK が H になります。シミュレーショ
ン時には TCP_OPEN_ACK を L から始め、一定時間経過後に H に遷移するようにシミュレーションしてください。また、TCP 終了時のシミュレーションも行ってください。
特に TCP_CLOSE_REQ が L から H に遷移し、その後 TCP_CLOSE_ACK を返す部分は規定を守っているか確認してください。

6 / 13

2 について：
TCP 通信は受信 PC の性能やネットワークの状況により想像を大きく下回る転送レートになる事があります。TCP 通信では送信バッファが必ず Full になる時があると仮定して設計してください。SiTCP ライブラリを用いた開発で発生する問題の大部分は Fullについての考察がされていない事が原因である事が多いです。Full を乱数で振って発生させるなど出来るだけ厳しいシミュレーションをしてください。

サンプル回路SiTCP ライブラリの実際の実装の習得や性能評価を行う為に Xilinx 社から販売されている評価ボードに SiTCP ライブラリを実装したサンプル回路が幾つか配布されています。
Xilinx 社 FPGA と Ethernet PHY デバイスが搭載されたボードなら同様に実装する事が出来ますので、配布されているサンプル回路を参考にして実装してください。他の評価ボードを使用する時は該当 FPGA ファミリー用の SiTCP ライブラリに変更する事を忘れないでください。
以下で Spartan6 評価ボード SP601 用サンプル回路について解説しますが、この回路のSiTCP バージョンは最新ではありません。最新バージョンは BBT の GitHub(https://github.com/BeeBeansTechnologies/SiTCP_Netlist_for_Spartan6)でダウンロードできます。

サンプル回路の機能と構成
Xilinx 社の評価ボード SP601 に以下の機能を実装します。
⚫

Gigabit Ethernet 対応 SiTCP⚫

TCP ループバック・サーバ⚫

RBCP による DIP SW 値の読み出し⚫

RBCP による LED 制御

サンプル回路のブロック図を次に示します。

7 / 13

図 2 サンプル回路ブロック図

配布ファイル
配布ファイルとそのディレクトリ構成は以下です。
⚫

XC6S_SP601_SiTCP（トップ・ディレクトリ）⚫

CoreGen ディレクトリ（Xilinx ライブラリ）⚫

ISExx ディレクトリ（ISExx 作業ディレクトリ）⚫

SiTCP ディレクトリ（SiTCP ライブラリ・ファイル）⚫

Src ディレクトリ（サンプル回路の Verilog-HDL ソースコード）

COREGEN ディレクトリ
サンプル回路で使用している Xilinx ライブラリに関するファイルが格納された Core
Generator の作業ディレクトリです。
サンプル回路では次のライブラリを使用しています。
1.

sys_dcm.*：システムクロック生成用 DCM

2.

gmii_dcm.*：Gigabit Ethernet 送信クロック生成用 DCM

3.

sitcp_fifo.*：TCP ループバック用同期 FIFO

sys_dcm：外部クロックソース（200MHz）から FPGA 内で使用するクロックを生成
gmii_dcm：外部クロックソース（200MHz）から GbE 送信クロック 125MHz（GTX_CLK）を生成する DCM
8 / 13

sitcp_fifo：TCP ループバックに使用する同期 FIFO メモリ

ISEXX ディレクトリ
ISE の作業ディレクトリです。フォルダ名の xx に ISE のバージョンが入ります。例えばフォルダ名が ISE11 ならばバージョン 11 の ISE で合成した事を意味しています。
bit ファイルを生成する為に必要なファイルと合成結果が格納されています。ISE にプ
ロジェクトファイル isexx.xise を読み込ませることで再合成する事が出来ます。
サンプル回路は合成時の ISE バージョンが同じか新しいもので合成することができます。古いバージョンでは合成できませんので注意してください。
以下の UCF ファイルはこのディレクトリに格納されています。
⚫

XC6S_SP601_SiTCP.ucf

SITCP ディレクトリ
先に説明した SiTCP ライブラリのファイルが格納されています。

SRC ディレクトリ
ソースコードが格納されています。
⚫

トップモジュール：⚫

スローコントロール・レジスタファイル：

XC6S_SP601_SiTCP.V
RBCP_REG.v

合成時の注意NGC ファイル
ISE 合成する時にライブラリの ngc ファイルをコピーするのを忘れないようにしてください。以下のファイルを必ず作業ディレクトリにコピーしてください。
⚫

SiTCP_XC6S_16K_BBT_V40.ngc（SiTCP ディレクトリから）⚫

sitcp_fifo.ngc（CoreGen ディレクトリから）

9 / 13

ソースファイルの指定方法
トップモジュール内の include 文によりソースファイルを読み込みます。ISE のソース
ファイル読み込み指定はトップモジュール（XC6S_SP601_SiTCP.V）と ucf ファイル（XC6S_SP601_SiTCP.ucf）の 2 つを指定してください。
（注意）ISE12 で include 文を使用すると正常に合成できないという報告を受けています。ISE12 使用時に合成できないようでしたら include 文を削除し、include 文で指定されていた全てのファイルを ISE プロジェクトから直接読み込むように変更して合成してください。

動作確認
手順
⚫

Ping コマンド動作確認⚫

PC のネットワーク設定⚫

Ping コマンドによる応答確認⚫

TCP 通信⚫

スローコントールPING コマンドの動作確認
接続を確認するために ping コマンドを使用します。
OS の設定により PING コマンドが使用できない事がありますので、Ping コマンドが動くかどうか試してから SiTCP のテストを行ってください。
PING コマンドの動作確認方法
Windows の場合1.

使用する PC をインターネットに接続

2.

コマンドプロンプトを開く

3.

ping yahoo.co.jp を入力

4.

Reply from xxx.xxx.xxx.xxx と表示されれば OK（xxx は Yahoo の IP アドレス）

10 / 13

Linux の場合
1.

使用する PC をインターネットに接続

2.

ターミナルを開く

3.

ping yahoo.co.jp を入力

4.

Reply from xxx.xxx.xxx.xxx と表示されれば OK（xxx は Yahoo の IP アドレス）

5.

Ctrl+C で終了

使用できない場合
PC または構内ネットワークのセキュリティーレベルが高いと思われます⚫

Yahoo ではなく研究室内の PC に ping コマンドを送ってみる⚫

セキュリティーレベルを下げるなどで動作確認を行ってください。

PC のネットワーク設定
絶対に公共ネットワークにサンプル回路を接続しないでください。公共ネットワークと独立したネットワーク上でテストを行ってください。例えば、HUB を介して PC とサンプル回路を直接接続する（公共ネットワークに接続されていない）専用ネットワークを用いてテストする（下図参照）。

図 3 テスト環境例
サンプル回路は IP アドレス 192.168.10.16 で動作するので、サンプル回路と通信できるように PC のネットワーク環境を設定します。
11 / 13

PC のネットワーク設定を以下の様に設定してください。
⚫

IP アドレス：192.168.10.2⚫

サブネットマスク：255.255.255.0

ネットワーク知識がある方は上記以外の値を設定しても構いません。

PING コマンドによる応答確認
コマンド：
ping 192.168.10.16により応答がある事を確認してください。応答がない場合、実装が失敗しています。

TCP 通信ループバック回路が実装されています（ポート番号 24 番）。PC から送ったデータがSiTCP で受信され、そのまま送信されて PC へ戻ってきます。
以下では Telnet を用いた動作確認方法について紹介します。
telnet 192.168.10.16 24入力窓から文字をタイプすると入力文字が表示されます。ローカルエコーが有効な設定
では入力した文字が 2 文字ずつ表示されます（入力した文字と戻って来た文字の２文字）。ローカルエコーが無効な場合は入力した文字が表示されます。ターミナルソフト
により最初の数文字が文字化けする事がありますが、問題ありません。
自分でプログラミングする場合はソケット・プログラミングにより TCP クライアントを作ってください。

12 / 13

スローコントロール
RBCP を用いて LED の点灯、消灯などを行う事が出来ます。
アドレスマップ
アドレス

レジスタ名

R/W

説明

0x00-03

FPGA version

R

トップモジュールで定義されている`define FPGA_VER 32'hxxxx_xxxxの xxxx_xxxx 部の値が読み出せる

0x04-07

FPGA ID

トップモジュールで定義されているR`define FPGA_ID 32'hxxxx_xxxxの xxxx_xxxx 部の値が読み出せる
0x08

LED

R/W

書き込んだ値が LED に表示されます。
bit2-0 が LED に接続されています（1 で点灯、0 で消灯）

0x09

DIP SWDIP SW 設定値の読み込みR

bit3-0 が DIP SW に接続されています
0x0A-0F

GPR

R/W

レジスタファイル
読み書きができます。回路動作に影響を与えません。

参考文献
SiTCP の論文：T.Uchida, “Hardware-Based TCP Processor for Gigabit Ethernet,”
http://hdl.handle.net/2261/15490
SiTCP 説明書

内田智久／BBT

13 / 13