Using a spread-spectrum clock in a PCIe spec helps reduce the risk of radiated emissions issues. However, not all solutions are compliant.
One of the main drawbacks of spread-spectrum clock (SSC) would be the need for a system with a common reference clock (Refclk) architecture, in which everyone gets a copy with skew of less than 12ns. However, that's another set of high-speed differential signals to send around your board(s).
The PCIe Refclk is specified at 100MHz ±300ppm. When you use a constant frequency clock and everyone obeys this requirement, there should be no need to distribute a reference clock to every device. Devices can be up to 600ppm apart and everything should be fine. To keep the buffers from over-running, PCIe uses an elastic buffer and periodically broadcasts SKIP sets that are ignored by the receiver.
For spread-spectrum clocking, the PCIe allows modulation from 0 to minus-0.5% of nominal frequency, with a modulation rate in the range of 30kHz to 33kHz. That is to say, they allow downspreading to minus-5,000ppm, which would take two devices far out of the ±300ppm range. Meaning, there has to be one system clock to rule them all, being distributed throughout the system from a common source, with skew held to less than 12ns.
You would really have to go out of your way to violate the 12ns skew rule, but now you have to buffer and distribute multiple copies of the same clock to the various devices within your system. You can build a system that splits clock domains, if necessary, but it is simpler in a closed system to distribute the same clock, instead of creating multiple clock sources.
Also, note that buffering, fanning out and redriving the Refclk gives you plenty of opportunity to add jitter, and the PCIe does have Refclk jitter requirements that must be followed. We want to add jitter–just not the wrong kind of jitter.
The SSC is generally the way the industry has gone, but not all implementations from various vendors are quite up to spec. I don't have any names to name, but there are vendors that (for whatever reason) have chosen solutions that are not spec compliant. They seem to work, most of the time, so who's going to notice?
In the mass market electronics industry, I suppose, it is still the buyer.
What was the point of all of this spread-spectrum clocking? It is to spread the energy out over a spectrum of frequencies, so that no peak would poke up above the EMC limit and cause trouble. All the energy is still there and being radiated, but in many cases, spreading it out reduces interference-related issues. At least it looks better on a spectrum analyser. It's generally a good thing, in my opinion, if done properly. But it is definitely another opportunity for us to make a mistake and get a buggy behaviour.
This article first appeared in EDN.