VPR-6.0

vpr/SRC/route/route_tree_timing.h

Go to the documentation of this file.
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);