A FIFO is a first-in, first-out queue.
A FIFO typically has some internal storage limit (its capacity) but the interface is independent of that.
FIFOs are either synchronous or clock-domain crossing.
Synchronous FIFOs are either bubble-free (simultaneous read and write operations are always possible) or internally-pipelined (effect of a read or write is only visible at the opposite port a clock cycle later, also known as fully-registered).
A FIFO can help achieve timing closure, but again the protocol must be transactional and a bubble-free FIFO cannot always be used owing to its combinational path(s), hence latency is introduced.
|49: (C) 2008-13, DJ Greaves, University of Cambridge, Computer Laboratory.|