1. 程式人生 > >CPU-如何開始在新的CPU上編程

CPU-如何開始在新的CPU上編程

architect soc gist 移位 RM UC 得到 開始 媒體

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

CPU-如何開始在新的CPU上編程