Unidirectional vs. Bidirectional FIFOs

Question: What is the difference between unidirectional and bidirectional FIFO's? Why would I use a bidirectional FIFO?  How is memory shared in a bidirectional FIFO?



A unidirectional FIFO (ex. CY7C43683) has a single FIFO array that can only transfer data from port A to port B. Port A is an input only data bus while port B is an output only data bus. A bidirectional FIFO has 2 internal FIFO arrays that are completely independent of each other. They are placed in opposite directions, allowing the transfer of data from port A to B, and also from B to A. What this means is port A can write to FIFO1 and port B can read from FIFO1. In addition, port B can write to FIFO2 and port A can read from FIFO2. The bidirectional FIFO allows you to write to both ports at the same time, and read from both ports simultaneously. As such, both data bus A and data bus B are bidirectional.