mirror of
https://github.com/The-OpenROAD-Project/OpenSTA.git
synced 2026-09-07 03:43:29 +02:00
Delay compare ops
This commit is contained in:
+73
-41
@@ -35,19 +35,6 @@ initDelayConstants()
|
||||
delay_init_values[MinMax::maxIndex()] = MinMax::max()->initValue();
|
||||
}
|
||||
|
||||
const Delay &
|
||||
delayInitValue(const MinMax *min_max)
|
||||
{
|
||||
return delay_init_values[min_max->index()];
|
||||
}
|
||||
|
||||
bool
|
||||
delayIsInitValue(const Delay &delay,
|
||||
const MinMax *min_max)
|
||||
{
|
||||
return fuzzyEqual(delay, min_max->initValue());
|
||||
}
|
||||
|
||||
const char *
|
||||
delayAsString(const Delay &delay,
|
||||
const StaState *sta)
|
||||
@@ -73,45 +60,47 @@ delayAsString(const Delay &delay,
|
||||
return unit->asString(delay, digits);
|
||||
}
|
||||
|
||||
float
|
||||
delayAsFloat(const Delay &delay,
|
||||
const EarlyLate *,
|
||||
const StaState *)
|
||||
const Delay &
|
||||
delayInitValue(const MinMax *min_max)
|
||||
{
|
||||
return delay;
|
||||
}
|
||||
|
||||
float
|
||||
delaySigma2(const Delay &,
|
||||
const EarlyLate *)
|
||||
{
|
||||
return 0.0;
|
||||
return delay_init_values[min_max->index()];
|
||||
}
|
||||
|
||||
bool
|
||||
fuzzyGreater(const Delay &delay1,
|
||||
const Delay &delay2,
|
||||
const MinMax *min_max)
|
||||
delayIsInitValue(const Delay &delay,
|
||||
const MinMax *min_max)
|
||||
{
|
||||
if (min_max == MinMax::max())
|
||||
return fuzzyGreater(delay1, delay2);
|
||||
else
|
||||
return fuzzyLess(delay1, delay2);
|
||||
return fuzzyEqual(delay, min_max->initValue());
|
||||
}
|
||||
|
||||
bool
|
||||
fuzzyGreaterEqual(const Delay &delay1,
|
||||
const Delay &delay2,
|
||||
const MinMax *min_max)
|
||||
delayZero(const Delay &delay)
|
||||
{
|
||||
if (min_max == MinMax::max())
|
||||
return fuzzyGreaterEqual(delay1, delay2);
|
||||
else
|
||||
return fuzzyLessEqual(delay1, delay2);
|
||||
return fuzzyZero(delay);
|
||||
}
|
||||
|
||||
bool
|
||||
fuzzyLess(const Delay &delay1,
|
||||
delayInf(const Delay &delay)
|
||||
{
|
||||
return fuzzyInf(delay);
|
||||
}
|
||||
|
||||
bool
|
||||
delayEqual(const Delay &delay1,
|
||||
const Delay &delay2)
|
||||
{
|
||||
return fuzzyEqual(delay1, delay2);
|
||||
}
|
||||
|
||||
bool
|
||||
delayLess(const Delay &delay1,
|
||||
const Delay &delay2)
|
||||
{
|
||||
return fuzzyLess(delay1, delay2);
|
||||
}
|
||||
|
||||
bool
|
||||
delayLess(const Delay &delay1,
|
||||
const Delay &delay2,
|
||||
const MinMax *min_max)
|
||||
{
|
||||
@@ -122,7 +111,14 @@ fuzzyLess(const Delay &delay1,
|
||||
}
|
||||
|
||||
bool
|
||||
fuzzyLessEqual(const Delay &delay1,
|
||||
delayLessEqual(const Delay &delay1,
|
||||
const Delay &delay2)
|
||||
{
|
||||
return fuzzyLessEqual(delay1, delay2);
|
||||
}
|
||||
|
||||
bool
|
||||
delayLessEqual(const Delay &delay1,
|
||||
const Delay &delay2,
|
||||
const MinMax *min_max)
|
||||
{
|
||||
@@ -132,6 +128,42 @@ fuzzyLessEqual(const Delay &delay1,
|
||||
return fuzzyGreaterEqual(delay1, delay2);
|
||||
}
|
||||
|
||||
bool
|
||||
delayGreater(const Delay &delay1,
|
||||
const Delay &delay2)
|
||||
{
|
||||
return fuzzyGreater(delay1, delay2);
|
||||
}
|
||||
|
||||
bool
|
||||
delayGreater(const Delay &delay1,
|
||||
const Delay &delay2,
|
||||
const MinMax *min_max)
|
||||
{
|
||||
if (min_max == MinMax::max())
|
||||
return fuzzyGreater(delay1, delay2);
|
||||
else
|
||||
return fuzzyLess(delay1, delay2);
|
||||
}
|
||||
|
||||
bool
|
||||
delayGreaterEqual(const Delay &delay1,
|
||||
const Delay &delay2)
|
||||
{
|
||||
return fuzzyGreaterEqual(delay1, delay2);
|
||||
}
|
||||
|
||||
bool
|
||||
delayGreaterEqual(const Delay &delay1,
|
||||
const Delay &delay2,
|
||||
const MinMax *min_max)
|
||||
{
|
||||
if (min_max == MinMax::max())
|
||||
return fuzzyGreaterEqual(delay1, delay2);
|
||||
else
|
||||
return fuzzyLessEqual(delay1, delay2);
|
||||
}
|
||||
|
||||
Delay
|
||||
delayRemove(const Delay &delay1,
|
||||
const Delay &delay2)
|
||||
|
||||
+32
-56
@@ -164,31 +164,7 @@ Delay::operator-=(const Delay &delay)
|
||||
bool
|
||||
Delay::operator==(const Delay &delay) const
|
||||
{
|
||||
return fuzzyEqual(*this, delay);
|
||||
}
|
||||
|
||||
bool
|
||||
Delay::operator>(const Delay &delay) const
|
||||
{
|
||||
return fuzzyGreater(*this, delay);
|
||||
}
|
||||
|
||||
bool
|
||||
Delay::operator>=(const Delay &delay) const
|
||||
{
|
||||
return fuzzyGreaterEqual(*this, delay);
|
||||
}
|
||||
|
||||
bool
|
||||
Delay::operator<(const Delay &delay) const
|
||||
{
|
||||
return fuzzyLess(*this, delay);
|
||||
}
|
||||
|
||||
bool
|
||||
Delay::operator<=(const Delay &delay) const
|
||||
{
|
||||
return fuzzyLessEqual(*this, delay);
|
||||
return delayEqual(*this, delay);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////
|
||||
@@ -218,20 +194,20 @@ delayIsInitValue(const Delay &delay,
|
||||
}
|
||||
|
||||
bool
|
||||
fuzzyZero(const Delay &delay)
|
||||
delayZero(const Delay &delay)
|
||||
{
|
||||
return fuzzyZero(delay.mean())
|
||||
&& fuzzyZero(delay.sigma2());
|
||||
}
|
||||
|
||||
bool
|
||||
fuzzyInf(const Delay &delay)
|
||||
delayInf(const Delay &delay)
|
||||
{
|
||||
return fuzzyInf(delay.mean());
|
||||
}
|
||||
|
||||
bool
|
||||
fuzzyEqual(const Delay &delay1,
|
||||
delayEqual(const Delay &delay1,
|
||||
const Delay &delay2)
|
||||
{
|
||||
return fuzzyEqual(delay1.mean(), delay2.mean())
|
||||
@@ -239,7 +215,7 @@ fuzzyEqual(const Delay &delay1,
|
||||
}
|
||||
|
||||
bool
|
||||
fuzzyLess(const Delay &delay1,
|
||||
delayLess(const Delay &delay1,
|
||||
const Delay &delay2)
|
||||
{
|
||||
Sta *sta = Sta::sta();
|
||||
@@ -248,7 +224,7 @@ fuzzyLess(const Delay &delay1,
|
||||
}
|
||||
|
||||
bool
|
||||
fuzzyLess(const Delay &delay1,
|
||||
delayLess(const Delay &delay1,
|
||||
float delay2)
|
||||
{
|
||||
Sta *sta = Sta::sta();
|
||||
@@ -257,7 +233,18 @@ fuzzyLess(const Delay &delay1,
|
||||
}
|
||||
|
||||
bool
|
||||
fuzzyLessEqual(const Delay &delay1,
|
||||
delayLess(const Delay &delay1,
|
||||
const Delay &delay2,
|
||||
const MinMax *min_max)
|
||||
{
|
||||
if (min_max == MinMax::max())
|
||||
return delayLess(delay1, delay2);
|
||||
else
|
||||
return delayGreater(delay1, delay2);
|
||||
}
|
||||
|
||||
bool
|
||||
delayLessEqual(const Delay &delay1,
|
||||
const Delay &delay2)
|
||||
{
|
||||
Sta *sta = Sta::sta();
|
||||
@@ -266,7 +253,7 @@ fuzzyLessEqual(const Delay &delay1,
|
||||
}
|
||||
|
||||
bool
|
||||
fuzzyLessEqual(const Delay &delay1,
|
||||
delayLessEqual(const Delay &delay1,
|
||||
float delay2)
|
||||
{
|
||||
Sta *sta = Sta::sta();
|
||||
@@ -275,18 +262,18 @@ fuzzyLessEqual(const Delay &delay1,
|
||||
}
|
||||
|
||||
bool
|
||||
fuzzyLessEqual(const Delay &delay1,
|
||||
delayLessEqual(const Delay &delay1,
|
||||
const Delay &delay2,
|
||||
const MinMax *min_max)
|
||||
{
|
||||
if (min_max == MinMax::max())
|
||||
return fuzzyLessEqual(delay1, delay2);
|
||||
return delayLessEqual(delay1, delay2);
|
||||
else
|
||||
return fuzzyGreaterEqual(delay1, delay2);
|
||||
return delayGreaterEqual(delay1, delay2);
|
||||
}
|
||||
|
||||
bool
|
||||
fuzzyGreater(const Delay &delay1,
|
||||
delayGreater(const Delay &delay1,
|
||||
const Delay &delay2)
|
||||
{
|
||||
Sta *sta = Sta::sta();
|
||||
@@ -295,7 +282,7 @@ fuzzyGreater(const Delay &delay1,
|
||||
}
|
||||
|
||||
bool
|
||||
fuzzyGreater(const Delay &delay1,
|
||||
delayGreater(const Delay &delay1,
|
||||
float delay2)
|
||||
{
|
||||
Sta *sta = Sta::sta();
|
||||
@@ -304,7 +291,7 @@ fuzzyGreater(const Delay &delay1,
|
||||
}
|
||||
|
||||
bool
|
||||
fuzzyGreaterEqual(const Delay &delay1,
|
||||
delayGreaterEqual(const Delay &delay1,
|
||||
const Delay &delay2)
|
||||
{
|
||||
Sta *sta = Sta::sta();
|
||||
@@ -313,7 +300,7 @@ fuzzyGreaterEqual(const Delay &delay1,
|
||||
}
|
||||
|
||||
bool
|
||||
fuzzyGreaterEqual(const Delay &delay1,
|
||||
delayGreaterEqual(const Delay &delay1,
|
||||
float delay2)
|
||||
{
|
||||
Sta *sta = Sta::sta();
|
||||
@@ -322,36 +309,25 @@ fuzzyGreaterEqual(const Delay &delay1,
|
||||
}
|
||||
|
||||
bool
|
||||
fuzzyGreater(const Delay &delay1,
|
||||
delayGreater(const Delay &delay1,
|
||||
const Delay &delay2,
|
||||
const MinMax *min_max)
|
||||
{
|
||||
if (min_max == MinMax::max())
|
||||
return fuzzyGreater(delay1, delay2);
|
||||
return delayGreater(delay1, delay2);
|
||||
else
|
||||
return fuzzyLess(delay1, delay2);
|
||||
return delayLess(delay1, delay2);
|
||||
}
|
||||
|
||||
bool
|
||||
fuzzyGreaterEqual(const Delay &delay1,
|
||||
delayGreaterEqual(const Delay &delay1,
|
||||
const Delay &delay2,
|
||||
const MinMax *min_max)
|
||||
{
|
||||
if (min_max == MinMax::max())
|
||||
return fuzzyGreaterEqual(delay1, delay2);
|
||||
return delayGreaterEqual(delay1, delay2);
|
||||
else
|
||||
return fuzzyLessEqual(delay1, delay2);
|
||||
}
|
||||
|
||||
bool
|
||||
fuzzyLess(const Delay &delay1,
|
||||
const Delay &delay2,
|
||||
const MinMax *min_max)
|
||||
{
|
||||
if (min_max == MinMax::max())
|
||||
return fuzzyLess(delay1, delay2);
|
||||
else
|
||||
return fuzzyGreater(delay1, delay2);
|
||||
return delayLessEqual(delay1, delay2);
|
||||
}
|
||||
|
||||
float
|
||||
|
||||
+38
-60
@@ -24,6 +24,8 @@
|
||||
#include "Fuzzy.hh"
|
||||
#include "Units.hh"
|
||||
#include "StaState.hh"
|
||||
// temporary hack
|
||||
#include "Sta.hh"
|
||||
|
||||
// SSTA compilation.
|
||||
#if (SSTA == 2)
|
||||
@@ -187,30 +189,6 @@ Delay::operator==(const Delay &delay) const
|
||||
&& sigma2_[late_index] == delay.sigma2_[early_index];
|
||||
}
|
||||
|
||||
bool
|
||||
Delay::operator>(const Delay &delay) const
|
||||
{
|
||||
return mean_ + sqrt(sigma2_late_) > delay.mean_ + sqrt(delay.sigma2_late_);
|
||||
}
|
||||
|
||||
bool
|
||||
Delay::operator>=(const Delay &delay) const
|
||||
{
|
||||
return mean_ + sqrt(sigma2_late_) >= delay.mean_ + sqrt(delay.sigma2_late_);
|
||||
}
|
||||
|
||||
bool
|
||||
Delay::operator<(const Delay &delay) const
|
||||
{
|
||||
return mean_ - sqrt(sigma2_early_) < delay.mean_ - sqrt(delay.sigma2_early_);
|
||||
}
|
||||
|
||||
bool
|
||||
Delay::operator<=(const Delay &delay) const
|
||||
{
|
||||
return mean_ - sqrt(sigma2_early_) <= delay.mean_ - sqrt(delay.sigma2_early_);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////
|
||||
|
||||
Delay
|
||||
@@ -234,12 +212,12 @@ delayIsInitValue(const Delay &delay,
|
||||
const MinMax *min_max)
|
||||
{
|
||||
return fuzzyEqual(delay.mean(), min_max->initValue())
|
||||
&& delay.sigma2Early() == 0.0
|
||||
&& delay.sigma2Late() == 0.0;
|
||||
&& fuzzyZero(delay.sigma2Early())
|
||||
&& fuzzyZero(delay.sigma2Late());
|
||||
}
|
||||
|
||||
bool
|
||||
fuzzyZero(const Delay &delay)
|
||||
delayZero(const Delay &delay)
|
||||
{
|
||||
return fuzzyZero(delay.mean())
|
||||
&& fuzzyZero(delay.sigma2Early())
|
||||
@@ -247,13 +225,13 @@ fuzzyZero(const Delay &delay)
|
||||
}
|
||||
|
||||
bool
|
||||
fuzzyInf(const Delay &delay)
|
||||
delayInf(const Delay &delay)
|
||||
{
|
||||
return fuzzyInf(delay.mean());
|
||||
}
|
||||
|
||||
bool
|
||||
fuzzyEqual(const Delay &delay1,
|
||||
delayEqual(const Delay &delay1,
|
||||
const Delay &delay2)
|
||||
{
|
||||
return fuzzyEqual(delay1.mean(), delay2.mean())
|
||||
@@ -262,7 +240,7 @@ fuzzyEqual(const Delay &delay1,
|
||||
}
|
||||
|
||||
bool
|
||||
fuzzyLess(const Delay &delay1,
|
||||
delayLess(const Delay &delay1,
|
||||
const Delay &delay2)
|
||||
{
|
||||
Sta *sta = Sta::sta();
|
||||
@@ -271,7 +249,7 @@ fuzzyLess(const Delay &delay1,
|
||||
}
|
||||
|
||||
bool
|
||||
fuzzyLess(const Delay &delay1,
|
||||
delayLess(const Delay &delay1,
|
||||
float delay2)
|
||||
{
|
||||
Sta *sta = Sta::sta();
|
||||
@@ -280,7 +258,18 @@ fuzzyLess(const Delay &delay1,
|
||||
}
|
||||
|
||||
bool
|
||||
fuzzyLessEqual(const Delay &delay1,
|
||||
delayLess(const Delay &delay1,
|
||||
const Delay &delay2,
|
||||
const MinMax *min_max)
|
||||
{
|
||||
if (min_max == MinMax::max())
|
||||
return delayLess(delay1, delay2);
|
||||
else
|
||||
return delayGreater(delay1, delay2);
|
||||
}
|
||||
|
||||
bool
|
||||
delayLessEqual(const Delay &delay1,
|
||||
const Delay &delay2)
|
||||
{
|
||||
Sta *sta = Sta::sta();
|
||||
@@ -289,8 +278,8 @@ fuzzyLessEqual(const Delay &delay1,
|
||||
}
|
||||
|
||||
bool
|
||||
fuzzyLessEqual(const Delay &delay1,
|
||||
float delay2)
|
||||
delayLessEqual(const Delay &delay1,
|
||||
float delay2)
|
||||
{
|
||||
Sta *sta = Sta::sta();
|
||||
return fuzzyLessEqual(delayAsFloat(delay1, EarlyLate::early(), sta),
|
||||
@@ -298,18 +287,18 @@ fuzzyLessEqual(const Delay &delay1,
|
||||
}
|
||||
|
||||
bool
|
||||
fuzzyLessEqual(const Delay &delay1,
|
||||
delayLessEqual(const Delay &delay1,
|
||||
const Delay &delay2,
|
||||
const MinMax *min_max)
|
||||
{
|
||||
if (min_max == MinMax::max())
|
||||
return fuzzyLessEqual(delay1, delay2);
|
||||
return delayLessEqual(delay1, delay2);
|
||||
else
|
||||
return fuzzyGreaterEqual(delay1, delay2);
|
||||
return delayGreaterEqual(delay1, delay2);
|
||||
}
|
||||
|
||||
bool
|
||||
fuzzyGreater(const Delay &delay1,
|
||||
delayGreater(const Delay &delay1,
|
||||
const Delay &delay2)
|
||||
{
|
||||
Sta *sta = Sta::sta();
|
||||
@@ -318,7 +307,7 @@ fuzzyGreater(const Delay &delay1,
|
||||
}
|
||||
|
||||
bool
|
||||
fuzzyGreater(const Delay &delay1,
|
||||
delayGreater(const Delay &delay1,
|
||||
float delay2)
|
||||
{
|
||||
Sta *sta = Sta::sta();
|
||||
@@ -327,54 +316,43 @@ fuzzyGreater(const Delay &delay1,
|
||||
}
|
||||
|
||||
bool
|
||||
fuzzyGreaterEqual(const Delay &delay1,
|
||||
delayGreaterEqual(const Delay &delay1,
|
||||
const Delay &delay2)
|
||||
{
|
||||
Sta *sta = Sta::sta();
|
||||
return fuzzyGreaterEqual(delayAsFloat(delay1, EarlyLate::late(), sta),
|
||||
delay2);
|
||||
delayAsFloat(delay2, EarlyLate::late(), sta));
|
||||
}
|
||||
|
||||
bool
|
||||
fuzzyGreaterEqual(const Delay &delay1,
|
||||
delayGreaterEqual(const Delay &delay1,
|
||||
float delay2)
|
||||
{
|
||||
Sta *sta = Sta::sta();
|
||||
return fuzzyGreaterEqual(delayAsFloat(delay1, EarlyLate::late(), sta),
|
||||
return delayGreaterEqual(delayAsFloat(delay1, EarlyLate::late(), sta),
|
||||
delay2);
|
||||
}
|
||||
|
||||
bool
|
||||
fuzzyGreater(const Delay &delay1,
|
||||
delayGreater(const Delay &delay1,
|
||||
const Delay &delay2,
|
||||
const MinMax *min_max)
|
||||
{
|
||||
if (min_max == MinMax::max())
|
||||
return fuzzyGreater(delay1, delay2);
|
||||
return delayGreater(delay1, delay2);
|
||||
else
|
||||
return fuzzyLess(delay1, delay2);
|
||||
return delayLess(delay1, delay2);
|
||||
}
|
||||
|
||||
bool
|
||||
fuzzyGreaterEqual(const Delay &delay1,
|
||||
delayGreaterEqual(const Delay &delay1,
|
||||
const Delay &delay2,
|
||||
const MinMax *min_max)
|
||||
{
|
||||
if (min_max == MinMax::max())
|
||||
return fuzzyGreaterEqual(delay1, delay2);
|
||||
return delayGreaterEqual(delay1, delay2);
|
||||
else
|
||||
return fuzzyLessEqual(delay1, delay2);
|
||||
}
|
||||
|
||||
bool
|
||||
fuzzyLess(const Delay &delay1,
|
||||
const Delay &delay2,
|
||||
const MinMax *min_max)
|
||||
{
|
||||
if (min_max == MinMax::max())
|
||||
return fuzzyLess(delay1, delay2);
|
||||
else
|
||||
return fuzzyGreater(delay1, delay2);
|
||||
return delayLessEqual(delay1, delay2);
|
||||
}
|
||||
|
||||
float
|
||||
|
||||
Reference in New Issue
Block a user