1 /****************************************************************************/
3 /* Chaine de CAO & VLSI Alliance */
5 /* Produit : ELP Verison 1 */
6 /* Fichier : elp110.h */
8 /* (c) copyright 1991-1995 Laboratoire MASI equipe CAO & VLSI */
9 /* Tous droits reserves */
10 /* Support : e-mail cao-vlsi@masi.ibp.fr */
12 /* Auteur(s) : Payam KIANI */
14 /****************************************************************************/
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
;
44 #define ELP_LOTRS_MODEL ((long) 0x70000000 ) // the lotrs will contain its elpmodel
48 #define elperrorFCT /* identification des fonctions du fichier elperror.c */
49 #define elpFCT /* identification des fonctions du fichier elp.c */
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 */
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
;
65 /* les parametres du simulateur electrique */
66 extern char elpEsimName
[elpSTRINGSIZE
] ;
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 */
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)
92 #define elpVoltage4UnusedLotrs (double)(1.0e-3)
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 /* */
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 */
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 */
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 */
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
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 */
153 /* les parametres du type et du nom de model */
154 #define elpMOS 0 /* type de model de transistor mosfet */
156 /* les parametres du type et du nom de model */
157 #define elpNOINDEX -1 /* pas d'index */
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 */
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 */
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 */
219 #define elpCAPANUM 47 /* nombre de capacites carrees */
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 */
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 */
232 #define ELPMAXLONG (long)(0x7FFFFFFF)
234 #define elpNoTechno 0
242 extern char *elpTabTechnoName
[];
244 typedef struct elpmodel
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 */
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 */
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
288 // activation du paramcontext pour le share des modeles
289 #define elpParamContextLevel (long)18
290 #define elpCaseLevel (long)19
292 // desactivation du paramcontext pour le share des modeles
293 #define elpParamContextLevel (long)19
294 #define elpCaseLevel (long)18
297 #define ELP_APPROX_EXCLUDE_FOR_KEY
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
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]
317 #define ELP_NOCAPA ((float)-3.14159e11)
318 #define ELP_LOFIG_TABCAPA 20021108
319 #define ELP_CAPASWITCH 20040924
321 #define ELP_LOFIG_CAPAS_ID (long)(0x77700007) // to know if the lofig was already annoted
322 // with the elpCapaGrid and elpCapaDiff
324 #define ELP_LOADELP_FILE (int)0
325 #define ELP_DONTLOAD_FILE (int)1
326 #define ELP_DEFAULTLOAD_FILE (int)2
340 typedef struct elpcapaswitch
351 /* tree structure of elp model to speed the research */
352 typedef struct elptree
354 struct elptree
*NEXT
;
362 /* les parametres definissant les parametres specifiques des instances du lotrs*/
363 #define elpPARAMNUM 13 /* nombre d'elements specifiques des instances du lotrs*/
373 __MCC_SAVED_VTHFINAL
,
385 __MCC_SAVED_VTHFINAL_UNBIAS
,
386 __MCC_SAVED_NEED_STRESS
,
387 __MCC_LAST_VBS_FORVBSEFF
,
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
,
398 double PARAM
[elpPARAMNUM
];
403 double MCC_SAVED
[__MCC_LAST_SAVED
];
407 /* liste des modeles */
410 /* liste des modeles */
411 extern elpmodel_list
*ELP_MODEL_LIST
;
412 extern elptree_list
*ELP_HEAD_TREE
;
414 extern int ELP_CALC_ONLY_CAPA
;
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
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
,
453 chain_list
*longkey
);
454 extern short elpError (short errnum
, ...);
455 extern elptree_list
*elpBuiltTreeModel (elptree_list
*head
,
456 elpmodel_list
*model
,
458 extern void elpFreeTreeModel (elptree_list
*head
,
460 extern void elpPrintTreeModel (elptree_list
*head
,
462 extern elpmodel_list
*elpSearchOrGenModel (lotrs_list
*lotrs
,
480 extern elpmodel_list
*elpGetModelWithLotrsParams (lotrs_list
*lotrs
,
481 elp_lotrs_param
*params
,
484 extern elpmodel_list
*elpGetModel (lotrs_list
*lotrs
,
487 extern elpmodel_list
*elpGetParamModel (char *name
,
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
,
517 extern double elpThr2Scm (double f
,
524 extern void (*elpSetDefaultParam
) ( void );
525 extern void elpdefaultfct2 ( void );
526 extern void elpSetFct2 (void (*f
)(void));
527 extern void (*elpGenParam
) (char *tname
,
534 elp_lotrs_param
*ptmodel_inst
);
535 extern void elpdefault (char* tname
,
542 elp_lotrs_param
*ptmodel_inst
);
543 extern void elpSetFct (void (*f
)(char* p0
,
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
) ;
558 extern double elpLeakDfltFct (char* tname
,
574 elp_lotrs_param
*ptmodel_inst
);
575 extern void elpSetLeakFct (double (*f
)(char* p0
,
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
,
597 extern float elpGetTotalCapaSig (lofig_list
*lofig
,
600 extern void elpSetCapaSig (lofig_list
*lofig
,
604 extern char elpIsCapaSig (lofig_list
*lofig
,
607 extern float elpAddCapaSig (lofig_list
*lofig
,
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
,
620 extern void elpLotrsGetShrinkDim (lotrs_list
*lotrs
,
631 extern void elpGetDeltaShrinkWidth (lotrs_list
*lotrs
,
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
,
661 extern int elp_is_valcomprise ( long val1
,
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
,
678 double vgs
, double vds
, double vbs
,
679 double *BLeak
, double *DLeak
, double *SLeak
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
,
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
);