Thanks for the info. I would appreciate a link to the doc you've mentioned.
I didn't refit after adding the constraints - I just re-ran timingquest. I know that when I've tried this before, if I were to re-run the design with the new constraints, it will work.
My problem is that I don't understand what's happening. I don't know what are the correct constraints are for data leaving the lvds block. I've relied on whatever is built in to the models that I'm using. So far it's been fine. In this case, it looks like it's failed, since it appears that a set-up time of 4 and a hold time of 3 is what's required and it's failing the hold time one. And that coupled with what it's telling me about about data arrival/required times, then as you say it's telling that there is a problem here.
That optimize paths setting I know isn't set to all paths - it's on the default setting. I've seen this set to all paths on designs and I've seen the fitter report correcting hold time errors by delaying signals. I presume this should be tried first? Is this a good way to do things?
Since I have control of the phase between clocks, I thought that if I could understand what is happening and what the fix is, then I could adjust the timing and make it more solid without relying on the fitter to look for ways of delaying a signal.
When I tried to change the relationship in the PLL between sclk and the register clock, those two edges were still always together and there were hold errors. It was only when I tried changing the sclk and leaving it's enable alone, that I saw the errors disappear. In fact it didn't matter whether you went +ve or -ve phase, it solved the problem. You could see on the waveform that the launch and latch edges were seperate.
The way I have the pll set-up is:
c0 = 625mhz to lvds
c1 = 156.25mhz enable with 25:75 mark:space to lvds
c2 = 156.25mhz for clocking logic
So, the problems are between c0 and c2. From what I can see in my notes, changing the phase relationship between c0 and c1, keeping everything else the same, results in the rising edge of c2 (latch) being first and then c0 (launch) being second. It seems to be like that irrespective if the phase is +ve or -ve.
Thanks
MT