跳至主要内容

時脈鏈雜訊記帳:×N、÷N、PLL、buffer 一頁查表

先備psd_phase_noise_jitterSϕS_\phiL\mathcal{L}、phase↔time 換算)、pll_noise_budgetHlp2,Hhp2\lvert H_{lp}\rvert^2,\lvert H_{hp}\rvert^2 與五源預算——本頁直接沿用、不重推)、white_noise_to_phase_noise(VCO 那條 148-148 dBc/Hz 從哪來)| 接下來serdes_clocking_connectionexercises

真實系統裡沒有「一顆振盪器直接用」這回事:參考晶體被 PLL 倍頻上去、再被除頻器分下來、 一路又過好幾級 buffer 才到取樣器。系統工程師每天的問題是:給我源頭的 L(f)\mathcal{L}(f), 時脈樹(clock tree)每一個節點的 L(f)\mathcal{L}(f) 是多少?最後那個 clock 的積分 jitter 是多少? 好消息是:整條鏈的記帳只需要四條規則。這頁把四條規則各自逐步推導(不跳步、帶單位、 給失效條件),然後用一條完整的 worked chain 把它們串起來算到底。

物理直覺(先講結論):時脈鏈上發生在相位身上的事,只有兩種—— (1) 確定性的相位縮放:×N 把相位乘 NN+20log10N+20\log_{10}N dB)、÷N 把相位除 NN20log10N-20\log_{10}N dB)、PLL 在 in-band 對 reference 做 ×N 並低通、對 VCO 高通。 縮放作用在整條曲線上,offset 軸不動。 (2) 加成的獨立雜訊:buffer 與 divider 自己的雜訊床(floor),與輸入相位不相關, 功率相加(絕不是 dB 相加)。 另外有一個漂亮的守恆量:理想 ×N/÷N 下,以秒計的時間抖動 σt\sigma_t 完全不變—— 變的只是「同一個秒數誤差佔一個週期的角度比例」。

第 0 步:一頁查表(先給結論,推導在後)

元件相位關係L(f)\mathcal{L}(f) 記帳主要失效條件
理想 ×N 倍頻ϕout=Nϕin\phi_{out}=N\,\phi_{in}L+20log10N\mathcal{L}+20\log_{10}N(整條曲線平移)小角近似(σϕ×N\sigma_\phi\times N 變大)、offset 接近 fref/2f_{ref}/2
理想 ÷N 除頻ϕout=ϕin/N\phi_{out}=\phi_{in}/NL20log10N\mathcal{L}-20\log_{10}N取樣摺疊(offset 接近 fout/2f_{out}/2)、divider 自身床
過 PLL(×N)in-band 跟 ref、out-of-band 跟 VCON2SrefHlp2+SvcoHhp2N^2S_{ref}\lvert H_{lp}\rvert^2+S_{vco}\lvert H_{hp}\rvert^2純二階 loop 的 ref 尾巴(本頁第 6 步實算)
buffer / divider 床ϕout=ϕin+ϕadd\phi_{out}=\phi_{in}+\phi_{add}10log10(10Lin/10+10Lbuf/10)10\log_{10}\big(10^{\mathcal{L}_{in}/10}+10^{\mathcal{L}_{buf}/10}\big)相關雜訊(共 supply/bias)時不能直接功率相加

慣例聲明(factor-of-2 紀律,全頁一致):本頁所有 L\mathcal{L} 都是 SSB(單邊帶)dBc/Hz, 與 SϕS_\phi 的換算用小角近似 L=12Sϕ\mathcal{L}=\tfrac12 S_\phi(規範公式 16;noise_utils 同一慣例)。 worked chain 的 VCO 錨點 148-148 dBc/Hz @ 1 MHz 是站內 canonical 例 B,用 [P1] Eq.(21), p.185 的 「/4」SSB 記帳;乾淨時域推導的「/2」版本會給 145-145(差 3 dB 的著名慣例之爭,見 white_noise_to_phase_noise)。本頁四條規則本身 (±20log10N\pm20\log_{10}N、功率相加)都是比值運算:只要輸入輸出用同一個慣例,/2 或 /4 都會對消, 規則的數字不受慣例影響——這是為什麼記帳規則可以放心查表。

規則 1:理想 ×N 倍頻 —— 為什麼是 +20log10N+20\log_{10}N

第 1 步(把訊號寫成相位的函數)。 用 [P1] Eq.(1), p.181 的分解,取正弦波形:

Vin(t)=cos(Φin(t)),Φin(t)=ωreft+ϕin(t)V_{in}(t)=\cos\big(\Phi_{in}(t)\big),\qquad \Phi_{in}(t)=\omega_{ref}\,t+\phi_{in}(t)

Φin\Phi_{in}總相位(rad),ϕin\phi_{in} 是 excess phase(rad),ωref=2πfref\omega_{ref}=2\pi f_{ref}(rad/s)。

第 2 步(理想倍頻器=無記憶非線性+帶通)。 任何無記憶非線性 g()g(\cdot) 作用在 cosΦ\cos\Phi 上,因為 g(cosΦ)g(\cos\Phi)Φ\Phi2π2\pi 週期函數,可展開成對 Φ\Phi 的傅立葉級數:

g(cosΦ(t))=k=0akcos(kΦ(t)+θk)g\big(\cos\Phi(t)\big)=\sum_{k=0}^{\infty}a_k\cos\big(k\,\Phi(t)+\theta_k\big)

關鍵在引數:每一項都是「瞬時總相位的整數倍 kΦ(t)k\Phi(t)」——無記憶元件沒有時間概念, 只能對「當下的相位」動作,所以 excess phase 被原封不動地帶著走。

第 3 步(帶通取第 NN 諧波)。NfrefN f_{ref} 為中心的帶通濾波器取 k=Nk=N 那一項:

Vout(t)cos(NΦin(t))=cos(Nωreft+Nϕin(t)) ϕout(t)=Nϕin(t) V_{out}(t)\propto\cos\big(N\Phi_{in}(t)\big)=\cos\big(N\omega_{ref}\,t+N\phi_{in}(t)\big) \quad\Longrightarrow\quad \boxed{\ \phi_{out}(t)=N\,\phi_{in}(t)\ }

這是逐時刻成立的恆等式——ϕin\phi_{in} 的每一個頻率成分都被乘 NN,沒有任何頻率選擇性。

第 4 步(換成 PSD 與 dB)。 相位乘 NN(幅度),功率譜密度乘 N2N^2

Sϕ,out(f)=N2Sϕ,in(f)  [rad2/Hz],Lout(f)=Lin(f)+20log10N  [dBc/Hz]S_{\phi,out}(f)=N^2\,S_{\phi,in}(f)\ \ [\text{rad}^2/\text{Hz}],\qquad \mathcal{L}_{out}(f)=\mathcal{L}_{in}(f)+20\log_{10}N\ \ [\text{dBc/Hz}]

第二式用了 L=12Sϕ\mathcal{L}=\tfrac12 S_\phi——輸入輸出同一慣例12\tfrac12 對消,所以 +20log10N+20\log_{10}N 與 /2-vs-/4 慣例無關。N=50N=50+20log1050=+33.98+20\log_{10}50=+33.98 dB +34\approx+34 dB。

  • 物理意義:倍頻不創造雜訊。它把「同一個絕對時間抖動」放大成 NN 倍的角度—— 輸出一個週期只有輸入的 1/N1/N 長,同樣的秒數誤差佔輸出週期的比例是 NN 倍。
  • offset 軸不動(常見錯誤):被乘 NN 的是相位幅度,不是相位起伏的節奏。 L\mathcal{L} 曲線整條垂直上移 20log10N20\log_{10}N,水平軸(offset ff)完全不變。
  • Dimension checkNN 無因次、ϕ\phi 為 rad、SϕS_\phi 為 rad²/Hz、20log10N20\log_{10}N 為 dB ✓。
  • 時間抖動守恆Δtout=ϕout2πNfref=Nϕin2πNfref=ϕin2πfref=Δtin\Delta t_{out}=\dfrac{\phi_{out}}{2\pi N f_{ref}}=\dfrac{N\phi_{in}}{2\pi N f_{ref}} =\dfrac{\phi_{in}}{2\pi f_{ref}}=\Delta t_{in}——以秒計的 edge 誤差不變(後面第 5 步用數值驗證)。

失效條件:(1) 小角近似——σϕ,out=Nσϕ,in\sigma_{\phi,out}=N\sigma_{\phi,in}NN 大時(例如 N=1000N=1000+60+60 dB)可能逼近 1 rad,L12Sϕ\mathcal{L}\approx\tfrac12 S_\phi 崩潰,載波能量重新分佈 成 Lorentzian(線寬擴散常數 DD 放大 N2N^2 倍,見 lorentzian_linewidth);(2) 邊帶重疊——offset 接近 fref/2f_{ref}/2 時第 N±1N\pm1 諧波的裙帶混進帶通;(3) 真實倍頻器有自己的加成床(規則 4)。

ILCM 補充:本規則假設「無記憶非線性+帶通」——這種倍頻器不創造雜訊,只把輸入的 excess phase 原封不動放大 NN 倍。真實的 injection-locked clock multiplier(ILCM,注入鎖定 倍頻器)不是這種機器:它是一顆被鎖定的振盪器,載波路徑仍是確定性的 ϕoutNϕin\phi_{out}\approx N\phi_{in} (in-band 參考雜訊照樣吃 N2SrefN^2S_{ref}+20log10N+20\log_{10}N,與本規則一致),但它自己的自由跑 相位雜訊被一階離散時間迴路高通整形(corner βfref/2π\approx\beta f_{ref}/2\piβ\beta=每根參考 脈衝的 realignment factor)取代了本規則「乾淨常數移位」的假設——offset 越過 corner,輸出 雜訊由 ILCM 自己的振盪器品質決定,不再是 +20log10N+20\log_{10}N 能描述的。完整推導見 subharmonic_injection

規則 2:理想 ÷N 除頻 —— 20log10N-20\log_{10}N 的嚴格出處

quadrature_and_coupled_oscillators 頁在 ÷2 產生 I/Q 那節直接引用了 Lout=Lin20log10N\mathcal{L}_{out}=\mathcal{L}_{in}-20\log_{10}N這裡是那條式子的 嚴格推導之家,兩頁數字一致(÷2 即 6.02-6.02 dB)。

第 1 步(輸入 edge 的時刻)。 輸入第 kk 個上升過零點 tkt_k 由總相位定義: Φin(tk)=2πk\Phi_{in}(t_k)=2\pi k。代入 Φin=ωreft+ϕin(t)\Phi_{in}=\omega_{ref}t+\phi_{in}(t) 解出:

tk=kTrefϕin(tk)ωrefδtk=ϕin(kTref)ωreft_k=k\,T_{ref}-\frac{\phi_{in}(t_k)}{\omega_{ref}} \qquad\Longrightarrow\qquad \delta t_k=-\frac{\phi_{in}(kT_{ref})}{\omega_{ref}}

第二式用了「ϕ\phi 慢變」(offset fref\ll f_{ref})把 ϕin(tk)\phi_{in}(t_k) 換成 ϕin(kTref)\phi_{in}(kT_{ref})Dimension check[rad]/[rad/s]=[s][\text{rad}]/[\text{rad/s}]=[\text{s}] ✓。

第 2 步(除頻器只丟 edge、不搬 edge)。 理想 ÷N 是個 edge-picking 機器:每 NN 個輸入 edge 輸出一個,而且輸出 edge 的時刻就是被選中的那個輸入 edge 的時刻。所以絕對時間誤差 δt\delta t 原封不動傳到輸出:

δtm(out)=δtmN\delta t^{(out)}_m=\delta t_{mN}

第 3 步(把時間誤差摺回輸出載波的相位)。 輸出載波 ωout=ωref/N\omega_{out}=\omega_{ref}/N。輸出的 excess phase 由同一條相位定義反推(Φout(tm)=2πm\Phi_{out}(t'_m)=2\pi mtm=mTout+δtmt'_m=mT_{out}+\delta t_m):

ϕout=ωoutδt(out)=ωoutωrefϕin ϕout=ϕinN \phi_{out}=-\,\omega_{out}\,\delta t^{(out)} =\frac{\omega_{out}}{\omega_{ref}}\,\phi_{in} \qquad\Longrightarrow\qquad \boxed{\ \phi_{out}=\frac{\phi_{in}}{N}\ }

第 4 步(PSD 與 dB)。

Sϕ,out(f)=Sϕ,in(f)N2,Lout(f)=Lin(f)20log10NS_{\phi,out}(f)=\frac{S_{\phi,in}(f)}{N^2},\qquad \mathcal{L}_{out}(f)=\mathcal{L}_{in}(f)-20\log_{10}N

÷2 即 20log102=6.02-20\log_{10}2=-6.02 dB。物理意義:同一個秒數的抖動,攤在 NN 倍長的週期上, 角度小 NN 倍。與規則 1 完全對稱:×N 再 ÷N,L\mathcal{L} 回到原點,σt\sigma_t(秒)全程不變。

小測驗(先自己算,再檢查)
dB
判定:相對誤差 ±1% 內算對;可用科學記號輸入。

失效條件(兩個都重要)

  1. 取樣摺疊(aliasing)ϕout\phi_{out} 只在輸出 edge 的時刻有定義——這是一個以 fout\sim f_{out} 取樣的系統。輸入相位雜訊中 offset 高於 fout/2\sim f_{out}/2 的成分會摺回輸出頻帶;對平坦的 寬頻 noise floor,除頻賺不滿 20log10N20\log_{10}N(摺疊把功率疊回來)。乾淨的 20log10N-20\log_{10}N 只對 offset fout\ll f_{out} 的 close-in 雜訊成立。(外部文獻,非本站 5 篇 PDF;標準除頻器 雜訊模型見本頁末 Egan。)
  2. divider 自身的床:真實除頻器(CML latch、TSPC)有自己的加成床(規則 4),常常比 「被除乾淨的訊號」高——除頻之後輸出永遠不會好過 divider 自己的床

與 [P4] 的關係:注入鎖定除頻器(ILFD)用 ISF 的第 2 諧波把 2f02f_0 鎖到 f0f_0 實作 ÷2 ([P4],Part II 的 frequency division,見 paper_004)。÷N 的相位記帳 (ϕ/N\phi/N)對 ILFD 的載波路徑同樣成立;但 ILFD 靠近 lock range 邊緣時有自己的雜訊行為, 不在本頁的理想記帳內。

規則 3:過 PLL —— reference 走「×N+低通」、VCO 走「高通」

PLL 是規則 1 的閉迴路實作:divider 把輸出拉回 freff_{ref} 比相,等於強迫「輸出相位 =N×=N\times 參考相位」——所以 reference 雜訊先吃 +20log10N+20\log_{10}N(規則 1),被閉環 低通 Hlp2\lvert H_{lp}\rvert^2 整形;VCO 自己的雜訊被高通 Hhp2\lvert H_{hp}\rvert^2 整形:

Sout(f)=N2Sref(f)Hlp(f)2+Svco(f)Hhp(f)2[rad2/Hz]S_{out}(f)=N^2\,S_{ref}(f)\,\lvert H_{lp}(f)\rvert^2+S_{vco}(f)\,\lvert H_{hp}(f)\rvert^2 \qquad[\text{rad}^2/\text{Hz}]

兩條轉移函數(type-II 二階,ωn,ζ\omega_n,\zeta)與完整五源預算已在 pll_noise_budget 逐步推導並驗證,本頁直接沿用不重推 (該頁也含 charge-pump 床 ScpHlp2S_{cp}\lvert H_{lp}\rvert^2;本頁 worked chain 為了聚焦四條規則, 把 CP 床併入「in-band 床」概念、數值上略去,標 illustrative)。查表用的 brick-wall(磚牆) 記帳是它的漸近版本:

  • in-band(ffnf\ll f_nHlp21\lvert H_{lp}\rvert^2\to1Hhp20\lvert H_{hp}\rvert^2\to0LoutLref+20log10N\mathcal{L}_{out}\approx\mathcal{L}_{ref}+20\log_{10}N
  • out-of-band(ffnf\gg f_nHlp20\lvert H_{lp}\rvert^2\to0Hhp21\lvert H_{hp}\rvert^2\to1LoutLvco\mathcal{L}_{out}\approx\mathcal{L}_{vco}(VCO 自由跑的裙邊)。
  • 切換點取 loop bandwidth fnf_n

Dimension checkSS 皆 rad²/Hz、N2N^2H2\lvert H\rvert^2 無因次 ✓。 brick-wall 版本好用但有一個著名的坑——純二階 loop 的 reference 尾巴,第 6 步用數值攤開。

規則 4:buffer / divider 的加成床 —— 功率相加,絕不是 dB 相加

第 1 步(buffer 為什麼是「加成」)。 buffer 對 edge 做再生(regeneration):輸入波形穿過 切換門檻的瞬間,buffer 內部 device 的雜訊電壓 vnv_n(V)疊在門檻上,把輸出 edge 推移

Δtadd=vn(tk)SR[VV/s=s] \Delta t_{add}=\frac{v_n(t_k)}{SR}\qquad \Big[\frac{\text{V}}{\text{V/s}}=\text{s}\Big]\ \checkmark

SRSR=穿越門檻處的 slew rate,V/s。這與 waveform_slope 的「斜率小處最敏感」是同一件事。) vnv_n 來自 buffer 自己的 device,與輸入時脈的相位不相關

第 2 步(不相關 ⇒ PSD 相加)。 相位上這是純加法:

ϕout=ϕin+ϕaddSϕ,out(f)=Sϕ,in(f)+Sbuf(f)\phi_{out}=\phi_{in}+\phi_{add} \qquad\Longrightarrow\qquad S_{\phi,out}(f)=S_{\phi,in}(f)+S_{buf}(f)

(交叉項 ϕinϕadd=0\langle\phi_{in}\phi_{add}\rangle=0。)換成 dBc/Hz 就得到查表式——注意必須 先轉線性、相加、再轉回 dB

 Lout(f)=10log10(10Lin(f)/10+10Lbuf(f)/10) \boxed{\ \mathcal{L}_{out}(f)=10\log_{10}\Big(10^{\mathcal{L}_{in}(f)/10}+10^{\mathcal{L}_{buf}(f)/10}\Big)\ }

兩個 L\mathcal{L} 都是同載波、同慣例的 SSB,L=12Sϕ\mathcal{L}=\tfrac12 S_\phi12\tfrac12 在等式兩邊對消——所以直接用 L\mathcal{L} 記帳合法,與 /2-vs-/4 慣例無關。

第 3 步(乘法 vs 加法——本頁最重要的分類)。 規則 1–3 是乘法:把「進來的」相位整條縮放/整形,源頭乾淨、輸出就乾淨。 規則 4 是加法:buffer 加進新的、獨立的雜訊,輸出永遠不會好過 buffer 自己的床—— 再乾淨的源頭過一級吵 buffer 就毀了。這就是「floor dominates」的意思。

第 4 步(什麼時候床當家——dB 加法表)。 設訊號比床高 Δ\Delta dB,代價是 10log10(1+10Δ/10)10\log_{10}(1+10^{-\Delta/10})

Δ=LinLbuf\Delta=\mathcal{L}_{in}-\mathcal{L}_{buf}輸出比 Lin\mathcal{L}_{in}誰當家
+20+20 dB(訊號高很多)+0.04+0.04 dB床完全隱形
+10+10 dB+0.41+0.41 dB床開始可見
+6+6 dB+0.97+0.97 dB
+3+3 dB+1.76+1.76 dB
00 dB(一樣高)+3.01+3.01 dB各半
10-10 dB(訊號低於床)輸出 Lbuf+0.41\approx\mathcal{L}_{buf}+0.41床當家,輸出被鉗住

第 5 步(平坦床 ⇒ 白 phase noise ⇒ 一條好記的 jitter 公式)。 平坦的 Lbuf\mathcal{L}_{buf} 就是白相位雜訊,積分頻寬 BB(Hz)內它自己貢獻的 rms jitter:

σt,add=12πf0210Lbuf/10B\sigma_{t,add}=\frac{1}{2\pi f_0}\sqrt{2\cdot10^{\mathcal{L}_{buf}/10}\cdot B}

2×2\timesLSϕ\mathcal{L}\to S_\phi 的小角換算,規範公式 16;再用規範公式 19 積分。) 數值:Lbuf=155\mathcal{L}_{buf}=-155 dBc/Hz、B100B\approx100 MHz、f0=2.5f_0=2.5 GHz: σt,add=2×3.16×1016×108/(2π×2.5×109)=2.51×104/1.571×1010=16.0\sigma_{t,add}=\sqrt{2\times3.16\times10^{-16}\times10^8}\,/(2\pi\times2.5\times10^9) =2.51\times10^{-4}/1.571\times10^{10}=16.0 fs。 Dimension check[rad2/Hz][Hz]=[rad]\sqrt{[\text{rad}^2/\text{Hz}]\cdot[\text{Hz}]}=[\text{rad}][rad]/[rad/s]=[s][\text{rad}]/[\text{rad/s}]=[\text{s}] ✓。(這個 16.0 fs 等下會在 worked chain 的分解裡 原封不動出現。)

小測驗(先自己算,再檢查)
fs
判定:相對誤差 ±2% 內算對;可用科學記號輸入。

四條規則的常數先用一個可核對的 Python 塊釘死(# -> 後面就是實跑輸出):

import numpy as np
print(round(20*np.log10(50), 2)) # -> 33.98
print(round(20*np.log10(2), 2)) # -> 6.02
print(round(10*np.log10(1 + 10**(-20/10)), 2)) # -> 0.04
print(round(10*np.log10(1 + 10**(-10/10)), 2)) # -> 0.41
print(round(10*np.log10(1 + 10**(-6/10)), 2)) # -> 0.97
print(round(10*np.log10(1 + 10**(-3/10)), 2)) # -> 1.76
print(round(10*np.log10(1 + 10**(0/10)), 2)) # -> 3.01

第 5 步:守恆量——理想 ×N/÷N 下 σt\sigma_t(秒)不變

把規則 1 與 2 的結論並排看:×N 時 ϕ×N\phi\times N 而載波 f0×Nf_0\times N;÷N 時 ϕ/N\phi/Nf0/Nf_0/N。代進 Δt=ϕ/(2πf0)\Delta t=\phi/(2\pi f_0)(規範公式 17),兩個 NN 對消:

σt,out=σϕ,out2πf0,out=N±1σϕ,in2πN±1f0,in=σt,in\sigma_{t,out}=\frac{\sigma_{\phi,out}}{2\pi f_{0,out}} =\frac{N^{\pm1}\,\sigma_{\phi,in}}{2\pi\,N^{\pm1} f_{0,in}}=\sigma_{t,in}

以秒計的時間抖動是理想倍頻/除頻的不變量。 變差(或變好)的 L\mathcal{L} 只是 「同一個秒數誤差換算成角度」的匯率變了。這給你一個超好用的 sanity check:鏈上任何一段 「純 ×N/÷N、沒有加成床」的路徑,頭尾用同一積分頻帶算出來的 σt\sigma_t 必須一樣。 用 worked chain 的數字驗證(5 GHz 那級 vs 理想 ÷2 後的 2.5 GHz,都不含 buffer):

import numpy as np
from simulations.common.noise_utils import integrate_rms_jitter
f = np.logspace(4, 8, 20001)
L5G = np.where(f <= 1e6, -126.02, -148.0 - 20*np.log10(f/1e6))
st5, _ = integrate_rms_jitter(f, L5G, f0=5e9, fmin=1e4, fmax=1e8)
st25, _ = integrate_rms_jitter(f, L5G - 6.02, f0=2.5e9, fmin=1e4, fmax=1e8)
print(round(st5*1e15, 1)) # -> 22.5
print(round(st25*1e15, 1)) # -> 22.5

兩個 22.5 fs 一模一樣——÷2 讓 L\mathcal{L} 好了 6 dB,卻一顆 fs 都沒省。 對 SerDes 這其實是壞消息的另一面:換算成 UI 時,σt\sigma_t 不變而 UI 變長, 所以除頻後「佔 UI 的比例」確實變小——省的是比例,不是秒數。

第 6 步:worked chain——100 MHz → ×50 PLL → 5 GHz → ÷2 → 2.5 GHz → buffer

現在把四條規則串成一條真實形狀的鏈。所有數值是 representative/illustrative (非特定矽製程),但與站內 canonical 完全一致。

參數表:

單位說明
freff_{ref}100MHz參考頻率
Lref\mathcal{L}_{ref}160-160(平坦床)dBc/Hz乾淨參考的 far-out 床(illustrative;真實晶體 close-in 會翹,本頁只看 10\ge10 kHz)
NN50100 MHz5 GHz100\ \text{MHz}\to5\ \text{GHz}
fn, ζf_n,\ \zeta1 MHz、0.707Hz、—type-II 二階 loop(沿用 pll_noise_budget
VCOL(1MHz)=148\mathcal{L}(1\,\text{MHz})=-1481/f21/f^2dBc/Hz站內 canonical 例 B([P1] Eq.(21), p.185,/4 SSB 慣例)
÷N252.55\to2.5 GHz
Lbuf\mathcal{L}_{buf}155-155(平坦床)dBc/Hz輸出 buffer 的加成床
積分頻帶10410^410810^8Hz最終 jitter 積分

6.1 每級的 L\mathcal{L}:in-band 看 100 kHz、out-of-band 看 10 MHz

逐步手算(brick-wall 記帳):

  1. 參考:平坦床 ⇒ 兩個 offset 都是 160.00-160.00
  2. PLL 輸出(5 GHz)
    • in-band(100 kHzfn100\ \text{kHz}\ll f_n):規則 3 ⇒ 160+20log1050=160+33.98=126.02-160+20\log_{10}50=-160+33.98=-126.02
    • out-of-band(10 MHzfn10\ \text{MHz}\gg f_n):VCO 自由跑,1/f21/f^2 由 1 MHz 錨點外推: 14820log10(10)=168.00-148-20\log_{10}(10)= -168.00
  3. ÷2(2.5 GHz):規則 2,整條 6.02-6.02 dB ⇒ 132.04-132.04174.02-174.02
  4. 輸出 buffer:規則 4,與 155-155 床做功率相加:
    • 100 kHz:訊號 132.04-132.04 比床 22.96 dB ⇒ 代價 0.02\approx0.02 dB ⇒ 132.02-132.02(床隱形)。
    • 10 MHz:訊號 174.02-174.02 比床 19 dB ⇒ 床當家154.95-154.95(被鉗在 155-155 附近)。
節點載波L\mathcal{L}(100 kHz) [dBc/Hz]L\mathcal{L}(10 MHz) [dBc/Hz]當家的規則
參考100 MHz160.00-160.00160.00-160.00
PLL ×50 輸出5 GHz126.02-126.02168.00-168.00規則 3(in-band ref+34;out-of-band VCO)
÷2 之後2.5 GHz132.04-132.04174.02-174.02規則 2(6.02-6.02
+buffer(最終)2.5 GHz132.02-132.02154.95-154.95規則 4(10 MHz 處床當家)

同一張表用可核對的 Python 釘死:

import numpy as np
L_ref = -160.0
L_in = L_ref + 20*np.log10(50) # 規則 1/3:in-band = ref + 20logN
print(round(L_in, 2)) # -> -126.02
L_vco_10M = -148.0 - 20*np.log10(10e6/1e6) # VCO 1/f²:由 1 MHz 錨點外推到 10 MHz
print(round(L_vco_10M, 2)) # -> -168.0
div = -20*np.log10(2) # 規則 2
print(round(L_in + div, 2)) # -> -132.04
print(round(L_vco_10M + div, 2)) # -> -174.02
def padd(*Ls): return 10*np.log10(sum(10**(L/10) for L in Ls))
print(round(padd(L_in + div, -155.0), 2)) # -> -132.02
print(round(padd(L_vco_10M + div, -155.0), 2)) # -> -154.95

6.2 最終 2.5 GHz 時脈的積分 jitter(10 kHz–100 MHz)

最終曲線的 brick-wall 模型:in-band 床 132.04-132.04(到 fn=1f_n=1 MHz)、之後接被 ÷2 的 VCO 裙邊 (1 MHz 錨點 1486.02=154.02-148-6.02=-154.021/f21/f^2),全程再與 155-155 buffer 床功率相加。 用規範公式 18/19 手積(LSϕ=2×10L/10\mathcal{L}\to S_\phi=2\times10^{\mathcal{L}/10}):

in-band 床:σϕ,12=2×1013.204×(106104)=1.250×1013×9.9×105=1.238×107 rad2,VCO 裙邊:σϕ,22=2×1015.402(106)2 ⁣(11061108)=7.9×1010 rad2,buffer 床:σϕ,32=2×1015.5×(108104)=6.32×108 rad2,σϕ=1.238×107+7.9×1010+6.32×108=4.33×104 rad,σt=σϕ2π×2.5×109=27.6 fs.\begin{aligned} \text{in-band 床:}\quad \sigma_{\phi,1}^2&=2\times10^{-13.204}\times(10^6-10^4)=1.250\times10^{-13}\times9.9\times10^5 =1.238\times10^{-7}\ \text{rad}^2,\\[2pt] \text{VCO 裙邊:}\quad \sigma_{\phi,2}^2&=2\times10^{-15.402}\,(10^6)^2\!\left(\frac{1}{10^6}-\frac{1}{10^8}\right) =7.9\times10^{-10}\ \text{rad}^2,\\[2pt] \text{buffer 床:}\quad \sigma_{\phi,3}^2&=2\times10^{-15.5}\times(10^8-10^4)=6.32\times10^{-8}\ \text{rad}^2,\\[4pt] \sigma_\phi&=\sqrt{1.238\times10^{-7}+7.9\times10^{-10}+6.32\times10^{-8}} =4.33\times10^{-4}\ \text{rad},\\[2pt] \sigma_t&=\frac{\sigma_\phi}{2\pi\times2.5\times10^9}=27.6\ \text{fs}. \end{aligned}

Dimension check[rad2/Hz]×[Hz]=[rad2][\text{rad}^2/\text{Hz}]\times[\text{Hz}]=[\text{rad}^2] ✓; [rad]/[rad/s]=[s][\text{rad}]/[\text{rad/s}]=[\text{s}] ✓。用 noise_utils 驗證(同一慣例 Sϕ=2LS_\phi=2\mathcal{L}):

import numpy as np
from simulations.common.noise_utils import integrate_rms_jitter
f = np.logspace(4, 8, 20001)
L_core = np.where(f <= 1e6, -132.04, -154.02 - 20*np.log10(f/1e6))
L_tot = 10*np.log10(10**(L_core/10) + 10**(-155.0/10))
st, sp = integrate_rms_jitter(f, L_tot, f0=2.5e9, fmin=1e4, fmax=1e8)
print(round(st*1e15, 1)) # -> 27.6
print(round(sp*1e6, 1)) # -> 433.4

誰貢獻了這 27.6 fs?simulations/fig_clock_chain.py 實跑分解,功率比)

來源單獨 σt\sigma_tσϕ2\sigma_\phi^2 比例
in-band 床(reference ×N2\times N^222.4 fs65.9 %
buffer 床16.0 fs33.7 %
VCO 裙邊1.78 fs0.42 %
RSS 總和27.6 fs100 %

這張表是本頁最重要的設計訊息:這條鏈的 jitter 由「被 ×N2\times N^2 抬高的 in-band 床」 與「不起眼的 buffer 床」平分天下;那顆漂亮的 148-148 dBc/Hz VCO 幾乎隱形(0.42 %)。 花力氣再改善 VCO 是白工——記帳先做,力氣才花得對地方。 (buffer 的 16.0 fs 正是規則 4 第 5 步那條公式的數字。)

6.3 對應模擬圖

完整 script:simulations/fig_clock_chain.py(跑法:專案根目錄下 PYTHONPATH=. python3 simulations/fig_clock_chain.py,會列印本頁所有 # -> 數字並產圖)。

時脈鏈記帳:左=各級 SSB phase noise(黑實線=最終 2.5 GHz 時脈、紅虛線=type-II 完整整形);右=最終時脈的累積 rms jitter(brick-wall 27.6 fs vs 整形 44.0 fs)

如何解讀:左圖藍線是 5 GHz 的 brick-wall(in-band 126-126 平台+1 MHz 後的 VCO 裙邊)、 綠線整條下移 6.02 dB(÷2)、橘點線是 155-155 buffer 床、黑粗線是最終輸出——100 kHz 處 132.0-132.0、10 MHz 處被床鉗在 154.9-154.9。右圖是「從 10 kHz 積到 ff」的累積 jitter: in-band 床在 1 MHz 前就累積了 22 fs,之後 buffer 床慢慢把總數推到 27.6 fs; 紅虛線(完整 type-II 整形)在 fnf_n 附近與之後持續高於 brick-wall——這就是下一步要攤開的坑。

第 7 步:誠實對照——brick-wall 查表 vs 完整 type-II 整形

brick-wall 是查表級近似。用 pll_noise_budgetHlp2\lvert H_{lp}\rvert^2 實際算 (pll_utilsfn=1f_n=1 MHz、ζ=0.707\zeta=0.707),兩個 offset 的差異一目了然:

  • in-band(100 kHz):整形版 131.9-131.9 vs brick-wall 132.0-132.0——只差 0.1 dB (Hlp2\lvert H_{lp}\rvert^2fn/10f_n/10 處的輕微 peaking)。查表可靠 ✓。
  • out-of-band(10 MHz):整形版 148.0-148.0 vs brick-wall 154.9-154.9——差 7 dB

原因是 type-II 二階閉環的零點讓 Hlp2\lvert H_{lp}\rvert^2ffnf\gg f_n 只以 20-20 dB/dec 滾降 (Hlp2(2ζfn/f)2\lvert H_{lp}\rvert^2\approx(2\zeta f_n/f)^2),所以被 ×N2\times N^2 抬高的 reference 床有一條 20-20 dB/dec 的尾巴漏到 out-of-band;而 VCO 裙邊也是 20-20 dB/dec——兩條線平行, 差距是常數、永遠追不上

import numpy as np
from simulations.common.pll_utils import H_lowpass_mag2
S_refN2 = 2 * 10**(-126.02/10) # N²·S_ref(in-band 床的 S_phi)[rad²/Hz]
lp = H_lowpass_mag2(10e6, 1e6) # |H_lp|² @ 10 MHz, fn = 1 MHz
L_refpath = 10*np.log10(0.5 * S_refN2 * lp)
print(round(L_refpath, 1)) # -> -143.0
print(round(L_refpath - (-168.0), 1)) # -> 25.0

reference 尾巴在 10 MHz 是 143.0-143.0 dBc/Hz(5 GHz 載波),比 VCO 的 168-168 高 25 dB—— 且因兩者同斜率,這 25 dB 在所有 out-of-band offset 都成立。查表那格 「out-of-band = VCO」對純二階 loop 而言根本到不了。對積分 jitter 的後果 (fig_clock_chain.py 實跑):

模型最終 σt\sigma_t(10 kHz–100 MHz)
brick-wall 查表27.6 fs
type-II 二階完整整形44.0 fs(+59%+59\%
二階+第 3 極點 @ 3 MHz(illustrative)38.6 fs

怎麼修:真實合成器正是為此在 loop filter 加第三極點(以及更高階的 post-filter), 把 ref 尾巴改成 40-40 dB/dec 以上;上表第三列示範一顆 3 MHz 極點就把傷害砍掉三分之一 (極點位置與 loop 穩定性的取捨屬標準 PLL 文獻,外部文獻,非本站 5 篇 PDF)。

再誠實一層:這條鏈的 fn=1f_n=1 MHz 本來就不是 jitter 最佳解——in-band 床(126-126)與 VCO 裙邊的交叉點在 79.679.6 kHz,遠低於 1 MHz。用 pll_noise_budget 的 U 形曲線方法對本鏈掃 fnf_n (整形模型、第 3 極點跟隨在 3fn3f_n):最低點在 fn\*53f_n^\*\approx53 kHz、σt19.6\sigma_t\approx19.6 fs。 查表記帳(本頁)告訴你每一級的帳;最佳化 loop(該頁)告訴你帳該怎麼改——兩件事,別混。

design knobs 清單

旋鈕作用在哪條規則怎麼調
除頻比 NN(參考頻率)規則 1/3:in-band 床 N2\propto N^2本鏈 65.9% 的 jitter 功率來自 ref×N2\times N^2;用更高 freff_{ref}NN 最有效
buffer 床 Lbuf\mathcal{L}_{buf}規則 433.7% 來自一級 155-155 床;加大 buffer 電流/斜率(Δt=vn/SR\Delta t=v_n/SR)壓床;級數越少越好
÷N 放哪裡規則 2+4÷N 只除「它上游」的雜訊;放在吵源之後才享受 20log10N-20\log_{10}N,其下游 buffer 床照原值相加
loop BW fnf_n規則 3本鏈最佳 fn\*53f_n^\*\approx53 kHz(非 1 MHz);交叉點 79.6 kHz 是第一手感
loop 階數(第 3 極點)規則 3純二階的 ref 尾巴與 VCO 平行(本例恆 +25+25 dB);加高階極點才能讓 out-of-band 真的交給 VCO
VCO Γrms/qmax\Gamma_{rms}/q_{max}規則 3 的 SvcoS_{vco}本鏈 VCO 僅 0.42%——先看記帳再決定要不要動它(ISF 旋鈕見 tank_swinglc_vs_ring

與 SerDes 的關聯

最終 2.5 GHz 時脈的 σt=27.6\sigma_t=27.6 fs 直接餵進 serdes_clocking_connection 的 eye/BER 機器: 若這顆 clock 打 5 Gb/s 的 half-rate link(UI =200=200 ps),BER =1012=10^{-12}Q17.03Q^{-1}\approx7.03, 站內 canonical)的 RJ 開銷是 2×7.03×27.6 fs=0.392\times7.03\times27.6\ \text{fs}=0.39 ps =0.19%=0.19\% UI——很健康; 但注意時脈樹每多一級 buffer 就多一份規則 4 的床(功率相加),fan-out 大的樹光是 buffer 就能把預算吃光。free-running 段的累積 jitter([P2] Eq.(8), p.792 的 σΔt=κΔt\sigma_{\Delta t}=\kappa\sqrt{\Delta t})一旦進入 PLL/CDR 的 loop 就被高通截斷—— 這條鏈裡「誰 free-run、誰被鎖」決定哪些雜訊要積、哪些不用(同頁第 6 步)。

適用與失效條件

條件成立時失效時
小角近似(σϕ1\sigma_\phi\ll1 rad)L=12Sϕ\mathcal{L}=\tfrac12 S_\phi±20log10N\pm20\log_{10}N 查表成立NN 倍頻後 σϕ×N\sigma_\phi\times N 變大 → Lorentzian 重分佈(lorentzian_linewidth
offset fref/2\ll f_{ref}/2(×N)、fout/2\ll f_{out}/2(÷N)乾淨的 ±20log10N\pm20\log_{10}N邊帶重疊/取樣摺疊,平坦床賺不滿 20log10N-20\log_{10}N
各級雜訊不相關規則 4 功率相加共用 supply/bias 的相關雜訊(如 PSIJ)要含交叉項,可能同相疊加
brick-wall PLL 記帳in-band 查表誤差 0.1\sim0.1 dB純二階 loop:ref 尾巴與 VCO 平行(本例恆差 25 dB),out-of-band 那格可錯 7 dB、σt\sigma_t 低估 59%
理想 edge-picking divider20log10N-20\log_{10}N真實 divider 自身床(規則 4)先當家;ILFD 近 lock-range 邊緣另計([P4])

重點回顧

  • 四條規則:×N 加 20log10N20\log_{10}Nϕout=Nϕin\phi_{out}=N\phi_{in},offset 軸不動); ÷N 減 20log10N20\log_{10}N(edge-picking,時間誤差原封不動、角度除 NN); PLL=reference 走 N2Hlp2N^2\lvert H_{lp}\rvert^2、VCO 走 Hhp2\lvert H_{hp}\rvert^2 (轉移函數沿用 pll_noise_budget); buffer/divider 床=功率相加Lout=10log10(10Lin/10+10Lbuf/10)\mathcal{L}_{out}=10\log_{10}(10^{\mathcal{L}_{in}/10}+10^{\mathcal{L}_{buf}/10})
  • 守恆量:理想 ×N/÷N 下 σt\sigma_t(秒)不變(本例兩端都是 22.5 fs);÷N 省的是「佔 UI 的比例」,不是秒。
  • worked chain(100 MHz→×50→5 GHz→÷2→2.5 GHz→buffer):100 kHz 處 160126.02132.04132.02-160\to-126.02\to-132.04\to-132.02; 10 MHz 處 160168.00174.02154.95-160\to-168.00\to-174.02\to-154.95(床當家)。
  • 最終積分 jitter(10 kHz–100 MHz)=27.6 fs;分解=ref×N2\times N^2 床 65.9%+buffer 床 33.7%+VCO 0.42%—— 記帳先行,別盲目升級 VCO
  • 誠實對照:純 type-II 二階 loop 的 ref 尾巴與 VCO 裙邊平行(本例恆 +25+25 dB), 整形後 σt=44.0\sigma_t=44.0 fs(比查表高 59%);加第 3 極點(3 MHz)→ 38.6 fs; 本鏈 jitter 最佳 loop BW 其實是 fn\*53f_n^\*\approx53 kHz(σt19.6\sigma_t\approx19.6 fs)。
  • 慣例紀律:規則全是比值/加法運算,/2-vs-/4 對消;唯一吃慣例的是 VCO 錨點 (148-148=[P1] Eq.(21) 的 /4 SSB;時域 /2 給 145-145)。

延伸閱讀

外部文獻(不在下載的 5 篇 PDF 內)

  • ×N/÷N 的 ±20log10N\pm20\log_{10}N、divider 取樣摺疊、加成床:標準頻率合成記帳 (外部文獻,非本站 5 篇 PDF;任何 frequency-synthesis 教材皆有)。標準參考: W. F. Egan, Frequency Synthesis by Phase Lock, 2nd ed., Wiley, New York, 2000; B. Razavi, RF Microelectronics, 2nd ed., Prentice Hall, Upper Saddle River, NJ, 2012。
  • 本站 5 篇 PDF 提供的是鏈上「源」的物理:[P1](VCO 的 L\mathcal{L} 與 ISF)、 [P2](ring 的 κΔt\kappa\sqrt{\Delta t} 累積)、[P3]/[P4](注入鎖定與 ILFD 除頻機制)。