blob: 9763381d9a8e926229fabc570d36d64855a3401d [file] [log] [blame]
/*
Intra-logic block router determines if a candidate packing solution (or intermediate solution) can route.
Author: Jason Luu
Date: July 22, 2013
*/
#ifndef CLUSTER_ROUTER_H
#define CLUSTER_ROUTER_H
#include <vector>
#include "atom_netlist_fwd.h"
#include "pack_types.h"
/* Constructors/Destructors */
t_lb_router_data *alloc_and_load_router_data(vector<t_lb_type_rr_node> *lb_type_graph, t_type_ptr type);
void free_router_data(t_lb_router_data *router_data);
void free_intra_lb_nets(vector <t_intra_lb_net> *intra_lb_nets);
/* Routing Functions */
void add_atom_as_target(t_lb_router_data *router_data, const AtomBlockId blk_id);
void remove_atom_from_target(t_lb_router_data *router_data, const AtomBlockId blk_id);
void set_reset_pb_modes(t_lb_router_data *router_data, const t_pb *pb, const bool set);
bool try_intra_lb_route(t_lb_router_data *router_data, bool debug_clustering);
/* Accessor Functions */
t_pb_route *alloc_and_load_pb_route(const vector <t_intra_lb_net> *intra_lb_nets, t_pb_graph_node *pb_graph_head);
void free_pb_route(t_pb_route *free_pb_route);
#endif