
PCIexpressはPCIに代わるPCの拡張ボード用のインターフェイスとして、とても一般的なものです。
PCIeを搭載したFPGAボードではPCIe側からFPGAボード上のメモリを参照・書き換えできるような
仕組みが一般的です。しかし、FPGAボードをデータ収集装置や制御装置として使用する場合には、
高速なシリアル通信のようにストリーム入出力として使用できるほうが便利です。
本製品はこのような目的のために開発されました。
簡単でお手軽なFPGA組み込み用PCIexpress ストリーム通信モジュール

- 本製品は、CycloneIV -GX FPGA開発ボードおよびスターターキット用のQsysを含むQuartusIIの
サンプルプロジェクト、およびWindows/Linuxドライバで構成されます。プロジェクトを論理合成する
だけですぐにPCIexpress通信によるストリームデータ入出力を体験できます。
- 簡単シンプル、FPGA側はAvalonSTインターフェイスにて、PC側はWindowsおよび
Linux 2.6用のドライバが用意されていますので、
open/close/read/writeを用いて通常のストリーム入出力としてシリアル通信感覚で
FPGAのデータを読み書きすることが出来ます。
- Linuxでの読み・書き・ループバックのテストプログラムも添付。QuartusIIのプロジェクト
もドライバからテスト入力やループバックを切り替えられるように対応しています。
- FPGA側のデータは64bit パケット付きAvalonSTバスで転送されます。SPIやUART通信では
ボトルネックになりがちですが、100MHzで動作させた場合、800MB/sの広帯域です。
- PCIexpressの高速動作にはDMA転送が肝心ですが、DMAへの命令発行と転送終了には
タイムラグがあり、トータルのスループットを実現するには適切なバッファリングと
タイミングが必要です。本モジュールではRead/Writeに独立したDMAを持ち、FPGAからPCIe
への転送にはAvalonSTパケットのサイズを取得して必要な転送サイズをPCIeに通知する
仕組みを追加することで効率的な転送を実現しました。本モジュールならGen1、x4レーン
Linuxドライバにて、FPGA->PCで実測約450MB/s、PC->FPGAで実測約235MB/sの速度を実現しています。
(Gen1、x1レーンならばFPGA->PCで約166MB/s, PC->FPGAで約115MB/s)

- FPGAからPCへのFIFOは必要ですが、それ以外はFPGA側にバッファ用のメモリを持ちません。
極力メモリリソースに余裕があるPC側にバッファを確保する構造になっていますので、
限られたFPGAのハードウェアリソースを有効に活用することが出来ます。

|