もう一つのUSB接続方法


FT-232Hを利用したUSB-Avalonブリッジ

プライムシステムズ社製のFPGAボードは簡単にUSBによりFPGAへアクセスできるだけでなく、FPGAの内容をアップデートできるなど多彩な機能を備えていますが、FPGA内のAvalonBusへのUSB経由のアクセスだけならFTDI社のFT-232Hの同期FIFOモードを用い、USB-Avalonブリッジを使用することにより可能です。(FPGAのアップデート機能等はサポートされません)つまりお客様オリジナルのFPGAボードを作成する場合にFT-232Hを乗せておくことで、USB経由でAvalonバスにアクセスすることが可能となります。FT-232HはUSB-2.0 High-Speedモード対応でいくつかのモードをもっていますが、この中で最速なのは同期FIFOモードです。このモードでは60MHzのクロックがFT-232Hから出力され、このクロックに同期して転送が行われます。連続してデータを書き込みまたは読み出し転送した場合、転送速度は最大40MBytes/s程度のようです。




バスブリッジの機能
同期FIFOモードを用いてもシリアル通信の高速版としてデータの入出力をすることも可能ですが、バスブリッジ構造とすることで多彩な機能を実現することが可能となります。PCからのUSBトランザクションはAvalonバストランザクションに対応します。 たとえば、PCからAvalonSlaveである外部メモリコントローラに書き込むには、メモリコントローラの開始アドレス、バイト数、バス幅を指定してデータを送付します。たとえばメモリ上にFIFO構造を構築しておけば、メモリの許す限り大きなFIFOを設けることができますし、もちろんバンク切り替え方式のバッファでも可能です。

PCからAvalonSlaveのデータを読み出すには、同様に開始アドレスとバイト数、バス幅を指定します。対象がI/Oの場合、同一のアドレスを繰り返し読み出したい場合もあります。ブリッジでは割り込みの検出も可能です。PC上でブリッジに対して割り込みが発生したのを定期的にチェックしてデータを読みに行くようなアプリも作成可能です。


動作中の検証も可能

Avalonバスは複数のバスマスタを配置することができますので、NiosII等のバスマスターが動作中でも内部を参照したりできます。もちろんNiosIIはJTAG ICEで同様のことができますが、メモリやレジスタを参照するにはCPUの動作を止める必要があります。リアルタイムアプリケーションで止めずに状態を監視したいような場合はICEの機能は十分とは言えません。NiosIIでなくユーザーロジックやIPがバスマスタの場合もあります。こういった回路のデバッグには回路内部を好きなタイミングで見ることができる有効な手段かもしれません。
C#サンプルアプリも付属

FT232HへのアクセスはFTDI社から提供されるD2XXドライバを経由して行われます。ドライバにはdllを通してアクセスしますが、C#からdll関数を呼ぶ際には決められた手続きが必要です。そこでより簡単にアプリケーションを作成できるように、C#を使用して.NETまたは.NET Compactで簡単にアプリケーションが作成できるためのVisualStudio 2013用プロジェクトのサンプルを提供しています。お客様でアプリケーションを作成する際の参考にしていただければと思います。サンプルアプリでは任意のアドレスへの読み書きテストができるほか、メモリデバイスへの読み書き速度テストも可能となっています。サンプルアプリケーションはCPUに依存しないコードで書かれていますので、D2XXドライバ、dllがFTDI社より供給されているすべてのWindowsで動作可能です。つまりPCだけでなくFriendlyARMボードのようなUSBを搭載したWindowsCE組み込みボードでも使用可能ということです。USB経由でFPGAと簡単に接続できるようになることでWindowsCEボードの拡張性に大きく可能性が開けてきます。
サンプルアプリでは、USBバス上に複数のFT-232Hが接続された場合にデバイスの選択ができるようになっています。USBバスはハブによって多くのデバイスを接続できます。FPGA内に固有IDを持つレジスタ等を用意しておけばFPGAボードの個体判別が可能になります。
アクセスカウンター