report_check_types max slew/cap/fanout with set_driving_cell min limit
Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
parent
6802190c15
commit
8627c6826d
|
|
@ -167,26 +167,24 @@ CheckCapacitanceLimits::findLimit(const Pin *pin,
|
||||||
}
|
}
|
||||||
InputDrive *drive = sdc->findInputDrive(port);
|
InputDrive *drive = sdc->findInputDrive(port);
|
||||||
if (drive) {
|
if (drive) {
|
||||||
for (auto min_max : MinMax::range()) {
|
for (auto rf : RiseFall::range()) {
|
||||||
for (auto rf : RiseFall::range()) {
|
LibertyCell *cell;
|
||||||
LibertyCell *cell;
|
LibertyPort *from_port;
|
||||||
LibertyPort *from_port;
|
float *from_slews;
|
||||||
float *from_slews;
|
LibertyPort *to_port;
|
||||||
LibertyPort *to_port;
|
drive->driveCell(rf, min_max, cell, from_port, from_slews, to_port);
|
||||||
drive->driveCell(rf, min_max, cell, from_port, from_slews, to_port);
|
if (to_port) {
|
||||||
if (to_port) {
|
LibertyPort *corner_port = to_port->cornerPort(corner->libertyIndex(min_max));
|
||||||
LibertyPort *corner_port = to_port->cornerPort(corner->libertyIndex(min_max));
|
corner_port->capacitanceLimit(min_max, limit1, exists1);
|
||||||
corner_port->capacitanceLimit(min_max, limit1, exists1);
|
if (!exists1
|
||||||
if (!exists1
|
&& corner_port->direction()->isAnyOutput()
|
||||||
&& corner_port->direction()->isAnyOutput()
|
&& min_max == MinMax::max())
|
||||||
&& min_max == MinMax::max())
|
corner_port->libertyLibrary()->defaultMaxSlew(limit1, exists1);
|
||||||
corner_port->libertyLibrary()->defaultMaxSlew(limit1, exists1);
|
if (exists1
|
||||||
if (exists1
|
&& (!exists
|
||||||
&& (!exists
|
|| min_max->compare(limit, limit1))) {
|
||||||
|| min_max->compare(limit, limit1))) {
|
limit = limit1;
|
||||||
limit = limit1;
|
exists = true;
|
||||||
exists = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -129,25 +129,23 @@ CheckFanoutLimits::findLimit(const Pin *pin,
|
||||||
}
|
}
|
||||||
InputDrive *drive = sdc->findInputDrive(port);
|
InputDrive *drive = sdc->findInputDrive(port);
|
||||||
if (drive) {
|
if (drive) {
|
||||||
for (auto min_max : MinMax::range()) {
|
for (auto rf : RiseFall::range()) {
|
||||||
for (auto rf : RiseFall::range()) {
|
LibertyCell *cell;
|
||||||
LibertyCell *cell;
|
LibertyPort *from_port;
|
||||||
LibertyPort *from_port;
|
float *from_slews;
|
||||||
float *from_slews;
|
LibertyPort *to_port;
|
||||||
LibertyPort *to_port;
|
drive->driveCell(rf, min_max, cell, from_port, from_slews, to_port);
|
||||||
drive->driveCell(rf, min_max, cell, from_port, from_slews, to_port);
|
if (to_port) {
|
||||||
if (to_port) {
|
to_port->fanoutLimit(min_max, limit1, exists1);
|
||||||
to_port->fanoutLimit(min_max, limit1, exists1);
|
if (!exists1
|
||||||
if (!exists1
|
&& min_max == MinMax::max()
|
||||||
&& min_max == MinMax::max()
|
&& to_port->direction()->isAnyOutput())
|
||||||
&& to_port->direction()->isAnyOutput())
|
to_port->libertyLibrary()->defaultMaxFanout(limit1, exists1);
|
||||||
to_port->libertyLibrary()->defaultMaxFanout(limit1, exists1);
|
if (exists1
|
||||||
if (exists1
|
&& (!exists
|
||||||
&& (!exists
|
|| min_max->compare(limit, limit1))) {
|
||||||
|| min_max->compare(limit, limit1))) {
|
limit = limit1;
|
||||||
limit = limit1;
|
exists = true;
|
||||||
exists = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -218,26 +218,24 @@ CheckSlewLimits::findLimit(const Pin *pin,
|
||||||
}
|
}
|
||||||
InputDrive *drive = sdc->findInputDrive(port);
|
InputDrive *drive = sdc->findInputDrive(port);
|
||||||
if (drive) {
|
if (drive) {
|
||||||
for (auto min_max : MinMax::range()) {
|
for (auto rf : RiseFall::range()) {
|
||||||
for (auto rf : RiseFall::range()) {
|
LibertyCell *cell;
|
||||||
LibertyCell *cell;
|
LibertyPort *from_port;
|
||||||
LibertyPort *from_port;
|
float *from_slews;
|
||||||
float *from_slews;
|
LibertyPort *to_port;
|
||||||
LibertyPort *to_port;
|
drive->driveCell(rf, min_max, cell, from_port, from_slews, to_port);
|
||||||
drive->driveCell(rf, min_max, cell, from_port, from_slews, to_port);
|
if (to_port) {
|
||||||
if (to_port) {
|
LibertyPort *corner_port = to_port->cornerPort(corner->libertyIndex(min_max));
|
||||||
LibertyPort *corner_port = to_port->cornerPort(corner->libertyIndex(min_max));
|
corner_port->slewLimit(min_max, limit1, exists1);
|
||||||
corner_port->slewLimit(min_max, limit1, exists1);
|
if (!exists1
|
||||||
if (!exists1
|
&& corner_port->direction()->isAnyOutput()
|
||||||
&& corner_port->direction()->isAnyOutput()
|
&& min_max == MinMax::max())
|
||||||
&& min_max == MinMax::max())
|
corner_port->libertyLibrary()->defaultMaxSlew(limit1, exists1);
|
||||||
corner_port->libertyLibrary()->defaultMaxSlew(limit1, exists1);
|
if (exists1
|
||||||
if (exists1
|
&& (!exists
|
||||||
&& (!exists
|
|| min_max->compare(limit, limit1))) {
|
||||||
|| min_max->compare(limit, limit1))) {
|
limit = limit1;
|
||||||
limit = limit1;
|
exists = true;
|
||||||
exists = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue