47
陈斌文设计 DESIGNED BY CHEN BINWEN Proteus VSM SDK 统: 图形平台 子 模 块: 数字电路分析 间: 2009-06-23

Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

  • Upload
    others

  • View
    17

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

陈斌文设计 DESIGNED BY CHEN BINWEN

Proteus VSM SDK

系 统: 图形平台

子 模 块: 数字电路分析

时 间: 2009-06-23

Page 2: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

陈斌文设计 DESIGNED BY CHEN BINWEN

目 录

0. 写在前面的话 .......................................................................................................................................... 1

1. 简介 .......................................................................................................................................................... 2

2. SPICE 工作原理...................................................................................................................................... 3

2.1 简介 .................................................................................................................................................. 3 2.2 电路表示 .......................................................................................................................................... 3 2.3 电阻、受控电流/电压源 ................................................................................................................. 3 2.4 非线性 .............................................................................................................................................. 4 2.5 时变性 .............................................................................................................................................. 5

3. DSIM 工作原理 ....................................................................................................................................... 6

3.1 引言 .................................................................................................................................................. 6 3.2 启动过程 .......................................................................................................................................... 6 3.3 稳定过程 .......................................................................................................................................... 6 3.4 事件处理循环................................................................................................................................... 7 3.5 结束条件 .......................................................................................................................................... 7 3.6 九状态模型 ...................................................................................................................................... 7 3.7 未定义状态 ...................................................................................................................................... 8 3.8 悬空输入 .......................................................................................................................................... 8 3.9 毛剌处理 .......................................................................................................................................... 8

4. 混合模式仿真分析原理..........................................................................................................................11

4.1 概述 .................................................................................................................................................11 4.2 混合模式接口模型(ITFMOD)........................................................................................................11 4.3 使用 ITFMOD 属性 ....................................................................................................................... 12

5. 模型类型 ................................................................................................................................................ 14

5.1 概述 ................................................................................................................................................ 14 5.1.1 电气模型................................................................................................................................. 14 5.1.2 图形模型................................................................................................................................. 14

5.2 仿真基本元素................................................................................................................................. 14 5.3 原理模型 ........................................................................................................................................ 15 5.4 SPICE 模型..................................................................................................................................... 15 5.5 VSM 模型....................................................................................................................................... 15

6. 模拟元件建模教程 ................................................................................................................................ 17

6.1 简介 ................................................................................................................................................ 17 6.2 设置测试用例................................................................................................................................. 17 6.3 线圈元素建模................................................................................................................................. 18 6.4 线圈电路概述................................................................................................................................. 20

Page 3: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

陈斌文设计 DESIGNED BY CHEN BINWEN

6.5 开关部件建模................................................................................................................................. 22 6.6 开关电路概述................................................................................................................................. 23 6.7 测试并编译模型............................................................................................................................. 23 6.8 在其它设计中使用模型................................................................................................................. 24

7. 数字元件建模教程 ................................................................................................................................ 26

7.1 简介 ................................................................................................................................................ 26 7.2 74123 单稳多谐振荡器.................................................................................................................. 26 7.3 设置测试环境................................................................................................................................. 27 7.4 进入等价电路................................................................................................................................. 28 7.5 等价电路概述................................................................................................................................. 29

7.5.1 功能建模................................................................................................................................. 29 7.5.2 瞬态模型................................................................................................................................. 30

7.6 测试与编译模型............................................................................................................................. 33 7.7 在其它设计中使用模型................................................................................................................. 33

8. 混合模式建模教程 ................................................................................................................................ 35

8.1 简介 ................................................................................................................................................ 35 8.2 设置测试环境................................................................................................................................. 35 8.3 555 的结构示意图.......................................................................................................................... 35 8.4 等价电路 ........................................................................................................................................ 36 8.5 使用模型 ........................................................................................................................................ 38

9. VSM 建模教程....................................................................................................................................... 39

9.1 简介 ................................................................................................................................................ 39 9.2 创建 VOLTMETER 部件............................................................................................................... 39 9.3 VOLTMETER 的属性定义............................................................................................................ 39 9.4 VOLTMETER 的 ACTIVE 模型设置.............................................................................................. 40 9.5 创建 C++工程 ................................................................................................................................ 40 9.6 头文件 ............................................................................................................................................ 40 9.7 创建模型及许可............................................................................................................................. 41 9.8 模型初始化 .................................................................................................................................... 41 9.9 组合图形/电气模型 ....................................................................................................................... 42 9.10 在原理图中画出......................................................................................................................... 42 9.11 事件处理 ........................................................................................................................................ 43

10. ACTIVE 器件 .................................................................................................................................... 44

10.1 简介 ............................................................................................................................................ 44 10.2 指示器举例 - 灯泡 .................................................................................................................... 44

Page 4: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 1 -

陈斌文设计 DESIGNED BY CHEN BINWEN

0. 写在前面的话

本文是 Proteus VSM SDK 英文版的中文翻译件,出于非营利目的,大家可以自由下载、转载、传播,

但也请出自以上目的。 本人不提供 Proteus 软件的下载,有需要者可以上网搜索,或与 Labcenter 公司联系。 翻译的初衷为仅用于我自己研究学习。 我没有义务保证其中的所有语句与术语的正确性,但如果您能以朋友的身份指出其中的错误,我是

非常欢迎的。 凡是因为参考本文而导致的额外工作或其它损失,您可以来找我,我会微笑着向您说声报歉,也可

以与你握手致意,其余事项我就不负责了。 还有一点需要说明的是,我做事的耐心与恒心不够好,这篇文章的英文原版共有 289 页,但我一天

仅能安排一点时间来做这件事,可能每天能翻译 4~5 页,还不能保证每天或每周都能持续地做这件

事,所以,等到翻译完成后,可能会到公元 20xx 年了,嘿嘿,希望您能督促我一下。 因为不是一鼓作气地翻译完,可能会出现前后不一致的情况,比如,混用“元件”与“器件”两个

术语,甚至有时候还使用“元素”,自己领会吧。 哦,还有一点,如果哪位发现已经有了中文版,请告诉我,我就不做这件事了。 欢迎交流。 QQ: 282397369 MSN: [email protected] EMAIL: [email protected] Mobile: 133****8893 Web: http://www.DrGraph.com

陈斌文 2009-6-23

Page 5: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 2 -

陈斌文设计 DESIGNED BY CHEN BINWEN

1. 简介

本文主要介绍如何使用Proteus VSM来创建您自己的模型。 作为本文的读者,本文期望您是本系统的高级用户,并清楚怎样使用ISIS与PROSPICE进行原理图设计与仿真;我们还希望您具备必要的电路基础知识,能

完成可正确模拟您所期望现象的仿真模型。这不是可有可无的要求,因为其中包括

许多技能,这些技能将使您能决定正确的处理方式。 您可以登录www.labcenter.co.uk查看现有的模型信息。您也可以就将在VSM领域

内研发的模型提出申请。 本文 后更新日期:30/10/2000

Page 6: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 3 -

陈斌文设计 DESIGNED BY CHEN BINWEN

2. SPICE 工作原理

2.1 简介

本节将简要介绍SPICE如何进行电路仿真。如果您希望创建复杂的模拟电路元件模型,建议您阅读SPICE3F5相关文献。 下面仅就暂态分析进行讨论。

2.2 电路表示

一般来说,电路由节点与支路组成,其中,节点为两条以上的支路的共同连接点。在SPICE术语中只有节点电

压,在支路已知的情况下,这就足以求解出所需的支路电流。 电路中,有三种基本的元器件,即:

电阻 理想电流源(VCCS或CCCS) 理想电压源(VCVS或CCVS)

可使用矩阵与向量来表示电路、当前状态及其结果。向量可看成是单维矩阵,或者是一个简单的数列。在各计

算阶段,均需计算表达式 [I][Y] = [V] 其中,[I]与[V]为向量,而[Y]为一个二维矩阵。请注意该表达式与欧姆定律相类似。该表达式还代表了以下形式

的方程组: IaYa + IbYb + IcYc = V 这样可以求解V。V也经常表示RHS向量,它位于上述方程右手端(Right Hand Side, RHS)。 根据构成电路的支路,可设置[I]与矩阵[Y]中的值,从而求得矩阵方程的各个解,即[V]的各个分量。这些值可能

是来自元件模型中的特定值,它们可以表示该模型的一些状态。因此,[I]与[Y]一起将确定电路状态,而[V]表示

了结果。

2.3 电阻、受控电流/电压源

呵呵,可视一个电阻为一个线性电压控制电流源,且其输入输出节点包含相同管脚。实际上,SPICE就是通过

将[I]与[Y]中的不同元素设置为常量这种方式来处理一个线性受控电流/电压源。 从另一角度来说,若注意到矩阵[Y]的特定行或列的值表示相应节点间的电流与它们之间的电势差之间的关系:

该数越大,电压值越大。因此,支路电流与节点电压之间的任意线性关系可用矩阵[Y]中的常量来表示;同样,

特定节点间的电流也可直接用[I]向量中的值来表示。

Page 7: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 4 -

陈斌文设计 DESIGNED BY CHEN BINWEN

2.4 非线性

在前面,我们曾经提到过“各计算阶段”,这些计算阶段是如何定义的呢?OK,让我们先考虑简单的情况。如果

我们面对的电路全是由线性时不变支路所构成,在所有时刻,均可求得矩阵方程中节点电压向量[V]的唯一解。

一条线性支路遵守欧姆定律,包括R=V=0时Y=I=0的情况。这也是可经由方程组[I][Y]=[V]求解的电路的唯一形式。

但我们如何处理象二极管与三极管这样的非线性元件呢?我们构造与非线性电路状态一致的虚假电

路。让我们花点时间来理解这些概念。考虑一个电路中的一个二极管,假定我们已经知道电路稳态

时的各节点电压。从二极管的理论函数可以知道二极管的状态:

从而可求解,其电阻阻值为 Vd/Id(欧姆定律),而电流源(Is)未实际产生输出,故其电流为 0。下图可

很好地例示这一点:

发明SPICE的那个聪明绝顶的家伙认识到,电路将会向它的解收敛,在每次迭代过程中,设置 Yr = Id/Vd 其中,Id由前一个方程计算而得,而Vd由前面的另一个方程求得,并且还有 Is = Id – d(Id)/d(Vd) 我们来看一下其工作过程:假定二极管通过一个电阻连接到电池

二极管开始工作时,将为开路,求解其初始化矩阵后将会发现,其两端电压为电池电压,而流经电流为0 使用上面的方程,代入计算Yr与Is的新值。Yr将为0,但Is将为负值,因为Id为0(通过求解上一个方程),且

结果位于上图中右边斜率较陡处 将新值代入电流源,重新计算 电流源将产生电流,经由二极管并在串联电阻两端产生压降。回到第二步,二极管两端的压降变小,且其

电流将从0开始增大。换句话说,我们朝着正确的解方向迈进了一步。

Page 8: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 5 -

陈斌文设计 DESIGNED BY CHEN BINWEN

如果更多次地重复该过程,则会得到解

且电流源的作用消失了。在这个时候,可认为电路已经收敛稳定。

如果您有一定的数学基础,您会认为这是Newton-Rapheson方法,事实上就是这种方法,当然其中还需要做一

些额外的处理,如防止除零以及其它类似措施,特别是不允许设置任何大于GMIN系统变量的值。

2.5 时变性

为全面描述问题,我们必须考虑时变电路。电路中的时变部分一般为电容与电感,更严格地说,一些信号发生

器与混合模式接口模型元件也是时变的。考虑到二极管与三极管的模型中包括电容,可认为它们也是时变的。 我们如何对电容建模?我们可以用一个并联的电阻与电流源来表示二极管,根据二极管的伏安特性可求得相应

的值,即 Q=CV(或V=Q/C) 及 Q=It,或更精确的I = dQ/dt 注意到在一个给定时刻,电容就象一个电池,其电流源部分将产生出电流,则电容模型就不必按

Newton-Rapheson方式收敛,因为它是一个线性元件。 为进行电容电路的仿真分析,我们可将仿真时刻分割成为离散时间片断。在每个离散时刻,电容将依据该时刻

其存储的电荷以及先前求得的“直流”结果进行建模。请注意,如果电路中还有其它非线性元件,这样处理可

能会导致该时刻进行迭代分析。 那么,该怎么办呢?我们刚说过,电容模型是基于其存储电荷的。但问题是我们怎么知道那是多少?求解后,

我们可以知道它应该是多少(因为我们可以由Vc求得Q,即Q=CVc),但我们还需要一些先验信息,以便得到可

以进行仿真分析的正确模型。事实上,我们也可以知道电容的工作历史数据,因为可以记录自从分析开始以来

的所有电荷与电流数据值(前提是我们有意记录了这些数据)。因此,我们可以由时刻t之前(t-1, t-2等)的电荷值来

推断出t时刻的电荷值,这里需要用到的是Gear或Trapezoidal积分理论。 在此,有两个显示易见的结论:首先,划分的时间间隔是一个非常重要的参数。它应该比较小,以便保证我们

的推断的正确性,但它也应该尽可能的大,以便缩短分析时间。其次,我们所计算得到的结果值几乎不可能完

全准确(尽管它与真值可能非常接近)。所有这些将导致稳定性问题。这里有一种将该问题可视化的方法。想像在

一个悬崖边,它的边缘不稳定。不稳定性来源于电路的初值。我们可以通过在电路的解(悬崖的边)之间放置木板

来为它们搭桥以通过悬崖之间的深沟,但走得越远,就越难将木板放到正确的位置(稳定的状态)。如果我们超过

了限度,将它放得过远,虽然看起来方向是对的,但后续的电路就无法达到一个稳定的状态,或者我们就直接

掉进深渊。(晕,不就是想说明迭代求解的收敛性嘛,第一次听说如此蹩脚的比喻,陈斌文注) 这确实是一个困难的问题。对于电路仿真分析的前期探索人员来说,这甚至比非线性元件的问题还要难。它都

来自于数值积分(这也是我们进行计算的依据)与Nyquist稳定判据。 该积分的主要目的是求得下一步计算的输入值,也就是要确定我们的木板要放多远。时间间隔步长不是一成不

变的,它可以根据任意目的进行改变。但即使做了这么多(确实多,在计算时间上也是),我们也可能陷入失望的

错误境地。举个简单的双稳例子吧。在晶体管即将开关时,无法知道电容的情况。若假定开关间隔时间较长,

则电路在开关间隔间是稳定的,这将会导致我们在开关时可能会处理失当,无法得到收敛结果。避免错误结果

的唯一办法就是回到上一步,以一个较小的步长进行计算。 从创建模型角度来说,这个过程由Proteus VSM进行处理,它通过调用ISPICEMODEL::trunc函数,可以让各个

模型有机会去接受或拒绝下一步时间间隔的机会。幸运的是,SPICE接手了剩下的工作。

Page 9: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 6 -

陈斌文设计 DESIGNED BY CHEN BINWEN

3. DSIM 工作原理

3.1 引言

可采用事件驱动仿真(Event Driven Simulation)技术来进行数字瞬态分析。它与SPICE中的模拟电路瞬态分析不

同,后者仅当电路某些元素的状态发生改变时才进行。另外,数字瞬态分析只考虑离散逻辑,而元件功能则表

示为一种更高层次的逻辑。例如,我们可以认为计数器是一个寄存器,它的值在每次时钟沿加一,而不认为计

数器是几百个晶体管电路元件。这样,针对同一个电路,采用事件驱动仿真分析比模拟电路仿真分析来说,速

度要快上几个数量级。

3.2 启动过程

启动过程的目的是定义电路中所有网络的初始状态,且每个模型的分析函数被至少调用一次。 启动模块将进行以下处理:

所有与VCC和/或VDD相连的输入管脚的电平置为高 所有与GND和/或VSS相连的输入管脚的电平置为低 所有与信号发生器相连的输入管脚的电平状态与信号发生器的初始属性值相同 所有其它的管脚初始化为悬空 所有模型都必须根据其逻辑,将输入变换求得输出(模型调用无固定顺序) 如果网络的状态发生改变,则与其相关联的模型将被要求重新计算得到它们的输出,该过程将重复进行直

到系统确认出现稳态。

3.3 稳定过程

考虑以下的三个非门电路:

在启动过程中,除U1:A以外的非门都将得到一个未定义的输入状态,则它们将产生一个未定义的输出状态。然

而,因为调用了本过程即稳定过程,U1:A的输出将改变,即由未定义状态变为高电平。之后,将要求U1:B进行

重新计算。这次的结果是输入逻辑1,而输出为逻辑0。这将改变另一个网络状态,导致另一个稳定过程运行。

后,当U1:C改变其输出状态为高时,再没有其它的改变发生。这时,可认为电路达到稳定。 请注意,应假定在仿真分析开始之前电路已经稳定,且在模型内部的任何延时都将被忽略。 在一个混合模式的仿真分析中,在SPICE试图求得电路的DC工作点时,也会调用稳定过程。

Page 10: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 7 -

陈斌文设计 DESIGNED BY CHEN BINWEN

3.4 事件处理循环

稳定过程之后,DSIM才开始严格意义上的仿真分析过程。该过程在一个循环中调用,而该循环重复进行以下两

步操作: 将当前时刻所有状态改变事件加入到一个队列中,并交由相关网络进行处理。该过程将得到新的网络状态

集合。 当一个网络状态发生改变时,该网络内所有的包含输入管脚的模型都将重新进行仿真分析。如果它们的输

出发生了改变,将产生新的事件,并被加入到事件队列中。 当然,不同的模型将产生的事件需要在不同时刻进行处理,因此DSIM内核将在每次循环时对队列中新产生的事

件进行排序。 需要指出的是,我们的方案可支持0时刻延迟模型,这里的含义是,根据事件产生的方式,在事件产生的时刻,

代码也在进行批处理(一批等价于循环体执行一遍)。 本段翻译得不好,原文如下: It is also worth pointing out that our scheme quite happily supports models which have a zero time delay. In this context, events generated with the same time-code are processed in batches (one batch equals one trip round the loop), according to how they were generated.

3.5 结束条件

当达到以下条件之一时,仿真将停止: 到了指定的仿真结束时间 出现了逻辑矛盾,如当前时刻停止不前,即使事件处理循环过程进入了死循环 出现了系统错误,如事件队列内存异常。这在正常情况下不大可能会发生,除非在您的设计中使用了某些

不稳定的因素,可能会导致某些地方的高频振荡(如100MHz)

3.6 九状态模型

您可能会认为一个数字仿真器仅会处理高低逻辑,但实际上,DSIM处理了9个完全不同的状态: 状态类型 关键字 说明 电源高态 PHI 电源高逻辑 强电高态 SHI 有源输出高逻辑 弱电高态 WHI 无源输出高逻辑 悬空态 FLT 悬空输出-高阻 未定义态 WUD 与模拟电压混联 竞争态 CON 与数字电压冲突 弱电低态 WLO 无源输出低逻辑 强电低态 SLO 有源输出低逻辑 电源低态 PLO 电源低逻辑 从根本上来说,一个给定的状态包含其极性信息(高、低或中间态)与强度信息。状态的强度表示电流的大小,从

而决定输出带负载能力或吸收电流能力(若多于一个输出连接到同一个网络节点时有用)。 例如,如果一个集电极开路(OC)输出通过一个电阻连接到VCC,则当输出为低时,在网络中将同时出现WHI与SLO状态,结果SLO状态竞争获胜,导致相应节点为低电压状态。相反,如果在网络中同时出现两个三态输出,

且来自不同的方向,则两个输出都无法获胜,导致出现竞争状态。 该方案允许DSIM仿真包含OC与OE输出、上拉电阻的电路,也可分析经由电阻连接的三态输出(那些可怜的人设

Page 11: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 8 -

陈斌文设计 DESIGNED BY CHEN BINWEN

计的多路输出)电路。然而,需要记得一点:DSIM是一个数字仿真器,它不能处理模拟电路的模型现象。例如,

将大电阻连接到TTL输入端时,DSIM的分析过程不会出现问题,但在实际工作中会因为不能提供足够的电流而

导致相应的问题。

3.7 未定义状态

当数字模型的输入未定义时,它可能会沿着模型的普通常识规律进行传播。例如,如果与门的一个输入为低,

则其输出将为低,但如果只有一个输入为高,而其它输入未定义,则输出也将为未定义。

3.8 悬空输入

一般认为,未连接的 TTL 输入看起来与它连接到逻辑 1 时所导致的现象一致,但不能基于此就说明

这是实际事实情况。可能会在忽略导线,或输入连接到一个非激活的三态输出时出现这种现象。DSIM内部进行了一些处理,其内部模型都假定了期望高或低的输入的真实逻辑响应。 要是您真的希望 DSIM 将未连接的输入当成高/低电平逻辑,您可以通过将 FLOAT 模拟器控制属性

设置为 TRUE 或 FALSE。如果该属性值未指定,则缺省处理方式为未连接输入会被当成未定义状态。

3.9 毛剌处理

在设计 DSIM 时,我们曾就如何处理非常短的脉冲(毛剌)的模型仿真进行了大量讨论。问题的本质

在于,在那些情况下,作为 DSIM 仿真分析的一个前提假设—模型的纯数字化表现—有点不大成立

了。例如,一个 5ns 输入脉冲时作用到 7400 芯片输入端时,它将会其输出端产生某种形式的脉冲,

但并不能满足 TTL 规范所要求逻辑电平。这样的输出脉冲能否作为下一级计数器的时钟呢?这就基

本上依赖于模拟计算的结果了。 好的处理方式考虑极端情况,即: 一个 1ns 的输入脉冲压根不会在电路中传播 一个 20ns 的输入脉冲可以较好地在电路中传播

在这之间的情况,门电路将不会正确地传播脉冲,也可以说是欠脉冲。这给了我们毛剌阈值时间

(Glitch Threshold Time),它可以与 TDLH 和 TDHL 一样,作为模型的额外属性。 另一个需要关心的是,究竟毛剌能否抑制模型的输入或输出。要解决这点疑问,我们可以考虑一个

受纹波计数器驱动的 4-16 解码器,见下图所示。

Page 12: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 9 -

陈斌文设计 DESIGNED BY CHEN BINWEN

纹波计数器的输入交错排列,这样可能会导致解码器的输入经过中间状态时产生出寄生脉冲。下图

所示为该仿真分析过程结果。

以第一个毛剌为例来进行说明,因为U1(QA)第一次触发低电平,它胜过U1(QB)的高电平而产生一个短时低电

平脉冲,并成功地通过解码器并持续10ns。问题是解码器能否对此做出正确的响应,或更进一步地说,如果输

入毛剌只有1ns或1ps会出现什么情况呢?当然,对于后面两种情况,结果很清楚,即实际器件不会响

应,这也提示我们必须处理输出端的毛剌而不是输入端的。这是因为,在上述例子中,输入脉冲相对

而言长一些,对于那些智能一些的准则而言,不会被当成是毛剌。但对于某些竞争产品,它们在此做

了大量的无用功, 终的结果是居然能对1ps的毛剌产生响应! 真正让人感兴趣的部分在于,如果您构建了上面的电路,可能没有毛刺。说实在的,这种设计令人不

Page 13: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 10 -

陈斌文设计 DESIGNED BY CHEN BINWEN

敢恭维,但’154的TDLH与TDHL大约为22ns,这使得它对于10ns的输入响应而言是一个较高的障碍。

对于我们所测试的单个元件而言,并没有输出脉冲,但在供应端可能还是有可测量的微小抖动。 为提供对毛刺的处理,所有的DSIM元件都应提供一个用户可定义的毛剌阈值时间(Glitch Threshold Time)属性,即TGxx,此处的xx为相应的输出名称。在我们所定义的TTL模型中,这些属性都可以被

TTL元件所覆盖,它们的缺省值为主要的L-H与H-L传播延迟的平均值。设置毛剌阈值时间(Glitch Threshold Time)属性为0将允许毛刺通过,或许你喜欢这种效果吧。上面的图示效果就是将74154的属

性TGQ设置为0的结果显示。 后需重点指出的是,如果毛剌阈值时间(Glitch Threshold Time)属性大于L-H或H-L传播延迟时间,则

该属性值会被忽略掉。这是因为,在输入边沿时刻之后,经过相关时间延迟,元件就必须改变其输出,

它不会再检查是否在不久的将来还有其它的事件会发生,哪怕该事件会取消本次输出。考虑一个对称

门器件,假定其传播延迟为10ns,而其毛剌阈值时间(Glitch Threshold Time)属性为20ns。在t=0ns时刻,

输入变为高电平,而t=15ns时,输出变为低电平。您可能会这样认为:输入能传播过去,即输出在t=10ns时为高,而t=25ns时为低,从而产生一个宽度为15ns的脉冲,但因为它小于毛剌阈值时间,所以该脉

冲会受到抑制。事实上并不是如此,原因在于在t=10ns时刻,输出必须为高,它不能仍然保持为低,

等到20ns时(就象我们的例子所说的那样)才改变,使得第二个边沿到来时产生一个受抑制的脉冲。只

要输出在t=10ns时变为高电平,则第二个边沿(t=25ns)将自主地将其复位。您需要仔细考虑并理解这点。

Page 14: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 11 -

陈斌文设计 DESIGNED BY CHEN BINWEN

4. 混合模式仿真分析原理

4.1 概述

如果将各种数字器件用它们内部电路来进行建模,则任何电路都可以被当成模拟电路来对待,如将

一个 TTL 与非门分解为 8 个晶体管。通过这种方法可以得到非常精确的结果,并会告诉您 7400 门

电路如何将 1.8V 的输入确切地转化成 4.3V 的输出。然而,如果对 9 个门组成的 J-K 触发器,再由

4 个触发器组成的 4 位计数器,你就会发现,再采用这种方法来建立较大的数字电路模型将成为一

件折磨人的痛苦漫长经历。 实际上,数字电路通常采用事件驱动方式来进行仿真分析。换句话说,只有当电路中某部分状态发

生改变时,仿真器才工作。这与 SPICE 类型的仿真器有极大不同,后者以相对规律的时间间隔对整

个电路进行重复分析。另外,事件驱动数字仿真器仅对三种逻辑感兴趣,即高、低与未定义,它并

不关心真实波形究竟是如何上升或下降的。这两种因素意味着对给定电路的数字仿真分析将比相同

电路的模拟仿真分析方式要快很多,但其代价是电路真实结果现象的近似处理,特别是无法针对非

标准的电压逻辑输入与短时脉冲输入进行准确建模。 大的困难来自电路中包含不少的模拟与数字电路部分,即要求程序同时使用两种类型的仿真器,也

就是所谓的混合模式仿真器。有多种方法可以实现这种需求,我们的解决方式是着眼于获取数字分析

的 高效率,如果数字部分以模拟方式工作时将付出一些准确性的代价。例如,4000系列缓冲器在供

电不足时,我们也不试图将之当成一个理想的放大器。我们的观点是,如果您对模拟响应感兴趣,您

就应该使用一个完全意义上的模拟模型,如SPICE库中的适当的MOSFET管。 总之,PROSPICE混合模式仿真分析按以下方式进行工作:

分析电路中各网络,以便确定与其相连的模拟、数字或混合类型元件 如果是模拟器件驱动数字输入,则加入模数转换ADC对象;反之亦然(这点说得稍简单了一些,

扩展开来就是:如果是数字器件驱动模拟输入,则加入数模转换DAC对象—陈斌文注) 之后,除ADC元件之外的对象在正常情况下会进行SPICE仿真过程,而ADC元件会监视其输入值,

在它们认为状态发生改变时创建数字事件。这种处理会导致调用数字分析过程,并在以后某个时

刻创建影响DAC输出的事件。根据这些事件而不是模拟信号发生器电压,DAC对象产生输出变化

后,开始进行模拟仿真分析。 当然,事情还不止这些,因为还需考虑所创建的异步数字事件(如数字时钟发生器)及防止模拟仿真器

运行超过这些时间点等因素,但这些也是你应该理解的本质所在。 关键在于,在数字部分中可能会产生大量的活动,这点与模拟仿真分析基本无关,除非它们实际上改

变了模拟网络部分的电压值。您可能会在任意模拟部分电路分析过程中,同时处理整个包含几千个数

字事件的微处理器模型。

4.2 混合模式接口模型(ITFMOD)

为在PROSPICE中设计我们的混合模式仿真方案,我们需考虑应如何给定器件系列的模拟参数指标问

题。这些指标包括: 器件的输入输出阻抗 器件的输入逻辑阈值 输出的高低电压电平

Page 15: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 12 -

陈斌文设计 DESIGNED BY CHEN BINWEN

器件输出的上升下降时间 可以说,指定TTL器件的的上述模拟参数指标是一件相当不爽的事。 另外,至少对于初学者而言,在定义供电时还有一个巨大的障碍问题,就如下图所示的电路中,人们

趋向于简化电路原理图而期望得到适宜的结果。当然,此处的问题在于有一个隐含的前提假设条件,

即7400可从它的连接到VCC/GND的隐藏电源管脚获得5V供电。

可通过引入器件的ITFMOD属性来解决上述问题。它与MODEL属性非常类似,也提供一系列属性值

的引用,也能激活网表编译器中的特定机制。以下为它的必要工作步骤: 对于任意拥有ITFMOD属性的器件而言,在其取得网表结果过程中还会调用另外一个模型定义,

它将指定ADC与DAC对象的控制参数,以及正负供电管脚名称。如上图中,U1:A的ITFMOD属

性值为TTL,即ITFMOD = TTL。 在得到了供电管脚名称后(即VCC,GND等),ISIS将创建一个特定的基本对象,并将其与供电管脚

相连。ISIS按类似于对象的子模型或表单的方式来命名该对象,就如上图中,供电对象将取名为

U1:A_#P 当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逻辑属性参数进行后续工作。 各供电接口对象都包含一个电池组件,在接口模型定义中拥有VOLTAGE属性。TTL接口模型定

义中指定VOLTAGE = 5V. 这意味着在上图电路中,在VCC与GND之间插入了一个5V电池,因为这是7400器件的供电管脚

所要求的。 电池的内部阻抗可通过RINT属性来访问,其缺省值为1M∧。这意味着如果您将一个真实供电端

赋值为VCC/VDD(可通过放置一个电源端或电压端来实现),则它将作用于所定义的电池内部阻抗

属性所对应的电阻,因此,在仿真世界里,电池可以流过大电流。 如果要取消接口模型中的内部电池作用,可简单地置RINT=0

4.3 使用 ITFMOD 属性

现有的接口模型中已定义了如下的 ITFMOD 属性: TTL 标准 TTL(74 系列)

Page 16: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 13 -

陈斌文设计 DESIGNED BY CHEN BINWEN

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 时将忽略电池作用

Page 17: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 14 -

陈斌文设计 DESIGNED BY CHEN BINWEN

5. 模型类型

5.1 概述

在 Proteus VSM 中,有两类基本模型:电气模型与图形模型。这也是以后模型划分的两个大类。

5.1.1 电气模型

在传统意义上,这类模型与电路仿真分析有关。 常见的,画出模拟一个真实器件的电路图时就创

建了它的电气模型,我们也叫它为原理模型。这些画在模型电路中的基本对象来自于内建于仿真器

的库。这些基本对象不仅包括基本元件,如电阻、电容、二极管与晶体管等,还包括许多理想化元

件,如电压控制电流源、理想运放等。Proteus VSM 提供大量的基本对象,包括模拟与数字器件,

以及本文所涉及到它们的详细信息。 您也可以通过使用 VSM API 函数来编程实现电气模型。该接口提供模拟(SPICE)与数字(DSIM)模型。

混合模式器件可通过实现这两种接口的同一模型的 DLL 来完成建模工作。另外,利用 API 实现的

电气模型可以直接与图形模型交互,并可实现许多让人兴奋的功能与应用。 第三方电气模型基于标准 SPICE 网表格式,这是事实上存在的,它们可以描述模拟器件模型,许多

生产厂家现在都在他们的网站上提供其产品的 SPICE 模型。在 Proteus VSM 用户手册中说明了如何

使用这些模型的方法。

5.1.2 图形模型

在进行仿真分析时也可让您与模型元件进行交互,在这方面,Proteus VSM 是独一无二的。直观例

子包括 7 段 LED 管以及开关,但更复杂的元件如数字 LCD 显示屏也可以进行建模。简单器件的建

模无需编程就可实现。系统提供了一种解决方案,它可以显示与可测量的节点电压或逻辑状态相应

的给定数目的图形元素,我们称之为主动元件(有源元件?Active Components)。 然而,使用 VSM API 能使系统的强大功能得到体现。它提供了一套接口,模型可以通过这些接口完

成 Windows 中几乎所有的事情。它可以直接画到原理图上,或嵌入到一个弹出式菜单中,或同时做

这两件事。更多的是,在同一个 DLL 中,可将复杂图形模型与电气模型同时实现,如数字 LCD 屏

模型就是这样的一个典型例子。

5.2 仿真基本元素

仿真基本元素是 PROSPICE 的内建对象,要么属于 SPICE3F5 模拟器件,要么属于 DSIM 数字器件。

仿真基本元素可在一些器件模型中直接使用,如电阻、电容、二极管、晶体管等,或者可作为更复

杂器件的构造模块,如原理模型的一部分。 一个仿真基本元素由仿真器通过 PRIMITIVE 属性定义。如,一个 NPN 三极管可能按如下方式赋值: PRIMITIVE=ANALOG, NPN 它告诉系统,晶体管将通过 SPICE 进行建模,在此过程中,使用 NPN 基本元素。 类似地,一个二输入与非门可按如下方式: PRIMITIVE=DIGITAL,AND_2 ISIS 库部分中可用的基本元素可以在 ASIMMDLS 与 DSIMMDLS 库中找到,还有一些特别的基本

元素在 REALTIME.LIB 库中,它们用于构造主动元件。

Page 18: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 15 -

陈斌文设计 DESIGNED BY CHEN BINWEN

绝大多数的基本元素模型都具备一些属性,它们可以通过 Edit Component 对话框窗口进行编辑,各

模型还链接到本文档中相应的帮助主题。

5.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)。 在模拟与数字建模教程中,有针对如何创建新的原理模型的详细说明。

5.4 SPICE 模型

初的 Berkeley SPICE 网表格式决定了它成为模拟器件模型的事实标准。大量生产厂家现在都针对

其产品提供了可用的 SPICE 模型,PROSPICE 中已有数千种这样的模型。您可以自己在 ISIS 库中直

接使用任意的 SPICE 模型,在 PROSPICE 的使用 SPICE 模型(USING SPICE MODELS)文档中说明了

如何使用。 因为这些模型由 SPICE 内核处理,它们在系统中用其余的基本元素进行表示。典型地,它们可以按

以下赋值语句方式使用: PRIMITIVE=ANALOG,SUBCKT

SPICEMODEL=LM741/NS

SPICELIB=NATOA

其中,SPICEMODEL 属性表示所使用的 SPICE 模型名称,而 SPICELIB 属性值为包含它的

SML(SPICE 模型库)文件名称。如果 SPICE 模型在 ASCII 形式的普通 SPICE 文件中,您需要使用

SPICEFILE 属性值。

5.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++编程接口。另外,

Page 19: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 16 -

陈斌文设计 DESIGNED BY CHEN BINWEN

给出一个简单的模型例子,以便您能着手进行这项工作。 一般地,一个 VSM 模型可以用以下赋值语句来实现: PRIMITIVE=DIGITAL,8052

MODDLL=8051.DLL

其中,PRIMITIVE 属性值表示该器件将直接由 PROSPICE 直接进行分析,这样 ISIS 不会用 MDF文件中的内容来替换它,而MODLL属性值表示包括 8052模型的DLL文件名称。请注意,PRIMITIVE属性的第二个参数(在此为 8052)将传递给 DLL,使得一个 DLL 可以包括多个不同的器件。

Page 20: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 17 -

陈斌文设计 DESIGNED BY CHEN BINWEN

6. 模拟元件建模教程

6.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,这是本教程的完全实现版本。

6.2 设置测试用例

在开始对继电器建模之前,我们必须做的第一件事是设置一个测试环境,如下图所示:

Page 21: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 18 -

陈斌文设计 DESIGNED BY CHEN BINWEN

测试环境包括一个继电器线圈对象(来自 DEVICE 库的 RELAY:A)与一个继电器开关对象(来自同一

库中的 RELAY:B)。线圈由一个 Pwlin 信号发生器驱动,而开关连接到一个 10V 电池与两个负载电

阻。为了观察继电器的开关动作,将两个电压探针放置在其输出端,并与 Pwlin 信号发生器一起加

入到模拟图表中。注意到 Pwlin 信号发生器的 V(n)属性值的赋值集合,它可以产生一个简单的斜坡

上升/保持/斜坡下降信号,这些值是随意选取的,如果不满足我们的需要,也可在以后进行修改。

6.3 线圈元素建模

搭建测试环境后,我们现在可以开始对继电器的线圈进行建模工作。在开始之前,我们必须首先为

线圈元素创建一个子模块,以便我们能放置其等价电路。可通过以下操作来完成这项任务:先用鼠

标右键点击线圈对象,然后在线圈对象上点击鼠标左键,这样可调出 Edit Component 对话框。 (经我尝试,7.1 版本中支持直接双击调出 Edit Component 对话框,或者在已选择的情况下单击即可。

该对话框的界面如下图所示。陈斌文注)

Page 22: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 19 -

陈斌文设计 DESIGNED BY CHEN BINWEN

在 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 版本之

后,软件修改了,您可以通过右键菜单进入/退出子模块。陈斌文注) 现在开始处理我们的模型,进入上面所描述的线圈子模块,即其等价的电路图。下图即为我们将用

的线圈全部电路图:

Page 23: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 20 -

陈斌文设计 DESIGNED BY CHEN BINWEN

上图中所有对象均为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年确实离现在很远了,那时的软件咋这么难用的呢,说明书绕口得很,操作

也不直观。幸亏现在的软件好用了,这部分您能看明白就看,看不明白,也没有关系,用用软件习惯

了就好了。陈斌文注)

6.4 线圈电路概述

线圈等价电路的目的在于取得线圈电压(其C1与C2两端之间的电压)以及相应的Von与Voff参数,根据

线圈的’On’或’Off’状态来产生一个正或负的门信号输出(在其GATE+与GATE-端)。 模型的输入端包括串联的电感L1与电阻R1。电感表示线圈的感应系数,而电阻表示线圈的阻抗。电

感与电阻的值被设置为成对映射值(mapped values)。一个映射值由简单的属性名称与成对的’<’与‘>’符号组成,如,值 <BETA>*2

表示器件的值被设置为映射值<BETA>的2倍。当ISIS在进行仿真分析前,需将模型的网络表(即MDF文件)链接到设计网络表,这时,它会将映射值(即<>及其之间的名称)用相应名称属性的值进行代替。

这种代替是基于字面上直接进行的,例如,如果BETA属性通过以下语句进行赋值: BETA=10+20

则器件的映射值<BETA>*2将被替换为: 10+20*2 字符串”<BETA>”直接用字符串”10+20”进行替换,因为ISIS并不会试图进行映射属性的编译解析。尽

管该属性被赋予了一个表达式,该赋值语句还是有用的,因为所有的值与属性赋值语句都将作为

PROSPICE的表达式,在使用之前会自动计算。但是,因为PROSPICE所使用的表达式计算器处理时,

其乘法运算的优先级高于加法运算,PROSPICE将计算该表达式为10+(20*2)=50,或许这不是您所期

Page 24: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 21 -

陈斌文设计 DESIGNED BY CHEN BINWEN

望的。如果您担心会发生这样的错误,您应该声明器件值为 (<BETA>)*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<VON>,因为这是当输入到线圈两端电压为<VON>时通过分压器后的输出电压。为使开关能在其“接通”“断开”状态之间“干净”地切换,其关断电压(通过VOFF属性指定)也设置为同样的值。 现在,我们必须确定VSW1的接通阻抗,因为一旦线圈接通后(即VSW1与VSW2都接通),分压器上半

部分的阻抗即为所求。假定线圈两端电压为线圈的<VOFF>值,则分压器的输出为0.1<VON>(开关的

断开电压由VOFF属性值设置)。当然,用下图来解释效果会更好一些:

应用欧姆定律(或分压原理),由上图可知:

其中<VON>与<VOFF>都是映射参数,R2与R3分别为9*<RC>与<RC>(<RC>为线圈映射阻抗,指定为

R1的值),且Ron为我们所要求的VSW1的未知值。如果您进行代数计算,可求得Ron为

Page 25: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 22 -

陈斌文设计 DESIGNED BY CHEN BINWEN

这也是赋给VSW1的RON属性的表达式形式的值。 等价电路通过与其父器件管脚同名的端口建立与父器件的连接关系,本例中为C1与C2。因为父器件

中的管脚为无源类型,我们可以使用缺省端口;对于其它类型的管脚,您应该使用相应类型的端口。

在对一个设计生成网络表时,如果ISIS发现某一个父器件的管脚与其子模块中的相应端口不相匹配,

如,我们忘记连接它们,或者我们连接了但却设置了一个不匹配的类型,它就会报告一个警告。请注

意ISIS对每个父器件的管脚仅检查那些至少有一个相似名称的端口,它不会报告其它那些名称不匹配

的端口。如果您在子模块中有不止一个端口对象引用了父器件的同一个管脚,您应特别注意:ISIS不会处理其中的一个或更多的终端名称错误(因它只处理一个)。 您经常会发现,你所要建模的元件或对象并不是您自己所创建的,它的管脚名称还是隐藏的(如本例

中的继电器线圈)。现在问题来了,您如何知道父器件的管脚名称呢?答案是将鼠标移动到管脚末端,

则在状态栏中会显示该管脚的相关信息,包括它的名称、数量与电气类型等。 为了与继电器开关的等价电路相连接,我们应再次使用Default端口,但是这次,我们将该端口的网络

名称设置成以星号(‘*’)开始。当ISIS创建仿真网络表时,所有同一父部件(本例中为RL1)的不同子模块

中以星号开始的类似名称的网络对象都将连接在一起,并合并成为一个网络对象。这种功能将为不同

子模块的对象之间的连接提供支持,尤其是在对多元素器件进行建模时有用。

6.5 开关部件建模

完成线圈部件的建模工作后,开关部件的等价电路相应工作就显得比较直观了,其子模块如下图所

与处理继电器线圈一样,在我们编辑处理开关的等价电路之前,我们应先编辑 RELAY:B 元件实例

对象,设置其引用名称为 RL1:B,设置其值为 SWITCH,并选中其 Attach Hierarchy Module 复选框

以创建其子模块以便处理其等价电路。

Page 26: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 23 -

陈斌文设计 DESIGNED BY CHEN BINWEN

为进入到等价电路,我们需要将鼠标移动到开关对象上,按下 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.

6.6 开关电路概述

开关的控制管脚具有相反极性,这样在任一时刻只有一个开关处于接通状态。两个开关都具有相同

的 Von 与 Voff 控制电压(由 VON 与 VOFF 属性指定),都为 1V,即线圈模型所产生的控制电压的中

点值。因此,每个开关都同时改变状态。两个开关的关断阻抗都设置为 1T 欧(由 ROFF 属性指定),而其接通阻抗都设置为映射值 RON(由 RON 属性指定),通过 DEFINE 脚本缺省设置为 10m 欧。 每个开关输出端与两个开关的公共端之间都一个 10pF 电容及两个背靠背二极管相连。 后者没有任何作用,但在 PROSPICE 仿真引擎中,因其瞬态突变将会导致更多次的计算(模型的本质

也就是这种效果)。如果没有这些二极管,您可能会找到 VSWITCH 模型来进行慢速开关,而

PROSPICE 在处理细节时将不会认为它是在进行开关动作;另一个解决方法是设置 PROSPICE 的

NUMSTEPS 仿真控制属性为一个较大的值,但这将导致 PROSPICE 以一个较小的时间步长进行整

个仿真分析,从而使得仿真分析时间变长。 对于继电器线圈模型而言,一方面,我们使用了 Default 端口,其名称与父器件的管脚名称相同,这

样使得它可以与其父器件进行内部连接;另一方面,我们使用了名称以星号(‘*’)开头的端口,使得

开关模型能与线圈模型拥有内部连接(详细说明请参阅前面章节内容)。

6.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

Page 27: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 24 -

陈斌文设计 DESIGNED BY CHEN BINWEN

编辑框中录入相应的文件名称,然后点击OK按钮。

6.8 在其它设计中使用模型

现在,我们已经创建了模型。在后续设计中,无论何时,如果我们希望建立继电器线圈的模型,我

们所需要做的就是,编辑元件实例对象,并在其属性列表中添加以下属性赋值语句: MODFILE=RLY_COIL.MDF 我们也有可能还想设置相应的电感值、串联电阻值、相应的电压值,这时,我们只需再按以下形式

添加相应的属性赋值语句: LC=120m

RC=50

VON=8

VOFF=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 可对其它参数设置类似的信息,这对将来本模型的用户的应用有好处,他们可以清楚应当输入什么,

以及什么是缺省值。 对于继电器开关部件的处理方式是一样的。

Page 28: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 25 -

陈斌文设计 DESIGNED BY CHEN BINWEN

后,在退出 ISIS 之前,经常将您的设计备份到一个备份目录中,以防您丢失您的模型文件(MDF)或后来才发现您的模型中的错误。

Page 29: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 26 -

陈斌文设计 DESIGNED BY CHEN BINWEN

7. 数字元件建模教程

7.1 简介

在本教程中,我们将对 74123TTL 单稳多谐振荡器进行建模。下一节将简要介绍该器件,如果您不

熟悉它,可以仔细阅读下一节。 实际上,我们将要对三个器件进行建模:74123(标准 TTL),74LS123(低功耗 Shottky TTL)及74HC123(高速 CMOS TTL)。所有这三个器件都有同样的功能,其不同之处在于它们的过渡特性,

所以它们都可以采用同一个等价电路进行建模。该等价电路只使用数字基本元件对象,它们都来自

于 DSIMMDLS 库,其整体特性、功能与瞬态响应都与相应的 74XX123 器件相一致。名称 74XX123表示三个器件中的一个,我们将通过这个通用名称来指代相应的模型。我们将通过指定等价电路的

映射值来对三种器件不同的时间特性进行建模。ISIS 之后在使用该模型时将会映射得到正确的时间

值,该值将由使用该模型的 Value 字段(或器件的 VALUE 属性)来决定。 本建模的全部例子位于 Samples\Tutorials 目录下的 DMODTUT1.DSN 工程中。

7.2 74123 单稳多谐振荡器

74123 TTL 单稳多谐振荡器包括两个独立的单稳多谐振荡器。每个单稳有一个负脉冲触发器(A)、一

个正脉冲触发器(B)、一个过载清零(MR)、两个时钟输入(CX 与 CX/RX)及互补输出(Q 与/Q)。在一

个触发器输入端给定一个适当的触发条件,则输出端将产生一个方波脉冲,其宽度由连接到设备的

CX 与 CX/RX 管脚的阻容网络所决定。因为在建模时,我们不会使用该网络,我们将不会进一步讨

论这些管脚及其功能。 器件及其真值表如下图所示:

请注意,当A与B都有输入时,在MR输入端的一个上升沿可触发单稳,74123也是一个可重触发的单

稳:当一个输出脉冲开始后,该脉冲可能会因为器件的再次触发而延长,如下图所示:

Page 30: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 27 -

陈斌文设计 DESIGNED BY CHEN BINWEN

单稳首先由A端的一个下降沿触发(此时MR与B端都为高电平),通常这会在输出Q端产生一个脉冲,

如QA波形所示。然而,B端的一个上升沿(MR为高而A为低)将再次触发该单稳,如果此时没有产生输

出脉冲的话,则它会在Q输出端产生一个脉冲,如图中QB波形所示。如果此时已经有一个输出脉冲,

则两次触发产生的输出脉冲将叠加,形成图示中的QAB波形。

7.3 设置测试环境

在开始设计单稳的模型之前,我们要做的第一件事是设计测试电路,如下图所示:

该测试电路中包括一个我们将建模的器件对象(U1:A,一个74123单稳)、支持测试所需的必要电路(在此,我们所需要的仅仅是三个数字信号发生器及两个电压探针)及一个可以显示测试结果的数字图

表。如截图所示,我们已经命名数字信号发生器,并添加了相应的探针,因为到此为止,我们还没

Page 31: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 28 -

陈斌文设计 DESIGNED BY CHEN BINWEN

有做任何测试,所以图表中还没有数据。信号发生的的属性(INIT, WIDTH 等)都是任意设置的:在 A、

B 端将产生一系列的脉冲,而在 MR 端开始不起作用,而在 31us 之后,MR 有效。如果这些不满足

要求,我们可以找到它,然后简单地修改信号发生器的属性值,产生相应的输出脉冲,或者在适当

的时候复位一下。 现在,我们设置好了测试环境,可以真正地动手对我们的目标器件进行建模工作。

7.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的子模块。下图所示为我们将用作为我们的单稳的

全部等价电路:

Page 32: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 29 -

陈斌文设计 DESIGNED BY CHEN BINWEN

直接进入该电路。其中AND_3与PULSE器件都是从DSIMMDLS库中所选取的数字基本器件,可通过

Device Library Selector对话框进行选择,也可以通过Edit菜单下的Pick Device/Symbol菜单项。Input与Output端口可通过选中Terminals图标后处理。 后DEFINE与MAP ON脚本通过选择Script图标进行放

置,它可以在ISIS内进行编辑,也可用外部文本编辑器进行编辑,具体请参阅ISIS手册中的Placing & Editing Scripts。

7.5 等价电路概述

后续小节将解释等价电路的工作原理,包括其功能与瞬态响应,还包括使用等价电路进行数字器件

建模时的一些常见陷阱的说明。

7.5.1 功能建模

电路包括一个可产生触发时钟的 AND_3 门器件,一个脉冲基本器件,它的主要任务是处理脉冲与

再触发。这些器件都是来自 DSIMMDLS 库中的数字基本器件。 该电路与其父器件的管脚相连,即其 Input 与 Output 端口与父器件中相同名称的管脚相连(如 A、B、Q 等)。互补输出端/Q 通过编辑端口并置其名称为$Q$来表示,可参阅 ISIS 手册中 Making a Single Element Device 部分,其中有关于如何使用$符号来完成上横线的表示。在我们的例子中,我们知道

所有的父器件的管脚名称,因为它们都是可见的。然而,如果我们建模的目标器件不满足这个条件,

即其中包含隐藏管脚,则我们可以通过选中父器件,然后单击我们所关心的管脚左侧末端,则其相

应信息就会显示出来。器件的 Edit Component 对话框将按平常方式进行显示,但在其右侧端是管脚

Page 33: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 30 -

陈斌文设计 DESIGNED BY CHEN BINWEN

名称的明细、数值下标及电气类型(还有器件的库名称)。取得备注信息后,可以按 CANCEL 按钮退

出对话框。 为使 A 的输入反相,可通过在 AND_3 中使用 INVERT 这个数字基本元素,而不必使用一个单独的

反相器器件。在器件模型中的属性赋值语句可以使 D0 输入反相,因此会将输入端置为低。这种方

法简化了电路,并可提高仿真分析的速度。 在等价电路中无法判断连接到父器件的 RX/CX 与 CX 输入端的值,因此也无法使用这些器件来确定

模型中的输出脉冲宽度 (当然,也可将模型创建为混合模式模型) 。实际上,我们将要求模型用户

在父器件的属性列表中指定一个时间常数值。 当对一个设计生成网络表时,如果 ISIS 找到任何一个父器件的管脚与子模块的端口不匹配,则它会

产生一个警告(如我们忘记放置它们,或录错了名称)。注意,对于父器件的每个管脚,ISIS 只检查

那些至少有一个相似名称的端口,它不会报告其它与父器件管脚名称不匹配的端口。 尤其是,当不止一个端口引用了父器件的同一个管

脚,请小心注意:这种错误(在使用 MR 时,名称

CLR 已经被使用过了)不会被报告。为避免我们的

等价电路中出现网络表中的警告信息,我们将放置

两个端口,将其命名为 RX/CX 及 CX,并将它们接

地(将它们悬空也会正常工作)。 完成功能模型,我们 后需要做的是编辑 PULSE基本元素,将其属性赋值,即 RETRIGGER=TRUE。在缺省情况下,如果输出脉冲已经生成,则在时钟

输入时,PULSE 基本元素将忽略过渡过程,然而,

将其 REGRIGGER 属性进行赋值为 TRUE,将导致基本元素在 CLK 输入时,会将任何已有的输出

脉冲扩展为一个新的过渡过程。

7.5.2 瞬态模型

创建功能模型之后,我们现在需要添加一些时间特性来正确处理模型的过渡过程,我们不会对保持

时间建模。我们将要建模的时间参数包括时钟 (即,A、B 或 MR 的一个合理边缘)对输出 Q 与/Q 的

延迟,与 MR 到输出 Q 与/Q 的延迟。PULSE 基本元素支持直接这些模型属性,因此,不需要再针

对输出进行别的技术性处理(如采用 DELAY 基本元素)。 对PULSE基本元素的时间属性的赋值操作可以通过编辑器件,在Edit Component对话框的Properties编辑框中录入相应的赋值语句。我们需要赋值的属性名称在 PULSE 基本元素的文档中列出。我们

可以按字面意思(即逐字替代)方式进行赋值,例如,如果我们对 74LS123(不是 74123 或 74HC123)进行建模,我们可能会录入以下赋值语句: TDCQ=22n

TDCQB=32n

TDRQ=20n

TDRQB=28n 这对于 74LS123 来说,会正常工作,但有两个缺点。第一个缺点在于该模型不能应用于 74123 或

74HC123,这些模型可能会有正确的功能表现,但其时间特性却不对。第二个缺点在于模型的用户

无法在父器件(使用这些模型的器件)中修改这些缺省的时间值(由 TGQ 与 TGQB 属性指定),也无法

初始化这些值(由 INIT 属性指定)。这两个缺点的解决方法是使用映射值而不是直接使用常量值进行

属性的赋值操作。一个映射值是匹配的<>符号及其括起来的简单属性名称。例如,赋值语句: TDCQ=<TD_CLK_TO_Q>*2

Page 34: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 31 -

陈斌文设计 DESIGNED BY CHEN BINWEN

表明属性 TDCQ 赋值为映射值<TD_CLK_TO_Q>的 2 倍。当 ISIS 在运行仿真前将模型的网络表(即MDF 文件)链接到主模块的网络表中时,它会将映射值(即<>符号及其包围的属性名称)用其属性的

值来代替。这种代替是按字面(逐字替代)方式进行的,例如,如果属性 TD_CLK_TO_Q 按如下方式

进行赋值: TD_CLK_TO_Q=10n+20n 则属性赋值语句 TDCQ=<TD_CLK_TO_Q>*2将被替换为 TDCQ=10n+20n*2 其中,字符串”<TD_CLK_TO_Q>”替换为字符串”10n+20n”,ISIS 不会试图解析赋给映射属性的值。

尽管 TDCQ 属性由一个表达式进行赋值,该赋值仍会工作,因为所有的属性赋值都会被假定是一个

DSIM 的表达式,在使用之前会自动计算。然后,因为 DSIM 的计算策略中,乘法操作比加法操作

的优先级要高,所以 DSIM 将会处理该表达式为 10n+(20n*2)=50n,并不是所期望的结果!如果您

担心发生这种错误,您可以按如下方式声明初始化赋值语句: TDCQ=(<TD_CLK_TO_Q>)*2 在参数映射后,该表达式将扩展为(10n+20n)*2,其结果为正确的 30n*2=60n。 一般地,如果您既是模型的设计者,又是该模型的唯一使用者(也就是说,您设计给您自己用),则

上述问题也就不成其为一个问题。然而,如果您觉得这样的问题确实会发生,您就可以采用防御性

的建模方法。 映射值的属性可以采用以下两种方式之一进行赋值:作为父器件的一个属性,或者在等价电路中通

过 DEFINE 或 MAP ON 脚本。如果一个属性同时采用了这两种赋值方法,由在父器件中的赋值操作

具有 高优先级。这种优先策略是很重要的,可以使得用户能够修改缺省值。例如,我们可以在子

模块的 DEFINE 脚本中的一条属性赋值语句定义一个缺省值,用户还可以在父器件的属性列表中通

过指定一个其它的值来达到修改该赋值语句的效果。 因此,在我们的等价电路中,我们对所有的 PULSE 基本元素模型赋予了映射值: TDCQ=<TDCQ>

TDCQB=<TDCQB>

TDRQ=<TDRQ>

TDRQB=<TDRQB>

TGQ=<TGQ>

TGQB=<TGQB>

INIT=<INIT> 这些映射时间值通过 MAP ON 脚本进行赋值: *MAP ON VALUE

74123 : TDCQ=19n, TDCQB=27n, TDRQ=18n, TDRQB=30n

74LS123 : TDCQ=22n, TDCQB=32n, TDRQ=20n, TDRQB=28n

74HC123 : TDCQ=29n, TDCQB=29n, TDRQ=31n, TDRQB=31n MAP ON 脚本将比较关键字 MAP ON 后的属性名称与冒号左边的字符串(不区分大小)。发现匹配后,

取得冒号右边直至行尾的所有属性赋值语句。如果您有更多的属性赋值语句,不能在一行中写完,

可以利用续行符’\’继续在下一行录入属性赋值语句。 *MAP ON VALUE

74123 : TDCQ=19n, TDCQB=27n, TDRQ=18n, \

TDRQB=30n

74LS123 : TDCQ=22n, ...

如果冒号左边没有与相应的命名属性匹配的字符串,则没有属性赋值语句会起作用。这种情况下,

Page 35: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 32 -

陈斌文设计 DESIGNED BY CHEN BINWEN

可能的结果是网络表链接器会报告一个映射值无法被映射,因为未定义相关的属性。居然还有需

要这种效果的情况,比如希望这些映射值必须由用户在父器件中进行赋值。如果您希望在 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 属性指定,因此我们用映射值<TC>作为时间常数对其赋值。因为所有的 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>为 INIT属性中的值,它在 DEFINE 脚本中定义为”?”。DSIM 看见问号后,忽略所有的赋值语句,然后使用

模型的缺省值——在此,INIT 属性值为 0,或 TDCQ(B)的一半作为 TGQ(B)属性的缺省值。请注意,

模型关心首先计算 TDCQ,然后才是 TGQ 的缺省值,没有必要要求属性赋值语句来完成这件事。

Page 36: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 33 -

陈斌文设计 DESIGNED BY CHEN BINWEN

7.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 按钮。

7.7 在其它设计中使用模型

现在,我们已经创建了模型。在后续设计中,无论何时,如果我们希望建立 74XX123 TTL 的模型,

我们所需要做的就是,编辑元件实例对象,并在其属性列表中添加以下属性赋值语句: MODFILE=74XX123.MDF 我们也有可能还想设置相应的脉冲宽度,这时,我们只需再添加一个以下形式的属性赋值语句: TC=500n

Page 37: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 34 -

陈斌文设计 DESIGNED BY CHEN BINWEN

其中,MODFILE=这条赋值语句告诉 ISIS 这样的信息:当创建仿真网络表时,应当删除该元件,而

加入 74XX123.MDF 模型文件中的内容。该过程也被称为网表链接,因为它涉及到 ISIS 将模型文件

链接到设计方案的仿真网络表中。它包括以下两个关键步骤: 1. 与单稳元件相连的所有连接都到模型文件中的相应名称对应的网表对象。 2. 模型文件网络表中的所有映射属性值都将用以前所描述的内容进行替代。正如我们所说明的那

样,当一个属性同时在元件实例对象(即使用模型的器件)中与相应的模型文件网络表中被赋值,

将使用前者。因此,对于上面的 TC 属性赋值语句,等价电路中的 WIDTH=<TC>将扩展为

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。其类型缺省为字符串,但因为我们知道它是一

个时间常数,故可做以下改变: 描述说明为单稳时间常数 类型为浮点型,表明期望浮点数 限制为正,非零,表示不允许设置为负值或 0

点击 OK 以关闭 Edit Device Properites 对话框,然后再次点击 OK 按钮以将该器件保存到您的用户器

件库(或其它库)中。描述说明与范围的改变效果将在您下一次编辑 74HC123 类型器件时显现。 本方法的强大之处在于,它可以使您将您的模型参数作为库的部分定义进行文档化。 后,在退出 ISIS 之前,经常将您的设计备份到一个备份目录中,以防您丢失您的模型文件(MDF)

或后来才发现您的模型中的错误。

Page 38: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 35 -

陈斌文设计 DESIGNED BY CHEN BINWEN

8. 混合模式建模教程

8.1 简介

在本教程中,我们将针对 555 计时器进行建模。尽管这一部分可以完全采用模块器件进行建模,但

我们自己的体验表明一个混合模式模型进行仿真时将速度快 4 倍。555 器件也是一个学习建模的好

例子,它需要使用 ADC 与 DAC 基本元素。 简便起见,我们假定您已掌握基本的建模技巧,如设置测试环境,包括适当的探针与图表。我们不

建议任何人去创建一个混合模型,除非他们已经熟练掌握如何创建一个纯的模拟模型与纯的数字模

型。

8.2 设置测试环境

下图所示为 555 模型的一个合适的测试环境。实际上,555 有两种工作模式(单稳态与非稳态),因此,

没有必要设计一个电路能测试这两种工作模式。然而,基于我们此处目的,标准 555 振荡电路就足

够了。

因为该电路为一个自激振荡器,因此不需要信号发生器作为激励源。需要特别注意的只有一个,即

电容 C1 必须为初始放电状态,否则 PROSPICE 将进行注定会失败的尝试:寻找一个初始稳定条件。

程序将强制设置电容未接地节点的属性为零初始条件。 图表所示为 555 开始振荡时的波形。

8.3 555 的结构示意图

555 的内部结构示意图如下图所示:

Page 39: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 36 -

陈斌文设计 DESIGNED BY CHEN BINWEN

其中,主要包括一个阶梯电阻,两个比较器,一个 RS 翻转器及放电开关。阶梯电阻定义了 1/3 与

2/3 的比较电压基准,它与阈值电压(TH)及触发电压(TR)进行比较。比较器输出将流入 RS 翻转器,

后者可由 RESET 管脚复位到低电平。反相器的输入为输出缓冲与通过一个集电极开路三极管的接

地放电管脚。

8.4 等价电路

将 555 的结构图转化为等价电路图就可以建立起 555 的工作模型,如下图所示:

Page 40: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 37 -

陈斌文设计 DESIGNED BY CHEN BINWEN

需注意以下几点: 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 来说,可以在本地定义为原理模型的一部

分。然而,您应当选择为它选择一个不会被其它模型使用的名称。

Page 41: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 38 -

陈斌文设计 DESIGNED BY CHEN BINWEN

8.5 使用模型

使用混合模式模型的过程与使用纯模拟模型或纯数字模型的过程极其相似。在这个例子中,父器件

将需要两个属性定义:一个是 MODFILE,一个是时间公差。在正常情况下,您可以将 MODFILE设置为一个隐藏属性,而将 TTOL 属性开放给用户以便他能进行编辑。 更多有关属性的定义,在 ISIS 相关文档中有说明。

Page 42: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 39 -

陈斌文设计 DESIGNED BY CHEN BINWEN

9. VSM 建模教程

9.1 简介

在本节中,我们将进行一个简单的 VSM(即基于 DLL)的建模过程:READOUT 对象,将之加入到

ACTIVE.LIB库中,并将之设计成为一个仪表基类,由它可派生出不同的AMMETER与VOLTMETER对象。在进行本节工作之前,您应当非常熟悉在 PROSPICE 中进行传统的模拟与数字建模的原理与

技术,并且掌握如何在 ISIS 中使用 Active 器件以向模型中添加图形功能。当然,还有一个要求就是

您具备一些 C++编程的能力。 READOUT 模型是为使用 RTVPROBE 或 RTIPROBE 基本元素的电气功能而设计的,因此只在代码

中需要实现 IACTIVEMODEL 接口。探针对象将处理实际的测量工作,而将一个 READOUT 对象同

时当成电压计与电流计的方式更具优势。

9.2 创建 VOLTMETER 部件

创建 READOUT 模型的第一部工作是在 ISIS 中制作库部件,并可将之用在原理图中。简单起见,

在此我们将只制作一个简单的电压计。

此处使用了三个基本的图形对象:

作为 ISIS 的一个纯静态库部件,器件符号本身应与其实际情况相同,将确定该电压计在电路未

仿真分析时应如何展现; 其它两个对象为 Active 器件图元符号。READOUT_0 表示电压计的非工作状态,而 READOUT_1

则提供了 VSM 模型代码画出实际数值的基础。

9.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 对象,分别确定其负载电阻与所测电

Page 43: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 40 -

陈斌文设计 DESIGNED BY CHEN BINWEN

压的乘积因子。如果您要制作一个兆伏表,您可以将缺省值设置为 1000。 PRIMITIVE 属性可以使 PROSPICE 将电压计直接表示成一个 RTVPROBE,这里没有模型文件,也

不需要基于 DLL 的电气模型。 请注意,如果您希望实现电气模型,您应当使用 MODDLL 属性以指定一个 DLL 文件名,这样,还

是需要属性 PRIMITIVE,因为 VSM 电气模型也是一个基本元素。

9.4 VOLTMETER 的 Active 模型设置

后,在 Make Device 对话框中的 Active Model 标签需按如下界面内容设置:

Name Stem 项将匹配两个图元符号,同时也作为 VSM 模型 DLL 的名称。选中 Link to DLL 复选框,

其目的在于告知 ISIS:电压计的 VSM 图形模型应当在 READOUT.DLL 中去找。

9.5 创建 C++工程

下一步工作是为 READOUT.DLL 创建一个 C++工程。 您所做的工作将有赖于您所使用的编译器以及模型的复杂度,但一般而言,您需要创建一个头文件,

一个 C++源代码文件,并设置您的 IDE 以便生成一个 32 位的 DLL。 您还需要确保在您的编译 INCLUDE 的路径中,存在 VSM API 头文件 VSM.HPP。

9.6 头文件

对于本模型而言,头文件相当小,如下所示: #include <vsm.hpp>

// Product ID value obtained from Labcenter:

#define READOUT_KEY 0xXXXXXXXX

class READOUT : public IACTIVEMODEL

{

public:

// Implementation of IACTIVEMODEL

VOID initialize (ICOMPONENT *cpt);

ISPICEMODEL *getspicemodel (CHAR *device);

IDSIMMODEL *getdsimmodel (CHAR *device);

VOID plot (ACTIVESTATE state);

VOID animate (INT element, ACTIVEDATA *newstate);

Page 44: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 41 -

陈斌文设计 DESIGNED BY CHEN BINWEN

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 一

节。

9.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 接口对模型进行授权处理。如果一个模型不能被成

功授权,仿真器将不会针对它进行任何后续服务工作。

9.8 模型初始化

在许可服务完成模型的授权之后,ISIS 将调用模型的 initialize 函数,将向其传递一个 ICOMPONENT接口。它将链接到电路图中的电压计器件。在绝大多数情况下,该模型将保留该接口,以便其它成

员函数使用。 VOID READOUT::initialize (ICOMPONENT *cpt)

{ // Store ICOMPONENT interface and initialize.

component = cpt;

// Get origin and style for readout text

BOX textbox;

cpt->getsymbolarea(1, &textbox);

textorg.x = (textbox.x1+textbox.x2)/2;

Page 45: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 42 -

陈斌文设计 DESIGNED BY CHEN BINWEN

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 函数中使用。

9.9 组合图形/电气模型

VSM API 不仅提供了 READOUT 模型中所使用的图形功能,还提供了电气功能,供同一个 C++模型类使用。通过使用多重继承可完成这种整合功能,如实现一个派生于 IACTIVEMODEL 与

ISPICEMODEL 的类。以下两个函数使得一个图形模型能够返回其电气接口。只不过在本节例子中,

它们都返回 NULL。 ISPICEMODEL *READOUT::getspicemodel (CHAR *) { return NULL; }

IDSIMMODEL *READOUT::getdsimmodel (CHAR *) { return NULL; }

9.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)

Page 46: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 43 -

陈斌文设计 DESIGNED BY CHEN BINWEN

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 函数并没有重画电压计的其它部件,它只是改变那些需要被重画的部分。

9.11 事件处理

在 VSM 模型中,还可能通过 actuate 函数来响应鼠标或键盘事件。因为 READOUT 模型并不需要响

应它们,因此,它简单地返回 FALSE。 BOOL READOUT::actuate (WORD key, INT x, INT y, DWORD flags)

{ return FALSE;

}

Page 47: Proteus VSM SDK - pudn.comread.pudn.com/downloads184/ebook/865613/ProteusSDK.pdfProteus VSM SDK 系 统: 图形平台 子 模 块: 数字电路分析 时 间: 2009-06-23 陈斌文设计

编写人:陈斌文 - 44 -

陈斌文设计 DESIGNED BY CHEN BINWEN

10. ACTIVE 器件

10.1 简介

ISIS 独特地提供了 Active 器件技术,通过该技术,您能自己创建可在仿真器中展现动画效果的新库

部件。这极大地增强了电路动画演示效果,因为您不再局限于系统通过硬编码实现的一小部分的动

画器件。 如果您已经熟悉在 PROTEUS 中创建 ISIS 库部件与仿真模型,则您会觉得创建新的 Active 器件的原

理也很通俗易懂。然而,就象创建一个好的仿真模型一样,为能达到 佳效果,也要求您精通电子

学且想象力丰富。 希望您具备以下技能:

熟悉 ISIS 的 2D 图形技术,包括运用图形格式,以及如何调整颜色、线宽、填充方式等。更详

细的介绍请参阅 ISIS 手册 能创建普通的库器件。同样,在 ISIS 文档中有详细说明 能创建仿真模型(MDF 文件)。本书中的模拟与数字建模教程是 好的学习教材。

一共有两类 Active 器件 指示器:它们通过图形方式响应仿真过程中发生的事件。例如灯泡、LED 及逻辑探针。指示器

可有 n 种状态,也可以只有两种状态,它们可以被父器件管脚直接控制,也可被更复杂的仿真

模型中的探针所控制。 激励器:它们可以响应鼠标操作,其动作将改变电路的电气状态。例如开关、电位计以及逻辑

状态输入。激励器可以是瞬态的,也可被锁存起来,它们可以有任意数目的状态。

10.2 指示器举例 - 灯泡

LAMP 模型是既简单又好的指示器例子。