Download presentation
Presentation is loading. Please wait.
1
HSPICE 简介 周伶俐 2006/05/31
2
一.HSPICE 简介 SPICE (Simulation Program for Integrated Circuits Emphasis) PSpice (MicroSim Corp.) ——PC version of SPICE HSpice (Avant!.) ——runs on workstations and larger computers
3
Hspice和Pspice的区别 Hspice可以支持sun,hp,sgi,ibm,ux,pc(win2000,win98,nt,linux)支持多线程工作,sun-mt,hp-mt,pc-mt .... 不过由于两者的引擎都是脱胎于spcie2g.5所以在运算能力上差别不是很大,但是hspice的功能要比pspice强大,特别是在收敛上面加了很多option,由于hspice在业界20多年,有着强大的model支持,使它在业界有着特别良好的应用,以至于成为了业界的一个标准。
4
Hspice和Pspice的区别 缺点就是,对内存敏感,内部是frotran写的采用类似c指针的方式对内存地址进行操作,大概只可以做5000个晶体管,速度很慢 其实在有效的2000个晶体管以上的电路就应该考虑用cadence,主要比起Hspice来说,cadence在电路收敛性问题比较少。(后面会讲到收敛性问题)
5
简单电路正向设计的典型流程 功能定义 行为设计 逻辑级电路设计——得到由基本逻辑单元组成的电路(数字电路) 逻辑级仿真(迭代)
选择合适的工艺库。把各基本功能单元映射至其上;或设计各单元晶体管级电路——得到电路级网表
6
电路级仿真:验证各单元电路是否具有期望的功能,性能估计。(迭代)
版图设计、DRC, LVS 提取版图网表,进行后仿真:验证功能,估计性能。(迭代) Hspice主要应用于电路级仿真、分析。可以辅助调整电路参数。得到功耗、延时等性能估计。
7
Hspice的流程 前端功能 Schematic Netlister 反标注 Analysis 后处理 MetaLib CDF
Simulation Analysis Wave Data Parameter Changes MetaLib CDF Symbol Library 前端功能 反标注 后处理
8
Hspice有哪些功能? 电路级和行为级仿真 直流特性分析、灵敏度分析 交流特性分析 瞬态分析 电路优化(优化元件参数) 温度特性分析
噪声分析 傅立叶分析 Monte Carlo, 最坏情况,参数扫描,数据表扫描 功耗、各种电路参数(如H参数、T参数、s参数)等可扩展的性能分析
9
.print/.plot/.graph/.probe
Hspice的输入——网单文件 文件结构: *title options Analysis statement .print/.plot/.graph/.probe Sources (I or V) netlist .lib .model libraries .end 输入文件的标题 设置模拟的条件 设置扫描变量、设置分析模式 设置输出结果的显示方式 设置输入激励 电路网表 元件库 元件模型描述 结束语句
10
Hspice的输入——网单文件 例(The Star-Hspice netlist for the RC network circuit) : *title A SIMPLE AC RUN .OPTIONS LIST NODE POST .OP .AC DEC 10 1K 1MEG .PRINT AC V(1) V(2) I(R2) I(C1) V AC 1 R K R K C U .END
11
举例 SIMPLE RTL INVERTER $ Title *Circuit Description VCC 4 0 5
VIN 1 0 PULSE 0 5 2NS 2NS 2NS 30NS RB K Q Q1 RC 3 4 1K .MODEL Q1 NPN BF 20 RB 100 TF .1NS CJC 2PF $ Device Model * Analysis .DC VIN .TRAN 1NS 100NS *Output .PLOT DC V(3) .PLOT TRAN V(3) (0,5) .PRINT TRAN V(3) .END $Necessary
12
二. 词法 1. 不区分大小写(case insensitive) 2. 标题行——第一行 3. 注释:* or $ 4. 续接符:+
5. 非线性器件要用 .MODEL statement. 6. 0, GND, GND!, GROUND 表示全局地. 7. 表示数量的词尾: T(= 1E12 or 10+12); G(= E9); MEG(= E6); K(= E3); M(= E-3); U(= E-6); N(= E-9); P(= E-12), and F(= E-15),默认是国际单位。(关键不要搞错M和MEG) 8. Output variables:(后面会有详细的讲解) Voltage between two nodes: v(n1,n2) Voltage of a node relative to ground: v(n1) Current through an independent source: i(vin)
13
*与$注释的区别 一个星号(*)或一个美元符($)作为第一个非空行字符表明一个注释说明 语法
* <comment on a line by itself> 或 <HSPICE statement> $ <comment following HSPICE input> 例子 *RF=1K GAIN SHOULD BE 100 $ MAY THE FORCE BE WITH MY CIRCUIT VIN 1 0 PL 0 0 5V 5NS $ 10v 50ns R MEG $ FEED BACK 你可以把一个注释说明放在电路描述的任何地方。 *必须在一行的第一个空格处。 $用作说明并不必在一行第一个空格处(例如,在同一行紧跟Star-Hspice输入的说明)。$必须在一个空格或逗号之前,如果它不是第一个非空白字符。 文件或节点名内允许使用$。
14
三. “预编译”指令
15
1. .INCLUDE Statement .INCUDE语句:引用一个文件,被引用的文件置于引用文件前。 例: LNA
.include “me98xxxx/model.sp“ ···
16
2. .PARAM statement Syntax:
.PARAM <parametername> = <Expression>' Example: .PARAM width = 20u .PARAM length = 'sqrt(width)*1.65' M1 3 2 0 0 NMOS width length
17
3. .DATA statement .PARAM width = 10u .PARAM length = 6u .PARAM RL = 1K M NMOS width length Rload 3 5 RL .TRAN 1n 1000n SWEEP DATA=D1 .AC DEC 10 1hz 1GHz SWEEP DATA=D1 .DATA D1 width length RL + 50u 20u 1K + 60u 10u 10K + 100u 25u 1K .ENDDATA
18
4. .ALTER 可以使用.ALTER语句并使用不同的参数和数据以返回一个仿真结果。 语法
.ALTER <title_string> title_string是任何最长至72个字母的字符串。.alter运行所需的合适的字符串在每个输出列表文件和图形数据文件(.tr#)的标题部分打印出来。
19
.ALTER Vin node1 node2 dc h1 .alter change VIN=5 .PARAM h1=5V
.ALTER FF .DEL LIB 'D:\TEST\PROCESS\0.6U BCD V0.1PHASE1.lib' TT .LIB 'D:\TEST\PROCESS\0.6U BCD V0.1PHASE1.lib' FF SS TT FF SF FS
20
四. 网表输入
21
1. The most important rules
no duplicate nodes 不能重复定义节点 zero for your ground node 地确定是0 no floating nodes 不要有悬空节点
22
2. Node names 对于仿真中关键的节点最好给一个有意义的命名 节点名字的有意义化会方便你直接观看输出的结果,避免再回到图中对照。
23
3. 元器件描述 Vxx—独立电压源 Ixx—独立电流源 Exx-电压控制电压源 Gxx-电压控制电流源
Hxx-电流控制电压源 Fxx-电流控制电流源 Sxx-电压控制开关 Wxx-电流控制开关 Rxx-电阻 Cxx-电容 Lxx-电感 Kxx-互感 Dxx-二极管 Qxx-三极管 Mxx-MOS Jxx-JFET Xxx-模块
24
3. 元器件描述(续) --几种常用电源 Vname N1 N2 SIN(VO VA FREQ TD THETA PHASE)
Sinusoidal sources Vname N1 N2 SIN(VO VA FREQ TD THETA PHASE) Vname = VO + VA exp[-THETA.(t - TD)] sin[2pi.f (t - TD) + (Phase/360)] PWL Vname N1 N2 PWL(T1 V1 T2 V2 T3 V3 ...) Example: Vgpwl 1 2 PWL(0 0 10U 5 100U 5 110U 0) r 间隔时间 Pulse Vname N1 N2 PULSE(V1 V2 TD Tr Tf PW Period)
25
4. 子电路 下面是由前面举例的CMOS反相器组成的三级反相器链网表: …… .global vdd
4. 子电路 下面是由前面举例的CMOS反相器组成的三级反相器链网表: …… .global vdd .SUBCKT INV IN OUT wn=1.2u wp=1.2u Mn out in 0 0 NMOS W=wn L=1.2u Mp out in vdd vdd PMOS W=wp L=1.2u .ENDS X1 IN 1 INV WN=1.2U WP=3U X INV WN=1.2U WP=3U X3 2 OUT INV WN=1.2U WP=3U CL OUT 0 1PF VCC VDD 0 5V
26
5. .GLOBAL xx This statement causes all nodes numbered xx, whether in the main circuit or a subcircuit, to be connected together. 注意:Global的使用需格外小心,一般仅把电源定义成Global
27
6. .LIB 语句 LIB 语句: .lib ‘<filepath>filename’ entryname
该语句根据文件路径和文件名来调用一个库文件,一般该文件包含器件模型。 例 .lib ‘MODELS’ cmos1 MODELS文件: ··· .MODEL CMOS1 nmos ··· 我们仿真中加库的语句应该是 .LIB 'D:\TEST\PROCESS\0.6U BCD V0.1PHASE1.LIB' TT
28
五.常用仿真类型
29
1. .OP Statement 计算直流工作点指令,对于分析电路很有用(要会看.lis文件) 一般在任何其它仿真之前都需要计算直流工作点
.op time看某一时刻的各个器件和电源的状态。.op vol time某一时刻所有节点电压,.op cur time某一时刻所有器件和电源的电流。.ac.dc是初始工作点,.tran默认时间是0。
30
2. .DC Statement 对参数和独立电源扫描 .DC SRCname START STOP STEP 注意:
对参数和独立电源扫描 .DC SRCname START STOP STEP 注意: 1)对独立源扫描时,SRCname为电源名,而非节点名 2)仿真迟滞特性要正、负双向扫描, 如: .DC Vin .DC Vin 3) 注意对两个量的扫描,后面的是外循环
31
.DC对参数的扫描 对参数的扫描 例如:vin 1 2 dc H1 .param H1=10v .dc H1 0 20 1 对温度的扫描:
.dc temp
32
3. .TRAN Statement .TRAN: .TRAN var1 START=start1 STOP=stop1 STEP=incr1 or .TRAN tincr1 tstop1 <tincr2 tstop2 ...tincrN tstopN> + <START=val> <UIC> 起始时刻和步长都指的是输出打印的时刻点,计算的时间步长由hspice自己决定。UIC参数表示使用.IC语句指定的节点初始值。 例:.TRAN .1NS 25NS 1NS 40NS START=10NS 0-25ns,步长0.1ns,25ns-40ns,步长1ns;从10ns开始输出结果。 .TRAN 1NS 100NS $以1ns的步长输出到100ns
33
4. .AC Statement .AC: 一般频域扫描: .AC type np fstart fstop <SWEEP var start stop incr> Or .AC type np fstart fstop <SWEEP var type np start stop> .AC var1 START = start1 STOP = stop1 STEP = incr1 例:.AC DEC 10 1K 100MEG 1kHz-100MHz,每10倍频10个采样点。
34
Ac type 一共有4种 DEC – decade variation. OCT – octave variation.
LIN – linear variation. POI – list of points. 例如 .AC DEC 10 1K 100MEG .AC LIN HZ .AC DEC K SWEEP cload LIN 20 1pf 10pf .AC DEC K SWEEP rx POI 2 5k 15k
35
5. .NOISE— AC Noise Analysis
噪声分析: 用来计算各个器件的噪声对输出节点的影响并给出其均方根并输出,可完成.AC语句规定的各频率的计算,应在.AC分析之后。 .NOISE ovv srcnam inter Ovv-输出变量,srcnam-输入源,inter-频率间隔 例:.title ac sweep example .OPTIONS POST R1 in 1 5 C pf V1 IN 0 0 AC=10V,37 .AC OCT MEG .noise v(1) v1 20--分析1点电压的噪声情况,噪声源为V1端口 .END
36
Lis文件中输出的噪声分析结果 1 ****** Star-HSPICE ( ) 22:12:12 04/16/2002 pcnt ****** .title ac sweep example ****** noise analysis tnom= temp= frequency = hz **** resistor squared noise voltages (sq v/hz) element 0:r1 total e-20 rx **** total output noise voltage = 8.233e-20 sq v/hz = p v/rt hz transfer function value: v(1)/v = equivalent input noise at v = p /rt hz **** the results of the sqrt of integral (v**2 / freq) from fstart upto hz. using more freq points results in more accurate total noise values. **** total output noise voltage = volts **** total equivalent input noise = 0. …….
37
六.输出及控制
38
1. .PRINT, .PLOT and .PROBE .PRINT:在输出的list文件中打印数字的分析结果,如果.OPTIONS中有POST则同时输出到post-processor中。 .PLOT:在输出的list文件中打印低分辨率的曲线(由ASCII字符组成),如果.OPTIONS中有POST则同时输出到post-processor中。 .GRAPH:生成用于打印机或PostScript格式的高分辨率曲线。 .PROBE:把数据输出到post-processor,而不输出到list文件。
39
.PRINT, .PLOT and .PROBE Examples: .PLOT DC V(1,2) V(3) I(Vmeas)
.PRINT TRAN V(3,1) I(Vmeas) .PLOT AC VM(3,0) VDB(4,2) VM(2,1) VP(3,1) IR(V2) 注意:使用par计算参数的值 例:print dc i1=par(‘V(X1.node3)’)
40
输出某个器件的流过的电流 可以直接输出也可以通过间接的方法 间接的方法就是电路中串联0电阻和0电压源来看某个支路或者某个器件上的电流。
直接的方法有两种 1. 利用里面规范的语句看器件的电流 BJT ic( ) ib( ) ie( ) MOS id( ) ig( ) is( ) Diobe i( ) RES i( ) 例:.print dc ic(q1) 2.利用.par语句
41
输出某个器件的流过的电流 .print i1=par(‘i1(Q118)’) i2=par(‘i1(r1)’)
I1,i2,i3,i4对于不同的器件有不同的含义,具体如下
42
输出某个器件的流过的电流
43
输出某个器件的流过的电流
44
输出某个器件的流过的电流
45
输出某个器件的流过的电流
46
输出某个器件的流过的电流
47
gain Vin node1 node2 dc 10 ac 1 .ac dec 10 1k 1meg .print vdb(‘vout’)
.print vdb(‘vout/vin’) .print ac gain=par('vdb(vout)') Vout是输出节点。
48
2. Options statement .OPTIONS: 该语句允许用户重新设置程序的参数或控制程序的功能。常用的一些如下:
node: 列出个节点的元件端点,便于查错; post: 使输出数据可以使用 AvantWaves 浏览(即将数据输出到post processor; list: 列出元件列表; MEASDGT:.MEASURE语句输出的有效数字位数 语法:MEASDGT = x,The value of x is typically between 1 and 7, although youcan set it as high as 10. The default value is 4.0.
49
2. Options statement 例:.option post probe AvantWaves只观察.probe语句输出的变量。
除了以上的还有其它的参数详细hspiceguide中的P387页。 常用的是fast,bypass=0 加速仿真,但是会牺牲精度。(P426页)
50
3. .MEASURE statement 使用.MEASURE语句去修改信息和定义连续的仿真结果
.MEASURE语句打印使用者定义的一个电路的电气规范并大量地用于最优化。规范包括在一个特定的时间内的传播,时延,上升时间,下降时间,峰间(peak-to-peak)电压,最小和最大电压和大量使用者自己定义的变量。带有错误模式和GOAL参数,.MEASURE也广泛地用于组件值的优化和为参数模型寻找合适的测量数据。其结果保存在*.mt0文件中。
51
1. .SAVE and .LOAD .SAVE语句 .SAVE语句在一个使用者规定的文件内存储一个电路的工作点。接着你可以为接下来的仿真使用.LOAD语句以输入此文件的内容,以获得快速的DC 收敛。缺省情况下常常存储工作点,即使Star-Hspice输入文件不包含一个.SAVE语句。为了不存储工作点,规定.SAVE LEVEL=NONE。 你可以规定工作点数据作为一个.IC语句保存或者一个.NODESET语句保存。 语法: .SAVE <TYPE=type_keyword> <FILE=save_file><LEVEL=level_keyword> <TIME=save_time>
52
1. .SAVE and .LOAD .LOAD语句 使用.LOAD语句去输入与.SAVE语句存储在一起的文件的内容。与.SAVE语句存储在一起的文件在此点包含工作点的信息,在分析中.SAVE语句被执行。 不要在连接的网表文件中使用.LOAD语句。 语法 .LOAD <FILE=load_file> 详细见中文版的P121和P122
53
2. .IC or .NODESET This statement provides an alternative way to specify initial conditions of nodes (and thus over capacitors). .IC Vnode1 = value Vnode2 = value etc. .NODESET Vnode1 = value Vnode2 = value etc.
54
sweep 参数扫描,可以扫描data和参数(包括temp) 例如 .TRAN 200P 20N SWEEP TEMP -55 75 10
.TRAN 1n 100n SWEEP DATA=devinf .DATA devinf width length thresh cap + 50u 30u 1.2v 1.2pf + 25u 15u 1.0v 0.8pf + 5u 2u 0.7v 0.6pf .ENDDATA
55
八.经验谈
56
1. 注释及版本管理的问题 这个跟计算机程序源代码管理十分类似。 好的注释为你减少错误的可能性和为别人减少读懂你仿真的时间
好的版本管理使你的很方便的从改错的或者改糟糕的版本恢复。
57
2.善用.op Op会输出所有的工作点信息,这样方便你分析电路的错误,防止出现因为管子工作状态不正常而引起的电路工作不正常,它也可以提醒我们电路工作中管子的状态的重要性。
58
3. 常见的错误 Failure to converge (OP and DC) – The DC solver uses an iterative method to find the operating point, but some circuits exist which have no or multiple operating points. The best solution is to perform hand analysis of your circuit to make sure that you haven’t done this. No DC Path to ground (OP and DC) – This often happens with floating MOSFET gates. Just add a resistor between the node and ground, or use the .IC or .NODESET commands to create an initial condition. Be warned, however, that .NODESET and .IC can cause convergence problems. Stability Problems (TRAN) – Sometimes a transient analysis shows a “ringing” or oscillation that shouldn’t be there. This can often be solved by reducing the maximum time step or using slower rise and fall times for independent sources. 注意:不要把HSPICE的lib和要仿真的网表放在中文目录下,或者把网表名改成中文名。
59
4.关于仿真不收敛 一般来说可以分为两种情况: 初始情况状态不收敛 瞬态仿真时电路出现间断点
60
初始情况下不收敛: 产生原因:由于反馈的存在,电路在实际仿真时会出现多个稳态而造成了不收敛。
解决方法:通过观察hspice仿真报错,找出不收敛的模块,在其内部使用.ic语句使电路工作于正常的工作状态。
61
瞬态仿真时电路出现间断点: 产生原因及现象:主要是由于电路工作状态发生剧烈跳变所引起的,表现为仿真时hspice长时间的停在仿真界面,或报错为:The internal timestep is too small.此种方式不能通过设置.ic语句进行解决. 将仿真步长尽量适当改小。 对于电路工作影响比较大的电源部分,使用pwl形式,使它不发生跳变。 在电路的初始条件下,使用.options off对所有有源器件进行初始化。 对于电路中跳变过快的点,在其一端并联一小电容,一般为FF级别,不会对电路产生影响。更方便的方法是使用cshunt语句,给每个节点并联一小电容,但此种作法有可能对电路功能产生影响。
62
5. 运放的仿真 开环增益、开环频响、共模增益、PSRR、CMRR、共模输入和输出电压范围、开环输出电阻、瞬态相应等
参见《CMOS 模拟集成电路的设计(第二版)》,Phillip E. Allen,6.6节 运算放大器的仿真和测量(P249-259)
63
6 步长的合理设置 步长的设置一定要合理,如果CLK的周期是1u,占空比为50%,那么用tran扫描的时候步长理论上至少是0.5u,但是实际上应该为0.1u,否则CLK就不在是方波,而是锯齿波。这在仿真数字电路的时候一定要注意。 当扫描迟滞特性的时候,如果步长设置过大,就无法看出有迟滞。
64
Thanks!
Similar presentations