Hi, I work for a small company and we're looking at replacing some of our old designs FPGAs (in this case because of part availability). This also happens to be my first FPGA design so the learning curve is kind of steep :)
The board takes data from a digitiser and averages it - it is complicated by the fact that it is for a radar system so it is divided into range gates. Each I/Q channel has its own averager board. The averager stores the intermediate result in a FIFO and uses an ALU to add or subtract the next result to the intermediate result (eg if there is phase flipping during transmition). The averaged result is stored in a final FIFO to be read out [a short time] later.
/16 /16 Dig -----> ALU ----+-> Right Shift -----> FIFO ^ | | FIFO |/32 | | | +------+
Unfortunately while it works in a behavioural simulation, a PAR simulation doesn't. I imagine I have used an incorrect construct somewhere so I am not synthesising what I want, although the RTL diagram looks OK to me.
Strangely I find that the results are fine but the final FIFO is either not clocking the data in properly, or not clocking it out properly.. However if I test it in isolation it works fine.
Also, due to the fact that this is supposed to be a drop in replacement I can't change the overall design.. This is bad because it's quite old and has some pretty dubious features - eg there are no smarts on the card as such - they are all driven by a separate card in the rack, so there are several effective clock signals :(
I have applied some basic timing constraints, and when looking at the resulting timing diagrams it seems that there is plenty of time for the data to be valid on the input side of the final FIFO before the write clock is applied.
I am using Xilinx WebPack 8.2 with a Spartan 3.
Any hints where to look would be much appreciated.