@@ -3140,26 +3140,36 @@ void terminate_registered_assignment(ast_node_t* always_node, signal_list_t* ass
3140
3140
}
3141
3141
}
3142
3142
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
+ }
3163
3173
vtr::free (list_dependence_pin);
3164
3174
vtr::free (list_dependence_type);
3165
3175
for (i = 0 ; i < memory_inputs->count ; i++) {
0 commit comments