remove set_max_transition pin support

This commit is contained in:
James Cherry 2020-06-08 17:16:15 -07:00
parent 88c2c61ed7
commit 6b4f2cc130
9 changed files with 29 additions and 125 deletions

Binary file not shown.

View File

@ -295,15 +295,6 @@ public:
void setSlewLimit(Port *port,
const MinMax *min_max,
float slew);
void slewLimit(const Pin *pin,
const MinMax *min_max,
// Return values.
float &slew,
bool &exists);
void setSlewLimit(const Pin *pin,
const MinMax *min_max,
float slew);
void slewLimitPins(ConstPinSeq &pins);
void slewLimit(Cell *cell,
const MinMax *min_max,
float &slew,
@ -1329,7 +1320,6 @@ protected:
OutputDelaysPinMap output_delay_leaf_pin_map_;
PortSlewLimitMap port_slew_limit_map_;
PinSlewLimitMap pin_slew_limit_map_;
CellSlewLimitMap cell_slew_limit_map_;
bool have_clk_slew_limits_;
CellCapLimitMap cell_cap_limit_map_;

View File

@ -247,9 +247,6 @@ public:
void setSlewLimit(Port *port,
const MinMax *min_max,
float slew);
void setSlewLimit(Pin *pin,
const MinMax *min_max,
float slew);
void setSlewLimit(Cell *cell,
const MinMax *min_max,
float slew);

View File

@ -822,40 +822,6 @@ Sdc::setSlewLimit(Port *port,
values.setValue(min_max, slew);
}
void
Sdc::slewLimit(const Pin *pin,
const MinMax *min_max,
float &slew,
bool &exists)
{
slew = 0.0;
MinMaxFloatValues values;
pin_slew_limit_map_.findKey(pin, values, exists);
if (exists)
values.value(min_max, slew, exists);
}
void
Sdc::setSlewLimit(const Pin *pin,
const MinMax *min_max,
float slew)
{
MinMaxFloatValues &values = pin_slew_limit_map_[pin];
values.setValue(min_max, slew);
}
void
Sdc::slewLimitPins(ConstPinSeq &pins)
{
PinSlewLimitMap::Iterator iter(pin_slew_limit_map_);
while (iter.hasNext()) {
const Pin *pin;
MinMaxFloatValues values;
iter.next(pin, values);
pins.push_back(pin);
}
}
void
Sdc::slewLimit(Cell *cell,
const MinMax *min_max,

View File

@ -2239,24 +2239,6 @@ WriteSdc::writeSlewLimits() const
}
delete port_iter;
ConstPinSeq pins;
sdc_->slewLimitPins(pins);
sort(pins, PinPathNameLess(network_));
ConstPinSeq::Iterator pin_iter(pins);
while (pin_iter.hasNext()) {
const Pin *pin = pin_iter.next();
float slew;
bool exists;
sdc_->slewLimit(pin, min_max, slew, exists);
if (exists) {
fprintf(stream_, "set_max_transition ");
writeTime(slew);
fprintf(stream_, " ");
writeGetPin(pin, false);
fprintf(stream_, "\n");
}
}
writeClkSlewLimits();
}

View File

@ -181,6 +181,10 @@ CheckSlewLimits::findLimit(const Pin *pin,
{
exists = false;
if (!sta_->graphDelayCalc()->isIdealClk(vertex)) {
// Default to top ("design") limit.
exists = top_limit_exists_;
limit = top_limit_;
const Network *network = sta_->network();
Sdc *sdc = sta_->sdc();
bool is_clk = sta_->search()->isClock(vertex);
@ -203,24 +207,21 @@ CheckSlewLimits::findLimit(const Pin *pin,
exists = true;
}
}
if (!exists) {
// Default to top ("design") limit.
exists = top_limit_exists_;
limit = top_limit_;
if (network->isTopLevelPort(pin)) {
Port *port = network->port(pin);
sdc->slewLimit(port, min_max, limit1, exists1);
// Use the tightest limit.
if (exists1
&& (!exists
|| min_max->compare(limit, limit1))) {
limit = limit1;
exists = true;
}
if (network->isTopLevelPort(pin)) {
Port *port = network->port(pin);
sdc->slewLimit(port, min_max, limit1, exists1);
// Use the tightest limit.
if (exists1
&& (!exists
|| min_max->compare(limit, limit1))) {
limit = limit1;
exists = true;
}
else {
sdc->slewLimit(pin, min_max,
limit1, exists1);
}
else {
LibertyPort *port = network->libertyPort(pin);
if (port) {
port->slewLimit(min_max, limit1, exists1);
// Use the tightest limit.
if (exists1
&& (!exists
@ -228,26 +229,14 @@ CheckSlewLimits::findLimit(const Pin *pin,
limit = limit1;
exists = true;
}
LibertyPort *port = network->libertyPort(pin);
if (port) {
port->slewLimit(min_max, limit1, exists1);
// Use the tightest limit.
if (exists1) {
if (!exists
|| min_max->compare(limit, limit1)) {
limit = limit1;
exists = true;
}
}
else if (port->direction()->isAnyOutput()
&& min_max == MinMax::max()) {
port->libertyLibrary()->defaultMaxSlew(limit1, exists1);
if (exists1
&& (!exists
|| min_max->compare(limit, limit1))) {
limit = limit1;
exists = true;
}
if (port->direction()->isAnyOutput()
&& min_max == MinMax::max()) {
port->libertyLibrary()->defaultMaxSlew(limit1, exists1);
if (exists1
&& (!exists
|| min_max->compare(limit, limit1))) {
limit = limit1;
exists = true;
}
}
}

View File

@ -998,14 +998,6 @@ Sta::setSlewLimit(Port *port,
sdc_->setSlewLimit(port, min_max, slew);
}
void
Sta::setSlewLimit(Pin *pin,
const MinMax *min_max,
float slew)
{
sdc_->setSlewLimit(pin, min_max, slew);
}
void
Sta::setSlewLimit(Cell *cell,
const MinMax *min_max,

View File

@ -2600,7 +2600,7 @@ proc set_max_transition { args } {
set slew [time_ui_sta $slew]
set objects [lindex $args 1]
parse_clk_cell_port_pin_args $objects clks cells ports pins
parse_clk_cell_port_args $objects clks cells ports
set tr [parse_rise_fall_flags flags]
@ -2617,12 +2617,12 @@ proc set_max_transition { args } {
lappend path_types "data"
}
if { ($ports != {} || $pins != {} || $cells != {}) \
if { ($ports != {} || $cells != {}) \
&& ([info exists flags(-clock_path)] \
|| [info exists flags(-data_path)]
|| [info exists flags(-rise)]
|| [info exists flags(-fall)]) } {
sta_warn "-data_path, -clock_path, -rise, -fall ignored for ports, pins and designs."
sta_warn "-data_path, -clock_path, -rise, -fall ignored for ports and designs."
}
# -clock_path/-data_path and transition only apply to clock objects.
@ -2637,9 +2637,6 @@ proc set_max_transition { args } {
foreach port $ports {
set_slew_limit_port $port "max" $slew
}
foreach pin $pins {
set_slew_limit_pin $pin "max" $slew
}
}
################################################################

View File

@ -3516,15 +3516,6 @@ set_slew_limit_port(Port *port,
Sta::sta()->setSlewLimit(port, min_max, slew);
}
void
set_slew_limit_pin(Pin *pin,
const MinMax *min_max,
float slew)
{
cmdLinkedNetwork();
Sta::sta()->setSlewLimit(pin, min_max, slew);
}
void
set_slew_limit_cell(Cell *cell,
const MinMax *min_max,