積體電路設計

積體電路設計（Integrated circuit design，簡稱 IC design），多直稱 IC 設計，根據當前積體電路的整合規模，亦可稱之為超大規模積體電路設計（VLSI design），是指以積體電路、超大規模積體電路為目標的設計流程。

概述

積體電路設計涉及對電子器件（例如電晶體、電阻器、電容器等）、器件間互連線模型的建立。所有的器件和互連線都需安置在一塊半導體襯底材料之上，這些元件透過半導體器件製造工藝（例如光刻等）安置在單一的矽襯底上，從而形成電路。目前最常使用的襯底材料是矽。設計人員會使用技術手段將矽襯底上各個器件之間相互電隔離，以控制整個晶片上各個器件之間的導電效能。PN 接面、金氧半導體場效電晶體等組成了積體電路器件的基礎結構，而由後者構成的互補式金氧半導體則憑藉其低靜態功耗、高整合度的優點成為數字積體電路中邏輯閘的基礎構造。設計人員需要考慮電晶體、互連線的能量耗散，這一點與以往由分立電子器件開始構建電路不同，這是因為積體電路的所有器件都整合在一塊矽片上。金屬互連線的電遷移以及靜電放電對於微晶片上的器件通常有害，因此也是積體電路設計需要關注的課題。

隨著積體電路的規模不斷增大，其整合度已經達到深亞微米級（特徵尺寸在 130 奈米以下），單個晶片整合的電晶體已經接近十億個。由於其極為複雜，積體電路設計相較簡單電路設計常常需要計算機輔助的設計方法學和技術手段。積體電路設計的研究範圍涵蓋了數字積體電路中數字邏輯的最佳化、網表實現，暫存器傳輸級硬體描述語言程式碼的書寫，邏輯功能的驗證、模擬和時序分析，電路在硬體中連線的分佈，模擬積體電路中運算放大器、電子濾波器等器件在晶片中的安置和混合訊號的處理。相關的研究還包括硬體設計的電子設計自動化（EDA）、計算機輔助設計（CAD）方法學等，是電機工程學和計算機工程的一個子集。

對於數字積體電路來說，設計人員現在更多的是站在高階抽象層面，即暫存器傳輸級甚至更高的系統級（有人也稱之為行為級），使用硬體描述語言或高階建模語言來描述電路的邏輯、時序功能，而邏輯綜合可以自動將暫存器傳輸級的硬體描述語言轉換為邏輯閘級的網表。對於簡單的電路，設計人員也可以用硬體描述語言直接描述邏輯閘和觸發器之間的連線情況。網表經過進一步的功能驗證、後端設計、佈局、佈線，可以產生用於工業製造的 GDSII 檔案，工廠根據該檔案就可以在晶圓上製造電路。模擬積體電路設計涉及了更加複雜的訊號環境，對工程師的經驗有更高的要求，並且其設計的自動化程度遠不及數字積體電路。

逐步完成功能設計之後，設計規則會指明哪些設計符合製造要求，而哪些設計不符合，而這個規則本身也十分複雜。積體電路設計流程需要符合數百條這樣的規則。在一定的設計約束下，積體電路物理版圖的佈局、佈線對於獲得理想速度、訊號完整性、減少芯片面積、減少晶片能耗來說至關重要。半導體器件製造的不可預測性使得積體電路設計的難度進一步提高。在積體電路設計領域，由於市場競爭的壓力，電子設計自動化等相關計算機輔助設計工具得到了廣泛的應用，工程師可以在計算機軟體的輔助下進行暫存器傳輸級設計、功能驗證、靜態時序分析、物理設計等流程。

抽象級別

積體電路設計通常是以 “模組” 作為設計的單位的。例如，對於多位全加器來說，其次級模組是一位的加法器，而加法器又是由下一級的與門、非門模組構成，與、非門最終可以分解為更低抽象級的 CMOS 器件。

從抽象級別來說，數字積體電路設計可以是自頂向下的，即先定義了系統最高邏輯層次的功能模組，根據頂層模組的需求來定義子模組，然後逐層繼續分解；設計也可以是自底向上的，即先分別設計最具體的各個模組，然後如同搭積木一般用這些最底層模組來實現上層模組，最終達到最高層次。在許多設計中，自頂向下、自底向上的設計方法學是混合使用的，系統級設計人員對整體體系結構進行規劃，並進行子模組的劃分，而底層的電路設計人員逐層向上設計、最佳化單獨的模組。最後，兩個方向的設計人員在中間某一抽象層次會合，完成整個設計。

硬體實現

對於不同的設計要求，工程師可以選擇使用半定製設計途徑，例如採用可程式設計邏輯器件（現場可程式設計邏輯閘陣列等）或基於標準單元庫的特殊應用積體電路來實現硬體電路；也可以使用全定製設計，控制電晶體版圖到系統結構的全部細節。

3.1 全定製設計

這種設計方式要求設計人員利用版圖編輯器來完成版圖設計、引數提取、單元表徵，然後利用這些自己設計的單元來完成電路的構建。通常，全定製設計是為了最大化最佳化電路效能。如果標準單元庫中缺少某種所需的單元，也需要採取全定製設計的方法完成所需的單元設計。不過，這種設計方式通常需要較長的時間。

3.2 半定製設計

與全定製設計相對的設計方式為半定製設計。簡而言之，半定製積體電路設計是基於預先設計好的某些邏輯單元。例如，設計人員可以在標準元件庫（通常可以從第三方購買）的基礎上設計專用積體電路，從中選取所需的邏輯單元（例如各種基本邏輯閘、觸發器等）來搭建所需的電路。他們也可以使用可程式設計邏輯器件來完成設計，這類器件的幾乎所有物理結構都已經固定在晶片之中，僅剩下某些連線可以由使用者程式設計決定其連線方式。與這些預先設計好的邏輯單元有關的效能引數通常也由其供應商提供，以方便設計人員進行時序、功耗分析。

3.2.1 可程式設計邏輯器件

可程式設計邏輯器件通常由半導體廠家提供商品晶片，這些晶片可以透過 JTAG 等方式和計算機連線，因此設計人員可以用電子設計自動化工具來完成設計，然後將利用設計程式碼來對邏輯晶片程式設計。可程式設計邏輯陣列晶片在出廠前就提前定義了邏輯閘構成的陣列，而邏輯閘之間的連線線路則可以透過程式設計來控制連線與斷開。隨著技術的發展，對連線線的程式設計可以透過 EPROM（利用較高壓電程式設計、紫外線照射擦除）、EEPROM（利用電訊號來多次程式設計和擦除）、SRAM、快閃記憶體等方式實現。現場可程式設計邏輯閘陣列是一種特殊的可程式設計邏輯器件，它的物理基礎是可配置邏輯單元，由查詢表、可程式設計多路選擇器、暫存器等結構組成。查詢表可以用來實現邏輯函式，如三個輸入端的查詢表可以實現所有三變數的邏輯函式。

3.2.2 專用積體電路

專用積體電路（ASIC）只能在整個積體電路設計完成之後才能開始製造，而且需要專業的半導體工廠的參與。專用積體電路可以是基於標準單元庫，也可以是全定製設計。在後一種途徑中，設計人員對於晶圓上元件的位置和連線有更多的控制權，而不像可程式設計邏輯器件途徑，只能選擇使用其中部分硬體資源，從而造成部分資源被浪費。專用積體電路的面積、功耗、時序特性通常可以得到更好的最佳化。然而，專用積體電路的設計會更加複雜，並且需要專門的工藝製造部門（或者外包給晶圓代工廠）才能將 GDSII 檔案製造成電路。一旦專用積體電路晶片製造完成，就不能像可程式設計邏輯器件那樣對電路的邏輯功能進行重新配置。對於單個產品，在專用積體電路上實現積體電路的經濟、時間成本都比可程式設計邏輯器件高，因此在早期的設計與除錯過程中，常用可程式設計邏輯器件，尤其是現場可程式設計邏輯閘陣列；如果所設計的積體電路將要在後期大量投產，那麼批次生產專用積體電路將會更經濟。

設計流程

積體電路設計可以大致分為數字積體電路設計和模擬積體電路設計兩大類。不過，實際的積體電路還有可能是混合訊號積體電路，因此不少電路的設計同時用到這兩種流程。

4.1 模擬積體電路

積體電路設計的另一個大分支是模擬積體電路設計，這一分支通常關注電源積體電路、射頻積體電路等。由於現實世界的訊號是模擬的，所以，在電子產品中，模 - 數、數 - 模相互轉換的積體電路也有著廣泛的應用。模擬積體電路包括運算放大器、線性整流器、鎖相環、振盪電路、等。相較數字積體電路設計，模擬積體電路設計與半導體器件的物理性質有著更大的關聯，例如其增益、電路匹配、功率耗散以及阻抗等等。模擬訊號的放大和濾波要求電路對訊號具備一定的保真度，因此模擬積體電路比數字積體電路使用了更多的大面積器件，整合度亦相對較低。

在微處理器和計算機輔助設計方法出現前，模擬積體電路完全採用人工設計的方法。由於人處理複雜問題的能力有限，因此當時的模擬積體電路通常是較為基本的電路，運算放大器積體電路就是一個典型的例子。在當時的情況下，這樣的積體電路可能會涉及十幾個電晶體以及它們之間的互連線。為了使模擬積體電路的設計能達到工業生產的級別，工程師需要採取多次迭代的方法以測試、排除故障。重複利用已經設計、驗證的設計，可以進一步構成更加複雜的積體電路。1970 年代之後，計算機的價格逐漸下降，越來越多的工程師可以利用這種現代的工具來輔助設計，例如，他們使用編好的計算機程式進行模擬，便可獲得比之前人工計算、設計更高的精確度。SPICE 是第一款針對模擬積體電路模擬的軟體（事實上，數字積體電路中標準單元本身的設計，也需要用到 SPICE 來進行引數測試），其字面意思是 “以積體電路為重點的模擬程式（Simulation Program with Integrated Circuit Emphasis）” 。基於計算機輔助設計的電路模擬工具能夠適應更加複雜的現代積體電路，特別是專用積體電路。使用計算機進行模擬，還可以使專案設計中的一些錯誤在硬體製造之前就被發現，從而減少因為反覆測試、排除故障造成的大量成本。此外，計算機往往能夠完成一些極端複雜、繁瑣，人類無法勝任的任務，使得諸如蒙地卡羅方法等成為可能。實際硬體電路會遇到的與理想情況不一致的偏差，例如溫度偏差、器件中半導體摻雜濃度偏差，計算機模擬工具同樣可以進行模擬和處理。總之，計算機化的電路設計、模擬能夠使電路設計效能更佳，而且其可製造性可以得到更大的保障。儘管如此，相對數字積體電路，模擬積體電路的設計對工程師的經驗、權衡矛盾等方面的能力要求更嚴格。

4.2 數字積體電路

粗略地說，數字積體電路可以分為以下基本步驟：系統定義、暫存器傳輸級設計、物理設計。而根據邏輯的抽象級別，設計又分為系統行為級、暫存器傳輸級、邏輯閘級。設計人員需要合理地書寫功能程式碼、設定綜合工具、驗證邏輯時序效能、規劃物理設計策略等等。在設計過程中的特定時間點，還需要多次進行邏輯功能、時序約束、設計規則方面的檢查、除錯，以確保設計的最終成果合乎最初的設計收斂目標。

4.2.1 系統定義

系統定義是進行積體電路設計的最初規劃，在此階段設計人員需要考慮系統的宏觀功能。設計人員可能會使用一些高抽象級建模語言和工具來完成硬體的描述，例如 C 語言、C++、SystemC、SystemVerilog 等事務級建模語言，以及 Simulink 和 MATLAB 等工具對訊號進行建模。儘管目前的主流是以暫存器傳輸級設計為中心，但已有一些直接從系統級描述向低抽象級描述（如邏輯閘級結構描述）轉化的高階綜合（或稱行為級綜合）、高階驗證工具正處於發展階段。

系統定義階段，設計人員還對晶片預期的工藝、功耗、時脈頻率、工作溫度等效能指標進行規劃。

4.2.2 暫存器傳輸級設計

目前的積體電路設計常常在暫存器傳輸級上進行，利用硬體描述語言來描述數字積體電路的訊號儲存以及訊號在暫存器、儲存器、組合邏輯裝置和匯流排等邏輯單元之間傳輸的情況。在設計暫存器傳輸級程式碼時，設計人員會將系統定義轉換為暫存器傳輸級的描述。設計人員在這一抽象層次最常使用的兩種硬體描述語言是 Verilog、VHDL，二者分別於 1995 年和 1987 年由電氣電子工程師學會（IEEE）標準化。正由於有著硬體描述語言，設計人員可以把更多的精力放在功能的實現上，這比以往直接設計邏輯閘級連線的方法學（使用硬體描述語言仍然可以直接設計門級網表，但是少有人如此工作）具有更高的效率。

4.2.3 驗證

設計人員完成暫存器傳輸級設計之後，會利用測試平臺、斷言等方式來進行功能驗證，檢驗專案設計是否與之前的功能定義相符，如果有誤，則需要檢測之前設計檔案中存在的漏洞。現代超大規模積體電路的整個設計過程中，驗證所需的時間和精力越來越多，甚至都超過了暫存器傳輸級設計本身，人們設定些專門針對驗證開發了新的工具和語言。

例如，要實現簡單的加法器或者更加複雜的算術邏輯單元，或利用觸發器實現有限狀態機，設計人員可能會編寫不同規模的硬體描述語言程式碼。功能驗證是項複雜的任務，驗證人員需要為待測設計建立一個虛擬的外部環境，為待測設計提供輸入訊號（這種人為新增的訊號常用 “激勵” 這個術語來表示），然後觀察待測設計輸出埠的功能是否合乎設計規範。

當所設計的電路並非簡單的幾個輸入埠、輸出埠時，由於驗證需要儘可能地考慮到所有的輸入情況，因此對於激勵訊號的定義會變得更加複雜。有時工程師會使用某些指令碼語言（如 Perl、Tcl）來編寫驗證程式，藉助計算機程式的高速處理來實現更大的測試覆蓋率。現代的硬體驗證語言可以提供一些專門針對驗證的特性，例如帶有約束的隨機化變數、覆蓋等等。作為硬體設計、驗證統一語言，SystemVerilog 是以 Verilog 為基礎發展而來的，因此它同時具備了設計的特性和測試平臺的特性，並引入了面向物件程式設計的思想，因此測試平臺的編寫更加接近軟體測試。諸如通用驗證方法學的標準化驗證平臺開發框架也得到了主流電子設計自動化軟體廠商的支援。針對高階綜合，關於高階驗證的電子設計自動化工具也處於研究中。

4.2.4 邏輯綜合

工程師設計的硬體描述語言程式碼一般是暫存器傳輸級的，在進行物理設計之前，需要使用邏輯綜合工具將暫存器傳輸級程式碼轉換到針對特定工藝的邏輯閘級網表，並完成邏輯化簡。

和人工進行邏輯最佳化需要藉助卡諾圖等類似，電子設計自動化工具來完成邏輯綜合也需要特定的演算法（如奎因－麥克拉斯基演算法等）來化簡設計人員定義的邏輯函式。輸入到自動綜合工具中的檔案包括暫存器傳輸級硬體描述語言程式碼、工藝庫（可以由第三方晶圓代工服務機構提供）、設計約束檔案三大類，這些檔案在不同的電子設計自動化工具套件系統中的格式可能不盡相同。邏輯綜合工具會產生一個最佳化後的門級網表，但是這個網表仍然是基於硬體描述語言的，這個網表在半導體晶片中的走線將在物理設計中來完成。

選擇不同器件（如專用積體電路或者現場可程式設計門陣列等）對應的工藝庫來進行邏輯綜合，或者在綜合時設定了不同的約束策略，將產生不同的綜合結果。暫存器傳輸級程式碼對於設計專案的邏計劃分、語言結構風格等因素會影響綜合後網表的效率。

目前大多數成熟的綜合工具大多數是基於暫存器傳輸級描述的，而基於系統級描述的高階綜合工具還處在發展階段。

4.2.5 等效性檢查

為了比較門級網表和暫存器傳輸級的等效性，可以透過生成諸如不二可滿足性、二元決策圖等途徑來完成形式等效性檢查（形式驗證）。實際上，等效性檢查還可以檢查兩個暫存器傳輸級設計之間，或者兩個門級網表之間的邏輯等效性。

4.2.6 時序分析

現代積體電路的時鐘頻率已經到達了兆赫茲級別，而大量模組內、模組之間的時序關係極其複雜，因此，除了需要驗證電路的邏輯功能，還需要進行時序分析，即對訊號在傳輸路徑上的延遲進行檢查，判斷其是否符合時序收斂要求。時序分析所需的邏輯閘標準延遲格式資訊可以由標準單元庫（或從使用者自己設計的單元從提取的時序資訊）提供。隨著電路特徵尺寸不斷減小，互連線延遲在實際的總延時中所佔的比例愈加顯著，因此在物理設計完成之後，把互連線的延遲納入考慮，才能夠精準地進行時序分析。

4.2.7 物理設計

邏輯綜合完成之後，透過引入器件製造公司提供的工藝資訊，前面完成的設計將進入布圖規劃、佈局、佈線階段，工程人員需要根據延遲、功耗、面積等方面的約束資訊，合理設定物理設計工具的引數，不斷除錯，以獲取最佳的配置，從而決定元件在晶圓上的物理位置。如果是全定製設計，工程師還需要精心繪製單元的積體電路版圖，調整電晶體尺寸，從而降低功耗、延時。

隨著現代積體電路的特徵尺寸不斷下降，超大規模積體電路已經進入深亞微米級階段，互連線延遲對電路效能的影響已經達到甚至超過邏輯閘延遲的影響。這時，需要考慮的因素包括線網的電容效應和線網電感效應，晶片內部電源線上大電流線上網電阻上造成的電壓降也會影響積體電路的穩定性。為了解決這些問題，同時緩解時鐘偏移、時鐘樹寄生引數的負面影響，合理的佈局佈線和邏輯設計、功能驗證等過程同等重要。隨著移動裝置的發展，低功耗設計在積體電路設計中的地位愈加顯著。在物理設計階段，設計可以轉化成幾何圖形的表示方法，工業界有若干標準化的檔案格式（如 GDSII）予以規範。

值得注意的是，電路實現的功能在之前的暫存器傳輸級設計中就已經確定。在物理設計階段，工程師不僅不能夠讓之前設計好的邏輯、時序功能在該階段的設計中被損壞，還要進一步最佳化晶片按照正確執行時的延遲時間、功耗、面積等方面的效能。在物理設計產生了初步版圖檔案之後，工程師需要再次對積體電路進行功能、時序、設計規則、訊號完整性等方面的驗證，以確保物理設計產生正確的硬體版圖檔案。

4.2.8 後續：具體的工藝製造

半導體制造工廠根據物理設計最後完成、已經透過各項檢查後生成的標準化 GDSII 檔案，即可製造出實際的物理電路。

這個步驟不再屬於積體電路設計和計算機工程的範疇，而是直接進入半導體制造工藝領域，關注的重心亦轉向具體的材料、器件製作，例如光刻、刻蝕、物理氣相沉積、化學氣相沉積等。

傳統的積體電路公司能夠同時完成積體電路設計和積體電路製造。由於積體電路製造所需的裝置、原料耗資巨大，因此一般的公司根本無力承受。一旦發生工藝節點的改變（如從 65 奈米工藝進步到 45 奈米工藝），公司可能需要花費相當高的成本來更換現有工藝裝置，這給許多公司帶來了相當沉重的經濟負擔）。現在，有些公司逐漸放棄既設計、又製造的模式，業務範圍縮小至設計、驗證本身，而將具體的半導體工藝流程，委託給專門進行積體電路製造的工廠。上述無製造工藝（fabless），只進行設計、驗證公司被稱為無廠半導體公司，典型的例子包括高通（Qualcomm）、超微半導體（AMD）、英偉達（NVIDIA）等；而專門負責製造的公司則被稱為晶圓代工廠，典型的例子包括臺積電（TSMC）、格羅方德（GlobalFoundries，前身為 AMD 的直屬工藝廠）等。某些公司在從事設計的同時，還保留了自己的工藝廠，這樣的公司包括英特爾、三星電子等。還有一類特殊的無廠半導體公司，它們把設計專案以 IP 核的形式封裝起來，作為商品銷售給其他無廠半導體公司，典型的例子包括 ARM 公司。

可測試性設計

隨著超大規模積體電路的複雜程度不斷提高，電路製造後的測試所需的時間和經濟成本也不斷增加。以往，人們將絕大多數精力放在設計本身，而並不考慮之後的測試，因為那時的測試相對今天更為簡單。近年來，測試本身也逐漸成為一個龐大的課題。

比如，從電路外部控制某些內部訊號使得它們呈現特定的邏輯值比較容易，而某些內部訊號由於依賴大量其它內部訊號，從外部很難直接改變它們的數值。此外，內部訊號的改變很多時候不能在主輸出端觀測（有時主輸出端的訊號輸出看似正確，其實內部狀態是錯誤的，僅觀測主輸出端的輸出不足以判斷電路是否正常工作）。以上兩類問題，即可控制性和可觀測性，是可測試性的兩大組成部分。

人們逐漸發現，電路在設計時向電路新增一些特殊的結構（例如掃描鏈和內建自測試），能夠大大方便之後的電路測試。這樣的設計被即為可測試性設計，它們使電路更加複雜，但是卻能憑藉更簡捷的測試降低整個專案的成本。

重用

隨著超大規模積體電路的整合難度不斷提高，同時市場競爭壓力不斷增加，積體電路設計逐漸引入了可重用設計方法學。

可重用設計方法學的主要意義在於提供 IP 核（智慧財產權核）的供應商可以將一些已預先完成之設計以商品的形式提供給設計方，後者可以將 IP 核作為一個完整的模組在自己的設計專案中使用。由此，在實現類似功能時，各個公司就不需反覆設計類似模組。這樣做雖會提高商業成本，但亦顯著降低了設計的複雜程度，從而縮短設計大型電路所需的時間週期並提高市場競爭力。

IP 核供應商提供的產品可能是已驗證的硬體描述語言程式碼，為了保護供應商的智慧財產權，這些程式碼大多是加密的。IP 核本身也是作為積體電路進行設計，但是它為了在不同設計專案中能夠得到應用，會重點強化其可移植性，因此它的設計程式碼規範更加嚴格。有的晶片公司專門從事 IP 核的開發和銷售，ARM 就是一個典型的例子，這些公司透過智慧財產權的授權營利。

輔助和自動化

由於積體電路系統的複雜性，工程師往往需要藉助電子設計自動化工具來進行計算機輔助設計。邏輯綜合就是電子設計自動化在數字積體電路設計中最顯著的體現。以往在設計小規模、中規模積體電路時，工程師設計數字積體電路需要根據邏輯功能，透過類似卡諾圖這樣的手工途徑來最佳化邏輯函式，然後確定使用何種邏輯閘來實現電路。而在當前超大規模積體電路，乃至更大的甚大規模積體電路的設計中，這樣的工作方式不太現實。電子設計自動化工具使得工程師能夠從複雜的邏輯閘設計轉到功能設計，而底層的轉換由自動工具完成，工程師只需要掌握如何設定這些工具工作策略的知識。硬體描述語言是積體電路設計自動化的重要基礎。電子設計自動化發展十分迅速，現在已經成立了諸如的一些學術論壇，定期討論業界的發展。

完成整個積體電路設計常常涉及多個電子設計自動化工具的運用。有些公司專門從事積體電路計算機輔助設計工具套件的開發和銷售，例如 Synopsys、Cadence、Mentor Graphics、Agilent、Altium、Xilinx 等。電子設計自動化工具的本身作為一種軟體，背後依靠的是各種計算機演算法。因此電子設計自動化工具的開發更加接近軟體設計的範疇，其開發人員需要重點關注邏輯簡化、佈局佈線等方面的演算法實現，但是他們同樣需要了解積體電路的硬體知識。