| #ifndef VRP_TIMING_GRAPH_NAME_RESOLVER_H |
| #define VRP_TIMING_GRAPH_NAME_RESOLVER_H |
| |
| #include "tatum/TimingGraphNameResolver.hpp" |
| #include "atom_netlist_fwd.h" |
| #include "atom_lookup.h" |
| #include "AnalysisDelayCalculator.h" |
| #include "route_tree_timing.h" |
| |
| class VprTimingGraphResolver : public tatum::TimingGraphNameResolver { |
| public: |
| VprTimingGraphResolver(const AtomNetlist& netlist, const AtomLookup& netlist_lookup, const tatum::TimingGraph& timing_graph, const AnalysisDelayCalculator& delay_calc); |
| |
| std::string node_name(tatum::NodeId node) const override; |
| std::string node_type_name(tatum::NodeId node) const override; |
| |
| tatum::EdgeDelayBreakdown edge_delay_breakdown(tatum::EdgeId edge, tatum::DelayType delay_type) const override; |
| |
| void set_detail_level(e_timing_report_detail report_detail); |
| |
| private: |
| e_timing_report_detail detail_level() const; |
| std::vector<tatum::DelayComponent> interconnect_delay_breakdown(tatum::EdgeId edge, DelayType) const; |
| |
| void get_detailed_interconnect_components(std::vector<tatum::DelayComponent>& components, ClusterNetId net_id, ClusterPinId sink_pin) const; |
| void get_detailed_interconnect_components_helper(std::vector<tatum::DelayComponent>& components, t_rt_node* node) const; |
| |
| const AtomNetlist& netlist_; |
| const AtomLookup& netlist_lookup_; |
| const tatum::TimingGraph& timing_graph_; |
| const AnalysisDelayCalculator& delay_calc_; |
| e_timing_report_detail detail_level_ = e_timing_report_detail::NETLIST; |
| }; |
| |
| #endif |