From 113e917c01247a0f104862feced4ff7069f4c65f Mon Sep 17 00:00:00 2001 From: James Cherry Date: Tue, 11 Jun 2024 20:50:11 -0700 Subject: [PATCH 1/4] rm pointless this-> Signed-off-by: James Cherry --- search/Search.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/search/Search.cc b/search/Search.cc index 242e05b9..521d3589 100644 --- a/search/Search.cc +++ b/search/Search.cc @@ -2687,7 +2687,7 @@ Search::setVertexArrivals(Vertex *vertex, tag_bldr->copyArrivals(tag_group, prev_arrivals, prev_paths); vertex->setTagGroupIndex(tag_group->index()); if (tag_group->hasFilterTag()) { - LockGuard lock(this->filtered_arrivals_lock_); + LockGuard lock(filtered_arrivals_lock_); filtered_arrivals_->insert(vertex); } @@ -2715,7 +2715,7 @@ Search::setVertexArrivals(Vertex *vertex, vertex->setTagGroupIndex(tag_group->index()); if (tag_group->hasFilterTag()) { - LockGuard lock(this->filtered_arrivals_lock_); + LockGuard lock(filtered_arrivals_lock_); filtered_arrivals_->insert(vertex); } } From fcbb1840ab0600e48b52150d45af0089d6c2d54e Mon Sep 17 00:00:00 2001 From: James Cherry Date: Tue, 11 Jun 2024 21:07:03 -0700 Subject: [PATCH 2/4] issue40 liberty multi-segment receiver capacitance Signed-off-by: James Cherry --- include/sta/TableModel.hh | 5 ++--- liberty/LibertyReader.cc | 27 +++++++++++++++++++++++++-- liberty/LibertyReaderPvt.hh | 5 ++++- liberty/TableModel.cc | 18 +++++++----------- 4 files changed, 38 insertions(+), 17 deletions(-) diff --git a/include/sta/TableModel.hh b/include/sta/TableModel.hh index dafad465..7c29d7b8 100644 --- a/include/sta/TableModel.hh +++ b/include/sta/TableModel.hh @@ -469,15 +469,14 @@ private: class ReceiverModel { public: - ReceiverModel(); ~ReceiverModel(); void setCapacitanceModel(TableModel *table_model, - int index, + size_t segment, RiseFall *rf); static bool checkAxes(TablePtr table); private: - TableModel *capacitance_models_[2][RiseFall::index_count]; + std::vector capacitance_models_; }; // Two dimensional (slew/cap) table of one dimensional time/current tables. diff --git a/liberty/LibertyReader.cc b/liberty/LibertyReader.cc index ae7cc4b9..a9dbced1 100644 --- a/liberty/LibertyReader.cc +++ b/liberty/LibertyReader.cc @@ -478,10 +478,19 @@ LibertyReader::defineVisitors() defineAttrVisitor("pg_type", &LibertyReader::visitPgType); defineAttrVisitor("voltage_name", &LibertyReader::visitVoltageName); - // ccs receiver + // ccs receiver capacitance defineGroupVisitor("receiver_capacitance", &LibertyReader::beginReceiverCapacitance, &LibertyReader::endReceiverCapacitance); + + defineGroupVisitor("receiver_capacitance_rise", + &LibertyReader::beginReceiverCapacitance1Rise, + &LibertyReader::endReceiverCapacitanceRiseFall); + defineGroupVisitor("receiver_capacitance_fall", + &LibertyReader::beginReceiverCapacitance1Fall, + &LibertyReader::endReceiverCapacitanceRiseFall); + defineAttrVisitor("segment", &LibertyReader::visitSegement); + defineGroupVisitor("receiver_capacitance1_rise", &LibertyReader::beginReceiverCapacitance1Rise, &LibertyReader::endReceiverCapacitanceRiseFall); @@ -2448,10 +2457,10 @@ LibertyReader::makeTimingArcs(LibertyPort *to_port, //////////////////////////////////////////////////////////////// +// Group that encloses receiver_capacitance1/2 etc groups. void LibertyReader::beginReceiverCapacitance(LibertyGroup *) { - receiver_model_ = make_shared(); } @@ -2465,6 +2474,20 @@ LibertyReader::endReceiverCapacitance(LibertyGroup *) receiver_model_ = nullptr; } +// For receiver_capacitance groups with mulitiple segments this +// overrides the index passed in beginReceiverCapacitance1Rise/Fall. +void +LibertyReader::visitSegement(LibertyAttr *attr) +{ + if (receiver_model_) { + int segment; + bool exists; + getAttrInt(attr, segment, exists); + if (exists) + index_ = segment; + } +} + void LibertyReader::beginReceiverCapacitance1Rise(LibertyGroup *group) { diff --git a/liberty/LibertyReaderPvt.hh b/liberty/LibertyReaderPvt.hh index 6ef9365f..5eee6cb1 100644 --- a/liberty/LibertyReaderPvt.hh +++ b/liberty/LibertyReaderPvt.hh @@ -424,9 +424,12 @@ public: virtual void visitPgType(LibertyAttr *attr); virtual void visitVoltageName(LibertyAttr *attr); - // ccs receiver + // ccs receiver capacitance virtual void beginReceiverCapacitance(LibertyGroup *group); virtual void endReceiverCapacitance(LibertyGroup *group); + + virtual void visitSegement(LibertyAttr *attr); + virtual void beginReceiverCapacitance1Rise(LibertyGroup *group); virtual void endReceiverCapacitanceRiseFall(LibertyGroup *group); virtual void beginReceiverCapacitance1Fall(LibertyGroup *group); diff --git a/liberty/TableModel.cc b/liberty/TableModel.cc index 28606d57..ab68dd72 100644 --- a/liberty/TableModel.cc +++ b/liberty/TableModel.cc @@ -355,25 +355,21 @@ GateTableModel::checkAxis(const TableAxis *axis) //////////////////////////////////////////////////////////////// -ReceiverModel::ReceiverModel() : - capacitance_models_{{nullptr, nullptr}, {nullptr, nullptr}} -{ -} - ReceiverModel::~ReceiverModel() { - for (int index = 0; index < 2; index++) { - for (auto rf_index : RiseFall::rangeIndex()) - delete capacitance_models_[index][rf_index]; - } + for (TableModel *model : capacitance_models_) + delete model; } void ReceiverModel::setCapacitanceModel(TableModel *table_model, - int index, + size_t segment, RiseFall *rf) { - capacitance_models_[index][rf->index()] = table_model; + if ((segment + 1) * RiseFall::index_count > capacitance_models_.size()) + capacitance_models_.resize((segment + 1) * RiseFall::index_count); + size_t idx = segment * RiseFall::index_count + rf->index(); + capacitance_models_[idx] = table_model; } bool From 6af5583baf3197577bf503c5837ab7a91e0e5972 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Tue, 11 Jun 2024 21:08:58 -0700 Subject: [PATCH 3/4] power ok Signed-off-by: James Cherry --- test/power.ok | 10 +++++----- test/power_vcd.ok | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/test/power.ok b/test/power.ok index 6d3c0eea..975a4228 100644 --- a/test/power.ok +++ b/test/power.ok @@ -2,11 +2,11 @@ Warning: gcd_sky130hd.v line 527, module sky130_fd_sc_hd__tapvpwrvgnd_1 not foun Group Internal Switching Leakage Total Power Power Power Power (Watts) ---------------------------------------------------------------- -Sequential 3.32e-04 8.62e-05 2.96e-10 4.19e-04 35.1% -Combinational 2.61e-04 3.46e-04 6.95e-10 6.07e-04 50.9% -Clock 4.68e-05 1.20e-04 2.30e-11 1.67e-04 14.0% +Sequential 3.07e-04 4.75e-05 2.96e-10 3.54e-04 40.1% +Combinational 1.58e-04 2.04e-04 6.86e-10 3.62e-04 41.0% +Clock 4.68e-05 1.20e-04 2.30e-11 1.67e-04 18.9% Macro 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.0% Pad 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.0% ---------------------------------------------------------------- -Total 6.41e-04 5.53e-04 1.01e-09 1.19e-03 100.0% - 53.7% 46.3% 0.0% +Total 5.11e-04 3.72e-04 1.00e-09 8.84e-04 100.0% + 57.9% 42.1% 0.0% diff --git a/test/power_vcd.ok b/test/power_vcd.ok index 549c868f..6e0005c2 100644 --- a/test/power_vcd.ok +++ b/test/power_vcd.ok @@ -3,11 +3,11 @@ Annotated 937 pin activities. Group Internal Switching Leakage Total Power Power Power Power (Watts) ---------------------------------------------------------------- -Sequential 3.05e-04 3.84e-05 2.92e-10 3.44e-04 44.6% -Combinational 9.95e-05 1.59e-04 6.76e-10 2.58e-04 33.5% +Sequential 3.05e-04 3.85e-05 2.92e-10 3.44e-04 44.6% +Combinational 9.90e-05 1.59e-04 6.76e-10 2.58e-04 33.5% Clock 4.82e-05 1.20e-04 2.30e-11 1.69e-04 21.9% Macro 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.0% Pad 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.0% ---------------------------------------------------------------- Total 4.53e-04 3.18e-04 9.91e-10 7.71e-04 100.0% - 58.8% 41.2% 0.0% + 58.7% 41.3% 0.0% From 8d65a6258d5fc243c8e8330ea6a08d7609479328 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Wed, 12 Jun 2024 09:48:18 -0700 Subject: [PATCH 4/4] read_spef rm -reduce_to Signed-off-by: James Cherry --- parasitics/Parasitics.tcl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parasitics/Parasitics.tcl b/parasitics/Parasitics.tcl index e648c622..4932c5a9 100644 --- a/parasitics/Parasitics.tcl +++ b/parasitics/Parasitics.tcl @@ -24,7 +24,7 @@ define_cmd_args "read_spef" \ [-pin_cap_included]\ [-keep_capacitive_coupling]\ [-coupling_reduction_factor factor]\ - [-reduce_to pi_elmore|pi_pole_residue2]\ + [-reduce]\ [-delete_after_reduce]\ filename}