227bda8ef6e542d09f6f52d0490924c7f614706c
[tas-yagle.git] / distrib / sources / tas / tlc / tlc.c
1 /******************************************************************************\
2 * *
3 * Alliance VLSI CAD system *
4 * +---+ *
5 * / \ / \ Laboratoire LIP6 - Département ASIM *
6 * / / \ Universite Paris 6 - Pierre et Marie Curie *
7 * +---+ \ \ *
8 * \ \ +---+ Address : LIP6 *
9 * \ / / 4, place Jussieu *
10 * \ / \ / 75252 Paris Cedex 05 *
11 * +---+ France *
12 * Web : www-asim.lip6.fr *
13 * Support : alliance-support@lip6.fr *
14 * *
15 ********************************************************************************
16 * *
17 * Tool : TLC v 1.00 *
18 * Author(s) : AVOT Gregoire *
19 * Last update : 20 Mai 1998 *
20 * *
21 *******************************************************************************/
22
23 #include AVT_H
24 #include MUT_H
25 #include MLO_H
26 #include RCN_H
27 #include TLC_H
28 #include <stdlib.h>
29
30 float TLC_COEF_CTC = 1.0;
31 float TLC_MAXSCALE_CAPAFACTOR = 1.0;
32 float TLC_MINSCALE_CAPAFACTOR = 1.0;
33 float TLC_MAXSCALE_RESIFACTOR = 1.0;
34 float TLC_MINSCALE_RESIFACTOR = 1.0;
35 float TLC_CAPAFACTOR = 1.0;
36 float TLC_RESIFACTOR = 1.0;
37
38 inline void tlc_setmaxfactor()
39 {
40 TLC_RESIFACTOR = TLC_MAXSCALE_RESIFACTOR ;
41 TLC_CAPAFACTOR = TLC_MAXSCALE_CAPAFACTOR ;
42 }
43
44 inline void tlc_setminfactor()
45 {
46 TLC_RESIFACTOR = TLC_MINSCALE_RESIFACTOR ;
47 TLC_CAPAFACTOR = TLC_MINSCALE_CAPAFACTOR ;
48 }
49
50 inline float tlc_getcapafactor()
51 {
52 return(TLC_CAPAFACTOR) ;
53 }
54
55 inline float tlc_getresifactor()
56 {
57 return(TLC_RESIFACTOR) ;
58 }
59
60 void tlcenv()
61 {
62 TLC_MAXSCALE_CAPAFACTOR = V_FLOAT_TAB[__TAS_MAXSCALE_CAPAFACTOR].VALUE ;
63
64 TLC_MINSCALE_CAPAFACTOR = V_FLOAT_TAB[__TAS_MINSCALE_CAPAFACTOR].VALUE;
65
66 TLC_MAXSCALE_RESIFACTOR = V_FLOAT_TAB[__TAS_MAXSCALE_RESIFACTOR].VALUE ;
67
68 TLC_MINSCALE_RESIFACTOR = V_FLOAT_TAB[__TAS_MINSCALE_RESIFACTOR].VALUE ;
69 }
70
71 tlc_loconparam *HEAP_PRM = NULL;
72 int MAX_HEAP_PRM = 8;
73
74 void tlc_mergecapa( dst, src )
75 locon_list *dst;
76 locon_list *src;
77 {
78 tlc_loconparam *tlcdst;
79 tlc_loconparam *tlcsrc;
80
81 tlcdst = tlc_getloconparam( dst );
82 tlcsrc = tlc_getloconparam( src );
83
84 if( !tlcdst )
85 {
86 tlc_setloconparam( dst, 0.0 );
87 tlcdst = tlc_getloconparam( dst );
88 }
89
90 if( tlcsrc )
91 tlc_replaceloconparam( dst, tlcsrc->CAPA + tlcdst->CAPA );
92 }
93
94 void tlc_setloconparam( ptlocon, c )
95 locon_list *ptlocon;
96 float c;
97 {
98 tlc_loconparam *newprm;
99 int i;
100
101 #ifdef TLC_CHECK
102 if( getptype( ptlocon->USER, TLC_LOCONPRM ) )
103 {
104 fflush ( stdout );
105 fprintf( stderr, "*** TLC error *** in tlc_setloconparam\n" );
106 fprintf( stderr,
107 "connector %s have already electrical parameters\n",
108 ptlocon->NAME
109 );
110 EXIT(1);
111 }
112 #endif
113
114 if(!HEAP_PRM)
115 {
116 HEAP_PRM=(tlc_loconparam*)mbkalloc( sizeof(tlc_loconparam)*MAX_HEAP_PRM );
117 newprm=HEAP_PRM;
118
119 for(i=1;i<MAX_HEAP_PRM;i++)
120 {
121 newprm->NEXT=newprm+1;
122 newprm++;
123 }
124 newprm->NEXT=NULL;
125 }
126
127 newprm=HEAP_PRM;
128 HEAP_PRM=HEAP_PRM->NEXT;
129
130 newprm->NEXT=NULL;
131 newprm->CAPA=c;
132
133 ptlocon->USER=addptype(ptlocon->USER, TLC_LOCONPRM,newprm);
134 }
135
136 tlc_loconparam* tlc_getloconparam( ptlocon )
137 locon_list *ptlocon;
138 {
139 ptype_list *pt;
140
141 pt=getptype(ptlocon->USER,TLC_LOCONPRM);
142
143 if(pt)
144 return((tlc_loconparam*)(pt->DATA));
145
146 return(NULL);
147 }
148
149 void tlc_delloconparam( ptl )
150 locon_list *ptl;
151 {
152 tlc_loconparam *pt ;
153 ptype_list *ptype;
154
155 ptype = getptype( ptl->USER, TLC_LOCONPRM );
156 if( ptype == NULL )
157 return;
158
159 pt = (tlc_loconparam*)ptype->DATA ;
160 pt->NEXT=HEAP_PRM;
161 HEAP_PRM=pt;
162
163 ptl->USER = delptype( ptl->USER, TLC_LOCONPRM ) ;
164 }
165
166 void tlc_replaceloconparam( ptcon, c )
167 locon_list *ptcon;
168 float c;
169 {
170 ptype_list *pt;
171 tlc_loconparam *prm;
172
173 pt = getptype( ptcon->USER, TLC_LOCONPRM );
174
175 if( !pt )
176 {
177 fflush ( stdout );
178 fprintf( stderr, "*** TLC error *** in tlc_replaceloconparam()\n" );
179 fprintf( stderr,
180 "No electrical parameter on locon %s\n",
181 ptcon->NAME
182 );
183 EXIT(1);
184 }
185
186 prm = (tlc_loconparam*)(pt->DATA);
187
188 prm->CAPA = c;
189 }
190
191 void tlc_setlosigalim( ptsig )
192 losig_list *ptsig;
193 {
194 ptype_list *pt;
195
196 pt = getptype( ptsig->USER, TLC_ALIM );
197 if( pt )
198 return;
199
200 ptsig->USER = addptype( ptsig->USER, TLC_ALIM, NULL );
201 }
202
203 void tlc_resetsigalim( ptsig )
204 losig_list *ptsig;
205 {
206 #ifdef TLC_CHECK
207 ptype_list *pt;
208
209 pt = getptype( ptsig->USER, TLC_ALIM );
210
211 if( !pt )
212 {
213 fflush ( stdout );
214 fprintf( stderr, "*** TLC error *** in tlc_resetsigalim()\n" );
215 fprintf( stderr, "Signal is not typed alim.\n" );
216 EXIT(1);
217 }
218 #endif
219
220 ptsig->USER = delptype( ptsig->USER, TLC_ALIM );
221 }
222
223 int tlc_islosigalim( ptsig )
224 losig_list *ptsig;
225 {
226 if( getptype( ptsig->USER, TLC_ALIM ) )
227 return(1);
228 return(0);
229 }