終點線
回想一下後段流程做過的所有事。你從一份閘級網表和一塊空白的矽矩形出發。你做了佈局規劃來決定大區塊和接腳擺在哪裡,做了佈局把每一個標準單元放進合法的列裡,做了時脈樹合成把時脈均勻地扇出,又做了繞線在真實的金屬層上畫出實際的連線。然後你做了簽核:你跑寄生參數萃取和靜態時序分析,直到每條路徑都滿足預算,還檢查了功耗。整個序列——佈局繞線加上簽核——都在朝著同一份交付物逼近。這節課就是你把它交出去的地方。
「流片」就是這次交接的名字。它是這樣一個節點:你不再*改動*設計,而是開始*把它寄出去*——你凍結佈局,把它寫成一個檔案,再把這個檔案送到製作光罩的地方。這個詞是個化石:幾十年前,最終的設計資料真的是裝在一卷磁帶上離開大樓的,有人把磁帶用膠帶封好,帶去光罩廠。磁帶早已不在了,但這個名字留了下來,那種感覺也留了下來——一旦寄出去,就回不來了。你沒辦法像給軟體打補丁那樣給矽打補丁。
# Final signoff STA: prove timing on the WORST corner, not a friendly one. set_analysis_mode -on_chip_variation true ; # apply OCV derating margins report_timing -corner slow_ss_125c -delay setup ; # slowest silicon, hot -> setup report_timing -corner fast_ff_m40c -delay hold ; # fastest silicon, cold -> hold # Tapeout gate: worst slack across ALL corners must be >= 0.
最後的簽核清單
在任何人按下「寫出 GDSII」之前,設計必須通過一份全隊都認可的檢查清單。它沒聽起來那麼風光,卻幾乎比什麼都更重要:流片就緒就是*一串綠色的勾選標記*,只要有一個紅的,就能卡住整次釋出。三大項是時序、物理正確性和功耗——正是後段流程一路追逐的那三樣,如今在最終的、完全繞線好的、帶有真實寄生參數的佈局上,再做最後一次確認。
- 時序已簽核。 時序簽核確認每條路徑都有非負的裕量——建立和保持都通過——這是在最終繞線後的網表上、跨所有相關的製程角、並施加了晶片內變異餘量後得到的結論。沒有任何路徑失敗,任何地方都沒有負裕量。
- DRC 乾淨。 設計規則檢查確認佈局遵守了晶圓廠要求的每一條幾何規則——最小線寬、間距、包圍、密度。零違規。
- LVS 乾淨。 佈局與電路圖比對確認你畫出的幾何形狀與你預期的網表一致——同樣的元件,同樣的連接關係。你畫出來的那顆晶片,*就是*你設計的那顆晶片。
- 功耗已驗證。 供電網路要做IR 壓降檢查(每個單元都拿到足夠的電壓)和電遷移檢查(沒有哪根線通過的電流大到會被磨損耗盡)。電源和地安全地抵達每一處。
- ECO 已收尾並重新驗證。 任何最後一刻的工程變更指令都已經繞線進去,*而且*受影響的檢查都重新跑過——因為正是那個用來收住時序的修改,可能會捅出一個 DRC 違規。
留意最後那句話裡藏著的陷阱。這些檢查並不是各自獨立的——它們彼此耦合,修好一個可能就弄壞另一個。為收住一條時序路徑而放大一個單元,你可能就違反了某條間距規則;為修這個 DRC 而重新繞線,你又改變了寄生參數,於是你的時序必須重新證明一遍。流片的紀律,就是拒絕在一個*已經過期*的結果上簽字。每一個綠色勾選標記都必須是在同一份、最終的資料庫上才是綠的——就是你即將寄出去的那一份。
GDSII:你寄出去的那份佈局
那些檢查全都是針對你工具內部的某個資料庫通過的。要把設計寄出去,你得把它壓平成一個自包含的檔案,用光罩廠能讀懂的格式。幾十年來,這個格式一直是GDSII——一段二進位流,它把你整顆晶片存成純粹的幾何:一疊層,每一層上是一堆帶有精確座標的多邊形。這就是它的全部理念。GDSII 不知道什麼是電晶體、什麼是時脈。它只知道:*在第 31 層,有一個從這裡到那裡的矩形;在第 49 層,有這個多邊形。* 這是用刻鏤空模板的人會用的方式來描述的晶片——一張張片子上的形狀——而不是邏輯設計師會用的方式。
把它想像成一疊高高的透明膠片。最底下的幾張片子裝著微小的電晶體形狀;往上爬,你會經過接觸層,然後是金屬1、金屬 2,一直往上到承載電源的厚厚的頂層金屬。每一張片子就是一個光罩層,每一張都只是多邊形的一個平面集合。把每張片子對準疊在一起,你就得到了完整的實體晶片——每一根線、每一個導孔、每一個單元——全都凍結成了座標。一個現代設計有數十億個這樣的多邊形,這正是為什麼 GDSII(以及它更精簡的後繼者 OASIS)是二進位並緊湊打包的,而不是人能直接讀的文字。
# Write the signed-off layout out as the shippable deliverable. # (Vendor-neutral pseudo-commands; real tools differ in syntax.) set_db design_freeze true ; # no more edits past this point write_gds top.gds -layer_map tech.map ; # binary geometry: layers + polygons write_lef top.lef ; # abstract for any parent using this block
流片與光罩廠
你的 GDSII 檔案會送到光罩廠——晶圓廠裡把幾何變成玻璃的那個部門。對你那疊層中的每一層,他們都會做一塊光罩:一塊石英板,上面把這一層的多邊形做成了不透明的鉻圖案,就像一塊極其精密的鏤空模板。一個現代製程需要幾十塊這樣的光罩,每層一塊(或幾塊),合在一起就是你這顆晶片的*光罩組*。製作一套光罩組,是你這個檔案觸發的、最昂貴也最具承諾性的一件事——這正是流片為何讓人覺得如此終局的原因。
但晶圓廠並不會原封不動地把你畫的多邊形印出來。那些特徵遠比用來印它們的光的波長要小,於是光會發生彎折,印出來的形狀就變得圓鈍、扭曲。為了補償這一點,光罩廠會做光罩資料處理:光學鄰近校正(OPC)會故意*扭曲*你的多邊形——加上一些小襯線和拐折、把邊緣輕輕挪一挪——這樣在光把它們模糊掉之後,真正落到晶圓上的東西才和你的本意吻合。光罩不是你佈局的一張照片;它是一個經過預先扭曲、專為能正確印出而設計的版本。
交接給製造
到這裡,後段課程就結束了,接力棒交給了晶圓廠。光罩組做好之後,晶圓廠就開始製造:一片裸矽晶圓送進去,一層一層地,把晶片自下而上地造起來。這個過程的主力是微影——讓光透過你的每一塊光罩,把這一層的圖案印到一層光敏塗層裡,然後在圖案指示的地方蝕刻或沉積材料。一層接一層、一塊光罩接一塊光罩,你那一疊多邊形片子,就變成了矽裡一疊真實的實體層。
如果你想詳細看看接下來發生什麼,那是另一個完整的故事——而 JOVANA 正好有一條課程講它。《晶片是怎樣造出來的》這條製造課程,恰好就從你的 GDSII 落地的地方接著講下去:晶圓是怎麼生長出來的、微影是怎麼把你的光罩印上去的、摻雜是怎麼造出當初構成你那些標準單元的CMOS電晶體的,以及成千上萬顆你這顆晶片的副本,是怎麼在一片晶圓上並排造出來的。那條課程,是這同一段旅程裡屬於製造的那一半,而這條課程收的是另一半的尾。
回來的東西:矽晶片與點亮
流片之後的幾週或幾個月,一件非凡的東西會送到你的工作台上:*首批矽晶片*——用你的光罩做出來的、最最初的那批實物晶片。在模擬器和時序報告裡待了這麼久之後,你終於可以給真傢伙上電了。這就是點亮(bring-up):那個細緻而有條不紊的過程,用來證明這顆真實的晶片確實在做設計當初承諾的事。你從小處入手——上電會不會短路?時脈會不會翻轉?能不能從重置裡出來?——再一步步向外,做到完整的功能集。
點亮就是簽核拿到成績單的地方。你一路帶著的每一份餘量——你在上面收住時序的每一個製程角、每一道變異保護帶、你預留的每一份IR 壓降——都是關於真實矽晶片會如何表現的一次下注。如果晶片啟動了,並且在各個溫度和電壓下都跑到了目標頻率,那這些注就押對了。如果某條路徑只在晶片發熱時才勉勉強強,或者某個區塊在負載下電壓塌掉,那就是矽晶片在告訴你,有些東西你的腳本漏掉了。有時候,修法是一個小小的ECO加上一次便宜的*僅金屬層*重新流片;有時候,則是推倒重來。
於是,這個迴圈就閉合了。你開始這條後段課程時,手裡是一份乾淨的網表和一塊空蕩蕩的佈局地面;你結束它時,手裡握著一顆能運作的、起點是你那份RTL的晶片。中間的每一步——佈局規劃、佈局、時脈樹、繞線、萃取、簽核、流片——存在的意義,都是為了把意圖安全地從一段描述送進一個你能拿在手裡的實物。這就是實體設計與簽核這門手藝的全部:確保以矽晶片形式回來的東西,正是你當初以GDSII形式寄出去的東西。