一份網表,百萬顆不同的晶片
想像一家麵包店完美地遵循同一份食譜,每條麵包卻都長得有點不一樣——烤箱後段比較燙、麵粉的含水量隨天氣飄移、廚房一到下午就熱起來。食譜是固定的;條件卻不是。現代晶圓廠正是這樣一家麵包店,只不過麵包是數十億顆電晶體,而公差是以原子為單位來衡量的。微影永遠印不出兩個一模一樣的閘極;摻雜原子是按機率法則落下的;閘極氧化層只有幾個原子層厚,且隨晶圓而變。你在單一標稱操作點上模擬出的那顆晶片,其實是一則虛構。真正出貨的,是一團機率雲。
決定一顆成品電晶體切換多快的,主要是三個旋鈕,工程師把它們綁成一個縮寫:PVT——Process(製程)、Voltage(電壓)、Temperature(溫度)。*製程*指矽片出廠的樣子:電晶體被蝕刻得偏快還是偏慢?*電壓*是晶片實際看到的供電軌——在先進製程節點上標稱 0.8 V,但它會在負載下垂落,也會隨電池耗盡而下沉。*溫度*指接面溫度,從車用冷啟動的 −40 °C,到熱降頻 SoC 的 125 °C 都有可能。每一條軸都會挪動延遲,而且它們並非各自獨立——同一顆晶片可能在某個模式下偏慢,在另一個模式下偏快。
製程角點:把矽片樂透圈起來
你沒辦法把每一顆可能的晶片都特性化——數量太多了。取而代之,晶圓代工廠交給你一小撮事先建好的製程角點:NMOS 與 PMOS 電晶體實際長成樣子的極端但物理上合理的組合。經典的五個角點,是依各型電晶體的速度來命名的。TT(典型-典型)是標稱配方。FF(快-快)是那片走運的晶圓,N 和 P 都偏快——驅動強、延遲低。SS(慢-慢)是倒霉的晶圓——驅動弱、延遲長。SF 與 FS 則是偏斜角點,一型偏快、另一型偏慢,這對任何仰賴 N/P 平衡的東西都至關重要,例如比例式邏輯或工作週期。
PMOS
fast | FS · · · · · · · · FF
| \ /
| \ TT / <- TT = nominal recipe
| \ (center) / FF = both fast (fastest cells)
slow | SS · · · · · · · · SF SS = both slow (slowest cells)
+------------------------ SF/FS = N and P pull opposite ways
slow NMOS fast
Each '·' is a corner the library is characterized at.
STA must close timing at EVERY relevant one.這裡是整篇指南中最有用的一個直覺。建立(setup)時序——資料有沒有在時脈邊緣擷取它之前就抵達?——在邏輯*偏慢*時最難滿足,所以它的最差情況通常落在 SS、高溫、低電壓角點,那裡的閘極慢如龜爬。保持(hold)時序——資料在邊緣*之後*那一瞬間有沒有保持穩定,而不是一路衝過去污染同一顆暫存器?——在邏輯*偏快*時最難滿足,所以它的最差情況通常落在 FF、低電壓角點,那裡一條短路徑在時脈安定之前就衝刺穿過。同一顆晶片,兩個相反的敵人,而你必須同時擊敗它們。
MCMM 矩陣:每個角點乘上每個模式
角點回答的是*哪一種矽片*。但真實晶片還會在許多*模式*下運作——而時序約束會隨模式改變。一顆手機 SoC 可能有 0.9 V、3 GHz 的高效能模式,0.6 V、800 MHz 的低功耗模式,一個睡眠/保持模式,一個讓長鏈中每顆正反器都翻動的掃描移位測試模式,以及一個只有真正邏輯時脈在跑的功能模式。每個模式都有自己作用中的時脈、自己的時脈週期、自己被啟用的路徑與偽路徑例外。某條在測試模式下是關鍵的路徑,在功能模式下甚至根本不存在。
把角點清單與模式清單交叉相乘,你就得到多角點多模式(MCMM)矩陣——一張*情境*的網格,每一格都是晶片必須滿足的特定(角點, 模式)配對。簽核的意思,是要在每一個物理上可達的情境裡,同時讓建立與保持時序收斂。一個 4 模式、8 角點的設計,輕易就能產生十幾個作用中的情境,而大型 SoC 會跑上數十個。這正是為什麼時序收斂是一場戰役,而非單一次執行。
CORNER (process, voltage, temperature)
SS/0.72V/-40C SS/0.72V/125C TT/0.80V/25C FF/0.88V/-40C
+--------------+---------------+--------------+---------------+
FUNC HI | setup | setup *** | (ref) | hold *** |
(3GHz) | | | | |
+--------------+---------------+--------------+---------------+
FUNC LO | setup | setup | | hold |
(0.8GHz) | | | | |
+--------------+---------------+--------------+---------------+
SCAN SHIFT | | | | hold *** |
(test) | | | | |
+--------------+---------------+--------------+---------------+
Each non-empty cell = one SIGN-OFF SCENARIO that must pass.
*** = where the worst setup / worst hold violations typically appear.
Setup hunts the SLOW corners; hold hunts the FAST corner.晶片內變異:單一晶粒內部的悲觀餘裕
角點捕捉的是晶片*之間*的變異——你的晶粒對上我的晶粒。但在*同一*顆晶粒上、相隔幾毫米的兩顆電晶體也會有差異:隨機摻雜起伏、局部微影晃動、橫越供電網格的 IR 壓降梯度,甚至某個忙碌區塊底下的熱點。這種局部失配,就是晶片內變異(OCV)。殘酷的轉折在於:對單一條時序檢查而言,OCV 可以把*發射(launch)*路徑與*擷取(capture)*路徑往相反方向推——讓資料路徑變慢,同時讓通往擷取正反器的時脈跑快,這對建立時序而言是兩頭俱輸。
STA 用時序降額來建模 OCV:它把單元與連線的延遲乘上一個降額係數,刻意把發射與擷取路徑拉開。對一條建立檢查,工具會用大於 1.0 的晚到降額(late-derate)*放慢*發射(資料)路徑,並用小於 1.0 的早到降額(early-derate)*加快*擷取(時脈)路徑;對保持檢查則反過來做。這些數字來自函式庫的變異資料與設計所在的層級——例如 1.05 的晚到降額與 0.95 的早到降額是典型的起點,在激進的製程節點上會更大。
SETUP check with OCV derating (the pessimistic split):
launch path --[ data: DERATE LATE x1.05 -> made SLOWER ]--> D
|
common clock -+ FF
from PLL | ^
+--[ capture clk: DERATE EARLY x0.95 -> FASTER ]-+
data arrives later + clock arrives sooner = worst-case squeeze
BUT: the shaded part of the clock tree is SHARED by launch & capture.
Derating it both ways at once is DOUBLE-COUNTING. The fix:
--> Common Path Pessimism Removal (CPPR / CRPR):
credit back the over-pessimism on the common segment.全部串起來:一次簽核演練
讓我們追蹤這一切在實務上如何落地。一旦你把兩個敵人內化,流程就變得機械化:在慢角點追擊建立時序,在快角點追擊保持時序,再讓降額與 CPPR 把悲觀餘裕維持得誠實。你為單一條理想檢查所學的那套機制,如今每個情境各跑一次,而橫跨整張 MCMM 網格的最負裕量(slack),就是那個把關下線與否的數字。
- 建立情境清單。 列舉出可能成為最差情況的(角點, 模式)配對;其餘的以一份有記錄的理由砍掉。為每個角點載入對應的 .lib,為每個模式載入對應的 SDC 約束。
- 在慢角點跑建立時序。 對資料路徑用晚到降額,對擷取時脈用早到降額。一條失敗的建立檢查就是一筆建立違規——靠放大單元、重整邏輯,或略微放寬時脈週期來修。
- 在快角點跑保持時序。 此時降額的正負號翻轉。一條失敗的保持檢查就是一筆保持違規——通常靠在短路徑上插入緩衝器/延遲單元來修,讓資料無法與時脈賽跑。
- 套用 CPPR。 讓工具退還共用時脈段上被重複計入的悲觀餘裕,這樣你才不會去過度修補那些其實從未真正失敗的路徑。
- 取所有情境中的最差裕量。 下線與否,由整張網格中任何一處最負的裕量來把關——建立與保持都算。只要還有一個情境是紅的,另一個是綠的也毫無意義。
留意哪些變了、哪些沒變。一條時序檢查的*方程式*——抵達時間、要求時間、裕量——正是前幾個層級裡的那些。倍增的是*你跑它們的次數*:每個情境各一次,各帶自己的延遲、自己的降額、自己作用中的約束。掌握這套記帳,正是「在實驗桌上能動的晶片」與「在每位客戶手中都能動的晶片」之間的差別。下一個層級會直接建立在這之上:手握 PVT、MCMM 與 OCV,你便已準備好面對完整的變異感知簽核,以及那些把關鍵判斷——該信任哪些角點、該移除哪份悲觀——這些正是區分一個正在收斂的設計與一個卡死設計的分水嶺。