blob: 8e6745b7cb1335d1de3c1e1431475cb88cce88c0 [file] [log] [blame]
#include <memory>
#include "tatum/TimingGraphFwd.hpp"
#include "atom_netlist_fwd.h"
#include "atom_lookup.h"
class TimingGraphBuilder {
public:
TimingGraphBuilder(const AtomNetlist& netlist,
AtomLookup& netlist_lookup);
std::unique_ptr<tatum::TimingGraph> timing_graph(bool allow_dangling_combinational_nodes);
private:
void build(bool allow_dangling_combinational_nodes);
void opt_memory_layout();
void add_io_to_timing_graph(const AtomBlockId blk);
void add_block_to_timing_graph(const AtomBlockId blk);
void add_net_to_timing_graph(const AtomNetId net);
void fix_comb_loops();
tatum::EdgeId find_scc_edge_to_break(std::vector<tatum::NodeId> scc);
void remap_ids(const tatum::GraphIdMaps& id_mapping);
const t_pb_graph_pin* find_pb_graph_pin(const AtomPinId pin);
const t_pb_graph_pin* find_associated_clock_pin(const AtomPinId pin);
void mark_clustering_net_delays(float inter_cluster_net_delay);
bool is_netlist_clock_source(const AtomPinId pin) const;
private:
std::unique_ptr<tatum::TimingGraph> tg_;
const AtomNetlist& netlist_;
AtomLookup& netlist_lookup_;
std::set<AtomPinId> netlist_clock_drivers_;
};