ClkLatency use Delay

Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2024-04-13 21:28:06 -07:00
parent 057a5dd283
commit b02532aea1
3 changed files with 32 additions and 31 deletions

View File

@ -31,19 +31,19 @@ public:
const RiseFall *end_rf, const RiseFall *end_rf,
const MinMax *min_max, const MinMax *min_max,
// Return values. // Return values.
float &insertion, Delay &insertion,
float &delay, Delay &delay,
float &lib_clk_delay, float &lib_clk_delay,
float &latency, Delay &latency,
PathVertex &path, PathVertex &path,
bool &exists) const; bool &exists) const;
void latency(const RiseFall *src_rf, void latency(const RiseFall *src_rf,
const RiseFall *end_rf, const RiseFall *end_rf,
const MinMax *min_max, const MinMax *min_max,
// Return values. // Return values.
float &delay, Delay &delay,
bool &exists) const; bool &exists) const;
static float latency(PathVertex *clk_path, static Delay latency(PathVertex *clk_path,
StaState *sta); StaState *sta);
void setLatency(const RiseFall *src_rf, void setLatency(const RiseFall *src_rf,
const RiseFall *end_rf, const RiseFall *end_rf,
@ -59,10 +59,10 @@ private:
static float clkTreeDelay(PathVertex *clk_path, static float clkTreeDelay(PathVertex *clk_path,
StaState *sta); StaState *sta);
float insertion_[RiseFall::index_count][RiseFall::index_count][MinMax::index_count]; Delay insertion_[RiseFall::index_count][RiseFall::index_count][MinMax::index_count];
float delay_[RiseFall::index_count][RiseFall::index_count][MinMax::index_count]; Delay delay_[RiseFall::index_count][RiseFall::index_count][MinMax::index_count];
float lib_clk_delay_[RiseFall::index_count][RiseFall::index_count][MinMax::index_count]; float lib_clk_delay_[RiseFall::index_count][RiseFall::index_count][MinMax::index_count];
float latency_[RiseFall::index_count][RiseFall::index_count][MinMax::index_count]; Delay latency_[RiseFall::index_count][RiseFall::index_count][MinMax::index_count];
PathVertex path_[RiseFall::index_count][RiseFall::index_count][MinMax::index_count]; PathVertex path_[RiseFall::index_count][RiseFall::index_count][MinMax::index_count];
bool exists_[RiseFall::index_count][RiseFall::index_count][MinMax::index_count]; bool exists_[RiseFall::index_count][RiseFall::index_count][MinMax::index_count];
}; };

View File

@ -78,19 +78,19 @@ ClkLatency::reportClkLatency(const Clock *clk,
for (const RiseFall *src_rf : RiseFall::range()) { for (const RiseFall *src_rf : RiseFall::range()) {
for (const RiseFall *end_rf : RiseFall::range()) { for (const RiseFall *end_rf : RiseFall::range()) {
PathVertex path_min; PathVertex path_min;
float insertion_min; Delay insertion_min;
float delay_min; Delay delay_min;
float lib_clk_delay_min; float lib_clk_delay_min;
float latency_min; Delay latency_min;
bool exists_min; bool exists_min;
clk_delays.delay(src_rf, end_rf, MinMax::min(), insertion_min, clk_delays.delay(src_rf, end_rf, MinMax::min(), insertion_min,
delay_min, lib_clk_delay_min, latency_min, delay_min, lib_clk_delay_min, latency_min,
path_min, exists_min); path_min, exists_min);
PathVertex path_max; PathVertex path_max;
float insertion_max; Delay insertion_max;
float delay_max; Delay delay_max;
float lib_clk_delay_max; float lib_clk_delay_max;
float latency_max; Delay latency_max;
bool exists_max; bool exists_max;
clk_delays.delay(src_rf, end_rf, MinMax::max(), insertion_max, clk_delays.delay(src_rf, end_rf, MinMax::max(), insertion_max,
delay_max, lib_clk_delay_max, latency_max, delay_max, lib_clk_delay_max, latency_max,
@ -102,15 +102,15 @@ ClkLatency::reportClkLatency(const Clock *clk,
report_->reportLine(" min max"); report_->reportLine(" min max");
report_->reportLine("%7s %7s source latency", report_->reportLine("%7s %7s source latency",
time_unit->asString(insertion_min, digits), delayAsString(insertion_min, this, digits),
time_unit->asString(insertion_max, digits)); delayAsString(insertion_max, this, digits));
report_->reportLine("%7s %7s network latency %s", report_->reportLine("%7s %7s network latency %s",
time_unit->asString(delay_min, digits), delayAsString(delay_min, this, digits),
"", "",
sdc_network_->pathName(path_min.pin(this))); sdc_network_->pathName(path_min.pin(this)));
report_->reportLine("%7s %7s network latency %s", report_->reportLine("%7s %7s network latency %s",
"", "",
time_unit->asString(delay_max, digits), delayAsString(delay_max, this, digits),
sdc_network_->pathName(path_max.pin(this))); sdc_network_->pathName(path_max.pin(this)));
if (lib_clk_delay_min != 0.0 if (lib_clk_delay_min != 0.0
|| lib_clk_delay_max != 0.0) || lib_clk_delay_max != 0.0)
@ -119,11 +119,11 @@ ClkLatency::reportClkLatency(const Clock *clk,
time_unit->asString(lib_clk_delay_max, digits)); time_unit->asString(lib_clk_delay_max, digits));
report_->reportLine("---------------"); report_->reportLine("---------------");
report_->reportLine("%7s %7s latency", report_->reportLine("%7s %7s latency",
time_unit->asString(latency_min, digits), delayAsString(latency_min, this, digits),
time_unit->asString(latency_max, digits)); delayAsString(latency_max, this, digits));
float skew = latency_max - latency_min; Delay skew = latency_max - latency_min;
report_->reportLine(" %7s skew", report_->reportLine(" %7s skew",
time_unit->asString(skew, digits)); delayAsString(skew, this, digits));
report_->reportBlankLine(); report_->reportBlankLine();
} }
} }
@ -154,11 +154,11 @@ ClkLatency::findClkDelays(ConstClockSeq clks,
const RiseFall *clk_rf = path_clk_edge->transition(); const RiseFall *clk_rf = path_clk_edge->transition();
const MinMax *min_max = path->minMax(this); const MinMax *min_max = path->minMax(this);
const RiseFall *end_rf = path->transition(this); const RiseFall *end_rf = path->transition(this);
float latency = ClkDelays::latency(path, this); Delay latency = ClkDelays::latency(path, this);
float clk_latency; Delay clk_latency;
bool exists; bool exists;
clk_delays.latency(clk_rf, end_rf, min_max, clk_latency, exists); clk_delays.latency(clk_rf, end_rf, min_max, clk_latency, exists);
if (!exists || min_max->compare(latency, clk_latency)) if (!exists || delayGreater(latency, clk_latency, min_max, this))
clk_delays.setLatency(clk_rf, end_rf, min_max, path, this); clk_delays.setLatency(clk_rf, end_rf, min_max, path, this);
} }
} }
@ -189,10 +189,10 @@ ClkDelays::delay(const RiseFall *src_rf,
const RiseFall *end_rf, const RiseFall *end_rf,
const MinMax *min_max, const MinMax *min_max,
// Return values. // Return values.
float &insertion, Delay &insertion,
float &delay, Delay &delay,
float &lib_clk_delay, float &lib_clk_delay,
float &latency, Delay &latency,
PathVertex &path, PathVertex &path,
bool &exists) const bool &exists) const
{ {
@ -212,7 +212,7 @@ ClkDelays::latency(const RiseFall *src_rf,
const RiseFall *end_rf, const RiseFall *end_rf,
const MinMax *min_max, const MinMax *min_max,
// Return values. // Return values.
float &latency, Delay &latency,
bool &exists) const bool &exists) const
{ {
int src_rf_index = src_rf->index(); int src_rf_index = src_rf->index();
@ -249,7 +249,7 @@ ClkDelays::setLatency(const RiseFall *src_rf,
exists_[src_rf_index][end_rf_index][mm_index] = true; exists_[src_rf_index][end_rf_index][mm_index] = true;
} }
float Delay
ClkDelays::latency(PathVertex *clk_path, ClkDelays::latency(PathVertex *clk_path,
StaState *sta) StaState *sta)
{ {

View File

@ -570,7 +570,8 @@ MakeTimingModel::makeClkTreePaths(LibertyPort *lib_port,
? clk_rf ? clk_rf
: clk_rf->opposite(); : clk_rf->opposite();
PathVertex clk_path; PathVertex clk_path;
float insertion, delay, lib_clk_delay, latency; Delay insertion, delay, latency;
float lib_clk_delay;
bool exists; bool exists;
delays.delay(clk_rf, end_rf, min_max, insertion, delay, delays.delay(clk_rf, end_rf, min_max, insertion, delay,
lib_clk_delay, latency, clk_path, exists); lib_clk_delay, latency, clk_path, exists);