通过阅读ngspice 的官方pdf版本的document做得笔记。
ngspice
RUN
source EX1.cir
run
plot v(5)
CMD
.TITLE line
//Examples:
POWER AMPLIFIER CIRCUIT
* additional lines following
*...
Test of CAM cell
* additional lines following
*...
//.TITLE line example:
******************************
* additional lines following
*...
.TITLE Test of CAM cell
* additional lines following
*...
//Internal input deck:
Test of CAM cell
* additional lines following
*...
*TITLE Test of CAM cell
* additional lines following
*...
.END Line
.end
Comments
// $ *
* <any comment>
* RF=1K Gain should be 100
* Check open-loop gain and phase margin
model device models
//.model mname type(pname1=pval1 pname2=pval2 ... )
.model MOD1 npn (bf=50 is=1e-13 vbf=50)
SUBCIRCUITS
// .SUBCKT subnam N1 <N2 N3 ...>
.SUBCKT OPAMP 1 2 3 4
//.ENDS <SUBNAM>
.ENDS OPAMP
//XYYYYYYY N1 <N2 N3 ...> SUBNAM
X1 2 4 17 3 1 MULTI
* The following is the instance card:
*
xdiv1 10 7 0 vdivide
* The following are the subcircuit definition cards:
*
.subckt vdivide 1 2 3
r1 1 2 10K
r2 2 3 5K
.ends
.GLOBAL
// .GLOBAL nodename
.GLOBAL gnd vcc
.INCLUDE
//.INCLUDE filename
.INCLUDE /users/spice/common/bsim3-param.mod
.LIB
// .LIB filename libname
.LIB /users/spice/common/mosfets.lib mos1
###.PARAM Parametric netlists
//.param <ident> = <expr> <ident> = <expr> ...
.param pippo=5
.param po=6 pp=7.8 pap={AGAUSS(pippo, 1, 1.67)}
.param pippp={pippo + pp}
.param p={pp}
.param pop=’pp+p’
.param a = 123 * 3 b = sqrt(9) // doesn’t work, a <= 123
.param a = ’123 * 3’ b = sqrt(9) // ok.
.param c = a + 123 // won’t work
.param c = ’a + 123’ // ok.
.param c = a+123 // ok.
Subcircuit
* Param-example
.param amplitude= 1V
*
.subckt myfilter in out rval=100k cval=100nF
Ra in p1 {2*rval}
Rb p1 out {2*rval}
C1 p1 0 {2*cval}
Ca in p2 {cval}
# ngspice
## RUN
source EX1.cir
run
plot v(5)
## CMD
### .TITLE line
```verilog
//Examples:
POWER AMPLIFIER CIRCUIT
* additional lines following
*...
Test of CAM cell
* additional lines following
*...
//.TITLE line example:
******************************
* additional lines following
*...
.TITLE Test of CAM cell
* additional lines following
*...
//Internal input deck:
Test of CAM cell
* additional lines following
*...
*TITLE Test of CAM cell
* additional lines following
*...
.END Line
.end
Comments
// $ *
* <any comment>
* RF=1K Gain should be 100
* Check open-loop gain and phase margin
model device models
//.model mname type(pname1=pval1 pname2=pval2 ... )
.model MOD1 npn (bf=50 is=1e-13 vbf=50)
SUBCIRCUITS
// .SUBCKT subnam N1 <N2 N3 ...>
.SUBCKT OPAMP 1 2 3 4
//.ENDS <SUBNAM>
.ENDS OPAMP
//XYYYYYYY N1 <N2 N3 ...> SUBNAM
X1 2 4 17 3 1 MULTI
* The following is the instance card:
*
xdiv1 10 7 0 vdivide
* The following are the subcircuit definition cards:
*
.subckt vdivide 1 2 3
r1 1 2 10K
r2 2 3 5K
.ends
.GLOBAL
// .GLOBAL nodename
.GLOBAL gnd vcc
.INCLUDE
//.INCLUDE filename
.INCLUDE /users/spice/common/bsim3-param.mod
.LIB
// .LIB filename libname
.LIB /users/spice/common/mosfets.lib mos1
###.PARAM Parametric netlists
//.param <ident> = <expr> <ident> = <expr> ...
.param pippo=5
.param po=6 pp=7.8 pap={AGAUSS(pippo, 1, 1.67)}
.param pippp={pippo + pp}
.param p={pp}
.param pop=’pp+p’
.param a = 123 * 3 b = sqrt(9) // doesn’t work, a <= 123
.param a = ’123 * 3’ b = sqrt(9) // ok.
.param c = a + 123 // won’t work
.param c = ’a + 123’ // ok.
.param c = a+123 // ok.
Subcircuit
* Param-example
.param amplitude= 1V
*
.subckt myfilter in out rval=100k cval=100nF
Ra in p1 {2*rval}
Rb p1 out {2*rval}
C1 p1 0 {2*cval}
Ca in p2 {cval}
Cb p2 out {cval}
R1 p2 0 {rval}
.ends myfilter
*
X1 input output myfilter rval=1k cval=1n
V1 input 0 AC {amplitude}
.end
.PARAM PARAMETRIC NETLISTS
* Logical operators
v1or 1 0 {1 || 0}
v1and 2 0 {1 && 0}
v1not 3 0 {! 1}
v1mod 4 0 {5 % 3}
v1div 5 0 {5 \ 3}
v0not 6 0 {! 0}
.control
op
print allv
.endc
.end
.FUNC
// .func <ident> { <expr> }
// .func <ident> = { <expr> }
.func icos(x) {cos(x) - 1}
.func f(x,y) {x*y}
.func foo(a,b) = {a + b}
.CSPARAM
Create a constant vector (see 17.8.2) from a parameter in plot (17.3) const.
//.csparam <ident> = <expr>
.param pippo=5
.param pp=6
.csparam pippp={pippo + pp}
.param p={pp}
.csparam pap=’pp+p’
* test csparam
.param TEMPS = 27
.csparam newt = {3*TEMPS}
.csparam mytemp = ’2 + TEMPS’
.control
echo $&newt $&mytemp
.endc
.end
.TEMP
Sets the circuit temperature in degrees Celsius.
//.temp value
.temp 27
.IF Condition-Controlled Netlist
//.if(boolean expression)
//...
//.elseif(boolean expression)
//...
//.else
//...
//.endif
//Example 1:
* device instance in IF-ELSE block
.param ok=0 ok2=1
v1 1 0 1
R1 1 0 2
.if (ok && ok2)
R11 1 0 2
.else
R11 1 0 0.5 $ <-- selected
.endif
//Example 2:
* .model in IF-ELSE block
.param m0=0 m1=1
M1 1 2 3 4 N1 W=1 L=0.5
.if(m0==1)
.model N1 NMOS level=49 Version=3.1
.elseif(m1==1)
.model N1 NMOS level=49 Version=3.2.4 $ <-- selected
.else
.model N1 NMOS level=49 Version=3.3.0
.endif
3
m 并行
.param madd = 6
X1 a b sub1 m=5
.subckt sub1 a1 b1
Cs1 a1 b1 C=5p m=’madd-2’
.ends
.param madd = 4
X1 a b sub1 m=3
.subckt sub1 a1 b1
X2 a1 b1 sub2 m=’madd-2’
.ends
.subckt sub2 a2 b2
Cs2 a2 b2 3p m=2
.ends