為什麼類比佈局是手藝活
在實體設計的學習線裡,你看著工具擺放並連接上百萬個 CMOS 閘,而你大體上只是在掌舵。數位佈局之所以能自動化,是因為邏輯閘只需要*正確*——一根線長一點、一個電晶體寬一點,0 還是 0。類比電路沒有這樣的緩衝墊。沒有乾淨的 0/1 可以讓它彈回去;每一個電壓和電流都是連續的,而電路的行為依賴於本應完全相同的元件之間那些極細微的差異。正因如此,類比佈局至今仍主要是手工完成的,一個一個精心繪製的圖形。
可以這樣理解。在數位裡,佈局是一種*謄寫*——把網表轉成幾何圖形,含義就保留下來了。在類比裡,佈局*本身就是設計的一部分*。一個在原理圖上完美的 差動對 可能僅僅因為兩個電晶體畫的朝向不同,或者其中一個離一個發熱的功率電晶體更近,就在矽片上失效。原理圖捕捉的是意圖;佈局才決定物理是否會兌現這個意圖。同一份網表的兩種佈局,其失調、雜訊和增益可以天差地別。
這篇指南與實體設計學習線裡的 佈局繞線 流程首尾呼應。兩套技能是表親——都是把電路變成矽片上的幾何圖形——但優先順序正好顛倒。數位最佳化的是上百萬個單元的面積、速度和可繞線性。類比最佳化的是幾十個極度敏感的元件之間的匹配、對稱,以及擺脫寄生效應和雜訊。同樣的 寄生參數萃取 這一步,在數位裡是給簽核做後盾,而在類比裡,它是你發現自己手繪的手藝有沒有經受住與現實碰撞的地方。
匹配:靠結構做到一模一樣
類比電路正確性中很大一部分都建立在一個理念上:兩個元件表現得一模一樣。一個 電流鏡 複製電流時的忠實程度,只取決於它的兩個 MOSFET 匹配得有多好。一個 差動對 抑制共模雜訊的能力,也只取決於它的兩半有多像一對雙胞胎。但任何兩個物理上分開的 電晶體 都不可能真正完全相同——蝕刻步驟在晶圓上各處不一、摻雜會漂移、氧化層厚度會有零點幾奈米的游移。這些隨機差異表現為失配:一個頑固的輸入失調電壓,或者一個偏差了 2% 的電流拷貝。
這裡有類比佈局中最重要的一個量化事實:元件越大,隨機失配越小。 在更大的面積上做平均,隨機的局部變化會部分相互抵消。標準模型(Pelgrom 定律)告訴我們,失配的標準差與元件閘極面積的平方根成反比:
# Pelgrom mismatch model — random Vth mismatch vs device area sigma(dVth) = A_Vth / sqrt(W * L) # A_Vth ~ a few mV*um per node # Doubling BOTH W and L (4x the area) halves the mismatch sigma: sigma2 / sigma1 = sqrt( (W*L) / (4*W*L) ) = 1/2
共質心與虛擬元件
隨機失配你用面積去對抗。系統性失配——橫跨整個晶片的溫度、氧化層厚度或機械應力的平滑梯度——你用*幾何*去對抗。訣竅是 共質心佈局:與其把要匹配的元件 A 放左邊、元件 B 放右邊(這樣任何從左到右的梯度都會不均等地作用於它們),不如把每個元件拆成若干塊並交錯排布,讓兩者共享完全相同的質心。對於由電晶體 A 和 B 構成的 差動對,經典的排布是把每個都拆成兩塊,圍繞一個公共中心擺成交叉耦合的 ABBA / BAAB 棋盤格——這樣一條線性梯度給 A 的平均值增加的量,與給 B 的增加的量相同,於是電路真正放大的那個*差值*保持乾淨。這相當於佈局版本的兩個賽跑者共用一條跑道,讓逆風把兩人減速得一樣多。
# Common-centroid 2x2 array: A and B share one centroid # col1 col2 # [ A ][ B ] <- a linear left->right gradient g adds: # [ B ][ A ] A_total = A + (0) + A + (g) ~ B_total: difference cancels # # vs. a NON-centroid layout [A][A][B][B], where B sees the full gradient g # and a fixed A->B offset survives.
還有兩個習慣能讓這一切落到實處。第一,虛擬元件(dummy):陣列*邊緣*的電晶體蝕刻情況與內部的不同(只有一側有鄰居),所以你要用不起功能作用的虛擬副本把要匹配的陣列圍起來。這些虛擬元件承受邊緣的折騰;於是每一個真正重要的元件現在看到的都是完全相同的內部環境。第二,對稱繞線——一對匹配元件的兩側應當有相同的線長和相同的 寄生 負載,否則你就會用金屬把剛剛在擴散層裡抵消掉的失配又重新引入回來。
寄生效應咬得更狠
你畫的每一根線都暗藏著一個電阻和一個 電容——它的寄生 R 和 C。在數位裡這大多只是付出一點點延遲。在類比裡,同樣的雜散 R 和 C 卻能挪動一個極點、壓低你的增益,或者使濾波器失諧,因為類比在意的是*精確*的數值,而不僅僅是某個節點最終是否會穩定到 1。一個你忘了畫上去的、掛在高阻抗節點上的 20 fF 寄生電容,在這裡可不是捨入誤差——它是一個完全不同的電路。寄生效應透過三道門傷害類比電路。增益:單級 放大器 的增益由 轉導 和輸出電阻決定,增益 = -gm*ro,而任何串聯的寄生電阻或對地的寄生電導都會*降低*有效的 ro,偷走增益。頻寬:高阻抗節點上多出來的寄生電容會降低極點頻率 f = 1/(2*pi*R*C),使你的頻寬變窄,還可能損害穩定性。匹配:如前所述,不對稱的繞線寄生會悄悄地把你費盡心力匹配好的一對元件再次拉得失配。
* AC sweep AFTER parasitic extraction to see the real bandwidth .include amp_extracted.spice ; netlist + R/C parasitics from layout .ac dec 100 1 1G ; 1 Hz -> 1 GHz, 100 pts/decade .print ac vdb(out) vp(out) ; gain in dB and phase .end * If the post-layout pole moved in, a parasitic C is the usual culprit.
由此而來的紀律是*佈局感知設計(layout-aware design)*:讓敏感、高阻抗節點上的線短而窄以減小電容,而載流的線則要粗;把與關鍵節點打交道的元件就擺在它旁邊;並且把最後的 寄生參數萃取 當作真正的考試,而不是一個打勾的步驟。誠實的類比工作流是:模擬原理圖、畫佈局、*萃取*、然後對萃取出的網表重新模擬——並且只相信第二個數字。
雜訊、屏蔽與基板
類比電路一輩子都活在雜訊底(noise floor)附近,所以佈局必須把外部注入的雜訊*擋在*安靜節點之外。元件自身有無法消除的 熱雜訊(4kTR——這是物理,佈局打不過)。但疊在它之上的是耦合雜訊,好的佈局能在很大程度上擊敗它:一個快速的 時脈 跳變緣透過電容踢一腳旁邊的類比走線,或者——最陰險的那個——透過共享基板傳播的雜訊,那是每個電晶體都坐在上面的那塊公共矽板。
對付耦合雜訊有三件工具。屏蔽:在敏感走線旁邊或上方走一根接地的金屬線,讓雜散電容耦合進地,而不是耦合進你的訊號。隔離:讓雜訊大、快速開關的網路在物理上遠離安靜的高阻抗網路——距離是廉價的保險。保護環(guard ring):用一圈接到乾淨電源的基板/井接觸把敏感模塊圍起來,給基板雜訊一條低電阻的入地路徑,讓它在到達你的電路*之前*就洩掉。想像一下在安靜的模塊周圍挖一道護城河。
還有兩個習慣很要緊。去耦電容(decap)直接放在類比電源接腳處,給快速的電流湧動一個本地的蓄水池,從而讓電源軌保持安靜——這與實體設計學習線裡電源網格上的去耦電容是同一個思路,只不過這裡是為類比的安靜而調,而非為數位的電流而調。還有,讓敏感節點保持小巧:線越少,供雜訊耦合上來的天線就越短,這又是類比繞線靠手繪、而非自動生成的一個理由。
類比與數位的邊界
一顆現代的混合訊號 晶片 把兩個世界放在同一塊晶片上:安靜的類比部分(你的 運放(op-amp)、基準、轉換器)緊挨著一個咆哮的數位模塊,後者把上百萬個 CMOS 閘在每一個 時脈 跳變緣翻轉一次。最具決定性的佈圖規劃(floorplan)抉擇就是你在它們之間把邊界畫在哪裡——因為正如我們剛才看到的,數位開關雜訊最想做的事情,就是穿過基板和電源,鑽進你最敏感的類比節點。
- 把兩個域在物理上分開。 在佈圖規劃裡,把所有類比聚到一個區域,所有數位聚到另一個區域;不要把它們交錯混放。距離加上基板電阻就是你第一道、也是最廉價的濾波器。
- 分開供電。 給類比自己的 AVDD/AGND,給數位自己的 DVDD/DGND,讓它們在一個刻意設計的單一星點處匯合——絕不讓有雜訊的數位地電流流過類比地。
- 用保護環築牆。 用接到乾淨地的基板/井接觸把類比孤島圍起來,讓基板雜訊在跨越邊界之前就先洩掉。
- 審慎地跨越邊界。 把那少數必須跨界的訊號(轉換器的數位輸出、時脈)走在帶屏蔽或留足間距的線上,並讓快速的數位跳變緣遠離類比輸入。
- 跨邊界重新萃取。 對整個混合訊號區域跑 寄生參數萃取 並重新模擬——任何原理圖都沒顯示出來的耦合,只會在萃取出的佈局裡現身。
那條邊界,正是這條類比學習線與實體設計(ic-backend)學習線握手的地方:數位一側由你已經學過的自動 佈局繞線 流程來擺放、佈時脈、連線,而隔壁的類比孤島則用本指南裡的一切手工繪製。一顆出色的混合訊號晶片,是兩門手藝隔著一道精心守護的圍欄協同合作的產物。