一、前言
我們都知道芯片,也知道芯片技術在21世紀是最重要的技術之一,但很少有人能知道芯片技術的一些細節,如芯片是如何構造的、為什么它可以運行程序、芯片又是如何被設計制造出來的等等。本文就嘗試從最底層的二級管開始,逐一講講二極管、mos管、邏輯門電路、集成電路、大規模集成電路是如何逐步構造成我們所熟知的“芯片”。
二、從二極管到邏輯門電路
二極管
二極管是大家熟知的基本器件之一,可以說二極管的發明和大規模使用是現代工業騰飛最重要的基礎之一。二極管的特性就是電流單向導通,如下圖所示,一般情況下電流只能從A到B而不能從B到A,且這種單向導通還有個特點就是施加的電壓必須大於某個數值,如硅二極管為0.5V才能導通,且導通后繼續增加電壓會導致電流大幅增加(相當於電阻下降)。

在邏輯上可以這樣理解:施加在二極管上的電壓小於0.5V時它是不通電的(表現為極高的電阻),當電壓等於0.5V時二極管突然就導通了(表現為極低的電阻)。所以我們總結一下二極管的特性:
1、只能單向導通
2、施加電壓低於0.5V時完全不導通
3、施加電壓等於0.5V時突然完全導通
事實上,科學家們正是利用上述的簡單特性構建了龐大復雜的電子世界。
三極管
在二極管的基礎上,科學家們進一步研究出了三極管。三極管的特點就是增加了一極,不由施加在兩端的電壓大小決定是否導通,加入了第三極,使用三極間壓差來決定是否導通。如下圖所示,工作時b、c、e極都施加了一定的電壓,這里不探究具體電壓差是如何導致c、e間導通的,簡單來說就是通過各極間壓差實現c、e間先是逐漸導通(表現為壓差增大電流增大),而后變為完全導通(表現為壓差增大而電流不變)。且這種特性也是挑方向的,只能是c到e的導通而不能是e到c的導通(即施加反向電壓再高也不會反向導通)。

邏輯上我們可以做如下總結:
1、只能c到e導通(反向施加電壓無法反向導通)
2、壓差低於某值A時完全不導通(無電流)
3、壓差高於某值A時逐漸導通(電流隨壓差增大)
4、壓差高於另一值B時完全導通(電流不隨壓差變化)
邏輯門電路
了解了基本器件后,我們再來說說數學。在數學上我們有三個基本邏輯:與、或、非。
與(&):0&0=0、1&0=0、0&1=0、1&1=1
或(|):0|0=0、1|0=1、0|1=1、1|1=1
非(!):!0=1、!1=0
科學家們使用二極管、三極管、電阻、電容在電路上實現了上述的三個基本邏輯,具體表現為:
1)與門:A、B兩端同時輸入5V則L端輸出5V,否則L端輸出0V

2)或門:A、B任意一端輸入5V則L端輸出為5V,A、B端同時為0V時L端輸出為0V

3)非們:A端輸入5V則L端輸出0V,A端輸入0V則L端輸出5V

這里我們就不探究邏輯門的具體原理了,大家只要知道二極管、三極管的物理特性使得這種邏輯電路運行的非常穩定,以非門為例,當A端輸入小於5V時L端輸出穩定為5V,當A端等於5V時L端會立即輸出為0V(這里忽略了很多電路細節和器件特性)。為便於使用,科學家們使用符號將這三個邏輯門進行了抽象:



為便於使用,我們將其進一步抽象,如下圖所示:

從數學上來說,所有復雜的邏輯式最終都可以分解為最基本的三個邏輯組合,我們先溫習一下高中的代數課:


那在電路上,是不是就可以使用與、或、非這三個基本的邏輯門電路來分解?
三、從邏輯運算到電路運算
以加法為例
下圖是二進制加法的真值表,S是A+B,C是進位。

科學家們使用邏輯式來總結了這個真值表,從真值表到邏輯式的轉化是高中代數的基本內容。

我們發現,S和C的輸出可以由A與B的邏輯運算得到(一個異或門、一個與門)。那么,如果我們使用邏輯電路來實現邏輯運算,是不是就可以用電路來實現加法?
第一步,我們先用邏輯符號來繪制上述的公式:

第二步,將邏輯符號轉為電路(沒找到半加器電路,這個是全加器):

第三步,焊接物理電路

邏輯疊加
通過加法的例子我們實現了從邏輯到電路的轉變,根據這個原理我們可以簡單的實現:
1)減法器

2)乘法器

3)除法器

4)8位加法器

實際上我們發現所有的運算都是邏輯的疊加,邏輯最終可以轉化為電路,所以我們可以得出結論:所有的運算最終都可以使用電路實現。
四、從電子電路到集成電路
龐大的電子計算機
看了前面的內容,我們知道了所有邏輯運算都可以使用電路實現,那么加法器、減法器、乘法器、除法器都是可以實現的,事實上一開始的“計算機”就是用於做這些加減乘除運算。使用邏輯門的好處顯而易見,所有邏輯疊加問題都可以用電路的“疊加”來解決,無論是10位的加法、100位的減法、還是1000位的乘法,理論上來說只要二極管、三極管、電容電阻足夠我們都可以實現。但是隨着計算需求越來越大,計算器的體積變得越來越大,“耗電”成了一個大問題。下圖是第一台通用計算機ENIAC,它可以每秒5000次加法或400次乘法運算,但是它使用了17,468根真空管(電子管)7,200根晶體二極管,1,500 個中轉,70,000個電阻器,10,000個電容器,1500個繼電器,6000多個開關。拋開成本因素,光耗電量就是一個天文數字。

MOS管與集成電路
體積龐大、造價高昂、耗電量成為制約計算機的核心問題所在,如果有辦法縮小元器件的體積,體積、造價、耗電的問題都迎刃而解了。在這個需求的基礎上集成電路誕生了,它不是使用電路將各種元器件連接起來,而是將各種元器件、線路直接“做”到了硅片上。
下圖是一個典型的PNP三極管示意圖,本質上P與N的材質是一樣的(硅),只是摻雜了不同的雜質改變了其電特性(二極管、三極管就是這么制造的)。所以有沒有辦法在一片硅上面按需求“做”出P結、N結,而后用“線路”將各P結和N結連接成電路,只要前期規划做好,數量龐大的三極管、二極管、線路就可以集成到一個硅片上了。

mos管是金屬(metal)、氧化物(oxide)、半導體(semiconductor)場效應晶體管,名字復雜其實本質就是由金屬、氧化物、半導體組成的元器件。前面說到要將三極管、二極管、線路集成到硅片上,其中MOS管中的“半導體”就是P結或N結,用來組成三極管或二極管。“金屬”就是連接各結的線路,“氧化物”就是各結間用以絕緣的隔離層。簡單點說,集成電路就是在硅片上制造了很多的半導體(PN結)、金屬(線路)、氧化物(絕緣層),這些半導體、金屬、氧化物組成的器件我們稱之為MOS管,無數MOS管按邏輯電路進行組合就是所謂的集成電路了。
集成電路工藝
現在我們找到了辦法將器件縮小,下一步就是如何實現PN結、金屬線路、氧化物。下圖是一個典型的PNP晶體管剖面示意圖

在工藝上要做成這樣需要很多步驟,大概有:
1)切割:將工廠生產的硅錠切割成片

2)影印:在硅片上塗一層光阻物質(想象成防護膜),然后按設計要求溶解部分光阻物質(讓部分區域露出來)。工藝上是在紫外燈上面加一層有很多孔的遮罩,被紫外燈照射的光阻物質就溶解了,沒有照射的地方還有保護。如下圖所示,通過影印將部分光阻清除,露出部分硅片。

3)刻蝕:露出該露的、遮住該遮的部分后,就使用刻蝕技術將沒被遮住的區域“蝕”出一個溝,如下圖所示。

4)摻雜:有了溝之后就使用原子轟擊這個“溝”使其摻入雜質形成P型襯底

5)沉積:接着在P型襯底上沉積一層N型硅

就這樣反復影印、刻蝕、摻雜、沉積就得到了我們需要的MOS管。

五、從集成電路到CPU
我們將一塊晶圓上制作了大量MOS管的叫集成電路,MOS管特別多的叫大規模集成電路,MOS管超級超級多的叫超大規模集成電路,其實就是工藝進步了。一塊芯片上集成的電子器件越多、電路越復雜能實現的功能也就越多,所以我們不能只滿足於做加減乘除這樣簡單的運算。但當時的科學家並沒有“未來”的視野,他們當時急需的問題不是發明CPU,而是解決數據如何存儲的問題。如果數據可以存儲在電路里,那就可以實現很多復雜的操作,比如簡單的編程。
D觸發器
為了將數據“鎖”在電路里,科學家們使用邏輯門組成了D觸發器。其中CP是時鍾控制信號(這里將其當做一個控制信號即可),當CP值為1時D輸入一個信號則Q輸出同樣的信號,當CP值不為1時D輸入任何信號則Q輸出不變,如此就實現了將D信號“鎖”在了Q。

寄存器
數個D觸發器的組合就實現了一個寄存器,如下圖所示就是一個4位寄存器,可以存儲一個4位的數據,如“0101”:

根據寄存器的工作內容又細分了:指令寄存器、程序計數器、地址寄存器、通用寄存器等等。
運算器
將數個寄存器與前面所說的加、減、乘、除計算電路結合起來就是運算器了,運算器的作用就是對寄存器(一個或多個)中的內容進行算數計算,而后將結果存入寄存器。

控制器
上圖可以看到,運算器內有數個寄存器,那何時執行計算任務、計算那幾個寄存器的數據、最終存儲到哪里呢,這些都由控制器來完成。控制器由指令寄存器、指令譯碼器、程序計數器、堆棧指針、數據指針組成,它從指令寄存器中獲取指令而后根據指令從外部存儲中獲取數據、控制運算器執行運算、獲取下一步指令等等。這一且都是通過“時鍾控制信號”和復雜的邏輯運算實現的。
對於時鍾控制信號,可以理解為一個節拍器,時鍾源向CPU發送有節奏的高低電平信號,讓控制器內部邏輯電路被激活,該邏輯電路又根據指令寄存器的內容生成各種控制信號指揮運算器讀取數據、執行運算、讀取下一步指令、存儲計算結果等等。下圖就是一個完整的控制器與運算器的示意。

存儲器
存儲器又叫高速緩沖存儲器,它的作用就是存儲即將交付CPU處理的數據並保存CPU處理的結果。實際上各種控制信號、數據都是放置於存儲器中,控制器從這里獲取下一步的數據和指令。
CPU
存儲器、控制器、運算器的結合就是一個基本的CPU了,等等?似乎CPU沒有什么特殊的功能啊,那它是如何執行這么多復雜工作的呢?實際上CPU的原理就是這么簡單。當我們寫好代碼后,編譯器就將這些代碼翻譯成CPU可以識別的數據格式,而后按順序放入存儲器中即可,控制器會根據預設的程序按節奏從存儲器中獲取指令和數據,控制運算器處理這些數據,最終實現代碼功能。
六、CPU運作示例
為便於理解其工作原理,我們做一個簡單的示例。比如我們寫了一段代碼:
A=1;
B=2;
C=A+B;
輸出C到屏幕
編譯器編譯時可能會做如下翻譯:
1)將0001放入寄存器A、將0010放入寄存器B
2)執行寄存器A+寄存器B,結果放入寄存器C
3)讀取屏幕顯示器的存儲地址,放入寄存器E
4)根據寄存器E的數據(屏幕顯示器地址),將寄存器C的數據(運算結果)寫入該存儲地址
至此CPU就實現了一個簡單的計算和屏幕顯示。當然具體操作過程可能會比這個復雜無數倍。但是CPU的核心功能就是簡單的算數運算,以及各種數據的讀寫。而編譯器的工作就是將復雜的代碼翻譯成簡單的算數運算和數據存儲、數據移動。
七、總結
CPU/集成電路/芯片當然不是這篇短文能講述清楚的,篇幅所限我們主要精力放在了邏輯電路部分,如果想要了解更多關於CPU的知識我建議大家可以看《CPU自制入門》和《自己動手寫CPU》這兩本書,書上前幾章對CPU的介紹還是非常有意思的。
關注公眾號“零基礎愛學習”回復“CPU”即可獲取書本電子版+原書光盤全部代碼。

