ARM体系架构概述

ARM体系架构的发展

本文将从以下几点去展开介绍arm体系架构的发展:

  1. 指令集架构
  2. arm公司的发展历史以及授权模式
  3. arm的体系架构

arm公司的发展历史

arm的发展历程在此文章讲的非常详细,故不再赘述一文带你了解ARM的发展历程

arm授权模式

在传统PC领域,半导体有两种路子可以走,一种是Intel这种,从头到尾一条龙,架构和芯片设计,生产一律不靠任何人; 这样做需要极其雄厚,全方位的实力做保障,得有钱,有人,有技术,在半导体技术日益复杂的今天,能这么做屈指可数;好处就是利润率比较高,想卖多少钱就多少;当然技术上得做到领先甚至于垄断的地位优势才比较明显;

另外一种则无工厂模式(Fabless),NVIDIA,AMD,这类企业都是自己设计芯片,制造交给代工厂,比如台积电,联电,GlobalFoundries,三星电子。好处很明显,负担轻,但是在半导体这种工艺在功耗与性能中扮演重要角色的行业,你设计出来的是否能设计出来,怎么设计出来,很大程度看代工厂的能耐;幸好这些代工厂也十分给力,不断的逼近物理极限;使得AMD最近也能慢慢的赶上挤牙膏的Intel;

arm就不一样了,它不制造,不销售芯片,只是自己设计IP,包括指令集,微处理器,GPU,总线,然后谁要的话就买arm的授权;授权模式分为此三种:

处理器授权

ARM设计好一颗CPU或者GPU,armv7架构对应的IP为Cortex-A5/A7/A9/A12/A15/A17这几个核心架构,对应armv8-A就有Cortext-A35/A53/A57/A72/A73;ARMv8.2A指令集:Cortext-A55/A75;然后授权卖给伙伴,买下它们后,只能按照图纸实现,能发挥的不多,如何实现就比较随便,如配置哪些模块,几个核心,多少缓存,多高频率,什么工艺,谁来代工等等;

如果想优化,但是技术有限,那么可以买arm的处理器优化包/物理IP包授权(POP)
如果只是想更快速搞出产品,那么更干脆了,arm已经帮你制定好代工厂处理器类型和工艺了;
代表商家有联发科,展讯,联芯,全志,瑞芯微,炬力等;这些设计公司获得的是软核或者这点硬核授权,通过购买的CPU核,与GPU核,以及通过一定的流程,集成出SOC;

购买处理器授权的本质上就大同小异了,可以做出差异化的只能在一些IP上做出差异化;

架构/指令授权

这种授权方式价格比较贵,为防止碎片化的情况出现还有可能处于技术上的保护,arm禁止对指令集进行修改或者添加,但其他公司是否确切遵守了,这个就不得而知了;总之这种授权需要具有非常强的技术实力,也不过15家,如我们熟知的高通,苹果,三星,华为等公司;

除了版税,那些购买了arm IP授权的,还需要为每一个芯片支付版税;

在这里有些问题就应该提出来思考了,为什么都是arm的指令集,苹果的芯片却可以吊打现在的Android厂商的芯片呢?评价CPU性能指标在以下几个方面:

一:指令集宽度(ISSUE)6

二:乱序指令执行缓冲区(Recorder Buffer)(192)

三:内存加载延迟(Load Latency):4

四:分支预测错误代价(Misprediction Penalty):16(一般介于14~19)

不得不说,苹果很早就开始布局CPU的设计之路,具有极强的芯片设计能力,在厂家都是基于arm的公版进行设计,苹果就已经通过购买arm指令集,然后进行自己的CPU设计,在14年的时候A7处理器,作为第一个ARM 64位CPU商用,而且将指令集宽度位6,作为对比arm目前的指令集为3;由于封闭式的开发,不像高通,需要考虑各个厂家的需求和成本,苹果有更高的溢价能力,可以用面积去换取性能与功耗,并根据自己的系统去做定制化

指令集架构(ISA)

CPU执行计算任务时都需要遵从一定的规范,程序在被执行时都需要先翻译成CPU可以理解的语言。这种规范就是指令集(ISA,Intruction Set Architecrure);

例如以下的机器码:1110 0001 1010 0000 0010 0000 0000 0001

比如有个CPU定位1110 0001就是ADD指令,1010 0000对应的是存储数据的寄存器R2;0010 0000对应的寄存器R0;
0000 0001对应是寄存器R1,故意思可以是ADD R2 R0 R1,将R0,R1的值加起来放到R2;指令集就是定义一套约定俗成的CPU运行规则,对于编程人员,面对的汇编指令;而对于CPU来说,就是怎么去理解这段二进制码,不同的CPU对这段二进制代码不同,故就有了不同的指令集架构;

指令集一般分为两种:精简指令集(RISC:reduced instruction set computer)和复杂指令集(CISC:Complex Instrution Set Computer),以洗衣机洗衣服为例,RISC架构为,加水->漂洗->风干;而复杂指令集则可以发出洗衣服的指令,从而让洗衣机自动帮忙做这一整套的流程;CISC可以通过一条复杂的指令来完成许多事情,性能在处理复杂的任务时,会比RISC更为高效;但随之而来的是面积和功耗的提升;基于2/8理论,程序大部分时间(80%)都是在做重复而简单的事情;所以RISC架构就应运而生,更为精简的指令,将任务更多的放在了编译器这块,通过复杂的指令转化成简单指令的组合,在一定程度上增加了代码量,但使其大部分场合能比CISC取得更小的面积和功耗;

采用精简指令集的微处理,常见为ARM,MIPS,Power Architecture(包括PowerPC,PowerXCell),SPARC,RISC-V等而采用CISC则为X86和AMD

至于arm为代表RISC架构与以X86为代表的CISC之间的优劣比较还有是否存在替代一说,笔者认为,不会,而且从目前的发展来看,已经出现了你中有我,我中有你的局面;
更进一步的探讨可以看下知乎上关于精简指令集与负杂指令集的讨论,我也很赞同其中一个答主的观点,这已经不是个技术问题了,而是一个商业的问题

总结完RISC和CISC之间的关系,再讲讲基于RISC阵营里面的ARM和最近比较火热的RISC-V,arm大家都熟悉,而RISC-V又是个什么东西呢?

RISC-V是加州大学伯克利分校的开源指令集,由计算机架构的宗师级任务David Patterson领衔打造,通过将核心指令集以及
关键IP开源,意图改变半导体生态;详细的可以看这篇文档;名家专栏丨一文看懂RISC-V

总结如下:RISC-V具有以下优点:1.可模块化配置的指令集。 2.支持可扩展的指令集 3.一套指令集支持所有架构,基本指令集仅40余条指令,以此为共用基础,加上其他常用模块子集指令总指令集也仅几十条 4.硬件设计和编译器非常简单

笔者认为,RISC-V目前作为一个像linux看齐的硬件开源组织,linux之所以能健康长足发展,在于社区成千上万的内核爱好者的不断贡献,使得linux能够蓬勃发展;而硬件则不同,在这动辄上百万的流片费的无数摆在硬件设计者面前的坎,是否会有公司或者团体愿意将自己用血与泪验证的IP,贡献到社区,如果没有做到这一点,即将面临由于厂家扩展指令不同的碎片化问题解决,还有RISC-V后面的长足发展,将付之空谈;这样RISC-V架构只能作为几个大厂找到的低廉的替代arm方案的选择,而无法真正做到普惠;

arm的体系架构

时间 架构 主要更新
1985 ARMv1 只有26位的寻值空间,没有用于商业产品
1986 ARMv2 首颗量产的ARM处理器,包括32位乘法指令和协处理器指令
1990 ARMv3 具有片上高速缓存,MMU和写缓冲,寻址空间增大到32位
1993 ARMv4 ARM7,ARM8,ARM9和Strong ARM采用这种架构。增加了16 Thumb指令集
1998 ARMv5 ARM7(EJ),ARM9(E),ARM10(E)和Xscale采用这种了该架构,改进了ARM/Thumb状态之间的切换效率,此外还引入DSP指令和支持JAVA
2001 ARMv6 ARM11,强化了图形处理性能,通过追加有效进行多媒体处理的SIMD将语音及图像的处理功能大大提高。此外ARM在这个系列中引入混合16位/32位的Thumb-2指令集
2004 ARMv7 Cortex-M3/4/7,Cortex-R4/5/6/7,Cortex-A8/9都是基于该架构,该架构包括NEON技术扩展,可将DSP和媒体处理吞吐量高达400%,并提供改进的浮点支持以满足下一代3D图形和游戏以及传统嵌入式控制应用的需要
2007 ARMv6-M 专门为低成本,高性能的设备而设计,Cortex-M0/1即采用该架构
2011 ARMv8 Cortex-A32/35/53/57/72/73采用此架构,第一款支持64位的处理器架构

ARM架构发展图:

Arm架构发展

arm体系的CPU工作模式:

1.用户模式(usr):正常的程序执行状态
2.快速中断模式(fiq):用于支持高速数据传输或者通道处理
3.中断模式(irq):用于普通中断处理
4.管理模式(svc):操作系统使用的保护模式
5.系统模式(sys):运行具有特权的操作系统的任务;
6.数据访问终止模式(abt):数据或指令与预取终止时进入该模式
7.未定义指令终止模式(und):未定义的指令执行时进入该模式;

linux如何从用户态进入内核态
分为两种:主动式和被动式、

1.主动式:就是linux用户在(ARM在用户模式下)工作,通过发起用户态程序发起命令请求,ARM响应进入特权模式进而Linux切入内核态,就是系统调用;系统调用可被堪称一个内核与用户空间程序交互的接口;把用户进程的请求传达 给内核,待内核把请求处理完毕后再将处理结果送回给用户空间;
系统调用的主要用途:

一:控制硬件-系统调用往往作为硬件资源和用户空间的抽象接口,比如读写文件用到的write/read调用

二:设置系统状态或读取内核数据;

2.被动式:就是Linux在用户态(ARM在用户模式)工作,没有主动发起请求,而被动地进入内核态,包括硬件中断和程序异常;

参考资料:

arm汇编基础教程

给开源架构泼泼冷水

完全看懂ARM处理器:RISC与CISC是什么?历史,架构一次性看透

ARMv8-a

ARM介绍1:发展史
ARM介绍2:授权模式

ARMV8

从arm到三星,苹果是如何走向自研芯片的

一样是ARM架构,为何苹果处理器效能就是压下其他人
浅析arm的异常,中断和arm工作模式的联系