什麼都沒做也會收到的帳單
在第 1 級我們把晶片的功耗分成兩半。動態功耗是你為了「做事」而付的錢:每當一顆電晶體翻轉,它就要對微小的電容充電與放電,這要花能量。把時脈停掉,動態功耗就降到零。它是「運動的功耗」——沒有運動,就沒有帳單。三十年來,這個直覺幾乎就是全部,工程師為切換活動率與時脈頻率傷透腦筋。
但還有第二半,而它根本不在乎時脈有沒有在跑。[[ic-leakage-power|漏電功耗]]——又稱靜態功耗——是流過一顆「理應關閉」電晶體的電流。電晶體本該是個開關:要電流時閉合、不要時斷開。現代矽晶片殘酷的真相是:斷開的開關會漏。一股微小卻不曾停歇的電流滲過去,而因為有數十億顆電晶體同時在漏,這些涓滴匯成一條河。這筆帳單在晶片閒置於你口袋裡時照樣寄來,即使螢幕全黑也一樣。
兩種漏:閘下偷溜與穿閘而過
漏電不是單一現象,而是一整族。其中兩種最為主導。第一種是次臨界漏電:電晶體名義上關閉時,電流仍從汲極流向源極。此時閘極電壓低於臨界電壓 Vt——也就是電晶體「應該」導通的門檻。你會以為低於臨界電壓就是零電流,但通道並非在 Vt 那一刻啪地關死,而是逐漸變暗。在臨界值底下一點點,仍有一小群帶電載子擁有足夠的熱能越過去。電流不會停——它呈指數衰減,而指數衰減不等於零。
它衰減得多快,由次臨界斜率描述,典型約為每十倍電流 70–100 mV。意思是 Vt 每升高約 80 mV,次臨界漏電大約砍掉十分之一。反過來看:你為了讓電晶體更快而把 Vt 每「降低」80 mV,它的漏電就乘以十倍。這一句話,就是本篇全部的戲劇張力。速度與漏電透過 Vt 牢牢綁在一起,而你騙不過指數。
第二大漏是閘極漏電——電流「直接穿過」閘極絕緣層。閘極坐在通道上方,中間僅隔著一層薄到要用原子數來量的氧化層。在較舊的節點,那層氧化層是一道從容的牆。隨著電晶體微縮,氧化層也得跟著變薄,而薄到大約 2 nm 以下,電子就完全不把這道牆當一回事了:量子力學讓它們穿隧而過。解法是改配方——以高介電常數(high-k)材料(鉿基)取代二氧化矽,用較厚的物理屏障換來相同的電氣效果;而 FinFET 與環繞閘極結構則把閘極包住通道以加強控制。閘極漏電大致是一場材料與結構之戰;次臨界漏電才是設計者要逐顆元件去打的那一場。
漏電為何爆炸——又為何嗜熱
數十年來,把電晶體做小純粹是好消息,而讓這筆交易成立的是 Dennard 微縮:當你把電晶體尺寸減半,也同步降低供應電壓與臨界電壓來配合,使電場保持不變、功率密度持平。更小、更快、更涼——一次到位。但 Vt 不能永遠往下降。降得太低,關閉的電晶體就漏得太兇;我們剛認識的那個指數會把省下的好處變成懲罰。約莫 2000 年代中期,Vt 的微縮停滯了,而其他一切照樣縮小,Dennard 微縮於是崩解。漏電——曾經只是個進位誤差——一路攀升,在最先進的節點可佔晶片總功耗的 30–50%。
漏電還有脾氣:它對溫度極其敏感。次臨界電流取決於有多少載子擁有足夠熱能越過屏障,而這群載子的數量隨晶片升溫而快速增加。一個經驗法則是:溫度每升 10–15 °C,漏電大約翻倍。這會造成一個惡性循環——熱失控:漏電讓晶片發熱,發熱抬高漏電,漏電又讓晶片更熱。一顆在涼爽工作台上看起來沒問題的零件,夏天塞進密封手機裡可能就燒了。這就是為什麼漏電總是在「高接面溫度」而非室溫下標定。
最後,漏電會隨[[process-corner|製程角點]]劇烈擺盪。製造從來不精確——Vt、氧化層厚度、通道長度在不同晶圓間都會散佈。針對漏電要擔心的角點是 FF(快-快):跑得比標稱更快的電晶體,部分原因正是它們的 Vt 偏低,所以最快的矽也最會漏。把最壞情況疊在一起——FF 製程、高電壓、高接面溫度——就得到漏電簽核工程師必須守住預算的那個角點。同一顆晶片在 SS(慢-慢)、低溫、低電壓的角點幾乎不漏電,卻遲鈍。你要設計成兩個極端都能存活。
Subthreshold leakage scales with three knobs:
I_leak ~ W/L * exp( -Vt / (n * kT/q) )
^^^^^^^^^^^^^^^^^^^^^^
the exponential that rules everything
Lower Vt by 80 mV -> I_leak x10 (faster cell, leakier)
Raise Vt by 80 mV -> I_leak /10 (slower cell, miserly)
+10..15 C temperature -> I_leak x2 (heat feeds the leak)
FF corner vs SS corner -> I_leak x5..x10 (process scatter)
kT/q at 25 C ~ 26 mV ; at 110 C ~ 33 mV (so slope worsens hot)多重 Vt:同一段邏輯,給你一快一慢兩種元件
這就是業界最終採用的優雅花招。回想前幾級:設計者不是徒手畫電晶體——他們用[[standard-cell|標準元件]]庫組裝晶片,那是一份預先建好的閘級目錄(反相器、NAND、正反器),全部等高,好讓它們卡進一列列的格子裡。現代的元件庫不會只出一款反相器。它把「同一款」反相器做三、四遍,每個版本用的電晶體有不同的臨界電壓。這些就是[[ic-multi-vt|多重 Vt]]口味。
- LVT——低 Vt:臨界值低,電晶體導通得猛、切換得快。代價是漏電很兇——常是 HVT 元件的 5–10 倍。要省著用,只用在每一皮秒都要計較的地方。
- SVT——標準 Vt:平衡的中間檔。速度合理、漏電合理。對大多數邏輯而言,是明智的預設選擇。
- HVT——高 Vt:臨界值高,所以切換慢,但漏得極少——常只有 LVT 元件的五分之一到十分之一。在所有時序寬裕的地方都用它。
- (有些元件庫再加上 ULVT/eLVT 衝極致速度,一路拉到好幾種口味。)它們的邏輯功能完全相同——差別只在漏電與速度的那個取捨點。
因為同一款元件的所有口味在邏輯上完全相同、接腳也相容,合成與佈局繞線工具就能在流程後期自由互換,無須重畫任何東西。這個「可互換性」正是重點所在:它把漏電變成一個工具能逐閘調節的旋鈕。
Same inverter, three thresholds — same footprint, same pins:
LVT inverter SVT inverter HVT inverter
delay : 8 ps delay : 11 ps delay : 16 ps
leak : 10 nA leak : 2.5 nA leak : 1 nA
^ fast, thirsty ^ balanced ^ slow, frugal
in --|>o-- out in --|>o-- out in --|>o-- out
(drops into the SAME row slot; tool picks the flavour)關鍵路徑配快元件,其餘的人少付帳
策略到這裡就自己寫好了。回想[[critical-path|關鍵路徑]]——兩個正反器之間最慢的那條邏輯路徑,它決定整個時脈能跑多快。一條路徑「關鍵」的條件是它「沒有寬裕(slack)」:在下一個時脈邊緣之前沒有多餘時間。其他每一條路徑都提早完工、閒在那裡等。在一條有寬裕的路徑上花用又快又漏的 LVT 元件,什麼也買不到——它讓一條本來就快的路徑更快,時脈根本察覺不到,卻為此付出漏電代價。
於是工具跑一輪漏電回收(leakage recovery)。它從「全部都快」出發(或最終收斂到那裡),然後巡遍整個設計,在任何還有寬裕可揮霍的地方把元件換成更高的 Vt,每次替換都停在「再換下去這條路徑就會違反時序」之前。快速的 LVT 元件只在真正關鍵的路徑上倖存;所有寬裕從容的地方最後都變成 HVT。結果:晶片在少數需要速度的路徑上達成頻率目標,而在絕大多數不需要速度的閘上,漏電量像一個 HVT 設計一樣低。
把取捨講具體一點。假設某個區塊有 100,000 顆元件。為保險全做成 LVT,關鍵路徑是 1.00 ns(1 GHz,達標),但區塊漏電是 100 µA。為省電全做成 HVT,漏電降到 12 µA——但關鍵路徑膨脹到 1.45 ns,在 1 GHz 下違反時序。兩個極端都不能接受。混搭方案只在落於關鍵或近關鍵路徑的那約 6% 元件上保留 LVT,其餘全做 HVT:
Block of 100,000 cells, target clock = 1.00 ns (1 GHz)
Strategy Critical path Block leakage Meets 1 GHz?
----------- ------------- ------------- ------------
All LVT 1.00 ns 100 uA YES (but worst power)
All HVT 1.45 ns 12 uA NO (45% too slow)
Multi-Vt mix 1.00 ns ~22 uA YES <-- ship this
(6% LVT on critical paths, 94% HVT elsewhere)
Result of the mix vs all-LVT:
timing : identical (still 1.00 ns, still meets 1 GHz)
leakage : 100 uA -> 22 uA = ~78% leakage saved
cost : zero area, zero logic change, one tool pass多重 Vt 在更大的漏電戰局中的位置
多重 Vt 是「日常」的漏電防線——便宜、自動、不佔面積,幾乎用在每一顆現代 SoC 的每一個區塊上。但它只是「重塑」漏電,從不把它關掉。漏電的電晶體照樣漏,只是漏少一點。當一個區塊「要閒置很久」時,重型武器就上場了——而那些是後面幾級的主題。電源閘控(power gating)插入一個頭/尾開關,把睡眠中的區塊整個從供電切開,使其漏電趨近於零(代價是喚醒時間)。基體偏壓(body biasing)在閒置時用電氣手段把 Vt 微微往上推。電壓調節則直接降低供應電壓本身——因為漏電隨電壓陡降。
把它想成一套層層防禦。多重 Vt 是你預設就佈署到處的常備軍——它讓整顆晶片隨時都漏得更少,而且免費。電源閘控與基體偏壓則是你為「可以送去睡覺」的區塊召來的特種部隊。一個真正的低功耗設計會把它們全部一起用:多重 Vt 設下地板,睡眠技術再把閒置區塊壓到地板之下。