Fundamentals / 09
Intersymbol Interference (ISI) and Channel Memory
A channel has memory. Because loss smears every bit out in time, the voltage the receiver sees at one sampling instant is not just this bit — it is this bit plus the leftover tails of the bits that came before. That makes the error depend on the data, which is why a perfectly fixed, perfectly linear piece of copper produces something that looks for all the world like random noise.
Best viewed on a laptop or desktop. These panels are built so you can move a slider and watch several charts answer at once. A phone has no room to put them side by side.
Why a piece of copper has a memory
Imagine shouting into a long corridor and then immediately shouting again. By the time the second shout leaves your mouth, the echo of the first is still bouncing around. Anyone standing at the far end hears a muddle — the second shout arrives on top of the first shout's tail. That is intersymbol interference, and a PCB trace does exactly the same thing to digital bits.
A fast, sharp bit enters the channel. Loss rounds its edges and stretches it out in time — the high-frequency content that made the bit sharp has been selectively attenuated. By the time it arrives at the receiver, it is wider and lower than what was sent. If the next bit arrives before that stretched-out tail has fully decayed, the receiver sees the new bit plus the leftover energy from the old one. That leftover is ISI — voltage from a bit that has already passed, sitting on top of the bit being decided right now.
Start from something already established: a channel attenuates high frequencies more than low ones. The sharp parts of a signal are made of high frequencies, so a sharp edge that goes in comes out rounded — it takes longer to get where it is going.
Now notice what "takes longer" means for a stream of bits. If one bit's energy is still arriving when the next bit's sampling instant comes round, then that earlier bit is contributing voltage to a decision it has nothing to do with. The channel is, in a completely literal sense, remembering it.
That is the whole of intersymbol interference. No nonlinearity, no noise source, no randomness — just a linear filter whose response is longer than one bit period.
One bit in, a long tail out
Drive a single bit into a lossy channel and what comes out is not a bit. It is a rounded pulse with a tail that can run for several bit periods. Split that response into three parts: the cursor — the sample you actually want — plus pre-cursor energy arriving early and post-cursor energy arriving late.
Now send real data. At any sampling instant the receiver sees the cursor of the current bit plus the tails of every neighbouring bit, added together. That sum is different for every data pattern. A long run of ones lets the channel fully charge, so the last bit of the run arrives at full amplitude; an isolated one after that run has no help from its neighbours and may not get close. Same channel, same driver, two very different voltages.
What makes it worse
ISI is worst where the loss slope is steepest across the signal's band. Two channels with the same insertion loss at Nyquist can behave very differently if one is flat and the other is falling hard — and a resonance in the middle of the band, from a via stub or a connector, does more damage than the same number of decibels spread evenly. A notch removes a specific frequency and there is no equaliser setting that puts it back.
This is why compliance patterns exist. A PRBS sequence is chosen so that, over its length, it contains the run lengths and transition densities that stress the channel — and interface specs add explicit worst-case patterns on top, because a random sequence may not produce the exact neighbour combination that closes the eye. Signing off on a pattern that never generates a long run followed by an isolated bit is how a channel passes simulation and fails in the field.
The fix is equalisation, and it is worth being precise about which kind. A decision-feedback equaliser cancels post-cursor ISI exactly, because by then the offending bits are already known — but it cannot touch pre-cursor, which has not been decided yet, and it amplifies any error it makes. Pre-cursor is the transmitter's problem, handled by feed-forward taps before launch.
Why this decides how your board behaves
- It closes the eye vertically and horizontally. The tails add to or subtract from the sample, which eats height; and because the level at the crossing is pattern-dependent, the crossing moves, which eats width. One mechanism, both budgets.
- It is deterministic, and that is good news. ISI is fully repeatable — the same data pattern always produces the same error. That is what makes it correctable in a way random noise never is.
- It scales with rate faster than you expect. Doubling the data rate raises the loss at Nyquist and halves the bit period, so the same tail in picoseconds now covers twice as many bits. Both effects push the same way. See edge rate, not clock rate.
- It interacts with everything else in your budget. Crosstalk and supply noise land on an eye that ISI has already narrowed, so the margin that absorbs them is whatever ISI left behind.
What to do about it
First, reduce the loss slope rather than the loss. ISI comes from loss that varies across the band, not from loss itself. A flat 20 dB channel is far kinder than one that falls from 5 dB to 20 dB across the same band. That is why a resonance does so much more damage than its decibels suggest, and why via stubs matter out of proportion to their size.
Then equalise, and pick the right tool for the right cursor. A DFE subtracts post-cursors exactly, because those bits have already been decided and are therefore known — that is the strongest thing you can do and it adds no noise. A CTLE boosts high frequency to sharpen the pulse, which shortens both pre- and post-cursors, but it amplifies crosstalk and noise along with the signal. An FFE at the transmitter is the only one that helps with pre-cursors, because the receiver cannot subtract a bit it has not seen yet.
Watch the interaction with crosstalk. Reaching for more CTLE boost to fix ISI is the standard move and it has a cost: crosstalk lives at high frequency too. On a dense bus you can equalise your way into a worse eye. See what closes the eye.
- Errors that correlate with the data pattern. That is ISI by definition. If the failures move when you change the test pattern, stop looking for a noise source.
- The isolated bit after a long run is the one that fails. Classic ISI signature. A run charges the channel to its DC level; the lone opposite bit that follows starts from the wrong place and never arrives. If your failing pattern has this shape, the fix is equalisation or loss, not shielding.
- An eye that improves dramatically with a short PRBS and fails on a long one. Longer patterns contain longer runs. If PRBS7 passes and PRBS31 fails, the channel's memory is longer than PRBS7 exercises.
- Equalisation that helps less than expected. Look for a notch. A DFE can cancel a post-cursor but nothing can restore a frequency the channel has removed — check the return loss and S21 for a resonance before adding taps.
Go deeper — cursors as convolution, and why the DFE can be exact
The received waveform is the transmitted symbols convolved with the channel's pulse response. Sample that at the decision instants and the convolution becomes a sum:
Everything about ISI is in that second term. Note what it is made of: known filter coefficients hk multiplied by actual data symbols an−k. It is not noise — it is a deterministic function of the bit stream.
Which is exactly why a decision-feedback equaliser can be exact rather than approximate. By the time the receiver is deciding bit n, it has already decided an−1, an−2 and so on. Those values are known, not estimated. So the post-cursor sum can be computed and subtracted with no residual and, crucially, without amplifying anything — a DFE adds no noise gain, which is what distinguishes it from every linear equaliser.
The catch is in the word "decided". If a decision is wrong, the DFE subtracts the wrong correction from the next few bits and can make them wrong too. That is error propagation, and it is the reason a DFE is not simply strictly better than a CTLE.
Why pre-cursors exist at all. They look like a violation of causality — energy arriving before the bit that caused it. It is not. The cursor is defined at the peak of the pulse response, and the pulse has a leading shoulder before that peak. Energy labelled "pre-cursor" arrives after the edge that launched it; it merely arrives before the moment we chose to call time zero. A physical, minimum-phase channel produces a small pre-cursor and a large post-cursor tail, which is exactly the asymmetry the panel above shows.
Where the cursor should be sampled. Not at the peak of the pulse response — at the point that maximises the eye. Those are usually close and are not the same, because shifting the sampling instant trades pre-cursor against post-cursor. This is what a receiver's clock-recovery loop is converging on, and it is why an eye measured at a fixed phase understates what an adaptive receiver achieves.
In the real world
ISI is the impairment that most repays being understood rather than measured. Because it is deterministic, it can be predicted before hardware exists, budgeted precisely, and removed by design. That is why channel simulation is worth doing at all — the dominant impairment on a long link is the one you can calculate.
The trap is treating the resulting jitter number as if it were random. Data-dependent jitter does not average out, does not improve with longer capture, and does not add in quadrature with random jitter the way two Gaussians do. Put it in the deterministic column of the budget and keep it there. See jitter taxonomy.