blob: c84a2d736de3de1e96681d284badc7e907045e38 [file] [log] [blame]
#ifndef VPR_CLB_DELAY_CALC_H
#define VPR_CLB_DELAY_CALC_H
#include "DelayType.h"
//Delay Calculator for routing internal to a clustered logic block
class ClbDelayCalc {
public:
ClbDelayCalc();
//Delay from a CLB input (driven outside the CLB) to specified internal sink pin
float clb_input_to_internal_sink_delay(const ClusterBlockId block_id, const int pin_index, int internal_sink_pin, DelayType delay_type) const;
//Delay from an internal driver to the CLB's output pin
float internal_src_to_clb_output_delay(const ClusterBlockId block_id, const int pin_index, int internal_src_pin, DelayType delay_type) const;
//Delay from an internal driver to an internal sink within the same CLB
float internal_src_to_internal_sink_delay(const ClusterBlockId clb, int internal_src_pin, int internal_sink_pin, DelayType delay_type) const;
private:
float trace_delay(ClusterBlockId clb, int src_pb_route_pin, int sink_pb_route_pin, DelayType delay_type) const;
float pb_route_delay(ClusterBlockId clb, int pb_route_idx, DelayType delay_type) const;
const t_pb_graph_edge* find_pb_graph_edge(ClusterBlockId clb, int pb_route_idx) const;
const t_pb_graph_edge* find_pb_graph_edge(const t_pb_graph_pin* driver, const t_pb_graph_pin* sink) const;
private:
IntraLbPbPinLookup intra_lb_pb_pin_lookup_;
};
#include "clb_delay_calc.inl"
#endif