Added support for bsim3soi fd devices (fully depleted).
This commit is contained in:
parent
6f1f43a242
commit
97e77a523e
12
DEVICES
12
DEVICES
|
|
@ -165,12 +165,18 @@ BSIM3SOI_DD - SOI model (dynamic depletion)
|
|||
NOT YET IMPLEMENTED.
|
||||
|
||||
BSIM3SOI_FD - SOI model (fully depleted devices)
|
||||
NOT YET IMPLEMENTED.
|
||||
Initial Release Ver: 2.1. TO BE TESTED.
|
||||
FD model has been integrated as Level = 10
|
||||
There is a bsim3soifd directory under the test
|
||||
hierarchy. Test circuits come from the bsim3soi
|
||||
web site at:
|
||||
http://www-device.eecs.berkeley.edu/~bsimsoi
|
||||
|
||||
BSIM3SOI_PD - SOI model (partially depleted devices)
|
||||
Initial Release Ver: 2.2.1. TO BE TESTED
|
||||
Initial Release Ver: 2.2.1. TO BE TESTED.
|
||||
PD model has been integrated as Level = 9
|
||||
There is a bsim3soipd directory under the test
|
||||
hierarchy. The tests come from the bsim3soi
|
||||
hierarchy. Test circuits come from the bsim3soi
|
||||
web site at:
|
||||
http://www-device.eecs.berkeley.edu/~bsimsoi
|
||||
|
||||
|
|
|
|||
|
|
@ -215,6 +215,7 @@ src/spicelib/devices/bsim3/Makefile \
|
|||
src/spicelib/devices/bsim4/Makefile \
|
||||
src/spicelib/devices/bsim3v2/Makefile \
|
||||
src/spicelib/devices/bsim3soi_pd/Makefile \
|
||||
src/spicelib/devices/bsim3soi_fd/Makefile \
|
||||
src/spicelib/devices/cap/Makefile \
|
||||
src/spicelib/devices/cccs/Makefile \
|
||||
src/spicelib/devices/ccvs/Makefile \
|
||||
|
|
@ -254,4 +255,6 @@ tests/Makefile \
|
|||
tests/filters/Makefile \
|
||||
tests/polezero/Makefile \
|
||||
tests/resistance/Makefile \
|
||||
tests/bsim3soipd/Makefile \
|
||||
tests/bsim3soifd/Makefile
|
||||
)
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ DYNAMIC_DEVICELIBS = \
|
|||
spicelib/devices/bsim4/libbsim4.la \
|
||||
spicelib/devices/cap/libcap.la \
|
||||
spicelib/devices/bsim3soi_pd/libbsim3soipd.la \
|
||||
spicelib/devices/bsim3soi_fd/libbsim3soifd.la \
|
||||
spicelib/devices/cccs/libcccs.la \
|
||||
spicelib/devices/ccvs/libccvs.la \
|
||||
spicelib/devices/ccvs/libccvs.la \
|
||||
|
|
|
|||
|
|
@ -931,7 +931,7 @@ inp_numnodes(char c)
|
|||
case 'j': return (3);
|
||||
case 'k': return (0);
|
||||
case 'l': return (2);
|
||||
case 'm': return (4);
|
||||
case 'm': return (7);
|
||||
case 'o': return (4);
|
||||
case 'q': return (4);
|
||||
case 'r': return (2);
|
||||
|
|
|
|||
|
|
@ -307,7 +307,7 @@ cp_setparse(wordlist *wl)
|
|||
}
|
||||
vv = alloc(struct variable);
|
||||
vv->va_next = NULL;
|
||||
ss = cp_unquote(wl->wl_word);
|
||||
copyval = ss = cp_unquote(wl->wl_word);
|
||||
td = ft_numparse(&ss, FALSE);
|
||||
if (td) {
|
||||
vv->va_type = VT_REAL;
|
||||
|
|
@ -316,7 +316,7 @@ cp_setparse(wordlist *wl)
|
|||
vv->va_type = VT_STRING;
|
||||
vv->va_string = copy(ss);
|
||||
}
|
||||
tfree(ss);/*DG: must free ss any way to avoid cp_unquote memory leak*/
|
||||
tfree(copyval);/*DG: must free ss any way to avoid cp_unquote memory leak*/
|
||||
if (listv) {
|
||||
lv->va_next = vv;
|
||||
lv = vv;
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
#ifndef CKT
|
||||
#define CKT "CKTdefs.h $Revision$ on $Date$ "
|
||||
|
||||
#define MAXNUMDEVS 32 /* Max number of possible devices; */
|
||||
#define MAXNUMDEVS 33 /* Max number of possible devices; */
|
||||
extern int DEVmaxnum; /* Not sure if still used */
|
||||
#define MAXNUMDEVNODES 4 /* Max No. of nodes per device */
|
||||
/* Need to change for SOI devs ? */
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ SUBDIRS = \
|
|||
bsim3v1 \
|
||||
bsim3v2 \
|
||||
bsim3soi_pd \
|
||||
bsim3soi_fd \
|
||||
cap \
|
||||
cccs \
|
||||
ccvs \
|
||||
|
|
|
|||
|
|
@ -17,11 +17,11 @@ Modified by Pin Su 99/9/27
|
|||
int
|
||||
B3SOIPDacLoad (inModel, ckt)
|
||||
GENmodel *inModel;
|
||||
register CKTcircuit *ckt;
|
||||
CKTcircuit *ckt;
|
||||
{
|
||||
register B3SOIPDmodel *model = (B3SOIPDmodel *) inModel;
|
||||
register B3SOIPDinstance *here;
|
||||
register int selfheat;
|
||||
B3SOIPDmodel *model = (B3SOIPDmodel *) inModel;
|
||||
B3SOIPDinstance *here;
|
||||
int selfheat;
|
||||
double xcggb, xcgdb, xcgsb, xcgeb, xcgT;
|
||||
double xcdgb, xcddb, xcdsb, xcdeb, xcdT;
|
||||
double xcsgb, xcsdb, xcssb, xcseb, xcsT;
|
||||
|
|
|
|||
|
|
@ -21,8 +21,8 @@ Modified by Pin Su 00/3/1
|
|||
|
||||
int
|
||||
B3SOIPDcheckModel (model, here, ckt)
|
||||
register B3SOIPDmodel *model;
|
||||
register B3SOIPDinstance *here;
|
||||
B3SOIPDmodel *model;
|
||||
B3SOIPDinstance *here;
|
||||
CKTcircuit *ckt;
|
||||
{
|
||||
struct b3soipdSizeDependParam *pParam;
|
||||
|
|
|
|||
|
|
@ -20,10 +20,10 @@ File: b3soipdcvtest.c 98/5/01
|
|||
int
|
||||
B3SOIPDconvTest (inModel, ckt)
|
||||
GENmodel *inModel;
|
||||
register CKTcircuit *ckt;
|
||||
CKTcircuit *ckt;
|
||||
{
|
||||
register B3SOIPDmodel *model = (B3SOIPDmodel *) inModel;
|
||||
register B3SOIPDinstance *here;
|
||||
B3SOIPDmodel *model = (B3SOIPDmodel *) inModel;
|
||||
B3SOIPDinstance *here;
|
||||
double delvbd, delvbs, delvds, delvgd, delvgs, vbd, vbs, vds;
|
||||
double cbd, cbhat, cbs, cd, cdhat, tol, vgd, vgdo, vgs;
|
||||
|
||||
|
|
|
|||
|
|
@ -94,11 +94,11 @@ B3SOIPDlimit (vnew, vold, limit, check)
|
|||
int
|
||||
B3SOIPDload (inModel, ckt)
|
||||
GENmodel *inModel;
|
||||
register CKTcircuit *ckt;
|
||||
CKTcircuit *ckt;
|
||||
{
|
||||
register B3SOIPDmodel *model = (B3SOIPDmodel *) inModel;
|
||||
register B3SOIPDinstance *here;
|
||||
register int selfheat;
|
||||
B3SOIPDmodel *model = (B3SOIPDmodel *) inModel;
|
||||
B3SOIPDinstance *here;
|
||||
int selfheat;
|
||||
|
||||
double SourceSatCurrent, DrainSatCurrent, Gmin;
|
||||
double ag0, qgd, qgs, qgb, von, cbhat, VgstNVt, ExpVgst;
|
||||
|
|
|
|||
|
|
@ -101,11 +101,11 @@ B3SOIPDnoise (mode, operation, inModel, ckt, data, OnDens)
|
|||
int mode, operation;
|
||||
GENmodel *inModel;
|
||||
CKTcircuit *ckt;
|
||||
register Ndata *data;
|
||||
Ndata *data;
|
||||
double *OnDens;
|
||||
{
|
||||
register B3SOIPDmodel *model = (B3SOIPDmodel *) inModel;
|
||||
register B3SOIPDinstance *here;
|
||||
B3SOIPDmodel *model = (B3SOIPDmodel *) inModel;
|
||||
B3SOIPDinstance *here;
|
||||
struct b3soipdSizeDependParam *pParam;
|
||||
char name[N_MXVLNTH];
|
||||
double tempOnoise;
|
||||
|
|
|
|||
|
|
@ -16,11 +16,11 @@ File: b3soipzld.c 98/5/01
|
|||
int
|
||||
B3SOIPDpzLoad (inModel, ckt, s)
|
||||
GENmodel *inModel;
|
||||
register CKTcircuit *ckt;
|
||||
register SPcomplex *s;
|
||||
CKTcircuit *ckt;
|
||||
SPcomplex *s;
|
||||
{
|
||||
register B3SOIPDmodel *model = (B3SOIPDmodel *) inModel;
|
||||
register B3SOIPDinstance *here;
|
||||
B3SOIPDmodel *model = (B3SOIPDmodel *) inModel;
|
||||
B3SOIPDinstance *here;
|
||||
double xcggb, xcgdb, xcgsb, xcbgb, xcbdb, xcbsb, xcddb, xcssb, xcdgb;
|
||||
double gdpr, gspr, gds, gbd, gbs, capbd, capbs, xcsgb, xcdsb, xcsdb;
|
||||
double cggb, cgdb, cgsb, cbgb, cbdb, cbsb, cddb, cdgb, cdsb;
|
||||
|
|
|
|||
|
|
@ -28,13 +28,13 @@ Modified by Pin Su 00/3/1
|
|||
|
||||
int
|
||||
B3SOIPDsetup (matrix, inModel, ckt, states)
|
||||
register SMPmatrix *matrix;
|
||||
register GENmodel *inModel;
|
||||
register CKTcircuit *ckt;
|
||||
SMPmatrix *matrix;
|
||||
GENmodel *inModel;
|
||||
CKTcircuit *ckt;
|
||||
int *states;
|
||||
{
|
||||
register B3SOIPDmodel *model = (B3SOIPDmodel *) inModel;
|
||||
register B3SOIPDinstance *here;
|
||||
B3SOIPDmodel *model = (B3SOIPDmodel *) inModel;
|
||||
B3SOIPDinstance *here;
|
||||
int error;
|
||||
CKTnode *tmp;
|
||||
|
||||
|
|
|
|||
|
|
@ -47,8 +47,8 @@ B3SOIPDtemp (inModel, ckt)
|
|||
GENmodel *inModel;
|
||||
CKTcircuit *ckt;
|
||||
{
|
||||
register B3SOIPDmodel *model = (B3SOIPDmodel *) inModel;
|
||||
register B3SOIPDinstance *here;
|
||||
B3SOIPDmodel *model = (B3SOIPDmodel *) inModel;
|
||||
B3SOIPDinstance *here;
|
||||
struct b3soipdSizeDependParam *pSizeDependParamKnot, *pLastKnot, *pParam;
|
||||
double tmp, tmp1, tmp2, Eg, Eg0, ni, T0, T1, T2, T3, T4, T5, T6, Ldrn, Wdrn;
|
||||
double Temp, TempRatio, Inv_L, Inv_W, Inv_LW, Dw, Dl, Vtm0, Tnom;
|
||||
|
|
|
|||
|
|
@ -17,11 +17,11 @@ File: b3soipdtrunc.c 98/5/01
|
|||
int
|
||||
B3SOIPDtrunc (inModel, ckt, timeStep)
|
||||
GENmodel *inModel;
|
||||
register CKTcircuit *ckt;
|
||||
CKTcircuit *ckt;
|
||||
double *timeStep;
|
||||
{
|
||||
register B3SOIPDmodel *model = (B3SOIPDmodel *) inModel;
|
||||
register B3SOIPDinstance *here;
|
||||
B3SOIPDmodel *model = (B3SOIPDmodel *) inModel;
|
||||
B3SOIPDinstance *here;
|
||||
|
||||
#ifdef STEPDEBUG
|
||||
double debugtemp;
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@
|
|||
|
||||
#include "dev.h"
|
||||
|
||||
#define DEVICES_USED "asrc bjt bsim1 bsim2 bsim3 bsim3v2 bsim3v1 bsim4 bsim3soipd cap cccs ccvs csw dio ind isrc jfet ltra mes mos1 mos2 mos3 mos6 res sw tra urc vccs vcvs vsrc"
|
||||
#define DEVICES_USED "asrc bjt bsim1 bsim2 bsim3 bsim3v2 bsim3v1 bsim4 bsim3soipd bsim3soifd cap cccs ccvs csw dio ind isrc jfet ltra mes mos1 mos2 mos3 mos6 res sw tra urc vccs vcvs vsrc"
|
||||
|
||||
/*
|
||||
* Analyses
|
||||
|
|
@ -62,6 +62,7 @@
|
|||
#include "bsim3v2/bsim3v2itf.h"
|
||||
#include "bsim4/bsim4itf.h"
|
||||
#include "bsim3soi_pd/b3soipditf.h"
|
||||
#include "bsim3soi_fd/b3soifditf.h"
|
||||
#include "cap/capitf.h"
|
||||
#include "cccs/cccsitf.h"
|
||||
#include "ccvs/ccvsitf.h"
|
||||
|
|
@ -86,7 +87,7 @@
|
|||
#include "vsrc/vsrcitf.h"
|
||||
|
||||
|
||||
#define DEVNUM 32
|
||||
#define DEVNUM 33
|
||||
|
||||
SPICEdev *DEVices[DEVNUM];
|
||||
|
||||
|
|
@ -105,29 +106,30 @@ spice_init_devices(void)
|
|||
DEVices[ 7] = get_bsim3v2_info();
|
||||
DEVices[ 8] = get_bsim4_info();
|
||||
DEVices[ 9] = get_b3soipd_info();
|
||||
DEVices[10] = get_cap_info();
|
||||
DEVices[11] = get_cccs_info();
|
||||
DEVices[12] = get_ccvs_info();
|
||||
DEVices[13] = get_csw_info();
|
||||
DEVices[14] = get_dio_info();
|
||||
DEVices[15] = get_ind_info();
|
||||
DEVices[16] = get_mut_info();
|
||||
DEVices[17] = get_isrc_info();
|
||||
DEVices[18] = get_jfet_info();
|
||||
DEVices[19] = get_jfet2_info();
|
||||
DEVices[20] = get_ltra_info();
|
||||
DEVices[21] = get_mes_info();
|
||||
DEVices[22] = get_mos1_info();
|
||||
DEVices[23] = get_mos2_info();
|
||||
DEVices[24] = get_mos3_info();
|
||||
DEVices[25] = get_mos6_info();
|
||||
DEVices[26] = get_res_info();
|
||||
DEVices[27] = get_sw_info();
|
||||
DEVices[28] = get_tra_info();
|
||||
DEVices[29] = get_vccs_info();
|
||||
DEVices[30] = get_vcvs_info();
|
||||
DEVices[31] = get_vsrc_info();
|
||||
assert(32 == DEVNUM);
|
||||
DEVices[10] = get_b3soifd_info();
|
||||
DEVices[11] = get_cap_info();
|
||||
DEVices[12] = get_cccs_info();
|
||||
DEVices[13] = get_ccvs_info();
|
||||
DEVices[14] = get_csw_info();
|
||||
DEVices[15] = get_dio_info();
|
||||
DEVices[16] = get_ind_info();
|
||||
DEVices[17] = get_mut_info();
|
||||
DEVices[18] = get_isrc_info();
|
||||
DEVices[19] = get_jfet_info();
|
||||
DEVices[20] = get_jfet2_info();
|
||||
DEVices[21] = get_ltra_info();
|
||||
DEVices[22] = get_mes_info();
|
||||
DEVices[23] = get_mos1_info();
|
||||
DEVices[24] = get_mos2_info();
|
||||
DEVices[25] = get_mos3_info();
|
||||
DEVices[26] = get_mos6_info();
|
||||
DEVices[27] = get_res_info();
|
||||
DEVices[28] = get_sw_info();
|
||||
DEVices[29] = get_tra_info();
|
||||
DEVices[30] = get_vccs_info();
|
||||
DEVices[31] = get_vcvs_info();
|
||||
DEVices[32] = get_vsrc_info();
|
||||
assert(33 == DEVNUM);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -163,6 +163,14 @@ char *INPdomodel(void *ckt, card * image, INPtables * tab)
|
|||
("Device type B3SOIPD not available in this binary\n");
|
||||
}
|
||||
break;
|
||||
case 10:
|
||||
type = INPtypelook("B3SOIFD");
|
||||
if (type < 0) {
|
||||
err =
|
||||
INPmkTemp
|
||||
("Device type B3SOIFD not available in this binary\n");
|
||||
}
|
||||
break;
|
||||
case 14:
|
||||
type = INPtypelook("BSIM4");
|
||||
if (type < 0) {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
SUBDIRS = resistance filters polezero bsim3soipd
|
||||
SUBDIRS = resistance filters polezero bsim3soipd bsim3soifd
|
||||
|
||||
TESTS = \
|
||||
diffpair.cir \
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
* BSIMSOI example
|
||||
* BSIMSOI (PD) example
|
||||
*
|
||||
* SOI, Ramp Vg
|
||||
|
||||
|
|
@ -12,7 +12,8 @@ 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
|
||||
.save @m1[Vbs], V(g)/10
|
||||
.print tran v(g)/10
|
||||
.include nmospd.mod
|
||||
|
||||
.end
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
* model = BSIMSOI
|
||||
* model = BSIMSOI (PD)
|
||||
*
|
||||
*
|
||||
* SOI Inverter - floating body
|
||||
|
|
@ -12,6 +12,6 @@ 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)
|
||||
.print dc v(in), v(out)
|
||||
.include nmospd.mod
|
||||
.include pmospd.mod
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
* 51 stage Ring-Osc.
|
||||
* 51 stage Ring-Osc. (PD)
|
||||
|
||||
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
|
||||
|
|
@ -14,9 +14,12 @@ cout buf ss 1pF
|
|||
xdum ss dum
|
||||
|
||||
.option itl1=500 gmin=1e-15 itl4=10
|
||||
*.dc vdd 0 2 0.01
|
||||
.dc vdd 0 2 0.01
|
||||
.tran 0.2n 50n
|
||||
|
||||
.print dc v(out)
|
||||
.print tran v(out)
|
||||
|
||||
.include nmospd.mod
|
||||
.include pmospd.mod
|
||||
.include lib.h
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
*model = BSIMSOI
|
||||
*model = BSIMSOI (PD)
|
||||
*Berkeley Spice Compatibility
|
||||
*
|
||||
* SOI NMOSFET, floating body simulation
|
||||
|
|
@ -13,6 +13,6 @@ 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)
|
||||
.print dc v(g), i(vs)
|
||||
.include nmospd.mod
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
*model = BSIMSOI
|
||||
*model = BSIMSOI (PD)
|
||||
*Berkeley Spice Compatibility
|
||||
*
|
||||
* SOI NMOSFET, tied body simulation
|
||||
|
|
@ -13,7 +13,6 @@ 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
|
||||
.print dc i(vs)
|
||||
.include nmospd.mod
|
||||
|
||||
* For PD, the command '.include nmosfd.mod ' should
|
||||
* be replaced with '.include nmospd.mod'.
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
*model = BSIMSOI
|
||||
*model = BSIMSOI (PD)
|
||||
*Berkeley Spice Compatibility
|
||||
*
|
||||
* SOI NMOSFET, floating body simulation
|
||||
|
|
@ -12,7 +12,5 @@ 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
|
||||
.print dc i(vs)
|
||||
.include nmospd.mod
|
||||
|
||||
* For PD, the command '.include nmosfd.mod ' should
|
||||
* be replaced with '.include nmospd.mod'.
|
||||
|
|
|
|||
Loading…
Reference in New Issue