跳至主要内容

DJ 與 dual-Dirac 模型:TJ@BER 的業界標準工具

先備serdes_clocking_connection(RJ/DJ/TJ 初登場、eye 與 BER)、lab_12(RJ-only bathtub)、lab_08σt\sigma_t 從 phase noise 積分而來)| 接下來exerciseslab_13

serdes_clocking_connection 已經給出速記式 「TJ == DJ +2Q+\,2Q\cdotRJ」。這一頁把這個式子從頭嚴格建立起來:什麼是 RJ、什麼是 DJ、 QQ 從哪個積分來、bathtub 曲線怎麼從 jitter 的 CDF(累積分布函數)推出來、 以及業界(Fibre Channel MJSQ 以降的 SerDes 規格)實際在用的 dual-Dirac(雙 Dirac)模型 ——包含它最常被誤解、也最重要的誠實聲明:模型參數 DJδδ\mathrm{DJ}_{\delta\delta} 天生 小於等於實際的 peak-to-peak DJ,而且這個「低報」是故意的,正是它讓 TJ 外插準確。

物理直覺(先講結論):jitter 有兩種本質不同的成分。RJ(random jitter,隨機抖動) 是振盪器 phase noise 的時域化身——高斯、無上界,你等得越久(BER 目標越嚴)它就「長」得越大, 所以必須用 σ\sigma 乘上一個隨 BER 變大的倍數來記帳。DJ(deterministic jitter,確定性抖動) 由確定的物理機制驅動(碼間干擾、佔空比失真、電源漣波),幅度有物理上限, 用 peak-to-peak 記帳、不隨 BER 放大。dual-Dirac 模型就是把「任意形狀的有界 DJ」 壓縮成兩支 Dirac、把 RJ 保留為高斯,換取一條可以外插到 101210^{-12} 的直線。 量測 101210^{-12} 的 BER 要等 101210^{12} 個位元——10 Gb/s 也要 100 秒才「平均看到一次錯」, 要有統計信心得等小時級;外插不是偷懶,是工程必需

第 1 步:RJ——無界高斯,從 phase noise 一路走來(本站鏈)

RJ 就是本站前六章建立的整條鏈的終點,逐步回顧(每步有專頁):

  1. device 白噪 → 1/f² phase noise:[P1] Eq.(21), p.185 給 L{Δω}=10log10 ⁣(Γrms2qmax2in2/Δf4Δω2)\mathcal{L}\{\Delta\omega\}=10\log_{10}\!\big(\tfrac{\Gamma_{rms}^2}{q_{max}^2}\cdot\tfrac{\overline{i_n^2}/\Delta f}{4\Delta\omega^2}\big)Γrms\Gamma_{rms} 無因次、qmaxq_{max} 單位 C、in2/Δf\overline{i_n^2}/\Delta f 單位 A²/Hz)。 詳見 white_noise_to_phase_noise
  2. phase noise 積分 → rms jitterσt=12πf0f1f2Sϕ(f)df\sigma_t=\frac{1}{2\pi f_0}\sqrt{\int_{f_1}^{f_2}S_\phi(f)\,df} (單位 s;canonical 例 C:f0=5f_0=5 GHz、L(1MHz)=100\mathcal{L}(1\text{MHz})=-100 dBc/Hz、1/f²、積 1→100 MHz → σt=447.9\sigma_t=447.9 fs)。詳見 lab_08
  3. 時域觀點——隨機漫步:[P2] Eq.(8), p.792 給累積相位 jitter σΔϕ=κΔt\sigma_{\Delta\phi}=\kappa\sqrt{\Delta t}κ\kappa 單位 1/s1/\sqrt{\text{s}},由 [P2] Eq.(11)/(12), p.793 κ=Γrmsqmax12in2/Δf\kappa=\tfrac{\Gamma_{rms}}{q_{max}}\sqrt{\tfrac12\overline{i_n^2}/\Delta f}; 注意式中沒有 ω0\omega_0——換成時間版要再除 ω0\omega_0)。
  4. 為什麼是高斯:每個週期振盪器吃進大量彼此獨立的微小雜訊踢擊,總相位誤差是 獨立增量之和 → 中央極限定理 → 高斯。lab_11 用 Monte-Carlo 直接驗證了直方圖是高斯、σΔN\sigma\propto\sqrt{\Delta N}

RJ 的關鍵性質:無上界。 高斯的尾巴永遠不為零——不存在「保證不越界」的 margin, 只能問「越界機率多小」。這就是為什麼 RJ 必須用 σ\sigma 搭配目標 BER 記帳(第 3 步的 QQ 函數)。

第 2 步:DJ——有界,由確定機制驅動

DJ 是 ISF 理論「看不見」的那一半(它不來自振盪器的隨機雜訊),但 SerDes 量到的 TJ 裡它常常最大。 三個主要來源,各有明確物理與明確上限:

DJ 種類物理機制PDF 形狀為何有界
ISI(inter-symbol interference,碼間干擾)通道頻寬有限、有記憶:edge 位置依賴前面的位元 pattern多支離散尖峰(每種 pattern 一支)通道脈衝響應長度有限
DCD(duty-cycle distortion,佔空比失真)上升/下降緣不對稱、threshold 偏移:上升緣系統性偏早、下降緣偏晚恰好兩支 Dirac不對稱量固定
PJ/SJ(periodic/sinusoidal jitter;電源 spur、串擾)電源漣波經 supply pushing 調變 VCO(見 varactor_tuning_supply_pushing)、鄰近時脈耦合arcsine(雙角)分布弦波幅度固定

注意 DCD 的 PDF 本來就是兩支 Dirac——dual-Dirac 模型對它是精確的; 模型的名字與形狀正是從這種「最壞情況形狀」來的。

弦波 DJ 的 PDF(arcsine 分布),逐步推導。 這是 lab_31 用的 DJ,也是電源 spur 的標準模型。 設 edge 的時間偏移 x=Asinθx=A\sin\thetaAA 為幅度(單位 s),spur 與資料不同步, 所以取樣到的相位 θ\theta[0,2π)[0,2\pi) 均勻分布,pΘ(θ)=12πp_\Theta(\theta)=\tfrac{1}{2\pi}(單位 1/rad)。 變數變換:一個週期內每個 x(A,A)x\in(-A,A) 對應兩個 θ\theta 分支,每支貢獻 pΘ/dx/dθp_\Theta/\vert dx/d\theta\vert,而 dx/dθ=Acosθ=A2x2\vert dx/d\theta\vert=A\vert\cos\theta\vert=\sqrt{A^2-x^2}

pDJ(x)=212π1A2x2=1πA2x2,x<Ap_{DJ}(x)=2\cdot\frac{1}{2\pi}\cdot\frac{1}{\sqrt{A^2-x^2}}=\frac{1}{\pi\sqrt{A^2-x^2}},\qquad \vert x\vert\lt A
  • 單位1/[s2]=1/[s]1/\sqrt{[\text{s}^2]}=1/[\text{s}] ✓(PDF 對 xx 積分無因次)。
  • 歸一化檢查AAdxπA2x2=1π[arcsinxA]AA=1π(π2+π2)=1\int_{-A}^{A}\frac{dx}{\pi\sqrt{A^2-x^2}}=\frac{1}{\pi}\big[\arcsin\tfrac{x}{A}\big]_{-A}^{A}=\frac{1}{\pi}\big(\tfrac{\pi}{2}+\tfrac{\pi}{2}\big)=1 ✓。
  • 物理:弦波在轉折點附近停留最久 → 機率密度在 ±A\pm A 兩端發散(可積的「雙角」)。 lab_31 圖 (a) 的直方圖清楚可見這兩支角。
  • 有界DJpp=2A\mathrm{DJ}_{pp}=2A(peak-to-peak,單位 s)。適用條件:spur 與資料 asynchronous (相位均勻);若 spur 與資料鎖定(synchronous),PDF 退化成離散尖峰,仍有界。

第 3 步:QQ 函數——高斯尾巴積分,Q1(1012)=7.03Q^{-1}(10^{-12})=7.03 從哪來

RJ 的記帳工具是高斯尾巴機率。標準常態 XN(0,1)X\sim\mathcal{N}(0,1)(無因次):

Q(x)P(X>x)=x12πeu2/2duQ(x)\equiv P(X\gt x)=\int_x^{\infty}\frac{1}{\sqrt{2\pi}}\,e^{-u^2/2}\,du

逐步化成 erfc(這樣才接得上 scipy 與本站 serdes_utils.Q)。代換 u=2su=\sqrt2\,sdu=2dsdu=\sqrt2\,ds, 積分下限變 x/2x/\sqrt2

Q(x)=22πx/2es2ds=1πx/2es2ds=12erfc ⁣(x2)Q(x)=\frac{\sqrt2}{\sqrt{2\pi}}\int_{x/\sqrt2}^{\infty}e^{-s^2}\,ds=\frac{1}{\sqrt\pi}\int_{x/\sqrt2}^{\infty}e^{-s^2}\,ds=\frac12\,\mathrm{erfc}\!\Big(\frac{x}{\sqrt2}\Big)

最後一步用了定義 erfc(z)=2πzes2ds\mathrm{erfc}(z)=\tfrac{2}{\sqrt\pi}\int_z^\infty e^{-s^2}ds。 一般高斯(平均 μ\mu、標準差 σ\sigma,單位皆 s)再代換一次 u=(vμ)/σu=(v-\mu)/\sigmaP(V>v)=Q ⁣(vμσ)P(V\gt v)=Q\!\big(\tfrac{v-\mu}{\sigma}\big)——QQ 的引數永遠是「離平均幾個 σ\sigma」,無因次 ✓。

深尾漸近式(分部積分一次)

Q(x)ex2/2x2π(x1, 相對誤差約 1/x2)Q(x)\approx\frac{e^{-x^2/2}}{x\sqrt{2\pi}}\quad(x\gg1,\ \text{相對誤差約}\ 1/x^2)

用它口算 Q(7.03)Q(7.03):指數 7.0342/2=24.77.034^2/2=24.7e24.71.8×1011e^{-24.7}\approx1.8\times10^{-11}、 除以 7.03×2.50717.67.03\times2.507\approx17.61.0×1012\approx1.0\times10^{-12} ✓。這就是全站 jitter 章一直在用的 「BER 101210^{-12}7.03σ7.03\sigma」對照(與 06 exercisesQQ 表一致):

目標 BERQ1(BER)Q^{-1}(\text{BER})RJ peak-to-peak =2Q1σ=2Q^{-1}\sigma
10910^{-9}5.9985.99812.0σ12.0\,\sigma
101210^{-12}7.0347.034(本站記 7.03)14.07σ14.07\,\sigma
101510^{-15}7.9417.941(本站記 7.94)15.88σ15.88\,\sigma

一行 Python 驗證(引用本站真實 API;Q1Q^{-1}erfcinv 反解上面的尾巴積分):

import numpy as np
from scipy.special import erfcinv
from simulations.common.serdes_utils import Q
q = np.sqrt(2) * erfcinv(2 * 1e-12) # Q 的反函數(尾巴積分反解)
print("Qinv(1e-12) =", round(float(q), 3)) # -> 7.034
print("Q(7.034) =", float(Q(7.034))) # -> 1.0e-12

第 4 步:dual-Dirac 模型——定義與 PDF

模型做兩件事(外部文獻,非本站 5 篇 PDF;方法論出處見頁尾):

  1. TJ 的 PDF 是 DJ 的 PDF 與高斯 RJ 的卷積(RJ 與 DJ 統計獨立): pTJ=pDJgσp_{TJ}=p_{DJ}*g_\sigma,其中 gσ(x)=1σ2πex2/2σ2g_\sigma(x)=\tfrac{1}{\sigma\sqrt{2\pi}}e^{-x^2/2\sigma^2}(單位 1/s)。
  2. 把任意形狀的有界 pDJp_{DJ} 壓縮成兩支等權 Dirac,間距記作 DJδδ\mathrm{DJ}_{\delta\delta}
pDJ(x)  12δ(xμR)+12δ(xμL),DJδδμRμLp_{DJ}(x)\ \longrightarrow\ \frac12\,\delta(x-\mu_R)+\frac12\,\delta(x-\mu_L),\qquad \mathrm{DJ}_{\delta\delta}\equiv\mu_R-\mu_L

卷積用 Dirac 的取樣性質 δ(vμ)gσ(xv)dv=gσ(xμ)\int\delta(v-\mu)g_\sigma(x-v)dv=g_\sigma(x-\mu),一步得模型 PDF:

pδδ(x)=12gσ(xμR)+12gσ(xμL)p_{\delta\delta}(x)=\frac12\,g_\sigma(x-\mu_R)+\frac12\,g_\sigma(x-\mu_L)

——兩顆同 σ\sigma 的高斯,各佔一半機率。對稱情形(本頁與 lab_31)μR=μL=μ=DJδδ/2\mu_R=-\mu_L=\mu=\mathrm{DJ}_{\delta\delta}/2

尾巴(tail)函數,逐步積分。 定義 T(x)P(jitter>x)=1F(x)T(x)\equiv P(\text{jitter}\gt x)=1-F(x)FF 為 CDF)。 對模型 PDF 逐項用第 3 步的結果 xgσ(vμ)dv=Q(xμσ)\int_x^\infty g_\sigma(v-\mu)\,dv=Q\big(\tfrac{x-\mu}{\sigma}\big)

Tδδ(x)=12Q ⁣(xμRσ)+12Q ⁣(xμLσ)T_{\delta\delta}(x)=\frac12\,Q\!\Big(\frac{x-\mu_R}{\sigma}\Big)+\frac12\,Q\!\Big(\frac{x-\mu_L}{\sigma}\Big)

深尾只剩一項。 兩項之比(用漸近式,對稱情形):

Q(x+μσ)Q(xμσ)exp ⁣((x+μ)2(xμ)22σ2)=exp ⁣(2μxσ2)=exp ⁣(DJδδxσ2)\frac{Q\big(\tfrac{x+\mu}{\sigma}\big)}{Q\big(\tfrac{x-\mu}{\sigma}\big)}\approx\exp\!\Big(-\frac{(x+\mu)^2-(x-\mu)^2}{2\sigma^2}\Big)=\exp\!\Big(-\frac{2\mu x}{\sigma^2}\Big)=\exp\!\Big(-\frac{\mathrm{DJ}_{\delta\delta}\,x}{\sigma^2}\Big)

以 lab_31 的數字(DJδδ=3.16\mathrm{DJ}_{\delta\delta}=3.16 ps、σ=1.03\sigma=1.03 ps、關心的 x8.6x\approx8.6 ps) 這個比值 e25.68×1012\approx e^{-25.6}\approx8\times10^{-12}——完全可忽略。所以深尾就是單顆權重 ½ 的高斯

Tδδ(x)12Q ⁣(xμσ)(x 在右深尾)T_{\delta\delta}(x)\approx\frac12\,Q\!\Big(\frac{x-\mu}{\sigma}\Big)\qquad(x\ \text{在右深尾})

Q-scale 直線——萃取 (DJδδ,σ)(\mathrm{DJ}_{\delta\delta},\sigma) 的原理。 把上式反解:

Q1(2T(x))=xμσQ^{-1}\big(2\,T(x)\big)=\frac{x-\mu}{\sigma}

——在「Q-scale」上(縱軸畫 Q1(2T)Q^{-1}(2T)、橫軸 xx),深尾是一條直線:斜率 1/σ1/\sigma、 橫軸截距 μ=DJδδ/2\mu=\mathrm{DJ}_{\delta\delta}/2。儀器(BERT scan 或示波器的 TIE 直方圖)就是對量到的 尾巴做這條直線擬合。注意 Q1Q^{-1} 裡的 factor 2:它記帳的是「每支 Dirac 只佔一半機率」 ——這是本頁第一個要盯住的 factor-of-2(第 7 步還有兩個)。

第 5 步:bathtub 曲線——從 jitter CDF 逐步導出

設 NRZ 資料、UI(unit interval)=Tb=T_b(單位 s)。eye 中心為時間原點,取樣時刻 offset 為 tt; 左 data edge 名目在 UI/2-UI/2、右 edge 在 +UI/2+UI/2,各自帶 jitter xx(同分布,尾巴 TT、CDF FF)。

  1. 錯誤事件一(左 edge 遲到):左 edge 實際落在 UI/2+x-UI/2+x;若它晚於取樣時刻, 即 UI/2+x>tx>UI/2+t-UI/2+x\gt t\Leftrightarrow x\gt UI/2+t,取樣器讀到前一個位元。機率 =T(UI/2+t)=T(UI/2+t)
  2. 錯誤事件二(右 edge 早到):右 edge 實際落在 +UI/2+x+UI/2+x;若它早於取樣時刻, 即 UI/2+x<tx<(UI/2t)UI/2+x\lt t\Leftrightarrow x\lt-(UI/2-t),機率 =F((UI/2t))=F(-(UI/2-t)), 對稱分布下 =T(UI/2t)=T(UI/2-t)
  3. 只有「有跳變」才會錯:隨機資料相鄰位元不同的機率是 12\tfrac12(transition density ρT=12\rho_T=\tfrac12)。兩事件都是稀有事件,聯集機率 \approx 相加(交集是二階小量):
 BER(t)=12[T ⁣(UI2t)+T ⁣(UI2+t)] \boxed{\ \mathrm{BER}(t)=\frac12\Big[T\!\Big(\frac{UI}{2}-t\Big)+T\!\Big(\frac{UI}{2}+t\Big)\Big]\ }

一致性檢查:純 RJ 時 T(x)=Q(x/σt)T(x)=Q(x/\sigma_t),上式退化成 BER(t)=12[Q(UI/2tσt)+Q(UI/2+tσt)]\mathrm{BER}(t)=\tfrac12[Q(\tfrac{UI/2-t}{\sigma_t})+Q(\tfrac{UI/2+t}{\sigma_t})] ——正是 lab_12serdes_utils.ber_bathtub 的公式 ✓。bathtub 的兩面「壁」就是 jitter CDF 的左右尾巴,只是橫軸從「jitter 大小」 換成「取樣位置」重畫。DJ 的效果一目了然:它把整條尾巴平移 μ\approx\mu → 兩壁往內推; RJ 決定壁的斜率(在 log-BER 座標,斜率由 σ\sigma 定)。

  • Dimension checkTT 的引數 [s][\text{s}]、輸出是機率(無因次);BER 無因次 ✓。
  • 適用:稀有事件(BER1\mathrm{BER}\ll1)、edge jitter 平穩且與資料獨立(ISI 嚴格說與資料相關, 見第 8 步失效條件)。

第 6 步:TJ(BER) 外插公式——推導與 factor 稽核

推導。 目標:在指定 BER 下,eye 被 jitter「吃掉」多寬。右壁位置 xRx_R 定義為右深尾的 主導高斯掉到目標 BER 的位置(業界慣例直接用 per-Gaussian 尾巴 == BER 記帳,稽核見下):

Q ⁣(xRμσ)=BER  xR=μ+σQ1(BER)Q\!\Big(\frac{x_R-\mu}{\sigma}\Big)=\mathrm{BER}\ \Longrightarrow\ x_R=\mu+\sigma\,Q^{-1}(\mathrm{BER})

對稱地左壁 xL=μσQ1(BER)x_L=-\mu-\sigma Q^{-1}(\mathrm{BER})。total jitter 定義為兩壁吃掉的總寬:

 TJ(BER)=xRxL=DJδδ+2Q1(BER)σ \boxed{\ \mathrm{TJ}(\mathrm{BER})=x_R-x_L=\mathrm{DJ}_{\delta\delta}+2\,Q^{-1}(\mathrm{BER})\,\sigma\ }

BER =1012=10^{-12}TJ=DJδδ+14.07σ\mathrm{TJ}=\mathrm{DJ}_{\delta\delta}+14.07\,\sigma。eye 水平開度 =UITJ(BER)=UI-\mathrm{TJ}(\mathrm{BER})

  • Dimension check[s]+[無因次]×[s]=[s][\text{s}]+[\text{無因次}]\times[\text{s}]=[\text{s}] ✓。
  • 物理意義:DJ 部分不隨 BER 變(有界、一次吃掉);RJ 部分隨 BER 變嚴而以 Q1Q^{-1} 緩慢長大(1012101510^{-12}\to10^{-15} 只從 14.07σ14.07\sigma15.88σ15.88\sigma——高斯尾巴的 對數增長)。

Factor-of-2 稽核(本站慣例:把每個 2 講清楚)。上式用 Q1(BER)=7.034Q^{-1}(\mathrm{BER})=7.034, 隱含「每顆高斯的尾巴 == BER」。嚴格照第 4、5 步的記帳還有兩個 ½: Dirac 權重 ½(per-side 尾巴 T=12QT=\tfrac12Q)與 transition density ρT=12\rho_T=\tfrac12(bathtub 再乘 ½)。 全部算進去,壁的位置由 Q=4×BERQ=4\times\mathrm{BER} 決定:

慣例壁條件倍數(BER =1012=10^{-12}lab_31 實得 TJ
per-Gaussian(業界公式)Q=BERQ=\mathrm{BER}7.0347.03417.6517.65 ps
per-side 尾巴 T=BERT=\mathrm{BER}Q=2BERQ=2\,\mathrm{BER}6.9376.93717.4317.43 ps
bathtub(ρT=12\rho_T=\tfrac12,本站 lab_12 慣例)Q=4BERQ=4\,\mathrm{BER}6.8396.83917.2317.23 ps

三者相差 Q1(1012)Q1(4×1012)=0.196σQ^{-1}(10^{-12})-Q^{-1}(4\times10^{-12})=0.196\,\sigma/側——本例共 0.400.40 ps、 約 TJ 的 2%,業界公式偏保守。實務上這不構成問題,因為 (DJδδ,σ)(\mathrm{DJ}_{\delta\delta},\sigma) 是用同一套慣例從尾巴擬合出來再代回去外插的——慣例一致時誤差幾乎對消; 但比較不同儀器的 DJ/RJ 報告時,必須先問它用哪個慣例。(lab_31 把三個數字都印出來。)

第 7 步:誠實聲明——DJδδDJpp\mathrm{DJ}_{\delta\delta}\le\mathrm{DJ}_{pp},而且低報是故意的

這是 dual-Dirac 最常被誤解的一點:DJδδ\mathrm{DJ}_{\delta\delta} 是模型參數,不是實際的 peak-to-peak DJ。lab_31 的數字:真實弦波 DJ 的 DJpp=4.0\mathrm{DJ}_{pp}=4.0 ps,擬合出的 DJδδ=3.16\mathrm{DJ}_{\delta\delta}=3.16 ps。

為什麼一定偏小(推導)。 總 jitter 尾巴是 DJ 分布對高斯尾巴的平均 (把卷積的積分順序交換一次即得):

T(x)=P(u+n>x)=AApDJ(u)Q ⁣(xuσ)duT(x)=P(u+n\gt x)=\int_{-A}^{A}p_{DJ}(u)\,Q\!\Big(\frac{x-u}{\sigma}\Big)\,du

因為 uAu\le AQQ 嚴格遞減,被積函數逐點滿足 Q(xuσ)Q(xAσ)Q\big(\tfrac{x-u}{\sigma}\big)\le Q\big(\tfrac{x-A}{\sigma}\big)。 把積分拆成右半(u>0u\gt0,總質量 ½)與左半(u0u\le0,深尾時貢獻再小 eAx/σ2e^{-Ax/\sigma^2} 倍):

T(x)  12Q ⁣(xAσ)+12Q ⁣(xσ)指數小T(x)\ \le\ \frac12\,Q\!\Big(\frac{x-A}{\sigma}\Big)+\underbrace{\frac12\,Q\!\Big(\frac{x}{\sigma}\Big)}_{\text{指數小}}

等號只在右半質量全部集中在 u=Au=A(即 DCD 那種兩點分布)時成立。翻到 Q-scale: Q1(2T(x))  xAσQ^{-1}(2T(x))\ \ge\ \tfrac{x-A}{\sigma}——真實尾巴曲線永遠在「Dirac 放在真極值 AA」 那條線的上方(lab_31 圖 (b) 的藍線 vs 灰虛線)。對真實曲線做直線擬合,截距必然 μA\mu\le A,即:

DJδδ=2μ  2A=DJpp\mathrm{DJ}_{\delta\delta}=2\mu\ \le\ 2A=\mathrm{DJ}_{pp}

為什麼低報反而讓 TJ 準。 外插要準,需要的是「在目標 BER 那幾個 decade,直線貼住 真實的尾巴高度」——擬合正是這樣錨定的(lab_31:dual-Dirac 外插的 eye opening 82.7682.76 ps vs 精確複合的 82.7782.77 ps,差 0.010.01 ps)。反過來,若把 Dirac 硬放在真極值 ±A\pm A(把 DJpp=4.0\mathrm{DJ}_{pp}=4.0 ps 當 DJδδ\mathrm{DJ}_{\delta\delta} 用),光 DJ 項就多報 4.03.16=0.844.0-3.16=0.84 ps:代入公式(真 σ=1.0\sigma=1.0 ps)得 TJ=4.0+14.07×1.0=18.07\mathrm{TJ}=4.0+14.07\times1.0=18.07 ps, 比精確 bathtub 的 17.2317.23 ps 悲觀 0.840.84 ps——白白丟掉 margin。 直覺:DJ 分布靠近極值處只有有限的機率質量(弦波雖有雙角、仍是可積奇點), 深尾實際上是「打了折的高斯」,等效中心自然縮進來。

代價(也要誠實說)

  • DJδδ\mathrm{DJ}_{\delta\delta} 依賴擬合深度。lab_31 掃三個擬合窗: T[108,104]3.07T\in[10^{-8},10^{-4}]\to3.07 ps、[1010,106]3.16[10^{-10},10^{-6}]\to3.16 ps、 [1014,1010]3.27[10^{-14},10^{-10}]\to3.27 ps——越深越靠近(但不超過)DJpp\mathrm{DJ}_{pp}。 報告 DJ/RJ 分解時應註明擬合窗;規格文件(MJSQ 系)對此有明確方法論。
  • DJ 會「漏」進 σ\sigma:擬合出 σ=1.03\sigma=1.03 ps,比真實 RJ 的 1.001.00 ps 略大—— DJ 尾巴殘餘的曲率被直線吸收成斜率的一部分。所以別把儀器報的 RJ 直接當 振盪器 phase noise 的積分值去對帳(差幾 % 屬正常);對帳要用乾淨時脈 pattern 隔離 DJ。

第 8 步:lab_31 數值驗證

完整 script:simulations/lab_31_dual_dirac.py(相依:simulations/common/serdes_utils.pyQsimulations/common/plot_utils.pysavefig;執行 python scripts/run_all_sims.py 會一併重跑)。合成 RJ(σ=1\sigma=1 ps 高斯)++ 弦波 DJ(A=2A=2 ps → DJpp=4\mathrm{DJ}_{pp}=4 ps) 於 UI=100UI=100 ps(10 Gb/s,同 lab_12)。尾巴 T(x)T(x) 用「對弦波相位取平均」半解析算到 101510^{-15} 深度(無 Monte-Carlo 雜訊),擬合按第 4 步的 Q-scale 直線。

參數變數單位說明
RJ rmssigma_rj1×10121\times10^{-12}s高斯、無界(教學上放大;canonical 例 C 的時脈是 447.9 fs)
DJ 幅度a_dj2×10122\times10^{-12}s弦波(電源 spur 型),DJpp=2A=4\mathrm{DJ}_{pp}=2A=4 ps
單位間隔ui100×1012100\times10^{-12}s10 Gb/s NRZ
目標 BERber_target101210^{-12}常見 SerDes 規格
擬合窗t_deep, t_shallow[1010,106][10^{-10},10^{-6}]—(尾巴機率)Q-scale 直線擬合區
MC 樣本數n_mc2×1062\times10^6只用於直方圖

執行輸出(節錄,# -> 為可驗證標記):

extracted DJ_dd = 3.16 ps # -> 3.16 (< DJ_pp = 4.0)
extracted sigma = 1.03 ps # -> 1.03 (true RJ rms 1.0)
TJ@1e-12 (formula) = 17.65 ps # -> 17.65
TJ@1e-12 (bathtub) = 17.23 ps # -> 17.23
eye opening @1e-12: composite 82.77 ps vs dual-Dirac 82.76 ps

左:RJ⊛弦波DJ 的直方圖與精確 PDF(雙角),對比擬合出的 dual-Dirac 模型 PDF(兩顆高斯,Dirac 位置 ±1.58 ps 在真極值 ±2 ps 內側);中:Q-scale 尾巴擬合,藍色精確曲線在灰色「Dirac 放真極值」線上方,橘色為擬合窗;右:BER bathtub,精確複合與 dual-Dirac 外插幾乎重合,RJ-only 對照組的可用窗更寬

怎麼讀這張圖

  • (a) PDF:藍色(真實)有 arcsine 雙角被高斯抹圓;紅虛線(dual-Dirac)在中段明顯 不貼——模型從不宣稱 PDF 貼合,它只對深尾負責。紅點虛線(Dirac 位置 ±μ=±1.58\pm\mu=\pm1.58 ps) 在灰點虛線(真極值 ±2\pm2 ps)內側:這就是 DJδδ<DJpp\mathrm{DJ}_{\delta\delta}\lt\mathrm{DJ}_{pp}
  • (b) Q-scale:深尾區藍線筆直 → 高斯主導;紅虛線是擬合直線(斜率 1/σ1/\sigma、截距 μ\mu); 灰點線是「Dirac 硬放 ±A\pm A」的悲觀預測,落在真實曲線下方(同一 xx 給更大的尾巴機率)。
  • (c) bathtub:藍(精確)與紅虛(dual-Dirac 外插)在 101210^{-12} 幾乎重合(開口差 0.01 ps) ——模型的本職;綠點線(RJ-only、無 DJ)開口寬得多:DJ 平移壁、RJ 定斜率

互動:親手擬合一次。 下面的小工具讓你直接操控 RJ σ 與弦波 DJ 幅度 AA(合成母體, seeded PRNG,N=20,000N=20{,}000),並在兩個 BER decade 擬合窗(淺:[103,106][10^{-3},10^{-6}];深: [106,109][10^{-6},10^{-9}])之間切換,即時看到 DJδδ\mathrm{DJ}_{\delta\delta}σfit\sigma_{fit}、 兩者的差 Δ=DJppDJδδ\Delta=\mathrm{DJ}_{pp}-\mathrm{DJ}_{\delta\delta},以及 TJ@1012\mathrm{TJ}@10^{-12} 外插值如何隨擬合深度移動——這正是第 7 步「擬合越深、DJδδ\mathrm{DJ}_{\delta\delta} 越逼近但不超過 DJpp\mathrm{DJ}_{pp}」的量化版本,換成你自己選的 σ,A\sigma,A 也成立。

Dual-Dirac Q-scale 擬合器 — 萃取 DJ_δδ 與 σ_fit,比較擬合深度
1.00 ps
2.0 ps
(a) TJ 直方圖(N=20,000,seeded)— 雙角+高斯抹圓
-8 ps8 psTJ(ps)
(b) Q-scale bathtub 尾巴 — 用下方按鈕拖動擬合區
1e-31e-61e-91e-12x(ps)Q⁻¹(2T)
淺擬合區(橘) 深擬合區(藍) 真實尾巴(半解析、精確—— 與 lab_31 同法;粗線=目前選取的擬合深度)。
DJ_δδ(擬合)
3.15
ps
DJ_pp (真實)
4.00
ps
Δ = DJ_pp − DJ_δδ
0.85
ps
σ_fit / σ_true
1.03 / 1.00
ps
TJ@10⁻¹² (外插)
17.65
ps
([10⁻³, 10⁻⁶]):DJ_δδ = 2.99 ps、σ_fit = 1.05 ps、TJ@10⁻¹² = 17.74 ps。 ([10⁻⁶, 10⁻⁹]):DJ_δδ = 3.15 ps、σ_fit = 1.03 ps、TJ@10⁻¹² = 17.65 ps。 教訓:DJ_δδ 恆小於 DJ_pp,且擬合越深,DJ_δδ 越逼近(但不超過)DJ_pp——因為深尾巴主要由弦波的轉折點主導, 那裡才是 DJ 機率質量真正集中的地方。
模型:RJ ~ N(0, σ²) ⊛ 弦波 DJ = A·sin(θ),θ ~ U[0, 2π)(arcsine「雙角」分布;見本頁第 2 步)。 直方圖/CDF 面板用 N = 20,000 筆 seeded 樣本(mulberry32)純示意;擬合本身用半解析尾巴 T(x) = ⟨Q((x−A sinθ)/σ)⟩_θ(與 simulations/lab_31_dual_dirac.py 同法),因為這麼深的 BER 窗口 任何有限樣本都無法誠實估計。Q(x) 用 Numerical Recipes 的 erfc 近似;Q⁻¹ 用 Acklam 對反常態 CDF 的有理函數近似。 Pedagogical toy model——真實鏈路是 ISI+DCD+PJ 疊加、且 ISI 與資料相關(見本頁第 8 步/適用條件表)。

一行式驗證(引用 lab_31 的真實函式;跑一次約數秒):

from simulations.lab_31_dual_dirac import fit_dual_dirac, q_inv
dj_dd, sigma_fit, _ = fit_dual_dirac(a_dj=2e-12, sigma_rj=1e-12)
print("DJ_dd =", round(dj_dd * 1e12, 2), "ps") # -> 3.16
print("sigma =", round(sigma_fit * 1e12, 2), "ps") # -> 1.03
tj = dj_dd + 2 * q_inv(1e-12) * sigma_fit
print("TJ@1e-12 =", round(float(tj) * 1e12, 2), "ps") # -> 17.65

這是 pedagogical 模型(非 transistor-level):DJ 只取單一弦波、RJ 取白噪積分後的 等效高斯;真實鏈路的 DJ 是 ISI+DCD+PJ 的疊加、且 ISI 與資料 pattern 相關。

Worked examples 數值例題

例 1(TJ 預算:canonical 時脈 + 給定 DJ) 10 Gb/s(UI=100UI=100 ps)。時脈 RJ 用 canonical 例 C:σt=447.9\sigma_t=447.9 fs (f0=5f_0=5 GHz、L(1MHz)=100\mathcal{L}(1\text{MHz})=-100 dBc/Hz、1/f²、積 1→100 MHz)。 鏈路量得 DJδδ=3\mathrm{DJ}_{\delta\delta}=3 ps。求 BER =1012=10^{-12} 的 TJ 與 eye 開度。

逐步代入(帶單位)

TJ=DJδδ+2Q1(1012)σt=3 ps+14.07×0.4479 ps=3 ps+6.30 ps=9.30 ps,eye 開度=UITJ=1009.30=90.7 ps=0.907 UI.\begin{aligned} \mathrm{TJ}&=\mathrm{DJ}_{\delta\delta}+2\,Q^{-1}(10^{-12})\,\sigma_t=3\ \text{ps}+14.07\times0.4479\ \text{ps}\\ &=3\ \text{ps}+6.30\ \text{ps}=9.30\ \text{ps},\\[4pt] \text{eye 開度}&=UI-\mathrm{TJ}=100-9.30=90.7\ \text{ps}=0.907\ UI. \end{aligned}

RJ 項 6.306.30 ps 與 serdes_clocking_connection 第 4 步「448 fs → RJ 吃掉 6.36.3 ps」一致 ✓。Dimension check[s]+[]×[s]=[s][\text{s}]+[-]\times[\text{s}]=[\text{s}] ✓。

sigma_t = 447.9e-15; dj_dd = 3e-12; ui = 100e-12
tj = dj_dd + 14.07 * sigma_t
print("TJ@1e-12 =", round(tj * 1e12, 2), "ps") # -> 9.3
print("eye opening =", round((ui - tj) * 1e12, 1), "ps") # -> 90.7

例 2(反推 RJ 規格 → phase noise 規格) 同一鏈路,系統分給時脈路徑的 TJ 預算是 3030 ps(0.3UI0.3\,UI),鏈路 DJ 佔 DJδδ=20\mathrm{DJ}_{\delta\delta}=20 ps。問:時脈 RJ 最多多少?換算回 L(1MHz)\mathcal{L}(1\text{MHz}) 規格(假設同例 C 的 1/f² 形狀與 1→100 MHz 積分頻寬)多少?

逐步代入(帶單位)

σt,max=TJDJδδ2Q1(1012)=3020 ps14.07=0.7107 ps=710.7 fs\sigma_{t,max}=\frac{\mathrm{TJ}-\mathrm{DJ}_{\delta\delta}}{2\,Q^{-1}(10^{-12})}=\frac{30-20\ \text{ps}}{14.07}=0.7107\ \text{ps}=710.7\ \text{fs}

1/f² 形狀固定時 σt10L(1MHz)/20\sigma_t\propto10^{\mathcal{L}(1\text{MHz})/20}(振幅正比), 而例 C 的錨點是 100-100 dBc/Hz 447.9\to447.9 fs,所以容許放寬:

ΔL=20log10710.7447.9=+4.0 dB  L(1MHz)96.0 dBc/Hz\Delta\mathcal{L}=20\log_{10}\frac{710.7}{447.9}=+4.0\ \text{dB}\ \Longrightarrow\ \mathcal{L}(1\text{MHz})\le-96.0\ \text{dBc/Hz}

Dimension check[s]/[]=[s][\text{s}]/[-]=[\text{s}] ✓;dB 換算作用在無因次比值上 ✓。 設計訊息:DJ 吃掉預算的三分之二時,RJ 規格立刻掉到 sub-ps——這就是為什麼 SerDes 團隊要分開追 DJ(版圖/電源/等化)與 RJ(振盪器 phase noise,ISF 的地盤)。

import numpy as np
ui, tj_budget, dj_dd = 100e-12, 30e-12, 20e-12
sigma_max = (tj_budget - dj_dd) / 14.07
print("sigma_max =", round(sigma_max * 1e15, 1), "fs") # -> 710.7
dL = 20 * np.log10(sigma_max / 447.9e-15)
print("L(1MHz) max =", round(-100 + dL, 1), "dBc/Hz") # -> -96.0

適用與失效條件

假設成立時失效時
RJ 高斯且平穩熱噪主導、free-running 或 loop 內測深尾被 spur 汙染、非平穩(溫漂)時 Q-scale 不再直線
DJ 有界且與 RJ 獨立電源 spur、DCD、固定通道 ISIDJ 幅度緩變(電源負載跳動)→ 分解隨時間漂
深尾單高斯主導擬合窗夠深(T106T\lesssim10^{-6}擬合窗太淺:DJ 曲率殘留 → σ\sigma 高估、DJδδ\mathrm{DJ}_{\delta\delta} 低估更多
edge jitter 與資料獨立時脈 jitter、非同步 spurISI 與 pattern 相關:嚴格處理要按 pattern 分箱(CDF 條件化)再合成
稀有事件相加(union \approx sum)BER1\mathrm{BER}\ll1眼睛近乎閉合(BER 接近 0.5)時高階項不可忽略
慣例一致同一儀器/同一套 QQ 慣例內比較跨儀器比 DJ/RJ 數字:per-Gaussian vs ρT\rho_T 慣例差 0.2σ\approx0.2\sigma/側(第 6 步稽核表)

與 ISF / 本站鏈的關係、design knobs

  • ISF 管 RJσt\sigma_t 的所有旋鈕都在前面章節——降 Γrms\Gamma_{rms}(波形對稱、 symmetry)、加 qmaxq_{max}tank_swing)、 降 SiS_i、loop high-pass 截積分下限(serdes_clocking_connection 第 6 步)。
  • ISF 看不見 DJ:DJ 的旋鈕是電源完整性(LDO/去耦,對付 PJ)、等化(CTLE/DFE,對付 ISI)、 duty-cycle 校正(對付 DCD)。spur 與隨機 phase noise 在頻譜上如何區分,見 measurement_and_spurs
  • 速記式的精確化:serdes 頁的 TJ=DJpp+2QRJrms\mathrm{TJ}=\mathrm{DJ}_{pp}+2Q\cdot\mathrm{RJ}_{rms} 是工程速記(偏保守);嚴格版把 DJpp\mathrm{DJ}_{pp} 換成擬合出的 DJδδ\mathrm{DJ}_{\delta\delta}, 本頁第 7 步量化了兩者的差(本例 4.0 vs 3.16 ps → TJ 多報 0.84 ps)。

重點回顧

  • RJ:高斯、無界、來自 phase noise([P1] Eq.(21) → 積分 → σt\sigma_t;[P2] Eq.(8) 隨機漫步); 用 σ\sigma × Q1(BER)Q^{-1}(\mathrm{BER}) 記帳。DJ:有界(ISI/DCD/PJ);用 peak-to-peak 記帳。
  • Q(x)=12erfc(x/2)Q(x)=\tfrac12\mathrm{erfc}(x/\sqrt2) 來自高斯尾巴積分;Q1(1012)=7.03Q^{-1}(10^{-12})=7.03Q1(1015)=7.94Q^{-1}(10^{-15})=7.94
  • dual-Dirac:pδδ=12gσ(xμ)+12gσ(x+μ)p_{\delta\delta}=\tfrac12 g_\sigma(x-\mu)+\tfrac12 g_\sigma(x+\mu); 深尾 T12Q(xμσ)T\approx\tfrac12Q(\tfrac{x-\mu}{\sigma}) → Q-scale 直線擬合取 (DJδδ,σ)(\mathrm{DJ}_{\delta\delta},\sigma)
  • bathtub BER(t)=12[T(UI2t)+T(UI2+t)]\mathrm{BER}(t)=\tfrac12[T(\tfrac{UI}{2}-t)+T(\tfrac{UI}{2}+t)] 就是 jitter CDF 的兩條尾巴重畫。
  • TJ(BER)=DJδδ+2Q1(BER)σ\mathrm{TJ}(\mathrm{BER})=\mathrm{DJ}_{\delta\delta}+2Q^{-1}(\mathrm{BER})\sigma; 慣例(per-Gaussian / per-side / ρT\rho_T)差 0.2σ\approx0.2\sigma/側,比對儀器數字前先對慣例。
  • DJδδDJpp\mathrm{DJ}_{\delta\delta}\le\mathrm{DJ}_{pp} 且故意低報:擬合錨定真實深尾 → 外插準(lab_31:開口差 0.01 ps);硬用 DJpp\mathrm{DJ}_{pp} 反而悲觀、浪費 margin。 lab_31:DJpp=4.0\mathrm{DJ}_{pp}=4.0 ps → DJδδ=3.16\mathrm{DJ}_{\delta\delta}=3.16 ps、σ=1.03\sigma=1.03 ps、 TJ@1012=17.6510^{-12}=17.65 ps。

方法論出處(外部文獻,非本站 5 篇 PDF):dual-Dirac 是業界標準方法,見 INCITS T11.2, Fibre Channel — Methodologies for Jitter and Signal Quality Specification (MJSQ), Technical Report Rev 14.0, June 2005;以及 R. Stephens, "Jitter Analysis: The Dual-Dirac Model, RJ/DJ, and Q-Scale," Agilent Technologies Whitepaper, Dec. 2004。 現代 SerDes 規格(PCIe、OIF-CEI 系列)的 jitter 條款皆沿用此模型。 phase noise / RJ 本身的理論來自 [P1]/[P2]。

延伸閱讀