FIFOのお悩み

FIFOというのはFirst In First Outの事で

最初に入ってきたデータを最初に出しますよ

と言うIC(IP)です。

これはFPGAの中では割と簡単に構築する事ができます。

そして、データの取り出しも1クロックの遅延をきちんと意識すれば

それほど苦労する事なく行う事ができます

 

1.インプットの有効なデータがある時は同じタイミングでwen信号をHighにする

2.データの取り出しが準備できたらrenをHighにするとデータが出てくる

3.FIFOのデータが入ってるかどうかはusedwやFull/Emptyの信号で確認する

 

最初の頃はFIFOのメモリはとても小さいので嫌だったのですが

FIFOの役割は、データを蓄える事よりも、タイミングの吸収にありました

特に違うクロックドメインの間を繋ぐ時には、なくてはならないものです

 

さて、私が苦労した外部FIFOは、いろいろな特徴がありました

まずFIFOFPGAの外部にある事が厄介でした。

どういうことかと言うと、データを送ってくるデバイスFPGAの外にあるので

書き込む信号はFPGA側が合わせてやる必要があります。

そして、書き込み信号は、データより2クロック早く指示してやる必要があり、最初の2クロックは書き込みに使われません。

今はなんと言う事もないですが、この条件はFPGAの初心者の私には過酷でした。

更に先にも書いた様に、200クロックのデータが書き込まれるまで、データの読み出しは、無効になります。

 

一つ一つ終わらせて行けばいいのですが、FIFO(メモリ)の厄介なところは、メモリを正しく書けて、正しく読めて初めて成立するので、取り出したデータが正しくない場合、何が悪かったかがわからない場合があります

開発が進んでくると、データが整ってくるので、だんだん楽になってきますが

一番最初は、泣きそうなほど訳がわかりませんでした。

 

f:id:info-akiron-com:20201019233322g:plain

FIFO simulation