1 /***************************************************************************
2 JSPICE3 adaptation of Spice3f2 - Copyright (c) Stephen R. Whiteley 1992
3 Copyright 1990 Regents of the University of California. All rights reserved.
4 Authors: 1985 Thomas L. Quarles
5 1989 Takayasu Sakurai
6 1993 Stephen R. Whiteley
7 ****************************************************************************/
8
9 #include "spice.h"
10 #include <stdio.h>
11 #include "mosdefs.h"
12 #include "const.h"
13 #include "sperror.h"
14
15 int
MOSmAsk(ckt,inModel,param,value)16 MOSmAsk(ckt,inModel,param,value)
17
18 CKTcircuit *ckt;
19 GENmodel *inModel;
20 int param;
21 IFvalue *value;
22 {
23 MOSmodel *model = (MOSmodel *)inModel;
24
25 switch (param) {
26
27 case MOS_MOD_LEVEL:
28 value->iValue = model->MOSlevel;
29 break;
30 case MOS_MOD_TNOM:
31 value->rValue = model->MOStnom - CONSTCtoK;
32 break;
33 case MOS_MOD_VTO:
34 value->rValue = model->MOSvt0;
35 break;
36 case MOS_MOD_KP:
37 value->rValue = model->MOStransconductance;
38 break;
39 case MOS_MOD_GAMMA:
40 value->rValue = model->MOSgamma;
41 break;
42 case MOS_MOD_PHI:
43 value->rValue = model->MOSphi;
44 break;
45 case MOS_MOD_RD:
46 value->rValue = model->MOSdrainResistance;
47 break;
48 case MOS_MOD_RS:
49 value->rValue = model->MOSsourceResistance;
50 break;
51 case MOS_MOD_CBD:
52 value->rValue = model->MOScapBD;
53 break;
54 case MOS_MOD_CBS:
55 value->rValue = model->MOScapBS;
56 break;
57 case MOS_MOD_IS:
58 value->rValue = model->MOSjctSatCur;
59 break;
60 case MOS_MOD_PB:
61 value->rValue = model->MOSbulkJctPotential;
62 break;
63 case MOS_MOD_CGSO:
64 value->rValue = model->MOSgateSourceOverlapCapFactor;
65 break;
66 case MOS_MOD_CGDO:
67 value->rValue = model->MOSgateDrainOverlapCapFactor;
68 break;
69 case MOS_MOD_CGBO:
70 value->rValue = model->MOSgateBulkOverlapCapFactor;
71 break;
72 case MOS_MOD_CJ:
73 value->rValue = model->MOSbulkCapFactor;
74 break;
75 case MOS_MOD_MJ:
76 value->rValue = model->MOSbulkJctBotGradingCoeff;
77 break;
78 case MOS_MOD_CJSW:
79 value->rValue = model->MOSsideWallCapFactor;
80 break;
81 case MOS_MOD_MJSW:
82 value->rValue = model->MOSbulkJctSideGradingCoeff;
83 break;
84 case MOS_MOD_JS:
85 value->rValue = model->MOSjctSatCurDensity;
86 break;
87 case MOS_MOD_TOX:
88 value->rValue = model->MOSoxideThickness;
89 break;
90 case MOS_MOD_LD:
91 value->rValue = model->MOSlatDiff;
92 break;
93 case MOS_MOD_RSH:
94 value->rValue = model->MOSsheetResistance;
95 break;
96 case MOS_MOD_U0:
97 value->rValue = model->MOSsurfaceMobility;
98 break;
99 case MOS_MOD_FC:
100 value->rValue = model->MOSfwdCapDepCoeff;
101 break;
102 case MOS_MOD_NSUB:
103 value->rValue = model->MOSsubstrateDoping;
104 break;
105 case MOS_MOD_TPG:
106 value->rValue = model->MOSgateType;
107 break;
108 case MOS_MOD_NSS:
109 value->rValue = model->MOSsurfaceStateDensity;
110 break;
111 case MOS_MOD_TYPE:
112 if (model->MOStype > 0)
113 value->sValue = "nmos";
114 else
115 value->sValue = "pmos";
116 break;
117 case MOS_MOD_KF:
118 value->rValue = model->MOSfNcoef;
119 break;
120 case MOS_MOD_AF:
121 value->rValue = model->MOSfNexp;
122 break;
123 case MOS_MOD_LAMBDA:
124 /* levels 1,2 and 6 */
125 value->rValue = model->MOSlambda;
126 break;
127 case MOS_MOD_UEXP:
128 /* level 2 */
129 value->rValue = model->MOScritFieldExp;
130 break;
131 case MOS_MOD_NEFF:
132 /* level 2 */
133 value->rValue = model->MOSchannelCharge;
134 break;
135 case MOS_MOD_UCRIT:
136 /* level 2 */
137 value->rValue = model->MOScritField;
138 break;
139 case MOS_MOD_NFS:
140 /* levels 2 and 3 */
141 value->rValue = model->MOSfastSurfaceStateDensity;
142 break;
143 case MOS_MOD_DELTA:
144 /* levels 2 and 3 */
145 value->rValue = model->MOSnarrowFactor;
146 break;
147 case MOS_MOD_VMAX:
148 /* levels 2 and 3 */
149 value->rValue = model->MOSmaxDriftVel;
150 break;
151 case MOS_MOD_XJ:
152 /* levels 2 and 3 */
153 value->rValue = model->MOSjunctionDepth;
154 break;
155 case MOS_MOD_ETA:
156 /* level 3 */
157 value->rValue = model->MOSeta;
158 break;
159 case MOS_MOD_THETA:
160 /* level 3 */
161 value->rValue = model->MOStheta;
162 break;
163 case MOS_MOD_ALPHA:
164 /* level 3 */
165 value->rValue = model->MOSalpha;
166 break;
167 case MOS_MOD_KAPPA:
168 /* level 3 */
169 value->rValue = model->MOSkappa;
170 break;
171 case MOS_MOD_XD:
172 /* level 3 */
173 value->rValue = model->MOSxd;
174 break;
175 case MOS_DELTA:
176 /* level 3 */
177 value->rValue = model->MOSdelta;
178 return(OK);
179 case MOS_MOD_KV:
180 /* level 6 */
181 value->rValue = model->MOSkv;
182 break;
183 case MOS_MOD_NV:
184 /* level 6 */
185 value->rValue = model->MOSnv;
186 break;
187 case MOS_MOD_KC:
188 /* level 6 */
189 value->rValue = model->MOSkc;
190 break;
191 case MOS_MOD_NC:
192 /* level 6 */
193 value->rValue = model->MOSnc;
194 break;
195 case MOS_MOD_GAMMA1:
196 /* level 6 */
197 value->rValue = model->MOSgamma1;
198 break;
199 case MOS_MOD_SIGMA:
200 /* level 6 */
201 value->rValue = model->MOSsigma;
202 break;
203 case MOS_MOD_LAMDA0:
204 /* level 6 */
205 value->rValue = model->MOSlamda0;
206 break;
207 case MOS_MOD_LAMDA1:
208 /* level 6 */
209 value->rValue = model->MOSlamda1;
210 break;
211 case MOS_MOD_A1:
212 /* level 8, CryoMOS by Luong 1/19/95 */
213 value->rValue = model->MOSa1;
214 break;
215 case MOS_MOD_A2:
216 /* level 8, CryoMOS by Luong 1/19/95 */
217 value->rValue = model->MOSa2;
218 break;
219 case MOS_MOD_K1:
220 /* level 8, CryoMOS by Luong 1/19/95 */
221 value->rValue = model->MOSk1;
222 break;
223 case MOS_MOD_K2:
224 /* level 8, CryoMOS by Luong 1/19/95 */
225 value->rValue = model->MOSk2;
226 break;
227 case MOS_MOD_K3:
228 /* level 8, CryoMOS by Luong 1/19/95 */
229 value->rValue = model->MOSk3;
230 break;
231 case MOS_MOD_K4:
232 /* level 8, CryoMOS by Luong 1/19/95 */
233 value->rValue = model->MOSk4;
234 break;
235 case MOS_MOD_PCLM:
236 /* level 8, CryoMOS by Luong 1/19/95 */
237 value->rValue = model->MOSpclm;
238 break;
239 case MOS_MOD_EM:
240 /* level 8, CryoMOS by Luong 1/19/95 */
241 value->rValue = model->MOSem;
242 break;
243 default:
244 return (E_BADPARM);
245 }
246 return (OK);
247 }
248