Sta::findWorstClkSkew

This commit is contained in:
James Cherry 2021-05-30 17:22:55 -07:00
parent 8e01d33857
commit 6a582fddb8
5 changed files with 40 additions and 4 deletions

View File

@ -878,6 +878,7 @@ public:
const Corner *corner,
const SetupHold *setup_hold,
int digits);
float findWorstClkSkew(const SetupHold *setup_hold);
// Header above reportPathEnd results.
void reportPathEndHeader();
// Footer below reportPathEnd results.

View File

@ -129,11 +129,8 @@ ClkSkews::reportClkSkew(ClockSet *clks,
// Sort the clocks to report in a stable order.
ClockSeq sorted_clks;
ClockSet::Iterator clk_iter1(clks);
while (clk_iter1.hasNext()) {
Clock *clk = clk_iter1.next();
for (Clock *clk : *clks)
sorted_clks.push_back(clk);
}
sort(sorted_clks, ClkNameLess());
Unit *time_unit = units_->timeUnit();
@ -168,6 +165,25 @@ ClkSkews::reportClkSkew(ClockSet *clks,
skews.deleteContents();
}
float
ClkSkews::findWorstClkSkew(const Corner *corner,
const SetupHold *setup_hold)
{
ClockSet clks;
for (Clock *clk : *sdc_->clocks())
clks.insert(clk);
float worst_skew = INF;
ClkSkewMap skews;
findClkSkew(&clks, corner, setup_hold, skews);
for (auto clk_skew_itr : skews) {
ClkSkew *clk_skew = clk_skew_itr.second;
float skew = clk_skew->skew();
if (skew < worst_skew)
worst_skew = skew;
}
return worst_skew;
}
void
ClkSkews::findClkSkew(ClockSet *clks,
const Corner *corner,

View File

@ -37,6 +37,9 @@ public:
const Corner *corner,
const SetupHold *setup_hold,
int digits);
// Find worst clock skew.
float findWorstClkSkew(const Corner *corner,
const SetupHold *setup_hold);
protected:
void findClkSkew(ClockSet *clks,

View File

@ -2582,6 +2582,15 @@ Sta::reportClkSkew(ClockSet *clks,
clk_skews_->reportClkSkew(clks, corner, setup_hold, digits);
}
float
Sta::findWorstClkSkew(const SetupHold *setup_hold)
{
ensureClkArrivals();
if (clk_skews_ == nullptr)
clk_skews_ = new ClkSkews(this);
return clk_skews_->findWorstClkSkew(cmd_corner_, setup_hold);
}
////////////////////////////////////////////////////////////////
void

View File

@ -4453,6 +4453,13 @@ report_clk_skew(ClockSet *clks,
delete clks;
}
float
find_worst_clk_skew(const SetupHold *setup_hold)
{
cmdLinkedNetwork();
return Sta::sta()->findWorstClkSkew(setup_hold);
}
TmpPinSet *
startpoints()
{