| #ifndef RR_GRAPH2_H |
| #define RR_GRAPH2_H |
| |
| /************** Global variables shared only by the rr_* modules. ************/ |
| |
| extern boolean *rr_edge_done; /* [0..num_rr_nodes-1]. Used to keep track * |
| * of whether or not a node has been put in * |
| * an edge list yet. TRUE if a node is already listed in the edges array * |
| * that's being constructed. Ensure that there are no duplicate edges. */ |
| |
| /******************* Subroutines exported by rr_graph2.c *********************/ |
| |
| struct s_ivec ***alloc_and_load_rr_node_indices(INP int nodes_per_chan, |
| INP int L_nx, |
| INP int L_ny, |
| INOUTP int *index, |
| INP t_seg_details * seg_details) ; |
| |
| void free_rr_node_indices(INP t_ivec *** L_rr_node_indices); |
| |
| int get_rr_node_index(int x, int y, t_rr_type rr_type, int ptc, |
| t_ivec *** L_rr_node_indices); |
| |
| void free_seg_details(t_seg_details * seg_details, int nodes_per_chan); |
| |
| t_seg_details *alloc_and_load_seg_details(INOUTP int *nodes_per_chan, |
| INP int max_len, |
| INP int num_seg_types, |
| INP t_segment_inf * segment_inf, |
| INP boolean use_full_seg_groups, |
| INP boolean is_global_graph, |
| INP enum e_directionality |
| directionality); |
| |
| void dump_seg_details(t_seg_details * seg_details, int nodes_per_chan, |
| const char *fname); |
| |
| int get_seg_start(INP t_seg_details * seg_details, |
| INP int itrack, |
| INP int chan_num, |
| INP int seg_num); |
| |
| int get_seg_end(INP t_seg_details * seg_details, |
| INP int itrack, |
| INP int istart, |
| INP int chan_num, |
| INP int seg_max); |
| |
| boolean is_cbox(INP int chan, |
| INP int seg, |
| INP int track, |
| INP t_seg_details * seg_details, |
| INP enum e_directionality directionality); |
| |
| boolean is_sbox(INP int chan, |
| INP int wire_seg, |
| INP int sb_seg, |
| INP int track, |
| INP t_seg_details * seg_details, |
| INP enum e_directionality directionality); |
| |
| int get_bidir_opin_connections(INP int i, |
| INP int j, |
| INP int ipin, |
| INP struct s_linked_edge **edge_list, |
| INP int *****opin_to_track_map, |
| INP int Fc, |
| INP boolean * L_rr_edge_done, |
| INP t_ivec *** L_rr_node_indices, |
| INP t_seg_details * seg_details); |
| |
| int get_unidir_opin_connections(INP int chan, |
| INP int seg, |
| INP int Fc, |
| INP t_rr_type chan_type, |
| INP t_seg_details * seg_details, |
| INOUTP t_linked_edge ** edge_list_ptr, |
| INOUTP int **Fc_ofs, |
| INOUTP boolean * L_rr_edge_done, |
| INP int max_len, |
| INP int nodes_per_chan, |
| INP t_ivec *** L_rr_node_indices, |
| OUTP boolean * Fc_clipped); |
| |
| int get_track_to_ipins(int seg, int chan, int track, |
| t_linked_edge ** edge_list_ptr, t_ivec *** L_rr_node_indices, |
| struct s_ivec ****track_to_ipin_lookup, t_seg_details * seg_details, |
| enum e_rr_type chan_type, int chan_length, int wire_to_ipin_switch, |
| enum e_directionality directionality); |
| |
| int get_track_to_tracks(INP int from_chan, |
| INP int from_seg, |
| INP int from_track, |
| INP t_rr_type from_type, |
| INP int to_seg, |
| INP t_rr_type to_type, |
| INP int chan_len, |
| INP int nodes_per_chan, |
| INP int *opin_mux_size, |
| INP int Fs_per_side, |
| INP short *****sblock_pattern, |
| INOUTP struct s_linked_edge **edge_list, |
| INP t_seg_details * seg_details, |
| INP enum e_directionality directionality, |
| INP t_ivec *** L_rr_node_indices, |
| INOUTP boolean * L_rr_edge_done, |
| INP struct s_ivec ***switch_block_conn); |
| |
| short *****alloc_sblock_pattern_lookup(INP int L_nx, |
| INP int L_ny, |
| INP int nodes_per_chan); |
| void free_sblock_pattern_lookup(INOUTP short *****sblock_pattern); |
| void load_sblock_pattern_lookup(INP int i, |
| INP int j, |
| INP int nodes_per_chan, |
| INP t_seg_details * seg_details, |
| INP int Fs, |
| INP enum e_switch_block_type switch_block_type, |
| INOUTP short *****sblock_pattern); |
| |
| #endif |
| |