no cross no crown赏析:Proteus深入研究(三.2): VSM SDK翻译 (10~46/289) 收藏

来源:百度文库 编辑:偶看新闻 时间:2024/04/28 21:42:40
 Proteus深入研究(三.2): VSM SDK翻译 (10~46/289) 收藏
目    录0.    写在前面的话......................................................................................................................... 11.    简介........................................................................................................................................ 22.    SPICE工作原理...................................................................................................................... 32.1      简介................................................................................................................................. 32.2      电路表示.......................................................................................................................... 32.3      电阻、受控电流/电压源.................................................................................................... 32.4      非线性.............................................................................................................................. 42.5      时变性.............................................................................................................................. 53.    DSIM工作原理....................................................................................................................... 63.1      引言................................................................................................................................. 63.2      启动过程.......................................................................................................................... 63.3      稳定过程.......................................................................................................................... 63.4      事件处理循环................................................................................................................... 73.5      结束条件.......................................................................................................................... 73.6      九状态模型....................................................................................................................... 73.7      未定义状态....................................................................................................................... 83.8      悬空输入.......................................................................................................................... 83.9      毛剌处理.......................................................................................................................... 84.    混合模式仿真分析原理........................................................................................................ 114.1      概述................................................................................................................................ 114.2      混合模式接口模型(ITFMOD)........................................................................................... 114.3      使用ITFMOD属性.......................................................................................................... 125.    模型类型............................................................................................................................... 145.1      概述................................................................................................................................ 145.1.1       电气模型.................................................................................................................. 145.1.2       图形模型.................................................................................................................. 145.2      仿真基本元素.................................................................................................................. 145.3      原理模型......................................................................................................................... 155.4      SPICE模型..................................................................................................................... 155.5      VSM模型........................................................................................................................ 156.    模拟元件建模教程................................................................................................................ 176.1      简介................................................................................................................................ 176.2      设置测试用例.................................................................................................................. 176.3      线圈元素建模.................................................................................................................. 186.4      线圈电路概述.................................................................................................................. 206.5      开关部件建模.................................................................................................................. 226.6      开关电路概述.................................................................................................................. 236.7      测试并编译模型.............................................................................................................. 236.8      在其它设计中使用模型.................................................................................................... 247.    数字元件建模教程................................................................................................................ 267.1      简介................................................................................................................................ 267.2      74123单稳多谐振荡器..................................................................................................... 267.3      设置测试环境.................................................................................................................. 277.4      进入等价电路.................................................................................................................. 287.5      等价电路概述.................................................................................................................. 297.5.1       功能建模.................................................................................................................. 297.5.2       瞬态模型.................................................................................................................. 307.6      测试与编译模型.............................................................................................................. 337.7      在其它设计中使用模型.................................................................................................... 338.    混合模式建模教程................................................................................................................ 358.1      简介................................................................................................................................ 358.2      设置测试环境.................................................................................................................. 358.3      555的结构示意图............................................................................................................ 358.4      等价电路......................................................................................................................... 368.5      使用模型......................................................................................................................... 389.    VSM建模教程...................................................................................................................... 399.1      简介................................................................................................................................ 399.2      创建VOLTMETER部件................................................................................................... 399.3      VOLTMETER的属性定义................................................................................................ 399.4      VOLTMETER的Active模型设置.................................................................................... 409.5      创建C++工程.................................................................................................................. 409.6      头文件............................................................................................................................ 409.7      创建模型及许可.............................................................................................................. 419.8      模型初始化..................................................................................................................... 419.9      组合图形/电气模型.......................................................................................................... 429.10        在原理图中画出........................................................................................................... 429.11     事件处理......................................................................................................................... 4310.      Active器件..................................................................................................................... 4410.1        简介............................................................................................................................ 4410.2        指示器举例 - 灯泡....................................................................................................... 44
0.   混合模式仿真分析原理
0.1      概述
如果将各种数字器件用它们内部电路来进行建模,则任何电路都可以被当成模拟电路来对待,如将一个TTL与非门分解为8个晶体管。通过这种方法可以得到非常精确的结果,并会告诉您7400门电路如何将1.8V的输入确切地转化成4.3V的输出。然而,如果对9个门组成的J-K触发器,再由4个触发器组成的4位计数器,你就会发现,再采用这种方法来建立较大的数字电路模型将成为一件折磨人的痛苦漫长经历。实际上,数字电路通常采用事件驱动方式来进行仿真分析。换句话说,只有当电路中某部分状态发生改变时,仿真器才工作。这与SPICE类型的仿真器有极大不同,后者以相对规律的时间间隔对整个电路进行重复分析。另外,事件驱动数字仿真器仅对三种逻辑感兴趣,即高、低与未定义,它并不关心真实波形究竟是如何上升或下降的。这两种因素意味着对给定电路的数字仿真分析将比相同电路的模拟仿真分析方式要快很多,但其代价是电路真实结果现象的近似处理,特别是无法针对非标准的电压逻辑输入与短时脉冲输入进行准确建模。最大的困难来自电路中包含不少的模拟与数字电路部分,即要求程序同时使用两种类型的仿真器,也就是所谓的混合模式仿真器。有多种方法可以实现这种需求,我们的解决方式是着眼于获取数字分析的最高效率,如果数字部分以模拟方式工作时将付出一些准确性的代价。例如,4000系列缓冲器在供电不足时,我们也不试图将之当成一个理想的放大器。我们的观点是,如果您对模拟响应感兴趣,您就应该使用一个完全意义上的模拟模型,如SPICE库中的适当的MOSFET管。总之,PROSPICE混合模式仿真分析按以下方式进行工作:l         分析电路中各网络,以便确定与其相连的模拟、数字或混合类型元件l         如果是模拟器件驱动数字输入,则加入模数转换ADC对象;反之亦然(这点说得稍简单了一些,扩展开来就是:如果是数字器件驱动模拟输入,则加入数模转换DAC对象—陈斌文注)l         之后,除ADC元件之外的对象在正常情况下会进行SPICE仿真过程,而ADC元件会监视其输入值,在它们认为状态发生改变时创建数字事件。这种处理会导致调用数字分析过程,并在以后某个时刻创建影响DAC输出的事件。根据这些事件而不是模拟信号发生器电压,DAC对象产生输出变化后,开始进行模拟仿真分析。当然,事情还不止这些,因为还需考虑所创建的异步数字事件(如数字时钟发生器)及防止模拟仿真器运行超过这些时间点等因素,但这些也是你应该理解的本质所在。关键在于,在数字部分中可能会产生大量的活动,这点与模拟仿真分析基本无关,除非它们实际上改变了模拟网络部分的电压值。您可能会在任意模拟部分电路分析过程中,同时处理整个包含几千个数字事件的微处理器模型。0.2      混合模式接口模型(ITFMOD)
为在PROSPICE中设计我们的混合模式仿真方案,我们需考虑应如何给定器件系列的模拟参数指标问题。这些指标包括:l         器件的输入输出阻抗l         器件的输入逻辑阈值l         输出的高低电压电平l         器件输出的上升下降时间可以说,指定TTL器件的的上述模拟参数指标是一件相当不爽的事。另外,至少对于初学者而言,在定义供电时还有一个巨大的障碍问题,就如下图所示的电路中,人们趋向于简化电路原理图而期望得到适宜的结果。当然,此处的问题在于有一个隐含的前提假设条件,即7400可从它的连接到VCC/GND的隐藏电源管脚获得5V供电。
可通过引入器件的ITFMOD属性来解决上述问题。它与MODEL属性非常类似,也提供一系列属性值的引用,也能激活网表编译器中的特定机制。以下为它的必要工作步骤:l         对于任意拥有ITFMOD属性的器件而言,在其取得网表结果过程中还会调用另外一个模型定义,它将指定ADC与DAC对象的控制参数,以及正负供电管脚名称。如上图中,U1:A的ITFMOD属性值为TTL,即ITFMOD = TTL。l         在得到了供电管脚名称后(即VCC,GND等),ISIS将创建一个特定的基本对象,并将其与供电管脚相连。ISIS按类似于对象的子模型或表单的方式来命名该对象,就如上图中,供电对象将取名为U1:A_#Pl         当PROSPICE仿真一个混合模式电路时,它将创建ADC与DAC对象,并认为它们隶属于与它们相连的对象。如上图中,将创建一个名为U1:A_DAC#0000的DAC对象,因为它提供U1:A的输出接口。
完成这些后,它还有一个巧妙的做法,即它会寻找拥有同一对象名称的供电接口对象,对于上例中的U1:A而言将可以找到U1:A_#P。然后它将发出指令让U1:A_DAC#0000对象从U1:A_#P对象中取得其属性值,该属性值继承自其原始模型的ITFMOD属性,因此,在上例中,DAC对象将根据所定义的TTL逻辑属性参数进行后续工作。l         各供电接口对象都包含一个电池组件,在接口模型定义中拥有VOLTAGE属性。TTL接口模型定义中指定VOLTAGE = 5V.
这意味着在上图电路中,在VCC与GND之间插入了一个5V电池,因为这是7400器件的供电管脚所要求的。l         电池的内部阻抗可通过RINT属性来访问,其缺省值为1MÙ。这意味着如果您将一个真实供电端赋值为VCC/VDD(可通过放置一个电源端或电压端来实现),则它将作用于所定义的电池内部阻抗属性所对应的电阻,因此,在仿真世界里,电池可以流过大电流。
如果要取消接口模型中的内部电池作用,可简单地置RINT=00.3      使用ITFMOD属性
现有的接口模型中已定义了如下的ITFMOD属性:TTL
 标准TTL(74系列)
 
TTLLS
 低压Schottky TTL(74LS系列)
 
TTLS
 标准Schottky TTL(74S系列)
 
TTLHC
 高速CMOS TTL(74HC系列)
 
TTLHCT
 输出TTL的高速CMOS TTL(74HCT系列)
 
CMOS
 4000系列CMOS
 
MMOS
 微处理器类型MOS电路
 
PLD
 PLD类型MOS电路
 因此,任意新的数字模型中,可对一个元件系列添加一个属性,如ITFMOD = TTL这些定义保存在文件ITFMOD.MDF中,该文件位于models目录下。在每个定义中,可包含ADC与DAC对象相关的部分或全部属性。即,可按如下方式给出:V+
 -
 正电管脚名称
 
V-
 -
 负电管脚名称
 
VOLTAGE
 5V
 标识缺省工作电压
 
RINT
 1mÙ
 表示内部电池阻抗,其值为0时将忽略电池作用
 1.   模型类型
1.1      概述
在Proteus VSM中,有两类基本模型:电气模型与图形模型。这也是以后模型划分的两个大类。1.1.1               电气模型
在传统意义上,这类模型与电路仿真分析有关。最常见的,画出模拟一个真实器件的电路图时就创建了它的电气模型,我们也叫它为原理模型。这些画在模型电路中的基本对象来自于内建于仿真器的库。这些基本对象不仅包括基本元件,如电阻、电容、二极管与晶体管等,还包括许多理想化元件,如电压控制电流源、理想运放等。Proteus VSM提供大量的基本对象,包括模拟与数字器件,以及本文所涉及到它们的详细信息。您也可以通过使用VSM API函数来编程实现电气模型。该接口提供模拟(SPICE)与数字(DSIM)模型。混合模式器件可通过实现这两种接口的同一模型的DLL来完成建模工作。另外,利用API实现的电气模型可以直接与图形模型交互,并可实现许多让人兴奋的功能与应用。第三方电气模型基于标准SPICE网表格式,这是事实上存在的,它们可以描述模拟器件模型,许多生产厂家现在都在他们的网站上提供其产品的SPICE模型。在Proteus VSM用户手册中说明了如何使用这些模型的方法。1.1.2               图形模型
在进行仿真分析时也可让您与模型元件进行交互,在这方面,Proteus VSM是独一无二的。直观例子包括7段LED管以及开关,但更复杂的元件如数字LCD显示屏也可以进行建模。简单器件的建模无需编程就可实现。系统提供了一种解决方案,它可以显示与可测量的节点电压或逻辑状态相应的给定数目的图形元素,我们称之为主动元件(有源元件?Active Components)。然而,使用VSM API能使系统的强大功能得到体现。它提供了一套接口,模型可以通过这些接口完成Windows中几乎所有的事情。它可以直接画到原理图上,或嵌入到一个弹出式菜单中,或同时做这两件事。更多的是,在同一个DLL中,可将复杂图形模型与电气模型同时实现,如数字LCD屏模型就是这样的一个典型例子。1.2      仿真基本元素
仿真基本元素是PROSPICE的内建对象,要么属于SPICE3F5模拟器件,要么属于DSIM数字器件。仿真基本元素可在一些器件模型中直接使用,如电阻、电容、二极管、晶体管等,或者可作为更复杂器件的构造模块,如原理模型的一部分。一个仿真基本元素由仿真器通过PRIMITIVE属性定义。如,一个NPN三极管可能按如下方式赋值:PRIMITIVE=ANALOG, NPN它告诉系统,晶体管将通过SPICE进行建模,在此过程中,使用NPN基本元素。类似地,一个二输入与非门可按如下方式:PRIMITIVE=DIGITAL,AND_2ISIS库部分中可用的基本元素可以在ASIMMDLS与DSIMMDLS库中找到,还有一些特别的基本元素在REALTIME.LIB库中,它们用于构造主动元件。绝大多数的基本元素模型都具备一些属性,它们可以通过Edit Component对话框窗口进行编辑,各模型还链接到本文档中相应的帮助主题。1.3      原理模型
针对复杂器件如运放、较大的TTL与CMOS器件进行建模时,最普通的方法是使用原理模型。原理模型是构造一个完全不使用基本元素的原理图,它对外的电气特性与待建模对象完全相同。请注意它不必是待建模IC的内部实现原理电路图,在通常情况下确实也不是。基于测试的目的,一个原理模型通常创建成为待建模对象的子电路,这使得在其父层电路中画出其测试电路成为可能,我们称这种策略为测试用例(Test Jig)。当证明模型的正确性后,可使用Model Compiler命令将之编译成为一个MDF(模型说明格式Model Description Format)文件。使用MODFILE属性指明相应的ISIS库与MDF文件之间的关联关系。如,OPAMP.lib中的741中,该属性赋值语句为:MODFILE=OA_BIP当电路中出现741时,ISIS将之用OA_BIP.MDF中所描述的电路进行替代。更另人叫绝的是,该模型还带有参数。父对象(此处为741)的VALUE属性用于为模型中的特定元素选择指定的属性值,这有赖于模型中的一个MAP ON脚本块,且一个模型文件可用于多个运放实例。更多的信息请参阅ISIS文档中的参数化电路(Parameterized Circuits)。在模拟与数字建模教程中,有针对如何创建新的原理模型的详细说明。1.4      SPICE模型
最初的Berkeley SPICE网表格式决定了它成为模拟器件模型的事实标准。大量生产厂家现在都针对其产品提供了可用的SPICE模型,PROSPICE中已有数千种这样的模型。您可以自己在ISIS库中直接使用任意的SPICE模型,在PROSPICE的使用SPICE模型(USING SPICE MODELS)文档中说明了如何使用。因为这些模型由SPICE内核处理,它们在系统中用其余的基本元素进行表示。典型地,它们可以按以下赋值语句方式使用:PRIMITIVE=ANALOG,SUBCKTSPICEMODEL=LM741/NSSPICELIB=NATOA其中,SPICEMODEL属性表示所使用的SPICE模型名称,而SPICELIB属性值为包含它的SML(SPICE模型库)文件名称。如果SPICE模型在ASCII形式的普通SPICE文件中,您需要使用SPICEFILE属性值。1.5      VSM模型
VSM模型与仿真基本元素相类似,不同之处在于VSM模型存在于DLL中,而不是在可执行的PROSPICE仿真器中。对于非常复杂的器件如微处理器而言,使用基于DLL的模型提供了另外一种建模途径。Proteus VSM是唯一还可实现这些模型的图形功能,亦即,不仅向仿真器提供器件的电气模型,而且包含其人机界面接口。该功能的应用场合是相当的令人眼花缭乱。The possibilities that this unleashes are pretty much mind boggling.本文大部分内容都在说明VSM API,即ISIS与PROSPICE与VSM模型通信的C++编程接口。另外,给出一个简单的模型例子,以便您能着手进行这项工作。一般地,一个VSM模型可以用以下赋值语句来实现:PRIMITIVE=DIGITAL,8052MODDLL=8051.DLL其中,PRIMITIVE属性值表示该器件将直接由PROSPICE直接进行分析,这样ISIS不会用MDF文件中的内容来替换它,而MODLL属性值表示包括8052模型的DLL文件名称。请注意,PRIMITIVE属性的第二个参数(在此为8052)将传递给DLL,使得一个DLL可以包括多个不同的器件。2.   模拟元件建模教程
2.1      简介
在本教程中,我们将针对继电器进行建模操作,它包含两个基本元素:一个继电器线圈与一个单端双掷开关(SPDT)。这两个基本元素在ISIS设备库中已经存在,其中RELAY:A为线圈对象,而RELAY:B为开关对象,其图形显示如下图所示
继电器操作很简单。当线圈两端电压低于Von时,继电器处于‘关闭’状态,则其开关的公共端(管脚3)与正常接通 (Normally Connected, NC)端(管脚4)相连。当线圈两端电压上升并超过Von后,继电器切换到‘接通’状态,其开关的公共端(管脚3)与正常断开(Normally Open, NO)端(管脚5)相连。在线圈两端电压降到低于Voff之前,继电器仍保持‘接通’状态,否则,继电器切换回到‘关闭’状态,其开关的公共端(管脚3)与正常接通 (Normally Connected, NC)端(管脚4)相连。因此,继电器表现出磁滞现象:切换点电压值相比,on比off要高。我们应当针对其等价电路的各个元素进行建模,即实现与元素本身具有同样的功能与瞬时现象的电路。您可以在目录Samples\Tutorials下找到AMODTUT.DSN,这是本教程的完全实现版本。2.2      设置测试用例
在开始对继电器建模之前,我们必须做的第一件事是设置一个测试环境,如下图所示:测试环境包括一个继电器线圈对象(来自DEVICE库的RELAY:A)与一个继电器开关对象(来自同一库中的RELAY:B)。线圈由一个Pwlin信号发生器驱动,而开关连接到一个10V电池与两个负载电阻。为了观察继电器的开关动作,将两个电压探针放置在其输出端,并与Pwlin信号发生器一起加入到模拟图表中。注意到Pwlin信号发生器的V(n)属性值的赋值集合,它可以产生一个简单的斜坡上升/保持/斜坡下降信号,这些值是随意选取的,如果不满足我们的需要,也可在以后进行修改。2.3      线圈元素建模
搭建测试环境后,我们现在可以开始对继电器的线圈进行建模工作。在开始之前,我们必须首先为线圈元素创建一个子模块,以便我们能放置其等价电路。可通过以下操作来完成这项任务:先用鼠标右键点击线圈对象,然后在线圈对象上点击鼠标左键,这样可调出Edit Component对话框。(经我尝试,7.1版本中支持直接双击调出Edit Component对话框,或者在已选择的情况下单击即可。该对话框的界面如下图所示。陈斌文注)
在Edit Component对话框中,编辑元件元素名称为RL1:A,置其值为COIL,勾选附加层次模块(Attach hierarchy module)选项,之后点击OK按钮;ISIS将为线圈对象创建一个子模块。当设计方案生成网络表之后,线圈对象将被替换为其子模块上的内容,而与线圈管脚相连的任何连接将成为该子模块上的相应相似名称的接口端子。新模块的名称将为与线圈的Reference属性值RL1:A,这样保证了它的唯一性,因为从来不会在同一设计中出现两个名为RL1:A的对象。类似地,子模块上的电路的名称将为COIL,亦即为线圈对象的VALUE属性值,并可以为本设计中所有值为“COIL”且其附加层次模块(Attach hierarchy module)选项被选中的那些对象所共用。为了查看与特定对象相关联的子模块(就象本电路中一样),您必须放大进入它,可以通过将鼠标指向该对象,然后按下CTRL+Z(放大)。现在就尝试吧。编辑窗口与概览窗口将被重画,并显示一个空白模块。若要退出,则按CTRL+X(退出)。(这种方法太不通用了,一般而言,CTRL+Z为撤销操作,而CTRL+Z为剪切操作,幸而7.1版本之后,软件修改了,您可以通过右键菜单进入/退出子模块。陈斌文注)现在开始处理我们的模型,进入上面所描述的线圈子模块,即其等价的电路图。下图即为我们将用的线圈全部电路图:
上图中所有对象均为PROSPICE基本元素,来自于ASIMMDLS库,该库可通过设备库选择对话框进行选择;不要使用编辑菜单中的Pick Device/Symbol菜单项,除非DEVICE库中的器件被错误放置时(the Pick Device/Symbol command on the Edit menu should not be used in case devices fromthe DEVICE library are picked by mistake)。可通过选择Terminals图标访问缺省终端,选择Script图标时将放置DEFINE与注释脚本。(看来写这个SDK的2000年确实离现在很远了,那时的软件咋这么难用的呢,说明书绕口得很,操作也不直观。幸亏现在的软件好用了,这部分您能看明白就看,看不明白,也没有关系,用用软件习惯了就好了。陈斌文注)2.4      线圈电路概述
线圈等价电路的目的在于取得线圈电压(其C1与C2两端之间的电压)以及相应的Von与Voff参数,根据线圈的’On’或’Off’状态来产生一个正或负的门信号输出(在其GATE+与GATE-端)。模型的输入端包括串联的电感L1与电阻R1。电感表示线圈的感应系数,而电阻表示线圈的阻抗。电感与电阻的值被设置为成对映射值(mapped values)。一个映射值由简单的属性名称与成对的’<’与‘>’符号组成,如,值*2表示器件的值被设置为映射值的2倍。当ISIS在进行仿真分析前,需将模型的网络表(即MDF文件)链接到设计网络表,这时,它会将映射值(即<>及其之间的名称)用相应名称属性的值进行代替。这种代替是基于字面上直接进行的,例如,如果BETA属性通过以下语句进行赋值:BETA=10+20则器件的映射值*2将被替换为:10+20*2字符串””直接用字符串”10+20”进行替换,因为ISIS并不会试图进行映射属性的编译解析。尽管该属性被赋予了一个表达式,该赋值语句还是有用的,因为所有的值与属性赋值语句都将作为PROSPICE的表达式,在使用之前会自动计算。但是,因为PROSPICE所使用的表达式计算器处理时,其乘法运算的优先级高于加法运算,PROSPICE将计算该表达式为10+(20*2)=50,或许这不是您所期望的。如果您担心会发生这样的错误,您应该声明器件值为()*2这在展开后成为(10+20)*2,其运算结果为正确的30*2=60。(唉,直接说与C语言中的宏一样不就OK了,可要知道,读者都是技术研发人员,啰哩吧嗦的 陈斌文注)映射属性值可以通过以下两种方式之一进行赋值:作为父器件的一个属性,或在等价的电路图中通过一个DEFINE或MAP ON脚本。如果一个属性同时实现这两种方式的赋值,则其在父器件中的方式拥有最高的优先级。这种优先策略很重要,因为它可以使得用户能修改那些缺省值。因此,在我们的模型中,我们通过DEFINE脚本指定电感及串联电阻的值分别为100mH与100欧姆。然后,该模型的用户可以指定其它值,其方法是在父器件的属性列表中添加一个赋值语句即可。模型的输出端包括一个电压控制开关VSW2、两个电池(GB1与GB2)以及一个串联电阻R4。当开关断开时,输出电压为-2V,该值由GB2与R4确定;当开关接通时,输出电压为+2V,由GB1确定(R4作为GB2的小电流开路支路)。但不幸的是,若PROSPICE的VSWITCH模型的输出阻抗在不低于Von时为Ron,而不高于Voff时为Roff,则在这些线性电压之间它是线性的。因此我们不能使用VSW2作为磁滞现象的直接模型,当然我们也不能自己去做这件事。这是由R2与VSW1并联后与R3组成的分压电路的任务。R1与R2的值被置为原来的1/10,且不能使电感与电阻过载。基于后一种原因,R2与R3均基于R1进行参数化(成比例)设置。开关的接通电压(通过VON属性指定)设置为0.1,因为这是当输入到线圈两端电压为时通过分压器后的输出电压。为使开关能在其“接通”“断开”状态之间“干净”地切换,其关断电压(通过VOFF属性指定)也设置为同样的值。现在,我们必须确定VSW1的接通阻抗,因为一旦线圈接通后(即VSW1与VSW2都接通),分压器上半部分的阻抗即为所求。假定线圈两端电压为线圈的值,则分压器的输出为0.1(开关的断开电压由VOFF属性值设置)。当然,用下图来解释效果会更好一些:
应用欧姆定律(或分压原理),由上图可知:
其中都是映射参数,R2与R3分别为9*(为线圈映射阻抗,指定为R1的值),且Ron为我们所要求的VSW1的未知值。如果您进行代数计算,可求得Ron为
这也是赋给VSW1的RON属性的表达式形式的值。等价电路通过与其父器件管脚同名的端口建立与父器件的连接关系,本例中为C1与C2。因为父器件中的管脚为无源类型,我们可以使用缺省端口;对于其它类型的管脚,您应该使用相应类型的端口。在对一个设计生成网络表时,如果ISIS发现某一个父器件的管脚与其子模块中的相应端口不相匹配,如,我们忘记连接它们,或者我们连接了但却设置了一个不匹配的类型,它就会报告一个警告。请注意ISIS对每个父器件的管脚仅检查那些至少有一个相似名称的端口,它不会报告其它那些名称不匹配的端口。如果您在子模块中有不止一个端口对象引用了父器件的同一个管脚,您应特别注意:ISIS不会处理其中的一个或更多的终端名称错误(因它只处理一个)。您经常会发现,你所要建模的元件或对象并不是您自己所创建的,它的管脚名称还是隐藏的(如本例中的继电器线圈)。现在问题来了,您如何知道父器件的管脚名称呢?答案是将鼠标移动到管脚末端,则在状态栏中会显示该管脚的相关信息,包括它的名称、数量与电气类型等。为了与继电器开关的等价电路相连接,我们应再次使用Default端口,但是这次,我们将该端口的网络名称设置成以星号(‘*’)开始。当ISIS创建仿真网络表时,所有同一父部件(本例中为RL1)的不同子模块中以星号开始的类似名称的网络对象都将连接在一起,并合并成为一个网络对象。这种功能将为不同子模块的对象之间的连接提供支持,尤其是在对多元素器件进行建模时有用。2.5      开关部件建模
完成线圈部件的建模工作后,开关部件的等价电路相应工作就显得比较直观了,其子模块如下图所示
与处理继电器线圈一样,在我们编辑处理开关的等价电路之前,我们应先编辑RELAY:B元件实例对象,设置其引用名称为RL1:B,设置其值为SWITCH,并选中其Attach Hierarchy Module复选框以创建其子模块以便处理其等价电路。为进入到等价电路,我们需要将鼠标移动到开关对象上,按下CTRL+Z,之后就可以按通常方式进入到等价电路。该电路包括两个电压控制开关(VSW3与VSW4),两个电容(C1与C2)以及4个二极管(D1~D4)。所有器件都来自ASIMMDLS库,它可通过Device Library Selector对话框进行选择;同样,当错误选择DEVICE中的器件时不要使用Edit菜单下的Pick Device/Symbol子菜单项。选择Terminals图标后,Default端口才可用。最后,选中Script图标后可以放置DEFINE脚本。该脚本可以在ISIS中编辑,也可在外部文本编辑器中进行编辑,请参阅ISIS手册中的Placing & Editing Scripts.2.6      开关电路概述
开关的控制管脚具有相反极性,这样在任一时刻只有一个开关处于接通状态。两个开关都具有相同的Von与Voff控制电压(由VON与VOFF属性指定),都为1V,即线圈模型所产生的控制电压的中点值。因此,每个开关都同时改变状态。两个开关的关断阻抗都设置为1T欧(由ROFF属性指定),而其接通阻抗都设置为映射值RON(由RON属性指定),通过DEFINE脚本缺省设置为10m欧。每个开关输出端与两个开关的公共端之间都一个10pF电容及两个背靠背二极管相连。后者没有任何作用,但在PROSPICE仿真引擎中,因其瞬态突变将会导致更多次的计算(模型的本质也就是这种效果)。如果没有这些二极管,您可能会找到VSWITCH模型来进行慢速开关,而PROSPICE在处理细节时将不会认为它是在进行开关动作;另一个解决方法是设置PROSPICE的NUMSTEPS仿真控制属性为一个较大的值,但这将导致PROSPICE以一个较小的时间步长进行整个仿真分析,从而使得仿真分析时间变长。对于继电器线圈模型而言,一方面,我们使用了Default端口,其名称与父器件的管脚名称相同,这样使得它可以与其父器件进行内部连接;另一方面,我们使用了名称以星号(‘*’)开头的端口,使得开关模型能与线圈模型拥有内部连接(详细说明请参阅前面章节内容)。2.7      测试并编译模型
为了测试模型,我们可以退出开关子模块(可单击Design菜单下的Exit To Parent子菜单,也可使用快捷键CTRL+X),然后仿真我们的测试电路(可单击Graph菜单下的Simulate子菜单,也可使用快捷键-空格)我们的等价电路第一次工作的时候不要惊讶。可清楚地看到缺省的滞后效果值5V(Von)与2V(Voff)。然而,如果仿真分析的结果不是我们所期望的,我们可以回到线圈或开关子模块,编辑其等价电路,返回再次仿真分析。该仿真-编辑-仿真循环可以进行多次,这样可以使得等价电路工作。更进一步,如果模型并不工作,并且我们还找不到原因,那么我们可以进入到子模块中,加上一些探针(如,在线圈模型的输出端,检查其是否为正确的极性,或查看*GATE端口所产生的电压水平值),然后返回到主模块中,将这些探针加入到图表中,具体方法是通过Graph菜单下的Add Trace子菜单,甚至您可以在子模块中快速添加探针,具体方法为:先将鼠标移动到它们上面,使其出现红色包络虚矩形框,然后退出,调用Add Trace命令,并确认Quick Add?消息框。模型工作正常后,您可以进入到子模块中,移除这些探针,它们的存在,不仅仅是多余的,而且会导致使用该模型后的仿真速度变慢。完成继电器建模及测试工作后,我们现在必须分别将线圈与开关电路的网络表保存到外部模型文件(MDF)中。为完成这项工作,我们需要进入到相应的子模块中,调用Tools菜单下的Model Compiler命令。该命令将弹出一个文件选择对话框,让您选择模型文件名称,缺省名称为设计方案的名称,只不过其后缀名为mdf,文件所在路径由Module Path字段所指定(由System菜单下的Set Paths子菜单调用)。Module Path目录也是ISIS查找定位器件的MODFILE属性相应的模型文件时的一部分(ISIS将首先查找当前目录,但一般而言,这不是你在测试时所期望的) 。我们可以将我们的线圈模型命名为RLY_COIL.MDF,将开关模型命名为RLY_SW.MDF。对于各子模块,在文件选择对话框中FileName编辑框中录入相应的文件名称,然后点击OK按钮。2.8      在其它设计中使用模型
现在,我们已经创建了模型。在后续设计中,无论何时,如果我们希望建立继电器线圈的模型,我们所需要做的就是,编辑元件实例对象,并在其属性列表中添加以下属性赋值语句:MODFILE=RLY_COIL.MDF我们也有可能还想设置相应的电感值、串联电阻值、相应的电压值,这时,我们只需再按以下形式添加相应的属性赋值语句:LC=120mRC=50VON=8VOFF=5其中,MODFILE=这条赋值语句告诉ISIS这样的信息:当创建仿真网络表时,应当删除该元件,而加入RLY_COIL.MDF模型文件中的内容。该过程也被称为网表链接,因为它涉及到ISIS将模型文件链接到设计方案的仿真网络表中。它包括以下三个关键步骤:1.       与线圈元件相连的所有连接都到模型文件中的相应名称对应的网表对象。2.       模型文件网络表中的所有连接中,若名称以星号开始,则它将连接到其它子模块。在本例中,因为继电器是一个多部件器件,它的线圈与开关部件都为同一器件(RL1)的一部分。3.       模型文件网络表中的所有映射属性值都将用以前所描述的内容进行替代。正如我们所说明的那样,当一个属性同时在元件实例对象(即使用模型的器件)中与相应的模型文件网络表中被赋值,将使用前者。在建立开关模型时也是这样。需要编辑实例对象,对其MODFILE属性赋值,如下所示:MODFILE=RLY_SW.MDF对于线圈而言,如果您希望覆盖模型的缺省值,您可以使用更多的属性赋值语句。如,您可以使用以下语句完成不同的接通阻抗属性的设置:RON=50m这种赋值语句对于一次建模比较好,但用起来有点烦人。况且,您可能会经常忘记给定模型都支持哪些参数,这些参数的名称是什么,等等。因此,我们的最后行动是向库中的RELAY:A(继电器线圈库名称)与RELAY:B(继电器开关库名称)器件添加MODFILE及其它属性赋值语句。这样,只要从库中选取这些器件,放置到电路图中,则新创建的对象实例将自动标注相应的属性及其值。为了向继电器线圈库中添加属性赋值语句,进入到主模块中,选中线圈部件对象(RL1:A),调用Edit菜单下的Make Device命令,然后点击Edit Properties按钮。该对话框窗口中的下拉框列出了该器件的所有缺省属性,包括原理图中该器件中已有的赋值语句。ISIS已经知道MODFILE的含义,因为它在LISA中已是一个标准属性,但LC、RC、VON、VOFF等是我们所设置的继电器线圈的专用属性,它会将之作为字符串对待,除非还有一些其它信息。如,LC属性的设置可按以下方式进行改变:描述说明为线圈电导(Coil Inductance)类型为浮点型,表明期望浮点数限制为正,非零,表示不允许设置为负值或0可对其它参数设置类似的信息,这对将来本模型的用户的应用有好处,他们可以清楚应当输入什么,以及什么是缺省值。对于继电器开关部件的处理方式是一样的。最后,在退出ISIS之前,经常将您的设计备份到一个备份目录中,以防您丢失您的模型文件(MDF)或后来才发现您的模型中的错误。3.   数字元件建模教程
3.1      简介
在本教程中,我们将对74123TTL单稳多谐振荡器进行建模。下一节将简要介绍该器件,如果您不熟悉它,可以仔细阅读下一节。实际上,我们将要对三个器件进行建模:74123(标准TTL),74LS123(低功耗Shottky TTL)及74HC123(高速CMOS TTL)。所有这三个器件都有同样的功能,其不同之处在于它们的过渡特性,所以它们都可以采用同一个等价电路进行建模。该等价电路只使用数字基本元件对象,它们都来自于DSIMMDLS库,其整体特性、功能与瞬态响应都与相应的74XX123器件相一致。名称74XX123表示三个器件中的一个,我们将通过这个通用名称来指代相应的模型。我们将通过指定等价电路的映射值来对三种器件不同的时间特性进行建模。ISIS之后在使用该模型时将会映射得到正确的时间值,该值将由使用该模型的Value字段(或器件的VALUE属性)来决定。本建模的全部例子位于Samples\Tutorials目录下的DMODTUT1.DSN工程中。3.2      74123单稳多谐振荡器
74123 TTL单稳多谐振荡器包括两个独立的单稳多谐振荡器。每个单稳有一个负脉冲触发器(A)、一个正脉冲触发器(B)、一个过载清零(MR)、两个时钟输入(CX与CX/RX)及互补输出(Q与/Q)。在一个触发器输入端给定一个适当的触发条件,则输出端将产生一个方波脉冲,其宽度由连接到设备的CX与CX/RX管脚的阻容网络所决定。因为在建模时,我们不会使用该网络,我们将不会进一步讨论这些管脚及其功能。器件及其真值表如下图所示:
请注意,当A与B都有输入时,在MR输入端的一个上升沿可触发单稳,74123也是一个可重触发的单稳:当一个输出脉冲开始后,该脉冲可能会因为器件的再次触发而延长,如下图所示:
单稳首先由A端的一个下降沿触发(此时MR与B端都为高电平),通常这会在输出Q端产生一个脉冲,如QA波形所示。然而,B端的一个上升沿(MR为高而A为低)将再次触发该单稳,如果此时没有产生输出脉冲的话,则它会在Q输出端产生一个脉冲,如图中QB波形所示。如果此时已经有一个输出脉冲,则两次触发产生的输出脉冲将叠加,形成图示中的QAB波形。3.3      设置测试环境
在开始设计单稳的模型之前,我们要做的第一件事是设计测试电路,如下图所示:该测试电路中包括一个我们将建模的器件对象(U1:A,一个74123单稳)、支持测试所需的必要电路(在此,我们所需要的仅仅是三个数字信号发生器及两个电压探针)及一个可以显示测试结果的数字图表。如截图所示,我们已经命名数字信号发生器,并添加了相应的探针,因为到此为止,我们还没有做任何测试,所以图表中还没有数据。信号发生的的属性(INIT, WIDTH等)都是任意设置的:在A、B端将产生一系列的脉冲,而在MR端开始不起作用,而在31us之后,MR有效。如果这些不满足要求,我们可以找到它,然后简单地修改信号发生器的属性值,产生相应的输出脉冲,或者在适当的时候复位一下。现在,我们设置好了测试环境,可以真正地动手对我们的目标器件进行建模工作。3.4      进入等价电路
首先,我们需要对74LS123器件创建一个子模块,以便放置等价电路。具体过程如下:通过鼠标右键选中74LS123,然后用鼠标左键点击它以进行编辑工作。在Edit Component对话框中,编辑器件名称为U1:A,选中Attach Hierarchy Module复选框,然后单击OK按钮;则ISIS将创建74LS123的子模块。当设计方案生成网络表时,该74LS123将由其子模块上的所有电路内容代替,而74LS123的所有连接关系也将为其子模块上的相应名称端口所代替。新的模块的名称将为U1:A,与74LS123的Reference相一致,这也确保它的唯一性(因为在一个电路中不会存在两个名为U1:A的器件)。类似地,子模块上的电路名称将为74LS123,它与74LS123器件的值相同,也是设计中所有值为”74LS123”及其Attach Hierarchy Module复选框被选中的器件的共用部分,在理论上来说,这才是真正的74LS123器件。若希望查看某器件的子模块及其电路,您必须进入到相应界面,您可以通过用鼠标选中该对象,然后按下CTRL+Z。现在就做吧。编辑窗口与预览窗口将重新绘制,并显示一个空的模块。要退出的话,按CTRL+X就可以了。因此,若要开始我们的建模工作,先进入74LS123的子模块。下图所示为我们将用作为我们的单稳的全部等价电路:
直接进入该电路。其中AND_3与PULSE器件都是从DSIMMDLS库中所选取的数字基本器件,可通过Device Library Selector对话框进行选择,也可以通过Edit菜单下的Pick Device/Symbol菜单项。Input与Output端口可通过选中Terminals图标后处理。最后DEFINE与MAP ON脚本通过选择Script图标进行放置,它可以在ISIS内进行编辑,也可用外部文本编辑器进行编辑,具体请参阅ISIS手册中的Placing & Editing Scripts。3.5      等价电路概述
后续小节将解释等价电路的工作原理,包括其功能与瞬态响应,还包括使用等价电路进行数字器件建模时的一些常见陷阱的说明。3.5.1               功能建模
电路包括一个可产生触发时钟的AND_3门器件,一个脉冲基本器件,它的主要任务是处理脉冲与再触发。这些器件都是来自DSIMMDLS库中的数字基本器件。该电路与其父器件的管脚相连,即其Input与Output端口与父器件中相同名称的管脚相连(如A、B、Q等)。互补输出端/Q通过编辑端口并置其名称为$Q$来表示,可参阅ISIS手册中Making a Single Element Device部分,其中有关于如何使用$符号来完成上横线的表示。在我们的例子中,我们知道所有的父器件的管脚名称,因为它们都是可见的。然而,如果我们建模的目标器件不满足这个条件,即其中包含隐藏管脚,则我们可以通过选中父器件,然后单击我们所关心的管脚左侧末端,则其相应信息就会显示出来。器件的Edit Component对话框将按平常方式进行显示,但在其右侧端是管脚名称的明细、数值下标及电气类型(还有器件的库名称)。取得备注信息后,可以按CANCEL按钮退出对话框。为使A的输入反相,可通过在AND_3中使用INVERT这个数字基本元素,而不必使用一个单独的反相器器件。在器件模型中的属性赋值语句可以使D0输入反相,因此会将输入端置为低。这种方法简化了电路,并可提高仿真分析的速度。在等价电路中无法判断连接到父器件的RX/CX与CX输入端的值,因此也无法使用这些器件来确定模型中的输出脉冲宽度 (当然,也可将模型创建为混合模式模型) 。实际上,我们将要求模型用户在父器件的属性列表中指定一个时间常数值。当对一个设计生成网络表时,如果ISIS找到任何一个父器件的管脚与子模块的端口不匹配,则它会产生一个警告(如我们忘记放置它们,或录错了名称)。注意,对于父器件的每个管脚,ISIS只检查那些至少有一个相似名称的端口,它不会报告其它与父器件管脚名称不匹配的端口。尤其是,当不止一个端口引用了父器件的同一个管脚,请小心注意:这种错误(在使用MR时,名称CLR已经被使用过了)不会被报告。为避免我们的等价电路中出现网络表中的警告信息,我们将放置两个端口,将其命名为RX/CX及CX,并将它们接地(将它们悬空也会正常工作)。完成功能模型,我们最后需要做的是编辑PULSE基本元素,将其属性赋值,即RETRIGGER=TRUE。在缺省情况下,如果输出脉冲已经生成,则在时钟输入时,PULSE基本元素将忽略过渡过程,然而,将其REGRIGGER属性进行赋值为TRUE,将导致基本元素在CLK输入时,会将任何已有的输出脉冲扩展为一个新的过渡过程。3.5.2               瞬态模型
创建功能模型之后,我们现在需要添加一些时间特性来正确处理模型的过渡过程,我们不会对保持时间建模。我们将要建模的时间参数包括时钟 (即,A、B或MR的一个合理边缘)对输出Q与/Q的延迟,与MR到输出Q与/Q的延迟。PULSE基本元素支持直接这些模型属性,因此,不需要再针对输出进行别的技术性处理(如采用DELAY基本元素)。对PULSE基本元素的时间属性的赋值操作可以通过编辑器件,在Edit Component对话框的Properties编辑框中录入相应的赋值语句。我们需要赋值的属性名称在PULSE基本元素的文档中列出。我们可以按字面意思(即逐字替代)方式进行赋值,例如,如果我们对74LS123(不是74123或74HC123)进行建模,我们可能会录入以下赋值语句:TDCQ=22nTDCQB=32nTDRQ=20nTDRQB=28n这对于74LS123来说,会正常工作,但有两个缺点。第一个缺点在于该模型不能应用于74123或74HC123,这些模型可能会有正确的功能表现,但其时间特性却不对。第二个缺点在于模型的用户无法在父器件(使用这些模型的器件)中修改这些缺省的时间值(由TGQ与TGQB属性指定),也无法初始化这些值(由INIT属性指定)。这两个缺点的解决方法是使用映射值而不是直接使用常量值进行属性的赋值操作。一个映射值是匹配的<>符号及其括起来的简单属性名称。例如,赋值语句:TDCQ=*2表明属性TDCQ赋值为映射值的2倍。当ISIS在运行仿真前将模型的网络表(即MDF文件)链接到主模块的网络表中时,它会将映射值(即<>符号及其包围的属性名称)用其属性的值来代替。这种代替是按字面(逐字替代)方式进行的,例如,如果属性TD_CLK_TO_Q按如下方式进行赋值:TD_CLK_TO_Q=10n+20n则属性赋值语句TDCQ=*2将被替换为TDCQ=10n+20n*2其中,字符串””替换为字符串”10n+20n”,ISIS不会试图解析赋给映射属性的值。尽管TDCQ属性由一个表达式进行赋值,该赋值仍会工作,因为所有的属性赋值都会被假定是一个DSIM的表达式,在使用之前会自动计算。然后,因为DSIM的计算策略中,乘法操作比加法操作的优先级要高,所以DSIM将会处理该表达式为10n+(20n*2)=50n,并不是所期望的结果!如果您担心发生这种错误,您可以按如下方式声明初始化赋值语句:TDCQ=()*2在参数映射后,该表达式将扩展为(10n+20n)*2,其结果为正确的30n*2=60n。一般地,如果您既是模型的设计者,又是该模型的唯一使用者(也就是说,您设计给您自己用),则上述问题也就不成其为一个问题。然而,如果您觉得这样的问题确实会发生,您就可以采用防御性的建模方法。映射值的属性可以采用以下两种方式之一进行赋值:作为父器件的一个属性,或者在等价电路中通过DEFINE或MAP ON脚本。如果一个属性同时采用了这两种赋值方法,由在父器件中的赋值操作具有最高优先级。这种优先策略是很重要的,可以使得用户能够修改缺省值。例如,我们可以在子模块的DEFINE脚本中的一条属性赋值语句定义一个缺省值,用户还可以在父器件的属性列表中通过指定一个其它的值来达到修改该赋值语句的效果。因此,在我们的等价电路中,我们对所有的PULSE基本元素模型赋予了映射值:TDCQ=TDCQB=TDRQ=TDRQB=TGQ=TGQB=INIT=这些映射时间值通过MAP ON脚本进行赋值:*MAP ON VALUE74123 : TDCQ=19n, TDCQB=27n, TDRQ=18n, TDRQB=30n74LS123 : TDCQ=22n, TDCQB=32n, TDRQ=20n, TDRQB=28n74HC123 : TDCQ=29n, TDCQB=29n, TDRQ=31n, TDRQB=31nMAP ON脚本将比较关键字MAP ON后的属性名称与冒号左边的字符串(不区分大小)。发现匹配后,取得冒号右边直至行尾的所有属性赋值语句。如果您有更多的属性赋值语句,不能在一行中写完,可以利用续行符’\’继续在下一行录入属性赋值语句。*MAP ON VALUE74123 : TDCQ=19n, TDCQB=27n, TDRQ=18n, \TDRQB=30n74LS123 : TDCQ=22n, ...如果冒号左边没有与相应的命名属性匹配的字符串,则没有属性赋值语句会起作用。这种情况下,最可能的结果是网络表链接器会报告一个映射值无法被映射,因为未定义相关的属性。居然还有需要这种效果的情况,比如希望这些映射值必须由用户在父器件中进行赋值。如果您希望在MAP ON脚本中添加一个缺省值,您可以在冒号左边使用DEFAULT关键字。如果相应名称属性无法与任何其它冒号左侧名称相匹配,则将采用在DEFAULT关键字右边的赋值语句。在我们的等价电路中,MAP ON脚本将按如下方式进行处理:如果VALUE属性(由父器件的Edit Component对话框的Value字段定义,或直接对VALUE属性进行赋值)的值为字符串”74123”,则属性TDCQ将赋值为19n,等等;如果VALUE属性的值为字符串”74LS123”,则属性TDCQ将赋值为22n,等等;最后,如果VALUE属性的值为字符串”74HC123”,则属性TDCQ将赋值为29n,等等。正如我们所说过的那样,74XX123单稳的脉冲宽度由连接到RX/CX与CX管脚的阻容网络决定,因为我们无法确定与这些管脚相连接的器件的连接结构形式,也无法确定其值,我们就忽略这些,要求用户为输出脉冲的宽度指定一个时间常数值。在PULSE基本元素模型中,输出脉冲宽度由WIDTH属性指定,因此我们用映射值作为时间常数对其赋值。因为所有的74XX123器件在其CX/RX与CX输入端悬空时,其缺省的输出脉冲宽度都在30ns左右,我们可以通过DEFINE脚本指定该值为TC属性的缺省值。(或者,我们可以在MAP ON脚本中为每种类型的赋值语句中添加该赋值语句,但这要求额外的录入工作)在缺省情况下,所有的时间参数都受仿真控制属性TDSCALE的控制进行比例缩放。如果该属性值被设置为关键字RANDOM,则时间参数将按一个在仿真控制属性TTDLOWER与TDUPPER之间的随机数进行缩放。如果需要对主要的时间属性如TDCQ、TDRQ等实现这种效果,作为模型的用户,我们应当有充分理由希望指定TC为10u,因为它会使得输出脉冲也为10us宽。我们可以通过使用NOSCALE属性来达到这个目的。该属性对所有DSIM基本元素都有作用(这也是为什么您在PULSE器件的文档找不到它的原因),允许您指定某个属性不会受到缺省缩放因子的影响。因此,我们为PULSE器件添加下面一行:NOSCALE=WIDTH我们还对PULSE器件的TGQ、TGQB、INIT属性进行了赋值。我们自己其实并不对这些属性感兴趣,我们仅仅将它们作为映射值,以便使得用户可以访问它们。然而,正如我们所曾经声明过的那样,如果我们和用户都不提供这些映射值的缺省值,则网络表链接器在将模型网络表链接到主设计网络表的时候将报告一个错误。因此我们应当赋予它们什么样的缺省值呢?我们可以给INIT赋值为0——Q初始化为低,QB为高。这不是没有理由的,实际上与模型中该属性的缺省值一致。TGQ与TGQB则要复杂一些,因为模型的这些属性的缺省值有赖于其它时间参数(实际上,TGQ为TDCQ的一半,而TGQB为TDCQB的一半)。一个解决方法就是在MAP ON脚本中定义它们为适用于逻辑关心的值。我们将INIT、TGQ与TGQB属性值中包括一个问号(问号前后的任意空格及问号后的任意字符都将被忽略)INIT=?TGQ=?TGQB=?问号将告诉DSIM使用模型中该属性的缺省值。因此,网络表链接器将替换映射值为INIT属性中的值,它在DEFINE脚本中定义为”?”。DSIM看见问号后,忽略所有的赋值语句,然后使用模型的缺省值——在此,INIT属性值为0,或TDCQ(B)的一半作为TGQ(B)属性的缺省值。请注意,模型关心首先计算TDCQ,然后才是TGQ的缺省值,没有必要要求属性赋值语句来完成这件事。3.6      测试与编译模型
为了测试模型,我们可以退出开关子模块(可单击Design菜单下的Exit To Parent子菜单,也可使用快捷键CTRL+X),然后仿真我们的测试电路(可单击Graph菜单下的Simulate子菜单,也可使用快捷键-空格)我们的等价电路第一次工作的时候不要惊讶。然而,如果仿真分析的结果不是我们所期望的,我们可以回到子模块,编辑其等价电路,返回再次仿真分析。该仿真-编辑-仿真循环可以进行多次,这样可以使得等价电路工作。更进一步,如果模型并不工作,并且我们还找不到原因,那么我们可以进入到子模块中,加上一些探针(如,在AND_3门的输出端查看PULSE基本元素是否已有时钟输入),然后返回到主模块中,将这些探针加入到图表中,具体方法是通过Graph菜单下的Add Trace子菜单,甚至您可以在子模块中快速添加探针,具体方法为:先将鼠标移动到它们上面,使其出现红色包络虚矩形框,然后退出,调用Add Trace命令,并确认Quick Add?消息框。模型工作正常后,您可以进入到子模块中,移除这些探针,它们的存在,不仅仅是多余的,而且会导致使用该模型后的仿真速度变慢。如果我们希望完全测试我们的模型,我们可能会需要不仅仅测试74LS123,还需要测试其它74XX123器件:74123与74HC123。因为这些器件可由父器件通过MAP ON脚本设置Value字段完成时间参数设置,所以测试这些器件的最简单的方法是编辑现有的74LS123,然后将其Value字段修改为74123或74HC123。如果您这样做了,您会发现网络表编译错误,为什么呢?原因在于器件的子模块的等价电路名称与其父器件的Value字段中的值一样,改变Value字段的值,也就相应地改变了电路名称。若想验证这点,您可以将Value字段值修改为74HC123,进入到子模块中,您会发现全是空白,因为还没有74HC123电路。返回主模块,将Value字段值修改为74LS123,进入到子模块中,等价电路又显示出来了(未使用的电路是保存在设计工程中,即便是保存到硬盘中也是这样,当然,如果您使用Edit菜单中的Tidy命令,则将会删除它们)。因此,应如何测试其它模型呢?答案是玩个小把戏,骗骗计算机:在Value字段中使用VALUE属性。器件子模块中电路的名称将始终与Value字段中的值保持一致。然而,如果该属性在Value字段中未定义,在网络表中VALUE属性是用任意的VALUE=属性赋值语句来获得其值(在Edit Component对话框中的Properties字段中)。因此,如果要测试74HC123,选中器件,左键点击它,在Properties字段中录入赋值语句:VALUE=74HC123单击OK按钮。您现在可以再次仿真模型,它会把74HC123作为它的父器件。完成继电器建模及测试工作后,我们现在必须分别网络表保存到外部模型文件(MDF)中。为完成这项工作,我们需要进入到相应的子模块中,调用Tools菜单下的Model Compiler命令。该命令将弹出一个文件选择对话框,让您选择模型文件名称,缺省名称为设计方案的名称,只不过其后缀名为mdf,文件所在路径由Module Path字段所指定(由System菜单下的Set Paths子菜单调用)。Module Path目录也是ISIS查找定位器件的MODFILE属性相应的模型文件时的一部分(ISIS将首先查找当前目录,但一般而言,这不是你在测试时所期望的) 。我们可以将我们的线圈模型命名为74XX123.MDF。在FileName编辑框中录入相应的文件名称,然后点击OK按钮。3.7      在其它设计中使用模型
现在,我们已经创建了模型。在后续设计中,无论何时,如果我们希望建立74XX123 TTL的模型,我们所需要做的就是,编辑元件实例对象,并在其属性列表中添加以下属性赋值语句:MODFILE=74XX123.MDF我们也有可能还想设置相应的脉冲宽度,这时,我们只需再添加一个以下形式的属性赋值语句:TC=500n其中,MODFILE=这条赋值语句告诉ISIS这样的信息:当创建仿真网络表时,应当删除该元件,而加入74XX123.MDF模型文件中的内容。该过程也被称为网表链接,因为它涉及到ISIS将模型文件链接到设计方案的仿真网络表中。它包括以下两个关键步骤:1.       与单稳元件相连的所有连接都到模型文件中的相应名称对应的网表对象。2.       模型文件网络表中的所有映射属性值都将用以前所描述的内容进行替代。正如我们所说明的那样,当一个属性同时在元件实例对象(即使用模型的器件)中与相应的模型文件网络表中被赋值,将使用前者。因此,对于上面的TC属性赋值语句,等价电路中的WIDTH=将扩展为WIDTH=200n(DSIM能正确解析后缀表示法)我们最后需要做的事是将MODFILE与TC属性赋值语句加入到相应库中的123器件中(库中有名称123,而74、74LS或74HC等前缀是当从库中选取123元件后才添加的)。然后当123器件从库中选取并放置到图中时,将自动创建一个新的器件实例,并赋予其相应的属性值。为了向继电器线圈库中添加属性赋值语句,进入到主模块中,选中74LS123器件,调用Edit菜单下的Make Device命令,然后点击Edit Properties按钮。该对话框窗口中的下拉框中,您将会看到两个属性MODFILE与TC,因为它们已在器件中赋值。首先点击MODFILE, ISIS已经知道其含义,因为它在LISA中已是一个标准属性,您将会发现,它被声明为只读的,正常情况下不可见。现在单击TC,这是一个新的属性,它专属于74HC123。其类型缺省为字符串,但因为我们知道它是一个时间常数,故可做以下改变:l         描述说明为单稳时间常数l         类型为浮点型,表明期望浮点数l         限制为正,非零,表示不允许设置为负值或0点击OK以关闭Edit Device Properites对话框,然后再次点击OK按钮以将该器件保存到您的用户器件库(或其它库)中。描述说明与范围的改变效果将在您下一次编辑74HC123类型器件时显现。本方法的强大之处在于,它可以使您将您的模型参数作为库的部分定义进行文档化。最后,在退出ISIS之前,经常将您的设计备份到一个备份目录中,以防您丢失您的模型文件(MDF)或后来才发现您的模型中的错误。4.   混合模式建模教程
4.1      简介
在本教程中,我们将针对555计时器进行建模。尽管这一部分可以完全采用模块器件进行建模,但我们自己的体验表明一个混合模式模型进行仿真时将速度快4倍。555器件也是一个学习建模的好例子,它需要使用ADC与DAC基本元素。简便起见,我们假定您已掌握基本的建模技巧,如设置测试环境,包括适当的探针与图表。我们不建议任何人去创建一个混合模型,除非他们已经熟练掌握如何创建一个纯的模拟模型与纯的数字模型。 4.2      设置测试环境
下图所示为555模型的一个合适的测试环境。实际上,555有两种工作模式(单稳态与非稳态),因此,没有必要设计一个电路能测试这两种工作模式。然而,基于我们此处目的,标准555振荡电路就足够了。
因为该电路为一个自激振荡器,因此不需要信号发生器作为激励源。需要特别注意的只有一个,即电容C1必须为初始放电状态,否则PROSPICE将进行注定会失败的尝试:寻找一个初始稳定条件。程序将强制设置电容未接地节点的属性为零初始条件。图表所示为555开始振荡时的波形。 4.3      555的结构示意图
555的内部结构示意图如下图所示:
其中,主要包括一个阶梯电阻,两个比较器,一个RS翻转器及放电开关。阶梯电阻定义了1/3与2/3的比较电压基准,它与阈值电压(TH)及触发电压(TR)进行比较。比较器输出将流入RS翻转器,后者可由RESET管脚复位到低电平。反相器的输入为输出缓冲与通过一个集电极开路三极管的接地放电管脚。 4.4      等价电路
将555的结构图转化为等价电路图就可以建立起555的工作模型,如下图所示:
需注意以下几点:1.       ADC与DAC器件与直接放入模型中,以便精确控制仿真器进行模拟信号与数字信号的转换。这些器件有4个隐藏管脚V+与V-,通过V+与V-属性分别与VCC与GND相连。这允许模型无需明确指明供电方式即可实现相应功能。2.       在模型中,输出端Q没有转换成模拟信号。PROSPICE在发现Q端连接到模拟器件时,将自动创建一个合适的DAC器件。否则(即555作为数字电路的时钟),则不需要创建接口对象,仿真器也不需要计算其模拟特性(如输出的上升/下降时间)
输出的模拟属性由ITFMOD属性决定。3.       放电管脚由一个DAC器件进行建模, 其RHI值非常大,而V+值为0
在此,没有必要使用一个三极管,因为它会导致计算量显著增加4.       模型的时间精度由ADC的TTOL属性决定。它将强迫仿真在开关点后的TTOL时间段内完成。如果没有指定TTOL,或其值为0,则时间精度由正常的仿真器的时间步长控制所决定。这样可以大幅提高仿真速度,但代价是时间偏差。
*DEFINE脚本给TTOL赋的缺省值为0,它可以在父器件中进行修改。5.       555的比较器由SPICE的开关器件建模,通过设置,它具有一点滞环特性。这点防止了后续的ADC得到中间状态的输出电压后变换输出未定义的逻辑状态给后续的数字电路。6.       触发翻转器通过门电路建模,其余管脚也用这种方式作为门电路的输入而替代了其它输入。此处的极性与分块结构图中有一点不同,但结果是一样的。7.       剩下的管脚通过一个ADC提供接口,这样,当未连接时它可被模型处理为上拉为高,其阈值电压大约为1V,与供电电压无关8.       555的父器件取得ITFMOD属性,它定义了输出接口特性。如果它连接到模拟部分。设置VOLTAGE为0意味着555在工作前必须供电(TTL与CMOS部分配置为自供电方式,因为它们的电源管脚不可见)请注意ITFMOD仅仅是一个普通的模型定义,它对于555来说,可以在本地定义为原理模型的一部分。然而,您应当选择为它选择一个不会被其它模型使用的名称。 4.5      使用模型
使用混合模式模型的过程与使用纯模拟模型或纯数字模型的过程极其相似。在这个例子中,父器件将需要两个属性定义:一个是MODFILE,一个是时间公差。在正常情况下,您可以将MODFILE设置为一个隐藏属性,而将TTOL属性开放给用户以便他能进行编辑。更多有关属性的定义,在ISIS相关文档中有说明。5.   VSM建模教程
5.1      简介
在本节中,我们将进行一个简单的VSM(即基于DLL)的建模过程:READOUT对象,将之加入到ACTIVE.LIB库中,并将之设计成为一个仪表基类,由它可派生出不同的AMMETER与VOLTMETER对象。在进行本节工作之前,您应当非常熟悉在PROSPICE中进行传统的模拟与数字建模的原理与技术,并且掌握如何在ISIS中使用Active器件以向模型中添加图形功能。当然,还有一个要求就是您具备一些C++编程的能力。READOUT模型是为使用RTVPROBE或RTIPROBE基本元素的电气功能而设计的,因此只在代码中需要实现IACTIVEMODEL接口。探针对象将处理实际的测量工作,而将一个READOUT对象同时当成电压计与电流计的方式更具优势。5.2      创建VOLTMETER部件
创建READOUT模型的第一部工作是在ISIS中制作库部件,并可将之用在原理图中。简单起见,在此我们将只制作一个简单的电压计。
此处使用了三个基本的图形对象:l         作为ISIS的一个纯静态库部件,器件符号本身应与其实际情况相同,将确定该电压计在电路未仿真分析时应如何展现;l         其它两个对象为Active器件图元符号。READOUT_0表示电压计的非工作状态,而READOUT_1则提供了VSM模型代码画出实际数值的基础。5.3      VOLTMETER的属性定义
通过Make Symbol命令可以制作上面两个图元符号,然后画出器件的图形样式,下一步就是制作实际的VOLTMETER器件。特别地,需要定义以下属性:名称
 描述
 数据类型
 编辑模式
 缺省值
 
LOAD
 Load Resistance
 FLOAT (PNZ)
 NORMAL
 100M
 
SCALE
 Scale Multiplier
 FLOAT (PNZ)
 HIDDEN
 1.0
 
PRIMITIVE
 Primitive Type
 STRING
 HIDDEN
 ANALOG,RTVPROBE
 
其中,LOAD与SCALE的值将通过网络表传递给RTVPROBE对象,分别确定其负载电阻与所测电压的乘积因子。如果您要制作一个兆伏表,您可以将缺省值设置为1000。PRIMITIVE属性可以使PROSPICE将电压计直接表示成一个RTVPROBE,这里没有模型文件,也不需要基于DLL的电气模型。请注意,如果您希望实现电气模型,您应当使用MODDLL属性以指定一个DLL文件名,这样,还是需要属性PRIMITIVE,因为VSM电气模型也是一个基本元素。5.4      VOLTMETER的Active模型设置
最后,在Make Device对话框中的Active Model标签需按如下界面内容设置:
Name Stem项将匹配两个图元符号,同时也作为VSM模型DLL的名称。选中Link to DLL复选框,其目的在于告知ISIS:电压计的VSM图形模型应当在READOUT.DLL中去找。5.5      创建C++工程
下一步工作是为READOUT.DLL创建一个C++工程。您所做的工作将有赖于您所使用的编译器以及模型的复杂度,但一般而言,您需要创建一个头文件,一个C++源代码文件,并设置您的IDE以便生成一个32位的DLL。您还需要确保在您的编译INCLUDE的路径中,存在VSM API头文件VSM.HPP。5.6      头文件
对于本模型而言,头文件相当小,如下所示:#include // Product ID value obtained from Labcenter:#define READOUT_KEY 0xXXXXXXXXclass READOUT : public IACTIVEMODEL{ public:// Implementation of IACTIVEMODELVOID initialize (ICOMPONENT *cpt);ISPICEMODEL *getspicemodel (CHAR *device);IDSIMMODEL *getdsimmodel (CHAR *device);VOID plot (ACTIVESTATE state);VOID animate (INT element, ACTIVEDATA *newstate);BOOL actuate (WORD key, INT x, INT y, DWORD flags);private:ICOMPONENT *component;POINT textorg;HTEXTSTYLE textstyle;CHAR readout[10];};您将会发现,类READOUT派生于(并实现)接口IACTIVEMODEL。请特别注意,IACTIVEMODEL是一个抽象类,因此类READOUT必须实现其所有函数,即使这些函数什么都不做。有关如何获得一个由READOUT_KEY所定义的产品ID的说明信息,请参阅Licencing Interface一节。5.7      创建模型及许可
在每一个VSM DLL中均要求包括以下代码,它用于ISIS与PROSPICE完成图形与电气模型的创建工作。extern "C" IACTIVEMODEL * __export createactivemodel (CHAR *device,ILICENCESERVER *ils)// Exported constructor for active component models.{ if (ils->authorize (READOUT_KEY))return new READOUT;else return NULL;}extern "C" VOID __export deleteactivemodel (IACTIVEMODEL *model)// Exported destructor for active component models.{ delete (READOUT *)model;}函数createactivemodel必须使用ILICENSERVER接口对模型进行授权处理。如果一个模型不能被成功授权,仿真器将不会针对它进行任何后续服务工作。5.8      模型初始化
在许可服务完成模型的授权之后,ISIS将调用模型的initialize函数,将向其传递一个ICOMPONENT接口。它将链接到电路图中的电压计器件。在绝大多数情况下,该模型将保留该接口,以便其它成员函数使用。VOID READOUT::initialize (ICOMPONENT *cpt){ // Store ICOMPONENT interface and initialize.component = cpt;// Get origin and style for readout textBOX textbox;cpt->getsymbolarea(1, &textbox);textorg.x = (textbox.x1+textbox.x2)/2;textorg.y = (textbox.y1+textbox.y2)/2;textstyle = cpt->createtextstyle("ACTIVE READOUT");// Initial readout:strcpy(readout, " 0.00");}该初始化代码还设置了图元READOUT_1的位置,在此,它将最终创建一个文本格式,并画出读数值。”ACTIVE READOUT”格式为一个预定义的文本模式,可在ISIS中的Set Text Styles命令中获取。这些操作的结果保存在成员变量中,以在后续的plot与animate函数中使用。5.9      组合图形/电气模型
VSM API不仅提供了READOUT模型中所使用的图形功能,还提供了电气功能,供同一个C++模型类使用。通过使用多重继承可完成这种整合功能,如实现一个派生于IACTIVEMODEL与ISPICEMODEL的类。以下两个函数使得一个图形模型能够返回其电气接口。只不过在本节例子中,它们都返回NULL。ISPICEMODEL *READOUT::getspicemodel (CHAR *) { return NULL; }IDSIMMODEL *READOUT::getdsimmodel (CHAR *) { return NULL; }5.10在原理图中画出
READOUT类的主要功能是当ISIS重画整个电路图时,在屏幕上画出电压计、读数值及读数值的改变。plot函数前者,而animate函数处理后者。plot函数必须确保整个电压计的图形内容能够被重画。因此,它首先调用ICOMPONENT::drawsymbol(-1),使得ISIS画出该部件的标准的(非动画形式)样式;然后,它调用ICOMPONENT::drawsymbol(1)在其上端画出READOUT_1图形符号;最后画出文本内容。VOID READOUT::plot (ACTIVESTATE state)// Plot function - this is called for normal rendering.{ component->drawsymbol(-1);component->drawsymbol(1);component->drawtext(textorg.x, textorg.y, 0, TXJ_CENTRE|TXJ_MIDDLE,readout);}animate函数要复杂一些,因为它必须处理来自RTVPROBE基本元素的ACTIVEDATA结构数据。VOID READOUT::animate (INT element, ACTIVEDATA *data)// Animate function - this is called whenever an event is// produced by the simulator model.// We interpret real values only, as follows:{ if (data->type == ADT_REAL){ // Decide whether to prefix with a +, a - or nothing:DOUBLE absval = fabs(data->realval);CHAR sign, result[10];if (data->realval > 0.001)sign = '+';else if (data->realval < -0.001)sign = '-';else sign = ' ';// Now we work out where to place the decimal point:if (absval >= 1000)sprintf(result, "%cMAX", sign);else if (absval >= 100)sprintf(result, "%c%3.0f", sign, absval);else if (absval >= 10)sprintf(result, "%c%4.1f", sign, absval);else sprintf(result, "%c%4.2f", sign, absval);// Final, re-draw the display value within the result text// within it:component->drawsymbol(1);component->drawtext(textorg.x, textorg.y, 0,TXJ_CENTRE|TXJ_MIDDLE,strcpy(readout, result));}}RTVPROBE传递真实的数据值,因此data->realval成员将包含所测得的实际电压值。该值将被用作最好的显示内容,并不超过5个字符。按照该逻辑,可显示在+/-0.01到999.9之间的值,更大的值将显示为+MAX或-MAX。构造出结果字符串后,模型就可以调用ICOMPONENT::drawsymbol(1)以画出一个空的显示面板,同时也清除了以前的显示内容,然后再调用ICOMPONENT::drawtext画出新的读数。请注意,animate函数并没有重画电压计的其它部件,它只是改变那些需要被重画的部分。5.11事件处理
在VSM模型中,还可能通过actuate函数来响应鼠标或键盘事件。因为READOUT模型并不需要响应它们,因此,它简单地返回FALSE。BOOL READOUT::actuate (WORD key, INT x, INT y, DWORD flags){ return FALSE;}6.   Active器件
6.1      简介
ISIS独特地提供了Active器件技术,通过该技术,您能自己创建可在仿真器中展现动画效果的新库部件。这极大地增强了电路动画演示效果,因为您不再局限于系统通过硬编码实现的一小部分的动画器件。如果您已经熟悉在PROTEUS中创建ISIS库部件与仿真模型,则您会觉得创建新的Active器件的原理也很通俗易懂。然而,就象创建一个好的仿真模型一样,为能达到最佳效果,也要求您精通电子学且想象力丰富。希望您具备以下技能:l         熟悉ISIS的2D图形技术,包括运用图形格式,以及如何调整颜色、线宽、填充方式等。更详细的介绍请参阅ISIS手册l         能创建普通的库器件。同样,在ISIS文档中有详细说明l         能创建仿真模型(MDF文件)。本书中的模拟与数字建模教程是最好的学习教材。一共有两类Active器件l         指示器:它们通过图形方式响应仿真过程中发生的事件。例如灯泡、LED及逻辑探针。指示器可有n种状态,也可以只有两种状态,它们可以被父器件管脚直接控制,也可被更复杂的仿真模型中的探针所控制。l         激励器:它们可以响应鼠标操作,其动作将改变电路的电气状态。例如开关、电位计以及逻辑状态输入。激励器可以是瞬态的,也可被锁存起来,它们可以有任意数目的状态。6.2      指示器举例 - 灯泡
LAMP模型是既简单又好的指示器例子。 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/arwen/archive/2009/06/26/4301997.aspx