14 int remaining_connections_to_sink);
31 boolean success, is_routable, rip_up_local_opins;
42 for (inet = 0; inet <
num_nets; inet++) {
53 vpr_printf(TIO_MESSAGE_INFO,
"Routing failed.\n");
66 rip_up_local_opins =
FALSE;
68 rip_up_local_opins =
TRUE;
71 clb_opins_used_locally);
75 vpr_printf(TIO_MESSAGE_INFO,
"Successfully routed after %d routing iterations.\n", itry);
89 vpr_printf(TIO_MESSAGE_INFO,
"Routing failed.\n");
108 int i, inode, prev_node, remaining_connections_to_sink;
109 float pcost, new_pcost;
118 remaining_connections_to_sink = 0;
124 if (current == NULL) {
125 vpr_printf (TIO_MESSAGE_INFO,
"Cannot route net #%d (%s) to sink #%d -- no possible path.\n",
131 inode = current->
index;
135 new_pcost = current->
cost;
136 if (pcost > new_pcost) {
152 if (current == NULL) {
153 vpr_printf (TIO_MESSAGE_INFO,
"Cannot route net #%d (%s) to sink #%d -- no possible path.\n",
159 inode = current->
index;
174 int remaining_connections_to_sink) {
192 struct s_trace *tptr, *next_ptr;
193 int inode, sink_node, last_ipin_node;
201 if (remaining_connections_to_sink == 0) {
202 while (tptr != NULL) {
219 next_ptr = tptr->
next;
220 last_ipin_node =
OPEN;
226 while (next_ptr != NULL) {
231 last_ipin_node = inode;
234 next_ptr = tptr->
next;
248 sink_node = tptr->
index;
266 int iconn, to_node, num_edges;
271 for (iconn = 0; iconn < num_edges; iconn++) {
282 if (bend_cost != 0.) {
287 tot_cost += bend_cost;
boolean feasible_routing(void)
float get_rr_cong_cost(int inode)
struct s_heap * get_heap_head(void)
void free_traceback(int inet)
t_rr_node_route_inf * rr_node_route_inf
static boolean breadth_first_route_net(int inet, float bend_cost)
void invalidate_heap_entries(int sink_node, int ipin_node)
void free_heap_data(struct s_heap *hptr)
int max_router_iterations
float first_iter_pres_fac
void pathfinder_update_cost(float pres_fac, float acc_fac)
boolean try_breadth_first_route(struct s_router_opts router_opts, t_ivec **clb_opins_used_locally, int width_fac)
void reset_path_costs(void)
static t_ivec ** clb_opins_used_locally
static void breadth_first_expand_neighbours(int inode, float pcost, int inet, float bend_cost)
#define HUGE_POSITIVE_FLOAT
struct s_trace ** trace_head
static void breadth_first_expand_trace_segment(struct s_trace *start_ptr, int remaining_connections_to_sink)
void node_to_heap(int inode, float cost, int prev_node, int prev_edge, float backward_path_cost, float R_upstream)
void pathfinder_update_one_cost(struct s_trace *route_segment_start, int add_or_sub, float pres_fac)
struct s_trace * update_traceback(struct s_heap *hptr, int inet)
void add_to_mod_list(float *fptr)
void reserve_locally_used_opins(float pres_fac, boolean rip_up_local_opins, t_ivec **clb_opins_used_locally)
static void breadth_first_add_source_to_heap(int inet)