Initial version of donated sources by Avertec, 3.4p5.
[tas-yagle.git] / distrib / sources / efg / efg_lib.h
1 /****************************************************************************/
2 /* */
3 /* Chaine de CAO & VLSI Avertec */
4 /* */
5 /* Produit : EFG */
6 /* Fichier : efg_lib.h */
7 /* */
8 /* (c) copyright 1991-2003 Avertec */
9 /* Tous droits reserves */
10 /* Support : contact@avertec.com */
11 /* */
12 /* Auteur(s) : Marc KUOCH */
13 /* */
14 /****************************************************************************/
15 /* Extraction d'une lofig concernant un chemin */
16 /****************************************************************************/
17
18 #ifndef EFG
19 #define EFG
20
21 /*****************************************************************************/
22 /* includes */
23 /*****************************************************************************/
24
25
26 #include <stdio.h>
27 #include <stdlib.h>
28 #include <string.h>
29 #include <limits.h>
30 #include MUT_H
31 #include MLO_H
32 #include MLU_H
33 #include RCN_H
34 #include INF_H
35 #include ELP_H
36 #include CNS_H
37
38 /*****************************************************************************/
39 /* defines */
40 /*****************************************************************************/
41 #define EFG_WITH_RC ((int) 1) /* */
42 #define EFG_WITHOUT_RC ((int) 0) /* */
43
44 #define EFG_BLOCK_TRS ((char) 'B') /* */
45 #define EFG_GOOD_TRS ((char) 'G') /* */
46
47 #define EFG_OUT_CAPA ((char) 'C') /* */
48 #define EFG_OUT_TRANSISTOR ((char) 'T') /* */
49 #define EFG_OUT_NONE ((char) 'N') /* */
50
51 #define EFG_ALIM ((char) 'A') /* signal alimentation */
52 #define EFG_RISE ((char) 'U') /* signal alimentation */
53 #define EFG_FALL ((char) 'D') /* signal alimentation */
54 #define EFG_FIG_HTSIG ((long) 0xFF000000 ) /* htab for signal */
55 #define EFG_SIG_SET_ZERO ((void*) 0x00000000 ) /* */
56 #define EFG_SIG_SET_ONE ((void*) 0x00000001 ) /* */
57 #define EFG_SIG_SET_FALL ((void*) 0x00000002 ) /* */
58 #define EFG_SIG_SET_RISE ((void*) 0x00000003 ) /* */
59 #define EFG_SIG_SET_MASK ((long) 0x00000fff ) /* */
60 #define EFG_SIG_SET_OUTPATH ((long) 0x00001000 ) /* */
61 #define EFG_SIG_SET_PRECHARGED ((long) 0x00002000 ) /* */
62
63 #define EFG_SIG_CONE ((long) 0x11000000 )
64 #define EFG_CORRESP ((long) 0x11000001 )
65
66 #define EFG_SIG_LOCON ((long) 0x20000000 ) /* signal => connecteur */
67 #define EFG_SIG_DRV ((long) 0x20000001 ) /* info du .inf */
68 #define EFG_SIG_VDD ((long) 0x20000002 ) /* info du .inf */
69 #define EFG_SIG_VSS ((long) 0x20000003 ) /* info du .inf */
70 #define EFG_SIG_ALIM ((long) 0x20000004 ) /* info du .inf */
71 #define EFG_SIG_TERMINAL ((long) 0x20000005 ) /* info du .inf */
72 #define EFG_SIG_INITIAL ((long) 0x20000006 ) /* info du .inf */
73 #define EFG_SIG_SET ((long) 0x20000007 ) /* info du .inf */
74 #define EFG_SIG_BEG ((long) 0x20000008 ) /* 1er sig du .inf */
75 #define EFG_SIG_END ((long) 0x20000009 ) /* dernier sig du .inf */
76 #define EFG_SIG_SET_NUM ((long) 0x2000000a ) /* */
77 #define EFG_SIG_CLK ((long) 0x2000000b ) /* */
78 #define EFG_FORCE_IC ((long) 0x2000000c ) /* */
79 // locon
80 // desc : correspondance orig
81 // et extrait
82 #define EFG_CONE_STUCK_GSP 0x2000000d
83
84 #define EFG_SIG_SET_HIER ((long)0x3F000000 ) /* */
85 #define EFG_SIG_BEG_HIER ((long)0x3F000001 ) /* */
86 #define EFG_SIG_END_HIER ((long)0x3F000002 ) /* */
87 #define EFG_INS_OUTPATH ((long)0x3F000003 ) /* */
88 #define EFG_CONFIG_CONINS ((long)0x3F000004 ) /* sig fig <=> sig ins */
89
90 #define EFG_INS_NO_COPY ((long)0x40000000 ) // instance a ne pas dupliquer
91 #define EFG_INS_FIG ((long)0x40000001 ) // special lofig linked to loins
92 #define EFG_INS_CTXT ((long)0x40000002 ) // contexte de l'instance
93
94 #define EFG_SPISIG_ORG_NAME ((long)0x50000000 ) // Nom original du spisig s'il
95 // a ete modifie entre temps
96 #define EFG_SPISIG_LOOP_SPISIG 0x50000001 // Nom original du spisig s'il
97
98 #define EFG_ALIAS_ORG ((long)0x60000000 ) // Nom original des signaux / lotrs
99 #define EFG_CONE_FCT ((long)0x70000000 ) // le cone est sur le critic path
100
101 #define EFG_LOCON_CAPA ((long)0x80000000 ) // equivalent capa for a locon
102 #define EFG_SIG2CONE ((long)0x80000001 )
103 #define EFG_SIG2CONE ((long)0x80000001 )
104
105 #define EFG_GOODRC_INPUT 1
106 #define EFG_GOODRC_OUTPUT 2
107
108 #define EFG_ADDITIONAL_IC 0xfab70801
109
110 #define EFG_ADDIC_FORCE_0 0x10
111 #define EFG_ADDIC_FORCE_1 0x20
112
113 #define EFG_SPISIG_CMDDIR_MASK 0x1
114 #define EFG_SPISIG_HZ_MASK 0x2
115 #define EFG_SPISIG_DELAY_TO_HZ_MASK 0x4
116
117 /*****************************************************************************/
118 /* Global */
119 /*****************************************************************************/
120
121 /*****************************************************************************/
122 /* structures */
123 /*****************************************************************************/
124 typedef struct spisig
125 {
126 struct spisig *NEXT;
127 char *NAME; // nom hierarchique du signal
128 char *critic_NAME; // nom dans le detail du chemin
129 losig_list *SRCSIG; // signal de la figure originale
130 losig_list *DESTSIG; // signal de la figure extraite
131 //chain_list *LOCONRC; // si RC on sig
132 char *INCONRC; // si RC on sig
133 char *OUTCONRC; // si RC on sig
134 long INCONRC_NODE, OUTCONRC_NODE; // node num from rcx
135 int MINDATE, NUM; // num du signal pr le chemin
136 long EVENT; // type de transition du front
137 /*
138 long TPCKUP; // temps de montee de ck
139 long TPCKDN; // temps de descente de ck
140 long TCKSTAB; // temps de stabilite de ck
141 */
142 float ADDCAPA; // capa additionnelle sur le sig
143 float INITVOLT; // init de la tension du sig
144 float VTHLOW; // seuil de mesure low du front
145 float VTHHIGH; // seuil de mesure high du front
146 float VTH; // VT pour le front d entree
147 float VTHHZ; // VT pour les hz
148 char START; // 1 : c'est un noeud de départ, 0 : non
149 char END; // 1 : c'est un noeud d'arrivée, 0 : non
150 char CLK; // 1 : c'est un noeud sur un chemin de command, 0 : non
151 char GOODRC;
152 char HASRCLINE;
153 char ADDIC;
154 ptype_list *USER;
155 cone_list *CONE;
156 char *LATCHCMD;
157 char LATCHCMDDIR;
158 char *PREVIOUS;
159 int PATHNUM;
160 }
161 spisig_list;
162
163 typedef struct efg_srcsig {
164 struct efg_srcsig *NEXT;
165 struct efg_fullsig *ROOT;
166 int LEVEL;
167 char *CONTEXT;
168 losig_list *LOSIG;
169 lofig_list *LOFIG;
170 int *TABCONV;
171 } efg_srcsiglist ;
172
173 typedef struct efg_fullsig {
174 struct efg_fullsig *NEXT;
175 efg_srcsiglist *SIGLIST;
176 losig_list *DESTSIG;
177 } efg_fullsiglist;
178
179 typedef struct efg_ctx {
180 struct efg_ctx *NEXT;
181 ht *LOCONS;
182 ht *SRCSIG;
183 ht *LOINSCOPIED; // corresp locon fig source -> fig destination
184 } efg_ctxlist;
185
186 typedef struct efgglobal {
187 lofig_list *SRCFIG;
188 lofig_list *DESTFIG;
189 losig_list *VSSDESTFIG;
190 losig_list *VDDDESTFIG;
191 ht *HTCONTEXT;
192 efg_ctxlist *CONTEXT;
193 spisig_list *SPISIG;
194 ptype_list *ALIMS;
195 chain_list *ALLADDEDCONES;
196 } efg_global;
197
198 typedef struct
199 {
200 void *DATA;
201 long TYPE;
202 int mindate, date;
203 int flags;
204 long innode, outnode;
205 char *latchcmd, *previous;
206 char latchcmddir;
207 } efg_path_event_info;
208 /*****************************************************************************/
209 /* Global */
210 /*****************************************************************************/
211 extern efg_global *EFGCONTEXT;
212 extern char EFG_CALC_EQUI_CAPA;
213 extern int EFG_TRS_INDEX;
214 extern char *EFG_SET_FIG_NAME;
215 /*****************************************************************************/
216 /* functions */
217 /*****************************************************************************/
218 extern char *efg_getconename (losig_list *sig);
219 extern void efg_remove_figure_alias( lofig_list *lofig );
220 extern void efg_del_corresp_alias_trs (lotrs_list *trs);
221 extern char *efg_get_origtrsname (lotrs_list *sig);
222 extern void efg_del_corresp_alias (losig_list *sig);
223 extern char *efg_get_origsigname (losig_list *sig);
224 extern locon_list *efg_get_locon (lofig_list *fig, char *name);
225 extern lofig_list *efg_get_fig2ins (loins_list *loins);
226 extern void efg_set_fig2ins (loins_list *loins, lofig_list *lofig);
227 extern losig_list *efg_get_ht_sig (lofig_list *fig,char *signame);
228 extern int efg_sig_is_onpath (losig_list *sig,char *ctxt);
229 extern loins_list *efg_get_hier_loins (lofig_list *currentfig,char *insname);
230 extern char efg_SigIsAlim (losig_list *sig);
231 extern void efg_dont_copy_ins (loins_list *loins);
232 extern char *efg_revect (char *);
233 extern losig_list *efg_getlosigcone (cone_list *);
234 extern locon_list *efg_get_org_con(locon_list *);
235 extern lotrs_list *efg_get_org_trs(lotrs_list *);
236 extern losig_list *efg_get_org_sig(losig_list *);
237 extern locon_list *efg_get_ext_con(locon_list *);
238 extern losig_list *efg_get_ext_sig(losig_list *);
239 extern lotrs_list *efg_get_ext_trs(lotrs_list *);
240 extern void *efg_get_hier_sigptype (losig_list *sig,char *ctxt,long type);
241
242 extern locon_list *efg_FindLocon ( lofig_list*, char * );
243
244 extern void efg_extract_fig ( lofig_list *lofig,
245 lofig_list **figext,
246 cnsfig_list *cnsfig,
247 spisig_list *spisig,
248 chain_list **chaincone,
249 chain_list **chaininstance,
250 chain_list *loins2drv,
251 chain_list *lotrs2drv,
252 chain_list *locon2drv,
253 chain_list *losig2drv,
254 chain_list *cone_onpath,
255 chain_list *usrlist,
256 int markfig
257 );
258
259 // => spisig
260 extern spisig_list *efg_GetSpiSigByName (spisig_list *head,char *name);
261 extern void efg_UpdateSpiSigName (spisig_list *spisig, char *name);
262 extern losig_list *efg_GetHierSigByName (lofig_list*,char*,char**,loins_list**,char);
263 extern chain_list *efg_AddPathEvent ( chain_list *, char*, char, int, int, int, long, long, char *, char, char *);
264 extern ptype_list *efg_CreatePathByInf ( list_list *);
265 extern spisig_list *efg_BuildSpiSigList ( lofig_list* , chain_list*, spisig_list *, char, int *,int);
266 extern spisig_list *efg_BuildSpiSigFromInf (lofig_list*,list_list*);
267 extern spisig_list *efg_GetSpiSigByNum (spisig_list *,int );
268 extern spisig_list *efg_GetSpiSig (spisig_list *,char *);
269 extern spisig_list *efg_GetFirstSpiSig (spisig_list *head);
270 extern spisig_list *efg_GetLastSpiSig (spisig_list *head);
271 extern void efg_FreeSpiSigList ( spisig_list* head);
272 extern char *efg_GetSpiSigName ( spisig_list*);
273 extern int efg_IsWireOnSpiSig ( spisig_list*);
274 extern chain_list *efg_GetSpiSigNodeRc (spisig_list *spisig);
275 extern char *efg_GetSpiSigLoconRc (spisig_list *spisig, char dir);
276 extern long efg_GetSpiSigEvent ( spisig_list*);
277
278 extern void efg_FreeMarksOnExtFig ( lofig_list *lofig);
279 extern void efg_FreeMarksOnFig ( lofig_list *lofig);
280 extern chain_list *efg_set_extra_capa (lofig_list *figext,
281 char *signame,
282 float capaval
283 );
284 extern void efg_addctc ( chain_list **added_ctclist,
285 losig_list *sig,
286 losig_list *vss,
287 float capa
288 );
289 extern void efg_del_extra_capa (chain_list *headctc);
290 extern chain_list *efg_GetSig2Print (spisig_list *headspisig);
291 extern lotrs_list *efg_addlotrs (lofig_list *, lotrs_list *, int);
292 extern void efg_freecontext ( void );
293 spisig_list *efg_AddLatchLoopFeebackCone(lofig_list *lofig, cnsfig_list *cnsfig, spisig_list *origspisig);
294 int efg_GetSpiSigNum (spisig_list *spisig);
295 extern void efg_add_lotrs_capa_dup (lofig_list *fig, locon_list *con);
296 char *efg_getlosigname(losig_list *ls);
297
298 // temp
299 chain_list *efg_getcone_onpath (spisig_list *hdspisig,cnsfig_list *cnsfig );
300 void efg_createcontext();
301 void efg_setsrcfig2context (lofig_list *fig);
302 void efg_setspisig2context (spisig_list *spisig);
303 void efg_AddExtraCapa (spisig_list *ptspisig, float capa);
304 void efg_DelHierSigPtypeFromSpisig (spisig_list *spisig);
305 int efg_test_signal_flags(losig_list *ls, long flags);
306 void efg_FreePathEvent (chain_list *path);
307 void efg_updateflag(losig_list *ls, int set, long mask);
308 char *efg_get_fig_name(lofig_list *lf, char *buf);
309 cone_list *efg_getcone ( losig_list *sig );
310 losig_list *efg_try_to_add_alim_to_the_context(losig_list *sig, float value);
311
312 #endif