一种提高电路仿真运行速度的方法 【技术领域】
本发明属于集成电路计算机辅助设计领域。
背景技术
电路仿真器是电路设计前端的一个重要工具,它的主要功能是在物理设计之前对电路进行仿真,验证设计思路。其工作原理是在计算机上求解描述各种电路的方程,得到电路当中各个位置的电压、电流等未知量,在仿真的过程中,不可避免要求解非线性方程组。牛顿迭代是求解非线性方程组的常用方法,每一步迭代需要用LU分解的方法求解一个线性方程组,当方程规模很大时,LU分解的将会花费大量的时间,降低了求解的效率。因此,人们创造了很多牛顿迭代的变型,诸如修正牛顿迭代,下降牛顿迭代等等,这些方法有的减少了LU分解的次数,有的提高了牛顿迭代的收敛性,为求解非线性方程组提供了有效途径。
【发明内容】
本发明提出了一种能够优化LU分解间隔次数的牛顿迭代方法,并给出了其实际的施行方法。
牛顿迭代是求解非线性方程组的有效方法,该方法按照下面两步进行循环迭代,直到xk满足收敛条件:
(1)计算F(xk)和F’(xk),求解F’(xk)dk=-F(xk),
(2)xk+1=xk+dk,k=k+1。
可以看出,每一步牛顿迭代都要计算函数值F(xk)和F’(xk),然后求解F’(xk)dk=-F(xk),由于对F’(xk)进行LU分解方法的复杂度是多项式增长的,当电路规模变大时,会导致一步牛顿迭代花费很长时间。为了提高迭代效率,可以事先确定一个间隔次数M,在做完一次LU分解过后,以后的M步迭代中不再更新F’(xk),而使用已有的LU分解求解F’(xk)dk=-F(xk),这样会降低计算dk的精度,但是却减少了LU分解的次数,在间隔M步迭代以后,再更新F’(xk),重新做LU分解,这就是修正牛顿迭代方法。因为LU分解的次数少了,牛顿迭代的效率得到了提高,它按照如下步骤进行循环:
F′(xk0)dkm=-F(xkm),]]>
xkm+1=xkm+dkm,m=0,1,...,M]]>
xk+10=xkM,k=0,1,...]]>
修正牛顿迭代的一个重要目的在于提高求解速度,而求解速度提高的关键在于间隔次数M,表1是求解的时间和M的关系:
表1求解时间随M的变化
M 1 2 4 5 6 8 10 12 时间 162.52 103.97 87.12 88.27 66.35 66.62 64.18 65.22
从表1可以看出,M在增加到一定程度后不但不会提高求解速度,而且求解速度可能降低。一般情况下,LU分解的间隔次数M是在修正牛顿迭代之前选定的,并且在选定过后不再随着牛顿迭代的进行而变化,这样做很难保证实现选定的M能够使得求解速度达到最优。
由于固定间隔次数不能充分利用修正牛顿迭代的优点,因此可以考虑采用动态控制间隔次数的方法,使得所确定的间隔次数M能够尽量提高求解速度。另一方面,在对电路作时域瞬态分析时,随着时间的变化,电路方程可能会改变,这时候需要求解不同的非线性方程组,而能够优化不同方程的间隔次数M很可能是不一样的,因此在作瞬态分析的过程中,M还应该随着时间变化。
对于一个间隔次数为M的修正牛顿迭代,其效率定义为
e=ln(M+1)W,]]>
其中W是完成一次牛顿迭代的工作时间,该时间主要花费在两个方面,一是计算当前迭代值xk所对应的函数值F(xk)的时间tf,二是求解F′(xk)dk=-F(xk)的时间ts,因此修正牛顿迭代的效率为
e=ln(M+1)Mtf+ts,]]>
在做完一次LU分解后,使得e最大的M将作为间隔次数进行修正牛顿迭代。
由此,本发明提出确定修正牛顿迭代间隔次数的方法,如图1所示,该方法的步骤为:
(1)取初始值x0,迭代间隔M=1,迭代次数k=0;
(2)计算函数值F(xk)和F’(xk),保存所花费的时间tf;
(3)如果满足收敛条件,停止,否则执行(4);
(4)如果M整除k,执行(5),否则执行(7);
(5)求解F’(xk)dk=-F(xk),保存所花费的时间ts;
(6)计算使得最大的M,执行(8);
(7)利用已有的LU分解计算dk;
(8)xk+1=xk+dx,k=k+1,执行(2)。
【附图说明】
图1本发明提出的确定修正牛顿迭代间隔次数方法的流程图
图2RTLINV电路
图3ECLGATE电路
图4RCA3040电路
具体实施步骤
从输入网表抽取电路关系,采用修正节点分析方法(Modified Nodal Analysis)建立电路方程,在每次迭代提供方程时,提取在xk点电路中每个器件的参数和输入输出变量的关系,从而算出当前的函数值F(xk)和它的残差,对电路中的每个节点,通过连接关系和电流守恒(KCL)建立守恒方程,并利用有限差分方法近似的计算F(xk)对各个变量的偏导数,建立BCR(Branch Constitutive Relation)方程,得到F’(xk),同时保存计算函数值F(xk)和F’(xk)的时间tf,根据残差判断迭代是否收敛。
本发明采用直接方法以确保数值稳定性。如果当前迭代次数是迭代间隔次数地倍数,对矩阵进行LU分解,然后回代求解,并保存求解时间ts,然后需要计算新的最佳迭代间隔次数;否则直接利用已有的LU分解结果回代得到线性方程组的解,此时不用更新间隔次数。利用线性方程组的解更新位置变量得到下一个牛顿迭代点xk+1。
如果当前迭代次数是间隔次数的倍数,在进行下一次迭代之前应该重新计算最佳迭代间隔次数。在实际计算当中,M的值不能太大,否则牛顿迭代的收敛性将变得很差,本发明在1~10的范围内寻找最佳的M,根据迭代效率的表达式算出使得e最大的M即可。
用RTLINV电路(图2),ECLGATE电路(图3),RCA3040电路(图4)作为例子,验证给出方法的有效性,其结果见表2。
表2三个测试电路的结果比较
从表2可以看出,新的迭代方法大幅度减少了求解非线性方程过程中LU分解的次数,能够提高电路仿真器的运行速度。