VPR-6.0
|
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