並不孤單的導線
想像草地上並排躺著兩條花園水管。猛地捏一下其中一條,另一條也會抽動——不是因為你碰了它,而是因為它們腳下的地面動了。在現代晶片上,金屬導線靠得比任何兩條水管都近,而它們共用的「地面」只是一層幾奈米厚的絕緣薄片。當一條導線切換時,它並不會禮貌地把能量留給自己。透過兩條導線之間的電容,它會把電荷推進鄰居。鄰居於是抽動。這一抽動可以加快或拖慢一個訊號,而在時序裡,這就意味著一條時序路徑提早或延後到達。
在前五階,我們把每條網線當作獨自存在。我們抽取它的電阻和電容、算出延遲,再把那延遲加進路徑。這個模型只有在導線粗、相隔遠、四周像被空氣般的間距包圍時才誠實——那正是 1990 年代晶片的樣子。隨著互連微縮進入深奈米製程,導線變得又高又細、肩並肩擠在一起。對旁邊那條導線的電容,開始與對下方接地的電容旗鼓相當。孤立導線的模型悄悄崩潰了。
鄰居如何偷走(或捐贈)皮秒
物理本質是單一個電容——耦合電容(coupling capacitance) Cc——架在侵略者與受害者導線之間。流過電容的電荷取決於其兩端電壓差的變化率:i = Cc · d(Vagg − Vvic)/dt。關鍵在於兩個邊緣的相對方向。當侵略者上升、而受害者也正試圖上升時,侵略者的邊緣幫忙把受害者更快拉高——受害者加速。當侵略者下降、而受害者上升時,它與受害者較勁,把邊緣拉長——受害者減速。
AGGRESSOR ───┐ ┌─── (rising)
│ Cc │
├──┤├─────┤
VICTIM ────┘ └───
Same direction (aggressor ↑ , victim ↑):
victim edge PULLED EARLY -> negative delta delay (speed-up)
Opposite direction (aggressor ↓ , victim ↑):
victim edge PUSHED LATE -> positive delta delay (slow-down)
victim quiet (held low), aggressor ↑:
a GLITCH (noise bump) appears on the victim — a functional hazard
___________/\__________ <- bump that can wrongly clock a flop這偷走或捐贈的時間,其大小就是我們所說的串擾延遲(crosstalk delay)(常稱 delta delay,增量延遲)。主導它的有兩項成分。其一是 Cc 相對於受害者總電容的大小——負載沉重的受害者幾乎察覺不到小小的耦合電容,但輕載的網線卻極為敏感。其二是侵略者的轉態率(slew,邊緣速度):刀鋒般銳利的侵略者邊緣在極短瞬間傾倒它的電荷,狠狠打中受害者;懶散的邊緣把同樣的電荷攤平在時間上,幾乎不留痕跡。這就是為什麼侵略者網線上有個強而快的驅動器加倍危險——快邊緣造就銳利的侵略者。
SI 所需的資料:寄生抽取
若不知道導線的實際幾何形狀——而且關鍵在於,哪些導線與哪些並排——這一切分析都不可能。這份知識來自寄生抽取,這個步驟讀取完成的佈局,計算每條網線的電阻與電容。對純邏輯延遲時序,我們只需要網線的總電容(它的負載)。對訊號完整性,我們需要的多得多:抽取器必須把那份電容拆成接地電容,以及對每一個特定鄰居的獨立耦合電容。這份逐鄰居的分解,正是串擾分析的原料燃料。
*** Coupled-RC view of one victim net (simplified SPEF) *** *D_NET victimNet 12.4 ; total cap on victim = 12.4 fF *CAP 1 victimNet:1 3.2 ; cap to GROUND 2 victimNet:2 aggA:5 4.8 ; COUPLING cap to aggressor A 3 victimNet:3 aggB:2 2.1 ; COUPLING cap to aggressor B *RES 1 victimNet:1 victimNet:2 18.0 ; wire resistance segments ... Lonely-wire STA would have seen one number: 12.4 fF. SI-aware STA sees that 6.9 of those 12.4 fF can be DRIVEN by neighbors.
留意工具所做的取捨。如果你把每個耦合電容都歸併到接地(當鄰居永遠靜止),會得到一幅樂觀、偏快的圖像——太過粉紅。如果你把每個耦合電容加倍(經典的「米勒因子」2×,假設鄰居永遠反向切換),會得到悲觀、偏慢的圖像。早期流程使用這些粗糙的接地電容近似;現代訊號完整性時序則讓耦合保持耦合,逐侵略者、逐邊緣、逐時序視窗地計算真實的增量延遲。
另一個 SI 反派:IR 壓降削弱驅動器
串擾關乎你旁邊的那條導線。第二大訊號完整性效應,關乎餵養你的那條導線——電源網格。每個閘極都得透過一道從晶片邊緣到其電源的、漫長而有電阻的金屬階梯來汲取切換電流。那金屬有電阻 R,電流 I 流過時產生電壓降 V = I·R。位於網格遠端的閘極看不到完整的電源軌;它看到的是下垂、偏低的電壓。這就是 IR 壓降。
為什麼一個電源問題會出現在時序裡?因為電晶體的驅動強度隨電源電壓下降——驅動電流大致與過驅電壓(V_DD − V_th)成正比。讓一個閘極哪怕只缺 5% 的電源,它的邊緣就會明顯變懶,延遲明顯變長。更糟的是,IR 壓降是動態的:它在許多閘極同時切換時最深——比如說,一個時脈邊緣同時啟動一整排暫存器。於是,最可能落在關鍵時序路徑上的那些閘極,恰恰就是在最糟糕瞬間承受最大電壓下陷的那些。
Ideal supply With IR-drop
V_DD = 0.75 V V_local = 0.71 V (−40 mV sag, ~5%)
drive current ∝ (V_DD − V_th)
V_th ≈ 0.30 V
ideal overdrive = 0.45 V sagged overdrive = 0.41 V
≈ 9% less drive -> edges slower -> cell delay UP a few %
Net effect: STA must DERATE the cells in the IR-drop hot-spot,
adding delay just like the crosstalk delta delay — both eat slack.為什麼先進製程讓這效應佔了主導
串擾與 IR 壓降在 1995 年是註腳,今天卻是頭條。原因在幾何。製程微縮時,設計者無法讓導線的高度和寬度縮得一樣快——又細又矮的導線會電阻過高。於是導線變得又高又窄,像一排立著的骨牌。兩條這樣的導線彼此呈現巨大的相對側壁,而它們之間的間隙縮到幾奈米。結果是:側壁(耦合)電容成長到主導地位,而接地電容卻趨於平坦。鄰居能驅動的那部分網線電容,從一個捨入誤差,變成往往超過一半。
Wire cross-section, then vs. now (not to scale):
OLD node (wide, short) NEW node (tall, narrow)
┌────────┐ ┌────────┐ ┌─┐ ┌─┐ ┌─┐
│ wire A │ │ wire B │ │A│Cc│B│Cc│C│ ← big facing
└────────┘ └────────┘ │ │ │ │ │ │ sidewalls,
═══════════════════════ │ │ │ │ │ │ tiny gaps
Cground >> Ccoupling └─┘ └─┘ └─┘
═══════════════
Ccoupling ≳ Cground
Same shrink that helped density made neighbors LOUDER.三股趨勢疊加上來。電阻性導線意味邊緣轉態緩慢、復原遲鈍,於是受害者在切換途中被擾動後,擾動會持續更久。較低的電源電壓意味同樣幾毫伏的雜訊或 IR 壓降,佔了軌壓更大的比例——40 mV 的下陷在 5 V 時是捨入誤差,在 0.7 V 時卻是危機。而更密的邏輯意味每個受害者周圍擠著更多侵略者,更常在同一視窗內切換。訊號完整性不再是可選的簽核檢查,而成了塑造設計的一級約束。
反擊:繞線、屏蔽與 SI 迴圈
因為串擾誕生於佈局,多數療方都住在繞線裡。最廉價的防禦是幾何性的:別讓侵略者與受害者長距離平行並行,因為耦合隨兩條導線並肩前進的長度增長。在無法避免長距離平行的地方,繞線器可以加間距(把導線推開——耦合隨距離急遽下降),或在中途把一條導線錯位(jog)到不同的軌道。對最敏感的網線——時脈、類比參考、關鍵訊號——工程師會花真正的面積在屏蔽(shielding)上:在兩側各繞一條接地(或 VDD)的導線,讓受害者耦合到一個安靜、不切換的鄰居,而非吵鬧的那一個。
- 用感知耦合的寄生抽取對繞好的佈局抽取,產生逐網線的耦合電容(一份耦合 SPEF)。
- 執行 訊號完整性時序:對每個受害者,找出可在其時序視窗內切換的侵略者,計算增量延遲,並更新到達時間。
- 併入 IR 壓降:對電壓熱點中的單元降額,讓其延遲反映它真正看到的電源。
- 辨識出那些因新的、感知 SI 的延遲而把路徑推入負時序餘裕的網線——真正的違規者。
- 在佈局中修復:對那些網線加間距或屏蔽、放大孱弱的受害者驅動器、或削弱/重新排程過強的侵略者——然後重新抽取並重複。
退一步看,整個主題的輪廓便浮現了。純邏輯延遲時序回答的問題是「在一個乾淨、孤立導線的世界裡,這條路徑要花多久?」訊號完整性時序回答的是更難、更真實的問題:「當鄰居們在大喊、電源軌在下陷時,它要花多久?」你學過的關於角點、降額與時序餘裕的一切依然成立——SI 只是加上一層有物理根基的延遲,而在先進製程,這層延遲往往決定了晶片是收斂了時序,還是從實驗室帶著故障回來。