BJT Differential Pair (解說版)
「用 Claude 做類比 IC 設計」系列頁面12345678910111213141516171819模型:NPN β 200、V_A 100 V;橫向 PNP β 50、V_A 50 V、τ_F 30 ns;V_T 25.85 mV、V_BE 0.65 V回到部落格文章
概述
一套與 Claude 逐步建構的流程,把 BJT 差動對從電路圖一路做到對稱、無壅塞的三層金屬繞線。同一個引擎接著擺置並繞線一顆 µA741 風格的兩級運算放大器核心。
在 10 個種子上,把繞線層數從一層加到三層,就清掉了所有共用格點:單層平均剩 2.9 個,三層一個也不剩。接著在交叉耦合的共質心輸入四元組上加入鏡像對稱約束,Vin± 路徑長度的平均匹配度從 80.5% 提高到 95.5%,代價是繞線長度多 23%。
每個階段都有一個互動頁,數字在瀏覽器裡即時重算。14 個佈局頁共用同一個擺置繞線引擎,在 80 × 60 的網格上運作,所以同樣的種子與設定在每一頁都得到同樣的佈局;4 個電路頁則共用同一套手算模型。它是教學與原型驗證平台,不是可簽核(sign-off)的佈局:沒有晶圓廠設計規則、沒有寄生萃取,也沒有佈局後模擬。
擺置先確定對稱與元件分散,再用短暫的試繞挑出要繞線的擺置影格。PathFinder 接著每一輪都重繞所有線網,持續提高共用格點的代價,直到沒有格點被共用為止。
電路:BJT 差動對
單級測試電路是帶主動負載的雙極性差動對:11 個元件、10 條線網、6 個焊墊,位於 80 × 60 的繞線網格上。
- 輸入對。Q1 與 Q2 各拆成兩顆單位電晶體,排成交叉耦合的共質心四元組:上排 Q1a、Q2a,下排 Q2b、Q1b,使線性製程梯度在兩個方向上都一階抵消。
- 主動負載。PNP 電流鏡把差動訊號轉成 VOUT 上的單端輸出;Q5 為二極體接法,Q6 為輸出端。
- 偏壓。Rref(39 kΩ)與二極體接法的 Q4 決定約 0.75 mA 的參考電流;Q3 加射極電阻 RE(5 kΩ)構成 Widlar 電流源,把尾電流降到 19 µA。
- 被動元件。RE 與 Rref 為多晶矽電阻;CL 是接在 VOUT 與地之間的 2 pF MIM 負載電容。
電路頁會隨 RE、Rref 與 CL 的變動即時重算工作點與上述指標,也能用模擬退火重新決定 RE 與 Rref:在單位增益頻率、相位邊限與 CMRR 的目標下把功耗降到最低。佈局頁另有 3D 晶粒視圖:每顆電晶體疊成隔離、磊晶島、基極與射極幾層,電阻畫成多晶矽條,電容畫成兩片金屬極板,M1–M3 則分在三個高度,以 via 相連;第 10 頁則更進一步,把同一份網表畫成實尺寸佈局,用 KLayout 跑 DRC 與 LVS,再把萃取出的寄生放回 ngspice 模擬。
互動頁:電路圖、工作點與尺寸
擺置
擺置採用二次式擺置最佳化(QPO):每次掃描先解一次二次規劃求線長最小,再把結果合法化到網格上;先只看線長,再加入壅塞項。
- 第一階段。從隨種子而定的隨機位置出發,24 次掃描交替進行二次求解(以團模型把每個線網展開成彈簧)與合法化。合法位置成為下一次求解的錨點,錨點權重逐次加重(SimPL 式 [4]),擺置因此逐步穩定,而不會全部擠向中央。
- 第二階段。3 輪、每輪 6 次掃描,讓元件沿 RUDY [5] 繞線需求估計的梯度移動,λ 依序為 0.5、1.3、2.1。每個影格的分數是 HPWL 加上加權的壅塞項。
- 影格挑選。從後半段取 4 個影格(開啟穩定化時再加上分數最好的影格),各試繞最多 8 輪 PathFinder;先比未連接的接腳,再比共用格點,最後比線長,最好的那個才做完整繞線。
這幾頁跑的是早期流程,沒有對稱約束,也沒有穩定化修正;兩者都在下文說明,另外也會談到每一頁都在元件周圍保留的繞線餘裕。
互動頁:QPO 擺置與單層繞線
繞線
繞線採用協商式壅塞:PathFinder [1] 每一輪都拆除並重繞所有線網,並以 A* [2] 作為單一線網的路徑搜尋。沒有任何格點被共用,或跑滿 32 輪時停止。
- 線網排序。先依關鍵度排序(Vin+ 與 Vin− 為 3),再依外框大小由小到大。原工具把這一步標為「ILP」,但它只是排序,不是整數線性規劃。
- A* 搜尋。每個線網長成一棵樹:A* 從已連上的所有格點出發,搜尋到下一個接腳。沿該層偏好方向走一步的基本代價 b = 1.0,逆向為 1.5,穿過 via 為 2.0;格點代價為 (b + h)(1 + p · occ),其中 occ 是占用該格的其他線網數,h 是該格的歷史值,p 是現況壅塞係數。
- 協商。每一輪結束後,p 由 0.5 起每輪乘以 1.8,每個溢用格點的歷史值加上其溢用量;共用格點的代價越來越高,線網因此逐漸分散。
只有一層時,10 條線網全擠在同一張網格上,必須交叉的線網無處可讓:10 個種子中 PathFinder 一次也沒收斂,平均剩 2.9 個共用格點。原工具後來的「多層」版本雖然把線網畫在兩個高度,繞線器搜尋的仍是單一網格,金屬層與 via 都只是外觀;在引擎中重現後,結果與單層完全相同。
修正後的繞線器在 (x, y, 層) 空間中搜尋,每層各有獨立的占用圖,每個 via 都計入代價,並回報 via 數。它使用三層金屬:M1 與 M3 偏好水平走線,M2 偏好垂直走線,接腳可經 via 堆疊從任一層進出。
真正解決壅塞的是這項改動,而不是擺置調整:10 個種子都在 3 到 4 輪內收斂、沒有共用格點,繞線長度下降 36%(445 → 286,表 1)。把接腳限制在 M1 影響不大。在原專案中,先前三項擺置調整(硬邊界殼、通道強制、考慮元件外框的斥力)攻錯了瓶頸,均已撤回。
互動頁:偽多層繞線器 · 壅塞報告 · 含 via 計數的三層繞線器 · 繞線對話紀錄
對稱硬約束
三層金屬消除了壅塞,但 Vin± 平均匹配度仍只有 80.5%,視種子不同落在 59% 到 100% 之間,因為失配來自擺置,而非繞線。
沒有對稱約束時,QPO 會把四顆輸入電晶體放在線長拉向的任何地方,兩條輸入路徑在拉線之前長度就已經不同,任何繞線器都無法挽回。
修正方式是在每次二次求解之後,把四顆輸入電晶體當成一個剛性的 2 × 2 單元整組合法化:上排 Q1a、Q2a,下排 Q2b、Q1b,以晶粒的垂直中線(x = 40)為軸鏡像對稱。每個輸入的兩半位於對角線上,因此四元組是交叉耦合的共質心結構,每一組鏡像對都各含兩個輸入的一半。負載對 Q5/Q6 以同一軸鏡像,尾電流電晶體 Q3 則置於軸上。
匹配度是繞線指標,定義在 Vin+ 與 Vin− 路徑的繞線長度 L⁺ 與 L⁻ 上:
匹配度 = 1 − |L⁺ − L⁻| / max(L⁺, L⁻)
它衡量的是路徑長度是否平衡,而非電晶體失調;元件匹配來自共質心擺置本身。
表 1:單級結果,為 10 個種子(42、137、256、314、500、777、999、1234、2025、8888)的平均。「共用」是繞線後被一條以上線網占用的格點數,「零共用」是共用格點歸零的種子數,「匹配度」是 Vin± 路徑長度匹配度,「線長」是繞線長度(網格單位,不含 via)。前四列是早期流程,沒有對稱與穩定化。
| 組態 | 共用 | 零共用 | 輪數 | 匹配度 | via | 線長 |
|---|---|---|---|---|---|---|
| 僅 A*,無協商,單層 | 13.0 | 0/10 | 1 | 76.9% | 0 | 291 |
| PathFinder,單層 | 2.9 | 0/10 | 32(上限) | 78.8% | 0 | 445 |
| PathFinder,三層,接腳僅在 M1 | 0 | 10/10 | 2.5 | 80.2% | 17.1 | 282 |
| PathFinder,三層,接腳可在任一層 | 0 | 10/10 | 3.1 | 80.5% | 18.4 | 286 |
| + 對稱硬約束 | 0 | 10/10 | 2.0 | 95.5% | 18.6 | 353 |
加入對稱約束後,各種子的匹配度落在 91.5% 到 98.3%,沒有約束時則是 58.8% 到 100%;繞線長度增加 23%(286 → 353)。
互動頁:對稱硬約束 · 基準報告(表 1) · 同一佈局,極簡主題
兩級運算放大器核心
同一套流程接著佈局一顆兩級運放核心:前述差動級之後,接射極隨耦器(Q8)、以 PNP 電流源(Q10)為負載的共射極增益級(Q9),以及米勒補償(Cc)。晶粒擴增為 17 個元件、13 條線網、5 個焊墊,網格大小不變。
第一級透過 Q5/Q6 電流鏡,把差動輸入轉成節點 N2 上的單端訊號。Q8 緩衝 N2:少了它,Q9 約 29.5 kΩ 的輸入電阻會直接負載 N2,第一級增益將從約 689 掉到約 11。Q9 提供電壓增益,跨接在 N2 與 VOUT 之間的 Cc 決定主極點。Q11、Rref 與 Q4 組成的偏壓鏈同時供應 Widlar 尾電流源與 Q10。
此架構仿照 µA741 [3](Dave Fullagar 於 Fairchild 設計,1968 年推出),但它並不是 741。它保留了 741 的偏壓數值(39 kΩ 參考電阻與 5 kΩ Widlar 電阻,尾電流約 19 µA)、增益級(射極隨耦器驅動共射極電晶體,射極電阻 100 Ω,負載為 0.75 I_REF 的電流源)以及 30 pF 米勒電容。它把 741 由 NPN 射極隨耦器與橫向 PNP 共基極組成的輸入串接,換成單純的 NPN 差動對,並省略 AB 類輸出級與短路保護。少了這組串接,輸入轉導是 g_m1 而不是 g_m1/2,所以增益頻寬積約 1.9 MHz,而非約 1 MHz。
原始電路圖的審查找出四個錯誤,重做的圖都已修正:
- Q9 的集極直接接到 VCC,第二級因此沒有電壓增益。
- Q5 沒有二極體接法,電流鏡失去參考。
- 尾電流源中,Q4 的基極偏壓浮接,且兩條多餘導線把 Q4 射極直接短路到 VEE,繞過了 Rref。
- Q5/Q6 的射極箭頭朝外,那是 NPN 的畫法。
擺置與繞線沿用單級流程,但元件換成第 10 頁的實尺寸佈局單元:12 個單元照原尺寸擺放,輸入四元組整組放在輸入焊墊的對稱軸上,每個單元四周保留一條空軌,再用與第 10 頁同一套兩層金屬 PathFinder 繞線。10 個種子全部收斂,平均 6.7 輪,線長 7,456 µm、via 51.5 個、Vin± 匹配度 93.9%。依收斂、共用格點、未連接的接腳、線長加 via 的順序排名,最佳的是種子 777:7 輪、線長 7,030 µm、via 52 個、匹配度 92.6%。第 10 頁的手排平面圖用同一個繞線器,需要 7,700 µm 與 48 個 via。種子 42 與 777 的佈局匯出成 GDS 後,都通過與第 10 頁相同的 DRC 與 LVS。
互動頁:方塊圖 · 兩級晶粒(實尺寸) · 電路圖(黑白) · 電路圖(彩色) · 擺置與繞線(實尺寸) · 10 個種子取最佳(實尺寸) · 設計對話(由簡單差動對發展而來)
精修
後續三項改動讓流程更穩定、收斂更快。以下數字都是兩級設計在同樣 10 個種子上的平均,由第 16–19 頁共用的 80 × 60 網格引擎重新計算。
穩定擺置器
把 QPO 預算加倍(第一階段由 24 次增為 48 次掃描,第二階段每輪由 6 次增為 12 次)後出現不穩定。兩種情況下第一階段都停在差不多的 HPWL,約 380;但沒有保護機制時,第二階段每次推移都把元件推得更散,平均 HPWL 一路升到 558,比第一階段的結果高約 47%。
四項修正讓它穩定下來:
- 關鍵線網。Vin+、Vin− 與第一級輸出 N2 在二次求解中的彈簧權重乘 3。
- 差動對範圍。輸入四元組與負載 Q5/Q6 在第二階段的推移目標,限制在 30 × 24 格的框內。
- 線長回拉。HPWL 超過第一階段結果的 1.25 倍時,錨點往目前最佳影格拉回 35%。
- 菁英回復。一輪結束時若比最佳影格差 15% 以上,就退回最佳影格。
第二階段的推移步長也減半,由 2.0 降為 1.0。
為了單獨比較擺置,每次執行都直接繞最後一個影格,不經影格挑選。兩種版本在 10 個種子上都收斂、沒有共用格點,但修正讓平均 HPWL 下降 25%(558 → 417),繞線長度加 via 也下降 25%(678 → 510);Vin± 平均匹配度由 96.2% 變為 95.8%。拆解實驗可以分開兩者的貢獻:只把步長減半,HPWL 為 458;只加四項修正,HPWL 為 408,但 10 個種子合計觸發 25 次回拉、6 次回復。兩者並用時,兩種保險都不會觸發,成了備而不用的安全網。
幽靈壅塞
並非每個共用格點都是衝突。把多端線網從源點接腳拆成多條兩端連線時,這些連線必然在源點重疊,在分支處也常重疊。把這些格點算成溢用,PathFinder 就會讓同一個線網跟自己的線互相加價:拆分且計入重疊時,10 個種子全部跑到 32 輪上限,平均剩 13.1 個共用格點,而且每一個都是同一線網內的重疊。把同線網重疊從占用計數中排除後,每個種子都收斂,平均 2.8 輪。像其他頁面那樣把每個線網繞成一棵樹,則根本不會跟自己衝突,結果也最短:繞線長度加 via 為 466,排除重疊的拆分為 536,未排除的拆分為 709。
擺置中的重疊懲罰
合法化時在每個元件本體與接腳周圍保留 m 條空軌,這就是重疊懲罰。m = 0 只保證不重疊,元件可以緊貼;一個接腳若三面被鄰近元件擋住、第四面是自己的本體,就在任何一層都連不到。10 個種子中,m = 0 只有 4 個收斂:6 個種子各有一個接腳連不出去,一路跑到 32 輪上限,平均 20.8 輪。保留一軌(m = 1)時 10 個種子全部收斂,平均 2.9 輪。保留兩軌也都收斂,平均 3.1 輪,但繞線長度加 via 多了 14%,所以預設 m = 1。
互動頁:調校投影片 · 穩定化基準 · 幽靈壅塞 · 重疊懲罰與繞線餘裕 · 重疊懲罰基準
參考文獻
- L. McMurchie and C. Ebeling, "PathFinder: A Negotiation-Based Performance-Driven Router for FPGAs," Int. Symp. on Field-Programmable Gate Arrays (FPGA '95), 1995。列於 FPGA 20 reading list。
- P. E. Hart, N. J. Nilsson and B. Raphael, "A Formal Basis for the Heuristic Determination of Minimum Cost Paths," IEEE Trans. Systems Science and Cybernetics, vol. 4, no. 2, pp. 100–107, July 1968. doi:10.1109/TSSC.1968.300136
- "µA741," Wikipedia(英文). en.wikipedia.org/wiki/ΜA741
- M.-C. Kim, D.-J. Lee and I. L. Markov, "SimPL: An Effective Placement Algorithm," IEEE/ACM Int. Conf. on Computer-Aided Design (ICCAD), 2010.
- P. Spindler and F. M. Johannes, "Fast and Accurate Routing Demand Estimation for Efficient Routability-driven Placement," Design, Automation and Test in Europe (DATE), 2007.














沒有留言:
張貼留言