1. 前言
当前,X86和ARM架构是公认的在商业化进程中表现最优秀的两大架构。之前我们已经介绍了X86架构,今天介绍另一个在近十年大火的架构,ARM。
ARM架构,过去称作进阶精简指令集机器(Advanced RISC Machine,更早称作:Acorn RISC Machine),是一个32位精简指令集(RISC)处理器架构,被广泛地使用在嵌入式系统设计。由于节能的特点,ARM处理器非常适用于行动通讯领域,符合其主要设计目标为低耗电的特性。
在今日,ARM家族占了所有32位嵌入式处理器75%的比例,使它成为占全世界最多数的32位架构之一。ARM处理器可以在很多消费性电子产品上看到,从可携式装置(PDA、移动电话、多媒体播放器、掌上型电子游戏,和计算机)到电脑外设(硬盘、桌上型路由器)甚至在导弹的弹载计算机等军用设施中都有他的存在。在此还有一些基于ARM设计的派生产品,重要产品还包括Marvell的XScale架构和德州仪器的OMAP系列。说的直白一些,ARM相当于移动领域的x86,全球有超过95%的移动设备采用ARM设计架构的处理器。
2.ARM公司发展史
1978年,一家名字叫CPU(Cambridge Processor Unit)的公司在英国剑桥诞生,其创始人是一个名叫Hermann Hauser的奥地利籍物理学博士,还有一个名叫Chris Curry的英国工程师。
CPU公司成立之后,主要从事电子设备设计和制造的业务。他们接到的第一份订单,是制造赌博机的微控制器系统。这个微控制器系统被开发出来后,称之为Acorn System 1。
1979年,他们给公司换了个名字,叫做Acorn Computer Ltd。在Acorn System 1之后,他们又陆续开发了System 2、3、4,还有面向消费者的盒式计算机——Acorn Atom。
到了1981年,公司迎来了一个难得的机遇——英国广播公司BBC打算在整个英国播放一套提高电脑普及水平的节目,他们希望Acorn能生产一款与之配套的电脑。但是Acorn缺少合适的芯片。当时美国国家半导体和摩托罗拉公司的16位芯片售价过高,同时,当时如日中天的英特尔(Intel)拒绝为他们提供相关处理器(80286)的设计资料和样品。一气之下,Acorn决定自己造芯片。
就这样,Acorn公司的研发人员从美国加州大学伯克利分校找到了一个关于新型处理器的研究——简化指令集,恰好可以满足他们的设计要求。在此基础上,经过多年的艰苦奋斗,来自剑桥大学的计算机科学家Sophie Wilson和Steve Furber最终完成了微处理器的设计。对于这块芯片,Acorn给它命名为Acorn RISC Machine。这就是大名鼎鼎的“ARM”三个字母的由来。
当时研发出来的第一款处理器芯片的型号,被定为 ARM1。当时ARM1和同时期Intel的80286处理器(也就是常说的286)对比如下:
可以看出来,ARM1和80286各有所长。但是,就在同一年,1985年10月,英特尔发布了80386。在80386面前,ARM1就只有被吊打的份了。
让ARM直接在性能上和x86系列硬杠,显然是不现实的。ARM有意无意地选择了与Intel不同的设计路线——Intel持续迈向x86高效能设计,ARM则专注于低成本、低功耗的研发方向。
3.ARM架构发展史
有些人将“指令集体系结构”称为架构,这样就有了ARMv8架构、ARMv7-A架构、ARMv6架构等等,这些都是ARM设计的一些RISC指令集。
所谓指令集体系结构,就是ARM公司推出的一整套的精简指令,它是计算机最低层的命令,比如说应用程序需要从内存读取数据,那么最后就是通过调用ARM设计的指令是实现内存读取。
不过,也有人将ARM7、 ARM9、 ARM11以及Cortex等系列内核也称为架构。譬如,现在ARM主流的架构应该就是智能手机领域的Cortex-A系列架构、工业控制嵌入式领域的Cortex-M系列架构、对稳定性要求高的Cortex-R系列架构等。值得一提的是,ARM架构在不断演变的同时,仍保持了各个版本之间的兼容性。
那么,为了清楚地表达每个ARM应用实例所使用的指令集,ARM公司定义了几种主要的ARM指令集结构版本,以版本号V1-V8表示。
3.1ARMv1架构
1985年,ARMv1架构诞生,该版架构只在原型机ARM1出现过,只有26位的寻址空间(64MB),没有用于商业产品。
3.2 ARMv2架构
1986年,ARMv2架构诞生,该版本架构对V1进行了扩展,首颗量产的ARM处理器ARM2就是基于该架构,包含了对32位乘法指令和协处理器指令的支持,但同样仍为26位寻址空间。其后还出现了变种ARMv2a,ARM3即采用了ARMv2a,是第一片采用Cache的ARM处理器。
3.3 ARMv3架构
1990年,ARMv3架构诞生,第一个采用ARMv3架构的微处理器是ARM6(610)以及ARM7,ARM6作为IP核、独立的处理器、具有片上高速缓存、MMCU和写缓冲的集成CPU,寻址空间增大到32位(4GB)。变种版本有3G和3M。版本3G是不与版本2a相兼容的版本3。版本3M引入了有符号和无符号数乘法和乘加指令。
3.4 ARMv4架构
1993年,ARMv4架构在V3版上作了进一步扩充,是目前应用最广的ARM架构,ARM7(7TDMI)、ARM8、ARM9(9TDMI)和Strong ARM均采用了该架构。ARM在这个系列中引入了T变种指令集,即处理器可工作在Thumb状态,增加了16位Thumb指令集。V4不再强制要求与26位地址空间兼容,而且还明确了哪些指令会引起未定义指令异常。
3.5 ARMv5架构
1998年,ARMv5架构诞生,在V4版基础上增加了一些新的指令,ARM7(EJ)、ARM9(E)、ARM10(E)和Xscale采用了该架构,这版架构改进了ARM/Thumb状态之间的切换效率。这些新增命令有带有链接和交换的转移BLX指令;计数前导零CLZ指令;BRK中断指令;增加了数字信号处理指令(V5TE版);为协处理器增加更多可选择的指令。此外还引入了DSP指令和支持JAVA。
3.6 ARMv6架构
V6版架构于2001年正式发布,首先被应用在ARM11处理器。V6版架构在降低耗电量的同时,还强化了图形处理性能。它还引进了包括单指令多数据(SIMD) 运算在内的一系列新功能。通过追加有效进行多媒体处理的SIMD(Single Instruction,Multiple Data,单指令多数据)功能,将语音及图像的处理功能提高到了原型机的4倍。此外,还引入了混合16位/32位的Thumb-2指令集和Trust Zone技术。
3.7 ARMv7架构
2004年,ARMv7架构诞生,该版本架构采用了Thumb-2技术,它是在ARM的Thumb代码压缩技术的基础上发展出来的,并且保持了对已存ARM解决方案的完整的代码兼容性。此外,ARMv7还支持改良的运行环境,来迎合不断增加的JIT和DAC技术的使用。
ARMv7架构还包括 NEON™ 技术扩展,可将DSP和媒体处理吞吐量提升高达400%,并提供改进的浮点支持以满足下一代3D图形和游戏以及传统嵌入式控制应用的需要。
从这个时候开始ARM以Cortex来重新命名处理器,Cortex-M3/4/7,Cortex-R4/5/6/7,Cortex-A8/9/5/7/15/17都是基于该架构。
3.8 ARMv6-M架构
2007年,在ARMv6基础上衍生了ARMv6-M架构,该架构是专门为低成本、高性能设备而设计,向以前由8位设备占主导地位的市场提供32位功能强大的解决方案。Cortex-M0/1/0+即采用的该架构。
3.9 ARMv8架构
2011年,ARMv8架构诞生,Cortex-A32/35/53/57/72/73采用的是该架构,这是ARM公司的首款支持64位指令集的处理器架构。由于ARM处理器的授权内核被广泛用于手机等诸多电子产品,故ARMv8架构作为下一代处理器的核心技术而受到普遍关注。
ARMv8是在32位ARM架构上进行开发的,主要被用于对扩展虚拟地址和64位数据处理技术有更高要求的产品领域。ARMv8是近20年来,ARM架构变动最大的一次。它引入的Execution State、Exception Level、Security State等新特性,已经颠覆了我们对旧的ARM架构的认知。
可以看出,从ARMv7架构开始,ARM的命名方式有所改变。新的处理器家族,改以Cortex命名,并分为三个系列,分别是Cortex-A,Cortex-R,Cortex-M。
Cortex-A | 针对高性能计算。如我们目前手机SoC中常出现的Cortex-A76等 |
Cortex-R | 针对实时操作处理。主要是面向嵌入式实时处理器。在汽车的电子制动系统,工业控制领域等领域比较常见 |
Cortex-M | 专为低功耗、低成本系统设计。目前火热的IoT领域常常见到采用Cortex-M架构的处理器 |
其实,除了上述三大系列之外,还有一个主打安全的Cortex-SC系列(SC:SecurCore),主要用于政府安全芯片。
4. ARM的授权模式的确立
ARM 公司本身并不靠自有的设计来制造或出售 CPU ,而是将处理器架构授权给有兴趣的厂家。
1990年,Acorn为了和苹果合作,专门成立了一家合资公司,名叫ARM(Advanced RISC Machines)。苹果投了150万英镑,芯片厂商VLSI投了25万英镑,Acorn本身则以150万英镑的知识产权和12名工程师入股。
在成立后的那几年,ARM业绩平平,工程师们也人心惶惶,害怕随时都会失业。在这个情况下,ARM决定改变他们的产品策略——他们不再生产芯片,转而以授权的方式,将芯片设计方案转让给其他公司,即“Partnership”开放模式。没想到正是这种模式,开创了属于ARM的全新时代。
ARM所采取的是IP授权的商业模式,收取一次性技术授权费用和版税提成。具体来说,ARM有三种授权方式:使用层级授权、内核层级授权和架构层级授权。这三个层级的权限是依次上升的。
使用层级授权是最基本也是最低的授权等级。这就意味着你只能拿别人提供的定义好的IP来嵌入在你的设计中,不能更改人家的IP,也不能借助人家的IP创造自己的基于该IP的封装产品。拥有使用授权的用户只能购买已经封装好的ARM处理器核心,而如果想要实现更多功能和特性,则只能通过增加封装之外的DSP核心的形式来实现(当然,也可以通过对芯片的再封装方法来实现)。由于担心对知识产权保护不力,ARM对很多中国背景的企业均采取这一级别的授权。
内核层级授权指可以以一个内核为基础然后在加上自己的外设,不能改变原有设计,但可以根据自己的需要调整产品的频率、功耗等。比如USART GPIO SPI ADC 等等,最后形成了自己的MCU,比如三星、德州仪器(TI)、博通、飞思卡尔、富士通以及Calxeda等,这些公司并没有权限去对内核进行改造。
架构层级授权是ARM会授权合作厂商使用自己的架构,且可以对ARM架构进行大幅度改造,甚至可以对ARM指令集进行扩展或缩减,方便其根据自己的需要来设计处理器。例如高通的Krait架构和苹果的Swift架构,就是在取得ARM的授权后根据自己的需求设计完成的。
做个很形象的比喻:假设我写了一篇文章,我只授权了你转发,不能更改,不能添油加醋,便是使用层级授权;我授权你可以在文章中引用我的文章,便是内核级授权;我授权你可以拿去修改、重组我的文章,形成一篇新的论文,便是架构层级授权。
注意,某一版本的架构层级授权,通常是永久性的。
如果按照用途来划分得更细一点,ARM的授权模式还包括了比如学术授权,是免费面向高校和科研机构的;比如Design Start,是为了方便半导体企业低成本、低风险、快速了解ARM IP的一种授权模式;这两种模式下设计出来的芯片不能销售,只能用于内部研究。
还有多用途授权和终身多用途授权,以时间为授权效力划分,相对来说比较适合大型企业。而单用途授权以用途划分授权效力范围,这种授权模式之下,需要交一笔前期授权费,此后按照每颗芯片收取约2%的版税。这种授权相对来说比较适合创业公司,或者目标明确的特定设计项目。
正是ARM的这种授权模式,极大地降低了自身的研发成本和研发风险。它以风险共担、利益共享的模式,形成了一个以ARM为核心的生态圈,使得低成本创新成为可能。目前ARM在全球拥有大约1000个授权合作、超过300家合作伙伴,但是敢于购买架构授权的,也只有15家。高通Krait、苹果Swift、Marvell都是典型的用户。正是靠着如此众多授权伙伴的支持,ARM处理器才获得了25亿颗的季度出货量,历史总量已经达到500亿颗,可以绕地球12周。
4.1 ARM授权使用方