From c94ee132bc68a9e581b7286fc34e5aa3e20b6c9c Mon Sep 17 00:00:00 2001 From: James Cherry Date: Fri, 10 Feb 2023 11:52:28 -0700 Subject: [PATCH 1/8] or2881 Signed-off-by: James Cherry --- search/MakeTimingModel.cc | 78 ++++++++++++++++++++------------------- 1 file changed, 41 insertions(+), 37 deletions(-) diff --git a/search/MakeTimingModel.cc b/search/MakeTimingModel.cc index 388fd830..a8ba4af8 100644 --- a/search/MakeTimingModel.cc +++ b/search/MakeTimingModel.cc @@ -569,45 +569,46 @@ MakeTimingModel::makeGateModelTable(const Pin *output_pin, const TableModel *drvr_table = drvr_gate_model->delayModel(); const TableAxisPtr drvr_load_axis = loadCapacitanceAxis(drvr_table); - const FloatSeq *drvr_axis_values = drvr_load_axis->values(); + if (drvr_load_axis) { + const FloatSeq *drvr_axis_values = drvr_load_axis->values(); + FloatSeq *load_values = new FloatSeq; + FloatSeq *slew_values = new FloatSeq; + for (size_t i = 0; i < drvr_axis_values->size(); i++) { + float load_cap = (*drvr_axis_values)[i]; + // get slew from driver input pin + ArcDelay gate_delay; + Slew gate_slew; + drvr_gate_model->gateDelay(drvr_cell, pvt, in_slew, + load_cap, 0.0, false, + gate_delay, gate_slew); + // Remove the self delay driving the output pin net load cap. + load_values->push_back(delay + gate_delay - drvr_self_delay); + slew_values->push_back(gate_slew); + } - FloatSeq *load_values = new FloatSeq; - FloatSeq *slew_values = new FloatSeq; - for (size_t i = 0; i < drvr_axis_values->size(); i++) { - float load_cap = (*drvr_axis_values)[i]; - // get slew from driver input pin - ArcDelay gate_delay; - Slew gate_slew; - drvr_gate_model->gateDelay(drvr_cell, pvt, in_slew, - load_cap, 0.0, false, - gate_delay, gate_slew); - // Remove the self delay driving the output pin net load cap. - load_values->push_back(delay + gate_delay - drvr_self_delay); - slew_values->push_back(gate_slew); - } - - FloatSeq *axis_values = new FloatSeq(*drvr_axis_values); - TableAxisPtr load_axis = - std::make_shared(TableAxisVariable::total_output_net_capacitance, - axis_values); + FloatSeq *axis_values = new FloatSeq(*drvr_axis_values); + TableAxisPtr load_axis = + std::make_shared(TableAxisVariable::total_output_net_capacitance, + axis_values); - TablePtr delay_table = make_shared(load_values, load_axis); - TablePtr slew_table = make_shared(slew_values, load_axis); + TablePtr delay_table = make_shared(load_values, load_axis); + TablePtr slew_table = make_shared(slew_values, load_axis); - string template_name = "template_"; - template_name += std::to_string(tbl_template_index_++); + string template_name = "template_"; + template_name += std::to_string(tbl_template_index_++); - TableTemplate *tbl_template = new TableTemplate(template_name.c_str()); - tbl_template->setAxis1(load_axis); - library_->addTableTemplate(tbl_template, TableTemplateType::delay); + TableTemplate *tbl_template = new TableTemplate(template_name.c_str()); + tbl_template->setAxis1(load_axis); + library_->addTableTemplate(tbl_template, TableTemplateType::delay); - TableModel *delay_model = new TableModel(delay_table, tbl_template, - ScaleFactorType::cell, rf); - TableModel *slew_model = new TableModel(slew_table, tbl_template, - ScaleFactorType::cell, rf); - GateTableModel *gate_model = new GateTableModel(delay_model, nullptr, - slew_model, nullptr); - return gate_model; + TableModel *delay_model = new TableModel(delay_table, tbl_template, + ScaleFactorType::cell, rf); + TableModel *slew_model = new TableModel(slew_table, tbl_template, + ScaleFactorType::cell, rf); + GateTableModel *gate_model = new GateTableModel(delay_model, nullptr, + slew_model, nullptr); + return gate_model; + } } } } @@ -622,11 +623,14 @@ MakeTimingModel::makeGateModelTable(const Pin *output_pin, TableAxisPtr MakeTimingModel::loadCapacitanceAxis(const TableModel *table) { - if (table->axis1()->variable() == TableAxisVariable::total_output_net_capacitance) + if (table->axis1() + && table->axis1()->variable() == TableAxisVariable::total_output_net_capacitance) return table->axis1(); - else if (table->axis2()->variable() == TableAxisVariable::total_output_net_capacitance) + else if (table->axis2() + && table->axis2()->variable() == TableAxisVariable::total_output_net_capacitance) return table->axis2(); - else if (table->axis3()->variable() == TableAxisVariable::total_output_net_capacitance) + else if (table->axis3() + && table->axis3()->variable() == TableAxisVariable::total_output_net_capacitance) return table->axis3(); else return nullptr; From a13996edbd510d2aca2e18298355a8b51f306633 Mon Sep 17 00:00:00 2001 From: Harsh Vardhan Date: Wed, 8 Mar 2023 22:58:05 -0800 Subject: [PATCH 2/8] fix: Rename variable to avoid collision with C++ 20 keyword (requires) Signed-off-by: Harsh Vardhan --- tcl/StaTcl.i | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tcl/StaTcl.i b/tcl/StaTcl.i index 876126df..b650dcc0 100644 --- a/tcl/StaTcl.i +++ b/tcl/StaTcl.i @@ -5865,15 +5865,15 @@ requireds_clk(const RiseFall *rf, const RiseFall *clk_rf) { Sta *sta = Sta::sta(); - FloatSeq requires; + FloatSeq requireds; const ClockEdge *clk_edge = nullptr; if (clk) clk_edge = clk->edge(clk_rf); for (auto path_ap : sta->corners()->pathAnalysisPts()) { - requires.push_back(delayAsFloat(sta->vertexRequired(self, rf, clk_edge, + requireds.push_back(delayAsFloat(sta->vertexRequired(self, rf, clk_edge, path_ap))); } - return requires; + return requireds; } StringSeq From fbcc26374d79185409af4e405a31085c0005dcdd Mon Sep 17 00:00:00 2001 From: Balint Cristian Date: Fri, 24 Mar 2023 11:06:44 +0200 Subject: [PATCH 3/8] Add -Wp,-D_GLIBCXX_ASSERTIONS --- CMakeLists.txt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7648946c..30d013cc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -505,11 +505,12 @@ target_include_directories(OpenSTA ${CUDD_INCLUDE} ) +set(CXX_COMMON_FLAGS -Wall -Wextra -pedantic -Wcast-qual -Wredundant-decls -Wformat-security -Wp,-D_GLIBCXX_ASSERTIONS) target_compile_options(OpenSTA PRIVATE - $<$:-Wall -Wextra -pedantic -Wcast-qual -Wredundant-decls -Wformat-security> - $<$:-Wall -Wextra -pedantic -Wcast-qual -Wredundant-decls -Wformat-security -Wno-gnu-zero-variadic-macro-arguments> - $<$:-Wall -Wextra -pedantic -Wcast-qual -Wredundant-decls -Wformat-security -Wno-gnu-zero-variadic-macro-arguments> + $<$:${CXX_COMMON_FLAGS}> + $<$:${CXX_COMMON_FLAGS} -Wno-gnu-zero-variadic-macro-arguments> + $<$:${CXX_COMMON_FLAGS} -Wno-gnu-zero-variadic-macro-arguments> ) # Disable compiler specific extensions like gnu++11. From 61c11369c1c5b4050e31248f084c9ce7f41651ab Mon Sep 17 00:00:00 2001 From: Harsh Vardhan Date: Fri, 24 Mar 2023 09:33:20 -0700 Subject: [PATCH 4/8] fix: Allow C++ 20 compiles by changing variable name that is also a keyword Signed-off-by: Harsh Vardhan --- tcl/StaTcl.i | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tcl/StaTcl.i b/tcl/StaTcl.i index 5cf93c41..1b37d6b8 100644 --- a/tcl/StaTcl.i +++ b/tcl/StaTcl.i @@ -5947,15 +5947,15 @@ requireds_clk(const RiseFall *rf, const RiseFall *clk_rf) { Sta *sta = Sta::sta(); - FloatSeq requires; + FloatSeq requireds; const ClockEdge *clk_edge = nullptr; if (clk) clk_edge = clk->edge(clk_rf); for (auto path_ap : sta->corners()->pathAnalysisPts()) { - requires.push_back(delayAsFloat(sta->vertexRequired(self, rf, clk_edge, + requireds.push_back(delayAsFloat(sta->vertexRequired(self, rf, clk_edge, path_ap))); } - return requires; + return requireds; } StringSeq From 879f64f72bc5715417e18c04e022e5c81ec2b7f2 Mon Sep 17 00:00:00 2001 From: Harsh Vardhan Date: Sat, 25 Mar 2023 23:33:14 -0700 Subject: [PATCH 5/8] fix: Updated ok file for 'power' test Signed-off-by: Harsh Vardhan --- test/power.ok | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/power.ok b/test/power.ok index efd85364..6d6e32b2 100644 --- a/test/power.ok +++ b/test/power.ok @@ -2,10 +2,10 @@ 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.41e-04 8.87e-05 2.96e-10 4.30e-04 35.1% -Combinational 3.18e-04 4.78e-04 6.98e-10 7.96e-04 64.9% +Sequential 3.39e-04 8.75e-05 2.96e-10 4.27e-04 35.7% +Combinational 3.07e-04 4.63e-04 6.98e-10 7.69e-04 64.3% 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.59e-04 5.66e-04 9.94e-10 1.23e-03 100.0% - 53.8% 46.2% 0.0% +Total 6.46e-04 5.50e-04 9.94e-10 1.20e-03 100.0% + 54.0% 46.0% 0.0% From a4d2154a8146bec0553d98903b134f8c5b22b7bd Mon Sep 17 00:00:00 2001 From: Harsh Vardhan Date: Tue, 28 Mar 2023 17:37:58 -0700 Subject: [PATCH 6/8] fix: Fix PR conflicts Signed-off-by: Harsh Vardhan --- CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 222bbedf..a5646bf3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -506,13 +506,13 @@ target_include_directories(OpenSTA ) # common to gcc/clang -set(CXX_FLAGS -Wall -Wextra -pedantic -Wcast-qual -Wredundant-decls -Wformat-security) +set(CXX_COMMON_FLAGS -Wall -Wextra -pedantic -Wcast-qual -Wredundant-decls -Wformat-security -Wp,-D_GLIBCXX_ASSERTIONS) target_compile_options(OpenSTA PRIVATE - $<$:${CXX_FLAGS}> - $<$:${CXX_FLAGS} -Wno-gnu-zero-variadic-macro-arguments> - $<$:${CXX_FLAGS} -Wno-gnu-zero-variadic-macro-arguments> + $<$:${CXX_COMMON_FLAGS}> + $<$:${CXX_COMMON_FLAGS} -Wno-gnu-zero-variadic-macro-arguments> + $<$:${CXX_COMMON_FLAGS} -Wno-gnu-zero-variadic-macro-arguments> ) # Disable compiler specific extensions like gnu++11. From c34f6bb67a569ee1f5e7c325fdd5254c489d796e Mon Sep 17 00:00:00 2001 From: Harsh Vardhan Date: Tue, 28 Mar 2023 18:29:08 -0700 Subject: [PATCH 7/8] fix: merge conflict Signed-off-by: Harsh Vardhan --- CMakeLists.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a5646bf3..b5643519 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -505,14 +505,13 @@ target_include_directories(OpenSTA ${CUDD_INCLUDE} ) -# common to gcc/clang set(CXX_COMMON_FLAGS -Wall -Wextra -pedantic -Wcast-qual -Wredundant-decls -Wformat-security -Wp,-D_GLIBCXX_ASSERTIONS) target_compile_options(OpenSTA PRIVATE $<$:${CXX_COMMON_FLAGS}> - $<$:${CXX_COMMON_FLAGS} -Wno-gnu-zero-variadic-macro-arguments> $<$:${CXX_COMMON_FLAGS} -Wno-gnu-zero-variadic-macro-arguments> + $<$:${CXX_COMMON_FLAGS} -Wno-gnu-zero-variadic-macro-arguments> ) # Disable compiler specific extensions like gnu++11. From 31a77f2d723366a180c308ebe623e89109e266e1 Mon Sep 17 00:00:00 2001 From: Harsh Vardhan Date: Tue, 28 Mar 2023 18:31:32 -0700 Subject: [PATCH 8/8] fix: another attempt to fix conflict Signed-off-by: Harsh Vardhan --- CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b5643519..30d013cc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -506,7 +506,6 @@ target_include_directories(OpenSTA ) set(CXX_COMMON_FLAGS -Wall -Wextra -pedantic -Wcast-qual -Wredundant-decls -Wformat-security -Wp,-D_GLIBCXX_ASSERTIONS) - target_compile_options(OpenSTA PRIVATE $<$:${CXX_COMMON_FLAGS}>