I
Ilya Kalistru
Guest
Hello, colleagues.
I'm fixing issues of the design with many clocks and its interaction on Artix7 FPGA. In order to move data from one clock domain to another I'm using double-port distributed memory with synchronous read, but this design doesn't meet timing constrains (250Mhz). Critical path consists of a trigger of the read address of the Distributed RAM, a Distributed Ram primitive and a Read data trigger. This route has total slack -3 ns. This two triggers are in neighbour slices of each other and RAM primitive is a few slices apart of them and all should look good.
But route report of Vivado tool displays that source clock (of address trigger) has delay of 6 ns, destination clock (of data trigger) has delay of 10 ns (that is strange - it's neighbour slice) and to meet this timing the tool route the path from RAM primitive to destination flop throughout entire FPGA and ends up with 13 ns delay which is 3 ns more then it should be.
Here are my questions:
1. why 2 triggers (having the same clock and placed in neighbour slices) have such a big difference of clock arrival time (6 and 10 ns)?
2. Why routing tool can't find a path with arrival time of 10 ns when it have found path with 13 ns and FPGA is almost free now?
3. How can I solve this problem?
4. Is there any document to read how to manage with such kind of problems?
I'm fixing issues of the design with many clocks and its interaction on Artix7 FPGA. In order to move data from one clock domain to another I'm using double-port distributed memory with synchronous read, but this design doesn't meet timing constrains (250Mhz). Critical path consists of a trigger of the read address of the Distributed RAM, a Distributed Ram primitive and a Read data trigger. This route has total slack -3 ns. This two triggers are in neighbour slices of each other and RAM primitive is a few slices apart of them and all should look good.
But route report of Vivado tool displays that source clock (of address trigger) has delay of 6 ns, destination clock (of data trigger) has delay of 10 ns (that is strange - it's neighbour slice) and to meet this timing the tool route the path from RAM primitive to destination flop throughout entire FPGA and ends up with 13 ns delay which is 3 ns more then it should be.
Here are my questions:
1. why 2 triggers (having the same clock and placed in neighbour slices) have such a big difference of clock arrival time (6 and 10 ns)?
2. Why routing tool can't find a path with arrival time of 10 ns when it have found path with 13 ns and FPGA is almost free now?
3. How can I solve this problem?
4. Is there any document to read how to manage with such kind of problems?