一种提高电路仿真运行速度的方法

文档序号:6471928阅读:333来源:国知局

专利名称::一种提高电路仿真运行速度的方法
技术领域
:本发明属于集成电路计算机辅助设计领域。
背景技术
:电路仿真器是电路设计前端的一个重要工具,它的主要功能是在物理设计之前对电路进行仿真,验证设计思路。其工作原理是在计算机上求解描述各种电路的方程,得到电路当中各个位置的电压、电流等未知量,在仿真的过程中,不可避免要求解非线性方程组。牛顿迭代是求解非线性方程组的常用方法,每一步迭代需要用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'OO,然后求解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(《),x广1=+《,m=0,1,…,M;cK"0,1,…修正牛顿迭代的一个重要目的在于提高求解速度,而求解速度提高的关键在于间隔次数M,表1是求解的时间和M的关系表1求解时间随M的变化3<table>tableseeoriginaldocumentpage4</column></row><table>从表1可以看出,M在增加到一定程度后不但不会提高求解速度,而且求解速度可能降低。一般情况下,LU分解的间隔次数M是在修正牛顿迭代之前选定的,并且在选定过后不再随着牛顿迭代的进行而变化,这样做很难保证实现选定的M能够使得求解速度达到最优。由于固定间隔次数不能充分利用修正牛顿迭代的优点,因此可以考虑采用动态控制间隔次数的方法,使得所确定的间隔次数M能够尽量提高求解速度。另一方面,在对电路作时域瞬态分析时,随着时间的变化,电路方程可能会改变,这时候需要求解不同的非线性方程组,而能够优化不同方程的间隔次数M很可能是不一样的,因此在作瞬态分析的过程中,M还应该随着时间变化。对于一个间隔次数为M的修正牛顿迭代,其效率定义为—ln(M+l)『其中W是完成一次牛顿迭代的工作时间,该时间主要花费在两个方面,一是计算当前迭代值Xk所对应的函数值F(Xk)的时间tf,二是求解F'(xk)dk=-F(xk)的时间ts,因此修正牛顿迭代的效率为ln(M+l)为M卢,在做完一次LU分解后,使得e最大的M将作为间隔次数进行修正牛顿迭代。由此,本发明提出确定修正牛顿迭代间隔次数的方法,如图1所示,该方法的步骤(1)取初始值x。,迭代间隔M=l,迭代次数k=0;(2)计算函数值F(xk)和F,(xk),保存所花费的时间tf;(3)如果满足收敛条件,停止,否则执行(4);(4)如果M整除k,执行(5),否则执行(7);(5)求解F'(xk)dk=-F(Xk),保存所花费的时间ts;ln(M+l)(6)计算使得J^+^最大的M,执行(8);(7)利用已有的LU分解计算dk;(8)xk+1=xk+dx,k=k+l,执行(2)。图1本发明提出的确定修正牛顿迭代间隔次数方法的流程图图2RTLINV电路图3ECLGATE电路图4RCA3040电路具体实施步骤从输入网表抽取电路关系,采用修正节点分析方法(ModifiedNodalAnalysis)建立电路方程,在每次迭代提供方程时,提取在xk点电路中每个器件的参数和输入输出变量的关系,从而算出当前的函数值F(Xk)和它的残差,对电路中的每个节点,通过连接关系和电流守恒(KCL)建立守恒方程,并利用有限差分方法近似的计算F(Xk)对各个变量的偏导数,建立BCR(BranchConstitutiveRelation)方程,得到F'(xk),同时保存计算函数值F(xk)和F'(xk)的时间tf,根据残差判断迭代是否收敛。本发明采用直接方法以确保数值稳定性。如果当前迭代次数是迭代间隔次数的倍数,对矩阵进行LU分解,然后回代求解,并保存求解时间ts,然后需要计算新的最佳迭代间隔次数;否则直接利用已有的LU分解结果回代得到线性方程组的解,此时不用更新间隔次数。利用线性方程组的解更新位置变量得到下一个牛顿迭代点xk+1。如果当前迭代次数是间隔次数的倍数,在进行下一次迭代之前应该重新计算最佳迭代间隔次数。在实际计算当中,M的值不能太大,否则牛顿迭代的收敛性将变得很差,本ln(M+l)发明在110的范围内寻找最佳的M,根据迭代效率的表达式^,算出使得e最大的M即可。用RTLINV电路(图2),ECLGATE电路(图3),RCA3040电路(图4)作为例子,验证给出方法的有效性,其结果见表2。表2三个测试电路的结果比较电路RTLINVECLGATERCA3040节点个数113630器件个数82526二极管个数020三极管个数2811时间点数2000020005000计算函数值的修正牛顿迭代58773549615669本发明的方法63264581416356LU分解次数修正牛顿迭代1983017814975本发明的方法33705081347从表2可以看出,新的迭代方法大幅度减少了求解非线性方程过程中LU分解的次数,能够提高电路仿真器的运行速度。权利要求一种提高电路仿真运行速度的方法,其特征是通过电路仿真器确定修正牛顿迭代的LU分解间隔次数,通过动态控制牛顿迭代过程中LU分解的次数优化牛顿迭代的效率,从而达到提高电路仿真运行速度的目的。2.根据权利要求1所述的一种提高电路仿真运行速度的方法,其特征在于每间隔一定次数重新计算电路矩阵,进行LU分解,而间隔次数是动态控制的,其中确定间隔次数的步骤如下(1)取初始值x。,间隔次数M=1,迭代次数k=0;(2)计算函数值F(Xk)和F'(Xk),保存所花费的时间tf;(3)如果满足收敛条件,停止,否则执行(4);(4)如果M整除k,执行(5),否则执行(7);(5)求解F'(xk)dk=-F(Xk),保存所花费的时间ts;ln(M+l)(6)计算使得M^+,最大的M,执行(8);(7)利用已有的LU分解计算dk;(8)xk+1=xk+dk,k=k+l,执行(2)。全文摘要本发明属于集成电路计算机辅助设计的领域。牛顿迭代是所有电路仿真器求解非线性方程组所采用的基本方法,出于效率上的考虑,牛顿迭代的多种变型在实际当中得到了广泛的应用,诸如修正牛顿迭代、阻尼牛顿迭代等等,提高牛顿迭代的效率也是仿真器加速的关键因素之一。本发明针对牛顿迭代过程当中计算牛顿方向的步骤,提出了一种新的确定LU分解次数间隔的方法,提高了计算牛顿方向的速度,能够优化计算牛顿方向和牛顿迭代的效率。文档编号G06F17/50GK101770531SQ20081024109公开日2010年7月7日申请日期2008年12月30日优先权日2008年12月30日发明者刘强申请人:北京华大九天软件有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1