Hardwareは以下のように、FRISKの箱に入れた。
Spartan3E基板で動作確認しているところ
Bit Bang ModeにはAsynchronous ModeとSynchronous Modeがあるが、 プログラムはSynchronous Modeを使っている。 ただし、読み出しはFT_ReadではなくFT_GetBitModeで行っている。 FT_Readが上手く使えればいいのだが、私の使い方ではFT_GetBitModeよりもLatencyが大きくなってしまう。 以下のプログラムでRead Latencyを評価した。

Synchronous ModeはWriteに同期してReadが行われるので、FT_Writeの後にFT_Readを実行して、1バイトのデータがリードできるかを、FT_SetTimeoutsのタイムアウト値を変えながら見てみた。
リードのタイムアウト値が1msecの場合は以下のようになった。

少しずつ増やしてみたが、結局70msecでまともにリードできた。

ということは、つまり、FT_Readを使った場合少なくともRead Latencyは70msecを要するということだと思う。 FT_232Rは256深度のRX Buffer(FIFO)を持っているので、FT_Readを256個単位で実行するようにすれば、1個あたりのLatencyは小さくできるかも知れない。ただし、リードがライトと同期すること、そして、JTAGのTCKの波形をライトで作るので意味のあるリードデータは半分の128個になるので、良くて0.5msec位だろう。 また、jwrtの構造上、最大16bit分しかまとめ書きできないので、Latencyは4msec位にしかならないだろう。これに対してGetBitModeのLatencyは3msec程度でリードできているので、FT_GetBitModeを使うことにした。
しかし、何か腑に落ちないんだよねー。
もちっと高速にリード出来てもいい気がするんだよなー。
以下はSpartan3E 250Eに書き込んでみたところ。
な、なんと763secもかかっている。

以下はROM(xcf02s)に書き込んでみたところ。
1718sec!!

ちなみに、以下はプリンタポートにつなぐタイプの自作JTAGプログラマでXCF02Sに書き込んだ場合だ。

両者の比較
体積はおよそ30分の1、
性能は100分の1。。。だぁ~~ orz
という訳でFT232Rを使いこなすためには、もっと修行が必要なようだ。
でも、今はFT232Hというデバイスも出ているので、FT232Rで頑張るよりも
そっちを使った方が楽かも知れない。
0 件のコメント:
コメントを投稿