Total Pageviews

Sunday, 22 October 2017

ARM的蝶变

http://blog.sina.com.cn/s/blog_6472c4cc0100lqr8.html

1929年开始的经济大萧条,改变了世界格局。前苏联的风景独好,使得相当多的人选择了马克思。惧怕布尔什维克红色力量的人投入了法西斯的怀抱,剩余的人选择了妥协与折中。整个世界的迅速分解使得第二次世界大战成为必然。

1933年,罗斯福成为美国第三十二任总统,开始实施新政。这些新政使美国摆脱了危机,决定了二战的走向。罗斯福的背后站着的是凯恩斯,凯恩斯的国家资本主义化解了整个资本主义阵营有史以来最大的一次危机。“妥协与折中”得以持续。

ARM的崛起使Intel陷入长考。


尚属Wintel帝国的PC领域无需担忧。帝国的成员已经历经过多次优胜劣汰。Wintel制定的多数策略能得到这些成员的支持,并使他们最终受益。Intel从PC领域切走了最大一块蛋糕,也是众望所归,这与Intel在这个领域的付出成正比,更重要的是这个蛋糕正是Intel自己做的。PC帝国偶尔出现的纰漏,总能被Intel及时发现。进入帝国的大门被Windows系统牢牢把持,ARM阵营虽多次试探,仍被拒之门外。

在手机领域,Intel还不是局中人。在XScale架构之后,世上没有任何一款手机正在使用Intel的处理器。在这个领域,手机厂商,代工厂商,芯片提供商,操作系统提供商,相互交融,有合作也有竞争,尚未形成动态平衡。Nokia仍然占有最大的手机市场份额,却在智能手机输给了Apple和Andriod。

在这个领域,Apple执着的封闭式系统取得了意想不到的成功。Google的加入使本已混乱的市场,变得更加难以琢磨。Microsoft屡战屡败依然不离不弃。2010年10月11日,Microsoft发布了Windows Phone7[105],Google Android 2.3即将到来的谣言也在漫天飞舞。

乱哄哄你方唱罢我登场,却是处理器领域之外的故事。

ARM是这个领域最大的收益者。无论是Nokia,Apple,HTC还是Motorola都在使用ARM处理器。Intel垂涎三尺也无可奈何,陆续发布的Atom系列处理器,无论是Silverthorn(Atom Z5xx)系列,Diamondville(Atom N2xx,2XX和3XX),Pineview(Atom N4xx, D4xx和D5xx)距离手机都很遥远。

Intel近期发布的代号为Lincroft的Atom Z6xx处理器,却应者聊聊。基于Lincroft内核的Moorestown平台,难显Intel昔日的振臂一呼。尚未有任何一个手机厂商宣布使用这个平台生产手机。

业界似乎仍在等待Intel即将在2011年推出的Medfield平台,这个平台将沿用Atom Z6xx内核,采用32nm工艺,进一步提高性能功耗比[107]。Intel很难继续等待,因为Intel的后院再一次燃起了熊熊烈火。

借助ARM处理器,Apple的iPad已率先发难。这标志着手机领域和PC领域融合的开始。融合的进度虽然缓慢,参与者也已先知先觉。Intel选择在手机领域进行反击,经过一系列的合作与收购,进军手机领域一支的先头部队已悄然组建。

Intel的一系列动作,不足以改变手机领域的格局,却足以使其震惊。这个领域的既得利益者很难接收这位巨人。Intel的能力不容置疑,胃口却大了些。过小的手机上放满了运营商和生产厂商的Logo,已经无法再嵌入一个Intel inside。

Intel不在乎这些阻力。在短时间内,Atom处理器无法在性能功耗比上压倒Cortex处理器,对于Intel这是一个长期的任务。而这些阻力并不值得担忧。

性能功耗比这个词汇是ARM发明的,主要目的是为了掩盖ARM处理器当时过于低下的性能。这个词汇本身无法阻碍Intel进军手机领域的步伐。Intel清楚只要Atom处理器能够在功耗上满足手机领域的需求,就可以利用自身强大的Ecosystem逐步切入手机领域。加以时日,增强对手机领域的理解,Intel可以在手机领域向ARM阵营发起强有力的挑战。

Cortex系列处理器的横空出世打乱了Intel的部署。Atom处理器在最不应该失败,也最失败不起的性能上输给了ARM。从Cortex A9起,ARM处理器实现了对Atom内核性能上的反超[i],Cortex A15完成了对Atom内核的全面超越。目前尚未有基于Cortex A15内核的处理器,但这只是时间问题。

Intel的时间所剩无几。如果在Moorestown/Medfield平台上使用的处理器内核性能没有明显超过Cortex系列处理器。Intel近期的所有努力将付之东流。在今后两到三年左右的时间,Intel必须发布一个全新的Atom内核[ii],在性能上明显高于Cortex A15内核。Intel需要本质地提高Atom内核的性能,需要一个激进的变革,而不是渐变。Intel可以暂时依靠并不完美的Atom内核在商务上取得成功,但是商业与技术并不会长久背离。

Cortex系列处理器的出现敲响了Intel的警钟。第一颗Cortex内核于2004年10月19日发布[108],这个内核并不是Cortex-A8,而是Cortex-M3。Cortex A8内核在2005年10月4日发布[109]。随后ARM在2006年5月15日发布了Cortex-R4内核[110]。至此Cortex内核完成了在嵌入式领域的布局。Cortex M,R和A内核使用ARMv7的指令集,应用于嵌入式的不同领域。M内核[iii]应用在一些对成本较为敏感的微控制器领域,R内核主要应用在实时控制领域,而A内核用于手机与PC领域。

ARM11之后,ARM处理器内核不再以ARM作为前缀[iv]。ARM公司取消这个前缀完全出于迷信的考虑[v]。在ARM的历史上,所有以偶数结尾的ARM内核,包括ARM2,6,8和10,都没有获得成功。ARM不想使用12,而13似乎更加糟糕,于是换了一个新的名字。ARM这个单词并没有在Cortex系列中消失,Cortex的三大系列M-R-A,合起来就是ARM。

更替前缀的内核,已焕然一新。Cortex A8内核的DMIPS指标达到了2.0DMIPS/MHz,这与ARM11相比取得了巨大的进步。Cortex A8处理器在大幅提高性能的同时依然保持了低功耗优势。一个含有32KB的指令和数据Cache,256KB的L2 Cache的Cortex A8,在使用600MHz的时钟频率时,总功耗仅为300mW[vi]。

Cortex A8内核不再使用简单的Enhanced DSP指令,而是引入了NEON部件。NEON的功能与Intel的SSE类似,用于支持SIMD类指令。Cortex A8是第一颗引入Superscaler技术的ARM处理器。在每个时钟内,Cortex A8可以并行发射两条指令[111]。出于降低功耗的考虑,Cortex A8内核使用了静态调度的流水线和顺序执行方式。

为了进一步提高时钟频率,Cortex A8内核使用了13级的整型指令流水线和10级NEON指令流水线,流水线级数高于ARM11内核的8级。流水线级数的增加有利于处理器主频的提高,却对指令分支预测的成功率提出了更高的要求。

Cortex A8在ARM11的基础上,将BTB使用的Entry数目从64增加到512,同时设置了GHB(Global History Buffer)和RS(Return Stack)部件。这些措施极大提高了指令分支预测的成功率,从ARM11的88%提高到Cortex A8的95%[112]。

Cortex A8在Cache的设计中,首次引入了Way-Prediction部件。在现代处理器中,Cache由多个Way组成,如8-way,16-way或者32-way。Way-Prediction部件的主要功能是预测当前Cache访问将使用哪个Way,可以暂时关闭不使用的Cache行,以到达节电的目的。Intel从Pentium M处理器起也使用了这种Cache访问方式,并一直应用到x86处理器的后续产品中。Atom处理器也可能使用了这种方式。

与ARM11相比,Cortex A8内核在Cache Memory系统上,进行了较大的优化。Cortex A8内核访问L1 Cache时只需一个时钟周期,而ARM11需要使用两个。Cortex A8支持L2 Cache,大小为128KB~1MB,ARM11虽然也支持L2 Cache,却几乎没有被SoC厂商使用。Cortex A8可以使用64位或者128位总线连接外部设备,ARM11只能使用64位总线。

Cortex A8使用了Architecture-Gating和Functional-Gating两种技术进一步降低功耗。所谓Architecture-Gating是指,处理器内核执行WFI(Wait for Interrutp)指令之后,将进入idle-loop模式。Cortex A8的Functional-Gating技术的本质是使用Clock-Gating技术,分离各个功能部件。当处理器运行运算时,不相关的功能部件,如Cache,指令队列,Write Buffer和NEON所使用的时钟可以临时切断,以达到节电的目的。Clock-Gating技术的大规模使用使得Cortex A8内核获得了300mw/600MHz的功耗频率比[111]。

在前45nm时代,Clock-Gating技术也已经在x86处理器上得到了广泛的使用,Cortex A8之所以获得了高于x86处理器的性能功耗比的重要原因,一是使用了更少的晶体管,二是因为没有如x86那样去挑战处理器运算能力的极限。

在Cortex A8之后,ARM加快了处理器内核的更新速度,每3年就会推出一个A系列处理器内核。这个速度远低于Intel的Tick-Tock。而对于人数不满两千,同时要兼顾Cortex R和M系列内核升级的ARM,已经是一个不小的奇迹。

2007年10月3日,Cortex A9正式推出[113]。Cortex A9具有两个版本,一个是传统的单内核,另一个是MPCore,最高主频可达2.0GHz,最多支持4个内核。Cortex A9的整型运算的性能在Cortex A8的基础上提高了25%,达到了2.5DMIPS/MHz和2.9CM/MHz[43][114],恰好超过Atom处理器的2.4DMIPS/MHz和2.8CM/MHz[vii]。

Cortex A9采用了更高的成产工艺,整型流水线的级数虽然只有8级[viii],时钟频率却高于Cortex A8。在Cortex A9中,ARM引入了高端处理器常用的乱序执行(Out-of-Order)和猜测执行(Speculative Execution)机制,进一步扩大了L2 Cache的容量(128KB~8MB),可使用Snooping和Directory两种机制实现Cache的一致性。

与Cortex A8相同,Cortex A9依然使用MESI模型进行Cache的共享一致性,但是对MESI模型进行了许多优化,支持更多的Cache-to-Cache传送方式,进一步减少了处理器对主存储器的访问[114][115]。

这些更新极大地提高了Cortex A9的性能。从Cortex A9开始,ARM处理器正式完成了对Atom内核性能上的超越,Cortex A9在性能上超越的不仅是Atom,还包括同时代用于嵌入式系统的处理器,如PowerPC和MIPS处理器[115]。ARM依靠性能功耗比的日子已一去不复返。但是Cortex A9距离Intel的主流处理器,Nehalem,Westmere和Sandy Bridge处理器依然有不小的差距。

ARM并没有停下脚步,2010年9月8日,代号为Eagle的Cortex A15正式发布[116]。对于Intel,狼外婆终于来了。Cortex A15内核并不是Cortex A9的继承者,Cortex A9虽然与Cortex A8的功能较为相近,也不是完全的继承关系。

与Intel频繁更新处理器内核的策略并不相同,ARM内核具有更长的生命期。1993年发布的ARM7内核仍然在被大规模使用。Cortex A8,A9和A15这三颗内仍将在相当长的一段时间里并存,深入到嵌入式应用的各类高端领域。

Cortex A15拥有足够的性能,具备了进军Laptop和Server领域的能力。在未来的3到5年里,Cortex A9和Cortex A15组成的ARM处理器阵营将与Intel的Atom,Sandy Bridge处理器展开全方位的较量。

Cortex A15最高主频将达到2.5GHz,支持8个内核,采用Superscaler流水线技术,具有1TB的物理地址空间,支持虚拟化技术,乱序执行,寄存器重命名,并行设置了多个执行单元。在现代高端处理器技术中涉及的技术几乎都可以在这个内核中找到。Cortex A15的性能将在Cortex A9的基础上继续提高50%。ARM公司尚未公开Cortex A15的功耗指标,但是可以预计在性能大幅提高的前提下,Cortex A15的功耗也必随之大幅提高。

首先是处理器主频的提高。Cortex A15使用了超长的24级流水线结构[ix],前12级用于指令预取,译码与分发,这部分指令流水是顺序执行的;后3~12级用于指令的执行,在这一阶段,指令可以乱序执行[117][118]。

超长的流水线结构利于处理器主频的提高,但是与Cortex A8相比,在使用相同的工艺时Cortex A15的主频仅仅提高了10%[117],以此推测Cortex A15使用的超长流水线,可能是为了降低功耗。

Cortex A15另外40%的性能提高,需要流水线其他部件和Cache Memory系统的协调工作。Cortex A15必须极大增强分支指令的预测命中率。过长的流水线也意味着巨大的流水线中断惩罚。Cortex A15分支预测部件的工作原理与Cortex A8/9基本相同,只是将BTB的条目增加到了2K个,而且采用2-Way组相连结构。

Cortex A15的GHB由Taken阵列,Not Taken阵列和Seletor阵列[x]组成。Cortex A15对非直接跳转指令进行了一些优化,设置了256个Entry的BTB阵列,每一个Entry可以存放多个目标地址。除此之外Cortex A15还引入了具有64个Entry的,使用全互连结构的MicroBTB。Cortex A15的这些功能增强进一步提高了转移指令的命中率,但是与Nehalem处理器的分支预测单元相比仍有不小的差距[117]。

Cortex A15的流水线与Cortex A8的基本结构较为类似,由Fetch,Decode,Rename,Dispatch,Neon/VFP,Interger Issue和Load/Store Issue等部件组成,只是在Cortex A15中,指令需要更多的时钟节拍才能通过这些部件[117]。例如在Cortex A15中,Fetch单元由5级组成,Decode单元由3级组成[117]。

Cortex A15的指令预取总线的宽度为128b,一次可以预取4~8条指令,与Cortex A9相比,提高了一倍。Decode部件一次可以译码3条指令,而Cortex A9一次可以译码2条指令。

Cortex A15引入了Micro-Ops的概念。Micro-Ops指令与x86的μops指令表现形式不同,但是基本想法较为类似。在x86处理器中,指令译码单元将复杂的CISC指令转换为等长的μops指令,再进入指令流水线中运行;而在Cortex A15中,指令译码单元将RISC指令进一步细分为Micro-Ops,以充分利用指令流水线中的多个并发执行单元。Cortex A15的Decode部件在一个时钟节拍内可以同时译码3条指令,并将这3条指令转化为5个Micro-Ops[117]。

Cortex A15提高了Interger Issue部件的发射能力,从Cortex A9的3条提高到4条,同时分离了Cortex A9的Load/Store Issue部件,具有独立的Load和Store部件,并开始在流水线使用128位宽的数据总线。

Cortex A15还使用了32个Entry的Loop Buffer,当处理器执行一段较长的循环指令时,指令流水线将直接从Loop Buffer中获得Micro-Ops,而无需使用Fetch和Decode部件。此时这两个部件可以暂时关闭,以节约功耗。Intel在Core 2架构中也使用了相同的机制[119]。

从体系结构的角度上看,Cortex A15对于ARM处理器自身是一次飞跃,但是与Intel的Nehalem/Sandy Bridge处理器相比,仍处于入门阶段。上文所提到的在Cortex A15中出现的技术,对于Nehalem处理器都是微不足道,更不用说是Sandy Bridge处理器。但是Cortex A8/9+Cortex A15依然可以凭借性能功耗比向Atom+Nehalem/Sandy Bridge处理器发起强有力的冲击。

制约x86处理器继续向前发展的主要原因有两个。一是Intel已经处于处理器体系结构的最前沿,每前进一步的代价过于巨大,Cortex A15虽然取得了巨大进步,但是仍处于高端处理器的入门阶段,仍有巨大的潜力。更重要的是,跟随者可以以更小的代价获得最新的技术。另外一个原因就是Intel的向前兼容策略,在某种程度上束缚了Intel前进的步伐。

ARM公司一再强调Cortex系列处理器的性能功耗比的优势,也在不自觉地掩饰ARM处理器相对较为简单的架构。从处理器体系结构本身出发,决定一个处理器功耗的最直接的要素依然是使用的晶体管数目。x86系列处理器功耗较高的主要原因是集成了较多的晶体管。在ARM处理器中使用的低功耗技术没有哪一个是独门绝技,这些技术也出现在x86系列的处理器中,包括Atom处理器。

从低功耗的设计理论上讲,一个处理器的功耗主要由动态功耗和静态功耗两部分组成。而对于CMOS电路,动态功耗主要由开关功耗和短路功耗两部分组成,公式描述如下。

Pdyn = (CL × Ptrans × Vdd2 × fclock) + (tsc × Vdd × Ipeak × fclock) [120]

其中CL指电路总负载电容,Ptrans指工作电路所占的比例,Vdd指工作电压,fclock指工作频率。而tsc指PMOS和NMOS同时打开的时间,在多数情况之下tsc的值较小,因此上述公司的后半段几乎可以忽略不计,因此Pdyn ≈ (CL × Ptrans × Vdd2 × fclock)。

其中CL参数由电路设计的复杂度决定,这也是x86处理器和ARM处理器目前功耗差距的最重要来源。Ptrans参数由处理器设计的电源管理策略决定,这也引出了一个低功耗设计的热点问题,处理器的低功耗设计更应侧重于在不同的场景之下,功耗的使用情况,而不应关注平均值。放之四海而皆准的电源管理最优策略并不存在,没有人能做到又让马儿跑,又让马儿不吃草。

Vdd参数的降低可以有效的降低功耗,近些年Vdd的值在不断下降,从5.0V,3.3V,2.5V到1.2V和0.8V。Vdd的不断下降,Vt[xi]也随之降低,不断降低的Vt最终导致Isub[xii]呈指数上升,反而极大了增加了静态功耗,这个现象在45nm及以下工艺的设计中更为凸现。fclock更似一面双刃剑。频率的提升有利于性能的提高,却也极大提高了功耗。

从CL和Ptrans两个指标上分析,不难发现ARM在CL层面上做得更好,更简练的设计决定了ARM处理器的低功耗。在Ptrans层面上分析,x86更胜一筹,x86处理器在ACPI规范中定义了一系列处理器状态,运比ARM处理器定义的状态复杂。x86处理器获得了较低的Ptrans值,但也无法掩盖因为较高的CL而获得的总功耗。

随着处理器制作工艺的不断前进,静态功耗所占的比例在不断地提高,这使得一些可以显著降低动态功耗,却提高了静态功耗的技术不再适用。静态功耗是指在晶体管处于上电状态时,晶体管的漏电流(Leakage)引发的功耗。漏电流主要由ISUB,IGATE,IGIDL和IREV组成。使用45nm工艺时的静态功耗是90nm工艺的6.5倍,使用32nm,22nm工艺时,静态功耗所占的比例呈指数上升[120]。

这些变化使低功耗的设计从降低动态功耗逐步转移到降低静态功耗上,在实现策略上从Clock Gating逐步转移到Power Gating。在Cortex A8处理器中,ARM将Clock Gating技术发挥到了极致,而由于缺乏工艺上的领先,在Power Gating领域上落后于Intel。从纯技术的角度上看,无论在降低动态功耗还是静态功耗的领域上看,Intel都是领先的。Intel在工艺上领先的事实,也在一定程度上说明了从门级电路的实现上看,天下半导体厂商的合力尚不足与之抗衡。

Intel却没能实现性能功耗比最优的处理器,这是技术之外的故事。在商业上,Intel一直坚持着向前兼容。多年以来Intel依靠向前兼容,战胜了一个又一个对手。向前兼容需要额外使用更多的晶体管数量,在服务器领域,因为保留向前兼容所浪费的晶体管并不是太大的问题,在手机领域却不容忽视。

Pentium Pro处理器大约使用了30%的晶体管数目处理x86向前兼容,包括Microcode ROM,指令译码和控制逻辑[121],而Pentium Pro处理器一共使用了5.5M个晶体管数目[36]。但是不要认为x86处理器在处理向前兼容时仅仅需要使用1.65M颗晶体管。因为除了进行指令转换(Instruction Transforming)这段逻辑之外,随着L1指令Cache的增加,向前兼容所付出的代价也在等比例上升。由于乱序存储器访问模型的出现,向前兼容需要付出更大的代价。

Atom处理器在实现中使用了In-Order的流水线,并没有采用乱序执行的μops指令流水线,在很大程度上也在回避着因为向前兼容而带来的巨大惩罚[xiii]。x86处理器继续背着向前兼容的大山,与针对性能功耗比进行了一轮又一轮优化的Cortex系列之间的竞争并不公平。

对Intel更不公平的是其长期坚持的通用平台战略。因为Intel的努力,PC处理器更加标准,更加通用,更加廉价。通用平台使得Intel获得了巨大的成功,却在一定程度上阻碍了Intel进军嵌入式领域。

嵌入式领域是一个备受Intel通用平台战略挤压的系统,通用处理器每进一步,嵌入式处理器便后退一步。嵌入式处理器在不断后退,不断细分的过程中,顽强地活了下来,根深蒂固地坚守了自己的阵地,回首却发现一直在前进的通用处理器x86,生活在最大孤岛中,被其包围得密不透风。这一次x86处理器需要从孤岛中游回彼岸,却无法使用ARM阵营的细分市场策略。

Intel和ARM两个公司本身并不具备可比性。自1992年起,Intel一直在半导体厂商中排名第一,ARM公司从来没有进入过半导体厂商的排名,甚至可以说ARM并不是一个半导体厂商,ARM没有生产过一颗商用处理器。Intel一年的销售额是几十个Billion,ARM仅为几百个Million。Intel有7,8万名员工,ARM仅有1700余名员工。

单独的ARM没有办法与Intel比较,但是ARM阵营所蕴含的能量却足以与Intel的x86阵营抗衡。在2009年排名TOP20的半导体厂商,除了Intel,AMD和Elpida之外,全部License了ARM内核。不仅如此ARM阵营还包括Apple,Microsoft和Google。诸多形态各异厂商的参与使ARM阵营更加立体化。

在x86处理器阵营中,AMD近期很少有声音[xiv],VIA在持续的亏损,真正努力的只剩下Intel。在Intel的Ecosystem中,除了Intel和提供基础BOIS的厂商外,其他的OEM/ODM并没有在处理器体系结构方面给予Intel必要的帮助。有些OEM厂商更像是依托在x86处理器之上的寄生虫。

严酷的外部环境使得Intel需要使用统一平台战略进入嵌入式市场,虽然这个策略与嵌入式系统要求的进一步定制,进一步细分的原则背道而驰。Intel依然不能在统一平台上有所动摇,目前以及在很远的将来,x86处理器阵营都无法向ARM处理器那样深入到嵌入式的每一个领域。多数嵌入式领域所提供的空间也无法容纳Intel这样的庞然大物。

Intel的目标非常明晰,就是手机处理器。在手机领域ARM处理器处于垄断地位,在技术上Intel并非没有任何机会。与ARM处理器相比,Intel的Atom处理器性能功耗比较为落后,但这并不是Intel在技术上的最大劣势。从整型运算的角度上看,Cortex A9略高与Atom处理器,而Atom处理器在Cache memory的表现更优。内核上的相比,两者各有千秋。

最令Intel尴尬的是,x86处理器并没有一个与AMBA总线类似的SoC平台总线,这是Intel进军嵌入式领域一个不小的障碍。Intel或者定义一条全新的SoC平台总线,或者集成AMBA总线。从加速推出产品的角度上,直接使用AMBA总线无疑是一条捷径。而世上没有捷径,从更长远的时间上看,借用AMBA总线,会使ARM阵营更加强大。最初的所谓捷径不过是为他人做的嫁衣裳。

Intel很难有其他选择。在x86处理器系统中广泛应用的PCIe总线,不能使用在SoC内部。这条总线的设计目标是作为局部总线,连接片外的外部设备。PCIe总线提供巨大的带宽的同时,带来了较大的传送延时。更为重要的是与基于AMBA总线的外部设备相比,基于PCIe总线的外部设计需要使用更多的资源,也带来了更大的功耗。PCIe总线的低功耗设备,与AMBA总线的低功耗设备,在性能功耗比上没有可比性。

AMBA总线阵营的强大超乎多数人的想象。AMBA总线是一个在SoC领域使用的事实上的标准。AMBA总线V1.0于1995年正式发布[122],用于SoC内部各个模块间的互联,支持多个主设备,支持芯片级别测试。在AMBA V1.0中定义了两条总线,ASB(Advanced System Bus)和APB(Advanced Peripheral Bus)。V1.0还定义了一个连接存储器的外部接口,这个外部接口可以用做测试。

ASB总线是一个快速总线接口,使用独立的地址数据总线,支持流水传送方式,支持多个主设备与从设备,采用集中译码和仲裁方式。ASB总线的主要作用是连接CPU,DMA引擎,内部存储器和一些快速外部设备。APB总线连接一些慢速设备,APB是ASB的Secondary Bus,两者的关系如图4所示。

ARM与x86之4--EAGLE <wbr>is <wbr>Coming!

图4 ASB与APB的组成结构[123]

从今天的技术上看,AMBA V1.0总线十分简陋,设计这样的总线标准甚至可以作为几个研究生的毕业论文。AMBA总线的最大优点是开放的架构,和因此带来的免费[123]。开放的总线标准使AMBA总线迅速普及,而且更易吸收整个半导体界的成果。

1999年AMBA总线更新到V2.0[124],增加了一个新的总线AHB(Advanced High-Performance Bus)。AHB总线取代了ASB在系统中的位置,使ASB进一步下移,增加了Split传送方式进一步提高了存储器读的效率,总线宽度最高可达128位。

2001年,ARM发布了AMBA V3.0总线规范,引入ATB(Advacned Trace Bus)和AXI(Advanced eXtensible Interface)总线。AXI总线的引入,使AMBA总线迈向新的台阶,性能已经可以与IBM的CoreConnect抗衡[126]。

AXI是一条现代总线。AXI总线分离了一个总线周期的地址阶段和数据阶段,更便于实现在现代总线中常用的Pipelining和Split技术。AXI总线进一步分离了总线通路,将AHB的单通路分解为Read Data,Read Address,Write Data,Write Address和Write Response共5个独立通路,进一步加速了对存储器的读写访问。

AXI总线接口逻辑设计较为复杂,与AHB总线相比多使用50%的资源。AXI的一次总线周期至少需要传送64字节的数据,而AHB总线是16字节,这也导致AXI总线的传送延时高于AHB总线[125]。AXI总线的目标不是用于替换AHB总线,在一个SoC中,AXI总线和AHB依然并存,只是AXI总线更接近ARM内核,AHB总线更贴近外部设备。

AMBA总线阵营规范了嵌入式领域的平台总线,日益壮大。2010年3月8日,ARM正式推出AMBA V4.0总线,引入了QoS机制,进一步增强了多层结构,将AXI总线细分为AXI4,AXI-Lite和AXI-Stream[127]。

这一切并不是AMBA V4.0最重要的更新。如同Nehalem内核最重要的变化并不是流水线,而是QPI互联结构[xv],在AMBA4总线中最值得注意的是片间互联总线CoreLink CCI[xvi](Cache Cohenrent Interconnect)架构。

CoreLink CCI架构使得多个SMP系统之间实现Cache共享一致性成为可能,Cortex A15也借此超越了用于嵌入式领域的PowerPC和其他多核MIPS[xvii]。在整个处理器总线阵营中只有IBM的CoreConnect和Intel的QPI可以与之抗衡。CoreLink的横空出世,使Cortex A15具备了和Intel的高端处理器Nehalem和Sandy Bridge抗衡的能力。在服务器领域,Cortex A15内核与Nehalem内核间的较量就是CoreLink和QPI之间的角逐。

AMBA总线标准提供的AXI,AHB,ASB,APB和ATB总线,不仅使用在ARM处理器系统中,MIPS和PowerPC处理器也开始使用AMBA总线。TI和Freescale的DSP也在使用AMBA总线。AMBA总线已经无孔不入,在整个嵌入式领域,没有可以向其挑战的对手[xviii]。

面对ARM内核,Intel并不畏惧,面对AMBA总线阵营,Intel只剩下无奈。可以预计在相当长的一段时间里,Intel无法推出一条能和AMBA总线抗衡的SoC平台总线。Intel只能暂时向AMBA总线示弱。

Intel自身具有强大的图形处理芯片,却在Moorestown平台中不得已使用了PowerVR SGX 535[128][129]图形处理芯片。PowerVR SGX 系列也是Apple A4,Samsung Hummingbird和TI的OMAP4处理器使用的图形处理芯片。

基于低功耗的考虑,Intel依然需要依赖ARM阵营提供的外部设备。如果最终的结局是Atom处理器依赖AMBA外设战胜了Cortex内核,Atom处理器仍然会被ARM阵营重新绑架。对于多数厂商,通过简单的系统集成,快速推出市场需要的产品是第一位的,而这些厂商却无法获得更高利润。

ARM的廉价License策略实际上已经清楚地向Intel转告了一个事实,单纯依靠处理器内核无法在嵌入式领域取得暴利。无法获取暴利的领域是不会有持续的资金注入。Intel并不会例外。也许Intel一直等待Medfield平台的成熟。但是不要给予这个平台太多期望。Medfield,这颗Intel有史以来第一个基于Atom处理器单芯片解决方案[130],如果仅是将Moorestown平台的Lincroft处理器和Langwell和二为一,前景并不光明。更为重要的是Medfield平台提供的外设,很难与ARM平台的外设阵营抗衡。

在外部设备领域,ARM不是一个人在战斗,而是利用AMBA总线控制了整个半导体界。整个世界已有的用于手机的处理器平台都在使用基于AMBA总线的各类外设,而没有一个使用基于PCI/PCIe总线的外部设备。

Intel的Medfield平台可能的优势依然是在处理器内核上战胜Cortex A9和A15。而这一切对于Atom Z6xx内核来说几乎是一件不可能完成的任务。可以预见,Medfield平台依然与基于Cortex A9内核的手机平台旗鼓相当。而对于后入者,仅靠旗鼓相当,很难获取太多的市场份额。

在抛开技术之后,Intel所面临的处境愈加艰难。Wintel帝国统治IT世界已有多年,芸芸众生对Wintel帝国产生了严重的审美疲劳。Intel需要进入的手机领域,与其说被ARM把持,不如说被剩余的所有半导体厂商把持。Intel动了ARM的奶酪也意味着动了全天下半导体厂商的奶酪。Intel的进军手机领域更像是一场大的赌博,没有人知道结局。可以肯定的是,Intel在放弃了XScale架构之后,不会轻易地放弃Atom架构。

也许Intel需要急迫解决的并不仅是技术问题。与许多巨型公司相似,最大障碍不在颛臾而在萧墙之内。与不到2000员工的ARM相比,来自Intel内部的故事复杂得多,也深刻得多。多年以来,Intel在PC领域取得巨大成功的同时,也滋生了巨大的执拗。x86处理器之前取得的辉煌,使得改变成为Intel一个尽力回避的观念。

Medfield平台的成功,对于Intel可能不是一件好事。也许Intel需要的是一场大的失败,因为使用失败统一内部意见往往比胜利容易得多。2011年,Intel将发布Medfield平台。ARM阵营也许依然会战胜Medfield平台。

这一切仅是决战的开始。永远不要低估Intel这位巨人的心。



[i] 有关Atom处理器与Cortex A9的性能对比见ATOM的前生今世。

[ii] 传统的Atom处理器伴随着Cortex A15的发布,已经死去。

[iii] M内核实际上不是ARM内核,而是16位的Thumb 2内核。

[iv] 对我而言这是一件非常快乐的事情。从这时起,我再也不用写ARM公司的ARM7内核这样绕口的文字了。

[v] 没有找到ARM的官方说法,所以没有列出参考文献。这个说法很可能是我在ARM公司工作的一个朋友的谣言。

[vi] 该功耗指标基于65nm LP工艺。

[vii] 我更相信这是Cortex A9处理器的预谋。Cortex A9可以超过的更多,不过ARM选择将更多的风头留给Cortex A15。

[viii] 8级流水做到了2.0GHz,又是乱序,又是猜测访问,又是多发射,实在是佩服。

[ix] 使用了这么长的流水线,却不是为了提高主频,想必是基于降低功耗的考虑。应该有些独特的设计,目前尚无找到详细描述。Cortex A15的这种做法有别于x86。

[x] 在多数处理器中,GHB具有4个状态Taken,Not Taken,Weekly Taken和Weekly Not Taken,Cortex A15将后两种状态合并。采用这种方法可以进一步减少晶体管数目,但其效果仍需观察,目前尚未找到采用这种方法的最终量化分析结果。

[xi] Vt指电压的门限值,用来识别0,1逻辑。

[xii] Isub指亚域值漏电流,即从Drain经过弱反形层流向Source的电流。

[xiii] 随着纳米技术的不断向前发展,因为向前兼容所浪费的晶体管数目在整个Die中所占的比例在不断缩小。但是向前兼容却为处理器的设计造成了巨大的困难。因为照顾向前兼容,采用了非最优的设计而浪费的晶体管数目很难统计。

[xiv] AMD近期发出的声音是加入Intel和Nokia主导的Meego阵营。AMD这种态度,在很大程度上是在向世界承认弱者的地位,和不争第一的雄心壮志。只希望在未来的几年,当Intel与ARM激战正酣时,AMD不要再去抄Intel的后路。

[xv] 笔者之所以认为Nehalem内核是Intel的第三个里程碑,是因为QPI互联机制,而不是Nehalem内核本身。如果单指Nehalem内核,AMD完全可以开发出与此性能相当的内核,而QPI的基于Directory机制的Cache共享一致性机制,将使AMD放弃追赶。多年以来,IBM和HP高端服务器的附加值都是在如何进一步增强Cache一致性模型。Nehalem在芯片内部解决了这个问题之后,HP,IBM服务器和台湾OEM厂商生产的基于Nehalem内核的服务器将质的差别。

QPI是一个较为复杂的机制,Intel员工可以参考Nehalem Microarchitecture手册。Robert A. Maddox, Gurbir Singh和Robert J. Safranek书写的Weaving High Performance Multiprocessor Fabric是唯一一本介绍QPI的书籍。目前与QPI相关的论文并不多。

[xvi] 感谢弯曲评论的陈先生提出的宝贵意见,Tektalk上有一篇关于CoreLink的简介,比我提到的这些完整得多,请参阅http://www.tektalk.org/2010/11/28/arm的薄积与薄发-浅谈arm的interconnect的战略。

[xvii] Freescale的QorIQ系统处理器引入了CoreNet架构,而这个架构并不能实现多个SMP系统的Cache共享一致性。RMI和Cavium的MIPS多核也没有完美地解决这些问题。如果用一条总线基于Snooping技术,连接2~4个内核还可以,8个内核十分困难。

Cache的共享一致

战后的世界属于巨型公司,这些公司借助国家资本的力量,持续着垄断。这些垄断的初衷并非都是恶意的,在美国这却是一个早在1890年就立法制止的。1911年,美国烟草公司被分拆。1982年,美国电报电话公司被分拆。

这些分拆很难抵达IT业。1975年成立的Microsoft虽然多次被推入拆分的风口浪尖,却从未被拆分。IBM和Intel多次遭到分拆的威胁,也安然无恙。连分拆的支持者都注意到这样一个事实,这些公司不是依靠国家资本获得垄断地位,而是依靠多年苦心积攒的知识产权坚持到现在。

这类垄断之忧不在颛臾而在萧墙之内。在这些巨型IT公司中,最低层的工作人员需要经过多达十几级的汇报关系,才能到达首席执行官。在这十几级汇报链中,向上所传递最多的就是粉饰太平。

微不足道的小问题在这些大公司中也能引发无尽的讨论。为解决某个问题而举行的会议,经常被无休止地扩大,从一个会议扩展为多个会议,从几个人参与变为几十人参与。这个问题变得已不再重要时,内部并无统一意见。

西方巨型公司的弊端在于 欧美所倡导的民主代价过于昂贵。撒切尔夫人是欧洲第一个深刻认识到这些问题的最高执政官。历史上,英国并不重视中小企业的发展,在凯恩斯主义盛行的二十世 纪五十年代,英国经历了三次大规模的企业兼并。至撒切尔夫人执政,巨型企业大行其道。更多的人发现这些大型企业并不能提高生产效率,大范围的垄断与集中, 已使英国经济举步维艰。

上世纪八十年代,撒切尔夫人开始变革,剑锋所指,巨型公司纷纷解体,中小企业如雨后春笋般涌现。撒切尔的私有化,货币控制,削减福利与抑制工党的四项举措,客观上拯救了英国经济,也使这位值得尊敬的女士誉满天下,谤满天下。

ARM在这样的大背景之下诞生,这注定了这些创始人不会也不愿意使ARM成为巨型公司,这也是取得如此成就的ARM,人数尚不过两千的最重要原因。ARM最初的简称是Acorn RISC Machine。Acorn Computer创立于1978年,总部位于剑桥,由Andy Hopper(剑桥大学), Chris Curry(Sinclair Research)和Herman Hauser(剑桥大学)创建[48]。

Acorn最初使用MOS Technology 6502处理器搭建处理器系统。MOS Technology 6502是一颗8位处理器,设计这颗处理器的工程师来自摩托罗拉的MC6800设计团队[48]。基于6502处理器,Acorn开发了最令其自豪的处理器系统BBC Micro[49]。

在上世纪80年代至90年代,BBC Micro处理器系统主宰英国的教育市场。当时还有另外一个基于6502处理器的系统,Apple II[50]。从这时起,Acorn和Apple这两个设计理念及产品形态相似的公司结下了不解之缘,有些人将Acorn公司称呼为“The British Apple”[51]。也是在这个时候,Acorn迎来了一生中的对手Intel。基于Intel x86构架的PC对同时代的处理器厂商是一场噩梦,很少有公司能够醒来。服从或者灭亡,别无选择。Acorn选择服从,向Intel申请80286处理器样片,Intel拒绝了这个请求[52]。

工程师对剩余的处理器,进行了充分的评估。结果令人失望。此时的Acorn没有选择,认真地考虑是否需要研制一颗属于自己的处理器。他们没有任何处理器设计经验,为数不多的工程师们除了才华,只有梦想。才华与梦想恰能改变整个世界。

1983年10月,Acorn启动了代号为Acorn RISC的项目,由VLSI Technology负责生产。1985年4月26日,VLSI成产出第一颗Acorn RISC处理器,ARM1。ARM1的结构非常简单,仅有个25,000晶体管,甚至没有乘法部件[52]。当时并没有人留意这颗芯片,更多的人关注Intel在1985年10月17日发布的80386处理器[36]。

没有人认为这颗略显寒酸的ARM1能给80386带来任何冲击,甚至包括研发这颗芯片的Acorn工程师。做为处理器厂商,与Intel活在同一个时代是一场悲剧,无论是Acorn,IBM亦或是不可一世的DEC。Intel并不是不犯错误,只是有限的几个错误都能被及时修复。才华横溢的Intel工程师将处理器的故事演绎至巅峰,他们的竞争对手也因此步入地狱。

Acorn不得不选择回避,这也决定了ARM处理器的设计理念是low-cost, low-power和high-performance。这个理念与21世纪智能手机的需求不谋而合,却是Intel强加给ARM的。Intel在不经意间为自己树立了一个强大的对手,这个对手在Intel的庇护之下一步步长大。并不夸张地说,没有Intel就没有ARM的今天。

因为对low-cost和low-power的追求,Acorn选择了RISC,而不是CISC,在上世纪80年代,RISC与CISC孰优孰劣尚无定论。在当时采用RISC技术可以看得到的优势是可以用更少的芯片资源,更少的开发人员实现一个性能相对较高的处理器芯片[53]。Intel使用了CISC架构,很大程度上也决定了Acorn选择了RISC。刘备的“每与操相反,事乃可成”,对于Acorn就是“与Intel不同,便有机会”。

ARM的成长仍然缓慢,陆续发布的ARM2与ARM3没有激起波澜。只有为数不多的公司选择ARM3处理器开发产品。一些公司将ARM3处理器用于研发,最有名的公司就是Apple[53]。在当时,Apple也是屈指可数的对ARM友善的公司。

Acorn无论是在财务上还是在技术上都遭遇了瓶颈。销售量达到150万台的BBC Micro没有给Acorn带来足够的财富,与席卷天下的PC相比这微不足道[54]。ARM3与Intel在1989年发布的80486也没有太多可比性。危机最终降临到Acorn这个年轻的公司,1985年2月,当时的IT巨头Olivetti出资12M英镑收购Acorn 49.3%的股份[55]。Olivetti的庇护没有给Acorn带来机遇。

Olivetti创建于上世纪初,对智慧与品质苛刻地执着使得他们的产品陈列在纽约的现代艺术博物馆中,出现在许多经典的影片中。这些产品没有改变这个公司的最终命运。Olivetti最终涉足PC领域,使用Zilog的Z8000,挑战在这个领域所向无敌的Intel。

Olivetti收购Acorn后,更多地将ARM处理器用于研发,真正的产品使用Zilog系列。这段时间是Acorn最艰难的日子。Acorn的创始人Andy Hopper最终选择从Olivetti独立。出乎意料之外,Olivetti支持了Andy的决定。

1990年11月,Acorn(事实上是Olivetti Research Lab),Apple和VLSI共同出资创建了ARM。Acorn RISC Machine正式更名为Advanced RISC Machine[55]。在1996年,Olivetti在最困难的时候将所持有的14.7%的Acorn股份出售给了雷曼兄弟[56]。

当时的Apple正在为代号Newton的项目寻找低功耗处理器。Newton项目的终极目标是实现地球上第一个Tablet。Apple对Tablet的前景寄予厚望,他们直接将公司Logo上的Isaac Newton作为项目的名称。Apple最初的Logo是在苹果树下深思的牛顿。两个Steve[i]将公司命名为Apple,与喜欢吃苹果没有任何联系,只因为是苹果而不是鸭梨砸到了牛顿头上。

Newton Tablet的想法过于超前,最糟糕的是Jobs当时并不在Apple。Apple用并不太短的时间证明了一条真理,没有Jobs的Apple和没有乔丹的公牛没有太大区别。1996年3月,Steve Jobs再次回到Apple,两年后取消了这个并不成功的项目[57]。等到Jobs再次推出iPad Newton时,已是十几年之后的事情了[58]。

Apple投入3百万美金拥有了ARM公司43%的股份[60],但是并没有把宝押在ARM公司,Apple真正关注的是在1991年与IBM和Motorola组建的AIM[59]。在1998年,ARM公司在英国和美国同时上市后,Apple逐渐卖出了这些股份。在2010年,Apple即便准备好了80亿美金,却也无法收购ARM。

上世纪九十年代初期的ARM公司,财务依然拮据,起初12个员工只能挤在谷仓[ii]中办公,廉价License的商业模式更不被人看好。虽然依靠Apple的鼎力相助,ARM6[iii]得以问世,却没有改变Apple和ARM的命运。Newton项目设计的是本应该属于下一个世纪的Tablet,ARM6被PC处理器和当时多如牛毛的RISC处理器笼罩,无所作为。

上世纪90年代属于PC领域。AMD的异军突起,及其与Intel的竞争,构建了上世纪九十年代处理器领域一道最炫目的风景线,服务器领域属于DEC。1992年2月25日,DEC发布的Alpha21064处理器,主频达到150MHz[61],而Intel在第二年发布的Pentium处理器,主频仅有66MHz[62]。

整个90年代,处理器世界都在惊叹着Alpha处理器所创造的奇迹。DEC陆续发布的Alpha系列处理器既便是放到二十一世纪的今天,设计理念依然并不落后。DEC工程师是在为21世纪设计处理器芯片。在Alpha21x64系列处理器的编号中,’21’代表二十一世纪,而’64’代表64位处理器[63]。

上帝并不青睐DEC公司,科技与商业的严重背离酿成了巨大的灾难。Alpha处理器的技术尚未抵达巅峰,DEC的财务已捉襟见肘。1994~1998年,DEC不断地向世界各地兜售资产。至1997年,DEC出售的资产已遍及五大洲,二十多个国家[64]。1998年1月26日,DEC正式被Compaq收购[65]。在DEC解体的最后一段日子里两个公司最为受益,一个是Intel,另一个就是ARM。

在ARM的起步阶段,鼎力相助的是Apple,最先License ARM内核的却是英国本土的GEC半导体公司。在1993年因为Apple的引荐,ARM处理器跋山涉水来到日本,与Sharp建立了合作关系。在此之前Sharp与Apple一直在合作开发Newton项目。

这些合作并没有缓解ARM的财务危机,ARM一直在追寻真正属于自己的客户。1993年,Cirrus Logic[iv]和德州仪器公司TI(Texas Instruments)先后加入ARM阵营。TI给予了ARM雪中送炭的帮助。TI正在说服当时一家并不知名的芬兰公司Nokia与他们一同进入通信移动市场。TI在DSP领域已经取得了领袖地位,但并不熟悉CPU业务,在屈指可数的可以被操控的公司中,最终选择了ARM[67]。

ARM迎来了上天赐予的机会。通过与Nokia和TI的密切合作,ARM发明了16位的Thumb指令集,真正意义上创建了基于ARM/Thumb的SoC商业模式[67]。ARM已经逐渐摆脱了财务危机,业务不断扩大。至1993年底,ARM已有50个员工,销售额达到10M英镑。

同年ARM迎来了公司成立以来最重要的一颗处理器内核,ARM7[67]。ARM7使用的Die尺寸是Intel 80486的十六分之一,售价仅为50美金[v]左右。较小的Die尺寸,使ARM7处理器获得了较低的功耗,适合手持式应用[67]。

ARM7处理器引起了当时的处理器巨头DEC的关注。1995年,DEC开始研发StrongARM。与其他License ARM内核的半导体厂商不同。DEC获得了ARM架构的完整授权,DEC可以使用ARM的指令集,设计新的处理器架构,这个特权后来被Intel和Marvell陆续继承。第二年的2月5日,DEC正式发布SA110处理器,开始提供样片[68]。SA110处理器迅速得到了业界的认可,Apple开始使用SA110处理器开发MessagePAD 2000 [69]。

StrongARM处理器在设计中注入了Alpha处理器的一些元素。StrongARM使用5级顺序执行的流水线,分离了指令和数据Cache,添加了DMMU和IMMU功能部件,每个MMU中包含32个全互连结构的TLB,添加了16级深度的WB(Write Buffer)[70]。至此ARM处理器更像是一颗微处理器,而不再是微控制器。

DEC的帮助使ARM处理器达到了前所未有的高度。更为重要的是,这颗160MHz,DMIPS为185的处理器,功耗低于500mW[70]。这不仅引起了工业界的浓厚兴趣,学术界也开始真正关注ARM处理器。1997年,DEC如期发布了第二颗StrongARM芯片,SA1100。SA1100在SA110的基础上增加了一些外部设计。第二年Intel为SA1100提供了一个伴侣芯片SA1101,SA1100+SA1101也成为了许多PDA厂商的首选。1999年,Intel发布了最后一颗StrongARM处理器SA1110[vi],和对应的伴侣芯片SA1111。

StrongARM的成功没有帮助DEC摆脱财务危机。而DEC却找到了一个更容易赚钱的途径。1997年5月,DEC正式起诉Intel,宣称Intel在设计Pentium,Pentium Pro和Pentium II处理器时侵犯了DEC的10条专利。1997年9月,Intel反诉DEC在设计Alpha系列处理器时侵犯了Intel多达14条专利[72]。

在IT界,这样的官司大多不了了之。1997年11月27日,DEC和Intel选择和解。DEC向Intel提供除Alpha处理器之外的所有硬件设计授权,进一步支持Intel开发IA64处理器。同时Intel花费了625M美金购买DEC在Hudson的工厂,Israel Jerusalem和Texas Austin的芯片设计中心。这两个公司还签署了长达十年的交叉授权协议[72]。

DEC的技术注入使Intel的x86处理器迈入新的时代,Intel具备了向所有RISC处理器同时宣战的能力,最终一统PC和服务器领域。Intel还从DEC获得了StrongARM。克雷格·贝瑞特认为这是上天赐予Intel的机会,x86处理器与StrongARM的组合,将使Intel的处理器遍及世界上任何需要处理器的领域。

为了迎接StrongARM的到来,贝瑞特放弃了Intel自己的RICS处理器,i860和i960。Intel为StrongARM起了一个炫目的名字XScale,动用了积蓄已久史上最为强大的Ecosystem,强势进军嵌入式领域。

一时间,XScale处理器遍及嵌入式应用的每一个领域,用于手持终端的PXA系列,用于消费类电子的IXC/Intel CE系列,用于存储的IOP系列,用于通信的IXP系列。Intel的处理器技术极大地促进了ARM内核的发展,借用PC帝国的Ecosystem使ARM处理器从生产到设计一步领先于所有嵌入式行业的竞争者。首先成为XScale处理器试金石的是摩托罗拉半导体的68K处理器。

在XScale系列处理器诞生之前,68K处理器主宰嵌入式领域,Apple Macintosh最初也使用68K处理器。在1997年,摩托罗拉销售了79M片68K处理器,而Intel的x86处理器一共卖出了75M片[73]。这是68K处理器最后的辉煌。Intel和TI主导的ARM处理器终结了68K处理器。摩托罗拉半导体面对ARM的强势出击毫无准备。ARM处理器不断地蚕食68K的市场份额,直到完全占有。

1995年,摩托罗拉半导体的香港设计中心发布第一颗用于手持式设备的DragonBall处理器,MC68328(EZ/VZ/SZ)[74],这是香港半导体界最好的时代。而StrongARM/XScale很快结束了香港设计中心的幸福生活。面对ARM的挑战,DragonBall最终屈服,DragonBall MX(Freescale i.MX)系列处理器开始使用ARM9。使用ARM内核并没有改变摩托罗拉香港设计中心的命运,这个设计中心最终不复存在。

在工业控制领域,68K内核进化为ColdFire[vii]。ColdFire在HP的中低端打印机中取得的成就几乎是最后的绝唱。在通信领域,摩托罗拉半导体抛弃了基于68K内核的MC68360,研发出基于PowerPC架构的MPC860处理器。这颗处理器是通信时代的经典之作,摩托罗拉半导体陆续推出了一系列基于PowerPC内核的通信处理器,却再也没有重现MPC860时代的君临天下。近期推出的QorIQ[viii]系列处理器面对多核MIPS处理器总是滞后一拍。

摩托罗拉半导体,昔日的王者优雅地没落。摩托罗拉半导体于1955年推出第一个锗晶体管,开创了半导体集成电路产业,在整个60年代一骑绝尘,70年代末迎来了68K的辉煌。即使在1985年,摩托罗拉还是全球第三大半导体公司。而怀抱通吃整个产业链的野心,对封闭式系统的挚爱,使摩托罗拉连同半导体部门在同一棵石头上跌到了一次又一次。至21世纪,摩托罗拉半导体(Freescale)的排名在十名左右,2009年的排名仅为第17位。

击败了摩托罗拉半导体的Intel没有感到一丝喜悦,更多的是寒气。2006年,Intel的业绩跌入低谷,这也使得当时的CEO贝瑞特作出了一个艰难的选择,2006年6月27日,Intel将PXA系列处理器出售给了Marvell[12]。

Intel虽然保留了ARM处理器的授权,却已彻底退出了ARM阵营。这是Intel一个非常谨慎而且坚决的选择。Intel需要扑灭后院的熊熊烈火。在PC领域,AMD率先推出了64位的K8处理器[75],并在2005的Computex 上,发布双核处理器Athlon 64。Intel x86最引以为豪的性能优势已不复存在。

这段时间Intel只能依靠工艺与强大的商务能力与AMD的Athlon64处理器周旋。2008年11月,Intel正式发布基于Nehalem内核,用于台式机的Core i7处理器[76],用于服务器的Xeon处理器,Core i3/i5也如期而至。Nehalem内核使Intel彻底战胜了AMD。这颗处理器也是Intel开始研发x86处理器以来,第三个里程碑产品,之前的两个里程碑分别是80386和Pentium Pro。从这时起AMD处理器在性能上再也没有超过Intel。Intel解决了最大的隐患后,却发现ARM处理器已非吴下阿蒙。

ARM7之后,ARM8内核于1996年发布。ARM8内核生不逢时。与ARM7相比,AMR8在没有显著提高功耗的前提下,性能提高了一倍,依然无法和DEC的StrongARM抗衡[77][78]。仅有少量手机在原型设计中考虑过使用ARM8内核,ARM也仅为用户提供了CPU样板。

ARM8的失败并没有阻碍ARM内核的进一步发展,与StrongARM的竞争没有消减ARM阵营的实力,反而激发了ARM处理器不断向前的动力。1997年ARM9正式发布,DMIPS指标首次超过了1.0大关。ARM9是一个重要的里程碑产品。这个产品标志着ARM处理器正式进入微处理器领域,而不再是简单的微控制器。

ARM9将ARM7的3级指令流水线提高到5级,与StrongARM使用的流水线结构较为相似。进一步细化的流水线使得ARM9最高的时钟频率达到220MHz,而ARM8仅为72MHz[78]。ARM9进一步优化了Load和Store指令的效率,ARM9不再使用普林斯顿结构,而转向哈佛结构,使用了独立的指令与数据Cache。

ARM9的指令执行部件分离了Memory和Write Back阶段,这两个阶段分别用于访问存储器和将结果回写到寄存器。这些技术的应用使得ARM9可以在一个周期内完成Load和Store指令,而在ARM7中,Load指令需要使用3拍,而Store指令需要使用2拍。

ARM9可以通过增强的编译器调整指令顺序来解决RAW(Read-after-Write)[ix]类相关。ARM9的这些功能增强,使得在相同的工艺下,其执行性能是ARM7的一倍左右[79]。ARM7并没有被淘汰,简练的设计极大降低了功耗,Apple在2001年10月23日[80]发布的iPod依然使用了ARM7处理器[81]。

ARM7与ARM9的合理布局,使得ARM阵营迅猛发展。基于ARM7和ARM9内核的SoC处理器迅速遍及世界的每一个角落。ARM内核依然在前进。1998年的EPF(Embedded Processor Forum) ARM10内核正式推出。2000年4月12日,Lucent发布了第一颗基于ARM10的处理器芯片[83]。

ARM10内核的设计目标依然是在相同的工艺下,双倍提升ARM9的性能。而提高性能的第一步是提高指令流水线的时钟频率,而流水线中最慢的逻辑单元决定了时钟频率。ARM10使用了6级流水线结构,但并不是在ARM9的5级流水线的基础上增加了一级,而是进行了细致取舍而调优。最终的结果是在使用相同的工艺时,ARM10内核可使用时钟频率为ARM9内核的1.5倍[82] [84]。

ARM10内核重新使用了ARM8内核的系统总线,将ARM9的32位系统总线提高到64位。这也使得ARM10可以在一个时钟周期内完成两条寄存器与存储器之间的数据传递,大幅提高了Load Multiple和Store Multiple指令的效率[84]。

ARM10改动了Cache Memory系统,与ARM9相比提高了存储器系统的效率。ARM10的指令与数据Cache使用虚拟地址,64路组相连结构,引入了高端处理器中流水线与Cache交换数据的Streaming Buffer和Cache Line filling部件[84]。

ARM10内核优化了存储器读指令。实现了最为简单的乱序执行机制。当一条存储器读指令没有执行完毕,其后不相关的指令可以继续执行。ARM10对乘法指令进行了特别的优化,设置了一个新型的16×32的乘法和乘加部件,还设置了两级乘法指令流水,使得每一个时钟周期可以执行一条乘法指令[84]。同时ARM10内核增加了对浮点运算的支持。

从技术的角度上看,ARM10远胜过ARM9,但是没有办法在商业上与ARM9一较高下。ARM10的命运与ARM8惊人的一致。生不逢时的ARM8与StrongARM不期而遇,ARM10与XScale生活在同一年代。

Intel的工程师面对ARM的指令流水线耐不住技痒,ARM10的指令流水线与之前的ARM内核相比,可以说是一个飞跃,而与同年代的高端处理器相比只是一个玩具。Intel的帮助极大促进了ARM处理器的发展。

Intel在保证XScale架构低功耗的同时,引入已经在Pentium Pro系列处理器上非常成熟的Superpipelined RISC技术[85],借助Intel的工艺优势,使得XScale处理器的最高运行频率达到了1.25GHz[86]。此时Intel开发的处理器步入了高频低能的陷阱,1.25GHz的PXA3XX性能仅比624MHz的PXA270的执行效率高25%[86]。

XScale架构并没有使Intel盈利。ICG(Intel Communication Group)部门和WCCG(Wireless Communications and Computing Group)部门给Intel带来的是巨额亏损,ICG在2002~2004年的亏损分别为$817M, $824M和$791M[87]。2003年12月11日,Intel宣布将WCCG合并到ICG中,并在2004年1月1日生效。

这次合并没有挽救XScale的命运。在2006年,AMD的步步紧逼使Intel迎来了20年以来最糟糕的一季财务报表。Intel开始了有史以来最大规模的裁员。2006年7月13日,Intel宣布取消1000个经理职务[89],2006年9月5日,Intel裁员10%[90]。

在此之前Intel将XScale处理器中Marvell还愿意接收的部分出售[12]。Marvell需要的并不是XScale内核,而是Intel从DEC获得的对ARM指令集的完整授权,很快Marvell推出了基于标准ARM v5/v6/v7的处理器,而不再单独依靠XScale。XScale,这个几乎耗尽Intel全部心血的架构,已经走到了最后尽头。

Intel退出ARM阵营,不是因为缺少$600M现金。和许多人预料的并不相同,Intel并不是为了主推Atom处理器,而放弃XScale。而是因为Intel用长达八年的时间发现了一个事实,ARM的廉价License策略并不能使之获利,而必须做Atom。

ARM的廉价License的获益者是ARM自身,随着处理器厂商的不断加入, ARM阵营获得了迅猛发展,这也加速了处理器厂商的优胜劣汰。但是Intel发现的事实依然适用于所有正在使用ARM授权的半导体厂商。

最令ARM内核尴尬的是,依靠这个号称最为开放的处理器内核,获取暴利的是一些做着史上最为封闭系统的公司。凭借ARM内核,Qualcomm为3G专利找到了最佳载体,Apple不断兜售着各类新奇的电子设备。来自通信领域的Cisco,华为陆续加入ARM阵营。ARM,这个来自半导体领域的处理器,并没有使这个领域受益。ARM的出现,极大降低了处理器的设计门槛,使得单纯依靠半导体技术,为做处理器而做处理器的厂商举步维艰。

Intel首当其冲。Intel的错误在十几年前已然犯下。贝瑞特本应该做出对Intel最为有利选择,从DEC那里获得StrongARM后,再亲手终结StrongARM。贝瑞特不经意的失误为Intel的未来树立了一个强大的对手,也使整个处理器世界更加精彩。

ARM从XScale处理器中获得了足够的能量,可以不依赖任何厂商。他们的命运已经牢牢地掌握在自己手中。2002年12月,ARM1136内核发布[91]。2004年7月19日,ARM1176内核发布[92]。2005年3月10日,ARM1156内核发布[93]。在此之前的ARM处理器虽然得到了广泛应用,但是从纯技术的角度上看这些处理器微不足道。

ARM11基于ARMv6指令集,之前ARM还开发了V1,V2,V2a,V3,V4和V5指令集。ARM使用的内核与指令集并不一一对应。如ARM9使用V4和V5指令集,XScale使用V5指令集。ARM7最初使用V3,而后使用V4,最后升级到V5。在ARM指令集后还包含一些后缀如ARMv5TEJ,其中T表示支持Thumb指令集,E表示支持Enhanced DSP指令,而J表示支持Jazelle DBX指令。

ARM v4包含最基础的ARM指令集;v5增强了ARM与Thumb指令间交互的同时增加了CLZ(Count Leading Zero)和BKPT(Software Breakpoint)指令;ARMv5TE增加了一系列Enhanced DSP指令,如PLD(Preload Data),LDRD(Dual Word Load),STRD(Dual Word Store)和64位的寄存器传送指令如MCRR和MRRC。ARM v4和v5在指令集上变化不大,v5也可以向前兼容v4指令集[94]。

而v6指令集并不能100%向前兼容v5的指令集。由于ARMv6对存储器访问模型的大规模更改,完全的向前兼容不再可能。从x86处理器苛求的向前兼容的角度上看,这些改动并不完美,正是这些不完美使ARM内核轻装前进。

ARM的指令集使用RISC架构,但是在ARM指令集中依然包含许多CISC元素。与PowerPC指令集相比,ARM的指令集凌乱得多,这为指令流水线的译码部件制造了不小的麻烦。在ARM内核包含三类指令集,一个是32b长度的ARM指令,一个是16b长度的Thumb指令,还有一类由8位组成的变长Jazelle DBX(Direct Bytecode eXecution)指令集。在ARM架构为数不多的指令集中,有两类指令值得特别关注,一个是Conditional Execution指令,另一个是移位指令。

绝大多数ARM的数据访问指令都支持条件执行功能。所谓条件执行是指指令可以根据状态位,有选择地执行。使用这种方式可以在一定程度上降低条件转移指令预测失败时所带来的系统延时。在计算GCD(Greatest Common Divisor)时,ARM的条件执行指令发挥了巨大的作用,如图2所示。




图2 gcd算法的实现[94]



通过上图可以发现由于SUBGT和SUBLE指令可以根据CMP指令产生的状态决定是否执行,因此显著降低了代码长度。ARM指令集还对移位操作进行了特别的处理,ARM不含有单独的移位指令,使用了Barrel Shifter技术,与其他指令联合实现移位操作,使用这种方法可以有效提高某些运算的效率,如图3所示。



ARM与x86之3--蝶变ARM
图3 Barrel Shifter的使用



这些特殊的指令使ARM内核有别于其他处理器内核,但并不意味着极大提高了执行效率。首先CMP指令,SUBGT和SUBLE指令有较强的相关性,不能并发执行。此外现代处理器的条件预测单元也可以极大降低条件转移指令的命中率。一些处理器,如x86的CMOV指令和PowerPC的isel指令使用了更小的代价实现了ARM的条件执行功能。

ARM内核在条件执行指令时占用了4个状态位,影响了指令集和寄存器的扩展。在绝大多数RISC处理器中具有32个通用寄存器,而ARM内核仅有16个通用寄存器[x]。ARM的特殊移位操作,增加了指令的相关性,在有些情况下,不利于多发射流水线的实现,也增加了指令流水中预约站RS(Reservation Station)的实现难度。

计算机体系结构是一个权衡的艺术,尺有所短,寸有所长。不同的内核都有自己最为合适的应用,不经过认真的量化分析不能轻易得出孰优孰劣的结论。不过仍有一个结论,在现阶段依然适用,处理器领域历经多年的优胜劣汰,所剩无几的处理器内核在激烈的竞争中日渐趋同。

ARM11内核使用了现代处理器中常用的一些提高IPC的技术,这是ARM处理器的一个重要里程碑。ARM11内核引起了计算机科学的两个泰山北斗,David A. Patterson和John L. Hennessy的注意。他们以ARM11内核为主体,而不再是MIPS,书写了计算机体系结构的权威著作,《Computer Organization and Design, Fourth Edition: The Hardware/Software Interface》。这也是学术界对ARM处理器有史以来的最大认可。

ARM11可以支持多核,采用了8级流水线结构,率先发布的内核其主频在350~500MHz之间,最高主频可达1GHz。在使用0.13μm工艺,工作电压为1.2V时,ARM11处理器的功耗主频之比仅为0.4mW/MHz。ARM11增加了SIMD指令,与ARM9相比MPEG4的编解码算法实现速度提高了一倍,改变了Cache memory的结构,使用物理地址对Cache行进行索引[95]。ARM11终于使用了动态分支预测功能,设置了64个Entry,4个状态的BTAC(Branch Target Address Cache)[95]。

ARM11进一步优化了指令流水线对存储器系统的访问,特别是在Cache Miss的情况之下的存储器读写访问。在ARM11内核中,当前存储器读指令并不会阻塞后续不相关的指令执行,即便后续指令依然是存储器读指令,只有3个存储器读指令都发生Cache Miss的情况,才会阻塞指令流水线[95]。

虽然ARM11没有使用RISC处理器常用的out-of-order加Superscaler技术,在一个时钟周期之内仅能顺序发射一条指令,但是支持out-of-order completion功能,即在执行单元中的不相关的指令可以乱序结束,而不用等待之前的指令执行完毕。

ARM11的这些功能增强,相对于ARM9/10是一个不小的技术飞跃。但是与其他处于同一时代的x86,PowerPC和MIPS处理器相比,仍然有不小的差距。ARM11内核的存活之道依然是性能功耗比。

依靠着强大的性能功耗比,ARM11内核取得了巨大的商业成功。ARM11内核并不是一个性能很高的处理器,但是随着处理器性能的不断提升,量变引发了质变。ARM11内核的出现,使得Smart Phone的出现成为可能。

在此之前,基于ARM9,XScale处理器的手机只是在Feature Phone的基础上添加了少许智能部件。ARM11的出现加速了手机阵营的优胜劣汰,Apple,HTC在智能手机领域异军突起,Motorola一蹶不振。ARM11之后,ARM迎来了爆发式增长,迅速陆续发布了Cortex A8和A9内核。

ARM处理器内核的快速更新,使Nokia这个对新技术反应迟钝的公司,一步步走向衰退。在2010年9月底开始出货的Nokia N8[96],居然还在使用着680MHz主频的ARM11处理器[97],这款产品却号称是Nokia最新的旗舰产品,它的竞争对手早已使用了1GHz主频的Cortex A8处理器。

Cortex处理器是一个分水岭,从1983年开始的ARM内核,迎来了一颗真正意义的现代处理器。ARM已经破茧成蝶,不再是低功耗伴随着低能的处理器。从这一刻起,ARM处理器具备了和Intel,一较高下的能力。2010年4月3日,Apple的Jobs正式发布iPad,ARM随之进入平板电脑领域[99]。ARM已将战火烧到了Intel的后院。

抛弃了XScale架构的Intel,并没有放弃手机处理器。2009年1月23日,Nokia与Intel在手机领域建立长期合作伙伴关系[103]。2009年6月4日,Intel收购Windriver[102]。2010年5月4日,Intel正式发布用于智能手机和平板电脑,代号为Moorestown的处理器[100]。2010年8月29日,Intel收购Infinion的无线部门[104]。在2011年左右,Intel将发布用于智能手机,代号为Medfield的处理器[101]。一系列的合作与收购,使Intel具备了进入手机领域的能力。

至此ARM之于PC领域,x86之于手机领域的野心,已昭然若揭。2010年9月9日,ARM正式发布代号为Eagle,5倍ARM9架构的Cortex A15内核,这颗处理器所关注的应用是高端手机,家庭娱乐,无线架构,还有低端服务器[98]。Cortex A15向世人宣布除了PC,他们还要Server。

ARM,这个曾被Intel鄙视,被其扶植,被其抛弃的处理器,直面挑战Intel的x86处理器。这场较量是今后处理器领域5到10年的主旋律。最终结果将影响处理器领域今后20年的格局。不要认为ARM处理器没有进入PC领域的可能,也不要认为ARM处理器可以继续在手机领域中所向披靡。



[i] 苹果公司的两个创始人都叫Steve,一个是Steve Wozniak,另一个是众所周知的Steve Jobs。Steven Wozniak是Apple I和Apple II的发明者。两个Steve在1976年4月,在一个车库中成立众所周知的Apple。

[ii] 英国的谷仓文化与美国的车库文化相近,是新技术的摇篮。

[iii] ARM公司从ARM3直接升级到ARM6。

[iv] 我第一次准备使用的ARM处理器是Cirrus Logic的EP7312。当时我还在使用Altera的EPLD,名称是EP7132,我偶尔混淆这两个芯片的名称。在一个机缘巧合之下,粗心的采购将我需要购买的EP7132买成了EP7312,这颗芯片也是我购买的第一颗ARM处理器。

[v] 当时的处理器价格高得离谱,50美金已经是很廉价了。

[vi] 我从SA1110开始接触ARM处理器,那是一个永远值得回忆的时代。

[vii] 我在摩托罗拉半导体部门第一次接触的就是Coldfire处理器,目前这颗处理器仍然在不断发展中,这颗芯片与68K在汇编语言层面兼容,但是目标代码并不兼容。

[viii] QorIQ系列处理器基于E500 mc内核,与E500 v2有些微小差异。我的第一本著作是基于E500内核的《Linux PowerPC详解—核心篇》,当时准备写一套丛书,包括核心篇和应用篇。应用篇主要写外部设备,后来的《PCI Express体系结构导读》源自《Linux PowerPC详解—应用篇》,应用篇应该包含网络协议,PCI Express和USB总线,后来把网络协议部分和USB总线部分删掉了。

[ix] 在处理器体系结构中,重点关注的有三类相关问题,RAW,WAR和WAW。使用寄存器重命名技术可以解决WAR和WAW相关。

No comments:

Post a Comment