2016年1月10日日曜日

EZ-USB FX2LP を動かしてみる (28 ) 長岡病みあがり編

長岡からの帰りの新幹線の車中、高崎を過ぎた辺りで悪寒を感じ始め、家に着いた時点では風邪を引いたと確信できる激寒状態になっていたわたしでした.(21時)
その後、22時には体温が37度を超えました.
0時には38度を超えました.
たぶん3~4時ごろまで高熱が続き、しかし翌朝には平熱に戻っていました.

発熱は速やかに去ったものの、まだ喉が死ぬほど痛く、トローチを手放せません.

長岡がこれほどまでに私の身体を蝕むとは想像だにできぬことでした.長岡をdisった祟りと思われる.

------
かつて、EZ-USBを動かしてみるの連載をしていました.あれからずいぶん時が過ぎましたが、また少し触っているところです.

↓ハードウエア的にはこんなになっております.左側のはXilinx SP3E-250のFPGA基板.データジェネレータとして動かします.右のがEZ-USB基板.データをPCにバルク転送するUSBインターフェースとして動かします.
PCからUSB2.0を可能な限り高速でpollingすると、16MB/Sぐらいの転送レートを出せるという実験結果を得たので、今度はデータジェネレータで発生させたデータをPCにてエラーチェックしようとしています.

EZ-USBのエンドポイント構成はこのようにしてあります.
 1) EP1 OUT     64BYTE FIFO    PC→EZUSB→FPGAへコマンドを転送する役目
 2) EP2 IN        1024BYTEx4FIFO    FPGA→EZUSB→PCへデータを転送する役目

いままで得た知見を元に、EZ-USBのプログラミングをすればなんとなくEP1もEP2も動かせたのですが、なぜかEP2のデータが化ける症状で、年末以来なんとなく悩んでいました.
症状は、
 ・データジェネレータは30MB/Secでデータを出せる(FIFOフルなら待つ)
 ・EZ-USBは16MB/Secがせいぜいなので、しばしばFIFOはフルになる
 ・FIFOが空になって、データ受け入れを開始した最初のBYTEがロストするという症状
あれま、、、という感じでオシロでCLKやWEのタイミングを観測しているのが上の写真なわけです.

結論はくだらないハナシなんですが、FPGA-EZUSB間のバスのタイミングの問題.

【死亡状態】
FPGAもEZ-USBも立ち上がりクロックで動くのでxWEが次回にskipしてる(=1バイトロスト)
【半死状態】
FPGAの一部を立下りクロックで動かしたら治ったが、FPGAの一部を半クロックで論理合成したためtimingがmetせんかった
ここで、UZ-USBのIFCLKには極性反転機能ってないんだろうか?とリファレンスマニュアルを読んだらありました.レジスタIFCFGのビット4です.なんだ在るんじゃないか?
【解決状態】
EZUSBは立下りクロックで動きます.FPGAは立ち上がりクロックで動きます.これで1バイトロストは解決しました.
教訓、
スレーブFIFOのデータロストはIFCFG[4]で攻めろ!

バカピーでお恥ずかしい限りですが、病みあがりにつき余裕で許されるに違いない.


#とりあえず、第28話をもってEZ-USBの話題は休止してます.またなにかあったら続きを書きます.

27へ   29へ

かしこ

2 件のコメント:

  1. 続編(29~) 希望

    類似のものは
    http://www.geocities.jp/altshibabou/win/ezusb_05.html
    ぐらいしか見当たらず、参考にしたいので

    返信削除
    返信
    1. りょうかいしました.
      webcam-ezusb-w5100の接続をしたいのでお勉強中でーす

      削除