diff --git a/sdc/WriteSdc.cc b/sdc/WriteSdc.cc index 71515f65..15b27e19 100644 --- a/sdc/WriteSdc.cc +++ b/sdc/WriteSdc.cc @@ -1578,7 +1578,8 @@ WriteSdc::writeEnvironment() const writeCommentSection("Environment"); writeOperatingConditions(); writeWireload(); - writePinLoads(); + writePortLoads(); + writeNetLoads(); writeDriveResistances(); writeDrivingCells(); writeInputTransitions(); @@ -1606,7 +1607,44 @@ WriteSdc::writeWireload() const } void -WriteSdc::writePinLoads() const +WriteSdc::writeNetLoads() const +{ + if (sdc_->net_wire_cap_map_) { + for (auto net_cap : *sdc_->net_wire_cap_map_) { + Net *net = net_cap.first; + MinMaxFloatValues &caps = net_cap.second; + float min_cap, max_cap; + bool min_exists, max_exists; + caps.value(MinMax::min(), min_cap, min_exists); + caps.value(MinMax::max(), max_cap, max_exists); + if (min_exists && max_exists + && min_cap == max_cap) + writeNetLoad(net, MinMaxAll::all(), min_cap); + else { + if (min_exists) + writeNetLoad(net, MinMaxAll::min(), min_cap); + if (max_exists) + writeNetLoad(net, MinMaxAll::max(), max_cap); + } + } + } +} + +void +WriteSdc::writeNetLoad(Net *net, + const MinMaxAll *min_max, + float cap) const +{ + fprintf(stream_, "set_load "); + fprintf(stream_, "%s ", minMaxFlag(min_max)); + writeCapacitance(cap); + fprintf(stream_, " "); + writeGetNet(net); + fprintf(stream_, "\n"); +} + +void +WriteSdc::writePortLoads() const { CellPortBitIterator *port_iter = sdc_network_->portBitIterator(cell_); while (port_iter->hasNext()) { diff --git a/sdc/WriteSdcPvt.hh b/sdc/WriteSdcPvt.hh index 83ee4d2e..4cc69ddd 100644 --- a/sdc/WriteSdcPvt.hh +++ b/sdc/WriteSdcPvt.hh @@ -117,7 +117,11 @@ public: void writeEnvironment() const; void writeOperatingConditions() const; void writeWireload() const; - void writePinLoads() const; + void writeNetLoads() const; + void writeNetLoad(Net *net, + const MinMaxAll *min_max, + float cap) const; + void writePortLoads() const; void writePortLoads(Port *port) const; void writePortFanout(Port *port) const; void writeDriveResistances() const;