Skip to main content

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

Final Exam: A 5 GHz LC VCO into a 25 Gb/s SerDes, End to End

Prerequisites: capstone_lc_end_to_end (the site-wide spine, end to end) and the three chapter exercise sets — 02 Foundations, 03 Core Theory, 06 Design Insights (finish those first) | Next: none — this is the last page. Get all 11 right and you graduate.

This is not yet another problem set. It is an exam: one design story, 11 checkpoints, from the instant a single charge impulse hits the LC tank all the way to the eye opening of a SerDes link at BER =1012=10^{-12}. Each question asks for exactly one "clean number", but every number requires cross-chapter dispatch — you will need [P1]'s ISF, [P2]'s κ and the App. B closed forms, the diffusion dictionary's wardrobe changes, the four clock-chain accounting rules, the PLL closed-loop algebra, and the dual-Dirac extrapolation. Work each one out yourself and type your answer first; only then expand the solution.

Design scenario (shared by the whole exam)

You own the clock path of a 25 Gb/s NRZ SerDes link (UI =40=40 ps, target BER =1012=10^{-12}):

QuantityValueUnitSource
VCO carrier f0f_05GHzsite-wide canonical
qmaxq_{max}1pCExample A / Example B
Γrms\Gamma_{rms} (representative)0.5Example B (a true LC gives 1/21/\sqrt2)
White-noise source SiS_i102410^{-24}A²/HzExample B
Measured L(1MHz)\mathcal{L}(1\,\text{MHz})100-100dBc/HzExample C (datasheet-grade)
PLLζ=0.707\zeta=0.707, type-II 2nd orderpll_noise_budget
Buffer floor155-155 (flat)dBc/Hzclock_chain_budget
Link DJDJδδ=1\mathrm{DJ}_{\delta\delta}=1psgiven in Question 10

Two-track honesty statement (read before starting): this exam deliberately runs two sets of numbers in parallel. Ideal single-source-limit track (Questions 2, 3, 7): a single white-noise source and [P1] Eq.(21) give 148-148 dBc/Hz — a physical floor no real circuit reaches. Measured track (Questions 5, 6, 9, 10): the datasheet-grade 100-100 dBc/Hz — 48 dB above the ideal limit, reflecting the reality of multiple sources, cyclostationarity, flicker, and the buffer chain. The two tracks must not be mixed; each question states which track it uses.

Convention flags (exam-wide discipline): all L\mathcal{L} are SSB dBc/Hz. Anything predicted from circuit noise is flagged with [P1] Eq.(21)'s SSB /4/4 convention (the time-domain /2/2 convention shifts the whole curve +3+3 dB); anything measured (100-100 dBc/Hz) follows the site rule and is booked with the small-angle L=12Sϕ\mathcal{L}=\tfrac12 S_\phi (/2/2). The 1/f³ corner is flagged [P2] Eq.(57) vs [P1] Eq.(24) (a factor-of-2 difference). Every 2 must have a first and last name — that is itself part of what is being examined.


Act 1: Oscillator core physics (Questions 1–4)

Question 1 — One impulse into the tank (impulse → Δφ)

The story opens: the VCO is still at schematic stage. You ask the most primitive question — a charge impulse of Δq=1\Delta q=1 fC sneaks in from the supply, the ISF value at the injection instant is Γ(ω0τ)=0.5\Gamma(\omega_0\tau)=0.5 (Example A's representative value), with qmax=1q_{max}=1 pC and f0=5f_0=5 GHz. Find the permanent phase step Δϕ\Delta\phi and the equivalent timing error Δt\Delta t.

Quick check (work it out yourself, then check)
fs
Graded correct within ±1% relative error; scientific notation is accepted.
Question 1 — full solution (impulse → Δφ → Δt)

Step 1 (operational ISF definition, spec formula 5; derivation in impulse_to_phase_shift):

Δϕ=Γ(ω0τ)qmaxΔq=0.5×(1×1015 C)1×1012 C=5×104 rad=0.0286.\Delta\phi=\frac{\Gamma(\omega_0\tau)}{q_{max}}\,\Delta q=\frac{0.5\times(1\times10^{-15}\ \text{C})}{1\times10^{-12}\ \text{C}}=5\times10^{-4}\ \text{rad}=0.0286^\circ.

Step 2 (phase→time, spec formula 17):

Δt=Δϕ2πf0=5×1042π×5×109=1.59×1014 s=15.9 fs.\Delta t=\frac{\Delta\phi}{2\pi f_0}=\frac{5\times10^{-4}}{2\pi\times5\times10^{9}}=1.59\times10^{-14}\ \text{s}=15.9\ \text{fs}.

Result: Δϕ=5×104\Delta\phi=5\times10^{-4} rad, Δt=15.9\Delta t=15.9 fs (canonical Example A).

Dimension check: Γ\Gamma dimensionless ×\times C/C == rad ✓; rad ÷ (rad/s) == s ✓.

Story note: this 15.9 fs is a "one impulse, one-shot" displacement; the oscillator has no phase restoring force, so it stays in the phase permanently (the heart of LTV, see lti_vs_ltv). The next three questions upgrade "one impulse" to "continuous white noise".

from simulations.common.isf_utils import impulse_to_phase_step
from simulations.common.noise_utils import phase_to_time_error
dphi = impulse_to_phase_step(1e-15, 0.5, qmax=1e-12)
print(dphi, round(phase_to_time_error(dphi, 5e9)*1e15, 1)) # -> 0.0005 15.9

Question 2 — White noise paints a whole skirt (Eq.(21) → L\mathcal{L})

A single white-noise source Si=in2/Δf=1024 A2/HzS_i=\overline{i_n^2}/\Delta f=10^{-24}\ \text{A}^2/\text{Hz} now hits the same VCO continuously (Γrms=0.5\Gamma_{rms}=0.5, qmax=1q_{max}=1 pC). Use [P1] Eq.(21), p.185 to find L(1MHz)\mathcal{L}(1\,\text{MHz}).

Quick check (work it out yourself, then check)
dBc/Hz
Graded correct within ±1% relative error; scientific notation is accepted.
Question 2 — full solution ([P1] Eq.(21), with the /4 vs /2 convention flag)

Step-by-step substitution (with units). [P1] Eq.(21), p.185 (spec formula 12):

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)
  1. Δω=2π×106=6.283×106\Delta\omega=2\pi\times10^6=6.283\times10^6 rad/s, Δω2=3.948×1013\Delta\omega^2=3.948\times10^{13}.
  2. Γrms2qmax2=0.25(1012)2=2.5×1023 C2\dfrac{\Gamma_{rms}^2}{q_{max}^2}=\dfrac{0.25}{(10^{-12})^2}=2.5\times10^{23}\ \text{C}^{-2}.
  3. Si4Δω2=10241.579×1014=6.33×1039\dfrac{S_i}{4\Delta\omega^2}=\dfrac{10^{-24}}{1.579\times10^{14}}=6.33\times10^{-39}.
  4. Product =1.583×1015=1.583\times10^{-15}, L=10log10(1.583×1015)=148.0\mathcal{L}=10\log_{10}(1.583\times10^{-15})=-148.0 dBc/Hz.

Result: L(1MHz)=148.0\mathcal{L}(1\,\text{MHz})=-148.0 dBc/Hz (canonical Example B — the ideal single-source-limit track).

Convention flag: this is [P1] Eq.(21)'s SSB /4/4 bookkeeping; the clean time-domain derivation's /2/2 convention gives 145.0-145.0 dBc/Hz (the famous 3 dB convention dispute, see white_noise_to_phase_noise). Question 3 needs the /2/2 version — remember this.

Dimension check: C2A2/Hz(rad/s)2\text{C}^{-2}\cdot\dfrac{\text{A}^2/\text{Hz}}{(\text{rad/s})^2} simplifies via C=A⋅s\text{C}=\text{A·s} to s (per-Hz); taking 10log1010\log_{10} reads as dBc/Hz ✓.

import numpy as np
dw = 2*np.pi*1e6
print(round(10*np.log10((0.5**2/1e-24)*(1e-24/(4*dw**2))), 1)) # -> -148.0

Question 3 — Put on the first of the five outfits (Lκ2\mathcal{L}\to\kappa^2\to linewidth)

Same ideal single-source VCO. A systems colleague asks: "what is the free-running carrier linewidth?" Use the reverse dictionary lookup of diffusion_dictionary: first convert Question 2's L\mathcal{L} back to κ2\kappa^2, then to the Lorentzian 3-dB linewidth (the v5-adjudicated mapping: Δf3dB=κ2/(2π)\Delta f_{3\mathrm{dB}}=\kappa^2/(2\pi), not κ2/π\kappa^2/\pi).

Quick check (work it out yourself, then check)
mHz
Graded correct within ±1% relative error; scientific notation is accepted.
Question 3 — full solution (the v5 mapping: the Lκ2Δf3dB\mathcal{L}\to\kappa^2\to\Delta f_{3\mathrm{dB}} 19.9 mHz chain)

Step 1 (settle the convention before changing outfits). The reverse dictionary formula is κ2=L/2Δω2\kappa^2=\mathcal{L}_{/2}\cdot\Delta\omega^2 — it takes the time-domain /2/2-convention L\mathcal{L}. Question 2's 148.0-148.0 is the /4/4 convention, so add 3 dB first:

L/2(1MHz)=145.0 dBc/Hz    Llin=3.17×1015 1/Hz.\mathcal{L}_{/2}(1\,\text{MHz})=-145.0\ \text{dBc/Hz}\;\Rightarrow\;\mathcal{L}_{\text{lin}}=3.17\times10^{-15}\ \text{1/Hz}.

Step 2 (back to the protagonist κ2\kappa^2):

κ2=L/2Δω2=3.17×1015×3.948×1013=0.125 rad2/s.\kappa^2=\mathcal{L}_{/2}\cdot\Delta\omega^2=3.17\times10^{-15}\times3.948\times10^{13}=0.125\ \text{rad}^2/\text{s}.

Cross-check (directly from the definition, [P2] Eq.(11)/(12), p.793, without going through L\mathcal{L}):

κ2=Γrms22qmax2in2Δf=0.252×1024×1024=0.125 rad2/\kappa^2=\frac{\Gamma_{rms}^2}{2\,q_{max}^2}\cdot\frac{\overline{i_n^2}}{\Delta f}=\frac{0.25}{2\times10^{-24}}\times10^{-24}=0.125\ \text{rad}^2/\text{s}\ \checkmark

Step 3 (put on outfit three: the linewidth). The v5-adjudicated mapping (settled by lab_23's Monte-Carlo variance slope 0.12520.1252 and linewidth fit 20.020.0 mHz, see outfit three in diffusion_dictionary):

Δf3dB=κ22π=0.1252π=1.99×102 Hz=19.9 mHz.\Delta f_{3\mathrm{dB}}=\frac{\kappa^2}{2\pi}=\frac{0.125}{2\pi}=1.99\times10^{-2}\ \text{Hz}=19.9\ \text{mHz}.

Result: κ2=0.125 rad2/s\kappa^2=0.125\ \text{rad}^2/\text{s}, Δf3dB=19.9\Delta f_{3\mathrm{dB}}=19.9 mHz (a true LC with Γrms=1/2\Gamma_{rms}=1/\sqrt2 gives κ2=0.25\kappa^2=0.25 and a 39.839.8 mHz linewidth).

Convention flags (this question is a minefield of exactly three factor-of-2s): (1) /4/2/4\to/2 differs by 3 dB — forget the conversion and κ2\kappa^2 comes out half; (2) the two DD conventions: DA=κ2=0.125D_{\text{A}}=\kappa^2=0.125 (Var=Dt\mathrm{Var}=D\vert t\vert) vs DB=κ2/2=0.0625D_{\text{B}}=\kappa^2/2=0.0625 (Var=2Dt\mathrm{Var}=2D\vert t\vert); (3) the linewidth formula Δf3dB=κ2/(2π)=DB/π\Delta f_{3\mathrm{dB}}=\kappa^2/(2\pi)=D_{\text{B}}/\piv3 once plugged the A-value into the B-formula and got 40 mHz (2× too large); v5 fixed it site-wide. The 1/f² pseudo-divergence flattens into a Lorentzian for ΔfΔf3dB\Delta f\lesssim\Delta f_{3\mathrm{dB}}, see lorentzian_linewidth.

Dimension check: 1/Hz×(rad/s)2=rad2/s\text{1/Hz}\times(\text{rad/s})^2=\text{rad}^2/\text{s} ✓; rad2/s÷2π=Hz\text{rad}^2/\text{s}\div2\pi=\text{Hz} ✓.

import numpy as np
dw = 2*np.pi*1e6
kappa2 = 10**((-148.0 + 3.01)/10)*dw**2 # /4 -> /2, then reverse lookup
print(round(kappa2, 3), round(kappa2/(2*np.pi)*1e3, 1)) # -> 0.125 19.9

Question 4 — Plan B: what if we used a ring? (App. B closed form → 1/f³ corner)

At the design review someone proposes: "the LC costs area — how about a 5-stage single-ended ring?" You answer the flicker-upconversion price on the spot with the [P2] Appendix B closed forms (asymmetric_isf_closed_form): N=5N=5, η=1\eta=1, waveform asymmetry ratio A=frise/ffall=1.5A=f'_{rise}/f'_{fall}=1.5, device 1/f corner f1/f=1f_{1/f}=1 MHz. Find the spectral 1/f31/f^3 corner ([P2] Eq.(57) convention).

Quick check (work it out yourself, then check)
kHz
Graded correct within ±1% relative error; scientific notation is accepted.
Question 4 — full solution ([P2] App. B Eq.(55)–(57), with the factor-of-2 convention flag)

Step-by-step substitution (with units). [P2] Eq.(57), p.803:

f1/f3=f1/f32ηN(1A)21A+A2=106 Hz×32×1×5×(0.5)211.5+2.25=106×0.3×0.251.75=42.86 kHz.f_{1/f^3}=f_{1/f}\cdot\frac{3}{2\eta N}\cdot\frac{(1-A)^2}{1-A+A^2} =10^6\ \text{Hz}\times\frac{3}{2\times1\times5}\times\frac{(-0.5)^2}{1-1.5+2.25} =10^6\times0.3\times\frac{0.25}{1.75}=42.86\ \text{kHz}.

For completeness, the intermediate quantities ([P2] Eq.(55)/(56), triple-verified by lab_33 on that page):

Γrms2=2π23η3N3[41+A3(1+A)3]=0.05895    Γrms=0.2428,c0=2Γdc=22πη2N21A1+A=0.1005.\Gamma_{rms}^2=\frac{2\pi^2}{3\eta^3 N^3}\left[4\,\frac{1+A^3}{(1+A)^3}\right]=0.05895\;\Rightarrow\;\Gamma_{rms}=0.2428, \qquad c_0=2\Gamma_{dc}=2\cdot\frac{2\pi}{\eta^2N^2}\frac{1-A}{1+A}=-0.1005.

Result: corner =42.86=42.86 kHz ([P2] Eq.(57) convention).

Convention flag: substituting c0=2Γdcc_0=2\Gamma_{dc} into [P1] Eq.(24) Δω1/f3=ω1/fc02/(2Γrms2)\Delta\omega_{1/f^3}=\omega_{1/f}\,c_0^2/(2\Gamma_{rms}^2) yields 85.71 kHz — exactly 2× (a DC-channel bookkeeping difference; each paper is internally self-consistent, and scalings and ratios are unaffected). Always state the convention when reporting the number.

Design read: corner (1A)2/(1A+A2)\propto(1-A)^2/(1-A+A^2) and 1/N\propto1/N — a 42.86 kHz close-in 1/f31/f^3 would be mostly washed out by the SerDes PLL (loop BW far above 42.86 kHz), so flicker is not the reason to veto the ring; the ring's real price is the white-noise-region FOM (lc_vs_ring). This exam keeps the LC; this question archives Plan B quantitatively. Symmetrization (A1A\to1) sends the corner to zero quadratically — the closed-form version of symmetry.

Dimension check: Hz ×\times dimensionless ×\times dimensionless == Hz ✓.

N, A, eta, f1f = 5, 1.5, 1.0, 1e6
print(round(f1f*3/(2*eta*N)*(1-A)**2/(1-A+A**2)/1e3, 2)) # -> 42.86

Act 2: From the datasheet to the clock tree (Questions 5–7)

Question 5 — Integrate the real clock's RJ (Lσt\mathcal{L}\to\sigma_t)

Silicon is back. The integrated VCO measures L(1MHz)=100\mathcal{L}(1\,\text{MHz})=-100 dBc/Hz with a 1/f21/f^2 slope (measured track — 48 dB above Question 2's ideal single-source limit: the reality of multiple sources, cyclostationarity, flicker, and the buffer chain). Integration band 1–100 MHz. Find the rms jitter σt\sigma_t.

Quick check (work it out yourself, then check)
fs
Graded correct within ±1% relative error; scientific notation is accepted.
Question 5 — full solution (jitter integration, canonical Example C)

Step-by-step substitution (with units; the full four-step chain of lab_08):

Sϕ(1MHz)=2×10100/10=2×1010 rad2/Hz(L12Sϕ,小角 SSB 慣例,規範公式 16),σϕ2=Sϕ(fref)fref2(1f11f2)=2×1010×(106)2×(106108)=1.98×104 rad2,σϕ=1.407×102 rad=14.07 mrad,σt=σϕ2πf0=1.407×1022π×5×109=4.479×1013 s=447.9 fs.\begin{aligned} S_\phi(1\,\text{MHz})&=2\times10^{-100/10}=2\times10^{-10}\ \text{rad}^2/\text{Hz} \quad(\mathcal{L}\approx\tfrac12 S_\phi\text{,小角 SSB 慣例,規範公式 16}),\\[2pt] \sigma_\phi^2&=S_\phi(f_{ref})\,f_{ref}^2\left(\frac{1}{f_1}-\frac{1}{f_2}\right) =2\times10^{-10}\times(10^6)^2\times(10^{-6}-10^{-8})=1.98\times10^{-4}\ \text{rad}^2,\\[2pt] \sigma_\phi&=1.407\times10^{-2}\ \text{rad}=14.07\ \text{mrad},\\[2pt] \sigma_t&=\frac{\sigma_\phi}{2\pi f_0}=\frac{1.407\times10^{-2}}{2\pi\times5\times10^9}=4.479\times10^{-13}\ \text{s}=447.9\ \text{fs}. \end{aligned}

Result: σϕ=14.07\sigma_\phi=14.07 mrad, σt=447.9\sigma_t=447.9 fs (canonical Example C).

Convention flag: 100-100 is a measured SSB number; per the site rule it is restored to SϕS_\phi with L=12Sϕ\mathcal{L}=\tfrac12S_\phi (/2/2) — measured values never involve the /4/4 (that only enters when predicting from circuit noise, Questions 2/3).

Feel: the 1/f21/f^2 integral is dominated by the lower limit (the 1/f11/f_1 term carries 99%); "where the integration starts" is set by the PLL loop BW — the setup for Question 8. Dimension check: rad2/Hz×Hz=rad2\text{rad}^2/\text{Hz}\times\text{Hz}=\text{rad}^2 ✓; rad ÷ (rad/s) == s ✓.

import numpy as np
from simulations.common.noise_utils import integrate_rms_jitter
f = np.logspace(6, 8, 4000)
st, sp = integrate_rms_jitter(f, -100.0 - 20*np.log10(f/1e6), 5e9, 1e6, 100e6)
print(round(sp*1e3, 2), round(st*1e15, 1)) # -> 14.07 447.9

Question 6 — The same clock's period jitter (jitter-kernel closed form)

Your digital colleague only cares about adjacent edges: "what is the single-period period jitter?" Use the white-FM closed form of jitter_kernels: first invert the measured skirt to κ2\kappa^2 (the reverse of dictionary outfit four), then apply σP(1)=κT/ω0\sigma_P(1)=\kappa\sqrt{T}/\omega_0.

Quick check (work it out yourself, then check)
fs
Graded correct within ±2% relative error; scientific notation is accepted.
Question 6 — full solution (the 4sin24\sin^2 kernel closed form: σΔϕ2(N)=κ2NT\sigma_{\Delta\phi}^2(N)=\kappa^2NT)

Step 1 (invert the skirt to κ2\kappa^2). In the 1/f21/f^2 region, time-domain /2/2 convention (the measured value plugs in directly):

κ2=Llin(Δf)Δω2=1010×(2π×106)2=3.95×103 rad2/s.\kappa^2=\mathcal{L}_{\text{lin}}(\Delta f)\cdot\Delta\omega^2=10^{-10}\times(2\pi\times10^6)^2=3.95\times10^{3}\ \text{rad}^2/\text{s}.

(This is exactly the "100-100 dBc/Hz anchor" row of diffusion_dictionary: κ2=3.95×103\kappa^2=3.95\times10^3, linewidth 628 Hz, κt=2.0×109s\kappa_t=2.0\times10^{-9}\sqrt{\text{s}}.)

Step 2 (the white-FM closed form). jitter_kernels Step 4: substituting Sϕ=2κ2/(2πf)2S_\phi=2\kappa^2/(2\pi f)^2 into the first-difference kernel 4sin2(πfNT)4\sin^2(\pi fNT), the integral gives exactly σΔϕ2(N)=κ2NT\sigma_{\Delta\phi}^2(N)=\kappa^2NT (precisely [P2] Eq.(8)'s κΔt\kappa\sqrt{\Delta t}, not a single coefficient off). Take N=1N=1, T=1/f0=200T=1/f_0=200 ps:

σΔϕ(1T)=3947.8×2×1010=8.886×104 rad,σP(1)=σΔϕ2πf0=8.886×1043.142×1010=28.28 fs.\sigma_{\Delta\phi}(1T)=\sqrt{3947.8\times2\times10^{-10}}=8.886\times10^{-4}\ \text{rad}, \qquad \sigma_P(1)=\frac{\sigma_{\Delta\phi}}{2\pi f_0}=\frac{8.886\times10^{-4}}{3.142\times10^{10}}=28.28\ \text{fs}.

Result: σP(1)28.3\sigma_P(1)\approx28.3 fs (1.4×1041.4\times10^{-4} of a period).

Convention flags (two): (1) the inversion formula takes the /2/2-convention L\mathcal{L} — measured values plug in as-is; plugging in a /4/4-convention predicted value here would come out 2\sqrt2 low. (2) The kernel prefactor under the "single-sided SϕS_\phi, 0\int_0^\infty" convention is 1/ω021/\omega_0^2 (not 2/ω022/\omega_0^2 — that 2 belongs to double-sided-spectrum bookkeeping; adjudicated by the jitter_kernels Step 0 table plus Monte-Carlo). worked_examples Example C3's 27.6 fs is this same formula truncated to the 10310^3101010^{10} Hz band — one physics.

Against Question 5: same clock — accumulated jitter (TIE, 1–100 MHz band) 447.9 fs vs single-period 28.3 fs. TIE eats the low frequencies; the period kernel is a first-order high-pass that suppresses close-in. Both numbers are right; they measure different things (psd_phase_noise_jitter).

Dimension check: rad2/s×s=rad2\text{rad}^2/\text{s}\times\text{s}=\text{rad}^2 ✓; rad ÷ (rad/s) == s ✓.

import numpy as np
kappa2 = 10**(-100/10)*(2*np.pi*1e6)**2
print(round(kappa2, 1), round(np.sqrt(kappa2/5e9)/(2*np.pi*5e9)*1e15, 2))
# -> 3947.8 28.28

Question 7 — ÷2 to 2.5 GHz, through a buffer: when does the floor take over?

The clock tree: 5 GHz through an ideal ÷2 to 2.5 GHz, then one output buffer with a flat 155-155 dBc/Hz floor. Look at 10 MHz offset (PLL out-of-band, where the free-running VCO skirt rules). Use the ideal single-source-limit track: extrapolate the VCO skirt from Question 2's 148-148 dBc/Hz @ 1 MHz anchor at 1/f21/f^2. Find the buffer output's L(10MHz)\mathcal{L}(10\,\text{MHz}).

Quick check (work it out yourself, then check)
dBc/Hz
Graded correct within ±0% relative error; scientific notation is accepted.
Question 7 — full solution (clock_chain rules 2 + 4: ÷N and the additive floor)

Step 1 (1/f21/f^2 extrapolation):

Lvco(10MHz)=14820log10 ⁣10MHz1MHz=168.00 dBc/Hz.\mathcal{L}_{vco}(10\,\text{MHz})=-148-20\log_{10}\!\frac{10\,\text{MHz}}{1\,\text{MHz}}=-168.00\ \text{dBc/Hz}.

Step 2 (rule 2: an ideal ÷2 is edge-picking, ϕout=ϕin/2\phi_{out}=\phi_{in}/2):

L(10MHz)2.5GHz=168.0020log102=174.02 dBc/Hz.\mathcal{L}(10\,\text{MHz})\big|_{2.5\,\text{GHz}}=-168.00-20\log_{10}2=-174.02\ \text{dBc/Hz}.

Step 3 (rule 4: the buffer floor is uncorrelated with the input — powers add, never dB):

Lout=10log10 ⁣(10174.02/10+10155/10)=154.95 dBc/Hz.\mathcal{L}_{out}=10\log_{10}\!\big(10^{-174.02/10}+10^{-155/10}\big)=-154.95\ \text{dBc/Hz}.

Result: 154.95-154.95 dBc/Hz — the signal is 19 dB below the floor, so the floor takes over and the output is clamped at the buffer floor. However clean the source, one noisy buffer ruins it: those 19 dB of margin are voided outright — the core lesson of clock_chain_budget (same numbers as that page's worked chain: 168174.02154.95-168\to-174.02\to-154.95).

Convention flag: ±20log10N\pm20\log_{10}N and power addition are ratio/additive operations; the /2/2 vs /4/4 convention cancels between input and output — the only convention-sensitive item is the anchor itself (148-148 = [P1] Eq.(21)'s /4/4; the /2/2 bookkeeping shifts the whole curve +3+3 dB, and the conclusion "floor takes over" stands, output still 154.9\approx-154.9). Also note the conserved quantity: an ideal ÷2 improves L\mathcal{L} by 6.02 dB, but the σt\sigma_t in seconds does not change by a single fs (needed in Question 9).

Dimension check: all dB operations act on dimensionless power ratios ✓.

import numpy as np
L_div = (-148.0 - 20*np.log10(10)) - 20*np.log10(2)
print(round(L_div, 2)) # -> -174.02
print(round(10*np.log10(10**(L_div/10) + 10**(-155.0/10)), 2)) # -> -154.95

Question 8 — The PLL's peaking tax (type-II peaking closed form)

The VCO goes into a type-II second-order PLL (ζ=0.707\zeta=0.707). The system spec asks: what is the jitter-transfer peaking (how far the peak exceeds 0 dB)? Use the closed form from pll_noise_budget.

Quick check (work it out yourself, then check)
dB
Graded correct within ±1% relative error; scientific notation is accepted.
Question 8 — full solution (peaking closed form: ζ=0.7072.09\zeta=0.707\to2.09 dB @ 0.786fn0.786f_n)

Closed form (the result of that page's supplementary derivation, self-contained algebra). Let s=1+8ζ2s=\sqrt{1+8\zeta^2}:

Hlpmax2=(s+1)2(s1)(s+3),fpk=fn2s+1.\lvert H_{lp}\rvert^2_{max}=\frac{(s+1)^2}{(s-1)(s+3)},\qquad f_{pk}=f_n\sqrt{\frac{2}{s+1}}.

Step-by-step substitution (ζ=1/2\zeta=1/\sqrt2, ζ2=12\zeta^2=\tfrac12): s=1+4=5=2.236s=\sqrt{1+4}=\sqrt5=2.236,

Hlpmax2=(5+1)2(51)(5+3)=5+12=φ=1.618,fpk=fn25+1=0.786fn.\lvert H_{lp}\rvert^2_{max}=\frac{(\sqrt5+1)^2}{(\sqrt5-1)(\sqrt5+3)}=\frac{\sqrt5+1}{2}=\varphi=1.618, \qquad f_{pk}=f_n\sqrt{\frac{2}{\sqrt5+1}}=0.786\,f_n.peaking=10log101.618=2.09 dB.\text{peaking}=10\log_{10}1.618=2.09\ \text{dB}.

(The peak is exactly the golden ratio — that page's easter egg; a 4-million-point fine sweep of pll_utils.H_lowpass_mag2 numerically gives the same 0.7862/2.09030.7862/2.0903 dB.)

Result: peaking =2.09=2.09 dB @ fpk=0.786fnf_{pk}=0.786f_n (phase margin 65.565.5^\circ).

Convention flag: this is a power transfer's 10log1010\log_{10} (numerically equal to the magnitude's 20log1020\log_{10}) — no SSB /2/2, /4/4 business here (that only appears in the SϕLS_\phi\leftrightarrow\mathcal{L} conversion). A type-II loop with a zero must peak (the derivative at DC is always positive): it is the price of stability, not a design error; cascading MM stages adds the dB directly — 20 regenerators make 41.841.8 dB, which is why telecom specs cap per-stage peaking at 0.1 dB (requiring ζ4.32\zeta\approx4.32). For this exam: reference/in-band noise near fpkf_{pk} pays an extra 2.09 dB tax — do not miss it in the jitter budget.

Dimension check: ζ,s,x\zeta,s,x all dimensionless; fpk=fn×f_{pk}=f_n\timesdimensionless == Hz ✓.

import numpy as np
s = np.sqrt(1 + 8*0.707**2)
print(round(np.sqrt(2/(s+1)), 4), round(10*np.log10((s+1)**2/((s-1)*(s+3))), 2))
# -> 0.7862 2.09

Question 9 — Sample with this 2.5 GHz clock: how many bits is it worth? (aperture SNR)

The RX-side monitor ADC samples a full-scale 2.5 GHz calibration tone with the final 2.5 GHz clock. Clock RJ on the measured track: Question 5's σt=447.9\sigma_t=447.9 fs — an ideal ÷2 does not change σt\sigma_t in seconds (Question 7's conserved quantity; the buffer floor adds about 16 fs in the same band, +0.06%+0.06\% after RSS, negligible). Find the jitter-limited SNR.

Quick check (work it out yourself, then check)
dB
Graded correct within ±1% relative error; scientific notation is accepted.
Question 9 — full solution (aperture SNR and ENOB)

Step-by-step substitution (with units; derivation in adc_aperture_jitter). Sampling error == slope ×\times timing error; after mean-squaring over sampling phase and jitter the two 12\tfrac12s cancel:

σϕ,in=2πfinσt=2π×2.5×109 Hz×4.479×1013 s=7.036×103 rad,\sigma_{\phi,in}=2\pi f_{in}\,\sigma_t=2\pi\times2.5\times10^9\ \text{Hz}\times4.479\times10^{-13}\ \text{s}=7.036\times10^{-3}\ \text{rad},SNRjitter=20log10 ⁣(2πfinσt)=20log10(7.036×103)=43.05 dB,\text{SNR}_{jitter}=-20\log_{10}\!\big(2\pi f_{in}\sigma_t\big)=-20\log_{10}(7.036\times10^{-3})=43.05\ \text{dB},ENOB=43.051.766.02=6.86 bit.\text{ENOB}=\frac{43.05-1.76}{6.02}=6.86\ \text{bit}.

Result: SNR =43.05=43.05 dB, ENOB =6.86=6.86 bit — word-for-word the 2.5 GHz row of the adc_aperture_jitter design table. Buying a 12-bit ADC would not help: the high-frequency SNR is pinned by the clock.

Convention flag: the formula itself is independent of SSB/DSB or any L\mathcal{L} convention (the 12\tfrac12 in PsigP_{sig} cancels the 12\tfrac12 from cos2\langle\cos^2\rangle); the convention hides upstream in σt\sigma_t — 447.9 fs was integrated from a measured L\mathcal{L} via the /2/2 small-angle conversion (Question 5); keep the chain consistent and there is no ambiguity.

Using the conserved quantity: σt\sigma_t (seconds) is invariant through an ideal ÷2 (clock_chain_budget, Step 5) — ÷2 saves dB of L\mathcal{L}, not fs; so the 2.5 GHz clock inherits 447.9 fs directly. Honesty note: with the buffer floor, 447.92+16.02=448.2\sqrt{447.9^2+16.0^2}=448.2 fs (+0.06%+0.06\%) — ignored in this question.

Dimension check: Hz ×\times s ×2π=\times2\pi= rad (dimensionless) ✓ — a legal log argument; dB and bit dimensionless ✓.

import numpy as np
snr = -20*np.log10(2*np.pi*2.5e9*447.9e-15)
print(round(snr, 2), round((snr - 1.76)/6.02, 2)) # -> 43.05 6.86

Question 10 — Final boss: how much eye is left? (dual-Dirac TJ@101210^{-12})

Closing out the link. 25 Gb/s (UI =40=40 ps), measured decomposition gives DJδδ=1\mathrm{DJ}_{\delta\delta}=1 ps; RJ is the measured-track clock's σt=447.9\sigma_t=447.9 fs. Use the dual-Dirac extrapolation (dj_dual_dirac) to find the total jitter at BER =1012=10^{-12}.

Quick check (work it out yourself, then check)
ps
Graded correct within ±1% relative error; scientific notation is accepted.
Question 10 — full solution (dual-Dirac extrapolation and the eye budget)

Step-by-step substitution (with units). The dual-Dirac extrapolation formula (deep tail dominated by a single Gaussian):

TJ(BER)=DJδδ+2Q1(BER)σ,Q1(1012)=7.034 (本站記 7.03).\mathrm{TJ}(\mathrm{BER})=\mathrm{DJ}_{\delta\delta}+2\,Q^{-1}(\mathrm{BER})\,\sigma, \qquad Q^{-1}(10^{-12})=7.034\ (\text{本站記 }7.03).TJ=1 ps+2×7.034×0.4479 ps=1 ps+6.30 ps=7.30 ps.\mathrm{TJ}=1\ \text{ps}+2\times7.034\times0.4479\ \text{ps}=1\ \text{ps}+6.30\ \text{ps}=7.30\ \text{ps}.eye 開度=UITJ=407.30=32.7 ps=0.82 UI.\text{eye 開度}=UI-\mathrm{TJ}=40-7.30=32.7\ \text{ps}=0.82\ UI.

Result: TJ@1012=7.3010^{-12}=7.30 ps, eye opening 32.732.7 ps (0.82UI0.82\,UI) — the RJ term 6.30 ps matches serdes_clocking_connection's "448 fs → RJ eats 6.36.3 ps" ✓. This 25 Gb/s link's clock budget passes.

Convention flag: Q1(1012)=7.034Q^{-1}(10^{-12})=7.034 is the industry per-Gaussian convention (each Gaussian's tail == BER); rigorously booking the Dirac weight ½ and the transition density ½ gives the Q=4×BERQ=4\times\mathrm{BER} convention (Q1=6.839Q^{-1}=6.839), about 0.2σ0.2\sigma/side of difference — settle the convention before comparing instrument reports (the Step 6 audit table of dj_dual_dirac). Also remember DJδδDJpp\mathrm{DJ}_{\delta\delta}\le\mathrm{DJ}_{pp}: the model parameter is deliberately under-reported precisely so the extrapolation is accurate — do not stuff DJpp\mathrm{DJ}_{pp} into this formula.

Dimension check: [s]+[dimensionless]×[s]=[s][\text{s}]+[\text{dimensionless}]\times[\text{s}]=[\text{s}] ✓.

Closing the loop on the whole exam: Question 1's single 1 fC impulse (15.9 fs) → Questions 2–3's white-noise skirt and linewidth → Question 5's integration into a 447.9 fs RJ → Question 7's clock-tree accounting → Question 10 settles the bill on the eye. Where one charge goes is where a SerDes link's margin goes.

import numpy as np
from scipy.special import erfcinv
qinv = float(np.sqrt(2)*erfcinv(2*1e-12))
tj = 1e-12 + 2*qinv*447.9e-15
print(round(qinv, 3), round(tj*1e12, 2)) # -> 7.034 7.3

Question 11 — Bonus: what if we skip the PLL and injection-lock a multiplier instead?

One last fork before graduation. Questions 7–9 took the "PLL ×50 → ÷2 → buffer" route. A junior colleague asks: "what if we skip the PLL entirely and drive the same 55 GHz LC VCO (qmax=1q_{max}=1 pC) directly with an fref=250f_{ref}=250 MHz reference pulse train (qinj=50q_{inj}=50 fC) as an N=20N=20 injection-locked clock multiplier (ILCM)? How wide is that route's half lock range?" Use the impulse-train arithmetic of subharmonic_injection (the discrete version of [P3] Sec. IV footnote 7) to find fLf_L.

Quick check (work it out yourself, then check)
MHz
Graded correct within ±1% relative error; scientific notation is accepted.
Question 11 — full solution (the ILCM's 1/N1/N lock range, the other route in place of the PLL)

Step 1 (the discrete arithmetic of [P3] footnote 7; full derivation on subharmonic_injection, Section 2): one kick every NN oscillation periods; the fixed point exists (weak injection, the Γ=sin\Gamma=-\sin special case) when

ΔωL=qinjΓ~maxNT0  Γ=sin  qinjqmax1NT0=qinjqmaxf0N.\Delta\omega_L=\frac{q_{inj}\,\vert\tilde\Gamma\vert_{max}}{NT_0}\ \xrightarrow{\ \Gamma=-\sin\ }\ \frac{q_{inj}}{q_{max}}\cdot\frac{1}{NT_0}=\frac{q_{inj}}{q_{max}}\cdot\frac{f_0}{N}.

Step-by-step substitution (with units):

qinjqmax=50 fC1 pC=0.05(weak injection1 ),T0=1f0=200 ps,NT0=20×200 ps=4 ns,\frac{q_{inj}}{q_{max}}=\frac{50\ \text{fC}}{1\ \text{pC}}=0.05\quad(\text{weak injection}\ll1\ \checkmark),\qquad T_0=\frac{1}{f_0}=200\ \text{ps},\qquad NT_0=20\times200\ \text{ps}=4\ \text{ns},ΔωL=0.054×109 s=1.25×107 rad/s,fL=ΔωL2π=1.989 MHz.\Delta\omega_L=\frac{0.05}{4\times10^{-9}\ \text{s}}=1.25\times10^{7}\ \text{rad/s},\qquad f_L=\frac{\Delta\omega_L}{2\pi}=1.989\ \text{MHz}.

Result: fL=1.989f_L=1.989 MHz (canonical Example 1 on subharmonic_injection).

Dimension check: dimensionless ÷\div s == rad/s; rad/s ÷2π=\div2\pi= Hz ✓.

Closing the fork (why this exam picked the PLL, not the ILCM): the fractional lock range fL/(Nfref)=(qinj/qmax)/(2πN)=3.98×104f_L/(Nf_{ref})=(q_{inj}/q_{max})/(2\pi N)=3.98\times10^{-4} = 398 ppm — two orders of magnitude smaller than the percent-level free-running frequency uncertainty from PVT, meaning this VCO would first have to be pulled to within 398 ppm before the ILCM could even lock; in practice that means bolting on a frequency-locked loop (FLL). Question 8's type-II PLL, by contrast, has a PFD with wide-range frequency acquisition built in — no auxiliary FLL needed. That is exactly why this exam's Act 2 settled on the PLL rather than the ILCM. But the ILCM isn't without its own savings: it has no divider or CP at all, and its in-band noise bookkeeping runs through N2SrefHref2N^2S_{ref}\vert H_{ref}\vert^2 (HrefH_{ref} a first-order discrete-time low-pass) — the same family as Question 3's PLL in-band term N2SrefHlp2N^2S_{ref}\vert H_{lp}\vert^2, but a different mechanism: both routes converge on ×N2\times N^2, they just kick the divider out by different means.

Convention flag: this question's numbers use the δ\delta-pulse (impulse-train) idealization, matching the canonical Example 1 on subharmonic_injection; including the sinc correction for a finite 1010 ps pulse width lowers it to 1.9811.981 MHz (a 0.4%0.4\% difference, ignored here).

qinj, qmax, f0, N = 50e-15, 1e-12, 5e9, 20
T0 = 1 / f0
dwL = (qinj/qmax) / (N*T0)
fL = dwL / (2*np.pi)
print(round(fL/1e6, 3)) # -> 1.989
print(round((qinj/qmax)/(2*np.pi*N), 6)) # -> 0.000398 (398 ppm, the fractional lock range)

Graduation check: Python appendix (recompute all 11 questions in one run)

Run from the project root with PYTHONPATH=.; every # -> is actual printed output, matching each solution word for word.

import numpy as np
from scipy.special import erfcinv
from simulations.common.isf_utils import impulse_to_phase_step
from simulations.common.noise_utils import phase_to_time_error, integrate_rms_jitter
from simulations.common.pll_utils import H_lowpass_mag2

f0, qmax, grms, Si = 5e9, 1e-12, 0.5, 1e-24
dw = 2*np.pi*1e6 # 1 MHz offset [rad/s]

# --- Q1: impulse -> Delta_phi -> Delta_t (Example A)
dphi = impulse_to_phase_step(1e-15, 0.5, qmax=qmax)
print(dphi, round(phase_to_time_error(dphi, f0)*1e15, 1)) # -> 0.0005 15.9

# --- Q2: [P1] Eq.(21) (SSB /4 convention)
L4 = 10*np.log10((grms**2/qmax**2)*(Si/(4*dw**2)))
print(round(L4, 1)) # -> -148.0

# --- Q3: /4 -> /2 -> kappa^2 -> Lorentzian linewidth
L2_lin = 10**((L4 + 3.01)/10) # back to /2 convention (+3.01 dB)
kappa2 = L2_lin*dw**2 # reverse lookup kappa^2 = L_/2 * dw^2
print(round(kappa2, 3), round(grms**2*Si/(2*qmax**2), 3)) # -> 0.125 0.125
print(round(kappa2/(2*np.pi)*1e3, 1)) # -> 19.9 (mHz)

# --- Q4: [P2] App.B Eq.(55)-(57), N=5, A=1.5, eta=1, f_1/f=1 MHz
N, A, eta, f1f = 5, 1.5, 1.0, 1e6
corner = f1f*3/(2*eta*N)*(1-A)**2/(1-A+A**2)
print(round(corner/1e3, 2), round(2*corner/1e3, 2)) # -> 42.86 85.71 ([P2]; [P1] convention)

# --- Q5: measured -100 dBc/Hz@1MHz, 1/f^2, integrated 1-100 MHz
f = np.logspace(6, 8, 4000)
sigma_t, sigma_phi = integrate_rms_jitter(f, -100.0 - 20*np.log10(f/1e6), f0, 1e6, 100e6)
print(round(sigma_phi*1e3, 2), round(sigma_t*1e15, 1)) # -> 14.07 447.9

# --- Q6: the same measured clock's period jitter (jitter_kernels closed form)
kappa2_m = 10**(-100/10)*dw**2 # measured SSB = /2 convention
print(round(kappa2_m, 1)) # -> 3947.8 (rad^2/s)
print(round(np.sqrt(kappa2_m/f0)/(2*np.pi*f0)*1e15, 2)) # -> 28.28 (fs)

# --- Q7: ideal skirt /2 to 2.5 GHz + buffer floor (10 MHz offset)
L_div = (-148.0 - 20*np.log10(10)) - 20*np.log10(2)
print(round(L_div, 2)) # -> -174.02
print(round(10*np.log10(10**(L_div/10) + 10**(-155.0/10)), 2)) # -> -154.95

# --- Q8: type-II peaking closed form vs pll_utils numeric
s = np.sqrt(1 + 8*0.707**2)
print(round(np.sqrt(2/(s+1)), 4), round(10*np.log10((s+1)**2/((s-1)*(s+3))), 2))
# -> 0.7862 2.09
x = np.linspace(0.001, 5, 400001)
m2 = H_lowpass_mag2(x, 1.0, 0.707)
print(round(10*np.log10(np.max(m2)), 2)) # -> 2.09

# --- Q9: aperture SNR (sigma_t conserved through the ideal /2)
st = 447.9e-15
snr = -20*np.log10(2*np.pi*2.5e9*st)
print(round(snr, 2), round((snr - 1.76)/6.02, 2)) # -> 43.05 6.86

# --- Q10: dual-Dirac TJ@1e-12 (per-Gaussian convention), UI = 40 ps
qinv = float(np.sqrt(2)*erfcinv(2*1e-12))
tj = 1e-12 + 2*qinv*st
print(round(qinv, 3), round(tj*1e12, 2)) # -> 7.034 7.3
print(round((40e-12 - tj)*1e12, 1), round((40e-12 - tj)/40e-12, 2)) # -> 32.7 0.82

# --- Q11 (bonus): the ILCM's 1/N lock range ([P3] footnote 7 discrete arithmetic)
qinj, qmax_ilcm, N_ilcm = 50e-15, 1e-12, 20
T0_ilcm = 1 / f0
dwL = (qinj/qmax_ilcm) / (N_ilcm*T0_ilcm)
fL = dwL / (2*np.pi)
print(round(fL/1e6, 3)) # -> 1.989
print(round((qinj/qmax_ilcm)/(2*np.pi*N_ilcm), 6)) # -> 0.000398

Key takeaways (11 numbers to carry with you)

QTested skillAnswerConvention flag
1impulse→Δϕ\Delta\phiΔt\Delta t5×1045\times10^{-4} rad, 15.9 fs
2[P1] Eq.(21) white-noise L\mathcal{L}148.0-148.0 dBc/HzSSB /4/4 (/2/2 gives 145.0-145.0)
3Lκ2\mathcal{L}\to\kappa^2\to linewidthκ2=0.125\kappa^2=0.125 rad²/s, 19.9 mHzlookup takes /2/2; Δf3dB=κ2/2π\Delta f_{3\mathrm{dB}}=\kappa^2/2\pi (v5)
4App. B 1/f³ corner42.86 kHz[P2] Eq.(57); [P1] Eq.(24) =2×=85.71=2\times=85.71 kHz
5jitter integration 1–100 MHz14.07 mrad, 447.9 fsmeasured SSB uses L=12Sϕ\mathcal{L}=\tfrac12S_\phi
6period-jitter closed form28.3 fssingle-sided SϕS_\phi kernel prefactor 1/ω021/\omega_0^2
7÷2 + buffer floor154.95-154.95 dBc/Hzrules are ratio operations, conventions cancel; floor takes over
8type-II peaking2.09 dB @ 0.786fn0.786f_n10log1010\log_{10} of power, no SSB business
9aperture SNR @ 2.5 GHz43.05 dB (6.86 bit)formula convention-free; σt\sigma_t conserved through ÷2
10dual-Dirac TJ@101210^{-12}7.30 ps (eye 0.82 UI)per-Gaussian Q1=7.034Q^{-1}=7.034
11 (bonus)ILCM's 1/N1/N lock rangefL=1.989f_L=1.989 MHz (398 ppm)δ\delta-pulse idealization; 1.981 MHz with the finite-pulse sinc correction

All 11 correct — congratulations, you graduate. You can now account for a single charge impulse all the way to a SerDes link's eye margin.

Further reading (the deep-dive page for each question)