跳轉到

06.4 統計靜態時序分析 SSTA:把機率引進時序世界#

6.3 節結尾留下了一個伏筆:OCV 與 AOCV 是用常數與查找表「類比」統計效應的權宜之計。既然延遲在深次微米製程下本質上是隨機變數,最自然的想法莫過於直接把機率論引進 STA 引擎——讓每個節點的到達時間不是一個數字,而是一個分佈;讓 setup 檢查不是 \(RT - AT \ge 0\) ,而是「違約機率 \(\le\) 目標良率」。這就是統計靜態時序分析(Statistical STA, SSTA)。在 2004 年前後的學術界,SSTA 曾被普遍視為 65nm 以下時序分析的唯一出路,CAD 頂會(DAC、ICCAD、DATE)上相關論文如潮水湧現;二十年後回顧,它卻是一場「理論勝利、商業未竟」的經典案例。本節講清楚 SSTA 的數學內核、它與 corner-based 方法的本質差異,以及它為什麼沒有完全贏——而這個教訓對今天的 EDA 研發者仍然有效。

學術浪潮的起點#

SSTA 的理論基礎在 1990 年代就已打下。IBM 的 Chandu Visweswariah 是這條路線最有代表性的推手:他與合作者在 2000 年前後的一系列工作(代表作是 2006 年 DAC 與 IEEE TCAD 上的 "First-Order Incremental Block-Based Statistical Timing Analysis" 教程式論文,以及更早與 Kaldewaje、Ravindran 等合作的統計 timing 框架)把「延遲是隨機變數、STA 是機率傳播」的框架系統化。同期,UCSD 的 Andrew Orshansky 與其合作者(與 Bandyopadhyay、Chen、Hu 等人)從製程變異的物理建模切入,研究 spatial correlation 對 timing 的影響,指出忽略相關性的 SSTA 會系統性高估或低估良率;UC Berkeley 的 Jhaveri、Agarwal(V. Agarwal、D. Blaauw 等在 Michigan 的團隊也在這一波)則發展了參數化變異模型(parameterized modeling),把製程參數(如 \(V_{th}\) 、 \(t_{ox}\) 、線寬)當作隨機變數,cell 延遲是這些參數的一次近似。學術潮的經濟背景很清楚:2001–2005 年,90nm 與 65nm 製程的 intra-die 變異數據開始從 foundry 流出,Intel 與 IBM 的先進製程報告顯示同晶片內相同電路的頻率散佈可達 20% 以上;如果 corner 方法要涵蓋這種變異,corner 數量將爆炸,產業急切需要一個「算良率」而非「算最壞情況」的框架。

數學內核:線性傳播與相關性#

SSTA 的核心模型是這樣的。取一組獨立(或經轉換後近似獨立的)全域製程參數 \(\Delta p_1, \dots, \Delta p_k\) (標準化為零均值單位變異數),加上每個節點自己的局部隨機項 \(\Delta r_i\) ,把 cell 延遲一階泰勒展開:

\[ d_i = d_i^0 + \sum_{j=1}^{k} s_{ij}\, \Delta p_j + \Delta r_i \]

其中 \(s_{ij}\) 是靈敏度( \(\partial d_i / \partial p_j\) ),由 cell 庫的統計模型(如 Liberty 的 CCS/ statistical extension、或 foundry 的統計 .lib)提供。每個節點的 arrival time 於是也是一組線性函數的 max;對兩條路徑會合的節點,max 運算用 Clark(1959)的兩個近似高斯變數取 max 的解析公式傳播:

\[ \max(a, b) \approx \mu_{\max} + \sigma_{\max}\, z \]

其中 \(\mu_{\max}, \sigma_{\max}\) 由 \(a, b\) 的均值、變異數與相關係數 \(\rho\) 算出, \(z\) 是新引入的等效標準常態變數。整個 STA 的拓撲掃描骨架(6.2 節的 \(O(V+E)\) 框架)原封不動,只是每個節點攜帶的資料從一個純量變成一個「均值向量 + 變異數 + 若干合成的隨機變數係數」。偽代碼結構如下:

for v in 拓撲序:
    for arc (u -> v):
        d_arc = 延遲分佈(靈敏度表, slew, load)
        a = AT[u] + d_arc
        AT[v] = gaussian_max(AT[v], a)   # Clark 近似
slack 分佈 = RT 分佈 - AT 分佈
違約機率 = P(slack < 0) = Φ(-μ_slack/σ_slack)

與 corner 方法相比,SSTA 的本質優勢有二。第一,它處理了相關性:路徑上相鄰 cell 共享製程參數,其延遲不是獨立的;corner 方法把「每個 arc 獨立取最壞」造成的假悲觀(正是 OCV 用 derate 表打補丁的東西),在 SSTA 中自動被協變數矩陣吸收——長路徑的 \(\sigma\) 隨深度以 \(\sqrt{n}\) 而非 \(n\) 增長,這正是 AOCV 查找表試圖模仿的統計收縮。第二,它直接輸出良率資訊:設計者第一次可以問「這個設計在 3σ 下有幾條路徑違約、良率是多少」,而不只是「最壞 corner 有沒有違約」。

為什麼 SSTA 沒有完全贏#

儘管理論優雅,SSTA 在商業上從未成為主流簽核方法,原因是多層的。技術上,一階線性模型在變異大時失真(max 運算對非高斯分佈尤其不友好,會累積非高斯尾巴,Gaussian sum 近似在多次 max 後漂移);非線性方法(如用多項式混沌、quadratic models)修正了精度,卻讓參數傳播的計算與記憶體成本暴增。經濟上,SSTA 需要的輸入是 foundry 的統計變異模型(各參數的協變數結構),而這是 foundry 最敏感的商業機密——製程變異的空間相關結構直接暴露製程控制能力。foundry 不願交付完整的統計模型,只肯給簡化甚至閹割的版本,SSTA 等於斷糧。制度上,signoff 的文化是「可仲裁的確定數字」:OCV/AOCV 的 derate 表雖然粗糙,但它把不確定性壓縮成一個每個人都看得懂、每家工具都能對齊的常數,簽核責任可以切乾淨;「你的晶片有 0.3% 機率違約」這種機率式簽核,在 2000 年代的商業與法律框架下無人敢簽。用一個略帶貶義但業界常用的說法:corner-based OCV 是狗皮膏藥——不科學,但貼得住、貼得快,而且所有人認這張膏藥。最後,AOCV 的出現釜底抽薪:既然查找表能以 5% 內的誤差逼近 SSTA 對長路徑悲觀性的修正,而成本只是「pre-compute + 查表」,那麼客戶沒有理由為 SSTA 的複雜性買單。Cadence 與 Synopsys 都曾推出過統計 timing 的產品或原型(如 Synopsys 2000 年代中期的 Gemini 路線探索、Cadence 的 statistica 分析選項),最終都收縮為 signoff 工具裡的輔助分析,而非主流程。

SSTA 的學術遺產則以另一種方式存活。它的相關性數學成為 AOCV/POCV 的理論依據——POCV(Parametric OCV,2010 年代由 Synopsys 等推動)用每個 cell 的單一 sigma 參數(而不是 depth/distance 表)做統計化的 derate,可以看作 SSTA 的極簡版,如今已是先進節點簽核 kit 的標配。SSTA 的良率視角也滲入了 VarA 與良率導向的設計方法學,而「變異感知優化」(variation-aware placement、statistical leakage optimization)在低功耗與高良率市場(手機 SoC)實質落地。更廣義地說,SSTA 那場浪潮確立了一個重要的方法論結論:當變異成為常態,工程問題應該在「最佳化的期望值 + 風險控制」框架下求解,而不是在最壞情況下求解——這個思想後來在機器學習輔助 EDA、以及製程成熟後的 marginality 分析中反覆重現。

回顧 6.1 到 6.4 的四段歷史:Elmore 用一個 1948 年的物理直覺給了 EDA 便宜的延遲原子;拓撲排序把原子組合成 \(O(V+E)\) 的全域檢查框架;製程變異逼出 CPPR/OCV/AOCV 的補丁體系與 signoff 制度;SSTA 則證明瞭「正確的數學」未必打敗「實用的近似」。這條主線的共同教訓是:EDA 演算法的存亡取決於它能否卡進產業的介面與制度,而非它自身的優雅。理解了這一點,再去讀任何新的 EDA 演算法——無論是機器學習的 placement 還是開源的 veryl2chip 這類工具鏈——都會多一分歷史的清醒。