Initial version of donated sources by Avertec, 3.4p5.
[tas-yagle.git] / distrib / sources / beh / include / beh_lib.h
1
2 /* ###--------------------------------------------------------------### */
3 /* file : beh110.h */
4 /* date : Oct 30 1995 */
5 /* version : v110 */
6 /* author(s): Pirouz BAZARGAN SABET */
7 /* : Antony PINTO */
8 /* contents : low level library for behavioural description */
9 /* ###--------------------------------------------------------------### */
10
11 #ifndef BEH_BEHDEF
12 #define BEH_BEHDEF
13
14 /* ###------------------------------------------------------### */
15 /* defines */
16 /* ###------------------------------------------------------### */
17
18 #define BEH_GENERIC 203698 /* generic ptype code */
19 #define BEH_STABLE 0x01 /* description using STABLE */
20
21 #define BEH_NODE_BDD 0x01 /* fig TYPE : expr. BDD */
22 #define BEH_NODE_GEX 0x02 /* fig TYPE : expr. GEX */
23 #define BEH_NODE_VARLIST 0x04 /* fig TYPE : list of variables */
24 #define BEH_NODE_DERIVATE 0x08 /* fig TYPE : derivatives */
25 #define BEH_NODE_USER 0x10 /* fig TYPE : user expression */
26 #define BEH_NODE_QUAD 0x20 /* fig TYPE : QUAD structure */
27
28 #define BEH_CHK_DRIVERS 0x00000001 /* check output drivers */
29 #define BEH_CHK_EMPTY 0x00000002 /* check for empty architecture */
30
31 #define BEH_ARC_VHDL 0x01 /* VHDL architecture */
32 #define BEH_ARC_C 0x02 /* C architecture */
33
34 #define BEH_CND_UNKNOWN 0x00000000 /* cond. precedence is unknown */
35 #define BEH_CND_PRECEDE 0x00000001 /* cond. has a precedence */
36 #define BEH_CND_NOPRECEDE 0x00000002 /* cond. has no precedence */
37 #define BEH_CND_SELECT 0x00000004 /* cond. is vectorial, same */
38 #define BEH_CND_SEL_OTHERS 0x00000008 /* for multiple values */
39 #define BEH_CND_CMPLX 0x00000010 /* ................... */
40 #define BEH_CND_LOOP 0x00000020 /* for loop */
41
42 #define BEH_FIG__TIMEUNIT 0x07 /* time unit */
43 #define BEH_TU__FS 1 /* time unit : fs */
44 #define BEH_TU__PS 2 /* time unit : ps */
45 #define BEH_TU__NS 3 /* time unit : ns */
46 #define BEH_TU__US 4 /* time unit : us */
47 #define BEH_TU__MS 5 /* time unit : ms */
48
49 #define BEH_TYPE_CND 0xc1c11A02
50
51 #ifdef LEFT
52 #undef LEFT
53 #endif
54
55 #ifdef RIGHT
56 #undef RIGHT
57 #endif
58
59 /* ###------------------------------------------------------### */
60 /* global variables */
61 /* ###------------------------------------------------------### */
62
63 extern unsigned int BEH_LINNUM ;
64
65 extern unsigned char BEH_TIMEUNIT;
66 extern float BEH_CNV_FS ;
67 extern float BEH_CNV_PS ;
68 extern float BEH_CNV_NS ;
69 extern float BEH_CNV_US ;
70 extern float BEH_CNV_MS ;
71
72 /* ###------------------------------------------------------### */
73 /* structure definitions */
74 /* ###------------------------------------------------------### */
75
76 struct beden /* dictionary entry point */
77 {
78 struct beden *NEXT; /* next entry */
79 struct bedrd *DATA; /* data */
80 char *KEY ; /* key */
81 };
82
83 struct bedrd /* dictionary record */
84 {
85 struct bedrd *NEXT ; /* next record */
86 char *KEY ; /* context key */
87 short FD0_VAL; /* data field */
88 short FD1_VAL; /* data field */
89 short FD2_VAL; /* data field */
90 short FD3_VAL; /* data field */
91 short FD4_VAL; /* data field */
92 short FD5_VAL; /* data field */
93 short FD6_VAL; /* data field */
94 long PNT_VAL; /* data field */
95 };
96
97 typedef struct befig /* behaviour figure */
98 {
99 struct befig *NEXT ; /* next figure */
100 char *NAME ; /* figure's name */
101 struct bereg *BEREG ; /* list of internal signals (REGISTER) */
102 struct bevectreg *BEVECTREG; /* list of internal signals (REGISTER) */
103 struct bemsg *BEMSG ; /* list of assert instructions */
104 struct berin *BERIN ; /* list of inputs (registers and ports) */
105 struct beout *BEOUT ; /* list of output ports */
106 struct bevectout *BEVECTOUT; /* list of output ports */
107 struct bebus *BEBUS ; /* list of output ports (BUS) */
108 struct bevectbus *BEVECTBUS; /* list of output ports (BUS) */
109 struct beaux *BEAUX ; /* list of internal signals */
110 struct bevectaux *BEVECTAUX; /* list of internal signals */
111 struct beaux *BEDLY ; /* internal signals used for 'DELAYED */
112 struct bebux *BEBUX ; /* list of internal signals (BUS) */
113 struct bevectbux *BEVECTBUX; /* list of internal signals (BUS) */
114 struct bepor *BEPOR ; /* list of ports in reverse order */
115 struct bevectpor *BEVECTPOR; /* list of ports in reverse order */
116 struct begen *BEGEN ; /* list of generic data */
117 struct circuit *CIRCUI ; /* Pointer on Circuit for BDDs */
118 ptype_list *USER ; /* reserved for user's applications */
119 char ERRFLG ; /* error flag */
120 char TYPE ; /* description type */
121 unsigned char FLAG ; /* description flag */
122 unsigned char TIME_UNIT; /* time unit */
123 }
124 befig_list;
125
126 typedef struct bereg /* register */
127 {
128 struct bereg *NEXT ; /* next register */
129 char *NAME ; /* register's name */
130 struct biabl *BIABL ; /* list of drivers (ABL) */
131 struct binode *BINODE; /* list of drivers (BDD) */
132 }
133 bereg_list;
134
135 typedef struct bemsg /* assert instruction */
136 {
137 struct bemsg *NEXT ; /* next assertion */
138 char *LABEL ; /* instruction's label */
139 char *MESSAGE; /* assertion's message */
140 struct chain *ABL ; /* assertion's condition (ABL) */
141 struct node *NODE ; /* assertion's condition (BDD) */
142 char LEVEL ; /* severity level of the assertion */
143 }
144 bemsg_list;
145
146 typedef struct beout /* simple output port */
147 {
148 struct beout *NEXT; /* next output */
149 char *NAME; /* port's name */
150 struct chain *ABL ; /* port's equation (ABL) */
151 struct node *NODE; /* port's equation (BDD) */
152 unsigned int TIME; /* driver's delay */
153 }
154 beout_list;
155
156 typedef struct bebus /* bussed output port */
157 {
158 struct bebus *NEXT ; /* next bus port */
159 char *NAME ; /* port's name */
160 struct biabl *BIABL ; /* list of drivers (ABL) */
161 struct binode *BINODE; /* list of drivers (BDD) */
162 char TYPE ; /* port's type : W or M */
163 }
164 bebus_list;
165
166 typedef struct beaux /* simple internal signal */
167 {
168 struct beaux *NEXT; /* next signal */
169 char *NAME; /* signal's name */
170 struct chain *ABL ; /* signal's equation (ABL) */
171 struct node *NODE; /* signal's equation (BDD) */
172 unsigned int TIME; /* driver's delay */
173 }
174 beaux_list;
175
176 typedef struct bebux /* bussed internal signal */
177 {
178 struct bebux *NEXT ; /* next signal */
179 char *NAME ; /* signal's name */
180 struct biabl *BIABL ; /* list of drivers (ABL) */
181 struct binode *BINODE; /* list of drivers (BDD) */
182 char TYPE ; /* signal's type : W or M */
183 }
184 bebux_list;
185
186 typedef struct bepor /* port */
187 {
188 struct bepor *NEXT ; /* next port */
189 char *NAME ; /* port's name */
190 char DIRECTION; /* port's mode (I, O, B, Z, T) */
191 char TYPE ; /* port's type (B, M or W) */
192 }
193 bepor_list;
194
195 typedef struct biabl /* couple of ABL */
196 {
197 struct biabl *NEXT ; /* next couple */
198 char *LABEL ; /* driver's label */
199 struct chain *CNDABL; /* driver's connection condition (ABL) */
200 struct chain *VALABL; /* equation of driven value (ABL) */
201 ptype_list *USER ; /* user field */
202 unsigned int TIME ; /* driver's delay */
203 long FLAG ; /* condition's flag */
204 }
205 biabl_list;
206
207 typedef struct binode /* couple of BDD */
208 {
209 struct binode *NEXT ; /* next figure */
210 struct node *CNDNODE; /* driver's connection condition (BDD) */
211 struct node *VALNODE; /* equation of driven value (BDD) */
212 unsigned int TIME ; /* driver's delay */
213 }
214 binode_list;
215
216 typedef struct berin /* primary inputs */
217 {
218 struct berin *NEXT; /* next input */
219 char *NAME; /* input's name */
220 struct chain *OUT_REF; /* dependent simple output */
221 struct chain *BUS_REF; /* dependent bussed output */
222 struct chain *AUX_REF; /* dependent simple internal signal */
223 struct chain *REG_REF; /* dependent internal register */
224 struct chain *BUX_REF; /* dependent bussed internal signal */
225 struct chain *MSG_REF; /* dependent assertion */
226 struct chain *DLY_REF; /* dependent delayed internal signal */
227 }
228 berin_list;
229
230 typedef struct begen /* generic */
231 {
232 struct begen *NEXT ; /* next generic */
233 char *NAME ; /* generic`s name */
234 char *TYPE ; /* generic type`s name */
235 void *VALUE; /* generic`s value */
236 }
237 begen_list;
238
239 typedef struct bequad
240 {
241 struct node *BDD ; /* expression using BDD format */
242 struct begex *GEX ; /* expression using GEX format */
243 struct chain *VARLIST ; /* variable list */
244 struct beder *DERIVATE; /* list of derivate BDDs */
245 void *USER ; /* user defined form of the expression */
246 }
247 bequad_list;
248
249 typedef struct beder
250 {
251 struct beder *NEXT ; /* next derivative */
252 struct node *BDD ; /* derivative BDD */
253 short INDEX; /* index of the variable */
254 }
255 beder_list;
256
257 typedef struct begex
258 {
259 struct chain *OPERAND; /* list of operands or NULL for term */
260 unsigned int TERM ; /* operator or terminal's index */
261 unsigned short TYPE ; /* expression's type index */
262 }
263 begex_list;
264 typedef struct bevectreg /* register */
265 {
266 struct bevectreg *NEXT ; /* next register */
267 char *NAME ; /* register's name */
268 struct vectbiabl *VECTBIABL ; /* list of drivers (ABL) */
269 unsigned short LEFT ;
270 unsigned short RIGHT ;
271 } bevectreg_list;
272
273 typedef struct bevectout /* simple output port */
274 {
275 struct bevectout *NEXT ; /* next output */
276 char *NAME ; /* port's name */
277 struct chain *ABL ; /* port's equation (ABL) */
278 unsigned short LEFT ;
279 unsigned short RIGHT ;
280 unsigned int TIME ; /* driver's delay */
281 } bevectout_list;
282
283 typedef struct bevectbus /* bussed output port */
284 {
285 struct bevectbus *NEXT ; /* next bus port */
286 char *NAME ; /* port's name */
287 struct vectbiabl *VECTBIABL ; /* list of drivers (ABL) */
288 unsigned short LEFT ;
289 unsigned short RIGHT ;
290 char TYPE ; /* port's type (B, M or W) */
291 } bevectbus_list;
292
293 typedef struct bevectaux /* simple internal signal */
294 {
295 struct bevectaux *NEXT ; /* next signal */
296 char *NAME ; /* signal's name */
297 struct chain *ABL ; /* signal's equation (ABL) */
298 unsigned short LEFT ;
299 unsigned short RIGHT ;
300 unsigned int TIME ; /* driver's delay */
301 } bevectaux_list;
302
303 typedef struct bevectbux /* bussed internal signal */
304 {
305 struct bevectbux *NEXT ; /* next signal */
306 char *NAME ; /* signal's name */
307 struct vectbiabl *VECTBIABL ; /* list of drivers (ABL) */
308 unsigned short LEFT ;
309 unsigned short RIGHT ;
310 char TYPE ; /* port's type (B, M or W) */
311 } bevectbux_list;
312
313 typedef struct bevectpor /* port */
314 {
315 struct bevectpor *NEXT ; /* next port */
316 char *NAME ; /* port's name */
317 char DIRECTION ; /* port's mode (I, O, B, Z, T) */
318 unsigned short LEFT ;
319 unsigned short RIGHT ;
320 char TYPE ; /* port's type (B, M or W) */
321 } bevectpor_list;
322
323 typedef struct vectbiabl
324 {
325 struct vectbiabl *NEXT ;
326 unsigned short LEFT ;
327 unsigned short RIGHT ;
328 struct biabl *BIABL ;
329 } vectbiabl_list;
330
331 /* ###------------------------------------------------------### */
332 /* functions */
333 /* ###------------------------------------------------------### */
334
335 extern struct beaux *beh_addbeaux ();
336 extern struct bebux *beh_addbebux ();
337 extern struct bebus *beh_addbebus ();
338 extern struct befig *beh_addbefig ();
339 extern struct begen *beh_addbegen ();
340 extern struct bemsg *beh_addbemsg ();
341 extern struct beout *beh_addbeout ();
342 extern struct bepor *beh_addbepor ();
343 extern struct bequad *beh_addbequad ();
344 extern struct bereg *beh_addbereg ();
345 extern struct berin *beh_addberin ();
346 extern struct biabl *beh_addbiabl ();
347 extern struct binode *beh_addbinode ();
348 extern struct beder *beh_addbeder ();
349 extern struct beaux *beh_delbeaux ();
350 extern struct bebux *beh_delbebux ();
351 extern struct bebus *beh_delbebus ();
352 extern struct befig *beh_delbefig ();
353 extern struct begen *beh_delbegen ();
354 extern struct bemsg *beh_delbemsg ();
355 extern struct beout *beh_delbeout ();
356 extern struct bepor *beh_delbepor ();
357 extern struct bereg *beh_delbereg ();
358 extern struct berin *beh_delberin ();
359 extern struct biabl *beh_delbiabl ();
360 extern struct binode *beh_delbinode ();
361 extern struct beder *beh_delbeder ();
362 extern void beh_delbequad ();
363 extern void beh_frebeaux ();
364 extern void beh_frebebux ();
365 extern void beh_frebebus ();
366 extern void beh_frebefig ();
367 extern void beh_frebegen ();
368 extern void beh_frebemsg ();
369 extern void beh_frebeout ();
370 extern void beh_frebepor ();
371 extern void beh_frebereg ();
372 extern void beh_freberin ();
373 extern void beh_frebiabl ();
374 extern void beh_frebinode ();
375 extern void beh_frebeder ();
376 extern struct beaux *beh_rmvbeaux ();
377 extern struct bebux *beh_rmvbebux ();
378 extern struct bebus *beh_rmvbebus ();
379 extern struct befig *beh_rmvbefig ();
380 extern struct begen *beh_rmvbegen ();
381 extern struct bemsg *beh_rmvbemsg ();
382 extern struct beout *beh_rmvbeout ();
383 extern struct bepor *beh_rmvbepor ();
384 extern struct bereg *beh_rmvbereg ();
385 extern struct berin *beh_rmvberin ();
386 extern struct beder *beh_rmvbeder ();
387
388 extern struct beden **beh_initab ();
389 extern void beh_addtab ();
390 extern long beh_chktab ();
391 extern void beh_fretab ();
392
393 extern unsigned int beh_error ();
394 extern void beh_message ();
395 extern void beh_toolbug ();
396
397 extern bevectaux_list *beh_addbevectaux ();
398 extern bevectbux_list *beh_addbevectbux ();
399 extern bevectbus_list *beh_addbevectbus ();
400 extern bevectout_list *beh_addbevectout ();
401 extern bevectpor_list *beh_addbevectpor ();
402 extern bevectreg_list *beh_addbevectreg ();
403
404 extern bevectaux_list *beh_delbevectaux ();
405 extern bevectbux_list *beh_delbevectbux ();
406 extern bevectbus_list *beh_delbevectbus ();
407 extern bevectout_list *beh_delbevectout ();
408 extern bevectpor_list *beh_delbevectpor ();
409 extern bevectreg_list *beh_delbevectreg ();
410
411 extern void beh_frebevectaux ();
412 extern void beh_frebevectbux ();
413 extern void beh_frebevectbus ();
414 extern void beh_frebevectout ();
415 extern void beh_frebevectpor ();
416 extern void beh_frebevectreg ();
417
418 extern vectbiabl_list *beh_addvectbiabl ( vectbiabl_list *lastvectbiabl,
419 unsigned short left,
420 unsigned short right,
421 biabl_list *biabl);
422 extern vectbiabl_list *beh_delvectbiabl ( vectbiabl_list *headabl,
423 vectbiabl_list *ptlastabl,
424 char mode);
425 extern void beh_frevectbiabl ( vectbiabl_list *listvectbiabl);
426 extern void beh_addcndvect2biabl ( biabl_list *biabl,
427 char *cndVect);
428 extern char *beh_getcndvectfbiabl ( biabl_list *biabl);
429 extern void beh_delcndvectfbiabl ( biabl_list *biabl);
430 extern int beh_simplifybiabl ( biabl_list *biabl);
431 extern char *beh_getvectname ( char *name,
432 int left,
433 int right);
434 extern int beh_addothersseltobiabl( biabl_list *biabl,
435 struct chain *abl);
436
437 extern void beh_delloopvarname( biabl_list *biabl);
438 extern char *beh_getloopvarname( biabl_list *biabl);
439 extern void beh_addloopvarname( biabl_list *biabl,
440 char *varname);
441
442 #endif