Timing violation when use Triple speed Ethernet IP
Hi,
In my design, I use Cyclone V SoC and I need 4 ethernet channels, so I have to use Triple Speed Ethernet IP the extra channels HPS can not provide.
I referred to the example design (Niosii_ethernet_standard_3c120_rgmii.zip) and the timing constraint guide an433 and an477.
It looks like the timing constraint setting by the example is different from the description described in the guide an477, I tried both the way of an477 and the timing used in the example (I set optimization to “speed” already), neither of them pass the timing.
In the example design and my design, it only uses delay in external PHY, this means tx is edge-aligned and same edge, and rx is center-aligned and same edge in fpga.
The differences in the example design and an477 is: in the example design, no multicycle constraint is set, but in an477 and an433, the multicycle constraint should be set for tx path.
I analyzed the failed path, it looks like the data path right before clkctrl_G3 (clockbuffer) is extremely long. (See the picture attached)
Well, I do not understand why this is so long and do not know how to solve it. I’m thinking about set location constraint for this buffer, then I found out this is the closest buffer already.
The tx_clk is assigned by the following sentences:
tx_clk <= enet_tx_125 when eth_mode = '1' else -- 1G
enet_tx_2p5 when ena_10 = '1' else -- 10 Mb
enet_tx_25; -- 100Mb Mode = 25MHz clock
Therein enet_tx_125, enet_tx_2p5 and enet_tx_25 are pll outputs.
I also tried tx_clk <= enet_tx_125 to get rid of the combinational control of clock, but I did not get any progress.
Then I tried center-aligned strategy for tx-path by using PLL to phase shift tx clock output, the timing is even worse.
I'm stuck here, I need help now. My project is compiled in Quartus 18.1, and the qar file is attached here.
Any reply or response is appreciate.
Best wishes
Jasmine