1 /****************************************************************************/
3 /* Chaine de CAO & VLSI Avertec */
6 /* Fichier : efg_lib.h */
8 /* (c) copyright 1991-2003 Avertec */
9 /* Tous droits reserves */
10 /* Support : contact@avertec.com */
12 /* Auteur(s) : Marc KUOCH */
14 /****************************************************************************/
15 /* Extraction d'une lofig concernant un chemin */
16 /****************************************************************************/
21 /*****************************************************************************/
23 /*****************************************************************************/
38 /*****************************************************************************/
40 /*****************************************************************************/
41 #define EFG_WITH_RC ((int) 1) /* */
42 #define EFG_WITHOUT_RC ((int) 0) /* */
44 #define EFG_BLOCK_TRS ((char) 'B') /* */
45 #define EFG_GOOD_TRS ((char) 'G') /* */
47 #define EFG_OUT_CAPA ((char) 'C') /* */
48 #define EFG_OUT_TRANSISTOR ((char) 'T') /* */
49 #define EFG_OUT_NONE ((char) 'N') /* */
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 ) /* */
63 #define EFG_SIG_CONE ((long) 0x11000000 )
64 #define EFG_CORRESP ((long) 0x11000001 )
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 ) /* */
80 // desc : correspondance orig
82 #define EFG_CONE_STUCK_GSP 0x2000000d
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 */
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
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
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
101 #define EFG_LOCON_CAPA ((long)0x80000000 ) // equivalent capa for a locon
102 #define EFG_SIG2CONE ((long)0x80000001 )
103 #define EFG_SIG2CONE ((long)0x80000001 )
105 #define EFG_GOODRC_INPUT 1
106 #define EFG_GOODRC_OUTPUT 2
108 #define EFG_ADDITIONAL_IC 0xfab70801
110 #define EFG_ADDIC_FORCE_0 0x10
111 #define EFG_ADDIC_FORCE_1 0x20
113 #define EFG_SPISIG_CMDDIR_MASK 0x1
114 #define EFG_SPISIG_HZ_MASK 0x2
115 #define EFG_SPISIG_DELAY_TO_HZ_MASK 0x4
117 /*****************************************************************************/
119 /*****************************************************************************/
121 /*****************************************************************************/
123 /*****************************************************************************/
124 typedef struct spisig
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
138 long TPCKUP; // temps de montee de ck
139 long TPCKDN; // temps de descente de ck
140 long TCKSTAB; // temps de stabilite de ck
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
163 typedef struct efg_srcsig
{
164 struct efg_srcsig
*NEXT
;
165 struct efg_fullsig
*ROOT
;
173 typedef struct efg_fullsig
{
174 struct efg_fullsig
*NEXT
;
175 efg_srcsiglist
*SIGLIST
;
179 typedef struct efg_ctx
{
180 struct efg_ctx
*NEXT
;
183 ht
*LOINSCOPIED
; // corresp locon fig source -> fig destination
186 typedef struct efgglobal
{
189 losig_list
*VSSDESTFIG
;
190 losig_list
*VDDDESTFIG
;
192 efg_ctxlist
*CONTEXT
;
195 chain_list
*ALLADDEDCONES
;
204 long innode
, outnode
;
205 char *latchcmd
, *previous
;
207 } efg_path_event_info
;
208 /*****************************************************************************/
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 /*****************************************************************************/
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
);
242 extern locon_list
*efg_FindLocon ( lofig_list
*, char * );
244 extern void efg_extract_fig ( lofig_list
*lofig
,
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
,
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
*);
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
,
284 extern void efg_addctc ( chain_list
**added_ctclist
,
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
);
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
);