Initial version of donated sources by Avertec, 3.4p5.
[tas-yagle.git] / distrib / sources / tas / tas / tas_lib.h
1 /****************************************************************************/
2 /* */
3 /* Chaine de CAO & VLSI Alliance */
4 /* */
5 /* Produit : TAS Version 5 */
6 /* Fichier : tas600.h */
7 /* */
8 /* (c) copyright 1991-1998 Laboratoire LIP6 equipe ASIM */
9 /* Tous droits reserves */
10 /* Support : e-mail alliance-support@asim.lip6.fr */
11 /* */
12 /* Auteur(s) : Payam KIANI */
13 /* Karim DIOURY */
14 /* */
15 /****************************************************************************/
16 /* les structures et base de donnees de TAS */
17 /****************************************************************************/
18
19 #ifndef TAS
20 #define TAS
21
22 //#define USEOLDTEMP
23
24 /* LISTE DES INCLUDE */
25
26 #include <stdio.h>
27 #include <stdlib.h>
28 #include <math.h>
29 #include <string.h>
30 #include <time.h>
31 #include <sys/types.h>
32 #include <sys/time.h>
33 #include <sys/resource.h>
34 #include <signal.h>
35
36 #define TAS_UNKNOWN_EVENT ((char)'X')
37
38 /* LISTE DES DEFINE */
39 #define CARAFRONT 1
40 #define CARACAPA 2
41 #define CARALES2 3
42 #define INTERNE 0
43 #define FCARAC 1
44 #define CCARAC 2
45
46 #define TAS_LUT_INT 1
47 #define TAS_LUT_CPL 2
48 #define TAS_SCM_INT 3
49 #define TAS_SCM_CPL 4
50 #define TAS_PLY_INT 5
51 #define TAS_PLY_CPL 6
52
53 #define TAS_KEEP_LOFIG ((int) 0x0c1c)
54
55 #define TAS_TRMODEL_MCCRSAT ((char)'M')
56 #define TAS_TRMODEL_SPICE ((char)'S')
57
58 #define TAS_MODEL_SCM ((char)'m')
59 #define TAS_MODEL_IV ((char)'i')
60
61 /* erreurs de tas */
62 #define TAS_NULL 0
63 #define TAS_ERROR 1
64 #define TAS_WARNING 2
65 #define TAS_BLOC_SIZE (long)1024
66 #define TAS_NBEMETMAX (long)20
67 #define TAS_NBRECMAX (long)20
68 #define TAS_NBCONMAX (long)35
69 #define TAS_DELTADELAY (long)25
70 #define TAS_DIFFDELAY (long)30
71 #define TAS_MAXDELAY (long)100
72
73 /* defines utilises pour des affectations */
74 #define TAS_NOTIME (LONG_MIN ) /* pas de TPxx */
75 #define TAS_NOFRONT (LONG_MIN ) /* pas de front */
76 #define TAS_NORES ((long) 0x00000000 ) /* pas de res */
77 #define TAS_NOS (LONG_MIN ) /* pas de s */
78 #define TAS_NOCAPA ((float) 0x00000000 ) /* pas de c */
79 #define TAS_NOWIDTH ((long) 0x00000000 ) /* pas de w */
80 #define TAS_NOLENGTH ((long) 0x00000000 ) /* pas de l */
81 #define TAS_ELM ((char) 'E' ) /* elmore save */
82 #define TAS_RCN ((char) 'R' ) /* rcn save */
83
84 /* defines utilises pour des affectations en double */
85 #define TAS_NOFRONT_DBL (DBL_MAX) /* pas de front */
86 /* mots clefs des champs USER des locon */
87 #define TAS_CON_CARAC ((long) 0x20000001 )
88 #define TAS_CON_BYPASSIN ((long) 0x20000002 )
89 #define TAS_CON_BYPASSOUT ((long) 0x20000003 )
90 #define TAS_CON_TAGCONE ((long) 0x20000004 )
91 #define TAS_CON_TAGOUT ((long) 0x20000005 )
92 #define TAS_CON_TAGUSED ((long) 0x20000006 )
93 #define TAS_CON_TAGCAPA ((long) 0x20000007 )
94 #define TAS_CON_BLDUP ((long) 0x20000008 )
95 #define TAS_CON_BLDDOWN ((long) 0x20000009 )
96 #define TAS_CON_MARQUE ((long) 0x2000000a )
97 #define TAS_CON_INCONE ((long) 0x2000000b )
98
99 /* mots clefs des champs USER des lotrs */
100 #define TAS_BTCONFL ((long) 0x20000010 )
101 #define TAS_UCONFL ((long) 0x20000020 )
102 #define TAS_CAPA_PASS ((long) 0x20000030 )
103 #define TAS_TRANS_TAGCONE ((long) 0x20000040 )
104 #define TAS_TRANS_TAGOUT ((long) 0x20000050 )
105 #define TAS_TRANS_TAGCAPA ((long) 0x20000060 )
106 #define TAS_TRANS_TAGUSED ((long) 0x20000070 )
107 #define TAS_TRANS_USED ((long) 0x20000080 )
108 #define TAS_CAPA_USED ((long) 0x20000090 )
109 #define TAS_TRANS_PARA ((long) 0x200000a0 )
110 #define TAS_TRANS_BLDUP ((long) 0x200000b0 )
111 #define TAS_TRANS_BLDDOWN ((long) 0x200000c0 )
112 #define TAS_TRANS_INOUT ((long) 0x200000d0 )
113 #define TAS_TRANS_SWITCH ((long) 0x200000e0 )
114 #define TAS_TRANS_LINK ((long) 0x200000f0 )
115 #define TAS_MARK_LOTRS_CAPAI ((long) 0x200000f1 )
116
117 /* mots clefs des champs USER des losig */
118 #define TAS_ONACTIVEPATH ((long) 20060321)
119 #define TAS_SIGNAL_LEVEL ((long) 20060324)
120 #define TAS_SIG_VOLTAGE ((long) 20061121)
121
122 /* mots clefs des champs USER des cones */
123 #define TAS_SLOPE_MIN ((long) 0x20000100 )
124 #define TAS_SLOPE_MAX ((long) 0x20000200 )
125 #define TAS_INCONE ((long) 0x20000300 )
126 #define TAS_IN_BACK ((long) 0x20000400 )
127 #define TAS_SIG_CONE ((long) 0x20000500 )
128 #define TAS_RC_CONE ((long) 0x20000600 )
129 #define TAS_RC_MAXHH ((long) 0x20000700 )
130 #define TAS_RC_MAXLL ((long) 0x20000800 )
131 #define TAS_RC_MINHH ((long) 0x20000900 )
132 #define TAS_RC_MINLL ((long) 0x20000a00 )
133 #define TAS_RC_INDEX ((long) 0x20000b00 )
134 #define TAS_CONE_NAME ((long) 0x20000c00 )
135 #define TAS_CONE_BASENAME ((long) 0x20000d00 )
136 #define TAS_CONE_MARQUE ((long) 0x20000e00 )
137 #define TAS_DELAY_UP_MAX ((long) 0x20000f00 )
138 #define TAS_DELAY_DOWN_MAX ((long) 0x20001000 )
139 #define TAS_DELAY_UP_MIN ((long) 0x20001100 )
140 #define TAS_DELAY_DOWN_MIN ((long) 0x20001200 )
141 #define TAS_OUT_CARAC_MIN ((long) 0x20001400 )
142 #define TAS_OUT_CARAC_MAX ((long) 0x20001500 )
143 #define TAS_DISABLE_GATE_DELAY 0x20001501
144 #define TAS_VDD_NOTDEG 0x20001502
145 #define TAS_LEAKAGE 0x20001503
146
147 /* mots clefs des champs USER des cnsfigs */
148 #define TAS_ALL_DISABLE_GATE_DELAY 0x20001501
149
150 /* defines utilises pour masquage pour link */
151 #define TAS_INCONE_NINOUT ((long) 0x10000000 )
152
153 /* mots clefs des champs USER des incone */
154 #define TAS_DELAY_MIN ((long) 0x20001000 )
155 #define TAS_DELAY_MAX ((long) 0x20002000 )
156 #define TAS_IN_CONESYM ((long) 0x20003000 )
157 #define TAS_RC_LOCON ((long) 0x20004000 )
158 #define TAS_SIG_INCONE ((long) 0x20005000 )
159 #define TAS_DELAY_MINT ((long) 0x20006000 )
160 #define TAS_DELAY_MAXT ((long) 0x20007000 )
161 #define TAS_IN_RCIN ((long) 0x20008000 )
162 #define TAS_INCONE_NAME ((long) 0x20009000 )
163
164 /* mots clefs des champs USER des branch */
165 #define TAS_RESIST ((long) 0x20010000 )
166
167 /* defines utilises pour masquage pour link */
168 #define TAS_LINK_BL ((long) 0x10000000 )
169 #define TAS_LINK_INOUT ((long) 0x20000000 )
170
171 /* mots clefs des champs USER des link */
172 #define TAS_LINK_CARAC ((long) 0x20100000 )
173 #define TAS_LINK_BLDUP ((long) 0x20200000 )
174 #define TAS_LINK_BLDDOWN ((long) 0x20300000 )
175 //#define TAS_LINK_DELAYRC ((long) 0x20400000 )
176 //#define TAS_LINK_RESISRC ((long) 0x20500000 )
177 #define TAS_LINK_CAPA ((long) 0x20600000 )
178 #define TAS_LINK_VPOL ((long) 0x20700000 )
179 #define TAS_LINK_UNUSED_SWITCH_COMMAND ((long) 0x20800000 )
180
181 /* marquage des branches contenant des switch */
182 #define TAS_SWITCH ((long) 0x10000000 ) /* part of switch */
183 #define TAS_SWITCH_DEG ((long) 0x40000000 ) /* switch degraded */
184
185 /* marquage des branches et des incone */
186 #define TAS_PATH_INOUT ((long) 0x01000000 ) /* branches INOUT */
187 #define TAS_EXT_IN ((long) 0x02000000 )
188 #define TAS_EXT_OUT ((long) 0x04000000 )
189 #define TAS_IN_MEMSYM ((long) 0x08000000 )
190 #define TAS_IN_NOTMEMSYM ((long) 0x00100000 )
191 #define TAS_NORC_INCONE ((long) 0x00200000 )
192 #define TAS_RCUU_INCONE ((long) 0x00400000 )
193 #define TAS_RCDD_INCONE ((long) 0x00800000 )
194 #define TAS_NORCT_INCONE ((long) 0x80000000 )
195 #define TAS_INCONE_MASK ((long) 0x000FFFFF ) /* initialisation du type*/
196
197 /* defines utilises pour masquage pour cones */
198 #define TAS_MARQUE ((long) 0x10000000 )
199 #define TAS_DEJAEMPILE ((long) 0x20000000 )
200 #define TAS_NOPRECH ((long) 0x40000000 ) /* noeud connecteur */
201 #define TAS_CONE_CONNECT ((long) 0x80000000 ) /* pour typer un cone con*/
202 #define TAS_LCOMMAND ((long) 0x01000000 )
203 #define TAS_PRECHARGE ((long) 0x02000000 ) /* noeud precharge */
204 #define TAS_INTER ((long) 0x04000000 ) /* noeud precharge */
205 #define TAS_BREAK ((long) 0x08000000 ) /* noeud precharge */
206 #define TAS_BYPASSOUT ((long) 0x00100000 ) /* cone non-important OUT*/
207 #define TAS_BYPASSIN ((long) 0x00200000 ) /* cone non-important IN */
208 #define TAS_CONE_INV ((long) 0x00400000 ) /* cone inverseur */
209 #define TAS_CONE_BUF ((long) 0x00800000 ) /* cone buffer */
210 #define TAS_RLCOMMAND ((long) 0x00010000 )
211 #define TAS_ECONE ((long) 0x00020000 )
212 #define TAS_NORISING ((long) 0x00040000 )
213 #define TAS_NOFALLING ((long) 0x00080000 )
214 #define TAS_CONE_MASK ((long) 0x0000FFFF ) /* initialisation du type*/
215
216 /* defines utilises pour figure hierarchique */
217
218 #define TAS_ALIM ((char) 'A') /* signal alimentation */
219
220 /* mots clefs des champs USER de la figure hierarchique */
221
222 #define TAS_SIG_LOCON ((long) 0x40000001 ) /* signal => connecteur */
223 #define TAS_LOCON_SIG ((long) 0x40000002 ) /* connecteur => signal */
224 #define TAS_SIG_NEWSIG ((long) 0x40000003 ) /* signal <=> signal */
225 #define TAS_LOCON_NSIG ((long) 0x40000004 ) /* connecteur => signal */
226 #define TAS_DELAY_NNRC ((long) 0x40000005 ) /* delay rc entre NN */
227 #define TAS_LOSIG_BUF ((long) 0x40000006 ) /* info du .inf */
228 #define TAS_SIG_BYPASSIN ((long) 0x40000007 ) /* info du .inf */
229 #define TAS_SIG_BYPASSOUT ((long) 0x40000008 ) /* info du .inf */
230 #define TAS_SIG_INTER ((long) 0x40000009 ) /* info du .inf */
231 #define TAS_SIG_ELM ((long) 0x4000000a ) /* info du .inf */
232 #define TAS_SIG_RCN ((long) 0x4000000b ) /* info du .inf */
233 #define TAS_SIG_RC ((long) 0x4000000d ) /* info du .inf */
234 #define TAS_SIG_NORC ((long) 0x4000000e ) /* info du .inf */
235 #define TAS_SIG_NORCDELAY ((long) 0x4000000f ) /* info du .inf */
236 #define TAS_LOFIGCHAIN ((long) 0x40000010 ) /* info du .inf */
237 #define TAS_SIG_LOSIG ((long) 0x40000011 ) /* info du .inf */
238 #define TAS_SIG_DRV ((long) 0x40000012 ) /* info du .inf */
239 #define TAS_SIG_VDD ((long) 0x40000013 ) /* info du .inf */
240 #define TAS_SIG_VSS ((long) 0x40000014 ) /* info du .inf */
241 #define TAS_SIG_ALIM ((long) 0x40000015 ) /* info du .inf */
242 #define TAS_SIG_NAME ((long) 0x40000016 ) /* info du .inf */
243 #define TAS_SIG_INDEX ((long) 0x40000017 ) /* info du .inf */
244 #define TAS_SIG_TERMINAL ((long) 0x40000019 ) /* info du .inf */
245 #define TAS_SIG_INITIAL ((long) 0x40000020 ) /* info du .inf */
246 #define TAS_SIG_MAXELM ((long) 0x40000021 ) /* info du .inf */
247 #define TAS_SIG_MINELM ((long) 0x40000023 ) /* info du .inf */
248 #define TAS_LOCON_NAME ((long) 0x40000024 ) /* info du .inf */
249 #define TAS_SIG_BREAK ((long) 0x40000025 ) /* info du .inf */
250 #define TAS_SIG_SET ((long) 0x40000026 ) /* info du .inf */
251 #define TAS_SIG_LOCONEXT ((long) 0x40000027 ) /* info du .inf */
252 #define TAS_SIG_BEG ((long) 0x40000028 ) /* 1er sig du .inf */
253 #define TAS_SIG_END ((long) 0x40000029 ) /* dernier sig du .inf */
254 #define TAS_SIG_HZ ((long) 0x4000002a ) /* signal pouvant etre HZ */
255 #define TAS_CONE_NUMBER ((long) 0x4000002b ) /* numerotation des cone */
256 #define TAS_SIG_NOD ((long) 0x4000002c ) /* info du .inf */
257 #define TAS_SIG_INTERFACE ((long) 0x4000002d ) /* info du .inf */
258 #define TAS_MODEL_HTAB ((long) 0x4000002e ) /* table de hash pour tmodel */
259 #define TAS_SIG_CAPA ((long) 0x4000002f ) /* capacite d'un signal */
260 #define TAS_SIG_TYPE ((long) 0x40000030 ) /* type d'un signal */
261 #define TAS_LOCON_INLIST ((long) 0x40000031 ) /* list des entree d'un locon*/
262 #define TAS_LOCON_OUTCONE ((long) 0x40000032 ) /* list des entree d'un locon*/
263 #define TAS_SIG_ONLYEND ((long) 0x40000033 ) /* list des entree d'un locon*/
264 #define TAS_FIG_LOSIGRCX ((long) 0x40000034 ) /* list des entree d'un locon*/
265 #define TAG_CONE_OUTPUT_CAPACITANCE ((long) 0x40000035 ) // TAS_CAPAOUT/connecteur
266 #define TAS_SIG_FORCERCDELAY ((long) 0x400000036 ) /* info du .inf */
267
268 #define TAS_CASE ((int)(mcc_use_multicorner() == 0 ) ? elpTYPICAL : (TAS_PATH_TYPE == 'm') ? elpBEST : elpWORST)
269
270 #define TP_R 0
271 #define TP_A 1
272 #define TP_B 2
273 #define TP_RT 3
274 #define TP_VT 4
275 #define TP_deg 5
276 #define TP_VDDmax 6
277 #define TP_SEUIL 7
278 #define TP_RDD 8
279 #define TP_KDD 9
280 #define TP_RDF 10
281 #define TP_RUD 11
282 #define TP_KUD 12
283 #define TP_RUF 13
284 #define TP_KG 14
285 #define TP_Q 15
286 #define TP_K 16
287 #define TP_IFB 17
288 #define TP_CGP 18
289 #define TP_CGD 19
290 #define TP_CDS 20
291 #define TP_DL 21
292 #define TP_DW 22
293 #define TP_LMLT 23
294 #define TP_WMLT 24
295 #define TP_RS 25
296 #define TP_KT 26
297 #define TP_MULU0 27
298 #define TP_DELTAVT0 28
299 #define TP_CGDC 29
300 #define TP_CGSI 30
301 #define TP_CGSIC 31
302 #define TP_RACCS 32
303 #define TP_RACCD 33
304 #define TP_KRT 34
305 #define TP_CGPO 35
306 #define TP_CGPOC 36
307 #define TP_CGD0 37
308 #define TP_CGD1 38
309 #define TP_CGD2 39
310 #define TP_CGDC0 40
311 #define TP_CGDC1 41
312 #define TP_CGDC2 42
313 #define TP_VT0 43
314
315 /* les pseudo-fonctions */
316 #define TAS_GETCLINK(link) ((caraclink_list *)getptype(link->USER, \
317 TAS_LINK_CARAC)->DATA)
318 #define TAS_GETWIDTH(link) ((long)((caraclink_list *)getptype(link->USER, \
319 TAS_LINK_CARAC)->DATA)->WIDTH)
320 #define TAS_GETLENGTH(link) ((long)((caraclink_list *)getptype(link->USER, \
321 TAS_LINK_CARAC)->DATA)->LENGTH)
322 #define TAS_GETCAPARA(link) (((TAS_PATH_TYPE == 'M')||V_INT_TAB[__TAS_CAPARA_DEPTH].VALUE) ? \
323 ((double)((caraclink_list *)getptype(link->USER, \
324 TAS_LINK_CARAC)->DATA)->CRAM) : (double)0)
325 #define TAS_GETCAPAEQ(link) ((double)((caraclink_list *)getptype(link->USER, \
326 TAS_LINK_CARAC)->DATA)->CEQUI)
327 #define TAS_F1(a,b,r) ((double)((a)*sqrt( (b)/((b)+((r)*(a))) )))
328 #define TAS_F2(a,b,r) ((double)sqrt( (b)*((b)+((r)*(a))) ))
329 #define TAS_F3(a,b,i) ((double) ((((i)*(b))+sqrt((i)*(b)*(i)*(b)+(4*(a)*(i)))) / (2*(a))) )
330 #define TAS_F4(u,vdd,fin) ((double)((fin)*(u)/(vdd)))
331 #define TAS_F5(yp,yn,qp,qn) ((double)(sqrt(((yp)*(qp))/((yn)*(qn)))))
332 #define TAS_F6(u,b) ((double)(0.5*(((1.0+(b))*(log(1.0+(u)))/(1.0-(b)))\
333 -log(1-(u))-2*(log(1+(b)*(u)))/((b)-(b)*(b)))))
334 #define TAS_TGH(x) ((double)((exp(x)-exp((-(x))))/(exp(x)+exp((-(x))))))
335 #define TAS_GETCAPA(losig) ((double)(getcapa(losig) * (float)1000.0))
336
337 typedef struct {
338 #ifndef USEOLDTEMP
339 float SLOPE ; /* threshold for measure. */
340 float VTH ; /* voltage threshold for measure. */
341
342 float VT ; /* slope parameter for tanh model. */
343 float VF ;
344 float VDD ;
345
346 float VSAT ; /* slope parameter for the end of the */
347 float RLIN ; /* transition. */
348 float R, C1, C2 ;
349 #else
350 double SLOPE ; /* threshold for measure. */
351 double VTH ; /* voltage threshold for measure. */
352
353 double VT ; /* slope parameter for tanh model. */
354 double VF ;
355 double VDD ;
356
357 double VSAT ; /* slope parameter for the end of the */
358 double RLIN ; /* transition. */
359 double R, C1, C2 ;
360 #endif
361 char MODEL ;
362 char VALID ;
363 } output_carac_trans ;
364
365 typedef struct {
366 output_carac_trans UP ;
367 output_carac_trans DW ;
368 } output_carac ;
369
370 /* STRUCTURES DE TAS */
371
372 typedef struct delay
373 {
374 long TPLH,TPHL;
375 long TPLL,TPHH;
376 long FLH,FHL;
377 long FLL,FHH;
378 long RCLL,RCHH;
379 long FRCLL,FRCHH;
380 #ifdef USEOLDTEMP
381 //--
382 long RLH,RHL;
383 long RLL,RHH;
384 long SLH,SHL;
385 long SLL,SHH;
386 //--
387 #endif
388 timing_model *TMLH;
389 timing_model *TMHL;
390 timing_model *TMLL;
391 timing_model *TMHH;
392 timing_model *FMLH;
393 timing_model *FMHL;
394 timing_model *FMLL;
395 timing_model *FMHH;
396 #ifdef USEOLDTEMP
397 stm_pwl *PWLTPHL;
398 stm_pwl *PWLTPLH;
399 stm_pwl *PWLRCLL;
400 stm_pwl *PWLRCHH;
401 #endif
402 output_carac *CARAC;
403 }
404 delay_list;
405
406 typedef struct {
407 float R ;
408 float V ;
409 } tas_driver ;
410
411 typedef struct front
412 {
413 long FUP,FDOWN;
414 stm_pwl *PWLUP, *PWLDN;
415 tas_driver DRIVERUP, DRIVERDN ;
416 }
417 front_list;
418
419 typedef struct caraccon
420 {
421 long RUPMAX,RDOWNMAX;
422 long RUPMIN,RDOWNMIN;
423 float C;
424 double *SLOPEIN ;
425 double *CAPAOUT ;
426 int NSLOPE ;
427 int NCAPA ;
428 }
429 caraccon_list;
430
431 typedef struct caraclink
432 {
433 long WIDTH;
434 long LENGTH;
435 float CRAM;
436 float CEQUI;
437 float CLINK;
438 }
439 caraclink_list;
440
441 typedef struct caracnode
442 {
443 long FMAX;
444 long FMIN;
445 }
446 caracnode_list;
447
448 typedef struct tpiv {
449 stm_solver_maillon_list *HEAD;
450 chain_list *HEADTRSSPICE;
451 chain_list *HEADTRSMCC;
452 } tpiv;
453
454 typedef struct tpiv_i {
455 stm_solver_maillon_list *HEAD;
456 stm_solver_maillon_list *ACTIVE;
457 char TRTYPE;
458 lotrs_list *TRS;
459 float VDDMAX;
460 } tpiv_i;
461
462 typedef struct leakage {
463 float L_UP_MAX;
464 float L_UP_MIN;
465 float L_DN_MAX;
466 float L_DN_MIN;
467 } leakage_list;
468
469 typedef struct information /* informations relatives au circuit */
470 {
471 long lo_t ; /* temps du chargement de le netlist logique */
472 long db_t ; /* temps du desassemblage */
473 long el_t ; /* temps du calcul des temps elementaires */
474 long gr_t ; /* temps du parcours de graphe */
475 long pr_t ; /* temps de generation du perfmodule */
476 long nb_trans ; /* nombre de transistors */
477 long nb_cone ; /* nombre de cones */
478 long comp ; /* complexite du circuit */
479 long maxdelay ; /* delai max du bloc */
480 long mindelay ; /* delai min du bloc */
481 short argc ; /* nombre d'arguments de la ligne de commande*/
482 char **argv ; /* arguments de la ligne de commande */
483 }
484 info_list ;
485
486 typedef struct tas_context
487 {
488 struct tas_context *NEXT ;
489 double TAS_CAPARAPREC ;
490 double TAS_CAPASWITCH ;
491 double TAS_CAPAOUT ;
492 char *TAS_FILENAME ;
493 char *TAS_FILEIN ;
494 char *TAS_FILEOUT ;
495 char *TAS_TOOLNAME ;
496 char *TAS_RC_FILE ;
497 double TAS_LIMITMEM ;
498 int TAS_TRACE_MODE ;
499 char TAS_DEBUG_MODE ;
500 char TAS_VALID_SCM ;
501 char TAS_CURVE ;
502 float TAS_CURVE_START ;
503 float TAS_CURVE_END ;
504 char TAS_DELAY_PROP ;
505 char TAS_DELAY_SWITCH ;
506 char TAS_NO_PROP ;
507 char TAS_SHORT_MODELNAME ;
508 char TAS_SIMU_CONE ;
509 char TAS_LEVEL ;
510 char TAS_PERFILE ;
511 char TAS_FACTORISE ;
512 char TAS_FIND_MIN ;
513 char TAS_NB_VERSION[80] ;
514 char TAS_DATE_VER[80] ;
515 char TAS_SLOFILE ;
516 char TAS_PERFINT ;
517 char TAS_INT_END ;
518 char TAS_NOTAS ;
519 char TAS_DIF_LATCH ;
520 char TAS_LANG ;
521 char TAS_PWL ;
522 char TAS_CNS_FILE ;
523 char TAS_CNS_LOAD ;
524 char TAS_CNS_ANNOTATE_LOFIG ;
525 char TAS_TREATPRECH ;
526 char TAS_SILENTMODE ;
527 char TAS_HIER ;
528 char TAS_NHIER ;
529 char TAS_CALCRCN ;
530 char TAS_MERGERCN ;
531 char TAS_SUPSTMMODEL ;
532 char TAS_BREAKLOOP ;
533 char TAS_SUPBLACKB ;
534 char TAS_IGNBLACKB ;
535 char TAS_FLATCELLS ;
536 char TAS_CHECKRCDELAY ;
537 char TAS_CARAC ;
538 char TAS_CARAC_MEMORY ;
539 char TAS_STABILITY ;
540 char TAS_PRES_CON_DIR ;
541 int TAS_CARACMODE ;
542 char *TAS_TRANSINSNAME ;
543 char TAS_SAVE_BEFIG ;
544 befig_list *TAS_BEFIG ;
545 lofig_list *TAS_HIERLOFIG ;
546 lofig_list *TAS_LOFIG ;
547 cnsfig_list *TAS_CNSFIG ;
548 char TAS_SAVERCN ;
549 char TAS_CALCRCX ;
550 int TAS_SAVE_OUT ;
551 int TAS_SAVE_ERR ;
552 char TAS_CHECK_PROP ;
553 double FRONT_CON ;
554 double FRONT_NOT_SHRINKED ;
555 int CARAC_VALUES ;
556 list_list *INF_SIGLIST;
557 }
558 tas_context_list;
559
560 typedef struct
561 {
562 chain_list *slopes, *capas;
563 chain_list *result;
564 int maxthreads;
565 } tas_spice_charac_struct;
566
567 /* declaration de variable */
568
569 extern tas_context_list *TAS_CONTEXT;
570 extern info_list TAS_INFO ;
571 extern char *CELL ;
572 extern chain_list *DETAILED_MODELS ;
573 extern int TAS_PVT_COUNT;
574
575
576 /* declaration de fonction */
577
578 extern void tas_initcnsfigalloc __P(( cnsfig_list* ));
579 extern void tas_freecnsfigalloc __P(( cnsfig_list* ));
580 extern void tas_freecnsfig __P(( cnsfig_list* ));
581 extern void tas_freelofig __P(( lofig_list* ));
582 extern int tas_timing __P(( cnsfig_list*, lofig_list *,
583 ttvfig_list *
584 ));
585 extern int tas_drislo __P(( cnsfig_list*, ttvfig_list* ));
586 extern int tas_error __P(( short, char*, long ));
587 extern ttvfig_list* tas_cns2ttv __P(( cnsfig_list*, ttvfig_list *,
588 lofig_list *
589 ));
590 extern double tas_getparam __P(( lotrs_list*, int, int)) ;
591 extern int tas_capara __P(( cnsfig_list* ));
592 extern int tas_DetectConeConnect __P(( cnsfig_list* ));
593 extern long tas_prelink __P(( cnsfig_list* ));
594 extern int tas_para __P(( cone_list* ));
595 extern int tas_switch_cmos __P(( cone_list* ));
596 extern void tas_AddCapaOut __P(( cnsfig_list* ));
597 extern void tas_AddCapaDiff __P(( lofig_list* ));
598 extern int tas_StuckAt __P(( cnsfig_list* ));
599 extern list_list* tas_GetAliasSig __P(( lofig_list*, list_list* ));
600 extern int tas_DifLatch __P(( cnsfig_list* ));
601 extern int tas_TechnoParameters __P(( void ));
602 extern int tas_tpd __P(( cone_list* ));
603 extern int tas_PwlFile __P(( void ));
604 extern int tas_setenv __P(( void ));
605 extern void tas_restore __P(( void ));
606 extern void tas_yaginit __P(( void ));
607 extern int tas_option __P(( int, char**, char ));
608 extern int tas_CloseTerm __P(( void ));
609 extern int tas_RestoreTerm __P(( void ));
610 extern void tas_GetKill __P(( int ));
611 extern info_list tas_InitInfo __P(( struct information ));
612 extern int tas_PrintTime __P(( struct rusage,
613 struct rusage,
614 long
615 ));
616 extern void tas_visu __P(( void ));
617 extern void tas_init __P(( void )) ;
618 extern ttvfig_list* tas_main __P(( void )) ;
619 extern ttvfig_list* tas_core __P(( int keeplofig )) ;
620 extern double* tas_DynamicSlopes __P((long, int));
621 extern double* tas_DynamicCapas __P((double, int));
622 extern void tas_handler_core __P(( void ));
623 extern float tas_gettotalcapa (lofig_list *lofig, losig_list *losig, int type);
624
625 // pour les API et surtout ttv_API
626 extern void tas_simu_set_progression ( void (*callfn)( void*, char*, int ) );
627
628 extern double tas_get_input_slope ( ttvcritic_list* );
629
630 extern int tas_simu_netlist ( ttvfig_list*, lofig_list* ,
631 cnsfig_list*,
632 spisig_list*,
633 chain_list*,
634 char,
635 int,
636 char *,
637 FILE *,
638 tas_spice_charac_struct *tscs,
639 int mcruns,
640 int plot
641 );
642 // pour les API et surtout ttv_API
643 extern ttvfig_list *tas_builtfig(lofig_list *lofig);
644 extern void tas_loconorient (lofig_list *lofig, ttvfig_list *ttvfig);
645 extern void tas_setsigname (lofig_list *lofig);
646 extern void tas_builtrcxview (lofig_list *lofig, ttvfig_list *ttvfig);
647 extern void tas_detecloconsig (lofig_list *lofig, ttvfig_list *ttvfig);
648 extern void tas_builtline (ttvfig_list *ttvfig, long type);
649 extern void tas_cleanfig (lofig_list *lofig, ttvfig_list *ttvfig);
650 extern int tas_deleteflatemptyfig (ttvfig_list *ttvfig, long type, char flat);
651 extern void tas_detectloop (ttvfig_list *ttvfig, long type);
652 extern void tas_calcfigdelay (ttvfig_list *ttvfig, lofig_list *lofig, long type, long typefile);
653 extern void tas_calcrcxdelay (lofig_list*, ttvfig_list*, long);
654 extern void tas_capasig (lofig_list*);
655 extern void tas_detectinout (cnsfig_list*);
656 extern int tas_version ();
657 extern int tas_top_main (int argc, char *argv[]);
658
659 // pour le solveur STM
660 extern timing_iv* tpiv_dualmodel( cone_list *cone, branch_list *head, link_list *active, float vref, float pconf0, float pconf1, float fin_vi, float fin_vf, float fin_vs, float vouti );
661
662 extern char tpiv_calc_i( tpiv_i *model, float ve, float vs, float *is );
663 extern tpiv* tpiv_createbranch( link_list *head, char transtype );
664 extern void tpiv_freebranch( tpiv *br );
665 extern tpiv* tpiv_alloc( void );
666 extern void tpiv_free( tpiv *s );
667 extern void tpiv_carac_static( lotrs_list *lotrs, float vdd, float vdsmax, float vgsmax, float vb, float vs );
668 extern void tas_update_mcctemp (inffig_list *ifl);
669 extern float tas_get_current_leakage_2( branch_list *branch, link_list *head, link_list *activelink );
670
671 int ttv_path_is_activable(ttvfig_list *tvf, cnsfig_list *cf, ttvpath_list *tc, chain_list *pathlist, char *divname, char *convname);
672 float tas_get_cone_output_capacitance(cone_list *cone);
673 ttvfig_list *hitas_tcl (char *figname);
674
675 #endif