OpenFPGA/vpr7_x2p/vpr/SRC/route/rr_graph2.h

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