Forum Discussion
My first thought is that you're skipping over a critical part, which is the setup relationship and hold relationship. Without knowing that, the output delays make no sense. I assume when doing it my way, you've set up constraints to say the external latching clock is shifted 180 degrees(or inverted, same thing). This is how your waveforms are drawn, where they're latched on the falling edge. If you've dong that, the setup relationship is 3ns, so across the interface the data can be skewed +3 compared to the clock. Then when you state that external delay is 2ns, you're saying 2 of those ns are chewed up externally, and hence the FPGA can only skew its data by 1ns compared to the clock. On the hold analysis, the hold relationship is -3ns, i.e. the data can be skewed -3ns compared to the clock. Since -1ns of that is chewed up externally, then the FPGA can skew its data up to -2ns compared to the clock and still meet timing. In the end, the data can be skewed in the FPGA between -2 to +1ns compared to the clock going off chip.
Now, the document you sent is very interesting. They do a setup multicycle of 0, which makes the setup relationship 0ns. They do a hold multicycle of -1, which makes the hold relationship also 0ns. (If this doesn't make sense, go to my TimeQuest User Guide on the wiki and look at the section on Multicycles). So in the end the setup relationship is 0ns and hold relationship is 0ns, so there can be absolutely no skew between the data and clock or it will fail timing. To be honest, I have never seen that done before and find it quite interesting. In fact, I kind of like it except for what it does to the external delays. With a setup relationship of 0ns, you have to say the -max external value is -1ns, i.e. externally there is a -1ns max skew so the FPGA now can have a +1ns skew and we'll still be at 0. The reverse is done for the hold analysis. The math is all correct, but you really can't conceptualize a -max value that is smaller than the -min value. It works because they're completely independent, i.e. the -max value is used in setup analysis and the -min value is used in hold analysis, and there is no check to see if it makes sense. Very interesting. Thanks for pointing that out. In the end its similar to the point I make about the Explicit versus Implicit Methods. For setup analysis, there are two variables used from your .sdc. One is the setup relationship(which comes from clock relationships and multicycles) and the other is the -max value. So a setup relationship of 3ns and -max value of 2ns leaves the FPGA with 3-2 = 1ns of skew to work with. But a setup relationship of 0ns and -max value of -1 will leave the FPGA with 0 - (-1) = 1ns of skew to work with. As you can see with two variables, there is more than one solution. In the end it's really trying to get to the one that makes the most sense.