FIFO Empty と Full フラグの発生について  - Community Translated (JA)

Version 1

    Community Translated by  MoTa_728816          Version : *A

     

    質問Cypress FIFO メモリにおいて FIFO Empty Full フラグはどのように発生されますか?

     

    回答FIFO 2つのポートを有しています。一方は書込み用で、他方は読み出し用です。それぞれのポートは固有のカウンタで対象アドレスを管理しています。書込みカウンタは毎回書込み処理後にインクリメントされます。 同様に読出しカウンタは各読出し処理後にインクリメントされます。この2つのカウンタの値が一致したということは、FIFO が空(Empty)か一杯(Full) であることを示します。この状態がEmptyであるか、Full を判断することが処理の要です。下図に読出し、書込みポインタの構成を示します。

    1. 読出しポインタと書込みポインタ

     

    kba8.jpg

    読出しポインタが書込みポインタに追いついた場合 FIFO Emptyです、そして書込みカウンタが読出しカウンタに追いついた場合 FIFO Fullです。

    検出方法の1つは各カウンタを1ビット大きくとることです。MSB以外のカウンタビットはFIFOアレイをアドレスすることに使用されます。この構成においては、カウンタが1周するまでにすべてのロケーションは2回アクセスされます。書込みカウンタの MSB が読出しカウンタの MSB と一致している場合、FIFO Emptyです。両カウンタの MSB が異なり、かつ両カウンタの値が一致した場合、FIFO Fullです。この手法では Emptyフラグと Fullフラグの生成が比較的容易です。FIFO のロジックが Full状態の FIFO への書込みと Empty状態の FIFO からの読出しを防げるため、カウンタ値が FIFO の容量以上に離れてしまうことはありません。この仕組みによって古いデータを再度読み出してしまうことや、新しいデータを(未読データに)上書きしてしまうことが回避できます。