FX3の高速化検証3 ~論理的な速度の考察と結果~【2013/09/20】
前回のブログでは、全体の仕組みや検証結果、サイプレス社との検証の違いについて説明をしました。
簡単に前回のブログの内容をまとめると、FPGA~FX3のGPIFⅡインターフェイスまでは380MB/s、FX3~PCまでは340MB/sの転送レートとなりました。

今回は、後者のFX3~PCまでの転送レートについて少し考察をしてみたいと思います。
(前者のFPGA~FX3については、弊社独自の技術のため説明は割愛します。ただし、高速転送を支えているのがFPGAの内部処理技術になります!!!!)

まず初めに論理的にはFX3~PCまでどのくらいの転送レートが出るのか検討してみます。
この論理的な転送レートの検討については、FPGAマガジンNo.2のP31の特集記事および、アプリケーションノートAN86947が参考になります。(というか記事の内容そのものです。)
USB3.0バスの転送性能(スループット)は5Gbps(625Mバイト/s)といわれています。
しかし、FPGAマガジン「【転送レート400Mバイト/sをたたき出す!】システムのボトルネックをアナライザでじっくり調べる」の記事では、2つの要因でUSB実行転送速度が低下すると説明されています。

1.8b/10b符号変換によるもの
2.リンク層での制御やプロトコル層でのパケットの付加によるもの

どちらもUSB3.0の規格上の仕様になりますがどのような影響があるのか検討します。

1の8b/10b符号変換とは、8bitのデータを10bitへ符号化する変換です。
そのため、USBバスを通るデータは10bitに符号化されたデータとなります。
つまり、実際のデータ伝送効率=8/10=0.8倍となります。
そのため、1秒間に625Mバイトのスループットだとしても、その中を通る実データは625MB/s×0.8=500MB/sとなります。
つまり、8b/10b符号変換を採用したことにより、論理的に125MB/sの転送性能ダウンが発生するのです。
2のパケット付加も1.と同様の理由によりUSBバスの転送レートを低下させる要因となりますが1.のように論理的に計算することは難しいと思います。
それは、1パケットで見るとわかりやすいのですが、全データの伝送ということで考えると、各部の処理速度や相互のタイミングなど複数のことが複雑にからむためです。
そこで、この2の影響による性能をみるために今回は実際に転送速度を計測してみることにしました。
この時に参考になるのが、サイプレス社から出されているアプリケーションノートAN86947です。

前回も記載をしましたが、このアプリケーションノートによると、バルク転送のサンプルアプリを用いることにより、454,300KB/s(=443MB/s)のスループットを実現できると書かれています。念のため、SVI-06改ボードのFX3をアプリケーションノートにあるファームウェアに書き換えて実際に実験をした結果、アプリケーションノートと同様の速度となりました。(注:全く同じ速度になっていますがSVI-06改ボードでの実測値になります。)

当然、アプリケーションノートに記載のバルク転送でも、1および2の影響を受けていることになります。
そのうえで、結果として454,300KB/s(=443MB/s)のスループットが確認されたということは、1と2両方の影響を受けたとしても、FX3~PCへのデータ伝送の実測した転送レートとして443MBは出すことができるということになります。
2だけの単独の結果ではないのですが、1の論理的な転送レート(500MB/s)を踏まえてみても、443MB/sはUSBバスの転送レートの上限に近いのではないかと考えられます。

2を単独で論理的に求められているわけではありませんが、USBバスの論理的な転送レートの上限として443MB/sと考えてもよいと思います。
今回の検証システムでは、FPGA~FX3まで380MB/sであるため、USBバスの転送レートによる制限を受けることはありません。
そのため、380MB/sがFX3~PCの転送における転送レートの目標値として目指したいと思います。

次回以降はこの目標値を達成させるために行った各部分での方策について説明していきます。

» 前の記事へ戻る » FX3高速化検証4