如何编写HSPICE网表
论
§1.1 HSPICE简介
随着微电子技术的迅速发展以及集成电路规模不断提高,对电路性能的设计要求越来越严格,这势必对用于大规模集成电路设计的EDA工具提出越来越高的要求。自1972年美国加利福尼亚大学柏克莱分校电机工程和计算机科学系开发的用于集成电路性能分析的电路模拟程序SPICE(Simulation Program with IC Emphasis)诞生以来,为适应现代微电子工业的发展,各种用于集成电路设计的电路模拟分析工具不断涌现。HSPICE是Meta-Software公司为集成电路设计中的稳态分析,瞬态分析和频域分析等电路性能的模拟分析而开发的一个商业化通用电路模拟程序,它在柏克莱的SPICE(1972年推出),MicroSim公司的PSPICE(1984年推出)以及其它电路分析软件的基础上,又加入了一些新的功能,经过不断的改进,目前已被许多公司、大学和研究开发机构广泛应用。HSPICE可与许多主要的EDA设计工具,诸如Candence,Workview等兼容,能提供许多重要的针对集成电路性能的电路仿真和设计结果。采用HSPICE软件可以在直流到高于100MHz的微波频率范围内对电路作精确的仿真、分析和优化。在实际应用中,HSPICE能提供关键性的电路模拟和设计方案,并且应用HSPICE进行电路模拟时,其电路规模仅取决于用户计算机的实际存储器容量。
§1.2 HSPICE的特点与结构
HSPICE除了具备绝大多数SPICE特性外,还具有许多新的特点,主要有: ! 优越的收敛性
! 精确的模型参数,包括许多Foundry模型参数 ! 层次式节点命名和参考
! 基于模型和库单元的电路优化,逐项或同时进行AC,DC和瞬态分析中的
优化
! 具备蒙特卡罗(Monte Carlo)和最坏情况(worst-case)分析 ! 对于参数化单元的输入、出和行为代数化
! 具备较高级逻辑模拟标准库的单元特性描述工具
! 对于PCB、多芯片系统、封装以及IC技术中连线间的几何损耗加以模拟 在HSPICE中电路的分析类型及其内部建模情况如图1.2.1和图1.2.2所示:
1
图1.2.1HSPICE的电路分析类型
图1.2.2 HSPICE的内部建模技术
集成电路设计中的分析和验证是一种典型的围绕一系列结构的试验和数据管理。在电路性能分析中,一般都要在不同应用条件下,根据需要加入各种容差和限制后进行直流分析(.DC)、交流分析(.AC)和瞬态分析(.TRAN)。HSPICE模拟时的程序结构如图1.2.3所示
2
图1.2.3 HSPICE模拟时的程序结构
HSPICE能够通过不同的源文件去访问各种输入和模拟控制信息,并绘制和输出有关节点的分析曲线和结果。图1.2.4表示了HSPICE模拟过程中各数据的状态。
图1.2.4 HSPICE模拟过程各数据状态
3
§1.3 HSPICE的输入与输出文件
HSPICE根据输入网表(netlist)文件运算并产生仿真结果,仿真结果存储在输出列表文件或图形数据文件之中。
HSPICE读或写的文件都与当前的电路设计有关,而且都采用电路设计名作为前缀。一般情况下,与一个设计有关的所有文件都存放在同一目录下面。
一.文件名的后缀
1.HSPICE输入文件 配制文件 meta.cfg 初始化文件 hspice.ini 直流工作点初始化文件 2.HSPICE输出文件 输出列表 .lis或由用户自己定义 瞬态分析结果 .tr#+ 瞬态分析测量结果 .mt# 直流分析结果 .sw#+ 直流分析测量结果 .ms# 交流分析结果 .ac#+ 交流分析测量结果 .ma# 硬拷贝图形数据 .gr#++ 数字输出 .a2d FFT分析图形数据 .ft#++ 子电路交叉列表 .pa# 输出状态 .st# 工作点节点电压(初始条件) .ic # :代表扫描分析序号或者硬拷贝文件序号,一般从0开始。 +:表示在用.POST语句产生图形数据后该文件才被确立。 ++:表示该文件需要一个.GRAPH语句或有一个针对meta.cfg文件中存在的文件的地址计数器。该文件在HSPICE的PC版中不产生。 +++:表示只有当应用了.FFT语句后该文件才被确立。 二. 输入网表文件 4 输入网表文件和库输入文件能够由一个线路网表转换器或用一个文本编辑器产生。 1.写输入网表文件的规则 输入网表文件的第一个语句必须是标题行,最后一个语句必须是.END语句,它们之间的语句次序是随意的,除非是续行(行首有“+”的行)必须接在要接下去的行后面,最后值得注意的是.ALTER子模块必须紧跟文件的结尾并出现在.END语句前。注释行可加在文件中的任何地方。 2. 输入文件的编辑 (a)HSPICE采用自由格式输入。语句中的域由一个或多个空格,一个 Tab,一个逗号, 一个等号或一个左/右圆括号分开。 (b)除UNIX系统中的文件名外,不予区分大写或小写字母。 (c)每行语句长度限于80个字符以下。 (d)一个语句如在一行写不下,可以用续号继续下去。续行以“+”作为第一个非数值、非空格字符。 (e)输入网表文件不能被“打包”,也不能被压缩。 (f)输入网表文件中不要采用特殊的控制字符。 三. 输出列表文件 电路模拟运行的结果和输入网表都被放入输出列表文件。输出列表文件被自动地取与指定的输入列表文件相同的前缀,不同的仅是带有“.lis”后缀。如输入列表文件为netlist.sp,则输出列表文件为netlist.lis。 输出列表文件包含了由输入列表文件中的.PLOT、.PRINT以及分析语句指定的模拟结果。例如输入列表文件包含了多于一次的模拟运行(通过采用.ALTER、.INCLUDE、.DATA等语句),输出列表文件中也包含了每一次模拟运行的结果。 四. 数值比例因子 HSPICE中的数值可以是整形数、浮点数。一个整形数或浮点数后跟随一个整形指数(如1e-14,2.65e3,但不能是1e-3pf)或者一个整形数或浮点数后跟随一个以下列出的数值比例因子: MI=25.4E-6 FT=.305 DB=20lg10 F=1e-15 P=1e-12 N=1e-9 U=1e-6 M=1e-3 T=1e12 G=1e9 MEG=X=1e6 K=1e3 5 图1.3.1显示了HSPICE的模拟流程。 图1.3.1 HSPICE模拟流程 第二章 电路的描述语句 本章介绍HSPICE的一些主要描述电路的语句。用这些语句对电路模拟的标题,电路的连接方式即拓扑信息,构成电路的元件、器件、电源等的属性、参数、模型、所加的注释、电路模拟结束等进行描述。 §2.1 输入描述语句和规定 在输入的电路描述语句中输入的第一条语句是标题语句,最后一条语句必须是结束语句。 一. 标题语句(.TITLE语句) 6 一般形式:.TITLE 若用户不需要标题,则第一行必须空出,否则第一行的其它HSPICE语句被作为标题行,而不被执行。 二. 结束语句(.END) 一般形式:.END 注意“.”不能少,它是结束语句整体的一部分。若一个HSPICE输入文件包含有几个HSPICE的运行,则每一个HSPICE运行的最后都要加上.END语句。 例 MOS OUTPUT .OPTIONS NODE NOPAGE VDS 3 0 VGS 20 M1 1 2 0 0 MOD1 L=4U W=6U AD=10P AS=10P .MODEL MOD1 NMOS VTO=-2 NSUB=1.0E15 TOX=1000 UO=550 VIDS 3 1 .DC VDS 0 10 0.5 VGS 0 5 1 .PRINT DC I(M1) V(2) .END MOS OUTPUT MOS CAPS .OPTION SCALE=1U SCALM=1U WL ACCT .OP .TRAN .1 6 V1 1 0 PWL 0 -1.5V 6 4.5V V2 2 0 1.5VOLTS MODN1 2 1 0 0 M 10 3 M2 .MODEL M NOS VTO=1 NSUB=1E15 TOX=1000 + UO=800 LEVEL=1 CAPOP=2 .PLOT TRAN V(1) (0,5) LX18(M1) LX19(M1) + LX20(M1) (0,6E-13) .END MOS CAPS 三. .GLOBAL语句 一般形式:.GLOBAL node1 node2 node3… node1… Global nodes, such as supply and clock names, override local subcircuit definitions 输入文件若定义了.GLOBAL语句,则输入文件所有子电路中与.GLOBAL节点名相同的节点将都被自动定义成有连接关系。一般线路的电源、地被定义成.GLOBAL 语句。 四. 注释语句 是用户对程序运算和分析时加以说明的语句。在列出输入程序时会打印出来,但不参与模拟分析。该语句可放在输入文件标题语句以后的任意位置加以注 7 释。 一般形式:* 或 §2.2 元件描述语句 元件语句一般由元件名、元件所连接的电路节点号和元件参数值组成。元件在输入中以一行表示,该行不能以“.”开始。语句中的第一个字母是关键字,它确定了该元件的类型。 一般形式:elname 或 elname 其中: elname: 元件名,是一个带有一个关键字母的不超过15个字符的 字符串。 HSPICE中表示元件的关键字母的含义: C-电容 K-耦合互感 L-电感 R-电阻 T-无损耗传输线 U-有损耗传输线 = node1... 节点名,用来说明元件所连接的节点,节点名的第一个 字符必须是字母,整个字符串不超过16个字符(连第一个 字母在内)。=()′. ′[ ]等符号不能出现在节点名中。 mname: 模型参考名,对除了无源器件外所有元件都是必需的。 pname1... 元件参数名,用来标明一些元件的参数值。 val1... 赋于的参数值或模型节点,这些数值可以是数值,也可以 是代数表达式。 M=val 元件的倍增因子。 一. 电阻 一般形式:RXXX n1 n2 + + 或 RXXX n1 n2 R=equation 例: R1 1 2 100k RC1 12 17 1k TC=0.001, 0 1.2 R4 5 54 RMOD 12k 上述电阻描述语句中,电阻值可以是正值或负值,但不能为零。TC1和TC2是温度系数,其缺省值是零。 8 二. 电容和电感 (1) 电容: 一般形式: CXXX n1 n2 + + 例: C1 3 2 10U IC=3V CBYP 13 0 1UF C2 1 2 CMOD 6PF 若系统中所用电容是非线性的,则其一般形式是: CXXX n1 n2 POLY C0 C1 C2 ... (2) 电感: 一般形式:LXXX n1 n2 + + 例: LLINK 42 69 1UH LSHUNT 23 51 10U 0.001 0 15 IC=15.7MA LH8 5 80 LMOD 2MH 若系统中所用电感是非线性的,则其一般形式是: LXXX n1 n2 POLY L0 L1 L2 ... 在非线性电容和电感的表达式中,POLY表示其中的数值C0,C1,C2…(和L0,L1,L2…)是描述元件值的多项式系数。电容值为元件两端电压V的函数,而电感值则为流过电感的电流i的函数,故有上述的表达式: 电容值=C0+C1*V+C2*V**2+… 电感值=L0+L1*i+L2*i**2+… 三. 互感(电感)耦合器 一般形式: KXXX LYYY LZZZ Kvalue 或 KXXX LYYY LZZZ K=val 其中LYYY和LZZZ是两耦合电感的名字,耦合系数K的值,必须大于零且小于等于1。 例: K34 LAA LBB 0.9999 KXFTR L1 L4 K=0.87 9 四. 无损耗和有损耗传输线 (1) 无损耗传输线: 一般形式: TXXX in refin out refout Z0=val TD=val + 例: T1 1 0 2 0 Z0=50 TD=10NS T2 1 2 3 4 Z0=120 F=1.5MHZ T3 1 3 4 6 Z0=200 F=4.5MHZ NL=0.5 (2) 均匀分布的RC传输线(有损耗传输线) 一般形式:UXXX N1 N2 N3 MNAME L=LEN 例: U1 1 5 0 URCMOD L=50U URC2 1 10 4 UMOPL L=100U N=4 §2.3电源描述语句 HSPICE中提供了一些供激励用的独立源和受控源。电源描述语句也由代表电源名称的关键字、连接情况和有关参数值组成。描述电源的关键字含义为: V: 独立电压源 I: 独立电流源 E: 电压控制电压源 F: 电流控制电流源 G: 电压控制电流源 H: 电流控制电压源 一. 独立电压源V和独立电流源I 一般形式:VXXX n+ n- <<DC=>dcval> <tranfun > + <AC=acmag,<acphase>> 或 IYYY n+ n- <<DC=>dcval> <tranfun > + <AC= acmag,<acphase>> 其中: 10 VXXX: 独立电压源名。必须以“V”开始,后面字符串不得超过15 个字符。 IYYY: 独立电流源名。必须以“I”开始,后面字符串不得超过15 个字符。 n+/n-: 电源的正负节点,电流源的电流正方向是使电流从n+节点流 出,经过电流源流入n-节点。正的电压源是使电流从n+节点流出,通过电压源流入n-节点。注意电源不必接地。若将零值的电压源接到电路某支路中,这样可得到流经该支路的电流值。零值电压源就是短路线,所以不影响电路的工作。 DC: 电源直流值 tranfun: 电源的瞬态功能 AC: 表示电源用来作交流小信号分析 acmag: 交流幅度 acphase: 交流初相位(缺省值为0.0) M: 电流源并联数(缺省值为1.0) 基于上面的语句格式,HSPICE规定有七种独立电源: 1. 直流源 一般形式:VXXX n+ n- < IXXX n+ n- < 例 V1 2 0 DC=5v V1 2 0 5v I1 3 0 DC=3mA I2 3 0 3mA 2. 交流源 一般形式:VXXX n+ n- IXXX n+ n- VIN 1 0 AC 10V 90 ISRC 23 21 AC 0.333 45.0 如果在关键字AC后面省去acmag,就认为该值是1。如果省去acphase,则认为该值为0。 3. 脉冲源 一般形式:PULSE <(> V1 V2 或: PU <(> V1: 脉冲源开始前的初始值 V2: 脉动值 td: 第一个脉冲开始前的延迟时间,缺省值为0.0 tr: 脉冲上升时间,缺省值为TSTEP tf: 脉冲下降时间,缺省值为TSTEP 11 pw: 脉冲宽度,缺省值为TSTEP per: 脉冲周期,缺省值为TSTEP 图2.3.1脉冲源示意图 例: VIN 3 0 PULSE (-1 1 2ns 2ns 2ns 50ns 100ns) V1 99 0 PU lv hv tdlay tris tfall tpw tper 上述第二个例子中将用.PARAM语句中的参数来定义此脉冲源的相关值。 4. 正弦源(调幅正弦信号) 一般形式:SIN <(> vo va 其中: vo: 电压或电流偏移量 va: 电压或电流幅度峰值 freq: 频率,缺省值是1/TSTOP。单位是Hz td: 延迟时间,缺省值是0.0,单位是秒。 θ: 阻尼因子,单位是1/秒,确省值是0.0。 ϕ: 相位,确省值是0.0,单位是度。 例:VIN 3 0 SIN(0 1 100MEG 1NS 1e10) 12 图2.3.2正弦源示意图 5. 指数源: 一般形式: EXP<(> v1 v2 v1: 电压或电流的初始值 v2: 电压或电流的趋向值 td1: 上升延迟时间,缺省值为0.0,单位是秒 td2: 下降延迟时间,缺省值为td1+TSTEP,单位是秒 τ1: 上升时间常数,缺省值为TSTEP,单位是秒 τ2: 下降时间常数,缺省值为TSTEP,单位是秒 图2.3.3指数源示意图 13 例:VIN 3 0 EXP(-4 -1 2NS 30NS 60NS 40NS) 6. 分段线性源: 一般形式: PWL <(> t1 v1 其中: v1... 电流或电压值。 t1... 分段点时间。 R 定义分段重复功能 repeat 定义分段重复的波形起始点 TD 定义实际分段线性开始前的延迟时间的关键字 delay 规定了分段线性的延迟时间 下面举一个应用分段线性源的实例: *FILE: PWL.SP THE REPEATED PIECEWISE LINEAR SOURCE *ILLUSTRATION OF THE USE OF THE REPEAT FUNCTION “R” .file pwl.sp REPEATED PIECEWISE LINEAR SOURCE .OPTION POST .TRAN 5N 500N V1 1 0 PWL 60N 0V, 120N 0V, 130N 5V, 170N 5V, 180N 0V, R 0N R1 1 0 1 V2 2 0 PL 0V 60N, 0V 120N, 5V 130N, 5V 170N, 0V 180N, R 60N R2 2 0 1 .END 图2.3.4上述实例中分段线性源示意图 PWL形式是分段线性源。每一对值(ti,vi)确定了在时间TIME=ti时分段 14 线性源的值vi,从而确定了波形的一个拐点,中间时间的源值可用线性插值方法确定。 7. 单频调频源: 一般形式:SFFM <(> vo va va 输出电压或电流的幅度 fc 载频,缺省值为1/TSTOP,单位是Hz mdi 调制指数,缺省值为0.0 fs 调制信号频率,缺省值为1/TSTOP,单位是Hz 波形由下式决定: *SIN[2*π*fc*Time+mdi*SIN(2*π*fs*Time)] 图2.3.5单频调频源示意图 例:VIN 7 0 SFFM(0.01 0.4 100MEG 0.3 20k) 8. 单频调幅源: 一般形式:AM(sa oc fm fc td) 其中: sa 调制信号幅度,缺省值为0.0 oc 偏移常数,缺省值为0.0 fm 调制信号频率,缺省值为1/TSTOP,单位是Hz fc 载频,缺省值为0.0,单位是Hz td 信号开始前的延迟时间,确省值为0.0,单位是秒 15 sourcevalue=vo+va 波形由下式决定: sourcevalue=sa*{oc+SIN[2*π*fm*(Time-td)]} *SIN[2*π*fc*(Time-td)] === 图2.3.6单频调幅源示意图 例:V3 3 0 AM (10 1 100 1k 1M) 二. 电压和电源控制源: (1) 电压控制电压源—E元件 一般形式: 线性:EXXX n+ n- + + 多阶: EXXX n+ n- + + 多输入门:EXXX n+ n- + 16 + x1, y1,... x100, y100 延迟元件:EXXX n+ n- (2) 电流控制电流源—F元件 一般形式: 线性: FXXX n+ n- 多阶:FXXX n+ n- + + 多输入门: FXXX n+ n- + (3) 电压控制电流源—G元件 一般形式: 线性:GXXX n+ n- 多阶:GXXX n+ n- 分段线性:GXXX n+ n- + + 或:GXXX n+ n- + + 17 或:GXXX n+ n- + >>> <)> <)>