2 /* ###--------------------------------------------------------------### */
4 /* date : Oct 30 1995 */
6 /* author(s): Pirouz BAZARGAN SABET */
8 /* contents : low level library for behavioural description */
9 /* ###--------------------------------------------------------------### */
14 /* ###------------------------------------------------------### */
16 /* ###------------------------------------------------------### */
18 #define BEH_GENERIC 203698 /* generic ptype code */
19 #define BEH_STABLE 0x01 /* description using STABLE */
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 */
28 #define BEH_CHK_DRIVERS 0x00000001 /* check output drivers */
29 #define BEH_CHK_EMPTY 0x00000002 /* check for empty architecture */
31 #define BEH_ARC_VHDL 0x01 /* VHDL architecture */
32 #define BEH_ARC_C 0x02 /* C architecture */
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 */
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 */
49 #define BEH_TYPE_CND 0xc1c11A02
59 /* ###------------------------------------------------------### */
60 /* global variables */
61 /* ###------------------------------------------------------### */
63 extern unsigned int BEH_LINNUM
;
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
;
72 /* ###------------------------------------------------------### */
73 /* structure definitions */
74 /* ###------------------------------------------------------### */
76 struct beden
/* dictionary entry point */
78 struct beden
*NEXT
; /* next entry */
79 struct bedrd
*DATA
; /* data */
83 struct bedrd
/* dictionary record */
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 */
97 typedef struct befig
/* behaviour figure */
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 */
126 typedef struct bereg
/* register */
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) */
135 typedef struct bemsg
/* assert instruction */
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 */
146 typedef struct beout
/* simple output port */
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 */
156 typedef struct bebus
/* bussed output port */
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 */
166 typedef struct beaux
/* simple internal signal */
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 */
176 typedef struct bebux
/* bussed internal signal */
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 */
186 typedef struct bepor
/* port */
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) */
195 typedef struct biabl
/* couple of ABL */
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 */
207 typedef struct binode
/* couple of BDD */
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 */
216 typedef struct berin
/* primary inputs */
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 */
230 typedef struct begen
/* generic */
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 */
239 typedef struct bequad
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 */
251 struct beder
*NEXT
; /* next derivative */
252 struct node
*BDD
; /* derivative BDD */
253 short INDEX
; /* index of the variable */
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 */
264 typedef struct bevectreg
/* register */
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
;
273 typedef struct bevectout
/* simple output port */
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 */
283 typedef struct bevectbus
/* bussed output port */
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) */
293 typedef struct bevectaux
/* simple internal signal */
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 */
303 typedef struct bevectbux
/* bussed internal signal */
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) */
313 typedef struct bevectpor
/* port */
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) */
323 typedef struct vectbiabl
325 struct vectbiabl
*NEXT
;
326 unsigned short LEFT
;
327 unsigned short RIGHT
;
328 struct biabl
*BIABL
;
331 /* ###------------------------------------------------------### */
333 /* ###------------------------------------------------------### */
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 ();
388 extern struct beden
**beh_initab ();
389 extern void beh_addtab ();
390 extern long beh_chktab ();
391 extern void beh_fretab ();
393 extern unsigned int beh_error ();
394 extern void beh_message ();
395 extern void beh_toolbug ();
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 ();
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 ();
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 ();
418 extern vectbiabl_list
*beh_addvectbiabl ( vectbiabl_list
*lastvectbiabl
,
420 unsigned short right
,
422 extern vectbiabl_list
*beh_delvectbiabl ( vectbiabl_list
*headabl
,
423 vectbiabl_list
*ptlastabl
,
425 extern void beh_frevectbiabl ( vectbiabl_list
*listvectbiabl
);
426 extern void beh_addcndvect2biabl ( biabl_list
*biabl
,
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
,
434 extern int beh_addothersseltobiabl( biabl_list
*biabl
,
437 extern void beh_delloopvarname( biabl_list
*biabl
);
438 extern char *beh_getloopvarname( biabl_list
*biabl
);
439 extern void beh_addloopvarname( biabl_list
*biabl
,