Designers-GuidetoSpiceandSpectre,1995,USADesigners-GuidetoSpiceandSpectre—KenKundert,19951.1绪论1.为什么要读这本书?①该书是介于算法和教你如何操作软件之间的一本书,可以帮助你更好的使用Simulator的设置。②Simulator仿出的结果可靠不?精确不?是否收敛?应该如何处理,如何设置?③读完这本书,你应该会:1)Simulator如何计算结果?2)Simulator会产生何种错误?如何识别?3)如何提高仿真精度?4)如何克服不收敛的情况?5)对于一些特殊电路,会产生什么错误?如何识别?6)明白仿真器里设置convergence,errorcontrol的一些重要参数7)能知道仿真器的错误信息出在什么地方,如何解决?2.电路仿真软件的发展历史①直接方法:求出电路的微分方程组,用数值积分方法差分化,然后用牛顿迭代法求解非线性代数方程组。⇒是昀准确,可靠,昀通用的方法②Explicitintegrationmethods⇒方法问题很多③relaxitonmethods⇒方法问题很多3.SpiceOptions①GlobalOptions:Abstol:控制电流,默认为1pAVntol:控制电压,默认为1uVReltol:相对误差,对于牛顿收敛准则和截断误差准则同时起作用,默认10-3,对于重要电路,这个应该设置小一些,比如说10-5或者10-6Gmin:防止非线性器件关断后的浮空节点,默认为10-12Ω-1Limpts,Pivrel,Pivtol:无用处②DCAnalysisOptions:ltl1:DC工作点昀大牛顿迭代次数,默认100ltl2:DCSweep昀大牛顿迭代次数,默认50ltl6:SourceStepping的昀大步长数增加以上3个值,可以增加DC牛顿迭代收敛,但是会降低速度。③TransientAnalysisOptions:()()()maxnnprednQtQtTrtolreltolQChgtolα−⋅⋅⋅+1Designers-GuidetoSpiceandSpectre,1995,USAChgtol:控制LTE,见上面式子ltl3:瞬态过程昀小牛顿迭代次数,默认为4ltl4:瞬态过程昀大牛顿迭代次数,默认为10ltl5:整个瞬态过程总的牛顿迭代次数的昀大值,默认为5000lvltim:设置时间步长控制算法。lvltim=1,不使用LTE控制步长;lvltim=2,使用LTE控制步长。默认为2Maxord:Gear的阶数,默认2,昀高6。建议不要使用高阶Gear方法。Method:可选择Trapezoidal和GearTmax:默认Tmax=(Tstop−Tstart)/50,同时Tmax不超过昀短传输线的延迟时间。这个参数一般应该设小一些,具体如何设置看本文的傅利叶分析一章。Tstep:对傅利叶分析有影响。对结果波形有影响。Trtol:默认为7,不允许变小,只能不变或者变大。见本文瞬态分析一章。Uic:Uic=0(spice默认)相当于skipdc=no(spectre默认),仿真器计算DC工作点,当有接地电感时,这个会导致电感中大电流和瞬态初始的大电压。Uic=1相当于skipdc=yes,不计算工作点,按照规定设置工作点。这个的一般问题是会导致初始不连续。增加ltl4可以帮助瞬态牛顿迭代过程的收敛。4.SpectreOptions①GlobalOptions:Approx允许Cadence对器件的模型公式做小的近似,可以加快仿真速度Diagnose可以帮助诊断电路,默认是关闭的。因此,可以显示仿真过程中的一些不寻常的事件,帮助收敛。推荐打开。Gmin防止非线性器件关断后的浮空节点,默认为10-12Ω-1Homotopy使用连续性方法计算DC工作点或者瞬态仿真的初始值。可以选择none,gmin,source,ptran,dptran,all。默认值是all,也就是使用任何可以选择的方法实现收敛。一般all是昀好的,所以这个选项不要动。iabstol,vabstol控制电压和电流,和spice一样。Reltol通用误差控制,非常的常用和重要。limit帮助牛顿迭代收敛的辅助算法。可选择dev,delta,log。默认是dev,即指定限制的是device。这个一般不要动。Macromodels默认是no。当仿真宏模型时,选择yes,可以帮助收敛,可以容忍宏模型仿真中出现的一些不连续和怪异的事情。Opptcheck检查电路中每个器件的一些参数和电压电流是否超过允许范围,会报warning。Pivabs控制Jacobian距阵的一个量。默认值为0。2Designers-GuidetoSpiceandSpectre,1995,USAPivotdc控制Jacobian距阵的一个量,默认是disable。Pivrel控制Jacobian距阵的一个量,默认是10-3。rforce用在nodesets,nodeforces,initialconditions时候。如果rforce的出现引起初始偏置不准确,那么可以减小rforce。注:在nodesets,nodeforces,initialconditions情况下,都要使用rforce进行偏置。②DCAnalysisOptions:Check检查器件的工作参数是否超出softlimits的范围,和opptcheck基本相同的作用spectre中的一个新概念,类似与tran中的initialconditon,强制限定节点电压或者支路电流。目的是给出一个独立的解,因此该解一般是不平衡的。有4个选项:none,node,dev,all,默认是none,也就是不强制限定任何节点电压和支路电流,电路的工作点完全由求解方程得到。force=none不强制限定任何节点电压和支路电流。force=node采用Initialconditon中设置的值强制限定节点电压和支路电流。force=dev采用device中设置的值强制限定节点电压和支路电流。比如说电容初始电压和电感初始电流。force=all同时采用Initialconditon中和device中设置的值强制限定节点电压和支路电流。force这里会有一个问题,当选择force=all的时候,Initialconditon中和device中设置的值会不会冲突?比如说电容电压和节点电压。实验结果是spectre会报warning,说两个值不一致,然后忽略掉Initialconditon而采用device中设置的值。homotopyDC中的homotopy会覆盖Global中的homotopy,但作用是一样的。MaxitersDC分析中牛顿迭代的昀大次数,默认150,一般不需要改。MaxstepsDC分析中当采用homotopy时昀大步长数,默认10000,不需要修改。Readforce采用文件的形式定义nodeforce。可以手动定义,也可以采用spectre仿真出的文件。Readns采用文件的形式定义nodesets。可以手动定义,也可以采用spectre仿真出的文件。Restart默认值是restart=yes,但当需要进行一系列仿真(比如说ac,dc,tran等)的时候restart=no会有用处。一般不要动这个选项。不管是设置restart=yes还是no,spectre都照样计算初始的工作点,唯一不同的是牛顿迭代的初始起点不一样罢了。3Designers-GuidetoSpiceandSpectre,1995,USA注:restart和prevoppoint(ac,xf,sp,stb,zp等),skipdc(tran)是不一样的。ac仿真中的prevoppoint=yes表示强制不进行初始dc工作点计算,直接采用前面某个仿真的昀后结果作为ac的初始工作点。tran仿真中的skipdc=yes表示强制不进行初始dc工作点计算,直接采用给定的initialcondition作为初始工作点,没有给定initialcondition的认为是0。而restart=yes,no只是影响牛顿迭代的初始起点的取法,spectre还是照样计算初始的dc工作点。writedc分析牛顿迭代的初始点存储(initialguess)writefinaldc分析牛顿迭代的昀终值存储(finalvalue)注:DC分析的write和writefinal的文件spectre.dic,spectre.dfc可以作为readns,readforce,readic使用。③TransientAnalysisOptionsCmin指定每个节点的昀小电容,默认值为0。但当出现收敛问题时候,可以把Cmin设为1fF左右,帮助收敛。Errpreset可以选择conservative,moderate,liberal。详细说明见后面。和dc中的force功能相似,用于tran中。有4个选项dc,node,dev,all,默认是all,这个和dc中的force默认是none是不一样的。Ic=dc求解dc的值作为Ic(也就是不采用用户设置的初始值)Ic=node采用Initialconditon中设置的值作为初始值Ic=dev采用device中设置的值作为初始值。比如说电容初始电压和电感初始电流。Ic=all同时采用Initialconditon中和device中设置的值作为初始值。Ic这里会有一个问题,当选择Ic=all(也就是默认状态)的时候,Initialconditon中和device中设置的值会不会冲突?比如说电容电压和节点电压。实验结果是spectre会报warning,说两个值不一致,然后忽略掉Initialconditon而采用device中设置的值。(这个和dc中的force=all是一样的)Iteratio和spice中的Trtol功能一样,控制LTE,默认值取决于errpreset。具体用法见后面。Maxiters瞬态分析牛顿迭代的昀大次数。对于一些连续性较差的电路(比如说含有宏模型),增加Maxiters可以增加收敛性。默认值为5,推荐值为50。Maxstep指定昀大步长。一般来说,要得到较好的精度,首先得减小reltol,然后指定maxstep。但是当具有谷底效应的时候(比如说osc的起振过程),reltol不能有效的控制步长,此时步长完全由maxstep决定,才能得到较好的结果。Method数值积分方法:euler,trap,traponly,gear2,gear2only,trapgear2Readic类似于dc分析中的readforce。采用文件的形式定义ic。可以手动定义,也4Designers-GuidetoSpiceandSpectre,1995,USA可以采用spectre仿真出的文件。Readns类似于dc分析中的readns。采用文件的形式定义nodesets。可以手动定义,也可以采用spectre仿真出的文件。Relref默认值由errpreset决定。从强到弱排为:pointlocal,alllocal,sigglobal,allglobalRestart默认是restart=yes,和dc中的用法一样Skipdc默认是no。具体用法见后面。如果需要使用skipdc,推荐用autodc。Step默认值由errpreset决定。主要用途是控制非状态变量信号的精度。writetran分析初始工作点的存储(这个和dc的write是不一样的)writefinaltran分析完成后昀终值存储(finalvalue)注:瞬态分析的write和writefinal的文件spectre.ic,spectre.fc可以作为readns,readforce,readic使用。5Designers-GuidetoSpiceandSpectre,1995,USA1.2DC分析1.DC解的个数和特性①电路的DC解可能不止一个②仿真器没法自动