my_FPGA_BOARDではFT2232HのPORT Bを通信I/Fとして使用しているので、同期型245FIFOではなく、非同期型245 FIFO (FT245 Style Asynchronous FIFO)が使用できる。
FT2232Hを非同期型FT245モードにするには、EEPROMで設定する必要がある。
ただし、この設定方法が若干判り辛い。 非同期FT245にする場合はPORT A, B双方を245モードに設定しなければならない。
具体的には、EEPROMに書き込むFT_PROGRAM_DATA構造体のRev 7 (FT2232H) Extensionsの部分のIFAIsFifo7とIFBIsFifo7を1にする。
これで、非同期FT245モードになる。 ソフトウェアからFT_SetBitMode関数で設定する必要はない。
RTLはUART版の場合は以下のような構造にしていた。
FT245版では以下のようにuart_coreが無くなり、uif_v2に相当する部分をft245ifとして、FT245 I/Fとのハンドシェイク回路もこのモジュールに持たせた。
FT245 I/Fのハンドシェークの仕様は以下のようになっている。 受信(FT2232H→FPGA)はRXF#とRD#によるハンドシェーク、送信(FPGA→FT2232H)はTXE#とWR#によるハンドシェークである。データバスは共通なので、一時に送受何れかのみの通信となる。つまり半二重だ。
RTLは以下のように記述した。
RXF#、TXE#ともにFPGAの内部クロックにとっては非同期信号になるので、同期化(FF2段受け)しているが、これはハンドシェークループの中では信号を遅延させていることにもなるため、通信速度の律速要因となってしまう。 以下はモジュールの単体シミュレーションの波形だが、これから受信の最大転送レートは133.34ns (7.5MB/sec)、送信の最大転送レートは106.67ns (9.37MB/sec)となった。 ただし、これはあくまでもモジュール単体での論理的最大値である。
FT245版のロジアナと従来のUART(8Mbps)版のロジアナとでバッファ長4Mの場合のデータのアップロード時間を比べてみた。
UART版は約20秒要している。
これに対し、FT245版は約3秒だった。
FT245版がUART版よりも高速ではあるが、単体シミュレーションで求めた送信の最大レートと比べると遅い。まだ、どこかに改善の余地があるのかも知れない。
※ 補足 (2014.6.23追記)
ロジアナのバッファ長は1サンプル単位で表現していて、1サンプルは32bit、つまり4バイトである。
したがって、バッファ長4Mはバイト数では16Mバイトということになる。 UART版は通信パラメータは語長8bit、1ストップビット、パリティ無しでボーレートは8Mbpsなので800Kバイト/sec。 16Mバイト転送に要する時間は16M/800K = 20[sec]となり上述の値と一致する。 一方、FT245版の方は論理的には9.3Mバイト/sec位は出る筈(但し、FT2232Hのデータシートでは8Mバイト/secが最大と書いてある)だが、現状は16M/3sec = 5.3Mバイト/secである。
0 件のコメント:
コメントを投稿