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.
125 lines
4.6 KiB
125 lines
4.6 KiB
/**********
|
|
Copyright 1990 Regents of the University of California. All rights reserved.
|
|
Author: 1985 Thomas L. Quarles
|
|
Modified: Alan Gillespie
|
|
**********/
|
|
/*
|
|
*/
|
|
|
|
#include "ngspice/ngspice.h"
|
|
#include "ngspice/cktdefs.h"
|
|
#include "mos9defs.h"
|
|
#include "ngspice/sperror.h"
|
|
#include "ngspice/suffix.h"
|
|
|
|
|
|
int
|
|
MOS9acLoad(GENmodel *inModel, CKTcircuit *ckt)
|
|
{
|
|
MOS9model *model = (MOS9model *)inModel;
|
|
MOS9instance *here;
|
|
int xnrm;
|
|
int xrev;
|
|
double EffectiveLength;
|
|
double EffectiveWidth;
|
|
double xgs;
|
|
double xgd;
|
|
double xgb;
|
|
double xbd;
|
|
double xbs;
|
|
double capgs;
|
|
double capgd;
|
|
double capgb;
|
|
double GateBulkOverlapCap;
|
|
double GateDrainOverlapCap;
|
|
double GateSourceOverlapCap;
|
|
|
|
for( ; model != NULL; model = MOS9nextModel(model)) {
|
|
for(here = MOS9instances(model); here!= NULL;
|
|
here = MOS9nextInstance(here)) {
|
|
|
|
if (here->MOS9mode < 0) {
|
|
xnrm=0;
|
|
xrev=1;
|
|
} else {
|
|
xnrm=1;
|
|
xrev=0;
|
|
}
|
|
/*
|
|
* charge oriented model parameters
|
|
*/
|
|
EffectiveWidth=here->MOS9w-2*model->MOS9widthNarrow+
|
|
model->MOS9widthAdjust;
|
|
EffectiveLength=here->MOS9l - 2*model->MOS9latDiff+
|
|
model->MOS9lengthAdjust;
|
|
GateSourceOverlapCap = model->MOS9gateSourceOverlapCapFactor *
|
|
here->MOS9m * EffectiveWidth;
|
|
GateDrainOverlapCap = model->MOS9gateDrainOverlapCapFactor *
|
|
here->MOS9m * EffectiveWidth;
|
|
GateBulkOverlapCap = model->MOS9gateBulkOverlapCapFactor *
|
|
here->MOS9m * EffectiveLength;
|
|
|
|
|
|
/*
|
|
* meyer"s model parameters
|
|
*/
|
|
capgs = ( *(ckt->CKTstate0+here->MOS9capgs)+
|
|
*(ckt->CKTstate0+here->MOS9capgs) +
|
|
GateSourceOverlapCap );
|
|
capgd = ( *(ckt->CKTstate0+here->MOS9capgd)+
|
|
*(ckt->CKTstate0+here->MOS9capgd) +
|
|
GateDrainOverlapCap );
|
|
capgb = ( *(ckt->CKTstate0+here->MOS9capgb)+
|
|
*(ckt->CKTstate0+here->MOS9capgb) +
|
|
GateBulkOverlapCap );
|
|
xgs = capgs * ckt->CKTomega;
|
|
xgd = capgd * ckt->CKTomega;
|
|
xgb = capgb * ckt->CKTomega;
|
|
xbd = here->MOS9capbd * ckt->CKTomega;
|
|
xbs = here->MOS9capbs * ckt->CKTomega;
|
|
|
|
/*
|
|
* load matrix
|
|
*/
|
|
|
|
*(here->MOS9GgPtr +1) += xgd+xgs+xgb;
|
|
*(here->MOS9BbPtr +1) += xgb+xbd+xbs;
|
|
*(here->MOS9DPdpPtr +1) += xgd+xbd;
|
|
*(here->MOS9SPspPtr +1) += xgs+xbs;
|
|
*(here->MOS9GbPtr +1) -= xgb;
|
|
*(here->MOS9GdpPtr +1) -= xgd;
|
|
*(here->MOS9GspPtr +1) -= xgs;
|
|
*(here->MOS9BgPtr +1) -= xgb;
|
|
*(here->MOS9BdpPtr +1) -= xbd;
|
|
*(here->MOS9BspPtr +1) -= xbs;
|
|
*(here->MOS9DPgPtr +1) -= xgd;
|
|
*(here->MOS9DPbPtr +1) -= xbd;
|
|
*(here->MOS9SPgPtr +1) -= xgs;
|
|
*(here->MOS9SPbPtr +1) -= xbs;
|
|
*(here->MOS9DdPtr) += here->MOS9drainConductance;
|
|
*(here->MOS9SsPtr) += here->MOS9sourceConductance;
|
|
*(here->MOS9BbPtr) += here->MOS9gbd+here->MOS9gbs;
|
|
*(here->MOS9DPdpPtr) += here->MOS9drainConductance+
|
|
here->MOS9gds+here->MOS9gbd+
|
|
xrev*(here->MOS9gm+here->MOS9gmbs);
|
|
*(here->MOS9SPspPtr) += here->MOS9sourceConductance+
|
|
here->MOS9gds+here->MOS9gbs+
|
|
xnrm*(here->MOS9gm+here->MOS9gmbs);
|
|
*(here->MOS9DdpPtr) -= here->MOS9drainConductance;
|
|
*(here->MOS9SspPtr) -= here->MOS9sourceConductance;
|
|
*(here->MOS9BdpPtr) -= here->MOS9gbd;
|
|
*(here->MOS9BspPtr) -= here->MOS9gbs;
|
|
*(here->MOS9DPdPtr) -= here->MOS9drainConductance;
|
|
*(here->MOS9DPgPtr) += (xnrm-xrev)*here->MOS9gm;
|
|
*(here->MOS9DPbPtr) += -here->MOS9gbd+(xnrm-xrev)*here->MOS9gmbs;
|
|
*(here->MOS9DPspPtr) -= here->MOS9gds+
|
|
xnrm*(here->MOS9gm+here->MOS9gmbs);
|
|
*(here->MOS9SPgPtr) -= (xnrm-xrev)*here->MOS9gm;
|
|
*(here->MOS9SPsPtr) -= here->MOS9sourceConductance;
|
|
*(here->MOS9SPbPtr) -= here->MOS9gbs+(xnrm-xrev)*here->MOS9gmbs;
|
|
*(here->MOS9SPdpPtr) -= here->MOS9gds+
|
|
xrev*(here->MOS9gm+here->MOS9gmbs);
|
|
}
|
|
}
|
|
return(OK);
|
|
}
|