1 /********** 2 Copyright 1991 Regents of the University of California. All rights reserved. 3 Authors: 1987 Karti Mayaram, 1991 David Gates 4 **********/ 5 6 #ifndef NBJT_H 7 #define NBJT_H 8 9 /* data structures used to describe 1D Numerical BJTs */ 10 11 /* circuit level includes */ 12 #include "ngspice/ifsim.h" 13 #include "ngspice/cktdefs.h" 14 #include "ngspice/gendefs.h" 15 16 /* device level includes */ 17 #include "ngspice/onemesh.h" 18 #include "ngspice/onedev.h" 19 #include "ngspice/profile.h" 20 #include "ngspice/numglobs.h" 21 #include "ngspice/carddefs.h" 22 23 /* information needed per instance */ 24 typedef struct sNBJTinstance { 25 26 struct GENinstance gen; 27 28 #define NBJTmodPtr(inst) ((struct sNBJTmodel *)((inst)->gen.GENmodPtr)) 29 #define NBJTnextInstance(inst) ((struct sNBJTinstance *)((inst)->gen.GENnextInstance)) 30 #define NBJTname gen.GENname 31 #define NBJTstate gen.GENstate 32 33 #define NBJTvbe NBJTstate 34 #define NBJTvce NBJTstate+1 35 #define NBJTic NBJTstate+2 36 #define NBJTie NBJTstate+3 37 #define NBJTdIeDVce NBJTstate+4 38 #define NBJTdIeDVbe NBJTstate+5 39 #define NBJTdIcDVce NBJTstate+6 40 #define NBJTdIcDVbe NBJTstate+7 41 #define NBJTnumStates 8 42 43 const int NBJTcolNode; /* number of collector node of bjt */ 44 const int NBJTbaseNode; /* number of base node of bjt */ 45 const int NBJTemitNode; /* number of emitter node of bjt */ 46 ONEdevice *NBJTpDevice; 47 GLOBvalues NBJTglobals; /* Temp.-Dep. Global Parameters */ 48 int NBJTtype; 49 double NBJTarea; /* area factor of the BJT */ 50 double NBJTtemp; /* Instance Temperature */ 51 double NBJTc11; /* small-signal capacitance */ 52 double NBJTy11r; /* small-signal admittance, real part */ 53 double NBJTy11i; /* small-signal admittance, imag part */ 54 double NBJTc12; /* small-signal capacitance */ 55 double NBJTy12r; /* small-signal admittance, real part */ 56 double NBJTy12i; /* small-signal admittance, imag part */ 57 double NBJTc21; /* small-signal capacitance */ 58 double NBJTy21r; /* small-signal admittance, real part */ 59 double NBJTy21i; /* small-signal admittance, imag part */ 60 double NBJTc22; /* small-signal capacitance */ 61 double NBJTy22r; /* small-signal admittance, real part */ 62 double NBJTy22i; /* small-signal admittance, imag part */ 63 int NBJTprint; 64 char *NBJTicFile; /* Name of initial condition file */ 65 double *NBJTcolColPtr; /* pointer to sparse matrix at 66 * (collector,collector) */ 67 double *NBJTbaseBasePtr; /* pointer to sparse matrix at (base,base) */ 68 double *NBJTemitEmitPtr; /* pointer to sparse matrix at 69 * (emitter,emitter) */ 70 double *NBJTcolBasePtr; /* pointer to sparse matrix at 71 * (collector,base) */ 72 double *NBJTcolEmitPtr; /* pointer to sparse matrix at 73 * (collector,emitter) */ 74 double *NBJTbaseColPtr; /* pointer to sparse matrix at 75 * (base,collector) */ 76 double *NBJTbaseEmitPtr; /* pointer to sparse matrix at (base,emitter) */ 77 double *NBJTemitColPtr; /* pointer to sparse matrix at 78 * (emitter,collector) */ 79 double *NBJTemitBasePtr; /* pointer to sparse matrix at (emitter,base) */ 80 int NBJToff; /* 'off' flag for bjt */ 81 unsigned NBJTsmSigAvail:1; /* flag to indicate small-signal done */ 82 unsigned NBJTareaGiven:1; /* flag to indicate area was specified */ 83 unsigned NBJTicFileGiven:1; /* flag to indicate init. cond. file given */ 84 unsigned NBJTprintGiven:1; /* flag to indicate if print was given */ 85 unsigned NBJTtempGiven:1; /* flag to indicate if temp was given */ 86 } NBJTinstance; 87 88 /* per model data */ 89 typedef struct sNBJTmodel { /* model structure for a bjt */ 90 91 struct GENmodel gen; 92 93 #define NBJTmodType gen.GENmodType 94 #define NBJTnextModel(inst) ((struct sNBJTmodel *)((inst)->gen.GENnextModel)) 95 #define NBJTinstances(inst) ((NBJTinstance *)((inst)->gen.GENinstances)) 96 #define NBJTmodName gen.GENmodName 97 98 MESHcard *NBJTxMeshes; /* list of xmesh cards */ 99 MESHcard *NBJTyMeshes; /* list of ymesh cards */ 100 DOMNcard *NBJTdomains; /* list of domain cards */ 101 BDRYcard *NBJTboundaries; /* list of boundary cards */ 102 DOPcard *NBJTdopings; /* list of doping cards */ 103 ELCTcard *NBJTelectrodes; /* list of electrode cards */ 104 CONTcard *NBJTcontacts; /* list of contact cards */ 105 MODLcard *NBJTmodels; /* list of model cards */ 106 MATLcard *NBJTmaterials; /* list of material cards */ 107 MOBcard *NBJTmobility; /* list of mobility cards */ 108 METHcard *NBJTmethods; /* list of method cards */ 109 OPTNcard *NBJToptions; /* list of option cards */ 110 OUTPcard *NBJToutputs; /* list of output cards */ 111 ONEtranInfo *NBJTpInfo; /* transient analysis information */ 112 DOPprofile *NBJTprofiles; /* expanded list of doping profiles */ 113 DOPtable *NBJTdopTables; /* list of tables used by profiles */ 114 ONEmaterial *NBJTmatlInfo; /* list of material info structures */ 115 } NBJTmodel; 116 117 /* type of BJT */ 118 #define NPN 1 119 #define PNP -1 120 121 /* device parameters */ 122 enum { 123 NBJT_AREA = 1, 124 NBJT_OFF, 125 NBJT_IC_FILE, 126 NBJT_PRINT, 127 NBJT_TEMP, 128 }; 129 130 enum { 131 NBJT_G11 = 8, 132 NBJT_C11, 133 NBJT_Y11, 134 NBJT_G12, 135 NBJT_C12, 136 NBJT_Y12, 137 NBJT_G13, 138 NBJT_C13, 139 NBJT_Y13, 140 NBJT_G21, 141 NBJT_C21, 142 NBJT_Y21, 143 NBJT_G22, 144 NBJT_C22, 145 NBJT_Y22, 146 NBJT_G23, 147 NBJT_C23, 148 NBJT_Y23, 149 NBJT_G31, 150 NBJT_C31, 151 NBJT_Y31, 152 NBJT_G32, 153 NBJT_C32, 154 NBJT_Y32, 155 NBJT_G33, 156 NBJT_C33, 157 NBJT_Y33, 158 }; 159 160 /* model parameters */ 161 /* NOTE: all true model parameters have been moved to IFcardInfo structures */ 162 #define NBJT_MOD_NBJT 101 163 164 /* device questions */ 165 166 /* model questions */ 167 168 #include "nbjtext.h" 169 170 #endif /* NBJT_H */ 171