Initial version of donated sources by Avertec, 3.4p5.
[tas-yagle.git] / distrib / sources / elp / elp.y
1 %{
2 #include ELP_H
3 elpmodel_list *LIST_ELPMODEL = NULL ;
4 elpmodel_list LIST_ELPMODEL_S ;
5 static char *NNAME = NULL ;
6 static char *PNAME = NULL ;
7 static int newformat = 0 ;
8 static int oldformat = 0 ;
9 int yyerror();
10 int yylex();
11 int elpEsimLevel = 0 ;
12
13 void getelptrans() ;
14
15
16 %}
17
18 %union {
19 double elpdbl ;
20 int elpint ;
21 char *elpstr ;
22 }
23
24 %token T_TECNAME T_TECVER T_LMLT T_WMLT T_DL T_DW T_DLC T_DWC T_DWCJ
25 %token T_ESIM T_MODEL T_TECHNO T_ELEVEL T_LEVEL
26 %token T_ACM T_TEMP T_SLOPE T_VDDmax T_VDDBEST T_VDDWORST
27 %token T_DTHR T_SLTHR T_SHTHR T_VTHR
28 %token T_VDDdeg T_VSSdeg T_VDEG T_VTI
29 %token T_INDEX T_TYPE
30 %token T_LMIN T_LMAX T_WMIN T_WMAX
31 %token T_VT T_VT0 T_KT T_A T_B T_RT T_RS T_KRT T_KRS T_KS T_KR T_M
32 %token T_RACCS T_RACCD
33 %token T_MULU0 T_DELVT0 T_SA T_SB T_SD T_VBULK T_NF T_NRS T_NRD T_SC T_SCA T_SCB T_SCC
34 %token T_CGS T_CGS0 T_CGP T_CGD T_CGD0 T_CGD1 T_CGD2 T_CGDC T_CGDC0 T_CGDC1 T_CGDC2 T_CGSI T_CGSIC T_CGSU T_CGSU0 T_CGSD T_CGSD0
35 %token T_CGSUMIN T_CGSUMAX T_CGSDMIN T_CGSDMAX
36 %token T_CGPUMIN T_CGPUMAX T_CGPDMIN T_CGPDMAX
37 %token T_CDS T_CDSU T_CDSD T_CDP T_CDPU T_CDPD T_CDW T_CDWU T_CDWD
38 %token T_CSS T_CSSU T_CSSD T_CSP T_CSPU T_CSPD T_CSW T_CSWU T_CSWD
39 %token T_BEGIN T_END
40 %token T_MOS T_NMOS T_PMOS
41 %token T_CASE T_WORST T_BEST T_TYPICAL
42 %token T_NAME_ALIAS
43
44 /* token pour ancien format ELP */
45 %token T_DLN T_DLP T_DWN T_DWP T_VTN T_BN T_AN T_RNT
46 %token T_VTP T_BP T_AP T_RPT T_CGSN T_CGSP T_CGPN T_CGPP
47 %token T_CDSN T_CDSP T_CDPN T_CDPP T_CDWN T_CDWP
48 %token T_CSSN T_CSSP T_CSPN T_CSPP T_CSWN T_CSWP
49 %token T_NNAME T_PNAME
50
51 %token <elpstr> T_STRING
52 %token <elpdbl> T_NUMBER
53
54 %type <elpstr> trans_name
55 %type <elpint> trans_type
56 %type <elpint> trans_index
57 %type <elpint> trans_techno
58 %type <elpdbl> number
59
60 %start elp
61
62 %%
63
64 elp : T_TECNAME ':' T_STRING T_TECVER ':' number
65 {
66 strcpy(elpTechnoName,$3) ;
67 elpTechnoVersion = $6 ;
68 NNAME = NULL ;
69 PNAME = NULL ;
70 newformat = 0 ;
71 oldformat = 0 ;
72 LIST_ELPMODEL = NULL ;
73 }
74 param_list
75 ;
76
77 number : T_NUMBER
78 {
79 $$ = $1 ;
80 }
81 | '-' T_NUMBER
82 {
83 $$ = -$2 ;
84 }
85 ;
86
87 param_list :
88 sim_param
89 | param_list sim_param
90 ;
91
92 sim_param :
93 name_sim
94 | trans_model
95 | level
96 | valim
97 | vseuil
98 | dseuil
99 | shseuil
100 | slseuil
101 | slope
102 | acm
103 | temp
104 | setmodels
105 {
106 if(oldformat == 1)
107 fprintf(stderr, "\nFile %s contains differents elp format!!!\n", elpTechnoName) ;
108 else
109 newformat = 1 ;
110 }
111 | oldparam
112 {
113 if(newformat == 1)
114 fprintf(stderr, "\nFile %s contains differents elp format!!!\n", elpTechnoName) ;
115 else
116 oldformat = 1 ;
117 }
118 ;
119
120 name_sim : T_ESIM '=' T_STRING
121 {
122 strcpy(elpEsimName,$3) ;
123 }
124 ;
125
126 trans_model : T_MODEL '=' T_MOS
127 {
128 }
129 ;
130
131 trans_techno : T_TECHNO '=' number
132 {
133 $$ = $3 ;
134 }
135 ;
136 level : T_LEVEL '=' number
137 {
138 elpEsimLevel = $3 ;
139 fprintf(stderr, "\nWarning : File %s is an obsolete format.", elpTechnoName );
140 }
141 ;
142
143 valim : T_VDDmax '=' number
144 {
145 elpGeneral[elpGVDDMAX] = $3 ;
146 }
147 | T_VDDBEST '=' number
148 {
149 elpGeneral[elpGVDDBEST] = $3 ;
150 }
151 | T_VDDWORST '=' number
152 {
153 elpGeneral[elpGVDDWORST] = $3 ;
154 }
155 ;
156
157 vseuil : T_VTHR '=' number
158 {
159 elpGeneral[elpGDTHR] = $3 / elpGeneral[elpGVDDMAX] ;
160 }
161 ;
162
163 dseuil : T_DTHR '=' number
164 {
165 elpGeneral[elpGDTHR] = $3 ;
166 }
167 ;
168
169 shseuil : T_SHTHR '=' number
170 {
171 elpGeneral[elpGSHTHR] = $3 ;
172 }
173 ;
174
175 slseuil : T_SLTHR '=' number
176 {
177 elpGeneral[elpGSLTHR] = $3 ;
178 }
179 ;
180
181 slope : T_SLOPE '=' number
182 {
183 elpGeneral[elpSLOPE] = $3 ;
184 }
185 ;
186
187 acm : T_ACM '=' number
188 {
189 elpGeneral[elpACM] = $3 ;
190 }
191 ;
192
193 temp : T_TEMP '=' number
194 {
195 elpGeneral[elpTEMP] = $3 ;
196 }
197 ;
198
199 setmodels : T_BEGIN trans_name trans_index trans_techno trans_type
200 {
201 LIST_ELPMODEL_S.elpModelName = namealloc($2) ;
202 LIST_ELPMODEL_S.elpModelNameAlias = NULL ;
203 LIST_ELPMODEL_S.elpTransIndex = $3 ;
204 LIST_ELPMODEL_S.elpTransTechno = $4 ;
205 LIST_ELPMODEL_S.elpTransType = $5 ;
206 LIST_ELPMODEL_S.elpTransModel = elpMOS ;
207 LIST_ELPMODEL_S.elpTransCase = elpTYPICAL ;
208 LIST_ELPMODEL_S.elpTemp = ELPINITTEMP ;
209 LIST_ELPMODEL_S.elpRange[elpLMIN] = (long)0 ;
210 LIST_ELPMODEL_S.elpRange[elpLMAX] = ELPMAXLONG ;
211 LIST_ELPMODEL_S.elpRange[elpWMIN] = (long)0 ;
212 LIST_ELPMODEL_S.elpRange[elpWMAX] = ELPMAXLONG ;
213 LIST_ELPMODEL_S.elpShrink[elpLMLT] = 1.0 ;
214 LIST_ELPMODEL_S.elpShrink[elpWMLT] = 1.0 ;
215 LIST_ELPMODEL_S.elpShrink[elpDL] = 0.0 ;
216 LIST_ELPMODEL_S.elpShrink[elpDW] = 0.0 ;
217 LIST_ELPMODEL_S.elpShrink[elpDLC] = 0.0 ;
218 LIST_ELPMODEL_S.elpShrink[elpDWC] = 0.0 ;
219 LIST_ELPMODEL_S.elpShrink[elpDWCJ] = 0.0 ;
220 LIST_ELPMODEL_S.elpModel[elpVT] = 0.0 ;
221 LIST_ELPMODEL_S.elpModel[elpVT0] = 0.0 ;
222 LIST_ELPMODEL_S.elpVoltage[elpVBULK] = ELPINITVBULK;
223 LIST_ELPMODEL_S.elpModel[elpMULU0] = 1.0 ;
224 LIST_ELPMODEL_S.elpModel[elpM] = 1.0 ;
225 LIST_ELPMODEL_S.elpModel[elpDELVT0] = 0.0 ;
226 LIST_ELPMODEL_S.elpModel[elpSA] = ELPINITVALUE;
227 LIST_ELPMODEL_S.elpModel[elpSB] = ELPINITVALUE;
228 LIST_ELPMODEL_S.elpModel[elpSD] = ELPINITVALUE;
229 LIST_ELPMODEL_S.elpModel[elpSCA] = ELPINITVALUE;
230 LIST_ELPMODEL_S.elpModel[elpSCB] = ELPINITVALUE;
231 LIST_ELPMODEL_S.elpModel[elpSCC] = ELPINITVALUE;
232 LIST_ELPMODEL_S.elpModel[elpSC] = ELPINITVALUE;
233 LIST_ELPMODEL_S.elpModel[elpNF] = 1.0 ;
234 LIST_ELPMODEL_S.elpModel[elpKT] = 0.0 ;
235 LIST_ELPMODEL_S.elpModel[elpA] = 0.0 ;
236 LIST_ELPMODEL_S.elpModel[elpB] = 0.0 ;
237 LIST_ELPMODEL_S.elpModel[elpRT] = 0.0 ;
238 LIST_ELPMODEL_S.elpModel[elpRS] = 0.0 ;
239 LIST_ELPMODEL_S.elpModel[elpKS] = 1.0 ;
240 LIST_ELPMODEL_S.elpModel[elpKR] = 1.0 ;
241 LIST_ELPMODEL_S.elpVoltage[elpVDEG] = ELPMINVOLTAGE ;
242 LIST_ELPMODEL_S.elpVoltage[elpVTI] = ELPMINVOLTAGE ;
243 LIST_ELPMODEL_S.elpVoltage[elpVDDMAX] = ELPMINVOLTAGE ;
244 LIST_ELPMODEL_S.elpCapa[elpCGS] = 0.0 ;
245 LIST_ELPMODEL_S.elpCapa[elpCGS0] = 0.0 ;
246 LIST_ELPMODEL_S.elpCapa[elpCGSU] = 0.0 ;
247 LIST_ELPMODEL_S.elpCapa[elpCGSU0] = 0.0 ;
248 LIST_ELPMODEL_S.elpCapa[elpCGSUMIN] = 0.0 ;
249 LIST_ELPMODEL_S.elpCapa[elpCGSUMAX] = 0.0 ;
250 LIST_ELPMODEL_S.elpCapa[elpCGSD] = 0.0 ;
251 LIST_ELPMODEL_S.elpCapa[elpCGSD0] = 0.0 ;
252 LIST_ELPMODEL_S.elpCapa[elpCGSDMIN] = 0.0 ;
253 LIST_ELPMODEL_S.elpCapa[elpCGSDMAX] = 0.0 ;
254 LIST_ELPMODEL_S.elpCapa[elpCGP] = 0.0 ;
255 LIST_ELPMODEL_S.elpCapa[elpCGPUMIN] = 0.0 ;
256 LIST_ELPMODEL_S.elpCapa[elpCGPUMAX] = 0.0 ;
257 LIST_ELPMODEL_S.elpCapa[elpCGPDMIN] = 0.0 ;
258 LIST_ELPMODEL_S.elpCapa[elpCGPDMAX] = 0.0 ;
259 LIST_ELPMODEL_S.elpCapa[elpCGD] = 0.0 ;
260 LIST_ELPMODEL_S.elpCapa[elpCGD0] = 0.0 ;
261 LIST_ELPMODEL_S.elpCapa[elpCGD1] = 0.0 ;
262 LIST_ELPMODEL_S.elpCapa[elpCGD2] = 0.0 ;
263 LIST_ELPMODEL_S.elpCapa[elpCGDC] = 0.0 ;
264 LIST_ELPMODEL_S.elpCapa[elpCGDC0] = 0.0 ;
265 LIST_ELPMODEL_S.elpCapa[elpCGDC1] = 0.0 ;
266 LIST_ELPMODEL_S.elpCapa[elpCGDC2] = 0.0 ;
267 LIST_ELPMODEL_S.elpCapa[elpCGSI] = 0.0 ;
268 LIST_ELPMODEL_S.elpCapa[elpCGSIC] = 0.0 ;
269 LIST_ELPMODEL_S.elpCapa[elpCDS] = 0.0 ;
270 LIST_ELPMODEL_S.elpCapa[elpCDSU] = 0.0 ;
271 LIST_ELPMODEL_S.elpCapa[elpCDSD] = 0.0 ;
272 LIST_ELPMODEL_S.elpCapa[elpCDP] = 0.0 ;
273 LIST_ELPMODEL_S.elpCapa[elpCDPU] = 0.0 ;
274 LIST_ELPMODEL_S.elpCapa[elpCDPD] = 0.0 ;
275 LIST_ELPMODEL_S.elpCapa[elpCDW] = 0.0 ;
276 LIST_ELPMODEL_S.elpCapa[elpCDWU] = 0.0 ;
277 LIST_ELPMODEL_S.elpCapa[elpCDWD] = 0.0 ;
278 LIST_ELPMODEL_S.elpCapa[elpCSS] = 0.0 ;
279 LIST_ELPMODEL_S.elpCapa[elpCSSU] = 0.0 ;
280 LIST_ELPMODEL_S.elpCapa[elpCSSD] = 0.0 ;
281 LIST_ELPMODEL_S.elpCapa[elpCSP] = 0.0 ;
282 LIST_ELPMODEL_S.elpCapa[elpCSPU] = 0.0 ;
283 LIST_ELPMODEL_S.elpCapa[elpCSPD] = 0.0 ;
284 LIST_ELPMODEL_S.elpCapa[elpCSW] = 0.0 ;
285 LIST_ELPMODEL_S.elpCapa[elpCSWU] = 0.0 ;
286 LIST_ELPMODEL_S.elpCapa[elpCSWD] = 0.0 ;
287 LIST_ELPMODEL_S.elpCapa[elpCGPO] = 0.0 ;
288 LIST_ELPMODEL_S.elpCapa[elpCGPOC] = 0.0 ;
289 LIST_ELPMODEL_S.elpRacc[elpRACCS] = 0.0 ;
290 LIST_ELPMODEL_S.elpRacc[elpRACCD] = 0.0 ;
291 }
292 mccvars T_END trans_name trans_index
293 {
294 LIST_ELPMODEL = elpAddModel(LIST_ELPMODEL_S.elpModelName,
295 LIST_ELPMODEL_S.elpModelNameAlias,
296 LIST_ELPMODEL_S.elpTransType ,
297 LIST_ELPMODEL_S.elpTransIndex ,
298 LIST_ELPMODEL_S.elpRange[elpLMIN],
299 LIST_ELPMODEL_S.elpRange[elpLMAX],
300 LIST_ELPMODEL_S.elpRange[elpWMIN],
301 LIST_ELPMODEL_S.elpRange[elpWMAX],
302 LIST_ELPMODEL_S.elpShrink[elpDL],
303 LIST_ELPMODEL_S.elpShrink[elpDW],
304 LIST_ELPMODEL_S.elpShrink[elpLMLT],
305 LIST_ELPMODEL_S.elpShrink[elpWMLT],
306 LIST_ELPMODEL_S.elpVoltage[elpVDDMAX],
307 LIST_ELPMODEL_S.elpTransCase,
308 LIST_ELPMODEL_S.elpTransTechno ,
309 LIST_ELPMODEL_S.elpModel[elpMULU0],
310 LIST_ELPMODEL_S.elpModel[elpDELVT0],
311 LIST_ELPMODEL_S.elpModel[elpSA],
312 LIST_ELPMODEL_S.elpModel[elpSB],
313 LIST_ELPMODEL_S.elpModel[elpSD],
314 LIST_ELPMODEL_S.elpModel[elpNF],
315 LIST_ELPMODEL_S.elpModel[elpM],
316 LIST_ELPMODEL_S.elpModel[elpNRS],
317 LIST_ELPMODEL_S.elpModel[elpNRD],
318 LIST_ELPMODEL_S.elpVoltage[elpVBULK],
319 LIST_ELPMODEL_S.elpModel[elpSC],
320 LIST_ELPMODEL_S.elpModel[elpSCA],
321 LIST_ELPMODEL_S.elpModel[elpSCB],
322 LIST_ELPMODEL_S.elpModel[elpSCC],
323 NULL) ;
324
325 if( LIST_ELPMODEL_S.elpTemp < ELPMINTEMP)
326 LIST_ELPMODEL->elpTemp = elpGeneral[elpTEMP] ;
327 else
328 LIST_ELPMODEL->elpTemp = LIST_ELPMODEL_S.elpTemp ;
329
330 LIST_ELPMODEL->elpTransModel = LIST_ELPMODEL_S.elpTransModel ;
331
332 LIST_ELPMODEL->elpShrink[elpDLC] = LIST_ELPMODEL_S.elpShrink[elpDLC] ;
333 LIST_ELPMODEL->elpShrink[elpDWC] = LIST_ELPMODEL_S.elpShrink[elpDWC] ;
334 LIST_ELPMODEL->elpShrink[elpDWCJ] = LIST_ELPMODEL_S.elpShrink[elpDWCJ] ;
335 LIST_ELPMODEL->elpModel[elpVT] = LIST_ELPMODEL_S.elpModel[elpVT] ;
336 LIST_ELPMODEL->elpModel[elpVT0] = LIST_ELPMODEL_S.elpModel[elpVT0] ;
337 LIST_ELPMODEL->elpModel[elpMULU0] = LIST_ELPMODEL_S.elpModel[elpMULU0] ;
338 LIST_ELPMODEL->elpModel[elpDELVT0] = LIST_ELPMODEL_S.elpModel[elpDELVT0] ;
339 LIST_ELPMODEL->elpModel[elpSA] = LIST_ELPMODEL_S.elpModel[elpSA] ;
340 LIST_ELPMODEL->elpModel[elpSB] = LIST_ELPMODEL_S.elpModel[elpSB] ;
341 LIST_ELPMODEL->elpModel[elpSD] = LIST_ELPMODEL_S.elpModel[elpSD] ;
342 LIST_ELPMODEL->elpModel[elpNF] = LIST_ELPMODEL_S.elpModel[elpNF] ;
343 LIST_ELPMODEL->elpModel[elpNRS] = LIST_ELPMODEL_S.elpModel[elpNRS] ;
344 LIST_ELPMODEL->elpModel[elpNRD] = LIST_ELPMODEL_S.elpModel[elpNRD] ;
345 LIST_ELPMODEL->elpModel[elpKT] = LIST_ELPMODEL_S.elpModel[elpKT] ;
346 LIST_ELPMODEL->elpModel[elpA] = LIST_ELPMODEL_S.elpModel[elpA] ;
347 LIST_ELPMODEL->elpModel[elpM] = LIST_ELPMODEL_S.elpModel[elpM] ;
348 LIST_ELPMODEL->elpModel[elpB] = LIST_ELPMODEL_S.elpModel[elpB] ;
349 LIST_ELPMODEL->elpModel[elpRT] = LIST_ELPMODEL_S.elpModel[elpRT] ;
350 LIST_ELPMODEL->elpModel[elpRS] = LIST_ELPMODEL_S.elpModel[elpRS] ;
351 LIST_ELPMODEL->elpModel[elpKS] = LIST_ELPMODEL_S.elpModel[elpKS] ;
352 LIST_ELPMODEL->elpModel[elpKR] = LIST_ELPMODEL_S.elpModel[elpKR] ;
353 LIST_ELPMODEL->elpVoltage[elpVDEG] = LIST_ELPMODEL_S.elpVoltage[elpVDEG] ;
354 LIST_ELPMODEL->elpVoltage[elpVTI] = LIST_ELPMODEL_S.elpVoltage[elpVTI] ;
355 if(LIST_ELPMODEL_S.elpVoltage[elpVDDMAX] < 0.0) {
356 LIST_ELPMODEL->elpVoltage[elpVDDMAX] = elpGeneral[elpGVDDMAX] ;
357 }
358 else
359 LIST_ELPMODEL->elpVoltage[elpVDDMAX] = LIST_ELPMODEL_S.elpVoltage[elpVDDMAX] ;
360 LIST_ELPMODEL->elpVoltage[elpVBULK] = LIST_ELPMODEL_S.elpVoltage[elpVBULK] ;
361 if (LIST_ELPMODEL_S.elpVoltage[elpVBULK] < ELPMINVBULK) {
362 if ( LIST_ELPMODEL_S.elpTransType == elpNMOS )
363 LIST_ELPMODEL->elpVoltage[elpVBULK] = 0.0;
364 else
365 LIST_ELPMODEL->elpVoltage[elpVBULK] = LIST_ELPMODEL_S.elpVoltage[elpVDDMAX];
366 }
367 LIST_ELPMODEL->elpCapa[elpCGS] = LIST_ELPMODEL_S.elpCapa[elpCGS] ;
368 LIST_ELPMODEL->elpCapa[elpCGS0] = LIST_ELPMODEL_S.elpCapa[elpCGS0] ;
369 LIST_ELPMODEL->elpCapa[elpCGSU] = LIST_ELPMODEL_S.elpCapa[elpCGSU] ;
370 LIST_ELPMODEL->elpCapa[elpCGSU0] = LIST_ELPMODEL_S.elpCapa[elpCGSU0] ;
371 LIST_ELPMODEL->elpCapa[elpCGSUMIN] = LIST_ELPMODEL_S.elpCapa[elpCGSUMIN] ;
372 LIST_ELPMODEL->elpCapa[elpCGSUMAX] = LIST_ELPMODEL_S.elpCapa[elpCGSUMAX] ;
373 LIST_ELPMODEL->elpCapa[elpCGSD] = LIST_ELPMODEL_S.elpCapa[elpCGSD] ;
374 LIST_ELPMODEL->elpCapa[elpCGSD0] = LIST_ELPMODEL_S.elpCapa[elpCGSD0] ;
375 LIST_ELPMODEL->elpCapa[elpCGSDMIN] = LIST_ELPMODEL_S.elpCapa[elpCGSDMIN] ;
376 LIST_ELPMODEL->elpCapa[elpCGSDMAX] = LIST_ELPMODEL_S.elpCapa[elpCGSDMAX] ;
377 LIST_ELPMODEL->elpCapa[elpCGP] = LIST_ELPMODEL_S.elpCapa[elpCGP] ;
378 LIST_ELPMODEL->elpCapa[elpCGPUMIN] = LIST_ELPMODEL_S.elpCapa[elpCGPUMIN];
379 LIST_ELPMODEL->elpCapa[elpCGPUMAX] = LIST_ELPMODEL_S.elpCapa[elpCGPUMAX];
380 LIST_ELPMODEL->elpCapa[elpCGPDMIN] = LIST_ELPMODEL_S.elpCapa[elpCGPDMIN];
381 LIST_ELPMODEL->elpCapa[elpCGPDMAX] = LIST_ELPMODEL_S.elpCapa[elpCGPDMAX];
382 LIST_ELPMODEL->elpCapa[elpCGD] = LIST_ELPMODEL_S.elpCapa[elpCGD] ;
383 LIST_ELPMODEL->elpCapa[elpCGD0] = LIST_ELPMODEL_S.elpCapa[elpCGD0] ;
384 LIST_ELPMODEL->elpCapa[elpCGD1] = LIST_ELPMODEL_S.elpCapa[elpCGD1] ;
385 LIST_ELPMODEL->elpCapa[elpCGD2] = LIST_ELPMODEL_S.elpCapa[elpCGD2] ;
386 if (elpDouble2Long (ELPPRECISION*LIST_ELPMODEL_S.elpCapa[elpCGDC]) == 0) {
387 LIST_ELPMODEL->elpCapa[elpCGDC] = LIST_ELPMODEL_S.elpCapa[elpCGD] ;
388 LIST_ELPMODEL->elpCapa[elpCGDC0] = LIST_ELPMODEL_S.elpCapa[elpCGD0] ;
389 LIST_ELPMODEL->elpCapa[elpCGDC1] = LIST_ELPMODEL_S.elpCapa[elpCGD1] ;
390 LIST_ELPMODEL->elpCapa[elpCGDC2] = LIST_ELPMODEL_S.elpCapa[elpCGD2] ;
391 }
392 else {
393 LIST_ELPMODEL->elpCapa[elpCGDC] = LIST_ELPMODEL_S.elpCapa[elpCGDC] ;
394 LIST_ELPMODEL->elpCapa[elpCGDC0] = LIST_ELPMODEL_S.elpCapa[elpCGDC0] ;
395 LIST_ELPMODEL->elpCapa[elpCGDC1] = LIST_ELPMODEL_S.elpCapa[elpCGDC1] ;
396 LIST_ELPMODEL->elpCapa[elpCGDC2] = LIST_ELPMODEL_S.elpCapa[elpCGDC2] ;
397 }
398 LIST_ELPMODEL->elpCapa[elpCGSI] = LIST_ELPMODEL_S.elpCapa[elpCGSI] ;
399 if (elpDouble2Long (ELPPRECISION*LIST_ELPMODEL_S.elpCapa[elpCGSIC]) == 0)
400 LIST_ELPMODEL->elpCapa[elpCGSIC] = LIST_ELPMODEL_S.elpCapa[elpCGSI] ;
401 else
402 LIST_ELPMODEL->elpCapa[elpCGSIC] = LIST_ELPMODEL_S.elpCapa[elpCGSIC] ;
403
404 // CDS
405 LIST_ELPMODEL->elpCapa[elpCDS] = LIST_ELPMODEL_S.elpCapa[elpCDS] ;
406 if (elpDouble2Long (ELPPRECISION*LIST_ELPMODEL_S.elpCapa[elpCDSU]) == 0)
407 LIST_ELPMODEL->elpCapa[elpCDSU] = LIST_ELPMODEL_S.elpCapa[elpCDS] ;
408 else
409 LIST_ELPMODEL->elpCapa[elpCDSU] = LIST_ELPMODEL_S.elpCapa[elpCDSU] ;
410 if (elpDouble2Long (ELPPRECISION*LIST_ELPMODEL_S.elpCapa[elpCDSD]) == 0)
411 LIST_ELPMODEL->elpCapa[elpCDSD] = LIST_ELPMODEL_S.elpCapa[elpCDS] ;
412 else
413 LIST_ELPMODEL->elpCapa[elpCDSD] = LIST_ELPMODEL_S.elpCapa[elpCDSD] ;
414
415 // CDP
416 LIST_ELPMODEL->elpCapa[elpCDP] = LIST_ELPMODEL_S.elpCapa[elpCDP] ;
417 if (elpDouble2Long (ELPPRECISION*LIST_ELPMODEL_S.elpCapa[elpCDPU]) == 0)
418 LIST_ELPMODEL->elpCapa[elpCDPU] = LIST_ELPMODEL_S.elpCapa[elpCDP] ;
419 else
420 LIST_ELPMODEL->elpCapa[elpCDPU] = LIST_ELPMODEL_S.elpCapa[elpCDPU] ;
421 if (elpDouble2Long (ELPPRECISION*LIST_ELPMODEL_S.elpCapa[elpCDPD]) == 0)
422 LIST_ELPMODEL->elpCapa[elpCDPD] = LIST_ELPMODEL_S.elpCapa[elpCDP] ;
423 else
424 LIST_ELPMODEL->elpCapa[elpCDPD] = LIST_ELPMODEL_S.elpCapa[elpCDPD] ;
425
426 // CDW
427 LIST_ELPMODEL->elpCapa[elpCDW] = LIST_ELPMODEL_S.elpCapa[elpCDW] ;
428 if (elpDouble2Long (ELPPRECISION*LIST_ELPMODEL_S.elpCapa[elpCDWU]) == 0)
429 LIST_ELPMODEL->elpCapa[elpCDWU] = LIST_ELPMODEL_S.elpCapa[elpCDW] ;
430 else
431 LIST_ELPMODEL->elpCapa[elpCDWU] = LIST_ELPMODEL_S.elpCapa[elpCDWU] ;
432 if (elpDouble2Long (ELPPRECISION*LIST_ELPMODEL_S.elpCapa[elpCDWD]) == 0)
433 LIST_ELPMODEL->elpCapa[elpCDWD] = LIST_ELPMODEL_S.elpCapa[elpCDW] ;
434 else
435 LIST_ELPMODEL->elpCapa[elpCDWD] = LIST_ELPMODEL_S.elpCapa[elpCDWD] ;
436
437 // CSS
438 LIST_ELPMODEL->elpCapa[elpCSS] = LIST_ELPMODEL_S.elpCapa[elpCSS] ;
439 if (elpDouble2Long (ELPPRECISION*LIST_ELPMODEL_S.elpCapa[elpCSSU]) == 0)
440 LIST_ELPMODEL->elpCapa[elpCSSU] = LIST_ELPMODEL_S.elpCapa[elpCSS] ;
441 else
442 LIST_ELPMODEL->elpCapa[elpCSSU] = LIST_ELPMODEL_S.elpCapa[elpCSSU] ;
443 if (elpDouble2Long (ELPPRECISION*LIST_ELPMODEL_S.elpCapa[elpCSSD]) == 0)
444 LIST_ELPMODEL->elpCapa[elpCSSD] = LIST_ELPMODEL_S.elpCapa[elpCSS] ;
445 else
446 LIST_ELPMODEL->elpCapa[elpCSSD] = LIST_ELPMODEL_S.elpCapa[elpCSSD] ;
447
448 // CSP
449 LIST_ELPMODEL->elpCapa[elpCSP] = LIST_ELPMODEL_S.elpCapa[elpCSP] ;
450 if (elpDouble2Long (ELPPRECISION*LIST_ELPMODEL_S.elpCapa[elpCSPU]) == 0)
451 LIST_ELPMODEL->elpCapa[elpCSPU] = LIST_ELPMODEL_S.elpCapa[elpCSP] ;
452 else
453 LIST_ELPMODEL->elpCapa[elpCSPU] = LIST_ELPMODEL_S.elpCapa[elpCSPU] ;
454 if (elpDouble2Long (ELPPRECISION*LIST_ELPMODEL_S.elpCapa[elpCSPD]) == 0)
455 LIST_ELPMODEL->elpCapa[elpCSPD] = LIST_ELPMODEL_S.elpCapa[elpCSP] ;
456 else
457 LIST_ELPMODEL->elpCapa[elpCSPD] = LIST_ELPMODEL_S.elpCapa[elpCSPD] ;
458
459 // CSW
460 LIST_ELPMODEL->elpCapa[elpCSW] = LIST_ELPMODEL_S.elpCapa[elpCSW] ;
461 if (elpDouble2Long (ELPPRECISION*LIST_ELPMODEL_S.elpCapa[elpCSWU]) == 0)
462 LIST_ELPMODEL->elpCapa[elpCSWU] = LIST_ELPMODEL_S.elpCapa[elpCSW] ;
463 else
464 LIST_ELPMODEL->elpCapa[elpCSWU] = LIST_ELPMODEL_S.elpCapa[elpCSWU] ;
465 if (elpDouble2Long (ELPPRECISION*LIST_ELPMODEL_S.elpCapa[elpCSWD]) == 0)
466 LIST_ELPMODEL->elpCapa[elpCSWD] = LIST_ELPMODEL_S.elpCapa[elpCSW] ;
467 else
468 LIST_ELPMODEL->elpCapa[elpCSWD] = LIST_ELPMODEL_S.elpCapa[elpCSWD] ;
469 LIST_ELPMODEL->elpRacc[elpRACCS] = LIST_ELPMODEL_S.elpRacc[elpRACCS];
470 LIST_ELPMODEL->elpRacc[elpRACCD] = LIST_ELPMODEL_S.elpRacc[elpRACCD];
471 }
472 ;
473
474 trans_name : T_STRING
475 {
476 $$ = $1 ;
477 }
478 ;
479
480 trans_index : '[' number ']'
481 {
482 $$ = $2 ;
483 }
484 |
485 {
486 $$ = elpNOINDEX ;
487 }
488 ;
489
490 trans_type : T_TYPE '=' T_NMOS
491 {
492 $$ = elpNMOS ;
493 }
494 | T_TYPE '=' T_PMOS
495 {
496 $$ = elpPMOS ;
497 }
498 ;
499
500 mccvars : /* empty */
501 elpvar
502 | mccvars elpvar
503 ;
504
505 elpvar :
506 /* les dimensions valables du transistor */
507 T_LMIN '=' number {LIST_ELPMODEL_S.elpRange[elpLMIN] = (long)((double)$3 * (double)SCALE_X + (double)0.5) ;}
508 | T_LMAX '=' number {LIST_ELPMODEL_S.elpRange[elpLMAX] = (long)((double)$3 * (double)SCALE_X + (double)0.5) ;}
509 | T_WMIN '=' number {LIST_ELPMODEL_S.elpRange[elpWMIN] = (long)((double)$3 * (double)SCALE_X + (double)0.5) ;}
510 | T_WMAX '=' number {LIST_ELPMODEL_S.elpRange[elpWMAX] = (long)((double)$3 * (double)SCALE_X + (double)0.5) ;}
511 | T_CASE '=' T_BEST {LIST_ELPMODEL_S.elpTransCase = elpBEST ;}
512 | T_CASE '=' T_WORST {LIST_ELPMODEL_S.elpTransCase = elpWORST ;}
513 | T_CASE '=' T_TYPICAL {LIST_ELPMODEL_S.elpTransCase = elpTYPICAL ;}
514
515 /* les parametres de shrink des transistors */
516 | T_LMLT '=' number {LIST_ELPMODEL_S.elpShrink[elpLMLT] = $3 ;}
517 | T_WMLT '=' number {LIST_ELPMODEL_S.elpShrink[elpWMLT] = $3 ;}
518 | T_DL '=' number {LIST_ELPMODEL_S.elpShrink[elpDL] = $3 ;}
519 | T_DW '=' number {LIST_ELPMODEL_S.elpShrink[elpDW] = $3 ;}
520 | T_DLC '=' number {LIST_ELPMODEL_S.elpShrink[elpDLC] = $3 ;}
521 | T_DWC '=' number {LIST_ELPMODEL_S.elpShrink[elpDWC] = $3 ;}
522 | T_DWCJ '=' number {LIST_ELPMODEL_S.elpShrink[elpDWCJ] = $3 ;}
523
524 /* les caracteristiques des transistors */
525 | T_VT '=' number {LIST_ELPMODEL_S.elpModel[elpVT] = $3 ;}
526 | T_VT0 '=' number {LIST_ELPMODEL_S.elpModel[elpVT0] = $3 ;}
527 | T_MULU0 '=' number {LIST_ELPMODEL_S.elpModel[elpMULU0] = $3 ;}
528 | T_M '=' number {LIST_ELPMODEL_S.elpModel[elpM] = $3 ;}
529 | T_DELVT0 '=' number {LIST_ELPMODEL_S.elpModel[elpDELVT0] = $3 ;}
530 | T_SA '=' number {LIST_ELPMODEL_S.elpModel[elpSA] = $3 ;}
531 | T_SB '=' number {LIST_ELPMODEL_S.elpModel[elpSB] = $3 ;}
532 | T_SD '=' number {LIST_ELPMODEL_S.elpModel[elpSD] = $3 ;}
533 | T_SC '=' number {LIST_ELPMODEL_S.elpModel[elpSC] = $3 ;}
534 | T_SCA '=' number {LIST_ELPMODEL_S.elpModel[elpSCA] = $3 ;}
535 | T_SCB '=' number {LIST_ELPMODEL_S.elpModel[elpSCB] = $3 ;}
536 | T_SCC '=' number {LIST_ELPMODEL_S.elpModel[elpSCC] = $3 ;}
537 | T_NF '=' number {LIST_ELPMODEL_S.elpModel[elpNF] = $3 ;}
538 | T_NRS '=' number {LIST_ELPMODEL_S.elpModel[elpNRS] = $3 ;}
539 | T_NRD '=' number {LIST_ELPMODEL_S.elpModel[elpNRD] = $3 ;}
540 | T_KT '=' number {LIST_ELPMODEL_S.elpModel[elpKT] = $3 ;}
541 | T_A '=' number {LIST_ELPMODEL_S.elpModel[elpA] = $3 ;}
542 | T_B '=' number {LIST_ELPMODEL_S.elpModel[elpB] = $3 ;}
543 | T_RT '=' number {LIST_ELPMODEL_S.elpModel[elpRT] = $3 ;}
544 | T_KRT '=' number {LIST_ELPMODEL_S.elpModel[elpKRT] = $3 ;}
545 | T_RS '=' number {LIST_ELPMODEL_S.elpModel[elpRS] = $3 ;}
546 | T_KRS '=' number {LIST_ELPMODEL_S.elpModel[elpKRS] = $3 ;}
547 | T_KS '=' number {LIST_ELPMODEL_S.elpModel[elpKS] = $3 ;}
548 | T_KR '=' number {LIST_ELPMODEL_S.elpModel[elpKR] = $3 ;}
549
550 /* les caracteristiques des tensions */
551 | T_VBULK '=' number {LIST_ELPMODEL_S.elpVoltage[elpVBULK] = $3 ;}
552 | T_VDDmax '=' number {LIST_ELPMODEL_S.elpVoltage[elpVDDMAX] = $3 ;
553 if (LIST_ELPMODEL_S.elpVoltage[elpVBULK] < ELPMINVBULK) {
554 if ( LIST_ELPMODEL_S.elpTransType == elpNMOS )
555 LIST_ELPMODEL_S.elpVoltage[elpVBULK] = 0.0;
556 else
557 LIST_ELPMODEL_S.elpVoltage[elpVBULK] = elpGeneral[elpGVDDMAX];
558 }
559 }
560 | T_VDEG '=' number {LIST_ELPMODEL_S.elpVoltage[elpVDEG] = $3 ;}
561 | T_VTI '=' number {LIST_ELPMODEL_S.elpVoltage[elpVTI] = $3 ;}
562 | T_TEMP '=' number {LIST_ELPMODEL_S.elpTemp = $3 ;}
563
564 /* les capacites dynamiques */
565 | T_CGS '=' number {LIST_ELPMODEL_S.elpCapa[elpCGS] = $3 ;
566 if (elpDouble2Long (ELPPRECISION*LIST_ELPMODEL_S.elpCapa[elpCGS0]) == 0)
567 LIST_ELPMODEL_S.elpCapa[elpCGS0] = $3;
568 if (elpDouble2Long (ELPPRECISION*LIST_ELPMODEL_S.elpCapa[elpCGSU]) == 0)
569 LIST_ELPMODEL_S.elpCapa[elpCGSU] = $3;
570 if (elpDouble2Long (ELPPRECISION*LIST_ELPMODEL_S.elpCapa[elpCGSU0]) == 0)
571 LIST_ELPMODEL_S.elpCapa[elpCGSU0] = $3;
572 if (elpDouble2Long (ELPPRECISION*LIST_ELPMODEL_S.elpCapa[elpCGSUMIN]) == 0)
573 LIST_ELPMODEL_S.elpCapa[elpCGSUMIN] = $3;
574 if (elpDouble2Long (ELPPRECISION*LIST_ELPMODEL_S.elpCapa[elpCGSUMAX]) == 0)
575 LIST_ELPMODEL_S.elpCapa[elpCGSUMAX] = $3;
576 if (elpDouble2Long (ELPPRECISION*LIST_ELPMODEL_S.elpCapa[elpCGSD]) == 0)
577 LIST_ELPMODEL_S.elpCapa[elpCGSD] = $3;
578 if (elpDouble2Long (ELPPRECISION*LIST_ELPMODEL_S.elpCapa[elpCGSD0]) == 0)
579 LIST_ELPMODEL_S.elpCapa[elpCGSD0] = $3;
580 if (elpDouble2Long (ELPPRECISION*LIST_ELPMODEL_S.elpCapa[elpCGSDMIN]) == 0)
581 LIST_ELPMODEL_S.elpCapa[elpCGSDMIN] = $3;
582 if (elpDouble2Long (ELPPRECISION*LIST_ELPMODEL_S.elpCapa[elpCGSDMAX]) == 0)
583 LIST_ELPMODEL_S.elpCapa[elpCGSDMAX] = $3;
584 }
585 | T_CGS0 '=' number {LIST_ELPMODEL_S.elpCapa[elpCGS0] = $3 ;}
586 | T_CGSU '=' number {LIST_ELPMODEL_S.elpCapa[elpCGSU] = $3 ;}
587 | T_CGSU0 '=' number {LIST_ELPMODEL_S.elpCapa[elpCGSU0] = $3 ;}
588 | T_CGSUMIN '=' number {LIST_ELPMODEL_S.elpCapa[elpCGSUMIN] = $3 ;}
589 | T_CGSUMAX '=' number {LIST_ELPMODEL_S.elpCapa[elpCGSUMAX] = $3 ;}
590 | T_CGSD '=' number {LIST_ELPMODEL_S.elpCapa[elpCGSD] = $3 ;}
591 | T_CGSD0 '=' number {LIST_ELPMODEL_S.elpCapa[elpCGSD0] = $3 ;}
592 | T_CGSDMIN '=' number {LIST_ELPMODEL_S.elpCapa[elpCGSDMIN] = $3 ;}
593 | T_CGSDMAX '=' number {LIST_ELPMODEL_S.elpCapa[elpCGSDMAX] = $3 ;}
594 | T_CGP '=' number
595 { LIST_ELPMODEL_S.elpCapa[elpCGP] = $3 ;
596 if (elpDouble2Long (ELPPRECISION*LIST_ELPMODEL_S.elpCapa[elpCGPUMIN]) == 0)
597 LIST_ELPMODEL_S.elpCapa[elpCGPUMIN] = $3;
598 if (elpDouble2Long (ELPPRECISION*LIST_ELPMODEL_S.elpCapa[elpCGPUMAX]) == 0)
599 LIST_ELPMODEL_S.elpCapa[elpCGPUMAX] = $3;
600 if (elpDouble2Long (ELPPRECISION*LIST_ELPMODEL_S.elpCapa[elpCGPDMIN]) == 0)
601 LIST_ELPMODEL_S.elpCapa[elpCGPDMIN] = $3;
602 if (elpDouble2Long (ELPPRECISION*LIST_ELPMODEL_S.elpCapa[elpCGPDMAX]) == 0)
603 LIST_ELPMODEL_S.elpCapa[elpCGPDMAX] = $3;
604 }
605 | T_CGPUMIN '=' number {LIST_ELPMODEL_S.elpCapa[elpCGPUMIN] = $3 ;}
606 | T_CGPUMAX '=' number {LIST_ELPMODEL_S.elpCapa[elpCGPUMAX] = $3 ;}
607 | T_CGPDMIN '=' number {LIST_ELPMODEL_S.elpCapa[elpCGPDMIN] = $3 ;}
608 | T_CGPDMAX '=' number {LIST_ELPMODEL_S.elpCapa[elpCGPDMAX] = $3 ;}
609 | T_CGD '=' number {LIST_ELPMODEL_S.elpCapa[elpCGD] = $3 ;}
610 | T_CGD0 '=' number {LIST_ELPMODEL_S.elpCapa[elpCGD0] = $3 ;}
611 | T_CGD1 '=' number {LIST_ELPMODEL_S.elpCapa[elpCGD1] = $3 ;}
612 | T_CGD2 '=' number {LIST_ELPMODEL_S.elpCapa[elpCGD2] = $3 ;}
613 | T_CGDC '=' number {LIST_ELPMODEL_S.elpCapa[elpCGDC] = $3 ;}
614 | T_CGDC0 '=' number {LIST_ELPMODEL_S.elpCapa[elpCGDC0] = $3 ;}
615 | T_CGDC1 '=' number {LIST_ELPMODEL_S.elpCapa[elpCGDC1] = $3 ;}
616 | T_CGDC2 '=' number {LIST_ELPMODEL_S.elpCapa[elpCGDC2] = $3 ;}
617 | T_CGSI '=' number {LIST_ELPMODEL_S.elpCapa[elpCGSI] = $3 ;}
618 | T_CGSIC '=' number {LIST_ELPMODEL_S.elpCapa[elpCGSIC] = $3 ;}
619 | T_CDS '=' number {LIST_ELPMODEL_S.elpCapa[elpCDS] = $3 ;}
620 | T_CDSU '=' number {LIST_ELPMODEL_S.elpCapa[elpCDSU] = $3 ;}
621 | T_CDSD '=' number {LIST_ELPMODEL_S.elpCapa[elpCDSD] = $3 ;}
622 | T_CDP '=' number {LIST_ELPMODEL_S.elpCapa[elpCDP] = $3 ;}
623 | T_CDPU '=' number {LIST_ELPMODEL_S.elpCapa[elpCDPU] = $3 ;}
624 | T_CDPD '=' number {LIST_ELPMODEL_S.elpCapa[elpCDPD] = $3 ;}
625 | T_CDW '=' number {LIST_ELPMODEL_S.elpCapa[elpCDW] = $3 ;}
626 | T_CDWU '=' number {LIST_ELPMODEL_S.elpCapa[elpCDWU] = $3 ;}
627 | T_CDWD '=' number {LIST_ELPMODEL_S.elpCapa[elpCDWD] = $3 ;}
628 | T_CSS '=' number {LIST_ELPMODEL_S.elpCapa[elpCSS] = $3 ;}
629 | T_CSSU '=' number {LIST_ELPMODEL_S.elpCapa[elpCSSU] = $3 ;}
630 | T_CSSD '=' number {LIST_ELPMODEL_S.elpCapa[elpCSSD] = $3 ;}
631 | T_CSP '=' number {LIST_ELPMODEL_S.elpCapa[elpCSP] = $3 ;}
632 | T_CSPU '=' number {LIST_ELPMODEL_S.elpCapa[elpCSPU] = $3 ;}
633 | T_CSPD '=' number {LIST_ELPMODEL_S.elpCapa[elpCSPD] = $3 ;}
634 | T_CSW '=' number {LIST_ELPMODEL_S.elpCapa[elpCSW] = $3 ;}
635 | T_CSWU '=' number {LIST_ELPMODEL_S.elpCapa[elpCSWU] = $3 ;}
636 | T_CSWD '=' number {LIST_ELPMODEL_S.elpCapa[elpCSWD] = $3 ;}
637 | T_NAME_ALIAS '=' name_alias
638 | T_RACCS '=' number {LIST_ELPMODEL_S.elpRacc[elpRACCS] = $3 ;}
639 | T_RACCD '=' number {LIST_ELPMODEL_S.elpRacc[elpRACCD] = $3 ;}
640 ;
641
642 name_alias : T_STRING
643 {
644 LIST_ELPMODEL_S.elpModelNameAlias = addchain (LIST_ELPMODEL_S.elpModelNameAlias,namealloc($1)) ;
645 }
646 | T_STRING ':' name_alias
647 {
648 LIST_ELPMODEL_S.elpModelNameAlias = addchain (LIST_ELPMODEL_S.elpModelNameAlias,namealloc($1)) ;
649 }
650 ;
651
652 oldparam : /* shrink parameters */
653 T_DLN '=' number
654 {
655 getelptrans(elpNMOS) ;
656 LIST_ELPMODEL->elpShrink[elpDL] = $3 ;
657 }
658 | T_DLP '=' number
659 {
660 getelptrans(elpPMOS) ;
661 LIST_ELPMODEL->elpShrink[elpDL] = $3 ;
662 }
663 | T_DWN '=' number
664 {
665 getelptrans(elpNMOS) ;
666 LIST_ELPMODEL->elpShrink[elpDW] = $3 ;
667 }
668 | T_DWP '=' number
669 {
670 getelptrans(elpPMOS) ;
671 LIST_ELPMODEL->elpShrink[elpDW] = $3 ;
672 }
673 | T_LMLT '=' number
674 {
675 getelptrans(elpNMOS) ;
676 LIST_ELPMODEL->elpShrink[elpLMLT] = $3 ;
677 getelptrans(elpPMOS) ;
678 LIST_ELPMODEL->elpShrink[elpLMLT] = $3 ;
679 }
680 | T_WMLT '=' number
681 {
682 getelptrans(elpNMOS) ;
683 LIST_ELPMODEL->elpShrink[elpWMLT] = $3 ;
684 getelptrans(elpPMOS) ;
685 LIST_ELPMODEL->elpShrink[elpWMLT] = $3 ;
686 }
687 /* nom de model de transistor */
688 | T_NNAME '=' T_STRING
689 {
690 if(NNAME != NULL)
691 yyerror() ;
692 NNAME = namealloc($3) ;
693 getelptrans(elpNMOS) ;
694 }
695 | T_PNAME '=' T_STRING
696 {
697 if(PNAME != NULL)
698 yyerror() ;
699 PNAME = namealloc($3) ;
700 getelptrans(elpPMOS) ;
701 }
702 /* Transistors characteristics */
703 | T_VTN '=' number
704 {
705 getelptrans(elpNMOS) ;
706 LIST_ELPMODEL->elpModel[elpVT] = $3 ;
707 }
708 | T_VTP '=' number
709 {
710 getelptrans(elpPMOS) ;
711 LIST_ELPMODEL->elpModel[elpVT] = $3 ;
712 }
713 | T_BN '=' number
714 {
715 getelptrans(elpNMOS) ;
716 LIST_ELPMODEL->elpModel[elpB] = $3 ;
717 }
718 | T_BP '=' number
719 {
720 getelptrans(elpPMOS) ;
721 LIST_ELPMODEL->elpModel[elpB] = $3 ;
722 }
723 | T_AN '=' number
724 {
725 getelptrans(elpNMOS) ;
726 LIST_ELPMODEL->elpModel[elpA] = $3 ;
727 }
728 | T_AP '=' number
729 {
730 getelptrans(elpPMOS) ;
731 LIST_ELPMODEL->elpModel[elpA] = $3 ;
732 }
733 | T_RNT '=' number
734 {
735 getelptrans(elpNMOS) ;
736 LIST_ELPMODEL->elpModel[elpRT] = $3 ;
737 }
738 | T_RPT '=' number
739 {
740 getelptrans(elpPMOS) ;
741 LIST_ELPMODEL->elpModel[elpRT] = $3 ;
742 }
743 /* Degraded Voltage */
744 | T_VDDdeg '=' number
745 {
746 getelptrans(elpNMOS) ;
747 LIST_ELPMODEL->elpVoltage[elpVDEG] = $3 ;
748 LIST_ELPMODEL->elpVoltage[elpVTI] = $3 ;
749 }
750 | T_VSSdeg '=' number
751 {
752 getelptrans(elpPMOS) ;
753 LIST_ELPMODEL->elpVoltage[elpVDEG] = $3 ;
754 LIST_ELPMODEL->elpVoltage[elpVTI] = $3 ;
755 }
756 /* Grid capacitance */
757 | T_CGSN '=' number
758 {
759 getelptrans(elpNMOS) ;
760 LIST_ELPMODEL->elpCapa[elpCGS] = $3 ;
761 LIST_ELPMODEL->elpCapa[elpCGS0] = $3 ;
762 LIST_ELPMODEL->elpCapa[elpCGSU] = $3 ;
763 LIST_ELPMODEL->elpCapa[elpCGSU0] = $3 ;
764 LIST_ELPMODEL->elpCapa[elpCGSD] = $3 ;
765 LIST_ELPMODEL->elpCapa[elpCGSD0] = $3 ;
766 LIST_ELPMODEL->elpCapa[elpCGSUMIN] = $3 ;
767 LIST_ELPMODEL->elpCapa[elpCGSUMAX] = $3 ;
768 LIST_ELPMODEL->elpCapa[elpCGSDMIN] = $3 ;
769 LIST_ELPMODEL->elpCapa[elpCGSDMAX] = $3 ;
770 }
771 | T_CGSP '=' number
772 {
773 getelptrans(elpPMOS) ;
774 LIST_ELPMODEL->elpCapa[elpCGS] = $3 ;
775 LIST_ELPMODEL->elpCapa[elpCGS0] = $3 ;
776 LIST_ELPMODEL->elpCapa[elpCGSU] = $3 ;
777 LIST_ELPMODEL->elpCapa[elpCGSU0] = $3 ;
778 LIST_ELPMODEL->elpCapa[elpCGSD] = $3 ;
779 LIST_ELPMODEL->elpCapa[elpCGSD0] = $3 ;
780 LIST_ELPMODEL->elpCapa[elpCGSUMIN] = $3 ;
781 LIST_ELPMODEL->elpCapa[elpCGSUMAX] = $3 ;
782 LIST_ELPMODEL->elpCapa[elpCGSDMIN] = $3 ;
783 LIST_ELPMODEL->elpCapa[elpCGSDMAX] = $3 ;
784 }
785 | T_CGPN '=' number
786 {
787 getelptrans(elpNMOS) ;
788 LIST_ELPMODEL->elpCapa[elpCGP] = $3 ;
789 LIST_ELPMODEL->elpCapa[elpCGPUMIN] = $3 ;
790 LIST_ELPMODEL->elpCapa[elpCGPUMAX] = $3 ;
791 LIST_ELPMODEL->elpCapa[elpCGPDMIN] = $3 ;
792 LIST_ELPMODEL->elpCapa[elpCGPDMAX] = $3 ;
793 }
794 | T_CGPP '=' number
795 {
796 getelptrans(elpPMOS) ;
797 LIST_ELPMODEL->elpCapa[elpCGP] = $3 ;
798 LIST_ELPMODEL->elpCapa[elpCGPUMIN] = $3 ;
799 LIST_ELPMODEL->elpCapa[elpCGPUMAX] = $3 ;
800 LIST_ELPMODEL->elpCapa[elpCGPDMIN] = $3 ;
801 LIST_ELPMODEL->elpCapa[elpCGPDMAX] = $3 ;
802 }
803 /* Drain capacitance */
804 | T_CDSN '=' number
805 {
806 getelptrans(elpNMOS) ;
807 LIST_ELPMODEL->elpCapa[elpCDS] = $3 ;
808 LIST_ELPMODEL->elpCapa[elpCDSU] = $3 ;
809 LIST_ELPMODEL->elpCapa[elpCDSD] = $3 ;
810 }
811 | T_CDSP '=' number
812 {
813 getelptrans(elpPMOS) ;
814 LIST_ELPMODEL->elpCapa[elpCDS] = $3 ;
815 LIST_ELPMODEL->elpCapa[elpCDSU] = $3 ;
816 LIST_ELPMODEL->elpCapa[elpCDSD] = $3 ;
817 }
818 | T_CDPN '=' number
819 {
820 getelptrans(elpNMOS) ;
821 LIST_ELPMODEL->elpCapa[elpCDP] = $3 ;
822 LIST_ELPMODEL->elpCapa[elpCDPU] = $3 ;
823 LIST_ELPMODEL->elpCapa[elpCDPD] = $3 ;
824 }
825 | T_CDPP '=' number
826 {
827 getelptrans(elpPMOS) ;
828 LIST_ELPMODEL->elpCapa[elpCDP] = $3 ;
829 LIST_ELPMODEL->elpCapa[elpCDPU] = $3 ;
830 LIST_ELPMODEL->elpCapa[elpCDPD] = $3 ;
831 }
832 | T_CDWN '=' number
833 {
834 getelptrans(elpNMOS) ;
835 LIST_ELPMODEL->elpCapa[elpCDW] = $3 ;
836 LIST_ELPMODEL->elpCapa[elpCDWU] = $3 ;
837 LIST_ELPMODEL->elpCapa[elpCDWD] = $3 ;
838 }
839 | T_CDWP '=' number
840 {
841 getelptrans(elpPMOS) ;
842 LIST_ELPMODEL->elpCapa[elpCDW] = $3 ;
843 LIST_ELPMODEL->elpCapa[elpCDWU] = $3 ;
844 LIST_ELPMODEL->elpCapa[elpCDWD] = $3 ;
845 }
846 /* Source capacitance */
847 | T_CSSN '=' number
848 {
849 getelptrans(elpNMOS) ;
850 LIST_ELPMODEL->elpCapa[elpCSS] = $3 ;
851 LIST_ELPMODEL->elpCapa[elpCSSU] = $3 ;
852 LIST_ELPMODEL->elpCapa[elpCSSD] = $3 ;
853 }
854 | T_CSSP '=' number
855 {
856 getelptrans(elpPMOS) ;
857 LIST_ELPMODEL->elpCapa[elpCSS] = $3 ;
858 LIST_ELPMODEL->elpCapa[elpCSSU] = $3 ;
859 LIST_ELPMODEL->elpCapa[elpCSSD] = $3 ;
860 }
861 | T_CSPN '=' number
862 {
863 getelptrans(elpNMOS) ;
864 LIST_ELPMODEL->elpCapa[elpCSP] = $3 ;
865 LIST_ELPMODEL->elpCapa[elpCSPU] = $3 ;
866 LIST_ELPMODEL->elpCapa[elpCSPD] = $3 ;
867 }
868 | T_CSPP '=' number
869 {
870 getelptrans(elpPMOS) ;
871 LIST_ELPMODEL->elpCapa[elpCSP] = $3 ;
872 LIST_ELPMODEL->elpCapa[elpCSPU] = $3 ;
873 LIST_ELPMODEL->elpCapa[elpCSPD] = $3 ;
874 }
875 | T_CSWN '=' number
876 {
877 getelptrans(elpNMOS) ;
878 LIST_ELPMODEL->elpCapa[elpCSW] = $3 ;
879 LIST_ELPMODEL->elpCapa[elpCSWU] = $3 ;
880 LIST_ELPMODEL->elpCapa[elpCSWD] = $3 ;
881 }
882 | T_CSWP '=' number
883 {
884 getelptrans(elpPMOS) ;
885 LIST_ELPMODEL->elpCapa[elpCSW] = $3 ;
886 LIST_ELPMODEL->elpCapa[elpCSWU] = $3 ;
887 LIST_ELPMODEL->elpCapa[elpCSWD] = $3 ;
888 }
889 ;
890
891 %%
892 extern char *elptext ;
893 extern int ELPLINE ;
894
895 void getelptrans(type)
896 int type ;
897 {
898
899 for (LIST_ELPMODEL = ELP_MODEL_LIST ; LIST_ELPMODEL ; LIST_ELPMODEL = LIST_ELPMODEL->NEXT ) {
900 if ((LIST_ELPMODEL->elpTransType) == type)
901 break ;
902 }
903
904 if(LIST_ELPMODEL == NULL)
905 {
906 if ((type == elpNMOS) && (NNAME == NULL))
907 {
908 NNAME = namealloc("TN") ;
909 }
910
911 if ((type == elpPMOS) && (PNAME == NULL))
912 {
913 PNAME = namealloc("TP") ;
914 }
915
916 LIST_ELPMODEL = elpAddModel((type == elpNMOS) ? NNAME : PNAME, NULL,
917 type, elpNOINDEX,(long)0,ELPMAXLONG,(long)0,ELPMAXLONG,
918 0.0,0.0,1.0,1.0,ELPMINVOLTAGE,elpTYPICAL, 0,
919 1.0,0.0,ELPINITVALUE,ELPINITVALUE,ELPINITVALUE,ELPINITVALUE,1.0,0.0,0.0,ELPINITVBULK,ELPINITVALUE,ELPINITVALUE,ELPINITVALUE,ELPINITVALUE,NULL) ;
920 }
921 }
922
923 int yyerror()
924
925 {
926 elpError(1001,elptext,ELPLINE) ; /* si erreur de syntaxe => erreur 1001 */
927 return (0) ;
928 }