背景技术
集成电路是由例如电阻、电容、电感器、互感器、传输线、二极管、双极结型晶体管(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。由线性方程处理相应数量的输入向量。输入向量集被表示为{I1,I2,..In}。接下来,线性矩阵通过输入向量集解出解向量集{V1,V2,..Vn}。重复以上计算,直到解向量集收敛。解向量集可以转换输出为波形、测量值或者由工程师通过计算机屏幕检查仿真的核查结果。
然而,随着集成电路行业的发展,器件几何形状的不断减小、系统中组成部件之间的互联效应日益增加,整个系统的SPICE类仿真变得越来越困难。一个例子是晶体管沟道长度微米规格变化为深亚微米规格。由于器件几何形状的不断缩小,电路设计者在集成电路(IC)中能够运用电路元件(例如,晶体管、二极管、电容)数量呈指数级增长,对应于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的电流为电路元件的电导矩阵为:
为了模拟电路元件在变化电流(AC)的行为,需要考虑节点电荷及端口偏执电压之间的关系:
Qi=qi(V1,...,Vn,t),其中i=1,…,n.
Qi表示端口i的节点电荷。n端口元件的电容矩阵为:
在电路仿真中,模型计算、模型加载、模型求解需要占用大量计算资源,对于纳米级设计矩阵规模极大,这些计算十分耗时,计算复杂度为n3,其中n为矩阵的维度。传统的应用程序不能有效利用计算资源,因为没有考虑到仿真过程中电路的某些部分处于可以缓冲的区域,对应的矩阵部分也可以在某些处理步骤中被缓冲。
因此,需要新的方法和系统来解决常规系统所面临的问题。具体而言,需要在电路仿真中找到基于工作区域的器件缓冲的方法和系统。
具体实施方式
本发明提供了执行电路仿真中基于工作区域的器件缓冲的算法和系统,并根据下列描述使所属领域的技术人员可以制造和使用本发明。仅作为实例提供具体实施用例和应用的描述。这里描述的各种修改和组合的实例对于所属领域的技术人员是显而易见的,由此定义的普遍规则也可以在不背离这项发明的精神和范围下应用到其它实例和应用中。因此,本发明并不局限于所描述和展示的实例,而是应被赋予与本文所揭示的原理和特征最广范围相一致的应用范围。
以下详细描述的一部分是用有关流程图,逻辑模块及可在计算机系统上执行信息操作的其它符号表达法来呈现。计算机执行步骤,逻辑模块,进程等在本发明中被设想成一个或多个步骤的有条理的序列或是达到预期结果的指令。所述步骤就是利用物理量的物理操作。这些量表现为电,磁,或无线信号,它们可以被储存,传输,组合,比较,或者就在计算机系统里被控制。这些信号有时被称为位,值,元素,符号,字符,术语,数字或者其他类似的。每一步骤可以由硬件,软件,固件或他们的组合来执行。
图1所示列举了本发明中执行在电路仿真中基于工作区域的器件缓冲的系统。在这一实例中,执行电路仿真中基于工作区域的器件缓冲的方法可以用计算机系统来实现。计算机系统可以包含一个或多个图形处理器(GPUs)和\或多核微处理器(CPUs)100(下文中简称处理器),至少有一个用于显示计算结果和波形图的用户界面102,一个存储设备104,一个系统总线106,和一个或多个用于连接GPUs\CPUs、用户界面、存储设备和系统总线的总线接口。计算机系统也包括了至少一个在计算机网络上用于和其它设备105通讯的网络接口103。在另一实例中,该方法和系统的某些特定功能可以在一个或多个专用集成电路(ASICs)或现场可编程门阵列(FPGAs)中实现,从而减少了GPU/CPU的作用。
存储设备104可以包含高速随机存取存储器,也可以包含非易失性存储器,如一个或多个磁盘存储设备。所述存储设备还可以包括从图形处理器(GPUs)/CPUs的远程加载的海量存储设备,存储设备最适宜存储的是:
·操作系统108,其包括用于处理各种基本系统服务和执行与硬件相关任务的程序;
·应用程序110,用于执行用户自定义的应用程序和任务,如电路仿真和器件评估;
·数据库112,用于存储集成电路的信息。数据库包括数据结构,器件模型和矩阵;
·器件模型评估缓冲模块114,该配置用来提高电路仿真的效率。
数据库,应用程序和实现电路仿真中基于工作区域的器件缓冲方法的程序包括可执行程序,子模块,表格和其它的数据结构。在其它的实例中,可使用附加的或不同的模块和数据结构,而上面列出的一些模块和\或数据结构可以不使用。
图2列举了本发明在电路仿真中执行基于工作区域的器件缓冲的实例。如图2所示,每个GPU包括了N个多处理器,每个多处理器204还包括了M个分处理器206和一个指令单元207。每个处理器有它自己的寄存器208。一个多处理器204中的所有的分处理器206共用一个共享存储器模块210。所有处理器共享同一组常量缓存212和纹理缓存214存储器。这些处理器也可以访问设备存储器216中的数据,其中所述设备存储器216还被称为全局存储器。
在这个例子中,每个多处理器204都有一个共享存储器模块。从共享存储器210访问数据比从设备存储器(全局存储器)216访问数据快得多。所以一个提高计算效率的方法就是把全局存储器216的数据加载到共享存储器210中,利用共享存储器210执行大部分的计算和操作,然后再把共享存储器210计算的结果写回到全局存储器216中。图3所示为本发明在仿真状态下的子电路的框图实例。如图3所示,子电路302包括多个器件。在仿真过程中,有的器件是活跃的,像图中活跃区域所示的304a,304b和304c等等。有的器件是非活跃的,像图中缓冲区域的306a,306b和306c等等。多个器件可以互相连接(或耦合),表现为连接308a,308b,308c等。确定某个器件是否为非活跃(在缓冲区域中)的方法将在下面结合图5A来描述。(图4所示为本发明在电路仿真中执行基于工作区域的器件缓冲方法的实例。在图4模块402所示的例中展示,确定一个器件是否进入缓冲区域要考虑多种因素。例如,结合考虑图5A所描述的节点容差,该方法会检查器件的节点容差的变化,区域灵敏度,环境灵敏度和功能灵敏度。在模块404中,该方法确定子电路302中的每个器件是否进入到了缓冲区域,如果这个器件已经进入到了缓冲区域(去模块404的“是”分支),则此方法移到模块406。反之,如果该器件没有进入缓冲区域,则此方法就移到模块408。
在模块406中,对于已进入到缓冲区域的器件,不再进行模型评估。在模块408中,对还没有进入到缓冲区域的器件执行模型评估。在模块410中,决定是否结束模型评估。如果子电路302中的所有器件都已经被处理了(去模块410的“是”分支),则进入到模块412。但是如果还有一些器件需要处理(去模块410的“否”分支),该方法就回到模块402,并且不断地重复从模块402执行到410,直到子电路302中所有的器件都被处理过。
在模块412中,加载器件模型。根据本发明公开的内容,进入到缓冲区域的器件在电导(g')和电容(c')上发生的变化实质上是最小的,而且,结合图7A-7B和图8A-8B,这些电导(g')和电容(c')的值可以进行预加载。对于未进入到缓冲区域(例如活跃区域)的器件,它们相应的电导(g)和电容(c)可能通过结合图7A-7B和图8A-8B描写的散集操作(scatter-gather)被加载到电导矩阵G和电容矩阵C。在模块414中,方法应用模块412构建的器件模型执行求解。
图5A所示为本发明图4确定节点容差的方法实例。如图5A所示,在模块502中,可以对仿真子电路302里的多个器件,检查每个节点电压相对于它相应预置节点容差的变化(例如1mV,2mV等)。在某些实现中,如果节点上的变化超过了它的预置节点容差,即确定设备已进入到了缓冲状态。
在模块504中,该方法可以根据器件中不同的工作区域的敏感性来检查器件。例如,预置的节点容差可以根据器件是否在截止区,线性区或饱和区来进行调整。在某些实现中,不同的预置节点容差可以被使用在不同的操作区域中。
在模块506中,该方法能在一个或者多个相邻器件的环境中检查器件,来确定所述器件的预置节点容差。例如,利用一个或多个相邻器件相比较于该器件的尺寸,来检查这些相邻器件的环境。在其他的实现中,利用一个或者多个相邻器件与该器件相比较的聚合电导来检查该器件。还有某些实现中,可以检测与该器件相比较一个或多个邻近器件的聚合电容。
在模块508中,通过检查一个或者多个相邻器件(确定该器件的预置节点容差时的所述相邻器件)的功能,可以检查该器件的功能敏感性。例如,当该器件是个反相器时,它的预置节点容差与该器件是放大器时的节点容差大不相同的。另外,当该器件是个加法器时,它的预置节点容差与该器件是振荡器时的节点容差也是大不相同的。
图5B所示为本发明检查图5A的区域敏感性的实例。在图5B中,对于金属氧化物半导体场效应晶体管(MOSFET)的Vgs-Vth的多个值,展示了漏极电流(Ids)和漏极到源极间电压(Vds)的对比。水平轴表示漏极到源极间电压(Vds),垂直轴代表漏极电流(Ids).对于给定的栅电压,Ids随着Vds呈线性增加,随后逐渐平稳接近饱和值。MOSFET的线性区用数字510代表,其饱和区用数字512代表。根据本发明的说明,MOSFET的敏感度可以根据其不同的工作区域来进行检查。例如,节点容差可以依据器件是在线性区510还是饱和区512来进行调整。此外,不同的节点容差用于不同的工作区域。
图5C所示为本发明检查如图5A所示的区域敏感度的另一实例。图5C展示了MOSFET中漏极电流(Ids)和栅极到源极间电压(Vgs)的对比。水平轴表示栅源极电压(Vgs),垂直轴表示漏极电流(Ids)。在此实例中,Ids随着Vgs呈线性增加随后逐渐平稳。MOSFET的饱和区用数字514代表。根据本发明的说明,MOSFET的敏感性可以依据器件不同的工作区域来进行检查。例如,节点容差可根据器件是否在饱和区514来进行调整。此外,预置的节点容差可以在饱和区514使用。
图6A所示为本发明确定器件是否已进入如图4所示缓冲区域的实例的执行状况。在模块602中,通过图5A描述的方法临时确定器件是否已经进入到缓冲区域。在某些状态下,某器件可能临时进入到了缓冲区域,但是随后又变成活跃。在预置周期内,该方法可以对器件已经进入缓冲区域进行跟踪,其中所述预置的周期为一可编程的参数。当器件在预置周期内还在缓冲区域中,该器件可以被视为已经进入到了临时缓冲区域。如果器件已经进入到了临时缓冲区(去模块602的“是”分支),即进入到模块604。或者,如果器件还没有进入到临时缓冲区(去模块602的“否”分支),则进入模块408。
在模块604中,通过图5A描述的方法,来确定器件是否持续地进入到了缓冲区域一段时间。如上所描述,在预置周期内,可以对器件已经进入缓冲区域进行跟踪。如果该器件在缓冲区域停留超过了预置周期,那么所述器件可被视为已经进入到了持续缓冲区。如果所述器件已经进入到持续缓冲区(去模块604的“是”分支),即进入到模块406。或者,如果所述器件还没进入到持续缓冲(去模块604的“否”分支),则进入到模块408。换言之,在此实例中,只有当器件进入到了持续缓冲区时,才可以跳过模型评估;否则,就要执行器件模型评估。
图6B所示为本发明判断器件是否已进入如图4所示的缓冲区域的另一实例。在图6B所示的可仿效实现中,确定器件是否已经进入到临时缓冲区(模块602)的方法和确定器件是否进入到持续缓冲区(模块604)的方法,与图6A所描述的方法类似。在模块602中,如果器件已经进入到临时缓冲区(去模块602的“是”分支),该方法即进入到模块406,或者,如果器件还没有进入到临时缓冲区(去模块602的“否”分支),该方法则进入到模块604。在模块604中,如果器件已经进入到持续缓冲区(去模块604的“是”分支),该方法即进入到模块406。或者,如果器件还没进入到持续缓冲区(去模块604的“否”分支),该方法则进入到模块408。在本实例中,如果器件已经进入到临时缓冲区或者是进入到持续缓冲区,就可以跳过模型评估。否则,就要执行器件模型评估。
图7A所示为本发明确定被仿真子电路的电导率方法的实例。如图7A所示,缓冲区域里的器件(一个或多个)的电导用g’(在模块702中)表示,临时缓冲区域里的器件(一个或多个)的电导用g”(在模块703中)表示;活跃区域里的器件(一个或多个)的电导用g(在模块704中)表示。在仿真中的每个时间步长里,仿真中子电路的总电导G(在模块706中用G表示)是缓冲区域里器件(一个或多个)的电导(g’),临时缓冲区域里器件(一个或多个)的电导(g”)和活跃区域里器件(一个或多个)的电导(g)的结合。
图7B所示为本发明中图7A所示方法的另一个实例。在图7B所示的可仿效实现中,当某器件进入了缓冲区域,该方法会把器件的电导(g’)预加载到缓冲聚合电导矩阵(G’)708中。换言之,缓冲区域里子电路器件的电导贡献被预求和,而且存储在缓冲聚合电导矩阵(G’)708中。另一方面,当该器件离开了缓冲区域,其电导贡献会从缓冲聚合电导矩阵(G’)708中减去。根据本发明的实例,缓冲聚合电导矩阵(G’)708与电导矩阵(G)有着相同的格式。在其他的实现中,缓冲聚合电导矩阵(G’)708可以实现为连续数组。在仿真的每个时间步长中,缓冲聚合电导矩阵(G’)708的内容会被添加到电导矩阵(G)706中。根据本发明的内容,临时缓冲区域的器件(一个或多个)的电导(g”)(模块703)和活跃区域的器件(一个或多个)的电导(g)(模块704)可以通过分散/汇集操作计入706的电导矩阵G中。
根据本发明的说明,在时间步长迭代开始时的缓冲状态可按如下步骤检查:
1)将非活跃器件端口相对电压(VDS,VGS,VBS)和上一时间步长进行比较。
a)通过不同工作区域的器件获得比较容差的设置。
2)如果电压的任何维数都超过了容差,则离开缓冲状态,并激活器件。
a)减去被激活器件的贡献(器件局部矩阵),以此恢复非活跃矩阵;
b)通过减去ΔRHS(RightHandSide)来恢复RHS(右手项=进入缓冲时的原始右手项+器件局部矩阵×(当前迭代的解-进入缓冲时的解))
3)如果电压的所有维数在容差之中,就停留在缓冲区域。
a)通过外插调整右手项(Δ右手项=器件局部矩阵×(当期迭代解-上次迭代解))。
根据本发明的内容,时间步长迭代结束阶段的缓冲状态可以按如下步骤检查:
1)将活跃器件端口相对电压(VDS,VGS,VBS)与前一时间步长进行比较。
a)通过不同区域的器件获得比较容差的设置。
2)如果电压的任何维数超过了容差,即停留在非缓冲状态;
3)如果电压的所有维数在容差之中,则进入缓冲状态:
a)将器件局部矩阵填到全局非活跃矩阵中;
b)将器件端口右手项填到全局非活跃矩阵中;
c)将器件的端口电压和器件的局部矩阵/右手项(RHS)存储在器件中,以备日后引用。
图8A所示为本发明在仿真环境下子电路的电容确定方法的说明。与图7A所示的关于子电路电导的方法相类似,缓冲区域里的器件(一个或多个)的电容用c’(在模块802中)表示;临时缓冲区域里的器件(一个或多个)的电容用c”(在模块803中)表示;活跃区域里的器件(一个或多个)的电容用c(在模块804中)表示。在仿真中的每个时间步长里,仿真中子电路的总电容用C表示(在模块806中),该总电容C可能是缓冲区域里器件(一个或多个)的电容(c’),临时缓冲区域里器件(一个或多个)的电容(c”)和活跃区域里器件(一个或多个)的电容(c)的结合。
图8B所示为本发明图8A所示方法的另一个实例。与图7B所示的关于子电路电导的方法相类似,当某器件进入了缓冲区域,该方法会将器件的电容(c’)预加载在缓冲聚合电容矩阵(C’)808中。换言之,缓冲区域里子电路的器件电容贡献被预求和,而且存储在缓冲聚合电容矩阵(C’)808中。另一方面,当器件离开了缓冲区域,其电容贡献会从缓冲聚合电容矩阵(C’)808中减去。根据本发明的说明,缓冲聚合电容矩阵(C’)808与电容矩阵(C)有着相同的格式。在其它的实现中,缓冲聚合电容矩阵(C’)808可以实现为连续数组。在仿真的每个时间步长中,缓冲聚合电容矩阵(C’)808的值会被添加到电容矩阵(C)806。根据本发明的说明,临时缓冲区域(模块803)里的器件(一个或多个)的电容(c”)和活跃区域(模块804)里的器件(一个或多个)的电容(c)可以通过分散/汇集操作计入到电容矩阵C806中。
应该认识到,上述清晰的描述已经通过引用不同的功能单元和处理器来描述本发明的特征。但是,很明显,依然可以在不同的功能单元和处理器之间,使用任何合适的功能分配,而不影响本发明,例如,检查了通过分离的处理器或控制器执行的功能也可以通过同样的处理器或控制器执行。对特定的功能单元的引用也可以看作是对提供所描述功能的适当方法的引用,而不是去表明严密的逻辑,物理结构,或是组织。
本发明可以以任何一种合适的形式去实现,包括硬件,软件,固件,或者是这三者之间任意一种组合。本发明可以选择性地部分实现为在一个或多个数据处理器和/或数字信号处理器上运行的计算机软件。本发明的一种实例的元素和组件可以以任何一种方式,在物理上,功能上和逻辑上实现。实际上,这一功能可以在单独一个单元,数个单元,或者作为其它功能单元的一部分被执行。同样地,这一发明可以在一个单独的单元中被执行,也可以在物理上和功能上在不同的单元和处理器间进行分配。
凡是业内人士都能够意识到,在使用同样基本的潜在机制和方法时,依然可以使用公开实例的许多可能的修正和组合。前面的描述引用了特定的例子做出解释。然而,上述详细的研究并非旨在彻底的讨论或把本发明限制为所披露的精确形式。鉴于上述的教旨,许多修正和变动也是可行的。选择和描述实例,用以解释本发明的原理及其实际应用,使本领域技术人员能够根据预期的特定用途使用各种修正方案,充分利用本发明中各种实施用例。