Asynchronous FIFO
By
Sampath .G (4009)
Vamsi krishna .V (4021)
Contents
Introduction
FIFO structure
Architecture
Asynchronous FIFO pointers
Gray code counters
Full and Empty detection
Asynchronous generation of full and empty
Introduction
An asynchronous FIFO refers to a FIFO design where data
values are written sequentially into a FIFO buffer using one clock
domain, and the data values are sequentially read from the same
FIFO buffer using another clock domain, where the two clock
domains are asynchronous to each other.
One common technique for designing an asynchronous FIFO is
to use Gray code pointers that are synchronized into the opposite
clock domain before generating synchronous FIFO full or empty
status signals.
FIFO structure
Data in
FIFO full
FIFO half
Write to FIFO
Clk write
Rst
FIFO
Buffer
FIFO empty
Data out
Read from FIFO
Clk read
Architecture
Figure: FIFO partitioning with asynchronous pointer comparison logic
Asynchronous FIFO pointers
Write Pointer:
The write pointer always points to the next word to be written;
therefore, on reset, both pointers are set to zero, which also happens
to be the next FIFO word location to be written.
Read Pointer:
The read pointer always points to the current FIFO word to be read.
The fact that the read pointer is always pointing to the next FIFO
word to be read means that the receiver logic does not have to use
two clock periods to read the data word.
Gray code counter
Figure: Dual n-bit Gray code counter style
Full and empty detection
Figure: FIFO direction quadrant detection circuitry
Contd..
Figure: FIFO is going full because the wptr trails the rptr by one quadrant
Asynchronous generation of Full and empty
Figure: Asynchronous pointer comparison to assert full and empty