#include <stdio.h>
#include "util.h"
#include "vpr_types.h"
#include "globals.h"
#include "route_export.h"
#include "route_common.h"
#include "route_breadth_first.h"
Go to the source code of this file.
static void breadth_first_add_source_to_heap |
( |
int |
inet | ) |
|
|
static |
Definition at line 294 of file route_breadth_first.c.
float get_rr_cong_cost(int inode)
void node_to_heap(int inode, float cost, int prev_node, int prev_edge, float backward_path_cost, float R_upstream)
static void breadth_first_expand_neighbours |
( |
int |
inode, |
|
|
float |
pcost, |
|
|
int |
inet, |
|
|
float |
bend_cost |
|
) |
| |
|
static |
Definition at line 259 of file route_breadth_first.c.
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;
float get_rr_cong_cost(int inode)
void node_to_heap(int inode, float cost, int prev_node, int prev_edge, float backward_path_cost, float R_upstream)
static void breadth_first_expand_trace_segment |
( |
struct s_trace * |
start_ptr, |
|
|
int |
remaining_connections_to_sink |
|
) |
| |
|
static |
Definition at line 173 of file route_breadth_first.c.
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;
t_rr_node_route_inf * rr_node_route_inf
void invalidate_heap_entries(int sink_node, int ipin_node)
#define HUGE_POSITIVE_FLOAT
void node_to_heap(int inode, float cost, int prev_node, int prev_edge, float backward_path_cost, float R_upstream)
static boolean breadth_first_route_net |
( |
int |
inet, |
|
|
float |
bend_cost |
|
) |
| |
|
static |
Definition at line 93 of file route_breadth_first.c.
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;
struct s_heap * get_heap_head(void)
void free_traceback(int inet)
t_rr_node_route_inf * rr_node_route_inf
void free_heap_data(struct s_heap *hptr)
void reset_path_costs(void)
static void breadth_first_expand_neighbours(int inode, float pcost, int inet, float bend_cost)
#define HUGE_POSITIVE_FLOAT
static void breadth_first_expand_trace_segment(struct s_trace *start_ptr, int remaining_connections_to_sink)
struct s_trace * update_traceback(struct s_heap *hptr, int inet)
void add_to_mod_list(float *fptr)
static void breadth_first_add_source_to_heap(int inet)
Definition at line 23 of file route_breadth_first.c.
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");
boolean feasible_routing(void)
static boolean breadth_first_route_net(int inet, float bend_cost)
int max_router_iterations
float first_iter_pres_fac
void pathfinder_update_cost(float pres_fac, float acc_fac)
#define HUGE_POSITIVE_FLOAT
struct s_trace ** trace_head
void pathfinder_update_one_cost(struct s_trace *route_segment_start, int add_or_sub, float pres_fac)
void reserve_locally_used_opins(float pres_fac, boolean rip_up_local_opins, t_ivec **clb_opins_used_locally)