2015年4月20日月曜日

EZ-USB FX2LP を動かしてみる (24) スレーブFIFOの仕様

今まではEZ-USBのOUT方向ばかり(PC→EZ-USB→外部)弄ってきましたが、IN方向(PC←EZ-USB←外部)を動かしたいので、外部回路(FPGA)がFIFOへデータを書く作法を調べてみました.

FIFOの社会の窓
Ref. manualを読むと、FIFOが外部世界とインターフェースするには2通りあって、
  2) GPIFマスタ
  3) スレーブFIFO
のどちらかであるようです.
GPIFマスタは、FIFOと外界の途中にGPIFがデーンと存在しています.GPIFが外部回路の望む仕様に小細工してくれます.
スレーブFIFOは、FIFOが外界に剥き出しになっていますので、融通は外部回路(FPGA)で利かせてねと言ってます.
なるべく高速でインターフェースしたいので、余計な物が介在しないスレーブFIFOで動かしてみたく思います.
外部ピンアサイン
↓外部ピンのアサインにはこの図の3モードあります.
  1) 外部ピンをFIFOとは無関係のユーザーIOポートとして使う
  2) GPIFマスタ
  3) スレーブFIFO
意味の判らぬポートがいろいろ見えます.気になるのはスレーブFIFOの、SLRD,SLWR,FLAGA,FLAGB,FLAGC,FLAGD,SLOE,FIFIADR[1:0],SLCS のあたりでしょう.

スレーブFIFOの外部ピンの意味

下記の事項をRef. Manualから読み取りました.これだけ知ってればFPGAを設計出来ると思います.

【IFCLK】
入力または出力.

EZ-USB内部発生の30/48MHzを出力するか、または外部発生の5~48MHzを入力するかのどちらか.
外部発生clockは、外部発生clockが採用される前に安定的に供給されなければならない.

FIFOのアクセスは、同期/非同期 が選択可能です.非同期の場合はIFCLKは使わない系でしょう.IFCONFIG[3]=1で非同期になる.

【FD】
データバスなので双方向.

バスを16bit(FD[15:0])または8bit(FD[7:0])を選択できる.
しかも、16bitか8bitかを各FIFO別に選択できる.

<レジスタ設定>
EPxFIFOCFG[0]=WORDWIRE=1    FIFO[15:0]
EPxFIFOCFG[0]=WORDWIRE=0    FIFO[7:0]
EPxは、EP2/EP4/EP6/EP8のいずれか.

外部ピンとの対応は、  FD[15:8]=PD    FD[7:0]=PB

EP2/EP4/EP6/EP8のFIFOが全て8bitバスに設定されているときには、PDをuserIOとして利用可能.

16bitバスの場合は、ホストとの通信は全て偶数サイズになる.

IO方向はSLOEで制御される.(後述)

【SLRD/SLWR】      SLはslaveの意味
EZ-USBへの入力ポート.

SLRD=read enable  (PC→EZ-USB→外部)  (原則として負論理だが反転可能)
SLWR=write enable  (PC←EZ-USB←外部)  (原則として負論理だが反転可能)

FIFOポインタはSLRD/SLWRの立ち上がりエッジで一つ進む. (正確にはde-assertエッジ)
(これは非同期の場合かもだが、同期でも似たものだろう)

【FLAGA,B,C,D】
EZ-USBからの出力ポート.FIFOの状態を外部に知らせる役割.

それぞれが下記の意味を持つ.(原則として負論理だが反転可能)
  FLAGA = PF (Programmable flag)
  FLAGB = FF (full fulag)
  FLAGC = EF (empty flag)
  FLAGD = EP2PF (EP2のPF)
PFの意味はユーザー定義可能で、詳細はRef.Manualに書かれているが使う場面は無さそうなので割愛

ただし、上記の意味がどのFIFOについて述べているのかは、FIFOADR[1:0]が指定したFIFOである.

上記以外にもレジスタ設定(PINFLAGAB/CD)で変更可能だが割愛する.
上記はPINFLAGAB/CD=0の場合の動作である.

【SLOE】
EZ-USBへの入力ポート.

FDの出力enable  (原則として負論理だが反転可能)

【FIFOADR[1:0]】
EZ-USBへの入力ポート.

どのFIFOにアクセスするかを決める.
 0 = EP2
 1 = EP4
 2 = EP6
 3 = EP8

FIFOは常に4本あるわけではなくて、一本しかない設定(EP2の総取り)などもあり得るので、その場合は設定234は無視されるのだろう.

【PKTEND】
EZ-USBへの入力ポート.

INモード(PC←EZ-USB←外部)の時に意味を持つ.

packetサイズが512BYTEならば、FIFOに512BYTE溜まるまでEZ-USBは何もしないのが基本動作である.しかし、例えば320BYTEをFIFOに積んだ時点で当面FIFOに積むデータが無いんだという場面では、FPGAがPKTENDにパルスを入れると、EZ-USBは見切って320BYTEのpacketを送信する.

【SLCS】
EZ-USBへの入力ポート.

要するにチップセレクト.

FLAGDとの排他的選択です.

【FPGAがFIFOにwriteするstateマシン】
(IDLE) 書き込みイベントが発生したら(1)へ
(1)      FIFOADRS出力
(2)      FIFOfullならwait、xFIFOfullなら(3)へ
(3)      FD出力(負論理)、SLWR出力(負論理)
以上のsetup/holdを満たすため、xIFCLKでFPGA回路を動かすのが吉と思われる.

その23へ    その25へ

かしこ

INDEXページへ
https://hirasakausb.blogspot.com/2019/03/ez-usb-fx2lp-index.html

0 件のコメント:

コメントを投稿