Skip to main content

β: This English translation is in beta — the Traditional-Chinese original is the authoritative version.

Lab 09 — Design trade-off scaling synthesis

Breadcrumb: Simulation labs › Noise & jitter › This page (design trade-offs intro). Upstream: lab_06, lab_08; advanced version: lab_17.

The first eight labs exercised each mechanism one at a time. This synthesis lab introduces no new simulation; instead it treats [P1] Eq.(21) — the signature equation — as a map of design knobs: holding everything else fixed, separately sweep qmaxq_{max}, Γrms\Gamma_{rms}, and the ring stage count NN, and watch how the phase noise L\mathcal{L} and the rms jitter σt\sigma_t move. Throughout we use the canonical numbers (spec Section 8) for back-of-envelope arithmetic, building the reflex of "turn this knob, gain that many dB".

Physical intuition (conclusion first): 1/f21/f^2 phase noise Γrms2/qmax2\propto\Gamma_{rms}^2/q_{max}^2. There are only two broad roads to lower phase noise: make the signal charge qmaxq_{max} larger (store more energy, so the noise is relatively smaller), or make the ISF Γrms\Gamma_{rms} smaller (make the waveform insensitive to noise). Both are 20log1020\log_{10} relationships: doubling qmaxq_{max} → phase noise 6-6 dB; halving Γrms\Gamma_{rms} → also 6-6 dB. A ring oscillator's NN moves two things at once — watch the net effect carefully.

1. Learning objectives

  • Read [P1] Eq.(21) as a scaling law and build design intuition for qmaxq_{max}, Γrms\Gamma_{rms}, and NN.
  • Use the canonical numbers to compute "how many dB / how many fs one knob buys".
  • Understand the two-sided nature of the ring oscillator's NN (ΓrmsN3/2\Gamma_{rms}\propto N^{-3/2}, but power/area grow too).
  • Connect the scaling conclusions to the design-insight pages.

2. Mathematical model

The starting point is [P1] Eq.(21), p.185:

L{Δω}=10log10 ⁣(Γrms2qmax2in2/Δf4Δω2)\mathcal{L}\{\Delta\omega\}=10\log_{10}\!\left(\frac{\Gamma_{rms}^2}{q_{max}^2}\cdot\frac{\overline{i_n^2}/\Delta f}{4\,\Delta\omega^2}\right)

Expand the logarithm into "additive knobs" (fixing Δω\Delta\omega and Si=in2/ΔfS_i=\overline{i_n^2}/\Delta f):

L=20log10Γrms20log10qmax+10log10Si20log10(2Δω)+const.\mathcal{L}=20\log_{10}\Gamma_{rms}-20\log_{10}q_{max}+10\log_{10}S_i-20\log_{10}(2\Delta\omega)+\text{const}.
  • How to read it: every knob enters as 20log1020\log_{10} (voltage/charge-like) or 10log1010\log_{10} (power-like). Both qmaxq_{max} and Γrms\Gamma_{rms} enter through 20log1020\log_{10}, so "double/halve = ±6\pm6 dB".

Jitter and phase noise share the same origin: for the 1/f21/f^2 skirt, σt=12πf0Sϕdf\sigma_t=\frac{1}{2\pi f_0}\sqrt{\int S_\phi df} (spec formula 19), and SϕΓrms2/qmax2S_\phi\propto\Gamma_{rms}^2/q_{max}^2, so

σt    Γrmsqmax(固定f0, Si, 積分範圍).\sigma_t\;\propto\;\frac{\Gamma_{rms}}{q_{max}}\qquad(\text{固定}f_0,\ S_i,\ \text{積分範圍}).
  • The bridge from dB to jitter: L\mathcal{L} down 66 dB (power ×14\times\frac14) → σt\sigma_t halves (the \sqrt{}).

Ring oscillator: [P2] gives two scalings — more stages make each stage's ISF sharper but its rms smaller ([P2] Eq.(16), p.794):

Γrms=2π23η3  1N1.5([P2] Eq.(16), p.794 — v7 re-verified: the square root covers only the constant, ΓrmsN3/24/N1.5 at η=0.75, the solid line in [P2] Fig.8),f0=12NτD [P2] Eq.(15).\Gamma_{rms}=\sqrt{\dfrac{2\pi^2}{3\eta^3}}\;\dfrac{1}{N^{1.5}}\quad(\text{[P2] Eq.(16), p.794 — v7 re-verified: the square root covers only the constant, }\Gamma_{rms}\propto N^{-3/2}\text{; }\approx4/N^{1.5}\text{ at η=0.75, the solid line in [P2] Fig.8}),\qquad f_0=\frac{1}{2N\tau_D}\ \text{[P2] Eq.(15)}.
  • Looking at phase noise alone, NN from 5 → 15 (×3\times3): Γrms\Gamma_{rms} is multiplied by 33/2=0.1923^{-3/2}=0.192, a L\mathcal{L} change of 20log100.192=14.320\log_{10}0.192=-14.3 dB. But more stages → power, area, and the qmaxq_{max} allocation all change, and f0f_0 drops (unless τD\tau_D shrinks), so this is a toy scaling that "looks at Γrms\Gamma_{rms} in isolation", not a net design conclusion.

3. Block diagram

4. Core Python code

This lab produces no new figure; the scaling comes straight from back-of-envelope use of [P1] Eq.(21). The snippet below (following the conventions of simulations/lab_08_jitter_integration.py) shows how to turn knob changes into dB and fs so you can sweep the parameters yourself:

import math

def L_dbc(Grms, qmax, Si, df):
"""Hajimiri-Lee Eq.(21): 1/f^2 SSB phase noise [dBc/Hz]."""
dw = 2 * math.pi * df
return 10 * math.log10((Grms**2 / qmax**2) * (Si / (4 * dw**2)))

# canonical baseline (spec example B)
f0, df, Si = 5e9, 1e6, 1e-24
base = L_dbc(Grms=0.5, qmax=1e-12, Si=Si, df=df) # -148.0 dBc/Hz

print("baseline :", round(base, 1), "dBc/Hz")
print("q_max x2 :", round(L_dbc(0.5, 2e-12, Si, df) - base, 1), "dB") # -6.0
print("Gamma_rms /2 :", round(L_dbc(0.25, 1e-12, Si, df) - base, 1), "dB") # -6.0
# ring N: Gamma_rms ~ N^-1.5 ([P2] Eq.(16), p.794, re-verified v7: sqrt covers only the constant); show isolated scaling
for N in (5, 15, 45):
rel = (N / 5.0) ** -1.5
print(f"N={N:2d} Gamma_rms rel={rel:.3f} dL={20*math.log10(rel):+.1f} dB")

# jitter scales as Gamma_rms / q_max -> -6 dB phase noise = sigma_t / 2
  • L_dbc is not the same thing as lab_08's integrate_rms_jitter: lab_08 integrates jitter out of L\mathcal{L}; here we go the other way — use Eq.(21) to generate L\mathcal{L}, then infer jitter from the scaling. The two pages are forward and inverse operations of each other.

5. Full script path

This lab is a synthesis analysis with no dedicated script. The calculations it cites come from: simulations/lab_06_white_noise_phase_noise.py (simulation evidence for the Γrms2/qmax2\Gamma_{rms}^2/q_{max}^2 scaling), simulations/lab_03_ring_toy_model.py (LC vs ring ISF and the NN scaling), simulations/lab_08_jitter_integration.py (Lσt\mathcal{L}\to\sigma_t). The back-of-envelope snippet above can be saved as a small standalone script for your own parameter sweeps.

6. Parameter table

ParameterSymbolCanonical valueRole
Carrier frequencyf0f_055 GHzFixed
OffsetΔf\Delta f11 MHzFixed (evaluation point)
Current noise PSDSiS_i1×10241\times10^{-24} A²/HzFixed (single white source)
Maximum charge swingqmaxq_{max}11 pC (baseline)Knob 1, swept over 0.5,1,20.5,1,2 pC
ISF rmsΓrms\Gamma_{rms}0.50.5 (baseline)Knob 2, swept over 0.25,0.50.25,0.5
Ring stage countNN55 (baseline)Knob 3, swept over 5,15,455,15,45
Baseline phase noiseL\mathcal{L}148.0-148.0 dBc/HzFrom Eq.(21) (= spec example B)

7. Unit table

QuantitySymbolUnit
Maximum charge swingqmaxq_{max}C
ISF rmsΓrms\Gamma_{rms}Dimensionless
Ring stage countNNDimensionless
Phase noiseL\mathcal{L}dBc/Hz
rms jitterσt\sigma_ts
Current noise PSDSiS_iA²/Hz

8. Scaling table (back-of-envelope, toy scaling)

Take the canonical baseline L=148.0\mathcal{L}=-148.0 dBc/Hz (qmax=1q_{max}=1 pC, Γrms=0.5\Gamma_{rms}=0.5, Si=1024S_i=10^{-24}, 5 GHz @ 1 MHz) as the 00 dB reference. σtΓrms/qmax\sigma_t\propto\Gamma_{rms}/q_{max}.

Knob changeL\mathcal{L} changeσt\sigma_t changePhysical reason
qmax×2q_{max}\times2 (2\to2 pC)6.0-6.0 dB×0.5\times0.520log10qmax-20\log_{10}q_{max}; larger signal charge, relatively smaller noise
qmax×0.5q_{max}\times0.5 (0.5\to0.5 pC)+6.0+6.0 dB×2\times2Same as above, reversed
Γrms×0.5\Gamma_{rms}\times0.5 (0.25\to0.25)6.0-6.0 dB×0.5\times0.5+20log10Γrms+20\log_{10}\Gamma_{rms}; waveform insensitive to noise
Ring N:515N:5\to15 (×3\times3)14.3-14.3 dB×0.192\times0.192ΓrmsN3/2\Gamma_{rms}\propto N^{-3/2} (in isolation; [P2] Eq.(16), p.794, v7 re-verified)
Ring N:545N:5\to45 (×9\times9)28.6-28.6 dB×0.037\times0.037Same as above; but power/area/f0f_0 change too

Back-of-envelope example: doubling qmaxq_{max} from 1 pC to 2 pC changes L\mathcal{L} by 20log10(1/2)=6.020\log_{10}(1/2)=-6.0 dB → 154.0-154.0 dBc/Hz; jitter halves via the \sqrt{}. Apply the same 6-6 dB move to lab_08's 447.9447.9 fs (that was the 100-100 dBc/Hz scenario) and it drops to 224\approx224 fs.

9. How to read the figures (reusing existing figures)

Figure 1: simulation evidence for the Γrms2/qmax2\Gamma_{rms}^2/q_{max}^2 scaling. In lab_06's white-noise PSD figure, swapping the ISF for a different Γrms\Gamma_{rms} (or changing qmaxq_{max}) merely shifts the whole 1/f21/f^2 line up or down, without changing its slope — the visual version of the scaling table's "turn a knob = shift by dB".

White noise → 1/f²; changing Γ_rms or q_max only shifts the whole line, slope unchanged

Figure 2: LC vs ring ISF shape and NN. lab_03's comparison figure: the ring's ISF sensitivity is concentrated at the transitions; the larger NN, the sharper each stage's ISF but the smaller its rms (ΓrmsN3/2\Gamma_{rms}\propto N^{-3/2}). This explains where knob 3 in the scaling table comes from — and reminds you it is an isolated scaling.

LC (-sin) vs ring (triangular) ISF comparison; larger N gives smaller rms

  • How to use the two figures: Figure 1 tells you "the qmaxq_{max}/Γrms\Gamma_{rms} knobs = a vertical shift"; Figure 2 tells you "how the ring's Γrms\Gamma_{rms} varies with NN". Together they form the design map.

10. Corresponding paper equations/figures

  • Main scaling: [P1] Eq.(21), p.185, LΓrms2/qmax2\mathcal{L}\propto\Gamma_{rms}^2/q_{max}^2.
  • Parseval / Γrms\Gamma_{rms}: [P1] Eq.(20), p.185.
  • Ring Γrms\Gamma_{rms} scaling: [P2] Eq.(16), p.794 (v7 re-verified: the square root covers only the constant, ΓrmsN3/2\Gamma_{rms}\propto N^{-3/2}; the body text's 4/N1.54/N^{1.5} at η=0.75 and App. B Eq.(55) triple-confirm this. v3 had misread it as N3/4N^{-3/4}).
  • Ring frequency: [P2] Eq.(15), p.794, f0=1/(2NτD)f_0=1/(2N\tau_D).
  • Ring white-noise FOM: [P2] Eq.(23), p.796, L1/f283ηVDDVcharkTP(ω0/Δω)2\mathcal{L}|_{1/f^2}\approx\frac{8}{3\eta}\,\frac{V_{DD}}{V_{char}}\,\frac{kT}{P}(\omega_0/\Delta\omega)^2 (η\eta is the stage-delay proportionality constant of [P2] Eq.(14), 1\approx1; γ\gamma enters only through Vchar=ΔV/γV_{char}=\Delta V/\gamma).
  • Concept figures: reuses white_noise_phase_noise_psd.png (lab_06) and lc_vs_ring_isf_comparison.png (lab_03).

11. Limitations and approximations

  • Toy scaling, not transistor-level: the scaling assumes "turn one knob, hold everything else exactly fixed". In a real circuit qmaxq_{max}, Γrms\Gamma_{rms}, NN, power, area, and f0f_0 are coupled and cannot be tuned in isolation.
  • Ring NN scaling ([P2] Eq.(16), p.794 — v7 re-verified: the square root covers only the constant, ΓrmsN3/2\Gamma_{rms}\propto N^{-3/2}; the body text's 4/N1.54/N^{1.5} at η=0.75 and App. B Eq.(55) triple-confirm this. v3 had misread it as N3/4N^{-3/4}): the proportionality constant is Γrms=2π2/(3η3)1N1.5\Gamma_{rms}=\sqrt{2\pi^2/(3\eta^3)}\cdot\dfrac{1}{N^{1.5}} (η1\eta\approx1); adding stages also changes f0=1/(2NτD)f_0=1/(2N\tau_D), power, and area — the net phase noise/jitter requires the full FOM, not Γrms\Gamma_{rms} alone.
  • Single white source: ignores multiple sources, cyclostationarity (Γeff=Γα\Gamma_{eff}=\Gamma\cdot\alpha), and flicker upconversion (1/f31/f^3, see lab_07). The table does not apply in the close-in region.
  • Factor-of-2: uses Eq.(21)'s denominator 4Δω24\Delta\omega^2; it differs from the time-domain version by the factor-of-2 SSB bookkeeping, which affects none of the scaling conclusions (all dB changes are relative).
  • Jitter scaling: σtΓrms/qmax\sigma_t\propto\Gamma_{rms}/q_{max} assumes a fixed integration range and a 1/f21/f^2 shape; if close-in 1/f31/f^3 dominates, jitter is set by c0c_0 and the lower integration limit and must be computed separately.

Key takeaways

  • 1/f21/f^2 phase noise Γrms2/qmax2\propto\Gamma_{rms}^2/q_{max}^2; jitter Γrms/qmax\propto\Gamma_{rms}/q_{max}.
  • Doubling qmaxq_{max} or halving Γrms\Gamma_{rms} → phase noise 6-6 dB, jitter halved (20log1020\log_{10}).
  • Ring NN in isolation: ΓrmsN3/2\Gamma_{rms}\propto N^{-3/2} (N×314.3N\times3\to-14.3 dB), but f0f_0/power/area change simultaneously — a toy scaling.
  • Baseline numbers: qmax=1q_{max}=1 pC, Γrms=0.5\Gamma_{rms}=0.5, 5 GHz @ 1 MHz, Si=1024S_i=10^{-24}L=148.0\mathcal{L}=-148.0 dBc/Hz.

Further reading