Initial version of donated sources by Avertec, 3.4p5.
[tas-yagle.git] / distrib / sources / elp / elp_lib.h
1 /****************************************************************************/
2 /* */
3 /* Chaine de CAO & VLSI Alliance */
4 /* */
5 /* Produit : ELP Verison 1 */
6 /* Fichier : elp110.h */
7 /* */
8 /* (c) copyright 1991-1995 Laboratoire MASI equipe CAO & VLSI */
9 /* Tous droits reserves */
10 /* Support : e-mail cao-vlsi@masi.ibp.fr */
11 /* */
12 /* Auteur(s) : Payam KIANI */
13 /* */
14 /****************************************************************************/
15
16 #ifndef ELP
17 #define ELP
18
19 /* les inclusions */
20 #include <stdio.h>
21 #include <stdlib.h>
22 #include <math.h>
23 #include <string.h>
24 #include MUT_H
25 #include MLO_H
26 #include RCN_H
27 #include CNS_H
28
29 /* les definitions */
30 //extern int ELP_CAPA_LEVEL;
31 //extern int ELP_DRV_FILE;
32 extern int ELP_LOAD_FILE_TYPE;
33 extern int ELP_GENPARAM ;
34 //extern double ELP_MULU0_MARGIN;
35 //extern double ELP_DELVT0_MARGIN;
36 //extern double ELP_SA_MARGIN;
37 //extern double ELP_SB_MARGIN;
38 //EXTErn double ELP_SD_MARGIN;
39 extern double ELP_NF_MARGIN;
40 extern double ELP_M_MARGIN;
41 extern double ELP_NRS_MARGIN;
42 extern double ELP_NRD_MARGIN;
43
44 #define ELP_LOTRS_MODEL ((long) 0x70000000 ) // the lotrs will contain its elpmodel
45
46 #define elpBADLW -1.0
47
48 #define elperrorFCT /* identification des fonctions du fichier elperror.c */
49 #define elpFCT /* identification des fonctions du fichier elp.c */
50
51 extern char elpLang ;
52 #define elpSTRINGSIZE 256 /* taille des chaines de caracteres */
53 #define elpENGLISH 'E' /* langue anglaise */
54 #define elpFRENCH 'F' /* langue francaise */
55 #define elpDEFLANG elpENGLISH /* langue par defaut */
56
57 /* les informations sur la technologie utilisee */
58 extern char elpTechnoName[elpSTRINGSIZE] ;
59 extern char elpTechnoFile[elpSTRINGSIZE] ;
60 extern char elpGenTechnoFile[elpSTRINGSIZE] ;
61 extern double elpTechnoVersion ;
62 extern char *elpoldtechnofilename;
63 extern int elpres_load;
64
65 /* les parametres du simulateur electrique */
66 extern char elpEsimName[elpSTRINGSIZE] ;
67
68 /* les parametres generaux */
69 #define elpGENERALNUM 9 /* nombre de parametres du tableau General */
70 extern double elpGeneral[elpGENERALNUM] ;
71 #define elpACM 0 /* Area Calulation Mode: affecte RLEV et ALEV pour AD,AS,PS,PD methode de calcul des capacites dynamiques */
72 #define elpTEMP 1 /* temperature de simulation et d'analyse */
73 #define elpSLOPE 2 /* front sur les connecteurs d'entree */
74 #define elpGVDDMAX 3 /* tension d'alim general */
75 #define elpGVDDBEST 4 /* tension d'alim general best corner */
76 #define elpGVDDWORST 5 /* tension d'alim general worst corner */
77 #define elpGDTHR 6 /* seuil general */
78 #define elpGSHTHR 7 /* seuil front HAUT */
79 #define elpGSLTHR 8 /* seuil front BAS */
80
81 #define ELPMINVOLTAGE (double)(-1.0)
82 #define ELPINITTHR (double)(-1.0)
83 #define ELPINITTEMP (double)(-1000.0)
84 #define ELPMINTEMP (double)(-274.0)
85 #define ELPINITVBULK (double)(-100.0)
86 #define ELPMINVBULK (double)(-90.0)
87 #define ELPPRECISION (double)(1.0e6)
88 #define ELPPRECISION2 (double)(1.0e12)
89 #define ELPINITVALUE (double)(1.0e-31)
90 #define ELPMINVALUE (double)(1.0e-30)
91
92 #define elpVoltage4UnusedLotrs (double)(1.0e-3)
93
94 /* types de transistors */
95 #define elpTRANSNUM 3 /* nombre de type de transistor */
96 #define elpNMOS 0 /* pour les parametres du NMOS */
97 #define elpPMOS 1 /* pour les parametres du PMOS */
98 #define elpUNKNOWN 2 /* */
99
100 /* types de transistors */
101 #define elpSLOPENUM 2 /* nombre de type de front */
102 #define elpRISE 0 /* pour les parametres du RISE */
103 #define elpFALL 1 /* pour les parametres du FALL */
104
105 /* les parametres du shrink du transistor */
106 #define elpSHRINKNUM 7 /* nombre de parametres du tableau Shrink */
107 #define elpLMLT 0 /* parametre multiplicatif de la longueur */
108 #define elpWMLT 1 /* parametre multiplicatif de la largeur */
109 #define elpDL 2 /* parametre de reduction de la longueur NMOS */
110 #define elpDW 3 /* parametre de reduction de la largeur NMOS */
111 #define elpDLC 4 /* parametre de reduction de la longueur NMOS */
112 #define elpDWC 5 /* parametre de reduction de la largeur NMOS */
113 #define elpDWCJ 6 /* parametre de reduction de la largeur NMOS */
114
115 /* les parametres de validité du model */
116 #define elpRANGENUM 4 /* nombre de parametres du tableau range */
117 #define elpLMIN 0 /* longueur min */
118 #define elpLMAX 1 /* longueur max */
119 #define elpWMIN 2 /* largeur min */
120 #define elpWMAX 3 /* largeur max */
121
122 /* les parametres du modele des transistors (modele MCC) */
123 #define elpMULU0 0 /* facteur de mobilite */
124 #define elpDELVT0 1 /* shrink du vth */
125 #define elpSA 2 /* specific instance for bs43 */
126 #define elpSB 3 /* specific instance for bs43 */
127 #define elpSD 4 /* specific instance for bs43 */
128 #define elpNF 5 /* specific instance, number of finger */
129 #define elpM 6 /* number of parallel transistors */
130 #define elpNRS 7 /* number of squares 4 source resistance */
131 #define elpNRD 8 /* number of squares 4 drain resistance */
132 #define elpSC 9 /* number of squares 4 drain resistance */
133 #define elpSCA 10 /* number of squares 4 drain resistance */
134 #define elpSCB 11 /* number of squares 4 drain resistance */
135 #define elpSCC 12 /* number of squares 4 drain resistance */
136 /*-----------------------------------------------------------------*\
137 * CAUTION: All specific instance parameters defines must be declared
138 before elpVT
139 \*-----------------------------------------------------------------*/
140 #define elpVT 13 /* tension de seuil */
141 #define elpA 14 /* parametre A */
142 #define elpB 15 /* parametre B */
143 #define elpRT 16 /* resistance en mode lineaire */
144 #define elpRS 17 /* resistance en mode saturé */
145 #define elpKT 18 /* resistance en mode saturé */
146 #define elpKS 19 /* resistance en mode saturé */
147 #define elpKR 20 /* resistance en mode saturé */
148 #define elpKRT 21 /* vlin=krt*vdd */
149 #define elpKRS 22 /* vsat=krs*vdd */
150 #define elpVT0 23 /* VT techno */
151 #define elpMODELNUM 24 /* nombre de parametres pour chaque modele */
152
153 /* les parametres du type et du nom de model */
154 #define elpMOS 0 /* type de model de transistor mosfet */
155
156 /* les parametres du type et du nom de model */
157 #define elpNOINDEX -1 /* pas d'index */
158
159 /* les parametres max ou min | best typical worst */
160 #define elpWORST 0 /* delai max */
161 #define elpBEST 1 /* delai min */
162 #define elpTYPICAL 2 /* tous les delais */
163
164 /* les parametres definissant les tensions */
165 #define elpVOLTNUM 4 /* nombre d'elements du tableau Voltage */
166 #define elpVDEG 0 /* tension du niveau degrade haut */
167 #define elpVDDMAX 1 /* Tension d'alimentation */
168 #define elpVBULK 2 /* Tension du bulk */
169 #define elpVTI 3 /* tension intermediaire dans 1 branche */
170
171 /* les parametres definissant les capacites dynamiques */
172 #define elpCGS 0 /* capacite grille contribution en surface */
173 #define elpCGS0 1 /* capacite grille contribution en surface pour vds=0 */
174 #define elpCGSU 2 /* capacite grille contribution en surface for up transistion*/
175 #define elpCGSU0 3 /* capacite grille contribution en surface for up transistion pour vds=0*/
176 #define elpCGSUMIN 4 /* capacite grille contribution en surface for up transistion*/
177 #define elpCGSUMAX 5 /* capacite grille contribution en surface for up transistion*/
178 #define elpCGSD 6 /* capacite grille contribution en surface for down transition*/
179 #define elpCGSD0 7 /* capacite grille contribution en surface for down transition pour vds=0*/
180 #define elpCGSDMIN 8 /* capacite grille contribution en surface for down transition*/
181 #define elpCGSDMAX 9 /* capacite grille contribution en surface for down transition*/
182 #define elpCGP 10 /* capacite grille contribution en perimetre */
183 #define elpCGPUMIN 11 /* capacite grille contribution en perimetre */
184 #define elpCGPUMAX 12 /* capacite grille contribution en perimetre */
185 #define elpCGPDMIN 13 /* capacite grille contribution en perimetre */
186 #define elpCGPDMAX 14 /* capacite grille contribution en perimetre */
187 #define elpCGD 15 /* capacite grille drain surfacique */
188 #define elpCGDC 16 /* capacite grille drain surfacique conflit */
189 #define elpCGSI 17 /* capacite grille drain surfacique */
190 #define elpCGSIC 18 /* capacite grille drain surfacique conflit */
191 #define elpCDS 19 /* capacite drain contribution en surface */
192 #define elpCDSU 20 /* capacite drain contribution en surface */
193 #define elpCDSD 21 /* capacite drain contribution en surface */
194 #define elpCDP 22 /* capacite drain contribution en perimetre */
195 #define elpCDPU 23 /* capacite drain contribution en perimetre */
196 #define elpCDPD 24 /* capacite drain contribution en perimetre */
197 #define elpCDW 25 /* capacite drain contribution en largeur */
198 #define elpCDWU 26 /* capacite drain contribution en largeur */
199 #define elpCDWD 27 /* capacite drain contribution en largeur */
200 #define elpCSS 28 /* capacite source contribution en surface */
201 #define elpCSSU 29 /* capacite source contribution en surface */
202 #define elpCSSD 30 /* capacite source contribution en surface */
203 #define elpCSP 31 /* capacite source contribution en perimetre */
204 #define elpCSPU 32 /* capacite source contribution en perimetre */
205 #define elpCSPD 33 /* capacite source contribution en perimetre */
206 #define elpCSW 34 /* capacite source contribution en largeur */
207 #define elpCSWU 35 /* capacite source contribution en largeur */
208 #define elpCSWD 36 /* capacite source contribution en largeur */
209 #define elpCGPO 37
210 #define elpCGPOC 38
211 #define elpCGSUF 39
212 #define elpCGSDF 40
213 #define elpCGD0 41
214 #define elpCGD1 42
215 #define elpCGD2 43
216 #define elpCGDC0 44
217 #define elpCGDC1 45
218 #define elpCGDC2 46
219 #define elpCAPANUM 47 /* nombre de capacites carrees */
220
221 /* Les parametres pour le calcul de la résistance en petits signaux */
222 #define elpRSSNUM 3 /* Nombre de parametres */
223 #define elpRSSL 0 /* Coefficient du L */
224 #define elpRSSC 1 /* Constante */
225 #define elpRSSW 2 /* Coefficient du W */
226
227 /* Parameter for access resistance */
228 #define elpRACCNUM 2 /* Number of parameter */
229 #define elpRACCS 0 /* access drain resistance */
230 #define elpRACCD 1 /* access drain resistance */
231
232 #define ELPMAXLONG (long)(0x7FFFFFFF)
233
234 #define elpNoTechno 0
235 #define elpBSIM3V3 1
236 #define elpBSIM4 2
237 #define elpPSP 3
238 #define elpMOS2 4
239 #define elpMM9 5
240 #define elpEXTMOD 6
241
242 extern char *elpTabTechnoName[];
243
244 typedef struct elpmodel
245 {
246 struct elpmodel *NEXT ;
247 int elpModelIndex ; /* Index du Model */
248 int elpTransType ; /* NMOS PMOS */
249 int elpTransModel ; /* MOS */
250 int elpTransIndex ; /* INDEX */
251 int elpTransCase ; /* BEST WORST TYPICAL */
252 int elpTransTechno ;
253 char *elpModelName ; /* NOM */
254 chain_list *elpModelNameAlias; /* Alias de nom */
255 double elpShrink[elpSHRINKNUM] ; /* DL DW LMLT WMLT */
256 long elpRange[elpRANGENUM] ; /* LMIN LMAX WMIN WMAX */
257 double elpModel[elpMODELNUM] ; /* A B RT VT RS */
258 double elpVoltage[elpVOLTNUM] ; /* VDDMAX VDEG */
259 double elpTemp ; /* TEMP */
260 double elpCapa[elpCAPANUM] ; /* CAPA */
261 int elpSWJUNCAP ; /* junction capacitance model (psp only) */
262 double elpRss[elpRSSNUM]; /* RSSL RSSC RSSW */
263 double elpRacc[elpRACCNUM]; /* RS and RD */
264 chain_list *longkey;
265 }
266 elpmodel_list;
267
268 #define elpNameLevel (long)0
269 #define elpLengthLevel (long)1
270 #define elpWidthLevel (long)2
271 #define elpVDDLevel (long)3
272 #define elpMULU0Level (long)4
273 #define elpDELVT0Level (long)5
274 #define elpSALevel (long)6
275 #define elpSBLevel (long)7
276 #define elpSDLevel (long)8
277 #define elpNFLevel (long)9
278 #define elpVBULKLevel (long)10
279 #define elpMLevel (long)11
280 #define elpNRSLevel (long)12
281 #define elpNRDLevel (long)13
282 #define elpSCLevel (long)14
283 #define elpSCALevel (long)15
284 #define elpSCBLevel (long)16
285 #define elpSCCLevel (long)17
286
287 #if 1
288 // activation du paramcontext pour le share des modeles
289 #define elpParamContextLevel (long)18
290 #define elpCaseLevel (long)19
291 #else
292 // desactivation du paramcontext pour le share des modeles
293 #define elpParamContextLevel (long)19
294 #define elpCaseLevel (long)18
295 #endif
296
297 #define ELP_APPROX_EXCLUDE_FOR_KEY
298
299
300 /* defines of different kind of input capacitances */
301 #define ELP_CAPA_LEVEL0 (int)0 // 1 capa : - CGS
302 #define ELP_CAPA_LEVEL1 (int)1 // 2 capas : - CGSU & CGSD => CGS = (CGSU+CGSD)/2
303 #define ELP_CAPA_LEVEL2 (int)2 // 6 capas : - CGSU & CGSD => CGS = (CGSU+CGSD)/2
304 // - CGSUMIN & CGSUMAX
305 // - CGSDMIN & CGSDMAX
306
307 #define ELP_CAPA_TYPICAL (int)0 // (cgu + cgd) / 2.0
308 #define ELP_CAPA_UP (int)1 // cgu computed for input transition [0:vdd/2]
309 #define ELP_CAPA_UP_MIN (int)2 // cgu computed for input transition [10%:90%]
310 #define ELP_CAPA_UP_MAX (int)3 // cgu computed for input transition [10%:90%]
311 #define ELP_CAPA_DN (int)4 // cgd computed for input transition [0:vdd/2]
312 #define ELP_CAPA_DN_MIN (int)5 // cgd computed for input transition [10%:90%]
313 #define ELP_CAPA_DN_MAX (int)6 // cgd computed for input transition [10%:90%]
314 #define ELP_CAPA_UPF (int)7 // cgu computed for input transition [0:vdd/2]
315 #define ELP_CAPA_DNF (int)8 // cgu computed for input transition [0:vdd/2]
316
317 #define ELP_NOCAPA ((float)-3.14159e11)
318 #define ELP_LOFIG_TABCAPA 20021108
319 #define ELP_CAPASWITCH 20040924
320
321 #define ELP_LOFIG_CAPAS_ID (long)(0x77700007) // to know if the lofig was already annoted
322 // with the elpCapaGrid and elpCapaDiff
323
324 #define ELP_LOADELP_FILE (int)0
325 #define ELP_DONTLOAD_FILE (int)1
326 #define ELP_DEFAULTLOAD_FILE (int)2
327
328 struct elpcapa {
329 int NBSIG;
330 float *TAB;
331 float *TAB_UP;
332 float *TAB_UP_MIN;
333 float *TAB_UP_MAX;
334 float *TAB_DN;
335 float *TAB_DN_MIN;
336 float *TAB_DN_MAX;
337 };
338
339
340 typedef struct elpcapaswitch
341 {
342 float CUP;
343 float CUPMIN;
344 float CUPMAX;
345 float CDN;
346 float CDNMIN;
347 float CDNMAX;
348 }
349 elpcapaswitch_list;
350
351 /* tree structure of elp model to speed the research */
352 typedef struct elptree
353 {
354 struct elptree *NEXT ;
355 long DATA1 ;
356 long DATA2 ;
357 int LEVEL ;
358 void *DOWN ;
359 }
360 elptree_list;
361
362 /* les parametres definissant les parametres specifiques des instances du lotrs*/
363 #define elpPARAMNUM 13 /* nombre d'elements specifiques des instances du lotrs*/
364
365 enum mcc_saved_enum
366 {
367 __MCC_SAVED_VTH0,
368 __MCC_SAVED_K2,
369 __MCC_SAVED_VFB,
370 __MCC_LAST_VBS,
371 __MCC_LAST_VGS,
372 __MCC_LAST_VDS,
373 __MCC_SAVED_VTHFINAL,
374 __MCC_LAST_VBSEFF,
375 __MCC_LAST_VGSTEFF,
376 __MCC_SAVED_VDSAT,
377 __MCC_SAVED_ESAT,
378 __MCC_SAVED_UEFFT,
379 __MCC_SAVED_ABULK,
380 __MCC_SAVED_RDS,
381 __MCC_SAVED_VSATT,
382 __MCC_SAVED_LAMBDA,
383 __MCC_SAVED_RFACTOR,
384 __MCC_SAVED_WEFFV,
385 __MCC_SAVED_VTHFINAL_UNBIAS,
386 __MCC_SAVED_NEED_STRESS,
387 __MCC_LAST_VBS_FORVBSEFF,
388 __MCC_SAVED_VBSEFF,
389 __MCC_SAVED_CALC_THETA0,
390 __MCC_SAVED_CALC_DELT_VTH,
391 __MCC_SAVED_CALC_DELT_VTHW,
392 __MCC_SAVED_CALC_DIBL_SFT_DVD,
393 __MCC_SAVED_CALC_DVTH0T,
394 __MCC_LAST_SAVED
395 };
396
397 typedef struct {
398 double PARAM[elpPARAMNUM];
399 double VBULK;
400 double VBS;
401 char ISVBSSET;
402 chain_list *longkey;
403 double MCC_SAVED[__MCC_LAST_SAVED];
404 char *SUBCKTNAME;
405 } elp_lotrs_param;
406
407 /* liste des modeles */
408 extern int ELPLINE ;
409
410 /* liste des modeles */
411 extern elpmodel_list *ELP_MODEL_LIST ;
412 extern elptree_list *ELP_HEAD_TREE ;
413 extern FILE *elpin ;
414 extern int ELP_CALC_ONLY_CAPA;
415
416 // Modification de la netlist
417 #define ELP_HACK_NONE 0
418 #define ELP_HACK_FIX_CAPA_TO_GND 1
419 #define ELP_HACK_FIX_CAPA 2
420
421 /* les fonctions externes */
422 extern int elpDouble2int (double value);
423 extern long elpDouble2Long (double value);
424 extern elpmodel_list *elpAddModel (char *name,
425 chain_list *name_alias,
426 int type,
427 int index,
428 long lmin,
429 long lmax,
430 long wmin,
431 long wmax,
432 double dl,
433 double dw,
434 double ml,
435 double mw,
436 double vdd,
437 int trcase,
438 int trlevel,
439 double mulu0,
440 double delvt0,
441 double sa,
442 double sb,
443 double sd,
444 double nf,
445 double m,
446 double nrs,
447 double nrd,
448 double vbulk,
449 double sc,
450 double sca,
451 double scb,
452 double scc,
453 chain_list *longkey);
454 extern short elpError (short errnum, ...);
455 extern elptree_list *elpBuiltTreeModel (elptree_list *head,
456 elpmodel_list *model,
457 int level);
458 extern void elpFreeTreeModel (elptree_list *head,
459 int level);
460 extern void elpPrintTreeModel (elptree_list *head,
461 int level);
462 extern elpmodel_list *elpSearchOrGenModel (lotrs_list *lotrs,
463 double vdd,
464 int transcase,
465 double mulu0,
466 double delvt0,
467 double sa,
468 double sb,
469 double sd,
470 double nf,
471 double m,
472 double nrs,
473 double nrd,
474 double vbulk,
475 double sc,
476 double sca,
477 double scb,
478 double scc
479 );
480 extern elpmodel_list *elpGetModelWithLotrsParams (lotrs_list *lotrs,
481 elp_lotrs_param *params,
482 double vdd,
483 int transcase);
484 extern elpmodel_list *elpGetModel (lotrs_list *lotrs,
485 double vdd,
486 int transcase);
487 extern elpmodel_list *elpGetParamModel (char *name,
488 double l,
489 double w,
490 char type,
491 double vdd,
492 int transcase,
493 elp_lotrs_param *params);
494 extern elpmodel_list *elpGetModelType (char typet);
495 extern elpmodel_list *elpGetModelIndex (int index);
496 extern int elpenv (void);
497 extern int elpVerifModel (elpmodel_list *model);
498 extern short elpLoadElp (void);
499 extern void elpDriveElp (char *filename);
500 extern void elpLotrsShrink (lotrs_list *lotrs,int transcase);
501 extern float elpLotrsCapaDrain (lotrs_list *lotrs,int capatype,int transcase);
502 extern float elpLotrsCapaSource (lotrs_list *lotrs,int capatype,int transcase);
503 extern float elpLotrsCapaGrid (lotrs_list *lotrs,int transcase);
504 extern float elpLotrsInCapa (lofig_list *lofig, lotrs_list *lotrs, int capatype, int transcase, int correct );
505 extern void elpLofigCapaDiff (lofig_list *lofig,int transcase);
506 extern void elpLofigAddCapas (lofig_list *lofig,int transcase);
507 extern void elpLofigCapaGrid (lofig_list *lofig, int transcase);
508 extern double elpLotrsResiCanal (lotrs_list *lotrs, int transcase);
509 extern void elpLofigShrink (lofig_list *lofig,int transcase);
510 extern double elpScm2Thr (double f,
511 double smin,
512 double smax,
513 double Vt,
514 double Vfinal,
515 double Vdd,
516 int type);
517 extern double elpThr2Scm (double f,
518 double smin,
519 double smax,
520 double Vt,
521 double Vfinal,
522 double Vdd,
523 int type);
524 extern void (*elpSetDefaultParam) ( void );
525 extern void elpdefaultfct2 ( void );
526 extern void elpSetFct2 (void (*f)(void));
527 extern void (*elpGenParam) (char *tname,
528 int type,
529 double l,
530 double w,
531 double vdd,
532 lotrs_list *lotrs,
533 int transcase,
534 elp_lotrs_param *ptmodel_inst);
535 extern void elpdefault (char* tname,
536 int type,
537 double l,
538 double w,
539 double vdd,
540 lotrs_list *lotrs,
541 int transcase,
542 elp_lotrs_param *ptmodel_inst);
543 extern void elpSetFct (void (*f)(char* p0,
544 int p1,
545 double p2,
546 double p3,
547 double p4,
548 lotrs_list *lotrs,
549 int transcase,
550 elp_lotrs_param *ptmodel_inst));
551 extern double (*elpCalcIleak)(char* tname, int type, double l, double w,
552 lotrs_list *lotrs, int transcase,
553 double vgs, double vds, double vbs,
554 double AD, double PD, double AS, double PS,
555 double *BLeak, double *DLeak, double *SLeak,
556 elp_lotrs_param *ptlotrs_param) ;
557
558 extern double elpLeakDfltFct (char* tname,
559 int type,
560 double l,
561 double w,
562 lotrs_list *lotrs,
563 int transcase,
564 double vgs,
565 double vds,
566 double vbs,
567 double AD,
568 double PD,
569 double AS,
570 double PS,
571 double *BLeak,
572 double *DLeak,
573 double *SLeak,
574 elp_lotrs_param *ptmodel_inst);
575 extern void elpSetLeakFct (double (*f)(char* p0,
576 int p1,
577 double p2,
578 double p3,
579 lotrs_list *lotrs,
580 int transcase,
581 double p4,
582 double p5,
583 double p6,
584 double p7,
585 double p8,
586 double p9,
587 double p10,
588 double *Bleak,
589 double *Dleak,
590 double *Sleak,
591 elp_lotrs_param *ptmodel_inst));
592 extern int elpLoadOnceElp (void);
593 extern float elpGetCapaFromLocon (locon_list *locon, int capatype, int transcase);
594 extern float elpGetCapaSig (lofig_list *lofig,
595 losig_list *losig,
596 int type);
597 extern float elpGetTotalCapaSig (lofig_list *lofig,
598 losig_list *losig,
599 int type);
600 extern void elpSetCapaSig (lofig_list *lofig,
601 losig_list *losig,
602 float capa,
603 int type);
604 extern char elpIsCapaSig (lofig_list *lofig,
605 losig_list *losig,
606 int type);
607 extern float elpAddCapaSig (lofig_list *lofig,
608 losig_list *losig,
609 float capa,
610 int type);
611 extern void elpFreeCapaLofig (lofig_list *lofig);
612 extern void elpLofigUnShrink (lofig_list *lofig, int transcase);
613 extern void elpLotrsUnShrink (lotrs_list *lotrs, int transcase);
614 extern void elpLotrsGetUnShrinkDim (lotrs_list *lotrs,
615 long length,
616 long width,
617 long *length_s,
618 long *width_s,
619 int transcase);
620 extern void elpLotrsGetShrinkDim (lotrs_list *lotrs,
621 long *length_s,
622 long *width_s,
623 long *xs_s,
624 long *xd_s,
625 long *ps_s,
626 long *pd_s,
627 long *ptlactive,
628 long *ptwactive,
629 int transcase
630 );
631 extern void elpGetDeltaShrinkWidth (lotrs_list *lotrs,
632 long *ptdeff,
633 long *ptdactive,
634 long *ptwmlt,
635 int transcase
636 );
637 extern long elpGetShrinkedLength (lotrs_list *lotrs,
638 elpmodel_list *model);
639 extern long elpGetShrinkedWidth (lotrs_list *lotrs,
640 elpmodel_list *model);
641 extern elp_lotrs_param *elp_lotrs_param_alloc (void);
642 extern void elp_lotrs_param_free (elp_lotrs_param *ptmodel_inst);
643 extern elp_lotrs_param *elp_lotrs_param_create (lotrs_list *lotrs);
644 extern elp_lotrs_param *elp_lotrs_param_dup ( elp_lotrs_param *src );
645 extern void elp_lotrs_param_get (lotrs_list *lotrs,
646 double *ptmulu0,
647 double *ptdelvt0,
648 double *ptsa,
649 double *ptsb,
650 double *ptsd,
651 double *ptnf,
652 double *ptm,
653 double *ptnrs,
654 double *ptnrd,
655 double *ptvbulk,
656 double *ptsc,
657 double *ptsca,
658 double *ptscb,
659 double *ptscc
660 );
661 extern int elp_is_valcomprise ( long val1,
662 long val2,
663 double precision );
664 extern double elp_scale_vth ( lotrs_list *lotrs, elpmodel_list *model );
665 extern double elp_scale_a ( lotrs_list *lotrs, elpmodel_list *model );
666 extern void elpDriveOneModel (FILE *file, elpmodel_list *model);
667 extern void elpDriveModel (char *filename, elpmodel_list *model);
668 extern void elp_addlotrsalim(lotrs_list *lotrs, alim_list *alim);
669 extern int elp_dellotrsalim(lotrs_list *lotrs);
670 extern int elp_getlotrsalim(lotrs_list *lotrs, char type, float *alim);
671 extern void elpDelModel2Lotrs (lotrs_list *lotrs);
672 extern int elpSetModel2Lotrs (elpmodel_list *model, lotrs_list *lotrs);
673 extern elpmodel_list *elpGetModelFromLotrs (lotrs_list *lotrs);
674 extern double elpGetVddFromCorner ( lotrs_list *lotrs, int corner );
675 extern double elpCalcIleakage( lotrs_list *lotrs,
676 int lotrstype,
677 int transcase,
678 double vgs, double vds, double vbs,
679 double *BLeak, double *DLeak, double *SLeak
680 ) ;
681 extern void elpSetCalcPAFct( void(*f)(lotrs_list*,char*,int,int,double,elp_lotrs_param*,double*,double*,double*,double*) );
682 void fill_elp_lotrs_param( elp_lotrs_param *pt,
683 double mulu0,
684 double delvt0,
685 double sa,
686 double sb,
687 double sd,
688 double nf,
689 double m,
690 double nrs,
691 double nrd,
692 double vbulk,
693 double sc,
694 double sca,
695 double scb,
696 double scc,
697 lotrs_list *lt
698 );
699 int elp_is_same_paramcontext(chain_list *longkey0, chain_list *longkey1);
700 void elpHackNetlistCapa( lofig_list *lofig, int whatjob );
701 void elpHackNetlistResi( lofig_list *lofig );
702 void elpHack_AddCtcCapa( locon_list *locon1, locon_list *locon2, float capa );
703 void elpHack_AddCapa( lotrs_list *lotrs, losig_list *vss, char where, float capa );
704 int elpHack_GetNodeLocon( locon_list *locon );
705
706 #endif
707