Skip to content

Commit 7d6424b

Browse files
authored
Merge pull request #491 from SymbiFlow/new-master-wip
New master wip
2 parents 0ece2d2 + f25b3e6 commit 7d6424b

File tree

113 files changed

+38859
-2675
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

113 files changed

+38859
-2675
lines changed

ODIN_II/Makefile

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -112,16 +112,30 @@ test:
112112
./verify_odin.sh -j $(NB_OF_PROCESS) \
113113
-t regression_test/benchmark/suite/heavy_suite
114114

115-
qor:
115+
generate_expectation:
116116
# rebuild with sanitize flags on to run the same test as travis
117-
$(MAKE) sanitize
117+
$(MAKE) sanitize
118118
./verify_odin.sh -j $(NB_OF_PROCESS) \
119-
--regenerate_qor \
119+
--generate_expectation\
120120
-t regression_test/benchmark/suite/light_suite \
121121
-t vtr_reg_basic \
122-
-t vtr_reg_strong
123-
# larger test should run with regular flags to speed up the process
122+
-t vtr_reg_strong || true
123+
# larger test should run with regular flags to speed up the process
124+
$(MAKE) build
125+
./verify_odin.sh -j $(NB_OF_PROCESS) \
126+
--generate_expectation \
127+
-t regression_test/benchmark/suite/heavy_suite
128+
129+
regenerate_expectation:
130+
# rebuild with sanitize flags on to run the same test as travis
131+
$(MAKE) sanitize
132+
./verify_odin.sh -j $(NB_OF_PROCESS) \
133+
--regenerate_expectation\
134+
-t regression_test/benchmark/suite/light_suite \
135+
-t vtr_reg_basic \
136+
-t vtr_reg_strong || true
137+
# larger test should run with regular flags to speed up the process
124138
$(MAKE) build
125139
./verify_odin.sh -j $(NB_OF_PROCESS) \
126-
--regenerate_qor \
140+
--regenerate_expectation \
127141
-t regression_test/benchmark/suite/heavy_suite

ODIN_II/SRC/adders.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ void declare_hard_adder(nnode_t* node) {
146146

147147
/* See if this size instance of adder exists? */
148148
if (hard_adders == NULL)
149-
warning_message(NETLIST_ERROR, node->related_ast_node->line_number, node->related_ast_node->file_number, "%s\n", "Instantiating adder where adders do not exist");
149+
warning_message(NETLIST, node->related_ast_node->line_number, node->related_ast_node->file_number, "%s\n", "Instantiating adder where adders do not exist");
150150

151151
tmp = (t_adder*)hard_adders->instances;
152152
width_a = node->input_port_sizes[0];

ODIN_II/SRC/ast_elaborate.cpp

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

ODIN_II/SRC/ast_loop_unroll.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -129,25 +129,25 @@ ast_node_t* resolve_for(ast_node_t* node) {
129129

130130
ast_node_t* value = 0;
131131
if (resolve_pre_condition(pre, &value)) {
132-
error_message(PARSE_ERROR, pre->line_number, pre->file_number, "%s", "Unsupported pre-condition node in for loop");
132+
error_message(AST, pre->line_number, pre->file_number, "%s", "Unsupported pre-condition node in for loop");
133133
}
134134

135135
int error_code = 0;
136136
condition_function cond_func = resolve_condition(cond, pre->children[0], &error_code);
137137
if (error_code) {
138-
error_message(PARSE_ERROR, cond->line_number, cond->file_number, "%s", "Unsupported condition node in for loop");
138+
error_message(AST, cond->line_number, cond->file_number, "%s", "Unsupported condition node in for loop");
139139
}
140140

141141
post_condition_function post_func = resolve_post_condition(post, pre->children[0], &error_code);
142142
if (error_code) {
143-
error_message(PARSE_ERROR, post->line_number, post->file_number, "%s", "Unsupported post-condition node in for loop");
143+
error_message(AST, post->line_number, post->file_number, "%s", "Unsupported post-condition node in for loop");
144144
}
145145

146146
bool dup_body = cond_func(value->types.vnumber->get_value());
147147
while (dup_body) {
148148
ast_node_t* new_body = dup_and_fill_body(body, pre, &value, &error_code);
149149
if (error_code) {
150-
error_message(PARSE_ERROR, pre->line_number, pre->file_number, "%s", "Unsupported pre-condition node in for loop");
150+
error_message(AST, pre->line_number, pre->file_number, "%s", "Unsupported pre-condition node in for loop");
151151
}
152152

153153
VNumber* temp_vnum = value->types.vnumber;

ODIN_II/SRC/ast_util.cpp

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,7 @@ void make_concat_into_list_of_strings(ast_node_t* concat_top, char* instance_nam
396396
char* temp_string = make_full_ref_name(NULL, NULL, NULL, concat_top->children[i]->types.identifier, -1);
397397
ast_node_t* var_declare = resolve_hierarchical_name_reference(local_ref, temp_string);
398398
if (var_declare == NULL) {
399-
error_message(NETLIST_ERROR, concat_top->line_number, concat_top->file_number, "Missing declaration of this symbol %s\n", temp_string);
399+
error_message(AST, concat_top->line_number, concat_top->file_number, "Missing declaration of this symbol %s\n", temp_string);
400400
} else {
401401
if (var_declare->children[1] == NULL) {
402402
concat_top->types.concat.num_bit_strings++;
@@ -445,7 +445,7 @@ void make_concat_into_list_of_strings(ast_node_t* concat_top, char* instance_nam
445445
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);
446446
}
447447
} else {
448-
error_message(NETLIST_ERROR, concat_top->line_number, concat_top->file_number, "%s", "Unsized constants cannot be concatenated.\n");
448+
error_message(AST, concat_top->line_number, concat_top->file_number, "%s", "Unsized constants cannot be concatenated.\n");
449449
}
450450
} else if (concat_top->children[i]->type == CONCATENATE) {
451451
/* forward through list since we build concatenate list in idx order of MSB at index 0 and LSB at index list_size */
@@ -455,7 +455,7 @@ void make_concat_into_list_of_strings(ast_node_t* concat_top, char* instance_nam
455455
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);
456456
}
457457
} else {
458-
error_message(NETLIST_ERROR, concat_top->line_number, concat_top->file_number, "%s", "Unsupported operation within a concatenation.\n");
458+
error_message(AST, concat_top->line_number, concat_top->file_number, "%s", "Unsupported operation within a concatenation.\n");
459459
}
460460
}
461461
}
@@ -555,7 +555,7 @@ char* get_name_of_pin_at_bit(ast_node_t* var_node, int bit, char* instance_name_
555555
int pin_index = 0;
556556

557557
if ((symbol_node = resolve_hierarchical_name_reference(local_ref, var_node->types.identifier)) == NULL) {
558-
error_message(NETLIST_ERROR, var_node->line_number, var_node->file_number, "Missing declaration of this symbol %s\n", var_node->types.identifier);
558+
error_message(AST, var_node->line_number, var_node->file_number, "Missing declaration of this symbol %s\n", var_node->types.identifier);
559559
}
560560

561561
if (symbol_node->children[1] == NULL) {
@@ -590,7 +590,7 @@ char* get_name_of_pin_at_bit(ast_node_t* var_node, int bit, char* instance_name_
590590
} else {
591591
return_string = NULL;
592592

593-
error_message(NETLIST_ERROR, var_node->line_number, var_node->file_number, "Unsupported variable type. var_node->type = %s\n", ast_node_name_based_on_ids(var_node));
593+
error_message(AST, var_node->line_number, var_node->file_number, "Unsupported variable type. var_node->type = %s\n", ast_node_name_based_on_ids(var_node));
594594
}
595595

596596
return return_string;
@@ -630,7 +630,7 @@ char* get_name_of_pin_number(ast_node_t* var_node, int bit) {
630630
return_string = vtr::strdup(ZERO_PAD_ZERO);
631631
break;
632632
default:
633-
error_message(NETLIST_ERROR, var_node->line_number, var_node->file_number, "Unrecognised character %c in binary string \"%s\"!\n", c, var_node->types.vnumber->to_bit_string().c_str());
633+
error_message(AST, var_node->line_number, var_node->file_number, "Unrecognised character %c in binary string \"%s\"!\n", c, var_node->types.vnumber->to_bit_string().c_str());
634634
break;
635635
}
636636

@@ -680,7 +680,7 @@ char_list_t* get_name_of_pins(ast_node_t* var_node, char* instance_name_prefix,
680680
ast_node_t* sym_node = resolve_hierarchical_name_reference(local_ref, temp_string);
681681

682682
if (sym_node == NULL) {
683-
error_message(NETLIST_ERROR, var_node->line_number, var_node->file_number, "Missing declaration of this symbol %s\n", temp_string);
683+
error_message(AST, var_node->line_number, var_node->file_number, "Missing declaration of this symbol %s\n", temp_string);
684684
}
685685

686686
vtr::free(temp_string);
@@ -780,7 +780,7 @@ long get_size_of_variable(ast_node_t* node, sc_hierarchy* local_ref) {
780780
if (node_is_constant(var_declare)) {
781781
assignment_size = var_declare->types.vnumber->size();
782782
} else {
783-
error_message(NETLIST_ERROR, node->line_number, node->file_number, "Parameter %s is not a constant expression\n", node->types.identifier);
783+
error_message(AST, node->line_number, node->file_number, "Parameter %s is not a constant expression\n", node->types.identifier);
784784
}
785785

786786
free_whole_tree(var_declare);
@@ -793,7 +793,7 @@ long get_size_of_variable(ast_node_t* node, sc_hierarchy* local_ref) {
793793
break;
794794
}
795795

796-
error_message(NETLIST_ERROR, node->line_number, node->file_number, "Missing declaration of this symbol %s\n", node->types.identifier);
796+
error_message(AST, node->line_number, node->file_number, "Missing declaration of this symbol %s\n", node->types.identifier);
797797
} break;
798798

799799
case ARRAY_REF: {
@@ -803,7 +803,7 @@ long get_size_of_variable(ast_node_t* node, sc_hierarchy* local_ref) {
803803
break;
804804
}
805805

806-
error_message(NETLIST_ERROR, node->children[0]->line_number, node->children[0]->file_number, "Missing declaration of this symbol %s\n", node->children[0]->types.identifier);
806+
error_message(AST, node->children[0]->line_number, node->children[0]->file_number, "Missing declaration of this symbol %s\n", node->children[0]->types.identifier);
807807
} break;
808808

809809
case RANGE_REF: {
@@ -982,13 +982,13 @@ static void check_binary_operation(ast_node_t** node) {
982982
break;
983983
case DIVIDE:
984984
if (!node_is_constant((*node)->children[1]))
985-
error_message(NETLIST_ERROR, (*node)->line_number, (*node)->file_number, "%s", "Odin only supports constant expressions as divisors\n");
985+
error_message(AST, (*node)->line_number, (*node)->file_number, "%s", "Odin only supports constant expressions as divisors\n");
986986
if ((*node)->children[0]->type == IDENTIFIERS && (*node)->children[1]->type == NUMBERS)
987987
check_node_number((*node), (*node)->children[1], 3); // 3 means divide
988988
break;
989989
case POWER:
990990
if (!node_is_constant((*node)->children[1]))
991-
error_message(NETLIST_ERROR, (*node)->line_number, (*node)->file_number, "%s", "Odin only supports constant expressions as exponents\n");
991+
error_message(AST, (*node)->line_number, (*node)->file_number, "%s", "Odin only supports constant expressions as exponents\n");
992992
expand_power(node);
993993
break;
994994
default:
@@ -1068,7 +1068,7 @@ ast_node_t* fold_unary(ast_node_t** node) {
10681068

10691069
case CLOG2:
10701070
if (voperand_0.size() > ODIN_STD_BITWIDTH)
1071-
warning_message(PARSE_ERROR, (*node)->line_number, (*node)->file_number, "argument is %ld-bits but ODIN limit is %lu-bits \n", voperand_0.size(), ODIN_STD_BITWIDTH);
1071+
warning_message(AST, (*node)->line_number, (*node)->file_number, "argument is %ld-bits but ODIN limit is %lu-bits \n", voperand_0.size(), ODIN_STD_BITWIDTH);
10721072

10731073
vresult = VNumber(clog2(voperand_0.get_value(), voperand_0.size()));
10741074
success = true;
@@ -1094,7 +1094,7 @@ ast_node_t* fold_unary(ast_node_t** node) {
10941094
}
10951095
} else if (op_id == CLOG2) {
10961096
/* $clog2() argument must be a constant expression */
1097-
error_message(PARSE_ERROR, (*node)->line_number, current_parse_file, "%s", "Argument must be constant\n");
1097+
error_message(AST, (*node)->line_number, current_parse_file, "%s", "Argument must be constant\n");
10981098
}
10991099

11001100
return NULL;
@@ -1350,13 +1350,13 @@ long resolve_concat_sizes(ast_node_t* node_top, sc_hierarchy* local_ref) {
13501350
case NUMBERS: {
13511351
/* verify that the number that this represents is sized */
13521352
if (!(node_top->types.vnumber->is_defined_size())) {
1353-
error_message(NETLIST_ERROR, node_top->line_number, node_top->file_number, "%s", "Unsized constants cannot be concatenated.\n");
1353+
error_message(AST, node_top->line_number, node_top->file_number, "%s", "Unsized constants cannot be concatenated.\n");
13541354
}
13551355
concatenation_size += node_top->types.vnumber->size();
13561356
} break;
13571357

13581358
default: {
1359-
error_message(NETLIST_ERROR, node_top->line_number, node_top->file_number, "%s", "Unsupported operation within a concatenation.\n");
1359+
error_message(AST, node_top->line_number, node_top->file_number, "%s", "Unsupported operation within a concatenation.\n");
13601360
}
13611361
}
13621362
}

ODIN_II/SRC/hard_blocks.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ void define_hard_block(nnode_t* node, FILE* out) {
148148
&& node->input_pins[i]->net != verilog_netlist->zero_net
149149
&& node->input_pins[i]->net != verilog_netlist->one_net
150150
&& node->input_pins[i]->net != verilog_netlist->pad_net) {
151-
warning_message(NETLIST_ERROR, -1, -1, "Signal %s is not driven. padding with ground\n", node->input_pins[i]->name);
151+
warning_message(NETLIST, -1, -1, "Signal %s is not driven. padding with ground\n", node->input_pins[i]->name);
152152
add_fanout_pin_to_net(verilog_netlist->zero_net, node->input_pins[i]);
153153
}
154154

ODIN_II/SRC/implicit_memory.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ implicit_memory* create_implicit_memory_block(int data_width, long memory_depth,
115115

116116
//verify if it is a power of two (only one bit set)
117117
if ((memory_depth != real_memory_depth)) {
118-
warning_message(NETLIST_ERROR, -1, -1, "Rounding memory <%s> of size <%ld> to closest power of two: %ld.", name, memory_depth, real_memory_depth);
118+
warning_message(NETLIST, -1, -1, "Rounding memory <%s> of size <%ld> to closest power of two: %ld.", name, memory_depth, real_memory_depth);
119119
memory_depth = real_memory_depth;
120120
}
121121

@@ -183,7 +183,7 @@ void register_implicit_memory_input(char* name, implicit_memory* memory) {
183183
if (!lookup_implicit_memory_input(name))
184184
implicit_memory_inputs.insert({std::string(name), memory});
185185
else
186-
error_message(NETLIST_ERROR, -1, -1, "Attempted to re-register implicit memory output %s.", name);
186+
error_message(NETLIST, -1, -1, "Attempted to re-register implicit memory output %s.", name);
187187
}
188188

189189
/*
@@ -288,7 +288,7 @@ void finalize_implicit_memory(implicit_memory* memory) {
288288

289289
if (!has_clk) {
290290
add_dummy_input_port_to_implicit_memory(memory, 1, "clk");
291-
warning_message(NETLIST_ERROR, -1, -1, "Implicit memory %s is not clocked. Padding clock pin.", memory->name);
291+
warning_message(NETLIST, -1, -1, "Implicit memory %s is not clocked. Padding clock pin.", memory->name);
292292
}
293293

294294
char has_port1 = has_addr1 || has_data1 || has_we1 || has_out1;
@@ -312,7 +312,7 @@ void finalize_implicit_memory(implicit_memory* memory) {
312312
collapse_implicit_memory_to_single_port_ram(memory);
313313

314314
if (!has_port1 && !has_port2) {
315-
warning_message(NETLIST_ERROR, -1, -1, "Implicit memory %s has no ports...", memory->name);
315+
warning_message(NETLIST, -1, -1, "Implicit memory %s has no ports...", memory->name);
316316
} else {
317317
/*
318318
* If this hard block is supported, register it globally and mark

ODIN_II/SRC/include/odin_error.h

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,20 @@
88

99
enum odin_error {
1010
NO_ERROR,
11-
/* for error during odin bootup */
12-
ARG_ERROR,
13-
/* for parsing and AST creation errors */
14-
PARSE_ERROR,
15-
/* for netlist creation oerrors */
16-
NETLIST_ERROR,
17-
/* for blif read errors */
18-
BLIF_ERROR,
19-
/* for errors in netlist (clustered after tvpack) errors */
20-
NETLIST_FILE_ERROR,
21-
/* for errors in activation estimateion creation */
22-
ACTIVATION_ERROR,
11+
/* for error in utility functions*/
12+
UTIL,
13+
/* for error during initialization */
14+
PARSE_ARGS,
15+
/* for parser errors */
16+
PARSER,
17+
/* for AST related errors */
18+
AST,
19+
/* for Netlist related errors */
20+
NETLIST,
21+
/* for blif parser errors */
22+
PARSE_BLIF,
2323
/* for errors in the netlist simulation */
24-
SIMULATION_ERROR,
25-
/* for error in ACE */
26-
ACE,
24+
SIMULATION,
2725
};
2826

2927
extern const char* odin_error_STR[];
@@ -44,20 +42,20 @@ static inline void _verbose_assert(bool condition, const char* condition_str, co
4442
void _log_message(odin_error error_type, long column, long line_number, long file, bool soft_error, const char* function_file_name, long function_line, const char* function_name, const char* message, ...);
4543

4644
#define error_message(error_type, line_number, file, message, ...) \
47-
_log_message(error_type, -1, line_number, file, false, __FILE__, __LINE__, __func__, message, __VA_ARGS__)
45+
_log_message(error_type, -1, line_number, file, true, __FILE__, __LINE__, __func__, message, __VA_ARGS__)
4846

4947
#define warning_message(error_type, line_number, file, message, ...) \
50-
_log_message(error_type, -1, line_number, file, true, __FILE__, __LINE__, __func__, message, __VA_ARGS__)
48+
_log_message(error_type, -1, line_number, file, false, __FILE__, __LINE__, __func__, message, __VA_ARGS__)
5149

5250
#define possible_error_message(error_type, line_number, file, message, ...) \
53-
_log_message(error_type, -1, line_number, file, global_args.permissive.value(), __FILE__, __LINE__, __func__, message, __VA_ARGS__)
51+
_log_message(error_type, -1, line_number, file, !global_args.permissive.value(), __FILE__, __LINE__, __func__, message, __VA_ARGS__)
5452

55-
#define delayed_error_message(error_type, column, line_number, file, message, ...) \
56-
{ \
57-
_log_message(error_type, column, line_number, file, true, __FILE__, __LINE__, __func__, message, __VA_ARGS__); \
58-
delayed_errors += 1; \
53+
#define delayed_error_message(error_type, column, line_number, file, message, ...) \
54+
{ \
55+
_log_message(error_type, column, line_number, file, false, __FILE__, __LINE__, __func__, message, __VA_ARGS__); \
56+
delayed_errors += 1; \
5957
}
6058

61-
void verify_delayed_error();
59+
void verify_delayed_error(odin_error error_type);
6260

6361
#endif

0 commit comments

Comments
 (0)