本申请要求2011年9月30日提交美国专利局、申请号为13/250,541,发明名称为“RepetitiveCircuitSimulation”的美国专利申请的优先权,其全部内容通过引用结合在本申请中。
背景技术
集成电路是由例如电阻、电容、电感器、互感器、传输线、二极管、双极结型晶体管(BJT)、结型场效应晶体管(JFET)、金属氧化物半导体场效应晶体管(MOSFET)、金属T半导体场效应晶体管(MESFET)、薄膜晶体管(TFT)等电路元件构成的网络。
随着技术的发展,集成电路越来越复杂,需要使用强大的数值模拟程序。例如,电路仿真是集成电路的设计流程中必不可少的环节,它能帮助电路设计人员无需通过昂贵的制造工艺验证其设计的功能和性能。随着半导体加工技术发展到纳米尺寸,新的仿真方法需要解决纳米级电路设计所固有的新问题。现代集成电路快速发展、更新换代,不断挑战着电路仿真的算法和实现。半导体行业需要EDA软件有能力来分析与动态电流相关的纳米效应,比如耦合噪声(couplingnoise)、接地反弹(groundbounce)、传输线波传播(transmissionlinewavepropagation)、动态漏电流(dynamicleakagecurrent)、电源电压降(supplyvoltagedrop)、器件和电路的非线性行为等。因此,精准的电路模拟和晶体管级仿真已经成为解决纳米设计所面临问题的最有效的途径之一。
电子电路仿真器包括美国加州大学伯克利分校(UCBerkeley)开发的面向集成电路的仿真程序——SPICE(SimulationProgramwithIntegratedCircuitEmphasis)以及各种增强或衍生版本的SPICE仿真程序。SPICE及其增强、衍生版本将在本文被简称为SPICE电路仿真器或SPICE。SPICE方法认为电路是一个不可分割的整体。
SPICE仿真可以提供对电路行为相当准确的预测。这种预测不局限于个别的子电路,它涵盖整个系统(例如,整个集成电路),因而可以发现、处理全系统范围关于噪声之类的问题。一般的SPICE仿真处理流程,模拟集成电路通常被表示为一个网表描述的形式。网表是一种由SPICE语言编写的用于仿真的对模拟电路的电路描述。SPICE网表是包含仿真控制语句的纯结构性语言。其他语言如Verilog-ATM,还具有行为构建的能力。通过结构性网表,连同预定义电路元件,根据特定的电路建模方法,SPICE可以将模拟集成电路据表示为矩阵形式的数学表达(这不是本发明关注点)。非齐次线性微分方程解的维度范围从1到n。线性方程组的n维输入向量被表示为{I1,I2,..In}。由输入向量,可以求得线性矩阵的解向量{V1,V2,..Vn}。由解向量,通过电路模型方法,可以得到另一组输入向量。重复以上计算,直到解向量收敛。一系列的解向量,可以转换输出为波形、测量值或者核查结果,这样工程师就可以通过计算机屏幕检查仿真的结果。
然而,随着集成电路行业的发展,器件尺寸不断减小、互联效应日益增加,SPICE全系统仿真变得越来越困难。一个例子是晶体管沟道长度微米尺寸变化为深亚微米尺寸。由于更小的器件尺寸,电路设计者在集成电路中能够运用电路元件(例如,晶体管、二极管、电容)数量呈指数级增长,对应于SPICE矩阵的维数也量级增长,巨大的计算复杂度使得计算不能在有效时间内完成。
一个电路可以表示为瞬间电流分析的大规模离散非线性矩阵。矩阵维数和电路中节点的数目相同。对于瞬态分析,这个巨大的非线性系统需要求解几十万次,这限制了SPICE方法的容量和性能。一般的SPICE方法可以模拟不超过约50,000个节点的电路。因此,对于全芯片设计,SPICE方法不可行。SPICE在实际应用中被广泛应用于单元设计、库生成和准确性验证。
相对于传统SPICE,在20世纪90年代初开发的快速SPICE方法(FastSPICE)在一定精度损失的情况下,有两个数量级以上的容量和速度提升。性能上的提升主要由于使用简化模型、电路划分技术、事件驱动的算法以及对电路延迟的利用。
SPICE将电路模型化为节点、元件集,也就是说一个电路被视为通过节点相连接的各种电路元件的集合。SPICE的核心是所谓的节点分析,通过节点方程(或者电路方程)以矩阵形式表示电路,求解节点方程对电路进行仿真。电路元件被表示为器件模型,产生电路方程的矩阵元素。
电路元件的器件模型模拟,比如加州大学伯克利分校开发MOSFET器件SPICE模型,通常以模型方程和模型参数表示在变化偏置电压下的电路元件特性。例如,具有n个端子的电路元件,可以由下述的电流-电压关系建模:
Ii=fi(V1,...,Vn,t),其中i=1,…,n,
Ii表示流入第i个端口的电流,Vj(j=1,…,n)表示电压或者端口j相对于参考端口(例如地)的偏置电压,t表示时间。由基尔霍夫电流定律,流入端口n的电流为电路元件的电导矩阵为:
为了模拟电路元件在变化电流的行为,需要考虑节点电荷及端口偏压之间的关系:
Qi=qi(V1,...,Vn,t),其中i=1,…,n.
Qi表示端口i的节点电荷。n端口元件的电容矩阵为:
对于纳米级设计,矩阵规模巨大,求解非常耗时,对于n维矩阵求解,计算复杂度约为n3。电路仿真总时间T近似等于:
其中,Timestepi是每一个时间步长,Timei solve是第i个时间步的求解时间。一般来说,时间步长越小仿真越精确。但是,不必要的小时间步长会降低仿真速度,而过大时间步长则可能导致更多的迭代因而收敛速度变慢。在实践中,时间步长需要优化选取,以在准确性和仿真时间之间取得平衡。当电路仿真用于统计分析,总时间是种子数和每个种子仿真时间的乘积。一个典型的蒙特卡洛(Monte-Carlo)分析,通常需要上千次仿真(种子)达到收敛。
为了提高电路仿真的性能,常规系统采用多台计算机协同工作,每台计算机处理仿真的某些环节。这样的系统,也称为服务器群,可以分布在不同的地理位置,通过计算机网络连接。服务器群的问题是计算机之间的同步和网络数据通信会损害多任务的并行处理。此外,常规系统是非常昂贵的,需要配置多台计算机。
因此,需要新的方法和系统来解决常规系统所面临的问题。具体而言,是解决可重复电路仿真的方法和系统。
具体实施方式
本发明提供了进行重复性的电路仿真的方法和系统。下面的描述可以使任何本领域技术人员利用本发明。具体实施例和应用中所提供的描述信息仅为示例。这里所描述的实施例的各种延伸和组合对于本领域的技术人员是显而易见的,在不脱离本发明的实质和范围的情况下,本发明定义的一般原则可以应用到其他实施例和应用中。因此,本发明不只限于所示的实施例,本发明涵盖与本文所示原理和特征相一致的最大范围。
下面的详细说明以流程图、逻辑模块和其他的符号操作表达的形式给出,可以在计算机系统上执行。一个程序、计算机执行步、逻辑块,过程等,在这里被设想为得到所希望的结果的一个或多个步骤或指令的自洽序列。这些步骤是对物理量的物理操作。这些物理量包括电、磁或者无线电信号,它们在计算机系统中被存储、传输、组合、比较以及其他操作。这些信号可是比特、数值、元素、符号、字符、条件、数字等。每个步骤都可以通过硬件、软件、固件或它们的组合执行。
图1给出了根据本发明的一个实施例一个用于实现可重复电路仿真方法的系统。在一个实施例中,可以使用计算机系统实现可重复电路仿真的方法。该计算机系统可以包括一个或多个图形处理单元(GPU)和/或中央处理单元(CPU)100(下文简称处理器)、至少一个用于显示计算结果和波形的用户接口102、存储器装置104、系统总线106以及一个或多个连接GPU/CPU、用户界面、存储器装置和系统总线的总线接口。所述计算机系统还包括至少一个用于与其他设备105在计算机网络上通信的网络接口103。在替代方案中,系统和方法的某些功能可以在一个或多个专用集成电路(ASIC)或现场可编程门阵列(FPGA)中实现,从而减轻GPU/CPU的作用。
存储装置104可以包括高速随机访问存储器,还可以包括非易失性存储器,比如一个或多个磁盘存储设备。存储装置还包括与所述GPU/CPU远距离的海量存储。存储设备优选的存储:
·操作系统108,用于处理各种基本的系统服务和硬件相关的任务。
·应用程序110,用于执行用户定义的应用和任务,诸如电路仿真和模型计算。
·数据库112,用于存储集成电路的信息,包括数据结构、器件模型以及矩阵。
·可重复电路仿真器模块114应用一在先前仿真得到的信息为后续的电路仿真所用。
数据库、应用程序、和用于实现可重复电路仿真方法的程序包括可执行程序、子模块、表和其他数据结构。在其它实施例中,可能会用到额外的或者不同的模块和数据结构,并且上述列出的一些模块和/或数据结构可能不会被用到。
图2所示为根据本发明实施例的一个用于进行可重复电路仿真方法的概述。在图2中所示的示例中,电路仿真器204的输入202包含电路网表,该电路网表包括了元件及其连接信息、在仿真所用电路的拓扑结构的描述。输入202还包括电路的激励以及信号活动特性。仿真器204的附加输入206包括以往仿真的历史,统计参数的变化,统计参数和仿真输出之间的相关性,用于仿真的有序的种子。仿真器204记录以往仿真的历史,并用于随后的仿真中。请注意,有两种类型的统计参数,一种是诸如晶体管的阈值电压等的模型参数,第二种是实例化参数,如沟道宽度和长度、温度、电源电压等。简单起见,本文通称上述两种参数为统计参数。
图3所示为根据本发明实施例一个进行可重复电路仿真的示例性框图。在图3中示出执行仿真流程的电路仿真器204,和仿真器的关键块,例如,关键块包括,网表解析和展开302、设置时间步长304、加载矩阵306、求解308、收敛检查310。在块312中,首先判断仿真是否通过。如果仿真没有通过(312_No),方法转移到块314修改时间步长,然后执行块316,步长算法在这里有可能被修改;在块316之后块306、308、310和312被重复执行。如果仿真通过(312_Yes),方法转移到块318,判断是否有下一个时间步长。如果有下一个时间步长(318_Yes),方法转移到块304设置时间步长,重复块304之后的块。如果没有下一个时间步长(318_No),方法转移到块320。在块320,判断是否完成了所有的仿真种子。如果有一些种子没有完成(320_No),方法转移到块322,取得下一个种子,在块322之后,方法重复从块302到块320的流程。如果完成了所有仿真种子(320_Yes),方法在块324结束。
需要注意的是,在图3中的箭头指示了仿真器输入和关键块的通信。在下面的章节中,将会进一步说明利用以前仿真的历史、统计参数的变化、统计参数和仿真输出的相关、和仿真器的关键块的排序种子。
根据本发明的实施例,可以考虑电路分析的性质来配置求解器(块308)。在典型的复杂集成电路多通仿真中,只有有限数量的电路变量在变化,而电路的拓扑和激励则基本不变。在这样的情况下,电路矩阵结构不随种子而改变,因为电路矩阵结构只取决于电路拓扑和激励,并且不受到统计参数的变化影响。虽然矩阵结构不发生变化,矩阵元素的值会受到统计参数的变化影响。传统仿真器,主要时间花费在两个部分。首先,虽然电路矩阵大部分是稀疏的,但仿真器仍然需大量时间重构矩阵的每一个部分。这个过程被称为矩阵加载,可能花费高达70%的求解时间。根据本发明实施例,首次电路仿真通过后,有关于电路矩阵哪部分需要被修改,哪部分保持不变的信息会被提供给求解器,求解器只需要执行部分的矩阵加载(stamping)和求解,而不是完整的LU求解,从而使得仿真效率显着改善。
通过这种方法,只有一小部分的电路需要求解,而其余的电路则保持不变。一个结果是,与电路矩阵的计算部分有关的仿真数据由处理器进行高速缓存的效率得以提高,并行求解易于扩展到更多的处理器(CPU/GPU)。换言之,电路仿真器可以被配置为充分的利用多处理器并行仿真,获得更高的效率。
有许多方法来利用处理器的并行和任务映射功能。一种方式是将小型矩阵直接全部加载到处理器,在处理器内部分割任务以便并行处理。另一种方法是将矩阵分解为可以并行处理的矩阵块,然后将这些矩阵块分配给处理器,并行求解。在本节中,将举例说明矩阵分块方法。
对于大型的矩阵,要提高并行度可分解成许多小矩阵(也称为块矩阵)。然后加载小矩阵到处理器,并行求解小矩阵。小矩阵求解后,其结果将会被合并作为大矩阵的结果进行存储。实现这种方法的一种方式是,在多处理器系统中分配一组线程分别处理小矩阵块。进一步,小矩阵可以通过下面章节的数据结构和方法并行求解。根据本发明的实施例,一个大矩阵可以通过如下方法被分成更小的矩阵。首先,通过改变的行/列的顺序,一个大矩阵可以表示为(公式1)所示形式,(公式1)可进一步转化为(公式2)。
(公式1)
(公式2)
(公式2)中,分块矩阵可以自底向上的逐块解决。在这个例子中,大矩阵被分割成3个小矩阵,即A1,A2和A3。这些较小的矩阵的处理可以并行执行。
采用相同的技术,每个小矩阵(块矩阵)可以被进一步分解为其它的块矩阵。因而,可以形成一个层次式多级块矩阵系统。例如,根块矩阵代表大矩阵。在每个级别上,每一块都是源自根块矩阵的块矩阵。通过这种处理,由于在每一级的块矩阵是彼此独立的,它们可以在处理器及其关联处理器、线程组中并行求解。
传统的仿真器的一个问题是,当一个处理器执行一个任务之后,由于它要继续处理新的任务,因此该处理器不再保留之前任务的信息,前面任务的信息被丢弃。这被称为“数据缓存缺失”,这是由于传统仿真器已经将前一电路矩阵的块状态刷出缓存,当处理器求解下一个电路矩阵的块时,电路矩阵的前一块状态不再可用。结果是,处理器花费时间刷新缓存,还要花费时间为计算下一块填充缓存。在另一方面,本发明的方法可以配置使用多处理器进行仿真,因为只有一小部分的电路变化,电路的大部分已经在仿真过程中被放置在缓存中。这可以使仿真效率呈量级的提高。例如,求解器快10倍,并行快20倍,合并之后提升达到200倍的速度,因为两个提升方法是彼此正交的,互不影响。
根据本发明的实施例,利用前面仿真中的历史指导时间步长的选择,时间步长的控制逻辑可以减少每个时间步迭代的总数。如在图3所示,仿真器循环,以确定最佳的时间步长,有时它可能在迭代之间改变算法。通常情况下,时间步数直接关系到仿真用时的总量,例如,如果时间步数减少到一半,一般的仿真也可减少一半时间。
图4所示为根据本发明实施例一种利用一个电路分组的仿真结果仿真其它电路分组的方法。如图示,在本例中被模仿的电路是反相器404,接受一个电压由高变低的输入402,产生从低到高的输出406a。该方法得到了一些事实上的优点,即统计分析具有不改变电路拓扑结构的性质,也不改变仿真的每个种子的激励。相反,只有少数的模型或实例参数随种子不同而不同。在许多情况下,这些改变可能微不足道,从而电路仿真有可能在产出量和计算效率方面达到平衡。对比于根据本次仿真以往的时间步长预测优化的时间步长,一种方法是利用以往种子的历史来预测选择一个优化的时间步长。收集以往的种子的历史,例如,通过首次电路仿真,可以得到仿真输出对统计参数变化的响应,并在后续仿真的时间步长预测中加以利用。
参照图4,为了简化说明,只考虑阈值电压(Vt)和一晶体管的沟道长度(L)作为变化统计参数的例子。横轴表示变化的阈值电压(Vt),纵轴表示变化的沟道长度(L)。散射点,如图中411a和411b,在该曲线图中表示相对于彼此的统计参数的变化。根据本发明的实施例,该方法识别由标号410表示的一个或多个集群的统计参数。在某些实现中,每个集群都包括一组统计参数,组内的变化不会改变仿真结果。在其他实现方式中,每一个集群都包括一个统计参数组,组内的变化只在预定范围内改变仿真结果,例如Vout(图中未示出)上下浮动0.01V。例如,群集410可以表示晶体管模型处于一个或者多个区域,如亚阈值区、线性区域和饱和区域。
图4中所示的例子,典型的统计分析可以做很多次仿真。在每个分组中的反相器相同,但模型参数会因制造过程中的差异而不同。在分组过程中,仿真器可以接受一组相近的参数作为参数,比如群集410,其中参数之间的偏差很小。对于每个仿真运行,输出波形实质上很接近,比如406a,406b和406c,当采用从集群410选择的统计参数进行仿真时,每个输出波形的差异很小。如果仿真输出的结果可以从以往仿真历史中知道,如406a(表示第1分组的反相器),仿真器可以减少第2组到第n组的时间步数目,特别是在仿真输出没有显著变化的阶段,比如406a,406b和406C。
第2分组到第n分组的仿真中,仿真器可以使用第1组(406a)信息,以获得更好时间步长估计。例如,从第1组的信息中,如果仿真器知道局部截断误差很小,就可以在后续组的仿真中采用一个较大的时间步长。根据本发明的实施例,相对误差的容错度可以由仿真器用户设置,默认值为输出信号的大约10-3倍。例如,如果输出电压的幅值为1V,则默认的相对误差的容错度为1mV。在其它应用中,如果用户希望得到精度更高的仿真结果,相对误差的容错度可以设置为10-4倍输出信号;如果用户想要运行得更快的仿真,相对误差的容错度可以设置为10-2倍输出信号。结果,相比较使用具有固定小时间增量(数百个时间步长)并且在每一时间步长都进行求解的步进式方法,仿真器204可以只需要更少的时间步数。
图5所示为根据本发明实施例另一种利用一个电路分组的仿真结果仿真其它电路分组的方法。如图5所示,矩阵CircuitJ502表示电阻(R)和电容(C)在电路仿真中的特性,也被称为作为该电路的雅可比(Jacobian)矩阵。矩阵CircuitV504表示电路仿真中的电压向量,CircuitV504的每一个元素代表一个节点的电压。矩阵CircuitI506表示电路仿真中的电荷微分向量(也称为解向量的右手侧,RHS),CircuitI506的每一个元素表示在一个电路节点处的电荷微分。雅可比(Jacobian)矩阵和一电路分组的电压向量的乘积可以表示为器件模型、器件参数和节点电压的函数。通过LU分解,一电路分组的雅可比矩阵可以表示为一电路分组的矩阵L和U的乘积。
请注意,LU分解,将一个矩阵分解为一个下三角矩阵和一个上三角矩阵的乘积。数值分析中使用这种分解求解线性方程组或计算的矩阵的行列式。例如,设A是一个方阵,LU分解的形式,A=LU,其中L和U分别为相同维度的下三角和上三角矩阵。这意味着L的对角线以上和U对角线以下的矩阵元素都是0。对于一个3×3的矩阵,LU分解表示为:
根据本发明的实施例,给定电阻和电容和节点电压的电路,仿真器求解在电路的每个节点的电荷微分,表达式如下
第1分组:J1*V1=LJ1*UJ1*V1=I1;
其中,J表示一电路分组的雅可比矩阵,V表示一电路分组的电压向量,I表示一电路分组的电荷微分:
由于电路的各个组和节点电压实质上相同,从第2组到第n组的后续仿真,可以直接使用第1组的雅可比矩阵J1,和其对应的LU矩阵,LJ1和UJ1,如下所示:
第2组:J2*V2=LJ1*UJ1*V2=I2;
第3组:J3*V3=LJ1*UJ1*V3=I3;
第n组:Jn*Vn=LJ1*UJ1*Vn=In。
请注意,在求解上面的方程过程中,会维护一个残差记录每个方程的求解误差。如果残差小于预设的误差控制值,例如10-4或10-5倍的输出信号,仿真器可以继续重用由第1组历史中得到的雅可比矩阵。另一方面,如果残差是大于预设的误差控制值,仿真器则停止重用第1组历史中的雅可比矩阵。
上面所描述的方法有许多好处。首先,该方法可以在后续电路分组的仿真中重复使用LJ1和UJ1。这样可以节省大量将每个电路分组的雅可比矩阵分解为L和U矩阵的计算资源。其次,上述方法可以重用模型R和模型C,也就是说保存了偏导数(R,C)的计算。此外,该方法可以节省后续电路分组的雅可比矩阵加载。
参照图5,为了简化说明,仅包含第1分组508和第2组的510。不同的电路分组可以具有相同的电路特性和节点电压(也称为端口电压),这样的电路分组可以共享一个全局的雅可比矩阵CircuitJ502、一个全局节点电压向量矩阵CircuitV504和一个全局电荷微分向量矩阵CircuitI506。每个电路分组包括器件模型512、实例参数514、模型参数516,所述电路分组进一步包括方程518。对于每个电路分组,仿真器以节点的电压(也称为端口电压)作为输入,并产生相应的雅可比矩阵和电荷微分向量,例如,第1组产生子矩阵JD1520和ID1522,第2组产生子矩阵JD2524和ID2526,以此类推。雅可比矩阵,比如:JD1520和JD2524,可以从每一个电路分组加载到全局的雅可比矩阵CircuitJ502中。同样的,电荷微分矩阵,例如ID1522和ID2526的,也可以从每一个电路分组加载到全局矩阵CircuitI506。对于器件模型计算,由于电路分组和它们对应的节点电压实质上相同,JD1可替代JD2、JD3、...、JDn,ID1可替代ID2、ID3、...、IDn。因此,由于在电路分组中可以共享雅可比矩阵和电荷微分向量,计算资源可以大量节省。
值得注意的是,在模拟过程中运行(通常的首次仿真运行)除了缓存仿真运行的历史,仿真器还执行回归分析,以确定统计参数和仿真输出变化之间的相关性。例如,如果某些输入参数与输出相关性不强,这些输入参数可以在随后的仿真中被忽略。另一方面,如果某些输入参数与输出相关性很强,这些输入参数将在后续的仿真中被使用到,并被密切监测。通过这种方法,仿真器获得的相关性信息,可以在随后的仿真中略去对输出没有影响的参数,简化计算从而提高效率。注意,本方法可以通过减少仿真时间步的数目和计算量提高仿真效率,但仿真精度并没有损失。牛顿迭代在每个时间步仍然严格执行,以确保仿真的准确性。
在传统的方法中,一组种子选好后,其中包括统计参数变化的值的组合,然后每个种子以随机方式被仿真器仿真,使用蒙特卡洛分析(Monte-Carloanalysis)找到收敛解。例如,各种统计参数的变化范围,如阈值(Vt)、氧化物厚度(Tox)、和晶体管沟道宽度(W),被提交给种子生成算法,继而随机生成覆盖每个参数所指定的范围的种子。然后,随机产生的种子提交到仿真器进行仿真。在仿真器和种子生成算法之间没有通信。对传统仿真器而言,种子是独立,种子之间是不相关的,因为它们已被随机产生。
另一方面,根据本发明的实施例,作为输入的统计参数的种子可能被排序成为一个由设计者选择的预定序列,例如,升序或降序排列,仿真使用所述排序的种子。好处之一是,仿真器可以区别对待仿真输出的细微变化和剧烈变化。例如,根据以往趋势,如果一个仿真输出有较大的偏差,就需要对这个仿真输出进行分析,以确定是否会有新的趋势,或者电路设计存在问题。在仿真中使用排序种子,仿真器被配置为捕捉在仿真输出中的任何变化趋势。如果检测某种变化趋势,仿真器可以调整其方法以遵循新趋势,及时捕捉和跟踪相应的变化。需要注意的是仿真器并没有花费额外的时间来提供这一功能。仿真器还是使用排序的种子仿真相同数量的种子。所不同的是种子顺序基于某种规则排序的结果。
传统仿真器不能检测到这种变化趋势,因为种子是随机生成。常规仿真方法中,仿真器(执行计算和仿真的工具)和分析(分析设计的设计师或工具)是彼此分离的,因为它们通常属于不同的公司,EDA工具公司和电路设计公司。在传统方法中,种子选择和使用对于仿真过程没有任何影响,反之亦然。对电路设计公司而言,仿真器仅仅是一个工具,根据种子执行计算,而种子选取是另外的事。
为了检测输出的变化趋势,需要提供给仿真器已排序的种子的信息,并定期检查输出是否有剧烈的变化(例如,0.5%和5%的变化)。一个例子,晶体管的阈值电压作为统计参数并被排序,仿真器可以利用这样的信息的检测仿真输出的变化趋势。在这种情况下,如果仿真输出的偏差超过某一预设界限,例如1%,仿真器可以执行详细时间步长分析,生成一新的时间步长用于满足新的输出范围。因而,利用以往仿真的历史,比较以往种子的输出,可以做出有效时间步长预测,提高仿真效率。
根据本发明的实施例,仿真器(其中的解析器和展开器)可使用统计参数的变化信息创建用户仿真的电路分组。换言之,基于分组的局部解析和展开,考虑的不仅包含电路拓扑和电子活动,还要有统计参数的变化,以便为仿真确定更有效率的用于仿真的电路分组和电路矩阵。
一个方法,仿真器可以对以往仿真电路做一些局部修改,例如,错配的晶体管对、组件、甚至是电路块模,以求更有效的仿真。在这种情况下,整个电路中,只有一小部分晶体管的参数被改变,而其余部分仍然相同。仿真器知道变化的晶体管和变化的参数,这被称为一个局部变化。例如,一个电流镜,尽管在设计中晶体管具有相同的大小,在实际电路中,由于工艺偏差,晶体管尺寸会有不同。为了模拟这种工艺偏差,小偏差被添加到电流镜的一个晶体管上一段时间,以检查这个小偏差对仿真结果的影响。这种方法可以为在实践中常用的错配模拟带来好处。
另一个方法,仿真器可以通过一些全局修改被配置为更有效的仿真以往仿真电路,例如影响电路中的所有器件的阈值电压或栅氧化层厚度的变化,以求更有效的仿真。在这种情况下,电路的拓扑结构没有变化,电路的激励没有任何变化,这被称为一个全局变化。网表解析和分组受到输入统计参数变化的影响,而传统仿真器不会考虑这些变化。因此,利用全局统计参数变化信息,网表解析和分组可以产生更准确和更高效的电路分组和电路矩阵。
可重复电路仿真所公示的方法有许多好处。例如,如果仿真电路中具有一个重复性的输入信号,比如正弦波,电路中的其他信号也有许多是可重复性的。在此类应用中,仿真器模拟可重复波形的多个周期并分析的电路可重复特性,例如,通过快速傅里叶变换(FastFourierTransform,FFT)检查输出信号的频谱。做这样的仿真,传统仿真器会消耗大量的时间。此外,这种类型的应用对精度的要求非常高。究其原因是需要减少的仿真器以及计算机硬件带来数值噪声。这意味着,仿真需要以最高精度执行。为了保证精度,传统的仿真器通常会使用较小的时间步长,对统计参数和仿真输出使用更紧的误差容限,这些都会延长仿真时间。本发明所述方法,对于此类应用,时间步数和计算的次数(求解)的数目会显著降低,因而仿真时间显著减少。
本发明方法的另一个优点是,它们可以仿真模数转换(A2D)或数模转换(D2A)。为了确定A2D或D2A的精度,需要高至20比特位的精度。对于这类应用,仅进行瞬态分析是不够的。换句话说,设计师不能再通过波形检查来判断电路的准确性。相反,成千上万的可重复仿真需要在同一电路反复运行,以区分在实际电路噪声和背景噪声。为了解决这个问题,FFT分析结合成千上万的可重复仿真,以区分来源于计算机和仿真工具的数字(数值)噪声和来源于实际电路设计的电路噪声。同样的,本发明所述方法,对此类应用时间步数和计算的次数(求解)的数目会显著降低,因而仿真时间显著减少。
上文描述的本发明的实施例,参考了不同的功能单元和处理器。然而,显而易见的是,在无损本发明的情况下,可以使用不同功能单元或处理器之间的任何合适的功能组合。例如,一个在多处理器或控制器执行的功能可能在单个的处理器或控制器上执行。因此,特定功能单元的引用应当被视为用于提供所述功能的合适手段,而不是专指于某种特定的逻辑、物理结构或组织结构。
上面描述的系统和方法可以以任何适当的形式实现,包括硬件、软件、固件或它们的任意组合。该系统和方法可以根据情况有选择的部分实现,比如计算机软件执行于一个数据处理器,也可以执行于一个或多个数据处理器连同一个或多个数字信号处理器。本文系统和方法的每个实施例的元素和组件可以在物理上、功能上、逻辑上以任何适当的方式实现。事实上,一个功能可以在独立单元中、在一组单元中、或作为其他功能单元的一部分来实现。因此,该系统和方法既可以在独立单元中实现,也可以在物理上和功能上分布于不同的单元和处理器之间。
在相关领域中的技术人员将会认识到,本发明的实施例有许多可能的修改和组合,虽然形式略有不同,仍采用相同的基本机制和方法。为了解释的目的,前述描述参考了几个特定的实施例。然而,上述的说明性讨论不旨在穷举或限制本文所发明的精确形式。前文所示,许多修改和变化是可能的。所选和所描述的实施例,用以解释本发明的原理及其实际应用,用以使本领域技术人员能够最好地利用本发明和各个实施例的针对特定应用的修改、变形。