You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
225 lines
7.4 KiB
225 lines
7.4 KiB
/**********
|
|
Copyright 1990 Regents of the University of California. All rights reserved.
|
|
Author: 1988 Hong J. Park
|
|
**********/
|
|
|
|
#include "ngspice/ngspice.h"
|
|
#include "ngspice/ifsim.h"
|
|
#include "ngspice/cktdefs.h"
|
|
#include "ngspice/devdefs.h"
|
|
#include "bsim2def.h"
|
|
#include "ngspice/sperror.h"
|
|
#include "ngspice/suffix.h"
|
|
|
|
/*ARGSUSED*/
|
|
int
|
|
B2ask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value,
|
|
IFvalue *select)
|
|
{
|
|
B2instance *here = (B2instance*)inst;
|
|
|
|
NG_IGNORE(select);
|
|
|
|
switch(which) {
|
|
case BSIM2_L:
|
|
value->rValue = here->B2l;
|
|
return(OK);
|
|
case BSIM2_W:
|
|
value->rValue = here->B2w;
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_M:
|
|
value->rValue = here->B2m;
|
|
return(OK);
|
|
case BSIM2_AS:
|
|
value->rValue = here->B2sourceArea;
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_AD:
|
|
value->rValue = here->B2drainArea;
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_PS:
|
|
value->rValue = here->B2sourcePerimeter;
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_PD:
|
|
value->rValue = here->B2drainPerimeter;
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_NRS:
|
|
value->rValue = here->B2sourceSquares;
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_NRD:
|
|
value->rValue = here->B2drainSquares;
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_OFF:
|
|
value->rValue = here->B2off;
|
|
return(OK);
|
|
case BSIM2_IC_VBS:
|
|
value->rValue = here->B2icVBS;
|
|
return(OK);
|
|
case BSIM2_IC_VDS:
|
|
value->rValue = here->B2icVDS;
|
|
return(OK);
|
|
case BSIM2_IC_VGS:
|
|
value->rValue = here->B2icVGS;
|
|
return(OK);
|
|
case BSIM2_DNODE:
|
|
value->iValue = here->B2dNode;
|
|
return(OK);
|
|
case BSIM2_GNODE:
|
|
value->iValue = here->B2gNode;
|
|
return(OK);
|
|
case BSIM2_SNODE:
|
|
value->iValue = here->B2sNode;
|
|
return(OK);
|
|
case BSIM2_BNODE:
|
|
value->iValue = here->B2bNode;
|
|
return(OK);
|
|
case BSIM2_DNODEPRIME:
|
|
value->iValue = here->B2dNodePrime;
|
|
return(OK);
|
|
case BSIM2_SNODEPRIME:
|
|
value->iValue = here->B2sNodePrime;
|
|
return(OK);
|
|
case BSIM2_SOURCECONDUCT:
|
|
value->rValue = here->B2sourceConductance;
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_DRAINCONDUCT:
|
|
value->rValue = here->B2drainConductance;
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_VBD:
|
|
value->rValue = *(ckt->CKTstate0 + here->B2vbd);
|
|
return(OK);
|
|
case BSIM2_VBS:
|
|
value->rValue = *(ckt->CKTstate0 + here->B2vbs);
|
|
return(OK);
|
|
case BSIM2_VGS:
|
|
value->rValue = *(ckt->CKTstate0 + here->B2vgs);
|
|
return(OK);
|
|
case BSIM2_VDS:
|
|
value->rValue = *(ckt->CKTstate0 + here->B2vds);
|
|
return(OK);
|
|
case BSIM2_CD:
|
|
value->rValue = *(ckt->CKTstate0 + here->B2cd);
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_CBS:
|
|
value->rValue = *(ckt->CKTstate0 + here->B2cbs);
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_CBD:
|
|
value->rValue = *(ckt->CKTstate0 + here->B2cbd);
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_GM:
|
|
value->rValue = *(ckt->CKTstate0 + here->B2gm);
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_GDS:
|
|
value->rValue = *(ckt->CKTstate0 + here->B2gds);
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_GMBS:
|
|
value->rValue = *(ckt->CKTstate0 + here->B2gmbs);
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_GBD:
|
|
value->rValue = *(ckt->CKTstate0 + here->B2gbd);
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_GBS:
|
|
value->rValue = *(ckt->CKTstate0 + here->B2gbs);
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_QB:
|
|
value->rValue = *(ckt->CKTstate0 + here->B2qb);
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_CQB:
|
|
value->rValue = *(ckt->CKTstate0 + here->B2cqb);
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_QG:
|
|
value->rValue = *(ckt->CKTstate0 + here->B2qg);
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_CQG:
|
|
value->rValue = *(ckt->CKTstate0 + here->B2cqg);
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_QD:
|
|
value->rValue = *(ckt->CKTstate0 + here->B2qd);
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_CQD:
|
|
value->rValue = *(ckt->CKTstate0 + here->B2cqd);
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_CGG:
|
|
value->rValue = *(ckt->CKTstate0 + here->B2cggb);
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_CGD:
|
|
value->rValue = *(ckt->CKTstate0 + here->B2cgdb);
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_CGS:
|
|
value->rValue = *(ckt->CKTstate0 + here->B2cgsb);
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_CBG:
|
|
value->rValue = *(ckt->CKTstate0 + here->B2cbgb);
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_CAPBD:
|
|
value->rValue = *(ckt->CKTstate0 + here->B2capbd);
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_CQBD:
|
|
value->rValue = *(ckt->CKTstate0 + here->B2cqbd);
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_CAPBS:
|
|
value->rValue = *(ckt->CKTstate0 + here->B2capbs);
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_CQBS:
|
|
value->rValue = *(ckt->CKTstate0 + here->B2cqbs);
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_CDG:
|
|
value->rValue = *(ckt->CKTstate0 + here->B2cdgb);
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_CDD:
|
|
value->rValue = *(ckt->CKTstate0 + here->B2cddb);
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_CDS:
|
|
value->rValue = *(ckt->CKTstate0 + here->B2cdsb);
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_VON:
|
|
value->rValue = *(ckt->CKTstate0 + here->B2vono);
|
|
return(OK);
|
|
case BSIM2_QBS:
|
|
value->rValue = *(ckt->CKTstate0 + here->B2qbs);
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
case BSIM2_QBD:
|
|
value->rValue = *(ckt->CKTstate0 + here->B2qbd);
|
|
value->rValue *= here->B2m;
|
|
return(OK);
|
|
default:
|
|
return(E_BADPARM);
|
|
}
|
|
/* NOTREACHED */
|
|
}
|
|
|
|
|