最後一哩,最難走
登山者有句冷酷的話:登頂只是走了一半,因為下山才會要你的命。晶片設計也有自己的版本。當佈局繞線(place-and-route)把版圖交到你手上時,設計其實已經「會動」了——邏輯正確、平面規劃合理、99% 的路徑早已滿足時序。然而最後那 1%——數千萬條路徑中幾千條頑固的傢伙——卻能吞掉好幾週。這最後一段就是時序收斂(timing closure):用紀律與反覆,把每個違例在所有操作條件下逼到零,再用黃金工具證明到讓人信服,設計才被允許離開公司。
本階梯前面的一切都指向這裡。靜態時序分析給了你發射—擷取模型;裕度把每條路徑化成一個數字,正的(通過)或負的(失敗);建立與保持時間告訴你一顆正反器強加的兩個截止期限;時脈偏斜、降額與晶片內變異則解釋了為何裕度永遠沒看起來那麼寬裕。收斂,就是你「花用」這一切知識的地方。貨幣是時序 ECO——一個微小、外科式的改動——而收據就是簽核(signoff)。
ECO 工具箱:四招與使用時機
工程變更通知(ECO)這個詞借自老派的紙本工程:對已完成設計做一個正式、有記錄、最小化的變更。時序 ECO就是 IC 版本——你不會把整個區塊重新合成、重新繞線(那會打亂已經通過的那 99%,還可能引入全新的違例)。你是拿著鑷子伸進去,只改動少數幾個元件。經典招式有四種,好的工程師懂得每一招的代價。
- 放大(upsize)元件。 路徑太慢,是因為某個閘極驅動沉重負載時力道不足。把它換成同一標準元件的高驅動版本(X2 緩衝器換成 X4)。它驅動得更快,修好建立違例——但它耗更多功率、佔更多面積,也更重地拉著自己的輸入,可能把違例往上游推一級。
- 更換 Vt(臨界電壓)。 透過多重 Vt 設計,同一個邏輯元件有慢但低漏電(HVT)、平衡(SVT)、快但高漏電(LVT)三種版本。把建立關鍵元件從 HVT 換成 LVT,可在完全不改變佔位面積的情況下搶回數十皮秒——這種 ECO 在面積與佈局上幾乎免費,但會抬高漏電功率。修保持違例則反過來:換成較「慢」的 HVT 元件以增加延遲。
- 緩衝器插入/重構。 一條長線有太多電阻與電容;插入一個(或兩個)緩衝器,把 RC 切成更短的段落,恢復轉態率(slew)。修保持違例時,同一招是替過快的資料路徑加上延遲。插入元件需要附近有空的佈局位置——若該區壅塞,緩衝器會落在很遠的地方,可能幫不上忙,甚至幫倒忙。
- 重繞線/升層。 若元凶是導線本身,請繞線器把該訊號線改繞到更寬、更厚、電阻更低的上層金屬層,或繞開侵擾訊號線以減少串擾。這是最具侵入性的一招——可能擾動鄰居——所以通常是真正以導線為主導的路徑的最後手段。
Path R12 (failing setup, slack = -85 ps) reg_a/Q -> u_and3 -> u_buf1 -> long_net_n47 -> u_xor2 -> reg_b/D Fix option delta slack power area placement risk -------------------- ----------- ------ ----- -------------- upsize u_xor2 X2->X4 +40 ps +18 uW +1 row low swap u_and3 SVT->LVT +55 ps +leak 0 none (in-place) buffer net_n47 (x1) +70 ps + leak +1 cell needs free site reroute net_n47 M5->M7 +95 ps ~0 0 disturbs n44,n51 Chosen ECO: swap u_and3 to LVT (+55) AND upsize u_xor2 (+40) => predicted slack = -85 + 55 + 40 = +10 ps (PASS, margin thin)
為何一份時序報告永遠不夠:MCMM
這裡有個專坑新手的陷阱。你做了一個 ECO,報告變綠,你開心慶祝——隔天早上晶片卻時序失敗。為什麼?因為晶片不會只活在一個溫度、一個電壓、一種製造結果裡。它必須在被丟在熱車裡的手機、冷藏機架裡的伺服器、晶圓慢角落的零件、另一個快角落的零件裡都能工作。每一種組合就是一個角點(corner),而設計必須全部通過。
這就是多角點多模式分析,即 MCMM。一個角點描述物理條件:製程(慢/典型/快矽晶)、電壓(0.72 V 到 0.88 V)、溫度(−40 °C 到 125 °C),再加上寄生 RC 萃取組。一個模式描述功能狀態:全速任務模式、低功耗模式、掃描測試模式、睡眠模式。兩者相乘,一顆認真的 SoC 通常要在數百個情境上簽核——每個都是一次完整的 STA 執行。
slow-V-hot typ-typ fast-V-cold
(setup-worst) (hold-worst)
+------------+ +----------+ +-------------+
func | check SETUP| | margin | | check HOLD |
mode | slow wins | | | | fast wins |
+------------+ +----------+ +-------------+
scan | check SETUP| | ... | | check HOLD |
mode +------------+ +----------+ +-------------+
Golden rule of thumb (not absolute):
SETUP is worst in the SLOW corner (low V, high T, slow process)
HOLD is worst in the FAST corner (high V, low T, fast process)
An ECO that fixes setup in the slow corner may CREATE a hold
violation in the fast corner -> you must re-check BOTH after every fix.這也是為何時序降額(derating)在收斂階段如此重要。晶片內變異意味著相距幾微米的兩個相同元件會以略不同的速度運作,所以簽核會把發射路徑延遲乘以(1 + 降額)、把擷取路徑延遲乘以(1 − 降額),以模擬最差的對齊。一條名義上通過的路徑,在套用降額後可能失敗——所以你是用降額後、角點專屬的數字來收斂時序,絕不用樂觀的名義值。
簽核:晶片離開前的黃金一語
在整個實作過程中,佈局繞線工具會跑它自己的時序引擎——快速、近似,足以引導最佳化。但你絕不會拿一套三千萬美元的光罩去賭它。[[timing-signoff|時序簽核]]是最終、權威的判決,由一個獨立的黃金簽核 STA 工具產出(業界標準:Synopsys PrimeTime),所有人——設計者、晶圓代工廠、管理層——都同意信任它。它的延遲模型、寄生處理與角點函式庫,就是有案可查的參考基準。
為何要用獨立的工具?為了獨立性。實作引擎與簽核引擎由不同團隊(有時不同公司)以不同演算法打造,所以若兩者都同意某路徑乾淨,那份共識就是真正的證據——而不是同一個工具替自己的作業打分。麻煩之處在於相關性(correlation):兩個引擎必須高度吻合,否則你會碰到那種令人抓狂的情況——P&R 報告路徑已收斂,簽核卻報告失敗。把這個落差收窄——收緊降額、對齊萃取、統一函式庫——就是最後幾週裡一半的硬仗。
關鍵在於,簽核不只是建立與保持裕度。一份乾淨的簽核是一套綠色報告:所有角點建立達標、所有角點保持達標、每一個時脈域跨越都處理妥當、串擾誘發的延遲已併入時序、沒有最大轉態或最大電容的設計規則違例、時脈偏斜與不確定性也都計入。唯有當這一整套在完整的 MCMM 集合上都乾淨時,時序這項檢查才會被打勾。
投片:不歸點
當每一道簽核關卡都綠了——時序,加上它的兄弟們:實體驗證(DRC/LVS)、功率、電遷移/IR 壓降、以及 DFT 覆蓋率——設計就準備好投片(tape-out)了。這名稱是 1970 年代的化石,當時最終設計真的就是一卷帶到晶圓廠的磁帶。今天它的意思是把 GDSII(或 OASIS)版圖資料庫送到晶圓代工廠去製作光罩。那些光罩要價數百萬、得花數週切製,而一旦矽晶進了爐子,就沒有 `Ctrl-Z`。一個逃過簽核的時序錯誤,就會變成一次重製(respin)——數月的進度與一大筆光罩費用。
這正是簽核如此沉重的全部理由。這道關卡存在,是因為犯錯的代價既災難性又不可逆。所以投片要經過一場正式的檢查清單審查,每位負責人站出來、實質上說:「我的領域乾淨,我願意署名背書。」時序收斂是那一頁上的一個簽名——但歷來也是最具爭議的一個,因為它牽涉頻率,而頻率牽涉產品的頭條規格。
TAPE-OUT READINESS CHECKLIST (timing owner section) [x] Setup slack >= 0 in ALL setup corners & modes (MCMM) [x] Hold slack >= 0 in ALL hold corners & modes (MCMM) [x] Signoff STA = golden tool (PrimeTime), libraries frozen v3.2 [x] P&R <-> signoff correlation within 30 ps on worst paths [x] Crosstalk / SI delay enabled; derates applied per foundry deck [x] All clock-domain crossings constrained & verified [x] No max_tran / max_cap / max_fanout DRV violations [x] All ECOs re-run clean; no functional ECO outstanding [x] False/multicycle paths reviewed & justified (no over-relaxing) --> TIMING SIGNED OFF. Release GDSII to mask shop.
工程師的檢查清單:把收斂當成藝術
如果本階梯其餘部分教了你時序的規則,這一級講的是判斷——因為收斂是一個沒有單一正確解的受限最佳化。你在權衡四件都重要、又彼此相抗的事:時序、功率、面積、進度。加速一條路徑,你就花掉功率與面積;花太久把它打磨完美,你就拖垮進度,而在競爭市場裡,這代價可能比一顆稍慢的晶片更高。
- 依最差裕度分流,先修最差負裕度(WNS)路徑,再分析後才碰其餘——共用元件意味著一個修正往往清掉多條路徑。追蹤總負裕度(TNS),看整片戰場在縮小,而不只盯著最差的那一條。
- 優先用最便宜、又有效的修正。 Vt 更換在面積與佈局上幾乎免費;放大要付出功率與面積;緩衝器插入與重繞線最具破壞性。這道階梯,能不爬高就不爬高。
- 每次修正後都重查每個角點。 在慢角點修建立,可能在快角點弄壞保持。一份報告綠了不算收斂完成——整張 MCMM 網格同時綠了才算。
- 信任黃金簽核工具,而非實作的估計。 早早把相關性收緊、凍結簽核設定,並在最後一個 ECO 後重跑簽核——絕不靠 P&R 的樂觀數字投片。
- 為每個例外留下書面論證。 偽路徑或多週期約束必須可被證明為正確,而不是用來讓紅線閉嘴的方便手段。犯錯的代價是一次重製。
- 懂得何時「夠好就是完成」。 一條收到 +200 ps 的路徑,並不比收到 +5 ps 的更好——如果你花了兩週與一百微瓦,去換一個沒人需要的裕度。當每個角點都以合理裕度通過時,收斂就完成了——這時你就停手,投片。
這就是本階梯整條弧線的收成。STA給了你鏡頭,裕度給了你分數,建立/保持/偏斜/降額給了你物理,而收斂,就是人類運用判斷、用最少的皮焦耳與最少的天數把每個數字逼綠的地方。當最後一個角點清空、投片清單被簽署,幾平方毫米的矽晶即將被交付製罩——在它將遇到的每一種條件下都正確運作,因為你證明了它會。