00001 /*********** Types and defines used by all path_delay modules ****************/ 00002 00003 typedef struct 00004 { 00005 int to_node; 00006 float Tdel; 00007 } 00008 t_tedge; 00009 00010 /* to_node: index of node at the sink end of this edge. * 00011 * Tdel: delay to go to to_node along this edge. */ 00012 00013 00014 typedef struct 00015 { 00016 t_tedge *out_edges; 00017 int num_edges; 00018 float T_arr; 00019 float T_req; 00020 } 00021 t_tnode; 00022 00023 /* out_edges: [0..num_edges - 1]. Array of the edges leaving this tnode. * 00024 * num_edges: Number of edges leaving this node. * 00025 * T_arr: Arrival time of the last input signal to this node. * 00026 * T_req: Required arrival time of the last input signal to this node if * 00027 * the critical path is not to be lengthened. */ 00028 00029 00030 /* Info. below is only used to print out and display the critical path. It * 00031 * gives a mapping from each t_node to what circuit element it represents. * 00032 * I put this info in a separate structure to maximize cache effectiveness, * 00033 * since it's not used much. */ 00034 00035 typedef enum 00036 { INPAD_SOURCE, INPAD_OPIN, OUTPAD_IPIN, OUTPAD_SINK, 00037 FB_IPIN, FB_OPIN, SUBBLK_IPIN, SUBBLK_OPIN, FF_SINK, FF_SOURCE, 00038 CONSTANT_GEN_SOURCE 00039 } 00040 t_tnode_type; 00041 00042 typedef struct 00043 { 00044 t_tnode_type type; 00045 short ipin; 00046 short isubblk; 00047 int iblk; 00048 } 00049 t_tnode_descript; 00050 00051 /* type: What is this tnode? (Pad pin, clb pin, subblock pin, etc.) * 00052 * ipin: Number of the FB or subblock pin this tnode represents, if * 00053 * applicable. * 00054 * isubblk: Number of the subblock this tnode is part of, if applicable. * 00055 * iblk: Number of the block (FB or PAD) this tnode is part of. */ 00056 00057 00058 00059 /*************** Variables shared only amongst path_delay modules ************/ 00060 00061 extern t_tnode *tnode; /* [0..num_tnodes - 1] */ 00062 extern t_tnode_descript *tnode_descript; /* [0..num_tnodes - 1] */ 00063 extern int num_tnodes; /* Number of nodes in the timing graph */ 00064 00065 00066 /* [0..num_nets - 1]. Gives the index of the tnode that drives each net. */ 00067 00068 extern int *net_to_driver_tnode; 00069 00070 00071 /* [0..num__tnode_levels - 1]. Count and list of tnodes at each level of * 00072 * the timing graph, to make breadth-first searches easier. */ 00073 00074 extern struct s_ivec *tnodes_at_level; 00075 extern int num_tnode_levels; /* Number of levels in the timing graph. */ 00076 00077 00078 00079 /***************** Subroutines exported by this module ***********************/ 00080 00081 int alloc_and_load_timing_graph_levels(void); 00082 00083 void check_timing_graph(int num_const_gen, 00084 int num_ff, 00085 int num_sinks); 00086 00087 float print_critical_path_node(FILE * fp, 00088 t_linked_int * critical_path_node, 00089 t_subblock_data subblock_data);