Hi, Shaiful,
The FIFO:
The FFT and IFFT configurations that we are using employ block floating point. Essentially, each module produces an exponent. We need to keep track of these exponent and align them, if we want to know how much to shift to achieve the unity gain (see Appendix of the FFT user guide).
Since FFT produces results earlier than the IFFT core. We have to store the exponents from the FFT core first. Once the IFFT core starts outputting data, then we can align the exponent properly with those from FFT. This is where the FIFO comes into play.
As far as your actual model:
I am suspecting your multiply and add module probably has some intrinsic delay (perhaps some default pipeline module). That delay is possibly throwing off your timing (i.e. your other signals: sop, eop, valid, ... etc. are now ahead of your actual data). I would suggest figuring out that intrinsic delay (by running a simulation on that block alone). Once you figure out that delay, go ahead and delay other control signals by the appropriate amount.
Hope this helps...