VPR-6.0

vpr/SRC/pack/pb_type_graph_annotations.h File Reference

This graph shows which files directly or indirectly include this file:

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)

Detailed Description

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.


Function Documentation

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]);
                        }
                }
        }
}

Here is the call graph for this function:

Here is the caller graph for this function: