由于PySpice
是完全使用ngspice
来进行计算分析,所以我们首先介绍如何使用ngspice
。ngspice
如何下载和安装已经在上一篇文章中介绍,请参考:
本文介绍的内容的完整资料,可以参考官方文档:
http://ngspice.sourceforge.net/docs/ngspice-31-manual.pdfngspice.sourceforge.netngspice
本质上可以视为一个黑盒子工具,我们提供输入文件,它进行计算分析,把结果输出文件,本文首先介绍这个输入文件的格式:
【1】 输入文件是文本文件,满足:
- 输入文件的第一行作为标题,无需作任何修饰
- 最后一行必须以
.end
作为结尾 - 中间是各种电路元素的描述行
【2】 电路元素(circuit element
,或称device instances
)
每个电路元素都必须以一行(称为instance line
)表示,包括:
- 名字(
name
) ,注意第一个字符决定了元素的类型,如下表2-1 - 连接的电路节点(
circuit node
) - 元素的参数 (
values of parameters
)
表2-1: 元素的类型字符
A
: XSPICE code model,例:A1
B
: Behavioral(arbitrary) source,例:B1
C
: 电容(Capacitor
), 例:C1
D
: 二极管(Diode
),例:D1
E
: 电压控制电压源(voltage-controlled voltage source, VCVS
),例E1
F
: 电流控制电流源(current-controlled current source, CCCS
), 例F1
G
: 电压控制电流源(voltage-controlled current source, VCCS
),例G1
H
: 电流控制电压源(current-controlled voltage source, CCVS
), 例H1
I
: 电流源current source
,例I_input
,I1
J
: 结型场效应晶体管(junction field effect transistor, JFET
),例J1
K
: 耦合型互感电感(Coupled (Mutual) Inductors
), 例:K1
L
: 电感(inductor
),例:L1
M
:金属氧化物场效应晶体管(Metal oxide field effect transistor (MOSFET)
),如M1
N
:GSS数字装置(Numerical device for GSS
) ,如:N1
O
: 有损传输线(Lossy transmission line
) ,如:O1
P
: 耦合多导体线(CPL)(Coupled multiconductor line (CPL)
),如P1
Q
: 双极结晶体管(BJT)(Bipolar junction transistor (BJT)
),如Q1
R
: 电阻(Resistor
),如:R1
,R2
S
: 电压控制开关(Switch (voltage-controlled)
) ,如:S1
T
:无损传输线(Lossless transmission line
) ,如:T1
U
: 均布电阻电容线路(Uniformly distributed RC line
) ,如:U1
V
: 电压源(Voltage source
),如:V1, Vinput
W
:电流控制开关(Switch (current-controlled)
) ,如:W1
X
:子电路(Subcircuit
) ,如X1
Y
:单损耗传输线(TXL)(Single lossy transmission line (TXL)
) , 如:Y1
Z
:Metal semiconductor field effect transistor (MESFET)
金属半导体场效应晶体管(mesfet), 如:Z1
不同的元素节点有自己的不同参数,见下面的说明。
例1:如下文件描述了图2-1的电路

文件名:1.cir
RC Circuit Transient Response
*resistor connected between nodes 1 and 2
r1 1 2 1k
*capacitor connected between nodes 2 and 0
c1 2 0 1u
*piecewise linear input voltage
vin 1 0 pwl(0 0 10ms 0 11ms 5v 20ms 5v)
*transient analysis for 20ms, step size 0.02ms
.tran 0.02ms 20ms
*defining the run-time control functions
.control
run
*plotting input and output voltages
plot v(1) v(2)
.endc
.end
【3】比例后缀(scale factor suffix
)
在ngspice
中的数值,可以是整数或者浮点数(和C语言一致),为了很好的表示非常大或非常小的值,可以在数值后面加上下面的后缀,参见表3-1:
表3-1:ngspice
使用的比例后缀
T
:太tera
,,例:
20T
G
: 吉Giga
,,例:
20G
Meg
:兆Mega
,,例:
20Meg
K
:千Kilo
,,例:
20K
mil
:密尔Mil
,,如:
20mil
m
:毫milli
,,如
20m
,注意,20M
和20m
是一样的,都不是20兆u
:微micro
,,如
10u
n
:纳nano
,,如
10n
p
:皮pico
,,如
10p
f
:费femto
,,如
10f
在ngspice
中,任何数值后面跟的非比例后缀都会被忽略,所以10, 10V, 10Volt, 10Hz
,这4个都会被转换成10
,1000, 1k, 1K, 1K_Omega
都是表示1000
。
【4】基本行 basic line
【4.1】 .title
标题行
每个文件的第一行就是标题行,无需做任何说明修饰,但是,也可以在任一行(只能一行)最左边加.title
或.TITLE
来指定是标题行,标题行的内容会作为输出文件的最上面的显示。
【4.2】.end
结束行
如题。
【4.3】注释
注释分两种,一是整行注释,在行首加*
,另一种是行尾注释,是加$
或//
,下面是示例:
* 这是整行注释
C1 = 10pF $这是电容,是行尾注释
R1 = 4Meg //这也是行尾注释
【4.4】.model
器件模型device models
指定器件模型,可以把它赋予给多个器件,其语法是:
.model 器件模型名称 type (参数1=值1 参数2=值2 ... )
比如,下面我们建立一个npn
三极管的器件模型mod1
,设置其放大倍数bf
(Ideal maximum forward beta)是50倍,工作时饱和电流(Transport saturation current) Is
=1e-13安培,正向俄利电压(Forward Early voltage, Vaf
或Vbf
) Vaf
=50 V:
.model MOD1 npn ( bf=50 is=1e-13 vaf=50)
由于一些模型的参数非常多,一行放不下,ngspice
支持在新行的第一列加+
标识,可以指定新行还是属于上一行的内容,参考下例:
.MODEL t2n2222a NPN
+ ISS= 0. XTF= 1. NS = 1.00000
+ CJS= 0. VJS= 0.50000 PTF = 0.
+ MJS= 0. EG = 1.10000 AF = 1.
+ ITF= 0.50000 VTF= 1.00000 F = 153.40622
+ BR = 40.00000 IS = 1.6339e-14 VAF = 103.40529
+ VAR= 17.77498 IKF= 1.00000 IS = 4.6956e-15
+ NE = 1.31919 IKR= 1.00000 ISC = 3.6856e-13
+ NC = 1.10024 IRB= 4.3646e-05 NF = 1.00531
+ NR = 1.00688 RBM= 1.0000e-02 RB = 71.82988
+ RC = 0.42753 RE = 3.0503e-03 MJE = 0.32339
+ MJC= 0.34700 VJE= 0.67373 VJC = 0.47372
+ TF = 9.693e-10 TR = 380.00e-9 CJE = 2.6734e-11
+ CJC= 1.4040e-11 FC = 0.95000 XCJC= 0.94518
ngspice
支持的model type
参见下表4-1:
R
: Semiconductor resistor modelC
: Semiconductor capacitor modelL
: Inductor modelSW
: Voltage controlled switchCSW
: Current controlled switchURC
: Uniform distributed RC modelLTRA
: Lossy transmission line modelD
: Diode modelNPN
: NPN BJT modelPNP
: PNP BJT modelNJF
: N-channel JFET modelPJF
: P-channel JFET modelNMOS
: N-channel MOSFET modelPMOS
: P-channel MOSFET modelNMF
: N-channel MESFET modelPMF
: P-channel MESFET modelVDMOS
: Power MOS model
【4.5】 .subckt
子电路(subcircuits
)
子电路定义了一个电路的模块(赋予一个名字),然后可以以器件的方式把它加入到实际电路中作为一个实体元素,参见下例:
* 实际电路中的元件:
xdiv1 10 7 0 vdivide //xdiv1是元件名,vdivide是子电路名
* 子电路定义:
.subckt vdivide 1 2 3
r1 1 2 10K
r2 2 3 5K
.ends
上面的电路中,子电路的1
节点对应于主电路的10
节点,2
节点对应主电路的7
节点,3
节点对应主电路的0
节点。可以参考下面的电路图:

【4.6】.global
全局节点定义
这里定义的节点可以在本文件的任何电路和子电路中访问。
例:
.GLOBAL gnd vcc
【4.7】.include
导入命令
把文件粘贴到该行,看下例:
.INCLUDE /users/spice/common/bsim3-param.mod
【4.8】.lib
导入元件库
该指令导入文件中的指定的元件库,语法:
.lib filename libname
示例:
.LIB /users/spice/common/mosfets.lib mos1