update `bsim3soi' aka `b4soi'
This commit is contained in:
parent
5bb4c56165
commit
1c4f960b45
|
|
@ -15,15 +15,15 @@ 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.
|
||||
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.
|
||||
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.
|
||||
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.
|
||||
the software on any copy or modification of such made available
|
||||
to others.
|
||||
|
|
|
|||
|
|
@ -3,29 +3,29 @@
|
|||
noinst_LTLIBRARIES = libbsim4soi.la
|
||||
|
||||
libbsim4soi_la_SOURCES = \
|
||||
b4soi.c \
|
||||
b4soiacld.c \
|
||||
b4soiask.c \
|
||||
b4soicheck.c \
|
||||
b4soicvtest.c \
|
||||
b4soidel.c \
|
||||
b4soidest.c \
|
||||
b4soigetic.c \
|
||||
b4soild.c \
|
||||
b4soimask.c \
|
||||
b4soimdel.c \
|
||||
b4soimpar.c \
|
||||
b4soinoi.c \
|
||||
b4soipar.c \
|
||||
b4soipzld.c \
|
||||
b4soiset.c \
|
||||
b4soitemp.c \
|
||||
b4soitrunc.c \
|
||||
b4soidef.h \
|
||||
b4soiext.h \
|
||||
b4soiinit.c \
|
||||
b4soiinit.h \
|
||||
b4soiitf.h
|
||||
b4soi.c \
|
||||
b4soiacld.c \
|
||||
b4soiask.c \
|
||||
b4soicheck.c \
|
||||
b4soicvtest.c \
|
||||
b4soidel.c \
|
||||
b4soidest.c \
|
||||
b4soigetic.c \
|
||||
b4soild.c \
|
||||
b4soimask.c \
|
||||
b4soimdel.c \
|
||||
b4soimpar.c \
|
||||
b4soinoi.c \
|
||||
b4soipar.c \
|
||||
b4soipzld.c \
|
||||
b4soiset.c \
|
||||
b4soitemp.c \
|
||||
b4soitrunc.c \
|
||||
b4soidef.h \
|
||||
b4soiext.h \
|
||||
b4soiinit.c \
|
||||
b4soiinit.h \
|
||||
b4soiitf.h
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*** B4SOI 12/16/2010 Released by Tanvir Morshed ***/
|
||||
|
||||
/*** B4SOI 04/27/2010 Released by Tanvir Morshed ***/
|
||||
|
||||
/**********
|
||||
* Copyright 2010 Regents of the University of California. All rights reserved.
|
||||
|
|
@ -7,11 +7,13 @@
|
|||
* Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soi.c
|
||||
* Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu.
|
||||
* Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu.
|
||||
* Authors: 2010- Tanvir Morshed, Ali Niknejad, Chenming Hu.
|
||||
* File: b4soi.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
* Modified by Tanvir Morshed 09/22/2009
|
||||
* Modified by Tanvir Morshed 12/31/2009
|
||||
* Modified by Tanvir Morshed 12/16/2010
|
||||
**********/
|
||||
|
||||
#include "ngspice/ngspice.h"
|
||||
|
|
@ -46,7 +48,7 @@ OP( "ids", B4SOI_CD, IF_REAL, "Ids"),
|
|||
OP( "vbs", B4SOI_VBS, IF_REAL, "Vbs"),
|
||||
OP( "vgs", B4SOI_VGS, IF_REAL, "Vgs"),
|
||||
OP( "vds", B4SOI_VDS, IF_REAL, "Vds"),
|
||||
OP( "ves", B4SOI_VES, IF_REAL, "Ves"),
|
||||
OP( "ves", B4SOI_VES, IF_REAL, "Ves"),
|
||||
OP( "ibd", B4SOI_IBD, IF_REAL, "Ibd"),
|
||||
OP( "ibs", B4SOI_IBS, IF_REAL, "Ibs"),
|
||||
OP( "isub", B4SOI_ISUB, IF_REAL, "Isub"),
|
||||
|
|
@ -78,8 +80,8 @@ OP( "debug2", B4SOI_DEBUG2, IF_REAL, "DebugOut2"),
|
|||
OP( "debug3", B4SOI_DEBUG3, IF_REAL, "DebugOut3"),
|
||||
#endif
|
||||
|
||||
IOP( "bjtoff", B4SOI_BJTOFF, IF_INTEGER, "BJT on/off flag"),
|
||||
IOP( "debug", B4SOI_DEBUG, IF_INTEGER, "DEBUG on/off flag"),
|
||||
IOP( "bjtoff", B4SOI_BJTOFF, IF_INTEGER, "BJT on/off flag"),
|
||||
IOP( "debug", B4SOI_DEBUG, IF_INTEGER, "DEBUG on/off flag"),
|
||||
IOP( "rth0", B4SOI_RTH0, IF_REAL, "Instance Thermal Resistance"),
|
||||
IOP( "cth0", B4SOI_CTH0, IF_REAL, "Instance Thermal Capacitance"),
|
||||
IOP( "nrb", B4SOI_NRB, IF_REAL, "Number of squares in body"),
|
||||
|
|
@ -236,6 +238,8 @@ IOP( "etsi", B4SOI_MOD_ETSI, IF_REAL, "Effective Silicon-on-insulator thickness
|
|||
IOP( "xj", B4SOI_MOD_XJ, IF_REAL, "Junction Depth"),
|
||||
IOP( "rth0", B4SOI_MOD_RTH0, IF_REAL, "Self-heating thermal resistance"),
|
||||
IOP( "cth0", B4SOI_MOD_CTH0, IF_REAL, "Self-heating thermal capacitance"),
|
||||
|
||||
IOP( "cfrcoeff", B4SOI_MOD_CFRCOEFF, IF_REAL, "Fringe Cap parameter"), /* v4.4 */
|
||||
IOP( "egidl", B4SOI_MOD_EGIDL, IF_REAL, "GIDL first parameter"),
|
||||
IOP( "agidl", B4SOI_MOD_AGIDL, IF_REAL, "GIDL second parameter"),
|
||||
IOP( "bgidl", B4SOI_MOD_BGIDL, IF_REAL, "GIDL third parameter"),
|
||||
|
|
@ -267,8 +271,8 @@ IOP( "pbswg", B4SOI_MOD_PBSWGS, IF_REAL, "Source(gate side) sidewall junction ca
|
|||
IOP( "pbswgd", B4SOI_MOD_PBSWGD, IF_REAL, "Drain(gate side) sidewall junction capacitance built in potential"), /* v4.0 */
|
||||
IOP( "mjswg", B4SOI_MOD_MJSWGS, IF_REAL, "Source (gate side) sidewall junction capacitance grading coefficient"), /* v4.0 */
|
||||
IOP( "mjswgd", B4SOI_MOD_MJSWGD, IF_REAL, "Drain (gate side) sidewall junction capacitance grading coefficient"), /* v4.0 */
|
||||
IOP( "cjswg", B4SOI_MOD_CJSWGS, IF_REAL, "Source(gate side) sidewall junction capacitance per unit width"), /* v4.0 */
|
||||
IOP( "cjswgd", B4SOI_MOD_CJSWGD, IF_REAL, "Drain (gate side) sidewall junction capacitance per unit width"), /* v4.0 */
|
||||
IOP( "cjswg", B4SOI_MOD_CJSWGS, IF_REAL, "Source(gate side) sidewall junction capacitance per unit width"), /* v4.0 */
|
||||
IOP( "cjswgd", B4SOI_MOD_CJSWGD, IF_REAL, "Drain (gate side) sidewall junction capacitance per unit width"), /* v4.0 */
|
||||
IOP( "lint", B4SOI_MOD_LINT, IF_REAL, "Length reduction parameter"),
|
||||
IOP( "ll", B4SOI_MOD_LL, IF_REAL, "Length reduction parameter"),
|
||||
IOP( "llc", B4SOI_MOD_LLC, IF_REAL, "Length reduction parameter"), /* v2.2.3 */
|
||||
|
|
@ -539,7 +543,7 @@ IOP( "xgl", B4SOI_MOD_XGL, IF_REAL, "Variation in Ldrawn"),
|
|||
/* 4.0 */
|
||||
IOP( "rbodymod", B4SOI_MOD_RBODYMOD, IF_INTEGER, "Body R model selector"),
|
||||
/* 4.0 */
|
||||
IOP( "rdsmod", B4SOI_MOD_RDSMOD, IF_INTEGER, "Bias-dependent S/D resistance model selector"), /* v4.0 */
|
||||
IOP( "rdsmod", B4SOI_MOD_RDSMOD, IF_INTEGER, "Bias-dependent S/D resistance model selector"), /* v4.0 */
|
||||
|
||||
/* v4.1 */
|
||||
IOP( "fdmod", B4SOI_MOD_FDMOD, IF_INTEGER, "Improved dVbi model selector"),
|
||||
|
|
@ -1114,10 +1118,10 @@ char *B4SOInames[] = {
|
|||
"Charge",
|
||||
};
|
||||
|
||||
int B4SOInSize = NUMELEMS(B4SOInames);
|
||||
int B4SOIpTSize = NUMELEMS(B4SOIpTable);
|
||||
int B4SOImPTSize = NUMELEMS(B4SOImPTable);
|
||||
int B4SOIiSize = sizeof(B4SOIinstance);
|
||||
int B4SOImSize = sizeof(B4SOImodel);
|
||||
int B4SOInSize = NUMELEMS(B4SOInames);
|
||||
int B4SOIpTSize = NUMELEMS(B4SOIpTable);
|
||||
int B4SOImPTSize = NUMELEMS(B4SOImPTable);
|
||||
int B4SOIiSize = sizeof(B4SOIinstance);
|
||||
int B4SOImSize = sizeof(B4SOImodel);
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
/*** B4SOI 04/27/2010 Released by Tanvir Morshed ***/
|
||||
/*** B4SOI 12/16/2010 Released by Tanvir Morshed ***/
|
||||
|
||||
|
||||
/**********
|
||||
* Copyright 2010 Regents of the University of California. All rights reserved.
|
||||
|
|
@ -6,6 +7,7 @@
|
|||
* Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soiacld.c
|
||||
* Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu.
|
||||
* Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu.
|
||||
* Authors: 2010- Tanvir Morshed, Ali Niknejad, Chenming Hu.
|
||||
* File: b4soiacld.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
|
|
@ -21,7 +23,9 @@
|
|||
|
||||
|
||||
int
|
||||
B4SOIacLoad(GENmodel *inModel, CKTcircuit *ckt)
|
||||
B4SOIacLoad(
|
||||
GENmodel *inModel,
|
||||
CKTcircuit *ckt)
|
||||
{
|
||||
register B4SOImodel *model = (B4SOImodel*)inModel;
|
||||
register B4SOIinstance *here;
|
||||
|
|
@ -76,18 +80,19 @@ double m;
|
|||
|
||||
for (here = model->B4SOIinstances; here!= NULL;
|
||||
here = here->B4SOInextInstance)
|
||||
{
|
||||
{
|
||||
if (here->B4SOIowner != ARCHme) continue;
|
||||
selfheat = (model->B4SOIshMod == 1) && (here->B4SOIrth0 != 0.0);
|
||||
if (here->B4SOImode >= 0)
|
||||
{ Gm = here->B4SOIgm;
|
||||
Gmbs = here->B4SOIgmbs;
|
||||
{ Gm = here->B4SOIgm;
|
||||
Gmbs = here->B4SOIgmbs;
|
||||
|
||||
/* v3.0 */
|
||||
Gme = here->B4SOIgme;
|
||||
|
||||
GmT = model->B4SOItype * here->B4SOIgmT;
|
||||
FwdSum = Gm + Gmbs + Gme; /* v3.0 */
|
||||
RevSum = 0.0;
|
||||
FwdSum = Gm + Gmbs + Gme; /* v3.0 */
|
||||
RevSum = 0.0;
|
||||
|
||||
cbgb = here->B4SOIcbgb;
|
||||
cbsb = here->B4SOIcbsb;
|
||||
|
|
@ -120,7 +125,7 @@ double m;
|
|||
gigd = here->B4SOIgigd;
|
||||
gigT = model->B4SOItype * here->B4SOIgigT;
|
||||
|
||||
/* v4.1 */
|
||||
/* v4.1 */
|
||||
gigpg = here->B4SOIgigpg;
|
||||
gigpp = here->B4SOIgigpp;
|
||||
|
||||
|
|
@ -132,7 +137,7 @@ double m;
|
|||
gbbe = -here->B4SOIgbes;
|
||||
|
||||
if (here->B4SOIrbodyMod) { /* v4.0 */
|
||||
gbbdp = -here->B4SOIgiigidld;
|
||||
gbbdp = -here->B4SOIgiigidld;
|
||||
gbbb = -here->B4SOIgbgiigbpb;
|
||||
}
|
||||
|
||||
|
|
@ -140,10 +145,10 @@ double m;
|
|||
|
||||
gddpg = -here->B4SOIgjdg;
|
||||
gddpdp = -here->B4SOIgjdd;
|
||||
if (!here->B4SOIrbodyMod) /* v4.0 */
|
||||
gddpb = -here->B4SOIgjdb;
|
||||
else
|
||||
gddpb = here->B4SOIgiigidlb;
|
||||
if (!here->B4SOIrbodyMod) /* v4.0 */
|
||||
gddpb = -here->B4SOIgjdb;
|
||||
else
|
||||
gddpb = here->B4SOIgiigidlb;
|
||||
|
||||
gddpT = -model->B4SOItype * here->B4SOIgjdT;
|
||||
|
||||
|
|
@ -153,16 +158,16 @@ double m;
|
|||
|
||||
gsspg = -here->B4SOIgjsg;
|
||||
gsspdp = -here->B4SOIgjsd;
|
||||
if (!here->B4SOIrbodyMod) /* v4.0 */
|
||||
gsspb = -here->B4SOIgjsb;
|
||||
else
|
||||
gsspb = 0.0;
|
||||
if (!here->B4SOIrbodyMod) /* v4.0 */
|
||||
gsspb = -here->B4SOIgjsb;
|
||||
else
|
||||
gsspb = 0.0;
|
||||
gsspT = -model->B4SOItype * here->B4SOIgjsT;
|
||||
|
||||
gsspe = 0.0;
|
||||
gsspsp = - (gsspg + gsspdp + gsspb + gsspe);
|
||||
|
||||
gppb = -here->B4SOIgbpbs;
|
||||
gppb = -here->B4SOIgbpbs;
|
||||
gppp = -here->B4SOIgbpps;
|
||||
|
||||
gTtg = here->B4SOIgtempg;
|
||||
|
|
@ -204,7 +209,7 @@ double m;
|
|||
sxpart = 0.6;
|
||||
dxpart = 0.4;
|
||||
|
||||
/* v3.1 for RF */
|
||||
/* v3.1 for RF */
|
||||
if (here->B4SOIrgateMod == 2)
|
||||
T0 = *(ckt->CKTstates[0] + here->B4SOIvges)
|
||||
- *(ckt->CKTstates[0] + here->B4SOIvgs);
|
||||
|
|
@ -221,19 +226,19 @@ double m;
|
|||
}
|
||||
else
|
||||
gcrg = gcrgd = gcrgg = gcrgs = gcrgb = 0.0;
|
||||
/* v3.1 for RF end*/
|
||||
/* v3.1 for RF end*/
|
||||
|
||||
}
|
||||
else
|
||||
{ Gm = -here->B4SOIgm;
|
||||
Gmbs = -here->B4SOIgmbs;
|
||||
else
|
||||
{ Gm = -here->B4SOIgm;
|
||||
Gmbs = -here->B4SOIgmbs;
|
||||
|
||||
/* v3.0 */
|
||||
Gme = -here->B4SOIgme;
|
||||
|
||||
GmT = -model->B4SOItype * here->B4SOIgmT;
|
||||
FwdSum = 0.0;
|
||||
RevSum = -Gm - Gmbs - Gme; /* v3.0 */
|
||||
FwdSum = 0.0;
|
||||
RevSum = -Gm - Gmbs - Gme; /* v3.0 */
|
||||
|
||||
cdgb = - (here->B4SOIcdgb + here->B4SOIcggb + here->B4SOIcbgb);
|
||||
cdsb = - (here->B4SOIcddb + here->B4SOIcgdb + here->B4SOIcbdb);
|
||||
|
|
@ -269,7 +274,7 @@ double m;
|
|||
|
||||
gigpg = here->B4SOIgigpg;/* bugfix_snps for setting gigpg gigpp*/
|
||||
gigpp = here->B4SOIgigpp;
|
||||
|
||||
|
||||
gbbg = -here->B4SOIgbgs;
|
||||
gbbb = -here->B4SOIgbbs;
|
||||
gbbp = -here->B4SOIgbps;
|
||||
|
|
@ -287,10 +292,10 @@ double m;
|
|||
|
||||
gddpg = -here->B4SOIgjsg;
|
||||
gddpsp = -here->B4SOIgjsd;
|
||||
if (!here->B4SOIrbodyMod) /* v4.0 */
|
||||
gddpb = -here->B4SOIgjsb;
|
||||
else
|
||||
gddpb = 0.0;
|
||||
if (!here->B4SOIrbodyMod) /* v4.0 */
|
||||
gddpb = -here->B4SOIgjsb;
|
||||
else
|
||||
gddpb = 0.0;
|
||||
|
||||
gddpT = -model->B4SOItype * here->B4SOIgjsT;
|
||||
|
||||
|
|
@ -300,10 +305,10 @@ double m;
|
|||
|
||||
gsspg = -here->B4SOIgjdg;
|
||||
gsspsp = -here->B4SOIgjdd;
|
||||
if (!here->B4SOIrbodyMod) /* v4.0 */
|
||||
gsspb = -here->B4SOIgjdb;
|
||||
else
|
||||
gsspb = here->B4SOIgiigidlb;
|
||||
if (!here->B4SOIrbodyMod) /* v4.0 */
|
||||
gsspb = -here->B4SOIgjdb;
|
||||
else
|
||||
gsspb = here->B4SOIgiigidlb;
|
||||
|
||||
gsspT = -model->B4SOItype * here->B4SOIgjdT;
|
||||
|
||||
|
|
@ -353,7 +358,7 @@ double m;
|
|||
sxpart = 0.4;
|
||||
dxpart = 0.6;
|
||||
|
||||
/* v3.1 for RF */
|
||||
/* v3.1 for RF */
|
||||
if (here->B4SOIrgateMod == 2)
|
||||
T0 = *(ckt->CKTstates[0] + here->B4SOIvges)
|
||||
- *(ckt->CKTstates[0] + here->B4SOIvgs);
|
||||
|
|
@ -371,28 +376,28 @@ double m;
|
|||
else
|
||||
gcrg = gcrgd = gcrgg = gcrgs = gcrgb = 0.0;
|
||||
|
||||
/* v3.1 RF end*/
|
||||
/* v3.1 RF end*/
|
||||
|
||||
}
|
||||
|
||||
if (!model->B4SOIrdsMod) {
|
||||
gdpr=here->B4SOIdrainConductance;
|
||||
gspr=here->B4SOIsourceConductance;
|
||||
}
|
||||
else gdpr = gspr = 0.0;
|
||||
if (!model->B4SOIrdsMod) {
|
||||
gdpr=here->B4SOIdrainConductance;
|
||||
gspr=here->B4SOIsourceConductance;
|
||||
}
|
||||
else gdpr = gspr = 0.0;
|
||||
|
||||
|
||||
gds= here->B4SOIgds;
|
||||
|
||||
GSoverlapCap = here->B4SOIcgso;
|
||||
GDoverlapCap = here->B4SOIcgdo;
|
||||
GEoverlapCap = here->pParam->B4SOIcgeo;
|
||||
GSoverlapCap = here->B4SOIcgso;
|
||||
GDoverlapCap = here->B4SOIcgdo;
|
||||
GEoverlapCap = here->pParam->B4SOIcgeo;
|
||||
|
||||
EDextrinsicCap = here->B4SOIgcde;
|
||||
ESextrinsicCap = here->B4SOIgcse;
|
||||
|
||||
|
||||
/* v3.1 added for RF */
|
||||
/* v3.1 added for RF */
|
||||
if (here->B4SOIrgateMod == 3)
|
||||
{
|
||||
xcgmgmb = (GDoverlapCap + GSoverlapCap + GEoverlapCap ) * omega;
|
||||
|
|
@ -408,10 +413,10 @@ double m;
|
|||
xcdeb = (cdeb - EDextrinsicCap) * omega;
|
||||
xcddb = (cddb + GDoverlapCap + EDextrinsicCap) * omega;
|
||||
xceeb = (ceeb + GEoverlapCap + EDextrinsicCap + ESextrinsicCap)
|
||||
* omega;
|
||||
* omega;
|
||||
xcesb = -ESextrinsicCap * omega;
|
||||
xcssb = (GSoverlapCap + ESextrinsicCap - (cgsb + cbsb + cdsb))
|
||||
* omega;
|
||||
* omega;
|
||||
|
||||
xcseb = -(cbeb + cdeb + ceeb + ESextrinsicCap) * omega;
|
||||
|
||||
|
|
@ -440,23 +445,23 @@ double m;
|
|||
xcTt = cTt * omega;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
else
|
||||
{
|
||||
xcedb = -EDextrinsicCap * omega;
|
||||
xcdeb = (cdeb - EDextrinsicCap) * omega;
|
||||
xcddb = (cddb + GDoverlapCap + EDextrinsicCap) * omega;
|
||||
xceeb = (ceeb + GEoverlapCap + EDextrinsicCap + ESextrinsicCap)
|
||||
* omega;
|
||||
* omega;
|
||||
xcesb = -ESextrinsicCap * omega;
|
||||
xcssb = (GSoverlapCap + ESextrinsicCap - (cgsb + cbsb + cdsb))
|
||||
* omega;
|
||||
* omega;
|
||||
|
||||
xcseb = -(cbeb + cdeb + ceeb + ESextrinsicCap) * omega;
|
||||
|
||||
xcegb = (- GEoverlapCap) * omega;
|
||||
xceT = ceT * omega;
|
||||
xcggb = (cggb + GDoverlapCap + GSoverlapCap + GEoverlapCap)
|
||||
* omega;
|
||||
* omega;
|
||||
xcgdb = (cgdb - GDoverlapCap ) * omega;
|
||||
xcgsb = (cgsb - GSoverlapCap) * omega;
|
||||
xcgeb = (- GEoverlapCap) * omega;
|
||||
|
|
@ -477,11 +482,11 @@ double m;
|
|||
xcbT = cbT * omega;
|
||||
|
||||
xcTt = cTt * omega;
|
||||
|
||||
/* v3.1 */
|
||||
|
||||
/* v3.1 */
|
||||
xcdgmb = xcsgmb = xcegmb = 0.0;
|
||||
xcgmgmb = xcgmdb = xcgmsb = xcgmeb =0.0;
|
||||
}
|
||||
}
|
||||
|
||||
if (here->B4SOImode >= 0) { /* v4.0 */
|
||||
if (!here->B4SOIrbodyMod) {
|
||||
|
|
@ -496,16 +501,16 @@ double m;
|
|||
xcjdbdp = here->B4SOIcjdb * omega;
|
||||
xcjsbsp = here->B4SOIcjsb * omega;
|
||||
xcdbb = -(xcdgb + xcddb + xcdsb + xcdgmb + xcdeb)
|
||||
+ xcjdbdp;
|
||||
+ xcjdbdp;
|
||||
xcsbb = -(xcsgb + xcsdb + xcssb + xcsgmb + xcseb)
|
||||
+ xcjsbsp;
|
||||
+ xcjsbsp;
|
||||
xcdbdb = -here->B4SOIcjdb * omega;
|
||||
xcsbsb = -here->B4SOIcjsb * omega;
|
||||
xcbdb = here->B4SOIcbdb * omega - xcdbdb;
|
||||
xcbsb = here->B4SOIcbsb * omega - xcsbsb;
|
||||
}
|
||||
}
|
||||
else {
|
||||
}
|
||||
else {
|
||||
if (!here->B4SOIrbodyMod) {
|
||||
xcjdbdp = xcjsbsp = 0.0;
|
||||
xcdbb = -(xcdgb + xcddb + xcdsb + xcdgmb + xcdeb);
|
||||
|
|
@ -518,18 +523,18 @@ double m;
|
|||
xcjdbdp = here->B4SOIcjsb * omega;
|
||||
xcjsbsp = here->B4SOIcjdb * omega;
|
||||
xcdbb = -(xcdgb + xcddb + xcdsb + xcdgmb + xcdeb)
|
||||
+ xcjdbdp;
|
||||
+ xcjdbdp;
|
||||
xcsbb = -(xcsgb + xcsdb + xcssb + xcsgmb + xcseb)
|
||||
+ xcjsbsp;
|
||||
+ xcjsbsp;
|
||||
xcdbdb = -here->B4SOIcjsb * omega;
|
||||
xcsbsb = -here->B4SOIcjdb * omega;
|
||||
xcbdb = here->B4SOIcbsb * omega - xcdbdb;
|
||||
xcbsb = here->B4SOIcbdb * omega - xcsbsb;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (model->B4SOIrdsMod == 1)
|
||||
if (model->B4SOIrdsMod == 1)
|
||||
{ gstot = here->B4SOIgstot;
|
||||
gstotd = here->B4SOIgstotd;
|
||||
gstotg = here->B4SOIgstotg;
|
||||
|
|
@ -547,13 +552,13 @@ double m;
|
|||
gdtot = gdtotd = gdtotg = gdtots = gdtotb = 0.0;
|
||||
}
|
||||
|
||||
m = here->B4SOIm;
|
||||
m = here->B4SOIm;
|
||||
|
||||
/* v3.1 for RF */
|
||||
/* v3.1 for RF */
|
||||
geltd = here->B4SOIgrgeltd;
|
||||
if (here->B4SOIrgateMod == 1)
|
||||
{
|
||||
*(here->B4SOIGEgePtr) += m * geltd;
|
||||
*(here->B4SOIGEgePtr) += m * geltd;
|
||||
*(here->B4SOIGgePtr) -= m * geltd;
|
||||
*(here->B4SOIGEgPtr) -= m * geltd;
|
||||
*(here->B4SOIGgPtr) += m * (geltd + gigg + gIgtotg); /* v3.1.1 bug fix */
|
||||
|
|
@ -569,14 +574,14 @@ double m;
|
|||
*(here->B4SOIGEgPtr) += m * gcrgg;
|
||||
*(here->B4SOIGEdpPtr) += m * gcrgd;
|
||||
*(here->B4SOIGEspPtr) += m * gcrgs;
|
||||
if (here->B4SOIsoiMod != 2) /* v3.2 */
|
||||
if (here->B4SOIsoiMod != 2) /* v3.2 */
|
||||
*(here->B4SOIGEbPtr) += m * gcrgb;
|
||||
|
||||
*(here->B4SOIGgePtr) -= m * gcrg;
|
||||
*(here->B4SOIGgPtr) -= m * (gcrgg - gigg - gIgtotg); /* v3.1.1 bug fix */
|
||||
*(here->B4SOIGdpPtr) -= m * (gcrgd - gigd - gIgtotd); /* v3.1.1 bug fix */
|
||||
*(here->B4SOIGspPtr) -= m * (gcrgs - gigs - gIgtots); /* v3.1.1 bug fix */
|
||||
if (here->B4SOIsoiMod != 2) /* v3.2 */
|
||||
if (here->B4SOIsoiMod != 2) /* v3.2 */
|
||||
*(here->B4SOIGbPtr) -= m * (gcrgb - gigb - gIgtotb); /* v3.1.1 bug fix */
|
||||
}
|
||||
|
||||
|
|
@ -593,7 +598,7 @@ double m;
|
|||
*(here->B4SOIGMgPtr) += m * gcrgg;
|
||||
*(here->B4SOIGMspPtr) += m * gcrgs;
|
||||
*(here->B4SOIGMspPtr +1) += m * xcgmsb;
|
||||
if (here->B4SOIsoiMod != 2) /* v3.2 */
|
||||
if (here->B4SOIsoiMod != 2) /* v3.2 */
|
||||
*(here->B4SOIGMbPtr) += m * gcrgb;
|
||||
*(here->B4SOIGMePtr +1) += m * xcgmeb;
|
||||
|
||||
|
|
@ -605,7 +610,7 @@ double m;
|
|||
*(here->B4SOIGgPtr) -= m * (gcrgg - gigg - gIgtotg); /* v3.1.1 bug fix */
|
||||
*(here->B4SOIGdpPtr) -= m * (gcrgd - gigd - gIgtotd); /* v3.1.1 bug fix */
|
||||
*(here->B4SOIGspPtr) -= m * (gcrgs - gigs - gIgtots); /* v3.1.1 bug fix */
|
||||
if (here->B4SOIsoiMod != 2) /* v3.2 */
|
||||
if (here->B4SOIsoiMod != 2) /* v3.2 */
|
||||
*(here->B4SOIGbPtr) -= m * (gcrgb - gigb - gIgtotb); /* v3.1.1 bug fix */
|
||||
}
|
||||
else
|
||||
|
|
@ -613,20 +618,20 @@ double m;
|
|||
*(here->B4SOIGgPtr) += m * (gigg + gIgtotg); /* v3.1.1 bug fix */
|
||||
*(here->B4SOIGdpPtr) += m * (gigd + gIgtotd); /* v3.1.1 bug fix */
|
||||
*(here->B4SOIGspPtr) += m * (gigs + gIgtots); /* v3.1.1 bug fix */
|
||||
if (here->B4SOIsoiMod != 2) /* v3.2 */
|
||||
if (here->B4SOIsoiMod != 2) /* v3.2 */
|
||||
*(here->B4SOIGbPtr) += m * (gigb + gIgtotb); /* v3.1.1 bug fix */
|
||||
}
|
||||
/* v3.1 for RF end*/
|
||||
/* v3.1 for RF end*/
|
||||
|
||||
if (model->B4SOIrdsMod)
|
||||
{ (*(here->B4SOIDgPtr) += m * gdtotg);
|
||||
(*(here->B4SOIDspPtr) += m * gdtots);
|
||||
(*(here->B4SOISdpPtr) += m * gstotd);
|
||||
(*(here->B4SOISgPtr) += m * gstotg);
|
||||
if (here->B4SOIsoiMod != 2) {
|
||||
(*(here->B4SOIDbPtr) += m * gdtotb);
|
||||
(*(here->B4SOISbPtr) += m * gstotb);
|
||||
}
|
||||
if (here->B4SOIsoiMod != 2) {
|
||||
(*(here->B4SOIDbPtr) += m * gdtotb);
|
||||
(*(here->B4SOISbPtr) += m * gstotb);
|
||||
}
|
||||
}
|
||||
|
||||
*(here->B4SOIEdpPtr +1) += m * xcedb;
|
||||
|
|
@ -660,13 +665,13 @@ double m;
|
|||
|
||||
*(here->B4SOIEbPtr +1) -= m * (xcegb + xceeb + xcedb + xcesb);
|
||||
*(here->B4SOIGbPtr +1) -= m * (xcggb + xcgdb + xcgsb + xcgeb);
|
||||
/* *(here->B4SOIDPbPtr +1) -= xcdgb + xcddb + xcdsb + xcdeb;
|
||||
+ xcdgmb; */
|
||||
/* *(here->B4SOIDPbPtr +1) -= xcdgb + xcddb + xcdsb + xcdeb;
|
||||
+ xcdgmb; */
|
||||
|
||||
*(here->B4SOIDPbPtr +1) -= m * -xcdbb; /* v4.0 */
|
||||
|
||||
/* *(here->B4SOISPbPtr +1) -= xcsgb + xcsdb + xcssb + xcseb
|
||||
+ xcsgmb; */
|
||||
+ xcsgmb; */
|
||||
*(here->B4SOISPbPtr +1) -= m * -xcsbb; /* v4.0 */
|
||||
*(here->B4SOIBbPtr +1) -= m * (xcbgb + xcbdb + xcbsb + xcbeb);
|
||||
}
|
||||
|
|
@ -701,17 +706,17 @@ double m;
|
|||
|
||||
*(here->B4SOIDPgPtr) += m * (Gm + gddpg - gIdtotg -gdtotg); /* v4.0 */
|
||||
*(here->B4SOIDPdpPtr) += m * (gdpr + gds + gddpdp + RevSum - gIdtotd
|
||||
- gdtotd); /* v4.0 */
|
||||
- gdtotd); /* v4.0 */
|
||||
|
||||
*(here->B4SOIDPspPtr) -= m * (gds + FwdSum - gddpsp + gIdtots
|
||||
+ gdtots); /* v4.0 */
|
||||
+ gdtots); /* v4.0 */
|
||||
*(here->B4SOIDPdPtr) -= m * (gdpr + gdtot);
|
||||
|
||||
*(here->B4SOISPgPtr) -= m * (Gm - gsspg + gIstotg + gstotg); /* v4.0 */
|
||||
*(here->B4SOISPdpPtr) -= m * (gds + RevSum - gsspdp + gIstotd
|
||||
+ gstotd); /* v4.0 */
|
||||
+ gstotd); /* v4.0 */
|
||||
*(here->B4SOISPspPtr) += m * (gspr + gds + FwdSum + gsspsp - gIstots
|
||||
- gstots); /* v4.0 */
|
||||
- gstots); /* v4.0 */
|
||||
*(here->B4SOISPsPtr) -= m * (gspr + gstot);
|
||||
|
||||
|
||||
|
|
@ -724,9 +729,9 @@ double m;
|
|||
*(here->B4SOIBspPtr) += m * (gbbsp - gigs); /* v3.1 bug fix */
|
||||
*(here->B4SOIBbPtr) += m * (gbbb - gigb); /* v3.1 bug fix */
|
||||
*(here->B4SOISPbPtr) -= m * (Gmbs - gsspb + gIstotb + gstotb);
|
||||
/* v4.0 */
|
||||
/* v4.0 */
|
||||
*(here->B4SOIDPbPtr) -= m * ((-gddpb - Gmbs) + gIdtotb + gdtotb);
|
||||
/* v4.0 */
|
||||
/* v4.0 */
|
||||
}
|
||||
/* v3.1 */
|
||||
|
||||
|
|
@ -778,11 +783,11 @@ double m;
|
|||
|
||||
|
||||
|
||||
/* v4.0 */
|
||||
if (here->B4SOIrbodyMod)
|
||||
{
|
||||
(*(here->B4SOIDPdbPtr + 1) -= m * xcjdbdp);
|
||||
(*(here->B4SOIDPdbPtr) -= m * here->B4SOIGGjdb);
|
||||
/* v4.0 */
|
||||
if (here->B4SOIrbodyMod)
|
||||
{
|
||||
(*(here->B4SOIDPdbPtr + 1) -= m * xcjdbdp);
|
||||
(*(here->B4SOIDPdbPtr) -= m * here->B4SOIGGjdb);
|
||||
(*(here->B4SOISPsbPtr + 1) -= m * xcjsbsp);
|
||||
(*(here->B4SOISPsbPtr) -= m * here->B4SOIGGjsb);
|
||||
|
||||
|
|
@ -806,8 +811,7 @@ double m;
|
|||
(*(here->B4SOIBbPtr) += m * (here->B4SOIgrbsb
|
||||
+ here->B4SOIgrbdb));
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (here->B4SOIdebugMod != 0)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
/*** B4SOI 04/27/2010 Released by Tanvir Morshed ***/
|
||||
/*** B4SOI 12/16/2010 Released by Tanvir Morshed ***/
|
||||
|
||||
|
||||
/**********
|
||||
* Copyright 2010 Regents of the University of California. All rights reserved.
|
||||
|
|
@ -20,12 +21,15 @@
|
|||
#include "ngspice/devdefs.h"
|
||||
#include "b4soidef.h"
|
||||
#include "ngspice/sperror.h"
|
||||
|
||||
#include "ngspice/suffix.h"
|
||||
|
||||
int
|
||||
B4SOIask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select)
|
||||
|
||||
B4SOIask(
|
||||
CKTcircuit *ckt,
|
||||
GENinstance *inst,
|
||||
int which,
|
||||
IFvalue *value,
|
||||
IFvalue *select)
|
||||
{
|
||||
B4SOIinstance *here = (B4SOIinstance*)inst;
|
||||
|
||||
|
|
@ -81,9 +85,6 @@ B4SOIinstance *here = (B4SOIinstance*)inst;
|
|||
case B4SOI_QB:
|
||||
value->rValue = here->B4SOIqbulk;
|
||||
return(OK);
|
||||
case B4SOI_QG:
|
||||
value->rValue = here->B4SOIqgate;
|
||||
return(OK);
|
||||
case B4SOI_QD:
|
||||
value->rValue = here->B4SOIqdrn;
|
||||
return(OK);
|
||||
|
|
@ -188,7 +189,7 @@ B4SOIinstance *here = (B4SOIinstance*)inst;
|
|||
case B4SOI_AGBCP2:
|
||||
value->rValue = here->B4SOIagbcp2;
|
||||
return(OK); /* v4.1 for BC improvement */
|
||||
case B4SOI_AGBCPD: /* v4.0 */
|
||||
case B4SOI_AGBCPD: /* v4.0 */
|
||||
value->rValue = here->B4SOIagbcpd;
|
||||
return(OK);
|
||||
case B4SOI_AEBCP:
|
||||
|
|
@ -291,7 +292,7 @@ B4SOIinstance *here = (B4SOIinstance*)inst;
|
|||
case B4SOI_IGIDL:
|
||||
value->rValue = here->B4SOIigidl;
|
||||
return(OK);
|
||||
case B4SOI_IGISL:
|
||||
case B4SOI_IGISL:
|
||||
value->rValue = here->B4SOIigisl;
|
||||
return(OK);
|
||||
case B4SOI_IGS:
|
||||
|
|
@ -368,9 +369,6 @@ B4SOIinstance *here = (B4SOIinstance*)inst;
|
|||
case B4SOI_QBD:
|
||||
value->rValue = *(ckt->CKTstate0 + here->B4SOIqbd);
|
||||
return(OK);
|
||||
case B4SOI_DEBUG:
|
||||
value->iValue = here->B4SOIdebugMod;
|
||||
return(OK);
|
||||
#ifdef B4SOI_DEBUG_OUT
|
||||
case B4SOI_DEBUG1:
|
||||
value->rValue = here->B4SOIdebug1;
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,4 +1,5 @@
|
|||
/*** B4SOI 04/27/2010 Released by Tanvir Morshed ***/
|
||||
/*** B4SOI 12/16/2010 Released by Tanvir Morshed ***/
|
||||
|
||||
|
||||
/**********
|
||||
* Copyright 2010 Regents of the University of California. All rights reserved.
|
||||
|
|
@ -25,8 +26,9 @@
|
|||
|
||||
|
||||
int
|
||||
B4SOIconvTest(GENmodel *inModel, CKTcircuit *ckt)
|
||||
|
||||
B4SOIconvTest(
|
||||
GENmodel *inModel,
|
||||
CKTcircuit *ckt)
|
||||
{
|
||||
register B4SOImodel *model = (B4SOImodel*)inModel;
|
||||
register B4SOIinstance *here;
|
||||
|
|
@ -38,19 +40,21 @@ double cbd, cbhat, cbs, cd, cdhat, tol, vgd, vgdo, vgs;
|
|||
{ /* loop through all the instances of the model */
|
||||
for (here = model->B4SOIinstances; here != NULL ;
|
||||
here=here->B4SOInextInstance)
|
||||
{ vbs = model->B4SOItype
|
||||
* (*(ckt->CKTrhsOld+here->B4SOIbNode)
|
||||
- *(ckt->CKTrhsOld+here->B4SOIsNodePrime));
|
||||
{
|
||||
if (here->B4SOIowner != ARCHme) continue;
|
||||
vbs = model->B4SOItype
|
||||
* (*(ckt->CKTrhsOld+here->B4SOIbNode)
|
||||
- *(ckt->CKTrhsOld+here->B4SOIsNodePrime));
|
||||
vgs = model->B4SOItype
|
||||
* (*(ckt->CKTrhsOld+here->B4SOIgNode)
|
||||
- *(ckt->CKTrhsOld+here->B4SOIsNodePrime));
|
||||
* (*(ckt->CKTrhsOld+here->B4SOIgNode)
|
||||
- *(ckt->CKTrhsOld+here->B4SOIsNodePrime));
|
||||
vds = model->B4SOItype
|
||||
* (*(ckt->CKTrhsOld+here->B4SOIdNodePrime)
|
||||
- *(ckt->CKTrhsOld+here->B4SOIsNodePrime));
|
||||
* (*(ckt->CKTrhsOld+here->B4SOIdNodePrime)
|
||||
- *(ckt->CKTrhsOld+here->B4SOIsNodePrime));
|
||||
vbd = vbs - vds;
|
||||
vgd = vgs - vds;
|
||||
vgdo = *(ckt->CKTstate0 + here->B4SOIvgs)
|
||||
- *(ckt->CKTstate0 + here->B4SOIvds);
|
||||
- *(ckt->CKTstate0 + here->B4SOIvds);
|
||||
delvbs = vbs - *(ckt->CKTstate0 + here->B4SOIvbs);
|
||||
delvbd = vbd - *(ckt->CKTstate0 + here->B4SOIvbd);
|
||||
delvgs = vgs - *(ckt->CKTstate0 + here->B4SOIvgs);
|
||||
|
|
@ -59,33 +63,33 @@ double cbd, cbhat, cbs, cd, cdhat, tol, vgd, vgdo, vgs;
|
|||
|
||||
cd = here->B4SOIcd;
|
||||
if (here->B4SOImode >= 0)
|
||||
{ cdhat = cd - here->B4SOIgjdb * delvbd
|
||||
+ here->B4SOIgmbs * delvbs + here->B4SOIgm * delvgs
|
||||
+ here->B4SOIgds * delvds;
|
||||
{ cdhat = cd - here->B4SOIgjdb * delvbd
|
||||
+ here->B4SOIgmbs * delvbs + here->B4SOIgm * delvgs
|
||||
+ here->B4SOIgds * delvds;
|
||||
}
|
||||
else
|
||||
{ cdhat = cd - (here->B4SOIgjdb - here->B4SOIgmbs) * delvbd
|
||||
- here->B4SOIgm * delvgd + here->B4SOIgds * delvds;
|
||||
else
|
||||
{ cdhat = cd - (here->B4SOIgjdb - here->B4SOIgmbs) * delvbd
|
||||
- here->B4SOIgm * delvgd + here->B4SOIgds * delvds;
|
||||
}
|
||||
|
||||
/*
|
||||
* check convergence
|
||||
*/
|
||||
if ((here->B4SOIoff == 0) || (!(ckt->CKTmode & MODEINITFIX)))
|
||||
{ tol = ckt->CKTreltol * MAX(fabs(cdhat), fabs(cd))
|
||||
+ ckt->CKTabstol;
|
||||
{ tol = ckt->CKTreltol * MAX(fabs(cdhat), fabs(cd))
|
||||
+ ckt->CKTabstol;
|
||||
if (fabs(cdhat - cd) >= tol)
|
||||
{ ckt->CKTnoncon++;
|
||||
{ ckt->CKTnoncon++;
|
||||
return(OK);
|
||||
}
|
||||
cbs = here->B4SOIcjs;
|
||||
cbd = here->B4SOIcjd;
|
||||
cbhat = cbs + cbd + here->B4SOIgjdb * delvbd
|
||||
+ here->B4SOIgjsb * delvbs;
|
||||
+ here->B4SOIgjsb * delvbs;
|
||||
tol = ckt->CKTreltol * MAX(fabs(cbhat), fabs(cbs + cbd))
|
||||
+ ckt->CKTabstol;
|
||||
+ ckt->CKTabstol;
|
||||
if (fabs(cbhat - (cbs + cbd)) > tol)
|
||||
{ ckt->CKTnoncon++;
|
||||
{ ckt->CKTnoncon++;
|
||||
return(OK);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,4 +1,5 @@
|
|||
/*** B4SOI 04/27/2010 Released by Tanvir Morshed ***/
|
||||
/*** B4SOI 12/16/2010 Released by Tanvir Morshed ***/
|
||||
|
||||
|
||||
/**********
|
||||
* Copyright 2010 Regents of the University of California. All rights reserved.
|
||||
|
|
@ -22,8 +23,10 @@
|
|||
|
||||
|
||||
int
|
||||
B4SOIdelete(GENmodel *inModel, IFuid name, GENinstance **inInst)
|
||||
|
||||
B4SOIdelete(
|
||||
GENmodel *inModel,
|
||||
IFuid name,
|
||||
GENinstance **inInst)
|
||||
{
|
||||
B4SOIinstance **fast = (B4SOIinstance**)inInst;
|
||||
B4SOImodel *model = (B4SOImodel*)inModel;
|
||||
|
|
@ -33,8 +36,8 @@ B4SOIinstance *here;
|
|||
for (; model ; model = model->B4SOInextModel)
|
||||
{ prev = &(model->B4SOIinstances);
|
||||
for (here = *prev; here ; here = *prev)
|
||||
{ if (here->B4SOIname == name || (fast && here==*fast))
|
||||
{ *prev= here->B4SOInextInstance;
|
||||
{ if (here->B4SOIname == name || (fast && here==*fast))
|
||||
{ *prev= here->B4SOInextInstance;
|
||||
FREE(here);
|
||||
return(OK);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
/*** B4SOI 04/27/2010 Released by Tanvir Morshed ***/
|
||||
/*** B4SOI 12/16/2010 Released by Tanvir Morshed ***/
|
||||
|
||||
|
||||
/**********
|
||||
* Copyright 2010 Regents of the University of California. All rights reserved.
|
||||
|
|
@ -19,8 +20,8 @@
|
|||
#include "ngspice/suffix.h"
|
||||
|
||||
void
|
||||
B4SOIdestroy(GENmodel **inModel)
|
||||
|
||||
B4SOIdestroy(
|
||||
GENmodel **inModel)
|
||||
{
|
||||
B4SOImodel **model = (B4SOImodel**)inModel;
|
||||
B4SOIinstance *here;
|
||||
|
|
@ -31,9 +32,11 @@ B4SOImodel *oldmod = NULL;
|
|||
for (; mod ; mod = mod->B4SOInextModel)
|
||||
{ if(oldmod) FREE(oldmod);
|
||||
oldmod = mod;
|
||||
prev = NULL;
|
||||
prev = (B4SOIinstance *)NULL;
|
||||
for (here = mod->B4SOIinstances; here; here = here->B4SOInextInstance)
|
||||
{ if(prev) FREE(prev);
|
||||
{
|
||||
if (here->B4SOIowner != ARCHme) continue;
|
||||
if(prev) FREE(prev);
|
||||
prev = here;
|
||||
}
|
||||
if(prev) FREE(prev);
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ Copyright 2010 Regents of the University of California. All rights reserved.
|
|||
Author: 2005 Hui Wan (based on Samuel Fung's b3soiext.h)
|
||||
Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu.
|
||||
Authors: 2009- Tanvir Morshed, Ali Niknejad, Chenming Hu.
|
||||
Authors: 2010- Tanvir Morshed, Ali Niknejad, Chenming Hu.
|
||||
File: b4soiext.h
|
||||
**********/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
/*** B4SOI 04/27/2010 Released by Tanvir Morshed ***/
|
||||
/*** B4SOI 12/16/2010 Released by Tanvir Morshed ***/
|
||||
|
||||
|
||||
/**********
|
||||
* Copyright 2010 Regents of the University of California. All rights reserved.
|
||||
|
|
@ -22,33 +23,36 @@
|
|||
|
||||
|
||||
int
|
||||
B4SOIgetic(GENmodel *inModel, CKTcircuit *ckt)
|
||||
|
||||
B4SOIgetic(
|
||||
GENmodel *inModel,
|
||||
CKTcircuit *ckt)
|
||||
{
|
||||
B4SOImodel *model = (B4SOImodel*)inModel;
|
||||
B4SOIinstance *here;
|
||||
|
||||
for (; model ; model = model->B4SOInextModel)
|
||||
{ for (here = model->B4SOIinstances; here; here = here->B4SOInextInstance)
|
||||
{ if(!here->B4SOIicVBSGiven)
|
||||
{ here->B4SOIicVBS = *(ckt->CKTrhs + here->B4SOIbNode)
|
||||
- *(ckt->CKTrhs + here->B4SOIsNode);
|
||||
{
|
||||
if (here->B4SOIowner != ARCHme) continue;
|
||||
if(!here->B4SOIicVBSGiven)
|
||||
{ here->B4SOIicVBS = *(ckt->CKTrhs + here->B4SOIbNode)
|
||||
- *(ckt->CKTrhs + here->B4SOIsNode);
|
||||
}
|
||||
if (!here->B4SOIicVDSGiven)
|
||||
{ here->B4SOIicVDS = *(ckt->CKTrhs + here->B4SOIdNode)
|
||||
- *(ckt->CKTrhs + here->B4SOIsNode);
|
||||
{ here->B4SOIicVDS = *(ckt->CKTrhs + here->B4SOIdNode)
|
||||
- *(ckt->CKTrhs + here->B4SOIsNode);
|
||||
}
|
||||
if (!here->B4SOIicVGSGiven)
|
||||
{ here->B4SOIicVGS = *(ckt->CKTrhs + here->B4SOIgNode)
|
||||
- *(ckt->CKTrhs + here->B4SOIsNode);
|
||||
{ here->B4SOIicVGS = *(ckt->CKTrhs + here->B4SOIgNode)
|
||||
- *(ckt->CKTrhs + here->B4SOIsNode);
|
||||
}
|
||||
if (!here->B4SOIicVESGiven)
|
||||
{ here->B4SOIicVES = *(ckt->CKTrhs + here->B4SOIeNode)
|
||||
- *(ckt->CKTrhs + here->B4SOIsNode);
|
||||
{ here->B4SOIicVES = *(ckt->CKTrhs + here->B4SOIeNode)
|
||||
- *(ckt->CKTrhs + here->B4SOIsNode);
|
||||
}
|
||||
if (!here->B4SOIicVPSGiven)
|
||||
{ here->B4SOIicVPS = *(ckt->CKTrhs + here->B4SOIpNode)
|
||||
- *(ckt->CKTrhs + here->B4SOIsNode);
|
||||
{ here->B4SOIicVPS = *(ckt->CKTrhs + here->B4SOIpNode)
|
||||
- *(ckt->CKTrhs + here->B4SOIsNode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
SPICEdev B4SOIinfo = {
|
||||
{ "B4SOI",
|
||||
"Berkeley SOI MOSFET model version 4.3.1",
|
||||
"Berkeley SOI MOSFET model version 4.4.0",
|
||||
|
||||
&B4SOInSize,
|
||||
&B4SOInSize,
|
||||
|
|
@ -18,7 +18,7 @@ SPICEdev B4SOIinfo = {
|
|||
|
||||
&B4SOImPTSize,
|
||||
B4SOImPTable,
|
||||
|
||||
|
||||
#ifdef XSPICE
|
||||
/*---- Fixed by SDB 5.2.2003 to enable XSPICE/tclspice integration -----*/
|
||||
NULL, /* This is a SPICE device, it has no MIF info data */
|
||||
|
|
@ -33,9 +33,9 @@ SPICEdev B4SOIinfo = {
|
|||
NULL, /* This is a SPICE device, it has no MIF info data */
|
||||
/*--------------------------- End of SDB fix -------------------------*/
|
||||
#endif
|
||||
|
||||
DEV_DEFAULT
|
||||
|
||||
|
||||
DEV_DEFAULT
|
||||
|
||||
},
|
||||
|
||||
/* DEVparam */ B4SOIparam,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
/**********
|
||||
Copyright 2009 Regents of the University of California. All rights reserved.
|
||||
Copyright 2010 Regents of the University of California. All rights reserved.
|
||||
Author: 2005 Hui Wan (based on Samuel Fung's b3soiitf.h)
|
||||
Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu.
|
||||
Authors: 2009- Tanvir Morshed, Ali Niknejad, Chenming Hu.
|
||||
Authors: 2010- Tanvir Morshed, Ali Niknejad, Chenming Hu.
|
||||
File: b4soiitf.h
|
||||
**********/
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,4 +1,5 @@
|
|||
/** B4SOI 04/27/2010 Released by Tanvir Morshed ***/
|
||||
/*** B4SOI 12/16/2010 Released by Tanvir Morshed ***/
|
||||
|
||||
|
||||
/**********
|
||||
* Copyright 2010 Regents of the University of California. All rights reserved.
|
||||
|
|
@ -11,9 +12,11 @@
|
|||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
* Modified by Tanvir Morshed 09/22/2009
|
||||
* Modified by Tanvir Morshed 12/31/2009
|
||||
* Modified by Tanvir Morshed 12/16/2010
|
||||
**********/
|
||||
|
||||
#include "ngspice/ngspice.h"
|
||||
|
||||
#include "ngspice/ifsim.h"
|
||||
#include "ngspice/cktdefs.h"
|
||||
#include "ngspice/devdefs.h"
|
||||
|
|
@ -29,9 +32,7 @@ int which,
|
|||
IFvalue *value)
|
||||
{
|
||||
B4SOImodel *model = (B4SOImodel *)inst;
|
||||
|
||||
NG_IGNORE(ckt);
|
||||
|
||||
switch(which)
|
||||
{ case B4SOI_MOD_MOBMOD:
|
||||
value->iValue = model->B4SOImobMod;
|
||||
|
|
@ -59,61 +60,61 @@ IFvalue *value)
|
|||
case B4SOI_MOD_TOX :
|
||||
value->rValue = model->B4SOItox;
|
||||
return(OK);
|
||||
case B4SOI_MOD_TOXP :
|
||||
case B4SOI_MOD_TOXP :
|
||||
value->rValue = model->B4SOItoxp;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LEFFEOT :
|
||||
case B4SOI_MOD_LEFFEOT :
|
||||
value->rValue = model->B4SOIleffeot;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WEFFEOT :
|
||||
case B4SOI_MOD_WEFFEOT :
|
||||
value->rValue = model->B4SOIweffeot;
|
||||
return(OK);
|
||||
case B4SOI_MOD_VDDEOT :
|
||||
case B4SOI_MOD_VDDEOT :
|
||||
value->rValue = model->B4SOIvddeot;
|
||||
return(OK);
|
||||
case B4SOI_MOD_TEMPEOT :
|
||||
case B4SOI_MOD_TEMPEOT :
|
||||
value->rValue = model->B4SOItempeot;
|
||||
return(OK);
|
||||
case B4SOI_MOD_ADOS :
|
||||
case B4SOI_MOD_ADOS :
|
||||
value->rValue = model->B4SOIados;
|
||||
return(OK);
|
||||
case B4SOI_MOD_BDOS :
|
||||
case B4SOI_MOD_BDOS :
|
||||
value->rValue = model->B4SOIbdos;
|
||||
return(OK);
|
||||
case B4SOI_MOD_EPSRGATE:
|
||||
value->rValue = model->B4SOIepsrgate;
|
||||
return(OK);
|
||||
value->rValue = model->B4SOIepsrgate;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PHIG:
|
||||
value->rValue = model->B4SOIphig;
|
||||
return(OK);
|
||||
value->rValue = model->B4SOIphig;
|
||||
return(OK);
|
||||
case B4SOI_MOD_EASUB:
|
||||
value->rValue = model->B4SOIeasub;
|
||||
return(OK);
|
||||
|
||||
return(OK);
|
||||
|
||||
case B4SOI_MOD_TOXM :
|
||||
value->rValue = model->B4SOItoxm;
|
||||
return(OK); /* v3.2 */
|
||||
|
||||
/*4.1*/
|
||||
case B4SOI_MOD_EOT :
|
||||
|
||||
/*4.1*/
|
||||
case B4SOI_MOD_EOT :
|
||||
value->rValue = model->B4SOIeot;
|
||||
return(OK);
|
||||
case B4SOI_MOD_EPSROX :
|
||||
return(OK);
|
||||
case B4SOI_MOD_EPSROX :
|
||||
value->rValue = model->B4SOIepsrox;
|
||||
return(OK);
|
||||
case B4SOI_MOD_EPSRSUB:
|
||||
case B4SOI_MOD_EPSRSUB:
|
||||
value->rValue = model->B4SOIepsrsub;
|
||||
return(OK);
|
||||
case B4SOI_MOD_NI0SUB:
|
||||
case B4SOI_MOD_NI0SUB:
|
||||
value->rValue = model->B4SOIni0sub;
|
||||
return(OK);
|
||||
case B4SOI_MOD_BG0SUB:
|
||||
case B4SOI_MOD_BG0SUB:
|
||||
value->rValue = model->B4SOIbg0sub;
|
||||
return(OK);
|
||||
case B4SOI_MOD_TBGASUB:
|
||||
case B4SOI_MOD_TBGASUB:
|
||||
value->rValue = model->B4SOItbgasub;
|
||||
return(OK);
|
||||
case B4SOI_MOD_TBGBSUB:
|
||||
case B4SOI_MOD_TBGBSUB:
|
||||
value->rValue = model->B4SOItbgbsub;
|
||||
return(OK);
|
||||
/* v2.2.3 */
|
||||
|
|
@ -272,69 +273,69 @@ IFvalue *value)
|
|||
case B4SOI_MOD_UTE:
|
||||
value->rValue = model->B4SOIute;
|
||||
return(OK);
|
||||
|
||||
/*4.1 mobmod=4*/
|
||||
|
||||
/*4.1 mobmod=4*/
|
||||
case B4SOI_MOD_UD:
|
||||
value->rValue = model->B4SOIud;
|
||||
return(OK);
|
||||
value->rValue = model->B4SOIud;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LUD:
|
||||
value->rValue = model->B4SOIlud;
|
||||
return(OK);
|
||||
value->rValue = model->B4SOIlud;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WUD:
|
||||
value->rValue = model->B4SOIwud;
|
||||
return(OK);
|
||||
value->rValue = model->B4SOIwud;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PUD:
|
||||
value->rValue = model->B4SOIpud;
|
||||
return(OK);
|
||||
value->rValue = model->B4SOIpud;
|
||||
return(OK);
|
||||
case B4SOI_MOD_UD1:
|
||||
value->rValue = model->B4SOIud1;
|
||||
return(OK);
|
||||
value->rValue = model->B4SOIud1;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LUD1:
|
||||
value->rValue = model->B4SOIlud1;
|
||||
return(OK);
|
||||
value->rValue = model->B4SOIlud1;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WUD1:
|
||||
value->rValue = model->B4SOIwud1;
|
||||
return(OK);
|
||||
value->rValue = model->B4SOIwud1;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PUD1:
|
||||
value->rValue = model->B4SOIpud1;
|
||||
return(OK);
|
||||
case B4SOI_MOD_EU:
|
||||
value->rValue = model->B4SOIeu;
|
||||
value->rValue = model->B4SOIpud1;
|
||||
return(OK);
|
||||
case B4SOI_MOD_EU:
|
||||
value->rValue = model->B4SOIeu;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LEU:
|
||||
value->rValue = model->B4SOIleu;
|
||||
case B4SOI_MOD_LEU:
|
||||
value->rValue = model->B4SOIleu;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WEU:
|
||||
value->rValue = model->B4SOIweu;
|
||||
case B4SOI_MOD_WEU:
|
||||
value->rValue = model->B4SOIweu;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PEU:
|
||||
value->rValue = model->B4SOIpeu;
|
||||
case B4SOI_MOD_PEU:
|
||||
value->rValue = model->B4SOIpeu;
|
||||
return(OK);
|
||||
case B4SOI_MOD_UCS:
|
||||
value->rValue = model->B4SOIucs;
|
||||
case B4SOI_MOD_UCS:
|
||||
value->rValue = model->B4SOIucs;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LUCS:
|
||||
value->rValue = model->B4SOIlucs;
|
||||
case B4SOI_MOD_LUCS:
|
||||
value->rValue = model->B4SOIlucs;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WUCS:
|
||||
value->rValue = model->B4SOIwucs;
|
||||
case B4SOI_MOD_WUCS:
|
||||
value->rValue = model->B4SOIwucs;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PUCS:
|
||||
value->rValue = model->B4SOIpucs;
|
||||
case B4SOI_MOD_PUCS:
|
||||
value->rValue = model->B4SOIpucs;
|
||||
return(OK);
|
||||
case B4SOI_MOD_UCSTE:
|
||||
case B4SOI_MOD_UCSTE:
|
||||
value->rValue = model->B4SOIucste;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LUCSTE:
|
||||
case B4SOI_MOD_LUCSTE:
|
||||
value->rValue = model->B4SOIlucste;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WUCSTE:
|
||||
case B4SOI_MOD_WUCSTE:
|
||||
value->rValue = model->B4SOIwucste;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PUCSTE:
|
||||
case B4SOI_MOD_PUCSTE:
|
||||
value->rValue = model->B4SOIpucste;
|
||||
return(OK);
|
||||
|
||||
return(OK);
|
||||
|
||||
case B4SOI_MOD_VOFF:
|
||||
value->rValue = model->B4SOIvoff;
|
||||
return(OK);
|
||||
|
|
@ -437,7 +438,7 @@ IFvalue *value)
|
|||
case B4SOI_MOD_TSI:
|
||||
value->rValue = model->B4SOItsi;
|
||||
return(OK);
|
||||
case B4SOI_MOD_ETSI:
|
||||
case B4SOI_MOD_ETSI:
|
||||
value->rValue = model->B4SOIetsi;
|
||||
return(OK);
|
||||
case B4SOI_MOD_RTH0:
|
||||
|
|
@ -474,7 +475,7 @@ IFvalue *value)
|
|||
value->rValue = model->B4SOIxtund;
|
||||
return(OK);
|
||||
|
||||
case B4SOI_MOD_TT:
|
||||
case B4SOI_MOD_TT:
|
||||
value->rValue = model->B4SOItt;
|
||||
return(OK);
|
||||
case B4SOI_MOD_VSDTH:
|
||||
|
|
@ -510,22 +511,22 @@ IFvalue *value)
|
|||
case B4SOI_MOD_RSH:
|
||||
value->rValue = model->B4SOIsheetResistance;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PBSWGS: /* v4.0 */
|
||||
case B4SOI_MOD_PBSWGS: /* v4.0 */
|
||||
value->rValue = model->B4SOIGatesidewallJctSPotential;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PBSWGD: /* v4.0 */
|
||||
case B4SOI_MOD_PBSWGD: /* v4.0 */
|
||||
value->rValue = model->B4SOIGatesidewallJctDPotential;
|
||||
return(OK);
|
||||
case B4SOI_MOD_MJSWGS: /* v4.0 */
|
||||
case B4SOI_MOD_MJSWGS: /* v4.0 */
|
||||
value->rValue = model->B4SOIbodyJctGateSideSGradingCoeff;
|
||||
return(OK);
|
||||
case B4SOI_MOD_MJSWGD: /* v4.0 */
|
||||
case B4SOI_MOD_MJSWGD: /* v4.0 */
|
||||
value->rValue = model->B4SOIbodyJctGateSideDGradingCoeff;
|
||||
return(OK);
|
||||
case B4SOI_MOD_CJSWGS: /* v4.0 */
|
||||
case B4SOI_MOD_CJSWGS: /* v4.0 */
|
||||
value->rValue = model->B4SOIunitLengthGateSidewallJctCapS;
|
||||
return(OK);
|
||||
case B4SOI_MOD_CJSWGD: /* v4.0 */
|
||||
case B4SOI_MOD_CJSWGD: /* v4.0 */
|
||||
value->rValue = model->B4SOIunitLengthGateSidewallJctCapD;
|
||||
return(OK);
|
||||
case B4SOI_MOD_CSDESW:
|
||||
|
|
@ -726,10 +727,10 @@ IFvalue *value)
|
|||
case B4SOI_MOD_TII:
|
||||
value->rValue = model->B4SOItii;
|
||||
return(OK);
|
||||
/*4.1 Iii model*/
|
||||
case B4SOI_MOD_TVBCI:
|
||||
/*4.1 Iii model*/
|
||||
case B4SOI_MOD_TVBCI:
|
||||
value->rValue = model->B4SOItvbci;
|
||||
return(OK);
|
||||
return(OK);
|
||||
case B4SOI_MOD_LII:
|
||||
value->rValue = model->B4SOIlii;
|
||||
return(OK);
|
||||
|
|
@ -748,8 +749,8 @@ IFvalue *value)
|
|||
case B4SOI_MOD_FBJTII:
|
||||
value->rValue = model->B4SOIfbjtii;
|
||||
return(OK);
|
||||
/*4.1 Iii model*/
|
||||
case B4SOI_MOD_EBJTII:
|
||||
/*4.1 Iii model*/
|
||||
case B4SOI_MOD_EBJTII:
|
||||
value->rValue = model->B4SOIebjtii;
|
||||
return(OK);
|
||||
case B4SOI_MOD_CBJTII:
|
||||
|
|
@ -767,61 +768,61 @@ IFvalue *value)
|
|||
case B4SOI_MOD_ESATII:
|
||||
value->rValue = model->B4SOIesatii;
|
||||
return(OK);
|
||||
case B4SOI_MOD_NTUNS: /* v4.0 */
|
||||
case B4SOI_MOD_NTUNS: /* v4.0 */
|
||||
value->rValue = model->B4SOIntun;
|
||||
return(OK);
|
||||
case B4SOI_MOD_NTUND: /* v4.0 */
|
||||
case B4SOI_MOD_NTUND: /* v4.0 */
|
||||
value->rValue = model->B4SOIntund;
|
||||
return(OK);
|
||||
case B4SOI_MOD_NRECF0S: /* v4.0 */
|
||||
case B4SOI_MOD_NRECF0S: /* v4.0 */
|
||||
value->rValue = model->B4SOInrecf0;
|
||||
return(OK);
|
||||
case B4SOI_MOD_NRECF0D: /* v4.0 */
|
||||
case B4SOI_MOD_NRECF0D: /* v4.0 */
|
||||
value->rValue = model->B4SOInrecf0d;
|
||||
return(OK);
|
||||
case B4SOI_MOD_NRECR0S: /* v4.0 */
|
||||
case B4SOI_MOD_NRECR0S: /* v4.0 */
|
||||
value->rValue = model->B4SOInrecr0;
|
||||
return(OK);
|
||||
case B4SOI_MOD_NRECR0D: /* v4.0 */
|
||||
case B4SOI_MOD_NRECR0D: /* v4.0 */
|
||||
value->rValue = model->B4SOInrecr0d;
|
||||
return(OK);
|
||||
case B4SOI_MOD_ISBJT:
|
||||
value->rValue = model->B4SOIisbjt;
|
||||
return(OK);
|
||||
case B4SOI_MOD_IDBJT: /* v4.0 */
|
||||
case B4SOI_MOD_IDBJT: /* v4.0 */
|
||||
value->rValue = model->B4SOIidbjt;
|
||||
return(OK);
|
||||
case B4SOI_MOD_ISDIF:
|
||||
value->rValue = model->B4SOIisdif;
|
||||
return(OK);
|
||||
case B4SOI_MOD_IDDIF: /* v4.0 */
|
||||
case B4SOI_MOD_IDDIF: /* v4.0 */
|
||||
value->rValue = model->B4SOIiddif;
|
||||
return(OK);
|
||||
case B4SOI_MOD_ISREC:
|
||||
value->rValue = model->B4SOIisrec;
|
||||
return(OK);
|
||||
case B4SOI_MOD_IDREC: /* v4.0 */
|
||||
case B4SOI_MOD_IDREC: /* v4.0 */
|
||||
value->rValue = model->B4SOIidrec;
|
||||
return(OK);
|
||||
case B4SOI_MOD_ISTUN:
|
||||
value->rValue = model->B4SOIistun;
|
||||
return(OK);
|
||||
case B4SOI_MOD_IDTUN: /* v4.0 */
|
||||
case B4SOI_MOD_IDTUN: /* v4.0 */
|
||||
value->rValue = model->B4SOIidtun;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LN:
|
||||
value->rValue = model->B4SOIln;
|
||||
return(OK);
|
||||
case B4SOI_MOD_VREC0S: /* v4.0 */
|
||||
case B4SOI_MOD_VREC0S: /* v4.0 */
|
||||
value->rValue = model->B4SOIvrec0;
|
||||
return(OK);
|
||||
case B4SOI_MOD_VREC0D: /* v4.0 */
|
||||
case B4SOI_MOD_VREC0D: /* v4.0 */
|
||||
value->rValue = model->B4SOIvrec0d;
|
||||
return(OK);
|
||||
case B4SOI_MOD_VTUN0S: /* v4.0 */
|
||||
case B4SOI_MOD_VTUN0S: /* v4.0 */
|
||||
value->rValue = model->B4SOIvtun0;
|
||||
return(OK);
|
||||
case B4SOI_MOD_VTUN0D: /* v4.0 */
|
||||
case B4SOI_MOD_VTUN0D: /* v4.0 */
|
||||
value->rValue = model->B4SOIvtun0d;
|
||||
return(OK);
|
||||
case B4SOI_MOD_NBJT:
|
||||
|
|
@ -839,10 +840,10 @@ IFvalue *value)
|
|||
case B4SOI_MOD_AELY:
|
||||
value->rValue = model->B4SOIaely;
|
||||
return(OK);
|
||||
case B4SOI_MOD_AHLIS: /* v4.0 */
|
||||
case B4SOI_MOD_AHLIS: /* v4.0 */
|
||||
value->rValue = model->B4SOIahli;
|
||||
return(OK);
|
||||
case B4SOI_MOD_AHLID: /* v4.0 */
|
||||
case B4SOI_MOD_AHLID: /* v4.0 */
|
||||
value->rValue = model->B4SOIahlid;
|
||||
return(OK);
|
||||
case B4SOI_MOD_RBODY:
|
||||
|
|
@ -896,7 +897,10 @@ IFvalue *value)
|
|||
case B4SOI_MOD_DLBG:
|
||||
value->rValue = model->B4SOIdlbg;
|
||||
return(OK);
|
||||
|
||||
/* v4.4 */
|
||||
case B4SOI_MOD_CFRCOEFF:
|
||||
value->rValue = model->B4SOIcfrcoeff;
|
||||
return(OK);
|
||||
case B4SOI_MOD_EGIDL:
|
||||
value->rValue = model->B4SOIegidl;
|
||||
return(OK);
|
||||
|
|
@ -918,8 +922,8 @@ IFvalue *value)
|
|||
case B4SOI_MOD_FGIDL:
|
||||
value->rValue = model->B4SOIfgidl;
|
||||
return(OK);
|
||||
|
||||
case B4SOI_MOD_EGISL:
|
||||
|
||||
case B4SOI_MOD_EGISL:
|
||||
value->rValue = model->B4SOIegisl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_AGISL:
|
||||
|
|
@ -939,8 +943,8 @@ IFvalue *value)
|
|||
return(OK);
|
||||
case B4SOI_MOD_FGISL:
|
||||
value->rValue = model->B4SOIfgisl;
|
||||
return(OK);
|
||||
|
||||
return(OK);
|
||||
|
||||
case B4SOI_MOD_FDMOD:
|
||||
value->rValue = model->B4SOIfdMod;
|
||||
return(OK);
|
||||
|
|
@ -949,7 +953,7 @@ IFvalue *value)
|
|||
return(OK);
|
||||
case B4SOI_MOD_CDSBS:
|
||||
value->rValue = model->B4SOIcdsbs;
|
||||
return(OK);
|
||||
return(OK);
|
||||
|
||||
case B4SOI_MOD_MINVCV:
|
||||
value->rValue = model->B4SOIminvcv;
|
||||
|
|
@ -962,7 +966,7 @@ IFvalue *value)
|
|||
return(OK);
|
||||
case B4SOI_MOD_PMINVCV:
|
||||
value->rValue = model->B4SOIpminvcv;
|
||||
return(OK);
|
||||
return(OK);
|
||||
case B4SOI_MOD_VOFFCV:
|
||||
value->rValue = model->B4SOIvoffcv;
|
||||
return(OK);
|
||||
|
|
@ -974,7 +978,7 @@ IFvalue *value)
|
|||
return(OK);
|
||||
case B4SOI_MOD_PVOFFCV:
|
||||
value->rValue = model->B4SOIpvoffcv;
|
||||
return(OK);
|
||||
return(OK);
|
||||
/* v3.0 */
|
||||
case B4SOI_MOD_SOIMOD:
|
||||
value->iValue = model->B4SOIsoiMod;
|
||||
|
|
@ -1207,11 +1211,11 @@ IFvalue *value)
|
|||
/* v4.0 end */
|
||||
|
||||
/* v3.2 */
|
||||
case B4SOI_MOD_FNOIMOD :
|
||||
value->iValue = model->B4SOIfnoiMod;
|
||||
return(OK);
|
||||
case B4SOI_MOD_TNOIMOD :
|
||||
value->iValue = model->B4SOItnoiMod;
|
||||
case B4SOI_MOD_FNOIMOD :
|
||||
value->iValue = model->B4SOIfnoiMod;
|
||||
return(OK);
|
||||
case B4SOI_MOD_TNOIMOD :
|
||||
value->iValue = model->B4SOItnoiMod;
|
||||
case B4SOI_MOD_TNOIA:
|
||||
value->rValue = model->B4SOItnoia;
|
||||
return(OK);
|
||||
|
|
@ -1234,10 +1238,10 @@ IFvalue *value)
|
|||
value->iValue = model->B4SOIrgateMod;
|
||||
return(OK);
|
||||
case B4SOI_MOD_XRCRG1:
|
||||
value->rValue = model->B4SOIxrcrg1; /* Changed from iValue to rvalue */
|
||||
value->rValue = model->B4SOIxrcrg1;
|
||||
return(OK);
|
||||
case B4SOI_MOD_XRCRG2:
|
||||
value->rValue = model->B4SOIxrcrg2; /* Changed from iValue to rvalue */
|
||||
value->rValue = model->B4SOIxrcrg2;
|
||||
return(OK);
|
||||
case B4SOI_MOD_RSHG:
|
||||
value->rValue = model->B4SOIrshg;
|
||||
|
|
@ -1257,15 +1261,15 @@ IFvalue *value)
|
|||
case B4SOI_MOD_MTRLMOD :
|
||||
value->iValue = model->B4SOImtrlMod;
|
||||
return(OK);
|
||||
case B4SOI_MOD_VGSTCVMOD:
|
||||
case B4SOI_MOD_VGSTCVMOD:
|
||||
value->iValue = model->B4SOIvgstcvMod;
|
||||
return(OK);
|
||||
case B4SOI_MOD_GIDLMOD :
|
||||
value->iValue = model->B4SOIgidlMod;
|
||||
return(OK);
|
||||
case B4SOI_MOD_IIIMOD :
|
||||
case B4SOI_MOD_IIIMOD :
|
||||
value->iValue = model->B4SOIiiiMod;
|
||||
return(OK);
|
||||
return(OK);
|
||||
/* v3.0 */
|
||||
case B4SOI_MOD_IGBMOD:
|
||||
value->iValue = model->B4SOIigbMod;
|
||||
|
|
@ -1441,7 +1445,7 @@ IFvalue *value)
|
|||
return(OK);
|
||||
case B4SOI_MOD_LNSD:
|
||||
value->rValue = model->B4SOIlnsd;
|
||||
return(OK);
|
||||
return(OK);
|
||||
case B4SOI_MOD_LVTH0:
|
||||
value->rValue = model->B4SOIlvth0;
|
||||
return(OK);
|
||||
|
|
@ -1613,8 +1617,8 @@ IFvalue *value)
|
|||
case B4SOI_MOD_LFBJTII:
|
||||
value->rValue = model->B4SOIlfbjtii;
|
||||
return(OK);
|
||||
/*4.1 Iii model*/
|
||||
case B4SOI_MOD_LEBJTII:
|
||||
/*4.1 Iii model*/
|
||||
case B4SOI_MOD_LEBJTII:
|
||||
value->rValue = model->B4SOIlebjtii;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LCBJTII:
|
||||
|
|
@ -1680,8 +1684,8 @@ IFvalue *value)
|
|||
case B4SOI_MOD_LFGIDL:
|
||||
value->rValue = model->B4SOIlfgidl;
|
||||
return(OK);
|
||||
|
||||
case B4SOI_MOD_LAGISL:
|
||||
|
||||
case B4SOI_MOD_LAGISL:
|
||||
value->rValue = model->B4SOIlagisl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LBGISL:
|
||||
|
|
@ -1701,11 +1705,11 @@ IFvalue *value)
|
|||
return(OK);
|
||||
case B4SOI_MOD_LFGISL:
|
||||
value->rValue = model->B4SOIlfgisl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LNTUNS: /* v4.0 */
|
||||
return(OK);
|
||||
case B4SOI_MOD_LNTUNS: /* v4.0 */
|
||||
value->rValue = model->B4SOIlntun;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LNTUND: /* v4.0 */
|
||||
case B4SOI_MOD_LNTUND: /* v4.0 */
|
||||
value->rValue = model->B4SOIlntund;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LNDIODES: /* v4.0 */
|
||||
|
|
@ -1714,40 +1718,40 @@ IFvalue *value)
|
|||
case B4SOI_MOD_LNDIODED: /* v4.0 */
|
||||
value->rValue = model->B4SOIlndioded;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LNRECF0S: /* v4.0 */
|
||||
case B4SOI_MOD_LNRECF0S: /* v4.0 */
|
||||
value->rValue = model->B4SOIlnrecf0;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LNRECF0D: /* v4.0 */
|
||||
case B4SOI_MOD_LNRECF0D: /* v4.0 */
|
||||
value->rValue = model->B4SOIlnrecf0d;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LNRECR0S: /* v4.0 */
|
||||
case B4SOI_MOD_LNRECR0S: /* v4.0 */
|
||||
value->rValue = model->B4SOIlnrecr0;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LNRECR0D: /* v4.0 */
|
||||
case B4SOI_MOD_LNRECR0D: /* v4.0 */
|
||||
value->rValue = model->B4SOIlnrecr0d;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LISBJT:
|
||||
value->rValue = model->B4SOIlisbjt;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LIDBJT: /* v4.0 */
|
||||
case B4SOI_MOD_LIDBJT: /* v4.0 */
|
||||
value->rValue = model->B4SOIlidbjt;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LISDIF:
|
||||
value->rValue = model->B4SOIlisdif;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LIDDIF: /* v4.0 */
|
||||
case B4SOI_MOD_LIDDIF: /* v4.0 */
|
||||
value->rValue = model->B4SOIliddif;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LISREC:
|
||||
value->rValue = model->B4SOIlisrec;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LIDREC: /* v4.0 */
|
||||
case B4SOI_MOD_LIDREC: /* v4.0 */
|
||||
value->rValue = model->B4SOIlidrec;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LISTUN:
|
||||
value->rValue = model->B4SOIlistun;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LIDTUN: /* v4.0 */
|
||||
case B4SOI_MOD_LIDTUN: /* v4.0 */
|
||||
value->rValue = model->B4SOIlidtun;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LVREC0S: /* v4.0 */
|
||||
|
|
@ -1774,13 +1778,13 @@ IFvalue *value)
|
|||
case B4SOI_MOD_LAELY:
|
||||
value->rValue = model->B4SOIlaely;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LAHLIS: /* v4.0 */
|
||||
case B4SOI_MOD_LAHLIS: /* v4.0 */
|
||||
value->rValue = model->B4SOIlahli;
|
||||
return(OK);
|
||||
case B4SOI_MOD_LAHLID: /* v4.0 */
|
||||
case B4SOI_MOD_LAHLID: /* v4.0 */
|
||||
value->rValue = model->B4SOIlahlid;
|
||||
return(OK);
|
||||
/* CV Model */
|
||||
/* CV Model */
|
||||
case B4SOI_MOD_LVSDFB:
|
||||
value->rValue = model->B4SOIlvsdfb;
|
||||
return(OK);
|
||||
|
|
@ -2105,8 +2109,8 @@ IFvalue *value)
|
|||
case B4SOI_MOD_WFBJTII:
|
||||
value->rValue = model->B4SOIwfbjtii;
|
||||
return(OK);
|
||||
/*4.1 Iii model*/
|
||||
case B4SOI_MOD_WEBJTII:
|
||||
/*4.1 Iii model*/
|
||||
case B4SOI_MOD_WEBJTII:
|
||||
value->rValue = model->B4SOIwebjtii;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WCBJTII:
|
||||
|
|
@ -2165,47 +2169,47 @@ IFvalue *value)
|
|||
return(OK);
|
||||
case B4SOI_MOD_WRGIDL:
|
||||
value->rValue = model->B4SOIwrgidl;
|
||||
return(OK);
|
||||
return(OK);
|
||||
case B4SOI_MOD_WKGIDL:
|
||||
value->rValue = model->B4SOIwkgidl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WFGIDL:
|
||||
value->rValue = model->B4SOIwfgidl;
|
||||
return(OK);
|
||||
|
||||
case B4SOI_MOD_WAGISL:
|
||||
|
||||
case B4SOI_MOD_WAGISL:
|
||||
value->rValue = model->B4SOIwagisl;
|
||||
return(OK);
|
||||
|
||||
|
||||
case B4SOI_MOD_WBGISL:
|
||||
value->rValue = model->B4SOIwbgisl;
|
||||
return(OK);
|
||||
|
||||
|
||||
case B4SOI_MOD_WCGISL:
|
||||
value->rValue = model->B4SOIwcgisl;
|
||||
return(OK);
|
||||
|
||||
|
||||
case B4SOI_MOD_WEGISL:
|
||||
value->rValue = model->B4SOIwegisl;
|
||||
return(OK);
|
||||
|
||||
|
||||
case B4SOI_MOD_WRGISL:
|
||||
value->rValue = model->B4SOIwrgisl;
|
||||
return(OK);
|
||||
|
||||
return(OK);
|
||||
|
||||
case B4SOI_MOD_WKGISL:
|
||||
value->rValue = model->B4SOIwkgisl;
|
||||
return(OK);
|
||||
|
||||
|
||||
case B4SOI_MOD_WFGISL:
|
||||
value->rValue = model->B4SOIwfgisl;
|
||||
return(OK);
|
||||
|
||||
|
||||
case B4SOI_MOD_WNTUNS: /* v4.0 */
|
||||
|
||||
|
||||
case B4SOI_MOD_WNTUNS: /* v4.0 */
|
||||
value->rValue = model->B4SOIwntun;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WNTUND: /* v4.0 */
|
||||
case B4SOI_MOD_WNTUND: /* v4.0 */
|
||||
value->rValue = model->B4SOIwntund;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WNDIODES: /* v4.0 */
|
||||
|
|
@ -2214,40 +2218,40 @@ IFvalue *value)
|
|||
case B4SOI_MOD_WNDIODED: /* v4.0 */
|
||||
value->rValue = model->B4SOIwndioded;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WNRECF0S: /* v4.0 */
|
||||
case B4SOI_MOD_WNRECF0S: /* v4.0 */
|
||||
value->rValue = model->B4SOIwnrecf0;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WNRECF0D: /* v4.0 */
|
||||
case B4SOI_MOD_WNRECF0D: /* v4.0 */
|
||||
value->rValue = model->B4SOIwnrecf0d;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WNRECR0S: /* v4.0 */
|
||||
case B4SOI_MOD_WNRECR0S: /* v4.0 */
|
||||
value->rValue = model->B4SOIwnrecr0;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WNRECR0D: /* v4.0 */
|
||||
case B4SOI_MOD_WNRECR0D: /* v4.0 */
|
||||
value->rValue = model->B4SOIwnrecr0d;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WISBJT:
|
||||
value->rValue = model->B4SOIwisbjt;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WIDBJT: /* v4.0 */
|
||||
case B4SOI_MOD_WIDBJT: /* v4.0 */
|
||||
value->rValue = model->B4SOIwidbjt;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WISDIF:
|
||||
value->rValue = model->B4SOIwisdif;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WIDDIF: /* v4.0 */
|
||||
case B4SOI_MOD_WIDDIF: /* v4.0 */
|
||||
value->rValue = model->B4SOIwiddif;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WISREC:
|
||||
value->rValue = model->B4SOIwisrec;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WIDREC: /* v4.0 */
|
||||
case B4SOI_MOD_WIDREC: /* v4.0 */
|
||||
value->rValue = model->B4SOIwidrec;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WISTUN:
|
||||
value->rValue = model->B4SOIwistun;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WIDTUN: /* v4.0 */
|
||||
case B4SOI_MOD_WIDTUN: /* v4.0 */
|
||||
value->rValue = model->B4SOIwidtun;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WVREC0S: /* v4.0 */
|
||||
|
|
@ -2274,13 +2278,13 @@ IFvalue *value)
|
|||
case B4SOI_MOD_WAELY:
|
||||
value->rValue = model->B4SOIwaely;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WAHLIS: /* v4.0 */
|
||||
case B4SOI_MOD_WAHLIS: /* v4.0 */
|
||||
value->rValue = model->B4SOIwahli;
|
||||
return(OK);
|
||||
case B4SOI_MOD_WAHLID: /* v4.0 */
|
||||
case B4SOI_MOD_WAHLID: /* v4.0 */
|
||||
value->rValue = model->B4SOIwahlid;
|
||||
return(OK);
|
||||
/* CV Model */
|
||||
/* CV Model */
|
||||
case B4SOI_MOD_WVSDFB:
|
||||
value->rValue = model->B4SOIwvsdfb;
|
||||
return(OK);
|
||||
|
|
@ -2606,8 +2610,8 @@ IFvalue *value)
|
|||
case B4SOI_MOD_PFBJTII:
|
||||
value->rValue = model->B4SOIpfbjtii;
|
||||
return(OK);
|
||||
/*4.1 Iii model*/
|
||||
case B4SOI_MOD_PEBJTII:
|
||||
/*4.1 Iii model*/
|
||||
case B4SOI_MOD_PEBJTII:
|
||||
value->rValue = model->B4SOIpebjtii;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PCBJTII:
|
||||
|
|
@ -2622,7 +2626,7 @@ IFvalue *value)
|
|||
case B4SOI_MOD_PMBJTII:
|
||||
value->rValue = model->B4SOIpmbjtii;
|
||||
return(OK);
|
||||
|
||||
|
||||
case B4SOI_MOD_PBETA0:
|
||||
value->rValue = model->B4SOIpbeta0;
|
||||
return(OK);
|
||||
|
|
@ -2674,8 +2678,8 @@ IFvalue *value)
|
|||
case B4SOI_MOD_PFGIDL:
|
||||
value->rValue = model->B4SOIpfgidl;
|
||||
return(OK);
|
||||
|
||||
case B4SOI_MOD_PAGISL:
|
||||
|
||||
case B4SOI_MOD_PAGISL:
|
||||
value->rValue = model->B4SOIpagisl;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PBGISL:
|
||||
|
|
@ -2695,42 +2699,42 @@ IFvalue *value)
|
|||
return(OK);
|
||||
case B4SOI_MOD_PFGISL:
|
||||
value->rValue = model->B4SOIpfgisl;
|
||||
return(OK);
|
||||
|
||||
case B4SOI_MOD_PNTUNS: /* v4.0 */
|
||||
return(OK);
|
||||
|
||||
case B4SOI_MOD_PNTUNS: /* v4.0 */
|
||||
value->rValue = model->B4SOIpntun;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PNTUND: /* v4.0 */
|
||||
case B4SOI_MOD_PNTUND: /* v4.0 */
|
||||
value->rValue = model->B4SOIpntund;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PNDIODES: /* v4.0 */
|
||||
case B4SOI_MOD_PNDIODES: /* v4.0 */
|
||||
value->rValue = model->B4SOIpndiode;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PNDIODED: /* v4.0 */
|
||||
case B4SOI_MOD_PNDIODED: /* v4.0 */
|
||||
value->rValue = model->B4SOIpndioded;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PNRECF0S: /* v4.0 */
|
||||
case B4SOI_MOD_PNRECF0S: /* v4.0 */
|
||||
value->rValue = model->B4SOIpnrecf0;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PNRECF0D: /* v4.0 */
|
||||
case B4SOI_MOD_PNRECF0D: /* v4.0 */
|
||||
value->rValue = model->B4SOIpnrecf0d;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PNRECR0S: /* v4.0 */
|
||||
case B4SOI_MOD_PNRECR0S: /* v4.0 */
|
||||
value->rValue = model->B4SOIpnrecr0;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PNRECR0D: /* v4.0 */
|
||||
case B4SOI_MOD_PNRECR0D: /* v4.0 */
|
||||
value->rValue = model->B4SOIpnrecr0d;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PISBJT:
|
||||
value->rValue = model->B4SOIpisbjt;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PIDBJT: /* v4.0 */
|
||||
case B4SOI_MOD_PIDBJT: /* v4.0 */
|
||||
value->rValue = model->B4SOIpidbjt;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PISDIF:
|
||||
value->rValue = model->B4SOIpisdif;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PIDDIF: /* v4.0 */
|
||||
case B4SOI_MOD_PIDDIF: /* v4.0 */
|
||||
value->rValue = model->B4SOIpiddif;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PISREC:
|
||||
|
|
@ -2742,7 +2746,7 @@ IFvalue *value)
|
|||
case B4SOI_MOD_PISTUN:
|
||||
value->rValue = model->B4SOIpistun;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PIDTUN: /* v4.0 */
|
||||
case B4SOI_MOD_PIDTUN: /* v4.0 */
|
||||
value->rValue = model->B4SOIpidtun;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PVREC0S: /* v4.0 */
|
||||
|
|
@ -2769,13 +2773,13 @@ IFvalue *value)
|
|||
case B4SOI_MOD_PAELY:
|
||||
value->rValue = model->B4SOIpaely;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PAHLIS: /* v4.0 */
|
||||
case B4SOI_MOD_PAHLIS: /* v4.0 */
|
||||
value->rValue = model->B4SOIpahli;
|
||||
return(OK);
|
||||
case B4SOI_MOD_PAHLID: /* v4.0 */
|
||||
case B4SOI_MOD_PAHLID: /* v4.0 */
|
||||
value->rValue = model->B4SOIpahlid;
|
||||
return(OK);
|
||||
/* CV Model */
|
||||
/* CV Model */
|
||||
case B4SOI_MOD_PVSDFB:
|
||||
value->rValue = model->B4SOIpvsdfb;
|
||||
return(OK);
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
/*** B4SOI 04/27/2010 Released by Tanvir Morshed ***/
|
||||
/*** B4SOI 12/16/2010 Released by Tanvir Morshed ***/
|
||||
|
||||
|
||||
/**********
|
||||
* Copyright 2010 Regents of the University of California. All rights reserved.
|
||||
|
|
@ -35,7 +36,7 @@ B4SOImodel **oldmod;
|
|||
for (; *model ; model = &((*model)->B4SOInextModel))
|
||||
{ if ((*model)->B4SOImodName == modname ||
|
||||
(modfast && *model == modfast))
|
||||
goto delgot;
|
||||
goto delgot;
|
||||
oldmod = model;
|
||||
}
|
||||
return(E_NOMOD);
|
||||
|
|
@ -43,7 +44,9 @@ B4SOImodel **oldmod;
|
|||
delgot:
|
||||
*oldmod = (*model)->B4SOInextModel; /* cut deleted device out of list */
|
||||
for (here = (*model)->B4SOIinstances; here; here = here->B4SOInextInstance)
|
||||
{ if(prev) FREE(prev);
|
||||
{
|
||||
if (here->B4SOIowner != ARCHme) continue;
|
||||
if(prev) FREE(prev);
|
||||
prev = here;
|
||||
}
|
||||
if(prev) FREE(prev);
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
/*** B4SOI 04/27/2010 Released by Tanvir Morshed ***/
|
||||
/*** B4SOI 12/16/2010 Released by Tanvir Morshed ***/
|
||||
|
||||
|
||||
/**********
|
||||
* Copyright 2010 Regents of the University of California. All rights reserved.
|
||||
|
|
@ -6,11 +7,13 @@
|
|||
* Authors: 1999-2004 Pin Su, Hui Wan, Wei Jin, b3soimpar.c
|
||||
* Authors: 2005- Hui Wan, Xuemei Xi, Ali Niknejad, Chenming Hu.
|
||||
* Authors: 2009- Wenwei Yang, Chung-Hsun Lin, Ali Niknejad, Chenming Hu.
|
||||
* Authors: 2010- Tanvir Morshed, Ali Niknejad, Chenming Hu.
|
||||
* File: b4soimpar.c
|
||||
* Modified by Hui Wan, Xuemei Xi 11/30/2005
|
||||
* Modified by Wenwei Yang, Chung-Hsun Lin, Darsen Lu 03/06/2009
|
||||
* Modified by Tanvir Morshed 09/22/2009
|
||||
* Modified by Tanvir Morshed 12/31/2009
|
||||
* Modified by Tanvir Morshed 12/16/2010
|
||||
**********/
|
||||
|
||||
#include "ngspice/ngspice.h"
|
||||
|
|
@ -30,8 +33,7 @@ GENmodel *inMod)
|
|||
B4SOImodel *mod = (B4SOImodel*)inMod;
|
||||
switch(param)
|
||||
{
|
||||
|
||||
case B4SOI_MOD_MOBMOD :
|
||||
case B4SOI_MOD_MOBMOD :
|
||||
mod->B4SOImobMod = value->iValue;
|
||||
mod->B4SOImobModGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -61,19 +63,19 @@ GENmodel *inMod)
|
|||
mod->B4SOIversion = value->rValue;
|
||||
mod->B4SOIversionGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_MTRLMOD :
|
||||
case B4SOI_MOD_MTRLMOD :
|
||||
mod->B4SOImtrlMod = value->iValue;
|
||||
mod->B4SOImtrlModGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_VGSTCVMOD :
|
||||
case B4SOI_MOD_VGSTCVMOD :
|
||||
mod->B4SOIvgstcvMod = value->iValue;
|
||||
mod->B4SOIvgstcvModGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_GIDLMOD :
|
||||
break;
|
||||
case B4SOI_MOD_GIDLMOD :
|
||||
mod->B4SOIgidlMod = value->iValue;
|
||||
mod->B4SOIgidlModGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_IIIMOD :
|
||||
case B4SOI_MOD_IIIMOD :
|
||||
mod->B4SOIiiiMod = value->iValue;
|
||||
mod->B4SOIiiiModGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -110,48 +112,48 @@ GENmodel *inMod)
|
|||
mod->B4SOIbdosGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_EPSRGATE:
|
||||
mod->B4SOIepsrgate = value->rValue;
|
||||
mod->B4SOIepsrgateGiven = TRUE;
|
||||
break;
|
||||
mod->B4SOIepsrgate = value->rValue;
|
||||
mod->B4SOIepsrgateGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PHIG:
|
||||
mod->B4SOIphig = value->rValue;
|
||||
mod->B4SOIphigGiven = TRUE;
|
||||
break;
|
||||
mod->B4SOIphig = value->rValue;
|
||||
mod->B4SOIphigGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_EASUB:
|
||||
mod->B4SOIeasub = value->rValue;
|
||||
mod->B4SOIeasubGiven = TRUE;
|
||||
break;
|
||||
|
||||
break;
|
||||
|
||||
case B4SOI_MOD_TOXM :
|
||||
mod->B4SOItoxm = value->rValue;
|
||||
mod->B4SOItoxmGiven = TRUE;
|
||||
break; /* v3.2 */
|
||||
/*4.1 */
|
||||
case B4SOI_MOD_EOT :
|
||||
/*4.1 */
|
||||
case B4SOI_MOD_EOT :
|
||||
mod->B4SOIeot = value->rValue;
|
||||
mod->B4SOIeotGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_EPSROX :
|
||||
case B4SOI_MOD_EPSROX :
|
||||
mod->B4SOIepsrox = value->rValue;
|
||||
mod->B4SOIepsroxGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_EPSRSUB:
|
||||
case B4SOI_MOD_EPSRSUB:
|
||||
mod->B4SOIepsrsub = value->rValue;
|
||||
mod->B4SOIepsrsubGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_NI0SUB:
|
||||
case B4SOI_MOD_NI0SUB:
|
||||
mod->B4SOIni0sub = value->rValue;
|
||||
mod->B4SOIni0subGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_BG0SUB:
|
||||
case B4SOI_MOD_BG0SUB:
|
||||
mod->B4SOIbg0sub = value->rValue;
|
||||
mod->B4SOIbg0subGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_TBGASUB:
|
||||
case B4SOI_MOD_TBGASUB:
|
||||
mod->B4SOItbgasub = value->rValue;
|
||||
mod->B4SOItbgasubGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_TBGBSUB:
|
||||
case B4SOI_MOD_TBGBSUB:
|
||||
mod->B4SOItbgbsub = value->rValue;
|
||||
mod->B4SOItbgbsubGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -220,21 +222,21 @@ GENmodel *inMod)
|
|||
case B4SOI_MOD_NPEAK:
|
||||
mod->B4SOInpeak = value->rValue;
|
||||
mod->B4SOInpeakGiven = TRUE;
|
||||
/* Bug # 22 Jul09 Proper limiting conditions are specified in the B4SOIcheck.c file*/
|
||||
/* if (mod->B4SOInpeak > 1.0e20)
|
||||
mod->B4SOInpeak *= 1.0e-6; */
|
||||
/* Bug # 22 Jul09 Proper limiting conditions are specified in the B4SOIcheck.c file*/
|
||||
/* if (mod->B4SOInpeak > 1.0e20)
|
||||
mod->B4SOInpeak *= 1.0e-6; */
|
||||
break;
|
||||
case B4SOI_MOD_NSD:
|
||||
mod->B4SOInsd = value->rValue;
|
||||
mod->B4SOInsdGiven = TRUE;
|
||||
/* if (mod->B4SOInsd > 1.0e23)
|
||||
mod->B4SOInsd *= 1.0e-6; */ /* Bug # 22 Jul09 Proper limiting conditions are specified in the B4SOIcheck.c file*/
|
||||
mod->B4SOInsd *= 1.0e-6; */ /* Bug # 22 Jul09 Proper limiting conditions are specified in the B4SOIcheck.c file*/
|
||||
break;
|
||||
case B4SOI_MOD_NGATE:
|
||||
mod->B4SOIngate = value->rValue;
|
||||
mod->B4SOIngateGiven = TRUE;
|
||||
/* if (mod->B4SOIngate > 1.0e23)
|
||||
mod->B4SOIngate *= 1.0e-6; */ /* Bug # 22 Jul09 Proper limiting conditions are specified in the B4SOIcheck.c file*/
|
||||
/* if (mod->B4SOIngate > 1.0e23)
|
||||
mod->B4SOIngate *= 1.0e-6; */ /* Bug # 22 Jul09 Proper limiting conditions are specified in the B4SOIcheck.c file*/
|
||||
break;
|
||||
case B4SOI_MOD_GAMMA1:
|
||||
mod->B4SOIgamma1 = value->rValue;
|
||||
|
|
@ -288,7 +290,7 @@ GENmodel *inMod)
|
|||
mod->B4SOIlpe0 = value->rValue;
|
||||
mod->B4SOIlpe0Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LPEB: /* v4.0 for Vth */
|
||||
case B4SOI_MOD_LPEB: /* v4.0 for Vth */
|
||||
mod->B4SOIlpeb = value->rValue;
|
||||
mod->B4SOIlpebGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -373,82 +375,82 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIud = value->rValue;
|
||||
mod->B4SOIudGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LUD:
|
||||
case B4SOI_MOD_LUD:
|
||||
mod->B4SOIlud = value->rValue;
|
||||
mod->B4SOIludGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WUD:
|
||||
case B4SOI_MOD_WUD:
|
||||
mod->B4SOIwud = value->rValue;
|
||||
mod->B4SOIwudGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PUD:
|
||||
case B4SOI_MOD_PUD:
|
||||
mod->B4SOIpud = value->rValue;
|
||||
mod->B4SOIpudGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_UD1:
|
||||
case B4SOI_MOD_UD1:
|
||||
mod->B4SOIud1 = value->rValue;
|
||||
mod->B4SOIud1Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LUD1:
|
||||
case B4SOI_MOD_LUD1:
|
||||
mod->B4SOIlud1 = value->rValue;
|
||||
mod->B4SOIlud1Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WUD1:
|
||||
case B4SOI_MOD_WUD1:
|
||||
mod->B4SOIwud1 = value->rValue;
|
||||
mod->B4SOIwud1Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PUD1:
|
||||
case B4SOI_MOD_PUD1:
|
||||
mod->B4SOIpud1 = value->rValue;
|
||||
mod->B4SOIpud1Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_EU:
|
||||
case B4SOI_MOD_EU:
|
||||
mod->B4SOIeu = value->rValue;
|
||||
mod->B4SOIeuGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LEU:
|
||||
case B4SOI_MOD_LEU:
|
||||
mod->B4SOIleu = value->rValue;
|
||||
mod->B4SOIleuGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WEU:
|
||||
case B4SOI_MOD_WEU:
|
||||
mod->B4SOIweu = value->rValue;
|
||||
mod->B4SOIweuGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PEU:
|
||||
case B4SOI_MOD_PEU:
|
||||
mod->B4SOIpeu = value->rValue;
|
||||
mod->B4SOIpeuGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_UCS:
|
||||
case B4SOI_MOD_UCS:
|
||||
mod->B4SOIucs = value->rValue;
|
||||
mod->B4SOIucsGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LUCS:
|
||||
break;
|
||||
case B4SOI_MOD_LUCS:
|
||||
mod->B4SOIlucs = value->rValue;
|
||||
mod->B4SOIlucsGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WUCS:
|
||||
break;
|
||||
case B4SOI_MOD_WUCS:
|
||||
mod->B4SOIwucs = value->rValue;
|
||||
mod->B4SOIwucsGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PUCS:
|
||||
break;
|
||||
case B4SOI_MOD_PUCS:
|
||||
mod->B4SOIpucs = value->rValue;
|
||||
mod->B4SOIpucsGiven = TRUE;
|
||||
break; /* Bug fix # 31 Jul09 */
|
||||
case B4SOI_MOD_UCSTE:
|
||||
break; /* Bug fix # 31 Jul09 */
|
||||
case B4SOI_MOD_UCSTE:
|
||||
mod->B4SOIucste = value->rValue;
|
||||
mod->B4SOIucsteGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LUCSTE:
|
||||
break;
|
||||
case B4SOI_MOD_LUCSTE:
|
||||
mod->B4SOIlucste = value->rValue;
|
||||
mod->B4SOIlucsteGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WUCSTE:
|
||||
break;
|
||||
case B4SOI_MOD_WUCSTE:
|
||||
mod->B4SOIwucste = value->rValue;
|
||||
mod->B4SOIwucsteGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PUCSTE:
|
||||
break;
|
||||
case B4SOI_MOD_PUCSTE:
|
||||
mod->B4SOIpucste = value->rValue;
|
||||
mod->B4SOIpucsteGiven = TRUE;
|
||||
break;
|
||||
break;
|
||||
case B4SOI_MOD_VOFF:
|
||||
mod->B4SOIvoff = value->rValue;
|
||||
mod->B4SOIvoffGiven = TRUE;
|
||||
|
|
@ -582,7 +584,7 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOItsi = value->rValue;
|
||||
mod->B4SOItsiGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_ETSI :
|
||||
case B4SOI_MOD_ETSI :
|
||||
mod->B4SOIetsi = value->rValue;
|
||||
mod->B4SOIetsiGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -606,6 +608,10 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIcth0 = value->rValue;
|
||||
mod->B4SOIcth0Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_CFRCOEFF : /* v4.4 */
|
||||
mod->B4SOIcfrcoeff = value->rValue;
|
||||
mod->B4SOIcfrcoeffGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_EGIDL :
|
||||
mod->B4SOIegidl = value->rValue;
|
||||
mod->B4SOIegidlGiven = TRUE;
|
||||
|
|
@ -634,8 +640,8 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIfgidl = value->rValue;
|
||||
mod->B4SOIfgidlGiven = TRUE;
|
||||
break;
|
||||
|
||||
case B4SOI_MOD_EGISL :
|
||||
|
||||
case B4SOI_MOD_EGISL :
|
||||
mod->B4SOIegisl = value->rValue;
|
||||
mod->B4SOIegislGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -666,7 +672,7 @@ case B4SOI_MOD_UD:
|
|||
case B4SOI_MOD_FDMOD :
|
||||
/* mod->B4SOIfdMod = value->rValue; v4.2 */
|
||||
mod->B4SOIfdMod = value->iValue;
|
||||
mod->B4SOIfdModGiven = TRUE;
|
||||
mod->B4SOIfdModGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_VSCE :
|
||||
mod->B4SOIvsce = value->rValue;
|
||||
|
|
@ -675,7 +681,7 @@ case B4SOI_MOD_UD:
|
|||
case B4SOI_MOD_CDSBS :
|
||||
mod->B4SOIcdsbs = value->rValue;
|
||||
mod->B4SOIcdsbsGiven = TRUE;
|
||||
break;
|
||||
break;
|
||||
case B4SOI_MOD_MINVCV:
|
||||
mod->B4SOIminvcv = value->rValue;
|
||||
mod->B4SOIminvcvGiven = TRUE;
|
||||
|
|
@ -708,7 +714,7 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIpvoffcv = value->rValue;
|
||||
mod->B4SOIpvoffcvGiven = TRUE;
|
||||
break;
|
||||
|
||||
|
||||
case B4SOI_MOD_NDIODES : /* v4.0 */
|
||||
mod->B4SOIndiode = value->rValue;
|
||||
mod->B4SOIndiodeGiven = TRUE;
|
||||
|
|
@ -794,27 +800,27 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIsheetResistance = value->rValue;
|
||||
mod->B4SOIsheetResistanceGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PBSWGS : /* v4.0 */
|
||||
case B4SOI_MOD_PBSWGS : /* v4.0 */
|
||||
mod->B4SOIGatesidewallJctSPotential = value->rValue;
|
||||
mod->B4SOIGatesidewallJctSPotentialGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PBSWGD : /* v4.0 */
|
||||
case B4SOI_MOD_PBSWGD : /* v4.0 */
|
||||
mod->B4SOIGatesidewallJctDPotential = value->rValue;
|
||||
mod->B4SOIGatesidewallJctDPotentialGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_MJSWGS : /* v4.0 */
|
||||
case B4SOI_MOD_MJSWGS : /* v4.0 */
|
||||
mod->B4SOIbodyJctGateSideSGradingCoeff = value->rValue;
|
||||
mod->B4SOIbodyJctGateSideSGradingCoeffGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_MJSWGD : /* v4.0 */
|
||||
case B4SOI_MOD_MJSWGD : /* v4.0 */
|
||||
mod->B4SOIbodyJctGateSideDGradingCoeff = value->rValue;
|
||||
mod->B4SOIbodyJctGateSideDGradingCoeffGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_CJSWGS : /* v4.0 */
|
||||
case B4SOI_MOD_CJSWGS : /* v4.0 */
|
||||
mod->B4SOIunitLengthGateSidewallJctCapS = value->rValue;
|
||||
mod->B4SOIunitLengthGateSidewallJctCapSGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_CJSWGD : /* v4.0 */
|
||||
case B4SOI_MOD_CJSWGD : /* v4.0 */
|
||||
mod->B4SOIunitLengthGateSidewallJctCapD = value->rValue;
|
||||
mod->B4SOIunitLengthGateSidewallJctCapDGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -1139,7 +1145,7 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIxrcrg2 = value->rValue;
|
||||
mod->B4SOIxrcrg2Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_RSHG :
|
||||
case B4SOI_MOD_RSHG :
|
||||
mod->B4SOIrshg = value->rValue;
|
||||
mod->B4SOIrshgGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -1173,8 +1179,8 @@ case B4SOI_MOD_UD:
|
|||
case B4SOI_MOD_RBDB :
|
||||
mod->B4SOIrbdb = value->rValue;
|
||||
mod->B4SOIrbdbGiven = TRUE;
|
||||
break; /* Bug fix # 31 Jul 09 */
|
||||
case B4SOI_MOD_RBSB :
|
||||
break; /* Bug fix # 31 Jul 09 */
|
||||
case B4SOI_MOD_RBSB :
|
||||
mod->B4SOIrbsb = value->rValue;
|
||||
mod->B4SOIrbsbGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -1333,7 +1339,7 @@ case B4SOI_MOD_UD:
|
|||
|
||||
/* v4.0 */
|
||||
|
||||
/* v4.0 stress effect */
|
||||
/* v4.0 stress effect */
|
||||
case B4SOI_MOD_SAREF :
|
||||
mod->B4SOIsaref = value->rValue;
|
||||
mod->B4SOIsarefGiven = TRUE;
|
||||
|
|
@ -1409,8 +1415,8 @@ case B4SOI_MOD_UD:
|
|||
case B4SOI_MOD_LODK2 :
|
||||
mod->B4SOIlodk2 = value->rValue;
|
||||
mod->B4SOIlodk2Given = TRUE;
|
||||
break; /* Bug fix # 31 Jul 09*/
|
||||
case B4SOI_MOD_STETA0 :
|
||||
break; /* Bug fix # 31 Jul 09*/
|
||||
case B4SOI_MOD_STETA0 :
|
||||
mod->B4SOIsteta0 = value->rValue;
|
||||
mod->B4SOIsteta0Given = TRUE;
|
||||
break;
|
||||
|
|
@ -1419,17 +1425,17 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIlodeta0Given = TRUE;
|
||||
break;
|
||||
|
||||
/* v4.0 stress effect end */
|
||||
/* v4.0 stress effect end */
|
||||
|
||||
/* v3.2 */
|
||||
case B4SOI_MOD_FNOIMOD :
|
||||
mod->B4SOIfnoiMod = value->iValue;
|
||||
mod->B4SOIfnoiModGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_TNOIMOD :
|
||||
mod->B4SOItnoiMod = value->iValue;
|
||||
mod->B4SOItnoiModGiven = TRUE;
|
||||
break;
|
||||
/* v3.2 */
|
||||
case B4SOI_MOD_FNOIMOD :
|
||||
mod->B4SOIfnoiMod = value->iValue;
|
||||
mod->B4SOIfnoiModGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_TNOIMOD :
|
||||
mod->B4SOItnoiMod = value->iValue;
|
||||
mod->B4SOItnoiModGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_TNOIA :
|
||||
mod->B4SOItnoia = value->rValue;
|
||||
mod->B4SOItnoiaGiven = TRUE;
|
||||
|
|
@ -1451,7 +1457,7 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIntnoiGiven = TRUE;
|
||||
break;
|
||||
|
||||
/* v3.2 end */
|
||||
/* v3.2 end */
|
||||
|
||||
/* v2.0 release */
|
||||
case B4SOI_MOD_K1W1 :
|
||||
|
|
@ -1490,7 +1496,7 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOItii = value->rValue;
|
||||
mod->B4SOItiiGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_TVBCI :
|
||||
case B4SOI_MOD_TVBCI :
|
||||
mod->B4SOItvbci = value->rValue;
|
||||
mod->B4SOItvbciGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -1518,8 +1524,8 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIfbjtii = value->rValue;
|
||||
mod->B4SOIfbjtiiGiven = TRUE;
|
||||
break;
|
||||
/*4.1 Iii model*/
|
||||
case B4SOI_MOD_EBJTII :
|
||||
/*4.1 Iii model*/
|
||||
case B4SOI_MOD_EBJTII :
|
||||
mod->B4SOIebjtii = value->rValue;
|
||||
mod->B4SOIebjtiiGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -1543,27 +1549,27 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIesatii = value->rValue;
|
||||
mod->B4SOIesatiiGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_NTUNS : /* v4.0 */
|
||||
case B4SOI_MOD_NTUNS : /* v4.0 */
|
||||
mod->B4SOIntun = value->rValue;
|
||||
mod->B4SOIntunGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_NTUND : /* v4.0 */
|
||||
case B4SOI_MOD_NTUND : /* v4.0 */
|
||||
mod->B4SOIntund = value->rValue;
|
||||
mod->B4SOIntundGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_NRECF0S : /* v4.0 */
|
||||
case B4SOI_MOD_NRECF0S : /* v4.0 */
|
||||
mod->B4SOInrecf0 = value->rValue;
|
||||
mod->B4SOInrecf0Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_NRECF0D : /* v4.0 */
|
||||
case B4SOI_MOD_NRECF0D : /* v4.0 */
|
||||
mod->B4SOInrecf0d = value->rValue;
|
||||
mod->B4SOInrecf0dGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_NRECR0S : /* v4.0 */
|
||||
case B4SOI_MOD_NRECR0S : /* v4.0 */
|
||||
mod->B4SOInrecr0 = value->rValue;
|
||||
mod->B4SOInrecr0Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_NRECR0D : /* v4.0 */
|
||||
case B4SOI_MOD_NRECR0D : /* v4.0 */
|
||||
mod->B4SOInrecr0d = value->rValue;
|
||||
mod->B4SOInrecr0dGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -1571,7 +1577,7 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIisbjt = value->rValue;
|
||||
mod->B4SOIisbjtGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_IDBJT : /* v4.0 */
|
||||
case B4SOI_MOD_IDBJT : /* v4.0 */
|
||||
mod->B4SOIidbjt = value->rValue;
|
||||
mod->B4SOIidbjtGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -1579,7 +1585,7 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIisdif = value->rValue;
|
||||
mod->B4SOIisdifGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_IDDIF : /* v4.0 */
|
||||
case B4SOI_MOD_IDDIF : /* v4.0 */
|
||||
mod->B4SOIiddif = value->rValue;
|
||||
mod->B4SOIiddifGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -1587,7 +1593,7 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIisrec = value->rValue;
|
||||
mod->B4SOIisrecGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_IDREC : /* v4.0 */
|
||||
case B4SOI_MOD_IDREC : /* v4.0 */
|
||||
mod->B4SOIidrec = value->rValue;
|
||||
mod->B4SOIidrecGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -1595,7 +1601,7 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIistun = value->rValue;
|
||||
mod->B4SOIistunGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_IDTUN : /* v4.0 */
|
||||
case B4SOI_MOD_IDTUN : /* v4.0 */
|
||||
mod->B4SOIidtun = value->rValue;
|
||||
mod->B4SOIidtunGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -1603,19 +1609,19 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIln = value->rValue;
|
||||
mod->B4SOIlnGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_VREC0S : /* v4.0 */
|
||||
case B4SOI_MOD_VREC0S : /* v4.0 */
|
||||
mod->B4SOIvrec0 = value->rValue;
|
||||
mod->B4SOIvrec0Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_VREC0D : /* v4.0 */
|
||||
case B4SOI_MOD_VREC0D : /* v4.0 */
|
||||
mod->B4SOIvrec0d = value->rValue;
|
||||
mod->B4SOIvrec0dGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_VTUN0S : /* v4.0 */
|
||||
case B4SOI_MOD_VTUN0S : /* v4.0 */
|
||||
mod->B4SOIvtun0 = value->rValue;
|
||||
mod->B4SOIvtun0Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_VTUN0D : /* v4.0 */
|
||||
case B4SOI_MOD_VTUN0D : /* v4.0 */
|
||||
mod->B4SOIvtun0d = value->rValue;
|
||||
mod->B4SOIvtun0dGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -1639,11 +1645,11 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIaely = value->rValue;
|
||||
mod->B4SOIaelyGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_AHLIS : /* v4.0 */
|
||||
case B4SOI_MOD_AHLIS : /* v4.0 */
|
||||
mod->B4SOIahli = value->rValue;
|
||||
mod->B4SOIahliGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_AHLID : /* v4.0 */
|
||||
case B4SOI_MOD_AHLID : /* v4.0 */
|
||||
mod->B4SOIahlid = value->rValue;
|
||||
mod->B4SOIahlidGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -1933,7 +1939,7 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIllpe0 = value->rValue;
|
||||
mod->B4SOIllpe0Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LLPEB: /* v4.0 for Vth */
|
||||
case B4SOI_MOD_LLPEB: /* v4.0 for Vth */
|
||||
mod->B4SOIllpeb = value->rValue;
|
||||
mod->B4SOIllpebGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -2117,8 +2123,8 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIlfbjtii = value->rValue;
|
||||
mod->B4SOIlfbjtiiGiven = TRUE;
|
||||
break;
|
||||
/*4.1 Iii model*/
|
||||
case B4SOI_MOD_LEBJTII :
|
||||
/*4.1 Iii model*/
|
||||
case B4SOI_MOD_LEBJTII :
|
||||
mod->B4SOIlebjtii = value->rValue;
|
||||
mod->B4SOIlebjtiiGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -2138,7 +2144,7 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIlmbjtii = value->rValue;
|
||||
mod->B4SOIlmbjtiiGiven = TRUE;
|
||||
break;
|
||||
|
||||
|
||||
case B4SOI_MOD_LBETA0 :
|
||||
mod->B4SOIlbeta0 = value->rValue;
|
||||
mod->B4SOIlbeta0Given = TRUE;
|
||||
|
|
@ -2207,8 +2213,8 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIlfgidl = value->rValue;
|
||||
mod->B4SOIlfgidlGiven = TRUE;
|
||||
break;
|
||||
|
||||
case B4SOI_MOD_LAGISL :
|
||||
|
||||
case B4SOI_MOD_LAGISL :
|
||||
mod->B4SOIlagisl = value->rValue;
|
||||
mod->B4SOIlagislGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -2236,35 +2242,35 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIlfgisl = value->rValue;
|
||||
mod->B4SOIlfgislGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LNTUNS : /* v4.0 */
|
||||
case B4SOI_MOD_LNTUNS : /* v4.0 */
|
||||
mod->B4SOIlntun = value->rValue;
|
||||
mod->B4SOIlntunGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LNTUND : /* v4.0 */
|
||||
case B4SOI_MOD_LNTUND : /* v4.0 */
|
||||
mod->B4SOIlntund = value->rValue;
|
||||
mod->B4SOIlntundGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LNDIODES : /* v4.0 */
|
||||
case B4SOI_MOD_LNDIODES : /* v4.0 */
|
||||
mod->B4SOIlndiode = value->rValue;
|
||||
mod->B4SOIlndiodeGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LNDIODED : /* v4.0 */
|
||||
case B4SOI_MOD_LNDIODED : /* v4.0 */
|
||||
mod->B4SOIlndioded = value->rValue;
|
||||
mod->B4SOIlndiodedGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LNRECF0S : /* v4.0 */
|
||||
case B4SOI_MOD_LNRECF0S : /* v4.0 */
|
||||
mod->B4SOIlnrecf0 = value->rValue;
|
||||
mod->B4SOIlnrecf0Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LNRECF0D : /* v4.0 */
|
||||
case B4SOI_MOD_LNRECF0D : /* v4.0 */
|
||||
mod->B4SOIlnrecf0d = value->rValue;
|
||||
mod->B4SOIlnrecf0dGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LNRECR0S : /* v4.0 */
|
||||
case B4SOI_MOD_LNRECR0S : /* v4.0 */
|
||||
mod->B4SOIlnrecr0 = value->rValue;
|
||||
mod->B4SOIlnrecr0Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LNRECR0D : /* v4.0 */
|
||||
case B4SOI_MOD_LNRECR0D : /* v4.0 */
|
||||
mod->B4SOIlnrecr0d = value->rValue;
|
||||
mod->B4SOIlnrecr0dGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -2272,7 +2278,7 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIlisbjt = value->rValue;
|
||||
mod->B4SOIlisbjtGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LIDBJT : /* v4.0 */
|
||||
case B4SOI_MOD_LIDBJT : /* v4.0 */
|
||||
mod->B4SOIlidbjt = value->rValue;
|
||||
mod->B4SOIlidbjtGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -2280,7 +2286,7 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIlisdif = value->rValue;
|
||||
mod->B4SOIlisdifGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LIDDIF : /* v4.0 */
|
||||
case B4SOI_MOD_LIDDIF : /* v4.0 */
|
||||
mod->B4SOIliddif = value->rValue;
|
||||
mod->B4SOIliddifGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -2288,7 +2294,7 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIlisrec = value->rValue;
|
||||
mod->B4SOIlisrecGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LIDREC : /* v4.0 */
|
||||
case B4SOI_MOD_LIDREC : /* v4.0 */
|
||||
mod->B4SOIlidrec = value->rValue;
|
||||
mod->B4SOIlidrecGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -2296,7 +2302,7 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIlistun = value->rValue;
|
||||
mod->B4SOIlistunGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LIDTUN : /* v4.0 */
|
||||
case B4SOI_MOD_LIDTUN : /* v4.0 */
|
||||
mod->B4SOIlidtun = value->rValue;
|
||||
mod->B4SOIlidtunGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -2332,11 +2338,11 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIlaely = value->rValue;
|
||||
mod->B4SOIlaelyGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LAHLIS : /* v4.0 */
|
||||
case B4SOI_MOD_LAHLIS : /* v4.0 */
|
||||
mod->B4SOIlahli = value->rValue;
|
||||
mod->B4SOIlahliGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_LAHLID : /* v4.0 */
|
||||
case B4SOI_MOD_LAHLID : /* v4.0 */
|
||||
mod->B4SOIlahlid = value->rValue;
|
||||
mod->B4SOIlahlidGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -2352,7 +2358,7 @@ case B4SOI_MOD_UD:
|
|||
break;
|
||||
/* v3.1 for RF end */
|
||||
|
||||
/* CV Model */
|
||||
/* CV Model */
|
||||
case B4SOI_MOD_LVSDFB :
|
||||
mod->B4SOIlvsdfb = value->rValue;
|
||||
mod->B4SOIlvsdfbGiven = TRUE;
|
||||
|
|
@ -2599,7 +2605,7 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIwlpe0 = value->rValue;
|
||||
mod->B4SOIwlpe0Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WLPEB: /* v4.0 for Vth */
|
||||
case B4SOI_MOD_WLPEB: /* v4.0 for Vth */
|
||||
mod->B4SOIwlpeb = value->rValue;
|
||||
mod->B4SOIwlpebGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -2783,8 +2789,8 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIwfbjtii = value->rValue;
|
||||
mod->B4SOIwfbjtiiGiven = TRUE;
|
||||
break;
|
||||
/*4.1 Iii model*/
|
||||
case B4SOI_MOD_WEBJTII :
|
||||
/*4.1 Iii model*/
|
||||
case B4SOI_MOD_WEBJTII :
|
||||
mod->B4SOIwebjtii = value->rValue;
|
||||
mod->B4SOIwebjtiiGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -2804,7 +2810,7 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIwmbjtii = value->rValue;
|
||||
mod->B4SOIwmbjtiiGiven = TRUE;
|
||||
break;
|
||||
|
||||
|
||||
case B4SOI_MOD_WBETA0 :
|
||||
mod->B4SOIwbeta0 = value->rValue;
|
||||
mod->B4SOIwbeta0Given = TRUE;
|
||||
|
|
@ -2873,44 +2879,44 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIwfgidl = value->rValue;
|
||||
mod->B4SOIwfgidlGiven = TRUE;
|
||||
break;
|
||||
|
||||
|
||||
case B4SOI_MOD_WAGISL :
|
||||
|
||||
|
||||
case B4SOI_MOD_WAGISL :
|
||||
mod->B4SOIwagisl = value->rValue;
|
||||
mod->B4SOIwagislGiven = TRUE;
|
||||
break;
|
||||
|
||||
|
||||
case B4SOI_MOD_WBGISL :
|
||||
mod->B4SOIwbgisl = value->rValue;
|
||||
mod->B4SOIwbgislGiven = TRUE;
|
||||
break;
|
||||
|
||||
|
||||
case B4SOI_MOD_WCGISL :
|
||||
mod->B4SOIwcgisl = value->rValue;
|
||||
mod->B4SOIwcgislGiven = TRUE;
|
||||
break;
|
||||
|
||||
|
||||
case B4SOI_MOD_WEGISL :
|
||||
mod->B4SOIwegisl = value->rValue;
|
||||
mod->B4SOIwegislGiven = TRUE;
|
||||
break;
|
||||
|
||||
|
||||
case B4SOI_MOD_WRGISL :
|
||||
mod->B4SOIwrgisl = value->rValue;
|
||||
mod->B4SOIwrgislGiven = TRUE;
|
||||
break;
|
||||
|
||||
|
||||
case B4SOI_MOD_WKGISL :
|
||||
mod->B4SOIwkgisl = value->rValue;
|
||||
mod->B4SOIwkgislGiven = TRUE;
|
||||
break;
|
||||
|
||||
|
||||
case B4SOI_MOD_WFGISL :
|
||||
mod->B4SOIwfgisl = value->rValue;
|
||||
mod->B4SOIwfgislGiven = TRUE;
|
||||
break;
|
||||
|
||||
|
||||
|
||||
|
||||
case B4SOI_MOD_WNTUNS : /* v4.0 */
|
||||
mod->B4SOIwntun = value->rValue;
|
||||
mod->B4SOIwntunGiven = TRUE;
|
||||
|
|
@ -2927,19 +2933,19 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIwndioded = value->rValue;
|
||||
mod->B4SOIwndiodedGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WNRECF0S : /* v4.0 */
|
||||
case B4SOI_MOD_WNRECF0S : /* v4.0 */
|
||||
mod->B4SOIwnrecf0 = value->rValue;
|
||||
mod->B4SOIwnrecf0Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WNRECF0D : /* v4.0 */
|
||||
case B4SOI_MOD_WNRECF0D : /* v4.0 */
|
||||
mod->B4SOIwnrecf0d = value->rValue;
|
||||
mod->B4SOIwnrecf0dGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WNRECR0S : /* v4.0 */
|
||||
case B4SOI_MOD_WNRECR0S : /* v4.0 */
|
||||
mod->B4SOIwnrecr0 = value->rValue;
|
||||
mod->B4SOIwnrecr0Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WNRECR0D : /* v4.0 */
|
||||
case B4SOI_MOD_WNRECR0D : /* v4.0 */
|
||||
mod->B4SOIwnrecr0d = value->rValue;
|
||||
mod->B4SOIwnrecr0dGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -2947,7 +2953,7 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIwisbjt = value->rValue;
|
||||
mod->B4SOIwisbjtGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WIDBJT : /* v4.0 */
|
||||
case B4SOI_MOD_WIDBJT : /* v4.0 */
|
||||
mod->B4SOIwidbjt = value->rValue;
|
||||
mod->B4SOIwidbjtGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -2955,7 +2961,7 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIwisdif = value->rValue;
|
||||
mod->B4SOIwisdifGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WIDDIF : /* v4.0 */
|
||||
case B4SOI_MOD_WIDDIF : /* v4.0 */
|
||||
mod->B4SOIwiddif = value->rValue;
|
||||
mod->B4SOIwiddifGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -2963,7 +2969,7 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIwisrec = value->rValue;
|
||||
mod->B4SOIwisrecGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WIDREC : /* v4.0 */
|
||||
case B4SOI_MOD_WIDREC : /* v4.0 */
|
||||
mod->B4SOIwidrec = value->rValue;
|
||||
mod->B4SOIwidrecGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -2971,7 +2977,7 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIwistun = value->rValue;
|
||||
mod->B4SOIwistunGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WIDTUN : /* v4.0 */
|
||||
case B4SOI_MOD_WIDTUN : /* v4.0 */
|
||||
mod->B4SOIwidtun = value->rValue;
|
||||
mod->B4SOIwidtunGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -3007,11 +3013,11 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIwaely = value->rValue;
|
||||
mod->B4SOIwaelyGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WAHLIS : /* v4.0 */
|
||||
case B4SOI_MOD_WAHLIS : /* v4.0 */
|
||||
mod->B4SOIwahli = value->rValue;
|
||||
mod->B4SOIwahliGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_WAHLID : /* v4.0 */
|
||||
case B4SOI_MOD_WAHLID : /* v4.0 */
|
||||
mod->B4SOIwahlid = value->rValue;
|
||||
mod->B4SOIwahlidGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -3027,7 +3033,7 @@ case B4SOI_MOD_UD:
|
|||
break;
|
||||
/* v3.1 for RF end */
|
||||
|
||||
/* CV Model */
|
||||
/* CV Model */
|
||||
case B4SOI_MOD_WVSDFB :
|
||||
mod->B4SOIwvsdfb = value->rValue;
|
||||
mod->B4SOIwvsdfbGiven = TRUE;
|
||||
|
|
@ -3274,7 +3280,7 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIplpe0 = value->rValue;
|
||||
mod->B4SOIplpe0Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PLPEB: /* v4.0 for Vth */
|
||||
case B4SOI_MOD_PLPEB: /* v4.0 for Vth */
|
||||
mod->B4SOIplpeb = value->rValue;
|
||||
mod->B4SOIplpebGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -3458,8 +3464,8 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIpfbjtii = value->rValue;
|
||||
mod->B4SOIpfbjtiiGiven = TRUE;
|
||||
break;
|
||||
/*4.1 Iii model*/
|
||||
case B4SOI_MOD_PEBJTII :
|
||||
/*4.1 Iii model*/
|
||||
case B4SOI_MOD_PEBJTII :
|
||||
mod->B4SOIpebjtii = value->rValue;
|
||||
mod->B4SOIpebjtiiGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -3547,8 +3553,8 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIpfgidl = value->rValue;
|
||||
mod->B4SOIpfgidlGiven = TRUE;
|
||||
break;
|
||||
|
||||
case B4SOI_MOD_PAGISL :
|
||||
|
||||
case B4SOI_MOD_PAGISL :
|
||||
mod->B4SOIpagisl = value->rValue;
|
||||
mod->B4SOIpagislGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -3575,36 +3581,36 @@ case B4SOI_MOD_UD:
|
|||
case B4SOI_MOD_PFGISL :
|
||||
mod->B4SOIpfgisl = value->rValue;
|
||||
mod->B4SOIpfgislGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PNTUNS : /* v4.0 */
|
||||
break;
|
||||
case B4SOI_MOD_PNTUNS : /* v4.0 */
|
||||
mod->B4SOIpntun = value->rValue;
|
||||
mod->B4SOIpntunGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PNTUND : /* v4.0 */
|
||||
case B4SOI_MOD_PNTUND : /* v4.0 */
|
||||
mod->B4SOIpntund = value->rValue;
|
||||
mod->B4SOIpntundGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PNDIODES : /* v4.0 */
|
||||
case B4SOI_MOD_PNDIODES : /* v4.0 */
|
||||
mod->B4SOIpndiode = value->rValue;
|
||||
mod->B4SOIpndiodeGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PNDIODED : /* v4.0 */
|
||||
case B4SOI_MOD_PNDIODED : /* v4.0 */
|
||||
mod->B4SOIpndioded = value->rValue;
|
||||
mod->B4SOIpndiodedGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PNRECF0S : /* v4.0 */
|
||||
case B4SOI_MOD_PNRECF0S : /* v4.0 */
|
||||
mod->B4SOIpnrecf0 = value->rValue;
|
||||
mod->B4SOIpnrecf0Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PNRECF0D : /* v4.0 */
|
||||
case B4SOI_MOD_PNRECF0D : /* v4.0 */
|
||||
mod->B4SOIpnrecf0d = value->rValue;
|
||||
mod->B4SOIpnrecf0dGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PNRECR0S : /* v4.0 */
|
||||
case B4SOI_MOD_PNRECR0S : /* v4.0 */
|
||||
mod->B4SOIpnrecr0 = value->rValue;
|
||||
mod->B4SOIpnrecr0Given = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PNRECR0D : /* v4.0 */
|
||||
case B4SOI_MOD_PNRECR0D : /* v4.0 */
|
||||
mod->B4SOIpnrecr0d = value->rValue;
|
||||
mod->B4SOIpnrecr0dGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -3612,7 +3618,7 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIpisbjt = value->rValue;
|
||||
mod->B4SOIpisbjtGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PIDBJT : /* v4.0 */
|
||||
case B4SOI_MOD_PIDBJT : /* v4.0 */
|
||||
mod->B4SOIpidbjt = value->rValue;
|
||||
mod->B4SOIpidbjtGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -3620,7 +3626,7 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIpisdif = value->rValue;
|
||||
mod->B4SOIpisdifGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PIDDIF : /* v4.0 */
|
||||
case B4SOI_MOD_PIDDIF : /* v4.0 */
|
||||
mod->B4SOIpiddif = value->rValue;
|
||||
mod->B4SOIpiddifGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -3628,7 +3634,7 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIpisrec = value->rValue;
|
||||
mod->B4SOIpisrecGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PIDREC : /* v4.0 */
|
||||
case B4SOI_MOD_PIDREC : /* v4.0 */
|
||||
mod->B4SOIpidrec = value->rValue;
|
||||
mod->B4SOIpidrecGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -3636,7 +3642,7 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIpistun = value->rValue;
|
||||
mod->B4SOIpistunGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PIDTUN : /* v4.0 */
|
||||
case B4SOI_MOD_PIDTUN : /* v4.0 */
|
||||
mod->B4SOIpidtun = value->rValue;
|
||||
mod->B4SOIpidtunGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -3672,11 +3678,11 @@ case B4SOI_MOD_UD:
|
|||
mod->B4SOIpaely = value->rValue;
|
||||
mod->B4SOIpaelyGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PAHLIS : /* v4.0 */
|
||||
case B4SOI_MOD_PAHLIS : /* v4.0 */
|
||||
mod->B4SOIpahli = value->rValue;
|
||||
mod->B4SOIpahliGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_MOD_PAHLID : /* v4.0 */
|
||||
case B4SOI_MOD_PAHLID : /* v4.0 */
|
||||
mod->B4SOIpahlid = value->rValue;
|
||||
mod->B4SOIpahlidGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -3692,7 +3698,7 @@ case B4SOI_MOD_UD:
|
|||
break;
|
||||
/* v3.1 for RF end */
|
||||
|
||||
/* CV Model */
|
||||
/* CV Model */
|
||||
case B4SOI_MOD_PVSDFB :
|
||||
mod->B4SOIpvsdfb = value->rValue;
|
||||
mod->B4SOIpvsdfbGiven = TRUE;
|
||||
|
|
@ -3719,7 +3725,7 @@ case B4SOI_MOD_UD:
|
|||
break; /* v3.2 */
|
||||
/* Added for binning - END */
|
||||
|
||||
/* 4.0 backward compatibility */
|
||||
/* 4.0 backward compatibility */
|
||||
case B4SOI_MOD_NLX:
|
||||
mod->B4SOInlx = value->rValue;
|
||||
mod->B4SOInlxGiven = TRUE;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
/** B4SOI 04/27/2010 Released by Tanvir Morshed ***/
|
||||
/*** B4SOI 12/16/2010 Released by Tanvir Morshed ***/
|
||||
|
||||
|
||||
/**********
|
||||
* Copyright 2010 Regents of the University of California. All rights reserved.
|
||||
|
|
@ -45,14 +46,12 @@
|
|||
Flicker noise = Unified model
|
||||
*/
|
||||
|
||||
|
||||
static double
|
||||
B4SOIEval1ovFNoise(
|
||||
double vds,
|
||||
B4SOImodel *model,
|
||||
B4SOIinstance *here,
|
||||
double freq,
|
||||
double temp)
|
||||
double freq, double temp)
|
||||
{
|
||||
struct b4soiSizeDependParam *pParam;
|
||||
double cd, esat, DelClm, EffFreq, N0, Nl;
|
||||
|
|
@ -104,8 +103,6 @@ CKTcircuit *ckt,
|
|||
Ndata *data,
|
||||
double *OnDens)
|
||||
{
|
||||
NOISEAN *job = (NOISEAN *) ckt->CKTcurJob;
|
||||
|
||||
register B4SOImodel *model = (B4SOImodel *)inModel;
|
||||
register B4SOIinstance *here;
|
||||
struct b4soiSizeDependParam *pParam;
|
||||
|
|
@ -127,103 +124,110 @@ double tempRatioSH, Vdseffovcd; /* v4.2 bugfix */
|
|||
|
||||
int i;
|
||||
|
||||
double m;
|
||||
|
||||
/* define the names of the noise sources */
|
||||
static char *B4SOInNames[B4SOINSRCS] =
|
||||
{ /* Note that we have to keep the order */
|
||||
".rd", /* noise due to rd */
|
||||
/* consistent with the index definitions */
|
||||
".rs", /* noise due to rs */
|
||||
/* in B4SOIdefs.h */
|
||||
".rg", /* noise due to rgeltd, v3.2 */
|
||||
".id", /* noise due to id */
|
||||
".1overf", /* flicker (1/f) noise */
|
||||
".fb_ibs", /* noise due to floating body by ibs */
|
||||
".fb_ibd", /* noise due to floating body by ibd */
|
||||
".igs", /* shot noise due to IGS, v3.2 */
|
||||
".igd", /* shot noise due to IGD, v3.2 */
|
||||
".igb", /* shot noise due to IGB, v3.2 */
|
||||
".rd", /* noise due to rd */
|
||||
/* consistent with the index definitions */
|
||||
".rs", /* noise due to rs */
|
||||
/* in B4SOIdefs.h */
|
||||
".rg", /* noise due to rgeltd, v3.2 */
|
||||
".id", /* noise due to id */
|
||||
".1overf", /* flicker (1/f) noise */
|
||||
".fb_ibs", /* noise due to floating body by ibs */
|
||||
".fb_ibd", /* noise due to floating body by ibd */
|
||||
".igs", /* shot noise due to IGS, v3.2 */
|
||||
".igd", /* shot noise due to IGD, v3.2 */
|
||||
".igb", /* shot noise due to IGB, v3.2 */
|
||||
".rbsb", /* noise due to rbsb v4.0 */
|
||||
".rbdb", /* noise due to rbdb v4.0 */
|
||||
".rbody", /* noise due to body contact v4.0 */
|
||||
|
||||
"" /* total transistor noise */
|
||||
|
||||
"" /* total transistor noise */
|
||||
};
|
||||
|
||||
for (; model != NULL; model = model->B4SOInextModel)
|
||||
{ for (here = model->B4SOIinstances; here != NULL;
|
||||
here = here->B4SOInextInstance)
|
||||
{ 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 */
|
||||
{ for (here = model->B4SOIinstances; here != NULL;
|
||||
here = here->B4SOInextInstance)
|
||||
{
|
||||
if (here->B4SOIowner != ARCHme) continue;
|
||||
|
||||
if (job->NStpsSm != 0)
|
||||
{ switch (mode)
|
||||
{ case N_DENS:
|
||||
for (i = 0; i < B4SOINSRCS; i++)
|
||||
{ (void) sprintf(name, "onoise.%s%s",
|
||||
here->B4SOIname,
|
||||
B4SOInNames[i]);
|
||||
data->namelist = TREALLOC(IFuid, data->namelist, data->numPlots + 1);
|
||||
if (!data->namelist)
|
||||
return(E_NOMEM);
|
||||
SPfrontEnd->IFnewUid (ckt,
|
||||
&(data->namelist[data->numPlots++]),
|
||||
NULL, name, UID_OTHER,
|
||||
NULL);
|
||||
/* we've added one more plot */
|
||||
}
|
||||
break;
|
||||
case INT_NOIZ:
|
||||
for (i = 0; i < B4SOINSRCS; i++)
|
||||
{ (void) sprintf(name, "onoise_total.%s%s",
|
||||
here->B4SOIname,
|
||||
B4SOInNames[i]);
|
||||
data->namelist = TREALLOC(IFuid, data->namelist, data->numPlots + 1);
|
||||
if (!data->namelist)
|
||||
return(E_NOMEM);
|
||||
SPfrontEnd->IFnewUid (ckt,
|
||||
&(data->namelist[data->numPlots++]),
|
||||
NULL, name, UID_OTHER,
|
||||
NULL);
|
||||
/* we've added one more plot */
|
||||
m = here->B4SOIm;
|
||||
|
||||
(void) sprintf(name, "inoise_total.%s%s",
|
||||
here->B4SOIname,
|
||||
B4SOInNames[i]);
|
||||
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 < B4SOINSRCS; i++)
|
||||
{ (void) sprintf(name, "onoise.%s%s",
|
||||
here->B4SOIname,
|
||||
B4SOInNames[i]);
|
||||
data->namelist = TREALLOC(IFuid, data->namelist, data->numPlots + 1);
|
||||
if (!data->namelist)
|
||||
return(E_NOMEM);
|
||||
SPfrontEnd->IFnewUid (ckt,
|
||||
&(data->namelist[data->numPlots++]),
|
||||
NULL, name, UID_OTHER,
|
||||
NULL);
|
||||
/* we've added one more plot */
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case N_CALC:
|
||||
switch (mode)
|
||||
{ case N_DENS:
|
||||
return(E_NOMEM);
|
||||
(*(SPfrontEnd->IFnewUid)) (ckt,
|
||||
&(data->namelist[data->numPlots++]),
|
||||
(IFuid) NULL, name, UID_OTHER,
|
||||
NULL);
|
||||
/* we've added one more plot */
|
||||
}
|
||||
break;
|
||||
case INT_NOIZ:
|
||||
for (i = 0; i < B4SOINSRCS; i++)
|
||||
{ (void) sprintf(name, "onoise_total.%s%s",
|
||||
here->B4SOIname,
|
||||
B4SOInNames[i]);
|
||||
data->namelist = TREALLOC(IFuid, data->namelist, data->numPlots + 1);
|
||||
if (!data->namelist)
|
||||
return(E_NOMEM);
|
||||
(*(SPfrontEnd->IFnewUid)) (ckt,
|
||||
&(data->namelist[data->numPlots++]),
|
||||
(IFuid) NULL, name, UID_OTHER,
|
||||
NULL);
|
||||
/* we've added one more plot */
|
||||
|
||||
(void) sprintf(name, "inoise_total.%s%s",
|
||||
here->B4SOIname,
|
||||
B4SOInNames[i]);
|
||||
data->namelist = TREALLOC(IFuid, data->namelist, data->numPlots + 1);
|
||||
if (!data->namelist)
|
||||
return(E_NOMEM);
|
||||
(*(SPfrontEnd->IFnewUid)) (ckt,
|
||||
&(data->namelist[data->numPlots++]),
|
||||
(IFuid) NULL, name, UID_OTHER,
|
||||
NULL);
|
||||
/* we've added one more plot */
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case N_CALC:
|
||||
switch (mode)
|
||||
{ case N_DENS:
|
||||
/*v4.2 implementing SH temp */
|
||||
if ((model->B4SOIshMod == 1) && (here->B4SOIrth0 != 0.0))
|
||||
tempRatioSH = here->B4SOITempSH / ckt->CKTtemp;
|
||||
else
|
||||
tempRatioSH = 1.0;
|
||||
/*v4.2 implementing limit on Vdseffovcd*/
|
||||
if (here->B4SOIcd != 0)
|
||||
{
|
||||
Vdseffovcd = here->B4SOIVdseff / here->B4SOIcd;
|
||||
if (Vdseffovcd >= 1.0e9) Vdseffovcd = 1.0e9 ;
|
||||
}
|
||||
else
|
||||
Vdseffovcd = 1.0e9;
|
||||
/* if (model->B4SOItnoiMod == 0) */ /* v4.0 */ /* v4.2 bugfix: consider tnoiMod = 2*/
|
||||
if (model->B4SOItnoiMod != 1)
|
||||
{ if (model->B4SOIrdsMod == 0)
|
||||
/*v4.2 implementing limit on Vdseffovcd*/
|
||||
if (here->B4SOIcd != 0)
|
||||
{
|
||||
Vdseffovcd = here->B4SOIVdseff / here->B4SOIcd;
|
||||
if (Vdseffovcd >= 1.0e9) Vdseffovcd = 1.0e9 ;
|
||||
}
|
||||
else
|
||||
Vdseffovcd = 1.0e9;
|
||||
/* if (model->B4SOItnoiMod == 0) *//* v4.0 */ /* v4.2 bugfix: consider tnoiMod = 2*/
|
||||
if (model->B4SOItnoiMod != 1)
|
||||
{ if (model->B4SOIrdsMod == 0)
|
||||
{ gspr = here->B4SOIsourceConductance;
|
||||
gdpr = here->B4SOIdrainConductance;
|
||||
}
|
||||
|
|
@ -234,24 +238,24 @@ int i;
|
|||
}
|
||||
else
|
||||
{
|
||||
esat = 2.0 * here->B4SOIvsattemp / here->B4SOIueff;
|
||||
T5 = here->B4SOIVgsteff / esat
|
||||
/ pParam->B4SOIleff;
|
||||
T5 *= T5;
|
||||
npart_beta = model->B4SOIrnoia * (1.0 +
|
||||
T5 * model->B4SOItnoia *
|
||||
pParam->B4SOIleff);
|
||||
esat = 2.0 * here->B4SOIvsattemp / here->B4SOIueff;
|
||||
T5 = here->B4SOIVgsteff / esat
|
||||
/ pParam->B4SOIleff;
|
||||
T5 *= T5;
|
||||
npart_beta = model->B4SOIrnoia * (1.0 +
|
||||
T5 * model->B4SOItnoia *
|
||||
pParam->B4SOIleff);
|
||||
npart_theta = model->B4SOIrnoib * (1.0 +
|
||||
T5 * model->B4SOItnoib *
|
||||
pParam->B4SOIleff);
|
||||
T5 * model->B4SOItnoib *
|
||||
pParam->B4SOIleff);
|
||||
|
||||
/* v4.2 bugfix: implement bugfix from bsim4.6.2 */
|
||||
/* v4.2 bugfix: implement bugfix from bsim4.6.2 */
|
||||
if(npart_theta > 0.9)
|
||||
npart_theta = 0.9;
|
||||
if(npart_theta > 0.9 * npart_beta)
|
||||
npart_theta = 0.9 * npart_beta;
|
||||
|
||||
|
||||
|
||||
if (model->B4SOIrdsMod == 0)
|
||||
{ gspr = here->B4SOIsourceConductance;
|
||||
gdpr = here->B4SOIdrainConductance;
|
||||
|
|
@ -261,144 +265,144 @@ int i;
|
|||
gdpr = here->B4SOIgdtot;
|
||||
}
|
||||
if ( (*(ckt->CKTstates[0] + here->B4SOIvds))
|
||||
>= 0.0 )
|
||||
>= 0.0 )
|
||||
gspr = gspr * (1.0 + npart_theta
|
||||
* npart_theta * gspr
|
||||
* npart_theta * gspr
|
||||
/ here->B4SOIidovVds);
|
||||
else
|
||||
gdpr = gdpr * (1.0 + npart_theta
|
||||
* npart_theta * gdpr
|
||||
* npart_theta * gdpr
|
||||
/ here->B4SOIidovVds);
|
||||
}
|
||||
|
||||
NevalSrc(&noizDens[B4SOIRDNOIZ],
|
||||
&lnNdens[B4SOIRDNOIZ], ckt, THERMNOISE,
|
||||
here->B4SOIdNodePrime, here->B4SOIdNode,
|
||||
gdpr * tempRatioSH * here->B4SOIm); /* v4.2 self-heating temp */
|
||||
NevalSrc(&noizDens[B4SOIRDNOIZ],
|
||||
&lnNdens[B4SOIRDNOIZ], ckt, THERMNOISE,
|
||||
here->B4SOIdNodePrime, here->B4SOIdNode,
|
||||
gdpr * tempRatioSH * m); /* v4.2 self-heating temp */
|
||||
|
||||
NevalSrc(&noizDens[B4SOIRSNOIZ],
|
||||
&lnNdens[B4SOIRSNOIZ], ckt, THERMNOISE,
|
||||
here->B4SOIsNodePrime, here->B4SOIsNode,
|
||||
gspr * tempRatioSH * here->B4SOIm); /* v4.2 self-heating temp */
|
||||
NevalSrc(&noizDens[B4SOIRSNOIZ],
|
||||
&lnNdens[B4SOIRSNOIZ], ckt, THERMNOISE,
|
||||
here->B4SOIsNodePrime, here->B4SOIsNode,
|
||||
gspr * tempRatioSH * m); /* v4.2 self-heating temp */
|
||||
|
||||
/* v4.2 bugfix: implement correct thermal noise model (bsim4.6.0)*/
|
||||
/* v4.2 bugfix: implement correct thermal noise model (bsim4.6.0)*/
|
||||
/* if ((here->B4SOIrgateMod == 1) ||
|
||||
(here->B4SOIrgateMod == 2)) */
|
||||
if (here->B4SOIrgateMod == 1)
|
||||
(here->B4SOIrgateMod == 2)) */
|
||||
if (here->B4SOIrgateMod == 1)
|
||||
{ NevalSrc(&noizDens[B4SOIRGNOIZ],
|
||||
&lnNdens[B4SOIRGNOIZ], ckt, THERMNOISE,
|
||||
here->B4SOIgNode,
|
||||
here->B4SOIgNodeExt,
|
||||
here->B4SOIgrgeltd * tempRatioSH * here->B4SOIm); /* v4.2 self-heating temp */
|
||||
here->B4SOIgNodeExt,
|
||||
here->B4SOIgrgeltd * tempRatioSH * m); /* v4.2 self-heating temp */
|
||||
}
|
||||
else if (here->B4SOIrgateMod == 2) /*v4.2*/
|
||||
else if (here->B4SOIrgateMod == 2) /*v4.2*/
|
||||
{
|
||||
T0 = 1.0 + here->B4SOIgrgeltd/here->B4SOIgcrg;
|
||||
T1 = T0 * T0;
|
||||
NevalSrc(&noizDens[B4SOIRGNOIZ],
|
||||
&lnNdens[B4SOIRGNOIZ], ckt, THERMNOISE,
|
||||
here->B4SOIgNode,
|
||||
here->B4SOIgNodeExt,
|
||||
here->B4SOIgrgeltd/T1 * tempRatioSH * here->B4SOIm); /*v4.2*/
|
||||
here->B4SOIgNodeExt,
|
||||
here->B4SOIgrgeltd/T1 * tempRatioSH * m); /*v4.2*/
|
||||
}
|
||||
else if (here->B4SOIrgateMod == 3)
|
||||
{ NevalSrc(&noizDens[B4SOIRGNOIZ],
|
||||
&lnNdens[B4SOIRGNOIZ], ckt, THERMNOISE,
|
||||
here->B4SOIgNodeMid,
|
||||
here->B4SOIgNodeExt,
|
||||
here->B4SOIgrgeltd * tempRatioSH * here->B4SOIm); /* v4.2 self-heating temp */
|
||||
here->B4SOIgNodeExt,
|
||||
here->B4SOIgrgeltd * tempRatioSH * m); /* v4.2 self-heating temp */
|
||||
}
|
||||
else
|
||||
{ noizDens[B4SOIRGNOIZ] = 0.0;
|
||||
lnNdens[B4SOIRGNOIZ] =
|
||||
log(MAX(noizDens[B4SOIRGNOIZ],
|
||||
N_MINLOG));
|
||||
N_MINLOG));
|
||||
}
|
||||
|
||||
if (here->B4SOIrbodyMod)
|
||||
{
|
||||
NevalSrc(&noizDens[B4SOIRBSBNOIZ],
|
||||
if (here->B4SOIrbodyMod)
|
||||
{
|
||||
NevalSrc(&noizDens[B4SOIRBSBNOIZ],
|
||||
&lnNdens[B4SOIRBSBNOIZ], ckt, THERMNOISE,
|
||||
here->B4SOIbNode, here->B4SOIsbNode,
|
||||
here->B4SOIgrbsb * here->B4SOIm);
|
||||
here->B4SOIgrbsb * m);
|
||||
NevalSrc(&noizDens[B4SOIRBDBNOIZ],
|
||||
&lnNdens[B4SOIRBDBNOIZ], ckt, THERMNOISE,
|
||||
here->B4SOIbNode, here->B4SOIdbNode,
|
||||
here->B4SOIgrbdb * tempRatioSH * here->B4SOIm); /* v4.2 self-heating temp */
|
||||
}
|
||||
here->B4SOIgrbdb * tempRatioSH * m); /* v4.2 self-heating temp */
|
||||
}
|
||||
else
|
||||
{ noizDens[B4SOIRBSBNOIZ] = 0.0;
|
||||
noizDens[B4SOIRBDBNOIZ] = 0.0;
|
||||
noizDens[B4SOIRBDBNOIZ] = 0.0;
|
||||
lnNdens[B4SOIRBSBNOIZ] =
|
||||
log(MAX(noizDens[B4SOIRBSBNOIZ], N_MINLOG));
|
||||
lnNdens[B4SOIRBDBNOIZ] =
|
||||
log(MAX(noizDens[B4SOIRBDBNOIZ], N_MINLOG));
|
||||
}
|
||||
|
||||
if (here->B4SOIbodyMod == 1)
|
||||
{
|
||||
NevalSrc(&noizDens[B4SOIRBODYNOIZ],
|
||||
if (here->B4SOIbodyMod == 1)
|
||||
{
|
||||
NevalSrc(&noizDens[B4SOIRBODYNOIZ],
|
||||
&lnNdens[B4SOIRBODYNOIZ], ckt, THERMNOISE,
|
||||
here->B4SOIbNode, here->B4SOIpNode,
|
||||
tempRatioSH / (here->B4SOIrbodyext + /* v4.2 self-heating temp */
|
||||
pParam->B4SOIrbody) * here->B4SOIm);
|
||||
}
|
||||
pParam->B4SOIrbody) * m);
|
||||
}
|
||||
else
|
||||
{ noizDens[B4SOIRBODYNOIZ] = 0.0;
|
||||
lnNdens[B4SOIRBODYNOIZ] =
|
||||
log(MAX(noizDens[B4SOIRBODYNOIZ], N_MINLOG));
|
||||
}
|
||||
}
|
||||
|
||||
switch( model->B4SOItnoiMod )
|
||||
{
|
||||
case 0:
|
||||
NevalSrc(&noizDens[B4SOIIDNOIZ],
|
||||
&lnNdens[B4SOIIDNOIZ], ckt,
|
||||
THERMNOISE,
|
||||
here->B4SOIdNodePrime,
|
||||
here->B4SOIsNodePrime,
|
||||
(here->B4SOIueff
|
||||
* fabs(here->B4SOIqinv
|
||||
{
|
||||
case 0:
|
||||
NevalSrc(&noizDens[B4SOIIDNOIZ],
|
||||
&lnNdens[B4SOIIDNOIZ], ckt,
|
||||
THERMNOISE,
|
||||
here->B4SOIdNodePrime,
|
||||
here->B4SOIsNodePrime,
|
||||
(here->B4SOIueff
|
||||
* fabs(here->B4SOIqinv
|
||||
/ (pParam->B4SOIleff
|
||||
* pParam->B4SOIleff
|
||||
+ here->B4SOIueff*fabs
|
||||
(here->B4SOIqinv)
|
||||
* here->B4SOIrds)))
|
||||
* tempRatioSH /* v4.2 self-heating temp */
|
||||
* model->B4SOIntnoi * here->B4SOIm);
|
||||
break;
|
||||
* model->B4SOIntnoi * m );
|
||||
break;
|
||||
|
||||
/* v2.2.3 bug fix */
|
||||
case 1:
|
||||
T0 = here->B4SOIgm + here->B4SOIgmbs +
|
||||
here->B4SOIgds;
|
||||
T0 *= T0;
|
||||
esat = 2.0 * here->B4SOIvsattemp /
|
||||
here->B4SOIueff;
|
||||
T5 = here->B4SOIVgsteff / esat /
|
||||
pParam->B4SOIleff;
|
||||
T5 *= T5;
|
||||
npart_beta = model->B4SOIrnoia * (1.0 +
|
||||
T5 * model->B4SOItnoia *
|
||||
pParam->B4SOIleff);
|
||||
case 1:
|
||||
T0 = here->B4SOIgm + here->B4SOIgmbs +
|
||||
here->B4SOIgds;
|
||||
T0 *= T0;
|
||||
esat = 2.0 * here->B4SOIvsattemp /
|
||||
here->B4SOIueff;
|
||||
T5 = here->B4SOIVgsteff / esat /
|
||||
pParam->B4SOIleff;
|
||||
T5 *= T5;
|
||||
npart_beta = model->B4SOIrnoia * (1.0 +
|
||||
T5 * model->B4SOItnoia *
|
||||
pParam->B4SOIleff);
|
||||
npart_theta = model->B4SOIrnoib * (1.0 +
|
||||
T5 * model->B4SOItnoib *
|
||||
pParam->B4SOIleff);
|
||||
/*igsquare = npart_theta * npart_theta *
|
||||
T0 * here->B4SOIVdseff / here->B4SOIcd; v4.2 implementing limit on Vdseffovcd*/
|
||||
igsquare = npart_theta * npart_theta * T0 * Vdseffovcd;
|
||||
T5 * model->B4SOItnoib *
|
||||
pParam->B4SOIleff);
|
||||
/*igsquare = npart_theta * npart_theta *
|
||||
T0 * here->B4SOIVdseff / here->B4SOIcd; v4.2 implementing limit on Vdseffovcd*/
|
||||
igsquare = npart_theta * npart_theta * T0 * Vdseffovcd;
|
||||
T1 = npart_beta * (here->B4SOIgm
|
||||
+ here->B4SOIgmbs) + here->B4SOIgds;
|
||||
/*T2 = T1 * T1 * here->B4SOIVdseff / here->B4SOIcd; v4.2 implementing limit on Vdseffovcd*/
|
||||
T2 = T1 * T1 * Vdseffovcd;
|
||||
T2 = T1 * T1 * Vdseffovcd;
|
||||
NevalSrc(&noizDens[B4SOIIDNOIZ],
|
||||
&lnNdens[B4SOIIDNOIZ], ckt,
|
||||
THERMNOISE,
|
||||
here->B4SOIdNodePrime,
|
||||
here->B4SOIsNodePrime,
|
||||
/* (T2 - igsquare)); */
|
||||
(T2 - igsquare) * tempRatioSH * here->B4SOIm); /* v4.2 self-heating temp */
|
||||
break;
|
||||
/* (T2 - igsquare)); */
|
||||
(T2 - igsquare) * tempRatioSH * m); /* v4.2 self-heating temp */
|
||||
break;
|
||||
|
||||
case 2:
|
||||
NevalSrc(&noizDens[B4SOIIDNOIZ],
|
||||
|
|
@ -406,33 +410,33 @@ int i;
|
|||
THERMNOISE,
|
||||
here->B4SOIdNodePrime,
|
||||
here->B4SOIsNodePrime,
|
||||
model->B4SOIntnoi *
|
||||
model->B4SOIntnoi *
|
||||
tempRatioSH * /* v4.2 self-heating temp */
|
||||
(2.0 / 3.0 * fabs(here->B4SOIgm
|
||||
+ here->B4SOIgds
|
||||
+ here->B4SOIgmbs)) * here->B4SOIm);
|
||||
+ here->B4SOIgmbs)) * m);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
NevalSrc(&noizDens[B4SOIFLNOIZ], NULL,
|
||||
ckt, N_GAIN, here->B4SOIdNodePrime,
|
||||
here->B4SOIsNodePrime, (double) 0.0);
|
||||
NevalSrc(&noizDens[B4SOIFLNOIZ], (double*) NULL,
|
||||
ckt, N_GAIN, here->B4SOIdNodePrime,
|
||||
here->B4SOIsNodePrime, (double) 0.0);
|
||||
|
||||
switch( model->B4SOIfnoiMod )
|
||||
{ case 0:
|
||||
if (model->B4SOIw0flk > 0) { /* v4.0 */
|
||||
noizDens[B4SOIFLNOIZ] *= here->B4SOInf
|
||||
* pParam->B4SOIweff/model->B4SOIw0flk
|
||||
* model->B4SOIkf * exp(model->B4SOIaf
|
||||
* log(MAX(fabs(here->B4SOIcd
|
||||
/ pParam->B4SOIweff / here->B4SOInf
|
||||
* model->B4SOIw0flk), N_MINLOG)))
|
||||
/ (pow(data->freq, model->B4SOIef)
|
||||
* pow(pParam->B4SOIleff,
|
||||
model->B4SOIbf) * model->B4SOIcox);
|
||||
break;
|
||||
}
|
||||
else {
|
||||
{ case 0:
|
||||
if (model->B4SOIw0flk > 0) { /* v4.0 */
|
||||
noizDens[B4SOIFLNOIZ] *= here->B4SOInf
|
||||
* pParam->B4SOIweff/model->B4SOIw0flk
|
||||
* model->B4SOIkf * exp(model->B4SOIaf
|
||||
* log(MAX(fabs(here->B4SOIcd
|
||||
/ pParam->B4SOIweff / here->B4SOInf
|
||||
* model->B4SOIw0flk), N_MINLOG)))
|
||||
/ (pow(data->freq, model->B4SOIef)
|
||||
* pow(pParam->B4SOIleff,
|
||||
model->B4SOIbf) * model->B4SOIcox);
|
||||
break;
|
||||
}
|
||||
else {
|
||||
noizDens[B4SOIFLNOIZ] *=
|
||||
model->B4SOIkf * exp(model->B4SOIaf
|
||||
* log(MAX(fabs(here->B4SOIcd), N_MINLOG)))
|
||||
|
|
@ -440,188 +444,188 @@ int i;
|
|||
* pow(pParam->B4SOIleff,
|
||||
model->B4SOIbf) * model->B4SOIcox);
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
vgs = *(ckt->CKTstates[0] + here->B4SOIvgs);
|
||||
vds = *(ckt->CKTstates[0] + here->B4SOIvds);
|
||||
if (vds < 0.0)
|
||||
{ vds = -vds;
|
||||
vgs = vgs + vds;
|
||||
}
|
||||
/*v4.2 implementing SH temp */
|
||||
if ((model->B4SOIshMod == 1) && (here->B4SOIrth0 != 0.0))
|
||||
Ssi = B4SOIEval1ovFNoise(vds, model, here,
|
||||
data->freq, here->B4SOITempSH);
|
||||
else
|
||||
Ssi = B4SOIEval1ovFNoise(vds, model, here,
|
||||
data->freq, ckt->CKTtemp); /*v4.2 implementing SH temp */
|
||||
|
||||
/*v4.2 implementing SH temp */
|
||||
if ((model->B4SOIshMod == 1) && (here->B4SOIrth0 != 0.0))
|
||||
T10 = model->B4SOIoxideTrapDensityA
|
||||
* CONSTboltz * here->B4SOITempSH;
|
||||
else
|
||||
T10 = model->B4SOIoxideTrapDensityA
|
||||
* CONSTboltz * ckt->CKTtemp; /*v4.2 implementing SH temp */
|
||||
|
||||
T11 = pParam->B4SOIweff * here->B4SOInf
|
||||
* pParam->B4SOIleff
|
||||
* pow(data->freq, model->B4SOIef)
|
||||
* 1.0e10 * here->B4SOInstar
|
||||
* here->B4SOInstar ;
|
||||
Swi = T10 / T11 * here->B4SOIcd
|
||||
* here->B4SOIcd;
|
||||
T1 = Swi + Ssi;
|
||||
if (T1 > 0.0)
|
||||
}
|
||||
case 1:
|
||||
vgs = *(ckt->CKTstates[0] + here->B4SOIvgs);
|
||||
vds = *(ckt->CKTstates[0] + here->B4SOIvds);
|
||||
if (vds < 0.0)
|
||||
{ vds = -vds;
|
||||
vgs = vgs + vds;
|
||||
}
|
||||
/*v4.2 implementing SH temp */
|
||||
if ((model->B4SOIshMod == 1) && (here->B4SOIrth0 != 0.0))
|
||||
Ssi = B4SOIEval1ovFNoise(vds, model, here,
|
||||
data->freq, here->B4SOITempSH);
|
||||
else
|
||||
Ssi = B4SOIEval1ovFNoise(vds, model, here,
|
||||
data->freq, ckt->CKTtemp); /*v4.2 implementing SH temp */
|
||||
|
||||
/*v4.2 implementing SH temp */
|
||||
if ((model->B4SOIshMod == 1) && (here->B4SOIrth0 != 0.0))
|
||||
T10 = model->B4SOIoxideTrapDensityA
|
||||
* CONSTboltz * here->B4SOITempSH;
|
||||
else
|
||||
T10 = model->B4SOIoxideTrapDensityA
|
||||
* CONSTboltz * ckt->CKTtemp; /*v4.2 implementing SH temp */
|
||||
|
||||
T11 = pParam->B4SOIweff * here->B4SOInf
|
||||
* pParam->B4SOIleff
|
||||
* pow(data->freq, model->B4SOIef)
|
||||
* 1.0e10 * here->B4SOInstar
|
||||
* here->B4SOInstar ;
|
||||
Swi = T10 / T11 * here->B4SOIcd
|
||||
* here->B4SOIcd;
|
||||
T1 = Swi + Ssi;
|
||||
if (T1 > 0.0)
|
||||
noizDens[B4SOIFLNOIZ] *= (Ssi
|
||||
* Swi) / T1;
|
||||
else
|
||||
* Swi) / T1;
|
||||
else
|
||||
noizDens[B4SOIFLNOIZ] *= 0.0;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
lnNdens[B4SOIFLNOIZ] =
|
||||
log(MAX(noizDens[B4SOIFLNOIZ], N_MINLOG));
|
||||
lnNdens[B4SOIFLNOIZ] =
|
||||
log(MAX(noizDens[B4SOIFLNOIZ], N_MINLOG));
|
||||
|
||||
/* v3.2 for gate tunneling shot noise */
|
||||
NevalSrc(&noizDens[B4SOIIGSNOIZ],
|
||||
/* v3.2 for gate tunneling shot noise */
|
||||
NevalSrc(&noizDens[B4SOIIGSNOIZ],
|
||||
&lnNdens[B4SOIIGSNOIZ], ckt, SHOTNOISE,
|
||||
here->B4SOIgNode, here->B4SOIsNodePrime,
|
||||
(here->B4SOIIgs + here->B4SOIIgcs) * here->B4SOIm);
|
||||
(here->B4SOIIgs + here->B4SOIIgcs) * m);
|
||||
|
||||
NevalSrc(&noizDens[B4SOIIGDNOIZ],
|
||||
NevalSrc(&noizDens[B4SOIIGDNOIZ],
|
||||
&lnNdens[B4SOIIGDNOIZ], ckt, SHOTNOISE,
|
||||
here->B4SOIgNode, here->B4SOIdNodePrime,
|
||||
(here->B4SOIIgd + here->B4SOIIgcd) * here->B4SOIm);
|
||||
(here->B4SOIIgd + here->B4SOIIgcd) * m);
|
||||
|
||||
NevalSrc(&noizDens[B4SOIIGBNOIZ],
|
||||
NevalSrc(&noizDens[B4SOIIGBNOIZ],
|
||||
&lnNdens[B4SOIIGBNOIZ], ckt, SHOTNOISE,
|
||||
here->B4SOIgNode, here->B4SOIbNode,
|
||||
here->B4SOIig * here->B4SOIm);
|
||||
/* v3.2 for gate tunneling shot noise end */
|
||||
here->B4SOIig * m);
|
||||
/* v3.2 for gate tunneling shot noise end */
|
||||
|
||||
/* Low frequency excess noise due to FBE */
|
||||
/* NevalSrc(&noizDens[B4SOIFBNOIZ],
|
||||
&lnNdens[B4SOIFBNOIZ], ckt, SHOTNOISE,
|
||||
here->B4SOIsNodePrime, here->B4SOIbNode,
|
||||
/* Low frequency excess noise due to FBE */
|
||||
/* NevalSrc(&noizDens[B4SOIFBNOIZ],
|
||||
&lnNdens[B4SOIFBNOIZ], ckt, SHOTNOISE,
|
||||
here->B4SOIsNodePrime, here->B4SOIbNode,
|
||||
2.0 * model->B4SOInoif * here->B4SOIibs); */
|
||||
/* v4.0 */
|
||||
NevalSrc(&noizDens[B4SOIFB_IBSNOIZ],
|
||||
&lnNdens[B4SOIFB_IBSNOIZ], ckt, SHOTNOISE,
|
||||
here->B4SOIsNodePrime, here->B4SOIbNode,
|
||||
model->B4SOInoif * here->B4SOIibs * here->B4SOIm);
|
||||
NevalSrc(&noizDens[B4SOIFB_IBSNOIZ],
|
||||
&lnNdens[B4SOIFB_IBSNOIZ], ckt, SHOTNOISE,
|
||||
here->B4SOIsNodePrime, here->B4SOIbNode,
|
||||
model->B4SOInoif * here->B4SOIibs * m);
|
||||
|
||||
/* NevalSrc(&noizDens[B4SOIFB_IBDNOIZ],
|
||||
&lnNdens[B4SOIFB_IBDNOIZ], ckt, SHOTNOISE,
|
||||
here->B4SOIdNodePrime, here->B4SOIbNode,
|
||||
/* NevalSrc(&noizDens[B4SOIFB_IBDNOIZ],
|
||||
&lnNdens[B4SOIFB_IBDNOIZ], ckt, SHOTNOISE,
|
||||
here->B4SOIdNodePrime, here->B4SOIbNode,
|
||||
model->B4SOInoif * fabs(here->B4SOIibd)); */ /*v4.2*/
|
||||
|
||||
NevalSrc(&noizDens[B4SOIFB_IBDNOIZ],
|
||||
&lnNdens[B4SOIFB_IBDNOIZ], ckt, SHOTNOISE,
|
||||
here->B4SOIdNodePrime, here->B4SOIbNode,
|
||||
NevalSrc(&noizDens[B4SOIFB_IBDNOIZ],
|
||||
&lnNdens[B4SOIFB_IBDNOIZ], ckt, SHOTNOISE,
|
||||
here->B4SOIdNodePrime, here->B4SOIbNode,
|
||||
model->B4SOInoif * (here->B4SOIibd) * m); /*v4.2 extra fabs()removed */
|
||||
|
||||
noizDens[B4SOITOTNOIZ] = noizDens[B4SOIRDNOIZ]
|
||||
+ noizDens[B4SOIRSNOIZ]
|
||||
+ noizDens[B4SOIRGNOIZ]
|
||||
+ noizDens[B4SOIIDNOIZ]
|
||||
+ noizDens[B4SOIFLNOIZ]
|
||||
/* + noizDens[B4SOIFBNOIZ] */
|
||||
+ noizDens[B4SOIFB_IBSNOIZ]
|
||||
+ noizDens[B4SOIFB_IBDNOIZ]
|
||||
+ noizDens[B4SOIIGSNOIZ]
|
||||
+ noizDens[B4SOIIGDNOIZ]
|
||||
+ noizDens[B4SOIIGBNOIZ]
|
||||
+ noizDens[B4SOIRBSBNOIZ]
|
||||
+ noizDens[B4SOIRBDBNOIZ]
|
||||
+ noizDens[B4SOIRBODYNOIZ];
|
||||
lnNdens[B4SOITOTNOIZ] =
|
||||
log(MAX(noizDens[B4SOITOTNOIZ], N_MINLOG));
|
||||
|
||||
model->B4SOInoif * (here->B4SOIibd) * here->B4SOIm); /*v4.2 extra fabs()removed */
|
||||
|
||||
noizDens[B4SOITOTNOIZ] = noizDens[B4SOIRDNOIZ]
|
||||
+ noizDens[B4SOIRSNOIZ]
|
||||
+ noizDens[B4SOIRGNOIZ]
|
||||
+ noizDens[B4SOIIDNOIZ]
|
||||
+ noizDens[B4SOIFLNOIZ]
|
||||
/* + noizDens[B4SOIFBNOIZ] */
|
||||
+ noizDens[B4SOIFB_IBSNOIZ]
|
||||
+ noizDens[B4SOIFB_IBDNOIZ]
|
||||
+ noizDens[B4SOIIGSNOIZ]
|
||||
+ noizDens[B4SOIIGDNOIZ]
|
||||
+ noizDens[B4SOIIGBNOIZ]
|
||||
+ noizDens[B4SOIRBSBNOIZ]
|
||||
+ noizDens[B4SOIRBDBNOIZ]
|
||||
+ noizDens[B4SOIRBODYNOIZ];
|
||||
lnNdens[B4SOITOTNOIZ] =
|
||||
log(MAX(noizDens[B4SOITOTNOIZ], N_MINLOG));
|
||||
*OnDens += noizDens[B4SOITOTNOIZ];
|
||||
|
||||
*OnDens += noizDens[B4SOITOTNOIZ];
|
||||
if (data->delFreq == 0.0)
|
||||
{ /* if we haven't done any previous
|
||||
integration, we need to initialize our
|
||||
"history" variables.
|
||||
*/
|
||||
|
||||
if (data->delFreq == 0.0)
|
||||
{ /* if we haven't done any previous
|
||||
integration, we need to initialize our
|
||||
"history" variables.
|
||||
*/
|
||||
for (i = 0; i < B4SOINSRCS; i++)
|
||||
{ here->B4SOInVar[LNLSTDENS][i] =
|
||||
lnNdens[i];
|
||||
}
|
||||
|
||||
for (i = 0; i < B4SOINSRCS; i++)
|
||||
{ here->B4SOInVar[LNLSTDENS][i] =
|
||||
lnNdens[i];
|
||||
}
|
||||
|
||||
/* clear out our integration variables
|
||||
if it's the first pass
|
||||
*/
|
||||
if (data->freq ==
|
||||
job->NstartFreq)
|
||||
{ for (i = 0; i < B4SOINSRCS; i++)
|
||||
{ here->B4SOInVar[OUTNOIZ][i] = 0.0;
|
||||
here->B4SOInVar[INNOIZ][i] = 0.0;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{ /* data->delFreq != 0.0,
|
||||
we have to integrate.
|
||||
*/
|
||||
for (i = 0; i < B4SOINSRCS; i++)
|
||||
{ if (i != B4SOITOTNOIZ)
|
||||
{ tempOnoise = Nintegrate(noizDens[i],
|
||||
lnNdens[i],
|
||||
here->B4SOInVar[LNLSTDENS][i],
|
||||
data);
|
||||
tempInoise = Nintegrate(noizDens[i]
|
||||
* data->GainSqInv, lnNdens[i]
|
||||
+ data->lnGainInv,
|
||||
here->B4SOInVar[LNLSTDENS][i]
|
||||
+ data->lnGainInv, data);
|
||||
here->B4SOInVar[LNLSTDENS][i] =
|
||||
lnNdens[i];
|
||||
data->outNoiz += tempOnoise;
|
||||
data->inNoise += tempInoise;
|
||||
if (job->NStpsSm != 0)
|
||||
{ here->B4SOInVar[OUTNOIZ][i]
|
||||
+= tempOnoise;
|
||||
here->B4SOInVar[OUTNOIZ][B4SOITOTNOIZ]
|
||||
+= tempOnoise;
|
||||
here->B4SOInVar[INNOIZ][i]
|
||||
+= tempInoise;
|
||||
here->B4SOInVar[INNOIZ][B4SOITOTNOIZ]
|
||||
+= tempInoise;
|
||||
/* clear out our integration variables
|
||||
if it's the first pass
|
||||
*/
|
||||
if (data->freq ==
|
||||
((NOISEAN*) ckt->CKTcurJob)->NstartFreq)
|
||||
{ for (i = 0; i < B4SOINSRCS; i++)
|
||||
{ here->B4SOInVar[OUTNOIZ][i] = 0.0;
|
||||
here->B4SOInVar[INNOIZ][i] = 0.0;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{ /* data->delFreq != 0.0,
|
||||
we have to integrate.
|
||||
*/
|
||||
for (i = 0; i < B4SOINSRCS; i++)
|
||||
{ if (i != B4SOITOTNOIZ)
|
||||
{ tempOnoise = Nintegrate(noizDens[i],
|
||||
lnNdens[i],
|
||||
here->B4SOInVar[LNLSTDENS][i],
|
||||
data);
|
||||
tempInoise = Nintegrate(noizDens[i]
|
||||
* data->GainSqInv, lnNdens[i]
|
||||
+ data->lnGainInv,
|
||||
here->B4SOInVar[LNLSTDENS][i]
|
||||
+ data->lnGainInv, data);
|
||||
here->B4SOInVar[LNLSTDENS][i] =
|
||||
lnNdens[i];
|
||||
data->outNoiz += tempOnoise;
|
||||
data->inNoise += tempInoise;
|
||||
if (((NOISEAN*)
|
||||
ckt->CKTcurJob)->NStpsSm != 0)
|
||||
{ here->B4SOInVar[OUTNOIZ][i]
|
||||
+= tempOnoise;
|
||||
here->B4SOInVar[OUTNOIZ][B4SOITOTNOIZ]
|
||||
+= tempOnoise;
|
||||
here->B4SOInVar[INNOIZ][i]
|
||||
+= tempInoise;
|
||||
here->B4SOInVar[INNOIZ][B4SOITOTNOIZ]
|
||||
+= tempInoise;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (data->prtSummary)
|
||||
{ for (i = 0; i < B4SOINSRCS; i++)
|
||||
{ /* print a summary report */
|
||||
data->outpVector[data->outNumber++]
|
||||
= noizDens[i];
|
||||
}
|
||||
}
|
||||
break;
|
||||
case INT_NOIZ:
|
||||
/* already calculated, just output */
|
||||
if (job->NStpsSm != 0)
|
||||
{ for (i = 0; i < B4SOINSRCS; i++)
|
||||
{ data->outpVector[data->outNumber++]
|
||||
= here->B4SOInVar[OUTNOIZ][i];
|
||||
data->outpVector[data->outNumber++]
|
||||
= here->B4SOInVar[INNOIZ][i];
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case N_CLOSE:
|
||||
/* do nothing, the main calling routine will close */
|
||||
return (OK);
|
||||
break; /* the plots */
|
||||
} /* switch (operation) */
|
||||
} /* for here */
|
||||
}
|
||||
}
|
||||
}
|
||||
if (data->prtSummary)
|
||||
{ for (i = 0; i < B4SOINSRCS; 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 < B4SOINSRCS; i++)
|
||||
{ data->outpVector[data->outNumber++]
|
||||
= here->B4SOInVar[OUTNOIZ][i];
|
||||
data->outpVector[data->outNumber++]
|
||||
= here->B4SOInVar[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);
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
/*** B4SOI 04/27/2010 Released by Tanvir Morshed ***/
|
||||
/*** B4SOI 12/16/2010 Released by Tanvir Morshed ***/
|
||||
|
||||
|
||||
/**********
|
||||
* Copyright 2010 Regents of the University of California. All rights reserved.
|
||||
|
|
@ -27,9 +28,9 @@ GENinstance *inst,
|
|||
IFvalue *select)
|
||||
{
|
||||
B4SOIinstance *here = (B4SOIinstance*)inst;
|
||||
|
||||
|
||||
NG_IGNORE(select);
|
||||
|
||||
|
||||
switch(param)
|
||||
{ case B4SOI_W:
|
||||
here->B4SOIw = value->rValue;
|
||||
|
|
@ -39,7 +40,7 @@ IFvalue *select)
|
|||
here->B4SOIl = value->rValue;
|
||||
here->B4SOIlGiven = TRUE;
|
||||
break;
|
||||
case B4SOI_M:
|
||||
case B4SOI_M:
|
||||
here->B4SOIm = value->rValue;
|
||||
here->B4SOImGiven = TRUE;
|
||||
break;
|
||||
|
|
@ -213,19 +214,19 @@ IFvalue *select)
|
|||
case 5:
|
||||
here->B4SOIicVPS = *(value->v.vec.rVec+4);
|
||||
here->B4SOIicVPSGiven = TRUE;
|
||||
break; /* v4.2 bugfix */
|
||||
break; /* v4.2 bugfix */
|
||||
case 4:
|
||||
here->B4SOIicVES = *(value->v.vec.rVec+3);
|
||||
here->B4SOIicVESGiven = TRUE;
|
||||
break; /* v4.2 bugfix */
|
||||
break; /* v4.2 bugfix */
|
||||
case 3:
|
||||
here->B4SOIicVBS = *(value->v.vec.rVec+2);
|
||||
here->B4SOIicVBSGiven = TRUE;
|
||||
break; /* v4.2 bugfix */
|
||||
break; /* v4.2 bugfix */
|
||||
case 2:
|
||||
here->B4SOIicVGS = *(value->v.vec.rVec+1);
|
||||
here->B4SOIicVGSGiven = TRUE;
|
||||
break; /* v4.2 bugfix */
|
||||
break; /* v4.2 bugfix */
|
||||
case 1:
|
||||
here->B4SOIicVDS = *(value->v.vec.rVec);
|
||||
here->B4SOIicVDSGiven = TRUE;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
/*** B4SOI 04/27/2010 Released by Tanvir Morshed ***/
|
||||
/*** B4SOI 12/16/2010 Released by Tanvir Morshed ***/
|
||||
|
||||
|
||||
/**********
|
||||
* Copyright 2010 Regents of the University of California. All rights reserved.
|
||||
|
|
@ -14,6 +15,7 @@
|
|||
**********/
|
||||
|
||||
#include "ngspice/ngspice.h"
|
||||
|
||||
#include "ngspice/cktdefs.h"
|
||||
#include "ngspice/complex.h"
|
||||
#include "ngspice/sperror.h"
|
||||
|
|
@ -23,8 +25,8 @@
|
|||
int
|
||||
B4SOIpzLoad(
|
||||
GENmodel *inModel,
|
||||
register CKTcircuit *ckt,
|
||||
register SPcomplex *s)
|
||||
CKTcircuit *ckt,
|
||||
SPcomplex *s)
|
||||
{
|
||||
register B4SOImodel *model = (B4SOImodel*)inModel;
|
||||
register B4SOIinstance *here;
|
||||
|
|
@ -41,12 +43,13 @@ double m;
|
|||
for (; model != NULL; model = model->B4SOInextModel)
|
||||
{ for (here = model->B4SOIinstances; here!= NULL;
|
||||
here = here->B4SOInextInstance)
|
||||
{
|
||||
{
|
||||
if (here->B4SOIowner != ARCHme) continue;
|
||||
if (here->B4SOImode >= 0)
|
||||
{ Gm = here->B4SOIgm;
|
||||
Gmbs = here->B4SOIgmbs;
|
||||
FwdSum = Gm + Gmbs;
|
||||
RevSum = 0.0;
|
||||
{ Gm = here->B4SOIgm;
|
||||
Gmbs = here->B4SOIgmbs;
|
||||
FwdSum = Gm + Gmbs;
|
||||
RevSum = 0.0;
|
||||
cggb = here->B4SOIcggb;
|
||||
cgsb = here->B4SOIcgsb;
|
||||
cgdb = here->B4SOIcgdb;
|
||||
|
|
@ -59,11 +62,11 @@ double m;
|
|||
cdsb = here->B4SOIcdsb;
|
||||
cddb = here->B4SOIcddb;
|
||||
}
|
||||
else
|
||||
{ Gm = -here->B4SOIgm;
|
||||
Gmbs = -here->B4SOIgmbs;
|
||||
FwdSum = 0.0;
|
||||
RevSum = -Gm - Gmbs;
|
||||
else
|
||||
{ Gm = -here->B4SOIgm;
|
||||
Gmbs = -here->B4SOIgmbs;
|
||||
FwdSum = 0.0;
|
||||
RevSum = -Gm - Gmbs;
|
||||
cggb = here->B4SOIcggb;
|
||||
cgsb = here->B4SOIcgdb;
|
||||
cgdb = here->B4SOIcgsb;
|
||||
|
|
@ -85,10 +88,10 @@ double m;
|
|||
capbd= here->B4SOIcapbd;
|
||||
capbs= here->B4SOIcapbs;
|
||||
#endif
|
||||
GSoverlapCap = here->B4SOIcgso;
|
||||
GDoverlapCap = here->B4SOIcgdo;
|
||||
GSoverlapCap = here->B4SOIcgso;
|
||||
GDoverlapCap = here->B4SOIcgdo;
|
||||
#ifdef BULKCODE
|
||||
GBoverlapCap = here->pParam->B4SOIcgbo;
|
||||
GBoverlapCap = here->pParam->B4SOIcgbo;
|
||||
#endif
|
||||
|
||||
xcdgb = (cdgb - GDoverlapCap);
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -1,4 +1,5 @@
|
|||
/*** B4SOI 04/27/2010 Released by Tanvir Morshed ***/
|
||||
/*** B4SOI 12/16/2010 Released by Tanvir Morshed ***/
|
||||
|
||||
|
||||
/**********
|
||||
* Copyright 2010 Regents of the University of California. All rights reserved.
|
||||
|
|
@ -23,7 +24,7 @@
|
|||
int
|
||||
B4SOItrunc(
|
||||
GENmodel *inModel,
|
||||
register CKTcircuit *ckt,
|
||||
CKTcircuit *ckt,
|
||||
double *timeStep)
|
||||
{
|
||||
register B4SOImodel *model = (B4SOImodel*)inModel;
|
||||
|
|
@ -35,8 +36,9 @@ register B4SOIinstance *here;
|
|||
|
||||
for (; model != NULL; model = model->B4SOInextModel)
|
||||
{ for (here = model->B4SOIinstances; here != NULL;
|
||||
here = here->B4SOInextInstance)
|
||||
{
|
||||
here = here->B4SOInextInstance)
|
||||
{
|
||||
if (here->B4SOIowner != ARCHme) continue;
|
||||
#ifdef STEPDEBUG
|
||||
debugtemp = *timeStep;
|
||||
#endif /* STEPDEBUG */
|
||||
|
|
@ -45,7 +47,7 @@ register B4SOIinstance *here;
|
|||
CKTterr(here->B4SOIqd,ckt,timeStep);
|
||||
#ifdef STEPDEBUG
|
||||
if(debugtemp != *timeStep)
|
||||
{ printf("device %s reduces step from %g to %g\n",
|
||||
{ printf("device %s reduces step from %g to %g\n",
|
||||
here->B4SOIname,debugtemp,*timeStep);
|
||||
}
|
||||
#endif /* STEPDEBUG */
|
||||
|
|
|
|||
Loading…
Reference in New Issue