blob: 7c74cbcc4fcce0b05feae4bc20bbca2425b042ae [file] [log] [blame]
/*********** Types and defines used by all path_delay modules ****************/
typedef struct
{
int to_node;
float Tdel;
}
t_tedge;
/* to_node: index of node at the sink end of this edge. *
* Tdel: delay to go to to_node along this edge. */
typedef struct
{
t_tedge *out_edges;
int num_edges;
float T_arr;
float T_req;
}
t_tnode;
/* out_edges: [0..num_edges - 1]. Array of the edges leaving this tnode. *
* num_edges: Number of edges leaving this node. *
* T_arr: Arrival time of the last input signal to this node. *
* T_req: Required arrival time of the last input signal to this node if *
* the critical path is not to be lengthened. */
/* Info. below is only used to print out and display the critical path. It *
* gives a mapping from each t_node to what circuit element it represents. *
* I put this info in a separate structure to maximize cache effectiveness, *
* since it's not used much. */
typedef enum
{ INPAD_SOURCE, INPAD_OPIN, OUTPAD_IPIN, OUTPAD_SINK,
FB_IPIN, FB_OPIN, SUBBLK_IPIN, SUBBLK_OPIN, FF_SINK, FF_SOURCE,
CONSTANT_GEN_SOURCE
}
t_tnode_type;
typedef struct
{
t_tnode_type type;
short ipin;
short isubblk;
int iblk;
}
t_tnode_descript;
/* type: What is this tnode? (Pad pin, clb pin, subblock pin, etc.) *
* ipin: Number of the FB or subblock pin this tnode represents, if *
* applicable. *
* isubblk: Number of the subblock this tnode is part of, if applicable. *
* iblk: Number of the block (FB or PAD) this tnode is part of. */
/*************** Variables shared only amongst path_delay modules ************/
extern t_tnode *tnode; /* [0..num_tnodes - 1] */
extern t_tnode_descript *tnode_descript; /* [0..num_tnodes - 1] */
extern int num_tnodes; /* Number of nodes in the timing graph */
/* [0..num_nets - 1]. Gives the index of the tnode that drives each net. */
extern int *net_to_driver_tnode;
/* [0..num__tnode_levels - 1]. Count and list of tnodes at each level of *
* the timing graph, to make breadth-first searches easier. */
extern struct s_ivec *tnodes_at_level;
extern int num_tnode_levels; /* Number of levels in the timing graph. */
/***************** Subroutines exported by this module ***********************/
int alloc_and_load_timing_graph_levels(void);
void check_timing_graph(int num_const_gen,
int num_ff,
int num_sinks);
float print_critical_path_node(FILE * fp,
t_linked_int * critical_path_node,
t_subblock_data subblock_data);