一路走来
让我们回顿一下ARM的进化史,你会知道为什么会有品种如此之多的ARM处理器和ARM架构。
ARM在1990年成立,当初的名字是"Advanced RISC Machines Ltd.,",当时它是三家公司的合资--它们分别是苹果电脑,Acorn电脑公司,以及VLSI技术(公司)。在1991年,ARM推出了ARM6处理器家族,VLSI则是第一个吃螃蟹的人。后来,陆续有其它巨头:包括TI, NEC, Sharp, ST等,都获取了ARM授权,它们真正地把ARM处理器大面积地辅开,使得ARM处理器在手机,硬盘控制器,PDA,家庭娱乐系统以及其它消费电子中都大展雄才。
现如今,ARM芯片的出货量每年都比上一年多20亿片以上。不像很多其它的半导体公司,ARM从不制造和销售具体的处理器芯片。取而代之的,是ARM把处理器的设计授权给相关的商务合作伙伴,让他们去根据自己的强项设计具体的芯片,这些伙伴可都是巨头啊。基于ARM低成本和高效的处理器设计方案,得到授权的厂商生产了多种多样的的处理器、单片机以及片上系统(SoC)。这种商业模式就是所谓的"知识产权授权"。
除了设计处理器,ARM也设计系统级IP和软件IP。为了挺它们,ARM开发了许多配套的基础开发工具、硬件以及软件产品。使用这些工具,合作伙伴可以更加舒心地开发他们自己的产品。
ARM的各种架构版本
ARM十几年如一日地开发新的处理器内核和系统功能块。这些包括流行的ARM7TDMI处理器,还有更新的高档产品ARM1176TZ(F)‐S处理器,后者能拿去做高档手机。功能的不断进化,处理水平的持续提高,年深日久造就了一系列的ARM架构。要说明的是,架构版本号和名字中的数字并不是一码事。比如,ARM7TDMI是基于ARMv4T架构的(T表示支持"Thumb指令");ARMv5TE架构则是伴随着ARM9E处理器家族亮相的。ARM9E家族成员包括ARM926E‐S和ARM946E‐S。ARMv5TE架构添加了"服务于多媒体应用增强的DSP指令"。
后来又出了ARM11,ARM11是基于ARMv6架构建成的。基于ARMv6架构的处理器包括ARM1136J(F)‐S,ARM1156T2(F)‐S,以及ARM1176JZ(F)‐S。ARMv6是ARM进化史上的一个重要里程碑:从那时候起,许多突破性的新技术被引进,存储器系统加入了很多的崭新的特性,单指令流多数据流(SIMD)指令也是从v6开始首次引入的。而最前卫的新技术,就是经过优化的Thumb‐2指令集,它专为低成本的单片机及汽车组件市场。
ARMv6的设计中还有另一个重大的决定:虽然这个架构要能上能下,从最低端的MCU到最高端的"应用处理器"都通吃,但不能因此就这也会,那也会,但就是都不精。仍须定位准确,使处理器的架构能胜任每个应用领域。结果就是,要使ARMv6能够灵活地配置和剪裁。对于成本敏感市场,要设计一个低门数的架构,让她有极强的确定性;另一方面,在高端市场上,不管是要有丰富功能的还是要有高性能的,都要有拿得出手的好东西。
最近的几年,基于从ARMv6开始的新设计理念,ARM进一步扩展了它的CPU设计,成果就是ARMv7架构的闪亮登场。在这个版本中,内核架构首次从单一款式变成3种款式。
1) 款式A:设计用于高性能的"开放应用平台"--越来越接近电脑了。
2) 款式R:用于高端的嵌入式系统,尤其是那些带有实时要求的--又要快又要实时。
3) 款式M:用于深度嵌入的,单片机风格的系统中--本书的主角。
让我们再进距离地考察这3种款式:
1) 款式A(ARMv7‐A):需要运行复杂应用程序的"应用处理器"[译注1]。支持大型嵌入式操作系统(不一定实时--译注),比如Symbian(诺基亚智能手机用),Linux,以及微软的WindowsCE和智能手机操作系统WindowsMobile。这些应用需要劲爆的处理性能,并且需要硬件MMU实现的完整而强大的虚拟内存机制,还基本上会配有Java支持,有时还要求一个安全程序执行环境(用于电子商务--译注)。典型的产品包括高端手机和手持仪器,电子钱包以及金融事务处理机。
[译注1]:这里的"应用"尤指大型应用程序,像办公软件,导航软件,网页浏览器等。这些软件的使用习惯和开发模式都很像PC上的软件,但是基本上没有实时要求。
2) 款式R(ARMv7‐R):硬实时且高性能的处理器。标的是高端实时[注1]市场。那些高级的玩意,像高档轿车的组件,大型发电机控制器,机器手臂控制器等,它们使用的处理器不但要很好很强大,还要极其可靠,对事件的反应也要极其敏捷。
3) 款式M(ARMv7‐M):认准了旧世代单片机的应用而量身定制。在这些应用中,尤其是对于实时控制系统,低成本、低功耗、极速中断反应以及高处理效率,都是至关重要的。
Cortex系列是v7架构的第一次亮相,其中Cortex‐M3就是按款式M设计的。
[注1]:通用处理器能否胜任实时系统的控制,常遭受质疑,并且在这方面的争论从没停止过。从定义的角度讲,"实时"就是指系统必须在给定的死线(deadline,亦称作"最后期限")内做出响应。在一个以ARM处理器为核心的系统中,决定能否达到"实时"这个目标的,有很多因素,包括是否使用"实时操作系统",中断延迟,存储器延时,以及当时处理器是否在运行更高优先级的中断服务例程。
到目前为止,Cortex‐M3也是款式M中被抚养成人的独苗。其它Cortex家族的处理器包括款式A的Cortex‐A8(应用处理器),款式R的Cortex‐R4(实时处理器)。
ARMv7‐M的私房秘密都记录在《The ARMv7‐M Architecture Application Level Reference Manual》中(本书也讲了很多"System Level"的内容--译注),ARM已经将其公开。《Cortex M3 Technical Reference Manual》中则记录了实现v7‐M时的很多细节和花絮。又因为v7M中列出的指令有一些是可选的,而CM3裁掉了一部分,所以在这个文档中重新列出了被CM3支持的指令集。
处理器命名法
以前,ARM使用一种基于数字的命名法。在早期(1990s),还在数字后面添加字母后缀,用来进一步明细该处理器支持的特性。就拿ARM7TDMI来说,T代表Thumb指令集,D是说支持JTAG调试(Debugging),M意指快速乘法器,I则对应一个嵌入式ICE模块。后来,这4项基本功能成了任何新产品的标配,于是就不再使用这4个后缀--相当于默许了。但是新的后缀不断加入,包括定义存储器接口的,定义高速缓存的,以及定义"紧耦合存储器(TCM)"的,于是形成了新一套命名法,这套命名法也是一直在使用的。
表一:ARM处理器名字
[译注2]:Jazelle是ARM处理器的硬件Java加速器。
[译注3]:MMU,存储器管理单元,用于实现虚拟内存和内存的分区保护,这是应用处理器与嵌入式处理器的分水岭。电脑和数码产品所使用的处理器几乎清一色地都带MMU。但是MMU也引入了不确定性,这有时是嵌入式领域--尤其是实时系统不可接受的。然而对于安全关键(safety‐critical)的嵌入式系统,还是不能没有内存的分区保护的。为解决矛盾,于是就有了MPU。可以把MPU认为是MMU的功能子集,它只支持分区保护,不支持具有"定位决定性"的虚拟内存机制。
到了架构7时代,ARM改革了一度使用的,冗长的、需要"解码"的数字命名法,转到另一种看起来比较整齐的命名法。比如,ARMv7的三个款式都以Cortex作为主名。这不仅更加澄清并且"精装"了所使用的ARM架构,也避免了新手对架构号和系列号的混淆。例如,ARM7TDMI并不是一款ARMv7的产品,而是辉煌起点--v4T架构的产品。