本章是Cadence IC 5.1.41是设计 的简明入门教程,目的是让读者在刚接触该软件的时候对它的基本功能有一个总体的了解。本章主要内容如下:[1] 启动Cadence IC前的准备;[2] Command Interpreter Window (CIW, 命令行窗口);[3] Library Manager 设计库管理器;[4] Virtuoso® Schematic Editor电路图编辑器简介;[5] Virtuoso® Analog Design Environment (ADE) 简介。
1.1 启动前的准备
要在Unix/Linux使用Cadence IC 5.1.41工具应当保证以下的条件:
[1] 保证Cadence IC 5.1.41已经由管理员正确地安装在电脑上;并且软件授权密钥已经设置 完成。
[2] 在Shell中设置了正确的环境变量。
必须将Cadence IC的安装路径加入Shell环境变量,Cadence IC 5.1.41才能正常运行。以Cshell为例,Cadence IC被安装在了/tools/cadence/ic5141,则需要在~/.cshrc文件中加入这样的路径配置语句: setenv ic50 /tools/cadence/ic5141 set LD_LIBRARY_PATH=($ic50/tools/lib $ic50/tools/dfII/lib $ic50/tools/tcltk/ tcl8.0/lib $LD_LIBRARY_PATH)
set path = ($ic50/tools/bin $ic50/tools/dfII/bin $ic50/tools/dracula/bin $path)
也可以把路径的设置写在一个单独的配置文件中。例如,将上面的配置写在配置文件/env/cadence_5141中,则可以在~/.cshrc中加入一行
source /env/cadence_5141
1.1.1 启动配置文件:.cdsinit
.cdsinit文件是在Cadence IC中启动时运行的SKILL脚本文件。该文件配置了很多Cadence IC 5.1.41的环境配置,包括使用的文本编辑器、热键设置、仿真器的默认配置等。如果Cadence IC没有找到.cdsinit文件,软件中的快捷键等功能都不能适用。 Cadence IC搜索.cdsinit文件时,首先会搜索程序的启动路径,然后搜索的是用户的主目录。例如:在~/project目录下运行icfb&,则首先Cadence IC会尝试载入~/project/.cdsinit。如果这个文件不存在则会尝试载入~/.cdsinit。
默认配置文件路径:
1.1.2 其他配置文件 如果需要,在程序的运行目录建立其他的启动配置文件,如.cdsenv、.cdsplotinit、display.drf等。这些配置文件分别有自己的用途: .cdsenv: 用于设置启动时的环境变量; .cdsplotinit: Cadence IC打印和输出图型的设置; display.drf: 版图编辑器中显示颜色等的配置; 这些配置文件的搜索路径首先是程序启动目录。其次是用户的主目录。这些配置文件的样本位置如下: .cdsenv: .cdsplotint: 1.1.3 设置设计库配置文件:cds.lib 设计库(library)配置文件放置在Cadence IC程序的运行路径下,比如要在~/project目录下运行Cadence IC,则需要在该目录下建立cds.lib文件。这个文件设置的是Cadence IC中的设计库的路径。 常用命令格式: z DEFINE 格式:DEFINE <库名> <库路径> z INCLUDE 格式:INCLUDE <另外一个cds.lib的全路径> z # 行注释符,在行首加入则该行无效。 如果cds.lib文件是空文件,则Cadence IC的设计库中就会是空的。为了添加基本元 件库,需要一些基本元件。可以在cds.lib文件中加入一行: INCLUDE 1.2命令行窗口(Command Interpreter Window,CIW) 完成上述设置之后,就可以在命令行下运行Cadence IC5.1.41软件: icfb & Cadence IC的命令行窗口(又称为命令解释器,Command Interpreter Window, CIW)就会出现: 图1.1 命令行窗口(CIW) 该窗口包括几个部分:菜单栏、输出窗口、命令行、鼠标命令、提示 1.2.1 命令行窗口(CIW)菜单 CIW菜单展开包含以下选项,下面将介绍其中比较重要的一些选项: 2 图1.2 CIW菜单展开内容 z FileÆNew 建立新的设计库(Design Library)或者设计的CellView; z FileÆimport 导入,可以导入的信息包括gds版图、电路图、cdl网表、模型库甚至verilog代码等。 z FileÆOpen 打开“Cell”的“View”,根据不同的“View”的类型,Cadence将选择适当的编辑器:例如,如果一个“View”是一个符号(symbol)则Cadence将选择Virtuoso Symbol Editor打开; 如果是一个电路图(schematic)则Cadence会选择Virtuoso Schematic Editor来打开;如果是一个版图(layout)则会用Virtuoso Layout Editor打开;如果是Verilog或Verilog A代码则会用文本编辑器打开。 z FileÆExport 导出文件。同样,可以将Cadence设计库导出成各种文件类型。 z FileÆExit 退出icfb工作环境。 3 z ToolsÆLibrary Manager 很实用的图形化设计库浏览器,界面如图1.3所示。后面将详细介绍其中的内容。 图1.3 “Library Manager”界面 z ToolsÆLibrary Path Editor 图1.4“Library Path Editor”界面 这是一个用来修改设计库配置文件(cds.lib)的图形化界面,如图1.4所示。在这个界面中可以直观地对cds.lib文件进行修改和添加。 z ToolsÆVerilog Integration 里面有2个选项分别是Verilog-XL和NC-Verilog,是两种Verilog仿真环境,用于对混合信号电路和数字电路的仿真。 z ToolsÆAnalog Environment 该子菜单用于模拟电路仿真,里面的选项包括: Simulation: 打开Virtuoso® Analog Design Environment (ADE) 4 图1.5 “Analog Environment”界面 Calculator:用于对仿真结果进行进一步计算的计算器工具 Result Browser: 仿真结果浏览器 Waveform: 仿真结果绘图程序。这些工具的使用将在各个章节中介绍。 z ToolsÆTechnology File Manager 用于管理设计库和模型库之间的对应关系设置。 z 图1.6“Technology File Manager”界面 Options 该菜单内的选项主要用于配置icfb的环境并保存/载入需要的配置。该菜单中还提供了用于管理产品秘钥的工具。 1.2.2 CIW中的其他部分 输出窗口,如图1.7所示。主要显示一些操作的输出信息和提示,包括一些状态信息和警告信息、错误提示。这些提示有助于分析操作中的问题。 命令行:在这一栏中可以运行SKILL语言的命令,利用命令可以对界面上的任何项目进行控制,从电路编辑到仿真过程,都可以用SKILL语言控制。 图1.7 CIW中的输出窗口与命令行 CIW中的输出窗口和命令行和在一起实际上就是一个命令界面。命令语言是SKILL语言。图形界面只是在命令行基础上的扩展。在图形界面上的任何操作或者快捷键都是通过命令行来最终实现的。因而理论上用命令行可以完成一切操作,当然能实际应用中这样做并不方便。 命令行的好处是可以采用语言控制复杂的操作,并且可以进行二次开发,将命令与界面整合起来。 5 这样就提高了整个软件的可扩展性和易用性,这也是Cadence IC这个软件成功的重要原因。鼠标命令如图1.8所示。这一栏显示的是鼠标单击左、中、右键分别会执行的SKILL命令。 图1.8鼠标命令窗口 提示栏:这一栏以”>”起头,如图1.9所示,显示的是当前正在Cadence IC程序的功能提示。 图1.9 提示栏窗口 以下根据一般设计过程中的使用顺序,对一些常用工具进行详细介绍。 1.3 Library Manager设计库管理器 首先介绍的是设计库管理器(Library Manager)。图1.3中的窗口是设计库管理器的窗口,如果打开平时隐藏的分类(Category)面板和文件(Files)面板则显示界面如图1.10所示。该界面分为如下几部分:菜单栏、面板显示选项栏、设计库浏览面板和信息,以下将一一介绍。 图1.1 设计库管理器的分类(Category)面板和文件(Files)面板 1.3.1 设计库浏览面板 设计库浏览面板如图1.10所示。面板处于设计库浏览器的中部,从左到右共分有4栏,分别为设计库(Library)、类别(Category)、单元(Cell)、显示(View)栏。右面的3栏中每一栏中显示的都是该栏的左邻栏中选定的项目的展开。例如:图中的分类栏中显示的就是设计库“analogLib”中的内容,而单元栏中显示的就是分类“Parasitics”包含的内容,同样“View”栏中列出的就是单元“pcapacitor”所包含的内容。 另外,还可以打开“Show Files”选项,显示各个单元和“View”所对应的文件。也就是图中面板管理器右下角的两栏,标题是“Files in Library”和“Files in Cell”。这里解释一下各个层次的含义,以便理解这些栏的用途。 z 设计库是在cds.lib文件中定义的。一个设计库中可以含有多个单元。合理的设置设计库可以 提高文件系统中的设计的可管理性。例如可以将每个项目中的电路放到各自的设计库中。这 6 样在今后的数据备份、导入导出中都回节省很大精力。 z 单元则是一个电路的基础单位,一个单元就相当于电路的一个模块,这个模块即可以是低层 模块,表示部分电路;也可以是顶层模块,表示整个电路。 z 同一个单元在设计中需要不同的表示方法,例如一个模拟电路模块,在设计内部结构的时候 可能需要将它表示为电路图;而在引用该模块的时候则需要将其表示为一个器件符号;在绘制版图的时候可能需要将该模块表示为版图的一个部分。所以一个单元就必须有多种表示方式,称为“Views”。上面举例的模块就可以有电路图(schematic)、器件符号(symbol)、版图(layout)三个(View)。在设计中应当保证同一个“Cell”的各个“View”是等效的。 z 分类是在设计库和单元之间人为增加的一个虚拟层次,当一个设计库的规模比较大的时候, 可以用分类的方式理清设计库中单元的组织。在小规模的设计中分析往往不必要,这时可以在面板显示选项栏取消显示分类(Show Category)选项,分类就会被跳过。 在该面板中,用鼠标右键点击设计库、单元或者“View”都会有弹出菜单出现。其中包含了很多常用命令,比如打开、删除、移动、复制、属性等。这些操作都有完整的图形界面向导,这里就不再详细介绍。 1.3.2 设计库浏览器菜单 菜单中有很多命令和设计库管理器面板的右键菜单中的命令是相同的,这里主要介绍其中只有菜单中才有的命令 z Files菜单: FilesÆNewÆLibrary/Cell View/Category: 新建设计库/单元View/分类 FilesÆSave Defaults/Load Defaults: 将设计库浏览器设置保存在.cdsenv文件中 FilesÆOpen Shell Window: 打开Shell命令行窗口,在管理设计库的时候经常要用 到一些文件操作,这时可以打开Shell窗口,在命令行中进行文件操作。 z Tools菜单 ToolsÆCopy Wizard: 高级的设计拷贝向导。这个向导支持多个模式,可以在界面 的第一行的复选框选择。 简单模式(Simple),如图1.11所示。在这个模式上面的“Add To Category”栏可以指定拷贝过去的单元或设计库被自动加入某个分类。 “Destination Library”下拉菜单指定了拷贝的目标设计库。 图中对话框中列出的是所有要拷贝的文件和单元的列表。在该列表中的每一行都可以通过选择最左面的绿色园点禁用该项的拷贝操作,再次点击将重新启用该文件的拷贝操作。下面的三个按钮用于快速选择需要的设计单元。 设置完成后点击OK进行拷贝操作。 7 图1.2简单模式拷贝 层次结构拷贝(Hierarchical)和精确组织结构拷贝(Exact Hierarchical)模式如图1.12所示。 图1.3 组织结构拷贝和精确组织结构拷贝 通过指定顶层单元,这个命令可以将一个一个单元连同其中直接或间接引用的所有单元一起拷贝。不同的是,层次结构拷贝时将包括这些单元中的所有“View”;而精确组织结构拷贝中只有指定的“View”会被拷贝。 “Add to Category” 和 “Destination Library”选项的作用和简单拷贝中的作用相同。 根据“View” (By View)的拷贝,如图1.13所示。这种模式下,将按照指定的过滤(Filter)选项拷贝某些设计单元。 8 图1.13 根据“View”的拷贝 根据configuration(By Configuration)的拷贝,如图1.14所示。这个模式下,将根据config view中的配置来选择需要拷贝的单元和View。 图1. 4根据“configuration”的拷贝 ToolsÆRename Reference Library 命令窗口如图1.15所示。这个命令可以用于批量修改设计中的单元之间的引用,例如图中演示的就是将设计库SDIC_bandgap中所有引用自analogLib中的单元改为引用自设计库tsmc35mm。 9 图1.15 “Rename Reference Library”拷贝 图1. 5 “Delete by view”窗口 ToolsÆDelete by view 命令窗口如图1.16所示。这个菜单命令提供了一个过滤器用于删除设计库中指定的“View”。 ToolsÆAccess Permission 命令窗口如图1.17所示,用来修改设计单元或者设计库的所有权和权限。 图1.17 “Access Permission”窗口 ToolsÆCatagories… 一些用来建立、修改、删除分类的命令 ToolsÆLibrary Paths 调用图1.4中的Library Path Editor z View: ViewÆFilter:显示视图的过滤 ViewÆRefresh: 刷新显示 1.4 Virtuoso® Schematic Editor电路图编辑器简介 在电路设计的过程中,模拟电路的设计主要是依靠电路图编辑器(Schematic Editor)完成。电路图编辑器可以通过在CIW或者设计库管理器中新建或者打开单元的电路图 (schematic)“View” 10 打开。其基本界面如图1.18。下面介绍电路图编辑器的使用方法。 图1.18 电路编辑器 1.4.1 电路编辑器界面简介 电路编辑器界面主要包括状态栏、菜单、工具栏、工作区、鼠标命令栏、提示栏组成。 状态栏:如图,界面标题之下的第一行是状态栏,内容包括正在运行的命令、选定的器件数、 运行状态、仿真温度和仿真器类型。 菜单栏,工具栏:分别位于状态栏下方和屏幕的左边缘,里面的选项是电路设计中的命令。 工作区:就是图中黑色的部分,是实际用来绘制电路图的部分。 鼠标命令:提示鼠标的左中右键分别对应的命令。 提示:显示的是当前命令的提示信息。 1.4.2 常用命令 在一般电路设计中常用的命令一般有以下几个: z 添加器件: 调用方法: 快捷键“i”; 菜单AddÆInstance; 按钮 界面: 图1.19 “Add Instance”窗口 在Library和Cell栏输入需要引用的单元,也可以点击Browse按钮,打开一个设计库浏览器,从中选择希望引用的器件或者单元,界面如图1.19所示。 输入器件类型之后,窗口中将会出现一些器件的初始参数设置。可以在其中直接输 入需要的器件参数,其界面如图1.20所示。 11 图1.20 输入器件的参数设定 这时将指针指向电路编辑器的工作区将会有器件的符号跟随指针移动。 点击按钮Rotate、Sideways、Upside Down则在工作区中显示的器件符号会相应旋 转/水平反转/垂直反转。 这时在工作区单击,器件最终位置将被确定,符号成为一个器件的实例。 在工作区单击之前,如果在“Array“栏的“Rows”、“Columns”文本框中填入大于1的数字则最后加入的将是一个指定器件的阵列。阵列中每个实例的参数都是对话框中的指定值。注意:添加时只能添加器件的符号视图(Symbol View)。 z 添加连接线 调用方法: 快捷键:w/W分别是细线/粗线; 菜单:细线、粗线分别是 AddÆWire (Narrow) 和AddÆWire (Wide); 按钮:细线、粗线分别是 和 调用命令后,在工作区单击鼠标左键确定连线的第一个端点,然后拖动鼠标,将看 到连线的走线方式。此时点击右键,可以在不同的走线方式之间切换;再次点击鼠标左键,确定第二个端点,连接线被确定。 在确定第二个端点之前,如果按F3键会调出详细设置如图1.21所示的对话框。其中可以设置走线方式、锁定角度、线宽、颜色、线型这几个选项。注意细线和粗线的区别是细线的线宽为0,而粗线为0.0625。 12 图1.21 连接线的设定 z 添加端口 调用方法: 快捷键:p 表示pin; 菜单:AddÆPin; 按钮: 调用该命令后,将显示如图1.22所示的对话框。根据对话框中的提示,可以选择端口的名称、类型、是否总线、用途、放置方法。 图1.22 端口的设定 z 添加标签(Label) 调用方法: 快捷键:l;菜单:AddÆLabel;按钮: 调用命令之后,显示如图1.23所示的选项对话框。输入标签名字之后,如果将鼠 标指向电路图,则会出现随鼠标移动的标签;鼠标点击后标签位置被确定。如果标签被放置在连线上,则该连线会被用标签的名字命名。 图1.23 标签的设定 z 移动、拷贝器件 这里有3种类似的命令: [1]拷贝(Copy),将选定部分复制;[2]拖动(Stretch),移动选定部分,该部分与电路其他部分保持连接;[3]移动(Move),移动选定部分,该部分与其余部分不保持连 13 接。 调用命令: 快捷键:c/m/M分别表示拷贝/拖动/移动 菜单:EditÆCopy / Stretch / Move 分别是拷贝/拖动/移动 按钮:拷贝 ;拖动 操作三个命令基本相同: 首先选定需要操作的电路部分,包括器件、连线、标签、端口等;然后调用命令;这时点击鼠标左键确定基准点;这时移动鼠标发现选定部分随鼠标指针移动,移动量相当于基准点到现在指针所在点之间的距离;再次点击鼠标左键放下选定的电路或者按ESC键取消。 在确定基准点之后,拖动的过程中,可以点击F3键选择详细属性,其界面如图1.24 所示。 图1.24 拷贝、拖动、移动功能的属性 在3个命令中都有旋转、镜像、锁定移动方向的选项;另外,在拷贝的Array选项中可以设定为将选定部分复制为阵列形式;而在拖动的选项中可以选择选定部分与其它部分的连接线的走线方式。 注意:可以用鼠标在工作区框选电路的一部分;按住Shift键框选表示追加部分;按住Ctrl键框选表示排除部分;可在同一个icfb中打开的不同电路图之间使用拷贝和移动命令;拖动命令只能在当前电路中进行。 z 删除器件 调用方式:键盘:del键;菜单:EditÆDelete 选择电路的一部分后调用删除命令,选定部分将被删除 z 修改器件属性 调用方法: 键盘:q键; 菜单:EditÆPropertiesÆObjects…;按钮: 选定电路的一部分,然后调用该命令,则会出现属性对话框,如图1.25所示。 14 图1. 6 修改器件属性 在Apply To(应用于)栏的第一个下拉菜单中可以选择设置应用范围,是只修改当前 器件(only current)还是应用于所有选定器件(all selected);第二个下拉菜单可以选定需要修改的元素类型,是设置器件实例(instance)还是连接线(wire segment) 下面根据元素的属性有不同的选项。按需要进行修改即可。 z 放大、缩小、适合屏幕 键盘:[键、]键、f键分别表示缩小、放大、适合屏幕 菜单:WindowÆZoomÆZoom out by 2 / Zoom in by 2 缩小、放大 WindowÆFit 适合屏幕 按钮: 分别是缩小、放大 z 下降层次和回退 可以通过这几个命令在相互引用的母、子模块之间切换 这里有3个命令 下降编辑,用编辑模式进入一个子模块(如果没有足够的权限会自动改为只读 模式); 下降只读,用只读模式进入一个子模块; 回退,如果下降到了子模块中,可以用这个命令回到上一层。 调用: 键盘:E/e/Ctrl+E分别是编辑、只读、回退 菜单:DesignÆhierachyÆDescend Edit / Descend Read / Return分别是编辑/只 读/回退 z 保存 有几种保存的方式:保存(Save)、检查完整性并保存(Check & Save)、另存(Save As) 调用方法 键盘:S / X / Ctrl+s键分别是保存、检查并保存、另存 菜单:DesignÆSave / Check and Save / Save As分别是保存、检查保存、另存 按钮: 分别是保存、检查并保存 注意:电路仿真中经常依靠电路图编辑器的检查功能查找一些明显的错误,所以一般应该使用检查并保存选项,而不要强行保存。 z 撤销和重做(只支持最近一次操作的撤销和重做) 键盘:u / U键分别是撤销和重做 15 菜单:EditÆUndo / Redo分别是撤销和重做 按钮: 分别是撤销和重做命令 1.4.3 常用标准器件 在Cadence IC软件中自带有一些标准的器件。这些器件在电路设计中经常用到,这些器件都存放在“analogLib“中。如果找不到这个“Libaray“,则应该按前面1.1.5节最后介绍的方法加入这个库。 z gnd 在电路中表示0电位,和它相连的线线名为gnd,没有设置参数。 z vdd 和它相连的线线名为vdd。这个器件只用来标示等电位,而不是电源。 z vdc/idc 直流电压/电流源,用于为电路提供直流电压/电流。同时还可以提供交流电流,在AC分析中使用。 z vpulse 时变电流源,在DC分析中可以输出固定的DC电压,AC分析中可以输出固定的AC电压,在瞬态分析中可以生成不同占空比的方波、三角波、梯形波、锯齿波。 z nmos4 / pmos4 / pnp 通用4端口NMOS管 / PMOS管 / PNP三极管 注意,在模型名称(Model Name)一栏需要根据不同的工艺库(Model Library)中的定义来指定。 比如:在某个模型中将NMOS模型定名为nvn,PMOS管模型定名为nvp,PNP三极管则为pnp5,则在nmos4器件实例的Model Name栏应当填上nvn、pmos4填nvp、pnp填pnp5,否则电路将不能正确进行仿真。 z res / cap / ind 这三个器件分别是电阻、电容、电感。如果进行简单仿真,这些器件参数设置中不需要指定模型名称,这是这些器件将表现为理想器件。如果需要根据工艺详细仿真,则可以 16 在器件参数设置中,根据工艺模型库中的电阻、电容、电感的模型定义这些器件。 1.5 Virtuoso® Analog Design Environment (ADE) 简介 ADE是Cadence IC的图形化仿真环境。可以用如下方式打开: z 可以在CIW窗口中选择菜单ToolsÆAnalog EnvironmentÆSimulation,这样打开的ADE 窗口中没有指定进行仿真的电路。 z 或者在电路编辑器中选择菜单ToolsÆAnalog Environment,这是打开的ADE窗口中已 经设置为仿真调用ADE的电路图 在介绍仿真的过程之前,先介绍一下ADE的界面。 1.5.1 ADE基本界面 图1.26是ADE的基本界面。窗口中的主要部分已经在图中标出。 图1.26 ADE基本界面 1.5.2使用ADE进行仿真的基本流程 1.选择仿真的电路 如果是从CIW窗口中打开的仿真环境,则需要设置仿真的电路。这时可以: z 在菜单中选择:SetupÆDesign z 或在图形界面中点击按钮: 选择之后弹出如图1.26所示窗口,在其中可以设置需要仿真的电路图在设计库中的路径。 17 图1. 7 选择需要仿真的电路 2. 设置工艺模型 各种工艺制造的继承器件模型参数各有不同。为了使设计和工艺更加匹配,需要使用由代工厂提供的模型库。对默认使用的spectre仿真器来说,应当使用.scs模型库文件。为了配置模型库,可以在菜单中选择SetupÆModel Librarie,然后有如图1.28所示窗口出现。 图1. 8 工艺库文件设置 在这个窗口中可以在“Model Library File“栏输入需要使用的模型库文件名,在Section栏输入该模型文件中需要的段(Section)。 如果模型库文件名路径比较长,可以点击右下角的“Browse“按钮。打开Unix文件浏览器查找需要的模型文件。文件浏览器的使用方法就不再介绍了。 图1. 9 工艺库文件的选择 在文件浏览器中选定需要的文件之后点击ok按钮,文件的路径就会自动填在Model 18 Library File栏,这时点击Add按钮,这个库文件就被加入到中间的列表中。这时,既可以继续添加新的模型库文件,也可以在模型库文件列表中选择一个或几个对其做禁用、启用、修改或删除操作。 3. 设置变量 由于电路中作任何改变之后都需要保存并检查完整性,所以在对电路进行仿真时,经常在电路中定义一些变量作为器件的参数。例如可以将一个MOS管的宽度定义为w=W1,则W1就成为一个设计变量。这些设计变量在仿真中都需要赋值,否则仿真不能进行。 一般设置方法是:在菜单上选择“VariablesÆCopy from Cell View“则电路图中的设计变量名都回被截取进ADE中,并在ADE窗口中的变量栏中列出。 这时点击VariablesÆEdit或在ADE界面中双击任何一个变量或点击按钮 ,图1.30所示 的窗口就会出现。在该窗口中可以完成添加、修改、删除、从设计中截取变量列表等工作。 图1. 10 仿真变量设置 4. 设置分析类型 根据不同的需要,可以对电路进行不同类型的分析。常用的有DC分析、AC分析、瞬态(Transient)分析、噪声分析、零极点分析。其中又以前三种最为常用。 设置仿真的时候,可以点击菜单AnalyzeÆChoose或按钮选择菜单就会打开。 ,如1.31图所示的仿真设置 图1. 11 仿真设置选择窗口 选定需要的仿真类型后,该仿真的基本设置就会显示在对话框中。如果需要修改详细的选项还可以点击右下角的Options按钮。另外,左下角的Enable选项控制一个仿真是否被启用。 19 5. 设置输出 输出控制的是仿真结束后需要用图线或者数值体现出来的结果。主要有2种方法进行设置: z 在菜单中选择“OutputÆTo be plotedÆSelect on the Schematic“,电路图窗口就会出现。 在电路图中选择连线会在输出中添加该线的电压; 选择一个器件的端口则会添加这个端口的电流作为输出; 直接选择一个器件则会把该器件的所有端口电流都加入输出 z 也可以手动添加输出,在菜单中选择OutputÆEdit或按钮 可以打开如下窗口。 图1. 12 输出端的设置 在该窗口中可以添加需要的输出的表达式。如果表达式比较复杂,还可以点击Calculator栏的open按钮,打开Calculator(后面还会详细介绍使用方法),在其中编辑好表达式后,在上图窗口中点击Calculator栏的Get Expression按钮,表达式就会被截取到Expression栏。 6. 仿真过程 所有设置都完成后,点击菜单SimulationÆNetlist & Run或者点击按钮没有修改,也可以直接选择SimulationÆRun或者按钮 ;如果电路 。2种方法都可以开始仿真。 在仿真过程中,如果需要可以点击菜单SimulationÆStop中断仿真。 如果没有需要的输出结果,可以在输出窗口和CIW窗口中看输出信息,分析错误类型。 如果一切正常将有绘图窗口弹出。如果希望重新出图,可以点击菜单“ResultÆPlot Outputs“或者按钮 ,将出现如图1.33所示的界面。 20 图1. 13 仿真结果显示界面 7. 其它设置 z 右下角有一个下拉菜单可以改变出图方式:是否覆盖上次的图像、是否使用新的字窗口 输出、是否用新窗口输出。 z 菜单的DesignÆTemperature可以用来设置仿真的环境温度。 8. 保存和导入仿真状态 z 点击菜单SessionÆSave State可以保存当前的仿真配置。对话框如下,可以选择具体需 要保存的信息。保存的状态被存放在~/.artist_states/ 图1. 14 仿真状态的保存 z 点击菜单SessionÆLoad State可以导入以前保存的仿真配置。对话框如下,可以选择需 要的状态,进行导入。 21 图1. 15 导入以前的仿真状态 z 点击菜单SessionÆSave Script可以将现在的仿真设置保存成OCEAN脚本,利用该脚本, 可以在命令行执行仿真任务。 22 第2章 瞬态分析(Transient Analysis) 2.1 功能基本介绍 瞬态仿真分析是在给定的输入激励下,在设定的时间范围内计算电路的时域瞬态响应性能。要验证设计电路的稳定性,速度,精确度等问题必须经过各种情况下的瞬态分析才能做出正确的判断。在本章中介绍如何设定瞬态仿真以及瞬态分析。读者在具体的电路设计中需要根据实际情况,合理地设置激励源和仿真参数才能真正评估电路性能。在瞬态仿真的参数设置过程中,主要是在仿真精度和仿真速度之间做出合理的折衷。读者可以按设计电路的要求定制仿真器计算时的容差、积分方式、步进大小等控制精度。同时,还可以对电路初始状态,输出数据保存量等条件参数设置。 2.2 仿真参数设置 参照第1章1.5内容,打开“Analog Design Environment” Æ “Analyses”Æ“tran”,基本参数设置界面如图2.1所示。主要内容包括用于控制仿真时间的“Stop Time”和用于控制仿真速度和精度的“Accuracy Defaults(errpreset)”设定。 图2.1 瞬态仿真的参数设定 2.2.1基本参数设置 z “Stop Time”:仿真终止时间的设定。 在默认设置中瞬态分析总是从t = 0时刻开始仿真。所以只需设置仿真终止时间。时间单位是秒。所以,如果要表示毫秒数量级,在数据后面需要跟上毫秒的单位缩写“m”。其他时间数量级单位类似。 z “Accuracy Defaults”(errpreset):仿真精确度和速度设定。 可选择三种仿真精确度:宽松的(liberal),适中的(moderate),保守的(conservative)。其中,“liberal”的仿真速度最快,但是精确度最低。这种精度的仿真适合于数字电路或者是变化速度较低的模拟电路;“moderate”作为仿真器默认的设置,其精确度类似于用SPICE2计 23 算的仿真结果;“conservative”的具有最高的精确度但速度最慢,适合于敏感的模拟电路仿真。 如果读者需要比默认“conservative”更高的精度,可以由读者自己 “Option”选项中将容差参数(reltol)设置为更小的数值。“Option”在稍后的章节中有介绍。上述三种系统默认的精度设置实际上包含容差(reltol),相对参考(relref),积分方式(integration method),最大时间步长(maxstep),截断误差比(lteratio)等参数,具体设定如表2.1所示。在仿真日志文件中,都可以看到相应的参数设置情况。具体各个子参数的含义和设置也将在后续高级设置章节中介绍。 表2.1 三种仿真精度下的参数设置情况 图2.2 瞬时仿真参数设置界面 2.2.2高级参数设置 点击图2.1界面中的“options”,可仿真控制参数进行设置。 z “Options”: “Spectre”仿真软件允许读者能够自定制仿真控制参数,包括时间步进,精确度,积分方式等高级设置。图 2.2是参数设置窗口。仿真器的“Options”控制参数包括: “SIMULATION INTERVAL PARAMETERS” “start”:仿真开始时刻。仿真器默认开始时刻为0s。 “outputstart”:输出波形时刻。如果用户仿真时间很长,而只需观察部分时间段内 系统瞬态特性,可以通过该参数控制数据输出。 24 “TIME STEP PARAMETERS” “step”:最小的时间步进。默认值为0.001×(终止时刻-起始时刻) “maxstep”:最大时间步进,根据“errpreset”中精度设定取得默认值。 “INITIAL CONDITION PARAMETERS” 用户可以利用设置节点状态的初始化语句(ic statement)或电容、电感等模型内的初始条件参数 (ic parameters) 两种方式为瞬态分析设置初始条件。如果没有特殊设置,仿真器将采用直流分析(DC analysis)的结果作为初始条件。 “ic”:设定通过何种方式设置初始条件。 z ic=dc:忽略任何设置的初始条件,直接采用直流分析的结果。 z ic=node:忽略电容、电感等器件上设置的初始条件,而通过“ic statement”设置的初始条件将被采用。 z ic=dev:忽略由“ic statement”设置的初始条件,电容、电感上的初 始条件将被采用。 z ic=all:两种初始条件都将被采用。当设置条件发生冲突时,“ic parameter”比“ic statement”的优先级更高。 一旦用户指定了初始条件,“Spectre”仿真器将通过一次直流分析来计算电路的实际初始状态。在这个过程中,“Spectre”根据初始条件在相应的节点上施加一个电压源和电阻串联。当读者通过“ic statement”来描述电路初始状态时,有可能存在不一致性问题。比如说在没有电容连接到地的节点上设置电压或者是在没有电感连接的支路上设置初始电流。如果设置时发生不一致问题,那么在计算时将发生电路状态突变。也就是说,电路将从实际的初始条件突变到设置的条件。所以,用读者自定义初始条件时,应当避免上述情况,否则仿真器将会产生收敛性问题。 在上文的说明中,提到了初始化语句“ic statement”和初始化参数“ic parameter”的概念。“ic parameter”的设置很简单,如果用户打开一个电容的参数设置窗口可以看到“Initial condition”。在其中填写初始的电容电压即可。注意,这里只能填写电压值。而如果是电感的初始条件,需要设置的是电流值。在表2.2中,给出了有关器件端口的指代符号。 图2.3 电容的参数设置 “ic statement”的格式是:ic signalName=value .举例如下: ic Voff=0 X3.7=2.5 M1:int_d=3.5 L1:1=1u 上句表示的是:在节点Voff上的初始电压是0V;在子电路X3的第7号节点上电压值为 2.5V;在MOS管M1的漏端电压是3.5V;在电感L1上流过的初始电流是1μA。 25 表2.2 器件的端口定义 由于篇幅有限,只能对初始条件设置做一些简单的介绍。可以参考cadence文档的“Spectre simulator user Guide Æ 7. Control Statement”做进一步的了解。 “skipdc”:选择跳过直流分析。在没有直流分析的情况下,电路的初始解将采用通 解,或是从由“readic”定义的文件中读取初始条件。如果“readic”没有定义,那么将从“ic statement”中获取初始条件。不论是否跳过直流分析,器件上的初始条件肯定都会被采用。如果一个节点没有被赋予初始条件,将自动被仿真器设置为0。该参数同样也会引起仿真器收敛性问题。推荐不使用该参数。具体选择项可详见“Spectre Circuit Simulator ReferenceÆ3. Analysis Statements” “readic”:从文件中读取初始条件。 “CONVERGENCE PARAMETERS” 当电路在仿真时存在无限快的响应速度(例如一个电路节点不存在任何电容),“Spectre”仿真器可能会产生收敛性问题。为了避免这种问题,需要设置“cmin”参数给该节点设置一个合理的对地电容值。 “readns”:从文件中读取电路瞬态仿真的初始估计解。 “cmin”:设定每个节点对地的最小电容。 当对一个电路进行多次仿真时,建议使用“write”和“readns”参数。并且将两者的文件名命名相同。这将使直流分析的收敛的速度加快。 “STATE FILE PARAMETERS” (从?界面) 状态文件(State File)主要有两个用处: A、 将保存下来的状态文件用于后续的仿真分析中。比如在一次瞬态分析中,保存下终 止时刻的信息,在下一次瞬态分析中,能够以该时刻作为起始点继续做后续时间端的分析。 B、 用户能够利用状态文件自动完成初始条件的更新。 读者能够利用仿真器将一次分析的初始时刻工作点或者是终止时刻工作点生成状态文件。当然,用户也能手动编写一个状态文件。在“Spectre”仿真器中,可以设置三个有关“State File”的参数,如图2.4所示。 26 图2.4 “State File Parameter”的设定 “write”:将瞬态分析的初始状态解写到指定的文件中去。 “writefinal”:将瞬态分析的最终解写到指定文件中去。 “ckptperiod”:在指定的周期去作周期性的分析。 图2.5“Spectre.ic”文件例 图2.6 “Spectre.fc”文件例 在图2.5和2.6中分别给出了“Spectre.ic”和“Spectre.fc”文件。这两个文件的目录是 27 ~/simulation/cell name/spectre/schematic/netlist。路径中“cell name”是用户仿真的电路单元名。“Spectre.ic”中记录的初始时刻状态值。“V0:p”和“V3:p”表示两个电压源的正端电压值,“VIN”,“VOUT”,“vdd!”表示电路中各个节点电压值。“Spectre.fc”记录终止时刻值,文件中的字符和数字的含义和“Spectre.ic”中相同。 下面的例子解释了状态文件的格式。注意:这里的例子是以命令行形式给出的,用户在使用图形界面是只需在相应的参数里设置即可。 altTemp alter param=temp value=0 Drift dc param=temp start=0 stop=50.0 step=1 readns=\"ua741.dc0\" write=\"ua741.dc0\" XferVsTemp xf param=temp start=0 stop=50 step=1 \\ probe=Rload freq=1kHz readns=\"ua741.dc0\" 第一行命令表明首先做了一次在温度T=0情况下的直流分析(DC Analysis)。用户需要把该次分析的结果保存在状态文件“ua741.dc0”中。 然后做温度从0到50度的扫描。 第三次做传输函数分析(Transfer Function Analysis)时需要将温度重新设置为0。如果不使用“State File”,那么由于温度发生了变化,将导致重新计算直流工作点。如果系统较大,仿真速度受到很大限制。可是如果直接采用保存下来的“State File”,“Spectre”可以直接利用里面保存的在温度T=0状态下的直流解来计算传输函数。即便是电路有一定程度上的改变,仿真速度也会比从头开始计算要快得多。 “INTEGRATION METHOD PARAMETERS” (从何界面?) 该参数用于设计人员根据仿真速度和仿真精确度选择合适的积分方式。“Spectre”仿真器提供3种不同的积分方式:“backward-Euler”,“Trapezoidal”,“The second-order Gear”。根据这3种方式一共组合出6中模式,分别为“euler”,“traponly”,“trap”,“gear2only”,“gear2”,“trapgear2”。表2.2表示了各种积分方式和模式之间的对应关系。 表2.3 各种积分方式和模式之间的对应关系 如果用户需要高精度仿真,可以选择“trapezoidal”积分方式。但是,这种积分方式在容差(error tolerances)很大的时候并不是一种很好的选择。这是因为它对前一个时刻计算产生的误差非常敏感。如果在容差很大而且要求速度较快的情况下,最好还是选择“Second-order Gear”积分法。 “Second-order Gear”积分法比“backward-Euler”法更加精确。但两种方法都会过高估计系 28 统的稳定性。“Second-order Gear”积分法的这种误差效应要相对小一些。比如当用户需要仿真一个高Q值的谐振器例如振荡器或滤波器时,使用“Second-order Gear”的结果会表现出阻尼振荡,而“backward-Euler”则表现出更强的衰减。所以,在这种情况下,应该采用“trapezoidal”积分法。 “ACCURACY PARAMETERS” “relref”:相对收敛标准的参考,而默认值是从“errpreset”得到。包括如下几个选 项: z “relref = pointlocal”,即,relref=局部点:这个设定用来定量比较每个节点的值 相对于待分析节点上当前数值的相对误差。 z “relref = alllocal”,即,relref=局部所有点:定量比较过去的所有时间点的值 相对于最大节点值的相对误差。 z “relref = sigglobal”,即,relref=所有信号点:定量比较每个电路上信号值相对 于电路中所有信号中的最大值的相对误差。 z “relref = allgolbal”:同上,另外对每个节点最大悬浮电流值设定比较方程,此 时不能满足基尔霍夫电流方程。 “lteratio”:比率系数,用于计算Newton容差中的LTE容差。 2.22.8“ANNOTATION PARAMETERS” “states”:统计学分析。在实际芯片生产过程中,工艺的变化会影响到产品的性能。 而统计学分析则帮助设计师把握这种工艺和性能之间的关系。在设计时,如果采用的器件模型带有统计分析参数,既是说这些模型中带有表征工艺误差的数据,就可以进行统计学分析。这种分析的实质是对工艺参数设置不同的数值后多次仿真,就可以找出设计对工艺的依赖程度。这种统计学分析也被称作蒙特卡罗分析。 “annotate”:注释选项 2.22.9“OUTPUT PARAMETERS” “Spectre”仿真器一般情况下会把所有仿真数据都保存下来。但有时候并不需要所有的数据量。 “Spectre”允许用户选择保存需要的数据。当然,如果需要得到更精确的结果,也可以增大数据输出量。可以如下几种方式来控制数据保存量: “strobing”:在保存点之间设置一个时间间隔。虽然仿真器计算过这些数据,但是 并没有将其保存输出。 “skip time point”:用户能够选择让仿真器保存多少个点。 “compression”:将恒定信号的重复记录删除。 “outputstart”:设置仿真器从何时开始保存数据。 “Infotime”:允许用户保存某些自定义时刻的工作点数据。如果需要保存多个时刻 的工作点,填入时间矢量之间是以空格隔开。如果用户填入了某些非法数据,“Spectre”会在输出窗口中报错。如果仿真成功,点击“Results Print”Æ“Transient Operating Point”菜单,然后在电路图中选取一个器件,将会显示在指定时间点时刻的工作数据。由于“OUTPUT PARAMETERS”参数一般不经常使用,因此详细内容请参考“Spectre”的用户手册。 29 2.22.10“NEWTON PARAMETERS” “maxiters”:在每个时间步最多进迭代多少次。 “restart”:如果有任何条件发生变化,是否从最开始重新计算直流解。如果不重新计 算,将直接采用上一次的初始猜测。 2.22.11“CAPTAB PARAMETERS” “captab”: 电容列表参数,界面如图2.7所示。在完成一次“Spectre”仿真后, 用户能够得到有关电路负载电容的信息。在瞬态分析中,用户能够通过“infotimes”参数来指定在某些时刻点保存电路中的电容信息。如果没有特殊指定,仿真器将默认保存终止时刻的电容列表。如果点击该参数,会显示对该参数的细节设置。 图2.7 电容列表参数 “timed”:是否将使用“infotimes”参数来保存电容列表。 “threshold”:需要保存的电容的最小值。电路中电容值小于该阈值的电容就不会出 现在输出文件中。默认值为0.0。 “detail”:可以被设置为节点电容(node),节点对地电容(nodetoground),nodetonode 三个选项。 “sort”:排序方式。 图2.8给出了一个电容列表的例子。该列表中记录的是仿真终止时刻的信息。 图2.8 电容列表例 该电容列表所描述的电路如图2.9所示:其中“net19”节点是指“M0”MOS管的栅端。“Vdd!”表示的节点电容是MOS管“M1”的源端。“Vout”节点为图中所示的输出端。由于MOS管的各端口寄生电容和该MOS的工作状态有端口电压有关,所以,电容列表中包含了固定电容(fixed)和可变电容(variable)两项。总电容(sum)为两者的加和。 30 图2.9 电容列表(图2.8)所描述的电路 2.3 常用于瞬态仿真的激励信号源及其参数设置 在本章的功能介绍部分曾经提到瞬态仿真时需要读者自行设计多种电路工作环境,多种工作状态的验证过程。这里介绍几种常用于瞬态仿真的激励源。包括脉冲信号、分段信号、指数信号、正弦信号等。这些激励源都可以在“analogLib”中找到。这些信号源都是以电压形式给出的,也可使用电流形式的激励源。 2.3.1 脉冲信号“vpulse” “vpulse”信号用于产生周期性方波。在模拟电路设计中,可用于做为MOS管开关的控制信号,也可用来表示电源上电或者电源跳变过程等。打开“vpulse”的参数列表如图2.10所示。该参数列表包括两部分“Property”和“CDF Parameter”。其中“Property”部分在从“analogLib”中选中信号源后由系统自动填写。值得注意的时,在“View Name”一栏中应当采用“symbol”。图2.10中“CDF Parameter”只截取了一部分有关瞬态仿真的参数设置。在表2.4中给出了主要参数的名称,含义,实例和单位等信息。图2.11中给出了根据实例设置的周期方波仿真曲线。 31 图2.10 脉冲信号“vpulse”的设定 表2.4 “vpulse”的设定参数意义 参数 Voltage 1 Voltage 2 Delay time Rise time Fall time Pulse width Period 含义 起始电压 脉冲电压 延迟时间 上升时间 下降时间 脉冲宽度 周期时间 实例500m5 100μ0 0 50μ 100μ 单位V V s s s s s 32 图2.11 表2.4设定的脉冲信号“vpulse”波形 2.3.2分段信号“vpwl” 当用户需要自己定义线性分段波形是是可以利用“vpwl”信号源。它允许用户能够定义分段时刻和该时刻的电压值。该信号源的设置参数和“vpulse”信号基本相同。在表2.5中给出了主要参数的名称,含义,实例和单位。并且根据设计实例,在图2.12中给出了该信号源的仿真曲线。 表2.5 分段信号““vpwl”的参数设定 参数 含义 实例 单位 Number of pairs of points 转折点数目 4 Time 1 第1个转折点时间 0 s Voltage 1 第1个转折点电压 2 V Time 2 第2个转折点时间 250μ s Voltage 2 第2个转折点电压 2 V Time 3 第3个转折点时间 500μ s Voltage 3 第3个转折点电压 5 V Time 4 第4个转折点时间 1m s Voltage 4 第4个转折点电压 5 V 33 图2.12 信号源的仿真曲线 2.3.3“vexp” 指数信号在某些设计中也会用到。同样,这里给出了主要参数以及相应的仿真曲线。需要注意的是,这里的“Damping factor”是以时间为单位给出的。表2.7给出了各参数和输出电压之间的换算关系。其中“Dti”表示“Delay time i”,“Dfi”表示“Damping factor i”。 表2.6 参数 含义 实例 单位 Voltage 1 起始电压 0 V Voltage 2 峰值电压 5 V Delay time 1 上升(下降)延迟 0 s Damping factor 1 上升(下降)时间常数 100μ s Delay time 2 下降(上升)延迟 500μ s Damping factor 2 下降(上升)时间常数 100μ s 表2.7 时间 电压值 0~Dt1 V1 Dt1~Dt2 V1+(V2-V1)(1-exp(t-Dt1)/Df1) Dt2~Stop V1+(V2-V1)(1-exp(t-Dt1)/Df1)(exp(t-t2)/Df2) 34 图2.12 2.34“vsin” 正弦信号也是一种在瞬态仿真中常用的信号。在该信号的参数中,“Damping factor”的单位是“1/s”。正弦信号也是在交流小信号分析(AC Analysis)中重要的激励源。用户需要区别的是瞬态信号激励和交流信号激励不同的含义。 表2.8 参数 含义 实例 单位 Amplitude 振幅 3 V Frequency 振荡频率 10 Hz Delay time 延迟时间 0 s Damping factor 阻尼因子 1 1/s 35 图2.13 2.35“vsource” “vsource”激励源是一种通用型电压源,可以用于完成上述所有激励源的功能。在下图中“source type”菜单中选择所需要的激励源即可,同时按前述的方式填写各激励源的关键参数。 36 图2.14 2.4 瞬态仿真实例 采用最简单的RC充放电电路来完成一次瞬态仿真,该电路图如图2.15所示。电阻和电容都采用“analogLib”中的理想电阻模型和理想电容模型。激励源是“vpluse”周期性方波。采用“conservative”的精度。由于没有设置初始条件,仿真器会先执行直流分析,将其结果作为初始解,仿真去结果如图2.16所示。 37 图2.15 图2.16 38 第3章 直流分析(DC Analysis) 3.1 功能基本介绍 直流分析是其他所有仿真的基础。在“Tran Analysis”、“AC Analysis”等分析的过程中,首先就是先要计算直流工作点。在这里介绍的直流“DC Analysis”中,实际包括两个方面的分析:[1.]一个是直流工作点计算;[2.]另一个是直流特性扫描。 直流工作点计算例? 对于直流工作点分析,仿真器会计算各个节点的电压,各支路电流,包括MOS管的各个直流参数,例如跨导(gm),阈值电压(Vth),工作区域(region)等。而在直流特性扫描中包含了电路的温度(Temperature),设计变量(Design Variable),器件参数(Component Parameter),器件模型参数(Model Parameter)等多个参数的特性仿真。 3.2 仿真参数设置 如果需要将直流工作点信息保存下来,在“DC Analysis”中确定“Save DC Operating Point”。如果要绘制特性曲线,需要设置扫描变量和扫描范围。参数设置选项如图3.1所示。 图3.1 “DC Analysis”参数设定 “Temperature”:温度扫描,观察电路直流工作点随温度飘移情况。 “Design Variable”:设计变量扫描,在设计电路时,设计师往往需要将某些设计参数设置为变量,方便设计和修改。比如,可以将电源电压(VDD),MOS的栅长(L)和栅宽(W)设置为变量,使用变量扫描,观察电路在各种设计下的工作情况。 “Component parameter”:器件参数扫描,和“Design Variable”扫描比较类似。不过,器件参数扫描不用预先将电路中某器件参数设置为变量(Variable)。 “Model Parameter”:如果用户能够对库文件模型进行修定,可以使用该参数扫描。但是,由于库文件都是直接由生产工厂直接提供,所以,不推荐使用这项扫描。 z z z z 39 在选定扫描参数后,用户需要进一步设置扫描范围(Sweep Range),扫描方式(Sweep Type)等。 以点击扫描“Temperature”为例,如图3.2所示,可以看到可选参数包括扫描范围(Sweep Range)和扫描方式(Sweep Type),以及是否加入特殊点计算(Add Specific Points)。。 图3.2 “Temperature”扫描设定 z “Sweep Range”:指定扫描范围,可以包括指定起始值(Start-Stop)或指定中点值 (Center-Span)两种方式。 z “Sweep Type”:指定扫描方式。步进可以是线性的(Linear),也可以以对数方式 (Logarithmic)步进。如果采用“Linear”模式,用户需要通过步进大小(Step Size)或是步进点数(Number of Steps)来控制仿真精度和仿真时间。而如果采用“Logarithmic”模式,仿真器默认的是以10为底的对数。用户也需要通过每个数量级所需步进数(Points Per Decade)或总步进数(Number of Steps)来控制仿真精度和时间。当用户对输出模式没有特殊要求时,可以采用系统默认设置(Automatic)。系统默认的设置是在当终值与初值比小于10时,采用线性模式输出。而在该比例大于10时,采用对数模式输出。三种模式的设置窗口见图3.3。 图3.3 “Temperature”扫描类型的设定 z “Add Specific Points”:加入特殊点计算。在仿真过程中,用户可以指定某些点一定需 要计算,在该选项中添加即可。各点之间用空格隔开。 如果用户选择“Design Variable”或“Component Parameter”扫描,还需要设置扫描的变量名(Variable Name)或器件名(Component Name)和该器件的参数名(Parameter Name)。图3.4是设定界面。在以后的设计实例部分,具体讲解操作过程。 40 图3.4“Design Variable”设定 3.3 设计实例 以一个简单共源级放大器为例说明“DC Analysis”的仿真过程,电路如图3.5所示。直流仿真的激励源使用普通的“analogLib”Æ“vdc”即可。。 3.3.1 设计变量扫描“Design Variable” 在图3.5中,将对M0的偏置电压由3V改变设置为变量“VBIAS”。点击“Design Variable” Æ“Select Design Variable”后会弹出变量选择窗口图3.6。由于电路中只设置了一个变量,所以点击该变量后选择“OK”后,该变量名会出现在“Variable Name”中,再设置好“Sweep Range”和“Sweep Type”后即可仿真。图3.7的仿真曲线表示当变量“VBIAS”从0V到5V变化时输出电压的变化情况。 41 图3.5 共源级放大电路 图3.6 选择扫描变量 42 图3.7 仿真波形 3.3.2 器件参数扫描“Component ” 器件参数扫描和设计变量扫描相类似。点击“Component Parameter”Æ“Select Component”后弹出原理图窗口。用户可以选择MOS管、激励源、地线等各种器件作为仿真对象。如果点击图3.3中的NMOS管M0,会弹出该器件的参数表。图中的引号部分是对相应参数的解释。可以对该MOS的栅长变化作参数扫描。图3.9仿真表示M0管的栅长从1μ到20μ变化时,输出电压变化情况。 43 图3.8 图3.5电路图中的M0管参数 图3.9 M0管的栅长从1μm到20μm变化时,输出电压的变化 有些转移曲线的绘制需要用“DC Analysis”中的参数扫描和其他仿真工具混合使用。比如MOS管的转移曲线就需要“Design variable”和“Parameter analysis”共同使用,仿真结果如图3.10 44 所示。 (需要具体表示设定) 图3.10 MOS管的转移特性 在“DC Analysis”的高级设置中(Option),包括“State File Parameters”、“Output Parameters”,“Convergence Parameters”、“Annotation Parameters”,“CAPTAB Parameters”等。这些参数的含义和设置在第二章中都有介绍,也可以查阅cadence的用户手册。 45 第4章 结果浏览器(Results Browser) 4.1 “Results Browser”的作用 “Results Browser”是一个非常实用的工具,通过它可以读取所有电路节点的电压和端口电流的仿真结果。并且可以对数据进行预处理,在合适的窗口类型中显示。此外,还提供了数据比较,“Y vsY”功能。通过“Results Browser”可以实现以下功能: [1.] 察看仿真结果; [2.] 察看仿真环境设置; [3.] 察看器件工作点特性; [4.] 将结果在特殊的图标格式中显示,例如阻抗图和导纳图; [5.] 将仿真结果中的表达式直接送入到“Calculator”的缓存中。 4.2 “Results Browser”窗口简介 “Results Browser”采用类似“Windows”文件系统的方法,将仿真数据分级保存在各个文件夹中。通过点文件夹,可以将文件夹展开,从而进入下一级文件夹获得更具体的信息。图4.1显示的是“Results Browser”窗口。 图4.1 “Results Browser”窗口 46 4.2.1“Results Browser”的菜单。 表4.1列出了“Results Browser”中的所有菜单和它们的功能。 表4.1 “Results Browser”窗口中的菜单及功能 菜单选项 Open Results Open Graph Open Graph as Plot… Open Graph as Tamplate… 打开仿真的输出结果 以图表的形式打开保存图形 以模板的形式打开保存图形 打开保存的表格 将选中的仿真结果,从“Results Browser”中清除。当只有一个仿真结果时,无需选择,即可将其清除。重新读取仿真结果 保存当前“Results Browser”的设置 关闭“Results Browser”窗口 具体操作 File Open Table Clear Reload Save Session Close 选择输出数据,在运行了“Corner Analysis”或者“Parametric Analysis”后,该选项被激活。可以通过它选择特定功能角或者设计变量值下的仿真结果 在原来窗口的基础上显示新的波形。 清楚原来的窗口中的数据,显示新的波形。 在原来的窗口中,建立字窗口,用来显示新的波形。创建一个新的窗口显示新的波形。 默认方式 直角坐标系 极坐标 阻抗圆图 导纳圆图 实部VS虚部 打开“Calculator” 打开表格 获取帮助文档 Select Data Plot Style Append Replace New SubWin New Win Graph Type Default Rectangular Polar Impedance Admittance RealVsImag Setting Tools Help Help 47 Calculator Table 4.2.2 “Results Browser”窗口中的快捷键 “Results Browser”窗口中的快捷键如图4.2所示,各个快捷键的功能如下: 图4.2 “Results Browser”窗口中的快捷键 z z :打开仿真的输出结果。等同FileÆOpen Results :按照“Plot Style”中选择的方式,以图形的方式显示选中的仿真结果 :打开“Calculator”,如果在“Results Browser”中选择仿真结果。那么该结果的表达式将直接送到“Calculator”的缓存中。 z :选择两个仿真结果,将他们的差值以图像的形式输出。 注意:该快捷键在一个仿真结果表达式存在多个值的情况下失效,例如运行了“Corner Analysis”或者“Parametric Analysis”后。 z :选择两个仿真结果,以“YvsY”的方式输出仿真结果。 注意:该快捷键在一个仿真结果表达式存在多个值的情况下失效,例如运行了“Corner Analysis”或者“Parametric Analysis”后。 z :选择输出数据,在运行了“Corner Analysis”或者“Parametric Analysis”后,该选项被激活。可以通过它选择特定功能角或者设计变量值下的仿真结果。等同于“Setting”Æ“Select Data”。 第一个下拉菜单,如图4.3所示。该下拉菜单是选择图表类型,等同于“Setting”Æ“Graph Style”。注意:该下拉菜单只在选择交流仿真结果时才出现。 48 图4.3 第一个下拉菜单 z 第二个下拉菜单,如图4.4所示。该菜单是对显示的数据进行预处理。其功能类似于 “Calculator”中同名函数。注意:该下拉菜单只在选择交流仿真结果时才出现。 49 图4.4 第二个下拉菜单 Mag:计算仿真结果的幅值。 Phase:计算仿真结果的幅角(-180度至+180度范围计算) WPhase:计算仿真结果的幅角(0度至360度范围计算) Real:取仿真结果的实部。 Imag:取仿真结果的虚部。 dB10:对仿真结果进行“10log n”变化。 dB20:对仿真结果进行“20log n”变化 50 图4.5 第三个下拉菜单 z 第三个下拉菜单如图4.5所示。该下拉菜单是选择创建显示窗口的方式,等同于“Setting” Æ“Plot Style”。 4.2.3 仿真结果保存路径。 如图4.6所示,“Location”栏中显示了当前仿真结果的保存路径。 图4.6 当前仿真结果的保存路径 以前打开的仿真结果的路径将保存在该下拉菜单中,可以通过点击下拉菜单中对应路径,把该仿真结果引入到“Results Browser”中。例如在图4.7中,在下拉菜单中选择了“~/simulation/BIAS_P/spectre/schematic/psf”,发现该仿真结果出现在“Result Browser”中,如图4.7中左栏内的高亮部分所示。 51 图4.7仿真结果的保存路径设定 4.2.4 “Results Browser”窗口的主体部分 “Results Browser”窗口的主体分为左右两栏,左边一栏是”资源管理器”,以树形结构分级保存仿真结果。右边一栏显示当前选中文件夹中的内容。假如该文件夹还包含子文件夹,则在其之前出现“”标记。(该标记可能在打开文件夹后才出现。) 仿真结果通常包含以下内容,如图4.5中左栏所示。表4.2给出了结果名称和其具体内容。 52 表4.2 仿真名称与内容 名称 tran-tran finalTimeOP-info ac-ac dcOp-dc 内容 瞬态仿真中所有节点电压值和选择保存端口的电流值 仿真结束时器件参数的工作点 交流仿真中所有节点电压值和选择保存端口的电流值 工作点的直流仿真,所有节点的电压值和选择保存的端口电流值 工作点的直流仿真,所有器件的参数。在该文件夹下有以器件名命名的子文件夹,分别保存各个器件的直流工作点参数。 直流扫描仿真时,所有节点电压值和选择保存端口电流值。 仿真采用模型的参数 设计电路图中所有元素的器件参数。 输出参数信息。该文件夹下包含以器件名命名的子文件夹,分别包含该器件经仿真器处理后的参数,例如:有效长度(leff),有效宽度(weff),有效电阻值(reff),有效电容值(ceff)等等。 设计参数值 设计变量。该文件夹下包含以设计变量名命名的子文件夹,分别保存各个设计变量的信息。 dcOpInfo-info dc-dc modelParameter-info element-info outputParameter-info designParamVals-info variables 4.3 启动“Results Browser”并读取仿真结果 1) 通过下面任意一种方式启动“Results Browser”。 z 在Unix命令行中键入“wavescan &”命令。 z 在“Calculator”窗口中选择ToolsÆBrowser。 z 在“Waveform”窗口中选择ToolsÆBrowser。 z 在CIW窗口中选择ToolsÆAnalog EnvironmentÆResults Browser。 z 在ADE窗口中选择ToolsÆResults Browser。 然后“Results Browser”窗口弹出。 2) 通过选择FileÆOpen Results或者快捷键“ 如图4.8所示,从而选择仿真结果保存路径。 ”打开“Choose Data Directory”窗口, 53 图4.8 仿真结果的保存路径显示 “Choose Data Directory”窗口打开时,将“icfb”的启动路径作为默认路径。 在ADE的默认设置中,仿真结果保存路径为: “~/simulation/CellName/Simulator/schematic/psf” 其中“CellName”是仿真电路图的名称;“Simulator”是仿真器的名称,默认值为“Spectre”。 如果刚刚结束了一次仿真,“Results Browser”会自动读取其仿真结果。不用进行上述设置。 3) 点击“OK”完成数据读取。 4.4 在“Results Browser”中选择数据 对比图4.9和图4.10,可以发现“Results Browser”中文件管理方式和Windows操作系统中的文件夹系统十分类似。如同在Window操作系统中,在“IC Cadence”的资源管理器中完成文件的选择、打开和切换,在右边被选中文件夹具体内容中,选择数据、子文件夹,或者打开子文件夹。 54 图4.9 “IC Cadence”中的文件管理 图4.10 “Windows”中的文件管理 4.5 输出“Results Browser”中的结果 4.5.1 直接输出仿真结果到“Waveform”窗口。 不对仿真结果进行任何预处理,可以通过以下方法将结果直接输出到“Waveform”窗口中显示。 z 在选中需要的仿真结果后,点击快捷按键“ ”, 即按照“Plot Style”中选择的方式, 以图形的方式显示选中的仿真结果。 z 在选中需要的仿真结果后,点击鼠标右键,此时弹出一个选项菜单,如图4.11所示。 55 图4.11 显示方法的选定 各个选项的功能如下: “Append”:以“Plot Style”为“Append”的方式,显示选中的仿真结果。 “Replace”:以“Plot Style”为“Replace”的方式,显示选中的仿真结果。 “New SubWin”:以“Plot Style”为“New SubWin”的方式,显示选中的仿真结 果。 “New Win”:以“Plot Style”为“New Win”的方式,显示选中的仿真结果。 “Table”:以列表的方式显示选中的仿真结果。 “Calculator”:将仿真结果直接送到“Calculator”的缓存中。 注意:此时,“Results Browser”中对仿真结果的预处理不在生效。例如在图4.11中,第二个下拉菜单选择“Phase”,即输出仿真结果的幅角。这个功能对上述5个选项都有用。但是对于“Calculator”选项,送到“Calculator”中是未经处理过的数据。如果需要显示幅角,则需要在“Calculator”中对该数据使用“phase”函数。 4.5.2 将仿真结果输出到“Calculator”的缓存中 在选中需要的仿真结果后,点击快捷按键“ ”, 即将仿真结果直接送到“Calculator”的 缓存中。也可以使用4.5.1中介绍的,通过鼠标右键,将仿真结果送到“Calculator”的缓存中。 56 4.5.3 输出两个结果的差值。 在选中第一个仿真结果后,点击快捷按键“ ”,此时“Results Browser”将会提示选择另 一个仿真结果,如图4.12中所示。选择第二个仿真结果后,将按照“Plot Style”中的设置输出 两个仿真结果的差值,即“Result1 – Result 2”。 图4.12 输出两个仿真结果的差值 4.5.4 将两个仿真结果采用“Y vs Y”的方式输出 在选择第一个仿真结果后,点击快捷按键“点击快捷按键“ ”,此时“Results Browser” 将会提示选择另一个仿真结果,如图4.12中所示。”选择第二个仿真结果后,将用其作为横轴,输出两个仿真结果。 4.6 MOS管参数名称解释 在“finalTimeOP-info”和“dcOpInfo-info”中都保存了电路器件参数。下面将就MOS管的一些常用参数名称进行解释。 1) type:MOS管类型,可能值为n或p。 2) region:MOS管的工作区域,可能值为0~4,分别对应: 57 3) 4) 5) 6) 7) 8) 9) 10) 11) 12) 13) 14) 15) 16) 17) 18) 19) 20) 21) 22) 23) 24) 25) 26) 27) 28) 29) 30) 31) 32) 33) 34) 35) 36) 37) 38) 39) 40) 41) 1: 关断 2: 线性区 3: 饱和区 4: 亚阈值区 5: 击穿 reversed:MOS管是否反向,可能值为yes或no。 ids (A): 阻性漏源电流 lx4 (A): ids的别名,当MOS管反向时有相反的符号。 lx50 (A):衬源电流。 vgs / lx2 (V):栅源电压。 vds / lx3 (V):漏源电压。 vbs / lx1 (V):衬源电压。 vth (V):有效阈值电压。 lv9 (V):vth的别名。 vdsat (V):漏源饱和电压。 lv26 (V):平带电压(Flat-band voltage)。 lv10 (V):vdsat的别名。 gm / lx7 (S):共源跨导。 gds / lx8 (S):共源输出跨导。 gmbs / lx9 (S):衬底跨导。 betaeff (A/V2):有效β值。 cjd / lx29 (F):漏区衬底结电容。 cjs / lx28 (F):源区衬底结电容。 lx12 (Coul):衬底电荷(Qb) lx14 (Coul):栅极电荷(Qg) lx16 (Coul):漏区电荷(Qd) lx24 (Coul):漏区PN结电荷。 lx26 (Coul):源区PN结电荷。 cgg / lx18 (F):dQg_dVg cgd / lx19 (F):dQg_dVd cgs / lx20 (F):dQg_dVs cgb (F):dQg_dVb cdg / lx32 (F):dQd_dVg cdd / lx33 (F):dQd_dVd cds / lx34 (F):dQd_dVs cdb (F):dQd_dVb csg (F):dQs_dVg csd (F):dQs_dVd css (F):dQs_dVs csb (F):dQs_dVb cbg / lx21 (F):dQb_dVg cbd / lx22 (F):dQb_dVd cbs / lx23 (F):dQb_dVs cbb (F):dQb_dVb 58 42) ron():导通电阻。 43) id / i1 (A):漏端电流。 44) is / i3 (A):源端电流。 45) ibulk / i4 (A):衬底电流。 46) lx5 (A):源端PN结电流。 47) lx6 (A):漏端PN结电流。 48) pwr (W):处于工作点时的功耗。 49) gmoverid (1/V):Gm/Ids 50) lv36 (F):栅源交叠电容。 51) lv37 (F):栅漏交叠电容。 52) lv38 (F):栅衬底交叠电容。 53) lx10 (S):漏区二极管跨导。 54) lx11 (S):源区二极管跨导。 59 第5章 交流小信号分析(AC Analysis) 5.1 功能基本介绍 交流小信号分析(AC Analysis)是用来计算电路的小信号频率响应特性。在分析时,仿真器首先计算电路的直流工作点,然后将电路在工作点附近线性化,并以此计算电路的频率响应。仿真时需要设置专门的交流信号源。类似于直流分析(DC analysis),在交流小信号分析中,设计者同样有“Frequency”、“Design Variable”、“Temperature”、“Component Parameter”,“Model Parameter”等参数扫描选项。 5.2 仿真参数设置 点击“Analog Design Environment”Æ“AC Analysis”,弹出交流小信号仿真参数设置窗口。如图5.1所示。 图5.1 交流分析的设定 注意:如果是做“Frequency”扫描,“Sweep Range”填写的是频带范围。目的是观察电路系统对不同频率信号的响应。而在其他扫描方式中例如“Temperature”扫描中,“Spectre”要求用户指定在某个频率点上进行仿真。因此,用户在“At Frequency(Hz)”中填写仿真频率,而在“Sweep Range”中填写的是温度扫描范围。其他参数扫描的设置也类似如此。 60 图5.2 扫描参变量的设定 5.3、设计实例输出结果观察 以图5.3所示简单放大器作为实例进行交流小信号分析。在放大器设置中,最关心的是它的增益和相位随频率变化的情况。在实际设计中,往往用波特图来表示该放大器的频率特性。 61 图5.3 交流分析实例 在做“AC Analysis”时,必须先给电路设置一个交流信号源。常以“AnalogLib”Æ“vsin”信号为激励源。在图5.3中,由于交流信号是直接从“M0”管的栅极加入,那么在具有交流信号的同时,必须要给该MOS管设置一个直流偏置电压。在信号源中需要设置交流振幅和直流偏置。如图5.4,在“vsin”信号的设置中包括交流信号幅值(AC magnitude),交流信号相位(AC phase),直流偏置电压(DC voltage)等多个选项。“AC magnitude”通常都设置为1V,“-1”表示180°相位翻转。当然,设计者也可以通过设置“AC phase”来表示相位,“AC phase”缺省设置为0。“DC voltage”根据实际电路设置偏置即可。该电路中以1μF电容和1MΩ电阻为负载。 图5.4 交流信号的设置 注意:设计者应当区别在仿真器中交流信号和直流偏置信号的差异。例如图5.3中,如果“M0”的直流偏置电压设置为1.5V,交流幅值设置为1V,该MOS管阈值电压1V。那么“M0”会不会进入到截止区呢(1.5V-1V<1V)?实际上仿真结果显示“M0”管不可能进入截止区。在本章最开始陈述过,“AC Analysis”的前提是先进行了“DC Analysis”。所以,电路状态 62 固定,加入交流信号后不会影响直流工作点。在计算电路交流增益时,仿真器是将输出端的交流信号幅值除以输入交流信号幅值。所以,“AC magnitude”设置为1V是为了方便计算和观察结果,不影响电路工作。那么,如果在实际电路设计输入信号较大,会影响到电路直流工作点该如何仿真呢?这需要设计者在瞬态时域的仿真中进行仔细设计多种最差情况,并做出合理的分析。 仿真结果可以使用“Tool”Æ“Results Browser”观察,如图5.5所示。 图5.5 仿真结果分析 在图5.5中的下拉菜单中,表示多种方式输出。 z “Mag”:幅度绝对值曲线 z “Phase”&“WPhase”:相位曲线,两者不同之处在于“Phase”是从360°开始 作图,而“WPhase”是从0°开始作图。如图5.6所示。 z “Real”,“Imag”:由于频域在数学上往往可以用exp的指数形式表示,所以可以 用实虚数来表示。 z “dB10”,“dB20”:在波特图中幅频特性通常换算成分贝表示。“dB10”,“dB20” 表示对幅度A以10logA和20logA计算结果。如果是电压幅值采用“dB10”,如果是功率增益则需采用“dB20”。一般情况下,在波特图中“dB20”更为常用。图5.3电路的增益曲线如图5.7所示。 对“AC Analysis”中“State File Parameter”,“Output Parameter”等高级设置(Option)详见“tran analysis”的介绍。 63 图5.6 “phase”与“wphase”分析图 图5.7 “Vout”与频率关系 64 第6章 零极点分析(Pole & Zero Analysis) 6.1 零极点分析(Pole & Zero Analysis)简介 零极点分析是分析线性时不变电路行为特征的有效方法,可以应用于模拟电路的设计中。因此,这种方法可以用于确定设计的稳定性。在零极点分析中,网络是用传输函数描述的,对于任何线性时不变系统,传输函数可以表示为: 6.1 类似的,传输函数也可以表示为: 6.2 这里,N(S)的所有的根 (也就是Zi)成为网络的零点。D(S)的所有的根(也就是, Pi)成为网络的极点。其中S表示的是复频率。电路的行为决定于复平面,即S平面,上的极点和零点的位置。极点被称为电路的自然频率。例如: 6.3 这里零点可以使H(S)的值为0,也就是S = 2与S = -1。极点则使 H(S) 的值无穷,也就是S = 0。 当所有的极点具有负的实部,则极点都位于XY平面的左侧。在此情况下,电路被认为是稳定的。图6.1说明的是稳定电路的行为。 图6.1 极点在左平面 图6.2 极点在右平面 65 如果有极点出现于复平面的右侧,则电路是不稳定的,图6.2表示的是这种电路的行为。 想要电路绝对稳定,需要电路的所有极点都有负的实部。如果有极点具有正的实部,输出信号就是无界的,不可能稳定。 在Spectre仿真器中设定零极点分析, 1. 在Virtuoso® Analog Design Environment (ADE)的菜单中选择“Analyses”Æ“Choose”。 “Choosing Analyses”— “选择分析类型”对话框出现,如图6.3所示。 2. 选择“pz”。“选择分析类型”对话框刷新显示内容,显示出零极点分析的各种选项。 图6.3 “PZ”分析窗口 3. 在对话框的“Output”节选定输出端口。在如图6.4所示的下拉菜单中可以选择“Voltage” 或者“Probe”类型。指定电压输出的方法如下: a. 在“output”下拉菜单中选择“voltage” 图6.4 “PZ”分析端口设定 66 b. 点击“Positive Output Node” 一栏的“Select”按钮,然后在电路图中点击一个网 络作为输出的正端。然后点击“Negative Output Node” 一栏的“Select” 按钮,然后在电路图中点击一个网络作为输出的负端。 要指定一个电流输出: a. 在“output”下拉菜单中选择“probe”,出现如图6.5所示窗口。 图6.5 指定电流输出 b. 在“Output Probe Instance”一栏点击“Select” 并在电路图中选择一个器件 (有 端口电流作为网络变量) 如果选择其它的任何器件,在CIW命令行窗口中将会显示一个警告,提示选择的器件类型不对。有效的“Spectre”器件和对应的“analogLib”单元,如表6.1所示。 表6.1 器件名与对应的“analogLib”单元 器件 电感器 电压源 开关 传输线 受控电压源 对应的 analogLib 单元 ind, pinductor vdc, vpulse, vpwl, vpwlf, vsin, vexp, vsource sp1tswitch, sp2tswitch, sp3tswitch, sp4tswitch tline vcvs, ccvs, sccvs, svcvs, zccvs, zvcvs, pvcvs, pvcvs2, pvcvs3, pccvs iprobe 电流探测器 当选择的器件是“tline”的时候,在“选择分析类型”对话框中的“Output”栏显示出是“porti”栏。这个参数允许你指定一个器件端口电流作为电流输出。因为所有的双端口器件,流过器件端口的电流都相当于流过另一个端口的电流,“tline”器件是唯一一个有多于2个端口的器件。 4. 通过在“Input Source”下拉菜单中选择“voltage”或“current”指定输入是电压或电流 源,设定界面如图6.6所示,方法同上。 67 图6.6 “input Source”的设定 5. 如果希望将扫描变量和零极点分析结合起来,选择一个参数来扫描。可以选择的参数类 型包括“Frequency”(频率), “Design Variable”(设计变量), “Temperature”(温度), “Component Parameter”(器件参数)和 “Model Parameter”(模型参数),设定窗口如图6.7所示。 图6.7 扫描变量设定 如果选定了其中的一种参数类型,对话框更新为如图6.8所示形式。 68 图6.8 选择扫描参数后的窗口 注: Add Specific Points(添加指定点)栏只在启用了Add Specific Points(添加指定点)按钮的 时候才会显示。 6. 如果选择的是“Design Variable”, “Temperature”, “Component Parameter”或“Model Parameter”,在“Sweep Range”栏指定扫描参数的范围和类型,如图6.10所示。 输入扫描范围的上下限。 图6.10 扫描范围的确定 扫描类型选项将会对应到Spectre变量扫描的选项,各种设置对应的扫描类型如下: 69 • • • • • Linear + Step Size = step Linear + Total Points = lin Logarithmic + Points Per Decade = dec Logarithmic + Total Points = log Add Specific Points = values=[...] 当没有选择扫描变量的时候,“Sweep Range”扫描范围选项栏不会显示。 7. 点击“Options”按钮,打开零极点分析的选项对话框。这个对话框中的详细设置见下一 节。 8. 点击“Apply”(应用)。 9. 点击ADE的菜单中的“Results”Æ“Print”Æ“Pole Zero Summary”打印输出零极点列表。 也可以选择 ADE菜单中的“Results”Æ“Direct Plot” Æ “Main Form”。要在“OCEAN®”中控制输出零极点曲线或者概要,可以使用命令“pzplot”和“pzSummery”。 6.2 零极点分析的高级选项 6.2.1 零极点分析内容 零极点分析按照直流工作点附近的电路参数,把电路当作一个线性系统,对网络的传输函数进行分析,计算出所有的零点和极点。如果需要计算零点,则还需要制定输出端和输入端;否则只会计算极点。如果在有频率相关的器件(也就是在不同频率下的AC等效模型不同的器件,例如传输线或者有过余度相位的双结型器件)“Spectre®”电路仿真器将采用1Hz时电路的频率特性作为近似。PZ分析现在采用的是直接求解的方法以达到更高的精确度;因而小规模或者中规模电路(少于1000个方程)中会得到最好的性能。 “Spectre®”可以在一个参数变化的情况下扫描零极点的移动。这个变化的参数可以是温度,器件的参数,模型参数,或者是网表参数。如果改变的参数影响了DC工作点,每步的工作点都要重新计算。可以通过给出扫描的参数名来扫描温度(temp)和网表参数(在没有设置dev和mod参数的前提下)。在分析完成之后,修改过的参数回复的原来的值。 当零极点对的距离(也就是差的绝对值)小于一定值得时候,零极点对被认为相互抵消。该距离可以通过“absdiff”定义据绝对距离,或者用“reldiff”定义这个距离和零极点的绝对值的比例。“Spectre®”使用这两个值中比较大的一个作为抵消的半径。 70 图6.11 零极点分析的高级选项 探测参数: [1.] iprobe:探测传输函数的输入零点; [2.] oprobe:探测传输函数的输出零点。 端口参数: [3.] portv:电压模式,“oprobe”端口上的电压作为分析输出; [4.] porti:电流模式,通过“oprobe”端口的电流作分析输出。当“oprobe”是电压源或者是电流探测器时才能使用。 扫描间隔参数: [5.] start=0:扫描的下限 [6.] stop:扫描上限. [7.] center: 扫描中心 [8.] span = 0:扫描的跨度 [9.] step :线性的步距 [10.] lin=50 :仿真总步数,线性平分 [11.] dec:每10倍的步数 [12.] log=50:仿真总步数,对数均分 [13.] values=[...] 仿真点集. 71 扫描变量参数: [14.]dev:参数需要被扫描的器件实例; [15.] mod:需要扫描的参数所属的工艺模型; [16.] param:扫描参数名; [17.] freq (Hz):用于线性化电路器件的工作频率。 状态文件参数: [18.] readns:包含有DC测试结果的文件。 输出参数: [19.] oppoint = no:是否需要计算工作点,如果需要,应当把结果送到哪里。可能的取值包 括no, screen, logfile, 或 rawfile. [20.] zeroonly = no 如果设置了这个选项,只能选0。 可能值包括no或yes. 过滤参数: [21.] fmax (Hz):最大的零极点上限用来过滤虚极点或者零点。这个参数传到psf目录用于过滤 输出图像。 [22.] docancel=yes:是否进行零极点抵消的设置。If set, pole-zero cancellation is requested. 可 能值为yes或no。. [23.] absdiff=1e-6 Hz:零极点抵消的绝对差值上限 [24.] reldiff=1e-4:零极点抵消的相对比值上限 收敛参数设置: [25.] prevoppoint = no:使用上一次分析的工作点,可能选项包括yes和no [26.] restart = yes:如果有任何条件改变,按照设置重新计算DC工作点;如果选no,使用 上次的DC工作点。可能选项包括yes和no 标注参数: [27.] stats = no: 分析的统计,可能值为yes和no [28.] annotate = sweep: 标注级别,可能值为no, title, sweep, status, 或steps. [29.] title:分析名 Examples: 1. mypz pz - 只进行极点分析,分析名为mypz 2. mypz2 (n1 n2) pz iprobe=VIN - 进行零极点仿真,输入是VIN,输出是n1,n2的差值。 - 计算零点和极点 3. mypz3 (n1 n2) pz iprobe=I1 - 输入为I1, 输出为n1和n2的差值。 - 计算零点和极点 4. mypz4 pz iprobe=VIN oprobe=IP1 porti=1 - 输入为VIN, 输出为IP1上的电流, 其中IP1是一个iprobe. - 计算零点和极点 72 5. mypz5 pz iprobe=VIN oprobe=V3 porti=1 - 输入为 VIN, 输出为电压源V3上的电流。 - 计算零点和极点 6. mypz6 pz iprobe=VIN oprobe=R3 portv=1 - 输入为 VIN, 输出为电阻R3上的电流。 - 计算零点和极点 7. mypz7 (n1 n2) pz iprobe=I1 param=temp start=25 stop=100 step=25 oo - 按照温度扫描,范围为25~100C,步进25C 8. parameters rval=2.0 R2 3 4 resistor r=rval ... sweep1 sweep param=rval start=1 stop=10 step=1 { mypz8 (n1 n2) iprobe=VIN } - 对外部扫描参数rval,范围1~10,步进为1。 9. mypz9 (n1 n2) pz iprobe=VIN docancel=no - 不要进行零极点抵消 注意:“porti”允许用户选择一个关联到“oprobe”中指定器件的电流。但这个器件必须让它的端点 电流作为网络变量。因而要避免混淆,“porti”应当用于电压源或电流检测器,或者其它只有电压定义的支路。 输出日志: “output.log”文件中包含以下信息: • 复平面极点 • 复平面零点 • 零点的增益 • 品质因数Q,可以定义为: 其中如果实部real<0则sign=1;如果real>0则sign=-1;如果real=0,则sign=0;如果 结果中包含实部为正的极点,则这表明这是一个不稳定的电路。在该极点后面会加上**RHP标签。输出例如下: ***************** PZ Analysis 'mypz' ****************** Poles (Hertz) Real Imaginary Qfactor 1 4.5694e+10 0 **RHP -0.5 2 4.2613e+10 0 **RHP -0.5 3 1.4969e+10 0 **RHP -0.5 4 1.4925e+10 0 **RHP -0.5 5 1.0167e+10 0 **RHP -0.5 73 6 1.0165e+10 0 **RHP -0.5 7 7.3469e+09 0 **RHP -0.5 8 7.3469e+09 0 **RHP -0.5 9 -1.0061e+09 0 0.5 10 -1.0061e+09 0 0.5 11 -1.0235e+09 0 0.5 74 第7章 噪声和失真分析 7.1 功能基本介绍 噪声分析将电路在直流工作点附近线性化后,计算在输出端的噪声频谱。如果设计者指定了电路输入端,那么仿真器可以计算传输函数和等效输入参考噪声。另外,如果信号输入源是有噪的,也可以计算信号源的噪声系数。噪声分析计算的输出端的总噪声中不仅包括电路本身的噪声,也包括输入源和负载的噪声。电路中的每个噪声源对总噪声的贡献量也会同时计算出来。 噪声分析有传统的噪声分析和周期性的噪声分析。 7.2 传统的噪声分析及参数设置 打开“Noise Analysis”窗口可以看到基本设置类似于“AC Analysis”,如图7.1所示。在噪声分析中同样可以做“Frequency”、“Design Variable”、“Temperature”、“Component Parameter”、“Model Parameter”等参数扫描。各种参数扫描的设置和“AC Analysis”中所述完全一样。在“Output Noise”和“Input Noise”填写输出噪声节点和等效输入噪声源。仿真器将计算从噪声源到输出端的增益,再将输出端总噪声除以增益后就等于等效输入噪声。 75 图7.1 “Noise Analysis”设定窗口 z “Output Noise”:如前所述,仿真器计算的是在输出端的噪声。因此,首先需要给电路 设置一对输出节点(Node)或设置输出探针器件(Probe component)。当选择“voltage”方式输出时,点击“Select”后弹出电路图,点击网线(net)即可设置输出节点。如果是差分方式输出,“Positive Output Node”和“Positive Output Node”设置为差分输出端即可。而如果电路是单端输出,将“Positive Output Node”设置为输出端,而“Negative Output Node”设置为地线。如果输出是一个电压量,也可以选择一个电阻(resistor)或是一个端口(port)作为输出探针。而如果输出量是电流量,选择“vsource”或是“iprobe”作为输出探针。两种不同的设置方式对比在图7.2中显示。 注意:这里的“port”,“vsource”,“iprobe”都是在元件库“analogLib”中选择,如图7.3所示。 图7.2 “Output Noise”端口的设定 图7.3 元件库“analogLib”的例 z “Input Noise”:当需要计算输入参考噪声时,用户需要通过“Input Port Source”指定 等效输入噪声源。一般来说,只有电压源(vsource),电流源(isource)或者是一个端口(port)能够用来做等效输入噪声源。注意,这里是将电路噪声等效到某个输入源的位置上,而输入源本身是无噪的。当然,用户也可以设置输入原本身是有噪的,比如说一个端口(port),那么噪声分析将计算该信号源的噪声系数(F或者NF)。根据IEEE对噪声系数的定义,输入探针应当是没有额外噪声(no excess noise)并且它的等效噪声温度是16.85C(290K)。在这里,给出有关噪声的计算公式: IRN = sqrt(No2/G2) F = (No2-Nl2)/Ns2 这里,No = 总输出噪声 Ns = 输入信号源传递到输出端的噪声 Nl = 负载在输出端的噪声 IRN = 输入参考噪声 G = 电路增益 F = 噪声系统 76 NF = 10log10F z 设计实例及结果输出方式设置。这里仍然是以一简单放大器作为分析例子,如图7.4所示。 图7.4 共源级放大电路实例 在设置好“Noise Analysis”仿真参数后,仿真结果可以通过“Result Browser”观察输出结果的波形,例如作“Frequency”扫描时,可以通过波形方式看到功率谱密度曲线。设计者也可以通过文本方式使用“Noise Summary”来获取有关输入参考噪声,最大噪声器件等信息。点击“Analog Design Enviroment”Æ“Results”Æ“Noise Summary”会出现如图7.5所示的输出方式设置窗口。 图7.5 噪声输出方式设定 各参数的含义如下: 77 z “Type”:计算噪声的方式 “spot noise”:给出某个频率点上的噪声报告。这实际是反映功率谱密度。 “integrated noise”:将频段内的噪声带权重的积分后给出噪声报告。这是给 出的带内噪声功率值。带权重是指在某些频带内 “noise unit”:噪声的单位是采用电压单位“V”或是功率单位“V2”。 z “Frequency Spot(Hz)”:计算噪声的频率点,默认频率点是1KHz。报告给出该 频率点的功率谱密度。 “From(Hz)”,“To(Hz)”:频率积分的范围。 “weighting”:是否需要对某些频率的积分施予权重。 “flat”:在整个频带内均匀积分。 “from weight file”:依据权重文件中的定义对频带内的噪声积分。 z “Filter”:用户可以选择性的给出部分器件的噪声报告。在列表中给出了可供选择 的器件。 “include All Types”:自动选择列表中的所有。 “include None”:将列表中所有项目都删除。 “include instances”:列出包括在噪声报告中的器件。 “Select”:选择器件 “Clear”:删除器件 “exclude instances”:列出不包括在噪声报告中的器件。 z “Truncate & Sort”: “truncate”:根据每个器件的噪声大小,限制在噪声报告中列出的器件个数。 “none”:所有器件都将列出。 “by number”:根据器件贡献噪声的大小排名,限制列出的器件个数。 “by relative threshold”:将贡献噪声超过总噪声规定百分比的器件列出。 “by absolute threshold”:将贡献噪声超过某个绝对数值的器件列出。 “Sort by”:设置根据贡献噪声的大小或是器件名称的字母顺序等报告显示的 顺序。 分析结果输出如图7.4所示。 图7.4 噪声分析输出文本结果 也可以在“Results-Direct Plot-Main Form”中查看仿真结果,如图7.5所示。我们可以在“Function”中选择“Output Noise”或者“Input Noise”来查看输出噪声和输入参考噪声,如图7.6所示。 78 图7.5 噪声谱图输出 图7.6 噪声谱图 7.3 周期性的噪声分析及参数设置 周期性的噪声分析主要使用“Pnoise analysis”,即“Periodic Noise Analysis”。“Pnoise analysis”和传统的噪声分析类似,只是它还包含了频率的变换效应。所以,用它来模拟例如混频器、开关电容滤波器以及其他一些周期性的电路的噪声行为很有用。它特别在模拟自激电路,例如振荡器的相位噪声时很有用。 在进行“Pnoise analysis”仿真之前,必须先做“PSS analysis”的仿真。“PSS analysis”是在一个指定的基波频率下计算电路的周期性稳态响应,而且仿真时间与电路的时间常数无关。“PSS analysis”决定了电路的周期性工作点,而这恰恰给“PAC”,“PSP”,“PXF”和“Pnoise”这些 79 仿真提供了起点。“PSS analysis”在自激电路和非自激电路中都可以工作。 然后,“Pnoise analysis”以在之前做的“PSS analysis”中的找到的工作点进行线性化,而正是由于被线性化后的电路的周期性随时间变化才产生了频率的变换。此外,电路中各种元件由于工作点周期性随时间变化而产生的噪声也被包含在内。 这样,在电路输出端的时间平均噪声就以频谱的形式计算和表现,同时,在指定电路的输出时可以是一对接点或者一个探测点。下面以一个振荡器的噪声分析为例说明“PSS analysis”和“Pnoise analysis”的具体使用。 打开“PSS analysis”窗口,可以看到如图7.7所示的窗口。 80 图7.7 “PSS Analysis”设定 z 在“Fundamental Tones”栏中设置“Beat Frequency”或者“Beat Period”,两者互为倒 数关系,这个“Beat Frequency”应该设为接近振荡电路的振荡频率。 z 在“Output harmonics”中有四个选项“Number of harmonics”,“Select from range”,“Array of coefficients”,和“Array of indices”。选择“Number of harmonics”,然后在旁边的栏中输入一个合适的数字。 z 在“Accuracy Defaults”中选择“moderate”。 z 选择“Oscillator”,表示我们仿真的是一个震荡器电路。在“Oscillator node”中点击 “Select”,在电路原理图中选择震荡电路的输出端口。“Reference node”可以不选择,表示默认的“gnd”端。 这样,“PSS analysis”的设置就完成了。下面对“Pnoise analysis”进行设置,如图7.8和图7.9所示。 z 在“Sweep type”中选择“Relative”,然后再右边的“Relative Harmonic”中填入合适的 数字,它表示相对于基波频率的偏离范围。 z 在“Frequency Sweep Range”中选择“Start-Stop”,填入起始和终止的频率。 z 在“Sweep Type”中选择“Logarithmic”,在其右边选择“Points Per Decade”,填入合 适的数字。 z 在“Sidebands”中选择“Maximum sideband”,填入合适的数字,它的默认数字为7。 z 在“Output”中选择“voltage”,在右边的“Positive Output Node”选项中点击“Select”, 在电路原理图中选择震荡电路的输出端。“Negative Output Node”选项可以不选择,表示默认的“gnd“端。 z 在“Input Source”中选择“none”。 这样,“Pnoise analysis”的设置就完成了。在完成了对“PSS analysis”和“Pnoise analysis”的设置之后,就可以进行电路的仿真了。如果要查看仿真的结果,可以用“ResultsÆDirect PlotÆMain Form”进行查看。 在“Analysis”中选择“pss”,在“Function”中选择“Harmonic Frequency”,就可以得到图7.10所示的震荡器的基波频率和高次谐波频率。 如果在如图7.11所示的“Analysis”中选择“pnoise”,在“Function”中选择“Phase Noise”,点击“Plot”,就可以得到震荡器的相位噪声曲线,如图7.12。 81 图7.8 “Pnoise analysis”设置[1] 图7.9 “Pnoise analysis”设置[2] 图7.10 基波频率与高次谐波频率 82 图7.11 噪声谱图的设定 图7.12 噪声谱图 7.4 谐波失真的仿真设置 我们还可以用“PSS analysis”来仿真电路的“Harmonic Distortion”,即谐波失真。这时,“PSS analysis”的设置区别于震荡电路的设置,因为这时电路是有输入信号的。我们以图7.13中的全差分运算放大器为例说明如何来仿真谐波失真。 83 图7.13 用于谐波失真仿真的全差分电路 因为在电路中加入了交流的信号,所以在打开“PSS analysis”的时候如图7.14,在“Fundamental Tones”中已经出现了我们设置的交流信号,然后我们可以选定“Auto Calculate”来设定“Beat Frequency”。 图7.14 谐波失真仿真的设定 然后,如图7.15,在“Output harmonics”中选择“Number of harmonics”来设定高次谐波的数量,然后在“Accuracy Defaults”中选择“moderate”。而这时,“Oscillator”这一项就不需要选择了,因为我们不是仿真震荡电路。最后,确定即可。 84 图7.15 高次谐波的数量设定 运行仿真之后,同样用“Results”Æ“Direct Plot”Æ“Main Form”来进行仿真结果的查看。如图7.16,在弹出窗口的“Function”选项中选择“Voltage”,也可以根据自己需要选择不同的功能。然后在“Select”选项中,分别有“Net”、“Differential Nets”和“”三个选择项,因为我们仿真的是全差分运算放大器,所以选择“Differential Nets”。 图7.16 仿真结果的输出设定[1] 然后,如图7.17在“Sweep”项中选择“Spectrum”,“Signal Level”选择“peak”,“Modifier”选择“dB20”,设定完成之后,就可以在电路原理图上选择输出端来得到谐波失真的结果。波形如图7.18所示。 85 图7.17 仿真结果的输出设定[2] 图7.18 谐波失真 全差分运算放大器可以抑制电路的偶次谐波,但是当输入信号频率比较高时,抑制能力会减弱。图7.19给出了输入信号频率从1MÆ10MÆ15M后,谐波失真的仿真结果。 图7.19 输入信号频率的变化与谐波失真的关系 86 第8章 波形计算器(Waveform Calculator)的使用 8.1 “Waveform Calculator”简介 “Waveform Calculator”是一个科学计算器,有代数和逆波兰(RPN, Reverse Polish Notation)两种工作模式。通过Calculator可以实现以下功能: [1.] 可以在“Calculator”中创建、打印和显示包含仿真输出数据的表达式; [2.] 在缓存中输入包含节点电压、端口电流、直流工作点、模型参数、噪声参数、设计变量、 数学公式以及算法控制变量的表达式。 [3.] 把缓存中的内容保存的存储器中,并可以把存储器中保存的内容重新读入到缓存中; [4.] 把存储器中的内容保存到文件中,并可以把文件中保存的内容重新读入到存储器中。 下文所介绍的内容,是基于熟悉代数或逆波兰科学计算器语法规则。如果不知道如何在这两种计算器中输入表达式,请参考科学计算器的使用手册。 “Calculator”中的所有函数都有对应得SKILL命令,具体内容可以参考“OCEAN Reference”。 8.1.1 “Calculator”界面介绍 图8.1说明了“Calculator”界面中各个区域和按键的功能。 图8.1 “Calculator”界面及功能 87 8.1.2 代数计算器和逆波兰计算器模式 “Calculator”在代数计算器或逆波兰计算器模式下,使用对应科学计算器的语法规则。“Calculator”窗口打开时,默认使用逆波兰模式。两种模式间的切换方法:在“Options”中选中“Set RPN”,则进入逆波兰模式,如图8.2所示。不选中“Set RPN”则是代数模式。 图8.2 逆波兰模式的选择方法 8.1.3 输入常数 在菜单中选择“Const”下拉菜单,可以在里面选择常用的常数,加入到缓存中,如图8.3所示。 88 图8.3 输入常数的设定 这些常数包括: z botzmann:波尔兹曼常数 z charge:单位电荷 z degPerRad:角度弧度比 z epp0:真空介电常数 z pi:圆周率 z twopi:两倍圆周率 z sqrt2:根号下2 对于两种模式,在缓存中加入的常数都出现在光标的位子。对于逆波兰模式,如果需要将常数单独压入堆栈中,需要点击缓存控制钮中的“Clear”将当前缓存中的内容清空。 注意:Calculator中的表达式需要按照正确的语法规则输入。例如在Calculator表达式中,“2k” 和“2p”所代表的是“2 kilo”(2000)和“2 pico”(2 e-12)。如果表达式想包含“2倍p”项,则需要在表达式中按一下的方式键入“2*p”。如果在“2p”后面紧跟一个不带数字的字符串,例如“2pfsfeg”,那么这个表达式将仅仅被认作“2p”,而不会报语法错误。但是在紧跟得字符串中带有数字。例如“2psdfs23vsdf”,那么Calculator将会报一个语法错误。因此,在使用圆周率常数“pi”的时候需要特别注意。例如“4倍圆周率”需要表示为“4*pi”,而“4pi”将被认作“4p”,即4 e-12。 8.1.4 设置快捷键 可以通过以下方法,为Calculator设置快捷键。 在Command Interactive Window(CIW)窗口中键入: 89 hiSetBindKey( “encap” “ 8.1.5 开启Calculator 有以下四种方法可以打开Calculator。 z 在“Waveform”窗口或者“Simulation”窗口中选择“Tools”Æ“Calculator”,如图8.4 所示。 图8.4 从“Tools”中打开“Calculator” z 在CIW窗口中选择“Tools”Æ“Analog Environment”Æ“Calculator”,如图8.5所示, 开启“Caculator”。 90 图8.5 从“Tools”Æ“Analog Environment”Æ“Calculator”开启“Caculator” z 在“Analog Design Environment”窗口中选择“Tools”Æ“Calculator”,如图8.6所示 图8.6 从“Analog Design Environment”Æ“Tools”开启“Calculator” 91 8.1.6 关闭Calculator 选择“window”Æ“close”,即可。 8.2 选择数据 在Calculator中有四种输入数据的方式 z 通过键盘,按照SKILL语言规范直接在缓存中输入表达式; z 通过电路图表达式按键,点击电路图中的节点和端口从而获得相关数据; z 从“Waveform”窗口中获得数据; z 使用“Results Browser”从仿真结果输出文件中获得数据。 8.2.1 按照SKILL语言规范直接在缓存中输入表达式 详细内容参见Cadence文档中的SKILL语言部分。这里不推荐使用这种方式。 8.2.2通过电路图表达式按键,点击电路图中的节点和端口从而获得相关数据 电路图表达式按键,可以通过在电路图中点击目标对象,从而获得相应得表达式在缓存中显示出来。图8.7显示了常用的“Calculator”中常用的电路图表达式按键。表8.1为各个电路图表达式按键获取的数据类型。 注意:这些按键已经按照仿真类型进行了分类。例如在运行了瞬态仿真(tran)后,需要从电路图中获得节点电压的仿真数据,则在电路图表达式按键中的“tran”页面(如图8.7中第一栏所示)里选择“vt”,然后在电路图中选择相应得节点,即可获得。如果选择了其它页面中的按键,例如“ac”中的“vf”,并且没有进行交流(ac)仿真,那么“Calculator”将会报错,说无法获得数据。因此在使用电路图按键获取数据时,按键和仿真类型的匹配十分重要。 92 图8.7 常用的“Calculator”中常用的电路图表达式按键 表8.1各个电路图表达式按键获取的数据类型 vt vf vdc vs op var vn 瞬态仿真节点电压 交流节点电压 直流扫描节点电压 直流工作点 设计变量 噪声电压 iv if is opt mp 瞬态仿真端口电流 交流端口电流 直流工作点端口电流 直流扫描端口电流 瞬态工作点 模型参数 直流工作点节点电压 idc 通过以下的方法,利用电路图表达式按键在电路图中获得需要的数据 1) 保持“Select Mode”处于选中状态; 2) 选择合适的电路表达式按键,并点击,使其保持选中状态; 3) 在电路图中,点击所需要的目标。 如果对于选择的目标的表达式存在多个合适的参数,那么一个包含所有合适参数的窗口将弹出,在该窗口中选择需要的参数。 4) 完成数据获得好,在电路图窗口保持激活的状态下,点击“Esc”键,退出数据获取模 式。 8.2.2.1 在电路图数据中选择器件参数 以下的内容适合使用“op”,“opt”,“mp”,“vn”或者“var”来获取数据,并且在获取数据之前必须运行一次对应得仿真。 1) 在点击“op”,“opt”,“mp”,“vn”或者“var”电路图表达式按键中任意一个后,“Select an instance”窗口弹出,如图8.8所示。 93 图8.8 “Select an instance”窗口 2) 在电路图中选择需要的器件,例如一个名为“M0”的MOS管,点击该器件后,图8.8 中的窗口变为“OP parameter for M0”(因为在第一步中选择的是“op”按键),如图8.9所示。 图8.9 选择M0管后的窗口 3) 在“List”下拉菜单中显示了所有合适的器件参数,如图8.10所示。在该菜单中选择需 要的参数,例如MOS管的跨导“gm” 94 图8.10 器件参数选择 4) 点击图8.9窗口中的“OK”后,该参数被“Calculator”获取,并在缓存中显示,如图 8.11所示 95 图8.11 M0管的“gm”参数存放在“Caculator”中 8.2.2.2 选择电压或者电流 通过以下方法在电路图中选择电压或者电流。以一个电容为例,如图8.12所示: z 获得节点电压:点击和该节点连接的任意连线。 z 获得端口电流:点击器件上方形端口,从而获得流过该端口的电流。 点击电容上方形的端口标志来选择通过该端口的电流 点击线上的任意一点来选择该线所连接的节点的电压 不要点击器件内部连线 图8.12 器件电压与电流值的选择例 8.2.3 在“Waveform”窗口选择曲线 保持“Select Mode”处于选中状态,在“Waveform”窗口中选择所需要的曲线。在“Calculator”中输入的表达式是“Waveform”窗口中鼠标所在曲线的标题表达式,如图8.13中,窗口底部状态栏中显示的“graph-1.trace():gain”。 96 图8.13 M0管的“gm”的频率变化曲线 但是,因为这个表达式仅仅是一个描述性的标题,不能被“Calculator”估值,因此系统自动创建SKILL函数来表示选中的波形。最终“Calculator”获得的表达式如图8.14所示。 图8.14 “Calculator”获得的表达式 97 z 在一组波形中选择一条波形曲线 当我们使用“Corner Analysis”或者“Parametric Analysis”时,在ADE窗口中定义的输出波形实际上对应了一组曲线。该组曲线与不同的工艺角或者设计变量值一一对应。例如我们运行了一次“Parametric Analysis”,根据不同的电阻值(res)获得了一组曲线,如图8.15所示。 图8.15 在不同电阻值下得到的增益曲线 我们可以通过下面的方法,将其中的一条而不是一组曲线捕获到“Calculator”中。 1) 在“Calculator”中取消“Family”选项。如图8.16所示。 2) 保持“Select Mode”选中,在“Waveform”窗口中选择需要的曲线。“Calculator”捕获 曲线后如图8.16所示。 图8.16 将图8.15中的一条曲线捕获到“Calculator”中 98 8.2.4 使用“Results Browser”从仿真结果输出文件中获得数据 具体内容见第4章“Result Browser”的使用。 8.3 绘制显示结果 “Calculator”缓存中的表达式的值,可以使用一个独立变量作为坐标,以图形或者列表的形式显示出来。该独立变量是由仿真类型和仿真设置所决定的。例如,仿真器运行了一次交流仿真,扫描对象是“频率”,扫描范围是“1~100k Hz”,扫描步进是“1 Hz”,那么图形的坐标轴或者列表的编号将以“Hz”作为单位,范围是“1~100k Hz”,两个坐标点或者编号间的间隔为“1 Hz”。 “Calculator”不能直接将存储器中的表达式的值显示,需要将这些表达式从存储器中读取到缓存中才能显示。下面的两个按键分别是将缓存中的表达式按照图形和文本的形式显示: :将表达式的值以图形的方式显示。 :将表达式的值以列表的方式显示。 8.3.1 绘制表达式 在绘制缓存中表达式之前,需要选择绘制方式。在绘制表达式按键旁有一个下拉菜单,用来选择创建波形窗口的方式。下拉菜单如图8.17所示。下拉菜单中各个选项的功能,如表8.2所示。 图8.17 “calculator”中设定绘制表达式的下拉菜单 99 表8.2 “calculator”中设定绘制表达式的下拉菜单的各项功能 Append Replace New Win 在选择好波形窗口创建方式后,点击“ ”按键即可将缓存中的表达式值在波形窗口中显 在原来窗口的基础上显示新的波形。 清楚原来的窗口中的数据,显示新的波形。 创建一个新的窗口显示新的波形。 New SubWin 在原来的窗口中,建立字窗口,用来显示新的波形。 示。例如,在运行一次交流仿真后(具体过程详见第5章),显示一个共源极放大器的频率特性。 1) 在“Calculator”电路图表达式按键中选择“ac”页面下的“vf”。 2) 然后在图5.3中点击共源极放大器的输出端。 3) 在“Calculator”的缓存中获得该节点的电压表达式“VF(/VOUT)”,如图8.18所示。 图8.18 在“Calculator”的缓存中获得图5.3中共源放大器的输出节点的电压表达式 “VF(/VOUT) 4) 在波形窗口创建方式下拉菜单中选择“New Win”,点击“ 口,显示共源级放大器的增益频率特性。如图8.19所示。 ”按键后,在新的波形窗 100 图8.19 共源放大器(图5.3)的输出节点的增益频率特性 8.3.2 以文本的形式输出“Calculator”缓存中表达式的值 点击“”按键,可把“Calculator”缓存中表达式的值以列表的形式输出。 点击“”按键后,“Display Results”窗口将弹出,如图8.20所示。点击“OK”后将按照“Display Results”窗口中的设置,选择性的将 “Calculator”缓存中表达式的值以列表的形式在“Results Display Window”窗口中输出,如图8.21所示。在该窗口将选择哪些数据将在列表中显示。 图8.20 “Display Results”设置窗口 z 若在“Data”中选择“Value”,则表示将“Calculator”缓存中表达式在x-y坐标轴上所 有的值都显示。输出结果如图8.21所示。 101 图8.21 “Calculator”缓存中表达式在x-y坐标轴上所有的值的显示 z 若在“Data”中选择“Point”, 那么“Display Results”窗口将变成图8.22的形式。 图8.22 选择x轴某一点上的值输出 “X Intercept”栏被激活,“Calculator”将显示缓存中表达式在该栏中所填入的坐标点上的特定值。例如,在图8.22中填入的是“10”,输出结果如图8.23所示。 102 图8.23 x=10时的“VF”值 注意:如果“X Intercept”栏中填入的值不在仿真范围内,那么“Calculator”将输出仿真扫描 范围内,最靠近该数值的坐标点上的表达式的值。例如,扫描范围是“1~100”,在“X Intercept”栏中填入“110”,则“Calculator”输出的值是“expr(100)”。 z 若在“Data”中选择“Range”, “Display Results”窗口将变成图8.24的形式。此时 “Start/End”、“Step/Scale”和“Log”窗口被激活。在“Start/End”中填入坐标轴上的起始点和结束点,从而圈定输出范围。 图8.24 指定“Range”时的“Display Results”窗口 如果“Log”栏没有选中,那么“Step/Scale”中填入的是步进数,“Calculator”将 按照该栏中设置数为步进,从“Start/End”中确定的起始点开始,依次取数据,直到跨过结束点为止。按照图8.24中的设置,输出结果如图8.25所示。 103 图8.25 按图8.24设定的数据输出 如果“Log”栏没有选中,那么“Step/Scale”中的数据将作为“10”的指数计算一 个值作为倍乘系数。“Calculator”将从“Start/End”中确定的起始点开始,以倍乘的方式取点,直到跨过结束点为止。当图8.24中“Log”栏选中后,输出结果如图8.26所示。 图8.26 选“Log”后的数据输出 104 8.4 使用存储器(Memories) “Calculator”缓存中的表达式可以保存到存储器中,也可以将存储器的内容读入到缓存中。同时存储器中的内容也可以保存到文件中,并从文件中读取。这些功能都在“Memories”下拉菜单中实现。“Memories”下拉菜单如图8.27所示。 图8.27 使用“Memories”的设定 8.4.1 “Table”子菜单 “Memories”中的“Table”子菜单如图8.28所示。在“Table”子菜单中包含5个菜单按钮,其功能一次如下: 105 图8.28 “Table”子菜单目录 z “Edit”:打开“Memories Editor”窗口,如图8.28中所示。如果在这之前存储器中没 有内容,使用“Edit”菜单还有“New Memories”的功能。在“Memories Editor”窗口中,可以编辑已有存储项的名称和表达式。点击“OK”或者“Apply”完成修改。 z “New Memories”:自动切换到“Memories Editor”窗口,将当前“Calculator”缓存中 的表达式作为一个新建立的存储项的表达式,并要求对该存储项命名。 注意:允许两个存储项有相同的表达式,但不能有相同的名称。 z “Copy”:将选中的已有存储项的表达式复制到新的存储项中,并要求对新的表达式命 名。 z “Delete”:删除存储项。在点击“OK”或“Apply”,确认删除前,被删除的存储项仅 仅显示变灰,如图8.29所示。此时可以通过“Undelete”将其恢复。 图8.29 “Delete”的使用与恢复 106 z “Undelete”:恢复被删除的存储项。仅仅在删除确认前有效。 8.4.2 “Select”子菜单 “Select”子菜单中的内容是已有存储项名称的列表,如图8.30所示。通过点击存储项的名称,可以把该存储项中的表达式读入到“Calculator”的缓存中。 图8.30 已有存储项名称的列表 8.4.3 “Save…”子菜单 107 图8.31 “save…”子 点击“Save…”子菜单,“Save”窗口弹出,如图8.31所示。在“Save In”下拉菜单,以及下面文件列表中选择合适的存储路径。在“File Name”中填入保存文件的名称。文件内容是按照SKILL语言写成的命令。对应上文中存储器中的内容。保存文件中的内容为: armSetCalcMemory( \"Vout\" \"VF(\\\"/OUT\\\")\" ) armSetCalcMemory( \"gain\" \"dB20(VF(\\\"/OUT\\\"))\" ) 8.4.4 “Load…”子菜单 点击“Load…”子菜单,“Open”窗口弹出,如图8.32所示。在该窗口中选择保存文件,点击“Open”完成读取。 图8.32 “Load…”子菜单窗口 8.5 函数 在“Calculator”中有很多函数,可以对数据进行大量的处理,从而获得有用的信息。只需要点击函数窗口中相的函数明,就可以对当前缓存中的表达式使用相应的函数。在下面的章节中将针对使用“RPN”模式的“Calculator”,介绍一些常用实用的函数,及其实用方法。 108 8.5.1 简单函数 表8.3中的这些函数适合缓存中只有一个表达式的情况。 表8.3 “Calculator”中的函数与功能 函数 mag phase real imag ln log10 dB10 dB20 功能 取幅值 取幅角 取实部 取虚部 取自然对数 以10为底取对数 对功率表达式取dB值对电压电流取dB值 函数 exp 10**x x**2 abs int 1/x sqrt 功能 ex 10xx2 取绝对值 取整 取反 x1/2 8.5.2 作用两个表达式的函数和操作幅 ? 在“RPN”模式中,一些函数或操作幅同时作用于缓存和堆栈中最上层的表达式。对于这些函数或操作幅而言,堆栈中的表达式永远在缓存中表达式的左边,具体内容见表8.4。在表8.4中,堆栈中最上层表达式用“stack”表示,缓存中的表达式用“buffer”表示。 表8.4 堆栈和缓存的表达式 函数 y**x + - * / 功能 stackbuffer stack + buffer stack - buffer stack * buffer stack / buffer 8.5.3 三角函数 “Calculator”中也有三角函数。包括sin,asin,cos,acos,tan,atan,sinh,asinh,cosh,acosh,tanh,atanh。这里不再重复这些函数的作用。 8.5.4 特殊函数 特殊函数对于分析仿真结果有很大的帮助。在选择某些特殊函数时,函数窗口将转换成对话 109 框,在其中填入该函数所需要的其它数据,如图8.33所示。其余的特殊函数直接作用于缓存中的表达式。 图8.33 特殊函数的设定 例如通过以下步骤可以求一个电流在整个仿真范围内的平均值。 1) 采用8.2.2.2中所讲述的方法,将所需要的端口电流表达式捕捉到“Calculator”的缓存 中; 2) 在函数窗口中点击“average”函数; 3) 点击“ 8.5.4.1 “average”函数 “average”函数用来计算整个仿真范围内波形的平均值。“average”的定义是在范围x内对表达式f(x) 进行积分,然后除以范围x。例如,如果y = f (x),那么average(y)为 to ”,输出电流的平均值。 from ∫f(x)dx to−from 。其中“to”和“from”是“ADE”中设置的仿真范围起始和结束值。如果需要选 择不同的求平均值范围,可以配合使用“clip”函数,详见8.5.4.3。 8.5.4.2 “bandwidth”函数 “bandwidth”函数计算“Calculator”缓存中表达式的带宽。注意:输入表达式必须是直接对应电压值,而不是经过“dB20”处理过的数值。具体操作步骤如下: 1) 采用8.2.2.2中所讲述的方法,将所需要的节点电压表达式捕捉到“Calculator”的缓存 中; 2) 在函数窗口中点击“bandwidth”函数。然后函数窗口将变为如图8.33所示的“bandwidth” 110 对话框。 图8.33 “bandwidth”的计算设定 3) 在“bandwidth”对话框中: z “Signal”栏中填入的是需要处理的节点电压表达式。通过上述方法,该栏值将直 接从“Calculator”的缓存中获得。也可以按照SKILL语法规范输入其它的节点电压表达式。 z “Db”栏填入的是带宽频率上的值距峰值的距离,数据采用“dB”模式。 z “Type”下拉菜单中,有如下三个选项。 “low”:计算低通模式下的带宽; “high”: 计算高通模式下的带宽; “band”:计算带通模式下的带宽。 4) 点击“OK”,完成对“bandwidth”函数的设置。 5) 点击“ ”,输出电流的平均值。 8.5.4.3 “clip”函数 “clip”函数用来重新确定“Calculator”缓存中表达式的输出范围。具体操作步骤如下: 1) 采用8.2.2.2中所讲述的方法,将所需要的节点电压表达式捕捉到“Calculator”的缓存 中; 2) 在函数窗口中点击“clip”函数。然后函数窗口将变为如图8.34所示的“clip”对话框。 111 图8.34 “clip”的设定窗口 3) 在“From”和“To”栏中填入新的输出范围。 注意:假如新的范围大于仿真范围,那么在多出的范围内,那么“Calculator”将输出仿真扫描范围内,最靠近该数值的坐标点上的表达式的值。例如,对于表达式f(x),仿真的扫描范围是“10~100”,而“clip”确定的新的范围是“1~200”。那么在“1~10”的范围内的值为f(10),在“100~200”的范围内的值为f(100)。 4) 点击“OK”完成对“clip”函数的设置。 5) 点击“ 8.5.4.4 “convolve”函数 “convolve”函数用来实现两个表达式间的卷积,具体操作步骤如下: 1) 在函数窗口中点击“convolve”函数。然后函数窗口将变为如图8.35所示的“convolve” 对话框; ”输出处理后的波形 112 图8.35 “convolve”函数设定窗口 在“Signal1”和“Signal2”栏中填入需要计算卷积的两个表达式。软件默认在这两栏中填入当前“Calculator”缓存中的表达式。因此需要按照SKILL语法规范填入需要的两个表达式; 在“From”和“To”中填入卷积范围; “type”中选择的是卷积式的步进方式,有“linear”和“log”两种选项; 点击“OK”完成对“convolve”函数的设置; ”输出卷积后的波形; to 2) 3) 4) 5) 6) 点击“ 卷积的定义为: from ∫ f1(s)f2(t−s)ds。其中f1(s)和f2(t - s)分别代表“Signal 1”和“Signal 2” 中的两个表达式。 注意:“convolve”函数对数据的大小敏感,可能需要较长的计算时间。 8.5.4.5 “cross”函数 “cross”函数计算了表达式第n次穿过特定形式波形边沿阈值时的x轴坐标。具体步骤操作如下。 1) 采用8.2.2中所讲述的方法,将所需要的表达式捕捉到“Calculator”的缓存中。 2) 在函数窗口中点击“cross”函数。然后函数窗口将变为如图8.36所示的“cross”对话 框。 113 图8.36 “cross”函数计算设定窗口 3) 在“cross”对话框中: z “Signal”栏中填入的是需要处理的节点电压表达式。通过上述方法,该栏值将直 接从“Calculator”的缓存中获得。也可以按照SKILL语法规范输入其它的节点电压表达式。 z “Threshold Value”栏中填入的是阈值。 z “Edge Number”栏中填入的是穿越特定形式波形边沿的次数。 z “Edge Type”下拉菜单有以下选项: “rising”:上升沿。 “falling”:下降沿。 “either”:上升或下降沿。 4) 点击“OK”。完成对“cross”函数的设置。 5) 点击“ 8.5.4.6 “delay”函数 如图8.37所示,“delay”函数利用“cross”函数,计算两个表达式分别穿过特定值时的时间差。 ”,输出电流的平均值。 114 图8.37 计算两个表达式分别穿过特定值时的时间差 具体操作步骤如下: 1) 在函数窗口中点击“delay”函数。然后函数窗口将变为如图8.38所示的“delay”对话 框。 图8.38 “delay”函数的设置 115 2) 在“Signal1”和“Signal2”栏中填入需要计算卷积的两个表达式。软件默认在这两栏 中填入当前“Calculator”缓存中的表达式。因此需要按照SKILL语法规范填入需要的两个表达式。 3) 按照8.4.5.5中的方法,完成针对两个表达式的“cross”函数设置。 4) 点击“OK”,完成对“delay”函数的设置。 5) 点击“ 8.5.4.7 “deriv”函数 “deriv”函数用来对“Calculator”缓存中的表达式求微分。在函数窗口中选择“deriv”函 ”输出微分后的表达式波形。 ”,输出延时值。 数,然后点击“ 8.4.5.8 “gainBwProd”函数 “gainBwProd”函数计算表达式的增益带宽积。它要求“Calculator”缓存中的表达式是一 个频率响应,并且拥有足够大的频率扫描范围。增益带宽积通过如下的公式计算: gainBwProd(gain)=A0*f2, 其中A0是直流增益,f2是增益大小为1/(21/2)时的最小频率。 8.4.5.9 “gainMargin”函数 “gainMargin”函数给出“Calculator”缓存中的频率响应表达式相移为180度时的增益大小(dB值)。 8.4.5.10 “iinteg”函数 “iinteg”函数对“Calculator”缓存中的表达式对X轴上的变量进行不定积分。积分结果可以在“Waveform”窗口中显示。 8.4.5.11 “integ”函数 “integ”函数对“Calculator”缓存中的表达式对x轴上的变量进行定积分。积分结果是波形曲线在规定范围内和x轴所包围的范围。具体步骤如下: 1) 采用8.2.2中所讲述的方法,将所需要的表达式捕捉到“Calculator”的缓存中。 2) 在函数窗口中点击“integ”函数。然后函数窗口将变为如图8.39所示的“integ”对话 框。 116 图8.39 “integ”函数的设定 3) 在“Initial Value”和“Final Value”中填入定积分的开始和结束值。 注意:上述两个值必须同时定义,或者都不定义。当没有限定定积分范围时,“integ”函数将自动将积分范围设置为整个扫面范围。 4) 点击“OK”,完成“integ”函数设置。 5) 点击“ 8.4.5.12 “lshift”函数 “lshift”函数将“Calculator”缓存中的表达式平移后输出到“Waveform”窗口中。平移量在“lshift”对话窗口的“Delta X”栏中设置,如图8.40所示。正值表示向左平移,负值表示向右平移。 ”,输出积分结果。 117 图8.40 “lshift”函数的设定 8.4.5.13 最大值、最小值函数 “Calculator”中有求最大值和最小值的函数,分别针对X轴和Y轴上的数据,这些函数为:“xmax”,“ xmin”,“ ymax”,“ymin”。 8.4.5.14 “overshoot”函数 “overshoot”函数将计算“Calculator”缓存中的表达式的过冲值相对跳变值的比例。假如表达式的峰值为M,跳变初始值为I,跳变结束值为F,如图8.41所示。那么“overshoot”函数的计算为: 图8.41 “overshoot”的计算 118 overshoot= (M−F)*100 F−I 。 具体操作步骤如下: 1) 采用8.2.2中所讲述的方法,将所需要的表达式捕捉到“Calculator”的缓存中。 2) 在函数窗口中点击“integ”函数。然后函数窗口将变为如图8.42所示的“integ”对话 框。 图8.42 “integ”函数的设定 3) 如果“Initial/Final Value Type”中选择的是“y”,则直接在“Initial/Final Value”中填入 表达式跳变前后的值。 如果“Initial/Final Value Type”中选择的是“x at y”,则直接在“Initial/Final Value”中填入响应的X轴坐标值,用来标明表达式跳变前后的时间。系统自动根据X轴左边计算出响应得y值。 4) 点击“OK”完成“overshoot”函数的设置。 5) 点击“ 8.5.4.15 “phaseMargin”函数 “phaseMargin”函数可以计算“Calculator”缓存中的表达式的相位裕度。但是要求表达式是一个频率响应。 119 ”,输出结果。 第9 章 参变量分析(Parametric Analysis) 9.1 “Parametric Analysis”的意义和作用 “Parametric Analysis”在电路设计和验证过程中是一个很实用的工具。它允许设计者对器件参数、电路参数进行赋值。这种赋值可以是对一个变量在一定范围内赋多个值,也可以是对多个变量进行多组的同时赋值。然后,对电路在这些特定值或者特定值组合上的性能进行分析。分析的结果将在波形窗口以一组曲线的形式输出,曲线的个数等于“Parametric Analysis”中赋值的次数。 “Parametric Analysis”需要将所需要赋值的参数在电路图上以“变量(Variable)”的形式表明,以区别于其它固定值。 注意:“Parametric Analysis”是一个实时的仿真方法,每次仿真的时候都将从电路图中获取数据,因此在“Parametric Analysis”仿真过程中,改变电路设置,将会引起“Parametric Analysis”的不准确。 本章将以MOS管的阈值电压和温度以及MOS管尺寸之间的关系为例,说明“Parametric Analysis”的实用方法。 9.2“Parametric Analysis”的仿真环境设置 “Parametric Analysis”的仿真环境、仿真类型、输出结果的设置直接从“Analog Design Environment(ADE)”中获得。 首先,我们绘制一个简单的电路图,包含一个二极管连接的NMOS管,和一个电压源。我们将电压源的大小,和NMOS管的宽和长设为变量:“VDD”,“W_N”,“L_N”,电路如图9.1所示。 120 图9.1 “Parametric Analysis”例 打开“Analog Design Environment(ADE)”窗口。按照第1章讲述的方法,设置好库文件,从电路图中获得变量名并赋与一个初始值。在仿真类型里面选择“dc”,然后选择保留直流工作点。这样仿真器将会计算电路在各个变量等于初始值的时候,各个器件的直流工作点,对于MOS管,将包含跨导、阈值电压等信息。因为在每次“dc”仿真的时候,直流工作点只计算一次,因此没有办法观察到MOS管阈值电压随温度变化的连续曲线。下面我们将利用参变量分析,来获得MOS管阈值电压的温度曲线。ADE的设置如图9.2所示。为了保证参变量分析能够顺利运行,建议在参变量分析之前,先进行一次仿真,保证各个设置都是正确的。 121 图9.2 在“Analog Design Environment”中设置仿真参变量 9.3 “Parametric Analysis”的启动 在ADE中选择“Tools”Æ“Parametric Analysis”,如图9.3所示。这时“Parametric Analysis”窗口将会弹出,如图9.4所示。 图9.3 在ADE中选择“Parametric Analysis” 122 图9.4 “Parametric Analysis”的设定 图9.5列出了“Parametric Analysis”的所有下拉菜单,它们的功能将在后文一一列出。 图9.5 “Parametric Analysis”设置窗口中的所有下拉菜单 9.4“Parametric Analysis”的设置 9.4.1“Parametric Analysis”中获得变量 我们要获得MOS管阈值电压的温度曲线,因此需要把温度作为扫描的变量。在参变量扫描窗口打开的时候,就有一个默认的空缺扫描,我们通过以下步骤,将温度作为变量加入到扫描中: 1. 选择“Setup”Æ“Pick Name For Variable”Æ“SweepN”。如果现在只有一个扫描, 那么“Sweep1”是唯一的选择,如图9.6所示。 123 图9.6 扫描变量的设定 在新的弹出窗口里面选择“temp”作为该扫描的变量,并点击“OK”,如图9.9所示。这样得到图9.8。 2. 图9.9 选择“temp”温度为扫描变量 注意:在弹出窗口里,只有在ADE中声明的变量才会显示出来。“temp”是作为系统默认的变量存在的。此时“temp”在“Variable Name”栏中显示出来。 124 图9.8 对扫描变量“temp”的设定 9.4.2设置变量的变化范围 接下来选择“Range Type”。“Range Type”有三种类型: z “From/To”: 从A值开始,到B值结束,从而确定一个范围。 z “Center/Span:”: 以A值为中心,以B/2值为正负方向的变化量,确定一个范围。 例 如“Center=100, Span=20”,等同于“From=90, To=110” z “Center/Span%”:以A值为中心,以A*(B/2)%为正负方向的变化量,确定一个范 围。例如“Center=100, Span%=40”,等同于“From=80, To=120”。 这里选择“From/To”模式,范围从-20 0C到20 0C,如图9.9所示。 图9.9 对“temp”扫描范围的确定 接着选择“Step Control”方式,“Step Control”有以下几种方式: 125 图9.10 “Step Control”的设定 z “Auto”:软件自动选择合适的方式,用户选择总共需要多少个仿真点;当扫描范围的最大 值和最小值的比大于50时,将采用对数的方法分配仿真点;如果比值小于50将采用线性的方式扫描。 z “Linear Step”:按照用户设定的步进,扫描整个范围; z “Linear”:按照用户设定的仿真点数,平均划分仿真范围; z “Decade”: 用户将设置每10倍程内的点数,仿真点之间是倍乘关系,倍乘系数为101/steps perdecade 。要求在“From/To”模式中,从小到大设置范围。例如:范围是:“From=1, To=10”,“Steps/Decade=5”,仿真点为:1,1.58489,2.51189,3.98109,6.30959,10;即:100,100.2,100.4,100.6,100.8,101。 z “Octave”:用户将设置每2倍程内的点数,仿真点之间是倍乘关系,倍乘系数为21/steps peroctave。 要求在“From/To”模式中,从小到大设置范围。例如:范围是:“From=2, To=4”,“Steps/Decade=5”,仿真点为:2,2.2994,2.63908,3.03143,3.4822,4;即:21,21.2,21.4,21.6,21.8,22。 z “Logarithmic”:用户设置总共的仿真点数,仿真点之间是倍乘关系,被乘系数为:(To/From) 1/(Steps-1) 。 z “Times”:用户设置被乘系数,仿真点之间是被乘关系。注意被乘系数不能是负数,并且要 和范围的起始/结束点相配合。如果扫描是从小到大,那么被乘系数要大于1,反之亦然。 我们在这里选择“Step Control”方式为“Linear Step”,规定“Step Size”为1,即在每个整数温度点上做一次仿真。图9.11为设置好的窗口。 126 图9.11选择“Step Control”方式为“Linear Step”,规定“Step Size”为1 9.4.3给一个变量添加多个扫描范围 如果我们还想添加另外一个范围:40 0C 到100 0C。也是在每个整数温度点上做一次仿真。点击“Add Specification”下拉菜单,选择“Range”,如图9.12所示。 图9.12 添加另外一个温度扫描范围 在图9.13,我们可以看到在Sweep1中,有多了一个“Range Type”和“Step Control”供我们设置另一个扫描范围。我们这次选择“Range Type” 为“Center/Span”,“Step Control”为“Linear”,“Total Steps”为61。 127 图9.13 另一个温度扫描范围的设定 对于这两个范围,我们可以通过点击他们对应得“select”选项,来标识它们的选中的情况,以便在后面的分析时,可以分开处理。 9.5 查看仿真点 在进行参变量分析之前,我们可以查看我们选择的仿真点,如图9.14所示。选择“Analysis”Æ“Show Sweep Sets”Æ“All sorted”。这时如图9.15的一个弹出窗口将显示我们选择的参数和全部的仿真点。 z All Sorted :显示全部仿真点,并按顺序排列 z All :显示全部仿真点,不排序 z Select Sorted :显示选中的范围,并排序 z Select :显示选中的范围,不排序 图9.14 查看所有仿真点 128 图9.15 所有仿真点的显示 9.6 运行“Parametric Analysis”仿真和查看仿真结果 图9.16 对参变量的仿真分析 接下来,我们可以进行参变量分析了,选择Analysis下拉菜单,如图9.16所示。如果我们选择“Start”,则在所有设置的范围内,对电路进行仿真,如果我们选择“Start-Selected”,那么只对“Select”项选种的范围进行仿真,针对上面的设置,就是只仿真40 0C 到100 0C的范围。 我们在这里运行“Start-Selected”,这时会有一个如图9.19的弹出窗口显示仿真信息,包含当前参数的值和剩余仿真次数。 129 图9.19 仿真进程显示 因为阈值电压不能在电路图中直接选取,我们通过“Results Browser”来获取仿真信息。在ADE在中打开“Results Browser”。选择“dcOpInfo”Æ“info”,然后选择MOS管M0,如图9.18所示。 130 图9.18 选择M0管的阈值电压“Vth” 这时我们就可以看见MOS管M0的全部直流工作点参数。在其中选择“vth”,即MOS管的阈值电压。双击将其在“Graph Window”中显示,得到图9.19。 131 图9.19 NMOS管M0的阈值电压与温度的关系 我们可以看出当温度上升时,MOS管的阈值电压下降,这与理论分析是一致的。 9.9 多个变量的“Parametric Analysis”的设置 如果我们还想看MOS管尺寸对阈值电压的影响,可以重复上面的步骤,将“L_N”或“W_N”作为变量,扫描他们的大小。下面将介绍如何将多个变量放在一起,看它们对电路特性的共同影响。 如图9.20所示,回到“Parametric Analysis”窗口,选择“Setup”下拉菜单,然后选择“Add New Variable To Bottom”。 132 图9.19 多个变量的“Parametric Analysis”的设置 这时我们看到在“Sweep1”下面出现了一个新的“Sweep2”,如图9.20所示。 图9.20 “Sweep2”的添加设置 按照9.4的方法,将“L_N”加入到“Variable Name”中,扫描范围从5um到15um。这次“Range Type”采用“Center/Span%”,“Step Control”采用“Logarithmic”的方式,共扫描5个点。具体设置窗口如图9.21所示。 133 图9.21 对“temp”和“L_N”参数的设定 注意:这次我们通过“Select”选中的是“temp”的“-20~20”范围和“L_N”的“5um~15um”的范围。通过“Analysis”Æ“Show Sweep Sets”Æ“Selected sorted”查看选中的仿真点,得到图9.22。 图9.22 温度与MOS管沟导长度的仿真点 134 可以看出“Parametric Analysis”是先固定“Sweep1”的值,对“Sweep2”的值进行循环,然后再变化“Sweep1”的值。这说明在“N”个“Sweep”中“SweepN”是最内圈的循环。按照“Sweep”从小到大的顺序,由外而内构成循环的嵌套。 通过“Analysis-Start Selected”运行仿真。仿真后,通过“Results Browser”观察MOS管M0的阈值电压,得到如图9.23所示的各温度下的阈值电压与MOS管沟道长度之间的关系曲线。 图9.23 各温度下的阈值电压与MOS管沟道长度之间的关系曲线 仿真结果显示了在-20 0C到20 0C的每个整数温度点上,MOS管M0的阈值电压随M0栅长的变化曲线。 如果双击X轴“L_N (E-6)”,进入如图9.24所示的“Axis Attributes”窗口,可将“Sweep Var”切换到“temp”。我们可以得到如图9.25所示的在5um到15um的5个特定栅长上,M0的阈值电压随温度变化的曲线。 135 图9.24“Axis Attributes”窗口 图9.25 各种MOS管的沟道长度下的阈值电压与温度的关系 136 9.8加入或者排出特定仿真点 如果我们希望扫描几个特定的值,例如29.5 ℃和55.2℃时的MOS管的阈值电压。可以通过以下的方法得到。在“temp”所在的“Sweep1”中,选择“Add Specification”下拉菜单,然后选择“Inclusion List”,如图9.26所示。 图9.26 加入特定仿真点的设定 这时会在“Sweep1”的最下端出现一个“Inclusion List”栏,如图9.29所示。我们将“29.5”和“55.2”填入其中,以空格隔开。这样就把这两个特定的温度加入到扫描范围内了。 反之,如果我们在“Add Specification”中选择“Exclusion List”,那么将会有一个“Exclusion List”栏会出现在“Sweep1”的最下端,在这一栏中填入的值,将从扫描范围内排出。例如我们填入“15”,“16”和“19”,以空格隔开。将“Inclusion List”, “Exclusion List”和“-20~20”的范围选中,如图9.29所示。 137 图9.29 在“Inclusion List”中加入特定温度点,或者在“Exclusion List”中加入需要排除的温 度点 这时我们再通过“Analysis”Æ“Show Sweep Set”Æ“Selected Sorted”来查看选中的仿真点,得到图9.28。 图9.28 仿真点的显示 “15”,“16”,“19”已经从原来的仿真范围中删除了,而“29.5”和“55.2”被加了进去。第二列中的“2u”是“L_N”在ADE中的默认值。因为关于“L_N”的扫描范围没有被选中,故采用ADE中的默认值。 138 9.9删除变量和扫描范围 如果设置的范围或者变量不再需要,通过下面的方法进行删除。 z 删除扫描范围:选择“Setup”菜单,然后选择“Delete Range Specification”。“Parametric Analysis Delete Setting”窗口将弹出。我们在里面选择要删除的仿真范围,例如“Sweep1”的“-20~20”范围,如图9.29所示。 图9.29 扫描范围的删除设定 点击“OK”后,我们可以看到,在“Sweep1”,“-20~20”的扫描范围被删除了,如图9.30所示。 图9.30 “-20~20”的扫描范围被删除后的界面 如果我们选择“Setup-Delete All Range Specification”,那么所有设置的扫描范围都将被删除。 z 删除一个变量:我们还是在“Setup”下拉菜单中选择“Delete Range”,“Parametric Analysis Delete Variable”窗口将弹出,我们在里面选择要删除的变量,例如“temp”,如图9.31所示。 139 图9.31 删除扫描参数的确定 点击“OK”后,从图我们发现针对变量“temp”的设置被删除了,同时“L_N”的扫描被移到了“Sweep1”的位子,如图9.32所示。 图9.32 删除扫描变量“temp”后的界面 9.10 多个变量的同时赋值-“Parametric Set” 通过上面的方法,我们可以将多种参数放在一起进行仿真,仿真次数是所有变量扫描次数的乘积。当变量多了以后,这将是一个很大的数字,而且我们可能只对其中的几种组合比较感兴趣,因此其他的数据是多余的,将会浪费大量的仿真时间和计算资源。下面我们介绍另外的一种方法,可以实现多个变量间特定值的组合,从而观察这种组合下电路的性能。例如我们要获得MOS管的阈值电压在如表9.1所示的4个温度和栅长的组合时的值。 表9.1 以“temp”和“L_N”为扫描变量的四种情况 Case1 Case 2 Case 3 Case 4 temp -15.1 23.5 12.8 66.5 L_N 4u 3.2u 1.8u 0.6u 在图9.33中在“Sweep”菜单中,选择“Parametric Set”。这时“Parametric Analysis”的界面将切换到图9.34所示的界面。 140 图9.33 多个变量的同时赋值[1] 图9.34 多个变量的同时赋值[2] 这时我们需要填入“Variable Name”和“Value List”。 其中“Variable Name”的选择方法和9.4中一样,在“Setup-Pick Name For Variable-Sweep1”中选择“temp”。在“Value”中依次填入“-15.1”,“23.5”,“12.8”,“66.5”,并以空格隔开。 接着用9.9中的方法添加一个新的变量“L_N”。在对应的“Value List”中填入“4u”,“3.2u”,“1.8u”,“0.6u”,也是以空格隔开,得到如图9.35所示界面。 图9.35 “temp”和“L_N”扫描参数的选定 查看仿真点,得到图9.36的界面。 141 图9.36 仿真点的显示 可以看出,“temp”和“L_N”的值,已经按我们需要被组合到一起了。 如果在“Parametric Set”模式下,我们将“SweepN”的“Variable Name”标示为“VarN”,“Value List”中的第M个值标示为“SnVm”,那么在“Parametric Set”中各个变量和他们值得组合为如表9.2所示的组合。 表9.2 “Variable Name”标示为“VarN”,“Value List”中的第M个值标示为“SnVm”时 的组合 Case1 Case2 Case3 …… CaseM Var1 S1V1 S1V2 S1V3 …… S1Vm Var2 S2V1 S2V2 S2V3 …… S2Vm …… …… VarN SnV1 SnV2 SnV3 …… SnVm 因此,在设置“Parametric Set”时,需要注意每个“Varialbe”都有相同个数的赋值。 9.11 保存“Parametric Analysis”的设置 图9.39保存“Parametric Analysis”的设置 “Parametric Analysis”的设置有两种保存模式 [1.] 暂时保存。如图9.39所示,“Parametric Analysis”的设置将通过“Tool”下拉菜单中的 “Checkpoint”项保存到缓存中,然后通过“Tool”下拉菜单中的“Revert”项调出。这种保存方式不需要用户设置保存路径和文件名,但是当“Parametric Analysis”窗口关 142 闭后,该方法保存的设置就会丢失。 [2.] 永久保存。在“Tool”下拉菜单中,选择“Save”项,将会弹出“Parametric Analysis Save” 窗口,如图9.39所示。 图9.39永久保存“Parametric Analysis”的设置 在“Directory”中填入文件路径,在“File”中填入文件名,文件名的后缀是“.il”点击“OK”或“Apply”将设置保存到文件中。然后通过“Tool”下拉菜单中的“Recall”来从文件中获取“Parametric Analysis”的设置。 保存OCEAN Script。在“Tool”下拉菜单中选择“Save Script”项,将会把生成的ocean script文件保存到用户选择的文件中。详细信息见Cadance文档“/doc/anasimhelp/chap9.html” 143 第10章 工艺角的分析(Corner Analysis) 工艺角分析提供了一种分析电路性能的方便的方法,可以一次性用一组制造工艺的极限偏差参数来仿真电路。利用Virtuoso®模拟工艺角分析 (Virtuoso® Analog Corners Analysis),可以将每组工艺偏差参数的仿真结果与可接受的范围进行比较。可以确定电路制造出来后可能出现的最大误差。根据误差通过修订电路,保证所有参数值都可以接受。 本章讲解使用工艺角分析的详细选项,以获得电路的仿真结果的信息,具体内容如下: z 工艺角分析工作的基本方法; z 了解工艺角分析窗口; z 手动运行工艺角分析的实例演示 z 使用工艺、设计和模型文件 z 使用配置文件运行工艺角分析的实例演示 另外,本章还总体解释工艺角分析的理论背景,介绍怎样得到帮助以及如何打开Virtuoso®模拟工艺角分析窗口。 10.1 工艺角分析如何工作 在集成电路制造工艺的理论中,工艺变量可以有精确的数值,而精确的工艺变量值可用来计算该工艺下的仿真结果。但是,在实际的制造工艺中,工艺变量只能保证在制造公差之内,随机地在理想值附近波动。因此,很多器件的随机参数的变化合在一起可导致电路分析结果的不确定。 工艺角分析关注的是当工艺偏差参数达到极限时(称为”Corner”,或工作角),或者温度、电压等参数达到极限时的电路性能。有了这些信息在可以确定在工艺参数有随机偏差时,甚至是最不希望出现的偏差的组合方式下,电路的性能能不能满足规格要求。 工艺角分析可以这样使用:[1.]使用工艺角分析的界面;[2.]使用工艺和设计定制文件。本章后面几节中将会详细介绍。 10.1.1. 打开和关闭工艺角分析窗口 要准备使用工艺角分析,需要: [1.] 电路采用普通的设计参数值,并可以仿真; [2.] 在Virtuoso® ADE (Analog Design Environment)窗口中根据分析类型设置一个仿真任务; [3.] 保证电路中所有的设计变量都设置了初始值; [4.] 在“ADE”窗口中选择“Tools”Æ“Corners”选项 144 图10.1打开和关闭工艺角分析窗口 如果已经按照前文定义了自动载入的定制文件,工艺角分析窗口就会出现。要关闭工艺角分析窗口,则选择”File” Æ “Close” 10.2 了解工艺角分析窗口 如图10.2所示,Virtuoso®工艺角仿真分析窗口分为几个区域,用来设置工艺角和分析的输出。 图10.2 工艺角分析窗口 10.2.1 菜单 菜单中包含用来准备、运行和绘制工艺角分析结果的曲线。其菜单如图10.3所示,表10.1是相应的内容。 图10.3工艺角分析窗口菜单 145 表10.1 工艺角分析窗口菜单内容 菜单选项 \"File\" \"Load\" \"Save Setup\" \"Save Setup As\" \"Save Script\" \"Close\" \"Edit\" \"Corner Definitions-> Add Corner\" \"Corner Definitions-> Copy Corner\" \"Corner Definitions-> Enable Corner\" \"Corner Definitions-> Disable Corner\" \"Corner Definitions-> Add Variable\" \"Corner Definitions-> Delete Selected\" \"Performance Measurements-> Add Measurement\" \"Performance Measurements-> Delete Measurement\" \"Setup\" \"Add Process\" For More Information 采用图形界面载入PCF和DCF配置文件 将设置保存在原来的配置文件 另存配置文件为 保存OCEAN®脚本 关闭工艺角分析窗口 添加一个工艺角/添加一列 复制和修改工艺角 使能某个工艺角 禁用某个工艺角 增加一个变量/增加一行 删除一个工艺角/删除一列 手动输入输出表达式 或者 用Calculator增加输出 删除表达式 用工艺角分析窗口添加一个工艺 \"Add/Update Model 用工艺角分析窗口修改一个工艺的模型信息 Info\" \"Simulation\" \"Run\" \"Stop\" \"Tools\" 运行分析 停止分析 146 \"Calculator\" \"Get Expression\" \"Plot or Print Outputs\" \"Help\" \"Contents\" Calculator 将Calculator中的表达式附给选中的输出 绘制输出的列表或图形 显示文档,包含工作角分析的选项的帮助信息 10.2.2配置和主目录区域 工艺配置(Process)下拉菜单中显示的是工艺角分析的配置的名字,或者在没有定义配置的时候显示”None”。通过该下拉菜单可以切换不同的配置。这里工艺配置的名字不一定和使用的工艺名相同,只要便于区分就可以。该名称既可以用配置文件定义也可以在图形界面中选择“Setup”Æ“Add Process or Setup”Æ“Add/Update Model Info.”设置。 主目录(Base Directory)区域显示的是当前配置中使用的模型库所在的路径。 主目录经常用“corAddProcess”命令在工艺定制文件(PCF)中定义。也可以通过选择“Setup”Æ“Add Process or Setup”Æ“Add/Update Model Info.”定义主目录,如图10.4所示。 图10.1 如果没有定义过工艺配置,工艺角窗口的菜单中只有“File”Æ“Load”,“File”Æ“Close”,“Setup”Æ“Add Process”可以选择,以便载入工艺配置或者手动定义一个工艺配置。 10.2.3 工艺角定义(Corner Definition)界面 工艺角定义界面位于工艺角分析窗口的上半部,显示的是当前定义的工艺角的信息,如图10.5所示。 图10.5 工艺角定义(Corner Definition) 这个界面的信息一般是从工艺定制文件(PCF)文件中和设计配置文件(DCF)文件中定义。采用.cdsinit文件中定义的,详细信息参见第1章。 要定义或者修订工艺角,可以按以下方法修改这个界面上的信息: z 每一列表示一个工艺角,通过单击一列上方对应的按钮可以选择一列; z 也可以直接通过拖动列上方的按钮移动列; z 鼠标指针指到两列之间的时候,如果鼠标指针变化,则可以按住鼠标指针,通过拖动 147 z z z z z 改变列宽。 禁用工艺角(Disable按钮)在图中显示为灰色,使能工艺角(Enable)选项没有显示,当选定一个没有被禁用的工艺角的时候“Disable”会显示为黑色,当选定被禁用的工艺角的时候该按钮将会显示为黑色文字的“Enable”。 每一行可以表示下列2种功能中的一种:(a)一个变量,单元格内的内容是变量的值,如果单元格留空则会使用ADE中定义的变量值;(b)或是一个模型文件,称为工艺角组(Group/Variant)或组变量(Group Variable),这个模型文件必须位于主目录中。这时行首显示的是模型文件名,单元格内显示的是这个模型文件的工艺角。 和列一样,也可以通过拖动移动行,或者改变行的高度。 在工艺角列表中可以编辑的数据显示为白色背景,不能编辑的数据显示为灰色背景。从PCF中载入的数据不能编辑;只有手动加入或者从DCF文件中载入的行或者列才能编辑。 组变量类型的项目如果从PCF文件中载入则显示灰色背景的文字,如果手动加入或者从DCF文件中载入则显示为下拉式菜单。 注意:温度(temp)是默认的变量,默认值为27摄氏度。从5.1.41版开始,这是一个可以 编辑的变量。 工艺角定义界面上的按钮功能如表10.2所示。 表10.2 工艺角定义界面上的按钮功能 按钮 Add Corner Add Variable Copy Corner Delete 介绍和用途 在已有的工艺角的右边添加新的可编辑列。 点击添加新的变量(行)于现有变量列表下方。 复制选择的工艺角(列)到最右边 删除选定的工艺角(列)或者变量 注意: 从PCF中载入的行或者列不能删除,从界面或者DCF文件中载入的行或列可以删除 Disable/ Enable 选定未被禁用的工艺角时候显示为“Disable”--禁用选定的工艺角(列)。点击则禁用的工艺角显示为灰色字。(被禁用的工艺角在仿真的时候不会被分析。) 如果被选定的是被禁用的工艺角,则该按钮会变为使能(Enable)。点击启用选定的工艺角。 Run/ Stop 没有仿真运行的时候显示为运行(Run),点击对所有没有禁用的工艺角运行分析;分析运行过程中该按钮显示为停止(Stop),点击停止正在运行的分析。 10.2.4“Performance Measurement”—输出界面 输出界面位于工艺角的分析窗口的下半部,显示的是当前定义的输出信息,如图10.6所示。 148 图10.2 “Performance Measurement”输出界面 这个界面的信息一般是从.cdsinit文件中用loadDcf命令定义的设计定制文件(Design Customization Files,DCF)读取的。另外,在第一次打开工艺角分析窗口的时候,ADE中定义的输出都会自动导入到该界面中;使用Calculator也可以得到一个输出表达式。 注意:点击“Add Measurement”—添加输出按钮可以添加一个输出。 如果要改变输出方式,可以通过修改本界面中的内容实现。通过点击输出界面中的任何一列都可以选择所在列的输出。 注意:剪切、复制、粘贴快捷键在表格中都可以使用,可以利用它们对输出表达式进行编辑。 输出界面中的各项目的功能描述如表10.3。 表10.3 输出界面中的各项目的功能 项目 Measurement 列 功能描述 点击选定输出的“Measurement”列修改这个输出的名字。该名字在出图的时候用来标明输出系列 点击选定输出的“Expression”列修改该输出的表达式。 点击选定输出的“Target”列可以该输出的理想值。这个值只有在余量分析(residual plot)的时候需要 点击选定输出的“Target”列可以该输出的下限。这个值只有在余量分析(residual plot)的时候需要 点击选定输出的“Target”列可以该输出的上限。这个值只有在余量分析(residual plot)的时候需要 选择该复选框则以图形模式输出所在行 选择该复选框则以文本模式输出所在行 在输出列表最后增加一个新的可编辑的行 删除选定的行 Expression列 Target列 Lower列 Upper列 Plot 复选框 Print复选框 Add Measurement按钮 Delete Measurement按钮 Calculator...按钮 Get Expression按钮 打开或激活已打开的Calculator窗口 选定一个输出的表达式(Expression)项之后,该按钮被激活。点击获取Calculator中的表达式缓存并把它赋到表达式项。 注: 现有表达式项中的文本将被覆盖 10.2.5 界面分割条 这个分割条在工艺角定义界面和输出界面之间,上下拖动用于改变两个界面的大小。 149 10.2.6 状态栏 状态栏显示信息的颜色是以下几种中的一种: 红色:错误信息; 橙色:内部错误信息; 灰色:正常信息提示。 工艺角分析工具同时也会将信息写入工艺角分析的log文件“corners0.log”。工艺角分析工具的log文件被存放在“Cadence®”软件的启动目录下。 10.2.7 键盘导航和快捷键 表10.4 在操作表格的时使用的快捷键与功能描述 快捷键 Tab Shift-Tab 方向键 F2 Page Down Page Up Home End 功能描述 切换光标所在的单元格,次序是从左到右,遇行尾转到下一行行首 切换光标所在的单元格,次序和Tab键正好相反 按照方向切换光标所在格,到行(列)尾不换行(列) 打开/关闭工艺角下拉菜单 如果有垂直滚动条则向下翻页 如果有垂直滚动条则向上翻页 切换到第一列 切换到最后一列 10.3 采用界面设置工艺角分析的实例 下面将通过一个实例演示采用界面设置工艺角分析的详细过程。 10.3.1 电路和“ADE”的设置 首先要设计电路并在“ADE”中配置仿真的选项。例如,现在有如图10.7所示的一个电路需要在CSMC公司0.5um CMOS混合信号工艺下进行工艺角仿真。 150 图10.3 “Corner Analysis”应用例 以AC仿真为例,在“ADE”窗口中按图10.8设置。 图10.4 对图10.7中的电路进行AC仿真的设定 单独仿真结果如图10.9所示。 151 图10.5 AC仿真结果 10.3.2 设置工艺角分析 打开工艺角分析的窗口是如图10.10所示的空窗口的形式,此时可按下列方法进行工艺角分析的手动设置。 图10.6 工艺角分析的设定 [1.] 在菜单中选择“Setup”Æ“Add Process…” 152 图10.7 “Add Process”的界面 a) 在”Process Name”项加入新工艺的名字 b) 选择新工艺中使用的模式(这里就使用Single Model Library) c) 输入工艺文件或者关联到工艺的模型文件的目录名 选择OK,就添加了一个CSMC工艺角,见图10.12。 图10.8 添加了CSMC的工艺角 [2.] 添加几组工艺角。虽然示例中只用到了MOS管的1组工艺角,但这里演示会添加多组工艺 角。 a) 在菜单中选择SetupÆAdd/Update Model Info…,这时就出现了和刚才相似的对话 框,其中有2个选项卡。第一个用来修改工艺的设置,和刚才的添加工艺的对话框差不多,如图10.13所示。 图10.9 工艺设定 b) 对话框中的Group/Variants选项卡则用于添加工艺角组。 153 图10.10 工艺角组的添加 添加组和选项的方法如下: z 在Group Name一栏指定组的名字; z 在Variant栏指定组里的选项; z 选择Apply; z 重复上面3项操作可添加多组工艺角; z 全部结束后点击Cancel退出。 例如,在Group Name栏输入MOS;在Variants栏中输入tt ss sf ff fs,也就是5个工艺角的名称,中间用空格隔开;点击Apply键,这一组工艺角就添加到了工艺角的分析界面中。 将Group Name栏改为RES;在Variants栏中输入restypical resfast resslow;然后点击Apply,这时RES的工艺角组就添加到了界面中; 点击Cancel退出刚才的对话框,界面中多了2行,分别表示2组工艺角的选项。这样,就可以对不同的MOS管和电阻的工艺角进行仿真。 图10.11 上面定义了工艺角的组,下面要设定需要仿真的工艺角,主要有以下几个: c) 建立新的工艺角,步骤如下: z 从菜单选择“Edit”Æ“Corner Definition”Æ“Add Corner”,或者点击按钮“Add Corner”; z 在弹出的对话框中输入工艺角的名字; z 再在表格中对其他栏进行编辑。 d) 复制并修改已有的工艺角,步骤如下: z 首先选定一个工艺角; z 从菜单选择“Edit”Æ“Corner Definition”Æ“Copy Corner” 或者点击按钮 “Copy Corners”; z 在弹出的对话框中输入工艺角的名字; z 然后再在表格中对其他栏进行编辑。 注意:在“IC 5.1.41”中工艺角分析中有一个bug,工艺角的名字不能带有数字,否则在仿真中会报语法错误。 e) 使能工艺角,步骤如下: z 选定一个禁用的工艺角; z 选择”Edit”Æ”Corner Definition”Æ”Enable Corner”或”Enable”按钮。 f) 禁用工艺角: |步骤: 154 z 选择一个没有被禁用的俄工艺角; z 选择”Edit”Æ”Corner Definition”Æ”Disable Corner”或”Disable”按钮。 注:PCF中载入的工艺角不能禁用。 g) 加入新设计变量: 有三类变量:组变量、工艺变量和设计变量。它们的区别见“用工艺角分析窗口修改工艺模型信息”一节。这里介绍的是用界面添加设计变量。 步骤: z 选择”Edit”Æ”Corner Definition”Æ”AddVariable”,或者单击”Add Variable”按钮; z 输入变量名并确定。 h) 删除行(列) 步骤: z 选定需要删除的行(列); z 然后在菜单中选择”Edit”Æ”CornerDefinition”Æ”Delete Selected”或者点 击”Delete”按钮,选定的行(列)就会从界面上消失。 注:PCF中载入的行(列)是不能删除的。 i) 删除设计变量(行) 步骤: z 选定需要删除; z 在菜单中选择”Edit”Æ”CornerDefinition”Æ”Delete Selected”或者点击”Delete” 按钮,选定的列就会从界面上消失。 注:PCF中载入的工艺角和变量是不能删除的。 在所有工艺角都设置完成之后界面如下图: 图10.12 2. 输出设置主要则有以下几种操作 a) 通过直接输入建立一个新的输出 步骤: z 选定”Edit”Æ”Performance Measurements”Æ”Add Measuments”或单击”Add Measurement”按钮; z 在对话框中输出新输出的名字并点击确定; z 在”Expression”—表达式栏输入需要的输出表达式; z (可选)如果表达式的输出结果是标量,且需要将结果画成余量图(Residual Plot)的形式,还要输入”Target”—目标值、”Lower”—下限和”Upper”—上限这三栏。 b) 用Calculator建立新的输出 步骤: z 选定”Edit”Æ”Performance Measurements”Æ”Add Measuments”或单击”Add Measurement”按钮; z 在对话框中输出新输出的名字并点击确定; 155 选定菜单”Tools”Æ”Calculator”或者点击”Calculator”按钮。 利用Calculator建立需要的表达式,详见Calculator的章节; 在工作角分析窗口将输入光标定在需要修改的输出的”Expression”栏; 点击”Get Expression”按钮或者选择菜单中的”Tools”Æ”Get Expression”,Calculator中的表达式就会被截取过来; z (可选)如果表达式的输出结果是标量,且需要将结果画成余量图(Residual Plot)的形式,还要输入”Target”—目标值、”Lower”—下限和”Upper”—上限这三栏。 c) 删除输出: 步骤: z 选定一个输出; z 选择菜单中的”Edit”Æ”Performance Measurement”Æ”Delete Measurement”或者 点击按钮”Delete Measurement” 采用上面列出的方法,建立了2个输出,也就是Vout,表达式为dB20(VF(“/Vout”));另一个是PM,表示相位裕度,表达式为phaseMargin(VF(“/Vout”)) z z z z 图10.13 3. 控制工艺角分析的运行 在运行工艺角分析之前,可以有这些选项: z 禁用不想运行的工艺角; z 选择每个输出是采用文本还是用图输出。可以利用”Plot”和”Print”复选框控制。 z 全部设置完毕,点击按钮”Run”或者菜单”Simulation”Æ”Run”运行分析; z 分析过程中,还可以点击”Stop”或者菜单”Simulation”Æ”Stop”停止分析; 注意:”Run”和”Stop”按钮按照是否有仿真运行自动切换。 4. 工艺角分析的输出设置: 仿真成功后结果会按照之前的选项绘图或者输出文字结果。 如果要定义不同的输出,可以重新定义输出的表达式然后选择”Tools”Æ”Plot or Print Output”或者Plot or Print”,新的表达式就会输出。 a) 文本输出形式如下: z 如果文本输出的是一个标量,例如前面设置的相位裕度,则会如下图输出 窗口中每一列显示的是一个输出,每行是一个工艺角。 156 图10.14 z 对于一个波形的输出,输入为文字形式会成如下形式: 图10.15 第一列显示的是分析的数据点的X轴坐标,后面每一列都列出一个特定工艺角的结果数据。 b) 10.4.2 图形输出 有两种图形输出方式,一种是余量图模式,一种是曲线族显示模式。 z 余量图模式采用柱状图形式,可以清楚地看出是不是所有的工艺角的输出都在 接受范围之内。 157 图10.16余量图 图中的输出是以target作为中心的柱状图。如果没有设置target,则会输出成普通以0为中心的柱状图。 z 曲线族的显示模式输出图形式如下图: 图10.17 这个图中的每一条曲线代表一个工艺角的图线。 5. 保存设置 工艺角设置包含工艺角分析窗口中可以设置的一切信息,包括工艺角和输出的信息。 a) 保存 如果配置是从PCF或DCF文件读取的,在菜单中选择”File”Æ”Save Setup”可将设置写回原来的配置文件; 如果配置是手动输入的,这个选项不可选。 注意:如果读取过多个配置文件则会写回到最后一个读取的配置文件;被覆盖的文 158 件内的注释都回丢失;另外,如果原配置文件是只读的,则会有错误信息出现。 b) 如果是手动输入的工艺角配置或不想覆盖元配置文件,可以选择”File”Æ”Save Setup As..”—另存配置。下次使用Corner Analysis的时候就可以调用以前的配置了 图10.18 如图,这个窗口很像windows中的文件管理器,就不多介绍了。 c) 保存为OCEAN®脚本 OCEAN®是一个文本界面的命令行界面,通过它可以在Unix shell或者在Cadence的命令行界面(CIW)设置、运行和分析仿真的输出数据。也可以通过OCEAN®脚本运行OCEAN®的所有功能。 可以在工艺角分析窗口设定窗口设置好需要的分析,将设置保存成OCEAN®脚本。该脚本既可以用OCEAN®直接运行,也可以编辑这个脚本,然后再从OCEAN®中调用。 关于OCEAN®更详细的信息请看OCEAN®的章节。 选择菜单的”File”Æ”Save Script”,然后弹出和windows的保存窗口很相似的文件管理器,从中指定脚本的路径和文件名。 10.4 使用工艺、设计和模型文件 在实际使用中,经常需要通过工艺角分析的脚本实现仿真的自动化,所以了解工艺角分析的配置文件是很有必要的。 一般有3种工艺角分析的配置文件。 z 工艺配置文件PCF,定义工艺、工艺角组、组选项和各个工艺角的全局设置。PCF一般 由工艺工程师或代工厂编写。 z 设计定制文件DCF,包含的是设计专用的设定,它在PCF的基础上追加载入。一般由 电路的设计者编写。 z 模型文件定义的是工艺角分析中使用的器件模型参数值这些文件一般由工艺工程师或 者代工厂提供。 一般使用工艺角分析一般不涉及修改PCF和DCF文件,但如果需要编写修改这些配置文件,请看以下的章节作为指导。 159 10.4.1建立DCF和PCF文件 PCF和DCF中包含Cadence SKILL语言的命令,这些命令定义了分析中使用的基本的工艺角和输出。下面章节介绍的是怎样使用这些命令开发需要的设定。 SKILL语言和PI的所有命令在PCF和DCF中都可以通用。但一般定义工艺、工艺角和工艺角变量的命令一般被放在PCF中。设定设计变量、输出的命令一般都在DCF中。 PCF中的常用命令 corAddProcess corSetModelFile corAddCorner corAddGroupAndVariantChoices corAddModelFileAndSectionChoices corSetCornerModelFileSection corAddProcessVar corSetProcessVarVal corSetCornerGroupVariant corSetCornerNomTempVal DCF中的常用命令 corAddDesignVar corSetDesignVarVal corSetCornerRunTempVal corAddMeas corSetMeasExpression corSetMeasLower corSetMeasUpper corSetMeasTarget corSetMeasGraphicalOn corSetMeasTextualOn 通用的命令 corSetCornerVarVal corCopyCorner 注意:corSetModelFile命令只能在单模型库模式下使用。 更多的信息,包括命令格式,参照Virtuoso® Analog Design Environment SKILL语言帮助。 要调试PCF和DCF文件,可以考虑使用OCEAN,因为OCEAN的输出比较完整。可以参照安装路径中的使用实例。文件位置在: Cadence安装目录/tools/dfII/samples/artist/corners 例:准备一个工艺配置文件PCF PCF添加一个新的工艺到工艺角分析图形界面,并定义一组工艺角。例如,下列的PCF加入了一个名为P50u的工艺,制定了模型样式为singleModelLib,并且定义了三个工艺角:slowslow, nominal, fastfast。 ; Example PCF file for the process P50u. corAddProcess( \"P50u\" \"~/processes\" 'singleModelLib ) corSetModelFile(\"P50u\" \"P50uModelFile.scs\") ; Prepare to add a process variable to each corner. corAddProcessVar( \"P50u\" \"EdgeEffect\" ) ; Now add the corners, specifying the values and choices for each. corAddCorner( \"P50u\" \"fastfast\" ) corSetCornerVarVal( \"P50u\" \"fastfast\" \"EdgeEffect\" \"1.18\" ) corAddCorner( \"P50u\" \"slowslow\" ) corSetCornerVarVal( \"P50u\" \"slowslow\" \"EdgeEffect\" \"1.12\" ) corAddCorner( \"P50u\" \"nominal\" ) corSetCornerVarVal( \"P50u\" \"nominal\" \"EdgeEffect\" \"1.15\" ) fastest、typical、和slow工艺角的模型参数偏差不在PCF中定义,而是在模型文件中定义。例如,P50u工艺的PCF配置文件中引用的模型文件P50uModelFile.scs含有以下的语句。 .LIB slowest .model npn2 npn tf=120n .model nmosR nmos tox=120n .ENDL slowest .LIB typical .model npn2 npn tf=100n 160 .model nmosR nmos tox=100n .ENDL typical .LIB fastest .model npn2 npn tf=80n .model nmosR nmos tox=80n .ENDL fastest 载入含有P50u工艺的PCF文件,产生的设置在界面上显示效果如下图 注意:temp变量表示温度,默认值为27 例:准备一个设计配置文件DCF DCF定义的是设计专用的变量和输出,例如,下面的DCF文件添加了设计变量设置了运行分析的温度并且添加了输出。 corAddDesignVar( \"vss\" ) corSetDesignVarVal( \"vss\" \"\" ) corSetCornerVarVal( \"P50u\" \"fastfast\" \"vss\" \"70\" ) corSetCornerVarVal( \"P50u\" \"slowslow\" \"vss\" \"50\" ) corSetCornerVarVal( \"P50u\" \"nominal\" \"vss\" \"60\" ) corSetCornerRunTempVal(\"P50u\" \"slowslow\" -35) ; You must add the measurement before you define it. corAddMeas( \"bandwidth\" ) corSetMeasExpression( \"bandwidth\" \"bandwidth(VF('/vout') 3 'low')\" ) corSetMeasLower(\"bandwidth\" \"8Mhz\") corSetMeasUpper(\"bandwidth\" \"12Mhz\") corSetMeasTarget(\"bandwidth\" \"10Mhz\") 在前一个例子中定义的P50u工艺的基础上载入DCF文件,工艺角定义界面和输出界面分别显示如下: 图10.19 图10.20 161 10.4.2 用.cdsinit文件载入PCF和DCF文件 一个简单的载入PCF和DCF文件的方法就是通过配置.cdsinit文件,可以采用以下方法设置: 直接利用.cdsinit文件载入所有PCF和DCF文件 载入DCF,由DCF文件指定需要载入的PCF文件 保证.cdsinit文件载入所有需要的PCF和DCF文件。 例如:在.cdsinit文件中加入一下的语句载入PCF和DCF文件。 loadPcf \"process1.pcf\" loadPcf \"process2.pcf\" loadDcf \"cellPhone23.dcf loadDcf \"opamp47.dcf 在.cdsinit文件中指定需的DCF文件,而由DCF文件指定需要的PCF文件 例如:在.cdsinit文件中加入 loadDcf(\"/mnt4/radhikak/tools/dfII/src/corners/myanalog35u.dcf\") 在DCF文件中加入以下的语句: ; This is the myanalog35u.dcf loadPcf(\"mypath/analog35u.pcf\") 不论采用何种方式,必须保证引用的DCF中引用的工艺都是定义过的,一般表示需要先载入PCF文件再载入DCF文件。 10.4.3选择模型样式 工艺角分析支持5种不同的模型样式,分别是:单一模型文件(Single Model Library),多模型文件(Multiple Model),单枚举(Single Numeric), 多枚举(Multiple Numeric), 多参数(Multiple Parametric)五种模式。 从IC5.1.41版开始工艺角分析的样式有了一些改变,单枚举模式是默认的模式。为了和第三方OASIS工艺角集成,同时也支持单模型文件和单枚举模式。要使用和定义工艺角和工艺属性,需要一个合适的工具来建立PCF文件。 Cadence建议使用单模型文件模式或者多模型文件模式运行Cadence® Spcetre®电路仿真器。对于SpectreS仿真器,Cadence建议使用多枚举模式。省下的2种模式:单枚举和多参数应当小心使用。下面章节将介绍这几种PCF文件的文件结构和例子。 10.4.4 单模型文件模式 Cadence建议使用这种简单的方法使用工艺角分析。采用这种方式可以: z 将所有的模型和所有的工艺角都保存在一个模型文件; z 该文件位于主目录中; z 文件名任意; 可以在工艺角分析窗口中输入文件名或者通过corSetModelFile命令确定模型文件的文件名。 下面的表格演示了单模型库模式的设计方式。根据用户习惯,也可以使用.LIB语法的模型文件。.LIB语法是hspice的模型语法,该语法在spectre中也支持。 1. 单模型文件模式 162 Path ./CORNERS/fab6/ Filename mylibfile.scs File Contents library processA section slowslow model npn2 npn tf=120n model npn9 npn tf=320n model nmosR nmos tox=120n model nmos8 nmos tox=320n endsection section nom model npn2 npn tf=100n model npn9 npn tf=300n model nmosR nmos tox=100n model nmos8 nmos tox=300n endsection section fastfast model npn2 npn tf=80n model npn9 npn tf=380n model nmosR nmos tox=80n model nmos8 nmos tox=380n endsection endlibrary 下面的代码演示的事怎样在PCF中引用以下的模型结构 corAddProcess(\"fab6\" \"./CORNERS/fab6/\" 'singleModelLib) corSetModelFile(\"fab6\" \"mylibfile.scs\") corAddProcessVar(\"fab6\" \"vdc\") corAddCorner(\"fab6\" \"slowslow\" ?runTemp 20 ?nomTemp 27 ?vars '( (\"vdc\" 2) ) ) PCF文件载入后Virtuoso®工艺角分析窗口如图 图10.21 在单文件模型模式下建立新的工艺角组和选项: 从IC 5.1.41版本开始,可以在单模型文件模式中用不同的工艺角指定模型文件中相同的章节(Section)。这些更改要求这样使用corSetCornerGroupVariant()函数: corSetCornerGroupVariant( <工艺名> <工艺角名> <组名> <组选项> ) 其中 工艺名: 工艺的名字(可以自由定义),比如,fab6 工艺角名 工艺角的名字,是模型文件中的节(Section)的名字 组名 163 工艺角组的名字,这个组当中有多个选项。 组选项 工艺角组的选项。每个选项是模型文件中的一个节的名字。 下面的代码演示的是怎样在单模型文件模式下用PCF文件设置多个工艺角和组的选项。 corAddProcess(\"singleModelLib\" \"./CORNERS/singleModelLib\" 'singleModelLib) corSetModelFile(\"singleModelLib\" \"singleModelLib.scs\") corAddModelFileAndSectionChoices(\"singleModelLib\" \"groupname\" '( \"slowslow\" \"slowfast\" \"typtyp\" \"fastslow\" \"fastfast\") ) corAddProcessVar(\"singleModelLib\" \"vdd\") corAddProcessVar(\"singleModelLib\" \"vss\") corAddDesignVar( \"Cload\" ) corAddCorner( \"singleModelLib\" \"cor1\" ) corSetCornerNomTempVal( \"singleModelLib\" \"cor1\" 27 ) corSetCornerRunTempVal( \"singleModelLib\" \"cor1\" 125 ) corSetCornerVarVal( \"singleModelLib\" \"cor1\" \"Cload\" \"260f\" ) corSetCornerVarVal( \"singleModelLib\" \"cor1\" \"vss\" \"-2.7\" ) corSetCornerVarVal( \"singleModelLib\" \"cor1\" \"vdd\" \"2.7\" ) corSetCornerGroupVariant( \"singleModelLib\" \"cor1\" \"groupname\" \"slowslow\" ) corAddCorner( \"singleModelLib\" \"cor2\" ) corSetCornerNomTempVal( \"singleModelLib\" \"cor2\" \"27\" ) corSetCornerRunTempVal( \"singleModelLib\" \"cor2\" 27 ) corSetCornerVarVal( \"singleModelLib\" \"cor2\" \"Cload\" \"200f\" ) corSetCornerVarVal( \"singleModelLib\" \"cor2\" \"vss\" \"-3\" ) corSetCornerVarVal( \"singleModelLib\" \"cor2\" \"vdd\" \"3\" ) corSetCornerGroupVariant( \"singleModelLib\" \"cor2\" \"groupname\" \"slowslow\" ) corAddCorner( \"singleModelLib\" \"cor3\" ) corSetCornerNomTempVal( \"singleModelLib\" \"cor3\" 27 ) corSetCornerRunTempVal( \"singleModelLib\" \"cor3\" 27 ) corSetCornerVarVal( \"singleModelLib\" \"cor3\" \"Cload\" \"200f\" ) corSetCornerVarVal( \"singleModelLib\" \"cor3\" \"vss\" \"-3\" ) corSetCornerVarVal( \"singleModelLib\" \"cor3\" \"vdd\" \"3\" ) corSetCornerGroupVariant( \"singleModelLib\" \"cor3\" \"groupname\" \"fastfast\" ) corAddCorner( \"singleModelLib\" \"cor4\" ) corSetCornerNomTempVal( \"singleModelLib\" \"cor4\" \"27\" ) corSetCornerRunTempVal( \"singleModelLib\" \"cor4\" 27 ) corSetCornerVarVal( \"singleModelLib\" \"cor4\" \"Cload\" \"200f\" ) corSetCornerVarVal( \"singleModelLib\" \"cor4\" \"vss\" \"-3\" ) corSetCornerVarVal( \"singleModelLib\" \"cor4\" \"vdd\" \"3\" ) corSetCornerGroupVariant( \"singleModelLib\" \"cor4\" \"groupname\" \"fastfast\" ) corAddCorner( \"singleModelLib\" \"cor5\" ) corSetCornerNomTempVal( \"singleModelLib\" \"cor5\" 27 ) corSetCornerRunTempVal( \"singleModelLib\" \"cor5\" -55 ) corSetCornerVarVal( \"singleModelLib\" \"cor5\" \"Cload\" \"160f\" ) corSetCornerVarVal( \"singleModelLib\" \"cor5\" \"vss\" \"-3.3\" ) corSetCornerVarVal( \"singleModelLib\" \"cor5\" \"vdd\" \"3.3\" ) corSetCornerGroupVariant( \"singleModelLib\" \"cor5\" \"groupname\" \"slowslow\" ) corAddCorner( \"singleModelLib\" \"cor6\" ) corSetCornerNomTempVal( \"singleModelLib\" \"cor6\" 27 ) corSetCornerRunTempVal( \"singleModelLib\" \"cor6\" -55 ) corSetCornerVarVal( \"singleModelLib\" \"cor6\" \"Cload\" \"190f\" ) corSetCornerVarVal( \"singleModelLib\" \"cor6\" \"vss\" \"-3.0\" ) corSetCornerVarVal( \"singleModelLib\" \"cor6\" \"vdd\" \"3.0\" ) corSetCornerGroupVariant( \"singleModelLib\" \"cor6\" \"groupname\" \"slowfast\" ) corAddMeas( \"DCgain\" ) corSetMeasExpression( \"DCgain\" \"ymax(db20(VF('/vout')))\" ) corSetMeasTarget( \"DCgain\" 60 ) corSetMeasEnabled( \"DCgain\" t ) corSetMeasGraphicalOn( \"DCgain\" t ) corSetMeasTextualOn( \"DCgain\" nil ) corAddMeas( \"bandwidth\" ) corSetMeasExpression( \"bandwidth\" \"bandwidth(VF('/vout') 3 'low')\" ) corSetMeasEnabled( \"bandwidth\" t ) corSetMeasGraphicalOn( \"bandwidth\" t ) corSetMeasTextualOn( \"bandwidth\" nil ) 164 corAddMeas( \"gain\" ) corSetMeasExpression( \"gain\" \"dB20(VF('/vout'))\" ) corSetMeasEnabled( \"gain\" t ) corSetMeasGraphicalOn( \"gain\" t ) corSetMeasTextualOn( \"gain\" nil ) corAddMeas( \"phase\" ) corSetMeasExpression( \"phase\" \"phase(VF('/vout'))\" ) corSetMeasEnabled( \"phase\" t ) corSetMeasGraphicalOn( \"phase\" t ) corSetMeasTextualOn( \"phase\" nil ) 载入PCF文件之后工艺角分析窗口显示如下: 图10. 22 2. 多模型文件模式 这种模式使用了多个库文件,必须在PCF和DCF文件中使用corAddModelFilesAndSectionChoices和corAddCorner命令。其他方面,这种模式下和在单模型文件中没有差别。例如,模型可以存储在下列的文件中: ./CORNERS/fab6/path1/npn.scs ./CORNERS/fab6/path3/nmos.scs 下表显示的是多模型文件模式的设计方式。除了.SCS模型文件,也可以使用.LIB模型文件。 多模型文件模式 Path ./CORNERS/fab6/path1/ Filename npn.scs File Contents library npn section slow model npn2 bjt tf=120n model npn8 bjt tf=80n endsection section nom model npn2 bjt tf=100n model npn8 bjt tf=60n endsection section fast model npn2 bjt tf=80n model npn8 bjt tf=50n endsection endlibrary library nmos section slow model nmosR mos3 tox=120n model nmos2 mos3 tox=140n endsection section nom model nmosR mos3 tox=100n model nmos2 mos3 tox=115n endsection ./CORNERS/fab6/path3/ nmos.scs 165 section fast model nmosR mos3 tox=80n model nmos2 mos3 tox=90n endsection endlibrary 下面的代码演示了如何在PCF中使用多模型文件模式: corAddProcess(\"fab6\" \"./CORNERS/fab6/\" 'multipleModelLib) corAddModelFileAndSectionChoices(\"fab6\" \"path1/npn.scs\" '( \"slow\" \"nom\" \"fast\") ) corAddModelFileAndSectionChoices(\"fab6\" \"path3/nmos.scs\" '( \"slow\" \"nom\" \"fast\") ) corAddProcessVar(\"fab6\" \"vdc\") corAddCorner(\"fab6\" \"slowslow\" ?sections '( (\"path1/npn.scs\" \"slow\") (\"path3/nmos.scs\" \"slow\") ) ?runTemp 20 ?nomTemp -27 ?vars '( (\"vdc\" 2) ) ) corAddCorner(\"fab6\" \"nomnom\" ?sections '( (\"path1/npn.scs\" \"nom\") (\"path3/nmos.scs\" \"nom\") ) ?runTemp 30 ?nomTemp 27 ?vars '( (\"vdc\" 3) ) ) corAddCorner(\"fab6\" \"fastfast\" ?sections '( (\"path1/npn.scs\" \"fast\") (\"path3/nmos.scs\" \"fast\") ) ?runTemp 40 ?nomTemp -27 ?vars '( (\"vdc\" 4) ) ) corAddCorner(\"fab6\" \"fastslow\" ?sections '( (\"path1/npn.scs\" \"fast\") (\"path3/nmos.scs\" \"slow\") ) ?runTemp 50 ?nomTemp -27 ?vars '( (\"vdc\" 4) ) ) 载入这个PCF文件之后工艺角分析窗口如下: 图10.23 3. 单枚举模式(Single Numeric Style) 采用这个模式主要目的是为了对旧版本的支持。 如果想要用工艺角分析的方式使用Spectre® 仿真器,Cadence建议转换到一个更好的模式(Style)。 z 用这种模式,每个工艺角都保存在单独的模型文件中,如果有5个工艺角,就要有5 个模型文件。所有的模型文件都要有相同的文件名。 z 每个模型文件保存在 主目录/工艺角名 目录下。例如如果一个工艺角叫allfast,则就要 有一个模型文件保存在 主目录/allfast 目录下。 166 z 这个公用的模型文件名可以任意取名。 如果直接使用Spectre®仿真器,选择菜单”Setup”Æ”Model Library”,在模型库设置 对话框中输入模型的名字。 如果使用的是接口仿真器,选择”Setup”Æ”Environment”打开一个对话框输入包含 的模型文件名。 下面的表格演示了一个含有3个工艺角的配置文件,使用的是单枚举模式。 单枚举格式 Path ./CORNERS/fab6/allslow/ Filename models File Contents .model npn2 npn tf=120n .model npn9 npn tf=320n .model nmosR nmos tox=120n .model nmos8 nmos tox=320n .model npn2 npn tf=100n .model npn9 npn tf=300n .model nmosR nmos tox=100n .model nmos8 nmos tox=300n .model npn2 npn tf=80n .model npn9 npn tf=380n .model nmosR nmos tox=80n .model nmos8 nmos tox=380n ./CORNERS/fab6/allnom/ models ./CORNERS/fab6/allfast/ models PCF文件中这样设定这些模型工艺角: corAddProcess(\"fab6\" \"./CORNERS/fab6\" 'singleNumeric) corAddCorner(\"fab6\" \"allslow\" ?runTemp -55 ) corAddCorner(\"fab6\" \"allnom\" ?runTemp -27 ) corAddCorner(\"fab6\" \"allfast\" ?runTemp 55 ) 显示如下: 图10.24 4. 多枚举模式 这种模式也是为了提供对以前版本支持而设置的。 a) 在这种模式下,每个模型都在不同的模型文件中定义。所有模型的参数都分别定义。 b) 每个模型文件都保存在 主目录/组名/组选项名 目录下。例如,如有一个模型被包含在 npn组,作为选项fast,则至少要有一个模型文件保存在 主目录/npn/fast 文件夹下。 c) 每个模型文件的文件名都在ADE中的 “编辑对象属性”(Edit Object Properties) 中输入。 多枚举模式 167 Path ./CORNERS/fab6/npn/slow/ Filename npn2.scs npn9.scs File Contents model npn2 bjt tf=120n model npn9 bjt tf=320n model npn2 bjt tf=100n model npn9 bjt tf=300n model npn2 bjt tf=80n model npn9 bjt tf=380n model nmosR mos3 tox=120 model nmos8 mos3 tox=320n model nmosR mos3 tox=100n model nmos8 mos3 tox=300n model nmosR mos3 tox=80n model nmos8 mos3 tox=380n ./CORNERS/fab6/npn/nom/ npn2.scs npn9.scs ./CORNERS/fab6/npn/fast/ npn2.scs npn9.scs ./CORNERS/fab6/nmos/slow/ nmosR.scs nmos8.scs ./CORNERS/fab6/nmos/nom/ nmosR.scs nmos8.scs ./CORNERS/fab6/nmos/fast/ nmosR.scs nmos8.scs 下面的代码演示了怎样在PCF中设置 corAddProcess(\"fab6\" \"./CORNERS/fab6\" 'multipleNumeric) corAddGroupAndVariantChoices(\"fab6\" \"npn\" '(\"slow\" \"nom\" \"fast\") ) corAddGroupAndVariantChoices(\"fab6\" \"nmos\" '(\"slow\" \"nom\" \"fast\") ) corAddCorner(\"fab6\" \"slowslow\" ?variants '( (\"npn\" \"slow\") (\"nmos\" \"slow\") ) ?nomTemp -55 ?vars '( (\"Cload\" 260f) ) ) corAddCorner(\"fab6\" \"slowfast\" ?variants '( (\"npn\" \"slow\") (\"nmos\" \"fast\") ) ?nomTemp -55 ?vars '( (\"Cload\" 200f) ) ) 工艺角分析窗口将显示如下: 图10.25 168 在多枚举模型模式下使用Spectre®仿真器 当在多枚举模式下使用工艺角分析和Spectre®仿真器的时候,保证在.cdsenv文件中定义了includeStyle变量。 5. 多参数模型模式 在这种模型模式主要也是为了对旧版的支持,有如下特性。 z 采用这种模式,每个模型都在一个单独的文件中存储。每个工艺角有一个对应的参数文 件。 z 工艺文件保存在 主目录/组名 目录下。例如:如果模型有一个工艺角组npn,则这些模 型文件保存在了 主目录/npn 目录下 z 每个参数文件保存在 主目录/组名/组选项名 目录下。例如:如果npn工艺角组中有一 个选项fast,则至少有一个参数文件保存在 主目录/组名 文件夹下。 z 每个模型文件的文件名可以在Virtuoso® ADE中的“编辑对象属性”(Edit Object Properties) 中输入。 下表演示的时使用多参数模型模式的设置文件的结构。 多模型文件模式 Path ./CORNERS/fab6/npn Filename npn2.scs File Contents include \"npn2.param\" model npn2 bjt tf=TF2 include \"npn9.param\" model npn9 bjt tf=TF9 parameter TF2=120n parameter TF9=320n parameter TF2=100n parameter TF9=300n parameter TF2=80n parameter TF9=380n model npn2 mos3 tf=TOXR model npn9 mos3 tf=TOX8 parameter TOXR=120 parameter TOX8=320n parameter TOXR=100n parameter TOX8=300n parameter TOXR=80n parameter TOX8=380n npn9.scs ./CORNERS/fab6/npn/slow/ npn2.param npn9.param ./CORNERS/fab6/npn/nom/ npn2.param npn9.param ./CORNERS/fab6/npn/fast/ npn2.param npn9.param ./CORNERS/fab6/nmos nmosR.scs nmos8.scs ./CORNERS/fab6/nmos/slow/ nmosR.param nmos8.param ./CORNERS/fab6/nmos/nom/ nmosR.param nmos8.param ./CORNERS/fab6/nmos/fast/ nmosR.param nmos8.param 下面的PCF设置文件演示了使用多参数模式的方法: corAddProcess(\"fab6\" \"./CORNERS/fab6\" 'multipleParametric) corAddGroupAndVariantChoices(\"fab6\" \"npn2\" '(\"slow\" \"nominal\" \"fast\") ) 169 corAddGroupAndVariantChoices(\"fab6\" \"nmos8\" '(\"slow\" \"nominal\" \"fast\") ) corAddGroupAndVariantChoices(\"fab6\" \"npn9\" '(\"slow\" \"nominal\" \"fast\") ) corAddGroupAndVariantChoices(\"fab6\" \"nmosR\" '(\"slow\" \"nominal\" \"fast\") ) corAddCorner(\"fab6\" \"slowslow\" ?variants '( (\"npn2\" \"slow\") (\"nmos8\" \"slow\") (\"npn9\" \"slow\") (\"nmosR\" \"slow\") ) ?nomTemp -55 ) corAddCorner(\"fab6\" \"slowfast\" ?variants '( (\"npn2\" \"slow\") (\"nmos8\" \"fast\") (\"npn9\" \"slow\") (\"nmosR\" \"fast\") ) ?nomTemp -55 ) Virtuoso®工艺角分析窗口在载入了上述PCF文件之后显示如下: 图10.26 用Spectre®仿真器结合多参数模式的工艺角分析 这时请保证在.cdsenv文件中有定义includeStyle变量。 用其他接口仿真器(Socket Simulator)结合多参数模式的工艺角分析 这时要制定一个名为update.s的参数文件。例如:update.s可以含有如下内容: use npn2.s use npn9.s use nmosR.s use nmos8.s 如果想要重载选定的工艺角的定义,可以在init.s中使用use命令而不是在update.s文件中。因为工艺角分析在分析设置的时候init.s有更高的优先级,所以可以用init.s重载update.s文件中的设置。 注意:工艺角设定为不用再每个psf文件夹中建里runObjFile。因而,result browser不能查看所有的目录。想要查看所有的目录,可以使用Create ROF功能。 这段不太懂(Note: Corners is designed such that it does not create a runObjFile in each psf 170 directory it creates. Therefore, the results browser cannot be used to browse through the directories. In order to browse individual directories, you can use the Create ROF feature.) 10.5 使用配置文件运行工艺角分析的实例 下面这一届将用一个完整的实例详细演示怎样使用工艺角分析工具实际电路的特性。这个例子介绍了在一个实际的折叠共源共栅运放电路并解释怎样安排配套的模型文件。下面介绍的例子的文件保存在 Cadence安装目录/tools/dfII/samples/artist/corners/artistExample 要继续下面的例子,请在该目录下运行icms。其中使用的.cdsinit文件就保存在该路径下。 10.5.1 折叠共源共栅电路 电路图如下: 171 图10.27 该电路图中包含多个PMOS和NMOS的实例,每个PMOS管成是相同的。同样,每个NMOS也相同。但实际上,每个晶体管的属性有轻微的不同。在这个例子中,通过工艺角仿真可以总结出工艺误差对电路性能的影响。 10.5.2 设置Virtuoso® ADE窗口 要使用这个例子,首先要对ADE进行设置: 1. 在CIW—命令行中选择菜单”Tools”Æ”Analog Environment”Æ”Simulation”,Virtuoso® ADE窗口出现; 2. 选择菜单”Setup”Æ”Design”选择要进行仿真的电路:在设计库RF_lib中的模块 foldedCascode,选择OK。 3. 在ADE窗口中选择菜单”Session”Æ”Load State”;载入仿真设置窗口将会出现;在其中 选择名为Corners的设置,选择OK; 4. 选择菜单”Output”Æ”To Be Plotted”Æ”Select On Schematic”;在弹出的电路图窗口中选 择vout节点。 在PCF文件中也可以定义输出,但由于ADE的输出会自动在工艺角分析工具启动的时候导入到工艺角分析工具中,所以这种应用方法也很常用。 设置完毕的ADE窗口如图: 172 图10. 28 模式选择: 这个例子中使用的是多模型文件模式。PMOS和NMOS的偏差分别放在各自的模型文件中,储存在主目录multipleModelLib下。 NMOS器件的参数保存在 CORNERS/multipleModelLib/nmosLib.scs 目录下,文件内容如下 library nmosLib section nom include \"../nmos/typ/nmos.scs\" endsection section fast include \"../nmos/fast/nmos.scs\" endsection section slow include \"../nmos/slow/nmos.scs\" endsection endlibrary 如果需要,也可以将具体参数直接放在这一个文件中;但在这个例子当中,工艺角的实际内容分别被放在了不同的文件中,通过一个库文件对其进行引用。 ../nmos/typ/nmos.scs是nom一节中引用的模型文件,设定了一般的NMOS的模型参数。该文件内容如下: simulator lang=spice * VTI Level=2 slowN/slowP model .model nmos nmos level=2 + vto = 0.9 + tox = 430e-10 + nsub = 1.0e+16 + xj = 0.15U *+ ld = 0.20U + ld = 0.075U + u0 = 620 + ucrit = 0.62e5 + uexp = 0.125 + vmax = 5.1e4 173 + neff = 4.0 + delta = 1.4 + rsh = 38 + cgso = 2.10e-10 + cgdo = 2.10e-10 + cj = 215U + cjsw = 540P + mj = 0.76 + mjsw = 0.30 + pb = 0.8 另外2个工艺库文件的内容也和该文件类似。 10.5.3 工艺配置文件(PCF) 这个例子当中没有使用DCF,所有的配置都在一个PCF文件中定义,文件名是multipleModelLib.pcf。该配置文件内容如下: corAddProcess( \"multipleModelLib\" \"./CORNERS/multipleModelLib\" 'multipleModelLib ) corAddProcessVar( \"multipleModelLib\" \"vdd\" ) corAddProcessVar( \"multipleModelLib\" \"vss\" ) corAddDesignVar( \"Cload\" ) corAddGroupAndVariantChoices( \"multipleModelLib\" \"pmosLib.scs\" '(\"slow\" \"nom\" \"fast\") ) corAddGroupAndVariantChoices( \"multipleModelLib\" \"nmosLib.scs\" '(\"slow\" \"nom\" \"fast\") ) corAddCorner( \"multipleModelLib\" \"slowslow\" ) corSetCornerGroupVariant( \"multipleModelLib\" \"slowslow\" \"nmosLib.scs\" \"slow\" ) corSetCornerGroupVariant( \"multipleModelLib\" \"slowslow\" \"pmosLib.scs\" \"slow\" ) corSetCornerNomTempVal( \"multipleModelLib\" \"slowslow\" 27 ) corSetCornerRunTempVal( \"multipleModelLib\" \"slowslow\" 125 ) corSetCornerVarVal( \"multipleModelLib\" \"slowslow\" \"Cload\" \"260f\" ) corSetCornerVarVal( \"multipleModelLib\" \"slowslow\" \"vss\" \"-2.7\" ) corSetCornerVarVal( \"multipleModelLib\" \"slowslow\" \"vdd\" \"2.7\" ) corAddCorner( \"multipleModelLib\" \"fastslow\" ) corSetCornerGroupVariant( \"multipleModelLib\" \"fastslow\" \"nmosLib.scs\" \"slow\" ) corSetCornerGroupVariant( \"multipleModelLib\" \"fastslow\" \"pmosLib.scs\" \"fast\" ) corSetCornerNomTempVal( \"multipleModelLib\" \"fastslow\" \"27\" ) corSetCornerRunTempVal( \"multipleModelLib\" \"fastslow\" 27 ) corSetCornerVarVal( \"multipleModelLib\" \"fastslow\" \"Cload\" \"200f\" ) corSetCornerVarVal( \"multipleModelLib\" \"fastslow\" \"vss\" \"-3\" ) corSetCornerVarVal( \"multipleModelLib\" \"fastslow\" \"vdd\" \"3\" ) corAddCorner( \"multipleModelLib\" \"typtyp\" ) corSetCornerGroupVariant( \"multipleModelLib\" \"typtyp\" \"nmosLib.scs\" \"nom\" ) corSetCornerGroupVariant( \"multipleModelLib\" \"typtyp\" \"pmosLib.scs\" \"nom\" ) corSetCornerNomTempVal( \"multipleModelLib\" \"typtyp\" 27 ) corSetCornerRunTempVal( \"multipleModelLib\" \"typtyp\" 27 ) corSetCornerVarVal( \"multipleModelLib\" \"typtyp\" \"Cload\" \"200f\" ) corSetCornerVarVal( \"multipleModelLib\" \"typtyp\" \"vss\" \"-3\" ) corSetCornerVarVal( \"multipleModelLib\" \"typtyp\" \"vdd\" \"3\" ) corAddCorner( \"multipleModelLib\" \"slowfast\" ) corSetCornerGroupVariant( \"multipleModelLib\" \"slowfast\" \"nmosLib.scs\" \"fast\" ) corSetCornerGroupVariant( \"multipleModelLib\" \"slowfast\" \"pmosLib.scs\" \"slow\" ) 174 corSetCornerNomTempVal( \"multipleModelLib\" \"slowfast\" \"27\" ) corSetCornerRunTempVal( \"multipleModelLib\" \"slowfast\" 27 ) corSetCornerVarVal( \"multipleModelLib\" \"slowfast\" \"Cload\" \"200f\" ) corSetCornerVarVal( \"multipleModelLib\" \"slowfast\" \"vss\" \"-3\" ) corSetCornerVarVal( \"multipleModelLib\" \"slowfast\" \"vdd\" \"3\" ) corAddCorner( \"multipleModelLib\" \"fastfast\" ) corSetCornerGroupVariant( \"multipleModelLib\" \"fastfast\" \"nmosLib.scs\" \"fast\" ) corSetCornerGroupVariant( \"multipleModelLib\" \"fastfast\" \"pmosLib.scs\" \"fast\" ) corSetCornerNomTempVal( \"multipleModelLib\" \"fastfast\" 27 ) corSetCornerRunTempVal( \"multipleModelLib\" \"fastfast\" -55 ) corSetCornerVarVal( \"multipleModelLib\" \"fastfast\" \"Cload\" \"160f\" ) corSetCornerVarVal( \"multipleModelLib\" \"fastfast\" \"vss\" \"-3.3\" ) corSetCornerVarVal( \"multipleModelLib\" \"fastfast\" \"vdd\" \"3.3\" ) corAddMeas( \"DCgain\" ) corSetMeasExpression( \"DCgain\" \"ymax(db20(VF('/vout')))\" ) corSetMeasTarget( \"DCgain\" 60 ) corSetMeasEnabled( \"DCgain\" t ) corSetMeasGraphicalOn( \"DCgain\" t ) corSetMeasTextualOn( \"DCgain\" nil ) corAddMeas( \"bandwidth\" ) corSetMeasExpression( \"bandwidth\" \"bandwidth(VF('/vout') 3 'low')\" ) corSetMeasEnabled( \"bandwidth\" t ) corSetMeasGraphicalOn( \"bandwidth\" t ) corSetMeasTextualOn( \"bandwidth\" nil ) corAddMeas( \"gain\" ) corSetMeasExpression( \"gain\" \"dB20(VF('/vout'))\" ) corSetMeasEnabled( \"gain\" t ) corSetMeasGraphicalOn( \"gain\" t ) corSetMeasTextualOn( \"gain\" nil ) corAddMeas( \"phase\" ) corSetMeasExpression( \"phase\" \"phase(VF('/vout'))\" ) corSetMeasEnabled( \"phase\" t ) corSetMeasGraphicalOn( \"phase\" t ) corSetMeasTextualOn( \"phase\" nil ) 由于在.cdsint文件设置了自动载入 loadPcf( \"~/multipleModelLib.pcf\" ) 在启动工艺角分析的时候,这个PCF文件会自动载入,简化了工艺角仿真的步骤。 10.5.4 用图形界面载入PCF和DCF文件 当然也可以用图形界面载入PDF和DCF文件: 1. 选择”File”Æ”Load” 如果已经在工作角分析中作了修改,会出现“Save Changes”—保存更改对话框。 图10. 29 2. 点击”Save”或者”Save As”保存配置的更改,如果不想保存,直接载入PCF和DCF,点 击”Don’t Save”;点击”Cancel Load”取消读取操作,保留当前配置。 175 图10. 30 此时出现的窗口非常像windows的文件管理器。操作方法也很类似,这里就不再详细介绍。在其中选定需要载入文件,再点击“Load”即可载入;也可以通过”Cancel”按钮取消。 10.5.5工艺角分析窗口 在ADE中选择菜单”Tools”Æ”Corners”,工艺角分析窗口开启。 打开工艺角分析窗口时,multipleModelLib.pcf文件已经自动载入,在工艺角分析窗口中的项目相会显示如下: z 温度变量temp的值默认为27,如果要设置其它温度,可以在界面修改,或者在配置文 件中使用命令corSetCornerRunTempVal z 所有在ADE中定义的输出都已经被导入,同时还有一些在PCF中定义的输出。 此时工艺角分析窗口显示如下: 176 图10. 31 10.5.6 修改设置并仿真 再此之前所有的设置都是预先定义好的。在这个基础上,仍然在界面中修改和增加一些设置。例如,要修改余量图的上下限和目标值并进行仿真: 1. 输出当中,DCgain和bandwidth两项是标量,可以采用余量图形式显示,设置: DCgain: 目标=63, 下限=60, 上限=65 Bandwidth: 目标=200k, 下限=130k, 上限=350k 2. 除了Output1,每个输出都设置为图形输出;Output1不输出 3. 检查工艺角、输出都已经设置为正常的状态; 4. 点击界面上的”Run”按钮或者菜单”Simulation”Æ”Run” 出图如下: 177 图10. 32 Phase和Gain输出由于仿真结果是曲线,所以输出是成曲线族的形式。如果希望详细察看某个子图,可以在Wavescan的菜单上选择:”Graph”Æ”Layout”Æ”Card”,则一次只会显示一个子图,可以通过点击图右上角的标签选择需要看的子图: 图10. 33 这个子图的右上角的白/绿色标签标明该图是4个子图中的第一个。在该图中可以总结出fastfast在整个频域有最大的增益和带宽;slowslow则正相反。 选择第四个标签,显示: 178 图10.34 从中可以总结出:fastfast和slowfast的DCgain指标已经超过了上限。 179 第11章 电路优化(Optimization) 11.1优化的作用和基本工作原理 优化是一种通过自动调整设计变量,从而达到设计指标的过程。实现这个过程的工具叫做优化器(Optimizer)。通常优化器通过产生新的器件参数,将一个接近性能要求的设计进行优化,从而满足设计要求。 一个最初的电路设计通常不能满足所有的设计指标。例如运算放大器的带宽不够,或者电路设计的冗余度不够,在一些特定条件下不能正常工作。通常可以通过调整器件参数来解决这些问题,但是从众多的方案中挑选一个最好的,往往很难。而优化器可以提供必要的信息,从而获得最佳的解决方案。 对于优化器,需要设置一系列设计变量的初始值和变化范围,以及优化的对象。优化器首先会计算出所选择的设计变量是如何影响对象表达式的值;然后调整设计变量的值,使表达式的值向着目标值靠近;在每次改变设计变量后,都将对电路进行一次仿真,来检查表达式的值是否满足要求。如果没有满足,将重复上面的过程。以下简单介绍优化器的工作流程: 1) 优化器首先使用设计变量的初始值进行一次电路仿真。在这一步中将决定对象表达式的 类型和初始值。 2) 优化器决定使用何种优化算法。(如果用户没有指定) z LSQ(Least Square)算法适合对测量的、有噪声的、没有约束的数据进行优化。 例如,针对一个测量出来的频率响应数据,设计一个对应的滤波器,这种算法就十分适用。 z CFSQP(C version Feasible Sequential Quadratic Programming)对于大量的优化问题 都十分使用,包括有约束条件和没有约束条件的,最大化和最小化的,以及相互关联的几个对象的优化。例如,设计一个低噪声放大器,需要有最大的增益和最小的噪声,以及45度的相位裕度,这种算法就十分适用。 3) 如果是使用的CFSQP算法,那么优化器通过运行仿真,来测试设计变量的初始值是否 满足设计的要求,如果不满足,那么优化器将计算出新的合适的变量值。 4) 优化器计算出对象表达式对各个设计变量的敏感度。为了计算敏感度,优化器对每一个 设计变量都进行微小的变化,然后再进行一次仿真。 5) 利用敏感度中的信息,优化器为设计变量计算出一套新值。 6) 优化器将上一步中的新值赋给设计变量,然后对电路进行仿真。 如果仿真的结果没有上一次的好,那么优化器将重复第5步。 如果仿真的结果得到改善,那么在第5步中计算出来的新值将作为初始值进入下一轮循环。 7) 如果优化停止的标准没有达到,那么下一轮循环将从第4步开始。 优化将在下面几个条件下停止: z 在第5步中计算出来的新值和初始值很接近,或者没有变化 z 设计变量的进一步变化不能起到优化的作用。 下面我们将通过一个共源极放大器的例子,来介绍“Optimizer”的使用 180 11.2 “Optimization”的仿针环境设置 “Optimization”的仿真环境、仿真类型的设置可直接从“Virtuoso® Analog Design Environment”(ADE)中获得。 首先,我们绘制一个简单的电路图,包含一个NMOS管,一个电阻,一个电容和两个电压源。我们将两个电压源的大小,NMOS管的栅长和栅宽,电阻值以及电容值设为设计变量,分别命名为:“VDD”,“VG”,“W_N”,“L_N”,“res”,“cap”。如图11.1所示 图11.1 仿真用共源放大电路 打开ADE窗口。按照第1章讲述的方法设置库文件,从电路图中获得变量名并赋一个初始值。假设对该单级放大器的指标是带宽和增益。那么可将仿真类型设为“AC”,针对频率进行扫描,扫描范围为1~10M Hz。变量值为调用器件时的默认值。设置好的“ADE”窗口如图11.2 所示。 181 图11.2 按“AC”分析设置仿真环境 图11.3是设计变量在上述赋值下,单级放大器的幅频特性。可以发现此时的增益小于1。在后面的内容中,通过使用“Optimization”,将获得增益大于20dB,3dB带宽大于100Hz的共源级放大器。 图11.2 使用“Optimization”前的AC仿真结果 182 11.3 “Optimization”的启动和关闭 在“ADE”中选择“ToolsÆOptimization”,如图11.4所示 图11.4 “Optimizer”的启动方法 此时“Virtuoso® Analog Circuit Optimizer”窗口将会弹出,如图11.5所示。选择 “SessionÆQuit”将退出该窗口。 图11.5 “Virtuoso® Analog Circuit Optimizer”窗口 183 11.4 “Virtuoso® Analog Circuit Optimizer”窗口简介 State DisplayMenu Goals Pane Variables Pane Tool Bar 图11.6 “Virtuoso® Analog Circuit Optimizer”窗口内容 图11.6是“Virtuoso® Analog Circuit Optimizer”窗口,里面包含5个工作区域:“Status Display”,“Menu”,“Goals Pane”,“Variables Pane”和“Tool Bar”。 11.4.1 “Status Display” 在“Status Display”中显示的当前优化器所处的工作状态。例如,“Status Display”中的显示表明优化器是在进行仿真,优化还是处于其他的工作状态。 11.4.2 “Menu” 图11.7 “Menu”中的目录 “Menu”中包含了优化准备,进行优化,显示优化结果所需要的命令。表11.1给出了“Menu”中各个下拉菜单的具体操作。 表11.1 菜单内容与具体操作 菜单选项 Session 具体操作 184 Save State Load State Save Script 保存当前对话的设置 读取以前对话的设置 把当前对话的设置以Ocean 脚本的形式保存 修改优化的选项 删除所有设置 关闭“Virtuoso® Analog Circuit Optimizer”窗口 将ADE中设置的仿真输出作为对象 直接添加新的对象,或者通过“Waveform Calculator”添加新的对象 编辑对象 删除对象 开启对象 关闭对象 添加/编辑设计变量 删除设计变量 开启设计变量 关闭设计变量 运行优化从设置的初始值开始,直到达到停止标准 运行优化从最近的一个停止点开始,运行一次循环,然后停止 运行优化从最近的一个停止点开始,运行有限的n次循环 在当前循环完成后,停止优化 马上停止优化,可以不用完成当前的循环 所有的仿真结果都将被删除,而对象,设计变量和显示设置保持不变 显示输出数据 设置显示选项 更新设计 打开在线的帮助文档 显示具体的软件名称和版本号 Option Reset Quit Goals Retrieve Output Add Edit Delete Enable Disable Variables Add/Edit Delete Enable Disable 优化器 Run Step Run n Stop Stop Now Reset Result Plot History Set Plot Options Update Design Help Contents Optimization About Analog Circuit 185 11.4.3 “Goals Pane” 图11.8 “Goals Pane”如图11.8所示。 在“Goals Pane”中 包含了当前定义对象的信息,具体内容见表11.2。 表11.2 “Goals Pane”内容与功能 项目 Name Direction 功能 给对象赋予的名称 包含以下几个选择:maximize, minimize, match,>=或者<=1)如果Direction是match,那么优化器将会去匹配一个具体的数值或者波形。 2)如果Direction是maximize或者minimize,那么一个具体的数值或者波形将会决定对象的重要性。3)如果Direction是>=,那么一个具体的数值或者波形将会决定下限。 4)如果Direction是<=,那么一个具体的数值或者波形将会决定上限。 显示由设计变量初始值所计算出的对象表达式的值 显示由上一次循环中设计变量的值所计算出的对象表达式的值 显示由当前设计变量的值所计算出的对象表达式的值显示yes或者no。 yes表示这个对象包含在当前优化中。no反之。 Target Initial Prev Current Enable 186 11.4.4 “Variables Pane” 图11.9 “Variables Pane”窗口 在“Variables Pane”中 包含了当前定义设计变量的信息,具体内容见表11.3 表11.3 “Variables Pane”中的内容与功能 内容 Name Min Max Initial Prev Current Enable 功能 给设计变量赋予的名称 设计变量变化的下限 设计变量变化的上限 设计变量的初始值 显示上一次循环中设计变量所使用的值 显示由当前循环中设计变量所使用的值 显示yes或者no。 yes表示这个设计变量可以在当前优化中进行修改。no反之。 11.4.5 “Tool Bar” Tool Bar中包含的按键实现了优化中最重要的功能。按照通常的使用顺序,按键从上到下排列,依次为: :添加/编辑对象 (Add/Edit Goals) :添加/编辑设计变量 (Add/Edit Variables) :删除 (Delete) :运行优化器 (Run 优化器) :停止优化器 (Stop 优化器) 187 :显示优化历程 (Plot History) :更新设计 (Update Design) 11.5 运行一次优化 下面的内容将介绍运行优化的4个重要步骤。 11.5.1 定义对象 在运行优化设计之前,必须为优化和分析定义一个对象。对象将包含下面几个特征: z 对象的表达式可以通过仿真来确定一个输出值或者波形。 z 定义对象表达式在优化中变化的方向。(见11.4.3 “Direction”) 例如,将共源级放大器的在1Hz频率下的增益定位对象,需要给出表达式: dB20value(VF(\"/OUT\")1) ()接着需要给出在优化中,为了获得最大的增益,对象的方向为:maximize。下面介绍几种创建对象的方法。 11.5.1.1将仿真输出作为对象 1) 在“Virtuoso® Analog Circuit Optimizer”窗口菜单中选择“GoalsÆRetrieve Outputs”。 然后在“ADE”窗口中定义的输出,将作为对象出现在“Goals Pane”中,这个对象默认是关闭的,即在“Enable”栏中显示“no”。图11.10和图11.11分别显示了操作和操作结果。 188 图11.10 将仿真输出作为对象 图11.11“gain”做为输出对象 2) 选中对象“gain”,此时对象高亮,然后选择“GoalsÆEdit”,对象编辑窗口探出, 对象编辑窗口的具体内容见11.5.1.3。 3) 在按照11.5.1.3要求完成对象编辑后,即建立了一个新的对象。 注意:直到编辑了从“ADE”窗口中直接获得的对象,该对象才和“ADE”输出栏中的表达式相关联起来。并且在编辑完该对象后,选择“GoalÆRetrieve Outputs”将不会对对象造成任何影响。 189 11.5.1.2 直接输入一个新的对象/利用“Waveform Calculator”建立一个新的对象 1) 选择“GoalsÆAdd”,或者点击“Tool Bar”中的“Add/Edit Goals”。“Adding Goal”窗口弹出。 图11.12 “Adding Goal”窗口 2) 在“Name”栏中填入对象名称; 3) 直接输入新的对象:在“Expression”栏中按照Cadence® SKILL语言的表达式规范写入对象的表达式。表达式可以是一个标量,也可以是一个波形。(完成后直接跳到第7步。) 利用“Waveform Calculator”建立一个新的对象:点击“Open”按键,此时“Calculator”窗口探出。 4) 利用在第12章的方法,在“Waveform Calculator”中建立所需要的表达式。图11.13显示了在“Waveform Calculator”获得共源极放大器3dB带宽的表达式。 图11.13在“Waveform Calculator”中建立所需要的表达式 5) 将光标移回“Virtuoso® Analog Circuit Optimizer”窗口中的“Expression”栏。 6) 点击“Get Expression”按键,此时在“Waveform Calculator”中的表达式将在“Expression”栏中出现,作为对象的表达式; 190 7) 在“Direction”下拉菜单中,选择对象表达式的值在优化过程中的变化趋势。具体选项见11.4.3; 8) 在“Target”栏中按照Cadence® SKILL语言的表达式规范写入目标的表达式。或者将光标移至“Target”栏中,按照4~6步的方法从“Waveform Calculator”中获得目标的表达式; 注意:如果在第3、6步中获得的对象的表达式是一个标量,那么目标的表达式也要是一个标量。反之,如果对象的表达式是一个波形,那么目标的表达式也要是一个波形; 9) 在“Acceptable”栏填入优化的允许范围。在11.5.1.6将具体描述优化器是如何利用对象的优化允许范围来决定优化对象优先级的。这里有两种方法来定义这一个值。 z 可以在“Acceptable”栏中直接填入符合Cadence® SKILL语言规范的表达式。或者按照4~6步的方法从“Waveform Calculator”中获得表达式。 注意:如果在第3、6步中获得的对象的表达式是一个标量,那么目标的表达式也要是一个标量。如果对象的表达式是一个波形,那么目标的表达式可以是一个波形,也可以是一个标量。 如果允许范围是一个标量,那么他需要满足下面的要求;如果允许范围是一个波形,那么这个波形上的每一点都要满足表11.4的要求。 表11.4 优化方向及条件 定义的优化方向 优化允许范围值必须满足的要求 (Direction) minimize maximize match >= <= 必须比目标表达式的值大 必须比目标表达式的值小 除了目标表达式以外的任何值。另外对于允许范围是波形的情况,允许范围波形在任何点上都比目标表达式大,或者在任何点上都比目标表达式小 必须比目标表达式的值小 必须比目标表达式的值大 z 如果选择了“% wihin Target”,可以在“Acceptable”栏中确定一个标量或者波形变化的百分比。一个小的百分比说明这个对象的优先级更高。 注意:如果在第3、6步中获得的对象的表达式是一个标量,那么目标的表达式也要是一个标量。如果对象的表达式是一个波形,那么目标的表达式可以是一个波形,也可以是一个标量。 如果使用了一个标量百分比,那么可以保证优化的结果在目标值极大和极小的情况下都保持一致。如果使用了一个波形百分比,则可清晰地表明在对象波形在各段的重要性。 10)如果要在当前优化中包含该对象,则要选中“Enabled”栏。 11)点击“OK”将新建的对象加入到“Virtuoso® Analog Circuit Optimizer”窗口中。 图11.14显示了以共源极放大器的带宽为优化对象,目标为带宽大于100Hz,优化允许范围为2%的设置。 191 图11.14 以共源极放大器的带宽为优化对象的设置 图11.15显示了图11.14中设置的对象加入到“Virtuoso® Analog Circuit Optimizer”窗口后的情况。 图11.15 设置的对象加入到“Virtuoso® Analog Circuit Optimizer”窗口后的情况 11.5.1.3 编辑优化对象 1) 在“Virtuoso® Analog Circuit Optimizer”窗口中选择需要编辑的对象。对象选中后将被 高亮显示。 2) 选择“Goals ÆEdit”,或者点击“Tool Bar”中的“Add/Edit Goals”按键。这时“Editing Goals”窗口探出。除了窗口名称,这个窗口和“Adding Goals”窗口一样。 3) 选择名称为“gain”,即从“ADE”窗口获得的对象,然后点击“Add/Edit Goals”按 键。弹出窗口如图11.16所示。 按照11.5.1.II 3~10步所介绍的方法编辑对象。编辑后的Editing Goals窗口如图11.16所示。 192 图11.16编辑优化对象窗口 4) 点击“OK”,发现选择的对象已经被修改,如图11.17 图11.17 编辑后的优化对象窗口 11.5.1.4 删除优化对象 1) 在“Virtuoso® Analog Circuit Optimizer”窗口中选择需要删除的对象。对象选中后将被 高亮显示。例如在图11.18中选择了以单级放大器的带宽为对象的优化。 193 图11.18删除优化对象窗口 2) 选择“Goals ÆDelete”如图11.18所示,或者点击“Tool Bar”中的“Delete”按键。 图11.19显示了对象被删除后的“Virtuoso® Analog Circuit Optimizer”窗口。 图11.19 对象被删除后的“Virtuoso® Analog Circuit Optimizer”窗口 11.5.1.5 开启或者关闭优化对象 1) 在“Virtuoso® Analog Circuit Optimizer”窗口中选择需要开启或关闭的对象。对象选中后将被高亮显示 2) 选择“Goals ÆEnable”,或者“Goals ÆDisable”。 194 11.5.1.6 优化器如何使用目标和目标允许范围的值 优化器有两种方法使用目标值:作为对象的优化目标;作为对象优先级的权重。以下分开介绍两种情况。 1) 目标值作为对象的优化目标 当优化方向定义为:match,>= 或者 <= 时,目标值作为对象的优化目标的作用更加显著。目标值将是优化所要达到的最终结果。 当优化方向定为:“minimize”时,优化器并不会因为对象表达式的值小于目标值而停止优化,而是尽一切可能是对象表达式的值更小,甚至导致对象表达式的最终值远远小于目标值。同样当优化方向定为:“maximize”时,优化器会使对象表达式的值尽可能的大,甚至远远大于目标值。优化方向与要达到的最终结果如表11.5所示。 表11.5 优化方向与要达到的最终结果 定义的优化方向(Direction) match >= <= minimize maximize 优化器尝试将对象表达式的值 和目标值一致 必须比目标表达式的值大 必须比目标表达式的值小 不管目标值,使对象表达式的值尽可能的小 不管目标值,使对象表达式的值尽可能的大 注意:当选择LSQ算法时,优化器不会区分“match”,“minimize”和“maximize”。优化器总会使对象表达式的最终值和目标值一致。 2) 目标值作为对象优先级的权重 当优化方向定为“minimize”和“maximize”时,目标值作为各个对象优先级权重的作用更加明显。在这两种情况下,目标值和优化允许范围的值仅仅作为各个对象优先级的权重。相对的,在优化方向为match,>= 或者 <= 时,目标值同时作为对象的优化目标和优先级的权重。 当对象的优化允许范围值更靠近目标值时,该对象有更高的优先级。类似的,当目标和优化允许范围是波形时,两个波形更靠近的对象有更高的优先级。 实际上,对象优先级的权重是通过当前对象表达式的值(f),目标值(T)和允许范围值(A)计算出来的:对象优先级的权重=表11.6 优化项目与目标 Name power delay Direction <= <= Target Value 50 mW 50 ns Acceptable Value 80 mW 60 ns f−T 。例如对于表11.6所列的两个对象。 A−T 如果当前状态下,“power”的表达式值为90 mW,那么它的权重是: 90mW−50mW40mW ==1.333 80mW−50mW30mW 如果当前状态下,“delay”的表达式值为90 ns,那么他的权重是: 90ns−50ns40ns ==4 60ns−50ns10ns 可以发现在这种情况下,“delay”有更高的权重。因此优化器将优先减小“delay”,然后再 195 减小“power”。 11.5.2 准备设计变量 在使用优化器进行优化之前,需要指名哪些设计变量可以被优化器在优化过程中改变。这些被选中的设计变量必须是仿真环境变量,例如器件参数和器件的模型参数。典型的例子是电阻、电容的值,或者他们的长度和宽度。 11.5.2.1 添加一个设计变量 通过下面的步骤,在“Virtuoso® Analog Circuit Optimizer”窗口中添加设计变量。 1) 选择“Variables” Æ “Add/Edit” 或者点击“Tool Bar”中的“Add/Edit Variables”按 键,此时“Editing Variables”窗口弹出。如图11.20所示。 图11.20 添加一个设计变量 注意:对比图11.4中“Design Variables”栏和图11.17中“Name”栏中的设计变量,可以发现他们是一致的。这说明优化器在优化时所改变的设计变量,都须要在“ADE”窗口中事先定义。 2) 在“Name”栏中中选择我们需要添加的设计变量,被选中的设计变量将被高亮显示, 如图11.21中的“res”设计变量。 3) 在“Initial Value”栏中填入在优化时,该设计变量的开始值。这里初始值有一个默认值, 即在ADE窗口中对该设计变量的赋值。如在图11.21中,设计变量“res”的初始值为“1k”,和“ADE”窗口中的设置一致。 196 图11.21 电阻初始值的赋值 4) 在“Minimum Value”中填入设计变量的下限,优化器永远不会给设计变量设置小于下 限的值 5) 在“Maximum Value”中填入设计变量的上限,优化器永远不会给设计变量设置大于上 限的值 6) 如果想在当前优化中包含这个设计变量,请确定“Enable”栏被选中。 完成所有设置的“Editing Variables”窗口,如图11.22所示。 图11.22 完成电阻初始值的赋值后的窗口 7) 点击“OK” 此时,设计变量就被添加到“Virtuoso® Analog Circuit Optimizer”窗口中,如图11.23所示。 197 图11.23 变量添加后的“Virtuoso® Analog Circuit Optimizer”窗口 11.5.2.2 编辑设计变量 通过下面的步骤,在“Virtuoso® Analog Circuit Optimizer”窗口中编辑设计变量。 1) 在“Virtuoso® Analog Circuit Optimizer”窗口中选择需要编辑的设计变量,被选中的设 计变量会被高亮显示,如图11.24。 图11.24 变量编辑的选定 2) 选择 “Variables Æ Add/Edit” 或者点击“Tool Bar”中的“Add/Edit Variables”按 键,此时“Editing Variables”窗口弹出。如图11.25所示。 198 图11.25 变量编辑设定 3) 因为是编辑已有的设计变量,因此在“Name”栏中被编辑的设计变量名称已经是高亮 的。如果在“Name”中选择另外一个设计变量,那么将会添加一个新的设计变量到优化中。例如图11.26中显示,在“Name”栏中选择“VG”。 图11.26 选择另一个变量“VG” 4) 在“Initial Value”栏中填入在优化时,该设计变量新的开始值。 5) 在“Minimum Value”中填入设计变量新的下限,优化器永远不会给设计变量设置小于 下限的值; 6) 在“Maximum Value”中填入设计变量新的上限,优化器永远不会给设计变量设置大于 上限的值; 7) 如果想在当前优化中包含这个设计变量,请确定“Enable”栏被选中 完成所有设置的“Editing Variables”窗口,如图11.27所示。 199 图11.27 变量“VG”设定后的窗口 8) 点击“OK” 此时,到“Virtuoso® Analog Circuit Optimizer”窗口中的设计变量被修改,如图11.28所示。 图11.28 变量设定后的窗口 11.5.2.3 删除设计变量 1) 在“Virtuoso® Analog Circuit Optimizer”窗口中选择需要删除的设计变量。设计变量选 中后将被高亮显示。 2) 选择“Variables ÆDelete”,或者点击“Tool Bar”中的“Delete”按键。 200 11.5.2.4 开启或者关闭优化对象 1) 在“Virtuoso® Analog Circuit Optimizer”窗口中选择需要开启或关闭的设计变量。设计 变量选中后将被高亮显示 2) 选择“Variables ÆEnable”,或者“Variables ÆDisable”。 11.5.3 优化器的控制命令 当完成对象定义和制定设计变量后,优化器可以开始优化工作了。下面的章节中将介绍如何运行和停止优化,以及如何删除不需要保存的仿真结果。 11.5.3.1运行优化器 1) 如果上一次的优化因为错误而停止,需要点击“Tool Bar”中的“Stop” 按键,来清除 已有的状态。 2) 在“Virtuoso® Analog Circuit Optimizer”窗口中选择下面运行命令的一种。 z 选择“Optimizer”Æ“run”或者点击“Tool Bar”中的“Run”优化器:从设置的 初始值开始运行优化,直到停止标准(见11.1)得到满足。 z 选择“Optimizer”Æ“Step”:从最近的一个停止点开始,运行一次循环,然后停 止。 如果想从初始值开始,那么在选择“Optimizer”Æ“Step”前选择“Optimizer”Æ“Reset”。 z 选择OptimizerÆRun n:从最近的一个停止点开始,运行有限的n次循环。 此时弹出一个对话框,如图11.29所示。 图11.29 运行有限的n次循环的设定窗口 在该对话框中,通过拖动滑块来决定循环次数。点击“OK”开始从最近的一个停止点开始,运行有限的n次循环。如果想从初始值开始,那么在选择“Optimizer”Æ“Run n”前选择“Optimizer”Æ“Reset”。 在每次循环完成后,优化器都将更新“Virtuoso® Analog Circuit Optimizer”窗口中对象和设计变量的“Prev”和“Current”的值。 11.5.3.2停止优化器 在“Virtuoso® Analog Circuit Optimizer”窗口中选择下面停止命令的一种。 z 选择“Optimizer”Æ“Stop”或者点击“Tool Bar”中的“Stop”优化器:在当前 201 循环完成后停止优化。 z 选择“Optimizer”Æ“Stop Now”:马上停止优化,不论当前仿真是否完成。 可以通过选择选择“Optimizer”Æ“Stop”来清除上一次因为出错而非正常停止的优化所造成的状态。 11.5.3.3 删除仿真结果 选择“Optimizer”Æ“Reset”将删除所有的仿真数据,而对象,设计变量和显示选项保持不变。 11.5.4 显示优化结果 最简单的追踪优化器优化进程的方法是显示每一次循环中产生的数据。当优化器获得可接受的结果时,可以将对应设计的参数更新为优化后的值。 在下面的章节中将介绍如何设置显示选项,如何显示输出数据,以及如何将设计中的参数更新为优化后的值。 11.5.4.1 设置显示选项 1) 在“Virtuoso® Analog Circuit Optimizer”窗口中选择“Results”Æ“Set Plot Options”, 然后“Setting Plotting Option”窗口将弹出,如图11.30所示。 图11.30 显示设置窗口 202 2) 如果需要追踪优化时的每一步,可以将“Auto Plot After Each Iteration”选中。 如果不需要追踪优化时的每一步,而是在优化结束后再显示结果,可以将可以将“Auto Plot After Each Iteration”不选中。详细内容见11.5.4.2。 3) 选择下面至少一种信息包含在需要显示的输出数据中。 z 选中“Design Variable”,将显示设计变量在优化的过程中是如何变化的。 z 选中“Scalar Goals”,将显示标量对象在优化过程中是如何向目标靠近的。 z 选中“Functional Goals”,将按照图11.31中展示的例子的方式,显示一个波形对 象是如何向目标靠近的。 图11.31 波形对象的优化 如果有太多或者太少的波形需要显示,可以在“No. of Functional Iterations to Display”输入每次显示的波形数目。 4) 设置“Waveform Window”的参数,以方便查阅。例如可以设置更大的字体和窗口大小。 5) 点击“OK”完成显示选项的设置。 如果“Waveform Window”已经打开,那么窗口将随着设置同步改变。如果“Waveform Window”没有打开,那么新的窗口将按照显示选项的设置而建立。 11.5.4.2 显示输出数据 如果在显示选项中选中了“Auto Plot After Each Iteration”,那么“Waveform Window”将自动打开,并自动显示每次优化的结果。如果优化结果没有自动显示,可以在优化完成后通过以下的步骤将其显示。 选择“Results”Æ“Plot History”或者点击“Tool Bar”中的“Plot History”。 新建的“Waveform Window”窗口将按照显示选项中的设置建立,具体内容见11.5.4.1。 如果显示设置中选择了显示所有的输出数据,那么在前面设置的优化有下面的输出图像,如 203 图11.32所示。 图11.32 选择所有输出数据后的显示 11.5.4.3 更新设计 通过下面的步骤,将优化后的设计变量拷贝的电路图中。 1) 在“Virtuoso® Analog Circuit Optimizer”窗口中选择“Results“Æ”Update Design“或 者点击“Tool bar”中的“Update Design”按键。 2) 在ADE窗口中选择“Variables“Æ“Copy to Cellview”。 3) 在ADE窗口中选择“Design”Æ“Check and Save”。 11.6 保存,修改和读取对话设置信息 在“Virtuoso® Analog Circuit Optimizer”窗口的对话(Session)下拉菜单中,我们可以保存当前对话状态,读取以前保存的对话状态,或者改变优化选项设置,以及清除当前窗口中的所有信息。 11.6.1 保存当前对话状态 通过下面的步骤保存当前对话状态(对象,设计变量,显示选项设置,以及优化选项设置)。 204 1) 选择SessionÆSave State,然后“Saving State”窗口弹出,如图11.33所示 图11.33 “save”窗口 2) 如果不想用默认名称,可以在“Save As”栏中填入状态名称。 3) 在“Existing State”栏中选择一个已经存在的状态,此时“Save As”栏中将显示选中的 状态名称。子状态将在“What to Save”栏中显示。通过开启和关闭这些子状态,可以决定在保存对话状态时,这些子状态是否被保存。 注意:只有保存了的子状态,才能在下次读取该状态时被恢复。 优化器保存状态的默认路径是: ~/.artist_state/LibraryName/CellName/.asd_Optimization/StateName 在这个路径中,“LibraryName”和“CellName”将从被优化的设计中获取。而“StateName”则是保存状态时赋予的状态名称。 11.6.2读取以前保存的对话状态 按照以下的步骤读取以前保存的对话状态。 1) 选择“Session”Æ“Load State”,然后“Loading State”窗口弹出,如图11.34所示 205 图11.34读取以前保存的对话状态 2) 3) 4) 5) 6) 在“Library”下拉菜单中选择保存需要读取状态的文件库。 在“Cell”下拉菜单中选择保存需要读取状态的单元。 在“State Name”中按照保存时的名称,选择需要读取的状态。 在“What to Load”中选择需要读取的子状态。 点击“OK”完成状态的读取。 11.6.3 保存脚本 使用“Open Command Environment for Analysis”(OCEAN)命令,可以实现电路的分析和仿真。OCEAN是一个基于命令行程序,可以在Unix内核的操作系统或者在“Command Interactive Window”(CIW)中运行。通过在交互对话窗口中直接键入OCEAN命令,或者在OCEAN软件中载入一个包含OCEAN命令的脚本,都可以实现电路的分析和仿真。 我们可以在ADE窗口,和相关的图形化工具(例如“Parametric Analysis”, “Optimization”)完成仿真和分析的设置,然后把设置内容按照脚本的形式保存下来。并且可以在保存的脚本中加入进一步或者后处理的命令。 通过下面的步骤可以将设置以脚本的形式保存下来。 1) 选择“Session”Æ“Save Script”,然后“Save Ocean Script”窗口弹出,如图11.35中 所示。 图11.35保存脚本窗口 2) 在“File Name”栏中填入脚本名称。 3) 点击“OK”完成保存脚本。 206 11.6.4 改变优化选项设置 大多数情况下,都不需要改变优化选项的初始设置。但是,如果想制定一个特定 的算法,或者需要改变控制算法的选项时,可以按照下面的操作进行。、 1) 选择“Session”Æ“Options”,然后“Optimization Option”窗口弹出,如图11.36所示。 图11.36改变优化选项设置 2) 制定一个特定的算法,在“Algorithm Selection”下拉菜单中选择“LSQ”和“CFSQP” 中的一个。如果要优化器自动选择一个合适的算法,只需选择“Auto”。 LSQ最适合完全的曲线匹配问题,并且Cadence推荐只在这种情况下使用LSQ算法。 对于LSQ算法,优化方向“match”、“minimize”和“maximize”是等价的,他们都是使优化的最终结果和目标值一致。因此,若果在LSQ算法中获得最大和最小值,则需要将目标值设置的足够大或者足够小。 如果“Algorithm Selection”选择的是“Auto”,那么在大多数情况下,优化器选择CFSQP算法。LSQ算法仅仅在下面两种情况都成立时才使用。 z 开启对象的优化方向是“match”。 z 所有开启对象的目标都是波形。 3) 输入需要改变的优化器控制选项 z “Percentage Finite Difference Perturbation”:将决定敏感度(见11.1)是如何 决定的。 注意:在一些优化对这个值十分敏感,改变他可能造成算法失效。推荐用户使用默认值。如果用户对步长对分析的影响有深刻的理解,在“Percentage Finite Difference Perturbation”栏中提供了设置合适步长的方法。 z “Relative Design Variable Tolerance”的值仅仅影响LSQ算法的停止条件,对 CFSQP算法没有影响。 例如,如果该值被定为:0.05,将使的LSQ算法在设计变量的相对变化小于5%时,停止优化。 207 z “Relative Function Value Tolerance”的值影响所有算法的停止条件。 例如,如果该值被定为:0.05,将使的所有算法,在“Virtuoso® Analog Circuit Optimizer”窗口中所有表达式的相对变化小于5%时,停止优化。 注意:当“Relative Design Variable Tolerance”和“Relative Function Value Tolerance”栏中填入数据后,优化器将使用用户定义的条件作为优化的停止条件,而不再继续使用默认值。此外,在这两栏中必须填入绝对数字。 4) 设置“Warning Message for Long Simulation” 在优化的初始仿真运行时,“Optimization”工具和ADE窗口被锁死,此时不能中断优化以及观察输出结果。如果希望在一个长时间的优化完成后被提醒,只需要将“Warning Message for Long Simulation”选中。 5) 点击“OK”完成对优化选项的设置 11.6.5删除所有设置信息 选择“Session”Æ“Reset”即可以删除所有设置的信息,包括对象、设计变量和显示选项。 208 第12章 “Waveform”窗口 12.1 “Waveform”窗口的作用 所有仿真结果的波形都将在“Waveform”窗口中显示。在“Waveform”窗口中可以完成图形的缩放、坐标轴的调整、数据的读取和比表、YvsY比较,还可以对仿真结果做简单的处理,例如取20dB值,取幅值,取幅角等等。因此熟练掌握“Waveform”窗口的使用,可以大幅提高对仿真结果的分析能力。 12.2 “Waveform”窗口简介 图12.1显示了一个典型的“Waveform”窗口界面,以及各个部分的功能。 菜单栏工具栏图片名称图例区,显示波形名称标签区标记 绿色表示该图片出去激活状态,所有操作是针对该图片图片区Y轴X轴鼠标光标坐标波形光标坐标状态栏 图12.1 “waveform”窗口及各部分功能 12.2.1 “Waveform”窗口的菜单 表12.1 “Waveform”中的所有菜单和他们的功能 菜单选项 File 具体操作 打开“Open Grap”对话框。从而打开一个已保存的波形文件 打开“Save Graph”对话框。从而将当前波形以XML形 Open Save 209 式保存 Save as Image Reload Print Save Session Close Exit Edit Move Swap Delete Hide Reveal Undo Graph 打开“Save Image”对话框。从而将当前波形以图片形式保存 重新读取当前窗口中波形的仿真数据 打印当前窗口中的图表 保存当前“Waveform”窗口的设置 关闭当前“Waveform”窗口 关闭所有“Waveform”窗口 移动选中的标签或记号 移动两个波形、相关坐标轴或者图表 删除选中的标签、记号、图例、波形或者图表 隐藏选中的标签、记号、图例、波形或者图表 显示隐藏的标签、记号、图例、波形或者图表 撤销上一步操作。 选中表示显示网格。 子窗口布局 自动选择合适的模式,根据子窗口的高和宽的比值设置布局方式。当子窗口的宽度大于高度,采用竖排布局的方式。当子窗口的宽度小于高度,则采用横排布局的方式。 竖排显示子窗口 横排显示子窗口 层叠显示子窗口 图标类型 直角坐标系 柱形图 实部VS虚部 极坐标 阻抗圆图 导纳圆图 字体大小选择,影响标题、子标题和坐标轴 小字体 中等字体 大字体 标签选项 打开“Lable Attributes”对话框。从而创建标签 修改选中标签 选中后,“Waveform”窗口中的波形不再因为相应仿真结果改变而改变。 Grids On Layout Auto Vertical Horizontal Card Display Type Rectangular Histogram RealVsImag Polar Impedance Admittance Font Small Medium Large Lable Create Edit Freeze On 210 Show Tool Bar Snap Off Snap-to-Data Snap-to-Peaks Color Schemes Defualt 选中将显示工具栏 选中后,波形上的数据读取框追随系统鼠标 选中后,标记仅仅作用在仿真数据点上。 选中后,标记仅仅作用在波形峰值上。 设置背景色 使用默认背景色,通常为白色 背景色设为灰色 背景色设为黑色 模板设置 使用“.cdsenv”中设置的默认模板 将当前窗口设置保存为默认值 打开一个特定的波形文件作为模板。 打开“Graph Attributes”对话框。 选中后将显示选中坐标轴的主网格。该选项只在坐标轴选中后才被激活。 选中后将显示选中坐标轴的次网格。该选项只在坐标轴选中后才被激活。 选中后将选中的坐标轴切换到对数模式。该选项只在坐标轴选中后才被激活。 将每条波形单独分栏显示。 打开“Axis Atrributes”对话框。该选项只在坐标轴选中后才被激活。 选中将在在选中波形上的仿真点上显示符号。 将选中波形赋予一个新的Y轴,或者使用他波形的Y轴。该选项只有在“Waveform”窗口中存在多个波形时才有效。 将选中波形拷贝到一个新建的“Waveform”窗口中。 将选中波形移动到一个新建的“Waveform”窗口中。 Gray Black Template Set Default Set Current Load Edit Axis Major Grids On Minor Grids On Log Strip Edit Trace Symbols On Assign to Axis New Graph Copy New Window Move New Windos Copy New SubWindow 将选中波形拷贝到一个新建的“Waveform”子窗口中。 Move New SubWindos 将选中波形移动到一个新建的“Waveform”子窗口中。 Bus 根据选中的数字波形,创造一条总线 将总线中的数据分开显示。当且仅当 开启或关闭波形光标 开启或关闭垂直光标 开启或关闭水平光标 开启或关闭差值光标 Create Expand Trace Cursor Vert Cursor Horiz Cursor Delta Cursor 211 Cut Copy Paste Load Save Eidt Select All Mark Place Trace Marker 将选中的波形剪切 将选中的波形复制 粘贴剪切或复制的波形 打开“Load”对话框,从而添加一条新的波形 打开“Save”对话框,从而以ASCII格式保存波形 打开“Trace Attributes”对话框。该选项只有在波形被选中时才有效 选中当前“Waveform”窗口中的所有波形 在波形上添加一个标记,包含该点的横竖坐标 在波形上添加一个标记,包含该点的横竖坐标,并做一条通过该点的垂直线。 在波形上添加一个标记,包含该点的横竖坐标,并做一条通过该点的水平线。 添加一个标记显示两个点间的横竖坐标差 标记显示Δx和Δy值 标记显示Δx值 标记显示Δy值 标记附着在波形上 将标记移动到选中波形的最大值处 将标记移动到选中波形的最小值处 打开“Marker Attributes”对话框,从而创建一个新的标记 打开“Marker Attributes”对话框,从而编辑选中的标记 选中当前“Waveform”窗口中的所有标记 缩放图表 沿X轴缩放图表 沿Y轴缩放图表 撤销上一步的缩放操作 将图表还原至初始大小 放大图表 缩小图表 将图表右边的部分移至显示区域 将图表左边的部分移至显示区域 将图表上边的部分移至显示区域 将图表下边的部分移至显示区域 Vert Marker Horiz Marker Add Delta Display Type XY Delta X Delta Y Delta Attach to Trace Find Max Find Min Create Edit Select All Zoom Zoom X-Zoom Y-Zoom Unzoom Fit Zoom In Zoom Out Pan Pan Right Pan Left Pan Up Pan Down Tools 212 Browser Calculator Help 打开“Results Browser” 打开“Calculator” 获取帮助文档 显示所有菜单命令中的快捷键 Help Accelerator Key 12.2.2 工具栏快捷键 “Waveform”窗口的工具栏如图12.2所示。 图12.2 快捷键的目录 各个快捷键的功能如下: z z z z z z :打印当前窗口中的图表,等同于“File”Æ“Print”。 :撤销上一步操作,等同于“Edir”Æ“Undo”。 :显示/隐藏网格,等同于“Graph”Æ“Grids On”。 :将每条波形单独分栏显示,等同于“Axis”Æ“Strip”。 :层叠显示子窗口,等同于“Graph”Æ“Layout”Æ“Card”。 :将选中波形移动到一个新建的“Waveform”子窗口中,等同于“Trace”Æ“New Graph”Æ“Copy New SubWindow”。 z z :将选中波形移动到一个新建的“Waveform”窗口中,等同于TraceÆNew GraphÆCopy New Window。 z :将“Lable”中写入的标签,通过点击鼠标左键放置到当前鼠标的位子。 z “Lable”栏:显示或编辑选中的标签。 12.3 打开“Waveform”窗口 通过下面的方法可以打开“Waveform”窗口。 z 在“CIW”窗口中,选择“Tools”Æ“Analog Environment”Æ“Waveform”。 z 在ADE窗口中,选择“Tools”Æ“Waveform”。 z 当仿真完成后,在ADE窗口中,点击“Plot Output”快捷键。 z 在“Results Browser”中,选择将仿真结果送至“Waveform”显示。 z 在“Calculator”中,选择将仿真结果送至“Waveform”显示。 213 通过后三种方式打开“Waveform”窗口时,将同时显示选中的仿真结果。 12.4 设置“Waveform”窗口 当打开一个“Waveform”窗口后,可以设置图表显示模式,以帮助对仿真结果的分析。 12.4.1 设置图表布局 在“Waveform”窗口中可能包括多个子窗口。可以通过以下设置改变子窗口的排列方式。 z 选择“Graph”Æ“Layout Auto”:这是系统默认子窗口排列方式,将根据窗口高和宽的 比值自动选择合适的模式,当子窗口的宽度大于高度,采用竖排布局的方式。当子窗口的宽度小于高度,则采用横排布局的方式。 z 选择“Graph”Æ“Layout Vertical”,得到如图12.2所示的窗口。采用该方式时,子窗 口将成纵向排列。 图12.2选择“Graph”Æ“Layout Vertical”后得到的纵向排列窗口 z 选择“Graph”Æ“Layout Horizontal”,得到如图12.3所示的窗口。采用该方式时,子 窗口将成横向排列。 214 图12.3选择“Graph”Æ“Layout Horizontal”得到横向排列子窗口 z 选择“Graph”Æ“Layout Card”:选择这种方式后,每个子窗口都将拥有和“Waveform” 窗口同等的大小。因此子窗口堆叠在一起,只有最上面一个被显示。此时通过右上角处的图表编号选择显示的子窗口。选中子窗口的编号将变成绿色,如图12.4所示。 215 图12.4选择“Graph”Æ“Layout Card”后,每个子窗口与“Waveform”窗口同等大小 12.4.2 设置背景颜色 对于ADE WaveScan和标准SKILL WaveScan程序,默认的背景颜色是黑色。但是可以通过选择“Graph”Æ“Color Schemes”来设置背景颜色。候选项如图12.5中所示: 216 图12.5 背景颜色的设置 z Default:将背景色设置为白色 z Grey:设置背景色为灰色 z Black:设置背景色为黑色 背景色的设置将同时作用于所有已经打开的,以及后来打开的“Waveform”窗口。 12.4.3 编辑“Waveform”窗口中的对象 在这一章节中,将介绍如何选择、隐藏、重现和删除图表以及图表中的对象(包括波形、坐标轴、标记和标签)。 12.4.3.1 选择对象 通过使用鼠标点击图表、波形、坐标轴、标记或者标签就可以将它们选中并更改它们的属性。当需要一次选择多个对象时,按住“Ctrl”键,用鼠标依次点击需要的对象。 如果“.cdsenv”中“autoTraceSelect”选项为“true”(这是默认值),那么在选择波形时,将自动选择离鼠标最近的波形,而不需要精确地点中波形。这在“Waveform”窗口中存在多条波形的时候非常有用。反之当“autoTraceSelect”选项为“False”,那么必须点中波形才能将其选择。 217 12.4.3.2 隐藏对象 “Waveform”窗口中图表、波形、坐标轴、标记或者标签等对象是可以隐藏的。例如,当需要精确观察一条波形时,可以将其他波形隐藏。具体方法如下: 1) 选中对象 2) 选择“Edit”Æ“Hide” 则选中的对象不再在“Waveform”窗口中显示。 12.4.3.3 重现隐藏的对象 “Waveform”窗口中被隐藏的对象可以通过一下的方法重现。 1) 选择“Edit”Æ“Reveal”,此时会出现一个列表显示被隐藏的对象名称,如图12.6所 示。 2) 在该列表中选择需要重现的对象,则被选中的对象将重新出现在“Waveform”窗口中。 图12.6重现隐藏的对象设定 12.4.3.4 交换对象 采用分栏显示的波形、统一图表中两个拥有相关X轴的Y坐标轴、以及两个子窗口都可以通过下面的方法交换位子: 1) 选中第一个对象; 2) 选择“Edit”Æ“Swap”; 218 3) 选择第二个对象。 此时选中的两个对象的位子被交换了 12.4.3.5 删除对象 “Waveform”窗口中图表、波形、标记或者标签等对象是可以删除的,但是“Waveform”窗口中的最后一个图表是不能被删除的。删除对象的方法如下: 1) 选择对象; 2) 选择“Edit”Æ“Delete”,或者点击键盘上“Del”按键; 选中的对象即从“Waveform”窗口中删除。 12.4.3.6 撤销操作 通过一下方法可以撤销最近的一次操作:选择“Edit”Æ“Undo”。 注意:当执行“Undo”操作后,最近的一次操作就是该次“Undo”操作了。因此第二次选择“Undo”命令的效果则是恢复上次被撤销的操作。 12.5 缩放图表 12.5.1 直接使用鼠标选择新窗口的大小 通过点击、拖拽和释放鼠标右键,在图表中形成一个矩形框,如图12.7所示。该矩形框确定了新图表的大小。 219 图12.7直接使用鼠标选择新窗口的大小 12.5.2 “Zoom”命令 选择“Zoom“Æ“Zoom”,通过点击、拖拽和释放鼠标左键,在图表中形成一个矩形框,该矩形框确定了新图表的大小。 12.5.3 “X-Zoom”命令 通过选择“Zoom”Æ“X-Zoom”命令可以仅仅缩放X轴。选择“Zoom”Æ“X-Zoom”后, ”。点击鼠标确定X轴缩放的起始点,拖拽鼠标确定缩放范围,释放鼠标确定缩 鼠标变为“ 放的结束点。然后根据选择的X轴范围重新显示图表。 12.5.4 “Y-Zoom”命令 通过选择“Zoom”Æ“Y-Zoom”命令可以仅仅缩放Y轴。选择“Zoom”Æ“Y-Zoom”后, ”。点击鼠标确定Y轴缩放的起始点,拖拽鼠标确定缩放范围,释放鼠标确定缩 鼠标变为“ 220 放的结束点。然后根据选择的Y轴范围重新显示图表。 12.5.5 “Unzoom”命令 通过选择“Zoom”Æ“Unzoom”,可以依次撤销以前的一系列缩放操作。 12.5.6 “Fit”命令 通过选择“Zoom”Æ“Fit”将图表还原成初始大小 12.5.7“ZoomIn”命令 通过选择“Zoom”Æ“ZoomIn”,以图表中心点为坐标放大图表,如图12.8所示。 图12.8通过选择“Zoom”Æ“ZoomIn”放大图表 12.5.8“ZoomOut”命令 通过选择“Zoom”Æ“ZoomOut”,以图表中心点为坐标缩小图表,如图12.9所示。 221 图12.9通过选择“Zoom”Æ“ZoomOut”缩小图表 12.6 平移图表 通过选择“Zoom”Æ“Pan”中的四个下拉菜单“Pan Right”、“Pan Left”、“Pan Up”、“Pan Down”,如图12.10所示,可以将图表在四个方向上进行平移。图12.11说明了“Pan Right”命令是如何平移图表的。 222 图12.10 图表平移的设定 图12.11 “Pan Right”命令与平移图表 加入平移前X轴坐标范围是0~200,则平移后X轴坐标范围是40~240。其他几种平移方式和“Pan Right”一样,以对应坐标轴的20%为平移量,只是平移方向不同。 12.7 编辑图表属性 图表的默认属性是通过“.cdsenv”中的选项设置的。如果需要修改图表属性,可以通过以下步骤来实现: 1) 通过选择“Graph”Æ“Edit”,或者在图表中双击鼠标,打开“Graph Attributes”对话 框,如图12.12所示。 图12.12 编辑图表的属性 2) 在“Title”栏中可以给图表命名,或者选择“Default”使用默认名称。 3) 在“SubTitle”中可以给图表赋予字标题,或者选择默认子标题。 4) 在“Legend Row”栏中填入在图表中显示的图例的行数。加入图例的行数大于“Legend 223 Row”中设定的数值,图例区出现一个滚动条。用来选择显示的图例。如图12.13所示。 图12.13加入图例的行数大于“Legend Row”中设定的数值时,图例区出现一个滚动条 当退出“Waveform”窗口时,该设置保存到“.cdsenv”文件中。 5) “Legend Row”栏后的“Show”选项表示是否显示图例。 6) 在“Font”后的三个下拉菜单依次选择图表中文字的字体、字形和字号。 7) 在“Foreground/Background”中分别设置图表的前景和背景颜色。其中前景包括了图表 的标题、子标题、坐标轴和坐标轴名称。 8) 在“Major Grids”中选择主网格的颜色,以及是否显示主网格。 9) 在“Minor Grids”中选择次网格的颜色,以及是否显示次网格。 10) 点击“OK”完成对图表属性的设置。 12.8 关于波形的操作 通过拖拽和释放波形,完成以下操作: z 从一个图表到另外一个图表。如果将一个AC仿真波形拖拽到瞬态波形中,X坐标轴的 坐标将用一串问号显示,表示当前坐标没有单位; z 从一个子窗口到另一个子窗口; z 从一个分栏到另一个分栏。 当拖拽波形时,鼠标下方会显示拖拽波形的名称。 当选中一条波形后,可以通过一下菜单命令对创建新的波形窗口。 224 z “Trace”Æ“New Graph”Æ“Copy New Window(z “Trace”Æ“New Graph”Æ“Move New Window”; )”; z “Trace”Æ“New Graph”Æ“Copy New SubWindow(z “Trace”Æ“New Graph”Æ“Move New SubWindow” )” 这些命令在需要从“Parametric Analysis”的大量仿真结果中选择一条特定波形研究的时候十分有用。 12.8.1 分栏显示波形 当“Waveform”窗口中的一个图表包含多个波形时,可以将每个波形分栏显示。分栏后的波形成纵向排列,所有的波形有其独立的Y坐标轴,但共用同一个X坐标轴。这种分栏显示只对直角坐标系有效。通过以下的步骤,实现坐标的分栏显示。 选择“Axis”Æ“Strips( )”,图12.13显示了分栏前的图表,图12.14显示了分栏后的图 表窗口。 图12.14 分栏后的图表窗口 通过拖拽和释放波形,可以实现一下操作。 z 将波形放置到另一个分栏中,将在放置栏中同时显示原有的新加入的波形。 z 将波形放置在分栏间的空隙中,则在该空隙处产生一个新栏显示拖拽的波形。 225 12.8.2 显示符号 通过在波形上添加符号,可以有效地将波形区分开。通过以下操作可以显示或者隐藏波形上的符号。 选择“Trace”Æ“Symbols On”,如图12.15所示。波形上的“×”和“□”符号,有效地将两个波形区分。具体符号类型和数目的设置,见#####。 图12.15 显示符号 12.8.3 给波形赋予坐标轴 当“Waveform”窗口或者子窗口中包含多个波形时,可以为波形设置: z 一个新的Y轴; z 一个已经存在的Y轴。如果该Y轴的单位和波形不符,则在坐标轴名称中出现一串问 号,表示该坐标轴没有明确的物理单位。 例1: 在图12.16中,左边的子窗口显示了“OUT1”和“OUT2”两个波形共用一个Y轴的情况;在右边的子窗口中,“OUT2”波形被赋予了一个新的坐标轴。 226 图12.16 Y轴共同与使用两个Y轴 例2: 在图12.17中,左边的子窗口显示了“N1”和“V0:p”分别是一个电压波形和一个电流波形;在右边的子窗口中,两个波形共用一个坐标轴,此时坐标轴的名称为*???*(V?A),表示该坐标轴没有一个明确的物理单位。 227 图12.17 两个Y轴标签与合到一个Y轴表示时的显示 12.8.4 修改波形属性 波形的默认属性是通过“.cdsenv”中的选项设置的。如果需要修改波形属性,可以通过以下步骤来实现。 1) 通过选择“Trace”Æ“Edit”,或者双击波形,打开“Trace Attributes”对话框,如图12.18 所示。 228 图12.18 修改波形的属性 2) 在“Name”栏中输入波形的名称,或者选择“Default”显示默认名称。 注意:当有多条波形被选中时,“Name”和“Default”栏会变成灰色,从而不能操作。 3) 在“Strip Chart Visible Rows”中填入图表中分栏显示时,可以看见的行数。当分栏数大 于最大可以显示的行数时,会出现一个滚动条,从而选择显示波形,如图12.19所示。当图表中只有一个波形时,“Strip Chart Visible Rows”栏失去作用,变成灰色。 图12.19当分栏数大于最大可以显示的行数时出现一个滚动条 229 4) 在Type/Style中选择波形的类型 第一个下拉菜单中选择图表的类型: z Line:线图 z Point:点图 z Bar:直线图 z Spectral:频谱图 z Histogram:矩形图 第二个下拉菜单中选择线形: z Solid:实线 z Dashed:划线 z Dotted:点线 z DotDashed:点划线 第三个下拉菜单中选择线宽: z Fine:细线 z Medium:中等宽度 z Bold:粗线 5) “Symbol”栏中选择波形上符号的类型,以及符号的个数。“Show”表示是否显示这些 符号。符号的类型具体有: z Point:小点 z Dot:大点 z Square:实心矩形 z Box:空心矩形 z UpArrow:向上箭头 z DownArrow:向下箭头 z X:X型 z Circle:空心圈 6) “Foreground”中选择波形的颜色 7) “Cursor X/Y Offset”中设置鼠标X/Y坐标的偏差量。如果这两个值不为零,那么波形 光标的坐标则是根据这两个值的相对量。 8) 点击“OK”完成对波形属性的设置。 12.9 设置坐标轴属性 坐标轴的默认属性是通过“.cdsenv”中的选项设置的。如果需要修改坐标轴属性,可以通过一下步骤来实现。 1) 通过选择“Axis”Æ“Edit”,或者双击坐标轴,打开“Axis Attributes”对话框,如图 12.20所示。 230 图12.20 坐标属性设置窗口 在“Label”栏中填入坐标中的名称,或者选择“Default”使用默认值。 在“Scaling”中选择下面的一种模式,来设置坐标轴范围和网格划分。 z Auto:自动选择坐标轴范围和网格划分。 z Min-Max:手动设置坐标轴范围,自动设置网格划分。 z Manual:手动设置坐标轴范围和网格划分。 选择“Log”使用对数坐标 选择“Origin”,迫使坐标轴包含原点。 在“Max/Min”中填入坐标轴的范围。当“Scaling”中选择“Auto”时,此栏变灰,失效。 在“Major/Minor Division”中填入主网格和次网格的划分方式。前者表示把整个图表划分的个数,后者表示在把一个主网格划分的个数。此项只在“Scaling”中选择“Manual”时有效。 “Significant Digits”中填入坐标轴刻度的有效位数。选择“Default”使用默认有效位数,同时使“Significant Digits”栏中填入的数字失效。 在“Foreground”中选择坐标轴的颜色。 当编辑X轴属性时,还有一下选项: 如果选择的波形来自于非参变量扫描仿真结果,那么会出现“Plot vs”栏,如图12.21所示。在该下拉菜单中包含所有的该类型的仿真结果。可以从中选择一个仿真结果,将他的Y轴作为X轴,将图表中波形转换到该X轴下显示。这个功能类似于“Results Browser”中的“YvsY”功能,具体详见第四章,4.5.4。 2) 3) 4) 5) 6) 7) 8) 9) 10) z 231 图12.21 下拉菜单中包含所有的该类型的仿真结果 z 如果选择的波形来自于非瞬态的参变量扫描,那么会出现“Sweep Var”栏,如图12.22 所示。在该栏的下拉菜单中包含所有的扫描变量,包括ADE中设置的,以及“Parametric Analysis”中设置的扫描变量。通过在该下拉菜单中的选择,可以将需要的扫描变量作为X轴,重新显示波形。在图12.22中,“temp”是ADE中的扫描变量,而“res”是“Parametric Analysis”中设置的扫描变量。在图12.23中,左边的子窗口显示了以“temp”作为X轴的仿真结果,而右边的子窗口显示了以“res”作为X轴的仿真结果。这种功能十分有利于观察比较不同变量对电路性能的影响。 图12.22 “Sweep Var”栏的下拉菜单中包含所有的扫描变量 232 图12.23 “res”和“temp”作为扫描变量的仿真结果 注意:这种功能只有在以下两个条件都满足的情况下才能使用: z 参变量仿真类型不是瞬态仿真。 z 最内层的仿真变量(见7.7)的数据点少于200个。 11) 点击“OK”完成对坐标轴的设置。 12.10 关于鼠标的操作 12.10.1 使用波形光标 波形光标是一个沿着波形移动的光标,该光标的坐标在图表的左下角显示。同时图表的右下角显示了鼠标光标的坐标值。如图12.24所示。 233 波形光标 鼠标光标坐标波形光标坐标 图12.24 波形光标 z 选择“Trace”Æ“Trace Cursor”,开启波形光标。 z 通过以下方法移动波形光标 移动鼠标光标,波形光标自动跟踪鼠标光标。在波形的两侧有一个范围,只有鼠标 进入该范围后波形光标才跟随鼠标光标移动。在一个图表中只存在一个波形光标。当有多个波形存在时,如果鼠标进入一个波形两侧的范围内,波形光标自动切换到该光标处。假如鼠标处于两个波形的范围内,则波形光标处于最靠近鼠标的波形上。 按住“Crtl”键,点击左右方向键也可以移动波形光标 z 通过以下菜单命令可以控制波形光标的移动方式: “Graph”Æ“Snap Off”:波形光标在数据点间平滑的移动。 “Graph”Æ“Snap-to-Data”:波形光标从一个数据点跳跃到下一个数据点。 “Graph”Æ“Snap-to-Peaks”:波形光标从一个峰值跳跃到下一个峰值。 12.10.2 使用垂直光标 垂直光标是一个可以移动的垂直直线,这条直线和波形的交汇处用一个红色的空心矩形显 示。交汇处的X/Y坐标在图例区波形名称后对应显示。通过拖拽垂直光标直线上方的三角形来移动垂直光标,当垂直光标移动时,交汇处的X/Y坐标值也实时更新。 z 选择“Trace”Æ“Vert Cursor”,开启垂直光标。如图12.25所示。 234 图12.25 选择“Trace”Æ“Vert Cursor”开启垂直光标 12.10.3 使用水平光标 水平光标是一个可以移动的水平直线,这条直线和波形的交汇处用一个红色的空心矩形显示。交汇处的X/Y坐标在图例区波形名称后对应显示。通过拖拽水平光标直线左边的三角形来移动水平光标,当水平光标移动时,交汇处的X/Y坐标值也实时更新。 z 选择“Trace”Æ“Horiz Cursor”,开启水平光标,如图12.26所示。 235 图12.26选择“Trace”Æ“Horiz Cursor”开启水平光标 12.10.4 使用差值光标 差值光标由一个红色和一个蓝色的可以移动的三角形光标构成。同时这两光标各自包含一条从光标出发和Y轴相交的水平线,和一条从光标出发和X轴相交的垂直线。可以通过点击和拖拽三角形可以使差值光标沿着波形移动。光标对应的X/Y坐标显示在图表的左下角,它们的X/Y坐标的差值和斜率显示在右下角,如图12.27所示 z 选择“Trace”Æ“Delta Cursor”,开启差值光标,如图12.27所示 236 图12.27选择“Trace”Æ“Delta Cursor”开启差值光标 差值的计算为: dX=红色三角形的X坐标-蓝色三角形的X坐标。 dY=红色三角形的Y坐标-蓝色三角形的Y坐标。 S=dY/dX 12.11 关于标签的使用 图12.28展示了“Waveform”窗口中所有的标签。这些标签都可以通过下面的方法进行编辑。 237 标题子标题 标记Y轴名称 X轴名称 图12.28 “Waveform”窗口中所有的标签 12.11.1 添加标签 在这一章节中将介绍如何通过“Graph”菜单和快捷键中的标签栏添加标签。 z 通过“Graph”菜单添加标签 1) 选择“Graph”Æ“Label”Æ“Edit”,此时“Label Attributes”对话框探出,如图 12.29所示。 238 图12.29选择“Graph”Æ“Label”Æ“Edit”添加标签 注意:如果“Label Attributes”对话框已经打开,可以在图表中选择任意一个标签对象来显示“Label Attributes”对话框。 2) 填入需要的信息,具体内容详见12.11.2,点击“Add”完成编辑。 3) 在图表中通过点击,将刚才编辑好的标签加入到鼠标点击的位子。 z 通过快捷键中的标签栏添加标签 1) 如果“Waveform”中有多个子窗口,通过点击子窗口右上角的数字框,来选择需 要的窗口。被选中的窗口的数字框呈绿色。 2) 在快捷键中的标签栏填入需要的标签内容 3) 点击“ ”,此时标签随着鼠标移动。 4) 通过点击鼠标左键,将编辑好的标签放到图表中。 12.11.2 编辑标签 在这一章节中将介绍如何通过“Graph”菜单和快捷键中的标签栏编辑标签。 z 通过“Graph”菜单编辑标签。 1) 选中需要编辑的标签,然后选择“Graph”Æ“Label”Æ“Edit”;或者双击需要编 辑的标签,此时“Label Attributes”对话框探出,如图12.29所示。 2) 在“String”栏汇中填入标签的内容。“WaveScan”提供了多种变量(如表12.2所 示),这些变量可以嵌入到标签内容中。当嵌入变量的标签被加入到图表中后,这些变量被估值,计算后的结果将替代标签中的相应表达式,以数据的形式出现在图表中。 239 表12.2 “WaveScan”提供的多种变量 变量 %X %Y %W %H %S %N %E 描述 X坐标 Y坐标 ΔX ΔY 斜率(ΔX/ΔY) 波形名称 表达式 3) 在“Expression”栏中填入表达式,采用SKILL语言规范。表达式中的内容将替换 “String”栏中“%E”项。 4) 在“Signif Digits”栏中填入标签中数字的有效位数。选择“Default”采用默认有 效位数。 5) 在“Font”三个下拉菜单中依次选择标签中文字的字体、字形和字号。 6) 在“Foreground”中选择标签的颜色。 7) 在“Direction”中选择标签的方向。标签方向如图12.30所示,标签的末尾指向制 定的方向。 图12.30 标签的方向 8) 点击“OK”完成对标签的编辑。 z 通过快捷键中的标签栏编辑标签。 1) 选择需要编辑的标签,选中的标签将在快捷键中的标签栏内显示。 2) 在快捷键中的标签栏内输入需要的标签内容。 3) 点击“ ”,完成对标签的编辑。 12.11.3 移动标签 通过下面的步骤,可以移动任何独立的标签;但是不能将标签附着在一个标记上。 1) 选择需要移动的标签 2) 采用下面两种方法之一介可移动标签: z 在标签上按住鼠标左键,拖拽标签到需要的位子,松开鼠标左键来释放标签。 z 选择“Edit”Æ“Move”,在需要的位子点击鼠标左键重新放置标签。 240 12.12 关于标记 标记把相应的描述信息附着在波形的一个点上,标记的默认标签显示了该点的X和Y坐标。此外可以将一个表达式和标记相关联,当标记被放入图表中后,标记的标签将显示该表达式的值,具体设置方法见12.12.3章。 12.12.1 添加标记 在图表中可以添加波形标记、垂直标记、水平标记和差值标记。 12.12.1.1 通过设置坐标添加波形标记、垂直标记和水平标记 采用以下步骤通过设置坐标添加标记: 1) 选择“Marker”Æ“Create”,此时“Marker Attributes”对话框探出,如图12.31所示。 如果“Marker Attributes”对话框已经打开,那么选择“Create”Æ“Marker”创建一个新的标记。 图12.31选择“Marker”Æ“Create”,设置坐标附加标记 2) 在“Label”栏中选择下面任意一种操作: z 输入标记的字符串。在该字符串中也可以使用表12.2中的变量。当标记被添加到 图表中后,这些变量将被估值,变量的值将代替字符串中的变量符号出现在图表中。因此标记的内容可以包含坐标的坐标、波形的斜率、波形的名称甚至一个标量表达式的值。 z 选中“Default”,使用默认值。默认值将显示标记的X和Y坐标。当“Default”选 中后“Label”栏中输入的表达式失效。 241 3) 在“X/Y”栏中选择下面任意一种操作: z 设置X和Y坐标,用以确定标记在图表中放置的位子。这种方法有利于在波形上 精确的方式标记。例如:需要在波形上X坐标为10nS 的位子放置标记,则在X栏中填入10n,而将Y栏空缺。“WaveScan”自动计算出相应得Y坐标,并放置标记。 z 选择“Use Cursor”,在鼠标的位子放置标记。 4) 在“Constraints”中选择“Trace”将把标记附着在最近的波形上;选择“Data Points” 将把标记附着在最近的波形上的数据点上。 5) 在“Type/Display”栏中选择标记的类型和显示方式(显示方式见12.12.2): z Trace:波形标记 z Vertical:垂直标记 z Horizontal:水平标记 上述三种标记类型如图12.32所示 垂直标签 水平标签 波形标签 图12.32波形标记、垂直标记和水平标记 在“Symbol Style”中选择符号的类型。选择“Arrow”将显示标记和其标签间的连线。 在“Font”三个下拉菜单中依次选择标记的标签中文字的字体、字形和字号。 在“Foreground”中选择标记的颜色。 点击“OK”完成对标记的设置 6) 7) 8) 9) 242 12.12.1.2通过鼠标添加波形标记、垂直标记和水平标记 通过下面的方法,可以通过鼠标在图表中添加波形标记、垂直标记和水平标记。 z 选择“Marker”Æ“Place”Æ“Trace Marker”、“Marker”Æ “Place”Æ “Vert Marker”, 或者“Marker”Æ“Place”Æ“Horiz Marker”,然后在图表中点击鼠标添加相应得记号。 z 将鼠标指向图表中需要放置标记的位子,然后点击快捷键“m”(添加波形标记)、“V” (添加垂直标记)或者“H”(添加水平标记)。 “WaveScan”会自动将标记添加到离鼠标最近的波形上。假如图表中有多条波形,“WaveScan”将按照下面的规则添加标记 如果在“.cdsenv”中“autoTraceSelect”选项为“true”,那么标记将添加到离鼠标 最近的波形上。 如果在“.cdsenv”中“autoTraceSelect”选项为“false”,那么标记将添加最后选中 (或者最好添加)的波形上。 12.12.1.3 添加差值标记 差值标记用来标记图表中两个点之间的差值。差值标记需要配合波形标记使用。在添加差值标记前,必须刚刚添加或者选中一个波形标记。差值标记可以单独移动或删除他所包含的两个波形标记中的一个。当差值标记的两个波形标记移动时,两个波形标记XY坐标的差值也实时更新。 差值标记可以用来测量信号间的延时,也可以配合min\\max函数测量波形的峰峰值。 通过下面的步骤添加差值标记: 1) 采取下面任意一个操作 z 选择“Marker”Æ“Place”Æ“Trace Marker”,或者通过快捷键“m”添加一个新的波 形坐标。 z 选择一个已经存在的波形标记。 2) 选择“Marker”Æ“Add Delta” 3) 点击鼠标添加第二个波形标记从而构成差值标记。或者跳过第二步,将鼠标移动到合适 的位子,通过点击快捷键“a”,加入波形标记,该波形标记自动和第一步中的波形的坐标形成差值坐标。 图12.33中显示了差值坐标。在差值标记的标签中显示了两个波形标记点之间的X坐标的差值和Y坐标的差值。 243 图12.33 差值坐标的设定与显示 当图表中存在多个波形时: 如果在“.cdsenv”中“autoTraceSelect”选项为“true”,那么差值标记的两个波形 坐标可以分别作用在不同波形上。 如果在“.cdsenv”中“autoTraceSelect”选项为“false”, 那么差值标记的两个波 形坐标只能作用在同一个波形上。 12.12.2 修改标记显示模式 所有的标记(包括波形标记、垂直标记、水平标记和差值标记)拥有三种显示模式:XY 模式、X模式和Y模式。 通过下面的步骤可以修改标记的显示模式: 1) 选择一个标记 2) 选择“Marker”Æ“Display Type”,或者选择“Marker”Æ“Edit”打开“Marker Attributes” 对话框,在“Type/Display”的下拉菜单中根据表12.3中的内容选择一个合适波形模式。 244 表12.3 “Type/Display”的下拉菜单内容 选项 显示方式 如果选择的标记是在波形标记、垂直标记或者水平标记的时候,在标记的标签中显示标记的X坐标和Y坐标。 在标记的标签中将显示两个波XY Model 如果选择的标记是差值标记, 形坐标的X坐标差值和Y坐标差值。 并且标记和标签间的连线采用斜线。 如果选择的标记是在波形标记、垂直标记或者水平标记的时候,在标记的标签中显示标记的X坐标。 在标记的标签中将显示两个波X Model 如果选择的标记是差值标记, 形坐标的X坐标差值。 并且标记和标签间的连线采用折线,折线垂直通标记 如果选择的标记是在波形标记、垂直标记或者水平标记的时候,在标记的标签中显示标记的Y坐标。如果选择的标记是差值标记,在标记的标签中将显示两个波形坐标的Y坐标差值。 并且标记和标签间的连线采用折线,折线水平通标记 Y Model 图12.34中显示了差值坐标分别在三种显示方式下结果 245 图12.34 差值坐标的三种显示方式 12.12.3 编辑标记 标记的默认属性通过“.cdsenv”中的变量进行设置。可以通过下面的步骤修改标记的属性。 1) 采取下面任意一种方法: z 双击需要编辑的标记; z 选中需要编辑的标记,然后选择“Marker”Æ“Edit”; 在图12.35中指出了标记和标记的标签在图表中的形式,请不要将两者混淆。 标记的标签 标记 图12.35 标记和标记的标签在图表中的形式 通过上面的操作,将打开“Marker Attributes”对话框。 2) 通过12.12.1.1中介绍的内容修改标记的属性。 3) 点击“OK”完成对标记的编辑。 12.12.4 移动标记 通过下面的方法可以移动一个标记 1) 选择需要移动的标记。 246 2) 采用下面任意一种方法: z 在标记上按住鼠标左键,拖拽标记到需要的位子,松开鼠标左键来释放标记。 z 选择“Edit”Æ“Move”,在需要的位子点击鼠标左键重新放置标记。 如果在图表中存在多个波形,标记将按照下面的规则移动: 如果在“.cdsenv”中“autoTraceSelect”选项为“true”,那么标记将可以在多 个波形间切换。 如果在“.cdsenv”中“autoTraceSelect”选项为“false”,那么标记只能沿着波 形移动,不能切换到其他的波形上。 12.13 保存与载入波形 12.13.1保存波形 用户可以将波形文件保存为二进制文件。用户能够将这些二进制文件导入到“WaveScan”中和仿真波形进行比较,也能够利用这些文件重新生成波形文件。 通过下面的步骤可以保存波形文件: 1) 选择一条曲线,在控制面板中选择“Trace”Æ“Save”,将会弹出“Save”对话框,如 图12.36所示。 图12.36 保存波形的设置 2) 3) 4) 5) 在文件类型选项中,将保存类型可以设置为.grf格式。 在“Save In”下拉菜单中选择所要保存的文件路径。 在“File name”中填写保存文件名。 点击“Save”,保存文件。 247 12.13.2载入波形 通过下面的步骤可以载入波形文件: 1) 同样在图形界面窗口,选择“Trace”Æ“Load”,将会弹出“Open”对话框,如图12.37 所示: 图12.37 波形文件的载入 2) 3) z z 4) 在“Look In”下拉菜单中选择所要保存的文件路径。 采用下面任意一种操作: 在“File name”中填写保存文件名。 在“Look In”下方的窗口中选择需要载入的波形文件 点击“Open”,载入文件。 12.14冻结图表 当图表被冻结后,仿真结果的重新载入将不会改变图表中的波形。可以通过以下方法冻结图 表:在图形界面中,选择“Graph”Æ“Freeze On”。 12.15重新载入图表 通过下面的方法可以重新为图表中的波形重新载入数据: 选择“File”Æ“Reload”。 248 12.16 保存图表 使用“XML”格式保存图表,可以通过保存的对话设置完全恢复恢复该图片的信息。以“XML”格式保存的图表保存如下信息: z 数据保存位置,包含数据路径,数据设置,波形名称等,而不是具体的数据。因此,由 于仿真时的不同设置造成的数据的变化,将在图表载入中反映出来。 z 大部分的图表设置属性,如网格,背景颜色,标注,标记等。 通过以下步骤以“XML”格式保存图表: 1) 选择“File”Æ“Save”,此时“Save Graph”窗口弹出,如图12.38所示, 图12.38 保存图表设定 在文件类型选项中,将保存类型可以设置为.grf格式。 在“Save In”下拉菜单中选择所要保存的文件路径。 采用下面任意一种操作: 在“Save In”下拉菜单下面的窗口中选择一个已有的波形文件,用新的数据将其覆盖。 在“File Name”栏中键入一个新的名称,从而保存一个新的波形文件。 点击“Save”,保存文件。 2) 3) 4) z z 5) 12.17 以图像格式保存图表 用户也能够以图像格式保存图表。所有的格式都是无损模式保存。通过以下步骤可以将图表以图片的形式保存下来: 1) 选择“File”Æ“Save as Image”,此时弹出“Save Image”窗口,如图12.39所示。 249 图12.39 以图像格式保存图表 2) 选择所需要保存的图片格式 如果选择“Auto”,“WaveScan”将根据文件名的拓展名选择保存类型。例如:在“File”中填入“snapshot.png”,“WaveScan”将按照“PNG”格式保存图片。“WaveScan”支持的文件拓展名有:“.png”,“.tiff”(或者“.tif”)和“.bmp”。此外,如果选择的是“PNG”模式,而在“File”中填入“snapshot. tiff”,“WaveScan”保存的文件为“snapshot.png”。 3) 填写需要保存的文件名,默认的文件名为“snapshot.png”。点击“Browser”可以选择 保存路径。 4) 点击“Save”,以图片模式保存图表。 12.18 打开保存的图表文件 不能直接在“WaveScan”中打开以图像格式保存的图表。 通过以下步骤可以打开一个保存的图表文件: 1) 在“Results Browser”中选择“File”Æ“Open Graph”Æ“Open Graph as Plot”。此时 将会弹出“Open Graph”对话框。如图12.40所示。 250 2) 3) 4) z z 5) 图12.40 打开保存的图表文件 在“Look In”下拉菜单中选择所要保存的文件路径。 在“Files of Type”下拉菜单中根据文件的拓展名选择需要显示的波形文件。 采用下面任意一种操作: 在“File name”中填写保存文件名。 在“Look In”下方的窗口中选择需要载入的波形文件 点击“Open”,载入文件。 12.19建立一个图表模版 当创建一个新的图表时,“WaveScan”会调用“.cdsenv”中的设置来决定该图表的属性,如 背景颜色,网格,字体等。 可以将一个保存的波形文件,或者将当前“Waveform”窗口设置为模板。以后创建的“Waveform”窗口都采用这个模板的设置。 z 将一个保存的波形文件作为模板: 在“Results Browser”中选择“File”Æ“Open Graph”Æ“Open Graph as Template” 所有新建的“Waveform”窗口都将采用和该波形文件相同的设置。 z 将选择的“Waveform”窗口作为模板: 在“Waveform”窗口中选择“Graph”Æ“Template”Æ“Set Current” 所有新建的“Waveform”窗口都将采用和该“Waveform”窗口相同的设置。但是这样产生的一个模板,只对当前仿真对话设置有效。对于后续的仿真对话设置,需要把该“Waveform”窗口保存为波形文件,在把他以模板的方式打开,才能使用该“Waveform”窗口的设置。 z 恢复默认设置 在“Waveform”窗口中选择“Graph”Æ“Template”Æ“Set Default” 所有新建的“Waveform”窗口都将采用“.cdsenv”中的设置。但是当前打开的图表不 251 受其影响。 252 因篇幅问题不能全部显示,请点此查看更多更全内容