Initial version of donated sources by Avertec, 3.4p5.
[tas-yagle.git] / distrib / sources / tas / trc / trc_lib.h
1 /****************************************************************************/
2 /* */
3 /* Chaine de CAO & VLSI Alliance */
4 /* */
5 /* Produit : TRC Version 1.01 */
6 /* Fichier : trc101.h */
7 /* */
8 /* (c) copyright 1997-1998 Laboratoire LIP6 equipe ASIM */
9 /* Tous droits reserves */
10 /* Support : e-mail alliance-support@asim.lip6.fr */
11 /* */
12 /* Auteur(s) : Gregoire AVOT */
13 /* */
14 /****************************************************************************/
15
16 #ifndef TRCLIB_H
17 #define TRCLIB_H
18
19 #define RCXFLOAT double
20
21 // Bidouilles de Marc. Pour l'instant, ça marche.
22 #define TRC_LOCON_AWE (long)0x00000007 // TMP
23 extern int TRC_MARK_CON; // SOLUTION TMP
24
25
26 // Les convertions d'unités entre TAS, RCX et le SI...
27
28 // Tas et TTV : capa=fF, délais=pS
29 // Alliance : capa=pF, délais=pS
30
31 #define RCX_PTRTESTANDSET( p, v ) if(p) *p=v;
32 #define RCX_UNIT_TIME_TAS_TO_SI (1e-12)
33 #define RCX_UNIT_CAPA_ALC_TO_SI (1e-12)
34
35 // Structures temporaires crée sur les agresseurs créée par rcx_getagrlist() et
36 // libérée par rcx_freeagrlist(). L'utilisateur doit remplir les champs FMINUP,
37 // FMINDW, EVENT et ACTIF.
38
39 typedef struct rcxparam {
40 char *INSNAME;
41 lofig_list *LOFIG;
42 losig_list *SIGNAL;
43 RCXFLOAT FMINUP; // Front minimum avec crosstalk
44 RCXFLOAT F0UP; // Front minimum sans crosstalk
45 RCXFLOAT FMINDW;
46 RCXFLOAT F0DW;
47 RCXFLOAT CC; // Capacité de couplage vers l'agresseur
48 RCXFLOAT CCA; // Valeur totale des ctc sur l'agresseur
49 char ACTIF;
50 chain_list *SIGLOCAL;
51 ptype_list *USER;
52 } rcxparam ;
53
54 // Champ ACTIF :
55 #define RCX_AGRBEST 0x01
56 #define RCX_AGRWORST 0x02
57 #define RCX_MTX_BEST 0x04
58 #define RCX_MTX_WORST 0x08
59 #define RCX_QUIET 0x10
60 /* Les trois dernieres valeurs ne sont pas prise en compte par RCX. Elle servent
61 à indiquer que cet agresseur a été éliminé car il existe une contrainte de
62 mutuelle exclusion avec un autre agresseur. C'est géré par STB-CTK. */
63
64 // Ptype sur le losig qui pointe vers le rcxparam.
65 #define RCX_REALAGRESSOR 0x52435808
66
67
68 // Information sur la transition du signal
69
70 /* Note concernant les slopes :
71
72 Les champs FCCMAX et F0MAX servent à calculer les capacités équivalentes par
73 effet Miller. Les champs slope des structures MIN et MAX sont les fronts à
74 appliquer à l'entrée du réseau RC. Le MAX.slope n'est pas forcement égale au
75 FCCMAX, car FCCMAX est le front le plus mous sur tout le réseau RC et
76 MAX.slope est le front en entrée du réseau RC.
77 */
78
79 typedef struct {
80 RCXFLOAT slope ;
81 RCXFLOAT vend ;
82 RCXFLOAT vt ;
83 RCXFLOAT vdd ;
84 RCXFLOAT vsat ;
85 RCXFLOAT rlin ;
86 RCXFLOAT vth ;
87 RCXFLOAT r ;
88 RCXFLOAT c1 ;
89 RCXFLOAT c2 ;
90 RCXFLOAT slnrm ;
91 mbk_pwl *pwl ;
92 } rcx_slope_param ;
93
94 typedef struct {
95 RCXFLOAT F0MAX; // Front max sans crosstalk
96 RCXFLOAT FCCMAX; // Front max avec crosstalk
97 char SENS; // Sens de transition
98 RCXFLOAT CCA; // Somme des ctc sur le signal victime
99 rcx_slope_param MIN ;
100 rcx_slope_param MAX ;
101 } rcx_slope;
102
103 // La vue RCX.
104
105 typedef struct rcx
106 {
107 struct rcx *NEXT;
108 unsigned int FLAG;
109 lorcnet_list *VIEW;
110 locon_list *DRIVERSUP;
111 locon_list *DRIVERSDW;
112 chain_list *RCXEXTERNAL;
113 chain_list *RCXINTERNAL;
114 } rcx_list;
115
116
117
118 // Définition du sens d'une transition
119
120 #define TRC_SLOPE_UP 'U'
121 #define TRC_SLOPE_DOWN 'D'
122
123 // Type de résultat
124 #define RCX_MIN 'm'
125 #define RCX_MAX 'M'
126
127 // Sens relatifs des transitions
128 #define RCX_SAME 's'
129 #define RCX_OPPOSITE 'o'
130
131 // Champ USER des locon
132 #define RCXNAME ((long)1665)
133 #define RCX_LOCONCAPA_HEAP 0x5243580A
134 #define RCX_LOCONCAPA_SPACE 0x5243580D
135 #define RCX_LOCON_UP 0x5243580B
136 #define RCX_LOCON_DN 0x5243580C
137 #define RCX_FAKE 0x524358FA
138
139 // Champ USER des losig
140 #define PTYPERCX ((long)1664)
141 #define RCX_FAKE 0x524358FA
142
143 // Arguments pour la fonction setrcxmodel()
144 #define RCX_BEST ((int)1)
145 #define RCX_NOR ((int)2)
146 #define RCX_NOCTC ((int)3)
147 #define RCX_NORCTC ((int)4)
148 #define RCX_ALL ((int)0)
149
150 // Arguments pour la fonction rcx_crosstalkactive()
151 #define RCX_NOCROSSTALK 0
152 #define RCX_MILLER 1
153 #define RCX_QUERY -1
154
155 // Arguments pour la fonction rcx_rcnload()
156 #define RCX_CAPALOAD 0x1
157 #define RCX_PILOAD 0x2
158 #define RCX_BESTLOAD 0x3
159 #define RCX_LOADERROR 0x4
160
161 // Interface de la fonction rcx_getsigcapa()
162
163 #define RCX_SIGCAPA_GROUND ((char)0x01)
164 #define RCX_SIGCAPA_CTK ((char)0x02)
165
166 #define RCX_SIGCAPA_LOCAL ((char)0x01)
167 #define RCX_SIGCAPA_GLOBAL ((char)0x02)
168
169 #define RCX_SIGCAPA_NORM ((char)1)
170 #define RCX_SIGCAPA_MILLER ((char)2)
171 #define RCX_SIGCAPA_DELTA ((char)3)
172
173 extern RCXFLOAT RCX_MINRCSIGNAL;
174 extern RCXFLOAT RCX_MINRELCTKSIGNAL;
175 extern RCXFLOAT RCX_MINRELCTKFILTER;
176 extern RCXFLOAT RCX_CAPALOAD_MAXRC;
177 extern RCXFLOAT RCX_MAXDELTALOAD;
178
179 typedef struct rcx_signal_noise {
180 rcxparam *PARAM;
181 RCXFLOAT CGLOBALE;
182 RCXFLOAT CLOCALE;
183 RCXFLOAT NOISE_OVER;
184 RCXFLOAT NOISE_UNDER;
185 } rcx_signal_noise;
186
187 typedef struct {
188 rcxparam *PARAM;
189 RCXFLOAT CGLOBALE;
190 RCXFLOAT CLOCALE;
191 } rcxmodagr;
192
193 typedef struct awelist {
194 struct awelist *NEXT;
195 locon_list *LOCON;
196 RCXFLOAT DMAX;
197 RCXFLOAT DMIN;
198 RCXFLOAT FMAX;
199 RCXFLOAT FMIN;
200 } awelist;
201
202 typedef struct rcxfile {
203 FILE *FD;
204 char *FILENAME;
205 char ISCACHE;
206 } rcxfile;
207
208 /* Configuration du modèle de crosstalk */
209
210 #define RCX_MILLER_NONE '-'
211 #define RCX_MILLER_0C2C 'm'
212 #define RCX_MILLER_NOMINAL 'n'
213 #define RCX_MILLER_NC3C '3'
214 extern char RCX_CTK_MODEL ;
215
216 #define RCX_NOISE_NONE '-'
217 #define RCX_NOISE_NEVER 'n'
218 #define RCX_NOISE_ALWAYS 'a'
219 #define RCX_NOISE_IFSTRONG 's'
220 #define RCX_NOISE_CUSTOM 'c'
221 #define RCX_NOISE_FINE 'f'
222 extern char RCX_CTK_NOISE ;
223
224 #define RCX_SLOPE_NONE '-'
225 #define RCX_SLOPE_CTK 'c'
226 #define RCX_SLOPE_NOMINAL 'n'
227 #define RCX_SLOPE_REAL 'e'
228 extern char RCX_CTK_SLOPE_NOISE ;
229 extern char RCX_CTK_SLOPE_MILLER ;
230
231 #define RCX_SLOPE_DELAY_NONE '-'
232 #define RCX_SLOPE_DELAY_CTK 'c'
233 #define RCX_SLOPE_DELAY_ENHANCED 'e'
234 extern char RCX_CTK_SLOPE_DELAY ;
235
236 /* Fonctions de haut niveau rcx */
237 #define RCXI_GND ((int)0x00000001)
238 #define RCXI_CTK ((int)0x00000002)
239 #define RCXI_MAX ((int)0x00000004)
240 #define RCXI_MIN ((int)0x00000008)
241 #define RCXI_FORCED ((int)0x00000010)
242 #define RCXI_ALLWIRE ((int)0x00000080)
243
244 #define RCXI_UP ((char)'u')
245 #define RCXI_DW ((char)'d')
246
247 // Modèle Miller : 0c-2c ou -1c-3c
248
249 #define RCX_MILLER2C ((char)2)
250 #define RCX_MILLER4C ((char)4)
251
252 typedef struct rcx_build_tr_bip {
253 struct rcx_build_tr_bip *NEXT;
254 lowire_list *RWIRE;
255 lowire_list *EWIRE;
256 } rcx_build_tr_bip;
257
258 typedef struct rcx_build_tr {
259 struct rcx_build_tr *NEXT;
260 rcx_build_tr_bip *LIST;
261 lowire_list *FINAL;
262 } rcx_build_tr;
263
264 typedef struct rcx_triangle {
265 struct rcx_triangle *NEXT ;
266 lonode_list *n0 ;
267 lonode_list *n1 ;
268 lonode_list *n2 ;
269 RCXFLOAT Z0 ;
270 RCXFLOAT Z1 ;
271 RCXFLOAT Z2 ;
272 chain_list *REPORTED_IN ;
273 chain_list *REPORTED_N1 ;
274 chain_list *REPORTED_N2 ;
275 rcx_build_tr *BUILD ;
276 } rcx_triangle ;
277
278 // zinaps : 4/3/2004
279
280 #define RCX_ORIGIN_GROUP_PTYPE 0x04030400
281 #define RCX_DESTINATION_GROUP_PTYPE 0x04030401
282 #define RCX_RC_TIMINGS_PTYPE 0x04030402
283
284 typedef struct rcx_timings
285 {
286 struct rcx_timings *NEXT;
287 float input_slope;
288 float computed_delay;
289 float computed_slope;
290 } rcx_timings;
291
292 typedef struct
293 {
294 int nb_origins, nb_destinations;
295 rcx_timings **origin_destination_array_UU;
296 rcx_timings **origin_destination_array_DD;
297 } rcx_delays;
298
299 /* Argument 'slope' pour rcx_getloconcapa */
300 // #define TRC_SLOPE_UP 'U'
301 // #define TRC_SLOPE_DOWN 'D'
302 #define TRC_SLOPE_UNK 'n'
303
304 /* Argument 'type' pour rcx_getloconcapa */
305 #define TRC_CAPA_MIN 'm'
306 #define TRC_CAPA_MAX 'M'
307 #define TRC_CAPA_NOM 'n'
308 #define TRC_CAPA_NOM_MIN 'i'
309 #define TRC_CAPA_NOM_MAX 'a'
310
311 /* Valeur 'status' renvoyée par rcx_getloconcapa */
312 #define RCX_CAPA_OK 'y'
313 #define RCX_CAPA_EQUIV 'e'
314
315 extern int RCX_NB_CAPA_L0,
316 RCX_NB_CAPA_L1,
317 RCX_NB_CAPA_L2 ;
318
319 extern int RCX_CAPA_UP_MIN,
320 RCX_CAPA_UP_MAX,
321 RCX_CAPA_DW_MIN,
322 RCX_CAPA_DW_MAX ;
323
324 extern int RCX_CAPA_NOM_MIN,
325 RCX_CAPA_NOM_MAX,
326 RCX_CAPA_UP_NOM_MIN,
327 RCX_CAPA_UP_NOM_MAX,
328 RCX_CAPA_DW_NOM_MIN,
329 RCX_CAPA_DW_NOM_MAX ;
330
331 extern int RCX_CAPA_NOMF_MIN,
332 RCX_CAPA_NOMF_MAX,
333 RCX_CAPA_UP_NOMF_MIN,
334 RCX_CAPA_UP_NOMF_MAX,
335 RCX_CAPA_DW_NOMF_MIN,
336 RCX_CAPA_DW_NOMF_MAX ;
337
338 extern double RCX_SLOPE_UNSHRINK ;
339
340 #define TRC_HALF 'h'
341 #define TRC_END 'e'
342 #define TRC_FULL 'f'