<<Designers Guide to Spice and Spectre>> 
为什么要读这本书? 
① 该书是介于算法和教你如何操作软件之间的一本书,可以帮助你更好的使用Simulator的设置。 
② Simulator仿出的结果可靠不?精确不?是否收敛?应该如何处理,如何设置? 
③ 读完这本书,你应该会: 
1) Simulator如何计算结果? 
2) Simulator会产生何种错误?如何识别? 
3) 如何提高仿真精度? 
4) 如何克服不收敛的情况? 
5) 对于一些特殊电路,会产生什么错误?如何识别? 
6) 明白仿真器里设置convergence,error control的一些重要参数 
7) 能知道仿真器的错误信息出在什么地方,如何解决? 
  
  
DC分析 
1. DC解的个数和特性 
① 电路的DC解可能不止一个 
② 仿真器没法自动判断解的稳定性,因此得到的解可能是稳定的,也可能是不稳定的 
2. DC分析中,收敛最重要,其次是精度(因为只要收敛,一般精度够) 
3. 现代电路软件组织方程组的方法:modern nodal analysis(节点分析方法) 
4. 求解非线性方程的收敛准则 
① 牛顿更新收敛准则(update convergence criteria) 
()()1,maxkknnnvvreltolvvabstol&#8722;&#8722;<&#8901;+ 
这里()()()1,maxmax,kknnvvv&#8722;= 
② 牛顿残余收敛准则(residue convergence criteria) 
()(),maxknnfvreltolfiabstol<&#8901;+ 
一般reltol=10-3, vabstol=1uV, iabstol=1pA 
这里,两个准则都是必需的。如果节点阻抗低,则小电压引起大电流,因此残余收敛准则(处理的是电流)起作用;如果节点阻抗高,则小电流引起大电压,因此更新收敛准则(处理的是电压)起作用。 
5. 牛顿迭代收敛的3个条件(这3个条件任何一条都可能不满足) 
( &#8901; )连续可微;V(0)充分接近于V(×);解V(×)是惟一的 
6. 大电路收敛更困难 
7. 3大问题:解不唯一(不止一个解),解不收敛(找不到解),解不精确。后面逐一寻找。 
① 解不惟一:Nodeset,Nodeforce(initial condition被用在nodeforce中),这里用到rforce。设置Gmin 
② 解不收敛:使用nodesets;增加Gmin,iabstol,vabstol,reltol;增加迭代次数Maxiters;使用homotopy方法。 
③ 解不精确:减小Gmin(可以设为0),减小reltol,iabstol,vabstol 
8. 解不惟一 &#8658; Jacobi matrix奇异,没法迭代 
由于器件模型或者电路参数造成的解不惟一,spectre没办法查出来;由于拓扑结构造成的可以查出来。 
9. 解不惟一如何解决?&#8658; Nodeset,Nodeforce(initial condition被用在nodeforce中) 
④ Nodeset对DC和Transient都有作用,Nodeforce仅对DC有作用 
⑤ Nodeset仅作为收敛辅助用,如果电路有惟一解,它不影响该解的唯一性。而Nodeforce直接作为解在该节点的值,因此直接破坏了解的惟一性。事实上, 
Nodeforce产生的解是非平衡的。Nodeset产生的是平衡的。 
10. gmin的作用:将非线性器件的端子上并联gmin的电阻,使得解唯一(让Jacobi距阵非奇异)。对于浮空节点,spectre自动将该节点连接电阻gmin到地。默认情况下gmin=1e-12 Ω-1 
rforce的作用:对于nodeforce,nodesets,initial condition里面设置的电压,用一个理想电压源串联rforce然后偏置到该节点。默认情况下rforce=1 Ω 
11. 当用牛顿方法求解失败(不收敛),改用homotopy方法(continuation方法)求解 
()(),fvλλ= ← 引入参数,让参数从0到1变化 
几种通用方法:source stepping/gmin stepping/pseudo stepping/dptran 
source,gmin的方法会受到不连续,折回,分叉的影响,而dptran/ptran的方法虽然连续,但是加入的电容有可能使电路振荡。 
12. DC不收敛怎么办? 
① 解决方法:diagnose=yes;使用nodeset;增加iabstol和gmin(可能会影响精度);增加迭代次数maxiters;改变rforce;看restart=yes是否有效果;使用tran仿真来寻找DC点(请参考后面) 
② 一般来说,当DC不收敛,而且不收敛不是由于拓扑结构,元件参数等原因引起的时候,采用的方法是逐渐的DC扫描某些参数(比如说source,gmin,bf,等等),或者是采用瞬态分析(扫描时间)。也就是所谓的连续性方法。 
13. 如何改善DC的精度 
① 影响的原因2个:gmin和收敛准则: 
1) 对于某些电路,利用节点上存储的电荷工作,节点希望它浮空,比如说电荷存储器件,不能容忍通过gmin损失的电荷,这种情况下,应该设置gmin=0。不过这样可能导致Jacobi距阵奇异。 
2) 牛顿残余收敛准则针对的是KCL定律,相当于节点电流有一点的误差,不守恒。对于高阻抗节点,即是小的电流误差会导致很大电压误差 
② 解决方法:减小reltol(这是通用方法)同时保持iabstol和vabstol合理;使用nodeset;如果gmin影响则设置gmin=0 
14. restarting from a previous solution(关于restart的设置问题) 
仿真A 仿真B 
初始值1------------->初始值2----------------> 
① 如果初始值1是正确合理的,而仿真A改变了初始值1(比如说瞬态仿真),即2≠1,那么仿真B应该从1启动,因此必需设置restart=yes。典型的例子是先仿DC,再仿Tran,再仿AC。由于Tran改变了DC的工作点,因此AC仿真就不正确了(默认从2启动),此时再AC中要设置restart=yes(此时从1启动) 
② 如果是扫描过程(比如说参数扫描寻找DC工作点),那么2才是合理需要的,因此仿真应该从2启动,因此设置restart=no(默认是no) 
15. 极小的浮空电阻使得KCL不满足(absolute convergence criteria),再spice中,没有关于KCL的收敛准则,因此极不可靠。spectre两个都有,可靠