汽車(chē)系統(tǒng)級(jí)芯片SoC的核心構(gòu)成包括CPU、GPU、AI加速器和片上總線及互聯(lián)。CPU目前主要是ARM架構(gòu),x86架構(gòu)和RISC-V架構(gòu)。ARM架構(gòu)占據(jù)絕大多數(shù)市場(chǎng)。
圖片來(lái)源:互聯(lián)網(wǎng)
這是2013年ARM初創(chuàng)期的商業(yè)模式,時(shí)至今日變化不大,只是更新速度大大加快了,基本上一年一個(gè)新架構(gòu)。ARM的半導(dǎo)體協(xié)作者主要是晶圓代工廠,二者需要相互支持,目前能跟上ARM步伐的只有臺(tái)積電和三星。
ARM授權(quán)分4個(gè)等級(jí)。
圖片來(lái)源:互聯(lián)網(wǎng)
從1到4授權(quán)費(fèi)依次遞增,可定制的深度依次遞增,開(kāi)發(fā)難度依次遞增。想開(kāi)箱即用,選POP IP,基本上可以直接給晶圓代工廠制作芯片,ARM已在各方面優(yōu)化過(guò)了,沒(méi)有任何改動(dòng)空間。想要公版架構(gòu)無(wú)法給與的差異化性能與體驗(yàn),上架構(gòu)授權(quán)是不二選擇。指令集是通過(guò)物理硬件晶體管寄存器嵌入進(jìn)架構(gòu)里的,它不像是一個(gè)軟件,更像是一個(gè)硬件。因此要獲得架構(gòu)授權(quán)就必須獲得指令集授權(quán),兩者無(wú)法分割。但如果不是架構(gòu)授權(quán),就無(wú)需獲得指令集授權(quán)。
三種IP對(duì)比
圖片來(lái)源:互聯(lián)網(wǎng)
第二級(jí)Artisan Physical IP有時(shí)亦簡(jiǎn)寫(xiě)為IP。廠商拿到ARM的處理器部分的Core授權(quán)之后(Verilog-HDL形式的CPU設(shè)計(jì)源碼,也就是上面的軟核部分),結(jié)合廠商自身的外設(shè)和存儲(chǔ),在EDA工具的配合下進(jìn)入固核的設(shè)計(jì)階段。IP Core授權(quán)的內(nèi)容不止包含處理器,還包含ARM公版的外設(shè)、內(nèi)存控制器等,廠商有選擇的余地。
BoC是2016年特別為高通打造的授權(quán)方式,也叫Cortex授權(quán)。
圖片來(lái)源:互聯(lián)網(wǎng)
上圖為BoC與架構(gòu)授權(quán)之間的區(qū)別,據(jù)說(shuō)只有高通使用。架構(gòu)授權(quán)是最高級(jí)的,難度也最高,價(jià)格也最貴,靈活程度最高,蘋(píng)果是架構(gòu)授權(quán)里做得最好的,改動(dòng)幅度最大,特別是前端和指令集窗口,都做了大幅度改動(dòng)。其他廠家也有改動(dòng),但改動(dòng)幅度很小,特別是前端幾乎沒(méi)有任何改動(dòng)。
圖片來(lái)源:互聯(lián)網(wǎng)
微架構(gòu)就是像A57、A78這樣的稱(chēng)之為微架構(gòu)。微架構(gòu)分前端、執(zhí)行引擎和存儲(chǔ)系統(tǒng)三個(gè)組成部分。依照關(guān)鍵程度有譯碼寬度、緩存容量、ALU數(shù)量、發(fā)射端口、指令緩存。
這一節(jié)只講譯碼寬度。影響CPU算力最關(guān)鍵的參數(shù)是Decode Wide譯碼寬度,譯碼寬度可簡(jiǎn)單等同于每周期指令數(shù)量即IPC,即每個(gè)周期完成多少個(gè)指令。
資料來(lái)源:互聯(lián)網(wǎng)
譯碼寬度的增加是非常困難的,不是想多少就多少的。簡(jiǎn)單來(lái)說(shuō)每增加一位寬度,系統(tǒng)復(fù)雜度便會(huì)提高15%左右,裸晶面積也就是成本會(huì)增加15-20%左右。如果簡(jiǎn)單地增加譯碼寬度,那么成本也會(huì)上漲,廠家就缺乏更新的動(dòng)力,所以ARM的做法是配合臺(tái)積電和三星的先進(jìn)工藝,利用晶體管密度的提高來(lái)減少裸晶面積降低成本,因此ARM的每一次譯碼寬度升級(jí)均需先進(jìn)制造工藝的配合,否則成本增加比較多。同時(shí)ARM也從商業(yè)角度考慮,每年小升級(jí)一次,年年都有提升空間。8位寬度是目前的極限,蘋(píng)果一次到位使用8位寬度,缺點(diǎn)是必須使用臺(tái)積電最先進(jìn)的制造工藝,但蘋(píng)果依然使用的是ARM的指令集。
此外,RISC和CISC還有區(qū)別,CISC增加寬度更難,但CISC的1位寬度基本可頂RISC的1.2-1.5位。英特爾是有實(shí)力壓制蘋(píng)果的,就是制造工藝不如臺(tái)積電。CISC指令的長(zhǎng)度不固定,RISC則是固定的。因?yàn)殚L(zhǎng)度固定,可以分割為8個(gè)并行指令進(jìn)入8個(gè)解碼器,但CISC就不能,它不知道指令的長(zhǎng)度。因此CISC的分支預(yù)測(cè)器比RISC要復(fù)雜很多,當(dāng)然目前RISC也有長(zhǎng)度可變的指令。遇到有些長(zhǎng)指令,CISC可以一次完成,RISC因?yàn)殚L(zhǎng)度固定,就像公交車(chē)站,一定要在某個(gè)站停留一下,肯定不如CISC快。也就是說(shuō),RISC一定要跟指令集,操作系統(tǒng)做優(yōu)化,RISC是以軟件為核心,針對(duì)某些特定軟件做的硬件,而CISC相反,他以硬件為核心,針對(duì)所有類(lèi)型的軟件開(kāi)發(fā)的。
要全面理解微架構(gòu),我們先取一個(gè)簡(jiǎn)化模型,如下圖。
典型CPU簡(jiǎn)化架構(gòu)
資料來(lái)源:互聯(lián)網(wǎng)
程序控制:控制程序中指令執(zhí)行的順序。
操作控制:產(chǎn)生指令執(zhí)行所需的操作控制信號(hào),以控制執(zhí)行部件運(yùn)行。
時(shí)序控制:控制每個(gè)操作控制信號(hào)的開(kāi)始和持續(xù)時(shí)間。
數(shù)據(jù)加工:對(duì)數(shù)據(jù)進(jìn)行運(yùn)算,在相關(guān)部件間傳送。
中斷處理:及時(shí)響應(yīng)內(nèi)部異常和外部中斷請(qǐng)求。
指令簡(jiǎn)單流程,資料來(lái)源:互聯(lián)網(wǎng)
一條指令的執(zhí)行通常包括以下4個(gè)步驟: 取值(Fetch):CPU里的控制器查詢(xún)下一條指令的地址,并向存儲(chǔ)器發(fā)起請(qǐng)求;存儲(chǔ)器返回該地址對(duì)應(yīng)的存儲(chǔ)單元上的指令給控制器并存放到存放當(dāng)前指令的位置上,此時(shí)控制器更新下一條指令的地址。譯碼(Decode):控制器解析指令,將之轉(zhuǎn)化為一系列的控制信號(hào)(包括去哪里取運(yùn)算數(shù),對(duì)應(yīng)的運(yùn)算符,運(yùn)算結(jié)果的存放位置等)。執(zhí)行(Execute):根據(jù)譯碼的控制信號(hào)執(zhí)行指令,從存儲(chǔ)器的存儲(chǔ)單元或CPU內(nèi)部的通用寄存器上讀取運(yùn)算數(shù),然后根據(jù)指令規(guī)定的運(yùn)算符,讓運(yùn)算器進(jìn)行運(yùn)算?;貙?xiě)(Write-back):根據(jù)指令要求,把運(yùn)算器的運(yùn)算結(jié)果存儲(chǔ)到某個(gè)通用寄存器上。
寄存器Register,寄存器是CPU內(nèi)部用來(lái)存放數(shù)據(jù)的一些小型存儲(chǔ)區(qū)域,用來(lái)暫時(shí)存放參與運(yùn)算的數(shù)據(jù)和運(yùn)算結(jié)果。其實(shí)寄存器就是一種常用的時(shí)序邏輯電路,但這種時(shí)序邏輯電路只包含存儲(chǔ)電路。寄存器的存儲(chǔ)電路是由鎖存器或觸發(fā)器構(gòu)成的,因?yàn)橐粋€(gè)鎖存器或觸發(fā)器能存儲(chǔ)1位二進(jìn)制數(shù),所以由N個(gè)鎖存器或觸發(fā)器可以構(gòu)成N位寄存器。寄存器是中央處理器內(nèi)的組成部分。寄存器是有限存儲(chǔ)容量的高速存儲(chǔ)部件,可用來(lái)暫存指令、數(shù)據(jù)和位址。在計(jì)算機(jī)領(lǐng)域,寄存器是CPU內(nèi)部的元件,包括通用寄存器、專(zhuān)用寄存器和控制寄存器。寄存器擁有非常高的讀寫(xiě)速度,所以在寄存器之間的數(shù)據(jù)傳送非??臁?/p>
通常芯片設(shè)計(jì)也只是到寄存器這一級(jí),剩下的可以交給EDA工具自動(dòng)生成。
圖片來(lái)源:互聯(lián)網(wǎng)
IR (instructionregister指令寄存器):即存放當(dāng)前指令的位置
PC (programcounter程序計(jì)數(shù)器):存放下一條指令的地址,可以自增更新下一條地址,即指令備忘錄
MAR (memoryaddress register存儲(chǔ)器地址寄存器):存放當(dāng)前訪問(wèn)的存儲(chǔ)單元的地址
MDR (memorydata register存儲(chǔ)器數(shù)據(jù)寄存器):存放當(dāng)前訪問(wèn)(讀/寫(xiě))的存儲(chǔ)單元的內(nèi)容
圖片來(lái)源:互聯(lián)網(wǎng)
這些控制信號(hào)在持續(xù)時(shí)鐘脈沖的同步下去控制CPU中各個(gè)控制部件的動(dòng)作
圖片來(lái)源:互聯(lián)網(wǎng)
ALU (算術(shù)邏輯單元),用于完成算術(shù)運(yùn)算和邏輯運(yùn)算,兩個(gè)操作數(shù)Y、X分別從ALU的A端口和B端口進(jìn)入,經(jīng)過(guò)ALU計(jì)算后,將結(jié)果送到輸出端口Z;其中X、Y、Z是ALU用來(lái)暫時(shí)保存數(shù)據(jù)的寄存器,是ALU的一部分;而F用于存放運(yùn)算結(jié)果的狀態(tài),如是否產(chǎn)生進(jìn)位、是否溢出等。ALU所需的數(shù)據(jù)來(lái)源于存儲(chǔ)器,但是如果每一次運(yùn)算都去存儲(chǔ)器取數(shù),運(yùn)行效率太低;所以一些常用的數(shù)需要提前從存儲(chǔ)器中取出來(lái),相應(yīng)地,需要在運(yùn)算器中有臨時(shí)存放這些數(shù)的器件,就是所謂的通用寄存器。
算術(shù)運(yùn)算:加、減、乘、除、開(kāi)方、平方、倒數(shù),邏輯運(yùn)算:與、或、非、異。算術(shù)運(yùn)算可以拆解為眾多個(gè)加法,更絕對(duì)一點(diǎn)兒說(shuō),計(jì)算的一切,也就只有加法。邏輯運(yùn)算近似于函數(shù)運(yùn)算。計(jì)算機(jī)一般采用二進(jìn)制,和就是‘異/或’門(mén),進(jìn)位就是‘與’門(mén)。這樣用門(mén)電路就設(shè)計(jì)出一個(gè)加法器。只考慮了向后進(jìn)位,而沒(méi)有考慮前一個(gè)數(shù)皆進(jìn)位,因此我們稱(chēng)這種裝置為半加器。如果將前一個(gè)進(jìn)位考慮進(jìn)來(lái),只需再多一個(gè)半加器就可以了,這就是全加器。
圖片來(lái)源:互聯(lián)網(wǎng)
一位計(jì)算器做出來(lái)之后,8位計(jì)算器就只需將全加器逐個(gè)拼起來(lái)即可,并且再次抽象整體,我們稱(chēng)之為8位加法器。 一位全加器+函數(shù)發(fā)生器可以構(gòu)成一位全功能全加器,不僅可以進(jìn)行算數(shù)運(yùn)算還可以進(jìn)行邏輯運(yùn)算。 下一期將介紹CPU的緩存系統(tǒng),指令級(jí)并行的超標(biāo)量與超流水線。