タイミング解析とCDC
非同期FIFOでは相手のポインタを同期化して使うので、見えるポインタの値が2〜3サイクル古くなる。この遅れがfull/emptyの判定に与える影響として正しいものはどれか。
- Afullやemptyの解除が遅れるだけで、あふれや空読みは起きない
- Bfullの判定が遅れるので、書き込みすぎてデータがあふれることがある
- Cemptyの判定が遅れるので、空のFIFOから読み出してしまうことがある
答えと解説を見る
正解:A. fullやemptyの解除が遅れるだけで、あふれや空読みは起きない
書き込み側が見る読み出しポインタは古い値なので、実際より読み出しが進んでいないように見え、FIFOは実際より多く詰まっていると判断されます。つまりfullは本当に満杯になったときには必ず出ていて、空きができてからの解除が少し遅れるだけです。読み出し側のemptyも同じで、新しく書かれたデータが見えるのが遅れるだけです。どちらも安全側(悲観的)に働くのでデータは壊れませんが、その遅れの分、性能を保つために深さに余裕を持たせます。