指令集主要是指Cpu硬件和软件之间的接口描述,它本质上是一段二进制机器码,cpu只能识别机器码,但是机器码是一串无意义的字符串,程序员很难看看懂这些语句,用它来开发软件,所以后面就发明了汇编语言,汇编语言本质上跟机器码一一对应的,现在有很多不同版本的汇编语言,本质上就是有不同的指令集,指令集可以简单的分为复杂指令集和精简指令集。最近比较火的RISC-V,也是指令集的一种。
架构:架构主要是指某一个处理器所使用的具体指令集,比如说m6ull,他是基于ArmV7架构的,就是指它是使用armV7指令集,在大部分场合,架构等于指令集。
指令集架构是计算机体系架构的一部分。指令集是一个很虚的东西,是一个标准规范。例如我们的交通规则,红灯停、绿灯行、黄灯亮了等—等,只有行人和司机都去遵守这套交通规则我们的交通系统才能有条不紊地运行下去。指令集也一样,芯片工程师在设计CPU时也要以指令集中规定的指令格式为标准实现不同的译码电路来支持指令集各种指令的运行。指令集最终的实现就是微架构,就是CPU内部的各种译码和执行电路。
编译器厂商在研发编译器工具或IDE时,也要以指令集为标准将我们编写的C语言高级程序转换为指令集中规定的各种机器指令。为什么我们编写的高级程序经过编译后可以直接在CPU上运行呢?就是因为CPU设计者和编译器开发者遵循的是同一个指令集标准,“编译器最终编译生成的指令”都是CPU硬件电路支持运行的指令,每一种不同架构的CPU一般都需要配套一个对应的编译器。
指令集作为CPU和编译器的设计规范和参考标准主要用来定义指令的各种操作、操作数的类型、寄存器的分配、地址的格式等。
指令集也不是—成不变的也会随着应用需求的推动不断迭代更新,不断扩充新的指令。例如ARM指令集从最初的ARMV1发展到目前的ARMV8,一直在不断地发展不断添加新的指令。
处理器、内核:是芯片内部的核心单元模块,是在硬件层面按照指令集的设计规范,把它实现出来,可以把内核当作指令集的实物化,但是硬件的设计方案各有不同,所以同一个版本的指令集可能也有不同版本的内核,我们经常说的cotex-m3,cotex-m4,cotex-A7等等就是属于内核层面的概念。
微架构(Microarchitecture),也就是处理器架构。集成电路工程师在设计处理器时,会按照指令集规定的指令,设计具体的译码和运算电路来支持这些指令的运行;指令集在CPU处理器内部的具体硬件电路的实现,我们就称为微架构,一套相同的指令集,可以由不同形式的电路实现,可以有不同的微架构。在设计一个微架构时,一般需要考虑很多问题:处理器是否支持分支预测,单发射还是多发射,顺序执行还是乱序执行?流水线需要多少级?主频需要多高?Cache需要多大?需要几级Cache?根据不同的配置选项,我们可以基于一套指令集设计出不同的微架构。以ARMV7指令集为例,基于该套指令集,面向高性能、低功耗等不同的币场定位,ARM公司设计出了CoItex-A7、Cortex-A8、CortexA9、Co1texˉA15、CortexˉAl7等不同的微架构。
芯片:芯片指Soc,也就是指片上系统,它主要是由内核和其他的外设模块封装在一起构成的,我们经常说的stm32就是属于芯片这一层面的概念。
基于一款相同的微架构,通过不同的配置也可以设计出不同的处理器类型。不同的SoC厂商,获得ARM公司的CoItex-A9微架构授权后,基于该内核集成不同的IP,就可以搭建出不同的SoC芯片,并最终流向市场,如三星公司的Exynos44l2处理器、瑞芯微公司的RK3188处理器都采用了Cortcx-A9内核。
1、指令集/架构授权
第三方公司获取arm的架构授权后,可以自己去使用ram公司的指令集去进行芯片的设计,但是arm公司的授权管理非常严格,他允许他的合作伙伴参与制定指令集,但是不允许他们私底下修改,现在国内华为海思就是基于armV8指令集开发的,华为海思获取了armv8 架构的永久授权
2、内核授权
是指arm公司把内核的核心电路图,把它的内核测试方法和测试程序提供给第三方公司,第三方公司获取到内核到内核授权之后,基本上可以找工厂流片生产内核了,我们很多熟悉的半导体公司,都是获取了内核授权,比如st,nxp,ti,
3、使用授权
是授权等级最低的一种,主要是针对cpu设计能力比较弱的公司,获取使用授权,公司只能是使用已经封装生产好的内核,不能自己独立生产,国内很多小的生产厂商获取的就是arm的使用授权。
做个很形象的比喻:假设我写了一篇入党申请书的文件模板,我告诉甲,你可以拿去修改模块(修改文件结构),添加自己的内容后使用,便是架构层级授权,我告诉乙,你要保证文件模板的结构不变,但是你可以加三级及以下的标题及内容,便是内核级授权,我告诉丙,你只能对我的文章进行转发,不能更改,不能添油加醋,便是使用层级授权。