#ifndef CLUSTER_LEGALITY_H #define CLUSTER_LEGALITY_H /* Legalizes routing for a cluster */ void alloc_and_load_cluster_legality_checker(void); void alloc_and_load_legalizer_for_cluster(INP t_block* clb, INP int clb_index, INP const t_arch *arch); void free_legalizer_for_cluster(INP t_block* clb, boolean free_local_rr_graph); void free_cluster_legality_checker(void); void reset_legalizer_for_cluster(t_block *clb); /* order of use: 1. save cluster 2. Add blocks. 3. route 4. save if successful, undo if not successful */ void save_and_reset_routing_cluster(void); void setup_intracluster_routing_for_molecule(INP t_pack_molecule *molecule, INOUTP t_pb_graph_node **primitives_list); boolean try_breadth_first_route_cluster(void); void restore_routing_cluster(void); void save_cluster_solution(void); boolean is_pin_open(int i); void set_pb_graph_mode(t_pb_graph_node *pb_graph_node, int mode, int isOn); void alloc_and_load_rr_graph_for_pb_graph_node(INP t_pb_graph_node *pb_graph_node, INP const t_arch* arch, int mode); /* Power user options */ void reload_ext_net_rr_terminal_cluster(void); void force_post_place_route_cb_input_pins(int iblock); void setup_intracluster_routing_for_logical_block(INP int iblock, INP t_pb_graph_node *primitive); #endif