Hspice 学习

Follow 复旦大学Hspice简明教程(2007)

Hspice 分析方法

  • 直流分析:包括非线性电路的直流分析
    • 电路的直流工作点:分析时电路中的电感全部短路,电容全部开路,得到电路的每一节点的电流和电压(相对参考点)值。
    • 直流小信号传输值:传输函数的直流小信号值为直流小信号工作下的输出变量和输入变量之比值,包括电路的输入电阻和输出电阻。
    • 直流转移曲线:HSPICE可在用户指定的范围内,逐步改变指定的独立电压或电流源,对每一个电源值的变化,都得到储存的输出变量。
    • 灵敏度分析:求出指定输出变量对于电路参数(包括电路中所有的元件,器件参数,直流电源的输入电平)的直流小信号灵敏度。 交流小信号分析:将交流输出变量作为频率的函数计算出来。先计算电路的直流工作点,决定电路中所有非线性器件的线性化小信号模型参数,然后在用户所指定的频率范围内对该线性化电路进行分析。
    • 频域分析:在用户规定的频率范围内完成电路的交流分析。
    • 噪声分析:HSPICE可计算每个频率点上总的输出噪声电平及其等效输入噪声电平。
    • 失真分析:计算电路交流小信号工作下电路的失真特性,分析时是在输入端加有一个或两个频率的信号,在用户给定的输出负载电阻时,求出在该负载上的输出失真功率。
  • 瞬态分析
    • 瞬态响应:是从时间为零开始,到用户规定的时间范围内进行电路的瞬态特性分析。
    • 傅立叶分析:可以对输出波形进行傅立叶分析,得到在用户指定的基频及时间间隔范围的傅立叶系数。
  • 电路的温度特性分析:HSPICE在用户未说明时,是在27℃的标称温度下进行各种模拟的。当用户指定电路在什么温度下工作时,HSPICE也能进行不同温度下的电路特性分析,在温度低于-273℃时不予模拟

工作流程

简单例子

RC电路

一个有直流交流电压源的简单电阻电容网络,电路由电阻 R1 和 R2,电容 C1,电源 V1 构成。节点 1 连接电源正极和电阻 R1,节点 2 连接电阻 R1 和 R2,电容 C1,节点 0 在 Hspice 中默认为接地节点

输入

 1A SIMPLE AC RUN 
 2.OPTIONS LIST NODE POST 
 3.OP 
 4.AC DEC 10 1K 1MEG 
 5.PRINT AC V(1) V(2) I(R2) I(C1) 
 6V1 1 0 10 AC 1 
 7R1 1 2 1K 
 8R2 2 0 1K 
 9C1 2 0 .001U 
10.END

运行后,目录中有 RC.ac0 RC.ic0 RC.lis RC.sp RC.st0

  • RC.lis 文件记录了log信息
  • RC.st0
1wv RC.ac0

Transient analysis of a simple RC circuit

1EE105 SPICE Tutorial Example 1 - Simple RC Circuit
2vs vs gnd PWL(0s 0V 5ms 0V 5.001ms 5V 10ms 5V)
3r1 vs vo 1k
4c1 vo gnd 1uF
5.tran 0.01ms 10ms
6.option post=2 nomod
7.end
  • 第 2-4 行包含电路拓扑的描述。在这种情况下,我们有三个节点:vs、vo 和 gnd。请注意,元素和节点可以具有相同的名称,因此第 2 行是完全合法的,即使它将称为 vs 的电压源连接到称为 vs 的电路节点。在某些电路中,您可能需要引⽤电压源或电路节点稍后在分析语句中,但上下⽂将始终清楚您指的是哪个,因此具有相同名称的源和节点永远不会引起歧义
  • 节点 gnd 是用于参考点的标准名称。 也可以使用数字 0 来指代接地点(有些人喜欢给他们的节点编号而不是命名它们,在这种情况下,0 可能是更自然贴合)。
  • 如果您再看⼀下第 3 行,您会发现在定义源 vs 时,我将节点 vs 放在第⼀位,然后将节点 gnd 放在第⼆位。在处理具有正极和负极端⼦的元件时,这是⼀个重要的区别。对于电阻器,例如第 3 行中的电阻器,我可以按任何顺序列出节点,⽽不会改变电路的行为。另请注意,源的值是⼀个复杂的 PWL表达式。请参阅本指南末尾的语法参考,您会发现这实际上是⼀个⾮理想的阶跃函数(线性上升超过 1 µs)
  • 第5行是我们的第⼀个分析语句。它告诉 HSPICE 从时间t = 0 ms 到时间t = 10 ms 以0.01 ms的增量进行瞬态(即测量值作为时间的函数) 。当您之前模拟此电路时,您应该已经看到 vo 的曲线是由于阶跃函数输⼊⽽导致的电容器充电曲线。该分析语句允许您绘制节点 vo 的基于时间的分析。
  • 第 6 行是您可以传递给 HSPICE 的选项列表。在这种情况下,我使⽤了两个选项:post=2 和 nomod。第⼀个,post=2,告诉 HSPICE 为 WaveView⽣成额外的⽂件以⽤于绘制数据。如果您不指定 post=2(实际上,您也可以指定 post=1 或 post=3差异对于我们的⽬的并不重要),您将⽆法在WaveView 中绘制数据。第⼆个选项 nomod 只是告诉 HSPICE 不要在输出⽂件中打印模型信息。虽然这对于本⽰例来说并不重要(因为我们没有包含任何模型),但当您处理可能有半⻚⻓的真实设备模型时,它会很有⽤
1hspice rccircuit.sp > rccircuit.lis

查看结果

 1 *****************************************************************
 2 ******  option summary
 3 ******
 4 runlvl  = 3         bypass  = 2.0000
 5 **info** dc convergence successful at Newton-Raphson method
 61****** HSPICE -- L-2016.06-SP1 linux64 (Aug 24 2016) ******
 7 ******
 8 ee105 spice tutorial example 1 - simple rc circuit
 9
10 ****** operating point information tnom=  25.000 temp=  25.000 ******
11 ****** operating point status is voltage   simulation time is     0.
12    node    =voltage      node    =voltage
13
14 +0:vo      =   0.      0:vs      =   0.
15
16
17          ***** job concluded
18 ******
19 ee105 spice tutorial example 1 - simple rc circuit
20
21 ****** job statistics summary tnom=  25.000 temp=  25.000 ******
22
23
24 ******  Machine Information  ******
25 CPU:
26 model name     : Intel(R) Xeon(R) CPU E5-2640 v4 @ 2.40GHz
27 cpu MHz        : 1200.000
28
29 OS:
30 Linux version 3.10.0-1062.18.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) ) #1 SMP Tue Mar 17 23:49:17 UTC 2020
31
32
33  ******  HSPICE Threads Information  ******
34
35  Command Line Threads Count :     1
36  Available CPU Count        :    40
37  Actual Threads Count       :     1
38
39
40  ******  Circuit Statistics  ******
41  # nodes       =       3 # elements   =       3
42  # resistors   =       1 # capacitors =       1 # inductors   =       0
43  # mutual_inds =       0 # vccs       =       0 # vcvs        =       0
44  # cccs        =       0 # ccvs       =       0 # volt_srcs   =       1
45  # curr_srcs   =       0 # diodes     =       0 # bjts        =       0
46  # jfets       =       0 # mosfets    =       0 # U elements  =       0
47  # T elements  =       0 # W elements =       0 # B elements  =       0
48  # S elements  =       0 # P elements =       0 # va device   =       0
49  # vector_srcs =       0 # N elements =       0
50
51
52  ******  Runtime Statistics (seconds)  ******
53
54  analysis           time    # points   tot. iter  conv.iter
55  op point           0.00           1           1
56  transient          0.00        1001          82          41 rev=         2
57  readin             0.01
58  errchk             0.00
59  setup              0.01
60  output             0.00
61
62
63           peak memory used        224.52 megabytes
64           total cpu time            0.02 seconds
65           total elapsed time        0.05 seconds
66           job started at     20:41:05 03/27/2022
67           job ended   at     20:41:05 03/27/2022
68
69
70 lic: Release hspice token(s)
71 lic: total license checkout elapse time:        0.03(s)

Run WaveView by typing

1cx

这将打开 CustomExplorer 控制台。接下来,单击Tools → WaveView…打开 WaveView。 最后,点击File → Import Waveform File打开 rccircuit.tr0。这将在 WaveView 中打开您的瞬态结果 (.tr0)。稍后我们将详细介绍WaveView,但您可以通过在输出视图浏览器中选择DO:rccircuit.tr0并双击 vs 和 vo 以在图表中绘制它们来查看分析结果。

您可能已经能够从⽹表中猜到,但您会看到 vs 是阶跃函数输⼊,vo 是在应⽤阶跃函数时跨电容器的输出作为输⼊,曲线描述为$v_o(t) = v_s(1-e^{-t/RC}).

Operating point analysis for a diode

1EE105 SPICE Tutorial Example 2 - Simple Diode Circuit
2.model tut_diode d (is=1e-14 vj=0.6 rs=10)
3vs vs gnd 5V
4rs vs vd 5k
5d1 vd gnd tut_diode
6.op 
7.tran 0.01ms 10ms
8.option post=2 nomod
9.end
  • ⾸先,我们在第 2 行定义了⼀个名为 tut_diode 的模型。每当您在⽹表中使⽤⼆极管或晶体管时,模型都是必需的。该模型定义了与您指定的设备相关的某些参数。在本课程中,我们通常会为您提供您需要为 SPICE 模型定义的参数,⽽且我们的模型通常⾮常简单。
  • 模型可以有⼏⼗个参数,⾮常详细。请注意,型号名称不能以 HSPICE 中的数字开头(例如,2N4401 将是⽆效名称,但 QN4401 将是有效型号名称)。
  • 第 5 行显⽰了如何定义⼆极管。我们必须先指定正极端⼦,然后再指定负极端⼦。您还必须指定要使⽤的模型,在这种情况下,我使⽤的是我们刚刚在第 2 行中定义的模型。
  • 第 6 行 .op 命令。该命令代表“⼯作点”,并告诉 HSPICE 计算每个节点的电压和通过电路中每个分⽀的电流。

模拟该电路并打开 SPICE 输出⽂件。滚动浏览此⽂件,直到看到⼀行显⽰“操作点信息”。在此之下,您应该看到电路中所有节点的列表(在这种情况下,我们只有两个节点)和这些节点的电压,以及电路中所有元件的列表以及相关的电压和电流与这些元素。我们可以读出我们感兴趣的⼯作点:vd 处的电压为655.8104 mV。

1****** operating point information tnom=  25.000 temp=  25.000 ******
2 ****** operating point status is all       simulation time is     0.
3    node    =voltage      node    =voltage
4
5 +0:vd      = 655.8104m 0:vs      =   5.0000

对比公式

$$I_{S} e^{V_{D} / V_{T}}=\frac{V_{S}}{R_{S}}-\frac{1}{R_{S}} V_{D}$$

DC analysis of a diode

DC 分析使我们能够在扫描电压时测量电路中的值。例如,让我们再看看我们的⼆极管电路。与其在 5 V 时查看 vs 的 vd,也许我们希望将 vs 从 0 V 扫描到 5 V,然后查看 vd 结果如何变化。

电路图和上节电路图一致

1EE105 SPICE Tutorial Example 3 - Simple Diode Circuit
2.model tut_diode d (is=1e-14 vj=0.6 rs=10)
3vs vs gnd 5V
4rs vs vd 5k
5d1 vd gnd tut_diode
6.dc vs 0V 5V 0.01V
7.option post=2
8.option POST_VERSION=2001
9.end
  • ⾸先,请注意第 6 行,现在是 DC 分析.dc⽽不是⼯作点分析.op。在这种情况下,我们以0.01 V 的步⻓从 0 V 扫描到 5 V。
  • 查看第 3 行,您可能会认为这与我已经放在那里的值相冲突;但是,当您对源进行 DC 分析时,它会忽略您之前为源提供的任何值。
  • 第 7 行,因为我们将使⽤ WaveView 来查看 vd 与 vs 的图。模拟电路并在 WaveView 中打开它。

当然我们可以用matlab分析他们

AC analysis of a high-pass filter

1EE105 SPICE Tutorial Example 4 - Simple RC High-Pass Filter
2vs vs gnd ac 1V
3c1 vs vo 1nF
4r1 vo gnd 1k
5.ac dec 500 100 1G
6.option post=2
7.plot AC I(r1) VM(vo) VR(vo) VI(vo) VP(vo) VDB(vo) VT(vo) IT(r1) IM(r1) 
8.end
  • 第二行 ac。这告诉 HSPICE 应该通过改变这个源的频率来完成 AC 分析。如果您尝试在没有指定任何交流电源的情况下对电路进行交流分析,HSPICE 会给您⼀个错误
  • .ac 命令告诉 HSPICE 通过扫描您指定的 AC 源的频率来进行 AC 分析 ,告诉 HSPICE 是进行线性 (lin) 扫描、octaves (oct) 扫描还是decades (dec) 扫描
  • 500 每个decades(10倍)取多少样本点,100 为起始频率,1G为终止

我们使用 Hspicelab 来处理数据

模拟 ac_example.sp 后保存在 ac_example.ac0 文件中的 19 个信号被提取到 sim_results 变量中。 例如, sim_results(4).var_name=v(vo)_real 和 sim_results(4).var_name=v(vo)_imag 表示 sim_results(4).val 和 sim_results(5).val 包含sim_results(1).val计算不同频率下的输出电压。 同样 sim_results(16).var_name=vdb(vo) 表示 vo 幅度的 dB 值。 为了将该值与计算的实部和虚部信号分量进行比较,计算并相互匹配 vdB_manual 和 vdB_direct。

后来,还绘制了输出电压的波特图 ,以显示高通滤波器的效果。


900 Words|This article has been read times