本文以日本比吉康公司的视角,讲述了世界上第一个微处理器——英特尔4004的研发历程,比吉康是日本一家台式计算器制造商,我于60年代末至70年代初在那里工作,1969年比吉康启动了一个项目,为基于ROM的宏指令可编程十进制计算机开发大规模集成电路(LSI)芯片,当时它是一家成功的电子计算器制造商,通过这个项目,它和英特尔公司于1971年3月成功研发出了世界上第一个4位微处理器——英特尔4004。 本文回顾了我在整个开发过程中的工作,包括: ●使用基于ROM的编程逻辑开发桌面打印计算器,导致了4004的诞生; ●指出了一些英特尔提出的二进制处理器的问题; ●优化4004处理器系统配置及指令集; ●设计4004处理器的逻辑; ●开发基于4004处理器的桌面打印计算器。 1964年日本研制出了第一台晶体管台式计算器,并迅速投入商业生产,带动了计算器市场的快速增长,使日本成为计算器的主要生产国,那时的台式计算器仍然使用电路硬件设计,为了使计算器技术快速发展,需要一种新的逻辑设计方法,一种允许短时间内设计、修改和添加新功能的方法。 使用基于ROM的可编程逻辑 1968年,我在比吉康公司开发了一种台式打印计算器,它具有基于ROM的宏指令可编程十进制计算机体系结构,包括:
CPU由多个芯片组成,数据通路包括一个处理十进制和二进制数据的4位串行ALU、一个累加器、一个键盘输入寄存器、一个乘法和除法寄存器、一些控制寄存器(包括计数器、小数点寄存器、标志状态寄存器)、定时器、数据存储器。 控制单元由带地址递增器的8位程序计数器、存储程序的ROM、8位指令寄存器、指令译码器和指令执行控制模块组成。指令集由23条指令组成,包括数据传输、数据交换、立即数加载、清零、十进制数据加减、移位、二进制数据加减、自增自减、标志控制、无条件跳转、条件跳转、打印指令。整个ROM程序不到256字节,I/O设备控制使用电路硬件实现。 LSI登上历史舞台 1969年,比吉康开始为十进制计算机系统开发LSI芯片。首先,控制寄存器的数量增加到8个,这些寄存器统被统称为“索引寄存器”,并改进了指令集,增加了子程序跳转和处理器停止指令。 比吉康最初计划开发7种LSI芯片,分别用于程序控制、运算器、程序ROM、移位寄存器数据、定时电路、打印机控制和输出缓冲器。桌面打印计算器将由9个LSI芯片构成。未来这些芯片还将用于其它产品,比如商业计算器、科学计算器、计费机、取款机、收银机。 比吉康选择英特尔作为合作伙伴,是因为英特尔当时开发了一种高性能和高密度的硅栅MOS工艺,出于保密原因,比吉康并没有向英特尔透露这些芯片在除计算器以外的其它应用。 1969年6月,我与两名同事访问了位于加利福尼亚的英特尔公司,以讨论共同开发LSI芯片相关事宜,那时的英特尔还是一家专注于存储芯片的小公司,由于没有逻辑设计师,他们并不清楚我们的计算器中使用的逻辑,并对我们提出的开发多款基于组合逻辑和时序逻辑的LSI芯片持否定态度,不过对我们来说幸运的是,当时英特尔的一名工程师霍夫对基于ROM的可编程计算机系统及指令集很感兴趣。 英特尔的提议 1969年8月,当项目处于停滞状态时,霍夫向我们提出了他的二进制处理器的基本构思,他向我们展示了其设计框图,包括:
然而,他提议的二进制处理器还是存在一些问题,比如:
在回应英特尔的提议时,我强调要在系统架构和指令集上考虑应用的需求,考虑到这一点,以及我们仅使用LSI芯片构建整个系统的目标,比吉康和英特尔同意除了处理器,再开发程序ROM和内存RAM,我们共同定义了一个4位分时复用双向系统总线,用于将处理器、ROM、RAM连接起来,我们还决定增加一个十进制调整加法指令DAA,用于多位BCD编码的十进制数以二进制方式相加后的调整操作,有了DAA指令,在750kHz的时钟频率下,一位数加法所需时间减少到了107微秒。 我对建议的指令集进行了静态和动态评估,并要求比吉康测量键盘按键的接触时间,在这些评估和测量的基础上,我得出结论:添加一批有用的指令、重新定义一些指令、删除一些不必要的指令,将对这个项目的成功至关重要,通过这些更改,可以减小ROM大小、提高性能、实现解释器并实现I/O设备的实时控制。 开发指令集 为了实时控制I/O设备,我将外部输入引脚(Test)的状态作为条件跳转指令(JCN)的条件之一,我还添加了一个10位静态移位寄存器芯片,它不仅用于键盘扫描,还用作打印机的输出缓冲器。 我还添加了键盘处理指令KBP,用于将键盘的4位行数据转换为0、1、2、3、4,如果同时按下两个及更多按键,则转换为15。 为了能实现一个宏指令的解释器程序,我们添加了一条间接获取指令(FIN),将8位数据从配对寄存器PR0寻址的ROM地址加载到配对寄存器PRn中,接下来我重新定义了BBL指令(分支返回并将数据加载到累加器),以便它在执行时能将常量返回值n加载到累加器中。 解释器使用PR0作为宏程序的程序计数器,PR1寄存器保存要执行的宏指令在ROM中的起始地址,解释器首先执行JCN,它检查测试输入以确定是否有来自外部设备的请求,如果有,则跳转到I/O控制程序,如果没有,解释器开始正常的程序执行。 解释器首先执行FIN从PR0寻址的ROM中获取当前宏指令的起始地址,并将该起始地址存储到PR1中,接下来,使用跳转到子程序指令(JMS),将执行转移到宏指令程序的顶部,然后它通过使用带PR1的寄存器间接跳转指令(JIN)跳转到当前宏指令的程序。 在宏指令程序执行的最后一步,如果宏指令是分支指令,则用BBL指令将非零返回值存入累加器,如果不满足分支条件,则设置进位标识。 从宏指令程序返回时,解释器更新PR0,处理分支宏指令(如果有的话),然后返回到它的开始,解释器程序大小为16字节,最长的宏指令执行时间为2毫秒,通过测试输入引脚在2处轮询打印机的同步信号,证明它可以在2ms间隔实时控制I/O设备,这成为4004系统成功的关键之一。 优化指令 英特尔最初的提议包括将数据从累加器传输到变址寄存器的存储指令(STO),但不包括将数据反向传输的加载指令(LD),在优化指令集时,我们将STO指令替换为LD,并增加交换累加器和变址寄存器内容的交换指令(XCH),XCH指令不会破坏任何一个寄存器的内容,XCH指令及每个芯片增加的八个RAM状态寄存器,弥补了变址寄存器中寄存器数量的不足的问题。 提议的移位指令(SH)被更有用的循环指令(RA)取代,为了进一步减小程序大小,还添加了以下指令:清除累加器和进位指令(CLB)、补进位指令(CMC)、用于十进制减法的传输进位减法指令(TCS)、用于软件定时器和调试的空操作指令(NOP),最后,增加了指定命令行指令(DCL)和片选输出引脚,用于选择RAM而无需外部解码器电路,同时删除了键盘输入引脚和暂停指令(HLT)。 我花费了三个月的时间来优化系统配置和指令集,通过对指令集的这些重大修改,我成功的将程序大小减少了30%。 短暂回到日本 1969年12月,我临时返回日本,确定计算器程序的设计细节并确认指令集,1970年2月6日,比吉康与英特尔正式签订芯片开发合同,开发费用为6万美元。3月中旬,比吉康向英特尔发送了正式的功能说明书和指令集,并附上了图表以避免出现误解。 1970年4月我再次访问英特尔以验证逻辑,但发现自我回日本后,项目的进展甚微,英特尔在这几个月里所做的事情,只是为该项目聘请了一名开发工程师和两名布局设计师,但缺少逻辑设计工程师,于是我加入了项目组,负责4004 CPU的逻辑设计、逻辑仿真、布局检查和测试程序生成,东京比吉康则负责构建用于逻辑验证的CPU仿真器。 我在晶体管级而不是门级进行逻辑设计,以便它即能用于电路也能用于布局设计,首先我明确了功能模块之间的接口信号,然后做了详细的功能框图,再进行详细的逻辑设计,这是重要的一步,在那个年代,微处理器开发的成功很大程度上取决于详细框图的质量。 减少晶体管数量 因为我们使用三个晶体管来实现地址堆栈和索引寄存器中的DRAM存储单元,所以每个单元包含一条读取位线和一条写入位线。首先,在地址栈的刷新电路中内置了一个地址递增器,可以通过两个交错时钟在一个状态下执行。接下来,为了尽早计算出所需的晶体管总数,逻辑设计从那些使用了较多晶体管的模块开始,这些模块是:索引寄存器(402个晶体管)、带地址增量器的地址堆栈(374个)、指令寄存器(72个)、定时器(99个)、命令控制(100个)和系统总线接口控制(92),这些晶体管的数目已经达到了1139个,这意味着不可能在英特尔估计的2000个晶体管内设计4004 CPU。 逻辑设计接近尾声时,为了简化逻辑,从而减少晶体管数量,我们决定任何机器周期都由八个状态(A1、A2、A3、M1、M2、X1、X2、X3)组成,组合逻辑电路用于指令执行控制,由指令解码器、指令编码器、状态时序、机器周期时序信号构成。此时的一个主要挑战——也是逻辑简化的关键——是通过平衡指令解码器和编码器的选择与组合逻辑电路的数量来进行优化。 接下来,结合整体布局,我精心设计了ALU模块(329个晶体管),包括累加器和小数调整电路、指令译码器和编码器(269个)、指令执行控制模块(500个),然后,为了减少测试时间,我决定在系统总线空闲时,将累加器和进位标志发送到系统总线,最终4004使用的晶体管数量达到了2237个。 只有一个逻辑错误 在1970年8月进行的逻辑仿真测试中,只发现一个逻辑错误,所以4004的布局与我在逻辑设计的最后阶段绘制的基于晶体管的逻辑电路原理图几乎完全相同,我一直觉得比吉康在1974年将4004的所有权转让给英特尔之后,它对4004开发的贡献就逐渐消失了。 返回桌面计算器 完成测试程序生成和布局检查后,我于1970年11月飞回日本,重新投入到开发桌面打印计算器的工作中,在比吉康,我用4004 CPU、4001 ROM仿真器、4002 RAM、4003移位寄存器、读卡器和带显示屏的控制面板构建了一个工程原型机,计算器程序于1971年3月完成,程序总大小控制在1000字节以内,其中应用程序约250字节,宏指令程序约400字节,解释例程、键盘和打印机控制程序约350字节。 上图为基于4004的桌面打印计算器的主板 上图为世界上第一个基于微处理器的计算器 关键时刻 1971年4月,期待已久的时刻终于到来,4004 CPU运抵羽田机场,进行一些简单的测试后,我们使用读卡器将1KB的程序加载到ROM仿真器中,现在我所要做的就是按下并松开工程原型机的复位按钮,虽然不怕失败,但我也很清楚,两年的努力将在那一刻决定,我按下了复位按钮,但犹豫了一会儿才松开,因为按钮一旦松开,我们必须面对最终的结果。 深吸一口气后,我松开了按钮,计算器启动了,程序开始运行,程序计数器的地址显示正在执行键盘扫描程序,我迫不及待的按了数字键,又按了加法键,然后等待打印机的启动,终于,打印机轰鸣起来,把我输入的数字和加号打印出来了,我又按了一些数字键、加法键和末尾的等号键,“结果正确,它正常工作!”我的心怦怦直跳,兴奋得全身发烫。 这就是世界上第一个微处理器4004和基于微处理器的系统诞生的时刻,我仍然清楚地记得在原型机上按下重置按钮的感觉,当时我所感受到的压力和希望,以及当我松开那个按钮时,我加速的心跳。 更创新的微处理器 基于4004的计算器开发成功后,我去到了理光公司,使用NEC的NEAC-M4 8位小型计算机设计了高速打印机的控制器和鼓式存储器的生产测试仪,然后我于1972年加入英特尔,领导开发了8位的8080微处理器以及8080的外围LSI芯片,随后我加入齐洛格公司并开发了Z80,它就是后来被称为“终级版”的8位微处理器,在完成16位Z8000微处理器的开发后,我于1980年回到日本。 作为一名工程师,我的职业生涯是丰富多彩的,我有长达十多年的微处理器开发经历,我常常怀念那些激动人心的开创性的日子。 应用的作用 在那十多年中,我开始意识到:许多新处理器是在应用需要新一代架构的情况下开发的,与此同时,在产品规格和实施之间进行优化非常重要,在1980年完成组建英特尔日本设计中心后,我开发了多款专用微处理器,例如:
当1992年我在筑波大学获得工学博士学位时,我清楚地认识到了在微处理器开发中,对我来说很重要的东西:指令集、指令译码器、和包括内部总线架构的硬件架构。2000年我转到会津大学进行计算机体系结构的教学和研究工作,设计多级流水线微处理器和Java即时编译器,并以一名微处理器开发工程师的视角,讲授微处理器的发展历史。 关于作者 嶋正利,日本会津大学前教授,曾是英特尔日本设计中心的经理。在日本比吉康任职期间,他曾担任Mitsubishi-Melcom-3100计算机的程序员和台式计算器的逻辑设计师,1968年他开发了桌面打印计算器,在十进制及二进制的计算机体系结构引入了基于ROM的存储编程技术。 4000系列微处理器开发完成后,他加入了英特尔,领导开发了8080及几款外围芯片。后来他作为齐洛格(Zilog)的高端微处理器开发经理,开发了Z80和Z8000处理器。他于1967年获得日本东北大学化学学士学位,1992年在获得日本筑波大学工程学博士学位。1987年出版著作《微处理器的诞生:我的回忆》,1997年获得京都奖,1998年获取半导体产业50周年纪念微处理器发明者奖,2006年获得信息技术论坛船井成就奖。 |
|