VPR-6.0

vpr/SRC/route/rr_graph2.h

Go to the documentation of this file.
00001 #ifndef RR_GRAPH2_H
00002 #define RR_GRAPH2_H
00003 
00004 /************** Global variables shared only by the rr_* modules. ************/
00005 
00006 extern boolean *rr_edge_done;   /**< [0..num_rr_nodes-1].  Used to keep track  
00007                                  * of whether or not a node has been put in  
00008                                  * an edge list yet.                         */
00009 
00010 /******************* Subroutines exported by rr_graph2.c *********************/
00011 
00012 struct s_ivec ***alloc_and_load_rr_node_indices(INP int nodes_per_chan,
00013                                                 INP int nx,
00014                                                 INP int ny,
00015                                                 INOUTP int *index,
00016                                                 INP t_seg_details *
00017                                                 seg_details);
00018 
00019 void free_rr_node_indices(INP t_ivec *** rr_node_indices);
00020 
00021 int get_rr_node_index(int x,
00022                       int y,
00023                       t_rr_type rr_type,
00024                       int ptc,
00025                       t_ivec *** rr_node_indices);
00026 
00027 void free_seg_details(t_seg_details * seg_details,
00028                       int nodes_per_chan);
00029 
00030 t_seg_details *alloc_and_load_seg_details(INOUTP int *nodes_per_chan,
00031                                           INP int max_len,
00032                                           INP int num_seg_types,
00033                                           INP t_segment_inf * segment_inf,
00034                                           INP boolean use_full_seg_groups,
00035                                           INP boolean is_global_graph,
00036                                           INP enum e_directionality
00037                                           directionality);
00038 
00039 void dump_seg_details(t_seg_details * seg_details,
00040                       int nodes_per_chan,
00041                       char *fname);
00042 
00043 int get_seg_start(INP t_seg_details * seg_details,
00044                   INP int itrack,
00045                   INP int chan_num,
00046                   INP int seg_num);
00047 
00048 int get_seg_end(INP t_seg_details * seg_details,
00049                 INP int itrack,
00050                 INP int istart,
00051                 INP int chan_num,
00052                 INP int seg_max);
00053 
00054 boolean is_cbox(INP int chan,
00055                 INP int seg,
00056                 INP int track,
00057                 INP t_seg_details * seg_details,
00058                 INP enum e_directionality directionality);
00059 
00060 boolean is_sbox(INP int chan,
00061                 INP int wire_seg,
00062                 INP int sb_seg,
00063                 INP int track,
00064                 INP t_seg_details * seg_details,
00065                 INP enum e_directionality directionality);
00066 
00067 int get_bidir_opin_connections(INP int i,
00068                                INP int j,
00069                                INP int ipin,
00070                                INP struct s_linked_edge **edge_list,
00071                                INP int *****opin_to_track_map,
00072                                INP int Fc,
00073                                INP boolean * rr_edge_done,
00074                                INP t_ivec *** rr_node_indices,
00075                                INP t_seg_details * seg_details);
00076 
00077 int get_unidir_opin_connections(INP int chan,
00078                                 INP int seg,
00079                                 INP int Fc,
00080                                 INP t_rr_type chan_type,
00081                                 INP t_seg_details * seg_details,
00082                                 INOUTP t_linked_edge ** edge_list_ptr,
00083                                 INOUTP int **Fc_ofs,
00084                                 INOUTP boolean * rr_edge_done,
00085                                 INP int max_len,
00086                                 INP int nodes_per_chan,
00087                                 INP t_ivec *** rr_node_indices,
00088                                 OUTP boolean * Fc_clipped);
00089 
00090 int get_track_to_ipins(int seg,
00091                        int chan,
00092                        int track,
00093                        t_linked_edge ** edge_list_ptr,
00094                        t_ivec *** rr_node_indices,
00095                        struct s_ivec ****track_to_ipin_lookup,
00096                        t_seg_details * seg_details,
00097                        enum e_rr_type chan_type,
00098                        int chan_length,
00099                        int wire_to_ipin_switch,
00100                        enum e_directionality directionality);
00101 
00102 int get_track_to_tracks(INP int from_chan,
00103                         INP int from_seg,
00104                         INP int from_track,
00105                         INP t_rr_type from_type,
00106                         INP int to_seg,
00107                         INP t_rr_type to_type,
00108                         INP int chan_len,
00109                         INP int nodes_per_chan,
00110                         INP int *opin_mux_size,
00111                         INP int Fs_per_side,
00112                         INP short *****sblock_pattern,
00113                         INOUTP struct s_linked_edge **edge_list,
00114                         INP t_seg_details * seg_details,
00115                         INP enum e_directionality directionality,
00116                         INP t_ivec *** rr_node_indices,
00117                         INOUTP boolean * rr_edge_done,
00118                         INP struct s_ivec ***switch_block_conn);
00119 
00120 short *****alloc_sblock_pattern_lookup(INP int nx,
00121                                        INP int ny,
00122                                        INP int nodes_per_chan);
00123 void free_sblock_pattern_lookup(INOUTP short *****sblock_pattern);
00124 void load_sblock_pattern_lookup(INP int i,
00125                                 INP int j,
00126                                 INP int nodes_per_chan,
00127                                 INP t_seg_details * seg_details,
00128                                 INP int Fs,
00129                                 INP enum e_switch_block_type switch_block_type,
00130                                 INOUTP short *****sblock_pattern);
00131 
00132 #endif
00133