📄 mos6ask.c
字号:
/**********Copyright 1990 Regents of the University of California. All rights reserved.Author: 1989 Takayasu SakuraiModified: 2000 AlansFixes**********/#include "ngspice.h"#include "const.h"#include "ifsim.h"#include "cktdefs.h"#include "devdefs.h"#include "mos6defs.h"#include "sperror.h"#include "suffix.h"/*ARGSUSED*/intMOS6ask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select){ MOS6instance *here = (MOS6instance*)inst; double vr; double vi; double sr; double si; double vm; static char *msg = "Current and power not available for ac analysis"; switch(which) { case MOS6_TEMP: value->rValue = here->MOS6temp - CONSTCtoK; return(OK); case MOS6_DTEMP: value->rValue = here->MOS6dtemp; return(OK); case MOS6_CGS: value->rValue = 2* *(ckt->CKTstate0 + here->MOS6capgs); value->rValue *= here->MOS6m; return(OK); case MOS6_CGD: value->rValue = 2* *(ckt->CKTstate0 + here->MOS6capgd); value->rValue *= here->MOS6m; return(OK); case MOS6_L: value->rValue = here->MOS6l; return(OK); case MOS6_W: value->rValue = here->MOS6w; value->rValue *= here->MOS6m; return(OK); case MOS6_M: value->rValue = here->MOS6m; return(OK); case MOS6_AS: value->rValue = here->MOS6sourceArea; value->rValue *= here->MOS6m; return(OK); case MOS6_AD: value->rValue = here->MOS6drainArea; value->rValue *= here->MOS6m; return(OK); case MOS6_PS: value->rValue = here->MOS6sourcePerimiter; value->rValue *= here->MOS6m; return(OK); case MOS6_PD: value->rValue = here->MOS6drainPerimiter; value->rValue *= here->MOS6m; return(OK); case MOS6_NRS: value->rValue = here->MOS6sourceSquares; value->rValue *= here->MOS6m; return(OK); case MOS6_NRD: value->rValue = here->MOS6drainSquares; value->rValue *= here->MOS6m; return(OK); case MOS6_OFF: value->rValue = here->MOS6off; return(OK); case MOS6_IC_VBS: value->rValue = here->MOS6icVBS; return(OK); case MOS6_IC_VDS: value->rValue = here->MOS6icVDS; return(OK); case MOS6_IC_VGS: value->rValue = here->MOS6icVGS; return(OK); case MOS6_DNODE: value->iValue = here->MOS6dNode; return(OK); case MOS6_GNODE: value->iValue = here->MOS6gNode; return(OK); case MOS6_SNODE: value->iValue = here->MOS6sNode; return(OK); case MOS6_BNODE: value->iValue = here->MOS6bNode; return(OK); case MOS6_DNODEPRIME: value->iValue = here->MOS6dNodePrime; return(OK); case MOS6_SNODEPRIME: value->iValue = here->MOS6sNodePrime; return(OK); case MOS6_SOURCECONDUCT: value->rValue = here->MOS6sourceConductance; value->rValue *= here->MOS6m; return(OK); case MOS6_DRAINCONDUCT: value->rValue = here->MOS6drainConductance; value->rValue *= here->MOS6m; return(OK); case MOS6_SOURCERESIST: if (here->MOS6sNodePrime != here->MOS6sNode) value->rValue = 1.0 / here->MOS6sourceConductance; else value->rValue = 0.0; value->rValue /= here->MOS6m; return(OK); case MOS6_DRAINRESIST: if (here->MOS6dNodePrime != here->MOS6dNode) value->rValue = 1.0 / here->MOS6drainConductance; else value->rValue = 0.0; value->rValue /= here->MOS6m; return(OK); case MOS6_VON: value->rValue = here->MOS6von; return(OK); case MOS6_VDSAT: value->rValue = here->MOS6vdsat; return(OK); case MOS6_SOURCEVCRIT: value->rValue = here->MOS6sourceVcrit; return(OK); case MOS6_DRAINVCRIT: value->rValue = here->MOS6drainVcrit; return(OK); case MOS6_CD: value->rValue = here->MOS6cd; value->rValue *= here->MOS6m; return(OK); case MOS6_CBS: value->rValue = here->MOS6cbs; value->rValue *= here->MOS6m; return(OK); case MOS6_CBD: value->rValue = here->MOS6cbd; value->rValue *= here->MOS6m; return(OK); case MOS6_GMBS: value->rValue = here->MOS6gmbs; value->rValue *= here->MOS6m; return(OK); case MOS6_GM: value->rValue = here->MOS6gm; value->rValue *= here->MOS6m; return(OK); case MOS6_GDS: value->rValue = here->MOS6gds; value->rValue *= here->MOS6m; return(OK); case MOS6_GBD: value->rValue = here->MOS6gbd; value->rValue *= here->MOS6m; return(OK); case MOS6_GBS: value->rValue = here->MOS6gbs; value->rValue *= here->MOS6m; return(OK); case MOS6_CAPBD: value->rValue = here->MOS6capbd; value->rValue *= here->MOS6m; return(OK); case MOS6_CAPBS: value->rValue = here->MOS6capbs; value->rValue *= here->MOS6m; return(OK); case MOS6_CAPZEROBIASBD: value->rValue = here->MOS6Cbd; value->rValue *= here->MOS6m; return(OK); case MOS6_CAPZEROBIASBDSW: value->rValue = here->MOS6Cbdsw; value->rValue *= here->MOS6m; return(OK); case MOS6_CAPZEROBIASBS: value->rValue = here->MOS6Cbs; value->rValue *= here->MOS6m; return(OK); case MOS6_CAPZEROBIASBSSW: value->rValue = here->MOS6Cbssw; value->rValue *= here->MOS6m; return(OK); case MOS6_VBD: value->rValue = *(ckt->CKTstate0 + here->MOS6vbd); return(OK); case MOS6_VBS: value->rValue = *(ckt->CKTstate0 + here->MOS6vbs); return(OK); case MOS6_VGS: value->rValue = *(ckt->CKTstate0 + here->MOS6vgs); return(OK); case MOS6_VDS: value->rValue = *(ckt->CKTstate0 + here->MOS6vds); return(OK); case MOS6_CAPGS: value->rValue = 2* *(ckt->CKTstate0 + here->MOS6capgs); /* add overlap capacitance */ value->rValue += (here->sMOS6modPtr->MOS6gateSourceOverlapCapFactor) * (here->MOS6w); value->rValue *= here->MOS6m; return(OK); case MOS6_QGS: value->rValue = *(ckt->CKTstate0 + here->MOS6qgs); value->rValue *= here->MOS6m; return(OK); case MOS6_CQGS: value->rValue = *(ckt->CKTstate0 + here->MOS6cqgs); value->rValue *= here->MOS6m; return(OK); case MOS6_CAPGD: value->rValue = 2* *(ckt->CKTstate0 + here->MOS6capgd); /* add overlap capacitance */ value->rValue += (here->sMOS6modPtr->MOS6gateSourceOverlapCapFactor) * (here->MOS6w); value->rValue *= here->MOS6m; return(OK); case MOS6_QGD: value->rValue = *(ckt->CKTstate0 + here->MOS6qgd); value->rValue *= here->MOS6m; return(OK); case MOS6_CQGD: value->rValue = *(ckt->CKTstate0 + here->MOS6cqgd); value->rValue *= here->MOS6m; return(OK);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -