Skip to content

Commit 7ca19f0

Browse files
authored
Merge pull request #936 from CAS-Atlantic/labels
ODIN II: initial hierarchy implementation
2 parents 5ddbbf3 + 9caa91e commit 7ca19f0

18 files changed

+1894
-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: 28 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;
@@ -379,13 +380,13 @@ ast_node_t **expand_node_list_at(ast_node_t **list, long old_size, long to_add,
379380
* (function: make_concat_into_list_of_strings)
380381
* 0th idx will be the MSbit
381382
*-------------------------------------------------------------------------------------------*/
382-
void make_concat_into_list_of_strings(ast_node_t *concat_top, char *instance_name_prefix, STRING_CACHE_LIST *local_string_cache_list)
383+
void make_concat_into_list_of_strings(ast_node_t *concat_top, char *instance_name_prefix, sc_hierarchy *local_ref)
383384
{
384385
long i;
385386
int j;
386387
ast_node_t *rnode[3] = { 0 };
387388

388-
STRING_CACHE *local_symbol_table_sc = local_string_cache_list->local_symbol_table_sc;
389+
STRING_CACHE *local_symbol_table_sc = local_ref->local_symbol_table_sc;
389390

390391
concat_top->types.concat.num_bit_strings = 0;
391392
concat_top->types.concat.bit_strings = NULL;
@@ -395,7 +396,7 @@ void make_concat_into_list_of_strings(ast_node_t *concat_top, char *instance_nam
395396
{
396397
if (concat_top->children[i]->type == CONCATENATE)
397398
{
398-
make_concat_into_list_of_strings(concat_top->children[i], instance_name_prefix, local_string_cache_list);
399+
make_concat_into_list_of_strings(concat_top->children[i], instance_name_prefix, local_ref);
399400
}
400401
}
401402

@@ -416,7 +417,7 @@ void make_concat_into_list_of_strings(ast_node_t *concat_top, char *instance_nam
416417
{
417418
concat_top->types.concat.num_bit_strings ++;
418419
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);
420+
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);
420421
}
421422
else if (var_declare->children[3] == NULL)
422423
{
@@ -429,7 +430,7 @@ void make_concat_into_list_of_strings(ast_node_t *concat_top, char *instance_nam
429430
{
430431
concat_top->types.concat.num_bit_strings ++;
431432
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);
433+
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);
433434
}
434435
}
435436
else if (var_declare->children[3] != NULL)
@@ -443,7 +444,7 @@ void make_concat_into_list_of_strings(ast_node_t *concat_top, char *instance_nam
443444
{
444445
concat_top->types.concat.num_bit_strings ++;
445446
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);
447+
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);
447448
}
448449
else if (concat_top->children[i]->type == RANGE_REF)
449450
{
@@ -460,7 +461,7 @@ void make_concat_into_list_of_strings(ast_node_t *concat_top, char *instance_nam
460461
concat_top->types.concat.num_bit_strings ++;
461462
concat_top->types.concat.bit_strings = (char**)vtr::realloc(concat_top->types.concat.bit_strings, sizeof(char*)*(concat_top->types.concat.num_bit_strings));
462463
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);
464+
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);
464465
}
465466
}
466467
else if (concat_top->children[i]->type == NUMBERS)
@@ -472,7 +473,7 @@ void make_concat_into_list_of_strings(ast_node_t *concat_top, char *instance_nam
472473
{
473474
concat_top->types.concat.num_bit_strings ++;
474475
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);
476+
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);
476477

477478
}
478479
}
@@ -488,7 +489,7 @@ void make_concat_into_list_of_strings(ast_node_t *concat_top, char *instance_nam
488489
{
489490
concat_top->types.concat.num_bit_strings ++;
490491
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);
492+
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);
492493
}
493494
}
494495
else
@@ -560,12 +561,12 @@ char *get_name_of_var_declare_at_bit(ast_node_t *var_declare, int bit)
560561
* (function: get_name of_port_at_bit)
561562
* Assume module connections can be one of: Array entry, Concat, Signal, Array range reference
562563
*-------------------------------------------------------------------------------------------*/
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)
564+
char *get_name_of_pin_at_bit(ast_node_t *var_node, int bit, char *instance_name_prefix, sc_hierarchy *local_ref)
564565
{
565566
char *return_string = NULL;
566567
ast_node_t *rnode[3] = { 0 };
567568

568-
STRING_CACHE *local_symbol_table_sc = local_string_cache_list->local_symbol_table_sc;
569+
STRING_CACHE *local_symbol_table_sc = local_ref->local_symbol_table_sc;
569570

570571
if (var_node->type == ARRAY_REF)
571572
{
@@ -632,7 +633,7 @@ char *get_name_of_pin_at_bit(ast_node_t *var_node, int bit, char *instance_name_
632633
if (var_node->types.concat.num_bit_strings == -1)
633634
{
634635
/* 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);
636+
make_concat_into_list_of_strings(var_node, instance_name_prefix, local_ref);
636637
}
637638

638639
return_string = (char*)vtr::malloc(sizeof(char)*strlen(var_node->types.concat.bit_strings[bit])+1);
@@ -695,15 +696,15 @@ char *get_name_of_pin_number(ast_node_t *var_node, int bit)
695696
* Assume module connections can be one of: Array entry, Concat, Signal, Array range reference
696697
* Return a list of strings
697698
*-------------------------------------------------------------------------------------------*/
698-
char_list_t *get_name_of_pins(ast_node_t *var_node, char *instance_name_prefix, STRING_CACHE_LIST *local_string_cache_list)
699+
char_list_t *get_name_of_pins(ast_node_t *var_node, char *instance_name_prefix, sc_hierarchy *local_ref)
699700
{
700701
char **return_string = NULL;
701702
char_list_t *return_list = (char_list_t*)vtr::malloc(sizeof(char_list_t));
702703
ast_node_t *rnode[3] = { 0 };
703704
int i;
704705
int width = 0;
705706

706-
STRING_CACHE *local_symbol_table_sc = local_string_cache_list->local_symbol_table_sc;
707+
STRING_CACHE *local_symbol_table_sc = local_ref->local_symbol_table_sc;
707708

708709
if (var_node->type == ARRAY_REF)
709710
{
@@ -803,7 +804,7 @@ char_list_t *get_name_of_pins(ast_node_t *var_node, char *instance_name_prefix,
803804
{
804805
if (var_node->types.concat.num_bit_strings == -1)
805806
{
806-
make_concat_into_list_of_strings(var_node, instance_name_prefix, local_string_cache_list);
807+
make_concat_into_list_of_strings(var_node, instance_name_prefix, local_ref);
807808
}
808809

809810
width = var_node->types.concat.num_bit_strings;
@@ -829,14 +830,14 @@ char_list_t *get_name_of_pins(ast_node_t *var_node, char *instance_name_prefix,
829830
/*---------------------------------------------------------------------------------------------
830831
* (function: get_name_of_pins_with_prefix
831832
*-------------------------------------------------------------------------------------------*/
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)
833+
char_list_t *get_name_of_pins_with_prefix(ast_node_t *var_node, char *instance_name_prefix, sc_hierarchy *local_ref)
833834
{
834835
int i;
835836
char_list_t *return_list;
836837
char *temp_str;
837838

838839
/* get the list */
839-
return_list = get_name_of_pins(var_node, instance_name_prefix, local_string_cache_list);
840+
return_list = get_name_of_pins(var_node, instance_name_prefix, local_ref);
840841

841842
for (i = 0; i < return_list->num_strings; i++)
842843
{
@@ -852,14 +853,14 @@ char_list_t *get_name_of_pins_with_prefix(ast_node_t *var_node, char *instance_n
852853
/*----------------------------------------------------------------------------
853854
* (function: get_size_of_variable)
854855
*--------------------------------------------------------------------------*/
855-
long get_size_of_variable(ast_node_t *node, STRING_CACHE_LIST *local_string_cache_list)
856+
long get_size_of_variable(ast_node_t *node, sc_hierarchy *local_ref)
856857
{
857858
long assignment_size = 0;
858859
long sc_spot = 0;
859860
ast_node_t *var_declare = NULL;
860861

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;
862+
STRING_CACHE *local_symbol_table_sc = local_ref->local_symbol_table_sc;
863+
STRING_CACHE *local_param_table_sc = local_ref->local_param_table_sc;
863864

864865
switch(node->type)
865866
{
@@ -915,7 +916,7 @@ long get_size_of_variable(ast_node_t *node, STRING_CACHE_LIST *local_string_cach
915916

916917
case CONCATENATE:
917918
{
918-
assignment_size = resolve_concat_sizes(node, local_string_cache_list);
919+
assignment_size = resolve_concat_sizes(node, local_ref);
919920
return assignment_size;
920921
}
921922

@@ -1452,7 +1453,7 @@ long clog2(long value_in, int length)
14521453
/*---------------------------------------------------------------------------
14531454
* (function: resolve_concat_sizes)
14541455
*-------------------------------------------------------------------------*/
1455-
long resolve_concat_sizes(ast_node_t *node_top, STRING_CACHE_LIST *local_string_cache_list)
1456+
long resolve_concat_sizes(ast_node_t *node_top, sc_hierarchy *local_ref)
14561457
{
14571458
long concatenation_size = 0;
14581459

@@ -1464,7 +1465,7 @@ long resolve_concat_sizes(ast_node_t *node_top, STRING_CACHE_LIST *local_string_
14641465
{
14651466
for (int i = 0; i < node_top->num_children; i++)
14661467
{
1467-
concatenation_size += resolve_concat_sizes(node_top->children[i], local_string_cache_list);
1468+
concatenation_size += resolve_concat_sizes(node_top->children[i], local_ref);
14681469
}
14691470
}
14701471
break;
@@ -1473,7 +1474,7 @@ long resolve_concat_sizes(ast_node_t *node_top, STRING_CACHE_LIST *local_string_
14731474
case ARRAY_REF:
14741475
case RANGE_REF:
14751476
{
1476-
concatenation_size += get_size_of_variable(node_top, local_string_cache_list);
1477+
concatenation_size += get_size_of_variable(node_top, local_ref);
14771478
}
14781479
break;
14791480

@@ -1483,7 +1484,7 @@ long resolve_concat_sizes(ast_node_t *node_top, STRING_CACHE_LIST *local_string_
14831484
long max_size = 0;
14841485
for (int i = 0; i < node_top->num_children; i++)
14851486
{
1486-
long this_size = resolve_concat_sizes(node_top->children[i], local_string_cache_list);
1487+
long this_size = resolve_concat_sizes(node_top->children[i], local_ref);
14871488
if (this_size > max_size) max_size = this_size;
14881489
}
14891490
concatenation_size += max_size;
@@ -1493,8 +1494,8 @@ long resolve_concat_sizes(ast_node_t *node_top, STRING_CACHE_LIST *local_string_
14931494
case IF_Q:
14941495
{
14951496
/* 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);
1497+
long true_length = resolve_concat_sizes(node_top->children[1], local_ref);
1498+
long false_length = resolve_concat_sizes(node_top->children[2], local_ref);
14981499
concatenation_size += (true_length > false_length) ? true_length : false_length;
14991500
}
15001501
break;
@@ -1519,59 +1520,3 @@ long resolve_concat_sizes(ast_node_t *node_top, STRING_CACHE_LIST *local_string_
15191520

15201521
return concatenation_size;
15211522
}
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)