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で非同期になる.
バスを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に書かれているが使う場面は無さそうなので割愛
上記以外にもレジスタ設定(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 件のコメント:
コメントを投稿