Slew, not exponential. The DCO starts 2.0 MHz fast. Every decision says early, and a one-bit detector cannot say how early, so the integral path walks the frequency down by α = 4 kHz per cycle: a straight ramp. The frequency error is gone after 402 cycles, but by then the edge is 814 ps early. The decisions still say early, so the ramp runs on past zero until that phase is paid back, and turns again. The error settles after about 1202 cycles (12.0 µs).
f_ref = 100 MHz, N = 40, f_out = 4 GHz. DCO noise random-walks the edge by 0.44 ps rms per cycle. Pull-in ≈ 4.40 MHz.
Frequency: a ramp, then hopping ±β
Phase error at every reference edge
Second half: 1.24 ps rms, 7.07 ps peak to peak.
The detector: a sign, smoothed by jitter
With jitter the average answer grows smoothly with e: 2.66 per ps near zero.
Jitter against the step size
Lowest of these at β = 100 kHz (0.87 ps rms). Smaller steps fall behind the DCO's random walk; larger ones make a larger limit cycle. Each point averages three noise seeds over 10 000 settled cycles, starting locked, with α/β kept at the current ratio.
Model and related lessons
A cycle-by-cycle model at the reference rate. The timing error e is the divided DCO edge minus the reference edge. A DCO frequency error f moves the next edge by −f·T_ref / f_out, 0.0025 ps per kHz per cycle. The detector compares each reference edge with the nearest feedback edge, so e wraps at ±T_ref / 2 = ±5 ns: a cycle slip. Reference jitter is white and enters only at the detector; the DCO's white FM noise L(1 MHz) adds a random walk of (1 MHz / f_out)·√(10^(L/10) / f_ref) per cycle. The integral path acts with the same latency as the proportional path. Not modelled: DCO quantization and its ΣΔ dithering, detector metastability, frequency-acquisition aids and divider retiming. python/pll_bang_bang.py reproduces each run exactly and checks the limit-cycle, pull-in and erf formulas against the simulation.
Start with a linear detector in the PLL introduction. The same one-bit detector recovers a receiver's clock in Clock and data recovery. Next: Integer-N vs fractional-N.