1 | /* |
---|
2 | |
---|
3 | Copyright (c) 1992, 1993 |
---|
4 | Regents of the University of California |
---|
5 | All rights reserved. |
---|
6 | |
---|
7 | Use and copying of this software and preparation of derivative works |
---|
8 | based upon this software are permitted. However, any distribution of |
---|
9 | this software or derivative works must include the above copyright |
---|
10 | notice. |
---|
11 | |
---|
12 | This software is made available AS IS, and neither the Electronics |
---|
13 | Research Laboratory or the Universify of California make any |
---|
14 | warranty about the software, its performance or its conformity to |
---|
15 | any specification. |
---|
16 | |
---|
17 | Author: Szu-Tsung Cheng, stcheng@ic.Berkeley.EDU |
---|
18 | 10/92 |
---|
19 | 10/93 |
---|
20 | |
---|
21 | $Header: /projects/development/hsv/CVSRepository/vl2mv/src/parser/vl_types.h,v 1.4 2009/03/09 20:25:58 fabio Exp $ |
---|
22 | |
---|
23 | |
---|
24 | */ |
---|
25 | |
---|
26 | #ifndef _VL_TYPES |
---|
27 | #define _VL_TYPES |
---|
28 | |
---|
29 | #define MAXINLEN 10 |
---|
30 | |
---|
31 | |
---|
32 | typedef struct vl_id_range { |
---|
33 | short dummy_type; |
---|
34 | char * name; |
---|
35 | short flags; |
---|
36 | struct vl_range *range; |
---|
37 | lsList initial; |
---|
38 | lsList syndrome_expr_list; |
---|
39 | lsList rst_syndrome_expr_list; |
---|
40 | st_table *symbolic_values; |
---|
41 | void * mpg_master_exp; |
---|
42 | struct vl_type *id_type; |
---|
43 | struct vl_term *edge_trigger; |
---|
44 | st_table *sensitiveList; |
---|
45 | char *unintType; |
---|
46 | } vl_id_range, *vl_id_rangePtr; |
---|
47 | |
---|
48 | |
---|
49 | typedef struct vl_type { |
---|
50 | char *name; |
---|
51 | struct vl_type_specifier *specifier; |
---|
52 | } vl_type, *vl_typePtr; |
---|
53 | |
---|
54 | |
---|
55 | typedef struct vl_type_specifier { |
---|
56 | short typeform; |
---|
57 | union { |
---|
58 | struct vl_enum_type *enum_type; |
---|
59 | } u; |
---|
60 | } vl_type_specifier, *vl_type_specifierPtr; |
---|
61 | |
---|
62 | |
---|
63 | typedef struct vl_enum_type { |
---|
64 | char *name; |
---|
65 | st_table *domain_st; |
---|
66 | lsList domain_list; |
---|
67 | } vl_enum_type, *vl_enum_typePtr; |
---|
68 | |
---|
69 | |
---|
70 | typedef struct vl_enumerator { |
---|
71 | char *name; |
---|
72 | int val; |
---|
73 | } vl_enumerator, *vl_enumeratorPtr; |
---|
74 | |
---|
75 | |
---|
76 | typedef struct vl_desc { |
---|
77 | char *filename; |
---|
78 | st_table *type_st; |
---|
79 | lsList modules; |
---|
80 | st_table *mp_st; |
---|
81 | lsHandle handle; |
---|
82 | st_table *decl_st; |
---|
83 | st_table *lib_st; |
---|
84 | set_t *mp_undefined; |
---|
85 | st_table *fg_vars_st; |
---|
86 | st_table *mod_holes; |
---|
87 | st_table *synclock_st; |
---|
88 | } vl_desc, *vl_descPtr; |
---|
89 | |
---|
90 | |
---|
91 | typedef struct vl_module { |
---|
92 | short type; |
---|
93 | short unsigned flags; |
---|
94 | vl_id_range *name; |
---|
95 | lsList ports; |
---|
96 | st_table *sig_st; |
---|
97 | st_table *uninit_set; |
---|
98 | st_table *param_st; |
---|
99 | lsList param_list; |
---|
100 | st_table *inst_st; |
---|
101 | st_table *latch_st; |
---|
102 | st_table *quasi_st; |
---|
103 | st_table *func_st; |
---|
104 | st_table *combVar_st; |
---|
105 | st_table *seqVar_st; |
---|
106 | lsList mod_items; |
---|
107 | struct vl_event_expr *clk; |
---|
108 | int syndrome_width; |
---|
109 | int rst_syndrome_width; |
---|
110 | lsList flow_graphs; |
---|
111 | st_table *task_st; |
---|
112 | int dup_count; |
---|
113 | int visited; |
---|
114 | } vl_module, *vl_modulePtr; |
---|
115 | |
---|
116 | |
---|
117 | typedef struct vl_primitive { |
---|
118 | short type; |
---|
119 | short unsigned flags; |
---|
120 | struct vl_id_range *name; |
---|
121 | lsList ports; |
---|
122 | st_table *sig_st; |
---|
123 | st_table *uninit_set; |
---|
124 | lsList decls; |
---|
125 | lsList entries; |
---|
126 | lsHandle handle; |
---|
127 | } vl_primitive, *vl_primitivePtr; |
---|
128 | |
---|
129 | |
---|
130 | typedef struct vl_port { |
---|
131 | short type; |
---|
132 | lsList port_exp; |
---|
133 | struct vl_id_range *id; |
---|
134 | } vl_port, *vl_portPtr; |
---|
135 | |
---|
136 | |
---|
137 | typedef struct vl_port_connect { |
---|
138 | short type; |
---|
139 | struct vl_expr *expr; |
---|
140 | struct vl_id_range *id; |
---|
141 | } vl_port_connect, *vl_port_connectPtr; |
---|
142 | |
---|
143 | |
---|
144 | typedef struct vl_prim_entry { |
---|
145 | unsigned char inputs[MAXINLEN]; |
---|
146 | unsigned char state; |
---|
147 | unsigned char next_state; |
---|
148 | struct vl_prim_entry *next; |
---|
149 | } vl_prim_entry, *vl_prim_entryPtr; |
---|
150 | |
---|
151 | |
---|
152 | typedef struct vl_decl { |
---|
153 | short type; |
---|
154 | short unsigned flags; |
---|
155 | struct vl_range *range; |
---|
156 | lsList ids; |
---|
157 | lsHandle handle; |
---|
158 | } vl_decl, *vl_declPtr; |
---|
159 | |
---|
160 | |
---|
161 | typedef struct vl_rangedecl { |
---|
162 | short type; |
---|
163 | short unsigned flags; |
---|
164 | int strength_pad; |
---|
165 | struct vl_range *range; |
---|
166 | struct vl_delay *delay_pad; |
---|
167 | lsList ids; |
---|
168 | lsHandle handle; |
---|
169 | } vl_rangedecl, *vl_rangedeclPtr; |
---|
170 | |
---|
171 | |
---|
172 | typedef struct vl_paramdecl { |
---|
173 | short type; |
---|
174 | short unsigned flags; |
---|
175 | lsList assigns; |
---|
176 | lsHandle handle; |
---|
177 | } vl_paramdecl, *vl_paramdeclPtr; |
---|
178 | |
---|
179 | |
---|
180 | typedef struct vl_netdecl { |
---|
181 | short type; |
---|
182 | short unsigned flags; |
---|
183 | int strength; |
---|
184 | struct vl_range *range; |
---|
185 | struct vl_delay *delay; |
---|
186 | lsList ids; |
---|
187 | lsHandle handle; |
---|
188 | } vl_netdecl, *vl_netdeclPtr; |
---|
189 | |
---|
190 | |
---|
191 | typedef struct vl_cont_assign { |
---|
192 | short type; |
---|
193 | short unsigned flags; |
---|
194 | int strength; |
---|
195 | struct vl_delay *delay; |
---|
196 | void *assigns; |
---|
197 | } vl_cont_assign, *vl_cont_assignPtr; |
---|
198 | |
---|
199 | |
---|
200 | typedef struct vl_task { |
---|
201 | short type; |
---|
202 | short unsigned flags; |
---|
203 | struct vl_id_range *name; |
---|
204 | lsList decls; |
---|
205 | lsList io_lst; |
---|
206 | st_table *sig_st; |
---|
207 | lsList stmts; |
---|
208 | lsHandle handle; |
---|
209 | } vl_task, *vl_taskPtr; |
---|
210 | |
---|
211 | |
---|
212 | typedef struct vl_function { |
---|
213 | short type; |
---|
214 | short unsigned flags; |
---|
215 | struct vl_id_range *name; |
---|
216 | lsList ports; |
---|
217 | st_table *sig_st; |
---|
218 | st_table *uninit_set; |
---|
219 | st_table *param_st; |
---|
220 | lsList decls; |
---|
221 | struct vl_range *range; |
---|
222 | lsList stmts; |
---|
223 | lsHandle handle; |
---|
224 | lsList param_list; |
---|
225 | st_table *inst_st; |
---|
226 | st_table *latch_st; |
---|
227 | st_table *quasi_st; |
---|
228 | st_table *func_st; |
---|
229 | st_table *combVar_st; |
---|
230 | st_table *seqVar_st; |
---|
231 | lsList mod_items; |
---|
232 | struct vl_event_expr *clk; |
---|
233 | int syndrome_width; |
---|
234 | int rst_syndrome_width; |
---|
235 | lsList flow_graphs; |
---|
236 | st_table *task_st; |
---|
237 | int dup_count; |
---|
238 | int visited; |
---|
239 | } vl_function, *vl_functionPtr; |
---|
240 | |
---|
241 | |
---|
242 | typedef struct vl_gate_inst_list { |
---|
243 | short type; |
---|
244 | short unsigned flags; |
---|
245 | int strength; |
---|
246 | struct vl_delay *delays; |
---|
247 | lsList gates; |
---|
248 | lsHandle handle; |
---|
249 | } vl_gate_inst_list, *vl_gate_inst_listPtr; |
---|
250 | |
---|
251 | |
---|
252 | typedef struct vl_gate_inst { |
---|
253 | struct vl_id_range *name; |
---|
254 | lsList terms; |
---|
255 | lsHandle handle; |
---|
256 | } vl_gate_inst, *vl_gate_instPtr; |
---|
257 | |
---|
258 | |
---|
259 | typedef struct vl_mod_prim_inst_list { |
---|
260 | short type; |
---|
261 | short unsigned flags; |
---|
262 | struct vl_id_range *name; |
---|
263 | lsList mps; |
---|
264 | lsHandle handle; |
---|
265 | int strength; |
---|
266 | struct vl_delay *delays; |
---|
267 | } vl_mod_prim_inst_list, *vl_mod_prim_inst_listPtr; |
---|
268 | |
---|
269 | |
---|
270 | typedef struct vl_mod_prim_inst { |
---|
271 | struct vl_id_range *name; |
---|
272 | lsList ports; |
---|
273 | void *master; |
---|
274 | lsHandle handle; |
---|
275 | } vl_mod_prim_inst, vl_mod_prim_instPtr; |
---|
276 | |
---|
277 | |
---|
278 | typedef struct vl_procstmt { |
---|
279 | short type; |
---|
280 | short flags; |
---|
281 | void *stmt; |
---|
282 | struct symbolic_var *pc; |
---|
283 | char *fg_info; |
---|
284 | } vl_procstmt, *vl_procstmtPtr; |
---|
285 | |
---|
286 | |
---|
287 | typedef struct vl_begin_end_stmt { |
---|
288 | short type; |
---|
289 | short unsigned flags; |
---|
290 | struct vl_id_range *name; |
---|
291 | void *decls; |
---|
292 | st_table *sig_st; |
---|
293 | void *stmts; |
---|
294 | lsHandle handle; |
---|
295 | } vl_begin_end_stmt, *vl_begin_end_stmtPtr; |
---|
296 | |
---|
297 | |
---|
298 | typedef struct vl_if_else_stmt { |
---|
299 | short type; |
---|
300 | short unsigned flags; |
---|
301 | struct vl_expr *cond; |
---|
302 | void *if_stmt; |
---|
303 | void *else_stmt; |
---|
304 | lsHandle handle; |
---|
305 | } vl_if_else_stmt; |
---|
306 | |
---|
307 | |
---|
308 | typedef struct vl_case_stmt { |
---|
309 | short type; |
---|
310 | short unsigned flags; |
---|
311 | struct vl_expr *cond; |
---|
312 | lsList case_items; |
---|
313 | lsHandle handle; |
---|
314 | } vl_case_stmt; |
---|
315 | |
---|
316 | |
---|
317 | typedef struct vl_forever_stmt { |
---|
318 | short type; |
---|
319 | short unsigned flags; |
---|
320 | void *stmt; |
---|
321 | lsHandle handle; |
---|
322 | } vl_forever_stmt; |
---|
323 | |
---|
324 | |
---|
325 | typedef struct vl_repeat_stmt { |
---|
326 | short type; |
---|
327 | short unsigned flags; |
---|
328 | struct vl_expr *count; |
---|
329 | void *stmt; |
---|
330 | void *pad1, *pad2; |
---|
331 | lsHandle handle; |
---|
332 | } vl_repeat_stmt; |
---|
333 | |
---|
334 | |
---|
335 | typedef struct vl_while_stmt { |
---|
336 | short type; |
---|
337 | short unsigned flags; |
---|
338 | struct vl_expr *cond; |
---|
339 | void *stmt; |
---|
340 | lsHandle handle; |
---|
341 | } vl_while_stmt; |
---|
342 | |
---|
343 | |
---|
344 | typedef struct vl_for_stmt { |
---|
345 | short type; |
---|
346 | short unsigned flags; |
---|
347 | struct vl_bassign_stmt *init; |
---|
348 | struct vl_expr *cond; |
---|
349 | struct vl_bassign_stmt *end; |
---|
350 | void *stmt; |
---|
351 | lsHandle handle; |
---|
352 | } vl_for_stmt; |
---|
353 | |
---|
354 | |
---|
355 | typedef struct vl_delay_control_stmt { |
---|
356 | short type; |
---|
357 | short unsigned flags; |
---|
358 | struct vl_delay *delay; |
---|
359 | void *stmt; |
---|
360 | lsHandle handle; |
---|
361 | char *fg_info; |
---|
362 | } vl_delay_control_stmt; |
---|
363 | |
---|
364 | |
---|
365 | typedef struct vl_event_control_stmt { |
---|
366 | short type; |
---|
367 | short unsigned flags; |
---|
368 | struct vl_event_expr *event; |
---|
369 | void *stmt; |
---|
370 | lsHandle handle; |
---|
371 | char *fg_info; |
---|
372 | } vl_event_control_stmt; |
---|
373 | |
---|
374 | |
---|
375 | typedef struct vl_bassign_stmt { |
---|
376 | short type; |
---|
377 | short unsigned flags; |
---|
378 | struct vl_lval *lhs; |
---|
379 | void *control; |
---|
380 | struct vl_expr *rhs; |
---|
381 | int lineno; |
---|
382 | char *fg_info; |
---|
383 | } vl_bassign_stmt, *vl_bassign_stmtPtr; |
---|
384 | |
---|
385 | |
---|
386 | typedef struct vl_wait_stmt { |
---|
387 | short type; |
---|
388 | short unsigned flags; |
---|
389 | struct vl_expr *cond; |
---|
390 | void *stmt; |
---|
391 | lsHandle handle; |
---|
392 | } vl_wait_stmt; |
---|
393 | |
---|
394 | |
---|
395 | typedef struct vl_send_event_stmt { |
---|
396 | short type; |
---|
397 | struct vl_id_range *name; |
---|
398 | char *fg_info; |
---|
399 | } vl_send_event_stmt, vl_send_event_stmtPtr; |
---|
400 | |
---|
401 | |
---|
402 | typedef struct vl_fork_join_stmt { |
---|
403 | short type; |
---|
404 | short unsigned flags; |
---|
405 | struct vl_id_range *name; |
---|
406 | lsList decls; |
---|
407 | st_table *sig_st; |
---|
408 | lsList stmts; |
---|
409 | lsHandle handle; |
---|
410 | } vl_fork_join_stmt, *vl_fork_join_stmtPtr; |
---|
411 | |
---|
412 | |
---|
413 | typedef struct vl_task_enable_stmt { |
---|
414 | short type; |
---|
415 | short unsigned flags; |
---|
416 | struct vl_id_range *name; |
---|
417 | lsList args; |
---|
418 | lsHandle handle; |
---|
419 | } vl_task_enable_stmt, *vl_task_enable_stmtPtr; |
---|
420 | |
---|
421 | |
---|
422 | typedef struct vl_disable_stmt { |
---|
423 | short type; |
---|
424 | short unsigned flags; |
---|
425 | struct vl_id_range *name; |
---|
426 | lsHandle handle; |
---|
427 | } vl_disable_stmt; |
---|
428 | |
---|
429 | |
---|
430 | typedef struct vl_deassign_stmt { |
---|
431 | short type; |
---|
432 | short unsigned flags; |
---|
433 | struct vl_lval *lhs; |
---|
434 | lsHandle handle; |
---|
435 | char *fg_info; |
---|
436 | } vl_deassign_stmt; |
---|
437 | |
---|
438 | |
---|
439 | typedef struct vl_case_item { |
---|
440 | short type; |
---|
441 | short unsigned flags; |
---|
442 | lsList exprs; |
---|
443 | void *stmt; |
---|
444 | lsHandle handle; |
---|
445 | char *fg_info; |
---|
446 | } vl_case_item, *vl_case_itemPtr; |
---|
447 | |
---|
448 | |
---|
449 | typedef struct vl_event_expr { |
---|
450 | short type; |
---|
451 | short unsigned flags; |
---|
452 | struct vl_expr *expr; |
---|
453 | lsList list; |
---|
454 | } vl_event_expr, *vl_event_exprPtr; |
---|
455 | |
---|
456 | |
---|
457 | typedef struct vl_lval { |
---|
458 | short type; |
---|
459 | short unsigned flags; |
---|
460 | struct vl_id_range *name; |
---|
461 | struct vl_range *range; |
---|
462 | lsList concat; |
---|
463 | } vl_lval, *vl_lvalPtr; |
---|
464 | |
---|
465 | |
---|
466 | typedef struct vl_expr { |
---|
467 | short type; |
---|
468 | short unsigned flags; |
---|
469 | union { |
---|
470 | int intval; |
---|
471 | double realval; |
---|
472 | struct vl_id_range *name; |
---|
473 | char *string; |
---|
474 | struct vl_id_range *idrng; |
---|
475 | struct func_call { |
---|
476 | struct vl_id_range *name; |
---|
477 | lsList args; |
---|
478 | } func_call; |
---|
479 | struct bexpr { |
---|
480 | unsigned int part1; |
---|
481 | unsigned int part0; |
---|
482 | } bexpr; |
---|
483 | struct exprs { |
---|
484 | struct vl_expr *e1; |
---|
485 | struct vl_expr *e2; |
---|
486 | struct vl_expr *e3; |
---|
487 | } exprs; |
---|
488 | lsList expr_list; |
---|
489 | } u; |
---|
490 | struct vl_term *term; |
---|
491 | char *fg_info1, *fg_info2; |
---|
492 | char *fg_aux1, *fg_aux2; |
---|
493 | } vl_expr, *vl_exprPtr; |
---|
494 | |
---|
495 | |
---|
496 | typedef struct vl_range { |
---|
497 | struct vl_expr *left; |
---|
498 | struct vl_expr *right; |
---|
499 | } vl_range, *vl_rangePtr; |
---|
500 | |
---|
501 | |
---|
502 | typedef struct vl_delay { |
---|
503 | vl_expr *delay1; |
---|
504 | vl_expr *delay2; |
---|
505 | vl_expr *delay3; |
---|
506 | } vl_delay, *vl_delayPtr; |
---|
507 | |
---|
508 | |
---|
509 | typedef struct typestruct { |
---|
510 | short type; |
---|
511 | } typestruct, *typestructPtr; |
---|
512 | |
---|
513 | |
---|
514 | typedef struct vl_range_or_type { |
---|
515 | short type; |
---|
516 | vl_range *range; |
---|
517 | } vl_range_or_type, *vl_range_or_typePtr; |
---|
518 | |
---|
519 | |
---|
520 | typedef struct vl_term { |
---|
521 | vl_id_range *name; |
---|
522 | unsigned short flag; |
---|
523 | int hi, lo; |
---|
524 | vl_type *term_type; |
---|
525 | } vl_term, *vl_termPtr; |
---|
526 | |
---|
527 | |
---|
528 | typedef struct blif_latch { |
---|
529 | vl_id_range *name; |
---|
530 | short flags; |
---|
531 | vl_term *inport, *outport; |
---|
532 | } blif_latch, *blif_latchPtr; |
---|
533 | |
---|
534 | |
---|
535 | typedef struct var_info { |
---|
536 | vl_id_range *id; |
---|
537 | vl_term *current_terminal; |
---|
538 | lsList cond_list; |
---|
539 | void *extra; |
---|
540 | } var_info, *var_infoPtr; |
---|
541 | |
---|
542 | |
---|
543 | typedef struct syndrome_expr { |
---|
544 | char *syndrome; |
---|
545 | vl_term *expr; |
---|
546 | st_table *pre_cond; |
---|
547 | int fg_id; |
---|
548 | } syndrome_expr, *syndrome_exprPtr; |
---|
549 | |
---|
550 | |
---|
551 | typedef struct const_term { |
---|
552 | vl_expr *const_expr; |
---|
553 | vl_term *term; |
---|
554 | } const_term, *const_termPtr; |
---|
555 | |
---|
556 | |
---|
557 | typedef struct symbolic_var { |
---|
558 | char *name; |
---|
559 | set_t *values; |
---|
560 | } symbolic_var, *symbolic_varPtr; |
---|
561 | |
---|
562 | |
---|
563 | typedef struct lib_gate { |
---|
564 | short type; |
---|
565 | int op1Width, op2Width, op3width, resWidth; |
---|
566 | } lib_gate, *lib_gatePtr; |
---|
567 | |
---|
568 | |
---|
569 | typedef struct multi_concat { |
---|
570 | vl_expr *rep; |
---|
571 | lsList concat; |
---|
572 | } multi_concat, *multi_concatPtr; |
---|
573 | |
---|
574 | |
---|
575 | typedef struct vl_synClock { |
---|
576 | char *name; |
---|
577 | int edge; |
---|
578 | int pi; |
---|
579 | float rho; |
---|
580 | } vl_synClock, *vl_synClockPtr; |
---|
581 | |
---|
582 | |
---|
583 | typedef struct ctrlNetNode { |
---|
584 | char *N; |
---|
585 | lsList B; |
---|
586 | lsList Rcv; |
---|
587 | lsList Snd; |
---|
588 | } ctrlNetNode, *ctrlNetNodePtr; |
---|
589 | |
---|
590 | |
---|
591 | EXTERN int data_width ARGS((vl_expr *expr)); |
---|
592 | |
---|
593 | #endif /* _VL_TYPES */ |
---|