zoukankan      html  css  js  c++  java
  • 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文档:内存地址空间划分,初始化流程,各个模块的寄存器定义;
    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. 编译工具链资料:汇编器、编译器、链接器;
  • 相关阅读:
    HDU 1159 Common Subsequence 动态规划
    poj2349 Arctic Network
    hdu1596 find the safest road
    poj 1011
    二进制枚举
    codeforces 626E Simple Skewness
    code for 1
    painting fence
    codeforces 797c minimal string
    POJ 3977
  • 原文地址:https://www.cnblogs.com/wjcdx/p/9215931.html
Copyright © 2011-2022 走看看