集成电路设计

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

概述

積體電路設計涉及對電子器件（例如電晶體、電阻器、電容器等）、器件間互連線模型的建立。所有的器件和互連線都需安置在一塊半導體基板材料之上，這些元件通過半導體器件製造製程（例如光刻等）安置在單一的矽基板上，從而形成電路。目前最常使用的基板材料是矽。設計人員會使用技術手段將矽基板上各個器件之間相互電隔離，以控制整個晶片上各個器件之間的導電效能。PN接面、金屬氧化物半導體場效電晶體等組成了積體電路器件的基礎結構，而由後者構成的互補式金屬氧化物半導體則憑藉其低靜態功耗、高整合度的優點成為數位積體電路中邏輯閘的基礎構造。設計人員需要考慮電晶體、互連線的能量耗散，這一點與以往由分立電子器件開始構建電路不同，這是因為積體電路的所有器件都整合在一塊矽片上。金屬互連線的電遷移以及靜電放電對於微晶片上的器件通常有害，因此也是積體電路設計需要關注的課題。
隨著積體電路的規模不斷增大，其整合度已經達到深亞微米級（特徵尺寸在130奈米以下），單個晶片整合的電晶體已經接近十億個。由於其極為複雜，積體電路設計相較簡單電路設計常常需要電腦輔助的設計方法學和技術手段。積體電路設計的研究範圍涵蓋了數位積體電路中數位邏輯的最佳化、網表實現，暫存器傳輸級硬體描述語言程式碼的書寫，邏輯功能的驗證、仿真和時序分析，電路在硬體中連線的分布，類比積體電路中運算放大器、電子濾波器等器件在晶片中的安置和混合訊號的處理。相關的研究還包括硬體設計的電子設計自動化（EDA）、電腦輔助設計（CAD）方法學等，是電機工程學和電腦工程的一個子集。
對於數位積體電路來說，設計人員現在更多的是站在進階抽象層面，即暫存器傳輸級甚至更高的系統級（有人也稱之為行為級），使用硬體描述語言或進階建模語言來描述電路的邏輯、時序功能，而邏輯綜合可以自動將暫存器傳輸級的硬體描述語言轉換為邏輯閘級的網表。對於簡單的電路，設計人員也可以用硬體描述語言直接描述邏輯閘和正反器之間的連接情況。網表經過進一步的功能驗證、布局、布線，可以產生用於工業製造的GDSII檔案，工廠根據該檔案就可以在晶圓上製造電路。類比積體電路設計涉及了更加複雜的訊號環境，對工程師的經驗有更高的要求，並且其設計的自動化程度遠不及數位積體電路。
逐步完成功能設計之後，設計規則會指明哪些設計符合製造要求，而哪些設計不符合，而這個規則本身也十分複雜。積體電路設計流程需要符合數百條這樣的規則。在一定的設計約束下，積體電路物理版圖的布局、布線對於獲得理想速度、訊號完整性、減少晶片面積來說至關重要。半導體器件製造的不可預測性使得積體電路設計的難度進一步提高。在積體電路設計領域，由於市場競爭的壓力，電子設計自動化等相關電腦輔助設計工具得到了廣泛的應用，工程師可以在電腦軟體的輔助下進行暫存器傳輸級設計、功能驗證、靜態時序分析、物理設計等流程。

設計的抽象級別

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

硬體實現

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

全客製化設計

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

半客製化設計

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

可程式化邏輯裝置

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

特殊應用積體電路

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

設計流程

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

類比積體電路

積體電路設計的另一個大分支是類比積體電路設計，這一分支通常關注電源積體電路、射頻積體電路等。由於現實世界的訊號是類比的，所以，在電子產品中，類比-數位、數位-類比相互轉換的積體電路也有著廣泛的應用。類比積體電路包括運算放大器、線性整流器、鎖相環、振盪電路、主動濾波器等。相較數位積體電路設計，類比積體電路設計與半導體器件的物理性質有著更大的關聯，例如其增益、電路符合、功率耗散以及阻抗等等。類比訊號的放大和濾波要求電路對訊號具備一定的保真度，因此類比積體電路比數位積體電路使用了更多的大面積器件，整合度亦相對較低。
在微處理器和電腦輔助設計方法出現前，類比積體電路完全採用人工設計的方法。由於人處理複雜問題的能力有限，因此當時的類比積體電路通常是較為基本的電路，運算放大器積體電路就是一個典型的例子。在當時的情況下，這樣的積體電路可能會涉及十幾個電晶體以及它們之間的互連線。為了使類比積體電路的設計能達到工業生產的級別，工程師需要採取多次疊代的方法以測試、排除故障。重複利用已經設計、驗證的設計，可以進一步構成更加複雜的積體電路。1970年代之後，電腦的價格逐漸下降，越來越多的工程師可以利用這種現代的工具來輔助設計，例如，他們使用編好的電腦程式進行仿真，便可獲得比之前人工計算、設計更高的精確度。SPICE是第一款針對類比積體電路仿真的軟體（事實上，數位積體電路中標準單元本身的設計，也需要用到SPICE來進行參數測試），其字面意思是「以積體電路為重點的仿真程式（英語：Simulation Program with Integrated Circuit Emphasis）」 。基於電腦輔助設計的電路仿真工具能夠適應更加複雜的現代積體電路，特別是特殊應用積體電路。使用電腦進行仿真，還可以使專案設計中的一些錯誤在硬體製造之前就被發現，從而減少因為反覆測試、排除故障造成的大量成本。此外，電腦往往能夠完成一些極端複雜、繁瑣，人類無法勝任的任務，使得諸如蒙地卡羅方法等成為可能。實際硬體電路會遇到的與理想情況不一致的偏差，例如溫度偏差、器件中半導體摻雜濃度偏差，電腦仿真工具同樣可以進行類比和處理。總之，電腦化的電路設計、仿真能夠使電路設計效能更佳，而且其可製造性可以得到更大的保障。儘管如此，相對數位積體電路，類比積體電路的設計對工程師的經驗、權衡矛盾等方面的能力要求更嚴格。

數位積體電路

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

系統定義

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

暫存器傳輸級設計

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

設計驗證

設計人員完成暫存器傳輸級設計之後，會利用測試平台、斷言等方式來進行功能驗證，檢驗專案設計是否與之前的功能定義相符，如果有誤，則需要檢測之前設計檔案中存在的漏洞。現代超大型積體電路的整個設計過程中，驗證所需的時間和精力越來越多，甚至都超過了暫存器傳輸級設計本身，人們設定些專門針對驗證開發了新的工具和語言。
例如，要實現簡單的加法器或者更加複雜的算術邏輯單元，或利用正反器實現有限狀態機，設計人員可能會編寫不同規模的硬體描述語言程式碼。功能驗證是項複雜的任務，驗證人員需要為待測設計建立一個虛擬的外部環境，為待測設計提供輸入訊號（這種人為添加的訊號常用「激勵」這個術語來表示），然後觀察待測設計輸出埠的功能是否合乎設計規範。
當所設計的電路並非簡單的幾個輸入埠、輸出埠時，由於驗證需要儘可能地考慮到所有的輸入情況，因此對於激勵訊號的定義會變得更加複雜。有時工程師會使用某些手稿語言（如Perl、Tcl）來編寫驗證程式，藉助電腦程式的高速處理來實現更大的測試覆蓋率。現代的硬體驗證語言可以提供一些專門針對驗證的特性，例如帶有約束的隨機化變數、覆蓋等等。作為硬體設計、驗證統一語言，SystemVerilog是以Verilog為基礎發展而來的，因此它同時具備了設計的特性和測試平台的特性，並引入了物件導向程式設計的思想，因此測試平台的編寫更加接近軟體測試。諸如通用驗證方法學的標準化驗證平台開發框架也得到了主流電子設計自動化軟體廠商的支援。針對進階綜合，關於進階驗證的電子設計自動化工具也處於研究中。

邏輯綜合

工程師設計的硬體描述語言程式碼一般是暫存器傳輸級的，在進行物理設計之前，需要使用邏輯綜合工具將暫存器傳輸級程式碼轉換到針對特定製程的邏輯閘級網表，並完成邏輯化簡。
和人工進行邏輯最佳化需要藉助卡諾圖等類似，電子設計自動化工具來完成邏輯綜合也需要特定的演算法（如奎因－麥克拉斯基演算法等）來化簡設計人員定義的邏輯函式。輸入到自動綜合工具中的檔案包括暫存器傳輸級硬體描述語言程式碼、製程庫（可以由第三方晶圓代工服務機構提供）、設計約束檔案三大類，這些檔案在不同的電子設計自動化工具套件系統中的格式可能不盡相同。邏輯綜合工具會產生一個最佳化後的門級網表，但是這個網表仍然是基於硬體描述語言的，這個網表在半導體晶片中的走線將在物理設計中來完成。
選擇不同器件（如特殊應用積體電路或者現場可程式化門陣列等）對應的製程庫來進行邏輯綜合，或者在綜合時設定了不同的約束策略，將產生不同的綜合結果。暫存器傳輸級程式碼對於設計專案的邏計劃分、語言結構風格等因素會影響綜合後網表的效率。
目前大多數成熟的綜合工具大多數是基於暫存器傳輸級描述的，而基於系統級描述的進階綜合工具還處在發展階段。

等效性檢查

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

時序分析

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

物理設計

邏輯綜合完成之後，通過引入器件製造公司提供的製程資訊，前面完成的設計將進入布圖規劃、布局、布線階段，工程人員需要根據延遲、功耗、面積等方面的約束資訊，合理設定物理設計工具的參數，不斷除錯，以取得最佳的組態，從而決定元件在晶圓上的物理位置。如果是全客製化設計，工程師還需要精心繪製單元的積體電路版圖，調整電晶體尺寸，從而降低功耗、延時。
隨著現代積體電路的特徵尺寸不斷下降，超大型積體電路已經進入深亞微米級階段，互連線延遲對電路效能的影響已經達到甚至超過邏輯閘延遲的影響。這時，需要考慮的因素包括線網的電容效應和線網電感效應，晶片內部電源線上大電流線上網電阻上造成的電壓降也會影響積體電路的穩定性。為了解決這些問題，同時緩解時鐘偏移、時鐘樹寄生參數的負面影響，合理的布局布線和邏輯設計、功能驗證等過程同等重要。隨著行動裝置的發展，低功耗設計在積體電路設計中的地位愈加顯著。在物理設計階段，設計可以轉化成幾何圖形的表示方法，工業界有若干標準化的檔案格式（如GDSII）予以規範。
值得注意的是，電路實現的功能在之前的暫存器傳輸級設計中就已經確定。在物理設計階段，工程師不僅不能夠讓之前設計好的邏輯、時序功能在該階段的設計中被損壞，還要進一步最佳化晶片按照正確執行時的延遲時間、功耗、面積等方面的效能。在物理設計產生了初步版圖檔案之後，工程師需要再次對積體電路進行功能、時序、設計規則、訊號完整性等方面的驗證，以確保物理設計產生正確的硬體版圖檔案。

後續：具體的製程製造

半導體製造工廠根據物理設計最後完成、已經通過各項檢查後生成的標準化GDSII檔案，即可製造出實際的物理電路。
這個步驟不再屬於積體電路設計和電腦工程的範疇，而是直接進入半導體製造製程領域，關注的重心亦轉向具體的材料、器件製作，例如光刻、蝕刻、物理氣相沉積、化學氣相沉積等。
傳統的積體電路公司能夠同時完成積體電路設計和積體電路製造。由於積體電路製造所需的裝置、原料耗資巨大，因此一般的公司根本無力承受。一旦發生製程節點的改變（如從65奈米製程進步到45奈米製程），公司可能需要花費相當高的成本來更換現有製程裝置，這給許多公司帶來了相當沉重的經濟負擔）。現在，有些公司逐漸放棄既設計、又製造的模式，業務範圍縮小至設計、驗證本身，而將具體的半導體製程流程，委託給專門進行積體電路製造的工廠。上述無製造製程（fabless），只進行設計、驗證公司被稱為無廠半導體公司，典型的例子包括高通（Qualcomm）、超微半導體（AMD）、輝達（NVIDIA）等；而專門負責製造的公司則被稱為晶圓代工廠，典型的例子包括台積電（TSMC）、格羅方德（GlobalFoundries，前身為AMD的直屬製程廠）等。某些公司在從事設計的同時，還保留了自己的製程廠，這樣的公司包括英特爾、三星電子等。還有一類特殊的無廠半導體公司，它們把設計專案以矽智財的形式封裝起來，作為商品銷售給其他無廠半導體公司，典型的例子包括ARM公司。

可測試性設計

隨著超大型積體電路的複雜程度不斷提高，電路製造後的測試所需的時間和經濟成本也不斷增加。以往，人們將絕大多數精力放在設計本身，而並不考慮之後的測試，因為那時的測試相對今天更為簡單。近年來，測試本身也逐漸成為一個龐大的課題。
比如，從電路外部控制某些內部訊號使得它們呈現特定的邏輯值比較容易，而某些內部訊號由於依賴大量其它內部訊號，從外部很難直接改變它們的數值。此外，內部訊號的改變很多時候不能在主輸出端觀測（有時主輸出端的訊號輸出看似正確，其實內部狀態是錯誤的，僅觀測主輸出端的輸出不足以判斷電路是否正常工作）。以上兩類問題，即可控制性和可觀測性，是可測試性的兩大組成部分。
人們逐漸發現，電路在設計時向電路添加一些特殊的結構（例如掃描鏈和內建自測試），能夠大大方便之後的電路測試。這樣的設計被即為可測試性設計，它們使電路更加複雜，但是卻能憑藉更簡捷的測試降低整個專案的成本。

設計的重用

隨著超大型積體電路的整合度不斷提高，同時市場競爭壓力的不斷增加，積體電路設計逐漸引入了可重用設計方法學。可重用設計方法學的主要意義在於，提供矽智財（智慧財產權核）的供應商可以將一些已經預先完成的設計以商品的形式提供給設計方，後者可以將矽智財作為一個完整的模組在自己的設計專案中使用。由此，在實現類似功能時，各個公司就不需反覆設計類似模組。這樣做雖會提高商業成本，但亦顯著降低了設計的複雜程度，從而縮短公司在設計大型電路所需的周期，從而提高市場競爭力。矽智財供應商提供的產品可能是已驗證的硬體描述語言程式碼，為了保護供應商的智慧財產權，這些程式碼很多時候是加密的。矽智財本身也是作為積體電路進行設計，但是它為了在不同設計專案中能夠得到應用，會重點強化其可移植性，因此它的設計程式碼規範更加嚴格。有的晶片公司專門從事矽智財的開發和銷售，ARM就是一個典型的例子，這些公司通過智慧財產權的授權營利。

設計的輔助和自動化

由於積體電路系統的複雜性，工程師往往需要藉助電子設計自動化工具來進行電腦輔助設計。邏輯綜合就是電子設計自動化在數位積體電路設計中最顯著的體現。以往在設計小規模、中規模積體電路時，工程師設計數位積體電路需要根據邏輯功能，通過類似卡諾圖這樣的手工途徑來最佳化邏輯函式，然後確定使用何種邏輯閘來實現電路。而在目前超大型積體電路，乃至更大的甚大型積體電路的設計中，這樣的工作方式不太現實。電子設計自動化工具使得工程師能夠從複雜的邏輯閘設計轉到功能設計，而底層的轉換由自動工具完成，工程師只需要掌握如何設定這些工具工作策略的知識。硬體描述語言是積體電路設計自動化的重要基礎。電子設計自動化發展十分迅速，現在已經成立了諸如設計自動化會議的一些學術論壇，定期討論業界的發展。
完成整個積體電路設計常常涉及多個電子設計自動化工具的運用。有些公司專門從事積體電路電腦輔助設計工具套件的開發和銷售，例如Synopsys、Cadence、Mentor Graphics、Agilent、Altium、Xilinx等。電子設計自動化工具的本身作為一種軟體，背後依靠的是各種電腦演算法。因此電子設計自動化工具的開發更加接近軟體設計的範疇，其開發人員需要重點關注邏輯簡化、布局布線等方面的演算法實現，但是他們同樣需要了解積體電路的硬體知識。