00001
00002
00003 extern boolean *rr_edge_done;
00004
00005
00006
00007
00008
00009 struct s_ivec ***alloc_and_load_rr_node_indices(IN int nodes_per_chan,
00010 IN int nx,
00011 IN int ny,
00012 INOUT int *index,
00013 IN t_seg_details *
00014 seg_details);
00015
00016 void free_rr_node_indices(IN t_ivec *** rr_node_indices);
00017
00018 int get_rr_node_index(int x,
00019 int y,
00020 t_rr_type rr_type,
00021 int ptc,
00022 t_ivec *** rr_node_indices);
00023
00024 void free_seg_details(t_seg_details * seg_details,
00025 int nodes_per_chan);
00026
00027 t_seg_details *alloc_and_load_seg_details(INOUT int *nodes_per_chan,
00028 IN int max_len,
00029 IN int num_seg_types,
00030 IN t_segment_inf * segment_inf,
00031 IN boolean use_full_seg_groups,
00032 IN boolean is_global_graph,
00033 IN enum e_directionality
00034 directionality);
00035
00036 void dump_seg_details(t_seg_details * seg_details,
00037 int nodes_per_chan,
00038 char *fname);
00039
00040 int get_seg_start(IN t_seg_details * seg_details,
00041 IN int itrack,
00042 IN int chan_num,
00043 IN int seg_num);
00044
00045 int get_seg_end(IN t_seg_details * seg_details,
00046 IN int itrack,
00047 IN int istart,
00048 IN int chan_num,
00049 IN int seg_max);
00050
00051 boolean is_cbox(IN int chan,
00052 IN int seg,
00053 IN int track,
00054 IN t_seg_details * seg_details,
00055 IN enum e_directionality directionality);
00056
00057 boolean is_sbox(IN int chan,
00058 IN int wire_seg,
00059 IN int sb_seg,
00060 IN int track,
00061 IN t_seg_details * seg_details,
00062 IN enum e_directionality directionality);
00063
00064 int get_bidir_opin_connections(IN int i,
00065 IN int j,
00066 IN int ipin,
00067 IN struct s_linked_edge **edge_list,
00068 IN int *****opin_to_track_map,
00069 IN int Fc,
00070 IN boolean * rr_edge_done,
00071 IN t_ivec *** rr_node_indices,
00072 IN t_seg_details * seg_details);
00073
00074 int get_unidir_opin_connections(IN int chan,
00075 IN int seg,
00076 IN int Fc,
00077 IN t_rr_type chan_type,
00078 IN t_seg_details * seg_details,
00079 INOUT t_linked_edge ** edge_list_ptr,
00080 INOUT int **Fc_ofs,
00081 INOUT boolean * rr_edge_done,
00082 IN int max_len,
00083 IN int nodes_per_chan,
00084 IN t_ivec *** rr_node_indices,
00085 OUT boolean * Fc_clipped);
00086
00087 int get_track_to_ipins(int seg,
00088 int chan,
00089 int track,
00090 t_linked_edge ** edge_list_ptr,
00091 t_ivec *** rr_node_indices,
00092 struct s_ivec ****track_to_ipin_lookup,
00093 t_seg_details * seg_details,
00094 enum e_rr_type chan_type,
00095 int chan_length,
00096 int wire_to_ipin_switch,
00097 enum e_directionality directionality);
00098
00099 int get_track_to_tracks(IN int from_chan,
00100 IN int from_seg,
00101 IN int from_track,
00102 IN t_rr_type from_type,
00103 IN int to_seg,
00104 IN t_rr_type to_type,
00105 IN int chan_len,
00106 IN int nodes_per_chan,
00107 IN int *opin_mux_size,
00108 IN int Fs_per_side,
00109 IN short *****sblock_pattern,
00110 INOUT struct s_linked_edge **edge_list,
00111 IN t_seg_details * seg_details,
00112 IN enum e_directionality directionality,
00113 IN t_ivec *** rr_node_indices,
00114 INOUT boolean * rr_edge_done,
00115 IN struct s_ivec ***switch_block_conn);
00116
00117 short *****alloc_sblock_pattern_lookup(IN int nx,
00118 IN int ny,
00119 IN int nodes_per_chan);
00120 void free_sblock_pattern_lookup(INOUT short *****sblock_pattern);
00121 void load_sblock_pattern_lookup(IN int i,
00122 IN int j,
00123 IN int nodes_per_chan,
00124 IN t_seg_details * seg_details,
00125 IN int Fs,
00126 IN enum e_switch_block_type switch_block_type,
00127 INOUT short *****sblock_pattern);