1 /****************************************************************************/
3 /* Chaine de CAO & VLSI AVERTEC */
5 /* Produit : TLF Version 1.00 */
6 /* Fichier : tlf_parse.c */
8 /* (c) copyright 2000 AVERTEC */
9 /* Tous droits reserves */
11 /* Auteur(s) : Gilles Augustins */
13 /****************************************************************************/
15 /****************************************************************************/
17 /****************************************************************************/
20 #include "tlf_parse.h"
23 /****************************************************************************/
25 /****************************************************************************/
28 /****************************************************************************/
30 /****************************************************************************/
33 char *TLF_TOOLNAME
= "tlf2ttv";
34 char *TLF_TOOLVERSION
= "1.0" ;
35 chain_list
*TLF_TTVFIG_LIST
= NULL
;
36 char TLF_TIME_UNIT
= TLF_NS
;
37 char TLF_CAPA_UNIT
= TLF_PF
;
38 char TLF_RES_UNIT
= TLF_KOHM
;
43 ht
*ATTRIBUTE_HT
= NULL
;
44 eqt_ctx
*tlfEqtCtx
= NULL
;
46 /****************************************************************************/
48 /****************************************************************************/
50 extern int tlf3parse() ;
51 extern void tlf3restart();
54 extern int tlf4parse() ;
55 extern void tlf4restart();
58 extern int gcfparse () ;
62 /****************************************************************************/
64 /****************************************************************************/
66 void parsetlf3 (char *tlf_file
)
68 avt_error("library", -1, AVT_INFO
, "loading TLF3 '¤2%s¤.'\n", tlf_file
);
69 tlf_parse (tlf_file
, 3);
72 /****************************************************************************/
74 void parsetlf4 (char *tlf_file
)
76 avt_error("library", -1, AVT_INFO
, "loading TLF4 '¤2%s¤.'\n", tlf_file
);
77 tlf_parse (tlf_file
, 4);
80 /****************************************************************************/
82 void tlf_parse (char *tlf_file
, int version
)
84 static char viergetlf3
= 1 ;
85 static char viergetlf4
= 1 ;
88 if ((tlf3in
= mbkfopen (tlf_file
, TLF_IN
, READ_TEXT
))) {
93 tlfEqtCtx
= eqt_init (EQT_NB_VARS
);
98 fprintf (stderr
, "TLF ERROR : no file %s\n", tlf_file
);
104 if ((tlf4in
= mbkfopen (tlf_file
, TLF_IN
, READ_TEXT
))) {
106 tlf4restart(tlf4in
) ;
109 tlfEqtCtx
= eqt_init (EQT_NB_VARS
);
111 eqt_term (tlfEqtCtx
);
114 fprintf (stderr
, "TLF ERROR : no file %s\n", tlf_file
);
115 EXIT (EXIT_FAILURE
) ;
120 /****************************************************************************/
122 chain_list
*tlf_load (char *filename
, int version
)
124 tlf_parse (filename
, version
) ;
125 return (TLF_TTVFIG_LIST
) ;
128 /****************************************************************************/
130 void tlf_gcf2stb (char *file
)
133 filename
= (char*)mbkalloc (TLF_BUFSIZE
* sizeof (char)) ;
135 sprintf (filename
, "%s.%s", file
, "gcf") ;
137 if ((gcfin
= mbkfopen (file
, "tlf", READ_TEXT
))) {
138 sprintf (filename
, "%s.%s", file
, "stb") ;
139 //GCF_OUT = fopen (filename, "w+") ;
140 GCF_OUT
= mbkfopen (file
, "stb", WRITE_TEXT
) ;
142 GCF_MODE
= CLOCK_DETECT
;
144 GCF_MODE
= CLOCK_DUMP
;
147 GCF_MODE
= DISABLE_DUMP
;
150 GCF_MODE
= SPECIN_DUMP
;
153 GCF_MODE
= SPECOUT_DUMP
;
159 printf ("File %s does not seem to exist\n", filename
) ;
160 EXIT (EXIT_FAILURE
) ;
164 /****************************************************************************/
171 d
= (long)(f
* 10) - (long)f
* 10 ;
184 /****************************************************************************/
186 long ftolstretch (float f
)
192 l
= l
< GCF_MIN_CONSTRAINT
? GCF_MIN_CONSTRAINT
: l
;
193 l
= l
> GCF_MAX_CONSTRAINT
? GCF_MAX_CONSTRAINT
: l
;
198 /****************************************************************************/
200 int is_attribute (char *ident
)
205 attribute
= gethtitem (ATTRIBUTE_HT
, ident
) ;
209 if ((attribute
!= EMPTYHT
) && (attribute
!= DELETEHT
))
215 /******************************************************************************/
217 void set_attribute (char *attribute
, char target
)
220 ATTRIBUTE_HT
= addht (ATTRIBUTE_HT_SIZE
) ;
222 addhtitem (ATTRIBUTE_HT
, attribute
, (long)target
) ;
225 /******************************************************************************/
227 void callback_attribute (char *attribute
, char *arg
)
230 gcc_silent
= attribute
;
232 /* fprintf (stdout, "calling %s (%s)\n", attribute, arg) ; */
235 /******************************************************************************/
237 int isclockpin (chain_list
*isclockpinchain
, char *pname
)
241 for (ch
= isclockpinchain
; ch
; ch
= ch
->NEXT
)
242 if (ch
->DATA
== pname
)
247 /******************************************************************************/
249 char getoutputtype (char *pname
, chain_list
*flipflops
, chain_list
*latchs
)
253 for (ch
= flipflops
; ch
; ch
= ch
->NEXT
)
254 if (ch
->DATA
== pname
)
256 for (ch
= latchs
; ch
; ch
= ch
->NEXT
)
257 if (ch
->DATA
== pname
)
262 /******************************************************************************/
267 /******************************************************************************/
274 TLF_TIME_UNIT
= TLF_NS
;
275 TLF_CAPA_UNIT
= TLF_PF
;