VPR-6.0
|
Go to the source code of this file.
Functions | |
void | load_pb_graph_pin_to_pin_annotations (INOUTP t_pb_graph_node *pb_graph_node) |
Jason Luu April 15, 2011 pb_type_graph_annotations loads statistical information onto the different nodes/edges of a pb_type_graph. These statistical informations include delays, capacitance, etc.
Definition in file pb_type_graph_annotations.h.
void load_pb_graph_pin_to_pin_annotations | ( | INOUTP t_pb_graph_node * | pb_graph_node | ) |
Definition at line 35 of file pb_type_graph_annotations.c.
{ int i, j, k, m; const t_pb_type *pb_type; t_pin_to_pin_annotation *annotations; pb_type = pb_graph_node->pb_type; /* Load primitive critical path delays */ if(pb_type->num_modes == 0) { annotations = pb_type->annotations; for(i = 0; i < pb_type->num_annotations; i++) { if(annotations[i].type == E_ANNOT_PIN_TO_PIN_DELAY) { for(j = 0; j < annotations[i].num_value_prop_pairs; j++) { if( annotations[i].prop[j] == E_ANNOT_PIN_TO_PIN_DELAY_MAX || annotations[i].prop[j] == E_ANNOT_PIN_TO_PIN_DELAY_CLOCK_TO_Q_MAX || annotations[i].prop[j] == E_ANNOT_PIN_TO_PIN_DELAY_TSETUP ) { load_critical_path_annotations(pb_graph_node, OPEN, annotations[i].format, annotations[i].prop[j], annotations[i].input_pins, annotations[i].output_pins, annotations[i].value[j]); } else { assert(annotations[i].prop[j] == E_ANNOT_PIN_TO_PIN_DELAY_MIN || annotations[i].prop[j] == E_ANNOT_PIN_TO_PIN_DELAY_CLOCK_TO_Q_MIN || annotations[i].prop[j] == E_ANNOT_PIN_TO_PIN_DELAY_THOLD ); } } } else { /* Todo: load_hold_time_constraints_annotations(pb_graph_node); load_power_annotations(pb_graph_node); */ } } } else { /* Load interconnect delays */ for(i = 0; i < pb_type->num_modes; i++) { for(j = 0; j < pb_type->modes[i].num_interconnect; j++) { annotations = pb_type->modes[i].interconnect[j].annotations; for(k = 0; k < pb_type->modes[i].interconnect[j].num_annotations; k++) { if(annotations[k].type == E_ANNOT_PIN_TO_PIN_DELAY) { for(m = 0; m < annotations[k].num_value_prop_pairs; m++) { if( annotations[k].prop[m] == E_ANNOT_PIN_TO_PIN_DELAY_MAX || annotations[k].prop[m] == E_ANNOT_PIN_TO_PIN_DELAY_CLOCK_TO_Q_MAX || annotations[k].prop[m] == E_ANNOT_PIN_TO_PIN_DELAY_TSETUP ) { load_critical_path_annotations(pb_graph_node, i, annotations[k].format, annotations[k].prop[m], annotations[k].input_pins, annotations[k].output_pins, annotations[k].value[m]); } else { assert(annotations[k].prop[m] == E_ANNOT_PIN_TO_PIN_DELAY_MIN || annotations[k].prop[m] == E_ANNOT_PIN_TO_PIN_DELAY_CLOCK_TO_Q_MIN || annotations[k].prop[m] == E_ANNOT_PIN_TO_PIN_DELAY_THOLD ); } } } else { /* Todo: load_hold_time_constraints_annotations(pb_graph_node); load_power_annotations(pb_graph_node); */ } } } } } for(i = 0; i < pb_type->num_modes; i++) { for(j = 0; j < pb_type->modes[i].num_pb_type_children; j++) { for(k = 0; k < pb_type->modes[i].pb_type_children[j].num_pb; k++) { load_pb_graph_pin_to_pin_annotations(&pb_graph_node->child_pb_graph_nodes[i][j][k]); } } } }