📄 mos9sacl.c
字号:
/**********Copyright 1990 Regents of the University of California. All rights reserved.Author: 1985 Thomas L. QuarlesModified: Alan GillespieThis function is obsolete (was used by an old sensitivity analysis)**********//* actually load the current ac sensitivity * information into the array previously provided */#include "ngspice.h"#include "smpdefs.h"#include "cktdefs.h"#include "const.h"#include "mos9defs.h"#include "sperror.h"#include "suffix.h"intMOS9sAcLoad(GENmodel *inModel, CKTcircuit *ckt){ MOS9model *model = (MOS9model *)inModel; MOS9instance *here; int xnrm; int xrev; double A0; double Apert = 0.0; double DELA; double DELAinv; double gdpr0; double gspr0; double gds0; double gbs0; double gbd0; double gm0; double gmbs0; double gdpr; double gspr; double gds; double gbs; double gbd; double gm; double gmbs; double xcgs0; double xcgd0; double xcgb0; double xbd0; double xbs0; double xcgs; double xcgd; double xcgb; double xbd; double xbs; double vbsOp; double vbdOp; double vspr; double vdpr; double vgs; double vgd; double vgb; double vbs; double vbd; double vds; double ivspr; double ivdpr; double ivgs; double ivgd; double ivgb; double ivbs; double ivbd; double ivds; double cspr; double cdpr; double cgs; double cgd; double cgb; double cbs; double cbd; double cds; double cs0; double csprm0; double cd0; double cdprm0; double cg0; double cb0; double cs; double csprm; double cd; double cdprm; double cg; double cb; double icspr; double icdpr; double icgs; double icgd; double icgb; double icbs; double icbd; double icds; double ics0; double icsprm0; double icd0; double icdprm0; double icg0; double icb0; double ics; double icsprm; double icd; double icdprm; double icg; double icb; double DvDp = 0.0; int i; int flag; int error; int iparmno; double arg; double sarg; double sargsw; double SaveState[44]; int save_mode; SENstruct *info;#ifdef SENSDEBUG printf("MOS9senacload\n"); printf("CKTomega = %.5e\n",ckt->CKTomega);#endif /* SENSDEBUG */ info = ckt->CKTsenInfo; info->SENstatus = PERTURBATION; for( ; model != NULL; model = model->MOS9nextModel) { for(here = model->MOS9instances; here!= NULL; here = here->MOS9nextInstance) { if (here->MOS9owner != ARCHme) continue; /* save the unperturbed values in the state vector */ for(i=0; i <= 16; i++) *(SaveState + i) = *(ckt->CKTstate0 + here->MOS9states + i); *(SaveState + 17) = here->MOS9sourceConductance; *(SaveState + 18) = here->MOS9drainConductance; *(SaveState + 19) = here->MOS9cd; *(SaveState + 20) = here->MOS9cbs; *(SaveState + 21) = here->MOS9cbd; *(SaveState + 22) = here->MOS9gmbs; *(SaveState + 23) = here->MOS9gm; *(SaveState + 24) = here->MOS9gds; *(SaveState + 25) = here->MOS9gbd; *(SaveState + 26) = here->MOS9gbs; *(SaveState + 27) = here->MOS9capbd; *(SaveState + 28) = here->MOS9capbs; *(SaveState + 29) = here->MOS9Cbd; *(SaveState + 30) = here->MOS9Cbdsw; *(SaveState + 31) = here->MOS9Cbs; *(SaveState + 32) = here->MOS9Cbssw; *(SaveState + 33) = here->MOS9f2d; *(SaveState + 34) = here->MOS9f3d; *(SaveState + 35) = here->MOS9f4d; *(SaveState + 36) = here->MOS9f2s; *(SaveState + 37) = here->MOS9f3s; *(SaveState + 38) = here->MOS9f4s; *(SaveState + 39) = here->MOS9cgs; *(SaveState + 40) = here->MOS9cgd; *(SaveState + 41) = here->MOS9cgb; *(SaveState + 42) = here->MOS9vdsat; *(SaveState + 43) = here->MOS9von; save_mode = here->MOS9mode; xnrm=1; xrev=0; if (here->MOS9mode < 0) { xnrm=0; xrev=1; } vbsOp = model->MOS9type * ( *(ckt->CKTrhsOp+here->MOS9bNode) - *(ckt->CKTrhsOp+here->MOS9sNodePrime)); vbdOp = model->MOS9type * ( *(ckt->CKTrhsOp+here->MOS9bNode) - *(ckt->CKTrhsOp+here->MOS9dNodePrime)); vspr = *(ckt->CKTrhsOld + here->MOS9sNode) - *(ckt->CKTrhsOld + here->MOS9sNodePrime) ; ivspr = *(ckt->CKTirhsOld + here->MOS9sNode) - *(ckt->CKTirhsOld + here->MOS9sNodePrime) ; vdpr = *(ckt->CKTrhsOld + here->MOS9dNode) - *(ckt->CKTrhsOld + here->MOS9dNodePrime) ; ivdpr = *(ckt->CKTirhsOld + here->MOS9dNode) - *(ckt->CKTirhsOld + here->MOS9dNodePrime) ; vgb = *(ckt->CKTrhsOld + here->MOS9gNode) - *(ckt->CKTrhsOld + here->MOS9bNode) ; ivgb = *(ckt->CKTirhsOld + here->MOS9gNode) - *(ckt->CKTirhsOld + here->MOS9bNode) ; vbs = *(ckt->CKTrhsOld + here->MOS9bNode) - *(ckt->CKTrhsOld + here->MOS9sNodePrime) ; ivbs = *(ckt->CKTirhsOld + here->MOS9bNode) - *(ckt->CKTirhsOld + here->MOS9sNodePrime) ; vbd = *(ckt->CKTrhsOld + here->MOS9bNode) - *(ckt->CKTrhsOld + here->MOS9dNodePrime) ; ivbd = *(ckt->CKTirhsOld + here->MOS9bNode) - *(ckt->CKTirhsOld + here->MOS9dNodePrime) ; vds = vbs - vbd ; ivds = ivbs - ivbd ; vgs = vgb + vbs ; ivgs = ivgb + ivbs ; vgd = vgb + vbd ; ivgd = ivgb + ivbd ;#ifdef SENSDEBUG printf("senacload instance name %s\n",here->MOS9name); printf("gate = %d ,drain = %d, drainprm = %d\n", here->MOS9gNode,here->MOS9dNode,here->MOS9dNodePrime); printf("source = %d , sourceprm = %d ,body = %d, senparmno = %d\n", here->MOS9sNode ,here->MOS9sNodePrime, here->MOS9bNode,here->MOS9senParmNo); printf("\n without perturbation \n");#endif /* SENSDEBUG */ /* without perturbation */ *(ckt->CKTstate0 + here->MOS9vbs) = vbsOp; *(ckt->CKTstate0 + here->MOS9vbd) = vbdOp; here->MOS9senPertFlag = ON ; if(info->SENacpertflag == 1){ /* store the unperturbed values of small signal parameters */ if((error = MOS9load((GENmodel*)model,ckt))) return(error); *(here->MOS9senCgs) = here->MOS9cgs; *(here->MOS9senCgd) = here->MOS9cgd; *(here->MOS9senCgb) = here->MOS9cgb; *(here->MOS9senCbd) = here->MOS9capbd; *(here->MOS9senCbs) = here->MOS9capbs; *(here->MOS9senGds) = here->MOS9gds; *(here->MOS9senGbs) = here->MOS9gbs; *(here->MOS9senGbd) = here->MOS9gbd; *(here->MOS9senGm) = here->MOS9gm; *(here->MOS9senGmbs) = here->MOS9gmbs; } xcgs0= *(here->MOS9senCgs) * ckt->CKTomega; xcgd0= *(here->MOS9senCgd) * ckt->CKTomega; xcgb0= *(here->MOS9senCgb) * ckt->CKTomega; xbd0= *(here->MOS9senCbd) * ckt->CKTomega; xbs0= *(here->MOS9senCbs) * ckt->CKTomega; gds0= *(here->MOS9senGds); gbs0= *(here->MOS9senGbs); gbd0= *(here->MOS9senGbd); gm0= *(here->MOS9senGm); gmbs0= *(here->MOS9senGmbs); gdpr0 = here->MOS9drainConductance; gspr0 = here->MOS9sourceConductance;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -