β: This English translation is in beta — the Traditional-Chinese original is the authoritative version.
The Theoretical Ceiling of FOM
Prerequisites: tank_swing (FOM definition and the phase-noise × power trade-off), white_noise_to_phase_noise ([P1] Eq.(21) and the factor-of-2 convention), lc_vs_ring ([P2] Eq.(23) ring FOM, the dBc/Hz example) | Next: real_oscillator_topologies, pll_noise_budget
This page answers three questions every VCO designer eventually asks:
- Does FOM (figure of merit — the oscillator quality metric) have a physical upper bound? What is it, and what sets it?
- The best published LC designs sit around FOM dB — how many dB below the ceiling are they?
- Why does the ring oscillator inherently trail LC by about 25 dB? Which term eats each dB of that gap?
Physical intuition (conclusion first): FOM is constructed to exactly cancel and power . What's left are only two things: nature's price list, (thermal-noise energy in a 1 Hz bandwidth vs. 1 mW), which comes to 173.8 dB at 300 K; and the topology noise factor — how much your circuit amplifies (ring: , ceiling 168.3 dB) or beats it down with high- energy storage (LC: , ceiling rises 20 dB per decade of ). So there is no single magic number: the ceiling is a "family," and which member you land on is set by what physics you allow into .
Step 0: FOM's definition and sign convention
This page uses the positive-value convention (bigger is better, the most common form in survey tables):
- : SSB phase noise at offset , in dBc/Hz (negative, so is positive).
- : carrier frequency [Hz]; : offset frequency [Hz]; : total DC power dissipation [W], normalized to 1 mW.
- Comparison with tank_swing: that page writes — the same quantity with the sign flipped (; under that convention more negative is better). Both forms appear in the literature; this page uses the positive convention, so numerically the ring example's dB here is that page's dB.
- A hidden reference unit: the "per Hz" in is really "sideband power in a 1 Hz measurement bandwidth ÷ carrier power." Writing out this Hz explicitly is what makes FOM's log argument strictly dimensionless; FOM's full reference basis is "1 Hz bandwidth, 1 mW power." The next step shows this isn't pedantry — it's exactly what lets appear cleanly.
- Dimension check: all three terms are of dimensionless ratios (, , ) → dB ✓.
Step 1: the reference constant — 173.8 dB is , not
Suppose some topology's phase noise in the (white-noise) region can be arranged into the following universal form (the next two steps show both ring and LC reduce to this):
where is the dimensionless topology noise factor (this equation is its definition). Unit check: , multiplied by the dimensionless this gives exactly the per-Hz units needs ✓. Substitute into the FOM definition and cancel step by step:
- What each step uses: going from line 1→2, cancels exactly between and ; going from line 2→3, cancels exactly between and . These two cancellations are precisely the reason FOM was invented (to normalize away the " constant" trade-off — see tank_swing step 4).
- Dimension check: , dimensionless ✓ — the Hz hidden in step 0 is exactly what completes 's dimensions here.
- Physical meaning: is the available thermal-noise power a resistor can deliver in a 1 Hz bandwidth ( J @ 300 K); is simply "how many dB is 1 mW above the thermal-noise floor."
Numerically ( J/K, K): J, , dB.
⚠️ A memorization trap (worked out on this site — don't get it wrong): quick notes often write this constant as "" — wrong. pairs with dB; dB pairs with . This page's derivation naturally lands on : because [P2] Eq.(23) is printed in exactly the form (step 2), while the LC reduction (step 3) folds all factors of 2 and 4 into . Every factor-of-2 convention (SSB's /4 vs. the time-domain /2) lives inside and only shifts FOM by 3.01 dB total; itself is convention-free.
import numpy as np
kB, T = 1.380649e-23, 300.0
print(round(-10*np.log10(kB*T*1.0/1e-3), 2)) # -> 173.83
print(round(-10*np.log10(2*kB*T/1e-3), 2)) # -> 170.82 (the 2kT pairing, often misremembered as 173.8)
print(round(10*np.log10(kB*290.0/1e-3), 2)) # -> -173.98 (the RF world's famous -174 dBm/Hz thermal-noise floor)
- Bonus: converting using K (the IEEE noise-figure reference temperature, from Friis 1944, external literature, not among the five source PDFs, full citation at page bottom) to dBm/Hz gives the famous dBm/Hz; 300 K gives , both round to .
- Temperature effect: drops about dB per 10 K rise ( dB) — remember this slope when comparing FOM measured at different temperatures.
Step 2: ring — one reduction of [P2] Eq.(23), ceiling 168.3 dB
[P2] Eq.(23), p.796 (verified against the original PDF, leading coefficient ) is already in universal form:
- : per-stage delay proportionality constant ([P2] Eq.(14)), , dimensionless); : supply voltage [V]; : the device's characteristic voltage [V] ( = gate overdrive [V], = channel thermal-noise coefficient, dimensionless).
- Unit check: is (dimensionless)×(V/V) = dimensionless ✓; the units of the whole come from , giving per-Hz ✓.
- Why appears naturally: [P2] Eq.(21) gives — power absorbs , , and entirely, which is exactly lc_vs_ring's N-independence as seen in FOM language.
Ceiling: , and overdrive is bounded by supply, (equality at ), so
This is the lower bound from [P2] Eq.(25), p.796. Taking long-channel , : , dB,
Verification against this site's ring worked example (lc_vs_ring example 1: dBc/Hz @ 1 MHz, GHz, mW, ):
import numpy as np
kB, f0, df = 1.380649e-23, 5e9, 1e6
Cref = -10*np.log10(kB*300/1e-3)
Feff_ring = 8/3 * 3 # [P2] Eq.(23): (8/(3η))·(V_DD/V_char), η=1, V_DD/V_char=3
print(round(Cref - 10*np.log10(Feff_ring), 2)) # -> 164.8 (F_eff path, kT using the exact 300 K value)
print(round(91.0 + 20*np.log10(f0/df) - 0.0, 2)) # -> 164.98 (directly from this page's -91.0 dBc/Hz, P=1 mW)
Feff_min = 16*(2/3)/3 # [P2] Eq.(25): V_T=0 lower bound, γ=2/3
print(round(Cref - 10*np.log10(Feff_min), 2)) # -> 168.32 (ring ceiling)
- Source of the 0.2 dB gap between the two paths (honest bookkeeping): the path uses the exact J,
giving ; the lc_vs_ring chain used a rounded J
(which is actually the K value), giving , . The two are identical bit-for-bit
once is taken consistently (
simulations/fig_fom_limit.pyprints an identity check ). This page consistently quotes it as " dB." - This example sits only dB below the ring ceiling (exactly the vs. lower-bound ratio of dB) — the ring's universal form leaves almost no room to maneuver, which is the key point.
- Applicability/breakdown: single-ended CMOS inverter ring, white noise, long-channel . Shorter channels give larger → lower ceiling ( gives dB); flicker noise and supply/substrate coupling only push it lower still.
Step 3: LC — deriving from [P1] Eq.(21)
LC has no ready-made form — we have to build it. Starting from [P1] Eq.(21), p.185 (SSB, denominator convention):
Introduce four standard circuit relations (checking units for each first):
- Noise source: thermal noise of the tank loss resistance , ( ✓; see tank_Q_and_energy_restoration). With multiple noise sources, define the noise factor (dimensionless): weight each source by its own and refer it back to the tank source, , (the tank itself contributes 1). For an ideal class-B cross-coupled pair (ideally filtered tail), — this is an external-literature standard result (Hegazi–Sjöland–Abidi 2001; Andreani et al. 2005, full citations at page bottom), not among the five PDFs.
- Charge swing: ( ✓, [P1] definition).
- Power: average dissipation of the sinusoidal swing across , ( ✓); total DC power dissipation , being power efficiency (dimensionless).
- Quality factor: for a parallel RLC, (, → dimensionless ✓).
Substitute step by step (no steps skipped):
(the factors cancel top and bottom), then convert to total power dissipation, giving the universal form and
- Dimension check (whole chain): is built entirely of dimensionless quantities ✓; gives per-Hz ✓.
- Physical meaning (the single most important sentence on this page): the in the denominator is how LC punches through the 173.8 dB "reference line" — the resonant tank stores signal energy without adding noise; each watt of loss only buys worth of noise once, through . The higher , the larger "stored signal ÷ purchased noise" becomes, and is perfectly legitimate. The reference line is not LC's ceiling; LC's ceiling is set by whatever the process can provide (on-chip spiral inductors at GHz frequencies typically give ).
- Breakdown conditions: swing large enough to distort the waveform (changing , ), collapsing once voltage-limited, varactor/switch loss eating into , flicker-dominated offsets (the universal form only covers the region).
Numerical consistency check (reverse-engineering canonical example B into an actual tank): example B (, pC, A²/Hz, GHz → dBc/Hz @ 1 MHz), if is interpreted as a single tank source and V is assumed, gives kΩ, pF, , µW — the two paths (Eq.(21) computed directly vs. the universal form) must give the same :
import numpy as np
kB, T, f0, df = 1.380649e-23, 300.0, 5e9, 1e6
grms, qmax, Si = 0.5, 1e-12, 1e-24
dw = 2*np.pi*df
L_direct = 10*np.log10(grms**2/qmax**2 * Si/(4*dw**2)) # [P1] Eq.(21)
Rp = 4*kB*T/Si; C = qmax/1.0; Q = 2*np.pi*f0*Rp*C; Pt = 1.0**2/(2*Rp)
Feff = 1.0*grms**2/(2*Q**2) # F=1, η_P=1
L_feff = 10*np.log10(Feff*(kB*T/Pt)*(f0/df)**2)
print(round(L_direct, 2), round(L_feff, 2)) # -> -148.0 -148.0 (both paths agree bit-for-bit: the algebraic chain is correct)
print(round(Q, 1), round(Pt*1e6, 2)) # -> 520.5 30.18 (Q≈520: no such tank exists on chip)
FOM = -L_direct + 20*np.log10(f0/df) - 10*np.log10(Pt/1e-3)
print(round(FOM, 1)) # -> 237.2
- Teaching point (FOM catches you out): example B's dBc/Hz is unremarkable on its own, but converted to FOM it comes out to 237 dB, equivalent to a tank — instantly exposing that " A²/Hz with 1 pC" is a deliberately idealized single-source teaching parameter, not a realizable design point. dBc/Hz can lie (it says nothing about power); FOM cannot.
Step 4: the ceiling is a "family," not a single number
Putting the three steps together: any topology whose white-noise region can be written in universal form satisfies
This is an identity (by construction of 's definition); what the "ceiling" evaluates to depends entirely on what physics you allow into :
| Family member | (300 K) | Source/assumptions | ||
|---|---|---|---|---|
| Reference line () | dB | dB | Definition; "sideband density = thermal-noise floor" | |
| Ring ceiling | dB | dB | [P2] Eq.(25): , , , white noise | |
| This site's ring example | dB | () dB | [P2] Eq.(23): ; = the dBc/Hz example | |
| LC ideal, | dB | dB | [P1] Eq.(21) (SSB /4) + , , | |
| Same, time-domain /2 convention | dB | dB | Same physics, Leeson's bookkeeping (3.01 dB lower) | |
| LC ideal, | dB | dB | Same as above (/4 convention) |
import numpy as np
Cref = -10*np.log10(1.380649e-23*300/1e-3)
gamma = 2/3
def fom_lc_ceiling(Q, F=1+gamma, grms2=0.5, eta_p=1.0):
return Cref - 10*np.log10(F*grms2/(2*Q**2*eta_p))
print(round(fom_lc_ceiling(10), 2)) # -> 197.63 ([P1] Eq.(21) SSB /4 convention)
print(round(fom_lc_ceiling(10) - 10*np.log10(2), 2)) # -> 194.62 (time-domain /2 convention; same physics, 3.01 dB lower)
print(round(fom_lc_ceiling(20), 2)) # -> 203.65
Factor-of-2 discipline (which "2," which convention): this site records, in white_noise_to_phase_noise, that for the same example-B parameters, [P1] Eq.(21)'s SSB "/4" gives dBc/Hz, while the clean time-domain derivation's "/2" gives dBc/Hz. In FOM language this factor of 2 moves entirely into : the /2 convention's is twice the /4 convention's, so FOM is lower by dB (the two rows above). Leeson's form (see derivation_leeson) reduces to , belonging to the /2 family — which differs by exactly this factor of 2 from this page's [P1]-based () ✓. Measured FOM has no such issue (an instrument measures whatever it measures); this 3 dB only affects how the "theoretical ceiling" is calibrated, which is why the table above lists both conventions. Also note is the representative value for a true LC (), not a hard lower bound — waveform engineering (class-F, etc.) targets exactly this term along with and .

- Script:
simulations/fig_fom_limit.py(run withPYTHONPATH=. python3 simulations/fig_fom_limit.py, which prints all the key numbers on this page and saves the figure). - Parameters: J/K; ring: , , ; LC: , , , .
- How to read it: (a) each line is a ceiling's trend vs. temperature (slope dB/10 K); (b) the green line is the ideal LC ceiling vs. (solid /4, dashed /2 convention), and the horizontal lines from top to bottom are the reference line 173.8, the ring ceiling 168.3, and this site's ring example 164.8. The figure deliberately omits a scatter of published designs — none of the five source PDFs contains verifiable per-design FOM data, so drawing lines without points is the honest approach (the purple dot and green square are examples computed on this page).
How many dB below the ceiling?
- Good published LC designs: survey-table standouts commonly fall in the dB range (order-of-magnitude statement; corresponding to , which can be back-derived from this page's bound family, e.g. worked example 2's dB → an equivalent ). Against their own -based ceiling ( → dB, /4 convention), the typical gap is about dB — eaten by , tail/bias noise (), varactor/switch loss (lowering effective ), and layout parasitics. In other words: the LC problem has already been solved to within arm's reach of the physical limit, and every remaining dB costs more than the last.
- Colpitts vs. LC-tank (Andreani et al., JSSC 2005; external literature, not among the five source PDFs, full citation at page bottom): this paper gives closed-form noise factors for CMOS Colpitts and differential LC-tank oscillators and validates them experimentally, with the well-known conclusion that in CMOS, LC-tank phase-noise performance is at least as good as Colpitts's — Colpitts's cyclostationary advantage (current pulse aligned to the ISF trough; this site's real_oscillator_topologies example 2 estimates roughly a 7 dB reduction in ) is offset by its bias-efficiency and startup-margin cost. Both topologies sit under the same LC ceiling family (both have an from the family and a term) — neither can bypass the wall set by .
- Ring: this site's example sits only dB below the ring ceiling — the ring's universal form has no to buy with, and the ceiling itself (168.3 dB) is already about 30 dB below LC's.
Ring's dB deficit vs. LC, itemized (this site's ring example at 164.8 dB against the LC ideal ceiling at , 197.63 dB,
a gap of dB; fig_fom_limit.py verifies the itemized terms sum exactly to the total gap):
| Term | Ratio | dB | Physics |
|---|---|---|---|
| No energy storage vs. () | LC's high- storage beats down ; the ring discards all its energy and recharges every cycle | ||
| Overdrive/headroom: smaller amplifies more noise | |||
| Leading coefficient | Ring waveform/transition bookkeeping ([P2] Eq.(23)'s ) | ||
| LC waveform term | LC's own and ISF claw back only a little | ||
| Total | ✓ |
Actual published LC designs don't hit their ideal ceiling (they give back dB), so the observed real-world gap is about 25 dB — consistent with "good LC , good ring ." Conclusion: the ring's deficit is not a lack of design effort — it's a structural gap made of (the 23 dB term) plus /waveform (about 9 dB); the ring's selling points are area, tuning range, and multi-phase output (see lc_vs_ring).
Worked examples
Example 1 (converting this site's ring example to FOM, and locating it relative to the ceiling) Given lc_vs_ring example 1: dBc/Hz @ MHz, GHz, mW. Find FOM and the distance to the ring ceiling.
Step-by-step substitution (with units):
- Result: dB; about dB below the ring ceiling at dB (entirely from vs. the lower bound ), and dB below the reference line at dB ().
- Dimension check: all three terms are logs of dimensionless ratios → dB ✓ (: Hz/Hz; mW: W/W).
- One-line Python check:
import numpy as np
print(round(91.0 + 20*np.log10(5e9/1e6) - 10*np.log10(1e-3/1e-3), 2)) # -> 164.98
Example 2 (design back-derivation: reading an "equivalent " off a measured FOM) An GHz LC VCO burns mW and measures dBc/Hz. Find FOM, the implied , and, assuming , , (a more realistic loss assumption), the implied tank .
Step-by-step substitution (with units):
- Result: dB — a "good design" figure; the implied is entirely reasonable on-chip. If the process could give (ideal ceiling dB, /4 convention), this design would sit about dB below its own ceiling — the next thing to check is (class efficiency), tail noise (), and varactor loss, not piling on more current.
- Dimension check: dimensionless (dB difference ÷10 then exponentiated) ✓; everything under the square root is dimensionless → dimensionless ✓.
- One-line Python check:
import numpy as np
Cref = -10*np.log10(1.380649e-23*300/1e-3)
FOM = 125.0 + 20*np.log10(5e9/1e6) - 10*np.log10(10e-3/1e-3)
print(round(FOM, 2)) # -> 188.98
Feff = 10**((Cref - FOM)/10)
print(round(Feff, 4)) # -> 0.0305
print(round(np.sqrt(2*0.5/(2*Feff*0.5)), 2)) # -> 5.72 (implied Q; F=2, Γrms²=0.5, η_P=0.5)
Design knobs: what moves FOM, what doesn't
| Knob | What it moves | Effect | Note |
|---|---|---|---|
| Raise tank | dB per decade of ( dB per doubling of ) | The only big lever; limited by process inductor/varactor quality | |
| Raise power efficiency (class-B→C/D/F) | A few dB at most | Swing waveform and conduction-angle engineering | |
| Reduce (tail filter, symmetry, clean bias) | A few dB | Hegazi 2001 (external literature) family of techniques | |
| Waveform/ISF engineering | On the order of dB | class-F, harmonic shaping | |
| Add power | — | 0 dB | FOM is already normalized to ; only lowers , not FOM |
| Ring: add stages | — | 0 dB | [P2] N-independence; doesn't appear in Eq.(23) |
| Cool down | dB per K | Usually not something you get to choose | |
| Ring's | Up to the lower bound (a dB gap) | Beyond that you hit the [P2] Eq.(25) ceiling |
Connection to SerDes
The FOM ceiling translates directly into "the lowest jitter buyable within a given power budget." Example C (lab_08: GHz, dBc/Hz @ 1 MHz, , integrated 1–100 MHz) gives fs; by the same method , so a 1 mW, 165-dB-FOM ring ( dBc/Hz, 9 dB higher than example C) gives:
print(round(447.9 * 10**((100.0-91.0)/20), 1)) # -> 1262.4 (fs; same integration bandwidth, same 1/f² slope)
about ps rms — unusable for Gb/s SerDes UIs, which is why high-speed SerDes only trusts LC-PLL plus (when needed) ring in positions suppressed within the PLL bandwidth (see serdes_clocking_connection, pll_noise_budget).
Applicability and breakdown conditions
| Condition | When it holds | When it breaks down |
|---|---|---|
| Offset in the white-noise region | The universal form and hold | In the (flicker) region or the floor region: FOM changes with , making comparison meaningless |
| = total DC power dissipation | Fair cross-design comparison | Reporting only core power (omitting buffer/bias) inflates FOM |
| K | Constant dB | Other temperatures use ( dB/10 K) |
| Theoretical value states /2 or /4 convention | Ceilings can be cross-compared (differ by dB) | Mixing conventions produces a phantom 3 dB |
| Small-perturbation LTV ([P1] framework) | is constant | Large injection, injection pulling (see the [P3]/[P4] pages) require separate treatment |
| Looking at FOM alone | Normalizes the power–noise trade-off | Area, tuning range (the FOM variant covers this separately), supply pushing, yield are all outside its scope |
Key takeaways
- (this page's positive-value convention; tank_swing uses its negative). By construction, and cancel exactly.
- Universal reduction: dB (300 K). The constant pairs with 1·kT ( pairs with — don't mix them up); every factor-of-2 convention lives inside (/2 vs. /4 = 3.01 dB).
- Ring: ([P2] Eq.(23)/(25)) → ceiling dB; this site's dBc/Hz example = dB, only dB below the top.
- LC: (derived from [P1] Eq.(21)) → ceiling rises with : gives dB (/4) / dB (/2). is the only big lever.
- Good published LC designs ( dB) sit about dB below their own ceiling; ring trails LC by about 25 dB, itemized as: energy storage (23 dB) + /waveform ( dB).
- The ceiling is a family, not a magic number — when citing any "FOM limit," first ask what (, , , convention) it assumes.
Further reading
- FOM definition and the phase-noise × power trade-off: tank_swing
- [P1] Eq.(21) derivation and the /2 vs. /4 convention: white_noise_to_phase_noise
- [P2] ring FOM and N-independence: lc_vs_ring, paper_002 deep-dive
- Leeson's compared against ISF: derivation_leeson
- Where topology-level comes from (tail, Colpitts narrow window): real_oscillator_topologies
- The FOM → jitter → BER chain: serdes_clocking_connection, lab_08
- Site-wide citation list: references
External literature (not among the five downloaded source PDFs)
- [E-Hegazi] E. Hegazi, H. Sjöland, and A. A. Abidi, "A Filtering Technique to Lower LC Oscillator Phase Noise," IEEE J. Solid-State Circuits, vol. 36, no. 12, pp. 1921–1930, Dec. 2001. (LC noise-factor lower bound and the tail filter; already cited and verified by volume/page on this site in tank_swing.)
- [E-Andreani] P. Andreani, X. Wang, L. Vandi, and A. Fard, "A Study of Phase Noise in Colpitts and LC-Tank CMOS Oscillators," IEEE J. Solid-State Circuits, vol. 40, no. 5, pp. 1107–1118, May 2005. (Closed-form noise factors and measured comparison for Colpitts vs. LC-tank; already cited on this site in real_oscillator_topologies, DOI 10.1109/JSSC.2005.845991. This page only draws on its abstract-level conclusion and does not transcribe its internal formulas.)
- [E1] Leeson 1966: D. B. Leeson, "A Simple Model of Feedback Oscillator Noise Spectrum," Proc. IEEE, vol. 54, no. 2, pp. 329–330, Feb. 1966. (The form; see derivation_leeson.)
- [E-Friis] H. T. Friis, "Noise Figures of Radio Receivers," Proc. IRE, vol. 32, no. 7, pp. 419–422, Jul. 1944. (Origin of the K noise-reference-temperature convention; dBm/Hz is the conversion.)