123 lines
3.5 KiB
C
Executable File
123 lines
3.5 KiB
C
Executable File
#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
|
|
|