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

📄 messetup.c

📁 spice中支持多层次元件模型仿真的可单独运行的插件源码
💻 C
字号:
/**********Copyright 1990 Regents of the University of California.  All rights reserved.Author: 1985 S. Hwang**********/#include "spice.h"#include <stdio.h>#include "util.h"#include "smpdefs.h"#include "cktdefs.h"#include "mesdefs.h"#include "const.h"#include "sperror.h"#include "suffix.h"intMESsetup(matrix,inModel,ckt,states)    register SMPmatrix *matrix;    GENmodel *inModel;    CKTcircuit *ckt;    int *states;        /* load the diode structure with those pointers needed later          * for fast matrix loading          */{    register MESmodel *model = (MESmodel*)inModel;    register MESinstance *here;    int error;    CKTnode *tmp;    /*  loop through all the diode models */    for( ; model != NULL; model = model->MESnextModel ) {        if( (model->MEStype != NMF) && (model->MEStype != PMF) ) {            model->MEStype = NMF;        }        if(!model->MESthresholdGiven) {            model->MESthreshold = -2;        }        if(!model->MESbetaGiven) {            model->MESbeta = 2.5e-3;        }        if(!model->MESbGiven) {            model->MESb = 0.3;        }        if(!model->MESalphaGiven) {            model->MESalpha = 2;        }        if(!model->MESlModulationGiven) {            model->MESlModulation = 0;        }        if(!model->MESdrainResistGiven) {            model->MESdrainResist = 0;        }        if(!model->MESsourceResistGiven) {            model->MESsourceResist = 0;        }        if(!model->MEScapGSGiven) {            model->MEScapGS = 0;        }        if(!model->MEScapGDGiven) {            model->MEScapGD = 0;        }        if(!model->MESgatePotentialGiven) {            model->MESgatePotential = 1;        }        if(!model->MESgateSatCurrentGiven) {            model->MESgateSatCurrent = 1e-14;        }        if(!model->MESdepletionCapCoeffGiven) {            model->MESdepletionCapCoeff = .5;        }	if(!model->MESfNcoefGiven) {	    model->MESfNcoef = 0;	}	if(!model->MESfNexpGiven) {	    model->MESfNexp = 1;	}        /* loop through all the instances of the model */        for (here = model->MESinstances; here != NULL ;                here=here->MESnextInstance) {	    if (here->MESowner != ARCHme) goto matrixpointers;                        if(!here->MESareaGiven) {                here->MESarea = 1;            }            here->MESstate = *states;            *states += MESnumStates;matrixpointers:            if(model->MESsourceResist != 0 && here->MESsourcePrimeNode==0) {                error = CKTmkVolt(ckt,&tmp,here->MESname,"source");                if(error) return(error);                here->MESsourcePrimeNode = tmp->number;            } else {                here->MESsourcePrimeNode = here->MESsourceNode;            }            if(model->MESdrainResist != 0 && here->MESdrainPrimeNode==0) {                error = CKTmkVolt(ckt,&tmp,here->MESname,"drain");                if(error) return(error);                here->MESdrainPrimeNode = tmp->number;            } else {                here->MESdrainPrimeNode = here->MESdrainNode;            }/* macro to make elements with built in test for out of memory */#define TSTALLOC(ptr,first,second) \if((here->ptr = SMPmakeElt(matrix,here->first,here->second))==(double *)NULL){\    return(E_NOMEM);\}            TSTALLOC(MESdrainDrainPrimePtr,MESdrainNode,MESdrainPrimeNode)            TSTALLOC(MESgateDrainPrimePtr,MESgateNode,MESdrainPrimeNode)            TSTALLOC(MESgateSourcePrimePtr,MESgateNode,MESsourcePrimeNode)            TSTALLOC(MESsourceSourcePrimePtr,MESsourceNode,                    MESsourcePrimeNode)            TSTALLOC(MESdrainPrimeDrainPtr,MESdrainPrimeNode,MESdrainNode)            TSTALLOC(MESdrainPrimeGatePtr,MESdrainPrimeNode,MESgateNode)            TSTALLOC(MESdrainPrimeSourcePrimePtr,MESdrainPrimeNode,                    MESsourcePrimeNode)            TSTALLOC(MESsourcePrimeGatePtr,MESsourcePrimeNode,MESgateNode)            TSTALLOC(MESsourcePrimeSourcePtr,MESsourcePrimeNode,                    MESsourceNode)            TSTALLOC(MESsourcePrimeDrainPrimePtr,MESsourcePrimeNode,                    MESdrainPrimeNode)            TSTALLOC(MESdrainDrainPtr,MESdrainNode,MESdrainNode)            TSTALLOC(MESgateGatePtr,MESgateNode,MESgateNode)            TSTALLOC(MESsourceSourcePtr,MESsourceNode,MESsourceNode)            TSTALLOC(MESdrainPrimeDrainPrimePtr,MESdrainPrimeNode,                    MESdrainPrimeNode)            TSTALLOC(MESsourcePrimeSourcePrimePtr,MESsourcePrimeNode,                    MESsourcePrimeNode)        }    }    return(OK);}intMESunsetup(inModel,ckt)    GENmodel *inModel;    CKTcircuit *ckt;{#ifndef HAS_BATCHSIM    MESmodel *model;    MESinstance *here;    for (model = (MESmodel *)inModel; model != NULL;	    model = model->MESnextModel)    {        for (here = model->MESinstances; here != NULL;                here=here->MESnextInstance)	{	    if (here->MESsourcePrimeNode		    && here->MESsourcePrimeNode != here->MESsourceNode)	    {		CKTdltNNum(ckt, here->MESsourcePrimeNode);		here->MESsourcePrimeNode = 0;	    }	    if (here->MESdrainPrimeNode		    && here->MESdrainPrimeNode != here->MESdrainNode)	    {		CKTdltNNum(ckt, here->MESdrainPrimeNode);		here->MESdrainPrimeNode = 0;	    }	}    }#endif    return OK;}

⌨️ 快捷键说明

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