diff options
Diffstat (limited to 'common/timing.h')
-rw-r--r-- | common/timing.h | 24 |
1 files changed, 10 insertions, 14 deletions
diff --git a/common/timing.h b/common/timing.h index b7880667..0ba1d479 100644 --- a/common/timing.h +++ b/common/timing.h @@ -131,6 +131,14 @@ struct TimingAnalyser void print_report(); float get_criticality(CellPortKey port) const { return ports.at(port).worst_crit; } + float get_setup_slack(CellPortKey port) const { return ports.at(port).worst_setup_slack; } + float get_domain_setup_slack(CellPortKey port) const + { + delay_t slack = std::numeric_limits<delay_t>::max(); + for (const auto &dp : ports.at(port).domain_pairs) + slack = std::min(slack, domain_pairs.at(dp.first).worst_setup_slack); + return slack; + } bool setup_only = false; @@ -219,8 +227,9 @@ struct TimingAnalyser std::vector<CellArc> cell_arcs; // routing delay into this port (input ports only) DelayPair route_delay; - // worst criticality across domain pairs + // worst criticality and slack across domain pairs float worst_crit; + delay_t worst_setup_slack, worst_hold_slack; }; struct PerDomain @@ -267,19 +276,6 @@ void assign_budget(Context *ctx, bool quiet = false); void timing_analysis(Context *ctx, bool slack_histogram = true, bool print_fmax = true, bool print_path = false, bool warn_on_failure = false); -// Data for the timing optimisation algorithm -struct NetCriticalityInfo -{ - // One each per user - std::vector<delay_t> slack; - std::vector<float> criticality; - unsigned max_path_length = 0; - delay_t cd_worst_slack = std::numeric_limits<delay_t>::max(); -}; - -typedef std::unordered_map<IdString, NetCriticalityInfo> NetCriticalityMap; -void get_criticalities(Context *ctx, NetCriticalityMap *net_crit); - NEXTPNR_NAMESPACE_END #endif |