From c33fd40ec90775aaf1a5297b2574c23af04cfefa Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sat, 4 May 2019 23:06:18 +0200 Subject: [PATCH] Switched l2n format to relative mode by default (relative mode is an option and maybe shorter) --- src/db/db/dbLayoutToNetlistFormatDefs.h | 10 +- src/db/db/dbLayoutToNetlistReader.cc | 68 ++- src/db/db/dbLayoutToNetlistReader.h | 4 + src/db/db/dbLayoutToNetlistWriter.cc | 67 +- .../dbLayoutToNetlistReaderTests.cc | 64 ++ testdata/algo/l2n_writer_au.txt | 474 +++++++------- testdata/algo/l2n_writer_au_2.txt | 568 ++++++++--------- testdata/algo/l2n_writer_au_2_abs.txt | 578 ++++++++++++++++++ testdata/algo/l2n_writer_au_2s.txt | 568 ++++++++--------- testdata/algo/l2n_writer_au_s.txt | 474 +++++++------- 10 files changed, 1781 insertions(+), 1094 deletions(-) create mode 100644 testdata/algo/l2n_writer_au_2_abs.txt diff --git a/src/db/db/dbLayoutToNetlistFormatDefs.h b/src/db/db/dbLayoutToNetlistFormatDefs.h index 5ef78581c..6d29c676e 100644 --- a/src/db/db/dbLayoutToNetlistFormatDefs.h +++ b/src/db/db/dbLayoutToNetlistFormatDefs.h @@ -78,10 +78,14 @@ namespace db * * [geometry-def]: * - * polygon( ...) - defines a polygon [short key: Q] + * polygon( [coord] ...) - defines a polygon [short key: Q] * "*" for or means take previous - * rect( ) - * - defines a rectangle [short key: R] + * rect( [coord] [coord]) - defines a rectangle [short key: R] + * coordinates are bottom/left and top/right + * [coord] + * - absolute coordinates + * ( ) - relative coordinates (reference is reset to 0,0 + * for each net or terminal in device abstract) * * [device-abstract-def]: * diff --git a/src/db/db/dbLayoutToNetlistReader.cc b/src/db/db/dbLayoutToNetlistReader.cc index 2fe2f04f3..cb649c419 100644 --- a/src/db/db/dbLayoutToNetlistReader.cc +++ b/src/db/db/dbLayoutToNetlistReader.cc @@ -22,7 +22,6 @@ #include "dbLayoutToNetlistReader.h" #include "dbLayoutToNetlistFormatDefs.h" -#include "dbLayoutToNetlist.h" namespace db { @@ -362,6 +361,28 @@ void LayoutToNetlistStandardReader::do_read (db::LayoutToNetlist *l2n) l2n->set_netlist_extracted (); } +db::Point +LayoutToNetlistStandardReader::read_point () +{ + db::Coord x = m_ref.x (), y = m_ref.y (); + + if (test ("(")) { + x += read_coord (); + y += read_coord (); + expect (")"); + } else { + if (! test ("*")) { + x = read_coord (); + } + if (! test ("*")) { + y = read_coord (); + } + } + + m_ref = db::Point (x, y); + return m_ref; +} + std::pair LayoutToNetlistStandardReader::read_geometry (db::LayoutToNetlist *l2n) { @@ -374,11 +395,9 @@ LayoutToNetlistStandardReader::read_geometry (db::LayoutToNetlist *l2n) read_word_or_quoted (lname); unsigned int lid = l2n->layer_of (layer_by_name (l2n, lname)); - db::Coord l = read_coord (); - db::Coord b = read_coord (); - db::Coord r = read_coord (); - db::Coord t = read_coord (); - db::Box box (l, b, r, t); + db::Point lb = read_point (); + db::Point rt = read_point (); + db::Box box (lb, rt); br.done (); @@ -392,18 +411,9 @@ LayoutToNetlistStandardReader::read_geometry (db::LayoutToNetlist *l2n) unsigned int lid = l2n->layer_of (layer_by_name (l2n, lname)); std::vector pt; - - db::Coord x = 0, y = 0; while (br) { - if (! test ("*")) { - x = read_coord (); - } - if (! test ("*")) { - y = read_coord (); - } - pt.push_back (db::Point (x, y)); + pt.push_back (read_point ()); } - br.done (); db::Polygon poly; @@ -415,6 +425,18 @@ LayoutToNetlistStandardReader::read_geometry (db::LayoutToNetlist *l2n) } } +void +LayoutToNetlistStandardReader::read_geometries (Brace &br, db::LayoutToNetlist *l2n, db::local_cluster &lc, db::Cell &cell) +{ + m_ref = db::Point (); + + while (br) { + std::pair pr = read_geometry (l2n); + lc.add (pr.second, pr.first); + cell.shapes (pr.first).insert (pr.second); + } +} + void LayoutToNetlistStandardReader::read_net (db::LayoutToNetlist *l2n, db::Circuit *circuit, std::map &id2net) { @@ -440,12 +462,7 @@ LayoutToNetlistStandardReader::read_net (db::LayoutToNetlist *l2n, db::Circuit * net->set_cluster_id (lc.id ()); db::Cell &cell = l2n->internal_layout ()->cell (circuit->cell_index ()); - - while (br) { - std::pair pr = read_geometry (l2n); - lc.add (pr.second, pr.first); - cell.shapes (pr.first).insert (pr.second); - } + read_geometries (br, l2n, lc, cell); br.done (); } @@ -723,12 +740,7 @@ LayoutToNetlistStandardReader::read_abstract_terminal (db::LayoutToNetlist *l2n, dm->set_cluster_id_for_terminal (tid, lc.id ()); db::Cell &cell = l2n->internal_layout ()->cell (dm->cell_index ()); - - while (br) { - std::pair pr = read_geometry (l2n); - lc.add (pr.second, pr.first); - cell.shapes (pr.first).insert (pr.second); - } + read_geometries (br, l2n, lc, cell); br.done (); } diff --git a/src/db/db/dbLayoutToNetlistReader.h b/src/db/db/dbLayoutToNetlistReader.h index 04d2f8e74..49ff51c97 100644 --- a/src/db/db/dbLayoutToNetlistReader.h +++ b/src/db/db/dbLayoutToNetlistReader.h @@ -26,6 +26,7 @@ #include "dbCommon.h" #include "dbPolygon.h" #include "dbCell.h" +#include "dbLayoutToNetlist.h" #include "tlStream.h" namespace db { @@ -84,6 +85,7 @@ private: std::string m_path; std::string m_line; tl::Extractor m_ex; + db::Point m_ref; void do_read (db::LayoutToNetlist *l2n); @@ -102,6 +104,8 @@ private: db::CellInstArray read_subcircuit (db::LayoutToNetlist *l2n, db::Circuit *circuit, std::list &refs, std::map &id2net); void read_abstract_terminal (db::LayoutToNetlist *l2n, db::DeviceAbstract *dm, db::DeviceClass *dc); std::pair read_geometry (db::LayoutToNetlist *l2n); + void read_geometries (Brace &br, db::LayoutToNetlist *l2n, db::local_cluster &lc, db::Cell &cell); + db::Point read_point (); }; } diff --git a/src/db/db/dbLayoutToNetlistWriter.cc b/src/db/db/dbLayoutToNetlistWriter.cc index 03233afd2..0368a5073 100644 --- a/src/db/db/dbLayoutToNetlistWriter.cc +++ b/src/db/db/dbLayoutToNetlistWriter.cc @@ -63,13 +63,15 @@ public: private: tl::OutputStream *mp_stream; + db::Point m_ref; void write (const db::LayoutToNetlist *l2n, const db::Circuit &circuit); void write (const db::LayoutToNetlist *l2n, const db::Net &net, unsigned int id); void write (const db::LayoutToNetlist *l2n, const db::SubCircuit &subcircuit, std::map &net2id); void write (const db::LayoutToNetlist *l2n, const db::Device &device, std::map &net2id); void write (const db::LayoutToNetlist *l2n, const db::DeviceAbstract &device_abstract); - void write (const db::PolygonRef *s, const db::ICplxTrans &tr, const std::string &lname); + void write (const db::PolygonRef *s, const db::ICplxTrans &tr, const std::string &lname, bool relative); + void reset_geometry_ref (); }; static const std::string endl ("\n"); @@ -254,39 +256,56 @@ void std_writer_impl::write (const db::LayoutToNetlist *l2n, const db::Cir } } -template -void write_points (tl::OutputStream &stream, const T &poly, const Tr &tr) +void write_point (tl::OutputStream &stream, const db::Point &pt, db::Point &ref, bool relative) { - db::Coord x = 0, y = 0; - bool first = true; - for (typename T::polygon_contour_iterator c = poly.begin_hull (); c != poly.end_hull (); ++c) { - - typename T::point_type pt = tr * *c; + if (relative) { + stream << "("; + stream << pt.x () - ref.x (); stream << " "; + stream << pt.y () - ref.y (); + stream << ")"; - if (first || pt.x () != x) { + } else { + + if (pt.x () == 0 || pt.x () != ref.x ()) { stream << pt.x (); } else { stream << "*"; } - stream << " "; - - if (first || pt.y () != y) { + if (pt.y () == 0 || pt.y () != ref.y ()) { stream << pt.y (); } else { stream << "*"; } - first = false; - x = pt.x (); y = pt.y (); + } + + ref = pt; +} + +template +void write_points (tl::OutputStream &stream, const T &poly, const Tr &tr, db::Point &ref, bool relative) +{ + for (typename T::polygon_contour_iterator c = poly.begin_hull (); c != poly.end_hull (); ++c) { + + typename T::point_type pt = tr * *c; + + stream << " "; + write_point (stream, pt, ref, relative); } } template -void std_writer_impl::write (const db::PolygonRef *s, const db::ICplxTrans &tr, const std::string &lname) +void std_writer_impl::reset_geometry_ref () +{ + m_ref = db::Point (); +} + +template +void std_writer_impl::write (const db::PolygonRef *s, const db::ICplxTrans &tr, const std::string &lname, bool relative) { db::ICplxTrans t = tr * db::ICplxTrans (s->trans ()); @@ -295,8 +314,10 @@ void std_writer_impl::write (const db::PolygonRef *s, const db::ICplxTrans db::Box box = t * poly.box (); *mp_stream << Keys::rect_key << "(" << lname; - *mp_stream << " " << box.left () << " " << box.bottom (); - *mp_stream << " " << box.right () << " " << box.top (); + *mp_stream << " "; + write_point (*mp_stream, box.p1 (), m_ref, relative); + *mp_stream << " "; + write_point (*mp_stream, box.p2 (), m_ref, relative); *mp_stream << ")"; } else { @@ -304,9 +325,9 @@ void std_writer_impl::write (const db::PolygonRef *s, const db::ICplxTrans *mp_stream << Keys::polygon_key << "(" << lname; if (poly.holes () > 0) { db::SimplePolygon sp (poly); - write_points (*mp_stream, sp, t); + write_points (*mp_stream, sp, t, m_ref, relative); } else { - write_points (*mp_stream, poly, t); + write_points (*mp_stream, poly, t, m_ref, relative); } *mp_stream << ")"; @@ -326,6 +347,8 @@ void std_writer_impl::write (const db::LayoutToNetlist *l2n, const db::Net bool any = false; + reset_geometry_ref (); + for (db::Connectivity::layer_iterator l = conn.begin_layers (); l != conn.end_layers (); ++l) { db::cell_index_type cci = circuit->cell_index (); @@ -353,7 +376,7 @@ void std_writer_impl::write (const db::LayoutToNetlist *l2n, const db::Net } *mp_stream << indent2; - write (si.operator-> (), si.trans (), name_for_layer (l2n, *l)); + write (si.operator-> (), si.trans (), name_for_layer (l2n, *l), true); *mp_stream << endl; prev_ci = ci; @@ -441,13 +464,15 @@ void std_writer_impl::write (const db::LayoutToNetlist *l2n, const db::Dev *mp_stream << indent1 << Keys::terminal_key << "(" << t->name () << endl; + reset_geometry_ref (); + for (db::Connectivity::layer_iterator l = conn.begin_layers (); l != conn.end_layers (); ++l) { const db::local_cluster &lc = clusters.clusters_per_cell (device_abstract.cell_index ()).cluster_by_id (device_abstract.cluster_id_for_terminal (t->id ())); for (db::local_cluster::shape_iterator s = lc.begin (*l); ! s.at_end (); ++s) { *mp_stream << indent2; - write (s.operator-> (), db::ICplxTrans (), name_for_layer (l2n, *l)); + write (s.operator-> (), db::ICplxTrans (), name_for_layer (l2n, *l), true); *mp_stream << endl; } diff --git a/src/db/unit_tests/dbLayoutToNetlistReaderTests.cc b/src/db/unit_tests/dbLayoutToNetlistReaderTests.cc index b9bcb8629..117b66acd 100644 --- a/src/db/unit_tests/dbLayoutToNetlistReaderTests.cc +++ b/src/db/unit_tests/dbLayoutToNetlistReaderTests.cc @@ -188,3 +188,67 @@ TEST(2_ReaderWithGlobalNets) } } +TEST(3_ReaderAbsoluteCoordinates) +{ + db::LayoutToNetlist l2n; + + std::string in_path = tl::combine_path (tl::combine_path (tl::combine_path (tl::testsrc (), "testdata"), "algo"), "l2n_writer_au_2_abs.txt"); + tl::InputStream is_in (in_path); + + db::LayoutToNetlistStandardReader reader (is_in); + reader.read (&l2n); + + // verify against the input + + std::string path = tmp_file ("tmp_l2nreader_2.txt"); + { + tl::OutputStream stream (path); + db::LayoutToNetlistStandardWriter writer (stream, false); + writer.write (&l2n); + } + + std::string au_path = tl::combine_path (tl::combine_path (tl::combine_path (tl::testsrc (), "testdata"), "algo"), "l2n_writer_au_2.txt"); + + tl::InputStream is (path); + tl::InputStream is_au (au_path); + + if (is.read_all () != is_au.read_all ()) { + _this->raise (tl::sprintf ("Compare failed - see\n actual: %s\n golden: %s", + tl::absolute_file_path (path), + tl::absolute_file_path (au_path))); + } + + // test build_all_nets from read l2n + + { + db::Layout ly2; + ly2.dbu (l2n.internal_layout ()->dbu ()); + db::Cell &top2 = ly2.cell (ly2.add_cell ("TOP")); + + db::CellMapping cm = l2n.cell_mapping_into (ly2, top2, true /*with device cells*/); + + std::map lmap; + lmap [ly2.insert_layer (db::LayerProperties (10, 0))] = l2n.layer_by_name ("psd"); + lmap [ly2.insert_layer (db::LayerProperties (11, 0))] = l2n.layer_by_name ("nsd"); + lmap [ly2.insert_layer (db::LayerProperties (12, 0))] = l2n.layer_by_name ("rbulk"); + lmap [ly2.insert_layer (db::LayerProperties (13, 0))] = l2n.layer_by_name ("ptie"); + lmap [ly2.insert_layer (db::LayerProperties (14, 0))] = l2n.layer_by_name ("ntie"); + lmap [ly2.insert_layer (db::LayerProperties (1, 0)) ] = l2n.layer_by_name ("nwell"); + lmap [ly2.insert_layer (db::LayerProperties (3, 0)) ] = l2n.layer_by_name ("poly"); + lmap [ly2.insert_layer (db::LayerProperties (4, 0)) ] = l2n.layer_by_name ("diff_cont"); + lmap [ly2.insert_layer (db::LayerProperties (5, 0)) ] = l2n.layer_by_name ("poly_cont"); + lmap [ly2.insert_layer (db::LayerProperties (6, 0)) ] = l2n.layer_by_name ("metal1"); + lmap [ly2.insert_layer (db::LayerProperties (7, 0)) ] = l2n.layer_by_name ("via1"); + lmap [ly2.insert_layer (db::LayerProperties (8, 0)) ] = l2n.layer_by_name ("metal2"); + + l2n.build_all_nets (cm, ly2, lmap, "NET_", tl::Variant (), db::LayoutToNetlist::BNH_SubcircuitCells, "CIRCUIT_", "DEVICE_"); + + std::string au = tl::testsrc (); + au = tl::combine_path (au, "testdata"); + au = tl::combine_path (au, "algo"); + au = tl::combine_path (au, "l2n_reader_au_2.gds"); + + db::compare_layouts (_this, ly2, au); + } +} + diff --git a/testdata/algo/l2n_writer_au.txt b/testdata/algo/l2n_writer_au.txt index c840d7397..12e4aa7de 100644 --- a/testdata/algo/l2n_writer_au.txt +++ b/testdata/algo/l2n_writer_au.txt @@ -42,46 +42,46 @@ class(NMOS MOS3) # Device abstracts list the pin shapes of the devices. device(D$PMOS PMOS terminal(S - rect(psd -650 -475 -125 475) + rect(psd (-650 -475) (525 950)) ) terminal(G - rect(poly -125 -475 125 475) + rect(poly (-125 -475) (250 950)) ) terminal(D - rect(psd 125 -475 675 475) + rect(psd (125 -475) (550 950)) ) ) device(D$PMOS$1 PMOS terminal(S - rect(psd -675 -475 -125 475) + rect(psd (-675 -475) (550 950)) ) terminal(G - rect(poly -125 -475 125 475) + rect(poly (-125 -475) (250 950)) ) terminal(D - rect(psd 125 -475 650 475) + rect(psd (125 -475) (525 950)) ) ) device(D$NMOS NMOS terminal(S - rect(nsd -650 -475 -125 475) + rect(nsd (-650 -475) (525 950)) ) terminal(G - rect(poly -125 -475 125 475) + rect(poly (-125 -475) (250 950)) ) terminal(D - rect(nsd 125 -475 675 475) + rect(nsd (125 -475) (550 950)) ) ) device(D$NMOS$1 NMOS terminal(S - rect(nsd -675 -475 -125 475) + rect(nsd (-675 -475) (550 950)) ) terminal(G - rect(poly -125 -475 125 475) + rect(poly (-125 -475) (250 950)) ) terminal(D - rect(nsd 125 -475 650 475) + rect(nsd (125 -475) (525 950)) ) ) @@ -91,65 +91,65 @@ circuit(INV2 # Nets with their geometries net(1 name(IN) - rect(poly -525 -250 -275 2250) - rect(poly -1700 1620 -400 1980) - rect(poly -525 -800 -275 800) - rect(poly -525 2000 -275 3600) - rect(poly_lbl -801 1799 -799 1801) - rect(poly_cont -1630 1690 -1410 1910) + rect(poly (-525 -250) (250 2500)) + rect(poly (-1425 -630) (1300 360)) + rect(poly (-125 -2780) (250 1600)) + rect(poly (-250 1200) (250 1600)) + rect(poly_lbl (-526 -1801) (2 2)) + rect(poly_cont (-831 -111) (220 220)) ) net(2 - rect(poly 275 -250 525 2250) - rect(poly 220 820 580 1180) - rect(poly 275 2000 525 3600) - rect(poly 275 -800 525 800) - rect(diff_cont -910 2490 -690 2710) - rect(diff_cont -910 2890 -690 3110) - rect(diff_cont -910 -310 -690 -90) - rect(diff_cont -910 90 -690 310) - rect(poly_cont 290 890 510 1110) - rect(metal1 -800 820 580 1180) - rect(metal1 -980 -420 -620 2420) - rect(metal1 -980 2420 -620 3180) - rect(metal1 -980 -380 -620 380) - rect(psd -1050 2325 -525 3275) - rect(nsd -1050 -475 -525 475) + rect(poly (275 -250) (250 2500)) + rect(poly (-305 -1430) (360 360)) + rect(poly (-305 820) (250 1600)) + rect(poly (-250 -4400) (250 1600)) + rect(diff_cont (-1435 1690) (220 220)) + rect(diff_cont (-220 180) (220 220)) + rect(diff_cont (-220 -3420) (220 220)) + rect(diff_cont (-220 180) (220 220)) + rect(poly_cont (980 580) (220 220)) + rect(metal1 (-1310 -290) (1380 360)) + rect(metal1 (-1560 -1600) (360 2840)) + rect(metal1 (-360 0) (360 760)) + rect(metal1 (-360 -3560) (360 760)) + rect(psd (-430 1945) (525 950)) + rect(nsd (-525 -3750) (525 950)) ) net(3 name(OUT) - rect(diff_cont 690 2890 910 3110) - rect(diff_cont 690 2490 910 2710) - rect(diff_cont 690 90 910 310) - rect(diff_cont 690 -310 910 -90) - polygon(metal1 800 20 * 380 940 * * 1620 620 * * 2420 980 * * 1980 1300 * * 20) - rect(metal1 620 2420 980 3180) - rect(metal1 620 -380 980 380) - rect(metal1_lbl 799 1799 801 1801) - rect(psd 525 2325 1050 3275) - rect(nsd 525 -475 1050 475) + 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)) + polygon(metal1 (-110 110) (0 360) (140 0) (0 1240) (-320 0) (0 800) (360 0) (0 -440) (320 0) (0 -1960)) + rect(metal1 (-680 2400) (360 760)) + rect(metal1 (-360 -3560) (360 760)) + rect(metal1_lbl (-181 1419) (2 2)) + rect(psd (-276 524) (525 950)) + rect(nsd (-525 -3750) (525 950)) ) net(4 - rect(diff_cont -110 -310 110 -90) - rect(diff_cont -110 90 110 310) - rect(diff_cont -110 90 110 310) - rect(diff_cont -110 -310 110 -90) - rect(metal1 -180 -380 180 380) - rect(metal1 -180 -380 180 380) - rect(via1 -125 -325 125 -75) - rect(via1 -125 75 125 325) - rect(metal2 -1400 -450 1400 450) - rect(nsd -275 -475 275 475) + rect(diff_cont (-110 -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(metal1 (-290 -290) (360 760)) + rect(metal1 (-360 -760) (360 760)) + rect(via1 (-305 -705) (250 250)) + rect(via1 (-250 150) (250 250)) + rect(metal2 (-1525 -775) (2800 900)) + rect(nsd (-1675 -925) (550 950)) ) net(5 - rect(diff_cont -110 2490 110 2710) - rect(diff_cont -110 2890 110 3110) - rect(diff_cont -110 2890 110 3110) - rect(diff_cont -110 2490 110 2710) - rect(metal1 -180 2420 180 3180) - rect(metal1 -180 2420 180 3180) - rect(via1 -125 2475 125 2725) - rect(via1 -125 2875 125 3125) - rect(metal2 -1400 2350 1400 3250) - rect(psd -275 2325 275 3275) + rect(diff_cont (-110 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(metal1 (-290 -290) (360 760)) + rect(metal1 (-360 -760) (360 760)) + rect(via1 (-305 -705) (250 250)) + rect(via1 (-250 150) (250 250)) + rect(metal2 (-1525 -775) (2800 900)) + rect(psd (-1675 -925) (550 950)) ) # Outgoing pins and their connections to nets @@ -214,204 +214,204 @@ circuit(RINGO # Nets with their geometries net(1 name(FB) - rect(diff_cont 22850 2490 23070 2710) - rect(diff_cont 22850 2890 23070 3110) - rect(diff_cont 22850 -310 23070 -90) - rect(diff_cont 22850 90 23070 310) - rect(metal1 -1700 1620 -1340 1980) - rect(via1 -1645 1675 -1395 1925) - rect(via1 22835 1675 23085 1925) - rect(metal2 -1720 1600 23160 2000) - rect(metal2_lbl -1 1799 1 1801) + 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(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 24670 3110) - rect(diff_cont 24450 2490 24670 2710) - rect(diff_cont 24450 90 24670 310) - rect(diff_cont 24450 -310 24670 -90) - rect(via1 24435 1675 24685 1925) - rect(metal2 24360 1600 24760 2000) - rect(metal2_lbl 24559 1799 24561 1801) + 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(metal2 (-325 -325) (400 400)) + rect(metal2_lbl (-201 -201) (2 2)) ) net(3 name(VSS) - rect(diff_cont 2530 -310 2750 -90) - rect(diff_cont 2530 90 2750 310) - rect(diff_cont 2530 90 2750 310) - rect(diff_cont 2530 -310 2750 -90) - rect(diff_cont -110 -310 110 -90) - rect(diff_cont -110 90 110 310) - rect(diff_cont -110 90 110 310) - rect(diff_cont -110 -310 110 -90) - rect(diff_cont 5170 -310 5390 -90) - rect(diff_cont 5170 90 5390 310) - rect(diff_cont 5170 90 5390 310) - rect(diff_cont 5170 -310 5390 -90) - rect(diff_cont 7810 -310 8030 -90) - rect(diff_cont 7810 90 8030 310) - rect(diff_cont 7810 90 8030 310) - rect(diff_cont 7810 -310 8030 -90) - rect(diff_cont 10450 -310 10670 -90) - rect(diff_cont 10450 90 10670 310) - rect(diff_cont 10450 90 10670 310) - rect(diff_cont 10450 -310 10670 -90) - rect(diff_cont 13090 -310 13310 -90) - rect(diff_cont 13090 90 13310 310) - rect(diff_cont 13090 90 13310 310) - rect(diff_cont 13090 -310 13310 -90) - rect(diff_cont 15730 -310 15950 -90) - rect(diff_cont 15730 90 15950 310) - rect(diff_cont 15730 90 15950 310) - rect(diff_cont 15730 -310 15950 -90) - rect(diff_cont 18370 -310 18590 -90) - rect(diff_cont 18370 90 18590 310) - rect(diff_cont 18370 90 18590 310) - rect(diff_cont 18370 -310 18590 -90) - rect(diff_cont 21010 -310 21230 -90) - rect(diff_cont 21010 90 21230 310) - rect(diff_cont 21010 90 21230 310) - rect(diff_cont 21010 -310 21230 -90) - rect(diff_cont 23650 -310 23870 -90) - rect(diff_cont 23650 90 23870 310) - rect(diff_cont 23650 90 23870 310) - rect(diff_cont 23650 -310 23870 -90) - rect(metal1 2460 -380 2820 380) - rect(metal1 2460 -380 2820 380) - rect(metal1 -180 -380 180 380) - rect(metal1 -180 -380 180 380) - rect(metal1 5100 -380 5460 380) - rect(metal1 5100 -380 5460 380) - rect(metal1 7740 -380 8100 380) - rect(metal1 7740 -380 8100 380) - rect(metal1 10380 -380 10740 380) - rect(metal1 10380 -380 10740 380) - rect(metal1 13020 -380 13380 380) - rect(metal1 13020 -380 13380 380) - rect(metal1 15660 -380 16020 380) - rect(metal1 15660 -380 16020 380) - rect(metal1 18300 -380 18660 380) - rect(metal1 18300 -380 18660 380) - rect(metal1 20940 -380 21300 380) - rect(metal1 20940 -380 21300 380) - rect(metal1 23580 -380 23940 380) - rect(metal1 23580 -380 23940 380) - rect(metal2_lbl -1 -1 1 1) + 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)) ) net(4 name(VDD) - rect(diff_cont 2530 2490 2750 2710) - rect(diff_cont 2530 2890 2750 3110) - rect(diff_cont 2530 2890 2750 3110) - rect(diff_cont 2530 2490 2750 2710) - rect(diff_cont -110 2490 110 2710) - rect(diff_cont -110 2890 110 3110) - rect(diff_cont -110 2890 110 3110) - rect(diff_cont -110 2490 110 2710) - rect(diff_cont 5170 2490 5390 2710) - rect(diff_cont 5170 2890 5390 3110) - rect(diff_cont 5170 2890 5390 3110) - rect(diff_cont 5170 2490 5390 2710) - rect(diff_cont 7810 2490 8030 2710) - rect(diff_cont 7810 2890 8030 3110) - rect(diff_cont 7810 2890 8030 3110) - rect(diff_cont 7810 2490 8030 2710) - rect(diff_cont 10450 2490 10670 2710) - rect(diff_cont 10450 2890 10670 3110) - rect(diff_cont 10450 2890 10670 3110) - rect(diff_cont 10450 2490 10670 2710) - rect(diff_cont 13090 2490 13310 2710) - rect(diff_cont 13090 2890 13310 3110) - rect(diff_cont 13090 2890 13310 3110) - rect(diff_cont 13090 2490 13310 2710) - rect(diff_cont 15730 2490 15950 2710) - rect(diff_cont 15730 2890 15950 3110) - rect(diff_cont 15730 2890 15950 3110) - rect(diff_cont 15730 2490 15950 2710) - rect(diff_cont 18370 2490 18590 2710) - rect(diff_cont 18370 2890 18590 3110) - rect(diff_cont 18370 2890 18590 3110) - rect(diff_cont 18370 2490 18590 2710) - rect(diff_cont 21010 2490 21230 2710) - rect(diff_cont 21010 2890 21230 3110) - rect(diff_cont 21010 2890 21230 3110) - rect(diff_cont 21010 2490 21230 2710) - rect(diff_cont 23650 2490 23870 2710) - rect(diff_cont 23650 2890 23870 3110) - rect(diff_cont 23650 2890 23870 3110) - rect(diff_cont 23650 2490 23870 2710) - rect(metal1 2460 2420 2820 3180) - rect(metal1 2460 2420 2820 3180) - rect(metal1 -180 2420 180 3180) - rect(metal1 -180 2420 180 3180) - rect(metal1 5100 2420 5460 3180) - rect(metal1 5100 2420 5460 3180) - rect(metal1 7740 2420 8100 3180) - rect(metal1 7740 2420 8100 3180) - rect(metal1 10380 2420 10740 3180) - rect(metal1 10380 2420 10740 3180) - rect(metal1 13020 2420 13380 3180) - rect(metal1 13020 2420 13380 3180) - rect(metal1 15660 2420 16020 3180) - rect(metal1 15660 2420 16020 3180) - rect(metal1 18300 2420 18660 3180) - rect(metal1 18300 2420 18660 3180) - rect(metal1 20940 2420 21300 3180) - rect(metal1 20940 2420 21300 3180) - rect(metal1 23580 2420 23940 3180) - rect(metal1 23580 2420 23940 3180) - rect(metal2_lbl -1 2799 1 2801) + 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 690 2890 910 3110) - rect(diff_cont 690 2490 910 2710) - rect(diff_cont 690 90 910 310) - rect(diff_cont 690 -310 910 -90) + 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(6 - rect(diff_cont 21810 2890 22030 3110) - rect(diff_cont 21810 2490 22030 2710) - rect(diff_cont 21810 90 22030 310) - rect(diff_cont 21810 -310 22030 -90) + 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(7 - rect(diff_cont 19170 2890 19390 3110) - rect(diff_cont 19170 2490 19390 2710) - rect(diff_cont 19170 90 19390 310) - rect(diff_cont 19170 -310 19390 -90) + 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(8 - rect(diff_cont 16530 2890 16750 3110) - rect(diff_cont 16530 2490 16750 2710) - rect(diff_cont 16530 90 16750 310) - rect(diff_cont 16530 -310 16750 -90) + 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(9 - rect(diff_cont 13890 2890 14110 3110) - rect(diff_cont 13890 2490 14110 2710) - rect(diff_cont 13890 90 14110 310) - rect(diff_cont 13890 -310 14110 -90) + 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(10 - rect(diff_cont 11250 2890 11470 3110) - rect(diff_cont 11250 2490 11470 2710) - rect(diff_cont 11250 90 11470 310) - rect(diff_cont 11250 -310 11470 -90) + 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(11 - rect(diff_cont 8610 2890 8830 3110) - rect(diff_cont 8610 2490 8830 2710) - rect(diff_cont 8610 90 8830 310) - rect(diff_cont 8610 -310 8830 -90) + 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(12 - rect(diff_cont 5970 2890 6190 3110) - rect(diff_cont 5970 2490 6190 2710) - rect(diff_cont 5970 90 6190 310) - rect(diff_cont 5970 -310 6190 -90) + 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(13 - rect(diff_cont 3330 2890 3550 3110) - rect(diff_cont 3330 2490 3550 2710) - rect(diff_cont 3330 90 3550 310) - rect(diff_cont 3330 -310 3550 -90) + 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)) ) # Outgoing pins and their connections to nets diff --git a/testdata/algo/l2n_writer_au_2.txt b/testdata/algo/l2n_writer_au_2.txt index 67e4e8155..5facbd7bf 100644 --- a/testdata/algo/l2n_writer_au_2.txt +++ b/testdata/algo/l2n_writer_au_2.txt @@ -53,58 +53,58 @@ class(NMOS MOS4) # Device abstracts list the pin shapes of the devices. device(D$PMOS PMOS terminal(S - rect(psd -650 -475 -125 475) + rect(psd (-650 -475) (525 950)) ) terminal(G - rect(poly -125 -475 125 475) + rect(poly (-125 -475) (250 950)) ) terminal(D - rect(psd 125 -475 675 475) + rect(psd (125 -475) (550 950)) ) terminal(B - rect(nwell -125 -475 125 475) + rect(nwell (-125 -475) (250 950)) ) ) device(D$PMOS$1 PMOS terminal(S - rect(psd -675 -475 -125 475) + rect(psd (-675 -475) (550 950)) ) terminal(G - rect(poly -125 -475 125 475) + rect(poly (-125 -475) (250 950)) ) terminal(D - rect(psd 125 -475 650 475) + rect(psd (125 -475) (525 950)) ) terminal(B - rect(nwell -125 -475 125 475) + rect(nwell (-125 -475) (250 950)) ) ) device(D$NMOS NMOS terminal(S - rect(nsd -650 -475 -125 475) + rect(nsd (-650 -475) (525 950)) ) terminal(G - rect(poly -125 -475 125 475) + rect(poly (-125 -475) (250 950)) ) terminal(D - rect(nsd 125 -475 675 475) + rect(nsd (125 -475) (550 950)) ) terminal(B - rect(rbulk -125 -475 125 475) + rect(rbulk (-125 -475) (250 950)) ) ) device(D$NMOS$1 NMOS terminal(S - rect(nsd -675 -475 -125 475) + rect(nsd (-675 -475) (550 950)) ) terminal(G - rect(poly -125 -475 125 475) + rect(poly (-125 -475) (250 950)) ) terminal(D - rect(nsd 125 -475 650 475) + rect(nsd (125 -475) (525 950)) ) terminal(B - rect(rbulk -125 -475 125 475) + rect(rbulk (-125 -475) (250 950)) ) ) @@ -114,76 +114,76 @@ circuit(INV2 # Nets with their geometries net(1 - rect(nwell -1400 1800 1400 4580) - rect(diff_cont -110 3930 110 4150) - rect(ntie -400 3700 400 4380) + rect(nwell (-1400 1800) (2800 2780)) + rect(diff_cont (-1510 -650) (220 220)) + rect(ntie (-510 -450) (800 680)) ) net(2 name(IN) - rect(poly -525 -250 -275 2250) - rect(poly -1700 1620 -400 1980) - rect(poly -525 -800 -275 800) - rect(poly -525 2000 -275 3600) - rect(poly_lbl -801 1799 -799 1801) - rect(poly_cont -1630 1690 -1410 1910) + rect(poly (-525 -250) (250 2500)) + rect(poly (-1425 -630) (1300 360)) + rect(poly (-125 -2780) (250 1600)) + rect(poly (-250 1200) (250 1600)) + rect(poly_lbl (-526 -1801) (2 2)) + rect(poly_cont (-831 -111) (220 220)) ) net(3 - rect(poly 275 -250 525 2250) - rect(poly 220 820 580 1180) - rect(poly 275 2000 525 3600) - rect(poly 275 -800 525 800) - rect(diff_cont -910 2490 -690 2710) - rect(diff_cont -910 2890 -690 3110) - rect(diff_cont -910 -310 -690 -90) - rect(diff_cont -910 90 -690 310) - rect(poly_cont 290 890 510 1110) - rect(metal1 -800 820 580 1180) - rect(metal1 -980 -420 -620 2420) - rect(metal1 -980 2420 -620 3180) - rect(metal1 -980 -380 -620 380) - rect(psd -1050 2325 -525 3275) - rect(nsd -1050 -475 -525 475) + rect(poly (275 -250) (250 2500)) + rect(poly (-305 -1430) (360 360)) + rect(poly (-305 820) (250 1600)) + rect(poly (-250 -4400) (250 1600)) + rect(diff_cont (-1435 1690) (220 220)) + rect(diff_cont (-220 180) (220 220)) + rect(diff_cont (-220 -3420) (220 220)) + rect(diff_cont (-220 180) (220 220)) + rect(poly_cont (980 580) (220 220)) + rect(metal1 (-1310 -290) (1380 360)) + rect(metal1 (-1560 -1600) (360 2840)) + rect(metal1 (-360 0) (360 760)) + rect(metal1 (-360 -3560) (360 760)) + rect(psd (-430 1945) (525 950)) + rect(nsd (-525 -3750) (525 950)) ) net(4 name(OUT) - rect(diff_cont 690 2890 910 3110) - rect(diff_cont 690 2490 910 2710) - rect(diff_cont 690 90 910 310) - rect(diff_cont 690 -310 910 -90) - polygon(metal1 800 20 * 380 940 * * 1620 620 * * 2420 980 * * 1980 1300 * * 20) - rect(metal1 620 2420 980 3180) - rect(metal1 620 -380 980 380) - rect(metal1_lbl 799 1799 801 1801) - rect(psd 525 2325 1050 3275) - rect(nsd 525 -475 1050 475) + 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)) + polygon(metal1 (-110 110) (0 360) (140 0) (0 1240) (-320 0) (0 800) (360 0) (0 -440) (320 0) (0 -1960)) + rect(metal1 (-680 2400) (360 760)) + rect(metal1 (-360 -3560) (360 760)) + rect(metal1_lbl (-181 1419) (2 2)) + rect(psd (-276 524) (525 950)) + rect(nsd (-525 -3750) (525 950)) ) net(5 name(VSS) - rect(diff_cont -110 -310 110 -90) - rect(diff_cont -110 90 110 310) - rect(diff_cont -110 90 110 310) - rect(diff_cont -110 -310 110 -90) - rect(metal1 -180 -380 180 380) - rect(metal1 -180 -380 180 380) - rect(via1 -125 -325 125 -75) - rect(via1 -125 75 125 325) - rect(metal2 -1400 -450 1400 450) - rect(metal2_lbl 1239 -91 1241 -89) - rect(nsd -275 -475 275 475) + rect(diff_cont (-110 -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(metal1 (-290 -290) (360 760)) + rect(metal1 (-360 -760) (360 760)) + rect(via1 (-305 -705) (250 250)) + rect(via1 (-250 150) (250 250)) + rect(metal2 (-1525 -775) (2800 900)) + rect(metal2_lbl (-161 -541) (2 2)) + rect(nsd (-1516 -386) (550 950)) ) net(6 name(VDD) - rect(diff_cont -110 2490 110 2710) - rect(diff_cont -110 2890 110 3110) - rect(diff_cont -110 2890 110 3110) - rect(diff_cont -110 2490 110 2710) - rect(metal1 -180 2420 180 3180) - rect(metal1 -180 2420 180 3180) - rect(via1 -125 2475 125 2725) - rect(via1 -125 2875 125 3125) - rect(metal2 -1400 2350 1400 3250) - rect(metal2_lbl 1249 2799 1251 2801) - rect(psd -275 2325 275 3275) + rect(diff_cont (-110 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(metal1 (-290 -290) (360 760)) + rect(metal1 (-360 -760) (360 760)) + rect(via1 (-305 -705) (250 250)) + rect(via1 (-250 150) (250 250)) + rect(metal2 (-1525 -775) (2800 900)) + rect(metal2_lbl (-151 -451) (2 2)) + rect(psd (-1526 -476) (550 950)) ) net(7 name(BULK) - rect(diff_cont -110 -1360 110 -1140) - rect(ptie -400 -1590 400 -910) + rect(diff_cont (-110 -1360) (220 220)) + rect(ptie (-510 -450) (800 680)) ) # Outgoing pins and their connections to nets @@ -255,51 +255,51 @@ circuit(INV2PAIR # Nets with their geometries net(1 name(BULK)) net(2 - rect(diff_cont 3430 3290 3650 3510) - rect(diff_cont 3430 3690 3650 3910) - rect(diff_cont 3430 490 3650 710) - rect(diff_cont 3430 890 3650 1110) + 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 4230 3290 4450 3510) - rect(diff_cont 4230 3690 4450 3910) - rect(diff_cont 4230 3690 4450 3910) - rect(diff_cont 4230 3290 4450 3510) - rect(diff_cont 1590 3290 1810 3510) - rect(diff_cont 1590 3690 1810 3910) - rect(diff_cont 1590 3690 1810 3910) - rect(diff_cont 1590 3290 1810 3510) - rect(metal1 4160 3220 4520 3980) - rect(metal1 4160 3220 4520 3980) - rect(metal1 1520 3220 1880 3980) - rect(metal1 1520 3220 1880 3980) + 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(4 - rect(diff_cont 4230 490 4450 710) - rect(diff_cont 4230 890 4450 1110) - rect(diff_cont 4230 890 4450 1110) - rect(diff_cont 4230 490 4450 710) - rect(diff_cont 1590 490 1810 710) - rect(diff_cont 1590 890 1810 1110) - rect(diff_cont 1590 890 1810 1110) - rect(diff_cont 1590 490 1810 710) - rect(metal1 4160 420 4520 1180) - rect(metal1 4160 420 4520 1180) - rect(metal1 1520 420 1880 1180) - rect(metal1 1520 420 1880 1180) + 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(5 - rect(diff_cont 2390 3690 2610 3910) - rect(diff_cont 2390 3290 2610 3510) - rect(diff_cont 2390 890 2610 1110) - rect(diff_cont 2390 490 2610 710) + 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(6) net(7 - rect(diff_cont 5030 3690 5250 3910) - rect(diff_cont 5030 3290 5250 3510) - rect(diff_cont 5030 890 5250 1110) - rect(diff_cont 5030 490 5250 710) + 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) @@ -336,194 +336,194 @@ circuit(RINGO # Nets with their geometries net(1 name(FB) - rect(diff_cont 22850 2490 23070 2710) - rect(diff_cont 22850 2890 23070 3110) - rect(diff_cont 22850 -310 23070 -90) - rect(diff_cont 22850 90 23070 310) - rect(metal1 -1700 1620 -1340 1980) - rect(via1 -1645 1675 -1395 1925) - rect(via1 22835 1675 23085 1925) - rect(metal2 -1720 1600 23160 2000) - rect(metal2_lbl -1 1799 1 1801) + 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(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 24670 3110) - rect(diff_cont 24450 2490 24670 2710) - rect(diff_cont 24450 90 24670 310) - rect(diff_cont 24450 -310 24670 -90) - rect(via1 24435 1675 24685 1925) - rect(metal2 24360 1600 24760 2000) - rect(metal2_lbl 24559 1799 24561 1801) + 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(metal2 (-325 -325) (400 400)) + rect(metal2_lbl (-201 -201) (2 2)) ) net(3 name(VDD) - rect(diff_cont 7810 2490 8030 2710) - rect(diff_cont 7810 2890 8030 3110) - rect(diff_cont 7810 2890 8030 3110) - rect(diff_cont 7810 2490 8030 2710) - rect(diff_cont 5170 2490 5390 2710) - rect(diff_cont 5170 2890 5390 3110) - rect(diff_cont 5170 2890 5390 3110) - rect(diff_cont 5170 2490 5390 2710) - rect(diff_cont 2530 2490 2750 2710) - rect(diff_cont 2530 2890 2750 3110) - rect(diff_cont 2530 2890 2750 3110) - rect(diff_cont 2530 2490 2750 2710) - rect(diff_cont -110 2490 110 2710) - rect(diff_cont -110 2890 110 3110) - rect(diff_cont -110 2890 110 3110) - rect(diff_cont -110 2490 110 2710) - rect(diff_cont 13090 2490 13310 2710) - rect(diff_cont 13090 2890 13310 3110) - rect(diff_cont 13090 2890 13310 3110) - rect(diff_cont 13090 2490 13310 2710) - rect(diff_cont 10450 2490 10670 2710) - rect(diff_cont 10450 2890 10670 3110) - rect(diff_cont 10450 2890 10670 3110) - rect(diff_cont 10450 2490 10670 2710) - rect(diff_cont 18370 2490 18590 2710) - rect(diff_cont 18370 2890 18590 3110) - rect(diff_cont 18370 2890 18590 3110) - rect(diff_cont 18370 2490 18590 2710) - rect(diff_cont 15730 2490 15950 2710) - rect(diff_cont 15730 2890 15950 3110) - rect(diff_cont 15730 2890 15950 3110) - rect(diff_cont 15730 2490 15950 2710) - rect(diff_cont 23650 2490 23870 2710) - rect(diff_cont 23650 2890 23870 3110) - rect(diff_cont 23650 2890 23870 3110) - rect(diff_cont 23650 2490 23870 2710) - rect(diff_cont 21010 2490 21230 2710) - rect(diff_cont 21010 2890 21230 3110) - rect(diff_cont 21010 2890 21230 3110) - rect(diff_cont 21010 2490 21230 2710) - rect(metal1 -180 3100 180 4220) - rect(metal1 2460 3100 2820 4220) - rect(metal1 5100 3100 5460 4220) - rect(metal1 7740 3100 8100 4220) - rect(metal1 10380 3100 10740 4220) - rect(metal1 13020 3100 13380 4220) - rect(metal1 15660 3100 16020 4220) - rect(metal1 18300 3100 18660 4220) - rect(metal1 20940 3100 21300 4220) - rect(metal1 23580 3100 23940 4220) - rect(metal1 7740 2420 8100 3180) - rect(metal1 7740 2420 8100 3180) - rect(metal1 5100 2420 5460 3180) - rect(metal1 5100 2420 5460 3180) - rect(metal1 2460 2420 2820 3180) - rect(metal1 2460 2420 2820 3180) - rect(metal1 -180 2420 180 3180) - rect(metal1 -180 2420 180 3180) - rect(metal1 13020 2420 13380 3180) - rect(metal1 13020 2420 13380 3180) - rect(metal1 10380 2420 10740 3180) - rect(metal1 10380 2420 10740 3180) - rect(metal1 18300 2420 18660 3180) - rect(metal1 18300 2420 18660 3180) - rect(metal1 15660 2420 16020 3180) - rect(metal1 15660 2420 16020 3180) - rect(metal1 23580 2420 23940 3180) - rect(metal1 23580 2420 23940 3180) - rect(metal1 20940 2420 21300 3180) - rect(metal1 20940 2420 21300 3180) - rect(metal2_lbl -1 2799 1 2801) + 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 (2280 -1120) (360 1120)) + rect(metal1 (2280 -1120) (360 1120)) + rect(metal1 (2280 -1120) (360 1120)) + rect(metal1 (2280 -1120) (360 1120)) + rect(metal1 (2280 -1120) (360 1120)) + rect(metal1 (2280 -1120) (360 1120)) + 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)) ) net(4 name('BULK,VSS') - rect(diff_cont 7810 -310 8030 -90) - rect(diff_cont 7810 90 8030 310) - rect(diff_cont 7810 90 8030 310) - rect(diff_cont 7810 -310 8030 -90) - rect(diff_cont 5170 -310 5390 -90) - rect(diff_cont 5170 90 5390 310) - rect(diff_cont 5170 90 5390 310) - rect(diff_cont 5170 -310 5390 -90) - rect(diff_cont 2530 -310 2750 -90) - rect(diff_cont 2530 90 2750 310) - rect(diff_cont 2530 90 2750 310) - rect(diff_cont 2530 -310 2750 -90) - rect(diff_cont -110 -310 110 -90) - rect(diff_cont -110 90 110 310) - rect(diff_cont -110 90 110 310) - rect(diff_cont -110 -310 110 -90) - rect(diff_cont 13090 -310 13310 -90) - rect(diff_cont 13090 90 13310 310) - rect(diff_cont 13090 90 13310 310) - rect(diff_cont 13090 -310 13310 -90) - rect(diff_cont 10450 -310 10670 -90) - rect(diff_cont 10450 90 10670 310) - rect(diff_cont 10450 90 10670 310) - rect(diff_cont 10450 -310 10670 -90) - rect(diff_cont 18370 -310 18590 -90) - rect(diff_cont 18370 90 18590 310) - rect(diff_cont 18370 90 18590 310) - rect(diff_cont 18370 -310 18590 -90) - rect(diff_cont 15730 -310 15950 -90) - rect(diff_cont 15730 90 15950 310) - rect(diff_cont 15730 90 15950 310) - rect(diff_cont 15730 -310 15950 -90) - rect(diff_cont 23650 -310 23870 -90) - rect(diff_cont 23650 90 23870 310) - rect(diff_cont 23650 90 23870 310) - rect(diff_cont 23650 -310 23870 -90) - rect(diff_cont 21010 -310 21230 -90) - rect(diff_cont 21010 90 21230 310) - rect(diff_cont 21010 90 21230 310) - rect(diff_cont 21010 -310 21230 -90) - rect(metal1 -180 -1420 180 -300) - rect(metal1 2460 -1420 2820 -300) - rect(metal1 5100 -1420 5460 -300) - rect(metal1 7740 -1420 8100 -300) - rect(metal1 10380 -1420 10740 -300) - rect(metal1 13020 -1420 13380 -300) - rect(metal1 15660 -1420 16020 -300) - rect(metal1 18300 -1420 18660 -300) - rect(metal1 20940 -1420 21300 -300) - rect(metal1 23580 -1420 23940 -300) - rect(metal1 7740 -380 8100 380) - rect(metal1 7740 -380 8100 380) - rect(metal1 5100 -380 5460 380) - rect(metal1 5100 -380 5460 380) - rect(metal1 2460 -380 2820 380) - rect(metal1 2460 -380 2820 380) - rect(metal1 -180 -380 180 380) - rect(metal1 -180 -380 180 380) - rect(metal1 13020 -380 13380 380) - rect(metal1 13020 -380 13380 380) - rect(metal1 10380 -380 10740 380) - rect(metal1 10380 -380 10740 380) - rect(metal1 18300 -380 18660 380) - rect(metal1 18300 -380 18660 380) - rect(metal1 15660 -380 16020 380) - rect(metal1 15660 -380 16020 380) - rect(metal1 23580 -380 23940 380) - rect(metal1 23580 -380 23940 380) - rect(metal1 20940 -380 21300 380) - rect(metal1 20940 -380 21300 380) - rect(metal2_lbl -1 -1 1 1) + 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 (2280 -1120) (360 1120)) + rect(metal1 (2280 -1120) (360 1120)) + rect(metal1 (2280 -1120) (360 1120)) + rect(metal1 (2280 -1120) (360 1120)) + rect(metal1 (2280 -1120) (360 1120)) + rect(metal1 (2280 -1120) (360 1120)) + 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 3330 2890 3550 3110) - rect(diff_cont 3330 2490 3550 2710) - rect(diff_cont 3330 90 3550 310) - rect(diff_cont 3330 -310 3550 -90) + 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(6 - rect(diff_cont 19170 2890 19390 3110) - rect(diff_cont 19170 2490 19390 2710) - rect(diff_cont 19170 90 19390 310) - rect(diff_cont 19170 -310 19390 -90) + 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(7 - rect(diff_cont 13890 2890 14110 3110) - rect(diff_cont 13890 2490 14110 2710) - rect(diff_cont 13890 90 14110 310) - rect(diff_cont 13890 -310 14110 -90) + 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(8 - rect(diff_cont 8610 2890 8830 3110) - rect(diff_cont 8610 2490 8830 2710) - rect(diff_cont 8610 90 8830 310) - rect(diff_cont 8610 -310 8830 -90) + 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)) ) # Outgoing pins and their connections to nets diff --git a/testdata/algo/l2n_writer_au_2_abs.txt b/testdata/algo/l2n_writer_au_2_abs.txt new file mode 100644 index 000000000..67e4e8155 --- /dev/null +++ b/testdata/algo/l2n_writer_au_2_abs.txt @@ -0,0 +1,578 @@ +#%l2n-klayout + +# General section + +top(RINGO) +unit(0.001) + +# Layer section +# This section lists the mask layers (drawing or derived) and their connections. + +# Mask layers +layer(rbulk) +layer(nwell '1/0') +layer(poly '3/0') +layer(poly_lbl '3/1') +layer(diff_cont '4/0') +layer(poly_cont '5/0') +layer(metal1 '6/0') +layer(metal1_lbl '6/1') +layer(via1 '7/0') +layer(metal2 '8/0') +layer(metal2_lbl '8/1') +layer(ntie) +layer(psd) +layer(ptie) +layer(nsd) + +# Mask layer connectivity +connect(nwell nwell ntie) +connect(poly poly poly_lbl poly_cont) +connect(poly_lbl poly) +connect(diff_cont diff_cont metal1 ntie psd ptie nsd) +connect(poly_cont poly poly_cont metal1) +connect(metal1 diff_cont poly_cont metal1 metal1_lbl via1) +connect(metal1_lbl metal1) +connect(via1 metal1 via1 metal2) +connect(metal2 via1 metal2 metal2_lbl) +connect(metal2_lbl metal2) +connect(ntie nwell diff_cont ntie) +connect(psd diff_cont psd) +connect(ptie diff_cont ptie) +connect(nsd diff_cont nsd) + +# Global nets and connectivity +global(rbulk BULK) +global(ptie BULK) + +# 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(psd -650 -475 -125 475) + ) + terminal(G + rect(poly -125 -475 125 475) + ) + terminal(D + rect(psd 125 -475 675 475) + ) + terminal(B + rect(nwell -125 -475 125 475) + ) +) +device(D$PMOS$1 PMOS + terminal(S + rect(psd -675 -475 -125 475) + ) + terminal(G + rect(poly -125 -475 125 475) + ) + terminal(D + rect(psd 125 -475 650 475) + ) + terminal(B + rect(nwell -125 -475 125 475) + ) +) +device(D$NMOS NMOS + terminal(S + rect(nsd -650 -475 -125 475) + ) + terminal(G + rect(poly -125 -475 125 475) + ) + terminal(D + rect(nsd 125 -475 675 475) + ) + terminal(B + rect(rbulk -125 -475 125 475) + ) +) +device(D$NMOS$1 NMOS + terminal(S + rect(nsd -675 -475 -125 475) + ) + terminal(G + rect(poly -125 -475 125 475) + ) + terminal(D + rect(nsd 125 -475 650 475) + ) + terminal(B + rect(rbulk -125 -475 125 475) + ) +) + +# Circuit section +# Circuits are the hierarchical building blocks of the netlist. +circuit(INV2 + + # Nets with their geometries + net(1 + rect(nwell -1400 1800 1400 4580) + rect(diff_cont -110 3930 110 4150) + rect(ntie -400 3700 400 4380) + ) + net(2 name(IN) + rect(poly -525 -250 -275 2250) + rect(poly -1700 1620 -400 1980) + rect(poly -525 -800 -275 800) + rect(poly -525 2000 -275 3600) + rect(poly_lbl -801 1799 -799 1801) + rect(poly_cont -1630 1690 -1410 1910) + ) + net(3 + rect(poly 275 -250 525 2250) + rect(poly 220 820 580 1180) + rect(poly 275 2000 525 3600) + rect(poly 275 -800 525 800) + rect(diff_cont -910 2490 -690 2710) + rect(diff_cont -910 2890 -690 3110) + rect(diff_cont -910 -310 -690 -90) + rect(diff_cont -910 90 -690 310) + rect(poly_cont 290 890 510 1110) + rect(metal1 -800 820 580 1180) + rect(metal1 -980 -420 -620 2420) + rect(metal1 -980 2420 -620 3180) + rect(metal1 -980 -380 -620 380) + rect(psd -1050 2325 -525 3275) + rect(nsd -1050 -475 -525 475) + ) + net(4 name(OUT) + rect(diff_cont 690 2890 910 3110) + rect(diff_cont 690 2490 910 2710) + rect(diff_cont 690 90 910 310) + rect(diff_cont 690 -310 910 -90) + polygon(metal1 800 20 * 380 940 * * 1620 620 * * 2420 980 * * 1980 1300 * * 20) + rect(metal1 620 2420 980 3180) + rect(metal1 620 -380 980 380) + rect(metal1_lbl 799 1799 801 1801) + rect(psd 525 2325 1050 3275) + rect(nsd 525 -475 1050 475) + ) + net(5 name(VSS) + rect(diff_cont -110 -310 110 -90) + rect(diff_cont -110 90 110 310) + rect(diff_cont -110 90 110 310) + rect(diff_cont -110 -310 110 -90) + rect(metal1 -180 -380 180 380) + rect(metal1 -180 -380 180 380) + rect(via1 -125 -325 125 -75) + rect(via1 -125 75 125 325) + rect(metal2 -1400 -450 1400 450) + rect(metal2_lbl 1239 -91 1241 -89) + rect(nsd -275 -475 275 475) + ) + net(6 name(VDD) + rect(diff_cont -110 2490 110 2710) + rect(diff_cont -110 2890 110 3110) + rect(diff_cont -110 2890 110 3110) + rect(diff_cont -110 2490 110 2710) + rect(metal1 -180 2420 180 3180) + rect(metal1 -180 2420 180 3180) + rect(via1 -125 2475 125 2725) + rect(via1 -125 2875 125 3125) + rect(metal2 -1400 2350 1400 3250) + rect(metal2_lbl 1249 2799 1251 2801) + rect(psd -275 2325 275 3275) + ) + net(7 name(BULK) + rect(diff_cont -110 -1360 110 -1140) + rect(ptie -400 -1590 400 -910) + ) + + # Outgoing pins and their connections to nets + pin($0 1) + pin(IN 2) + pin($2 3) + pin(OUT 4) + pin(VSS 5) + pin(VDD 6) + pin(BULK 7) + + # Devices and their connections + device($1 D$PMOS + location(-400 2800) + param(L 0.25) + param(W 0.95) + param(AS 0.49875) + param(AD 0.26125) + param(PS 2.95) + param(PD 1.5) + terminal(S 3) + terminal(G 2) + terminal(D 6) + terminal(B 1) + ) + device($2 D$PMOS$1 + location(400 2800) + param(L 0.25) + param(W 0.95) + param(AS 0.26125) + param(AD 0.49875) + param(PS 1.5) + param(PD 2.95) + terminal(S 6) + terminal(G 3) + terminal(D 4) + terminal(B 1) + ) + device($3 D$NMOS + location(-400 0) + param(L 0.25) + param(W 0.95) + param(AS 0.49875) + param(AD 0.26125) + param(PS 2.95) + param(PD 1.5) + terminal(S 3) + terminal(G 2) + terminal(D 5) + terminal(B 7) + ) + device($4 D$NMOS$1 + location(400 0) + param(L 0.25) + param(W 0.95) + param(AS 0.26125) + param(AD 0.49875) + param(PS 1.5) + param(PD 2.95) + terminal(S 5) + terminal(G 3) + terminal(D 4) + terminal(B 7) + ) + +) +circuit(INV2PAIR + + # Nets with their geometries + net(1 name(BULK)) + net(2 + rect(diff_cont 3430 3290 3650 3510) + rect(diff_cont 3430 3690 3650 3910) + rect(diff_cont 3430 490 3650 710) + rect(diff_cont 3430 890 3650 1110) + ) + net(3 + rect(diff_cont 4230 3290 4450 3510) + rect(diff_cont 4230 3690 4450 3910) + rect(diff_cont 4230 3690 4450 3910) + rect(diff_cont 4230 3290 4450 3510) + rect(diff_cont 1590 3290 1810 3510) + rect(diff_cont 1590 3690 1810 3910) + rect(diff_cont 1590 3690 1810 3910) + rect(diff_cont 1590 3290 1810 3510) + rect(metal1 4160 3220 4520 3980) + rect(metal1 4160 3220 4520 3980) + rect(metal1 1520 3220 1880 3980) + rect(metal1 1520 3220 1880 3980) + ) + net(4 + rect(diff_cont 4230 490 4450 710) + rect(diff_cont 4230 890 4450 1110) + rect(diff_cont 4230 890 4450 1110) + rect(diff_cont 4230 490 4450 710) + rect(diff_cont 1590 490 1810 710) + rect(diff_cont 1590 890 1810 1110) + rect(diff_cont 1590 890 1810 1110) + rect(diff_cont 1590 490 1810 710) + rect(metal1 4160 420 4520 1180) + rect(metal1 4160 420 4520 1180) + rect(metal1 1520 420 1880 1180) + rect(metal1 1520 420 1880 1180) + ) + net(5 + rect(diff_cont 2390 3690 2610 3910) + rect(diff_cont 2390 3290 2610 3510) + rect(diff_cont 2390 890 2610 1110) + rect(diff_cont 2390 490 2610 710) + ) + net(6) + net(7 + rect(diff_cont 5030 3690 5250 3910) + rect(diff_cont 5030 3290 5250 3510) + rect(diff_cont 5030 890 5250 1110) + rect(diff_cont 5030 490 5250 710) + ) + net(8) + + # Outgoing pins and their connections to nets + pin(BULK 1) + pin($1 2) + pin($2 3) + pin($3 4) + pin($4 6) + pin($5 7) + pin($6 8) + + # Subcircuits and their connections + circuit($1 INV2 location(1700 800) + pin($0 8) + pin(IN 6) + pin(OUT 5) + pin(VSS 4) + pin(VDD 3) + pin(BULK 1) + ) + circuit($2 INV2 location(4340 800) + pin($0 8) + pin(IN 5) + pin($2 2) + pin(OUT 7) + pin(VSS 4) + pin(VDD 3) + pin(BULK 1) + ) + +) +circuit(RINGO + + # Nets with their geometries + net(1 name(FB) + rect(diff_cont 22850 2490 23070 2710) + rect(diff_cont 22850 2890 23070 3110) + rect(diff_cont 22850 -310 23070 -90) + rect(diff_cont 22850 90 23070 310) + rect(metal1 -1700 1620 -1340 1980) + rect(via1 -1645 1675 -1395 1925) + rect(via1 22835 1675 23085 1925) + rect(metal2 -1720 1600 23160 2000) + rect(metal2_lbl -1 1799 1 1801) + ) + net(2 name(OSC) + rect(diff_cont 24450 2890 24670 3110) + rect(diff_cont 24450 2490 24670 2710) + rect(diff_cont 24450 90 24670 310) + rect(diff_cont 24450 -310 24670 -90) + rect(via1 24435 1675 24685 1925) + rect(metal2 24360 1600 24760 2000) + rect(metal2_lbl 24559 1799 24561 1801) + ) + net(3 name(VDD) + rect(diff_cont 7810 2490 8030 2710) + rect(diff_cont 7810 2890 8030 3110) + rect(diff_cont 7810 2890 8030 3110) + rect(diff_cont 7810 2490 8030 2710) + rect(diff_cont 5170 2490 5390 2710) + rect(diff_cont 5170 2890 5390 3110) + rect(diff_cont 5170 2890 5390 3110) + rect(diff_cont 5170 2490 5390 2710) + rect(diff_cont 2530 2490 2750 2710) + rect(diff_cont 2530 2890 2750 3110) + rect(diff_cont 2530 2890 2750 3110) + rect(diff_cont 2530 2490 2750 2710) + rect(diff_cont -110 2490 110 2710) + rect(diff_cont -110 2890 110 3110) + rect(diff_cont -110 2890 110 3110) + rect(diff_cont -110 2490 110 2710) + rect(diff_cont 13090 2490 13310 2710) + rect(diff_cont 13090 2890 13310 3110) + rect(diff_cont 13090 2890 13310 3110) + rect(diff_cont 13090 2490 13310 2710) + rect(diff_cont 10450 2490 10670 2710) + rect(diff_cont 10450 2890 10670 3110) + rect(diff_cont 10450 2890 10670 3110) + rect(diff_cont 10450 2490 10670 2710) + rect(diff_cont 18370 2490 18590 2710) + rect(diff_cont 18370 2890 18590 3110) + rect(diff_cont 18370 2890 18590 3110) + rect(diff_cont 18370 2490 18590 2710) + rect(diff_cont 15730 2490 15950 2710) + rect(diff_cont 15730 2890 15950 3110) + rect(diff_cont 15730 2890 15950 3110) + rect(diff_cont 15730 2490 15950 2710) + rect(diff_cont 23650 2490 23870 2710) + rect(diff_cont 23650 2890 23870 3110) + rect(diff_cont 23650 2890 23870 3110) + rect(diff_cont 23650 2490 23870 2710) + rect(diff_cont 21010 2490 21230 2710) + rect(diff_cont 21010 2890 21230 3110) + rect(diff_cont 21010 2890 21230 3110) + rect(diff_cont 21010 2490 21230 2710) + rect(metal1 -180 3100 180 4220) + rect(metal1 2460 3100 2820 4220) + rect(metal1 5100 3100 5460 4220) + rect(metal1 7740 3100 8100 4220) + rect(metal1 10380 3100 10740 4220) + rect(metal1 13020 3100 13380 4220) + rect(metal1 15660 3100 16020 4220) + rect(metal1 18300 3100 18660 4220) + rect(metal1 20940 3100 21300 4220) + rect(metal1 23580 3100 23940 4220) + rect(metal1 7740 2420 8100 3180) + rect(metal1 7740 2420 8100 3180) + rect(metal1 5100 2420 5460 3180) + rect(metal1 5100 2420 5460 3180) + rect(metal1 2460 2420 2820 3180) + rect(metal1 2460 2420 2820 3180) + rect(metal1 -180 2420 180 3180) + rect(metal1 -180 2420 180 3180) + rect(metal1 13020 2420 13380 3180) + rect(metal1 13020 2420 13380 3180) + rect(metal1 10380 2420 10740 3180) + rect(metal1 10380 2420 10740 3180) + rect(metal1 18300 2420 18660 3180) + rect(metal1 18300 2420 18660 3180) + rect(metal1 15660 2420 16020 3180) + rect(metal1 15660 2420 16020 3180) + rect(metal1 23580 2420 23940 3180) + rect(metal1 23580 2420 23940 3180) + rect(metal1 20940 2420 21300 3180) + rect(metal1 20940 2420 21300 3180) + rect(metal2_lbl -1 2799 1 2801) + ) + net(4 name('BULK,VSS') + rect(diff_cont 7810 -310 8030 -90) + rect(diff_cont 7810 90 8030 310) + rect(diff_cont 7810 90 8030 310) + rect(diff_cont 7810 -310 8030 -90) + rect(diff_cont 5170 -310 5390 -90) + rect(diff_cont 5170 90 5390 310) + rect(diff_cont 5170 90 5390 310) + rect(diff_cont 5170 -310 5390 -90) + rect(diff_cont 2530 -310 2750 -90) + rect(diff_cont 2530 90 2750 310) + rect(diff_cont 2530 90 2750 310) + rect(diff_cont 2530 -310 2750 -90) + rect(diff_cont -110 -310 110 -90) + rect(diff_cont -110 90 110 310) + rect(diff_cont -110 90 110 310) + rect(diff_cont -110 -310 110 -90) + rect(diff_cont 13090 -310 13310 -90) + rect(diff_cont 13090 90 13310 310) + rect(diff_cont 13090 90 13310 310) + rect(diff_cont 13090 -310 13310 -90) + rect(diff_cont 10450 -310 10670 -90) + rect(diff_cont 10450 90 10670 310) + rect(diff_cont 10450 90 10670 310) + rect(diff_cont 10450 -310 10670 -90) + rect(diff_cont 18370 -310 18590 -90) + rect(diff_cont 18370 90 18590 310) + rect(diff_cont 18370 90 18590 310) + rect(diff_cont 18370 -310 18590 -90) + rect(diff_cont 15730 -310 15950 -90) + rect(diff_cont 15730 90 15950 310) + rect(diff_cont 15730 90 15950 310) + rect(diff_cont 15730 -310 15950 -90) + rect(diff_cont 23650 -310 23870 -90) + rect(diff_cont 23650 90 23870 310) + rect(diff_cont 23650 90 23870 310) + rect(diff_cont 23650 -310 23870 -90) + rect(diff_cont 21010 -310 21230 -90) + rect(diff_cont 21010 90 21230 310) + rect(diff_cont 21010 90 21230 310) + rect(diff_cont 21010 -310 21230 -90) + rect(metal1 -180 -1420 180 -300) + rect(metal1 2460 -1420 2820 -300) + rect(metal1 5100 -1420 5460 -300) + rect(metal1 7740 -1420 8100 -300) + rect(metal1 10380 -1420 10740 -300) + rect(metal1 13020 -1420 13380 -300) + rect(metal1 15660 -1420 16020 -300) + rect(metal1 18300 -1420 18660 -300) + rect(metal1 20940 -1420 21300 -300) + rect(metal1 23580 -1420 23940 -300) + rect(metal1 7740 -380 8100 380) + rect(metal1 7740 -380 8100 380) + rect(metal1 5100 -380 5460 380) + rect(metal1 5100 -380 5460 380) + rect(metal1 2460 -380 2820 380) + rect(metal1 2460 -380 2820 380) + rect(metal1 -180 -380 180 380) + rect(metal1 -180 -380 180 380) + rect(metal1 13020 -380 13380 380) + rect(metal1 13020 -380 13380 380) + rect(metal1 10380 -380 10740 380) + rect(metal1 10380 -380 10740 380) + rect(metal1 18300 -380 18660 380) + rect(metal1 18300 -380 18660 380) + rect(metal1 15660 -380 16020 380) + rect(metal1 15660 -380 16020 380) + rect(metal1 23580 -380 23940 380) + rect(metal1 23580 -380 23940 380) + rect(metal1 20940 -380 21300 380) + rect(metal1 20940 -380 21300 380) + rect(metal2_lbl -1 -1 1 1) + ) + net(5 + rect(diff_cont 3330 2890 3550 3110) + rect(diff_cont 3330 2490 3550 2710) + rect(diff_cont 3330 90 3550 310) + rect(diff_cont 3330 -310 3550 -90) + ) + net(6 + rect(diff_cont 19170 2890 19390 3110) + rect(diff_cont 19170 2490 19390 2710) + rect(diff_cont 19170 90 19390 310) + rect(diff_cont 19170 -310 19390 -90) + ) + net(7 + rect(diff_cont 13890 2890 14110 3110) + rect(diff_cont 13890 2490 14110 2710) + rect(diff_cont 13890 90 14110 310) + rect(diff_cont 13890 -310 14110 -90) + ) + net(8 + rect(diff_cont 8610 2890 8830 3110) + rect(diff_cont 8610 2490 8830 2710) + rect(diff_cont 8610 90 8830 310) + rect(diff_cont 8610 -310 8830 -90) + ) + + # Outgoing pins and their connections to nets + pin(FB 1) + pin(OSC 2) + pin(VDD 3) + pin('BULK,VSS' 4) + + # Subcircuits and their connections + circuit($1 INV2PAIR location(19420 -800) + pin(BULK 4) + pin($1 1) + pin($2 3) + pin($3 4) + pin($4 6) + pin($5 2) + pin($6 3) + ) + circuit($2 INV2PAIR location(-1700 -800) + pin(BULK 4) + pin($2 3) + pin($3 4) + pin($4 1) + pin($5 5) + pin($6 3) + ) + circuit($3 INV2PAIR location(3580 -800) + pin(BULK 4) + pin($2 3) + pin($3 4) + pin($4 5) + pin($5 8) + pin($6 3) + ) + circuit($4 INV2PAIR location(8860 -800) + pin(BULK 4) + pin($2 3) + pin($3 4) + pin($4 8) + pin($5 7) + pin($6 3) + ) + circuit($5 INV2PAIR location(14140 -800) + pin(BULK 4) + pin($2 3) + pin($3 4) + pin($4 7) + pin($5 6) + pin($6 3) + ) + +) diff --git a/testdata/algo/l2n_writer_au_2s.txt b/testdata/algo/l2n_writer_au_2s.txt index 859310b4a..27fff08d3 100644 --- a/testdata/algo/l2n_writer_au_2s.txt +++ b/testdata/algo/l2n_writer_au_2s.txt @@ -34,132 +34,132 @@ G(rbulk BULK) G(ptie BULK) D(D$PMOS PMOS T(S - R(psd -650 -475 -125 475) + R(psd (-650 -475) (525 950)) ) T(G - R(poly -125 -475 125 475) + R(poly (-125 -475) (250 950)) ) T(D - R(psd 125 -475 675 475) + R(psd (125 -475) (550 950)) ) T(B - R(nwell -125 -475 125 475) + R(nwell (-125 -475) (250 950)) ) ) D(D$PMOS$1 PMOS T(S - R(psd -675 -475 -125 475) + R(psd (-675 -475) (550 950)) ) T(G - R(poly -125 -475 125 475) + R(poly (-125 -475) (250 950)) ) T(D - R(psd 125 -475 650 475) + R(psd (125 -475) (525 950)) ) T(B - R(nwell -125 -475 125 475) + R(nwell (-125 -475) (250 950)) ) ) D(D$NMOS NMOS T(S - R(nsd -650 -475 -125 475) + R(nsd (-650 -475) (525 950)) ) T(G - R(poly -125 -475 125 475) + R(poly (-125 -475) (250 950)) ) T(D - R(nsd 125 -475 675 475) + R(nsd (125 -475) (550 950)) ) T(B - R(rbulk -125 -475 125 475) + R(rbulk (-125 -475) (250 950)) ) ) D(D$NMOS$1 NMOS T(S - R(nsd -675 -475 -125 475) + R(nsd (-675 -475) (550 950)) ) T(G - R(poly -125 -475 125 475) + R(poly (-125 -475) (250 950)) ) T(D - R(nsd 125 -475 650 475) + R(nsd (125 -475) (525 950)) ) T(B - R(rbulk -125 -475 125 475) + R(rbulk (-125 -475) (250 950)) ) ) X(INV2 N(1 - R(nwell -1400 1800 1400 4580) - R(diff_cont -110 3930 110 4150) - R(ntie -400 3700 400 4380) + R(nwell (-1400 1800) (2800 2780)) + R(diff_cont (-1510 -650) (220 220)) + R(ntie (-510 -450) (800 680)) ) N(2 I(IN) - R(poly -525 -250 -275 2250) - R(poly -1700 1620 -400 1980) - R(poly -525 -800 -275 800) - R(poly -525 2000 -275 3600) - R(poly_lbl -801 1799 -799 1801) - R(poly_cont -1630 1690 -1410 1910) + R(poly (-525 -250) (250 2500)) + R(poly (-1425 -630) (1300 360)) + R(poly (-125 -2780) (250 1600)) + R(poly (-250 1200) (250 1600)) + R(poly_lbl (-526 -1801) (2 2)) + R(poly_cont (-831 -111) (220 220)) ) N(3 - R(poly 275 -250 525 2250) - R(poly 220 820 580 1180) - R(poly 275 2000 525 3600) - R(poly 275 -800 525 800) - R(diff_cont -910 2490 -690 2710) - R(diff_cont -910 2890 -690 3110) - R(diff_cont -910 -310 -690 -90) - R(diff_cont -910 90 -690 310) - R(poly_cont 290 890 510 1110) - R(metal1 -800 820 580 1180) - R(metal1 -980 -420 -620 2420) - R(metal1 -980 2420 -620 3180) - R(metal1 -980 -380 -620 380) - R(psd -1050 2325 -525 3275) - R(nsd -1050 -475 -525 475) + R(poly (275 -250) (250 2500)) + R(poly (-305 -1430) (360 360)) + R(poly (-305 820) (250 1600)) + R(poly (-250 -4400) (250 1600)) + R(diff_cont (-1435 1690) (220 220)) + R(diff_cont (-220 180) (220 220)) + R(diff_cont (-220 -3420) (220 220)) + R(diff_cont (-220 180) (220 220)) + R(poly_cont (980 580) (220 220)) + R(metal1 (-1310 -290) (1380 360)) + R(metal1 (-1560 -1600) (360 2840)) + R(metal1 (-360 0) (360 760)) + R(metal1 (-360 -3560) (360 760)) + R(psd (-430 1945) (525 950)) + R(nsd (-525 -3750) (525 950)) ) N(4 I(OUT) - R(diff_cont 690 2890 910 3110) - R(diff_cont 690 2490 910 2710) - R(diff_cont 690 90 910 310) - R(diff_cont 690 -310 910 -90) - Q(metal1 800 20 * 380 940 * * 1620 620 * * 2420 980 * * 1980 1300 * * 20) - R(metal1 620 2420 980 3180) - R(metal1 620 -380 980 380) - R(metal1_lbl 799 1799 801 1801) - R(psd 525 2325 1050 3275) - R(nsd 525 -475 1050 475) + R(diff_cont (690 2890) (220 220)) + R(diff_cont (-220 -620) (220 220)) + R(diff_cont (-220 -2620) (220 220)) + R(diff_cont (-220 -620) (220 220)) + Q(metal1 (-110 110) (0 360) (140 0) (0 1240) (-320 0) (0 800) (360 0) (0 -440) (320 0) (0 -1960)) + R(metal1 (-680 2400) (360 760)) + R(metal1 (-360 -3560) (360 760)) + R(metal1_lbl (-181 1419) (2 2)) + R(psd (-276 524) (525 950)) + R(nsd (-525 -3750) (525 950)) ) N(5 I(VSS) - R(diff_cont -110 -310 110 -90) - R(diff_cont -110 90 110 310) - R(diff_cont -110 90 110 310) - R(diff_cont -110 -310 110 -90) - R(metal1 -180 -380 180 380) - R(metal1 -180 -380 180 380) - R(via1 -125 -325 125 -75) - R(via1 -125 75 125 325) - R(metal2 -1400 -450 1400 450) - R(metal2_lbl 1239 -91 1241 -89) - R(nsd -275 -475 275 475) + R(diff_cont (-110 -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(metal1 (-290 -290) (360 760)) + R(metal1 (-360 -760) (360 760)) + R(via1 (-305 -705) (250 250)) + R(via1 (-250 150) (250 250)) + R(metal2 (-1525 -775) (2800 900)) + R(metal2_lbl (-161 -541) (2 2)) + R(nsd (-1516 -386) (550 950)) ) N(6 I(VDD) - R(diff_cont -110 2490 110 2710) - R(diff_cont -110 2890 110 3110) - R(diff_cont -110 2890 110 3110) - R(diff_cont -110 2490 110 2710) - R(metal1 -180 2420 180 3180) - R(metal1 -180 2420 180 3180) - R(via1 -125 2475 125 2725) - R(via1 -125 2875 125 3125) - R(metal2 -1400 2350 1400 3250) - R(metal2_lbl 1249 2799 1251 2801) - R(psd -275 2325 275 3275) + R(diff_cont (-110 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(metal1 (-290 -290) (360 760)) + R(metal1 (-360 -760) (360 760)) + R(via1 (-305 -705) (250 250)) + R(via1 (-250 150) (250 250)) + R(metal2 (-1525 -775) (2800 900)) + R(metal2_lbl (-151 -451) (2 2)) + R(psd (-1526 -476) (550 950)) ) N(7 I(BULK) - R(diff_cont -110 -1360 110 -1140) - R(ptie -400 -1590 400 -910) + R(diff_cont (-110 -1360) (220 220)) + R(ptie (-510 -450) (800 680)) ) P($0 1) P(IN 2) @@ -224,51 +224,51 @@ X(INV2 X(INV2PAIR N(1 I(BULK)) N(2 - R(diff_cont 3430 3290 3650 3510) - R(diff_cont 3430 3690 3650 3910) - R(diff_cont 3430 490 3650 710) - R(diff_cont 3430 890 3650 1110) + 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 4230 3290 4450 3510) - R(diff_cont 4230 3690 4450 3910) - R(diff_cont 4230 3690 4450 3910) - R(diff_cont 4230 3290 4450 3510) - R(diff_cont 1590 3290 1810 3510) - R(diff_cont 1590 3690 1810 3910) - R(diff_cont 1590 3690 1810 3910) - R(diff_cont 1590 3290 1810 3510) - R(metal1 4160 3220 4520 3980) - R(metal1 4160 3220 4520 3980) - R(metal1 1520 3220 1880 3980) - R(metal1 1520 3220 1880 3980) + 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(4 - R(diff_cont 4230 490 4450 710) - R(diff_cont 4230 890 4450 1110) - R(diff_cont 4230 890 4450 1110) - R(diff_cont 4230 490 4450 710) - R(diff_cont 1590 490 1810 710) - R(diff_cont 1590 890 1810 1110) - R(diff_cont 1590 890 1810 1110) - R(diff_cont 1590 490 1810 710) - R(metal1 4160 420 4520 1180) - R(metal1 4160 420 4520 1180) - R(metal1 1520 420 1880 1180) - R(metal1 1520 420 1880 1180) + 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(5 - R(diff_cont 2390 3690 2610 3910) - R(diff_cont 2390 3290 2610 3510) - R(diff_cont 2390 890 2610 1110) - R(diff_cont 2390 490 2610 710) + 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(6) N(7 - R(diff_cont 5030 3690 5250 3910) - R(diff_cont 5030 3290 5250 3510) - R(diff_cont 5030 890 5250 1110) - R(diff_cont 5030 490 5250 710) + 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) P(BULK 1) @@ -298,194 +298,194 @@ X(INV2PAIR ) X(RINGO N(1 I(FB) - R(diff_cont 22850 2490 23070 2710) - R(diff_cont 22850 2890 23070 3110) - R(diff_cont 22850 -310 23070 -90) - R(diff_cont 22850 90 23070 310) - R(metal1 -1700 1620 -1340 1980) - R(via1 -1645 1675 -1395 1925) - R(via1 22835 1675 23085 1925) - R(metal2 -1720 1600 23160 2000) - R(metal2_lbl -1 1799 1 1801) + 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(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 24670 3110) - R(diff_cont 24450 2490 24670 2710) - R(diff_cont 24450 90 24670 310) - R(diff_cont 24450 -310 24670 -90) - R(via1 24435 1675 24685 1925) - R(metal2 24360 1600 24760 2000) - R(metal2_lbl 24559 1799 24561 1801) + 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(metal2 (-325 -325) (400 400)) + R(metal2_lbl (-201 -201) (2 2)) ) N(3 I(VDD) - R(diff_cont 7810 2490 8030 2710) - R(diff_cont 7810 2890 8030 3110) - R(diff_cont 7810 2890 8030 3110) - R(diff_cont 7810 2490 8030 2710) - R(diff_cont 5170 2490 5390 2710) - R(diff_cont 5170 2890 5390 3110) - R(diff_cont 5170 2890 5390 3110) - R(diff_cont 5170 2490 5390 2710) - R(diff_cont 2530 2490 2750 2710) - R(diff_cont 2530 2890 2750 3110) - R(diff_cont 2530 2890 2750 3110) - R(diff_cont 2530 2490 2750 2710) - R(diff_cont -110 2490 110 2710) - R(diff_cont -110 2890 110 3110) - R(diff_cont -110 2890 110 3110) - R(diff_cont -110 2490 110 2710) - R(diff_cont 13090 2490 13310 2710) - R(diff_cont 13090 2890 13310 3110) - R(diff_cont 13090 2890 13310 3110) - R(diff_cont 13090 2490 13310 2710) - R(diff_cont 10450 2490 10670 2710) - R(diff_cont 10450 2890 10670 3110) - R(diff_cont 10450 2890 10670 3110) - R(diff_cont 10450 2490 10670 2710) - R(diff_cont 18370 2490 18590 2710) - R(diff_cont 18370 2890 18590 3110) - R(diff_cont 18370 2890 18590 3110) - R(diff_cont 18370 2490 18590 2710) - R(diff_cont 15730 2490 15950 2710) - R(diff_cont 15730 2890 15950 3110) - R(diff_cont 15730 2890 15950 3110) - R(diff_cont 15730 2490 15950 2710) - R(diff_cont 23650 2490 23870 2710) - R(diff_cont 23650 2890 23870 3110) - R(diff_cont 23650 2890 23870 3110) - R(diff_cont 23650 2490 23870 2710) - R(diff_cont 21010 2490 21230 2710) - R(diff_cont 21010 2890 21230 3110) - R(diff_cont 21010 2890 21230 3110) - R(diff_cont 21010 2490 21230 2710) - R(metal1 -180 3100 180 4220) - R(metal1 2460 3100 2820 4220) - R(metal1 5100 3100 5460 4220) - R(metal1 7740 3100 8100 4220) - R(metal1 10380 3100 10740 4220) - R(metal1 13020 3100 13380 4220) - R(metal1 15660 3100 16020 4220) - R(metal1 18300 3100 18660 4220) - R(metal1 20940 3100 21300 4220) - R(metal1 23580 3100 23940 4220) - R(metal1 7740 2420 8100 3180) - R(metal1 7740 2420 8100 3180) - R(metal1 5100 2420 5460 3180) - R(metal1 5100 2420 5460 3180) - R(metal1 2460 2420 2820 3180) - R(metal1 2460 2420 2820 3180) - R(metal1 -180 2420 180 3180) - R(metal1 -180 2420 180 3180) - R(metal1 13020 2420 13380 3180) - R(metal1 13020 2420 13380 3180) - R(metal1 10380 2420 10740 3180) - R(metal1 10380 2420 10740 3180) - R(metal1 18300 2420 18660 3180) - R(metal1 18300 2420 18660 3180) - R(metal1 15660 2420 16020 3180) - R(metal1 15660 2420 16020 3180) - R(metal1 23580 2420 23940 3180) - R(metal1 23580 2420 23940 3180) - R(metal1 20940 2420 21300 3180) - R(metal1 20940 2420 21300 3180) - R(metal2_lbl -1 2799 1 2801) + 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 (2280 -1120) (360 1120)) + R(metal1 (2280 -1120) (360 1120)) + R(metal1 (2280 -1120) (360 1120)) + R(metal1 (2280 -1120) (360 1120)) + R(metal1 (2280 -1120) (360 1120)) + R(metal1 (2280 -1120) (360 1120)) + 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)) ) N(4 I('BULK,VSS') - R(diff_cont 7810 -310 8030 -90) - R(diff_cont 7810 90 8030 310) - R(diff_cont 7810 90 8030 310) - R(diff_cont 7810 -310 8030 -90) - R(diff_cont 5170 -310 5390 -90) - R(diff_cont 5170 90 5390 310) - R(diff_cont 5170 90 5390 310) - R(diff_cont 5170 -310 5390 -90) - R(diff_cont 2530 -310 2750 -90) - R(diff_cont 2530 90 2750 310) - R(diff_cont 2530 90 2750 310) - R(diff_cont 2530 -310 2750 -90) - R(diff_cont -110 -310 110 -90) - R(diff_cont -110 90 110 310) - R(diff_cont -110 90 110 310) - R(diff_cont -110 -310 110 -90) - R(diff_cont 13090 -310 13310 -90) - R(diff_cont 13090 90 13310 310) - R(diff_cont 13090 90 13310 310) - R(diff_cont 13090 -310 13310 -90) - R(diff_cont 10450 -310 10670 -90) - R(diff_cont 10450 90 10670 310) - R(diff_cont 10450 90 10670 310) - R(diff_cont 10450 -310 10670 -90) - R(diff_cont 18370 -310 18590 -90) - R(diff_cont 18370 90 18590 310) - R(diff_cont 18370 90 18590 310) - R(diff_cont 18370 -310 18590 -90) - R(diff_cont 15730 -310 15950 -90) - R(diff_cont 15730 90 15950 310) - R(diff_cont 15730 90 15950 310) - R(diff_cont 15730 -310 15950 -90) - R(diff_cont 23650 -310 23870 -90) - R(diff_cont 23650 90 23870 310) - R(diff_cont 23650 90 23870 310) - R(diff_cont 23650 -310 23870 -90) - R(diff_cont 21010 -310 21230 -90) - R(diff_cont 21010 90 21230 310) - R(diff_cont 21010 90 21230 310) - R(diff_cont 21010 -310 21230 -90) - R(metal1 -180 -1420 180 -300) - R(metal1 2460 -1420 2820 -300) - R(metal1 5100 -1420 5460 -300) - R(metal1 7740 -1420 8100 -300) - R(metal1 10380 -1420 10740 -300) - R(metal1 13020 -1420 13380 -300) - R(metal1 15660 -1420 16020 -300) - R(metal1 18300 -1420 18660 -300) - R(metal1 20940 -1420 21300 -300) - R(metal1 23580 -1420 23940 -300) - R(metal1 7740 -380 8100 380) - R(metal1 7740 -380 8100 380) - R(metal1 5100 -380 5460 380) - R(metal1 5100 -380 5460 380) - R(metal1 2460 -380 2820 380) - R(metal1 2460 -380 2820 380) - R(metal1 -180 -380 180 380) - R(metal1 -180 -380 180 380) - R(metal1 13020 -380 13380 380) - R(metal1 13020 -380 13380 380) - R(metal1 10380 -380 10740 380) - R(metal1 10380 -380 10740 380) - R(metal1 18300 -380 18660 380) - R(metal1 18300 -380 18660 380) - R(metal1 15660 -380 16020 380) - R(metal1 15660 -380 16020 380) - R(metal1 23580 -380 23940 380) - R(metal1 23580 -380 23940 380) - R(metal1 20940 -380 21300 380) - R(metal1 20940 -380 21300 380) - R(metal2_lbl -1 -1 1 1) + 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 (2280 -1120) (360 1120)) + R(metal1 (2280 -1120) (360 1120)) + R(metal1 (2280 -1120) (360 1120)) + R(metal1 (2280 -1120) (360 1120)) + R(metal1 (2280 -1120) (360 1120)) + R(metal1 (2280 -1120) (360 1120)) + 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 3330 2890 3550 3110) - R(diff_cont 3330 2490 3550 2710) - R(diff_cont 3330 90 3550 310) - R(diff_cont 3330 -310 3550 -90) + 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(6 - R(diff_cont 19170 2890 19390 3110) - R(diff_cont 19170 2490 19390 2710) - R(diff_cont 19170 90 19390 310) - R(diff_cont 19170 -310 19390 -90) + 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(7 - R(diff_cont 13890 2890 14110 3110) - R(diff_cont 13890 2490 14110 2710) - R(diff_cont 13890 90 14110 310) - R(diff_cont 13890 -310 14110 -90) + 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(8 - R(diff_cont 8610 2890 8830 3110) - R(diff_cont 8610 2490 8830 2710) - R(diff_cont 8610 90 8830 310) - R(diff_cont 8610 -310 8830 -90) + 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)) ) P(FB 1) P(OSC 2) diff --git a/testdata/algo/l2n_writer_au_s.txt b/testdata/algo/l2n_writer_au_s.txt index e994d927b..34b55cfca 100644 --- a/testdata/algo/l2n_writer_au_s.txt +++ b/testdata/algo/l2n_writer_au_s.txt @@ -25,109 +25,109 @@ C(psd diff_cont psd) C(nsd diff_cont nsd) D(D$PMOS PMOS T(S - R(psd -650 -475 -125 475) + R(psd (-650 -475) (525 950)) ) T(G - R(poly -125 -475 125 475) + R(poly (-125 -475) (250 950)) ) T(D - R(psd 125 -475 675 475) + R(psd (125 -475) (550 950)) ) ) D(D$PMOS$1 PMOS T(S - R(psd -675 -475 -125 475) + R(psd (-675 -475) (550 950)) ) T(G - R(poly -125 -475 125 475) + R(poly (-125 -475) (250 950)) ) T(D - R(psd 125 -475 650 475) + R(psd (125 -475) (525 950)) ) ) D(D$NMOS NMOS T(S - R(nsd -650 -475 -125 475) + R(nsd (-650 -475) (525 950)) ) T(G - R(poly -125 -475 125 475) + R(poly (-125 -475) (250 950)) ) T(D - R(nsd 125 -475 675 475) + R(nsd (125 -475) (550 950)) ) ) D(D$NMOS$1 NMOS T(S - R(nsd -675 -475 -125 475) + R(nsd (-675 -475) (550 950)) ) T(G - R(poly -125 -475 125 475) + R(poly (-125 -475) (250 950)) ) T(D - R(nsd 125 -475 650 475) + R(nsd (125 -475) (525 950)) ) ) X(INV2 N(1 I(IN) - R(poly -525 -250 -275 2250) - R(poly -1700 1620 -400 1980) - R(poly -525 -800 -275 800) - R(poly -525 2000 -275 3600) - R(poly_lbl -801 1799 -799 1801) - R(poly_cont -1630 1690 -1410 1910) + R(poly (-525 -250) (250 2500)) + R(poly (-1425 -630) (1300 360)) + R(poly (-125 -2780) (250 1600)) + R(poly (-250 1200) (250 1600)) + R(poly_lbl (-526 -1801) (2 2)) + R(poly_cont (-831 -111) (220 220)) ) N(2 - R(poly 275 -250 525 2250) - R(poly 220 820 580 1180) - R(poly 275 2000 525 3600) - R(poly 275 -800 525 800) - R(diff_cont -910 2490 -690 2710) - R(diff_cont -910 2890 -690 3110) - R(diff_cont -910 -310 -690 -90) - R(diff_cont -910 90 -690 310) - R(poly_cont 290 890 510 1110) - R(metal1 -800 820 580 1180) - R(metal1 -980 -420 -620 2420) - R(metal1 -980 2420 -620 3180) - R(metal1 -980 -380 -620 380) - R(psd -1050 2325 -525 3275) - R(nsd -1050 -475 -525 475) + R(poly (275 -250) (250 2500)) + R(poly (-305 -1430) (360 360)) + R(poly (-305 820) (250 1600)) + R(poly (-250 -4400) (250 1600)) + R(diff_cont (-1435 1690) (220 220)) + R(diff_cont (-220 180) (220 220)) + R(diff_cont (-220 -3420) (220 220)) + R(diff_cont (-220 180) (220 220)) + R(poly_cont (980 580) (220 220)) + R(metal1 (-1310 -290) (1380 360)) + R(metal1 (-1560 -1600) (360 2840)) + R(metal1 (-360 0) (360 760)) + R(metal1 (-360 -3560) (360 760)) + R(psd (-430 1945) (525 950)) + R(nsd (-525 -3750) (525 950)) ) N(3 I(OUT) - R(diff_cont 690 2890 910 3110) - R(diff_cont 690 2490 910 2710) - R(diff_cont 690 90 910 310) - R(diff_cont 690 -310 910 -90) - Q(metal1 800 20 * 380 940 * * 1620 620 * * 2420 980 * * 1980 1300 * * 20) - R(metal1 620 2420 980 3180) - R(metal1 620 -380 980 380) - R(metal1_lbl 799 1799 801 1801) - R(psd 525 2325 1050 3275) - R(nsd 525 -475 1050 475) + R(diff_cont (690 2890) (220 220)) + R(diff_cont (-220 -620) (220 220)) + R(diff_cont (-220 -2620) (220 220)) + R(diff_cont (-220 -620) (220 220)) + Q(metal1 (-110 110) (0 360) (140 0) (0 1240) (-320 0) (0 800) (360 0) (0 -440) (320 0) (0 -1960)) + R(metal1 (-680 2400) (360 760)) + R(metal1 (-360 -3560) (360 760)) + R(metal1_lbl (-181 1419) (2 2)) + R(psd (-276 524) (525 950)) + R(nsd (-525 -3750) (525 950)) ) N(4 - R(diff_cont -110 -310 110 -90) - R(diff_cont -110 90 110 310) - R(diff_cont -110 90 110 310) - R(diff_cont -110 -310 110 -90) - R(metal1 -180 -380 180 380) - R(metal1 -180 -380 180 380) - R(via1 -125 -325 125 -75) - R(via1 -125 75 125 325) - R(metal2 -1400 -450 1400 450) - R(nsd -275 -475 275 475) + R(diff_cont (-110 -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(metal1 (-290 -290) (360 760)) + R(metal1 (-360 -760) (360 760)) + R(via1 (-305 -705) (250 250)) + R(via1 (-250 150) (250 250)) + R(metal2 (-1525 -775) (2800 900)) + R(nsd (-1675 -925) (550 950)) ) N(5 - R(diff_cont -110 2490 110 2710) - R(diff_cont -110 2890 110 3110) - R(diff_cont -110 2890 110 3110) - R(diff_cont -110 2490 110 2710) - R(metal1 -180 2420 180 3180) - R(metal1 -180 2420 180 3180) - R(via1 -125 2475 125 2725) - R(via1 -125 2875 125 3125) - R(metal2 -1400 2350 1400 3250) - R(psd -275 2325 275 3275) + R(diff_cont (-110 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(metal1 (-290 -290) (360 760)) + R(metal1 (-360 -760) (360 760)) + R(via1 (-305 -705) (250 250)) + R(via1 (-250 150) (250 250)) + R(metal2 (-1525 -775) (2800 900)) + R(psd (-1675 -925) (550 950)) ) P(IN 1) P($1 2) @@ -185,204 +185,204 @@ X(INV2 ) X(RINGO N(1 I(FB) - R(diff_cont 22850 2490 23070 2710) - R(diff_cont 22850 2890 23070 3110) - R(diff_cont 22850 -310 23070 -90) - R(diff_cont 22850 90 23070 310) - R(metal1 -1700 1620 -1340 1980) - R(via1 -1645 1675 -1395 1925) - R(via1 22835 1675 23085 1925) - R(metal2 -1720 1600 23160 2000) - R(metal2_lbl -1 1799 1 1801) + 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(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 24670 3110) - R(diff_cont 24450 2490 24670 2710) - R(diff_cont 24450 90 24670 310) - R(diff_cont 24450 -310 24670 -90) - R(via1 24435 1675 24685 1925) - R(metal2 24360 1600 24760 2000) - R(metal2_lbl 24559 1799 24561 1801) + 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(metal2 (-325 -325) (400 400)) + R(metal2_lbl (-201 -201) (2 2)) ) N(3 I(VSS) - R(diff_cont 2530 -310 2750 -90) - R(diff_cont 2530 90 2750 310) - R(diff_cont 2530 90 2750 310) - R(diff_cont 2530 -310 2750 -90) - R(diff_cont -110 -310 110 -90) - R(diff_cont -110 90 110 310) - R(diff_cont -110 90 110 310) - R(diff_cont -110 -310 110 -90) - R(diff_cont 5170 -310 5390 -90) - R(diff_cont 5170 90 5390 310) - R(diff_cont 5170 90 5390 310) - R(diff_cont 5170 -310 5390 -90) - R(diff_cont 7810 -310 8030 -90) - R(diff_cont 7810 90 8030 310) - R(diff_cont 7810 90 8030 310) - R(diff_cont 7810 -310 8030 -90) - R(diff_cont 10450 -310 10670 -90) - R(diff_cont 10450 90 10670 310) - R(diff_cont 10450 90 10670 310) - R(diff_cont 10450 -310 10670 -90) - R(diff_cont 13090 -310 13310 -90) - R(diff_cont 13090 90 13310 310) - R(diff_cont 13090 90 13310 310) - R(diff_cont 13090 -310 13310 -90) - R(diff_cont 15730 -310 15950 -90) - R(diff_cont 15730 90 15950 310) - R(diff_cont 15730 90 15950 310) - R(diff_cont 15730 -310 15950 -90) - R(diff_cont 18370 -310 18590 -90) - R(diff_cont 18370 90 18590 310) - R(diff_cont 18370 90 18590 310) - R(diff_cont 18370 -310 18590 -90) - R(diff_cont 21010 -310 21230 -90) - R(diff_cont 21010 90 21230 310) - R(diff_cont 21010 90 21230 310) - R(diff_cont 21010 -310 21230 -90) - R(diff_cont 23650 -310 23870 -90) - R(diff_cont 23650 90 23870 310) - R(diff_cont 23650 90 23870 310) - R(diff_cont 23650 -310 23870 -90) - R(metal1 2460 -380 2820 380) - R(metal1 2460 -380 2820 380) - R(metal1 -180 -380 180 380) - R(metal1 -180 -380 180 380) - R(metal1 5100 -380 5460 380) - R(metal1 5100 -380 5460 380) - R(metal1 7740 -380 8100 380) - R(metal1 7740 -380 8100 380) - R(metal1 10380 -380 10740 380) - R(metal1 10380 -380 10740 380) - R(metal1 13020 -380 13380 380) - R(metal1 13020 -380 13380 380) - R(metal1 15660 -380 16020 380) - R(metal1 15660 -380 16020 380) - R(metal1 18300 -380 18660 380) - R(metal1 18300 -380 18660 380) - R(metal1 20940 -380 21300 380) - R(metal1 20940 -380 21300 380) - R(metal1 23580 -380 23940 380) - R(metal1 23580 -380 23940 380) - R(metal2_lbl -1 -1 1 1) + R(diff_cont (2530 -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 (5060 -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 (2420 -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 (2420 -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 (2420 -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 (2420 -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 (2420 -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 (2420 -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 (2420 -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 -290) (360 760)) + R(metal1 (-360 -760) (360 760)) + R(metal1 (-3000 -760) (360 760)) + R(metal1 (-360 -760) (360 760)) + R(metal1 (4920 -760) (360 760)) + R(metal1 (-360 -760) (360 760)) + R(metal1 (2280 -760) (360 760)) + R(metal1 (-360 -760) (360 760)) + R(metal1 (2280 -760) (360 760)) + R(metal1 (-360 -760) (360 760)) + R(metal1 (2280 -760) (360 760)) + R(metal1 (-360 -760) (360 760)) + R(metal1 (2280 -760) (360 760)) + R(metal1 (-360 -760) (360 760)) + R(metal1 (2280 -760) (360 760)) + R(metal1 (-360 -760) (360 760)) + R(metal1 (2280 -760) (360 760)) + R(metal1 (-360 -760) (360 760)) + R(metal1 (2280 -760) (360 760)) + R(metal1 (-360 -760) (360 760)) + R(metal2_lbl (-23941 -381) (2 2)) ) N(4 I(VDD) - R(diff_cont 2530 2490 2750 2710) - R(diff_cont 2530 2890 2750 3110) - R(diff_cont 2530 2890 2750 3110) - R(diff_cont 2530 2490 2750 2710) - R(diff_cont -110 2490 110 2710) - R(diff_cont -110 2890 110 3110) - R(diff_cont -110 2890 110 3110) - R(diff_cont -110 2490 110 2710) - R(diff_cont 5170 2490 5390 2710) - R(diff_cont 5170 2890 5390 3110) - R(diff_cont 5170 2890 5390 3110) - R(diff_cont 5170 2490 5390 2710) - R(diff_cont 7810 2490 8030 2710) - R(diff_cont 7810 2890 8030 3110) - R(diff_cont 7810 2890 8030 3110) - R(diff_cont 7810 2490 8030 2710) - R(diff_cont 10450 2490 10670 2710) - R(diff_cont 10450 2890 10670 3110) - R(diff_cont 10450 2890 10670 3110) - R(diff_cont 10450 2490 10670 2710) - R(diff_cont 13090 2490 13310 2710) - R(diff_cont 13090 2890 13310 3110) - R(diff_cont 13090 2890 13310 3110) - R(diff_cont 13090 2490 13310 2710) - R(diff_cont 15730 2490 15950 2710) - R(diff_cont 15730 2890 15950 3110) - R(diff_cont 15730 2890 15950 3110) - R(diff_cont 15730 2490 15950 2710) - R(diff_cont 18370 2490 18590 2710) - R(diff_cont 18370 2890 18590 3110) - R(diff_cont 18370 2890 18590 3110) - R(diff_cont 18370 2490 18590 2710) - R(diff_cont 21010 2490 21230 2710) - R(diff_cont 21010 2890 21230 3110) - R(diff_cont 21010 2890 21230 3110) - R(diff_cont 21010 2490 21230 2710) - R(diff_cont 23650 2490 23870 2710) - R(diff_cont 23650 2890 23870 3110) - R(diff_cont 23650 2890 23870 3110) - R(diff_cont 23650 2490 23870 2710) - R(metal1 2460 2420 2820 3180) - R(metal1 2460 2420 2820 3180) - R(metal1 -180 2420 180 3180) - R(metal1 -180 2420 180 3180) - R(metal1 5100 2420 5460 3180) - R(metal1 5100 2420 5460 3180) - R(metal1 7740 2420 8100 3180) - R(metal1 7740 2420 8100 3180) - R(metal1 10380 2420 10740 3180) - R(metal1 10380 2420 10740 3180) - R(metal1 13020 2420 13380 3180) - R(metal1 13020 2420 13380 3180) - R(metal1 15660 2420 16020 3180) - R(metal1 15660 2420 16020 3180) - R(metal1 18300 2420 18660 3180) - R(metal1 18300 2420 18660 3180) - R(metal1 20940 2420 21300 3180) - R(metal1 20940 2420 21300 3180) - R(metal1 23580 2420 23940 3180) - R(metal1 23580 2420 23940 3180) - R(metal2_lbl -1 2799 1 2801) + R(diff_cont (2530 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 (5060 -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 (2420 -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 (2420 -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 (2420 -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 (2420 -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 (2420 -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 (2420 -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 (2420 -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 -290) (360 760)) + R(metal1 (-360 -760) (360 760)) + R(metal1 (-3000 -760) (360 760)) + R(metal1 (-360 -760) (360 760)) + R(metal1 (4920 -760) (360 760)) + R(metal1 (-360 -760) (360 760)) + R(metal1 (2280 -760) (360 760)) + R(metal1 (-360 -760) (360 760)) + R(metal1 (2280 -760) (360 760)) + R(metal1 (-360 -760) (360 760)) + R(metal1 (2280 -760) (360 760)) + R(metal1 (-360 -760) (360 760)) + R(metal1 (2280 -760) (360 760)) + R(metal1 (-360 -760) (360 760)) + R(metal1 (2280 -760) (360 760)) + R(metal1 (-360 -760) (360 760)) + R(metal1 (2280 -760) (360 760)) + R(metal1 (-360 -760) (360 760)) + R(metal1 (2280 -760) (360 760)) + R(metal1 (-360 -760) (360 760)) + R(metal2_lbl (-23941 -381) (2 2)) ) N(5 - R(diff_cont 690 2890 910 3110) - R(diff_cont 690 2490 910 2710) - R(diff_cont 690 90 910 310) - R(diff_cont 690 -310 910 -90) + R(diff_cont (690 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(6 - R(diff_cont 21810 2890 22030 3110) - R(diff_cont 21810 2490 22030 2710) - R(diff_cont 21810 90 22030 310) - R(diff_cont 21810 -310 22030 -90) + R(diff_cont (21810 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(7 - R(diff_cont 19170 2890 19390 3110) - R(diff_cont 19170 2490 19390 2710) - R(diff_cont 19170 90 19390 310) - R(diff_cont 19170 -310 19390 -90) + 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(8 - R(diff_cont 16530 2890 16750 3110) - R(diff_cont 16530 2490 16750 2710) - R(diff_cont 16530 90 16750 310) - R(diff_cont 16530 -310 16750 -90) + R(diff_cont (16530 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(9 - R(diff_cont 13890 2890 14110 3110) - R(diff_cont 13890 2490 14110 2710) - R(diff_cont 13890 90 14110 310) - R(diff_cont 13890 -310 14110 -90) + 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(10 - R(diff_cont 11250 2890 11470 3110) - R(diff_cont 11250 2490 11470 2710) - R(diff_cont 11250 90 11470 310) - R(diff_cont 11250 -310 11470 -90) + R(diff_cont (11250 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 8610 2890 8830 3110) - R(diff_cont 8610 2490 8830 2710) - R(diff_cont 8610 90 8830 310) - R(diff_cont 8610 -310 8830 -90) + 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)) ) N(12 - R(diff_cont 5970 2890 6190 3110) - R(diff_cont 5970 2490 6190 2710) - R(diff_cont 5970 90 6190 310) - R(diff_cont 5970 -310 6190 -90) + R(diff_cont (5970 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(13 - R(diff_cont 3330 2890 3550 3110) - R(diff_cont 3330 2490 3550 2710) - R(diff_cont 3330 90 3550 310) - R(diff_cont 3330 -310 3550 -90) + 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)) ) P(FB 1) P(OSC 2)