CPU-如何开始在新的CPU上编程

新在哪里?从未接触过。比如之前一直在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文档:内存地址空间划分,初始化流程,各个模块的寄存器定义;

2.CPU文档:包含哪些模块以及如何配置使用:MMU如何配置,Cache怎么刷等;

3.ISA文档:寄存器模型、指令的作用等;

4.ISA对应的ABI规范:使用寄存器时有哪些注意事项;如PPCEABI,System V ABI,System V Application Binary Interface - Intel386 Architecture Processor Supplement,System V Application Binary Interface - PowerPC Processor Supplement。

5.编译工具链资料:汇编器、编译器、链接器;

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180622G25QY500?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券