我們都認(rèn)為CPU是計(jì)算機(jī)的“大腦”,但這到底是什么意思呢?用數(shù)十億個(gè)晶體管讓你的計(jì)算機(jī)工作到底是怎么回事?在這篇文章中,我們將專注于計(jì)算機(jī)硬件設(shè)計(jì),涵蓋計(jì)算機(jī)工作原理的來(lái)龍去脈。
文章將涵蓋計(jì)算機(jī)架構(gòu)、處理器電路設(shè)計(jì)、超大規(guī)模集成電路(VLSI)、芯片制造和未來(lái)的計(jì)算趨勢(shì)。如果你一直對(duì)處理器內(nèi)部工作原理的細(xì)節(jié)感興趣,請(qǐng)繼續(xù)關(guān)注,因?yàn)檫@就是你想要了解的內(nèi)容。
CPU的原理
我們將從一個(gè)非常高的層次開(kāi)始,了解處理器的功能,以及各個(gè)組成部分在功能設(shè)計(jì)中是如何組合在一起的。這包括處理器內(nèi)核、內(nèi)存層次結(jié)構(gòu)、分支預(yù)測(cè)等等。首先,我們需要知道CPU的基本定義。最簡(jiǎn)單的解釋是CPU遵循一組指令,對(duì)一組輸入執(zhí)行某些操作。例如,可能是從內(nèi)存中讀取一個(gè)值,然后將其加上另一個(gè)值,最后將結(jié)果存儲(chǔ)在不同位置的內(nèi)存中。如果前一次計(jì)算的結(jié)果大于零,那么也可能是更復(fù)雜的事情,如將兩個(gè)數(shù)字相除。
當(dāng)你想要運(yùn)行一個(gè)像操作系統(tǒng)或游戲這樣的程序時(shí),程序本身就是CPU要執(zhí)行的一系列指令。這些指令從內(nèi)存中加載,并在一個(gè)簡(jiǎn)單的處理器上逐一執(zhí)行,直到程序完成。當(dāng)軟件開(kāi)發(fā)人員用高級(jí)語(yǔ)言(如C++或Python)編寫(xiě)程序時(shí),處理器無(wú)法理解。它只能理解1和0,所以我們需要一種方式來(lái)表示這種格式的代碼。
程序被編譯成一組稱為匯編語(yǔ)言的低級(jí)指令,作為指令集體系結(jié)構(gòu)(ISA)的一部分。這是CPU用來(lái)理解和執(zhí)行的一組指令。一些最常見(jiàn)的ISA是x86、MIPS、ARM、RISC-V和PowerPC。就像用C++編寫(xiě)函數(shù)的語(yǔ)法與用Python編寫(xiě)相同函數(shù)的語(yǔ)法不同一樣,每種ISA也有不同的語(yǔ)法。
這些ISA可以分為兩大類:固定長(zhǎng)度和可變長(zhǎng)度。RISC-V ISA使用固定長(zhǎng)度的指令,這意味著每條指令中一定數(shù)量的預(yù)定義位決定了它是哪種類型的指令。這與x86不同,x86使用可變長(zhǎng)度指令。在x86中,指令可以按照不同的方式進(jìn)行編碼,并且針對(duì)不同的部分使用不同的位數(shù)。由于這種復(fù)雜性,x86 CPU中的指令解碼器通常是整個(gè)設(shè)計(jì)中最復(fù)雜的部分。
固定長(zhǎng)度的指令允許更容易的解碼,因?yàn)樗鼈冇幸?guī)則的結(jié)構(gòu),但限制了ISA可以支持的總指令數(shù)。雖然普通版本的RISC-V架構(gòu)有大約100條指令,而且是開(kāi)源的,但是x86是專有的,沒(méi)有人知道究竟有多少條指令。人們通常認(rèn)為有幾千條x86指令,但確切的數(shù)字并不公開(kāi)。 盡管ISA之間存在差異,但它們都具有基本相同的核心功能。
一些RISC-V指令的示例。右邊的操作碼是7位,它決定了指令的類型。每條指令還包含要使用的寄存器和要執(zhí)行的功能的位。這就是匯編指令如何被分解成二進(jìn)制以便CPU理解。
現(xiàn)在我們準(zhǔn)備好打開(kāi)計(jì)算機(jī),開(kāi)始運(yùn)行程序。指令的執(zhí)行實(shí)際上有幾個(gè)基本部分,這些部分通過(guò)處理器的許多階段分解。
第一步是將指令從內(nèi)存提取到CPU中開(kāi)始執(zhí)行。第二步對(duì)指令進(jìn)行解碼,以便CPU能夠確定它是什么類型的指令。有很多類型,包括算術(shù)指令、分支指令和內(nèi)存指令。一旦CPU知道它正在執(zhí)行的指令類型,就從CPU中的存儲(chǔ)器或內(nèi)部寄存器收集指令的操作數(shù)。如果你想把數(shù)字A和數(shù)字B相加,在你真正知道A和B的值之前不能進(jìn)行相加。大多數(shù)現(xiàn)代處理器都是64位的,這意味著每個(gè)數(shù)據(jù)值的大小都是64位。
64位是指CPU寄存器、數(shù)據(jù)路徑,以及內(nèi)存地址的寬度。對(duì)于普通用戶來(lái)說(shuō),這意味著一臺(tái)計(jì)算機(jī)一次可以處理多少信息,最好與較小的32位體系結(jié)構(gòu)相比較來(lái)理解。64位體系結(jié)構(gòu)一次處理的信息位數(shù)是32位的兩倍。
在CPU有了指令的操作數(shù)之后,就移動(dòng)到執(zhí)行階段,在此階段對(duì)輸入執(zhí)行操作??赡苁菍?shù)字相加,對(duì)數(shù)字執(zhí)行邏輯操作,或者只是傳遞數(shù)字而不對(duì)其進(jìn)行修改。計(jì)算結(jié)果后,可能需要訪問(wèn)內(nèi)存來(lái)存儲(chǔ)結(jié)果,或者CPU可以將值保存在其內(nèi)部寄存器中。存儲(chǔ)結(jié)果后,CPU將更新各個(gè)元素的狀態(tài),然后轉(zhuǎn)到下一條指令。
當(dāng)然,這種描述是極大的簡(jiǎn)化,大多數(shù)現(xiàn)代處理器將把這幾個(gè)階段分解為20個(gè)或更多更小的階段,以提高效率。這意味著盡管處理器將在每個(gè)周期中啟動(dòng)和完成多個(gè)指令,但是任何一條指令從開(kāi)始到結(jié)束可能需要20個(gè)或更多的周期。這個(gè)模型通常被稱為流水線,因?yàn)樗枰欢螘r(shí)間來(lái)填充流水線,讓液體通過(guò)流水線,但是一旦流水線滿了,就會(huì)得到一個(gè)恒定的輸出。
4級(jí)流水線示例。彩色方框表示相互獨(dú)立的指令。(圖片來(lái)源:維基百科)
指令經(jīng)過(guò)的整個(gè)周期是一個(gè)非常精心編排的過(guò)程,但并非所有指令都可以同時(shí)完成。例如,加法非??欤ɑ驈膬?nèi)存加載可能需要數(shù)百個(gè)周期。大多數(shù)現(xiàn)代處理器都是無(wú)序執(zhí)行的,而不是在一條緩慢的指令完成時(shí)使整個(gè)處理器停止運(yùn)行。這意味著處理器將確定在給定時(shí)間執(zhí)行哪條指令最有益,并緩沖其他未準(zhǔn)備好的指令。如果當(dāng)前指令尚未就緒,則處理器可以在代碼中向前跳轉(zhuǎn),以查看是否有其他指令準(zhǔn)備就緒。
除了無(wú)序執(zhí)行之外,典型的現(xiàn)代處理器還采用了所謂的超標(biāo)量體系結(jié)構(gòu)(superscalar architecture)。這意味著在任何時(shí)候,處理器都在流水線的每個(gè)階段同時(shí)執(zhí)行許多指令。它可能還在等待數(shù)百條指令開(kāi)始執(zhí)行。為了能夠一次執(zhí)行許多指令,處理器將在每個(gè)流水線階段中包含多個(gè)副本。如果處理器看到兩條指令已經(jīng)準(zhǔn)備好執(zhí)行,并且它們之間沒(méi)有依賴關(guān)系,那么它將同時(shí)執(zhí)行這兩條指令,而不是等待它們分別完成。這種方法的一個(gè)常見(jiàn)實(shí)現(xiàn)稱為同步多線程(SMT),也稱為超線程。英特爾和AMD處理器目前支持雙向SMT,而IBM已開(kāi)發(fā)出支持多達(dá)八路SMT的芯片。
為了完成這種精心編排的執(zhí)行,處理器除了基本核心之外還有許多額外的元素。在一個(gè)處理器中有數(shù)百個(gè)單獨(dú)的模塊,每個(gè)模塊都有特定的用途,但我們將只簡(jiǎn)單介紹一下基本的功能。兩個(gè)最大和最有益的是緩存和分支預(yù)測(cè)器。我們不會(huì)涉及重新排序緩沖區(qū)、寄存器別名表和保留站這些結(jié)構(gòu)。
緩存的目的常常令人困惑,因?yàn)樗鼈兿?a href="http://www.nxhydt.com/tags/ram/" target="_blank">RAM或SSD一樣存儲(chǔ)數(shù)據(jù)。緩存的不同之處在于它們的訪問(wèn)延遲和速度。盡管RAM非常快,但對(duì)于CPU來(lái)說(shuō),它的速度慢了幾個(gè)數(shù)量級(jí)。RAM可能需要數(shù)百個(gè)周期才能對(duì)數(shù)據(jù)做出響應(yīng),處理器可能會(huì)陷入無(wú)事可做的境地。如果數(shù)據(jù)不在RAM中,則可能需要數(shù)萬(wàn)個(gè)周期才能訪問(wèn)SSD上的數(shù)據(jù)。沒(méi)有緩存,我們的處理器就會(huì)陷入停頓。
處理器通常具有三級(jí)緩存,形成所謂的內(nèi)存層次結(jié)構(gòu)。L1緩存最小且速度最快,L2位于中間,L3是最大且最慢的緩存。在層次結(jié)構(gòu)中的緩存之上是小型寄存器,在計(jì)算期間存儲(chǔ)單個(gè)數(shù)據(jù)值。這些寄存器是系統(tǒng)中速度最快的存儲(chǔ)設(shè)備。當(dāng)編譯器將高級(jí)程序轉(zhuǎn)換成匯編語(yǔ)言時(shí),它將確定使用這些寄存器的最佳方法。
當(dāng)CPU從內(nèi)存中請(qǐng)求數(shù)據(jù)時(shí),它將首先檢查該數(shù)據(jù)是否已經(jīng)存儲(chǔ)在L1緩存中。如果是,則可以在幾個(gè)周期內(nèi)快速訪問(wèn)數(shù)據(jù)。如果不存在,CPU將檢查L(zhǎng)2緩存并隨后搜索L3緩存。緩存的實(shí)現(xiàn)方式通常對(duì)核心是透明的。核心只需要在指定的內(nèi)存地址中請(qǐng)求一些數(shù)據(jù),層次結(jié)構(gòu)中的任何級(jí)別都將響應(yīng)它。當(dāng)我們進(jìn)入內(nèi)存層次結(jié)構(gòu)的后續(xù)階段時(shí),大小和延遲通常會(huì)增加幾個(gè)數(shù)量級(jí)。最后,如果CPU在任何緩存中都找不到它要查找的數(shù)據(jù),那么它就會(huì)進(jìn)入主內(nèi)存(RAM)。
在典型的處理器上,每個(gè)核心將有兩個(gè)L1緩存:一個(gè)用于數(shù)據(jù)緩存,一個(gè)用于指令緩存。L1緩存的總?cè)萘客ǔT?00KB左右,大小可能因芯片和代際而異。每個(gè)核心通常也有一個(gè)L2緩存,盡管在某些體系結(jié)構(gòu)中,它可能在兩個(gè)核心之間共享。L2緩存通常為幾百KB。最后,還有一個(gè)L3緩存在所有核心之間共享,大小為幾十MB。
當(dāng)處理器執(zhí)行代碼時(shí),它最常用的指令和數(shù)據(jù)值將被緩存。這極大地加快了執(zhí)行速度,因?yàn)樘幚砥鞑恍枰粩嗟卦L問(wèn)主存來(lái)獲取所需的數(shù)據(jù)。在本系列的第2部分和第3部分中,我們將更多地討論如何實(shí)現(xiàn)這些內(nèi)存系統(tǒng)。
除了緩存之外,現(xiàn)代處理器的另一個(gè)關(guān)鍵組件是精確的分支預(yù)測(cè)器。分支指令類似于處理器的“if”語(yǔ)句。如果條件為真,將執(zhí)行一組指令,如果條件為假,將執(zhí)行另一組指令。例如,你可能想比較兩個(gè)數(shù)字,如果它們相等,則執(zhí)行一個(gè)函數(shù),如果它們不同,則執(zhí)行另一個(gè)函數(shù)。這些分支指令非常常見(jiàn),大約占程序中所有指令的20%。
從表面上看,這些分支指令似乎沒(méi)什么問(wèn)題,但對(duì)于處理器來(lái)說(shuō),它們實(shí)際上非常具有挑戰(zhàn)性。因?yàn)樵谌魏螘r(shí)候,CPU可能同時(shí)執(zhí)行10條或20條指令,所以知道要執(zhí)行哪條指令是非常重要的。可能需要5個(gè)周期來(lái)確定當(dāng)前指令是否為分支,另外需要10個(gè)周期才能確定條件是否為真。在此期間,處理器可能已經(jīng)開(kāi)始執(zhí)行許多附加指令,甚至不知道這些指令是否是要執(zhí)行的正確指令。
為了解決這個(gè)問(wèn)題,所有現(xiàn)代高性能處理器都使用了一種稱為“推測(cè)”(speculation)的技術(shù)。這意味著處理器將跟蹤分支指令,并猜測(cè)是否將采用分支。如果預(yù)測(cè)是正確的,那么處理器已經(jīng)開(kāi)始執(zhí)行后續(xù)指令,因此這將帶來(lái)性能提升。如果預(yù)測(cè)不正確,那么處理器將停止執(zhí)行,刪除已經(jīng)開(kāi)始執(zhí)行的所有錯(cuò)誤指令,并從正確的位置重新開(kāi)始。
這些分支預(yù)測(cè)器(branch predictors )是機(jī)器學(xué)習(xí)的一些早期形式,因?yàn)轭A(yù)測(cè)器在運(yùn)行過(guò)程中學(xué)習(xí)分支的行為。如果預(yù)測(cè)錯(cuò)誤太多,它就會(huì)開(kāi)始學(xué)習(xí)正確的行為。幾十年來(lái)對(duì)分支預(yù)測(cè)技術(shù)的研究已經(jīng)使現(xiàn)代處理器的準(zhǔn)確率超過(guò)90%。
雖然推測(cè)帶來(lái)了巨大的性能提升,因?yàn)樘幚砥骺梢詧?zhí)行準(zhǔn)備好的指令,而不必在繁忙的指令上排隊(duì),但也暴露了安全漏洞。著名的幽靈攻擊(Spectre attack)就是利用了分支預(yù)測(cè)和猜測(cè)中的漏洞。攻擊者使用經(jīng)特殊設(shè)計(jì)的代碼來(lái)使處理器推測(cè)性地執(zhí)行會(huì)泄漏內(nèi)存值的代碼。推測(cè)的某些方面必須重新設(shè)計(jì),以確保數(shù)據(jù)不會(huì)泄露,這導(dǎo)致性能略有下降。
在過(guò)去的幾十年里,現(xiàn)代處理器的體系結(jié)構(gòu)已經(jīng)取得了長(zhǎng)足的進(jìn)步。創(chuàng)新和巧妙的設(shè)計(jì)帶來(lái)了更高的性能和對(duì)底層硬件的更好利用。不過(guò),CPU制造商對(duì)其處理器中的技術(shù)非常保密,因此不可能確切知道其內(nèi)部究竟發(fā)生了什么。話雖如此,計(jì)算機(jī)工作的基本原理在所有處理器上都是標(biāo)準(zhǔn)化的。英特爾可能會(huì)增加他們的秘密調(diào)整以提高緩存命中率,AMD可能會(huì)添加一個(gè)高級(jí)分支預(yù)測(cè)器,但他們都是完成相同的任務(wù)。
CPU設(shè)計(jì)過(guò)程
既然我們已經(jīng)了解了處理器在高層次上的工作原理,現(xiàn)在是深入了解內(nèi)部組件是如何設(shè)計(jì)的時(shí)候了。
你可能知道,處理器和其他大多數(shù)數(shù)字技術(shù)都是由晶體管構(gòu)成的。思考晶體管的最簡(jiǎn)單方法是把它想象成有三個(gè)引腳的可控開(kāi)關(guān)。當(dāng)柵極打開(kāi)時(shí),電就可以通過(guò)晶體管。當(dāng)柵極關(guān)閉時(shí),電流不能流動(dòng)。就像你墻上的電燈開(kāi)關(guān)一樣,但是要比電燈開(kāi)關(guān)小得多,速度也快得多,而且可以用電來(lái)控制。
現(xiàn)代處理器中使用的晶體管主要有兩種:PMOS和NMOS。NMOS晶體管在柵極充電或設(shè)置為高電平時(shí)允許電流流過(guò),PMOS晶體管在柵極放電或設(shè)置為低電平時(shí)允許電流流過(guò)。通過(guò)將這些類型的晶體管以互補(bǔ)的方式組合起來(lái),我們可以創(chuàng)建CMOS邏輯門。在本文中,我們不會(huì)詳細(xì)討論晶體管的工作原理,但我們將在本系列的第3部分中討論它。
邏輯門是一種簡(jiǎn)單的設(shè)備,它接受輸入,執(zhí)行一些操作,并輸出結(jié)果。例如,只有當(dāng)且僅當(dāng)門的所有輸入都處于打開(kāi)狀態(tài)時(shí),與門才會(huì)打開(kāi)其輸出。如果輸入關(guān)閉,那么反相器或非門將打開(kāi)其輸出。我們可以將這兩者結(jié)合起來(lái),創(chuàng)建一個(gè)與非門。當(dāng)且僅當(dāng)所有輸入都不打開(kāi)時(shí),它才打開(kāi)其輸出。還有其他具有不同邏輯功能的門,如或門、或非門、異或門和同或門。
下面我們可以看到兩個(gè)基本的邏輯門是如何從晶體管開(kāi)始設(shè)計(jì)的:一個(gè)反相器和一個(gè)與非門。在反相器中,頂部有一個(gè)PMOS晶體管連接到VDD,底部有一個(gè)NMOS晶體管連接到GND。PMOS晶體管的畫(huà)法是一個(gè)小圓圈連接到柵極上。我們說(shuō)過(guò),PMOS器件在輸入關(guān)閉時(shí)導(dǎo)通,NMOS器件在輸入打開(kāi)時(shí)導(dǎo)通,所以很容易看到輸出信號(hào)總是與輸入信號(hào)相反。再看看與非門,我們看到它需要四個(gè)晶體管,只要至少有一個(gè)輸入是關(guān)的,輸出就會(huì)打開(kāi)。設(shè)計(jì)更先進(jìn)的邏輯門和處理器內(nèi)部其他電路也是這種過(guò)程——將晶體管連接成這樣的簡(jiǎn)單網(wǎng)絡(luò)。
由于組件就像邏輯門一樣簡(jiǎn)單,所以很難看到它們?nèi)绾巫兂梢慌_(tái)正常運(yùn)行的計(jì)算機(jī)。此設(shè)計(jì)過(guò)程涉及到將多個(gè)門組合在一起,以創(chuàng)建一個(gè)可以執(zhí)行簡(jiǎn)單功能的小型器件。然后,你可以連接許多這樣的器件,形成能夠執(zhí)行更高級(jí)功能的器件。組合單個(gè)組件以創(chuàng)建工作設(shè)計(jì)的過(guò)程正是當(dāng)今用于創(chuàng)建現(xiàn)代芯片的過(guò)程。唯一不同的是,一個(gè)現(xiàn)代芯片有數(shù)十億個(gè)晶體管。
舉一個(gè)簡(jiǎn)單的例子,我們將看到一個(gè)基本的加法器——1位全加器。它接受三個(gè)輸入——A、B和輸入進(jìn)位(Carry-In),并產(chǎn)生兩個(gè)輸出——和(Sum)與輸出進(jìn)位(Carry-Out)?;驹O(shè)計(jì)使用五個(gè)邏輯門,它們可以連接在一起,創(chuàng)建你想要的任意大小的加法器。現(xiàn)代設(shè)計(jì)通過(guò)優(yōu)化一些邏輯和進(jìn)位信號(hào)來(lái)改進(jìn)這一點(diǎn),但基本原理仍然相同。
如果A、B二者之一處于打開(kāi)狀態(tài),或者存在輸入進(jìn)位信號(hào),且A、B全開(kāi)或全關(guān),那么輸出和就是開(kāi)。輸出進(jìn)位有點(diǎn)復(fù)雜。當(dāng)A和B同時(shí)開(kāi)時(shí),或者存在輸入進(jìn)位信號(hào)且A、B二者之一處于打開(kāi)狀態(tài),此時(shí)輸出進(jìn)位是有效的。要連接多個(gè)1位加法器以形成更寬的加法器,只需將前一位的輸出進(jìn)位連接到當(dāng)前位的輸入進(jìn)位。電路越復(fù)雜,邏輯就越混亂,但這是最簡(jiǎn)單的兩個(gè)數(shù)字相加的方法?,F(xiàn)代處理器使用更復(fù)雜的加法器,但是這些設(shè)計(jì)太復(fù)雜了,無(wú)法像這樣進(jìn)行概述。除了加法器,處理器還包含所有這些操作的除法、乘法和浮點(diǎn)運(yùn)算的單元。
將一系列這樣的門組合起來(lái)對(duì)輸入執(zhí)行某種功能稱為組合邏輯(Combinational Logic)。然而,這種邏輯并不是計(jì)算機(jī)中唯一存在的東西。如果我們不能存儲(chǔ)數(shù)據(jù)或跟蹤任何東西的狀態(tài),那么就沒(méi)有多大用處。為此,我們需要具有存儲(chǔ)數(shù)據(jù)能力的時(shí)序邏輯。
時(shí)序邏輯是通過(guò)仔細(xì)連接反相器和其他邏輯門來(lái)構(gòu)建的,使得它們的輸出反饋到門的輸入。這些反饋回路用于存儲(chǔ)一位數(shù)據(jù),稱為靜態(tài)RAM或SRAM。它被稱為靜態(tài)RAM而不是動(dòng)態(tài)DRAM的原因是,存儲(chǔ)的數(shù)據(jù)總是直接連接到正電壓或GND。
實(shí)現(xiàn)單個(gè)SRAM的標(biāo)準(zhǔn)方法是使用如下所示的6個(gè)晶體管。頂部信號(hào)(標(biāo)記為WL,Word Line)是地址,當(dāng)它被使能時(shí),存儲(chǔ)在這個(gè)1位單元中的數(shù)據(jù)被發(fā)送到的位線(標(biāo)記為BL,Bit Line)。BLB輸出被稱為Bit Line Bar,即位線的翻轉(zhuǎn)值。你應(yīng)該認(rèn)識(shí)晶體管的兩種類型,并且M3、M1與M4、M2一起構(gòu)成了一個(gè)反相器。
SRAM用于在處理器中構(gòu)建超高速緩存和寄存器。它非常穩(wěn)定,但是需要6到8個(gè)晶體管來(lái)存儲(chǔ)每一位數(shù)據(jù)。這使得它與DRAM相比,在成本、復(fù)雜性和芯片面積方面生產(chǎn)成本極高。另一方面,動(dòng)態(tài)RAM將數(shù)據(jù)存儲(chǔ)在微型電容中,而不是使用邏輯門。它被稱為動(dòng)態(tài)的原因是電容器的電壓可以動(dòng)態(tài)變化,因?yàn)樗鼪](méi)有連接到電源或GND。只有一個(gè)晶體管用于訪問(wèn)存儲(chǔ)在電容器中的數(shù)據(jù)。
由于DRAM每位只需要一個(gè)晶體管,而且設(shè)計(jì)非??蓴U(kuò)展,因此可以密集且廉價(jià)地進(jìn)行封裝。DRAM的一個(gè)缺點(diǎn)是電容器中的電荷太小,需要不斷刷新。這就是為什么當(dāng)你關(guān)掉計(jì)算機(jī)時(shí),電容全部耗盡,RAM中的數(shù)據(jù)丟失。
英特爾、AMD和英偉達(dá)等公司當(dāng)然不會(huì)發(fā)布它們的處理器工作原理圖,所以對(duì)于現(xiàn)代處理器,無(wú)法展示完整的圖紙。但是,這個(gè)簡(jiǎn)單的加法器應(yīng)該可以讓您很好地了解如何將處理器中最復(fù)雜的部分拆分為邏輯門、存儲(chǔ)單元,然后再拆分為晶體管。
既然我們已經(jīng)知道了處理器的一些組件是如何構(gòu)造的,那么我們就需要弄清楚如何將所有東西連接起來(lái)并同步它們。處理器中的所有關(guān)鍵部件都連接到時(shí)鐘信號(hào)上。它以預(yù)定義的間隔(稱為頻率)在“高”和“低”之間交替。處理器內(nèi)部的邏輯通常在時(shí)鐘從低到高時(shí)切換數(shù)值并執(zhí)行計(jì)算。通過(guò)將所有數(shù)據(jù)同步在一起,我們可以確保數(shù)據(jù)總是在正確的時(shí)間到達(dá),這樣處理器中就不會(huì)出現(xiàn)任何故障。
你可能聽(tīng)說(shuō)過(guò),可以提高處理器的時(shí)鐘(稱為超頻)以提高其性能。這種性能提升來(lái)自于處理器內(nèi)部晶體管和邏輯的切換速度比設(shè)計(jì)的要快。由于每秒有更多的周期,所以可以完成更多的工作,處理器將具有更高的性能。不過(guò)在某種程度上,這是正確的。現(xiàn)代處理器通常運(yùn)行在3.0GHz~4.5GHz之間,而在過(guò)去的十年中,這種情況似乎并沒(méi)有改變。就像金屬鏈的強(qiáng)度只取決于最弱的一環(huán)一樣,處理器的運(yùn)行速度也只能和最慢的部分一樣快。在每個(gè)時(shí)鐘周期結(jié)束時(shí),處理器中的每個(gè)部件都需要完成其操作。如果時(shí)鐘太快,有某個(gè)部分還沒(méi)有完成,處理器就無(wú)法工作。設(shè)計(jì)人員將這個(gè)最慢的部分稱為關(guān)鍵路徑,它設(shè)置了處理器運(yùn)行的最大頻率。超過(guò)一定的頻率,晶體管無(wú)法足夠快地開(kāi)關(guān),并將開(kāi)始出現(xiàn)故障或產(chǎn)生不正確的輸出。
通過(guò)提高處理器的電源電壓,我們可以加快晶體管的開(kāi)關(guān)速度,但這也只能在一定程度上起作用。如果我們施加太高的電壓,就有燒壞處理器的危險(xiǎn)。當(dāng)我們提高處理器的頻率或電壓時(shí),它總會(huì)產(chǎn)生更多的熱量,并消耗更多的能量。這是因?yàn)樘幚砥鞯墓β逝c頻率成正比,與電壓的平方成正比。為了確定處理器的功耗,我們通常認(rèn)為每個(gè)晶體管都是一個(gè)小電容,當(dāng)它改變值時(shí)必須充電或放電。
功率傳輸是處理器非常重要的一部分,在某些情況下,芯片上一半的物理引腳可能僅用于電源或接地。一些芯片在滿載時(shí)可能會(huì)產(chǎn)生超過(guò)150安培的電流,這些電流必須非常小心地管理。從這個(gè)角度看,CPU每單位面積產(chǎn)生的熱量要比核反應(yīng)堆多。
現(xiàn)代處理器中的時(shí)鐘約占其總功率的30%~40%,因?yàn)樗浅?fù)雜,必須驅(qū)動(dòng)許多不同的器件。為了節(jié)約能源,大多數(shù)低功耗設(shè)計(jì)會(huì)在芯片不使用的時(shí)候關(guān)閉芯片的某些部分。這可以通過(guò)關(guān)閉時(shí)鐘(稱為時(shí)鐘門控)或關(guān)閉電源(稱為電源門控)來(lái)完成。
時(shí)鐘給處理器的設(shè)計(jì)帶來(lái)了另一個(gè)挑戰(zhàn),因?yàn)殡S著時(shí)鐘頻率的不斷增加,物理定律開(kāi)始阻礙它的發(fā)展。盡管光速非???,但對(duì)于高性能處理器來(lái)說(shuō),光速還不夠快。如果你將時(shí)鐘連接到芯片的一端,當(dāng)信號(hào)到達(dá)另一端時(shí),它會(huì)出現(xiàn)相當(dāng)嚴(yán)重的不同步。為了使芯片的所有部分保持相同時(shí)間,時(shí)鐘使用所謂的H-Tree來(lái)分配。這是一種結(jié)構(gòu),可確保所有端點(diǎn)與中心的距離完全相同。
在一個(gè)芯片中設(shè)計(jì)每一個(gè)晶體管、時(shí)鐘信號(hào)和電源連接看起來(lái)或許非常繁瑣和復(fù)雜,這肯定是真的。盡管英特爾、高通和AMD等公司有成千上萬(wàn)名工程師,但他們不可能手動(dòng)設(shè)計(jì)芯片的各個(gè)方面。為了在如此大的規(guī)模上組裝芯片,他們使用了各種先進(jìn)的工具來(lái)為他們生成設(shè)計(jì)和原理圖。這些工具通常會(huì)對(duì)組件應(yīng)該執(zhí)行的操作進(jìn)行高級(jí)別的描述,并確定滿足這些要求的最佳硬件配置。最近出現(xiàn)了一種名為“高級(jí)綜合”的技術(shù),它允許開(kāi)發(fā)人員在代碼中指定他們想要的功能,然后讓計(jì)算機(jī)找出如何在硬件中以最佳方式實(shí)現(xiàn)它。
正如你可以通過(guò)代碼定義計(jì)算機(jī)程序一樣,設(shè)計(jì)人員也可以通過(guò)代碼定義硬件。Verilog和VHDL等語(yǔ)言允許硬件設(shè)計(jì)人員表達(dá)他們正在制作的任意電路的功能。仿真和驗(yàn)證是在這些設(shè)計(jì)上進(jìn)行的,如果一切都通過(guò)了,它們就可以被合成到構(gòu)成電路的特定晶體管中。雖然驗(yàn)證可能不像設(shè)計(jì)一個(gè)新的緩存或核心那樣華而不實(shí),但它要重要得多。對(duì)于公司雇用的每位設(shè)計(jì)工程師,可能有五名或更多的驗(yàn)證工程師。
驗(yàn)證一個(gè)新設(shè)計(jì)通常比制造實(shí)際的芯片本身要花費(fèi)更多的時(shí)間和金錢。公司在驗(yàn)證上花費(fèi)了大量的時(shí)間和金錢,因?yàn)橐坏┬酒度肷a(chǎn),就沒(méi)有辦法修復(fù)。使用軟件,你只需要發(fā)布一個(gè)補(bǔ)丁,但硬件不是這樣。例如,英特爾的某些奔騰芯片的浮點(diǎn)分區(qū)單元中存在bug,最終導(dǎo)致它們損失了大約20億美元。
你可能很難想象一個(gè)芯片如何擁有數(shù)十億個(gè)晶體管以及它們所做的一切。當(dāng)你把芯片分解成單獨(dú)的內(nèi)部組件時(shí),事情就簡(jiǎn)單多了。晶體管構(gòu)成邏輯門,邏輯門被組合成執(zhí)行特定任務(wù)的功能單元,這些功能單元連接在一起形成我們?cè)诘?部分中討論的計(jì)算機(jī)體系結(jié)構(gòu)。
大部分設(shè)計(jì)工作都是自動(dòng)化的,但這應(yīng)該會(huì)讓你對(duì)你購(gòu)買的新CPU有多么復(fù)雜有了新的認(rèn)識(shí)。
構(gòu)建芯片:芯片的布局和物理構(gòu)建
如何把一堆沙子變成高級(jí)處理器?讓我們看看。
如前所述,處理器和所有其他數(shù)字邏輯都是由晶體管構(gòu)成的。晶體管是一種電子控制開(kāi)關(guān),我們可以通過(guò)施加或消除柵極上的電壓來(lái)打開(kāi)或關(guān)閉它。我們討論了兩種主要類型的晶體管:當(dāng)柵極打開(kāi)時(shí)允許電流流過(guò)的NMOS器件和在柵極關(guān)閉時(shí)允許電流流過(guò)的PMOS器件。處理器內(nèi)部的晶體管的基本結(jié)構(gòu)是硅。硅被稱為半導(dǎo)體,因?yàn)樗荒芡耆珜?dǎo)電或絕緣;它位于二者之間的某個(gè)位置。
為了通過(guò)添加晶體管將硅片變成有用的電路,制造工程師使用了一種稱為摻雜的工藝。摻雜工藝包括將精心選擇的雜質(zhì)添加到硅襯底中以改變其導(dǎo)電性。這里的目標(biāo)是改變電子的行為方式,以便我們能夠控制它們。就像有兩種晶體管一樣,摻雜也有兩種主要的對(duì)應(yīng)類型。
如果我們添加精確控制數(shù)量的電子給體元素,如砷、銻或磷,就可以創(chuàng)建一個(gè)n型區(qū)域。由于現(xiàn)在施加這些元素的硅區(qū)域具有多余的電子,因此它將帶負(fù)電。這就是n型和NMOS中的“n”的由來(lái)。通過(guò)在硅中加入硼、銦、鎵等電子受體元素,我們可以得到帶正電荷的p型區(qū)域。這就是p型和PMOS中的“p”的由來(lái)。將這些雜質(zhì)添加到硅中的具體過(guò)程稱為離子注入和擴(kuò)散,這超出了本文的范圍。
既然我們可以控制硅的某些部分的電導(dǎo)率,就可以結(jié)合多個(gè)區(qū)域的特性來(lái)制造晶體管。集成電路中使用的晶體管稱為MOSFET(金屬氧化物半導(dǎo)體場(chǎng)效應(yīng)晶體管),有四個(gè)連接。我們控制的電流流經(jīng)源極和漏極。在n溝道器件中,它通常從漏極流入從源極流出,而在p溝道器件中,它通常從源極流入從漏極流出。柵極是用來(lái)開(kāi)關(guān)晶體管的開(kāi)關(guān)。最后,器件的主體與處理器無(wú)關(guān),所以我們不在這里討論。
硅制反相器的物理結(jié)構(gòu)。每個(gè)著色區(qū)域具有不同的導(dǎo)電特性。注意不同的硅組件與右邊的原理圖的對(duì)應(yīng)關(guān)系。
晶體管的工作原理以及不同區(qū)域如何相互作用的技術(shù)細(xì)節(jié)足以填滿研究生水平的大學(xué)課程,因此我們將只觸及基礎(chǔ)知識(shí)。晶體管的工作原理的一個(gè)很好的類比是河上的吊橋。汽車就像晶體管中的電子,會(huì)從河的一邊流向另一邊,即晶體管的源極和漏極。以NMOS器件為例,當(dāng)柵極不帶電時(shí),吊橋上升,電子不能流過(guò)溝道。當(dāng)我們放下吊橋時(shí),河上形成了一條道路,汽車可以自由移動(dòng)。同樣的事情也發(fā)生在晶體管上。充電的柵極在源極和漏極之間形成一個(gè)溝道,允許電流流動(dòng)。
為了能夠精確控制硅的不同p和n區(qū)域,英特爾和臺(tái)積電這樣的制造商使用一種稱為光刻的工藝。這是一個(gè)非常復(fù)雜的多步驟工藝,公司花費(fèi)數(shù)十億美元來(lái)完善它,以便能夠制造更小、更快、更節(jié)能的晶體管。想象一下,有一臺(tái)超精密打印機(jī)可以用來(lái)在硅片上繪制每個(gè)區(qū)域的圖案。
在芯片中制造晶體管的過(guò)程是從一個(gè)純晶圓開(kāi)始的。晶圓在爐中加熱,頂部生長(zhǎng)一層薄薄的二氧化硅。然后在二氧化硅上涂上一種光敏光刻膠聚合物。通過(guò)將特定頻率的光照射到光刻膠上,我們可以在我們想要摻雜的區(qū)域剝離光刻膠。這是光刻步驟,類似于打印機(jī)將墨水印到頁(yè)面的某些區(qū)域,只是尺度小得多。
晶圓被氫氟酸蝕刻以溶解除去光刻膠的二氧化硅。然后除去光刻膠,只留下下面的氧化層。摻雜離子可以被應(yīng)用到晶圓上,并且只能在氧化物中有間隙的地方植入。
這種掩膜、成像和摻雜的過(guò)程要重復(fù)數(shù)十次,才能慢慢地在半導(dǎo)體中建立起每個(gè)特征層。一旦硅基底完成,金屬連接將在頂部制造,以把不同的晶體管連接到一起。我們稍后會(huì)詳細(xì)介紹這些連接和金屬層。
當(dāng)然,芯片制造商并不是一次只生產(chǎn)一個(gè)晶體管。當(dāng)一個(gè)新芯片被設(shè)計(jì)出來(lái)時(shí),他們將為制造過(guò)程中的每一步生成掩模。這些掩模將包含芯片上數(shù)十億個(gè)晶體管的每個(gè)元件的位置。多個(gè)芯片組合在一起,并在一個(gè)裸片上一次制造。
一旦晶圓被制造出來(lái),各個(gè)裸片就會(huì)被切割和封裝。根據(jù)芯片的大小,每個(gè)晶圓可以容納數(shù)百個(gè)或更多的芯片。通常情況下,芯片的功能越強(qiáng),裸片就越大,制造商從每個(gè)晶圓上得到的芯片就越少。
我們很容易想到,我們應(yīng)該制造超級(jí)強(qiáng)大的、擁有數(shù)百個(gè)內(nèi)核的大規(guī)模芯片,但這是不可能的。目前,阻礙我們制造越來(lái)越大芯片的最大因素是制造工藝中的缺陷。現(xiàn)代芯片有數(shù)十億個(gè)晶體管,如果其中一個(gè)的一個(gè)部分壞了,整個(gè)芯片可能需要廢棄。隨著處理器尺寸的增大,芯片出現(xiàn)故障的幾率也會(huì)增加。
公司從制造過(guò)程中獲得的實(shí)際收益是保密的,但70%~90%是很好的估計(jì)。公司通常會(huì)使用額外的功能來(lái)過(guò)度設(shè)計(jì)芯片,因?yàn)樗麄冎滥承┎考o(wú)法工作。例如,英特爾可能會(huì)設(shè)計(jì)一個(gè)8核芯片,但只將其作為6核芯片出售,因?yàn)樗麄児烙?jì)一個(gè)或兩個(gè)核可能會(huì)損壞。在一個(gè)稱為“binning”的過(guò)程中,缺陷數(shù)量非常少的芯片通常被預(yù)留出來(lái)以更高的價(jià)格出售。
與芯片制造相關(guān)的最大營(yíng)銷術(shù)語(yǔ)之一是特征尺寸。例如,英特爾正在努力實(shí)現(xiàn)10nm工藝,AMD正在為一些GPU使用7nm工藝,而臺(tái)積電已開(kāi)始研發(fā)5nm工藝。但是,這些數(shù)字意味著什么呢?傳統(tǒng)上,特征尺寸表示晶體管的漏極和源極之間的最小寬度。隨著技術(shù)的進(jìn)步,我們已經(jīng)能夠縮小晶體管,以便能夠在單個(gè)芯片上容納越來(lái)越多的晶體管。隨著晶體管變得越來(lái)越小,它們也變得越來(lái)越快。
在查看這些數(shù)字時(shí),需要注意的是,一些公司可能會(huì)根據(jù)不同的指標(biāo)而不是標(biāo)準(zhǔn)寬度來(lái)確定工藝尺寸。這意味著不同公司的不同尺寸的工藝實(shí)際上可能產(chǎn)生相同尺寸的晶體管。另一方面,在給定的工藝中,并非所有的晶體管都是相同的大小。設(shè)計(jì)師可能會(huì)根據(jù)某些權(quán)衡來(lái)選擇制造比其他晶體管更大的晶體管。對(duì)于給定的設(shè)計(jì)過(guò)程,較小的晶體管將更快,因?yàn)樗臇艠O充放電需要的時(shí)間更短。然而,較小的晶體管只能驅(qū)動(dòng)很小數(shù)量的輸出。某個(gè)特定的部件,如果邏輯要驅(qū)動(dòng)的東西需要很大的功率,如輸出引腳,它就需要做得更大。這些輸出晶體管可能比內(nèi)部邏輯晶體管大幾個(gè)數(shù)量級(jí)。
一張最新的AMD Zen處理器的照片。這個(gè)設(shè)計(jì)由幾十億個(gè)晶體管組成。
然而,設(shè)計(jì)和制造晶體管只是芯片的一半。我們需要根據(jù)原理圖把所有的東西連接起來(lái)。這些連接使用晶體管上方的金屬層制成。請(qǐng)?jiān)O(shè)想多層公路交匯處,有上坡道、下坡道和相互交叉的不同道路。這正是芯片內(nèi)部發(fā)生的事情,不過(guò)尺度要小得多。不同的工藝在晶體管上方會(huì)有不同數(shù)量的金屬互連層。隨著晶體管變得越來(lái)越小,我們需要更多的金屬層來(lái)傳送所有的信號(hào)。臺(tái)積電即將推出的5nm工藝有15個(gè)金屬層。設(shè)想一座15層的垂直公路立交橋,這會(huì)讓你了解芯片內(nèi)部的布線有多復(fù)雜。
下面的顯微鏡圖像顯示了由七個(gè)金屬層組成的晶格。每一層都是平坦的,隨著它們的升高,這些層變得更大,以減小電阻。每一層之間都有被稱為通孔的小金屬圓柱體,用于跳躍到更高層。每一層通常與下面的一層在方向上交替,以便減少不必要的電容。奇數(shù)層可用作水平連接,偶數(shù)層可用作垂直連接。
正如你所能想象的,所有這些信號(hào)和金屬層都變得難以快速管理。為了幫助解決這個(gè)問(wèn)題,計(jì)算機(jī)程序被用來(lái)自動(dòng)放置和布線晶體管。根據(jù)設(shè)計(jì)的先進(jìn)程度,程序甚至可以將高級(jí)C代碼中的函數(shù)轉(zhuǎn)換為每根導(dǎo)線和晶體管的物理位置。通常情況下,芯片制造商會(huì)讓計(jì)算機(jī)自動(dòng)生成大部分設(shè)計(jì),然后他們會(huì)手工對(duì)某些關(guān)鍵部分進(jìn)行優(yōu)化。
當(dāng)公司想要制造一種新的芯片時(shí),他們將從制造公司提供的標(biāo)準(zhǔn)單元開(kāi)始他們的設(shè)計(jì)。例如,英特爾或臺(tái)積電將為設(shè)計(jì)師提供邏輯門或存儲(chǔ)單元等基本部件。設(shè)計(jì)人員可以將這些標(biāo)準(zhǔn)單元組合到他們想要構(gòu)建的任意芯片中。然后,他們將芯片的晶體管和金屬層的布局發(fā)送給代工廠,代工廠是將硅制造成功能芯片的地方。這些布局被轉(zhuǎn)換成掩模,在我們上面提到的制造過(guò)程中使用。接下來(lái),我們將了解一個(gè)非常基本的芯片的設(shè)計(jì)過(guò)程。
首先,我們看看反相器的布局,這是一個(gè)標(biāo)準(zhǔn)單元。頂部的斜切綠色矩形是PMOS晶體管,底部的透明綠色矩形是NMOS晶體管。垂直紅線為多晶硅柵極,藍(lán)色區(qū)域?yàn)榻饘?,紫色區(qū)域?yàn)榻饘?。輸入A位于左側(cè),輸出Y位于右側(cè)。電源和GND連接在金屬2的頂部和底部。
把幾個(gè)門結(jié)合起來(lái),我們得到了一個(gè)基本的1位算術(shù)單元。這種設(shè)計(jì)可以對(duì)兩個(gè)1位輸入進(jìn)行加法、減法和邏輯運(yùn)算。垂直方向的藍(lán)色切割導(dǎo)線是金屬3層。導(dǎo)線兩端稍大的正方形是連接兩層的通孔。
最后,將許多單元和大約2000個(gè)晶體管組合在一起,我們得到了一個(gè)基本的4位處理器,在四個(gè)金屬層上有8字節(jié)的RAM。看看它有多復(fù)雜,我們可以想象設(shè)計(jì)一個(gè)64位CPU的困難,它有兆字節(jié)的緩存、多個(gè)核心和20多個(gè)流水線階段??紤]到當(dāng)今高性能CPU可以擁有50億~100億個(gè)晶體管和12個(gè)金屬層,毫不夸張地說(shuō),它實(shí)際上要比這個(gè)復(fù)雜數(shù)百萬(wàn)倍。
這應(yīng)該會(huì)讓你理解為什么你的新CPU是一項(xiàng)昂貴的技術(shù),以及為什么AMD和英特爾在產(chǎn)品發(fā)布之間花了這么長(zhǎng)時(shí)間。一般來(lái)說(shuō),一個(gè)新芯片從設(shè)計(jì)階段進(jìn)入市場(chǎng)需要3~5年的時(shí)間。這意味著今天最快的芯片是用幾年前的技術(shù)制造出來(lái)的,而我們?cè)谠S多年內(nèi)都不會(huì)看到使用當(dāng)今最先進(jìn)制造技術(shù)的芯片。
由此,我們完成了對(duì)處理器構(gòu)建方式的深入研究。
-
解碼器
+關(guān)注
關(guān)注
9文章
1131瀏覽量
40676 -
寄存器
+關(guān)注
關(guān)注
31文章
5317瀏覽量
120005 -
cpu
+關(guān)注
關(guān)注
68文章
10825瀏覽量
211146 -
晶體管
+關(guān)注
關(guān)注
77文章
9634瀏覽量
137847
原文標(biāo)題:如何設(shè)計(jì)和生產(chǎn)CPU?這篇文章說(shuō)得最詳細(xì)!
文章出處:【微信號(hào):bdtdsj,微信公眾號(hào):中科院半導(dǎo)體所】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論