From 693b3f850e8856f7e7cd67f1bee2ac02a6c8938e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20K=C3=B6fferlein?= Date: Tue, 15 Mar 2022 21:14:32 +0100 Subject: [PATCH] Issue 1021 (#1026) - LVS match issue on SRAM sample * First step for solution: Problem was: the ambiguity resolver was making decisions which later resulted in a name conflict. Later on, another branch of the backtracking algorithm came across the same situation but decided based on names, creating an conflict. First part of the solution is to establish the backtracking information during ambiguity resolution and using that rather than an alternative branch later on. This avoids this conflict, but does not favor names as mandated by the "use_names" flag. This will be the second step of the solution. * Bugfixed solution (partially) * Introducing third pass in netlist compare The second pass is "ambiguity resolution by name" and is skipped if "consider_net_names" is false. The third pass then is ignoring the names. * Bugfix * Comment fixed, test updates * Added tests * Added test data variant for CentOS 8 --- src/db/db/dbNetlistCompare.cc | 17 +- src/db/db/dbNetlistCompareCore.cc | 126 +- src/db/unit_tests/dbNetlistCompareTests.cc | 94 +- src/lvs/unit_tests/lvsTests.cc | 23 +- testdata/lvs/SP6TArray_2X4.gds | Bin 0 -> 10628 bytes testdata/lvs/SP6TArray_2X4.lvs | 206 ++ testdata/lvs/SP6TArray_2X4.spi | 25 + testdata/lvs/test_22a.cir | 161 ++ testdata/lvs/test_22a.lvsdb | 2590 ++++++++++++++++++++ testdata/lvs/test_22b.cir | 161 ++ testdata/lvs/test_22b.lvsdb | 2590 ++++++++++++++++++++ testdata/lvs/test_22c.cir | 97 + testdata/lvs/test_22c.lvsdb.1 | 952 +++++++ testdata/lvs/test_22c.lvsdb.2 | 952 +++++++ testdata/lvs/test_22d.cir | 97 + testdata/lvs/test_22d.lvsdb.1 | 952 +++++++ testdata/lvs/test_22d.lvsdb.2 | 952 +++++++ 17 files changed, 9923 insertions(+), 72 deletions(-) create mode 100644 testdata/lvs/SP6TArray_2X4.gds create mode 100644 testdata/lvs/SP6TArray_2X4.lvs create mode 100644 testdata/lvs/SP6TArray_2X4.spi create mode 100644 testdata/lvs/test_22a.cir create mode 100644 testdata/lvs/test_22a.lvsdb create mode 100644 testdata/lvs/test_22b.cir create mode 100644 testdata/lvs/test_22b.lvsdb create mode 100644 testdata/lvs/test_22c.cir create mode 100644 testdata/lvs/test_22c.lvsdb.1 create mode 100644 testdata/lvs/test_22c.lvsdb.2 create mode 100644 testdata/lvs/test_22d.cir create mode 100644 testdata/lvs/test_22d.lvsdb.1 create mode 100644 testdata/lvs/test_22d.lvsdb.2 diff --git a/src/db/db/dbNetlistCompare.cc b/src/db/db/dbNetlistCompare.cc index 406a14d4e..849854db3 100644 --- a/src/db/db/dbNetlistCompare.cc +++ b/src/db/db/dbNetlistCompare.cc @@ -942,13 +942,22 @@ NetlistComparer::compare_circuits (const db::Circuit *c1, const db::Circuit *c2, RedundantNodeCache redundant_nodes; redundant_nodes.fill (g1); - // two passes: one without ambiguities, the second one with + // Three passes: one without ambiguities, the second one with ambiguities and names (optional) and a third with ambiguities with topology - for (int pass = 0; pass < 2 && ! good; ++pass) { + for (int pass = 0; pass < 3 && ! good; ++pass) { + + if (pass == 1 && m_dont_consider_net_names) { + // skip the named pass in "don't consider net names" mode + continue; + } if (db::NetlistCompareGlobalOptions::options ()->debug_netcompare) { if (pass > 0) { - tl::info << "including ambiguous nodes now."; + if (pass == 1) { + tl::info << "including ambiguous nodes now (with names)"; + } else { + tl::info << "including ambiguous nodes now (ignoreing names)"; + } } } @@ -956,7 +965,7 @@ NetlistComparer::compare_circuits (const db::Circuit *c1, const db::Circuit *c2, compare.max_depth = m_max_depth; compare.max_n_branch = m_max_n_branch; compare.depth_first = m_depth_first; - compare.dont_consider_net_names = m_dont_consider_net_names; + compare.dont_consider_net_names = (pass > 1); compare.with_ambiguous = (pass > 0); compare.circuit_pin_mapper = &circuit_pin_mapper; compare.subcircuit_equivalence = &subcircuit_equivalence; diff --git a/src/db/db/dbNetlistCompareCore.cc b/src/db/db/dbNetlistCompareCore.cc index 9ffdd6359..e2313c2cc 100644 --- a/src/db/db/dbNetlistCompareCore.cc +++ b/src/db/db/dbNetlistCompareCore.cc @@ -268,6 +268,29 @@ public: } } + void clear () + { + m_to_undo.clear (); + m_to_undo_to_unknown.clear (); + m_to_undo_devices.clear (); + m_to_undo_subcircuits.clear (); + } + + void swap (TentativeNodeMapping &other) + { + m_to_undo.swap (other.m_to_undo); + m_to_undo_to_unknown.swap (other.m_to_undo_to_unknown); + m_to_undo_devices.swap (other.m_to_undo_devices); + m_to_undo_subcircuits.swap (other.m_to_undo_subcircuits); + } + + std::vector > nodes_tracked () + { + std::vector > res = m_to_undo; + res.insert (res.end (), m_to_undo_to_unknown.begin (), m_to_undo_to_unknown.end ()); + return res; + } + private: std::vector > m_to_undo, m_to_undo_to_unknown; std::vector > > m_to_undo_devices; @@ -804,6 +827,7 @@ NetlistCompareCore::derive_node_identities_from_ambiguity_group (const NodeRange // sort the ambiguity group such that net names match best std::vector > pairs; + std::list tn_for_pairs; tl::equivalence_clusters equivalent_other_nodes; sort_node_range_by_best_match (nr); @@ -840,6 +864,7 @@ NetlistCompareCore::derive_node_identities_from_ambiguity_group (const NodeRange // (Rationale for the latter: passive nets cannot be told apart topologically and are typical for blackbox models. // So the net name is the only differentiator) bool use_name = ! dont_consider_net_names || i1->node->net ()->is_passive (); + bool use_topology = dont_consider_net_names || i1->node->net ()->is_passive (); // in tentative mode, reject this choice if nets are named and all other nets in the ambiguity group differ -> this favors net matching by name if (use_name && tentative) { @@ -861,6 +886,8 @@ NetlistCompareCore::derive_node_identities_from_ambiguity_group (const NodeRange } bool any = false; + bool need_rerun = false; + size_t node_count = 0; std::vector::const_iterator>::iterator to_remove = iters2.end (); for (std::vector::const_iterator>::iterator ii2 = iters2.begin (); ii2 != iters2.end (); ++ii2) { @@ -888,13 +915,16 @@ NetlistCompareCore::derive_node_identities_from_ambiguity_group (const NodeRange } // utilize net names to propose a match - new_nodes += 1; + if (any) { + pairs.pop_back (); + } pairs.push_back (std::make_pair (i1->node, i2->node)); to_remove = ii2; + node_count = 1; any = true; break; - } else { + } else if (use_topology) { size_t ni = mp_graph->node_index_for_net (i1->node->net ()); size_t other_ni = mp_other_graph->node_index_for_net (i2->node->net ()); @@ -922,9 +952,10 @@ NetlistCompareCore::derive_node_identities_from_ambiguity_group (const NodeRange } else { // identified a new pair - new_nodes += bt_count + 1; + node_count = bt_count + 1; pairs.push_back (std::make_pair (i1->node, i2->node)); to_remove = ii2; + need_rerun = true; any = true; // no ambiguity analysis in tentative mode - we can stop now @@ -940,7 +971,9 @@ NetlistCompareCore::derive_node_identities_from_ambiguity_group (const NodeRange } - if (to_remove != iters2.end ()) { + if (any) { + + new_nodes += node_count; // Add the new pair to the temporary mapping (even in tentative mode) // Reasoning: doing the mapping may render other nets incompatible, so to ensure "edges_are_compatible" works properly we @@ -954,6 +987,21 @@ NetlistCompareCore::derive_node_identities_from_ambiguity_group (const NodeRange TentativeNodeMapping::map_pair (&tn_temp, mp_graph, ni, mp_other_graph, other_ni, dm, dm_other, *device_equivalence, scm, scm_other, *subcircuit_equivalence, depth); + if (need_rerun && ! tentative) { + + // Re-run the mapping for the selected pair and stash that - this will lock this mapping when investigating other + // branches of the ambiguity resolution tree + + if (db::NetlistCompareGlobalOptions::options ()->debug_netcompare || tl::verbosity () >= 40) { + tl::info << indent_s << "finalizing decision (rerun tracking): " << i1->node->net ()->expanded_name () << " vs. " << i2->node->net ()->expanded_name (); + } + + tn_for_pairs.push_back (TentativeNodeMapping ()); + size_t bt_count = derive_node_identities (ni, depth + 1, complexity * n_branch, &tn_for_pairs.back ()); + tl_assert (bt_count != failed_match); + + } + // now we can get rid of the node and reduce the "other" list of ambiguous nodes iters2.erase (to_remove); @@ -1013,6 +1061,61 @@ NetlistCompareCore::derive_node_identities_from_ambiguity_group (const NodeRange } + // Establish further mappings from the mappings stashed during tentative evaluation + + std::vector >::const_iterator p = pairs.begin (); + for (std::list::iterator tn_of_pair = tn_for_pairs.begin (); tn_of_pair != tn_for_pairs.end (); ++tn_of_pair, ++p) { + + // Note: this would propagate ambiguities to all *derived* mappings. But this probably goes too far: + // bool ambiguous = equivalent_other_nodes.has_attribute (p->second); + // Instead we ignore propagated ambiguitied for now: + bool ambiguous = false; + + if (db::NetlistCompareGlobalOptions::options ()->debug_netcompare || tl::verbosity () >= 40) { + tl::info << indent_s << "propagating from deduced match: " << p->first->net ()->expanded_name () << " vs. " << p->second->net ()->expanded_name (); + } + + std::vector > nn = tn_of_pair->nodes_tracked (); + + for (std::vector >::const_iterator i = nn.begin (); i != nn.end (); ++i) { + + if (i->first != mp_graph) { + continue; + } + + NetGraphNode *n = & mp_graph->node (i->second); + + size_t other_net_index = n->other_net_index (); + NetGraphNode *n_other = & mp_other_graph->node (other_net_index); + + if (db::NetlistCompareGlobalOptions::options ()->debug_netcompare || tl::verbosity () >= 40) { + if (ambiguous) { + tl::info << indent_s << "deduced ambiguous match: " << n->net ()->expanded_name () << " vs. " << n_other->net ()->expanded_name (); + } else { + tl::info << indent_s << "deduced match: " << n->net ()->expanded_name () << " vs. " << n_other->net ()->expanded_name (); + } + } + + if (ambiguous) { + if (logger) { + logger->match_ambiguous_nets (n->net (), n_other->net ()); + } + for (db::Net::const_pin_iterator i = n->net ()->begin_pins (); i != n->net ()->end_pins (); ++i) { + pa.push_back (i->pin ()->id ()); + } + for (db::Net::const_pin_iterator i = n_other->net ()->begin_pins (); i != n_other->net ()->end_pins (); ++i) { + pb.push_back (i->pin ()->id ()); + } + } else if (logger) { + logger->match_nets (n->net (), n_other->net ()); + } + + } + + tn_of_pair->clear (); + + } + // marks pins on ambiguous nets as swappable if (! pa.empty ()) { @@ -1022,21 +1125,6 @@ NetlistCompareCore::derive_node_identities_from_ambiguity_group (const NodeRange circuit_pin_mapper->map_pins (mp_other_graph->circuit (), pb); } - // And seek further from these pairs - - if (depth_first) { - - for (std::vector >::const_iterator p = pairs.begin (); p != pairs.end (); ++p) { - - size_t ni = mp_graph->node_index_for_net (p->first->net ()); - - size_t bt_count = derive_node_identities (ni, depth + 1, complexity * n_branch, tentative); - tl_assert (bt_count != failed_match); - - } - - } - } else { for (std::vector >::const_iterator p = pairs.begin (); p != pairs.end (); ++p) { diff --git a/src/db/unit_tests/dbNetlistCompareTests.cc b/src/db/unit_tests/dbNetlistCompareTests.cc index b5072e54e..82e9d28b1 100644 --- a/src/db/unit_tests/dbNetlistCompareTests.cc +++ b/src/db/unit_tests/dbNetlistCompareTests.cc @@ -2634,13 +2634,13 @@ TEST(17_InherentlyAmbiguousDecoder) "match_nets VSS VSS\n" "match_nets VDD VDD\n" "match_nets NQ0 NQ0\n" - "match_ambiguous_nets NQ1 NQ1\n" - "match_ambiguous_nets NQ2 NQ2\n" + "match_nets NQ1 NQ1\n" + "match_nets NQ2 NQ2\n" "match_nets NQ3 NQ3\n" "match_nets NA NA\n" "match_nets NB NB\n" - "match_nets B B\n" "match_nets A A\n" + "match_nets B B\n" "match_pins $0 $1\n" "match_pins $1 $0\n" "match_pins $2 $2\n" @@ -2692,8 +2692,8 @@ TEST(17_InherentlyAmbiguousDecoder) "match_nets NQ3 NQ3\n" "match_nets NA NA\n" "match_nets NB NB\n" - "match_nets B B\n" "match_nets A A\n" + "match_nets B B\n" "match_pins $0 $1\n" "match_pins $1 $0\n" "match_pins $2 $2\n" @@ -2903,18 +2903,18 @@ TEST(18_ClockTree) "match_nets S S\n" "match_nets SX SX\n" "match_nets SX SX\n" - "match_nets SXX SXX\n" - "match_nets SXX SXX\n" + "match_nets SXXX SXXX\n" + "match_nets SXXX SXXX\n" + "match_nets SXXX SXXX\n" + "match_nets SXXX SXXX\n" "match_nets SXXX SXXX\n" "match_nets SXXX SXXX\n" "match_nets SXXX SXXX\n" "match_nets SXXX SXXX\n" "match_nets SXX SXX\n" "match_nets SXX SXX\n" - "match_nets SXXX SXXX\n" - "match_nets SXXX SXXX\n" - "match_nets SXXX SXXX\n" - "match_nets SXXX SXXX\n" + "match_nets SXX SXX\n" + "match_nets SXX SXX\n" "match_subcircuits TXXX TXXX\n" "match_subcircuits TX TX\n" "match_subcircuits TXXX TXXX\n" @@ -2965,14 +2965,14 @@ TEST(18_ClockTree) "match_nets S S\n" "match_ambiguous_nets SX SX\n" "match_ambiguous_nets SX SX\n" - "match_ambiguous_nets SXX SXX\n" - "match_ambiguous_nets SXX SXX\n" + "match_nets SXX SXX\n" + "match_nets SXX SXX\n" + "match_nets SXX SXX\n" + "match_nets SXX SXX\n" "match_ambiguous_nets SXXX SXXX\n" "match_ambiguous_nets SXXX SXXX\n" "match_ambiguous_nets SXXX SXXX\n" "match_ambiguous_nets SXXX SXXX\n" - "match_ambiguous_nets SXX SXX\n" - "match_ambiguous_nets SXX SXX\n" "match_ambiguous_nets SXXX SXXX\n" "match_ambiguous_nets SXXX SXXX\n" "match_ambiguous_nets SXXX SXXX\n" @@ -3026,18 +3026,18 @@ TEST(18_ClockTree) "match_nets S S\n" "match_ambiguous_nets SX SX\n" "match_ambiguous_nets SX SX\n" - "match_ambiguous_nets SXXX SXXX\n" - "match_ambiguous_nets SXXX SXXX\n" - "match_ambiguous_nets SXXX SXXX\n" - "match_ambiguous_nets SXXX SXXX\n" - "match_ambiguous_nets SXXX SXXX\n" - "match_ambiguous_nets SXXX SXXX\n" - "match_ambiguous_nets SXXX SXXX\n" - "match_ambiguous_nets SXXX SXXX\n" "match_nets SXX SXX\n" "match_nets SXX SXX\n" "match_nets SXX SXX\n" "match_nets SXX SXX\n" + "match_ambiguous_nets SXXX SXXX\n" + "match_ambiguous_nets SXXX SXXX\n" + "match_ambiguous_nets SXXX SXXX\n" + "match_ambiguous_nets SXXX SXXX\n" + "match_ambiguous_nets SXXX SXXX\n" + "match_ambiguous_nets SXXX SXXX\n" + "match_ambiguous_nets SXXX SXXX\n" + "match_ambiguous_nets SXXX SXXX\n" "match_subcircuits TXXX TXXX\n" "match_subcircuits TX TX\n" "match_subcircuits TXXX TXXX\n" @@ -3087,18 +3087,18 @@ TEST(18_ClockTree) "match_nets S S\n" "match_ambiguous_nets SX SX\n" "match_ambiguous_nets SX SX\n" - "match_ambiguous_nets SXXX SXXX\n" - "match_ambiguous_nets SXXX SXXX\n" - "match_ambiguous_nets SXXX SXXX\n" - "match_ambiguous_nets SXXX SXXX\n" - "match_ambiguous_nets SXXX SXXX\n" - "match_ambiguous_nets SXXX SXXX\n" - "match_ambiguous_nets SXXX SXXX\n" - "match_ambiguous_nets SXXX SXXX\n" "match_nets SXX SXX\n" "match_nets SXX SXX\n" "match_nets SXX SXX\n" "match_nets SXX SXX\n" + "match_ambiguous_nets SXXX SXXX\n" + "match_ambiguous_nets SXXX SXXX\n" + "match_ambiguous_nets SXXX SXXX\n" + "match_ambiguous_nets SXXX SXXX\n" + "match_ambiguous_nets SXXX SXXX\n" + "match_ambiguous_nets SXXX SXXX\n" + "match_ambiguous_nets SXXX SXXX\n" + "match_ambiguous_nets SXXX SXXX\n" "match_subcircuits TXXX TXXX\n" "match_subcircuits TX TX\n" "match_subcircuits TXXX TXXX\n" @@ -3248,22 +3248,22 @@ TEST(19_SymmetricCircuit) "match_nets $14 WELL\n" "match_ambiguous_nets nn2 NN2\n" "match_ambiguous_nets nn2_ NN2_\n" - "match_ambiguous_nets q0 Q0\n" - "match_ambiguous_nets q1 Q1\n" + "match_nets q0 Q0\n" + "match_nets q1 Q1\n" "match_nets $11 CS0\n" + "match_nets $13 CS1\n" "match_nets q0_ Q0_\n" + "match_nets q1_ Q1_\n" + "match_nets a0 A0\n" + "match_nets a0_ A0_\n" + "match_nets $35 HNET44\n" + "match_nets $34 HNET48\n" + "match_nets $4 NET200\n" + "match_nets nn1_ NN1_\n" + "match_nets $9 NET175\n" "match_nets $6 NET181\n" "match_nets nn1 NN1\n" "match_nets $8 NET215\n" - "match_nets $13 CS1\n" - "match_nets q1_ Q1_\n" - "match_nets a0 A0\n" - "match_nets $35 HNET44\n" - "match_nets nn1_ NN1_\n" - "match_nets $9 NET175\n" - "match_nets $4 NET200\n" - "match_nets a0_ A0_\n" - "match_nets $34 HNET48\n" "match_pins VDD VDD\n" "match_pins nn1_ NN1_\n" "match_pins nn1 NN1\n" @@ -3347,20 +3347,20 @@ TEST(19_SymmetricCircuit) "match_nets VSS VSS\n" "match_ambiguous_nets nn2 NN2\n" "match_ambiguous_nets nn2_ NN2_\n" - "match_ambiguous_nets q0 Q0\n" - "match_nets q0_ Q0_\n" - "match_ambiguous_nets q1 Q1\n" - "match_nets q1_ Q1_\n" + "match_nets q0 Q0\n" + "match_nets q1 Q1\n" "match_nets $11 CS0\n" "match_nets $13 CS1\n" + "match_nets q0_ Q0_\n" + "match_nets q1_ Q1_\n" "match_nets a0 A0\n" "match_nets a0_ A0_\n" + "match_nets $35 HNET44\n" + "match_nets $34 HNET48\n" "match_nets $4 NET200\n" "match_nets $6 NET181\n" "match_nets $8 NET215\n" "match_nets $9 NET175\n" - "match_nets $35 HNET44\n" - "match_nets $34 HNET48\n" "match_nets nn1 NN1\n" "match_nets nn1_ NN1_\n" "match_pins VDD VDD\n" diff --git a/src/lvs/unit_tests/lvsTests.cc b/src/lvs/unit_tests/lvsTests.cc index 4dfdde11b..be360ec58 100644 --- a/src/lvs/unit_tests/lvsTests.cc +++ b/src/lvs/unit_tests/lvsTests.cc @@ -30,7 +30,7 @@ #include "lymMacro.h" #include "tlFileUtils.h" -void run_test (tl::TestBase *_this, const std::string &lvs_rs, const std::string &au_netlist, const std::string &layout, bool priv = false, const std::string &au_lvsdb_name = std::string ()) +void run_test (tl::TestBase *_this, const std::string &lvs_rs, const std::string &au_netlist, const std::string &layout, bool priv = false, const std::string &au_lvsdb_name = std::string (), const std::string &added = std::string ()) { std::string testsrc = priv ? tl::testdata_private () : tl::testdata (); testsrc = tl::combine_path (testsrc, "lvs"); @@ -51,7 +51,8 @@ void run_test (tl::TestBase *_this, const std::string &lvs_rs, const std::string "$lvs_test_target_lvsdb = '%s'\n" "$lvs_test_target_cir = '%s'\n" "$lvs_test_target_l2n = '%s'\n" - , ly, output_lvsdb, output_cir, output_l2n) + "%s" + , ly, output_lvsdb, output_cir, output_l2n, added) ); config.set_interpreter (lym::Macro::Ruby); EXPECT_EQ (config.run (), 0); @@ -177,3 +178,21 @@ TEST(21_private) { run_test (_this, "test_21.lylvs", "test_21.cir.gz", "test_21.gds.gz", true, "test_21.lvsdb"); } + +// issue #1021 +TEST(22a_SP6TArray2X4) +{ + run_test (_this, "SP6TArray_2X4.lvs", "test_22a.cir", "SP6TArray_2X4.gds", false, "test_22a.lvsdb", "$test22_texts = false\n$test22_deep = false"); +} +TEST(22b_SP6TArray2X4) +{ + run_test (_this, "SP6TArray_2X4.lvs", "test_22b.cir", "SP6TArray_2X4.gds", false, "test_22b.lvsdb", "$test22_texts = true\n$test22_deep = false"); +} +TEST(22c_SP6TArray2X4) +{ + run_test (_this, "SP6TArray_2X4.lvs", "test_22c.cir", "SP6TArray_2X4.gds", false, "test_22c.lvsdb", "$test22_texts = false\n$test22_deep = true"); +} +TEST(22d_SP6TArray2X4) +{ + run_test (_this, "SP6TArray_2X4.lvs", "test_22d.cir", "SP6TArray_2X4.gds", false, "test_22d.lvsdb", "$test22_texts = true\n$test22_deep = true"); +} diff --git a/testdata/lvs/SP6TArray_2X4.gds b/testdata/lvs/SP6TArray_2X4.gds new file mode 100644 index 0000000000000000000000000000000000000000..8b2143f719a9549c2f4f36db06126dd1c35418fe GIT binary patch literal 10628 zcmeI1ZHQde8OP7unYnvscC+1$NvtMdj0O}IqDg5`q$Iw8Vm`DOK@(qBg@U04ElO!> zC5m9R-vq@M@QWHygOx@D`oRySP*Fn#>kGbovIR>qv_g&8Z2$lBod4W&cka16v)f9c zy)gWCo_qf1IrllwdCr})E_YdWmD|wDCjR8wuIKu0yDQ?qU6JLxF1ygVHSO;AcHY1J z^4~pk?7WMQYGey}+*O_%Gy>tC5O+R_H=|$Q5SElsvg)95O*#6kL;$G)O*}-A|Gb)*1*b>CO?uqB3$wc2IC-b}7iI5nPmQ1csW(zb|Dx82>rZ^*gYi5?wNf4?lEiEJ!ZQ6kD}}eeaOmX`w#kY{D*8sewA6Bo$g%s z3})ec$ili-`AxnRa({l`^*^f2#$SB4cDTkdd(p*cvPOu}tvH%HL$+T)eV6s=9uk>+ zDrU1)GP?td@;GM5Q|&yH{k0yjcC81fv%f|5-`-;Vx3{QWvOilb_be=&cqFv_A)e^x z$Q)1E$x3|md_F$Kgujn1!*qN;>U%BOoAl;);-Im&3(xckw1Kiu98CM~KII(lJCZv3 z7iCZD;ddM6bB}RyH?%*%Y73OTzo+8=LO;KAmLCP;o&6no0k)q2-!CaU7|&;%Q zLF|zu}<2TCQ5esJI-zC&nM{H|jZlw&S>| z8&LL!@psRHW(V}-XW-irW#5q+zs*tqfN^rp`MDEi?;mK^7n{ReA2od;%Dy?JXZ~RQ zAnqjnGJizb)Ba6YYz~B9>gnH8_6Gl1VPnq<8$0vB=l+YbdnV_v{a3XA5OWT;?n5p; zTvB#0sqemRemHORo9`E8AM$@u{5Hh(lYMFV-$VW8`VoCTKZl%PUV}cLabJ`UjK^2$ zpLxl4B=d~g0hw>K2huO|SClT%|33c?|19e7JNB$T-}W*e@Ev3x^v*8n^8xcKPP}9D zF4E2zis~2llh5bpAHI|atv75etv9T%L0&LFut)g(@U$@oeX@T)zv$o3FLZu>Mb7sT z^OGMjzxn=%Ug!PP^>6zx>;GQU_*_JvM%kP6jGw>n*B^CUH%8f;_1@QmrpfNM{1;uY zgTv$Z`ycuqfB&-l9PFR$!}7rP9gAo2zU-b2{zJZ@57j*}QU4bC5BWHH{i^7P@(u5D zzW(st3}XuS6XUnIxA2C|c~IO%*}}17% zq{qCS=kJ52^?L{UDUQnCq_;Nx2aS`PtPfH4el`CV`N#YrPwAgJ`WIzy(zpMC*yE?F z=QGIvU*T_2_Swqw+xy!ZcMad~C+0E7Ul==2V-E3M?EVIQJ%`#MUSRFIfxWlz9kp3h zKVUrH6@OflY)4Yp!ZV8#8&Hq%U1U!9dN1B*?ejqOlkm5T&)4diFOt66uS7)Nc7BiV zB7OhN?vsA3rjMWJ+VK8t{WE`aXfVds@$h#br*__SMcvCJDJjByubAKLDTVhsPEwv0y^D~ z$G^xw<}}2phgefD%8q%C^*iG6pZEpzU%(eQg*~v}Eh&2*@(n-Xn$Gi9+j-v3+itt@ zr`K=2>Re2IADyi(Px8!&HIoD?@v_S*P`Qy@OM;xtzLBE90IxQVhWep7?|D^HPlHj4Zm>1-53 zWxFNMM%Nx1tsQD-pJ%9h&$$+B44Y6VHNxp_q2;-18P<~Rk^Y<=_2!V}5s5MQ6G4%8 z!u>dxDtev-@*=6@iJ&MuIIItIv26cAKaT$pDU83IOP&Z~E)moD;h0uh@>CElr|eX) zjDLt~@??T5VhU$VZ2RkdV&4f#G&yV2?^d;Bl2uc5y8Q80LstU#0BE-5=0ucb}?mC-Z zSfXkU^oUlp>rv0DP0C(dwZlqfgta@d>Ta5`U5k``oL!4LR$X#&)eW;BRs9vj_ z6(_|_l%1?piXs1slj0`IUK_u#QkNaSNUu04Zldf>yB70vlwSoQkC)ty*bb|2q;{k2 zTI})vyB6~#RQ0%)RCc}9I1%DSvI3s;cuCp8q<$Sv?s$>ZpZsx2*}-X+O$av|Py4*m>!5AOtHw7h?#*1E OWOVs;i8riH$NdZ44X11X literal 0 HcmV?d00001 diff --git a/testdata/lvs/SP6TArray_2X4.lvs b/testdata/lvs/SP6TArray_2X4.lvs new file mode 100644 index 000000000..5a676a091 --- /dev/null +++ b/testdata/lvs/SP6TArray_2X4.lvs @@ -0,0 +1,206 @@ + +source($lvs_test_source) +report_lvs($lvs_test_target_lvsdb, true) +target_netlist($lvs_test_target_cir, write_spice, "Extracted by KLayout") + +schematic("SP6TArray_2X4.spi") + +consider_net_names($test22_texts) +if $test22_deep + deep +else + flat +end + +# Define layers +nwm = input(64, 20) +nsdm = input(93, 44) +psdm = input(94, 20) +hvi = input(75, 20) +difftap_pin = input(65, 16) +difftap_block = input(100, 10) +difftap = input(65, 20) +poly_pin = input(66, 16) +poly_block = input(100, 20) +poly = input(66, 20) +li_pin = input(67, 16) +li_block = input(100, 40) +li = input(67, 20) +m1_pin = input(68, 16) +m1_block = input(100, 60) +m1 = input(68, 20) +m2_pin = input(69, 16) +m2_block = input(100, 80) +m2 = input(69, 20) +m3_pin = input(70, 16) +m3_block = input(100, 100) +m3 = input(70, 20) +m4_pin = input(71, 16) +m4_block = input(100, 120) +m4 = input(71, 20) +m5_pin = input(72, 16) +m5_block = input(100, 140) +m5 = input(72, 20) +licon_block = input(100, 30) +mcon_block = input(100, 50) +via_block = input(100, 70) +via2_block = input(100, 90) +via3_block = input(100, 110) +via4_block = input(100, 130) +licon = input(66, 44) +mcon = input(67, 44) +via = input(68, 44) +via2 = input(69, 44) +via3 = input(70, 44) +via4 = input(71, 44) +hvtp = input(78, 44) +lvtn = input(125, 44) +pad = input(76, 20) +areaid_diode = input(81, 23) +polyres = input(66, 13) +diffres = input(65, 13) +prBoundary = input(235, 4) +substrate__Sky130 = polygon_layer + +difftap__conn = (difftap-(poly+diffres)) +difftap__conn__nsdm = (difftap__conn&nsdm&nwm) +difftap__conn__psdm = (difftap__conn&psdm-nwm) +poly__conn = (poly-polyres) +gate__hvmosgate = (difftap&poly__conn&hvi) +gate__mosgate = (difftap&poly__conn-hvi) +gate__mosfet__nfet_01v8 = (gate__mosgate&nsdm) +gate__mosfet__nfet_01v8_lvt = (gate__mosgate&nsdm&lvtn) +gate__mosfet__nfet_g5v0d10v5 = (gate__hvmosgate&nsdm) +gate__mosfet__pfet_01v8 = (gate__mosgate&nwm&psdm) +gate__mosfet__pfet_01v8_hvt = (gate__mosgate&nwm&psdm&hvtp) +gate__mosfet__pfet_01v8_lvt = (gate__mosgate&nwm&psdm&lvtn) +gate__mosfet__pfet_g5v0d10v5 = (gate__hvmosgate&nwm&psdm) +resistor__active_res = (difftap&diffres) +resistor__poly_res = (poly&polyres) +diode__ndiode = (difftap&areaid_diode&nsdm) +diode__pdiode = (difftap&areaid_diode&psdm) + +# Connectivity +connect_global(substrate__Sky130, "vss") +# connect(difftap,difftap.pin) +connect(difftap__conn, difftap_pin) +# connect(difftap__conn,difftap__conn:nsdm) +connect(difftap__conn, difftap__conn__nsdm) +# connect(difftap__conn:nsdm,nwm) +connect(difftap__conn__nsdm, nwm) +# connect(difftap__conn,difftap__conn:psdm) +connect(difftap__conn, difftap__conn__psdm) +# connect(difftap__conn:psdm,substrate:Sky130) +connect_global(difftap__conn__psdm, "vss") +# connect(poly,poly.pin) +connect(poly, poly_pin) +# connect(li,li.pin) +connect(li, li_pin) +# connect(m1,m1.pin) +connect(m1, m1_pin) +# connect(m2,m2.pin) +connect(m2, m2_pin) +# connect(m3,m3.pin) +connect(m3, m3_pin) +# connect(m4,m4.pin) +connect(m4, m4_pin) +# connect(m5,m5.pin) +connect(m5, m5_pin) +# connect((difftap__conn,poly__conn),licon) +connect(difftap__conn, licon) +connect(poly__conn, licon) +# connect(licon,li) +connect(licon, li) +# connect(li,mcon) +connect(li, mcon) +# connect(mcon,m1) +connect(mcon, m1) +# connect(m1,via) +connect(m1, via) +# connect(via,m2) +connect(via, m2) +# connect(m2,via2) +connect(m2, via2) +# connect(via2,m3) +connect(via2, m3) +# connect(m3,via3) +connect(m3, via3) +# connect(via3,m4) +connect(via3, m4) +# connect(m4,via4) +connect(m4, via4) +# connect(via4,m5) +connect(via4, m5) + +connect_implicit("vss*") +connect_implicit("vcc*") +connect_implicit("vdd*") +connect_implicit("SP6TArray_2X1", "vdd") + +# Resistors +# active_res +extract_devices(resistor("active_res", 200.0), { + "R" => resistor__active_res, "C" => difftap__conn, +}) +same_device_classes("active_res", "RES") +# poly_res +extract_devices(resistor("poly_res", 300.0), { + "R" => resistor__poly_res, "C" => poly__conn, +}) +same_device_classes("poly_res", "RES") + +# Diodes +# ndiode +extract_devices(diode("sky130_fd_pr__diode_pw2nd_05v5"), { + "P" => substrate__Sky130, "N" => diode__ndiode, "tC" => difftap__conn +}) +# pdiode +extract_devices(diode("sky130_fd_pr__diode_pd2nw_05v5"), { + "P" => diode__pdiode, "N" => nwm, "tA" => difftap__conn +}) + +# Transistors +# nfet_01v8 +cheat("SP6TCell") do +extract_devices(mos4("sky130_fd_pr__nfet_01v8__model"), { + "SD" => difftap__conn, "G" => gate__mosfet__nfet_01v8, "tG" => poly__conn, "W" => substrate__Sky130, +}) +end + +# nfet_01v8_lvt +extract_devices(mos4("sky130_fd_pr__nfet_01v8_lvt__model"), { + "SD" => difftap__conn, "G" => gate__mosfet__nfet_01v8_lvt, "tG" => poly__conn, "W" => substrate__Sky130, +}) +# nfet_g5v0d10v5 +extract_devices(mos4("sky130_fd_pr__nfet_g5v0d10v5__model"), { + "SD" => difftap__conn, "G" => gate__mosfet__nfet_g5v0d10v5, "tG" => poly__conn, "W" => substrate__Sky130, +}) +# pfet_01v8 +cheat("SP6TCell") do +extract_devices(mos4("sky130_fd_pr__pfet_01v8__model"), { + "SD" => difftap__conn, "G" => gate__mosfet__pfet_01v8, "tG" => poly__conn, "W" => nwm, +}) +end + +# pfet_01v8_hvt +extract_devices(mos4("sky130_fd_pr__pfet_01v8_hvt__model"), { + "SD" => difftap__conn, "G" => gate__mosfet__pfet_01v8_hvt, "tG" => poly__conn, "W" => nwm, +}) +# pfet_01v8_lvt +extract_devices(mos4("sky130_fd_pr__pfet_01v8_lvt__model"), { + "SD" => difftap__conn, "G" => gate__mosfet__pfet_01v8_lvt, "tG" => poly__conn, "W" => nwm, +}) +# pfet_g5v0d10v5 +extract_devices(mos4("sky130_fd_pr__pfet_g5v0d10v5__model"), { + "SD" => difftap__conn, "G" => gate__mosfet__pfet_g5v0d10v5, "tG" => poly__conn, "W" => nwm, +}) + +netlist + +align +ok = compare +if ok then + print("LVS OK\n") +else + abort "LVS Failed!" +end diff --git a/testdata/lvs/SP6TArray_2X4.spi b/testdata/lvs/SP6TArray_2X4.spi new file mode 100644 index 000000000..15a572ca7 --- /dev/null +++ b/testdata/lvs/SP6TArray_2X4.spi @@ -0,0 +1,25 @@ +* SP6TArray_2X4 +* SP6TCell +.subckt SP6TCell vdd vss wl bl bl_n +Mpu1 vdd bit_n bit vdd sky130_fd_pr__pfet_01v8__model l=0.15um w=0.42um +Mpu2 bit_n bit vdd vdd sky130_fd_pr__pfet_01v8__model l=0.15um w=0.42um +Mpd1 vss bit_n bit vss sky130_fd_pr__nfet_01v8__model l=0.15um w=0.42um +Mpd2 bit_n bit vss vss sky130_fd_pr__nfet_01v8__model l=0.15um w=0.42um +Mpg1 bl wl bit vss sky130_fd_pr__nfet_01v8__model l=0.15um w=0.42um +Mpg2 bl_n wl bit_n vss sky130_fd_pr__nfet_01v8__model l=0.15um w=0.42um +.ends SP6TCell +* SP6TArray_2X1 +.subckt SP6TArray_2X1 vss vdd wl[0] wl[1] bl[0] bl_n[0] +Xinst0x0 vdd vss wl[0] bl[0] bl_n[0] SP6TCell +Xinst1x0 vdd vss wl[1] bl[0] bl_n[0] SP6TCell +.ends SP6TArray_2X1 +* SP6TArray_2X2 +.subckt SP6TArray_2X2 vss vdd wl[0] wl[1] bl[0] bl_n[0] bl[1] bl_n[1] +Xinst0x0 vss vdd wl[0] wl[1] bl[0] bl_n[0] SP6TArray_2X1 +Xinst0x1 vss vdd wl[0] wl[1] bl[1] bl_n[1] SP6TArray_2X1 +.ends SP6TArray_2X2 +* SP6TArray_2X4 +.subckt SP6TArray_2X4 vss vdd wl[0] wl[1] bl[0] bl_n[0] bl[1] bl_n[1] bl[2] bl_n[2] bl[3] bl_n[3] +Xinst0x0 vss vdd wl[0] wl[1] bl[0] bl_n[0] bl[1] bl_n[1] SP6TArray_2X2 +Xinst0x1 vss vdd wl[0] wl[1] bl[2] bl_n[2] bl[3] bl_n[3] SP6TArray_2X2 +.ends SP6TArray_2X4 diff --git a/testdata/lvs/test_22a.cir b/testdata/lvs/test_22a.cir new file mode 100644 index 000000000..ab888a3c8 --- /dev/null +++ b/testdata/lvs/test_22a.cir @@ -0,0 +1,161 @@ +* Extracted by KLayout + +* cell SP6TArray_2X4 +.SUBCKT SP6TArray_2X4 +* net 1 vdd +* net 2 bl[0] +* net 3 bl_n[0] +* net 4 bl[1] +* net 5 bl_n[1] +* net 6 bl[2] +* net 7 bl_n[2] +* net 8 bl[3] +* net 9 bl_n[3] +* net 26 wl[0] +* net 31 wl[1] +* net 52 vss +* device instance $1 r0 *1 0.215,1.935 sky130_fd_pr__nfet_01v8__model +M$1 52 11 12 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.1113P ++ AD=0.18165P PS=1.37U PD=1.285U +* device instance $2 r0 *1 0.605,2.56 sky130_fd_pr__nfet_01v8__model +M$2 12 26 2 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.0588P PS=1.285U PD=0.7U +* device instance $3 r0 *1 0.605,2.99 sky130_fd_pr__nfet_01v8__model +M$3 2 31 32 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.0588P ++ AD=0.18165P PS=0.7U PD=1.285U +* device instance $4 r0 *1 0.215,3.615 sky130_fd_pr__nfet_01v8__model +M$4 32 34 52 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.1113P PS=1.285U PD=1.37U +* device instance $5 r0 *1 1.965,1.935 sky130_fd_pr__nfet_01v8__model +M$5 11 12 52 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.0588P PS=1.285U PD=0.7U +* device instance $6 r0 *1 2.395,1.935 sky130_fd_pr__nfet_01v8__model +M$6 52 15 16 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.0588P ++ AD=0.18165P PS=0.7U PD=1.285U +* device instance $7 r0 *1 1.575,2.56 sky130_fd_pr__nfet_01v8__model +M$7 11 26 3 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.0588P PS=1.285U PD=0.7U +* device instance $8 r0 *1 2.785,2.56 sky130_fd_pr__nfet_01v8__model +M$8 16 26 4 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.0588P PS=1.285U PD=0.7U +* device instance $9 r0 *1 1.575,2.99 sky130_fd_pr__nfet_01v8__model +M$9 3 31 34 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.0588P ++ AD=0.18165P PS=0.7U PD=1.285U +* device instance $10 r0 *1 2.785,2.99 sky130_fd_pr__nfet_01v8__model +M$10 4 31 35 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.0588P ++ AD=0.18165P PS=0.7U PD=1.285U +* device instance $11 r0 *1 1.965,3.615 sky130_fd_pr__nfet_01v8__model +M$11 34 32 52 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.0588P PS=1.285U PD=0.7U +* device instance $12 r0 *1 2.395,3.615 sky130_fd_pr__nfet_01v8__model +M$12 35 37 52 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.0588P PS=1.285U PD=0.7U +* device instance $13 r0 *1 4.145,1.935 sky130_fd_pr__nfet_01v8__model +M$13 15 16 52 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.0588P PS=1.285U PD=0.7U +* device instance $14 r0 *1 4.575,1.935 sky130_fd_pr__nfet_01v8__model +M$14 52 19 20 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.0588P ++ AD=0.18165P PS=0.7U PD=1.285U +* device instance $15 r0 *1 3.755,2.56 sky130_fd_pr__nfet_01v8__model +M$15 15 26 5 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.0588P PS=1.285U PD=0.7U +* device instance $16 r0 *1 4.965,2.56 sky130_fd_pr__nfet_01v8__model +M$16 20 26 6 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.0588P PS=1.285U PD=0.7U +* device instance $17 r0 *1 3.755,2.99 sky130_fd_pr__nfet_01v8__model +M$17 5 31 37 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.0588P ++ AD=0.18165P PS=0.7U PD=1.285U +* device instance $18 r0 *1 4.965,2.99 sky130_fd_pr__nfet_01v8__model +M$18 6 31 38 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.0588P ++ AD=0.18165P PS=0.7U PD=1.285U +* device instance $19 r0 *1 4.145,3.615 sky130_fd_pr__nfet_01v8__model +M$19 37 35 52 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.0588P PS=1.285U PD=0.7U +* device instance $20 r0 *1 4.575,3.615 sky130_fd_pr__nfet_01v8__model +M$20 38 40 52 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.0588P PS=1.285U PD=0.7U +* device instance $21 r0 *1 6.325,1.935 sky130_fd_pr__nfet_01v8__model +M$21 19 20 52 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.0588P PS=1.285U PD=0.7U +* device instance $22 r0 *1 6.755,1.935 sky130_fd_pr__nfet_01v8__model +M$22 52 23 24 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.0588P ++ AD=0.18165P PS=0.7U PD=1.285U +* device instance $23 r0 *1 5.935,2.56 sky130_fd_pr__nfet_01v8__model +M$23 19 26 7 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.0588P PS=1.285U PD=0.7U +* device instance $24 r0 *1 7.145,2.56 sky130_fd_pr__nfet_01v8__model +M$24 24 26 8 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.0588P PS=1.285U PD=0.7U +* device instance $25 r0 *1 5.935,2.99 sky130_fd_pr__nfet_01v8__model +M$25 7 31 40 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.0588P ++ AD=0.18165P PS=0.7U PD=1.285U +* device instance $26 r0 *1 7.145,2.99 sky130_fd_pr__nfet_01v8__model +M$26 8 31 41 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.0588P ++ AD=0.18165P PS=0.7U PD=1.285U +* device instance $27 r0 *1 6.325,3.615 sky130_fd_pr__nfet_01v8__model +M$27 40 38 52 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.0588P PS=1.285U PD=0.7U +* device instance $28 r0 *1 6.755,3.615 sky130_fd_pr__nfet_01v8__model +M$28 41 50 52 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.0588P PS=1.285U PD=0.7U +* device instance $29 r0 *1 8.505,1.935 sky130_fd_pr__nfet_01v8__model +M$29 23 24 52 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.1113P PS=1.285U PD=1.37U +* device instance $30 r0 *1 8.115,2.56 sky130_fd_pr__nfet_01v8__model +M$30 23 26 9 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.0588P PS=1.285U PD=0.7U +* device instance $31 r0 *1 8.115,2.99 sky130_fd_pr__nfet_01v8__model +M$31 9 31 50 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.0588P ++ AD=0.18165P PS=0.7U PD=1.285U +* device instance $32 r0 *1 8.505,3.615 sky130_fd_pr__nfet_01v8__model +M$32 50 41 52 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.1113P PS=1.285U PD=1.37U +* device instance $33 r0 *1 0.215,0.605 sky130_fd_pr__pfet_01v8__model +M$33 1 11 12 1 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.1113P ++ AD=0.1869P PS=1.37U PD=1.73U +* device instance $34 r0 *1 1.965,0.605 sky130_fd_pr__pfet_01v8__model +M$34 11 12 1 1 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.1869P ++ AD=0.0588P PS=1.73U PD=0.7U +* device instance $35 r0 *1 2.395,0.605 sky130_fd_pr__pfet_01v8__model +M$35 1 15 16 1 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.0588P ++ AD=0.1869P PS=0.7U PD=1.73U +* device instance $36 r0 *1 4.145,0.605 sky130_fd_pr__pfet_01v8__model +M$36 15 16 1 1 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.1869P ++ AD=0.0588P PS=1.73U PD=0.7U +* device instance $37 r0 *1 4.575,0.605 sky130_fd_pr__pfet_01v8__model +M$37 1 19 20 1 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.0588P ++ AD=0.1869P PS=0.7U PD=1.73U +* device instance $38 r0 *1 6.325,0.605 sky130_fd_pr__pfet_01v8__model +M$38 19 20 1 1 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.1869P ++ AD=0.0588P PS=1.73U PD=0.7U +* device instance $39 r0 *1 6.755,0.605 sky130_fd_pr__pfet_01v8__model +M$39 1 23 24 1 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.0588P ++ AD=0.1869P PS=0.7U PD=1.73U +* device instance $40 r0 *1 8.505,0.605 sky130_fd_pr__pfet_01v8__model +M$40 23 24 1 1 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.1869P ++ AD=0.1113P PS=1.73U PD=1.37U +* device instance $41 r0 *1 0.215,4.945 sky130_fd_pr__pfet_01v8__model +M$41 1 34 32 1 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.1113P ++ AD=0.1869P PS=1.37U PD=1.73U +* device instance $42 r0 *1 1.965,4.945 sky130_fd_pr__pfet_01v8__model +M$42 34 32 1 1 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.1869P ++ AD=0.0588P PS=1.73U PD=0.7U +* device instance $43 r0 *1 2.395,4.945 sky130_fd_pr__pfet_01v8__model +M$43 1 37 35 1 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.0588P ++ AD=0.1869P PS=0.7U PD=1.73U +* device instance $44 r0 *1 4.145,4.945 sky130_fd_pr__pfet_01v8__model +M$44 37 35 1 1 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.1869P ++ AD=0.0588P PS=1.73U PD=0.7U +* device instance $45 r0 *1 4.575,4.945 sky130_fd_pr__pfet_01v8__model +M$45 1 40 38 1 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.0588P ++ AD=0.1869P PS=0.7U PD=1.73U +* device instance $46 r0 *1 6.325,4.945 sky130_fd_pr__pfet_01v8__model +M$46 40 38 1 1 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.1869P ++ AD=0.0588P PS=1.73U PD=0.7U +* device instance $47 r0 *1 6.755,4.945 sky130_fd_pr__pfet_01v8__model +M$47 1 50 41 1 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.0588P ++ AD=0.1869P PS=0.7U PD=1.73U +* device instance $48 r0 *1 8.505,4.945 sky130_fd_pr__pfet_01v8__model +M$48 50 41 1 1 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.1869P ++ AD=0.1113P PS=1.73U PD=1.37U +.ENDS SP6TArray_2X4 diff --git a/testdata/lvs/test_22a.lvsdb b/testdata/lvs/test_22a.lvsdb new file mode 100644 index 000000000..071ed5e11 --- /dev/null +++ b/testdata/lvs/test_22a.lvsdb @@ -0,0 +1,2590 @@ +#%lvsdb-klayout + +# Layout +layout( + top(SP6TArray_2X4) + unit(0.001) + + # Layer section + # This section lists the mask layers (drawing or derived) and their connections. + + # Mask layers + layer(l1) + layer(l2) + layer(l3) + layer(l4) + layer(l5 '64/20') + layer(l6) + layer(l7 '66/20') + layer(l8) + layer(l9 '67/20') + layer(l10) + layer(l11 '68/20') + layer(l12 '68/16') + layer(l13 '69/20') + layer(l14 '69/16') + layer(l15) + layer(l16) + layer(l17) + layer(l18) + layer(l19) + layer(l20) + layer(l21 '66/44') + layer(l22 '66/20') + layer(l23 '67/44') + layer(l24 '68/44') + layer(l25) + layer(l26) + layer(l27) + + # Mask layer connectivity + connect(l1 l1) + connect(l2 l2 l3 l4 l6 l21) + connect(l3 l2 l3) + connect(l4 l2 l4 l5) + connect(l5 l4 l5) + connect(l6 l2 l6) + connect(l7 l7 l8) + connect(l8 l7 l8) + connect(l9 l9 l10 l21 l23) + connect(l10 l9 l10) + connect(l11 l11 l12 l23 l24) + connect(l12 l11 l12) + connect(l13 l13 l14 l24 l25) + connect(l14 l13 l14) + connect(l15 l15 l16 l25 l26) + connect(l16 l15 l16) + connect(l17 l17 l18 l26 l27) + connect(l18 l17 l18) + connect(l19 l19 l20 l27) + connect(l20 l19 l20) + connect(l21 l2 l9 l21 l22) + connect(l22 l21 l22) + connect(l23 l9 l11 l23) + connect(l24 l11 l13 l24) + connect(l25 l13 l15 l25) + connect(l26 l15 l17 l26) + connect(l27 l17 l19 l27) + + # Global nets and connectivity + global(l1 vss) + global(l6 vss) + + # Device class section + class(active_res RES) + class(poly_res RES) + class(sky130_fd_pr__diode_pw2nd_05v5 DIODE) + class(sky130_fd_pr__diode_pd2nw_05v5 DIODE) + class(sky130_fd_pr__nfet_01v8__model MOS4) + class(sky130_fd_pr__nfet_01v8_lvt__model MOS4) + class(sky130_fd_pr__nfet_g5v0d10v5__model MOS4) + class(sky130_fd_pr__pfet_01v8__model MOS4) + class(sky130_fd_pr__pfet_01v8_hvt__model MOS4) + class(sky130_fd_pr__pfet_01v8_lvt__model MOS4) + class(sky130_fd_pr__pfet_g5v0d10v5__model MOS4) + + # Device abstracts section + # Device abstracts list the pin shapes of the devices. + device(D$sky130_fd_pr__nfet_01v8__model sky130_fd_pr__nfet_01v8__model + terminal(S + rect(l2 (-340 -210) (265 420)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + polygon(l2 (75 -210) (0 420) (105 0) (0 340) (420 0) (0 -760)) + ) + terminal(B + rect(l1 (-75 -210) (150 420)) + ) + ) + device(D$sky130_fd_pr__nfet_01v8__model$1 sky130_fd_pr__nfet_01v8__model + terminal(S + polygon(l2 (-315 -835) (0 420) (105 0) (0 340) (420 0) (0 -760)) + ) + terminal(G + rect(l22 (-210 -75) (420 150)) + ) + terminal(D + rect(l2 (-210 75) (420 280)) + ) + terminal(B + rect(l1 (-210 -75) (420 150)) + ) + ) + device(D$sky130_fd_pr__nfet_01v8__model$2 sky130_fd_pr__nfet_01v8__model + terminal(S + rect(l2 (-210 -355) (420 280)) + ) + terminal(G + rect(l22 (-210 -75) (420 150)) + ) + terminal(D + polygon(l2 (-210 75) (0 340) (-105 0) (0 420) (525 0) (0 -760)) + ) + terminal(B + rect(l1 (-210 -75) (420 150)) + ) + ) + device(D$sky130_fd_pr__nfet_01v8__model$3 sky130_fd_pr__nfet_01v8__model + terminal(S + polygon(l2 (180 -550) (0 340) (-105 0) (0 420) (525 0) (0 -760)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (-340 -210) (265 420)) + ) + terminal(B + rect(l1 (-75 -210) (150 420)) + ) + ) + device(D$sky130_fd_pr__nfet_01v8__model$4 sky130_fd_pr__nfet_01v8__model + terminal(S + polygon(l2 (-600 -210) (0 760) (420 0) (0 -340) (105 0) (0 -420)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (75 -210) (280 420)) + ) + terminal(B + rect(l1 (-75 -210) (150 420)) + ) + ) + device(D$sky130_fd_pr__nfet_01v8__model$5 sky130_fd_pr__nfet_01v8__model + terminal(S + rect(l2 (-355 -210) (280 420)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + polygon(l2 (75 -210) (0 420) (105 0) (0 340) (420 0) (0 -760)) + ) + terminal(B + rect(l1 (-75 -210) (150 420)) + ) + ) + device(D$sky130_fd_pr__nfet_01v8__model$6 sky130_fd_pr__nfet_01v8__model + terminal(S + polygon(l2 (-210 -835) (0 760) (420 0) (0 -340) (105 0) (0 -420)) + ) + terminal(G + rect(l22 (-210 -75) (420 150)) + ) + terminal(D + rect(l2 (-210 75) (420 280)) + ) + terminal(B + rect(l1 (-210 -75) (420 150)) + ) + ) + device(D$sky130_fd_pr__nfet_01v8__model$7 sky130_fd_pr__nfet_01v8__model + terminal(S + rect(l2 (-210 -355) (420 280)) + ) + terminal(G + rect(l22 (-210 -75) (420 150)) + ) + terminal(D + polygon(l2 (-210 75) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) + ) + terminal(B + rect(l1 (-210 -75) (420 150)) + ) + ) + device(D$sky130_fd_pr__nfet_01v8__model$8 sky130_fd_pr__nfet_01v8__model + terminal(S + polygon(l2 (-600 -550) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (75 -210) (280 420)) + ) + terminal(B + rect(l1 (-75 -210) (150 420)) + ) + ) + device(D$sky130_fd_pr__nfet_01v8__model$9 sky130_fd_pr__nfet_01v8__model + terminal(S + polygon(l2 (180 -550) (0 340) (-105 0) (0 420) (525 0) (0 -760)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (-355 -210) (280 420)) + ) + terminal(B + rect(l1 (-75 -210) (150 420)) + ) + ) + device(D$sky130_fd_pr__nfet_01v8__model$10 sky130_fd_pr__nfet_01v8__model + terminal(S + polygon(l2 (-600 -210) (0 760) (420 0) (0 -340) (105 0) (0 -420)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (75 -210) (265 420)) + ) + terminal(B + rect(l1 (-75 -210) (150 420)) + ) + ) + device(D$sky130_fd_pr__nfet_01v8__model$11 sky130_fd_pr__nfet_01v8__model + terminal(S + polygon(l2 (-600 -550) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (75 -210) (265 420)) + ) + terminal(B + rect(l1 (-75 -210) (150 420)) + ) + ) + device(D$sky130_fd_pr__pfet_01v8__model sky130_fd_pr__pfet_01v8__model + terminal(S + rect(l2 (-340 -210) (265 420)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (75 -210) (445 420)) + ) + terminal(B + rect(l5 (-75 -210) (150 420)) + ) + ) + device(D$sky130_fd_pr__pfet_01v8__model$1 sky130_fd_pr__pfet_01v8__model + terminal(S + rect(l2 (-520 -210) (445 420)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (75 -210) (280 420)) + ) + terminal(B + rect(l5 (-75 -210) (150 420)) + ) + ) + device(D$sky130_fd_pr__pfet_01v8__model$2 sky130_fd_pr__pfet_01v8__model + terminal(S + rect(l2 (-355 -210) (280 420)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (75 -210) (445 420)) + ) + terminal(B + rect(l5 (-75 -210) (150 420)) + ) + ) + device(D$sky130_fd_pr__pfet_01v8__model$3 sky130_fd_pr__pfet_01v8__model + terminal(S + rect(l2 (-520 -210) (445 420)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (75 -210) (265 420)) + ) + terminal(B + rect(l5 (-75 -210) (150 420)) + ) + ) + + # Circuit section + # Circuits are the hierarchical building blocks of the netlist. + circuit(SP6TArray_2X4 + + # Circuit boundary + rect((-385 -305) (9490 6160)) + + # Nets with their geometries + net(1 name(vdd) + rect(l2 (-205 -125) (9130 250)) + rect(l2 (-9050 270) (265 420)) + rect(l2 (1900 -420) (280 420)) + rect(l2 (1900 -420) (280 420)) + rect(l2 (1900 -420) (280 420)) + rect(l2 (1900 -420) (265 420)) + rect(l2 (-8970 3920) (265 420)) + rect(l2 (-345 270) (9130 250)) + rect(l2 (-6885 -940) (280 420)) + rect(l2 (1900 -420) (280 420)) + rect(l2 (1900 -420) (280 420)) + rect(l2 (1900 -420) (265 420)) + rect(l4 (-9050 -5280) (9130 250)) + rect(l4 (-9130 5300) (9130 250)) + rect(l5 (-7130 -5980) (2950 1300)) + rect(l5 (-5130 -1300) (2950 1300)) + rect(l5 (1410 -1300) (2950 1300)) + rect(l5 (-770 -1300) (2950 1300)) + rect(l5 (-9490 3560) (2950 1300)) + rect(l5 (-770 -1300) (2950 1300)) + rect(l5 (-770 -1300) (2950 1300)) + rect(l5 (-770 -1300) (2950 1300)) + rect(l9 (-9270 -5940) (2510 170)) + rect(l9 (-330 -170) (2510 170)) + rect(l9 (-330 -170) (2510 170)) + rect(l9 (-330 -170) (2510 170)) + rect(l9 (-8970 0) (170 685)) + rect(l9 (2010 -685) (170 685)) + rect(l9 (-170 -685) (170 685)) + rect(l9 (2010 -685) (170 685)) + rect(l9 (-170 -685) (170 685)) + rect(l9 (2010 -685) (170 685)) + rect(l9 (-170 -685) (170 685)) + rect(l9 (2010 -685) (170 685)) + rect(l9 (-8970 4695) (2510 170)) + rect(l9 (-2430 -855) (170 685)) + rect(l9 (1930 0) (2510 170)) + rect(l9 (-2430 -855) (170 685)) + rect(l9 (-170 -685) (170 685)) + rect(l9 (1930 0) (2510 170)) + rect(l9 (-2430 -855) (170 685)) + rect(l9 (-170 -685) (170 685)) + rect(l9 (1930 0) (2510 170)) + rect(l9 (-2430 -855) (170 685)) + rect(l9 (-170 -685) (170 685)) + rect(l9 (2010 -685) (170 685)) + rect(l11 (-8935 -5625) (260 320)) + rect(l11 (1920 -320) (260 320)) + rect(l11 (-260 -320) (260 320)) + rect(l11 (1920 -320) (260 320)) + rect(l11 (-260 -320) (260 320)) + rect(l11 (1920 -320) (260 320)) + rect(l11 (-260 -320) (260 320)) + rect(l11 (1920 -320) (260 320)) + rect(l11 (-8980 5230) (260 320)) + rect(l11 (1920 -320) (260 320)) + rect(l11 (-260 -320) (260 320)) + rect(l11 (1920 -320) (260 320)) + rect(l11 (-260 -320) (260 320)) + rect(l11 (1920 -320) (260 320)) + rect(l11 (-260 -320) (260 320)) + rect(l11 (1920 -320) (260 320)) + rect(l13 (-9010 -5840) (2500 260)) + rect(l13 (-2500 -260) (2500 260)) + rect(l13 (-2500 -260) (4680 260)) + rect(l13 (-4680 -260) (9040 260)) + rect(l13 (-6860 -260) (2500 260)) + rect(l13 (-2500 -260) (2500 260)) + rect(l13 (-320 -260) (2500 260)) + rect(l13 (-2500 -260) (4680 260)) + rect(l13 (-4680 -260) (2500 260)) + rect(l13 (-320 -260) (2500 260)) + rect(l13 (-2500 -260) (2500 260)) + rect(l13 (-9040 5290) (2500 260)) + rect(l13 (-2500 -260) (4680 260)) + rect(l13 (-4680 -260) (9040 260)) + rect(l13 (-9040 -260) (2500 260)) + rect(l13 (-320 -260) (2500 260)) + rect(l13 (-2500 -260) (2500 260)) + rect(l13 (-320 -260) (2500 260)) + rect(l13 (-2500 -260) (4680 260)) + rect(l13 (-4680 -260) (2500 260)) + rect(l13 (-320 -260) (2500 260)) + rect(l13 (-2500 -260) (2500 260)) + rect(l14 (-9040 -5810) (2500 260)) + rect(l14 (-2500 -260) (2500 260)) + rect(l14 (-2500 -260) (4680 260)) + rect(l14 (-4680 -260) (9040 260)) + rect(l14 (-6860 -260) (2500 260)) + rect(l14 (-2500 -260) (2500 260)) + rect(l14 (-320 -260) (2500 260)) + rect(l14 (-2500 -260) (2500 260)) + rect(l14 (-2500 -260) (4680 260)) + rect(l14 (-2500 -260) (2500 260)) + rect(l14 (-2500 -260) (2500 260)) + rect(l14 (-4521 -131) (2 2)) + rect(l14 (-4521 5419) (2500 260)) + rect(l14 (-2500 -260) (4680 260)) + rect(l14 (-4680 -260) (9040 260)) + rect(l14 (-9040 -260) (2500 260)) + rect(l14 (-320 -260) (2500 260)) + rect(l14 (-2500 -260) (2500 260)) + rect(l14 (-320 -260) (4680 260)) + rect(l14 (-4680 -260) (2500 260)) + rect(l14 (-2500 -260) (2500 260)) + rect(l14 (-320 -260) (2500 260)) + rect(l14 (-2500 -260) (2500 260)) + rect(l14 (-4521 -131) (2 2)) + rect(l21 (-4446 -5636) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (-8890 435) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (-8890 4170) (170 170)) + rect(l21 (-170 435) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (-170 -775) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (-170 435) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (-170 -775) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (2010 435) (170 170)) + rect(l21 (-170 -775) (170 170)) + rect(l23 (-8890 -5115) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l23 (-8890 5380) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l24 (-8880 -5710) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l24 (-150 -150) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l24 (-150 -150) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l24 (-150 -150) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l24 (-8870 5400) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l24 (-150 -150) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l24 (-150 -150) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l24 (-150 -150) (150 150)) + rect(l24 (2030 -150) (150 150)) + ) + net(2 name('bl[0]') + rect(l2 (395 2635) (420 280)) + polygon(l9 (-295 -305) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330)) + polygon(l9 (-170 0) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330)) + rect(l11 (-260 -2610) (230 5550)) + rect(l11 (-230 -5550) (230 5550)) + rect(l11 (-230 -5550) (230 5550)) + rect(l11 (-230 -5550) (230 2920)) + rect(l11 (-230 -290) (230 2920)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -5550) (230 2920)) + rect(l12 (-230 -290) (230 2920)) + rect(l12 (-116 -2776) (2 2)) + rect(l21 (-26 -86) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l23 (-230 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + ) + net(3 name('bl_n[0]') + rect(l2 (1365 2635) (420 280)) + polygon(l9 (-295 -305) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80)) + polygon(l9 (-170 0) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80)) + rect(l11 (-140 -2610) (230 2920)) + rect(l11 (-230 -2920) (230 5550)) + rect(l11 (-230 -5550) (230 5550)) + rect(l11 (-230 -5550) (230 5550)) + rect(l11 (-230 -2920) (230 2920)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -5550) (230 2920)) + rect(l12 (-230 -2920) (230 5550)) + rect(l12 (-230 -2920) (230 2920)) + rect(l12 (-116 -2776) (2 2)) + rect(l21 (-146 -86) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l23 (-110 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + ) + net(4 name('bl[1]') + rect(l2 (2575 2635) (420 280)) + polygon(l9 (-295 -305) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330)) + polygon(l9 (-170 0) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330)) + rect(l11 (-260 -2610) (230 5550)) + rect(l11 (-230 -5550) (230 5550)) + rect(l11 (-230 -5550) (230 2920)) + rect(l11 (-230 -2920) (230 5550)) + rect(l11 (-230 -2920) (230 2920)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -5550) (230 2920)) + rect(l12 (-230 -290) (230 2920)) + rect(l12 (-116 -2776) (2 2)) + rect(l21 (-26 -86) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l23 (-230 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + ) + net(5 name('bl_n[1]') + rect(l2 (3545 2635) (420 280)) + polygon(l9 (-295 -305) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80)) + polygon(l9 (-170 0) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80)) + rect(l11 (-140 -2610) (230 5550)) + rect(l11 (-230 -5550) (230 5550)) + rect(l11 (-230 -5550) (230 2920)) + rect(l11 (-230 -2920) (230 5550)) + rect(l11 (-230 -2920) (230 2920)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -5550) (230 2920)) + rect(l12 (-230 -2920) (230 5550)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -2920) (230 2920)) + rect(l12 (-116 -2776) (2 2)) + rect(l21 (-146 -86) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l23 (-110 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + ) + net(6 name('bl[2]') + rect(l2 (4755 2635) (420 280)) + polygon(l9 (-295 -305) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330)) + polygon(l9 (-170 0) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330)) + rect(l11 (-260 -2610) (230 5550)) + rect(l11 (-230 -5550) (230 5550)) + rect(l11 (-230 -5550) (230 2920)) + rect(l11 (-230 -2920) (230 5550)) + rect(l11 (-230 -2920) (230 2920)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -5550) (230 2920)) + rect(l12 (-230 -2920) (230 5550)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -2920) (230 2920)) + rect(l12 (-116 -2776) (2 2)) + rect(l21 (-26 -86) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l23 (-230 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + ) + net(7 name('bl_n[2]') + rect(l2 (5725 2635) (420 280)) + polygon(l9 (-295 -305) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80)) + polygon(l9 (-170 0) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80)) + rect(l11 (-140 -2610) (230 5550)) + rect(l11 (-230 -5550) (230 5550)) + rect(l11 (-230 -5550) (230 2920)) + rect(l11 (-230 -2920) (230 5550)) + rect(l11 (-230 -2920) (230 2920)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -5550) (230 2920)) + rect(l12 (-230 -2920) (230 5550)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -2920) (230 2920)) + rect(l12 (-116 -2776) (2 2)) + rect(l21 (-146 -86) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l23 (-110 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + ) + net(8 name('bl[3]') + rect(l2 (6935 2635) (420 280)) + polygon(l9 (-295 -305) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330)) + polygon(l9 (-170 0) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330)) + rect(l11 (-260 -2610) (230 5550)) + rect(l11 (-230 -5550) (230 5550)) + rect(l11 (-230 -5550) (230 5550)) + rect(l11 (-230 -5550) (230 2920)) + rect(l11 (-230 -290) (230 2920)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -5550) (230 2920)) + rect(l12 (-230 -290) (230 2920)) + rect(l12 (-116 -2776) (2 2)) + rect(l21 (-26 -86) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l23 (-230 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + ) + net(9 name('bl_n[3]') + rect(l2 (7905 2635) (420 280)) + polygon(l9 (-295 -305) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80)) + polygon(l9 (-170 0) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80)) + rect(l11 (-140 -2610) (230 2920)) + rect(l11 (-230 -2920) (230 5550)) + rect(l11 (-230 -5550) (230 5550)) + rect(l11 (-230 -5550) (230 5550)) + rect(l11 (-230 -2920) (230 2920)) + rect(l12 (-230 -5550) (230 2920)) + rect(l12 (-230 -2920) (230 5550)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -2920) (230 2920)) + rect(l12 (-116 -2776) (2 2)) + rect(l21 (-146 -86) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l23 (-110 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + ) + net(10 + rect(l7 (290 955) (950 150)) + rect(l7 (-1100 -840) (150 2010)) + rect(l7 (950 -1320) (330 270)) + ) + net(11 + polygon(l2 (1365 1725) (0 760) (420 0) (0 -340) (105 0) (0 -420)) + rect(l2 (-445 -1330) (445 420)) + polygon(l9 (-405 -370) (0 560) (-245 0) (0 170) (245 0) (0 840) (170 0) (0 -1570)) + rect(l21 (-335 560) (170 170)) + rect(l21 (-5 590) (170 170)) + rect(l21 (-170 -1410) (170 170)) + rect(l22 (-1365 260) (950 150)) + rect(l22 (-1100 -840) (150 2010)) + rect(l22 (950 -1320) (330 270)) + ) + net(12 + rect(l2 (290 395) (445 420)) + polygon(l2 (-445 910) (0 420) (105 0) (0 340) (420 0) (0 -760)) + polygon(l9 (-290 -1280) (0 1570) (170 0) (0 -480) (245 0) (0 -170) (-245 0) (0 -920)) + rect(l21 (-170 80) (170 170)) + rect(l21 (-170 1070) (170 170)) + rect(l21 (-5 -570) (170 170)) + rect(l22 (-250 -220) (330 270)) + rect(l22 (0 -150) (950 150)) + rect(l22 (0 -1320) (150 2010)) + ) + net(13 + rect(l7 (940 1435) (950 150)) + rect(l7 (-1280 -270) (330 270)) + rect(l7 (950 -1320) (150 2010)) + ) + net(14 + rect(l7 (2470 955) (950 150)) + rect(l7 (-1100 -840) (150 2010)) + rect(l7 (950 -1320) (330 270)) + ) + net(15 + rect(l2 (3625 395) (445 420)) + polygon(l2 (-525 910) (0 760) (420 0) (0 -340) (105 0) (0 -420)) + polygon(l9 (-405 -1280) (0 560) (-245 0) (0 170) (245 0) (0 840) (170 0) (0 -1570)) + rect(l21 (-335 560) (170 170)) + rect(l21 (-5 -650) (170 170)) + rect(l21 (-170 1070) (170 170)) + rect(l22 (-1365 -980) (950 150)) + rect(l22 (-1100 -840) (150 2010)) + rect(l22 (950 -1320) (330 270)) + ) + net(16 + polygon(l2 (2470 1725) (0 420) (105 0) (0 340) (420 0) (0 -760)) + rect(l2 (-525 -1330) (445 420)) + polygon(l9 (-210 -370) (0 1570) (170 0) (0 -480) (245 0) (0 -170) (-245 0) (0 -920)) + rect(l21 (-170 1320) (170 170)) + rect(l21 (-170 -1410) (170 170)) + rect(l21 (-5 670) (170 170)) + rect(l22 (-250 -220) (330 270)) + rect(l22 (0 -150) (950 150)) + rect(l22 (0 -1320) (150 2010)) + ) + net(17 + rect(l7 (3120 1435) (950 150)) + rect(l7 (-1280 -270) (330 270)) + rect(l7 (950 -1320) (150 2010)) + ) + net(18 + rect(l7 (4650 955) (950 150)) + rect(l7 (-1100 -840) (150 2010)) + rect(l7 (950 -1320) (330 270)) + ) + net(19 + polygon(l2 (5725 1725) (0 760) (420 0) (0 -340) (105 0) (0 -420)) + rect(l2 (-445 -1330) (445 420)) + polygon(l9 (-405 -370) (0 560) (-245 0) (0 170) (245 0) (0 840) (170 0) (0 -1570)) + rect(l21 (-335 560) (170 170)) + rect(l21 (-5 590) (170 170)) + rect(l21 (-170 -1410) (170 170)) + rect(l22 (-1365 260) (950 150)) + rect(l22 (-1100 -840) (150 2010)) + rect(l22 (950 -1320) (330 270)) + ) + net(20 + polygon(l2 (4650 1725) (0 420) (105 0) (0 340) (420 0) (0 -760)) + rect(l2 (-525 -1330) (445 420)) + polygon(l9 (-210 -370) (0 1570) (170 0) (0 -480) (245 0) (0 -170) (-245 0) (0 -920)) + rect(l21 (-170 1320) (170 170)) + rect(l21 (-170 -1410) (170 170)) + rect(l21 (-5 670) (170 170)) + rect(l22 (-250 -220) (330 270)) + rect(l22 (0 -150) (950 150)) + rect(l22 (0 -1320) (150 2010)) + ) + net(21 + rect(l7 (5300 1435) (950 150)) + rect(l7 (-1280 -270) (330 270)) + rect(l7 (950 -1320) (150 2010)) + ) + net(22 + rect(l7 (6830 955) (950 150)) + rect(l7 (-1100 -840) (150 2010)) + rect(l7 (950 -1320) (330 270)) + ) + net(23 + rect(l2 (7985 395) (445 420)) + polygon(l2 (-525 910) (0 760) (420 0) (0 -340) (105 0) (0 -420)) + polygon(l9 (-405 -1280) (0 560) (-245 0) (0 170) (245 0) (0 840) (170 0) (0 -1570)) + rect(l21 (-335 560) (170 170)) + rect(l21 (-5 -650) (170 170)) + rect(l21 (-170 1070) (170 170)) + rect(l22 (-1365 -980) (950 150)) + rect(l22 (-1100 -840) (150 2010)) + rect(l22 (950 -1320) (330 270)) + ) + net(24 + rect(l2 (6830 395) (445 420)) + polygon(l2 (-445 910) (0 420) (105 0) (0 340) (420 0) (0 -760)) + polygon(l9 (-290 -1280) (0 1570) (170 0) (0 -480) (245 0) (0 -170) (-245 0) (0 -920)) + rect(l21 (-170 80) (170 170)) + rect(l21 (-170 1070) (170 170)) + rect(l21 (-5 -570) (170 170)) + rect(l22 (-250 -220) (330 270)) + rect(l22 (0 -150) (950 150)) + rect(l22 (0 -1320) (150 2010)) + ) + net(25 + rect(l7 (7480 1435) (950 150)) + rect(l7 (-1280 -270) (330 270)) + rect(l7 (950 -1320) (150 2010)) + ) + net(26 name('wl[0]') + rect(l9 (1005 2135) (170 500)) + rect(l9 (2010 -500) (170 500)) + rect(l9 (2010 -500) (170 500)) + rect(l9 (2010 -500) (170 500)) + polygon(l11 (-6755 -880) (0 320) (15 0) (0 290) (230 0) (0 -290) (15 0) (0 -320)) + polygon(l11 (1920 0) (0 320) (15 0) (0 290) (230 0) (0 -290) (15 0) (0 -320)) + polygon(l11 (1920 0) (0 320) (15 0) (0 290) (230 0) (0 -290) (15 0) (0 -320)) + polygon(l11 (1920 0) (0 320) (15 0) (0 290) (230 0) (0 -290) (15 0) (0 -320)) + rect(l13 (-7760 30) (2180 260)) + rect(l13 (-2180 -260) (4360 260)) + rect(l13 (-4360 -260) (2180 260)) + rect(l13 (-2180 -260) (8720 260)) + rect(l13 (-6540 -260) (2180 260)) + rect(l13 (-2180 -260) (2180 260)) + rect(l13 (0 -260) (2180 260)) + rect(l13 (-2180 -260) (2180 260)) + rect(l13 (-2180 -260) (4360 260)) + rect(l13 (-2180 -260) (2180 260)) + rect(l13 (-2180 -260) (2180 260)) + rect(l14 (-8720 -260) (4360 260)) + rect(l14 (-4360 -260) (2180 260)) + rect(l14 (-2180 -260) (8720 260)) + rect(l14 (-8720 -260) (2180 260)) + rect(l14 (0 -260) (2180 260)) + rect(l14 (-2180 -260) (2180 260)) + rect(l14 (-1 -131) (2 2)) + rect(l14 (-1 -131) (2180 260)) + rect(l14 (-2180 -260) (4360 260)) + rect(l14 (-4360 -260) (2180 260)) + rect(l14 (0 -260) (2180 260)) + rect(l14 (-2180 -260) (2180 260)) + rect(l21 (-7715 340) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (2010 -170) (170 170)) + polygon(l22 (-6760 -250) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180)) + polygon(l22 (1910 0) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180)) + polygon(l22 (1910 0) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180)) + polygon(l22 (1910 0) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180)) + rect(l23 (-6760 -170) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l24 (-6700 -465) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l24 (2030 -150) (150 150)) + ) + net(27 + polygon(l7 (955 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180)) + ) + net(28 + polygon(l7 (7495 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180)) + ) + net(29 + polygon(l7 (3135 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180)) + ) + net(30 + polygon(l7 (5315 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180)) + ) + net(31 name('wl[1]') + rect(l9 (1005 2915) (170 500)) + rect(l9 (2010 -500) (170 500)) + rect(l9 (2010 -500) (170 500)) + rect(l9 (2010 -500) (170 500)) + polygon(l11 (-6740 -230) (0 290) (-15 0) (0 320) (260 0) (0 -320) (-15 0) (0 -290)) + polygon(l11 (1950 0) (0 290) (-15 0) (0 320) (260 0) (0 -320) (-15 0) (0 -290)) + polygon(l11 (1950 0) (0 290) (-15 0) (0 320) (260 0) (0 -320) (-15 0) (0 -290)) + polygon(l11 (1950 0) (0 290) (-15 0) (0 320) (260 0) (0 -320) (-15 0) (0 -290)) + rect(l13 (-7745 320) (8720 260)) + rect(l13 (-8720 -260) (4360 260)) + rect(l13 (-4360 -260) (2180 260)) + rect(l13 (-2180 -260) (2180 260)) + rect(l13 (0 -260) (2180 260)) + rect(l13 (-2180 -260) (2180 260)) + rect(l13 (0 -260) (4360 260)) + rect(l13 (-4360 -260) (2180 260)) + rect(l13 (-2180 -260) (2180 260)) + rect(l13 (0 -260) (2180 260)) + rect(l13 (-2180 -260) (2180 260)) + rect(l14 (-8720 -260) (8720 260)) + rect(l14 (-8720 -260) (2180 260)) + rect(l14 (-2180 -260) (4360 260)) + rect(l14 (-4360 -260) (2180 260)) + rect(l14 (0 -260) (2180 260)) + rect(l14 (-2180 -260) (2180 260)) + rect(l14 (-1 -131) (2 2)) + rect(l14 (-1 -131) (2180 260)) + rect(l14 (-2180 -260) (4360 260)) + rect(l14 (-4360 -260) (2180 260)) + rect(l14 (0 -260) (2180 260)) + rect(l14 (-2180 -260) (2180 260)) + rect(l21 (-7715 -770) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (2010 -170) (170 170)) + polygon(l22 (-7450 -250) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) + polygon(l22 (530 0) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) + polygon(l22 (530 0) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) + polygon(l22 (530 0) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) + rect(l23 (-7450 330) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l24 (-6700 145) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l24 (2030 -150) (150 150)) + ) + net(32 + polygon(l2 (395 3065) (0 340) (-105 0) (0 420) (525 0) (0 -760)) + rect(l2 (-525 1670) (445 420)) + polygon(l9 (-210 -1620) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480)) + rect(l21 (-170 80) (170 170)) + rect(l21 (-5 230) (170 170)) + rect(l21 (-335 670) (170 170)) + rect(l22 (-85 -1060) (330 270)) + rect(l22 (0 -270) (950 150)) + rect(l22 (0 -840) (150 2010)) + ) + net(33 + rect(l7 (940 3965) (950 150)) + rect(l7 (-1280 -150) (330 270)) + rect(l7 (950 -960) (150 2010)) + ) + net(34 + polygon(l2 (1365 3065) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) + rect(l2 (-340 1670) (445 420)) + polygon(l9 (-405 -1620) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570)) + rect(l21 (-170 80) (170 170)) + rect(l21 (-335 590) (170 170)) + rect(l21 (-5 310) (170 170)) + rect(l22 (-1365 -580) (950 150)) + rect(l22 (-1100 -1320) (150 2010)) + rect(l22 (950 -960) (330 270)) + ) + net(35 + polygon(l2 (2575 3065) (0 340) (-105 0) (0 420) (525 0) (0 -760)) + rect(l2 (-525 1670) (445 420)) + polygon(l9 (-210 -1620) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480)) + rect(l21 (-170 80) (170 170)) + rect(l21 (-5 230) (170 170)) + rect(l21 (-335 670) (170 170)) + rect(l22 (-85 -1060) (330 270)) + rect(l22 (0 -270) (950 150)) + rect(l22 (0 -840) (150 2010)) + ) + net(36 + rect(l7 (3120 3965) (950 150)) + rect(l7 (-1280 -150) (330 270)) + rect(l7 (950 -960) (150 2010)) + ) + net(37 + polygon(l2 (3545 3065) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) + rect(l2 (-340 1670) (445 420)) + polygon(l9 (-405 -1620) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570)) + rect(l21 (-170 80) (170 170)) + rect(l21 (-335 590) (170 170)) + rect(l21 (-5 310) (170 170)) + rect(l22 (-1365 -580) (950 150)) + rect(l22 (-1100 -1320) (150 2010)) + rect(l22 (950 -960) (330 270)) + ) + net(38 + polygon(l2 (4755 3065) (0 340) (-105 0) (0 420) (525 0) (0 -760)) + rect(l2 (-525 1670) (445 420)) + polygon(l9 (-210 -1620) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480)) + rect(l21 (-170 80) (170 170)) + rect(l21 (-5 230) (170 170)) + rect(l21 (-335 670) (170 170)) + rect(l22 (-85 -1060) (330 270)) + rect(l22 (0 -270) (950 150)) + rect(l22 (0 -840) (150 2010)) + ) + net(39 + rect(l7 (5300 3965) (950 150)) + rect(l7 (-1280 -150) (330 270)) + rect(l7 (950 -960) (150 2010)) + ) + net(40 + polygon(l2 (5725 3065) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) + rect(l2 (-340 1670) (445 420)) + polygon(l9 (-405 -1620) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570)) + rect(l21 (-170 80) (170 170)) + rect(l21 (-335 590) (170 170)) + rect(l21 (-5 310) (170 170)) + rect(l22 (-1365 -580) (950 150)) + rect(l22 (-1100 -1320) (150 2010)) + rect(l22 (950 -960) (330 270)) + ) + net(41 + polygon(l2 (6935 3065) (0 340) (-105 0) (0 420) (525 0) (0 -760)) + rect(l2 (-525 1670) (445 420)) + polygon(l9 (-210 -1620) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480)) + rect(l21 (-170 80) (170 170)) + rect(l21 (-5 230) (170 170)) + rect(l21 (-335 670) (170 170)) + rect(l22 (-85 -1060) (330 270)) + rect(l22 (0 -270) (950 150)) + rect(l22 (0 -840) (150 2010)) + ) + net(42 + rect(l7 (7480 3965) (950 150)) + rect(l7 (-1280 -150) (330 270)) + rect(l7 (950 -960) (150 2010)) + ) + net(43 + polygon(l7 (265 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) + ) + net(44 + polygon(l7 (6805 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) + ) + net(45 + polygon(l7 (2445 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) + ) + net(46 + polygon(l7 (4625 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) + ) + net(47 + rect(l7 (290 4445) (950 150)) + rect(l7 (-1100 -1320) (150 2010)) + rect(l7 (950 -960) (330 270)) + ) + net(48 + rect(l7 (2470 4445) (950 150)) + rect(l7 (-1100 -1320) (150 2010)) + rect(l7 (950 -960) (330 270)) + ) + net(49 + rect(l7 (4650 4445) (950 150)) + rect(l7 (-1100 -1320) (150 2010)) + rect(l7 (950 -960) (330 270)) + ) + net(50 + polygon(l2 (7905 3065) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) + rect(l2 (-340 1670) (445 420)) + polygon(l9 (-405 -1620) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570)) + rect(l21 (-335 840) (170 170)) + rect(l21 (-5 -930) (170 170)) + rect(l21 (-170 1070) (170 170)) + rect(l22 (-1365 -580) (950 150)) + rect(l22 (-1100 -1320) (150 2010)) + rect(l22 (950 -960) (330 270)) + ) + net(51 + rect(l7 (6830 4445) (950 150)) + rect(l7 (-1100 -1320) (150 2010)) + rect(l7 (950 -960) (330 270)) + ) + net(52 name(vss) + rect(l2 (-125 1725) (265 420)) + rect(l2 (-265 270) (250 720)) + rect(l2 (1915 -1410) (280 420)) + rect(l2 (-265 270) (250 720)) + rect(l2 (1915 -1410) (280 420)) + rect(l2 (-265 270) (250 720)) + rect(l2 (1915 -1410) (280 420)) + rect(l2 (-265 270) (250 720)) + rect(l2 (1915 -1410) (265 420)) + rect(l2 (-250 270) (250 720)) + rect(l2 (-8970 270) (265 420)) + rect(l2 (1900 -420) (280 420)) + rect(l2 (1900 -420) (280 420)) + rect(l2 (1900 -420) (280 420)) + rect(l2 (1900 -420) (265 420)) + rect(l6 (-8970 -1410) (250 720)) + rect(l6 (1930 -720) (250 720)) + rect(l6 (1930 -720) (250 720)) + rect(l6 (1930 -720) (250 720)) + rect(l6 (1930 -720) (250 720)) + rect(l9 (-8930 -1365) (170 1170)) + rect(l9 (-170 -330) (170 1170)) + rect(l9 (2010 -2010) (170 1170)) + rect(l9 (-170 -1170) (170 1170)) + rect(l9 (-170 -330) (170 1170)) + rect(l9 (-170 -1170) (170 1170)) + rect(l9 (2010 -2010) (170 1170)) + rect(l9 (-170 -1170) (170 1170)) + rect(l9 (-170 -330) (170 1170)) + rect(l9 (-170 -1170) (170 1170)) + rect(l9 (2010 -2010) (170 1170)) + rect(l9 (-170 -1170) (170 1170)) + rect(l9 (-170 -330) (170 1170)) + rect(l9 (-170 -1170) (170 1170)) + rect(l9 (2010 -2010) (170 1170)) + rect(l9 (-170 -330) (170 1170)) + rect(l11 (-8935 -1165) (260 320)) + rect(l11 (-260 -320) (260 320)) + rect(l11 (1920 -320) (260 320)) + rect(l11 (-260 -320) (260 320)) + rect(l11 (-260 -320) (260 320)) + rect(l11 (-260 -320) (260 320)) + rect(l11 (1920 -320) (260 320)) + rect(l11 (-260 -320) (260 320)) + rect(l11 (-260 -320) (260 320)) + rect(l11 (-260 -320) (260 320)) + rect(l11 (1920 -320) (260 320)) + rect(l11 (-260 -320) (260 320)) + rect(l11 (-260 -320) (260 320)) + rect(l11 (-260 -320) (260 320)) + rect(l11 (1920 -320) (260 320)) + rect(l11 (-260 -320) (260 320)) + rect(l13 (-9010 -290) (4680 260)) + rect(l13 (-4680 -260) (2500 260)) + rect(l13 (-2500 -260) (9040 260)) + rect(l13 (-9040 -260) (2500 260)) + rect(l13 (-2500 -260) (2500 260)) + rect(l13 (-320 -260) (2500 260)) + rect(l13 (-2500 -260) (2500 260)) + rect(l13 (-2500 -260) (2500 260)) + rect(l13 (-320 -260) (4680 260)) + rect(l13 (-4680 -260) (2500 260)) + rect(l13 (-2500 -260) (2500 260)) + rect(l13 (-2500 -260) (2500 260)) + rect(l13 (-320 -260) (2500 260)) + rect(l13 (-2500 -260) (2500 260)) + rect(l13 (-2500 -260) (2500 260)) + rect(l14 (-9040 -260) (2500 260)) + rect(l14 (-2500 -260) (4680 260)) + rect(l14 (-4680 -260) (2500 260)) + rect(l14 (-2500 -260) (2500 260)) + rect(l14 (-2500 -260) (9040 260)) + rect(l14 (-6860 -260) (2500 260)) + rect(l14 (-2500 -260) (2500 260)) + rect(l14 (-2500 -260) (2500 260)) + rect(l14 (-320 -260) (2500 260)) + rect(l14 (-2500 -260) (4680 260)) + rect(l14 (-4680 -260) (2500 260)) + rect(l14 (-2500 -260) (2500 260)) + rect(l14 (-2341 -131) (2 2)) + rect(l14 (2019 -131) (2500 260)) + rect(l14 (-2500 -260) (2500 260)) + rect(l14 (-2500 -260) (2500 260)) + rect(l21 (-8965 -1055) (170 170)) + rect(l21 (-170 670) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (2010 -1010) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (-170 670) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (2010 -1010) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (-170 670) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (2010 -1010) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (-170 670) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (2010 -1010) (170 170)) + rect(l21 (-170 670) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (-8890 670) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l23 (-8890 -1010) (170 170)) + rect(l23 (-170 -170) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + rect(l24 (-8880 -160) (150 150)) + rect(l24 (-150 -150) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l24 (-150 -150) (150 150)) + rect(l24 (-150 -150) (150 150)) + rect(l24 (-150 -150) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l24 (-150 -150) (150 150)) + rect(l24 (-150 -150) (150 150)) + rect(l24 (-150 -150) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l24 (-150 -150) (150 150)) + rect(l24 (-150 -150) (150 150)) + rect(l24 (-150 -150) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l24 (-150 -150) (150 150)) + ) + + # Devices and their connections + device(1 D$sky130_fd_pr__nfet_01v8__model + location(215 1935) + param(L 0.15) + param(W 0.42) + param(AS 0.1113) + param(AD 0.18165) + param(PS 1.37) + param(PD 1.285) + terminal(S 52) + terminal(G 11) + terminal(D 12) + terminal(B 52) + ) + device(2 D$sky130_fd_pr__nfet_01v8__model$1 + location(605 2560) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.0588) + param(PS 1.285) + param(PD 0.7) + terminal(S 12) + terminal(G 26) + terminal(D 2) + terminal(B 52) + ) + device(3 D$sky130_fd_pr__nfet_01v8__model$2 + location(605 2990) + param(L 0.15) + param(W 0.42) + param(AS 0.0588) + param(AD 0.18165) + param(PS 0.7) + param(PD 1.285) + terminal(S 2) + terminal(G 31) + terminal(D 32) + terminal(B 52) + ) + device(4 D$sky130_fd_pr__nfet_01v8__model$3 + location(215 3615) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.1113) + param(PS 1.285) + param(PD 1.37) + terminal(S 32) + terminal(G 34) + terminal(D 52) + terminal(B 52) + ) + device(5 D$sky130_fd_pr__nfet_01v8__model$4 + location(1965 1935) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.0588) + param(PS 1.285) + param(PD 0.7) + terminal(S 11) + terminal(G 12) + terminal(D 52) + terminal(B 52) + ) + device(6 D$sky130_fd_pr__nfet_01v8__model$5 + location(2395 1935) + param(L 0.15) + param(W 0.42) + param(AS 0.0588) + param(AD 0.18165) + param(PS 0.7) + param(PD 1.285) + terminal(S 52) + terminal(G 15) + terminal(D 16) + terminal(B 52) + ) + device(7 D$sky130_fd_pr__nfet_01v8__model$6 + location(1575 2560) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.0588) + param(PS 1.285) + param(PD 0.7) + terminal(S 11) + terminal(G 26) + terminal(D 3) + terminal(B 52) + ) + device(8 D$sky130_fd_pr__nfet_01v8__model$1 + location(2785 2560) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.0588) + param(PS 1.285) + param(PD 0.7) + terminal(S 16) + terminal(G 26) + terminal(D 4) + terminal(B 52) + ) + device(9 D$sky130_fd_pr__nfet_01v8__model$7 + location(1575 2990) + param(L 0.15) + param(W 0.42) + param(AS 0.0588) + param(AD 0.18165) + param(PS 0.7) + param(PD 1.285) + terminal(S 3) + terminal(G 31) + terminal(D 34) + terminal(B 52) + ) + device(10 D$sky130_fd_pr__nfet_01v8__model$2 + location(2785 2990) + param(L 0.15) + param(W 0.42) + param(AS 0.0588) + param(AD 0.18165) + param(PS 0.7) + param(PD 1.285) + terminal(S 4) + terminal(G 31) + terminal(D 35) + terminal(B 52) + ) + device(11 D$sky130_fd_pr__nfet_01v8__model$8 + location(1965 3615) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.0588) + param(PS 1.285) + param(PD 0.7) + terminal(S 34) + terminal(G 32) + terminal(D 52) + terminal(B 52) + ) + device(12 D$sky130_fd_pr__nfet_01v8__model$9 + location(2395 3615) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.0588) + param(PS 1.285) + param(PD 0.7) + terminal(S 35) + terminal(G 37) + terminal(D 52) + terminal(B 52) + ) + device(13 D$sky130_fd_pr__nfet_01v8__model$4 + location(4145 1935) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.0588) + param(PS 1.285) + param(PD 0.7) + terminal(S 15) + terminal(G 16) + terminal(D 52) + terminal(B 52) + ) + device(14 D$sky130_fd_pr__nfet_01v8__model$5 + location(4575 1935) + param(L 0.15) + param(W 0.42) + param(AS 0.0588) + param(AD 0.18165) + param(PS 0.7) + param(PD 1.285) + terminal(S 52) + terminal(G 19) + terminal(D 20) + terminal(B 52) + ) + device(15 D$sky130_fd_pr__nfet_01v8__model$6 + location(3755 2560) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.0588) + param(PS 1.285) + param(PD 0.7) + terminal(S 15) + terminal(G 26) + terminal(D 5) + terminal(B 52) + ) + device(16 D$sky130_fd_pr__nfet_01v8__model$1 + location(4965 2560) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.0588) + param(PS 1.285) + param(PD 0.7) + terminal(S 20) + terminal(G 26) + terminal(D 6) + terminal(B 52) + ) + device(17 D$sky130_fd_pr__nfet_01v8__model$7 + location(3755 2990) + param(L 0.15) + param(W 0.42) + param(AS 0.0588) + param(AD 0.18165) + param(PS 0.7) + param(PD 1.285) + terminal(S 5) + terminal(G 31) + terminal(D 37) + terminal(B 52) + ) + device(18 D$sky130_fd_pr__nfet_01v8__model$2 + location(4965 2990) + param(L 0.15) + param(W 0.42) + param(AS 0.0588) + param(AD 0.18165) + param(PS 0.7) + param(PD 1.285) + terminal(S 6) + terminal(G 31) + terminal(D 38) + terminal(B 52) + ) + device(19 D$sky130_fd_pr__nfet_01v8__model$8 + location(4145 3615) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.0588) + param(PS 1.285) + param(PD 0.7) + terminal(S 37) + terminal(G 35) + terminal(D 52) + terminal(B 52) + ) + device(20 D$sky130_fd_pr__nfet_01v8__model$9 + location(4575 3615) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.0588) + param(PS 1.285) + param(PD 0.7) + terminal(S 38) + terminal(G 40) + terminal(D 52) + terminal(B 52) + ) + device(21 D$sky130_fd_pr__nfet_01v8__model$4 + location(6325 1935) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.0588) + param(PS 1.285) + param(PD 0.7) + terminal(S 19) + terminal(G 20) + terminal(D 52) + terminal(B 52) + ) + device(22 D$sky130_fd_pr__nfet_01v8__model$5 + location(6755 1935) + param(L 0.15) + param(W 0.42) + param(AS 0.0588) + param(AD 0.18165) + param(PS 0.7) + param(PD 1.285) + terminal(S 52) + terminal(G 23) + terminal(D 24) + terminal(B 52) + ) + device(23 D$sky130_fd_pr__nfet_01v8__model$6 + location(5935 2560) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.0588) + param(PS 1.285) + param(PD 0.7) + terminal(S 19) + terminal(G 26) + terminal(D 7) + terminal(B 52) + ) + device(24 D$sky130_fd_pr__nfet_01v8__model$1 + location(7145 2560) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.0588) + param(PS 1.285) + param(PD 0.7) + terminal(S 24) + terminal(G 26) + terminal(D 8) + terminal(B 52) + ) + device(25 D$sky130_fd_pr__nfet_01v8__model$7 + location(5935 2990) + param(L 0.15) + param(W 0.42) + param(AS 0.0588) + param(AD 0.18165) + param(PS 0.7) + param(PD 1.285) + terminal(S 7) + terminal(G 31) + terminal(D 40) + terminal(B 52) + ) + device(26 D$sky130_fd_pr__nfet_01v8__model$2 + location(7145 2990) + param(L 0.15) + param(W 0.42) + param(AS 0.0588) + param(AD 0.18165) + param(PS 0.7) + param(PD 1.285) + terminal(S 8) + terminal(G 31) + terminal(D 41) + terminal(B 52) + ) + device(27 D$sky130_fd_pr__nfet_01v8__model$8 + location(6325 3615) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.0588) + param(PS 1.285) + param(PD 0.7) + terminal(S 40) + terminal(G 38) + terminal(D 52) + terminal(B 52) + ) + device(28 D$sky130_fd_pr__nfet_01v8__model$9 + location(6755 3615) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.0588) + param(PS 1.285) + param(PD 0.7) + terminal(S 41) + terminal(G 50) + terminal(D 52) + terminal(B 52) + ) + device(29 D$sky130_fd_pr__nfet_01v8__model$10 + location(8505 1935) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.1113) + param(PS 1.285) + param(PD 1.37) + terminal(S 23) + terminal(G 24) + terminal(D 52) + terminal(B 52) + ) + device(30 D$sky130_fd_pr__nfet_01v8__model$6 + location(8115 2560) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.0588) + param(PS 1.285) + param(PD 0.7) + terminal(S 23) + terminal(G 26) + terminal(D 9) + terminal(B 52) + ) + device(31 D$sky130_fd_pr__nfet_01v8__model$7 + location(8115 2990) + param(L 0.15) + param(W 0.42) + param(AS 0.0588) + param(AD 0.18165) + param(PS 0.7) + param(PD 1.285) + terminal(S 9) + terminal(G 31) + terminal(D 50) + terminal(B 52) + ) + device(32 D$sky130_fd_pr__nfet_01v8__model$11 + location(8505 3615) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.1113) + param(PS 1.285) + param(PD 1.37) + terminal(S 50) + terminal(G 41) + terminal(D 52) + terminal(B 52) + ) + device(33 D$sky130_fd_pr__pfet_01v8__model + location(215 605) + param(L 0.15) + param(W 0.42) + param(AS 0.1113) + param(AD 0.1869) + param(PS 1.37) + param(PD 1.73) + terminal(S 1) + terminal(G 11) + terminal(D 12) + terminal(B 1) + ) + device(34 D$sky130_fd_pr__pfet_01v8__model$1 + location(1965 605) + param(L 0.15) + param(W 0.42) + param(AS 0.1869) + param(AD 0.0588) + param(PS 1.73) + param(PD 0.7) + terminal(S 11) + terminal(G 12) + terminal(D 1) + terminal(B 1) + ) + device(35 D$sky130_fd_pr__pfet_01v8__model$2 + location(2395 605) + param(L 0.15) + param(W 0.42) + param(AS 0.0588) + param(AD 0.1869) + param(PS 0.7) + param(PD 1.73) + terminal(S 1) + terminal(G 15) + terminal(D 16) + terminal(B 1) + ) + device(36 D$sky130_fd_pr__pfet_01v8__model$1 + location(4145 605) + param(L 0.15) + param(W 0.42) + param(AS 0.1869) + param(AD 0.0588) + param(PS 1.73) + param(PD 0.7) + terminal(S 15) + terminal(G 16) + terminal(D 1) + terminal(B 1) + ) + device(37 D$sky130_fd_pr__pfet_01v8__model$2 + location(4575 605) + param(L 0.15) + param(W 0.42) + param(AS 0.0588) + param(AD 0.1869) + param(PS 0.7) + param(PD 1.73) + terminal(S 1) + terminal(G 19) + terminal(D 20) + terminal(B 1) + ) + device(38 D$sky130_fd_pr__pfet_01v8__model$1 + location(6325 605) + param(L 0.15) + param(W 0.42) + param(AS 0.1869) + param(AD 0.0588) + param(PS 1.73) + param(PD 0.7) + terminal(S 19) + terminal(G 20) + terminal(D 1) + terminal(B 1) + ) + device(39 D$sky130_fd_pr__pfet_01v8__model$2 + location(6755 605) + param(L 0.15) + param(W 0.42) + param(AS 0.0588) + param(AD 0.1869) + param(PS 0.7) + param(PD 1.73) + terminal(S 1) + terminal(G 23) + terminal(D 24) + terminal(B 1) + ) + device(40 D$sky130_fd_pr__pfet_01v8__model$3 + location(8505 605) + param(L 0.15) + param(W 0.42) + param(AS 0.1869) + param(AD 0.1113) + param(PS 1.73) + param(PD 1.37) + terminal(S 23) + terminal(G 24) + terminal(D 1) + terminal(B 1) + ) + device(41 D$sky130_fd_pr__pfet_01v8__model + location(215 4945) + param(L 0.15) + param(W 0.42) + param(AS 0.1113) + param(AD 0.1869) + param(PS 1.37) + param(PD 1.73) + terminal(S 1) + terminal(G 34) + terminal(D 32) + terminal(B 1) + ) + device(42 D$sky130_fd_pr__pfet_01v8__model$1 + location(1965 4945) + param(L 0.15) + param(W 0.42) + param(AS 0.1869) + param(AD 0.0588) + param(PS 1.73) + param(PD 0.7) + terminal(S 34) + terminal(G 32) + terminal(D 1) + terminal(B 1) + ) + device(43 D$sky130_fd_pr__pfet_01v8__model$2 + location(2395 4945) + param(L 0.15) + param(W 0.42) + param(AS 0.0588) + param(AD 0.1869) + param(PS 0.7) + param(PD 1.73) + terminal(S 1) + terminal(G 37) + terminal(D 35) + terminal(B 1) + ) + device(44 D$sky130_fd_pr__pfet_01v8__model$1 + location(4145 4945) + param(L 0.15) + param(W 0.42) + param(AS 0.1869) + param(AD 0.0588) + param(PS 1.73) + param(PD 0.7) + terminal(S 37) + terminal(G 35) + terminal(D 1) + terminal(B 1) + ) + device(45 D$sky130_fd_pr__pfet_01v8__model$2 + location(4575 4945) + param(L 0.15) + param(W 0.42) + param(AS 0.0588) + param(AD 0.1869) + param(PS 0.7) + param(PD 1.73) + terminal(S 1) + terminal(G 40) + terminal(D 38) + terminal(B 1) + ) + device(46 D$sky130_fd_pr__pfet_01v8__model$1 + location(6325 4945) + param(L 0.15) + param(W 0.42) + param(AS 0.1869) + param(AD 0.0588) + param(PS 1.73) + param(PD 0.7) + terminal(S 40) + terminal(G 38) + terminal(D 1) + terminal(B 1) + ) + device(47 D$sky130_fd_pr__pfet_01v8__model$2 + location(6755 4945) + param(L 0.15) + param(W 0.42) + param(AS 0.0588) + param(AD 0.1869) + param(PS 0.7) + param(PD 1.73) + terminal(S 1) + terminal(G 50) + terminal(D 41) + terminal(B 1) + ) + device(48 D$sky130_fd_pr__pfet_01v8__model$3 + location(8505 4945) + param(L 0.15) + param(W 0.42) + param(AS 0.1869) + param(AD 0.1113) + param(PS 1.73) + param(PD 1.37) + terminal(S 50) + terminal(G 41) + terminal(D 1) + terminal(B 1) + ) + + ) +) + +# Reference netlist +reference( + + # Device class section + class(SKY130_FD_PR__PFET_01V8__MODEL MOS4) + class(SKY130_FD_PR__NFET_01V8__MODEL MOS4) + + # Circuit section + # Circuits are the hierarchical building blocks of the netlist. + circuit(SP6TARRAY_2X4 + + # Nets + net(1 name(VSS)) + net(2 name(VDD)) + net(3 name('WL[0]')) + net(4 name('WL[1]')) + net(5 name('BL[0]')) + net(6 name('BL_N[0]')) + net(7 name('BL[1]')) + net(8 name('BL_N[1]')) + net(9 name('BL[2]')) + net(10 name('BL_N[2]')) + net(11 name('BL[3]')) + net(12 name('BL_N[3]')) + net(13 name(INST0X0.INST0X0.INST0X0.BIT_N)) + net(14 name(INST0X0.INST0X0.INST0X0.BIT)) + net(15 name(INST0X0.INST0X0.INST1X0.BIT_N)) + net(16 name(INST0X0.INST0X0.INST1X0.BIT)) + net(17 name(INST0X0.INST0X1.INST0X0.BIT_N)) + net(18 name(INST0X0.INST0X1.INST0X0.BIT)) + net(19 name(INST0X0.INST0X1.INST1X0.BIT_N)) + net(20 name(INST0X0.INST0X1.INST1X0.BIT)) + net(21 name(INST0X1.INST0X0.INST0X0.BIT_N)) + net(22 name(INST0X1.INST0X0.INST0X0.BIT)) + net(23 name(INST0X1.INST0X0.INST1X0.BIT_N)) + net(24 name(INST0X1.INST0X0.INST1X0.BIT)) + net(25 name(INST0X1.INST0X1.INST0X0.BIT_N)) + net(26 name(INST0X1.INST0X1.INST0X0.BIT)) + net(27 name(INST0X1.INST0X1.INST1X0.BIT_N)) + net(28 name(INST0X1.INST0X1.INST1X0.BIT)) + + # Outgoing pins and their connections to nets + pin(1 name(VSS)) + pin(2 name(VDD)) + pin(3 name('WL[0]')) + pin(4 name('WL[1]')) + pin(5 name('BL[0]')) + pin(6 name('BL_N[0]')) + pin(7 name('BL[1]')) + pin(8 name('BL_N[1]')) + pin(9 name('BL[2]')) + pin(10 name('BL_N[2]')) + pin(11 name('BL[3]')) + pin(12 name('BL_N[3]')) + + # Devices and their connections + device(1 SKY130_FD_PR__PFET_01V8__MODEL + name(INST0X0.INST0X0.INST0X0.PU1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 2) + terminal(G 13) + terminal(D 14) + terminal(B 2) + ) + device(2 SKY130_FD_PR__PFET_01V8__MODEL + name(INST0X0.INST0X0.INST0X0.PU2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 13) + terminal(G 14) + terminal(D 2) + terminal(B 2) + ) + device(3 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X0.INST0X0.INST0X0.PD1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 1) + terminal(G 13) + terminal(D 14) + terminal(B 1) + ) + device(4 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X0.INST0X0.INST0X0.PD2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 13) + terminal(G 14) + terminal(D 1) + terminal(B 1) + ) + device(5 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X0.INST0X0.INST0X0.PG1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 5) + terminal(G 3) + terminal(D 14) + terminal(B 1) + ) + device(6 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X0.INST0X0.INST0X0.PG2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 6) + terminal(G 3) + terminal(D 13) + terminal(B 1) + ) + device(7 SKY130_FD_PR__PFET_01V8__MODEL + name(INST0X0.INST0X0.INST1X0.PU1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 2) + terminal(G 15) + terminal(D 16) + terminal(B 2) + ) + device(8 SKY130_FD_PR__PFET_01V8__MODEL + name(INST0X0.INST0X0.INST1X0.PU2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 15) + terminal(G 16) + terminal(D 2) + terminal(B 2) + ) + device(9 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X0.INST0X0.INST1X0.PD1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 1) + terminal(G 15) + terminal(D 16) + terminal(B 1) + ) + device(10 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X0.INST0X0.INST1X0.PD2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 15) + terminal(G 16) + terminal(D 1) + terminal(B 1) + ) + device(11 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X0.INST0X0.INST1X0.PG1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 5) + terminal(G 4) + terminal(D 16) + terminal(B 1) + ) + device(12 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X0.INST0X0.INST1X0.PG2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 6) + terminal(G 4) + terminal(D 15) + terminal(B 1) + ) + device(13 SKY130_FD_PR__PFET_01V8__MODEL + name(INST0X0.INST0X1.INST0X0.PU1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 2) + terminal(G 17) + terminal(D 18) + terminal(B 2) + ) + device(14 SKY130_FD_PR__PFET_01V8__MODEL + name(INST0X0.INST0X1.INST0X0.PU2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 17) + terminal(G 18) + terminal(D 2) + terminal(B 2) + ) + device(15 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X0.INST0X1.INST0X0.PD1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 1) + terminal(G 17) + terminal(D 18) + terminal(B 1) + ) + device(16 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X0.INST0X1.INST0X0.PD2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 17) + terminal(G 18) + terminal(D 1) + terminal(B 1) + ) + device(17 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X0.INST0X1.INST0X0.PG1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 7) + terminal(G 3) + terminal(D 18) + terminal(B 1) + ) + device(18 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X0.INST0X1.INST0X0.PG2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 8) + terminal(G 3) + terminal(D 17) + terminal(B 1) + ) + device(19 SKY130_FD_PR__PFET_01V8__MODEL + name(INST0X0.INST0X1.INST1X0.PU1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 2) + terminal(G 19) + terminal(D 20) + terminal(B 2) + ) + device(20 SKY130_FD_PR__PFET_01V8__MODEL + name(INST0X0.INST0X1.INST1X0.PU2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 19) + terminal(G 20) + terminal(D 2) + terminal(B 2) + ) + device(21 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X0.INST0X1.INST1X0.PD1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 1) + terminal(G 19) + terminal(D 20) + terminal(B 1) + ) + device(22 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X0.INST0X1.INST1X0.PD2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 19) + terminal(G 20) + terminal(D 1) + terminal(B 1) + ) + device(23 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X0.INST0X1.INST1X0.PG1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 7) + terminal(G 4) + terminal(D 20) + terminal(B 1) + ) + device(24 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X0.INST0X1.INST1X0.PG2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 8) + terminal(G 4) + terminal(D 19) + terminal(B 1) + ) + device(25 SKY130_FD_PR__PFET_01V8__MODEL + name(INST0X1.INST0X0.INST0X0.PU1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 2) + terminal(G 21) + terminal(D 22) + terminal(B 2) + ) + device(26 SKY130_FD_PR__PFET_01V8__MODEL + name(INST0X1.INST0X0.INST0X0.PU2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 21) + terminal(G 22) + terminal(D 2) + terminal(B 2) + ) + device(27 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X1.INST0X0.INST0X0.PD1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 1) + terminal(G 21) + terminal(D 22) + terminal(B 1) + ) + device(28 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X1.INST0X0.INST0X0.PD2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 21) + terminal(G 22) + terminal(D 1) + terminal(B 1) + ) + device(29 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X1.INST0X0.INST0X0.PG1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 9) + terminal(G 3) + terminal(D 22) + terminal(B 1) + ) + device(30 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X1.INST0X0.INST0X0.PG2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 10) + terminal(G 3) + terminal(D 21) + terminal(B 1) + ) + device(31 SKY130_FD_PR__PFET_01V8__MODEL + name(INST0X1.INST0X0.INST1X0.PU1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 2) + terminal(G 23) + terminal(D 24) + terminal(B 2) + ) + device(32 SKY130_FD_PR__PFET_01V8__MODEL + name(INST0X1.INST0X0.INST1X0.PU2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 23) + terminal(G 24) + terminal(D 2) + terminal(B 2) + ) + device(33 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X1.INST0X0.INST1X0.PD1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 1) + terminal(G 23) + terminal(D 24) + terminal(B 1) + ) + device(34 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X1.INST0X0.INST1X0.PD2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 23) + terminal(G 24) + terminal(D 1) + terminal(B 1) + ) + device(35 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X1.INST0X0.INST1X0.PG1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 9) + terminal(G 4) + terminal(D 24) + terminal(B 1) + ) + device(36 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X1.INST0X0.INST1X0.PG2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 10) + terminal(G 4) + terminal(D 23) + terminal(B 1) + ) + device(37 SKY130_FD_PR__PFET_01V8__MODEL + name(INST0X1.INST0X1.INST0X0.PU1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 2) + terminal(G 25) + terminal(D 26) + terminal(B 2) + ) + device(38 SKY130_FD_PR__PFET_01V8__MODEL + name(INST0X1.INST0X1.INST0X0.PU2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 25) + terminal(G 26) + terminal(D 2) + terminal(B 2) + ) + device(39 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X1.INST0X1.INST0X0.PD1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 1) + terminal(G 25) + terminal(D 26) + terminal(B 1) + ) + device(40 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X1.INST0X1.INST0X0.PD2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 25) + terminal(G 26) + terminal(D 1) + terminal(B 1) + ) + device(41 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X1.INST0X1.INST0X0.PG1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 11) + terminal(G 3) + terminal(D 26) + terminal(B 1) + ) + device(42 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X1.INST0X1.INST0X0.PG2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 12) + terminal(G 3) + terminal(D 25) + terminal(B 1) + ) + device(43 SKY130_FD_PR__PFET_01V8__MODEL + name(INST0X1.INST0X1.INST1X0.PU1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 2) + terminal(G 27) + terminal(D 28) + terminal(B 2) + ) + device(44 SKY130_FD_PR__PFET_01V8__MODEL + name(INST0X1.INST0X1.INST1X0.PU2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 27) + terminal(G 28) + terminal(D 2) + terminal(B 2) + ) + device(45 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X1.INST0X1.INST1X0.PD1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 1) + terminal(G 27) + terminal(D 28) + terminal(B 1) + ) + device(46 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X1.INST0X1.INST1X0.PD2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 27) + terminal(G 28) + terminal(D 1) + terminal(B 1) + ) + device(47 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X1.INST0X1.INST1X0.PG1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 11) + terminal(G 4) + terminal(D 28) + terminal(B 1) + ) + device(48 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X1.INST0X1.INST1X0.PG2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 12) + terminal(G 4) + terminal(D 27) + terminal(B 1) + ) + + ) +) + +# Cross reference +xref( + circuit(SP6TArray_2X4 SP6TARRAY_2X4 match + xref( + net(11 14 warning) + net(12 13 warning) + net(34 16 match) + net(32 15 match) + net(15 18 warning) + net(16 17 warning) + net(37 20 match) + net(35 19 match) + net(19 22 warning) + net(20 21 warning) + net(40 24 match) + net(38 23 match) + net(23 26 warning) + net(24 25 warning) + net(50 28 match) + net(41 27 match) + net(2 6 match) + net(4 8 match) + net(6 10 match) + net(8 12 match) + net(3 5 match) + net(5 7 match) + net(7 9 match) + net(9 11 match) + net(1 2 match) + net(52 1 match) + net(26 3 match) + net(31 4 match) + pin(() 4 match) + pin(() 6 match) + pin(() 8 match) + pin(() 10 match) + pin(() 5 match) + pin(() 7 match) + pin(() 9 match) + pin(() 11 match) + pin(() 1 match) + pin(() 0 match) + pin(() 2 match) + pin(() 3 match) + device(5 3 match) + device(1 4 match) + device(7 5 match) + device(2 6 match) + device(11 9 match) + device(4 10 match) + device(9 11 match) + device(3 12 match) + device(13 15 match) + device(6 16 match) + device(15 17 match) + device(8 18 match) + device(19 21 match) + device(12 22 match) + device(17 23 match) + device(10 24 match) + device(21 27 match) + device(14 28 match) + device(23 29 match) + device(16 30 match) + device(27 33 match) + device(20 34 match) + device(25 35 match) + device(18 36 match) + device(29 39 match) + device(22 40 match) + device(30 41 match) + device(24 42 match) + device(32 45 match) + device(28 46 match) + device(31 47 match) + device(26 48 match) + device(34 1 match) + device(33 2 match) + device(42 7 match) + device(41 8 match) + device(36 13 match) + device(35 14 match) + device(44 19 match) + device(43 20 match) + device(38 25 match) + device(37 26 match) + device(46 31 match) + device(45 32 match) + device(40 37 match) + device(39 38 match) + device(48 43 match) + device(47 44 match) + ) + ) +) diff --git a/testdata/lvs/test_22b.cir b/testdata/lvs/test_22b.cir new file mode 100644 index 000000000..ab888a3c8 --- /dev/null +++ b/testdata/lvs/test_22b.cir @@ -0,0 +1,161 @@ +* Extracted by KLayout + +* cell SP6TArray_2X4 +.SUBCKT SP6TArray_2X4 +* net 1 vdd +* net 2 bl[0] +* net 3 bl_n[0] +* net 4 bl[1] +* net 5 bl_n[1] +* net 6 bl[2] +* net 7 bl_n[2] +* net 8 bl[3] +* net 9 bl_n[3] +* net 26 wl[0] +* net 31 wl[1] +* net 52 vss +* device instance $1 r0 *1 0.215,1.935 sky130_fd_pr__nfet_01v8__model +M$1 52 11 12 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.1113P ++ AD=0.18165P PS=1.37U PD=1.285U +* device instance $2 r0 *1 0.605,2.56 sky130_fd_pr__nfet_01v8__model +M$2 12 26 2 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.0588P PS=1.285U PD=0.7U +* device instance $3 r0 *1 0.605,2.99 sky130_fd_pr__nfet_01v8__model +M$3 2 31 32 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.0588P ++ AD=0.18165P PS=0.7U PD=1.285U +* device instance $4 r0 *1 0.215,3.615 sky130_fd_pr__nfet_01v8__model +M$4 32 34 52 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.1113P PS=1.285U PD=1.37U +* device instance $5 r0 *1 1.965,1.935 sky130_fd_pr__nfet_01v8__model +M$5 11 12 52 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.0588P PS=1.285U PD=0.7U +* device instance $6 r0 *1 2.395,1.935 sky130_fd_pr__nfet_01v8__model +M$6 52 15 16 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.0588P ++ AD=0.18165P PS=0.7U PD=1.285U +* device instance $7 r0 *1 1.575,2.56 sky130_fd_pr__nfet_01v8__model +M$7 11 26 3 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.0588P PS=1.285U PD=0.7U +* device instance $8 r0 *1 2.785,2.56 sky130_fd_pr__nfet_01v8__model +M$8 16 26 4 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.0588P PS=1.285U PD=0.7U +* device instance $9 r0 *1 1.575,2.99 sky130_fd_pr__nfet_01v8__model +M$9 3 31 34 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.0588P ++ AD=0.18165P PS=0.7U PD=1.285U +* device instance $10 r0 *1 2.785,2.99 sky130_fd_pr__nfet_01v8__model +M$10 4 31 35 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.0588P ++ AD=0.18165P PS=0.7U PD=1.285U +* device instance $11 r0 *1 1.965,3.615 sky130_fd_pr__nfet_01v8__model +M$11 34 32 52 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.0588P PS=1.285U PD=0.7U +* device instance $12 r0 *1 2.395,3.615 sky130_fd_pr__nfet_01v8__model +M$12 35 37 52 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.0588P PS=1.285U PD=0.7U +* device instance $13 r0 *1 4.145,1.935 sky130_fd_pr__nfet_01v8__model +M$13 15 16 52 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.0588P PS=1.285U PD=0.7U +* device instance $14 r0 *1 4.575,1.935 sky130_fd_pr__nfet_01v8__model +M$14 52 19 20 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.0588P ++ AD=0.18165P PS=0.7U PD=1.285U +* device instance $15 r0 *1 3.755,2.56 sky130_fd_pr__nfet_01v8__model +M$15 15 26 5 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.0588P PS=1.285U PD=0.7U +* device instance $16 r0 *1 4.965,2.56 sky130_fd_pr__nfet_01v8__model +M$16 20 26 6 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.0588P PS=1.285U PD=0.7U +* device instance $17 r0 *1 3.755,2.99 sky130_fd_pr__nfet_01v8__model +M$17 5 31 37 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.0588P ++ AD=0.18165P PS=0.7U PD=1.285U +* device instance $18 r0 *1 4.965,2.99 sky130_fd_pr__nfet_01v8__model +M$18 6 31 38 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.0588P ++ AD=0.18165P PS=0.7U PD=1.285U +* device instance $19 r0 *1 4.145,3.615 sky130_fd_pr__nfet_01v8__model +M$19 37 35 52 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.0588P PS=1.285U PD=0.7U +* device instance $20 r0 *1 4.575,3.615 sky130_fd_pr__nfet_01v8__model +M$20 38 40 52 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.0588P PS=1.285U PD=0.7U +* device instance $21 r0 *1 6.325,1.935 sky130_fd_pr__nfet_01v8__model +M$21 19 20 52 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.0588P PS=1.285U PD=0.7U +* device instance $22 r0 *1 6.755,1.935 sky130_fd_pr__nfet_01v8__model +M$22 52 23 24 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.0588P ++ AD=0.18165P PS=0.7U PD=1.285U +* device instance $23 r0 *1 5.935,2.56 sky130_fd_pr__nfet_01v8__model +M$23 19 26 7 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.0588P PS=1.285U PD=0.7U +* device instance $24 r0 *1 7.145,2.56 sky130_fd_pr__nfet_01v8__model +M$24 24 26 8 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.0588P PS=1.285U PD=0.7U +* device instance $25 r0 *1 5.935,2.99 sky130_fd_pr__nfet_01v8__model +M$25 7 31 40 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.0588P ++ AD=0.18165P PS=0.7U PD=1.285U +* device instance $26 r0 *1 7.145,2.99 sky130_fd_pr__nfet_01v8__model +M$26 8 31 41 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.0588P ++ AD=0.18165P PS=0.7U PD=1.285U +* device instance $27 r0 *1 6.325,3.615 sky130_fd_pr__nfet_01v8__model +M$27 40 38 52 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.0588P PS=1.285U PD=0.7U +* device instance $28 r0 *1 6.755,3.615 sky130_fd_pr__nfet_01v8__model +M$28 41 50 52 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.0588P PS=1.285U PD=0.7U +* device instance $29 r0 *1 8.505,1.935 sky130_fd_pr__nfet_01v8__model +M$29 23 24 52 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.1113P PS=1.285U PD=1.37U +* device instance $30 r0 *1 8.115,2.56 sky130_fd_pr__nfet_01v8__model +M$30 23 26 9 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.0588P PS=1.285U PD=0.7U +* device instance $31 r0 *1 8.115,2.99 sky130_fd_pr__nfet_01v8__model +M$31 9 31 50 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.0588P ++ AD=0.18165P PS=0.7U PD=1.285U +* device instance $32 r0 *1 8.505,3.615 sky130_fd_pr__nfet_01v8__model +M$32 50 41 52 52 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.1113P PS=1.285U PD=1.37U +* device instance $33 r0 *1 0.215,0.605 sky130_fd_pr__pfet_01v8__model +M$33 1 11 12 1 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.1113P ++ AD=0.1869P PS=1.37U PD=1.73U +* device instance $34 r0 *1 1.965,0.605 sky130_fd_pr__pfet_01v8__model +M$34 11 12 1 1 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.1869P ++ AD=0.0588P PS=1.73U PD=0.7U +* device instance $35 r0 *1 2.395,0.605 sky130_fd_pr__pfet_01v8__model +M$35 1 15 16 1 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.0588P ++ AD=0.1869P PS=0.7U PD=1.73U +* device instance $36 r0 *1 4.145,0.605 sky130_fd_pr__pfet_01v8__model +M$36 15 16 1 1 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.1869P ++ AD=0.0588P PS=1.73U PD=0.7U +* device instance $37 r0 *1 4.575,0.605 sky130_fd_pr__pfet_01v8__model +M$37 1 19 20 1 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.0588P ++ AD=0.1869P PS=0.7U PD=1.73U +* device instance $38 r0 *1 6.325,0.605 sky130_fd_pr__pfet_01v8__model +M$38 19 20 1 1 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.1869P ++ AD=0.0588P PS=1.73U PD=0.7U +* device instance $39 r0 *1 6.755,0.605 sky130_fd_pr__pfet_01v8__model +M$39 1 23 24 1 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.0588P ++ AD=0.1869P PS=0.7U PD=1.73U +* device instance $40 r0 *1 8.505,0.605 sky130_fd_pr__pfet_01v8__model +M$40 23 24 1 1 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.1869P ++ AD=0.1113P PS=1.73U PD=1.37U +* device instance $41 r0 *1 0.215,4.945 sky130_fd_pr__pfet_01v8__model +M$41 1 34 32 1 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.1113P ++ AD=0.1869P PS=1.37U PD=1.73U +* device instance $42 r0 *1 1.965,4.945 sky130_fd_pr__pfet_01v8__model +M$42 34 32 1 1 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.1869P ++ AD=0.0588P PS=1.73U PD=0.7U +* device instance $43 r0 *1 2.395,4.945 sky130_fd_pr__pfet_01v8__model +M$43 1 37 35 1 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.0588P ++ AD=0.1869P PS=0.7U PD=1.73U +* device instance $44 r0 *1 4.145,4.945 sky130_fd_pr__pfet_01v8__model +M$44 37 35 1 1 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.1869P ++ AD=0.0588P PS=1.73U PD=0.7U +* device instance $45 r0 *1 4.575,4.945 sky130_fd_pr__pfet_01v8__model +M$45 1 40 38 1 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.0588P ++ AD=0.1869P PS=0.7U PD=1.73U +* device instance $46 r0 *1 6.325,4.945 sky130_fd_pr__pfet_01v8__model +M$46 40 38 1 1 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.1869P ++ AD=0.0588P PS=1.73U PD=0.7U +* device instance $47 r0 *1 6.755,4.945 sky130_fd_pr__pfet_01v8__model +M$47 1 50 41 1 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.0588P ++ AD=0.1869P PS=0.7U PD=1.73U +* device instance $48 r0 *1 8.505,4.945 sky130_fd_pr__pfet_01v8__model +M$48 50 41 1 1 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.1869P ++ AD=0.1113P PS=1.73U PD=1.37U +.ENDS SP6TArray_2X4 diff --git a/testdata/lvs/test_22b.lvsdb b/testdata/lvs/test_22b.lvsdb new file mode 100644 index 000000000..f3ced4995 --- /dev/null +++ b/testdata/lvs/test_22b.lvsdb @@ -0,0 +1,2590 @@ +#%lvsdb-klayout + +# Layout +layout( + top(SP6TArray_2X4) + unit(0.001) + + # Layer section + # This section lists the mask layers (drawing or derived) and their connections. + + # Mask layers + layer(l1) + layer(l2) + layer(l3) + layer(l4) + layer(l5 '64/20') + layer(l6) + layer(l7 '66/20') + layer(l8) + layer(l9 '67/20') + layer(l10) + layer(l11 '68/20') + layer(l12 '68/16') + layer(l13 '69/20') + layer(l14 '69/16') + layer(l15) + layer(l16) + layer(l17) + layer(l18) + layer(l19) + layer(l20) + layer(l21 '66/44') + layer(l22 '66/20') + layer(l23 '67/44') + layer(l24 '68/44') + layer(l25) + layer(l26) + layer(l27) + + # Mask layer connectivity + connect(l1 l1) + connect(l2 l2 l3 l4 l6 l21) + connect(l3 l2 l3) + connect(l4 l2 l4 l5) + connect(l5 l4 l5) + connect(l6 l2 l6) + connect(l7 l7 l8) + connect(l8 l7 l8) + connect(l9 l9 l10 l21 l23) + connect(l10 l9 l10) + connect(l11 l11 l12 l23 l24) + connect(l12 l11 l12) + connect(l13 l13 l14 l24 l25) + connect(l14 l13 l14) + connect(l15 l15 l16 l25 l26) + connect(l16 l15 l16) + connect(l17 l17 l18 l26 l27) + connect(l18 l17 l18) + connect(l19 l19 l20 l27) + connect(l20 l19 l20) + connect(l21 l2 l9 l21 l22) + connect(l22 l21 l22) + connect(l23 l9 l11 l23) + connect(l24 l11 l13 l24) + connect(l25 l13 l15 l25) + connect(l26 l15 l17 l26) + connect(l27 l17 l19 l27) + + # Global nets and connectivity + global(l1 vss) + global(l6 vss) + + # Device class section + class(active_res RES) + class(poly_res RES) + class(sky130_fd_pr__diode_pw2nd_05v5 DIODE) + class(sky130_fd_pr__diode_pd2nw_05v5 DIODE) + class(sky130_fd_pr__nfet_01v8__model MOS4) + class(sky130_fd_pr__nfet_01v8_lvt__model MOS4) + class(sky130_fd_pr__nfet_g5v0d10v5__model MOS4) + class(sky130_fd_pr__pfet_01v8__model MOS4) + class(sky130_fd_pr__pfet_01v8_hvt__model MOS4) + class(sky130_fd_pr__pfet_01v8_lvt__model MOS4) + class(sky130_fd_pr__pfet_g5v0d10v5__model MOS4) + + # Device abstracts section + # Device abstracts list the pin shapes of the devices. + device(D$sky130_fd_pr__nfet_01v8__model sky130_fd_pr__nfet_01v8__model + terminal(S + rect(l2 (-340 -210) (265 420)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + polygon(l2 (75 -210) (0 420) (105 0) (0 340) (420 0) (0 -760)) + ) + terminal(B + rect(l1 (-75 -210) (150 420)) + ) + ) + device(D$sky130_fd_pr__nfet_01v8__model$1 sky130_fd_pr__nfet_01v8__model + terminal(S + polygon(l2 (-315 -835) (0 420) (105 0) (0 340) (420 0) (0 -760)) + ) + terminal(G + rect(l22 (-210 -75) (420 150)) + ) + terminal(D + rect(l2 (-210 75) (420 280)) + ) + terminal(B + rect(l1 (-210 -75) (420 150)) + ) + ) + device(D$sky130_fd_pr__nfet_01v8__model$2 sky130_fd_pr__nfet_01v8__model + terminal(S + rect(l2 (-210 -355) (420 280)) + ) + terminal(G + rect(l22 (-210 -75) (420 150)) + ) + terminal(D + polygon(l2 (-210 75) (0 340) (-105 0) (0 420) (525 0) (0 -760)) + ) + terminal(B + rect(l1 (-210 -75) (420 150)) + ) + ) + device(D$sky130_fd_pr__nfet_01v8__model$3 sky130_fd_pr__nfet_01v8__model + terminal(S + polygon(l2 (180 -550) (0 340) (-105 0) (0 420) (525 0) (0 -760)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (-340 -210) (265 420)) + ) + terminal(B + rect(l1 (-75 -210) (150 420)) + ) + ) + device(D$sky130_fd_pr__nfet_01v8__model$4 sky130_fd_pr__nfet_01v8__model + terminal(S + polygon(l2 (-600 -210) (0 760) (420 0) (0 -340) (105 0) (0 -420)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (75 -210) (280 420)) + ) + terminal(B + rect(l1 (-75 -210) (150 420)) + ) + ) + device(D$sky130_fd_pr__nfet_01v8__model$5 sky130_fd_pr__nfet_01v8__model + terminal(S + rect(l2 (-355 -210) (280 420)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + polygon(l2 (75 -210) (0 420) (105 0) (0 340) (420 0) (0 -760)) + ) + terminal(B + rect(l1 (-75 -210) (150 420)) + ) + ) + device(D$sky130_fd_pr__nfet_01v8__model$6 sky130_fd_pr__nfet_01v8__model + terminal(S + polygon(l2 (-210 -835) (0 760) (420 0) (0 -340) (105 0) (0 -420)) + ) + terminal(G + rect(l22 (-210 -75) (420 150)) + ) + terminal(D + rect(l2 (-210 75) (420 280)) + ) + terminal(B + rect(l1 (-210 -75) (420 150)) + ) + ) + device(D$sky130_fd_pr__nfet_01v8__model$7 sky130_fd_pr__nfet_01v8__model + terminal(S + rect(l2 (-210 -355) (420 280)) + ) + terminal(G + rect(l22 (-210 -75) (420 150)) + ) + terminal(D + polygon(l2 (-210 75) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) + ) + terminal(B + rect(l1 (-210 -75) (420 150)) + ) + ) + device(D$sky130_fd_pr__nfet_01v8__model$8 sky130_fd_pr__nfet_01v8__model + terminal(S + polygon(l2 (-600 -550) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (75 -210) (280 420)) + ) + terminal(B + rect(l1 (-75 -210) (150 420)) + ) + ) + device(D$sky130_fd_pr__nfet_01v8__model$9 sky130_fd_pr__nfet_01v8__model + terminal(S + polygon(l2 (180 -550) (0 340) (-105 0) (0 420) (525 0) (0 -760)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (-355 -210) (280 420)) + ) + terminal(B + rect(l1 (-75 -210) (150 420)) + ) + ) + device(D$sky130_fd_pr__nfet_01v8__model$10 sky130_fd_pr__nfet_01v8__model + terminal(S + polygon(l2 (-600 -210) (0 760) (420 0) (0 -340) (105 0) (0 -420)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (75 -210) (265 420)) + ) + terminal(B + rect(l1 (-75 -210) (150 420)) + ) + ) + device(D$sky130_fd_pr__nfet_01v8__model$11 sky130_fd_pr__nfet_01v8__model + terminal(S + polygon(l2 (-600 -550) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (75 -210) (265 420)) + ) + terminal(B + rect(l1 (-75 -210) (150 420)) + ) + ) + device(D$sky130_fd_pr__pfet_01v8__model sky130_fd_pr__pfet_01v8__model + terminal(S + rect(l2 (-340 -210) (265 420)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (75 -210) (445 420)) + ) + terminal(B + rect(l5 (-75 -210) (150 420)) + ) + ) + device(D$sky130_fd_pr__pfet_01v8__model$1 sky130_fd_pr__pfet_01v8__model + terminal(S + rect(l2 (-520 -210) (445 420)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (75 -210) (280 420)) + ) + terminal(B + rect(l5 (-75 -210) (150 420)) + ) + ) + device(D$sky130_fd_pr__pfet_01v8__model$2 sky130_fd_pr__pfet_01v8__model + terminal(S + rect(l2 (-355 -210) (280 420)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (75 -210) (445 420)) + ) + terminal(B + rect(l5 (-75 -210) (150 420)) + ) + ) + device(D$sky130_fd_pr__pfet_01v8__model$3 sky130_fd_pr__pfet_01v8__model + terminal(S + rect(l2 (-520 -210) (445 420)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (75 -210) (265 420)) + ) + terminal(B + rect(l5 (-75 -210) (150 420)) + ) + ) + + # Circuit section + # Circuits are the hierarchical building blocks of the netlist. + circuit(SP6TArray_2X4 + + # Circuit boundary + rect((-385 -305) (9490 6160)) + + # Nets with their geometries + net(1 name(vdd) + rect(l2 (-205 -125) (9130 250)) + rect(l2 (-9050 270) (265 420)) + rect(l2 (1900 -420) (280 420)) + rect(l2 (1900 -420) (280 420)) + rect(l2 (1900 -420) (280 420)) + rect(l2 (1900 -420) (265 420)) + rect(l2 (-8970 3920) (265 420)) + rect(l2 (-345 270) (9130 250)) + rect(l2 (-6885 -940) (280 420)) + rect(l2 (1900 -420) (280 420)) + rect(l2 (1900 -420) (280 420)) + rect(l2 (1900 -420) (265 420)) + rect(l4 (-9050 -5280) (9130 250)) + rect(l4 (-9130 5300) (9130 250)) + rect(l5 (-7130 -5980) (2950 1300)) + rect(l5 (-5130 -1300) (2950 1300)) + rect(l5 (1410 -1300) (2950 1300)) + rect(l5 (-770 -1300) (2950 1300)) + rect(l5 (-9490 3560) (2950 1300)) + rect(l5 (-770 -1300) (2950 1300)) + rect(l5 (-770 -1300) (2950 1300)) + rect(l5 (-770 -1300) (2950 1300)) + rect(l9 (-9270 -5940) (2510 170)) + rect(l9 (-330 -170) (2510 170)) + rect(l9 (-330 -170) (2510 170)) + rect(l9 (-330 -170) (2510 170)) + rect(l9 (-8970 0) (170 685)) + rect(l9 (2010 -685) (170 685)) + rect(l9 (-170 -685) (170 685)) + rect(l9 (2010 -685) (170 685)) + rect(l9 (-170 -685) (170 685)) + rect(l9 (2010 -685) (170 685)) + rect(l9 (-170 -685) (170 685)) + rect(l9 (2010 -685) (170 685)) + rect(l9 (-8970 4695) (2510 170)) + rect(l9 (-2430 -855) (170 685)) + rect(l9 (1930 0) (2510 170)) + rect(l9 (-2430 -855) (170 685)) + rect(l9 (-170 -685) (170 685)) + rect(l9 (1930 0) (2510 170)) + rect(l9 (-2430 -855) (170 685)) + rect(l9 (-170 -685) (170 685)) + rect(l9 (1930 0) (2510 170)) + rect(l9 (-2430 -855) (170 685)) + rect(l9 (-170 -685) (170 685)) + rect(l9 (2010 -685) (170 685)) + rect(l11 (-8935 -5625) (260 320)) + rect(l11 (1920 -320) (260 320)) + rect(l11 (-260 -320) (260 320)) + rect(l11 (1920 -320) (260 320)) + rect(l11 (-260 -320) (260 320)) + rect(l11 (1920 -320) (260 320)) + rect(l11 (-260 -320) (260 320)) + rect(l11 (1920 -320) (260 320)) + rect(l11 (-8980 5230) (260 320)) + rect(l11 (1920 -320) (260 320)) + rect(l11 (-260 -320) (260 320)) + rect(l11 (1920 -320) (260 320)) + rect(l11 (-260 -320) (260 320)) + rect(l11 (1920 -320) (260 320)) + rect(l11 (-260 -320) (260 320)) + rect(l11 (1920 -320) (260 320)) + rect(l13 (-9010 -5840) (2500 260)) + rect(l13 (-2500 -260) (2500 260)) + rect(l13 (-2500 -260) (4680 260)) + rect(l13 (-4680 -260) (9040 260)) + rect(l13 (-6860 -260) (2500 260)) + rect(l13 (-2500 -260) (2500 260)) + rect(l13 (-320 -260) (2500 260)) + rect(l13 (-2500 -260) (4680 260)) + rect(l13 (-4680 -260) (2500 260)) + rect(l13 (-320 -260) (2500 260)) + rect(l13 (-2500 -260) (2500 260)) + rect(l13 (-9040 5290) (2500 260)) + rect(l13 (-2500 -260) (4680 260)) + rect(l13 (-4680 -260) (9040 260)) + rect(l13 (-9040 -260) (2500 260)) + rect(l13 (-320 -260) (2500 260)) + rect(l13 (-2500 -260) (2500 260)) + rect(l13 (-320 -260) (2500 260)) + rect(l13 (-2500 -260) (4680 260)) + rect(l13 (-4680 -260) (2500 260)) + rect(l13 (-320 -260) (2500 260)) + rect(l13 (-2500 -260) (2500 260)) + rect(l14 (-9040 -5810) (2500 260)) + rect(l14 (-2500 -260) (2500 260)) + rect(l14 (-2500 -260) (4680 260)) + rect(l14 (-4680 -260) (9040 260)) + rect(l14 (-6860 -260) (2500 260)) + rect(l14 (-2500 -260) (2500 260)) + rect(l14 (-320 -260) (2500 260)) + rect(l14 (-2500 -260) (2500 260)) + rect(l14 (-2500 -260) (4680 260)) + rect(l14 (-2500 -260) (2500 260)) + rect(l14 (-2500 -260) (2500 260)) + rect(l14 (-4521 -131) (2 2)) + rect(l14 (-4521 5419) (2500 260)) + rect(l14 (-2500 -260) (4680 260)) + rect(l14 (-4680 -260) (9040 260)) + rect(l14 (-9040 -260) (2500 260)) + rect(l14 (-320 -260) (2500 260)) + rect(l14 (-2500 -260) (2500 260)) + rect(l14 (-320 -260) (4680 260)) + rect(l14 (-4680 -260) (2500 260)) + rect(l14 (-2500 -260) (2500 260)) + rect(l14 (-320 -260) (2500 260)) + rect(l14 (-2500 -260) (2500 260)) + rect(l14 (-4521 -131) (2 2)) + rect(l21 (-4446 -5636) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (-8890 435) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (-8890 4170) (170 170)) + rect(l21 (-170 435) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (-170 -775) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (-170 435) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (-170 -775) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (2010 435) (170 170)) + rect(l21 (-170 -775) (170 170)) + rect(l23 (-8890 -5115) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l23 (-8890 5380) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l24 (-8880 -5710) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l24 (-150 -150) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l24 (-150 -150) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l24 (-150 -150) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l24 (-8870 5400) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l24 (-150 -150) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l24 (-150 -150) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l24 (-150 -150) (150 150)) + rect(l24 (2030 -150) (150 150)) + ) + net(2 name('bl[0]') + rect(l2 (395 2635) (420 280)) + polygon(l9 (-295 -305) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330)) + polygon(l9 (-170 0) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330)) + rect(l11 (-260 -2610) (230 5550)) + rect(l11 (-230 -5550) (230 5550)) + rect(l11 (-230 -5550) (230 5550)) + rect(l11 (-230 -5550) (230 2920)) + rect(l11 (-230 -290) (230 2920)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -5550) (230 2920)) + rect(l12 (-230 -290) (230 2920)) + rect(l12 (-116 -2776) (2 2)) + rect(l21 (-26 -86) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l23 (-230 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + ) + net(3 name('bl_n[0]') + rect(l2 (1365 2635) (420 280)) + polygon(l9 (-295 -305) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80)) + polygon(l9 (-170 0) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80)) + rect(l11 (-140 -2610) (230 2920)) + rect(l11 (-230 -2920) (230 5550)) + rect(l11 (-230 -5550) (230 5550)) + rect(l11 (-230 -5550) (230 5550)) + rect(l11 (-230 -2920) (230 2920)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -5550) (230 2920)) + rect(l12 (-230 -2920) (230 5550)) + rect(l12 (-230 -2920) (230 2920)) + rect(l12 (-116 -2776) (2 2)) + rect(l21 (-146 -86) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l23 (-110 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + ) + net(4 name('bl[1]') + rect(l2 (2575 2635) (420 280)) + polygon(l9 (-295 -305) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330)) + polygon(l9 (-170 0) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330)) + rect(l11 (-260 -2610) (230 5550)) + rect(l11 (-230 -5550) (230 5550)) + rect(l11 (-230 -5550) (230 2920)) + rect(l11 (-230 -2920) (230 5550)) + rect(l11 (-230 -2920) (230 2920)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -5550) (230 2920)) + rect(l12 (-230 -290) (230 2920)) + rect(l12 (-116 -2776) (2 2)) + rect(l21 (-26 -86) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l23 (-230 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + ) + net(5 name('bl_n[1]') + rect(l2 (3545 2635) (420 280)) + polygon(l9 (-295 -305) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80)) + polygon(l9 (-170 0) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80)) + rect(l11 (-140 -2610) (230 5550)) + rect(l11 (-230 -5550) (230 5550)) + rect(l11 (-230 -5550) (230 2920)) + rect(l11 (-230 -2920) (230 5550)) + rect(l11 (-230 -2920) (230 2920)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -5550) (230 2920)) + rect(l12 (-230 -2920) (230 5550)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -2920) (230 2920)) + rect(l12 (-116 -2776) (2 2)) + rect(l21 (-146 -86) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l23 (-110 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + ) + net(6 name('bl[2]') + rect(l2 (4755 2635) (420 280)) + polygon(l9 (-295 -305) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330)) + polygon(l9 (-170 0) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330)) + rect(l11 (-260 -2610) (230 5550)) + rect(l11 (-230 -5550) (230 5550)) + rect(l11 (-230 -5550) (230 2920)) + rect(l11 (-230 -2920) (230 5550)) + rect(l11 (-230 -2920) (230 2920)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -5550) (230 2920)) + rect(l12 (-230 -2920) (230 5550)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -2920) (230 2920)) + rect(l12 (-116 -2776) (2 2)) + rect(l21 (-26 -86) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l23 (-230 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + ) + net(7 name('bl_n[2]') + rect(l2 (5725 2635) (420 280)) + polygon(l9 (-295 -305) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80)) + polygon(l9 (-170 0) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80)) + rect(l11 (-140 -2610) (230 5550)) + rect(l11 (-230 -5550) (230 5550)) + rect(l11 (-230 -5550) (230 2920)) + rect(l11 (-230 -2920) (230 5550)) + rect(l11 (-230 -2920) (230 2920)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -5550) (230 2920)) + rect(l12 (-230 -2920) (230 5550)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -2920) (230 2920)) + rect(l12 (-116 -2776) (2 2)) + rect(l21 (-146 -86) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l23 (-110 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + ) + net(8 name('bl[3]') + rect(l2 (6935 2635) (420 280)) + polygon(l9 (-295 -305) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330)) + polygon(l9 (-170 0) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330)) + rect(l11 (-260 -2610) (230 5550)) + rect(l11 (-230 -5550) (230 5550)) + rect(l11 (-230 -5550) (230 5550)) + rect(l11 (-230 -5550) (230 2920)) + rect(l11 (-230 -290) (230 2920)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -5550) (230 2920)) + rect(l12 (-230 -290) (230 2920)) + rect(l12 (-116 -2776) (2 2)) + rect(l21 (-26 -86) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l23 (-230 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + ) + net(9 name('bl_n[3]') + rect(l2 (7905 2635) (420 280)) + polygon(l9 (-295 -305) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80)) + polygon(l9 (-170 0) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80)) + rect(l11 (-140 -2610) (230 2920)) + rect(l11 (-230 -2920) (230 5550)) + rect(l11 (-230 -5550) (230 5550)) + rect(l11 (-230 -5550) (230 5550)) + rect(l11 (-230 -2920) (230 2920)) + rect(l12 (-230 -5550) (230 2920)) + rect(l12 (-230 -2920) (230 5550)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -5550) (230 5550)) + rect(l12 (-230 -2920) (230 2920)) + rect(l12 (-116 -2776) (2 2)) + rect(l21 (-146 -86) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l23 (-110 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + ) + net(10 + rect(l7 (290 955) (950 150)) + rect(l7 (-1100 -840) (150 2010)) + rect(l7 (950 -1320) (330 270)) + ) + net(11 + polygon(l2 (1365 1725) (0 760) (420 0) (0 -340) (105 0) (0 -420)) + rect(l2 (-445 -1330) (445 420)) + polygon(l9 (-405 -370) (0 560) (-245 0) (0 170) (245 0) (0 840) (170 0) (0 -1570)) + rect(l21 (-335 560) (170 170)) + rect(l21 (-5 590) (170 170)) + rect(l21 (-170 -1410) (170 170)) + rect(l22 (-1365 260) (950 150)) + rect(l22 (-1100 -840) (150 2010)) + rect(l22 (950 -1320) (330 270)) + ) + net(12 + rect(l2 (290 395) (445 420)) + polygon(l2 (-445 910) (0 420) (105 0) (0 340) (420 0) (0 -760)) + polygon(l9 (-290 -1280) (0 1570) (170 0) (0 -480) (245 0) (0 -170) (-245 0) (0 -920)) + rect(l21 (-170 80) (170 170)) + rect(l21 (-170 1070) (170 170)) + rect(l21 (-5 -570) (170 170)) + rect(l22 (-250 -220) (330 270)) + rect(l22 (0 -150) (950 150)) + rect(l22 (0 -1320) (150 2010)) + ) + net(13 + rect(l7 (940 1435) (950 150)) + rect(l7 (-1280 -270) (330 270)) + rect(l7 (950 -1320) (150 2010)) + ) + net(14 + rect(l7 (2470 955) (950 150)) + rect(l7 (-1100 -840) (150 2010)) + rect(l7 (950 -1320) (330 270)) + ) + net(15 + rect(l2 (3625 395) (445 420)) + polygon(l2 (-525 910) (0 760) (420 0) (0 -340) (105 0) (0 -420)) + polygon(l9 (-405 -1280) (0 560) (-245 0) (0 170) (245 0) (0 840) (170 0) (0 -1570)) + rect(l21 (-335 560) (170 170)) + rect(l21 (-5 -650) (170 170)) + rect(l21 (-170 1070) (170 170)) + rect(l22 (-1365 -980) (950 150)) + rect(l22 (-1100 -840) (150 2010)) + rect(l22 (950 -1320) (330 270)) + ) + net(16 + polygon(l2 (2470 1725) (0 420) (105 0) (0 340) (420 0) (0 -760)) + rect(l2 (-525 -1330) (445 420)) + polygon(l9 (-210 -370) (0 1570) (170 0) (0 -480) (245 0) (0 -170) (-245 0) (0 -920)) + rect(l21 (-170 1320) (170 170)) + rect(l21 (-170 -1410) (170 170)) + rect(l21 (-5 670) (170 170)) + rect(l22 (-250 -220) (330 270)) + rect(l22 (0 -150) (950 150)) + rect(l22 (0 -1320) (150 2010)) + ) + net(17 + rect(l7 (3120 1435) (950 150)) + rect(l7 (-1280 -270) (330 270)) + rect(l7 (950 -1320) (150 2010)) + ) + net(18 + rect(l7 (4650 955) (950 150)) + rect(l7 (-1100 -840) (150 2010)) + rect(l7 (950 -1320) (330 270)) + ) + net(19 + polygon(l2 (5725 1725) (0 760) (420 0) (0 -340) (105 0) (0 -420)) + rect(l2 (-445 -1330) (445 420)) + polygon(l9 (-405 -370) (0 560) (-245 0) (0 170) (245 0) (0 840) (170 0) (0 -1570)) + rect(l21 (-335 560) (170 170)) + rect(l21 (-5 590) (170 170)) + rect(l21 (-170 -1410) (170 170)) + rect(l22 (-1365 260) (950 150)) + rect(l22 (-1100 -840) (150 2010)) + rect(l22 (950 -1320) (330 270)) + ) + net(20 + polygon(l2 (4650 1725) (0 420) (105 0) (0 340) (420 0) (0 -760)) + rect(l2 (-525 -1330) (445 420)) + polygon(l9 (-210 -370) (0 1570) (170 0) (0 -480) (245 0) (0 -170) (-245 0) (0 -920)) + rect(l21 (-170 1320) (170 170)) + rect(l21 (-170 -1410) (170 170)) + rect(l21 (-5 670) (170 170)) + rect(l22 (-250 -220) (330 270)) + rect(l22 (0 -150) (950 150)) + rect(l22 (0 -1320) (150 2010)) + ) + net(21 + rect(l7 (5300 1435) (950 150)) + rect(l7 (-1280 -270) (330 270)) + rect(l7 (950 -1320) (150 2010)) + ) + net(22 + rect(l7 (6830 955) (950 150)) + rect(l7 (-1100 -840) (150 2010)) + rect(l7 (950 -1320) (330 270)) + ) + net(23 + rect(l2 (7985 395) (445 420)) + polygon(l2 (-525 910) (0 760) (420 0) (0 -340) (105 0) (0 -420)) + polygon(l9 (-405 -1280) (0 560) (-245 0) (0 170) (245 0) (0 840) (170 0) (0 -1570)) + rect(l21 (-335 560) (170 170)) + rect(l21 (-5 -650) (170 170)) + rect(l21 (-170 1070) (170 170)) + rect(l22 (-1365 -980) (950 150)) + rect(l22 (-1100 -840) (150 2010)) + rect(l22 (950 -1320) (330 270)) + ) + net(24 + rect(l2 (6830 395) (445 420)) + polygon(l2 (-445 910) (0 420) (105 0) (0 340) (420 0) (0 -760)) + polygon(l9 (-290 -1280) (0 1570) (170 0) (0 -480) (245 0) (0 -170) (-245 0) (0 -920)) + rect(l21 (-170 80) (170 170)) + rect(l21 (-170 1070) (170 170)) + rect(l21 (-5 -570) (170 170)) + rect(l22 (-250 -220) (330 270)) + rect(l22 (0 -150) (950 150)) + rect(l22 (0 -1320) (150 2010)) + ) + net(25 + rect(l7 (7480 1435) (950 150)) + rect(l7 (-1280 -270) (330 270)) + rect(l7 (950 -1320) (150 2010)) + ) + net(26 name('wl[0]') + rect(l9 (1005 2135) (170 500)) + rect(l9 (2010 -500) (170 500)) + rect(l9 (2010 -500) (170 500)) + rect(l9 (2010 -500) (170 500)) + polygon(l11 (-6755 -880) (0 320) (15 0) (0 290) (230 0) (0 -290) (15 0) (0 -320)) + polygon(l11 (1920 0) (0 320) (15 0) (0 290) (230 0) (0 -290) (15 0) (0 -320)) + polygon(l11 (1920 0) (0 320) (15 0) (0 290) (230 0) (0 -290) (15 0) (0 -320)) + polygon(l11 (1920 0) (0 320) (15 0) (0 290) (230 0) (0 -290) (15 0) (0 -320)) + rect(l13 (-7760 30) (2180 260)) + rect(l13 (-2180 -260) (4360 260)) + rect(l13 (-4360 -260) (2180 260)) + rect(l13 (-2180 -260) (8720 260)) + rect(l13 (-6540 -260) (2180 260)) + rect(l13 (-2180 -260) (2180 260)) + rect(l13 (0 -260) (2180 260)) + rect(l13 (-2180 -260) (2180 260)) + rect(l13 (-2180 -260) (4360 260)) + rect(l13 (-2180 -260) (2180 260)) + rect(l13 (-2180 -260) (2180 260)) + rect(l14 (-8720 -260) (4360 260)) + rect(l14 (-4360 -260) (2180 260)) + rect(l14 (-2180 -260) (8720 260)) + rect(l14 (-8720 -260) (2180 260)) + rect(l14 (0 -260) (2180 260)) + rect(l14 (-2180 -260) (2180 260)) + rect(l14 (-1 -131) (2 2)) + rect(l14 (-1 -131) (2180 260)) + rect(l14 (-2180 -260) (4360 260)) + rect(l14 (-4360 -260) (2180 260)) + rect(l14 (0 -260) (2180 260)) + rect(l14 (-2180 -260) (2180 260)) + rect(l21 (-7715 340) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (2010 -170) (170 170)) + polygon(l22 (-6760 -250) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180)) + polygon(l22 (1910 0) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180)) + polygon(l22 (1910 0) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180)) + polygon(l22 (1910 0) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180)) + rect(l23 (-6760 -170) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l24 (-6700 -465) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l24 (2030 -150) (150 150)) + ) + net(27 + polygon(l7 (955 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180)) + ) + net(28 + polygon(l7 (7495 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180)) + ) + net(29 + polygon(l7 (3135 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180)) + ) + net(30 + polygon(l7 (5315 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180)) + ) + net(31 name('wl[1]') + rect(l9 (1005 2915) (170 500)) + rect(l9 (2010 -500) (170 500)) + rect(l9 (2010 -500) (170 500)) + rect(l9 (2010 -500) (170 500)) + polygon(l11 (-6740 -230) (0 290) (-15 0) (0 320) (260 0) (0 -320) (-15 0) (0 -290)) + polygon(l11 (1950 0) (0 290) (-15 0) (0 320) (260 0) (0 -320) (-15 0) (0 -290)) + polygon(l11 (1950 0) (0 290) (-15 0) (0 320) (260 0) (0 -320) (-15 0) (0 -290)) + polygon(l11 (1950 0) (0 290) (-15 0) (0 320) (260 0) (0 -320) (-15 0) (0 -290)) + rect(l13 (-7745 320) (8720 260)) + rect(l13 (-8720 -260) (4360 260)) + rect(l13 (-4360 -260) (2180 260)) + rect(l13 (-2180 -260) (2180 260)) + rect(l13 (0 -260) (2180 260)) + rect(l13 (-2180 -260) (2180 260)) + rect(l13 (0 -260) (4360 260)) + rect(l13 (-4360 -260) (2180 260)) + rect(l13 (-2180 -260) (2180 260)) + rect(l13 (0 -260) (2180 260)) + rect(l13 (-2180 -260) (2180 260)) + rect(l14 (-8720 -260) (8720 260)) + rect(l14 (-8720 -260) (2180 260)) + rect(l14 (-2180 -260) (4360 260)) + rect(l14 (-4360 -260) (2180 260)) + rect(l14 (0 -260) (2180 260)) + rect(l14 (-2180 -260) (2180 260)) + rect(l14 (-1 -131) (2 2)) + rect(l14 (-1 -131) (2180 260)) + rect(l14 (-2180 -260) (4360 260)) + rect(l14 (-4360 -260) (2180 260)) + rect(l14 (0 -260) (2180 260)) + rect(l14 (-2180 -260) (2180 260)) + rect(l21 (-7715 -770) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (2010 -170) (170 170)) + polygon(l22 (-7450 -250) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) + polygon(l22 (530 0) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) + polygon(l22 (530 0) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) + polygon(l22 (530 0) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) + rect(l23 (-7450 330) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l24 (-6700 145) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l24 (2030 -150) (150 150)) + ) + net(32 + polygon(l2 (395 3065) (0 340) (-105 0) (0 420) (525 0) (0 -760)) + rect(l2 (-525 1670) (445 420)) + polygon(l9 (-210 -1620) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480)) + rect(l21 (-170 80) (170 170)) + rect(l21 (-5 230) (170 170)) + rect(l21 (-335 670) (170 170)) + rect(l22 (-85 -1060) (330 270)) + rect(l22 (0 -270) (950 150)) + rect(l22 (0 -840) (150 2010)) + ) + net(33 + rect(l7 (940 3965) (950 150)) + rect(l7 (-1280 -150) (330 270)) + rect(l7 (950 -960) (150 2010)) + ) + net(34 + polygon(l2 (1365 3065) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) + rect(l2 (-340 1670) (445 420)) + polygon(l9 (-405 -1620) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570)) + rect(l21 (-170 80) (170 170)) + rect(l21 (-335 590) (170 170)) + rect(l21 (-5 310) (170 170)) + rect(l22 (-1365 -580) (950 150)) + rect(l22 (-1100 -1320) (150 2010)) + rect(l22 (950 -960) (330 270)) + ) + net(35 + polygon(l2 (2575 3065) (0 340) (-105 0) (0 420) (525 0) (0 -760)) + rect(l2 (-525 1670) (445 420)) + polygon(l9 (-210 -1620) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480)) + rect(l21 (-170 80) (170 170)) + rect(l21 (-5 230) (170 170)) + rect(l21 (-335 670) (170 170)) + rect(l22 (-85 -1060) (330 270)) + rect(l22 (0 -270) (950 150)) + rect(l22 (0 -840) (150 2010)) + ) + net(36 + rect(l7 (3120 3965) (950 150)) + rect(l7 (-1280 -150) (330 270)) + rect(l7 (950 -960) (150 2010)) + ) + net(37 + polygon(l2 (3545 3065) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) + rect(l2 (-340 1670) (445 420)) + polygon(l9 (-405 -1620) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570)) + rect(l21 (-170 80) (170 170)) + rect(l21 (-335 590) (170 170)) + rect(l21 (-5 310) (170 170)) + rect(l22 (-1365 -580) (950 150)) + rect(l22 (-1100 -1320) (150 2010)) + rect(l22 (950 -960) (330 270)) + ) + net(38 + polygon(l2 (4755 3065) (0 340) (-105 0) (0 420) (525 0) (0 -760)) + rect(l2 (-525 1670) (445 420)) + polygon(l9 (-210 -1620) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480)) + rect(l21 (-170 80) (170 170)) + rect(l21 (-5 230) (170 170)) + rect(l21 (-335 670) (170 170)) + rect(l22 (-85 -1060) (330 270)) + rect(l22 (0 -270) (950 150)) + rect(l22 (0 -840) (150 2010)) + ) + net(39 + rect(l7 (5300 3965) (950 150)) + rect(l7 (-1280 -150) (330 270)) + rect(l7 (950 -960) (150 2010)) + ) + net(40 + polygon(l2 (5725 3065) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) + rect(l2 (-340 1670) (445 420)) + polygon(l9 (-405 -1620) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570)) + rect(l21 (-170 80) (170 170)) + rect(l21 (-335 590) (170 170)) + rect(l21 (-5 310) (170 170)) + rect(l22 (-1365 -580) (950 150)) + rect(l22 (-1100 -1320) (150 2010)) + rect(l22 (950 -960) (330 270)) + ) + net(41 + polygon(l2 (6935 3065) (0 340) (-105 0) (0 420) (525 0) (0 -760)) + rect(l2 (-525 1670) (445 420)) + polygon(l9 (-210 -1620) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480)) + rect(l21 (-170 80) (170 170)) + rect(l21 (-5 230) (170 170)) + rect(l21 (-335 670) (170 170)) + rect(l22 (-85 -1060) (330 270)) + rect(l22 (0 -270) (950 150)) + rect(l22 (0 -840) (150 2010)) + ) + net(42 + rect(l7 (7480 3965) (950 150)) + rect(l7 (-1280 -150) (330 270)) + rect(l7 (950 -960) (150 2010)) + ) + net(43 + polygon(l7 (265 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) + ) + net(44 + polygon(l7 (6805 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) + ) + net(45 + polygon(l7 (2445 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) + ) + net(46 + polygon(l7 (4625 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) + ) + net(47 + rect(l7 (290 4445) (950 150)) + rect(l7 (-1100 -1320) (150 2010)) + rect(l7 (950 -960) (330 270)) + ) + net(48 + rect(l7 (2470 4445) (950 150)) + rect(l7 (-1100 -1320) (150 2010)) + rect(l7 (950 -960) (330 270)) + ) + net(49 + rect(l7 (4650 4445) (950 150)) + rect(l7 (-1100 -1320) (150 2010)) + rect(l7 (950 -960) (330 270)) + ) + net(50 + polygon(l2 (7905 3065) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) + rect(l2 (-340 1670) (445 420)) + polygon(l9 (-405 -1620) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570)) + rect(l21 (-335 840) (170 170)) + rect(l21 (-5 -930) (170 170)) + rect(l21 (-170 1070) (170 170)) + rect(l22 (-1365 -580) (950 150)) + rect(l22 (-1100 -1320) (150 2010)) + rect(l22 (950 -960) (330 270)) + ) + net(51 + rect(l7 (6830 4445) (950 150)) + rect(l7 (-1100 -1320) (150 2010)) + rect(l7 (950 -960) (330 270)) + ) + net(52 name(vss) + rect(l2 (-125 1725) (265 420)) + rect(l2 (-265 270) (250 720)) + rect(l2 (1915 -1410) (280 420)) + rect(l2 (-265 270) (250 720)) + rect(l2 (1915 -1410) (280 420)) + rect(l2 (-265 270) (250 720)) + rect(l2 (1915 -1410) (280 420)) + rect(l2 (-265 270) (250 720)) + rect(l2 (1915 -1410) (265 420)) + rect(l2 (-250 270) (250 720)) + rect(l2 (-8970 270) (265 420)) + rect(l2 (1900 -420) (280 420)) + rect(l2 (1900 -420) (280 420)) + rect(l2 (1900 -420) (280 420)) + rect(l2 (1900 -420) (265 420)) + rect(l6 (-8970 -1410) (250 720)) + rect(l6 (1930 -720) (250 720)) + rect(l6 (1930 -720) (250 720)) + rect(l6 (1930 -720) (250 720)) + rect(l6 (1930 -720) (250 720)) + rect(l9 (-8930 -1365) (170 1170)) + rect(l9 (-170 -330) (170 1170)) + rect(l9 (2010 -2010) (170 1170)) + rect(l9 (-170 -1170) (170 1170)) + rect(l9 (-170 -330) (170 1170)) + rect(l9 (-170 -1170) (170 1170)) + rect(l9 (2010 -2010) (170 1170)) + rect(l9 (-170 -1170) (170 1170)) + rect(l9 (-170 -330) (170 1170)) + rect(l9 (-170 -1170) (170 1170)) + rect(l9 (2010 -2010) (170 1170)) + rect(l9 (-170 -1170) (170 1170)) + rect(l9 (-170 -330) (170 1170)) + rect(l9 (-170 -1170) (170 1170)) + rect(l9 (2010 -2010) (170 1170)) + rect(l9 (-170 -330) (170 1170)) + rect(l11 (-8935 -1165) (260 320)) + rect(l11 (-260 -320) (260 320)) + rect(l11 (1920 -320) (260 320)) + rect(l11 (-260 -320) (260 320)) + rect(l11 (-260 -320) (260 320)) + rect(l11 (-260 -320) (260 320)) + rect(l11 (1920 -320) (260 320)) + rect(l11 (-260 -320) (260 320)) + rect(l11 (-260 -320) (260 320)) + rect(l11 (-260 -320) (260 320)) + rect(l11 (1920 -320) (260 320)) + rect(l11 (-260 -320) (260 320)) + rect(l11 (-260 -320) (260 320)) + rect(l11 (-260 -320) (260 320)) + rect(l11 (1920 -320) (260 320)) + rect(l11 (-260 -320) (260 320)) + rect(l13 (-9010 -290) (4680 260)) + rect(l13 (-4680 -260) (2500 260)) + rect(l13 (-2500 -260) (9040 260)) + rect(l13 (-9040 -260) (2500 260)) + rect(l13 (-2500 -260) (2500 260)) + rect(l13 (-320 -260) (2500 260)) + rect(l13 (-2500 -260) (2500 260)) + rect(l13 (-2500 -260) (2500 260)) + rect(l13 (-320 -260) (4680 260)) + rect(l13 (-4680 -260) (2500 260)) + rect(l13 (-2500 -260) (2500 260)) + rect(l13 (-2500 -260) (2500 260)) + rect(l13 (-320 -260) (2500 260)) + rect(l13 (-2500 -260) (2500 260)) + rect(l13 (-2500 -260) (2500 260)) + rect(l14 (-9040 -260) (2500 260)) + rect(l14 (-2500 -260) (4680 260)) + rect(l14 (-4680 -260) (2500 260)) + rect(l14 (-2500 -260) (2500 260)) + rect(l14 (-2500 -260) (9040 260)) + rect(l14 (-6860 -260) (2500 260)) + rect(l14 (-2500 -260) (2500 260)) + rect(l14 (-2500 -260) (2500 260)) + rect(l14 (-320 -260) (2500 260)) + rect(l14 (-2500 -260) (4680 260)) + rect(l14 (-4680 -260) (2500 260)) + rect(l14 (-2500 -260) (2500 260)) + rect(l14 (-2341 -131) (2 2)) + rect(l14 (2019 -131) (2500 260)) + rect(l14 (-2500 -260) (2500 260)) + rect(l14 (-2500 -260) (2500 260)) + rect(l21 (-8965 -1055) (170 170)) + rect(l21 (-170 670) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (2010 -1010) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (-170 670) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (2010 -1010) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (-170 670) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (2010 -1010) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (-170 670) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (2010 -1010) (170 170)) + rect(l21 (-170 670) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (-8890 670) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (-170 -170) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l23 (-8890 -1010) (170 170)) + rect(l23 (-170 -170) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l23 (-170 -170) (170 170)) + rect(l24 (-8880 -160) (150 150)) + rect(l24 (-150 -150) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l24 (-150 -150) (150 150)) + rect(l24 (-150 -150) (150 150)) + rect(l24 (-150 -150) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l24 (-150 -150) (150 150)) + rect(l24 (-150 -150) (150 150)) + rect(l24 (-150 -150) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l24 (-150 -150) (150 150)) + rect(l24 (-150 -150) (150 150)) + rect(l24 (-150 -150) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l24 (-150 -150) (150 150)) + ) + + # Devices and their connections + device(1 D$sky130_fd_pr__nfet_01v8__model + location(215 1935) + param(L 0.15) + param(W 0.42) + param(AS 0.1113) + param(AD 0.18165) + param(PS 1.37) + param(PD 1.285) + terminal(S 52) + terminal(G 11) + terminal(D 12) + terminal(B 52) + ) + device(2 D$sky130_fd_pr__nfet_01v8__model$1 + location(605 2560) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.0588) + param(PS 1.285) + param(PD 0.7) + terminal(S 12) + terminal(G 26) + terminal(D 2) + terminal(B 52) + ) + device(3 D$sky130_fd_pr__nfet_01v8__model$2 + location(605 2990) + param(L 0.15) + param(W 0.42) + param(AS 0.0588) + param(AD 0.18165) + param(PS 0.7) + param(PD 1.285) + terminal(S 2) + terminal(G 31) + terminal(D 32) + terminal(B 52) + ) + device(4 D$sky130_fd_pr__nfet_01v8__model$3 + location(215 3615) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.1113) + param(PS 1.285) + param(PD 1.37) + terminal(S 32) + terminal(G 34) + terminal(D 52) + terminal(B 52) + ) + device(5 D$sky130_fd_pr__nfet_01v8__model$4 + location(1965 1935) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.0588) + param(PS 1.285) + param(PD 0.7) + terminal(S 11) + terminal(G 12) + terminal(D 52) + terminal(B 52) + ) + device(6 D$sky130_fd_pr__nfet_01v8__model$5 + location(2395 1935) + param(L 0.15) + param(W 0.42) + param(AS 0.0588) + param(AD 0.18165) + param(PS 0.7) + param(PD 1.285) + terminal(S 52) + terminal(G 15) + terminal(D 16) + terminal(B 52) + ) + device(7 D$sky130_fd_pr__nfet_01v8__model$6 + location(1575 2560) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.0588) + param(PS 1.285) + param(PD 0.7) + terminal(S 11) + terminal(G 26) + terminal(D 3) + terminal(B 52) + ) + device(8 D$sky130_fd_pr__nfet_01v8__model$1 + location(2785 2560) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.0588) + param(PS 1.285) + param(PD 0.7) + terminal(S 16) + terminal(G 26) + terminal(D 4) + terminal(B 52) + ) + device(9 D$sky130_fd_pr__nfet_01v8__model$7 + location(1575 2990) + param(L 0.15) + param(W 0.42) + param(AS 0.0588) + param(AD 0.18165) + param(PS 0.7) + param(PD 1.285) + terminal(S 3) + terminal(G 31) + terminal(D 34) + terminal(B 52) + ) + device(10 D$sky130_fd_pr__nfet_01v8__model$2 + location(2785 2990) + param(L 0.15) + param(W 0.42) + param(AS 0.0588) + param(AD 0.18165) + param(PS 0.7) + param(PD 1.285) + terminal(S 4) + terminal(G 31) + terminal(D 35) + terminal(B 52) + ) + device(11 D$sky130_fd_pr__nfet_01v8__model$8 + location(1965 3615) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.0588) + param(PS 1.285) + param(PD 0.7) + terminal(S 34) + terminal(G 32) + terminal(D 52) + terminal(B 52) + ) + device(12 D$sky130_fd_pr__nfet_01v8__model$9 + location(2395 3615) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.0588) + param(PS 1.285) + param(PD 0.7) + terminal(S 35) + terminal(G 37) + terminal(D 52) + terminal(B 52) + ) + device(13 D$sky130_fd_pr__nfet_01v8__model$4 + location(4145 1935) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.0588) + param(PS 1.285) + param(PD 0.7) + terminal(S 15) + terminal(G 16) + terminal(D 52) + terminal(B 52) + ) + device(14 D$sky130_fd_pr__nfet_01v8__model$5 + location(4575 1935) + param(L 0.15) + param(W 0.42) + param(AS 0.0588) + param(AD 0.18165) + param(PS 0.7) + param(PD 1.285) + terminal(S 52) + terminal(G 19) + terminal(D 20) + terminal(B 52) + ) + device(15 D$sky130_fd_pr__nfet_01v8__model$6 + location(3755 2560) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.0588) + param(PS 1.285) + param(PD 0.7) + terminal(S 15) + terminal(G 26) + terminal(D 5) + terminal(B 52) + ) + device(16 D$sky130_fd_pr__nfet_01v8__model$1 + location(4965 2560) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.0588) + param(PS 1.285) + param(PD 0.7) + terminal(S 20) + terminal(G 26) + terminal(D 6) + terminal(B 52) + ) + device(17 D$sky130_fd_pr__nfet_01v8__model$7 + location(3755 2990) + param(L 0.15) + param(W 0.42) + param(AS 0.0588) + param(AD 0.18165) + param(PS 0.7) + param(PD 1.285) + terminal(S 5) + terminal(G 31) + terminal(D 37) + terminal(B 52) + ) + device(18 D$sky130_fd_pr__nfet_01v8__model$2 + location(4965 2990) + param(L 0.15) + param(W 0.42) + param(AS 0.0588) + param(AD 0.18165) + param(PS 0.7) + param(PD 1.285) + terminal(S 6) + terminal(G 31) + terminal(D 38) + terminal(B 52) + ) + device(19 D$sky130_fd_pr__nfet_01v8__model$8 + location(4145 3615) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.0588) + param(PS 1.285) + param(PD 0.7) + terminal(S 37) + terminal(G 35) + terminal(D 52) + terminal(B 52) + ) + device(20 D$sky130_fd_pr__nfet_01v8__model$9 + location(4575 3615) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.0588) + param(PS 1.285) + param(PD 0.7) + terminal(S 38) + terminal(G 40) + terminal(D 52) + terminal(B 52) + ) + device(21 D$sky130_fd_pr__nfet_01v8__model$4 + location(6325 1935) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.0588) + param(PS 1.285) + param(PD 0.7) + terminal(S 19) + terminal(G 20) + terminal(D 52) + terminal(B 52) + ) + device(22 D$sky130_fd_pr__nfet_01v8__model$5 + location(6755 1935) + param(L 0.15) + param(W 0.42) + param(AS 0.0588) + param(AD 0.18165) + param(PS 0.7) + param(PD 1.285) + terminal(S 52) + terminal(G 23) + terminal(D 24) + terminal(B 52) + ) + device(23 D$sky130_fd_pr__nfet_01v8__model$6 + location(5935 2560) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.0588) + param(PS 1.285) + param(PD 0.7) + terminal(S 19) + terminal(G 26) + terminal(D 7) + terminal(B 52) + ) + device(24 D$sky130_fd_pr__nfet_01v8__model$1 + location(7145 2560) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.0588) + param(PS 1.285) + param(PD 0.7) + terminal(S 24) + terminal(G 26) + terminal(D 8) + terminal(B 52) + ) + device(25 D$sky130_fd_pr__nfet_01v8__model$7 + location(5935 2990) + param(L 0.15) + param(W 0.42) + param(AS 0.0588) + param(AD 0.18165) + param(PS 0.7) + param(PD 1.285) + terminal(S 7) + terminal(G 31) + terminal(D 40) + terminal(B 52) + ) + device(26 D$sky130_fd_pr__nfet_01v8__model$2 + location(7145 2990) + param(L 0.15) + param(W 0.42) + param(AS 0.0588) + param(AD 0.18165) + param(PS 0.7) + param(PD 1.285) + terminal(S 8) + terminal(G 31) + terminal(D 41) + terminal(B 52) + ) + device(27 D$sky130_fd_pr__nfet_01v8__model$8 + location(6325 3615) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.0588) + param(PS 1.285) + param(PD 0.7) + terminal(S 40) + terminal(G 38) + terminal(D 52) + terminal(B 52) + ) + device(28 D$sky130_fd_pr__nfet_01v8__model$9 + location(6755 3615) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.0588) + param(PS 1.285) + param(PD 0.7) + terminal(S 41) + terminal(G 50) + terminal(D 52) + terminal(B 52) + ) + device(29 D$sky130_fd_pr__nfet_01v8__model$10 + location(8505 1935) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.1113) + param(PS 1.285) + param(PD 1.37) + terminal(S 23) + terminal(G 24) + terminal(D 52) + terminal(B 52) + ) + device(30 D$sky130_fd_pr__nfet_01v8__model$6 + location(8115 2560) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.0588) + param(PS 1.285) + param(PD 0.7) + terminal(S 23) + terminal(G 26) + terminal(D 9) + terminal(B 52) + ) + device(31 D$sky130_fd_pr__nfet_01v8__model$7 + location(8115 2990) + param(L 0.15) + param(W 0.42) + param(AS 0.0588) + param(AD 0.18165) + param(PS 0.7) + param(PD 1.285) + terminal(S 9) + terminal(G 31) + terminal(D 50) + terminal(B 52) + ) + device(32 D$sky130_fd_pr__nfet_01v8__model$11 + location(8505 3615) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.1113) + param(PS 1.285) + param(PD 1.37) + terminal(S 50) + terminal(G 41) + terminal(D 52) + terminal(B 52) + ) + device(33 D$sky130_fd_pr__pfet_01v8__model + location(215 605) + param(L 0.15) + param(W 0.42) + param(AS 0.1113) + param(AD 0.1869) + param(PS 1.37) + param(PD 1.73) + terminal(S 1) + terminal(G 11) + terminal(D 12) + terminal(B 1) + ) + device(34 D$sky130_fd_pr__pfet_01v8__model$1 + location(1965 605) + param(L 0.15) + param(W 0.42) + param(AS 0.1869) + param(AD 0.0588) + param(PS 1.73) + param(PD 0.7) + terminal(S 11) + terminal(G 12) + terminal(D 1) + terminal(B 1) + ) + device(35 D$sky130_fd_pr__pfet_01v8__model$2 + location(2395 605) + param(L 0.15) + param(W 0.42) + param(AS 0.0588) + param(AD 0.1869) + param(PS 0.7) + param(PD 1.73) + terminal(S 1) + terminal(G 15) + terminal(D 16) + terminal(B 1) + ) + device(36 D$sky130_fd_pr__pfet_01v8__model$1 + location(4145 605) + param(L 0.15) + param(W 0.42) + param(AS 0.1869) + param(AD 0.0588) + param(PS 1.73) + param(PD 0.7) + terminal(S 15) + terminal(G 16) + terminal(D 1) + terminal(B 1) + ) + device(37 D$sky130_fd_pr__pfet_01v8__model$2 + location(4575 605) + param(L 0.15) + param(W 0.42) + param(AS 0.0588) + param(AD 0.1869) + param(PS 0.7) + param(PD 1.73) + terminal(S 1) + terminal(G 19) + terminal(D 20) + terminal(B 1) + ) + device(38 D$sky130_fd_pr__pfet_01v8__model$1 + location(6325 605) + param(L 0.15) + param(W 0.42) + param(AS 0.1869) + param(AD 0.0588) + param(PS 1.73) + param(PD 0.7) + terminal(S 19) + terminal(G 20) + terminal(D 1) + terminal(B 1) + ) + device(39 D$sky130_fd_pr__pfet_01v8__model$2 + location(6755 605) + param(L 0.15) + param(W 0.42) + param(AS 0.0588) + param(AD 0.1869) + param(PS 0.7) + param(PD 1.73) + terminal(S 1) + terminal(G 23) + terminal(D 24) + terminal(B 1) + ) + device(40 D$sky130_fd_pr__pfet_01v8__model$3 + location(8505 605) + param(L 0.15) + param(W 0.42) + param(AS 0.1869) + param(AD 0.1113) + param(PS 1.73) + param(PD 1.37) + terminal(S 23) + terminal(G 24) + terminal(D 1) + terminal(B 1) + ) + device(41 D$sky130_fd_pr__pfet_01v8__model + location(215 4945) + param(L 0.15) + param(W 0.42) + param(AS 0.1113) + param(AD 0.1869) + param(PS 1.37) + param(PD 1.73) + terminal(S 1) + terminal(G 34) + terminal(D 32) + terminal(B 1) + ) + device(42 D$sky130_fd_pr__pfet_01v8__model$1 + location(1965 4945) + param(L 0.15) + param(W 0.42) + param(AS 0.1869) + param(AD 0.0588) + param(PS 1.73) + param(PD 0.7) + terminal(S 34) + terminal(G 32) + terminal(D 1) + terminal(B 1) + ) + device(43 D$sky130_fd_pr__pfet_01v8__model$2 + location(2395 4945) + param(L 0.15) + param(W 0.42) + param(AS 0.0588) + param(AD 0.1869) + param(PS 0.7) + param(PD 1.73) + terminal(S 1) + terminal(G 37) + terminal(D 35) + terminal(B 1) + ) + device(44 D$sky130_fd_pr__pfet_01v8__model$1 + location(4145 4945) + param(L 0.15) + param(W 0.42) + param(AS 0.1869) + param(AD 0.0588) + param(PS 1.73) + param(PD 0.7) + terminal(S 37) + terminal(G 35) + terminal(D 1) + terminal(B 1) + ) + device(45 D$sky130_fd_pr__pfet_01v8__model$2 + location(4575 4945) + param(L 0.15) + param(W 0.42) + param(AS 0.0588) + param(AD 0.1869) + param(PS 0.7) + param(PD 1.73) + terminal(S 1) + terminal(G 40) + terminal(D 38) + terminal(B 1) + ) + device(46 D$sky130_fd_pr__pfet_01v8__model$1 + location(6325 4945) + param(L 0.15) + param(W 0.42) + param(AS 0.1869) + param(AD 0.0588) + param(PS 1.73) + param(PD 0.7) + terminal(S 40) + terminal(G 38) + terminal(D 1) + terminal(B 1) + ) + device(47 D$sky130_fd_pr__pfet_01v8__model$2 + location(6755 4945) + param(L 0.15) + param(W 0.42) + param(AS 0.0588) + param(AD 0.1869) + param(PS 0.7) + param(PD 1.73) + terminal(S 1) + terminal(G 50) + terminal(D 41) + terminal(B 1) + ) + device(48 D$sky130_fd_pr__pfet_01v8__model$3 + location(8505 4945) + param(L 0.15) + param(W 0.42) + param(AS 0.1869) + param(AD 0.1113) + param(PS 1.73) + param(PD 1.37) + terminal(S 50) + terminal(G 41) + terminal(D 1) + terminal(B 1) + ) + + ) +) + +# Reference netlist +reference( + + # Device class section + class(SKY130_FD_PR__PFET_01V8__MODEL MOS4) + class(SKY130_FD_PR__NFET_01V8__MODEL MOS4) + + # Circuit section + # Circuits are the hierarchical building blocks of the netlist. + circuit(SP6TARRAY_2X4 + + # Nets + net(1 name(VSS)) + net(2 name(VDD)) + net(3 name('WL[0]')) + net(4 name('WL[1]')) + net(5 name('BL[0]')) + net(6 name('BL_N[0]')) + net(7 name('BL[1]')) + net(8 name('BL_N[1]')) + net(9 name('BL[2]')) + net(10 name('BL_N[2]')) + net(11 name('BL[3]')) + net(12 name('BL_N[3]')) + net(13 name(INST0X0.INST0X0.INST0X0.BIT_N)) + net(14 name(INST0X0.INST0X0.INST0X0.BIT)) + net(15 name(INST0X0.INST0X0.INST1X0.BIT_N)) + net(16 name(INST0X0.INST0X0.INST1X0.BIT)) + net(17 name(INST0X0.INST0X1.INST0X0.BIT_N)) + net(18 name(INST0X0.INST0X1.INST0X0.BIT)) + net(19 name(INST0X0.INST0X1.INST1X0.BIT_N)) + net(20 name(INST0X0.INST0X1.INST1X0.BIT)) + net(21 name(INST0X1.INST0X0.INST0X0.BIT_N)) + net(22 name(INST0X1.INST0X0.INST0X0.BIT)) + net(23 name(INST0X1.INST0X0.INST1X0.BIT_N)) + net(24 name(INST0X1.INST0X0.INST1X0.BIT)) + net(25 name(INST0X1.INST0X1.INST0X0.BIT_N)) + net(26 name(INST0X1.INST0X1.INST0X0.BIT)) + net(27 name(INST0X1.INST0X1.INST1X0.BIT_N)) + net(28 name(INST0X1.INST0X1.INST1X0.BIT)) + + # Outgoing pins and their connections to nets + pin(1 name(VSS)) + pin(2 name(VDD)) + pin(3 name('WL[0]')) + pin(4 name('WL[1]')) + pin(5 name('BL[0]')) + pin(6 name('BL_N[0]')) + pin(7 name('BL[1]')) + pin(8 name('BL_N[1]')) + pin(9 name('BL[2]')) + pin(10 name('BL_N[2]')) + pin(11 name('BL[3]')) + pin(12 name('BL_N[3]')) + + # Devices and their connections + device(1 SKY130_FD_PR__PFET_01V8__MODEL + name(INST0X0.INST0X0.INST0X0.PU1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 2) + terminal(G 13) + terminal(D 14) + terminal(B 2) + ) + device(2 SKY130_FD_PR__PFET_01V8__MODEL + name(INST0X0.INST0X0.INST0X0.PU2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 13) + terminal(G 14) + terminal(D 2) + terminal(B 2) + ) + device(3 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X0.INST0X0.INST0X0.PD1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 1) + terminal(G 13) + terminal(D 14) + terminal(B 1) + ) + device(4 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X0.INST0X0.INST0X0.PD2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 13) + terminal(G 14) + terminal(D 1) + terminal(B 1) + ) + device(5 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X0.INST0X0.INST0X0.PG1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 5) + terminal(G 3) + terminal(D 14) + terminal(B 1) + ) + device(6 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X0.INST0X0.INST0X0.PG2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 6) + terminal(G 3) + terminal(D 13) + terminal(B 1) + ) + device(7 SKY130_FD_PR__PFET_01V8__MODEL + name(INST0X0.INST0X0.INST1X0.PU1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 2) + terminal(G 15) + terminal(D 16) + terminal(B 2) + ) + device(8 SKY130_FD_PR__PFET_01V8__MODEL + name(INST0X0.INST0X0.INST1X0.PU2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 15) + terminal(G 16) + terminal(D 2) + terminal(B 2) + ) + device(9 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X0.INST0X0.INST1X0.PD1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 1) + terminal(G 15) + terminal(D 16) + terminal(B 1) + ) + device(10 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X0.INST0X0.INST1X0.PD2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 15) + terminal(G 16) + terminal(D 1) + terminal(B 1) + ) + device(11 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X0.INST0X0.INST1X0.PG1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 5) + terminal(G 4) + terminal(D 16) + terminal(B 1) + ) + device(12 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X0.INST0X0.INST1X0.PG2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 6) + terminal(G 4) + terminal(D 15) + terminal(B 1) + ) + device(13 SKY130_FD_PR__PFET_01V8__MODEL + name(INST0X0.INST0X1.INST0X0.PU1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 2) + terminal(G 17) + terminal(D 18) + terminal(B 2) + ) + device(14 SKY130_FD_PR__PFET_01V8__MODEL + name(INST0X0.INST0X1.INST0X0.PU2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 17) + terminal(G 18) + terminal(D 2) + terminal(B 2) + ) + device(15 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X0.INST0X1.INST0X0.PD1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 1) + terminal(G 17) + terminal(D 18) + terminal(B 1) + ) + device(16 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X0.INST0X1.INST0X0.PD2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 17) + terminal(G 18) + terminal(D 1) + terminal(B 1) + ) + device(17 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X0.INST0X1.INST0X0.PG1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 7) + terminal(G 3) + terminal(D 18) + terminal(B 1) + ) + device(18 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X0.INST0X1.INST0X0.PG2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 8) + terminal(G 3) + terminal(D 17) + terminal(B 1) + ) + device(19 SKY130_FD_PR__PFET_01V8__MODEL + name(INST0X0.INST0X1.INST1X0.PU1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 2) + terminal(G 19) + terminal(D 20) + terminal(B 2) + ) + device(20 SKY130_FD_PR__PFET_01V8__MODEL + name(INST0X0.INST0X1.INST1X0.PU2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 19) + terminal(G 20) + terminal(D 2) + terminal(B 2) + ) + device(21 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X0.INST0X1.INST1X0.PD1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 1) + terminal(G 19) + terminal(D 20) + terminal(B 1) + ) + device(22 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X0.INST0X1.INST1X0.PD2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 19) + terminal(G 20) + terminal(D 1) + terminal(B 1) + ) + device(23 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X0.INST0X1.INST1X0.PG1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 7) + terminal(G 4) + terminal(D 20) + terminal(B 1) + ) + device(24 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X0.INST0X1.INST1X0.PG2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 8) + terminal(G 4) + terminal(D 19) + terminal(B 1) + ) + device(25 SKY130_FD_PR__PFET_01V8__MODEL + name(INST0X1.INST0X0.INST0X0.PU1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 2) + terminal(G 21) + terminal(D 22) + terminal(B 2) + ) + device(26 SKY130_FD_PR__PFET_01V8__MODEL + name(INST0X1.INST0X0.INST0X0.PU2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 21) + terminal(G 22) + terminal(D 2) + terminal(B 2) + ) + device(27 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X1.INST0X0.INST0X0.PD1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 1) + terminal(G 21) + terminal(D 22) + terminal(B 1) + ) + device(28 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X1.INST0X0.INST0X0.PD2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 21) + terminal(G 22) + terminal(D 1) + terminal(B 1) + ) + device(29 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X1.INST0X0.INST0X0.PG1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 9) + terminal(G 3) + terminal(D 22) + terminal(B 1) + ) + device(30 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X1.INST0X0.INST0X0.PG2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 10) + terminal(G 3) + terminal(D 21) + terminal(B 1) + ) + device(31 SKY130_FD_PR__PFET_01V8__MODEL + name(INST0X1.INST0X0.INST1X0.PU1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 2) + terminal(G 23) + terminal(D 24) + terminal(B 2) + ) + device(32 SKY130_FD_PR__PFET_01V8__MODEL + name(INST0X1.INST0X0.INST1X0.PU2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 23) + terminal(G 24) + terminal(D 2) + terminal(B 2) + ) + device(33 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X1.INST0X0.INST1X0.PD1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 1) + terminal(G 23) + terminal(D 24) + terminal(B 1) + ) + device(34 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X1.INST0X0.INST1X0.PD2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 23) + terminal(G 24) + terminal(D 1) + terminal(B 1) + ) + device(35 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X1.INST0X0.INST1X0.PG1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 9) + terminal(G 4) + terminal(D 24) + terminal(B 1) + ) + device(36 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X1.INST0X0.INST1X0.PG2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 10) + terminal(G 4) + terminal(D 23) + terminal(B 1) + ) + device(37 SKY130_FD_PR__PFET_01V8__MODEL + name(INST0X1.INST0X1.INST0X0.PU1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 2) + terminal(G 25) + terminal(D 26) + terminal(B 2) + ) + device(38 SKY130_FD_PR__PFET_01V8__MODEL + name(INST0X1.INST0X1.INST0X0.PU2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 25) + terminal(G 26) + terminal(D 2) + terminal(B 2) + ) + device(39 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X1.INST0X1.INST0X0.PD1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 1) + terminal(G 25) + terminal(D 26) + terminal(B 1) + ) + device(40 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X1.INST0X1.INST0X0.PD2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 25) + terminal(G 26) + terminal(D 1) + terminal(B 1) + ) + device(41 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X1.INST0X1.INST0X0.PG1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 11) + terminal(G 3) + terminal(D 26) + terminal(B 1) + ) + device(42 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X1.INST0X1.INST0X0.PG2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 12) + terminal(G 3) + terminal(D 25) + terminal(B 1) + ) + device(43 SKY130_FD_PR__PFET_01V8__MODEL + name(INST0X1.INST0X1.INST1X0.PU1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 2) + terminal(G 27) + terminal(D 28) + terminal(B 2) + ) + device(44 SKY130_FD_PR__PFET_01V8__MODEL + name(INST0X1.INST0X1.INST1X0.PU2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 27) + terminal(G 28) + terminal(D 2) + terminal(B 2) + ) + device(45 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X1.INST0X1.INST1X0.PD1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 1) + terminal(G 27) + terminal(D 28) + terminal(B 1) + ) + device(46 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X1.INST0X1.INST1X0.PD2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 27) + terminal(G 28) + terminal(D 1) + terminal(B 1) + ) + device(47 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X1.INST0X1.INST1X0.PG1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 11) + terminal(G 4) + terminal(D 28) + terminal(B 1) + ) + device(48 SKY130_FD_PR__NFET_01V8__MODEL + name(INST0X1.INST0X1.INST1X0.PG2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 12) + terminal(G 4) + terminal(D 27) + terminal(B 1) + ) + + ) +) + +# Cross reference +xref( + circuit(SP6TArray_2X4 SP6TARRAY_2X4 match + xref( + net(12 14 match) + net(11 13 match) + net(32 16 match) + net(34 15 match) + net(16 18 match) + net(15 17 match) + net(35 20 match) + net(37 19 match) + net(20 22 match) + net(19 21 match) + net(38 24 match) + net(40 23 match) + net(24 26 match) + net(23 25 match) + net(41 28 match) + net(50 27 match) + net(2 5 match) + net(4 7 match) + net(6 9 match) + net(8 11 match) + net(3 6 match) + net(5 8 match) + net(7 10 match) + net(9 12 match) + net(1 2 match) + net(52 1 match) + net(26 3 match) + net(31 4 match) + pin(() 4 match) + pin(() 6 match) + pin(() 8 match) + pin(() 10 match) + pin(() 5 match) + pin(() 7 match) + pin(() 9 match) + pin(() 11 match) + pin(() 1 match) + pin(() 0 match) + pin(() 2 match) + pin(() 3 match) + device(1 3 match) + device(5 4 match) + device(2 5 match) + device(7 6 match) + device(4 9 match) + device(11 10 match) + device(3 11 match) + device(9 12 match) + device(6 15 match) + device(13 16 match) + device(8 17 match) + device(15 18 match) + device(12 21 match) + device(19 22 match) + device(10 23 match) + device(17 24 match) + device(14 27 match) + device(21 28 match) + device(16 29 match) + device(23 30 match) + device(20 33 match) + device(27 34 match) + device(18 35 match) + device(25 36 match) + device(22 39 match) + device(29 40 match) + device(24 41 match) + device(30 42 match) + device(28 45 match) + device(32 46 match) + device(26 47 match) + device(31 48 match) + device(33 1 match) + device(34 2 match) + device(41 7 match) + device(42 8 match) + device(35 13 match) + device(36 14 match) + device(43 19 match) + device(44 20 match) + device(37 25 match) + device(38 26 match) + device(45 31 match) + device(46 32 match) + device(39 37 match) + device(40 38 match) + device(47 43 match) + device(48 44 match) + ) + ) +) diff --git a/testdata/lvs/test_22c.cir b/testdata/lvs/test_22c.cir new file mode 100644 index 000000000..f8308ad6d --- /dev/null +++ b/testdata/lvs/test_22c.cir @@ -0,0 +1,97 @@ +* Extracted by KLayout + +* cell SP6TArray_2X4 +.SUBCKT SP6TArray_2X4 +* net 1 bl[0] +* net 2 bl_n[0] +* net 3 bl[1] +* net 4 bl_n[1] +* net 5 bl[2] +* net 6 bl_n[2] +* net 7 bl[3] +* net 8 bl_n[3] +* net 9 vdd +* net 10 wl[0] +* net 11 wl[1] +* net 12 vss +* cell instance $1 r0 *1 0,0 +X$1 1 2 3 4 9 10 11 12 SP6TArray_2X2 +* cell instance $2 r0 *1 4.36,0 +X$2 5 6 7 8 9 10 11 12 SP6TArray_2X2 +.ENDS SP6TArray_2X4 + +* cell SP6TArray_2X2 +* pin bl[0] +* pin bl_n[0] +* pin bl[1] +* pin bl_n[1] +* pin vdd +* pin wl[0] +* pin wl[1] +* pin vss +.SUBCKT SP6TArray_2X2 1 2 3 4 5 6 7 8 +* net 1 bl[0] +* net 2 bl_n[0] +* net 3 bl[1] +* net 4 bl_n[1] +* net 5 vdd +* net 6 wl[0] +* net 7 wl[1] +* net 8 vss +* cell instance $1 r0 *1 0,0 +X$1 1 2 5 6 7 8 SP6TArray_2X1 +* cell instance $2 r0 *1 2.18,0 +X$2 3 4 5 6 7 8 SP6TArray_2X1 +.ENDS SP6TArray_2X2 + +* cell SP6TArray_2X1 +* pin bl[0] +* pin bl_n[0] +* pin vdd +* pin wl[0] +* pin wl[1] +* pin vss +.SUBCKT SP6TArray_2X1 1 2 3 4 5 6 +* net 1 bl[0] +* net 2 bl_n[0] +* net 3 vdd +* net 4 wl[0] +* net 5 wl[1] +* net 6 vss +* cell instance $1 r0 *1 0,2.775 +X$1 3 5 1 2 6 SP6TCell +* cell instance $2 m0 *1 0,2.775 +X$2 3 4 1 2 6 SP6TCell +.ENDS SP6TArray_2X1 + +* cell SP6TCell +* pin vdd +* pin wl +* pin bl +* pin bl_n +* pin vss +.SUBCKT SP6TCell 5 6 7 8 10 +* net 5 vdd +* net 6 wl +* net 7 bl +* net 8 bl_n +* net 10 vss +* device instance $1 r0 *1 1.575,0.215 sky130_fd_pr__nfet_01v8__model +M$1 8 6 4 10 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.1113P ++ AD=0.18165P PS=1.37U PD=1.285U +* device instance $2 r0 *1 1.965,0.84 sky130_fd_pr__nfet_01v8__model +M$2 4 3 10 10 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.1113P PS=1.285U PD=1.37U +* device instance $3 r0 *1 0.605,0.215 sky130_fd_pr__nfet_01v8__model +M$3 7 6 3 10 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.1113P ++ AD=0.18165P PS=1.37U PD=1.285U +* device instance $4 r0 *1 0.215,0.84 sky130_fd_pr__nfet_01v8__model +M$4 3 4 10 10 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.1113P PS=1.285U PD=1.37U +* device instance $5 r0 *1 1.965,2.17 sky130_fd_pr__pfet_01v8__model +M$5 4 3 5 5 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.1869P ++ AD=0.1113P PS=1.73U PD=1.37U +* device instance $6 r0 *1 0.215,2.17 sky130_fd_pr__pfet_01v8__model +M$6 5 4 3 5 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.1113P ++ AD=0.1869P PS=1.37U PD=1.73U +.ENDS SP6TCell diff --git a/testdata/lvs/test_22c.lvsdb.1 b/testdata/lvs/test_22c.lvsdb.1 new file mode 100644 index 000000000..6a3f3007e --- /dev/null +++ b/testdata/lvs/test_22c.lvsdb.1 @@ -0,0 +1,952 @@ +#%lvsdb-klayout + +# Layout +layout( + top(SP6TArray_2X4) + unit(0.001) + + # Layer section + # This section lists the mask layers (drawing or derived) and their connections. + + # Mask layers + layer(l5 '64/20') + layer(l3) + layer(l8) + layer(l7 '66/20') + layer(l10) + layer(l9 '67/20') + layer(l12 '68/16') + layer(l11 '68/20') + layer(l14 '69/16') + layer(l13 '69/20') + layer(l16) + layer(l15) + layer(l18) + layer(l17) + layer(l20) + layer(l19) + layer(l21 '66/44') + layer(l23 '67/44') + layer(l24 '68/44') + layer(l25) + layer(l26) + layer(l27) + layer(l1) + layer(l2) + layer(l4) + layer(l6) + layer(l22) + + # Mask layer connectivity + connect(l5 l5 l4) + connect(l3 l3 l2) + connect(l8 l8 l7) + connect(l7 l8 l7) + connect(l10 l10 l9) + connect(l9 l10 l9 l21 l23) + connect(l12 l12 l11) + connect(l11 l12 l11 l23 l24) + connect(l14 l14 l13) + connect(l13 l14 l13 l24 l25) + connect(l16 l16 l15) + connect(l15 l16 l15 l25 l26) + connect(l18 l18 l17) + connect(l17 l18 l17 l26 l27) + connect(l20 l20 l19) + connect(l19 l20 l19 l27) + connect(l21 l9 l21 l2 l22) + connect(l23 l9 l11 l23) + connect(l24 l11 l13 l24) + connect(l25 l13 l15 l25) + connect(l26 l15 l17 l26) + connect(l27 l17 l19 l27) + connect(l1 l1) + connect(l2 l3 l21 l2 l4 l6) + connect(l4 l5 l2 l4) + connect(l6 l2 l6) + connect(l22 l21 l22) + + # Global nets and connectivity + global(l1 vss) + global(l6 vss) + + # Device class section + class(active_res RES) + class(poly_res RES) + class(sky130_fd_pr__diode_pw2nd_05v5 DIODE) + class(sky130_fd_pr__diode_pd2nw_05v5 DIODE) + class(sky130_fd_pr__nfet_01v8__model MOS4) + class(sky130_fd_pr__nfet_01v8_lvt__model MOS4) + class(sky130_fd_pr__nfet_g5v0d10v5__model MOS4) + class(sky130_fd_pr__pfet_01v8__model MOS4) + class(sky130_fd_pr__pfet_01v8_hvt__model MOS4) + class(sky130_fd_pr__pfet_01v8_lvt__model MOS4) + class(sky130_fd_pr__pfet_g5v0d10v5__model MOS4) + + # Device abstracts section + # Device abstracts list the pin shapes of the devices. + device(D$sky130_fd_pr__nfet_01v8__model sky130_fd_pr__nfet_01v8__model + terminal(S + rect(l2 (-210 -340) (420 265)) + ) + terminal(G + rect(l22 (-210 -75) (420 150)) + ) + terminal(D + polygon(l2 (-210 75) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) + ) + terminal(B + rect(l1 (-210 -75) (420 150)) + ) + ) + device(D$sky130_fd_pr__nfet_01v8__model$1 sky130_fd_pr__nfet_01v8__model + terminal(S + polygon(l2 (-600 -550) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (75 -210) (265 420)) + ) + terminal(B + rect(l1 (-75 -210) (150 420)) + ) + ) + device(D$sky130_fd_pr__nfet_01v8__model$2 sky130_fd_pr__nfet_01v8__model + terminal(S + rect(l2 (-210 -340) (420 265)) + ) + terminal(G + rect(l22 (-210 -75) (420 150)) + ) + terminal(D + polygon(l2 (-210 75) (0 340) (-105 0) (0 420) (525 0) (0 -760)) + ) + terminal(B + rect(l1 (-210 -75) (420 150)) + ) + ) + device(D$sky130_fd_pr__nfet_01v8__model$3 sky130_fd_pr__nfet_01v8__model + terminal(S + polygon(l2 (180 -550) (0 340) (-105 0) (0 420) (525 0) (0 -760)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (-340 -210) (265 420)) + ) + terminal(B + rect(l1 (-75 -210) (150 420)) + ) + ) + device(D$sky130_fd_pr__pfet_01v8__model sky130_fd_pr__pfet_01v8__model + terminal(S + rect(l2 (-520 -210) (445 420)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (75 -210) (265 420)) + ) + terminal(B + rect(l5 (-75 -210) (150 420)) + ) + ) + device(D$sky130_fd_pr__pfet_01v8__model$1 sky130_fd_pr__pfet_01v8__model + terminal(S + rect(l2 (-340 -210) (265 420)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (75 -210) (445 420)) + ) + terminal(B + rect(l5 (-75 -210) (150 420)) + ) + ) + + # Circuit section + # Circuits are the hierarchical building blocks of the netlist. + circuit(SP6TCell + + # Circuit boundary + rect((-385 -485) (2950 3565)) + + # Nets with their geometries + net(1 + rect(l7 (1890 500) (150 2010)) + rect(l7 (-1100 -1320) (950 150)) + rect(l7 (-1280 -150) (330 270)) + ) + net(2 + rect(l7 (1240 1550) (330 270)) + rect(l7 (-1280 -150) (950 150)) + rect(l7 (-1100 -1320) (150 2010)) + ) + net(3 + polygon(l9 (525 760) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480)) + rect(l21 (-170 80) (170 170)) + rect(l21 (-170 1070) (170 170)) + rect(l21 (-5 -1010) (170 170)) + polygon(l2 (-465 -1120) (0 340) (-105 0) (0 420) (525 0) (0 -760)) + rect(l2 (-525 1670) (445 420)) + rect(l22 (-125 -1190) (330 270)) + rect(l22 (950 -960) (150 2010)) + rect(l22 (-1100 -1320) (950 150)) + ) + net(4 + polygon(l9 (1485 760) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570)) + rect(l21 (-170 80) (170 170)) + rect(l21 (-170 1070) (170 170)) + rect(l21 (-335 -650) (170 170)) + polygon(l2 (-125 -1480) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) + rect(l2 (-340 1670) (445 420)) + rect(l22 (-650 -830) (330 270)) + rect(l22 (-1280 -150) (950 150)) + rect(l22 (-1100 -1320) (150 2010)) + ) + net(5 name(vdd) + rect(l5 (-385 1780) (2950 1300)) + rect(l9 (-2650 -1075) (170 685)) + rect(l9 (-250 0) (2510 170)) + rect(l9 (-250 -855) (170 685)) + rect(l11 (-2395 -75) (260 320)) + rect(l11 (1920 -320) (260 320)) + rect(l14 (-2470 -290) (2500 260)) + rect(l14 (-1251 -131) (2 2)) + rect(l13 (-1251 -131) (2500 260)) + rect(l21 (-2425 -215) (170 170)) + rect(l21 (-170 -775) (170 170)) + rect(l21 (2010 435) (170 170)) + rect(l21 (-170 -775) (170 170)) + rect(l23 (-2350 435) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l24 (-2340 -160) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l2 (-2460 -200) (2590 250)) + rect(l2 (-2510 -940) (265 420)) + rect(l2 (1900 -420) (265 420)) + rect(l4 (-2510 270) (2590 250)) + ) + net(6 name(wl) + rect(l9 (1005 140) (170 500)) + polygon(l11 (-200 -230) (0 290) (-15 0) (0 320) (260 0) (0 -320) (-15 0) (0 -290)) + rect(l14 (-1205 320) (2180 260)) + rect(l14 (-1091 -131) (2 2)) + rect(l13 (-1091 -131) (2180 260)) + rect(l21 (-1175 -770) (170 170)) + rect(l23 (-170 80) (170 170)) + rect(l24 (-160 145) (150 150)) + polygon(l22 (-900 -795) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) + ) + net(7 name(bl) + polygon(l9 (520 -165) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330)) + rect(l12 (-260 20) (230 2920)) + rect(l12 (-116 -1461) (2 2)) + rect(l11 (-116 -1461) (230 2920)) + rect(l21 (-140 -2860) (170 170)) + rect(l23 (-230 -170) (170 170)) + rect(l2 (-235 -210) (420 265)) + ) + net(8 name(bl_n) + polygon(l9 (1490 -165) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80)) + rect(l12 (-140 20) (230 2920)) + rect(l12 (-116 -1461) (2 2)) + rect(l11 (-116 -1461) (230 2920)) + rect(l21 (-260 -2860) (170 170)) + rect(l23 (-110 -170) (170 170)) + rect(l2 (-355 -210) (420 265)) + ) + net(9 + polygon(l7 (265 140) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) + ) + net(10 name(vss) + rect(l9 (-85 -165) (170 1170)) + rect(l9 (2010 -1170) (170 1170)) + rect(l11 (-2395 -1165) (260 320)) + rect(l11 (1920 -320) (260 320)) + rect(l14 (-2470 -290) (2500 260)) + rect(l14 (-1251 -131) (2 2)) + rect(l13 (-1251 -131) (2500 260)) + rect(l21 (-2425 -215) (170 170)) + rect(l21 (-170 670) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (-170 -1010) (170 170)) + rect(l23 (-2350 -170) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l24 (-2340 -160) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l2 (-215 555) (265 420)) + rect(l2 (-2430 -1410) (250 720)) + rect(l2 (-250 270) (265 420)) + rect(l2 (1915 -1410) (250 720)) + rect(l6 (-2430 -720) (250 720)) + rect(l6 (1930 -720) (250 720)) + ) + + # Outgoing pins and their connections to nets + pin(5 name(vdd)) + pin(6 name(wl)) + pin(7 name(bl)) + pin(8 name(bl_n)) + pin(10 name(vss)) + + # Devices and their connections + device(1 D$sky130_fd_pr__nfet_01v8__model + location(1575 215) + param(L 0.15) + param(W 0.42) + param(AS 0.1113) + param(AD 0.18165) + param(PS 1.37) + param(PD 1.285) + terminal(S 8) + terminal(G 6) + terminal(D 4) + terminal(B 10) + ) + device(2 D$sky130_fd_pr__nfet_01v8__model$1 + location(1965 840) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.1113) + param(PS 1.285) + param(PD 1.37) + terminal(S 4) + terminal(G 3) + terminal(D 10) + terminal(B 10) + ) + device(3 D$sky130_fd_pr__nfet_01v8__model$2 + location(605 215) + param(L 0.15) + param(W 0.42) + param(AS 0.1113) + param(AD 0.18165) + param(PS 1.37) + param(PD 1.285) + terminal(S 7) + terminal(G 6) + terminal(D 3) + terminal(B 10) + ) + device(4 D$sky130_fd_pr__nfet_01v8__model$3 + location(215 840) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.1113) + param(PS 1.285) + param(PD 1.37) + terminal(S 3) + terminal(G 4) + terminal(D 10) + terminal(B 10) + ) + device(5 D$sky130_fd_pr__pfet_01v8__model + location(1965 2170) + param(L 0.15) + param(W 0.42) + param(AS 0.1869) + param(AD 0.1113) + param(PS 1.73) + param(PD 1.37) + terminal(S 4) + terminal(G 3) + terminal(D 5) + terminal(B 5) + ) + device(6 D$sky130_fd_pr__pfet_01v8__model$1 + location(215 2170) + param(L 0.15) + param(W 0.42) + param(AS 0.1113) + param(AD 0.1869) + param(PS 1.37) + param(PD 1.73) + terminal(S 5) + terminal(G 4) + terminal(D 3) + terminal(B 5) + ) + + ) + circuit(SP6TArray_2X1 + + # Circuit boundary + rect((-385 -305) (2950 6160)) + + # Nets with their geometries + net(1 name('bl[0]') + rect(l12 (430 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(2 name('bl_n[0]') + rect(l12 (1520 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(3 name(vdd) + rect(l14 (-160 -130) (2500 260)) + rect(l14 (-1251 -131) (2 2)) + rect(l14 (-1251 5419) (2500 260)) + rect(l14 (-1251 -131) (2 2)) + rect(l13 (-1251 -5681) (2500 260)) + rect(l13 (-2500 5290) (2500 260)) + ) + net(4 name('wl[0]') + rect(l14 (0 1785) (2180 260)) + rect(l14 (-1091 -131) (2 2)) + rect(l13 (-1091 -131) (2180 260)) + ) + net(5 name('wl[1]') + rect(l14 (0 3505) (2180 260)) + rect(l14 (-1091 -131) (2 2)) + rect(l13 (-1091 -131) (2180 260)) + ) + net(6 name(vss) + rect(l14 (-160 2645) (2500 260)) + rect(l14 (-1251 -131) (2 2)) + rect(l13 (-1251 -131) (2500 260)) + ) + + # Outgoing pins and their connections to nets + pin(1 name('bl[0]')) + pin(2 name('bl_n[0]')) + pin(3 name(vdd)) + pin(4 name('wl[0]')) + pin(5 name('wl[1]')) + pin(6 name(vss)) + + # Subcircuits and their connections + circuit(1 SP6TCell location(0 2775) + pin(0 3) + pin(1 5) + pin(2 1) + pin(3 2) + pin(4 6) + ) + circuit(2 SP6TCell mirror location(0 2775) + pin(0 3) + pin(1 4) + pin(2 1) + pin(3 2) + pin(4 6) + ) + + ) + circuit(SP6TArray_2X2 + + # Circuit boundary + rect((-385 -305) (5130 6160)) + + # Nets with their geometries + net(1 name('bl[0]') + rect(l12 (430 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(2 name('bl_n[0]') + rect(l12 (1520 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(3 name('bl[1]') + rect(l12 (2610 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(4 name('bl_n[1]') + rect(l12 (3700 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(5 name(vdd) + rect(l14 (-160 5420) (4680 260)) + rect(l14 (-2341 -131) (2 2)) + rect(l14 (-2341 -5681) (4680 260)) + rect(l14 (-2341 -131) (2 2)) + rect(l13 (-2341 5419) (4680 260)) + rect(l13 (-4680 -5810) (4680 260)) + ) + net(6 name('wl[0]') + rect(l14 (0 1785) (4360 260)) + rect(l14 (-2181 -131) (2 2)) + rect(l13 (-2181 -131) (4360 260)) + ) + net(7 name('wl[1]') + rect(l14 (0 3505) (4360 260)) + rect(l14 (-2181 -131) (2 2)) + rect(l13 (-2181 -131) (4360 260)) + ) + net(8 name(vss) + rect(l14 (-160 2645) (4680 260)) + rect(l14 (-2341 -131) (2 2)) + rect(l13 (-2341 -131) (4680 260)) + ) + + # Outgoing pins and their connections to nets + pin(1 name('bl[0]')) + pin(2 name('bl_n[0]')) + pin(3 name('bl[1]')) + pin(4 name('bl_n[1]')) + pin(5 name(vdd)) + pin(6 name('wl[0]')) + pin(7 name('wl[1]')) + pin(8 name(vss)) + + # Subcircuits and their connections + circuit(1 SP6TArray_2X1 location(0 0) + pin(0 1) + pin(1 2) + pin(2 5) + pin(3 6) + pin(4 7) + pin(5 8) + ) + circuit(2 SP6TArray_2X1 location(2180 0) + pin(0 3) + pin(1 4) + pin(2 5) + pin(3 6) + pin(4 7) + pin(5 8) + ) + + ) + circuit(SP6TArray_2X4 + + # Circuit boundary + rect((-385 -305) (9490 6160)) + + # Nets with their geometries + net(1 name('bl[0]') + rect(l12 (430 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(2 name('bl_n[0]') + rect(l12 (1520 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(3 name('bl[1]') + rect(l12 (2610 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(4 name('bl_n[1]') + rect(l12 (3700 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(5 name('bl[2]') + rect(l12 (4790 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(6 name('bl_n[2]') + rect(l12 (5880 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(7 name('bl[3]') + rect(l12 (6970 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(8 name('bl_n[3]') + rect(l12 (8060 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(9 name(vdd) + rect(l14 (-160 -130) (9040 260)) + rect(l14 (-4521 -131) (2 2)) + rect(l14 (-4521 5419) (9040 260)) + rect(l14 (-4521 -131) (2 2)) + rect(l13 (-4521 -5681) (9040 260)) + rect(l13 (-9040 5290) (9040 260)) + ) + net(10 name('wl[0]') + rect(l14 (0 1785) (8720 260)) + rect(l14 (-4361 -131) (2 2)) + rect(l13 (-4361 -131) (8720 260)) + ) + net(11 name('wl[1]') + rect(l14 (0 3505) (8720 260)) + rect(l14 (-4361 -131) (2 2)) + rect(l13 (-4361 -131) (8720 260)) + ) + net(12 name(vss) + rect(l14 (-160 2645) (9040 260)) + rect(l14 (-4521 -131) (2 2)) + rect(l13 (-4521 -131) (9040 260)) + ) + + # Subcircuits and their connections + circuit(1 SP6TArray_2X2 location(0 0) + pin(0 1) + pin(1 2) + pin(2 3) + pin(3 4) + pin(4 9) + pin(5 10) + pin(6 11) + pin(7 12) + ) + circuit(2 SP6TArray_2X2 location(4360 0) + pin(0 5) + pin(1 6) + pin(2 7) + pin(3 8) + pin(4 9) + pin(5 10) + pin(6 11) + pin(7 12) + ) + + ) +) + +# Reference netlist +reference( + + # Device class section + class(SKY130_FD_PR__PFET_01V8__MODEL MOS4) + class(SKY130_FD_PR__NFET_01V8__MODEL MOS4) + + # Circuit section + # Circuits are the hierarchical building blocks of the netlist. + circuit(SP6TCELL + + # Nets + net(1 name(VDD)) + net(2 name(VSS)) + net(3 name(WL)) + net(4 name(BL)) + net(5 name(BL_N)) + net(6 name(BIT_N)) + net(7 name(BIT)) + + # Outgoing pins and their connections to nets + pin(1 name(VDD)) + pin(2 name(VSS)) + pin(3 name(WL)) + pin(4 name(BL)) + pin(5 name(BL_N)) + + # Devices and their connections + device(1 SKY130_FD_PR__PFET_01V8__MODEL + name(PU1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 1) + terminal(G 6) + terminal(D 7) + terminal(B 1) + ) + device(2 SKY130_FD_PR__PFET_01V8__MODEL + name(PU2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 6) + terminal(G 7) + terminal(D 1) + terminal(B 1) + ) + device(3 SKY130_FD_PR__NFET_01V8__MODEL + name(PD1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 2) + terminal(G 6) + terminal(D 7) + terminal(B 2) + ) + device(4 SKY130_FD_PR__NFET_01V8__MODEL + name(PD2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 6) + terminal(G 7) + terminal(D 2) + terminal(B 2) + ) + device(5 SKY130_FD_PR__NFET_01V8__MODEL + name(PG1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 4) + terminal(G 3) + terminal(D 7) + terminal(B 2) + ) + device(6 SKY130_FD_PR__NFET_01V8__MODEL + name(PG2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 5) + terminal(G 3) + terminal(D 6) + terminal(B 2) + ) + + ) + circuit(SP6TARRAY_2X1 + + # Nets + net(1 name(VSS)) + net(2 name(VDD)) + net(3 name('WL[0]')) + net(4 name('WL[1]')) + net(5 name('BL[0]')) + net(6 name('BL_N[0]')) + + # Outgoing pins and their connections to nets + pin(1 name(VSS)) + pin(2 name(VDD)) + pin(3 name('WL[0]')) + pin(4 name('WL[1]')) + pin(5 name('BL[0]')) + pin(6 name('BL_N[0]')) + + # Subcircuits and their connections + circuit(1 SP6TCELL name(INST0X0) + pin(0 2) + pin(1 1) + pin(2 3) + pin(3 5) + pin(4 6) + ) + circuit(2 SP6TCELL name(INST1X0) + pin(0 2) + pin(1 1) + pin(2 4) + pin(3 5) + pin(4 6) + ) + + ) + circuit(SP6TARRAY_2X2 + + # Nets + net(1 name(VSS)) + net(2 name(VDD)) + net(3 name('WL[0]')) + net(4 name('WL[1]')) + net(5 name('BL[0]')) + net(6 name('BL_N[0]')) + net(7 name('BL[1]')) + net(8 name('BL_N[1]')) + + # Outgoing pins and their connections to nets + pin(1 name(VSS)) + pin(2 name(VDD)) + pin(3 name('WL[0]')) + pin(4 name('WL[1]')) + pin(5 name('BL[0]')) + pin(6 name('BL_N[0]')) + pin(7 name('BL[1]')) + pin(8 name('BL_N[1]')) + + # Subcircuits and their connections + circuit(1 SP6TARRAY_2X1 name(INST0X0) + pin(0 1) + pin(1 2) + pin(2 3) + pin(3 4) + pin(4 5) + pin(5 6) + ) + circuit(2 SP6TARRAY_2X1 name(INST0X1) + pin(0 1) + pin(1 2) + pin(2 3) + pin(3 4) + pin(4 7) + pin(5 8) + ) + + ) + circuit(SP6TARRAY_2X4 + + # Nets + net(1 name(VSS)) + net(2 name(VDD)) + net(3 name('WL[0]')) + net(4 name('WL[1]')) + net(5 name('BL[0]')) + net(6 name('BL_N[0]')) + net(7 name('BL[1]')) + net(8 name('BL_N[1]')) + net(9 name('BL[2]')) + net(10 name('BL_N[2]')) + net(11 name('BL[3]')) + net(12 name('BL_N[3]')) + + # Outgoing pins and their connections to nets + pin(1 name(VSS)) + pin(2 name(VDD)) + pin(3 name('WL[0]')) + pin(4 name('WL[1]')) + pin(5 name('BL[0]')) + pin(6 name('BL_N[0]')) + pin(7 name('BL[1]')) + pin(8 name('BL_N[1]')) + pin(9 name('BL[2]')) + pin(10 name('BL_N[2]')) + pin(11 name('BL[3]')) + pin(12 name('BL_N[3]')) + + # Subcircuits and their connections + circuit(1 SP6TARRAY_2X2 name(INST0X0) + pin(0 1) + pin(1 2) + pin(2 3) + pin(3 4) + pin(4 5) + pin(5 6) + pin(6 7) + pin(7 8) + ) + circuit(2 SP6TARRAY_2X2 name(INST0X1) + pin(0 1) + pin(1 2) + pin(2 3) + pin(3 4) + pin(4 9) + pin(5 10) + pin(6 11) + pin(7 12) + ) + + ) +) + +# Cross reference +xref( + circuit(SP6TArray_2X1 SP6TARRAY_2X1 match + xref( + net(1 5 match) + net(2 6 match) + net(3 2 match) + net(6 1 match) + net(4 3 warning) + net(5 4 warning) + pin(0 4 match) + pin(1 5 match) + pin(2 1 match) + pin(5 0 match) + pin(3 2 match) + pin(4 3 match) + circuit(2 1 match) + circuit(1 2 match) + ) + ) + circuit(SP6TArray_2X2 SP6TARRAY_2X2 match + xref( + net(1 5 match) + net(3 7 match) + net(2 6 warning) + net(4 8 warning) + net(5 2 match) + net(8 1 match) + net(6 3 match) + net(7 4 match) + pin(0 4 match) + pin(2 6 match) + pin(1 5 match) + pin(3 7 match) + pin(4 1 match) + pin(7 0 match) + pin(5 2 match) + pin(6 3 match) + circuit(1 1 match) + circuit(2 2 match) + ) + ) + circuit(SP6TArray_2X4 SP6TARRAY_2X4 match + xref( + net(1 5 match) + net(3 7 warning) + net(5 9 match) + net(7 11 warning) + net(2 6 match) + net(4 8 match) + net(6 10 match) + net(8 12 match) + net(9 2 match) + net(12 1 match) + net(10 3 match) + net(11 4 match) + pin(() 4 match) + pin(() 6 match) + pin(() 8 match) + pin(() 10 match) + pin(() 5 match) + pin(() 7 match) + pin(() 9 match) + pin(() 11 match) + pin(() 1 match) + pin(() 0 match) + pin(() 2 match) + pin(() 3 match) + circuit(1 1 match) + circuit(2 2 match) + ) + ) + circuit(SP6TCell SP6TCELL match + xref( + net(3 7 warning) + net(4 6 warning) + net(7 4 match) + net(8 5 match) + net(5 1 match) + net(10 2 match) + net(6 3 match) + pin(2 3 match) + pin(3 4 match) + pin(0 0 match) + pin(4 1 match) + pin(1 2 match) + device(4 3 match) + device(2 4 match) + device(3 5 match) + device(1 6 match) + device(6 1 match) + device(5 2 match) + ) + ) +) diff --git a/testdata/lvs/test_22c.lvsdb.2 b/testdata/lvs/test_22c.lvsdb.2 new file mode 100644 index 000000000..f8e22a35e --- /dev/null +++ b/testdata/lvs/test_22c.lvsdb.2 @@ -0,0 +1,952 @@ +#%lvsdb-klayout + +# Layout +layout( + top(SP6TArray_2X4) + unit(0.001) + + # Layer section + # This section lists the mask layers (drawing or derived) and their connections. + + # Mask layers + layer(l5 '64/20') + layer(l3) + layer(l8) + layer(l7 '66/20') + layer(l10) + layer(l9 '67/20') + layer(l12 '68/16') + layer(l11 '68/20') + layer(l14 '69/16') + layer(l13 '69/20') + layer(l16) + layer(l15) + layer(l18) + layer(l17) + layer(l20) + layer(l19) + layer(l21 '66/44') + layer(l23 '67/44') + layer(l24 '68/44') + layer(l25) + layer(l26) + layer(l27) + layer(l1) + layer(l2) + layer(l4) + layer(l6) + layer(l22) + + # Mask layer connectivity + connect(l5 l5 l4) + connect(l3 l3 l2) + connect(l8 l8 l7) + connect(l7 l8 l7) + connect(l10 l10 l9) + connect(l9 l10 l9 l21 l23) + connect(l12 l12 l11) + connect(l11 l12 l11 l23 l24) + connect(l14 l14 l13) + connect(l13 l14 l13 l24 l25) + connect(l16 l16 l15) + connect(l15 l16 l15 l25 l26) + connect(l18 l18 l17) + connect(l17 l18 l17 l26 l27) + connect(l20 l20 l19) + connect(l19 l20 l19 l27) + connect(l21 l9 l21 l2 l22) + connect(l23 l9 l11 l23) + connect(l24 l11 l13 l24) + connect(l25 l13 l15 l25) + connect(l26 l15 l17 l26) + connect(l27 l17 l19 l27) + connect(l1 l1) + connect(l2 l3 l21 l2 l4 l6) + connect(l4 l5 l2 l4) + connect(l6 l2 l6) + connect(l22 l21 l22) + + # Global nets and connectivity + global(l1 vss) + global(l6 vss) + + # Device class section + class(active_res RES) + class(poly_res RES) + class(sky130_fd_pr__diode_pw2nd_05v5 DIODE) + class(sky130_fd_pr__diode_pd2nw_05v5 DIODE) + class(sky130_fd_pr__nfet_01v8__model MOS4) + class(sky130_fd_pr__nfet_01v8_lvt__model MOS4) + class(sky130_fd_pr__nfet_g5v0d10v5__model MOS4) + class(sky130_fd_pr__pfet_01v8__model MOS4) + class(sky130_fd_pr__pfet_01v8_hvt__model MOS4) + class(sky130_fd_pr__pfet_01v8_lvt__model MOS4) + class(sky130_fd_pr__pfet_g5v0d10v5__model MOS4) + + # Device abstracts section + # Device abstracts list the pin shapes of the devices. + device(D$sky130_fd_pr__nfet_01v8__model sky130_fd_pr__nfet_01v8__model + terminal(S + rect(l2 (-210 -340) (420 265)) + ) + terminal(G + rect(l22 (-210 -75) (420 150)) + ) + terminal(D + polygon(l2 (-210 75) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) + ) + terminal(B + rect(l1 (-210 -75) (420 150)) + ) + ) + device(D$sky130_fd_pr__nfet_01v8__model$1 sky130_fd_pr__nfet_01v8__model + terminal(S + polygon(l2 (-600 -550) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (75 -210) (265 420)) + ) + terminal(B + rect(l1 (-75 -210) (150 420)) + ) + ) + device(D$sky130_fd_pr__nfet_01v8__model$2 sky130_fd_pr__nfet_01v8__model + terminal(S + rect(l2 (-210 -340) (420 265)) + ) + terminal(G + rect(l22 (-210 -75) (420 150)) + ) + terminal(D + polygon(l2 (-210 75) (0 340) (-105 0) (0 420) (525 0) (0 -760)) + ) + terminal(B + rect(l1 (-210 -75) (420 150)) + ) + ) + device(D$sky130_fd_pr__nfet_01v8__model$3 sky130_fd_pr__nfet_01v8__model + terminal(S + polygon(l2 (180 -550) (0 340) (-105 0) (0 420) (525 0) (0 -760)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (-340 -210) (265 420)) + ) + terminal(B + rect(l1 (-75 -210) (150 420)) + ) + ) + device(D$sky130_fd_pr__pfet_01v8__model sky130_fd_pr__pfet_01v8__model + terminal(S + rect(l2 (-520 -210) (445 420)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (75 -210) (265 420)) + ) + terminal(B + rect(l5 (-75 -210) (150 420)) + ) + ) + device(D$sky130_fd_pr__pfet_01v8__model$1 sky130_fd_pr__pfet_01v8__model + terminal(S + rect(l2 (-340 -210) (265 420)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (75 -210) (445 420)) + ) + terminal(B + rect(l5 (-75 -210) (150 420)) + ) + ) + + # Circuit section + # Circuits are the hierarchical building blocks of the netlist. + circuit(SP6TCell + + # Circuit boundary + rect((-385 -485) (2950 3565)) + + # Nets with their geometries + net(1 + rect(l7 (1890 500) (150 2010)) + rect(l7 (-1100 -1320) (950 150)) + rect(l7 (-1280 -150) (330 270)) + ) + net(2 + rect(l7 (1240 1550) (330 270)) + rect(l7 (-1280 -150) (950 150)) + rect(l7 (-1100 -1320) (150 2010)) + ) + net(3 + polygon(l9 (525 760) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480)) + rect(l21 (-170 80) (170 170)) + rect(l21 (-170 1070) (170 170)) + rect(l21 (-5 -1010) (170 170)) + polygon(l2 (-465 -1120) (0 340) (-105 0) (0 420) (525 0) (0 -760)) + rect(l2 (-525 1670) (445 420)) + rect(l22 (-125 -1190) (330 270)) + rect(l22 (950 -960) (150 2010)) + rect(l22 (-1100 -1320) (950 150)) + ) + net(4 + polygon(l9 (1485 760) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570)) + rect(l21 (-170 80) (170 170)) + rect(l21 (-170 1070) (170 170)) + rect(l21 (-335 -650) (170 170)) + polygon(l2 (-125 -1480) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) + rect(l2 (-340 1670) (445 420)) + rect(l22 (-650 -830) (330 270)) + rect(l22 (-1280 -150) (950 150)) + rect(l22 (-1100 -1320) (150 2010)) + ) + net(5 name(vdd) + rect(l5 (-385 1780) (2950 1300)) + rect(l9 (-2650 -1075) (170 685)) + rect(l9 (-250 0) (2510 170)) + rect(l9 (-250 -855) (170 685)) + rect(l11 (-2395 -75) (260 320)) + rect(l11 (1920 -320) (260 320)) + rect(l14 (-2470 -290) (2500 260)) + rect(l14 (-1251 -131) (2 2)) + rect(l13 (-1251 -131) (2500 260)) + rect(l21 (-2425 -215) (170 170)) + rect(l21 (-170 -775) (170 170)) + rect(l21 (2010 435) (170 170)) + rect(l21 (-170 -775) (170 170)) + rect(l23 (-2350 435) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l24 (-2340 -160) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l2 (-2460 -200) (2590 250)) + rect(l2 (-2510 -940) (265 420)) + rect(l2 (1900 -420) (265 420)) + rect(l4 (-2510 270) (2590 250)) + ) + net(6 name(wl) + rect(l9 (1005 140) (170 500)) + polygon(l11 (-200 -230) (0 290) (-15 0) (0 320) (260 0) (0 -320) (-15 0) (0 -290)) + rect(l14 (-1205 320) (2180 260)) + rect(l14 (-1091 -131) (2 2)) + rect(l13 (-1091 -131) (2180 260)) + rect(l21 (-1175 -770) (170 170)) + rect(l23 (-170 80) (170 170)) + rect(l24 (-160 145) (150 150)) + polygon(l22 (-900 -795) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) + ) + net(7 name(bl) + polygon(l9 (520 -165) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330)) + rect(l12 (-260 20) (230 2920)) + rect(l12 (-116 -1461) (2 2)) + rect(l11 (-116 -1461) (230 2920)) + rect(l21 (-140 -2860) (170 170)) + rect(l23 (-230 -170) (170 170)) + rect(l2 (-235 -210) (420 265)) + ) + net(8 name(bl_n) + polygon(l9 (1490 -165) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80)) + rect(l12 (-140 20) (230 2920)) + rect(l12 (-116 -1461) (2 2)) + rect(l11 (-116 -1461) (230 2920)) + rect(l21 (-260 -2860) (170 170)) + rect(l23 (-110 -170) (170 170)) + rect(l2 (-355 -210) (420 265)) + ) + net(9 + polygon(l7 (265 140) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) + ) + net(10 name(vss) + rect(l9 (-85 -165) (170 1170)) + rect(l9 (2010 -1170) (170 1170)) + rect(l11 (-2395 -1165) (260 320)) + rect(l11 (1920 -320) (260 320)) + rect(l14 (-2470 -290) (2500 260)) + rect(l14 (-1251 -131) (2 2)) + rect(l13 (-1251 -131) (2500 260)) + rect(l21 (-2425 -215) (170 170)) + rect(l21 (-170 670) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (-170 -1010) (170 170)) + rect(l23 (-2350 -170) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l24 (-2340 -160) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l2 (-215 555) (265 420)) + rect(l2 (-2430 -1410) (250 720)) + rect(l2 (-250 270) (265 420)) + rect(l2 (1915 -1410) (250 720)) + rect(l6 (-250 -720) (250 720)) + rect(l6 (-2430 -720) (250 720)) + ) + + # Outgoing pins and their connections to nets + pin(5 name(vdd)) + pin(6 name(wl)) + pin(7 name(bl)) + pin(8 name(bl_n)) + pin(10 name(vss)) + + # Devices and their connections + device(1 D$sky130_fd_pr__nfet_01v8__model + location(1575 215) + param(L 0.15) + param(W 0.42) + param(AS 0.1113) + param(AD 0.18165) + param(PS 1.37) + param(PD 1.285) + terminal(S 8) + terminal(G 6) + terminal(D 4) + terminal(B 10) + ) + device(2 D$sky130_fd_pr__nfet_01v8__model$1 + location(1965 840) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.1113) + param(PS 1.285) + param(PD 1.37) + terminal(S 4) + terminal(G 3) + terminal(D 10) + terminal(B 10) + ) + device(3 D$sky130_fd_pr__nfet_01v8__model$2 + location(605 215) + param(L 0.15) + param(W 0.42) + param(AS 0.1113) + param(AD 0.18165) + param(PS 1.37) + param(PD 1.285) + terminal(S 7) + terminal(G 6) + terminal(D 3) + terminal(B 10) + ) + device(4 D$sky130_fd_pr__nfet_01v8__model$3 + location(215 840) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.1113) + param(PS 1.285) + param(PD 1.37) + terminal(S 3) + terminal(G 4) + terminal(D 10) + terminal(B 10) + ) + device(5 D$sky130_fd_pr__pfet_01v8__model + location(1965 2170) + param(L 0.15) + param(W 0.42) + param(AS 0.1869) + param(AD 0.1113) + param(PS 1.73) + param(PD 1.37) + terminal(S 4) + terminal(G 3) + terminal(D 5) + terminal(B 5) + ) + device(6 D$sky130_fd_pr__pfet_01v8__model$1 + location(215 2170) + param(L 0.15) + param(W 0.42) + param(AS 0.1113) + param(AD 0.1869) + param(PS 1.37) + param(PD 1.73) + terminal(S 5) + terminal(G 4) + terminal(D 3) + terminal(B 5) + ) + + ) + circuit(SP6TArray_2X1 + + # Circuit boundary + rect((-385 -305) (2950 6160)) + + # Nets with their geometries + net(1 name('bl[0]') + rect(l12 (430 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(2 name('bl_n[0]') + rect(l12 (1520 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(3 name(vdd) + rect(l14 (-160 -130) (2500 260)) + rect(l14 (-1251 -131) (2 2)) + rect(l14 (-1251 5419) (2500 260)) + rect(l14 (-1251 -131) (2 2)) + rect(l13 (-1251 -5681) (2500 260)) + rect(l13 (-2500 5290) (2500 260)) + ) + net(4 name('wl[0]') + rect(l14 (0 1785) (2180 260)) + rect(l14 (-1091 -131) (2 2)) + rect(l13 (-1091 -131) (2180 260)) + ) + net(5 name('wl[1]') + rect(l14 (0 3505) (2180 260)) + rect(l14 (-1091 -131) (2 2)) + rect(l13 (-1091 -131) (2180 260)) + ) + net(6 name(vss) + rect(l14 (-160 2645) (2500 260)) + rect(l14 (-1251 -131) (2 2)) + rect(l13 (-1251 -131) (2500 260)) + ) + + # Outgoing pins and their connections to nets + pin(1 name('bl[0]')) + pin(2 name('bl_n[0]')) + pin(3 name(vdd)) + pin(4 name('wl[0]')) + pin(5 name('wl[1]')) + pin(6 name(vss)) + + # Subcircuits and their connections + circuit(1 SP6TCell location(0 2775) + pin(0 3) + pin(1 5) + pin(2 1) + pin(3 2) + pin(4 6) + ) + circuit(2 SP6TCell mirror location(0 2775) + pin(0 3) + pin(1 4) + pin(2 1) + pin(3 2) + pin(4 6) + ) + + ) + circuit(SP6TArray_2X2 + + # Circuit boundary + rect((-385 -305) (5130 6160)) + + # Nets with their geometries + net(1 name('bl[0]') + rect(l12 (430 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(2 name('bl_n[0]') + rect(l12 (1520 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(3 name('bl[1]') + rect(l12 (2610 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(4 name('bl_n[1]') + rect(l12 (3700 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(5 name(vdd) + rect(l14 (-160 5420) (4680 260)) + rect(l14 (-2341 -131) (2 2)) + rect(l14 (-2341 -5681) (4680 260)) + rect(l14 (-2341 -131) (2 2)) + rect(l13 (-2341 5419) (4680 260)) + rect(l13 (-4680 -5810) (4680 260)) + ) + net(6 name('wl[0]') + rect(l14 (0 1785) (4360 260)) + rect(l14 (-2181 -131) (2 2)) + rect(l13 (-2181 -131) (4360 260)) + ) + net(7 name('wl[1]') + rect(l14 (0 3505) (4360 260)) + rect(l14 (-2181 -131) (2 2)) + rect(l13 (-2181 -131) (4360 260)) + ) + net(8 name(vss) + rect(l14 (-160 2645) (4680 260)) + rect(l14 (-2341 -131) (2 2)) + rect(l13 (-2341 -131) (4680 260)) + ) + + # Outgoing pins and their connections to nets + pin(1 name('bl[0]')) + pin(2 name('bl_n[0]')) + pin(3 name('bl[1]')) + pin(4 name('bl_n[1]')) + pin(5 name(vdd)) + pin(6 name('wl[0]')) + pin(7 name('wl[1]')) + pin(8 name(vss)) + + # Subcircuits and their connections + circuit(1 SP6TArray_2X1 location(0 0) + pin(0 1) + pin(1 2) + pin(2 5) + pin(3 6) + pin(4 7) + pin(5 8) + ) + circuit(2 SP6TArray_2X1 location(2180 0) + pin(0 3) + pin(1 4) + pin(2 5) + pin(3 6) + pin(4 7) + pin(5 8) + ) + + ) + circuit(SP6TArray_2X4 + + # Circuit boundary + rect((-385 -305) (9490 6160)) + + # Nets with their geometries + net(1 name('bl[0]') + rect(l12 (430 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(2 name('bl_n[0]') + rect(l12 (1520 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(3 name('bl[1]') + rect(l12 (2610 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(4 name('bl_n[1]') + rect(l12 (3700 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(5 name('bl[2]') + rect(l12 (4790 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(6 name('bl_n[2]') + rect(l12 (5880 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(7 name('bl[3]') + rect(l12 (6970 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(8 name('bl_n[3]') + rect(l12 (8060 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(9 name(vdd) + rect(l14 (-160 -130) (9040 260)) + rect(l14 (-4521 -131) (2 2)) + rect(l14 (-4521 5419) (9040 260)) + rect(l14 (-4521 -131) (2 2)) + rect(l13 (-4521 -5681) (9040 260)) + rect(l13 (-9040 5290) (9040 260)) + ) + net(10 name('wl[0]') + rect(l14 (0 1785) (8720 260)) + rect(l14 (-4361 -131) (2 2)) + rect(l13 (-4361 -131) (8720 260)) + ) + net(11 name('wl[1]') + rect(l14 (0 3505) (8720 260)) + rect(l14 (-4361 -131) (2 2)) + rect(l13 (-4361 -131) (8720 260)) + ) + net(12 name(vss) + rect(l14 (-160 2645) (9040 260)) + rect(l14 (-4521 -131) (2 2)) + rect(l13 (-4521 -131) (9040 260)) + ) + + # Subcircuits and their connections + circuit(1 SP6TArray_2X2 location(0 0) + pin(0 1) + pin(1 2) + pin(2 3) + pin(3 4) + pin(4 9) + pin(5 10) + pin(6 11) + pin(7 12) + ) + circuit(2 SP6TArray_2X2 location(4360 0) + pin(0 5) + pin(1 6) + pin(2 7) + pin(3 8) + pin(4 9) + pin(5 10) + pin(6 11) + pin(7 12) + ) + + ) +) + +# Reference netlist +reference( + + # Device class section + class(SKY130_FD_PR__PFET_01V8__MODEL MOS4) + class(SKY130_FD_PR__NFET_01V8__MODEL MOS4) + + # Circuit section + # Circuits are the hierarchical building blocks of the netlist. + circuit(SP6TCELL + + # Nets + net(1 name(VDD)) + net(2 name(VSS)) + net(3 name(WL)) + net(4 name(BL)) + net(5 name(BL_N)) + net(6 name(BIT_N)) + net(7 name(BIT)) + + # Outgoing pins and their connections to nets + pin(1 name(VDD)) + pin(2 name(VSS)) + pin(3 name(WL)) + pin(4 name(BL)) + pin(5 name(BL_N)) + + # Devices and their connections + device(1 SKY130_FD_PR__PFET_01V8__MODEL + name(PU1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 1) + terminal(G 6) + terminal(D 7) + terminal(B 1) + ) + device(2 SKY130_FD_PR__PFET_01V8__MODEL + name(PU2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 6) + terminal(G 7) + terminal(D 1) + terminal(B 1) + ) + device(3 SKY130_FD_PR__NFET_01V8__MODEL + name(PD1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 2) + terminal(G 6) + terminal(D 7) + terminal(B 2) + ) + device(4 SKY130_FD_PR__NFET_01V8__MODEL + name(PD2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 6) + terminal(G 7) + terminal(D 2) + terminal(B 2) + ) + device(5 SKY130_FD_PR__NFET_01V8__MODEL + name(PG1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 4) + terminal(G 3) + terminal(D 7) + terminal(B 2) + ) + device(6 SKY130_FD_PR__NFET_01V8__MODEL + name(PG2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 5) + terminal(G 3) + terminal(D 6) + terminal(B 2) + ) + + ) + circuit(SP6TARRAY_2X1 + + # Nets + net(1 name(VSS)) + net(2 name(VDD)) + net(3 name('WL[0]')) + net(4 name('WL[1]')) + net(5 name('BL[0]')) + net(6 name('BL_N[0]')) + + # Outgoing pins and their connections to nets + pin(1 name(VSS)) + pin(2 name(VDD)) + pin(3 name('WL[0]')) + pin(4 name('WL[1]')) + pin(5 name('BL[0]')) + pin(6 name('BL_N[0]')) + + # Subcircuits and their connections + circuit(1 SP6TCELL name(INST0X0) + pin(0 2) + pin(1 1) + pin(2 3) + pin(3 5) + pin(4 6) + ) + circuit(2 SP6TCELL name(INST1X0) + pin(0 2) + pin(1 1) + pin(2 4) + pin(3 5) + pin(4 6) + ) + + ) + circuit(SP6TARRAY_2X2 + + # Nets + net(1 name(VSS)) + net(2 name(VDD)) + net(3 name('WL[0]')) + net(4 name('WL[1]')) + net(5 name('BL[0]')) + net(6 name('BL_N[0]')) + net(7 name('BL[1]')) + net(8 name('BL_N[1]')) + + # Outgoing pins and their connections to nets + pin(1 name(VSS)) + pin(2 name(VDD)) + pin(3 name('WL[0]')) + pin(4 name('WL[1]')) + pin(5 name('BL[0]')) + pin(6 name('BL_N[0]')) + pin(7 name('BL[1]')) + pin(8 name('BL_N[1]')) + + # Subcircuits and their connections + circuit(1 SP6TARRAY_2X1 name(INST0X0) + pin(0 1) + pin(1 2) + pin(2 3) + pin(3 4) + pin(4 5) + pin(5 6) + ) + circuit(2 SP6TARRAY_2X1 name(INST0X1) + pin(0 1) + pin(1 2) + pin(2 3) + pin(3 4) + pin(4 7) + pin(5 8) + ) + + ) + circuit(SP6TARRAY_2X4 + + # Nets + net(1 name(VSS)) + net(2 name(VDD)) + net(3 name('WL[0]')) + net(4 name('WL[1]')) + net(5 name('BL[0]')) + net(6 name('BL_N[0]')) + net(7 name('BL[1]')) + net(8 name('BL_N[1]')) + net(9 name('BL[2]')) + net(10 name('BL_N[2]')) + net(11 name('BL[3]')) + net(12 name('BL_N[3]')) + + # Outgoing pins and their connections to nets + pin(1 name(VSS)) + pin(2 name(VDD)) + pin(3 name('WL[0]')) + pin(4 name('WL[1]')) + pin(5 name('BL[0]')) + pin(6 name('BL_N[0]')) + pin(7 name('BL[1]')) + pin(8 name('BL_N[1]')) + pin(9 name('BL[2]')) + pin(10 name('BL_N[2]')) + pin(11 name('BL[3]')) + pin(12 name('BL_N[3]')) + + # Subcircuits and their connections + circuit(1 SP6TARRAY_2X2 name(INST0X0) + pin(0 1) + pin(1 2) + pin(2 3) + pin(3 4) + pin(4 5) + pin(5 6) + pin(6 7) + pin(7 8) + ) + circuit(2 SP6TARRAY_2X2 name(INST0X1) + pin(0 1) + pin(1 2) + pin(2 3) + pin(3 4) + pin(4 9) + pin(5 10) + pin(6 11) + pin(7 12) + ) + + ) +) + +# Cross reference +xref( + circuit(SP6TArray_2X1 SP6TARRAY_2X1 match + xref( + net(1 5 match) + net(2 6 match) + net(3 2 match) + net(6 1 match) + net(4 3 warning) + net(5 4 warning) + pin(0 4 match) + pin(1 5 match) + pin(2 1 match) + pin(5 0 match) + pin(3 2 match) + pin(4 3 match) + circuit(2 1 match) + circuit(1 2 match) + ) + ) + circuit(SP6TArray_2X2 SP6TARRAY_2X2 match + xref( + net(1 5 match) + net(3 7 match) + net(2 6 warning) + net(4 8 warning) + net(5 2 match) + net(8 1 match) + net(6 3 match) + net(7 4 match) + pin(0 4 match) + pin(2 6 match) + pin(1 5 match) + pin(3 7 match) + pin(4 1 match) + pin(7 0 match) + pin(5 2 match) + pin(6 3 match) + circuit(1 1 match) + circuit(2 2 match) + ) + ) + circuit(SP6TArray_2X4 SP6TARRAY_2X4 match + xref( + net(1 5 match) + net(3 7 warning) + net(5 9 match) + net(7 11 warning) + net(2 6 match) + net(4 8 match) + net(6 10 match) + net(8 12 match) + net(9 2 match) + net(12 1 match) + net(10 3 match) + net(11 4 match) + pin(() 4 match) + pin(() 6 match) + pin(() 8 match) + pin(() 10 match) + pin(() 5 match) + pin(() 7 match) + pin(() 9 match) + pin(() 11 match) + pin(() 1 match) + pin(() 0 match) + pin(() 2 match) + pin(() 3 match) + circuit(1 1 match) + circuit(2 2 match) + ) + ) + circuit(SP6TCell SP6TCELL match + xref( + net(3 7 warning) + net(4 6 warning) + net(7 4 match) + net(8 5 match) + net(5 1 match) + net(10 2 match) + net(6 3 match) + pin(2 3 match) + pin(3 4 match) + pin(0 0 match) + pin(4 1 match) + pin(1 2 match) + device(4 3 match) + device(2 4 match) + device(3 5 match) + device(1 6 match) + device(6 1 match) + device(5 2 match) + ) + ) +) diff --git a/testdata/lvs/test_22d.cir b/testdata/lvs/test_22d.cir new file mode 100644 index 000000000..f8308ad6d --- /dev/null +++ b/testdata/lvs/test_22d.cir @@ -0,0 +1,97 @@ +* Extracted by KLayout + +* cell SP6TArray_2X4 +.SUBCKT SP6TArray_2X4 +* net 1 bl[0] +* net 2 bl_n[0] +* net 3 bl[1] +* net 4 bl_n[1] +* net 5 bl[2] +* net 6 bl_n[2] +* net 7 bl[3] +* net 8 bl_n[3] +* net 9 vdd +* net 10 wl[0] +* net 11 wl[1] +* net 12 vss +* cell instance $1 r0 *1 0,0 +X$1 1 2 3 4 9 10 11 12 SP6TArray_2X2 +* cell instance $2 r0 *1 4.36,0 +X$2 5 6 7 8 9 10 11 12 SP6TArray_2X2 +.ENDS SP6TArray_2X4 + +* cell SP6TArray_2X2 +* pin bl[0] +* pin bl_n[0] +* pin bl[1] +* pin bl_n[1] +* pin vdd +* pin wl[0] +* pin wl[1] +* pin vss +.SUBCKT SP6TArray_2X2 1 2 3 4 5 6 7 8 +* net 1 bl[0] +* net 2 bl_n[0] +* net 3 bl[1] +* net 4 bl_n[1] +* net 5 vdd +* net 6 wl[0] +* net 7 wl[1] +* net 8 vss +* cell instance $1 r0 *1 0,0 +X$1 1 2 5 6 7 8 SP6TArray_2X1 +* cell instance $2 r0 *1 2.18,0 +X$2 3 4 5 6 7 8 SP6TArray_2X1 +.ENDS SP6TArray_2X2 + +* cell SP6TArray_2X1 +* pin bl[0] +* pin bl_n[0] +* pin vdd +* pin wl[0] +* pin wl[1] +* pin vss +.SUBCKT SP6TArray_2X1 1 2 3 4 5 6 +* net 1 bl[0] +* net 2 bl_n[0] +* net 3 vdd +* net 4 wl[0] +* net 5 wl[1] +* net 6 vss +* cell instance $1 r0 *1 0,2.775 +X$1 3 5 1 2 6 SP6TCell +* cell instance $2 m0 *1 0,2.775 +X$2 3 4 1 2 6 SP6TCell +.ENDS SP6TArray_2X1 + +* cell SP6TCell +* pin vdd +* pin wl +* pin bl +* pin bl_n +* pin vss +.SUBCKT SP6TCell 5 6 7 8 10 +* net 5 vdd +* net 6 wl +* net 7 bl +* net 8 bl_n +* net 10 vss +* device instance $1 r0 *1 1.575,0.215 sky130_fd_pr__nfet_01v8__model +M$1 8 6 4 10 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.1113P ++ AD=0.18165P PS=1.37U PD=1.285U +* device instance $2 r0 *1 1.965,0.84 sky130_fd_pr__nfet_01v8__model +M$2 4 3 10 10 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.1113P PS=1.285U PD=1.37U +* device instance $3 r0 *1 0.605,0.215 sky130_fd_pr__nfet_01v8__model +M$3 7 6 3 10 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.1113P ++ AD=0.18165P PS=1.37U PD=1.285U +* device instance $4 r0 *1 0.215,0.84 sky130_fd_pr__nfet_01v8__model +M$4 3 4 10 10 sky130_fd_pr__nfet_01v8__model L=0.15U W=0.42U AS=0.18165P ++ AD=0.1113P PS=1.285U PD=1.37U +* device instance $5 r0 *1 1.965,2.17 sky130_fd_pr__pfet_01v8__model +M$5 4 3 5 5 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.1869P ++ AD=0.1113P PS=1.73U PD=1.37U +* device instance $6 r0 *1 0.215,2.17 sky130_fd_pr__pfet_01v8__model +M$6 5 4 3 5 sky130_fd_pr__pfet_01v8__model L=0.15U W=0.42U AS=0.1113P ++ AD=0.1869P PS=1.37U PD=1.73U +.ENDS SP6TCell diff --git a/testdata/lvs/test_22d.lvsdb.1 b/testdata/lvs/test_22d.lvsdb.1 new file mode 100644 index 000000000..ece1d8d09 --- /dev/null +++ b/testdata/lvs/test_22d.lvsdb.1 @@ -0,0 +1,952 @@ +#%lvsdb-klayout + +# Layout +layout( + top(SP6TArray_2X4) + unit(0.001) + + # Layer section + # This section lists the mask layers (drawing or derived) and their connections. + + # Mask layers + layer(l5 '64/20') + layer(l3) + layer(l8) + layer(l7 '66/20') + layer(l10) + layer(l9 '67/20') + layer(l12 '68/16') + layer(l11 '68/20') + layer(l14 '69/16') + layer(l13 '69/20') + layer(l16) + layer(l15) + layer(l18) + layer(l17) + layer(l20) + layer(l19) + layer(l21 '66/44') + layer(l23 '67/44') + layer(l24 '68/44') + layer(l25) + layer(l26) + layer(l27) + layer(l1) + layer(l2) + layer(l4) + layer(l6) + layer(l22) + + # Mask layer connectivity + connect(l5 l5 l4) + connect(l3 l3 l2) + connect(l8 l8 l7) + connect(l7 l8 l7) + connect(l10 l10 l9) + connect(l9 l10 l9 l21 l23) + connect(l12 l12 l11) + connect(l11 l12 l11 l23 l24) + connect(l14 l14 l13) + connect(l13 l14 l13 l24 l25) + connect(l16 l16 l15) + connect(l15 l16 l15 l25 l26) + connect(l18 l18 l17) + connect(l17 l18 l17 l26 l27) + connect(l20 l20 l19) + connect(l19 l20 l19 l27) + connect(l21 l9 l21 l2 l22) + connect(l23 l9 l11 l23) + connect(l24 l11 l13 l24) + connect(l25 l13 l15 l25) + connect(l26 l15 l17 l26) + connect(l27 l17 l19 l27) + connect(l1 l1) + connect(l2 l3 l21 l2 l4 l6) + connect(l4 l5 l2 l4) + connect(l6 l2 l6) + connect(l22 l21 l22) + + # Global nets and connectivity + global(l1 vss) + global(l6 vss) + + # Device class section + class(active_res RES) + class(poly_res RES) + class(sky130_fd_pr__diode_pw2nd_05v5 DIODE) + class(sky130_fd_pr__diode_pd2nw_05v5 DIODE) + class(sky130_fd_pr__nfet_01v8__model MOS4) + class(sky130_fd_pr__nfet_01v8_lvt__model MOS4) + class(sky130_fd_pr__nfet_g5v0d10v5__model MOS4) + class(sky130_fd_pr__pfet_01v8__model MOS4) + class(sky130_fd_pr__pfet_01v8_hvt__model MOS4) + class(sky130_fd_pr__pfet_01v8_lvt__model MOS4) + class(sky130_fd_pr__pfet_g5v0d10v5__model MOS4) + + # Device abstracts section + # Device abstracts list the pin shapes of the devices. + device(D$sky130_fd_pr__nfet_01v8__model sky130_fd_pr__nfet_01v8__model + terminal(S + rect(l2 (-210 -340) (420 265)) + ) + terminal(G + rect(l22 (-210 -75) (420 150)) + ) + terminal(D + polygon(l2 (-210 75) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) + ) + terminal(B + rect(l1 (-210 -75) (420 150)) + ) + ) + device(D$sky130_fd_pr__nfet_01v8__model$1 sky130_fd_pr__nfet_01v8__model + terminal(S + polygon(l2 (-600 -550) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (75 -210) (265 420)) + ) + terminal(B + rect(l1 (-75 -210) (150 420)) + ) + ) + device(D$sky130_fd_pr__nfet_01v8__model$2 sky130_fd_pr__nfet_01v8__model + terminal(S + rect(l2 (-210 -340) (420 265)) + ) + terminal(G + rect(l22 (-210 -75) (420 150)) + ) + terminal(D + polygon(l2 (-210 75) (0 340) (-105 0) (0 420) (525 0) (0 -760)) + ) + terminal(B + rect(l1 (-210 -75) (420 150)) + ) + ) + device(D$sky130_fd_pr__nfet_01v8__model$3 sky130_fd_pr__nfet_01v8__model + terminal(S + polygon(l2 (180 -550) (0 340) (-105 0) (0 420) (525 0) (0 -760)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (-340 -210) (265 420)) + ) + terminal(B + rect(l1 (-75 -210) (150 420)) + ) + ) + device(D$sky130_fd_pr__pfet_01v8__model sky130_fd_pr__pfet_01v8__model + terminal(S + rect(l2 (-520 -210) (445 420)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (75 -210) (265 420)) + ) + terminal(B + rect(l5 (-75 -210) (150 420)) + ) + ) + device(D$sky130_fd_pr__pfet_01v8__model$1 sky130_fd_pr__pfet_01v8__model + terminal(S + rect(l2 (-340 -210) (265 420)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (75 -210) (445 420)) + ) + terminal(B + rect(l5 (-75 -210) (150 420)) + ) + ) + + # Circuit section + # Circuits are the hierarchical building blocks of the netlist. + circuit(SP6TCell + + # Circuit boundary + rect((-385 -485) (2950 3565)) + + # Nets with their geometries + net(1 + rect(l7 (1890 500) (150 2010)) + rect(l7 (-1100 -1320) (950 150)) + rect(l7 (-1280 -150) (330 270)) + ) + net(2 + rect(l7 (1240 1550) (330 270)) + rect(l7 (-1280 -150) (950 150)) + rect(l7 (-1100 -1320) (150 2010)) + ) + net(3 + polygon(l9 (525 760) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480)) + rect(l21 (-170 80) (170 170)) + rect(l21 (-170 1070) (170 170)) + rect(l21 (-5 -1010) (170 170)) + polygon(l2 (-465 -1120) (0 340) (-105 0) (0 420) (525 0) (0 -760)) + rect(l2 (-525 1670) (445 420)) + rect(l22 (-125 -1190) (330 270)) + rect(l22 (950 -960) (150 2010)) + rect(l22 (-1100 -1320) (950 150)) + ) + net(4 + polygon(l9 (1485 760) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570)) + rect(l21 (-170 80) (170 170)) + rect(l21 (-170 1070) (170 170)) + rect(l21 (-335 -650) (170 170)) + polygon(l2 (-125 -1480) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) + rect(l2 (-340 1670) (445 420)) + rect(l22 (-650 -830) (330 270)) + rect(l22 (-1280 -150) (950 150)) + rect(l22 (-1100 -1320) (150 2010)) + ) + net(5 name(vdd) + rect(l5 (-385 1780) (2950 1300)) + rect(l9 (-2650 -1075) (170 685)) + rect(l9 (-250 0) (2510 170)) + rect(l9 (-250 -855) (170 685)) + rect(l11 (-2395 -75) (260 320)) + rect(l11 (1920 -320) (260 320)) + rect(l14 (-2470 -290) (2500 260)) + rect(l14 (-1251 -131) (2 2)) + rect(l13 (-1251 -131) (2500 260)) + rect(l21 (-2425 -215) (170 170)) + rect(l21 (-170 -775) (170 170)) + rect(l21 (2010 435) (170 170)) + rect(l21 (-170 -775) (170 170)) + rect(l23 (-2350 435) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l24 (-2340 -160) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l2 (-2460 -200) (2590 250)) + rect(l2 (-2510 -940) (265 420)) + rect(l2 (1900 -420) (265 420)) + rect(l4 (-2510 270) (2590 250)) + ) + net(6 name(wl) + rect(l9 (1005 140) (170 500)) + polygon(l11 (-200 -230) (0 290) (-15 0) (0 320) (260 0) (0 -320) (-15 0) (0 -290)) + rect(l14 (-1205 320) (2180 260)) + rect(l14 (-1091 -131) (2 2)) + rect(l13 (-1091 -131) (2180 260)) + rect(l21 (-1175 -770) (170 170)) + rect(l23 (-170 80) (170 170)) + rect(l24 (-160 145) (150 150)) + polygon(l22 (-900 -795) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) + ) + net(7 name(bl) + polygon(l9 (520 -165) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330)) + rect(l12 (-260 20) (230 2920)) + rect(l12 (-116 -1461) (2 2)) + rect(l11 (-116 -1461) (230 2920)) + rect(l21 (-140 -2860) (170 170)) + rect(l23 (-230 -170) (170 170)) + rect(l2 (-235 -210) (420 265)) + ) + net(8 name(bl_n) + polygon(l9 (1490 -165) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80)) + rect(l12 (-140 20) (230 2920)) + rect(l12 (-116 -1461) (2 2)) + rect(l11 (-116 -1461) (230 2920)) + rect(l21 (-260 -2860) (170 170)) + rect(l23 (-110 -170) (170 170)) + rect(l2 (-355 -210) (420 265)) + ) + net(9 + polygon(l7 (265 140) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) + ) + net(10 name(vss) + rect(l9 (-85 -165) (170 1170)) + rect(l9 (2010 -1170) (170 1170)) + rect(l11 (-2395 -1165) (260 320)) + rect(l11 (1920 -320) (260 320)) + rect(l14 (-2470 -290) (2500 260)) + rect(l14 (-1251 -131) (2 2)) + rect(l13 (-1251 -131) (2500 260)) + rect(l21 (-2425 -215) (170 170)) + rect(l21 (-170 670) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (-170 -1010) (170 170)) + rect(l23 (-2350 -170) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l24 (-2340 -160) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l2 (-215 555) (265 420)) + rect(l2 (-2430 -1410) (250 720)) + rect(l2 (-250 270) (265 420)) + rect(l2 (1915 -1410) (250 720)) + rect(l6 (-2430 -720) (250 720)) + rect(l6 (1930 -720) (250 720)) + ) + + # Outgoing pins and their connections to nets + pin(5 name(vdd)) + pin(6 name(wl)) + pin(7 name(bl)) + pin(8 name(bl_n)) + pin(10 name(vss)) + + # Devices and their connections + device(1 D$sky130_fd_pr__nfet_01v8__model + location(1575 215) + param(L 0.15) + param(W 0.42) + param(AS 0.1113) + param(AD 0.18165) + param(PS 1.37) + param(PD 1.285) + terminal(S 8) + terminal(G 6) + terminal(D 4) + terminal(B 10) + ) + device(2 D$sky130_fd_pr__nfet_01v8__model$1 + location(1965 840) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.1113) + param(PS 1.285) + param(PD 1.37) + terminal(S 4) + terminal(G 3) + terminal(D 10) + terminal(B 10) + ) + device(3 D$sky130_fd_pr__nfet_01v8__model$2 + location(605 215) + param(L 0.15) + param(W 0.42) + param(AS 0.1113) + param(AD 0.18165) + param(PS 1.37) + param(PD 1.285) + terminal(S 7) + terminal(G 6) + terminal(D 3) + terminal(B 10) + ) + device(4 D$sky130_fd_pr__nfet_01v8__model$3 + location(215 840) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.1113) + param(PS 1.285) + param(PD 1.37) + terminal(S 3) + terminal(G 4) + terminal(D 10) + terminal(B 10) + ) + device(5 D$sky130_fd_pr__pfet_01v8__model + location(1965 2170) + param(L 0.15) + param(W 0.42) + param(AS 0.1869) + param(AD 0.1113) + param(PS 1.73) + param(PD 1.37) + terminal(S 4) + terminal(G 3) + terminal(D 5) + terminal(B 5) + ) + device(6 D$sky130_fd_pr__pfet_01v8__model$1 + location(215 2170) + param(L 0.15) + param(W 0.42) + param(AS 0.1113) + param(AD 0.1869) + param(PS 1.37) + param(PD 1.73) + terminal(S 5) + terminal(G 4) + terminal(D 3) + terminal(B 5) + ) + + ) + circuit(SP6TArray_2X1 + + # Circuit boundary + rect((-385 -305) (2950 6160)) + + # Nets with their geometries + net(1 name('bl[0]') + rect(l12 (430 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(2 name('bl_n[0]') + rect(l12 (1520 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(3 name(vdd) + rect(l14 (-160 -130) (2500 260)) + rect(l14 (-1251 -131) (2 2)) + rect(l14 (-1251 5419) (2500 260)) + rect(l14 (-1251 -131) (2 2)) + rect(l13 (-1251 -5681) (2500 260)) + rect(l13 (-2500 5290) (2500 260)) + ) + net(4 name('wl[0]') + rect(l14 (0 1785) (2180 260)) + rect(l14 (-1091 -131) (2 2)) + rect(l13 (-1091 -131) (2180 260)) + ) + net(5 name('wl[1]') + rect(l14 (0 3505) (2180 260)) + rect(l14 (-1091 -131) (2 2)) + rect(l13 (-1091 -131) (2180 260)) + ) + net(6 name(vss) + rect(l14 (-160 2645) (2500 260)) + rect(l14 (-1251 -131) (2 2)) + rect(l13 (-1251 -131) (2500 260)) + ) + + # Outgoing pins and their connections to nets + pin(1 name('bl[0]')) + pin(2 name('bl_n[0]')) + pin(3 name(vdd)) + pin(4 name('wl[0]')) + pin(5 name('wl[1]')) + pin(6 name(vss)) + + # Subcircuits and their connections + circuit(1 SP6TCell location(0 2775) + pin(0 3) + pin(1 5) + pin(2 1) + pin(3 2) + pin(4 6) + ) + circuit(2 SP6TCell mirror location(0 2775) + pin(0 3) + pin(1 4) + pin(2 1) + pin(3 2) + pin(4 6) + ) + + ) + circuit(SP6TArray_2X2 + + # Circuit boundary + rect((-385 -305) (5130 6160)) + + # Nets with their geometries + net(1 name('bl[0]') + rect(l12 (430 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(2 name('bl_n[0]') + rect(l12 (1520 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(3 name('bl[1]') + rect(l12 (2610 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(4 name('bl_n[1]') + rect(l12 (3700 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(5 name(vdd) + rect(l14 (-160 5420) (4680 260)) + rect(l14 (-2341 -131) (2 2)) + rect(l14 (-2341 -5681) (4680 260)) + rect(l14 (-2341 -131) (2 2)) + rect(l13 (-2341 5419) (4680 260)) + rect(l13 (-4680 -5810) (4680 260)) + ) + net(6 name('wl[0]') + rect(l14 (0 1785) (4360 260)) + rect(l14 (-2181 -131) (2 2)) + rect(l13 (-2181 -131) (4360 260)) + ) + net(7 name('wl[1]') + rect(l14 (0 3505) (4360 260)) + rect(l14 (-2181 -131) (2 2)) + rect(l13 (-2181 -131) (4360 260)) + ) + net(8 name(vss) + rect(l14 (-160 2645) (4680 260)) + rect(l14 (-2341 -131) (2 2)) + rect(l13 (-2341 -131) (4680 260)) + ) + + # Outgoing pins and their connections to nets + pin(1 name('bl[0]')) + pin(2 name('bl_n[0]')) + pin(3 name('bl[1]')) + pin(4 name('bl_n[1]')) + pin(5 name(vdd)) + pin(6 name('wl[0]')) + pin(7 name('wl[1]')) + pin(8 name(vss)) + + # Subcircuits and their connections + circuit(1 SP6TArray_2X1 location(0 0) + pin(0 1) + pin(1 2) + pin(2 5) + pin(3 6) + pin(4 7) + pin(5 8) + ) + circuit(2 SP6TArray_2X1 location(2180 0) + pin(0 3) + pin(1 4) + pin(2 5) + pin(3 6) + pin(4 7) + pin(5 8) + ) + + ) + circuit(SP6TArray_2X4 + + # Circuit boundary + rect((-385 -305) (9490 6160)) + + # Nets with their geometries + net(1 name('bl[0]') + rect(l12 (430 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(2 name('bl_n[0]') + rect(l12 (1520 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(3 name('bl[1]') + rect(l12 (2610 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(4 name('bl_n[1]') + rect(l12 (3700 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(5 name('bl[2]') + rect(l12 (4790 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(6 name('bl_n[2]') + rect(l12 (5880 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(7 name('bl[3]') + rect(l12 (6970 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(8 name('bl_n[3]') + rect(l12 (8060 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(9 name(vdd) + rect(l14 (-160 -130) (9040 260)) + rect(l14 (-4521 -131) (2 2)) + rect(l14 (-4521 5419) (9040 260)) + rect(l14 (-4521 -131) (2 2)) + rect(l13 (-4521 -5681) (9040 260)) + rect(l13 (-9040 5290) (9040 260)) + ) + net(10 name('wl[0]') + rect(l14 (0 1785) (8720 260)) + rect(l14 (-4361 -131) (2 2)) + rect(l13 (-4361 -131) (8720 260)) + ) + net(11 name('wl[1]') + rect(l14 (0 3505) (8720 260)) + rect(l14 (-4361 -131) (2 2)) + rect(l13 (-4361 -131) (8720 260)) + ) + net(12 name(vss) + rect(l14 (-160 2645) (9040 260)) + rect(l14 (-4521 -131) (2 2)) + rect(l13 (-4521 -131) (9040 260)) + ) + + # Subcircuits and their connections + circuit(1 SP6TArray_2X2 location(0 0) + pin(0 1) + pin(1 2) + pin(2 3) + pin(3 4) + pin(4 9) + pin(5 10) + pin(6 11) + pin(7 12) + ) + circuit(2 SP6TArray_2X2 location(4360 0) + pin(0 5) + pin(1 6) + pin(2 7) + pin(3 8) + pin(4 9) + pin(5 10) + pin(6 11) + pin(7 12) + ) + + ) +) + +# Reference netlist +reference( + + # Device class section + class(SKY130_FD_PR__PFET_01V8__MODEL MOS4) + class(SKY130_FD_PR__NFET_01V8__MODEL MOS4) + + # Circuit section + # Circuits are the hierarchical building blocks of the netlist. + circuit(SP6TCELL + + # Nets + net(1 name(VDD)) + net(2 name(VSS)) + net(3 name(WL)) + net(4 name(BL)) + net(5 name(BL_N)) + net(6 name(BIT_N)) + net(7 name(BIT)) + + # Outgoing pins and their connections to nets + pin(1 name(VDD)) + pin(2 name(VSS)) + pin(3 name(WL)) + pin(4 name(BL)) + pin(5 name(BL_N)) + + # Devices and their connections + device(1 SKY130_FD_PR__PFET_01V8__MODEL + name(PU1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 1) + terminal(G 6) + terminal(D 7) + terminal(B 1) + ) + device(2 SKY130_FD_PR__PFET_01V8__MODEL + name(PU2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 6) + terminal(G 7) + terminal(D 1) + terminal(B 1) + ) + device(3 SKY130_FD_PR__NFET_01V8__MODEL + name(PD1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 2) + terminal(G 6) + terminal(D 7) + terminal(B 2) + ) + device(4 SKY130_FD_PR__NFET_01V8__MODEL + name(PD2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 6) + terminal(G 7) + terminal(D 2) + terminal(B 2) + ) + device(5 SKY130_FD_PR__NFET_01V8__MODEL + name(PG1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 4) + terminal(G 3) + terminal(D 7) + terminal(B 2) + ) + device(6 SKY130_FD_PR__NFET_01V8__MODEL + name(PG2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 5) + terminal(G 3) + terminal(D 6) + terminal(B 2) + ) + + ) + circuit(SP6TARRAY_2X1 + + # Nets + net(1 name(VSS)) + net(2 name(VDD)) + net(3 name('WL[0]')) + net(4 name('WL[1]')) + net(5 name('BL[0]')) + net(6 name('BL_N[0]')) + + # Outgoing pins and their connections to nets + pin(1 name(VSS)) + pin(2 name(VDD)) + pin(3 name('WL[0]')) + pin(4 name('WL[1]')) + pin(5 name('BL[0]')) + pin(6 name('BL_N[0]')) + + # Subcircuits and their connections + circuit(1 SP6TCELL name(INST0X0) + pin(0 2) + pin(1 1) + pin(2 3) + pin(3 5) + pin(4 6) + ) + circuit(2 SP6TCELL name(INST1X0) + pin(0 2) + pin(1 1) + pin(2 4) + pin(3 5) + pin(4 6) + ) + + ) + circuit(SP6TARRAY_2X2 + + # Nets + net(1 name(VSS)) + net(2 name(VDD)) + net(3 name('WL[0]')) + net(4 name('WL[1]')) + net(5 name('BL[0]')) + net(6 name('BL_N[0]')) + net(7 name('BL[1]')) + net(8 name('BL_N[1]')) + + # Outgoing pins and their connections to nets + pin(1 name(VSS)) + pin(2 name(VDD)) + pin(3 name('WL[0]')) + pin(4 name('WL[1]')) + pin(5 name('BL[0]')) + pin(6 name('BL_N[0]')) + pin(7 name('BL[1]')) + pin(8 name('BL_N[1]')) + + # Subcircuits and their connections + circuit(1 SP6TARRAY_2X1 name(INST0X0) + pin(0 1) + pin(1 2) + pin(2 3) + pin(3 4) + pin(4 5) + pin(5 6) + ) + circuit(2 SP6TARRAY_2X1 name(INST0X1) + pin(0 1) + pin(1 2) + pin(2 3) + pin(3 4) + pin(4 7) + pin(5 8) + ) + + ) + circuit(SP6TARRAY_2X4 + + # Nets + net(1 name(VSS)) + net(2 name(VDD)) + net(3 name('WL[0]')) + net(4 name('WL[1]')) + net(5 name('BL[0]')) + net(6 name('BL_N[0]')) + net(7 name('BL[1]')) + net(8 name('BL_N[1]')) + net(9 name('BL[2]')) + net(10 name('BL_N[2]')) + net(11 name('BL[3]')) + net(12 name('BL_N[3]')) + + # Outgoing pins and their connections to nets + pin(1 name(VSS)) + pin(2 name(VDD)) + pin(3 name('WL[0]')) + pin(4 name('WL[1]')) + pin(5 name('BL[0]')) + pin(6 name('BL_N[0]')) + pin(7 name('BL[1]')) + pin(8 name('BL_N[1]')) + pin(9 name('BL[2]')) + pin(10 name('BL_N[2]')) + pin(11 name('BL[3]')) + pin(12 name('BL_N[3]')) + + # Subcircuits and their connections + circuit(1 SP6TARRAY_2X2 name(INST0X0) + pin(0 1) + pin(1 2) + pin(2 3) + pin(3 4) + pin(4 5) + pin(5 6) + pin(6 7) + pin(7 8) + ) + circuit(2 SP6TARRAY_2X2 name(INST0X1) + pin(0 1) + pin(1 2) + pin(2 3) + pin(3 4) + pin(4 9) + pin(5 10) + pin(6 11) + pin(7 12) + ) + + ) +) + +# Cross reference +xref( + circuit(SP6TArray_2X1 SP6TARRAY_2X1 match + xref( + net(1 5 match) + net(2 6 match) + net(3 2 match) + net(6 1 match) + net(4 3 match) + net(5 4 match) + pin(0 4 match) + pin(1 5 match) + pin(2 1 match) + pin(5 0 match) + pin(3 2 match) + pin(4 3 match) + circuit(2 1 match) + circuit(1 2 match) + ) + ) + circuit(SP6TArray_2X2 SP6TARRAY_2X2 match + xref( + net(1 5 match) + net(3 7 match) + net(2 6 match) + net(4 8 match) + net(5 2 match) + net(8 1 match) + net(6 3 match) + net(7 4 match) + pin(0 4 match) + pin(2 6 match) + pin(1 5 match) + pin(3 7 match) + pin(4 1 match) + pin(7 0 match) + pin(5 2 match) + pin(6 3 match) + circuit(1 1 match) + circuit(2 2 match) + ) + ) + circuit(SP6TArray_2X4 SP6TARRAY_2X4 match + xref( + net(1 5 match) + net(3 7 match) + net(5 9 match) + net(7 11 match) + net(2 6 match) + net(4 8 match) + net(6 10 match) + net(8 12 match) + net(9 2 match) + net(12 1 match) + net(10 3 match) + net(11 4 match) + pin(() 4 match) + pin(() 6 match) + pin(() 8 match) + pin(() 10 match) + pin(() 5 match) + pin(() 7 match) + pin(() 9 match) + pin(() 11 match) + pin(() 1 match) + pin(() 0 match) + pin(() 2 match) + pin(() 3 match) + circuit(1 1 match) + circuit(2 2 match) + ) + ) + circuit(SP6TCell SP6TCELL match + xref( + net(3 7 match) + net(4 6 match) + net(7 4 match) + net(8 5 match) + net(5 1 match) + net(10 2 match) + net(6 3 match) + pin(2 3 match) + pin(3 4 match) + pin(0 0 match) + pin(4 1 match) + pin(1 2 match) + device(4 3 match) + device(2 4 match) + device(3 5 match) + device(1 6 match) + device(6 1 match) + device(5 2 match) + ) + ) +) diff --git a/testdata/lvs/test_22d.lvsdb.2 b/testdata/lvs/test_22d.lvsdb.2 new file mode 100644 index 000000000..9206220e0 --- /dev/null +++ b/testdata/lvs/test_22d.lvsdb.2 @@ -0,0 +1,952 @@ +#%lvsdb-klayout + +# Layout +layout( + top(SP6TArray_2X4) + unit(0.001) + + # Layer section + # This section lists the mask layers (drawing or derived) and their connections. + + # Mask layers + layer(l5 '64/20') + layer(l3) + layer(l8) + layer(l7 '66/20') + layer(l10) + layer(l9 '67/20') + layer(l12 '68/16') + layer(l11 '68/20') + layer(l14 '69/16') + layer(l13 '69/20') + layer(l16) + layer(l15) + layer(l18) + layer(l17) + layer(l20) + layer(l19) + layer(l21 '66/44') + layer(l23 '67/44') + layer(l24 '68/44') + layer(l25) + layer(l26) + layer(l27) + layer(l1) + layer(l2) + layer(l4) + layer(l6) + layer(l22) + + # Mask layer connectivity + connect(l5 l5 l4) + connect(l3 l3 l2) + connect(l8 l8 l7) + connect(l7 l8 l7) + connect(l10 l10 l9) + connect(l9 l10 l9 l21 l23) + connect(l12 l12 l11) + connect(l11 l12 l11 l23 l24) + connect(l14 l14 l13) + connect(l13 l14 l13 l24 l25) + connect(l16 l16 l15) + connect(l15 l16 l15 l25 l26) + connect(l18 l18 l17) + connect(l17 l18 l17 l26 l27) + connect(l20 l20 l19) + connect(l19 l20 l19 l27) + connect(l21 l9 l21 l2 l22) + connect(l23 l9 l11 l23) + connect(l24 l11 l13 l24) + connect(l25 l13 l15 l25) + connect(l26 l15 l17 l26) + connect(l27 l17 l19 l27) + connect(l1 l1) + connect(l2 l3 l21 l2 l4 l6) + connect(l4 l5 l2 l4) + connect(l6 l2 l6) + connect(l22 l21 l22) + + # Global nets and connectivity + global(l1 vss) + global(l6 vss) + + # Device class section + class(active_res RES) + class(poly_res RES) + class(sky130_fd_pr__diode_pw2nd_05v5 DIODE) + class(sky130_fd_pr__diode_pd2nw_05v5 DIODE) + class(sky130_fd_pr__nfet_01v8__model MOS4) + class(sky130_fd_pr__nfet_01v8_lvt__model MOS4) + class(sky130_fd_pr__nfet_g5v0d10v5__model MOS4) + class(sky130_fd_pr__pfet_01v8__model MOS4) + class(sky130_fd_pr__pfet_01v8_hvt__model MOS4) + class(sky130_fd_pr__pfet_01v8_lvt__model MOS4) + class(sky130_fd_pr__pfet_g5v0d10v5__model MOS4) + + # Device abstracts section + # Device abstracts list the pin shapes of the devices. + device(D$sky130_fd_pr__nfet_01v8__model sky130_fd_pr__nfet_01v8__model + terminal(S + rect(l2 (-210 -340) (420 265)) + ) + terminal(G + rect(l22 (-210 -75) (420 150)) + ) + terminal(D + polygon(l2 (-210 75) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) + ) + terminal(B + rect(l1 (-210 -75) (420 150)) + ) + ) + device(D$sky130_fd_pr__nfet_01v8__model$1 sky130_fd_pr__nfet_01v8__model + terminal(S + polygon(l2 (-600 -550) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (75 -210) (265 420)) + ) + terminal(B + rect(l1 (-75 -210) (150 420)) + ) + ) + device(D$sky130_fd_pr__nfet_01v8__model$2 sky130_fd_pr__nfet_01v8__model + terminal(S + rect(l2 (-210 -340) (420 265)) + ) + terminal(G + rect(l22 (-210 -75) (420 150)) + ) + terminal(D + polygon(l2 (-210 75) (0 340) (-105 0) (0 420) (525 0) (0 -760)) + ) + terminal(B + rect(l1 (-210 -75) (420 150)) + ) + ) + device(D$sky130_fd_pr__nfet_01v8__model$3 sky130_fd_pr__nfet_01v8__model + terminal(S + polygon(l2 (180 -550) (0 340) (-105 0) (0 420) (525 0) (0 -760)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (-340 -210) (265 420)) + ) + terminal(B + rect(l1 (-75 -210) (150 420)) + ) + ) + device(D$sky130_fd_pr__pfet_01v8__model sky130_fd_pr__pfet_01v8__model + terminal(S + rect(l2 (-520 -210) (445 420)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (75 -210) (265 420)) + ) + terminal(B + rect(l5 (-75 -210) (150 420)) + ) + ) + device(D$sky130_fd_pr__pfet_01v8__model$1 sky130_fd_pr__pfet_01v8__model + terminal(S + rect(l2 (-340 -210) (265 420)) + ) + terminal(G + rect(l22 (-75 -210) (150 420)) + ) + terminal(D + rect(l2 (75 -210) (445 420)) + ) + terminal(B + rect(l5 (-75 -210) (150 420)) + ) + ) + + # Circuit section + # Circuits are the hierarchical building blocks of the netlist. + circuit(SP6TCell + + # Circuit boundary + rect((-385 -485) (2950 3565)) + + # Nets with their geometries + net(1 + rect(l7 (1890 500) (150 2010)) + rect(l7 (-1100 -1320) (950 150)) + rect(l7 (-1280 -150) (330 270)) + ) + net(2 + rect(l7 (1240 1550) (330 270)) + rect(l7 (-1280 -150) (950 150)) + rect(l7 (-1100 -1320) (150 2010)) + ) + net(3 + polygon(l9 (525 760) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480)) + rect(l21 (-170 80) (170 170)) + rect(l21 (-170 1070) (170 170)) + rect(l21 (-5 -1010) (170 170)) + polygon(l2 (-465 -1120) (0 340) (-105 0) (0 420) (525 0) (0 -760)) + rect(l2 (-525 1670) (445 420)) + rect(l22 (-125 -1190) (330 270)) + rect(l22 (950 -960) (150 2010)) + rect(l22 (-1100 -1320) (950 150)) + ) + net(4 + polygon(l9 (1485 760) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570)) + rect(l21 (-170 80) (170 170)) + rect(l21 (-170 1070) (170 170)) + rect(l21 (-335 -650) (170 170)) + polygon(l2 (-125 -1480) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) + rect(l2 (-340 1670) (445 420)) + rect(l22 (-650 -830) (330 270)) + rect(l22 (-1280 -150) (950 150)) + rect(l22 (-1100 -1320) (150 2010)) + ) + net(5 name(vdd) + rect(l5 (-385 1780) (2950 1300)) + rect(l9 (-2650 -1075) (170 685)) + rect(l9 (-250 0) (2510 170)) + rect(l9 (-250 -855) (170 685)) + rect(l11 (-2395 -75) (260 320)) + rect(l11 (1920 -320) (260 320)) + rect(l14 (-2470 -290) (2500 260)) + rect(l14 (-1251 -131) (2 2)) + rect(l13 (-1251 -131) (2500 260)) + rect(l21 (-2425 -215) (170 170)) + rect(l21 (-170 -775) (170 170)) + rect(l21 (2010 435) (170 170)) + rect(l21 (-170 -775) (170 170)) + rect(l23 (-2350 435) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l24 (-2340 -160) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l2 (-2460 -200) (2590 250)) + rect(l2 (-2510 -940) (265 420)) + rect(l2 (1900 -420) (265 420)) + rect(l4 (-2510 270) (2590 250)) + ) + net(6 name(wl) + rect(l9 (1005 140) (170 500)) + polygon(l11 (-200 -230) (0 290) (-15 0) (0 320) (260 0) (0 -320) (-15 0) (0 -290)) + rect(l14 (-1205 320) (2180 260)) + rect(l14 (-1091 -131) (2 2)) + rect(l13 (-1091 -131) (2180 260)) + rect(l21 (-1175 -770) (170 170)) + rect(l23 (-170 80) (170 170)) + rect(l24 (-160 145) (150 150)) + polygon(l22 (-900 -795) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) + ) + net(7 name(bl) + polygon(l9 (520 -165) (0 80) (-60 0) (0 170) (60 0) (0 80) (170 0) (0 -330)) + rect(l12 (-260 20) (230 2920)) + rect(l12 (-116 -1461) (2 2)) + rect(l11 (-116 -1461) (230 2920)) + rect(l21 (-140 -2860) (170 170)) + rect(l23 (-230 -170) (170 170)) + rect(l2 (-235 -210) (420 265)) + ) + net(8 name(bl_n) + polygon(l9 (1490 -165) (0 330) (170 0) (0 -80) (60 0) (0 -170) (-60 0) (0 -80)) + rect(l12 (-140 20) (230 2920)) + rect(l12 (-116 -1461) (2 2)) + rect(l11 (-116 -1461) (230 2920)) + rect(l21 (-260 -2860) (170 170)) + rect(l23 (-110 -170) (170 170)) + rect(l2 (-355 -210) (420 265)) + ) + net(9 + polygon(l7 (265 140) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) + ) + net(10 name(vss) + rect(l9 (-85 -165) (170 1170)) + rect(l9 (2010 -1170) (170 1170)) + rect(l11 (-2395 -1165) (260 320)) + rect(l11 (1920 -320) (260 320)) + rect(l14 (-2470 -290) (2500 260)) + rect(l14 (-1251 -131) (2 2)) + rect(l13 (-1251 -131) (2500 260)) + rect(l21 (-2425 -215) (170 170)) + rect(l21 (-170 670) (170 170)) + rect(l21 (2010 -170) (170 170)) + rect(l21 (-170 -1010) (170 170)) + rect(l23 (-2350 -170) (170 170)) + rect(l23 (2010 -170) (170 170)) + rect(l24 (-2340 -160) (150 150)) + rect(l24 (2030 -150) (150 150)) + rect(l2 (-215 555) (265 420)) + rect(l2 (-2430 -1410) (250 720)) + rect(l2 (-250 270) (265 420)) + rect(l2 (1915 -1410) (250 720)) + rect(l6 (-250 -720) (250 720)) + rect(l6 (-2430 -720) (250 720)) + ) + + # Outgoing pins and their connections to nets + pin(5 name(vdd)) + pin(6 name(wl)) + pin(7 name(bl)) + pin(8 name(bl_n)) + pin(10 name(vss)) + + # Devices and their connections + device(1 D$sky130_fd_pr__nfet_01v8__model + location(1575 215) + param(L 0.15) + param(W 0.42) + param(AS 0.1113) + param(AD 0.18165) + param(PS 1.37) + param(PD 1.285) + terminal(S 8) + terminal(G 6) + terminal(D 4) + terminal(B 10) + ) + device(2 D$sky130_fd_pr__nfet_01v8__model$1 + location(1965 840) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.1113) + param(PS 1.285) + param(PD 1.37) + terminal(S 4) + terminal(G 3) + terminal(D 10) + terminal(B 10) + ) + device(3 D$sky130_fd_pr__nfet_01v8__model$2 + location(605 215) + param(L 0.15) + param(W 0.42) + param(AS 0.1113) + param(AD 0.18165) + param(PS 1.37) + param(PD 1.285) + terminal(S 7) + terminal(G 6) + terminal(D 3) + terminal(B 10) + ) + device(4 D$sky130_fd_pr__nfet_01v8__model$3 + location(215 840) + param(L 0.15) + param(W 0.42) + param(AS 0.18165) + param(AD 0.1113) + param(PS 1.285) + param(PD 1.37) + terminal(S 3) + terminal(G 4) + terminal(D 10) + terminal(B 10) + ) + device(5 D$sky130_fd_pr__pfet_01v8__model + location(1965 2170) + param(L 0.15) + param(W 0.42) + param(AS 0.1869) + param(AD 0.1113) + param(PS 1.73) + param(PD 1.37) + terminal(S 4) + terminal(G 3) + terminal(D 5) + terminal(B 5) + ) + device(6 D$sky130_fd_pr__pfet_01v8__model$1 + location(215 2170) + param(L 0.15) + param(W 0.42) + param(AS 0.1113) + param(AD 0.1869) + param(PS 1.37) + param(PD 1.73) + terminal(S 5) + terminal(G 4) + terminal(D 3) + terminal(B 5) + ) + + ) + circuit(SP6TArray_2X1 + + # Circuit boundary + rect((-385 -305) (2950 6160)) + + # Nets with their geometries + net(1 name('bl[0]') + rect(l12 (430 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(2 name('bl_n[0]') + rect(l12 (1520 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(3 name(vdd) + rect(l14 (-160 -130) (2500 260)) + rect(l14 (-1251 -131) (2 2)) + rect(l14 (-1251 5419) (2500 260)) + rect(l14 (-1251 -131) (2 2)) + rect(l13 (-1251 -5681) (2500 260)) + rect(l13 (-2500 5290) (2500 260)) + ) + net(4 name('wl[0]') + rect(l14 (0 1785) (2180 260)) + rect(l14 (-1091 -131) (2 2)) + rect(l13 (-1091 -131) (2180 260)) + ) + net(5 name('wl[1]') + rect(l14 (0 3505) (2180 260)) + rect(l14 (-1091 -131) (2 2)) + rect(l13 (-1091 -131) (2180 260)) + ) + net(6 name(vss) + rect(l14 (-160 2645) (2500 260)) + rect(l14 (-1251 -131) (2 2)) + rect(l13 (-1251 -131) (2500 260)) + ) + + # Outgoing pins and their connections to nets + pin(1 name('bl[0]')) + pin(2 name('bl_n[0]')) + pin(3 name(vdd)) + pin(4 name('wl[0]')) + pin(5 name('wl[1]')) + pin(6 name(vss)) + + # Subcircuits and their connections + circuit(1 SP6TCell location(0 2775) + pin(0 3) + pin(1 5) + pin(2 1) + pin(3 2) + pin(4 6) + ) + circuit(2 SP6TCell mirror location(0 2775) + pin(0 3) + pin(1 4) + pin(2 1) + pin(3 2) + pin(4 6) + ) + + ) + circuit(SP6TArray_2X2 + + # Circuit boundary + rect((-385 -305) (5130 6160)) + + # Nets with their geometries + net(1 name('bl[0]') + rect(l12 (430 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(2 name('bl_n[0]') + rect(l12 (1520 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(3 name('bl[1]') + rect(l12 (2610 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(4 name('bl_n[1]') + rect(l12 (3700 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(5 name(vdd) + rect(l14 (-160 5420) (4680 260)) + rect(l14 (-2341 -131) (2 2)) + rect(l14 (-2341 -5681) (4680 260)) + rect(l14 (-2341 -131) (2 2)) + rect(l13 (-2341 5419) (4680 260)) + rect(l13 (-4680 -5810) (4680 260)) + ) + net(6 name('wl[0]') + rect(l14 (0 1785) (4360 260)) + rect(l14 (-2181 -131) (2 2)) + rect(l13 (-2181 -131) (4360 260)) + ) + net(7 name('wl[1]') + rect(l14 (0 3505) (4360 260)) + rect(l14 (-2181 -131) (2 2)) + rect(l13 (-2181 -131) (4360 260)) + ) + net(8 name(vss) + rect(l14 (-160 2645) (4680 260)) + rect(l14 (-2341 -131) (2 2)) + rect(l13 (-2341 -131) (4680 260)) + ) + + # Outgoing pins and their connections to nets + pin(1 name('bl[0]')) + pin(2 name('bl_n[0]')) + pin(3 name('bl[1]')) + pin(4 name('bl_n[1]')) + pin(5 name(vdd)) + pin(6 name('wl[0]')) + pin(7 name('wl[1]')) + pin(8 name(vss)) + + # Subcircuits and their connections + circuit(1 SP6TArray_2X1 location(0 0) + pin(0 1) + pin(1 2) + pin(2 5) + pin(3 6) + pin(4 7) + pin(5 8) + ) + circuit(2 SP6TArray_2X1 location(2180 0) + pin(0 3) + pin(1 4) + pin(2 5) + pin(3 6) + pin(4 7) + pin(5 8) + ) + + ) + circuit(SP6TArray_2X4 + + # Circuit boundary + rect((-385 -305) (9490 6160)) + + # Nets with their geometries + net(1 name('bl[0]') + rect(l12 (430 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(2 name('bl_n[0]') + rect(l12 (1520 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(3 name('bl[1]') + rect(l12 (2610 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(4 name('bl_n[1]') + rect(l12 (3700 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(5 name('bl[2]') + rect(l12 (4790 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(6 name('bl_n[2]') + rect(l12 (5880 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(7 name('bl[3]') + rect(l12 (6970 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(8 name('bl_n[3]') + rect(l12 (8060 0) (230 5550)) + rect(l12 (-116 -2776) (2 2)) + rect(l11 (-116 -2776) (230 5550)) + ) + net(9 name(vdd) + rect(l14 (-160 -130) (9040 260)) + rect(l14 (-4521 -131) (2 2)) + rect(l14 (-4521 5419) (9040 260)) + rect(l14 (-4521 -131) (2 2)) + rect(l13 (-4521 -5681) (9040 260)) + rect(l13 (-9040 5290) (9040 260)) + ) + net(10 name('wl[0]') + rect(l14 (0 1785) (8720 260)) + rect(l14 (-4361 -131) (2 2)) + rect(l13 (-4361 -131) (8720 260)) + ) + net(11 name('wl[1]') + rect(l14 (0 3505) (8720 260)) + rect(l14 (-4361 -131) (2 2)) + rect(l13 (-4361 -131) (8720 260)) + ) + net(12 name(vss) + rect(l14 (-160 2645) (9040 260)) + rect(l14 (-4521 -131) (2 2)) + rect(l13 (-4521 -131) (9040 260)) + ) + + # Subcircuits and their connections + circuit(1 SP6TArray_2X2 location(0 0) + pin(0 1) + pin(1 2) + pin(2 3) + pin(3 4) + pin(4 9) + pin(5 10) + pin(6 11) + pin(7 12) + ) + circuit(2 SP6TArray_2X2 location(4360 0) + pin(0 5) + pin(1 6) + pin(2 7) + pin(3 8) + pin(4 9) + pin(5 10) + pin(6 11) + pin(7 12) + ) + + ) +) + +# Reference netlist +reference( + + # Device class section + class(SKY130_FD_PR__PFET_01V8__MODEL MOS4) + class(SKY130_FD_PR__NFET_01V8__MODEL MOS4) + + # Circuit section + # Circuits are the hierarchical building blocks of the netlist. + circuit(SP6TCELL + + # Nets + net(1 name(VDD)) + net(2 name(VSS)) + net(3 name(WL)) + net(4 name(BL)) + net(5 name(BL_N)) + net(6 name(BIT_N)) + net(7 name(BIT)) + + # Outgoing pins and their connections to nets + pin(1 name(VDD)) + pin(2 name(VSS)) + pin(3 name(WL)) + pin(4 name(BL)) + pin(5 name(BL_N)) + + # Devices and their connections + device(1 SKY130_FD_PR__PFET_01V8__MODEL + name(PU1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 1) + terminal(G 6) + terminal(D 7) + terminal(B 1) + ) + device(2 SKY130_FD_PR__PFET_01V8__MODEL + name(PU2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 6) + terminal(G 7) + terminal(D 1) + terminal(B 1) + ) + device(3 SKY130_FD_PR__NFET_01V8__MODEL + name(PD1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 2) + terminal(G 6) + terminal(D 7) + terminal(B 2) + ) + device(4 SKY130_FD_PR__NFET_01V8__MODEL + name(PD2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 6) + terminal(G 7) + terminal(D 2) + terminal(B 2) + ) + device(5 SKY130_FD_PR__NFET_01V8__MODEL + name(PG1) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 4) + terminal(G 3) + terminal(D 7) + terminal(B 2) + ) + device(6 SKY130_FD_PR__NFET_01V8__MODEL + name(PG2) + param(L 0.15) + param(W 0.42) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 5) + terminal(G 3) + terminal(D 6) + terminal(B 2) + ) + + ) + circuit(SP6TARRAY_2X1 + + # Nets + net(1 name(VSS)) + net(2 name(VDD)) + net(3 name('WL[0]')) + net(4 name('WL[1]')) + net(5 name('BL[0]')) + net(6 name('BL_N[0]')) + + # Outgoing pins and their connections to nets + pin(1 name(VSS)) + pin(2 name(VDD)) + pin(3 name('WL[0]')) + pin(4 name('WL[1]')) + pin(5 name('BL[0]')) + pin(6 name('BL_N[0]')) + + # Subcircuits and their connections + circuit(1 SP6TCELL name(INST0X0) + pin(0 2) + pin(1 1) + pin(2 3) + pin(3 5) + pin(4 6) + ) + circuit(2 SP6TCELL name(INST1X0) + pin(0 2) + pin(1 1) + pin(2 4) + pin(3 5) + pin(4 6) + ) + + ) + circuit(SP6TARRAY_2X2 + + # Nets + net(1 name(VSS)) + net(2 name(VDD)) + net(3 name('WL[0]')) + net(4 name('WL[1]')) + net(5 name('BL[0]')) + net(6 name('BL_N[0]')) + net(7 name('BL[1]')) + net(8 name('BL_N[1]')) + + # Outgoing pins and their connections to nets + pin(1 name(VSS)) + pin(2 name(VDD)) + pin(3 name('WL[0]')) + pin(4 name('WL[1]')) + pin(5 name('BL[0]')) + pin(6 name('BL_N[0]')) + pin(7 name('BL[1]')) + pin(8 name('BL_N[1]')) + + # Subcircuits and their connections + circuit(1 SP6TARRAY_2X1 name(INST0X0) + pin(0 1) + pin(1 2) + pin(2 3) + pin(3 4) + pin(4 5) + pin(5 6) + ) + circuit(2 SP6TARRAY_2X1 name(INST0X1) + pin(0 1) + pin(1 2) + pin(2 3) + pin(3 4) + pin(4 7) + pin(5 8) + ) + + ) + circuit(SP6TARRAY_2X4 + + # Nets + net(1 name(VSS)) + net(2 name(VDD)) + net(3 name('WL[0]')) + net(4 name('WL[1]')) + net(5 name('BL[0]')) + net(6 name('BL_N[0]')) + net(7 name('BL[1]')) + net(8 name('BL_N[1]')) + net(9 name('BL[2]')) + net(10 name('BL_N[2]')) + net(11 name('BL[3]')) + net(12 name('BL_N[3]')) + + # Outgoing pins and their connections to nets + pin(1 name(VSS)) + pin(2 name(VDD)) + pin(3 name('WL[0]')) + pin(4 name('WL[1]')) + pin(5 name('BL[0]')) + pin(6 name('BL_N[0]')) + pin(7 name('BL[1]')) + pin(8 name('BL_N[1]')) + pin(9 name('BL[2]')) + pin(10 name('BL_N[2]')) + pin(11 name('BL[3]')) + pin(12 name('BL_N[3]')) + + # Subcircuits and their connections + circuit(1 SP6TARRAY_2X2 name(INST0X0) + pin(0 1) + pin(1 2) + pin(2 3) + pin(3 4) + pin(4 5) + pin(5 6) + pin(6 7) + pin(7 8) + ) + circuit(2 SP6TARRAY_2X2 name(INST0X1) + pin(0 1) + pin(1 2) + pin(2 3) + pin(3 4) + pin(4 9) + pin(5 10) + pin(6 11) + pin(7 12) + ) + + ) +) + +# Cross reference +xref( + circuit(SP6TArray_2X1 SP6TARRAY_2X1 match + xref( + net(1 5 match) + net(2 6 match) + net(3 2 match) + net(6 1 match) + net(4 3 match) + net(5 4 match) + pin(0 4 match) + pin(1 5 match) + pin(2 1 match) + pin(5 0 match) + pin(3 2 match) + pin(4 3 match) + circuit(2 1 match) + circuit(1 2 match) + ) + ) + circuit(SP6TArray_2X2 SP6TARRAY_2X2 match + xref( + net(1 5 match) + net(3 7 match) + net(2 6 match) + net(4 8 match) + net(5 2 match) + net(8 1 match) + net(6 3 match) + net(7 4 match) + pin(0 4 match) + pin(2 6 match) + pin(1 5 match) + pin(3 7 match) + pin(4 1 match) + pin(7 0 match) + pin(5 2 match) + pin(6 3 match) + circuit(1 1 match) + circuit(2 2 match) + ) + ) + circuit(SP6TArray_2X4 SP6TARRAY_2X4 match + xref( + net(1 5 match) + net(3 7 match) + net(5 9 match) + net(7 11 match) + net(2 6 match) + net(4 8 match) + net(6 10 match) + net(8 12 match) + net(9 2 match) + net(12 1 match) + net(10 3 match) + net(11 4 match) + pin(() 4 match) + pin(() 6 match) + pin(() 8 match) + pin(() 10 match) + pin(() 5 match) + pin(() 7 match) + pin(() 9 match) + pin(() 11 match) + pin(() 1 match) + pin(() 0 match) + pin(() 2 match) + pin(() 3 match) + circuit(1 1 match) + circuit(2 2 match) + ) + ) + circuit(SP6TCell SP6TCELL match + xref( + net(3 7 match) + net(4 6 match) + net(7 4 match) + net(8 5 match) + net(5 1 match) + net(10 2 match) + net(6 3 match) + pin(2 3 match) + pin(3 4 match) + pin(0 0 match) + pin(4 1 match) + pin(1 2 match) + device(4 3 match) + device(2 4 match) + device(3 5 match) + device(1 6 match) + device(6 1 match) + device(5 2 match) + ) + ) +)