⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mos2sacl.c

📁 ngspice又一个电子CAD仿真软件代码.功能更全
💻 C
📖 第 1 页 / 共 3 页
字号:
/**********Copyright 1990 Regents of the University of California.  All rights reserved.Author: 1985 Thomas L. QuarlesThis 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 "mos2defs.h"#include "sperror.h"#include "suffix.h"intMOS2sAcLoad(GENmodel *inModel, CKTcircuit *ckt){    MOS2model *model = (MOS2model *)inModel;    MOS2instance *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("MOS2senacload\n");    printf("CKTomega = %.5e\n",ckt->CKTomega);#endif /* SENSDEBUG */    info = ckt->CKTsenInfo;    info->SENstatus = PERTURBATION;    for( ; model != NULL; model = model->MOS2nextModel) {        for(here = model->MOS2instances; here!= NULL;                here = here->MOS2nextInstance) {	    if (here->MOS2owner != ARCHme) continue;            /* save the unperturbed values in the state vector */            for(i=0; i <= 16; i++)                *(SaveState + i) = *(ckt->CKTstate0 + here->MOS2states + i);            *(SaveState + 17) = here->MOS2sourceConductance;              *(SaveState + 18) = here->MOS2drainConductance;              *(SaveState + 19) = here->MOS2cd;              *(SaveState + 20) = here->MOS2cbs;              *(SaveState + 21) = here->MOS2cbd;              *(SaveState + 22) = here->MOS2gmbs;              *(SaveState + 23) = here->MOS2gm;              *(SaveState + 24) = here->MOS2gds;              *(SaveState + 25) = here->MOS2gbd;              *(SaveState + 26) = here->MOS2gbs;              *(SaveState + 27) = here->MOS2capbd;              *(SaveState + 28) = here->MOS2capbs;              *(SaveState + 29) = here->MOS2Cbd;              *(SaveState + 30) = here->MOS2Cbdsw;              *(SaveState + 31) = here->MOS2Cbs;              *(SaveState + 32) = here->MOS2Cbssw;              *(SaveState + 33) = here->MOS2f2d;              *(SaveState + 34) = here->MOS2f3d;              *(SaveState + 35) = here->MOS2f4d;              *(SaveState + 36) = here->MOS2f2s;              *(SaveState + 37) = here->MOS2f3s;              *(SaveState + 38) = here->MOS2f4s;              *(SaveState + 39) = here->MOS2cgs;              *(SaveState + 40) = here->MOS2cgd;              *(SaveState + 41) = here->MOS2cgb;              *(SaveState + 42) = here->MOS2vdsat;              *(SaveState + 43) = here->MOS2von;              save_mode  = here->MOS2mode;              xnrm=1;            xrev=0;            if (here->MOS2mode < 0) {                xnrm=0;                xrev=1;            }            vbsOp = model->MOS2type * (             *(ckt->CKTrhsOp+here->MOS2bNode) -                *(ckt->CKTrhsOp+here->MOS2sNodePrime));            vbdOp = model->MOS2type * (             *(ckt->CKTrhsOp+here->MOS2bNode) -                *(ckt->CKTrhsOp+here->MOS2dNodePrime));            vspr = *(ckt->CKTrhsOld + here->MOS2sNode)                 - *(ckt->CKTrhsOld +                    here->MOS2sNodePrime) ;            ivspr = *(ckt->CKTirhsOld + here->MOS2sNode)                 - *(ckt->CKTirhsOld +                    here->MOS2sNodePrime) ;            vdpr = *(ckt->CKTrhsOld + here->MOS2dNode)                 - *(ckt->CKTrhsOld +                    here->MOS2dNodePrime) ;            ivdpr = *(ckt->CKTirhsOld + here->MOS2dNode)                 - *(ckt->CKTirhsOld +                    here->MOS2dNodePrime) ;            vgb = *(ckt->CKTrhsOld + here->MOS2gNode)                 - *(ckt->CKTrhsOld +                    here->MOS2bNode) ;            ivgb = *(ckt->CKTirhsOld + here->MOS2gNode)                 - *(ckt->CKTirhsOld +                    here->MOS2bNode) ;            vbs = *(ckt->CKTrhsOld + here->MOS2bNode)                 - *(ckt->CKTrhsOld +                    here->MOS2sNodePrime) ;            ivbs = *(ckt->CKTirhsOld + here->MOS2bNode)                 - *(ckt->CKTirhsOld +                    here->MOS2sNodePrime) ;            vbd = *(ckt->CKTrhsOld + here->MOS2bNode)                 - *(ckt->CKTrhsOld +                    here->MOS2dNodePrime) ;            ivbd = *(ckt->CKTirhsOld + here->MOS2bNode)                 - *(ckt->CKTirhsOld +                    here->MOS2dNodePrime) ;            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->MOS2name);            printf("gate = %d ,drain = %d, drainprm = %d\n",                     here->MOS2gNode,here->MOS2dNode,here->MOS2dNodePrime);            printf("source = %d , sourceprm = %d ,body = %d, senparmno = %d\n",                    here->MOS2sNode ,here->MOS2sNodePrime,                    here->MOS2bNode,here->MOS2senParmNo);            printf("\n without  perturbation \n");#endif /* SENSDEBUG */            /*  without  perturbation  */            *(ckt->CKTstate0 + here->MOS2vbs) = vbsOp;            *(ckt->CKTstate0 + here->MOS2vbd) = vbdOp;            here->MOS2senPertFlag = ON ;            if(info->SENacpertflag == 1){                /* store the  unperturbed values of small signal parameters */                if((error = MOS2load((GENmodel*)model,ckt)))		  return(error);                *(here->MOS2senCgs) = here->MOS2cgs;                *(here->MOS2senCgd) = here->MOS2cgd;                *(here->MOS2senCgb) = here->MOS2cgb;                *(here->MOS2senCbd) = here->MOS2capbd;                *(here->MOS2senCbs) = here->MOS2capbs;                *(here->MOS2senGds) = here->MOS2gds;                *(here->MOS2senGbs) = here->MOS2gbs;                *(here->MOS2senGbd) = here->MOS2gbd;                *(here->MOS2senGm) = here->MOS2gm;                *(here->MOS2senGmbs) = here->MOS2gmbs;            }            xcgs0= *(here->MOS2senCgs) * ckt->CKTomega;            xcgd0= *(here->MOS2senCgd) * ckt->CKTomega;            xcgb0= *(here->MOS2senCgb) * ckt->CKTomega;            xbd0= *(here->MOS2senCbd) * ckt->CKTomega;            xbs0= *(here->MOS2senCbs) * ckt->CKTomega;            gds0= *(here->MOS2senGds);            gbs0= *(here->MOS2senGbs);            gbd0= *(here->MOS2senGbd);            gm0= *(here->MOS2senGm);            gmbs0= *(here->MOS2senGmbs);            gdpr0 = here->MOS2drainConductance;            gspr0 = here->MOS2sourceConductance;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -