第 2 章
绝境作为设计条件
把时间拨回1982年。1983年春天,一份内部技术备忘录在Acorn Computers的工程部流传。备忘录的作者是史蒂夫·弗伯,标题平淡无奇——《关于下一代处理器选型的初步评估》。这份文件没有日期,没有编号,甚至没有正式的抬头,但它记录了一个正在成形的危机:Acorn需要一款16位或32位处理器来驱动BBC Micro的后继机型,而市面上每一款可用的芯片都在某个关键维度上让这个需求落空。这家位于剑桥的公司正处于一种危险的辉煌中。BBC Micro的订单在1981年底开始涌入,到1982年春季,Acorn的月产量已经攀升到两万台以上。英国教育部的采购合同、全国中小学的计算机扫盲计划、BBC电视节目的配套教材——这些因素叠加在一起,制造出一种需求泡沫。
公司的营收数字在1983财年达到860万英镑,对于一个1978年才以Cambridge Processor Unit Ltd.名义注册、初始资本不过几百英镑的小企业而言,这组数字几乎像是某种统计错误。但正是这种增长速率制造了战略陷阱。BBC Micro基于摩斯科技的6502处理器,这是一款1975年问世、采用8位架构、主频不过2MHz的芯片。到1982年,6502的性能天花板已经清晰可见。竞争对手的产品线正在向16位迁移:IBM PC在1981年选择了英特尔8088,苹果的Macintosh项目锁定了摩托罗拉68000,而英国本土的竞争对手辛克莱研究也在为其下一代机型评估更先进的处理器。如果Acorn不能在18个月内拿出一款具备代际性能跃升的新机型,BBC Micro所建立的市场地位将迅速蒸发。问题在于,Acorn在处理器选型上的自由度远比它的竞争对手小。弗伯的备忘录逐一剖析了可用的选项。
摩托罗拉68000是当时公认的架构最优雅的16/32位处理器,但其功耗和成本对于一款定位于教育市场的机器而言过高。更致命的是供货问题:摩托罗拉优先供应其最大客户——尤其是苹果和早期的Unix工作站制造商。Acorn的订单量不足以获得优先排产权,这意味着交货周期可能在六个月以上,且价格条款完全由对方主导。国家半导体的32016是另一个选项。这款芯片在纸面上提供了32位架构的先进性,但早期样片的实测性能远低于标称值。Acorn的工程师在拿到有限的几片工程样片后发现,32016的内存访问延迟在某些场景下比6502还差。更糟糕的是,国家半导体对这款芯片的技术文档管理极为严格——完整的数据手册和时序图只向签订了大规模采购协议的客户提供。Acorn无法获得足够的信息来准确评估32016的真实性能边界。英特尔当时正在推广其iAPX 432处理器,这是一款雄心勃勃的32位设计,试图在硬件层面直接支持面向对象编程和高级操作系统的需求。
但iAPX 432的复杂度带来了灾难性的性能表现——早期评测显示其执行效率甚至不如8位的8080。而且英特尔的定价策略明确指向高端商用市场,与Acorn的成本结构完全不匹配。弗伯还评估了其他几个选项——Zilog的Z8000、德州仪器的TMS9900——但结论类似:要么性能不足,要么功耗过高,要么供货不可控,要么技术文档不透明。每一个选项都在某个维度上让Acorn的下一代产品无法成立。这份备忘录的结论部分没有给出解决方案。它只是用一种工程师特有的冷静语调,将所有的门都关上了。但这份文件之所以在工程部引发讨论,不是因为它列举了问题,而是因为它暗示了一个在正统计算机工程视角下近乎荒谬的方向:如果市面上没有可用的处理器,Acorn是否可以自己设计一款?这个想法在1982年的产业语境中显得离经叛道。当时的产业共识是,微处理器设计是少数几家半导体巨头的专属领地。
英特尔、摩托罗拉、Zilog——这些公司拥有完整的芯片设计团队、自有的晶圆厂、以及经过数代产品迭代积累的架构经验。一家位于剑桥、以组装个人电脑为主业的公司,去设计自己的处理器,这听起来更像是某种技术妄想,而非商业策略。但Acorn的组织结构中有一些异质的因素,使得这个想法在别处会被立刻否决,在这里却获得了被认真讨论的空间。第一个因素是苏菲·威尔逊。威尔逊在1978年加入Acorn时,公司还叫CPU Ltd.,主营业务是为赌博机设计嵌入式控制器。她在剑桥大学学习计算机科学期间,已经展现出一种在极端资源约束下进行系统设计的直觉。这种能力在她为BBC Micro开发的BASIC解释器中得到了充分体现。BBC Micro的BASIC解释器是一个被产业史忽略的技术成就。它需要在6502处理器上运行——这意味着只有不到64KB的地址空间可用——同时必须支持结构化编程、浮点运算、图形命令和内联汇编。
摩尔定律在那个年代尚未将内存价格压低到可以挥霍的程度,BBC Micro的标准配置是16KB或32KB的RAM。威尔逊编写的BASIC解释器将所有这些功能压缩进不到16KB的ROM空间,其执行效率在当时所有8位个人电脑的BASIC实现中名列前茅。这种设计经验塑造了威尔逊对指令集的直觉。她在优化BASIC解释器时反复遇到同一个问题:6502的指令集虽然简单,但其设计并非为编译器或解释器优化——它是一组在1970年代中期被认为对汇编语言程序员有用的操作的集合。威尔逊发现,BASIC解释器中80%的执行时间消耗在不到20%的指令类型上。大量6502提供的寻址模式和特殊指令在实际编译输出中极少出现。这不是一个孤立的现象。同一时期,美国的研究者已经在定量分析中得出了类似的结论。但威尔逊是在工程实践中,通过逐行优化一个真实运行的解释器,直观地感受到了指令集复杂度与有效性能之间的错配。
她后来在回顾这段经历时,将其描述为一种减法训练——在资源极度匮乏的环境中,每一条指令都必须证明自己的存在价值。第二个因素是史蒂夫·弗伯。弗伯在1981年从剑桥大学工程系加入Acorn,带来了VLSI设计的专业知识。他在剑桥期间参与了微电子学的研究工作,对芯片设计的整个流程——从逻辑设计到版图布局到制程验证——有完整的理解。这种技能在当时的英国计算机产业中极为稀缺。大多数个人电脑公司的工程师擅长系统集成——将现成的处理器、内存芯片和外围控制器组合在一起——而非从晶体管层面设计一款新芯片。弗伯的VLSI背景让他能够用一种具体的、工程化的方式来评估自己设计处理器这个想法的可行性。他清楚地知道,设计一款与摩托罗拉68000同等复杂度的处理器需要数百人年的工程投入,还需要昂贵的EDA工具和多次流片试错。这些资源Acorn都不具备。
但弗伯也意识到,如果Acorn设计的处理器足够简单——简单到核心逻辑可以用几千个晶体管实现——那么一个两到三人的团队就有可能在可接受的时间内完成设计。这种足够简单意味着放弃微码引擎、放弃复杂的指令解码器、放弃多级寻址模式、放弃那些在产业主流中被视为理所当然的架构特征。换句话说,这意味着设计一款在正统计算机架构学看来退化的处理器。1982年秋天,威尔逊和弗伯开始系统性地研究一个他们此前只是模糊听说过的概念——精简指令集计算机。这个概念在当时尚未进入产业界的主流讨论。它的源头来自两个独立的研究项目:IBM在约克镇高地的801项目,以及加州大学伯克利分校由大卫·帕特森领导的研究组。IBM 801项目始于1975年,其初衷是为一个电话交换系统设计一款高性能嵌入式处理器。项目负责人约翰·科克和他的团队在分析大量实际程序的执行特征后得出了一个激进的结论:复杂的指令集不仅无助于性能提升,反而因为增加了关键路径的长度而拖慢了整体执行效率。
801的设计哲学是将指令集缩减到最小必要集合,每一条指令都在一个周期内完成,将宝贵的晶体管预算用于寄存器堆而非微码存储器。伯克利的研究组在1980年至1982年间发表了多篇论文,系统性地论证了精简指令集在性能、功耗和设计复杂度上的优势。帕特森和卡洛·塞奎因将这些思想落实为两款原型处理器——RISC I和RISC II——并用实际的硅片验证了其可行性。威尔逊和弗伯通过学术渠道获取了这些论文。但真正改变他们思考方向的,不是论文中的理论论证,而是一个被论文附带提及的工程细节:RISC I的整个设计只用了大约十几个人月,其晶体管数量不到当时主流CISC处理器的十分之一。这个数字击中了Acorn处境的要害。如果伯克利的研究生用学术资源就能在合理时间内设计出一款可工作的32位处理器,那么一家拥有VLSI设计能力的公司——即使规模很小——也有可能做到同样的事。1983年初,威尔逊开始在一台BBC Micro上编写一个极简指令集的模拟器。
这个选择本身就是一个被资源约束驱动的决定。Acorn没有大型计算机来进行体系结构仿真,没有商用的性能分析工具,甚至没有足够的预算去购买当时开始出现的专业工作站。工程师们手边可用的最强大的计算设备,就是他们自己设计的BBC Micro。这台机器拥有6502处理器、32KB RAM和一个磁带接口。用它来模拟一款32位处理器的指令集,在计算能力上的差距相当于用独木舟横渡大西洋。威尔逊很快就发现,每增加一条指令,模拟器的运行速度就会显著下降。一个包含完整寻址模式和复杂指令的模拟器,在BBC Micro上可能需要数小时才能执行一段简单的测试程序。这种物理限制成为了一个冷酷的设计过滤器。任何不能严格证明其必要性的指令都被删除——不是因为某种抽象的设计哲学,而是因为它会让仿真跑到地老天荒。威尔逊后来将这个过程描述为被BBC Micro所强制的精简。这不是一个理论选择,而是一个工程现实:设计工具的计算能力决定了设计本身的复杂度上限。
弗伯则从另一个方向推进。他开始评估如果Acorn真的自己设计处理器,在芯片制程和工具链上需要满足什么条件。1983年的半导体制造格局中,一个关键的新变量正在出现:硅代工模式。台积电尚未成立——那要等到1987年——但美国的LSI Logic和VLSI Technology等公司已经开始提供无晶圆厂设计服务。这意味着Acorn不需要自建芯片厂,只需要完成逻辑设计和版图,就可以委托代工厂进行流片。弗伯计算出,如果目标处理器足够简单——晶体管数量控制在两万五千个以内——那么使用3微米CMOS工艺,芯片面积可以控制在合理范围内,单次流片成本在Acorn可承受的预算内。两万五千个晶体管,这个数字大约是摩托罗拉68000的三分之一,英特尔80286的四分之一。这意味着Acorn设计的处理器在绝对性能上无法与这些芯片竞争——但弗伯意识到,性能的竞争维度可以重新定义。
如果这款处理器可以在更低的功耗下提供足够好的性能,而且Acorn可以完全控制其设计、生产和定价,那么它在Acorn自己的产品生态中就具有商业可行性。1983年10月,威尔逊完成了第一版指令集架构的草案。这份草案中的指令数量不到当时主流处理器的四分之一。它采用了定长指令格式——所有指令都是32位宽——这在当时被视为一种奢侈,因为它增加了代码体积。但威尔逊的判断是,定长指令带来的解码简化远超过代码体积增加的成本。它取消了所有微码层,指令直接由硬件逻辑执行。它提供了一个大的寄存器堆——32个通用寄存器——而不是像x86那样只提供少数几个特殊用途寄存器。这个设计在正统计算机架构的评估标准下显得过于简朴。它没有字符串处理指令,没有十进制运算指令,没有复杂的位操作指令。它的寻址模式只有最基本的几种。它的中断处理机制极为简单。
但威尔逊和弗伯相信,这些缺失的功能可以通过软件高效地模拟,而保留的每一条指令都经过了严格的必要性检验:它是否被编译器频繁使用?它是否可以在一个时钟周期内完成?它是否增加了控制逻辑的复杂度?答案如果不够清晰,指令就被删除。这种设计哲学在1983年的产业主流中找不到对应物。它来自一个特定的处境——资源极度有限,兼容性负担为零,设计工具本身就是一台8位微计算机。但即使在这个阶段,自己设计处理器在Acorn内部仍然不是一个已经获得正式批准的项目。它只是威尔逊和弗伯在正常工作之外的探索性研究。公司的管理层——包括联合创始人赫尔曼·豪瑟和克里斯·柯里——对这个方向持观望态度。豪瑟本人拥有物理学博士学位,对技术冒险有本能的兴趣,但他同时也清楚Acorn的财务状况:公司的利润虽然可观,但大部分已经被投入到产能扩张和新产品研发中,没有多余的预算去支撑一个可能失败的全定制芯片项目。转折点出现在1983年末。
Acorn与意大利的Olivetti公司进行了多次谈判,后者最终在1984年初收购了Acorn的部分股权。这笔交易为Acorn注入了资金,但更重要的是,它改变了公司内部的决策计算。一个面向下一代产品的处理器项目,如果成功,将让Acorn在Olivetti的全球销售网络中拥有独特的技术资产;如果失败,其损失在新的资本结构下变得可以承受。国家半导体32016的评估结果进一步恶化。Acorn的工程师终于拿到了足够的技术文档来进行完整的性能模拟,结果令人失望:32016在运行BBC BASIC这类解释型语言时的实际性能,甚至不如经过精心优化后在6502上运行的表现。而摩托罗拉68000的供货状况没有任何改善。到1983年底,Acorn的工程管理层不得不面对一个事实:所有正常的选项都已经被排除。
正是在这种近乎荒谬的约束叠加下——供应商锁喉、预算匮乏、设计工具原始、时间窗口紧迫——Acorn内部那个原本只是技术探索的处理器项目,开始转变为一项正式的战略决策。威尔逊的指令集草案被命名为Acorn RISC Machine,简称ARM。弗伯开始组建一个极小的芯片设计团队,成员包括VLSI设计工程师和版图工程师,总数不超过五人。1984年的大部分时间里,这个团队在剑桥的一间小办公室里工作。他们使用的EDA工具是当时最低配的版本,运行在借来的计算机上。他们的仿真环境仍然是那台BBC Micro——威尔逊不断优化模拟器的代码,试图在6502的极限性能中挤出更多仿真周期。每一次设计迭代都必须在模拟器上运行测试程序,而每一次模拟都需要数小时。这种物理限制塑造了ARM指令集的最终形态:任何不能在模拟器上高效验证的指令,都因为设计周期无法承受而被放弃。到1984年底,ARM1的设计基本完成。
它的最终晶体管数量约为两万五千个,与弗伯的早期估算一致。它的功耗极低——在当时的工艺条件下仅为几百毫瓦。它的性能在绝对数值上无法与同期的英特尔或摩托罗拉高端芯片竞争,但在单位功耗性能这个维度上,它已经展现出明显的优势。1985年4月,第一批ARM1硅片从代工厂返回剑桥。威尔逊和弗伯将芯片焊接到一块测试板上,接通电源,运行第一个测试程序。芯片工作了。这不是一个戏剧性的时刻——没有欢呼,没有开香槟的记录。它更像是一个被资源约束逼到墙角的团队,在漫长的工程劳动后,终于得到了一个与他们预期相符的结果。但这个结果的意义超出了当时任何人的判断。ARM1的晶体管数量是同时期英特尔80386的十分之一,功耗是其数十分之一,设计团队规模是其百分之一。它在绝对性能上无法与这些芯片竞争,但它证明了一件事:那条看似不可动摇的、指令集必须持续增长的技术逻辑并非唯一选项。
威尔逊和弗伯在ARM1的测试板上看到的,不只是芯片工作的波形,还有一组更安静的数字。那台用来做功能仿真的BBC Micro,在整个设计周期中累计运行了数千小时的模拟程序。每一次指令集修改——增加一条指令、删除一条指令、改变寻址模式——都意味着重新运行整套测试向量。在项目的最后六个月,模拟器几乎从未关机。威尔逊后来计算过,如果ARM的指令集再复杂百分之二十,模拟周期将延长到设计窗口无法承受的程度。这不是一个理论上的推测,而是一个被实际经历验证的工程事实:BBC Micro的6502处理器,以不到2MHz的主频和32KB的可用内存,直接决定了ARM指令集复杂度的上限。这个上限不是由性能目标设定的,不是由架构理论推导的,而是由设计工具的物理极限强制的。在计算机体系结构的历史中,设计工具的约束塑造设计结果的案例并不罕见——但通常这种约束来自EDA软件的算法限制或仿真集群的算力瓶颈。Acorn的情况更为极端:他们的仿真平台就是他们自己上一代产品的量产机型。这种递归式的工具链——用一台8位微计算机来设计它的32位后继者——在产业史中几乎找不到第二个案例。
这个约束的后果直接体现在ARM1的指令集架构中。威尔逊的草案取消了所有需要微码序列的复杂指令,因为微码引擎的仿真会引入额外的状态机,而状态机的验证需要指数级增长的测试向量。她放弃了字符串操作指令,不是因为它们在功能上无用,而是因为模拟器无法在合理时间内运行覆盖所有边界条件的字符串测试用例。她限制了中断响应机制的复杂度,因为精确模拟中断延迟需要周期级精度的仿真模型,而BBC Micro连维持指令级精度的模拟都已经捉襟见肘。这些设计决策中的每一个,单独来看都可以被解释为一种工程上的审慎。但它们的叠加效应构成了一个系统性的结果:ARM1的指令集不是被设计成精简的,而是被逼成精简的。精简不是目标,而是约束下的唯一可行解。弗伯在同一时期面对的约束是另一种形态。他在进行版图设计和时序分析时,使用的EDA工具运行在一台借来的VAX工作站上,这台机器的使用权每天只有几个小时。
弗伯必须将设计分割成可以在限定时间内完成验证的模块,这意味着ARM1的微架构不能包含任何需要全局优化的结构——没有复杂的流水线互锁,没有多级缓存一致性协议,没有动态分支预测。这些在同期高端处理器中开始出现的特征,在ARM1中全部缺席。缺席的原因不是弗伯不知道它们的存在——他在剑桥的研究工作恰恰涉及这些领域——而是他没有足够的计算资源来验证包含这些特征的设计。一个未经充分验证的复杂设计,在流片后失败的概率接近百分之百,而Acorn承担不起第二次流片的费用。
这种双重约束——威尔逊在指令集层面的仿真瓶颈,弗伯在微架构层面的验证瓶颈——产生了一个在工程方法论上具有反直觉意义的后果。正统的处理器设计流程是先确定架构目标,然后配置相应的设计工具和验证资源。ARM1的设计流程恰好相反:可用的设计工具和验证资源先被给定,然后架构目标被压缩到这些资源能够支撑的范围内。这不是一种被任何教科书推荐的方法,但它产生了一个在特定条件下极为高效的结果。ARM1的整个设计周期从概念到流片不到两年,设计团队从未超过五人,总开发成本低于同期任何一款商用32位处理器的一个零头。这些数字在1985年看起来只是一个小公司在资源匮乏下的权宜之计。
一家小型公司,在供应商锁喉和资源极度匮乏的条件下,可以设计出一款可工作的32位处理器——只要它愿意放弃那些被产业共识视为理所当然的复杂度。然而,证明技术可行性只是整个问题的一半。ARM1的成功设计并没有自动解决另一个更根本的挑战:软件生态。1985年的计算机产业已经形成了围绕特定指令集的庞大软件堆栈——操作系统、编译器、应用程序、开发工具——这些构成了处理器商业价值的真正来源。一款没有任何软件可以运行的处理器,无论其设计多么精巧,在市场上都毫无意义。Acorn解决这个问题的方式是自力更生。威尔逊在ARM1硬件完成之前就已经开始为ARM编写操作系统和开发工具。但一家公司能够生产的软件数量是有限的。ARM架构如果要获得商业成功,需要的不是Acorn一家公司的支持,而是一个能够吸引第三方开发者的生态系统。在1985年的产业格局中,这样的生态系统已经被x86和68000所主导。
ARM的指令集精简在技术上成立,但在商业上,它仍然是一个没有生态的孤岛。这个矛盾在ARM1问世的那一刻就已经埋下。弗伯的那份备忘录所开启的道路,已经走到了第一个节点。Acorn的工程师们证明了一个在正统计算机架构学看来不可能成立的命题——但他们同时也制造了一个新的问题。一款由小型团队设计、晶体管数量仅为主流产品十分之一的处理器,在技术上完全可行;但要让这款处理器在商业上成立,需要的不是更多的技术突破,而是一种尚未出现的市场需求。1985年的Acorn站在一个完成了的技术成就面前,面对着一个仍然封闭的商业世界。ARM1的芯片在测试板上安静地运行着,它的功耗低到几乎可以忽略不计,它的设计简洁到任何一个受过VLSI训练的工程师都能在几周内理解其全部逻辑。但它能做的事情,在当时的市场上没有人需要。那些需要高性能计算的客户继续购买英特尔和摩托罗拉的产品;那些需要廉价计算的客户继续使用8位处理器;而那个最终将证明ARM架构真正价值的应用领域——低功耗嵌入式设备和移动通信终端——还要再过十年才会出现。