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.
|47: (C) 2012-14, DJ Greaves, University of Cambridge, Computer Laboratory.|