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