SPICE是一种用于电路描述与仿真的语言,英文全称Simulation program with integrated circuit emphasis。作为UC Berkeley在1969至1970年间成功开发的一个经典项目(通用电路模拟仿真软件),首先应用在本科和研究生课程教学当中,得到广大师生和工程师的青睐,后来快速发展为工业界电路仿真的标准规范。
SPICE的成功得益于UC Berkeley之前开发的软件CANCER ( Computer Analysis of Nonlinear Circuits, Excluding Radiation),它最初是作为Ronald A. Rohere教授的一个课程实践项目,由研究生Laurence W. Nagel领导一个小组进行开发和改进,该项目得到Donald O. Pederson教授的高度重视,并建议Nagel以此为博士课题进行研究,这才有了SPICE的产生。
SPICE开发第一版和第二版基于Fortran语言,第三版是基于C语言,之后随着商业软件的参与,它又发展为多种版本,其中比较著名的有Synopsys公司的Hspice和Cadence公司的Pspice。更多关于SPICE的介绍可以参考Laurence W. Nagel博士的相关演讲(见分享资料目录:1 SPICE介绍)
下面结合个人学习SPICE的经历,给大家推荐一下入门和提高的资料。
入门部分:论文 PPT 教材
论文:In a Nutshell: How SPICE Works
点评:全文共3页,用两页篇幅讲了节点法和修改节点法,其中修改节点法是SPICE算法的核心,来龙去脉介绍的比较详细;最后一页简要介绍了SPICE在瞬态分析和交流分析中的应用,对于快速入门比较有用。
课件:Semiconductor Modelling in SPICE
点评:课件主要分为两大部分,一是SPICE算法和实现部分,主要介绍了线性电路/非线性电路的电路求解原理、数值仿真收敛问题,二是SPICE器件模型部分,介绍二极管、BJT、MOSFET等器件在不同状态下的建模,课件简明扼要,重点突出,有助于加深对SPICE软件操作的理解。
教材:Fundamentals of Computer-Aided Circuit Simulation
点评:全书共八章,173页,前五章将SPICE求解中用到的关键技术都进行了详细的讲解,例如修改节点法、线性/非线性方程求解、稀疏矩阵法、数值积分等;后三章是针对特定应用的技术讲解(灵敏度分析等),初学者可以跳过。
提高部分:论文 手册 代码
UC Berkeley博士论文
【1】Nagel L W. SPICE2: A computer program to simulate semiconductor circuits. 1975.
【2】Quarles T L. Analysis of performance and convergence issues for circuit simulation. 1989.
点评:这两篇博士论文分别凝聚着SPICE2和SPICE3的技术精华,其中Nagel实现了SPICE的“从无到有”,经典技术包括改进的节点分析法(ModifiedNodal Analysis),稀疏矩阵解法(Sparse Matrix Solver),牛顿-拉夫逊迭代(Newton-Raphson Iteration),隐性数值积分(Implicit Numerical Integration),动态时间步控制(Dynamic Time Step Control),局部截断误差(LocalTruncation Error)等等;在此基础之上,Quarles对SPICE进行了功能升级,从电路仿真速度、精度以及规模三个方面,对仿真性能、算法收敛以及程序架构进行了优化和改进,大大提升了SPICE用户的体验。
如果想深入学习SPICE,请将Nagel论文打印出来,然后画上两三天的时间仔细研读,保证读完后受益匪浅,再次进行SPICE仿真时,不再会对各种各样的选项所困惑,反而会由衷赞叹程序设计的巧妙。
SPICE编程手册
【1】Cohen E. Program reference for SPICE2. 1976.
【2】Quarles T L. The SPICE3 implementation guide[M]. 1989.
SPICE2是基于Fortran77语言开发的,总代码接近两万行,感兴趣的朋友可以看看代码,看看手册,学到真本领。对于SPICE3,如果编程基础不坚实,那么大致浏览一下编程手册就好,不要过于痴迷技术。
开源代码:Fortran版本(SPICE2) C版本(SPICE2, SPICE3)
点评:学习代码的第一步是编译并成功运行。计算机飞速发展了几十年,操作系统也是换了一代又一代,当年的代码是否能在现有的环境下成功运行,这是一个挑战。Linux环境下,基于C语言的SPICE代码编译应该没有太大问题,但是SPICE2的Fortran版本就不好说了,需要点经验和耐心,祝好运。
—————申明——————–