From 782f6fe601c172ad54038a8176f8ad694eab7f35 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sun, 15 Dec 2019 01:29:56 +0100 Subject: [PATCH] BUGFIX: the L2N and LVSDB writer was writing too much Sometimes, shapes from child cells were propagated into parent cells in the L2N and LVSDB output. Because of this fix, many testdata files have to be updated. --- src/db/db/dbHierNetworkProcessor.cc | 11 +- src/db/db/dbHierNetworkProcessor.h | 22 +- src/db/db/dbLayoutToNetlistWriter.cc | 130 +- src/db/db/dbLayoutToNetlistWriter.h | 28 +- .../dbLayoutToNetlistReaderTests.cc | 2 +- testdata/algo/l2n_reader_au_1.gds | Bin 20994 -> 6690 bytes testdata/algo/l2n_reader_au_1b.gds | Bin 7938 -> 434 bytes testdata/algo/l2n_reader_au_1c.gds | Bin 23298 -> 15618 bytes testdata/algo/l2n_reader_au_1d.gds | Bin 10672 -> 2992 bytes testdata/algo/l2n_reader_au_1e.gds | Bin 10768 -> 3088 bytes testdata/algo/l2n_reader_au_1f.gds | Bin 15632 -> 7952 bytes testdata/algo/l2n_writer_au.txt | 262 +--- testdata/algo/l2n_writer_au_2b.txt | 254 +--- testdata/algo/l2n_writer_au_2s.txt | 254 +--- testdata/algo/l2n_writer_au_p.oas | Bin 2370 -> 1578 bytes testdata/algo/l2n_writer_au_p.txt | 262 +--- testdata/algo/l2n_writer_au_s.txt | 262 +--- testdata/algo/lvs_test1_au.lvsdb.1 | 480 +------- testdata/algo/lvs_test1b_au.lvsdb.1 | 480 +------- testdata/algo/lvs_test2_au.lvsdb.1 | 480 +------- testdata/algo/lvs_test2b_au.lvsdb.1 | 480 +------- testdata/algo/meander.gds.gz | Bin 0 -> 337 bytes testdata/lvs/floating.lvsdb | 42 +- testdata/lvs/invchain_cheat.lvsdb | 150 +-- testdata/lvs/ringo_layout_var.lvsdb.1 | 91 +- testdata/lvs/ringo_layout_var.lvsdb.2 | 1076 ----------------- 26 files changed, 350 insertions(+), 4416 deletions(-) create mode 100644 testdata/algo/meander.gds.gz delete mode 100644 testdata/lvs/ringo_layout_var.lvsdb.2 diff --git a/src/db/db/dbHierNetworkProcessor.cc b/src/db/db/dbHierNetworkProcessor.cc index 7af394f59..721d17aac 100644 --- a/src/db/db/dbHierNetworkProcessor.cc +++ b/src/db/db/dbHierNetworkProcessor.cc @@ -2286,8 +2286,8 @@ template class DB_PUBLIC hier_clusters; // recursive_cluster_shape_iterator implementation template -recursive_cluster_shape_iterator::recursive_cluster_shape_iterator (const hier_clusters &hc, unsigned int layer, db::cell_index_type ci, typename local_cluster::id_type id) - : mp_hc (&hc), m_layer (layer), m_id (id) +recursive_cluster_shape_iterator::recursive_cluster_shape_iterator (const hier_clusters &hc, unsigned int layer, db::cell_index_type ci, typename local_cluster::id_type id, const CircuitCallback *callback) + : mp_hc (&hc), m_layer (layer), m_id (id), mp_callback (callback) { if (id == 0) { return; @@ -2352,7 +2352,12 @@ void recursive_cluster_shape_iterator::next_conn () if (m_conn_iter_stack.back ().first != m_conn_iter_stack.back ().second) { const ClusterInstance &cli = *m_conn_iter_stack.back ().first; - down (cli.inst_cell_index (), cli.id (), cli.inst_trans ()); + if (mp_callback && ! mp_callback->new_cell (cli.inst_cell_index ())) { + // skip this cell + ++m_conn_iter_stack.back ().first; + } else { + down (cli.inst_cell_index (), cli.id (), cli.inst_trans ()); + } } else { diff --git a/src/db/db/dbHierNetworkProcessor.h b/src/db/db/dbHierNetworkProcessor.h index a29dfcce3..923c57e78 100644 --- a/src/db/db/dbHierNetworkProcessor.h +++ b/src/db/db/dbHierNetworkProcessor.h @@ -1038,6 +1038,25 @@ private: int m_base_verbosity; }; +/** + * @brief A callback function for the recursive cluster shape and cluster iterator selecting cells/circuits + * + * Reimplement the "new_circuit" method to receive a callback on a new cell or circuit. + */ +class DB_PUBLIC CircuitCallback +{ +public: + CircuitCallback () { } + + /** + * @brief This method is called whenever a circuit is entered when descending. + * Return false to skip this circuit and all of it's children. This method is called before the + * new cell is entered. + * @param new_ci The cell index of the cell to enter + */ + virtual bool new_cell (db::cell_index_type /*new_ci*/) const { return true; } +}; + /** * @brief A recursive shape iterator for the shapes of a cluster * @@ -1057,7 +1076,7 @@ public: /** * @brief Constructor */ - recursive_cluster_shape_iterator (const hier_clusters &hc, unsigned int layer, db::cell_index_type ci, typename local_cluster::id_type id); + recursive_cluster_shape_iterator (const hier_clusters &hc, unsigned int layer, db::cell_index_type ci, typename local_cluster::id_type id, const CircuitCallback *callback = 0); /** * @brief Returns a value indicating whether there are any more shapes @@ -1138,6 +1157,7 @@ private: typename db::local_cluster::shape_iterator m_shape_iter; unsigned int m_layer; typename db::local_cluster::id_type m_id; + const CircuitCallback *mp_callback; void next_conn (); void up (); diff --git a/src/db/db/dbLayoutToNetlistWriter.cc b/src/db/db/dbLayoutToNetlistWriter.cc index fad0c3a9f..62c9d6116 100644 --- a/src/db/db/dbLayoutToNetlistWriter.cc +++ b/src/db/db/dbLayoutToNetlistWriter.cc @@ -57,7 +57,7 @@ static const std::string indent2 (" "); template std_writer_impl::std_writer_impl (tl::OutputStream &stream, double dbu, const std::string &progress_description) - : mp_stream (&stream), m_dbu (dbu), + : mp_stream (&stream), m_dbu (dbu), mp_netlist (0), m_progress (progress_description.empty () ? tl::to_string (tr ("Writing L2N database")) : progress_description, 10000) { m_progress.set_format (tl::to_string (tr ("%.0f MB"))); @@ -76,17 +76,51 @@ static std::string name_for_layer (const db::LayoutToNetlist *l2n, unsigned int template void std_writer_impl::write (const db::LayoutToNetlist *l2n) { - write (l2n->netlist (), l2n, false, 0); + try { + + mp_netlist = l2n->netlist (); + mp_l2n = l2n; + + write (false, 0); + + mp_netlist = 0; + mp_l2n = 0; + + } catch (...) { + mp_netlist = 0; + mp_l2n = 0; + throw; + } } template -void std_writer_impl::write (const db::Netlist *nl, const db::LayoutToNetlist *l2n, bool nested, std::map > *net2id_per_circuit) +void std_writer_impl::write (const db::Netlist *netlist, const db::LayoutToNetlist *l2n, bool nested, std::map > *net2id_per_circuit) +{ + try { + + mp_netlist = netlist; + mp_l2n = l2n; + + write (nested, net2id_per_circuit); + + mp_netlist = 0; + mp_l2n = 0; + + } catch (...) { + mp_netlist = 0; + mp_l2n = 0; + throw; + } +} + +template +void std_writer_impl::write (bool nested, std::map > *net2id_per_circuit) { bool any = false; const int version = 0; - const db::Layout *ly = l2n ? l2n->internal_layout () : 0; + const db::Layout *ly = mp_l2n ? mp_l2n->internal_layout () : 0; const std::string indent (nested ? indent1 : ""); if (! nested) { @@ -97,11 +131,11 @@ void std_writer_impl::write (const db::Netlist *nl, const db::LayoutToNetl *mp_stream << indent << Keys::version_key << "(" << version << ")" << endl; } if (ly) { - *mp_stream << indent << Keys::top_key << "(" << tl::to_word_or_quoted_string (ly->cell_name (l2n->internal_top_cell ()->cell_index ())) << ")" << endl; + *mp_stream << indent << Keys::top_key << "(" << tl::to_word_or_quoted_string (ly->cell_name (mp_l2n->internal_top_cell ()->cell_index ())) << ")" << endl; *mp_stream << indent << Keys::unit_key << "(" << m_dbu << ")" << endl; } - if (l2n) { + if (mp_l2n) { if (! Keys::is_short ()) { *mp_stream << endl << indent << "# Layer section" << endl; @@ -111,8 +145,8 @@ void std_writer_impl::write (const db::Netlist *nl, const db::LayoutToNetl if (! Keys::is_short ()) { *mp_stream << endl << indent << "# Mask layers" << endl; } - for (db::Connectivity::layer_iterator l = l2n->connectivity ().begin_layers (); l != l2n->connectivity ().end_layers (); ++l) { - *mp_stream << indent << Keys::layer_key << "(" << name_for_layer (l2n, *l); + for (db::Connectivity::layer_iterator l = mp_l2n->connectivity ().begin_layers (); l != mp_l2n->connectivity ().end_layers (); ++l) { + *mp_stream << indent << Keys::layer_key << "(" << name_for_layer (mp_l2n, *l); db::LayerProperties lp = ly->get_properties (*l); if (! lp.is_null ()) { *mp_stream << " " << tl::to_word_or_quoted_string (lp.to_string ()); @@ -124,14 +158,14 @@ void std_writer_impl::write (const db::Netlist *nl, const db::LayoutToNetl if (! Keys::is_short ()) { *mp_stream << endl << indent << "# Mask layer connectivity" << endl; } - for (db::Connectivity::layer_iterator l = l2n->connectivity ().begin_layers (); l != l2n->connectivity ().end_layers (); ++l) { + for (db::Connectivity::layer_iterator l = mp_l2n->connectivity ().begin_layers (); l != mp_l2n->connectivity ().end_layers (); ++l) { - db::Connectivity::layer_iterator ce = l2n->connectivity ().end_connected (*l); - db::Connectivity::layer_iterator cb = l2n->connectivity ().begin_connected (*l); + db::Connectivity::layer_iterator ce = mp_l2n->connectivity ().end_connected (*l); + db::Connectivity::layer_iterator cb = mp_l2n->connectivity ().begin_connected (*l); if (cb != ce) { - *mp_stream << indent << Keys::connect_key << "(" << name_for_layer (l2n, *l); - for (db::Connectivity::layer_iterator c = l2n->connectivity ().begin_connected (*l); c != ce; ++c) { - *mp_stream << " " << name_for_layer (l2n, *c); + *mp_stream << indent << Keys::connect_key << "(" << name_for_layer (mp_l2n, *l); + for (db::Connectivity::layer_iterator c = mp_l2n->connectivity ().begin_connected (*l); c != ce; ++c) { + *mp_stream << " " << name_for_layer (mp_l2n, *c); } *mp_stream << ")" << endl; m_progress.set (mp_stream->pos ()); @@ -140,10 +174,10 @@ void std_writer_impl::write (const db::Netlist *nl, const db::LayoutToNetl } any = false; - for (db::Connectivity::layer_iterator l = l2n->connectivity ().begin_layers (); l != l2n->connectivity ().end_layers (); ++l) { + for (db::Connectivity::layer_iterator l = mp_l2n->connectivity ().begin_layers (); l != mp_l2n->connectivity ().end_layers (); ++l) { - db::Connectivity::global_nets_iterator ge = l2n->connectivity ().end_global_connections (*l); - db::Connectivity::global_nets_iterator gb = l2n->connectivity ().begin_global_connections (*l); + db::Connectivity::global_nets_iterator ge = mp_l2n->connectivity ().end_global_connections (*l); + db::Connectivity::global_nets_iterator gb = mp_l2n->connectivity ().begin_global_connections (*l); if (gb != ge) { if (! any) { if (! Keys::is_short ()) { @@ -151,9 +185,9 @@ void std_writer_impl::write (const db::Netlist *nl, const db::LayoutToNetl } any = true; } - *mp_stream << indent << Keys::global_key << "(" << name_for_layer (l2n, *l); + *mp_stream << indent << Keys::global_key << "(" << name_for_layer (mp_l2n, *l); for (db::Connectivity::global_nets_iterator g = gb; g != ge; ++g) { - *mp_stream << " " << tl::to_word_or_quoted_string (l2n->connectivity ().global_net_name (*g)); + *mp_stream << " " << tl::to_word_or_quoted_string (mp_l2n->connectivity ().global_net_name (*g)); } *mp_stream << ")" << endl; m_progress.set (mp_stream->pos ()); @@ -163,9 +197,9 @@ void std_writer_impl::write (const db::Netlist *nl, const db::LayoutToNetl } - if (nl->begin_device_classes () != nl->end_device_classes () && ! Keys::is_short ()) { + if (mp_netlist->begin_device_classes () != mp_netlist->end_device_classes () && ! Keys::is_short ()) { *mp_stream << endl << indent << "# Device class section" << endl; - for (db::Netlist::const_device_class_iterator c = nl->begin_device_classes (); c != nl->end_device_classes (); ++c) { + for (db::Netlist::const_device_class_iterator c = mp_netlist->begin_device_classes (); c != mp_netlist->end_device_classes (); ++c) { db::DeviceClassTemplateBase *temp = db::DeviceClassTemplateBase::is_a (c.operator-> ()); if (temp) { *mp_stream << indent << Keys::class_key << "(" << tl::to_word_or_quoted_string (c->name ()) << " " << tl::to_word_or_quoted_string (temp->name ()) << ")" << endl; @@ -174,14 +208,14 @@ void std_writer_impl::write (const db::Netlist *nl, const db::LayoutToNetl } } - if (nl->begin_device_abstracts () != nl->end_device_abstracts () && ! Keys::is_short ()) { + if (mp_netlist->begin_device_abstracts () != mp_netlist->end_device_abstracts () && ! Keys::is_short ()) { *mp_stream << endl << indent << "# Device abstracts section" << endl; *mp_stream << indent << "# Device abstracts list the pin shapes of the devices." << endl; } - for (db::Netlist::const_abstract_model_iterator m = nl->begin_device_abstracts (); m != nl->end_device_abstracts (); ++m) { + for (db::Netlist::const_abstract_model_iterator m = mp_netlist->begin_device_abstracts (); m != mp_netlist->end_device_abstracts (); ++m) { if (m->device_class ()) { *mp_stream << indent << Keys::device_key << "(" << tl::to_word_or_quoted_string (m->name ()) << " " << tl::to_word_or_quoted_string (m->device_class ()->name ()) << endl; - write (l2n, *m, indent); + write (*m, indent); *mp_stream << indent << ")" << endl; m_progress.set (mp_stream->pos ()); } @@ -191,10 +225,10 @@ void std_writer_impl::write (const db::Netlist *nl, const db::LayoutToNetl *mp_stream << endl << indent << "# Circuit section" << endl; *mp_stream << indent << "# Circuits are the hierarchical building blocks of the netlist." << endl; } - for (db::Netlist::const_bottom_up_circuit_iterator i = nl->begin_bottom_up (); i != nl->end_bottom_up (); ++i) { + for (db::Netlist::const_bottom_up_circuit_iterator i = mp_netlist->begin_bottom_up (); i != mp_netlist->end_bottom_up (); ++i) { const db::Circuit *x = i.operator-> (); *mp_stream << indent << Keys::circuit_key << "(" << tl::to_word_or_quoted_string (x->name ()) << endl; - write (nl, l2n, *x, indent, net2id_per_circuit); + write (*x, indent, net2id_per_circuit); *mp_stream << indent << ")" << endl; m_progress.set (mp_stream->pos ()); } @@ -243,7 +277,7 @@ void write_points (tl::OutputStream &stream, const T &poly, const Tr &tr, db::Po } template -void std_writer_impl::write (const db::Netlist *netlist, const db::LayoutToNetlist *l2n, const db::Circuit &circuit, const std::string &indent, std::map > *net2id_per_circuit) +void std_writer_impl::write (const db::Circuit &circuit, const std::string &indent, std::map > *net2id_per_circuit) { if (circuit.boundary ().vertices () > 0) { @@ -298,14 +332,14 @@ void std_writer_impl::write (const db::Netlist *netlist, const db::LayoutT if (circuit.begin_nets () != circuit.end_nets ()) { if (! Keys::is_short ()) { - if (l2n) { + if (mp_l2n) { *mp_stream << endl << indent << indent1 << "# Nets with their geometries" << endl; } else { *mp_stream << endl << indent << indent1 << "# Nets" << endl; } } for (db::Circuit::const_net_iterator n = circuit.begin_nets (); n != circuit.end_nets (); ++n) { - write (netlist, l2n, *n, (*net2id) [n.operator-> ()], indent); + write (*n, (*net2id) [n.operator-> ()], indent); m_progress.set (mp_stream->pos ()); } } @@ -336,7 +370,7 @@ void std_writer_impl::write (const db::Netlist *netlist, const db::LayoutT *mp_stream << endl << indent << indent1 << "# Devices and their connections" << endl; } for (db::Circuit::const_device_iterator d = circuit.begin_devices (); d != circuit.end_devices (); ++d) { - write (l2n, *d, *net2id, indent); + write (*d, *net2id, indent); m_progress.set (mp_stream->pos ()); } } @@ -346,7 +380,7 @@ void std_writer_impl::write (const db::Netlist *netlist, const db::LayoutT *mp_stream << endl << indent << indent1 << "# Subcircuits and their connections" << endl; } for (db::Circuit::const_subcircuit_iterator x = circuit.begin_subcircuits (); x != circuit.end_subcircuits (); ++x) { - write (l2n, *x, *net2id, indent); + write (*x, *net2id, indent); m_progress.set (mp_stream->pos ()); } } @@ -393,15 +427,21 @@ void std_writer_impl::write (const db::PolygonRef *s, const db::ICplxTrans } template -void std_writer_impl::write (const db::Netlist *netlist, const db::LayoutToNetlist *l2n, const db::Net &net, unsigned int id, const std::string &indent) +bool std_writer_impl::new_cell (cell_index_type ci) const { - const db::hier_clusters &clusters = l2n->net_clusters (); + return ! (mp_netlist->circuit_by_cell_index (ci) || mp_netlist->device_abstract_by_cell_index (ci)); +} + +template +void std_writer_impl::write (const db::Net &net, unsigned int id, const std::string &indent) +{ + const db::hier_clusters &clusters = mp_l2n->net_clusters (); const db::Circuit *circuit = net.circuit (); - const db::Connectivity &conn = l2n->connectivity (); + const db::Connectivity &conn = mp_l2n->connectivity (); bool any = false; - if (l2n) { + if (mp_l2n) { reset_geometry_ref (); @@ -410,13 +450,13 @@ void std_writer_impl::write (const db::Netlist *netlist, const db::LayoutT db::cell_index_type cci = circuit->cell_index (); db::cell_index_type prev_ci = cci; - for (db::recursive_cluster_shape_iterator si (clusters, *l, cci, net.cluster_id ()); ! si.at_end (); ) { + for (db::recursive_cluster_shape_iterator si (clusters, *l, cci, net.cluster_id (), this); ! si.at_end (); ) { // NOTE: we don't recursive into circuits which will later be output. However, as circuits may // vanish in "purge" but the clusters will still be there we need to recursive into clusters from // unknown cells. db::cell_index_type ci = si.cell_index (); - if (ci != prev_ci && ci != cci && (netlist->circuit_by_cell_index (ci) || netlist->device_abstract_by_cell_index (ci))) { + if (ci != prev_ci && ci != cci && (mp_netlist->circuit_by_cell_index (ci) || mp_netlist->device_abstract_by_cell_index (ci))) { si.skip_cell (); @@ -439,7 +479,7 @@ void std_writer_impl::write (const db::Netlist *netlist, const db::LayoutT } *mp_stream << indent << indent2; - write (si.operator-> (), si.trans (), name_for_layer (l2n, *l), true); + write (si.operator-> (), si.trans (), name_for_layer (mp_l2n, *l), true); *mp_stream << endl; m_progress.set (mp_stream->pos ()); @@ -477,7 +517,7 @@ void std_writer_impl::write (const db::Netlist *netlist, const db::LayoutT } template -void std_writer_impl::write (const db::LayoutToNetlist *l2n, const db::SubCircuit &subcircuit, std::map &net2id, const std::string &indent) +void std_writer_impl::write (const db::SubCircuit &subcircuit, std::map &net2id, const std::string &indent) { *mp_stream << indent << indent1 << Keys::circuit_key << "(" << tl::to_string (subcircuit.id ()); *mp_stream << " " << tl::to_word_or_quoted_string (subcircuit.circuit_ref ()->name ()); @@ -486,7 +526,7 @@ void std_writer_impl::write (const db::LayoutToNetlist *l2n, const db::Sub *mp_stream << " " << Keys::name_key << "(" << tl::to_word_or_quoted_string (subcircuit.name ()) << ")"; } - if (l2n) { + if (mp_l2n) { *mp_stream << " "; write (subcircuit.trans ()); } @@ -526,12 +566,12 @@ void std_writer_impl::write (const db::LayoutToNetlist *l2n, const db::Sub } template -void std_writer_impl::write (const db::LayoutToNetlist *l2n, const db::DeviceAbstract &device_abstract, const std::string &indent) +void std_writer_impl::write (const db::DeviceAbstract &device_abstract, const std::string &indent) { const std::vector &td = device_abstract.device_class ()->terminal_definitions (); - const db::hier_clusters &clusters = l2n->net_clusters (); - const db::Connectivity &conn = l2n->connectivity (); + const db::hier_clusters &clusters = mp_l2n->net_clusters (); + const db::Connectivity &conn = mp_l2n->connectivity (); for (std::vector::const_iterator t = td.begin (); t != td.end (); ++t) { @@ -551,7 +591,7 @@ void std_writer_impl::write (const db::LayoutToNetlist *l2n, const db::Dev for (db::local_cluster::shape_iterator s = lc.begin (*l); ! s.at_end (); ++s) { *mp_stream << indent << indent2; - write (s.operator-> (), db::ICplxTrans (), name_for_layer (l2n, *l), true); + write (s.operator-> (), db::ICplxTrans (), name_for_layer (mp_l2n, *l), true); *mp_stream << endl; m_progress.set (mp_stream->pos ()); @@ -598,7 +638,7 @@ void std_writer_impl::write (const db::DCplxTrans &tr) } template -void std_writer_impl::write (const db::LayoutToNetlist * /*l2n*/, const db::Device &device, std::map &net2id, const std::string &indent) +void std_writer_impl::write (const db::Device &device, std::map &net2id, const std::string &indent) { tl_assert (device.device_class () != 0); const std::vector &td = device.device_class ()->terminal_definitions (); diff --git a/src/db/db/dbLayoutToNetlistWriter.h b/src/db/db/dbLayoutToNetlistWriter.h index 4e259bc7d..c2bf1bad1 100644 --- a/src/db/db/dbLayoutToNetlistWriter.h +++ b/src/db/db/dbLayoutToNetlistWriter.h @@ -27,6 +27,7 @@ #include "dbPoint.h" #include "dbTrans.h" #include "dbPolygon.h" +#include "dbHierNetworkProcessor.h" #include "tlStream.h" #include "tlProgress.h" @@ -46,23 +47,15 @@ namespace l2n_std_format template class std_writer_impl + : private db::CircuitCallback { public: std_writer_impl (tl::OutputStream &stream, double dbu, const std::string &progress_description = std::string ()); void write (const db::LayoutToNetlist *l2n); + void write (const db::Netlist *netlist, const db::LayoutToNetlist *l2n, bool nested, std::map > *net2id_per_circuit); protected: - void write (const db::Netlist *netlist, const db::LayoutToNetlist *l2n, bool nested, std::map > *net2id_per_circuit); - void write (const db::Netlist *netlist, const db::LayoutToNetlist *l2n, const db::Circuit &circuit, const std::string &indent, std::map > *net2id_per_circuit); - void write (const db::Netlist *netlist, const db::LayoutToNetlist *l2n, const db::Net &net, unsigned int id, const std::string &indent); - void write (const db::LayoutToNetlist *l2n, const db::SubCircuit &subcircuit, std::map &net2id, const std::string &indent); - void write (const db::LayoutToNetlist *l2n, const db::Device &device, std::map &net2id, const std::string &indent); - void write (const db::LayoutToNetlist *l2n, const db::DeviceAbstract &device_abstract, const std::string &indent); - void write (const db::PolygonRef *s, const db::ICplxTrans &tr, const std::string &lname, bool relative); - void write (const db::DCplxTrans &trans); - void reset_geometry_ref (); - tl::OutputStream &stream () { return *mp_stream; @@ -72,7 +65,22 @@ private: tl::OutputStream *mp_stream; db::Point m_ref; double m_dbu; + const db::Netlist *mp_netlist; + const db::LayoutToNetlist *mp_l2n; tl::AbsoluteProgress m_progress; + + void write (bool nested, std::map > *net2id_per_circuit); + void write (const db::Circuit &circuit, const std::string &indent, std::map > *net2id_per_circuit); + void write (const db::Net &net, unsigned int id, const std::string &indent); + void write (const db::SubCircuit &subcircuit, std::map &net2id, const std::string &indent); + void write (const db::Device &device, std::map &net2id, const std::string &indent); + void write (const db::DeviceAbstract &device_abstract, const std::string &indent); + void write (const db::PolygonRef *s, const db::ICplxTrans &tr, const std::string &lname, bool relative); + void write (const db::DCplxTrans &trans); + void reset_geometry_ref (); + + // implementation of CircuitCallback + bool new_cell (cell_index_type ci) const; }; } diff --git a/src/db/unit_tests/dbLayoutToNetlistReaderTests.cc b/src/db/unit_tests/dbLayoutToNetlistReaderTests.cc index cc3c0fb90..b17f83219 100644 --- a/src/db/unit_tests/dbLayoutToNetlistReaderTests.cc +++ b/src/db/unit_tests/dbLayoutToNetlistReaderTests.cc @@ -101,7 +101,7 @@ TEST(1_ReaderBasic) std::vector nets; nets.push_back (l2n.netlist ()->circuit_by_name ("RINGO")->net_by_name ("VSS")); - nets.push_back (l2n.netlist ()->circuit_by_name ("RINGO")->net_by_name ("VDD")); + nets.push_back (l2n.netlist ()->circuit_by_name ("RINGO")->net_by_name ("FB")); db::CellMapping cm = l2n.cell_mapping_into (ly2, top2, nets); diff --git a/testdata/algo/l2n_reader_au_1.gds b/testdata/algo/l2n_reader_au_1.gds index 2b85b42acbdaebea22df8912a3fc3ee4ec3ecf44..5f2f481e38037d896713fa1fe6f0eb714ef451f8 100644 GIT binary patch delta 764 zcmZo#!nnvpiGhuQi7A3XhLMT=F#`_+KLaBWTOzY3Dk+O%mxxNlA#oudyToJ{MjTou z?_$KIM~?}Yo+UVCq?mE(nZS(89u^i{da77(>3PQzi^Hc0tT<#gUt)dEgk96-a~wFO zPI2GHrE3>oB?}G%J%krBVwalyPeeQ$YqT?6;;4)AJ7y(*N}MsVCTuQUOn>I6#*RuQsm||Igedz@;&db*uAy+g^xN8 RA8%IiOJHOJ`iO;v0RZVXWV`?X literal 20994 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 bnwR$pWBKYl{#EDkk9UUW9A8#_TU+u!sqP+Y diff --git a/testdata/algo/l2n_reader_au_1b.gds b/testdata/algo/l2n_reader_au_1b.gds index 103fdb19a3bba43775c2810eb98315220ae17286..800cdab11999022edb7dd3cfabfc8eb91478fd11 100644 GIT binary patch literal 434 zcmaKoy$%6E6orr3b!W5jAEiei3WaC{K?p%H1tRepUO*uml~SYg3JRsDy@MCf(yY5C z<1b;7$u~L4H#hfyAjA-vkdS9Y5J!k_>HQ5yP`6zJ(pI=!T@*XV?WI)ToD}RNp1%C>SL}Q2Gv%E9<%=dK z@0SmZ3W2XF=fF4@_?jmF@|};0{>#$xC5j2*x-u{j0HE1+WA%PBh0|6l^iqKq8B8fFbn*@=Nw9r{P6vs}*Md(z- zMJW!VTc-}<(4m8abn4uxI!bYHPCQS(^K!11bJBay-$HoG_vQWH@68R#eTg;J>3nW; z6P+`ESYthV!``y~@c(VH(`5iE#y>iOzr6=LzSLf8XW>fdWN2KO~-B%0xvlm_8d(-uz z=7BF%uRC?OsCoYWqobqSLga+t_-<35|8 zJvkw{(Tkdw^0%Sao#WiUdfoFw^n)(Cg0UyubO+`@io){x8EvVDF2NrJJaE;BfvH z_2K=`CjL(R?VkHX&GY`Xdb8L5^8670+1*6)$9*<`t$zN3`$PN}eoVwa?z8^2`u;8V zhxjl4lZb!ZXZ>sS%a7e3;(tCA6%qfq&-&NuSC`x$;yd^z5&yW)`q%2$Z@53if8)_py_5WQ&GSRe^ZC&Q&7PC| zbY)TVeEv4{>CVybr>pwc52Bx)PUQ8E`|RsSN9J{gA-UN|SFgJsl7Fz3NdCCb=BMkD6Ox;* zENWiLU$3vbfBk{$A^A7%B$7Ywv-#<|p=D~pi_osB_ ziST}%uI$wOn8W#7)Q7M2CeMfNOGn1v?rC1~uhr9qkDq_siSeZ?J2fx)*X!pmxDTBd zU%IkW^Rj=fzJJSo=)CySm7SWG{cH8hkKKpPi!WW-sd?GIR=>LBK6GAu>B>&c%l@_c z^&9R(=f#(_3YBgswc2~d3{fKa> diff --git a/testdata/algo/l2n_reader_au_1c.gds b/testdata/algo/l2n_reader_au_1c.gds index 4ade45111ffb08d0430b72bc5eea3e7e1a489a79..ab906b784b55849a15f28bd48a4aed5a2ed1912a 100644 GIT binary patch delta 140 zcmZqL#@JM)#K6YD#1z3G!^p(`n1P3ZpMjBqg~1Y;JyA(n6syF>s736H{|Itz{-aRJ ZgI&qyHeH|^4STN58h*IcOx_d~001;+7s3Dl delta 220 zcmZpwYTCxA#K6YD#1z3G!^p(`7|7;f5Mxkh&_HHSR8khjDzPzY5&Psnoc}ie;$ULj z{DFJ{aV{3S#AF9X99kxC zVZ@pLy50zIE%z-}&s#eZT(j=&gxg zUb+1B!n_+;pU>+nl_n;S%z3PYjzRW86K-S3> z|J<)@))&ivJ6Gd}FZo+^uYA52 zr4t@4zI-dh7tR8F(R~BHM~l0KC&^!P{h96+{&}fiy1(nR)GytyXmK!Ae=I-Ky|Vvx z(LX1jpG9AuIffQrzMj(0@P)GvzSKPl-=oFdz7#*x{h~jv-QRUnyI;}bpz>Gg{%WZ- zJ2`*s$i#&7wchtLPlI|#Fa9o7`p%c9L$g)&HLI?w9BgH;zRRtw8hq5ss^Pa=Sv4xp zEcs{O?i`O}_gYys{c0<#=Fa$4E1z<5hr2JIYl=K2DmU~g2U*k=7ho^u8{cld@D51oG} z_*Q2-^$(s^{~-J=M?JD{lF#)|9-kn-;Tu{!2{-N8d52Al~r$_XY ze6D^he{n$dLG+i-dqh9U=jyM8-{PF&Fca~LbDPo=2%S1-rW8%r)Ze)MTYl3unF&SH zHJSND(>0mtMAJ2y*+kPdnaM=cHDmYuEFtguWTp~L_nAB6_i6S{S-vl`rCZV$g3KN( zH#}NAfA$DZ_FqtB_Q*`a(Bk>C$4>BL>SrbaU-224y=G<-dj0xF^xXS5dgT0xht8jw z0_O~J?#v_%Egm}mcz#^{gJ+cwa{gP6dc=Q{Z@ed_t{*c6e1iC9CShptkpFmoT>V3L zln>&6_^LGgH7Ph;L>Rh87R`kLSnLKXp_2ApWN>dBlH`&-Kqt z0iPhgnMoL0Jmf!~A6Nfeuku0s&pq^r|0JL5pP2$aL3}flFtm8ce>^{~{>9_U2l2l& z?h*em`(6IS7s857O!KY{|@ryTJL9n zP<5Ze?|xJDZ+@UYnLXf}nS`Rn!~SFWgS%CS*#f%EBor+k){o^6T~Hln3+OVFP_%eh zKbAjoS9O>zpvz1`(c)qKSpL{{)nT@PE;9*5i-+}N`BSG=huH$U%p?>o9@dZLAG)nN z%ofmPCZTBYuzoCmaX@vLEuhOxLeb)3{k8B{nMrh)O7jQgj~SRpRD1RBD40*w|6)S! U^8Bmc2OIMIoyCg0=oE|Yf0tF>hX4Qo diff --git a/testdata/algo/l2n_reader_au_1e.gds b/testdata/algo/l2n_reader_au_1e.gds index e917635e7cc90bf2567d2ccd444185d5cb7ec9da..5118338225b09afafb313ffaec6031f6775845bc 100644 GIT binary patch delta 247 zcmbObGC@L#fsKKQDS|zGOj(Sqwzib&}~i>Qkh zT$EC}up&}gyAWKI7K#=ZF1oNT#BE&!+og(NHR^G6B)yTtz?nP0H@q0IlYN2_-qO3WY1?@Z_)7ya|1FIf0N^pAM7diVK+{v-UJ z&B`yns(eGM_iRq^yK43S{ao}nR4QQcC+9jo^=S3(4a)CyxhJ+Sd19B&TTiXt;vG4w zFY0-1`BTrUqSe8~ys7gl{i~ced7b0Dd9?cC)jYm%=HQF=Yw$f<-OW8t{)*>Moj2j1 zkoo1jwj7rE<-96d9Zbw0%1@m)+5eL0AD7oJqJPAr)fX=%^izD{?1V3KZ-?*E>TYL( zpE|FiKcVNf<%*tHMXQ6#U*^0PqG)D2PuHcB+E#l~AKsTKqe|uBedoI5#POt6v^toW zG{Ju`FOTclN(JovP52*sw0bm~%}4*g1=VkRUiB5N4(9Pi@4E7P`;>2J_0H=Fen+kU z2j9v3r(}M?&QIiuf9BEZ(JAFGbES)VrT1>zChtN8=lc88?`_4tHs|KA%XyF$yjNwf zs;*gfRpH%6_8K_b$g1IcjjS4dvyoNfUpBI;w9v?^sh1mBRX*xh#h)N*o~ZKlza_7W zioAmsF6$=%(CXQr0F)>1@YQ{I=Z9x#_3Tdo&EeaeE1zHf4L^OKfD-qAU`+2b$n_iS z^~iON`x&1gwa-weLZxtjS)2h~3ae`3ZX`^NoD|Mc+*;v2r9)${x}gKu-L zX8y@5>K}wZb;cw6#{EqH^zjMe8@{2{^ZYl1Z*#6@{&K(i2jQ3RdSu_YpXr}IK0$oL zH?(@5|7P%Q&ehC6e?a|%@b^u4WZ$@->7PD6L43nEw0fTZX7Fv!2IsH&MkwA-%j=LL z2}n=7%parGvlEa|zI^_YZ?cxOJfQ?8;eX9-^$(&yIO`GraliKdHMRCi#+Rh<@D9)DPvC)~h~SLWKlQgq^y7Y}ekgzUHPr{v-?Pah`f)!~Ka@W|r1~KG`%ZX7KkjGhuY})V zPO)c?CJ=qeoWj*hDeA7Ne&hBTMcp;2gre@6R6bF6O)8zJyC#)Q)LoNGChD#!E%+>< z;9T7`sZ^rwn(|SAVS z?-BoTzxJ7!xPD{`_yqAyCShpxJpbYRu=z)BC?CZC=mn4XkNcVa$rSJj;+ssu(CT^q z!}($JkFQfci2w0LkNA)Knf}QX@Co9ZOv2FWdH%!sVe^*`Dj&rE#EeJ$$NfzIWD58M z@l7USX!Sh*;ry`qC$A_U#Q)S8kNA)Knf}QX@Co9ZOv2FWdH%!sVe^;!l@H>-eAgrX z<9?=pG6j5s_$HGuw0fTZaDLeQ^9Pg<;(y;d0o5{g#O_aDk1 z-l95W3+R$bC|W&VKa@XmQgz4{&?S>lw0gdND1Ypx>X0ppVx^iy$TOZl)u-U{yUe~LKZ)RX6}!2~ N#qvmBu77*G`yU_P@EHIA diff --git a/testdata/algo/l2n_reader_au_1f.gds b/testdata/algo/l2n_reader_au_1f.gds index 937a9bda3f6e2e0778dc2cf25367472132764eb0..6b73b8a5c113528289da51f35f47dd406cf83667 100644 GIT binary patch delta 642 zcmbPGHNj4afsKKQDS|NbK;*gqb!V!yI)8u8iWHw81b}`DaGcd@o;tZ3` z2PDe~stM6r%!u9c%{)3drH<(0l&aCkDP>}aQ|gToPN^j(iy0NM#}p46o1be)yr-Xv e(c}aznawR`)wnz(Vu90wGnNZ+>1wj>V*~)`<4|<~ literal 15632 zcmd^`Pi$1z6~-^N8QWvWr8Y*XWK3je0m&i7=C8n3_-hhS~L z-F^H|zkIm&@b8|x`r}h`ZeVqsw=S1Ed}My|(2=u;H_d$E#gm)1Z`$r$TZePGr&?Uz z<$7A2bHi&|3x)rkE)*6&3p%&zZ-qkPvZ2L6*Y;`Qx4We3+GVO$HAVSb#bXMh%R23P0-dUA=(I$$sh#%ba)%~o4}EcR?(F3B{D>IZmX|A|x6*0ny76`K zW#{q_)i+tUZrM7n2w5p-{`+BNwJT)tBj-B%<%ojaf0p%q0WIFyuS%ZZR(jqGZwUXI zTv>woAIdp77trFJ*V6p17nI-qIprH#yz7O>%eOk~tUp)Q|CIE9LFyOm{+iVPn}8PY zyiituR(^Y#zU=7Ew{>Udf6g^2=ij5nJKrwTU&im+r~K}n$~Uxl*S<1-N2&gQza#qF z3I(wH*Uqi}W%w>4wjvPiX9;Nn_R*2^9xZr7trF1H&cA!oPsa9yWj`3xI6VY`3=`!aRm$i zHK|{Az^aQB~HF! zMShof{EFSV-1L#Tv-5`!i(C6{*J6FuBo{yKU2@K)?Te=)!@T= zR&9O0o>imrY?hDR!y-M7-K}TUvCr4DYWCHzYWdS#?&SC6=b9o$&6GUL;+_4fqiy!w3cimi72kjG~b z-{BitJmr5g_*Umi>L0wM{e$o~oC(NreLmVhdHMwD8@{2%Q~fuCZ*{Ju{w=q)e-QrG zcLH);pO5xWo<2ePhHq%`RR7K3Tb(PZe{@Lu2jPz{2IROtAMKw!eS-82-_YWz{+q$K zI#*Kv*m>SZwBA$TuJ>CH?)5c{;{_La$KK}_D`NZ zLHdSoXz^74&EQ*|E2)3BSNjLy&wd<`lVi>LZ;2H)yjN&O2iY5ySn z)8hd-uFpsNCr_UseZx1jc&h(q@U6}|>o55(CcR&gp9_jiGrHQOevcN9PcyRe<@Yc7 z4rx=9Cp1kd>%Z@T_79@pKNpbxeZJKHrt$~(t3HVShMxsQ-{+(HS@~ODSA7uut^W>) zzRySXv+_sos6L4P4*8O3h`!H9^|SKFhE*R#cl-wd(f9eNepdd(Mb!t6@8^p~X}E zXXj_Df8vJnLHa-TRzUjq`Dp*l6zCJAZ)OsP7Ekq`ou94#*GLjX#dO< z=o6%GW)g-LPxYUjpRN9dmy{3E|LO67^zZZ0{+TJzCrIDSBn&N{>OVWb;rh$IQ+Hkw zzI+d0Ho^ZZGm}uXco9qcZz5mL^%TbkRrd+}|8`mZeGjxxW)JkuOhVD(>Hf3w2luNE zvjudSNhn%8t)G>@<#p9zwty}(2}O&i^|SIv?x+s41$3E7C|W$NpOrs0tUAmV&}Al} zXz{duR{q3A)nT@PE;9*5i>LLo@=tuAI?NW(WhS9$@w9$c{=$IjFk3*EnS`Rn)B26@ z>zheTPH)<4?@lbeFQRX66yKegk#`hI-VT)a3YJ#sTO~`Y#D zQNE$Y1xxv>!&^4aO$|x?KT>ReMNockHng~4kzcoOds4m~y;_fNtddV@-DSQV-KhQ? z-Kc&|tT(iH+P4F8pT!>#ztA(Zc*-~Q@eO_aLSND1Y2V=C4~Spz4K1GX?Z9pI4aBd5 z@_o+`-+aC?-*%^b+dor}Z>*9})VF;fsz3WaRKNEB#n9qu-*)d;-$49A&k)~yKB3dSE0-?sGxw76hnzU@r;w)x$9d}Eb-qUUY%sQR;cRQ=lWtf9rzz71Vb z-$49A&k)~yKBR|_5Z`=0sgG~y;}`mh>KpZ?e1nHS zAb!C&w0O$5r{7TDKz#emxq$fQ^Nsm7n)0nrs;qsVWR-lP=dJfm^{4ku^{elDh89oz z_S7Tw4a6_>4Drq9llu6EK7OIEsJ>BO$~SoU1L7BaLyM<;>p7^tf%x{R!GQSY^Nsm7 zlJc$N5B2!QD)~guTgM^wr{j?N)j4Kp@w9KPzf#{o{6fzV-+Vr)k8kMX7y63o8}+4p zgNHvLe!(}ic*?idf2waFzP0@|Ainv0W4`I%ca?rKTl)Sc-zHzK?VGNO`zC+$_b+?_ z@k`c!WN7h}Z-v5t7Vu56{e9Ilw7B>e@lEv~-Btb8XH;Jizbv2PDH${t!fA#p5*S}eqoKEewuRLGdHRo6*pU7F0LG2%lt_b3mtpB~C z#Z#_1H$SYq4P=+0XUJ~z`J_I(4SjYQ`ii>Ss4unK;IXSfb{Tv_i^pA)`p)Za1KDj~ znhwZr^Z9yQ>&WHiUYwD0ofl(zi+^<@4i;x0;sBrGQ6$@KS^2Zcbbh2pezZn@M~(c> j8u?u{^1Ex~_tePmP37l#7bbCjiht9yEHAT>wl?>FxeFh3 diff --git a/testdata/algo/l2n_writer_au.txt b/testdata/algo/l2n_writer_au.txt index 3d97644d3..b56ff4d5f 100644 --- a/testdata/algo/l2n_writer_au.txt +++ b/testdata/algo/l2n_writer_au.txt @@ -217,259 +217,41 @@ circuit(RINGO # Nets with their geometries net(1 name(FB) - rect(diff_cont (22850 2490) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -3420) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(metal1 (-24770 1310) (360 360)) + rect(metal1 (-1700 1620) (360 360)) rect(via1 (-305 -305) (250 250)) rect(via1 (24230 -250) (250 250)) rect(metal2 (-24805 -325) (24880 400)) rect(metal2_lbl (-23161 -201) (2 2)) ) net(2 name(OSC) - rect(diff_cont (24450 2890) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (-220 -2620) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(via1 (-235 1765) (250 250)) + rect(via1 (24435 1675) (250 250)) rect(metal2 (-325 -325) (400 400)) rect(metal2_lbl (-201 -201) (2 2)) ) net(3 name(VSS) - rect(diff_cont (2530 -310) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (-2860 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (5060 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (2420 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (2420 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (2420 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (2420 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (2420 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (2420 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (2420 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(metal1 (-21410 -290) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (-3000 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (4920 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (2280 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (2280 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (2280 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (2280 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (2280 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (2280 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (2280 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal2_lbl (-23941 -381) (2 2)) + rect(metal2_lbl (-1 -1) (2 2)) ) net(4 name(VDD) - rect(diff_cont (2530 2490) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (-2860 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (5060 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (2420 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (2420 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (2420 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (2420 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (2420 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (2420 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (2420 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(metal1 (-21410 -290) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (-3000 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (4920 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (2280 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (2280 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (2280 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (2280 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (2280 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (2280 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (2280 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal2_lbl (-23941 -381) (2 2)) - ) - net(5 - rect(diff_cont (20210 2490) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -3420) (220 220)) - rect(diff_cont (-220 180) (220 220)) - ) - net(6 - rect(diff_cont (17570 2490) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -3420) (220 220)) - rect(diff_cont (-220 180) (220 220)) - ) - net(7 - rect(diff_cont (14930 2490) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -3420) (220 220)) - rect(diff_cont (-220 180) (220 220)) - ) - net(8 - rect(diff_cont (12290 2490) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -3420) (220 220)) - rect(diff_cont (-220 180) (220 220)) - ) - net(9 - rect(diff_cont (9650 2490) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -3420) (220 220)) - rect(diff_cont (-220 180) (220 220)) - ) - net(10 - rect(diff_cont (7010 2490) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -3420) (220 220)) - rect(diff_cont (-220 180) (220 220)) - ) - net(11 - rect(diff_cont (4370 2490) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -3420) (220 220)) - rect(diff_cont (-220 180) (220 220)) - ) - net(12 - rect(diff_cont (1730 2490) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -3420) (220 220)) - rect(diff_cont (-220 180) (220 220)) - ) - net(13 - rect(diff_cont (-910 2490) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -3420) (220 220)) - rect(diff_cont (-220 180) (220 220)) - ) - net(14 - rect(diff_cont (690 2890) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (-220 -2620) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - ) - net(15 - rect(diff_cont (21810 2890) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (-220 -2620) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - ) - net(16 - rect(diff_cont (19170 2890) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (-220 -2620) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - ) - net(17 - rect(diff_cont (16530 2890) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (-220 -2620) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - ) - net(18 - rect(diff_cont (13890 2890) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (-220 -2620) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - ) - net(19 - rect(diff_cont (11250 2890) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (-220 -2620) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - ) - net(20 - rect(diff_cont (8610 2890) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (-220 -2620) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - ) - net(21 - rect(diff_cont (5970 2890) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (-220 -2620) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - ) - net(22 - rect(diff_cont (3330 2890) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (-220 -2620) (220 220)) - rect(diff_cont (-220 -620) (220 220)) + rect(metal2_lbl (-1 2799) (2 2)) ) + net(5) + net(6) + net(7) + net(8) + net(9) + net(10) + net(11) + net(12) + net(13) + net(14) + net(15) + net(16) + net(17) + net(18) + net(19) + net(20) + net(21) + net(22) # Outgoing pins and their connections to nets pin(1 name(FB)) diff --git a/testdata/algo/l2n_writer_au_2b.txt b/testdata/algo/l2n_writer_au_2b.txt index c232887a5..ac5c60d66 100644 --- a/testdata/algo/l2n_writer_au_2b.txt +++ b/testdata/algo/l2n_writer_au_2b.txt @@ -257,59 +257,13 @@ circuit(INV2PAIR # Nets with their geometries net(1 name(BULK)) - net(2 - rect(diff_cont (3430 3290) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -3420) (220 220)) - rect(diff_cont (-220 180) (220 220)) - ) - net(3 - rect(diff_cont (790 3290) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -3420) (220 220)) - rect(diff_cont (-220 180) (220 220)) - ) - net(4 - rect(diff_cont (4230 3290) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (-2860 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(metal1 (2350 -290) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (-3000 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - ) - net(5 - rect(diff_cont (4230 490) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (-2860 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(metal1 (2350 -290) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (-3000 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - ) - net(6 - rect(diff_cont (2390 3690) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (-220 -2620) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - ) + net(2) + net(3) + net(4) + net(5) + net(6) net(7) - net(8 - rect(diff_cont (5030 3690) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (-220 -2620) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - ) + net(8) net(9) # Outgoing pins and their connections to nets @@ -349,67 +303,19 @@ circuit(RINGO # Nets with their geometries net(1 name(FB) - rect(diff_cont (22850 2490) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -3420) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(metal1 (-24770 1310) (360 360)) + rect(metal1 (-1700 1620) (360 360)) rect(via1 (-305 -305) (250 250)) rect(via1 (24230 -250) (250 250)) rect(metal2 (-24805 -325) (24880 400)) rect(metal2_lbl (-23161 -201) (2 2)) ) net(2 name(OSC) - rect(diff_cont (24450 2890) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (-220 -2620) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(via1 (-235 1765) (250 250)) + rect(via1 (24435 1675) (250 250)) rect(metal2 (-325 -325) (400 400)) rect(metal2_lbl (-201 -201) (2 2)) ) net(3 name(VDD) - rect(diff_cont (7810 2490) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (-2860 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (-2860 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (-2860 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (12980 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (-2860 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (7700 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (-2860 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (7700 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (-2860 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(metal1 (-21410 390) (360 1120)) + rect(metal1 (-180 3100) (360 1120)) rect(metal1 (2280 -1120) (360 1120)) rect(metal1 (2280 -1120) (360 1120)) rect(metal1 (2280 -1120) (360 1120)) @@ -419,70 +325,10 @@ circuit(RINGO rect(metal1 (2280 -1120) (360 1120)) rect(metal1 (2280 -1120) (360 1120)) rect(metal1 (2280 -1120) (360 1120)) - rect(metal1 (-16200 -1800) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (-3000 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (-3000 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (-3000 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (12840 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (-3000 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (7560 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (-3000 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (7560 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (-3000 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal2_lbl (-21301 -381) (2 2)) + rect(metal2_lbl (-23941 -1421) (2 2)) ) net(4 name(VSS) - rect(diff_cont (7810 -310) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (-2860 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (-2860 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (-2860 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (12980 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (-2860 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (7700 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (-2860 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (7700 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (-2860 -220) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -220) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(metal1 (-21410 -1330) (360 1120)) + rect(metal1 (-180 -1420) (360 1120)) rect(metal1 (2280 -1120) (360 1120)) rect(metal1 (2280 -1120) (360 1120)) rect(metal1 (2280 -1120) (360 1120)) @@ -492,76 +338,16 @@ circuit(RINGO rect(metal1 (2280 -1120) (360 1120)) rect(metal1 (2280 -1120) (360 1120)) rect(metal1 (2280 -1120) (360 1120)) - rect(metal1 (-16200 -80) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (-3000 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (-3000 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (-3000 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (12840 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (-3000 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (7560 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (-3000 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (7560 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal1 (-3000 -760) (360 760)) - rect(metal1 (-360 -760) (360 760)) - rect(metal2_lbl (-21301 -381) (2 2)) - ) - net(5 - rect(diff_cont (17570 2490) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -3420) (220 220)) - rect(diff_cont (-220 180) (220 220)) - ) - net(6 - rect(diff_cont (12290 2490) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -3420) (220 220)) - rect(diff_cont (-220 180) (220 220)) - ) - net(7 - rect(diff_cont (7010 2490) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -3420) (220 220)) - rect(diff_cont (-220 180) (220 220)) - ) - net(8 - rect(diff_cont (1730 2490) (220 220)) - rect(diff_cont (-220 180) (220 220)) - rect(diff_cont (-220 -3420) (220 220)) - rect(diff_cont (-220 180) (220 220)) - ) - net(9 - rect(diff_cont (3330 2890) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (-220 -2620) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - ) - net(10 - rect(diff_cont (19170 2890) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (-220 -2620) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - ) - net(11 - rect(diff_cont (13890 2890) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (-220 -2620) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - ) - net(12 - rect(diff_cont (8610 2890) (220 220)) - rect(diff_cont (-220 -620) (220 220)) - rect(diff_cont (-220 -2620) (220 220)) - rect(diff_cont (-220 -620) (220 220)) + rect(metal2_lbl (-23941 299) (2 2)) ) + net(5) + net(6) + net(7) + net(8) + net(9) + net(10) + net(11) + net(12) # Outgoing pins and their connections to nets pin(1 name(FB)) diff --git a/testdata/algo/l2n_writer_au_2s.txt b/testdata/algo/l2n_writer_au_2s.txt index c12295b2d..e06f526ba 100644 --- a/testdata/algo/l2n_writer_au_2s.txt +++ b/testdata/algo/l2n_writer_au_2s.txt @@ -225,59 +225,13 @@ X(INV2 X(INV2PAIR R((0 -840) (5740 6220)) N(1 I(BULK)) - N(2 - R(diff_cont (3430 3290) (220 220)) - R(diff_cont (-220 180) (220 220)) - R(diff_cont (-220 -3420) (220 220)) - R(diff_cont (-220 180) (220 220)) - ) - N(3 - R(diff_cont (790 3290) (220 220)) - R(diff_cont (-220 180) (220 220)) - R(diff_cont (-220 -3420) (220 220)) - R(diff_cont (-220 180) (220 220)) - ) - N(4 - R(diff_cont (4230 3290) (220 220)) - R(diff_cont (-220 180) (220 220)) - R(diff_cont (-220 -220) (220 220)) - R(diff_cont (-220 -620) (220 220)) - R(diff_cont (-2860 -220) (220 220)) - R(diff_cont (-220 180) (220 220)) - R(diff_cont (-220 -220) (220 220)) - R(diff_cont (-220 -620) (220 220)) - R(metal1 (2350 -290) (360 760)) - R(metal1 (-360 -760) (360 760)) - R(metal1 (-3000 -760) (360 760)) - R(metal1 (-360 -760) (360 760)) - ) - N(5 - R(diff_cont (4230 490) (220 220)) - R(diff_cont (-220 180) (220 220)) - R(diff_cont (-220 -220) (220 220)) - R(diff_cont (-220 -620) (220 220)) - R(diff_cont (-2860 -220) (220 220)) - R(diff_cont (-220 180) (220 220)) - R(diff_cont (-220 -220) (220 220)) - R(diff_cont (-220 -620) (220 220)) - R(metal1 (2350 -290) (360 760)) - R(metal1 (-360 -760) (360 760)) - R(metal1 (-3000 -760) (360 760)) - R(metal1 (-360 -760) (360 760)) - ) - N(6 - R(diff_cont (2390 3690) (220 220)) - R(diff_cont (-220 -620) (220 220)) - R(diff_cont (-220 -2620) (220 220)) - R(diff_cont (-220 -620) (220 220)) - ) + N(2) + N(3) + N(4) + N(5) + N(6) N(7) - N(8 - R(diff_cont (5030 3690) (220 220)) - R(diff_cont (-220 -620) (220 220)) - R(diff_cont (-220 -2620) (220 220)) - R(diff_cont (-220 -620) (220 220)) - ) + N(8) N(9) P(1 I(BULK)) P(2) @@ -308,67 +262,19 @@ X(INV2PAIR X(RINGO R((-1720 -1640) (26880 6220)) N(1 I(FB) - R(diff_cont (22850 2490) (220 220)) - R(diff_cont (-220 180) (220 220)) - R(diff_cont (-220 -3420) (220 220)) - R(diff_cont (-220 180) (220 220)) - R(metal1 (-24770 1310) (360 360)) + R(metal1 (-1700 1620) (360 360)) R(via1 (-305 -305) (250 250)) R(via1 (24230 -250) (250 250)) R(metal2 (-24805 -325) (24880 400)) R(metal2_lbl (-23161 -201) (2 2)) ) N(2 I(OSC) - R(diff_cont (24450 2890) (220 220)) - R(diff_cont (-220 -620) (220 220)) - R(diff_cont (-220 -2620) (220 220)) - R(diff_cont (-220 -620) (220 220)) - R(via1 (-235 1765) (250 250)) + R(via1 (24435 1675) (250 250)) R(metal2 (-325 -325) (400 400)) R(metal2_lbl (-201 -201) (2 2)) ) N(3 I(VDD) - R(diff_cont (7810 2490) (220 220)) - R(diff_cont (-220 180) (220 220)) - R(diff_cont (-220 -220) (220 220)) - R(diff_cont (-220 -620) (220 220)) - R(diff_cont (-2860 -220) (220 220)) - R(diff_cont (-220 180) (220 220)) - R(diff_cont (-220 -220) (220 220)) - R(diff_cont (-220 -620) (220 220)) - R(diff_cont (-2860 -220) (220 220)) - R(diff_cont (-220 180) (220 220)) - R(diff_cont (-220 -220) (220 220)) - R(diff_cont (-220 -620) (220 220)) - R(diff_cont (-2860 -220) (220 220)) - R(diff_cont (-220 180) (220 220)) - R(diff_cont (-220 -220) (220 220)) - R(diff_cont (-220 -620) (220 220)) - R(diff_cont (12980 -220) (220 220)) - R(diff_cont (-220 180) (220 220)) - R(diff_cont (-220 -220) (220 220)) - R(diff_cont (-220 -620) (220 220)) - R(diff_cont (-2860 -220) (220 220)) - R(diff_cont (-220 180) (220 220)) - R(diff_cont (-220 -220) (220 220)) - R(diff_cont (-220 -620) (220 220)) - R(diff_cont (7700 -220) (220 220)) - R(diff_cont (-220 180) (220 220)) - R(diff_cont (-220 -220) (220 220)) - R(diff_cont (-220 -620) (220 220)) - R(diff_cont (-2860 -220) (220 220)) - R(diff_cont (-220 180) (220 220)) - R(diff_cont (-220 -220) (220 220)) - R(diff_cont (-220 -620) (220 220)) - R(diff_cont (7700 -220) (220 220)) - R(diff_cont (-220 180) (220 220)) - R(diff_cont (-220 -220) (220 220)) - R(diff_cont (-220 -620) (220 220)) - R(diff_cont (-2860 -220) (220 220)) - R(diff_cont (-220 180) (220 220)) - R(diff_cont (-220 -220) (220 220)) - R(diff_cont (-220 -620) (220 220)) - R(metal1 (-21410 390) (360 1120)) + R(metal1 (-180 3100) (360 1120)) R(metal1 (2280 -1120) (360 1120)) R(metal1 (2280 -1120) (360 1120)) R(metal1 (2280 -1120) (360 1120)) @@ -378,70 +284,10 @@ X(RINGO R(metal1 (2280 -1120) (360 1120)) R(metal1 (2280 -1120) (360 1120)) R(metal1 (2280 -1120) (360 1120)) - R(metal1 (-16200 -1800) (360 760)) - R(metal1 (-360 -760) (360 760)) - R(metal1 (-3000 -760) (360 760)) - R(metal1 (-360 -760) (360 760)) - R(metal1 (-3000 -760) (360 760)) - R(metal1 (-360 -760) (360 760)) - R(metal1 (-3000 -760) (360 760)) - R(metal1 (-360 -760) (360 760)) - R(metal1 (12840 -760) (360 760)) - R(metal1 (-360 -760) (360 760)) - R(metal1 (-3000 -760) (360 760)) - R(metal1 (-360 -760) (360 760)) - R(metal1 (7560 -760) (360 760)) - R(metal1 (-360 -760) (360 760)) - R(metal1 (-3000 -760) (360 760)) - R(metal1 (-360 -760) (360 760)) - R(metal1 (7560 -760) (360 760)) - R(metal1 (-360 -760) (360 760)) - R(metal1 (-3000 -760) (360 760)) - R(metal1 (-360 -760) (360 760)) - R(metal2_lbl (-21301 -381) (2 2)) + R(metal2_lbl (-23941 -1421) (2 2)) ) N(4 I(VSS) - R(diff_cont (7810 -310) (220 220)) - R(diff_cont (-220 180) (220 220)) - R(diff_cont (-220 -220) (220 220)) - R(diff_cont (-220 -620) (220 220)) - R(diff_cont (-2860 -220) (220 220)) - R(diff_cont (-220 180) (220 220)) - R(diff_cont (-220 -220) (220 220)) - R(diff_cont (-220 -620) (220 220)) - R(diff_cont (-2860 -220) (220 220)) - R(diff_cont (-220 180) (220 220)) - R(diff_cont (-220 -220) (220 220)) - R(diff_cont (-220 -620) (220 220)) - R(diff_cont (-2860 -220) (220 220)) - R(diff_cont (-220 180) (220 220)) - R(diff_cont (-220 -220) (220 220)) - R(diff_cont (-220 -620) (220 220)) - R(diff_cont (12980 -220) (220 220)) - R(diff_cont (-220 180) (220 220)) - R(diff_cont (-220 -220) (220 220)) - R(diff_cont (-220 -620) (220 220)) - R(diff_cont (-2860 -220) (220 220)) - R(diff_cont (-220 180) (220 220)) - R(diff_cont (-220 -220) (220 220)) - R(diff_cont (-220 -620) (220 220)) - R(diff_cont (7700 -220) (220 220)) - R(diff_cont (-220 180) (220 220)) - R(diff_cont (-220 -220) (220 220)) - R(diff_cont (-220 -620) (220 220)) - R(diff_cont (-2860 -220) (220 220)) - R(diff_cont (-220 180) (220 220)) - R(diff_cont (-220 -220) (220 220)) - R(diff_cont (-220 -620) (220 220)) - R(diff_cont (7700 -220) (220 220)) - R(diff_cont (-220 180) (220 220)) - R(diff_cont (-220 -220) (220 220)) - R(diff_cont (-220 -620) (220 220)) - R(diff_cont (-2860 -220) (220 220)) - R(diff_cont (-220 180) (220 220)) - R(diff_cont (-220 -220) (220 220)) - R(diff_cont (-220 -620) (220 220)) - R(metal1 (-21410 -1330) (360 1120)) + R(metal1 (-180 -1420) (360 1120)) R(metal1 (2280 -1120) (360 1120)) R(metal1 (2280 -1120) (360 1120)) R(metal1 (2280 -1120) (360 1120)) @@ -451,76 +297,16 @@ X(RINGO R(metal1 (2280 -1120) (360 1120)) R(metal1 (2280 -1120) (360 1120)) R(metal1 (2280 -1120) (360 1120)) - R(metal1 (-16200 -80) (360 760)) - R(metal1 (-360 -760) (360 760)) - R(metal1 (-3000 -760) (360 760)) - R(metal1 (-360 -760) (360 760)) - R(metal1 (-3000 -760) (360 760)) - R(metal1 (-360 -760) (360 760)) - R(metal1 (-3000 -760) (360 760)) - R(metal1 (-360 -760) (360 760)) - R(metal1 (12840 -760) (360 760)) - R(metal1 (-360 -760) (360 760)) - R(metal1 (-3000 -760) (360 760)) - R(metal1 (-360 -760) (360 760)) - R(metal1 (7560 -760) (360 760)) - R(metal1 (-360 -760) (360 760)) - R(metal1 (-3000 -760) (360 760)) - R(metal1 (-360 -760) (360 760)) - R(metal1 (7560 -760) (360 760)) - R(metal1 (-360 -760) (360 760)) - R(metal1 (-3000 -760) (360 760)) - R(metal1 (-360 -760) (360 760)) - R(metal2_lbl (-21301 -381) (2 2)) - ) - N(5 - R(diff_cont (17570 2490) (220 220)) - R(diff_cont (-220 180) (220 220)) - R(diff_cont (-220 -3420) (220 220)) - R(diff_cont (-220 180) (220 220)) - ) - N(6 - R(diff_cont (12290 2490) (220 220)) - R(diff_cont (-220 180) (220 220)) - R(diff_cont (-220 -3420) (220 220)) - R(diff_cont (-220 180) (220 220)) - ) - N(7 - R(diff_cont (7010 2490) (220 220)) - R(diff_cont (-220 180) (220 220)) - R(diff_cont (-220 -3420) (220 220)) - R(diff_cont (-220 180) (220 220)) - ) - N(8 - R(diff_cont (1730 2490) (220 220)) - R(diff_cont (-220 180) (220 220)) - R(diff_cont (-220 -3420) (220 220)) - R(diff_cont (-220 180) (220 220)) - ) - N(9 - R(diff_cont (3330 2890) (220 220)) - R(diff_cont (-220 -620) (220 220)) - R(diff_cont (-220 -2620) (220 220)) - R(diff_cont (-220 -620) (220 220)) - ) - N(10 - R(diff_cont (19170 2890) (220 220)) - R(diff_cont (-220 -620) (220 220)) - R(diff_cont (-220 -2620) (220 220)) - R(diff_cont (-220 -620) (220 220)) - ) - N(11 - R(diff_cont (13890 2890) (220 220)) - R(diff_cont (-220 -620) (220 220)) - R(diff_cont (-220 -2620) (220 220)) - R(diff_cont (-220 -620) (220 220)) - ) - N(12 - R(diff_cont (8610 2890) (220 220)) - R(diff_cont (-220 -620) (220 220)) - R(diff_cont (-220 -2620) (220 220)) - R(diff_cont (-220 -620) (220 220)) + R(metal2_lbl (-23941 299) (2 2)) ) + N(5) + N(6) + N(7) + N(8) + N(9) + N(10) + N(11) + N(12) P(1 I(FB)) P(2 I(OSC)) P(3 I(VDD)) diff --git a/testdata/algo/l2n_writer_au_p.oas b/testdata/algo/l2n_writer_au_p.oas index 4db5853310aeaf2d750a1848b3692c92c808cf97..24c2e239c5febead971265d79c2f75509feedbd7 100644 GIT binary patch delta 88 zcmX>kw2EiLHO9@QOsPx~Vj{OW7@3&wY4eIgSj@a4BDdKYCiAe%GT&xnm>kMJS6WQ) ifT-XB5y2CT+#DA~1Ykh$fH2eKK#up56FB&o7#INA6clU# delta 900 zcmaivziSjh6vt;~_byA~N#14hWA84>CAl8~o9vojb{5)7gtQ_AE%OfqbVFEDh9h^R z69uo3SQxOhdB_$KEUu8i`6D)`Bt?pVAyL%0o0(w-E!^V0?|hc`nK#>)UT1gqXka2uhhO$ z`~J&4dY=W8{Ig9y(s267?qM}6yOhmT1!~^Ws3K6bPBkkF)_GyDlC-rAHX(IuOwW!> z-}AtLV^a9eU`5Hg_3WrXk1lI8B2bvuXjq`;4UGx{MavrH1Hn35#=<#iLxZ_ecWAI7 z>Dx5+9hAOT1{)CU6a7}9gpiuW8&Q?;MrVQWpb@UbvH6t7HF}%W&Ph_k$1LHyNsW%< z`XGJ4&Qgc$piCXo;)H*2D6{sjWcro<$o@zFU;Dkk_1{yb-pX)c4}a?i@pjh_`t=vv z%JH^Svsypds>|O~wtvnx3Yk7R@I?>QpV+R`j`x3)d*&vG`lkKx_9S2xumV^HECEgc zjsp$?4gmH8a=<>oAwU-}2bc#e01g9=z%K1^TD(_%fTMs#z%f?$Qm6InsWczdH1|HX{DY;-4*dnQqe2*DSaIuTV`KAmWnkfCU|{2AVqj!o<6~j~ zvK2uj2R}0dgSr5Ni~x{U)?i@JdjO$p8UFu2*Z`s#SOkHXodK^M9BgbM{sBOB+(46s zK=!doF#@&o$gnzXVSoS*VI~F^p#31bxK>p#Fc_U+U_Ak$VSKP%a5F$Un4vn@!(M<@ za5H3pX&4_>2hdgqOj}`QaPe6%FihxRU`yEnreS;xGa67`%eHF;SRMBq2o2*CV>jFk zsGW>WJ5bz!%WjyPnFTda?1b^L>BHr3SST~e{XhwI%+Q9pmZ{_gN+`qlU>zK&DM<&E jc0gc`1B5;tz`$gdfuLdHKpK{oSXdYU6rfz~`T_s|XXB4{ literal 0 HcmV?d00001 diff --git a/testdata/lvs/floating.lvsdb b/testdata/lvs/floating.lvsdb index abb305d27..8dddf3ead 100644 --- a/testdata/lvs/floating.lvsdb +++ b/testdata/lvs/floating.lvsdb @@ -170,32 +170,22 @@ layout( # Nets with their geometries net(1 name('A<1>') - rect(l8 (510 3010) (180 180)) - rect(l11 (-91 -91) (2 2)) + rect(l11 (599 3099) (2 2)) ) net(2 name('A<2>') - rect(l8 (2310 3010) (180 180)) - rect(l11 (-91 -91) (2 2)) + rect(l11 (2399 3099) (2 2)) ) net(3 name('B<2>') rect(l11 (2999 3999) (2 2)) - rect(l2 (-226 1049) (425 1500)) - rect(l6 (-425 -4890) (425 950)) ) net(4 name('B<1>') rect(l11 (1199 3999) (2 2)) - rect(l2 (-226 1049) (425 1500)) - rect(l6 (-425 -4890) (425 950)) ) net(5 name(VDD) rect(l11 (1799 7199) (2 2)) - rect(l2 (299 -2151) (425 1500)) - rect(l2 (-2225 -1500) (425 1500)) ) net(6 name(VSS) rect(l11 (1799 799) (2 2)) - rect(l6 (299 859) (425 950)) - rect(l6 (-2225 -950) (425 950)) ) # Outgoing pins and their connections to nets @@ -227,33 +217,17 @@ layout( # Nets with their geometries net(1 - rect(l8 (4110 3010) (180 180)) - rect(l11 (-1190 -240) (950 300)) - rect(l2 (-1275 1800) (425 1500)) - rect(l6 (-425 -4890) (425 950)) + rect(l11 (3100 2950) (950 300)) ) net(2 name(A) - rect(l8 (510 3010) (180 180)) - rect(l11 (-91 -91) (2 2)) + rect(l11 (599 3099) (2 2)) ) net(3 name(C) - rect(l8 (2310 3010) (180 180)) - rect(l11 (-91 -91) (2 2)) - ) - net(4 name(SUBSTRATE) - rect(l6 (3900 1660) (425 950)) - rect(l6 (-2225 -950) (425 950)) - rect(l6 (-2225 -950) (425 950)) - ) - net(5 - rect(l2 (4575 5050) (425 1500)) - rect(l6 (-425 -4890) (425 950)) - ) - net(6 - rect(l2 (3900 5050) (425 1500)) - rect(l2 (-2225 -1500) (425 1500)) - rect(l2 (-2225 -1500) (425 1500)) + rect(l11 (2399 3099) (2 2)) ) + net(4 name(SUBSTRATE)) + net(5) + net(6) # Outgoing pins and their connections to nets pin(2 name(A)) diff --git a/testdata/lvs/invchain_cheat.lvsdb b/testdata/lvs/invchain_cheat.lvsdb index 5b854ca93..a661487b5 100644 --- a/testdata/lvs/invchain_cheat.lvsdb +++ b/testdata/lvs/invchain_cheat.lvsdb @@ -116,36 +116,12 @@ J( ) X(INV2 R((0 0) (5500 4600)) - N(1 - R(l6 (1790 490) (220 220)) - R(l6 (-220 180) (220 220)) - R(l6 (-220 2180) (220 220)) - R(l6 (-220 180) (220 220)) - ) - N(2 - R(l6 (3490 490) (220 220)) - R(l6 (-220 180) (220 220)) - R(l6 (-220 2180) (220 220)) - R(l6 (-220 180) (220 220)) - ) + N(1) + N(2) N(3) N(4) - N(5 - R(l6 (990 3290) (220 220)) - R(l6 (-220 180) (220 220)) - R(l6 (3080 -620) (220 220)) - R(l6 (-220 180) (220 220)) - R(l8 (-3590 -690) (360 760)) - R(l8 (2940 -760) (360 760)) - ) - N(6 - R(l6 (990 490) (220 220)) - R(l6 (-220 180) (220 220)) - R(l6 (3080 -620) (220 220)) - R(l6 (-220 180) (220 220)) - R(l8 (-3590 -690) (360 760)) - R(l8 (2940 -760) (360 760)) - ) + N(5) + N(6) P(1) P(2) P(3) @@ -177,48 +153,16 @@ J( R(l11 (4829 1889) (2 2)) ) N(4 I('4') - R(l6 (990 490) (220 220)) - R(l6 (-220 180) (220 220)) - R(l6 (-220 2180) (220 220)) - R(l6 (-220 180) (220 220)) - R(l12 (-121 -1941) (2 2)) + R(l12 (1089 1969) (2 2)) ) N(5 I('6') - R(l6 (2590 490) (220 220)) - R(l6 (-220 180) (220 220)) - R(l6 (-220 2180) (220 220)) - R(l6 (-220 180) (220 220)) - R(l12 (-131 -1971) (2 2)) + R(l12 (2679 1939) (2 2)) ) N(6 I('8') - R(l6 (4290 490) (220 220)) - R(l6 (-220 180) (220 220)) - R(l6 (-220 2180) (220 220)) - R(l6 (-220 180) (220 220)) - R(l12 (-101 -1991) (2 2)) - ) - N(7 - R(l6 (1790 3290) (220 220)) - R(l6 (-220 180) (220 220)) - R(l6 (-220 -620) (220 220)) - R(l6 (-220 180) (220 220)) - R(l6 (3080 -620) (220 220)) - R(l6 (-220 180) (220 220)) - R(l8 (-3590 -690) (360 760)) - R(l8 (-360 -760) (360 760)) - R(l8 (2940 -760) (360 760)) - ) - N(8 - R(l6 (1790 490) (220 220)) - R(l6 (-220 180) (220 220)) - R(l6 (-220 -620) (220 220)) - R(l6 (-220 180) (220 220)) - R(l6 (3080 -620) (220 220)) - R(l6 (-220 180) (220 220)) - R(l8 (-3590 -690) (360 760)) - R(l8 (-360 -760) (360 760)) - R(l8 (2940 -760) (360 760)) + R(l12 (4409 1919) (2 2)) ) + N(7) + N(8) P(1 I('3')) P(2 I('5')) P(3 I('7')) @@ -254,99 +198,39 @@ J( ) N(2 R(l3 (445 805) (480 550)) - R(l6 (-1435 -1665) (220 220)) - R(l6 (-220 180) (220 220)) - R(l6 (-220 2180) (220 220)) - R(l6 (-220 180) (220 220)) - R(l7 (780 -2120) (220 220)) + R(l7 (-435 -365) (220 220)) R(l8 (-1065 -285) (1105 350)) ) N(3 R(l3 (1345 925) (1945 350)) - R(l6 (-2200 -1585) (220 220)) - R(l6 (-220 180) (220 220)) - R(l6 (-220 2180) (220 220)) - R(l6 (-220 180) (220 220)) - R(l7 (95 -2120) (220 220)) + R(l7 (-1885 -285) (220 220)) R(l8 (-295 -370) (440 520)) ) N(4 R(l3 (3745 805) (480 550)) - R(l6 (-1435 -1665) (220 220)) - R(l6 (-220 180) (220 220)) - R(l6 (-220 2180) (220 220)) - R(l6 (-220 180) (220 220)) - R(l7 (780 -2120) (220 220)) + R(l7 (-435 -365) (220 220)) R(l8 (-1065 -285) (1105 350)) ) N(5 R(l3 (4645 925) (1945 350)) - R(l6 (-2200 -1585) (220 220)) - R(l6 (-220 180) (220 220)) - R(l6 (-220 2180) (220 220)) - R(l6 (-220 180) (220 220)) - R(l7 (95 -2120) (220 220)) + R(l7 (-1885 -285) (220 220)) R(l8 (-295 -370) (440 520)) ) N(6 R(l3 (7045 805) (480 550)) - R(l6 (-1435 -1665) (220 220)) - R(l6 (-220 180) (220 220)) - R(l6 (-220 2180) (220 220)) - R(l6 (-220 180) (220 220)) - R(l7 (780 -2120) (220 220)) + R(l7 (-435 -365) (220 220)) R(l8 (-1065 -285) (1105 350)) ) N(7 I(OUT) - R(l6 (7690 -310) (220 220)) - R(l6 (-220 180) (220 220)) - R(l6 (-220 2180) (220 220)) - R(l6 (-220 180) (220 220)) - R(l12 (-121 -2011) (2 2)) + R(l12 (7789 1099) (2 2)) ) N(8 I(VSS) - R(l6 (6890 -310) (220 220)) - R(l6 (-220 180) (220 220)) - R(l6 (-3520 -620) (220 220)) - R(l6 (-220 180) (220 220)) - R(l6 (3080 -620) (220 220)) - R(l6 (-220 180) (220 220)) - R(l6 (-6820 -620) (220 220)) - R(l6 (-220 180) (220 220)) - R(l6 (-220 -620) (220 220)) - R(l6 (-220 180) (220 220)) - R(l6 (3080 -620) (220 220)) - R(l6 (-220 180) (220 220)) - R(l8 (3010 -690) (360 760)) - R(l8 (-3660 -760) (360 760)) - R(l8 (2940 -760) (360 760)) - R(l8 (-6960 -760) (360 760)) - R(l8 (-360 -760) (360 760)) - R(l8 (2940 -760) (360 760)) - R(l13 (2719 -381) (2 2)) + R(l13 (6599 -1) (2 2)) R(l13 (-3302 -2) (2 2)) R(l13 (-3302 -2) (2 2)) ) N(9 I(VDD) - R(l6 (6890 2490) (220 220)) - R(l6 (-220 180) (220 220)) - R(l6 (-3520 -620) (220 220)) - R(l6 (-220 180) (220 220)) - R(l6 (3080 -620) (220 220)) - R(l6 (-220 180) (220 220)) - R(l6 (-6820 -620) (220 220)) - R(l6 (-220 180) (220 220)) - R(l6 (-220 -620) (220 220)) - R(l6 (-220 180) (220 220)) - R(l6 (3080 -620) (220 220)) - R(l6 (-220 180) (220 220)) - R(l8 (3010 -690) (360 760)) - R(l8 (-3660 -760) (360 760)) - R(l8 (2940 -760) (360 760)) - R(l8 (-6960 -760) (360 760)) - R(l8 (-360 -760) (360 760)) - R(l8 (2940 -760) (360 760)) - R(l13 (-581 -381) (2 2)) + R(l13 (3299 2799) (2 2)) R(l13 (3298 -2) (2 2)) R(l13 (-6602 -2) (2 2)) ) diff --git a/testdata/lvs/ringo_layout_var.lvsdb.1 b/testdata/lvs/ringo_layout_var.lvsdb.1 index 35a52028c..167b0044a 100644 --- a/testdata/lvs/ringo_layout_var.lvsdb.1 +++ b/testdata/lvs/ringo_layout_var.lvsdb.1 @@ -449,70 +449,37 @@ layout( # Nets with their geometries net(1 - rect(l8 (4710 3010) (180 180)) - rect(l11 (-850 -240) (610 300)) - rect(l2 (-2550 1800) (425 1500)) - rect(l2 (950 -1500) (425 1500)) - rect(l6 (-425 -4890) (425 950)) + rect(l11 (4040 2950) (610 300)) ) net(2 - rect(l8 (6510 3010) (180 180)) - rect(l11 (-1140 -240) (900 300)) - rect(l2 (-1275 1800) (425 1500)) - rect(l6 (-425 -4890) (425 950)) + rect(l11 (5550 2950) (900 300)) ) net(3 - rect(l8 (8310 3010) (180 180)) - rect(l11 (-1140 -240) (900 300)) - rect(l2 (-1275 1800) (425 1500)) - rect(l6 (-425 -4890) (425 950)) + rect(l11 (7350 2950) (900 300)) ) net(4 - rect(l8 (10110 3010) (180 180)) - rect(l11 (-1140 -240) (900 300)) - rect(l2 (-1275 1800) (425 1500)) - rect(l6 (-425 -4890) (425 950)) + rect(l11 (9150 2950) (900 300)) ) net(5 - rect(l8 (11910 3010) (180 180)) - rect(l11 (-1140 -240) (900 300)) - rect(l2 (-1275 1800) (425 1500)) - rect(l6 (-425 -4890) (425 950)) + rect(l11 (10950 2950) (900 300)) ) net(6 - rect(l8 (13710 3010) (180 180)) - rect(l11 (-1140 -240) (900 300)) - rect(l2 (-1275 1800) (425 1500)) - rect(l6 (-425 -4890) (425 950)) + rect(l11 (12750 2950) (900 300)) ) net(7 - rect(l8 (15510 3010) (180 180)) - rect(l11 (-1140 -240) (900 300)) - rect(l2 (-1275 1800) (425 1500)) - rect(l6 (-425 -4890) (425 950)) + rect(l11 (14550 2950) (900 300)) ) net(8 - rect(l8 (17310 3010) (180 180)) - rect(l11 (-1140 -240) (900 300)) - rect(l2 (-1275 1800) (425 1500)) - rect(l6 (-425 -4890) (425 950)) + rect(l11 (16350 2950) (900 300)) ) net(9 - rect(l8 (19110 3010) (180 180)) - rect(l11 (-1140 -240) (900 300)) - rect(l2 (-1275 1800) (425 1500)) - rect(l6 (-425 -4890) (425 950)) + rect(l11 (18150 2950) (900 300)) ) net(10 - rect(l8 (20910 3010) (180 180)) - rect(l11 (-1140 -240) (900 300)) - rect(l2 (-1275 1800) (425 1500)) - rect(l6 (-425 -4890) (425 950)) + rect(l11 (19950 2950) (900 300)) ) net(11 name(FB) - rect(l8 (22710 3010) (180 180)) - rect(l8 (-19700 720) (180 180)) - rect(l11 (18380 -1140) (900 300)) + rect(l11 (21750 2950) (900 300)) rect(l11 (-19530 590) (320 320)) rect(l11 (17820 -320) (320 320)) rect(l12 (-18400 -260) (200 200)) @@ -521,8 +488,6 @@ layout( rect(l13 (-17921 -201) (2 2)) rect(l13 (-221 -201) (400 400)) rect(l13 (17740 -400) (400 400)) - rect(l2 (-245 850) (425 1500)) - rect(l6 (-425 -4890) (425 950)) ) net(12 name(VDD) rect(l3 (500 4500) (1400 3500)) @@ -544,20 +509,7 @@ layout( rect(l11 (-750 -1450) (300 1400)) rect(l11 (-101 -351) (2 2)) rect(l11 (549 -401) (600 800)) - rect(l2 (-23025 -2550) (425 1500)) - rect(l2 (-400 -1500) (425 1500)) - rect(l2 (1275 -1500) (425 1500)) - rect(l2 (1375 -1500) (425 1500)) - rect(l2 (1375 -1500) (425 1500)) - rect(l2 (1375 -1500) (425 1500)) - rect(l2 (1375 -1500) (425 1500)) - rect(l2 (1375 -1500) (425 1500)) - rect(l2 (1375 -1500) (425 1500)) - rect(l2 (1375 -1500) (425 1500)) - rect(l2 (1375 -1500) (425 1500)) - rect(l2 (3175 -1500) (425 1500)) - rect(l2 (-2225 -1500) (425 1500)) - rect(l9 (-20175 -450) (500 1500)) + rect(l9 (-24850 -1500) (500 1500)) rect(l9 (22900 -1500) (500 1500)) ) net(13 name(OUT) @@ -565,12 +517,9 @@ layout( rect(l12 (-260 -260) (200 200)) rect(l13 (-101 -101) (2 2)) rect(l13 (-201 -201) (400 400)) - rect(l2 (-625 850) (425 1500)) - rect(l6 (-425 -4890) (425 950)) ) net(14 name(ENABLE) - rect(l8 (2510 3010) (180 180)) - rect(l11 (-250 -250) (320 320)) + rect(l11 (2440 2940) (320 320)) rect(l12 (-260 -260) (200 200)) rect(l13 (-101 -101) (2 2)) rect(l13 (-201 -201) (400 400)) @@ -591,19 +540,7 @@ layout( rect(l11 (-750 -1450) (1200 800)) rect(l11 (-551 -401) (2 2)) rect(l11 (549 -401) (600 800)) - rect(l6 (-23700 460) (425 950)) - rect(l6 (1975 -950) (425 950)) - rect(l6 (1375 -950) (425 950)) - rect(l6 (1375 -950) (425 950)) - rect(l6 (1375 -950) (425 950)) - rect(l6 (1375 -950) (425 950)) - rect(l6 (1375 -950) (425 950)) - rect(l6 (1375 -950) (425 950)) - rect(l6 (1375 -950) (425 950)) - rect(l6 (1375 -950) (425 950)) - rect(l6 (3175 -950) (425 950)) - rect(l6 (-2225 -950) (425 950)) - rect(l10 (-20175 -2210) (500 1500)) + rect(l10 (-24850 -800) (500 1500)) rect(l10 (22900 -1500) (500 1500)) ) diff --git a/testdata/lvs/ringo_layout_var.lvsdb.2 b/testdata/lvs/ringo_layout_var.lvsdb.2 deleted file mode 100644 index f7ed4588d..000000000 --- a/testdata/lvs/ringo_layout_var.lvsdb.2 +++ /dev/null @@ -1,1076 +0,0 @@ -#%lvsdb-klayout - -# Layout -layout( - top(RINGO) - unit(0.001) - - # Layer section - # This section lists the mask layers (drawing or derived) and their connections. - - # Mask layers - layer(l3 '1/0') - layer(l4 '5/0') - layer(l8 '8/0') - layer(l11 '9/0') - layer(l12 '10/0') - layer(l13 '11/0') - layer(l7) - layer(l2) - layer(l9) - layer(l6) - layer(l10) - - # Mask layer connectivity - connect(l3 l3 l9) - connect(l4 l4 l8) - connect(l8 l4 l8 l11 l2 l9 l6 l10) - connect(l11 l8 l11 l12) - connect(l12 l11 l12 l13) - connect(l13 l12 l13) - connect(l7 l7) - connect(l2 l8 l2) - connect(l9 l3 l8 l9) - connect(l6 l8 l6) - connect(l10 l8 l10) - - # Global nets and connectivity - global(l7 SUBSTRATE) - global(l10 SUBSTRATE) - - # Device class section - class(PMOS MOS4) - class(NMOS MOS4) - - # Device abstracts section - # Device abstracts list the pin shapes of the devices. - device(D$PMOS PMOS - terminal(S - rect(l2 (-550 -750) (425 1500)) - ) - terminal(G - rect(l4 (-125 -750) (250 1500)) - ) - terminal(D - rect(l2 (125 -750) (450 1500)) - ) - terminal(B - rect(l3 (-125 -750) (250 1500)) - ) - ) - device(D$PMOS$1 PMOS - terminal(S - rect(l2 (-575 -750) (450 1500)) - ) - terminal(G - rect(l4 (-125 -750) (250 1500)) - ) - terminal(D - rect(l2 (125 -750) (425 1500)) - ) - terminal(B - rect(l3 (-125 -750) (250 1500)) - ) - ) - device(D$PMOS$2 PMOS - terminal(S - rect(l2 (-550 -750) (425 1500)) - ) - terminal(G - rect(l4 (-125 -750) (250 1500)) - ) - terminal(D - rect(l2 (125 -750) (425 1500)) - ) - terminal(B - rect(l3 (-125 -750) (250 1500)) - ) - ) - device(D$NMOS NMOS - terminal(S - rect(l6 (-550 -475) (425 950)) - ) - terminal(G - rect(l4 (-125 -475) (250 950)) - ) - terminal(D - rect(l6 (125 -475) (450 950)) - ) - terminal(B - rect(l7 (-125 -475) (250 950)) - ) - ) - device(D$NMOS$1 NMOS - terminal(S - rect(l6 (-575 -475) (450 950)) - ) - terminal(G - rect(l4 (-125 -475) (250 950)) - ) - terminal(D - rect(l6 (125 -475) (425 950)) - ) - terminal(B - rect(l7 (-125 -475) (250 950)) - ) - ) - device(D$NMOS$2 NMOS - terminal(S - rect(l6 (-550 -475) (425 950)) - ) - terminal(G - rect(l4 (-125 -475) (250 950)) - ) - terminal(D - rect(l6 (125 -475) (425 950)) - ) - terminal(B - rect(l7 (-125 -475) (250 950)) - ) - ) - - # Circuit section - # Circuits are the hierarchical building blocks of the netlist. - circuit(ND2X1 - - # Circuit boundary - rect((-100 400) (2600 7600)) - - # Nets with their geometries - net(1 name(VDD) - rect(l8 (1110 5160) (180 180)) - rect(l8 (-180 920) (180 180)) - rect(l8 (-180 -730) (180 180)) - rect(l11 (-240 -790) (300 1700)) - rect(l11 (-1350 0) (2400 800)) - rect(l11 (-1151 -401) (2 2)) - rect(l2 (-276 -2151) (425 1500)) - rect(l2 (-400 -1500) (425 1500)) - ) - net(2 name(OUT) - rect(l8 (1810 1770) (180 180)) - rect(l8 (-180 370) (180 180)) - rect(l8 (-1580 3760) (180 180)) - rect(l8 (-180 -730) (180 180)) - rect(l8 (-180 -730) (180 180)) - rect(l8 (1220 920) (180 180)) - rect(l8 (-180 -1280) (180 180)) - rect(l8 (-180 370) (180 180)) - polygon(l11 (-240 -4180) (0 1390) (490 0) (0 -300) (-190 0) (0 -1090)) - rect(l11 (-110 1390) (300 1400)) - polygon(l11 (-1890 0) (0 600) (300 0) (0 -300) (1590 0) (0 -300)) - rect(l11 (-141 -501) (2 2)) - rect(l11 (-1751 1099) (300 1400)) - rect(l11 (1100 -1700) (300 300)) - rect(l11 (-300 0) (300 1400)) - rect(l2 (-375 -1450) (425 1500)) - rect(l2 (-1800 -1500) (425 1500)) - rect(l6 (950 -4890) (425 950)) - ) - net(3 name(VSS) - rect(l8 (410 1770) (180 180)) - rect(l8 (-180 370) (180 180)) - rect(l11 (-240 -1300) (300 1360)) - rect(l11 (-650 -2160) (2400 800)) - rect(l11 (-1151 -401) (2 2)) - rect(l6 (-951 859) (425 950)) - ) - net(4 - rect(l3 (-100 4500) (2600 3500)) - ) - net(5 name(B) - rect(l4 (1425 2860) (250 1940)) - rect(l4 (-345 -950) (300 300)) - rect(l4 (-205 650) (250 2000)) - rect(l4 (-250 -2000) (250 2000)) - rect(l4 (-250 -5390) (250 1450)) - rect(l8 (-285 1050) (180 180)) - rect(l11 (-71 -91) (2 2)) - rect(l11 (-171 -151) (300 300)) - ) - net(6 name(A) - rect(l4 (725 2860) (250 1940)) - rect(l4 (-325 -1850) (300 300)) - rect(l4 (-225 1550) (250 2000)) - rect(l4 (-250 -2000) (250 2000)) - rect(l4 (-250 -5390) (250 1450)) - rect(l8 (-265 150) (180 180)) - rect(l11 (-91 -91) (2 2)) - rect(l11 (-151 -151) (300 300)) - ) - net(7 name(SUBSTRATE)) - net(8 - rect(l6 (975 1660) (425 950)) - rect(l6 (-400 -950) (425 950)) - ) - - # Outgoing pins and their connections to nets - pin(1 name(VDD)) - pin(2 name(OUT)) - pin(3 name(VSS)) - pin(4) - pin(5 name(B)) - pin(6 name(A)) - pin(7 name(SUBSTRATE)) - - # Devices and their connections - device(1 D$PMOS - location(850 5800) - param(L 0.25) - param(W 1.5) - param(AS 0.6375) - param(AD 0.3375) - param(PS 3.85) - param(PD 1.95) - terminal(S 2) - terminal(G 6) - terminal(D 1) - terminal(B 4) - ) - device(2 D$PMOS$1 - location(1550 5800) - param(L 0.25) - param(W 1.5) - param(AS 0.3375) - param(AD 0.6375) - param(PS 1.95) - param(PD 3.85) - terminal(S 1) - terminal(G 5) - terminal(D 2) - terminal(B 4) - ) - device(3 D$NMOS - location(850 2135) - param(L 0.25) - param(W 0.95) - param(AS 0.40375) - param(AD 0.21375) - param(PS 2.75) - param(PD 1.4) - terminal(S 3) - terminal(G 6) - terminal(D 8) - terminal(B 7) - ) - device(4 D$NMOS$1 - location(1550 2135) - param(L 0.25) - param(W 0.95) - param(AS 0.21375) - param(AD 0.40375) - param(PS 1.4) - param(PD 2.75) - terminal(S 8) - terminal(G 5) - terminal(D 2) - terminal(B 7) - ) - - ) - circuit(INVX1 - - # Circuit boundary - rect((-100 400) (2000 7600)) - - # Nets with their geometries - net(1 name(VDD) - rect(l8 (410 6260) (180 180)) - rect(l8 (-180 -730) (180 180)) - rect(l8 (-180 -730) (180 180)) - rect(l11 (-240 -240) (300 1400)) - rect(l11 (-650 300) (1800 800)) - rect(l11 (-1450 -1100) (300 300)) - rect(l11 (299 399) (2 2)) - rect(l2 (-651 -2151) (425 1500)) - ) - net(2 name(OUT) - rect(l8 (1110 5160) (180 180)) - rect(l8 (-180 920) (180 180)) - rect(l8 (-180 -730) (180 180)) - rect(l8 (-180 -4120) (180 180)) - rect(l8 (-180 370) (180 180)) - rect(l11 (-240 -790) (300 4790)) - rect(l11 (-151 -2501) (2 2)) - rect(l2 (-226 1049) (425 1500)) - rect(l6 (-425 -4890) (425 950)) - ) - net(3 name(VSS) - rect(l8 (410 1770) (180 180)) - rect(l8 (-180 370) (180 180)) - rect(l11 (-240 -1300) (300 1360)) - rect(l11 (-650 -2160) (1800 800)) - rect(l11 (-851 -401) (2 2)) - rect(l6 (-651 859) (425 950)) - ) - net(4 - rect(l3 (-100 4500) (2000 3500)) - ) - net(5 name(IN) - rect(l4 (725 2860) (250 1940)) - rect(l4 (-525 -1850) (300 300)) - rect(l4 (-25 1550) (250 2000)) - rect(l4 (-250 -2000) (250 2000)) - rect(l4 (-250 -5390) (250 1450)) - rect(l8 (-465 150) (180 180)) - rect(l11 (-91 -91) (2 2)) - rect(l11 (-151 -151) (300 300)) - ) - net(6 name(SUBSTRATE)) - - # Outgoing pins and their connections to nets - pin(1 name(VDD)) - pin(2 name(OUT)) - pin(3 name(VSS)) - pin(4) - pin(5 name(IN)) - pin(6 name(SUBSTRATE)) - - # Devices and their connections - device(1 D$PMOS$2 - location(850 5800) - param(L 0.25) - param(W 1.5) - param(AS 0.6375) - param(AD 0.6375) - param(PS 3.85) - param(PD 3.85) - terminal(S 1) - terminal(G 5) - terminal(D 2) - terminal(B 4) - ) - device(2 D$NMOS$2 - location(850 2135) - param(L 0.25) - param(W 0.95) - param(AS 0.40375) - param(AD 0.40375) - param(PS 2.75) - param(PD 2.75) - terminal(S 3) - terminal(G 5) - terminal(D 2) - terminal(B 6) - ) - - ) - circuit(INVX1B - - # Circuit boundary - rect((-100 400) (2000 7600)) - - # Nets with their geometries - net(1 name(VDD) - rect(l8 (410 6260) (180 180)) - rect(l8 (-180 -730) (180 180)) - rect(l8 (-180 -730) (180 180)) - rect(l11 (-240 -240) (300 1400)) - rect(l11 (-650 300) (1800 800)) - rect(l11 (-1450 -1100) (300 300)) - rect(l11 (299 399) (2 2)) - rect(l2 (-651 -2151) (425 1500)) - ) - net(2 name(OUT) - rect(l8 (1110 5160) (180 180)) - rect(l8 (-180 920) (180 180)) - rect(l8 (-180 -730) (180 180)) - rect(l8 (-180 -4120) (180 180)) - rect(l8 (-180 370) (180 180)) - rect(l11 (-240 -790) (300 4790)) - rect(l11 (-151 -2501) (2 2)) - rect(l2 (-226 1049) (425 1500)) - rect(l6 (-425 -4890) (425 950)) - ) - net(3 name(VSS) - rect(l8 (410 1770) (180 180)) - rect(l8 (-180 370) (180 180)) - rect(l11 (-240 -1300) (300 1360)) - rect(l11 (-650 -2160) (1800 800)) - rect(l11 (-851 -401) (2 2)) - rect(l6 (-651 859) (425 950)) - ) - net(4 - rect(l3 (-100 4500) (2000 3500)) - ) - net(5 name(IN) - rect(l4 (725 2860) (250 1940)) - rect(l4 (-525 -1850) (300 300)) - rect(l4 (-25 1550) (250 2000)) - rect(l4 (-250 -2000) (250 2000)) - rect(l4 (-250 -5390) (250 1450)) - rect(l8 (-465 150) (180 180)) - rect(l11 (-91 -91) (2 2)) - rect(l11 (-151 -151) (300 300)) - ) - net(6 name(SUBSTRATE)) - - # Outgoing pins and their connections to nets - pin(1 name(VDD)) - pin(2 name(OUT)) - pin(3 name(VSS)) - pin(4) - pin(5 name(IN)) - pin(6 name(SUBSTRATE)) - - # Devices and their connections - device(1 D$PMOS$2 - location(850 5800) - param(L 0.25) - param(W 1.5) - param(AS 0.6375) - param(AD 0.6375) - param(PS 3.85) - param(PD 3.85) - terminal(S 1) - terminal(G 5) - terminal(D 2) - terminal(B 4) - ) - device(2 D$NMOS$2 - location(850 2135) - param(L 0.25) - param(W 0.95) - param(AS 0.40375) - param(AD 0.40375) - param(PS 2.75) - param(PD 2.75) - terminal(S 3) - terminal(G 5) - terminal(D 2) - terminal(B 6) - ) - - ) - circuit(RINGO - - # Circuit boundary - rect((0 350) (25800 7650)) - - # Nets with their geometries - net(1 - rect(l8 (4710 3010) (180 180)) - rect(l11 (-850 -240) (610 300)) - rect(l2 (-1175 1800) (425 1500)) - rect(l2 (-1800 -1500) (425 1500)) - rect(l6 (950 -4890) (425 950)) - ) - net(2 - rect(l8 (6510 3010) (180 180)) - rect(l11 (-1140 -240) (900 300)) - rect(l2 (-1275 1800) (425 1500)) - rect(l6 (-425 -4890) (425 950)) - ) - net(3 - rect(l8 (8310 3010) (180 180)) - rect(l11 (-1140 -240) (900 300)) - rect(l2 (-1275 1800) (425 1500)) - rect(l6 (-425 -4890) (425 950)) - ) - net(4 - rect(l8 (10110 3010) (180 180)) - rect(l11 (-1140 -240) (900 300)) - rect(l2 (-1275 1800) (425 1500)) - rect(l6 (-425 -4890) (425 950)) - ) - net(5 - rect(l8 (11910 3010) (180 180)) - rect(l11 (-1140 -240) (900 300)) - rect(l2 (-1275 1800) (425 1500)) - rect(l6 (-425 -4890) (425 950)) - ) - net(6 - rect(l8 (13710 3010) (180 180)) - rect(l11 (-1140 -240) (900 300)) - rect(l2 (-1275 1800) (425 1500)) - rect(l6 (-425 -4890) (425 950)) - ) - net(7 - rect(l8 (15510 3010) (180 180)) - rect(l11 (-1140 -240) (900 300)) - rect(l2 (-1275 1800) (425 1500)) - rect(l6 (-425 -4890) (425 950)) - ) - net(8 - rect(l8 (17310 3010) (180 180)) - rect(l11 (-1140 -240) (900 300)) - rect(l2 (-1275 1800) (425 1500)) - rect(l6 (-425 -4890) (425 950)) - ) - net(9 - rect(l8 (19110 3010) (180 180)) - rect(l11 (-1140 -240) (900 300)) - rect(l2 (-1275 1800) (425 1500)) - rect(l6 (-425 -4890) (425 950)) - ) - net(10 - rect(l8 (20910 3010) (180 180)) - rect(l11 (-1140 -240) (900 300)) - rect(l2 (-1275 1800) (425 1500)) - rect(l6 (-425 -4890) (425 950)) - ) - net(11 name(FB) - rect(l8 (22710 3010) (180 180)) - rect(l8 (-19700 720) (180 180)) - rect(l11 (18380 -1140) (900 300)) - rect(l11 (-19530 590) (320 320)) - rect(l11 (17820 -320) (320 320)) - rect(l12 (-18400 -260) (200 200)) - rect(l12 (17940 -200) (200 200)) - rect(l13 (-18040 -300) (17740 400)) - rect(l13 (-17921 -201) (2 2)) - rect(l13 (-221 -201) (400 400)) - rect(l13 (17740 -400) (400 400)) - rect(l2 (-245 850) (425 1500)) - rect(l6 (-425 -4890) (425 950)) - ) - net(12 name(VDD) - rect(l3 (500 4500) (1400 3500)) - rect(l3 (-1900 -3500) (600 3500)) - rect(l3 (23300 -3500) (1400 3500)) - rect(l3 (-100 -3500) (600 3500)) - rect(l8 (-24690 -1240) (180 180)) - rect(l8 (-180 370) (180 180)) - rect(l8 (-180 -1280) (180 180)) - rect(l8 (23220 370) (180 180)) - rect(l8 (-180 370) (180 180)) - rect(l8 (-180 -1280) (180 180)) - rect(l11 (-21741 859) (2 2)) - rect(l11 (-2351 -451) (1200 800)) - rect(l11 (-750 -1450) (300 1400)) - rect(l11 (-101 -351) (2 2)) - rect(l11 (-1251 -401) (600 800)) - rect(l11 (23400 -800) (1200 800)) - rect(l11 (-750 -1450) (300 1400)) - rect(l11 (-101 -351) (2 2)) - rect(l11 (549 -401) (600 800)) - rect(l2 (-23025 -2550) (425 1500)) - rect(l2 (-400 -1500) (425 1500)) - rect(l2 (1275 -1500) (425 1500)) - rect(l2 (1375 -1500) (425 1500)) - rect(l2 (1375 -1500) (425 1500)) - rect(l2 (1375 -1500) (425 1500)) - rect(l2 (1375 -1500) (425 1500)) - rect(l2 (1375 -1500) (425 1500)) - rect(l2 (1375 -1500) (425 1500)) - rect(l2 (1375 -1500) (425 1500)) - rect(l2 (1375 -1500) (425 1500)) - rect(l2 (3175 -1500) (425 1500)) - rect(l2 (-2225 -1500) (425 1500)) - rect(l9 (-20175 -450) (500 1500)) - rect(l9 (22900 -1500) (500 1500)) - ) - net(13 name(OUT) - rect(l11 (23440 3840) (320 320)) - rect(l12 (-260 -260) (200 200)) - rect(l13 (-101 -101) (2 2)) - rect(l13 (-201 -201) (400 400)) - rect(l2 (-625 850) (425 1500)) - rect(l6 (-425 -4890) (425 950)) - ) - net(14 name(ENABLE) - rect(l8 (2510 3010) (180 180)) - rect(l11 (-250 -250) (320 320)) - rect(l12 (-260 -260) (200 200)) - rect(l13 (-101 -101) (2 2)) - rect(l13 (-201 -201) (400 400)) - ) - net(15 name(VSS) - rect(l8 (1110 1610) (180 180)) - rect(l8 (-180 -1280) (180 180)) - rect(l8 (-180 370) (180 180)) - rect(l8 (23220 370) (180 180)) - rect(l8 (-180 -1280) (180 180)) - rect(l8 (-180 370) (180 180)) - rect(l11 (-21741 -391) (2 2)) - rect(l11 (-1901 -401) (300 1400)) - rect(l11 (-750 -1450) (1200 800)) - rect(l11 (-551 -401) (2 2)) - rect(l11 (-1251 -401) (600 800)) - rect(l11 (23850 -750) (300 1400)) - rect(l11 (-750 -1450) (1200 800)) - rect(l11 (-551 -401) (2 2)) - rect(l11 (549 -401) (600 800)) - rect(l6 (-23700 460) (425 950)) - rect(l6 (1975 -950) (425 950)) - rect(l6 (1375 -950) (425 950)) - rect(l6 (1375 -950) (425 950)) - rect(l6 (1375 -950) (425 950)) - rect(l6 (1375 -950) (425 950)) - rect(l6 (1375 -950) (425 950)) - rect(l6 (1375 -950) (425 950)) - rect(l6 (1375 -950) (425 950)) - rect(l6 (1375 -950) (425 950)) - rect(l6 (3175 -950) (425 950)) - rect(l6 (-2225 -950) (425 950)) - rect(l10 (-20175 -2210) (500 1500)) - rect(l10 (22900 -1500) (500 1500)) - ) - - # Outgoing pins and their connections to nets - pin(11 name(FB)) - pin(12 name(VDD)) - pin(13 name(OUT)) - pin(14 name(ENABLE)) - pin(15 name(VSS)) - - # Subcircuits and their connections - circuit(1 ND2X1 location(1800 0) - pin(0 12) - pin(1 1) - pin(2 15) - pin(3 12) - pin(4 11) - pin(5 14) - pin(6 15) - ) - circuit(2 INVX1B location(4200 0) - pin(0 12) - pin(1 2) - pin(2 15) - pin(3 12) - pin(4 1) - pin(5 15) - ) - circuit(3 INVX1 location(6000 0) - pin(0 12) - pin(1 3) - pin(2 15) - pin(3 12) - pin(4 2) - pin(5 15) - ) - circuit(4 INVX1B location(7800 0) - pin(0 12) - pin(1 4) - pin(2 15) - pin(3 12) - pin(4 3) - pin(5 15) - ) - circuit(5 INVX1 location(9600 0) - pin(0 12) - pin(1 5) - pin(2 15) - pin(3 12) - pin(4 4) - pin(5 15) - ) - circuit(6 INVX1B location(11400 0) - pin(0 12) - pin(1 6) - pin(2 15) - pin(3 12) - pin(4 5) - pin(5 15) - ) - circuit(7 INVX1 location(13200 0) - pin(0 12) - pin(1 7) - pin(2 15) - pin(3 12) - pin(4 6) - pin(5 15) - ) - circuit(8 INVX1 location(15000 0) - pin(0 12) - pin(1 8) - pin(2 15) - pin(3 12) - pin(4 7) - pin(5 15) - ) - circuit(9 INVX1 location(16800 0) - pin(0 12) - pin(1 9) - pin(2 15) - pin(3 12) - pin(4 8) - pin(5 15) - ) - circuit(10 INVX1 location(18600 0) - pin(0 12) - pin(1 10) - pin(2 15) - pin(3 12) - pin(4 9) - pin(5 15) - ) - circuit(11 INVX1 location(20400 0) - pin(0 12) - pin(1 11) - pin(2 15) - pin(3 12) - pin(4 10) - pin(5 15) - ) - circuit(12 INVX1 location(22200 0) - pin(0 12) - pin(1 13) - pin(2 15) - pin(3 12) - pin(4 11) - pin(5 15) - ) - - ) -) - -# Reference netlist -reference( - - # Device class section - class(PMOS MOS4) - class(NMOS MOS4) - - # Circuit section - # Circuits are the hierarchical building blocks of the netlist. - circuit(ND2X1 - - # Nets - net(1 name(VDD)) - net(2 name(OUT)) - net(3 name(VSS)) - net(4 name(NWELL)) - net(5 name(B)) - net(6 name(A)) - net(7 name(BULK)) - net(8 name('1')) - - # Outgoing pins and their connections to nets - pin(1 name(VDD)) - pin(2 name(OUT)) - pin(3 name(VSS)) - pin(4 name(NWELL)) - pin(5 name(B)) - pin(6 name(A)) - pin(7 name(BULK)) - - # Devices and their connections - device(1 PMOS - name($1) - param(L 0.25) - param(W 1.5) - param(AS 0) - param(AD 0) - param(PS 0) - param(PD 0) - terminal(S 2) - terminal(G 6) - terminal(D 1) - terminal(B 4) - ) - device(2 PMOS - name($2) - param(L 0.25) - param(W 1.5) - param(AS 0) - param(AD 0) - param(PS 0) - param(PD 0) - terminal(S 1) - terminal(G 5) - terminal(D 2) - terminal(B 4) - ) - device(3 NMOS - name($3) - param(L 0.25) - param(W 0.95) - param(AS 0) - param(AD 0) - param(PS 0) - param(PD 0) - terminal(S 3) - terminal(G 6) - terminal(D 8) - terminal(B 7) - ) - device(4 NMOS - name($4) - param(L 0.25) - param(W 0.95) - param(AS 0) - param(AD 0) - param(PS 0) - param(PD 0) - terminal(S 8) - terminal(G 5) - terminal(D 2) - terminal(B 7) - ) - - ) - circuit(INVX1 - - # Nets - net(1 name(VDD)) - net(2 name(OUT)) - net(3 name(VSS)) - net(4 name(NWELL)) - net(5 name(IN)) - net(6 name(BULK)) - - # Outgoing pins and their connections to nets - pin(1 name(VDD)) - pin(2 name(OUT)) - pin(3 name(VSS)) - pin(4 name(NWELL)) - pin(5 name(IN)) - pin(6 name(BULK)) - - # Devices and their connections - device(1 PMOS - name($1) - param(L 0.25) - param(W 1.5) - param(AS 0) - param(AD 0) - param(PS 0) - param(PD 0) - terminal(S 1) - terminal(G 5) - terminal(D 2) - terminal(B 4) - ) - device(2 NMOS - name($2) - param(L 0.25) - param(W 0.95) - param(AS 0) - param(AD 0) - param(PS 0) - param(PD 0) - terminal(S 3) - terminal(G 5) - terminal(D 2) - terminal(B 6) - ) - - ) - circuit(RINGO - - # Nets - net(1 name(VSS)) - net(2 name(VDD)) - net(3 name(FB)) - net(4 name(ENABLE)) - net(5 name(OUT)) - net(6 name('1')) - net(7 name('2')) - net(8 name('3')) - net(9 name('4')) - net(10 name('5')) - net(11 name('6')) - net(12 name('7')) - net(13 name('8')) - net(14 name('9')) - net(15 name('10')) - - # Outgoing pins and their connections to nets - pin(1 name(VSS)) - pin(2 name(VDD)) - pin(3 name(FB)) - pin(4 name(ENABLE)) - pin(5 name(OUT)) - - # Subcircuits and their connections - circuit(1 ND2X1 name($1) - pin(0 2) - pin(1 6) - pin(2 1) - pin(3 2) - pin(4 3) - pin(5 4) - pin(6 1) - ) - circuit(2 INVX1 name($2) - pin(0 2) - pin(1 7) - pin(2 1) - pin(3 2) - pin(4 6) - pin(5 1) - ) - circuit(3 INVX1 name($3) - pin(0 2) - pin(1 8) - pin(2 1) - pin(3 2) - pin(4 7) - pin(5 1) - ) - circuit(4 INVX1 name($4) - pin(0 2) - pin(1 9) - pin(2 1) - pin(3 2) - pin(4 8) - pin(5 1) - ) - circuit(5 INVX1 name($5) - pin(0 2) - pin(1 10) - pin(2 1) - pin(3 2) - pin(4 9) - pin(5 1) - ) - circuit(6 INVX1 name($6) - pin(0 2) - pin(1 11) - pin(2 1) - pin(3 2) - pin(4 10) - pin(5 1) - ) - circuit(7 INVX1 name($7) - pin(0 2) - pin(1 12) - pin(2 1) - pin(3 2) - pin(4 11) - pin(5 1) - ) - circuit(8 INVX1 name($8) - pin(0 2) - pin(1 13) - pin(2 1) - pin(3 2) - pin(4 12) - pin(5 1) - ) - circuit(9 INVX1 name($9) - pin(0 2) - pin(1 14) - pin(2 1) - pin(3 2) - pin(4 13) - pin(5 1) - ) - circuit(10 INVX1 name($10) - pin(0 2) - pin(1 15) - pin(2 1) - pin(3 2) - pin(4 14) - pin(5 1) - ) - circuit(11 INVX1 name($11) - pin(0 2) - pin(1 3) - pin(2 1) - pin(3 2) - pin(4 15) - pin(5 1) - ) - circuit(12 INVX1 name($12) - pin(0 2) - pin(1 5) - pin(2 1) - pin(3 2) - pin(4 3) - pin(5 1) - ) - - ) -) - -# Cross reference -xref( - circuit(INVX1 INVX1 match - xref( - net(4 4 match) - net(5 5 match) - net(2 2 match) - net(6 6 match) - net(1 1 match) - net(3 3 match) - pin(3 3 match) - pin(4 4 match) - pin(1 1 match) - pin(5 5 match) - pin(0 0 match) - pin(2 2 match) - device(2 2 match) - device(1 1 match) - ) - ) - circuit(INVX1B INVX1 match - xref( - net(4 4 match) - net(5 5 match) - net(2 2 match) - net(6 6 match) - net(1 1 match) - net(3 3 match) - pin(3 3 match) - pin(4 4 match) - pin(1 1 match) - pin(5 5 match) - pin(0 0 match) - pin(2 2 match) - device(2 2 match) - device(1 1 match) - ) - ) - circuit(ND2X1 ND2X1 match - xref( - net(8 8 match) - net(4 4 match) - net(6 6 match) - net(5 5 match) - net(2 2 match) - net(7 7 match) - net(1 1 match) - net(3 3 match) - pin(3 3 match) - pin(5 5 match) - pin(4 4 match) - pin(1 1 match) - pin(6 6 match) - pin(0 0 match) - pin(2 2 match) - device(3 3 match) - device(4 4 match) - device(1 1 match) - device(2 2 match) - ) - ) - circuit(RINGO RINGO match - xref( - net(1 6 match) - net(10 15 match) - net(2 7 match) - net(3 8 match) - net(4 9 match) - net(5 10 match) - net(6 11 match) - net(7 12 match) - net(8 13 match) - net(9 14 match) - net(14 4 match) - net(11 3 match) - net(13 5 match) - net(12 2 match) - net(15 1 match) - pin(3 3 match) - pin(0 2 match) - pin(2 4 match) - pin(1 1 match) - pin(4 0 match) - circuit(3 3 match) - circuit(5 5 match) - circuit(7 7 match) - circuit(8 8 match) - circuit(9 9 match) - circuit(10 10 match) - circuit(11 11 match) - circuit(12 12 match) - circuit(2 2 match) - circuit(4 4 match) - circuit(6 6 match) - circuit(1 1 match) - ) - ) -)