07.5 ASIC 詳細繞線:Track Assignment 與 DRC 約束下的網格迷宮#
從「大概走哪裡」到「一格格畫出來」#
全局繞線交出的是一張粗粒度的路線圖:每條線網經過哪些 gcell、大概用哪些層。把這張圖變成可以送進製造的幾何圖形,是詳細繞線(detail routing)的工作。這一步的目標看似單純——在每個區域內把每條線網放到具體的軌道上、打上 via、不違反任何設計規則——但它是整個實體設計流程中最「貼著製程走」的環節:線寬、線距、同層/異層間距、via 的形狀與陣列規則、金屬密度……所有 DRC 規則都在這裡兌現。可以說,全局繞線是演算法學家的戰場,詳細繞線是製程工程師與演算法學家的共同戰場。
兩段式結構:Track Assignment 與網格迷宮#
現代 ASIC 詳細繞線器內部幾乎都是兩段式。第一段是軌道分配(track assignment,TA):以每層單一走向(preferred direction,例如 M4 全水平、M5 全垂直)的軌道為對象,把全局繞線給出的每段線網「整段整段」地指派到具體軌道上。TA 是一種區間圖著色/資源指派問題:同一軌道上重疊的線段不能並存,而且指派要順便最小化 via 數與短線(jog)。TA 快而粗,它把「線網走哪條軌道」這個最大自由度的決策先定下來,剩下的衝突才交給下一段。
第二段才是真正的網格迷宮搜尋:對仍未連通或違規的區域,以格點為節點、以可走方向為邊,跑 A*/Lee 式搜尋,cost 中編入長度、via 數、對既存走線的 DRC 間距約束。搜尋的粒度是 track 與 row,而非整面晶片,所以單次搜尋很小;但整顆晶片上要跑成千上萬次,且每次的障礙圖都不同(既有走線、電源網、巨集 cell 的 pin、blockage)。這正是 7.1、7.2 的迷宮演算法在今天的棲身之所——只是搜尋域從「整張板子」縮成「一個 gcell 內部」,而且約束從「格子被占沒有」升級為「候選位置與鄰居的間距是否滿足每條 DRC 規則」。
在 gridded 與 gridless 之間,1990 年代有過長期爭論:gridless(無網格、形狀導向,常以 Hightower 式線段搜尋或曼哈頓/八方向拓撲為基礎)可以精確貼合任意幾何與任意寬度的線,學界一度看好;但先進製程的規則越來越複雜、規模越來越大,工業界最終幾乎全面倒向 gridded——把 DRC 規則預先「烘焙」進網格的格距與相鄰格的合法關係裡,讓繞線搜尋變成純粹的圖搜尋,規則檢查隱含在圖的合法性中。這個選擇背後還有 45/32 nm 之後的現實:double patterning(雙重圖形化,DPT)要求同一層的金屬被拆成兩張光罩,繞線器必須保證相鄰同層走線可被分配到不同光罩(color assignment),並在必要處插入 stitch via。這類約束在 gridless 幾何上極難全域處理,在 gridded 上則可以被表達為圖上的著色/匹配問題。商業工具因此演變為:以 gridded 為主體,gridless/形狀級運算只用在少量特殊區域(如 pin access、custom analog 局部)。
商業工具的格局#
詳細繞線器是 EDA 產業壁壘最高的產品線之一。Cadence 的 WarpRoute/WRoute 系列在 1990 年代末至 2000 年代長期是業界標竿(WRoute 的技術後來融入 Innovus 的繞線引擎);Synopsys 的 ICC/ICC2 內建了自家的詳細繞線器;被 Synopsys 收購前的 Magma 的 Talus 也以「統一佈局繞線、快速迭代」為賣點在 2000 年代占有一席。這些工具的共同特徵是:龐大的 DRC 規則引擎(處理各家 foundry 數千條規則)、成熟的 ripup-and-reroute 迴圈、pin access 分析(保證標準單元接腳可被軌道觸及——這在先進製程是主要瓶頸之一)、以及與時序/寄生參數提取的緊密回饋。它們的演算法細節不公開,形成一種奇特的文化現象:學界對詳細繞線的論文很多,但業界真正的 know-how 在於規則處理與工程打磨,學術工具長期難以望其項背。
開源世界的回答:TritonRoute#
這個格局在 2020 年前後被改變。OpenROAD 專案(DARPA IDEA 與政府資助的開源 RTL-to-GDSII 流程)中,UCSD Andrew Kahng 團隊開發了開源詳細繞線器 TritonRoute(及其前身 DR 工具),實作了兩段式結構:先做 pin access 與 track assignment 分析,再以逐 gcell 的網格迷宮搜尋完成詳細繞線,全程以 foundry 式 DRC 規則(間距、 enclosure、min area、corner fill 等)為約束,並內建 ripup-and-reroute 迴圈處理違規。TritonRoute 的意義不只在「可用」:它的規則驅動架構與程式碼公開,讓全球研究者第一次能在真實製程節點上做詳細繞線演算法實驗,也讓 FlexRoute(同屬 OpenROAD 的 negotiated congestion 全局繞線器,見 7.4)與 TritonRoute 構成完整且免費的繞線閉環。對本書讀者而言,TritonRoute 也是最值得閱讀的現代詳細繞線器原始碼——兩段式結構、DRC 引擎、ripup 迴圈在裡面都有真實且可讀的實作。
先進製程的詳細繞線難度仍在上升:DPT 之外,EUV 讓 single patterning 回歸但帶來新的 corner 規則;via 的最佳化(via array、multi-cut、redundant via)成為良率與可靠性的關鍵;pin access 在低層金屬越來越擠的情況下成為繞線收斂的第一道關卡。這些難度推動詳細繞線器從「幾何規劃者」演變為「帶著數千條規則跑圖搜尋的規則引擎」。帶著這個印象,我們轉向繞線故事的另一端——FPGA 的繞線資源圖:那裡的規則不是數千條 DRC,而是一張出廠即固定的開關網路。
違規驅動的重繞:detail routing 的日常#
兩段式結構之外,詳細繞線器的日常運轉靠的是一個違規驅動的迴圈。第一輪 TA 加迷宮搜尋跑完後,DRC 引擎掃出一份違規清單:間距不足、via 與鄰線衝突、min area 不滿、pin 無法觸及。繞線器把每個違規局部化到某個 gcell,對該區域內的相關線網做 ripup,把違規位置記入 cost 的歷史項(讓下次搜尋主動避開),然後重繞;如此迭代到違規數歸零或不再下降。這個迴圈與全局繞線的 ripup 迴圈同構,只是粒度更細、違規定義更嚴格——從「超過容量」變成「幾何距離小於規則值」。實務上,詳細繞線的收斂性高度依賴全局繞線交出的擁塞地圖品質:如果全局繞線已經把某些 gcell 塞到超容,詳細繞線再怎麼重繞也無濟於事,必須回頭動全局。這種「下游失敗要回饋上游」的介面設計,是 2000 年代以來佈局—全局繞線—詳細繞線被整合成單一引擎(integrated placement and routing)的技術動機之一。