Timing analysis and CDC
In an asynchronous FIFO, the other side's pointer is used after synchronization, so the pointer value seen is 2–3 cycles stale. What effect does this delay have on full/empty detection?
- AIt only delays the deassertion of full and empty; neither overflow nor reading from an empty FIFO occurs
- BFull detection is delayed, so too much may be written and data may overflow
- CEmpty detection is delayed, so the FIFO may be read while empty
Show answer and explanation
Answer: A. It only delays the deassertion of full and empty; neither overflow nor reading from an empty FIFO occurs
The read pointer seen by the write side is stale, so reading appears less advanced than it actually is, and the FIFO is judged to be fuller than it really is. In other words, full is always asserted when the FIFO is truly full; only its deassertion after space frees up is slightly delayed. The same goes for empty on the read side: newly written data just becomes visible later. Both err on the safe (pessimistic) side, so data is not corrupted, but extra depth is provided to maintain performance despite the delay.