ウィリアムのいたずらの、まちあるき、たべあるきーPART2

gooブログ「ウィリアムのいたずらの、まちあるき、たべあるき」がお引越ししてきました

FPGAでEthernetを操作するには?(Openstackでyahooを倒せるか?)

グリーさんが、「任天堂の倒し方、知らないでしょ?オレらはもう知ってますよ」
といったそうだけど、YAHOOは倒せるでしょうか?

OpenStack Days Tokyoで、YAHOOさんは、FPGAについて「Pythonなどで回路が書けることが重要」と
言っていました。
でも、当分そんなものが、できそうもありません。
ということは、HDL(Verilogとか)で、OpenStackのネットワークが書ければ
倒せそうです???

ということで???FPGAでネットワーク、具体的にはEthernetを操作する方法を
まとめてみたいと思います




■なぜ、OpenStackでFPGAなのか?

 OpenStackでネットワーク構築を行った場合、ネットワークが高負荷になる
ことがあります。この時、ハードウエア的にIPアドレスを振り分けられれば
(SDNみたいなことが出来れば)負荷がへるかもしれません。

 FPGAを使えば、Ethernet層のデータを取得できるので、ネットワークを
操作できるかもしれません。そこで、OpenStackでFPGAになります。

■FPGAのクロックは遅いのに?
 FPGAは、並列処理できるからです。データを振り分けて並列処理してしまえば、
遅くても処理量は大量になります。

■具体的には

 実は、FPGAだけで行うのではないです。

 ネットワークは、以下のようになります。

   物理層(PHY)
    ↓ GMII,RGMII,RMIIなど
   Ethernet
    ↓ FPGA
    IP

 電気信号が入ってくる物理層(PHY)は、余り大きな違いが無いので、
 固定的なチップを使ったほうがよさそうです。

 たとえば、NXP ARM/EX LAN&SDカード拡張子基板等がありえますが、
これは、100Baseレベルなので、1000Baseでやるには、もっといいチップがいるかも?

で、それと、FPGAをつなぎます。
インターフェースとしては、GMII,RGMII,RMIIなどがあります。
上記のチップRMIIでこれは100Baseどまりです。
1000Baseなものは、GMII等になります。

FPGAは、アルテラ(altera)、ザイリンクス(xilinx)などがあります。
ここではアルテラ(altera)で話します。
FPGAはそのままでは扱いにくいので、評価ボードがあります。
開発時はこれを使います。今回はDE0を使うとします。

Ethernetの部分は、すでに作ってあるもの(IPといいます)があります。
優勝のものもあり、それはalteraのFPGAの開発環境QuartusⅡから作れます。
オープンソースのものもあります。OpenCoresというもので
そこのEthernet MAC 10/100 Mbps :: OverviewのLatest version:Downloadから、登録すれば(左上)、ダウンロードできるようです。

QuartusⅡで、
   このIPを読み込み、
   インターネット部分の処理をverilogで記述して、
   ピン配置を指定(pin planner)して
   コンパイルして、
   FPGAに転送し、

PHY層のものと、FPGAを(RMIIなどのインターフェースに基づき)配線すれば、
出来上がりです。




■ここまでの操作について

 本に書いてあるようです。FPGAマガジンの3月号にOpenCoresのEthernetの記事があるようです。また、マクニカさんのmpression等を使えば、この辺のことは全部やってくれそうです。


 ということで、なかなか簡単にはYAHOOさんは、倒せそうにもありません。

【参考】
・CQ出版社 セミナー
 実習・ハードウェアによる大容量ストリーミング伝送システムの開発
 講師:横溝 憲治 氏