Skip to main content

Lab 17 — Design Sweeps: Three Design Curves for swing / Γrms / N

Breadcrumb: Simulation labs › System & advanced › This page (advanced design sweeps). Back-of-the-envelope intro version: lab_09; upstream: lab_06, lab_08.

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

lab_09 read [P1] Eq.(21) as a scaling law by mental arithmetic. This lab actually sweeps the same equation and plots it as three curves: holding everything else fixed, sweep the node charge swing qmaxq_{max} (swing), the ISF rms Γrms\Gamma_{rms}, and the ring stage count NN, and watch how the phase noise L\mathcal{L} at 11 MHz offset moves. On the plots you will see with your own eyes the "20-20 dB/decade" straight-line slope, the "2×2\times swing 6\to-6 dB" arrow, and the ring oscillator's nearly horizontal NN curve (the famous NN-independence).

Physical intuition (conclusion first): 1/f21/f^2 phase noise Γrms2/qmax2\propto\Gamma_{rms}^2/q_{max}^2. Both knobs enter as 20log1020\log_{10}: doubling qmaxq_{max}6-6 dB; halving Γrms\Gamma_{rms}6-6 dB. The ring's NN is sneakier: adding stages shrinks ΓrmsN3/2\Gamma_{rms}\propto N^{-3/2}, but the per-node qmaxq_{max} shrinks and there are more noisy devices — the three roughly cancel at fixed f0f_0/power, so net phase noise is almost independent of NN.

1. Learning objectives

  • Plot [P1] Eq.(21)'s LΓrms2/qmax2\mathcal{L}\propto\Gamma_{rms}^2/q_{max}^2 as three design curves.
  • On the qmaxq_{max} curve, quantify "20-20 dB/decade" and "2×2\times swing 6\to-6 dB".
  • On the Γrms\Gamma_{rms} curve, see "symmetric waveform / low Γrms\Gamma_{rms}\to PN↓".
  • On the ring NN curve, see where NN-independence comes from ([P2] Eq.(16), p.794 — v7 re-verified: ΓrmsN3/2\Gamma_{rms}\propto N^{-3/2}).
  • Connect the curves back to lab_09 and the Chapter 06 design-insight pages.

2. Mathematical model

The starting point is again [P1] Eq.(21), p.185 (1/f21/f^2 region, fixed offset):

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 to expose each knob's own slope:

L=20log10Γrms20log10qmax+10log10 ⁣(in2/Δf)20log10(2Δω)+const.\mathcal{L}=20\log_{10}\Gamma_{rms}-20\log_{10}q_{max}+10\log_{10}\!\big(\overline{i_n^2}/\Delta f\big)-20\log_{10}(2\Delta\omega)+\text{const}.
  • Knob 1 (qmaxq_{max}): 20log10qmax-20\log_{10}q_{max} → against a log\log horizontal axis in qmaxq_{max} this is a straight line with slope 20-20 dB/decade; qmax×220log102=6.02q_{max}\times2\Rightarrow20\log_{10}2=6.02 dB → 6-6 dB.
  • Knob 2 (Γrms\Gamma_{rms}): +20log10Γrms+20\log_{10}\Gamma_{rms} → halving Γrms\Gamma_{rms}6-6 dB; this lab uses a linear horizontal axis, so the curve is the logarithmic rise of 20log10Γrms20\log_{10}\Gamma_{rms}.

The ring's NN ([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}): adding stages moves three things at once, and the three cancel each other at fixed f0f_0/power:

ΓrmsN3/2 [P2] Eq.(16),qmaxN1 (smaller per-node swing),in2N (more devices).\Gamma_{rms}\propto N^{-3/2}\ \text{[P2] Eq.(16)},\qquad q_{max}\propto N^{-1}\ (\text{smaller per-node swing}),\qquad \overline{i_n^2}\propto N\ (\text{more devices}).

Substituting into Γrms2/qmax2in2\Gamma_{rms}^2/q_{max}^2\cdot\overline{i_n^2}:

(N3/2)2(N1)2N=N3N2N=N1N=N0=const.\frac{(N^{-3/2})^2}{(N^{-1})^2}\cdot N=\frac{N^{-3}}{N^{-2}}\cdot N=N^{-1}\cdot N=N^{0}=\text{const}.
  • Conclusion: under this toy scaling the net effect N0\propto N^0phase noise is independent of NN ([P2]'s signature result).
  • Dimension check: Γrms2/qmax2(A2/Hz)/(rad/s)2\Gamma_{rms}^2/q_{max}^2\cdot(\text{A}^2/\text{Hz})/(\text{rad/s})^2 → the bracket is dimensionless (before taking 10log1010\log_{10}), legitimate ✓; NN is dimensionless throughout ✓.

Numbers for this lab: evaluated at Δf=1\Delta f=1 MHz, in2/Δf=1022\overline{i_n^2}/\Delta f=10^{-22} A²/Hz; the baseline qmax=1q_{max}=1 pC, Γrms=0.5\Gamma_{rms}=0.5 gives L=128.0\mathcal{L}=-128.0 dBc/Hz.

3. Block diagram

4. Core Python code

simulations/lab_17_design_sweep.py uses a shared L_dbc to evaluate [P1] Eq.(21) in dBc/Hz, then sweeps one curve per knob:

import numpy as np


def L_dbc(Grms, qmax, in2_df, dw):
return 10 * np.log10(Grms ** 2 / qmax ** 2 * in2_df / (4 * dw ** 2))


dw = 2 * np.pi * 1e6 # evaluate at 1 MHz offset
in2_df = 1e-22

# (a) sweep q_max: 0.1 pC .. 10 pC -> slope -20 dB/decade, 2x -> -6 dB
q = np.logspace(-13, -11, 50)
L_q = L_dbc(0.5, q, in2_df, dw) # baseline qmax=1pC -> -128 dBc/Hz

# (b) sweep Gamma_rms: low Grms -> lower PN
g = np.linspace(0.1, 1.5, 50)
L_g = L_dbc(g, 1e-12, in2_df, dw)

# (c) ring N: Gamma_rms ~ N^-3/2, per-node qmax ~ 1/N, more noisy devices ~ N
N = np.arange(3, 31)
Grms_N = 0.5 * (5.0 / N) ** 1.5 # scaling (illustrative; [P2])
qmax_N = 1e-12 * (5.0 / N) # lower per-node swing as N grows
noise_N = in2_df * (N / 5.0) # more noisy devices
L_N = 10 * np.log10(Grms_N ** 2 / qmax_N ** 2 * noise_N / (4 * dw ** 2))
print(round(L_N[0], 1), round(L_N[-1], 1))
# -> -128.0 -128.0 (essentially flat for all N: the famous N-independence)
  • L_dbc vs lab_08: lab_08 integrates the measured L\mathcal{L} into jitter; here we go the other way, using Eq.(21) to generate L\mathcal{L} and then sweep the knobs. The two pages are inverse operations of each other (same note as in lab_09).
  • The three scalings in (c) are illustrative: the constant in ΓrmsN3/2\Gamma_{rms}\propto N^{-3/2} and the exponents for per-node qmaxq_{max} and device count are toy assumptions, meant to draw concretely "why NN roughly cancels".

5. Full script path

simulations/lab_17_design_sweep.py (main() draws the three subplots; L_dbc wraps [P1] Eq.(21) in dBc/Hz; (c) uses the toy scaling ΓrmsN3/2\Gamma_{rms}\propto N^{-3/2}, qmaxN1q_{max}\propto N^{-1}, in2N\overline{i_n^2}\propto N). Re-run: python scripts/run_all_sims.py.

Note: this page's filename is lab_17_design_tradeoffs.md (aligned with the sidebar naming convention); the corresponding script is lab_17_design_sweep.py, and the figure file is design_tradeoff_sweeps.png.

6. Parameter table

ParameterSymbolValue / sweep rangeRole
Offset (evaluation point)Δf\Delta f11 MHzFixed
Current noise PSDin2/Δf\overline{i_n^2}/\Delta f102210^{-22} A²/HzFixed (baseline); varies with NN in (c)
Maximum charge swingqmaxq_{max}(a) 0.10.11010 pC; baseline 11 pCKnob 1
ISF rmsΓrms\Gamma_{rms}(b) 0.10.11.51.5; baseline 0.50.5Knob 2
Ring stage countNN(c) 333030; baseline 55Knob 3
Baseline phase noiseL\mathcal{L}128.0-128.0 dBc/HzFrom Eq.(21) (qmax=1q_{max}=1 pC, Γrms=0.5\Gamma_{rms}=0.5)

7. Unit table

QuantitySymbolUnit
Maximum charge swingqmaxq_{max}C
ISF rmsΓrms\Gamma_{rms}Dimensionless
Ring stage countNNDimensionless
Offset frequencyΔf, Δω\Delta f,\ \Delta\omegaHz, rad/s
Phase noiseL\mathcal{L}dBc/Hz
Current noise PSDin2/Δf\overline{i_n^2}/\Delta fA²/Hz

8. Simulation figure

Three design curves: (a) q_max sweep at -20dB/dec, (b) Γrms sweep, (c) ring N nearly horizontal

9. How to read the figure

  • (a) swing sweep (blue): on a log horizontal axis, qmaxq_{max} (0.1–10 pC) vs L\mathcal{L} is a straight line with slope 20-20 dB/decade — as qmaxq_{max} goes from 0.1 → 10 pC (two decades), L\mathcal{L} drops from 108-108148-148 dBc/Hz, exactly 4040 dB. The red arrow marks "2×2\times swing 6\to-6 dB" (121\to2 pC, 128134-128\to-134 dBc/Hz). Mnemonic: double the swing, gain 6 dB of phase noise.
  • (b) Γrms\Gamma_{rms} sweep (green): linear horizontal axis, a logarithmic curve L=20log10Γrms+\mathcal{L}=20\log_{10}\Gamma_{rms}+const — smaller Γrms\Gamma_{rms} means lower phase noise, with the steepest descent at the small-Γrms\Gamma_{rms} end (halving Γrms\Gamma_{rms} from 0.5 to 0.25 → 6-6 dB). This is the payoff of "symmetric waveform / low sensitivity".
  • (c) ring NN sweep (purple): a nearly perfectly horizontal line (128\approx-128 dBc/Hz, independent of NN). Not a coincidence — it is the N0N^0 computed in Section 2: more stages shrink Γrms\Gamma_{rms} (good), but qmaxq_{max} also shrinks and there are more devices (bad); the three cancel at fixed f0f_0/power. Adding ring stages does not buy you phase noise for free ([P2]).
  • Putting it together: (a)(b) are the "knobs that truly earn dB" (raise the swing, suppress Γrms\Gamma_{rms}); (c) is the "looks tunable, actually cancels" knob — choose NN based on f0f_0, power, area, and phase-count requirements, not for phase noise.

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 / NN-independence: [P2], p.795, L1/f283ηVDDVcharkTP(ω0/Δω)2\mathcal{L}\vert_{1/f^2}\approx\frac{8}{3\eta}\,\frac{V_{DD}}{V_{char}}\,\frac{kT}{P}(\omega_0/\Delta\omega)^2 (the prefactor of [P2] Eq.(23), p.796 is 8/(3η)8/(3\eta) (η\eta being the stage-delay proportionality constant of Eq.14, 1\approx1); γ\gamma enters only through Vchar=ΔV/γV_{char}=\Delta V/\gamma. v2 mistakenly changed this to 8/(3γ)8/(3\gamma) and mislabeled it "verified verbatim"; v3 corrected it against the original PDF p.796).

11. Limitations and approximations

  • Toy scaling, not transistor-level: (a)(b) assume "turn one knob only, everything else perfectly fixed"; in real circuits qmaxq_{max}, Γrms\Gamma_{rms}, NN, power, area, and f0f_0 are coupled and cannot be tuned in isolation.
  • The three exponents in ring (c) are illustrative: ΓrmsN3/2\Gamma_{rms}\propto N^{-3/2}, qmaxN1q_{max}\propto N^{-1}, in2N\overline{i_n^2}\propto N are toy assumptions to demonstrate the cancellation; the exact constants are marked TODO: manual verification needed from [P2] page 794–796. Changing NN also changes f0=1/(2NτD)f_0=1/(2N\tau_D) (unless τD\tau_D is shrunk), which this figure does not show simultaneously.
  • 1/f21/f^2 region only, fixed offset: evaluated at 11 MHz; close-in 1/f31/f^3 is dominated by c0c_0 and the lower integration limit, where these three plots do not apply (see lab_07).
  • Single white noise source: ignores multiple sources, cyclostationarity (Γeff=Γα\Gamma_{eff}=\Gamma\alpha, lab_14), and AM–PM.
  • Factor-of-2: uses Eq.(21)'s 4Δω24\Delta\omega^2 convention; the factor-of-2 SSB-bookkeeping difference does not affect any relative (dB) slope.
  • Jitter inference: σtΓrms/qmax\sigma_t\propto\Gamma_{rms}/q_{max} (6-6 dB phase noise = jitter halved) requires a fixed integration range and 1/f21/f^2 shape; see lab_08, lab_09.

Key takeaways

  • qmaxq_{max} curve: 20-20 dB/decade; 2×2\times swing 6\to-6 dB (baseline 128-128134-134 dBc/Hz).
  • Γrms\Gamma_{rms} curve: 20log10Γrms20\log_{10}\Gamma_{rms}, halving 6\to-6 dB; symmetric waveforms / low sensitivity pay off.
  • Ring NN curve: nearly horizontal — Γrms2/qmax2in2N0\Gamma_{rms}^2/q_{max}^2\cdot\overline{i_n^2}\propto N^0, phase noise is independent of NN ([P2] Eq.(16), p.794, v7 re-verified: ΓrmsN3/2\Gamma_{rms}\propto N^{-3/2}).
  • Baseline: qmax=1q_{max}=1 pC, Γrms=0.5\Gamma_{rms}=0.5, in2/Δf=1022\overline{i_n^2}/\Delta f=10^{-22}, 11 MHz L=128.0\to\mathcal{L}=-128.0 dBc/Hz.

Further reading