Added dtemp and "m" to JFET2 and updated DEVICES file.
This commit is contained in:
parent
c54bda7dc0
commit
1def649a82
|
|
@ -1,3 +1,11 @@
|
|||
2003-12-27 Paolo Nenzi <p.nenzi@ieee.org>
|
||||
|
||||
* src/spicelib/devices/jfet2/*: Added parallel multiplier and "dtemp"
|
||||
parameter. Added Alan's CopyNodeSet, and inserted a missing
|
||||
instruction in JFET2temp (for parallel code).
|
||||
|
||||
* DEVICES: Updated documentation for JFET2 model
|
||||
|
||||
2003-12-26 Paolo Nenzi <p.nenzi@ieee.org>
|
||||
|
||||
* src/spicelib/devices/jfet/*: Added parallel multiplier and
|
||||
|
|
|
|||
19
DEVICES
19
DEVICES
|
|
@ -185,8 +185,23 @@ JFET - Junction Field Effect transistor
|
|||
- Parallel multiplier
|
||||
- Instance temperature as difference for circuit temperature
|
||||
|
||||
JFET2 - Jfet PS model
|
||||
Initial release. TO BE TESTED
|
||||
JFET2 - Junction Field Effect Transistor (PS model)
|
||||
Initial Release.
|
||||
Ver: N/A
|
||||
Class: J
|
||||
Level: 2
|
||||
Status:
|
||||
|
||||
This is the Parker Skellern model.
|
||||
|
||||
Web Site:
|
||||
http://www.elec.mq.edu.au/cnerf/models/psmodel/
|
||||
|
||||
Enhancements over the original model:
|
||||
|
||||
- Parallel multiplier
|
||||
- Instance temperature as difference for circuit temperature
|
||||
|
||||
|
||||
***************************************************************************
|
||||
*************************** HFET devices ***************************
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ Modified to add PS model and new parameter definitions ( Anthony E. Parker )
|
|||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "ifsim.h"
|
||||
#include "devdefs.h"
|
||||
#include "jfet2defs.h"
|
||||
|
|
@ -20,9 +19,11 @@ IFparm JFET2pTable[] = { /* device parameters */
|
|||
IOPU("off", JFET2_OFF, IF_FLAG, "Device initially off"),
|
||||
IOPAU("ic", JFET2_IC, IF_REALVEC,"Initial VDS,VGS vector"),
|
||||
IOPU("area", JFET2_AREA, IF_REAL, "Area factor"),
|
||||
IOPU("m", JFET2_M, IF_REAL, "Parallel Multiplier"),
|
||||
IOPAU("ic-vds", JFET2_IC_VDS, IF_REAL, "Initial D-S voltage"),
|
||||
IOPAU("ic-vgs", JFET2_IC_VGS, IF_REAL, "Initial G-S volrage"),
|
||||
IOPU("temp", JFET2_TEMP, IF_REAL, "Instance temperature"),
|
||||
IOPU("dtemp", JFET2_DTEMP, IF_REAL, "Instance temperature difference"),
|
||||
OPU("drain-node", JFET2_DRAINNODE, IF_INTEGER,"Number of drain node"),
|
||||
OPU("gate-node", JFET2_GATENODE, IF_INTEGER,"Number of gate node"),
|
||||
OPU("source-node", JFET2_SOURCENODE, IF_INTEGER,"Number of source node"),
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ Modified to add PS model and new parameter definitions ( Anthony E. Parker )
|
|||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "cktdefs.h"
|
||||
#include "jfet2defs.h"
|
||||
#include "sperror.h"
|
||||
|
|
@ -17,9 +16,7 @@ Modified to add PS model and new parameter definitions ( Anthony E. Parker )
|
|||
#include "suffix.h"
|
||||
|
||||
int
|
||||
JFET2acLoad(inModel,ckt)
|
||||
GENmodel *inModel;
|
||||
CKTcircuit *ckt;
|
||||
JFET2acLoad(GENmodel *inModel, CKTcircuit *ckt)
|
||||
{
|
||||
JFET2model *model = (JFET2model*)inModel;
|
||||
JFET2instance *here;
|
||||
|
|
@ -33,10 +30,13 @@ JFET2acLoad(inModel,ckt)
|
|||
double xgd;
|
||||
double xgm, xgds, vgd, vgs, cd;
|
||||
|
||||
double m;
|
||||
|
||||
for( ; model != NULL; model = model->JFET2nextModel ) {
|
||||
|
||||
for( here = model->JFET2instances; here != NULL;
|
||||
here = here->JFET2nextInstance) {
|
||||
|
||||
if (here->JFET2owner != ARCHme) continue;
|
||||
|
||||
gdpr=model->JFET2drainConduct * here->JFET2area;
|
||||
|
|
@ -54,35 +54,38 @@ JFET2acLoad(inModel,ckt)
|
|||
PSacload(ckt,model, here, vgs, vgd, cd, ckt->CKTomega,
|
||||
&gm, &xgm, &gds, &xgds);
|
||||
xgds += *(ckt->CKTstate0 + here->JFET2qds) * ckt->CKTomega ;
|
||||
*(here->JFET2drainPrimeDrainPrimePtr +1) += xgds;
|
||||
*(here->JFET2sourcePrimeSourcePrimePtr +1) += xgds+xgm;
|
||||
*(here->JFET2drainPrimeGatePtr +1) += xgm;
|
||||
*(here->JFET2drainPrimeSourcePrimePtr +1) -= xgds+xgm;
|
||||
*(here->JFET2sourcePrimeGatePtr +1) -= xgm;
|
||||
*(here->JFET2sourcePrimeDrainPrimePtr +1) -= xgds;
|
||||
|
||||
*(here->JFET2drainDrainPtr ) += gdpr;
|
||||
*(here->JFET2gateGatePtr ) += ggd+ggs;
|
||||
*(here->JFET2gateGatePtr +1) += xgd+xgs;
|
||||
*(here->JFET2sourceSourcePtr ) += gspr;
|
||||
*(here->JFET2drainPrimeDrainPrimePtr ) += gdpr+gds+ggd;
|
||||
*(here->JFET2drainPrimeDrainPrimePtr +1) += xgd;
|
||||
*(here->JFET2sourcePrimeSourcePrimePtr ) += gspr+gds+gm+ggs;
|
||||
*(here->JFET2sourcePrimeSourcePrimePtr +1) += xgs;
|
||||
*(here->JFET2drainDrainPrimePtr ) -= gdpr;
|
||||
*(here->JFET2gateDrainPrimePtr ) -= ggd;
|
||||
*(here->JFET2gateDrainPrimePtr +1) -= xgd;
|
||||
*(here->JFET2gateSourcePrimePtr ) -= ggs;
|
||||
*(here->JFET2gateSourcePrimePtr +1) -= xgs;
|
||||
*(here->JFET2sourceSourcePrimePtr ) -= gspr;
|
||||
*(here->JFET2drainPrimeDrainPtr ) -= gdpr;
|
||||
*(here->JFET2drainPrimeGatePtr ) += (-ggd+gm);
|
||||
*(here->JFET2drainPrimeGatePtr +1) -= xgd;
|
||||
*(here->JFET2drainPrimeSourcePrimePtr ) += (-gds-gm);
|
||||
*(here->JFET2sourcePrimeGatePtr ) += (-ggs-gm);
|
||||
*(here->JFET2sourcePrimeGatePtr +1) -= xgs;
|
||||
*(here->JFET2sourcePrimeSourcePtr ) -= gspr;
|
||||
*(here->JFET2sourcePrimeDrainPrimePtr ) -= gds;
|
||||
m = here->JFET2m;
|
||||
|
||||
*(here->JFET2drainPrimeDrainPrimePtr +1) += m * (xgds);
|
||||
*(here->JFET2sourcePrimeSourcePrimePtr +1) += m * (xgds+xgm);
|
||||
*(here->JFET2drainPrimeGatePtr +1) += m * (xgm);
|
||||
*(here->JFET2drainPrimeSourcePrimePtr +1) -= m * (xgds+xgm);
|
||||
*(here->JFET2sourcePrimeGatePtr +1) -= m * (xgm);
|
||||
*(here->JFET2sourcePrimeDrainPrimePtr +1) -= m * (xgds);
|
||||
|
||||
*(here->JFET2drainDrainPtr ) += m * (gdpr);
|
||||
*(here->JFET2gateGatePtr ) += m * (ggd+ggs);
|
||||
*(here->JFET2gateGatePtr +1) += m * (xgd+xgs);
|
||||
*(here->JFET2sourceSourcePtr ) += m * (gspr);
|
||||
*(here->JFET2drainPrimeDrainPrimePtr ) += m * (gdpr+gds+ggd);
|
||||
*(here->JFET2drainPrimeDrainPrimePtr +1) += m * (xgd);
|
||||
*(here->JFET2sourcePrimeSourcePrimePtr ) += m * (gspr+gds+gm+ggs);
|
||||
*(here->JFET2sourcePrimeSourcePrimePtr +1) += m * (xgs);
|
||||
*(here->JFET2drainDrainPrimePtr ) -= m * (gdpr);
|
||||
*(here->JFET2gateDrainPrimePtr ) -= m * (ggd);
|
||||
*(here->JFET2gateDrainPrimePtr +1) -= m * (xgd);
|
||||
*(here->JFET2gateSourcePrimePtr ) -= m * (ggs);
|
||||
*(here->JFET2gateSourcePrimePtr +1) -= m * (xgs);
|
||||
*(here->JFET2sourceSourcePrimePtr ) -= m * (gspr);
|
||||
*(here->JFET2drainPrimeDrainPtr ) -= m * (gdpr);
|
||||
*(here->JFET2drainPrimeGatePtr ) += m * (-ggd+gm);
|
||||
*(here->JFET2drainPrimeGatePtr +1) -= m * (xgd);
|
||||
*(here->JFET2drainPrimeSourcePrimePtr ) += m * (-gds-gm);
|
||||
*(here->JFET2sourcePrimeGatePtr ) += m * (-ggs-gm);
|
||||
*(here->JFET2sourcePrimeGatePtr +1) -= m * (xgs);
|
||||
*(here->JFET2sourcePrimeSourcePtr ) -= m * (gspr);
|
||||
*(here->JFET2sourcePrimeDrainPrimePtr ) -= m * (gds);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ Modified to add PS model and new parameter definitions ( Anthony E. Parker )
|
|||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "const.h"
|
||||
#include "ifsim.h"
|
||||
#include "cktdefs.h"
|
||||
|
|
@ -21,12 +20,8 @@ Modified to add PS model and new parameter definitions ( Anthony E. Parker )
|
|||
|
||||
/*ARGSUSED*/
|
||||
int
|
||||
JFET2ask(ckt,inst,which,value,select)
|
||||
CKTcircuit *ckt;
|
||||
GENinstance *inst;
|
||||
int which;
|
||||
IFvalue *value;
|
||||
IFvalue *select;
|
||||
JFET2ask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value,
|
||||
IFvalue *select)
|
||||
{
|
||||
JFET2instance *here = (JFET2instance*)inst;
|
||||
static char *msg = "Current and power not available for ac analysis";
|
||||
|
|
@ -34,8 +29,15 @@ JFET2ask(ckt,inst,which,value,select)
|
|||
case JFET2_TEMP:
|
||||
value->rValue = here->JFET2temp-CONSTCtoK;
|
||||
return(OK);
|
||||
case JFET2_DTEMP:
|
||||
value->rValue = here->JFET2dtemp;
|
||||
return(OK);
|
||||
case JFET2_AREA:
|
||||
value->rValue = here->JFET2area;
|
||||
value->rValue *=here->JFET2m;
|
||||
return(OK);
|
||||
case JFET2_M:
|
||||
value->rValue = here->JFET2m;
|
||||
return(OK);
|
||||
case JFET2_IC_VDS:
|
||||
value->rValue = here->JFET2icVDS;
|
||||
|
|
@ -69,36 +71,47 @@ JFET2ask(ckt,inst,which,value,select)
|
|||
return(OK);
|
||||
case JFET2_CG:
|
||||
value->rValue = *(ckt->CKTstate0 + here->JFET2cg);
|
||||
value->rValue *=here->JFET2m;
|
||||
return(OK);
|
||||
case JFET2_CD:
|
||||
value->rValue = *(ckt->CKTstate0 + here->JFET2cd);
|
||||
value->rValue *=here->JFET2m;
|
||||
return(OK);
|
||||
case JFET2_CGD:
|
||||
value->rValue = *(ckt->CKTstate0 + here->JFET2cgd);
|
||||
value->rValue *=here->JFET2m;
|
||||
return(OK);
|
||||
case JFET2_GM:
|
||||
value->rValue = *(ckt->CKTstate0 + here->JFET2gm);
|
||||
value->rValue *=here->JFET2m;
|
||||
return(OK);
|
||||
case JFET2_GDS:
|
||||
value->rValue = *(ckt->CKTstate0 + here->JFET2gds);
|
||||
value->rValue *=here->JFET2m;
|
||||
return(OK);
|
||||
case JFET2_GGS:
|
||||
value->rValue = *(ckt->CKTstate0 + here->JFET2ggs);
|
||||
value->rValue *=here->JFET2m;
|
||||
return(OK);
|
||||
case JFET2_GGD:
|
||||
value->rValue = *(ckt->CKTstate0 + here->JFET2ggd);
|
||||
value->rValue *=here->JFET2m;
|
||||
return(OK);
|
||||
case JFET2_QGS:
|
||||
value->rValue = *(ckt->CKTstate0 + here->JFET2qgs);
|
||||
value->rValue *=here->JFET2m;
|
||||
return(OK);
|
||||
case JFET2_CQGS:
|
||||
value->rValue = *(ckt->CKTstate0 + here->JFET2cqgs);
|
||||
value->rValue *=here->JFET2m;
|
||||
return(OK);
|
||||
case JFET2_QGD:
|
||||
value->rValue = *(ckt->CKTstate0 + here->JFET2qgd);
|
||||
value->rValue *=here->JFET2m;
|
||||
return(OK);
|
||||
case JFET2_CQGD:
|
||||
value->rValue = *(ckt->CKTstate0 + here->JFET2cqgd);
|
||||
value->rValue *=here->JFET2m;
|
||||
return(OK);
|
||||
case JFET2_VTRAP:
|
||||
value->rValue = *(ckt->CKTstate0 + here->JFET2vtrap);
|
||||
|
|
@ -115,6 +128,7 @@ JFET2ask(ckt,inst,which,value,select)
|
|||
} else {
|
||||
value->rValue = -*(ckt->CKTstate0 + here->JFET2cd);
|
||||
value->rValue -= *(ckt->CKTstate0 + here->JFET2cg);
|
||||
value->rValue *=here->JFET2m;
|
||||
}
|
||||
return(OK);
|
||||
case JFET2_POWER :
|
||||
|
|
@ -131,6 +145,8 @@ JFET2ask(ckt,inst,which,value,select)
|
|||
value->rValue -= (*(ckt->CKTstate0 + here->JFET2cd) +
|
||||
*(ckt->CKTstate0 + here->JFET2cg)) *
|
||||
*(ckt->CKTrhsOld + here->JFET2sourceNode);
|
||||
|
||||
value->rValue *=here->JFET2m;
|
||||
}
|
||||
return(OK);
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -132,15 +132,19 @@ typedef struct sJFET2instance {
|
|||
|
||||
unsigned JFET2off :1; /* 'off' flag for jfet */
|
||||
unsigned JFET2areaGiven : 1; /* flag to indicate area was specified */
|
||||
unsigned JFET2mGiven : 1; /* flag to indicate multiplier given */
|
||||
unsigned JFET2icVDSGiven : 1; /* initial condition given flag for V D-S*/
|
||||
unsigned JFET2icVGSGiven : 1; /* initial condition given flag for V G-S*/
|
||||
unsigned JFET2tempGiven : 1; /* flag to indicate instance temp given */
|
||||
unsigned JFET2dtempGiven : 1; /* flag to indicate temperature difference given */
|
||||
|
||||
|
||||
double JFET2area; /* area factor for the jfet */
|
||||
double JFET2m; /* parallel multiplier for the diode */
|
||||
double JFET2icVDS; /* initial condition voltage D-S*/
|
||||
double JFET2icVGS; /* initial condition voltage G-S*/
|
||||
double JFET2temp; /* operating temperature */
|
||||
double JFET2dtemp; /* Instance temperature difference */
|
||||
double JFET2tSatCur; /* temperature adjusted saturation current */
|
||||
double JFET2tGatePot; /* temperature adjusted gate potential */
|
||||
double JFET2tCGS; /* temperature corrected G-S capacitance */
|
||||
|
|
@ -215,6 +219,8 @@ typedef struct sJFET2model { /* model structure for a jfet */
|
|||
#define JFET2_IC 4
|
||||
#define JFET2_OFF 5
|
||||
#define JFET2_TEMP 6
|
||||
#define JFET2_DTEMP 7
|
||||
#define JFET2_M 8
|
||||
|
||||
/* device questions */
|
||||
#define JFET2_DRAINNODE 301
|
||||
|
|
|
|||
|
|
@ -8,17 +8,13 @@ Modified to jfet2 for PS model definition ( Anthony E. Parker )
|
|||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "jfet2defs.h"
|
||||
#include "sperror.h"
|
||||
#include "suffix.h"
|
||||
|
||||
|
||||
int
|
||||
JFET2delete(inModel,name,inst)
|
||||
GENmodel *inModel;
|
||||
IFuid name;
|
||||
GENinstance **inst;
|
||||
JFET2delete(GENmodel *inModel, IFuid name, GENinstance **inst)
|
||||
{
|
||||
JFET2model *model = (JFET2model*)inModel;
|
||||
JFET2instance **fast = (JFET2instance**)inst;
|
||||
|
|
|
|||
|
|
@ -10,14 +10,12 @@ Modified to jfet2 for PS model definition ( Anthony E. Parker )
|
|||
*/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "jfet2defs.h"
|
||||
#include "suffix.h"
|
||||
|
||||
|
||||
void
|
||||
JFET2destroy(inModel)
|
||||
GENmodel **inModel;
|
||||
JFET2destroy(GENmodel **inModel)
|
||||
{
|
||||
JFET2model **model = (JFET2model**)inModel;
|
||||
JFET2instance *here;
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ Modified to add PS model and new parameter definitions ( Anthony E. Parker )
|
|||
Copyright 1994 Macquarie University, Sydney Australia.
|
||||
**********/
|
||||
|
||||
#ifdef __STDC__
|
||||
extern int JFET2acLoad(GENmodel*,CKTcircuit*);
|
||||
extern int JFET2ask(CKTcircuit*,GENinstance*,int,IFvalue*,IFvalue*);
|
||||
extern int JFET2delete(GENmodel*,IFuid,GENinstance**);
|
||||
|
|
@ -23,21 +22,3 @@ extern int JFET2unsetup(GENmodel*,CKTcircuit*);
|
|||
extern int JFET2temp(GENmodel*,CKTcircuit*);
|
||||
extern int JFET2trunc(GENmodel*,CKTcircuit*,double*);
|
||||
extern int JFET2noise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*);
|
||||
|
||||
#else /* stdc */
|
||||
extern int JFET2acLoad();
|
||||
extern int JFET2ask();
|
||||
extern int JFET2delete();
|
||||
extern void JFET2destroy();
|
||||
extern int JFET2getic();
|
||||
extern int JFET2load();
|
||||
extern int JFET2mAsk();
|
||||
extern int JFET2mDelete();
|
||||
extern int JFET2mParam();
|
||||
extern int JFET2param();
|
||||
extern int JFET2setup();
|
||||
extern int JFET2unsetup();
|
||||
extern int JFET2temp();
|
||||
extern int JFET2trunc();
|
||||
extern int JFET2noise();
|
||||
#endif /* stdc */
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ Modified to jfet2 for PS model definition ( Anthony E. Parker )
|
|||
*/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "cktdefs.h"
|
||||
#include "jfet2defs.h"
|
||||
#include "sperror.h"
|
||||
|
|
@ -18,9 +17,7 @@ Modified to jfet2 for PS model definition ( Anthony E. Parker )
|
|||
|
||||
|
||||
int
|
||||
JFET2getic(inModel,ckt)
|
||||
GENmodel *inModel;
|
||||
CKTcircuit *ckt;
|
||||
JFET2getic(GENmodel *inModel, CKTcircuit *ckt)
|
||||
{
|
||||
JFET2model *model = (JFET2model*)inModel;
|
||||
JFET2instance *here;
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ Modified to add PS model and new parameter definitions ( Anthony E. Parker )
|
|||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "cktdefs.h"
|
||||
#include "jfet2defs.h"
|
||||
#include "const.h"
|
||||
|
|
@ -20,9 +19,7 @@ Modified to add PS model and new parameter definitions ( Anthony E. Parker )
|
|||
#include "suffix.h"
|
||||
|
||||
int
|
||||
JFET2load(inModel,ckt)
|
||||
GENmodel *inModel;
|
||||
CKTcircuit *ckt;
|
||||
JFET2load(GENmodel *inModel, CKTcircuit *ckt)
|
||||
/* actually load the current resistance value into the
|
||||
* sparse matrix previously provided
|
||||
*/
|
||||
|
|
@ -58,6 +55,8 @@ JFET2load(inModel,ckt)
|
|||
int ichk1;
|
||||
int error;
|
||||
|
||||
double m;
|
||||
|
||||
/* loop through all the models */
|
||||
for( ; model != NULL; model = model->JFET2nextModel ) {
|
||||
|
||||
|
|
@ -293,32 +292,35 @@ JFET2load(inModel,ckt)
|
|||
* load current vector
|
||||
*/
|
||||
load:
|
||||
|
||||
m = here->JFET2m;
|
||||
|
||||
ceqgd=model->JFET2type*(cgd-ggd*vgd);
|
||||
ceqgs=model->JFET2type*((cg-cgd)-ggs*vgs);
|
||||
cdreq=model->JFET2type*((cd+cgd)-gds*vds-gm*vgs);
|
||||
*(ckt->CKTrhs + here->JFET2gateNode) += (-ceqgs-ceqgd);
|
||||
*(ckt->CKTrhs + here->JFET2gateNode) += m * (-ceqgs-ceqgd);
|
||||
*(ckt->CKTrhs + here->JFET2drainPrimeNode) +=
|
||||
(-cdreq+ceqgd);
|
||||
m * (-cdreq+ceqgd);
|
||||
*(ckt->CKTrhs + here->JFET2sourcePrimeNode) +=
|
||||
(cdreq+ceqgs);
|
||||
m * (cdreq+ceqgs);
|
||||
/*
|
||||
* load y matrix
|
||||
*/
|
||||
*(here->JFET2drainDrainPrimePtr) += (-gdpr);
|
||||
*(here->JFET2gateDrainPrimePtr) += (-ggd);
|
||||
*(here->JFET2gateSourcePrimePtr) += (-ggs);
|
||||
*(here->JFET2sourceSourcePrimePtr) += (-gspr);
|
||||
*(here->JFET2drainPrimeDrainPtr) += (-gdpr);
|
||||
*(here->JFET2drainPrimeGatePtr) += (gm-ggd);
|
||||
*(here->JFET2drainPrimeSourcePrimePtr) += (-gds-gm);
|
||||
*(here->JFET2sourcePrimeGatePtr) += (-ggs-gm);
|
||||
*(here->JFET2sourcePrimeSourcePtr) += (-gspr);
|
||||
*(here->JFET2sourcePrimeDrainPrimePtr) += (-gds);
|
||||
*(here->JFET2drainDrainPtr) += (gdpr);
|
||||
*(here->JFET2gateGatePtr) += (ggd+ggs);
|
||||
*(here->JFET2sourceSourcePtr) += (gspr);
|
||||
*(here->JFET2drainPrimeDrainPrimePtr) += (gdpr+gds+ggd);
|
||||
*(here->JFET2sourcePrimeSourcePrimePtr) += (gspr+gds+gm+ggs);
|
||||
*(here->JFET2drainDrainPrimePtr) += m * (-gdpr);
|
||||
*(here->JFET2gateDrainPrimePtr) += m * (-ggd);
|
||||
*(here->JFET2gateSourcePrimePtr) += m * (-ggs);
|
||||
*(here->JFET2sourceSourcePrimePtr) += m * (-gspr);
|
||||
*(here->JFET2drainPrimeDrainPtr) += m * (-gdpr);
|
||||
*(here->JFET2drainPrimeGatePtr) += m * (gm-ggd);
|
||||
*(here->JFET2drainPrimeSourcePrimePtr) += m * (-gds-gm);
|
||||
*(here->JFET2sourcePrimeGatePtr) += m * (-ggs-gm);
|
||||
*(here->JFET2sourcePrimeSourcePtr) += m * (-gspr);
|
||||
*(here->JFET2sourcePrimeDrainPrimePtr) += m * (-gds);
|
||||
*(here->JFET2drainDrainPtr) += m * (gdpr);
|
||||
*(here->JFET2gateGatePtr) += m * (ggd+ggs);
|
||||
*(here->JFET2sourceSourcePtr) += m * (gspr);
|
||||
*(here->JFET2drainPrimeDrainPrimePtr) += m * (gdpr+gds+ggd);
|
||||
*(here->JFET2sourcePrimeSourcePrimePtr) += m * (gspr+gds+gm+ggs);
|
||||
}
|
||||
}
|
||||
return(OK);
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ Modified to add PS model and new parameter definitions ( Anthony E. Parker )
|
|||
*/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "const.h"
|
||||
#include "ifsim.h"
|
||||
#include "cktdefs.h"
|
||||
|
|
@ -23,11 +22,7 @@ Modified to add PS model and new parameter definitions ( Anthony E. Parker )
|
|||
|
||||
/*ARGSUSED*/
|
||||
int
|
||||
JFET2mAsk(ckt,inModel,which,value)
|
||||
CKTcircuit *ckt;
|
||||
GENmodel *inModel;
|
||||
int which;
|
||||
IFvalue *value;
|
||||
JFET2mAsk(CKTcircuit *ckt, GENmodel *inModel, int which, IFvalue *value)
|
||||
{
|
||||
JFET2model *model = (JFET2model*)inModel;
|
||||
switch(which) {
|
||||
|
|
|
|||
|
|
@ -10,17 +10,13 @@ Modified to jfet2 for PS model definition ( Anthony E. Parker )
|
|||
*/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "jfet2defs.h"
|
||||
#include "sperror.h"
|
||||
#include "suffix.h"
|
||||
|
||||
|
||||
int
|
||||
JFET2mDelete(inModel,modname,kill)
|
||||
GENmodel **inModel;
|
||||
IFuid modname;
|
||||
GENmodel *kill;
|
||||
JFET2mDelete(GENmodel **inModel, IFuid modname, GENmodel *kill)
|
||||
{
|
||||
JFET2model **model = (JFET2model**)inModel;
|
||||
JFET2model *modfast = (JFET2model*)kill;
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ Modified to add PS model and new parameter definitions ( Anthony E. Parker )
|
|||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "const.h"
|
||||
#include "ifsim.h"
|
||||
#include "jfet2defs.h"
|
||||
|
|
@ -18,10 +17,7 @@ Modified to add PS model and new parameter definitions ( Anthony E. Parker )
|
|||
|
||||
|
||||
int
|
||||
JFET2mParam(param,value,inModels)
|
||||
int param;
|
||||
IFvalue *value;
|
||||
GENmodel *inModels;
|
||||
JFET2mParam(int param, IFvalue *value, GENmodel *inModels)
|
||||
{
|
||||
JFET2model *model = (JFET2model*)inModels;
|
||||
switch(param) {
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ Modified to jfet2 for PS model definition ( Anthony E. Parker )
|
|||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "jfet2defs.h"
|
||||
#include "cktdefs.h"
|
||||
#include "iferrmsg.h"
|
||||
|
|
@ -28,13 +27,7 @@ extern void NevalSrc();
|
|||
extern double Nintegrate();
|
||||
|
||||
int
|
||||
JFET2noise (mode, operation, genmodel, ckt, data, OnDens)
|
||||
int mode;
|
||||
int operation;
|
||||
GENmodel *genmodel;
|
||||
CKTcircuit *ckt;
|
||||
Ndata *data;
|
||||
double *OnDens;
|
||||
JFET2noise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt, Ndata *data, double *OnDens)
|
||||
{
|
||||
JFET2model *firstModel = (JFET2model *) genmodel;
|
||||
JFET2model *model;
|
||||
|
|
@ -123,21 +116,22 @@ if (!data->namelist) return(E_NOMEM);
|
|||
case N_DENS:
|
||||
NevalSrc(&noizDens[JFET2RDNOIZ],&lnNdens[JFET2RDNOIZ],
|
||||
ckt,THERMNOISE,inst->JFET2drainPrimeNode,inst->JFET2drainNode,
|
||||
model->JFET2drainConduct * inst->JFET2area);
|
||||
model->JFET2drainConduct * inst->JFET2area * inst->JFET2m);
|
||||
|
||||
NevalSrc(&noizDens[JFET2RSNOIZ],&lnNdens[JFET2RSNOIZ],
|
||||
ckt,THERMNOISE,inst->JFET2sourcePrimeNode,
|
||||
inst->JFET2sourceNode,model->JFET2sourceConduct*inst->JFET2area);
|
||||
inst->JFET2sourceNode,model->JFET2sourceConduct
|
||||
* inst->JFET2area * inst->JFET2m);
|
||||
|
||||
NevalSrc(&noizDens[JFET2IDNOIZ],&lnNdens[JFET2IDNOIZ],
|
||||
ckt,THERMNOISE,inst->JFET2drainPrimeNode,
|
||||
inst->JFET2sourcePrimeNode,
|
||||
(2.0/3.0 * fabs(*(ckt->CKTstate0 + inst->JFET2gm))));
|
||||
(2.0/3.0 * inst->JFET2m * fabs(*(ckt->CKTstate0 + inst->JFET2gm))));
|
||||
|
||||
NevalSrc(&noizDens[JFET2FLNOIZ],(double*)NULL,ckt,
|
||||
N_GAIN,inst->JFET2drainPrimeNode,
|
||||
inst->JFET2sourcePrimeNode, (double)0.0);
|
||||
noizDens[JFET2FLNOIZ] *= model->JFET2fNcoef *
|
||||
noizDens[JFET2FLNOIZ] *= inst->JFET2m * model->JFET2fNcoef *
|
||||
exp(model->JFET2fNexp *
|
||||
log(MAX(fabs(*(ckt->CKTstate0 + inst->JFET2cd)),N_MINLOG))) /
|
||||
data->freq;
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ Modified to jfet2 for PS model definition ( Anthony E. Parker )
|
|||
*/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "const.h"
|
||||
#include "ifsim.h"
|
||||
#include "jfet2defs.h"
|
||||
|
|
@ -20,11 +19,7 @@ Modified to jfet2 for PS model definition ( Anthony E. Parker )
|
|||
|
||||
/* ARGSUSED */
|
||||
int
|
||||
JFET2param(param,value,inst,select)
|
||||
int param;
|
||||
IFvalue *value;
|
||||
GENinstance *inst;
|
||||
IFvalue *select;
|
||||
JFET2param(int param, IFvalue *value, GENinstance *inst, IFvalue *select)
|
||||
{
|
||||
JFET2instance *here = (JFET2instance *)inst;
|
||||
switch(param) {
|
||||
|
|
@ -32,10 +27,18 @@ JFET2param(param,value,inst,select)
|
|||
here->JFET2temp = value->rValue+CONSTCtoK;
|
||||
here->JFET2tempGiven = TRUE;
|
||||
break;
|
||||
case JFET2_DTEMP:
|
||||
here->JFET2temp = value->rValue;
|
||||
here->JFET2tempGiven = TRUE;
|
||||
break;
|
||||
case JFET2_AREA:
|
||||
here->JFET2area = value->rValue;
|
||||
here->JFET2areaGiven = TRUE;
|
||||
break;
|
||||
case JFET2_M:
|
||||
here->JFET2m = value->rValue;
|
||||
here->JFET2mGiven = TRUE;
|
||||
break;
|
||||
case JFET2_IC_VDS:
|
||||
here->JFET2icVDS = value->rValue;
|
||||
here->JFET2icVDSGiven = TRUE;
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ Modified to add PS model and new parameter definitions ( Anthony E. Parker )
|
|||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "smpdefs.h"
|
||||
#include "cktdefs.h"
|
||||
#include "jfet2defs.h"
|
||||
|
|
@ -18,11 +17,7 @@ Modified to add PS model and new parameter definitions ( Anthony E. Parker )
|
|||
#include "suffix.h"
|
||||
|
||||
int
|
||||
JFET2setup(matrix,inModel,ckt,states)
|
||||
SMPmatrix *matrix;
|
||||
GENmodel *inModel;
|
||||
CKTcircuit *ckt;
|
||||
int *states;
|
||||
JFET2setup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
|
||||
/* load the diode structure with those pointers needed later
|
||||
* for fast matrix loading
|
||||
*/
|
||||
|
|
@ -50,6 +45,11 @@ JFET2setup(matrix,inModel,ckt,states)
|
|||
if(!here->JFET2areaGiven) {
|
||||
here->JFET2area = 1;
|
||||
}
|
||||
|
||||
if(!here->JFET2mGiven) {
|
||||
here->JFET2m = 1;
|
||||
}
|
||||
|
||||
here->JFET2state = *states;
|
||||
*states += JFET2_STATE_COUNT + 1;
|
||||
|
||||
|
|
@ -58,6 +58,19 @@ matrixpointers2:
|
|||
error = CKTmkVolt(ckt,&tmp,here->JFET2name,"source");
|
||||
if(error) return(error);
|
||||
here->JFET2sourcePrimeNode = tmp->number;
|
||||
|
||||
if (ckt->CKTcopyNodesets) {
|
||||
CKTnode *tmpNode;
|
||||
IFuid tmpName;
|
||||
|
||||
if (CKTinst2Node(ckt,here,3,&tmpNode,&tmpName)==OK) {
|
||||
if (tmpNode->nsGiven) {
|
||||
tmp->nodeset=tmpNode->nodeset;
|
||||
tmp->nsGiven=tmpNode->nsGiven;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
here->JFET2sourcePrimeNode = here->JFET2sourceNode;
|
||||
}
|
||||
|
|
@ -65,6 +78,19 @@ matrixpointers2:
|
|||
error = CKTmkVolt(ckt,&tmp,here->JFET2name,"drain");
|
||||
if(error) return(error);
|
||||
here->JFET2drainPrimeNode = tmp->number;
|
||||
|
||||
if (ckt->CKTcopyNodesets) {
|
||||
CKTnode *tmpNode;
|
||||
IFuid tmpName;
|
||||
|
||||
if (CKTinst2Node(ckt,here,1,&tmpNode,&tmpName)==OK) {
|
||||
if (tmpNode->nsGiven) {
|
||||
tmp->nodeset=tmpNode->nodeset;
|
||||
tmp->nsGiven=tmpNode->nsGiven;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
here->JFET2drainPrimeNode = here->JFET2drainNode;
|
||||
}
|
||||
|
|
@ -102,9 +128,7 @@ if((here->ptr = SMPmakeElt(matrix,here->first,here->second))==(double *)NULL){\
|
|||
}
|
||||
|
||||
int
|
||||
JFET2unsetup(inModel,ckt)
|
||||
GENmodel *inModel;
|
||||
CKTcircuit *ckt;
|
||||
JFET2unsetup(GENmodel *inModel, CKTcircuit *ckt)
|
||||
{
|
||||
JFET2model *model;
|
||||
JFET2instance *here;
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ Modified to add PS model and new parameter definitions ( Anthony E. Parker )
|
|||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "smpdefs.h"
|
||||
#include "cktdefs.h"
|
||||
#include "jfet2defs.h"
|
||||
|
|
@ -21,9 +20,7 @@ Modified to add PS model and new parameter definitions ( Anthony E. Parker )
|
|||
#include "suffix.h"
|
||||
|
||||
int
|
||||
JFET2temp(inModel,ckt)
|
||||
GENmodel *inModel;
|
||||
CKTcircuit *ckt;
|
||||
JFET2temp(GENmodel *inModel, CKTcircuit *ckt)
|
||||
/* Pre-process the model parameters after a possible change
|
||||
*/
|
||||
{
|
||||
|
|
@ -83,9 +80,17 @@ JFET2temp(inModel,ckt)
|
|||
/* loop through all the instances of the model */
|
||||
for (here = model->JFET2instances; here != NULL ;
|
||||
here=here->JFET2nextInstance) {
|
||||
if(!(here->JFET2tempGiven)) {
|
||||
here->JFET2temp = ckt->CKTtemp;
|
||||
|
||||
if (here->JFET2owner != ARCHme) continue;
|
||||
|
||||
if(!(here->JFET2dtempGiven)) {
|
||||
here->JFET2dtemp = 0.0;
|
||||
}
|
||||
|
||||
if(!(here->JFET2tempGiven)) {
|
||||
here->JFET2temp = ckt->CKTtemp + here->JFET2dtemp;
|
||||
}
|
||||
|
||||
vt = here->JFET2temp * CONSTKoverQ;
|
||||
fact2 = here->JFET2temp/REFTEMP;
|
||||
ratio1 = here->JFET2temp/model->JFET2tnom -1;
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ Modified to jfet2 for PS model definition ( Anthony E. Parker )
|
|||
*/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "cktdefs.h"
|
||||
#include "jfet2defs.h"
|
||||
#include "sperror.h"
|
||||
|
|
@ -18,10 +17,7 @@ Modified to jfet2 for PS model definition ( Anthony E. Parker )
|
|||
|
||||
|
||||
int
|
||||
JFET2trunc(inModel,ckt,timeStep)
|
||||
GENmodel *inModel;
|
||||
CKTcircuit *ckt;
|
||||
double *timeStep;
|
||||
JFET2trunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep)
|
||||
{
|
||||
JFET2model *model = (JFET2model*)inModel;
|
||||
JFET2instance *here;
|
||||
|
|
|
|||
Loading…
Reference in New Issue