1 / 64

HSPICE 简介

HSPICE 简介. 周伶俐 2006/05/31. lilingzhou1982@163.com. 一 .HSPICE 简介. SPICE ( S imulation P rogram for I ntegrated C ircuits E mphasis) PSpice (MicroSim Corp.) ——PC version of SPICE HSpice (Avant!.) ——runs on workstations and larger computers. Hspice 和 Pspice 的区别.

cleavon
Download Presentation

HSPICE 简介

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. HSPICE 简介 周伶俐 2006/05/31 lilingzhou1982@163.com

  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. 前端功能 MetaLib CDF Symbol Library Schematic HSPICE Netlist Netlister HSPICE Simulation Parameter Changes Wave Data 反标注 Analysis Hspice的流程 后处理

  8. Hspice有哪些功能? • 电路级和行为级仿真 • 直流特性分析、灵敏度分析 • 交流特性分析 • 瞬态分析 • 电路优化(优化元件参数) • 温度特性分析 • 噪声分析 • 傅立叶分析 • Monte Carlo, 最坏情况,参数扫描,数据表扫描 • 功耗、各种电路参数(如H参数、T参数、s参数)等可扩展的性能分析

  9. *title 输入文件的标题 options 设置模拟的条件 Analysis statement 设置扫描变量、设置分析模式 .print/.plot/.graph/.probe 设置输出结果的显示方式 Sources (I or V) 设置输入激励 netlist 电路网表 .lib 元件库 .model libraries 元件模型描述 .end 结束语句 Hspice的输入——网单文件 文件结构:

  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) • V1 1 0 10 AC 1 • R1 1 2 1K • R2 2 0 1K • C1 2 0 .001U • .END

  11. 举例 SIMPLE RTL INVERTER $ Title *Circuit Description VCC 4 0 5 VIN 1 0 PULSE 0 5 2NS 2NS 2NS 30NS RB 1 2 10K Q1 3 2 0 Q1 RC 3 4 1K .MODEL Q1 NPN BF 20 RB 100 TF .1NS CJC 2PF $ Device Model * Analysis .DC VIN 0 5 0.1 .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 • R12 1 0 1MEG $ 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 = 1KM1 3 2 0 0 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 .DELLIB '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. 元器件描述(续)--几种常用电源 • 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. 下面是由前面举例的CMOS反相器组成的三级反相器链网表:下面是由前面举例的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 X2 1 2 INV WN=1.2U WP=3U X3 2 OUT INV WN=1.2U WP=3U CL OUT 0 1PF VCC VDD 0 5V …… 4. 子电路

  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 • 注意: 1)对独立源扫描时,SRCname为电源名,而非节点名 2)仿真迟滞特性要正、负双向扫描, 如: .DC Vin 0 5 0.1 .DC Vin 5 0 -0.1 3) 注意对两个量的扫描,后面的是外循环

  31. .DC对参数的扫描 • 对参数的扫描 • 例如:vin 1 2 dc H1 .param H1=10v .dc H1 0 20 1 • 对温度的扫描: .dc temp -20 80 1

  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> Or .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 100 1 100HZ .AC DEC 10 1 10K SWEEP cload LIN 20 1pf 10pf .AC DEC 10 1 10K 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 C1 1 0 500pf V1 IN 0 0 AC=10V,37 .AC OCT 10 1 100MEG .noise v(1) v1 20--分析1点电压的噪声情况,噪声源为V1端口 .END

  36. Lis文件中输出的噪声分析结果 1 ****** Star-HSPICE -- 1999.4 (19991220) 22:12:12 04/16/2002 pcnt ****** .title ac sweep example ****** noise analysis tnom= 25.000 temp= 25.000 ****** frequency = 1.0000 hz **** resistor squared noise voltages (sq v/hz) element 0:r1 total 8.233e-20 rx 5.0000 **** total output noise voltage = 8.233e-20 sq v/hz = 286.9260p v/rt hz transfer function value: v(1)/v1 = 1.0000 equivalent input noise at v1 = 286.9260p /rt hz **** the results of the sqrt of integral (v**2 / freq) from fstart upto 1.0000 hz. using more freq points results in more accurate total noise values. **** total output noise voltage = 0. 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文件中。

More Related