芯片和电脑谁先出现的悖论
也许你的第一反应是人们用电脑设计出了芯片,但别忘了,电脑的主要部件CPU和内存都是由芯片构成的呀!这里我们遇到了一个悖论:是先有芯片,还是先有电脑呢?
如果说芯片出现在先,那么没有电脑,芯片又是如何设计出来的?难道用纸和笔就能设计芯片?如果将一颗CPU芯片里的1000亿个晶体管画在纸上,每个晶体管有小五号字体那么大,需要3万多册《现代汉语词典》才能画得下,那么这些纸摞在一起将有6个埃菲尔铁塔那么高!
如果说电脑出现在先,那么把电脑主板上的芯片一颗颗抠下来,这样的电脑是否还能工作?难道我们要退回到真空管计算机的时代去设计芯片?要知道在那个时代,即便是预测24小时后的天气状况所需的计算时间都不止24小时……
这个“芯片和电脑谁先出现”的悖论可用一幅画形象地说明。荷兰艺术家毛里茨·埃舍尔(Maurits Escher)所画的《画手》,画中有两只手各自握着一支素描笔,彼此描画着对方,不知道是哪只手先画出了另外一只手。

《手画手》1948 #埃舍尔#,图片来源于网络
那么,“芯片和电脑谁先出现”的悖论是怎么形成的呢?这需要先了解芯片是如何设计出来的,为此,我们就不能将目光放在现在,而需要向过去回溯,回到20世纪60年代,才能看出一些端倪。
5美元的赌注,SPICE电路分析仿真程序
1966年,加州大学伯克利分校的唐纳德·彼得森(Donald Pederson)教授跟毕业生乔治·海恩斯(George Haines)打了一个赌。
那一年,海恩斯在费城举办的美国无线电工程师协会年会上遇到了彼得森。海恩斯抱怨说,自己设计了一个模拟放大器电路,工作起来不稳定。他认为当初学校教的手工分析电路的方法太简单,忽略了二极效应,从而造成了误差。
彼得森当然不同意这个说法。他觉得计算电路不复杂,在纸上手工推导计算就够了,整个计算过程一个信封背面就写得下。为此,两人打赌,赌金是5美元。
彼得森的想法具有普遍性,当时放大器电路中只有不到10个晶体管,手工计算并不太麻烦,仙童半导体公司的维德勒设计运算放大器采用的就是手工计算方法。
而且,那时的计算机都是大型机和中型机,价格昂贵,一般的学校和小公司都用不起。

图片来源于网络
当时,只有像IBM这样的大公司会利用计算机来辅助计算。IBM公司既不缺乏计算机资源,也不缺开发程序员,他们开发了最早的电路分析仿真程序。有了这一工具,工程师就能提前知道设计的电路能否正常工作,可以修改设计直到满足设计指标,设计效率大大提升。遗憾的是,IBM公司的仿真程序只供内部使用,不对外开放。
在学术界,人们还没有强烈的动力来用计算机仿真电路。

图片来源于网络
美国无线电工程师协会年会结束后,彼得森把海恩斯的电路设计带回学校,和自己的一个学生来来回回地讨论了3个月,发现确实误差是手工计算过于简单造成的。彼得森承认自己搞错了,给海恩斯寄去了一张支票。
到了20世纪60年代后期,芯片上的元件数量已经达到了数百个,手工计算也越来越耗时且不准确。一开始,工程师们找到了一个替代办法——做一个面包板电路来验证纸笔计算的效果。但是如果电路越来越复杂,这种方法也会较为麻烦。
尽管芯片规模增大导致手工计算难以为继,但反过来,大容量的芯片有助于提升计算机的分析能力,减轻设计师的负担,使其能应对复杂芯片的设计。
我们不妨想象,在一张空白的纸上,埃舍尔的手画出了一只“芯片之手”,当它变得越来越精巧复杂时,埃舍尔就停笔了。紧接着,“芯片之手”自己动了起来,开始描画“计算机之手”。之后,“计算机之手”变得越来越强大,开始描画“芯片之手”。就这样,两只手彼此描画起来,形成良性循环,两只手都变得越来越强大。
到了60年代末,彼得森决定开发一个通用的计算机分析仿真程序。他希望这种仿真程序能算出电路各处的电压和电流,以及随时间变化的轨迹,还能计算出电路的噪声和频率响应特性等。
但开发这种程序并非易事。电路中的每个内部节点都需要至少设置一个方程。随着电路规模的扩大,计算机要求解的方程数量也急剧增加。
恰好在1969年秋,一位加州大学伯克利分校的校友罗纳德·罗勒(Ronald Rohrer)回到母校工作。罗勒在仙童半导体公司时曾开发过一个电路分析软件,因此他想开设一门电路分析的新课。但他觉得与其让学生被动地听讲,不如让他们一边做、一边学,这样才能做出一个真正的研究项目。

图片来源于网络
罗勒对学生们说:“最后将由系主任彼得森来评判你们的项目成果,如果他喜欢,那么你们每个人都能得A,否则你们都得再考一次口试!”
达成协议后,有7位学生全然投入进来。他们在学校的一台CDC 6400电脑上编程,用打孔卡纸带输入数据。白天,他们能使用的内存大小仅为256KB,用其中一个学生拉里·内格尔(Larry Nagel)的话形容:“这就像把46码的大脚硬塞进一只婴儿拖鞋里。”
学期结束时,学生们推举内格尔作为代表向彼得森汇报成果。他们做出的名为CANCER的电路分析程序包含了6000多行代码,集成了直流、交流和瞬态分析功能,还能分析噪声和敏感度。学生们使用一种稀疏矩阵算法,一举将求解速度提高了数百到数千倍。
这么一个看起来粗糙的课堂项目已经初步具备了一个电路仿真器的大部分功能。他们采用了Fortran语言编程,这样该程序无须修改就能在其他规格的计算机上运行。
汇报完后,彼得森发自内心地给予了肯定,所有7位学生仅一次就通过了考核。
接着,内格尔选择罗勒作为硕士指导老师,课题仍是CANCER。
CANCER成了加州大学伯克利分校本科生和研究生的电路仿真工具,不过当时它只能仿真很小规模的电路,最多包括25个双极型晶体管和50个节点。
1970年,罗勒打算离开大学并再一次进入工业界。他把CANCER的后续开发委托给了彼得森教授。罗勒认为CANCER是学校主导开发的,公司可以使用它们,但得支付费用,以支持CANCER的后续开发。

图片来源于网络
而彼得森则坚持开源,他觉得向学术界和工业界的研究者分享成果一直都是半导体产业持续发展的关键。彼得森提出了一个条件:重写CANCER,以区别于现有的版本,随后将其开源。罗勒同意了,改写任务落到了内格尔身上。
首先要修改的不是别的,而是CANCER(“cancer”本身的意思是癌症)这个名称。内格尔想到了一个名称:SPICE(Simulation Program with Integrated Circuit Emphasis,意为集成电路仿真程序),“spice”本身的意思是香料,令人过目不忘。
1971年,在费城举办的国际固态电路大会上,罗勒发表了第一篇介绍SPICE的文章。1973年4月举办的第十六届中西部电路理论会议(Midwest Symposium on Circuit Theory)上,彼得森教授正式发布了SPICE,第一个开源电路仿真程序由此诞生。
SPICE开始被大学生们用于完成课程设计,并且很快普及到其他学校。后来,不断地有新的学生将其作为研究课题,为其添加新的功能。由于SPICE是开源、免费的,学生毕业后会向学校要一个免费副本,在工作单位继续使用。这样,SPICE就在工业界迅速推广开来,彼得森的开源计划起作用了。
1981年,SPICE 2G6版本变成了美国国家工业标准!
在此基础上,许多公司开发出了自己独有的SPICE,包括后来广泛使用的HSPICE。一些EDA公司也在SPICE基础上开发出了性能更强的电路仿真程序,例如,楷登电子公司的电路仿真程序Spectre和明导国际公司(Mentor Graphics)的Eldo。
1989年,SPICE 3发布了,它用C语言编写而成,代码达到了13500行,能够分析大型电路。
为了进一步提高SPICE电路仿真精度,彼得森意识到,应当利用晶体管参数建立器件模型,并将后者集成到电路仿真器SPICE中。
在彼得森的推动下,加州大学伯克利分校的胡正明和高秉强(Ping Ko)等人于1984年开发出了伯克利短沟道MOS场效晶体管模型—BSIM。此后,经过不断更新,BSIM成为业界通用的器件模型。

图片来源于网络
有了器件模型,电路设计者就不需要掌握器件的细节,而是直接利用其结果,他们只需专注于电路,这样电路设计者就和器件工程师实现了分工,电路设计师的门槛也大大地降低了,使得更多人才能进入这个领域,缓解了设计人才短缺的困境。
注:本文节选自汪波老师的《芯片简史》