47 changed files with 26528 additions and 7 deletions
-
29src/spicelib/devices/bsim3soi_fd/BsimTerms_use
-
34src/spicelib/devices/bsim3soi_fd/Makefile.am
-
479src/spicelib/devices/bsim3soi_fd/b3soifd.c
-
443src/spicelib/devices/bsim3soi_fd/b3soifdacld.c
-
214src/spicelib/devices/bsim3soi_fd/b3soifdask.c
-
504src/spicelib/devices/bsim3soi_fd/b3soifdcheck.c
-
90src/spicelib/devices/bsim3soi_fd/b3soifdcvtest.c
-
1990src/spicelib/devices/bsim3soi_fd/b3soifddef.h
-
41src/spicelib/devices/bsim3soi_fd/b3soifddel.c
-
39src/spicelib/devices/bsim3soi_fd/b3soifddest.c
-
53src/spicelib/devices/bsim3soi_fd/b3soifdext.h
-
51src/spicelib/devices/bsim3soi_fd/b3soifdgetic.c
-
65src/spicelib/devices/bsim3soi_fd/b3soifdinit.c
-
13src/spicelib/devices/bsim3soi_fd/b3soifdinit.h
-
14src/spicelib/devices/bsim3soi_fd/b3soifditf.h
-
3593src/spicelib/devices/bsim3soi_fd/b3soifdld.c
-
1207src/spicelib/devices/bsim3soi_fd/b3soifdmask.c
-
47src/spicelib/devices/bsim3soi_fd/b3soifdmdel.c
-
1625src/spicelib/devices/bsim3soi_fd/b3soifdmpar.c
-
392src/spicelib/devices/bsim3soi_fd/b3soifdnoi.c
-
128src/spicelib/devices/bsim3soi_fd/b3soifdpar.c
-
152src/spicelib/devices/bsim3soi_fd/b3soifdpzld.c
-
1341src/spicelib/devices/bsim3soi_fd/b3soifdset.c
-
815src/spicelib/devices/bsim3soi_fd/b3soifdtemp.c
-
52src/spicelib/devices/bsim3soi_fd/b3soifdtrunc.c
-
23src/spicelib/parser/inp2m.c
-
16tests/bsim3soifd/Makefile.am
-
19tests/bsim3soifd/RampVg2.cir
-
13tests/bsim3soifd/RampVg2.out
-
17tests/bsim3soifd/inv2.cir
-
15tests/bsim3soifd/inv2.out
-
110tests/bsim3soifd/lib.h
-
39tests/bsim3soifd/nmosfd.mod
-
39tests/bsim3soifd/pmosfd.mod
-
23tests/bsim3soifd/ring51.cir
-
18tests/bsim3soifd/t3.cir
-
13tests/bsim3soifd/t3.out
-
16tests/bsim3soifd/t4.cir
-
4tests/bsim3soifd/t4.out
-
15tests/bsim3soifd/t5.cir
-
4tests/bsim3soifd/t5.out
-
172tests/bsim3soipd/RampVg2.out
-
279tests/bsim3soipd/inv2.out
-
7492tests/bsim3soipd/ring51.out
-
1913tests/bsim3soipd/t3.out
-
1442tests/bsim3soipd/t4.out
-
1442tests/bsim3soipd/t5.out
@ -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,34 @@ |
|||||
|
## Process this file with automake to produce Makefile.in
|
||||
|
|
||||
|
pkglib_LTLIBRARIES = libbsim3soifd.la |
||||
|
|
||||
|
libbsim3soifd_la_SOURCES = \
|
||||
|
b3soifd.c \
|
||||
|
b3soifdacld.c \
|
||||
|
b3soifdask.c \
|
||||
|
b3soifdcheck.c \
|
||||
|
b3soifdcvtest.c \
|
||||
|
b3soifddel.c \
|
||||
|
b3soifddest.c \
|
||||
|
b3soifdgetic.c \
|
||||
|
b3soifdld.c \
|
||||
|
b3soifdmask.c \
|
||||
|
b3soifdmdel.c \
|
||||
|
b3soifdmpar.c \
|
||||
|
b3soifdnoi.c \
|
||||
|
b3soifdpar.c \
|
||||
|
b3soifdpzld.c \
|
||||
|
b3soifdset.c \
|
||||
|
b3soifdtemp.c \
|
||||
|
b3soifdtrunc.c \
|
||||
|
b3soifddef.h \
|
||||
|
b3soifdext.h \
|
||||
|
b3soifdinit.c \
|
||||
|
b3soifdinit.h \
|
||||
|
b3soifditf.h |
||||
|
|
||||
|
|
||||
|
|
||||
|
INCLUDES = -I$(top_srcdir)/src/include |
||||
|
|
||||
|
MAINTAINERCLEANFILES = Makefile.in |
||||
@ -0,0 +1,479 @@ |
|||||
|
/********** |
||||
|
Copyright 1999 Regents of the University of California. All rights reserved. |
||||
|
Author: Weidong Liu and Pin Su Feb 1999 |
||||
|
Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang |
||||
|
Modified by Wei Jin 99/9/27 |
||||
|
File: b3soifd.c 98/5/01 |
||||
|
**********/ |
||||
|
|
||||
|
|
||||
|
#include "ngspice.h" |
||||
|
#include <stdio.h> |
||||
|
#include "devdefs.h" |
||||
|
#include "b3soifddef.h" |
||||
|
#include "suffix.h" |
||||
|
|
||||
|
IFparm B3SOIFDpTable[] = { /* parameters */ |
||||
|
IOP( "l", B3SOIFD_L, IF_REAL , "Length"), |
||||
|
IOP( "w", B3SOIFD_W, IF_REAL , "Width"), |
||||
|
IOP( "ad", B3SOIFD_AD, IF_REAL , "Drain area"), |
||||
|
IOP( "as", B3SOIFD_AS, IF_REAL , "Source area"), |
||||
|
IOP( "pd", B3SOIFD_PD, IF_REAL , "Drain perimeter"), |
||||
|
IOP( "ps", B3SOIFD_PS, IF_REAL , "Source perimeter"), |
||||
|
IOP( "nrd", B3SOIFD_NRD, IF_REAL , "Number of squares in drain"), |
||||
|
IOP( "nrs", B3SOIFD_NRS, IF_REAL , "Number of squares in source"), |
||||
|
IOP( "off", B3SOIFD_OFF, IF_FLAG , "Device is initially off"), |
||||
|
IP( "ic", B3SOIFD_IC, IF_REALVEC , "Vector of DS,GS,BS initial voltages"), |
||||
|
OP( "gmbs", B3SOIFD_GMBS, IF_REAL, "Gmb"), |
||||
|
OP( "gm", B3SOIFD_GM, IF_REAL, "Gm"), |
||||
|
OP( "gm/ids", B3SOIFD_GMID, IF_REAL, "Gm/Ids"), |
||||
|
OP( "gds", B3SOIFD_GDS, IF_REAL, "Gds"), |
||||
|
OP( "vdsat", B3SOIFD_VDSAT, IF_REAL, "Vdsat"), |
||||
|
OP( "vth", B3SOIFD_VON, IF_REAL, "Vth"), |
||||
|
OP( "ids", B3SOIFD_CD, IF_REAL, "Ids"), |
||||
|
OP( "vbs", B3SOIFD_VBS, IF_REAL, "Vbs"), |
||||
|
OP( "vgs", B3SOIFD_VGS, IF_REAL, "Vgs"), |
||||
|
OP( "vds", B3SOIFD_VDS, IF_REAL, "Vds"), |
||||
|
OP( "ves", B3SOIFD_VES, IF_REAL, "Ves"), |
||||
|
IOP( "bjtoff", B3SOIFD_BJTOFF, IF_INTEGER, "BJT on/off flag"), |
||||
|
IOP( "debug", B3SOIFD_DEBUG, IF_INTEGER, "BJT on/off flag"), |
||||
|
IOP( "rth0", B3SOIFD_RTH0, IF_REAL, "Instance Thermal Resistance"), |
||||
|
IOP( "cth0", B3SOIFD_CTH0, IF_REAL, "Instance Thermal Capacitance"), |
||||
|
IOP( "nrb", B3SOIFD_NRB, IF_REAL, "Number of squares in body"), |
||||
|
}; |
||||
|
|
||||
|
IFparm B3SOIFDmPTable[] = { /* model parameters */ |
||||
|
IOP( "capmod", B3SOIFD_MOD_CAPMOD, IF_INTEGER, "Capacitance model selector"), |
||||
|
IOP( "mobmod", B3SOIFD_MOD_MOBMOD, IF_INTEGER, "Mobility model selector"), |
||||
|
IOP( "noimod", B3SOIFD_MOD_NOIMOD, IF_INTEGER, "Noise model selector"), |
||||
|
IOP( "paramchk", B3SOIFD_MOD_PARAMCHK, IF_INTEGER, "Model parameter checking selector"), |
||||
|
IOP( "binunit", B3SOIFD_MOD_BINUNIT, IF_INTEGER, "Bin unit selector"), |
||||
|
IOP( "version", B3SOIFD_MOD_VERSION, IF_REAL, " parameter for model version"), |
||||
|
IOP( "tox", B3SOIFD_MOD_TOX, IF_REAL, "Gate oxide thickness in meters"), |
||||
|
|
||||
|
IOP( "cdsc", B3SOIFD_MOD_CDSC, IF_REAL, "Drain/Source and channel coupling capacitance"), |
||||
|
IOP( "cdscb", B3SOIFD_MOD_CDSCB, IF_REAL, "Body-bias dependence of cdsc"), |
||||
|
IOP( "cdscd", B3SOIFD_MOD_CDSCD, IF_REAL, "Drain-bias dependence of cdsc"), |
||||
|
IOP( "cit", B3SOIFD_MOD_CIT, IF_REAL, "Interface state capacitance"), |
||||
|
IOP( "nfactor", B3SOIFD_MOD_NFACTOR, IF_REAL, "Subthreshold swing Coefficient"), |
||||
|
IOP( "vsat", B3SOIFD_MOD_VSAT, IF_REAL, "Saturation velocity at tnom"), |
||||
|
IOP( "at", B3SOIFD_MOD_AT, IF_REAL, "Temperature coefficient of vsat"), |
||||
|
IOP( "a0", B3SOIFD_MOD_A0, IF_REAL, "Non-uniform depletion width effect coefficient."), |
||||
|
IOP( "ags", B3SOIFD_MOD_AGS, IF_REAL, "Gate bias coefficient of Abulk."), |
||||
|
IOP( "a1", B3SOIFD_MOD_A1, IF_REAL, "Non-saturation effect coefficient"), |
||||
|
IOP( "a2", B3SOIFD_MOD_A2, IF_REAL, "Non-saturation effect coefficient"), |
||||
|
IOP( "keta", B3SOIFD_MOD_KETA, IF_REAL, "Body-bias coefficient of non-uniform depletion width effect."), |
||||
|
IOP( "nsub", B3SOIFD_MOD_NSUB, IF_REAL, "Substrate doping concentration with polarity"), |
||||
|
IOP( "nch", B3SOIFD_MOD_NPEAK, IF_REAL, "Channel doping concentration"), |
||||
|
IOP( "ngate", B3SOIFD_MOD_NGATE, IF_REAL, "Poly-gate doping concentration"), |
||||
|
IOP( "gamma1", B3SOIFD_MOD_GAMMA1, IF_REAL, "Vth body coefficient"), |
||||
|
IOP( "gamma2", B3SOIFD_MOD_GAMMA2, IF_REAL, "Vth body coefficient"), |
||||
|
IOP( "vbx", B3SOIFD_MOD_VBX, IF_REAL, "Vth transition body Voltage"), |
||||
|
IOP( "vbm", B3SOIFD_MOD_VBM, IF_REAL, "Maximum body voltage"), |
||||
|
|
||||
|
IOP( "xt", B3SOIFD_MOD_XT, IF_REAL, "Doping depth"), |
||||
|
IOP( "k1", B3SOIFD_MOD_K1, IF_REAL, "Bulk effect coefficient 1"), |
||||
|
IOP( "kt1", B3SOIFD_MOD_KT1, IF_REAL, "Temperature coefficient of Vth"), |
||||
|
IOP( "kt1l", B3SOIFD_MOD_KT1L, IF_REAL, "Temperature coefficient of Vth"), |
||||
|
IOP( "kt2", B3SOIFD_MOD_KT2, IF_REAL, "Body-coefficient of kt1"), |
||||
|
IOP( "k2", B3SOIFD_MOD_K2, IF_REAL, "Bulk effect coefficient 2"), |
||||
|
IOP( "k3", B3SOIFD_MOD_K3, IF_REAL, "Narrow width effect coefficient"), |
||||
|
IOP( "k3b", B3SOIFD_MOD_K3B, IF_REAL, "Body effect coefficient of k3"), |
||||
|
IOP( "w0", B3SOIFD_MOD_W0, IF_REAL, "Narrow width effect parameter"), |
||||
|
IOP( "nlx", B3SOIFD_MOD_NLX, IF_REAL, "Lateral non-uniform doping effect"), |
||||
|
IOP( "dvt0", B3SOIFD_MOD_DVT0, IF_REAL, "Short channel effect coeff. 0"), |
||||
|
IOP( "dvt1", B3SOIFD_MOD_DVT1, IF_REAL, "Short channel effect coeff. 1"), |
||||
|
IOP( "dvt2", B3SOIFD_MOD_DVT2, IF_REAL, "Short channel effect coeff. 2"), |
||||
|
IOP( "dvt0w", B3SOIFD_MOD_DVT0W, IF_REAL, "Narrow Width coeff. 0"), |
||||
|
IOP( "dvt1w", B3SOIFD_MOD_DVT1W, IF_REAL, "Narrow Width effect coeff. 1"), |
||||
|
IOP( "dvt2w", B3SOIFD_MOD_DVT2W, IF_REAL, "Narrow Width effect coeff. 2"), |
||||
|
IOP( "drout", B3SOIFD_MOD_DROUT, IF_REAL, "DIBL coefficient of output resistance"), |
||||
|
IOP( "dsub", B3SOIFD_MOD_DSUB, IF_REAL, "DIBL coefficient in the subthreshold region"), |
||||
|
IOP( "vth0", B3SOIFD_MOD_VTH0, IF_REAL,"Threshold voltage"), |
||||
|
IOP( "vtho", B3SOIFD_MOD_VTH0, IF_REAL,"Threshold voltage"), |
||||
|
IOP( "ua", B3SOIFD_MOD_UA, IF_REAL, "Linear gate dependence of mobility"), |
||||
|
IOP( "ua1", B3SOIFD_MOD_UA1, IF_REAL, "Temperature coefficient of ua"), |
||||
|
IOP( "ub", B3SOIFD_MOD_UB, IF_REAL, "Quadratic gate dependence of mobility"), |
||||
|
IOP( "ub1", B3SOIFD_MOD_UB1, IF_REAL, "Temperature coefficient of ub"), |
||||
|
IOP( "uc", B3SOIFD_MOD_UC, IF_REAL, "Body-bias dependence of mobility"), |
||||
|
IOP( "uc1", B3SOIFD_MOD_UC1, IF_REAL, "Temperature coefficient of uc"), |
||||
|
IOP( "u0", B3SOIFD_MOD_U0, IF_REAL, "Low-field mobility at Tnom"), |
||||
|
IOP( "ute", B3SOIFD_MOD_UTE, IF_REAL, "Temperature coefficient of mobility"), |
||||
|
IOP( "voff", B3SOIFD_MOD_VOFF, IF_REAL, "Threshold voltage offset"), |
||||
|
IOP( "tnom", B3SOIFD_MOD_TNOM, IF_REAL, "Parameter measurement temperature"), |
||||
|
IOP( "cgso", B3SOIFD_MOD_CGSO, IF_REAL, "Gate-source overlap capacitance per width"), |
||||
|
IOP( "cgdo", B3SOIFD_MOD_CGDO, IF_REAL, "Gate-drain overlap capacitance per width"), |
||||
|
IOP( "cgeo", B3SOIFD_MOD_CGEO, IF_REAL, "Gate-substrate overlap capacitance"), |
||||
|
IOP( "xpart", B3SOIFD_MOD_XPART, IF_REAL, "Channel charge partitioning"), |
||||
|
IOP( "delta", B3SOIFD_MOD_DELTA, IF_REAL, "Effective Vds parameter"), |
||||
|
IOP( "rsh", B3SOIFD_MOD_RSH, IF_REAL, "Source-drain sheet resistance"), |
||||
|
IOP( "rdsw", B3SOIFD_MOD_RDSW, IF_REAL, "Source-drain resistance per width"), |
||||
|
|
||||
|
IOP( "prwg", B3SOIFD_MOD_PRWG, IF_REAL, "Gate-bias effect on parasitic resistance "), |
||||
|
IOP( "prwb", B3SOIFD_MOD_PRWB, IF_REAL, "Body-effect on parasitic resistance "), |
||||
|
|
||||
|
IOP( "prt", B3SOIFD_MOD_PRT, IF_REAL, "Temperature coefficient of parasitic resistance "), |
||||
|
IOP( "eta0", B3SOIFD_MOD_ETA0, IF_REAL, "Subthreshold region DIBL coefficient"), |
||||
|
IOP( "etab", B3SOIFD_MOD_ETAB, IF_REAL, "Subthreshold region DIBL coefficient"), |
||||
|
IOP( "pclm", B3SOIFD_MOD_PCLM, IF_REAL, "Channel length modulation Coefficient"), |
||||
|
IOP( "pdiblc1", B3SOIFD_MOD_PDIBL1, IF_REAL, "Drain-induced barrier lowering coefficient"), |
||||
|
IOP( "pdiblc2", B3SOIFD_MOD_PDIBL2, IF_REAL, "Drain-induced barrier lowering coefficient"), |
||||
|
IOP( "pdiblcb", B3SOIFD_MOD_PDIBLB, IF_REAL, "Body-effect on drain-induced barrier lowering"), |
||||
|
|
||||
|
IOP( "pvag", B3SOIFD_MOD_PVAG, IF_REAL, "Gate dependence of output resistance parameter"), |
||||
|
|
||||
|
IOP( "shmod", B3SOIFD_MOD_SHMOD, IF_INTEGER, "Self heating mode selector"), |
||||
|
IOP( "tbox", B3SOIFD_MOD_TBOX, IF_REAL, "Back gate oxide thickness in meters"), |
||||
|
IOP( "tsi", B3SOIFD_MOD_TSI, IF_REAL, "Silicon-on-insulator thickness in meters"), |
||||
|
IOP( "xj", B3SOIFD_MOD_XJ, IF_REAL, "Junction Depth"), |
||||
|
IOP( "kb1", B3SOIFD_MOD_KB1, IF_REAL, "Backgate coupling coefficient at strong inversion"), |
||||
|
IOP( "kb3", B3SOIFD_MOD_KB3, IF_REAL, "Backgate coupling coefficient at subthreshold"), |
||||
|
IOP( "dvbd0", B3SOIFD_MOD_DVBD0, IF_REAL, "First coefficient of short-channel effect on Vbs0t"), |
||||
|
IOP( "dvbd1", B3SOIFD_MOD_DVBD1, IF_REAL, "Second coefficient of short-channel effect on Vbs0t"), |
||||
|
IOP( "vbsa", B3SOIFD_MOD_VBSA, IF_REAL, "Vbs0t offset voltage"), |
||||
|
IOP( "delp", B3SOIFD_MOD_DELP, IF_REAL, "Offset constant for limiting Vbseff to Phis"), |
||||
|
IOP( "rbody", B3SOIFD_MOD_RBODY, IF_REAL, "Intrinsic body contact sheet resistance"), |
||||
|
IOP( "rbsh", B3SOIFD_MOD_RBSH, IF_REAL, "Extrinsic body contact sheet resistance"), |
||||
|
IOP( "adice0", B3SOIFD_MOD_ADICE0, IF_REAL, "DICE constant for bulk charge effect"), |
||||
|
IOP( "abp", B3SOIFD_MOD_ABP, IF_REAL, "Gate bias coefficient for Xcsat calculation"), |
||||
|
IOP( "mxc", B3SOIFD_MOD_MXC, IF_REAL, "A smoothing parameter for Xcsat calculation"), |
||||
|
IOP( "rth0", B3SOIFD_MOD_RTH0, IF_REAL, "Self-heating thermal resistance"), |
||||
|
IOP( "cth0", B3SOIFD_MOD_CTH0, IF_REAL, "Self-heating thermal capacitance"), |
||||
|
IOP( "aii", B3SOIFD_MOD_AII, IF_REAL, "1st Vdsatii parameter"), |
||||
|
IOP( "bii", B3SOIFD_MOD_BII, IF_REAL, "2nd Vdsatii parameter"), |
||||
|
IOP( "cii", B3SOIFD_MOD_CII, IF_REAL, "3rd Vdsatii parameter"), |
||||
|
IOP( "dii", B3SOIFD_MOD_DII, IF_REAL, "4th Vdsatii parameter"), |
||||
|
IOP( "ngidl", B3SOIFD_MOD_NGIDL, IF_REAL, "GIDL first parameter"), |
||||
|
IOP( "agidl", B3SOIFD_MOD_AGIDL, IF_REAL, "GIDL second parameter"), |
||||
|
IOP( "bgidl", B3SOIFD_MOD_BGIDL, IF_REAL, "GIDL third parameter"), |
||||
|
IOP( "ndiode", B3SOIFD_MOD_NDIODE, IF_REAL, "Diode non-ideality factor"), |
||||
|
IOP( "ntun", B3SOIFD_MOD_NTUN, IF_REAL, "Reverse tunneling non-ideality factor"), |
||||
|
IOP( "isbjt", B3SOIFD_MOD_ISBJT, IF_REAL, "BJT emitter injection constant"), |
||||
|
IOP( "isdif", B3SOIFD_MOD_ISDIF, IF_REAL, "Body to S/D injection constant"), |
||||
|
IOP( "isrec", B3SOIFD_MOD_ISREC, IF_REAL, "Recombination in depletion constant"), |
||||
|
IOP( "istun", B3SOIFD_MOD_ISTUN, IF_REAL, "Tunneling diode constant"), |
||||
|
IOP( "xbjt", B3SOIFD_MOD_XBJT, IF_REAL, "Temperature coefficient for Isbjt"), |
||||
|
IOP( "xdif", B3SOIFD_MOD_XBJT, IF_REAL, "Temperature coefficient for Isdif"), |
||||
|
IOP( "xrec", B3SOIFD_MOD_XREC, IF_REAL, "Temperature coefficient for Isrec"), |
||||
|
IOP( "xtun", B3SOIFD_MOD_XTUN, IF_REAL, "Temperature coefficient for Istun"), |
||||
|
IOP( "edl", B3SOIFD_MOD_EDL, IF_REAL, "Electron diffusion length"), |
||||
|
IOP( "kbjt1", B3SOIFD_MOD_KBJT1, IF_REAL, "Vds dependency on BJT base width"), |
||||
|
IOP( "tt", B3SOIFD_MOD_TT, IF_REAL, "Diffusion capacitance transit time coefficient"), |
||||
|
IOP( "vsdth", B3SOIFD_MOD_VSDTH, IF_REAL, "Source/Drain diffusion threshold voltage"), |
||||
|
IOP( "vsdfb", B3SOIFD_MOD_VSDFB, IF_REAL, "Source/Drain diffusion flatband voltage"), |
||||
|
IOP( "csdmin", B3SOIFD_MOD_CSDMIN, IF_REAL, "Source/Drain diffusion bottom minimum capacitance"), |
||||
|
IOP( "asd", B3SOIFD_MOD_ASD, IF_REAL, "Source/Drain diffusion smoothing parameter"), |
||||
|
|
||||
|
IOP( "pbswg", B3SOIFD_MOD_PBSWG, IF_REAL, "Source/drain (gate side) sidewall junction capacitance built in potential"), |
||||
|
IOP( "mjswg", B3SOIFD_MOD_MJSWG, IF_REAL, "Source/drain (gate side) sidewall junction capacitance grading coefficient"), |
||||
|
|
||||
|
IOP( "cjswg", B3SOIFD_MOD_CJSWG, IF_REAL, "Source/drain (gate side) sidewall junction capacitance per unit width"), |
||||
|
IOP( "csdesw", B3SOIFD_MOD_CSDESW, IF_REAL, "Source/drain sidewall fringing constant"), |
||||
|
IOP( "lint", B3SOIFD_MOD_LINT, IF_REAL, "Length reduction parameter"), |
||||
|
IOP( "ll", B3SOIFD_MOD_LL, IF_REAL, "Length reduction parameter"), |
||||
|
IOP( "lln", B3SOIFD_MOD_LLN, IF_REAL, "Length reduction parameter"), |
||||
|
IOP( "lw", B3SOIFD_MOD_LW, IF_REAL, "Length reduction parameter"), |
||||
|
IOP( "lwn", B3SOIFD_MOD_LWN, IF_REAL, "Length reduction parameter"), |
||||
|
IOP( "lwl", B3SOIFD_MOD_LWL, IF_REAL, "Length reduction parameter"), |
||||
|
|
||||
|
IOP( "wr", B3SOIFD_MOD_WR, IF_REAL, "Width dependence of rds"), |
||||
|
IOP( "wint", B3SOIFD_MOD_WINT, IF_REAL, "Width reduction parameter"), |
||||
|
IOP( "dwg", B3SOIFD_MOD_DWG, IF_REAL, "Width reduction parameter"), |
||||
|
IOP( "dwb", B3SOIFD_MOD_DWB, IF_REAL, "Width reduction parameter"), |
||||
|
|
||||
|
IOP( "wl", B3SOIFD_MOD_WL, IF_REAL, "Width reduction parameter"), |
||||
|
IOP( "wln", B3SOIFD_MOD_WLN, IF_REAL, "Width reduction parameter"), |
||||
|
IOP( "ww", B3SOIFD_MOD_WW, IF_REAL, "Width reduction parameter"), |
||||
|
IOP( "wwn", B3SOIFD_MOD_WWN, IF_REAL, "Width reduction parameter"), |
||||
|
IOP( "wwl", B3SOIFD_MOD_WWL, IF_REAL, "Width reduction parameter"), |
||||
|
|
||||
|
IOP( "b0", B3SOIFD_MOD_B0, IF_REAL, "Abulk narrow width parameter"), |
||||
|
IOP( "b1", B3SOIFD_MOD_B1, IF_REAL, "Abulk narrow width parameter"), |
||||
|
|
||||
|
IOP( "cgsl", B3SOIFD_MOD_CGSL, IF_REAL, "New C-V model parameter"), |
||||
|
IOP( "cgdl", B3SOIFD_MOD_CGDL, IF_REAL, "New C-V model parameter"), |
||||
|
IOP( "ckappa", B3SOIFD_MOD_CKAPPA, IF_REAL, "New C-V model parameter"), |
||||
|
IOP( "cf", B3SOIFD_MOD_CF, IF_REAL, "Fringe capacitance parameter"), |
||||
|
IOP( "clc", B3SOIFD_MOD_CLC, IF_REAL, "Vdsat parameter for C-V model"), |
||||
|
IOP( "cle", B3SOIFD_MOD_CLE, IF_REAL, "Vdsat parameter for C-V model"), |
||||
|
IOP( "dwc", B3SOIFD_MOD_DWC, IF_REAL, "Delta W for C-V model"), |
||||
|
IOP( "dlc", B3SOIFD_MOD_DLC, IF_REAL, "Delta L for C-V model"), |
||||
|
|
||||
|
IOP( "alpha0", B3SOIFD_MOD_ALPHA0, IF_REAL, "substrate current model parameter"), |
||||
|
IOP( "alpha1", B3SOIFD_MOD_ALPHA1, IF_REAL, "substrate current model parameter"), |
||||
|
IOP( "beta0", B3SOIFD_MOD_BETA0, IF_REAL, "substrate current model parameter"), |
||||
|
|
||||
|
IOP( "noia", B3SOIFD_MOD_NOIA, IF_REAL, "Flicker noise parameter"), |
||||
|
IOP( "noib", B3SOIFD_MOD_NOIB, IF_REAL, "Flicker noise parameter"), |
||||
|
IOP( "noic", B3SOIFD_MOD_NOIC, IF_REAL, "Flicker noise parameter"), |
||||
|
IOP( "em", B3SOIFD_MOD_EM, IF_REAL, "Flicker noise parameter"), |
||||
|
IOP( "ef", B3SOIFD_MOD_EF, IF_REAL, "Flicker noise frequency exponent"), |
||||
|
IOP( "af", B3SOIFD_MOD_AF, IF_REAL, "Flicker noise exponent"), |
||||
|
IOP( "kf", B3SOIFD_MOD_KF, IF_REAL, "Flicker noise coefficient"), |
||||
|
IOP( "noif", B3SOIFD_MOD_NOIF, IF_REAL, "Floating body excess noise ideality factor"), |
||||
|
|
||||
|
/* Added for binning - START */ |
||||
|
/* Length Dependence */ |
||||
|
IOP( "lnch", B3SOIFD_MOD_LNPEAK, IF_REAL, "Length dependence of nch"), |
||||
|
IOP( "lnsub", B3SOIFD_MOD_LNSUB, IF_REAL, "Length dependence of nsub"), |
||||
|
IOP( "lngate", B3SOIFD_MOD_LNGATE, IF_REAL, "Length dependence of ngate"), |
||||
|
IOP( "lvth0", B3SOIFD_MOD_LVTH0, IF_REAL,"Length dependence of vto"), |
||||
|
IOP( "lk1", B3SOIFD_MOD_LK1, IF_REAL, "Length dependence of k1"), |
||||
|
IOP( "lk2", B3SOIFD_MOD_LK2, IF_REAL, "Length dependence of k2"), |
||||
|
IOP( "lk3", B3SOIFD_MOD_LK3, IF_REAL, "Length dependence of k3"), |
||||
|
IOP( "lk3b", B3SOIFD_MOD_LK3B, IF_REAL, "Length dependence of k3b"), |
||||
|
IOP( "lvbsa", B3SOIFD_MOD_LVBSA, IF_REAL, "Length dependence of vbsa"), |
||||
|
IOP( "ldelp", B3SOIFD_MOD_LDELP, IF_REAL, "Length dependence of delp"), |
||||
|
IOP( "lkb1", B3SOIFD_MOD_LKB1, IF_REAL, "Length dependence of kb1"), |
||||
|
IOP( "lkb3", B3SOIFD_MOD_LKB3, IF_REAL, "Length dependence of kb3"), |
||||
|
IOP( "ldvbd0", B3SOIFD_MOD_LDVBD0, IF_REAL, "Length dependence of dvbd0"), |
||||
|
IOP( "ldvbd1", B3SOIFD_MOD_LDVBD1, IF_REAL, "Length dependence of dvbd1"), |
||||
|
IOP( "lw0", B3SOIFD_MOD_LW0, IF_REAL, "Length dependence of w0"), |
||||
|
IOP( "lnlx", B3SOIFD_MOD_LNLX, IF_REAL, "Length dependence of nlx"), |
||||
|
IOP( "ldvt0", B3SOIFD_MOD_LDVT0, IF_REAL, "Length dependence of dvt0"), |
||||
|
IOP( "ldvt1", B3SOIFD_MOD_LDVT1, IF_REAL, "Length dependence of dvt1"), |
||||
|
IOP( "ldvt2", B3SOIFD_MOD_LDVT2, IF_REAL, "Length dependence of dvt2"), |
||||
|
IOP( "ldvt0w", B3SOIFD_MOD_LDVT0W, IF_REAL, "Length dependence of dvt0w"), |
||||
|
IOP( "ldvt1w", B3SOIFD_MOD_LDVT1W, IF_REAL, "Length dependence of dvt1w"), |
||||
|
IOP( "ldvt2w", B3SOIFD_MOD_LDVT2W, IF_REAL, "Length dependence of dvt2w"), |
||||
|
IOP( "lu0", B3SOIFD_MOD_LU0, IF_REAL, "Length dependence of u0"), |
||||
|
IOP( "lua", B3SOIFD_MOD_LUA, IF_REAL, "Length dependence of ua"), |
||||
|
IOP( "lub", B3SOIFD_MOD_LUB, IF_REAL, "Length dependence of ub"), |
||||
|
IOP( "luc", B3SOIFD_MOD_LUC, IF_REAL, "Length dependence of uc"), |
||||
|
IOP( "lvsat", B3SOIFD_MOD_LVSAT, IF_REAL, "Length dependence of vsat"), |
||||
|
IOP( "la0", B3SOIFD_MOD_LA0, IF_REAL, "Length dependence of a0"), |
||||
|
IOP( "lags", B3SOIFD_MOD_LAGS, IF_REAL, "Length dependence of ags"), |
||||
|
IOP( "lb0", B3SOIFD_MOD_LB0, IF_REAL, "Length dependence of b0"), |
||||
|
IOP( "lb1", B3SOIFD_MOD_LB1, IF_REAL, "Length dependence of b1"), |
||||
|
IOP( "lketa", B3SOIFD_MOD_LKETA, IF_REAL, "Length dependence of keta"), |
||||
|
IOP( "labp", B3SOIFD_MOD_LABP, IF_REAL, "Length dependence of abp"), |
||||
|
IOP( "lmxc", B3SOIFD_MOD_LMXC, IF_REAL, "Length dependence of mxc"), |
||||
|
IOP( "ladice0", B3SOIFD_MOD_LADICE0, IF_REAL, "Length dependence of adice0"), |
||||
|
IOP( "la1", B3SOIFD_MOD_LA1, IF_REAL, "Length dependence of a1"), |
||||
|
IOP( "la2", B3SOIFD_MOD_LA2, IF_REAL, "Length dependence of a2"), |
||||
|
IOP( "lrdsw", B3SOIFD_MOD_LRDSW, IF_REAL, "Length dependence of rdsw "), |
||||
|
IOP( "lprwb", B3SOIFD_MOD_LPRWB, IF_REAL, "Length dependence of prwb "), |
||||
|
IOP( "lprwg", B3SOIFD_MOD_LPRWG, IF_REAL, "Length dependence of prwg "), |
||||
|
IOP( "lwr", B3SOIFD_MOD_LWR, IF_REAL, "Length dependence of wr"), |
||||
|
IOP( "lnfactor", B3SOIFD_MOD_LNFACTOR, IF_REAL, "Length dependence of nfactor"), |
||||
|
IOP( "ldwg", B3SOIFD_MOD_LDWG, IF_REAL, "Length dependence of dwg"), |
||||
|
IOP( "ldwb", B3SOIFD_MOD_LDWB, IF_REAL, "Length dependence of dwb"), |
||||
|
IOP( "lvoff", B3SOIFD_MOD_LVOFF, IF_REAL, "Length dependence of voff"), |
||||
|
IOP( "leta0", B3SOIFD_MOD_LETA0, IF_REAL, "Length dependence of eta0"), |
||||
|
IOP( "letab", B3SOIFD_MOD_LETAB, IF_REAL, "Length dependence of etab"), |
||||
|
IOP( "ldsub", B3SOIFD_MOD_LDSUB, IF_REAL, "Length dependence of dsub"), |
||||
|
IOP( "lcit", B3SOIFD_MOD_LCIT, IF_REAL, "Length dependence of cit"), |
||||
|
IOP( "lcdsc", B3SOIFD_MOD_LCDSC, IF_REAL, "Length dependence of cdsc"), |
||||
|
IOP( "lcdscb", B3SOIFD_MOD_LCDSCB, IF_REAL, "Length dependence of cdscb"), |
||||
|
IOP( "lcdscd", B3SOIFD_MOD_LCDSCD, IF_REAL, "Length dependence of cdscd"), |
||||
|
IOP( "lpclm", B3SOIFD_MOD_LPCLM, IF_REAL, "Length dependence of pclm"), |
||||
|
IOP( "lpdiblc1", B3SOIFD_MOD_LPDIBL1, IF_REAL, "Length dependence of pdiblc1"), |
||||
|
IOP( "lpdiblc2", B3SOIFD_MOD_LPDIBL2, IF_REAL, "Length dependence of pdiblc2"), |
||||
|
IOP( "lpdiblcb", B3SOIFD_MOD_LPDIBLB, IF_REAL, "Length dependence of pdiblcb"), |
||||
|
IOP( "ldrout", B3SOIFD_MOD_LDROUT, IF_REAL, "Length dependence of drout"), |
||||
|
IOP( "lpvag", B3SOIFD_MOD_LPVAG, IF_REAL, "Length dependence of pvag"), |
||||
|
IOP( "ldelta", B3SOIFD_MOD_LDELTA, IF_REAL, "Length dependence of delta"), |
||||
|
IOP( "laii", B3SOIFD_MOD_LAII, IF_REAL, "Length dependence of aii"), |
||||
|
IOP( "lbii", B3SOIFD_MOD_LBII, IF_REAL, "Length dependence of bii"), |
||||
|
IOP( "lcii", B3SOIFD_MOD_LCII, IF_REAL, "Length dependence of cii"), |
||||
|
IOP( "ldii", B3SOIFD_MOD_LDII, IF_REAL, "Length dependence of dii"), |
||||
|
IOP( "lalpha0", B3SOIFD_MOD_LALPHA0, IF_REAL, "Length dependence of alpha0"), |
||||
|
IOP( "lalpha1", B3SOIFD_MOD_LALPHA1, IF_REAL, "Length dependence of alpha1"), |
||||
|
IOP( "lbeta0", B3SOIFD_MOD_LBETA0, IF_REAL, "Length dependence of beta0"), |
||||
|
IOP( "lagidl", B3SOIFD_MOD_LAGIDL, IF_REAL, "Length dependence of agidl"), |
||||
|
IOP( "lbgidl", B3SOIFD_MOD_LBGIDL, IF_REAL, "Length dependence of bgidl"), |
||||
|
IOP( "lngidl", B3SOIFD_MOD_LNGIDL, IF_REAL, "Length dependence of ngidl"), |
||||
|
IOP( "lntun", B3SOIFD_MOD_LNTUN, IF_REAL, "Length dependence of ntun"), |
||||
|
IOP( "lndiode", B3SOIFD_MOD_LNDIODE, IF_REAL, "Length dependence of ndiode"), |
||||
|
IOP( "lisbjt", B3SOIFD_MOD_LISBJT, IF_REAL, "Length dependence of isbjt"), |
||||
|
IOP( "lisdif", B3SOIFD_MOD_LISDIF, IF_REAL, "Length dependence of isdif"), |
||||
|
IOP( "lisrec", B3SOIFD_MOD_LISREC, IF_REAL, "Length dependence of isrec"), |
||||
|
IOP( "listun", B3SOIFD_MOD_LISTUN, IF_REAL, "Length dependence of istun"), |
||||
|
IOP( "ledl", B3SOIFD_MOD_LEDL, IF_REAL, "Length dependence of edl"), |
||||
|
IOP( "lkbjt1", B3SOIFD_MOD_LKBJT1, IF_REAL, "Length dependence of kbjt1"), |
||||
|
IOP( "lvsdfb", B3SOIFD_MOD_LVSDFB, IF_REAL, "Length dependence of vsdfb"), |
||||
|
IOP( "lvsdth", B3SOIFD_MOD_LVSDTH, IF_REAL, "Length dependence of vsdth"), |
||||
|
/* Width Dependence */ |
||||
|
IOP( "wnch", B3SOIFD_MOD_WNPEAK, IF_REAL, "Width dependence of nch"), |
||||
|
IOP( "wnsub", B3SOIFD_MOD_WNSUB, IF_REAL, "Width dependence of nsub"), |
||||
|
IOP( "wngate", B3SOIFD_MOD_WNGATE, IF_REAL, "Width dependence of ngate"), |
||||
|
IOP( "wvth0", B3SOIFD_MOD_WVTH0, IF_REAL,"Width dependence of vto"), |
||||
|
IOP( "wk1", B3SOIFD_MOD_WK1, IF_REAL, "Width dependence of k1"), |
||||
|
IOP( "wk2", B3SOIFD_MOD_WK2, IF_REAL, "Width dependence of k2"), |
||||
|
IOP( "wk3", B3SOIFD_MOD_WK3, IF_REAL, "Width dependence of k3"), |
||||
|
IOP( "wk3b", B3SOIFD_MOD_WK3B, IF_REAL, "Width dependence of k3b"), |
||||
|
IOP( "wvbsa", B3SOIFD_MOD_WVBSA, IF_REAL, "Width dependence of vbsa"), |
||||
|
IOP( "wdelp", B3SOIFD_MOD_WDELP, IF_REAL, "Width dependence of delp"), |
||||
|
IOP( "wkb1", B3SOIFD_MOD_WKB1, IF_REAL, "Width dependence of kb1"), |
||||
|
IOP( "wkb3", B3SOIFD_MOD_WKB3, IF_REAL, "Width dependence of kb3"), |
||||
|
IOP( "wdvbd0", B3SOIFD_MOD_WDVBD0, IF_REAL, "Width dependence of dvbd0"), |
||||
|
IOP( "wdvbd1", B3SOIFD_MOD_WDVBD1, IF_REAL, "Width dependence of dvbd1"), |
||||
|
IOP( "ww0", B3SOIFD_MOD_WW0, IF_REAL, "Width dependence of w0"), |
||||
|
IOP( "wnlx", B3SOIFD_MOD_WNLX, IF_REAL, "Width dependence of nlx"), |
||||
|
IOP( "wdvt0", B3SOIFD_MOD_WDVT0, IF_REAL, "Width dependence of dvt0"), |
||||
|
IOP( "wdvt1", B3SOIFD_MOD_WDVT1, IF_REAL, "Width dependence of dvt1"), |
||||
|
IOP( "wdvt2", B3SOIFD_MOD_WDVT2, IF_REAL, "Width dependence of dvt2"), |
||||
|
IOP( "wdvt0w", B3SOIFD_MOD_WDVT0W, IF_REAL, "Width dependence of dvt0w"), |
||||
|
IOP( "wdvt1w", B3SOIFD_MOD_WDVT1W, IF_REAL, "Width dependence of dvt1w"), |
||||
|
IOP( "wdvt2w", B3SOIFD_MOD_WDVT2W, IF_REAL, "Width dependence of dvt2w"), |
||||
|
IOP( "wu0", B3SOIFD_MOD_WU0, IF_REAL, "Width dependence of u0"), |
||||
|
IOP( "wua", B3SOIFD_MOD_WUA, IF_REAL, "Width dependence of ua"), |
||||
|
IOP( "wub", B3SOIFD_MOD_WUB, IF_REAL, "Width dependence of ub"), |
||||
|
IOP( "wuc", B3SOIFD_MOD_WUC, IF_REAL, "Width dependence of uc"), |
||||
|
IOP( "wvsat", B3SOIFD_MOD_WVSAT, IF_REAL, "Width dependence of vsat"), |
||||
|
IOP( "wa0", B3SOIFD_MOD_WA0, IF_REAL, "Width dependence of a0"), |
||||
|
IOP( "wags", B3SOIFD_MOD_WAGS, IF_REAL, "Width dependence of ags"), |
||||
|
IOP( "wb0", B3SOIFD_MOD_WB0, IF_REAL, "Width dependence of b0"), |
||||
|
IOP( "wb1", B3SOIFD_MOD_WB1, IF_REAL, "Width dependence of b1"), |
||||
|
IOP( "wketa", B3SOIFD_MOD_WKETA, IF_REAL, "Width dependence of keta"), |
||||
|
IOP( "wabp", B3SOIFD_MOD_WABP, IF_REAL, "Width dependence of abp"), |
||||
|
IOP( "wmxc", B3SOIFD_MOD_WMXC, IF_REAL, "Width dependence of mxc"), |
||||
|
IOP( "wadice0", B3SOIFD_MOD_WADICE0, IF_REAL, "Width dependence of adice0"), |
||||
|
IOP( "wa1", B3SOIFD_MOD_WA1, IF_REAL, "Width dependence of a1"), |
||||
|
IOP( "wa2", B3SOIFD_MOD_WA2, IF_REAL, "Width dependence of a2"), |
||||
|
IOP( "wrdsw", B3SOIFD_MOD_WRDSW, IF_REAL, "Width dependence of rdsw "), |
||||
|
IOP( "wprwb", B3SOIFD_MOD_WPRWB, IF_REAL, "Width dependence of prwb "), |
||||
|
IOP( "wprwg", B3SOIFD_MOD_WPRWG, IF_REAL, "Width dependence of prwg "), |
||||
|
IOP( "wwr", B3SOIFD_MOD_WWR, IF_REAL, "Width dependence of wr"), |
||||
|
IOP( "wnfactor", B3SOIFD_MOD_WNFACTOR, IF_REAL, "Width dependence of nfactor"), |
||||
|
IOP( "wdwg", B3SOIFD_MOD_WDWG, IF_REAL, "Width dependence of dwg"), |
||||
|
IOP( "wdwb", B3SOIFD_MOD_WDWB, IF_REAL, "Width dependence of dwb"), |
||||
|
IOP( "wvoff", B3SOIFD_MOD_WVOFF, IF_REAL, "Width dependence of voff"), |
||||
|
IOP( "weta0", B3SOIFD_MOD_WETA0, IF_REAL, "Width dependence of eta0"), |
||||
|
IOP( "wetab", B3SOIFD_MOD_WETAB, IF_REAL, "Width dependence of etab"), |
||||
|
IOP( "wdsub", B3SOIFD_MOD_WDSUB, IF_REAL, "Width dependence of dsub"), |
||||
|
IOP( "wcit", B3SOIFD_MOD_WCIT, IF_REAL, "Width dependence of cit"), |
||||
|
IOP( "wcdsc", B3SOIFD_MOD_WCDSC, IF_REAL, "Width dependence of cdsc"), |
||||
|
IOP( "wcdscb", B3SOIFD_MOD_WCDSCB, IF_REAL, "Width dependence of cdscb"), |
||||
|
IOP( "wcdscd", B3SOIFD_MOD_WCDSCD, IF_REAL, "Width dependence of cdscd"), |
||||
|
IOP( "wpclm", B3SOIFD_MOD_WPCLM, IF_REAL, "Width dependence of pclm"), |
||||
|
IOP( "wpdiblc1", B3SOIFD_MOD_WPDIBL1, IF_REAL, "Width dependence of pdiblc1"), |
||||
|
IOP( "wpdiblc2", B3SOIFD_MOD_WPDIBL2, IF_REAL, "Width dependence of pdiblc2"), |
||||
|
IOP( "wpdiblcb", B3SOIFD_MOD_WPDIBLB, IF_REAL, "Width dependence of pdiblcb"), |
||||
|
IOP( "wdrout", B3SOIFD_MOD_WDROUT, IF_REAL, "Width dependence of drout"), |
||||
|
IOP( "wpvag", B3SOIFD_MOD_WPVAG, IF_REAL, "Width dependence of pvag"), |
||||
|
IOP( "wdelta", B3SOIFD_MOD_WDELTA, IF_REAL, "Width dependence of delta"), |
||||
|
IOP( "waii", B3SOIFD_MOD_WAII, IF_REAL, "Width dependence of aii"), |
||||
|
IOP( "wbii", B3SOIFD_MOD_WBII, IF_REAL, "Width dependence of bii"), |
||||
|
IOP( "wcii", B3SOIFD_MOD_WCII, IF_REAL, "Width dependence of cii"), |
||||
|
IOP( "wdii", B3SOIFD_MOD_WDII, IF_REAL, "Width dependence of dii"), |
||||
|
IOP( "walpha0", B3SOIFD_MOD_WALPHA0, IF_REAL, "Width dependence of alpha0"), |
||||
|
IOP( "walpha1", B3SOIFD_MOD_WALPHA1, IF_REAL, "Width dependence of alpha1"), |
||||
|
IOP( "wbeta0", B3SOIFD_MOD_WBETA0, IF_REAL, "Width dependence of beta0"), |
||||
|
IOP( "wagidl", B3SOIFD_MOD_WAGIDL, IF_REAL, "Width dependence of agidl"), |
||||
|
IOP( "wbgidl", B3SOIFD_MOD_WBGIDL, IF_REAL, "Width dependence of bgidl"), |
||||
|
IOP( "wngidl", B3SOIFD_MOD_WNGIDL, IF_REAL, "Width dependence of ngidl"), |
||||
|
IOP( "wntun", B3SOIFD_MOD_WNTUN, IF_REAL, "Width dependence of ntun"), |
||||
|
IOP( "wndiode", B3SOIFD_MOD_WNDIODE, IF_REAL, "Width dependence of ndiode"), |
||||
|
IOP( "wisbjt", B3SOIFD_MOD_WISBJT, IF_REAL, "Width dependence of isbjt"), |
||||
|
IOP( "wisdif", B3SOIFD_MOD_WISDIF, IF_REAL, "Width dependence of isdif"), |
||||
|
IOP( "wisrec", B3SOIFD_MOD_WISREC, IF_REAL, "Width dependence of isrec"), |
||||
|
IOP( "wistun", B3SOIFD_MOD_WISTUN, IF_REAL, "Width dependence of istun"), |
||||
|
IOP( "wedl", B3SOIFD_MOD_WEDL, IF_REAL, "Width dependence of edl"), |
||||
|
IOP( "wkbjt1", B3SOIFD_MOD_WKBJT1, IF_REAL, "Width dependence of kbjt1"), |
||||
|
IOP( "wvsdfb", B3SOIFD_MOD_WVSDFB, IF_REAL, "Width dependence of vsdfb"), |
||||
|
IOP( "wvsdth", B3SOIFD_MOD_WVSDTH, IF_REAL, "Width dependence of vsdth"), |
||||
|
/* Cross-term Dependence */ |
||||
|
IOP( "pnch", B3SOIFD_MOD_PNPEAK, IF_REAL, "Cross-term dependence of nch"), |
||||
|
IOP( "pnsub", B3SOIFD_MOD_PNSUB, IF_REAL, "Cross-term dependence of nsub"), |
||||
|
IOP( "pngate", B3SOIFD_MOD_PNGATE, IF_REAL, "Cross-term dependence of ngate"), |
||||
|
IOP( "pvth0", B3SOIFD_MOD_PVTH0, IF_REAL,"Cross-term dependence of vto"), |
||||
|
IOP( "pk1", B3SOIFD_MOD_PK1, IF_REAL, "Cross-term dependence of k1"), |
||||
|
IOP( "pk2", B3SOIFD_MOD_PK2, IF_REAL, "Cross-term dependence of k2"), |
||||
|
IOP( "pk3", B3SOIFD_MOD_PK3, IF_REAL, "Cross-term dependence of k3"), |
||||
|
IOP( "pk3b", B3SOIFD_MOD_PK3B, IF_REAL, "Cross-term dependence of k3b"), |
||||
|
IOP( "pvbsa", B3SOIFD_MOD_PVBSA, IF_REAL, "Cross-term dependence of vbsa"), |
||||
|
IOP( "pdelp", B3SOIFD_MOD_PDELP, IF_REAL, "Cross-term dependence of delp"), |
||||
|
IOP( "pkb1", B3SOIFD_MOD_PKB1, IF_REAL, "Cross-term dependence of kb1"), |
||||
|
IOP( "pkb3", B3SOIFD_MOD_PKB3, IF_REAL, "Cross-term dependence of kb3"), |
||||
|
IOP( "pdvbd0", B3SOIFD_MOD_PDVBD0, IF_REAL, "Cross-term dependence of dvbd0"), |
||||
|
IOP( "pdvbd1", B3SOIFD_MOD_PDVBD1, IF_REAL, "Cross-term dependence of dvbd1"), |
||||
|
IOP( "pw0", B3SOIFD_MOD_PW0, IF_REAL, "Cross-term dependence of w0"), |
||||
|
IOP( "pnlx", B3SOIFD_MOD_PNLX, IF_REAL, "Cross-term dependence of nlx"), |
||||
|
IOP( "pdvt0", B3SOIFD_MOD_PDVT0, IF_REAL, "Cross-term dependence of dvt0"), |
||||
|
IOP( "pdvt1", B3SOIFD_MOD_PDVT1, IF_REAL, "Cross-term dependence of dvt1"), |
||||
|
IOP( "pdvt2", B3SOIFD_MOD_PDVT2, IF_REAL, "Cross-term dependence of dvt2"), |
||||
|
IOP( "pdvt0w", B3SOIFD_MOD_PDVT0W, IF_REAL, "Cross-term dependence of dvt0w"), |
||||
|
IOP( "pdvt1w", B3SOIFD_MOD_PDVT1W, IF_REAL, "Cross-term dependence of dvt1w"), |
||||
|
IOP( "pdvt2w", B3SOIFD_MOD_PDVT2W, IF_REAL, "Cross-term dependence of dvt2w"), |
||||
|
IOP( "pu0", B3SOIFD_MOD_PU0, IF_REAL, "Cross-term dependence of u0"), |
||||
|
IOP( "pua", B3SOIFD_MOD_PUA, IF_REAL, "Cross-term dependence of ua"), |
||||
|
IOP( "pub", B3SOIFD_MOD_PUB, IF_REAL, "Cross-term dependence of ub"), |
||||
|
IOP( "puc", B3SOIFD_MOD_PUC, IF_REAL, "Cross-term dependence of uc"), |
||||
|
IOP( "pvsat", B3SOIFD_MOD_PVSAT, IF_REAL, "Cross-term dependence of vsat"), |
||||
|
IOP( "pa0", B3SOIFD_MOD_PA0, IF_REAL, "Cross-term dependence of a0"), |
||||
|
IOP( "pags", B3SOIFD_MOD_PAGS, IF_REAL, "Cross-term dependence of ags"), |
||||
|
IOP( "pb0", B3SOIFD_MOD_PB0, IF_REAL, "Cross-term dependence of b0"), |
||||
|
IOP( "pb1", B3SOIFD_MOD_PB1, IF_REAL, "Cross-term dependence of b1"), |
||||
|
IOP( "pketa", B3SOIFD_MOD_PKETA, IF_REAL, "Cross-term dependence of keta"), |
||||
|
IOP( "pabp", B3SOIFD_MOD_PABP, IF_REAL, "Cross-term dependence of abp"), |
||||
|
IOP( "pmxc", B3SOIFD_MOD_PMXC, IF_REAL, "Cross-term dependence of mxc"), |
||||
|
IOP( "padice0", B3SOIFD_MOD_PADICE0, IF_REAL, "Cross-term dependence of adice0"), |
||||
|
IOP( "pa1", B3SOIFD_MOD_PA1, IF_REAL, "Cross-term dependence of a1"), |
||||
|
IOP( "pa2", B3SOIFD_MOD_PA2, IF_REAL, "Cross-term dependence of a2"), |
||||
|
IOP( "prdsw", B3SOIFD_MOD_PRDSW, IF_REAL, "Cross-term dependence of rdsw "), |
||||
|
IOP( "pprwb", B3SOIFD_MOD_PPRWB, IF_REAL, "Cross-term dependence of prwb "), |
||||
|
IOP( "pprwg", B3SOIFD_MOD_PPRWG, IF_REAL, "Cross-term dependence of prwg "), |
||||
|
IOP( "pwr", B3SOIFD_MOD_PWR, IF_REAL, "Cross-term dependence of wr"), |
||||
|
IOP( "pnfactor", B3SOIFD_MOD_PNFACTOR, IF_REAL, "Cross-term dependence of nfactor"), |
||||
|
IOP( "pdwg", B3SOIFD_MOD_PDWG, IF_REAL, "Cross-term dependence of dwg"), |
||||
|
IOP( "pdwb", B3SOIFD_MOD_PDWB, IF_REAL, "Cross-term dependence of dwb"), |
||||
|
IOP( "pvoff", B3SOIFD_MOD_PVOFF, IF_REAL, "Cross-term dependence of voff"), |
||||
|
IOP( "peta0", B3SOIFD_MOD_PETA0, IF_REAL, "Cross-term dependence of eta0"), |
||||
|
IOP( "petab", B3SOIFD_MOD_PETAB, IF_REAL, "Cross-term dependence of etab"), |
||||
|
IOP( "pdsub", B3SOIFD_MOD_PDSUB, IF_REAL, "Cross-term dependence of dsub"), |
||||
|
IOP( "pcit", B3SOIFD_MOD_PCIT, IF_REAL, "Cross-term dependence of cit"), |
||||
|
IOP( "pcdsc", B3SOIFD_MOD_PCDSC, IF_REAL, "Cross-term dependence of cdsc"), |
||||
|
IOP( "pcdscb", B3SOIFD_MOD_PCDSCB, IF_REAL, "Cross-term dependence of cdscb"), |
||||
|
IOP( "pcdscd", B3SOIFD_MOD_PCDSCD, IF_REAL, "Cross-term dependence of cdscd"), |
||||
|
IOP( "ppclm", B3SOIFD_MOD_PPCLM, IF_REAL, "Cross-term dependence of pclm"), |
||||
|
IOP( "ppdiblc1", B3SOIFD_MOD_PPDIBL1, IF_REAL, "Cross-term dependence of pdiblc1"), |
||||
|
IOP( "ppdiblc2", B3SOIFD_MOD_PPDIBL2, IF_REAL, "Cross-term dependence of pdiblc2"), |
||||
|
IOP( "ppdiblcb", B3SOIFD_MOD_PPDIBLB, IF_REAL, "Cross-term dependence of pdiblcb"), |
||||
|
IOP( "pdrout", B3SOIFD_MOD_PDROUT, IF_REAL, "Cross-term dependence of drout"), |
||||
|
IOP( "ppvag", B3SOIFD_MOD_PPVAG, IF_REAL, "Cross-term dependence of pvag"), |
||||
|
IOP( "pdelta", B3SOIFD_MOD_PDELTA, IF_REAL, "Cross-term dependence of delta"), |
||||
|
IOP( "paii", B3SOIFD_MOD_PAII, IF_REAL, "Cross-term dependence of aii"), |
||||
|
IOP( "pbii", B3SOIFD_MOD_PBII, IF_REAL, "Cross-term dependence of bii"), |
||||
|
IOP( "pcii", B3SOIFD_MOD_PCII, IF_REAL, "Cross-term dependence of cii"), |
||||
|
IOP( "pdii", B3SOIFD_MOD_PDII, IF_REAL, "Cross-term dependence of dii"), |
||||
|
IOP( "palpha0", B3SOIFD_MOD_PALPHA0, IF_REAL, "Cross-term dependence of alpha0"), |
||||
|
IOP( "palpha1", B3SOIFD_MOD_PALPHA1, IF_REAL, "Cross-term dependence of alpha1"), |
||||
|
IOP( "pbeta0", B3SOIFD_MOD_PBETA0, IF_REAL, "Cross-term dependence of beta0"), |
||||
|
IOP( "pagidl", B3SOIFD_MOD_PAGIDL, IF_REAL, "Cross-term dependence of agidl"), |
||||
|
IOP( "pbgidl", B3SOIFD_MOD_PBGIDL, IF_REAL, "Cross-term dependence of bgidl"), |
||||
|
IOP( "pngidl", B3SOIFD_MOD_PNGIDL, IF_REAL, "Cross-term dependence of ngidl"), |
||||
|
IOP( "pntun", B3SOIFD_MOD_PNTUN, IF_REAL, "Cross-term dependence of ntun"), |
||||
|
IOP( "pndiode", B3SOIFD_MOD_PNDIODE, IF_REAL, "Cross-term dependence of ndiode"), |
||||
|
IOP( "pisbjt", B3SOIFD_MOD_PISBJT, IF_REAL, "Cross-term dependence of isbjt"), |
||||
|
IOP( "pisdif", B3SOIFD_MOD_PISDIF, IF_REAL, "Cross-term dependence of isdif"), |
||||
|
IOP( "pisrec", B3SOIFD_MOD_PISREC, IF_REAL, "Cross-term dependence of isrec"), |
||||
|
IOP( "pistun", B3SOIFD_MOD_PISTUN, IF_REAL, "Cross-term dependence of istun"), |
||||
|
IOP( "pedl", B3SOIFD_MOD_PEDL, IF_REAL, "Cross-term dependence of edl"), |
||||
|
IOP( "pkbjt1", B3SOIFD_MOD_PKBJT1, IF_REAL, "Cross-term dependence of kbjt1"), |
||||
|
IOP( "pvsdfb", B3SOIFD_MOD_PVSDFB, IF_REAL, "Cross-term dependence of vsdfb"), |
||||
|
IOP( "pvsdth", B3SOIFD_MOD_PVSDTH, IF_REAL, "Cross-term dependence of vsdth"), |
||||
|
/* Added for binning - END */ |
||||
|
|
||||
|
IP( "nmos", B3SOIFD_MOD_NMOS, IF_FLAG, "Flag to indicate NMOS"), |
||||
|
IP( "pmos", B3SOIFD_MOD_PMOS, IF_FLAG, "Flag to indicate PMOS"), |
||||
|
}; |
||||
|
|
||||
|
char *B3SOIFDnames[] = { |
||||
|
"Drain", |
||||
|
"Gate", |
||||
|
"Source", |
||||
|
"Backgate", |
||||
|
"", |
||||
|
"Body", |
||||
|
"Temp", |
||||
|
"Charge", |
||||
|
}; |
||||
|
|
||||
|
int B3SOIFDnSize = NUMELEMS(B3SOIFDnames); |
||||
|
int B3SOIFDpTSize = NUMELEMS(B3SOIFDpTable); |
||||
|
int B3SOIFDmPTSize = NUMELEMS(B3SOIFDmPTable); |
||||
|
int B3SOIFDiSize = sizeof(B3SOIFDinstance); |
||||
|
int B3SOIFDmSize = sizeof(B3SOIFDmodel); |
||||
|
|
||||
|
|
||||
@ -0,0 +1,443 @@ |
|||||
|
/********** |
||||
|
Copyright 1999 Regents of the University of California. All rights reserved. |
||||
|
Author: Weidong Liu and Pin Su Feb 1999 |
||||
|
Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang |
||||
|
Modified by Pin Su 99/9/27 |
||||
|
File: b3soifdacld.c 98/5/01 |
||||
|
**********/ |
||||
|
|
||||
|
#include "ngspice.h" |
||||
|
#include <stdio.h> |
||||
|
#include "cktdefs.h" |
||||
|
#include "b3soifddef.h" |
||||
|
#include "sperror.h" |
||||
|
#include "suffix.h" |
||||
|
|
||||
|
|
||||
|
int |
||||
|
B3SOIFDacLoad(inModel,ckt) |
||||
|
GENmodel *inModel; |
||||
|
CKTcircuit *ckt; |
||||
|
{ |
||||
|
B3SOIFDmodel *model = (B3SOIFDmodel*)inModel; |
||||
|
B3SOIFDinstance *here; |
||||
|
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, xcedb, xcesb, xceeb, xceT; |
||||
|
double gdpr, gspr, gds; |
||||
|
double cggb, cgdb, cgsb, cgeb, cgT; |
||||
|
double cdgb, cddb, cdsb, cdeb, cdT; |
||||
|
double cbgb, cbdb, cbsb, cbeb, cbT; |
||||
|
double cegb, cedb, cesb, ceeb, ceT; |
||||
|
double GSoverlapCap, GDoverlapCap, GEoverlapCap, FwdSum, RevSum, Gm, Gmbs, Gme, GmT; |
||||
|
double omega; |
||||
|
double dxpart, sxpart; |
||||
|
double gbbg, gbbdp, gbbb, gbbe, gbbp, gbbsp, gbbT; |
||||
|
double gddpg, gddpdp, gddpsp, gddpb, gddpe, gddpT; |
||||
|
double gsspg, gsspdp, gsspsp, gsspb, gsspe, gsspT; |
||||
|
double gppg, gppdp, gppb, gppe, gppp, gppsp, gppT; |
||||
|
double xcTt, cTt, gcTt, gTtt, gTtg, gTtb, gTte, gTtdp, gTtsp; |
||||
|
|
||||
|
double Dum1, Dum2, Dum3, Dum4, Dum5; |
||||
|
FILE *fpdebug; |
||||
|
|
||||
|
omega = ckt->CKTomega; |
||||
|
for (; model != NULL; model = model->B3SOIFDnextModel) |
||||
|
{ |
||||
|
|
||||
|
for (here = model->B3SOIFDinstances; here!= NULL; |
||||
|
here = here->B3SOIFDnextInstance) |
||||
|
{ |
||||
|
selfheat = (model->B3SOIFDshMod == 1) && (here->B3SOIFDrth0 != 0.0); |
||||
|
if (here->B3SOIFDdebugMod > 2) |
||||
|
{ |
||||
|
fpdebug = fopen("b3soifdac.log", "a"); |
||||
|
fprintf(fpdebug, ".......omega=%.5e\n", omega); |
||||
|
} |
||||
|
if (here->B3SOIFDmode >= 0) |
||||
|
{ Gm = here->B3SOIFDgm; |
||||
|
Gmbs = here->B3SOIFDgmbs; |
||||
|
Gme = here->B3SOIFDgme; |
||||
|
GmT = model->B3SOIFDtype * here->B3SOIFDgmT; |
||||
|
FwdSum = Gm + Gmbs + Gme; |
||||
|
RevSum = 0.0; |
||||
|
|
||||
|
cbgb = here->B3SOIFDcbgb; |
||||
|
cbsb = here->B3SOIFDcbsb; |
||||
|
cbdb = here->B3SOIFDcbdb; |
||||
|
cbeb = here->B3SOIFDcbeb; |
||||
|
cbT = model->B3SOIFDtype * here->B3SOIFDcbT; |
||||
|
|
||||
|
cegb = here->B3SOIFDcegb; |
||||
|
cesb = here->B3SOIFDcesb; |
||||
|
cedb = here->B3SOIFDcedb; |
||||
|
ceeb = here->B3SOIFDceeb; |
||||
|
ceT = model->B3SOIFDtype * here->B3SOIFDceT; |
||||
|
|
||||
|
cggb = here->B3SOIFDcggb; |
||||
|
cgsb = here->B3SOIFDcgsb; |
||||
|
cgdb = here->B3SOIFDcgdb; |
||||
|
cgeb = here->B3SOIFDcgeb; |
||||
|
cgT = model->B3SOIFDtype * here->B3SOIFDcgT; |
||||
|
|
||||
|
cdgb = here->B3SOIFDcdgb; |
||||
|
cdsb = here->B3SOIFDcdsb; |
||||
|
cddb = here->B3SOIFDcddb; |
||||
|
cdeb = here->B3SOIFDcdeb; |
||||
|
cdT = model->B3SOIFDtype * here->B3SOIFDcdT; |
||||
|
|
||||
|
cTt = here->pParam->B3SOIFDcth; |
||||
|
|
||||
|
gbbg = -here->B3SOIFDgbgs; |
||||
|
gbbdp = -here->B3SOIFDgbds; |
||||
|
gbbb = -here->B3SOIFDgbbs; |
||||
|
gbbe = -here->B3SOIFDgbes; |
||||
|
gbbp = -here->B3SOIFDgbps; |
||||
|
gbbT = -model->B3SOIFDtype * here->B3SOIFDgbT; |
||||
|
gbbsp = - ( gbbg + gbbdp + gbbb + gbbe + gbbp); |
||||
|
|
||||
|
gddpg = -here->B3SOIFDgjdg; |
||||
|
gddpdp = -here->B3SOIFDgjdd; |
||||
|
gddpb = -here->B3SOIFDgjdb; |
||||
|
gddpe = -here->B3SOIFDgjde; |
||||
|
gddpT = -model->B3SOIFDtype * here->B3SOIFDgjdT; |
||||
|
gddpsp = - ( gddpg + gddpdp + gddpb + gddpe); |
||||
|
|
||||
|
gsspg = -here->B3SOIFDgjsg; |
||||
|
gsspdp = -here->B3SOIFDgjsd; |
||||
|
gsspb = -here->B3SOIFDgjsb; |
||||
|
gsspe = 0.0; |
||||
|
gsspT = -model->B3SOIFDtype * here->B3SOIFDgjsT; |
||||
|
gsspsp = - (gsspg + gsspdp + gsspb + gsspe); |
||||
|
|
||||
|
gppg = -here->B3SOIFDgbpgs; |
||||
|
gppdp = -here->B3SOIFDgbpds; |
||||
|
gppb = -here->B3SOIFDgbpbs; |
||||
|
gppe = -here->B3SOIFDgbpes; |
||||
|
gppp = -here->B3SOIFDgbpps; |
||||
|
gppT = -model->B3SOIFDtype * here->B3SOIFDgbpT; |
||||
|
gppsp = - (gppg + gppdp + gppb + gppe + gppp); |
||||
|
|
||||
|
gTtg = here->B3SOIFDgtempg; |
||||
|
gTtb = here->B3SOIFDgtempb; |
||||
|
gTte = here->B3SOIFDgtempe; |
||||
|
gTtdp = here->B3SOIFDgtempd; |
||||
|
gTtt = here->B3SOIFDgtempT; |
||||
|
gTtsp = - (gTtg + gTtb + gTte + gTtdp); |
||||
|
|
||||
|
sxpart = 0.6; |
||||
|
dxpart = 0.4; |
||||
|
|
||||
|
} |
||||
|
else |
||||
|
{ Gm = -here->B3SOIFDgm; |
||||
|
Gmbs = -here->B3SOIFDgmbs; |
||||
|
Gme = -here->B3SOIFDgme; |
||||
|
GmT = -model->B3SOIFDtype * here->B3SOIFDgmT; |
||||
|
FwdSum = 0.0; |
||||
|
RevSum = -Gm - Gmbs - Gme; |
||||
|
|
||||
|
cdgb = - (here->B3SOIFDcdgb + here->B3SOIFDcggb + here->B3SOIFDcbgb |
||||
|
+ here->B3SOIFDcegb); |
||||
|
cdsb = - (here->B3SOIFDcddb + here->B3SOIFDcgdb + here->B3SOIFDcbdb |
||||
|
+ here->B3SOIFDcedb); |
||||
|
cddb = - (here->B3SOIFDcdsb + here->B3SOIFDcgsb + here->B3SOIFDcbsb |
||||
|
+ here->B3SOIFDcesb); |
||||
|
cdeb = - (here->B3SOIFDcdeb + here->B3SOIFDcgeb + here->B3SOIFDcbeb |
||||
|
+ here->B3SOIFDceeb); |
||||
|
cdT = - model->B3SOIFDtype * (here->B3SOIFDcgT + here->B3SOIFDcbT |
||||
|
+ here->B3SOIFDcdT + here->B3SOIFDceT); |
||||
|
|
||||
|
cegb = here->B3SOIFDcegb; |
||||
|
cesb = here->B3SOIFDcedb; |
||||
|
cedb = here->B3SOIFDcesb; |
||||
|
ceeb = here->B3SOIFDceeb; |
||||
|
ceT = model->B3SOIFDtype * here->B3SOIFDceT; |
||||
|
|
||||
|
cggb = here->B3SOIFDcggb; |
||||
|
cgsb = here->B3SOIFDcgdb; |
||||
|
cgdb = here->B3SOIFDcgsb; |
||||
|
cgeb = here->B3SOIFDcgeb; |
||||
|
cgT = model->B3SOIFDtype * here->B3SOIFDcgT; |
||||
|
|
||||
|
cbgb = here->B3SOIFDcbgb; |
||||
|
cbsb = here->B3SOIFDcbdb; |
||||
|
cbdb = here->B3SOIFDcbsb; |
||||
|
cbeb = here->B3SOIFDcbeb; |
||||
|
cbT = model->B3SOIFDtype * here->B3SOIFDcbT; |
||||
|
|
||||
|
cTt = here->pParam->B3SOIFDcth; |
||||
|
|
||||
|
gbbg = -here->B3SOIFDgbgs; |
||||
|
gbbb = -here->B3SOIFDgbbs; |
||||
|
gbbe = -here->B3SOIFDgbes; |
||||
|
gbbp = -here->B3SOIFDgbps; |
||||
|
gbbsp = -here->B3SOIFDgbds; |
||||
|
gbbT = -model->B3SOIFDtype * here->B3SOIFDgbT; |
||||
|
gbbdp = - ( gbbg + gbbsp + gbbb + gbbe + gbbp); |
||||
|
|
||||
|
gddpg = -here->B3SOIFDgjsg; |
||||
|
gddpsp = -here->B3SOIFDgjsd; |
||||
|
gddpb = -here->B3SOIFDgjsb; |
||||
|
gddpe = 0.0; |
||||
|
gddpT = -model->B3SOIFDtype * here->B3SOIFDgjsT; |
||||
|
gddpdp = - (gddpg + gddpsp + gddpb + gddpe); |
||||
|
|
||||
|
gsspg = -here->B3SOIFDgjdg; |
||||
|
gsspsp = -here->B3SOIFDgjdd; |
||||
|
gsspb = -here->B3SOIFDgjdb; |
||||
|
gsspe = -here->B3SOIFDgjde; |
||||
|
gsspT = -model->B3SOIFDtype * here->B3SOIFDgjdT; |
||||
|
gsspdp = - ( gsspg + gsspsp + gsspb + gsspe); |
||||
|
|
||||
|
gppg = -here->B3SOIFDgbpgs; |
||||
|
gppsp = -here->B3SOIFDgbpds; |
||||
|
gppb = -here->B3SOIFDgbpbs; |
||||
|
gppe = -here->B3SOIFDgbpes; |
||||
|
gppp = -here->B3SOIFDgbpps; |
||||
|
gppT = -model->B3SOIFDtype * here->B3SOIFDgbpT; |
||||
|
gppdp = - (gppg + gppsp + gppb + gppe + gppp); |
||||
|
|
||||
|
gTtt = here->B3SOIFDgtempT; |
||||
|
gTtg = here->B3SOIFDgtempg; |
||||
|
gTtb = here->B3SOIFDgtempb; |
||||
|
gTte = here->B3SOIFDgtempe; |
||||
|
gTtdp = here->B3SOIFDgtempd; |
||||
|
gTtsp = - (gTtt + gTtg + gTtb + gTte + gTtdp); |
||||
|
|
||||
|
gTtg = here->B3SOIFDgtempg; |
||||
|
gTtb = here->B3SOIFDgtempb; |
||||
|
gTte = here->B3SOIFDgtempe; |
||||
|
gTtsp = here->B3SOIFDgtempd; |
||||
|
gTtt = here->B3SOIFDgtempT; |
||||
|
gTtdp = - (gTtg + gTtb + gTte + gTtsp); |
||||
|
|
||||
|
sxpart = 0.6; |
||||
|
sxpart = 0.4; |
||||
|
dxpart = 0.6; |
||||
|
} |
||||
|
|
||||
|
gdpr=here->B3SOIFDdrainConductance; |
||||
|
gspr=here->B3SOIFDsourceConductance; |
||||
|
gds= here->B3SOIFDgds; |
||||
|
|
||||
|
GSoverlapCap = here->B3SOIFDcgso; |
||||
|
GDoverlapCap = here->B3SOIFDcgdo; |
||||
|
GEoverlapCap = here->pParam->B3SOIFDcgeo; |
||||
|
|
||||
|
xcegb = (cegb - GEoverlapCap) * omega; |
||||
|
xcedb = cedb * omega; |
||||
|
xcesb = cesb * omega; |
||||
|
xceeb = (ceeb + GEoverlapCap) * omega; |
||||
|
xceT = ceT * omega; |
||||
|
|
||||
|
xcggb = (cggb + GDoverlapCap + GSoverlapCap + GEoverlapCap) |
||||
|
* omega; |
||||
|
xcgdb = (cgdb - GDoverlapCap ) * omega; |
||||
|
xcgsb = (cgsb - GSoverlapCap) * omega; |
||||
|
xcgeb = (cgeb - GEoverlapCap) * omega; |
||||
|
xcgT = cgT * omega; |
||||
|
|
||||
|
xcdgb = (cdgb - GDoverlapCap) * omega; |
||||
|
xcddb = (cddb + GDoverlapCap) * omega; |
||||
|
xcdsb = cdsb * omega; |
||||
|
xcdeb = cdeb * omega; |
||||
|
xcdT = cdT * omega; |
||||
|
|
||||
|
xcsgb = -(cggb + cbgb + cdgb + cegb + GSoverlapCap) * omega; |
||||
|
xcsdb = -(cgdb + cbdb + cddb + cedb) * omega; |
||||
|
xcssb = (GSoverlapCap - (cgsb + cbsb + cdsb + cesb)) * omega; |
||||
|
xcseb = -(cgeb + cbeb + cdeb + ceeb) * 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->B3SOIFDEgPtr +1) += xcegb; |
||||
|
*(here->B3SOIFDEdpPtr +1) += xcedb; |
||||
|
*(here->B3SOIFDEspPtr +1) += xcesb; |
||||
|
*(here->B3SOIFDGePtr +1) += xcgeb; |
||||
|
*(here->B3SOIFDDPePtr +1) += xcdeb; |
||||
|
*(here->B3SOIFDSPePtr +1) += xcseb; |
||||
|
|
||||
|
*(here->B3SOIFDEePtr +1) += xceeb; |
||||
|
|
||||
|
*(here->B3SOIFDGgPtr +1) += xcggb; |
||||
|
*(here->B3SOIFDGdpPtr +1) += xcgdb; |
||||
|
*(here->B3SOIFDGspPtr +1) += xcgsb; |
||||
|
|
||||
|
*(here->B3SOIFDDPgPtr +1) += xcdgb; |
||||
|
*(here->B3SOIFDDPdpPtr +1) += xcddb; |
||||
|
*(here->B3SOIFDDPspPtr +1) += xcdsb; |
||||
|
|
||||
|
*(here->B3SOIFDSPgPtr +1) += xcsgb; |
||||
|
*(here->B3SOIFDSPdpPtr +1) += xcsdb; |
||||
|
*(here->B3SOIFDSPspPtr +1) += xcssb; |
||||
|
|
||||
|
if (selfheat) |
||||
|
{ |
||||
|
*(here->B3SOIFDTemptempPtr + 1) += xcTt; |
||||
|
*(here->B3SOIFDDPtempPtr + 1) += xcdT; |
||||
|
*(here->B3SOIFDSPtempPtr + 1) += xcsT; |
||||
|
*(here->B3SOIFDBtempPtr + 1) += xcbT; |
||||
|
*(here->B3SOIFDEtempPtr + 1) += xceT; |
||||
|
*(here->B3SOIFDGtempPtr + 1) += xcgT; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
if (here->B3SOIFDdebugMod > 3) |
||||
|
{ |
||||
|
fprintf(fpdebug, "Cbg+Cbs+Cbe = %.5e; Cbd = %.5e;\n", |
||||
|
(xcbgb+xcbsb+xcbeb)/omega, xcbdb/omega); |
||||
|
fprintf(fpdebug, "gbs = %.5e; gbd = %.5e\n", gbbsp, gbbdp); |
||||
|
|
||||
|
|
||||
|
fprintf(fpdebug, "AC condunctance...\n"); |
||||
|
fprintf(fpdebug, "Eg=%.5e; Edp=%.5e; Esp=%.5e;\nEb=%.5e; Ee=%.5e\n", |
||||
|
xcegb, xcedb, xcesb, -(xcegb+xcedb+xcesb+xceeb), xceeb); |
||||
|
fprintf(fpdebug, "Gg=%.5e; Gdp=%.5e; Gsp=%.5e;\nGb=%.5e; Ge=%.5e\n", |
||||
|
xcggb, xcgdb, xcgsb, -(xcggb+xcgdb+xcgsb+xcgeb), xcgeb); |
||||
|
fprintf(fpdebug, "Bg=%.5e; Bdp=%.5e; Bsp=%.5e;\nBb=%.5e; Be=%.5e\n", |
||||
|
xcbgb, xcbdb, xcbsb, -(xcbgb+xcbdb+xcbsb+xcbeb), xcbeb); |
||||
|
fprintf(fpdebug, "DPg=%.5e; DPdp=%.5e; DPsp=%.5e;\nDPb=%.5e; DPe=%.5e\n", |
||||
|
xcdgb, xcddb, xcdsb, -(xcdgb+xcddb+xcdsb+xcdeb), xcdeb); |
||||
|
fprintf(fpdebug, "SPg=%.5e; SPdp=%.5e; SPsp=%.5e;\nSPb=%.5e; SPe=%.5e\n", |
||||
|
xcsgb, xcsdb, xcssb, -(xcsgb+xcsdb+xcssb+xcseb), xcseb); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
*(here->B3SOIFDEgPtr) += 0.0; |
||||
|
*(here->B3SOIFDEdpPtr) += 0.0; |
||||
|
*(here->B3SOIFDEspPtr) += 0.0; |
||||
|
*(here->B3SOIFDGePtr) -= 0.0; |
||||
|
*(here->B3SOIFDDPePtr) += Gme + gddpe; |
||||
|
*(here->B3SOIFDSPePtr) += gsspe - Gme; |
||||
|
|
||||
|
*(here->B3SOIFDEePtr) += 0.0; |
||||
|
|
||||
|
*(here->B3SOIFDDPgPtr) += Gm + gddpg; |
||||
|
*(here->B3SOIFDDPdpPtr) += gdpr + gds + gddpdp + RevSum ; |
||||
|
*(here->B3SOIFDDPspPtr) -= gds + FwdSum - gddpsp; |
||||
|
*(here->B3SOIFDDPdPtr) -= gdpr; |
||||
|
|
||||
|
*(here->B3SOIFDSPgPtr) -= Gm - gsspg; |
||||
|
*(here->B3SOIFDSPdpPtr) -= gds + RevSum - gsspdp; |
||||
|
*(here->B3SOIFDSPspPtr) += gspr + gds + FwdSum + gsspsp; |
||||
|
*(here->B3SOIFDSPsPtr) -= gspr; |
||||
|
|
||||
|
if (selfheat) |
||||
|
{ |
||||
|
*(here->B3SOIFDDPtempPtr) += GmT + gddpT; |
||||
|
*(here->B3SOIFDSPtempPtr) += -GmT + gsspT; |
||||
|
*(here->B3SOIFDBtempPtr) += gbbT; |
||||
|
if (here->B3SOIFDbodyMod == 1) { |
||||
|
(*(here->B3SOIFDPtempPtr) += gppT); |
||||
|
} |
||||
|
|
||||
|
*(here->B3SOIFDTemptempPtr) += gTtt + 1/here->pParam->B3SOIFDrth; |
||||
|
*(here->B3SOIFDTempgPtr) += gTtg; |
||||
|
*(here->B3SOIFDTempbPtr) += gTtb; |
||||
|
*(here->B3SOIFDTempePtr) += gTte; |
||||
|
*(here->B3SOIFDTempdpPtr) += gTtdp; |
||||
|
*(here->B3SOIFDTempspPtr) += gTtsp; |
||||
|
} |
||||
|
|
||||
|
if (here->B3SOIFDdebugMod > 3) |
||||
|
{ |
||||
|
fprintf(fpdebug, "Static condunctance...\n"); |
||||
|
fprintf(fpdebug, "Gg=%.5e; Gdp=%.5e; Gsp=%.5e;\nGb=%.5e; Ge=%.5e\n", |
||||
|
*(here->B3SOIFDGgPtr), *(here->B3SOIFDGdpPtr), |
||||
|
*(here->B3SOIFDGspPtr), *(here->B3SOIFDGbPtr), |
||||
|
*(here->B3SOIFDGePtr)); |
||||
|
fprintf(fpdebug, "DPg=%.5e; DPdp=%.5e; DPsp=%.5e;\nDPb=%.5e; DPe=%.5e\n", |
||||
|
*(here->B3SOIFDDPgPtr), *(here->B3SOIFDDPdpPtr), |
||||
|
*(here->B3SOIFDDPspPtr), *(here->B3SOIFDDPbPtr), |
||||
|
*(here->B3SOIFDDPePtr)); |
||||
|
fprintf(fpdebug, "SPg=%.5e; SPdp=%.5e; SPsp=%.5e;\nSPb=%.5e; SPe=%.5e\n", |
||||
|
*(here->B3SOIFDSPgPtr), *(here->B3SOIFDSPdpPtr), |
||||
|
*(here->B3SOIFDSPspPtr), *(here->B3SOIFDSPbPtr), |
||||
|
*(here->B3SOIFDSPePtr)); |
||||
|
fprintf(fpdebug, "Bg=%.5e; Bdp=%.5e; Bsp=%.5e;\nBb=%.5e; Be=%.5e\n", |
||||
|
gbbg, gbbdp, gbbsp, gbbb, gbbe); |
||||
|
} |
||||
|
|
||||
|
*(here->B3SOIFDDdPtr) += gdpr; |
||||
|
*(here->B3SOIFDDdpPtr) -= gdpr; |
||||
|
*(here->B3SOIFDSsPtr) += gspr; |
||||
|
*(here->B3SOIFDSspPtr) -= gspr; |
||||
|
|
||||
|
|
||||
|
if (here->B3SOIFDbodyMod == 1) { |
||||
|
(*(here->B3SOIFDBpPtr) -= gppp); |
||||
|
(*(here->B3SOIFDPbPtr) += gppb); |
||||
|
(*(here->B3SOIFDPpPtr) += gppp); |
||||
|
(*(here->B3SOIFDPgPtr) += gppg); |
||||
|
(*(here->B3SOIFDPdpPtr) += gppdp); |
||||
|
(*(here->B3SOIFDPspPtr) += gppsp); |
||||
|
(*(here->B3SOIFDPePtr) += gppe); |
||||
|
} |
||||
|
if (here->B3SOIFDdebugMod > 1) |
||||
|
{ |
||||
|
*(here->B3SOIFDVbsPtr) += 1; |
||||
|
*(here->B3SOIFDIdsPtr) += 1; |
||||
|
*(here->B3SOIFDIcPtr) += 1; |
||||
|
*(here->B3SOIFDIbsPtr) += 1; |
||||
|
*(here->B3SOIFDIbdPtr) += 1; |
||||
|
*(here->B3SOIFDIiiPtr) += 1; |
||||
|
*(here->B3SOIFDIgidlPtr) += 1; |
||||
|
*(here->B3SOIFDItunPtr) += 1; |
||||
|
*(here->B3SOIFDIbpPtr) += 1; |
||||
|
*(here->B3SOIFDAbeffPtr) += 1; |
||||
|
*(here->B3SOIFDVbs0effPtr) += 1; |
||||
|
*(here->B3SOIFDVbseffPtr) += 1; |
||||
|
*(here->B3SOIFDXcPtr) += 1; |
||||
|
*(here->B3SOIFDCbgPtr) += 1; |
||||
|
*(here->B3SOIFDCbbPtr) += 1; |
||||
|
*(here->B3SOIFDCbdPtr) += 1; |
||||
|
*(here->B3SOIFDqbPtr) += 1; |
||||
|
*(here->B3SOIFDQbfPtr) += 1; |
||||
|
*(here->B3SOIFDQjsPtr) += 1; |
||||
|
*(here->B3SOIFDQjdPtr) += 1; |
||||
|
|
||||
|
/* clean up last */ |
||||
|
*(here->B3SOIFDGmPtr) += 1; |
||||
|
*(here->B3SOIFDGmbsPtr) += 1; |
||||
|
*(here->B3SOIFDGdsPtr) += 1; |
||||
|
*(here->B3SOIFDGmePtr) += 1; |
||||
|
*(here->B3SOIFDVbs0teffPtr) += 1; |
||||
|
*(here->B3SOIFDVgsteffPtr) += 1; |
||||
|
*(here->B3SOIFDCbePtr) += 1; |
||||
|
*(here->B3SOIFDVthPtr) += 1; |
||||
|
*(here->B3SOIFDXcsatPtr) += 1; |
||||
|
*(here->B3SOIFDVdscvPtr) += 1; |
||||
|
*(here->B3SOIFDVcscvPtr) += 1; |
||||
|
*(here->B3SOIFDQaccPtr) += 1; |
||||
|
*(here->B3SOIFDQsub0Ptr) += 1; |
||||
|
*(here->B3SOIFDQsubs1Ptr) += 1; |
||||
|
*(here->B3SOIFDQsubs2Ptr) += 1; |
||||
|
*(here->B3SOIFDqgPtr) += 1; |
||||
|
*(here->B3SOIFDqdPtr) += 1; |
||||
|
*(here->B3SOIFDqePtr) += 1; |
||||
|
*(here->B3SOIFDDum1Ptr) += 1; |
||||
|
*(here->B3SOIFDDum2Ptr) += 1; |
||||
|
*(here->B3SOIFDDum3Ptr) += 1; |
||||
|
*(here->B3SOIFDDum4Ptr) += 1; |
||||
|
*(here->B3SOIFDDum5Ptr) += 1; |
||||
|
} |
||||
|
|
||||
|
if (here->B3SOIFDdebugMod > 2) |
||||
|
fclose(fpdebug); |
||||
|
} |
||||
|
} |
||||
|
return(OK); |
||||
|
} |
||||
|
|
||||
@ -0,0 +1,214 @@ |
|||||
|
/********** |
||||
|
Copyright 1999 Regents of the University of California. All rights reserved. |
||||
|
Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang |
||||
|
File: b3soifdask.c 98/5/01 |
||||
|
**********/ |
||||
|
|
||||
|
|
||||
|
#include "ngspice.h" |
||||
|
#include <stdio.h> |
||||
|
#include <math.h> |
||||
|
#include "ifsim.h" |
||||
|
#include "cktdefs.h" |
||||
|
#include "devdefs.h" |
||||
|
#include "b3soifddef.h" |
||||
|
#include "sperror.h" |
||||
|
#include "suffix.h" |
||||
|
|
||||
|
int |
||||
|
B3SOIFDask(ckt,inst,which,value,select) |
||||
|
CKTcircuit *ckt; |
||||
|
GENinstance *inst; |
||||
|
int which; |
||||
|
IFvalue *value; |
||||
|
IFvalue *select; |
||||
|
{ |
||||
|
B3SOIFDinstance *here = (B3SOIFDinstance*)inst; |
||||
|
|
||||
|
switch(which) |
||||
|
{ case B3SOIFD_L: |
||||
|
value->rValue = here->B3SOIFDl; |
||||
|
return(OK); |
||||
|
case B3SOIFD_W: |
||||
|
value->rValue = here->B3SOIFDw; |
||||
|
return(OK); |
||||
|
case B3SOIFD_AS: |
||||
|
value->rValue = here->B3SOIFDsourceArea; |
||||
|
return(OK); |
||||
|
case B3SOIFD_AD: |
||||
|
value->rValue = here->B3SOIFDdrainArea; |
||||
|
return(OK); |
||||
|
case B3SOIFD_PS: |
||||
|
value->rValue = here->B3SOIFDsourcePerimeter; |
||||
|
return(OK); |
||||
|
case B3SOIFD_PD: |
||||
|
value->rValue = here->B3SOIFDdrainPerimeter; |
||||
|
return(OK); |
||||
|
case B3SOIFD_NRS: |
||||
|
value->rValue = here->B3SOIFDsourceSquares; |
||||
|
return(OK); |
||||
|
case B3SOIFD_NRD: |
||||
|
value->rValue = here->B3SOIFDdrainSquares; |
||||
|
return(OK); |
||||
|
case B3SOIFD_OFF: |
||||
|
value->rValue = here->B3SOIFDoff; |
||||
|
return(OK); |
||||
|
case B3SOIFD_BJTOFF: |
||||
|
value->iValue = here->B3SOIFDbjtoff; |
||||
|
return(OK); |
||||
|
case B3SOIFD_RTH0: |
||||
|
value->rValue = here->B3SOIFDrth0; |
||||
|
return(OK); |
||||
|
case B3SOIFD_CTH0: |
||||
|
value->rValue = here->B3SOIFDcth0; |
||||
|
return(OK); |
||||
|
case B3SOIFD_NRB: |
||||
|
value->rValue = here->B3SOIFDbodySquares; |
||||
|
return(OK); |
||||
|
case B3SOIFD_IC_VBS: |
||||
|
value->rValue = here->B3SOIFDicVBS; |
||||
|
return(OK); |
||||
|
case B3SOIFD_IC_VDS: |
||||
|
value->rValue = here->B3SOIFDicVDS; |
||||
|
return(OK); |
||||
|
case B3SOIFD_IC_VGS: |
||||
|
value->rValue = here->B3SOIFDicVGS; |
||||
|
return(OK); |
||||
|
case B3SOIFD_IC_VES: |
||||
|
value->rValue = here->B3SOIFDicVES; |
||||
|
return(OK); |
||||
|
case B3SOIFD_IC_VPS: |
||||
|
value->rValue = here->B3SOIFDicVPS; |
||||
|
return(OK); |
||||
|
case B3SOIFD_DNODE: |
||||
|
value->iValue = here->B3SOIFDdNode; |
||||
|
return(OK); |
||||
|
case B3SOIFD_GNODE: |
||||
|
value->iValue = here->B3SOIFDgNode; |
||||
|
return(OK); |
||||
|
case B3SOIFD_SNODE: |
||||
|
value->iValue = here->B3SOIFDsNode; |
||||
|
return(OK); |
||||
|
case B3SOIFD_BNODE: |
||||
|
value->iValue = here->B3SOIFDbNode; |
||||
|
return(OK); |
||||
|
case B3SOIFD_ENODE: |
||||
|
value->iValue = here->B3SOIFDeNode; |
||||
|
return(OK); |
||||
|
case B3SOIFD_DNODEPRIME: |
||||
|
value->iValue = here->B3SOIFDdNodePrime; |
||||
|
return(OK); |
||||
|
case B3SOIFD_SNODEPRIME: |
||||
|
value->iValue = here->B3SOIFDsNodePrime; |
||||
|
return(OK); |
||||
|
case B3SOIFD_SOURCECONDUCT: |
||||
|
value->rValue = here->B3SOIFDsourceConductance; |
||||
|
return(OK); |
||||
|
case B3SOIFD_DRAINCONDUCT: |
||||
|
value->rValue = here->B3SOIFDdrainConductance; |
||||
|
return(OK); |
||||
|
case B3SOIFD_VBD: |
||||
|
value->rValue = *(ckt->CKTstate0 + here->B3SOIFDvbd); |
||||
|
return(OK); |
||||
|
case B3SOIFD_VBS: |
||||
|
value->rValue = *(ckt->CKTstate0 + here->B3SOIFDvbs); |
||||
|
return(OK); |
||||
|
case B3SOIFD_VGS: |
||||
|
value->rValue = *(ckt->CKTstate0 + here->B3SOIFDvgs); |
||||
|
return(OK); |
||||
|
case B3SOIFD_VES: |
||||
|
value->rValue = *(ckt->CKTstate0 + here->B3SOIFDves); |
||||
|
return(OK); |
||||
|
case B3SOIFD_VDS: |
||||
|
value->rValue = *(ckt->CKTstate0 + here->B3SOIFDvds); |
||||
|
return(OK); |
||||
|
case B3SOIFD_CD: |
||||
|
value->rValue = here->B3SOIFDcd; |
||||
|
return(OK); |
||||
|
case B3SOIFD_CBS: |
||||
|
value->rValue = here->B3SOIFDcjs; |
||||
|
return(OK); |
||||
|
case B3SOIFD_CBD: |
||||
|
value->rValue = here->B3SOIFDcjd; |
||||
|
return(OK); |
||||
|
case B3SOIFD_GM: |
||||
|
value->rValue = here->B3SOIFDgm; |
||||
|
return(OK); |
||||
|
case B3SOIFD_GMID: |
||||
|
value->rValue = here->B3SOIFDgm/here->B3SOIFDcd; |
||||
|
return(OK); |
||||
|
case B3SOIFD_GDS: |
||||
|
value->rValue = here->B3SOIFDgds; |
||||
|
return(OK); |
||||
|
case B3SOIFD_GMBS: |
||||
|
value->rValue = here->B3SOIFDgmbs; |
||||
|
return(OK); |
||||
|
case B3SOIFD_GBD: |
||||
|
value->rValue = here->B3SOIFDgjdb; |
||||
|
return(OK); |
||||
|
case B3SOIFD_GBS: |
||||
|
value->rValue = here->B3SOIFDgjsb; |
||||
|
return(OK); |
||||
|
case B3SOIFD_QB: |
||||
|
value->rValue = *(ckt->CKTstate0 + here->B3SOIFDqb); |
||||
|
return(OK); |
||||
|
case B3SOIFD_CQB: |
||||
|
value->rValue = *(ckt->CKTstate0 + here->B3SOIFDcqb); |
||||
|
return(OK); |
||||
|
case B3SOIFD_QG: |
||||
|
value->rValue = *(ckt->CKTstate0 + here->B3SOIFDqg); |
||||
|
return(OK); |
||||
|
case B3SOIFD_CQG: |
||||
|
value->rValue = *(ckt->CKTstate0 + here->B3SOIFDcqg); |
||||
|
return(OK); |
||||
|
case B3SOIFD_QD: |
||||
|
value->rValue = *(ckt->CKTstate0 + here->B3SOIFDqd); |
||||
|
return(OK); |
||||
|
case B3SOIFD_CQD: |
||||
|
value->rValue = *(ckt->CKTstate0 + here->B3SOIFDcqd); |
||||
|
return(OK); |
||||
|
case B3SOIFD_CGG: |
||||
|
value->rValue = here->B3SOIFDcggb; |
||||
|
return(OK); |
||||
|
case B3SOIFD_CGD: |
||||
|
value->rValue = here->B3SOIFDcgdb; |
||||
|
return(OK); |
||||
|
case B3SOIFD_CGS: |
||||
|
value->rValue = here->B3SOIFDcgsb; |
||||
|
return(OK); |
||||
|
case B3SOIFD_CDG: |
||||
|
value->rValue = here->B3SOIFDcdgb; |
||||
|
return(OK); |
||||
|
case B3SOIFD_CDD: |
||||
|
value->rValue = here->B3SOIFDcddb; |
||||
|
return(OK); |
||||
|
case B3SOIFD_CDS: |
||||
|
value->rValue = here->B3SOIFDcdsb; |
||||
|
return(OK); |
||||
|
case B3SOIFD_CBG: |
||||
|
value->rValue = here->B3SOIFDcbgb; |
||||
|
return(OK); |
||||
|
case B3SOIFD_CBDB: |
||||
|
value->rValue = here->B3SOIFDcbdb; |
||||
|
return(OK); |
||||
|
case B3SOIFD_CBSB: |
||||
|
value->rValue = here->B3SOIFDcbsb; |
||||
|
return(OK); |
||||
|
case B3SOIFD_VON: |
||||
|
value->rValue = here->B3SOIFDvon; |
||||
|
return(OK); |
||||
|
case B3SOIFD_VDSAT: |
||||
|
value->rValue = here->B3SOIFDvdsat; |
||||
|
return(OK); |
||||
|
case B3SOIFD_QBS: |
||||
|
value->rValue = *(ckt->CKTstate0 + here->B3SOIFDqbs); |
||||
|
return(OK); |
||||
|
case B3SOIFD_QBD: |
||||
|
value->rValue = *(ckt->CKTstate0 + here->B3SOIFDqbd); |
||||
|
return(OK); |
||||
|
default: |
||||
|
return(E_BADPARM); |
||||
|
} |
||||
|
/* NOTREACHED */ |
||||
|
} |
||||
|
|
||||
@ -0,0 +1,504 @@ |
|||||
|
/********** |
||||
|
Copyright 1999 Regents of the University of California. All rights reserved. |
||||
|
Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang |
||||
|
File: b3soifdcheck.c 98/5/01 |
||||
|
**********/ |
||||
|
|
||||
|
|
||||
|
#include "ngspice.h" |
||||
|
#include <stdio.h> |
||||
|
#include <math.h> |
||||
|
#include "cktdefs.h" |
||||
|
#include "b3soifddef.h" |
||||
|
#include "trandefs.h" |
||||
|
#include "const.h" |
||||
|
#include "sperror.h" |
||||
|
#include "devdefs.h" |
||||
|
#include "suffix.h" |
||||
|
|
||||
|
int |
||||
|
B3SOIFDcheckModel(model, here, ckt) |
||||
|
B3SOIFDmodel *model; |
||||
|
B3SOIFDinstance *here; |
||||
|
CKTcircuit *ckt; |
||||
|
{ |
||||
|
struct b3soifdSizeDependParam *pParam; |
||||
|
int Fatal_Flag = 0; |
||||
|
FILE *fplog; |
||||
|
|
||||
|
if ((fplog = fopen("b3soifdv1check.log", "w")) != NULL) |
||||
|
{ pParam = here->pParam; |
||||
|
fprintf(fplog, "B3SOIFDV3 Parameter Check\n"); |
||||
|
fprintf(fplog, "Model = %s\n", model->B3SOIFDmodName); |
||||
|
fprintf(fplog, "W = %g, L = %g\n", here->B3SOIFDw, here->B3SOIFDl); |
||||
|
|
||||
|
|
||||
|
if (pParam->B3SOIFDnlx < -pParam->B3SOIFDleff) |
||||
|
{ fprintf(fplog, "Fatal: Nlx = %g is less than -Leff.\n", |
||||
|
pParam->B3SOIFDnlx); |
||||
|
printf("Fatal: Nlx = %g is less than -Leff.\n", |
||||
|
pParam->B3SOIFDnlx); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIFDtox <= 0.0) |
||||
|
{ fprintf(fplog, "Fatal: Tox = %g is not positive.\n", |
||||
|
model->B3SOIFDtox); |
||||
|
printf("Fatal: Tox = %g is not positive.\n", model->B3SOIFDtox); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIFDtbox <= 0.0) |
||||
|
{ fprintf(fplog, "Fatal: Tbox = %g is not positive.\n", |
||||
|
model->B3SOIFDtbox); |
||||
|
printf("Fatal: Tbox = %g is not positive.\n", model->B3SOIFDtbox); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
|
||||
|
if (pParam->B3SOIFDnpeak <= 0.0) |
||||
|
{ fprintf(fplog, "Fatal: Nch = %g is not positive.\n", |
||||
|
pParam->B3SOIFDnpeak); |
||||
|
printf("Fatal: Nch = %g is not positive.\n", |
||||
|
pParam->B3SOIFDnpeak); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
if (pParam->B3SOIFDngate < 0.0) |
||||
|
{ fprintf(fplog, "Fatal: Ngate = %g is not positive.\n", |
||||
|
pParam->B3SOIFDngate); |
||||
|
printf("Fatal: Ngate = %g Ngate is not positive.\n", |
||||
|
pParam->B3SOIFDngate); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
if (pParam->B3SOIFDngate > 1.e25) |
||||
|
{ fprintf(fplog, "Fatal: Ngate = %g is too high.\n", |
||||
|
pParam->B3SOIFDngate); |
||||
|
printf("Fatal: Ngate = %g Ngate is too high\n", |
||||
|
pParam->B3SOIFDngate); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIFDdvbd1 < 0.0) |
||||
|
{ fprintf(fplog, "Fatal: Dvbd1 = %g is negative.\n", |
||||
|
model->B3SOIFDdvbd1); |
||||
|
printf("Fatal: Dvbd1 = %g is negative.\n", model->B3SOIFDdvbd1); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
|
||||
|
if (pParam->B3SOIFDdvt1 < 0.0) |
||||
|
{ fprintf(fplog, "Fatal: Dvt1 = %g is negative.\n", |
||||
|
pParam->B3SOIFDdvt1); |
||||
|
printf("Fatal: Dvt1 = %g is negative.\n", pParam->B3SOIFDdvt1); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
|
||||
|
if (pParam->B3SOIFDdvt1w < 0.0) |
||||
|
{ fprintf(fplog, "Fatal: Dvt1w = %g is negative.\n", |
||||
|
pParam->B3SOIFDdvt1w); |
||||
|
printf("Fatal: Dvt1w = %g is negative.\n", pParam->B3SOIFDdvt1w); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
|
||||
|
if (pParam->B3SOIFDw0 == -pParam->B3SOIFDweff) |
||||
|
{ 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->B3SOIFDdsub < 0.0) |
||||
|
{ fprintf(fplog, "Fatal: Dsub = %g is negative.\n", pParam->B3SOIFDdsub); |
||||
|
printf("Fatal: Dsub = %g is negative.\n", pParam->B3SOIFDdsub); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
if (pParam->B3SOIFDb1 == -pParam->B3SOIFDweff) |
||||
|
{ 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->B3SOIFDu0temp <= 0.0) |
||||
|
{ fprintf(fplog, "Fatal: u0 at current temperature = %g is not positive.\n", pParam->B3SOIFDu0temp); |
||||
|
printf("Fatal: u0 at current temperature = %g is not positive.\n", |
||||
|
pParam->B3SOIFDu0temp); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
|
||||
|
/* Check delta parameter */ |
||||
|
if (pParam->B3SOIFDdelta < 0.0) |
||||
|
{ fprintf(fplog, "Fatal: Delta = %g is less than zero.\n", |
||||
|
pParam->B3SOIFDdelta); |
||||
|
printf("Fatal: Delta = %g is less than zero.\n", pParam->B3SOIFDdelta); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
|
||||
|
if (pParam->B3SOIFDvsattemp <= 0.0) |
||||
|
{ fprintf(fplog, "Fatal: Vsat at current temperature = %g is not positive.\n", pParam->B3SOIFDvsattemp); |
||||
|
printf("Fatal: Vsat at current temperature = %g is not positive.\n", |
||||
|
pParam->B3SOIFDvsattemp); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
/* Check Rout parameters */ |
||||
|
if (pParam->B3SOIFDpclm <= 0.0) |
||||
|
{ fprintf(fplog, "Fatal: Pclm = %g is not positive.\n", pParam->B3SOIFDpclm); |
||||
|
printf("Fatal: Pclm = %g is not positive.\n", pParam->B3SOIFDpclm); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
|
||||
|
if (pParam->B3SOIFDdrout < 0.0) |
||||
|
{ fprintf(fplog, "Fatal: Drout = %g is negative.\n", pParam->B3SOIFDdrout); |
||||
|
printf("Fatal: Drout = %g is negative.\n", pParam->B3SOIFDdrout); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
if ( model->B3SOIFDunitLengthGateSidewallJctCap > 0.0) |
||||
|
{ |
||||
|
if (here->B3SOIFDdrainPerimeter < pParam->B3SOIFDweff) |
||||
|
{ fprintf(fplog, "Warning: Pd = %g is less than W.\n", |
||||
|
here->B3SOIFDdrainPerimeter); |
||||
|
printf("Warning: Pd = %g is less than W.\n", |
||||
|
here->B3SOIFDdrainPerimeter); |
||||
|
here->B3SOIFDdrainPerimeter =pParam->B3SOIFDweff; |
||||
|
} |
||||
|
if (here->B3SOIFDsourcePerimeter < pParam->B3SOIFDweff) |
||||
|
{ fprintf(fplog, "Warning: Ps = %g is less than W.\n", |
||||
|
here->B3SOIFDsourcePerimeter); |
||||
|
printf("Warning: Ps = %g is less than W.\n", |
||||
|
here->B3SOIFDsourcePerimeter); |
||||
|
here->B3SOIFDsourcePerimeter =pParam->B3SOIFDweff; |
||||
|
} |
||||
|
} |
||||
|
/* Check capacitance parameters */ |
||||
|
if (pParam->B3SOIFDclc < 0.0) |
||||
|
{ fprintf(fplog, "Fatal: Clc = %g is negative.\n", pParam->B3SOIFDclc); |
||||
|
printf("Fatal: Clc = %g is negative.\n", pParam->B3SOIFDclc); |
||||
|
Fatal_Flag = 1; |
||||
|
} |
||||
|
if (model->B3SOIFDparamChk ==1) |
||||
|
{ |
||||
|
/* Check L and W parameters */ |
||||
|
if (pParam->B3SOIFDleff <= 5.0e-8) |
||||
|
{ fprintf(fplog, "Warning: Leff = %g may be too small.\n", |
||||
|
pParam->B3SOIFDleff); |
||||
|
printf("Warning: Leff = %g may be too small.\n", |
||||
|
pParam->B3SOIFDleff); |
||||
|
} |
||||
|
|
||||
|
if (pParam->B3SOIFDleffCV <= 5.0e-8) |
||||
|
{ fprintf(fplog, "Warning: Leff for CV = %g may be too small.\n", |
||||
|
pParam->B3SOIFDleffCV); |
||||
|
printf("Warning: Leff for CV = %g may be too small.\n", |
||||
|
pParam->B3SOIFDleffCV); |
||||
|
} |
||||
|
|
||||
|
if (pParam->B3SOIFDweff <= 1.0e-7) |
||||
|
{ fprintf(fplog, "Warning: Weff = %g may be too small.\n", |
||||
|
pParam->B3SOIFDweff); |
||||
|
printf("Warning: Weff = %g may be too small.\n", |
||||
|
pParam->B3SOIFDweff); |
||||
|
} |
||||
|
|
||||
|
if (pParam->B3SOIFDweffCV <= 1.0e-7) |
||||
|
{ fprintf(fplog, "Warning: Weff for CV = %g may be too small.\n", |
||||
|
pParam->B3SOIFDweffCV); |
||||
|
printf("Warning: Weff for CV = %g may be too small.\n", |
||||
|
pParam->B3SOIFDweffCV); |
||||
|
} |
||||
|
|
||||
|
/* Check threshold voltage parameters */ |
||||
|
if (pParam->B3SOIFDnlx < 0.0) |
||||
|
{ fprintf(fplog, "Warning: Nlx = %g is negative.\n", pParam->B3SOIFDnlx); |
||||
|
printf("Warning: Nlx = %g is negative.\n", pParam->B3SOIFDnlx); |
||||
|
} |
||||
|
if (model->B3SOIFDtox < 1.0e-9) |
||||
|
{ fprintf(fplog, "Warning: Tox = %g is less than 10A.\n", |
||||
|
model->B3SOIFDtox); |
||||
|
printf("Warning: Tox = %g is less than 10A.\n", model->B3SOIFDtox); |
||||
|
} |
||||
|
|
||||
|
if (pParam->B3SOIFDnpeak <= 1.0e15) |
||||
|
{ fprintf(fplog, "Warning: Nch = %g may be too small.\n", |
||||
|
pParam->B3SOIFDnpeak); |
||||
|
printf("Warning: Nch = %g may be too small.\n", |
||||
|
pParam->B3SOIFDnpeak); |
||||
|
} |
||||
|
else if (pParam->B3SOIFDnpeak >= 1.0e21) |
||||
|
{ fprintf(fplog, "Warning: Nch = %g may be too large.\n", |
||||
|
pParam->B3SOIFDnpeak); |
||||
|
printf("Warning: Nch = %g may be too large.\n", |
||||
|
pParam->B3SOIFDnpeak); |
||||
|
} |
||||
|
|
||||
|
if (fabs(pParam->B3SOIFDnsub) >= 1.0e21) |
||||
|
{ fprintf(fplog, "Warning: Nsub = %g may be too large.\n", |
||||
|
pParam->B3SOIFDnsub); |
||||
|
printf("Warning: Nsub = %g may be too large.\n", |
||||
|
pParam->B3SOIFDnsub); |
||||
|
} |
||||
|
|
||||
|
if ((pParam->B3SOIFDngate > 0.0) && |
||||
|
(pParam->B3SOIFDngate <= 1.e18)) |
||||
|
{ fprintf(fplog, "Warning: Ngate = %g is less than 1.E18cm^-3.\n", |
||||
|
pParam->B3SOIFDngate); |
||||
|
printf("Warning: Ngate = %g is less than 1.E18cm^-3.\n", |
||||
|
pParam->B3SOIFDngate); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIFDdvbd0 < 0.0) |
||||
|
{ fprintf(fplog, "Warning: Dvbd0 = %g is negative.\n", |
||||
|
model->B3SOIFDdvbd0); |
||||
|
printf("Warning: Dvbd0 = %g is negative.\n", model->B3SOIFDdvbd0); |
||||
|
} |
||||
|
|
||||
|
if (pParam->B3SOIFDdvt0 < 0.0) |
||||
|
{ fprintf(fplog, "Warning: Dvt0 = %g is negative.\n", |
||||
|
pParam->B3SOIFDdvt0); |
||||
|
printf("Warning: Dvt0 = %g is negative.\n", pParam->B3SOIFDdvt0); |
||||
|
} |
||||
|
|
||||
|
if (fabs(1.0e-6 / (pParam->B3SOIFDw0 + pParam->B3SOIFDweff)) > 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->B3SOIFDnfactor < 0.0) |
||||
|
{ fprintf(fplog, "Warning: Nfactor = %g is negative.\n", |
||||
|
pParam->B3SOIFDnfactor); |
||||
|
printf("Warning: Nfactor = %g is negative.\n", pParam->B3SOIFDnfactor); |
||||
|
} |
||||
|
if (model->B3SOIFDkb3 < 0.0) |
||||
|
{ fprintf(fplog, "Warning: Kb3 = %g is negative.\n", |
||||
|
model->B3SOIFDkb3); |
||||
|
printf("Warning: Kb3 = %g is negative.\n", model->B3SOIFDkb3); |
||||
|
} |
||||
|
|
||||
|
if (pParam->B3SOIFDcdsc < 0.0) |
||||
|
{ fprintf(fplog, "Warning: Cdsc = %g is negative.\n", |
||||
|
pParam->B3SOIFDcdsc); |
||||
|
printf("Warning: Cdsc = %g is negative.\n", pParam->B3SOIFDcdsc); |
||||
|
} |
||||
|
if (pParam->B3SOIFDcdscd < 0.0) |
||||
|
{ fprintf(fplog, "Warning: Cdscd = %g is negative.\n", |
||||
|
pParam->B3SOIFDcdscd); |
||||
|
printf("Warning: Cdscd = %g is negative.\n", pParam->B3SOIFDcdscd); |
||||
|
} |
||||
|
/* Check DIBL parameters */ |
||||
|
if (pParam->B3SOIFDeta0 < 0.0) |
||||
|
{ fprintf(fplog, "Warning: Eta0 = %g is negative.\n", |
||||
|
pParam->B3SOIFDeta0); |
||||
|
printf("Warning: Eta0 = %g is negative.\n", pParam->B3SOIFDeta0); |
||||
|
} |
||||
|
|
||||
|
/* Check Abulk parameters */ |
||||
|
if (fabs(1.0e-6 / (pParam->B3SOIFDb1 + pParam->B3SOIFDweff)) > 10.0) |
||||
|
{ fprintf(fplog, "Warning: (B1 + Weff) may be too small.\n"); |
||||
|
printf("Warning: (B1 + Weff) may be too small.\n"); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIFDadice0 > 1.0) |
||||
|
{ fprintf(fplog, "Warning: Adice0 = %g should be smaller than 1.\n", |
||||
|
model->B3SOIFDadice0); |
||||
|
printf("Warning: Adice0 = %g should be smaller than 1.\n", model->B3SOIFDadice0); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIFDabp < 0.2) |
||||
|
{ fprintf(fplog, "Warning: Abp = %g is too small.\n", |
||||
|
model->B3SOIFDabp); |
||||
|
printf("Warning: Abp = %g is too small.\n", model->B3SOIFDabp); |
||||
|
} |
||||
|
|
||||
|
if ((model->B3SOIFDmxc < -1.0) || (model->B3SOIFDmxc > 1.0)) |
||||
|
{ fprintf(fplog, "Warning: Mxc = %g should be within (-1, 1).\n", |
||||
|
model->B3SOIFDmxc); |
||||
|
printf("Warning: Mxc = %g should be within (-1, 1).\n", model->B3SOIFDmxc); |
||||
|
} |
||||
|
|
||||
|
/* Check Saturation parameters */ |
||||
|
if (pParam->B3SOIFDa2 < 0.01) |
||||
|
{ fprintf(fplog, "Warning: A2 = %g is too small. Set to 0.01.\n", pParam->B3SOIFDa2); |
||||
|
printf("Warning: A2 = %g is too small. Set to 0.01.\n", |
||||
|
pParam->B3SOIFDa2); |
||||
|
pParam->B3SOIFDa2 = 0.01; |
||||
|
} |
||||
|
else if (pParam->B3SOIFDa2 > 1.0) |
||||
|
{ fprintf(fplog, "Warning: A2 = %g is larger than 1. A2 is set to 1 and A1 is set to 0.\n", |
||||
|
pParam->B3SOIFDa2); |
||||
|
printf("Warning: A2 = %g is larger than 1. A2 is set to 1 and A1 is set to 0.\n", |
||||
|
pParam->B3SOIFDa2); |
||||
|
pParam->B3SOIFDa2 = 1.0; |
||||
|
pParam->B3SOIFDa1 = 0.0; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
if (pParam->B3SOIFDrdsw < 0.0) |
||||
|
{ fprintf(fplog, "Warning: Rdsw = %g is negative. Set to zero.\n", |
||||
|
pParam->B3SOIFDrdsw); |
||||
|
printf("Warning: Rdsw = %g is negative. Set to zero.\n", |
||||
|
pParam->B3SOIFDrdsw); |
||||
|
pParam->B3SOIFDrdsw = 0.0; |
||||
|
pParam->B3SOIFDrds0 = 0.0; |
||||
|
} |
||||
|
else if ((pParam->B3SOIFDrds0 > 0.0) && (pParam->B3SOIFDrds0 < 0.001)) |
||||
|
{ fprintf(fplog, "Warning: Rds at current temperature = %g is less than 0.001 ohm. Set to zero.\n", |
||||
|
pParam->B3SOIFDrds0); |
||||
|
printf("Warning: Rds at current temperature = %g is less than 0.001 ohm. Set to zero.\n", |
||||
|
pParam->B3SOIFDrds0); |
||||
|
pParam->B3SOIFDrds0 = 0.0; |
||||
|
} |
||||
|
if (pParam->B3SOIFDvsattemp < 1.0e3) |
||||
|
{ fprintf(fplog, "Warning: Vsat at current temperature = %g may be too small.\n", pParam->B3SOIFDvsattemp); |
||||
|
printf("Warning: Vsat at current temperature = %g may be too small.\n", pParam->B3SOIFDvsattemp); |
||||
|
} |
||||
|
|
||||
|
if (pParam->B3SOIFDpdibl1 < 0.0) |
||||
|
{ fprintf(fplog, "Warning: Pdibl1 = %g is negative.\n", |
||||
|
pParam->B3SOIFDpdibl1); |
||||
|
printf("Warning: Pdibl1 = %g is negative.\n", pParam->B3SOIFDpdibl1); |
||||
|
} |
||||
|
if (pParam->B3SOIFDpdibl2 < 0.0) |
||||
|
{ fprintf(fplog, "Warning: Pdibl2 = %g is negative.\n", |
||||
|
pParam->B3SOIFDpdibl2); |
||||
|
printf("Warning: Pdibl2 = %g is negative.\n", pParam->B3SOIFDpdibl2); |
||||
|
} |
||||
|
/* Check overlap capacitance parameters */ |
||||
|
if (model->B3SOIFDcgdo < 0.0) |
||||
|
{ fprintf(fplog, "Warning: cgdo = %g is negative. Set to zero.\n", model->B3SOIFDcgdo); |
||||
|
printf("Warning: cgdo = %g is negative. Set to zero.\n", model->B3SOIFDcgdo); |
||||
|
model->B3SOIFDcgdo = 0.0; |
||||
|
} |
||||
|
if (model->B3SOIFDcgso < 0.0) |
||||
|
{ fprintf(fplog, "Warning: cgso = %g is negative. Set to zero.\n", model->B3SOIFDcgso); |
||||
|
printf("Warning: cgso = %g is negative. Set to zero.\n", model->B3SOIFDcgso); |
||||
|
model->B3SOIFDcgso = 0.0; |
||||
|
} |
||||
|
if (model->B3SOIFDcgeo < 0.0) |
||||
|
{ fprintf(fplog, "Warning: cgeo = %g is negative. Set to zero.\n", model->B3SOIFDcgeo); |
||||
|
printf("Warning: cgeo = %g is negative. Set to zero.\n", model->B3SOIFDcgeo); |
||||
|
model->B3SOIFDcgeo = 0.0; |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIFDntun < 0.0) |
||||
|
{ fprintf(fplog, "Warning: Ntun = %g is negative.\n", |
||||
|
model->B3SOIFDntun); |
||||
|
printf("Warning: Ntun = %g is negative.\n", model->B3SOIFDntun); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIFDndiode < 0.0) |
||||
|
{ fprintf(fplog, "Warning: Ndiode = %g is negative.\n", |
||||
|
model->B3SOIFDndiode); |
||||
|
printf("Warning: Ndiode = %g is negative.\n", model->B3SOIFDndiode); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIFDisbjt < 0.0) |
||||
|
{ fprintf(fplog, "Warning: Isbjt = %g is negative.\n", |
||||
|
model->B3SOIFDisbjt); |
||||
|
printf("Warning: Isbjt = %g is negative.\n", model->B3SOIFDisbjt); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIFDisdif < 0.0) |
||||
|
{ fprintf(fplog, "Warning: Isdif = %g is negative.\n", |
||||
|
model->B3SOIFDisdif); |
||||
|
printf("Warning: Isdif = %g is negative.\n", model->B3SOIFDisdif); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIFDisrec < 0.0) |
||||
|
{ fprintf(fplog, "Warning: Isrec = %g is negative.\n", |
||||
|
model->B3SOIFDisrec); |
||||
|
printf("Warning: Isrec = %g is negative.\n", model->B3SOIFDisrec); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIFDistun < 0.0) |
||||
|
{ fprintf(fplog, "Warning: Istun = %g is negative.\n", |
||||
|
model->B3SOIFDistun); |
||||
|
printf("Warning: Istun = %g is negative.\n", model->B3SOIFDistun); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIFDedl < 0.0) |
||||
|
{ fprintf(fplog, "Warning: Edl = %g is negative.\n", |
||||
|
model->B3SOIFDedl); |
||||
|
printf("Warning: Edl = %g is negative.\n", model->B3SOIFDedl); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIFDkbjt1 < 0.0) |
||||
|
{ fprintf(fplog, "Warning: Kbjt1 = %g is negative.\n", |
||||
|
model->B3SOIFDkbjt1); |
||||
|
printf("Warning: kbjt1 = %g is negative.\n", model->B3SOIFDkbjt1); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIFDtt < 0.0) |
||||
|
{ fprintf(fplog, "Warning: Tt = %g is negative.\n", |
||||
|
model->B3SOIFDtt); |
||||
|
printf("Warning: Tt = %g is negative.\n", model->B3SOIFDtt); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIFDcsdmin < 0.0) |
||||
|
{ fprintf(fplog, "Warning: Csdmin = %g is negative.\n", |
||||
|
model->B3SOIFDcsdmin); |
||||
|
printf("Warning: Csdmin = %g is negative.\n", model->B3SOIFDcsdmin); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIFDcsdesw < 0.0) |
||||
|
{ fprintf(fplog, "Warning: Csdesw = %g is negative.\n", |
||||
|
model->B3SOIFDcsdesw); |
||||
|
printf("Warning: Csdesw = %g is negative.\n", model->B3SOIFDcsdesw); |
||||
|
} |
||||
|
|
||||
|
if ((model->B3SOIFDasd < 0.0) || (model->B3SOIFDmxc > 1.0)) |
||||
|
{ fprintf(fplog, "Warning: Asd = %g should be within (0, 1).\n", |
||||
|
model->B3SOIFDasd); |
||||
|
printf("Warning: Asd = %g should be within (0, 1).\n", model->B3SOIFDasd); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIFDrth0 < 0.0) |
||||
|
{ fprintf(fplog, "Warning: Rth0 = %g is negative.\n", |
||||
|
model->B3SOIFDrth0); |
||||
|
printf("Warning: Rth0 = %g is negative.\n", model->B3SOIFDrth0); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIFDcth0 < 0.0) |
||||
|
{ fprintf(fplog, "Warning: Cth0 = %g is negative.\n", |
||||
|
model->B3SOIFDcth0); |
||||
|
printf("Warning: Cth0 = %g is negative.\n", model->B3SOIFDcth0); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIFDrbody < 0.0) |
||||
|
{ fprintf(fplog, "Warning: Rbody = %g is negative.\n", |
||||
|
model->B3SOIFDrbody); |
||||
|
printf("Warning: Rbody = %g is negative.\n", model->B3SOIFDrbody); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIFDrbsh < 0.0) |
||||
|
{ fprintf(fplog, "Warning: Rbsh = %g is negative.\n", |
||||
|
model->B3SOIFDrbsh); |
||||
|
printf("Warning: Rbsh = %g is negative.\n", model->B3SOIFDrbsh); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIFDxj > model->B3SOIFDtsi) |
||||
|
{ fprintf(fplog, "Warning: Xj = %g is thicker than Tsi = %g.\n", |
||||
|
model->B3SOIFDxj, model->B3SOIFDtsi); |
||||
|
printf("Warning: Xj = %g is thicker than Tsi = %g.\n", |
||||
|
model->B3SOIFDxj, model->B3SOIFDtsi); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIFDcapMod < 2) |
||||
|
{ fprintf(fplog, "Warning: capMod < 2 is not supported by BSIM3SOI.\n"); |
||||
|
printf("Warning: Warning: capMod < 2 is not supported by BSIM3SOI.\n"); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIFDcii > 2.0) |
||||
|
{ fprintf(fplog, "Warning: Cii = %g is larger than 2.0.\n", model->B3SOIFDcii); |
||||
|
printf("Warning: Cii = %g is larger than 2.0.\n", model->B3SOIFDcii); |
||||
|
} |
||||
|
|
||||
|
if (model->B3SOIFDdii > 1.5) |
||||
|
{ fprintf(fplog, "Warning: Dii = %g is larger than 1.5.\n", model->B3SOIFDcii); |
||||
|
printf("Warning: Dii = %g is too larger than 1.5.\n", model->B3SOIFDcii); |
||||
|
} |
||||
|
|
||||
|
}/* 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,90 @@ |
|||||
|
/********** |
||||
|
Copyright 1999 Regents of the University of California. All rights reserved. |
||||
|
Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang |
||||
|
File: b3soifdcvtest.c 98/5/01 |
||||
|
**********/ |
||||
|
|
||||
|
|
||||
|
#include "ngspice.h" |
||||
|
#include <stdio.h> |
||||
|
#include <math.h> |
||||
|
#include "cktdefs.h" |
||||
|
#include "b3soifddef.h" |
||||
|
#include "trandefs.h" |
||||
|
#include "const.h" |
||||
|
#include "devdefs.h" |
||||
|
#include "sperror.h" |
||||
|
#include "suffix.h" |
||||
|
|
||||
|
|
||||
|
int |
||||
|
B3SOIFDconvTest(inModel,ckt) |
||||
|
GENmodel *inModel; |
||||
|
CKTcircuit *ckt; |
||||
|
{ |
||||
|
B3SOIFDmodel *model = (B3SOIFDmodel*)inModel; |
||||
|
B3SOIFDinstance *here; |
||||
|
double delvbd, delvbs, delvds, delvgd, delvgs, vbd, vbs, vds; |
||||
|
double cbd, cbhat, cbs, cd, cdhat, tol, vgd, vgdo, vgs; |
||||
|
|
||||
|
/* loop through all the B3SOIFD device models */ |
||||
|
for (; model != NULL; model = model->B3SOIFDnextModel) |
||||
|
{ /* loop through all the instances of the model */ |
||||
|
for (here = model->B3SOIFDinstances; here != NULL ; |
||||
|
here=here->B3SOIFDnextInstance) |
||||
|
{ vbs = model->B3SOIFDtype |
||||
|
* (*(ckt->CKTrhsOld+here->B3SOIFDbNode) |
||||
|
- *(ckt->CKTrhsOld+here->B3SOIFDsNodePrime)); |
||||
|
vgs = model->B3SOIFDtype |
||||
|
* (*(ckt->CKTrhsOld+here->B3SOIFDgNode) |
||||
|
- *(ckt->CKTrhsOld+here->B3SOIFDsNodePrime)); |
||||
|
vds = model->B3SOIFDtype |
||||
|
* (*(ckt->CKTrhsOld+here->B3SOIFDdNodePrime) |
||||
|
- *(ckt->CKTrhsOld+here->B3SOIFDsNodePrime)); |
||||
|
vbd = vbs - vds; |
||||
|
vgd = vgs - vds; |
||||
|
vgdo = *(ckt->CKTstate0 + here->B3SOIFDvgs) |
||||
|
- *(ckt->CKTstate0 + here->B3SOIFDvds); |
||||
|
delvbs = vbs - *(ckt->CKTstate0 + here->B3SOIFDvbs); |
||||
|
delvbd = vbd - *(ckt->CKTstate0 + here->B3SOIFDvbd); |
||||
|
delvgs = vgs - *(ckt->CKTstate0 + here->B3SOIFDvgs); |
||||
|
delvds = vds - *(ckt->CKTstate0 + here->B3SOIFDvds); |
||||
|
delvgd = vgd-vgdo; |
||||
|
|
||||
|
cd = here->B3SOIFDcd; |
||||
|
if (here->B3SOIFDmode >= 0) |
||||
|
{ cdhat = cd - here->B3SOIFDgjdb * delvbd |
||||
|
+ here->B3SOIFDgmbs * delvbs + here->B3SOIFDgm * delvgs |
||||
|
+ here->B3SOIFDgds * delvds; |
||||
|
} |
||||
|
else |
||||
|
{ cdhat = cd - (here->B3SOIFDgjdb - here->B3SOIFDgmbs) * delvbd |
||||
|
- here->B3SOIFDgm * delvgd + here->B3SOIFDgds * delvds; |
||||
|
} |
||||
|
|
||||
|
/* |
||||
|
* check convergence |
||||
|
*/ |
||||
|
if ((here->B3SOIFDoff == 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->B3SOIFDcjs; |
||||
|
cbd = here->B3SOIFDcjd; |
||||
|
cbhat = cbs + cbd + here->B3SOIFDgjdb * delvbd |
||||
|
+ here->B3SOIFDgjsb * delvbs; |
||||
|
tol = ckt->CKTreltol * MAX(fabs(cbhat), fabs(cbs + cbd)) |
||||
|
+ ckt->CKTabstol; |
||||
|
if (fabs(cbhat - (cbs + cbd)) > tol) |
||||
|
{ ckt->CKTnoncon++; |
||||
|
return(OK); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
return(OK); |
||||
|
} |
||||
|
|
||||
1990
src/spicelib/devices/bsim3soi_fd/b3soifddef.h
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,41 @@ |
|||||
|
/********** |
||||
|
Copyright 1999 Regents of the University of California. All rights reserved. |
||||
|
Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang |
||||
|
File: b3soifddel.c 98/5/01 |
||||
|
**********/ |
||||
|
|
||||
|
|
||||
|
#include "ngspice.h" |
||||
|
#include <stdio.h> |
||||
|
#include "b3soifddef.h" |
||||
|
#include "sperror.h" |
||||
|
#include "gendefs.h" |
||||
|
#include "suffix.h" |
||||
|
|
||||
|
|
||||
|
int |
||||
|
B3SOIFDdelete(inModel,name,inInst) |
||||
|
GENmodel *inModel; |
||||
|
IFuid name; |
||||
|
GENinstance **inInst; |
||||
|
{ |
||||
|
B3SOIFDinstance **fast = (B3SOIFDinstance**)inInst; |
||||
|
B3SOIFDmodel *model = (B3SOIFDmodel*)inModel; |
||||
|
B3SOIFDinstance **prev = NULL; |
||||
|
B3SOIFDinstance *here; |
||||
|
|
||||
|
for (; model ; model = model->B3SOIFDnextModel) |
||||
|
{ prev = &(model->B3SOIFDinstances); |
||||
|
for (here = *prev; here ; here = *prev) |
||||
|
{ if (here->B3SOIFDname == name || (fast && here==*fast)) |
||||
|
{ *prev= here->B3SOIFDnextInstance; |
||||
|
FREE(here); |
||||
|
return(OK); |
||||
|
} |
||||
|
prev = &(here->B3SOIFDnextInstance); |
||||
|
} |
||||
|
} |
||||
|
return(E_NODEV); |
||||
|
} |
||||
|
|
||||
|
|
||||
@ -0,0 +1,39 @@ |
|||||
|
/********** |
||||
|
Copyright 1999 Regents of the University of California. All rights reserved. |
||||
|
Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang |
||||
|
File: b3soifddest.c 98/5/01 |
||||
|
**********/ |
||||
|
|
||||
|
|
||||
|
#include "ngspice.h" |
||||
|
#include <stdio.h> |
||||
|
#include "b3soifddef.h" |
||||
|
#include "suffix.h" |
||||
|
|
||||
|
void |
||||
|
B3SOIFDdestroy(inModel) |
||||
|
GENmodel **inModel; |
||||
|
{ |
||||
|
B3SOIFDmodel **model = (B3SOIFDmodel**)inModel; |
||||
|
B3SOIFDinstance *here; |
||||
|
B3SOIFDinstance *prev = NULL; |
||||
|
B3SOIFDmodel *mod = *model; |
||||
|
B3SOIFDmodel *oldmod = NULL; |
||||
|
|
||||
|
for (; mod ; mod = mod->B3SOIFDnextModel) |
||||
|
{ if(oldmod) FREE(oldmod); |
||||
|
oldmod = mod; |
||||
|
prev = (B3SOIFDinstance *)NULL; |
||||
|
for (here = mod->B3SOIFDinstances; here; here = here->B3SOIFDnextInstance) |
||||
|
{ if(prev) FREE(prev); |
||||
|
prev = here; |
||||
|
} |
||||
|
if(prev) FREE(prev); |
||||
|
} |
||||
|
if(oldmod) FREE(oldmod); |
||||
|
*model = NULL; |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
@ -0,0 +1,53 @@ |
|||||
|
/********** |
||||
|
Copyright 1999 Regents of the University of California. All rights reserved. |
||||
|
Author: 1998 Samuel Fung |
||||
|
File: b3soifdext.h |
||||
|
**********/ |
||||
|
|
||||
|
#ifdef __STDC__ |
||||
|
extern int B3SOIFDacLoad(GENmodel *,CKTcircuit*); |
||||
|
extern int B3SOIFDask(CKTcircuit *,GENinstance*,int,IFvalue*,IFvalue*); |
||||
|
extern int B3SOIFDconvTest(GENmodel *,CKTcircuit*); |
||||
|
extern int B3SOIFDdelete(GENmodel*,IFuid,GENinstance**); |
||||
|
extern void B3SOIFDdestroy(GENmodel**); |
||||
|
extern int B3SOIFDgetic(GENmodel*,CKTcircuit*); |
||||
|
extern int B3SOIFDload(GENmodel*,CKTcircuit*); |
||||
|
extern int B3SOIFDmAsk(CKTcircuit*,GENmodel *,int, IFvalue*); |
||||
|
extern int B3SOIFDmDelete(GENmodel**,IFuid,GENmodel*); |
||||
|
extern int B3SOIFDmParam(int,IFvalue*,GENmodel*); |
||||
|
extern void B3SOIFDmosCap(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 B3SOIFDparam(int,IFvalue*,GENinstance*,IFvalue*); |
||||
|
extern int B3SOIFDpzLoad(GENmodel*,CKTcircuit*,SPcomplex*); |
||||
|
extern int B3SOIFDsetup(SMPmatrix*,GENmodel*,CKTcircuit*,int*); |
||||
|
extern int B3SOIFDtemp(GENmodel*,CKTcircuit*); |
||||
|
extern int B3SOIFDtrunc(GENmodel*,CKTcircuit*,double*); |
||||
|
extern int B3SOIFDnoise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*); |
||||
|
extern int B3SOIFDunsetup(GENmodel*,CKTcircuit*); |
||||
|
|
||||
|
#else /* stdc */ |
||||
|
extern int B3SOIFDacLoad(); |
||||
|
extern int B3SOIFDdelete(); |
||||
|
extern void B3SOIFDdestroy(); |
||||
|
extern int B3SOIFDgetic(); |
||||
|
extern int B3SOIFDload(); |
||||
|
extern int B3SOIFDmDelete(); |
||||
|
extern int B3SOIFDask(); |
||||
|
extern int B3SOIFDmAsk(); |
||||
|
extern int B3SOIFDconvTest(); |
||||
|
extern int B3SOIFDtemp(); |
||||
|
extern int B3SOIFDmParam(); |
||||
|
extern void B3SOIFDmosCap(); |
||||
|
extern int B3SOIFDparam(); |
||||
|
extern int B3SOIFDpzLoad(); |
||||
|
extern int B3SOIFDsetup(); |
||||
|
extern int B3SOIFDtrunc(); |
||||
|
extern int B3SOIFDnoise(); |
||||
|
extern int B3SOIFDunsetup(); |
||||
|
|
||||
|
#endif /* stdc */ |
||||
|
|
||||
@ -0,0 +1,51 @@ |
|||||
|
/********** |
||||
|
Copyright 1999 Regents of the University of California. All rights reserved. |
||||
|
Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang |
||||
|
File: b3soifdgetic.c 98/5/01 |
||||
|
**********/ |
||||
|
|
||||
|
|
||||
|
#include "ngspice.h" |
||||
|
#include <stdio.h> |
||||
|
#include "cktdefs.h" |
||||
|
#include "b3soifddef.h" |
||||
|
#include "sperror.h" |
||||
|
#include "suffix.h" |
||||
|
|
||||
|
|
||||
|
int |
||||
|
B3SOIFDgetic(inModel,ckt) |
||||
|
GENmodel *inModel; |
||||
|
CKTcircuit *ckt; |
||||
|
{ |
||||
|
B3SOIFDmodel *model = (B3SOIFDmodel*)inModel; |
||||
|
B3SOIFDinstance *here; |
||||
|
|
||||
|
for (; model ; model = model->B3SOIFDnextModel) |
||||
|
{ for (here = model->B3SOIFDinstances; here; here = here->B3SOIFDnextInstance) |
||||
|
{ if(!here->B3SOIFDicVBSGiven) |
||||
|
{ here->B3SOIFDicVBS = *(ckt->CKTrhs + here->B3SOIFDbNode) |
||||
|
- *(ckt->CKTrhs + here->B3SOIFDsNode); |
||||
|
} |
||||
|
if (!here->B3SOIFDicVDSGiven) |
||||
|
{ here->B3SOIFDicVDS = *(ckt->CKTrhs + here->B3SOIFDdNode) |
||||
|
- *(ckt->CKTrhs + here->B3SOIFDsNode); |
||||
|
} |
||||
|
if (!here->B3SOIFDicVGSGiven) |
||||
|
{ here->B3SOIFDicVGS = *(ckt->CKTrhs + here->B3SOIFDgNode) |
||||
|
- *(ckt->CKTrhs + here->B3SOIFDsNode); |
||||
|
} |
||||
|
if (!here->B3SOIFDicVESGiven) |
||||
|
{ here->B3SOIFDicVES = *(ckt->CKTrhs + here->B3SOIFDeNode) |
||||
|
- *(ckt->CKTrhs + here->B3SOIFDsNode); |
||||
|
} |
||||
|
if (!here->B3SOIFDicVPSGiven) |
||||
|
{ here->B3SOIFDicVPS = *(ckt->CKTrhs + here->B3SOIFDpNode) |
||||
|
- *(ckt->CKTrhs + here->B3SOIFDsNode); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
return(OK); |
||||
|
} |
||||
|
|
||||
|
|
||||
@ -0,0 +1,65 @@ |
|||||
|
#include <config.h> |
||||
|
|
||||
|
#include <devdefs.h> |
||||
|
|
||||
|
#include "b3soifditf.h" |
||||
|
#include "b3soifdext.h" |
||||
|
#include "b3soifdinit.h" |
||||
|
|
||||
|
SPICEdev B3SOIFDinfo = { |
||||
|
{ "B3SOIFD", |
||||
|
"Berkeley SOI MOSFET (FD) model version 1.0", |
||||
|
|
||||
|
&B3SOIFDnSize, |
||||
|
&B3SOIFDnSize, |
||||
|
B3SOIFDnames, |
||||
|
|
||||
|
&B3SOIFDpTSize, |
||||
|
B3SOIFDpTable, |
||||
|
|
||||
|
&B3SOIFDmPTSize, |
||||
|
B3SOIFDmPTable, |
||||
|
DEV_DEFAULT} |
||||
|
, |
||||
|
|
||||
|
DEVparam: B3SOIFDparam, |
||||
|
DEVmodParam: B3SOIFDmParam, |
||||
|
DEVload: B3SOIFDload, |
||||
|
DEVsetup: B3SOIFDsetup, |
||||
|
DEVunsetup: B3SOIFDunsetup, |
||||
|
DEVpzSetup: B3SOIFDsetup, |
||||
|
DEVtemperature:B3SOIFDtemp, |
||||
|
DEVtrunc: B3SOIFDtrunc, |
||||
|
DEVfindBranch: NULL, |
||||
|
DEVacLoad: B3SOIFDacLoad, |
||||
|
DEVaccept: NULL, |
||||
|
DEVdestroy: B3SOIFDdestroy, |
||||
|
DEVmodDelete: B3SOIFDmDelete, |
||||
|
DEVdelete: B3SOIFDdelete, |
||||
|
DEVsetic: B3SOIFDgetic, |
||||
|
DEVask: B3SOIFDask, |
||||
|
DEVmodAsk: B3SOIFDmAsk, |
||||
|
DEVpzLoad: B3SOIFDpzLoad, |
||||
|
DEVconvTest: B3SOIFDconvTest, |
||||
|
DEVsenSetup: NULL, |
||||
|
DEVsenLoad: NULL, |
||||
|
DEVsenUpdate: NULL, |
||||
|
DEVsenAcLoad: NULL, |
||||
|
DEVsenPrint: NULL, |
||||
|
DEVsenTrunc: NULL, |
||||
|
DEVdisto: NULL, |
||||
|
DEVnoise: B3SOIFDnoise, |
||||
|
DEVinstSize: &B3SOIFDiSize, |
||||
|
DEVmodSize: &B3SOIFDmSize |
||||
|
}; |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
SPICEdev * |
||||
|
get_b3soifd_info (void) |
||||
|
{ |
||||
|
return &B3SOIFDinfo; |
||||
|
} |
||||
@ -0,0 +1,13 @@ |
|||||
|
#ifndef _B3SOIFDINIT_H |
||||
|
#define _B3SOIFDINIT_H |
||||
|
|
||||
|
extern IFparm B3SOIFDpTable[]; |
||||
|
extern IFparm B3SOIFDmPTable[]; |
||||
|
extern char *B3SOIFDnames[]; |
||||
|
extern int B3SOIFDpTSize; |
||||
|
extern int B3SOIFDmPTSize; |
||||
|
extern int B3SOIFDnSize; |
||||
|
extern int B3SOIFDiSize; |
||||
|
extern int B3SOIFDmSize; |
||||
|
|
||||
|
#endif |
||||
@ -0,0 +1,14 @@ |
|||||
|
/********** |
||||
|
Copyright 1999 Regents of the University of California. All rights reserved. |
||||
|
Author: 1998 Samuel Fung |
||||
|
File: b3soifditf.h |
||||
|
**********/ |
||||
|
#ifndef DEV_B3SOIFD |
||||
|
#define DEV_B3SOIFD |
||||
|
|
||||
|
#include "b3soifdext.h" |
||||
|
|
||||
|
SPICEdev *get_b3soifd_info (void); |
||||
|
|
||||
|
#endif |
||||
|
|
||||
3593
src/spicelib/devices/bsim3soi_fd/b3soifdld.c
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1207
src/spicelib/devices/bsim3soi_fd/b3soifdmask.c
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,47 @@ |
|||||
|
/********** |
||||
|
Copyright 1999 Regents of the University of California. All rights reserved. |
||||
|
Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang |
||||
|
File: b3soifdmdel.c 98/5/01 |
||||
|
**********/ |
||||
|
|
||||
|
|
||||
|
#include "ngspice.h" |
||||
|
#include <stdio.h> |
||||
|
#include "b3soifddef.h" |
||||
|
#include "sperror.h" |
||||
|
#include "suffix.h" |
||||
|
|
||||
|
int |
||||
|
B3SOIFDmDelete(inModel,modname,kill) |
||||
|
GENmodel **inModel; |
||||
|
IFuid modname; |
||||
|
GENmodel *kill; |
||||
|
{ |
||||
|
B3SOIFDmodel **model = (B3SOIFDmodel**)inModel; |
||||
|
B3SOIFDmodel *modfast = (B3SOIFDmodel*)kill; |
||||
|
B3SOIFDinstance *here; |
||||
|
B3SOIFDinstance *prev = NULL; |
||||
|
B3SOIFDmodel **oldmod; |
||||
|
|
||||
|
oldmod = model; |
||||
|
for (; *model ; model = &((*model)->B3SOIFDnextModel)) |
||||
|
{ if ((*model)->B3SOIFDmodName == modname || |
||||
|
(modfast && *model == modfast)) |
||||
|
goto delgot; |
||||
|
oldmod = model; |
||||
|
} |
||||
|
return(E_NOMOD); |
||||
|
|
||||
|
delgot: |
||||
|
*oldmod = (*model)->B3SOIFDnextModel; /* cut deleted device out of list */ |
||||
|
for (here = (*model)->B3SOIFDinstances; here; here = here->B3SOIFDnextInstance) |
||||
|
{ if(prev) FREE(prev); |
||||
|
prev = here; |
||||
|
} |
||||
|
if(prev) FREE(prev); |
||||
|
FREE(*model); |
||||
|
return(OK); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
1625
src/spicelib/devices/bsim3soi_fd/b3soifdmpar.c
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,392 @@ |
|||||
|
/********** |
||||
|
Copyright 1999 Regents of the University of California. All rights reserved. |
||||
|
Author: Weidong Liu and Pin Su Feb 1999 |
||||
|
Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang |
||||
|
File: b3soifdnoi.c 98/5/01 |
||||
|
**********/ |
||||
|
|
||||
|
#include "ngspice.h" |
||||
|
#include <stdio.h> |
||||
|
#include <math.h> |
||||
|
#include "b3soifddef.h" |
||||
|
#include "cktdefs.h" |
||||
|
#include "iferrmsg.h" |
||||
|
#include "noisedef.h" |
||||
|
#include "suffix.h" |
||||
|
#include "const.h" /* jwan */ |
||||
|
|
||||
|
/* |
||||
|
* B3SOIFDnoise (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->B3SOIFDnoiMod. |
||||
|
If model->B3SOIFDnoiMod = 1, |
||||
|
Channel thermal noise = SPICE2 model |
||||
|
Flicker noise = SPICE2 model |
||||
|
If model->B3SOIFDnoiMod = 2, |
||||
|
Channel thermal noise = B3SOIFD model |
||||
|
Flicker noise = B3SOIFD model |
||||
|
If model->B3SOIFDnoiMod = 3, |
||||
|
Channel thermal noise = SPICE2 model |
||||
|
Flicker noise = B3SOIFD model |
||||
|
If model->B3SOIFDnoiMod = 4, |
||||
|
Channel thermal noise = B3SOIFD model |
||||
|
Flicker noise = SPICE2 model |
||||
|
*/ |
||||
|
|
||||
|
extern void NevalSrc(); |
||||
|
extern double Nintegrate(); |
||||
|
|
||||
|
double |
||||
|
B3SOIFDStrongInversionNoiseEval(vgs, vds, model, here, freq, temp) |
||||
|
double vgs, vds, freq, temp; |
||||
|
B3SOIFDmodel *model; |
||||
|
B3SOIFDinstance *here; |
||||
|
{ |
||||
|
struct b3soifdSizeDependParam *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->B3SOIFDcd); |
||||
|
if (vds > here->B3SOIFDvdsat) |
||||
|
{ esat = 2.0 * pParam->B3SOIFDvsattemp / here->B3SOIFDueff; |
||||
|
T0 = ((((vds - here->B3SOIFDvdsat) / pParam->B3SOIFDlitl) + model->B3SOIFDem) |
||||
|
/ esat); |
||||
|
DelClm = pParam->B3SOIFDlitl * log (MAX(T0, N_MINLOG)); |
||||
|
} |
||||
|
else |
||||
|
DelClm = 0.0; |
||||
|
EffFreq = pow(freq, model->B3SOIFDef); |
||||
|
T1 = CHARGE * CHARGE * 8.62e-5 * cd * temp * here->B3SOIFDueff; |
||||
|
T2 = 1.0e8 * EffFreq * model->B3SOIFDcox |
||||
|
* pParam->B3SOIFDleff * pParam->B3SOIFDleff; |
||||
|
Vgst = vgs - here->B3SOIFDvon; |
||||
|
N0 = model->B3SOIFDcox * Vgst / CHARGE; |
||||
|
if (N0 < 0.0) |
||||
|
N0 = 0.0; |
||||
|
Nl = model->B3SOIFDcox * (Vgst - MIN(vds, here->B3SOIFDvdsat)) / CHARGE; |
||||
|
if (Nl < 0.0) |
||||
|
Nl = 0.0; |
||||
|
|
||||
|
T3 = model->B3SOIFDoxideTrapDensityA |
||||
|
* log(MAX(((N0 + 2.0e14) / (Nl + 2.0e14)), N_MINLOG)); |
||||
|
T4 = model->B3SOIFDoxideTrapDensityB * (N0 - Nl); |
||||
|
T5 = model->B3SOIFDoxideTrapDensityC * 0.5 * (N0 * N0 - Nl * Nl); |
||||
|
|
||||
|
T6 = 8.62e-5 * temp * cd * cd; |
||||
|
T7 = 1.0e8 * EffFreq * pParam->B3SOIFDleff |
||||
|
* pParam->B3SOIFDleff * pParam->B3SOIFDweff; |
||||
|
T8 = model->B3SOIFDoxideTrapDensityA + model->B3SOIFDoxideTrapDensityB * Nl |
||||
|
+ model->B3SOIFDoxideTrapDensityC * Nl * Nl; |
||||
|
T9 = (Nl + 2.0e14) * (Nl + 2.0e14); |
||||
|
|
||||
|
Ssi = T1 / T2 * (T3 + T4 + T5) + T6 / T7 * DelClm * T8 / T9; |
||||
|
|
||||
|
return Ssi; |
||||
|
} |
||||
|
|
||||
|
int |
||||
|
B3SOIFDnoise (mode, operation, inModel, ckt, data, OnDens) |
||||
|
int mode, operation; |
||||
|
GENmodel *inModel; |
||||
|
CKTcircuit *ckt; |
||||
|
Ndata *data; |
||||
|
double *OnDens; |
||||
|
{ |
||||
|
B3SOIFDmodel *model = (B3SOIFDmodel *)inModel; |
||||
|
B3SOIFDinstance *here; |
||||
|
struct b3soifdSizeDependParam *pParam; |
||||
|
char name[N_MXVLNTH]; |
||||
|
double tempOnoise; |
||||
|
double tempInoise; |
||||
|
double noizDens[B3SOIFDNSRCS]; |
||||
|
double lnNdens[B3SOIFDNSRCS]; |
||||
|
|
||||
|
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 *B3SOIFDnNames[B3SOIFDNSRCS] = |
||||
|
{ /* Note that we have to keep the order */ |
||||
|
".rd", /* noise due to rd */ |
||||
|
/* consistent with the index definitions */ |
||||
|
".rs", /* noise due to rs */ |
||||
|
/* in B3SOIFDdefs.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->B3SOIFDnextModel) |
||||
|
{ for (here = model->B3SOIFDinstances; here != NULL; |
||||
|
here = here->B3SOIFDnextInstance) |
||||
|
{ 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 < B3SOIFDNSRCS; i++) |
||||
|
{ (void) sprintf(name, "onoise.%s%s", |
||||
|
here->B3SOIFDname, |
||||
|
B3SOIFDnNames[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 < B3SOIFDNSRCS; i++) |
||||
|
{ (void) sprintf(name, "onoise_total.%s%s", |
||||
|
here->B3SOIFDname, |
||||
|
B3SOIFDnNames[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->B3SOIFDname, |
||||
|
B3SOIFDnNames[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[B3SOIFDRDNOIZ], |
||||
|
&lnNdens[B3SOIFDRDNOIZ], ckt, THERMNOISE, |
||||
|
here->B3SOIFDdNodePrime, here->B3SOIFDdNode, |
||||
|
here->B3SOIFDdrainConductance); |
||||
|
|
||||
|
NevalSrc(&noizDens[B3SOIFDRSNOIZ], |
||||
|
&lnNdens[B3SOIFDRSNOIZ], ckt, THERMNOISE, |
||||
|
here->B3SOIFDsNodePrime, here->B3SOIFDsNode, |
||||
|
here->B3SOIFDsourceConductance); |
||||
|
|
||||
|
switch( model->B3SOIFDnoiMod ) |
||||
|
{ case 1: |
||||
|
case 3: |
||||
|
NevalSrc(&noizDens[B3SOIFDIDNOIZ], |
||||
|
&lnNdens[B3SOIFDIDNOIZ], ckt, |
||||
|
THERMNOISE, here->B3SOIFDdNodePrime, |
||||
|
here->B3SOIFDsNodePrime, |
||||
|
(2.0 / 3.0 * fabs(here->B3SOIFDgm |
||||
|
+ here->B3SOIFDgds |
||||
|
+ here->B3SOIFDgmbs))); |
||||
|
break; |
||||
|
case 2: |
||||
|
case 4: |
||||
|
NevalSrc(&noizDens[B3SOIFDIDNOIZ], |
||||
|
&lnNdens[B3SOIFDIDNOIZ], ckt, |
||||
|
THERMNOISE, here->B3SOIFDdNodePrime, |
||||
|
here->B3SOIFDsNodePrime, |
||||
|
(here->B3SOIFDueff |
||||
|
* fabs(here->B3SOIFDqinv |
||||
|
/ (pParam->B3SOIFDleff |
||||
|
* pParam->B3SOIFDleff)))); |
||||
|
break; |
||||
|
} |
||||
|
NevalSrc(&noizDens[B3SOIFDFLNOIZ], (double*) NULL, |
||||
|
ckt, N_GAIN, here->B3SOIFDdNodePrime, |
||||
|
here->B3SOIFDsNodePrime, (double) 0.0); |
||||
|
|
||||
|
switch( model->B3SOIFDnoiMod ) |
||||
|
{ case 1: |
||||
|
case 4: |
||||
|
noizDens[B3SOIFDFLNOIZ] *= model->B3SOIFDkf |
||||
|
* exp(model->B3SOIFDaf |
||||
|
* log(MAX(fabs(here->B3SOIFDcd), |
||||
|
N_MINLOG))) |
||||
|
/ (pow(data->freq, model->B3SOIFDef) |
||||
|
* pParam->B3SOIFDleff |
||||
|
* pParam->B3SOIFDleff |
||||
|
* model->B3SOIFDcox); |
||||
|
break; |
||||
|
case 2: |
||||
|
case 3: |
||||
|
vgs = *(ckt->CKTstates[0] + here->B3SOIFDvgs); |
||||
|
vds = *(ckt->CKTstates[0] + here->B3SOIFDvds); |
||||
|
if (vds < 0.0) |
||||
|
{ vds = -vds; |
||||
|
vgs = vgs + vds; |
||||
|
} |
||||
|
if (vgs >= here->B3SOIFDvon + 0.1) |
||||
|
{ Ssi = B3SOIFDStrongInversionNoiseEval(vgs, |
||||
|
vds, model, here, data->freq, |
||||
|
ckt->CKTtemp); |
||||
|
noizDens[B3SOIFDFLNOIZ] *= Ssi; |
||||
|
} |
||||
|
else |
||||
|
{ pParam = here->pParam; |
||||
|
T10 = model->B3SOIFDoxideTrapDensityA |
||||
|
* 8.62e-5 * ckt->CKTtemp; |
||||
|
T11 = pParam->B3SOIFDweff |
||||
|
* pParam->B3SOIFDleff |
||||
|
* pow(data->freq, model->B3SOIFDef) |
||||
|
* 4.0e36; |
||||
|
Swi = T10 / T11 * here->B3SOIFDcd |
||||
|
* here->B3SOIFDcd; |
||||
|
Slimit = B3SOIFDStrongInversionNoiseEval( |
||||
|
here->B3SOIFDvon + 0.1, vds, model, |
||||
|
here, data->freq, ckt->CKTtemp); |
||||
|
T1 = Swi + Slimit; |
||||
|
if (T1 > 0.0) |
||||
|
noizDens[B3SOIFDFLNOIZ] *= (Slimit |
||||
|
* Swi) / T1; |
||||
|
else |
||||
|
noizDens[B3SOIFDFLNOIZ] *= 0.0; |
||||
|
} |
||||
|
break; |
||||
|
} |
||||
|
|
||||
|
lnNdens[B3SOIFDFLNOIZ] = |
||||
|
log(MAX(noizDens[B3SOIFDFLNOIZ], N_MINLOG)); |
||||
|
|
||||
|
/* Low frequency excess noise due to FBE */ |
||||
|
noizDens[B3SOIFDFBNOIZ] = 0.0; |
||||
|
|
||||
|
noizDens[B3SOIFDTOTNOIZ] = noizDens[B3SOIFDRDNOIZ] |
||||
|
+ noizDens[B3SOIFDRSNOIZ] |
||||
|
+ noizDens[B3SOIFDIDNOIZ] |
||||
|
+ noizDens[B3SOIFDFLNOIZ] |
||||
|
+ noizDens[B3SOIFDFBNOIZ]; |
||||
|
lnNdens[B3SOIFDTOTNOIZ] = |
||||
|
log(MAX(noizDens[B3SOIFDTOTNOIZ], N_MINLOG)); |
||||
|
|
||||
|
*OnDens += noizDens[B3SOIFDTOTNOIZ]; |
||||
|
|
||||
|
if (data->delFreq == 0.0) |
||||
|
{ /* if we haven't done any previous |
||||
|
integration, we need to initialize our |
||||
|
"history" variables. |
||||
|
*/ |
||||
|
|
||||
|
for (i = 0; i < B3SOIFDNSRCS; i++) |
||||
|
{ here->B3SOIFDnVar[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 < B3SOIFDNSRCS; i++) |
||||
|
{ here->B3SOIFDnVar[OUTNOIZ][i] = 0.0; |
||||
|
here->B3SOIFDnVar[INNOIZ][i] = 0.0; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
else |
||||
|
{ /* data->delFreq != 0.0, |
||||
|
we have to integrate. |
||||
|
*/ |
||||
|
for (i = 0; i < B3SOIFDNSRCS; i++) |
||||
|
{ if (i != B3SOIFDTOTNOIZ) |
||||
|
{ tempOnoise = Nintegrate(noizDens[i], |
||||
|
lnNdens[i], |
||||
|
here->B3SOIFDnVar[LNLSTDENS][i], |
||||
|
data); |
||||
|
tempInoise = Nintegrate(noizDens[i] |
||||
|
* data->GainSqInv, lnNdens[i] |
||||
|
+ data->lnGainInv, |
||||
|
here->B3SOIFDnVar[LNLSTDENS][i] |
||||
|
+ data->lnGainInv, data); |
||||
|
here->B3SOIFDnVar[LNLSTDENS][i] = |
||||
|
lnNdens[i]; |
||||
|
data->outNoiz += tempOnoise; |
||||
|
data->inNoise += tempInoise; |
||||
|
if (((NOISEAN*) |
||||
|
ckt->CKTcurJob)->NStpsSm != 0) |
||||
|
{ here->B3SOIFDnVar[OUTNOIZ][i] |
||||
|
+= tempOnoise; |
||||
|
here->B3SOIFDnVar[OUTNOIZ][B3SOIFDTOTNOIZ] |
||||
|
+= tempOnoise; |
||||
|
here->B3SOIFDnVar[INNOIZ][i] |
||||
|
+= tempInoise; |
||||
|
here->B3SOIFDnVar[INNOIZ][B3SOIFDTOTNOIZ] |
||||
|
+= tempInoise; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
if (data->prtSummary) |
||||
|
{ for (i = 0; i < B3SOIFDNSRCS; 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 < B3SOIFDNSRCS; i++) |
||||
|
{ data->outpVector[data->outNumber++] |
||||
|
= here->B3SOIFDnVar[OUTNOIZ][i]; |
||||
|
data->outpVector[data->outNumber++] |
||||
|
= here->B3SOIFDnVar[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,128 @@ |
|||||
|
/********** |
||||
|
Copyright 1999 Regents of the University of California. All rights reserved. |
||||
|
Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang |
||||
|
File: b3soifdpar.c 98/5/01 |
||||
|
**********/ |
||||
|
|
||||
|
|
||||
|
#include "ngspice.h" |
||||
|
#include <stdio.h> |
||||
|
#include "ifsim.h" |
||||
|
#include "b3soifddef.h" |
||||
|
#include "sperror.h" |
||||
|
#include "suffix.h" |
||||
|
|
||||
|
int |
||||
|
B3SOIFDparam(param,value,inst,select) |
||||
|
int param; |
||||
|
IFvalue *value; |
||||
|
GENinstance *inst; |
||||
|
IFvalue *select; |
||||
|
{ |
||||
|
B3SOIFDinstance *here = (B3SOIFDinstance*)inst; |
||||
|
switch(param) |
||||
|
{ case B3SOIFD_W: |
||||
|
here->B3SOIFDw = value->rValue; |
||||
|
here->B3SOIFDwGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIFD_L: |
||||
|
here->B3SOIFDl = value->rValue; |
||||
|
here->B3SOIFDlGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIFD_AS: |
||||
|
here->B3SOIFDsourceArea = value->rValue; |
||||
|
here->B3SOIFDsourceAreaGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIFD_AD: |
||||
|
here->B3SOIFDdrainArea = value->rValue; |
||||
|
here->B3SOIFDdrainAreaGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIFD_PS: |
||||
|
here->B3SOIFDsourcePerimeter = value->rValue; |
||||
|
here->B3SOIFDsourcePerimeterGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIFD_PD: |
||||
|
here->B3SOIFDdrainPerimeter = value->rValue; |
||||
|
here->B3SOIFDdrainPerimeterGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIFD_NRS: |
||||
|
here->B3SOIFDsourceSquares = value->rValue; |
||||
|
here->B3SOIFDsourceSquaresGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIFD_NRD: |
||||
|
here->B3SOIFDdrainSquares = value->rValue; |
||||
|
here->B3SOIFDdrainSquaresGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIFD_OFF: |
||||
|
here->B3SOIFDoff = value->iValue; |
||||
|
break; |
||||
|
case B3SOIFD_IC_VBS: |
||||
|
here->B3SOIFDicVBS = value->rValue; |
||||
|
here->B3SOIFDicVBSGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIFD_IC_VDS: |
||||
|
here->B3SOIFDicVDS = value->rValue; |
||||
|
here->B3SOIFDicVDSGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIFD_IC_VGS: |
||||
|
here->B3SOIFDicVGS = value->rValue; |
||||
|
here->B3SOIFDicVGSGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIFD_IC_VES: |
||||
|
here->B3SOIFDicVES = value->rValue; |
||||
|
here->B3SOIFDicVESGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIFD_IC_VPS: |
||||
|
here->B3SOIFDicVPS = value->rValue; |
||||
|
here->B3SOIFDicVPSGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIFD_BJTOFF: |
||||
|
here->B3SOIFDbjtoff = value->iValue; |
||||
|
here->B3SOIFDbjtoffGiven= TRUE; |
||||
|
break; |
||||
|
case B3SOIFD_DEBUG: |
||||
|
here->B3SOIFDdebugMod = value->iValue; |
||||
|
here->B3SOIFDdebugModGiven= TRUE; |
||||
|
break; |
||||
|
case B3SOIFD_RTH0: |
||||
|
here->B3SOIFDrth0= value->rValue; |
||||
|
here->B3SOIFDrth0Given = TRUE; |
||||
|
break; |
||||
|
case B3SOIFD_CTH0: |
||||
|
here->B3SOIFDcth0= value->rValue; |
||||
|
here->B3SOIFDcth0Given = TRUE; |
||||
|
break; |
||||
|
case B3SOIFD_NRB: |
||||
|
here->B3SOIFDbodySquares = value->rValue; |
||||
|
here->B3SOIFDbodySquaresGiven = TRUE; |
||||
|
break; |
||||
|
case B3SOIFD_IC: |
||||
|
switch(value->v.numValue){ |
||||
|
case 5: |
||||
|
here->B3SOIFDicVPS = *(value->v.vec.rVec+4); |
||||
|
here->B3SOIFDicVPSGiven = TRUE; |
||||
|
case 4: |
||||
|
here->B3SOIFDicVES = *(value->v.vec.rVec+3); |
||||
|
here->B3SOIFDicVESGiven = TRUE; |
||||
|
case 3: |
||||
|
here->B3SOIFDicVBS = *(value->v.vec.rVec+2); |
||||
|
here->B3SOIFDicVBSGiven = TRUE; |
||||
|
case 2: |
||||
|
here->B3SOIFDicVGS = *(value->v.vec.rVec+1); |
||||
|
here->B3SOIFDicVGSGiven = TRUE; |
||||
|
case 1: |
||||
|
here->B3SOIFDicVDS = *(value->v.vec.rVec); |
||||
|
here->B3SOIFDicVDSGiven = TRUE; |
||||
|
break; |
||||
|
default: |
||||
|
return(E_BADPARM); |
||||
|
} |
||||
|
break; |
||||
|
default: |
||||
|
return(E_BADPARM); |
||||
|
} |
||||
|
return(OK); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
@ -0,0 +1,152 @@ |
|||||
|
/********** |
||||
|
Copyright 1999 Regents of the University of California. All rights reserved. |
||||
|
Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang |
||||
|
File: b3soifdpzld.c 98/5/01 |
||||
|
**********/ |
||||
|
|
||||
|
|
||||
|
#include "ngspice.h" |
||||
|
#include <stdio.h> |
||||
|
#include "cktdefs.h" |
||||
|
#include "complex.h" |
||||
|
#include "sperror.h" |
||||
|
#include "b3soifddef.h" |
||||
|
#include "suffix.h" |
||||
|
|
||||
|
int |
||||
|
B3SOIFDpzLoad(inModel,ckt,s) |
||||
|
GENmodel *inModel; |
||||
|
CKTcircuit *ckt; |
||||
|
SPcomplex *s; |
||||
|
{ |
||||
|
B3SOIFDmodel *model = (B3SOIFDmodel*)inModel; |
||||
|
B3SOIFDinstance *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->B3SOIFDnextModel) |
||||
|
{ for (here = model->B3SOIFDinstances; here!= NULL; |
||||
|
here = here->B3SOIFDnextInstance) |
||||
|
{ |
||||
|
if (here->B3SOIFDmode >= 0) |
||||
|
{ Gm = here->B3SOIFDgm; |
||||
|
Gmbs = here->B3SOIFDgmbs; |
||||
|
FwdSum = Gm + Gmbs; |
||||
|
RevSum = 0.0; |
||||
|
cggb = here->B3SOIFDcggb; |
||||
|
cgsb = here->B3SOIFDcgsb; |
||||
|
cgdb = here->B3SOIFDcgdb; |
||||
|
|
||||
|
cbgb = here->B3SOIFDcbgb; |
||||
|
cbsb = here->B3SOIFDcbsb; |
||||
|
cbdb = here->B3SOIFDcbdb; |
||||
|
|
||||
|
cdgb = here->B3SOIFDcdgb; |
||||
|
cdsb = here->B3SOIFDcdsb; |
||||
|
cddb = here->B3SOIFDcddb; |
||||
|
} |
||||
|
else |
||||
|
{ Gm = -here->B3SOIFDgm; |
||||
|
Gmbs = -here->B3SOIFDgmbs; |
||||
|
FwdSum = 0.0; |
||||
|
RevSum = -Gm - Gmbs; |
||||
|
cggb = here->B3SOIFDcggb; |
||||
|
cgsb = here->B3SOIFDcgdb; |
||||
|
cgdb = here->B3SOIFDcgsb; |
||||
|
|
||||
|
cbgb = here->B3SOIFDcbgb; |
||||
|
cbsb = here->B3SOIFDcbdb; |
||||
|
cbdb = here->B3SOIFDcbsb; |
||||
|
|
||||
|
cdgb = -(here->B3SOIFDcdgb + cggb + cbgb); |
||||
|
cdsb = -(here->B3SOIFDcddb + cgsb + cbsb); |
||||
|
cddb = -(here->B3SOIFDcdsb + cgdb + cbdb); |
||||
|
} |
||||
|
gdpr=here->B3SOIFDdrainConductance; |
||||
|
gspr=here->B3SOIFDsourceConductance; |
||||
|
gds= here->B3SOIFDgds; |
||||
|
gbd= here->B3SOIFDgjdb; |
||||
|
gbs= here->B3SOIFDgjsb; |
||||
|
#ifdef BULKCODE |
||||
|
capbd= here->B3SOIFDcapbd; |
||||
|
capbs= here->B3SOIFDcapbs; |
||||
|
#endif |
||||
|
GSoverlapCap = here->B3SOIFDcgso; |
||||
|
GDoverlapCap = here->B3SOIFDcgdo; |
||||
|
#ifdef BULKCODE |
||||
|
GBoverlapCap = here->pParam->B3SOIFDcgbo; |
||||
|
#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->B3SOIFDGgPtr ) += xcggb * s->real; |
||||
|
*(here->B3SOIFDGgPtr +1) += xcggb * s->imag; |
||||
|
*(here->B3SOIFDBbPtr ) += (-xcbgb-xcbdb-xcbsb) * s->real; |
||||
|
*(here->B3SOIFDBbPtr +1) += (-xcbgb-xcbdb-xcbsb) * s->imag; |
||||
|
*(here->B3SOIFDDPdpPtr ) += xcddb * s->real; |
||||
|
*(here->B3SOIFDDPdpPtr +1) += xcddb * s->imag; |
||||
|
*(here->B3SOIFDSPspPtr ) += xcssb * s->real; |
||||
|
*(here->B3SOIFDSPspPtr +1) += xcssb * s->imag; |
||||
|
*(here->B3SOIFDGbPtr ) += (-xcggb-xcgdb-xcgsb) * s->real; |
||||
|
*(here->B3SOIFDGbPtr +1) += (-xcggb-xcgdb-xcgsb) * s->imag; |
||||
|
*(here->B3SOIFDGdpPtr ) += xcgdb * s->real; |
||||
|
*(here->B3SOIFDGdpPtr +1) += xcgdb * s->imag; |
||||
|
*(here->B3SOIFDGspPtr ) += xcgsb * s->real; |
||||
|
*(here->B3SOIFDGspPtr +1) += xcgsb * s->imag; |
||||
|
*(here->B3SOIFDBgPtr ) += xcbgb * s->real; |
||||
|
*(here->B3SOIFDBgPtr +1) += xcbgb * s->imag; |
||||
|
*(here->B3SOIFDBdpPtr ) += xcbdb * s->real; |
||||
|
*(here->B3SOIFDBdpPtr +1) += xcbdb * s->imag; |
||||
|
*(here->B3SOIFDBspPtr ) += xcbsb * s->real; |
||||
|
*(here->B3SOIFDBspPtr +1) += xcbsb * s->imag; |
||||
|
*(here->B3SOIFDDPgPtr ) += xcdgb * s->real; |
||||
|
*(here->B3SOIFDDPgPtr +1) += xcdgb * s->imag; |
||||
|
*(here->B3SOIFDDPbPtr ) += (-xcdgb-xcddb-xcdsb) * s->real; |
||||
|
*(here->B3SOIFDDPbPtr +1) += (-xcdgb-xcddb-xcdsb) * s->imag; |
||||
|
*(here->B3SOIFDDPspPtr ) += xcdsb * s->real; |
||||
|
*(here->B3SOIFDDPspPtr +1) += xcdsb * s->imag; |
||||
|
*(here->B3SOIFDSPgPtr ) += xcsgb * s->real; |
||||
|
*(here->B3SOIFDSPgPtr +1) += xcsgb * s->imag; |
||||
|
*(here->B3SOIFDSPbPtr ) += (-xcsgb-xcsdb-xcssb) * s->real; |
||||
|
*(here->B3SOIFDSPbPtr +1) += (-xcsgb-xcsdb-xcssb) * s->imag; |
||||
|
*(here->B3SOIFDSPdpPtr ) += xcsdb * s->real; |
||||
|
*(here->B3SOIFDSPdpPtr +1) += xcsdb * s->imag; |
||||
|
*(here->B3SOIFDDdPtr) += gdpr; |
||||
|
*(here->B3SOIFDSsPtr) += gspr; |
||||
|
*(here->B3SOIFDBbPtr) += gbd+gbs; |
||||
|
*(here->B3SOIFDDPdpPtr) += gdpr+gds+gbd+RevSum; |
||||
|
*(here->B3SOIFDSPspPtr) += gspr+gds+gbs+FwdSum; |
||||
|
*(here->B3SOIFDDdpPtr) -= gdpr; |
||||
|
*(here->B3SOIFDSspPtr) -= gspr; |
||||
|
*(here->B3SOIFDBdpPtr) -= gbd; |
||||
|
*(here->B3SOIFDBspPtr) -= gbs; |
||||
|
*(here->B3SOIFDDPdPtr) -= gdpr; |
||||
|
*(here->B3SOIFDDPgPtr) += Gm; |
||||
|
*(here->B3SOIFDDPbPtr) -= gbd - Gmbs; |
||||
|
*(here->B3SOIFDDPspPtr) -= gds + FwdSum; |
||||
|
*(here->B3SOIFDSPgPtr) -= Gm; |
||||
|
*(here->B3SOIFDSPsPtr) -= gspr; |
||||
|
*(here->B3SOIFDSPbPtr) -= gbs + Gmbs; |
||||
|
*(here->B3SOIFDSPdpPtr) -= gds + RevSum; |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
return(OK); |
||||
|
} |
||||
|
|
||||
|
|
||||
1341
src/spicelib/devices/bsim3soi_fd/b3soifdset.c
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,815 @@ |
|||||
|
/********** |
||||
|
Copyright 1999 Regents of the University of California. All rights reserved. |
||||
|
Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang |
||||
|
File: b3soifdtemp.c 98/5/01 |
||||
|
Modified by Pin Su, Wei Jin 99/9/27 |
||||
|
**********/ |
||||
|
|
||||
|
/* Lmin, Lmax, Wmin, Wmax */ |
||||
|
|
||||
|
#include "ngspice.h" |
||||
|
#include <stdio.h> |
||||
|
#include <math.h> |
||||
|
#include "smpdefs.h" |
||||
|
#include "cktdefs.h" |
||||
|
#include "b3soifddef.h" |
||||
|
#include "const.h" |
||||
|
#include "sperror.h" |
||||
|
#include "suffix.h" |
||||
|
|
||||
|
#define Kb 1.3806226e-23 |
||||
|
#define KboQ 8.617087e-5 /* Kb / q where q = 1.60219e-19 */ |
||||
|
#define EPSOX 3.453133e-11 |
||||
|
#define EPSSI 1.03594e-10 |
||||
|
#define PI 3.141592654 |
||||
|
#define MAX_EXP 5.834617425e14 |
||||
|
#define MIN_EXP 1.713908431e-15 |
||||
|
#define EXP_THRESHOLD 34.0 |
||||
|
#define Charge_q 1.60219e-19 |
||||
|
|
||||
|
|
||||
|
/* ARGSUSED */ |
||||
|
int |
||||
|
B3SOIFDtemp(inModel,ckt) |
||||
|
GENmodel *inModel; |
||||
|
CKTcircuit *ckt; |
||||
|
{ |
||||
|
B3SOIFDmodel *model = (B3SOIFDmodel*) inModel; |
||||
|
B3SOIFDinstance *here; |
||||
|
struct b3soifdSizeDependParam *pSizeDependParamKnot, *pLastKnot, *pParam; |
||||
|
double tmp, tmp1, tmp2, Eg, Eg0, ni, T0, T1, T2, T3, T4, T5, T6, Ldrn, Wdrn; |
||||
|
double Temp, TRatio, Inv_L, Inv_W, Inv_LW, Dw, Dl, Vtm0, Tnom; |
||||
|
double SDphi, SDgamma; |
||||
|
int Size_Not_Found; |
||||
|
|
||||
|
/* loop through all the B3SOIFD device models */ |
||||
|
for (; model != NULL; model = model->B3SOIFDnextModel) |
||||
|
{ Temp = ckt->CKTtemp; |
||||
|
if (model->B3SOIFDGatesidewallJctPotential < 0.1) |
||||
|
model->B3SOIFDGatesidewallJctPotential = 0.1; |
||||
|
model->pSizeDependParamKnot = NULL; |
||||
|
pLastKnot = NULL; |
||||
|
|
||||
|
Tnom = model->B3SOIFDtnom; |
||||
|
TRatio = Temp / Tnom; |
||||
|
|
||||
|
model->B3SOIFDvcrit = CONSTvt0 * log(CONSTvt0 / (CONSTroot2 * 1.0e-14)); |
||||
|
model->B3SOIFDfactor1 = sqrt(EPSSI / EPSOX * model->B3SOIFDtox); |
||||
|
|
||||
|
Vtm0 = KboQ * Tnom; |
||||
|
Eg0 = 1.16 - 7.02e-4 * Tnom * Tnom / (Tnom + 1108.0); |
||||
|
model->B3SOIFDeg0 = Eg0; |
||||
|
model->B3SOIFDvtm = KboQ * Temp; |
||||
|
|
||||
|
Eg = 1.16 - 7.02e-4 * Temp * Temp / (Temp + 1108.0); |
||||
|
/* ni is in cm^-3 */ |
||||
|
ni = 1.45e10 * (Temp / 300.15) * sqrt(Temp / 300.15) |
||||
|
* exp(21.5565981 - Eg / (2.0 * model->B3SOIFDvtm)); |
||||
|
|
||||
|
|
||||
|
/* loop through all the instances of the model */ |
||||
|
/* MCJ: Length and Width not initialized */ |
||||
|
for (here = model->B3SOIFDinstances; here != NULL; |
||||
|
here = here->B3SOIFDnextInstance) |
||||
|
{ |
||||
|
here->B3SOIFDrbodyext = here->B3SOIFDbodySquares * |
||||
|
model->B3SOIFDrbsh; |
||||
|
pSizeDependParamKnot = model->pSizeDependParamKnot; |
||||
|
Size_Not_Found = 1; |
||||
|
while ((pSizeDependParamKnot != NULL) && Size_Not_Found) |
||||
|
{ if ((here->B3SOIFDl == pSizeDependParamKnot->Length) |
||||
|
&& (here->B3SOIFDw == pSizeDependParamKnot->Width) |
||||
|
&& (here->B3SOIFDrth0 == pSizeDependParamKnot->Rth0) |
||||
|
&& (here->B3SOIFDcth0 == pSizeDependParamKnot->Cth0)) |
||||
|
{ Size_Not_Found = 0; |
||||
|
here->pParam = pSizeDependParamKnot; |
||||
|
} |
||||
|
else |
||||
|
{ pLastKnot = pSizeDependParamKnot; |
||||
|
pSizeDependParamKnot = pSizeDependParamKnot->pNext; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
if (Size_Not_Found) |
||||
|
{ pParam = (struct b3soifdSizeDependParam *)malloc( |
||||
|
sizeof(struct b3soifdSizeDependParam)); |
||||
|
if (pLastKnot == NULL) |
||||
|
model->pSizeDependParamKnot = pParam; |
||||
|
else |
||||
|
pLastKnot->pNext = pParam; |
||||
|
pParam->pNext = NULL; |
||||
|
here->pParam = pParam; |
||||
|
|
||||
|
Ldrn = here->B3SOIFDl; |
||||
|
Wdrn = here->B3SOIFDw; |
||||
|
pParam->Length = Ldrn; |
||||
|
pParam->Width = Wdrn; |
||||
|
pParam->Rth0 = here->B3SOIFDrth0; |
||||
|
pParam->Cth0 = here->B3SOIFDcth0; |
||||
|
|
||||
|
T0 = pow(Ldrn, model->B3SOIFDLln); |
||||
|
T1 = pow(Wdrn, model->B3SOIFDLwn); |
||||
|
tmp1 = model->B3SOIFDLl / T0 + model->B3SOIFDLw / T1 |
||||
|
+ model->B3SOIFDLwl / (T0 * T1); |
||||
|
pParam->B3SOIFDdl = model->B3SOIFDLint + tmp1; |
||||
|
pParam->B3SOIFDdlc = model->B3SOIFDdlc + tmp1; |
||||
|
|
||||
|
T2 = pow(Ldrn, model->B3SOIFDWln); |
||||
|
T3 = pow(Wdrn, model->B3SOIFDWwn); |
||||
|
tmp2 = model->B3SOIFDWl / T2 + model->B3SOIFDWw / T3 |
||||
|
+ model->B3SOIFDWwl / (T2 * T3); |
||||
|
pParam->B3SOIFDdw = model->B3SOIFDWint + tmp2; |
||||
|
pParam->B3SOIFDdwc = model->B3SOIFDdwc + tmp2; |
||||
|
|
||||
|
pParam->B3SOIFDleff = here->B3SOIFDl - 2.0 * pParam->B3SOIFDdl; |
||||
|
if (pParam->B3SOIFDleff <= 0.0) |
||||
|
{ IFuid namarray[2]; |
||||
|
namarray[0] = model->B3SOIFDmodName; |
||||
|
namarray[1] = here->B3SOIFDname; |
||||
|
(*(SPfrontEnd->IFerror))(ERR_FATAL, |
||||
|
"B3SOIFD: mosfet %s, model %s: Effective channel length <= 0", |
||||
|
namarray); |
||||
|
return(E_BADPARM); |
||||
|
} |
||||
|
|
||||
|
pParam->B3SOIFDweff = here->B3SOIFDw - 2.0 * pParam->B3SOIFDdw; |
||||
|
if (pParam->B3SOIFDweff <= 0.0) |
||||
|
{ IFuid namarray[2]; |
||||
|
namarray[0] = model->B3SOIFDmodName; |
||||
|
namarray[1] = here->B3SOIFDname; |
||||
|
(*(SPfrontEnd->IFerror))(ERR_FATAL, |
||||
|
"B3SOIFD: mosfet %s, model %s: Effective channel width <= 0", |
||||
|
namarray); |
||||
|
return(E_BADPARM); |
||||
|
} |
||||
|
|
||||
|
pParam->B3SOIFDleffCV = here->B3SOIFDl - 2.0 * pParam->B3SOIFDdlc; |
||||
|
if (pParam->B3SOIFDleffCV <= 0.0) |
||||
|
{ IFuid namarray[2]; |
||||
|
namarray[0] = model->B3SOIFDmodName; |
||||
|
namarray[1] = here->B3SOIFDname; |
||||
|
(*(SPfrontEnd->IFerror))(ERR_FATAL, |
||||
|
"B3SOIFD: mosfet %s, model %s: Effective channel length for C-V <= 0", |
||||
|
namarray); |
||||
|
return(E_BADPARM); |
||||
|
} |
||||
|
|
||||
|
pParam->B3SOIFDweffCV = here->B3SOIFDw - 2.0 * pParam->B3SOIFDdwc; |
||||
|
if (pParam->B3SOIFDweffCV <= 0.0) |
||||
|
{ IFuid namarray[2]; |
||||
|
namarray[0] = model->B3SOIFDmodName; |
||||
|
namarray[1] = here->B3SOIFDname; |
||||
|
(*(SPfrontEnd->IFerror))(ERR_FATAL, |
||||
|
"B3SOIFD: mosfet %s, model %s: Effective channel width for C-V <= 0", |
||||
|
namarray); |
||||
|
return(E_BADPARM); |
||||
|
} |
||||
|
|
||||
|
/* Not binned - START */ |
||||
|
pParam->B3SOIFDat = model->B3SOIFDat; |
||||
|
pParam->B3SOIFDgamma1 = model->B3SOIFDgamma1; |
||||
|
pParam->B3SOIFDgamma2 = model->B3SOIFDgamma2; |
||||
|
pParam->B3SOIFDvbx = model->B3SOIFDvbx; |
||||
|
pParam->B3SOIFDvbm = model->B3SOIFDvbm; |
||||
|
pParam->B3SOIFDxt = model->B3SOIFDxt; |
||||
|
pParam->B3SOIFDkt1 = model->B3SOIFDkt1; |
||||
|
pParam->B3SOIFDkt1l = model->B3SOIFDkt1l; |
||||
|
pParam->B3SOIFDkt2 = model->B3SOIFDkt2; |
||||
|
pParam->B3SOIFDua1 = model->B3SOIFDua1; |
||||
|
pParam->B3SOIFDub1 = model->B3SOIFDub1; |
||||
|
pParam->B3SOIFDuc1 = model->B3SOIFDuc1; |
||||
|
pParam->B3SOIFDute = model->B3SOIFDute; |
||||
|
pParam->B3SOIFDprt = model->B3SOIFDprt; |
||||
|
/* Not binned - END */ |
||||
|
|
||||
|
/* CV model */ |
||||
|
pParam->B3SOIFDcgsl = model->B3SOIFDcgsl; |
||||
|
pParam->B3SOIFDcgdl = model->B3SOIFDcgdl; |
||||
|
pParam->B3SOIFDckappa = model->B3SOIFDckappa; |
||||
|
pParam->B3SOIFDcf = model->B3SOIFDcf; |
||||
|
pParam->B3SOIFDclc = model->B3SOIFDclc; |
||||
|
pParam->B3SOIFDcle = model->B3SOIFDcle; |
||||
|
|
||||
|
pParam->B3SOIFDabulkCVfactor = pow(1.0+(pParam->B3SOIFDclc |
||||
|
/ pParam->B3SOIFDleff), |
||||
|
pParam->B3SOIFDcle); |
||||
|
|
||||
|
/* Added for binning - START */ |
||||
|
if (model->B3SOIFDbinUnit == 1) |
||||
|
{ Inv_L = 1.0e-6 / pParam->B3SOIFDleff; |
||||
|
Inv_W = 1.0e-6 / pParam->B3SOIFDweff; |
||||
|
Inv_LW = 1.0e-12 / (pParam->B3SOIFDleff |
||||
|
* pParam->B3SOIFDweff); |
||||
|
} |
||||
|
else |
||||
|
{ Inv_L = 1.0 / pParam->B3SOIFDleff; |
||||
|
Inv_W = 1.0 / pParam->B3SOIFDweff; |
||||
|
Inv_LW = 1.0 / (pParam->B3SOIFDleff |
||||
|
* pParam->B3SOIFDweff); |
||||
|
} |
||||
|
pParam->B3SOIFDnpeak = model->B3SOIFDnpeak |
||||
|
+ model->B3SOIFDlnpeak * Inv_L |
||||
|
+ model->B3SOIFDwnpeak * Inv_W |
||||
|
+ model->B3SOIFDpnpeak * Inv_LW; |
||||
|
pParam->B3SOIFDnsub = model->B3SOIFDnsub |
||||
|
+ model->B3SOIFDlnsub * Inv_L |
||||
|
+ model->B3SOIFDwnsub * Inv_W |
||||
|
+ model->B3SOIFDpnsub * Inv_LW; |
||||
|
pParam->B3SOIFDngate = model->B3SOIFDngate |
||||
|
+ model->B3SOIFDlngate * Inv_L |
||||
|
+ model->B3SOIFDwngate * Inv_W |
||||
|
+ model->B3SOIFDpngate * Inv_LW; |
||||
|
pParam->B3SOIFDvth0 = model->B3SOIFDvth0 |
||||
|
+ model->B3SOIFDlvth0 * Inv_L |
||||
|
+ model->B3SOIFDwvth0 * Inv_W |
||||
|
+ model->B3SOIFDpvth0 * Inv_LW; |
||||
|
pParam->B3SOIFDk1 = model->B3SOIFDk1 |
||||
|
+ model->B3SOIFDlk1 * Inv_L |
||||
|
+ model->B3SOIFDwk1 * Inv_W |
||||
|
+ model->B3SOIFDpk1 * Inv_LW; |
||||
|
pParam->B3SOIFDk2 = model->B3SOIFDk2 |
||||
|
+ model->B3SOIFDlk2 * Inv_L |
||||
|
+ model->B3SOIFDwk2 * Inv_W |
||||
|
+ model->B3SOIFDpk2 * Inv_LW; |
||||
|
pParam->B3SOIFDk3 = model->B3SOIFDk3 |
||||
|
+ model->B3SOIFDlk3 * Inv_L |
||||
|
+ model->B3SOIFDwk3 * Inv_W |
||||
|
+ model->B3SOIFDpk3 * Inv_LW; |
||||
|
pParam->B3SOIFDk3b = model->B3SOIFDk3b |
||||
|
+ model->B3SOIFDlk3b * Inv_L |
||||
|
+ model->B3SOIFDwk3b * Inv_W |
||||
|
+ model->B3SOIFDpk3b * Inv_LW; |
||||
|
pParam->B3SOIFDvbsa = model->B3SOIFDvbsa |
||||
|
+ model->B3SOIFDlvbsa * Inv_L |
||||
|
+ model->B3SOIFDwvbsa * Inv_W |
||||
|
+ model->B3SOIFDpvbsa * Inv_LW; |
||||
|
pParam->B3SOIFDdelp = model->B3SOIFDdelp |
||||
|
+ model->B3SOIFDldelp * Inv_L |
||||
|
+ model->B3SOIFDwdelp * Inv_W |
||||
|
+ model->B3SOIFDpdelp * Inv_LW; |
||||
|
pParam->B3SOIFDkb1 = model->B3SOIFDkb1 |
||||
|
+ model->B3SOIFDlkb1 * Inv_L |
||||
|
+ model->B3SOIFDwkb1 * Inv_W |
||||
|
+ model->B3SOIFDpkb1 * Inv_LW; |
||||
|
pParam->B3SOIFDkb3 = model->B3SOIFDkb3 |
||||
|
+ model->B3SOIFDlkb3 * Inv_L |
||||
|
+ model->B3SOIFDwkb3 * Inv_W |
||||
|
+ model->B3SOIFDpkb3 * Inv_LW; |
||||
|
pParam->B3SOIFDdvbd0 = model->B3SOIFDdvbd0 |
||||
|
+ model->B3SOIFDldvbd0 * Inv_L |
||||
|
+ model->B3SOIFDwdvbd0 * Inv_W |
||||
|
+ model->B3SOIFDpdvbd0 * Inv_LW; |
||||
|
pParam->B3SOIFDdvbd1 = model->B3SOIFDdvbd1 |
||||
|
+ model->B3SOIFDldvbd1 * Inv_L |
||||
|
+ model->B3SOIFDwdvbd1 * Inv_W |
||||
|
+ model->B3SOIFDpdvbd1 * Inv_LW; |
||||
|
pParam->B3SOIFDw0 = model->B3SOIFDw0 |
||||
|
+ model->B3SOIFDlw0 * Inv_L |
||||
|
+ model->B3SOIFDww0 * Inv_W |
||||
|
+ model->B3SOIFDpw0 * Inv_LW; |
||||
|
pParam->B3SOIFDnlx = model->B3SOIFDnlx |
||||
|
+ model->B3SOIFDlnlx * Inv_L |
||||
|
+ model->B3SOIFDwnlx * Inv_W |
||||
|
+ model->B3SOIFDpnlx * Inv_LW; |
||||
|
pParam->B3SOIFDdvt0 = model->B3SOIFDdvt0 |
||||
|
+ model->B3SOIFDldvt0 * Inv_L |
||||
|
+ model->B3SOIFDwdvt0 * Inv_W |
||||
|
+ model->B3SOIFDpdvt0 * Inv_LW; |
||||
|
pParam->B3SOIFDdvt1 = model->B3SOIFDdvt1 |
||||
|
+ model->B3SOIFDldvt1 * Inv_L |
||||
|
+ model->B3SOIFDwdvt1 * Inv_W |
||||
|
+ model->B3SOIFDpdvt1 * Inv_LW; |
||||
|
pParam->B3SOIFDdvt2 = model->B3SOIFDdvt2 |
||||
|
+ model->B3SOIFDldvt2 * Inv_L |
||||
|
+ model->B3SOIFDwdvt2 * Inv_W |
||||
|
+ model->B3SOIFDpdvt2 * Inv_LW; |
||||
|
pParam->B3SOIFDdvt0w = model->B3SOIFDdvt0w |
||||
|
+ model->B3SOIFDldvt0w * Inv_L |
||||
|
+ model->B3SOIFDwdvt0w * Inv_W |
||||
|
+ model->B3SOIFDpdvt0w * Inv_LW; |
||||
|
pParam->B3SOIFDdvt1w = model->B3SOIFDdvt1w |
||||
|
+ model->B3SOIFDldvt1w * Inv_L |
||||
|
+ model->B3SOIFDwdvt1w * Inv_W |
||||
|
+ model->B3SOIFDpdvt1w * Inv_LW; |
||||
|
pParam->B3SOIFDdvt2w = model->B3SOIFDdvt2w |
||||
|
+ model->B3SOIFDldvt2w * Inv_L |
||||
|
+ model->B3SOIFDwdvt2w * Inv_W |
||||
|
+ model->B3SOIFDpdvt2w * Inv_LW; |
||||
|
pParam->B3SOIFDu0 = model->B3SOIFDu0 |
||||
|
+ model->B3SOIFDlu0 * Inv_L |
||||
|
+ model->B3SOIFDwu0 * Inv_W |
||||
|
+ model->B3SOIFDpu0 * Inv_LW; |
||||
|
pParam->B3SOIFDua = model->B3SOIFDua |
||||
|
+ model->B3SOIFDlua * Inv_L |
||||
|
+ model->B3SOIFDwua * Inv_W |
||||
|
+ model->B3SOIFDpua * Inv_LW; |
||||
|
pParam->B3SOIFDub = model->B3SOIFDub |
||||
|
+ model->B3SOIFDlub * Inv_L |
||||
|
+ model->B3SOIFDwub * Inv_W |
||||
|
+ model->B3SOIFDpub * Inv_LW; |
||||
|
pParam->B3SOIFDuc = model->B3SOIFDuc |
||||
|
+ model->B3SOIFDluc * Inv_L |
||||
|
+ model->B3SOIFDwuc * Inv_W |
||||
|
+ model->B3SOIFDpuc * Inv_LW; |
||||
|
pParam->B3SOIFDvsat = model->B3SOIFDvsat |
||||
|
+ model->B3SOIFDlvsat * Inv_L |
||||
|
+ model->B3SOIFDwvsat * Inv_W |
||||
|
+ model->B3SOIFDpvsat * Inv_LW; |
||||
|
pParam->B3SOIFDa0 = model->B3SOIFDa0 |
||||
|
+ model->B3SOIFDla0 * Inv_L |
||||
|
+ model->B3SOIFDwa0 * Inv_W |
||||
|
+ model->B3SOIFDpa0 * Inv_LW; |
||||
|
pParam->B3SOIFDags = model->B3SOIFDags |
||||
|
+ model->B3SOIFDlags * Inv_L |
||||
|
+ model->B3SOIFDwags * Inv_W |
||||
|
+ model->B3SOIFDpags * Inv_LW; |
||||
|
pParam->B3SOIFDb0 = model->B3SOIFDb0 |
||||
|
+ model->B3SOIFDlb0 * Inv_L |
||||
|
+ model->B3SOIFDwb0 * Inv_W |
||||
|
+ model->B3SOIFDpb0 * Inv_LW; |
||||
|
pParam->B3SOIFDb1 = model->B3SOIFDb1 |
||||
|
+ model->B3SOIFDlb1 * Inv_L |
||||
|
+ model->B3SOIFDwb1 * Inv_W |
||||
|
+ model->B3SOIFDpb1 * Inv_LW; |
||||
|
pParam->B3SOIFDketa = model->B3SOIFDketa |
||||
|
+ model->B3SOIFDlketa * Inv_L |
||||
|
+ model->B3SOIFDwketa * Inv_W |
||||
|
+ model->B3SOIFDpketa * Inv_LW; |
||||
|
pParam->B3SOIFDabp = model->B3SOIFDabp |
||||
|
+ model->B3SOIFDlabp * Inv_L |
||||
|
+ model->B3SOIFDwabp * Inv_W |
||||
|
+ model->B3SOIFDpabp * Inv_LW; |
||||
|
pParam->B3SOIFDmxc = model->B3SOIFDmxc |
||||
|
+ model->B3SOIFDlmxc * Inv_L |
||||
|
+ model->B3SOIFDwmxc * Inv_W |
||||
|
+ model->B3SOIFDpmxc * Inv_LW; |
||||
|
pParam->B3SOIFDadice0 = model->B3SOIFDadice0 |
||||
|
+ model->B3SOIFDladice0 * Inv_L |
||||
|
+ model->B3SOIFDwadice0 * Inv_W |
||||
|
+ model->B3SOIFDpadice0 * Inv_LW; |
||||
|
pParam->B3SOIFDa1 = model->B3SOIFDa1 |
||||
|
+ model->B3SOIFDla1 * Inv_L |
||||
|
+ model->B3SOIFDwa1 * Inv_W |
||||
|
+ model->B3SOIFDpa1 * Inv_LW; |
||||
|
pParam->B3SOIFDa2 = model->B3SOIFDa2 |
||||
|
+ model->B3SOIFDla2 * Inv_L |
||||
|
+ model->B3SOIFDwa2 * Inv_W |
||||
|
+ model->B3SOIFDpa2 * Inv_LW; |
||||
|
pParam->B3SOIFDrdsw = model->B3SOIFDrdsw |
||||
|
+ model->B3SOIFDlrdsw * Inv_L |
||||
|
+ model->B3SOIFDwrdsw * Inv_W |
||||
|
+ model->B3SOIFDprdsw * Inv_LW; |
||||
|
pParam->B3SOIFDprwb = model->B3SOIFDprwb |
||||
|
+ model->B3SOIFDlprwb * Inv_L |
||||
|
+ model->B3SOIFDwprwb * Inv_W |
||||
|
+ model->B3SOIFDpprwb * Inv_LW; |
||||
|
pParam->B3SOIFDprwg = model->B3SOIFDprwg |
||||
|
+ model->B3SOIFDlprwg * Inv_L |
||||
|
+ model->B3SOIFDwprwg * Inv_W |
||||
|
+ model->B3SOIFDpprwg * Inv_LW; |
||||
|
pParam->B3SOIFDwr = model->B3SOIFDwr |
||||
|
+ model->B3SOIFDlwr * Inv_L |
||||
|
+ model->B3SOIFDwwr * Inv_W |
||||
|
+ model->B3SOIFDpwr * Inv_LW; |
||||
|
pParam->B3SOIFDnfactor = model->B3SOIFDnfactor |
||||
|
+ model->B3SOIFDlnfactor * Inv_L |
||||
|
+ model->B3SOIFDwnfactor * Inv_W |
||||
|
+ model->B3SOIFDpnfactor * Inv_LW; |
||||
|
pParam->B3SOIFDdwg = model->B3SOIFDdwg |
||||
|
+ model->B3SOIFDldwg * Inv_L |
||||
|
+ model->B3SOIFDwdwg * Inv_W |
||||
|
+ model->B3SOIFDpdwg * Inv_LW; |
||||
|
pParam->B3SOIFDdwb = model->B3SOIFDdwb |
||||
|
+ model->B3SOIFDldwb * Inv_L |
||||
|
+ model->B3SOIFDwdwb * Inv_W |
||||
|
+ model->B3SOIFDpdwb * Inv_LW; |
||||
|
pParam->B3SOIFDvoff = model->B3SOIFDvoff |
||||
|
+ model->B3SOIFDlvoff * Inv_L |
||||
|
+ model->B3SOIFDwvoff * Inv_W |
||||
|
+ model->B3SOIFDpvoff * Inv_LW; |
||||
|
pParam->B3SOIFDeta0 = model->B3SOIFDeta0 |
||||
|
+ model->B3SOIFDleta0 * Inv_L |
||||
|
+ model->B3SOIFDweta0 * Inv_W |
||||
|
+ model->B3SOIFDpeta0 * Inv_LW; |
||||
|
pParam->B3SOIFDetab = model->B3SOIFDetab |
||||
|
+ model->B3SOIFDletab * Inv_L |
||||
|
+ model->B3SOIFDwetab * Inv_W |
||||
|
+ model->B3SOIFDpetab * Inv_LW; |
||||
|
pParam->B3SOIFDdsub = model->B3SOIFDdsub |
||||
|
+ model->B3SOIFDldsub * Inv_L |
||||
|
+ model->B3SOIFDwdsub * Inv_W |
||||
|
+ model->B3SOIFDpdsub * Inv_LW; |
||||
|
pParam->B3SOIFDcit = model->B3SOIFDcit |
||||
|
+ model->B3SOIFDlcit * Inv_L |
||||
|
+ model->B3SOIFDwcit * Inv_W |
||||
|
+ model->B3SOIFDpcit * Inv_LW; |
||||
|
pParam->B3SOIFDcdsc = model->B3SOIFDcdsc |
||||
|
+ model->B3SOIFDlcdsc * Inv_L |
||||
|
+ model->B3SOIFDwcdsc * Inv_W |
||||
|
+ model->B3SOIFDpcdsc * Inv_LW; |
||||
|
pParam->B3SOIFDcdscb = model->B3SOIFDcdscb |
||||
|
+ model->B3SOIFDlcdscb * Inv_L |
||||
|
+ model->B3SOIFDwcdscb * Inv_W |
||||
|
+ model->B3SOIFDpcdscb * Inv_LW; |
||||
|
pParam->B3SOIFDcdscd = model->B3SOIFDcdscd |
||||
|
+ model->B3SOIFDlcdscd * Inv_L |
||||
|
+ model->B3SOIFDwcdscd * Inv_W |
||||
|
+ model->B3SOIFDpcdscd * Inv_LW; |
||||
|
pParam->B3SOIFDpclm = model->B3SOIFDpclm |
||||
|
+ model->B3SOIFDlpclm * Inv_L |
||||
|
+ model->B3SOIFDwpclm * Inv_W |
||||
|
+ model->B3SOIFDppclm * Inv_LW; |
||||
|
pParam->B3SOIFDpdibl1 = model->B3SOIFDpdibl1 |
||||
|
+ model->B3SOIFDlpdibl1 * Inv_L |
||||
|
+ model->B3SOIFDwpdibl1 * Inv_W |
||||
|
+ model->B3SOIFDppdibl1 * Inv_LW; |
||||
|
pParam->B3SOIFDpdibl2 = model->B3SOIFDpdibl2 |
||||
|
+ model->B3SOIFDlpdibl2 * Inv_L |
||||
|
+ model->B3SOIFDwpdibl2 * Inv_W |
||||
|
+ model->B3SOIFDppdibl2 * Inv_LW; |
||||
|
pParam->B3SOIFDpdiblb = model->B3SOIFDpdiblb |
||||
|
+ model->B3SOIFDlpdiblb * Inv_L |
||||
|
+ model->B3SOIFDwpdiblb * Inv_W |
||||
|
+ model->B3SOIFDppdiblb * Inv_LW; |
||||
|
pParam->B3SOIFDdrout = model->B3SOIFDdrout |
||||
|
+ model->B3SOIFDldrout * Inv_L |
||||
|
+ model->B3SOIFDwdrout * Inv_W |
||||
|
+ model->B3SOIFDpdrout * Inv_LW; |
||||
|
pParam->B3SOIFDpvag = model->B3SOIFDpvag |
||||
|
+ model->B3SOIFDlpvag * Inv_L |
||||
|
+ model->B3SOIFDwpvag * Inv_W |
||||
|
+ model->B3SOIFDppvag * Inv_LW; |
||||
|
pParam->B3SOIFDdelta = model->B3SOIFDdelta |
||||
|
+ model->B3SOIFDldelta * Inv_L |
||||
|
+ model->B3SOIFDwdelta * Inv_W |
||||
|
+ model->B3SOIFDpdelta * Inv_LW; |
||||
|
pParam->B3SOIFDaii = model->B3SOIFDaii |
||||
|
+ model->B3SOIFDlaii * Inv_L |
||||
|
+ model->B3SOIFDwaii * Inv_W |
||||
|
+ model->B3SOIFDpaii * Inv_LW; |
||||
|
pParam->B3SOIFDbii = model->B3SOIFDbii |
||||
|
+ model->B3SOIFDlbii * Inv_L |
||||
|
+ model->B3SOIFDwbii * Inv_W |
||||
|
+ model->B3SOIFDpbii * Inv_LW; |
||||
|
pParam->B3SOIFDcii = model->B3SOIFDcii |
||||
|
+ model->B3SOIFDlcii * Inv_L |
||||
|
+ model->B3SOIFDwcii * Inv_W |
||||
|
+ model->B3SOIFDpcii * Inv_LW; |
||||
|
pParam->B3SOIFDdii = model->B3SOIFDdii |
||||
|
+ model->B3SOIFDldii * Inv_L |
||||
|
+ model->B3SOIFDwdii * Inv_W |
||||
|
+ model->B3SOIFDpdii * Inv_LW; |
||||
|
pParam->B3SOIFDalpha0 = model->B3SOIFDalpha0 |
||||
|
+ model->B3SOIFDlalpha0 * Inv_L |
||||
|
+ model->B3SOIFDwalpha0 * Inv_W |
||||
|
+ model->B3SOIFDpalpha0 * Inv_LW; |
||||
|
pParam->B3SOIFDalpha1 = model->B3SOIFDalpha1 |
||||
|
+ model->B3SOIFDlalpha1 * Inv_L |
||||
|
+ model->B3SOIFDwalpha1 * Inv_W |
||||
|
+ model->B3SOIFDpalpha1 * Inv_LW; |
||||
|
pParam->B3SOIFDbeta0 = model->B3SOIFDbeta0 |
||||
|
+ model->B3SOIFDlbeta0 * Inv_L |
||||
|
+ model->B3SOIFDwbeta0 * Inv_W |
||||
|
+ model->B3SOIFDpbeta0 * Inv_LW; |
||||
|
pParam->B3SOIFDagidl = model->B3SOIFDagidl |
||||
|
+ model->B3SOIFDlagidl * Inv_L |
||||
|
+ model->B3SOIFDwagidl * Inv_W |
||||
|
+ model->B3SOIFDpagidl * Inv_LW; |
||||
|
pParam->B3SOIFDbgidl = model->B3SOIFDbgidl |
||||
|
+ model->B3SOIFDlbgidl * Inv_L |
||||
|
+ model->B3SOIFDwbgidl * Inv_W |
||||
|
+ model->B3SOIFDpbgidl * Inv_LW; |
||||
|
pParam->B3SOIFDngidl = model->B3SOIFDngidl |
||||
|
+ model->B3SOIFDlngidl * Inv_L |
||||
|
+ model->B3SOIFDwngidl * Inv_W |
||||
|
+ model->B3SOIFDpngidl * Inv_LW; |
||||
|
pParam->B3SOIFDntun = model->B3SOIFDntun |
||||
|
+ model->B3SOIFDlntun * Inv_L |
||||
|
+ model->B3SOIFDwntun * Inv_W |
||||
|
+ model->B3SOIFDpntun * Inv_LW; |
||||
|
pParam->B3SOIFDndiode = model->B3SOIFDndiode |
||||
|
+ model->B3SOIFDlndiode * Inv_L |
||||
|
+ model->B3SOIFDwndiode * Inv_W |
||||
|
+ model->B3SOIFDpndiode * Inv_LW; |
||||
|
pParam->B3SOIFDisbjt = model->B3SOIFDisbjt |
||||
|
+ model->B3SOIFDlisbjt * Inv_L |
||||
|
+ model->B3SOIFDwisbjt * Inv_W |
||||
|
+ model->B3SOIFDpisbjt * Inv_LW; |
||||
|
pParam->B3SOIFDisdif = model->B3SOIFDisdif |
||||
|
+ model->B3SOIFDlisdif * Inv_L |
||||
|
+ model->B3SOIFDwisdif * Inv_W |
||||
|
+ model->B3SOIFDpisdif * Inv_LW; |
||||
|
pParam->B3SOIFDisrec = model->B3SOIFDisrec |
||||
|
+ model->B3SOIFDlisrec * Inv_L |
||||
|
+ model->B3SOIFDwisrec * Inv_W |
||||
|
+ model->B3SOIFDpisrec * Inv_LW; |
||||
|
pParam->B3SOIFDistun = model->B3SOIFDistun |
||||
|
+ model->B3SOIFDlistun * Inv_L |
||||
|
+ model->B3SOIFDwistun * Inv_W |
||||
|
+ model->B3SOIFDpistun * Inv_LW; |
||||
|
pParam->B3SOIFDedl = model->B3SOIFDedl |
||||
|
+ model->B3SOIFDledl * Inv_L |
||||
|
+ model->B3SOIFDwedl * Inv_W |
||||
|
+ model->B3SOIFDpedl * Inv_LW; |
||||
|
pParam->B3SOIFDkbjt1 = model->B3SOIFDkbjt1 |
||||
|
+ model->B3SOIFDlkbjt1 * Inv_L |
||||
|
+ model->B3SOIFDwkbjt1 * Inv_W |
||||
|
+ model->B3SOIFDpkbjt1 * Inv_LW; |
||||
|
/* CV model */ |
||||
|
pParam->B3SOIFDvsdfb = model->B3SOIFDvsdfb |
||||
|
+ model->B3SOIFDlvsdfb * Inv_L |
||||
|
+ model->B3SOIFDwvsdfb * Inv_W |
||||
|
+ model->B3SOIFDpvsdfb * Inv_LW; |
||||
|
pParam->B3SOIFDvsdth = model->B3SOIFDvsdth |
||||
|
+ model->B3SOIFDlvsdth * Inv_L |
||||
|
+ model->B3SOIFDwvsdth * Inv_W |
||||
|
+ model->B3SOIFDpvsdth * Inv_LW; |
||||
|
/* Added for binning - END */ |
||||
|
|
||||
|
T0 = (TRatio - 1.0); |
||||
|
|
||||
|
pParam->B3SOIFDuatemp = pParam->B3SOIFDua; /* save ua, ub, and uc for b3soifdld.c */ |
||||
|
pParam->B3SOIFDubtemp = pParam->B3SOIFDub; |
||||
|
pParam->B3SOIFDuctemp = pParam->B3SOIFDuc; |
||||
|
pParam->B3SOIFDrds0denom = pow(pParam->B3SOIFDweff * 1E6, pParam->B3SOIFDwr); |
||||
|
pParam->B3SOIFDrth = here->B3SOIFDrth0 * sqrt(model->B3SOIFDtbox |
||||
|
/ model->B3SOIFDtsi) / pParam->B3SOIFDweff; |
||||
|
pParam->B3SOIFDcth = here->B3SOIFDcth0 * model->B3SOIFDtsi; |
||||
|
pParam->B3SOIFDrbody = model->B3SOIFDrbody * |
||||
|
pParam->B3SOIFDweff / pParam->B3SOIFDleff; |
||||
|
pParam->B3SOIFDua = pParam->B3SOIFDua + pParam->B3SOIFDua1 * T0; |
||||
|
pParam->B3SOIFDub = pParam->B3SOIFDub + pParam->B3SOIFDub1 * T0; |
||||
|
pParam->B3SOIFDuc = pParam->B3SOIFDuc + pParam->B3SOIFDuc1 * T0; |
||||
|
if (pParam->B3SOIFDu0 > 1.0) |
||||
|
pParam->B3SOIFDu0 = pParam->B3SOIFDu0 / 1.0e4; |
||||
|
|
||||
|
pParam->B3SOIFDu0temp = pParam->B3SOIFDu0 |
||||
|
* pow(TRatio, pParam->B3SOIFDute); |
||||
|
pParam->B3SOIFDvsattemp = pParam->B3SOIFDvsat - pParam->B3SOIFDat |
||||
|
* T0; |
||||
|
pParam->B3SOIFDrds0 = (pParam->B3SOIFDrdsw + pParam->B3SOIFDprt * T0) |
||||
|
/ pow(pParam->B3SOIFDweff * 1E6, pParam->B3SOIFDwr); |
||||
|
|
||||
|
if (B3SOIFDcheckModel(model, here, ckt)) |
||||
|
{ IFuid namarray[2]; |
||||
|
namarray[0] = model->B3SOIFDmodName; |
||||
|
namarray[1] = here->B3SOIFDname; |
||||
|
(*(SPfrontEnd->IFerror)) (ERR_FATAL, "Fatal error(s) detected during B3SOIFDV3 parameter checking for %s in model %s", namarray); |
||||
|
return(E_BADPARM); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
pParam->B3SOIFDcgdo = (model->B3SOIFDcgdo + pParam->B3SOIFDcf) |
||||
|
* pParam->B3SOIFDweffCV; |
||||
|
pParam->B3SOIFDcgso = (model->B3SOIFDcgso + pParam->B3SOIFDcf) |
||||
|
* pParam->B3SOIFDweffCV; |
||||
|
|
||||
|
|
||||
|
pParam->B3SOIFDcgeo = model->B3SOIFDcgeo * pParam->B3SOIFDleffCV; |
||||
|
|
||||
|
|
||||
|
if (!model->B3SOIFDnpeakGiven && model->B3SOIFDgamma1Given) |
||||
|
{ T0 = pParam->B3SOIFDgamma1 * model->B3SOIFDcox; |
||||
|
pParam->B3SOIFDnpeak = 3.021E22 * T0 * T0; |
||||
|
} |
||||
|
|
||||
|
T0 = pow(TRatio, model->B3SOIFDxbjt / pParam->B3SOIFDndiode); |
||||
|
T1 = pow(TRatio, model->B3SOIFDxdif / pParam->B3SOIFDndiode); |
||||
|
T2 = pow(TRatio, model->B3SOIFDxrec / pParam->B3SOIFDndiode / 2); |
||||
|
T4 = -Eg0 / pParam->B3SOIFDndiode / model->B3SOIFDvtm * (1 - TRatio); |
||||
|
T5 = exp(T4); |
||||
|
T6 = sqrt(T5); |
||||
|
pParam->B3SOIFDjbjt = pParam->B3SOIFDisbjt * T0 * T5; |
||||
|
pParam->B3SOIFDjdif = pParam->B3SOIFDisdif * T1 * T5; |
||||
|
pParam->B3SOIFDjrec = pParam->B3SOIFDisrec * T2 * T6; |
||||
|
T0 = pow(TRatio, model->B3SOIFDxtun / pParam->B3SOIFDntun); |
||||
|
pParam->B3SOIFDjtun = pParam->B3SOIFDistun * T0 ; |
||||
|
|
||||
|
if (pParam->B3SOIFDnsub > 0) |
||||
|
pParam->B3SOIFDvfbb = -model->B3SOIFDtype * model->B3SOIFDvtm * |
||||
|
log(pParam->B3SOIFDnpeak/ pParam->B3SOIFDnsub); |
||||
|
else |
||||
|
pParam->B3SOIFDvfbb = -model->B3SOIFDtype * model->B3SOIFDvtm * |
||||
|
log(-pParam->B3SOIFDnpeak* pParam->B3SOIFDnsub/ni/ni); |
||||
|
|
||||
|
if (!model->B3SOIFDvsdfbGiven) |
||||
|
{ |
||||
|
if (pParam->B3SOIFDnsub > 0) |
||||
|
pParam->B3SOIFDvsdfb = -model->B3SOIFDtype * (model->B3SOIFDvtm*log(1e20 * |
||||
|
pParam->B3SOIFDnsub / ni /ni) - 0.3); |
||||
|
else if (pParam->B3SOIFDnsub < 0) |
||||
|
pParam->B3SOIFDvsdfb = -model->B3SOIFDtype * (model->B3SOIFDvtm*log(-1e20 / |
||||
|
pParam->B3SOIFDnsub) + 0.3); |
||||
|
} |
||||
|
|
||||
|
/* Phi & Gamma */ |
||||
|
SDphi = 2.0*model->B3SOIFDvtm*log(fabs(pParam->B3SOIFDnsub) / ni); |
||||
|
SDgamma = 5.753e-12 * sqrt(fabs(pParam->B3SOIFDnsub)) / model->B3SOIFDcbox; |
||||
|
|
||||
|
if (!model->B3SOIFDvsdthGiven) |
||||
|
{ |
||||
|
if ( ((pParam->B3SOIFDnsub > 0) && (model->B3SOIFDtype > 0)) || |
||||
|
((pParam->B3SOIFDnsub < 0) && (model->B3SOIFDtype < 0)) ) |
||||
|
pParam->B3SOIFDvsdth = pParam->B3SOIFDvsdfb + SDphi + |
||||
|
SDgamma * sqrt(SDphi); |
||||
|
else |
||||
|
pParam->B3SOIFDvsdth = pParam->B3SOIFDvsdfb - SDphi - |
||||
|
SDgamma * sqrt(SDphi); |
||||
|
} |
||||
|
if (!model->B3SOIFDcsdminGiven) |
||||
|
{ |
||||
|
/* Cdmin */ |
||||
|
tmp = sqrt(2.0 * EPSSI * SDphi / (Charge_q * |
||||
|
fabs(pParam->B3SOIFDnsub) * 1.0e6)); |
||||
|
tmp1 = EPSSI / tmp; |
||||
|
model->B3SOIFDcsdmin = tmp1 * model->B3SOIFDcbox / |
||||
|
(tmp1 + model->B3SOIFDcbox); |
||||
|
} |
||||
|
|
||||
|
T0 = model->B3SOIFDcsdesw * log(1 + model->B3SOIFDtsi / |
||||
|
model->B3SOIFDtbox); |
||||
|
T1 = here->B3SOIFDsourcePerimeter - pParam->B3SOIFDweff; |
||||
|
if (T1 > 0.0) |
||||
|
pParam->B3SOIFDcsesw = T0 * T1; |
||||
|
else |
||||
|
pParam->B3SOIFDcsesw = 0.0; |
||||
|
T1 = here->B3SOIFDdrainPerimeter - pParam->B3SOIFDweff; |
||||
|
if (T1 > 0.0) |
||||
|
pParam->B3SOIFDcdesw = T0 * T1; |
||||
|
else |
||||
|
pParam->B3SOIFDcdesw = 0.0; |
||||
|
|
||||
|
pParam->B3SOIFDphi = 2.0 * model->B3SOIFDvtm |
||||
|
* log(pParam->B3SOIFDnpeak / ni); |
||||
|
|
||||
|
pParam->B3SOIFDsqrtPhi = sqrt(pParam->B3SOIFDphi); |
||||
|
pParam->B3SOIFDphis3 = pParam->B3SOIFDsqrtPhi * pParam->B3SOIFDphi; |
||||
|
|
||||
|
pParam->B3SOIFDXdep0 = sqrt(2.0 * EPSSI / (Charge_q |
||||
|
* pParam->B3SOIFDnpeak * 1.0e6)) |
||||
|
* pParam->B3SOIFDsqrtPhi; |
||||
|
pParam->B3SOIFDsqrtXdep0 = sqrt(pParam->B3SOIFDXdep0); |
||||
|
pParam->B3SOIFDlitl = sqrt(3.0 * model->B3SOIFDxj |
||||
|
* model->B3SOIFDtox); |
||||
|
pParam->B3SOIFDvbi = model->B3SOIFDvtm * log(1.0e20 |
||||
|
* pParam->B3SOIFDnpeak / (ni * ni)); |
||||
|
pParam->B3SOIFDcdep0 = sqrt(Charge_q * EPSSI |
||||
|
* pParam->B3SOIFDnpeak * 1.0e6 / 2.0 |
||||
|
/ pParam->B3SOIFDphi); |
||||
|
|
||||
|
if (model->B3SOIFDk1Given || model->B3SOIFDk2Given) |
||||
|
{ if (!model->B3SOIFDk1Given) |
||||
|
{ fprintf(stdout, "Warning: k1 should be specified with k2.\n"); |
||||
|
pParam->B3SOIFDk1 = 0.53; |
||||
|
} |
||||
|
if (!model->B3SOIFDk2Given) |
||||
|
{ fprintf(stdout, "Warning: k2 should be specified with k1.\n"); |
||||
|
pParam->B3SOIFDk2 = -0.0186; |
||||
|
} |
||||
|
if (model->B3SOIFDxtGiven) |
||||
|
fprintf(stdout, "Warning: xt is ignored because k1 or k2 is given.\n"); |
||||
|
if (model->B3SOIFDvbxGiven) |
||||
|
fprintf(stdout, "Warning: vbx is ignored because k1 or k2 is given.\n"); |
||||
|
if (model->B3SOIFDvbmGiven) |
||||
|
fprintf(stdout, "Warning: vbm is ignored because k1 or k2 is given.\n"); |
||||
|
if (model->B3SOIFDgamma1Given) |
||||
|
fprintf(stdout, "Warning: gamma1 is ignored because k1 or k2 is given.\n"); |
||||
|
if (model->B3SOIFDgamma2Given) |
||||
|
fprintf(stdout, "Warning: gamma2 is ignored because k1 or k2 is given.\n"); |
||||
|
} |
||||
|
else |
||||
|
{ if (!model->B3SOIFDvbxGiven) |
||||
|
pParam->B3SOIFDvbx = pParam->B3SOIFDphi - 7.7348e-4 |
||||
|
* pParam->B3SOIFDnpeak |
||||
|
* pParam->B3SOIFDxt * pParam->B3SOIFDxt; |
||||
|
if (pParam->B3SOIFDvbx > 0.0) |
||||
|
pParam->B3SOIFDvbx = -pParam->B3SOIFDvbx; |
||||
|
if (pParam->B3SOIFDvbm > 0.0) |
||||
|
pParam->B3SOIFDvbm = -pParam->B3SOIFDvbm; |
||||
|
|
||||
|
if (!model->B3SOIFDgamma1Given) |
||||
|
pParam->B3SOIFDgamma1 = 5.753e-12 |
||||
|
* sqrt(pParam->B3SOIFDnpeak) |
||||
|
/ model->B3SOIFDcox; |
||||
|
if (!model->B3SOIFDgamma2Given) |
||||
|
pParam->B3SOIFDgamma2 = 5.753e-12 |
||||
|
* sqrt(pParam->B3SOIFDnsub) |
||||
|
/ model->B3SOIFDcox; |
||||
|
|
||||
|
T0 = pParam->B3SOIFDgamma1 - pParam->B3SOIFDgamma2; |
||||
|
T1 = sqrt(pParam->B3SOIFDphi - pParam->B3SOIFDvbx) |
||||
|
- pParam->B3SOIFDsqrtPhi; |
||||
|
T2 = sqrt(pParam->B3SOIFDphi * (pParam->B3SOIFDphi |
||||
|
- pParam->B3SOIFDvbm)) - pParam->B3SOIFDphi; |
||||
|
pParam->B3SOIFDk2 = T0 * T1 / (2.0 * T2 + pParam->B3SOIFDvbm); |
||||
|
pParam->B3SOIFDk1 = pParam->B3SOIFDgamma2 - 2.0 |
||||
|
* pParam->B3SOIFDk2 * sqrt(pParam->B3SOIFDphi |
||||
|
- pParam->B3SOIFDvbm); |
||||
|
} |
||||
|
|
||||
|
if (pParam->B3SOIFDk2 < 0.0) |
||||
|
{ T0 = 0.5 * pParam->B3SOIFDk1 / pParam->B3SOIFDk2; |
||||
|
pParam->B3SOIFDvbsc = 0.9 * (pParam->B3SOIFDphi - T0 * T0); |
||||
|
if (pParam->B3SOIFDvbsc > -3.0) |
||||
|
pParam->B3SOIFDvbsc = -3.0; |
||||
|
else if (pParam->B3SOIFDvbsc < -30.0) |
||||
|
pParam->B3SOIFDvbsc = -30.0; |
||||
|
} |
||||
|
else |
||||
|
{ pParam->B3SOIFDvbsc = -30.0; |
||||
|
} |
||||
|
if (pParam->B3SOIFDvbsc > pParam->B3SOIFDvbm) |
||||
|
pParam->B3SOIFDvbsc = pParam->B3SOIFDvbm; |
||||
|
|
||||
|
if (model->B3SOIFDvth0Given) |
||||
|
{ pParam->B3SOIFDvfb = model->B3SOIFDtype * pParam->B3SOIFDvth0 |
||||
|
- pParam->B3SOIFDphi - pParam->B3SOIFDk1 |
||||
|
* pParam->B3SOIFDsqrtPhi; |
||||
|
} |
||||
|
else |
||||
|
{ pParam->B3SOIFDvfb = -1.0; |
||||
|
pParam->B3SOIFDvth0 = model->B3SOIFDtype * (pParam->B3SOIFDvfb |
||||
|
+ pParam->B3SOIFDphi + pParam->B3SOIFDk1 |
||||
|
* pParam->B3SOIFDsqrtPhi); |
||||
|
} |
||||
|
T1 = sqrt(EPSSI / EPSOX * model->B3SOIFDtox |
||||
|
* pParam->B3SOIFDXdep0); |
||||
|
T0 = exp(-0.5 * pParam->B3SOIFDdsub * pParam->B3SOIFDleff / T1); |
||||
|
pParam->B3SOIFDtheta0vb0 = (T0 + 2.0 * T0 * T0); |
||||
|
|
||||
|
T0 = exp(-0.5 * pParam->B3SOIFDdrout * pParam->B3SOIFDleff / T1); |
||||
|
T2 = (T0 + 2.0 * T0 * T0); |
||||
|
pParam->B3SOIFDthetaRout = pParam->B3SOIFDpdibl1 * T2 |
||||
|
+ pParam->B3SOIFDpdibl2; |
||||
|
|
||||
|
here->B3SOIFDminIsub = 5.0e-2 * pParam->B3SOIFDweff * model->B3SOIFDtsi |
||||
|
* MAX(pParam->B3SOIFDisdif, pParam->B3SOIFDisrec); |
||||
|
} |
||||
|
|
||||
|
here->B3SOIFDcsbox = model->B3SOIFDcbox*here->B3SOIFDsourceArea; |
||||
|
here->B3SOIFDcsmin = model->B3SOIFDcsdmin*here->B3SOIFDsourceArea; |
||||
|
here->B3SOIFDcdbox = model->B3SOIFDcbox*here->B3SOIFDdrainArea; |
||||
|
here->B3SOIFDcdmin = model->B3SOIFDcsdmin*here->B3SOIFDdrainArea; |
||||
|
|
||||
|
if ( ((pParam->B3SOIFDnsub > 0) && (model->B3SOIFDtype > 0)) || |
||||
|
((pParam->B3SOIFDnsub < 0) && (model->B3SOIFDtype < 0)) ) |
||||
|
{ |
||||
|
T0 = pParam->B3SOIFDvsdth - pParam->B3SOIFDvsdfb; |
||||
|
pParam->B3SOIFDsdt1 = pParam->B3SOIFDvsdfb + model->B3SOIFDasd * T0; |
||||
|
T1 = here->B3SOIFDcsbox - here->B3SOIFDcsmin; |
||||
|
T2 = T1 / T0 / T0; |
||||
|
pParam->B3SOIFDst2 = T2 / model->B3SOIFDasd; |
||||
|
pParam->B3SOIFDst3 = T2 /( 1 - model->B3SOIFDasd); |
||||
|
here->B3SOIFDst4 = T0 * T1 * (1 + model->B3SOIFDasd) / 3 |
||||
|
- here->B3SOIFDcsmin * pParam->B3SOIFDvsdfb; |
||||
|
|
||||
|
T1 = here->B3SOIFDcdbox - here->B3SOIFDcdmin; |
||||
|
T2 = T1 / T0 / T0; |
||||
|
pParam->B3SOIFDdt2 = T2 / model->B3SOIFDasd; |
||||
|
pParam->B3SOIFDdt3 = T2 /( 1 - model->B3SOIFDasd); |
||||
|
here->B3SOIFDdt4 = T0 * T1 * (1 + model->B3SOIFDasd) / 3 |
||||
|
- here->B3SOIFDcdmin * pParam->B3SOIFDvsdfb; |
||||
|
} else |
||||
|
{ |
||||
|
T0 = pParam->B3SOIFDvsdfb - pParam->B3SOIFDvsdth; |
||||
|
pParam->B3SOIFDsdt1 = pParam->B3SOIFDvsdth + model->B3SOIFDasd * T0; |
||||
|
T1 = here->B3SOIFDcsmin - here->B3SOIFDcsbox; |
||||
|
T2 = T1 / T0 / T0; |
||||
|
pParam->B3SOIFDst2 = T2 / model->B3SOIFDasd; |
||||
|
pParam->B3SOIFDst3 = T2 /( 1 - model->B3SOIFDasd); |
||||
|
here->B3SOIFDst4 = T0 * T1 * (1 + model->B3SOIFDasd) / 3 |
||||
|
- here->B3SOIFDcsbox * pParam->B3SOIFDvsdth; |
||||
|
|
||||
|
T1 = here->B3SOIFDcdmin - here->B3SOIFDcdbox; |
||||
|
T2 = T1 / T0 / T0; |
||||
|
pParam->B3SOIFDdt2 = T2 / model->B3SOIFDasd; |
||||
|
pParam->B3SOIFDdt3 = T2 /( 1 - model->B3SOIFDasd); |
||||
|
here->B3SOIFDdt4 = T0 * T1 * (1 + model->B3SOIFDasd) / 3 |
||||
|
- here->B3SOIFDcdbox * pParam->B3SOIFDvsdth; |
||||
|
} |
||||
|
|
||||
|
here->B3SOIFDphi = pParam->B3SOIFDphi; |
||||
|
/* process source/drain series resistance */ |
||||
|
here->B3SOIFDdrainConductance = model->B3SOIFDsheetResistance |
||||
|
* here->B3SOIFDdrainSquares; |
||||
|
if (here->B3SOIFDdrainConductance > 0.0) |
||||
|
here->B3SOIFDdrainConductance = 1.0 |
||||
|
/ here->B3SOIFDdrainConductance; |
||||
|
else |
||||
|
here->B3SOIFDdrainConductance = 0.0; |
||||
|
|
||||
|
here->B3SOIFDsourceConductance = model->B3SOIFDsheetResistance |
||||
|
* here->B3SOIFDsourceSquares; |
||||
|
if (here->B3SOIFDsourceConductance > 0.0) |
||||
|
here->B3SOIFDsourceConductance = 1.0 |
||||
|
/ here->B3SOIFDsourceConductance; |
||||
|
else |
||||
|
here->B3SOIFDsourceConductance = 0.0; |
||||
|
here->B3SOIFDcgso = pParam->B3SOIFDcgso; |
||||
|
here->B3SOIFDcgdo = pParam->B3SOIFDcgdo; |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
return(OK); |
||||
|
} |
||||
|
|
||||
@ -0,0 +1,52 @@ |
|||||
|
/********** |
||||
|
Copyright 1999 Regents of the University of California. All rights reserved. |
||||
|
Author: 1998 Samuel Fung, Dennis Sinitsky and Stephen Tang |
||||
|
File: b3soifdtrunc.c 98/5/01 |
||||
|
**********/ |
||||
|
|
||||
|
|
||||
|
#include "ngspice.h" |
||||
|
#include <stdio.h> |
||||
|
#include <math.h> |
||||
|
#include "cktdefs.h" |
||||
|
#include "b3soifddef.h" |
||||
|
#include "sperror.h" |
||||
|
#include "suffix.h" |
||||
|
|
||||
|
|
||||
|
int |
||||
|
B3SOIFDtrunc(inModel,ckt,timeStep) |
||||
|
GENmodel *inModel; |
||||
|
CKTcircuit *ckt; |
||||
|
double *timeStep; |
||||
|
{ |
||||
|
B3SOIFDmodel *model = (B3SOIFDmodel*)inModel; |
||||
|
B3SOIFDinstance *here; |
||||
|
|
||||
|
#ifdef STEPDEBUG |
||||
|
double debugtemp; |
||||
|
#endif /* STEPDEBUG */ |
||||
|
|
||||
|
for (; model != NULL; model = model->B3SOIFDnextModel) |
||||
|
{ for (here = model->B3SOIFDinstances; here != NULL; |
||||
|
here = here->B3SOIFDnextInstance) |
||||
|
{ |
||||
|
#ifdef STEPDEBUG |
||||
|
debugtemp = *timeStep; |
||||
|
#endif /* STEPDEBUG */ |
||||
|
CKTterr(here->B3SOIFDqb,ckt,timeStep); |
||||
|
CKTterr(here->B3SOIFDqg,ckt,timeStep); |
||||
|
CKTterr(here->B3SOIFDqd,ckt,timeStep); |
||||
|
#ifdef STEPDEBUG |
||||
|
if(debugtemp != *timeStep) |
||||
|
{ printf("device %s reduces step from %g to %g\n", |
||||
|
here->B3SOIFDname,debugtemp,*timeStep); |
||||
|
} |
||||
|
#endif /* STEPDEBUG */ |
||||
|
} |
||||
|
} |
||||
|
return(OK); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
@ -0,0 +1,16 @@ |
|||||
|
## Process this file with automake to produce Makefile.in
|
||||
|
|
||||
|
TESTS = \
|
||||
|
t3.cir \
|
||||
|
t4.cir \
|
||||
|
t5.cir \
|
||||
|
inv2.cir \
|
||||
|
RampVg2.cir |
||||
|
|
||||
|
TESTS_ENVIRONMENT = $(SHELL) $(srcdir)/../check.sh $(top_builddir)/src/ngspice |
||||
|
|
||||
|
EXTRA_DIST = \
|
||||
|
$(TESTS) \
|
||||
|
$(TESTS:.cir=.out) |
||||
|
|
||||
|
MAINTAINERCLEANFILES = Makefile.in |
||||
@ -0,0 +1,19 @@ |
|||||
|
* BSIMSOI example |
||||
|
* |
||||
|
* SOI, Ramp Vg |
||||
|
|
||||
|
Vd d 0 1.5 |
||||
|
Vg g 0 0.0 PULSE 0V 2V .02n .1n .1n .2n .6n |
||||
|
Ve e 0 0.0 |
||||
|
Vs s 0 0.0 |
||||
|
Vb b 0 0.0 |
||||
|
|
||||
|
m1 d g s e n1 w=10u l=0.25u debug=-1 |
||||
|
|
||||
|
.option gmin=1e-20 itl1=200 itl2=200 abstol=1e-9 |
||||
|
.tran 1p 1.0ns |
||||
|
.print m1#Vbs, V(g)/10 |
||||
|
.include nmosfd.mod |
||||
|
|
||||
|
.end |
||||
|
|
||||
@ -0,0 +1,13 @@ |
|||||
|
Error: no data saved for Transient analysis; analysis not run |
||||
|
doAnalyses: not found |
||||
|
|
||||
|
run simulation(s) aborted |
||||
|
Error: .print: no m1#vbs analysis found. |
||||
|
|
||||
|
Circuit: * BSIMSOI example |
||||
|
|
||||
|
Warning: Pd = 0 is less than W. |
||||
|
Warning: Ps = 0 is less than W. |
||||
|
|
||||
|
|
||||
|
|
||||
@ -0,0 +1,17 @@ |
|||||
|
* model = BSIMSOI (FD) |
||||
|
* |
||||
|
* |
||||
|
* SOI Inverter - floating body |
||||
|
|
||||
|
vin in 0 dc 2.5 |
||||
|
vdd dd 0 dc 2.5 |
||||
|
vss ss 0 dc 0 |
||||
|
ve e 0 dc 1.25 |
||||
|
m1 out in dd e p1 w=20u l=0.25u |
||||
|
m2 out in ss e n1 w=10u l=0.25u |
||||
|
|
||||
|
.option itl1=500 gmin=1e-25 |
||||
|
.dc vin 0 2.5 0.01 |
||||
|
.print v(in), v(out) |
||||
|
.include nmosfd.mod |
||||
|
.include pmosfd.mod |
||||
@ -0,0 +1,15 @@ |
|||||
|
Error: no data saved for D.C. Transfer curve analysis; analysis not run |
||||
|
doAnalyses: not found |
||||
|
|
||||
|
run simulation(s) aborted |
||||
|
Error: .print: no v(in) analysis found. |
||||
|
|
||||
|
Circuit: * model = BSIMSOI (FD) |
||||
|
|
||||
|
Warning: Pd = 0 is less than W. |
||||
|
Warning: Ps = 0 is less than W. |
||||
|
Warning: Pd = 0 is less than W. |
||||
|
Warning: Ps = 0 is less than W. |
||||
|
|
||||
|
|
||||
|
|
||||
@ -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,39 @@ |
|||||
|
*Model Card for BSIMFD2.0, floating body FD SOI NMOS |
||||
|
*Released on 2/15/99 |
||||
|
.Model N1 NMOS Level= 10 |
||||
|
+TNOM = 27 TOX = 4.5E-09 TSI = 5e-8 TBOX = 8E-08 |
||||
|
+MOBMOD = 0 CAPMOD = 3 SHMOD = 0 |
||||
|
+PARAMCHK=0 WINT = 0 LINT = -2E-08 |
||||
|
+VTH0 = .52 K1 = .39 K2 = .1 K3 = 0 |
||||
|
+KB1 = .95 K3B = 2.2 NLX = 7.2E-08 |
||||
|
+DVT0 = .55 DVT1 = .28 DVT2 = -1.4 |
||||
|
+DVT0W = 0 DVT1W = 0 DVT2W = 0 |
||||
|
+NCH = 3.3E+17 NSUB = 1E+15 NGATE = 1E+20 |
||||
|
+DVBD0 = 60.0 DVBD1 = 1.1 VBSA = 0.0 |
||||
|
+KB3 = 2.2 DELP = 0.02 |
||||
|
+ABP = 0.9 MXC = 0.9 ADICE0 = 0.93 |
||||
|
+KBJT1 = 1.0E-08 EDL = .0000005 |
||||
|
+NDIODE = 1.13 NTUN = 14.0 |
||||
|
+ISBJT = 2e-6 ISDIF = 1e-6 ISTUN = 0.0 ISREC = 1e-5 |
||||
|
+XBJT = 0.01 XDIF = 0.01 XREC = 0.01 XTUN = 0.001 |
||||
|
+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 = 700 PRWG = 0 PRWB = -.2 WR = 1 |
||||
|
+RBODY = 0.0 RBSH = 0.0 |
||||
|
+A0 = 1.4 KETA = -.67 VSAT = 135000 |
||||
|
+DWG = 0 DWB = 0 |
||||
|
+ALPHA0 = 0.0 ALPHA1 = 1.5 BETA0 = 20.5 |
||||
|
+AII = 1.2 BII = 0.1e-7 CII = 0.8 DII = 0.6 |
||||
|
+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 = .01 ETAB = 0 |
||||
|
+DSUB = .3 RTH0 = .006 |
||||
|
+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 = 5e-10 TT=3e-10 |
||||
|
+ASD = 0.3 CSDESW = 1e-12 |
||||
@ -0,0 +1,39 @@ |
|||||
|
*Model Card for BSIMFD2.0, floating body FD SOI PMOS |
||||
|
*Released on 2/15/99 |
||||
|
.Model P1 PMOS Level= 10 |
||||
|
+TNOM = 27 TOX = 4.5E-09 TSI = 5e-8 TBOX = 8E-08 |
||||
|
+MOBMOD = 2 CAPMOD = 3 SHMOD = 0 |
||||
|
+WINT = 0 LINT = -2E-08 |
||||
|
+VTH0 = -.52 K1 = .39 K2 = .1 K3 = 0 |
||||
|
+KB1 = .95 K3B = 2.2 NLX = 7.2E-08 |
||||
|
+DVT0 = .55 DVT1 = .28 DVT2 = -1.4 |
||||
|
+DVT0W = 0 DVT1W = 0 DVT2W = 0 |
||||
|
+NCH = 3.0E+17 NSUB = 1E+15 NGATE = 1E+20 |
||||
|
+DVBD0 = 60.0 DVBD1 = 1.1 VBSA = -0.2 |
||||
|
+KB3 = 2.2 DELP = 0.02 |
||||
|
+ABP = 0.9 MXC = 0.9 ADICE0 = 0.93 |
||||
|
+KBJT1 = 1.0E-08 EDL = .0000005 |
||||
|
+NDIODE = 1.13 NTUN = 14.0 |
||||
|
+ISBJT = 0.0 ISDIF = 1e-6 ISTUN = 0.0 ISREC = 0.0 |
||||
|
+XBJT = 0.01 XDIF = 0.01 XREC = 0.01 XTUN = 0.001 |
||||
|
+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 = 700 PRWG = 0 PRWB = -.2 WR = 1 |
||||
|
+RBODY = 0.0 RBSH = 0.0 |
||||
|
+A0 = 1.4 KETA = -.67 VSAT = 75000 |
||||
|
+DWG = 0 DWB = 0 |
||||
|
+ALPHA0 = 0.0 ALPHA1 = 1e-4 BETA0 = 19 |
||||
|
+AII = 1.25 BII = 0.1e-7 CII = 0.8 DII = 0.6 |
||||
|
+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 = .01 ETAB = 0 |
||||
|
+DSUB = .3 RTH0 = .006 |
||||
|
+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 = 5e-10 TT=3e-10 |
||||
|
+ASD = 0.3 CSDESW = 1e-12 |
||||
@ -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 nmosfd.mod |
||||
|
.include pmosfd.mod |
||||
|
.include lib.h |
||||
|
.end |
||||
@ -0,0 +1,18 @@ |
|||||
|
*model = BSIMSOI |
||||
|
*Berkeley Spice Compatibility |
||||
|
* |
||||
|
* SOI NMOSFET, floating body simulation |
||||
|
|
||||
|
vd d 0 dc 1.5 |
||||
|
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 vd 0 3 0.01 vg 0.5 3 0.5 |
||||
|
.print v(g), i(vs) |
||||
|
.include nmosfd.mod |
||||
|
|
||||
@ -0,0 +1,13 @@ |
|||||
|
Error: no data saved for D.C. Transfer curve analysis; analysis not run |
||||
|
doAnalyses: not found |
||||
|
|
||||
|
run simulation(s) aborted |
||||
|
Error: .print: no v(g) analysis found. |
||||
|
|
||||
|
Circuit: *model = BSIMSOI |
||||
|
|
||||
|
Warning: Pd = 0 is less than W. |
||||
|
Warning: Ps = 0 is less than W. |
||||
|
|
||||
|
|
||||
|
|
||||
@ -0,0 +1,16 @@ |
|||||
|
*model = BSIMSOI |
||||
|
*Berkeley Spice Compatibility |
||||
|
* |
||||
|
* SOI NMOSFET, tied body simulation |
||||
|
|
||||
|
vd d 0 dc 0.05 |
||||
|
vs s 0 dc 0 |
||||
|
ve e 0 dc 0 |
||||
|
vg g 0 dc 3 |
||||
|
vb b 0 dc 0 |
||||
|
|
||||
|
m1 d g s e b n1 w=10u l=0.25u |
||||
|
|
||||
|
.option gmin=1e-25 itl1=500 |
||||
|
.dc vg 0 1.5 0.01 vb -0.3 0.5 0.1 |
||||
|
.include nmosfd.mod |
||||
@ -0,0 +1,4 @@ |
|||||
|
Warning: premature EOF |
||||
|
|
||||
|
Circuit: *model = BSIMSOI |
||||
|
|
||||
@ -0,0 +1,15 @@ |
|||||
|
*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 nmosfd.mod |
||||
@ -0,0 +1,4 @@ |
|||||
|
Warning: premature EOF |
||||
|
|
||||
|
Circuit: *model = BSIMSOI |
||||
|
|
||||
@ -0,0 +1,172 @@ |
|||||
|
|
||||
|
Circuit: * BSIMSOI (PD) example |
||||
|
|
||||
|
Warning: Pd = 0 is less than W. |
||||
|
Warning: Ps = 0 is less than W. |
||||
|
|
||||
|
Initial Transient Solution |
||||
|
-------------------------- |
||||
|
|
||||
|
Node Voltage |
||||
|
---- ------- |
||||
|
d 1.5 |
||||
|
g 0 |
||||
|
e 0 |
||||
|
s 0 |
||||
|
b 0 |
||||
|
vb#branch 0 |
||||
|
vs#branch 1.17881e-09 |
||||
|
ve#branch 0 |
||||
|
vg#branch 1.5e-20 |
||||
|
vd#branch -1.17881e-09 |
||||
|
|
||||
|
* BSIMSOI (PD) example |
||||
|
-------------------------------------------------------------------------------- |
||||
|
Index time v(g)/10 |
||||
|
-------------------------------------------------------------------------------- |
||||
|
0 0.000000e+00 0.000000e+00 |
||||
|
1 1.000000e-14 0.000000e+00 |
||||
|
2 2.000000e-14 0.000000e+00 |
||||
|
3 4.000000e-14 0.000000e+00 |
||||
|
4 8.000000e-14 0.000000e+00 |
||||
|
5 1.600000e-13 0.000000e+00 |
||||
|
6 3.200000e-13 0.000000e+00 |
||||
|
7 6.400000e-13 0.000000e+00 |
||||
|
8 1.280000e-12 0.000000e+00 |
||||
|
9 2.560000e-12 0.000000e+00 |
||||
|
10 5.120000e-12 0.000000e+00 |
||||
|
11 1.024000e-11 0.000000e+00 |
||||
|
12 2.000000e-11 0.000000e+00 |
||||
|
13 2.100000e-11 2.000000e-03 |
||||
|
14 2.300000e-11 6.000000e-03 |
||||
|
15 2.700000e-11 1.400000e-02 |
||||
|
16 2.800000e-11 1.600000e-02 |
||||
|
17 3.000000e-11 2.000000e-02 |
||||
|
18 3.400000e-11 2.800000e-02 |
||||
|
19 4.200000e-11 4.400000e-02 |
||||
|
20 5.200000e-11 6.400000e-02 |
||||
|
21 6.200000e-11 8.400000e-02 |
||||
|
22 7.200000e-11 1.040000e-01 |
||||
|
23 8.200000e-11 1.240000e-01 |
||||
|
24 9.200000e-11 1.440000e-01 |
||||
|
25 1.020000e-10 1.640000e-01 |
||||
|
26 1.120000e-10 1.840000e-01 |
||||
|
27 1.200000e-10 2.000000e-01 |
||||
|
28 1.210000e-10 2.000000e-01 |
||||
|
29 1.230000e-10 2.000000e-01 |
||||
|
30 1.270000e-10 2.000000e-01 |
||||
|
31 1.350000e-10 2.000000e-01 |
||||
|
32 1.450000e-10 2.000000e-01 |
||||
|
33 1.550000e-10 2.000000e-01 |
||||
|
34 1.650000e-10 2.000000e-01 |
||||
|
35 1.750000e-10 2.000000e-01 |
||||
|
36 1.850000e-10 2.000000e-01 |
||||
|
37 1.950000e-10 2.000000e-01 |
||||
|
38 2.050000e-10 2.000000e-01 |
||||
|
39 2.150000e-10 2.000000e-01 |
||||
|
40 2.250000e-10 2.000000e-01 |
||||
|
41 2.350000e-10 2.000000e-01 |
||||
|
42 2.450000e-10 2.000000e-01 |
||||
|
43 2.550000e-10 2.000000e-01 |
||||
|
44 2.650000e-10 2.000000e-01 |
||||
|
45 2.750000e-10 2.000000e-01 |
||||
|
46 2.850000e-10 2.000000e-01 |
||||
|
47 2.950000e-10 2.000000e-01 |
||||
|
48 3.050000e-10 2.000000e-01 |
||||
|
49 3.150000e-10 2.000000e-01 |
||||
|
50 3.200000e-10 2.000000e-01 |
||||
|
51 3.210000e-10 1.980000e-01 |
||||
|
52 3.230000e-10 1.940000e-01 |
||||
|
53 3.270000e-10 1.860000e-01 |
||||
|
54 3.350000e-10 1.700000e-01 |
||||
|
|
||||
|
Index time v(g)/10 |
||||
|
-------------------------------------------------------------------------------- |
||||
|
55 3.450000e-10 1.500000e-01 |
||||
|
56 3.550000e-10 1.300000e-01 |
||||
|
57 3.650000e-10 1.100000e-01 |
||||
|
58 3.750000e-10 9.000000e-02 |
||||
|
59 3.850000e-10 7.000000e-02 |
||||
|
60 3.950000e-10 5.000000e-02 |
||||
|
61 4.050000e-10 3.000000e-02 |
||||
|
62 4.150000e-10 1.000000e-02 |
||||
|
63 4.200000e-10 0.000000e+00 |
||||
|
64 4.210000e-10 0.000000e+00 |
||||
|
65 4.230000e-10 0.000000e+00 |
||||
|
66 4.270000e-10 0.000000e+00 |
||||
|
67 4.350000e-10 0.000000e+00 |
||||
|
68 4.450000e-10 0.000000e+00 |
||||
|
69 4.550000e-10 0.000000e+00 |
||||
|
70 4.650000e-10 0.000000e+00 |
||||
|
71 4.750000e-10 0.000000e+00 |
||||
|
72 4.850000e-10 0.000000e+00 |
||||
|
73 4.950000e-10 0.000000e+00 |
||||
|
74 5.050000e-10 0.000000e+00 |
||||
|
75 5.150000e-10 0.000000e+00 |
||||
|
76 5.250000e-10 0.000000e+00 |
||||
|
77 5.350000e-10 0.000000e+00 |
||||
|
78 5.450000e-10 0.000000e+00 |
||||
|
79 5.550000e-10 0.000000e+00 |
||||
|
80 5.650000e-10 0.000000e+00 |
||||
|
81 5.750000e-10 0.000000e+00 |
||||
|
82 5.850000e-10 0.000000e+00 |
||||
|
83 5.950000e-10 0.000000e+00 |
||||
|
84 6.050000e-10 0.000000e+00 |
||||
|
85 6.150000e-10 0.000000e+00 |
||||
|
86 6.200000e-10 4.523644e-17 |
||||
|
87 6.210000e-10 2.000000e-03 |
||||
|
88 6.230000e-10 6.000000e-03 |
||||
|
89 6.270000e-10 1.400000e-02 |
||||
|
90 6.280000e-10 1.600000e-02 |
||||
|
91 6.300000e-10 2.000000e-02 |
||||
|
92 6.340000e-10 2.800000e-02 |
||||
|
93 6.420000e-10 4.400000e-02 |
||||
|
94 6.520000e-10 6.400000e-02 |
||||
|
95 6.620000e-10 8.400000e-02 |
||||
|
96 6.720000e-10 1.040000e-01 |
||||
|
97 6.820000e-10 1.240000e-01 |
||||
|
98 6.920000e-10 1.440000e-01 |
||||
|
99 7.020000e-10 1.640000e-01 |
||||
|
100 7.120000e-10 1.840000e-01 |
||||
|
101 7.200000e-10 2.000000e-01 |
||||
|
102 7.210000e-10 2.000000e-01 |
||||
|
103 7.230000e-10 2.000000e-01 |
||||
|
104 7.270000e-10 2.000000e-01 |
||||
|
105 7.350000e-10 2.000000e-01 |
||||
|
106 7.450000e-10 2.000000e-01 |
||||
|
107 7.550000e-10 2.000000e-01 |
||||
|
108 7.650000e-10 2.000000e-01 |
||||
|
109 7.750000e-10 2.000000e-01 |
||||
|
110 7.850000e-10 2.000000e-01 |
||||
|
111 7.950000e-10 2.000000e-01 |
||||
|
112 8.050000e-10 2.000000e-01 |
||||
|
|
||||
|
Index time v(g)/10 |
||||
|
-------------------------------------------------------------------------------- |
||||
|
113 8.150000e-10 2.000000e-01 |
||||
|
114 8.250000e-10 2.000000e-01 |
||||
|
115 8.350000e-10 2.000000e-01 |
||||
|
116 8.450000e-10 2.000000e-01 |
||||
|
117 8.550000e-10 2.000000e-01 |
||||
|
118 8.650000e-10 2.000000e-01 |
||||
|
119 8.750000e-10 2.000000e-01 |
||||
|
120 8.850000e-10 2.000000e-01 |
||||
|
121 8.950000e-10 2.000000e-01 |
||||
|
122 9.050000e-10 2.000000e-01 |
||||
|
123 9.150000e-10 2.000000e-01 |
||||
|
124 9.200000e-10 2.000000e-01 |
||||
|
125 9.210000e-10 1.980000e-01 |
||||
|
126 9.230000e-10 1.940000e-01 |
||||
|
127 9.270000e-10 1.860000e-01 |
||||
|
128 9.350000e-10 1.700000e-01 |
||||
|
129 9.450000e-10 1.500000e-01 |
||||
|
130 9.550000e-10 1.300000e-01 |
||||
|
131 9.650000e-10 1.100000e-01 |
||||
|
132 9.750000e-10 9.000000e-02 |
||||
|
133 9.850000e-10 7.000000e-02 |
||||
|
134 9.950000e-10 5.000000e-02 |
||||
|
135 1.000000e-09 4.000000e-02 |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
@ -0,0 +1,279 @@ |
|||||
|
|
||||
|
Circuit: * model = BSIMSOI (PD) |
||||
|
|
||||
|
Warning: Pd = 0 is less than W. |
||||
|
Warning: Ps = 0 is less than W. |
||||
|
Warning: Pd = 0 is less than W. |
||||
|
Warning: Ps = 0 is less than W. |
||||
|
* model = BSIMSOI (PD) |
||||
|
DC transfer characteristic Sat Dec 9 18:04:21 2000 |
||||
|
-------------------------------------------------------------------------------- |
||||
|
Index v-sweep v(in) v(out) |
||||
|
-------------------------------------------------------------------------------- |
||||
|
0 0.000000e+00 0.000000e+00 2.499999e+00 |
||||
|
1 1.000000e-02 1.000000e-02 2.499998e+00 |
||||
|
2 2.000000e-02 2.000000e-02 2.499998e+00 |
||||
|
3 3.000000e-02 3.000000e-02 2.499997e+00 |
||||
|
4 4.000000e-02 4.000000e-02 2.499996e+00 |
||||
|
5 5.000000e-02 5.000000e-02 2.499994e+00 |
||||
|
6 6.000000e-02 6.000000e-02 2.499991e+00 |
||||
|
7 7.000000e-02 7.000000e-02 2.499986e+00 |
||||
|
8 8.000000e-02 8.000000e-02 2.499980e+00 |
||||
|
9 9.000000e-02 9.000000e-02 2.499970e+00 |
||||
|
10 1.000000e-01 1.000000e-01 2.499955e+00 |
||||
|
11 1.100000e-01 1.100000e-01 2.499934e+00 |
||||
|
12 1.200000e-01 1.200000e-01 2.499903e+00 |
||||
|
13 1.300000e-01 1.300000e-01 2.499859e+00 |
||||
|
14 1.400000e-01 1.400000e-01 2.499799e+00 |
||||
|
15 1.500000e-01 1.500000e-01 2.499717e+00 |
||||
|
16 1.600000e-01 1.600000e-01 2.499607e+00 |
||||
|
17 1.700000e-01 1.700000e-01 2.499461e+00 |
||||
|
18 1.800000e-01 1.800000e-01 2.499270e+00 |
||||
|
19 1.900000e-01 1.900000e-01 2.499024e+00 |
||||
|
20 2.000000e-01 2.000000e-01 2.498710e+00 |
||||
|
21 2.100000e-01 2.100000e-01 2.498318e+00 |
||||
|
22 2.200000e-01 2.200000e-01 2.497836e+00 |
||||
|
23 2.300000e-01 2.300000e-01 2.497253e+00 |
||||
|
24 2.400000e-01 2.400000e-01 2.496562e+00 |
||||
|
25 2.500000e-01 2.500000e-01 2.495756e+00 |
||||
|
26 2.600000e-01 2.600000e-01 2.494834e+00 |
||||
|
27 2.700000e-01 2.700000e-01 2.493792e+00 |
||||
|
28 2.800000e-01 2.800000e-01 2.492633e+00 |
||||
|
29 2.900000e-01 2.900000e-01 2.491358e+00 |
||||
|
30 3.000000e-01 3.000000e-01 2.489971e+00 |
||||
|
31 3.100000e-01 3.100000e-01 2.488475e+00 |
||||
|
32 3.200000e-01 3.200000e-01 2.486875e+00 |
||||
|
33 3.300000e-01 3.300000e-01 2.485175e+00 |
||||
|
34 3.400000e-01 3.400000e-01 2.483378e+00 |
||||
|
35 3.500000e-01 3.500000e-01 2.481488e+00 |
||||
|
36 3.600000e-01 3.600000e-01 2.479508e+00 |
||||
|
37 3.700000e-01 3.700000e-01 2.477441e+00 |
||||
|
38 3.800000e-01 3.800000e-01 2.475290e+00 |
||||
|
39 3.900000e-01 3.900000e-01 2.473056e+00 |
||||
|
40 4.000000e-01 4.000000e-01 2.470741e+00 |
||||
|
41 4.100000e-01 4.100000e-01 2.468347e+00 |
||||
|
42 4.200000e-01 4.200000e-01 2.465873e+00 |
||||
|
43 4.300000e-01 4.300000e-01 2.463322e+00 |
||||
|
44 4.400000e-01 4.400000e-01 2.460692e+00 |
||||
|
45 4.500000e-01 4.500000e-01 2.457984e+00 |
||||
|
46 4.600000e-01 4.600000e-01 2.455198e+00 |
||||
|
47 4.700000e-01 4.700000e-01 2.452333e+00 |
||||
|
48 4.800000e-01 4.800000e-01 2.449390e+00 |
||||
|
49 4.900000e-01 4.900000e-01 2.446366e+00 |
||||
|
50 5.000000e-01 5.000000e-01 2.443261e+00 |
||||
|
51 5.100000e-01 5.100000e-01 2.440073e+00 |
||||
|
52 5.200000e-01 5.200000e-01 2.436803e+00 |
||||
|
53 5.300000e-01 5.300000e-01 2.433447e+00 |
||||
|
54 5.400000e-01 5.400000e-01 2.430005e+00 |
||||
|
|
||||
|
Index v-sweep v(in) v(out) |
||||
|
-------------------------------------------------------------------------------- |
||||
|
55 5.500000e-01 5.500000e-01 2.426475e+00 |
||||
|
56 5.600000e-01 5.600000e-01 2.422854e+00 |
||||
|
57 5.700000e-01 5.700000e-01 2.419142e+00 |
||||
|
58 5.800000e-01 5.800000e-01 2.415335e+00 |
||||
|
59 5.900000e-01 5.900000e-01 2.411431e+00 |
||||
|
60 6.000000e-01 6.000000e-01 2.407429e+00 |
||||
|
61 6.100000e-01 6.100000e-01 2.403324e+00 |
||||
|
62 6.200000e-01 6.200000e-01 2.399115e+00 |
||||
|
63 6.300000e-01 6.300000e-01 2.394799e+00 |
||||
|
64 6.400000e-01 6.400000e-01 2.390372e+00 |
||||
|
65 6.500000e-01 6.500000e-01 2.385830e+00 |
||||
|
66 6.600000e-01 6.600000e-01 2.381171e+00 |
||||
|
67 6.700000e-01 6.700000e-01 2.376391e+00 |
||||
|
68 6.800000e-01 6.800000e-01 2.371484e+00 |
||||
|
69 6.900000e-01 6.900000e-01 2.366448e+00 |
||||
|
70 7.000000e-01 7.000000e-01 2.361277e+00 |
||||
|
71 7.100000e-01 7.100000e-01 2.355966e+00 |
||||
|
72 7.200000e-01 7.200000e-01 2.350511e+00 |
||||
|
73 7.300000e-01 7.300000e-01 2.344905e+00 |
||||
|
74 7.400000e-01 7.400000e-01 2.339142e+00 |
||||
|
75 7.500000e-01 7.500000e-01 2.333216e+00 |
||||
|
76 7.600000e-01 7.600000e-01 2.327120e+00 |
||||
|
77 7.700000e-01 7.700000e-01 2.320847e+00 |
||||
|
78 7.800000e-01 7.800000e-01 2.314387e+00 |
||||
|
79 7.900000e-01 7.900000e-01 2.307733e+00 |
||||
|
80 8.000000e-01 8.000000e-01 2.300875e+00 |
||||
|
81 8.100000e-01 8.100000e-01 2.293803e+00 |
||||
|
82 8.200000e-01 8.200000e-01 2.286504e+00 |
||||
|
83 8.300000e-01 8.300000e-01 2.278969e+00 |
||||
|
84 8.400000e-01 8.400000e-01 2.271182e+00 |
||||
|
85 8.500000e-01 8.500000e-01 2.263129e+00 |
||||
|
86 8.600000e-01 8.600000e-01 2.254795e+00 |
||||
|
87 8.700000e-01 8.700000e-01 2.246161e+00 |
||||
|
88 8.800000e-01 8.800000e-01 2.237209e+00 |
||||
|
89 8.900000e-01 8.900000e-01 2.227915e+00 |
||||
|
90 9.000000e-01 9.000000e-01 2.218257e+00 |
||||
|
91 9.100000e-01 9.100000e-01 2.208207e+00 |
||||
|
92 9.200000e-01 9.200000e-01 2.197734e+00 |
||||
|
93 9.300000e-01 9.300000e-01 2.186804e+00 |
||||
|
94 9.400000e-01 9.400000e-01 2.175378e+00 |
||||
|
95 9.500000e-01 9.500000e-01 2.163410e+00 |
||||
|
96 9.600000e-01 9.600000e-01 2.150849e+00 |
||||
|
97 9.700000e-01 9.700000e-01 2.137634e+00 |
||||
|
98 9.800000e-01 9.800000e-01 2.123693e+00 |
||||
|
99 9.900000e-01 9.900000e-01 2.108943e+00 |
||||
|
100 1.000000e+00 1.000000e+00 2.093281e+00 |
||||
|
101 1.010000e+00 1.010000e+00 2.076586e+00 |
||||
|
102 1.020000e+00 1.020000e+00 2.058704e+00 |
||||
|
103 1.030000e+00 1.030000e+00 2.039444e+00 |
||||
|
104 1.040000e+00 1.040000e+00 2.018561e+00 |
||||
|
105 1.050000e+00 1.050000e+00 1.995734e+00 |
||||
|
106 1.060000e+00 1.060000e+00 1.970535e+00 |
||||
|
107 1.070000e+00 1.070000e+00 1.942381e+00 |
||||
|
108 1.080000e+00 1.080000e+00 1.910487e+00 |
||||
|
109 1.090000e+00 1.090000e+00 1.873861e+00 |
||||
|
110 1.100000e+00 1.100000e+00 1.831526e+00 |
||||
|
111 1.110000e+00 1.110000e+00 1.783131e+00 |
||||
|
112 1.120000e+00 1.120000e+00 1.729465e+00 |
||||
|
|
||||
|
Index v-sweep v(in) v(out) |
||||
|
-------------------------------------------------------------------------------- |
||||
|
113 1.130000e+00 1.130000e+00 1.672104e+00 |
||||
|
114 1.140000e+00 1.140000e+00 1.612635e+00 |
||||
|
115 1.150000e+00 1.150000e+00 1.552288e+00 |
||||
|
116 1.160000e+00 1.160000e+00 1.491955e+00 |
||||
|
117 1.170000e+00 1.170000e+00 1.432304e+00 |
||||
|
118 1.180000e+00 1.180000e+00 1.373879e+00 |
||||
|
119 1.190000e+00 1.190000e+00 1.317159e+00 |
||||
|
120 1.200000e+00 1.200000e+00 1.262589e+00 |
||||
|
121 1.210000e+00 1.210000e+00 1.210557e+00 |
||||
|
122 1.220000e+00 1.220000e+00 1.161309e+00 |
||||
|
123 1.230000e+00 1.230000e+00 1.114785e+00 |
||||
|
124 1.240000e+00 1.240000e+00 1.070348e+00 |
||||
|
125 1.250000e+00 1.250000e+00 1.026313e+00 |
||||
|
126 1.260000e+00 1.260000e+00 9.804248e-01 |
||||
|
127 1.270000e+00 1.270000e+00 9.294193e-01 |
||||
|
128 1.280000e+00 1.280000e+00 8.694365e-01 |
||||
|
129 1.290000e+00 1.290000e+00 8.002731e-01 |
||||
|
130 1.300000e+00 1.300000e+00 7.294810e-01 |
||||
|
131 1.310000e+00 1.310000e+00 6.657313e-01 |
||||
|
132 1.320000e+00 1.320000e+00 6.123845e-01 |
||||
|
133 1.330000e+00 1.330000e+00 5.687190e-01 |
||||
|
134 1.340000e+00 1.340000e+00 5.326058e-01 |
||||
|
135 1.350000e+00 1.350000e+00 5.020053e-01 |
||||
|
136 1.360000e+00 1.360000e+00 4.754247e-01 |
||||
|
137 1.370000e+00 1.370000e+00 4.518624e-01 |
||||
|
138 1.380000e+00 1.380000e+00 4.306482e-01 |
||||
|
139 1.390000e+00 1.390000e+00 4.113201e-01 |
||||
|
140 1.400000e+00 1.400000e+00 3.935479e-01 |
||||
|
141 1.410000e+00 1.410000e+00 3.770868e-01 |
||||
|
142 1.420000e+00 1.420000e+00 3.617495e-01 |
||||
|
143 1.430000e+00 1.430000e+00 3.473891e-01 |
||||
|
144 1.440000e+00 1.440000e+00 3.338880e-01 |
||||
|
145 1.450000e+00 1.450000e+00 3.211499e-01 |
||||
|
146 1.460000e+00 1.460000e+00 3.090947e-01 |
||||
|
147 1.470000e+00 1.470000e+00 2.976554e-01 |
||||
|
148 1.480000e+00 1.480000e+00 2.867748e-01 |
||||
|
149 1.490000e+00 1.490000e+00 2.764038e-01 |
||||
|
150 1.500000e+00 1.500000e+00 2.664999e-01 |
||||
|
151 1.510000e+00 1.510000e+00 2.570258e-01 |
||||
|
152 1.520000e+00 1.520000e+00 2.479490e-01 |
||||
|
153 1.530000e+00 1.530000e+00 2.392405e-01 |
||||
|
154 1.540000e+00 1.540000e+00 2.308747e-01 |
||||
|
155 1.550000e+00 1.550000e+00 2.228285e-01 |
||||
|
156 1.560000e+00 1.560000e+00 2.150815e-01 |
||||
|
157 1.570000e+00 1.570000e+00 2.076149e-01 |
||||
|
158 1.580000e+00 1.580000e+00 2.004121e-01 |
||||
|
159 1.590000e+00 1.590000e+00 1.934577e-01 |
||||
|
160 1.600000e+00 1.600000e+00 1.867378e-01 |
||||
|
161 1.610000e+00 1.610000e+00 1.802398e-01 |
||||
|
162 1.620000e+00 1.620000e+00 1.739520e-01 |
||||
|
163 1.630000e+00 1.630000e+00 1.678637e-01 |
||||
|
164 1.640000e+00 1.640000e+00 1.619651e-01 |
||||
|
165 1.650000e+00 1.650000e+00 1.562472e-01 |
||||
|
166 1.660000e+00 1.660000e+00 1.507015e-01 |
||||
|
167 1.670000e+00 1.670000e+00 1.453203e-01 |
||||
|
168 1.680000e+00 1.680000e+00 1.400964e-01 |
||||
|
169 1.690000e+00 1.690000e+00 1.350231e-01 |
||||
|
170 1.700000e+00 1.700000e+00 1.300941e-01 |
||||
|
|
||||
|
Index v-sweep v(in) v(out) |
||||
|
-------------------------------------------------------------------------------- |
||||
|
171 1.710000e+00 1.710000e+00 1.253037e-01 |
||||
|
172 1.720000e+00 1.720000e+00 1.206465e-01 |
||||
|
173 1.730000e+00 1.730000e+00 1.161173e-01 |
||||
|
174 1.740000e+00 1.740000e+00 1.117114e-01 |
||||
|
175 1.750000e+00 1.750000e+00 1.074244e-01 |
||||
|
176 1.760000e+00 1.760000e+00 1.032521e-01 |
||||
|
177 1.770000e+00 1.770000e+00 9.919058e-02 |
||||
|
178 1.780000e+00 1.780000e+00 9.523620e-02 |
||||
|
179 1.790000e+00 1.790000e+00 9.138549e-02 |
||||
|
180 1.800000e+00 1.800000e+00 8.763521e-02 |
||||
|
181 1.810000e+00 1.810000e+00 8.398230e-02 |
||||
|
182 1.820000e+00 1.820000e+00 8.042391e-02 |
||||
|
183 1.830000e+00 1.830000e+00 7.695733e-02 |
||||
|
184 1.840000e+00 1.840000e+00 7.358002e-02 |
||||
|
185 1.850000e+00 1.850000e+00 7.028961e-02 |
||||
|
186 1.860000e+00 1.860000e+00 6.708387e-02 |
||||
|
187 1.870000e+00 1.870000e+00 6.396070e-02 |
||||
|
188 1.880000e+00 1.880000e+00 6.091816e-02 |
||||
|
189 1.890000e+00 1.890000e+00 5.795442e-02 |
||||
|
190 1.900000e+00 1.900000e+00 5.506780e-02 |
||||
|
191 1.910000e+00 1.910000e+00 5.225674e-02 |
||||
|
192 1.920000e+00 1.920000e+00 4.951983e-02 |
||||
|
193 1.930000e+00 1.930000e+00 4.685577e-02 |
||||
|
194 1.940000e+00 1.940000e+00 4.426340e-02 |
||||
|
195 1.950000e+00 1.950000e+00 4.174171e-02 |
||||
|
196 1.960000e+00 1.960000e+00 3.928983e-02 |
||||
|
197 1.970000e+00 1.970000e+00 3.690704e-02 |
||||
|
198 1.980000e+00 1.980000e+00 3.459279e-02 |
||||
|
199 1.990000e+00 1.990000e+00 3.234669e-02 |
||||
|
200 2.000000e+00 2.000000e+00 3.016853e-02 |
||||
|
201 2.010000e+00 2.010000e+00 2.805831e-02 |
||||
|
202 2.020000e+00 2.020000e+00 2.601623e-02 |
||||
|
203 2.030000e+00 2.030000e+00 2.404272e-02 |
||||
|
204 2.040000e+00 2.040000e+00 2.213847e-02 |
||||
|
205 2.050000e+00 2.050000e+00 2.030439e-02 |
||||
|
206 2.060000e+00 2.060000e+00 1.854169e-02 |
||||
|
207 2.070000e+00 2.070000e+00 1.685185e-02 |
||||
|
208 2.080000e+00 2.080000e+00 1.523663e-02 |
||||
|
209 2.090000e+00 2.090000e+00 1.369807e-02 |
||||
|
210 2.100000e+00 2.100000e+00 1.223844e-02 |
||||
|
211 2.110000e+00 2.110000e+00 1.086023e-02 |
||||
|
212 2.120000e+00 2.120000e+00 9.566064e-03 |
||||
|
213 2.130000e+00 2.130000e+00 8.358590e-03 |
||||
|
214 2.140000e+00 2.140000e+00 7.240340e-03 |
||||
|
215 2.150000e+00 2.150000e+00 6.213542e-03 |
||||
|
216 2.160000e+00 2.160000e+00 5.279884e-03 |
||||
|
217 2.170000e+00 2.170000e+00 4.440246e-03 |
||||
|
218 2.180000e+00 2.180000e+00 3.694423e-03 |
||||
|
219 2.190000e+00 2.190000e+00 3.040853e-03 |
||||
|
220 2.200000e+00 2.200000e+00 2.476425e-03 |
||||
|
221 2.210000e+00 2.210000e+00 1.996391e-03 |
||||
|
222 2.220000e+00 2.220000e+00 1.594448e-03 |
||||
|
223 2.230000e+00 2.230000e+00 1.262999e-03 |
||||
|
224 2.240000e+00 2.240000e+00 9.935716e-04 |
||||
|
225 2.250000e+00 2.250000e+00 7.773425e-04 |
||||
|
226 2.260000e+00 2.260000e+00 6.056627e-04 |
||||
|
227 2.270000e+00 2.270000e+00 4.705014e-04 |
||||
|
228 2.280000e+00 2.280000e+00 3.647455e-04 |
||||
|
|
||||
|
Index v-sweep v(in) v(out) |
||||
|
-------------------------------------------------------------------------------- |
||||
|
229 2.290000e+00 2.290000e+00 2.823398e-04 |
||||
|
230 2.300000e+00 2.300000e+00 2.182915e-04 |
||||
|
231 2.310000e+00 2.310000e+00 1.685819e-04 |
||||
|
232 2.320000e+00 2.320000e+00 1.300315e-04 |
||||
|
233 2.330000e+00 2.330000e+00 1.001518e-04 |
||||
|
234 2.340000e+00 2.340000e+00 7.700730e-05 |
||||
|
235 2.350000e+00 2.350000e+00 5.909602e-05 |
||||
|
236 2.360000e+00 2.360000e+00 4.525240e-05 |
||||
|
237 2.370000e+00 2.370000e+00 3.457075e-05 |
||||
|
238 2.380000e+00 2.380000e+00 2.634594e-05 |
||||
|
239 2.390000e+00 2.390000e+00 2.002815e-05 |
||||
|
240 2.400000e+00 2.400000e+00 1.518814e-05 |
||||
|
241 2.410000e+00 2.410000e+00 1.149079e-05 |
||||
|
242 2.420000e+00 2.420000e+00 8.674634e-06 |
||||
|
243 2.430000e+00 2.430000e+00 6.536017e-06 |
||||
|
244 2.440000e+00 2.440000e+00 4.916669e-06 |
||||
|
245 2.450000e+00 2.450000e+00 3.693987e-06 |
||||
|
246 2.460000e+00 2.460000e+00 2.773298e-06 |
||||
|
247 2.470000e+00 2.470000e+00 2.081773e-06 |
||||
|
248 2.480000e+00 2.480000e+00 1.563599e-06 |
||||
|
249 2.490000e+00 2.490000e+00 1.176165e-06 |
||||
|
250 2.500000e+00 2.500000e+00 8.870574e-07 |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
7492
tests/bsim3soipd/ring51.out
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1913
tests/bsim3soipd/t3.out
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1442
tests/bsim3soipd/t4.out
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1442
tests/bsim3soipd/t5.out
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
Write
Preview
Loading…
Cancel
Save
Reference in new issue