CPU-如何開始在新的CPU上編程
新在哪里?從未接觸過。比如之前一直在x86、ARM上寫程序,C比較多,匯編也調(diào)過。MIPS可能零零星星也看過幾篇資料。然后來了個用PowerPC的項目,或者RISC-V的項目,茫茫然無可奈何不知所措。
這里介紹CPU相關(guān)的概念,需要哪些資料,可以沒有概念上的缺口,踏踏實實的開始為一個于己而言全新的CPU編寫代碼。
一. CPU
CPU即中央處理器,執(zhí)行一系列指令,完成處理任務(wù)。CPU即是指令執(zhí)行器,包含了為執(zhí)行各種指令所需要的模塊,如數(shù)學(xué)運算單元ALU、指令編譯碼器、寄存器、移位寄存器、計數(shù)器等基礎(chǔ)組成部分,還有L1/L2 Cache, MMU等現(xiàn)代CPU而言也算基礎(chǔ)的單元。
二. SoC
System on Chip: 片上系統(tǒng),為了提升集成度,降低PCB電路板上的芯片器件數(shù)量,把相當(dāng)一部分芯片和CPU封裝到一起,即成為SoC。被封裝的器件成為SoC的模塊,如USB, Eth MAC/PHY, WIFI(802.11), NFC, Bluetooth, GPS模塊, 除了片上內(nèi)存之外,F(xiàn)lash也可以集成進去,等等。
三. ISA
Instruction Set Architecture:指令集架構(gòu)。規(guī)定了每條指令的格式和作用等?;旧希總€指令集都包含數(shù)學(xué)運算、移位、跳轉(zhuǎn)、內(nèi)存訪問等指令,有一些還包含多媒體處理、壓縮解壓縮等領(lǐng)域能力增強指令。
ISA由以下幾個模型組成:
1.Register Model
指令必然用到寄存器,寄存器有多少、如何組織等,屬于寄存器模型的內(nèi)容。
2.Intstruction Model
指令的種類、格式、作用等。根據(jù)指令格式是否固定,可以分為復(fù)雜指令集和精簡指令集,即CISC和RISC。
3.Interrupt Model
如何響應(yīng)外部世界變化?有主動和被動兩種方式。具體到CPU而言:
a. 主動輪詢是否存在外部事件需要響應(yīng);
b. 被外部事件中斷;
細細思量之下,中斷即使在一條指令未執(zhí)行完成時發(fā)生,也無法立即得到響應(yīng),而是需要在當(dāng)前指令執(zhí)行完畢之后,去查看是否有中斷發(fā)生,如果有則進行響應(yīng)。所以中斷其實也是輪詢,只不過輪詢的周期為每執(zhí)行一條指令輪詢一次。外因通過內(nèi)因起作用,也可以理解。
中斷模型定義:
a. 要處理的內(nèi)部錯誤和外部中斷的種類;
b. 處理方式是否分為常規(guī)和快速處理模式;
c. 中斷是否有優(yōu)先級,是否能夠打斷,是否能夠嵌套等;
與CPU的關(guān)系
常見的ISA有x86, ARM, MIPS, PowerPC等,其他早期的有Alpha,新生的有RISC-V等。
一般而言,每種CPU只基于某一種特定的ISA,而ISA可以有很多CPU實現(xiàn)。如i386/i586, Core i3/i5/i7都基于x86,AMD的CPU也基于x86。
當(dāng)然也有例外,比如龍心Loongson主要基于MIPS,同時也實現(xiàn)了x86指令的譯碼(揣測,未確認)。
四. ABI
Application Binary Interface 應(yīng)用二進制接口。區(qū)別于Application Programming Interface(API),ABI規(guī)定了如何使用ISA規(guī)定的指令集和寄存器進行編程,如哪一個寄存器用作棧指針,哪一個傳遞函數(shù)返回值,哪幾個傳遞函數(shù)入?yún)⒌取?/p>
可見,ABI與ISA對應(yīng),而非CPU。
五. 開始編程
需要資料如下:
1.SoC文檔:內(nèi)存地址空間劃分,初始化流程,各個模塊的寄存器定義;
2.CPU文檔:包含哪些模塊以及如何配置使用:MMU如何配置,Cache怎么刷等;
3.ISA文檔:寄存器模型、指令的作用等;
4.ISA對應(yīng)的ABI規(guī)范:使用寄存器時有哪些注意事項;如PPCEABI,System V ABI,System V Application Binary Interface - Intel386 Architecture Processor Supplement,System V Application Binary Interface - PowerPC Processor Supplement。
5.編譯工具鏈資料:匯編器、編譯器、鏈接器。