Sta::findSlewLimit

Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2022-04-14 11:19:18 -07:00
parent f61335a194
commit d7d40a6f22
3 changed files with 14 additions and 7 deletions

View File

@ -779,7 +779,8 @@ Sdc::haveClkSlewLimits() const
}
void
Sdc::slewLimit(Clock *clk, const RiseFall *rf,
Sdc::slewLimit(Clock *clk,
const RiseFall *rf,
const PathClkOrData clk_data,
const MinMax *min_max,
float &slew,
@ -794,7 +795,7 @@ Sdc::slewLimit(Port *port,
float &slew,
bool &exists)
{
slew = 0.0;
slew = INF;
MinMaxFloatValues values;
port_slew_limit_map_.findKey(port, values, exists);
if (exists)
@ -816,7 +817,7 @@ Sdc::slewLimit(Cell *cell,
float &slew,
bool &exists)
{
slew = 0.0;
slew = INF;
MinMaxFloatValues values;
cell_slew_limit_map_.findKey(cell, values, exists);
if (exists)

View File

@ -255,18 +255,23 @@ CheckSlewLimits::findLimit(const LibertyPort *port,
const Network *network = sta_->network();
Sdc *sdc = sta_->sdc();
float limit1;
bool exists1;
// Default to top ("design") limit.
Cell *top_cell = network->cell(network->topInstance());
sdc->slewLimit(top_cell, min_max,
limit, exists);
limit1, exists1);
if (exists1) {
limit = limit1;
exists = true;
}
if (port) {
const LibertyPort *corner_port = port->cornerPort(corner->libertyIndex(min_max));
float limit1;
bool exists1;
corner_port->slewLimit(min_max, limit1, exists1);
if (!exists1
// default_max_transition only applies to outputs.
&& corner_port->direction()->isAnyOutput()
&& min_max == MinMax::max())
corner_port->libertyLibrary()->defaultMaxSlew(limit1, exists1);

View File

@ -5219,7 +5219,8 @@ Sta::findSlewLimit(const LibertyPort *port,
float &limit,
bool &exists)
{
checkSlewLimitPreamble();
if (check_slew_limits_ == nullptr)
makeCheckSlewLimits();
check_slew_limits_->findLimit(port, corner, min_max,
limit, exists);
}