昨天介紹了半導體的功用與實際上的運作原理(簡易版),並在最後貼上了這張圖片:
這個電晶體叫做雙極性電晶體,很常用 BJT 來稱呼它。不過在實際應用上,有另外一種電晶體較為常用,叫做場效電晶體,英文簡寫叫做 MOSFET。
場效電晶體跟雙極性電晶體一樣有三個極,分別是閘極(gate)、汲極(drain)與源極(source)還有一個基板 body。
在閘極施加電壓時,能夠源極與閘極之間產生電子通道,近而導通電路。由於我們可以靠施加電壓來決定是否導通電路,因此能夠達到開關的效果。
MOSFET 比 BJT 電晶體更常使用的原因有幾點:
由於以上的優點,在半導體製程中,我們通常都是使用 MOSFET。
對 CPU 或其他電路來說,最基礎的元件就是電晶體,然而電晶體的位置與連接方式是重點。要完成這件事,並且又要讓體積足夠小,目前最關鍵的工法叫做光蝕刻法。主要的原理是將電路做成光罩,將電路圖曝光到晶圓上。
由於半導體製程已經進步到數 nm 的地步,因此需要相當精密的操作。最近很常聽到的 EUV 光波長更短,曝光機可以說是製造半導體的關鍵。光是一台曝光機就要數十億台幣。
刻蝕好的電路在晶圓上需要經過封裝才能真正給其他人使用,因為裡頭的電路相對脆弱,需要一層外皮保護起來;另外這些晶圓上的電路的接點太小了,需要進一步給封裝廠連接接點才有辦法使用。同樣的晶片可能有不同的封裝方式,例如 DIP、PGA、SMD 等等。
一個 CPU 動輒數十億個電晶體,這個規模不是幾個人手工拉線畫圖就可以完成的,通常需要電腦輔助。現在主要都是以 RTL(Register Transfer Level)來設計邏輯電路,比較有名的像是 verilog。
module half_adder(A, B, sum, c);
input A, B;
output sum, c;
xor (sum, A, B);
and (c, A, B);
endmodule
看起來很像我們一般在寫的程式碼,不過由於背後的運作是直接轉換成實體電路,因此跟一般程式不太一樣。在實體電路中,他們會是同時執行的。也就是說這邊的半加器不是先求 sum 再求 carry,而是會在一個週期同時完成。邏輯電路撰寫好之後會先模擬並且測試,確定和期待相符之後才會開始佈線。
電晶體的應用非常多,沒辦法一一列舉,在這邊分享兩個常見的應用。
CPU 或者 MCU 都是由無數個電晶體組成。但是為什麼一堆電晶體就可以組合出 CPU / MCU 呢?
CPU 裡頭的電路非常簡化過後可以大致分為幾種:控制單元、計算單元、儲存單元。控制單元可以根據指令來判斷要執行哪個分支、計算單元負責計算資料、儲存單元則可以儲存資料。
有關於每個單元實際上要怎麼以電路模擬的部分,可以參考 [Day8] 與程式有關的遊戲三選 (2) – TIS-100 與 Turing Complete,基本上所有的功能都可以用邏輯閘做出來,而邏輯閘又可以用電晶體來表示。
**可是電腦明明就不是只有 0 和 1 啊?**像是螢幕為什麼可以多彩繽紛,那麼多顏色。的確,這些技術牽涉到的東西不只有電器信號而已,然而像是螢幕,如果我們將它想像成非常多個微小的 LED 的話,並且可以根據電壓大小組合出不同亮度與顏色。那麼螢幕的顯示就可以抽象化成「計算此顏色所需要的電壓與要在哪裡顯示」。
螢幕背後也有晶片在控制,只要改變螢幕的記憶體位址的值,他就能幫我們改變顏色。因此整個過程又可以再簡化成「計算要改變哪個記憶體位址的值」。我們可以發現,有很多問題簡化到最後都會變成可以計算的問題,只要可以計算就可以利用 CPU。
假設今天有一個 IC 需要 5V 或 12V 的電源,但是一顆乾電池只有 1.5V,兩顆的話只有 3V,我們該怎麼辦呢?前面有提到,電晶體有一個功能是「開關」。升壓轉換器的原理是透過電感(線圈)達成,電感有個很神奇的特性,當電流產生變化時,電感會產生電動勢來抵銷這種變化。
如果我們不斷地開關,讓電感不斷地累積能量並釋放給電容充電,就可以得到比輸入電壓還高的電壓。藉此達到升壓的效果。我第一次知道這個電路時覺得很神奇,原來升壓就是不斷開開關關!
當然這並不是神奇的魔法,雖然理論上可以升壓到無限大,但這樣一來 MOSFET 跟電感要承受的功率非常大,幾乎跟直接短路一樣。就算可以,兩顆 1.5V 的乾電池能量也有限,要是升壓太多一下子就用完了。