> I'm using Quartus II version 3.0 and am having trouble meeting setup
> and hold timing. This is a large PCI design in the
> Cyclone 12C device. The routing I'm getting is really bad so my
> setup time violations are pretty bad. I can fix the setup times by
> inserting 2 LCELL buffers on the PCI clock and placing the buffers
> in such a way to get a lot of clock insertion (around 8 ns). If I synthesize
the
design without hold time fixing enabled then I can get Tsu and Tco
> to pass (just barely). I have the PCI logic back annotated (placement
> not routing). If I then synthesize while enabling hold time fixing
> Quartus fixes most of the hold time violations but breaks the setup
> timing even though the PCI logic is back annotated. I think Quartus
> must be pretty dumb as far as fixing hold timing. If the worst
> case setup time is around 15 ns (8 ns clock insertion + 7 ns PCI setup
> time requirement) then those worst case paths should have no problem
> with hold times. If quartus just placed delays on the short paths
> it could fix hold timing. But I suspect that it's placing the delays
> around the pin and affecting both long and short paths.
>
> Has anyone else seen this? Does anyone have any idea of how to fix hold
> timing while not breaking the setup paths?
I think the best way to fix the setup and hold time problem is to fix the routing. The best way to fix the routing is to fix the placement to permit the routing to be good.
Even if you fix the timing by adjusting the relative clock delay, I don't think buffers are the way to do it. The delay from a buffer can vary over a wide range. So you may add a lot of delay max and very little min. The min delay will help with the hold time, but the large max delay will detract a lot more from the setup! Perhaps a DLL is what you need?