物理設計

<image>

物理設計（physical design）在集成電路設計中是完成功能設計之後的一個流程。在這一步，經過布圖規劃、放置、布線等具體過程後，以硬體描述語言等抽象形式表達的電路網表會被轉換成代表電路的幾何圖形，這個幾何圖形被稱為積體電路版圖。半導體工廠根據版圖文件就可以製造出實際的硬體電路。除了前面提到的具體過程，物理設計還包括一系列對於版圖的設計和驗證。

現代積體電路（IC）設計分為「使用HDL的前端設計」和「後端設計」或「物理設計」。物理設計的輸入包括： (i) 網表， (ii) 設計中基本器件的庫資訊， (iii) 包含製造約束的工藝文件。物理設計通常以版圖後處理結束，在此對晶片版圖進行修改和補充。隨後是將設計轉移到矽片並封裝成積體電路的製造（工藝）階段。上述每一階段都有相應的設計流程。設計流程規定該階段的步驟與指導框架。物理設計流程使用由代工廠提供的工藝庫。工藝文件提供關於所用矽片類型、所用標準單元、版圖規則（如VLSI中的DRC）等資訊。物理設計工程師（有時稱為物理工程師或物理設計師）負責設計與版圖（包括布線），特別是在ASIC/FPGA設計中。

## 劃分

通常，IC物理設計分為全定製與半定製兩類。

- 全定製：設計者在版圖設計上有完全自由，不使用預定義單元。
- 半定製：使用預先設計的庫單元（最好經過DFM測試），設計者在單元放置和布線方面有靈活性。

可以使用ASIC流程實現全定製設計，使用FPGA流程實現半定製設計。原因在於ASIC允許對代工或供應商提供庫中的模塊進行設計或修改的靈活性。使用FPGA的半定製流程（例如Altera）通常缺乏此類靈活性。

## ASIC 物理設計流程

<image>

ASIC 物理設計流程的主要步驟為：

- 設計網表（綜合後）
- 布圖規劃
- 分區
- 單元放置
- 時鐘樹綜合
- 布線
- 物理驗證
- 帶掩膜數據生成的版圖後處理

以上僅為基本步驟。根據所用工具、方法學與工藝，存在更為詳盡的物理設計流程。後端設計中常用的一些工具/軟體包括：

- Cadence（如 Cadence Encounter RTL Compiler、Encounter Digital Implementation、Cadence Voltus IC Power Integrity Solution、Cadence Tempus Timing Signoff Solution）
- Synopsys（如 Design Compiler、IC Compiler II、IC Validator、PrimeTime、PrimePower、PrimeRail）
- Magma（如 BlastFusion 等）
- Mentor Graphics（如 Olympus SoC、IC-Station、Calibre）

ASIC物理設計流程使用代工廠提供的工藝庫。工藝通常按最小特徵尺寸分類。典型尺寸按微縮順序為：2μm、1μm、0.5μm、0.35μm、0.25μm、180nm、130nm、90nm、65nm、45nm、28nm、22nm、18nm、14nm等。它們也可按主要製造工藝分類：n-肼工藝、雙肼（twin-well）工藝、SOI工藝等。

## 設計網表

物理設計基於網表。網表是綜合過程的最終產物。綜合通常把以VHDL或Verilog HDL編寫的RTL設計，轉換為後續工具可讀的門級描述。該網表包含所用單元、互連、占用面積及其他細節資訊。典型的綜合工具有：

- Cadence RTL Compiler / Build Gates / Physically Knowledgeable Synthesis (PKS)
- Synopsys Design Compiler

在綜合過程中會施加約束以保證設計滿足功能和速度（規格）。只有在網表通過功能和時序驗證後，才送入物理設計流程。

## 步驟

### 分區

分區是將晶片劃分為小塊的過程。主要目的是分離不同功能塊並簡化放置與布線。分區可在RTL設計階段由設計工程師把整個設計劃分為子模塊，然後分別設計這些模塊。各模塊在頂層模塊（TOP LEVEL）中連接。此類分區通常稱為邏輯分區。分區目標是儘量減少分區之間的連接數。

### 布圖規劃

物理設計流程的第二步是晶片布圖規劃。布圖規劃識別應相互靠近放置的結構，並為其分配空間，以在可用面積（晶片成本）、所需性能和局部匯聚性的衝突目標間取得平衡。

根據設計面積與層次結構確定合適的布圖規劃。平面規劃考慮設計中使用的宏單元、存儲器、其他IP核及其放置需求、布線可能性以及整個設計的面積。布圖規劃還確定IO結構和長寬比。糟糕的布圖規劃會導致晶片面積浪費和布線擁塞。

在許多方法學中，面積和速度是需要權衡的目標。路由資源有限，使用更多資源通常會降低運行速度。優化最小面積可減少資源使用並提高模塊間鄰近性，從而縮短互連距離、減少布線資源使用、加快信號端到端延遲，並提高放置與布線的速度和穩定性。正確實施的布圖規劃沒有負面影響。

一般規則是，數據通路模塊最受益於布圖規劃，而隨機邏輯、狀態機及其他非結構化邏輯可交由布局工具的放置階段處理。

數據通路通常是並行處理多位且每位以相同方式被修改的設計區域，可能受相鄰位影響。數據通路示例包括加法器、減法器、計數器、寄存器和多路復用器。

### 放置

在開始放置優化前，會移除所有線負載模型（Wire Load Models，WLM）。放置使用來自虛擬路徑（Virtual Route，VR）的RC值來計算時序。VR是兩引腳間的最短曼哈頓距離。VR的RC比WLM的RC更精確。

放置分四個優化階段進行：

- 放置前優化（Pre-placement optimization）
- 放置中優化（In-placement optimization）
- 時鐘樹綜合（CTS）前的放置後優化（Post Placement Optimization，PPO）
- 時鐘樹綜合後的放置後優化
- 放置前優化對網表進行預優化。高扇出網（HFN）將被摺疊。也可對單元進行降級尺寸處理。
- 放置中優化基於VR重新優化邏輯。可執行單元尺寸調整、單元移動、單元旁路、網拆分、門複製、緩衝插入、面積回收。優化以修復建立時間為迭代目標，並結合增量時序與擁塞驅動放置。
- CTS前的放置後優化在理想時鐘下進行網表優化。可修復建立/保持問題及最大電容/電阻違規。可基於全局布線做放置優化，並重新進行高扇出網綜合。
- CTS後的放置後優化在傳播時鐘下優化時序，儘量保持時鐘偏斜。

### 時鐘樹綜合

<image>

<image>

時鐘樹綜合（Clock Tree Synthesis, CTS）的目標是最小化時鐘偏斜和插入延遲。時鐘在CTS前並不傳播。CTS後應改善保持裕量（hold slack）。時鐘樹起始於.sdc中定義的時鐘源，終止於觸發器的停止引腳（stop pins）。停止引腳分為ignore引腳和sync引腳兩類。前端（邏輯綜合）中標記為「不可觸碰」的電路和引腳，在後端（物理綜合）一般視為「忽略」電路或引腳。被標為ignore的引腳在時序分析中被忽略。如果時鐘被分割，需進行單獨的偏斜分析。

- 全局偏斜（global skew）在不考慮邏輯關係時，力求兩個同步引腳間零偏斜。
- 局部偏斜（local skew）在考慮邏輯關係時，力求兩個同步引腳間零偏斜。
- 有用偏斜（useful skew）指故意施加時鐘偏斜以改善建立裕量的情形。

在Astro中使用術語 rigidity 來表示約束的鬆弛程度。剛性越高表示約束越緊。

在時鐘樹優化（CTO）中，可對時鐘線進行屏蔽以避免噪聲耦合。但屏蔽會使面積增加約12-15%。由於時鐘信號的全局性，通常使用與電源布線相同的金屬層來布時鐘。CTO通過緩衝器尺寸調整、門尺寸調整、緩衝器重定位、層級調整和高扇出網合成來實現。我們在放置前、放置中及CTS前的放置後優化階段努力改善建立裕量，同時暫時忽略保持裕量。CTS後的放置後優化會改善保持裕量。CTS通常會添加大量緩衝器。大約每100k門級設計會增加約650個緩衝器。

### 布線

物理設計流程中有兩類布線：全局布線和詳細布線。全局布線分配用於連接的布線資源，且為具體網進行軌道分配。詳細布線執行實際連線。布線過程中需處理的約束包括 DRC、線長、時序等。

### 物理驗證

物理驗證檢查生成的版圖設計是否正確。包括驗證版圖是否：

- 符合所有工藝要求——設計規則檢查（Design Rule Checking, DRC）
- 與原始網表一致——版圖與原理圖比對（Layout vs. Schematic, LVS）
- 無天線效應——天線規則檢查（Antenna Rule Checking）
- 在全晶片級別進行密度驗證。對較小工藝節點，清潔密度驗證非常關鍵。
- 符合所有電氣要求——電氣規則檢查（Electrical Rule Checking, ERC）。

### 版圖後處理

版圖後處理，也稱為掩模數據準備，通常結束物理設計與驗證。它將物理版圖（多邊形）轉換為掩模數據（用於掩膜寫入器的指令）。該步驟包括：

- 晶片收尾，例如插入公司/晶片標識和最終結構（如封閉環、填充結構）。
- 生成帶測試圖案和對準標記的母版（reticle）布局。
- 版圖到掩模的準備，通過圖形操作擴展版圖數據（例如解析度增強技術，RET）並調整數據以適應掩模生產設備（掩模寫入器）。

## 相關

- 前道工序
- 後道工序
- 集成電路設計
- 布圖規劃、放置 (積體電路)、布線 (積體電路)