FIFO Empty と Full フラグの発生について - Community Translated (JA)
- RSS フィードを購読する
- 新着としてマーク
- 既読としてマーク
- ブックマーク
- 購読
- 印刷用ページ
- 不適切なコンテンツを報告
Community Translated by MoTa_728816 Version : *A
質問:Cypress FIFO メモリにおいて FIFO Empty と Full フラグはどのように発生されますか?
回答:FIFO は 2つのポートを有しています。一方は書込み用で、他方は読み出し用です。それぞれのポートは固有のカウンタで対象アドレスを管理しています。書込みカウンタは毎回書込み処理後にインクリメントされます。 同様に読出しカウンタは各読出し処理後にインクリメントされます。この2つのカウンタの値が一致したということは、FIFO が空(Empty)か一杯(Full) であることを示します。この状態がEmptyであるか、Full を判断することが処理の要です。下図に読出し、書込みポインタの構成を示します。
図 1. 読出しポインタと書込みポインタ
読出しポインタが書込みポインタに追いついた場合 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 の容量以上に離れてしまうことはありません。この仕組みによって古いデータを再度読み出してしまうことや、新しいデータを(未読データに)上書きしてしまうことが回避できます。