面向对象的混合模式电路仿真方法*陈刚戴先中马旭东摘要混合模式仿真(mixed mode simulation)是电路仿真领域内的最新发展方向,提出了将面向对象思想应用于混合模式电路仿真的新思路,以解决器件模型和仿真算法的可重用、易扩展性问题,并以原型系统OOSim(Object-Oriented circuit Simulator)为例,系统地阐述了面向对象思想在混合模式电路仿真软件设计中的应用.关键词电路仿真;面向对象;器件建模分类号TP 73.113 Object Oriented Mixed Mode Circuit Simulation Chen GangDai XianzhongMa Xudong(Research Institute of Automation,Southeast University,Nanjing 210096)Abstract:Mixed-mode circuit simulation is the latest developing trend in the field of circuit simulation,an object-oriented way is presented in this paper in order to solve the expandability problem of device model and simulation algorithm in traditional simulator,and the process of implementing object-oriented designing method is fully discussed through the demonstration of a prototype system-OOSim.Key words:circuit simulation;object-oriented;device modeling 1混合模式电路仿真在电路仿真中,为了降低大规模、数模混合电路对计算能力的巨大需求,电路设计者往往对被仿真电路进行不同程度的抽象,以达到简化电路复杂度、加快电路仿真速度的目的.这种抽象可以应用于单个器件、局部和整个电路,它表现了电路设计者对电路中不同部分的关注程度.混合模式电路仿真[1]中的抽象级别自下而上分为模拟级(electrical level),开关级(switch level),门级(gate level),寄存器传输级(register transfer level)和行为级(behavioral level).通常,随着抽象级别的提高,仿真运算速度逐渐加快,伴随而来的则是仿真精度的降低.但是,由于采用不同的抽象级别来描述被仿真电路中的不同组件,并对不同级别的器件模型采用不同的仿真算法,因此它在仿真速度和电路规模上远远超过传统的数模混合仿真器,更加符合自顶向下(Top-Down)和自下而上(Bottom-Up)的现代大规模电路设计方法.本文以面向对象设计方法为指导思想,针对传统混合模式电路仿真程序中器件模型和仿真算法的可重用、易扩展性问题进行了探讨,提出了新的解决办法.2应用面向对象的思想来分析电路仿真问题电路仿真研究的是仿真对象由于各种组成部分(电子器件)相互作用而表现出来的物理行为.因此在这个问题域内应当受到关注的是各种电子器件(对象)及器件间的有机联系(如基尔霍夫电压定律和电流定律等约束条件).电子器件作为电路仿真的主要研究对象在被仿真电路中是以器件模型的形式体现出来.器件模型就是电路设计者对该电子器件物理行为的抽象表示,由于设计者的精度要求和关注细节的不同,这种抽象表示可以有不同的层次,不同的层次之间存在相似性和继承性的特点.因此,可以用面向对象方法中类的概念来描述电子器件及其抽象模型.面向对象的器件建模与传统混合模式器件建模相比,器件模型不再局限于特定的抽象级别,而是通过对象类的继承和重载机制,由上而下地不断细化,逐步扩展.这种面向对象的器件建模过程使得设计者可以通过成果复用和快速原型化开发等手段达到加速设计进程、降低设计成本的目的.电子器件之间的有机联系,是电路仿真算法研究的主要对象.在模拟电路仿真程序SPICE中,所有器件模型同处于模拟级,模型之间按照基尔霍夫电压和电流定律紧密地耦合在一起形成电路方程,通过直接的矩阵方法进行求解.在混合模式仿真中,由于器件模型具有不同的抽象级别,采用直接方法形成和求解统一的电路方程是非常困难的,因此可以采用基于对象的、事件驱动的(Event-Driven)、选择跟踪的(Selective-Trace)混合仿真算法.当前,一些通用的混合模式电路仿真器如DYMOLA,SABER[2]和APLAC[3]等在电子器件的建模机制上已经具备了基本的面向对象特征,能够借助于各种模型描述语言按照类的层次结构来组织器件模型,但是它们共同的缺点在于缺乏与经典的SPICE器件模型的兼容性,使得大量经实践检验过的器件模型无法得到充分的复用;由于模型描述语言语法格式的限制,不能完全支持面向对象思想中的重载机制.OOSim是一种面向对象的混合模式电路仿真器,它与普通混合模式仿真器的主要差别在于:在系统分析、设计和实现过程中完全遵循了面向对象的设计思想,而不仅仅是采用面向对象的语言工具(C++等)进行软件开发.OOSim通过采用对象化封装的形式将经典的SPICE器件模型融入自身的器件模型库,通过在器件模型的行为描述部分引入函数和子程序语法结构改善了对面向对象思想中重载机制的支持.3OOSim的设计和实现3.1设计思想OOSim的设计目标是将器件模型与仿真算法合理地分割开来,让模型实现者在不用了解仿真算法的情况下进行建模,这样可以得到更好的器件模型;解除算法设计者对模型的开发和支持任务,让其专注于算法的设计和实现,从而得到最好的仿真算法.OOSim设计的重点是实现一个面向对象的框架结构,以支持类的继承和重载机制及对象之间的消息传递机制,来为电路仿真问题服务.框架本身并不包括器件模型类库和仿真算法类库,它只是实现了对类和对象的支持机制.OOSim的系统结构见图1.图1OOSim系统结构OOSim的面向对象特性体现在:面向对象的器件建模(OOM)、面向对象的混合模式仿真算法(OOSA)和面向对象的用户接口(OOUI).面向对象的器件建模是为了解决模型的复用和扩展问题,仿真算法的面向对象化是为了增强算法的扩展和完善能力,面向对象的用户界面可以使被仿真电路的设计和实现更加符合自顶向下,逐步细化的设计思想.3.2面向对象的器件建模方法在SPICE中,器件模型分为2类:物理模型和宏模型.物理模型由表示器件特性的数学公式构成,以子程序的形式存在于SPICE的源代码和目标代码中,它是实验电路的基本组成部分.宏模型用多个简单的物理模型组合起来描述复杂器件的行为特性,是对器件物理特性在某种程度上的抽象表示.宏模型存储在于库文件中,便于扩充和修改.增强型的SPICE版本(如PSPICE,XSPICE,HSPICE和IG-SPICE)对SPICE的改进主要在于提供了各种各样的辅助建模手段,如核心代码修改、外部程序调用、参数化的宏模型等.在混合模式仿真中,电路器件分属于不同的抽象层次.这种抽象是自下而上进行的(模拟级→开关级→门级→寄存器传输级→行为级),是对底层行为的简化表示.器件模型的不同层次是由仿真软件设计者规定的,与采用的多层次的仿真算法密切相关.因此,器件建模人员仍然受到抽象层次和仿真算法的极大限制.面向对象的器件建模是一个由简单到复杂,逐步求精的设计过程,是OO思想[4]中继承和重载机制的充分体现.1)继承性模型的设计者抽象出不同类型的器件及器件的不同抽象层次之间存在的共同行为,形成一个公共的父类,通过建立子类处理各种器件的特殊行为.子类的使用使得器件模型易于理解,并且自然层次清楚.当一个器件类同时具有多个父类时(多重继承),它可以继承所有父类器件的行为.2)重载父类是子类的泛化表示,子类是父类的实现特例.父类定义了子类之间的共同行为,但并不限制这些行为的具体实现;子类不仅继承而且扩展了父类的行为,这些扩展行为在父类的不同子类之间是不一样的,它是器件行为特殊性的具体表示.3.3对象描述语言(ODL-Object Description Language)与SPICE和普通混合模式仿真不同,OOSim中的所有器件模型类都存放在以文本格式独立存在的模型类库中,这样做的目的在于方便器件模型的扩充和修改.OOSim以对象描述语言(ODL)来描述器件类及其层次,器件模型类的定义采用以下结构模式:Class类名Inherit〈父类1〉,〈父类2〉,…{Interface:…//接口描述Attribute:…//器件属性Architecture:…//内部结构描述,用于组合模型Behavior:…//行为描述}器件类结构中的Interface部分描述了器件与外部环境的接口.Attribute部分为2种属性:一种是外部属性,是电路设计者可以设置的模型参数;另一种是内部属性,只能由模型的行为描述部分进行计算和设置,但其数值可以通过消息传递机制输出给电路中的其他对象使用.当一个复杂器件类可以用几个简单器件类的组合结构来表示时,Architecture部分用于描述各简单器件类之间的互连关系.Behavior部分定义了器件的物理行为,是整个器件类中最重要的部分,它根据电路设计者输入的模型参数、器件的内部结构和外部接口信息,通过反映器件物理机制的数学公式计算器件本身的状态.由于面向对象思想具有信息隐蔽的特性,因此在解决经典SPICE器件模型的兼容性问题时,OOSim借助ODL为SPICE模型定义了标准的调用接口(对象化封装),而将实际的模型计算工作以DLL(动态连接库)的形式集成在OOSim的器件模型类库之中.OOSim在器件模型的属性和行为描述部分引入函数和子程序语法结构,将模型的计算工作分解为相对独立的模块,从而使得模型设计者可以通过重载部分计算模块来获得改进的器件模型.由于继承和重载的关系,OOSim的器件模型类库呈现出一种清晰的层次结构(见图2).对器件模型设计者来说,达到了成果复用的目的,使得模型的扩展工作更加快捷.对电路设计者来说,系统的设计过程更加符合自顶向下,逐步细化的现代设计思想.图2器件模型类别3.4面向对象的仿真算法OOSim是一个面向对象的混合模式仿真器,与其他仿真软件相比,器件类之间的层次并不明显,因此不能采用普通的混合模式仿真算法.面向对象的混合仿真算法需要解决以下问题:1)选择仿真级别混合模式仿真的级别一般划分为模拟级、开关级、门级、寄存器传输级和行为级.为了简化算法OOSim只包括模拟和数字两种仿真级别,各器件类通过在Interface部分选择模拟或数字接口,来取得与仿真算法的统一.2)仿真器结构OOSim采用事件驱动(Event-Driven)、选择跟踪(Selective-Trace)的仿真器结构.3)事件定义和事件调度事件是电路中某些节点状态的改变,它可以影响其他部分的行为.对于OOSim的连续的和离散的仿真级别,事件的定义是不一样的.OOSim采用事件队列对事件进行排队,根据选择-跟踪的策略进行事件调度.4)信号的表示和映射在混合模式仿真中,由于被仿真电路中器件分属于不同层次的器件类,因此信号在不同层次上的一致性表示问题必须得到解决.在OOSim中,这种映射关系由器件类根据本身行为来进行解释.4面向对象的器件建模示例以R,L,C为例,R,L,C均为双端电子器件,它们的属性包括端电压和流过的电流,行为模式包括电势差的计算和所满足的物理定律.对于R,L,C来讲电势差的计算公式是相同的,因此可以建立相同的父类TwoPort(双端器件类).Class TwoPort{Class Resistor Inherit TwoPort{Interface:Attribute:RES R;//电阻参数TERMINAL a,b;//端口定义Behavior:{I=U/R}Attribute:}VOLTAGE Ua,Ub;//端电压Class Inductor Inherit TwoPort{VOLTAGE U;//电势差Attribute:IND L;//电感参数CURRENT I;//电流Behavior:{U=L*der(I)}Behavior:}{Class Capacitor Inherit TwoPort{Ua=NODE(a);Attribute:CAP C;//电容参数Ub=NODE(b);Behavior:{I=C*der(U)}U=Ua-Ub;}}从以上用ODL语言描述的R,L,C器件模型可以看出,面向对象的器件建模机制可以通过成果复用,有效地减少开发工作中的重复劳动,降低开发成本,加快设计进程.5结语本文主要论述了面向对象的混合模式电路仿真软件设计和实现过程,提出面向对象的器件建模技术和面向对象的仿真算法,由此克服了传统方法在器件模型和仿真算法扩展性上的不足之处.由于面向对象设计方法具有信息隐蔽的特性,因此仿真器的模型类库中除了电子器件模型以外,还可以包含机械部件、磁器件、光电器件等,从而构成混合系统的仿真对象,因此面向对象的混合模式仿真的进一步研究和发展方向将是混合系统仿真.江苏省应用科学基金资助项目(BJ9502P).作者简介:第一作者:男,1971年生,博士研究生.作者单位:东南大学自动化研究所,南京210096参考文献1Saleh R,Newton R.Mixed-mode simulation.Dordrecht:Kluwer Academic,1990.2~14 2Vlach M.Modeling and simulation with saber.Proceeding of 1990 IEEE ASIC Design Conference.New York:Cherrice Traver,1990 3Valtonen M.APLAC-Object oriented circuit simulator and design tool:[dissertation].Helsinki:Helsinki University of Technology,1995 4Meyer B.面向对象式软件的构造.周伯生等译.北京:北京航空航天大学出版社,1992.23~33。