Fast Fifo
Read from fifo is timing critical
Introduction
In this PPA challenge, you are responsible for fixing the timing path on the pop data output of a first-in first-out buffer (fifo). The fifo is designed to have N entries and each entry is DATA_W wide. The fifo has the standard push and pop interface along with the full and empty flags.
The boilerplate code for the fifo is provided to you and you need to modify the code to fix the timing path on the pop data output. You can use any technique to fix the timing path such as pipelining the output data or using a different architecture for the fifo. The only requirement is that the fifo should maintain the first-in first-out order and should meet the interface requirements mentioned below.
All the flops should be positive edge triggered with active high resets (if any).
Interface Definition
N => A parameter N for the number of entries in the fifo
DATA_W => The parameter for the data width of each entry in the fifo
push_i => Input signal to push into the fifo
push_data_i => Input to the module which gives the push data
pop_i => Input signal to pop from the fifo
pop_data_o => The output popped data from the fifo
empty_o => The output empty flag
full_o => The output full flagInterface Requirements
- The fifo should maintain the first-in first-out order of the data
- The push and pop operations should be independent of each other, meaning that the fifo should be able to push and pop data in the same cycle if both push_i and pop_i are asserted
- The empty flag should be asserted when the fifo is empty and deasserted when there is at least one entry in the fifo
- The full flag should be asserted when the fifo is full and deasserted when there is at least one empty entry in the fifo
- The pop data output should be valid in the same cycle when pop_i is asserted and there is at least one entry in the fifo to pop
- The push_i signal will only be asserted when the fifo is not full
- The pop_i signal will only be asserted when the fifo is not empty
Loading the interactive workspace...