SPICE简史之诞生
如今,每一天都有不知其数的半导体芯片设计公司与设计验证工程师,在用着电路仿真软件SPICE。SPICE广泛应用在仿真模拟电路(例如运放OpAmp,能隙基准稳压电源BandgapReference,数模/模数转换AD/DA等),混合信号电路(例如锁相环PLL,存储器SRAM/dRAM,高速输入/输出接口high-speedI/O),精确数字电路(例如延时,时序,功耗,漏电流等),建立SoC的时序及功耗单元库,分析系统级的信号完整性,等等。作为最早的电子设计自动化软件,它今天仍然是最重要的软件之一。可以说,没有SPICE,就没有电子设计自动化这个产业,也就没有今天的半导体工业。它的市场超过上亿美元。所有这一切,都是从1970年加州大学伯克利分校电机工程系的一堂课开始的。
SPICE的诞生
时间回到1970年,在加州大学伯克利分校电机工程与计算机科学系(UCBerkeley , Dept. EECS),Ron Rohrer教授给七个研究生上“电路综合”课。Rohrer教授那时刚刚从仙童半导体公司(Fairchild Semiconductor)返回伯克利,没有时间准备教材。所以,在第一堂课,他就宣布:学生们一起写一个电路仿真程序。他跟系里的管教学的主任DonPeterson教授达成一个协议:只要Peterson教授认可学生们写的仿真程序,他们就全部通过。否则的话,他们就全部不及格。这七个学生中有一个还是从机械系来的。他感到十分委屈:教授啊,俺啥电路都不会,俺就是来学电路的。这倒好,电路没学到,反而要去写电路仿真程序。这可咋办啊?Rohrer教授想了想,说没关系。虽然电路你不懂,但你的数值分析不是很厉害吗?OK,你就负责解方程这块吧。最后的结果证明了恰恰是学生们自己开发的解稀疏矩阵的模块是一个亮点,它使得可处理的电路规模成倍的增大。为什么这么说呢?如果你学过数值方法,你就知道一般解方程组用的是高斯消元法。它的复杂度是O(n^3)。也就是说,电路规模增大一倍,你的运算时间就要增大到8倍。当时的电路仿真程序最多可以仿真10个晶体管。超过这个数,不是你的预算被烧没了,就是你的耐心被耗没了。但是,学生们注意到从电路搭出来的矩阵有个特点,就是它的稀疏性。一个电路矩阵里很多元素都是0(意味着两个电路节点之间没有连接关系)。既然是0,那就没有必要去存储和计算它了。这样一来,存储量和计算量大大减少了(是啊,连小学生都知道任何数乘0还是0。你没事儿就别搞一大堆乘0的运算了)。
很多SPICE里面的基本要素都来自于Rohrer教授指导的这一堂电路分析课的项目,包括上面讲到的解稀疏矩阵的模块,还有隐式积分算法的使用使得瞬态分析更加稳定。并且,程序里加入了自带的半导体器件模型,用户只需要给出一组模型参数,用不着自己提供器件模型的FORTRAN模块了。
这七个学生推举LaurenceNagel为代表,由他负责向Peterson教授汇报结果。这个结果就是CANCER。没错,它的意思就是“癌症”。它是“不包括辐射的非线性电路计算机分析”(”ComputerAnalysis of Nonlinear Circuits, Excluding Radiation”)的缩写。不要忘了,这是在一个叛逆的时代。当时绝大部分的电路分析软件来自于大公司与政府/军方的合同开发。在冷战和核威胁的环境下,政府/军方要求这些软件都具有分析电路抗核辐射的能力。伯克利是反战的大本营,学生们自己开发的程序当然要跟政府/军方的要求对着干了。
有同学可能会问:为什么要开发一个电路仿真程序?呵呵,要知道在这之前,人们分析电路,要么是用笔和纸,要么就要搭电路板(breadboard)。Peterson教授就被学生们称之为“信封教授”,因为他认为电路分析用个信封的背面来做就足够了。但随着电路规模的增大,用笔纸变得越来越不可能,搭电路板又不能精确反应芯片上的电路特性,而且费用也越来越高。因此,用软件来做电路仿真就变得日益迫切了。
当课程结束,Nagel向Peterson教授汇报CANCER之后,Peterson教授给予了全心的认可。学生们都通过了!CANCER成了Nagel的硕士论文课题。它在伯克利被很多本科生及研究生使用,并且给了大量的建议去改进它。呵呵,都说学生是最好的“小白鼠”,这话果然不假(再插一段话:基于这堂课的巨大成功,Rohrer教授后来又用同样的办法试了几堂课,但都失败了。他自己总结说,是因为有Nagel,伯克利的那堂课才成功了。所以,如果没有Rohrer教授那样的功力和Nagel那样天分的学生,SPICE也不可能从一堂课里诞生出来。)
到了1971年的秋天,Nagel在伯克利又开始了他的博士生生活,这一回是在Peterson教授的指导下了。(在这之前,Rohrer教授离开了伯克利到工业界去发展。原因嘛,据说Rohrer教授与Peterson教授在是否要公开CANCER的源代码上有不同意见。Rohrer教授后来又回到了学术界,在卡内基-梅隆大学(CMU)做教授,并指导开发了AWE,这是后话。)
Peterson教授给Nagel的第一个任务是给程序起个新名字。确实,CANCER太难听了,谁都不喜欢。Nagel花了天知道多长时间才想出来这样好听的,也是我们现在还在用的名字:SPICE(SimulationProgram with Integrated Circuit Emphasis)。(所以,同学,如果你要写一个新程序,创建一个新公司,生一个小孩,一定要给她/他起个好听的名字。)1971年被正式认定为SPICE诞生的年份。
Nagel当年在伯克利的照片
Rohrer教授
Peterson教授
SPICE还是开源代码的先驱。当时也有开源代码,但都没有太大的商业价值。SPICE就不同了。有人已经看到它的商业价值,但Peterson教授坚持要把代码开源(我们都得真心的感谢Peterson教授)。任何人只要花20美元的手续费,就可以得到SPICE的源代码(当然,在冷战时期,SPICE被禁止出口到政府认为的“共产国家“)。有人会问,那这样一来,伯克利是不是损失了一大笔钱呢?事实并非如此。伯克利的SPICE帮助数字设备公司(DEC)卖出了很多台VAX机。反过来,DEC给伯克利电子系捐赠了一千八百万美元(这可是二十年前的数目,考虑到通货膨胀,你可以想象现在值多少钱)。这么多钱可不是一个学校卖代码能获得的。所以,做好事终究还是会得到好报的。
SPICE简史之
SPICE2和SPICE3
SPICE2和SPICE3
在70年代初期,伯克利电子系用的计算机是CDC6400大型机,它的运算能力相当于286(它的时钟频率是10兆赫,可它的成本是六百万美元。再看看今天你手中的iPhone,它的时钟频率超过1000兆赫,成本不到六百美元–这是一百万倍性价比的差别!)分给每个学生的主内存白天为256K字节。到了晚上人少,你就可得到384K。运行一个不算太大的电路仿真,用Nagel的话来说,就像把你11码大的脚穿进婴儿的鞋里–你得想尽一切办法节省内存。能仿真的最大的电路规模也就是25个双极晶体管(相当于50个电路节点)。而且,那时候SPICE还只有双极晶体管模型。71年的秋季,从贝尔实验室来到伯克利的DavidHodges教授带来了第一个MOSFET模型:Shichman-Hodges模型。如果你用过SPICE(并且年头足够多的话),你应该知道这就是Level1 MOSFET模型。它是所有MOSFET模型的鼻祖(下面我们还会讲到MOSFET模型的)。
1975年Nagel从伯克利博士毕业。他的论文“SPICE2:A COMPUTER PROGRAM TO SIMULATE SEMICONDUCTOR CIRCUITS”, 成为了EDA行业被引用最多的文章。
SPICE2这个版本基本上奠定了今天电路仿真程序的基石,其中包括:改进的节点分析法(ModifiedNodal Analysis),稀疏矩阵解法(Sparse Matrix Solver),牛顿-拉夫逊迭代(Newton-RaphsonIteration),隐性数值积分(ImplicitNumerical Integration),动态步长的瞬态分析(Dynamic Time Step Control),局部截断误差(LocalTruncation Error),等等-- 说太多技术细节了,还是接着讲故事吧。
Nagel毕业后去了贝尔实验室。从此以后,SPICE2的改进就由Nagel的室友,EllisCohen,继续进行下去。Ellis是个计算机编程能手。用当时周围学生的话说,他就是一个长成人形的计算机。是他(以及后来的AndreiVladimirescu和Sally Liu)把学校里开发的程序SPICE改造成了实用的SPICE2G6。在SPICE的早期开发中,他是个无名英雄。今天工业界里的很多商业SPICE就是基于SPICE2G6开发出来的。
这是Nagel博士论文的封面。
你可以用下面的链接下载这篇论文:
http://www.eecs.berkeley.edu/Pubs/TechRpts/1975/9602.html
如果你想了解SPICE的核心秘密,就下载一份好好读读吧!
最早的SPICE2没有用户界面。它的运行是批处理方式。也就是说,你准备好了你的电路描述和仿真命令,就把它们提交给主机系统里。然后呢?然后你就可以下班回家了(多好啊)。因为你的几十个(或几百个)同事也在做着同样的事。这就好像在一个银行里只有一个办事员(主机),而有几百个顾客(提交的仿真任务)排着队。这个办事员动作又慢(286的速度)。所以,等第二天早上上了班再看结果吧!(下面在讲HSPICE时我们还会讲到这个情况)。
SPICE2的输入是用打卡。你可能会问:什么是打卡啊?呵呵,祝贺你年纪够小。对那些年过半百的人,最初接触到的计算机输入界面就是像下面这样的卡:
你把你的电路描述及仿真命令打在一叠这样的卡上,然后放到读卡机里。你可能听说过SPICE的输入叫“SPICE DECK”,这个名字就是从这叠卡来的。
SPICE2的输出是行打印机。是的,就是用下面这样的打印机打出仿真结果在纸上(想象一下那时消耗了多少纸张)。
你也可以打印输入输出的信号波形。每个波形是用不同的字符画的。像下面
这样(看着是不是很粗糙啊):
有同学读SPICE手册时会看到一个奇怪的选择项叫”NOPAGE“。这是因为SPICE的输出在页与页之间的折线处会加入一个分页符,留出空白。这个选项就是要求不要停止打印的。这样一来,波形就不会因为换页而在页与页之间断掉了。随着行打印机的消失,这个选择项也进入了历史。呵呵,如果有谁知道这个选项,那他的“年龄”至少在40岁以上。
后来SPICE2的输入/出也进化成了文件输入/出,像下面这样:
到了八十年代,SPICE2已经遍及了各个大学。但它的问题也显现出来:FORTRAN代码太难维护,加新的器件模型需要改动的地方太多,等等。在此同时,C作为一种新的程序语言正方兴未艾。于是,用C语言重新写SPICE就被提到了议事日程上来。这个任务被伯克利的ThomasQuarles在89年的时候完成了。比起SPICE2来,SPICE3增加了用户界面,你可以使用命令,甚至命令串来控制程序。另外,还增加了图形界面看波形。更重要的是,SPICE3的程序构架更加清晰,更加模块化。维护及修改起来更加容易。八十年代也是计算机硬件突飞猛进的时代:大型机(mainframe)被工作站(workstation)取代。UNIX及架构在它上面的C-shell和X-window成为软件开发及应用的基本框架。另外,个人电脑(PC)也越来越普及。这些都为SPICE的广泛应用打下了坚实的基础(下面我们讲商业SPICE时会提到)。
同样,你可以用下面的链接下载Quarles的论文http://www.eecs.berkeley.edu/Pubs/TechRpts/1989/ERL-89-46.pdf下面是SPICE3(版本3f5)的执行语句,注意它是交互式的。每一个“Spice->”后面是一个Spice3的命令。比如“source”就是把电路读入,“run”就是运行,”display”就是显示,”quit”就是退出。
SPICE3自带了一个图形模块nutmeg。下面是nutmeg显示的波形,是不是比SPICE2的行打印的字符波形好看多了?
自从上世纪九十年代后,学术界SPICE的发展基本就停止在SPICE3f5这个版本了。这是不是意味着SPICE停滞不前了呢?非也。至少在两个方向上SPICE还在一直发展:一个是器件模型(特别是MOSFET模型),另一个是商业SPICE程序。(这里值得提一下,有一批SPICE的爱好者及高校把SPICE3f5接过来,并整合了其他几个开源软件(xspice,cider, gss,adms,等),建成了ngspice。Ngspice也在缓慢的进化着,但比起商业SPICE进化的速度慢多了。你可以在sourceforge上找到ngspice。)
编辑:黄飞
评论
查看更多