Electronic – Difference between reading data from fifo and the register

computer-architectureverilogvhdl

I am currently working on a hardware design as a part of my project in verilog.
I am fully aware that we usually use the registers to break the datapath which in turn helps us achieve timing closure. However I am not really sure if reading data from the fifo has the same effect.

So basically if I am reading data directly from the fifo and sending it some other module, do I need to register the data to break the datapath or fifo will take care of this ?

Thanks.

Best Answer

It does break the timing path the same way a register does (presuming the FIFO is proerly designed), but you also have to take the setup and hold times of the FIFO itself into consideration. Usually the setup, hold, and clock-to-output times of standard flip-flops are much better than for the block RAM modules usually used to build FIFOs. This means that you may still have timing issues if, say, the clock-to-output delay of the block RAM in the FIFO is large. You may still need to add flip-flops to the input and/or output of the FIFO module to improve the timing performance.