Fixed some bugs, implemented '.options use_device_gmin' switch and assigned DEVloadKCL initializers
This commit is contained in:
parent
20ef481ec5
commit
845c018576
|
|
@ -116,12 +116,12 @@ struct CKTcircuit {
|
|||
double *CKTrhs; /* current rhs value - being loaded */
|
||||
double *CKTrhsOld; /* previous rhs value for convergence
|
||||
testing */
|
||||
double **CKTdiag ;
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
double *CKTfvk ; /* KCL Verification array */
|
||||
int *CKTnodeIsLinear ; /* Flag to indicate if a node is linear or non-linear */
|
||||
CKTmkCurKCLnode **CKTmkCurKCLarray ; /* Array of KCL Currents */
|
||||
double **CKTdiag ;
|
||||
#endif
|
||||
|
||||
double *CKTrhsSpare; /* spare rhs value for reordering */
|
||||
|
|
@ -295,6 +295,7 @@ struct CKTcircuit {
|
|||
contains only linear elements */
|
||||
unsigned int CKTnoopac:1; /* flag to indicate that OP will not be evaluated
|
||||
during AC simulation */
|
||||
unsigned int CKTuseDeviceGmin : 1 ;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -120,6 +120,8 @@ typedef struct {
|
|||
|
||||
#define OPT_NOOPAC 68
|
||||
|
||||
#define OPT_USEDEVICEGMIN 69
|
||||
|
||||
#ifdef XSPICE
|
||||
/* gtri - begin - wbk - add new options */
|
||||
#define OPT_ENH_NOOPALTER 100
|
||||
|
|
|
|||
|
|
@ -66,6 +66,7 @@ struct TSKtask {
|
|||
double TSKabsDv; /* abs limit for iter-iter voltage change */
|
||||
double TSKrelDv; /* rel limit for iter-iter voltage change */
|
||||
unsigned int TSKnoopac:1; /* flag for no OP calculation before AC */
|
||||
unsigned int TSKuseDeviceGmin : 1 ;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -120,8 +120,14 @@ NIconvTest (CKTcircuit *ckt)
|
|||
ptr = ptr->next ;
|
||||
}
|
||||
|
||||
if (maximum < fabs (ckt->CKTdiagGmin * ckt->CKTrhsOld [i]))
|
||||
maximum = fabs (ckt->CKTdiagGmin * ckt->CKTrhsOld [i]) ;
|
||||
if (ckt->CKTuseDeviceGmin)
|
||||
{
|
||||
if (maximum < fabs (ckt->CKTgmin * ckt->CKTrhsOld [i]))
|
||||
maximum = fabs (ckt->CKTgmin * ckt->CKTrhsOld [i]) ;
|
||||
} else {
|
||||
if (maximum < fabs (ckt->CKTdiagGmin * ckt->CKTrhsOld [i]))
|
||||
maximum = fabs (ckt->CKTdiagGmin * ckt->CKTrhsOld [i]) ;
|
||||
}
|
||||
|
||||
|
||||
#ifdef STEPDEBUG
|
||||
|
|
@ -130,12 +136,23 @@ NIconvTest (CKTcircuit *ckt)
|
|||
#endif
|
||||
|
||||
/* Check Convergence */
|
||||
if (fabs (ckt->CKTfvk [i] + ckt->CKTdiagGmin * ckt->CKTrhsOld [i]) > (ckt->CKTreltol * maximum + ckt->CKTabstol))
|
||||
if (ckt->CKTuseDeviceGmin)
|
||||
{
|
||||
ckt->CKTtroubleNode = i ;
|
||||
ckt->CKTtroubleElt = NULL ;
|
||||
if (fabs (ckt->CKTfvk [i] + ckt->CKTgmin * ckt->CKTrhsOld [i]) > (ckt->CKTreltol * maximum + ckt->CKTabstol))
|
||||
{
|
||||
ckt->CKTtroubleNode = i ;
|
||||
ckt->CKTtroubleElt = NULL ;
|
||||
|
||||
return 1 ;
|
||||
return 1 ;
|
||||
}
|
||||
} else {
|
||||
if (fabs (ckt->CKTfvk [i] + ckt->CKTdiagGmin * ckt->CKTrhsOld [i]) > (ckt->CKTreltol * maximum + ckt->CKTabstol))
|
||||
{
|
||||
ckt->CKTtroubleNode = i ;
|
||||
ckt->CKTtroubleElt = NULL ;
|
||||
|
||||
return 1 ;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,11 +21,7 @@ Author: 1985 Thomas L. Quarles
|
|||
int
|
||||
NIreinit( CKTcircuit *ckt)
|
||||
{
|
||||
int size;
|
||||
|
||||
#if defined(PREDICTOR) || defined(KIRCHHOFF)
|
||||
int i;
|
||||
#endif
|
||||
int i, size ;
|
||||
|
||||
size = SMPmatSize(ckt->CKTmatrix);
|
||||
CKALLOC(CKTrhs,size+1,double);
|
||||
|
|
@ -34,6 +30,9 @@ NIreinit( CKTcircuit *ckt)
|
|||
CKALLOC(CKTirhs,size+1,double);
|
||||
CKALLOC(CKTirhsOld,size+1,double);
|
||||
CKALLOC(CKTirhsSpare,size+1,double);
|
||||
CKALLOC(CKTdiag,size+1,double*);
|
||||
for (i = 0 ; i <= size ; i++)
|
||||
ckt->CKTdiag [i] = NULL ;
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
CKALLOC(CKTfvk,size+1,double);
|
||||
|
|
@ -43,9 +42,6 @@ NIreinit( CKTcircuit *ckt)
|
|||
CKALLOC(CKTmkCurKCLarray,size+1,CKTmkCurKCLnode*);
|
||||
for (i = 0 ; i <= size ; i++)
|
||||
ckt->CKTmkCurKCLarray [i] = NULL ;
|
||||
CKALLOC(CKTdiag,size+1,double*);
|
||||
for (i = 0 ; i <= size ; i++)
|
||||
ckt->CKTdiag [i] = NULL ;
|
||||
#endif
|
||||
|
||||
#ifdef PREDICTOR
|
||||
|
|
|
|||
|
|
@ -103,6 +103,7 @@ CKTdoJob(CKTcircuit *ckt, int reset, TSKtask *task)
|
|||
ckt->CKTtroubleNode = 0;
|
||||
ckt->CKTtroubleElt = NULL;
|
||||
ckt->CKTnoopac = task->TSKnoopac && ckt->CKTisLinear;
|
||||
ckt->CKTuseDeviceGmin = task->TSKuseDeviceGmin ;
|
||||
#ifdef NEWTRUNC
|
||||
ckt->CKTlteReltol = task->TSKlteReltol;
|
||||
ckt->CKTlteAbstol = task->TSKlteAbstol;
|
||||
|
|
|
|||
|
|
@ -79,16 +79,19 @@ CKTload(CKTcircuit *ckt)
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* GMIN Stepping */
|
||||
for (i = 1 ; i <= size ; i++)
|
||||
{
|
||||
if (ckt->CKTdiag [i] != NULL)
|
||||
{
|
||||
*(ckt->CKTdiag [i]) += ckt->CKTdiagGmin ;
|
||||
if (ckt->CKTuseDeviceGmin)
|
||||
{
|
||||
*(ckt->CKTdiag [i]) += ckt->CKTgmin ;
|
||||
} else {
|
||||
*(ckt->CKTdiag [i]) += ckt->CKTdiagGmin ;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef XSPICE
|
||||
/* gtri - add - wbk - 11/26/90 - reset the MIF init flags */
|
||||
|
|
@ -199,19 +202,22 @@ ZeroNoncurRow(SMPmatrix *matrix, CKTnode *nodes, int rownum)
|
|||
return currents;
|
||||
}
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
int
|
||||
CKTloadKCL (CKTcircuit *ckt)
|
||||
{
|
||||
/* for (i = 0 ; i < DEVmaxnum ; i++)
|
||||
int error, i ;
|
||||
|
||||
for (i = 0 ; i < DEVmaxnum ; i++)
|
||||
{
|
||||
if (DEVices[i] && DEVices[i]->DEVload && ckt->CKThead[i])
|
||||
if (DEVices[i] && DEVices[i]->DEVloadKCL && ckt->CKThead[i])
|
||||
{
|
||||
error = DEVices[i]->DEVload (ckt->CKThead[i], ckt) ;
|
||||
error = DEVices[i]->DEVloadKCL (ckt->CKThead[i], ckt) ;
|
||||
if (error)
|
||||
return (error) ;
|
||||
}
|
||||
}*/
|
||||
DEVices[10]->DEVloadKCL (ckt->CKThead[10], ckt) ;
|
||||
}
|
||||
|
||||
return (OK) ;
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -155,11 +155,21 @@ dynamic_gmin (CKTcircuit * ckt, long int firstmode,
|
|||
factor = ckt->CKTgminFactor;
|
||||
OldGmin = 1e-2;
|
||||
gtarget = MAX (ckt->CKTgmin, ckt->CKTgshunt);
|
||||
ckt->CKTdiagGmin = OldGmin / factor;
|
||||
if (ckt->CKTuseDeviceGmin)
|
||||
{
|
||||
ckt->CKTgmin = OldGmin / factor ;
|
||||
} else {
|
||||
ckt->CKTdiagGmin = OldGmin / factor ;
|
||||
}
|
||||
success = failed = 0;
|
||||
|
||||
while ((!success) && (!failed)) {
|
||||
fprintf (stderr, "Trying gmin = %12.4E ", ckt->CKTdiagGmin);
|
||||
if (ckt->CKTuseDeviceGmin)
|
||||
{
|
||||
fprintf (stderr, "Trying gmin = %12.4E ", ckt->CKTgmin) ;
|
||||
} else {
|
||||
fprintf (stderr, "Trying gmin = %12.4E ", ckt->CKTdiagGmin) ;
|
||||
}
|
||||
ckt->CKTnoncon = 1;
|
||||
iters = ckt->CKTstat->STATnumIter;
|
||||
|
||||
|
|
@ -171,35 +181,70 @@ dynamic_gmin (CKTcircuit * ckt, long int firstmode,
|
|||
SPfrontEnd->IFerror (ERR_INFO,
|
||||
"One successful gmin step", NULL);
|
||||
|
||||
if (ckt->CKTdiagGmin <= gtarget) {
|
||||
success = 1;
|
||||
} else {
|
||||
i = 0;
|
||||
for (n = ckt->CKTnodes; n; n = n->next) {
|
||||
OldRhsOld[i] = ckt->CKTrhsOld[n->number];
|
||||
i++;
|
||||
}
|
||||
|
||||
for (i = 0; i < ckt->CKTnumStates; i++) {
|
||||
OldCKTstate0[i] = ckt->CKTstate0[i];
|
||||
}
|
||||
|
||||
if (iters <= (ckt->CKTdcTrcvMaxIter / 4)) {
|
||||
factor *= sqrt (factor);
|
||||
if (factor > ckt->CKTgminFactor)
|
||||
factor = ckt->CKTgminFactor;
|
||||
}
|
||||
|
||||
if (iters > (3 * ckt->CKTdcTrcvMaxIter / 4))
|
||||
factor = sqrt (factor);
|
||||
|
||||
OldGmin = ckt->CKTdiagGmin;
|
||||
|
||||
if ((ckt->CKTdiagGmin) < (factor * gtarget)) {
|
||||
factor = ckt->CKTdiagGmin / gtarget;
|
||||
ckt->CKTdiagGmin = gtarget;
|
||||
if (ckt->CKTuseDeviceGmin)
|
||||
{
|
||||
if (ckt->CKTgmin <= gtarget) {
|
||||
success = 1;
|
||||
} else {
|
||||
ckt->CKTdiagGmin /= factor;
|
||||
i = 0;
|
||||
for (n = ckt->CKTnodes; n; n = n->next) {
|
||||
OldRhsOld[i] = ckt->CKTrhsOld[n->number];
|
||||
i++;
|
||||
}
|
||||
|
||||
for (i = 0; i < ckt->CKTnumStates; i++) {
|
||||
OldCKTstate0[i] = ckt->CKTstate0[i];
|
||||
}
|
||||
|
||||
if (iters <= (ckt->CKTdcTrcvMaxIter / 4)) {
|
||||
factor *= sqrt (factor);
|
||||
if (factor > ckt->CKTgminFactor)
|
||||
factor = ckt->CKTgminFactor;
|
||||
}
|
||||
|
||||
if (iters > (3 * ckt->CKTdcTrcvMaxIter / 4))
|
||||
factor = sqrt (factor);
|
||||
|
||||
OldGmin = ckt->CKTgmin;
|
||||
|
||||
if ((ckt->CKTgmin) < (factor * gtarget)) {
|
||||
factor = ckt->CKTgmin / gtarget;
|
||||
ckt->CKTgmin = gtarget;
|
||||
} else {
|
||||
ckt->CKTgmin /= factor;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (ckt->CKTdiagGmin <= gtarget) {
|
||||
success = 1;
|
||||
} else {
|
||||
i = 0;
|
||||
for (n = ckt->CKTnodes; n; n = n->next) {
|
||||
OldRhsOld[i] = ckt->CKTrhsOld[n->number];
|
||||
i++;
|
||||
}
|
||||
|
||||
for (i = 0; i < ckt->CKTnumStates; i++) {
|
||||
OldCKTstate0[i] = ckt->CKTstate0[i];
|
||||
}
|
||||
|
||||
if (iters <= (ckt->CKTdcTrcvMaxIter / 4)) {
|
||||
factor *= sqrt (factor);
|
||||
if (factor > ckt->CKTgminFactor)
|
||||
factor = ckt->CKTgminFactor;
|
||||
}
|
||||
|
||||
if (iters > (3 * ckt->CKTdcTrcvMaxIter / 4))
|
||||
factor = sqrt (factor);
|
||||
|
||||
OldGmin = ckt->CKTdiagGmin;
|
||||
|
||||
if ((ckt->CKTdiagGmin) < (factor * gtarget)) {
|
||||
factor = ckt->CKTdiagGmin / gtarget;
|
||||
ckt->CKTdiagGmin = gtarget;
|
||||
} else {
|
||||
ckt->CKTdiagGmin /= factor;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
|
@ -213,7 +258,12 @@ dynamic_gmin (CKTcircuit * ckt, long int firstmode,
|
|||
"Further gmin increment",
|
||||
NULL);
|
||||
factor = sqrt (sqrt (factor));
|
||||
ckt->CKTdiagGmin = OldGmin / factor;
|
||||
if (ckt->CKTuseDeviceGmin)
|
||||
{
|
||||
ckt->CKTgmin = OldGmin / factor ;
|
||||
} else {
|
||||
ckt->CKTdiagGmin = OldGmin / factor ;
|
||||
}
|
||||
|
||||
i = 0;
|
||||
for (n = ckt->CKTnodes; n; n = n->next) {
|
||||
|
|
|
|||
|
|
@ -79,6 +79,14 @@ CKTsetup(CKTcircuit *ckt)
|
|||
if(error) return(error);
|
||||
}
|
||||
}
|
||||
|
||||
if (ckt->CKTuseDeviceGmin)
|
||||
{
|
||||
fprintf (stderr, "Using Device Gmin Stepping...\n") ;
|
||||
} else {
|
||||
fprintf (stderr, "Using Diag Gmin Stepping...\n") ;
|
||||
}
|
||||
|
||||
for(i=0;i<=MAX(2,ckt->CKTmaxOrder)+1;i++) { /* dctran needs 3 states as minimum */
|
||||
CKALLOC(ckt->CKTstates[i],ckt->CKTnumStates,double);
|
||||
}
|
||||
|
|
@ -128,7 +136,6 @@ CKTsetup(CKTcircuit *ckt)
|
|||
/* gtri - end - Setup for adding rshunt option resistors */
|
||||
#endif
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
CKTnode *node ;
|
||||
|
||||
node = ckt->CKTnodes ;
|
||||
|
|
@ -142,6 +149,7 @@ CKTsetup(CKTcircuit *ckt)
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/** Marking node as Non-Linear when needed
|
||||
* By default every node is Linear
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -161,6 +161,10 @@ CKTsetOpt(CKTcircuit *ckt, JOB *anal, int opt, IFvalue *val)
|
|||
case OPT_NOOPAC:
|
||||
task->TSKnoopac = (val->iValue != 0);
|
||||
break;
|
||||
case OPT_USEDEVICEGMIN:
|
||||
task->TSKuseDeviceGmin = (val->iValue != 0) ;
|
||||
break ;
|
||||
|
||||
/* gtri - begin - wbk - add new options */
|
||||
#ifdef XSPICE
|
||||
case OPT_EVT_MAX_OP_ALTER:
|
||||
|
|
@ -313,7 +317,8 @@ static IFparm OPTtbl[] = {
|
|||
{ "reldv", OPT_RELDV, IF_SET|IF_REAL,
|
||||
"Maximum relative iter-iter node voltage change" },
|
||||
{ "noopac", OPT_NOOPAC, IF_SET|IF_FLAG,
|
||||
"No op calculation in ac if circuit is linear" }
|
||||
"No op calculation in ac if circuit is linear" },
|
||||
{ "use_device_gmin", OPT_USEDEVICEGMIN, IF_SET|IF_FLAG, "Use Device Gmin Stepping, instead of Diag Gmin Stepping" }
|
||||
};
|
||||
|
||||
int OPTcount = NUMELEMS(OPTtbl);
|
||||
|
|
|
|||
|
|
@ -76,7 +76,8 @@ SPICEdev ASRCinfo = {
|
|||
/* DEVmodSize */ &ASRCmSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ ASRCnodeIsNonLinear
|
||||
/* DEVnodeIsNonLinear */ ASRCnodeIsNonLinear,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -75,7 +75,8 @@ SPICEdev BJTinfo = { /* description from struct IFdevice */
|
|||
/* DEVmodSize */ &BJTmSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ BJTnodeIsNonLinear
|
||||
/* DEVnodeIsNonLinear */ BJTnodeIsNonLinear,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -75,7 +75,8 @@ SPICEdev B1info = {
|
|||
/* DEVmodSize */ &B1mSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ B1nodeIsNonLinear
|
||||
/* DEVnodeIsNonLinear */ B1nodeIsNonLinear,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -75,7 +75,8 @@ SPICEdev B2info = {
|
|||
/* DEVmodSize */ &B2mSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ B2nodeIsNonLinear
|
||||
/* DEVnodeIsNonLinear */ B2nodeIsNonLinear,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -74,7 +74,8 @@ SPICEdev BSIM3info = {
|
|||
/* DEVmodSize */ &BSIM3mSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ BSIM3nodeIsNonLinear
|
||||
/* DEVnodeIsNonLinear */ BSIM3nodeIsNonLinear,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -72,7 +72,8 @@ SPICEdev B3SOIDDinfo = {
|
|||
/* DEVmodSize */ &B3SOIDDmSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ B3SOIDDnodeIsNonLinear
|
||||
/* DEVnodeIsNonLinear */ B3SOIDDnodeIsNonLinear,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -73,7 +73,8 @@ SPICEdev B3SOIFDinfo = {
|
|||
/* DEVmodSize*/ &B3SOIFDmSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ B3SOIFDnodeIsNonLinear
|
||||
/* DEVnodeIsNonLinear */ B3SOIFDnodeIsNonLinear,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -74,7 +74,8 @@ SPICEdev B3SOIPDinfo = {
|
|||
/* DEVmodSize*/ &B3SOIPDmSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ B3SOIPDnodeIsNonLinear
|
||||
/* DEVnodeIsNonLinear */ B3SOIPDnodeIsNonLinear,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -73,7 +73,8 @@ SPICEdev B3v0info = {
|
|||
/* DEVmodSize */ &BSIM3v0mSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ BSIM3v0nodeIsNonLinear
|
||||
/* DEVnodeIsNonLinear */ BSIM3v0nodeIsNonLinear,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -73,7 +73,8 @@ SPICEdev BSIM3v1info = {
|
|||
/* DEVmodSize */ &BSIM3v1mSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ BSIM3v1nodeIsNonLinear
|
||||
/* DEVnodeIsNonLinear */ BSIM3v1nodeIsNonLinear,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -74,7 +74,8 @@ SPICEdev BSIM3v32info = {
|
|||
/* DEVmodSize */ &BSIM3v32mSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ BSIM3v32nodeIsNonLinear
|
||||
/* DEVnodeIsNonLinear */ BSIM3v32nodeIsNonLinear,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -75,7 +75,8 @@ SPICEdev BSIM4v4info = {
|
|||
&BSIM4v4mSize, /* DEVmodSize */
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
BSIM4v4nodeIsNonLinear /* DEVnodeIsNonLinear */
|
||||
BSIM4v4nodeIsNonLinear, /* DEVnodeIsNonLinear */
|
||||
NULL /* DEVloadKCL */
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -75,7 +75,8 @@ SPICEdev BSIM4v5info = {
|
|||
&BSIM4v5mSize, /* DEVmodSize */
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
BSIM4v5nodeIsNonLinear /* DEVnodeIsNonLinear */
|
||||
BSIM4v5nodeIsNonLinear, /* DEVnodeIsNonLinear */
|
||||
NULL /* DEVloadKCL */
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -75,7 +75,8 @@ SPICEdev BSIM4v6info = {
|
|||
&BSIM4v6mSize, /* DEVmodSize */
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
BSIM4v6nodeIsNonLinear /* DEVnodeIsNonLinear */
|
||||
BSIM4v6nodeIsNonLinear, /* DEVnodeIsNonLinear */
|
||||
NULL /* DEVloadKCL */
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -73,7 +73,8 @@ SPICEdev B4SOIinfo = {
|
|||
/* DEVmodSize */ &B4SOImSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ B4SOInodeIsNonLinear
|
||||
/* DEVnodeIsNonLinear */ B4SOInodeIsNonLinear,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -74,7 +74,8 @@ SPICEdev CAPinfo = {
|
|||
/* DEVmodSize */ &CAPmSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ CAPnodeIsNonLinear
|
||||
/* DEVnodeIsNonLinear */ CAPnodeIsNonLinear,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -74,7 +74,8 @@ SPICEdev CCCSinfo = {
|
|||
/* DEVmodSize */ &CCCSmSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ NULL
|
||||
/* DEVnodeIsNonLinear */ NULL,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -75,7 +75,8 @@ SPICEdev CCVSinfo = {
|
|||
/* DEVmodSize */ &CCVSmSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ NULL
|
||||
/* DEVnodeIsNonLinear */ NULL,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -75,7 +75,8 @@ SPICEdev CPLinfo = {
|
|||
/* DEVmodSize */ &CPLmSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ NULL
|
||||
/* DEVnodeIsNonLinear */ NULL,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -77,7 +77,8 @@ SPICEdev CSWinfo = {
|
|||
/* DEVmodSize */ &CSWmSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ NULL
|
||||
/* DEVnodeIsNonLinear */ NULL,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -76,7 +76,8 @@ SPICEdev DIOinfo = {
|
|||
/* DEVmodSize */ &DIOmSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ DIOnodeIsNonLinear
|
||||
/* DEVnodeIsNonLinear */ DIOnodeIsNonLinear,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -75,7 +75,8 @@ SPICEdev HFETAinfo = {
|
|||
/* DEVmodSize */ &HFETAmSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ HFETAnodeIsNonLinear
|
||||
/* DEVnodeIsNonLinear */ HFETAnodeIsNonLinear,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -75,7 +75,8 @@ SPICEdev HFET2info = {
|
|||
/* DEVmodSize */ &HFET2mSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ HFET2nodeIsNonLinear
|
||||
/* DEVnodeIsNonLinear */ HFET2nodeIsNonLinear,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -73,7 +73,8 @@ SPICEdev HSM2info = {
|
|||
/* DEVmodSize */ &HSM2mSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ HSM2nodeIsNonLinear
|
||||
/* DEVnodeIsNonLinear */ HSM2nodeIsNonLinear,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -73,7 +73,8 @@ SPICEdev HSMHVinfo = {
|
|||
/* DEVmodSize */ &HSMHVmSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ HSMHVnodeIsNonLinear
|
||||
/* DEVnodeIsNonLinear */ HSMHVnodeIsNonLinear,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -74,7 +74,8 @@ SPICEdev INDinfo = {
|
|||
/* DEVmodSize */ &INDmSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ INDnodeIsNonLinear
|
||||
/* DEVnodeIsNonLinear */ INDnodeIsNonLinear,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
@ -147,7 +148,8 @@ SPICEdev MUTinfo = {
|
|||
/* DEVmodSize */ &MUTmSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ NULL
|
||||
/* DEVnodeIsNonLinear */ NULL,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -75,7 +75,8 @@ SPICEdev ISRCinfo = {
|
|||
/* DEVmodSize */ &ISRCmSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ NULL
|
||||
/* DEVnodeIsNonLinear */ NULL,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -75,7 +75,8 @@ SPICEdev JFETinfo = {
|
|||
/* DEVmodSize */ &JFETmSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ JFETnodeIsNonLinear
|
||||
/* DEVnodeIsNonLinear */ JFETnodeIsNonLinear,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -75,7 +75,8 @@ SPICEdev JFET2info = {
|
|||
/* DEVmodSize */ &JFET2mSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ JFET2nodeIsNonLinear
|
||||
/* DEVnodeIsNonLinear */ JFET2nodeIsNonLinear,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -75,7 +75,8 @@ SPICEdev LTRAinfo = {
|
|||
/* DEVmodSize */ <RAmSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ NULL
|
||||
/* DEVnodeIsNonLinear */ NULL,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -75,7 +75,8 @@ SPICEdev MESinfo = {
|
|||
/* DEVmodSize */ &MESmSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ MESnodeIsNonLinear
|
||||
/* DEVnodeIsNonLinear */ MESnodeIsNonLinear,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -75,7 +75,8 @@ SPICEdev MESAinfo = {
|
|||
/* DEVmodSize */ &MESAmSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ MESAnodeIsNonLinear
|
||||
/* DEVnodeIsNonLinear */ MESAnodeIsNonLinear,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -75,7 +75,8 @@ SPICEdev MOS1info = {
|
|||
/* DEVmodSize */ &MOS1mSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ MOS1nodeIsNonLinear
|
||||
/* DEVnodeIsNonLinear */ MOS1nodeIsNonLinear,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -75,7 +75,8 @@ SPICEdev MOS2info = {
|
|||
/* DEVmodSize */ &MOS2mSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ MOS2nodeIsNonLinear
|
||||
/* DEVnodeIsNonLinear */ MOS2nodeIsNonLinear,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -75,7 +75,8 @@ SPICEdev MOS3info = {
|
|||
/* DEVmodSize */ &MOS3mSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ MOS3nodeIsNonLinear
|
||||
/* DEVnodeIsNonLinear */ MOS3nodeIsNonLinear,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -75,7 +75,8 @@ SPICEdev MOS6info = {
|
|||
/* DEVmodSize */ &MOS6mSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ MOS6nodeIsNonLinear
|
||||
/* DEVnodeIsNonLinear */ MOS6nodeIsNonLinear,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -75,7 +75,8 @@ SPICEdev MOS9info = {
|
|||
/* DEVmodSize */ &MOS9mSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ MOS9nodeIsNonLinear
|
||||
/* DEVnodeIsNonLinear */ MOS9nodeIsNonLinear,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -75,7 +75,8 @@ SPICEdev RESinfo = {
|
|||
/* DEVmodSize */ &RESmSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ RESnodeIsNonLinear
|
||||
/* DEVnodeIsNonLinear */ RESnodeIsNonLinear,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -75,7 +75,8 @@ SPICEdev SOI3info = {
|
|||
/* DEVmodSize */ &SOI3mSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ SOI3nodeIsNonLinear
|
||||
/* DEVnodeIsNonLinear */ SOI3nodeIsNonLinear,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -76,7 +76,8 @@ SPICEdev SWinfo = {
|
|||
/* DEVmodSize */ &SWmSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ NULL
|
||||
/* DEVnodeIsNonLinear */ NULL,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -75,7 +75,8 @@ SPICEdev TRAinfo = {
|
|||
/* DEVmodSize */ &TRAmSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ NULL
|
||||
/* DEVnodeIsNonLinear */ NULL,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -80,7 +80,8 @@ SPICEdev TXLinfo = {
|
|||
/* DEVmodSize */ &TXLmSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ NULL
|
||||
/* DEVnodeIsNonLinear */ NULL,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -75,7 +75,8 @@ SPICEdev URCinfo = {
|
|||
/* DEVmodSize */ &URCmSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ NULL
|
||||
/* DEVnodeIsNonLinear */ NULL,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -80,7 +80,8 @@ SPICEdev VBICinfo = {
|
|||
&VBICmSize, /* DEVmodSize */
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
VBICnodeIsNonLinear /* DEVnodeIsNonLinear */
|
||||
VBICnodeIsNonLinear, /* DEVnodeIsNonLinear */
|
||||
NULL /* DEVloadKCL */
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -75,7 +75,8 @@ SPICEdev VCCSinfo = {
|
|||
/* DEVmodSize */ &VCCSmSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ NULL
|
||||
/* DEVnodeIsNonLinear */ NULL,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -75,7 +75,8 @@ SPICEdev VCVSinfo = {
|
|||
/* DEVmodSize */ &VCVSmSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ NULL
|
||||
/* DEVnodeIsNonLinear */ NULL,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -75,7 +75,8 @@ SPICEdev VSRCinfo = {
|
|||
/* DEVmodSize */ &VSRCmSize,
|
||||
|
||||
#ifdef KIRCHHOFF
|
||||
/* DEVnodeIsNonLinear */ VSRCnodeIsNonLinear
|
||||
/* DEVnodeIsNonLinear */ VSRCnodeIsNonLinear,
|
||||
/* DEVloadKCL */ NULL
|
||||
#endif
|
||||
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in New Issue