60 boolean success, Fc_clipped;
87 try_place(placer_opts, annealing_sched, chan_width_dist, router_opts,
88 det_routing_arch, segment_inf, timing_inf, directs, num_directs);
92 vpr_printf(TIO_MESSAGE_INFO,
"Placement took %g seconds.\n", (
float)(end - begin) / CLOCKS_PER_SEC);
94 vpr_printf(TIO_MESSAGE_INFO,
"Placement took %g seconds.\n", (
float)(end - begin) / CLK_PER_SEC);
110 arch_file, route_file, router_opts.
full_stats,
112 det_routing_arch, segment_inf, timing_inf, chan_width_dist,
113 models, directs, num_directs);
117 if (width_fac % 2 != 0) {
118 vpr_printf(TIO_MESSAGE_ERROR,
"in pack_place_and_route.c: Given odd chan width (%d) for udsd architecture.\n",
133 success =
try_route(width_fac, router_opts, det_routing_arch,
134 segment_inf, timing_inf, net_delay, slacks, chan_width_dist,
135 clb_opins_used_locally, &Fc_clipped, directs, num_directs);
138 vpr_printf(TIO_MESSAGE_WARNING,
"Fc_output was too high and was clipped to full (maximum) connectivity.\n");
141 if (success ==
FALSE) {
142 vpr_printf(TIO_MESSAGE_INFO,
"Circuit is unrouteable with a channel width factor of %d.\n", width_fac);
144 sprintf(msg,
"Routing failed with a channel width factor of %d. ILLEGAL routing shown.", width_fac);
151 vpr_printf(TIO_MESSAGE_INFO,
"Circuit successfully routed with a channel width factor of %d.\n", width_fac);
167 sprintf(msg,
"Routing succeeded with a channel width factor of %d.\n\n",
178 assert(slacks->
slack);
199 if (clb_opins_used_locally != NULL) {
202 block[i].type->num_class - 1);
204 free(clb_opins_used_locally);
205 clb_opins_used_locally = NULL;
213 #ifdef CLOCKS_PER_SEC
214 vpr_printf(TIO_MESSAGE_INFO,
"Routing took %g seconds.\n", (
float) (end - begin) / CLOCKS_PER_SEC);
216 vpr_printf(TIO_MESSAGE_INFO,
"Routing took %g seconds.\n", (
float)(end - begin) / CLK_PER_SEC);
void update_screen(int priority, char *msg, enum pic_type pic_on_screen_val, boolean crit_path_button_enabled)
void print_timing_graph_as_blif(const char *fname, t_model *models)
void free_port_pin_from_blk_pin(void)
void read_place(INP const char *place_file, INP const char *arch_file, INP const char *net_file, INP int L_nx, INP int L_ny, INP int L_num_blocks, INOUTP struct s_block block_list[])
static float ** net_delay
boolean try_route(int width_fac, struct s_router_opts router_opts, struct s_det_routing_arch det_routing_arch, t_segment_inf *segment_inf, t_timing_inf timing_inf, float **net_delay, t_slack *slacks, t_chan_width_dist chan_width_dist, t_ivec **clb_opins_used_locally, boolean *Fc_clipped, t_direct_inf *directs, int num_directs)
boolean timing_analysis_enabled
void sync_grid_to_blocks(INP int L_num_blocks, INP const struct s_block block_list[], INP int L_nx, INP int L_ny, INOUTP struct s_grid_tile **L_grid)
void get_serial_num(void)
static int binary_search_place_and_route(struct s_placer_opts placer_opts, char *place_file, char *net_file, char *arch_file, char *route_file, boolean full_stats, boolean verify_binary_search, struct s_annealing_sched annealing_sched, struct s_router_opts router_opts, struct s_det_routing_arch det_routing_arch, t_segment_inf *segment_inf, t_timing_inf timing_inf, t_chan_width_dist chan_width_dist, t_model *models, t_direct_inf *directs, int num_directs)
void check_route(enum e_route_type route_type, int num_switch, t_ivec **clb_opins_used_locally)
boolean getEchoEnabled(void)
t_solution_inf g_solution_inf
static t_ivec ** clb_opins_used_locally
void init_draw_coords(float width_val)
void verilog_writer(void)
enum e_directionality directionality
void free_ivec_vector(struct s_ivec *ivec_vector, int nrmin, int nrmax)
static t_chunk net_delay_ch
t_ivec ** alloc_route_structs(void)
void print_route(char *route_file)
boolean isEchoFileEnabled(enum e_echo_files echo_option)
void print_sink_delays(const char *fname)
void free_blk_pin_from_port_pin(void)
void print_place(char *place_file, char *net_file, char *arch_file)
enum e_route_type route_type
struct s_grid_tile ** grid
void free_net_delay(float **net_delay, t_chunk *chunk_list_ptr)
void post_place_sync(INP int L_num_blocks, INOUTP const struct s_block block_list[])
boolean GetPostSynthesisOption(void)
float ** alloc_net_delay(t_chunk *chunk_list_ptr, struct s_net *nets, int n_nets)
t_slack * alloc_and_load_timing_graph(t_timing_inf timing_inf)
#define NO_FIXED_CHANNEL_WIDTH
struct s_type_descriptor * type_descriptors
char * getEchoFileName(enum e_echo_files echo_option)
void free_timing_graph(t_slack *slacks)
void routing_stats(boolean full_stats, enum e_route_type route_type, int num_switch, t_segment_inf *segment_inf, int num_segment, float R_minW_nmos, float R_minW_pmos, enum e_directionality directionality, boolean timing_analysis_enabled, float **net_delay, t_slack *slacks)
void try_place(struct s_placer_opts placer_opts, struct s_annealing_sched annealing_sched, t_chan_width_dist chan_width_dist, struct s_router_opts router_opts, struct s_det_routing_arch det_routing_arch, t_segment_inf *segment_inf, t_timing_inf timing_inf, t_direct_inf *directs, int num_directs)
boolean verify_binary_search