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