00001 /************** Types and defines exported by route_tree_timing.c ************/ 00002 00003 struct s_linked_rt_edge 00004 { 00005 struct s_rt_node *child; 00006 short iswitch; 00007 struct s_linked_rt_edge *next; 00008 }; 00009 00010 typedef struct s_linked_rt_edge t_linked_rt_edge; 00011 00012 /* Linked list listing the children of an rt_node. * 00013 * child: Pointer to an rt_node (child of the current node). * 00014 * iswitch: Index of the switch type used to connect to the child node. * 00015 * next: Pointer to the next linked_rt_edge in the linked list (allows * 00016 * you to get the next child of the current rt_node). */ 00017 00018 00019 00020 struct s_rt_node 00021 { 00022 union 00023 { 00024 t_linked_rt_edge *child_list; 00025 struct s_rt_node *next; 00026 } 00027 u; 00028 struct s_rt_node *parent_node; 00029 short parent_switch; 00030 short re_expand; 00031 int inode; 00032 float C_downstream; 00033 float R_upstream; 00034 float Tdel; 00035 }; 00036 00037 typedef struct s_rt_node t_rt_node; 00038 00039 /* Structure describing one node in a routing tree (used to get net delays * 00040 * incrementally during routing, as pieces are being added). * 00041 * u.child_list: Pointer to a linked list of linked_rt_edge. Each one of * 00042 * the linked list entries gives a child of this node. * 00043 * u.next: Used only when this node is on the free list. Gives the next * 00044 * node on the free list. * 00045 * parent_node: Pointer to the rt_node that is this node's parent (used to * 00046 * make bottom to top traversals). * 00047 * re_expand: (really boolean). Should this node be put on the heap as * 00048 * part of the partial routing to act as a source for subsequent * 00049 * connections? TRUE->yes, FALSE-> no. * 00050 * parent_switch: Index of the switch type driving this node (by its * 00051 * parent). * 00052 * inode: index (ID) of the rr_node that corresponds to this rt_node. * 00053 * C_downstream: Total downstream capacitance from this rt_node. That is, * 00054 * the total C of the subtree rooted at the current node, * 00055 * including the C of the current node. * 00056 * R_upstream: Total upstream resistance from this rt_node to the net * 00057 * source, including any rr_node[].R of this node. * 00058 * Tdel: Time delay for the signal to get from the net source to this node. * 00059 * Includes the time to go through this node. */ 00060 00061 00062 00063 /**************** Subroutines exported by route_tree_timing.c ***************/ 00064 00065 void alloc_route_tree_timing_structs(void); 00066 00067 void free_route_tree_timing_structs(void); 00068 00069 t_rt_node *init_route_tree_to_source(int inet); 00070 00071 void free_route_tree(t_rt_node * rt_node); 00072 00073 t_rt_node *update_route_tree(struct s_heap *hptr); 00074 00075 void update_net_delays_from_route_tree(float *net_delay, 00076 t_rt_node ** rt_node_of_sink, 00077 int inet);