blob: 1e031f2795ea113714aaf977cad1ca5e86d4ab07 [file] [log] [blame]
#pragma once
bool try_timing_driven_route(struct s_router_opts router_opts,
float **net_delay, t_slack * slacks, t_ivec ** clb_opins_used_locally,
bool timing_analysis_enabled, const t_timing_inf &timing_inf);
bool try_timing_driven_route_net(int inet, int itry, float pres_fac,
struct s_router_opts router_opts,
float* pin_criticality, int* sink_order,
t_rt_node** rt_node_of_sink, float** net_delay, t_slack* slacks);
// this is used in setup_max_min_criticality() in profile_lookahead.c
bool should_route_net(int inet);
bool timing_driven_route_net(int inet, int itry, float pres_fac, float max_criticality,
float criticality_exp, float astar_fac, float bend_cost,
float *pin_criticality, int *sink_order, t_rt_node ** rt_node_of_sink,
float *net_delay, t_slack * slacks, bool lookahead_eval);
/*
* NOTE:
* Suggest using a timing_driven_route_structs struct (below) . Memory is managed for you.
*/
void alloc_timing_driven_route_structs(float **pin_criticality_ptr,
int **sink_order_ptr, t_rt_node *** rt_node_of_sink_ptr);
void free_timing_driven_route_structs(float *pin_criticality, int *sink_order,
t_rt_node ** rt_node_of_sink);
struct timing_driven_route_structs {
float* pin_criticality;
int* sink_order;
t_rt_node** rt_node_of_sink;
timing_driven_route_structs();
~timing_driven_route_structs();
};
float get_timing_driven_future_Tdel(int inode, int target_node, float *C_downstream, float *basecost);
float get_timing_driven_cong_penalty(int inode, int target_node);