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