aboutsummaryrefslogtreecommitdiffstats
path: root/common/timing.h
diff options
context:
space:
mode:
Diffstat (limited to 'common/timing.h')
-rw-r--r--common/timing.h24
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