Skip to content

Commit 1ef3202

Browse files
committed
odin - initial hierarchy implementation
1 parent 3683e2e commit 1ef3202

18 files changed

+1898
-668
lines changed

ODIN_II/SRC/ast_elaborate.cpp

Lines changed: 1163 additions & 308 deletions
Large diffs are not rendered by default.

ODIN_II/SRC/ast_loop_unroll.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@
1515
/* This files header */
1616
#include "ast_loop_unroll.h"
1717

18-
ast_node_t *unroll_for_loop(ast_node_t* node, ast_node_t *parent, STRING_CACHE_LIST *local_string_cache_list)
18+
ast_node_t *unroll_for_loop(ast_node_t* node, ast_node_t *parent, sc_hierarchy *local_ref)
1919
{
2020
oassert(node && node->type == FOR);
2121

22-
char *module_id = local_string_cache_list->instance_name_prefix;
22+
char *module_id = local_ref->instance_name_prefix;
2323
long sc_spot = sc_lookup_string(module_names_to_idx, module_id);
2424
oassert(sc_spot > -1);
2525
ast_node_t *ast_module = (ast_node_t *)module_names_to_idx->data[sc_spot];

ODIN_II/SRC/ast_util.cpp

Lines changed: 32 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ OTHER DEALINGS IN THE SOFTWARE.
4040
char **get_name_of_pins_number(ast_node_t *var_node, int start, int width);
4141
char *get_name_of_pin_number(ast_node_t *var_node, int bit);
4242
void update_tree_tag(ast_node_t *node, int cases, int tagged);
43+
STRING_CACHE *copy_param_table_sc(STRING_CACHE *to_copy);
4344

4445
// HIGH LEVEL AST TAG
4546
static int high_level_id;
@@ -344,6 +345,10 @@ void remove_child_from_node_at_index(ast_node_t* node, int index)
344345
{
345346
node->children[index] = free_whole_tree(node->children[index]);
346347
node->children[index] = NULL;
348+
349+
// ast_node_t *child = node->children[index];
350+
// child = free_whole_tree(child);
351+
// child = NULL;
347352
}
348353

349354
for (int i = index; i < (node->num_children - 1); i++)
@@ -379,13 +384,13 @@ ast_node_t **expand_node_list_at(ast_node_t **list, long old_size, long to_add,
379384
* (function: make_concat_into_list_of_strings)
380385
* 0th idx will be the MSbit
381386
*-------------------------------------------------------------------------------------------*/
382-
void make_concat_into_list_of_strings(ast_node_t *concat_top, char *instance_name_prefix, STRING_CACHE_LIST *local_string_cache_list)
387+
void make_concat_into_list_of_strings(ast_node_t *concat_top, char *instance_name_prefix, sc_hierarchy *local_ref)
383388
{
384389
long i;
385390
int j;
386391
ast_node_t *rnode[3] = { 0 };
387392

388-
STRING_CACHE *local_symbol_table_sc = local_string_cache_list->local_symbol_table_sc;
393+
STRING_CACHE *local_symbol_table_sc = local_ref->local_symbol_table_sc;
389394

390395
concat_top->types.concat.num_bit_strings = 0;
391396
concat_top->types.concat.bit_strings = NULL;
@@ -395,7 +400,7 @@ void make_concat_into_list_of_strings(ast_node_t *concat_top, char *instance_nam
395400
{
396401
if (concat_top->children[i]->type == CONCATENATE)
397402
{
398-
make_concat_into_list_of_strings(concat_top->children[i], instance_name_prefix, local_string_cache_list);
403+
make_concat_into_list_of_strings(concat_top->children[i], instance_name_prefix, local_ref);
399404
}
400405
}
401406

@@ -416,7 +421,7 @@ void make_concat_into_list_of_strings(ast_node_t *concat_top, char *instance_nam
416421
{
417422
concat_top->types.concat.num_bit_strings ++;
418423
concat_top->types.concat.bit_strings = (char**)vtr::realloc(concat_top->types.concat.bit_strings, sizeof(char*)*(concat_top->types.concat.num_bit_strings));
419-
concat_top->types.concat.bit_strings[concat_top->types.concat.num_bit_strings-1] = get_name_of_pin_at_bit(concat_top->children[i], -1, instance_name_prefix, local_string_cache_list);
424+
concat_top->types.concat.bit_strings[concat_top->types.concat.num_bit_strings-1] = get_name_of_pin_at_bit(concat_top->children[i], -1, instance_name_prefix, local_ref);
420425
}
421426
else if (var_declare->children[3] == NULL)
422427
{
@@ -429,7 +434,7 @@ void make_concat_into_list_of_strings(ast_node_t *concat_top, char *instance_nam
429434
{
430435
concat_top->types.concat.num_bit_strings ++;
431436
concat_top->types.concat.bit_strings = (char**)vtr::realloc(concat_top->types.concat.bit_strings, sizeof(char*)*(concat_top->types.concat.num_bit_strings));
432-
concat_top->types.concat.bit_strings[concat_top->types.concat.num_bit_strings-1] = get_name_of_pin_at_bit(concat_top->children[i], j, instance_name_prefix, local_string_cache_list);
437+
concat_top->types.concat.bit_strings[concat_top->types.concat.num_bit_strings-1] = get_name_of_pin_at_bit(concat_top->children[i], j, instance_name_prefix, local_ref);
433438
}
434439
}
435440
else if (var_declare->children[3] != NULL)
@@ -443,7 +448,7 @@ void make_concat_into_list_of_strings(ast_node_t *concat_top, char *instance_nam
443448
{
444449
concat_top->types.concat.num_bit_strings ++;
445450
concat_top->types.concat.bit_strings = (char**)vtr::realloc(concat_top->types.concat.bit_strings, sizeof(char*)*(concat_top->types.concat.num_bit_strings));
446-
concat_top->types.concat.bit_strings[concat_top->types.concat.num_bit_strings-1] = get_name_of_pin_at_bit(concat_top->children[i], 0, instance_name_prefix, local_string_cache_list);
451+
concat_top->types.concat.bit_strings[concat_top->types.concat.num_bit_strings-1] = get_name_of_pin_at_bit(concat_top->children[i], 0, instance_name_prefix, local_ref);
447452
}
448453
else if (concat_top->children[i]->type == RANGE_REF)
449454
{
@@ -460,7 +465,7 @@ void make_concat_into_list_of_strings(ast_node_t *concat_top, char *instance_nam
460465
concat_top->types.concat.num_bit_strings ++;
461466
concat_top->types.concat.bit_strings = (char**)vtr::realloc(concat_top->types.concat.bit_strings, sizeof(char*)*(concat_top->types.concat.num_bit_strings));
462467
concat_top->types.concat.bit_strings[concat_top->types.concat.num_bit_strings-1] =
463-
get_name_of_pin_at_bit(concat_top->children[i], ((rnode[1]->types.vnumber->get_value() - rnode[2]->types.vnumber->get_value()))-j, instance_name_prefix, local_string_cache_list);
468+
get_name_of_pin_at_bit(concat_top->children[i], ((rnode[1]->types.vnumber->get_value() - rnode[2]->types.vnumber->get_value()))-j, instance_name_prefix, local_ref);
464469
}
465470
}
466471
else if (concat_top->children[i]->type == NUMBERS)
@@ -472,7 +477,7 @@ void make_concat_into_list_of_strings(ast_node_t *concat_top, char *instance_nam
472477
{
473478
concat_top->types.concat.num_bit_strings ++;
474479
concat_top->types.concat.bit_strings = (char**)vtr::realloc(concat_top->types.concat.bit_strings, sizeof(char*)*(concat_top->types.concat.num_bit_strings));
475-
concat_top->types.concat.bit_strings[concat_top->types.concat.num_bit_strings-1] = get_name_of_pin_at_bit(concat_top->children[i], j, instance_name_prefix, local_string_cache_list);
480+
concat_top->types.concat.bit_strings[concat_top->types.concat.num_bit_strings-1] = get_name_of_pin_at_bit(concat_top->children[i], j, instance_name_prefix, local_ref);
476481

477482
}
478483
}
@@ -488,7 +493,7 @@ void make_concat_into_list_of_strings(ast_node_t *concat_top, char *instance_nam
488493
{
489494
concat_top->types.concat.num_bit_strings ++;
490495
concat_top->types.concat.bit_strings = (char**)vtr::realloc(concat_top->types.concat.bit_strings, sizeof(char*)*(concat_top->types.concat.num_bit_strings));
491-
concat_top->types.concat.bit_strings[concat_top->types.concat.num_bit_strings-1] = get_name_of_pin_at_bit(concat_top->children[i], j, instance_name_prefix, local_string_cache_list);
496+
concat_top->types.concat.bit_strings[concat_top->types.concat.num_bit_strings-1] = get_name_of_pin_at_bit(concat_top->children[i], j, instance_name_prefix, local_ref);
492497
}
493498
}
494499
else
@@ -560,12 +565,12 @@ char *get_name_of_var_declare_at_bit(ast_node_t *var_declare, int bit)
560565
* (function: get_name of_port_at_bit)
561566
* Assume module connections can be one of: Array entry, Concat, Signal, Array range reference
562567
*-------------------------------------------------------------------------------------------*/
563-
char *get_name_of_pin_at_bit(ast_node_t *var_node, int bit, char *instance_name_prefix, STRING_CACHE_LIST *local_string_cache_list)
568+
char *get_name_of_pin_at_bit(ast_node_t *var_node, int bit, char *instance_name_prefix, sc_hierarchy *local_ref)
564569
{
565570
char *return_string = NULL;
566571
ast_node_t *rnode[3] = { 0 };
567572

568-
STRING_CACHE *local_symbol_table_sc = local_string_cache_list->local_symbol_table_sc;
573+
STRING_CACHE *local_symbol_table_sc = local_ref->local_symbol_table_sc;
569574

570575
if (var_node->type == ARRAY_REF)
571576
{
@@ -632,7 +637,7 @@ char *get_name_of_pin_at_bit(ast_node_t *var_node, int bit, char *instance_name_
632637
if (var_node->types.concat.num_bit_strings == -1)
633638
{
634639
/* If this hasn't been made into a string list then do it */
635-
make_concat_into_list_of_strings(var_node, instance_name_prefix, local_string_cache_list);
640+
make_concat_into_list_of_strings(var_node, instance_name_prefix, local_ref);
636641
}
637642

638643
return_string = (char*)vtr::malloc(sizeof(char)*strlen(var_node->types.concat.bit_strings[bit])+1);
@@ -695,15 +700,15 @@ char *get_name_of_pin_number(ast_node_t *var_node, int bit)
695700
* Assume module connections can be one of: Array entry, Concat, Signal, Array range reference
696701
* Return a list of strings
697702
*-------------------------------------------------------------------------------------------*/
698-
char_list_t *get_name_of_pins(ast_node_t *var_node, char *instance_name_prefix, STRING_CACHE_LIST *local_string_cache_list)
703+
char_list_t *get_name_of_pins(ast_node_t *var_node, char *instance_name_prefix, sc_hierarchy *local_ref)
699704
{
700705
char **return_string = NULL;
701706
char_list_t *return_list = (char_list_t*)vtr::malloc(sizeof(char_list_t));
702707
ast_node_t *rnode[3] = { 0 };
703708
int i;
704709
int width = 0;
705710

706-
STRING_CACHE *local_symbol_table_sc = local_string_cache_list->local_symbol_table_sc;
711+
STRING_CACHE *local_symbol_table_sc = local_ref->local_symbol_table_sc;
707712

708713
if (var_node->type == ARRAY_REF)
709714
{
@@ -803,7 +808,7 @@ char_list_t *get_name_of_pins(ast_node_t *var_node, char *instance_name_prefix,
803808
{
804809
if (var_node->types.concat.num_bit_strings == -1)
805810
{
806-
make_concat_into_list_of_strings(var_node, instance_name_prefix, local_string_cache_list);
811+
make_concat_into_list_of_strings(var_node, instance_name_prefix, local_ref);
807812
}
808813

809814
width = var_node->types.concat.num_bit_strings;
@@ -829,14 +834,14 @@ char_list_t *get_name_of_pins(ast_node_t *var_node, char *instance_name_prefix,
829834
/*---------------------------------------------------------------------------------------------
830835
* (function: get_name_of_pins_with_prefix
831836
*-------------------------------------------------------------------------------------------*/
832-
char_list_t *get_name_of_pins_with_prefix(ast_node_t *var_node, char *instance_name_prefix, STRING_CACHE_LIST *local_string_cache_list)
837+
char_list_t *get_name_of_pins_with_prefix(ast_node_t *var_node, char *instance_name_prefix, sc_hierarchy *local_ref)
833838
{
834839
int i;
835840
char_list_t *return_list;
836841
char *temp_str;
837842

838843
/* get the list */
839-
return_list = get_name_of_pins(var_node, instance_name_prefix, local_string_cache_list);
844+
return_list = get_name_of_pins(var_node, instance_name_prefix, local_ref);
840845

841846
for (i = 0; i < return_list->num_strings; i++)
842847
{
@@ -852,14 +857,14 @@ char_list_t *get_name_of_pins_with_prefix(ast_node_t *var_node, char *instance_n
852857
/*----------------------------------------------------------------------------
853858
* (function: get_size_of_variable)
854859
*--------------------------------------------------------------------------*/
855-
long get_size_of_variable(ast_node_t *node, STRING_CACHE_LIST *local_string_cache_list)
860+
long get_size_of_variable(ast_node_t *node, sc_hierarchy *local_ref)
856861
{
857862
long assignment_size = 0;
858863
long sc_spot = 0;
859864
ast_node_t *var_declare = NULL;
860865

861-
STRING_CACHE *local_symbol_table_sc = local_string_cache_list->local_symbol_table_sc;
862-
STRING_CACHE *local_param_table_sc = local_string_cache_list->local_param_table_sc;
866+
STRING_CACHE *local_symbol_table_sc = local_ref->local_symbol_table_sc;
867+
STRING_CACHE *local_param_table_sc = local_ref->local_param_table_sc;
863868

864869
switch(node->type)
865870
{
@@ -915,7 +920,7 @@ long get_size_of_variable(ast_node_t *node, STRING_CACHE_LIST *local_string_cach
915920

916921
case CONCATENATE:
917922
{
918-
assignment_size = resolve_concat_sizes(node, local_string_cache_list);
923+
assignment_size = resolve_concat_sizes(node, local_ref);
919924
return assignment_size;
920925
}
921926

@@ -1452,7 +1457,7 @@ long clog2(long value_in, int length)
14521457
/*---------------------------------------------------------------------------
14531458
* (function: resolve_concat_sizes)
14541459
*-------------------------------------------------------------------------*/
1455-
long resolve_concat_sizes(ast_node_t *node_top, STRING_CACHE_LIST *local_string_cache_list)
1460+
long resolve_concat_sizes(ast_node_t *node_top, sc_hierarchy *local_ref)
14561461
{
14571462
long concatenation_size = 0;
14581463

@@ -1464,7 +1469,7 @@ long resolve_concat_sizes(ast_node_t *node_top, STRING_CACHE_LIST *local_string_
14641469
{
14651470
for (int i = 0; i < node_top->num_children; i++)
14661471
{
1467-
concatenation_size += resolve_concat_sizes(node_top->children[i], local_string_cache_list);
1472+
concatenation_size += resolve_concat_sizes(node_top->children[i], local_ref);
14681473
}
14691474
}
14701475
break;
@@ -1473,7 +1478,7 @@ long resolve_concat_sizes(ast_node_t *node_top, STRING_CACHE_LIST *local_string_
14731478
case ARRAY_REF:
14741479
case RANGE_REF:
14751480
{
1476-
concatenation_size += get_size_of_variable(node_top, local_string_cache_list);
1481+
concatenation_size += get_size_of_variable(node_top, local_ref);
14771482
}
14781483
break;
14791484

@@ -1483,7 +1488,7 @@ long resolve_concat_sizes(ast_node_t *node_top, STRING_CACHE_LIST *local_string_
14831488
long max_size = 0;
14841489
for (int i = 0; i < node_top->num_children; i++)
14851490
{
1486-
long this_size = resolve_concat_sizes(node_top->children[i], local_string_cache_list);
1491+
long this_size = resolve_concat_sizes(node_top->children[i], local_ref);
14871492
if (this_size > max_size) max_size = this_size;
14881493
}
14891494
concatenation_size += max_size;
@@ -1493,8 +1498,8 @@ long resolve_concat_sizes(ast_node_t *node_top, STRING_CACHE_LIST *local_string_
14931498
case IF_Q:
14941499
{
14951500
/* check true/false expressions */
1496-
long true_length = resolve_concat_sizes(node_top->children[1], local_string_cache_list);
1497-
long false_length = resolve_concat_sizes(node_top->children[2], local_string_cache_list);
1501+
long true_length = resolve_concat_sizes(node_top->children[1], local_ref);
1502+
long false_length = resolve_concat_sizes(node_top->children[2], local_ref);
14981503
concatenation_size += (true_length > false_length) ? true_length : false_length;
14991504
}
15001505
break;
@@ -1519,59 +1524,3 @@ long resolve_concat_sizes(ast_node_t *node_top, STRING_CACHE_LIST *local_string_
15191524

15201525
return concatenation_size;
15211526
}
1522-
1523-
/*---------------------------------------------------------------------------
1524-
* (function: copy_param_table_sc)
1525-
*-------------------------------------------------------------------------*/
1526-
STRING_CACHE *copy_param_table_sc(STRING_CACHE *to_copy)
1527-
{
1528-
STRING_CACHE *sc;
1529-
1530-
sc = sc_new_string_cache();
1531-
1532-
for (long i = 0; i < to_copy->free; i++)
1533-
{
1534-
long sc_spot = sc_add_string(sc, to_copy->string[i]);
1535-
sc->data[sc_spot] = (void *)ast_node_deep_copy((ast_node_t *)to_copy->data[i]);
1536-
}
1537-
1538-
return sc;
1539-
}
1540-
1541-
/*---------------------------------------------------------------------------
1542-
* (function: free_string_cache_list)
1543-
*-------------------------------------------------------------------------*/
1544-
void free_string_cache_list(STRING_CACHE_LIST *to_free)
1545-
{
1546-
int i;
1547-
1548-
for (i = 0; i < to_free->num_children; i++)
1549-
{
1550-
free_string_cache_list(to_free->children[i]);
1551-
}
1552-
to_free->children = (STRING_CACHE_LIST **)vtr::free(to_free->children);
1553-
1554-
if (to_free->local_param_table_sc)
1555-
{
1556-
for(i = 0; i < to_free->local_param_table_sc->free; i++)
1557-
{
1558-
free_whole_tree((ast_node_t *)to_free->local_param_table_sc->data[i]);
1559-
}
1560-
to_free->local_param_table_sc = sc_free_string_cache(to_free->local_param_table_sc);
1561-
}
1562-
1563-
for (i = 0; i < to_free->num_local_symbol_table; i++)
1564-
{
1565-
free_whole_tree(to_free->local_symbol_table[i]);
1566-
}
1567-
to_free->num_local_symbol_table = 0;
1568-
to_free->local_symbol_table = (ast_node_t **)vtr::free(to_free->local_symbol_table);
1569-
to_free->local_symbol_table_sc = sc_free_string_cache(to_free->local_symbol_table_sc);
1570-
1571-
to_free->instance_name_prefix = (char *)vtr::free(to_free->instance_name_prefix);
1572-
to_free->scope_id = (char *)vtr::free(to_free->scope_id);
1573-
1574-
to_free->num_children = 0;
1575-
1576-
vtr::free(to_free);
1577-
}

ODIN_II/SRC/enum_str.cpp

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -31,22 +31,12 @@ const char *_ZERO_PAD_ZERO[] =
3131
"ZERO_PAD_ZERO","ZPZ"
3232
};
3333

34-
const char *_SINGLE_PORT_RAM_string[] =
35-
{
36-
"single_port_ram","SPR"
37-
};
38-
39-
const char *_DUAL_PORT_RAM_string[] =
40-
{
41-
"dual_port_ram","DPR"
42-
};
43-
4434
const char *ZERO_GND_ZERO = _ZERO_GND_ZERO[ODIN_STRING_TYPE];
4535
const char *ONE_VCC_CNS = _ONE_VCC_CNS[ODIN_STRING_TYPE];
4636
const char *ZERO_PAD_ZERO = _ZERO_PAD_ZERO[ODIN_STRING_TYPE];
4737

48-
const char *SINGLE_PORT_RAM_string = _SINGLE_PORT_RAM_string[ODIN_STRING_TYPE];
49-
const char *DUAL_PORT_RAM_string = _DUAL_PORT_RAM_string[ODIN_STRING_TYPE];
38+
const char *SINGLE_PORT_RAM_string = "single_port_ram";
39+
const char *DUAL_PORT_RAM_string = "dual_port_ram";
5040

5141
const char *operation_list_STR[][2] =
5242
{
@@ -123,7 +113,7 @@ const char *ids_STR []=
123113
"GENVAR",
124114
"PARAMETER",
125115
"LOCALPARAM",
126-
"INITIALS",
116+
"INITIAL",
127117
"PORT",
128118
/* OTHER MODULE ITEMS */
129119
"MODULE_ITEMS",

0 commit comments

Comments
 (0)