From 01b7bed206c3118a2867690569ba1e477350af68 Mon Sep 17 00:00:00 2001 From: Ethan Mahintorabi Date: Wed, 14 Feb 2024 23:00:53 +0000 Subject: [PATCH 1/7] rsz: Makes pin swap equivalence algorithm more robst Replaces the existing symbolic manipulation code with truth table evaluation. Also changes the code to keep track of pin equivalence instead of "cell pin group" equivalence. Not all pins are equal to other pins as sky130_fd_sc_hd__o311ai_1 shows. The code would allow a more broad set of swapping to occur. No functional change should be observed since the pin swap is limited to two term cells which would have worked under the old scheme. Signed-off-by: Ethan Mahintorabi Signed-off-by: Matt Liberty --- src/rsz/src/CMakeLists.txt | 1 + src/rsz/src/RepairSetup.cc | 208 +++-- src/rsz/src/RepairSetup.hh | 27 +- src/rsz/test/pin_swap1.ok | 1741 +++++++++++++++++++++++++++--------- 4 files changed, 1468 insertions(+), 509 deletions(-) diff --git a/src/rsz/src/CMakeLists.txt b/src/rsz/src/CMakeLists.txt index f6eb7da7a72..02f00eb4e01 100644 --- a/src/rsz/src/CMakeLists.txt +++ b/src/rsz/src/CMakeLists.txt @@ -78,6 +78,7 @@ target_link_libraries(rsz_lib dbSta_lib grt_lib utl_lib + Boost::boost ) target_link_libraries(rsz diff --git a/src/rsz/src/RepairSetup.cc b/src/rsz/src/RepairSetup.cc index d3a778022d8..8e66cf8dbfc 100644 --- a/src/rsz/src/RepairSetup.cc +++ b/src/rsz/src/RepairSetup.cc @@ -513,7 +513,7 @@ bool RepairSetup::swapPins(PathRef *drvr_path, } } if (input_port_count > 2) { - return false; + return false; } // Check if we have already dealt with this instance @@ -527,11 +527,12 @@ bool RepairSetup::swapPins(PathRef *drvr_path, // Find the equivalent pins for a cell (simple implementation for now) // stash them - if (equiv_pin_map_.find(cell) == equiv_pin_map_.end()) { - equivCellPins(cell, ports); - equiv_pin_map_.insert(cell, ports); + auto cell_port_pair = std::pair(cell, input_port); + if (equiv_pin_map_.find(cell_port_pair) == equiv_pin_map_.end()) { + equivCellPins(cell, input_port, ports); + equiv_pin_map_.insert(cell_port_pair, ports); } - ports = equiv_pin_map_[cell]; + ports = equiv_pin_map_[cell_port_pair]; if (ports.size() > 1) { resizer_->findSwapPinCandidate(input_port, drvr_port, load_cap, dcalc_ap, &swap_port); @@ -887,76 +888,117 @@ RepairSetup::fanout(Vertex *vertex) return fanout; } -void -RepairSetup::getEquivPortList2(sta::FuncExpr *expr, - sta::LibertyPortSet &ports, - sta::LibertyPortSet &inv_ports, - sta::FuncExpr::Operator &status) +bool RepairSetup::simulateExpr( + sta::FuncExpr* expr, + sta::UnorderedMap>& port_stimulus, + size_t table_index) { - using Operator = sta::FuncExpr::Operator ; - const Operator curr_op = expr->op(); + using Operator = sta::FuncExpr::Operator; + const Operator curr_op = expr->op(); + + switch (curr_op) { + case Operator::op_not: + return !simulateExpr(expr->left(), port_stimulus, table_index); + case Operator::op_and: + return simulateExpr(expr->left(), port_stimulus, table_index) + && simulateExpr(expr->right(), port_stimulus, table_index); + case Operator::op_or: + return simulateExpr(expr->left(), port_stimulus, table_index) + || simulateExpr(expr->right(), port_stimulus, table_index); + case Operator::op_xor: + return simulateExpr(expr->left(), port_stimulus, table_index) + ^ simulateExpr(expr->right(), port_stimulus, table_index); + case Operator::op_one: + return true; + case Operator::op_zero: + return false; + case Operator::op_port: + return port_stimulus[expr->port()][table_index]; + } - if (curr_op == Operator::op_not) { - getEquivPortList2(expr->left(), inv_ports, ports, status); - } - else if (status == Operator::op_zero && - (curr_op == Operator::op_and || - curr_op == Operator::op_or || - curr_op == Operator::op_xor)) { - // Start parsing the equivalent pins (if it is simple or/and/xor) - status = curr_op; - getEquivPortList2(expr->left(), ports, inv_ports, status); - if (status == Operator::op_port) { - return; - } - getEquivPortList2(expr->right(), ports, inv_ports, status); - if (status == Operator::op_port) { - return; - } - status = Operator::op_one; - } - else if (status == curr_op) { - // handle > 2 input scenarios (up to any arbitrary number) - getEquivPortList2(expr->left(), ports, inv_ports, status); - if (status == Operator::op_port) { - return; - } - getEquivPortList2(expr->right(), ports, inv_ports, status); - if (status == Operator::op_port) { - return; - } - } - else if (curr_op == Operator::op_port && expr->port() != nullptr) { - ports.insert(expr->port()); - } - else { - status = Operator::op_port; // moved to some other operator. - ports.clear(); - inv_ports.clear(); - } + logger_->error(RSZ, 91, "unrecognized expr op from OpenSTA"); } -void -RepairSetup::getEquivPortList(sta::FuncExpr *expr, sta::LibertyPortSet &ports) +std::vector RepairSetup::simulateExpr( + sta::FuncExpr* expr, + sta::UnorderedMap>& port_stimulus) +{ + size_t table_length = 0x1 << port_stimulus.size(); + std::vector result; + result.resize(table_length); + for (size_t i = 0; i < table_length; i++) { + result[i] = simulateExpr(expr, port_stimulus, i); + } + + return result; +} + +bool RepairSetup::isPortEqiv(sta::FuncExpr* expr, + const LibertyCell* cell, + const LibertyPort* port_a, + const LibertyPort* port_b) { - sta::FuncExpr::Operator status = sta::FuncExpr::op_zero; - ports.clear(); - sta::LibertyPortSet inv_ports; - getEquivPortList2(expr, ports, inv_ports, status); - if (inv_ports.size() > ports.size()) { - ports = inv_ports; + sta::LibertyCellPortIterator port_iter(cell); + sta::UnorderedMap> port_stimulus; + size_t input_port_count = 0; + while (port_iter.hasNext()) { + LibertyPort* port = port_iter.next(); + if (port->direction()->isInput()) { + ++input_port_count; + port_stimulus[port] = {}; } - if (status == sta::FuncExpr::op_port || ports.size() == 1) { - ports.clear(); + } + + if (input_port_count > 16) { + // Not worth manually simulating all these values. + // Probably need to do SAT solving or something else instead. + return false; + } + + // Generate stimulus for the ports + size_t var_index = 0; + for (auto& it : port_stimulus) { + size_t truth_table_length = 0x1 << input_port_count; + std::vector& variable_stimulus = it.second; + variable_stimulus.resize(truth_table_length, false); + for (int i = 0; i < truth_table_length; i++) { + variable_stimulus[i] = static_cast((i >> var_index) & 0x1); } + var_index++; + } + + if (port_stimulus.find(port_a) == port_stimulus.end()) { + return false; + } + if (port_stimulus.find(port_b) == port_stimulus.end()) { + return false; + } + + std::vector result_no_swap = simulateExpr(expr, port_stimulus); + + // Swap pins + std::swap(port_stimulus.at(port_a), port_stimulus.at(port_b)); + + std::vector result_with_swap = simulateExpr(expr, port_stimulus); + + // Check if truth tables are equivalent post swap. If they are then pins + // are equivalent. + for (size_t i = 0; i < result_no_swap.size(); i++) { + if (result_no_swap[i] != result_with_swap[i]) { + return false; + } + } + + return true; } // Lets just look at the first list for now. // We may want to cache this information somwhere (by building it up for the whole // library). // Or just generate it when the cell is being created (depending on agreement). -void -RepairSetup::equivCellPins(const LibertyCell *cell, sta::LibertyPortSet &ports) +void RepairSetup::equivCellPins(const LibertyCell* cell, + LibertyPort* input_port, + sta::LibertyPortSet& ports) { if (cell->hasSequentials() || cell->isIsolationCell()) { ports.clear(); @@ -967,23 +1009,34 @@ RepairSetup::equivCellPins(const LibertyCell *cell, sta::LibertyPortSet &ports) int inputs = 0; // count number of output ports. Skip ports with > 1 output for now. + LibertyPort* output_port = nullptr; while (port_iter.hasNext()) { LibertyPort *port = port_iter.next(); if (port->direction()->isOutput()) { - ++outputs; + output_port = port; + ++outputs; } else { ++inputs; } } + if (output_port == nullptr) { + return; + } + + sta::FuncExpr* expr = output_port->function(); if (outputs == 1 && inputs >= 2) { sta::LibertyCellPortIterator port_iter2(cell); while (port_iter2.hasNext()) { - LibertyPort *port = port_iter2.next(); - sta::FuncExpr *expr = port->function(); - if (expr != nullptr) { - getEquivPortList(expr, ports); - } + LibertyPort* candidate_port = port_iter2.next(); + if (!candidate_port->direction()->isInput()) { + continue; + } + + if (expr != nullptr && input_port != candidate_port + && isPortEqiv(expr, cell, input_port, candidate_port)) { + ports.insert(candidate_port); + } } } } @@ -999,13 +1052,20 @@ RepairSetup::reportSwappablePins() sta::LibertyCellIterator cell_iter(library); while (cell_iter.hasNext()) { sta::LibertyCell* cell = cell_iter.next(); - sta::LibertyPortSet ports; - equivCellPins(cell, ports); - std::ostringstream ostr; - for (auto port : ports) { - ostr << ' ' << port->name(); + sta::LibertyCellPortIterator port_iter(cell); + while (port_iter.hasNext()) { + LibertyPort* port = port_iter.next(); + if (!port->direction()->isInput()) { + continue; + } + sta::LibertyPortSet ports; + equivCellPins(cell, port, ports); + std::ostringstream ostr; + for (auto port : ports) { + ostr << ' ' << port->name(); + } + logger_->report("{}/{} ->{}", cell->name(), port->name(), ostr.str()); } - logger_->report("{} ->{}", cell->name(), ostr.str()); } } } diff --git a/src/rsz/src/RepairSetup.hh b/src/rsz/src/RepairSetup.hh index 4ab9476d5c3..71502b412c0 100644 --- a/src/rsz/src/RepairSetup.hh +++ b/src/rsz/src/RepairSetup.hh @@ -34,7 +34,9 @@ /////////////////////////////////////////////////////////////////////////////// #pragma once +#include #include + #include "db_sta/dbNetwork.hh" #include "db_sta/dbSta.hh" #include "sta/FuncExpr.hh" @@ -104,12 +106,20 @@ private: bool skip_gate_cloning); void debugCheckMultipleBuffers(PathRef &path, PathExpanded *expanded); - - void getEquivPortList2(sta::FuncExpr *expr, sta::LibertyPortSet &ports, - sta::LibertyPortSet &inv_ports, - sta::FuncExpr::Operator &status); - void getEquivPortList(sta::FuncExpr *expr, sta::LibertyPortSet &ports); - void equivCellPins(const LibertyCell *cell, sta::LibertyPortSet &ports); + bool simulateExpr( + sta::FuncExpr* expr, + sta::UnorderedMap>& port_stimulus, + size_t table_index); + std::vector simulateExpr( + sta::FuncExpr* expr, + sta::UnorderedMap>& port_stimulus); + bool isPortEqiv(sta::FuncExpr* expr, + const LibertyCell* cell, + const LibertyPort* port_a, + const LibertyPort* port_b); + void equivCellPins(const LibertyCell* cell, + LibertyPort* input_port, + sta::LibertyPortSet& ports); bool swapPins(PathRef *drvr_path, int drvr_index, PathExpanded *expanded); bool upsizeDrvr(PathRef *drvr_path, int drvr_index, @@ -168,7 +178,10 @@ private: const MinMax *min_; const MinMax *max_; - sta::UnorderedMap equiv_pin_map_; + sta::UnorderedMap, + sta::LibertyPortSet, + boost::hash>> + equiv_pin_map_; static constexpr int decreasing_slack_max_passes_ = 50; static constexpr int rebuffer_max_fanout_ = 20; diff --git a/src/rsz/test/pin_swap1.ok b/src/rsz/test/pin_swap1.ok index 16a21fdc0c9..fe2fe53c643 100644 --- a/src/rsz/test/pin_swap1.ok +++ b/src/rsz/test/pin_swap1.ok @@ -10,431 +10,1316 @@ [INFO ODB-0131] Created 3 components and 14 component-terminals. [INFO ODB-0132] Created 2 special nets and 0 connections. [INFO ODB-0133] Created 4 nets and 6 connections. -sky130_fd_sc_hd__a2111o_1 -> -sky130_fd_sc_hd__a2111o_2 -> -sky130_fd_sc_hd__a2111o_4 -> -sky130_fd_sc_hd__a2111oi_0 -> -sky130_fd_sc_hd__a2111oi_1 -> -sky130_fd_sc_hd__a2111oi_2 -> -sky130_fd_sc_hd__a2111oi_4 -> -sky130_fd_sc_hd__a211o_1 -> -sky130_fd_sc_hd__a211o_2 -> -sky130_fd_sc_hd__a211o_4 -> -sky130_fd_sc_hd__a211oi_1 -> -sky130_fd_sc_hd__a211oi_2 -> -sky130_fd_sc_hd__a211oi_4 -> -sky130_fd_sc_hd__a21bo_1 -> -sky130_fd_sc_hd__a21bo_2 -> -sky130_fd_sc_hd__a21bo_4 -> -sky130_fd_sc_hd__a21boi_0 -> -sky130_fd_sc_hd__a21boi_1 -> -sky130_fd_sc_hd__a21boi_2 -> -sky130_fd_sc_hd__a21boi_4 -> -sky130_fd_sc_hd__a21o_1 -> -sky130_fd_sc_hd__a21o_2 -> -sky130_fd_sc_hd__a21o_4 -> -sky130_fd_sc_hd__a21oi_1 -> -sky130_fd_sc_hd__a21oi_2 -> -sky130_fd_sc_hd__a21oi_4 -> -sky130_fd_sc_hd__a221o_1 -> -sky130_fd_sc_hd__a221o_2 -> -sky130_fd_sc_hd__a221o_4 -> -sky130_fd_sc_hd__a221oi_1 -> -sky130_fd_sc_hd__a221oi_2 -> -sky130_fd_sc_hd__a221oi_4 -> -sky130_fd_sc_hd__a222oi_1 -> -sky130_fd_sc_hd__a22o_1 -> -sky130_fd_sc_hd__a22o_2 -> -sky130_fd_sc_hd__a22o_4 -> -sky130_fd_sc_hd__a22oi_1 -> -sky130_fd_sc_hd__a22oi_2 -> -sky130_fd_sc_hd__a22oi_4 -> -sky130_fd_sc_hd__a2bb2o_1 -> -sky130_fd_sc_hd__a2bb2o_2 -> -sky130_fd_sc_hd__a2bb2o_4 -> -sky130_fd_sc_hd__a2bb2oi_1 -> -sky130_fd_sc_hd__a2bb2oi_2 -> -sky130_fd_sc_hd__a2bb2oi_4 -> -sky130_fd_sc_hd__a311o_1 -> -sky130_fd_sc_hd__a311o_2 -> -sky130_fd_sc_hd__a311o_4 -> -sky130_fd_sc_hd__a311oi_1 -> -sky130_fd_sc_hd__a311oi_2 -> -sky130_fd_sc_hd__a311oi_4 -> -sky130_fd_sc_hd__a31o_1 -> -sky130_fd_sc_hd__a31o_2 -> -sky130_fd_sc_hd__a31o_4 -> -sky130_fd_sc_hd__a31oi_1 -> -sky130_fd_sc_hd__a31oi_2 -> -sky130_fd_sc_hd__a31oi_4 -> -sky130_fd_sc_hd__a32o_1 -> -sky130_fd_sc_hd__a32o_2 -> -sky130_fd_sc_hd__a32o_4 -> -sky130_fd_sc_hd__a32oi_1 -> -sky130_fd_sc_hd__a32oi_2 -> -sky130_fd_sc_hd__a32oi_4 -> -sky130_fd_sc_hd__a41o_1 -> -sky130_fd_sc_hd__a41o_2 -> -sky130_fd_sc_hd__a41o_4 -> -sky130_fd_sc_hd__a41oi_1 -> -sky130_fd_sc_hd__a41oi_2 -> -sky130_fd_sc_hd__a41oi_4 -> -sky130_fd_sc_hd__and2_0 -> A B -sky130_fd_sc_hd__and2_1 -> A B -sky130_fd_sc_hd__and2_2 -> A B -sky130_fd_sc_hd__and2_4 -> A B -sky130_fd_sc_hd__and2b_1 -> -sky130_fd_sc_hd__and2b_2 -> -sky130_fd_sc_hd__and2b_4 -> -sky130_fd_sc_hd__and3_1 -> A B C -sky130_fd_sc_hd__and3_2 -> A B C -sky130_fd_sc_hd__and3_4 -> A B C -sky130_fd_sc_hd__and3b_1 -> B C -sky130_fd_sc_hd__and3b_2 -> B C -sky130_fd_sc_hd__and3b_4 -> B C -sky130_fd_sc_hd__and4_1 -> A B C D -sky130_fd_sc_hd__and4_2 -> A B C D -sky130_fd_sc_hd__and4_4 -> A B C D -sky130_fd_sc_hd__and4b_1 -> B C D -sky130_fd_sc_hd__and4b_2 -> B C D -sky130_fd_sc_hd__and4b_4 -> B C D -sky130_fd_sc_hd__and4bb_1 -> C D -sky130_fd_sc_hd__and4bb_2 -> C D -sky130_fd_sc_hd__and4bb_4 -> C D -sky130_fd_sc_hd__buf_1 -> -sky130_fd_sc_hd__buf_12 -> -sky130_fd_sc_hd__buf_16 -> -sky130_fd_sc_hd__buf_2 -> -sky130_fd_sc_hd__buf_4 -> -sky130_fd_sc_hd__buf_6 -> -sky130_fd_sc_hd__buf_8 -> -sky130_fd_sc_hd__bufbuf_16 -> -sky130_fd_sc_hd__bufbuf_8 -> -sky130_fd_sc_hd__bufinv_16 -> -sky130_fd_sc_hd__bufinv_8 -> -sky130_fd_sc_hd__clkbuf_1 -> -sky130_fd_sc_hd__clkbuf_16 -> -sky130_fd_sc_hd__clkbuf_2 -> -sky130_fd_sc_hd__clkbuf_4 -> -sky130_fd_sc_hd__clkbuf_8 -> -sky130_fd_sc_hd__clkdlybuf4s15_1 -> -sky130_fd_sc_hd__clkdlybuf4s15_2 -> -sky130_fd_sc_hd__clkdlybuf4s18_1 -> -sky130_fd_sc_hd__clkdlybuf4s18_2 -> -sky130_fd_sc_hd__clkdlybuf4s25_1 -> -sky130_fd_sc_hd__clkdlybuf4s25_2 -> -sky130_fd_sc_hd__clkdlybuf4s50_1 -> -sky130_fd_sc_hd__clkdlybuf4s50_2 -> -sky130_fd_sc_hd__clkinv_1 -> -sky130_fd_sc_hd__clkinv_16 -> -sky130_fd_sc_hd__clkinv_2 -> -sky130_fd_sc_hd__clkinv_4 -> -sky130_fd_sc_hd__clkinv_8 -> -sky130_fd_sc_hd__clkinvlp_2 -> -sky130_fd_sc_hd__clkinvlp_4 -> -sky130_fd_sc_hd__conb_1 -> -sky130_fd_sc_hd__decap_12 -> -sky130_fd_sc_hd__decap_3 -> -sky130_fd_sc_hd__decap_4 -> -sky130_fd_sc_hd__decap_6 -> -sky130_fd_sc_hd__decap_8 -> -sky130_fd_sc_hd__dfbbn_1 -> -sky130_fd_sc_hd__dfbbn_2 -> -sky130_fd_sc_hd__dfbbp_1 -> -sky130_fd_sc_hd__dfrbp_1 -> -sky130_fd_sc_hd__dfrbp_2 -> -sky130_fd_sc_hd__dfrtn_1 -> -sky130_fd_sc_hd__dfrtp_1 -> -sky130_fd_sc_hd__dfrtp_2 -> -sky130_fd_sc_hd__dfrtp_4 -> -sky130_fd_sc_hd__dfsbp_1 -> -sky130_fd_sc_hd__dfsbp_2 -> -sky130_fd_sc_hd__dfstp_1 -> -sky130_fd_sc_hd__dfstp_2 -> -sky130_fd_sc_hd__dfstp_4 -> -sky130_fd_sc_hd__dfxbp_1 -> -sky130_fd_sc_hd__dfxbp_2 -> -sky130_fd_sc_hd__dfxtp_1 -> -sky130_fd_sc_hd__dfxtp_2 -> -sky130_fd_sc_hd__dfxtp_4 -> -sky130_fd_sc_hd__diode_2 -> -sky130_fd_sc_hd__dlclkp_1 -> -sky130_fd_sc_hd__dlclkp_2 -> -sky130_fd_sc_hd__dlclkp_4 -> -sky130_fd_sc_hd__dlrbn_1 -> -sky130_fd_sc_hd__dlrbn_2 -> -sky130_fd_sc_hd__dlrbp_1 -> -sky130_fd_sc_hd__dlrbp_2 -> -sky130_fd_sc_hd__dlrtn_1 -> -sky130_fd_sc_hd__dlrtn_2 -> -sky130_fd_sc_hd__dlrtn_4 -> -sky130_fd_sc_hd__dlrtp_1 -> -sky130_fd_sc_hd__dlrtp_2 -> -sky130_fd_sc_hd__dlrtp_4 -> -sky130_fd_sc_hd__dlxbn_1 -> -sky130_fd_sc_hd__dlxbn_2 -> -sky130_fd_sc_hd__dlxbp_1 -> -sky130_fd_sc_hd__dlxtn_1 -> -sky130_fd_sc_hd__dlxtn_2 -> -sky130_fd_sc_hd__dlxtn_4 -> -sky130_fd_sc_hd__dlxtp_1 -> -sky130_fd_sc_hd__dlygate4sd1_1 -> -sky130_fd_sc_hd__dlygate4sd2_1 -> -sky130_fd_sc_hd__dlygate4sd3_1 -> -sky130_fd_sc_hd__dlymetal6s2s_1 -> -sky130_fd_sc_hd__dlymetal6s4s_1 -> -sky130_fd_sc_hd__dlymetal6s6s_1 -> -sky130_fd_sc_hd__ebufn_1 -> -sky130_fd_sc_hd__ebufn_2 -> -sky130_fd_sc_hd__ebufn_4 -> -sky130_fd_sc_hd__ebufn_8 -> -sky130_fd_sc_hd__edfxbp_1 -> -sky130_fd_sc_hd__edfxtp_1 -> -sky130_fd_sc_hd__einvn_0 -> -sky130_fd_sc_hd__einvn_1 -> -sky130_fd_sc_hd__einvn_2 -> -sky130_fd_sc_hd__einvn_4 -> -sky130_fd_sc_hd__einvn_8 -> -sky130_fd_sc_hd__einvp_1 -> -sky130_fd_sc_hd__einvp_2 -> -sky130_fd_sc_hd__einvp_4 -> -sky130_fd_sc_hd__einvp_8 -> -sky130_fd_sc_hd__fa_1 -> -sky130_fd_sc_hd__fa_2 -> -sky130_fd_sc_hd__fa_4 -> -sky130_fd_sc_hd__fah_1 -> -sky130_fd_sc_hd__fahcin_1 -> -sky130_fd_sc_hd__fahcon_1 -> -sky130_fd_sc_hd__ha_1 -> -sky130_fd_sc_hd__ha_2 -> -sky130_fd_sc_hd__ha_4 -> -sky130_fd_sc_hd__inv_1 -> -sky130_fd_sc_hd__inv_12 -> -sky130_fd_sc_hd__inv_16 -> -sky130_fd_sc_hd__inv_2 -> -sky130_fd_sc_hd__inv_4 -> -sky130_fd_sc_hd__inv_6 -> -sky130_fd_sc_hd__inv_8 -> -sky130_fd_sc_hd__lpflow_bleeder_1 -> -sky130_fd_sc_hd__lpflow_clkbufkapwr_1 -> -sky130_fd_sc_hd__lpflow_clkbufkapwr_16 -> -sky130_fd_sc_hd__lpflow_clkbufkapwr_2 -> -sky130_fd_sc_hd__lpflow_clkbufkapwr_4 -> -sky130_fd_sc_hd__lpflow_clkbufkapwr_8 -> -sky130_fd_sc_hd__lpflow_clkinvkapwr_1 -> -sky130_fd_sc_hd__lpflow_clkinvkapwr_16 -> -sky130_fd_sc_hd__lpflow_clkinvkapwr_2 -> -sky130_fd_sc_hd__lpflow_clkinvkapwr_4 -> -sky130_fd_sc_hd__lpflow_clkinvkapwr_8 -> -sky130_fd_sc_hd__lpflow_decapkapwr_12 -> -sky130_fd_sc_hd__lpflow_decapkapwr_3 -> -sky130_fd_sc_hd__lpflow_decapkapwr_4 -> -sky130_fd_sc_hd__lpflow_decapkapwr_6 -> -sky130_fd_sc_hd__lpflow_decapkapwr_8 -> -sky130_fd_sc_hd__lpflow_inputiso0n_1 -> -sky130_fd_sc_hd__lpflow_inputiso0p_1 -> -sky130_fd_sc_hd__lpflow_inputiso1n_1 -> -sky130_fd_sc_hd__lpflow_inputiso1p_1 -> -sky130_fd_sc_hd__lpflow_inputisolatch_1 -> -sky130_fd_sc_hd__lpflow_isobufsrc_1 -> -sky130_fd_sc_hd__lpflow_isobufsrc_16 -> -sky130_fd_sc_hd__lpflow_isobufsrc_2 -> -sky130_fd_sc_hd__lpflow_isobufsrc_4 -> -sky130_fd_sc_hd__lpflow_isobufsrc_8 -> -sky130_fd_sc_hd__lpflow_isobufsrckapwr_16 -> -sky130_fd_sc_hd__lpflow_lsbuf_lh_hl_isowell_tap_1 -> -sky130_fd_sc_hd__lpflow_lsbuf_lh_hl_isowell_tap_2 -> -sky130_fd_sc_hd__lpflow_lsbuf_lh_hl_isowell_tap_4 -> -sky130_fd_sc_hd__lpflow_lsbuf_lh_isowell_4 -> -sky130_fd_sc_hd__lpflow_lsbuf_lh_isowell_tap_1 -> -sky130_fd_sc_hd__lpflow_lsbuf_lh_isowell_tap_2 -> -sky130_fd_sc_hd__lpflow_lsbuf_lh_isowell_tap_4 -> -sky130_fd_sc_hd__macro_sparecell -> -sky130_fd_sc_hd__maj3_1 -> -sky130_fd_sc_hd__maj3_2 -> -sky130_fd_sc_hd__maj3_4 -> -sky130_fd_sc_hd__mux2_1 -> -sky130_fd_sc_hd__mux2_2 -> -sky130_fd_sc_hd__mux2_4 -> -sky130_fd_sc_hd__mux2_8 -> -sky130_fd_sc_hd__mux2i_1 -> -sky130_fd_sc_hd__mux2i_2 -> -sky130_fd_sc_hd__mux2i_4 -> -sky130_fd_sc_hd__mux4_1 -> -sky130_fd_sc_hd__mux4_2 -> -sky130_fd_sc_hd__mux4_4 -> -sky130_fd_sc_hd__nand2_1 -> A B -sky130_fd_sc_hd__nand2_2 -> A B -sky130_fd_sc_hd__nand2_4 -> A B -sky130_fd_sc_hd__nand2_8 -> A B -sky130_fd_sc_hd__nand2b_1 -> -sky130_fd_sc_hd__nand2b_2 -> -sky130_fd_sc_hd__nand2b_4 -> -sky130_fd_sc_hd__nand3_1 -> A B C -sky130_fd_sc_hd__nand3_2 -> A B C -sky130_fd_sc_hd__nand3_4 -> A B C -sky130_fd_sc_hd__nand3b_1 -> B C -sky130_fd_sc_hd__nand3b_2 -> B C -sky130_fd_sc_hd__nand3b_4 -> B C -sky130_fd_sc_hd__nand4_1 -> A B C D -sky130_fd_sc_hd__nand4_2 -> A B C D -sky130_fd_sc_hd__nand4_4 -> A B C D -sky130_fd_sc_hd__nand4b_1 -> B C D -sky130_fd_sc_hd__nand4b_2 -> B C D -sky130_fd_sc_hd__nand4b_4 -> B C D -sky130_fd_sc_hd__nand4bb_1 -> A_N B_N -sky130_fd_sc_hd__nand4bb_2 -> A_N B_N -sky130_fd_sc_hd__nand4bb_4 -> A_N B_N -sky130_fd_sc_hd__nor2_1 -> A B -sky130_fd_sc_hd__nor2_2 -> A B -sky130_fd_sc_hd__nor2_4 -> A B -sky130_fd_sc_hd__nor2_8 -> A B -sky130_fd_sc_hd__nor2b_1 -> -sky130_fd_sc_hd__nor2b_2 -> -sky130_fd_sc_hd__nor2b_4 -> -sky130_fd_sc_hd__nor3_1 -> A B C -sky130_fd_sc_hd__nor3_2 -> A B C -sky130_fd_sc_hd__nor3_4 -> A B C -sky130_fd_sc_hd__nor3b_1 -> A B -sky130_fd_sc_hd__nor3b_2 -> A B -sky130_fd_sc_hd__nor3b_4 -> A B -sky130_fd_sc_hd__nor4_1 -> A B C D -sky130_fd_sc_hd__nor4_2 -> A B C D -sky130_fd_sc_hd__nor4_4 -> A B C D -sky130_fd_sc_hd__nor4b_1 -> A B C -sky130_fd_sc_hd__nor4b_2 -> A B C -sky130_fd_sc_hd__nor4b_4 -> A B C -sky130_fd_sc_hd__nor4bb_1 -> C_N D_N -sky130_fd_sc_hd__nor4bb_2 -> C_N D_N -sky130_fd_sc_hd__nor4bb_4 -> C_N D_N -sky130_fd_sc_hd__o2111a_1 -> -sky130_fd_sc_hd__o2111a_2 -> -sky130_fd_sc_hd__o2111a_4 -> -sky130_fd_sc_hd__o2111ai_1 -> -sky130_fd_sc_hd__o2111ai_2 -> -sky130_fd_sc_hd__o2111ai_4 -> -sky130_fd_sc_hd__o211a_1 -> -sky130_fd_sc_hd__o211a_2 -> -sky130_fd_sc_hd__o211a_4 -> -sky130_fd_sc_hd__o211ai_1 -> -sky130_fd_sc_hd__o211ai_2 -> -sky130_fd_sc_hd__o211ai_4 -> -sky130_fd_sc_hd__o21a_1 -> -sky130_fd_sc_hd__o21a_2 -> -sky130_fd_sc_hd__o21a_4 -> -sky130_fd_sc_hd__o21ai_0 -> -sky130_fd_sc_hd__o21ai_1 -> -sky130_fd_sc_hd__o21ai_2 -> -sky130_fd_sc_hd__o21ai_4 -> -sky130_fd_sc_hd__o21ba_1 -> -sky130_fd_sc_hd__o21ba_2 -> -sky130_fd_sc_hd__o21ba_4 -> -sky130_fd_sc_hd__o21bai_1 -> -sky130_fd_sc_hd__o21bai_2 -> -sky130_fd_sc_hd__o21bai_4 -> -sky130_fd_sc_hd__o221a_1 -> -sky130_fd_sc_hd__o221a_2 -> -sky130_fd_sc_hd__o221a_4 -> -sky130_fd_sc_hd__o221ai_1 -> -sky130_fd_sc_hd__o221ai_2 -> -sky130_fd_sc_hd__o221ai_4 -> -sky130_fd_sc_hd__o22a_1 -> -sky130_fd_sc_hd__o22a_2 -> -sky130_fd_sc_hd__o22a_4 -> -sky130_fd_sc_hd__o22ai_1 -> -sky130_fd_sc_hd__o22ai_2 -> -sky130_fd_sc_hd__o22ai_4 -> -sky130_fd_sc_hd__o2bb2a_1 -> -sky130_fd_sc_hd__o2bb2a_2 -> -sky130_fd_sc_hd__o2bb2a_4 -> -sky130_fd_sc_hd__o2bb2ai_1 -> -sky130_fd_sc_hd__o2bb2ai_2 -> -sky130_fd_sc_hd__o2bb2ai_4 -> -sky130_fd_sc_hd__o311a_1 -> -sky130_fd_sc_hd__o311a_2 -> -sky130_fd_sc_hd__o311a_4 -> -sky130_fd_sc_hd__o311ai_0 -> -sky130_fd_sc_hd__o311ai_1 -> -sky130_fd_sc_hd__o311ai_2 -> -sky130_fd_sc_hd__o311ai_4 -> -sky130_fd_sc_hd__o31a_1 -> -sky130_fd_sc_hd__o31a_2 -> -sky130_fd_sc_hd__o31a_4 -> -sky130_fd_sc_hd__o31ai_1 -> -sky130_fd_sc_hd__o31ai_2 -> -sky130_fd_sc_hd__o31ai_4 -> -sky130_fd_sc_hd__o32a_1 -> -sky130_fd_sc_hd__o32a_2 -> -sky130_fd_sc_hd__o32a_4 -> -sky130_fd_sc_hd__o32ai_1 -> -sky130_fd_sc_hd__o32ai_2 -> -sky130_fd_sc_hd__o32ai_4 -> -sky130_fd_sc_hd__o41a_1 -> -sky130_fd_sc_hd__o41a_2 -> -sky130_fd_sc_hd__o41a_4 -> -sky130_fd_sc_hd__o41ai_1 -> -sky130_fd_sc_hd__o41ai_2 -> -sky130_fd_sc_hd__o41ai_4 -> -sky130_fd_sc_hd__or2_0 -> A B -sky130_fd_sc_hd__or2_1 -> A B -sky130_fd_sc_hd__or2_2 -> A B -sky130_fd_sc_hd__or2_4 -> A B -sky130_fd_sc_hd__or2b_1 -> -sky130_fd_sc_hd__or2b_2 -> -sky130_fd_sc_hd__or2b_4 -> -sky130_fd_sc_hd__or3_1 -> A B C -sky130_fd_sc_hd__or3_2 -> A B C -sky130_fd_sc_hd__or3_4 -> A B C -sky130_fd_sc_hd__or3b_1 -> A B -sky130_fd_sc_hd__or3b_2 -> A B -sky130_fd_sc_hd__or3b_4 -> A B -sky130_fd_sc_hd__or4_1 -> A B C D -sky130_fd_sc_hd__or4_2 -> A B C D -sky130_fd_sc_hd__or4_4 -> A B C D -sky130_fd_sc_hd__or4b_1 -> A B C -sky130_fd_sc_hd__or4b_2 -> A B C -sky130_fd_sc_hd__or4b_4 -> A B C -sky130_fd_sc_hd__or4bb_1 -> A B -sky130_fd_sc_hd__or4bb_2 -> A B -sky130_fd_sc_hd__or4bb_4 -> A B -sky130_fd_sc_hd__probe_p_8 -> -sky130_fd_sc_hd__probec_p_8 -> -sky130_fd_sc_hd__sdfbbn_1 -> -sky130_fd_sc_hd__sdfbbn_2 -> -sky130_fd_sc_hd__sdfbbp_1 -> -sky130_fd_sc_hd__sdfrbp_1 -> -sky130_fd_sc_hd__sdfrbp_2 -> -sky130_fd_sc_hd__sdfrtn_1 -> -sky130_fd_sc_hd__sdfrtp_1 -> -sky130_fd_sc_hd__sdfrtp_2 -> -sky130_fd_sc_hd__sdfrtp_4 -> -sky130_fd_sc_hd__sdfsbp_1 -> -sky130_fd_sc_hd__sdfsbp_2 -> -sky130_fd_sc_hd__sdfstp_1 -> -sky130_fd_sc_hd__sdfstp_2 -> -sky130_fd_sc_hd__sdfstp_4 -> -sky130_fd_sc_hd__sdfxbp_1 -> -sky130_fd_sc_hd__sdfxbp_2 -> -sky130_fd_sc_hd__sdfxtp_1 -> -sky130_fd_sc_hd__sdfxtp_2 -> -sky130_fd_sc_hd__sdfxtp_4 -> -sky130_fd_sc_hd__sdlclkp_1 -> -sky130_fd_sc_hd__sdlclkp_2 -> -sky130_fd_sc_hd__sdlclkp_4 -> -sky130_fd_sc_hd__sedfxbp_1 -> -sky130_fd_sc_hd__sedfxbp_2 -> -sky130_fd_sc_hd__sedfxtp_1 -> -sky130_fd_sc_hd__sedfxtp_2 -> -sky130_fd_sc_hd__sedfxtp_4 -> -sky130_fd_sc_hd__xnor2_1 -> -sky130_fd_sc_hd__xnor2_2 -> -sky130_fd_sc_hd__xnor2_4 -> -sky130_fd_sc_hd__xnor3_1 -> -sky130_fd_sc_hd__xnor3_2 -> -sky130_fd_sc_hd__xnor3_4 -> -sky130_fd_sc_hd__xor2_1 -> -sky130_fd_sc_hd__xor2_2 -> -sky130_fd_sc_hd__xor2_4 -> -sky130_fd_sc_hd__xor3_1 -> -sky130_fd_sc_hd__xor3_2 -> -sky130_fd_sc_hd__xor3_4 -> +sky130_fd_sc_hd__a2111o_1/A1 -> A2 +sky130_fd_sc_hd__a2111o_1/A2 -> A1 +sky130_fd_sc_hd__a2111o_1/B1 -> C1 D1 +sky130_fd_sc_hd__a2111o_1/C1 -> B1 D1 +sky130_fd_sc_hd__a2111o_1/D1 -> B1 C1 +sky130_fd_sc_hd__a2111o_2/A1 -> A2 +sky130_fd_sc_hd__a2111o_2/A2 -> A1 +sky130_fd_sc_hd__a2111o_2/B1 -> C1 D1 +sky130_fd_sc_hd__a2111o_2/C1 -> B1 D1 +sky130_fd_sc_hd__a2111o_2/D1 -> B1 C1 +sky130_fd_sc_hd__a2111o_4/A1 -> A2 +sky130_fd_sc_hd__a2111o_4/A2 -> A1 +sky130_fd_sc_hd__a2111o_4/B1 -> C1 D1 +sky130_fd_sc_hd__a2111o_4/C1 -> B1 D1 +sky130_fd_sc_hd__a2111o_4/D1 -> B1 C1 +sky130_fd_sc_hd__a2111oi_0/A1 -> A2 +sky130_fd_sc_hd__a2111oi_0/A2 -> A1 +sky130_fd_sc_hd__a2111oi_0/B1 -> C1 D1 +sky130_fd_sc_hd__a2111oi_0/C1 -> B1 D1 +sky130_fd_sc_hd__a2111oi_0/D1 -> B1 C1 +sky130_fd_sc_hd__a2111oi_1/A1 -> A2 +sky130_fd_sc_hd__a2111oi_1/A2 -> A1 +sky130_fd_sc_hd__a2111oi_1/B1 -> C1 D1 +sky130_fd_sc_hd__a2111oi_1/C1 -> B1 D1 +sky130_fd_sc_hd__a2111oi_1/D1 -> B1 C1 +sky130_fd_sc_hd__a2111oi_2/A1 -> A2 +sky130_fd_sc_hd__a2111oi_2/A2 -> A1 +sky130_fd_sc_hd__a2111oi_2/B1 -> C1 D1 +sky130_fd_sc_hd__a2111oi_2/C1 -> B1 D1 +sky130_fd_sc_hd__a2111oi_2/D1 -> B1 C1 +sky130_fd_sc_hd__a2111oi_4/A1 -> A2 +sky130_fd_sc_hd__a2111oi_4/A2 -> A1 +sky130_fd_sc_hd__a2111oi_4/B1 -> C1 D1 +sky130_fd_sc_hd__a2111oi_4/C1 -> B1 D1 +sky130_fd_sc_hd__a2111oi_4/D1 -> B1 C1 +sky130_fd_sc_hd__a211o_1/A1 -> A2 +sky130_fd_sc_hd__a211o_1/A2 -> A1 +sky130_fd_sc_hd__a211o_1/B1 -> C1 +sky130_fd_sc_hd__a211o_1/C1 -> B1 +sky130_fd_sc_hd__a211o_2/A1 -> A2 +sky130_fd_sc_hd__a211o_2/A2 -> A1 +sky130_fd_sc_hd__a211o_2/B1 -> C1 +sky130_fd_sc_hd__a211o_2/C1 -> B1 +sky130_fd_sc_hd__a211o_4/A1 -> A2 +sky130_fd_sc_hd__a211o_4/A2 -> A1 +sky130_fd_sc_hd__a211o_4/B1 -> C1 +sky130_fd_sc_hd__a211o_4/C1 -> B1 +sky130_fd_sc_hd__a211oi_1/A1 -> A2 +sky130_fd_sc_hd__a211oi_1/A2 -> A1 +sky130_fd_sc_hd__a211oi_1/B1 -> C1 +sky130_fd_sc_hd__a211oi_1/C1 -> B1 +sky130_fd_sc_hd__a211oi_2/A1 -> A2 +sky130_fd_sc_hd__a211oi_2/A2 -> A1 +sky130_fd_sc_hd__a211oi_2/B1 -> C1 +sky130_fd_sc_hd__a211oi_2/C1 -> B1 +sky130_fd_sc_hd__a211oi_4/A1 -> A2 +sky130_fd_sc_hd__a211oi_4/A2 -> A1 +sky130_fd_sc_hd__a211oi_4/B1 -> C1 +sky130_fd_sc_hd__a211oi_4/C1 -> B1 +sky130_fd_sc_hd__a21bo_1/A1 -> A2 +sky130_fd_sc_hd__a21bo_1/A2 -> A1 +sky130_fd_sc_hd__a21bo_1/B1_N -> +sky130_fd_sc_hd__a21bo_2/A1 -> A2 +sky130_fd_sc_hd__a21bo_2/A2 -> A1 +sky130_fd_sc_hd__a21bo_2/B1_N -> +sky130_fd_sc_hd__a21bo_4/A1 -> A2 +sky130_fd_sc_hd__a21bo_4/A2 -> A1 +sky130_fd_sc_hd__a21bo_4/B1_N -> +sky130_fd_sc_hd__a21boi_0/A1 -> A2 +sky130_fd_sc_hd__a21boi_0/A2 -> A1 +sky130_fd_sc_hd__a21boi_0/B1_N -> +sky130_fd_sc_hd__a21boi_1/A1 -> A2 +sky130_fd_sc_hd__a21boi_1/A2 -> A1 +sky130_fd_sc_hd__a21boi_1/B1_N -> +sky130_fd_sc_hd__a21boi_2/A1 -> A2 +sky130_fd_sc_hd__a21boi_2/A2 -> A1 +sky130_fd_sc_hd__a21boi_2/B1_N -> +sky130_fd_sc_hd__a21boi_4/A1 -> A2 +sky130_fd_sc_hd__a21boi_4/A2 -> A1 +sky130_fd_sc_hd__a21boi_4/B1_N -> +sky130_fd_sc_hd__a21o_1/A1 -> A2 +sky130_fd_sc_hd__a21o_1/A2 -> A1 +sky130_fd_sc_hd__a21o_1/B1 -> +sky130_fd_sc_hd__a21o_2/A1 -> A2 +sky130_fd_sc_hd__a21o_2/A2 -> A1 +sky130_fd_sc_hd__a21o_2/B1 -> +sky130_fd_sc_hd__a21o_4/A1 -> A2 +sky130_fd_sc_hd__a21o_4/A2 -> A1 +sky130_fd_sc_hd__a21o_4/B1 -> +sky130_fd_sc_hd__a21oi_1/A1 -> A2 +sky130_fd_sc_hd__a21oi_1/A2 -> A1 +sky130_fd_sc_hd__a21oi_1/B1 -> +sky130_fd_sc_hd__a21oi_2/A1 -> A2 +sky130_fd_sc_hd__a21oi_2/A2 -> A1 +sky130_fd_sc_hd__a21oi_2/B1 -> +sky130_fd_sc_hd__a21oi_4/A1 -> A2 +sky130_fd_sc_hd__a21oi_4/A2 -> A1 +sky130_fd_sc_hd__a21oi_4/B1 -> +sky130_fd_sc_hd__a221o_1/A1 -> A2 +sky130_fd_sc_hd__a221o_1/A2 -> A1 +sky130_fd_sc_hd__a221o_1/B1 -> B2 +sky130_fd_sc_hd__a221o_1/B2 -> B1 +sky130_fd_sc_hd__a221o_1/C1 -> +sky130_fd_sc_hd__a221o_2/A1 -> A2 +sky130_fd_sc_hd__a221o_2/A2 -> A1 +sky130_fd_sc_hd__a221o_2/B1 -> B2 +sky130_fd_sc_hd__a221o_2/B2 -> B1 +sky130_fd_sc_hd__a221o_2/C1 -> +sky130_fd_sc_hd__a221o_4/A1 -> A2 +sky130_fd_sc_hd__a221o_4/A2 -> A1 +sky130_fd_sc_hd__a221o_4/B1 -> B2 +sky130_fd_sc_hd__a221o_4/B2 -> B1 +sky130_fd_sc_hd__a221o_4/C1 -> +sky130_fd_sc_hd__a221oi_1/A1 -> A2 +sky130_fd_sc_hd__a221oi_1/A2 -> A1 +sky130_fd_sc_hd__a221oi_1/B1 -> B2 +sky130_fd_sc_hd__a221oi_1/B2 -> B1 +sky130_fd_sc_hd__a221oi_1/C1 -> +sky130_fd_sc_hd__a221oi_2/A1 -> A2 +sky130_fd_sc_hd__a221oi_2/A2 -> A1 +sky130_fd_sc_hd__a221oi_2/B1 -> B2 +sky130_fd_sc_hd__a221oi_2/B2 -> B1 +sky130_fd_sc_hd__a221oi_2/C1 -> +sky130_fd_sc_hd__a221oi_4/A1 -> A2 +sky130_fd_sc_hd__a221oi_4/A2 -> A1 +sky130_fd_sc_hd__a221oi_4/B1 -> B2 +sky130_fd_sc_hd__a221oi_4/B2 -> B1 +sky130_fd_sc_hd__a221oi_4/C1 -> +sky130_fd_sc_hd__a222oi_1/A1 -> A2 +sky130_fd_sc_hd__a222oi_1/A2 -> A1 +sky130_fd_sc_hd__a222oi_1/B1 -> B2 +sky130_fd_sc_hd__a222oi_1/B2 -> B1 +sky130_fd_sc_hd__a222oi_1/C1 -> C2 +sky130_fd_sc_hd__a222oi_1/C2 -> C1 +sky130_fd_sc_hd__a22o_1/A1 -> A2 +sky130_fd_sc_hd__a22o_1/A2 -> A1 +sky130_fd_sc_hd__a22o_1/B1 -> B2 +sky130_fd_sc_hd__a22o_1/B2 -> B1 +sky130_fd_sc_hd__a22o_2/A1 -> A2 +sky130_fd_sc_hd__a22o_2/A2 -> A1 +sky130_fd_sc_hd__a22o_2/B1 -> B2 +sky130_fd_sc_hd__a22o_2/B2 -> B1 +sky130_fd_sc_hd__a22o_4/A1 -> A2 +sky130_fd_sc_hd__a22o_4/A2 -> A1 +sky130_fd_sc_hd__a22o_4/B1 -> B2 +sky130_fd_sc_hd__a22o_4/B2 -> B1 +sky130_fd_sc_hd__a22oi_1/A1 -> A2 +sky130_fd_sc_hd__a22oi_1/A2 -> A1 +sky130_fd_sc_hd__a22oi_1/B1 -> B2 +sky130_fd_sc_hd__a22oi_1/B2 -> B1 +sky130_fd_sc_hd__a22oi_2/A1 -> A2 +sky130_fd_sc_hd__a22oi_2/A2 -> A1 +sky130_fd_sc_hd__a22oi_2/B1 -> B2 +sky130_fd_sc_hd__a22oi_2/B2 -> B1 +sky130_fd_sc_hd__a22oi_4/A1 -> A2 +sky130_fd_sc_hd__a22oi_4/A2 -> A1 +sky130_fd_sc_hd__a22oi_4/B1 -> B2 +sky130_fd_sc_hd__a22oi_4/B2 -> B1 +sky130_fd_sc_hd__a2bb2o_1/A1_N -> A2_N +sky130_fd_sc_hd__a2bb2o_1/A2_N -> A1_N +sky130_fd_sc_hd__a2bb2o_1/B1 -> B2 +sky130_fd_sc_hd__a2bb2o_1/B2 -> B1 +sky130_fd_sc_hd__a2bb2o_2/A1_N -> A2_N +sky130_fd_sc_hd__a2bb2o_2/A2_N -> A1_N +sky130_fd_sc_hd__a2bb2o_2/B1 -> B2 +sky130_fd_sc_hd__a2bb2o_2/B2 -> B1 +sky130_fd_sc_hd__a2bb2o_4/A1_N -> A2_N +sky130_fd_sc_hd__a2bb2o_4/A2_N -> A1_N +sky130_fd_sc_hd__a2bb2o_4/B1 -> B2 +sky130_fd_sc_hd__a2bb2o_4/B2 -> B1 +sky130_fd_sc_hd__a2bb2oi_1/A1_N -> A2_N +sky130_fd_sc_hd__a2bb2oi_1/A2_N -> A1_N +sky130_fd_sc_hd__a2bb2oi_1/B1 -> B2 +sky130_fd_sc_hd__a2bb2oi_1/B2 -> B1 +sky130_fd_sc_hd__a2bb2oi_2/A1_N -> A2_N +sky130_fd_sc_hd__a2bb2oi_2/A2_N -> A1_N +sky130_fd_sc_hd__a2bb2oi_2/B1 -> B2 +sky130_fd_sc_hd__a2bb2oi_2/B2 -> B1 +sky130_fd_sc_hd__a2bb2oi_4/A1_N -> A2_N +sky130_fd_sc_hd__a2bb2oi_4/A2_N -> A1_N +sky130_fd_sc_hd__a2bb2oi_4/B1 -> B2 +sky130_fd_sc_hd__a2bb2oi_4/B2 -> B1 +sky130_fd_sc_hd__a311o_1/A1 -> A2 A3 +sky130_fd_sc_hd__a311o_1/A2 -> A1 A3 +sky130_fd_sc_hd__a311o_1/A3 -> A1 A2 +sky130_fd_sc_hd__a311o_1/B1 -> C1 +sky130_fd_sc_hd__a311o_1/C1 -> B1 +sky130_fd_sc_hd__a311o_2/A1 -> A2 A3 +sky130_fd_sc_hd__a311o_2/A2 -> A1 A3 +sky130_fd_sc_hd__a311o_2/A3 -> A1 A2 +sky130_fd_sc_hd__a311o_2/B1 -> C1 +sky130_fd_sc_hd__a311o_2/C1 -> B1 +sky130_fd_sc_hd__a311o_4/A1 -> A2 A3 +sky130_fd_sc_hd__a311o_4/A2 -> A1 A3 +sky130_fd_sc_hd__a311o_4/A3 -> A1 A2 +sky130_fd_sc_hd__a311o_4/B1 -> C1 +sky130_fd_sc_hd__a311o_4/C1 -> B1 +sky130_fd_sc_hd__a311oi_1/A1 -> A2 A3 +sky130_fd_sc_hd__a311oi_1/A2 -> A1 A3 +sky130_fd_sc_hd__a311oi_1/A3 -> A1 A2 +sky130_fd_sc_hd__a311oi_1/B1 -> C1 +sky130_fd_sc_hd__a311oi_1/C1 -> B1 +sky130_fd_sc_hd__a311oi_2/A1 -> A2 A3 +sky130_fd_sc_hd__a311oi_2/A2 -> A1 A3 +sky130_fd_sc_hd__a311oi_2/A3 -> A1 A2 +sky130_fd_sc_hd__a311oi_2/B1 -> C1 +sky130_fd_sc_hd__a311oi_2/C1 -> B1 +sky130_fd_sc_hd__a311oi_4/A1 -> A2 A3 +sky130_fd_sc_hd__a311oi_4/A2 -> A1 A3 +sky130_fd_sc_hd__a311oi_4/A3 -> A1 A2 +sky130_fd_sc_hd__a311oi_4/B1 -> C1 +sky130_fd_sc_hd__a311oi_4/C1 -> B1 +sky130_fd_sc_hd__a31o_1/A1 -> A2 A3 +sky130_fd_sc_hd__a31o_1/A2 -> A1 A3 +sky130_fd_sc_hd__a31o_1/A3 -> A1 A2 +sky130_fd_sc_hd__a31o_1/B1 -> +sky130_fd_sc_hd__a31o_2/A1 -> A2 A3 +sky130_fd_sc_hd__a31o_2/A2 -> A1 A3 +sky130_fd_sc_hd__a31o_2/A3 -> A1 A2 +sky130_fd_sc_hd__a31o_2/B1 -> +sky130_fd_sc_hd__a31o_4/A1 -> A2 A3 +sky130_fd_sc_hd__a31o_4/A2 -> A1 A3 +sky130_fd_sc_hd__a31o_4/A3 -> A1 A2 +sky130_fd_sc_hd__a31o_4/B1 -> +sky130_fd_sc_hd__a31oi_1/A1 -> A2 A3 +sky130_fd_sc_hd__a31oi_1/A2 -> A1 A3 +sky130_fd_sc_hd__a31oi_1/A3 -> A1 A2 +sky130_fd_sc_hd__a31oi_1/B1 -> +sky130_fd_sc_hd__a31oi_2/A1 -> A2 A3 +sky130_fd_sc_hd__a31oi_2/A2 -> A1 A3 +sky130_fd_sc_hd__a31oi_2/A3 -> A1 A2 +sky130_fd_sc_hd__a31oi_2/B1 -> +sky130_fd_sc_hd__a31oi_4/A1 -> A2 A3 +sky130_fd_sc_hd__a31oi_4/A2 -> A1 A3 +sky130_fd_sc_hd__a31oi_4/A3 -> A1 A2 +sky130_fd_sc_hd__a31oi_4/B1 -> +sky130_fd_sc_hd__a32o_1/A1 -> A2 A3 +sky130_fd_sc_hd__a32o_1/A2 -> A1 A3 +sky130_fd_sc_hd__a32o_1/A3 -> A1 A2 +sky130_fd_sc_hd__a32o_1/B1 -> B2 +sky130_fd_sc_hd__a32o_1/B2 -> B1 +sky130_fd_sc_hd__a32o_2/A1 -> A2 A3 +sky130_fd_sc_hd__a32o_2/A2 -> A1 A3 +sky130_fd_sc_hd__a32o_2/A3 -> A1 A2 +sky130_fd_sc_hd__a32o_2/B1 -> B2 +sky130_fd_sc_hd__a32o_2/B2 -> B1 +sky130_fd_sc_hd__a32o_4/A1 -> A2 A3 +sky130_fd_sc_hd__a32o_4/A2 -> A1 A3 +sky130_fd_sc_hd__a32o_4/A3 -> A1 A2 +sky130_fd_sc_hd__a32o_4/B1 -> B2 +sky130_fd_sc_hd__a32o_4/B2 -> B1 +sky130_fd_sc_hd__a32oi_1/A1 -> A2 A3 +sky130_fd_sc_hd__a32oi_1/A2 -> A1 A3 +sky130_fd_sc_hd__a32oi_1/A3 -> A1 A2 +sky130_fd_sc_hd__a32oi_1/B1 -> B2 +sky130_fd_sc_hd__a32oi_1/B2 -> B1 +sky130_fd_sc_hd__a32oi_2/A1 -> A2 A3 +sky130_fd_sc_hd__a32oi_2/A2 -> A1 A3 +sky130_fd_sc_hd__a32oi_2/A3 -> A1 A2 +sky130_fd_sc_hd__a32oi_2/B1 -> B2 +sky130_fd_sc_hd__a32oi_2/B2 -> B1 +sky130_fd_sc_hd__a32oi_4/A1 -> A2 A3 +sky130_fd_sc_hd__a32oi_4/A2 -> A1 A3 +sky130_fd_sc_hd__a32oi_4/A3 -> A1 A2 +sky130_fd_sc_hd__a32oi_4/B1 -> B2 +sky130_fd_sc_hd__a32oi_4/B2 -> B1 +sky130_fd_sc_hd__a41o_1/A1 -> A2 A3 A4 +sky130_fd_sc_hd__a41o_1/A2 -> A1 A3 A4 +sky130_fd_sc_hd__a41o_1/A3 -> A1 A2 A4 +sky130_fd_sc_hd__a41o_1/A4 -> A1 A2 A3 +sky130_fd_sc_hd__a41o_1/B1 -> +sky130_fd_sc_hd__a41o_2/A1 -> A2 A3 A4 +sky130_fd_sc_hd__a41o_2/A2 -> A1 A3 A4 +sky130_fd_sc_hd__a41o_2/A3 -> A1 A2 A4 +sky130_fd_sc_hd__a41o_2/A4 -> A1 A2 A3 +sky130_fd_sc_hd__a41o_2/B1 -> +sky130_fd_sc_hd__a41o_4/A1 -> A2 A3 A4 +sky130_fd_sc_hd__a41o_4/A2 -> A1 A3 A4 +sky130_fd_sc_hd__a41o_4/A3 -> A1 A2 A4 +sky130_fd_sc_hd__a41o_4/A4 -> A1 A2 A3 +sky130_fd_sc_hd__a41o_4/B1 -> +sky130_fd_sc_hd__a41oi_1/A1 -> A2 A3 A4 +sky130_fd_sc_hd__a41oi_1/A2 -> A1 A3 A4 +sky130_fd_sc_hd__a41oi_1/A3 -> A1 A2 A4 +sky130_fd_sc_hd__a41oi_1/A4 -> A1 A2 A3 +sky130_fd_sc_hd__a41oi_1/B1 -> +sky130_fd_sc_hd__a41oi_2/A1 -> A2 A3 A4 +sky130_fd_sc_hd__a41oi_2/A2 -> A1 A3 A4 +sky130_fd_sc_hd__a41oi_2/A3 -> A1 A2 A4 +sky130_fd_sc_hd__a41oi_2/A4 -> A1 A2 A3 +sky130_fd_sc_hd__a41oi_2/B1 -> +sky130_fd_sc_hd__a41oi_4/A1 -> A2 A3 A4 +sky130_fd_sc_hd__a41oi_4/A2 -> A1 A3 A4 +sky130_fd_sc_hd__a41oi_4/A3 -> A1 A2 A4 +sky130_fd_sc_hd__a41oi_4/A4 -> A1 A2 A3 +sky130_fd_sc_hd__a41oi_4/B1 -> +[INFO RSZ-1000] sup +sky130_fd_sc_hd__and2_0/A -> B +[INFO RSZ-1000] sup +sky130_fd_sc_hd__and2_0/B -> A +sky130_fd_sc_hd__and2_1/A -> B +sky130_fd_sc_hd__and2_1/B -> A +sky130_fd_sc_hd__and2_2/A -> B +sky130_fd_sc_hd__and2_2/B -> A +sky130_fd_sc_hd__and2_4/A -> B +sky130_fd_sc_hd__and2_4/B -> A +sky130_fd_sc_hd__and2b_1/A_N -> +sky130_fd_sc_hd__and2b_1/B -> +sky130_fd_sc_hd__and2b_2/A_N -> +sky130_fd_sc_hd__and2b_2/B -> +sky130_fd_sc_hd__and2b_4/A_N -> +sky130_fd_sc_hd__and2b_4/B -> +sky130_fd_sc_hd__and3_1/A -> B C +sky130_fd_sc_hd__and3_1/B -> A C +sky130_fd_sc_hd__and3_1/C -> A B +sky130_fd_sc_hd__and3_2/A -> B C +sky130_fd_sc_hd__and3_2/B -> A C +sky130_fd_sc_hd__and3_2/C -> A B +sky130_fd_sc_hd__and3_4/A -> B C +sky130_fd_sc_hd__and3_4/B -> A C +sky130_fd_sc_hd__and3_4/C -> A B +sky130_fd_sc_hd__and3b_1/A_N -> +sky130_fd_sc_hd__and3b_1/B -> C +sky130_fd_sc_hd__and3b_1/C -> B +sky130_fd_sc_hd__and3b_2/A_N -> +sky130_fd_sc_hd__and3b_2/B -> C +sky130_fd_sc_hd__and3b_2/C -> B +sky130_fd_sc_hd__and3b_4/A_N -> +sky130_fd_sc_hd__and3b_4/B -> C +sky130_fd_sc_hd__and3b_4/C -> B +sky130_fd_sc_hd__and4_1/A -> B C D +sky130_fd_sc_hd__and4_1/B -> A C D +sky130_fd_sc_hd__and4_1/C -> A B D +sky130_fd_sc_hd__and4_1/D -> A B C +sky130_fd_sc_hd__and4_2/A -> B C D +sky130_fd_sc_hd__and4_2/B -> A C D +sky130_fd_sc_hd__and4_2/C -> A B D +sky130_fd_sc_hd__and4_2/D -> A B C +sky130_fd_sc_hd__and4_4/A -> B C D +sky130_fd_sc_hd__and4_4/B -> A C D +sky130_fd_sc_hd__and4_4/C -> A B D +sky130_fd_sc_hd__and4_4/D -> A B C +sky130_fd_sc_hd__and4b_1/A_N -> +sky130_fd_sc_hd__and4b_1/B -> C D +sky130_fd_sc_hd__and4b_1/C -> B D +sky130_fd_sc_hd__and4b_1/D -> B C +sky130_fd_sc_hd__and4b_2/A_N -> +sky130_fd_sc_hd__and4b_2/B -> C D +sky130_fd_sc_hd__and4b_2/C -> B D +sky130_fd_sc_hd__and4b_2/D -> B C +sky130_fd_sc_hd__and4b_4/A_N -> +sky130_fd_sc_hd__and4b_4/B -> C D +sky130_fd_sc_hd__and4b_4/C -> B D +sky130_fd_sc_hd__and4b_4/D -> B C +sky130_fd_sc_hd__and4bb_1/A_N -> B_N +sky130_fd_sc_hd__and4bb_1/B_N -> A_N +sky130_fd_sc_hd__and4bb_1/C -> D +sky130_fd_sc_hd__and4bb_1/D -> C +sky130_fd_sc_hd__and4bb_2/A_N -> B_N +sky130_fd_sc_hd__and4bb_2/B_N -> A_N +sky130_fd_sc_hd__and4bb_2/C -> D +sky130_fd_sc_hd__and4bb_2/D -> C +sky130_fd_sc_hd__and4bb_4/A_N -> B_N +sky130_fd_sc_hd__and4bb_4/B_N -> A_N +sky130_fd_sc_hd__and4bb_4/C -> D +sky130_fd_sc_hd__and4bb_4/D -> C +sky130_fd_sc_hd__buf_1/A -> +sky130_fd_sc_hd__buf_12/A -> +sky130_fd_sc_hd__buf_16/A -> +sky130_fd_sc_hd__buf_2/A -> +sky130_fd_sc_hd__buf_4/A -> +sky130_fd_sc_hd__buf_6/A -> +sky130_fd_sc_hd__buf_8/A -> +sky130_fd_sc_hd__bufbuf_16/A -> +sky130_fd_sc_hd__bufbuf_8/A -> +sky130_fd_sc_hd__bufinv_16/A -> +sky130_fd_sc_hd__bufinv_8/A -> +sky130_fd_sc_hd__clkbuf_1/A -> +sky130_fd_sc_hd__clkbuf_16/A -> +sky130_fd_sc_hd__clkbuf_2/A -> +sky130_fd_sc_hd__clkbuf_4/A -> +sky130_fd_sc_hd__clkbuf_8/A -> +sky130_fd_sc_hd__clkdlybuf4s15_1/A -> +sky130_fd_sc_hd__clkdlybuf4s15_2/A -> +sky130_fd_sc_hd__clkdlybuf4s18_1/A -> +sky130_fd_sc_hd__clkdlybuf4s18_2/A -> +sky130_fd_sc_hd__clkdlybuf4s25_1/A -> +sky130_fd_sc_hd__clkdlybuf4s25_2/A -> +sky130_fd_sc_hd__clkdlybuf4s50_1/A -> +sky130_fd_sc_hd__clkdlybuf4s50_2/A -> +sky130_fd_sc_hd__clkinv_1/A -> +sky130_fd_sc_hd__clkinv_16/A -> +sky130_fd_sc_hd__clkinv_2/A -> +sky130_fd_sc_hd__clkinv_4/A -> +sky130_fd_sc_hd__clkinv_8/A -> +sky130_fd_sc_hd__clkinvlp_2/A -> +sky130_fd_sc_hd__clkinvlp_4/A -> +sky130_fd_sc_hd__dfbbn_1/CLK_N -> +sky130_fd_sc_hd__dfbbn_1/D -> +sky130_fd_sc_hd__dfbbn_1/RESET_B -> +sky130_fd_sc_hd__dfbbn_1/SET_B -> +sky130_fd_sc_hd__dfbbn_2/CLK_N -> +sky130_fd_sc_hd__dfbbn_2/D -> +sky130_fd_sc_hd__dfbbn_2/RESET_B -> +sky130_fd_sc_hd__dfbbn_2/SET_B -> +sky130_fd_sc_hd__dfbbp_1/CLK -> +sky130_fd_sc_hd__dfbbp_1/D -> +sky130_fd_sc_hd__dfbbp_1/RESET_B -> +sky130_fd_sc_hd__dfbbp_1/SET_B -> +sky130_fd_sc_hd__dfrbp_1/CLK -> +sky130_fd_sc_hd__dfrbp_1/D -> +sky130_fd_sc_hd__dfrbp_1/RESET_B -> +sky130_fd_sc_hd__dfrbp_2/CLK -> +sky130_fd_sc_hd__dfrbp_2/D -> +sky130_fd_sc_hd__dfrbp_2/RESET_B -> +sky130_fd_sc_hd__dfrtn_1/CLK_N -> +sky130_fd_sc_hd__dfrtn_1/D -> +sky130_fd_sc_hd__dfrtn_1/RESET_B -> +sky130_fd_sc_hd__dfrtp_1/CLK -> +sky130_fd_sc_hd__dfrtp_1/D -> +sky130_fd_sc_hd__dfrtp_1/RESET_B -> +sky130_fd_sc_hd__dfrtp_2/CLK -> +sky130_fd_sc_hd__dfrtp_2/D -> +sky130_fd_sc_hd__dfrtp_2/RESET_B -> +sky130_fd_sc_hd__dfrtp_4/CLK -> +sky130_fd_sc_hd__dfrtp_4/D -> +sky130_fd_sc_hd__dfrtp_4/RESET_B -> +sky130_fd_sc_hd__dfsbp_1/CLK -> +sky130_fd_sc_hd__dfsbp_1/D -> +sky130_fd_sc_hd__dfsbp_1/SET_B -> +sky130_fd_sc_hd__dfsbp_2/CLK -> +sky130_fd_sc_hd__dfsbp_2/D -> +sky130_fd_sc_hd__dfsbp_2/SET_B -> +sky130_fd_sc_hd__dfstp_1/CLK -> +sky130_fd_sc_hd__dfstp_1/D -> +sky130_fd_sc_hd__dfstp_1/SET_B -> +sky130_fd_sc_hd__dfstp_2/CLK -> +sky130_fd_sc_hd__dfstp_2/D -> +sky130_fd_sc_hd__dfstp_2/SET_B -> +sky130_fd_sc_hd__dfstp_4/CLK -> +sky130_fd_sc_hd__dfstp_4/D -> +sky130_fd_sc_hd__dfstp_4/SET_B -> +sky130_fd_sc_hd__dfxbp_1/CLK -> +sky130_fd_sc_hd__dfxbp_1/D -> +sky130_fd_sc_hd__dfxbp_2/CLK -> +sky130_fd_sc_hd__dfxbp_2/D -> +sky130_fd_sc_hd__dfxtp_1/CLK -> +sky130_fd_sc_hd__dfxtp_1/D -> +sky130_fd_sc_hd__dfxtp_2/CLK -> +sky130_fd_sc_hd__dfxtp_2/D -> +sky130_fd_sc_hd__dfxtp_4/CLK -> +sky130_fd_sc_hd__dfxtp_4/D -> +sky130_fd_sc_hd__diode_2/DIODE -> +sky130_fd_sc_hd__dlclkp_1/CLK -> +sky130_fd_sc_hd__dlclkp_1/GATE -> +sky130_fd_sc_hd__dlclkp_2/CLK -> +sky130_fd_sc_hd__dlclkp_2/GATE -> +sky130_fd_sc_hd__dlclkp_4/CLK -> +sky130_fd_sc_hd__dlclkp_4/GATE -> +sky130_fd_sc_hd__dlrbn_1/D -> +sky130_fd_sc_hd__dlrbn_1/GATE_N -> +sky130_fd_sc_hd__dlrbn_1/RESET_B -> +sky130_fd_sc_hd__dlrbn_2/D -> +sky130_fd_sc_hd__dlrbn_2/GATE_N -> +sky130_fd_sc_hd__dlrbn_2/RESET_B -> +sky130_fd_sc_hd__dlrbp_1/D -> +sky130_fd_sc_hd__dlrbp_1/GATE -> +sky130_fd_sc_hd__dlrbp_1/RESET_B -> +sky130_fd_sc_hd__dlrbp_2/D -> +sky130_fd_sc_hd__dlrbp_2/GATE -> +sky130_fd_sc_hd__dlrbp_2/RESET_B -> +sky130_fd_sc_hd__dlrtn_1/D -> +sky130_fd_sc_hd__dlrtn_1/GATE_N -> +sky130_fd_sc_hd__dlrtn_1/RESET_B -> +sky130_fd_sc_hd__dlrtn_2/D -> +sky130_fd_sc_hd__dlrtn_2/GATE_N -> +sky130_fd_sc_hd__dlrtn_2/RESET_B -> +sky130_fd_sc_hd__dlrtn_4/D -> +sky130_fd_sc_hd__dlrtn_4/GATE_N -> +sky130_fd_sc_hd__dlrtn_4/RESET_B -> +sky130_fd_sc_hd__dlrtp_1/D -> +sky130_fd_sc_hd__dlrtp_1/GATE -> +sky130_fd_sc_hd__dlrtp_1/RESET_B -> +sky130_fd_sc_hd__dlrtp_2/D -> +sky130_fd_sc_hd__dlrtp_2/GATE -> +sky130_fd_sc_hd__dlrtp_2/RESET_B -> +sky130_fd_sc_hd__dlrtp_4/D -> +sky130_fd_sc_hd__dlrtp_4/GATE -> +sky130_fd_sc_hd__dlrtp_4/RESET_B -> +sky130_fd_sc_hd__dlxbn_1/D -> +sky130_fd_sc_hd__dlxbn_1/GATE_N -> +sky130_fd_sc_hd__dlxbn_2/D -> +sky130_fd_sc_hd__dlxbn_2/GATE_N -> +sky130_fd_sc_hd__dlxbp_1/D -> +sky130_fd_sc_hd__dlxbp_1/GATE -> +sky130_fd_sc_hd__dlxtn_1/D -> +sky130_fd_sc_hd__dlxtn_1/GATE_N -> +sky130_fd_sc_hd__dlxtn_2/D -> +sky130_fd_sc_hd__dlxtn_2/GATE_N -> +sky130_fd_sc_hd__dlxtn_4/D -> +sky130_fd_sc_hd__dlxtn_4/GATE_N -> +sky130_fd_sc_hd__dlxtp_1/D -> +sky130_fd_sc_hd__dlxtp_1/GATE -> +sky130_fd_sc_hd__dlygate4sd1_1/A -> +sky130_fd_sc_hd__dlygate4sd2_1/A -> +sky130_fd_sc_hd__dlygate4sd3_1/A -> +sky130_fd_sc_hd__dlymetal6s2s_1/A -> +sky130_fd_sc_hd__dlymetal6s4s_1/A -> +sky130_fd_sc_hd__dlymetal6s6s_1/A -> +sky130_fd_sc_hd__ebufn_1/A -> +sky130_fd_sc_hd__ebufn_1/TE_B -> +sky130_fd_sc_hd__ebufn_2/A -> +sky130_fd_sc_hd__ebufn_2/TE_B -> +sky130_fd_sc_hd__ebufn_4/A -> +sky130_fd_sc_hd__ebufn_4/TE_B -> +sky130_fd_sc_hd__ebufn_8/A -> +sky130_fd_sc_hd__ebufn_8/TE_B -> +sky130_fd_sc_hd__edfxbp_1/CLK -> +sky130_fd_sc_hd__edfxbp_1/D -> +sky130_fd_sc_hd__edfxbp_1/DE -> +sky130_fd_sc_hd__edfxtp_1/CLK -> +sky130_fd_sc_hd__edfxtp_1/D -> +sky130_fd_sc_hd__edfxtp_1/DE -> +sky130_fd_sc_hd__einvn_0/A -> +sky130_fd_sc_hd__einvn_0/TE_B -> +sky130_fd_sc_hd__einvn_1/A -> +sky130_fd_sc_hd__einvn_1/TE_B -> +sky130_fd_sc_hd__einvn_2/A -> +sky130_fd_sc_hd__einvn_2/TE_B -> +sky130_fd_sc_hd__einvn_4/A -> +sky130_fd_sc_hd__einvn_4/TE_B -> +sky130_fd_sc_hd__einvn_8/A -> +sky130_fd_sc_hd__einvn_8/TE_B -> +sky130_fd_sc_hd__einvp_1/A -> +sky130_fd_sc_hd__einvp_1/TE -> +sky130_fd_sc_hd__einvp_2/A -> +sky130_fd_sc_hd__einvp_2/TE -> +sky130_fd_sc_hd__einvp_4/A -> +sky130_fd_sc_hd__einvp_4/TE -> +sky130_fd_sc_hd__einvp_8/A -> +sky130_fd_sc_hd__einvp_8/TE -> +sky130_fd_sc_hd__fa_1/A -> +sky130_fd_sc_hd__fa_1/B -> +sky130_fd_sc_hd__fa_1/CIN -> +sky130_fd_sc_hd__fa_2/A -> +sky130_fd_sc_hd__fa_2/B -> +sky130_fd_sc_hd__fa_2/CIN -> +sky130_fd_sc_hd__fa_4/A -> +sky130_fd_sc_hd__fa_4/B -> +sky130_fd_sc_hd__fa_4/CIN -> +sky130_fd_sc_hd__fah_1/A -> +sky130_fd_sc_hd__fah_1/B -> +sky130_fd_sc_hd__fah_1/CI -> +sky130_fd_sc_hd__fahcin_1/A -> +sky130_fd_sc_hd__fahcin_1/B -> +sky130_fd_sc_hd__fahcin_1/CIN -> +sky130_fd_sc_hd__fahcon_1/A -> +sky130_fd_sc_hd__fahcon_1/B -> +sky130_fd_sc_hd__fahcon_1/CI -> +sky130_fd_sc_hd__ha_1/A -> +sky130_fd_sc_hd__ha_1/B -> +sky130_fd_sc_hd__ha_2/A -> +sky130_fd_sc_hd__ha_2/B -> +sky130_fd_sc_hd__ha_4/A -> +sky130_fd_sc_hd__ha_4/B -> +sky130_fd_sc_hd__inv_1/A -> +sky130_fd_sc_hd__inv_12/A -> +sky130_fd_sc_hd__inv_16/A -> +sky130_fd_sc_hd__inv_2/A -> +sky130_fd_sc_hd__inv_4/A -> +sky130_fd_sc_hd__inv_6/A -> +sky130_fd_sc_hd__inv_8/A -> +sky130_fd_sc_hd__lpflow_bleeder_1/SHORT -> +sky130_fd_sc_hd__lpflow_clkbufkapwr_1/A -> +sky130_fd_sc_hd__lpflow_clkbufkapwr_16/A -> +sky130_fd_sc_hd__lpflow_clkbufkapwr_2/A -> +sky130_fd_sc_hd__lpflow_clkbufkapwr_4/A -> +sky130_fd_sc_hd__lpflow_clkbufkapwr_8/A -> +sky130_fd_sc_hd__lpflow_clkinvkapwr_1/A -> +sky130_fd_sc_hd__lpflow_clkinvkapwr_16/A -> +sky130_fd_sc_hd__lpflow_clkinvkapwr_2/A -> +sky130_fd_sc_hd__lpflow_clkinvkapwr_4/A -> +sky130_fd_sc_hd__lpflow_clkinvkapwr_8/A -> +sky130_fd_sc_hd__lpflow_inputiso0n_1/A -> +sky130_fd_sc_hd__lpflow_inputiso0n_1/SLEEP_B -> +sky130_fd_sc_hd__lpflow_inputiso0p_1/A -> +sky130_fd_sc_hd__lpflow_inputiso0p_1/SLEEP -> +sky130_fd_sc_hd__lpflow_inputiso1n_1/A -> +sky130_fd_sc_hd__lpflow_inputiso1n_1/SLEEP_B -> +sky130_fd_sc_hd__lpflow_inputiso1p_1/A -> +sky130_fd_sc_hd__lpflow_inputiso1p_1/SLEEP -> +sky130_fd_sc_hd__lpflow_inputisolatch_1/D -> +sky130_fd_sc_hd__lpflow_inputisolatch_1/SLEEP_B -> +sky130_fd_sc_hd__lpflow_isobufsrc_1/A -> +sky130_fd_sc_hd__lpflow_isobufsrc_1/SLEEP -> +sky130_fd_sc_hd__lpflow_isobufsrc_16/A -> +sky130_fd_sc_hd__lpflow_isobufsrc_16/SLEEP -> +sky130_fd_sc_hd__lpflow_isobufsrc_2/A -> +sky130_fd_sc_hd__lpflow_isobufsrc_2/SLEEP -> +sky130_fd_sc_hd__lpflow_isobufsrc_4/A -> +sky130_fd_sc_hd__lpflow_isobufsrc_4/SLEEP -> +sky130_fd_sc_hd__lpflow_isobufsrc_8/A -> +sky130_fd_sc_hd__lpflow_isobufsrc_8/SLEEP -> +sky130_fd_sc_hd__lpflow_isobufsrckapwr_16/A -> +sky130_fd_sc_hd__lpflow_isobufsrckapwr_16/SLEEP -> +sky130_fd_sc_hd__lpflow_lsbuf_lh_hl_isowell_tap_1/A -> +sky130_fd_sc_hd__lpflow_lsbuf_lh_hl_isowell_tap_2/A -> +sky130_fd_sc_hd__lpflow_lsbuf_lh_hl_isowell_tap_4/A -> +sky130_fd_sc_hd__lpflow_lsbuf_lh_isowell_4/A -> +sky130_fd_sc_hd__lpflow_lsbuf_lh_isowell_tap_1/A -> +sky130_fd_sc_hd__lpflow_lsbuf_lh_isowell_tap_2/A -> +sky130_fd_sc_hd__lpflow_lsbuf_lh_isowell_tap_4/A -> +sky130_fd_sc_hd__maj3_1/A -> B C +sky130_fd_sc_hd__maj3_1/B -> A C +sky130_fd_sc_hd__maj3_1/C -> A B +sky130_fd_sc_hd__maj3_2/A -> B C +sky130_fd_sc_hd__maj3_2/B -> A C +sky130_fd_sc_hd__maj3_2/C -> A B +sky130_fd_sc_hd__maj3_4/A -> B C +sky130_fd_sc_hd__maj3_4/B -> A C +sky130_fd_sc_hd__maj3_4/C -> A B +sky130_fd_sc_hd__mux2_1/A0 -> +sky130_fd_sc_hd__mux2_1/A1 -> +sky130_fd_sc_hd__mux2_1/S -> +sky130_fd_sc_hd__mux2_2/A0 -> +sky130_fd_sc_hd__mux2_2/A1 -> +sky130_fd_sc_hd__mux2_2/S -> +sky130_fd_sc_hd__mux2_4/A0 -> +sky130_fd_sc_hd__mux2_4/A1 -> +sky130_fd_sc_hd__mux2_4/S -> +sky130_fd_sc_hd__mux2_8/A0 -> +sky130_fd_sc_hd__mux2_8/A1 -> +sky130_fd_sc_hd__mux2_8/S -> +sky130_fd_sc_hd__mux2i_1/A0 -> +sky130_fd_sc_hd__mux2i_1/A1 -> +sky130_fd_sc_hd__mux2i_1/S -> +sky130_fd_sc_hd__mux2i_2/A0 -> +sky130_fd_sc_hd__mux2i_2/A1 -> +sky130_fd_sc_hd__mux2i_2/S -> +sky130_fd_sc_hd__mux2i_4/A0 -> +sky130_fd_sc_hd__mux2i_4/A1 -> +sky130_fd_sc_hd__mux2i_4/S -> +sky130_fd_sc_hd__mux4_1/A0 -> +sky130_fd_sc_hd__mux4_1/A1 -> +sky130_fd_sc_hd__mux4_1/A2 -> +sky130_fd_sc_hd__mux4_1/A3 -> +sky130_fd_sc_hd__mux4_1/S0 -> +sky130_fd_sc_hd__mux4_1/S1 -> +sky130_fd_sc_hd__mux4_2/A0 -> +sky130_fd_sc_hd__mux4_2/A1 -> +sky130_fd_sc_hd__mux4_2/A2 -> +sky130_fd_sc_hd__mux4_2/A3 -> +sky130_fd_sc_hd__mux4_2/S0 -> +sky130_fd_sc_hd__mux4_2/S1 -> +sky130_fd_sc_hd__mux4_4/A0 -> +sky130_fd_sc_hd__mux4_4/A1 -> +sky130_fd_sc_hd__mux4_4/A2 -> +sky130_fd_sc_hd__mux4_4/A3 -> +sky130_fd_sc_hd__mux4_4/S0 -> +sky130_fd_sc_hd__mux4_4/S1 -> +sky130_fd_sc_hd__nand2_1/A -> B +sky130_fd_sc_hd__nand2_1/B -> A +sky130_fd_sc_hd__nand2_2/A -> B +sky130_fd_sc_hd__nand2_2/B -> A +sky130_fd_sc_hd__nand2_4/A -> B +sky130_fd_sc_hd__nand2_4/B -> A +sky130_fd_sc_hd__nand2_8/A -> B +sky130_fd_sc_hd__nand2_8/B -> A +sky130_fd_sc_hd__nand2b_1/A_N -> +sky130_fd_sc_hd__nand2b_1/B -> +sky130_fd_sc_hd__nand2b_2/A_N -> +sky130_fd_sc_hd__nand2b_2/B -> +sky130_fd_sc_hd__nand2b_4/A_N -> +sky130_fd_sc_hd__nand2b_4/B -> +sky130_fd_sc_hd__nand3_1/A -> B C +sky130_fd_sc_hd__nand3_1/B -> A C +sky130_fd_sc_hd__nand3_1/C -> A B +sky130_fd_sc_hd__nand3_2/A -> B C +sky130_fd_sc_hd__nand3_2/B -> A C +sky130_fd_sc_hd__nand3_2/C -> A B +sky130_fd_sc_hd__nand3_4/A -> B C +sky130_fd_sc_hd__nand3_4/B -> A C +sky130_fd_sc_hd__nand3_4/C -> A B +sky130_fd_sc_hd__nand3b_1/A_N -> +sky130_fd_sc_hd__nand3b_1/B -> C +sky130_fd_sc_hd__nand3b_1/C -> B +sky130_fd_sc_hd__nand3b_2/A_N -> +sky130_fd_sc_hd__nand3b_2/B -> C +sky130_fd_sc_hd__nand3b_2/C -> B +sky130_fd_sc_hd__nand3b_4/A_N -> +sky130_fd_sc_hd__nand3b_4/B -> C +sky130_fd_sc_hd__nand3b_4/C -> B +sky130_fd_sc_hd__nand4_1/A -> B C D +sky130_fd_sc_hd__nand4_1/B -> A C D +sky130_fd_sc_hd__nand4_1/C -> A B D +sky130_fd_sc_hd__nand4_1/D -> A B C +sky130_fd_sc_hd__nand4_2/A -> B C D +sky130_fd_sc_hd__nand4_2/B -> A C D +sky130_fd_sc_hd__nand4_2/C -> A B D +sky130_fd_sc_hd__nand4_2/D -> A B C +sky130_fd_sc_hd__nand4_4/A -> B C D +sky130_fd_sc_hd__nand4_4/B -> A C D +sky130_fd_sc_hd__nand4_4/C -> A B D +sky130_fd_sc_hd__nand4_4/D -> A B C +sky130_fd_sc_hd__nand4b_1/A_N -> +sky130_fd_sc_hd__nand4b_1/B -> C D +sky130_fd_sc_hd__nand4b_1/C -> B D +sky130_fd_sc_hd__nand4b_1/D -> B C +sky130_fd_sc_hd__nand4b_2/A_N -> +sky130_fd_sc_hd__nand4b_2/B -> C D +sky130_fd_sc_hd__nand4b_2/C -> B D +sky130_fd_sc_hd__nand4b_2/D -> B C +sky130_fd_sc_hd__nand4b_4/A_N -> +sky130_fd_sc_hd__nand4b_4/B -> C D +sky130_fd_sc_hd__nand4b_4/C -> B D +sky130_fd_sc_hd__nand4b_4/D -> B C +sky130_fd_sc_hd__nand4bb_1/A_N -> B_N +sky130_fd_sc_hd__nand4bb_1/B_N -> A_N +sky130_fd_sc_hd__nand4bb_1/C -> D +sky130_fd_sc_hd__nand4bb_1/D -> C +sky130_fd_sc_hd__nand4bb_2/A_N -> B_N +sky130_fd_sc_hd__nand4bb_2/B_N -> A_N +sky130_fd_sc_hd__nand4bb_2/C -> D +sky130_fd_sc_hd__nand4bb_2/D -> C +sky130_fd_sc_hd__nand4bb_4/A_N -> B_N +sky130_fd_sc_hd__nand4bb_4/B_N -> A_N +sky130_fd_sc_hd__nand4bb_4/C -> D +sky130_fd_sc_hd__nand4bb_4/D -> C +sky130_fd_sc_hd__nor2_1/A -> B +sky130_fd_sc_hd__nor2_1/B -> A +sky130_fd_sc_hd__nor2_2/A -> B +sky130_fd_sc_hd__nor2_2/B -> A +sky130_fd_sc_hd__nor2_4/A -> B +sky130_fd_sc_hd__nor2_4/B -> A +sky130_fd_sc_hd__nor2_8/A -> B +sky130_fd_sc_hd__nor2_8/B -> A +sky130_fd_sc_hd__nor2b_1/A -> +sky130_fd_sc_hd__nor2b_1/B_N -> +sky130_fd_sc_hd__nor2b_2/A -> +sky130_fd_sc_hd__nor2b_2/B_N -> +sky130_fd_sc_hd__nor2b_4/A -> +sky130_fd_sc_hd__nor2b_4/B_N -> +sky130_fd_sc_hd__nor3_1/A -> B C +sky130_fd_sc_hd__nor3_1/B -> A C +sky130_fd_sc_hd__nor3_1/C -> A B +sky130_fd_sc_hd__nor3_2/A -> B C +sky130_fd_sc_hd__nor3_2/B -> A C +sky130_fd_sc_hd__nor3_2/C -> A B +sky130_fd_sc_hd__nor3_4/A -> B C +sky130_fd_sc_hd__nor3_4/B -> A C +sky130_fd_sc_hd__nor3_4/C -> A B +sky130_fd_sc_hd__nor3b_1/A -> B +sky130_fd_sc_hd__nor3b_1/B -> A +sky130_fd_sc_hd__nor3b_1/C_N -> +sky130_fd_sc_hd__nor3b_2/A -> B +sky130_fd_sc_hd__nor3b_2/B -> A +sky130_fd_sc_hd__nor3b_2/C_N -> +sky130_fd_sc_hd__nor3b_4/A -> B +sky130_fd_sc_hd__nor3b_4/B -> A +sky130_fd_sc_hd__nor3b_4/C_N -> +sky130_fd_sc_hd__nor4_1/A -> B C D +sky130_fd_sc_hd__nor4_1/B -> A C D +sky130_fd_sc_hd__nor4_1/C -> A B D +sky130_fd_sc_hd__nor4_1/D -> A B C +sky130_fd_sc_hd__nor4_2/A -> B C D +sky130_fd_sc_hd__nor4_2/B -> A C D +sky130_fd_sc_hd__nor4_2/C -> A B D +sky130_fd_sc_hd__nor4_2/D -> A B C +sky130_fd_sc_hd__nor4_4/A -> B C D +sky130_fd_sc_hd__nor4_4/B -> A C D +sky130_fd_sc_hd__nor4_4/C -> A B D +sky130_fd_sc_hd__nor4_4/D -> A B C +sky130_fd_sc_hd__nor4b_1/A -> B C +sky130_fd_sc_hd__nor4b_1/B -> A C +sky130_fd_sc_hd__nor4b_1/C -> A B +sky130_fd_sc_hd__nor4b_1/D_N -> +sky130_fd_sc_hd__nor4b_2/A -> B C +sky130_fd_sc_hd__nor4b_2/B -> A C +sky130_fd_sc_hd__nor4b_2/C -> A B +sky130_fd_sc_hd__nor4b_2/D_N -> +sky130_fd_sc_hd__nor4b_4/A -> B C +sky130_fd_sc_hd__nor4b_4/B -> A C +sky130_fd_sc_hd__nor4b_4/C -> A B +sky130_fd_sc_hd__nor4b_4/D_N -> +sky130_fd_sc_hd__nor4bb_1/A -> B +sky130_fd_sc_hd__nor4bb_1/B -> A +sky130_fd_sc_hd__nor4bb_1/C_N -> D_N +sky130_fd_sc_hd__nor4bb_1/D_N -> C_N +sky130_fd_sc_hd__nor4bb_2/A -> B +sky130_fd_sc_hd__nor4bb_2/B -> A +sky130_fd_sc_hd__nor4bb_2/C_N -> D_N +sky130_fd_sc_hd__nor4bb_2/D_N -> C_N +sky130_fd_sc_hd__nor4bb_4/A -> B +sky130_fd_sc_hd__nor4bb_4/B -> A +sky130_fd_sc_hd__nor4bb_4/C_N -> D_N +sky130_fd_sc_hd__nor4bb_4/D_N -> C_N +sky130_fd_sc_hd__o2111a_1/A1 -> A2 +sky130_fd_sc_hd__o2111a_1/A2 -> A1 +sky130_fd_sc_hd__o2111a_1/B1 -> C1 D1 +sky130_fd_sc_hd__o2111a_1/C1 -> B1 D1 +sky130_fd_sc_hd__o2111a_1/D1 -> B1 C1 +sky130_fd_sc_hd__o2111a_2/A1 -> A2 +sky130_fd_sc_hd__o2111a_2/A2 -> A1 +sky130_fd_sc_hd__o2111a_2/B1 -> C1 D1 +sky130_fd_sc_hd__o2111a_2/C1 -> B1 D1 +sky130_fd_sc_hd__o2111a_2/D1 -> B1 C1 +sky130_fd_sc_hd__o2111a_4/A1 -> A2 +sky130_fd_sc_hd__o2111a_4/A2 -> A1 +sky130_fd_sc_hd__o2111a_4/B1 -> C1 D1 +sky130_fd_sc_hd__o2111a_4/C1 -> B1 D1 +sky130_fd_sc_hd__o2111a_4/D1 -> B1 C1 +sky130_fd_sc_hd__o2111ai_1/A1 -> A2 +sky130_fd_sc_hd__o2111ai_1/A2 -> A1 +sky130_fd_sc_hd__o2111ai_1/B1 -> C1 D1 +sky130_fd_sc_hd__o2111ai_1/C1 -> B1 D1 +sky130_fd_sc_hd__o2111ai_1/D1 -> B1 C1 +sky130_fd_sc_hd__o2111ai_2/A1 -> A2 +sky130_fd_sc_hd__o2111ai_2/A2 -> A1 +sky130_fd_sc_hd__o2111ai_2/B1 -> C1 D1 +sky130_fd_sc_hd__o2111ai_2/C1 -> B1 D1 +sky130_fd_sc_hd__o2111ai_2/D1 -> B1 C1 +sky130_fd_sc_hd__o2111ai_4/A1 -> A2 +sky130_fd_sc_hd__o2111ai_4/A2 -> A1 +sky130_fd_sc_hd__o2111ai_4/B1 -> C1 D1 +sky130_fd_sc_hd__o2111ai_4/C1 -> B1 D1 +sky130_fd_sc_hd__o2111ai_4/D1 -> B1 C1 +sky130_fd_sc_hd__o211a_1/A1 -> A2 +sky130_fd_sc_hd__o211a_1/A2 -> A1 +sky130_fd_sc_hd__o211a_1/B1 -> C1 +sky130_fd_sc_hd__o211a_1/C1 -> B1 +sky130_fd_sc_hd__o211a_2/A1 -> A2 +sky130_fd_sc_hd__o211a_2/A2 -> A1 +sky130_fd_sc_hd__o211a_2/B1 -> C1 +sky130_fd_sc_hd__o211a_2/C1 -> B1 +sky130_fd_sc_hd__o211a_4/A1 -> A2 +sky130_fd_sc_hd__o211a_4/A2 -> A1 +sky130_fd_sc_hd__o211a_4/B1 -> C1 +sky130_fd_sc_hd__o211a_4/C1 -> B1 +sky130_fd_sc_hd__o211ai_1/A1 -> A2 +sky130_fd_sc_hd__o211ai_1/A2 -> A1 +sky130_fd_sc_hd__o211ai_1/B1 -> C1 +sky130_fd_sc_hd__o211ai_1/C1 -> B1 +sky130_fd_sc_hd__o211ai_2/A1 -> A2 +sky130_fd_sc_hd__o211ai_2/A2 -> A1 +sky130_fd_sc_hd__o211ai_2/B1 -> C1 +sky130_fd_sc_hd__o211ai_2/C1 -> B1 +sky130_fd_sc_hd__o211ai_4/A1 -> A2 +sky130_fd_sc_hd__o211ai_4/A2 -> A1 +sky130_fd_sc_hd__o211ai_4/B1 -> C1 +sky130_fd_sc_hd__o211ai_4/C1 -> B1 +sky130_fd_sc_hd__o21a_1/A1 -> A2 +sky130_fd_sc_hd__o21a_1/A2 -> A1 +sky130_fd_sc_hd__o21a_1/B1 -> +sky130_fd_sc_hd__o21a_2/A1 -> A2 +sky130_fd_sc_hd__o21a_2/A2 -> A1 +sky130_fd_sc_hd__o21a_2/B1 -> +sky130_fd_sc_hd__o21a_4/A1 -> A2 +sky130_fd_sc_hd__o21a_4/A2 -> A1 +sky130_fd_sc_hd__o21a_4/B1 -> +sky130_fd_sc_hd__o21ai_0/A1 -> A2 +sky130_fd_sc_hd__o21ai_0/A2 -> A1 +sky130_fd_sc_hd__o21ai_0/B1 -> +sky130_fd_sc_hd__o21ai_1/A1 -> A2 +sky130_fd_sc_hd__o21ai_1/A2 -> A1 +sky130_fd_sc_hd__o21ai_1/B1 -> +sky130_fd_sc_hd__o21ai_2/A1 -> A2 +sky130_fd_sc_hd__o21ai_2/A2 -> A1 +sky130_fd_sc_hd__o21ai_2/B1 -> +sky130_fd_sc_hd__o21ai_4/A1 -> A2 +sky130_fd_sc_hd__o21ai_4/A2 -> A1 +sky130_fd_sc_hd__o21ai_4/B1 -> +sky130_fd_sc_hd__o21ba_1/A1 -> A2 +sky130_fd_sc_hd__o21ba_1/A2 -> A1 +sky130_fd_sc_hd__o21ba_1/B1_N -> +sky130_fd_sc_hd__o21ba_2/A1 -> A2 +sky130_fd_sc_hd__o21ba_2/A2 -> A1 +sky130_fd_sc_hd__o21ba_2/B1_N -> +sky130_fd_sc_hd__o21ba_4/A1 -> A2 +sky130_fd_sc_hd__o21ba_4/A2 -> A1 +sky130_fd_sc_hd__o21ba_4/B1_N -> +sky130_fd_sc_hd__o21bai_1/A1 -> A2 +sky130_fd_sc_hd__o21bai_1/A2 -> A1 +sky130_fd_sc_hd__o21bai_1/B1_N -> +sky130_fd_sc_hd__o21bai_2/A1 -> A2 +sky130_fd_sc_hd__o21bai_2/A2 -> A1 +sky130_fd_sc_hd__o21bai_2/B1_N -> +sky130_fd_sc_hd__o21bai_4/A1 -> A2 +sky130_fd_sc_hd__o21bai_4/A2 -> A1 +sky130_fd_sc_hd__o21bai_4/B1_N -> +sky130_fd_sc_hd__o221a_1/A1 -> A2 +sky130_fd_sc_hd__o221a_1/A2 -> A1 +sky130_fd_sc_hd__o221a_1/B1 -> B2 +sky130_fd_sc_hd__o221a_1/B2 -> B1 +sky130_fd_sc_hd__o221a_1/C1 -> +sky130_fd_sc_hd__o221a_2/A1 -> A2 +sky130_fd_sc_hd__o221a_2/A2 -> A1 +sky130_fd_sc_hd__o221a_2/B1 -> B2 +sky130_fd_sc_hd__o221a_2/B2 -> B1 +sky130_fd_sc_hd__o221a_2/C1 -> +sky130_fd_sc_hd__o221a_4/A1 -> A2 +sky130_fd_sc_hd__o221a_4/A2 -> A1 +sky130_fd_sc_hd__o221a_4/B1 -> B2 +sky130_fd_sc_hd__o221a_4/B2 -> B1 +sky130_fd_sc_hd__o221a_4/C1 -> +sky130_fd_sc_hd__o221ai_1/A1 -> A2 +sky130_fd_sc_hd__o221ai_1/A2 -> A1 +sky130_fd_sc_hd__o221ai_1/B1 -> B2 +sky130_fd_sc_hd__o221ai_1/B2 -> B1 +sky130_fd_sc_hd__o221ai_1/C1 -> +sky130_fd_sc_hd__o221ai_2/A1 -> A2 +sky130_fd_sc_hd__o221ai_2/A2 -> A1 +sky130_fd_sc_hd__o221ai_2/B1 -> B2 +sky130_fd_sc_hd__o221ai_2/B2 -> B1 +sky130_fd_sc_hd__o221ai_2/C1 -> +sky130_fd_sc_hd__o221ai_4/A1 -> A2 +sky130_fd_sc_hd__o221ai_4/A2 -> A1 +sky130_fd_sc_hd__o221ai_4/B1 -> B2 +sky130_fd_sc_hd__o221ai_4/B2 -> B1 +sky130_fd_sc_hd__o221ai_4/C1 -> +sky130_fd_sc_hd__o22a_1/A1 -> A2 +sky130_fd_sc_hd__o22a_1/A2 -> A1 +sky130_fd_sc_hd__o22a_1/B1 -> B2 +sky130_fd_sc_hd__o22a_1/B2 -> B1 +sky130_fd_sc_hd__o22a_2/A1 -> A2 +sky130_fd_sc_hd__o22a_2/A2 -> A1 +sky130_fd_sc_hd__o22a_2/B1 -> B2 +sky130_fd_sc_hd__o22a_2/B2 -> B1 +sky130_fd_sc_hd__o22a_4/A1 -> A2 +sky130_fd_sc_hd__o22a_4/A2 -> A1 +sky130_fd_sc_hd__o22a_4/B1 -> B2 +sky130_fd_sc_hd__o22a_4/B2 -> B1 +sky130_fd_sc_hd__o22ai_1/A1 -> A2 +sky130_fd_sc_hd__o22ai_1/A2 -> A1 +sky130_fd_sc_hd__o22ai_1/B1 -> B2 +sky130_fd_sc_hd__o22ai_1/B2 -> B1 +sky130_fd_sc_hd__o22ai_2/A1 -> A2 +sky130_fd_sc_hd__o22ai_2/A2 -> A1 +sky130_fd_sc_hd__o22ai_2/B1 -> B2 +sky130_fd_sc_hd__o22ai_2/B2 -> B1 +sky130_fd_sc_hd__o22ai_4/A1 -> A2 +sky130_fd_sc_hd__o22ai_4/A2 -> A1 +sky130_fd_sc_hd__o22ai_4/B1 -> B2 +sky130_fd_sc_hd__o22ai_4/B2 -> B1 +sky130_fd_sc_hd__o2bb2a_1/A1_N -> A2_N +sky130_fd_sc_hd__o2bb2a_1/A2_N -> A1_N +sky130_fd_sc_hd__o2bb2a_1/B1 -> B2 +sky130_fd_sc_hd__o2bb2a_1/B2 -> B1 +sky130_fd_sc_hd__o2bb2a_2/A1_N -> A2_N +sky130_fd_sc_hd__o2bb2a_2/A2_N -> A1_N +sky130_fd_sc_hd__o2bb2a_2/B1 -> B2 +sky130_fd_sc_hd__o2bb2a_2/B2 -> B1 +sky130_fd_sc_hd__o2bb2a_4/A1_N -> A2_N +sky130_fd_sc_hd__o2bb2a_4/A2_N -> A1_N +sky130_fd_sc_hd__o2bb2a_4/B1 -> B2 +sky130_fd_sc_hd__o2bb2a_4/B2 -> B1 +sky130_fd_sc_hd__o2bb2ai_1/A1_N -> A2_N +sky130_fd_sc_hd__o2bb2ai_1/A2_N -> A1_N +sky130_fd_sc_hd__o2bb2ai_1/B1 -> B2 +sky130_fd_sc_hd__o2bb2ai_1/B2 -> B1 +sky130_fd_sc_hd__o2bb2ai_2/A1_N -> A2_N +sky130_fd_sc_hd__o2bb2ai_2/A2_N -> A1_N +sky130_fd_sc_hd__o2bb2ai_2/B1 -> B2 +sky130_fd_sc_hd__o2bb2ai_2/B2 -> B1 +sky130_fd_sc_hd__o2bb2ai_4/A1_N -> A2_N +sky130_fd_sc_hd__o2bb2ai_4/A2_N -> A1_N +sky130_fd_sc_hd__o2bb2ai_4/B1 -> B2 +sky130_fd_sc_hd__o2bb2ai_4/B2 -> B1 +sky130_fd_sc_hd__o311a_1/A1 -> A2 A3 +sky130_fd_sc_hd__o311a_1/A2 -> A1 A3 +sky130_fd_sc_hd__o311a_1/A3 -> A1 A2 +sky130_fd_sc_hd__o311a_1/B1 -> C1 +sky130_fd_sc_hd__o311a_1/C1 -> B1 +sky130_fd_sc_hd__o311a_2/A1 -> A2 A3 +sky130_fd_sc_hd__o311a_2/A2 -> A1 A3 +sky130_fd_sc_hd__o311a_2/A3 -> A1 A2 +sky130_fd_sc_hd__o311a_2/B1 -> C1 +sky130_fd_sc_hd__o311a_2/C1 -> B1 +sky130_fd_sc_hd__o311a_4/A1 -> A2 A3 +sky130_fd_sc_hd__o311a_4/A2 -> A1 A3 +sky130_fd_sc_hd__o311a_4/A3 -> A1 A2 +sky130_fd_sc_hd__o311a_4/B1 -> C1 +sky130_fd_sc_hd__o311a_4/C1 -> B1 +sky130_fd_sc_hd__o311ai_0/A1 -> A2 A3 +sky130_fd_sc_hd__o311ai_0/A2 -> A1 A3 +sky130_fd_sc_hd__o311ai_0/A3 -> A1 A2 +sky130_fd_sc_hd__o311ai_0/B1 -> C1 +sky130_fd_sc_hd__o311ai_0/C1 -> B1 +sky130_fd_sc_hd__o311ai_1/A1 -> A2 A3 +sky130_fd_sc_hd__o311ai_1/A2 -> A1 A3 +sky130_fd_sc_hd__o311ai_1/A3 -> A1 A2 +sky130_fd_sc_hd__o311ai_1/B1 -> C1 +sky130_fd_sc_hd__o311ai_1/C1 -> B1 +sky130_fd_sc_hd__o311ai_2/A1 -> A2 A3 +sky130_fd_sc_hd__o311ai_2/A2 -> A1 A3 +sky130_fd_sc_hd__o311ai_2/A3 -> A1 A2 +sky130_fd_sc_hd__o311ai_2/B1 -> C1 +sky130_fd_sc_hd__o311ai_2/C1 -> B1 +sky130_fd_sc_hd__o311ai_4/A1 -> A2 A3 +sky130_fd_sc_hd__o311ai_4/A2 -> A1 A3 +sky130_fd_sc_hd__o311ai_4/A3 -> A1 A2 +sky130_fd_sc_hd__o311ai_4/B1 -> C1 +sky130_fd_sc_hd__o311ai_4/C1 -> B1 +sky130_fd_sc_hd__o31a_1/A1 -> A2 A3 +sky130_fd_sc_hd__o31a_1/A2 -> A1 A3 +sky130_fd_sc_hd__o31a_1/A3 -> A1 A2 +sky130_fd_sc_hd__o31a_1/B1 -> +sky130_fd_sc_hd__o31a_2/A1 -> A2 A3 +sky130_fd_sc_hd__o31a_2/A2 -> A1 A3 +sky130_fd_sc_hd__o31a_2/A3 -> A1 A2 +sky130_fd_sc_hd__o31a_2/B1 -> +sky130_fd_sc_hd__o31a_4/A1 -> A2 A3 +sky130_fd_sc_hd__o31a_4/A2 -> A1 A3 +sky130_fd_sc_hd__o31a_4/A3 -> A1 A2 +sky130_fd_sc_hd__o31a_4/B1 -> +sky130_fd_sc_hd__o31ai_1/A1 -> A2 A3 +sky130_fd_sc_hd__o31ai_1/A2 -> A1 A3 +sky130_fd_sc_hd__o31ai_1/A3 -> A1 A2 +sky130_fd_sc_hd__o31ai_1/B1 -> +sky130_fd_sc_hd__o31ai_2/A1 -> A2 A3 +sky130_fd_sc_hd__o31ai_2/A2 -> A1 A3 +sky130_fd_sc_hd__o31ai_2/A3 -> A1 A2 +sky130_fd_sc_hd__o31ai_2/B1 -> +sky130_fd_sc_hd__o31ai_4/A1 -> A2 A3 +sky130_fd_sc_hd__o31ai_4/A2 -> A1 A3 +sky130_fd_sc_hd__o31ai_4/A3 -> A1 A2 +sky130_fd_sc_hd__o31ai_4/B1 -> +sky130_fd_sc_hd__o32a_1/A1 -> A2 A3 +sky130_fd_sc_hd__o32a_1/A2 -> A1 A3 +sky130_fd_sc_hd__o32a_1/A3 -> A1 A2 +sky130_fd_sc_hd__o32a_1/B1 -> B2 +sky130_fd_sc_hd__o32a_1/B2 -> B1 +sky130_fd_sc_hd__o32a_2/A1 -> A2 A3 +sky130_fd_sc_hd__o32a_2/A2 -> A1 A3 +sky130_fd_sc_hd__o32a_2/A3 -> A1 A2 +sky130_fd_sc_hd__o32a_2/B1 -> B2 +sky130_fd_sc_hd__o32a_2/B2 -> B1 +sky130_fd_sc_hd__o32a_4/A1 -> A2 A3 +sky130_fd_sc_hd__o32a_4/A2 -> A1 A3 +sky130_fd_sc_hd__o32a_4/A3 -> A1 A2 +sky130_fd_sc_hd__o32a_4/B1 -> B2 +sky130_fd_sc_hd__o32a_4/B2 -> B1 +sky130_fd_sc_hd__o32ai_1/A1 -> A2 A3 +sky130_fd_sc_hd__o32ai_1/A2 -> A1 A3 +sky130_fd_sc_hd__o32ai_1/A3 -> A1 A2 +sky130_fd_sc_hd__o32ai_1/B1 -> B2 +sky130_fd_sc_hd__o32ai_1/B2 -> B1 +sky130_fd_sc_hd__o32ai_2/A1 -> A2 A3 +sky130_fd_sc_hd__o32ai_2/A2 -> A1 A3 +sky130_fd_sc_hd__o32ai_2/A3 -> A1 A2 +sky130_fd_sc_hd__o32ai_2/B1 -> B2 +sky130_fd_sc_hd__o32ai_2/B2 -> B1 +sky130_fd_sc_hd__o32ai_4/A1 -> A2 A3 +sky130_fd_sc_hd__o32ai_4/A2 -> A1 A3 +sky130_fd_sc_hd__o32ai_4/A3 -> A1 A2 +sky130_fd_sc_hd__o32ai_4/B1 -> B2 +sky130_fd_sc_hd__o32ai_4/B2 -> B1 +sky130_fd_sc_hd__o41a_1/A1 -> A2 A3 A4 +sky130_fd_sc_hd__o41a_1/A2 -> A1 A3 A4 +sky130_fd_sc_hd__o41a_1/A3 -> A1 A2 A4 +sky130_fd_sc_hd__o41a_1/A4 -> A1 A2 A3 +sky130_fd_sc_hd__o41a_1/B1 -> +sky130_fd_sc_hd__o41a_2/A1 -> A2 A3 A4 +sky130_fd_sc_hd__o41a_2/A2 -> A1 A3 A4 +sky130_fd_sc_hd__o41a_2/A3 -> A1 A2 A4 +sky130_fd_sc_hd__o41a_2/A4 -> A1 A2 A3 +sky130_fd_sc_hd__o41a_2/B1 -> +sky130_fd_sc_hd__o41a_4/A1 -> A2 A3 A4 +sky130_fd_sc_hd__o41a_4/A2 -> A1 A3 A4 +sky130_fd_sc_hd__o41a_4/A3 -> A1 A2 A4 +sky130_fd_sc_hd__o41a_4/A4 -> A1 A2 A3 +sky130_fd_sc_hd__o41a_4/B1 -> +sky130_fd_sc_hd__o41ai_1/A1 -> A2 A3 A4 +sky130_fd_sc_hd__o41ai_1/A2 -> A1 A3 A4 +sky130_fd_sc_hd__o41ai_1/A3 -> A1 A2 A4 +sky130_fd_sc_hd__o41ai_1/A4 -> A1 A2 A3 +sky130_fd_sc_hd__o41ai_1/B1 -> +sky130_fd_sc_hd__o41ai_2/A1 -> A2 A3 A4 +sky130_fd_sc_hd__o41ai_2/A2 -> A1 A3 A4 +sky130_fd_sc_hd__o41ai_2/A3 -> A1 A2 A4 +sky130_fd_sc_hd__o41ai_2/A4 -> A1 A2 A3 +sky130_fd_sc_hd__o41ai_2/B1 -> +sky130_fd_sc_hd__o41ai_4/A1 -> A2 A3 A4 +sky130_fd_sc_hd__o41ai_4/A2 -> A1 A3 A4 +sky130_fd_sc_hd__o41ai_4/A3 -> A1 A2 A4 +sky130_fd_sc_hd__o41ai_4/A4 -> A1 A2 A3 +sky130_fd_sc_hd__o41ai_4/B1 -> +sky130_fd_sc_hd__or2_0/A -> B +sky130_fd_sc_hd__or2_0/B -> A +sky130_fd_sc_hd__or2_1/A -> B +sky130_fd_sc_hd__or2_1/B -> A +sky130_fd_sc_hd__or2_2/A -> B +sky130_fd_sc_hd__or2_2/B -> A +sky130_fd_sc_hd__or2_4/A -> B +sky130_fd_sc_hd__or2_4/B -> A +sky130_fd_sc_hd__or2b_1/A -> +sky130_fd_sc_hd__or2b_1/B_N -> +sky130_fd_sc_hd__or2b_2/A -> +sky130_fd_sc_hd__or2b_2/B_N -> +sky130_fd_sc_hd__or2b_4/A -> +sky130_fd_sc_hd__or2b_4/B_N -> +sky130_fd_sc_hd__or3_1/A -> B C +sky130_fd_sc_hd__or3_1/B -> A C +sky130_fd_sc_hd__or3_1/C -> A B +sky130_fd_sc_hd__or3_2/A -> B C +sky130_fd_sc_hd__or3_2/B -> A C +sky130_fd_sc_hd__or3_2/C -> A B +sky130_fd_sc_hd__or3_4/A -> B C +sky130_fd_sc_hd__or3_4/B -> A C +sky130_fd_sc_hd__or3_4/C -> A B +sky130_fd_sc_hd__or3b_1/A -> B +sky130_fd_sc_hd__or3b_1/B -> A +sky130_fd_sc_hd__or3b_1/C_N -> +sky130_fd_sc_hd__or3b_2/A -> B +sky130_fd_sc_hd__or3b_2/B -> A +sky130_fd_sc_hd__or3b_2/C_N -> +sky130_fd_sc_hd__or3b_4/A -> B +sky130_fd_sc_hd__or3b_4/B -> A +sky130_fd_sc_hd__or3b_4/C_N -> +sky130_fd_sc_hd__or4_1/A -> B C D +sky130_fd_sc_hd__or4_1/B -> A C D +sky130_fd_sc_hd__or4_1/C -> A B D +sky130_fd_sc_hd__or4_1/D -> A B C +sky130_fd_sc_hd__or4_2/A -> B C D +sky130_fd_sc_hd__or4_2/B -> A C D +sky130_fd_sc_hd__or4_2/C -> A B D +sky130_fd_sc_hd__or4_2/D -> A B C +sky130_fd_sc_hd__or4_4/A -> B C D +sky130_fd_sc_hd__or4_4/B -> A C D +sky130_fd_sc_hd__or4_4/C -> A B D +sky130_fd_sc_hd__or4_4/D -> A B C +sky130_fd_sc_hd__or4b_1/A -> B C +sky130_fd_sc_hd__or4b_1/B -> A C +sky130_fd_sc_hd__or4b_1/C -> A B +sky130_fd_sc_hd__or4b_1/D_N -> +sky130_fd_sc_hd__or4b_2/A -> B C +sky130_fd_sc_hd__or4b_2/B -> A C +sky130_fd_sc_hd__or4b_2/C -> A B +sky130_fd_sc_hd__or4b_2/D_N -> +sky130_fd_sc_hd__or4b_4/A -> B C +sky130_fd_sc_hd__or4b_4/B -> A C +sky130_fd_sc_hd__or4b_4/C -> A B +sky130_fd_sc_hd__or4b_4/D_N -> +sky130_fd_sc_hd__or4bb_1/A -> B +sky130_fd_sc_hd__or4bb_1/B -> A +sky130_fd_sc_hd__or4bb_1/C_N -> D_N +sky130_fd_sc_hd__or4bb_1/D_N -> C_N +sky130_fd_sc_hd__or4bb_2/A -> B +sky130_fd_sc_hd__or4bb_2/B -> A +sky130_fd_sc_hd__or4bb_2/C_N -> D_N +sky130_fd_sc_hd__or4bb_2/D_N -> C_N +sky130_fd_sc_hd__or4bb_4/A -> B +sky130_fd_sc_hd__or4bb_4/B -> A +sky130_fd_sc_hd__or4bb_4/C_N -> D_N +sky130_fd_sc_hd__or4bb_4/D_N -> C_N +sky130_fd_sc_hd__probe_p_8/A -> +sky130_fd_sc_hd__probec_p_8/A -> +sky130_fd_sc_hd__sdfbbn_1/CLK_N -> +sky130_fd_sc_hd__sdfbbn_1/D -> +sky130_fd_sc_hd__sdfbbn_1/RESET_B -> +sky130_fd_sc_hd__sdfbbn_1/SCD -> +sky130_fd_sc_hd__sdfbbn_1/SCE -> +sky130_fd_sc_hd__sdfbbn_1/SET_B -> +sky130_fd_sc_hd__sdfbbn_2/CLK_N -> +sky130_fd_sc_hd__sdfbbn_2/D -> +sky130_fd_sc_hd__sdfbbn_2/RESET_B -> +sky130_fd_sc_hd__sdfbbn_2/SCD -> +sky130_fd_sc_hd__sdfbbn_2/SCE -> +sky130_fd_sc_hd__sdfbbn_2/SET_B -> +sky130_fd_sc_hd__sdfbbp_1/CLK -> +sky130_fd_sc_hd__sdfbbp_1/D -> +sky130_fd_sc_hd__sdfbbp_1/RESET_B -> +sky130_fd_sc_hd__sdfbbp_1/SCD -> +sky130_fd_sc_hd__sdfbbp_1/SCE -> +sky130_fd_sc_hd__sdfbbp_1/SET_B -> +sky130_fd_sc_hd__sdfrbp_1/CLK -> +sky130_fd_sc_hd__sdfrbp_1/D -> +sky130_fd_sc_hd__sdfrbp_1/RESET_B -> +sky130_fd_sc_hd__sdfrbp_1/SCD -> +sky130_fd_sc_hd__sdfrbp_1/SCE -> +sky130_fd_sc_hd__sdfrbp_2/CLK -> +sky130_fd_sc_hd__sdfrbp_2/D -> +sky130_fd_sc_hd__sdfrbp_2/RESET_B -> +sky130_fd_sc_hd__sdfrbp_2/SCD -> +sky130_fd_sc_hd__sdfrbp_2/SCE -> +sky130_fd_sc_hd__sdfrtn_1/CLK_N -> +sky130_fd_sc_hd__sdfrtn_1/D -> +sky130_fd_sc_hd__sdfrtn_1/RESET_B -> +sky130_fd_sc_hd__sdfrtn_1/SCD -> +sky130_fd_sc_hd__sdfrtn_1/SCE -> +sky130_fd_sc_hd__sdfrtp_1/CLK -> +sky130_fd_sc_hd__sdfrtp_1/D -> +sky130_fd_sc_hd__sdfrtp_1/RESET_B -> +sky130_fd_sc_hd__sdfrtp_1/SCD -> +sky130_fd_sc_hd__sdfrtp_1/SCE -> +sky130_fd_sc_hd__sdfrtp_2/CLK -> +sky130_fd_sc_hd__sdfrtp_2/D -> +sky130_fd_sc_hd__sdfrtp_2/RESET_B -> +sky130_fd_sc_hd__sdfrtp_2/SCD -> +sky130_fd_sc_hd__sdfrtp_2/SCE -> +sky130_fd_sc_hd__sdfrtp_4/CLK -> +sky130_fd_sc_hd__sdfrtp_4/D -> +sky130_fd_sc_hd__sdfrtp_4/RESET_B -> +sky130_fd_sc_hd__sdfrtp_4/SCD -> +sky130_fd_sc_hd__sdfrtp_4/SCE -> +sky130_fd_sc_hd__sdfsbp_1/CLK -> +sky130_fd_sc_hd__sdfsbp_1/D -> +sky130_fd_sc_hd__sdfsbp_1/SCD -> +sky130_fd_sc_hd__sdfsbp_1/SCE -> +sky130_fd_sc_hd__sdfsbp_1/SET_B -> +sky130_fd_sc_hd__sdfsbp_2/CLK -> +sky130_fd_sc_hd__sdfsbp_2/D -> +sky130_fd_sc_hd__sdfsbp_2/SCD -> +sky130_fd_sc_hd__sdfsbp_2/SCE -> +sky130_fd_sc_hd__sdfsbp_2/SET_B -> +sky130_fd_sc_hd__sdfstp_1/CLK -> +sky130_fd_sc_hd__sdfstp_1/D -> +sky130_fd_sc_hd__sdfstp_1/SCD -> +sky130_fd_sc_hd__sdfstp_1/SCE -> +sky130_fd_sc_hd__sdfstp_1/SET_B -> +sky130_fd_sc_hd__sdfstp_2/CLK -> +sky130_fd_sc_hd__sdfstp_2/D -> +sky130_fd_sc_hd__sdfstp_2/SCD -> +sky130_fd_sc_hd__sdfstp_2/SCE -> +sky130_fd_sc_hd__sdfstp_2/SET_B -> +sky130_fd_sc_hd__sdfstp_4/CLK -> +sky130_fd_sc_hd__sdfstp_4/D -> +sky130_fd_sc_hd__sdfstp_4/SCD -> +sky130_fd_sc_hd__sdfstp_4/SCE -> +sky130_fd_sc_hd__sdfstp_4/SET_B -> +sky130_fd_sc_hd__sdfxbp_1/CLK -> +sky130_fd_sc_hd__sdfxbp_1/D -> +sky130_fd_sc_hd__sdfxbp_1/SCD -> +sky130_fd_sc_hd__sdfxbp_1/SCE -> +sky130_fd_sc_hd__sdfxbp_2/CLK -> +sky130_fd_sc_hd__sdfxbp_2/D -> +sky130_fd_sc_hd__sdfxbp_2/SCD -> +sky130_fd_sc_hd__sdfxbp_2/SCE -> +sky130_fd_sc_hd__sdfxtp_1/CLK -> +sky130_fd_sc_hd__sdfxtp_1/D -> +sky130_fd_sc_hd__sdfxtp_1/SCD -> +sky130_fd_sc_hd__sdfxtp_1/SCE -> +sky130_fd_sc_hd__sdfxtp_2/CLK -> +sky130_fd_sc_hd__sdfxtp_2/D -> +sky130_fd_sc_hd__sdfxtp_2/SCD -> +sky130_fd_sc_hd__sdfxtp_2/SCE -> +sky130_fd_sc_hd__sdfxtp_4/CLK -> +sky130_fd_sc_hd__sdfxtp_4/D -> +sky130_fd_sc_hd__sdfxtp_4/SCD -> +sky130_fd_sc_hd__sdfxtp_4/SCE -> +sky130_fd_sc_hd__sdlclkp_1/CLK -> +sky130_fd_sc_hd__sdlclkp_1/GATE -> +sky130_fd_sc_hd__sdlclkp_1/SCE -> +sky130_fd_sc_hd__sdlclkp_2/CLK -> +sky130_fd_sc_hd__sdlclkp_2/GATE -> +sky130_fd_sc_hd__sdlclkp_2/SCE -> +sky130_fd_sc_hd__sdlclkp_4/CLK -> +sky130_fd_sc_hd__sdlclkp_4/GATE -> +sky130_fd_sc_hd__sdlclkp_4/SCE -> +sky130_fd_sc_hd__sedfxbp_1/CLK -> +sky130_fd_sc_hd__sedfxbp_1/D -> +sky130_fd_sc_hd__sedfxbp_1/DE -> +sky130_fd_sc_hd__sedfxbp_1/SCD -> +sky130_fd_sc_hd__sedfxbp_1/SCE -> +sky130_fd_sc_hd__sedfxbp_2/CLK -> +sky130_fd_sc_hd__sedfxbp_2/D -> +sky130_fd_sc_hd__sedfxbp_2/DE -> +sky130_fd_sc_hd__sedfxbp_2/SCD -> +sky130_fd_sc_hd__sedfxbp_2/SCE -> +sky130_fd_sc_hd__sedfxtp_1/CLK -> +sky130_fd_sc_hd__sedfxtp_1/D -> +sky130_fd_sc_hd__sedfxtp_1/DE -> +sky130_fd_sc_hd__sedfxtp_1/SCD -> +sky130_fd_sc_hd__sedfxtp_1/SCE -> +sky130_fd_sc_hd__sedfxtp_2/CLK -> +sky130_fd_sc_hd__sedfxtp_2/D -> +sky130_fd_sc_hd__sedfxtp_2/DE -> +sky130_fd_sc_hd__sedfxtp_2/SCD -> +sky130_fd_sc_hd__sedfxtp_2/SCE -> +sky130_fd_sc_hd__sedfxtp_4/CLK -> +sky130_fd_sc_hd__sedfxtp_4/D -> +sky130_fd_sc_hd__sedfxtp_4/DE -> +sky130_fd_sc_hd__sedfxtp_4/SCD -> +sky130_fd_sc_hd__sedfxtp_4/SCE -> +sky130_fd_sc_hd__xnor2_1/A -> B +sky130_fd_sc_hd__xnor2_1/B -> A +sky130_fd_sc_hd__xnor2_2/A -> B +sky130_fd_sc_hd__xnor2_2/B -> A +sky130_fd_sc_hd__xnor2_4/A -> B +sky130_fd_sc_hd__xnor2_4/B -> A +sky130_fd_sc_hd__xnor3_1/A -> B C +sky130_fd_sc_hd__xnor3_1/B -> A C +sky130_fd_sc_hd__xnor3_1/C -> A B +sky130_fd_sc_hd__xnor3_2/A -> B C +sky130_fd_sc_hd__xnor3_2/B -> A C +sky130_fd_sc_hd__xnor3_2/C -> A B +sky130_fd_sc_hd__xnor3_4/A -> B C +sky130_fd_sc_hd__xnor3_4/B -> A C +sky130_fd_sc_hd__xnor3_4/C -> A B +sky130_fd_sc_hd__xor2_1/A -> B +sky130_fd_sc_hd__xor2_1/B -> A +sky130_fd_sc_hd__xor2_2/A -> B +sky130_fd_sc_hd__xor2_2/B -> A +sky130_fd_sc_hd__xor2_4/A -> B +sky130_fd_sc_hd__xor2_4/B -> A +sky130_fd_sc_hd__xor3_1/A -> B C +sky130_fd_sc_hd__xor3_1/B -> A C +sky130_fd_sc_hd__xor3_1/C -> A B +sky130_fd_sc_hd__xor3_2/A -> B C +sky130_fd_sc_hd__xor3_2/B -> A C +sky130_fd_sc_hd__xor3_2/C -> A B +sky130_fd_sc_hd__xor3_4/A -> B C +sky130_fd_sc_hd__xor3_4/B -> A C +sky130_fd_sc_hd__xor3_4/C -> A B From db347cf43dd75ccea1d59dd5b4d8d5f4973fbff4 Mon Sep 17 00:00:00 2001 From: Ethan Mahintorabi Date: Thu, 15 Feb 2024 22:37:10 +0000 Subject: [PATCH 2/7] fixes ok file in pin_swap from spurious logging Signed-off-by: Ethan Mahintorabi Signed-off-by: Matt Liberty --- src/rsz/test/pin_swap1.ok | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/rsz/test/pin_swap1.ok b/src/rsz/test/pin_swap1.ok index fe2fe53c643..b7c4d56b174 100644 --- a/src/rsz/test/pin_swap1.ok +++ b/src/rsz/test/pin_swap1.ok @@ -306,9 +306,7 @@ sky130_fd_sc_hd__a41oi_4/A2 -> A1 A3 A4 sky130_fd_sc_hd__a41oi_4/A3 -> A1 A2 A4 sky130_fd_sc_hd__a41oi_4/A4 -> A1 A2 A3 sky130_fd_sc_hd__a41oi_4/B1 -> -[INFO RSZ-1000] sup sky130_fd_sc_hd__and2_0/A -> B -[INFO RSZ-1000] sup sky130_fd_sc_hd__and2_0/B -> A sky130_fd_sc_hd__and2_1/A -> B sky130_fd_sc_hd__and2_1/B -> A From 1f12ce64953611ca8a63e57ed4e7d0f95b274aec Mon Sep 17 00:00:00 2001 From: Ethan Mahintorabi Date: Fri, 16 Feb 2024 06:59:41 +0000 Subject: [PATCH 3/7] Adding multi-output cell and cleaning up PR comments Signed-off-by: Ethan Mahintorabi Signed-off-by: Matt Liberty --- src/rsz/src/RepairSetup.cc | 78 ++++++++++++++++++++++++-------------- src/rsz/src/RepairSetup.hh | 5 +-- src/rsz/test/pin_swap1.ok | 46 +++++++++++----------- 3 files changed, 74 insertions(+), 55 deletions(-) diff --git a/src/rsz/src/RepairSetup.cc b/src/rsz/src/RepairSetup.cc index 8e66cf8dbfc..85476f7f125 100644 --- a/src/rsz/src/RepairSetup.cc +++ b/src/rsz/src/RepairSetup.cc @@ -526,13 +526,13 @@ bool RepairSetup::swapPins(PathRef *drvr_path, } // Find the equivalent pins for a cell (simple implementation for now) - // stash them - auto cell_port_pair = std::pair(cell, input_port); - if (equiv_pin_map_.find(cell_port_pair) == equiv_pin_map_.end()) { + // stash them. Ports are unique to a cell so we can just cache by port + // and that should apply to all instances of that cell with this input_port. + if (equiv_pin_map_.find(input_port) == equiv_pin_map_.end()) { equivCellPins(cell, input_port, ports); - equiv_pin_map_.insert(cell_port_pair, ports); + equiv_pin_map_.insert(input_port, ports); } - ports = equiv_pin_map_[cell_port_pair]; + ports = equiv_pin_map_[input_port]; if (ports.size() > 1) { resizer_->findSwapPinCandidate(input_port, drvr_port, load_cap, dcalc_ap, &swap_port); @@ -938,6 +938,10 @@ bool RepairSetup::isPortEqiv(sta::FuncExpr* expr, const LibertyPort* port_a, const LibertyPort* port_b) { + if (port_a->libertyCell() != cell || port_a->libertyCell() != cell) { + return false; + } + sta::LibertyCellPortIterator port_iter(cell); sta::UnorderedMap> port_stimulus; size_t input_port_count = 0; @@ -966,14 +970,7 @@ bool RepairSetup::isPortEqiv(sta::FuncExpr* expr, } var_index++; } - - if (port_stimulus.find(port_a) == port_stimulus.end()) { - return false; - } - if (port_stimulus.find(port_b) == port_stimulus.end()) { - return false; - } - + std::vector result_no_swap = simulateExpr(expr, port_stimulus); // Swap pins @@ -1008,36 +1005,61 @@ void RepairSetup::equivCellPins(const LibertyCell* cell, int outputs = 0; int inputs = 0; - // count number of output ports. Skip ports with > 1 output for now. - LibertyPort* output_port = nullptr; + // count number of output ports. while (port_iter.hasNext()) { LibertyPort *port = port_iter.next(); if (port->direction()->isOutput()) { - output_port = port; ++outputs; } else { ++inputs; } } - if (output_port == nullptr) { - return; - } + if (outputs >= 1 && inputs >= 2) { + sta::LibertyCellPortIterator port_iter2(cell); + while (port_iter2.hasNext()) { + LibertyPort* candidate_port = port_iter2.next(); + if (!candidate_port->direction()->isInput()) { + continue; + } - sta::FuncExpr* expr = output_port->function(); - if (outputs == 1 && inputs >= 2) { - sta::LibertyCellPortIterator port_iter2(cell); - while (port_iter2.hasNext()) { - LibertyPort* candidate_port = port_iter2.next(); - if (!candidate_port->direction()->isInput()) { + sta::LibertyCellPortIterator output_port_iter(cell); + std::optional is_equivalent; + // Loop through all the output ports and make sure they are equivalent + // under swaps of candidate_port and input_port. For multi-ouput gates + // like full adders. + while (output_port_iter.hasNext()) { + LibertyPort* output_candidate_port = output_port_iter.next(); + sta::FuncExpr* output_expr = output_candidate_port->function(); + if (!output_candidate_port->direction()->isOutput()) { continue; } - if (expr != nullptr && input_port != candidate_port - && isPortEqiv(expr, cell, input_port, candidate_port)) { - ports.insert(candidate_port); + if (output_expr == nullptr) { + continue; + } + + if (input_port == candidate_port) { + continue; } + + bool is_equivalent_result + = isPortEqiv(output_expr, cell, input_port, candidate_port); + + if (!is_equivalent.has_value()) { + is_equivalent = is_equivalent_result; + continue; + } + + is_equivalent = is_equivalent.value() && is_equivalent_result; } + + // candidate_port is equivalent to input_port under all output ports + // of this cell. + if (is_equivalent.has_value() && is_equivalent.value()) { + ports.insert(candidate_port); + } + } } } diff --git a/src/rsz/src/RepairSetup.hh b/src/rsz/src/RepairSetup.hh index 71502b412c0..f16827af5fb 100644 --- a/src/rsz/src/RepairSetup.hh +++ b/src/rsz/src/RepairSetup.hh @@ -178,10 +178,7 @@ private: const MinMax *min_; const MinMax *max_; - sta::UnorderedMap, - sta::LibertyPortSet, - boost::hash>> - equiv_pin_map_; + sta::UnorderedMap equiv_pin_map_; static constexpr int decreasing_slack_max_passes_ = 50; static constexpr int rebuffer_max_fanout_ = 20; diff --git a/src/rsz/test/pin_swap1.ok b/src/rsz/test/pin_swap1.ok index b7c4d56b174..84285679f14 100644 --- a/src/rsz/test/pin_swap1.ok +++ b/src/rsz/test/pin_swap1.ok @@ -549,30 +549,30 @@ sky130_fd_sc_hd__einvp_4/A -> sky130_fd_sc_hd__einvp_4/TE -> sky130_fd_sc_hd__einvp_8/A -> sky130_fd_sc_hd__einvp_8/TE -> -sky130_fd_sc_hd__fa_1/A -> -sky130_fd_sc_hd__fa_1/B -> -sky130_fd_sc_hd__fa_1/CIN -> -sky130_fd_sc_hd__fa_2/A -> -sky130_fd_sc_hd__fa_2/B -> -sky130_fd_sc_hd__fa_2/CIN -> -sky130_fd_sc_hd__fa_4/A -> -sky130_fd_sc_hd__fa_4/B -> -sky130_fd_sc_hd__fa_4/CIN -> -sky130_fd_sc_hd__fah_1/A -> -sky130_fd_sc_hd__fah_1/B -> -sky130_fd_sc_hd__fah_1/CI -> -sky130_fd_sc_hd__fahcin_1/A -> -sky130_fd_sc_hd__fahcin_1/B -> +sky130_fd_sc_hd__fa_1/A -> B CIN +sky130_fd_sc_hd__fa_1/B -> A CIN +sky130_fd_sc_hd__fa_1/CIN -> A B +sky130_fd_sc_hd__fa_2/A -> B CIN +sky130_fd_sc_hd__fa_2/B -> A CIN +sky130_fd_sc_hd__fa_2/CIN -> A B +sky130_fd_sc_hd__fa_4/A -> B CIN +sky130_fd_sc_hd__fa_4/B -> A CIN +sky130_fd_sc_hd__fa_4/CIN -> A B +sky130_fd_sc_hd__fah_1/A -> B CI +sky130_fd_sc_hd__fah_1/B -> A CI +sky130_fd_sc_hd__fah_1/CI -> A B +sky130_fd_sc_hd__fahcin_1/A -> B +sky130_fd_sc_hd__fahcin_1/B -> A sky130_fd_sc_hd__fahcin_1/CIN -> -sky130_fd_sc_hd__fahcon_1/A -> -sky130_fd_sc_hd__fahcon_1/B -> -sky130_fd_sc_hd__fahcon_1/CI -> -sky130_fd_sc_hd__ha_1/A -> -sky130_fd_sc_hd__ha_1/B -> -sky130_fd_sc_hd__ha_2/A -> -sky130_fd_sc_hd__ha_2/B -> -sky130_fd_sc_hd__ha_4/A -> -sky130_fd_sc_hd__ha_4/B -> +sky130_fd_sc_hd__fahcon_1/A -> B CI +sky130_fd_sc_hd__fahcon_1/B -> A CI +sky130_fd_sc_hd__fahcon_1/CI -> A B +sky130_fd_sc_hd__ha_1/A -> B +sky130_fd_sc_hd__ha_1/B -> A +sky130_fd_sc_hd__ha_2/A -> B +sky130_fd_sc_hd__ha_2/B -> A +sky130_fd_sc_hd__ha_4/A -> B +sky130_fd_sc_hd__ha_4/B -> A sky130_fd_sc_hd__inv_1/A -> sky130_fd_sc_hd__inv_12/A -> sky130_fd_sc_hd__inv_16/A -> From b5bbf64eb1f6ea9ede663072535543e29503f72c Mon Sep 17 00:00:00 2001 From: Ethan Mahintorabi Date: Fri, 16 Feb 2024 07:05:51 +0000 Subject: [PATCH 4/7] removing boost dep Signed-off-by: Ethan Mahintorabi Signed-off-by: Matt Liberty --- src/rsz/src/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/src/rsz/src/CMakeLists.txt b/src/rsz/src/CMakeLists.txt index 02f00eb4e01..f6eb7da7a72 100644 --- a/src/rsz/src/CMakeLists.txt +++ b/src/rsz/src/CMakeLists.txt @@ -78,7 +78,6 @@ target_link_libraries(rsz_lib dbSta_lib grt_lib utl_lib - Boost::boost ) target_link_libraries(rsz From db116cf91fa4e1dc5a510e47cc40f48f8c744142 Mon Sep 17 00:00:00 2001 From: Ethan Mahintorabi Date: Tue, 20 Feb 2024 16:39:07 +0000 Subject: [PATCH 5/7] fixing off by one error on change to new equivalence algo Signed-off-by: Ethan Mahintorabi Signed-off-by: Matt Liberty --- src/rsz/src/RepairSetup.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rsz/src/RepairSetup.cc b/src/rsz/src/RepairSetup.cc index 85476f7f125..4e941512876 100644 --- a/src/rsz/src/RepairSetup.cc +++ b/src/rsz/src/RepairSetup.cc @@ -533,7 +533,7 @@ bool RepairSetup::swapPins(PathRef *drvr_path, equiv_pin_map_.insert(input_port, ports); } ports = equiv_pin_map_[input_port]; - if (ports.size() > 1) { + if (!ports.empty()) { resizer_->findSwapPinCandidate(input_port, drvr_port, load_cap, dcalc_ap, &swap_port); if (!sta::LibertyPort::equiv(swap_port, input_port)) { From b484fcbc14e222bde218fc8d44c1fe5b509684b8 Mon Sep 17 00:00:00 2001 From: Ethan Mahintorabi Date: Wed, 21 Feb 2024 05:21:35 +0000 Subject: [PATCH 6/7] fixes bugs in pin swapping output to output arcs Signed-off-by: Ethan Mahintorabi Signed-off-by: Matt Liberty --- src/rsz/src/RepairSetup.cc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/rsz/src/RepairSetup.cc b/src/rsz/src/RepairSetup.cc index 4e941512876..14f792a39cc 100644 --- a/src/rsz/src/RepairSetup.cc +++ b/src/rsz/src/RepairSetup.cc @@ -502,6 +502,11 @@ bool RepairSetup::swapPins(PathRef *drvr_path, LibertyPort *swap_port = input_port; sta::LibertyPortSet ports; + //Skip output to output paths + if (input_port->direction()->isOutput()) { + return false; + } + // Results for > 2 input gates are unpredictable. Only swap pins for // 2 input gates for now. int input_port_count = 0; @@ -938,7 +943,7 @@ bool RepairSetup::isPortEqiv(sta::FuncExpr* expr, const LibertyPort* port_a, const LibertyPort* port_b) { - if (port_a->libertyCell() != cell || port_a->libertyCell() != cell) { + if (port_a->libertyCell() != cell || port_b->libertyCell() != cell) { return false; } From 282e1408d6ab244f8cba232f5e0bd465ac5268d4 Mon Sep 17 00:00:00 2001 From: Matt Liberty Date: Wed, 13 Mar 2024 14:35:15 -0700 Subject: [PATCH 7/7] Update the metrics for pin swapping robustness Accept: aes_sky130hs DRT::max_slew_slack -26% < -10% DRT::max_capacitance_slack -29% < -12% aes_sky130hd GRT::ANT::errors 4 > 2 ; DRT::worst_slack_max -1.95 <= -1.78 ; DRT::max_slew_slack -57% < -19% ; DRT::max_capacitance_slack -64% < -22% ibex_sky130hd DRT::max_slew_slack -13% < -1% Signed-off-by: Matt Liberty --- test/aes_sky130hd.metrics | 84 +++++++++++++++---------------- test/aes_sky130hd.metrics_limits | 24 ++++----- test/aes_sky130hs.metrics | 76 ++++++++++++++-------------- test/aes_sky130hs.metrics_limits | 24 ++++----- test/ibex_sky130hd.metrics | 84 +++++++++++++++---------------- test/ibex_sky130hd.metrics_limits | 18 +++---- 6 files changed, 150 insertions(+), 160 deletions(-) diff --git a/test/aes_sky130hd.metrics b/test/aes_sky130hd.metrics index 2b6035230e7..85289f17a62 100644 --- a/test/aes_sky130hd.metrics +++ b/test/aes_sky130hd.metrics @@ -8,66 +8,62 @@ "design__instance__displacement__max": 13.233, "route__wirelength__estimated": 1.17088e+06, "RSZ::repair_design_buffer_count": "281", - "RSZ::max_slew_slack": "20.003902912139893", + "RSZ::max_slew_slack": "20.003910859425865", "RSZ::max_fanout_slack": "100.0", "RSZ::max_capacitance_slack": "81.39344276789393", "design__instance__displacement__total": 197.112, "design__instance__displacement__mean": 0.003, "design__instance__displacement__max": 9.05, "route__wirelength__estimated": 1.18573e+06, - "design__instance__count__setup_buffer": 1081, + "design__instance__count__setup_buffer": 954, "design__instance__count__hold_buffer": 333, - "RSZ::worst_slack_min": "0.0005067058027695403", - "RSZ::worst_slack_max": "-0.5759526352198947", - "RSZ::tns_max": "-78.18505530964731", + "RSZ::worst_slack_min": "0.0005062617135471305", + "RSZ::worst_slack_max": "-0.6463043616556046", + "RSZ::tns_max": "-85.86547538252458", "RSZ::hold_buffer_count": "333", - "design__instance__displacement__total": 6660.01, - "design__instance__displacement__mean": 0.117, - "design__instance__displacement__max": 13.635, - "route__wirelength__estimated": 1.28658e+06, - "DPL::utilization": "7.4", - "DPL::design_area": "222431", - "route__net": 16791, + "design__instance__displacement__total": 5837.85, + "design__instance__displacement__mean": 0.102, + "design__instance__displacement__max": 14.767, + "route__wirelength__estimated": 1.27657e+06, + "DPL::utilization": "7.3", + "DPL::design_area": "220994", + "route__net": 16664, "route__net__special": 2, - "antenna__violating__nets": 2, - "antenna__violating__pins": 2, - "GRT::ANT::errors": "2", + "antenna__violating__nets": 4, + "antenna__violating__pins": 4, + "GRT::ANT::errors": "4", "design__violations": 0, - "route__net": 16791, + "route__net": 16664, "route__net__special": 2, - "route__drc_errors__iter:1": 15985, - "route__wirelength__iter:1": 1630419, - "route__drc_errors__iter:2": 4907, - "route__wirelength__iter:2": 1624443, - "route__drc_errors__iter:3": 4319, - "route__wirelength__iter:3": 1621538, - "route__drc_errors__iter:4": 333, - "route__wirelength__iter:4": 1622283, - "route__drc_errors__iter:5": 46, - "route__wirelength__iter:5": 1622217, - "route__drc_errors__iter:6": 27, - "route__wirelength__iter:6": 1622221, - "route__drc_errors__iter:7": 14, - "route__wirelength__iter:7": 1622225, - "route__drc_errors__iter:8": 0, - "route__wirelength__iter:8": 1622218, + "route__drc_errors__iter:1": 13062, + "route__wirelength__iter:1": 1614494, + "route__drc_errors__iter:2": 3073, + "route__wirelength__iter:2": 1607769, + "route__drc_errors__iter:3": 2280, + "route__wirelength__iter:3": 1604834, + "route__drc_errors__iter:4": 153, + "route__wirelength__iter:4": 1605172, + "route__drc_errors__iter:5": 6, + "route__wirelength__iter:5": 1605168, + "route__drc_errors__iter:6": 0, + "route__wirelength__iter:6": 1605166, "route__drc_errors": 0, - "route__wirelength": 1622218, - "route__vias": 160226, - "route__vias__singlecut": 160226, + "route__wirelength": 1605166, + "route__vias": 159126, + "route__vias__singlecut": 159126, "route__vias__multicut": 0, "DRT::drv": "0", - "antenna__violating__nets": 99, - "antenna__violating__pins": 101, - "DRT::ANT::errors": "99", + "antenna__violating__nets": 93, + "antenna__violating__pins": 96, + "DRT::ANT::errors": "93", "timing__drv__floating__nets": 0, "timing__drv__floating__pins": 0, - "DRT::worst_slack_min": "-0.18114499302169298", - "DRT::worst_slack_max": "-1.4094996679877951", - "DRT::tns_max": "-157.54720995950018", - "DRT::clock_skew": "0.6833649395333666", - "DRT::max_slew_slack": "-15.645448366800943", + "DRT::worst_slack_min": "-0.26316471968699706", + "DRT::worst_slack_max": "-1.9527340297466504", + "DRT::tns_max": "-162.78936703852108", + "DRT::clock_skew": "0.7300389388532439", + "DRT::max_slew_slack": "-57.365993658701576", "DRT::max_fanout_slack": "100.0", - "DRT::max_capacitance_slack": "-17.951310626834886", + "DRT::max_capacitance_slack": "-64.29223093140345", "DRT::clock_period": "3.740000" } \ No newline at end of file diff --git a/test/aes_sky130hd.metrics_limits b/test/aes_sky130hd.metrics_limits index 558010e77d2..ab09adae8fd 100644 --- a/test/aes_sky130hd.metrics_limits +++ b/test/aes_sky130hd.metrics_limits @@ -1,23 +1,23 @@ { "IFP::instance_count" : "20652.0" - ,"DPL::design_area" : "266917.2" - ,"DPL::utilization" : "8.88" + ,"DPL::design_area" : "265192.8" + ,"DPL::utilization" : "8.76" ,"RSZ::repair_design_buffer_count" : "337" ,"RSZ::max_slew_slack" : "0" ,"RSZ::max_capacitance_slack" : "0" ,"RSZ::max_fanout_slack" : "0" - ,"RSZ::worst_slack_min" : "-0.37349329419723054" - ,"RSZ::worst_slack_max" : "-0.9499526352198948" - ,"RSZ::tns_max" : "-721.8390553096474" + ,"RSZ::worst_slack_min" : "-0.37349373828645294" + ,"RSZ::worst_slack_max" : "-1.0203043616556047" + ,"RSZ::tns_max" : "-729.5194753825247" ,"RSZ::hold_buffer_count" : "399" - ,"GRT::ANT::errors" : "2" + ,"GRT::ANT::errors" : "4" ,"DRT::drv" : "0" - ,"DRT::worst_slack_min" : "-0.5551449930216931" - ,"DRT::worst_slack_max" : "-1.7834996679877952" - ,"DRT::tns_max" : "-801.2012099595003" - ,"DRT::clock_skew" : "0.8200379274400399" - ,"DRT::max_slew_slack" : "-18.774538040161133" - ,"DRT::max_capacitance_slack" : "-21.541572752201862" + ,"DRT::worst_slack_min" : "-0.6371647196869972" + ,"DRT::worst_slack_max" : "-2.3267340297466506" + ,"DRT::tns_max" : "-806.4433670385212" + ,"DRT::clock_skew" : "0.8760467266238926" + ,"DRT::max_slew_slack" : "-68.8391923904419" + ,"DRT::max_capacitance_slack" : "-77.15067711768414" ,"DRT::max_fanout_slack" : "0" ,"DRT::clock_period" : "3.74" } diff --git a/test/aes_sky130hs.metrics b/test/aes_sky130hs.metrics index f31c7f26c1f..8497b52a03b 100644 --- a/test/aes_sky130hs.metrics +++ b/test/aes_sky130hs.metrics @@ -8,62 +8,60 @@ "design__instance__displacement__max": 17.474, "route__wirelength__estimated": 1.3173e+06, "RSZ::repair_design_buffer_count": "518", - "RSZ::max_slew_slack": "19.69558447599411", + "RSZ::max_slew_slack": "19.68039721250534", "RSZ::max_fanout_slack": "100.0", "RSZ::max_capacitance_slack": "56.280056146899526", - "design__instance__displacement__total": 213.084, + "design__instance__displacement__total": 208.702, "design__instance__displacement__mean": 0.004, "design__instance__displacement__max": 5.928, - "route__wirelength__estimated": 1.33444e+06, - "design__instance__count__setup_buffer": 841, - "design__instance__count__hold_buffer": 630, - "RSZ::worst_slack_min": "0.0005018208213230328", - "RSZ::worst_slack_max": "-0.6879021991187272", - "RSZ::tns_max": "-97.86111398227129", - "RSZ::hold_buffer_count": "630", - "design__instance__displacement__total": 7598.82, - "design__instance__displacement__mean": 0.155, - "design__instance__displacement__max": 16.235, - "route__wirelength__estimated": 1.3884e+06, - "DPL::utilization": "10.2", - "DPL::design_area": "307836", - "route__net": 16603, + "route__wirelength__estimated": 1.33431e+06, + "design__instance__count__setup_buffer": 1048, + "design__instance__count__hold_buffer": 603, + "RSZ::worst_slack_min": "0.0005535572157337702", + "RSZ::worst_slack_max": "-0.6330927072889141", + "RSZ::tns_max": "-92.18982460585138", + "RSZ::hold_buffer_count": "603", + "design__instance__displacement__total": 8845.2, + "design__instance__displacement__mean": 0.18, + "design__instance__displacement__max": 15.665, + "route__wirelength__estimated": 1.39611e+06, + "DPL::utilization": "10.3", + "DPL::design_area": "310555", + "route__net": 16783, "route__net__special": 2, "antenna__violating__nets": 0, "antenna__violating__pins": 0, "GRT::ANT::errors": "0", "design__violations": 0, - "route__net": 16603, + "route__net": 16783, "route__net__special": 2, - "route__drc_errors__iter:1": 13659, - "route__wirelength__iter:1": 1712986, - "route__drc_errors__iter:2": 3067, - "route__wirelength__iter:2": 1707016, - "route__drc_errors__iter:3": 2467, - "route__wirelength__iter:3": 1703968, - "route__drc_errors__iter:4": 61, - "route__wirelength__iter:4": 1704367, - "route__drc_errors__iter:5": 1, - "route__wirelength__iter:5": 1704356, - "route__drc_errors__iter:6": 0, - "route__wirelength__iter:6": 1704359, + "route__drc_errors__iter:1": 11211, + "route__wirelength__iter:1": 1713337, + "route__drc_errors__iter:2": 1493, + "route__wirelength__iter:2": 1707352, + "route__drc_errors__iter:3": 901, + "route__wirelength__iter:3": 1704609, + "route__drc_errors__iter:4": 33, + "route__wirelength__iter:4": 1704493, + "route__drc_errors__iter:5": 0, + "route__wirelength__iter:5": 1704502, "route__drc_errors": 0, - "route__wirelength": 1704359, - "route__vias": 149586, - "route__vias__singlecut": 149586, + "route__wirelength": 1704502, + "route__vias": 150275, + "route__vias__singlecut": 150275, "route__vias__multicut": 0, "DRT::drv": "0", "antenna__violating__nets": 111, - "antenna__violating__pins": 112, + "antenna__violating__pins": 113, "DRT::ANT::errors": "111", "timing__drv__floating__nets": 0, "timing__drv__floating__pins": 0, - "DRT::worst_slack_min": "-0.21183999598543343", - "DRT::worst_slack_max": "-1.0203118638768833", - "DRT::tns_max": "-136.2589795118327", - "DRT::clock_skew": "0.5525905445188898", - "DRT::max_slew_slack": "-8.156697452068329", + "DRT::worst_slack_min": "-0.13649493033294813", + "DRT::worst_slack_max": "-0.9857133166481611", + "DRT::tns_max": "-128.08198242317061", + "DRT::clock_skew": "0.4610624235125703", + "DRT::max_slew_slack": "-25.67313015460968", "DRT::max_fanout_slack": "100.0", - "DRT::max_capacitance_slack": "-10.2105758345311", + "DRT::max_capacitance_slack": "-28.645552976871397", "DRT::clock_period": "2.811000" } \ No newline at end of file diff --git a/test/aes_sky130hs.metrics_limits b/test/aes_sky130hs.metrics_limits index df2c6511190..0f73c835cae 100644 --- a/test/aes_sky130hs.metrics_limits +++ b/test/aes_sky130hs.metrics_limits @@ -1,23 +1,23 @@ { "IFP::instance_count" : "19588.8" - ,"DPL::design_area" : "369403.2" - ,"DPL::utilization" : "12.239999999999998" + ,"DPL::design_area" : "372666.0" + ,"DPL::utilization" : "12.360000000000001" ,"RSZ::repair_design_buffer_count" : "621" ,"RSZ::max_slew_slack" : "0" ,"RSZ::max_capacitance_slack" : "0" ,"RSZ::max_fanout_slack" : "0" - ,"RSZ::worst_slack_min" : "-0.28059817917867697" - ,"RSZ::worst_slack_max" : "-0.9690021991187272" - ,"RSZ::tns_max" : "-556.7287539822713" - ,"RSZ::hold_buffer_count" : "756" + ,"RSZ::worst_slack_min" : "-0.28054644278426627" + ,"RSZ::worst_slack_max" : "-0.9141927072889141" + ,"RSZ::tns_max" : "-551.0574646058515" + ,"RSZ::hold_buffer_count" : "723" ,"GRT::ANT::errors" : "0" ,"DRT::drv" : "0" - ,"DRT::worst_slack_min" : "-0.4929399959854335" - ,"DRT::worst_slack_max" : "-1.3014118638768832" - ,"DRT::tns_max" : "-595.1266195118328" - ,"DRT::clock_skew" : "0.6631086534226677" - ,"DRT::max_slew_slack" : "-9.788036942481995" - ,"DRT::max_capacitance_slack" : "-12.25269100143732" + ,"DRT::worst_slack_min" : "-0.41759493033294814" + ,"DRT::worst_slack_max" : "-1.266813316648161" + ,"DRT::tns_max" : "-586.9496224231707" + ,"DRT::clock_skew" : "0.5532749082150844" + ,"DRT::max_slew_slack" : "-30.807756185531616" + ,"DRT::max_capacitance_slack" : "-34.37466357224567" ,"DRT::max_fanout_slack" : "0" ,"DRT::clock_period" : "2.811" } diff --git a/test/ibex_sky130hd.metrics b/test/ibex_sky130hd.metrics index 852f25c133a..fb8c4cb3cd1 100644 --- a/test/ibex_sky130hd.metrics +++ b/test/ibex_sky130hd.metrics @@ -15,65 +15,61 @@ "design__instance__displacement__mean": 0.021, "design__instance__displacement__max": 9.898, "route__wirelength__estimated": 714611, - "design__instance__count__setup_buffer": 238, + "design__instance__count__setup_buffer": 242, "design__instance__count__hold_buffer": 332, - "RSZ::worst_slack_min": "0.00044364513318735383", - "RSZ::worst_slack_max": "-2.296500832278714", - "RSZ::tns_max": "-30.69140406468204", + "RSZ::worst_slack_min": "0.00044386717779855867", + "RSZ::worst_slack_max": "-2.284226206171308", + "RSZ::tns_max": "-30.56044748206407", "RSZ::hold_buffer_count": "332", - "design__instance__displacement__total": 3574.86, - "design__instance__displacement__mean": 0.151, + "design__instance__displacement__total": 3617.02, + "design__instance__displacement__mean": 0.153, "design__instance__displacement__max": 26.68, - "route__wirelength__estimated": 749610, + "route__wirelength__estimated": 750257, "DPL::utilization": "27.9", - "DPL::design_area": "169196", - "route__net": 15627, + "DPL::design_area": "169240", + "route__net": 15631, "route__net__special": 2, "antenna__violating__nets": 0, "antenna__violating__pins": 0, "GRT::ANT::errors": "0", "design__violations": 0, - "route__net": 15627, + "route__net": 15631, "route__net__special": 2, - "route__drc_errors__iter:1": 13484, - "route__wirelength__iter:1": 967591, - "route__drc_errors__iter:2": 3417, - "route__wirelength__iter:2": 962824, - "route__drc_errors__iter:3": 3050, - "route__wirelength__iter:3": 960646, - "route__drc_errors__iter:4": 469, - "route__wirelength__iter:4": 960990, - "route__drc_errors__iter:5": 161, - "route__wirelength__iter:5": 960913, - "route__drc_errors__iter:6": 64, - "route__wirelength__iter:6": 960918, - "route__drc_errors__iter:7": 27, - "route__wirelength__iter:7": 960922, - "route__drc_errors__iter:8": 13, - "route__wirelength__iter:8": 960909, - "route__drc_errors__iter:9": 12, - "route__wirelength__iter:9": 960911, - "route__drc_errors__iter:10": 7, - "route__wirelength__iter:10": 960906, - "route__drc_errors__iter:11": 0, - "route__wirelength__iter:11": 960906, + "route__drc_errors__iter:1": 11621, + "route__wirelength__iter:1": 963634, + "route__drc_errors__iter:2": 2003, + "route__wirelength__iter:2": 958270, + "route__drc_errors__iter:3": 1625, + "route__wirelength__iter:3": 956308, + "route__drc_errors__iter:4": 284, + "route__wirelength__iter:4": 956338, + "route__drc_errors__iter:5": 67, + "route__wirelength__iter:5": 956386, + "route__drc_errors__iter:6": 29, + "route__wirelength__iter:6": 956406, + "route__drc_errors__iter:7": 6, + "route__wirelength__iter:7": 956393, + "route__drc_errors__iter:8": 2, + "route__wirelength__iter:8": 956394, + "route__drc_errors__iter:9": 0, + "route__wirelength__iter:9": 956393, "route__drc_errors": 0, - "route__wirelength": 960906, - "route__vias": 130733, - "route__vias__singlecut": 130733, + "route__wirelength": 956393, + "route__vias": 130527, + "route__vias__singlecut": 130527, "route__vias__multicut": 0, "DRT::drv": "0", - "antenna__violating__nets": 41, - "antenna__violating__pins": 45, - "DRT::ANT::errors": "41", + "antenna__violating__nets": 42, + "antenna__violating__pins": 47, + "DRT::ANT::errors": "42", "timing__drv__floating__nets": 0, "timing__drv__floating__pins": 0, - "DRT::worst_slack_min": "-0.5978602226952019", - "DRT::worst_slack_max": "-3.491694143762117", - "DRT::tns_max": "-158.27543101912147", - "DRT::clock_skew": "2.9047698402133673", - "DRT::max_slew_slack": "-1.1719662696123123", + "DRT::worst_slack_min": "-0.533850756489337", + "DRT::worst_slack_max": "-3.34448211924706", + "DRT::tns_max": "-140.02018074653395", + "DRT::clock_skew": "2.8205421019342416", + "DRT::max_slew_slack": "-13.06274433930715", "DRT::max_fanout_slack": "100.0", - "DRT::max_capacitance_slack": "2.5332389361563186", + "DRT::max_capacitance_slack": "21.05764955915588", "DRT::clock_period": "15.155000" } \ No newline at end of file diff --git a/test/ibex_sky130hd.metrics_limits b/test/ibex_sky130hd.metrics_limits index 8d72e1ab3fd..3196f7d3965 100644 --- a/test/ibex_sky130hd.metrics_limits +++ b/test/ibex_sky130hd.metrics_limits @@ -1,22 +1,22 @@ { "IFP::instance_count" : "18835.2" - ,"DPL::design_area" : "203035.19999999998" + ,"DPL::design_area" : "203088.0" ,"DPL::utilization" : "33.48" ,"RSZ::repair_design_buffer_count" : "430" ,"RSZ::max_slew_slack" : "0" ,"RSZ::max_capacitance_slack" : "0" ,"RSZ::max_fanout_slack" : "0" - ,"RSZ::worst_slack_min" : "-1.5150563548668128" - ,"RSZ::worst_slack_max" : "-3.812000832278714" - ,"RSZ::tns_max" : "-2409.4202040646824" + ,"RSZ::worst_slack_min" : "-1.5150561328222014" + ,"RSZ::worst_slack_max" : "-3.799726206171308" + ,"RSZ::tns_max" : "-2409.289247482064" ,"RSZ::hold_buffer_count" : "398" ,"GRT::ANT::errors" : "0" ,"DRT::drv" : "0" - ,"DRT::worst_slack_min" : "-2.113360222695202" - ,"DRT::worst_slack_max" : "-5.007194143762117" - ,"DRT::tns_max" : "-2537.004231019122" - ,"DRT::clock_skew" : "3.4857238082560404" - ,"DRT::max_slew_slack" : "-1.4063595235347748" + ,"DRT::worst_slack_min" : "-2.049350756489337" + ,"DRT::worst_slack_max" : "-4.85998211924706" + ,"DRT::tns_max" : "-2518.7489807465345" + ,"DRT::clock_skew" : "3.3846505223210896" + ,"DRT::max_slew_slack" : "-15.675293207168579" ,"DRT::max_capacitance_slack" : "0" ,"DRT::max_fanout_slack" : "0" ,"DRT::clock_period" : "15.155"