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