Skip to content

Commit 400beb7

Browse files
author
djns1
committed
Got a compiling and maybe running
1 parent 05d9dab commit 400beb7

File tree

2 files changed

+46
-33
lines changed

2 files changed

+46
-33
lines changed

ODIN_II/SRC/netlist_create_from_ast.cpp

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3140,26 +3140,36 @@ void terminate_registered_assignment(ast_node_t* always_node, signal_list_t* ass
31403140
}
31413141
}
31423142

3143-
#warning "Oops broke come back fix this"
3144-
// for (i = 0; i < assignment->count; i++) {
3145-
// npin_t* pin = assignment->pins[i];
3146-
// int dependence_variable_position = -1;
3147-
//
3148-
// if (pin->net->driver_pin) {
3149-
// ref_string = pin->net->driver_pin->node->name;
3150-
//
3151-
// for (j = i - 1; j >= 0; j--) {
3152-
// if (list_dependence_pin[j] && list_dependence_pin[j]->net->driver_pin && list_dependence_type[j] && list_dependence_type[j] == BLOCKING_STATEMENT && strcmp(ref_string, assignment->pins[j]->node->name) == 0) {
3153-
// dependence_variable_position = j;
3154-
// ref_string = list_dependence_pin[j]->net->driver_pin->node->name;
3155-
// }
3156-
// }
3157-
//
3158-
// if (dependence_variable_position > -1) {
3159-
// pin->net = list_dependence_pin[dependence_variable_position]->net;
3160-
// }
3161-
// }
3162-
// }
3143+
#warning "Oops this be broke come fix"
3144+
for (i = 0; i < assignment->count; i++) {
3145+
npin_t* pin = assignment->pins[i];
3146+
int dependence_variable_position = -1;
3147+
3148+
if(pin->net->num_driver_pins > 1) {
3149+
// TODO Come make this warning actually correct when I know what is happening
3150+
error_message( NETLIST, pin->node->line_number, pin->node->file_number, "Multiple drivers not supported for assignment to %s", pin->name);
3151+
}
3152+
if (pin->net->num_driver_pins) {
3153+
ref_string = pin->net->driver_pins[0]->node->name;
3154+
3155+
for (j = i - 1; j >= 0; j--) {
3156+
if(list_dependence_pin[j] && list_dependence_pin[j]->net->num_driver_pins > 1)
3157+
{
3158+
// TODO Come make this warning actually correct when I know what is happening
3159+
error_message( NETLIST, list_dependence_pin[j]->node->line_number, list_dependence_pin[j]->node->file_number, "Cannot have multiple drivers for dependant variable %s", list_dependence_pin[j]);
3160+
}
3161+
if (list_dependence_pin[j] && list_dependence_pin[j]->net->num_driver_pins && list_dependence_type[j] && list_dependence_type[j] == BLOCKING_STATEMENT && strcmp(ref_string, assignment->pins[j]->node->name) == 0) {
3162+
dependence_variable_position = j;
3163+
ref_string = list_dependence_pin[j]->net->driver_pins[0]->node->name;
3164+
}
3165+
}
3166+
3167+
// TODO Does this variable need reset on each loop
3168+
if (dependence_variable_position > -1) {
3169+
pin->net = list_dependence_pin[dependence_variable_position]->net;
3170+
}
3171+
}
3172+
}
31633173
vtr::free(list_dependence_pin);
31643174
vtr::free(list_dependence_type);
31653175
for (i = 0; i < memory_inputs->count; i++) {

ODIN_II/SRC/simulate_blif.cpp

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1700,17 +1700,19 @@ static void compute_add_node(nnode_t* node, int cycle, int type) {
17001700
int* b = (int*)vtr::malloc(sizeof(int) * node->input_port_sizes[1]);
17011701
int* c = (int*)vtr::malloc(sizeof(int) * node->input_port_sizes[2]);
17021702

1703-
// int num = node->input_port_sizes[0] + node->input_port_sizes[1];
1703+
int num = node->input_port_sizes[0] + node->input_port_sizes[1];
17041704
//if cin connect to unconn(PAD_NODE), a[0] connect to ground(GND_NODE) and b[0] connect to ground, flag = 0 the initial adder for addition
17051705
//if cin connect to unconn(PAD_NODE), a[0] connect to ground(GND_NODE) and b[0] connect to vcc, flag = 1 the initial adder for subtraction
17061706
#warning "Oops this be broke come fix"
1707-
// if (node->input_pins[num]->net->driver_pin->node->type == PAD_NODE) {
1708-
// if (node->input_pins[0]->net->driver_pin->node->type == GND_NODE && node->input_pins[node->input_port_sizes[0]]->net->driver_pin->node->type == GND_NODE)
1709-
// flag = 0;
1710-
// else if (node->input_pins[0]->net->driver_pin->node->type == GND_NODE && node->input_pins[node->input_port_sizes[0]]->net->driver_pin->node->type == VCC_NODE)
1711-
// flag = 1;
1712-
// } else
1713-
// flag = 2;
1707+
oassert( node->input_pins[0]->net->num_driver_pins <= 1 && "Add node does not support multiple drivers yet" );
1708+
oassert( node->input_pins[num]->net->num_driver_pins <= 1 && "Add node does not support multiple drivers yet" );
1709+
if (node->input_pins[num]->net->driver_pins[0]->node->type == PAD_NODE) {
1710+
if (node->input_pins[0]->net->driver_pins[0]->node->type == GND_NODE && node->input_pins[node->input_port_sizes[0]]->net->driver_pins[0]->node->type == GND_NODE)
1711+
flag = 0;
1712+
else if (node->input_pins[0]->net->driver_pins[0]->node->type == GND_NODE && node->input_pins[node->input_port_sizes[0]]->net->driver_pins[0]->node->type == VCC_NODE)
1713+
flag = 1;
1714+
} else
1715+
flag = 2;
17141716

17151717
for (i = 0; i < node->input_port_sizes[0]; i++)
17161718
a[i] = get_pin_value(node->input_pins[i], cycle);
@@ -1830,11 +1832,12 @@ static void compute_unary_sub_node(nnode_t* node, int cycle) {
18301832
a[i] = get_pin_value(node->input_pins[i], cycle);
18311833

18321834
#warning "Oops this be broke come fix"
1833-
// for (i = 0; i < node->input_port_sizes[1]; i++)
1834-
// if (node->input_pins[node->input_port_sizes[0] + node->input_port_sizes[1] + i]->net->driver_pin->node->type == PAD_NODE)
1835-
// c[i] = 1;
1836-
// else
1837-
// c[i] = get_pin_value(node->input_pins[node->input_port_sizes[0] + i], cycle);
1835+
oassert( node->input_pins[node->input_port_sizes[0] + node->input_port_sizes[1] + i]->net->num_driver_pins <= 1 && "Sub node does not support multiple driver pins" );
1836+
for (i = 0; i < node->input_port_sizes[1]; i++)
1837+
if (node->input_pins[node->input_port_sizes[0] + node->input_port_sizes[1] + i]->net->driver_pins[0]->node->type == PAD_NODE)
1838+
c[i] = 1;
1839+
else
1840+
c[i] = get_pin_value(node->input_pins[node->input_port_sizes[0] + i], cycle);
18381841

18391842
int* result = unary_sub_arrays(a, node->input_port_sizes[0], c, node->input_port_sizes[1]);
18401843

0 commit comments

Comments
 (0)