Browse Source
Added support for BSIM3SOI_PD 2.2.1 and changed configuration scripts, makefiles and support routines.
pre-master-46
Added support for BSIM3SOI_PD 2.2.1 and changed configuration scripts, makefiles and support routines.
pre-master-46
40 changed files with 16752 additions and 106 deletions
-
7DEVICES
-
3configure.in
-
1src/Makefile.am
-
2src/include/gendefs.h
-
1src/spicelib/devices/Makefile.am
-
29src/spicelib/devices/bsim3soi_pd/BsimTerms_use
-
4src/spicelib/devices/bsim3soi_pd/ChangeLog
-
34src/spicelib/devices/bsim3soi_pd/Makefile.am
-
730src/spicelib/devices/bsim3soi_pd/b3soipd.c
-
358src/spicelib/devices/bsim3soi_pd/b3soipdacld.c
-
244src/spicelib/devices/bsim3soi_pd/b3soipdask.c
-
913src/spicelib/devices/bsim3soi_pd/b3soipdcheck.c
-
95src/spicelib/devices/bsim3soi_pd/b3soipdcvtest.c
-
2185src/spicelib/devices/bsim3soi_pd/b3soipddef.h
-
42src/spicelib/devices/bsim3soi_pd/b3soipddel.c
-
43src/spicelib/devices/bsim3soi_pd/b3soipddest.c
-
55src/spicelib/devices/bsim3soi_pd/b3soipdext.h
-
57src/spicelib/devices/bsim3soi_pd/b3soipdgetic.c
-
62src/spicelib/devices/bsim3soi_pd/b3soipdinit.c
-
13src/spicelib/devices/bsim3soi_pd/b3soipdinit.h
-
13src/spicelib/devices/bsim3soi_pd/b3soipditf.h
-
4661src/spicelib/devices/bsim3soi_pd/b3soipdld.c
-
1438src/spicelib/devices/bsim3soi_pd/b3soipdmask.c
-
49src/spicelib/devices/bsim3soi_pd/b3soipdmdel.c
-
1917src/spicelib/devices/bsim3soi_pd/b3soipdmpar.c
-
432src/spicelib/devices/bsim3soi_pd/b3soipdnoi.c
-
166src/spicelib/devices/bsim3soi_pd/b3soipdpar.c
-
153src/spicelib/devices/bsim3soi_pd/b3soipdpzld.c
-
1498src/spicelib/devices/bsim3soi_pd/b3soipdset.c
-
1037src/spicelib/devices/bsim3soi_pd/b3soipdtemp.c
-
51src/spicelib/devices/bsim3soi_pd/b3soipdtrunc.c
-
6src/spicelib/devices/cktbindnode.c
-
52src/spicelib/devices/dev.c
-
208src/spicelib/parser/inp2m.c
-
4src/spicelib/parser/inpdomod.c
-
110tests/bsim3soipd/lib.h
-
40tests/bsim3soipd/nmospd.mod
-
40tests/bsim3soipd/pmospd.mod
-
23tests/bsim3soipd/ring51.cir
-
18tests/bsim3soipd/t5.cir
@ -0,0 +1,29 @@ |
|||||
|
The terms under which the software is provided are as the following. |
||||
|
|
||||
|
Software is distributed as is, completely without warranty or service |
||||
|
support. The University of California and its employees are not liable |
||||
|
for the condition or performance of the software. |
||||
|
|
||||
|
The University owns the copyright but shall not be liable for any |
||||
|
infringement of copyright or other proprietary rights brought by third |
||||
|
parties against the users of the software. |
||||
|
|
||||
|
The University of California hereby disclaims all implied warranties. |
||||
|
|
||||
|
The University of California grants the users the right to modify, copy, |
||||
|
and redistribute the software and documentation, both within the user's |
||||
|
organization and externally, subject to the following restrictions |
||||
|
|
||||
|
1. The users agree not to charge for the University of California code |
||||
|
itself but may charge for additions, extensions, or support. |
||||
|
|
||||
|
2. In any product based on the software, the users agree to acknowledge |
||||
|
the UC Berkeley BSIM Research Group that developed the software. This |
||||
|
acknowledgment shall appear in the product documentation. |
||||
|
|
||||
|
3. The users agree to obey all U.S. Government restrictions governing |
||||
|
redistribution or export of the software. |
||||
|
|
||||
|
4. The users agree to reproduce any copyright notice which appears on |
||||
|
the software on any copy or modification of such made available |
||||
|
to others. |
||||
@ -0,0 +1,4 @@ |
|||||
|
2000-11-14 Paolo Nenzi <p.nenzi@ieee.org> |
||||
|
|
||||
|
* Initial release |
||||
|
|
||||
@ -0,0 +1,34 @@ |
|||||
|
## Process this file with automake to produce Makefile.in
|
||||
|
|
||||
|
pkglib_LTLIBRARIES = libbsim3soipd.la |
||||
|
|
||||
|
libbsim3soipd_la_SOURCES = \
|
||||
|
b3soipd.c \
|
||||
|
b3soipdacld.c \
|
||||
|
b3soipdask.c \
|
||||
|
b3soipdcheck.c \
|
||||
|
b3soipdcvtest.c \
|
||||
|
b3soipddel.c \
|
||||
|
b3soipddest.c \
|
||||
|
b3soipdgetic.c \
|
||||
|
b3soipdld.c \
|
||||
|
b3soipdmask.c \
|
||||
|
b3soipdmdel.c \
|
||||
|
b3soipdmpar.c \
|
||||
|
b3soipdnoi.c \
|
||||
|
b3soipdpar.c \
|
||||
|
b3soipdpzld.c \
|
||||
|
b3soipdset.c \
|
||||
|
b3soipdtemp.c \
|
||||
|
b3soipdtrunc.c \
|
||||
|
b3soipddef.h \
|
||||
|
b3soipdext.h \
|
||||
|
b3soipdinit.c \
|
||||
|
b3soipdinit.h \
|
||||
|
b3soipditf.h |
||||
|
|
||||
|
|
||||
|
|
||||
|
INCLUDES = -I$(top_srcdir)/src/include |
||||
|
|
||||
|
MAINTAINERCLEANFILES = Makefile.in |
||||
@ -0,0 +1,730 @@ |
|||||
|
/********** |
||||
|
Copyright 1990 Regents of the University of California. All rights reserved. |
||||
|
Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang |
||||
|
File: b3soipd.c 98/5/01 |
||||
|
Modified by Pin Su and Jan Feng 99/2/15 |
||||
|
Modified by Pin Su 99/4/30 |
||||
|
Modified by Wei Jin 99/9/27 |
||||
|
Modified by Pin Su 00/3/1 |
||||
|
**********/ |
||||
|
|
||||
|
|
||||
|
#include "ngspice.h" |
||||
|
#include <stdio.h> |
||||
|
#include "devdefs.h" |
||||
|
#include "b3soipddef.h" |
||||
|
#include "suffix.h" |
||||
|
|
||||
|
IFparm B3SOIPDpTable[] = { /* parameters */ |
||||
|
IOP ("l", B3SOIPD_L, IF_REAL, "Length"), |
||||
|
IOP ("w", B3SOIPD_W, IF_REAL, "Width"), |
||||
|
IOP ("ad", B3SOIPD_AD, IF_REAL, "Drain area"), |
||||
|
IOP ("as", B3SOIPD_AS, IF_REAL, "Source area"), |
||||
|
IOP ("pd", B3SOIPD_PD, IF_REAL, "Drain perimeter"), |
||||
|
IOP ("ps", B3SOIPD_PS, IF_REAL, "Source perimeter"), |
||||
|
IOP ("nrd", B3SOIPD_NRD, IF_REAL, "Number of squares in drain"), |
||||
|
IOP ("nrs", B3SOIPD_NRS, IF_REAL, "Number of squares in source"), |
||||
|
IOP ("off", B3SOIPD_OFF, IF_FLAG, "Device is initially off"), |
||||
|
IP ("ic", B3SOIPD_IC, IF_REALVEC, "Vector of DS,GS,BS initial voltages"), |
||||
|
OP ("gmbs", B3SOIPD_GMBS, IF_REAL, "Gmb"), |
||||
|
OP ("gm", B3SOIPD_GM, IF_REAL, "Gm"), |
||||
|
OP ("gm/ids", B3SOIPD_GMID, IF_REAL, "Gm/Ids"), |
||||
|
OP ("gds", B3SOIPD_GDS, IF_REAL, "Gds"), |
||||
|
OP ("vdsat", B3SOIPD_VDSAT, IF_REAL, "Vdsat"), |
||||
|
OP ("vth", B3SOIPD_VON, IF_REAL, "Vth"), |
||||
|
OP ("ids", B3SOIPD_CD, IF_REAL, "Ids"), |
||||
|
OP ("vbs", B3SOIPD_VBS, IF_REAL, "Vbs"), |
||||
|
OP ("vgs", B3SOIPD_VGS, IF_REAL, "Vgs"), |
||||
|
OP ("vds", B3SOIPD_VDS, IF_REAL, "Vds"), |
||||
|
OP ("ves", B3SOIPD_VES, IF_REAL, "Ves"), |
||||
|
IOP ("bjtoff", B3SOIPD_BJTOFF, IF_INTEGER, "BJT on/off flag"), |
||||
|
IOP ("debug", B3SOIPD_DEBUG, IF_INTEGER, "BJT on/off flag"), |
||||
|
IOP ("rth0", B3SOIPD_RTH0, IF_REAL, "Instance Thermal Resistance"), |
||||
|
IOP ("cth0", B3SOIPD_CTH0, IF_REAL, "Instance Thermal Capacitance"), |
||||
|
IOP ("nrb", B3SOIPD_NRB, IF_REAL, "Number of squares in body"), |
||||
|
|
||||
|
|
||||
|
/* v2.0 release */ |
||||
|
IOP ("nbc", B3SOIPD_NBC, IF_REAL, "Number of body contact isolation edge"), |
||||
|
IOP ("nseg", B3SOIPD_NSEG, IF_REAL, |
||||
|
"Number segments for width partitioning"), |
||||
|
IOP ("pdbcp", B3SOIPD_PDBCP, IF_REAL, |
||||
|
"Perimeter length for bc parasitics at drain side"), |
||||
|
IOP ("psbcp", B3SOIPD_PSBCP, IF_REAL, |
||||
|
"Perimeter length for bc parasitics at source side"), |
||||
|
IOP ("agbcp", B3SOIPD_AGBCP, IF_REAL, |
||||
|
"Gate to body overlap area for bc parasitics"), |
||||
|
IOP ("aebcp", B3SOIPD_AEBCP, IF_REAL, |
||||
|
"Substrate to body overlap area for bc prasitics"), |
||||
|
IOP ("vbsusr", B3SOIPD_VBSUSR, IF_REAL, "Vbs specified by user"), |
||||
|
IOP ("tnodeout", B3SOIPD_TNODEOUT, IF_FLAG, |
||||
|
"Flag indicating external temp node") |
||||
|
}; |
||||
|
|
||||
|
IFparm B3SOIPDmPTable[] = { /* model parameters */ |
||||
|
IOP ("capmod", B3SOIPD_MOD_CAPMOD, IF_INTEGER, |
||||
|
"Capacitance model selector"), |
||||
|
IOP ("mobmod", B3SOIPD_MOD_MOBMOD, IF_INTEGER, "Mobility model selector"), |
||||
|
IOP ("noimod", B3SOIPD_MOD_NOIMOD, IF_INTEGER, "Noise model selector"), |
||||
|
IOP ("paramchk", B3SOIPD_MOD_PARAMCHK, IF_INTEGER, |
||||
|
"Model parameter checking selector"), |
||||
|
IOP ("binunit", B3SOIPD_MOD_BINUNIT, IF_INTEGER, "Bin unit selector"), |
||||
|
IOP ("version", B3SOIPD_MOD_VERSION, IF_REAL, |
||||
|
" parameter for model version"), |
||||
|
IOP ("tox", B3SOIPD_MOD_TOX, IF_REAL, "Gate oxide thickness in meters"), |
||||
|
|
||||
|
IOP ("cdsc", B3SOIPD_MOD_CDSC, IF_REAL, |
||||
|
"Drain/Source and channel coupling capacitance"), |
||||
|
IOP ("cdscb", B3SOIPD_MOD_CDSCB, IF_REAL, "Body-bias dependence of cdsc"), |
||||
|
IOP ("cdscd", B3SOIPD_MOD_CDSCD, IF_REAL, "Drain-bias dependence of cdsc"), |
||||
|
IOP ("cit", B3SOIPD_MOD_CIT, IF_REAL, "Interface state capacitance"), |
||||
|
IOP ("nfactor", B3SOIPD_MOD_NFACTOR, IF_REAL, |
||||
|
"Subthreshold swing Coefficient"), |
||||
|
IOP ("vsat", B3SOIPD_MOD_VSAT, IF_REAL, "Saturation velocity at tnom"), |
||||
|
IOP ("at", B3SOIPD_MOD_AT, IF_REAL, "Temperature coefficient of vsat"), |
||||
|
IOP ("a0", B3SOIPD_MOD_A0, IF_REAL, |
||||
|
"Non-uniform depletion width effect coefficient."), |
||||
|
IOP ("ags", B3SOIPD_MOD_AGS, IF_REAL, "Gate bias coefficient of Abulk."), |
||||
|
IOP ("a1", B3SOIPD_MOD_A1, IF_REAL, "Non-saturation effect coefficient"), |
||||
|
IOP ("a2", B3SOIPD_MOD_A2, IF_REAL, "Non-saturation effect coefficient"), |
||||
|
IOP ("keta", B3SOIPD_MOD_KETA, IF_REAL, |
||||
|
"Body-bias coefficient of non-uniform depletion width effect."), |
||||
|
IOP ("nsub", B3SOIPD_MOD_NSUB, IF_REAL, |
||||
|
"Substrate doping concentration with polarity"), |
||||
|
IOP ("nch", B3SOIPD_MOD_NPEAK, IF_REAL, "Channel doping concentration"), |
||||
|
IOP ("ngate", B3SOIPD_MOD_NGATE, IF_REAL, "Poly-gate doping concentration"), |
||||
|
IOP ("gamma1", B3SOIPD_MOD_GAMMA1, IF_REAL, "Vth body coefficient"), |
||||
|
IOP ("gamma2", B3SOIPD_MOD_GAMMA2, IF_REAL, "Vth body coefficient"), |
||||
|
IOP ("vbx", B3SOIPD_MOD_VBX, IF_REAL, "Vth transition body Voltage"), |
||||
|
IOP ("vbm", B3SOIPD_MOD_VBM, IF_REAL, "Maximum body voltage"), |
||||
|
|
||||
|
IOP ("xt", B3SOIPD_MOD_XT, IF_REAL, "Doping depth"), |
||||
|
IOP ("k1", B3SOIPD_MOD_K1, IF_REAL, "Bulk effect coefficient 1"), |
||||
|
IOP ("kt1", B3SOIPD_MOD_KT1, IF_REAL, "Temperature coefficient of Vth"), |
||||
|
IOP ("kt1l", B3SOIPD_MOD_KT1L, IF_REAL, "Temperature coefficient of Vth"), |
||||
|
IOP ("kt2", B3SOIPD_MOD_KT2, IF_REAL, "Body-coefficient of kt1"), |
||||
|
IOP ("k2", B3SOIPD_MOD_K2, IF_REAL, "Bulk effect coefficient 2"), |
||||
|
IOP ("k3", B3SOIPD_MOD_K3, IF_REAL, "Narrow width effect coefficient"), |
||||
|
IOP ("k3b", B3SOIPD_MOD_K3B, IF_REAL, "Body effect coefficient of k3"), |
||||
|
IOP ("w0", B3SOIPD_MOD_W0, IF_REAL, "Narrow width effect parameter"), |
||||
|
IOP ("nlx", B3SOIPD_MOD_NLX, IF_REAL, "Lateral non-uniform doping effect"), |
||||
|
IOP ("dvt0", B3SOIPD_MOD_DVT0, IF_REAL, "Short channel effect coeff. 0"), |
||||
|
IOP ("dvt1", B3SOIPD_MOD_DVT1, IF_REAL, "Short channel effect coeff. 1"), |
||||
|
IOP ("dvt2", B3SOIPD_MOD_DVT2, IF_REAL, "Short channel effect coeff. 2"), |
||||
|
IOP ("dvt0w", B3SOIPD_MOD_DVT0W, IF_REAL, "Narrow Width coeff. 0"), |
||||
|
IOP ("dvt1w", B3SOIPD_MOD_DVT1W, IF_REAL, "Narrow Width effect coeff. 1"), |
||||
|
IOP ("dvt2w", B3SOIPD_MOD_DVT2W, IF_REAL, "Narrow Width effect coeff. 2"), |
||||
|
IOP ("drout", B3SOIPD_MOD_DROUT, IF_REAL, |
||||
|
"DIBL coefficient of output resistance"), |
||||
|
IOP ("dsub", B3SOIPD_MOD_DSUB, IF_REAL, |
||||
|
"DIBL coefficient in the subthreshold region"), |
||||
|
IOP ("vth0", B3SOIPD_MOD_VTH0, IF_REAL, "Threshold voltage"), |
||||
|
IOP ("vtho", B3SOIPD_MOD_VTH0, IF_REAL, "Threshold voltage"), |
||||
|
IOP ("ua", B3SOIPD_MOD_UA, IF_REAL, "Linear gate dependence of mobility"), |
||||
|
IOP ("ua1", B3SOIPD_MOD_UA1, IF_REAL, "Temperature coefficient of ua"), |
||||
|
IOP ("ub", B3SOIPD_MOD_UB, IF_REAL, |
||||
|
"Quadratic gate dependence of mobility"), |
||||
|
IOP ("ub1", B3SOIPD_MOD_UB1, IF_REAL, "Temperature coefficient of ub"), |
||||
|
IOP ("uc", B3SOIPD_MOD_UC, IF_REAL, "Body-bias dependence of mobility"), |
||||
|
IOP ("uc1", B3SOIPD_MOD_UC1, IF_REAL, "Temperature coefficient of uc"), |
||||
|
IOP ("u0", B3SOIPD_MOD_U0, IF_REAL, "Low-field mobility at Tnom"), |
||||
|
IOP ("ute", B3SOIPD_MOD_UTE, IF_REAL, |
||||
|
"Temperature coefficient of mobility"), |
||||
|
IOP ("voff", B3SOIPD_MOD_VOFF, IF_REAL, "Threshold voltage offset"), |
||||
|
IOP ("tnom", B3SOIPD_MOD_TNOM, IF_REAL, |
||||
|
"Parameter measurement temperature"), |
||||
|
IOP ("cgso", B3SOIPD_MOD_CGSO, IF_REAL, |
||||
|
"Gate-source overlap capacitance per width"), |
||||
|
IOP ("cgdo", B3SOIPD_MOD_CGDO, IF_REAL, |
||||
|
"Gate-drain overlap capacitance per width"), |
||||
|
IOP ("xpart", B3SOIPD_MOD_XPART, IF_REAL, "Channel charge partitioning"), |
||||
|
IOP ("delta", B3SOIPD_MOD_DELTA, IF_REAL, "Effective Vds parameter"), |
||||
|
IOP ("rsh", B3SOIPD_MOD_RSH, IF_REAL, "Source-drain sheet resistance"), |
||||
|
IOP ("rdsw", B3SOIPD_MOD_RDSW, IF_REAL, |
||||
|
"Source-drain resistance per width"), |
||||
|
|
||||
|
IOP ("prwg", B3SOIPD_MOD_PRWG, IF_REAL, |
||||
|
"Gate-bias effect on parasitic resistance "), |
||||
|
IOP ("prwb", B3SOIPD_MOD_PRWB, IF_REAL, |
||||
|
"Body-effect on parasitic resistance "), |
||||
|
|
||||
|
IOP ("prt", B3SOIPD_MOD_PRT, IF_REAL, |
||||
|
"Temperature coefficient of parasitic resistance "), |
||||
|
IOP ("eta0", B3SOIPD_MOD_ETA0, IF_REAL, |
||||
|
"Subthreshold region DIBL coefficient"), |
||||
|
IOP ("etab", B3SOIPD_MOD_ETAB, IF_REAL, |
||||
|
"Subthreshold region DIBL coefficient"), |
||||
|
IOP ("pclm", B3SOIPD_MOD_PCLM, IF_REAL, |
||||
|
"Channel length modulation Coefficient"), |
||||
|
IOP ("pdiblc1", B3SOIPD_MOD_PDIBL1, IF_REAL, |
||||
|
"Drain-induced barrier lowering coefficient"), |
||||
|
IOP ("pdiblc2", B3SOIPD_MOD_PDIBL2, IF_REAL, |
||||
|
"Drain-induced barrier lowering coefficient"), |
||||
|
IOP ("pdiblcb", B3SOIPD_MOD_PDIBLB, IF_REAL, |
||||
|
"Body-effect on drain-induced barrier lowering"), |
||||
|
|
||||
|
IOP ("pvag", B3SOIPD_MOD_PVAG, IF_REAL, |
||||
|
"Gate dependence of output resistance parameter"), |
||||
|
|
||||
|
IOP ("shmod", B3SOIPD_MOD_SHMOD, IF_INTEGER, "Self heating mode selector"), |
||||
|
IOP ("ddmod", B3SOIPD_MOD_DDMOD, IF_INTEGER, |
||||
|
"Dynamic depletion mode selector"), |
||||
|
IOP ("tbox", B3SOIPD_MOD_TBOX, IF_REAL, |
||||
|
"Back gate oxide thickness in meters"), |
||||
|
IOP ("tsi", B3SOIPD_MOD_TSI, IF_REAL, |
||||
|
"Silicon-on-insulator thickness in meters"), |
||||
|
IOP ("xj", B3SOIPD_MOD_XJ, IF_REAL, "Junction Depth"), |
||||
|
IOP ("rth0", B3SOIPD_MOD_RTH0, IF_REAL, "Self-heating thermal resistance"), |
||||
|
IOP ("cth0", B3SOIPD_MOD_CTH0, IF_REAL, "Self-heating thermal capacitance"), |
||||
|
IOP ("ngidl", B3SOIPD_MOD_NGIDL, IF_REAL, "GIDL first parameter"), |
||||
|
IOP ("agidl", B3SOIPD_MOD_AGIDL, IF_REAL, "GIDL second parameter"), |
||||
|
IOP ("bgidl", B3SOIPD_MOD_BGIDL, IF_REAL, "GIDL third parameter"), |
||||
|
IOP ("ndiode", B3SOIPD_MOD_NDIODE, IF_REAL, "Diode non-ideality factor"), |
||||
|
IOP ("xbjt", B3SOIPD_MOD_XBJT, IF_REAL, |
||||
|
"Temperature coefficient for Isbjt"), |
||||
|
|
||||
|
IOP ("xdif", B3SOIPD_MOD_XDIF, IF_REAL, |
||||
|
"Temperature coefficient for Isdif"), |
||||
|
|
||||
|
IOP ("xrec", B3SOIPD_MOD_XREC, IF_REAL, |
||||
|
"Temperature coefficient for Isrec"), |
||||
|
IOP ("xtun", B3SOIPD_MOD_XTUN, IF_REAL, |
||||
|
"Temperature coefficient for Istun"), |
||||
|
|
||||
|
IOP ("pbswg", B3SOIPD_MOD_PBSWG, IF_REAL, |
||||
|
"Source/drain (gate side) sidewall junction capacitance built in potential"), |
||||
|
IOP ("mjswg", B3SOIPD_MOD_MJSWG, IF_REAL, |
||||
|
"Source/drain (gate side) sidewall junction capacitance grading coefficient"), |
||||
|
|
||||
|
IOP ("cjswg", B3SOIPD_MOD_CJSWG, IF_REAL, |
||||
|
"Source/drain (gate side) sidewall junction capacitance per unit width"), |
||||
|
IOP ("lint", B3SOIPD_MOD_LINT, IF_REAL, "Length reduction parameter"), |
||||
|
IOP ("ll", B3SOIPD_MOD_LL, IF_REAL, "Length reduction parameter"), |
||||
|
IOP ("lln", B3SOIPD_MOD_LLN, IF_REAL, "Length reduction parameter"), |
||||
|
IOP ("lw", B3SOIPD_MOD_LW, IF_REAL, "Length reduction parameter"), |
||||
|
IOP ("lwn", B3SOIPD_MOD_LWN, IF_REAL, "Length reduction parameter"), |
||||
|
IOP ("lwl", B3SOIPD_MOD_LWL, IF_REAL, "Length reduction parameter"), |
||||
|
|
||||
|
IOP ("wr", B3SOIPD_MOD_WR, IF_REAL, "Width dependence of rds"), |
||||
|
IOP ("wint", B3SOIPD_MOD_WINT, IF_REAL, "Width reduction parameter"), |
||||
|
IOP ("dwg", B3SOIPD_MOD_DWG, IF_REAL, "Width reduction parameter"), |
||||
|
IOP ("dwb", B3SOIPD_MOD_DWB, IF_REAL, "Width reduction parameter"), |
||||
|
|
||||
|
IOP ("wl", B3SOIPD_MOD_WL, IF_REAL, "Width reduction parameter"), |
||||
|
IOP ("wln", B3SOIPD_MOD_WLN, IF_REAL, "Width reduction parameter"), |
||||
|
IOP ("ww", B3SOIPD_MOD_WW, IF_REAL, "Width reduction parameter"), |
||||
|
IOP ("wwn", B3SOIPD_MOD_WWN, IF_REAL, "Width reduction parameter"), |
||||
|
IOP ("wwl", B3SOIPD_MOD_WWL, IF_REAL, "Width reduction parameter"), |
||||
|
|
||||
|
IOP ("b0", B3SOIPD_MOD_B0, IF_REAL, "Abulk narrow width parameter"), |
||||
|
IOP ("b1", B3SOIPD_MOD_B1, IF_REAL, "Abulk narrow width parameter"), |
||||
|
|
||||
|
IOP ("cgsl", B3SOIPD_MOD_CGSL, IF_REAL, "New C-V model parameter"), |
||||
|
IOP ("cgdl", B3SOIPD_MOD_CGDL, IF_REAL, "New C-V model parameter"), |
||||
|
IOP ("ckappa", B3SOIPD_MOD_CKAPPA, IF_REAL, "New C-V model parameter"), |
||||
|
IOP ("cf", B3SOIPD_MOD_CF, IF_REAL, "Fringe capacitance parameter"), |
||||
|
IOP ("clc", B3SOIPD_MOD_CLC, IF_REAL, "Vdsat parameter for C-V model"), |
||||
|
IOP ("cle", B3SOIPD_MOD_CLE, IF_REAL, "Vdsat parameter for C-V model"), |
||||
|
IOP ("dwc", B3SOIPD_MOD_DWC, IF_REAL, "Delta W for C-V model"), |
||||
|
IOP ("dlc", B3SOIPD_MOD_DLC, IF_REAL, "Delta L for C-V model"), |
||||
|
|
||||
|
IOP ("alpha0", B3SOIPD_MOD_ALPHA0, IF_REAL, |
||||
|
"substrate current model parameter"), |
||||
|
|
||||
|
IOP ("noia", B3SOIPD_MOD_NOIA, IF_REAL, "Flicker noise parameter"), |
||||
|
IOP ("noib", B3SOIPD_MOD_NOIB, IF_REAL, "Flicker noise parameter"), |
||||
|
IOP ("noic", B3SOIPD_MOD_NOIC, IF_REAL, "Flicker noise parameter"), |
||||
|
IOP ("em", B3SOIPD_MOD_EM, IF_REAL, "Flicker noise parameter"), |
||||
|
IOP ("ef", B3SOIPD_MOD_EF, IF_REAL, "Flicker noise frequency exponent"), |
||||
|
IOP ("af", B3SOIPD_MOD_AF, IF_REAL, "Flicker noise exponent"), |
||||
|
IOP ("kf", B3SOIPD_MOD_KF, IF_REAL, "Flicker noise coefficient"), |
||||
|
IOP ("noif", B3SOIPD_MOD_NOIF, IF_REAL, |
||||
|
"Floating body excess noise ideality factor"), |
||||
|
|
||||
|
|
||||
|
/* v2.0 release */ |
||||
|
IOP ("k1w1", B3SOIPD_MOD_K1W1, IF_REAL, |
||||
|
"First Body effect width dependent parameter"), |
||||
|
IOP ("k1w2", B3SOIPD_MOD_K1W2, IF_REAL, |
||||
|
"Second Boby effect width dependent parameter"), |
||||
|
IOP ("ketas", B3SOIPD_MOD_KETAS, IF_REAL, |
||||
|
"Surface potential adjustment for bulk charge effect"), |
||||
|
IOP ("dwbc", B3SOIPD_MOD_DWBC, IF_REAL, |
||||
|
"Width offset for body contact isolation edge"), |
||||
|
IOP ("beta0", B3SOIPD_MOD_BETA0, IF_REAL, |
||||
|
"First Vds dependent parameter of impact ionizition current"), |
||||
|
IOP ("beta1", B3SOIPD_MOD_BETA1, IF_REAL, |
||||
|
"Second Vds dependent parameter of impact ionizition current"), |
||||
|
IOP ("beta2", B3SOIPD_MOD_BETA2, IF_REAL, |
||||
|
"Third Vds dependent parameter of impact ionizition current"), |
||||
|
IOP ("vdsatii0", B3SOIPD_MOD_VDSATII0, IF_REAL, |
||||
|
"Nominal drain saturation voltage at threshold for impact ionizition current"), |
||||
|
IOP ("tii", B3SOIPD_MOD_TII, IF_REAL, |
||||
|
"Temperature dependent parameter for impact ionizition"), |
||||
|
IOP ("lii", B3SOIPD_MOD_LII, IF_REAL, |
||||
|
"Channel length dependent parameter at threshold for impact ionizition current"), |
||||
|
IOP ("sii0", B3SOIPD_MOD_SII0, IF_REAL, |
||||
|
"First Vgs dependent parameter for impact ionizition current"), |
||||
|
IOP ("sii1", B3SOIPD_MOD_SII1, IF_REAL, |
||||
|
"Second Vgs dependent parameter for impact ionizition current"), |
||||
|
IOP ("sii2", B3SOIPD_MOD_SII2, IF_REAL, |
||||
|
"Third Vgs dependent parameter for impact ionizition current"), |
||||
|
IOP ("siid", B3SOIPD_MOD_SIID, IF_REAL, |
||||
|
"Vds dependent parameter of drain saturation voltage for impact ionizition current"), |
||||
|
IOP ("fbjtii", B3SOIPD_MOD_FBJTII, IF_REAL, |
||||
|
"Fraction of bipolar current affecting the impact ionization"), |
||||
|
IOP ("esatii", B3SOIPD_MOD_ESATII, IF_REAL, |
||||
|
"Saturation electric field for impact ionization"), |
||||
|
IOP ("ntun", B3SOIPD_MOD_NTUN, IF_REAL, |
||||
|
"Reverse tunneling non-ideality factor"), |
||||
|
IOP ("nrecf0", B3SOIPD_MOD_NRECF0, IF_REAL, |
||||
|
"Recombination non-ideality factor at forward bias"), |
||||
|
IOP ("nrecr0", B3SOIPD_MOD_NRECR0, IF_REAL, |
||||
|
"Recombination non-ideality factor at reversed bias"), |
||||
|
IOP ("isbjt", B3SOIPD_MOD_ISBJT, IF_REAL, |
||||
|
"BJT injection saturation current"), |
||||
|
IOP ("isdif", B3SOIPD_MOD_ISDIF, IF_REAL, |
||||
|
"Body to source/drain injection saturation current"), |
||||
|
IOP ("isrec", B3SOIPD_MOD_ISREC, IF_REAL, |
||||
|
"Recombination in depletion saturation current"), |
||||
|
IOP ("istun", B3SOIPD_MOD_ISTUN, IF_REAL, |
||||
|
"Reverse tunneling saturation current"), |
||||
|
IOP ("ln", B3SOIPD_MOD_LN, IF_REAL, "Electron/hole diffusion length"), |
||||
|
IOP ("vrec0", B3SOIPD_MOD_VREC0, IF_REAL, |
||||
|
"Voltage dependent parameter for recombination current"), |
||||
|
IOP ("vtun0", B3SOIPD_MOD_VTUN0, IF_REAL, |
||||
|
"Voltage dependent parameter for tunneling current"), |
||||
|
IOP ("nbjt", B3SOIPD_MOD_NBJT, IF_REAL, |
||||
|
"Power coefficient of channel length dependency for bipolar current"), |
||||
|
IOP ("lbjt0", B3SOIPD_MOD_LBJT0, IF_REAL, |
||||
|
"Refferenc channel length for bipolar cuurent"), |
||||
|
IOP ("ldif0", B3SOIPD_MOD_LDIF0, IF_REAL, |
||||
|
"Channel-length dependency coefficient of diffusion cap"), |
||||
|
IOP ("vabjt", B3SOIPD_MOD_VABJT, IF_REAL, |
||||
|
"Early voltage for bipolar current"), |
||||
|
IOP ("aely", B3SOIPD_MOD_AELY, IF_REAL, |
||||
|
"Channel length dependency of early voltage for bipolar cuurent"), |
||||
|
IOP ("ahli", B3SOIPD_MOD_AHLI, IF_REAL, |
||||
|
"High level injection parameter for bipolar current"), |
||||
|
IOP ("rbody", B3SOIPD_MOD_RBODY, IF_REAL, |
||||
|
"Intrinsic body contact sheet resistance"), |
||||
|
IOP ("rbsh", B3SOIPD_MOD_RBSH, IF_REAL, |
||||
|
"Extrinsic body contact sheet resistance"), |
||||
|
IOP ("cgeo", B3SOIPD_MOD_CGEO, IF_REAL, |
||||
|
"Gate substrate overlap capacitance per unit channel length"), |
||||
|
IOP ("tt", B3SOIPD_MOD_TT, IF_REAL, |
||||
|
"Diffusion capacitance transit time coefficient"), |
||||
|
IOP ("ndif", B3SOIPD_MOD_NDIF, IF_REAL, |
||||
|
"Power coefficient of channel length dependency for diffusion capacitance"), |
||||
|
IOP ("vsdfb", B3SOIPD_MOD_VSDFB, IF_REAL, |
||||
|
"Source/drain bottom diffusion capacitance flatband voltage"), |
||||
|
IOP ("vsdth", B3SOIPD_MOD_VSDTH, IF_REAL, |
||||
|
"Source/drain bottom diffusion capacitance threshold voltage"), |
||||
|
IOP ("csdmin", B3SOIPD_MOD_CSDMIN, IF_REAL, |
||||
|
"Source/drain bottom diffusion minimum capacitance"), |
||||
|
IOP ("asd", B3SOIPD_MOD_ASD, IF_REAL, |
||||
|
"Source/drain bottom diffusion smoothing parameter"), |
||||
|
IOP ("csdesw", B3SOIPD_MOD_CSDESW, IF_REAL, |
||||
|
"Source/drain sidewall fringing capacitance per unit length"), |
||||
|
IOP ("ntrecf", B3SOIPD_MOD_NTRECF, IF_REAL, |
||||
|
"Temperature coefficient for Nrecf"), |
||||
|
IOP ("ntrecr", B3SOIPD_MOD_NTRECR, IF_REAL, |
||||
|
"Temperature coefficient for Nrecr"), |
||||
|
IOP ("dlcb", B3SOIPD_MOD_DLCB, IF_REAL, |
||||
|
"Length offset fitting parameter for body charge"), |
||||
|
IOP ("fbody", B3SOIPD_MOD_FBODY, IF_REAL, "Scaling factor for body charge"), |
||||
|
IOP ("tcjswg", B3SOIPD_MOD_TCJSWG, IF_REAL, |
||||
|
"Temperature coefficient of Cjswg"), |
||||
|
IOP ("tpbswg", B3SOIPD_MOD_TPBSWG, IF_REAL, |
||||
|
"Temperature coefficient of Pbswg"), |
||||
|
IOP ("acde", B3SOIPD_MOD_ACDE, IF_REAL, |
||||
|
"Exponential coefficient for charge thickness in capMod=3 for accumulation and depletion regions"), |
||||
|
IOP ("moin", B3SOIPD_MOD_MOIN, IF_REAL, |
||||
|
"Coefficient for the gate-bias dependent surface potential"), |
||||
|
IOP ("delvt", B3SOIPD_MOD_DELVT, IF_REAL, |
||||
|
"Threshold voltage adjust for CV"), |
||||
|
IOP ("kb1", B3SOIPD_MOD_KB1, IF_REAL, |
||||
|
"Coefficient of Vbs0 dependency on Ves"), |
||||
|
IOP ("dlbg", B3SOIPD_MOD_DLBG, IF_REAL, |
||||
|
"Length offset fitting parameter for backgate charge"), |
||||
|
|
||||
|
|
||||
|
/* v2.2 release */ |
||||
|
IOP ("igmod", B3SOIPD_MOD_IGMOD, IF_INTEGER, "gate current model selector"), |
||||
|
IOP ("toxqm", B3SOIPD_MOD_TOXQM, IF_REAL, |
||||
|
"effective oxide thickness considering quantum effect"), |
||||
|
IOP ("wth0", B3SOIPD_MOD_WTH0, IF_REAL, |
||||
|
"Minimum width for thermal resistance calculation"), |
||||
|
IOP ("rhalo", B3SOIPD_MOD_RHALO, IF_REAL, "body halo sheet resistance"), |
||||
|
IOP ("ntox", B3SOIPD_MOD_NTOX, IF_REAL, "power term of gate current"), |
||||
|
IOP ("toxref", B3SOIPD_MOD_TOXREF, IF_REAL, "target oxide thickness"), |
||||
|
IOP ("ebg", B3SOIPD_MOD_EBG, IF_REAL, |
||||
|
"effective bandgap in gate current calcula."), |
||||
|
IOP ("nevb", B3SOIPD_MOD_NEVB, IF_REAL, |
||||
|
"valence-band electron non-ideality factor"), |
||||
|
IOP ("alphagb1", B3SOIPD_MOD_ALPHAGB1, IF_REAL, |
||||
|
"First Vox dependent parameter for gate curent in inversion"), |
||||
|
IOP ("betagb1", B3SOIPD_MOD_BETAGB1, IF_REAL, |
||||
|
"Second Vox dependent parameter for gate currnt in inversion"), |
||||
|
IOP ("vgb1", B3SOIPD_MOD_VGB1, IF_REAL, |
||||
|
"Third Vox dependent parameter for gate current in inversion"), |
||||
|
IOP ("necb", B3SOIPD_MOD_NECB, IF_REAL, |
||||
|
"conduction-band electron non-ideality factor"), |
||||
|
IOP ("alphagb2", B3SOIPD_MOD_ALPHAGB2, IF_REAL, |
||||
|
"First Vox dependent parameter for gate current in accumulation"), |
||||
|
IOP ("betagb2", B3SOIPD_MOD_BETAGB2, IF_REAL, |
||||
|
"Second Vox dependent parameter for gate current in accumulation"), |
||||
|
IOP ("vgb2", B3SOIPD_MOD_VGB2, IF_REAL, |
||||
|
"Third Vox dependent parameter for gate current in accumulation"), |
||||
|
IOP ("voxh", B3SOIPD_MOD_VOXH, IF_REAL, |
||||
|
"the limit of Vox in gate current calculation"), |
||||
|
IOP ("deltavox", B3SOIPD_MOD_DELTAVOX, IF_REAL, |
||||
|
"the smoothing parameter in the Vox smoothing function"), |
||||
|
|
||||
|
|
||||
|
/* Added for binning - START */ |
||||
|
/* Length Dependence */ |
||||
|
IOP ("lnch", B3SOIPD_MOD_LNPEAK, IF_REAL, "Length dependence of nch"), |
||||
|
IOP ("lnsub", B3SOIPD_MOD_LNSUB, IF_REAL, "Length dependence of nsub"), |
||||
|
IOP ("lngate", B3SOIPD_MOD_LNGATE, IF_REAL, "Length dependence of ngate"), |
||||
|
IOP ("lvth0", B3SOIPD_MOD_LVTH0, IF_REAL, "Length dependence of vto"), |
||||
|
IOP ("lk1", B3SOIPD_MOD_LK1, IF_REAL, "Length dependence of k1"), |
||||
|
IOP ("lk1w1", B3SOIPD_MOD_LK1W1, IF_REAL, "Length dependence of k1w1"), |
||||
|
IOP ("lk1w2", B3SOIPD_MOD_LK1W2, IF_REAL, "Length dependence of k1w2"), |
||||
|
IOP ("lk2", B3SOIPD_MOD_LK2, IF_REAL, "Length dependence of k2"), |
||||
|
IOP ("lk3", B3SOIPD_MOD_LK3, IF_REAL, "Length dependence of k3"), |
||||
|
IOP ("lk3b", B3SOIPD_MOD_LK3B, IF_REAL, "Length dependence of k3b"), |
||||
|
IOP ("lkb1", B3SOIPD_MOD_LKB1, IF_REAL, "Length dependence of kb1"), |
||||
|
IOP ("lw0", B3SOIPD_MOD_LW0, IF_REAL, "Length dependence of w0"), |
||||
|
IOP ("lnlx", B3SOIPD_MOD_LNLX, IF_REAL, "Length dependence of nlx"), |
||||
|
IOP ("ldvt0", B3SOIPD_MOD_LDVT0, IF_REAL, "Length dependence of dvt0"), |
||||
|
IOP ("ldvt1", B3SOIPD_MOD_LDVT1, IF_REAL, "Length dependence of dvt1"), |
||||
|
IOP ("ldvt2", B3SOIPD_MOD_LDVT2, IF_REAL, "Length dependence of dvt2"), |
||||
|
IOP ("ldvt0w", B3SOIPD_MOD_LDVT0W, IF_REAL, "Length dependence of dvt0w"), |
||||
|
IOP ("ldvt1w", B3SOIPD_MOD_LDVT1W, IF_REAL, "Length dependence of dvt1w"), |
||||
|
IOP ("ldvt2w", B3SOIPD_MOD_LDVT2W, IF_REAL, "Length dependence of dvt2w"), |
||||
|
IOP ("lu0", B3SOIPD_MOD_LU0, IF_REAL, "Length dependence of u0"), |
||||
|
IOP ("lua", B3SOIPD_MOD_LUA, IF_REAL, "Length dependence of ua"), |
||||
|
IOP ("lub", B3SOIPD_MOD_LUB, IF_REAL, "Length dependence of ub"), |
||||
|
IOP ("luc", B3SOIPD_MOD_LUC, IF_REAL, "Length dependence of uc"), |
||||
|
IOP ("lvsat", B3SOIPD_MOD_LVSAT, IF_REAL, "Length dependence of vsat"), |
||||
|
IOP ("la0", B3SOIPD_MOD_LA0, IF_REAL, "Length dependence of a0"), |
||||
|
IOP ("lags", B3SOIPD_MOD_LAGS, IF_REAL, "Length dependence of ags"), |
||||
|
IOP ("lb0", B3SOIPD_MOD_LB0, IF_REAL, "Length dependence of b0"), |
||||
|
IOP ("lb1", B3SOIPD_MOD_LB1, IF_REAL, "Length dependence of b1"), |
||||
|
IOP ("lketa", B3SOIPD_MOD_LKETA, IF_REAL, "Length dependence of keta"), |
||||
|
IOP ("lketas", B3SOIPD_MOD_LKETAS, IF_REAL, "Length dependence of ketas"), |
||||
|
IOP ("la1", B3SOIPD_MOD_LA1, IF_REAL, "Length dependence of a1"), |
||||
|
IOP ("la2", B3SOIPD_MOD_LA2, IF_REAL, "Length dependence of a2"), |
||||
|
IOP ("lrdsw", B3SOIPD_MOD_LRDSW, IF_REAL, "Length dependence of rdsw "), |
||||
|
IOP ("lprwb", B3SOIPD_MOD_LPRWB, IF_REAL, "Length dependence of prwb "), |
||||
|
IOP ("lprwg", B3SOIPD_MOD_LPRWG, IF_REAL, "Length dependence of prwg "), |
||||
|
IOP ("lwr", B3SOIPD_MOD_LWR, IF_REAL, "Length dependence of wr"), |
||||
|
IOP ("lnfactor", B3SOIPD_MOD_LNFACTOR, IF_REAL, |
||||
|
"Length dependence of nfactor"), |
||||
|
IOP ("ldwg", B3SOIPD_MOD_LDWG, IF_REAL, "Length dependence of dwg"), |
||||
|
IOP ("ldwb", B3SOIPD_MOD_LDWB, IF_REAL, "Length dependence of dwb"), |
||||
|
IOP ("lvoff", B3SOIPD_MOD_LVOFF, IF_REAL, "Length dependence of voff"), |
||||
|
IOP ("leta0", B3SOIPD_MOD_LETA0, IF_REAL, "Length dependence of eta0"), |
||||
|
IOP ("letab", B3SOIPD_MOD_LETAB, IF_REAL, "Length dependence of etab"), |
||||
|
IOP ("ldsub", B3SOIPD_MOD_LDSUB, IF_REAL, "Length dependence of dsub"), |
||||
|
IOP ("lcit", B3SOIPD_MOD_LCIT, IF_REAL, "Length dependence of cit"), |
||||
|
IOP ("lcdsc", B3SOIPD_MOD_LCDSC, IF_REAL, "Length dependence of cdsc"), |
||||
|
IOP ("lcdscb", B3SOIPD_MOD_LCDSCB, IF_REAL, "Length dependence of cdscb"), |
||||
|
IOP ("lcdscd", B3SOIPD_MOD_LCDSCD, IF_REAL, "Length dependence of cdscd"), |
||||
|
IOP ("lpclm", B3SOIPD_MOD_LPCLM, IF_REAL, "Length dependence of pclm"), |
||||
|
IOP ("lpdiblc1", B3SOIPD_MOD_LPDIBL1, IF_REAL, |
||||
|
"Length dependence of pdiblc1"), |
||||
|
IOP ("lpdiblc2", B3SOIPD_MOD_LPDIBL2, IF_REAL, |
||||
|
"Length dependence of pdiblc2"), |
||||
|
IOP ("lpdiblcb", B3SOIPD_MOD_LPDIBLB, IF_REAL, |
||||
|
"Length dependence of pdiblcb"), |
||||
|
IOP ("ldrout", B3SOIPD_MOD_LDROUT, IF_REAL, "Length dependence of drout"), |
||||
|
IOP ("lpvag", B3SOIPD_MOD_LPVAG, IF_REAL, "Length dependence of pvag"), |
||||
|
IOP ("ldelta", B3SOIPD_MOD_LDELTA, IF_REAL, "Length dependence of delta"), |
||||
|
IOP ("lalpha0", B3SOIPD_MOD_LALPHA0, IF_REAL, |
||||
|
"Length dependence of alpha0"), |
||||
|
IOP ("lfbjtii", B3SOIPD_MOD_LFBJTII, IF_REAL, |
||||
|
"Length dependence of fbjtii"), |
||||
|
IOP ("lbeta0", B3SOIPD_MOD_LBETA0, IF_REAL, "Length dependence of beta0"), |
||||
|
IOP ("lbeta1", B3SOIPD_MOD_LBETA1, IF_REAL, "Length dependence of beta1"), |
||||
|
IOP ("lbeta2", B3SOIPD_MOD_LBETA2, IF_REAL, "Length dependence of beta2"), |
||||
|
IOP ("lvdsatii0", B3SOIPD_MOD_LVDSATII0, IF_REAL, |
||||
|
"Length dependence of vdsatii0"), |
||||
|
IOP ("llii", B3SOIPD_MOD_LLII, IF_REAL, "Length dependence of lii"), |
||||
|
IOP ("lesatii", B3SOIPD_MOD_LESATII, IF_REAL, |
||||
|
"Length dependence of esatii"), |
||||
|
IOP ("lsii0", B3SOIPD_MOD_LSII0, IF_REAL, "Length dependence of sii0"), |
||||
|
IOP ("lsii1", B3SOIPD_MOD_LSII1, IF_REAL, "Length dependence of sii1"), |
||||
|
IOP ("lsii2", B3SOIPD_MOD_LSII2, IF_REAL, "Length dependence of sii2"), |
||||
|
IOP ("lsiid", B3SOIPD_MOD_LSIID, IF_REAL, "Length dependence of siid"), |
||||
|
IOP ("lagidl", B3SOIPD_MOD_LAGIDL, IF_REAL, "Length dependence of agidl"), |
||||
|
IOP ("lbgidl", B3SOIPD_MOD_LBGIDL, IF_REAL, "Length dependence of bgidl"), |
||||
|
IOP ("lngidl", B3SOIPD_MOD_LNGIDL, IF_REAL, "Length dependence of ngidl"), |
||||
|
IOP ("lntun", B3SOIPD_MOD_LNTUN, IF_REAL, "Length dependence of ntun"), |
||||
|
IOP ("lndiode", B3SOIPD_MOD_LNDIODE, IF_REAL, |
||||
|
"Length dependence of ndiode"), |
||||
|
IOP ("lnrecf0", B3SOIPD_MOD_LNRECF0, IF_REAL, |
||||
|
"Length dependence of nrecf0"), |
||||
|
IOP ("lnrecr0", B3SOIPD_MOD_LNRECR0, IF_REAL, |
||||
|
"Length dependence of nrecr0"), |
||||
|
IOP ("lisbjt", B3SOIPD_MOD_LISBJT, IF_REAL, "Length dependence of isbjt"), |
||||
|
IOP ("lisdif", B3SOIPD_MOD_LISDIF, IF_REAL, "Length dependence of isdif"), |
||||
|
IOP ("lisrec", B3SOIPD_MOD_LISREC, IF_REAL, "Length dependence of isrec"), |
||||
|
IOP ("listun", B3SOIPD_MOD_LISTUN, IF_REAL, "Length dependence of istun"), |
||||
|
IOP ("lvrec0", B3SOIPD_MOD_LVREC0, IF_REAL, "Length dependence of vrec0"), |
||||
|
IOP ("lvtun0", B3SOIPD_MOD_LVTUN0, IF_REAL, "Length dependence of vtun0"), |
||||
|
IOP ("lnbjt", B3SOIPD_MOD_LNBJT, IF_REAL, "Length dependence of nbjt"), |
||||
|
IOP ("llbjt0", B3SOIPD_MOD_LLBJT0, IF_REAL, "Length dependence of lbjt0"), |
||||
|
IOP ("lvabjt", B3SOIPD_MOD_LVABJT, IF_REAL, "Length dependence of vabjt"), |
||||
|
IOP ("laely", B3SOIPD_MOD_LAELY, IF_REAL, "Length dependence of aely"), |
||||
|
IOP ("lahli", B3SOIPD_MOD_LAHLI, IF_REAL, "Length dependence of ahli"), |
||||
|
IOP ("lvsdfb", B3SOIPD_MOD_LVSDFB, IF_REAL, "Length dependence of vsdfb"), |
||||
|
IOP ("lvsdth", B3SOIPD_MOD_LVSDTH, IF_REAL, "Length dependence of vsdth"), |
||||
|
IOP ("ldelvt", B3SOIPD_MOD_LDELVT, IF_REAL, "Length dependence of delvt"), |
||||
|
IOP ("lacde", B3SOIPD_MOD_LACDE, IF_REAL, "Length dependence of acde"), |
||||
|
IOP ("lmoin", B3SOIPD_MOD_LMOIN, IF_REAL, "Length dependence of amoin"), |
||||
|
/* Width Dependence */ |
||||
|
IOP ("wnch", B3SOIPD_MOD_WNPEAK, IF_REAL, "Width dependence of nch"), |
||||
|
IOP ("wnsub", B3SOIPD_MOD_WNSUB, IF_REAL, "Width dependence of nsub"), |
||||
|
IOP ("wngate", B3SOIPD_MOD_WNGATE, IF_REAL, "Width dependence of ngate"), |
||||
|
IOP ("wvth0", B3SOIPD_MOD_WVTH0, IF_REAL, "Width dependence of vto"), |
||||
|
IOP ("wk1", B3SOIPD_MOD_WK1, IF_REAL, "Width dependence of k1"), |
||||
|
IOP ("wk1w1", B3SOIPD_MOD_WK1W1, IF_REAL, "Width dependence of k1w1"), |
||||
|
IOP ("wk1w2", B3SOIPD_MOD_WK1W2, IF_REAL, "Width dependence of k1w2"), |
||||
|
IOP ("wk2", B3SOIPD_MOD_WK2, IF_REAL, "Width dependence of k2"), |
||||
|
IOP ("wk3", B3SOIPD_MOD_WK3, IF_REAL, "Width dependence of k3"), |
||||
|
IOP ("wk3b", B3SOIPD_MOD_WK3B, IF_REAL, "Width dependence of k3b"), |
||||
|
IOP ("wkb1", B3SOIPD_MOD_WKB1, IF_REAL, "Width dependence of kb1"), |
||||
|
IOP ("ww0", B3SOIPD_MOD_WW0, IF_REAL, "Width dependence of w0"), |
||||
|
IOP ("wnlx", B3SOIPD_MOD_WNLX, IF_REAL, "Width dependence of nlx"), |
||||
|
IOP ("wdvt0", B3SOIPD_MOD_WDVT0, IF_REAL, "Width dependence of dvt0"), |
||||
|
IOP ("wdvt1", B3SOIPD_MOD_WDVT1, IF_REAL, "Width dependence of dvt1"), |
||||
|
IOP ("wdvt2", B3SOIPD_MOD_WDVT2, IF_REAL, "Width dependence of dvt2"), |
||||
|
IOP ("wdvt0w", B3SOIPD_MOD_WDVT0W, IF_REAL, "Width dependence of dvt0w"), |
||||
|
IOP ("wdvt1w", B3SOIPD_MOD_WDVT1W, IF_REAL, "Width dependence of dvt1w"), |
||||
|
IOP ("wdvt2w", B3SOIPD_MOD_WDVT2W, IF_REAL, "Width dependence of dvt2w"), |
||||
|
IOP ("wu0", B3SOIPD_MOD_WU0, IF_REAL, "Width dependence of u0"), |
||||
|
IOP ("wua", B3SOIPD_MOD_WUA, IF_REAL, "Width dependence of ua"), |
||||
|
IOP ("wub", B3SOIPD_MOD_WUB, IF_REAL, "Width dependence of ub"), |
||||
|
IOP ("wuc", B3SOIPD_MOD_WUC, IF_REAL, "Width dependence of uc"), |
||||
|
IOP ("wvsat", B3SOIPD_MOD_WVSAT, IF_REAL, "Width dependence of vsat"), |
||||
|
IOP ("wa0", B3SOIPD_MOD_WA0, IF_REAL, "Width dependence of a0"), |
||||
|
IOP ("wags", B3SOIPD_MOD_WAGS, IF_REAL, "Width dependence of ags"), |
||||
|
IOP ("wb0", B3SOIPD_MOD_WB0, IF_REAL, "Width dependence of b0"), |
||||
|
IOP ("wb1", B3SOIPD_MOD_WB1, IF_REAL, "Width dependence of b1"), |
||||
|
IOP ("wketa", B3SOIPD_MOD_WKETA, IF_REAL, "Width dependence of keta"), |
||||
|
IOP ("wketas", B3SOIPD_MOD_WKETAS, IF_REAL, "Width dependence of ketas"), |
||||
|
IOP ("wa1", B3SOIPD_MOD_WA1, IF_REAL, "Width dependence of a1"), |
||||
|
IOP ("wa2", B3SOIPD_MOD_WA2, IF_REAL, "Width dependence of a2"), |
||||
|
IOP ("wrdsw", B3SOIPD_MOD_WRDSW, IF_REAL, "Width dependence of rdsw "), |
||||
|
IOP ("wprwb", B3SOIPD_MOD_WPRWB, IF_REAL, "Width dependence of prwb "), |
||||
|
IOP ("wprwg", B3SOIPD_MOD_WPRWG, IF_REAL, "Width dependence of prwg "), |
||||
|
IOP ("wwr", B3SOIPD_MOD_WWR, IF_REAL, "Width dependence of wr"), |
||||
|
IOP ("wnfactor", B3SOIPD_MOD_WNFACTOR, IF_REAL, |
||||
|
"Width dependence of nfactor"), |
||||
|
IOP ("wdwg", B3SOIPD_MOD_WDWG, IF_REAL, "Width dependence of dwg"), |
||||
|
IOP ("wdwb", B3SOIPD_MOD_WDWB, IF_REAL, "Width dependence of dwb"), |
||||
|
IOP ("wvoff", B3SOIPD_MOD_WVOFF, IF_REAL, "Width dependence of voff"), |
||||
|
IOP ("weta0", B3SOIPD_MOD_WETA0, IF_REAL, "Width dependence of eta0"), |
||||
|
IOP ("wetab", B3SOIPD_MOD_WETAB, IF_REAL, "Width dependence of etab"), |
||||
|
IOP ("wdsub", B3SOIPD_MOD_WDSUB, IF_REAL, "Width dependence of dsub"), |
||||
|
IOP ("wcit", B3SOIPD_MOD_WCIT, IF_REAL, "Width dependence of cit"), |
||||
|
IOP ("wcdsc", B3SOIPD_MOD_WCDSC, IF_REAL, "Width dependence of cdsc"), |
||||
|
IOP ("wcdscb", B3SOIPD_MOD_WCDSCB, IF_REAL, "Width dependence of cdscb"), |
||||
|
IOP ("wcdscd", B3SOIPD_MOD_WCDSCD, IF_REAL, "Width dependence of cdscd"), |
||||
|
IOP ("wpclm", B3SOIPD_MOD_WPCLM, IF_REAL, "Width dependence of pclm"), |
||||
|
IOP ("wpdiblc1", B3SOIPD_MOD_WPDIBL1, IF_REAL, |
||||
|
"Width dependence of pdiblc1"), |
||||
|
IOP ("wpdiblc2", B3SOIPD_MOD_WPDIBL2, IF_REAL, |
||||
|
"Width dependence of pdiblc2"), |
||||
|
IOP ("wpdiblcb", B3SOIPD_MOD_WPDIBLB, IF_REAL, |
||||
|
"Width dependence of pdiblcb"), |
||||
|
IOP ("wdrout", B3SOIPD_MOD_WDROUT, IF_REAL, "Width dependence of drout"), |
||||
|
IOP ("wpvag", B3SOIPD_MOD_WPVAG, IF_REAL, "Width dependence of pvag"), |
||||
|
IOP ("wdelta", B3SOIPD_MOD_WDELTA, IF_REAL, "Width dependence of delta"), |
||||
|
IOP ("walpha0", B3SOIPD_MOD_WALPHA0, IF_REAL, "Width dependence of alpha0"), |
||||
|
IOP ("wfbjtii", B3SOIPD_MOD_WFBJTII, IF_REAL, "Width dependence of fbjtii"), |
||||
|
IOP ("wbeta0", B3SOIPD_MOD_WBETA0, IF_REAL, "Width dependence of beta0"), |
||||
|
IOP ("wbeta1", B3SOIPD_MOD_WBETA1, IF_REAL, "Width dependence of beta1"), |
||||
|
IOP ("wbeta2", B3SOIPD_MOD_WBETA2, IF_REAL, "Width dependence of beta2"), |
||||
|
IOP ("wvdsatii0", B3SOIPD_MOD_WVDSATII0, IF_REAL, |
||||
|
"Width dependence of vdsatii0"), |
||||
|
IOP ("wlii", B3SOIPD_MOD_WLII, IF_REAL, "Width dependence of lii"), |
||||
|
IOP ("wesatii", B3SOIPD_MOD_WESATII, IF_REAL, "Width dependence of esatii"), |
||||
|
IOP ("wsii0", B3SOIPD_MOD_WSII0, IF_REAL, "Width dependence of sii0"), |
||||
|
IOP ("wsii1", B3SOIPD_MOD_WSII1, IF_REAL, "Width dependence of sii1"), |
||||
|
IOP ("wsii2", B3SOIPD_MOD_WSII2, IF_REAL, "Width dependence of sii2"), |
||||
|
IOP ("wsiid", B3SOIPD_MOD_WSIID, IF_REAL, "Width dependence of siid"), |
||||
|
IOP ("wagidl", B3SOIPD_MOD_WAGIDL, IF_REAL, "Width dependence of agidl"), |
||||
|
IOP ("wbgidl", B3SOIPD_MOD_WBGIDL, IF_REAL, "Width dependence of bgidl"), |
||||
|
IOP ("wngidl", B3SOIPD_MOD_WNGIDL, IF_REAL, "Width dependence of ngidl"), |
||||
|
IOP ("wntun", B3SOIPD_MOD_WNTUN, IF_REAL, "Width dependence of ntun"), |
||||
|
IOP ("wndiode", B3SOIPD_MOD_WNDIODE, IF_REAL, "Width dependence of ndiode"), |
||||
|
IOP ("wnrecf0", B3SOIPD_MOD_WNRECF0, IF_REAL, "Width dependence of nrecf0"), |
||||
|
IOP ("wnrecr0", B3SOIPD_MOD_WNRECR0, IF_REAL, "Width dependence of nrecr0"), |
||||
|
IOP ("wisbjt", B3SOIPD_MOD_WISBJT, IF_REAL, "Width dependence of isbjt"), |
||||
|
IOP ("wisdif", B3SOIPD_MOD_WISDIF, IF_REAL, "Width dependence of isdif"), |
||||
|
IOP ("wisrec", B3SOIPD_MOD_WISREC, IF_REAL, "Width dependence of isrec"), |
||||
|
IOP ("wistun", B3SOIPD_MOD_WISTUN, IF_REAL, "Width dependence of istun"), |
||||
|
IOP ("wvrec0", B3SOIPD_MOD_WVREC0, IF_REAL, "Width dependence of vrec0"), |
||||
|
IOP ("wvtun0", B3SOIPD_MOD_WVTUN0, IF_REAL, "Width dependence of vtun0"), |
||||
|
IOP ("wnbjt", B3SOIPD_MOD_WNBJT, IF_REAL, "Width dependence of nbjt"), |
||||
|
IOP ("wlbjt0", B3SOIPD_MOD_WLBJT0, IF_REAL, "Width dependence of lbjt0"), |
||||
|
IOP ("wvabjt", B3SOIPD_MOD_WVABJT, IF_REAL, "Width dependence of vabjt"), |
||||
|
IOP ("waely", B3SOIPD_MOD_WAELY, IF_REAL, "Width dependence of aely"), |
||||
|
IOP ("wahli", B3SOIPD_MOD_WAHLI, IF_REAL, "Width dependence of ahli"), |
||||
|
IOP ("wvsdfb", B3SOIPD_MOD_WVSDFB, IF_REAL, "Width dependence of vsdfb"), |
||||
|
IOP ("wvsdth", B3SOIPD_MOD_WVSDTH, IF_REAL, "Width dependence of vsdth"), |
||||
|
IOP ("wdelvt", B3SOIPD_MOD_WDELVT, IF_REAL, "Width dependence of delvt"), |
||||
|
IOP ("wacde", B3SOIPD_MOD_WACDE, IF_REAL, "Width dependence of acde"), |
||||
|
IOP ("wmoin", B3SOIPD_MOD_WMOIN, IF_REAL, "Width dependence of amoin"), |
||||
|
/* Cross-term Dependence */ |
||||
|
IOP ("pnch", B3SOIPD_MOD_PNPEAK, IF_REAL, "Cross-term dependence of nch"), |
||||
|
IOP ("pnsub", B3SOIPD_MOD_PNSUB, IF_REAL, "Cross-term dependence of nsub"), |
||||
|
IOP ("pngate", B3SOIPD_MOD_PNGATE, IF_REAL, |
||||
|
"Cross-term dependence of ngate"), |
||||
|
IOP ("pvth0", B3SOIPD_MOD_PVTH0, IF_REAL, "Cross-term dependence of vto"), |
||||
|
IOP ("pk1", B3SOIPD_MOD_PK1, IF_REAL, "Cross-term dependence of k1"), |
||||
|
IOP ("pk1w1", B3SOIPD_MOD_PK1W1, IF_REAL, "Cross-term dependence of k1w1"), |
||||
|
IOP ("pk1w2", B3SOIPD_MOD_PK1W2, IF_REAL, "Cross-term dependence of k1w2"), |
||||
|
IOP ("pk2", B3SOIPD_MOD_PK2, IF_REAL, "Cross-term dependence of k2"), |
||||
|
IOP ("pk3", B3SOIPD_MOD_PK3, IF_REAL, "Cross-term dependence of k3"), |
||||
|
IOP ("pk3b", B3SOIPD_MOD_PK3B, IF_REAL, "Cross-term dependence of k3b"), |
||||
|
IOP ("pkb1", B3SOIPD_MOD_PKB1, IF_REAL, "Cross-term dependence of kb1"), |
||||
|
IOP ("pw0", B3SOIPD_MOD_PW0, IF_REAL, "Cross-term dependence of w0"), |
||||
|
IOP ("pnlx", B3SOIPD_MOD_PNLX, IF_REAL, "Cross-term dependence of nlx"), |
||||
|
IOP ("pdvt0", B3SOIPD_MOD_PDVT0, IF_REAL, "Cross-term dependence of dvt0"), |
||||
|
IOP ("pdvt1", B3SOIPD_MOD_PDVT1, IF_REAL, "Cross-term dependence of dvt1"), |
||||
|
IOP ("pdvt2", B3SOIPD_MOD_PDVT2, IF_REAL, "Cross-term dependence of dvt2"), |
||||
|
IOP ("pdvt0w", B3SOIPD_MOD_PDVT0W, IF_REAL, |
||||
|
"Cross-term dependence of dvt0w"), |
||||
|
IOP ("pdvt1w", B3SOIPD_MOD_PDVT1W, IF_REAL, |
||||
|
"Cross-term dependence of dvt1w"), |
||||
|
IOP ("pdvt2w", B3SOIPD_MOD_PDVT2W, IF_REAL, |
||||
|
"Cross-term dependence of dvt2w"), |
||||
|
IOP ("pu0", B3SOIPD_MOD_PU0, IF_REAL, "Cross-term dependence of u0"), |
||||
|
IOP ("pua", B3SOIPD_MOD_PUA, IF_REAL, "Cross-term dependence of ua"), |
||||
|
IOP ("pub", B3SOIPD_MOD_PUB, IF_REAL, "Cross-term dependence of ub"), |
||||
|
IOP ("puc", B3SOIPD_MOD_PUC, IF_REAL, "Cross-term dependence of uc"), |
||||
|
IOP ("pvsat", B3SOIPD_MOD_PVSAT, IF_REAL, "Cross-term dependence of vsat"), |
||||
|
IOP ("pa0", B3SOIPD_MOD_PA0, IF_REAL, "Cross-term dependence of a0"), |
||||
|
IOP ("pags", B3SOIPD_MOD_PAGS, IF_REAL, "Cross-term dependence of ags"), |
||||
|
IOP ("pb0", B3SOIPD_MOD_PB0, IF_REAL, "Cross-term dependence of b0"), |
||||
|
IOP ("pb1", B3SOIPD_MOD_PB1, IF_REAL, "Cross-term dependence of b1"), |
||||
|
IOP ("pketa", B3SOIPD_MOD_PKETA, IF_REAL, "Cross-term dependence of keta"), |
||||
|
IOP ("pketas", B3SOIPD_MOD_PKETAS, IF_REAL, |
||||
|
"Cross-term dependence of ketas"), |
||||
|
IOP ("pa1", B3SOIPD_MOD_PA1, IF_REAL, "Cross-term dependence of a1"), |
||||
|
IOP ("pa2", B3SOIPD_MOD_PA2, IF_REAL, "Cross-term dependence of a2"), |
||||
|
IOP ("prdsw", B3SOIPD_MOD_PRDSW, IF_REAL, "Cross-term dependence of rdsw "), |
||||
|
IOP ("pprwb", B3SOIPD_MOD_PPRWB, IF_REAL, "Cross-term dependence of prwb "), |
||||
|
IOP ("pprwg", B3SOIPD_MOD_PPRWG, IF_REAL, "Cross-term dependence of prwg "), |
||||
|
IOP ("pwr", B3SOIPD_MOD_PWR, IF_REAL, "Cross-term dependence of wr"), |
||||
|
IOP ("pnfactor", B3SOIPD_MOD_PNFACTOR, IF_REAL, |
||||
|
"Cross-term dependence of nfactor"), |
||||
|
IOP ("pdwg", B3SOIPD_MOD_PDWG, IF_REAL, "Cross-term dependence of dwg"), |
||||
|
IOP ("pdwb", B3SOIPD_MOD_PDWB, IF_REAL, "Cross-term dependence of dwb"), |
||||
|
IOP ("pvoff", B3SOIPD_MOD_PVOFF, IF_REAL, "Cross-term dependence of voff"), |
||||
|
IOP ("peta0", B3SOIPD_MOD_PETA0, IF_REAL, "Cross-term dependence of eta0"), |
||||
|
IOP ("petab", B3SOIPD_MOD_PETAB, IF_REAL, "Cross-term dependence of etab"), |
||||
|
IOP ("pdsub", B3SOIPD_MOD_PDSUB, IF_REAL, "Cross-term dependence of dsub"), |
||||
|
IOP ("pcit", B3SOIPD_MOD_PCIT, IF_REAL, "Cross-term dependence of cit"), |
||||
|
IOP ("pcdsc", B3SOIPD_MOD_PCDSC, IF_REAL, "Cross-term dependence of cdsc"), |
||||
|
IOP ("pcdscb", B3SOIPD_MOD_PCDSCB, IF_REAL, |
||||
|
"Cross-term dependence of cdscb"), |
||||
|
IOP ("pcdscd", B3SOIPD_MOD_PCDSCD, IF_REAL, |
||||
|
"Cross-term dependence of cdscd"), |
||||
|
IOP ("ppclm", B3SOIPD_MOD_PPCLM, IF_REAL, "Cross-term dependence of pclm"), |
||||
|
IOP ("ppdiblc1", B3SOIPD_MOD_PPDIBL1, IF_REAL, |
||||
|
"Cross-term dependence of pdiblc1"), |
||||
|
IOP ("ppdiblc2", B3SOIPD_MOD_PPDIBL2, IF_REAL, |
||||
|
"Cross-term dependence of pdiblc2"), |
||||
|
IOP ("ppdiblcb", B3SOIPD_MOD_PPDIBLB, IF_REAL, |
||||
|
"Cross-term dependence of pdiblcb"), |
||||
|
IOP ("pdrout", B3SOIPD_MOD_PDROUT, IF_REAL, |
||||
|
"Cross-term dependence of drout"), |
||||
|
IOP ("ppvag", B3SOIPD_MOD_PPVAG, IF_REAL, "Cross-term dependence of pvag"), |
||||
|
IOP ("pdelta", B3SOIPD_MOD_PDELTA, IF_REAL, |
||||
|
"Cross-term dependence of delta"), |
||||
|
IOP ("palpha0", B3SOIPD_MOD_PALPHA0, IF_REAL, |
||||
|
"Cross-term dependence of alpha0"), |
||||
|
IOP ("pfbjtii", B3SOIPD_MOD_PFBJTII, IF_REAL, |
||||
|
"Cross-term dependence of fbjtii"), |
||||
|
IOP ("pbeta0", B3SOIPD_MOD_PBETA0, IF_REAL, |
||||
|
"Cross-term dependence of beta0"), |
||||
|
IOP ("pbeta1", B3SOIPD_MOD_PBETA1, IF_REAL, |
||||
|
"Cross-term dependence of beta1"), |
||||
|
IOP ("pbeta2", B3SOIPD_MOD_PBETA2, IF_REAL, |
||||
|
"Cross-term dependence of beta2"), |
||||
|
IOP ("pvdsatii0", B3SOIPD_MOD_PVDSATII0, IF_REAL, |
||||
|
"Cross-term dependence of vdsatii0"), |
||||
|
IOP ("plii", B3SOIPD_MOD_PLII, IF_REAL, "Cross-term dependence of lii"), |
||||
|
IOP ("pesatii", B3SOIPD_MOD_PESATII, IF_REAL, |
||||
|
"Cross-term dependence of esatii"), |
||||
|
IOP ("psii0", B3SOIPD_MOD_PSII0, IF_REAL, "Cross-term dependence of sii0"), |
||||
|
IOP ("psii1", B3SOIPD_MOD_PSII1, IF_REAL, "Cross-term dependence of sii1"), |
||||
|
IOP ("psii2", B3SOIPD_MOD_PSII2, IF_REAL, "Cross-term dependence of sii2"), |
||||
|
IOP ("psiid", B3SOIPD_MOD_PSIID, IF_REAL, "Cross-term dependence of siid"), |
||||
|
IOP ("pagidl", B3SOIPD_MOD_PAGIDL, IF_REAL, |
||||
|
"Cross-term dependence of agidl"), |
||||
|
IOP ("pbgidl", B3SOIPD_MOD_PBGIDL, IF_REAL, |
||||
|
"Cross-term dependence of bgidl"), |
||||
|
IOP ("pngidl", B3SOIPD_MOD_PNGIDL, IF_REAL, |
||||
|
"Cross-term dependence of ngidl"), |
||||
|
IOP ("pntun", B3SOIPD_MOD_PNTUN, IF_REAL, "Cross-term dependence of ntun"), |
||||
|
IOP ("pndiode", B3SOIPD_MOD_PNDIODE, IF_REAL, |
||||
|
"Cross-term dependence of ndiode"), |
||||
|
IOP ("pnrecf0", B3SOIPD_MOD_PNRECF0, IF_REAL, |
||||
|
"Cross-term dependence of nrecf0"), |
||||
|
IOP ("pnrecr0", B3SOIPD_MOD_PNRECR0, IF_REAL, |
||||
|
"Cross-term dependence of nrecr0"), |
||||
|
IOP ("pisbjt", B3SOIPD_MOD_PISBJT, IF_REAL, |
||||
|
"Cross-term dependence of isbjt"), |
||||
|
IOP ("pisdif", B3SOIPD_MOD_PISDIF, IF_REAL, |
||||
|
"Cross-term dependence of isdif"), |
||||
|
IOP ("pisrec", B3SOIPD_MOD_PISREC, IF_REAL, |
||||
|
"Cross-term dependence of isrec"), |
||||
|
IOP ("pistun", B3SOIPD_MOD_PISTUN, IF_REAL, |
||||
|
"Cross-term dependence of istun"), |
||||
|
IOP ("pvrec0", B3SOIPD_MOD_PVREC0, IF_REAL, |
||||
|
"Cross-term dependence of vrec0"), |
||||
|
IOP ("pvtun0", B3SOIPD_MOD_PVTUN0, IF_REAL, |
||||
|
"Cross-term dependence of vtun0"), |
||||
|
IOP ("pnbjt", B3SOIPD_MOD_PNBJT, IF_REAL, "Cross-term dependence of nbjt"), |
||||
|
IOP ("plbjt0", B3SOIPD_MOD_PLBJT0, IF_REAL, |
||||
|
"Cross-term dependence of lbjt0"), |
||||
|
IOP ("pvabjt", B3SOIPD_MOD_PVABJT, IF_REAL, |
||||
|
"Cross-term dependence of vabjt"), |
||||
|
IOP ("paely", B3SOIPD_MOD_PAELY, IF_REAL, "Cross-term dependence of aely"), |
||||
|
IOP ("pahli", B3SOIPD_MOD_PAHLI, IF_REAL, "Cross-term dependence of ahli"), |
||||
|
IOP ("pvsdfb", B3SOIPD_MOD_PVSDFB, IF_REAL, |
||||
|
"Cross-term dependence of vsdfb"), |
||||
|
IOP ("pvsdth", B3SOIPD_MOD_PVSDTH, IF_REAL, |
||||
|
"Cross-term dependence of vsdth"), |
||||
|
IOP ("pdelvt", B3SOIPD_MOD_PDELVT, IF_REAL, |
||||
|
"Cross-term dependence of delvt"), |
||||
|
IOP ("pacde", B3SOIPD_MOD_PACDE, IF_REAL, "Cross-term dependence of acde"), |
||||
|
IOP ("pmoin", B3SOIPD_MOD_PMOIN, IF_REAL, "Cross-term dependence of amoin"), |
||||
|
/* Added for binning - END */ |
||||
|
|
||||
|
IP ("nmos", B3SOIPD_MOD_NMOS, IF_FLAG, "Flag to indicate NMOS"), |
||||
|
IP ("pmos", B3SOIPD_MOD_PMOS, IF_FLAG, "Flag to indicate PMOS"), |
||||
|
}; |
||||
|
|
||||
|
char *B3SOIPDnames[] = { |
||||
|
"Drain", |
||||
|
"Gate", |
||||
|
"Source", |
||||
|
"Backgate", |
||||
|
"", |
||||
|
"Body", |
||||
|
"Temp", |
||||
|
"Charge", |
||||
|
}; |
||||
|
|
||||
|
int B3SOIPDnSize = NUMELEMS (B3SOIPDnames); |
||||
|
int B3SOIPDpTSize = NUMELEMS (B3SOIPDpTable); |
||||
|
int B3SOIPDmPTSize = NUMELEMS (B3SOIPDmPTable); |
||||
|
int B3SOIPDiSize = sizeof (B3SOIPDinstance); |
||||
|
int B3SOIPDmSize = sizeof (B3SOIPDmodel); |
||||
@ -0,0 +1,358 @@ |
|||||
|
/********** |
||||
|
Copyright 1990 Regents of the University of California. All rights reserved. |
||||
|
Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang |
||||
|
File: b3soipdacld.c 98/5/01 |
||||
|
Modified by Pin Su 99/4/30 |
||||
|
Modified by Pin Su 99/9/27 |
||||
|
**********/ |
||||
|
|
||||
|
#include "ngspice.h" |
||||
|
#include <stdio.h> |
||||
|
#include "cktdefs.h" |
||||
|
#include "b3soipddef.h" |
||||
|
#include "sperror.h" |
||||
|
#include "suffix.h" |
||||
|
|
||||
|
|
||||
|
int |
||||
|
B3SOIPDacLoad (inModel, ckt) |
||||
|
GENmodel *inModel; |
||||
|
register CKTcircuit *ckt; |
||||
|
{ |
||||
|
register B3SOIPDmodel *model = (B3SOIPDmodel *) inModel; |
||||
|
register B3SOIPDinstance *here; |
||||
|
register int selfheat; |
||||
|
double xcggb, xcgdb, xcgsb, xcgeb, xcgT; |
||||
|
double xcdgb, xcddb, xcdsb, xcdeb, xcdT; |
||||
|
double xcsgb, xcsdb, xcssb, xcseb, xcsT; |
||||
|
double xcbgb, xcbdb, xcbsb, xcbeb, xcbT; |
||||
|
double xcegb, xceeb, xceT; |
||||
|
double gdpr, gspr, gds; |
||||
|
double cggb, cgdb, cgsb, cgT; |
||||
|
double cdgb, cddb, cdsb, cdeb, cdT; |
||||
|
double cbgb, cbdb, cbsb, cbeb, cbT; |
||||
|
double ceeb, ceT; |
||||
|
double GSoverlapCap, GDoverlapCap, GEoverlapCap, FwdSum, RevSum, Gm, Gmbs, |
||||
|
GmT; |
||||
|
double omega; |
||||
|
double dxpart, sxpart; |
||||
|
double gbbg, gbbdp, gbbb, gbbp, gbbsp, gbbT; |
||||
|
double gddpg, gddpdp, gddpsp, gddpb, gddpT; |
||||
|
double gsspg, gsspdp, gsspsp, gsspb, gsspT; |
||||
|
double gppdp, gppb, gppp, gppT; |
||||
|
double xcTt, cTt, gcTt, gTtt, gTtg, gTtb, gTtdp, gTtsp; |
||||
|
double EDextrinsicCap, ESextrinsicCap; |
||||
|
double xcedb, xcesb; |
||||
|
|
||||
|
|
||||
|
omega = ckt->CKTomega; |
||||
|
for (; model != NULL; model = model->B3SOIPDnextModel) |
||||
|
{ |
||||
|
|
||||
|
for (here = model->B3SOIPDinstances; here != NULL; |
||||
|
here = here->B3SOIPDnextInstance) |
||||
|
{ |
||||
|
selfheat = (model->B3SOIPDshMod == 1) && (here->B3SOIPDrth0 != 0.0); |
||||
|
if (here->B3SOIPDmode >= 0) |
||||
|
{ |
||||
|
Gm = here->B3SOIPDgm; |
||||
|
Gmbs = here->B3SOIPDgmbs; |
||||
|
GmT = model->B3SOIPDtype * here->B3SOIPDgmT; |
||||
|
FwdSum = Gm + Gmbs; |
||||
|
RevSum = 0.0; |
||||
|
|
||||
|
cbgb = here->B3SOIPDcbgb; |
||||
|
cbsb = here->B3SOIPDcbsb; |
||||
|
cbdb = here->B3SOIPDcbdb; |
||||
|
cbeb = here->B3SOIPDcbeb; |
||||
|
cbT = model->B3SOIPDtype * here->B3SOIPDcbT; |
||||
|
|
||||
|
ceeb = here->B3SOIPDceeb; |
||||
|
ceT = model->B3SOIPDtype * here->B3SOIPDceT; |
||||
|
|
||||
|
cggb = here->B3SOIPDcggb; |
||||
|
cgsb = here->B3SOIPDcgsb; |
||||
|
cgdb = here->B3SOIPDcgdb; |
||||
|
cgT = model->B3SOIPDtype * here->B3SOIPDcgT; |
||||
|
|
||||
|
cdgb = here->B3SOIPDcdgb; |
||||
|
cdsb = here->B3SOIPDcdsb; |
||||
|
cddb = here->B3SOIPDcddb; |
||||
|
cdeb = here->B3SOIPDcdeb; |
||||
|
cdT = model->B3SOIPDtype * here->B3SOIPDcdT; |
||||
|
|
||||
|
cTt = here->pParam->B3SOIPDcth; |
||||
|
|
||||
|
gbbg = -here->B3SOIPDgbgs; |
||||
|
gbbdp = -here->B3SOIPDgbds; |
||||
|
gbbb = -here->B3SOIPDgbbs; |
||||
|
gbbp = -here->B3SOIPDgbps; |
||||
|
gbbT = -model->B3SOIPDtype * here->B3SOIPDgbT; |
||||
|
gbbsp = -(gbbg + gbbdp + gbbb + gbbp); |
||||
|
|
||||
|
gddpg = -here->B3SOIPDgjdg; |
||||
|
gddpdp = -here->B3SOIPDgjdd; |
||||
|
gddpb = -here->B3SOIPDgjdb; |
||||
|
gddpT = -model->B3SOIPDtype * here->B3SOIPDgjdT; |
||||
|
gddpsp = -(gddpg + gddpdp + gddpb); |
||||
|
|
||||
|
gsspg = -here->B3SOIPDgjsg; |
||||
|
gsspdp = -here->B3SOIPDgjsd; |
||||
|
gsspb = -here->B3SOIPDgjsb; |
||||
|
gsspT = -model->B3SOIPDtype * here->B3SOIPDgjsT; |
||||
|
gsspsp = -(gsspg + gsspdp + gsspb); |
||||
|
|
||||
|
gppdp = 0; |
||||
|
gppb = -here->B3SOIPDgbpbs; |
||||
|
gppp = -here->B3SOIPDgbpps; |
||||
|
gppT = -model->B3SOIPDtype * here->B3SOIPDgbpT; |
||||
|
|
||||
|
gTtg = here->B3SOIPDgtempg; |
||||
|
gTtb = here->B3SOIPDgtempb; |
||||
|
gTtdp = here->B3SOIPDgtempd; |
||||
|
gTtt = here->B3SOIPDgtempT; |
||||
|
gTtsp = -(gTtg + gTtb + gTtdp); |
||||
|
|
||||
|
sxpart = 0.6; |
||||
|
dxpart = 0.4; |
||||
|
|
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
Gm = -here->B3SOIPDgm; |
||||
|
Gmbs = -here->B3SOIPDgmbs; |
||||
|
GmT = -model->B3SOIPDtype * here->B3SOIPDgmT; |
||||
|
FwdSum = 0.0; |
||||
|
RevSum = -Gm - Gmbs; |
||||
|
|
||||
|
cdgb = |
||||
|
-(here->B3SOIPDcdgb + here->B3SOIPDcggb + here->B3SOIPDcbgb); |
||||
|
cdsb = |
||||
|
-(here->B3SOIPDcddb + here->B3SOIPDcgdb + here->B3SOIPDcbdb); |
||||
|
cddb = |
||||
|
-(here->B3SOIPDcdsb + here->B3SOIPDcgsb + here->B3SOIPDcbsb); |
||||
|
cdeb = |
||||
|
-(here->B3SOIPDcdeb + here->B3SOIPDcbeb + here->B3SOIPDceeb); |
||||
|
cdT = |
||||
|
-model->B3SOIPDtype * (here->B3SOIPDcgT + here->B3SOIPDcbT + |
||||
|
here->B3SOIPDcdT + here->B3SOIPDceT); |
||||
|
|
||||
|
ceeb = here->B3SOIPDceeb; |
||||
|
ceT = model->B3SOIPDtype * here->B3SOIPDceT; |
||||
|
|
||||
|
cggb = here->B3SOIPDcggb; |
||||
|
cgsb = here->B3SOIPDcgdb; |
||||
|
cgdb = here->B3SOIPDcgsb; |
||||
|
cgT = model->B3SOIPDtype * here->B3SOIPDcgT; |
||||
|
|
||||
|
cbgb = here->B3SOIPDcbgb; |
||||
|
cbsb = here->B3SOIPDcbdb; |
||||
|
cbdb = here->B3SOIPDcbsb; |
||||
|
cbeb = here->B3SOIPDcbeb; |
||||
|
cbT = model->B3SOIPDtype * here->B3SOIPDcbT; |
||||
|
|
||||
|
cTt = here->pParam->B3SOIPDcth; |
||||
|
|
||||
|
gbbg = -here->B3SOIPDgbgs; |
||||
|
gbbb = -here->B3SOIPDgbbs; |
||||
|
gbbp = -here->B3SOIPDgbps; |
||||
|
gbbsp = -here->B3SOIPDgbds; |
||||
|
gbbT = -model->B3SOIPDtype * here->B3SOIPDgbT; |
||||
|
gbbdp = -(gbbg + gbbsp + gbbb + gbbp); |
||||
|
|
||||
|
gddpg = -here->B3SOIPDgjsg; |
||||
|
gddpsp = -here->B3SOIPDgjsd; |
||||
|
gddpb = -here->B3SOIPDgjsb; |
||||
|
gddpT = -model->B3SOIPDtype * here->B3SOIPDgjsT; |
||||
|
gddpdp = -(gddpg + gddpsp + gddpb); |
||||
|
|
||||
|
gsspg = -here->B3SOIPDgjdg; |
||||
|
gsspsp = -here->B3SOIPDgjdd; |
||||
|
gsspb = -here->B3SOIPDgjdb; |
||||
|
gsspT = -model->B3SOIPDtype * here->B3SOIPDgjdT; |
||||
|
gsspdp = -(gsspg + gsspsp + gsspb); |
||||
|
|
||||
|
gppb = -here->B3SOIPDgbpbs; |
||||
|
gppp = -here->B3SOIPDgbpps; |
||||
|
gppT = -model->B3SOIPDtype * here->B3SOIPDgbpT; |
||||
|
gppdp = -(gppb + gppp); |
||||
|
|
||||
|
gTtt = here->B3SOIPDgtempT; |
||||
|
gTtg = here->B3SOIPDgtempg; |
||||
|
gTtb = here->B3SOIPDgtempb; |
||||
|
gTtdp = here->B3SOIPDgtempd; |
||||
|
gTtsp = -(gTtt + gTtg + gTtb + gTtdp); |
||||
|
|
||||
|
gTtg = here->B3SOIPDgtempg; |
||||
|
gTtb = here->B3SOIPDgtempb; |
||||
|
gTtsp = here->B3SOIPDgtempd; |
||||
|
gTtt = here->B3SOIPDgtempT; |
||||
|
gTtdp = -(gTtg + gTtb + gTtsp); |
||||
|
|
||||
|
sxpart = 0.6; |
||||
|
sxpart = 0.4; |
||||
|
dxpart = 0.6; |
||||
|
} |
||||
|
|
||||
|
gdpr = here->B3SOIPDdrainConductance; |
||||
|
gspr = here->B3SOIPDsourceConductance; |
||||
|
gds = here->B3SOIPDgds; |
||||
|
|
||||
|
GSoverlapCap = here->B3SOIPDcgso; |
||||
|
GDoverlapCap = here->B3SOIPDcgdo; |
||||
|
GEoverlapCap = here->pParam->B3SOIPDcgeo; |
||||
|
|
||||
|
EDextrinsicCap = here->B3SOIPDgcde; |
||||
|
ESextrinsicCap = here->B3SOIPDgcse; |
||||
|
xcedb = -EDextrinsicCap * omega; |
||||
|
xcdeb = (cdeb - EDextrinsicCap) * omega; |
||||
|
xcddb = (cddb + GDoverlapCap + EDextrinsicCap) * omega; |
||||
|
xceeb = |
||||
|
(ceeb + GEoverlapCap + EDextrinsicCap + ESextrinsicCap) * omega; |
||||
|
xcesb = -ESextrinsicCap * omega; |
||||
|
xcssb = |
||||
|
(GSoverlapCap + ESextrinsicCap - (cgsb + cbsb + cdsb)) * omega; |
||||
|
|
||||
|
xcseb = -(cbeb + cdeb + ceeb + ESextrinsicCap) * omega; |
||||
|
|
||||
|
xcegb = (-GEoverlapCap) * omega; |
||||
|
xceT = ceT * omega; |
||||
|
xcggb = (cggb + GDoverlapCap + GSoverlapCap + GEoverlapCap) * omega; |
||||
|
xcgdb = (cgdb - GDoverlapCap) * omega; |
||||
|
xcgsb = (cgsb - GSoverlapCap) * omega; |
||||
|
xcgeb = (-GEoverlapCap) * omega; |
||||
|
xcgT = cgT * omega; |
||||
|
|
||||
|
xcdgb = (cdgb - GDoverlapCap) * omega; |
||||
|
xcdsb = cdsb * omega; |
||||
|
xcdT = cdT * omega; |
||||
|
|
||||
|
xcsgb = -(cggb + cbgb + cdgb + GSoverlapCap) * omega; |
||||
|
xcsdb = -(cgdb + cbdb + cddb) * omega; |
||||
|
xcsT = -(cgT + cbT + cdT + ceT) * omega; |
||||
|
|
||||
|
xcbgb = cbgb * omega; |
||||
|
xcbdb = cbdb * omega; |
||||
|
xcbsb = cbsb * omega; |
||||
|
xcbeb = cbeb * omega; |
||||
|
xcbT = cbT * omega; |
||||
|
|
||||
|
xcTt = cTt * omega; |
||||
|
|
||||
|
*(here->B3SOIPDEdpPtr + 1) += xcedb; |
||||
|
*(here->B3SOIPDEspPtr + 1) += xcesb; |
||||
|
*(here->B3SOIPDDPePtr + 1) += xcdeb; |
||||
|
*(here->B3SOIPDSPePtr + 1) += xcseb; |
||||
|
*(here->B3SOIPDEgPtr + 1) += xcegb; |
||||
|
*(here->B3SOIPDGePtr + 1) += xcgeb; |
||||
|
|
||||
|
*(here->B3SOIPDEePtr + 1) += xceeb; |
||||
|
|
||||
|
*(here->B3SOIPDGgPtr + 1) += xcggb; |
||||
|
*(here->B3SOIPDGdpPtr + 1) += xcgdb; |
||||
|
*(here->B3SOIPDGspPtr + 1) += xcgsb; |
||||
|
|
||||
|
*(here->B3SOIPDDPgPtr + 1) += xcdgb; |
||||
|
*(here->B3SOIPDDPdpPtr + 1) += xcddb; |
||||
|
*(here->B3SOIPDDPspPtr + 1) += xcdsb; |
||||
|
|
||||
|
*(here->B3SOIPDSPgPtr + 1) += xcsgb; |
||||
|
*(here->B3SOIPDSPdpPtr + 1) += xcsdb; |
||||
|
*(here->B3SOIPDSPspPtr + 1) += xcssb; |
||||
|
|
||||
|
*(here->B3SOIPDBePtr + 1) += xcbeb; |
||||
|
*(here->B3SOIPDBgPtr + 1) += xcbgb; |
||||
|
*(here->B3SOIPDBdpPtr + 1) += xcbdb; |
||||
|
*(here->B3SOIPDBspPtr + 1) += xcbsb; |
||||
|
|
||||
|
*(here->B3SOIPDEbPtr + 1) -= xcegb + xceeb + xcedb + xcesb; |
||||
|
|
||||
|
*(here->B3SOIPDGbPtr + 1) -= xcggb + xcgdb + xcgsb + xcgeb; |
||||
|
*(here->B3SOIPDDPbPtr + 1) -= xcdgb + xcddb + xcdsb + xcdeb; |
||||
|
*(here->B3SOIPDSPbPtr + 1) -= xcsgb + xcsdb + xcssb + xcseb; |
||||
|
*(here->B3SOIPDBbPtr + 1) -= xcbgb + xcbdb + xcbsb + xcbeb; |
||||
|
|
||||
|
if (selfheat) |
||||
|
{ |
||||
|
*(here->B3SOIPDTemptempPtr + 1) += xcTt; |
||||
|
*(here->B3SOIPDDPtempPtr + 1) += xcdT; |
||||
|
*(here->B3SOIPDSPtempPtr + 1) += xcsT; |
||||
|
*(here->B3SOIPDBtempPtr + 1) += xcbT; |
||||
|
*(here->B3SOIPDEtempPtr + 1) += xceT; |
||||
|
*(here->B3SOIPDGtempPtr + 1) += xcgT; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
*(here->B3SOIPDEePtr) += 0.0; |
||||
|
|
||||
|
*(here->B3SOIPDDPgPtr) += Gm + gddpg; |
||||
|
*(here->B3SOIPDDPdpPtr) += gdpr + gds + gddpdp + RevSum; |
||||
|
*(here->B3SOIPDDPspPtr) -= gds + FwdSum - gddpsp; |
||||
|
*(here->B3SOIPDDPdPtr) -= gdpr; |
||||
|
|
||||
|
*(here->B3SOIPDSPgPtr) -= Gm - gsspg; |
||||
|
*(here->B3SOIPDSPdpPtr) -= gds + RevSum - gsspdp; |
||||
|
*(here->B3SOIPDSPspPtr) += gspr + gds + FwdSum + gsspsp; |
||||
|
*(here->B3SOIPDSPsPtr) -= gspr; |
||||
|
|
||||
|
*(here->B3SOIPDBePtr) += 0; |
||||
|
*(here->B3SOIPDBgPtr) += gbbg; |
||||
|
*(here->B3SOIPDBdpPtr) += gbbdp; |
||||
|
*(here->B3SOIPDBspPtr) += gbbsp; |
||||
|
*(here->B3SOIPDBbPtr) += gbbb; |
||||
|
*(here->B3SOIPDEbPtr) += 0.0; |
||||
|
*(here->B3SOIPDSPbPtr) -= Gmbs - gsspb; |
||||
|
*(here->B3SOIPDDPbPtr) -= (-gddpb - Gmbs); |
||||
|
|
||||
|
if (selfheat) |
||||
|
{ |
||||
|
*(here->B3SOIPDDPtempPtr) += GmT + gddpT; |
||||
|
*(here->B3SOIPDSPtempPtr) += -GmT + gsspT; |
||||
|
*(here->B3SOIPDBtempPtr) += gbbT; |
||||
|
|
||||
|
*(here->B3SOIPDTemptempPtr) += |
||||
|
gTtt + 1 / here->pParam->B3SOIPDrth; |
||||
|
*(here->B3SOIPDTempgPtr) += gTtg; |
||||
|
*(here->B3SOIPDTempbPtr) += gTtb; |
||||
|
*(here->B3SOIPDTempdpPtr) += gTtdp; |
||||
|
*(here->B3SOIPDTempspPtr) += gTtsp; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
*(here->B3SOIPDDdPtr) += gdpr; |
||||
|
*(here->B3SOIPDDdpPtr) -= gdpr; |
||||
|
*(here->B3SOIPDSsPtr) += gspr; |
||||
|
*(here->B3SOIPDSspPtr) -= gspr; |
||||
|
|
||||
|
|
||||
|
if (here->B3SOIPDbodyMod == 1) |
||||
|
{ |
||||
|
(*(here->B3SOIPDBpPtr) -= gppp); |
||||
|
(*(here->B3SOIPDPbPtr) += gppb); |
||||
|
(*(here->B3SOIPDPpPtr) += gppp); |
||||
|
} |
||||
|
if (here->B3SOIPDdebugMod != 0) |
||||
|
{ |
||||
|
*(here->B3SOIPDVbsPtr) += 1; |
||||
|
*(here->B3SOIPDIdsPtr) += 1; |
||||
|
*(here->B3SOIPDIcPtr) += 1; |
||||
|
*(here->B3SOIPDIbsPtr) += 1; |
||||
|
*(here->B3SOIPDIbdPtr) += 1; |
||||
|
*(here->B3SOIPDIiiPtr) += 1; |
||||
|
*(here->B3SOIPDIgidlPtr) += 1; |
||||
|
*(here->B3SOIPDItunPtr) += 1; |
||||
|
*(here->B3SOIPDIbpPtr) += 1; |
||||
|
*(here->B3SOIPDCbgPtr) += 1; |
||||
|
*(here->B3SOIPDCbbPtr) += 1; |
||||
|
*(here->B3SOIPDCbdPtr) += 1; |
||||
|
*(here->B3SOIPDQbfPtr) += 1; |
||||
|
*(here->B3SOIPDQjsPtr) += 1; |
||||
|
*(here->B3SOIPDQjdPtr) += 1; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
return (OK); |
||||
|
} |
||||
@ -0,0 +1,244 @@ |
|||||
|
/********** |
||||
|
Copyright 1990 Regents of the University of California. All rights reserved. |
||||
|
Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang |
||||
|
File: b3soipdask.c 98/5/01 |
||||
|
Modified by Pin Su 99/4/30 |
||||
|
**********/ |
||||
|
|
||||
|
|
||||
|
#include "ngspice.h" |
||||
|
#include <stdio.h> |
||||
|
#include <math.h> |
||||
|
#include "ifsim.h" |
||||
|
#include "cktdefs.h" |
||||
|
#include "devdefs.h" |
||||
|
#include "b3soipddef.h" |
||||
|
#include "sperror.h" |
||||
|
#include "suffix.h" |
||||
|
|
||||
|
int |
||||
|
B3SOIPDask (ckt, inst, which, value, select) |
||||
|
CKTcircuit *ckt; |
||||
|
GENinstance *inst; |
||||
|
int which; |
||||
|
IFvalue *value; |
||||
|
IFvalue *select; |
||||
|
{ |
||||
|
B3SOIPDinstance *here = (B3SOIPDinstance *) inst; |
||||
|
|
||||
|
switch (which) |
||||
|
{ |
||||
|
case B3SOIPD_L: |
||||
|
value->rValue = here->B3SOIPDl; |
||||
|
return (OK); |
||||
|
case B3SOIPD_W: |
||||
|
value->rValue = here->B3SOIPDw; |
||||
|
return (OK); |
||||
|
case B3SOIPD_AS: |
||||
|
value->rValue = here->B3SOIPDsourceArea; |
||||
|
return (OK); |
||||
|
case B3SOIPD_AD: |
||||
|
value->rValue = here->B3SOIPDdrainArea; |
||||
|
return (OK); |
||||
|
case B3SOIPD_PS: |
||||
|
value->rValue = here->B3SOIPDsourcePerimeter; |
||||
|
return (OK); |
||||
|
case B3SOIPD_PD: |
||||
|
value->rValue = here->B3SOIPDdrainPerimeter; |
||||
|
return (OK); |
||||
|
case B3SOIPD_NRS: |
||||
|
value->rValue = here->B3SOIPDsourceSquares; |
||||
|
return (OK); |
||||
|
case B3SOIPD_NRD: |
||||
|
value->rValue = here->B3SOIPDdrainSquares; |
||||
|
return (OK); |
||||
|
case B3SOIPD_OFF: |
||||
|
value->iValue = here->B3SOIPDoff; |
||||
|
return (OK); |
||||
|
case B3SOIPD_BJTOFF: |
||||
|
value->iValue = here->B3SOIPDbjtoff; |
||||
|
return (OK); |
||||
|
case B3SOIPD_RTH0: |
||||
|
value->rValue = here->B3SOIPDrth0; |
||||
|
return (OK); |
||||
|
case B3SOIPD_CTH0: |
||||
|
value->rValue = here->B3SOIPDcth0; |
||||
|
return (OK); |
||||
|
case B3SOIPD_NRB: |
||||
|
value->rValue = here->B3SOIPDbodySquares; |
||||
|
return (OK); |
||||
|
|
||||
|
|
||||
|
/* v2.0 release */ |
||||
|
case B3SOIPD_NBC: |
||||
|
value->rValue = here->B3SOIPDnbc; |
||||
|
return (OK); |
||||
|
case B3SOIPD_NSEG: |
||||
|
value->rValue = here->B3SOIPDnseg; |
||||
|
return (OK); |
||||
|
case B3SOIPD_PDBCP: |
||||
|
value->rValue = here->B3SOIPDpdbcp; |
||||
|
return (OK); |
||||
|
case B3SOIPD_PSBCP: |
||||
|
value->rValue = here->B3SOIPDpsbcp; |
||||
|
return (OK); |
||||
|
case B3SOIPD_AGBCP: |
||||
|
value->rValue = here->B3SOIPDagbcp; |
||||
|
return (OK); |
||||
|
case B3SOIPD_AEBCP: |
||||
|
value->rValue = here->B3SOIPDaebcp; |
||||
|
return (OK); |
||||
|
case B3SOIPD_VBSUSR: |
||||
|
value->rValue = here->B3SOIPDvbsusr; |
||||
|
return (OK); |
||||
|
case B3SOIPD_TNODEOUT: |
||||
|
value->iValue = here->B3SOIPDtnodeout; |
||||
|
return (OK); |
||||
|
|
||||
|
|
||||
|
case B3SOIPD_IC_VBS: |
||||
|
value->rValue = here->B3SOIPDicVBS; |
||||
|
return (OK); |
||||
|
case B3SOIPD_IC_VDS: |
||||
|
value->rValue = here->B3SOIPDicVDS; |
||||
|
return (OK); |
||||
|
case B3SOIPD_IC_VGS: |
||||
|
value->rValue = here->B3SOIPDicVGS; |
||||
|
return (OK); |
||||
|
case B3SOIPD_IC_VES: |
||||
|
value->rValue = here->B3SOIPDicVES; |
||||
|
return (OK); |
||||
|
case B3SOIPD_IC_VPS: |
||||
|
value->rValue = here->B3SOIPDicVPS; |
||||
|
return (OK); |
||||
|
case B3SOIPD_DNODE: |
||||
|
value->iValue = here->B3SOIPDdNode; |
||||
|
return (OK); |
||||
|
case B3SOIPD_GNODE: |
||||
|
value->iValue = here->B3SOIPDgNode; |
||||
|
return (OK); |
||||
|
case B3SOIPD_SNODE: |
||||
|
value->iValue = here->B3SOIPDsNode; |
||||
|
return (OK); |
||||
|
case B3SOIPD_BNODE: |
||||
|
value->iValue = here->B3SOIPDbNode; |
||||
|
return (OK); |
||||
|
case B3SOIPD_ENODE: |
||||
|
value->iValue = here->B3SOIPDeNode; |
||||
|
return (OK); |
||||
|
case B3SOIPD_DNODEPRIME: |
||||
|
value->iValue = here->B3SOIPDdNodePrime; |
||||
|
return (OK); |
||||
|
case B3SOIPD_SNODEPRIME: |
||||
|
value->iValue = here->B3SOIPDsNodePrime; |
||||
|
return (OK); |
||||
|
case B3SOIPD_SOURCECONDUCT: |
||||
|
value->rValue = here->B3SOIPDsourceConductance; |
||||
|
return (OK); |
||||
|
case B3SOIPD_DRAINCONDUCT: |
||||
|
value->rValue = here->B3SOIPDdrainConductance; |
||||
|
return (OK); |
||||
|
case B3SOIPD_VBD: |
||||
|
value->rValue = *(ckt->CKTstate0 + here->B3SOIPDvbd); |
||||
|
return (OK); |
||||
|
case B3SOIPD_VBS: |
||||
|
value->rValue = *(ckt->CKTstate0 + here->B3SOIPDvbs); |
||||
|
return (OK); |
||||
|
case B3SOIPD_VGS: |
||||
|
value->rValue = *(ckt->CKTstate0 + here->B3SOIPDvgs); |
||||
|
return (OK); |
||||
|
case B3SOIPD_VES: |
||||
|
value->rValue = *(ckt->CKTstate0 + here->B3SOIPDves); |
||||
|
return (OK); |
||||
|
case B3SOIPD_VDS: |
||||
|
value->rValue = *(ckt->CKTstate0 + here->B3SOIPDvds); |
||||
|
return (OK); |
||||
|
case B3SOIPD_CD: |
||||
|
value->rValue = here->B3SOIPDcd; |
||||
|
return (OK); |
||||
|
case B3SOIPD_CBS: |
||||
|
value->rValue = here->B3SOIPDcjs; |
||||
|
return (OK); |
||||
|
case B3SOIPD_CBD: |
||||
|
value->rValue = here->B3SOIPDcjd; |
||||
|
return (OK); |
||||
|
case B3SOIPD_GM: |
||||
|
value->rValue = here->B3SOIPDgm; |
||||
|
return (OK); |
||||
|
case B3SOIPD_GMID: |
||||
|
value->rValue = here->B3SOIPDgm / here->B3SOIPDcd; |
||||
|
return (OK); |
||||
|
case B3SOIPD_GDS: |
||||
|
value->rValue = here->B3SOIPDgds; |
||||
|
return (OK); |
||||
|
case B3SOIPD_GMBS: |
||||
|
value->rValue = here->B3SOIPDgmbs; |
||||
|
return (OK); |
||||
|
case B3SOIPD_GBD: |
||||
|
value->rValue = here->B3SOIPDgjdb; |
||||
|
return (OK); |
||||
|
case B3SOIPD_GBS: |
||||
|
value->rValue = here->B3SOIPDgjsb; |
||||
|
return (OK); |
||||
|
case B3SOIPD_QB: |
||||
|
value->rValue = *(ckt->CKTstate0 + here->B3SOIPDqb); |
||||
|
return (OK); |
||||
|
case B3SOIPD_CQB: |
||||
|
value->rValue = *(ckt->CKTstate0 + here->B3SOIPDcqb); |
||||
|
return (OK); |
||||
|
case B3SOIPD_QG: |
||||
|
value->rValue = *(ckt->CKTstate0 + here->B3SOIPDqg); |
||||
|
return (OK); |
||||
|
case B3SOIPD_CQG: |
||||
|
value->rValue = *(ckt->CKTstate0 + here->B3SOIPDcqg); |
||||
|
return (OK); |
||||
|
case B3SOIPD_QD: |
||||
|
value->rValue = *(ckt->CKTstate0 + here->B3SOIPDqd); |
||||
|
return (OK); |
||||
|
case B3SOIPD_CQD: |
||||
|
value->rValue = *(ckt->CKTstate0 + here->B3SOIPDcqd); |
||||
|
return (OK); |
||||
|
case B3SOIPD_CGG: |
||||
|
value->rValue = here->B3SOIPDcggb; |
||||
|
return (OK); |
||||
|
case B3SOIPD_CGD: |
||||
|
value->rValue = here->B3SOIPDcgdb; |
||||
|
return (OK); |
||||
|
case B3SOIPD_CGS: |
||||
|
value->rValue = here->B3SOIPDcgsb; |
||||
|
return (OK); |
||||
|
case B3SOIPD_CDG: |
||||
|
value->rValue = here->B3SOIPDcdgb; |
||||
|
return (OK); |
||||
|
case B3SOIPD_CDD: |
||||
|
value->rValue = here->B3SOIPDcddb; |
||||
|
return (OK); |
||||
|
case B3SOIPD_CDS: |
||||
|
value->rValue = here->B3SOIPDcdsb; |
||||
|
return (OK); |
||||
|
case B3SOIPD_CBG: |
||||
|
value->rValue = here->B3SOIPDcbgb; |
||||
|
return (OK); |
||||
|
case B3SOIPD_CBDB: |
||||
|
value->rValue = here->B3SOIPDcbdb; |
||||
|
return (OK); |
||||
|
case B3SOIPD_CBSB: |
||||
|
value->rValue = here->B3SOIPDcbsb; |
||||
|
return (OK); |
||||
|
case B3SOIPD_VON: |
||||
|
value->rValue = here->B3SOIPDvon; |
||||
|
return (OK); |
||||
|
case B3SOIPD_VDSAT: |
||||
|
value->rValue = here->B3SOIPDvdsat; |
||||
|
return (OK); |
||||
|
case B3SOIPD_QBS: |
||||
|
value->rValue = *(ckt->CKTstate0 + here->B3SOIPDqbs); |
||||
|
return (OK); |
||||
|
case B3SOIPD_QBD: |
||||
|
value->rValue = *(ckt->CKTstate0 + here->B3SOIPDqbd); |
||||
|
return (OK); |
||||
|
default: |
||||
|
return (E_BADPARM); |
||||
|
} |
||||
|
/* NOTREACHED */ |
||||
|
} |
||||
@ -0,0 +1,913 @@ |
|||||
|
/********** |
||||
|
Copyright 1990 Regents of the University of California. All rights reserved. |
||||
|
Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang |
||||
|
File: b3soipdcheck.c 98/5/01 |
||||
|
Modified by Pin Su and Jan Feng 99/2/15 |
||||
|
Modified by Pin Su 99/4/30 |
||||
|
Modified by Pin Su 00/3/1 |
||||
|
**********/ |
||||
|
|
||||
|
|
||||
|
#include "ngspice.h" |
||||
|
#include <stdio.h> |
||||
|
#include <math.h> |
||||
|
#include "cktdefs.h" |
||||
|
#include "b3soipddef.h" |
||||
|
#include "trandefs.h" |
||||
|
#include "const.h" |
||||
|
#include "sperror.h" |
||||
|
#include "devdefs.h" |
||||
|
#include "suffix.h" |
||||
|
|
||||
|
int |
||||
|
B3SOIPDcheckModel (model, here, ckt) |
||||
|
register B3SOIPDmodel *model; |
||||
|
register B3SOIPDinstance *here; |
||||
|
CKTcircuit *ckt; |
||||
|
{ |
||||
|
struct b3soipdSizeDependParam *pParam; |
||||
|
int Fatal_Flag = 0; |
||||
|
FILE *fplog; |
||||
|
|
||||
|
if ((fplog = fopen ("b3soipdv1check.log", "w")) != NULL) |
||||
|
{ |
||||
|
pParam = here->pParam; |
||||
|
fprintf (fplog, "B3SOIPDV3 Parameter Check\n"); |
||||
|
fprintf (fplog, "Model = %s\n", model->B3SOIPDmodName); |
||||
|
fprintf (fplog, "W = %g, L = %g\n", here->B3SOIPDw, here->B3SOIPDl); |
||||
|
|
||||
|
|
||||
|
if (pParam->B3SOIPDnlx < -pParam->B3SOIPDleff) |
||||
|
{ |
||||
|
fprintf (fplog, "Fatal: Nlx = %g is less than -Leff.\n", |
||||
|
pParam->B3SOIPDnlx); |
||||
|
printf ("Fatal: Nlx = %g is less than -Leff.\n", |
||||
|
pParam->B3SOIPDnlx); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIPDtox <= 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Fatal: Tox = %g is not positive.\n", |
||||
|
model->B3SOIPDtox); |
||||
|
printf ("Fatal: Tox = %g is not positive.\n", model->B3SOIPDtox); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIPDtbox <= 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Fatal: Tbox = %g is not positive.\n", |
||||
|
model->B3SOIPDtbox); |
||||
|
printf ("Fatal: Tbox = %g is not positive.\n", model->B3SOIPDtbox); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
|
||||
|
if (pParam->B3SOIPDnpeak <= 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Fatal: Nch = %g is not positive.\n", |
||||
|
pParam->B3SOIPDnpeak); |
||||
|
printf ("Fatal: Nch = %g is not positive.\n", pParam->B3SOIPDnpeak); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
if (pParam->B3SOIPDngate < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Fatal: Ngate = %g is not positive.\n", |
||||
|
pParam->B3SOIPDngate); |
||||
|
printf ("Fatal: Ngate = %g Ngate is not positive.\n", |
||||
|
pParam->B3SOIPDngate); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
if (pParam->B3SOIPDngate > 1.e25) |
||||
|
{ |
||||
|
fprintf (fplog, "Fatal: Ngate = %g is too high.\n", |
||||
|
pParam->B3SOIPDngate); |
||||
|
printf ("Fatal: Ngate = %g Ngate is too high\n", |
||||
|
pParam->B3SOIPDngate); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
|
||||
|
if (pParam->B3SOIPDdvt1 < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Fatal: Dvt1 = %g is negative.\n", |
||||
|
pParam->B3SOIPDdvt1); |
||||
|
printf ("Fatal: Dvt1 = %g is negative.\n", pParam->B3SOIPDdvt1); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
|
||||
|
if (pParam->B3SOIPDdvt1w < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Fatal: Dvt1w = %g is negative.\n", |
||||
|
pParam->B3SOIPDdvt1w); |
||||
|
printf ("Fatal: Dvt1w = %g is negative.\n", pParam->B3SOIPDdvt1w); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
|
||||
|
if (pParam->B3SOIPDw0 == -pParam->B3SOIPDweff) |
||||
|
{ |
||||
|
fprintf (fplog, "Fatal: (W0 + Weff) = 0 cauing divided-by-zero.\n"); |
||||
|
printf ("Fatal: (W0 + Weff) = 0 cauing divided-by-zero.\n"); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
|
||||
|
if (pParam->B3SOIPDdsub < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Fatal: Dsub = %g is negative.\n", |
||||
|
pParam->B3SOIPDdsub); |
||||
|
printf ("Fatal: Dsub = %g is negative.\n", pParam->B3SOIPDdsub); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
if (pParam->B3SOIPDb1 == -pParam->B3SOIPDweff) |
||||
|
{ |
||||
|
fprintf (fplog, |
||||
|
"Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n"); |
||||
|
printf ("Fatal: (B1 + Weff) = 0 causing divided-by-zero.\n"); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
if (pParam->B3SOIPDu0temp <= 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, |
||||
|
"Fatal: u0 at current temperature = %g is not positive.\n", |
||||
|
pParam->B3SOIPDu0temp); |
||||
|
printf ("Fatal: u0 at current temperature = %g is not positive.\n", |
||||
|
pParam->B3SOIPDu0temp); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
|
||||
|
/* Check delta parameter */ |
||||
|
if (pParam->B3SOIPDdelta < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Fatal: Delta = %g is less than zero.\n", |
||||
|
pParam->B3SOIPDdelta); |
||||
|
printf ("Fatal: Delta = %g is less than zero.\n", |
||||
|
pParam->B3SOIPDdelta); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
|
||||
|
if (pParam->B3SOIPDvsattemp <= 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, |
||||
|
"Fatal: Vsat at current temperature = %g is not positive.\n", |
||||
|
pParam->B3SOIPDvsattemp); |
||||
|
printf |
||||
|
("Fatal: Vsat at current temperature = %g is not positive.\n", |
||||
|
pParam->B3SOIPDvsattemp); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
/* Check Rout parameters */ |
||||
|
if (pParam->B3SOIPDpclm <= 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Fatal: Pclm = %g is not positive.\n", |
||||
|
pParam->B3SOIPDpclm); |
||||
|
printf ("Fatal: Pclm = %g is not positive.\n", pParam->B3SOIPDpclm); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
|
||||
|
if (pParam->B3SOIPDdrout < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Fatal: Drout = %g is negative.\n", |
||||
|
pParam->B3SOIPDdrout); |
||||
|
printf ("Fatal: Drout = %g is negative.\n", pParam->B3SOIPDdrout); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
if (model->B3SOIPDunitLengthGateSidewallJctCap > 0.0) |
||||
|
{ |
||||
|
if (here->B3SOIPDdrainPerimeter < pParam->B3SOIPDweff) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: Pd = %g is less than W.\n", |
||||
|
here->B3SOIPDdrainPerimeter); |
||||
|
printf ("Warning: Pd = %g is less than W.\n", |
||||
|
here->B3SOIPDdrainPerimeter); |
||||
|
here->B3SOIPDdrainPerimeter = pParam->B3SOIPDweff; |
||||
|
} |
||||
|
if (here->B3SOIPDsourcePerimeter < pParam->B3SOIPDweff) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: Ps = %g is less than W.\n", |
||||
|
here->B3SOIPDsourcePerimeter); |
||||
|
printf ("Warning: Ps = %g is less than W.\n", |
||||
|
here->B3SOIPDsourcePerimeter); |
||||
|
here->B3SOIPDsourcePerimeter = pParam->B3SOIPDweff; |
||||
|
} |
||||
|
} |
||||
|
/* Check capacitance parameters */ |
||||
|
if (pParam->B3SOIPDclc < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Fatal: Clc = %g is negative.\n", |
||||
|
pParam->B3SOIPDclc); |
||||
|
printf ("Fatal: Clc = %g is negative.\n", pParam->B3SOIPDclc); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
if (model->B3SOIPDparamChk == 1) |
||||
|
{ |
||||
|
/* Check L and W parameters */ |
||||
|
if (pParam->B3SOIPDleff <= 5.0e-8) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: Leff = %g may be too small.\n", |
||||
|
pParam->B3SOIPDleff); |
||||
|
printf ("Warning: Leff = %g may be too small.\n", |
||||
|
pParam->B3SOIPDleff); |
||||
|
} |
||||
|
|
||||
|
if (pParam->B3SOIPDleffCV <= 5.0e-8) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: Leff for CV = %g may be too small.\n", |
||||
|
pParam->B3SOIPDleffCV); |
||||
|
printf ("Warning: Leff for CV = %g may be too small.\n", |
||||
|
pParam->B3SOIPDleffCV); |
||||
|
} |
||||
|
|
||||
|
if (pParam->B3SOIPDweff <= 1.0e-7) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: Weff = %g may be too small.\n", |
||||
|
pParam->B3SOIPDweff); |
||||
|
printf ("Warning: Weff = %g may be too small.\n", |
||||
|
pParam->B3SOIPDweff); |
||||
|
} |
||||
|
|
||||
|
if (pParam->B3SOIPDweffCV <= 1.0e-7) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: Weff for CV = %g may be too small.\n", |
||||
|
pParam->B3SOIPDweffCV); |
||||
|
printf ("Warning: Weff for CV = %g may be too small.\n", |
||||
|
pParam->B3SOIPDweffCV); |
||||
|
} |
||||
|
|
||||
|
/* Check threshold voltage parameters */ |
||||
|
if (pParam->B3SOIPDnlx < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: Nlx = %g is negative.\n", |
||||
|
pParam->B3SOIPDnlx); |
||||
|
printf ("Warning: Nlx = %g is negative.\n", pParam->B3SOIPDnlx); |
||||
|
} |
||||
|
if (model->B3SOIPDtox < 1.0e-9) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: Tox = %g is less than 10A.\n", |
||||
|
model->B3SOIPDtox); |
||||
|
printf ("Warning: Tox = %g is less than 10A.\n", |
||||
|
model->B3SOIPDtox); |
||||
|
} |
||||
|
|
||||
|
if (pParam->B3SOIPDnpeak <= 1.0e15) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: Nch = %g may be too small.\n", |
||||
|
pParam->B3SOIPDnpeak); |
||||
|
printf ("Warning: Nch = %g may be too small.\n", |
||||
|
pParam->B3SOIPDnpeak); |
||||
|
} |
||||
|
else if (pParam->B3SOIPDnpeak >= 1.0e21) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: Nch = %g may be too large.\n", |
||||
|
pParam->B3SOIPDnpeak); |
||||
|
printf ("Warning: Nch = %g may be too large.\n", |
||||
|
pParam->B3SOIPDnpeak); |
||||
|
} |
||||
|
|
||||
|
if (fabs (pParam->B3SOIPDnsub) >= 1.0e21) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: Nsub = %g may be too large.\n", |
||||
|
pParam->B3SOIPDnsub); |
||||
|
printf ("Warning: Nsub = %g may be too large.\n", |
||||
|
pParam->B3SOIPDnsub); |
||||
|
} |
||||
|
|
||||
|
if ((pParam->B3SOIPDngate > 0.0) && (pParam->B3SOIPDngate <= 1.e18)) |
||||
|
{ |
||||
|
fprintf (fplog, |
||||
|
"Warning: Ngate = %g is less than 1.E18cm^-3.\n", |
||||
|
pParam->B3SOIPDngate); |
||||
|
printf ("Warning: Ngate = %g is less than 1.E18cm^-3.\n", |
||||
|
pParam->B3SOIPDngate); |
||||
|
} |
||||
|
|
||||
|
if (pParam->B3SOIPDdvt0 < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: Dvt0 = %g is negative.\n", |
||||
|
pParam->B3SOIPDdvt0); |
||||
|
printf ("Warning: Dvt0 = %g is negative.\n", |
||||
|
pParam->B3SOIPDdvt0); |
||||
|
} |
||||
|
|
||||
|
if (fabs (1.0e-6 / (pParam->B3SOIPDw0 + pParam->B3SOIPDweff)) > |
||||
|
10.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: (W0 + Weff) may be too small.\n"); |
||||
|
printf ("Warning: (W0 + Weff) may be too small.\n"); |
||||
|
} |
||||
|
|
||||
|
/* Check subthreshold parameters */ |
||||
|
if (pParam->B3SOIPDnfactor < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: Nfactor = %g is negative.\n", |
||||
|
pParam->B3SOIPDnfactor); |
||||
|
printf ("Warning: Nfactor = %g is negative.\n", |
||||
|
pParam->B3SOIPDnfactor); |
||||
|
} |
||||
|
if (pParam->B3SOIPDcdsc < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: Cdsc = %g is negative.\n", |
||||
|
pParam->B3SOIPDcdsc); |
||||
|
printf ("Warning: Cdsc = %g is negative.\n", |
||||
|
pParam->B3SOIPDcdsc); |
||||
|
} |
||||
|
if (pParam->B3SOIPDcdscd < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: Cdscd = %g is negative.\n", |
||||
|
pParam->B3SOIPDcdscd); |
||||
|
printf ("Warning: Cdscd = %g is negative.\n", |
||||
|
pParam->B3SOIPDcdscd); |
||||
|
} |
||||
|
/* Check DIBL parameters */ |
||||
|
if (pParam->B3SOIPDeta0 < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: Eta0 = %g is negative.\n", |
||||
|
pParam->B3SOIPDeta0); |
||||
|
printf ("Warning: Eta0 = %g is negative.\n", |
||||
|
pParam->B3SOIPDeta0); |
||||
|
} |
||||
|
|
||||
|
/* Check Abulk parameters */ |
||||
|
if (fabs (1.0e-6 / (pParam->B3SOIPDb1 + pParam->B3SOIPDweff)) > |
||||
|
10.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: (B1 + Weff) may be too small.\n"); |
||||
|
printf ("Warning: (B1 + Weff) may be too small.\n"); |
||||
|
} |
||||
|
|
||||
|
/* Check Saturation parameters */ |
||||
|
if (pParam->B3SOIPDa2 < 0.01) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: A2 = %g is too small. Set to 0.01.\n", |
||||
|
pParam->B3SOIPDa2); |
||||
|
printf ("Warning: A2 = %g is too small. Set to 0.01.\n", |
||||
|
pParam->B3SOIPDa2); |
||||
|
pParam->B3SOIPDa2 = 0.01; |
||||
|
} |
||||
|
else if (pParam->B3SOIPDa2 > 1.0) |
||||
|
{ |
||||
|
fprintf (fplog, |
||||
|
"Warning: A2 = %g is larger than 1. A2 is set to 1 and A1 is set to 0.\n", |
||||
|
pParam->B3SOIPDa2); |
||||
|
printf |
||||
|
("Warning: A2 = %g is larger than 1. A2 is set to 1 and A1 is set to 0.\n", |
||||
|
pParam->B3SOIPDa2); |
||||
|
pParam->B3SOIPDa2 = 1.0; |
||||
|
pParam->B3SOIPDa1 = 0.0; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
if (pParam->B3SOIPDrdsw < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, |
||||
|
"Warning: Rdsw = %g is negative. Set to zero.\n", |
||||
|
pParam->B3SOIPDrdsw); |
||||
|
printf ("Warning: Rdsw = %g is negative. Set to zero.\n", |
||||
|
pParam->B3SOIPDrdsw); |
||||
|
pParam->B3SOIPDrdsw = 0.0; |
||||
|
pParam->B3SOIPDrds0 = 0.0; |
||||
|
} |
||||
|
else if ((pParam->B3SOIPDrds0 > 0.0) |
||||
|
&& (pParam->B3SOIPDrds0 < 0.001)) |
||||
|
{ |
||||
|
fprintf (fplog, |
||||
|
"Warning: Rds at current temperature = %g is less than 0.001 ohm. Set to zero.\n", |
||||
|
pParam->B3SOIPDrds0); |
||||
|
printf |
||||
|
("Warning: Rds at current temperature = %g is less than 0.001 ohm. Set to zero.\n", |
||||
|
pParam->B3SOIPDrds0); |
||||
|
pParam->B3SOIPDrds0 = 0.0; |
||||
|
} |
||||
|
if (pParam->B3SOIPDvsattemp < 1.0e3) |
||||
|
{ |
||||
|
fprintf (fplog, |
||||
|
"Warning: Vsat at current temperature = %g may be too small.\n", |
||||
|
pParam->B3SOIPDvsattemp); |
||||
|
printf |
||||
|
("Warning: Vsat at current temperature = %g may be too small.\n", |
||||
|
pParam->B3SOIPDvsattemp); |
||||
|
} |
||||
|
|
||||
|
if (pParam->B3SOIPDpdibl1 < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: Pdibl1 = %g is negative.\n", |
||||
|
pParam->B3SOIPDpdibl1); |
||||
|
printf ("Warning: Pdibl1 = %g is negative.\n", |
||||
|
pParam->B3SOIPDpdibl1); |
||||
|
} |
||||
|
if (pParam->B3SOIPDpdibl2 < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: Pdibl2 = %g is negative.\n", |
||||
|
pParam->B3SOIPDpdibl2); |
||||
|
printf ("Warning: Pdibl2 = %g is negative.\n", |
||||
|
pParam->B3SOIPDpdibl2); |
||||
|
} |
||||
|
/* Check overlap capacitance parameters */ |
||||
|
if (model->B3SOIPDcgdo < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, |
||||
|
"Warning: cgdo = %g is negative. Set to zero.\n", |
||||
|
model->B3SOIPDcgdo); |
||||
|
printf ("Warning: cgdo = %g is negative. Set to zero.\n", |
||||
|
model->B3SOIPDcgdo); |
||||
|
model->B3SOIPDcgdo = 0.0; |
||||
|
} |
||||
|
if (model->B3SOIPDcgso < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, |
||||
|
"Warning: cgso = %g is negative. Set to zero.\n", |
||||
|
model->B3SOIPDcgso); |
||||
|
printf ("Warning: cgso = %g is negative. Set to zero.\n", |
||||
|
model->B3SOIPDcgso); |
||||
|
model->B3SOIPDcgso = 0.0; |
||||
|
} |
||||
|
if (model->B3SOIPDcgeo < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, |
||||
|
"Warning: cgeo = %g is negative. Set to zero.\n", |
||||
|
model->B3SOIPDcgeo); |
||||
|
printf ("Warning: cgeo = %g is negative. Set to zero.\n", |
||||
|
model->B3SOIPDcgeo); |
||||
|
model->B3SOIPDcgeo = 0.0; |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIPDntun < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: Ntun = %g is negative.\n", |
||||
|
model->B3SOIPDntun); |
||||
|
printf ("Warning: Ntun = %g is negative.\n", |
||||
|
model->B3SOIPDntun); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIPDndiode < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: Ndiode = %g is negative.\n", |
||||
|
model->B3SOIPDndiode); |
||||
|
printf ("Warning: Ndiode = %g is negative.\n", |
||||
|
model->B3SOIPDndiode); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIPDisbjt < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: Isbjt = %g is negative.\n", |
||||
|
model->B3SOIPDisbjt); |
||||
|
printf ("Warning: Isbjt = %g is negative.\n", |
||||
|
model->B3SOIPDisbjt); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIPDisdif < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: Isdif = %g is negative.\n", |
||||
|
model->B3SOIPDisdif); |
||||
|
printf ("Warning: Isdif = %g is negative.\n", |
||||
|
model->B3SOIPDisdif); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIPDisrec < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: Isrec = %g is negative.\n", |
||||
|
model->B3SOIPDisrec); |
||||
|
printf ("Warning: Isrec = %g is negative.\n", |
||||
|
model->B3SOIPDisrec); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIPDistun < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: Istun = %g is negative.\n", |
||||
|
model->B3SOIPDistun); |
||||
|
printf ("Warning: Istun = %g is negative.\n", |
||||
|
model->B3SOIPDistun); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIPDtt < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: Tt = %g is negative.\n", |
||||
|
model->B3SOIPDtt); |
||||
|
printf ("Warning: Tt = %g is negative.\n", model->B3SOIPDtt); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIPDcsdmin < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: Csdmin = %g is negative.\n", |
||||
|
model->B3SOIPDcsdmin); |
||||
|
printf ("Warning: Csdmin = %g is negative.\n", |
||||
|
model->B3SOIPDcsdmin); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIPDcsdesw < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: Csdesw = %g is negative.\n", |
||||
|
model->B3SOIPDcsdesw); |
||||
|
printf ("Warning: Csdesw = %g is negative.\n", |
||||
|
model->B3SOIPDcsdesw); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIPDasd < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: Asd = %g should be within (0, 1).\n", |
||||
|
model->B3SOIPDasd); |
||||
|
printf ("Warning: Asd = %g should be within (0, 1).\n", |
||||
|
model->B3SOIPDasd); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIPDrth0 < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: Rth0 = %g is negative.\n", |
||||
|
model->B3SOIPDrth0); |
||||
|
printf ("Warning: Rth0 = %g is negative.\n", |
||||
|
model->B3SOIPDrth0); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIPDcth0 < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: Cth0 = %g is negative.\n", |
||||
|
model->B3SOIPDcth0); |
||||
|
printf ("Warning: Cth0 = %g is negative.\n", |
||||
|
model->B3SOIPDcth0); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIPDrbody < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: Rbody = %g is negative.\n", |
||||
|
model->B3SOIPDrbody); |
||||
|
printf ("Warning: Rbody = %g is negative.\n", |
||||
|
model->B3SOIPDrbody); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIPDrbsh < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: Rbsh = %g is negative.\n", |
||||
|
model->B3SOIPDrbsh); |
||||
|
printf ("Warning: Rbsh = %g is negative.\n", |
||||
|
model->B3SOIPDrbsh); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
/* v2.2 release */ |
||||
|
if (model->B3SOIPDwth0 < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: WTH0 = %g is negative.\n", |
||||
|
model->B3SOIPDwth0); |
||||
|
printf ("Warning: Wth0 = %g is negative.\n", |
||||
|
model->B3SOIPDwth0); |
||||
|
} |
||||
|
if (model->B3SOIPDrhalo < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: RHALO = %g is negative.\n", |
||||
|
model->B3SOIPDrhalo); |
||||
|
printf ("Warning: Rhalo = %g is negative.\n", |
||||
|
model->B3SOIPDrhalo); |
||||
|
} |
||||
|
if (model->B3SOIPDntox < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: NTOX = %g is negative.\n", |
||||
|
model->B3SOIPDntox); |
||||
|
printf ("Warning: Ntox = %g is negative.\n", |
||||
|
model->B3SOIPDntox); |
||||
|
} |
||||
|
if (model->B3SOIPDtoxref < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: TOXREF = %g is negative.\n", |
||||
|
model->B3SOIPDtoxref); |
||||
|
printf ("Warning: Toxref = %g is negative.\n", |
||||
|
model->B3SOIPDtoxref); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
if (model->B3SOIPDebg < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: EBG = %g is negative.\n", |
||||
|
model->B3SOIPDebg); |
||||
|
printf ("Warning: Ebg = %g is negative.\n", model->B3SOIPDebg); |
||||
|
} |
||||
|
if (model->B3SOIPDnevb < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: NEVB = %g is negative.\n", |
||||
|
model->B3SOIPDnevb); |
||||
|
printf ("Warning: Nevb = %g is negative.\n", |
||||
|
model->B3SOIPDnevb); |
||||
|
} |
||||
|
if (model->B3SOIPDalphaGB1 < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: ALPHAGB1 = %g is negative.\n", |
||||
|
model->B3SOIPDalphaGB1); |
||||
|
printf ("Warning: AlphaGB1 = %g is negative.\n", |
||||
|
model->B3SOIPDalphaGB1); |
||||
|
} |
||||
|
if (model->B3SOIPDbetaGB1 < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: BETAGB1 = %g is negative.\n", |
||||
|
model->B3SOIPDbetaGB1); |
||||
|
printf ("Warning: BetaGB1 = %g is negative.\n", |
||||
|
model->B3SOIPDbetaGB1); |
||||
|
} |
||||
|
if (model->B3SOIPDvgb1 < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: VGB1 = %g is negative.\n", |
||||
|
model->B3SOIPDvgb1); |
||||
|
printf ("Warning: Vgb1 = %g is negative.\n", |
||||
|
model->B3SOIPDvgb1); |
||||
|
} |
||||
|
if (model->B3SOIPDnecb < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: NECB = %g is negative.\n", |
||||
|
model->B3SOIPDnecb); |
||||
|
printf ("Warning: Necb = %g is negative.\n", |
||||
|
model->B3SOIPDnecb); |
||||
|
} |
||||
|
if (model->B3SOIPDalphaGB2 < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: ALPHAGB2 = %g is negative.\n", |
||||
|
model->B3SOIPDalphaGB2); |
||||
|
printf ("Warning: AlphaGB2 = %g is negative.\n", |
||||
|
model->B3SOIPDalphaGB2); |
||||
|
} |
||||
|
if (model->B3SOIPDbetaGB2 < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: BETAGB2 = %g is negative.\n", |
||||
|
model->B3SOIPDbetaGB2); |
||||
|
printf ("Warning: BetaGB2 = %g is negative.\n", |
||||
|
model->B3SOIPDbetaGB2); |
||||
|
} |
||||
|
if (model->B3SOIPDvgb2 < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: VGB2 = %g is negative.\n", |
||||
|
model->B3SOIPDvgb2); |
||||
|
printf ("Warning: Vgb2 = %g is negative.\n", |
||||
|
model->B3SOIPDvgb2); |
||||
|
} |
||||
|
if (model->B3SOIPDtoxqm <= 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Fatal: Toxqm = %g is not positive.\n", |
||||
|
model->B3SOIPDtoxqm); |
||||
|
printf ("Fatal: Toxqm = %g is not positive.\n", |
||||
|
model->B3SOIPDtoxqm); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
if (model->B3SOIPDvoxh < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: Voxh = %g is negative.\n", |
||||
|
model->B3SOIPDvoxh); |
||||
|
printf ("Warning: Voxh = %g is negative.\n", |
||||
|
model->B3SOIPDvoxh); |
||||
|
} |
||||
|
if (model->B3SOIPDdeltavox <= 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Fatal: Deltavox = %g is not positive.\n", |
||||
|
model->B3SOIPDdeltavox); |
||||
|
printf ("Fatal: Deltavox = %g is not positive.\n", |
||||
|
model->B3SOIPDdeltavox); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
/* v2.0 release */ |
||||
|
if (model->B3SOIPDk1w1 < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: K1W1 = %g is negative.\n", |
||||
|
model->B3SOIPDk1w1); |
||||
|
printf ("Warning: K1w1 = %g is negative.\n", |
||||
|
model->B3SOIPDk1w1); |
||||
|
} |
||||
|
if (model->B3SOIPDk1w2 < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: K1W2 = %g is negative.\n", |
||||
|
model->B3SOIPDk1w2); |
||||
|
printf ("Warning: K1w2 = %g is negative.\n", |
||||
|
model->B3SOIPDk1w2); |
||||
|
} |
||||
|
if (model->B3SOIPDketas < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: KETAS = %g is negative.\n", |
||||
|
model->B3SOIPDketas); |
||||
|
printf ("Warning: Ketas = %g is negative.\n", |
||||
|
model->B3SOIPDketas); |
||||
|
} |
||||
|
if (model->B3SOIPDdwbc < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: DWBC = %g is negative.\n", |
||||
|
model->B3SOIPDdwbc); |
||||
|
printf ("Warning: Dwbc = %g is negative.\n", |
||||
|
model->B3SOIPDdwbc); |
||||
|
} |
||||
|
if (model->B3SOIPDbeta0 < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: BETA0 = %g is negative.\n", |
||||
|
model->B3SOIPDbeta0); |
||||
|
printf ("Warning: Beta0 = %g is negative.\n", |
||||
|
model->B3SOIPDbeta0); |
||||
|
} |
||||
|
if (model->B3SOIPDbeta1 < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: BETA1 = %g is negative.\n", |
||||
|
model->B3SOIPDbeta1); |
||||
|
printf ("Warning: Beta1 = %g is negative.\n", |
||||
|
model->B3SOIPDbeta1); |
||||
|
} |
||||
|
if (model->B3SOIPDbeta2 < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: BETA2 = %g is negative.\n", |
||||
|
model->B3SOIPDbeta2); |
||||
|
printf ("Warning: Beta2 = %g is negative.\n", |
||||
|
model->B3SOIPDbeta2); |
||||
|
} |
||||
|
if (model->B3SOIPDtii < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: TII = %g is negative.\n", |
||||
|
model->B3SOIPDtii); |
||||
|
printf ("Warning: Tii = %g is negative.\n", model->B3SOIPDtii); |
||||
|
} |
||||
|
if (model->B3SOIPDlii < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: LII = %g is negative.\n", |
||||
|
model->B3SOIPDlii); |
||||
|
printf ("Warning: Lii = %g is negative.\n", model->B3SOIPDlii); |
||||
|
} |
||||
|
if (model->B3SOIPDsii1 < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: SII1 = %g is negative.\n", |
||||
|
model->B3SOIPDsii1); |
||||
|
printf ("Warning: Sii1 = %g is negative.\n", |
||||
|
model->B3SOIPDsii1); |
||||
|
} |
||||
|
if (model->B3SOIPDsii2 < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: SII2 = %g is negative.\n", |
||||
|
model->B3SOIPDsii2); |
||||
|
printf ("Warning: Sii2 = %g is negative.\n", |
||||
|
model->B3SOIPDsii1); |
||||
|
} |
||||
|
if (model->B3SOIPDsiid < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: SIID = %g is negative.\n", |
||||
|
model->B3SOIPDsiid); |
||||
|
printf ("Warning: Siid = %g is negative.\n", |
||||
|
model->B3SOIPDsiid); |
||||
|
} |
||||
|
if (model->B3SOIPDfbjtii < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: FBJTII = %g is negative.\n", |
||||
|
model->B3SOIPDfbjtii); |
||||
|
printf ("Warning: fbjtii = %g is negative.\n", |
||||
|
model->B3SOIPDfbjtii); |
||||
|
} |
||||
|
if (model->B3SOIPDvrec0 < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: VREC0 = %g is negative.\n", |
||||
|
model->B3SOIPDvrec0); |
||||
|
printf ("Warning: Vrec0 = %g is negative.\n", |
||||
|
model->B3SOIPDvrec0); |
||||
|
} |
||||
|
if (model->B3SOIPDvtun0 < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: VTUN0 = %g is negative.\n", |
||||
|
model->B3SOIPDvtun0); |
||||
|
printf ("Warning: Vtun0 = %g is negative.\n", |
||||
|
model->B3SOIPDvtun0); |
||||
|
} |
||||
|
if (model->B3SOIPDnbjt < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: NBJT = %g is negative.\n", |
||||
|
model->B3SOIPDnbjt); |
||||
|
printf ("Warning: Nbjt = %g is negative.\n", |
||||
|
model->B3SOIPDnbjt); |
||||
|
} |
||||
|
if (model->B3SOIPDaely < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: AELY = %g is negative.\n", |
||||
|
model->B3SOIPDaely); |
||||
|
printf ("Warning: Aely = %g is negative.\n", |
||||
|
model->B3SOIPDaely); |
||||
|
} |
||||
|
if (model->B3SOIPDahli < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: AHLI = %g is negative.\n", |
||||
|
model->B3SOIPDahli); |
||||
|
printf ("Warning: Ahli = %g is negative.\n", |
||||
|
model->B3SOIPDahli); |
||||
|
} |
||||
|
if (model->B3SOIPDrbody < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: RBODY = %g is negative.\n", |
||||
|
model->B3SOIPDrbody); |
||||
|
printf ("Warning: Rbody = %g is negative.\n", |
||||
|
model->B3SOIPDrbody); |
||||
|
} |
||||
|
if (model->B3SOIPDrbsh < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: RBSH = %g is negative.\n", |
||||
|
model->B3SOIPDrbsh); |
||||
|
printf ("Warning: Rbsh = %g is negative.\n", |
||||
|
model->B3SOIPDrbsh); |
||||
|
} |
||||
|
if (model->B3SOIPDntrecf < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: NTRECF = %g is negative.\n", |
||||
|
model->B3SOIPDntrecf); |
||||
|
printf ("Warning: Ntrecf = %g is negative.\n", |
||||
|
model->B3SOIPDntrecf); |
||||
|
} |
||||
|
if (model->B3SOIPDntrecr < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: NTRECR = %g is negative.\n", |
||||
|
model->B3SOIPDntrecr); |
||||
|
printf ("Warning: Ntrecr = %g is negative.\n", |
||||
|
model->B3SOIPDntrecr); |
||||
|
} |
||||
|
if (model->B3SOIPDndif < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: NDIF = %g is negative.\n", |
||||
|
model->B3SOIPDndif); |
||||
|
printf ("Warning: Ndif = %g is negative.\n", |
||||
|
model->B3SOIPDndif); |
||||
|
} |
||||
|
if (model->B3SOIPDtcjswg < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: TCJSWG = %g is negative.\n", |
||||
|
model->B3SOIPDtcjswg); |
||||
|
printf ("Warning: Tcjswg = %g is negative.\n", |
||||
|
model->B3SOIPDtcjswg); |
||||
|
} |
||||
|
if (model->B3SOIPDtpbswg < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: TPBSWG = %g is negative.\n", |
||||
|
model->B3SOIPDtpbswg); |
||||
|
printf ("Warning: Tpbswg = %g is negative.\n", |
||||
|
model->B3SOIPDtpbswg); |
||||
|
} |
||||
|
if ((model->B3SOIPDacde < 0.4) || (model->B3SOIPDacde > 1.6)) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: ACDE = %g is out of range.\n", |
||||
|
model->B3SOIPDacde); |
||||
|
printf ("Warning: Acde = %g is out of range.\n", |
||||
|
model->B3SOIPDacde); |
||||
|
} |
||||
|
if ((model->B3SOIPDmoin < 5.0) || (model->B3SOIPDmoin > 25.0)) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: MOIN = %g is out of range.\n", |
||||
|
model->B3SOIPDmoin); |
||||
|
printf ("Warning: Moin = %g is out of range.\n", |
||||
|
model->B3SOIPDmoin); |
||||
|
} |
||||
|
if (model->B3SOIPDdlbg < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: DLBG = %g is negative.\n", |
||||
|
model->B3SOIPDdlbg); |
||||
|
printf ("Warning: dlbg = %g is negative.\n", |
||||
|
model->B3SOIPDdlbg); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
if (model->B3SOIPDagidl < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: AGIDL = %g is negative.\n", |
||||
|
model->B3SOIPDagidl); |
||||
|
printf ("Warning: Agidl = %g is negative.\n", |
||||
|
model->B3SOIPDagidl); |
||||
|
} |
||||
|
if (model->B3SOIPDbgidl < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: BGIDL = %g is negative.\n", |
||||
|
model->B3SOIPDbgidl); |
||||
|
printf ("Warning: Bgidl = %g is negative.\n", |
||||
|
model->B3SOIPDbgidl); |
||||
|
} |
||||
|
if (model->B3SOIPDngidl < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: NGIDL = %g is negative.\n", |
||||
|
model->B3SOIPDngidl); |
||||
|
printf ("Warning: Ngidl = %g is negative.\n", |
||||
|
model->B3SOIPDngidl); |
||||
|
} |
||||
|
if (model->B3SOIPDesatii < 0.0) |
||||
|
{ |
||||
|
fprintf (fplog, |
||||
|
"Warning: Esatii = %g should be within positive.\n", |
||||
|
model->B3SOIPDesatii); |
||||
|
printf ("Warning: Esatii = %g should be within (0, 1).\n", |
||||
|
model->B3SOIPDesatii); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
if (model->B3SOIPDxj > model->B3SOIPDtsi) |
||||
|
{ |
||||
|
fprintf (fplog, "Warning: Xj = %g is thicker than Tsi = %g.\n", |
||||
|
model->B3SOIPDxj, model->B3SOIPDtsi); |
||||
|
printf ("Warning: Xj = %g is thicker than Tsi = %g.\n", |
||||
|
model->B3SOIPDxj, model->B3SOIPDtsi); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIPDcapMod < 2) |
||||
|
{ |
||||
|
fprintf (fplog, |
||||
|
"Warning: capMod < 2 is not supported by BSIM3SOI.\n"); |
||||
|
printf |
||||
|
("Warning: Warning: capMod < 2 is not supported by BSIM3SOI.\n"); |
||||
|
} |
||||
|
|
||||
|
} /* loop for the parameter check for warning messages */ |
||||
|
fclose (fplog); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
fprintf (stderr, |
||||
|
"Warning: Can't open log file. Parameter checking skipped.\n"); |
||||
|
} |
||||
|
|
||||
|
return (Fatal_Flag); |
||||
|
} |
||||
@ -0,0 +1,95 @@ |
|||||
|
/********** |
||||
|
Copyright 1990 Regents of the University of California. All rights reserved. |
||||
|
Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang |
||||
|
File: b3soipdcvtest.c 98/5/01 |
||||
|
**********/ |
||||
|
|
||||
|
|
||||
|
#include "ngspice.h" |
||||
|
#include <stdio.h> |
||||
|
#include <math.h> |
||||
|
#include "cktdefs.h" |
||||
|
#include "b3soipddef.h" |
||||
|
#include "trandefs.h" |
||||
|
#include "const.h" |
||||
|
#include "devdefs.h" |
||||
|
#include "sperror.h" |
||||
|
#include "suffix.h" |
||||
|
|
||||
|
|
||||
|
int |
||||
|
B3SOIPDconvTest (inModel, ckt) |
||||
|
GENmodel *inModel; |
||||
|
register CKTcircuit *ckt; |
||||
|
{ |
||||
|
register B3SOIPDmodel *model = (B3SOIPDmodel *) inModel; |
||||
|
register B3SOIPDinstance *here; |
||||
|
double delvbd, delvbs, delvds, delvgd, delvgs, vbd, vbs, vds; |
||||
|
double cbd, cbhat, cbs, cd, cdhat, tol, vgd, vgdo, vgs; |
||||
|
|
||||
|
/* loop through all the B3SOIPD device models */ |
||||
|
for (; model != NULL; model = model->B3SOIPDnextModel) |
||||
|
{ /* loop through all the instances of the model */ |
||||
|
for (here = model->B3SOIPDinstances; here != NULL; |
||||
|
here = here->B3SOIPDnextInstance) |
||||
|
{ |
||||
|
vbs = model->B3SOIPDtype |
||||
|
* (*(ckt->CKTrhsOld + here->B3SOIPDbNode) |
||||
|
- *(ckt->CKTrhsOld + here->B3SOIPDsNodePrime)); |
||||
|
vgs = model->B3SOIPDtype |
||||
|
* (*(ckt->CKTrhsOld + here->B3SOIPDgNode) |
||||
|
- *(ckt->CKTrhsOld + here->B3SOIPDsNodePrime)); |
||||
|
vds = model->B3SOIPDtype |
||||
|
* (*(ckt->CKTrhsOld + here->B3SOIPDdNodePrime) |
||||
|
- *(ckt->CKTrhsOld + here->B3SOIPDsNodePrime)); |
||||
|
vbd = vbs - vds; |
||||
|
vgd = vgs - vds; |
||||
|
vgdo = *(ckt->CKTstate0 + here->B3SOIPDvgs) |
||||
|
- *(ckt->CKTstate0 + here->B3SOIPDvds); |
||||
|
delvbs = vbs - *(ckt->CKTstate0 + here->B3SOIPDvbs); |
||||
|
delvbd = vbd - *(ckt->CKTstate0 + here->B3SOIPDvbd); |
||||
|
delvgs = vgs - *(ckt->CKTstate0 + here->B3SOIPDvgs); |
||||
|
delvds = vds - *(ckt->CKTstate0 + here->B3SOIPDvds); |
||||
|
delvgd = vgd - vgdo; |
||||
|
|
||||
|
cd = here->B3SOIPDcd; |
||||
|
if (here->B3SOIPDmode >= 0) |
||||
|
{ |
||||
|
cdhat = cd - here->B3SOIPDgjdb * delvbd |
||||
|
+ here->B3SOIPDgmbs * delvbs + here->B3SOIPDgm * delvgs |
||||
|
+ here->B3SOIPDgds * delvds; |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
cdhat = cd - (here->B3SOIPDgjdb - here->B3SOIPDgmbs) * delvbd |
||||
|
- here->B3SOIPDgm * delvgd + here->B3SOIPDgds * delvds; |
||||
|
} |
||||
|
|
||||
|
/* |
||||
|
* check convergence |
||||
|
*/ |
||||
|
if ((here->B3SOIPDoff == 0) || (!(ckt->CKTmode & MODEINITFIX))) |
||||
|
{ |
||||
|
tol = ckt->CKTreltol * MAX (fabs (cdhat), fabs (cd)) |
||||
|
+ ckt->CKTabstol; |
||||
|
if (fabs (cdhat - cd) >= tol) |
||||
|
{ |
||||
|
ckt->CKTnoncon++; |
||||
|
return (OK); |
||||
|
} |
||||
|
cbs = here->B3SOIPDcjs; |
||||
|
cbd = here->B3SOIPDcjd; |
||||
|
cbhat = cbs + cbd + here->B3SOIPDgjdb * delvbd |
||||
|
+ here->B3SOIPDgjsb * delvbs; |
||||
|
tol = ckt->CKTreltol * MAX (fabs (cbhat), fabs (cbs + cbd)) |
||||
|
+ ckt->CKTabstol; |
||||
|
if (fabs (cbhat - (cbs + cbd)) > tol) |
||||
|
{ |
||||
|
ckt->CKTnoncon++; |
||||
|
return (OK); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
return (OK); |
||||
|
} |
||||
2185
src/spicelib/devices/bsim3soi_pd/b3soipddef.h
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,42 @@ |
|||||
|
/********** |
||||
|
Copyright 1990 Regents of the University of California. All rights reserved. |
||||
|
Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang |
||||
|
File: b3soipddel.c 98/5/01 |
||||
|
**********/ |
||||
|
|
||||
|
|
||||
|
#include "ngspice.h" |
||||
|
#include <stdio.h> |
||||
|
#include "b3soipddef.h" |
||||
|
#include "sperror.h" |
||||
|
#include "gendefs.h" |
||||
|
#include "suffix.h" |
||||
|
|
||||
|
|
||||
|
int |
||||
|
B3SOIPDdelete (inModel, name, inInst) |
||||
|
GENmodel *inModel; |
||||
|
IFuid name; |
||||
|
GENinstance **inInst; |
||||
|
{ |
||||
|
B3SOIPDinstance **fast = (B3SOIPDinstance **) inInst; |
||||
|
B3SOIPDmodel *model = (B3SOIPDmodel *) inModel; |
||||
|
B3SOIPDinstance **prev = NULL; |
||||
|
B3SOIPDinstance *here; |
||||
|
|
||||
|
for (; model; model = model->B3SOIPDnextModel) |
||||
|
{ |
||||
|
prev = &(model->B3SOIPDinstances); |
||||
|
for (here = *prev; here; here = *prev) |
||||
|
{ |
||||
|
if (here->B3SOIPDname == name || (fast && here == *fast)) |
||||
|
{ |
||||
|
*prev = here->B3SOIPDnextInstance; |
||||
|
FREE (here); |
||||
|
return (OK); |
||||
|
} |
||||
|
prev = &(here->B3SOIPDnextInstance); |
||||
|
} |
||||
|
} |
||||
|
return (E_NODEV); |
||||
|
} |
||||
@ -0,0 +1,43 @@ |
|||||
|
/********** |
||||
|
Copyright 1990 Regents of the University of California. All rights reserved. |
||||
|
Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang |
||||
|
File: b3soipddest.c 98/5/01 |
||||
|
**********/ |
||||
|
|
||||
|
|
||||
|
#include "ngspice.h" |
||||
|
#include <stdio.h> |
||||
|
#include "b3soipddef.h" |
||||
|
#include "suffix.h" |
||||
|
|
||||
|
void |
||||
|
B3SOIPDdestroy (inModel) |
||||
|
GENmodel **inModel; |
||||
|
{ |
||||
|
B3SOIPDmodel **model = (B3SOIPDmodel **) inModel; |
||||
|
B3SOIPDinstance *here; |
||||
|
B3SOIPDinstance *prev = NULL; |
||||
|
B3SOIPDmodel *mod = *model; |
||||
|
B3SOIPDmodel *oldmod = NULL; |
||||
|
|
||||
|
for (; mod; mod = mod->B3SOIPDnextModel) |
||||
|
{ |
||||
|
if (oldmod) |
||||
|
FREE (oldmod); |
||||
|
oldmod = mod; |
||||
|
prev = (B3SOIPDinstance *) NULL; |
||||
|
for (here = mod->B3SOIPDinstances; here; |
||||
|
here = here->B3SOIPDnextInstance) |
||||
|
{ |
||||
|
if (prev) |
||||
|
FREE (prev); |
||||
|
prev = here; |
||||
|
} |
||||
|
if (prev) |
||||
|
FREE (prev); |
||||
|
} |
||||
|
if (oldmod) |
||||
|
FREE (oldmod); |
||||
|
*model = NULL; |
||||
|
return; |
||||
|
} |
||||
@ -0,0 +1,55 @@ |
|||||
|
/********** |
||||
|
Copyright 1990 Regents of the University of California. All rights reserved. |
||||
|
Author: 1998 Samuel Fung |
||||
|
File: b3soipdext.h |
||||
|
**********/ |
||||
|
|
||||
|
#ifdef __STDC__ |
||||
|
extern int B3SOIPDacLoad (GENmodel *, CKTcircuit *); |
||||
|
extern int B3SOIPDask (CKTcircuit *, GENinstance *, int, IFvalue *, |
||||
|
IFvalue *); |
||||
|
extern int B3SOIPDconvTest (GENmodel *, CKTcircuit *); |
||||
|
extern int B3SOIPDdelete (GENmodel *, IFuid, GENinstance **); |
||||
|
extern void B3SOIPDdestroy (GENmodel **); |
||||
|
extern int B3SOIPDgetic (GENmodel *, CKTcircuit *); |
||||
|
extern int B3SOIPDload (GENmodel *, CKTcircuit *); |
||||
|
extern int B3SOIPDmAsk (CKTcircuit *, GENmodel *, int, IFvalue *); |
||||
|
extern int B3SOIPDmDelete (GENmodel **, IFuid, GENmodel *); |
||||
|
extern int B3SOIPDmParam (int, IFvalue *, GENmodel *); |
||||
|
extern void B3SOIPDmosCap (CKTcircuit *, double, double, double, double, |
||||
|
double, double, double, double, double, double, |
||||
|
double, double, double, double, double, double, |
||||
|
double, double *, double *, double *, double *, |
||||
|
double *, double *, double *, double *, double *, |
||||
|
double *, double *, double *, double *, double *, |
||||
|
double *, double *); |
||||
|
extern int B3SOIPDparam (int, IFvalue *, GENinstance *, IFvalue *); |
||||
|
extern int B3SOIPDpzLoad (GENmodel *, CKTcircuit *, SPcomplex *); |
||||
|
extern int B3SOIPDsetup (SMPmatrix *, GENmodel *, CKTcircuit *, int *); |
||||
|
extern int B3SOIPDtemp (GENmodel *, CKTcircuit *); |
||||
|
extern int B3SOIPDtrunc (GENmodel *, CKTcircuit *, double *); |
||||
|
extern int B3SOIPDnoise (int, int, GENmodel *, CKTcircuit *, Ndata *, |
||||
|
double *); |
||||
|
extern int B3SOIPDunsetup (GENmodel *, CKTcircuit *); |
||||
|
|
||||
|
#else /* stdc */ |
||||
|
extern int B3SOIPDacLoad (); |
||||
|
extern int B3SOIPDdelete (); |
||||
|
extern void B3SOIPDdestroy (); |
||||
|
extern int B3SOIPDgetic (); |
||||
|
extern int B3SOIPDload (); |
||||
|
extern int B3SOIPDmDelete (); |
||||
|
extern int B3SOIPDask (); |
||||
|
extern int B3SOIPDmAsk (); |
||||
|
extern int B3SOIPDconvTest (); |
||||
|
extern int B3SOIPDtemp (); |
||||
|
extern int B3SOIPDmParam (); |
||||
|
extern void B3SOIPDmosCap (); |
||||
|
extern int B3SOIPDparam (); |
||||
|
extern int B3SOIPDpzLoad (); |
||||
|
extern int B3SOIPDsetup (); |
||||
|
extern int B3SOIPDtrunc (); |
||||
|
extern int B3SOIPDnoise (); |
||||
|
extern int B3SOIPDunsetup (); |
||||
|
|
||||
|
#endif /* stdc */ |
||||
@ -0,0 +1,57 @@ |
|||||
|
/********** |
||||
|
Copyright 1990 Regents of the University of California. All rights reserved. |
||||
|
Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang |
||||
|
File: b3soipdgetic.c 98/5/01 |
||||
|
**********/ |
||||
|
|
||||
|
|
||||
|
#include "ngspice.h" |
||||
|
#include <stdio.h> |
||||
|
#include "cktdefs.h" |
||||
|
#include "b3soipddef.h" |
||||
|
#include "sperror.h" |
||||
|
#include "suffix.h" |
||||
|
|
||||
|
|
||||
|
int |
||||
|
B3SOIPDgetic (inModel, ckt) |
||||
|
GENmodel *inModel; |
||||
|
CKTcircuit *ckt; |
||||
|
{ |
||||
|
B3SOIPDmodel *model = (B3SOIPDmodel *) inModel; |
||||
|
B3SOIPDinstance *here; |
||||
|
|
||||
|
for (; model; model = model->B3SOIPDnextModel) |
||||
|
{ |
||||
|
for (here = model->B3SOIPDinstances; here; |
||||
|
here = here->B3SOIPDnextInstance) |
||||
|
{ |
||||
|
if (!here->B3SOIPDicVBSGiven) |
||||
|
{ |
||||
|
here->B3SOIPDicVBS = *(ckt->CKTrhs + here->B3SOIPDbNode) |
||||
|
- *(ckt->CKTrhs + here->B3SOIPDsNode); |
||||
|
} |
||||
|
if (!here->B3SOIPDicVDSGiven) |
||||
|
{ |
||||
|
here->B3SOIPDicVDS = *(ckt->CKTrhs + here->B3SOIPDdNode) |
||||
|
- *(ckt->CKTrhs + here->B3SOIPDsNode); |
||||
|
} |
||||
|
if (!here->B3SOIPDicVGSGiven) |
||||
|
{ |
||||
|
here->B3SOIPDicVGS = *(ckt->CKTrhs + here->B3SOIPDgNode) |
||||
|
- *(ckt->CKTrhs + here->B3SOIPDsNode); |
||||
|
} |
||||
|
if (!here->B3SOIPDicVESGiven) |
||||
|
{ |
||||
|
here->B3SOIPDicVES = *(ckt->CKTrhs + here->B3SOIPDeNode) |
||||
|
- *(ckt->CKTrhs + here->B3SOIPDsNode); |
||||
|
} |
||||
|
if (!here->B3SOIPDicVPSGiven) |
||||
|
{ |
||||
|
here->B3SOIPDicVPS = *(ckt->CKTrhs + here->B3SOIPDpNode) |
||||
|
- *(ckt->CKTrhs + here->B3SOIPDsNode); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
return (OK); |
||||
|
} |
||||
@ -0,0 +1,62 @@ |
|||||
|
#include <config.h> |
||||
|
|
||||
|
#include <devdefs.h> |
||||
|
|
||||
|
#include "b3soipditf.h" |
||||
|
#include "b3soipdext.h" |
||||
|
#include "b3soipdinit.h" |
||||
|
|
||||
|
|
||||
|
SPICEdev B3SOIPDinfo = { |
||||
|
{"B3SOIPD", |
||||
|
"Berkeley SOI (PD) MOSFET model version 2.0", |
||||
|
|
||||
|
&B3SOIPDnSize, |
||||
|
&B3SOIPDnSize, |
||||
|
B3SOIPDnames, |
||||
|
|
||||
|
&B3SOIPDpTSize, |
||||
|
B3SOIPDpTable, |
||||
|
|
||||
|
&B3SOIPDmPTSize, |
||||
|
B3SOIPDmPTable, |
||||
|
DEV_DEFAULT} |
||||
|
, |
||||
|
|
||||
|
DEVparam:B3SOIPDparam, |
||||
|
DEVmodParam:B3SOIPDmParam, |
||||
|
DEVload:B3SOIPDload, |
||||
|
DEVsetup:B3SOIPDsetup, |
||||
|
DEVunsetup:B3SOIPDunsetup, |
||||
|
DEVpzSetup:B3SOIPDsetup, |
||||
|
DEVtemperature:B3SOIPDtemp, |
||||
|
DEVtrunc:B3SOIPDtrunc, |
||||
|
DEVfindBranch:NULL, |
||||
|
DEVacLoad:B3SOIPDacLoad, |
||||
|
DEVaccept:NULL, |
||||
|
DEVdestroy:B3SOIPDdestroy, |
||||
|
DEVmodDelete:B3SOIPDmDelete, |
||||
|
DEVdelete:B3SOIPDdelete, |
||||
|
DEVsetic:B3SOIPDgetic, |
||||
|
DEVask:B3SOIPDask, |
||||
|
DEVmodAsk:B3SOIPDmAsk, |
||||
|
DEVpzLoad:B3SOIPDpzLoad, |
||||
|
DEVconvTest:B3SOIPDconvTest, |
||||
|
DEVsenSetup:NULL, |
||||
|
DEVsenLoad:NULL, |
||||
|
DEVsenUpdate:NULL, |
||||
|
DEVsenAcLoad:NULL, |
||||
|
DEVsenPrint:NULL, |
||||
|
DEVsenTrunc:NULL, |
||||
|
DEVdisto:NULL, |
||||
|
DEVnoise:B3SOIPDnoise, |
||||
|
|
||||
|
DEVinstSize:&B3SOIPDiSize, |
||||
|
DEVmodSize:&B3SOIPDmSize |
||||
|
}; |
||||
|
|
||||
|
SPICEdev * |
||||
|
get_b3soipd_info (void) |
||||
|
{ |
||||
|
return &B3SOIPDinfo; |
||||
|
} |
||||
@ -0,0 +1,13 @@ |
|||||
|
#ifndef _B3SOIPDINIT_H |
||||
|
#define _B3SOIPDINIT_H |
||||
|
|
||||
|
extern IFparm B3SOIPDpTable[]; |
||||
|
extern IFparm B3SOIPDmPTable[]; |
||||
|
extern char *B3SOIPDnames[]; |
||||
|
extern int B3SOIPDpTSize; |
||||
|
extern int B3SOIPDmPTSize; |
||||
|
extern int B3SOIPDnSize; |
||||
|
extern int B3SOIPDiSize; |
||||
|
extern int B3SOIPDmSize; |
||||
|
|
||||
|
#endif |
||||
@ -0,0 +1,13 @@ |
|||||
|
/********** |
||||
|
Copyright 1990 Regents of the University of California. All rights reserved. |
||||
|
Author: 1998 Samuel Fung |
||||
|
File: b3soipditf.h |
||||
|
**********/ |
||||
|
#ifndef DEV_B3SOIPD |
||||
|
#define DEV_B3SOIPD |
||||
|
|
||||
|
#include "b3soipdext.h" |
||||
|
|
||||
|
SPICEdev *get_b3soipd_info (void); |
||||
|
|
||||
|
#endif |
||||
4661
src/spicelib/devices/bsim3soi_pd/b3soipdld.c
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1438
src/spicelib/devices/bsim3soi_pd/b3soipdmask.c
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,49 @@ |
|||||
|
/********** |
||||
|
Copyright 1990 Regents of the University of California. All rights reserved. |
||||
|
Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang |
||||
|
File: b3soipdmdel.c 98/5/01 |
||||
|
**********/ |
||||
|
|
||||
|
|
||||
|
#include "ngspice.h" |
||||
|
#include <stdio.h> |
||||
|
#include "b3soipddef.h" |
||||
|
#include "sperror.h" |
||||
|
#include "suffix.h" |
||||
|
|
||||
|
int |
||||
|
B3SOIPDmDelete (inModel, modname, kill) |
||||
|
GENmodel **inModel; |
||||
|
IFuid modname; |
||||
|
GENmodel *kill; |
||||
|
{ |
||||
|
B3SOIPDmodel **model = (B3SOIPDmodel **) inModel; |
||||
|
B3SOIPDmodel *modfast = (B3SOIPDmodel *) kill; |
||||
|
B3SOIPDinstance *here; |
||||
|
B3SOIPDinstance *prev = NULL; |
||||
|
B3SOIPDmodel **oldmod; |
||||
|
|
||||
|
oldmod = model; |
||||
|
for (; *model; model = &((*model)->B3SOIPDnextModel)) |
||||
|
{ |
||||
|
if ((*model)->B3SOIPDmodName == modname || |
||||
|
(modfast && *model == modfast)) |
||||
|
goto delgot; |
||||
|
oldmod = model; |
||||
|
} |
||||
|
return (E_NOMOD); |
||||
|
|
||||
|
delgot: |
||||
|
*oldmod = (*model)->B3SOIPDnextModel; /* cut deleted device out of list */ |
||||
|
for (here = (*model)->B3SOIPDinstances; here; |
||||
|
here = here->B3SOIPDnextInstance) |
||||
|
{ |
||||
|
if (prev) |
||||
|
FREE (prev); |
||||
|
prev = here; |
||||
|
} |
||||
|
if (prev) |
||||
|
FREE (prev); |
||||
|
FREE (*model); |
||||
|
return (OK); |
||||
|
} |
||||
1917
src/spicelib/devices/bsim3soi_pd/b3soipdmpar.c
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,432 @@ |
|||||
|
/********** |
||||
|
Copyright 1990 Regents of the University of California. All rights reserved. |
||||
|
Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang |
||||
|
File: b3soipdnoi.c 98/5/01 |
||||
|
**********/ |
||||
|
|
||||
|
#include "ngspice.h" |
||||
|
#include <stdio.h> |
||||
|
#include <math.h> |
||||
|
#include "b3soipddef.h" |
||||
|
#include "cktdefs.h" |
||||
|
#include "iferrmsg.h" |
||||
|
#include "noisedef.h" |
||||
|
#include "suffix.h" |
||||
|
#include "const.h" /* jwan */ |
||||
|
|
||||
|
/* |
||||
|
* B3SOIPDnoise (mode, operation, firstModel, ckt, data, OnDens) |
||||
|
* This routine names and evaluates all of the noise sources |
||||
|
* associated with MOSFET's. It starts with the model *firstModel and |
||||
|
* traverses all of its insts. It then proceeds to any other models |
||||
|
* on the linked list. The total output noise density generated by |
||||
|
* all of the MOSFET's is summed with the variable "OnDens". |
||||
|
*/ |
||||
|
|
||||
|
/* |
||||
|
Channel thermal and flicker noises are calculated based on the value |
||||
|
of model->B3SOIPDnoiMod. |
||||
|
If model->B3SOIPDnoiMod = 1, |
||||
|
Channel thermal noise = SPICE2 model |
||||
|
Flicker noise = SPICE2 model |
||||
|
If model->B3SOIPDnoiMod = 2, |
||||
|
Channel thermal noise = B3SOIPD model |
||||
|
Flicker noise = B3SOIPD model |
||||
|
If model->B3SOIPDnoiMod = 3, |
||||
|
Channel thermal noise = SPICE2 model |
||||
|
Flicker noise = B3SOIPD model |
||||
|
If model->B3SOIPDnoiMod = 4, |
||||
|
Channel thermal noise = B3SOIPD model |
||||
|
Flicker noise = SPICE2 model |
||||
|
*/ |
||||
|
|
||||
|
extern void NevalSrc (); |
||||
|
extern double Nintegrate (); |
||||
|
|
||||
|
double |
||||
|
B3SOIPDStrongInversionNoiseEval (vgs, vds, model, here, freq, temp) |
||||
|
double vgs, vds, freq, temp; |
||||
|
B3SOIPDmodel *model; |
||||
|
B3SOIPDinstance *here; |
||||
|
{ |
||||
|
struct b3soipdSizeDependParam *pParam; |
||||
|
double cd, esat, DelClm, EffFreq, N0, Nl, Vgst; |
||||
|
double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, Ssi; |
||||
|
double req, ceq; |
||||
|
|
||||
|
pParam = here->pParam; |
||||
|
cd = fabs (here->B3SOIPDcd); |
||||
|
if (vds > here->B3SOIPDvdsat) |
||||
|
{ |
||||
|
esat = 2.0 * pParam->B3SOIPDvsattemp / here->B3SOIPDueff; |
||||
|
T0 = |
||||
|
((((vds |
||||
|
- here->B3SOIPDvdsat) / pParam->B3SOIPDlitl) + |
||||
|
model->B3SOIPDem) / esat); |
||||
|
DelClm = pParam->B3SOIPDlitl * log (MAX (T0, N_MINLOG)); |
||||
|
} |
||||
|
else |
||||
|
DelClm = 0.0; |
||||
|
EffFreq = pow (freq, model->B3SOIPDef); |
||||
|
T1 = CHARGE * CHARGE * 8.62e-5 * cd * temp * here->B3SOIPDueff; |
||||
|
T2 = 1.0e8 * EffFreq * model->B3SOIPDcox |
||||
|
* pParam->B3SOIPDleff * pParam->B3SOIPDleff; |
||||
|
Vgst = vgs - here->B3SOIPDvon; |
||||
|
N0 = model->B3SOIPDcox * Vgst / CHARGE; |
||||
|
if (N0 < 0.0) |
||||
|
N0 = 0.0; |
||||
|
Nl = model->B3SOIPDcox * (Vgst - MIN (vds, here->B3SOIPDvdsat)) / CHARGE; |
||||
|
if (Nl < 0.0) |
||||
|
Nl = 0.0; |
||||
|
|
||||
|
T3 = model->B3SOIPDoxideTrapDensityA |
||||
|
* log (MAX (((N0 + 2.0e14) / (Nl + 2.0e14)), N_MINLOG)); |
||||
|
T4 = model->B3SOIPDoxideTrapDensityB * (N0 - Nl); |
||||
|
T5 = model->B3SOIPDoxideTrapDensityC * 0.5 * (N0 * N0 - Nl * Nl); |
||||
|
|
||||
|
T6 = 8.62e-5 * temp * cd * cd; |
||||
|
T7 = 1.0e8 * EffFreq * pParam->B3SOIPDleff |
||||
|
* pParam->B3SOIPDleff * pParam->B3SOIPDweff; |
||||
|
T8 = model->B3SOIPDoxideTrapDensityA + model->B3SOIPDoxideTrapDensityB * Nl |
||||
|
+ model->B3SOIPDoxideTrapDensityC * Nl * Nl; |
||||
|
T9 = (Nl + 2.0e14) * (Nl + 2.0e14); |
||||
|
|
||||
|
Ssi = T1 / T2 * (T3 + T4 + T5) + T6 / T7 * DelClm * T8 / T9; |
||||
|
|
||||
|
return Ssi; |
||||
|
} |
||||
|
|
||||
|
int |
||||
|
B3SOIPDnoise (mode, operation, inModel, ckt, data, OnDens) |
||||
|
int mode, operation; |
||||
|
GENmodel *inModel; |
||||
|
CKTcircuit *ckt; |
||||
|
register Ndata *data; |
||||
|
double *OnDens; |
||||
|
{ |
||||
|
register B3SOIPDmodel *model = (B3SOIPDmodel *) inModel; |
||||
|
register B3SOIPDinstance *here; |
||||
|
struct b3soipdSizeDependParam *pParam; |
||||
|
char name[N_MXVLNTH]; |
||||
|
double tempOnoise; |
||||
|
double tempInoise; |
||||
|
double noizDens[B3SOIPDNSRCS]; |
||||
|
double lnNdens[B3SOIPDNSRCS]; |
||||
|
|
||||
|
double vgs, vds, Slimit; |
||||
|
double N0, Nl; |
||||
|
double T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13; |
||||
|
double n, ExpArg, Ssi, Swi; |
||||
|
|
||||
|
int error, i; |
||||
|
|
||||
|
/* define the names of the noise sources */ |
||||
|
static char *B3SOIPDnNames[B3SOIPDNSRCS] = { /* Note that we have to keep the order */ |
||||
|
".rd", /* noise due to rd */ |
||||
|
/* consistent with the index definitions */ |
||||
|
".rs", /* noise due to rs */ |
||||
|
/* in B3SOIPDdefs.h */ |
||||
|
".id", /* noise due to id */ |
||||
|
".1overf", /* flicker (1/f) noise */ |
||||
|
".fb", /* noise due to floating body */ |
||||
|
"" /* total transistor noise */ |
||||
|
}; |
||||
|
|
||||
|
for (; model != NULL; model = model->B3SOIPDnextModel) |
||||
|
{ |
||||
|
for (here = model->B3SOIPDinstances; here != NULL; |
||||
|
here = here->B3SOIPDnextInstance) |
||||
|
{ |
||||
|
pParam = here->pParam; |
||||
|
switch (operation) |
||||
|
{ |
||||
|
case N_OPEN: |
||||
|
/* see if we have to to produce a summary report */ |
||||
|
/* if so, name all the noise generators */ |
||||
|
|
||||
|
if (((NOISEAN *) ckt->CKTcurJob)->NStpsSm != 0) |
||||
|
{ |
||||
|
switch (mode) |
||||
|
{ |
||||
|
case N_DENS: |
||||
|
for (i = 0; i < B3SOIPDNSRCS; i++) |
||||
|
{ |
||||
|
(void) sprintf (name, "onoise.%s%s", |
||||
|
here->B3SOIPDname, |
||||
|
B3SOIPDnNames[i]); |
||||
|
data->namelist = (IFuid *) trealloc ( |
||||
|
(char *) data-> |
||||
|
namelist, |
||||
|
(data-> |
||||
|
numPlots + |
||||
|
1) * |
||||
|
sizeof |
||||
|
(IFuid)); |
||||
|
if (!data->namelist) |
||||
|
return (E_NOMEM); |
||||
|
(*(SPfrontEnd->IFnewUid)) (ckt, |
||||
|
&(data-> |
||||
|
namelist[data-> |
||||
|
numPlots++]), |
||||
|
(IFuid) NULL, name, |
||||
|
UID_OTHER, |
||||
|
(void **) NULL); |
||||
|
/* we've added one more plot */ |
||||
|
} |
||||
|
break; |
||||
|
case INT_NOIZ: |
||||
|
for (i = 0; i < B3SOIPDNSRCS; i++) |
||||
|
{ |
||||
|
(void) sprintf (name, "onoise_total.%s%s", |
||||
|
here->B3SOIPDname, |
||||
|
B3SOIPDnNames[i]); |
||||
|
data->namelist = (IFuid *) trealloc ( |
||||
|
(char *) data-> |
||||
|
namelist, |
||||
|
(data-> |
||||
|
numPlots + |
||||
|
1) * |
||||
|
sizeof |
||||
|
(IFuid)); |
||||
|
if (!data->namelist) |
||||
|
return (E_NOMEM); |
||||
|
(*(SPfrontEnd->IFnewUid)) (ckt, |
||||
|
&(data-> |
||||
|
namelist[data-> |
||||
|
numPlots++]), |
||||
|
(IFuid) NULL, name, |
||||
|
UID_OTHER, |
||||
|
(void **) NULL); |
||||
|
/* we've added one more plot */ |
||||
|
|
||||
|
(void) sprintf (name, "inoise_total.%s%s", |
||||
|
here->B3SOIPDname, |
||||
|
B3SOIPDnNames[i]); |
||||
|
data->namelist = (IFuid *) trealloc ( |
||||
|
(char *) data-> |
||||
|
namelist, |
||||
|
(data-> |
||||
|
numPlots + |
||||
|
1) * |
||||
|
sizeof |
||||
|
(IFuid)); |
||||
|
if (!data->namelist) |
||||
|
return (E_NOMEM); |
||||
|
(*(SPfrontEnd->IFnewUid)) (ckt, |
||||
|
&(data-> |
||||
|
namelist[data-> |
||||
|
numPlots++]), |
||||
|
(IFuid) NULL, name, |
||||
|
UID_OTHER, |
||||
|
(void **) NULL); |
||||
|
/* we've added one more plot */ |
||||
|
} |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
break; |
||||
|
case N_CALC: |
||||
|
switch (mode) |
||||
|
{ |
||||
|
case N_DENS: |
||||
|
NevalSrc (&noizDens[B3SOIPDRDNOIZ], |
||||
|
&lnNdens[B3SOIPDRDNOIZ], ckt, THERMNOISE, |
||||
|
here->B3SOIPDdNodePrime, here->B3SOIPDdNode, |
||||
|
here->B3SOIPDdrainConductance); |
||||
|
|
||||
|
NevalSrc (&noizDens[B3SOIPDRSNOIZ], |
||||
|
&lnNdens[B3SOIPDRSNOIZ], ckt, THERMNOISE, |
||||
|
here->B3SOIPDsNodePrime, here->B3SOIPDsNode, |
||||
|
here->B3SOIPDsourceConductance); |
||||
|
|
||||
|
switch (model->B3SOIPDnoiMod) |
||||
|
{ |
||||
|
case 1: |
||||
|
case 3: |
||||
|
NevalSrc (&noizDens[B3SOIPDIDNOIZ], |
||||
|
&lnNdens[B3SOIPDIDNOIZ], ckt, |
||||
|
THERMNOISE, here->B3SOIPDdNodePrime, |
||||
|
here->B3SOIPDsNodePrime, |
||||
|
(2.0 / 3.0 * fabs (here->B3SOIPDgm |
||||
|
+ here->B3SOIPDgds |
||||
|
+ here->B3SOIPDgmbs))); |
||||
|
break; |
||||
|
case 2: |
||||
|
case 4: |
||||
|
NevalSrc (&noizDens[B3SOIPDIDNOIZ], |
||||
|
&lnNdens[B3SOIPDIDNOIZ], ckt, |
||||
|
THERMNOISE, here->B3SOIPDdNodePrime, |
||||
|
here->B3SOIPDsNodePrime, |
||||
|
(here->B3SOIPDueff |
||||
|
* fabs (here->B3SOIPDqinv |
||||
|
/ (pParam->B3SOIPDleff |
||||
|
* pParam->B3SOIPDleff)))); |
||||
|
break; |
||||
|
} |
||||
|
NevalSrc (&noizDens[B3SOIPDFLNOIZ], (double *) NULL, |
||||
|
ckt, N_GAIN, here->B3SOIPDdNodePrime, |
||||
|
here->B3SOIPDsNodePrime, (double) 0.0); |
||||
|
|
||||
|
switch (model->B3SOIPDnoiMod) |
||||
|
{ |
||||
|
case 1: |
||||
|
case 4: |
||||
|
noizDens[B3SOIPDFLNOIZ] *= model->B3SOIPDkf |
||||
|
* exp (model->B3SOIPDaf |
||||
|
* log (MAX (fabs (here->B3SOIPDcd), |
||||
|
N_MINLOG))) |
||||
|
/ (pow (data->freq, model->B3SOIPDef) |
||||
|
* pParam->B3SOIPDleff |
||||
|
* pParam->B3SOIPDleff * model->B3SOIPDcox); |
||||
|
break; |
||||
|
case 2: |
||||
|
case 3: |
||||
|
vgs = *(ckt->CKTstates[0] + here->B3SOIPDvgs); |
||||
|
vds = *(ckt->CKTstates[0] + here->B3SOIPDvds); |
||||
|
if (vds < 0.0) |
||||
|
{ |
||||
|
vds = -vds; |
||||
|
vgs = vgs + vds; |
||||
|
} |
||||
|
if (vgs >= here->B3SOIPDvon + 0.1) |
||||
|
{ |
||||
|
Ssi = B3SOIPDStrongInversionNoiseEval (vgs, |
||||
|
vds, model, |
||||
|
here, |
||||
|
data->freq, |
||||
|
ckt-> |
||||
|
CKTtemp); |
||||
|
noizDens[B3SOIPDFLNOIZ] *= Ssi; |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
pParam = here->pParam; |
||||
|
T10 = model->B3SOIPDoxideTrapDensityA |
||||
|
* 8.62e-5 * ckt->CKTtemp; |
||||
|
T11 = pParam->B3SOIPDweff |
||||
|
* pParam->B3SOIPDleff |
||||
|
* pow (data->freq, model->B3SOIPDef) * 4.0e36; |
||||
|
Swi = T10 / T11 * here->B3SOIPDcd * here->B3SOIPDcd; |
||||
|
Slimit = |
||||
|
B3SOIPDStrongInversionNoiseEval (here-> |
||||
|
B3SOIPDvon + 0.1, |
||||
|
vds, model, here, |
||||
|
data->freq, |
||||
|
ckt->CKTtemp); |
||||
|
T1 = Swi + Slimit; |
||||
|
if (T1 > 0.0) |
||||
|
noizDens[B3SOIPDFLNOIZ] *= (Slimit * Swi) / T1; |
||||
|
else |
||||
|
noizDens[B3SOIPDFLNOIZ] *= 0.0; |
||||
|
} |
||||
|
break; |
||||
|
} |
||||
|
|
||||
|
lnNdens[B3SOIPDFLNOIZ] = |
||||
|
log (MAX (noizDens[B3SOIPDFLNOIZ], N_MINLOG)); |
||||
|
|
||||
|
/* Low frequency excess noise due to FBE */ |
||||
|
NevalSrc (&noizDens[B3SOIPDFBNOIZ], &lnNdens[B3SOIPDFBNOIZ], |
||||
|
ckt, SHOTNOISE, here->B3SOIPDsNodePrime, |
||||
|
here->B3SOIPDbNode, |
||||
|
2.0 * model->B3SOIPDnoif * here->B3SOIPDibs); |
||||
|
|
||||
|
noizDens[B3SOIPDTOTNOIZ] = noizDens[B3SOIPDRDNOIZ] |
||||
|
+ noizDens[B3SOIPDRSNOIZ] |
||||
|
+ noizDens[B3SOIPDIDNOIZ] |
||||
|
+ noizDens[B3SOIPDFLNOIZ] + noizDens[B3SOIPDFBNOIZ]; |
||||
|
lnNdens[B3SOIPDTOTNOIZ] = |
||||
|
log (MAX (noizDens[B3SOIPDTOTNOIZ], N_MINLOG)); |
||||
|
|
||||
|
*OnDens += noizDens[B3SOIPDTOTNOIZ]; |
||||
|
|
||||
|
if (data->delFreq == 0.0) |
||||
|
{ /* if we haven't done any previous |
||||
|
integration, we need to initialize our |
||||
|
"history" variables. |
||||
|
*/ |
||||
|
|
||||
|
for (i = 0; i < B3SOIPDNSRCS; i++) |
||||
|
{ |
||||
|
here->B3SOIPDnVar[LNLSTDENS][i] = lnNdens[i]; |
||||
|
} |
||||
|
|
||||
|
/* clear out our integration variables |
||||
|
if it's the first pass |
||||
|
*/ |
||||
|
if (data->freq == |
||||
|
((NOISEAN *) ckt->CKTcurJob)->NstartFreq) |
||||
|
{ |
||||
|
for (i = 0; i < B3SOIPDNSRCS; i++) |
||||
|
{ |
||||
|
here->B3SOIPDnVar[OUTNOIZ][i] = 0.0; |
||||
|
here->B3SOIPDnVar[INNOIZ][i] = 0.0; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
else |
||||
|
{ /* data->delFreq != 0.0, |
||||
|
we have to integrate. |
||||
|
*/ |
||||
|
for (i = 0; i < B3SOIPDNSRCS; i++) |
||||
|
{ |
||||
|
if (i != B3SOIPDTOTNOIZ) |
||||
|
{ |
||||
|
tempOnoise = Nintegrate (noizDens[i], |
||||
|
lnNdens[i], |
||||
|
here-> |
||||
|
B3SOIPDnVar[LNLSTDENS] |
||||
|
[i], data); |
||||
|
tempInoise = |
||||
|
Nintegrate (noizDens[i] * data->GainSqInv, |
||||
|
lnNdens[i] + data->lnGainInv, |
||||
|
here->B3SOIPDnVar[LNLSTDENS][i] + |
||||
|
data->lnGainInv, data); |
||||
|
here->B3SOIPDnVar[LNLSTDENS][i] = lnNdens[i]; |
||||
|
data->outNoiz += tempOnoise; |
||||
|
data->inNoise += tempInoise; |
||||
|
if (((NOISEAN *) ckt->CKTcurJob)->NStpsSm != 0) |
||||
|
{ |
||||
|
here->B3SOIPDnVar[OUTNOIZ][i] += tempOnoise; |
||||
|
here->B3SOIPDnVar[OUTNOIZ][B3SOIPDTOTNOIZ] |
||||
|
+= tempOnoise; |
||||
|
here->B3SOIPDnVar[INNOIZ][i] += tempInoise; |
||||
|
here->B3SOIPDnVar[INNOIZ][B3SOIPDTOTNOIZ] |
||||
|
+= tempInoise; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
if (data->prtSummary) |
||||
|
{ |
||||
|
for (i = 0; i < B3SOIPDNSRCS; i++) |
||||
|
{ /* print a summary report */ |
||||
|
data->outpVector[data->outNumber++] = noizDens[i]; |
||||
|
} |
||||
|
} |
||||
|
break; |
||||
|
case INT_NOIZ: |
||||
|
/* already calculated, just output */ |
||||
|
if (((NOISEAN *) ckt->CKTcurJob)->NStpsSm != 0) |
||||
|
{ |
||||
|
for (i = 0; i < B3SOIPDNSRCS; i++) |
||||
|
{ |
||||
|
data->outpVector[data->outNumber++] |
||||
|
= here->B3SOIPDnVar[OUTNOIZ][i]; |
||||
|
data->outpVector[data->outNumber++] |
||||
|
= here->B3SOIPDnVar[INNOIZ][i]; |
||||
|
} |
||||
|
} |
||||
|
break; |
||||
|
} |
||||
|
break; |
||||
|
case N_CLOSE: |
||||
|
/* do nothing, the main calling routine will close */ |
||||
|
return (OK); |
||||
|
break; /* the plots */ |
||||
|
} /* switch (operation) */ |
||||
|
} /* for here */ |
||||
|
} /* for model */ |
||||
|
|
||||
|
return (OK); |
||||
|
} |
||||
@ -0,0 +1,166 @@ |
|||||
|
/********** |
||||
|
Copyright 1990 Regents of the University of California. All rights reserved. |
||||
|
Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang |
||||
|
File: b3soipdpar.c 98/5/01 |
||||
|
Modified by Pin Su 99/2/15 |
||||
|
**********/ |
||||
|
|
||||
|
|
||||
|
#include "ngspice.h" |
||||
|
#include <stdio.h> |
||||
|
#include "ifsim.h" |
||||
|
#include "b3soipddef.h" |
||||
|
#include "sperror.h" |
||||
|
#include "suffix.h" |
||||
|
|
||||
|
int |
||||
|
B3SOIPDparam (param, value, inst, select) |
||||
|
int param; |
||||
|
IFvalue *value; |
||||
|
GENinstance *inst; |
||||
|
IFvalue *select; |
||||
|
{ |
||||
|
B3SOIPDinstance *here = (B3SOIPDinstance *) inst; |
||||
|
switch (param) |
||||
|
{ |
||||
|
case B3SOIPD_W: |
||||
|
here->B3SOIPDw = value->rValue; |
||||
|
here->B3SOIPDwGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIPD_L: |
||||
|
here->B3SOIPDl = value->rValue; |
||||
|
here->B3SOIPDlGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIPD_AS: |
||||
|
here->B3SOIPDsourceArea = value->rValue; |
||||
|
here->B3SOIPDsourceAreaGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIPD_AD: |
||||
|
here->B3SOIPDdrainArea = value->rValue; |
||||
|
here->B3SOIPDdrainAreaGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIPD_PS: |
||||
|
here->B3SOIPDsourcePerimeter = value->rValue; |
||||
|
here->B3SOIPDsourcePerimeterGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIPD_PD: |
||||
|
here->B3SOIPDdrainPerimeter = value->rValue; |
||||
|
here->B3SOIPDdrainPerimeterGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIPD_NRS: |
||||
|
here->B3SOIPDsourceSquares = value->rValue; |
||||
|
here->B3SOIPDsourceSquaresGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIPD_NRD: |
||||
|
here->B3SOIPDdrainSquares = value->rValue; |
||||
|
here->B3SOIPDdrainSquaresGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIPD_OFF: |
||||
|
here->B3SOIPDoff = value->iValue; |
||||
|
here->B3SOIPDoffGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIPD_IC_VBS: |
||||
|
here->B3SOIPDicVBS = value->rValue; |
||||
|
here->B3SOIPDicVBSGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIPD_IC_VDS: |
||||
|
here->B3SOIPDicVDS = value->rValue; |
||||
|
here->B3SOIPDicVDSGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIPD_IC_VGS: |
||||
|
here->B3SOIPDicVGS = value->rValue; |
||||
|
here->B3SOIPDicVGSGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIPD_IC_VES: |
||||
|
here->B3SOIPDicVES = value->rValue; |
||||
|
here->B3SOIPDicVESGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIPD_IC_VPS: |
||||
|
here->B3SOIPDicVPS = value->rValue; |
||||
|
here->B3SOIPDicVPSGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIPD_BJTOFF: |
||||
|
here->B3SOIPDbjtoff = value->iValue; |
||||
|
here->B3SOIPDbjtoffGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIPD_DEBUG: |
||||
|
here->B3SOIPDdebugMod = value->iValue; |
||||
|
here->B3SOIPDdebugModGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIPD_RTH0: |
||||
|
here->B3SOIPDrth0 = value->rValue; |
||||
|
here->B3SOIPDrth0Given = TRUE; |
||||
|
break; |
||||
|
case B3SOIPD_CTH0: |
||||
|
here->B3SOIPDcth0 = value->rValue; |
||||
|
here->B3SOIPDcth0Given = TRUE; |
||||
|
break; |
||||
|
case B3SOIPD_NRB: |
||||
|
here->B3SOIPDbodySquares = value->rValue; |
||||
|
here->B3SOIPDbodySquaresGiven = TRUE; |
||||
|
break; |
||||
|
|
||||
|
|
||||
|
/* v2.0 release */ |
||||
|
case B3SOIPD_NBC: |
||||
|
here->B3SOIPDnbc = value->rValue; |
||||
|
here->B3SOIPDnbcGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIPD_NSEG: |
||||
|
here->B3SOIPDnseg = value->rValue; |
||||
|
here->B3SOIPDnsegGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIPD_PDBCP: |
||||
|
here->B3SOIPDpdbcp = value->rValue; |
||||
|
here->B3SOIPDpdbcpGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIPD_PSBCP: |
||||
|
here->B3SOIPDpsbcp = value->rValue; |
||||
|
here->B3SOIPDpsbcpGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIPD_AGBCP: |
||||
|
here->B3SOIPDagbcp = value->rValue; |
||||
|
here->B3SOIPDagbcpGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIPD_AEBCP: |
||||
|
here->B3SOIPDaebcp = value->rValue; |
||||
|
here->B3SOIPDaebcpGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIPD_VBSUSR: |
||||
|
here->B3SOIPDvbsusr = value->rValue; |
||||
|
here->B3SOIPDvbsusrGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIPD_TNODEOUT: |
||||
|
here->B3SOIPDtnodeout = value->iValue; |
||||
|
here->B3SOIPDtnodeoutGiven = TRUE; |
||||
|
break; |
||||
|
|
||||
|
|
||||
|
case B3SOIPD_IC: |
||||
|
switch (value->v.numValue) |
||||
|
{ |
||||
|
case 5: |
||||
|
here->B3SOIPDicVPS = *(value->v.vec.rVec + 4); |
||||
|
here->B3SOIPDicVPSGiven = TRUE; |
||||
|
case 4: |
||||
|
here->B3SOIPDicVES = *(value->v.vec.rVec + 3); |
||||
|
here->B3SOIPDicVESGiven = TRUE; |
||||
|
case 3: |
||||
|
here->B3SOIPDicVBS = *(value->v.vec.rVec + 2); |
||||
|
here->B3SOIPDicVBSGiven = TRUE; |
||||
|
case 2: |
||||
|
here->B3SOIPDicVGS = *(value->v.vec.rVec + 1); |
||||
|
here->B3SOIPDicVGSGiven = TRUE; |
||||
|
case 1: |
||||
|
here->B3SOIPDicVDS = *(value->v.vec.rVec); |
||||
|
here->B3SOIPDicVDSGiven = TRUE; |
||||
|
break; |
||||
|
default: |
||||
|
return (E_BADPARM); |
||||
|
} |
||||
|
break; |
||||
|
default: |
||||
|
return (E_BADPARM); |
||||
|
} |
||||
|
return (OK); |
||||
|
} |
||||
@ -0,0 +1,153 @@ |
|||||
|
/********** |
||||
|
Copyright 1990 Regents of the University of California. All rights reserved. |
||||
|
Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang |
||||
|
File: b3soipzld.c 98/5/01 |
||||
|
**********/ |
||||
|
|
||||
|
|
||||
|
#include "ngspice.h" |
||||
|
#include <stdio.h> |
||||
|
#include "cktdefs.h" |
||||
|
#include "complex.h" |
||||
|
#include "sperror.h" |
||||
|
#include "b3soipddef.h" |
||||
|
#include "suffix.h" |
||||
|
|
||||
|
int |
||||
|
B3SOIPDpzLoad (inModel, ckt, s) |
||||
|
GENmodel *inModel; |
||||
|
register CKTcircuit *ckt; |
||||
|
register SPcomplex *s; |
||||
|
{ |
||||
|
register B3SOIPDmodel *model = (B3SOIPDmodel *) inModel; |
||||
|
register B3SOIPDinstance *here; |
||||
|
double xcggb, xcgdb, xcgsb, xcbgb, xcbdb, xcbsb, xcddb, xcssb, xcdgb; |
||||
|
double gdpr, gspr, gds, gbd, gbs, capbd, capbs, xcsgb, xcdsb, xcsdb; |
||||
|
double cggb, cgdb, cgsb, cbgb, cbdb, cbsb, cddb, cdgb, cdsb; |
||||
|
double GSoverlapCap, GDoverlapCap, GBoverlapCap; |
||||
|
double FwdSum, RevSum, Gm, Gmbs; |
||||
|
|
||||
|
for (; model != NULL; model = model->B3SOIPDnextModel) |
||||
|
{ |
||||
|
for (here = model->B3SOIPDinstances; here != NULL; |
||||
|
here = here->B3SOIPDnextInstance) |
||||
|
{ |
||||
|
if (here->B3SOIPDmode >= 0) |
||||
|
{ |
||||
|
Gm = here->B3SOIPDgm; |
||||
|
Gmbs = here->B3SOIPDgmbs; |
||||
|
FwdSum = Gm + Gmbs; |
||||
|
RevSum = 0.0; |
||||
|
cggb = here->B3SOIPDcggb; |
||||
|
cgsb = here->B3SOIPDcgsb; |
||||
|
cgdb = here->B3SOIPDcgdb; |
||||
|
|
||||
|
cbgb = here->B3SOIPDcbgb; |
||||
|
cbsb = here->B3SOIPDcbsb; |
||||
|
cbdb = here->B3SOIPDcbdb; |
||||
|
|
||||
|
cdgb = here->B3SOIPDcdgb; |
||||
|
cdsb = here->B3SOIPDcdsb; |
||||
|
cddb = here->B3SOIPDcddb; |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
Gm = -here->B3SOIPDgm; |
||||
|
Gmbs = -here->B3SOIPDgmbs; |
||||
|
FwdSum = 0.0; |
||||
|
RevSum = -Gm - Gmbs; |
||||
|
cggb = here->B3SOIPDcggb; |
||||
|
cgsb = here->B3SOIPDcgdb; |
||||
|
cgdb = here->B3SOIPDcgsb; |
||||
|
|
||||
|
cbgb = here->B3SOIPDcbgb; |
||||
|
cbsb = here->B3SOIPDcbdb; |
||||
|
cbdb = here->B3SOIPDcbsb; |
||||
|
|
||||
|
cdgb = -(here->B3SOIPDcdgb + cggb + cbgb); |
||||
|
cdsb = -(here->B3SOIPDcddb + cgsb + cbsb); |
||||
|
cddb = -(here->B3SOIPDcdsb + cgdb + cbdb); |
||||
|
} |
||||
|
gdpr = here->B3SOIPDdrainConductance; |
||||
|
gspr = here->B3SOIPDsourceConductance; |
||||
|
gds = here->B3SOIPDgds; |
||||
|
gbd = here->B3SOIPDgjdb; |
||||
|
gbs = here->B3SOIPDgjsb; |
||||
|
#ifdef BULKCODE |
||||
|
capbd = here->B3SOIPDcapbd; |
||||
|
capbs = here->B3SOIPDcapbs; |
||||
|
#endif |
||||
|
GSoverlapCap = here->B3SOIPDcgso; |
||||
|
GDoverlapCap = here->B3SOIPDcgdo; |
||||
|
#ifdef BULKCODE |
||||
|
GBoverlapCap = here->pParam->B3SOIPDcgbo; |
||||
|
#endif |
||||
|
|
||||
|
xcdgb = (cdgb - GDoverlapCap); |
||||
|
xcddb = (cddb + capbd + GDoverlapCap); |
||||
|
xcdsb = cdsb; |
||||
|
xcsgb = -(cggb + cbgb + cdgb + GSoverlapCap); |
||||
|
xcsdb = -(cgdb + cbdb + cddb); |
||||
|
xcssb = (capbs + GSoverlapCap - (cgsb + cbsb + cdsb)); |
||||
|
xcggb = (cggb + GDoverlapCap + GSoverlapCap + GBoverlapCap); |
||||
|
xcgdb = (cgdb - GDoverlapCap); |
||||
|
xcgsb = (cgsb - GSoverlapCap); |
||||
|
xcbgb = (cbgb - GBoverlapCap); |
||||
|
xcbdb = (cbdb - capbd); |
||||
|
xcbsb = (cbsb - capbs); |
||||
|
|
||||
|
|
||||
|
*(here->B3SOIPDGgPtr) += xcggb * s->real; |
||||
|
*(here->B3SOIPDGgPtr + 1) += xcggb * s->imag; |
||||
|
*(here->B3SOIPDBbPtr) += (-xcbgb - xcbdb - xcbsb) * s->real; |
||||
|
*(here->B3SOIPDBbPtr + 1) += (-xcbgb - xcbdb - xcbsb) * s->imag; |
||||
|
*(here->B3SOIPDDPdpPtr) += xcddb * s->real; |
||||
|
*(here->B3SOIPDDPdpPtr + 1) += xcddb * s->imag; |
||||
|
*(here->B3SOIPDSPspPtr) += xcssb * s->real; |
||||
|
*(here->B3SOIPDSPspPtr + 1) += xcssb * s->imag; |
||||
|
*(here->B3SOIPDGbPtr) += (-xcggb - xcgdb - xcgsb) * s->real; |
||||
|
*(here->B3SOIPDGbPtr + 1) += (-xcggb - xcgdb - xcgsb) * s->imag; |
||||
|
*(here->B3SOIPDGdpPtr) += xcgdb * s->real; |
||||
|
*(here->B3SOIPDGdpPtr + 1) += xcgdb * s->imag; |
||||
|
*(here->B3SOIPDGspPtr) += xcgsb * s->real; |
||||
|
*(here->B3SOIPDGspPtr + 1) += xcgsb * s->imag; |
||||
|
*(here->B3SOIPDBgPtr) += xcbgb * s->real; |
||||
|
*(here->B3SOIPDBgPtr + 1) += xcbgb * s->imag; |
||||
|
*(here->B3SOIPDBdpPtr) += xcbdb * s->real; |
||||
|
*(here->B3SOIPDBdpPtr + 1) += xcbdb * s->imag; |
||||
|
*(here->B3SOIPDBspPtr) += xcbsb * s->real; |
||||
|
*(here->B3SOIPDBspPtr + 1) += xcbsb * s->imag; |
||||
|
*(here->B3SOIPDDPgPtr) += xcdgb * s->real; |
||||
|
*(here->B3SOIPDDPgPtr + 1) += xcdgb * s->imag; |
||||
|
*(here->B3SOIPDDPbPtr) += (-xcdgb - xcddb - xcdsb) * s->real; |
||||
|
*(here->B3SOIPDDPbPtr + 1) += (-xcdgb - xcddb - xcdsb) * s->imag; |
||||
|
*(here->B3SOIPDDPspPtr) += xcdsb * s->real; |
||||
|
*(here->B3SOIPDDPspPtr + 1) += xcdsb * s->imag; |
||||
|
*(here->B3SOIPDSPgPtr) += xcsgb * s->real; |
||||
|
*(here->B3SOIPDSPgPtr + 1) += xcsgb * s->imag; |
||||
|
*(here->B3SOIPDSPbPtr) += (-xcsgb - xcsdb - xcssb) * s->real; |
||||
|
*(here->B3SOIPDSPbPtr + 1) += (-xcsgb - xcsdb - xcssb) * s->imag; |
||||
|
*(here->B3SOIPDSPdpPtr) += xcsdb * s->real; |
||||
|
*(here->B3SOIPDSPdpPtr + 1) += xcsdb * s->imag; |
||||
|
*(here->B3SOIPDDdPtr) += gdpr; |
||||
|
*(here->B3SOIPDSsPtr) += gspr; |
||||
|
*(here->B3SOIPDBbPtr) += gbd + gbs; |
||||
|
*(here->B3SOIPDDPdpPtr) += gdpr + gds + gbd + RevSum; |
||||
|
*(here->B3SOIPDSPspPtr) += gspr + gds + gbs + FwdSum; |
||||
|
*(here->B3SOIPDDdpPtr) -= gdpr; |
||||
|
*(here->B3SOIPDSspPtr) -= gspr; |
||||
|
*(here->B3SOIPDBdpPtr) -= gbd; |
||||
|
*(here->B3SOIPDBspPtr) -= gbs; |
||||
|
*(here->B3SOIPDDPdPtr) -= gdpr; |
||||
|
*(here->B3SOIPDDPgPtr) += Gm; |
||||
|
*(here->B3SOIPDDPbPtr) -= gbd - Gmbs; |
||||
|
*(here->B3SOIPDDPspPtr) -= gds + FwdSum; |
||||
|
*(here->B3SOIPDSPgPtr) -= Gm; |
||||
|
*(here->B3SOIPDSPsPtr) -= gspr; |
||||
|
*(here->B3SOIPDSPbPtr) -= gbs + Gmbs; |
||||
|
*(here->B3SOIPDSPdpPtr) -= gds + RevSum; |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
return (OK); |
||||
|
} |
||||
1498
src/spicelib/devices/bsim3soi_pd/b3soipdset.c
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1037
src/spicelib/devices/bsim3soi_pd/b3soipdtemp.c
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,51 @@ |
|||||
|
/********** |
||||
|
Copyright 1990 Regents of the University of California. All rights reserved. |
||||
|
Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang |
||||
|
File: b3soipdtrunc.c 98/5/01 |
||||
|
**********/ |
||||
|
|
||||
|
|
||||
|
#include "ngspice.h" |
||||
|
#include <stdio.h> |
||||
|
#include <math.h> |
||||
|
#include "cktdefs.h" |
||||
|
#include "b3soipddef.h" |
||||
|
#include "sperror.h" |
||||
|
#include "suffix.h" |
||||
|
|
||||
|
|
||||
|
int |
||||
|
B3SOIPDtrunc (inModel, ckt, timeStep) |
||||
|
GENmodel *inModel; |
||||
|
register CKTcircuit *ckt; |
||||
|
double *timeStep; |
||||
|
{ |
||||
|
register B3SOIPDmodel *model = (B3SOIPDmodel *) inModel; |
||||
|
register B3SOIPDinstance *here; |
||||
|
|
||||
|
#ifdef STEPDEBUG |
||||
|
double debugtemp; |
||||
|
#endif /* STEPDEBUG */ |
||||
|
|
||||
|
for (; model != NULL; model = model->B3SOIPDnextModel) |
||||
|
{ |
||||
|
for (here = model->B3SOIPDinstances; here != NULL; |
||||
|
here = here->B3SOIPDnextInstance) |
||||
|
{ |
||||
|
#ifdef STEPDEBUG |
||||
|
debugtemp = *timeStep; |
||||
|
#endif /* STEPDEBUG */ |
||||
|
CKTterr (here->B3SOIPDqb, ckt, timeStep); |
||||
|
CKTterr (here->B3SOIPDqg, ckt, timeStep); |
||||
|
CKTterr (here->B3SOIPDqd, ckt, timeStep); |
||||
|
#ifdef STEPDEBUG |
||||
|
if (debugtemp != *timeStep) |
||||
|
{ |
||||
|
printf ("device %s reduces step from %g to %g\n", |
||||
|
here->B3SOIPDname, debugtemp, *timeStep); |
||||
|
} |
||||
|
#endif /* STEPDEBUG */ |
||||
|
} |
||||
|
} |
||||
|
return (OK); |
||||
|
} |
||||
@ -0,0 +1,110 @@ |
|||||
|
|
||||
|
|
||||
|
.subckt dum ss |
||||
|
mn1 ss ss ss ss ss n1 w=4u l=0.15u debug=1 AS=6p AD=6p PS=7u PD=7u |
||||
|
.ends dum |
||||
|
|
||||
|
* XOR2 |
||||
|
.subckt xnor2 dd ss sub A B out |
||||
|
mn1 T1 A C1 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u |
||||
|
mn2 C1 B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u |
||||
|
mn3 out A C2 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u |
||||
|
mn4 out B C2 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u |
||||
|
mn5 C2 T1 ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u |
||||
|
mp1 T1 A dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u |
||||
|
mp2 T1 B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u |
||||
|
mp3 out A C3 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u |
||||
|
mp4 C3 B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u |
||||
|
mp5 out T1 dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u |
||||
|
.ends xnor2 |
||||
|
|
||||
|
.subckt nor2 dd ss sub A B out |
||||
|
mn1 out A ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u |
||||
|
mn2 out B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u |
||||
|
mp1 out A C1 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u |
||||
|
mp2 C1 B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u |
||||
|
.ends nor2 |
||||
|
|
||||
|
.subckt nand2 dd ss sub A B out |
||||
|
mn1 out A C1 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u |
||||
|
mn2 C1 B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u |
||||
|
mp1 out A dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u |
||||
|
mp2 out B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u |
||||
|
.ends nand2 |
||||
|
|
||||
|
.subckt nor3 dd ss sub A B C out |
||||
|
mn1 out A ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u |
||||
|
mn2 out B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u |
||||
|
mn3 out C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u |
||||
|
mp1 out A C1 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u |
||||
|
mp2 C1 B C2 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u |
||||
|
mp3 C2 C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u |
||||
|
.ends nor3 |
||||
|
|
||||
|
.subckt nand3 dd ss sub A B C out |
||||
|
mn1 out A C1 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u |
||||
|
mn2 C1 B C2 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u |
||||
|
mn3 C2 C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u |
||||
|
mp1 out A dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u |
||||
|
mp2 out B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u |
||||
|
mp3 out C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u |
||||
|
.ends nand3 |
||||
|
|
||||
|
.subckt nor4 dd ss sub A B C D out |
||||
|
mn1 out A ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u |
||||
|
mn2 out B ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u |
||||
|
mn3 out C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u |
||||
|
mn4 out C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u |
||||
|
mp1 out A C1 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u |
||||
|
mp2 C1 B C2 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u |
||||
|
mp3 C2 C C3 sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u |
||||
|
mp4 C3 C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u |
||||
|
.ends nor4 |
||||
|
|
||||
|
.subckt nand4 dd ss sub A B C D out |
||||
|
mn1 out A C1 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u |
||||
|
mn2 C1 B C2 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u |
||||
|
mn3 C2 C C3 sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u |
||||
|
mn4 C3 C ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u |
||||
|
mp1 out A dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u |
||||
|
mp2 out B dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u |
||||
|
mp3 out C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u |
||||
|
mp4 out C dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u |
||||
|
.ends nand4 |
||||
|
|
||||
|
.subckt inv1 dd ss sub in out |
||||
|
mn1 out in ss sub n1 w=4u l=0.15u AS=6p AD=6p PS=7u PD=7u |
||||
|
mp1 out in dd sub p1 w=10u l=0.15u AS=15p AD=15p PS=13u PD=13u |
||||
|
.ends inv1 |
||||
|
|
||||
|
.subckt inv5 dd ss sub in out |
||||
|
xinv1 dd ss sub in 1 inv1 |
||||
|
xinv2 dd ss sub 1 2 inv1 |
||||
|
xinv3 dd ss sub 2 3 inv1 |
||||
|
xinv4 dd ss sub 3 4 inv1 |
||||
|
xinv5 dd ss sub 4 out inv1 |
||||
|
.ends inv5 |
||||
|
|
||||
|
.subckt inv25 dd ss sub in out |
||||
|
xinv1 dd ss sub in 1 inv5 |
||||
|
xinv2 dd ss sub 1 2 inv5 |
||||
|
xinv3 dd ss sub 2 3 inv5 |
||||
|
xinv4 dd ss sub 3 4 inv5 |
||||
|
xinv5 dd ss sub 4 out inv5 |
||||
|
.ends inv25 |
||||
|
|
||||
|
.subckt inv125 dd ss sub in out |
||||
|
xinv1 dd ss sub in 1 inv25 |
||||
|
xinv2 dd ss sub 1 2 inv25 |
||||
|
xinv3 dd ss sub 2 3 inv25 |
||||
|
xinv4 dd ss sub 3 4 inv25 |
||||
|
xinv5 dd ss sub 4 out inv25 |
||||
|
.ends inv125 |
||||
|
|
||||
|
.subckt inv625 dd ss sub in out |
||||
|
xinv1 dd ss sub in 1 inv125 |
||||
|
xinv2 dd ss sub 1 2 inv125 |
||||
|
xinv3 dd ss sub 2 3 inv125 |
||||
|
xinv4 dd ss sub 3 4 inv125 |
||||
|
xinv5 dd ss sub 4 out inv125 |
||||
|
.ends inv625 |
||||
@ -0,0 +1,40 @@ |
|||||
|
*Model Card for BSIMPD2.0 |
||||
|
* Lmin= .2 Lmax= .8 Wmin= 2.8 Wmax= 2.8 |
||||
|
.Model N1 NMOS Level= 9 |
||||
|
+TNOM = 27 TOX = 4.5E-09 TSI = .0000001 TBOX = 8E-08 |
||||
|
+MOBMOD = 0 CAPMOD = 2 SHMOD =0 |
||||
|
+PARAMCHK=0 WINT = 0 LINT = -2E-08 |
||||
|
+VTH0 = .42 K1 = .49 K2 = .1 K3 = 0 |
||||
|
+K3B = 2.2 NLX = 2E-7 |
||||
|
+DVT0 = 10 DVT1 = .55 DVT2 = -1.4 |
||||
|
+DVT0W = 0 DVT1W = 0 DVT2W = 0 |
||||
|
+NCH = 4.7E+17 NSUB = -1E+15 NGATE = 1E+20 |
||||
|
+AGIDL=1e-15 BGIDL=1e9 NGIDL=1.1 |
||||
|
+NDIODE = 1.13 NTUN = 14.0 NRECF0=2.5 NRECR0=4 |
||||
|
+VREC0=1.2 NTRECF=.1 NTRECR=.2 |
||||
|
+ISBJT = 1e-4 ISDIF = 1e-5 ISTUN = 2e-5 ISREC = 4e-2 |
||||
|
+XBJT = .9 XDIF = .9 XREC = .9 XTUN = 0.01 |
||||
|
+AHLI=1e-9 LBJT0=0.2e-6 LN=2e-6 |
||||
|
+NBJT=.8 NDIF=-1 AELY=1e8 VABJT=0 |
||||
|
+U0 = 352 UA = 1.3E-11 UB = 1.7E-18 UC = -4E-10 |
||||
|
+W0 = 1.16E-06 AGS = .25 A1 = 0 A2 = 1 |
||||
|
+B0 = .01 B1 = 10 |
||||
|
+RDSW = 0 PRWG = 0 PRWB = -.2 WR = 1 |
||||
|
+RBODY = 1e0 RBSH = 0.0 |
||||
|
+A0 = 1.4 KETA = 0.1 KETAS = 0.2 VSAT = 135000 |
||||
|
+DWG = 0 DWB = 0 |
||||
|
+ALPHA0 = 1e-8 BETA0 = 0 BETA1 = 0.05 BETA2 = 0.07 |
||||
|
+VDSATII0 = .8 ESATII = 1e7 |
||||
|
+VOFF = -.14 NFACTOR = .7 CDSC = .00002 CDSCB = 0 |
||||
|
+CDSCD = 0 CIT = 0 |
||||
|
+PCLM = 2.9 PVAG = 12 PDIBLC1 = .18 PDIBLC2 = .004 |
||||
|
+PDIBLCB = -.234 DROUT = .2 |
||||
|
+DELTA = .01 ETA0 = .05 ETAB = 0 |
||||
|
+DSUB = .2 RTH0 = .005 |
||||
|
+CLC = .0000001 CLE = .6 CF = 1E-20 CKAPPA = .6 |
||||
|
+CGDL = 1E-20 CGSL = 1E-20 KT1 = -.3 KT1L = 0 |
||||
|
+KT2 = .022 UTE = -1.5 UA1 = 4.31E-09 UB1 = -7.61E-18 |
||||
|
+UC1 = -5.6E-11 PRT = 760 AT = 22400 |
||||
|
+CGSO = 1e-10 CGDO = 1e-10 CJSWG = 1e-12 TT=3e-10 |
||||
|
+ASD = 0.3 CSDESW = 1e-12 |
||||
|
+TCJSWG=1e-4 MJSWG=.5 PBSWG=1 |
||||
@ -0,0 +1,40 @@ |
|||||
|
*Model Card for BSIMPD2.0 |
||||
|
* Lmin= .2 Lmax= .8 Wmin= 2.8 Wmax= 2.8 |
||||
|
.Model P1 PMOS Level= 9 |
||||
|
+TNOM = 27 TOX = 4.5E-09 TSI = .0000001 TBOX = 8E-08 |
||||
|
+MOBMOD = 2 CAPMOD = 2 SHMOD = 0 |
||||
|
+WINT = 0 LINT = -2E-08 |
||||
|
+VTH0 = -.42 K1 = .49 K2 = .1 K3 = 0 |
||||
|
+K3B = 2.2 NLX = 2E-07 |
||||
|
+DVT0 = 10 DVT1 = .55 DVT2 = -1.4 |
||||
|
+DVT0W = 0 DVT1W = 0 DVT2W = 0 |
||||
|
+NCH = 4.7E+17 NSUB = -1E+15 NGATE = 1E+20 |
||||
|
+AGIDL=1e-16 BGIDL=1e9 NGIDL=1.1 |
||||
|
+NDIODE = 1.13 NTUN = 14.0 NRECF0=2.5 NRECR0=4 |
||||
|
+VREC0=1.2 NTRECF=.1 NTRECR=.2 |
||||
|
+ISBJT = 1e-4 ISDIF = 1e-5 ISTUN = 2e-5 ISREC = 4e-2 |
||||
|
+XBJT = .9 XDIF = .9 XREC = .9 XTUN = 0.01 |
||||
|
+AHLI=1e-9 LBJT0=0.2e-6 LN=2e-6 |
||||
|
+NBJT=.8 NDIF=-1 AELY=1e8 VABJT=0 |
||||
|
+U0 = 145 UA = 1.3E-11 UB = 1.7E-18 UC = -4E-10 |
||||
|
+W0 = 1.16E-06 AGS = .25 A1 = 0 A2 = 1 |
||||
|
+B0 = .01 B1 = 10 |
||||
|
+RDSW = 350 PRWG = 0 PRWB = -.2 WR = 1 |
||||
|
+RBODY = 1e0 RBSH = 0.0 |
||||
|
+A0 = 1.4 KETA = 0.1 KETAS = 0.2 VSAT = 75000 |
||||
|
+DWG = 0 DWB = 0 |
||||
|
+ALPHA0 = 1e-8 BETA0 = 0 BETA1 = 0.05 BETA2 = 0.07 |
||||
|
+VDSATII0 = 1.6 ESATII = 1e7 |
||||
|
+VOFF = -.14 NFACTOR = .7 CDSC = .00002 CDSCB = 0 |
||||
|
+CDSCD = 0 CIT = 0 |
||||
|
+PCLM = 2.9 PVAG = 12 PDIBLC1 = .18 PDIBLC2 = .004 |
||||
|
+PDIBLCB = -.234 DROUT = .2 |
||||
|
+DELTA = .01 ETA0 = .05 ETAB = 0 |
||||
|
+DSUB = .2 RTH0 = .005 |
||||
|
+CLC = .0000001 CLE = .6 CF = 1E-20 CKAPPA = .6 |
||||
|
+CGDL = 1E-20 CGSL = 1E-20 KT1 = -.3 KT1L = 0 |
||||
|
+KT2 = .022 UTE = -1.5 UA1 = 4.31E-09 UB1 = -7.61E-18 |
||||
|
+UC1 = -5.6E-11 PRT = 760 AT = 22400 |
||||
|
+CGSO = 1e-10 CGDO = 1e-10 CJSWG = 1e-12 TT=3e-10 |
||||
|
+ASD = 0.3 CSDESW = 1e-12 |
||||
|
+TCJSWG=1e-4 MJSWG=.5 PBSWG=1 |
||||
@ -0,0 +1,23 @@ |
|||||
|
* 51 stage Ring-Osc. |
||||
|
|
||||
|
vin in out 2 pulse 2 0 0.1n 5n 1 1 1 |
||||
|
vdd dd 0 dc 0 pulse 0 2 0 1n 1 1 1 |
||||
|
vss ss 0 dc 0 |
||||
|
ve sub 0 dc 0 |
||||
|
|
||||
|
xinv1 dd ss sub in out25 inv25 |
||||
|
xinv2 dd ss sub out25 out50 inv25 |
||||
|
xinv5 dd ss sub out50 out inv1 |
||||
|
xinv11 dd ss sub out buf inv1 |
||||
|
cout buf ss 1pF |
||||
|
|
||||
|
xdum ss dum |
||||
|
|
||||
|
.option itl1=500 gmin=1e-15 itl4=10 |
||||
|
*.dc vdd 0 2 0.01 |
||||
|
.tran 0.2n 50n |
||||
|
|
||||
|
.include nmospd.mod |
||||
|
.include pmospd.mod |
||||
|
.include lib.h |
||||
|
.end |
||||
@ -0,0 +1,18 @@ |
|||||
|
*model = BSIMSOI |
||||
|
*Berkeley Spice Compatibility |
||||
|
* |
||||
|
* SOI NMOSFET, floating body simulation |
||||
|
|
||||
|
vd d 0 dc 0.05 |
||||
|
vs s 0 dc 0 |
||||
|
ve e 0 dc 0 |
||||
|
vg g 0 dc 3 |
||||
|
|
||||
|
m1 d g s e n1 w=10u l=0.25u |
||||
|
|
||||
|
.option gmin=1e-25 itl1=500 |
||||
|
.dc vg 0 1.5 0.01 ve -4 4 1 |
||||
|
.include nmospd.mod |
||||
|
|
||||
|
* For PD, the command '.include nmosfd.mod ' should |
||||
|
* be replaced with '.include nmospd.mod'. |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue