JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

讀懂眼圖:眼圖、抖動與位元錯誤率

一條 32 Gb/s 的鏈路每 31 皮秒就送出一個新位元——快到沒有任何人類、也沒有任何示波器螢幕能一個一個地看清。於是工程師耍了一個聰明的把戲:把數千個位元疊在一起,折成一張叫做「眼圖」的圖片。一眼之間,它就揭示了接收端在開始出錯之前,還剩下多少電壓空間、多少時序空間。本篇要教你讀懂這張圖——眼高、眼寬、抖動,以及浴缸曲線——因為在本軌道接下來的旅程裡,眼圖就是那塊計分板。

把時間摺起來:數千個位元如何化為一張圖

想像你要靠從頭到尾聽完一場四小時的音樂會,來評斷一位小提琴家的時間感。根本沒指望——細節全淹沒在時長裡。現在再想像一台節拍器,讓你把每一個運弓動作疊在一起,全部對齊到同一個拍點,於是漂亮的運弓堆疊成一道俐落的陰影,而草率的那些則把邊緣磨得毛躁。在一張合成影像裡,你一眼就能看出這位演奏者的一致性眼圖為一條高速串列鏈路做的正是這件事。一條跑在 32 Gb/s 的現代 SerDes,每 31.25 皮秒就吐出一個新位元——也就是一個單位間隔(UI)。沒有任何螢幕能把連續十億個位元秀給你看。於是儀器把這條長串切成一個個單 UI 的切片並疊起來,全都觸發到同一個回復出來的時脈邊緣,直到數萬個位元轉態被畫在彼此之上。

位元彼此一致之處,軌跡濃密而深黑;位元四處游移之處,便糊成一條模糊的帶子。結果是一個形狀,活脫脫像一隻人眼——左右兩側各有一個交叉點,是上升與下降邊緣堆疊之處,中間則有一塊敞開的區域。那塊敞開的區域,正是全部的重點。它是一扇電壓與時間的窗口,接收端在這扇窗內才能有把握地說出這個位元是 1這個位元是 0。開口越大、越乾淨,接收端的工作就越輕鬆;開口越窄、越壅塞,鏈路就越接近出錯。

  one UI (e.g. 31.25 ps)
  |<----------------->|

  V        ___________               <- logic 1 level
          /     ^     \
         /      |      \
  cross /    EYE HEIGHT  \ cross     <- voltage margin (noise room)
   pt   \    (vertical)  /  pt
         \      |      /
          \_____v_____/
                                     <- logic 0 level
          |<--------->|
           EYE WIDTH (horizontal)    <- timing margin (jitter room)
           sample here -> + <- best sample point, eye center
一張眼圖:數千個單 UI 切片疊在一起。敞開的「眼」就是接收端的判決窗口——高代表電壓裕度,寬代表時序裕度。最佳取樣點正坐落在正中央。

兩間房:眼高與眼寬

每一張眼圖都回答了兩個截然不同的存活問題,把它們在腦中分開來看,很值得。把接收端想成一位站在眼睛正中央的裁判,一手握著碼錶,一手握著電壓表。垂直的開口——也就是眼高——告訴電壓表它有多少空間;水平的開口——也就是眼寬——告訴碼錶它有多少空間。一條鏈路可能因為用光其中任何一者而死,而兩者的解方完全不同,所以好的工程師總是會問:我的眼是太矮,還是太窄?

眼高電壓裕度:在取樣瞬間,「1」的位準高出「0」的位準多少,再扣掉所有垂直方向的毛邊。那團毛邊就是雜訊——而其中無可避免的底線是熱雜訊,也就是任何電阻與電晶體在絕對零度以上都會有的電子隨機抖動,再加上來自鄰近通道的串擾、電源漣波,以及放大器雜訊。眼睛相對於那團雜訊越高,你在判決點的訊號雜訊比就越好。眼睛若太矮,接收端的判決器就可能把一個帶雜訊的「1」誤判成「0」。解方住在振幅這個維度:更大的擺幅、更少的雜訊、更好的增益。

眼寬時序裕度:那扇敞開的水平窗口有多寬,量的是兩個邊緣堆疊的交叉點之間。一個在正中央取樣的接收端,在撞上模糊的邊緣之前,兩側都有最大的緩衝。但交叉點並不是單一一條銳利的線——它是一條帶子,因為真實的邊緣並非全都在完全相同的瞬間抵達。這段邊緣抵達時間的散佈就是抖動,它從兩側水平地吞噬眼睛。眼睛若太窄,即使是放得再精準的時脈,也可能漂進那團毛邊裡。解方住在時間這個維度:更乾淨的時脈、更少的抖動,以及你會在第 5 階打造的時脈回復迴路。

抖動:並非所有的晃動都一樣

抖動聽起來像是單一個反派,但它其實是一個小幫派,成員各有非常不同的性格——而把它們區分開來,是高速設計中最有價值的技能之一。抖動說白了就是一個邊緣,偏離了理想時脈說它本該抵達之處多少。關鍵的劃分,在於有界抖動(它有一個你能說得出的最壞情況)與無界抖動(它有一條又長又細的尾巴,只要位元數夠多,遲早會超過你設下的任何極限)之間。這個區別並非紙上談兵——它決定了你的鏈路究竟只是需要更大的裕度,還是永遠不可能完全安全、因而必須改用統計的方式來評斷。

確定性抖動(DJ)是有界的那一種——它有可辨識、可重複的成因,所以無論你看多久,它都不會超過一道硬性的天花板。最大的貢獻者就是第 2 階的 ISI:一條會抹開位元的通道,會讓一個邊緣依照它前面那串位元的樣式而提早或延遲抵達,這就是資料相依抖動。其他叫得出名字的禍首還包括工作週期失真(時脈的高半週與低半週不相等)以及來自鄰近開關電源或耦合音調的週期性抖動。由於 DJ 有界,你可以為它編列預算:它把交叉帶撐寬一個固定的量,然後就停了。

隨機抖動(RJ)是無界的那一種——它來自真正隨機的物理過程,最主要的是產生與取樣時脈的電晶體內部的熱雜訊與閃爍雜訊。隨機抖動可以很好地用高斯(鐘形曲線)分佈來建模,而高斯分佈沒有最大值:大多數邊緣落在平均值附近,但永遠有一個微乎其微的機率出現一個極早或極晚的邊緣。這就是為什麼我們不用峰值、而用它的標準差 σ(sigma,以皮秒 rms 為單位)來描述 RJ。要把它換成最壞情況,你得乘上一個對應你在意之 BER 的係數——要達到兆分之一的錯誤率,意味著要把遠在約 ±7σ 處的邊緣也算進去。

  TOTAL JITTER  (at a given BER)
  =  Deterministic (bounded)  +  Random (unbounded, scales with BER)

     TJ(BER)  =  DJ  +  n(BER) * sigma_RJ

     where n(BER) is a multiplier from the Gaussian tail:
         BER = 1e-6   ->  n ~ 9.5   (about +/- 4.75 sigma)
         BER = 1e-9   ->  n ~ 12.0  (about +/- 6.0  sigma)
         BER = 1e-12  ->  n ~ 14.0  (about +/- 7.0  sigma)

  Eye WIDTH left for sampling  =  1 UI  -  TJ(BER)

  Example, 32 Gb/s, 1 UI = 31.25 ps:
     DJ = 8 ps,  sigma_RJ = 0.8 ps,  target BER = 1e-12
     TJ = 8 + 14.0 * 0.8 = 8 + 11.2 = 19.2 ps
     eye width = 31.25 - 19.2 = 12.05 ps   <- the timing room you keep
把抖動拆成有界的 DJ 與無界的 RJ。DJ 是一筆固定成本;RJ 的成本則隨你要求更低的 BER 而**增長**,因為你必須把越來越罕見的尾端事件也算進去。

從闔上的眼到錯誤:浴缸曲線

我們一直在說眼睛闔上意味著「更多錯誤」——現在來把這句話講精確。一條數位鏈路的貨幣是位元錯誤率(BER):收到的位元中被翻轉的比例。BER 為 1e-12 大約是兆分之一個位元出錯——而在 32 Gb/s 下,若任其運轉,這大約是每 31 秒一個錯誤。聽起來還能忍,直到你想起一座資料中心跑著數百萬條這樣的通道;業界標準目標訂在 1e-12(最嚴苛的鏈路則是 1e-15),正是為了讓總和維持在理智範圍內。眼圖是那張圖;BER 是那個後果。

現在想像把接收端的取樣點在 UI 內水平地掃過去,並記錄每個位置的 BER。把取樣點停在眼睛正中央,幾乎什麼都不會出錯——你離任何邊緣都很遠,BER 直墜向 1e-15 以下。把取樣點滑向任一個交叉點,你就開始切到抖動帶,於是錯誤攀升。把它一路滑到邊緣上,你取樣的就是純粹的模糊——BER 暴衝到 1e-1,等同擲銅板。把 BER(對數刻度)對取樣位置畫出來,這條曲線就活像一個浴缸的橫切面:兩側是陡峭的牆壁,中間則是一片寬闊平坦的安全缸底。

  BER
 1e-0 | \                                       / |   <- sampling on an edge
      |  \                                     /  |      = pure guess
 1e-3 |   \                                   /   |
      |    \                                 /    |
 1e-6 |     \                               /     |
      |      \                             /      |
 1e-9 |       \___                     ___/       |
      |           \___             ___/           |
1e-12 |---------------\___________/----------------|  <- BER target line
      |                ^_________^                 |
1e-15 |________________|  FLOOR  |_________________|
      0%        25%   |   50%    |   75%       100%  of UI (sample position)
                      |<------->|
                     HORIZONTAL EYE OPENING at BER=1e-12
                     (this width is what equalization & CDR fight to widen)
抖動浴缸曲線:BER 對你在 UI 內取樣位置的關係。平坦的缸底是安全區;兩個 1e-12 交叉點之間的寬度,就是在該目標 BER 下真正的眼開口。

浴缸曲線比一張生的眼圖更誠實,原因如下。一張由比方說一百萬個位元構成的示波器眼圖,根本還沒活得夠久到能看見兆分之一的那個邊緣——隨機抖動的罕見尾巴在那樣的取樣數下是隱形的,所以眼睛看起來比實際更開。浴缸曲線則把那些高斯尾巴外推到 1e-12 或 1e-15,把牆壁畫進到錯誤在數小時流量裡真正會出現的位置。所以有意義的數字從來不是「眼睛看起來很開」,而是「在目標 BER 量到的水平開口」。那才是後面每一種技術都試圖撐大的寬度。

為何眼圖是本軌道餘下旅程的計分板

退一步,看看你剛剛獲得了什麼:不是單一一個事實,而是一整套量測語言。從這裡開始,我們對一條 SerDes 鏈路所做的每一項改進,都能用同樣的三把尺來打分——眼高、眼寬,以及 BER 浴缸曲線。正是這套共通的詞彙,讓本軌道餘下的旅程感覺像一場連貫的戰役,而不是一堆彼此無關的把戲。

  1. 第 4 階——等化。連續時間線性等化器、前饋等化器與判決回授等化器,全都只有一個工作:消除第 2 階闔上眼睛的 ISI。你會用單單一張前後對照圖來評斷每一個——它把眼睛撬開了多少?
  2. 第 5 階——時脈與資料回復。接收端沒有獨立的時脈,所以一個回授迴路必須把取樣點放在你在這裡學會判讀的眼睛正中央——也就是浴缸缸底。它的優劣以抖動容忍度來衡量:在 BER 暴衝之前,它能追蹤多少會闔上眼睛的晃動。
  3. 更高的階——PAM4 與鏈路訓練。推進到四個電壓位準,會在原本只有一隻眼之處疊上三隻小眼睛,把每隻眼的高度都砍掉,使得高度與寬度的取捨變得殘酷。鏈路接著會自動訓練它的等化器,搜尋能讓量到的眼最大化的設定。眼圖實實在在就是它所最佳化的成本函數。

所以當後面某一堂課宣稱「這個等化器換來了 4 dB」或「這個 CDR 能容忍 0.3 UI 的抖動」時,你現在就確切知道那是什麼意思、也確切知道該往哪裡看:看眼圖,以及看 1e-12 下的浴缸寬度。你已經握有那面診斷的透鏡。接下來的一切,都是關於重塑你透過它所看見的景象——在通道使盡最壞手段之後,把眼睛重新撬開。