ClkLatency use Delay
Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
parent
057a5dd283
commit
b02532aea1
|
|
@ -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];
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue