Initial version of donated sources by Avertec, 3.4p5.
[tas-yagle.git] / distrib / sources / tas / ttv / ttv_lib.h
1 /****************************************************************************/
2 /* */
3 /* Chaine de CAO & VLSI Alliance */
4 /* */
5 /* Produit : TTV Version 1 */
6 /* Fichier : ttv200.h */
7 /* */
8 /* (c) copyright 1995-1998 Laboratoire LIP6 equipe ASIM */
9 /* Tous droits reserves */
10 /* Support : e-mail alliance-support@asim.lip6.fr */
11 /* */
12 /* Auteur(s) : DIOURY Karim */
13 /* */
14 /****************************************************************************/
15 /* les structures et base de donnees de TTV */
16 /****************************************************************************/
17
18 #ifndef TTV
19 #define TTV
20
21 /* LISTE DES INCLUDE */
22 #include <stdio.h>
23 #include <stdlib.h>
24 #include <math.h>
25 #include <string.h>
26 #include <time.h>
27 #undef CMIN
28 #undef CMAX
29
30 /* LISTE DES DEFINE */
31
32 /* defines generaux */
33 #define TTV_MAX_BLOC 256 /* taille des blocs */
34 #define TTV_MAX_SBLOC 256 /* taille des sblocs */
35 #define TTV_MAX_LBLOC 64 /* taille des lblocs */
36 #define TTV_ERROR 1 /* ttv error */
37 #define TTV_WARNING 2 /* ttv warning */
38 #define TTV_DATE_LOCAL 1 /* date et heure local */
39 #define TTV_DATE_GMT 2 /* date et heure gmt */
40 #define TTV_LANG_E 'E' /* langue anglaise */
41 #define TTV_LANG_F 'F' /* langue francaise */
42 #define TTV_SAVE_PATH 'Y' /* sauve les chemins */
43 #define TTV_NOTSAVE_PATH 'N' /* ne sauve pas les chemins */
44 #define TTV_SAVE_ALLPATH 'A' /* sauve tous les chemins */
45 #define TTV_OLD_MAX (LONG_MAX ) /* age le plus vieux */
46 #define TTV_OLD_MIN (LONG_MAX>>1 ) /* rajeunissement */
47 #define TTV_ALLOC_MAX (LONG_MAX ) /* nb d'allocation max s & l */
48 #define TTV_UP 'U' /* transition montante */
49 #define TTV_DOWN 'D' /* transition descendante */
50 #define TTV_DELAY_MAX (LONG_MAX ) /* delai maximum autorise */
51 #define TTV_DELAY_MIN (LONG_MIN ) /* delai minimum autorise */
52 #define TTV_MAX_PATHNB (INT_MAX ) /* delai minimum autorise */
53 #define TTV_MAX_PERIOD (CHAR_MAX ) /* delai minimum autorise */
54 #define TTV_NO_PHASE ((char)-1 ) /* no phase */
55
56 /* status des ttvfig */
57 #define TTV_STS_MARQUE ((long) 0x10000000 ) /* ttvfig marque */
58 #define TTV_STS_MODEL ((long) 0x20000000 ) /* ttvfig model */
59 #define TTV_STS_NOT_FREE ((long) 0x00080000 ) /* ttvfig a conserver */
60 #define TTV_STS_FREE_2 ((long) 0x00040000 ) /* ttvfig a liberer en 2 */
61 #define TTV_STS_FREE_1 ((long) 0x00020000 ) /* ttvfig a liberer en 1 */
62 #define TTV_STS_FREE_0 ((long) 0x00010000 ) /* ttvfig a liberer en 0 */
63 #define TTV_STS_FREE_MASK ((long) 0x000F0000 ) /* ttvfig a conserver */
64 #define TTV_STS_HEAD ((long) 0x00100000 ) /* sommet de la ttvfig */
65 #define TTV_STS_DUAL_P ((long) 0x00200000 ) /* dual des liens P */
66 #define TTV_STS_DUAL_J ((long) 0x00400000 ) /* dual des liens J */
67 #define TTV_STS_DUAL_T ((long) 0x00800000 ) /* dual des liens T */
68 #define TTV_STS_DUAL_PJT ((long) 0x00e00000 ) /* dual des liens PJT */
69 #define TTV_STS_DUAL_F ((long) 0x01000000 ) /* dual des liens F */
70 #define TTV_STS_DUAL_E ((long) 0x02000000 ) /* dual des liens E */
71 #define TTV_STS_DUAL_D ((long) 0x04000000 ) /* dual des liens D */
72 #define TTV_STS_DUAL_FED ((long) 0x07000000 ) /* dual des liens FED */
73 #define TTV_STS_DUAL ((long) 0x07e00000 ) /* dual des liens */
74 #define TTV_STS_HEADER ((long) 0x00000001 ) /* ttvfig avec H et X */
75 #define TTV_STS_LOCK ((long) 0x00000002 ) /* ttvfig locker */
76 #define TTV_STS_C ((long) 0x00000010 ) /* noeud C */
77 #define TTV_STS_L ((long) 0x00000020 ) /* noeud QLRI */
78 #define TTV_STS_S ((long) 0x00000040 ) /* noeud S */
79 #define TTV_STS_SE ((long) 0x00000080 ) /* SE ref dans la ttvfig */
80 #define TTV_STS_P ((long) 0x00000100 ) /* chemin complet */
81 #define TTV_STS_J ((long) 0x00000200 ) /* chemin partiel sur un T */
82 #define TTV_STS_T ((long) 0x00000400 ) /* chemin connecteur */
83 #define TTV_STS_F ((long) 0x00001000 ) /* temps portes interne */
84 #define TTV_STS_E ((long) 0x00002000 ) /* temps porte externe */
85 #define TTV_STS_D ((long) 0x00004000 ) /* temps porte connecteur */
86 #define TTV_STS_DENOTINPT ((long) 0x00008000 ) /* DE pas dans PT */
87 #define TTV_STS_DTX ((long) 0x000070f1 ) /* fichier dtx */
88 #define TTV_STS_TTX ((long) 0x00000731 ) /* fichier ttx */
89 #define TTV_STS_ALL ((long) 0x000077f1 ) /* ttvfig complet */
90 #define TTV_STS_L_P ((long) 0x00000120 ) /* QLRIN+P */
91 #define TTV_STS_L_J ((long) 0x00000220 ) /* QLRIN+J */
92 #define TTV_STS_L_PJ ((long) 0x00000320 ) /* QLRIN+PJ */
93 #define TTV_STS_LS ((long) 0x00000060 ) /* QLRIN+S */
94 #define TTV_STS_LS_F ((long) 0x00001060 ) /* QLRIN+S+F */
95 #define TTV_STS_LS_E ((long) 0x00002060 ) /* QLRIN+S+E */
96 #define TTV_STS_LS_FE ((long) 0x00003060 ) /* QLRIN+S+EF */
97 #define TTV_STS_CL ((long) 0x00000030 ) /* CQLRIN */
98 #define TTV_STS_CL_T ((long) 0x00000430 ) /* CQLRIN+T */
99 #define TTV_STS_CL_PJT ((long) 0x00000730 ) /* CQLRIN+PJT */
100 #define TTV_STS_CLS ((long) 0x00000070 ) /* CQLRIN+S */
101 #define TTV_STS_CLS_D ((long) 0x00004070 ) /* CQLRIN+S+D */
102 #define TTV_STS_CLS_FED ((long) 0x00007070 ) /* CQLRIN+S+FED */
103
104 /* type user des ttvfig */
105 #define TTV_STS_HTAB_L ((long) 0x00000001 ) /* table de hash pour L */
106 #define TTV_STS_HTAB_S ((long) 0x00000002 ) /* table de hash pour S */
107 #define TTV_FIG_POS_S ((long) 0x00000003 ) /* position de S dans .dtx */
108 #define TTV_FIG_POS_D ((long) 0x00000004 ) /* position de D dans .dtx */
109 #define TTV_FIG_POS_E ((long) 0x00000005 ) /* position de E dans .dtx */
110 #define TTV_FIG_POS_F ((long) 0x00000006 ) /* position de F dans .dtx */
111 #define TTV_FIG_POS_T ((long) 0x00000007 ) /* position de T dans .ttx */
112 #define TTV_FIG_POS_J ((long) 0x00000008 ) /* position de J dans .ttx */
113 #define TTV_FIG_POS_P ((long) 0x00000009 ) /* position de P dans .ttx */
114 #define TTV_FIG_LINE_S ((long) 0x0000000a ) /* position de S dans .dtx */
115 #define TTV_FIG_LINE_D ((long) 0x0000000b ) /* position de D dans .dtx */
116 #define TTV_FIG_LINE_E ((long) 0x0000000c ) /* position de E dans .dtx */
117 #define TTV_FIG_LINE_F ((long) 0x0000000d ) /* position de F dans .dtx */
118 #define TTV_FIG_LINE_T ((long) 0x0000000e ) /* position de T dans .ttx */
119 #define TTV_FIG_LINE_J ((long) 0x0000000f ) /* position de J dans .ttx */
120 #define TTV_FIG_LINE_P ((long) 0x00000010 ) /* position de P dans .ttx */
121 #define TTV_FIG_FALSEPATH ((long) 0x00000011 ) /* faux chemins */
122 #define TTV_FIG_SIGBLOCTAB ((long) 0x00000012 ) /* tableau de signal */
123 #define TTV_FIG_LOFIG ((long) 0x00000013 ) /* lofig associe */
124 #define TTV_FIG_HTAB_SIG ((long) 0x00000014 ) /* table hash signaux */
125 #define TTV_FIG_INFLIST ((long) 0x00000015 ) /* info fichier inf */
126 #define TTV_FIG_TYPE ((long) 0x00000016 ) /* type de ttvfig en memoire */
127 #define TTV_FIG_SAXIS ((long) 0x00000017 ) /* ht slope axis */
128 #define TTV_FIG_CAXIS ((long) 0x00000018 ) /* ht capa axis */
129 #define TTV_FIG_CAPAOUT_HANDLED ((long) 0x00000019 )
130 #define TTV_FIG_DIRECTIVES_HEAP ((long) 0x0000001a )
131 #define TTV_SSTA_STORE 0x0000001b
132 #define TTV_SSTA_STORE_STATS 0x0000001c
133 #define TTV_FIG_FULL_MEMORY 0x0000001d
134 #define TTV_CELL_LEAKAGE_POWER 0x0000001e
135 #define TTV_LEAKAGE_POWER 0x0000001f
136 #define TTV_FIG_CBHSEQ 0x00000020
137 #define TTV_FIG_VCDPOWER 0x00000021
138
139 /* type des signaux */
140 #define TTV_SIG_C ((long) 0x00000001 ) /* signal connecteur */
141 #define TTV_SIG_CI ((long) 0x00000003 ) /* signal connecteur in */
142 #define TTV_SIG_CO ((long) 0x00000005 ) /* signal connecteur out */
143 #define TTV_SIG_CZ ((long) 0x00000015 ) /* signal connecteur hz */
144 #define TTV_SIG_CB ((long) 0x00000027 ) /* signal connecteur inout */
145 #define TTV_SIG_CT ((long) 0x00000047 ) /* signal connecteur tstate */
146 #define TTV_SIG_CX ((long) 0x00000081 ) /* signal connecteur unknow */
147 #define TTV_SIG_N ((long) 0x00000008 ) /* signal noeud con pour RC */
148 #define TTV_SIG_CQ ((long) 0x00000101 ) /* signal connecteur cmd */
149 #define TTV_SIG_CL ((long) 0x00000201 ) /* signal connecteur cmd */
150 #define TTV_SIG_CR ((long) 0x00000401 ) /* signal connecteur cmd */
151 #define TTV_SIG_NQ ((long) 0x00000108 ) /* con rc pour cmd */
152 #define TTV_SIG_NL ((long) 0x00000208 ) /* con rc pour cmd */
153 #define TTV_SIG_NR ((long) 0x00000408 ) /* con rc pour cmd */
154 #define TTV_SIG_Q ((long) 0x00000100 ) /* signal latch command */
155 #define TTV_SIG_QR ((long) 0x00000120 ) /* signal latch reset */
156 #define TTV_SIG_L ((long) 0x00000200 ) /* signal latch */
157 #define TTV_SIG_LSL ((long) 0x00000220 ) /* signal latch slave */
158 #define TTV_SIG_LL ((long) 0x00004200 ) /* signal latch latch */
159 #define TTV_SIG_LF ((long) 0x00008200 ) /* signal flipflop */
160 #define TTV_SIG_LR ((long) 0x00004210 ) /* signal RS latch nand */
161 #define TTV_SIG_LS ((long) 0x00004220 ) /* signal RS latch nor */
162 #define TTV_SIG_R ((long) 0x00000400 ) /* signal precharge */
163 #define TTV_SIG_I ((long) 0x00000800 ) /* signal intermediaire */
164 #define TTV_SIG_S ((long) 0x00001000 ) /* signal non CQLRIN */
165 #define TTV_SIG_B ((long) 0x00002000 ) /* signal break */
166 #define TTV_SIG_TYPEALL ((long) 0x00003F09 ) /* signal type */
167
168 /* marquage des signaux */
169 #define TTV_SIG_TYPE ((long) 0x0000FFFF ) /* masquage du type signal */
170 #define TTV_SIG_TYPECON ((long) 0x000000FF ) /* masquage des connecteurs */
171 #define TTV_SIG_LEVEL ((long) 0x003F0000 ) /* masquage des connecteurs */
172 #define TTV_SIG_EXT ((long) 0x00400000 ) /* signal exterieur */
173 #define TTV_SIG_MARQUE ((long) 0x10000000 ) /* signal marque */
174 #define TTV_SIG_F ((long) 0x20000000 ) /* signal libre */
175 #define TTV_SIG_BYPASSOUT ((long) 0x40000000 ) /* signal non-important OUT */
176 #define TTV_SIG_BYPASSIN ((long) 0x80000000 ) /* signal non-important IN */
177 #define TTV_SIG_MASKIN ((long) 0x01000000 ) /* signal mask pour in */
178 #define TTV_SIG_MASKOUT ((long) 0x02000000 ) /* signal mask pour out */
179 #define TTV_SIG_MINSIG ((long) 0x04000000 ) /* marquage signaux d'entree */
180 #define TTV_SIG_MOUTSIG ((long) 0x08000000 ) /* marquage signaux sortie */
181
182 /* type user des signaux */
183 #define TTV_SIG_INDEX ((long) 0x00000001 ) /* index du signal */
184 #define TTV_CMD_INDEX ((long) 0x00000002 ) /* index de la command */
185 #define TTV_SIG_CMD ((long) 0x00000003 ) /* cmd pour L et R */
186 #define TTV_SIG_CMDNEW ((long) 0x00000004 ) /* nouveau cmd ttvfig pere */
187 #define TTV_SIG_CMDOLD ((long) 0x00000005 ) /* ancien cmd ttvfig fils */
188 #define TTV_SIG_INSIG ((long) 0x00000006 ) /* liste signaux d'entree */
189 #define TTV_SIG_OUTSIG ((long) 0x00000007 ) /* liste signaux de sortie */
190 #define TTV_SIG_CLOCK ((long) 0x00000008 ) /* signal clock */
191 #define TTV_SIG_ASYNCHRON ((long) 0x00000009 ) /* asynchronous reset */
192 #define TTV_SIG_CAPAS ((long) 0x0000000a ) /* contient les 6 capaval */
193 #define TTV_SIG_MULTICYCLE_OUT ((long) 0x0000000b ) /* regles multicycle avec le 'out' matchant le signal*/
194 #define TTV_SIG_MULTICYCLE_IN ((long) 0x0000000c ) /* regles multicycle avec le 'in' matchant le signal*/
195 //#define TTV_SIG_PATH_DELAY_MARGINS ((long) 0x0000000d ) /* marquage pour le delay margin */
196 #define TTV_SIG_FLAGS ((long) 0x0000000e ) /* marquage pour le no cross */
197 #define TTV_SIG_MARKED ((long) 0x0000000f ) /* marquage pour le no cross */
198 #define TTV_SIG_OUTPUT_CAPACITANCE ((long) 0x00000010 ) // capaout/signal
199 #define TTV_SIG_DONE_PTYPE ((long) 0x00000011 ) // capaout/signal
200 #define TTV_SIG_PATH_DELAY_MARGINS_REGEX ((long) 0x00000012 ) /* marquage pour le delay margin */
201 #define TTV_SIG_TMP_MARKED ((long) 0x00000013 ) /* marquage temporaire */
202 #define TTV_SIG_UTD_OUTPUT_CAPA 0x00000014 /* UDT output capacitance */
203 #define TTV_SIG_STRICT_SETUP 0x00000015 /* UDT output capacitance */
204 #define TTV_SIG_DIRECTIVES 0x00000016
205 #define TTV_SSTA_SIG_INDEX 0x00000017
206 #define TTV_SIG_FALSEPATH_START 0x00000018
207 #define TTV_SIG_FALSEPATH_END 0x00000019
208 #define TTV_SIG_SWING 0x00000020
209 #define TTV_SIG_VCDPOWER 0x00000021
210
211 /* type des evenements */
212 #define TTV_NODE_MARQUE ((long) 0x10000000 ) /* noeud marque */
213 #define TTV_NODE_CMDMARQUE ((long) 0x20000000 ) /* cmd marque Pour L */
214 #define TTV_NODE_NODE ((long) 0x40000000 ) /* noeud marque */
215 #define TTV_NODE_ROOT ((long) 0x80000000 ) /* noeud marque */
216 #define TTV_NODE_UP ((long) 0x00000001 ) /* noeud niveau haut */
217 #define TTV_NODE_DOWN ((long) 0x00000002 ) /* noeud niveau bas */
218 #define TTV_NODE_STOP ((long) 0x00000100 ) /* noeud point d'arret */
219 #define TTV_NODE_IMAX ((long) 0x00000200 ) /* noeud fact pour max */
220 #define TTV_NODE_IMIN ((long) 0x00000400 ) /* noeud fact pour min */
221 #define TTV_NODE_ONLYEND ((long) 0x00000800 ) /* pas de front */
222 #define TTV_NODE_END ((long) 0x00002000 ) /* fin de chaine */
223 #define TTV_NODE_INR ((long) 0x00004000 ) /* fin de chaine */
224 #define TTV_NODE_INS ((long) 0x00008000 ) /* fin de chaine */
225 #define TTV_NODE_INHZ ((long) 0x00000020 ) /* fin de chaine */
226 #define TTV_NODE_BYPASSOUT ((long) 0x00000040 ) /* pas de front */
227 #define TTV_NODE_BYPASSIN ((long) 0x00000080 ) /* pas de front */
228 #define TTV_NODE_FALSEOUT ((long) 0x00000004 ) /* pas de chemin */
229 #define TTV_NODE_FALSEIN ((long) 0x00000008 ) /* pas de chemin */
230 #define TTV_NODE_MARK_1 ((long) 0x01000000 ) /* marquage temporaire 1 */
231 #define TTV_NODE_FALSEPATHNODE ((long) 0x02000000 ) /* marquage temporaire 1 */
232
233 /* type user des evenements */
234 #define TTV_NODE_DUALLINE ((long) 0x00000001 ) /* liens dual */
235 #define TTV_NODE_DUALPATH ((long) 0x00000002 ) /* chemins dual */
236 #define TTV_NODE_INCHAIN ((long) 0x00000003 ) /* entree vue par un noeud */
237 #define TTV_NODE_IN ((long) 0x00000004 ) /* noeud d'entree */
238 #define TTV_NODE_AVNODE ((long) 0x00000005 ) /* noeud precedent */
239 #define TTV_NODE_DELAYLOOP ((long) 0x00000006 ) /* delay de bascule */
240 #define TTV_NODE_CMDFF ((long) 0x00000007 ) /* command towards flipflop */
241 #define TTV_NODE_CMDLL ((long) 0x00000008 ) /* command towards latch */
242 #define TTV_NODE_DELAY ((long) 0x00000009 ) /* command towards latch */
243 #define TTV_NODE_LATCH ((long) 0x00000010 ) /* command towards latch */
244 #define TTV_NODE_CLOCK ((long) 0x00000011 ) /* command towards latch */
245 #define TTV_NODE_PROPINFO ((long) 0x00000012 ) /* propagated informations */
246 #define TTV_NODE_UTD_INPUT_SLOPE ((long) 0x00000013 ) /* UTD input slope */
247 #define TTV_NODE_TMP_MARKED ((long) 0x00000014 ) /* marquage temporaire */
248 #define TTV_NODE_PROPINFO_CACHE ((long) 0x00000015 ) /* propagated informations */
249 #define TTV_NODE_CRITIC_PARA_INFO ((long) 0x00000016 )
250 #define TTV_NODE_VCD_INFO ((long) 0x00000017 )
251
252 /* type des finds */
253 #define TTV_FIND_INFIFO ((long) 0x00000001 ) /* noeud deja empile */
254 #define TTV_FIND_OUTFIFO (~(TTV_FIND_INFIFO)) /* noeud non-empile */
255 #define TTV_FIND_BEGIN ((long) 0x00000002 ) /* debut de chaine */
256 #define TTV_FIND_BYPASS ((long) 0x00000004 ) /* bypass du node */
257
258 /* type des lines */
259 #define TTV_LINE_P ((long) 0x00000001 ) /* lien de type P */
260 #define TTV_LINE_J ((long) 0x00000002 ) /* lien de type J */
261 #define TTV_LINE_T ((long) 0x00000004 ) /* lien de type T */
262 #define TTV_LINE_F ((long) 0x00000008 ) /* lien de type F */
263 #define TTV_LINE_E ((long) 0x00000010 ) /* lien de type E */
264 #define TTV_LINE_D ((long) 0x00000020 ) /* lien de type D */
265 #define TTV_LINE_TYPE ((long) 0x0000003F ) /* lien de type E */
266
267 /* index des delay des line */
268 #define TTV_DELAY_P 0 /* position du delay P */
269 #define TTV_DELAY_J 1 /* position du delay J */
270 #define TTV_DELAY_T 2 /* position du delay T */
271 #define TTV_DELAY_F 3 /* position du delay F */
272 #define TTV_DELAY_E 4 /* position du delay E */
273 #define TTV_DELAY_D 5 /* position du delay D */
274 #define TTV_DELAY_END (ttvdelay_list*)-1 /* fin du tableau */
275
276 /* marquage des lines */
277 #define TTV_LINE_MARQUE ((long) 0x10000000 ) /* lien marque */
278 #define TTV_LINE_FR ((long) 0x20000000 ) /* lien libre */
279 #define TTV_LINE_INFIG ((long) 0x40000000 ) /* lien dans la figure */
280 #define TTV_LINE_HZ ((long) 0x00000100 ) /* lien de type HZ */
281 #define TTV_LINE_EV ((long) 0x00000200 ) /* lien de type evaluation */
282 #define TTV_LINE_PR ((long) 0x00000400 ) /* lien de type precharge */
283 #define TTV_LINE_RC ((long) 0x00000800 ) /* lien de type rc */
284 #define TTV_LINE_DEPTMAX ((long) 0x00001000 ) /* lien D ou E dans un PT M */
285 #define TTV_LINE_DEPTMIN ((long) 0x00002000 ) /* lien D ou E dans un PT m */
286 #define TTV_LINE_DENPTMAX ((long) 0x00004000 ) /* lien D ou E pas dans PT M */
287 #define TTV_LINE_DENPTMIN ((long) 0x00008000 ) /* lien D ou E pas dans PT m */
288 #define TTV_LINE_PREV ((long) 0x00010000 ) /* lien avec un ptype prev */
289 #define TTV_LINE_ROOT ((long) 0x00020000 ) /* premier lien d'une liste */
290 #define TTV_LINE_PREV_DUAL ((long) 0x00040000 ) /* lien avec un ptype prev */
291 #define TTV_LINE_ROOT_DUAL ((long) 0x00080000 ) /* premier lien d'une liste */
292 #define TTV_LINE_R ((long) 0x00000040 ) /* lien reset dans une rs */
293 #define TTV_LINE_S ((long) 0x00000080 ) /* lien set dans une rs */
294 #define TTV_LINE_A ((long) 0x00900000 ) /* lien de type access */
295 #define TTV_LINE_U ((long) 0x00a00000 ) /* lien de type setup */
296 #define TTV_LINE_O ((long) 0x00c00000 ) /* lien de type hold */
297 #define TTV_LINE_CONT ((long) 0x00800000 ) /* lien de type contrainte */
298 #define TTV_LINE_NOINDEX ((int ) 0x80000000 ) /* lien sans index */
299
300 /* type des lines */
301 #define TTV_LINE_SETUP ((long) 0x00000001 ) /* lien cont setup */
302 #define TTV_LINE_HOLD ((long) 0x00000002 ) /* lien cont hold */
303 #define TTV_LINE_ACCESS ((long) 0x00000004 ) /* lien cont access */
304 #define TTV_LINE_REMOVAL ((long) 0x00000008 ) /* lien cont removal */
305 #define TTV_LINE_RECOVRY ((long) 0x00000010 ) /* lien cont recovry */
306 #define TTV_LINE_SKEW ((long) 0x00000020 ) /* lien cont skew */
307 #define TTV_LINE_WIDTH ((long) 0x00000040 ) /* lien cont width */
308 #define TTV_LINE_NEW ((long) 0x00000080 ) /* lien nouveau */
309
310 /* type user des lines */
311 #define TTV_LINE_CMDMAX ((long) 0x00000001 ) /* command de lien pour max */
312 #define TTV_LINE_CMDMIN ((long) 0x00000002 ) /* command de lien pour min */
313 #define TTV_LINE_PREVLINE ((long) 0x00000003 ) /* lien precedant pour free */
314 #define TTV_LINE_PREVLDUAL ((long) 0x00000004 ) /* lien dual precedant */
315 #define TTV_LINE_INSNAME ((long) 0x00000005 ) /* lien dual precedant */
316 #define TTV_LINE_MODNAME ((long) 0x00000006 ) /* lien dual precedant */
317 #define TTV_LINE_CONTR ((long) 0x00000007 ) /* lien de type contrainte */
318 #define TTV_SSTA_LINE_INDEX 0x00000008
319
320 /* type de recherche de chemin */
321 #define TTV_FIND_MARQUE ((long) 0x10000000 ) /* marquage de la recherche */
322 #define TTV_FIND_MAX ((long) 0x00000001 ) /* recherche des chemins max */
323 #define TTV_FIND_MIN ((long) 0x00000002 ) /* recherche des chemins mix */
324 #define TTV_FIND_LINE ((long) 0x00000004 ) /* recherche avec liens */
325 #define TTV_FIND_PATH ((long) 0x00000008 ) /* recherche avec chemins */
326 #define TTV_FIND_HZ ((long) 0x00000010 ) /* recherche des chemins HZ */
327 #define TTV_FIND_PR ((long) 0x00000020 ) /* recherche des chemins PR */
328 #define TTV_FIND_EV ((long) 0x00000040 ) /* recherche des chemins HZ */
329 #define TTV_FIND_HIER ((long) 0x00000080 ) /* recherche stop a CB et CT */
330 #define TTV_FIND_DUAL ((long) 0x00000100 ) /* recherche avec liens dual */
331 #define TTV_FIND_CRITIC ((long) 0x00000200 ) /* recherche avec critic */
332 #define TTV_FIND_NOTSAVE ((long) 0x00000400 ) /* recherche sans sauvegarde */
333 #define TTV_FIND_NOTCLASS ((long) 0x00000800 ) /* recherche sans classement */
334 #define TTV_FIND_FACTLOC ((long) 0x00001000 ) /* factorisation local */
335 #define TTV_FIND_FACTGLO ((long) 0x00002000 ) /* factorisation global */
336 #define TTV_FIND_R ((long) 0x00004000 ) /* s'arrete aux commandes */
337 #define TTV_FIND_S ((long) 0x00008000 ) /* s'arrete aux commandes */
338 #define TTV_FIND_CMD ((long) 0x00010000 ) /* s'arrete aux commandes */
339 #define TTV_FIND_MASKOR ((long) 0x00020000 ) /* recherche mask or */
340 #define TTV_FIND_MASKAND ((long) 0x00040000 ) /* recherche mask and */
341 #define TTV_FIND_MASKNOT ((long) 0x00080000 ) /* recherche mask not */
342 #define TTV_FIND_NOT_UPUP ((long) 0x00100000 ) /* recherche chemin up up */
343 #define TTV_FIND_NOT_UPDW ((long) 0x00200000 ) /* recherche chemin up dw */
344 #define TTV_FIND_NOT_DWUP ((long) 0x00400000 ) /* recherche chemin dw up */
345 #define TTV_FIND_NOT_DWDW ((long) 0x00800000 ) /* recherche chemin dw dw */
346 #define TTV_FIND_RC ((long) 0x01000000 ) /* recherche de delay rc */
347 #define TTV_FIND_GATE ((long) 0x02000000 ) /* recherche de delay porte */
348 #define TTV_FIND_SIG ((long) 0x04000000 ) /* recherche avec des signaux*/
349 #define TTV_FIND_CARAC ((long) 0x08000000 ) /* chemin caracterisees */
350 #define TTV_FIND_LUT ((long) 0x20000000 ) /* chemin avec lut */
351 #define TTV_FIND_DELAY ((long) 0x40000000 ) /* chemin avec delay pire */
352 #define TTV_FIND_LINETOP ((long) 0x80000000 ) /* chemin avec delay pire */
353 #define TTV_FIND_ALL ((long) 0x00001000 ) /* recherche tout les chemins*/
354 #define TTV_FIND_ACCESS ((long) 0x00002000 ) /* recherche des access */
355 #define TTV_FIND_SETUP ((long) 0x00004000 ) /* recherche des setup */
356 #define TTV_FIND_HOLD ((long) 0x00008000 ) /* recherche des hold */
357 #define TTV_FIND_PATHDET ((long) 0x01000000 ) /* recherche de detail de ch */
358
359 /* type de fichier pour le driver et le parser */
360 #define TTV_FILE_TTX ((long) 0x00000001 ) /* fichier ttx */
361 #define TTV_FILE_DTX ((long) 0x00000002 ) /* fichier dtx */
362 #define TTV_FILE_TTV ((long) 0x00000004 ) /* fichier ttv */
363 #define TTV_FILE_DTV ((long) 0x00000008 ) /* fichier dtv */
364 #define TTV_FILE_INF ((long) 0x00000010 ) /* parse le fichier inf */
365 #define TTV_FILE_CTX ((long) 0x00000020 ) /* parse le fichier inf */
366 #define TTV_FILE_MARQUE ((long) 0x10000000 ) /* marquage */
367
368 /* delai et front des evenements et des liens */
369 #define TTV_NOTIME (LONG_MIN ) /* pas de temps */
370 #define TTV_NOSLOPE (LONG_MIN ) /* pas de front */
371 #define TTV_NORES ((long) 0x00000000 ) /* pas de resistance */
372 #define TTV_NOS (LONG_MIN ) /* pas de s */
373 #define TTV_NOCAPA (-1.0e5 ) /* pas de capa */
374
375 /* type de calcul des delais */
376 #define TTV_MODE_LINE 'L' /* sauvegarde dans la line */
377 #define TTV_MODE_DELAY 'D' /* sauvegarde dans le delay */
378 #define TTV_MODE_NOTSTORE 'S' /* pas de sauvegarde */
379
380 /* type de point d'arret */
381 #define TTV_SIG_BEGINSEARCH ((long) 0x00000001 )
382 #define TTV_SIG_ENDSEARCH ((long) 0x00000002 )
383 #define TTV_SIG_BEGINPATH ((long) 0x00000004 )
384 #define TTV_SIG_ENDPATH ((long) 0x00000008 )
385 #define TTV_SIG_CROSS ((long) 0x00000010 )
386
387 /* type de recherche */
388 #define TTV_SEARCH_CRITIC 'C'
389 #define TTV_SEARCH_PATH 'p'
390 #define TTV_SEARCH_CRITICPATH 'P'
391
392 /* type user des paths */
393 #define TTV_PATH_PREVIOUS_NODE 0x00000001 /* node before path end, use only with stb */
394 #define TTV_PATH_PERIOD_CHANGE 0x00000002 /* period change due to filters */
395 #define TTV_PATH_OUTPUT_PHASE 0x00000003
396 #define TTV_PATH_END_VT 0x00000004
397 #define TTV_PATH_PHASE_INFO 0x00000005
398
399 /* type user des critic */
400 #define TTV_CRITIC_TABMC 0x00000001
401
402 /* pseudo fonction */
403 #define TTV_LINETYPE(line) (((line->TYPE & TTV_LINE_RC) == TTV_LINE_RC) ? \
404 TTV_FIND_RC : (long)0)
405
406 /* variables */
407 extern int TTV_MARK_MODE;
408 #define TTV_MARK_MODE_DO 1
409 #define TTV_MARK_MODE_USE 2
410
411 // mask pour le champ clock_flag de ttvcritic
412 #define TTV_NODE_FLAG_ISCLOCK 1
413 #define TTV_NODE_FLAG_FIRST_OF_DETAIL 2
414 #define TTV_NODE_FLAG_ISLATCH_ACCESS 4
415 #define TTV_NODE_FLAG_NOALLOC 8
416
417 #define TTV_SIG_GATE_CONFLICT 90
418 #define TTV_SIG_GATE_TRISTATE 91
419 #define TTV_SIG_GATE_TRISTATE_CONFLICT 92
420 #define TTV_SIG_GATE_DUAL_CMOS 93
421 #define TTV_SIG_GATE_MEMSYM 94
422 #define TTV_SIG_GATE_NAND_RS 95
423 #define TTV_SIG_GATE_NOR_RS 96
424 #define TTV_SIG_GATE_RS 97
425 #define TTV_SIG_GATE_LATCH 98
426 #define TTV_SIG_GATE_FLIPFLOP 99
427
428 // mask pour les flags de signaux
429 #define TTV_SIG_FLAGS_DONTCROSS 0x1
430 #define TTV_SIG_FLAGS_ISDATA 0x2
431 #define TTV_SIG_FLAGS_ISSLAVE 0x4
432 #define TTV_SIG_FLAGS_ISMASTER 0x8
433 //#define TTV_SIG_FLAGS_ISSET 0x10
434 //#define TTV_SIG_FLAGS_ISRESET 0x20
435 #define TTV_SIG_FLAGS_TRANSPARENT 0x40
436
437 #define TTV_FINDSTRUCT_FLAGS_NOFILTERMAX 1
438 #define TTV_FINDSTRUCT_FLAGS_FORCEDTRANSPARENCY 2
439 #define TTV_FINDSTRUCT_FLAGS_MUSTBECLOCK 4
440 #define TTV_FINDSTRUCT_FLAGS_ISIDEAL 8
441 #define TTV_FINDSTRUCT_FLAGS_LAST_CROSSED_IS_PRECH 16
442 #define TTV_FINDSTRUCT_CROSS_ENABLED 32
443
444 #define TTV_TPS_FINDSTRUCT_THRU_FILTER_NOCROSS 1
445
446 /* STRUCTURES DE TTV */
447
448 typedef struct ttvnode_vcd_info
449 {
450 struct ttvsig *PREVSIG;
451 int TIME;
452 float SLOPE;
453 } ttvnode_vcd_info ;
454
455 typedef struct ttvtrans_vcd_power
456 {
457 struct ttvtrans_vcd_power *NEXT;
458 struct ttvtrans_vcd_power *PREV;
459 struct ttvsig *SIG;
460 int TIME;
461 float NRJ;
462 } ttvtrans_vcd_power ;
463
464 typedef struct {
465 int NB ;
466 long *DELAY ;
467 long *SLOPE ;
468 } ttvcriticmc ;
469
470 typedef struct ttvfind_stb_stuff
471 {
472 struct ttvfind_stb_stuff *NEXT;
473 char PHASE, STARTPHASE;
474 char FLAGS;
475 long CROSSDELAY ; /* instant de transparence */
476 long NOMORECROSSDELAY ; /* instant de fin de transparence */
477 long IDEAL_CROSSDELAY ; /* instant de transparence */
478 long IDEAL_NOMORECROSSDELAY ; /* instant de fin de transparence */
479 long CROSSDELAY_MIN ; /* delay min qui peut crosser*/
480 long PERIOD_CHANGE;
481 } ttvfind_stb_stuff;
482
483 typedef struct ttvpath_stb_stuff
484 {
485 struct ttvpath_stb_stuff *NEXT;
486 char STARTPHASE;
487 long STARTTIME ;
488 long PERIOD_CHANGE;
489 } ttvpath_stb_stuff;
490
491 typedef struct ttvfind /* evenement d'un signal */
492 {
493 struct ttvfind *NEXT ; /* pointeur sur le suivant */
494 long TYPE ; /* type dans la fifo */
495 long DELAY ; /* delay pour les parcours */
496 struct ttvline *OUTLINE ; /* retour de chemin */
497 char FIFO ; /* fifo level */
498 char THRU_FILTER;
499 char FLAGS;
500 char PERIODE ; /* phase max d'origine */
501 char ORGPHASE ; /* phase min d'origine */
502 // char ORGPHASE, PHASE ; /* phase min d'origine */
503 ttvfind_stb_stuff *STB;
504 }
505 ttvfind_list ;
506
507 typedef struct ttvevent /* evenement d'un signal */
508 {
509 struct ttvsig *ROOT ; /* pointeur sur le signal */
510 long TYPE ; /* type de signal */
511 struct ttvline *INLINE ; /* lien de l'evenement */
512 struct ttvline *INPATH ; /* chemin de l'evenement */
513 struct ttvfind *FIND ; /* info de recherche */
514 ptype_list *USER ; /* champs utilisateur */
515 }
516 ttvevent_list ;
517
518 typedef struct ttvsig /* signal pour le timing */
519 {
520 char *NAME ; /* nom du signal */
521 char *NETNAME ; /* nom du net */
522 float CAPA ; /* capacite associe */
523 struct ttvfig *ROOT ; /* ttvfig du signal */
524 long TYPE ; /* type de signal */
525 struct ttvevent NODE[2] ; /* 2 evenement du signal */
526 ptype_list *USER ; /* champs utilisateur */
527 int PNODE[2]; // pas dans le champ NODE pour gagner en 64bits
528 }
529 ttvsig_list ;
530
531 typedef struct ttvsig_capas
532 {
533 float CAPAUP;
534 float CAPAUPMIN;
535 float CAPAUPMAX;
536 float CAPADN;
537 float CAPADNMIN;
538 float CAPADNMAX;
539 }ttvsig_capas;
540
541 typedef struct ttvsbloc /* liste de blocs de signaux */
542 {
543 struct ttvsbloc *NEXT ; /* next pour liste chainee */
544 struct ttvsig SIG[TTV_MAX_SBLOC] ; /* tableau de signaux */
545 }
546 ttvsbloc_list ;
547
548 typedef struct ttvdelay /* delay modifier */
549 {
550 long VALMAX ; /* valeur du temps max */
551 long FMAX ; /* valeur du front max */
552 long VALMIN ; /* valeur du temps min */
553 long FMIN ; /* valeur du front min */
554 float CMAX ; /* valeur de capa max */
555 float CMIN ; /* valeur de capa min */
556 float RDRIVERMAX ;
557 float RDRIVERMIN ;
558 float CDRIVERMAX ;
559 float CDRIVERMIN ;
560 ptype_list *USER ;
561 }
562 ttvdelay_list ;
563
564
565 typedef struct ttvline /* lien entre evenement */
566 {
567 struct ttvline *NEXT ; /* champs next pour liste */
568 struct ttvfig *FIG ; /* ttvfif pere du lien */
569 struct ttvevent *ROOT ; /* evenement destination */
570 long TYPE ; /* type de lien */
571 int INDEX ; /* index du lien */
572 struct ttvevent *NODE ; /* evenement source */
573 long VALMAX ; /* valeur du temps max */
574 long FMAX ; /* valeur du front max */
575 long VALMIN ; /* valeur du temps min */
576 long FMIN ; /* valeur du front min */
577 char *MDMAX ; /* modele de temps max */
578 char *MDMIN ; /* modele de temps min */
579 char *MFMAX ; /* modele de temps max */
580 char *MFMIN ; /* modele de temps min */
581 ptype_list *USER ; /* champs utilisateur */
582 }
583 ttvline_list ;
584
585 typedef struct ttv_onepropinfo
586 {
587 long DELAY ;
588 long SLEW ;
589 stm_pwl *PWL;
590 long FIND_DELAY;
591 float R ;
592 float C1 ;
593 float C2 ;
594 float RDRIVER ;
595 float CAPA ;
596 float ENERGY ;
597 } ttv_onepropinfo;
598
599 typedef struct ttvpropinfo
600 {
601 ttv_onepropinfo CTK, *REF;
602 ttvline_list *PREVIOUS_LINE ;
603 }
604 ttvpropinfo_list ;
605
606 typedef struct ttvlbloc /* liste de blocs de liens */
607 {
608 struct ttvlbloc *NEXT ; /* next pour liste chainee */
609 struct ttvline LINE[TTV_MAX_LBLOC] ;/* tableau de liens */
610 }
611 ttvlbloc_list ;
612
613 typedef struct ttvcritic /* detail de chemin */
614 {
615 struct ttvcritic *NEXT ; /* noeud suivant */
616 struct ttvfig *FIG ; /* figure du delay */
617 char *NAME ; /* nom du noeud */
618 char *NETNAME ; /* nom du signal */
619 char *MODNAME ; /* nom du model */
620 char *LINEMODELNAME; /* nom du model */
621 char *INSNAME ; /* nom de l'instance */
622 long TYPE ; /* type de recherche */
623 long SIGTYPE ; /* type de signal */
624 long DATADELAY ; /* delay de la data */
625 long DELAY ; /* delay */
626 long SLOPE ; /* front */
627 long REFDELAY ; /* delay */
628 long REFSLOPE ; /* front */
629 long SIMDELAY ; /* delay */
630 long SIMSLOPE ; /* front */
631 float CAPA ; /* nom du noeud */
632 float OUTPUT_CAPA ; /* nom du noeud */
633 long PROP; /* propriete */
634 ptype_list *USER ; /* champs utilisateur */
635 ttvevent_list *NODE ; /* beware, use only in stb or non cache */
636 ttvline_list *LINE ; /* beware, use only in stb or non cache */
637 int PNODE; /* node on the rc network */
638 char SNODE ; /* type de front */
639 char NODE_FLAG; /* flag de clock */
640 }
641 ttvcritic_list ;
642
643 typedef struct ttvpath /* detail de chemin */
644 {
645 struct ttvpath *NEXT ; /* noeud suivant */
646 struct ttvfig *FIG ; /* figure du delay */
647 struct ttvevent *ROOT ; /* noeud d'arrive */
648 struct ttvevent *NODE ; /* noeud de depart */
649 struct ttvevent *CMD ; /* command */
650 struct ttvevent *LATCH ; /* latch */
651 struct ttvevent *CMDLATCH ; /* latch */
652 struct ttvcritic *CRITIC ; /* detai du chemin */
653 ptype_list *LATCHLIST ; /* latch list */
654 long DATADELAY ; /* stabilite de la data */
655 long ACCESS ; /* access */
656 long REFACCESS ; /* access */
657 long TYPE ; /* type de recherche */
658 long DELAY ; /* delay */
659 long SLOPE ; /* front */
660 long REFDELAY ; /* delay */
661 long REFSLOPE ; /* front */
662 long DELAYSTART ; /* instant de debut */
663 long SLOPESTART ; /* front de debut */
664 timing_model *MD ; /* Model delay */
665 timing_model *MF ; /* Model front */
666 long CROSSMINDELAY; /* delai min qui peut crosser */
667 ptype_list *USER ; /* champs utilisateur */
668 long TTV_MORE_SEARCH_OPTIONS;
669 long CLOCKPATHDELAY;
670 int NBMC ; /* nombre de monte carlo */
671 char PHASE;
672 }
673 ttvpath_list ;
674
675 typedef struct ttvinfo /* information sur la ttvfig */
676 {
677 char *TOOLNAME ; /* outil tas ou htas */
678 char *TOOLVERSION ; /* version de l'outil */
679 char *TECHNONAME ; /* technologie elp */
680 char *TECHNOVERSION ; /* version de la technologie */
681 char *FIGNAME ; /* nom de modele */
682 struct ttvfig *MODEL ; /* model de figure */
683 chain_list *INSTANCES ; /* liste des intances */
684 long LEVEL ; /* niveau hierarchique */
685 int TTVYEAR ; /* annee de generation */
686 int TTVMONTH ; /* mois de generation */
687 int TTVDAY ; /* jour de generation */
688 int TTVHOUR ; /* heure de generation */
689 int TTVMIN ; /* minute de generation */
690 int TTVSEC ; /* seconde de generation */
691 long SLOPE ; /* front d'entree utilser */
692 float CAPAOUT ; /* capacite utiliser en sortie */
693 float STHHIGH ; /* capacite utiliser en sortie */
694 float STHLOW ; /* capacite utiliser en sortie */
695 float DTH ; /* capacite utiliser en sortie */
696 float TEMP ; /* temperature */
697 float TNOM ; /* temperature nominal */
698 float VDD ; /* capacite utiliser en sortie */
699 ptype_list *USER ; /* champs utilisateur */
700 char *FILENAME ; /* nom du fichier */
701 int DTB_VERSION;
702 }
703 ttvinfo_list ;
704
705 typedef struct ttvfig /* figure ttv */
706 {
707 struct ttvfig *NEXT ; /* ttvfig suivante de la liste */
708 struct ttvfig *ROOT ; /* ttvfig pere de la ttvfig */
709 long OLD ; /* age de la ttvfig */
710 char *INSNAME ; /* nom d'instance */
711 long STATUS ; /* etat de la ttvfig */
712 struct ttvinfo *INFO ; /* information sur la ttvfig */
713 struct ttvsig **CONSIG ; /* tableau des connecteurs */
714 long NBCONSIG ; /* nb de connecteurs */
715 struct ttvsig **NCSIG ; /* tableau des extremites RC */
716 long NBNCSIG ; /* nb des extremites RC */
717 struct chain *INS ; /* liste des instances */
718 struct ttvsig **ELCMDSIG ; /* tableau des commands ext */
719 long NBELCMDSIG ; /* nb de commands ext */
720 struct ttvsig **ILCMDSIG ; /* tableau des commands int */
721 long NBILCMDSIG ; /* nb de commands int */
722 struct ttvsig **ELATCHSIG ; /* tableau des latchs ext */
723 long NBELATCHSIG ; /* nb de latchs ext */
724 struct ttvsig **ILATCHSIG ; /* tableau des latchs int */
725 long NBILATCHSIG ; /* nb de latchs int */
726 struct ttvsig **EBREAKSIG ; /* tableau des breaks ext */
727 long NBEBREAKSIG ; /* nb de breaks ext */
728 struct ttvsig **IBREAKSIG ; /* tableau des breaks int */
729 long NBIBREAKSIG ; /* nb de breaks int */
730 struct ttvsig **EPRESIG ; /* tableau des precharges ext */
731 long NBEPRESIG ; /* nb de precharges ext */
732 struct ttvsig **IPRESIG ; /* tableau des precharges int */
733 long NBIPRESIG ; /* nb de precharges int */
734 struct ttvsig **EXTSIG ; /* tableau des signaux exter */
735 long NBEXTSIG ; /* nb de signaux exter */
736 struct ttvsig **INTSIG ; /* tableau des signaux inter */
737 long NBINTSIG ; /* nb de signaux inter */
738 struct ttvsig **ESIG ; /* tableau des signaux externe */
739 long NBESIG ; /* nb de signaux externe */
740 struct ttvsbloc *ISIG ; /* tableau des signaux interne */
741 long NBISIG ; /* nb de signaux interne */
742 struct ttvlbloc *PBLOC ; /* tableau de chemin complet */
743 long NBPBLOC ; /* nb de chemin complet */
744 struct ttvlbloc *JBLOC ; /* tableau de chemin sur T */
745 long NBJBLOC ; /* nb de chemin sur T */
746 struct ttvlbloc *TBLOC ; /* tableau de chemin incomplet */
747 long NBTBLOC ; /* nb de chemin incomplet */
748 struct ttvlbloc *FBLOC ; /* tableau de liens interne */
749 long NBFBLOC ; /* nb de liens interne */
750 struct ttvlbloc *EBLOC ; /* tableau de liens complet */
751 long NBEBLOC ; /* nb de liens complet */
752 struct ttvlbloc *DBLOC ; /* tableau de liens incomplet */
753 long NBDBLOC ; /* nb de liens incomplet */
754 struct ttvdelay ***DELAY ; /* delay modifie */
755 ptype_list *USER ; /* champs utilisateur */
756 unsigned int SIGN;
757 }
758 ttvfig_list ;
759
760 typedef struct
761 {
762 int RuleNumber;
763 float Multiplier;
764 long Flags; // inf miscdata->lval
765 } ttv_MultiCycleInfo;
766
767 #define TTV_MULTICYCLE_ANYINPUT 0x1000000 /* a eviter: les collisions avec les flags multicycle de inf*/
768
769 typedef struct stb_directive
770 {
771 struct stb_directive *next;
772 ttvsig_list *target2;
773 char *from;
774 long margin;
775 char filter, target1_dir, target2_dir, operation;
776 } ttv_directive;
777
778 typedef struct
779 {
780 int nb, nbsig;
781 int nbpvt, key;
782 unsigned int globalseed;
783 unsigned int mainseed;
784 } ssta_entry_header;
785
786 typedef struct
787 {
788 int delaymin;
789 int slopemin;
790 int delaymax;
791 int slopemax;
792 } ssta_entry_values;
793
794 typedef struct
795 {
796 float min, max;
797 double moy, var;
798 } ttv_line_delay_ssta_info;
799
800 typedef struct
801 {
802 ttv_line_delay_ssta_info delaymax, delaymin;
803 } ttv_line_ssta_info;
804
805 typedef struct
806 {
807 float low, high;
808 } ttv_swing_info;
809 /* VARIABLES DE TTV */
810
811 extern ttvfig_list *TTV_LIST_TTVFIG ;
812 extern chain_list *TTV_HEAD_TTVFIG ;
813 extern long TTV_SEUIL_MAX ;
814 extern long TTV_SEUIL_MIN ;
815 extern long TTV_INFO_CAPARM ;
816 extern long TTV_INFO_CAPASW ;
817 extern short TTV_INFO_ARGC ;
818 extern char **TTV_INFO_ARGV ;
819 extern char TTV_PATH_SAVE ;
820 extern char *TTV_INFO_TOOLDATE ;
821 extern chain_list *TTV_NAME_IN ;
822 extern chain_list *TTV_NAME_OUT ;
823 extern char TTV_LANG ;
824 extern long TTV_NUMB_SIG ;
825 extern long TTV_NUMB_LINE ;
826 extern long TTV_MAX_SIG ;
827 extern long TTV_MAX_LINE ;
828 extern long TTV_MAX_FCYCLE ;
829 extern float TTV_UNIT;
830 extern int TTV_QUIET_MODE;
831 extern long TTV_PROPAGATE_FORCED_SLOPE;
832 extern float TTV_PROPAGATE_FORCED_CAPA;
833 /* FONCTION DE TTV */
834
835 extern ttvfig_list* ttv_allocttvfig __P(( char*,
836 char*,
837 ttvfig_list*
838 ));
839 extern void ttv_lockttvfig __P(( ttvfig_list* ));
840 extern void ttv_unlockttvfig __P(( ttvfig_list* ));
841 extern int ttv_freettvfig __P(( ttvfig_list* ));
842 extern int ttv_freettvfiglist __P(( chain_list* ));
843 extern void ttv_freeall __P(( void ));
844 extern int ttv_freeallttvfig __P(( ttvfig_list* ));
845 extern int ttv_freepathlist __P(( ttvpath_list* ));
846 extern int ttv_freecriticlist __P(( ttvcritic_list* ));
847 extern ttvsig_list** ttv_allocreflist __P(( chain_list*, long ));
848 extern chain_list* ttv_chainreflist __P(( ttvfig_list*,
849 ttvsig_list**,
850 long
851 ));
852 extern int ttv_freereflist __P(( ttvfig_list*,
853 ttvsig_list**,
854 long
855 ));
856 extern void ttv_addcaracline __P(( ttvline_list*,
857 char *,
858 char *,
859 char *,
860 char *
861 ));
862 extern int ttv_calcaracline __P(( ttvline_list*,
863 ttvline_list*,
864 long,
865 int
866 ));
867 extern void ttv_addinfreelist __P(( ttvfig_list*, long ));
868 extern int ttv_delinfreelist __P(( ptype_list *, ttvfig_list* ));
869 extern int ttv_freettvfigmemory __P(( ttvfig_list*, long ));
870 extern int ttv_freememoryiffull __P(( ttvfig_list*, long ));
871 extern int ttv_freememoryifmax __P(( ttvfig_list*, long ));
872 extern void ttv_fifopush __P(( ttvevent_list* ));
873 extern ttvevent_list* ttv_fifopop __P(( void ));
874 extern void ttv_fifoclean __P(( void ));
875 extern void ttv_fifodelete __P(( void ));
876 extern ttvcritic_list* ttv_getcritic __P(( ttvfig_list*,
877 ttvfig_list*,
878 ttvevent_list*,
879 ttvevent_list*,
880 ttvevent_list*,
881 ttvevent_list*,
882 long
883 ));
884 extern ttvpath_list* ttv_getcriticpath __P(( ttvfig_list*,
885 ttvfig_list*,
886 chain_list*,
887 chain_list*,
888 long,
889 long,
890 int,
891 long
892 ));
893 extern ttvpath_list* ttv_getcriticaccess __P(( ttvfig_list*,
894 ttvfig_list*,
895 chain_list*,
896 chain_list*,
897 chain_list*,
898 long,
899 long,
900 int,
901 long
902 ));
903 extern ttvpath_list* ttv_getpath __P(( ttvfig_list*,
904 ttvfig_list*,
905 ttvsig_list*,
906 chain_list*,
907 long,
908 long,
909 long
910 ));
911 extern ttvpath_list* ttv_getpathnocross __P(( ttvfig_list*,
912 ttvfig_list*,
913 ttvsig_list*,
914 chain_list*,
915 long,
916 long,
917 long
918 ));
919 extern ttvpath_list* ttv_getaccessnocross __P(( ttvfig_list*,
920 ttvfig_list*,
921 ttvsig_list*,
922 chain_list*,
923 long,
924 long,
925 long
926 ));
927 extern ttvpath_list* ttv_getpathsig __P(( ttvfig_list*,
928 ttvfig_list*,
929 ttvsig_list*,
930 chain_list*,
931 long,
932 long,
933 long
934 ));
935
936 extern ttvpath_list* ttv_getpathsignocross __P(( ttvfig_list*,
937 ttvfig_list*,
938 ttvsig_list*,
939 chain_list*,
940 long,
941 long,
942 long
943 ));
944 extern ttvpath_list* ttv_getaccesssignocross __P(( ttvfig_list*,
945 ttvfig_list*,
946 ttvsig_list*,
947 chain_list*,
948 long,
949 long,
950 long
951 ));
952
953 extern ttvpath_list* ttv_getaccess __P(( ttvfig_list*,
954 ttvfig_list*,
955 ttvsig_list*,
956 chain_list*,
957 chain_list*,
958 long,
959 long,
960 long
961 ));
962 extern ttvpath_list* ttv_getsigaccess __P(( ttvfig_list*,
963 ttvfig_list*,
964 ttvsig_list*,
965 chain_list*,
966 chain_list*,
967 long,
968 long,
969 long
970 ));
971 extern ttvpath_list* ttv_getallpath __P(( ttvfig_list*,
972 ttvfig_list*,
973 chain_list*,
974 chain_list*,
975 long,
976 long,
977 int,
978 long
979 ));
980 extern ttvpath_list* ttv_getallaccess __P(( ttvfig_list*,
981 ttvfig_list*,
982 chain_list*,
983 chain_list*,
984 chain_list*,
985 long,
986 long,
987 int,
988 long
989 ));
990 extern chain_list* ttv_getcriticpara __P(( ttvfig_list*,
991 ttvfig_list*,
992 ttvevent_list*,
993 ttvevent_list*,
994 long,
995 long,
996 chain_list*,
997 long
998 ));
999 extern int ttv_freecriticpara __P(( chain_list* )) ;
1000 extern ttvpath_list* ttv_getpara __P(( ttvfig_list*,
1001 ttvfig_list*,
1002 ttvevent_list*,
1003 ttvevent_list*,
1004 long,
1005 long,
1006 long,
1007 chain_list*,
1008 int
1009 ));
1010 extern chain_list* ttv_getdelay __P(( ttvfig_list*,
1011 ttvfig_list*,
1012 chain_list*,
1013 chain_list*,
1014 long,
1015 long,
1016 long
1017 ));
1018 extern chain_list* ttv_getconstraint __P(( ttvfig_list*,
1019 ttvfig_list*,
1020 ttvsig_list*,
1021 long,
1022 long,
1023 int
1024 ));
1025 long ttv_getconstraintquick(ttvfig_list *ttvfig,ttvfig_list *figpath,ttvevent_list *tve,ttvevent_list *cmd,long type, ttvline_list **rline);
1026
1027 extern int ttv_freedelaylist __P(( chain_list* ));
1028 extern void ttv_builtpath __P(( ttvfig_list*,
1029 long
1030 ));
1031 extern char ttv_getdir __P(( ttvsig_list* )) ;
1032 extern void ttv_drittv(ttvfig_list *ttvfig, long type, long find, char *filename);
1033
1034 extern void ttv_drittvold __P(( ttvfig_list*,
1035 long,
1036 long
1037 ));
1038 extern void ttv_detectinter __P(( ttvfig_list*, int )) ;
1039 extern ttvsig_list* ttv_addsig __P(( ttvfig_list*,
1040 char*,
1041 char*,
1042 float,
1043 long
1044 ));
1045 extern chain_list* ttv_addrefsig __P(( ttvfig_list*,
1046 char *name,
1047 char*,
1048 float,
1049 long,
1050 chain_list*
1051 ));
1052 extern long ttv_gettypesig __P(( ttvsig_list* ));
1053 extern void ttv_delrefsig __P(( ttvsig_list* ));
1054 extern ttvline_list* ttv_addline __P(( ttvfig_list*,
1055 ttvevent_list*,
1056 ttvevent_list*,
1057 long,
1058 long,
1059 long,
1060 long,
1061 long
1062 ));
1063 extern void ttv_addconttype __P(( ttvline_list*,
1064 long
1065 ));
1066 extern long ttv_getconttype __P(( ttvline_list* ));
1067 extern void ttv_delconttype __P(( ttvline_list* ));
1068
1069 extern void ttv_addmodelline __P(( ttvline_list*,
1070 char *,
1071 char *
1072 ));
1073 extern void ttv_getmodelline __P(( ttvline_list*,
1074 char **,
1075 char **
1076 ));
1077 extern void ttv_delmodelline __P(( ttvline_list* ));
1078 extern int ttv_delline __P(( ttvline_list* )) ;
1079 extern long ttv_getlinetype __P(( ttvline_list*));
1080 extern long ttv_getnewlinetype __P(( ttvline_list*,
1081 ttvsig_list*,
1082 ttvsig_list*
1083 ));
1084 extern void ttv_delcmd __P(( ttvfig_list*,
1085 ttvsig_list*
1086 ));
1087 extern ttvevent_list* ttv_getcmd __P(( ttvfig_list*,
1088 ttvevent_list*
1089 ));
1090 extern ptype_list* ttv_addcmd __P(( ttvline_list*,
1091 long,
1092 ttvevent_list*
1093 ));
1094 extern chain_list* ttv_getlrcmd __P(( ttvfig_list*,
1095 ttvsig_list*
1096 ));
1097 extern ttvevent_list* ttv_getlinecmd __P(( ttvfig_list*,
1098 ttvline_list*,
1099 long
1100 ));
1101 extern ttvfig_list* ttv_gethtmodel __P(( char *));
1102 extern ttvfig_list* ttv_getttvfig __P(( char*,
1103 long
1104 ));
1105 extern ttvfig_list* ttv_givehead __P(( char*,
1106 char*,
1107 ttvfig_list*
1108 ));
1109 extern ttvfig_list* ttv_givettvfig __P(( char*,
1110 char*,
1111 ttvfig_list*
1112 ));
1113 extern ttvfig_list* ttv_getttvins __P(( ttvfig_list*,
1114 char*,
1115 char*
1116 ));
1117 extern chain_list* ttv_getttvfiglist __P(( ttvfig_list* ));
1118 extern char* ttv_getinsname __P(( ttvfig_list*,
1119 char*,
1120 ttvfig_list*
1121 ));
1122 extern char* ttv_getsigname __P(( ttvfig_list*,
1123 char*,
1124 ttvsig_list*
1125 ));
1126 extern char* ttv_getnetname __P(( ttvfig_list*,
1127 char*,
1128 ttvsig_list*
1129 ));
1130 extern ttvsig_list* ttv_getsig __P(( ttvfig_list*,
1131 char*
1132 ));
1133 extern ttvsig_list* ttv_getsigbyhash __P(( ttvfig_list*,
1134 char*
1135 ));
1136 extern ttvsig_list* ttv_getsigbyname __P(( ttvfig_list*,
1137 char*,
1138 long
1139 ));
1140 extern ttvsig_list* ttv_getsigbyinsname __P(( ttvfig_list*,
1141 char*,
1142 long
1143 ));
1144 extern ttvsig_list* ttv_getsigbyindex __P(( ttvfig_list*,
1145 long,
1146 long
1147 ));
1148 extern chain_list* ttv_getsigbytype __P(( ttvfig_list*,
1149 ttvfig_list*,
1150 long,
1151 chain_list*
1152 ));
1153
1154 chain_list *ttv_getsigbytype_and_netname(ttvfig_list *ttvfig,ttvfig_list *ttvins,long type,chain_list *mask);
1155
1156 extern chain_list* ttv_getsignamelist __P(( ttvfig_list*,
1157 ttvfig_list*,
1158 chain_list*
1159 ));
1160 extern void ttv_freenamelist __P(( chain_list* ));
1161 extern chain_list* ttv_getallsigbytype __P(( ttvfig_list*,
1162 long,
1163 chain_list*
1164 ));
1165 extern void ttv_setsiglevel __P(( ttvsig_list*, long ));
1166 extern long ttv_getsiglevel __P(( ttvsig_list* ));
1167 extern void ttv_delsiglevel __P(( ttvfig_list*,
1168 ttvsig_list*
1169 ));
1170 extern int ttv_islinelevel __P(( ttvfig_list*,
1171 ttvline_list*,
1172 long
1173 ));
1174 extern void ttv_expfigsig __P(( ttvfig_list*,
1175 ttvsig_list*,
1176 long,
1177 long,
1178 long,
1179 long
1180 ));
1181 extern FILE * ttv_openfile __P((ttvfig_list *,
1182 long,
1183 char *
1184 ));
1185 extern long ttv_existefile __P((ttvfig_list *,
1186 long
1187 ));
1188 extern ttvfig_list* ttv_parsttvfig __P(( ttvfig_list*,
1189 long,
1190 long
1191 ));
1192 extern void ttv_builthtabfig __P(( ttvfig_list*, long ));
1193 extern void ttv_builthtabins __P(( ttvfig_list*, long ));
1194 extern void ttv_builthtabttvfig __P(( ttvfig_list*, long ));
1195 extern void ttv_freehtabfig __P(( ttvfig_list*, long ));
1196 extern void ttv_freehtabttvfig __P(( ttvfig_list*, long ));
1197
1198 extern char* ttv_revect __P(( char* ));
1199 extern char* ttv_devect __P(( char* ));
1200 extern int ttv_testmask __P(( ttvfig_list*,
1201 ttvsig_list*,
1202 chain_list*
1203 ));
1204 extern int ttv_jokersubst __P(( char*,
1205 char*,
1206 char
1207 ));
1208 extern void ttv_checkfigins __P(( ttvfig_list*,
1209 ttvfig_list*
1210 ));
1211 extern void ttv_checkallinstool __P(( ttvfig_list* ));
1212 extern void ttv_setttvlevel __P(( ttvfig_list* ));
1213 extern void ttv_setsigttvfiglevel __P(( ttvfig_list* ));
1214 extern void ttv_setttvdate __P(( ttvfig_list*, long ));
1215 extern void ttv_setcachesize __P(( double, double ));
1216 void ttv_disablecache(ttvfig_list *ttvfig);
1217 extern double ttv_getsigcachesize __P(( void ));
1218 extern double ttv_getlinecachesize __P(( void ));
1219 extern double ttv_getsigmemorysize __P(( void ));
1220 extern double ttv_getlinememorysize __P(( void ));
1221 extern void ttv_cleantagttvfig __P(( long ));
1222 extern char* ttv_getstmmodelname __P(( ttvfig_list*,
1223 ttvline_list *,
1224 int,
1225 char
1226 ));
1227 extern int ttv_islocononlyend __P(( ttvfig_list *,
1228 ttvevent_list *,
1229 long
1230 )) ;
1231 extern int ttv_islineonlyend __P(( ttvfig_list *,
1232 ttvline_list *,
1233 long
1234 )) ;
1235 extern void ttv_getinffile __P(( ttvfig_list* ));
1236 extern chain_list* ttv_getclocklist __P(( ttvfig_list* ));
1237 chain_list *ttv_getasyncsiglist(ttvfig_list* ttvfig);
1238
1239 extern chain_list* ttv_getclocksiglist __P(( ttvfig_list* ));
1240
1241 extern chain_list* ttv_addlooplist __P(( ttvfig_list*,
1242 chain_list*
1243 ));
1244 extern chain_list* ttv_detectloop __P(( ttvfig_list*,
1245 long
1246 ));
1247 extern void ttv_printloop __P(( int,
1248 chain_list*,
1249 char*
1250 ));
1251 extern int ttv_existeline __P(( ttvfig_list*,
1252 ttvevent_list*,
1253 ttvevent_list*,
1254 long
1255 ));
1256 extern ttvline_list *ttv_getline __P(( ttvfig_list*,
1257 ttvfig_list*,
1258 ttvevent_list*,
1259 ttvevent_list*,
1260 ttvevent_list*,
1261 long,
1262 long,
1263 int,
1264 int
1265 ));
1266 extern ttvfig_list* ttv_builtrefsig __P(( ttvfig_list* ));
1267 extern ttvdelay_list *ttv_getlinedelay __P(( ttvline_list*));
1268 extern ttvdelay_list *ttv_addlinedelay __P(( ttvline_list*,
1269 long,
1270 long,
1271 long,
1272 long,
1273 float,
1274 float
1275 ));
1276 extern void ttv_dellinedelay __P(( ttvline_list*));
1277 extern long ttv_getdelaymax __P(( ttvline_list*));
1278 extern long ttv_getdelaymin __P(( ttvline_list*));
1279 extern long ttv_getslopemax __P(( ttvline_list*));
1280 extern long ttv_getslopemin __P(( ttvline_list*));
1281 extern int ttv_calcnodedelay __P(( ttvline_list*,
1282 long,
1283 long,
1284 long,
1285 stm_pwl*,
1286 long,
1287 long,
1288 stm_pwl*
1289 ));
1290 extern long ttv_calclinedelayslope __P(( ttvline_list*,
1291 long,
1292 long,
1293 stm_pwl*,
1294 stm_pwl*,
1295 float,
1296 float,
1297 float,
1298 float,
1299 float,
1300 float,
1301 float,
1302 float,
1303 float,
1304 long*,
1305 long*,
1306 stm_pwl**,
1307 long*,
1308 long*,
1309 stm_pwl**,
1310 char,
1311 float,
1312 float,
1313 double*,
1314 double*,
1315 double*,
1316 float,
1317 float,
1318 double*,
1319 double*,
1320 double*,
1321 float*,
1322 float*
1323 ));
1324 extern void ttv_calcgatercdelayslope __P(( ttvline_list*,
1325 ttvline_list*,
1326 long,
1327 long,
1328 float,
1329 long*,
1330 long*,
1331 long*,
1332 long*,
1333 char
1334 ));
1335 extern void ttv_updatenodedelayslope __P(( ttvfig_list*,
1336 long,
1337 ttvevent_list*,
1338 long,
1339 char
1340 ));
1341 extern long ttv_calcnodedelayslope __P(( ttvfig_list*,
1342 long,
1343 ttvevent_list *,
1344 long,
1345 char
1346 ));
1347 extern long ttv_getdelaynode __P(( ttvfig_list*,
1348 long,
1349 ttvevent_list *,
1350 long
1351 ));
1352 extern long ttv_getslopenode __P(( ttvfig_list*,
1353 long,
1354 ttvevent_list *,
1355 long,
1356 long
1357 ));
1358 extern chain_list *ttv_levelise __P(( ttvfig_list *,
1359 long,
1360 long
1361 ));
1362 extern void ttv_movedelayline __P(( ttvfig_list *,
1363 long
1364 ));
1365 extern void ttv_cleanfigmodel __P(( ttvfig_list *,
1366 long,
1367 long
1368 ));
1369 chain_list *ttv_calcfigdelay(ttvfig_list *ttvfig,chain_list *chainnode,long level,long type, char mode, int (*init_func)(ttvevent_list *, void *), int (*end_func)(ttvevent_list *, void *), void *data, int nosonstraint);
1370 extern void ttv_freefigdelay __P(( chain_list * ));
1371 extern long ttv_absmaxdiffslope __P(( long,
1372 long,
1373 long
1374 ));
1375 extern ttvdelay_list *ttv_getnodedelay __P(( ttvevent_list* ));
1376 extern void ttvenv __P(( void ));
1377 extern int ttv_isemptyttvins __P(( ttvfig_list *,
1378 long
1379 ));
1380 extern void ttv_flatttvfigfromlist __P(( ttvfig_list *,
1381 chain_list *,
1382 long
1383 ));
1384 extern void ttv_flatttvfig __P(( ttvfig_list *,
1385 chain_list *,
1386 long
1387 ));
1388 extern int ttv_ctxparse __P(( ttvfig_list* ));
1389 extern void ttv_ctxdrive __P(( ttvfig_list* ));
1390 extern ttvsig_list* ttv_getttvsig __P(( ttvfig_list *,
1391 long,
1392 long,
1393 char *,
1394 losig_list *,
1395 char
1396 ));
1397 ttvsig_list* ttv_getttvsig_sub(ttvfig_list *figdest, losig_list *losig, long level, long type);
1398 extern void ttv_addsigcapas __P(( ttvsig_list *ttvsig,
1399 float cu,
1400 float cumin,
1401 float cumax,
1402 float cd,
1403 float cdmin,
1404 float cdmax
1405 ));
1406 extern ttvsig_capas* ttv_getsigcapas __P(( ttvsig_list *ttvsig,
1407 float *cu,
1408 float *cumin,
1409 float *cumax,
1410 float *cd,
1411 float *cdmin,
1412 float *cdmax
1413 ));
1414 extern void ttv_getallsigcapas __P(( ttvsig_list *ttvsig,
1415 float *cu,
1416 float *cumin,
1417 float *cumax,
1418 float *cd,
1419 float *cdmin,
1420 float *cdmax
1421 ));
1422 extern void ttv_delsigcapas __P(( ttvsig_list *ttvsig
1423 ));
1424 extern void ttv_setallsigcapas __P(( lofig_list *lofig,
1425 losig_list *losig,
1426 ttvsig_list *ttvsig
1427 ));
1428 extern int ttv_isttvsigdriver __P(( ttvfig_list *,
1429 long,
1430 long,
1431 ttvsig_list*
1432 ));
1433 extern ttvfig_list* ttv_getttvinsbyhiername __P(( ttvfig_list *,
1434 char *
1435 ));
1436 extern losig_list* ttv_getlosigfromevent __P(( ttvfig_list *,
1437 ttvsig_list *,
1438 char **,
1439 chain_list **,
1440 lofig_list **
1441 ));
1442 extern lofig_list *ttv_getrcxlofig __P(( ttvfig_list*));
1443 extern void ttv_delrcxlofig __P(( ttvfig_list*));
1444 extern void ttv_addaxis __P(( inffig_list *ifl, ttvfig_list *ttvfig));
1445 extern void ttv_readcell __P(( char * ));
1446 extern ttvfig_list *ttv_readcell_TTVFIG;
1447 extern ttvpath_list* ttv_classpath __P(( ttvpath_list*, long ));
1448 extern ptype_list* ttv_getlatchaccess __P(( ttvfig_list*,
1449 ttvevent_list*,
1450 long
1451 ));
1452
1453 void ttv_post_traitment(ttvfig_list *ttvfig);
1454 long ttv_calcnodeconstraint(ttvfig_list *ttvfig, long level, ttvevent_list *node, long type, char mode);
1455 void ttv_init_stm(ttvfig_list *ttvfig);
1456
1457
1458 // propagation functions
1459
1460 long ttv_RecomputeLineChain(ttvfig_list *tvf, ttvfig_list *tvi, chain_list *ordered_line_list, long inputSLEW, long *outputSLEW, float *energy, float capa, long type, long mode, int doref);
1461 void ttv_RecomputeCleanLineChain(chain_list *ordered_line_list);
1462 chain_list *ttv_BuildLineList(ttvfig_list *ttvfig, ttvevent_list *root, ttvevent_list *node, long type, int *usectk);
1463 void ttv_RecomputeFreeLineChain(chain_list *ordered_line_list);
1464 void ttv_CleanPropagation_PRECISION_LEVEL1(chain_list *line_list);
1465 chain_list *ttv_DoPropagation_PRECISION_LEVEL1(ttvfig_list *tvf, ttvfig_list *tvi, ttvevent_list *node, ttvevent_list *root, long type);
1466 void ttv_DoCharacPropagation(ttvfig_list *tvf, ttvfig_list *tvi, ttvevent_list *node, ttvevent_list *root, long type, chain_list *slope_list, chain_list *capa_list, chain_list **resd, chain_list **ress, chain_list **rese, chain_list *inputlinelist);
1467 ttvpropinfo_list *ttv_get_prop_info(ttvevent_list *node);
1468 long ttv_GET_FINDDELAY(ttvevent_list *node, int ref);
1469 long ttv_GET_LINE_DELAY(ttvline_list *line, long type, int ref);
1470 long ttv_GET_LINE_SLEW(ttvline_list *line, long type, int ref);
1471 int ttv_SetPrecisionLevel(int val);
1472 void ttv_set_search_exclude_type(long typestart, long typeend, long *oldstart, long *oldend);
1473 int ttv_testnetnamemask(ttvfig_list *ttvfig, ttvsig_list *ptsig, chain_list *mask);
1474 void ttv_FreeMarkedSigList();
1475
1476 extern ttvpath_list* ttv_allocpath __P(( ttvpath_list*,
1477 ttvfig_list*,
1478 ttvevent_list*,
1479 ttvevent_list*,
1480 ttvevent_list*,
1481 ttvevent_list*,
1482 ttvevent_list*,
1483 ptype_list *,
1484 long,
1485 long,
1486 long,
1487 long,
1488 long,
1489 long,
1490 long,
1491 long,
1492 long,
1493 long,
1494 timing_model*,
1495 timing_model*,
1496 long,
1497 char,
1498 long
1499 ));
1500
1501 ttvcritic_list *ttv_alloccritic(ttvcritic_list *headcritic,ttvfig_list *ttvfigh,ttvfig_list *ttvfig,ttvevent_list *node,long type,long data,long delay,long slope,long newdelay,long newslope, char nodeflags, char *linemodelname, ttvline_list *line);
1502
1503 float ttv_get_signal_output_capacitance(ttvfig_list *tvf, ttvsig_list *tvs);
1504
1505 void ttv_activate_real_access_mode(int val);
1506 void ttv_activate_path_and_access_mode(int val);
1507
1508 void ttv_getmargin(inffig_list *myfig, ttvsig_list *tvs, char *infregex, char *infsection, float *factor, long *delta);
1509 chain_list *ttv_getallmarginregex(inffig_list *myfig);
1510 ht *ttv_buildclockdetailht(NameAllocator *na, ttvfig_list *tvf, ttvpath_list *clockp, long findmode);
1511 void ttv_checkpathoverlap(NameAllocator *na, ttvfig_list *tvf, ttvpath_list *datap, ht *cht, long findmode, long *overlapc, long *overlapd);
1512
1513 int ttv_mark_signals_with_corresponding_path_margin_regex(ttvfig_list *tvf);
1514 void ttv_unmark_signals_corresponding_path_margin_regex(ttvfig_list *tvf);
1515 int ttv_get_path_margins(ttvfig_list *tvf, ttvpath_list *datapath, ttvpath_list *clockpath, long *margedata, long *margeclock, long *overlapc, long *overlapd,int clockisdata, int dataisclock);
1516 void ttv_checkinfchange(ttvfig_list *tvf);
1517 extern long ttv_getnodeslope __P(( ttvfig_list *, ttvfig_list *, ttvevent_list *, long *, long )) ;
1518
1519 #define TTV_MORE_OPTIONS_REAL_ACCESS 0x1
1520 #define TTV_MORE_OPTIONS_PATH_AND_ACCESS 0x2
1521 #define TTV_MORE_OPTIONS_ENABLE_STOP_ON_TTV_SIG_N 0x4
1522 #define TTV_MORE_OPTIONS_MULTIPLE_COMMAND_CRITIC_ACCESS 0x8
1523 #define TTV_MORE_OPTIONS_SIMPLE_CRITIC 0x10
1524 #define TTV_MORE_OPTIONS_DIFF_ENDING_CRITIC_COMMAND 0x20
1525 #define TTV_MORE_OPTIONS_MUST_BE_CLOCK 0x40
1526 #define TTV_MORE_OPTIONS_DONT_FILTER_ENDING_NODE 0x80
1527 #define TTV_MORE_OPTIONS_FLAG_PROGATE_USED 0x100
1528 #define TTV_MORE_OPTIONS_FLAG_THRU_FILTER_FOUND 0x200
1529 #define TTV_MORE_OPTIONS_ONLYHZ 0x400
1530 #define TTV_MORE_OPTIONS_ONLYNOTHZ 0x800
1531 #define TTV_MORE_OPTIONS_ADD_ASYNCHRONOUS_PATHS 0x1000
1532 #define TTV_MORE_OPTIONS_CROSS_STOP_NODE_IF_NONSTOP 0x2000
1533 #define TTV_MORE_OPTIONS_MOST_DIRECT_ACCESS 0x4000
1534 #define TTV_MORE_OPTIONS_USE_DATA_START 0x8000
1535 #define TTV_MORE_OPTIONS_USE_CLOCK_START 0x10000
1536 #define TTV_MORE_OPTIONS_USE_NODE_NAME_ONLY 0x20000
1537 #define TTV_MORE_OPTIONS_KEEP_PHASE_INFO 0x40000
1538 #define TTV_MORE_OPTIONS_CRITIC_PARA_SEARCH 0x80000
1539 #define TTV_MORE_OPTIONS_ADD_ASYNCHRONOUS_ACCESS 0x100000
1540 //#define TTV_MORE_OPTIONS_ENABLE_START_ON_TTV_SIG_Q 8
1541
1542 extern long TTV_MORE_SEARCH_OPTIONS;
1543 extern chain_list *TTV_EXPLICIT_CLOCK_NODES, *TTV_EXPLICIT_START_NODES, *TTV_EXPLICIT_END_NODES;
1544 extern int ttv_canbeinfalsepath(ttvevent_list *ev, char where);
1545 int ttv_hasaccessfalsepath(ttvfig_list *ttvfig,ttvevent_list *eventout, chain_list *clocks);
1546
1547 extern chain_list *ttv_getoutputlines(ttvevent_list *node, long type);
1548 ttvevent_list *ttv_opposite_event(ttvevent_list *cmd_ev);
1549 void ttv_experim_setstopaftergate1(int val);
1550 extern ttvpath_list* ttv_getpathnocross_v2 __P(( ttvfig_list*, ttvfig_list*, ttvsig_list*, chain_list*, long, long, long,int));
1551 extern ttvpath_list* ttv_getaccessnocross_v2 __P(( ttvfig_list*, ttvfig_list*, ttvsig_list*, chain_list*, long, long, long,int));
1552 ttvpath_list *filter_parallel_to_node(ttvpath_list *pth);
1553
1554 #define TTV_SEARCH_INFORMATIONS_CRITIC_FALSEPATH 0x1
1555 long ttv_get_search_informations();
1556 void ttv_reset_search_informations();
1557 void ttv_activate_search_charac_mode(chain_list *slopes_in, chain_list *capas_in);
1558 void ttv_retreive_search_charac_results(chain_list **delays, chain_list **slopes, chain_list **energy);
1559
1560 long ttv_getloadedfigtypes(ttvfig_list *tvf);
1561 chain_list *ttv_getendpoints(ttvfig_list *tvf, chain_list *sigl, long type);
1562 ttvpath_list *ttv_create_one_node_path(ttvfig_list *ttvfig,ttvfig_list *ttvins,ttvevent_list *node,long type);
1563 void ttv_activate_multi_cmd_critic_mode(int val);
1564 void ttv_activate_simple_critic(int val);
1565 void ttv_activate_multi_end_cmd_critic_mode(int val);
1566 void ttv_search_mode(int set, long mask);
1567
1568 long ttv_testsigflag(ttvsig_list *tvs, long mask);
1569 void ttv_setsigflag(ttvsig_list *tvs, long mask);
1570 void ttv_resetsigflag(ttvsig_list *tvs, long mask);
1571 void ttv_setsigflaggate(ttvsig_list *tvs, char num);
1572 int ttv_getgateinfo(int num, char **name, int *nbinput);
1573 int ttv_findgateinfo(char *sign);
1574
1575 void ttv_update_slope_and_output_capa(ttvfig_list *tf);
1576 int ttv_check_update_slope_and_output_capa(ttvfig_list *tf);
1577 void ttv_init_refsig(ttvfig_list *ttvfig, ttvsig_list *ptsig, char *name, char *net, float capa, long type);
1578
1579 extern long ttv_getinittime __P(( ttvfig_list *, ttvevent_list *, char, long, char, char *)) ;
1580 ttvpath_list *ttv_duppath(ttvpath_list *pt);
1581
1582 int ttv_isgateoutput(ttvfig_list *tvf, ttvsig_list *tvs,long type);
1583 int ttv_has_strict_setup(ttvevent_list *tve);
1584 int ttv_addsig_addrcxpnode(int mode);
1585
1586 chain_list *ttv_getconnectoraxis(ttvfig_list *ttvfig, int slope, char *name);
1587 int ttv_get_path_margins_info(ttvfig_list *tvf, ttvpath_list *path, float *factor, long *delta);
1588 ttvcritic_list *ttv_dupcritic(ttvcritic_list *pt);
1589
1590 extern void ttv_addhtmodel __P(( ttvfig_list*));
1591 extern void ttv_delhtmodel __P(( ttvfig_list*));
1592 extern ttvfig_list* ttv_gethtmodel __P(( char *));
1593 ptype_list *ttv_getlatchdatacommands(ttvfig_list *ttvfig,ttvevent_list *latch,long type);
1594 float ttv_getline_vt(ttvfig_list *ttvfig,ttvfig_list *figpath,ttvevent_list *tve,ttvevent_list *cmd,long type);
1595
1596 ptype_list *ttv_get_directive_slopes(ttvevent_list *tve, int setup, int clockisdata, int dataisclock);
1597 ttv_directive *ttv_get_directive(ttvsig_list *tvs);
1598 chain_list *ttv_getmatchingdirectivenodes(ttvfig_list *tvf, chain_list *mask, int nonstop);
1599
1600 ttvcriticmc* ttv_alloccriticmc( int n );
1601 void ttv_freecriticmc( ttvcriticmc *mc );
1602
1603 void ttv_delassociatedcriticmc( ttvcritic_list *c );
1604 void ttv_setassociatedcriticmc( ttvcritic_list *c, ttvcriticmc *mc );
1605 ttvcriticmc* ttv_getassociatedcriticmc( ttvcritic_list *c );
1606
1607 unsigned int ttv_signtimingfigure( ttvfig_list *tf );
1608 int ttv_isfalsepath ( ttvfig_list*, ttvevent_list *, ttvevent_list *, long, int clocktoclock, ttvevent_list *latch);
1609
1610 void ttv_sendttvdelays(ttvfig_list *tvf, int ctk, int nbpvt);
1611 int ttv_ssta_loadresults(ttvfig_list *tvf, chain_list *filenames, chain_list *order);
1612 int ttv_ssta_set_run_number(ttvfig_list *tvf, int num);
1613 int ttv_ssta_buildlinestat(ttvfig_list *tvf);
1614 ttv_line_ssta_info *ttv_ssta_get_ssta_info(ttvfig_list *tvf);
1615 int ttv_ssta_getline_index(ttvline_list *tvl);
1616 int ttv_ssta_getsig_index(ttvsig_list *tvs);
1617 float ttv_get_signal_capa(ttvsig_list *tvs);
1618
1619 void ttv_set_ttv_getpath_clock_list(chain_list *lst);
1620 void ttv_freepathstblist(ttvpath_stb_stuff *head);
1621
1622 #define _LONG_TO_DOUBLE(x) ((x)*1e-12/TTV_UNIT)
1623 #define _DOUBLE_TO_LONG(x) mbk_long_round((x)*1e12*TTV_UNIT)
1624
1625 int ttv_get_signal_swing(ttvfig_list *tvf, ttvsig_list *tvs, float *low, float *high);
1626 void ttv_set_signal_swing(ttvsig_list *tvs, float low, float high);
1627
1628 char *ttv_getnetname_sub(ttvfig_list *ttvfig,char *ptname,ttvsig_list *ptsig, int retonly);
1629 char *ttv_getsigname_sub(ttvfig_list *ttvfig,char *ptname,ttvsig_list *ptsig, int retonly);
1630
1631 chain_list *ttv_get_signals_from_netname(ttvfig_list *tvf, ht **h, char *netname);
1632 void ttv_free_signals_from_netname(ht *h);
1633
1634 #endif
1635