diff options
author | gatecat <gatecat@ds0.me> | 2021-02-17 11:38:39 +0000 |
---|---|---|
committer | gatecat <gatecat@ds0.me> | 2021-02-19 10:58:16 +0000 |
commit | 8376db94a7519406444988be3628a4dadfb8d742 (patch) | |
tree | 1ec9844a2dea31e648d15605a9345e09b0f4e822 | |
parent | 5dcb59b13decab276ac736b0b06b4ccebcf83f62 (diff) | |
download | nextpnr-8376db94a7519406444988be3628a4dadfb8d742.tar.gz nextpnr-8376db94a7519406444988be3628a4dadfb8d742.tar.bz2 nextpnr-8376db94a7519406444988be3628a4dadfb8d742.zip |
Add DelayPair and DelayQuad structures
Signed-off-by: gatecat <gatecat@ds0.me>
-rw-r--r-- | common/nextpnr.h | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/common/nextpnr.h b/common/nextpnr.h index f2bcb90d..0a501910 100644 --- a/common/nextpnr.h +++ b/common/nextpnr.h @@ -556,6 +556,41 @@ struct Property inline bool operator==(const Property &a, const Property &b) { return a.is_string == b.is_string && a.str == b.str; } inline bool operator!=(const Property &a, const Property &b) { return a.is_string != b.is_string || a.str != b.str; } +// minimum and maximum delay +struct DelayPair +{ + DelayPair(){}; + explicit DelayPair(delay_t delay) : min_delay(delay), max_delay(delay){}; + DelayPair(delay_t min_delay, delay_t max_delay) : min_delay(min_delay), max_delay(max_delay){}; + delay_t minDelay() const { return min_delay; }; + delay_t maxDelay() const { return max_delay; }; + delay_t min_delay, max_delay; + DelayPair operator+(const DelayPair &other) const + { + return {min_delay + other.min_delay, max_delay + other.max_delay}; + } +}; + +// four-quadrant, min and max rise and fall delay +struct DelayQuad +{ + DelayPair rise, fall; + explicit DelayQuad(delay_t delay) : rise(delay), fall(delay){}; + DelayQuad(delay_t min_delay, delay_t max_delay) : rise(min_delay, max_delay), fall(min_delay, max_delay){}; + DelayQuad(DelayPair rise, DelayPair fall) : rise(rise), fall(fall){}; + DelayQuad(delay_t min_rise, delay_t max_rise, delay_t min_fall, delay_t max_fall) + : rise(min_rise, max_rise), fall(min_fall, max_fall){}; + + delay_t minRiseDelay() const { return rise.minDelay(); }; + delay_t maxRiseDelay() const { return rise.maxDelay(); }; + delay_t minFallDelay() const { return fall.minDelay(); }; + delay_t maxFallDelay() const { return fall.maxDelay(); }; + delay_t minDelay() const { return std::min<delay_t>(rise.minDelay(), fall.minDelay()); }; + delay_t maxDelay() const { return std::max<delay_t>(rise.maxDelay(), fall.maxDelay()); }; + + DelayQuad operator+(const DelayQuad &other) const { return {rise + other.rise, fall + other.fall}; } +}; + struct ClockConstraint; struct NetInfo : ArchNetInfo |