From 6cd4b97cd3357fe92ebd9846ce68ea31b940868b Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Thu, 15 May 2025 21:17:15 +0200 Subject: [PATCH 01/11] Including internal net names in LVS DB Problem: so far, these names have not been conveyed. But after the net IDs changed in the LVS DB (renumbering), the names should be retained. Otherwise it is difficult to relate log level entries or Spice netlists to them. --- src/db/db/dbLayoutToNetlistWriter.cc | 2 + src/lvs/unit_tests/lvsTests.cc | 4 +- testdata/lvs/bbdevices1.lvsdb | 4 +- testdata/lvs/bbdevices1b.lvsdb | 4 +- testdata/lvs/bbdevices2.lvsdb | 8 ++-- testdata/lvs/bbdevices2b.lvsdb | 8 ++-- testdata/lvs/bbdevices3.lvsdb | 4 +- testdata/lvs/bbdevices3b.lvsdb | 4 +- testdata/lvs/bbdevices4.lvsdb | 4 +- testdata/lvs/bbdevices4b.lvsdb | 4 +- testdata/lvs/bbdevices5.lvsdb | 6 +-- testdata/lvs/bbdevices5b.lvsdb | 6 +-- testdata/lvs/custom_compare.lvsdb | 4 +- testdata/lvs/must_connect1.lvsdb | 2 +- testdata/lvs/must_connect1_tl.lvsdb | 2 +- testdata/lvs/must_connect3.lvsdb | 6 +-- testdata/lvs/res_combine1.lvsdb.1 | 2 +- testdata/lvs/res_combine1.lvsdb.2 | 2 +- testdata/lvs/res_combine1.lvsdb.3 | 2 +- testdata/lvs/res_combine1.lvsdb.4 | 2 +- testdata/lvs/res_combine1.lvsdb.5 | 2 +- testdata/lvs/res_combine1.lvsdb.6 | 2 +- testdata/lvs/res_combine2.lvsdb.1 | 2 +- testdata/lvs/res_combine2.lvsdb.2 | 2 +- testdata/lvs/res_combine2.lvsdb.3 | 2 +- testdata/lvs/res_combine2.lvsdb.4 | 2 +- testdata/lvs/res_combine2.lvsdb.5 | 2 +- testdata/lvs/res_combine2.lvsdb.6 | 2 +- testdata/lvs/res_combine3.lvsdb.1 | 2 +- testdata/lvs/res_combine3.lvsdb.2 | 2 +- testdata/lvs/res_combine3.lvsdb.3 | 2 +- testdata/lvs/res_combine3.lvsdb.4 | 2 +- testdata/lvs/res_combine3.lvsdb.5 | 2 +- testdata/lvs/res_combine3.lvsdb.6 | 2 +- testdata/lvs/ringo_device_subcircuits.lvsdb.1 | 2 +- testdata/lvs/ringo_device_subcircuits.lvsdb.2 | 2 +- testdata/lvs/ringo_layout_var.lvsdb.1 | 2 +- testdata/lvs/ringo_layout_var.lvsdb.2 | 2 +- testdata/lvs/ringo_mixed_hierarchy.lvsdb | 20 ++++---- testdata/lvs/ringo_simple.lvsdb.1 | 2 +- testdata/lvs/ringo_simple.lvsdb.2 | 2 +- testdata/lvs/ringo_simple_blackboxing.lvsdb | 12 ++--- .../lvs/ringo_simple_blackboxing_netter.lvsdb | 12 ++--- testdata/lvs/ringo_simple_compare2.lvsdb.1 | 2 +- testdata/lvs/ringo_simple_compare2.lvsdb.2 | 2 +- .../lvs/ringo_simple_device_scaling.lvsdb.1 | 2 +- .../lvs/ringo_simple_device_scaling.lvsdb.2 | 2 +- .../lvs/ringo_simple_dummy_device.lvsdb.1 | 24 +++++----- .../ringo_simple_implicit_connections.lvsdb.1 | 2 +- .../ringo_simple_implicit_connections.lvsdb.2 | 2 +- testdata/lvs/ringo_simple_io.lvsdb.1 | 2 +- testdata/lvs/ringo_simple_io.lvsdb.2 | 2 +- testdata/lvs/ringo_simple_io2.l2n.1 | 2 +- testdata/lvs/ringo_simple_io2.l2n.2 | 2 +- testdata/lvs/ringo_simple_io2.lvsdb.1 | 2 +- testdata/lvs/ringo_simple_io2.lvsdb.2 | 2 +- ...simple_net_and_circuit_equivalence.lvsdb.1 | 2 +- ...simple_net_and_circuit_equivalence.lvsdb.2 | 2 +- .../lvs/ringo_simple_pin_swapping.lvsdb.1 | 2 +- .../lvs/ringo_simple_pin_swapping.lvsdb.2 | 2 +- .../ringo_simple_same_device_classes.lvsdb.1 | 2 +- .../ringo_simple_same_device_classes.lvsdb.2 | 2 +- .../lvs/ringo_simple_simplification.lvsdb.1 | 14 +++--- ...o_simple_simplification_with_align.lvsdb.1 | 14 +++--- testdata/lvs/ringo_simple_with_tol.lvsdb.1 | 2 +- testdata/lvs/ringo_simple_with_tol.lvsdb.2 | 2 +- .../lvs/ringo_simple_with_tol_early.lvsdb.1 | 2 +- .../lvs/ringo_simple_with_tol_early.lvsdb.2 | 2 +- testdata/lvs/soft_connect3.l2n | 8 ++-- testdata/lvs/soft_connect4.l2n | 6 +-- testdata/lvs/soft_connect5.l2n | 4 +- testdata/lvs/soft_connect6.l2n | 4 +- testdata/lvs/stray_texts1.l2n | 4 +- testdata/lvs/stray_texts2.l2n | 4 +- testdata/lvs/test_22a.lvsdb.1 | 48 +++++++++---------- testdata/lvs/test_22b.lvsdb.1 | 48 +++++++++---------- testdata/lvs/test_22c.lvsdb.1 | 2 +- testdata/lvs/test_22c.lvsdb.2 | 2 +- testdata/lvs/test_22c.lvsdb.3 | 2 +- testdata/lvs/test_22d.lvsdb.1 | 2 +- testdata/lvs/test_22d.lvsdb.2 | 2 +- testdata/lvs/test_22d.lvsdb.3 | 2 +- 82 files changed, 200 insertions(+), 198 deletions(-) diff --git a/src/db/db/dbLayoutToNetlistWriter.cc b/src/db/db/dbLayoutToNetlistWriter.cc index cadd0a711..df2499492 100644 --- a/src/db/db/dbLayoutToNetlistWriter.cc +++ b/src/db/db/dbLayoutToNetlistWriter.cc @@ -692,6 +692,8 @@ void std_writer_impl::write (TokenizedOutput &stream, const db::Net &net, *outp << tl::to_string (id); if (! net.name ().empty ()) { TokenizedOutput (*outp, Keys::name_key, true) << tl::to_word_or_quoted_string (net.name ()); + } else if (net.id () != id) { + TokenizedOutput (*outp, Keys::name_key, true) << tl::to_word_or_quoted_string (net.expanded_name ()); } *outp << endl; diff --git a/src/lvs/unit_tests/lvsTests.cc b/src/lvs/unit_tests/lvsTests.cc index 4d6c30f12..c1aac0071 100644 --- a/src/lvs/unit_tests/lvsTests.cc +++ b/src/lvs/unit_tests/lvsTests.cc @@ -154,7 +154,7 @@ TEST(16_private) TEST(17_private) { test_is_long_runner (); - run_test (_this, "test_17.lylvs", "test_17b.cir.gz", "test_17.gds.gz", true, "test_17b_4.lvsdb"); + run_test (_this, "test_17.lylvs", "test_17b.cir.gz", "test_17.gds.gz", true, "test_17b_5.lvsdb"); } TEST(18_private) @@ -177,7 +177,7 @@ TEST(20_private) TEST(21_private) { - run_test (_this, "test_21.lylvs", "test_21.cir.gz", "test_21.gds.gz", true, "test_21_5.lvsdb"); + run_test (_this, "test_21.lylvs", "test_21.cir.gz", "test_21.gds.gz", true, "test_21_6.lvsdb"); } // issue #1021 diff --git a/testdata/lvs/bbdevices1.lvsdb b/testdata/lvs/bbdevices1.lvsdb index 482fe39a9..71177629c 100644 --- a/testdata/lvs/bbdevices1.lvsdb +++ b/testdata/lvs/bbdevices1.lvsdb @@ -210,7 +210,7 @@ layout( net(2 rect(l2 (-148000 463000) (300000 25000)) ) - net(3 + net(3 name($5) rect(l9 (348500 26500) (25000 179000)) rect(l9 (-57500 -58000) (90000 90000)) rect(l9 (-86000 -288500) (90000 90000)) @@ -224,7 +224,7 @@ layout( rect(l14 (-270500 7500) (25000 193000)) rect(l14 (-87500 -87500) (150000 150000)) ) - net(4 + net(4 name($8) rect(l14 (-126000 -195000) (292000 25000)) ) diff --git a/testdata/lvs/bbdevices1b.lvsdb b/testdata/lvs/bbdevices1b.lvsdb index 0be76fb34..ec7a60026 100644 --- a/testdata/lvs/bbdevices1b.lvsdb +++ b/testdata/lvs/bbdevices1b.lvsdb @@ -140,7 +140,7 @@ layout( net(2 rect(l2 (-148000 463000) (300000 25000)) ) - net(3 + net(3 name($5) rect(l9 (348500 26500) (25000 179000)) rect(l9 (-57500 -58000) (90000 90000)) rect(l9 (-86000 -288500) (90000 90000)) @@ -154,7 +154,7 @@ layout( rect(l14 (-270500 7500) (25000 193000)) rect(l14 (-87500 -87500) (150000 150000)) ) - net(4 + net(4 name($8) rect(l14 (-126000 -195000) (292000 25000)) ) diff --git a/testdata/lvs/bbdevices2.lvsdb b/testdata/lvs/bbdevices2.lvsdb index 49b82b677..0f2a44006 100644 --- a/testdata/lvs/bbdevices2.lvsdb +++ b/testdata/lvs/bbdevices2.lvsdb @@ -220,7 +220,7 @@ layout( net(4 rect(l2 (822690 427000) (63970 82000)) ) - net(5 + net(5 name($7) rect(l9 (348500 26500) (25000 179000)) rect(l9 (-57500 -58000) (90000 90000)) rect(l9 (-86000 -288500) (90000 90000)) @@ -234,13 +234,13 @@ layout( rect(l14 (-270500 7500) (25000 193000)) rect(l14 (-87500 -87500) (150000 150000)) ) - net(6 + net(6 name($10) rect(l14 (-126000 -195000) (292000 25000)) ) - net(7 + net(7 name($12) rect(l14 (-410240 -216150) (83240 87150)) ) - net(8 + net(8 name($13) rect(l14 (846960 -242000) (77190 75500)) ) diff --git a/testdata/lvs/bbdevices2b.lvsdb b/testdata/lvs/bbdevices2b.lvsdb index 2ff9faa34..9cd9cc391 100644 --- a/testdata/lvs/bbdevices2b.lvsdb +++ b/testdata/lvs/bbdevices2b.lvsdb @@ -150,7 +150,7 @@ layout( net(4 rect(l2 (822690 427000) (63970 82000)) ) - net(5 + net(5 name($7) rect(l9 (348500 26500) (25000 179000)) rect(l9 (-57500 -58000) (90000 90000)) rect(l9 (-86000 -288500) (90000 90000)) @@ -164,13 +164,13 @@ layout( rect(l14 (-270500 7500) (25000 193000)) rect(l14 (-87500 -87500) (150000 150000)) ) - net(6 + net(6 name($10) rect(l14 (-126000 -195000) (292000 25000)) ) - net(7 + net(7 name($12) rect(l14 (-410240 -216150) (83240 87150)) ) - net(8 + net(8 name($13) rect(l14 (846960 -242000) (77190 75500)) ) diff --git a/testdata/lvs/bbdevices3.lvsdb b/testdata/lvs/bbdevices3.lvsdb index 1f7335c95..3ab3475c0 100644 --- a/testdata/lvs/bbdevices3.lvsdb +++ b/testdata/lvs/bbdevices3.lvsdb @@ -210,7 +210,7 @@ layout( net(2 rect(l2 (-148000 463000) (300000 25000)) ) - net(3 + net(3 name($5) rect(l9 (348500 26500) (25000 179000)) rect(l9 (-57500 -58000) (90000 90000)) rect(l9 (-86000 -288500) (90000 90000)) @@ -224,7 +224,7 @@ layout( rect(l14 (-270500 7500) (25000 193000)) rect(l14 (-87500 -87500) (150000 150000)) ) - net(4 + net(4 name($8) rect(l14 (-126000 -195000) (292000 25000)) ) diff --git a/testdata/lvs/bbdevices3b.lvsdb b/testdata/lvs/bbdevices3b.lvsdb index d4573f7a4..f60bc5bab 100644 --- a/testdata/lvs/bbdevices3b.lvsdb +++ b/testdata/lvs/bbdevices3b.lvsdb @@ -140,7 +140,7 @@ layout( net(2 rect(l2 (-148000 463000) (300000 25000)) ) - net(3 + net(3 name($5) rect(l9 (348500 26500) (25000 179000)) rect(l9 (-57500 -58000) (90000 90000)) rect(l9 (-86000 -288500) (90000 90000)) @@ -154,7 +154,7 @@ layout( rect(l14 (-270500 7500) (25000 193000)) rect(l14 (-87500 -87500) (150000 150000)) ) - net(4 + net(4 name($8) rect(l14 (-126000 -195000) (292000 25000)) ) diff --git a/testdata/lvs/bbdevices4.lvsdb b/testdata/lvs/bbdevices4.lvsdb index fe5d26b4a..0a74172f8 100644 --- a/testdata/lvs/bbdevices4.lvsdb +++ b/testdata/lvs/bbdevices4.lvsdb @@ -207,7 +207,7 @@ layout( net(2 rect(l2 (-148000 463000) (300000 25000)) ) - net(3 + net(3 name($5) rect(l9 (348500 26500) (25000 179000)) rect(l9 (-57500 -58000) (90000 90000)) rect(l9 (-86000 -288500) (90000 90000)) @@ -220,7 +220,7 @@ layout( rect(l14 (-25000 -193000) (25000 193000)) rect(l14 (-87500 -87500) (150000 150000)) ) - net(4 + net(4 name($7) rect(l14 (-126000 -195000) (292000 25000)) ) diff --git a/testdata/lvs/bbdevices4b.lvsdb b/testdata/lvs/bbdevices4b.lvsdb index 90993b7b2..ba1dfd285 100644 --- a/testdata/lvs/bbdevices4b.lvsdb +++ b/testdata/lvs/bbdevices4b.lvsdb @@ -137,7 +137,7 @@ layout( net(2 rect(l2 (-148000 463000) (300000 25000)) ) - net(3 + net(3 name($5) rect(l9 (348500 26500) (25000 179000)) rect(l9 (-57500 -58000) (90000 90000)) rect(l9 (-86000 -288500) (90000 90000)) @@ -150,7 +150,7 @@ layout( rect(l14 (-25000 -193000) (25000 193000)) rect(l14 (-87500 -87500) (150000 150000)) ) - net(4 + net(4 name($7) rect(l14 (-126000 -195000) (292000 25000)) ) diff --git a/testdata/lvs/bbdevices5.lvsdb b/testdata/lvs/bbdevices5.lvsdb index 42cef8ab3..6b5dee81b 100644 --- a/testdata/lvs/bbdevices5.lvsdb +++ b/testdata/lvs/bbdevices5.lvsdb @@ -210,7 +210,7 @@ layout( net(2 rect(l2 (-148000 463000) (300000 25000)) ) - net(3 + net(3 name($5) rect(l9 (348500 26500) (25000 179000)) rect(l9 (-57500 -58000) (90000 90000)) rect(l9 (-86000 -288500) (90000 90000)) @@ -224,10 +224,10 @@ layout( rect(l14 (-24000 -225500) (118960 25000)) rect(l14 (-182460 113000) (150000 150000)) ) - net(4 + net(4 name($7) rect(l14 (-126000 -195000) (292000 25000)) ) - net(5 + net(5 name($10) rect(l14 (509690 -219000) (113310 25000)) ) diff --git a/testdata/lvs/bbdevices5b.lvsdb b/testdata/lvs/bbdevices5b.lvsdb index dd49d20c6..7e9f9b4c0 100644 --- a/testdata/lvs/bbdevices5b.lvsdb +++ b/testdata/lvs/bbdevices5b.lvsdb @@ -140,7 +140,7 @@ layout( net(2 rect(l2 (-148000 463000) (300000 25000)) ) - net(3 + net(3 name($5) rect(l9 (348500 26500) (25000 179000)) rect(l9 (-57500 -58000) (90000 90000)) rect(l9 (-86000 -288500) (90000 90000)) @@ -154,10 +154,10 @@ layout( rect(l14 (-24000 -225500) (118960 25000)) rect(l14 (-182460 113000) (150000 150000)) ) - net(4 + net(4 name($7) rect(l14 (-126000 -195000) (292000 25000)) ) - net(5 + net(5 name($10) rect(l14 (509690 -219000) (113310 25000)) ) diff --git a/testdata/lvs/custom_compare.lvsdb b/testdata/lvs/custom_compare.lvsdb index 6862bb95d..d10c9dd63 100644 --- a/testdata/lvs/custom_compare.lvsdb +++ b/testdata/lvs/custom_compare.lvsdb @@ -38,12 +38,12 @@ layout( rect((0 0) (10255 5900)) # Nets with their geometries - net(1 + net(1 name($13) rect(l3 (4850 4600) (180 180)) rect(l1 (-245 -250) (310 320)) rect(l1 (0 -250) (200 250)) ) - net(2 + net(2 name($14) rect(l3 (10010 3500) (180 180)) rect(l1 (-245 -250) (310 320)) rect(l1 (-510 -250) (200 250)) diff --git a/testdata/lvs/must_connect1.lvsdb b/testdata/lvs/must_connect1.lvsdb index 1d91c7e7e..26eeb011f 100644 --- a/testdata/lvs/must_connect1.lvsdb +++ b/testdata/lvs/must_connect1.lvsdb @@ -258,7 +258,7 @@ J( N(6 I(Q) R(l12 (13260 2010) (0 0)) ) - N(7 + N(7 I($8) R(l10 (3450 4840) (3055 250)) R(l10 (2885 -250) (1975 250)) ) diff --git a/testdata/lvs/must_connect1_tl.lvsdb b/testdata/lvs/must_connect1_tl.lvsdb index fa05c7401..fa6a8ab2c 100644 --- a/testdata/lvs/must_connect1_tl.lvsdb +++ b/testdata/lvs/must_connect1_tl.lvsdb @@ -258,7 +258,7 @@ J( N(6 I(Q) R(l12 (13260 2010) (0 0)) ) - N(7 + N(7 I($8) R(l10 (3450 4840) (3055 250)) R(l10 (2885 -250) (1975 250)) ) diff --git a/testdata/lvs/must_connect3.lvsdb b/testdata/lvs/must_connect3.lvsdb index 83f89832d..19782493b 100644 --- a/testdata/lvs/must_connect3.lvsdb +++ b/testdata/lvs/must_connect3.lvsdb @@ -240,21 +240,21 @@ J( R(l10 (-1975 -8190) (1975 575)) R(l10 (-1005 -255) (0 0)) ) - N(3 + N(3 I($I1) R(l3 (12950 2130) (2160 250)) R(l3 (-250 0) (250 4990)) R(l3 (-1605 0) (1605 250)) R(l7 (-1545 -250) (240 250)) R(l8 (-560 -375) (690 510)) ) - N(4 + N(4 I($I2) R(l3 (12100 7300) (640 530)) R(l7 (-540 -415) (270 250)) R(l8 (-1695 -250) (1695 250)) R(l8 (-4075 -5650) (2630 250)) R(l8 (-250 0) (250 5150)) ) - N(5 + N(5 I($I3) R(l7 (6465 7325) (220 240)) R(l8 (-4100 -5365) (3125 250)) R(l8 (-250 0) (250 4860)) diff --git a/testdata/lvs/res_combine1.lvsdb.1 b/testdata/lvs/res_combine1.lvsdb.1 index 971e6ddb9..be2dcbb47 100644 --- a/testdata/lvs/res_combine1.lvsdb.1 +++ b/testdata/lvs/res_combine1.lvsdb.1 @@ -68,7 +68,7 @@ layout( rect(l1 (-22675 -1970) (540 2000)) rect(l1 (-21840 -1605) (540 2000)) ) - net(2 + net(2 name($5) rect(l4 (19795 5575) (220 220)) rect(l4 (-220 -745) (220 220)) rect(l4 (-220 -745) (220 220)) diff --git a/testdata/lvs/res_combine1.lvsdb.2 b/testdata/lvs/res_combine1.lvsdb.2 index a482e6a93..725a958ca 100644 --- a/testdata/lvs/res_combine1.lvsdb.2 +++ b/testdata/lvs/res_combine1.lvsdb.2 @@ -68,7 +68,7 @@ layout( rect(l1 (-22675 -1970) (540 2000)) rect(l1 (-21840 -1605) (540 2000)) ) - net(2 + net(2 name($5) rect(l4 (19795 5575) (220 220)) rect(l4 (-220 -745) (220 220)) rect(l4 (-220 -745) (220 220)) diff --git a/testdata/lvs/res_combine1.lvsdb.3 b/testdata/lvs/res_combine1.lvsdb.3 index 4a5eefac3..594bea880 100644 --- a/testdata/lvs/res_combine1.lvsdb.3 +++ b/testdata/lvs/res_combine1.lvsdb.3 @@ -68,7 +68,7 @@ layout( rect(l1 (-22675 -1970) (540 2000)) rect(l1 (-21840 -1605) (540 2000)) ) - net(2 + net(2 name($5) rect(l4 (19795 5575) (220 220)) rect(l4 (-220 -745) (220 220)) rect(l4 (-220 -745) (220 220)) diff --git a/testdata/lvs/res_combine1.lvsdb.4 b/testdata/lvs/res_combine1.lvsdb.4 index 99b0f35c3..f9b232132 100644 --- a/testdata/lvs/res_combine1.lvsdb.4 +++ b/testdata/lvs/res_combine1.lvsdb.4 @@ -68,7 +68,7 @@ layout( rect(l1 (-22675 -1970) (540 2000)) rect(l1 (-21840 -1605) (540 2000)) ) - net(2 + net(2 name($5) rect(l4 (19795 5575) (220 220)) rect(l4 (-220 -745) (220 220)) rect(l4 (-220 -745) (220 220)) diff --git a/testdata/lvs/res_combine1.lvsdb.5 b/testdata/lvs/res_combine1.lvsdb.5 index 6f91be370..d7a796e89 100644 --- a/testdata/lvs/res_combine1.lvsdb.5 +++ b/testdata/lvs/res_combine1.lvsdb.5 @@ -68,7 +68,7 @@ layout( rect(l1 (-22675 -1970) (540 2000)) rect(l1 (-21840 -1605) (540 2000)) ) - net(2 + net(2 name($5) rect(l4 (19795 5575) (220 220)) rect(l4 (-220 -745) (220 220)) rect(l4 (-220 -745) (220 220)) diff --git a/testdata/lvs/res_combine1.lvsdb.6 b/testdata/lvs/res_combine1.lvsdb.6 index 856312de7..456048215 100644 --- a/testdata/lvs/res_combine1.lvsdb.6 +++ b/testdata/lvs/res_combine1.lvsdb.6 @@ -68,7 +68,7 @@ layout( rect(l1 (-22675 -1970) (540 2000)) rect(l1 (-21840 -1605) (540 2000)) ) - net(2 + net(2 name($5) rect(l4 (19795 5575) (220 220)) rect(l4 (-220 -745) (220 220)) rect(l4 (-220 -745) (220 220)) diff --git a/testdata/lvs/res_combine2.lvsdb.1 b/testdata/lvs/res_combine2.lvsdb.1 index 7c5410036..877dec9ae 100644 --- a/testdata/lvs/res_combine2.lvsdb.1 +++ b/testdata/lvs/res_combine2.lvsdb.1 @@ -64,7 +64,7 @@ layout( rect(l1 (-22675 -1970) (540 2000)) rect(l1 (-21840 -1605) (540 2000)) ) - net(2 + net(2 name($5) rect(l4 (19795 5575) (220 220)) rect(l4 (-220 -745) (220 220)) rect(l4 (-220 -745) (220 220)) diff --git a/testdata/lvs/res_combine2.lvsdb.2 b/testdata/lvs/res_combine2.lvsdb.2 index 9e6fd6e42..8019fd0ca 100644 --- a/testdata/lvs/res_combine2.lvsdb.2 +++ b/testdata/lvs/res_combine2.lvsdb.2 @@ -64,7 +64,7 @@ layout( rect(l1 (-22675 -1970) (540 2000)) rect(l1 (-21840 -1605) (540 2000)) ) - net(2 + net(2 name($5) rect(l4 (19795 5575) (220 220)) rect(l4 (-220 -745) (220 220)) rect(l4 (-220 -745) (220 220)) diff --git a/testdata/lvs/res_combine2.lvsdb.3 b/testdata/lvs/res_combine2.lvsdb.3 index ef47b7df8..ce3c2a3de 100644 --- a/testdata/lvs/res_combine2.lvsdb.3 +++ b/testdata/lvs/res_combine2.lvsdb.3 @@ -64,7 +64,7 @@ layout( rect(l1 (-22675 -1970) (540 2000)) rect(l1 (-21840 -1605) (540 2000)) ) - net(2 + net(2 name($5) rect(l4 (19795 5575) (220 220)) rect(l4 (-220 -745) (220 220)) rect(l4 (-220 -745) (220 220)) diff --git a/testdata/lvs/res_combine2.lvsdb.4 b/testdata/lvs/res_combine2.lvsdb.4 index 6d0b65e2d..ac3e9baa4 100644 --- a/testdata/lvs/res_combine2.lvsdb.4 +++ b/testdata/lvs/res_combine2.lvsdb.4 @@ -64,7 +64,7 @@ layout( rect(l1 (-22675 -1970) (540 2000)) rect(l1 (-21840 -1605) (540 2000)) ) - net(2 + net(2 name($5) rect(l4 (19795 5575) (220 220)) rect(l4 (-220 -745) (220 220)) rect(l4 (-220 -745) (220 220)) diff --git a/testdata/lvs/res_combine2.lvsdb.5 b/testdata/lvs/res_combine2.lvsdb.5 index d5911356e..6f538c7ef 100644 --- a/testdata/lvs/res_combine2.lvsdb.5 +++ b/testdata/lvs/res_combine2.lvsdb.5 @@ -64,7 +64,7 @@ layout( rect(l1 (-22675 -1970) (540 2000)) rect(l1 (-21840 -1605) (540 2000)) ) - net(2 + net(2 name($5) rect(l4 (19795 5575) (220 220)) rect(l4 (-220 -745) (220 220)) rect(l4 (-220 -745) (220 220)) diff --git a/testdata/lvs/res_combine2.lvsdb.6 b/testdata/lvs/res_combine2.lvsdb.6 index 89c533976..0b94b61ee 100644 --- a/testdata/lvs/res_combine2.lvsdb.6 +++ b/testdata/lvs/res_combine2.lvsdb.6 @@ -64,7 +64,7 @@ layout( rect(l1 (-22675 -1970) (540 2000)) rect(l1 (-21840 -1605) (540 2000)) ) - net(2 + net(2 name($5) rect(l4 (19795 5575) (220 220)) rect(l4 (-220 -745) (220 220)) rect(l4 (-220 -745) (220 220)) diff --git a/testdata/lvs/res_combine3.lvsdb.1 b/testdata/lvs/res_combine3.lvsdb.1 index f6289f6b2..d067edf33 100644 --- a/testdata/lvs/res_combine3.lvsdb.1 +++ b/testdata/lvs/res_combine3.lvsdb.1 @@ -64,7 +64,7 @@ layout( rect(l1 (-22675 -1970) (540 2000)) rect(l1 (-21840 -1605) (540 2000)) ) - net(2 + net(2 name($5) rect(l4 (19795 5575) (220 220)) rect(l4 (-220 -745) (220 220)) rect(l4 (-220 -745) (220 220)) diff --git a/testdata/lvs/res_combine3.lvsdb.2 b/testdata/lvs/res_combine3.lvsdb.2 index 7353b6eaa..14254a034 100644 --- a/testdata/lvs/res_combine3.lvsdb.2 +++ b/testdata/lvs/res_combine3.lvsdb.2 @@ -64,7 +64,7 @@ layout( rect(l1 (-22675 -1970) (540 2000)) rect(l1 (-21840 -1605) (540 2000)) ) - net(2 + net(2 name($5) rect(l4 (19795 5575) (220 220)) rect(l4 (-220 -745) (220 220)) rect(l4 (-220 -745) (220 220)) diff --git a/testdata/lvs/res_combine3.lvsdb.3 b/testdata/lvs/res_combine3.lvsdb.3 index 63dd2ec89..c4c6ed4e3 100644 --- a/testdata/lvs/res_combine3.lvsdb.3 +++ b/testdata/lvs/res_combine3.lvsdb.3 @@ -64,7 +64,7 @@ layout( rect(l1 (-22675 -1970) (540 2000)) rect(l1 (-21840 -1605) (540 2000)) ) - net(2 + net(2 name($5) rect(l4 (19795 5575) (220 220)) rect(l4 (-220 -745) (220 220)) rect(l4 (-220 -745) (220 220)) diff --git a/testdata/lvs/res_combine3.lvsdb.4 b/testdata/lvs/res_combine3.lvsdb.4 index e7b329f55..c8ae0cd34 100644 --- a/testdata/lvs/res_combine3.lvsdb.4 +++ b/testdata/lvs/res_combine3.lvsdb.4 @@ -64,7 +64,7 @@ layout( rect(l1 (-22675 -1970) (540 2000)) rect(l1 (-21840 -1605) (540 2000)) ) - net(2 + net(2 name($5) rect(l4 (19795 5575) (220 220)) rect(l4 (-220 -745) (220 220)) rect(l4 (-220 -745) (220 220)) diff --git a/testdata/lvs/res_combine3.lvsdb.5 b/testdata/lvs/res_combine3.lvsdb.5 index bdbcf54e9..073211088 100644 --- a/testdata/lvs/res_combine3.lvsdb.5 +++ b/testdata/lvs/res_combine3.lvsdb.5 @@ -64,7 +64,7 @@ layout( rect(l1 (-22675 -1970) (540 2000)) rect(l1 (-21840 -1605) (540 2000)) ) - net(2 + net(2 name($5) rect(l4 (19795 5575) (220 220)) rect(l4 (-220 -745) (220 220)) rect(l4 (-220 -745) (220 220)) diff --git a/testdata/lvs/res_combine3.lvsdb.6 b/testdata/lvs/res_combine3.lvsdb.6 index 1bb644fbe..abb6d99e0 100644 --- a/testdata/lvs/res_combine3.lvsdb.6 +++ b/testdata/lvs/res_combine3.lvsdb.6 @@ -64,7 +64,7 @@ layout( rect(l1 (-22675 -1970) (540 2000)) rect(l1 (-21840 -1605) (540 2000)) ) - net(2 + net(2 name($5) rect(l4 (19795 5575) (220 220)) rect(l4 (-220 -745) (220 220)) rect(l4 (-220 -745) (220 220)) diff --git a/testdata/lvs/ringo_device_subcircuits.lvsdb.1 b/testdata/lvs/ringo_device_subcircuits.lvsdb.1 index 06212f154..a53138333 100644 --- a/testdata/lvs/ringo_device_subcircuits.lvsdb.1 +++ b/testdata/lvs/ringo_device_subcircuits.lvsdb.1 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 + net(8 name($I3) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_device_subcircuits.lvsdb.2 b/testdata/lvs/ringo_device_subcircuits.lvsdb.2 index 4a2536ed7..8eb0b266c 100644 --- a/testdata/lvs/ringo_device_subcircuits.lvsdb.2 +++ b/testdata/lvs/ringo_device_subcircuits.lvsdb.2 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 + net(8 name($I3) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_layout_var.lvsdb.1 b/testdata/lvs/ringo_layout_var.lvsdb.1 index 0346c3a17..276675045 100644 --- a/testdata/lvs/ringo_layout_var.lvsdb.1 +++ b/testdata/lvs/ringo_layout_var.lvsdb.1 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 + net(8 name($I3) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_layout_var.lvsdb.2 b/testdata/lvs/ringo_layout_var.lvsdb.2 index fbe29c86e..124c4b7b3 100644 --- a/testdata/lvs/ringo_layout_var.lvsdb.2 +++ b/testdata/lvs/ringo_layout_var.lvsdb.2 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 + net(8 name($I3) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_mixed_hierarchy.lvsdb b/testdata/lvs/ringo_mixed_hierarchy.lvsdb index 35c7fd126..7824c9d2c 100644 --- a/testdata/lvs/ringo_mixed_hierarchy.lvsdb +++ b/testdata/lvs/ringo_mixed_hierarchy.lvsdb @@ -308,31 +308,31 @@ layout( rect(l2 (950 -1500) (425 1500)) rect(l6 (-425 -4890) (425 950)) ) - net(5 + net(5 name($7) rect(l11 (5550 2950) (900 300)) ) - net(6 + net(6 name($8) rect(l11 (7350 2950) (900 300)) ) - net(7 + net(7 name($9) rect(l11 (9150 2950) (900 300)) ) - net(8 + net(8 name($10) rect(l11 (10950 2950) (900 300)) ) - net(9 + net(9 name($11) rect(l11 (12750 2950) (900 300)) ) - net(10 + net(10 name($12) rect(l11 (14550 2950) (900 300)) ) - net(11 + net(11 name($13) rect(l11 (16350 2950) (900 300)) ) - net(12 + net(12 name($14) rect(l11 (18150 2950) (900 300)) ) - net(13 + net(13 name($15) rect(l11 (19950 2950) (900 300)) ) net(14 name(OUT) @@ -341,7 +341,7 @@ layout( rect(l13 (-100 -100) (0 0)) rect(l13 (-200 -200) (400 400)) ) - net(15 + net(15 name($21) rect(l6 (2775 1660) (450 950)) ) net(16 name(VSS) diff --git a/testdata/lvs/ringo_simple.lvsdb.1 b/testdata/lvs/ringo_simple.lvsdb.1 index b5a1aabcb..30cbf6980 100644 --- a/testdata/lvs/ringo_simple.lvsdb.1 +++ b/testdata/lvs/ringo_simple.lvsdb.1 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 + net(8 name($I3) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_simple.lvsdb.2 b/testdata/lvs/ringo_simple.lvsdb.2 index 4bfcca0be..c8c4ded92 100644 --- a/testdata/lvs/ringo_simple.lvsdb.2 +++ b/testdata/lvs/ringo_simple.lvsdb.2 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 + net(8 name($I3) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_simple_blackboxing.lvsdb b/testdata/lvs/ringo_simple_blackboxing.lvsdb index 938c32edf..a76727f22 100644 --- a/testdata/lvs/ringo_simple_blackboxing.lvsdb +++ b/testdata/lvs/ringo_simple_blackboxing.lvsdb @@ -169,22 +169,22 @@ layout( rect(l10 (-24850 -800) (500 1500)) rect(l10 (22900 -1500) (500 1500)) ) - net(10 + net(10 name($I22) rect(l11 (7350 2950) (900 300)) ) - net(11 + net(11 name($I18) rect(l11 (16350 2950) (900 300)) ) - net(12 + net(12 name($I36) rect(l11 (9150 2950) (900 300)) ) - net(13 + net(13 name($I37) rect(l11 (10950 2950) (900 300)) ) - net(14 + net(14 name($I38) rect(l11 (12750 2950) (900 300)) ) - net(15 + net(15 name($I39) rect(l11 (14550 2950) (900 300)) ) diff --git a/testdata/lvs/ringo_simple_blackboxing_netter.lvsdb b/testdata/lvs/ringo_simple_blackboxing_netter.lvsdb index 938c32edf..a76727f22 100644 --- a/testdata/lvs/ringo_simple_blackboxing_netter.lvsdb +++ b/testdata/lvs/ringo_simple_blackboxing_netter.lvsdb @@ -169,22 +169,22 @@ layout( rect(l10 (-24850 -800) (500 1500)) rect(l10 (22900 -1500) (500 1500)) ) - net(10 + net(10 name($I22) rect(l11 (7350 2950) (900 300)) ) - net(11 + net(11 name($I18) rect(l11 (16350 2950) (900 300)) ) - net(12 + net(12 name($I36) rect(l11 (9150 2950) (900 300)) ) - net(13 + net(13 name($I37) rect(l11 (10950 2950) (900 300)) ) - net(14 + net(14 name($I38) rect(l11 (12750 2950) (900 300)) ) - net(15 + net(15 name($I39) rect(l11 (14550 2950) (900 300)) ) diff --git a/testdata/lvs/ringo_simple_compare2.lvsdb.1 b/testdata/lvs/ringo_simple_compare2.lvsdb.1 index b5a1aabcb..30cbf6980 100644 --- a/testdata/lvs/ringo_simple_compare2.lvsdb.1 +++ b/testdata/lvs/ringo_simple_compare2.lvsdb.1 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 + net(8 name($I3) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_simple_compare2.lvsdb.2 b/testdata/lvs/ringo_simple_compare2.lvsdb.2 index 4bfcca0be..c8c4ded92 100644 --- a/testdata/lvs/ringo_simple_compare2.lvsdb.2 +++ b/testdata/lvs/ringo_simple_compare2.lvsdb.2 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 + net(8 name($I3) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_simple_device_scaling.lvsdb.1 b/testdata/lvs/ringo_simple_device_scaling.lvsdb.1 index 6cb29d488..3c8750631 100644 --- a/testdata/lvs/ringo_simple_device_scaling.lvsdb.1 +++ b/testdata/lvs/ringo_simple_device_scaling.lvsdb.1 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 + net(8 name($I3) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_simple_device_scaling.lvsdb.2 b/testdata/lvs/ringo_simple_device_scaling.lvsdb.2 index d77d08cb2..fb6b39193 100644 --- a/testdata/lvs/ringo_simple_device_scaling.lvsdb.2 +++ b/testdata/lvs/ringo_simple_device_scaling.lvsdb.2 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 + net(8 name($I3) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_simple_dummy_device.lvsdb.1 b/testdata/lvs/ringo_simple_dummy_device.lvsdb.1 index 0bb5af8f8..10f93fc33 100644 --- a/testdata/lvs/ringo_simple_dummy_device.lvsdb.1 +++ b/testdata/lvs/ringo_simple_dummy_device.lvsdb.1 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 + net(8 name($I3) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) @@ -361,41 +361,41 @@ layout( rect((0 350) (27600 7650)) # Nets with their geometries - net(1 + net(1 name($3) rect(l4 (26050 2800) (525 550)) rect(l4 (-525 -300) (300 300)) rect(l4 (-25 -2000) (250 1450)) rect(l8 (-465 310) (180 180)) rect(l11 (-240 -240) (300 300)) ) - net(2 + net(2 name($4) rect(l11 (4040 2950) (610 300)) ) - net(3 + net(3 name($5) rect(l11 (5550 2950) (900 300)) ) - net(4 + net(4 name($6) rect(l11 (7350 2950) (900 300)) ) - net(5 + net(5 name($7) rect(l11 (9150 2950) (900 300)) ) - net(6 + net(6 name($8) rect(l11 (10950 2950) (900 300)) ) - net(7 + net(7 name($9) rect(l11 (12750 2950) (900 300)) ) - net(8 + net(8 name($10) rect(l11 (14550 2950) (900 300)) ) - net(9 + net(9 name($11) rect(l11 (16350 2950) (900 300)) ) - net(10 + net(10 name($12) rect(l11 (18150 2950) (900 300)) ) - net(11 + net(11 name($13) rect(l11 (19950 2950) (900 300)) ) net(12 name(FB) diff --git a/testdata/lvs/ringo_simple_implicit_connections.lvsdb.1 b/testdata/lvs/ringo_simple_implicit_connections.lvsdb.1 index 90d11e8b4..74a756054 100644 --- a/testdata/lvs/ringo_simple_implicit_connections.lvsdb.1 +++ b/testdata/lvs/ringo_simple_implicit_connections.lvsdb.1 @@ -202,7 +202,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 + net(8 name($I3) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_simple_implicit_connections.lvsdb.2 b/testdata/lvs/ringo_simple_implicit_connections.lvsdb.2 index 145f3cd6a..97bf061e7 100644 --- a/testdata/lvs/ringo_simple_implicit_connections.lvsdb.2 +++ b/testdata/lvs/ringo_simple_implicit_connections.lvsdb.2 @@ -202,7 +202,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 + net(8 name($I3) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_simple_io.lvsdb.1 b/testdata/lvs/ringo_simple_io.lvsdb.1 index b57fc7c54..9b2db59ba 100644 --- a/testdata/lvs/ringo_simple_io.lvsdb.1 +++ b/testdata/lvs/ringo_simple_io.lvsdb.1 @@ -176,7 +176,7 @@ J( R(l11 (-150 -150) (300 300)) ) N(7 I(SUBSTRATE)) - N(8 + N(8 I($I3) R(l6 (975 1660) (425 950)) R(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_simple_io.lvsdb.2 b/testdata/lvs/ringo_simple_io.lvsdb.2 index d3768aef4..c5c4ac6f1 100644 --- a/testdata/lvs/ringo_simple_io.lvsdb.2 +++ b/testdata/lvs/ringo_simple_io.lvsdb.2 @@ -176,7 +176,7 @@ J( R(l11 (-150 -150) (300 300)) ) N(7 I(SUBSTRATE)) - N(8 + N(8 I($I3) R(l6 (975 1660) (425 950)) R(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_simple_io2.l2n.1 b/testdata/lvs/ringo_simple_io2.l2n.1 index 5dff4a81c..ef8092802 100644 --- a/testdata/lvs/ringo_simple_io2.l2n.1 +++ b/testdata/lvs/ringo_simple_io2.l2n.1 @@ -175,7 +175,7 @@ X(ND2X1 R(l11 (-150 -150) (300 300)) ) N(7 I(SUBSTRATE)) - N(8 + N(8 I($I3) R(l6 (975 1660) (425 950)) R(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_simple_io2.l2n.2 b/testdata/lvs/ringo_simple_io2.l2n.2 index fdc09bcfd..d0a07ab94 100644 --- a/testdata/lvs/ringo_simple_io2.l2n.2 +++ b/testdata/lvs/ringo_simple_io2.l2n.2 @@ -175,7 +175,7 @@ X(ND2X1 R(l11 (-150 -150) (300 300)) ) N(7 I(SUBSTRATE)) - N(8 + N(8 I($I3) R(l6 (975 1660) (425 950)) R(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_simple_io2.lvsdb.1 b/testdata/lvs/ringo_simple_io2.lvsdb.1 index b5a1aabcb..30cbf6980 100644 --- a/testdata/lvs/ringo_simple_io2.lvsdb.1 +++ b/testdata/lvs/ringo_simple_io2.lvsdb.1 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 + net(8 name($I3) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_simple_io2.lvsdb.2 b/testdata/lvs/ringo_simple_io2.lvsdb.2 index 4bfcca0be..c8c4ded92 100644 --- a/testdata/lvs/ringo_simple_io2.lvsdb.2 +++ b/testdata/lvs/ringo_simple_io2.lvsdb.2 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 + net(8 name($I3) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_simple_net_and_circuit_equivalence.lvsdb.1 b/testdata/lvs/ringo_simple_net_and_circuit_equivalence.lvsdb.1 index f88be0bc7..835c6f61c 100644 --- a/testdata/lvs/ringo_simple_net_and_circuit_equivalence.lvsdb.1 +++ b/testdata/lvs/ringo_simple_net_and_circuit_equivalence.lvsdb.1 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 + net(8 name($I3) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_simple_net_and_circuit_equivalence.lvsdb.2 b/testdata/lvs/ringo_simple_net_and_circuit_equivalence.lvsdb.2 index e500fb5a3..f924852fe 100644 --- a/testdata/lvs/ringo_simple_net_and_circuit_equivalence.lvsdb.2 +++ b/testdata/lvs/ringo_simple_net_and_circuit_equivalence.lvsdb.2 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 + net(8 name($I3) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_simple_pin_swapping.lvsdb.1 b/testdata/lvs/ringo_simple_pin_swapping.lvsdb.1 index e383b2490..9a08296ca 100644 --- a/testdata/lvs/ringo_simple_pin_swapping.lvsdb.1 +++ b/testdata/lvs/ringo_simple_pin_swapping.lvsdb.1 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 + net(8 name($I3) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_simple_pin_swapping.lvsdb.2 b/testdata/lvs/ringo_simple_pin_swapping.lvsdb.2 index b06039efe..d8f0bcee8 100644 --- a/testdata/lvs/ringo_simple_pin_swapping.lvsdb.2 +++ b/testdata/lvs/ringo_simple_pin_swapping.lvsdb.2 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 + net(8 name($I3) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_simple_same_device_classes.lvsdb.1 b/testdata/lvs/ringo_simple_same_device_classes.lvsdb.1 index a6570c9a6..95ce47712 100644 --- a/testdata/lvs/ringo_simple_same_device_classes.lvsdb.1 +++ b/testdata/lvs/ringo_simple_same_device_classes.lvsdb.1 @@ -201,7 +201,7 @@ layout( rect(l17 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 + net(8 name($I3) rect(l9 (975 1660) (425 950)) rect(l9 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_simple_same_device_classes.lvsdb.2 b/testdata/lvs/ringo_simple_same_device_classes.lvsdb.2 index 55dbc29ba..958d330a8 100644 --- a/testdata/lvs/ringo_simple_same_device_classes.lvsdb.2 +++ b/testdata/lvs/ringo_simple_same_device_classes.lvsdb.2 @@ -201,7 +201,7 @@ layout( rect(l17 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 + net(8 name($I3) rect(l9 (975 1660) (425 950)) rect(l9 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_simple_simplification.lvsdb.1 b/testdata/lvs/ringo_simple_simplification.lvsdb.1 index cf50d6703..fc1c945d2 100644 --- a/testdata/lvs/ringo_simple_simplification.lvsdb.1 +++ b/testdata/lvs/ringo_simple_simplification.lvsdb.1 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 + net(8 name($I3) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) @@ -560,22 +560,22 @@ layout( rect(l10 (-24850 -800) (500 1500)) rect(l10 (22900 -1500) (500 1500)) ) - net(10 + net(10 name($I22) rect(l11 (7350 2950) (900 300)) ) - net(11 + net(11 name($I18) rect(l11 (16350 2950) (900 300)) ) - net(12 + net(12 name($I36) rect(l11 (9150 2950) (900 300)) ) - net(13 + net(13 name($I37) rect(l11 (10950 2950) (900 300)) ) - net(14 + net(14 name($I38) rect(l11 (12750 2950) (900 300)) ) - net(15 + net(15 name($I39) rect(l11 (14550 2950) (900 300)) ) diff --git a/testdata/lvs/ringo_simple_simplification_with_align.lvsdb.1 b/testdata/lvs/ringo_simple_simplification_with_align.lvsdb.1 index acb6dfc04..2d9fdbac8 100644 --- a/testdata/lvs/ringo_simple_simplification_with_align.lvsdb.1 +++ b/testdata/lvs/ringo_simple_simplification_with_align.lvsdb.1 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 + net(8 name($I3) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) @@ -560,22 +560,22 @@ layout( rect(l10 (-24850 -800) (500 1500)) rect(l10 (22900 -1500) (500 1500)) ) - net(10 + net(10 name($I22) rect(l11 (7350 2950) (900 300)) ) - net(11 + net(11 name($I18) rect(l11 (16350 2950) (900 300)) ) - net(12 + net(12 name($I36) rect(l11 (9150 2950) (900 300)) ) - net(13 + net(13 name($I37) rect(l11 (10950 2950) (900 300)) ) - net(14 + net(14 name($I38) rect(l11 (12750 2950) (900 300)) ) - net(15 + net(15 name($I39) rect(l11 (14550 2950) (900 300)) ) diff --git a/testdata/lvs/ringo_simple_with_tol.lvsdb.1 b/testdata/lvs/ringo_simple_with_tol.lvsdb.1 index 628deb17f..98d8bdee9 100644 --- a/testdata/lvs/ringo_simple_with_tol.lvsdb.1 +++ b/testdata/lvs/ringo_simple_with_tol.lvsdb.1 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 + net(8 name($I3) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_simple_with_tol.lvsdb.2 b/testdata/lvs/ringo_simple_with_tol.lvsdb.2 index 6316f5d39..bded7a1fc 100644 --- a/testdata/lvs/ringo_simple_with_tol.lvsdb.2 +++ b/testdata/lvs/ringo_simple_with_tol.lvsdb.2 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 + net(8 name($I3) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_simple_with_tol_early.lvsdb.1 b/testdata/lvs/ringo_simple_with_tol_early.lvsdb.1 index 628deb17f..98d8bdee9 100644 --- a/testdata/lvs/ringo_simple_with_tol_early.lvsdb.1 +++ b/testdata/lvs/ringo_simple_with_tol_early.lvsdb.1 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 + net(8 name($I3) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_simple_with_tol_early.lvsdb.2 b/testdata/lvs/ringo_simple_with_tol_early.lvsdb.2 index 6316f5d39..bded7a1fc 100644 --- a/testdata/lvs/ringo_simple_with_tol_early.lvsdb.2 +++ b/testdata/lvs/ringo_simple_with_tol_early.lvsdb.2 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 + net(8 name($I3) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/soft_connect3.l2n b/testdata/lvs/soft_connect3.l2n index f046069b3..ff7a71bcc 100644 --- a/testdata/lvs/soft_connect3.l2n +++ b/testdata/lvs/soft_connect3.l2n @@ -81,13 +81,13 @@ X(NTRANS R(l12 (-290 -690) (360 760)) R(l6 (-680 -855) (775 950)) ) - N(2 + N(2 I($3) R(l8 (290 -310) (220 220)) R(l8 (-220 180) (220 220)) R(l12 (-290 -690) (360 760)) R(l6 (-455 -855) (775 950)) ) - N(3 + N(3 I($5) R(l4 (-125 -800) (250 1600)) ) N(4 I(SUBSTRATE)) @@ -117,13 +117,13 @@ X(PTRANS R(l12 (-290 -690) (360 760)) R(l2 (-680 -855) (775 950)) ) - N(2 + N(2 I($3) R(l8 (290 -310) (220 220)) R(l8 (-220 180) (220 220)) R(l12 (-290 -690) (360 760)) R(l2 (-455 -855) (775 950)) ) - N(3 + N(3 I($5) R(l4 (-125 -800) (250 1600)) ) N(4) diff --git a/testdata/lvs/soft_connect4.l2n b/testdata/lvs/soft_connect4.l2n index 402240d29..5cc59c0c3 100644 --- a/testdata/lvs/soft_connect4.l2n +++ b/testdata/lvs/soft_connect4.l2n @@ -108,12 +108,12 @@ X(INV R(l10 (-700 -950) (400 1000)) R(l2 (-1875 -975) (775 950)) ) - N(3 + N(3 I($4) R(l4 (-125 -250) (250 2500)) R(l4 (-250 -3050) (250 1600)) R(l4 (-250 1200) (250 1600)) ) - N(4 + N(4 I($5) R(l8 (-510 -310) (220 220)) R(l8 (-220 180) (220 220)) R(l8 (-220 2180) (220 220)) @@ -170,7 +170,7 @@ X(TOP R(l12 (1810 2600) (690 400)) R(l16 (-400 -200) (0 0)) ) - N(4 + N(4 I($5) R(l3 (4000 3400) (2700 2000)) ) N(5 I(SUBSTRATE)) diff --git a/testdata/lvs/soft_connect5.l2n b/testdata/lvs/soft_connect5.l2n index d2a3334b8..bbe544f80 100644 --- a/testdata/lvs/soft_connect5.l2n +++ b/testdata/lvs/soft_connect5.l2n @@ -108,12 +108,12 @@ X(INV R(l10 (-700 -950) (400 1000)) R(l2 (-1875 -975) (775 950)) ) - N(3 + N(3 I($4) R(l4 (-125 -250) (250 2500)) R(l4 (-250 -3050) (250 1600)) R(l4 (-250 1200) (250 1600)) ) - N(4 + N(4 I($5) R(l8 (-510 -310) (220 220)) R(l8 (-220 180) (220 220)) R(l8 (-220 2180) (220 220)) diff --git a/testdata/lvs/soft_connect6.l2n b/testdata/lvs/soft_connect6.l2n index 600f9b0bc..0d3e3a9ad 100644 --- a/testdata/lvs/soft_connect6.l2n +++ b/testdata/lvs/soft_connect6.l2n @@ -104,7 +104,7 @@ X(INV R(l14 (-200 -900) (1000 900)) R(l6 (-2175 -925) (775 950)) ) - N(3 + N(3 I($4) R(l3 (-1500 1800) (3000 2000)) R(l3 (-200 -2000) (1000 2000)) R(l8 (-2010 -1310) (220 220)) @@ -122,7 +122,7 @@ X(INV R(l10 (-700 -950) (400 1000)) R(l2 (-1875 -975) (775 950)) ) - N(4 + N(4 I($6) R(l4 (-125 -250) (250 2500)) R(l4 (-250 -3050) (250 1600)) R(l4 (-250 1200) (250 1600)) diff --git a/testdata/lvs/stray_texts1.l2n b/testdata/lvs/stray_texts1.l2n index 04c1dbed5..312542798 100644 --- a/testdata/lvs/stray_texts1.l2n +++ b/testdata/lvs/stray_texts1.l2n @@ -27,10 +27,10 @@ X(CHILD J(l1 D (1820 510)) R(l2 (-70 -90) (160 160)) ) - N(5 + N(5 I($8) R(l2 (2370 410) (170 200)) ) - N(6 + N(6 I($9) R(l2 (2910 430) (190 200)) ) P(1 I(A)) diff --git a/testdata/lvs/stray_texts2.l2n b/testdata/lvs/stray_texts2.l2n index a014cac50..92dd849ea 100644 --- a/testdata/lvs/stray_texts2.l2n +++ b/testdata/lvs/stray_texts2.l2n @@ -25,10 +25,10 @@ X(CHILD R(l1 (1750 420) (160 160)) R(l1 (-90 -70) (0 0)) ) - N(5 + N(5 I($6) R(l1 (2370 410) (170 200)) ) - N(6 + N(6 I($7) R(l1 (2910 430) (190 200)) ) P(1 I(A)) diff --git a/testdata/lvs/test_22a.lvsdb.1 b/testdata/lvs/test_22a.lvsdb.1 index 3b1267688..6f083ffa0 100644 --- a/testdata/lvs/test_22a.lvsdb.1 +++ b/testdata/lvs/test_22a.lvsdb.1 @@ -832,16 +832,16 @@ layout( rect(l24 (2030 -150) (150 150)) rect(l24 (2030 -150) (150 150)) ) - net(27 + net(27 name($28) polygon(l7 (955 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180)) ) - net(28 + net(28 name($29) polygon(l7 (7495 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180)) ) - net(29 + net(29 name($30) polygon(l7 (3135 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180)) ) - net(30 + net(30 name($31) polygon(l7 (5315 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180)) ) net(31 name('wl[1]') @@ -893,7 +893,7 @@ layout( rect(l24 (2030 -150) (150 150)) rect(l24 (2030 -150) (150 150)) ) - net(32 + net(32 name($33) polygon(l2 (395 3065) (0 340) (-105 0) (0 420) (525 0) (0 -760)) rect(l2 (-525 1670) (445 420)) polygon(l9 (-210 -1620) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480)) @@ -904,12 +904,12 @@ layout( rect(l22 (0 -270) (950 150)) rect(l22 (0 -840) (150 2010)) ) - net(33 + net(33 name($34) rect(l7 (940 3965) (950 150)) rect(l7 (-1280 -150) (330 270)) rect(l7 (950 -960) (150 2010)) ) - net(34 + net(34 name($35) polygon(l2 (1365 3065) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) rect(l2 (-340 1670) (445 420)) polygon(l9 (-405 -1620) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570)) @@ -920,7 +920,7 @@ layout( rect(l22 (-1100 -1320) (150 2010)) rect(l22 (950 -960) (330 270)) ) - net(35 + net(35 name($36) polygon(l2 (2575 3065) (0 340) (-105 0) (0 420) (525 0) (0 -760)) rect(l2 (-525 1670) (445 420)) polygon(l9 (-210 -1620) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480)) @@ -931,12 +931,12 @@ layout( rect(l22 (0 -270) (950 150)) rect(l22 (0 -840) (150 2010)) ) - net(36 + net(36 name($37) rect(l7 (3120 3965) (950 150)) rect(l7 (-1280 -150) (330 270)) rect(l7 (950 -960) (150 2010)) ) - net(37 + net(37 name($38) polygon(l2 (4755 3065) (0 340) (-105 0) (0 420) (525 0) (0 -760)) rect(l2 (-525 1670) (445 420)) polygon(l9 (-210 -1620) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480)) @@ -947,12 +947,12 @@ layout( rect(l22 (0 -270) (950 150)) rect(l22 (0 -840) (150 2010)) ) - net(38 + net(38 name($39) rect(l7 (5300 3965) (950 150)) rect(l7 (-1280 -150) (330 270)) rect(l7 (950 -960) (150 2010)) ) - net(39 + net(39 name($40) polygon(l2 (6935 3065) (0 340) (-105 0) (0 420) (525 0) (0 -760)) rect(l2 (-525 1670) (445 420)) polygon(l9 (-210 -1620) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480)) @@ -963,34 +963,34 @@ layout( rect(l22 (0 -270) (950 150)) rect(l22 (0 -840) (150 2010)) ) - net(40 + net(40 name($41) rect(l7 (7480 3965) (950 150)) rect(l7 (-1280 -150) (330 270)) rect(l7 (950 -960) (150 2010)) ) - net(41 + net(41 name($42) polygon(l7 (265 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) ) - net(42 + net(42 name($43) polygon(l7 (6805 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) ) - net(43 + net(43 name($44) polygon(l7 (2445 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) ) - net(44 + net(44 name($45) polygon(l7 (4625 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) ) - net(45 + net(45 name($47) rect(l7 (290 4445) (950 150)) rect(l7 (-1100 -1320) (150 2010)) rect(l7 (950 -960) (330 270)) ) - net(46 + net(46 name($48) rect(l7 (2470 4445) (950 150)) rect(l7 (-1100 -1320) (150 2010)) rect(l7 (950 -960) (330 270)) ) - net(47 + net(47 name($49) polygon(l2 (3545 3065) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) rect(l2 (-340 1670) (445 420)) polygon(l9 (-405 -1620) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570)) @@ -1001,12 +1001,12 @@ layout( rect(l22 (-1100 -1320) (150 2010)) rect(l22 (950 -960) (330 270)) ) - net(48 + net(48 name($50) rect(l7 (4650 4445) (950 150)) rect(l7 (-1100 -1320) (150 2010)) rect(l7 (950 -960) (330 270)) ) - net(49 + net(49 name($51) polygon(l2 (5725 3065) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) rect(l2 (-340 1670) (445 420)) polygon(l9 (-405 -1620) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570)) @@ -1017,7 +1017,7 @@ layout( rect(l22 (-1100 -1320) (150 2010)) rect(l22 (950 -960) (330 270)) ) - net(50 + net(50 name($52) polygon(l2 (7905 3065) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) rect(l2 (-340 1670) (445 420)) polygon(l9 (-405 -1620) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570)) @@ -1028,7 +1028,7 @@ layout( rect(l22 (-1100 -1320) (150 2010)) rect(l22 (950 -960) (330 270)) ) - net(51 + net(51 name($53) rect(l7 (6830 4445) (950 150)) rect(l7 (-1100 -1320) (150 2010)) rect(l7 (950 -960) (330 270)) diff --git a/testdata/lvs/test_22b.lvsdb.1 b/testdata/lvs/test_22b.lvsdb.1 index bac531746..45724cbcf 100644 --- a/testdata/lvs/test_22b.lvsdb.1 +++ b/testdata/lvs/test_22b.lvsdb.1 @@ -832,16 +832,16 @@ layout( rect(l24 (2030 -150) (150 150)) rect(l24 (2030 -150) (150 150)) ) - net(27 + net(27 name($28) polygon(l7 (955 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180)) ) - net(28 + net(28 name($29) polygon(l7 (7495 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180)) ) - net(29 + net(29 name($30) polygon(l7 (3135 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180)) ) - net(30 + net(30 name($31) polygon(l7 (5315 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180)) ) net(31 name('wl[1]') @@ -893,7 +893,7 @@ layout( rect(l24 (2030 -150) (150 150)) rect(l24 (2030 -150) (150 150)) ) - net(32 + net(32 name($33) polygon(l2 (395 3065) (0 340) (-105 0) (0 420) (525 0) (0 -760)) rect(l2 (-525 1670) (445 420)) polygon(l9 (-210 -1620) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480)) @@ -904,12 +904,12 @@ layout( rect(l22 (0 -270) (950 150)) rect(l22 (0 -840) (150 2010)) ) - net(33 + net(33 name($34) rect(l7 (940 3965) (950 150)) rect(l7 (-1280 -150) (330 270)) rect(l7 (950 -960) (150 2010)) ) - net(34 + net(34 name($35) polygon(l2 (1365 3065) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) rect(l2 (-340 1670) (445 420)) polygon(l9 (-405 -1620) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570)) @@ -920,7 +920,7 @@ layout( rect(l22 (-1100 -1320) (150 2010)) rect(l22 (950 -960) (330 270)) ) - net(35 + net(35 name($36) polygon(l2 (2575 3065) (0 340) (-105 0) (0 420) (525 0) (0 -760)) rect(l2 (-525 1670) (445 420)) polygon(l9 (-210 -1620) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480)) @@ -931,12 +931,12 @@ layout( rect(l22 (0 -270) (950 150)) rect(l22 (0 -840) (150 2010)) ) - net(36 + net(36 name($37) rect(l7 (3120 3965) (950 150)) rect(l7 (-1280 -150) (330 270)) rect(l7 (950 -960) (150 2010)) ) - net(37 + net(37 name($38) polygon(l2 (4755 3065) (0 340) (-105 0) (0 420) (525 0) (0 -760)) rect(l2 (-525 1670) (445 420)) polygon(l9 (-210 -1620) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480)) @@ -947,12 +947,12 @@ layout( rect(l22 (0 -270) (950 150)) rect(l22 (0 -840) (150 2010)) ) - net(38 + net(38 name($39) rect(l7 (5300 3965) (950 150)) rect(l7 (-1280 -150) (330 270)) rect(l7 (950 -960) (150 2010)) ) - net(39 + net(39 name($40) polygon(l2 (6935 3065) (0 340) (-105 0) (0 420) (525 0) (0 -760)) rect(l2 (-525 1670) (445 420)) polygon(l9 (-210 -1620) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480)) @@ -963,34 +963,34 @@ layout( rect(l22 (0 -270) (950 150)) rect(l22 (0 -840) (150 2010)) ) - net(40 + net(40 name($41) rect(l7 (7480 3965) (950 150)) rect(l7 (-1280 -150) (330 270)) rect(l7 (950 -960) (150 2010)) ) - net(41 + net(41 name($42) polygon(l7 (265 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) ) - net(42 + net(42 name($43) polygon(l7 (6805 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) ) - net(43 + net(43 name($44) polygon(l7 (2445 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) ) - net(44 + net(44 name($45) polygon(l7 (4625 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) ) - net(45 + net(45 name($47) rect(l7 (290 4445) (950 150)) rect(l7 (-1100 -1320) (150 2010)) rect(l7 (950 -960) (330 270)) ) - net(46 + net(46 name($48) rect(l7 (2470 4445) (950 150)) rect(l7 (-1100 -1320) (150 2010)) rect(l7 (950 -960) (330 270)) ) - net(47 + net(47 name($49) polygon(l2 (3545 3065) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) rect(l2 (-340 1670) (445 420)) polygon(l9 (-405 -1620) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570)) @@ -1001,12 +1001,12 @@ layout( rect(l22 (-1100 -1320) (150 2010)) rect(l22 (950 -960) (330 270)) ) - net(48 + net(48 name($50) rect(l7 (4650 4445) (950 150)) rect(l7 (-1100 -1320) (150 2010)) rect(l7 (950 -960) (330 270)) ) - net(49 + net(49 name($51) polygon(l2 (5725 3065) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) rect(l2 (-340 1670) (445 420)) polygon(l9 (-405 -1620) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570)) @@ -1017,7 +1017,7 @@ layout( rect(l22 (-1100 -1320) (150 2010)) rect(l22 (950 -960) (330 270)) ) - net(50 + net(50 name($52) polygon(l2 (7905 3065) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) rect(l2 (-340 1670) (445 420)) polygon(l9 (-405 -1620) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570)) @@ -1028,7 +1028,7 @@ layout( rect(l22 (-1100 -1320) (150 2010)) rect(l22 (950 -960) (330 270)) ) - net(51 + net(51 name($53) rect(l7 (6830 4445) (950 150)) rect(l7 (-1100 -1320) (150 2010)) rect(l7 (950 -960) (330 270)) diff --git a/testdata/lvs/test_22c.lvsdb.1 b/testdata/lvs/test_22c.lvsdb.1 index 029afa97f..0fef41270 100644 --- a/testdata/lvs/test_22c.lvsdb.1 +++ b/testdata/lvs/test_22c.lvsdb.1 @@ -265,7 +265,7 @@ layout( rect(l23 (-110 -170) (170 170)) rect(l2 (-355 -210) (420 265)) ) - net(9 + net(9 name($10) polygon(l7 (265 140) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) ) net(10 name(vss) diff --git a/testdata/lvs/test_22c.lvsdb.2 b/testdata/lvs/test_22c.lvsdb.2 index 7a023acbf..8438d1de6 100644 --- a/testdata/lvs/test_22c.lvsdb.2 +++ b/testdata/lvs/test_22c.lvsdb.2 @@ -265,7 +265,7 @@ layout( rect(l23 (-110 -170) (170 170)) rect(l2 (-355 -210) (420 265)) ) - net(9 + net(9 name($10) polygon(l7 (265 140) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) ) net(10 name(vss) diff --git a/testdata/lvs/test_22c.lvsdb.3 b/testdata/lvs/test_22c.lvsdb.3 index 3f52d22f2..e966c57ac 100644 --- a/testdata/lvs/test_22c.lvsdb.3 +++ b/testdata/lvs/test_22c.lvsdb.3 @@ -265,7 +265,7 @@ layout( rect(l23 (-110 -170) (170 170)) rect(l2 (-355 -210) (420 265)) ) - net(9 + net(9 name($10) polygon(l7 (265 140) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) ) net(10 name(vss) diff --git a/testdata/lvs/test_22d.lvsdb.1 b/testdata/lvs/test_22d.lvsdb.1 index bb827e1c7..73e8005b4 100644 --- a/testdata/lvs/test_22d.lvsdb.1 +++ b/testdata/lvs/test_22d.lvsdb.1 @@ -265,7 +265,7 @@ layout( rect(l23 (-110 -170) (170 170)) rect(l2 (-355 -210) (420 265)) ) - net(9 + net(9 name($10) polygon(l7 (265 140) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) ) net(10 name(vss) diff --git a/testdata/lvs/test_22d.lvsdb.2 b/testdata/lvs/test_22d.lvsdb.2 index 7b32708a2..1d4e0d82a 100644 --- a/testdata/lvs/test_22d.lvsdb.2 +++ b/testdata/lvs/test_22d.lvsdb.2 @@ -265,7 +265,7 @@ layout( rect(l23 (-110 -170) (170 170)) rect(l2 (-355 -210) (420 265)) ) - net(9 + net(9 name($10) polygon(l7 (265 140) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) ) net(10 name(vss) diff --git a/testdata/lvs/test_22d.lvsdb.3 b/testdata/lvs/test_22d.lvsdb.3 index d1f5b2a20..10a35d95c 100644 --- a/testdata/lvs/test_22d.lvsdb.3 +++ b/testdata/lvs/test_22d.lvsdb.3 @@ -265,7 +265,7 @@ layout( rect(l23 (-110 -170) (170 170)) rect(l2 (-355 -210) (420 265)) ) - net(9 + net(9 name($10) polygon(l7 (265 140) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) ) net(10 name(vss) From 135030649b770984bf59d511b981da0c4d623e27 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sat, 17 May 2025 17:15:04 +0200 Subject: [PATCH 02/11] Updating golden test data with new lvsdb files --- testdata/lvs/ringo_device_subcircuits.lvsdb.2 | 2 +- testdata/lvs/ringo_layout_var.lvsdb.2 | 2 +- testdata/lvs/ringo_simple.lvsdb.2 | 2 +- testdata/lvs/ringo_simple_compare2.lvsdb.2 | 2 +- .../lvs/ringo_simple_device_scaling.lvsdb.2 | 2 +- .../lvs/ringo_simple_dummy_device.lvsdb.2 | 24 +- .../ringo_simple_implicit_connections.lvsdb.2 | 2 +- testdata/lvs/ringo_simple_io.lvsdb.2 | 2 +- testdata/lvs/ringo_simple_io2.lvsdb.2 | 908 ------------------ ...simple_net_and_circuit_equivalence.lvsdb.2 | 2 +- .../lvs/ringo_simple_pin_swapping.lvsdb.2 | 2 +- .../ringo_simple_same_device_classes.lvsdb.2 | 2 +- .../lvs/ringo_simple_simplification.lvsdb.2 | 14 +- ...o_simple_simplification_with_align.lvsdb.2 | 14 +- testdata/lvs/ringo_simple_with_tol.lvsdb.2 | 2 +- .../lvs/ringo_simple_with_tol_early.lvsdb.2 | 2 +- testdata/lvs/test_22a.lvsdb.2 | 48 +- testdata/lvs/test_22b.lvsdb.2 | 48 +- 18 files changed, 86 insertions(+), 994 deletions(-) delete mode 100644 testdata/lvs/ringo_simple_io2.lvsdb.2 diff --git a/testdata/lvs/ringo_device_subcircuits.lvsdb.2 b/testdata/lvs/ringo_device_subcircuits.lvsdb.2 index 8eb0b266c..c74e25058 100644 --- a/testdata/lvs/ringo_device_subcircuits.lvsdb.2 +++ b/testdata/lvs/ringo_device_subcircuits.lvsdb.2 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 name($I3) + net(8 name($I5) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_layout_var.lvsdb.2 b/testdata/lvs/ringo_layout_var.lvsdb.2 index 124c4b7b3..2238cd24b 100644 --- a/testdata/lvs/ringo_layout_var.lvsdb.2 +++ b/testdata/lvs/ringo_layout_var.lvsdb.2 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 name($I3) + net(8 name($I5) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_simple.lvsdb.2 b/testdata/lvs/ringo_simple.lvsdb.2 index c8c4ded92..94c1f9904 100644 --- a/testdata/lvs/ringo_simple.lvsdb.2 +++ b/testdata/lvs/ringo_simple.lvsdb.2 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 name($I3) + net(8 name($I5) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_simple_compare2.lvsdb.2 b/testdata/lvs/ringo_simple_compare2.lvsdb.2 index c8c4ded92..94c1f9904 100644 --- a/testdata/lvs/ringo_simple_compare2.lvsdb.2 +++ b/testdata/lvs/ringo_simple_compare2.lvsdb.2 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 name($I3) + net(8 name($I5) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_simple_device_scaling.lvsdb.2 b/testdata/lvs/ringo_simple_device_scaling.lvsdb.2 index fb6b39193..6c89b4e06 100644 --- a/testdata/lvs/ringo_simple_device_scaling.lvsdb.2 +++ b/testdata/lvs/ringo_simple_device_scaling.lvsdb.2 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 name($I3) + net(8 name($I5) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_simple_dummy_device.lvsdb.2 b/testdata/lvs/ringo_simple_dummy_device.lvsdb.2 index a6f463150..4abffb39a 100644 --- a/testdata/lvs/ringo_simple_dummy_device.lvsdb.2 +++ b/testdata/lvs/ringo_simple_dummy_device.lvsdb.2 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 + net(8 name($I5) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) @@ -361,41 +361,41 @@ layout( rect((0 350) (27600 7650)) # Nets with their geometries - net(1 + net(1 name($3) rect(l4 (26050 2800) (525 550)) rect(l4 (-525 -300) (300 300)) rect(l4 (-25 -2000) (250 1450)) rect(l8 (-465 310) (180 180)) rect(l11 (-240 -240) (300 300)) ) - net(2 + net(2 name($4) rect(l11 (4040 2950) (610 300)) ) - net(3 + net(3 name($5) rect(l11 (5550 2950) (900 300)) ) - net(4 + net(4 name($6) rect(l11 (7350 2950) (900 300)) ) - net(5 + net(5 name($7) rect(l11 (9150 2950) (900 300)) ) - net(6 + net(6 name($8) rect(l11 (10950 2950) (900 300)) ) - net(7 + net(7 name($9) rect(l11 (12750 2950) (900 300)) ) - net(8 + net(8 name($10) rect(l11 (14550 2950) (900 300)) ) - net(9 + net(9 name($11) rect(l11 (16350 2950) (900 300)) ) - net(10 + net(10 name($12) rect(l11 (18150 2950) (900 300)) ) - net(11 + net(11 name($13) rect(l11 (19950 2950) (900 300)) ) net(12 name(FB) diff --git a/testdata/lvs/ringo_simple_implicit_connections.lvsdb.2 b/testdata/lvs/ringo_simple_implicit_connections.lvsdb.2 index 97bf061e7..0657be4d3 100644 --- a/testdata/lvs/ringo_simple_implicit_connections.lvsdb.2 +++ b/testdata/lvs/ringo_simple_implicit_connections.lvsdb.2 @@ -202,7 +202,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 name($I3) + net(8 name($I5) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_simple_io.lvsdb.2 b/testdata/lvs/ringo_simple_io.lvsdb.2 index c5c4ac6f1..3dd69d78c 100644 --- a/testdata/lvs/ringo_simple_io.lvsdb.2 +++ b/testdata/lvs/ringo_simple_io.lvsdb.2 @@ -176,7 +176,7 @@ J( R(l11 (-150 -150) (300 300)) ) N(7 I(SUBSTRATE)) - N(8 I($I3) + N(8 I($I5) R(l6 (975 1660) (425 950)) R(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_simple_io2.lvsdb.2 b/testdata/lvs/ringo_simple_io2.lvsdb.2 deleted file mode 100644 index c8c4ded92..000000000 --- a/testdata/lvs/ringo_simple_io2.lvsdb.2 +++ /dev/null @@ -1,908 +0,0 @@ -#%lvsdb-klayout - -# Layout -layout( - top(RINGO) - unit(0.001) - - # Layer section - # This section lists the mask layers (drawing or derived) and their connections. - - # Mask layers - layer(l3 '1/0') - layer(l4 '5/0') - layer(l8 '8/0') - layer(l11 '9/0') - layer(l12 '10/0') - layer(l13 '11/0') - layer(l7) - layer(l2) - layer(l9) - layer(l6) - layer(l10) - - # Mask layer connectivity - connect(l3 l3 l9) - connect(l4 l4 l8) - connect(l8 l4 l8 l11 l2 l9 l6 l10) - connect(l11 l8 l11 l12) - connect(l12 l11 l12 l13) - connect(l13 l12 l13) - connect(l7 l7) - connect(l2 l8 l2) - connect(l9 l3 l8 l9) - connect(l6 l8 l6) - connect(l10 l8 l10) - - # Global nets and connectivity - global(l7 SUBSTRATE) - global(l10 SUBSTRATE) - - # Device class section - class(PMOS MOS4) - class(NMOS MOS4) - - # Device abstracts section - # Device abstracts list the pin shapes of the devices. - device(D$PMOS PMOS - terminal(S - rect(l2 (-550 -750) (425 1500)) - ) - terminal(G - rect(l4 (-125 -750) (250 1500)) - ) - terminal(D - rect(l2 (125 -750) (450 1500)) - ) - terminal(B - rect(l3 (-125 -750) (250 1500)) - ) - ) - device(D$PMOS$1 PMOS - terminal(S - rect(l2 (-575 -750) (450 1500)) - ) - terminal(G - rect(l4 (-125 -750) (250 1500)) - ) - terminal(D - rect(l2 (125 -750) (425 1500)) - ) - terminal(B - rect(l3 (-125 -750) (250 1500)) - ) - ) - device(D$PMOS$2 PMOS - terminal(S - rect(l2 (-550 -750) (425 1500)) - ) - terminal(G - rect(l4 (-125 -750) (250 1500)) - ) - terminal(D - rect(l2 (125 -750) (425 1500)) - ) - terminal(B - rect(l3 (-125 -750) (250 1500)) - ) - ) - device(D$NMOS NMOS - terminal(S - rect(l6 (-550 -475) (425 950)) - ) - terminal(G - rect(l4 (-125 -475) (250 950)) - ) - terminal(D - rect(l6 (125 -475) (450 950)) - ) - terminal(B - rect(l7 (-125 -475) (250 950)) - ) - ) - device(D$NMOS$1 NMOS - terminal(S - rect(l6 (-575 -475) (450 950)) - ) - terminal(G - rect(l4 (-125 -475) (250 950)) - ) - terminal(D - rect(l6 (125 -475) (425 950)) - ) - terminal(B - rect(l7 (-125 -475) (250 950)) - ) - ) - device(D$NMOS$2 NMOS - terminal(S - rect(l6 (-550 -475) (425 950)) - ) - terminal(G - rect(l4 (-125 -475) (250 950)) - ) - terminal(D - rect(l6 (125 -475) (425 950)) - ) - terminal(B - rect(l7 (-125 -475) (250 950)) - ) - ) - - # Circuit section - # Circuits are the hierarchical building blocks of the netlist. - circuit(ND2X1 - - # Circuit boundary - rect((-100 400) (2600 7600)) - - # Nets with their geometries - net(1 name(VDD) - rect(l8 (1110 5160) (180 180)) - rect(l8 (-180 920) (180 180)) - rect(l8 (-180 -730) (180 180)) - rect(l11 (-240 -790) (300 1700)) - rect(l11 (-1350 0) (2400 800)) - rect(l11 (-1150 -400) (0 0)) - rect(l2 (-275 -2150) (425 1500)) - rect(l2 (-400 -1500) (425 1500)) - ) - net(2 name(OUT) - rect(l8 (1810 1770) (180 180)) - rect(l8 (-180 370) (180 180)) - rect(l8 (-1580 3760) (180 180)) - rect(l8 (-180 -730) (180 180)) - rect(l8 (-180 -730) (180 180)) - rect(l8 (1220 920) (180 180)) - rect(l8 (-180 -1280) (180 180)) - rect(l8 (-180 370) (180 180)) - polygon(l11 (-240 -4180) (0 1390) (490 0) (0 -300) (-190 0) (0 -1090)) - rect(l11 (-110 1390) (300 1400)) - polygon(l11 (-1890 0) (0 600) (300 0) (0 -300) (1590 0) (0 -300)) - rect(l11 (-140 -500) (0 0)) - rect(l11 (-1750 1100) (300 1400)) - rect(l11 (1100 -1700) (300 300)) - rect(l11 (-300 0) (300 1400)) - rect(l2 (-375 -1450) (425 1500)) - rect(l2 (-1800 -1500) (425 1500)) - rect(l6 (950 -4890) (425 950)) - ) - net(3 name(VSS) - rect(l8 (410 1770) (180 180)) - rect(l8 (-180 370) (180 180)) - rect(l11 (-240 -1300) (300 1360)) - rect(l11 (-650 -2160) (2400 800)) - rect(l11 (-1150 -400) (0 0)) - rect(l6 (-950 860) (425 950)) - ) - net(4 - rect(l3 (-100 4500) (2600 3500)) - ) - net(5 name(B) - rect(l4 (1425 2860) (250 1940)) - rect(l4 (-345 -950) (300 300)) - rect(l4 (-205 650) (250 2000)) - rect(l4 (-250 -2000) (250 2000)) - rect(l4 (-250 -5390) (250 1450)) - rect(l8 (-285 1050) (180 180)) - rect(l11 (-70 -90) (0 0)) - rect(l11 (-170 -150) (300 300)) - ) - net(6 name(A) - rect(l4 (725 2860) (250 1940)) - rect(l4 (-325 -1850) (300 300)) - rect(l4 (-225 1550) (250 2000)) - rect(l4 (-250 -2000) (250 2000)) - rect(l4 (-250 -5390) (250 1450)) - rect(l8 (-265 150) (180 180)) - rect(l11 (-90 -90) (0 0)) - rect(l11 (-150 -150) (300 300)) - ) - net(7 name(SUBSTRATE)) - net(8 name($I3) - rect(l6 (975 1660) (425 950)) - rect(l6 (-400 -950) (425 950)) - ) - - # Outgoing pins and their connections to nets - pin(1 name(VDD)) - pin(2 name(OUT)) - pin(3 name(VSS)) - pin(4) - pin(5 name(B)) - pin(6 name(A)) - pin(7 name(SUBSTRATE)) - - # Devices and their connections - device(1 D$PMOS - location(850 5800) - param(L 0.25) - param(W 1.5) - param(AS 0.6375) - param(AD 0.3375) - param(PS 3.85) - param(PD 1.95) - terminal(S 2) - terminal(G 6) - terminal(D 1) - terminal(B 4) - ) - device(2 D$PMOS$1 - location(1550 5800) - param(L 0.25) - param(W 1.5) - param(AS 0.3375) - param(AD 0.6375) - param(PS 1.95) - param(PD 3.85) - terminal(S 1) - terminal(G 5) - terminal(D 2) - terminal(B 4) - ) - device(3 D$NMOS - location(850 2135) - param(L 0.25) - param(W 0.95) - param(AS 0.40375) - param(AD 0.21375) - param(PS 2.75) - param(PD 1.4) - terminal(S 3) - terminal(G 6) - terminal(D 8) - terminal(B 7) - ) - device(4 D$NMOS$1 - location(1550 2135) - param(L 0.25) - param(W 0.95) - param(AS 0.21375) - param(AD 0.40375) - param(PS 1.4) - param(PD 2.75) - terminal(S 8) - terminal(G 5) - terminal(D 2) - terminal(B 7) - ) - - ) - circuit(INVX1 - - # Circuit boundary - rect((-100 400) (2000 7600)) - - # Nets with their geometries - net(1 name(VDD) - rect(l8 (410 6260) (180 180)) - rect(l8 (-180 -730) (180 180)) - rect(l8 (-180 -730) (180 180)) - rect(l11 (-240 -240) (300 1400)) - rect(l11 (-650 300) (1800 800)) - rect(l11 (-1450 -1100) (300 300)) - rect(l11 (300 400) (0 0)) - rect(l2 (-650 -2150) (425 1500)) - ) - net(2 name(OUT) - rect(l8 (1110 5160) (180 180)) - rect(l8 (-180 920) (180 180)) - rect(l8 (-180 -730) (180 180)) - rect(l8 (-180 -4120) (180 180)) - rect(l8 (-180 370) (180 180)) - rect(l11 (-240 -790) (300 4790)) - rect(l11 (-150 -2500) (0 0)) - rect(l2 (-225 1050) (425 1500)) - rect(l6 (-425 -4890) (425 950)) - ) - net(3 name(VSS) - rect(l8 (410 1770) (180 180)) - rect(l8 (-180 370) (180 180)) - rect(l11 (-240 -1300) (300 1360)) - rect(l11 (-650 -2160) (1800 800)) - rect(l11 (-850 -400) (0 0)) - rect(l6 (-650 860) (425 950)) - ) - net(4 - rect(l3 (-100 4500) (2000 3500)) - ) - net(5 name(IN) - rect(l4 (725 2860) (250 1940)) - rect(l4 (-525 -1850) (300 300)) - rect(l4 (-25 1550) (250 2000)) - rect(l4 (-250 -2000) (250 2000)) - rect(l4 (-250 -5390) (250 1450)) - rect(l8 (-465 150) (180 180)) - rect(l11 (-90 -90) (0 0)) - rect(l11 (-150 -150) (300 300)) - ) - net(6 name(SUBSTRATE)) - - # Outgoing pins and their connections to nets - pin(1 name(VDD)) - pin(2 name(OUT)) - pin(3 name(VSS)) - pin(4) - pin(5 name(IN)) - pin(6 name(SUBSTRATE)) - - # Devices and their connections - device(1 D$PMOS$2 - location(850 5800) - param(L 0.25) - param(W 1.5) - param(AS 0.6375) - param(AD 0.6375) - param(PS 3.85) - param(PD 3.85) - terminal(S 1) - terminal(G 5) - terminal(D 2) - terminal(B 4) - ) - device(2 D$NMOS$2 - location(850 2135) - param(L 0.25) - param(W 0.95) - param(AS 0.40375) - param(AD 0.40375) - param(PS 2.75) - param(PD 2.75) - terminal(S 3) - terminal(G 5) - terminal(D 2) - terminal(B 6) - ) - - ) - circuit(RINGO - - # Circuit boundary - rect((0 350) (25800 7650)) - - # Nets with their geometries - net(1 - rect(l11 (4040 2950) (610 300)) - ) - net(2 - rect(l11 (5550 2950) (900 300)) - ) - net(3 - rect(l11 (7350 2950) (900 300)) - ) - net(4 - rect(l11 (9150 2950) (900 300)) - ) - net(5 - rect(l11 (10950 2950) (900 300)) - ) - net(6 - rect(l11 (12750 2950) (900 300)) - ) - net(7 - rect(l11 (14550 2950) (900 300)) - ) - net(8 - rect(l11 (16350 2950) (900 300)) - ) - net(9 - rect(l11 (18150 2950) (900 300)) - ) - net(10 - rect(l11 (19950 2950) (900 300)) - ) - net(11 name(FB) - rect(l11 (21750 2950) (900 300)) - rect(l11 (-19530 590) (320 320)) - rect(l11 (17820 -320) (320 320)) - rect(l12 (-18400 -260) (200 200)) - rect(l12 (17940 -200) (200 200)) - rect(l13 (-18040 -300) (17740 400)) - rect(l13 (-17920 -200) (0 0)) - rect(l13 (-220 -200) (400 400)) - rect(l13 (17740 -400) (400 400)) - ) - net(12 name(VDD) - rect(l3 (500 4500) (1400 3500)) - rect(l3 (-1900 -3500) (600 3500)) - rect(l3 (23300 -3500) (1400 3500)) - rect(l3 (-100 -3500) (600 3500)) - rect(l8 (-24690 -1240) (180 180)) - rect(l8 (-180 370) (180 180)) - rect(l8 (-180 -1280) (180 180)) - rect(l8 (23220 370) (180 180)) - rect(l8 (-180 370) (180 180)) - rect(l8 (-180 -1280) (180 180)) - rect(l11 (-21740 860) (0 0)) - rect(l11 (-2350 -450) (1200 800)) - rect(l11 (-750 -1450) (300 1400)) - rect(l11 (-100 -350) (0 0)) - rect(l11 (-1250 -400) (600 800)) - rect(l11 (23400 -800) (1200 800)) - rect(l11 (-750 -1450) (300 1400)) - rect(l11 (-100 -350) (0 0)) - rect(l11 (550 -400) (600 800)) - rect(l9 (-24850 -1500) (500 1500)) - rect(l9 (22900 -1500) (500 1500)) - ) - net(13 name(OUT) - rect(l11 (23440 3840) (320 320)) - rect(l12 (-260 -260) (200 200)) - rect(l13 (-100 -100) (0 0)) - rect(l13 (-200 -200) (400 400)) - ) - net(14 name(ENABLE) - rect(l11 (2440 2940) (320 320)) - rect(l12 (-260 -260) (200 200)) - rect(l13 (-100 -100) (0 0)) - rect(l13 (-200 -200) (400 400)) - ) - net(15 name(VSS) - rect(l8 (1110 1610) (180 180)) - rect(l8 (-180 -1280) (180 180)) - rect(l8 (-180 370) (180 180)) - rect(l8 (23220 370) (180 180)) - rect(l8 (-180 -1280) (180 180)) - rect(l8 (-180 370) (180 180)) - rect(l11 (-21740 -390) (0 0)) - rect(l11 (-1900 -400) (300 1400)) - rect(l11 (-750 -1450) (1200 800)) - rect(l11 (-550 -400) (0 0)) - rect(l11 (-1250 -400) (600 800)) - rect(l11 (23850 -750) (300 1400)) - rect(l11 (-750 -1450) (1200 800)) - rect(l11 (-550 -400) (0 0)) - rect(l11 (550 -400) (600 800)) - rect(l10 (-24850 -800) (500 1500)) - rect(l10 (22900 -1500) (500 1500)) - ) - - # Outgoing pins and their connections to nets - pin(11 name(FB)) - pin(12 name(VDD)) - pin(13 name(OUT)) - pin(14 name(ENABLE)) - pin(15 name(VSS)) - - # Subcircuits and their connections - circuit(1 ND2X1 location(1800 0) - pin(0 12) - pin(1 1) - pin(2 15) - pin(3 12) - pin(4 11) - pin(5 14) - pin(6 15) - ) - circuit(2 INVX1 location(4200 0) - pin(0 12) - pin(1 2) - pin(2 15) - pin(3 12) - pin(4 1) - pin(5 15) - ) - circuit(3 INVX1 location(6000 0) - pin(0 12) - pin(1 3) - pin(2 15) - pin(3 12) - pin(4 2) - pin(5 15) - ) - circuit(4 INVX1 location(7800 0) - pin(0 12) - pin(1 4) - pin(2 15) - pin(3 12) - pin(4 3) - pin(5 15) - ) - circuit(5 INVX1 location(9600 0) - pin(0 12) - pin(1 5) - pin(2 15) - pin(3 12) - pin(4 4) - pin(5 15) - ) - circuit(6 INVX1 location(11400 0) - pin(0 12) - pin(1 6) - pin(2 15) - pin(3 12) - pin(4 5) - pin(5 15) - ) - circuit(7 INVX1 location(13200 0) - pin(0 12) - pin(1 7) - pin(2 15) - pin(3 12) - pin(4 6) - pin(5 15) - ) - circuit(8 INVX1 location(15000 0) - pin(0 12) - pin(1 8) - pin(2 15) - pin(3 12) - pin(4 7) - pin(5 15) - ) - circuit(9 INVX1 location(16800 0) - pin(0 12) - pin(1 9) - pin(2 15) - pin(3 12) - pin(4 8) - pin(5 15) - ) - circuit(10 INVX1 location(18600 0) - pin(0 12) - pin(1 10) - pin(2 15) - pin(3 12) - pin(4 9) - pin(5 15) - ) - circuit(11 INVX1 location(20400 0) - pin(0 12) - pin(1 11) - pin(2 15) - pin(3 12) - pin(4 10) - pin(5 15) - ) - circuit(12 INVX1 location(22200 0) - pin(0 12) - pin(1 13) - pin(2 15) - pin(3 12) - pin(4 11) - pin(5 15) - ) - - ) -) - -# Reference netlist -reference( - - # Device class section - class(PMOS MOS4) - class(NMOS MOS4) - - # Circuit section - # Circuits are the hierarchical building blocks of the netlist. - circuit(ND2X1 - - # Nets - net(1 name(VDD)) - net(2 name(OUT)) - net(3 name(VSS)) - net(4 name(NWELL)) - net(5 name(B)) - net(6 name(A)) - net(7 name(BULK)) - net(8 name('1')) - - # Outgoing pins and their connections to nets - pin(1 name(VDD)) - pin(2 name(OUT)) - pin(3 name(VSS)) - pin(4 name(NWELL)) - pin(5 name(B)) - pin(6 name(A)) - pin(7 name(BULK)) - - # Devices and their connections - device(1 PMOS - name($1) - param(L 0.25) - param(W 1.5) - param(AS 0) - param(AD 0) - param(PS 0) - param(PD 0) - terminal(S 1) - terminal(G 6) - terminal(D 2) - terminal(B 4) - ) - device(2 PMOS - name($2) - param(L 0.25) - param(W 1.5) - param(AS 0) - param(AD 0) - param(PS 0) - param(PD 0) - terminal(S 1) - terminal(G 5) - terminal(D 2) - terminal(B 4) - ) - device(3 NMOS - name($3) - param(L 0.25) - param(W 0.95) - param(AS 0) - param(AD 0) - param(PS 0) - param(PD 0) - terminal(S 3) - terminal(G 6) - terminal(D 8) - terminal(B 7) - ) - device(4 NMOS - name($4) - param(L 0.25) - param(W 0.95) - param(AS 0) - param(AD 0) - param(PS 0) - param(PD 0) - terminal(S 8) - terminal(G 5) - terminal(D 2) - terminal(B 7) - ) - - ) - circuit(INVX1 - - # Nets - net(1 name(VDD)) - net(2 name(OUT)) - net(3 name(VSS)) - net(4 name(NWELL)) - net(5 name(IN)) - net(6 name(BULK)) - - # Outgoing pins and their connections to nets - pin(1 name(VDD)) - pin(2 name(OUT)) - pin(3 name(VSS)) - pin(4 name(NWELL)) - pin(5 name(IN)) - pin(6 name(BULK)) - - # Devices and their connections - device(1 PMOS - name($1) - param(L 0.25) - param(W 1.5) - param(AS 0) - param(AD 0) - param(PS 0) - param(PD 0) - terminal(S 1) - terminal(G 5) - terminal(D 2) - terminal(B 4) - ) - device(2 NMOS - name($2) - param(L 0.25) - param(W 0.95) - param(AS 0) - param(AD 0) - param(PS 0) - param(PD 0) - terminal(S 3) - terminal(G 5) - terminal(D 2) - terminal(B 6) - ) - - ) - circuit(RINGO - - # Nets - net(1 name(VSS)) - net(2 name(VDD)) - net(3 name(FB)) - net(4 name(ENABLE)) - net(5 name(OUT)) - net(6 name('1')) - net(7 name('2')) - net(8 name('3')) - net(9 name('4')) - net(10 name('5')) - net(11 name('6')) - net(12 name('7')) - net(13 name('8')) - net(14 name('9')) - net(15 name('10')) - - # Outgoing pins and their connections to nets - pin(1 name(VSS)) - pin(2 name(VDD)) - pin(3 name(FB)) - pin(4 name(ENABLE)) - pin(5 name(OUT)) - - # Subcircuits and their connections - circuit(1 ND2X1 name($1) - pin(0 2) - pin(1 6) - pin(2 1) - pin(3 2) - pin(4 3) - pin(5 4) - pin(6 1) - ) - circuit(2 INVX1 name($2) - pin(0 2) - pin(1 7) - pin(2 1) - pin(3 2) - pin(4 6) - pin(5 1) - ) - circuit(3 INVX1 name($3) - pin(0 2) - pin(1 8) - pin(2 1) - pin(3 2) - pin(4 7) - pin(5 1) - ) - circuit(4 INVX1 name($4) - pin(0 2) - pin(1 9) - pin(2 1) - pin(3 2) - pin(4 8) - pin(5 1) - ) - circuit(5 INVX1 name($5) - pin(0 2) - pin(1 10) - pin(2 1) - pin(3 2) - pin(4 9) - pin(5 1) - ) - circuit(6 INVX1 name($6) - pin(0 2) - pin(1 11) - pin(2 1) - pin(3 2) - pin(4 10) - pin(5 1) - ) - circuit(7 INVX1 name($7) - pin(0 2) - pin(1 12) - pin(2 1) - pin(3 2) - pin(4 11) - pin(5 1) - ) - circuit(8 INVX1 name($8) - pin(0 2) - pin(1 13) - pin(2 1) - pin(3 2) - pin(4 12) - pin(5 1) - ) - circuit(9 INVX1 name($9) - pin(0 2) - pin(1 14) - pin(2 1) - pin(3 2) - pin(4 13) - pin(5 1) - ) - circuit(10 INVX1 name($10) - pin(0 2) - pin(1 15) - pin(2 1) - pin(3 2) - pin(4 14) - pin(5 1) - ) - circuit(11 INVX1 name($11) - pin(0 2) - pin(1 3) - pin(2 1) - pin(3 2) - pin(4 15) - pin(5 1) - ) - circuit(12 INVX1 name($12) - pin(0 2) - pin(1 5) - pin(2 1) - pin(3 2) - pin(4 3) - pin(5 1) - ) - - ) -) - -# Cross reference -xref( - circuit(INVX1 INVX1 match - xref( - net(4 4 match) - net(5 5 match) - net(2 2 match) - net(6 6 match) - net(1 1 match) - net(3 3 match) - pin(3 3 match) - pin(4 4 match) - pin(1 1 match) - pin(5 5 match) - pin(0 0 match) - pin(2 2 match) - device(2 2 match) - device(1 1 match) - ) - ) - circuit(ND2X1 ND2X1 match - xref( - net(8 8 match) - net(4 4 match) - net(6 6 match) - net(5 5 match) - net(2 2 match) - net(7 7 match) - net(1 1 match) - net(3 3 match) - pin(3 3 match) - pin(5 5 match) - pin(4 4 match) - pin(1 1 match) - pin(6 6 match) - pin(0 0 match) - pin(2 2 match) - device(3 3 match) - device(4 4 match) - device(1 1 match) - device(2 2 match) - ) - ) - circuit(RINGO RINGO match - xref( - net(1 6 match) - net(10 15 match) - net(2 7 match) - net(3 8 match) - net(4 9 match) - net(5 10 match) - net(6 11 match) - net(7 12 match) - net(8 13 match) - net(9 14 match) - net(14 4 match) - net(11 3 match) - net(13 5 match) - net(12 2 match) - net(15 1 match) - pin(3 3 match) - pin(0 2 match) - pin(2 4 match) - pin(1 1 match) - pin(4 0 match) - circuit(2 2 match) - circuit(3 3 match) - circuit(4 4 match) - circuit(5 5 match) - circuit(6 6 match) - circuit(7 7 match) - circuit(8 8 match) - circuit(9 9 match) - circuit(10 10 match) - circuit(11 11 match) - circuit(12 12 match) - circuit(1 1 match) - ) - ) -) diff --git a/testdata/lvs/ringo_simple_net_and_circuit_equivalence.lvsdb.2 b/testdata/lvs/ringo_simple_net_and_circuit_equivalence.lvsdb.2 index f924852fe..6e73c3fdf 100644 --- a/testdata/lvs/ringo_simple_net_and_circuit_equivalence.lvsdb.2 +++ b/testdata/lvs/ringo_simple_net_and_circuit_equivalence.lvsdb.2 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 name($I3) + net(8 name($I5) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_simple_pin_swapping.lvsdb.2 b/testdata/lvs/ringo_simple_pin_swapping.lvsdb.2 index d8f0bcee8..dbeab1f69 100644 --- a/testdata/lvs/ringo_simple_pin_swapping.lvsdb.2 +++ b/testdata/lvs/ringo_simple_pin_swapping.lvsdb.2 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 name($I3) + net(8 name($I5) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_simple_same_device_classes.lvsdb.2 b/testdata/lvs/ringo_simple_same_device_classes.lvsdb.2 index 958d330a8..08ae6e339 100644 --- a/testdata/lvs/ringo_simple_same_device_classes.lvsdb.2 +++ b/testdata/lvs/ringo_simple_same_device_classes.lvsdb.2 @@ -201,7 +201,7 @@ layout( rect(l17 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 name($I3) + net(8 name($I5) rect(l9 (975 1660) (425 950)) rect(l9 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_simple_simplification.lvsdb.2 b/testdata/lvs/ringo_simple_simplification.lvsdb.2 index 475506d1f..494dbfa62 100644 --- a/testdata/lvs/ringo_simple_simplification.lvsdb.2 +++ b/testdata/lvs/ringo_simple_simplification.lvsdb.2 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 + net(8 name($I5) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) @@ -560,22 +560,22 @@ layout( rect(l10 (-24850 -800) (500 1500)) rect(l10 (22900 -1500) (500 1500)) ) - net(10 + net(10 name($I22) rect(l11 (7350 2950) (900 300)) ) - net(11 + net(11 name($I18) rect(l11 (16350 2950) (900 300)) ) - net(12 + net(12 name($I36) rect(l11 (9150 2950) (900 300)) ) - net(13 + net(13 name($I37) rect(l11 (10950 2950) (900 300)) ) - net(14 + net(14 name($I38) rect(l11 (12750 2950) (900 300)) ) - net(15 + net(15 name($I39) rect(l11 (14550 2950) (900 300)) ) diff --git a/testdata/lvs/ringo_simple_simplification_with_align.lvsdb.2 b/testdata/lvs/ringo_simple_simplification_with_align.lvsdb.2 index 650cb1b5a..e374d9100 100644 --- a/testdata/lvs/ringo_simple_simplification_with_align.lvsdb.2 +++ b/testdata/lvs/ringo_simple_simplification_with_align.lvsdb.2 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 + net(8 name($I5) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) @@ -560,22 +560,22 @@ layout( rect(l10 (-24850 -800) (500 1500)) rect(l10 (22900 -1500) (500 1500)) ) - net(10 + net(10 name($I22) rect(l11 (7350 2950) (900 300)) ) - net(11 + net(11 name($I18) rect(l11 (16350 2950) (900 300)) ) - net(12 + net(12 name($I36) rect(l11 (9150 2950) (900 300)) ) - net(13 + net(13 name($I37) rect(l11 (10950 2950) (900 300)) ) - net(14 + net(14 name($I38) rect(l11 (12750 2950) (900 300)) ) - net(15 + net(15 name($I39) rect(l11 (14550 2950) (900 300)) ) diff --git a/testdata/lvs/ringo_simple_with_tol.lvsdb.2 b/testdata/lvs/ringo_simple_with_tol.lvsdb.2 index bded7a1fc..1ea753c38 100644 --- a/testdata/lvs/ringo_simple_with_tol.lvsdb.2 +++ b/testdata/lvs/ringo_simple_with_tol.lvsdb.2 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 name($I3) + net(8 name($I5) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/ringo_simple_with_tol_early.lvsdb.2 b/testdata/lvs/ringo_simple_with_tol_early.lvsdb.2 index bded7a1fc..1ea753c38 100644 --- a/testdata/lvs/ringo_simple_with_tol_early.lvsdb.2 +++ b/testdata/lvs/ringo_simple_with_tol_early.lvsdb.2 @@ -199,7 +199,7 @@ layout( rect(l11 (-150 -150) (300 300)) ) net(7 name(SUBSTRATE)) - net(8 name($I3) + net(8 name($I5) rect(l6 (975 1660) (425 950)) rect(l6 (-400 -950) (425 950)) ) diff --git a/testdata/lvs/test_22a.lvsdb.2 b/testdata/lvs/test_22a.lvsdb.2 index bd5c980af..b6914388f 100644 --- a/testdata/lvs/test_22a.lvsdb.2 +++ b/testdata/lvs/test_22a.lvsdb.2 @@ -832,16 +832,16 @@ layout( rect(l24 (2030 -150) (150 150)) rect(l24 (2030 -150) (150 150)) ) - net(27 + net(27 name($28) polygon(l7 (955 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180)) ) - net(28 + net(28 name($29) polygon(l7 (7495 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180)) ) - net(29 + net(29 name($30) polygon(l7 (3135 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180)) ) - net(30 + net(30 name($31) polygon(l7 (5315 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180)) ) net(31 name('wl[1]') @@ -893,7 +893,7 @@ layout( rect(l24 (2030 -150) (150 150)) rect(l24 (2030 -150) (150 150)) ) - net(32 + net(32 name($33) polygon(l2 (395 3065) (0 340) (-105 0) (0 420) (525 0) (0 -760)) rect(l2 (-525 1670) (445 420)) polygon(l9 (-210 -1620) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480)) @@ -904,12 +904,12 @@ layout( rect(l22 (0 -270) (950 150)) rect(l22 (0 -840) (150 2010)) ) - net(33 + net(33 name($34) rect(l7 (940 3965) (950 150)) rect(l7 (-1280 -150) (330 270)) rect(l7 (950 -960) (150 2010)) ) - net(34 + net(34 name($35) polygon(l2 (1365 3065) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) rect(l2 (-340 1670) (445 420)) polygon(l9 (-405 -1620) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570)) @@ -920,7 +920,7 @@ layout( rect(l22 (-1100 -1320) (150 2010)) rect(l22 (950 -960) (330 270)) ) - net(35 + net(35 name($36) polygon(l2 (2575 3065) (0 340) (-105 0) (0 420) (525 0) (0 -760)) rect(l2 (-525 1670) (445 420)) polygon(l9 (-210 -1620) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480)) @@ -931,12 +931,12 @@ layout( rect(l22 (0 -270) (950 150)) rect(l22 (0 -840) (150 2010)) ) - net(36 + net(36 name($37) rect(l7 (3120 3965) (950 150)) rect(l7 (-1280 -150) (330 270)) rect(l7 (950 -960) (150 2010)) ) - net(37 + net(37 name($38) polygon(l2 (4755 3065) (0 340) (-105 0) (0 420) (525 0) (0 -760)) rect(l2 (-525 1670) (445 420)) polygon(l9 (-210 -1620) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480)) @@ -947,12 +947,12 @@ layout( rect(l22 (0 -270) (950 150)) rect(l22 (0 -840) (150 2010)) ) - net(38 + net(38 name($39) rect(l7 (5300 3965) (950 150)) rect(l7 (-1280 -150) (330 270)) rect(l7 (950 -960) (150 2010)) ) - net(39 + net(39 name($40) polygon(l2 (5725 3065) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) rect(l2 (-340 1670) (445 420)) polygon(l9 (-405 -1620) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570)) @@ -963,7 +963,7 @@ layout( rect(l22 (-1100 -1320) (150 2010)) rect(l22 (950 -960) (330 270)) ) - net(40 + net(40 name($41) polygon(l2 (6935 3065) (0 340) (-105 0) (0 420) (525 0) (0 -760)) rect(l2 (-525 1670) (445 420)) polygon(l9 (-210 -1620) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480)) @@ -974,12 +974,12 @@ layout( rect(l22 (0 -270) (950 150)) rect(l22 (0 -840) (150 2010)) ) - net(41 + net(41 name($42) rect(l7 (7480 3965) (950 150)) rect(l7 (-1280 -150) (330 270)) rect(l7 (950 -960) (150 2010)) ) - net(42 + net(42 name($43) polygon(l2 (7905 3065) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) rect(l2 (-340 1670) (445 420)) polygon(l9 (-405 -1620) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570)) @@ -990,29 +990,29 @@ layout( rect(l22 (-1100 -1320) (150 2010)) rect(l22 (950 -960) (330 270)) ) - net(43 + net(43 name($44) polygon(l7 (265 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) ) - net(44 + net(44 name($45) polygon(l7 (6805 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) ) - net(45 + net(45 name($46) polygon(l7 (2445 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) ) - net(46 + net(46 name($47) polygon(l7 (4625 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) ) - net(47 + net(47 name($49) rect(l7 (290 4445) (950 150)) rect(l7 (-1100 -1320) (150 2010)) rect(l7 (950 -960) (330 270)) ) - net(48 + net(48 name($50) rect(l7 (2470 4445) (950 150)) rect(l7 (-1100 -1320) (150 2010)) rect(l7 (950 -960) (330 270)) ) - net(49 + net(49 name($51) polygon(l2 (3545 3065) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) rect(l2 (-340 1670) (445 420)) polygon(l9 (-405 -1620) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570)) @@ -1023,12 +1023,12 @@ layout( rect(l22 (-1100 -1320) (150 2010)) rect(l22 (950 -960) (330 270)) ) - net(50 + net(50 name($52) rect(l7 (4650 4445) (950 150)) rect(l7 (-1100 -1320) (150 2010)) rect(l7 (950 -960) (330 270)) ) - net(51 + net(51 name($53) rect(l7 (6830 4445) (950 150)) rect(l7 (-1100 -1320) (150 2010)) rect(l7 (950 -960) (330 270)) diff --git a/testdata/lvs/test_22b.lvsdb.2 b/testdata/lvs/test_22b.lvsdb.2 index cac410e2b..7c718f649 100644 --- a/testdata/lvs/test_22b.lvsdb.2 +++ b/testdata/lvs/test_22b.lvsdb.2 @@ -832,16 +832,16 @@ layout( rect(l24 (2030 -150) (150 150)) rect(l24 (2030 -150) (150 150)) ) - net(27 + net(27 name($28) polygon(l7 (955 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180)) ) - net(28 + net(28 name($29) polygon(l7 (7495 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180)) ) - net(29 + net(29 name($30) polygon(l7 (3135 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180)) ) - net(30 + net(30 name($31) polygon(l7 (5315 2305) (0 180) (-690 0) (0 150) (1650 0) (0 -150) (-690 0) (0 -180)) ) net(31 name('wl[1]') @@ -893,7 +893,7 @@ layout( rect(l24 (2030 -150) (150 150)) rect(l24 (2030 -150) (150 150)) ) - net(32 + net(32 name($33) polygon(l2 (395 3065) (0 340) (-105 0) (0 420) (525 0) (0 -760)) rect(l2 (-525 1670) (445 420)) polygon(l9 (-210 -1620) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480)) @@ -904,12 +904,12 @@ layout( rect(l22 (0 -270) (950 150)) rect(l22 (0 -840) (150 2010)) ) - net(33 + net(33 name($34) rect(l7 (940 3965) (950 150)) rect(l7 (-1280 -150) (330 270)) rect(l7 (950 -960) (150 2010)) ) - net(34 + net(34 name($35) polygon(l2 (1365 3065) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) rect(l2 (-340 1670) (445 420)) polygon(l9 (-405 -1620) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570)) @@ -920,7 +920,7 @@ layout( rect(l22 (-1100 -1320) (150 2010)) rect(l22 (950 -960) (330 270)) ) - net(35 + net(35 name($36) polygon(l2 (2575 3065) (0 340) (-105 0) (0 420) (525 0) (0 -760)) rect(l2 (-525 1670) (445 420)) polygon(l9 (-210 -1620) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480)) @@ -931,12 +931,12 @@ layout( rect(l22 (0 -270) (950 150)) rect(l22 (0 -840) (150 2010)) ) - net(36 + net(36 name($37) rect(l7 (3120 3965) (950 150)) rect(l7 (-1280 -150) (330 270)) rect(l7 (950 -960) (150 2010)) ) - net(37 + net(37 name($38) polygon(l2 (4755 3065) (0 340) (-105 0) (0 420) (525 0) (0 -760)) rect(l2 (-525 1670) (445 420)) polygon(l9 (-210 -1620) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480)) @@ -947,12 +947,12 @@ layout( rect(l22 (0 -270) (950 150)) rect(l22 (0 -840) (150 2010)) ) - net(38 + net(38 name($39) rect(l7 (5300 3965) (950 150)) rect(l7 (-1280 -150) (330 270)) rect(l7 (950 -960) (150 2010)) ) - net(39 + net(39 name($40) polygon(l2 (5725 3065) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) rect(l2 (-340 1670) (445 420)) polygon(l9 (-405 -1620) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570)) @@ -963,7 +963,7 @@ layout( rect(l22 (-1100 -1320) (150 2010)) rect(l22 (950 -960) (330 270)) ) - net(40 + net(40 name($41) polygon(l2 (6935 3065) (0 340) (-105 0) (0 420) (525 0) (0 -760)) rect(l2 (-525 1670) (445 420)) polygon(l9 (-210 -1620) (0 1570) (170 0) (0 -920) (245 0) (0 -170) (-245 0) (0 -480)) @@ -974,12 +974,12 @@ layout( rect(l22 (0 -270) (950 150)) rect(l22 (0 -840) (150 2010)) ) - net(41 + net(41 name($42) rect(l7 (7480 3965) (950 150)) rect(l7 (-1280 -150) (330 270)) rect(l7 (950 -960) (150 2010)) ) - net(42 + net(42 name($43) polygon(l2 (7905 3065) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) rect(l2 (-340 1670) (445 420)) polygon(l9 (-405 -1620) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570)) @@ -990,29 +990,29 @@ layout( rect(l22 (-1100 -1320) (150 2010)) rect(l22 (950 -960) (330 270)) ) - net(43 + net(43 name($44) polygon(l7 (265 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) ) - net(44 + net(44 name($45) polygon(l7 (6805 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) ) - net(45 + net(45 name($46) polygon(l7 (2445 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) ) - net(46 + net(46 name($47) polygon(l7 (4625 2915) (0 150) (690 0) (0 180) (270 0) (0 -180) (690 0) (0 -150)) ) - net(47 + net(47 name($49) rect(l7 (290 4445) (950 150)) rect(l7 (-1100 -1320) (150 2010)) rect(l7 (950 -960) (330 270)) ) - net(48 + net(48 name($50) rect(l7 (2470 4445) (950 150)) rect(l7 (-1100 -1320) (150 2010)) rect(l7 (950 -960) (330 270)) ) - net(49 + net(49 name($51) polygon(l2 (3545 3065) (0 760) (525 0) (0 -420) (-105 0) (0 -340)) rect(l2 (-340 1670) (445 420)) polygon(l9 (-405 -1620) (0 840) (-245 0) (0 170) (245 0) (0 560) (170 0) (0 -1570)) @@ -1023,12 +1023,12 @@ layout( rect(l22 (-1100 -1320) (150 2010)) rect(l22 (950 -960) (330 270)) ) - net(50 + net(50 name($52) rect(l7 (4650 4445) (950 150)) rect(l7 (-1100 -1320) (150 2010)) rect(l7 (950 -960) (330 270)) ) - net(51 + net(51 name($53) rect(l7 (6830 4445) (950 150)) rect(l7 (-1100 -1320) (150 2010)) rect(l7 (950 -960) (330 270)) From 3e3dcb757e68b0769439d86754de45937097312c Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sat, 17 May 2025 18:55:51 +0200 Subject: [PATCH 03/11] New golden test data --- testdata/lvs/ringo_simple_io2.lvsdb.2 | 908 ++++++++++++++++++++++++++ 1 file changed, 908 insertions(+) create mode 100644 testdata/lvs/ringo_simple_io2.lvsdb.2 diff --git a/testdata/lvs/ringo_simple_io2.lvsdb.2 b/testdata/lvs/ringo_simple_io2.lvsdb.2 new file mode 100644 index 000000000..94c1f9904 --- /dev/null +++ b/testdata/lvs/ringo_simple_io2.lvsdb.2 @@ -0,0 +1,908 @@ +#%lvsdb-klayout + +# Layout +layout( + top(RINGO) + unit(0.001) + + # Layer section + # This section lists the mask layers (drawing or derived) and their connections. + + # Mask layers + layer(l3 '1/0') + layer(l4 '5/0') + layer(l8 '8/0') + layer(l11 '9/0') + layer(l12 '10/0') + layer(l13 '11/0') + layer(l7) + layer(l2) + layer(l9) + layer(l6) + layer(l10) + + # Mask layer connectivity + connect(l3 l3 l9) + connect(l4 l4 l8) + connect(l8 l4 l8 l11 l2 l9 l6 l10) + connect(l11 l8 l11 l12) + connect(l12 l11 l12 l13) + connect(l13 l12 l13) + connect(l7 l7) + connect(l2 l8 l2) + connect(l9 l3 l8 l9) + connect(l6 l8 l6) + connect(l10 l8 l10) + + # Global nets and connectivity + global(l7 SUBSTRATE) + global(l10 SUBSTRATE) + + # Device class section + class(PMOS MOS4) + class(NMOS MOS4) + + # Device abstracts section + # Device abstracts list the pin shapes of the devices. + device(D$PMOS PMOS + terminal(S + rect(l2 (-550 -750) (425 1500)) + ) + terminal(G + rect(l4 (-125 -750) (250 1500)) + ) + terminal(D + rect(l2 (125 -750) (450 1500)) + ) + terminal(B + rect(l3 (-125 -750) (250 1500)) + ) + ) + device(D$PMOS$1 PMOS + terminal(S + rect(l2 (-575 -750) (450 1500)) + ) + terminal(G + rect(l4 (-125 -750) (250 1500)) + ) + terminal(D + rect(l2 (125 -750) (425 1500)) + ) + terminal(B + rect(l3 (-125 -750) (250 1500)) + ) + ) + device(D$PMOS$2 PMOS + terminal(S + rect(l2 (-550 -750) (425 1500)) + ) + terminal(G + rect(l4 (-125 -750) (250 1500)) + ) + terminal(D + rect(l2 (125 -750) (425 1500)) + ) + terminal(B + rect(l3 (-125 -750) (250 1500)) + ) + ) + device(D$NMOS NMOS + terminal(S + rect(l6 (-550 -475) (425 950)) + ) + terminal(G + rect(l4 (-125 -475) (250 950)) + ) + terminal(D + rect(l6 (125 -475) (450 950)) + ) + terminal(B + rect(l7 (-125 -475) (250 950)) + ) + ) + device(D$NMOS$1 NMOS + terminal(S + rect(l6 (-575 -475) (450 950)) + ) + terminal(G + rect(l4 (-125 -475) (250 950)) + ) + terminal(D + rect(l6 (125 -475) (425 950)) + ) + terminal(B + rect(l7 (-125 -475) (250 950)) + ) + ) + device(D$NMOS$2 NMOS + terminal(S + rect(l6 (-550 -475) (425 950)) + ) + terminal(G + rect(l4 (-125 -475) (250 950)) + ) + terminal(D + rect(l6 (125 -475) (425 950)) + ) + terminal(B + rect(l7 (-125 -475) (250 950)) + ) + ) + + # Circuit section + # Circuits are the hierarchical building blocks of the netlist. + circuit(ND2X1 + + # Circuit boundary + rect((-100 400) (2600 7600)) + + # Nets with their geometries + net(1 name(VDD) + rect(l8 (1110 5160) (180 180)) + rect(l8 (-180 920) (180 180)) + rect(l8 (-180 -730) (180 180)) + rect(l11 (-240 -790) (300 1700)) + rect(l11 (-1350 0) (2400 800)) + rect(l11 (-1150 -400) (0 0)) + rect(l2 (-275 -2150) (425 1500)) + rect(l2 (-400 -1500) (425 1500)) + ) + net(2 name(OUT) + rect(l8 (1810 1770) (180 180)) + rect(l8 (-180 370) (180 180)) + rect(l8 (-1580 3760) (180 180)) + rect(l8 (-180 -730) (180 180)) + rect(l8 (-180 -730) (180 180)) + rect(l8 (1220 920) (180 180)) + rect(l8 (-180 -1280) (180 180)) + rect(l8 (-180 370) (180 180)) + polygon(l11 (-240 -4180) (0 1390) (490 0) (0 -300) (-190 0) (0 -1090)) + rect(l11 (-110 1390) (300 1400)) + polygon(l11 (-1890 0) (0 600) (300 0) (0 -300) (1590 0) (0 -300)) + rect(l11 (-140 -500) (0 0)) + rect(l11 (-1750 1100) (300 1400)) + rect(l11 (1100 -1700) (300 300)) + rect(l11 (-300 0) (300 1400)) + rect(l2 (-375 -1450) (425 1500)) + rect(l2 (-1800 -1500) (425 1500)) + rect(l6 (950 -4890) (425 950)) + ) + net(3 name(VSS) + rect(l8 (410 1770) (180 180)) + rect(l8 (-180 370) (180 180)) + rect(l11 (-240 -1300) (300 1360)) + rect(l11 (-650 -2160) (2400 800)) + rect(l11 (-1150 -400) (0 0)) + rect(l6 (-950 860) (425 950)) + ) + net(4 + rect(l3 (-100 4500) (2600 3500)) + ) + net(5 name(B) + rect(l4 (1425 2860) (250 1940)) + rect(l4 (-345 -950) (300 300)) + rect(l4 (-205 650) (250 2000)) + rect(l4 (-250 -2000) (250 2000)) + rect(l4 (-250 -5390) (250 1450)) + rect(l8 (-285 1050) (180 180)) + rect(l11 (-70 -90) (0 0)) + rect(l11 (-170 -150) (300 300)) + ) + net(6 name(A) + rect(l4 (725 2860) (250 1940)) + rect(l4 (-325 -1850) (300 300)) + rect(l4 (-225 1550) (250 2000)) + rect(l4 (-250 -2000) (250 2000)) + rect(l4 (-250 -5390) (250 1450)) + rect(l8 (-265 150) (180 180)) + rect(l11 (-90 -90) (0 0)) + rect(l11 (-150 -150) (300 300)) + ) + net(7 name(SUBSTRATE)) + net(8 name($I5) + rect(l6 (975 1660) (425 950)) + rect(l6 (-400 -950) (425 950)) + ) + + # Outgoing pins and their connections to nets + pin(1 name(VDD)) + pin(2 name(OUT)) + pin(3 name(VSS)) + pin(4) + pin(5 name(B)) + pin(6 name(A)) + pin(7 name(SUBSTRATE)) + + # Devices and their connections + device(1 D$PMOS + location(850 5800) + param(L 0.25) + param(W 1.5) + param(AS 0.6375) + param(AD 0.3375) + param(PS 3.85) + param(PD 1.95) + terminal(S 2) + terminal(G 6) + terminal(D 1) + terminal(B 4) + ) + device(2 D$PMOS$1 + location(1550 5800) + param(L 0.25) + param(W 1.5) + param(AS 0.3375) + param(AD 0.6375) + param(PS 1.95) + param(PD 3.85) + terminal(S 1) + terminal(G 5) + terminal(D 2) + terminal(B 4) + ) + device(3 D$NMOS + location(850 2135) + param(L 0.25) + param(W 0.95) + param(AS 0.40375) + param(AD 0.21375) + param(PS 2.75) + param(PD 1.4) + terminal(S 3) + terminal(G 6) + terminal(D 8) + terminal(B 7) + ) + device(4 D$NMOS$1 + location(1550 2135) + param(L 0.25) + param(W 0.95) + param(AS 0.21375) + param(AD 0.40375) + param(PS 1.4) + param(PD 2.75) + terminal(S 8) + terminal(G 5) + terminal(D 2) + terminal(B 7) + ) + + ) + circuit(INVX1 + + # Circuit boundary + rect((-100 400) (2000 7600)) + + # Nets with their geometries + net(1 name(VDD) + rect(l8 (410 6260) (180 180)) + rect(l8 (-180 -730) (180 180)) + rect(l8 (-180 -730) (180 180)) + rect(l11 (-240 -240) (300 1400)) + rect(l11 (-650 300) (1800 800)) + rect(l11 (-1450 -1100) (300 300)) + rect(l11 (300 400) (0 0)) + rect(l2 (-650 -2150) (425 1500)) + ) + net(2 name(OUT) + rect(l8 (1110 5160) (180 180)) + rect(l8 (-180 920) (180 180)) + rect(l8 (-180 -730) (180 180)) + rect(l8 (-180 -4120) (180 180)) + rect(l8 (-180 370) (180 180)) + rect(l11 (-240 -790) (300 4790)) + rect(l11 (-150 -2500) (0 0)) + rect(l2 (-225 1050) (425 1500)) + rect(l6 (-425 -4890) (425 950)) + ) + net(3 name(VSS) + rect(l8 (410 1770) (180 180)) + rect(l8 (-180 370) (180 180)) + rect(l11 (-240 -1300) (300 1360)) + rect(l11 (-650 -2160) (1800 800)) + rect(l11 (-850 -400) (0 0)) + rect(l6 (-650 860) (425 950)) + ) + net(4 + rect(l3 (-100 4500) (2000 3500)) + ) + net(5 name(IN) + rect(l4 (725 2860) (250 1940)) + rect(l4 (-525 -1850) (300 300)) + rect(l4 (-25 1550) (250 2000)) + rect(l4 (-250 -2000) (250 2000)) + rect(l4 (-250 -5390) (250 1450)) + rect(l8 (-465 150) (180 180)) + rect(l11 (-90 -90) (0 0)) + rect(l11 (-150 -150) (300 300)) + ) + net(6 name(SUBSTRATE)) + + # Outgoing pins and their connections to nets + pin(1 name(VDD)) + pin(2 name(OUT)) + pin(3 name(VSS)) + pin(4) + pin(5 name(IN)) + pin(6 name(SUBSTRATE)) + + # Devices and their connections + device(1 D$PMOS$2 + location(850 5800) + param(L 0.25) + param(W 1.5) + param(AS 0.6375) + param(AD 0.6375) + param(PS 3.85) + param(PD 3.85) + terminal(S 1) + terminal(G 5) + terminal(D 2) + terminal(B 4) + ) + device(2 D$NMOS$2 + location(850 2135) + param(L 0.25) + param(W 0.95) + param(AS 0.40375) + param(AD 0.40375) + param(PS 2.75) + param(PD 2.75) + terminal(S 3) + terminal(G 5) + terminal(D 2) + terminal(B 6) + ) + + ) + circuit(RINGO + + # Circuit boundary + rect((0 350) (25800 7650)) + + # Nets with their geometries + net(1 + rect(l11 (4040 2950) (610 300)) + ) + net(2 + rect(l11 (5550 2950) (900 300)) + ) + net(3 + rect(l11 (7350 2950) (900 300)) + ) + net(4 + rect(l11 (9150 2950) (900 300)) + ) + net(5 + rect(l11 (10950 2950) (900 300)) + ) + net(6 + rect(l11 (12750 2950) (900 300)) + ) + net(7 + rect(l11 (14550 2950) (900 300)) + ) + net(8 + rect(l11 (16350 2950) (900 300)) + ) + net(9 + rect(l11 (18150 2950) (900 300)) + ) + net(10 + rect(l11 (19950 2950) (900 300)) + ) + net(11 name(FB) + rect(l11 (21750 2950) (900 300)) + rect(l11 (-19530 590) (320 320)) + rect(l11 (17820 -320) (320 320)) + rect(l12 (-18400 -260) (200 200)) + rect(l12 (17940 -200) (200 200)) + rect(l13 (-18040 -300) (17740 400)) + rect(l13 (-17920 -200) (0 0)) + rect(l13 (-220 -200) (400 400)) + rect(l13 (17740 -400) (400 400)) + ) + net(12 name(VDD) + rect(l3 (500 4500) (1400 3500)) + rect(l3 (-1900 -3500) (600 3500)) + rect(l3 (23300 -3500) (1400 3500)) + rect(l3 (-100 -3500) (600 3500)) + rect(l8 (-24690 -1240) (180 180)) + rect(l8 (-180 370) (180 180)) + rect(l8 (-180 -1280) (180 180)) + rect(l8 (23220 370) (180 180)) + rect(l8 (-180 370) (180 180)) + rect(l8 (-180 -1280) (180 180)) + rect(l11 (-21740 860) (0 0)) + rect(l11 (-2350 -450) (1200 800)) + rect(l11 (-750 -1450) (300 1400)) + rect(l11 (-100 -350) (0 0)) + rect(l11 (-1250 -400) (600 800)) + rect(l11 (23400 -800) (1200 800)) + rect(l11 (-750 -1450) (300 1400)) + rect(l11 (-100 -350) (0 0)) + rect(l11 (550 -400) (600 800)) + rect(l9 (-24850 -1500) (500 1500)) + rect(l9 (22900 -1500) (500 1500)) + ) + net(13 name(OUT) + rect(l11 (23440 3840) (320 320)) + rect(l12 (-260 -260) (200 200)) + rect(l13 (-100 -100) (0 0)) + rect(l13 (-200 -200) (400 400)) + ) + net(14 name(ENABLE) + rect(l11 (2440 2940) (320 320)) + rect(l12 (-260 -260) (200 200)) + rect(l13 (-100 -100) (0 0)) + rect(l13 (-200 -200) (400 400)) + ) + net(15 name(VSS) + rect(l8 (1110 1610) (180 180)) + rect(l8 (-180 -1280) (180 180)) + rect(l8 (-180 370) (180 180)) + rect(l8 (23220 370) (180 180)) + rect(l8 (-180 -1280) (180 180)) + rect(l8 (-180 370) (180 180)) + rect(l11 (-21740 -390) (0 0)) + rect(l11 (-1900 -400) (300 1400)) + rect(l11 (-750 -1450) (1200 800)) + rect(l11 (-550 -400) (0 0)) + rect(l11 (-1250 -400) (600 800)) + rect(l11 (23850 -750) (300 1400)) + rect(l11 (-750 -1450) (1200 800)) + rect(l11 (-550 -400) (0 0)) + rect(l11 (550 -400) (600 800)) + rect(l10 (-24850 -800) (500 1500)) + rect(l10 (22900 -1500) (500 1500)) + ) + + # Outgoing pins and their connections to nets + pin(11 name(FB)) + pin(12 name(VDD)) + pin(13 name(OUT)) + pin(14 name(ENABLE)) + pin(15 name(VSS)) + + # Subcircuits and their connections + circuit(1 ND2X1 location(1800 0) + pin(0 12) + pin(1 1) + pin(2 15) + pin(3 12) + pin(4 11) + pin(5 14) + pin(6 15) + ) + circuit(2 INVX1 location(4200 0) + pin(0 12) + pin(1 2) + pin(2 15) + pin(3 12) + pin(4 1) + pin(5 15) + ) + circuit(3 INVX1 location(6000 0) + pin(0 12) + pin(1 3) + pin(2 15) + pin(3 12) + pin(4 2) + pin(5 15) + ) + circuit(4 INVX1 location(7800 0) + pin(0 12) + pin(1 4) + pin(2 15) + pin(3 12) + pin(4 3) + pin(5 15) + ) + circuit(5 INVX1 location(9600 0) + pin(0 12) + pin(1 5) + pin(2 15) + pin(3 12) + pin(4 4) + pin(5 15) + ) + circuit(6 INVX1 location(11400 0) + pin(0 12) + pin(1 6) + pin(2 15) + pin(3 12) + pin(4 5) + pin(5 15) + ) + circuit(7 INVX1 location(13200 0) + pin(0 12) + pin(1 7) + pin(2 15) + pin(3 12) + pin(4 6) + pin(5 15) + ) + circuit(8 INVX1 location(15000 0) + pin(0 12) + pin(1 8) + pin(2 15) + pin(3 12) + pin(4 7) + pin(5 15) + ) + circuit(9 INVX1 location(16800 0) + pin(0 12) + pin(1 9) + pin(2 15) + pin(3 12) + pin(4 8) + pin(5 15) + ) + circuit(10 INVX1 location(18600 0) + pin(0 12) + pin(1 10) + pin(2 15) + pin(3 12) + pin(4 9) + pin(5 15) + ) + circuit(11 INVX1 location(20400 0) + pin(0 12) + pin(1 11) + pin(2 15) + pin(3 12) + pin(4 10) + pin(5 15) + ) + circuit(12 INVX1 location(22200 0) + pin(0 12) + pin(1 13) + pin(2 15) + pin(3 12) + pin(4 11) + pin(5 15) + ) + + ) +) + +# Reference netlist +reference( + + # Device class section + class(PMOS MOS4) + class(NMOS MOS4) + + # Circuit section + # Circuits are the hierarchical building blocks of the netlist. + circuit(ND2X1 + + # Nets + net(1 name(VDD)) + net(2 name(OUT)) + net(3 name(VSS)) + net(4 name(NWELL)) + net(5 name(B)) + net(6 name(A)) + net(7 name(BULK)) + net(8 name('1')) + + # Outgoing pins and their connections to nets + pin(1 name(VDD)) + pin(2 name(OUT)) + pin(3 name(VSS)) + pin(4 name(NWELL)) + pin(5 name(B)) + pin(6 name(A)) + pin(7 name(BULK)) + + # Devices and their connections + device(1 PMOS + name($1) + param(L 0.25) + param(W 1.5) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 1) + terminal(G 6) + terminal(D 2) + terminal(B 4) + ) + device(2 PMOS + name($2) + param(L 0.25) + param(W 1.5) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 1) + terminal(G 5) + terminal(D 2) + terminal(B 4) + ) + device(3 NMOS + name($3) + param(L 0.25) + param(W 0.95) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 3) + terminal(G 6) + terminal(D 8) + terminal(B 7) + ) + device(4 NMOS + name($4) + param(L 0.25) + param(W 0.95) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 8) + terminal(G 5) + terminal(D 2) + terminal(B 7) + ) + + ) + circuit(INVX1 + + # Nets + net(1 name(VDD)) + net(2 name(OUT)) + net(3 name(VSS)) + net(4 name(NWELL)) + net(5 name(IN)) + net(6 name(BULK)) + + # Outgoing pins and their connections to nets + pin(1 name(VDD)) + pin(2 name(OUT)) + pin(3 name(VSS)) + pin(4 name(NWELL)) + pin(5 name(IN)) + pin(6 name(BULK)) + + # Devices and their connections + device(1 PMOS + name($1) + param(L 0.25) + param(W 1.5) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 1) + terminal(G 5) + terminal(D 2) + terminal(B 4) + ) + device(2 NMOS + name($2) + param(L 0.25) + param(W 0.95) + param(AS 0) + param(AD 0) + param(PS 0) + param(PD 0) + terminal(S 3) + terminal(G 5) + terminal(D 2) + terminal(B 6) + ) + + ) + circuit(RINGO + + # Nets + net(1 name(VSS)) + net(2 name(VDD)) + net(3 name(FB)) + net(4 name(ENABLE)) + net(5 name(OUT)) + net(6 name('1')) + net(7 name('2')) + net(8 name('3')) + net(9 name('4')) + net(10 name('5')) + net(11 name('6')) + net(12 name('7')) + net(13 name('8')) + net(14 name('9')) + net(15 name('10')) + + # Outgoing pins and their connections to nets + pin(1 name(VSS)) + pin(2 name(VDD)) + pin(3 name(FB)) + pin(4 name(ENABLE)) + pin(5 name(OUT)) + + # Subcircuits and their connections + circuit(1 ND2X1 name($1) + pin(0 2) + pin(1 6) + pin(2 1) + pin(3 2) + pin(4 3) + pin(5 4) + pin(6 1) + ) + circuit(2 INVX1 name($2) + pin(0 2) + pin(1 7) + pin(2 1) + pin(3 2) + pin(4 6) + pin(5 1) + ) + circuit(3 INVX1 name($3) + pin(0 2) + pin(1 8) + pin(2 1) + pin(3 2) + pin(4 7) + pin(5 1) + ) + circuit(4 INVX1 name($4) + pin(0 2) + pin(1 9) + pin(2 1) + pin(3 2) + pin(4 8) + pin(5 1) + ) + circuit(5 INVX1 name($5) + pin(0 2) + pin(1 10) + pin(2 1) + pin(3 2) + pin(4 9) + pin(5 1) + ) + circuit(6 INVX1 name($6) + pin(0 2) + pin(1 11) + pin(2 1) + pin(3 2) + pin(4 10) + pin(5 1) + ) + circuit(7 INVX1 name($7) + pin(0 2) + pin(1 12) + pin(2 1) + pin(3 2) + pin(4 11) + pin(5 1) + ) + circuit(8 INVX1 name($8) + pin(0 2) + pin(1 13) + pin(2 1) + pin(3 2) + pin(4 12) + pin(5 1) + ) + circuit(9 INVX1 name($9) + pin(0 2) + pin(1 14) + pin(2 1) + pin(3 2) + pin(4 13) + pin(5 1) + ) + circuit(10 INVX1 name($10) + pin(0 2) + pin(1 15) + pin(2 1) + pin(3 2) + pin(4 14) + pin(5 1) + ) + circuit(11 INVX1 name($11) + pin(0 2) + pin(1 3) + pin(2 1) + pin(3 2) + pin(4 15) + pin(5 1) + ) + circuit(12 INVX1 name($12) + pin(0 2) + pin(1 5) + pin(2 1) + pin(3 2) + pin(4 3) + pin(5 1) + ) + + ) +) + +# Cross reference +xref( + circuit(INVX1 INVX1 match + xref( + net(4 4 match) + net(5 5 match) + net(2 2 match) + net(6 6 match) + net(1 1 match) + net(3 3 match) + pin(3 3 match) + pin(4 4 match) + pin(1 1 match) + pin(5 5 match) + pin(0 0 match) + pin(2 2 match) + device(2 2 match) + device(1 1 match) + ) + ) + circuit(ND2X1 ND2X1 match + xref( + net(8 8 match) + net(4 4 match) + net(6 6 match) + net(5 5 match) + net(2 2 match) + net(7 7 match) + net(1 1 match) + net(3 3 match) + pin(3 3 match) + pin(5 5 match) + pin(4 4 match) + pin(1 1 match) + pin(6 6 match) + pin(0 0 match) + pin(2 2 match) + device(3 3 match) + device(4 4 match) + device(1 1 match) + device(2 2 match) + ) + ) + circuit(RINGO RINGO match + xref( + net(1 6 match) + net(10 15 match) + net(2 7 match) + net(3 8 match) + net(4 9 match) + net(5 10 match) + net(6 11 match) + net(7 12 match) + net(8 13 match) + net(9 14 match) + net(14 4 match) + net(11 3 match) + net(13 5 match) + net(12 2 match) + net(15 1 match) + pin(3 3 match) + pin(0 2 match) + pin(2 4 match) + pin(1 1 match) + pin(4 0 match) + circuit(2 2 match) + circuit(3 3 match) + circuit(4 4 match) + circuit(5 5 match) + circuit(6 6 match) + circuit(7 7 match) + circuit(8 8 match) + circuit(9 9 match) + circuit(10 10 match) + circuit(11 11 match) + circuit(12 12 match) + circuit(1 1 match) + ) + ) +) From 8222085efe155d4cff6393f925e1b21fa3d9a9ed Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sun, 18 May 2025 17:08:35 +0200 Subject: [PATCH 04/11] Fixing tests on Windows --- testdata/lvs/ringo_simple_io2.l2n.2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testdata/lvs/ringo_simple_io2.l2n.2 b/testdata/lvs/ringo_simple_io2.l2n.2 index d0a07ab94..871a19bb3 100644 --- a/testdata/lvs/ringo_simple_io2.l2n.2 +++ b/testdata/lvs/ringo_simple_io2.l2n.2 @@ -175,7 +175,7 @@ X(ND2X1 R(l11 (-150 -150) (300 300)) ) N(7 I(SUBSTRATE)) - N(8 I($I3) + N(8 I($I5) R(l6 (975 1660) (425 950)) R(l6 (-400 -950) (425 950)) ) From 90c4f654b612714846f382d187acf041d4bb8f14 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Thu, 22 May 2025 19:57:06 +0200 Subject: [PATCH 05/11] API for adding log entries to LVS and L2N databases --- src/db/db/gsiDeclDbLayoutToNetlist.cc | 8 ++++++++ testdata/ruby/dbLayoutToNetlist.rb | 17 +++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/src/db/db/gsiDeclDbLayoutToNetlist.cc b/src/db/db/gsiDeclDbLayoutToNetlist.cc index c3a565c50..b30450327 100644 --- a/src/db/db/gsiDeclDbLayoutToNetlist.cc +++ b/src/db/db/gsiDeclDbLayoutToNetlist.cc @@ -1118,6 +1118,14 @@ Class decl_dbLayoutToNetlist ("db", "LayoutToNetlist", "@brief Reads the extracted netlist from the file.\n" "This method employs the native format of KLayout.\n" ) + + gsi::method ("clear_log_entries", &db::LayoutToNetlist::clear_log_entries, + "@brief Clears the log entries.\n" + "This method has been introduced in version 0.30.2" + ) + + gsi::method ("add_log_entry", &db::LayoutToNetlist::log_entry, gsi::arg ("entry"), + "@brief Adds a log entry.\n" + "This method has been introduced in version 0.30.2" + ) + gsi::iterator ("each_log_entry|#each_error", &db::LayoutToNetlist::begin_log_entries, &db::LayoutToNetlist::end_log_entries, "@brief Iterates over all log entries collected during device and netlist extraction.\n" "This method has been introduced in version 0.28.13." diff --git a/testdata/ruby/dbLayoutToNetlist.rb b/testdata/ruby/dbLayoutToNetlist.rb index 30408b611..4ecf8765f 100644 --- a/testdata/ruby/dbLayoutToNetlist.rb +++ b/testdata/ruby/dbLayoutToNetlist.rb @@ -1121,6 +1121,23 @@ END assert_equal(le[2].to_s, "warning") assert_equal(le[3].to_s, "error") + le = RBA::LogEntryData::new + le.severity = RBA::LogEntryData::Error + le.message = "A new entry" + le.geometry = RBA::DPolygon::new(RBA::DBox::new(0, 1, 2, 3)) + le.cell_name = "MYCELL" + le.category_name = "CAT" + le.category_description = "Cat Desc" + l2n.add_log_entry(le) + + le = l2n.each_log_entry.collect { |s| s.to_s } + assert_equal(le.size, 5) + assert_equal(le[4].to_s, "[Cat Desc] In cell MYCELL: A new entry, shape: (0,1;0,3;2,3;2,1)") + + l2n.clear_log_entries + le = l2n.each_log_entry.collect { |s| s.to_s } + assert_equal(le.size, 0) + end def test_22_Layers From 57c2add00a06c56f44a8ed2c874144ffa22b29ab Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Thu, 22 May 2025 20:54:21 +0200 Subject: [PATCH 06/11] API enhancement for NetlistCrossReference: obtaining information from one object only (net, circuit), does not need a pair anymore --- src/db/db/dbNetlistCrossReference.cc | 18 +++ src/db/db/dbNetlistCrossReference.h | 1 + src/db/db/gsiDeclDbNetlistCrossReference.cc | 133 ++++++++++++++++++++ testdata/ruby/dbNetlistCrossReference.rb | 84 +++++++++++++ 4 files changed, 236 insertions(+) diff --git a/src/db/db/dbNetlistCrossReference.cc b/src/db/db/dbNetlistCrossReference.cc index fb22eeb85..eb3f82a6d 100644 --- a/src/db/db/dbNetlistCrossReference.cc +++ b/src/db/db/dbNetlistCrossReference.cc @@ -111,6 +111,24 @@ NetlistCrossReference::other_net_for (const db::Net *net) const } } +const NetlistCrossReference::PerNetData * +NetlistCrossReference::per_net_data_for_net (const db::Net *net) const +{ + const db::Net *other_net = other_net_for (net); + + std::map, PerNetData>::iterator i = m_per_net_data.find (std::make_pair (net, other_net)); + if (i == m_per_net_data.end ()) { + i = m_per_net_data.find (std::make_pair (other_net, net)); + } + + if (i == m_per_net_data.end ()) { + static const NetlistCrossReference::PerNetData empty_net_data; + return &empty_net_data; + } else { + return &i->second; + } +} + const NetlistCrossReference::PerNetData * NetlistCrossReference::per_net_data_for (const std::pair &nets) const { diff --git a/src/db/db/dbNetlistCrossReference.h b/src/db/db/dbNetlistCrossReference.h index c06c43ba9..17138ca15 100644 --- a/src/db/db/dbNetlistCrossReference.h +++ b/src/db/db/dbNetlistCrossReference.h @@ -280,6 +280,7 @@ public: const db::SubCircuit *other_subcircuit_for (const db::SubCircuit *subcircuit) const; const db::Circuit *other_circuit_for (const db::Circuit *circuit) const; const db::Net *other_net_for (const db::Net *net) const; + const PerNetData *per_net_data_for_net (const db::Net *net) const; const PerNetData *per_net_data_for (const std::pair &nets) const; const db::Netlist *netlist_a () const diff --git a/src/db/db/gsiDeclDbNetlistCrossReference.cc b/src/db/db/gsiDeclDbNetlistCrossReference.cc index bc847f833..467b2c828 100644 --- a/src/db/db/gsiDeclDbNetlistCrossReference.cc +++ b/src/db/db/gsiDeclDbNetlistCrossReference.cc @@ -287,6 +287,19 @@ static pair_data_iterator each_net_pair1 (db::NetlistCrossReference *xref, const db::Circuit *circuit) +{ + tl_assert (xref->netlist_a () != 0 && xref->netlist_b () != 0); + typedef pair_data_iterator iter_type; + + const db::NetlistCrossReference::PerCircuitData *data = xref->per_circuit_data_for (std::make_pair (circuit, circuit)); + if (! data) { + return iter_type (); + } else { + return iter_type (xref, data->nets.begin (), data->nets.end ()); + } +} + static pair_data_iterator each_device_pair (db::NetlistCrossReference *xref, const CircuitPairData &circuit_pair) { tl_assert (xref->netlist_a () != 0 && xref->netlist_b () != 0); @@ -300,6 +313,19 @@ static pair_data_iterator each_device_pair1 (db::NetlistCrossReference *xref, const db::Circuit *circuit) +{ + tl_assert (xref->netlist_a () != 0 && xref->netlist_b () != 0); + typedef pair_data_iterator iter_type; + + const db::NetlistCrossReference::PerCircuitData *data = xref->per_circuit_data_for (std::make_pair (circuit, circuit)); + if (! data) { + return iter_type (); + } else { + return iter_type (xref, data->devices.begin (), data->devices.end ()); + } +} + static pair_data_iterator each_pin_pair (db::NetlistCrossReference *xref, const CircuitPairData &circuit_pair) { tl_assert (xref->netlist_a () != 0 && xref->netlist_b () != 0); @@ -313,6 +339,19 @@ static pair_data_iterator each_pin_pair1 (db::NetlistCrossReference *xref, const db::Circuit *circuit) +{ + tl_assert (xref->netlist_a () != 0 && xref->netlist_b () != 0); + typedef pair_data_iterator iter_type; + + const db::NetlistCrossReference::PerCircuitData *data = xref->per_circuit_data_for (std::make_pair (circuit, circuit)); + if (! data) { + return iter_type (); + } else { + return iter_type (xref, data->pins.begin (), data->pins.end ()); + } +} + static pair_data_iterator each_subcircuit_pair (db::NetlistCrossReference *xref, const CircuitPairData &circuit_pair) { tl_assert (xref->netlist_a () != 0 && xref->netlist_b () != 0); @@ -326,6 +365,19 @@ static pair_data_iterator each_subcircuit_pair1 (db::NetlistCrossReference *xref, const db::Circuit *circuit) +{ + tl_assert (xref->netlist_a () != 0 && xref->netlist_b () != 0); + typedef pair_data_iterator iter_type; + + const db::NetlistCrossReference::PerCircuitData *data = xref->per_circuit_data_for (std::make_pair (circuit, circuit)); + if (! data) { + return iter_type (); + } else { + return iter_type (xref, data->subcircuits.begin (), data->subcircuits.end ()); + } +} + static pair_data_iterator, db::NetlistCrossReference::PerNetData::terminal_pairs_const_iterator> each_net_terminal_pair (db::NetlistCrossReference *xref, const db::NetlistCrossReference::NetPairData &net_pair) { tl_assert (xref->netlist_a () != 0 && xref->netlist_b () != 0); @@ -339,6 +391,19 @@ static pair_data_iterator, db::NetlistCrossReference::PerNetData::terminal_pairs_const_iterator> each_net_terminal_pair1 (db::NetlistCrossReference *xref, const db::Net *net) +{ + tl_assert (xref->netlist_a () != 0 && xref->netlist_b () != 0); + typedef pair_data_iterator, db::NetlistCrossReference::PerNetData::terminal_pairs_const_iterator> iter_type; + + const db::NetlistCrossReference::PerNetData *data = xref->per_net_data_for_net (net); + if (! data) { + return iter_type (); + } else { + return iter_type (xref, data->terminals.begin (), data->terminals.end ()); + } +} + static pair_data_iterator, db::NetlistCrossReference::PerNetData::pin_pairs_const_iterator> each_net_pin_pair (db::NetlistCrossReference *xref, const db::NetlistCrossReference::NetPairData &net_pair) { tl_assert (xref->netlist_a () != 0 && xref->netlist_b () != 0); @@ -352,6 +417,19 @@ static pair_data_iterator, db::NetlistCrossReference::PerNetData::pin_pairs_const_iterator> each_net_pin_pair1 (db::NetlistCrossReference *xref, const db::Net *net) +{ + tl_assert (xref->netlist_a () != 0 && xref->netlist_b () != 0); + typedef pair_data_iterator, db::NetlistCrossReference::PerNetData::pin_pairs_const_iterator> iter_type; + + const db::NetlistCrossReference::PerNetData *data = xref->per_net_data_for_net (net); + if (! data) { + return iter_type (); + } else { + return iter_type (xref, data->pins.begin (), data->pins.end ()); + } +} + static pair_data_iterator, db::NetlistCrossReference::PerNetData::subcircuit_pin_pairs_const_iterator> each_net_subcircuit_pin_pair (db::NetlistCrossReference *xref, const db::NetlistCrossReference::NetPairData &net_pair) { tl_assert (xref->netlist_a () != 0 && xref->netlist_b () != 0); @@ -365,6 +443,19 @@ static pair_data_iterator, db::NetlistCrossReference::PerNetData::subcircuit_pin_pairs_const_iterator> each_net_subcircuit_pin_pair1 (db::NetlistCrossReference *xref, const db::Net *net) +{ + tl_assert (xref->netlist_a () != 0 && xref->netlist_b () != 0); + typedef pair_data_iterator, db::NetlistCrossReference::PerNetData::subcircuit_pin_pairs_const_iterator> iter_type; + + const db::NetlistCrossReference::PerNetData *data = xref->per_net_data_for_net (net); + if (! data) { + return iter_type (); + } else { + return iter_type (xref, data->subcircuit_pins.begin (), data->subcircuit_pins.end ()); + } +} + Class decl_dbNetlistCrossReference (decl_dbNetlistCompareLogger, "db", "NetlistCrossReference", gsi::iterator_ext ("each_circuit_pair", &each_circuit_pair, "@brief Delivers the circuit pairs and their status.\n" @@ -374,30 +465,72 @@ Class decl_dbNetlistCrossReference (decl_dbNetlistCom "@brief Delivers the net pairs and their status for the given circuit pair.\n" "See the class description for details." ) + + gsi::iterator_ext ("each_net_pair", &each_net_pair1, gsi::arg ("circuit"), + "@brief Delivers the net pairs and their status for the given circuit.\n" + "This convenience method looks up the circuit pair from the given circuit. This circuit can be " + "a schematic or layout circuit.\n" + "This method has been added in version 0.30.2.\n" + ) + gsi::iterator_ext ("each_device_pair", &each_device_pair, gsi::arg ("circuit_pair"), "@brief Delivers the device pairs and their status for the given circuit pair.\n" "See the class description for details." ) + + gsi::iterator_ext ("each_device_pair", &each_device_pair1, gsi::arg ("circuit"), + "@brief Delivers the device pairs and their status for the given circuit pair.\n" + "This convenience method looks up the circuit pair from the given circuit. This circuit can be " + "a schematic or layout circuit.\n" + "This method has been added in version 0.30.2.\n" + ) + gsi::iterator_ext ("each_pin_pair", &each_pin_pair, gsi::arg ("circuit_pair"), "@brief Delivers the pin pairs and their status for the given circuit pair.\n" "See the class description for details." ) + + gsi::iterator_ext ("each_pin_pair", &each_pin_pair1, gsi::arg ("circuit"), + "@brief Delivers the pin pairs and their status for the given circuit pair.\n" + "This convenience method looks up the circuit pair from the given circuit. This circuit can be " + "a schematic or layout circuit.\n" + "This method has been added in version 0.30.2.\n" + ) + gsi::iterator_ext ("each_subcircuit_pair", &each_subcircuit_pair, gsi::arg ("circuit_pair"), "@brief Delivers the subcircuit pairs and their status for the given circuit pair.\n" "See the class description for details." ) + + gsi::iterator_ext ("each_subcircuit_pair", &each_subcircuit_pair1, gsi::arg ("circuit"), + "@brief Delivers the subcircuit pairs and their status for the given circuit pair.\n" + "This convenience method looks up the circuit pair from the given circuit. This circuit can be " + "a schematic or layout circuit.\n" + "This method has been added in version 0.30.2.\n" + ) + gsi::iterator_ext ("each_net_terminal_pair", &each_net_terminal_pair, gsi::arg ("net_pair"), "@brief Delivers the device terminal pairs for the given net pair.\n" "For the net pair, lists the device terminal pairs identified on this net." ) + + gsi::iterator_ext ("each_net_terminal_pair", &each_net_terminal_pair1, gsi::arg ("net"), + "@brief Delivers the device terminal pairs for the given net pair.\n" + "This convenience method looks up the net pair from the given net. This net can be " + "a schematic or layout net.\n" + "This method has been added in version 0.30.2.\n" + ) + gsi::iterator_ext ("each_net_pin_pair", &each_net_pin_pair, gsi::arg ("net_pair"), "@brief Delivers the pin pairs for the given net pair.\n" "For the net pair, lists the pin pairs identified on this net." ) + + gsi::iterator_ext ("each_net_pin_pair", &each_net_pin_pair1, gsi::arg ("net"), + "@brief Delivers the pin pairs for the given net pair.\n" + "This convenience method looks up the net pair from the given net. This net can be " + "a schematic or layout net.\n" + "This method has been added in version 0.30.2.\n" + ) + gsi::iterator_ext ("each_net_subcircuit_pin_pair", &each_net_subcircuit_pin_pair, gsi::arg ("net_pair"), "@brief Delivers the subcircuit pin pairs for the given net pair.\n" "For the net pair, lists the subcircuit pin pairs identified on this net." ) + + gsi::iterator_ext ("each_net_subcircuit_pin_pair", &each_net_subcircuit_pin_pair1, gsi::arg ("net"), + "@brief Delivers the subcircuit pin pairs for the given net pair.\n" + "This convenience method looks up the net pair from the given net. This net can be " + "a schematic or layout net.\n" + "This method has been added in version 0.30.2.\n" + ) + gsi::method ("other_net_for", &db::NetlistCrossReference::other_net_for, gsi::arg ("net"), "@brief Gets the matching other net for a given primary net.\n" "The return value will be nil if no match is found. " diff --git a/testdata/ruby/dbNetlistCrossReference.rb b/testdata/ruby/dbNetlistCrossReference.rb index 7da53e295..22de8dd35 100644 --- a/testdata/ruby/dbNetlistCrossReference.rb +++ b/testdata/ruby/dbNetlistCrossReference.rb @@ -81,12 +81,36 @@ class DBNetlistCrossReference_TestClass < TestBase end assert_equal(info.join(","), "/1:Match,BULK/6:Match,IN/2:Match,OUT/3:Match,VDD/5:Match,VSS/4:Match") + info = [] + xref.each_pin_pair(cp_inv2.first) do |p| + info << [ p.first, p.second ].collect { |s| s ? s.name : "(nil)" }.join("/") + ":" + p.status.to_s + end + assert_equal(info.join(","), "/1:Match,BULK/6:Match,IN/2:Match,OUT/3:Match,VDD/5:Match,VSS/4:Match") + + info = [] + xref.each_pin_pair(cp_inv2.second) do |p| + info << [ p.first, p.second ].collect { |s| s ? s.name : "(nil)" }.join("/") + ":" + p.status.to_s + end + assert_equal(info.join(","), "/1:Match,BULK/6:Match,IN/2:Match,OUT/3:Match,VDD/5:Match,VSS/4:Match") + info = [] xref.each_net_pair(cp_inv2) do |p| info << [ p.first, p.second ].collect { |s| s ? s.name : "(nil)" }.join("/") + ":" + p.status.to_s end assert_equal(info.join(","), "/1:Match,BULK/6:Match,IN/2:Match,OUT/3:Match,VDD/5:Match,VSS/4:Match") + info = [] + xref.each_net_pair(cp_inv2.first) do |p| + info << [ p.first, p.second ].collect { |s| s ? s.name : "(nil)" }.join("/") + ":" + p.status.to_s + end + assert_equal(info.join(","), "/1:Match,BULK/6:Match,IN/2:Match,OUT/3:Match,VDD/5:Match,VSS/4:Match") + + info = [] + xref.each_net_pair(cp_inv2.second) do |p| + info << [ p.first, p.second ].collect { |s| s ? s.name : "(nil)" }.join("/") + ":" + p.status.to_s + end + assert_equal(info.join(","), "/1:Match,BULK/6:Match,IN/2:Match,OUT/3:Match,VDD/5:Match,VSS/4:Match") + netp_bulk = nil xref.each_net_pair(cp_inv2) do |p| if p.first.name == "BULK" @@ -100,30 +124,90 @@ class DBNetlistCrossReference_TestClass < TestBase end assert_equal(info.join(","), "B/B") + info = [] + xref.each_net_terminal_pair(netp_bulk.first) do |p| + info << [ p.first, p.second ].collect { |s| s ? s.terminal_def.name : "(nil)" }.join("/") + end + assert_equal(info.join(","), "B/B") + + info = [] + xref.each_net_terminal_pair(netp_bulk.second) do |p| + info << [ p.first, p.second ].collect { |s| s ? s.terminal_def.name : "(nil)" }.join("/") + end + assert_equal(info.join(","), "B/B") + info = [] xref.each_net_pin_pair(netp_bulk) do |p| info << [ p.first, p.second ].collect { |s| s ? s.pin.name : "(nil)" }.join("/") end assert_equal(info.join(","), "BULK/6") + info = [] + xref.each_net_pin_pair(netp_bulk.first) do |p| + info << [ p.first, p.second ].collect { |s| s ? s.pin.name : "(nil)" }.join("/") + end + assert_equal(info.join(","), "BULK/6") + + info = [] + xref.each_net_pin_pair(netp_bulk.second) do |p| + info << [ p.first, p.second ].collect { |s| s ? s.pin.name : "(nil)" }.join("/") + end + assert_equal(info.join(","), "BULK/6") + info = [] xref.each_net_subcircuit_pin_pair(netp_bulk) do |p| info << [ p.first, p.second ].collect { |s| s ? s.pin.name : "(nil)" }.join("/") end assert_equal(info.join(","), "") + info = [] + xref.each_net_subcircuit_pin_pair(netp_bulk.first) do |p| + info << [ p.first, p.second ].collect { |s| s ? s.pin.name : "(nil)" }.join("/") + end + assert_equal(info.join(","), "") + + info = [] + xref.each_net_subcircuit_pin_pair(netp_bulk.second) do |p| + info << [ p.first, p.second ].collect { |s| s ? s.pin.name : "(nil)" }.join("/") + end + assert_equal(info.join(","), "") + info = [] xref.each_device_pair(cp_inv2) do |p| info << [ p.first, p.second ].collect { |s| s ? s.name : "(nil)" }.join("/") + ":" + p.status.to_s end assert_equal(info.join(","), "/$1:Match,/$3:Match") + info = [] + xref.each_device_pair(cp_inv2.first) do |p| + info << [ p.first, p.second ].collect { |s| s ? s.name : "(nil)" }.join("/") + ":" + p.status.to_s + end + assert_equal(info.join(","), "/$1:Match,/$3:Match") + + info = [] + xref.each_device_pair(cp_inv2.second) do |p| + info << [ p.first, p.second ].collect { |s| s ? s.name : "(nil)" }.join("/") + ":" + p.status.to_s + end + assert_equal(info.join(","), "/$1:Match,/$3:Match") + info = [] xref.each_subcircuit_pair(cp_inv2) do |p| info << [ p.first, p.second ].collect { |s| s ? s.name : "(nil)" }.join("/") + ":" + p.status.to_s end assert_equal(info.join(","), "") + info = [] + xref.each_subcircuit_pair(cp_inv2.first) do |p| + info << [ p.first, p.second ].collect { |s| s ? s.name : "(nil)" }.join("/") + ":" + p.status.to_s + end + assert_equal(info.join(","), "") + + info = [] + xref.each_subcircuit_pair(cp_inv2.second) do |p| + info << [ p.first, p.second ].collect { |s| s ? s.name : "(nil)" }.join("/") + ":" + p.status.to_s + end + assert_equal(info.join(","), "") + cp_inv2pair = nil xref.each_circuit_pair do |cp| if cp.first && cp.first.name == "INV2PAIR" From e96f20a1064840146f06c45dfe4abe3782607e40 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Thu, 22 May 2025 22:25:49 +0200 Subject: [PATCH 07/11] Introducing case sensitivity in circuit and netlist queries, makeing 'same_nets' more case sensitivity-aware in case of mixed sensitivity --- src/db/db/gsiDeclDbNetlist.cc | 78 ++++++++++++++-------- src/lvs/lvs/built-in-macros/_lvs_netter.rb | 8 +-- testdata/ruby/dbNetlist.rb | 32 +++++++++ 3 files changed, 88 insertions(+), 30 deletions(-) diff --git a/src/db/db/gsiDeclDbNetlist.cc b/src/db/db/gsiDeclDbNetlist.cc index 05e2c85bc..792d65d15 100644 --- a/src/db/db/gsiDeclDbNetlist.cc +++ b/src/db/db/gsiDeclDbNetlist.cc @@ -1488,7 +1488,7 @@ nets_non_const (const std::vector &nc) } static std::vector -nets_by_name_const (const db::Circuit *circuit, const std::string &name_pattern) +nets_by_name_const (const db::Circuit *circuit, const std::string &name_pattern, const tl::Variant &cs) { std::vector res; if (! circuit) { @@ -1496,7 +1496,9 @@ nets_by_name_const (const db::Circuit *circuit, const std::string &name_pattern) } tl::GlobPattern glob (name_pattern); - if (circuit->netlist ()) { + if (! cs.is_nil ()) { + glob.set_case_sensitive (cs.to_bool ()); + } else if (circuit->netlist ()) { glob.set_case_sensitive (circuit->netlist ()->is_case_sensitive ()); } for (db::Circuit::const_net_iterator n = circuit->begin_nets (); n != circuit->end_nets (); ++n) { @@ -1510,13 +1512,13 @@ nets_by_name_const (const db::Circuit *circuit, const std::string &name_pattern) } static std::vector -nets_by_name (db::Circuit *circuit, const std::string &name_pattern) +nets_by_name (db::Circuit *circuit, const std::string &name_pattern, const tl::Variant &cs) { - return nets_non_const (nets_by_name_const (circuit, name_pattern)); + return nets_non_const (nets_by_name_const (circuit, name_pattern, cs)); } static std::vector -nets_by_name_const_from_netlist (const db::Netlist *netlist, const std::string &name_pattern) +nets_by_name_const_from_netlist (const db::Netlist *netlist, const std::string &name_pattern, const tl::Variant &cs) { std::vector res; if (! netlist) { @@ -1524,7 +1526,7 @@ nets_by_name_const_from_netlist (const db::Netlist *netlist, const std::string & } tl::GlobPattern glob (name_pattern); - glob.set_case_sensitive (netlist->is_case_sensitive ()); + glob.set_case_sensitive (cs.is_nil () ? netlist->is_case_sensitive () : cs.to_bool ()); for (auto c = netlist->begin_circuits (); c != netlist->end_circuits (); ++c) { bool is_top = (c->begin_parents () == c->end_parents ()); for (auto n = c->begin_nets (); n != c->end_nets (); ++n) { @@ -1540,9 +1542,9 @@ nets_by_name_const_from_netlist (const db::Netlist *netlist, const std::string & } static std::vector -nets_by_name_from_netlist (db::Netlist *netlist, const std::string &name_pattern) +nets_by_name_from_netlist (db::Netlist *netlist, const std::string &name_pattern, const tl::Variant &cs) { - return nets_non_const (nets_by_name_const_from_netlist (netlist, name_pattern)); + return nets_non_const (nets_by_name_const_from_netlist (netlist, name_pattern, cs)); } Class decl_dbCircuit (decl_dbNetlistObject, "db", "Circuit", @@ -1658,17 +1660,25 @@ Class decl_dbCircuit (decl_dbNetlistObject, "db", "Circuit", "\n\n" "This constness variant has been introduced in version 0.26.8" ) + - gsi::method_ext ("nets_by_name", &nets_by_name, gsi::arg ("name_pattern"), + gsi::method_ext ("nets_by_name", &nets_by_name, gsi::arg ("name_pattern"), gsi::arg ("case_sensitive", tl::Variant (), "default"), "@brief Gets the net objects for a given name filter.\n" "The name filter is a glob pattern. This method will return all \\Net objects matching the glob pattern.\n" + "The 'case_sensitive' argument will control whether the name is looked up in a case sensitive way or not. Note that " + "with case insensitive search on a netlist that is case sensitive, the same name may render more than one hit. By " + "default, case sensitivity is taken from the netlist.\n" "\n" "This method has been introduced in version 0.27.3.\n" + "The 'case_sensitive' argument has been added in version 0.30.2." ) + - gsi::method_ext ("nets_by_name", &nets_by_name_const, gsi::arg ("name_pattern"), + gsi::method_ext ("nets_by_name", &nets_by_name_const, gsi::arg ("name_pattern"), gsi::arg ("case_sensitive", tl::Variant (), "default"), "@brief Gets the net objects for a given name filter (const version).\n" "The name filter is a glob pattern. This method will return all \\Net objects matching the glob pattern.\n" - "\n\n" - "This constness variant has been introduced in version 0.27.3" + "The 'case_sensitive' argument will control whether the name is looked up in a case sensitive way or not. Note that " + "with case insensitive search on a netlist that is case sensitive, the same name may render more than one hit. By " + "default, case sensitivity is taken from the netlist.\n" + "\n" + "This constness variant has been introduced in version 0.27.3.\n" + "The 'case_sensitive' argument has been added in version 0.30.2." ) + gsi::method ("pin_by_id", (db::Pin *(db::Circuit::*) (size_t)) &db::Circuit::pin_by_id, gsi::arg ("id"), "@brief Gets the \\Pin object corresponding to a specific ID\n" @@ -1964,7 +1974,7 @@ static void blank_circuit_by_name (db::Netlist *nl, const std::string &name_patt } static std::vector -circuits_by_name (db::Netlist *netlist, const std::string &name_pattern) +circuits_by_name (db::Netlist *netlist, const std::string &name_pattern, const tl::Variant &cs) { std::vector res; if (! netlist) { @@ -1972,7 +1982,7 @@ circuits_by_name (db::Netlist *netlist, const std::string &name_pattern) } tl::GlobPattern glob (name_pattern); - glob.set_case_sensitive (netlist->is_case_sensitive ()); + glob.set_case_sensitive (cs.is_nil () ? netlist->is_case_sensitive () : cs.to_bool ()); for (db::Netlist::circuit_iterator c = netlist->begin_circuits (); c != netlist->end_circuits (); ++c) { db::Circuit *circuit = c.operator-> (); @@ -1985,7 +1995,7 @@ circuits_by_name (db::Netlist *netlist, const std::string &name_pattern) } static std::vector -circuits_by_name_const (const db::Netlist *netlist, const std::string &name_pattern) +circuits_by_name_const (const db::Netlist *netlist, const std::string &name_pattern, const tl::Variant &cs) { std::vector res; if (! netlist) { @@ -1993,7 +2003,7 @@ circuits_by_name_const (const db::Netlist *netlist, const std::string &name_patt } tl::GlobPattern glob (name_pattern); - glob.set_case_sensitive (netlist->is_case_sensitive ()); + glob.set_case_sensitive (cs.is_nil () ? netlist->is_case_sensitive () : cs.to_bool ()); for (db::Netlist::const_circuit_iterator c = netlist->begin_circuits (); c != netlist->end_circuits (); ++c) { const db::Circuit *circuit = c.operator-> (); @@ -2082,23 +2092,45 @@ Class decl_dbNetlist ("db", "Netlist", "\n\n" "This constness variant has been introduced in version 0.26.8." ) + - gsi::method_ext ("circuits_by_name", &circuits_by_name, gsi::arg ("name_pattern"), + gsi::method_ext ("circuits_by_name", &circuits_by_name, gsi::arg ("name_pattern"), gsi::arg ("case_sensitive", tl::Variant (), "default"), "@brief Gets the circuit objects for a given name filter.\n" "The name filter is a glob pattern. This method will return all \\Circuit objects matching the glob pattern.\n" + "The 'case_sensitive' argument will control whether the name is looked up in a case sensitive way or not. Note that " + "with case insensitive search on a netlist that is case sensitive, the same name may render more than one hit. By " + "default, case sensitivity is taken from the netlist.\n" "\n" "This method has been introduced in version 0.26.4.\n" + "The 'case_sensitive' argument has been added in version 0.30.2." ) + - gsi::method_ext ("circuits_by_name", &circuits_by_name_const, gsi::arg ("name_pattern"), + gsi::method_ext ("circuits_by_name", &circuits_by_name_const, gsi::arg ("name_pattern"), gsi::arg ("case_sensitive", tl::Variant (), "default"), "@brief Gets the circuit objects for a given name filter (const version).\n" "The name filter is a glob pattern. This method will return all \\Circuit objects matching the glob pattern.\n" - "\n\n" + "The 'case_sensitive' argument will control whether the name is looked up in a case sensitive way or not. Note that " + "with case insensitive search on a netlist that is case sensitive, the same name may render more than one hit. By " + "default, case sensitivity is taken from the netlist.\n" + "\n" "This constness variant has been introduced in version 0.26.8." + "The 'case_sensitive' argument has been added in version 0.30.2." ) + - gsi::method_ext ("nets_by_name", &nets_by_name_from_netlist, gsi::arg ("name_pattern"), + gsi::method_ext ("nets_by_name", &nets_by_name_from_netlist, gsi::arg ("name_pattern"), gsi::arg ("case_sensitive", tl::Variant (), "default"), "@brief Gets the net objects for a given name filter.\n" "The name filter is a glob pattern. This method will return all \\Net objects matching the glob pattern.\n" + "The 'case_sensitive' argument will control whether the name is looked up in a case sensitive way or not. Note that " + "with case insensitive search on a netlist that is case sensitive, the same name may render more than one hit. By " + "default, case sensitivity is taken from the netlist.\n" "\n" "This method has been introduced in version 0.28.4.\n" + "The 'case_sensitive' argument has been added in version 0.30.2." + ) + + gsi::method_ext ("nets_by_name", &nets_by_name_const_from_netlist, gsi::arg ("name_pattern"), gsi::arg ("case_sensitive", tl::Variant (), "default"), + "@brief Gets the net objects for a given name filter (const version).\n" + "The name filter is a glob pattern. This method will return all \\Net objects matching the glob pattern.\n" + "The 'case_sensitive' argument will control whether the name is looked up in a case sensitive way or not. Note that " + "with case insensitive search on a netlist that is case sensitive, the same name may render more than one hit. By " + "default, case sensitivity is taken from the netlist.\n" + "\n" + "This constness variant has been introduced in version 0.28.4." + "The 'case_sensitive' argument has been added in version 0.30.2." ) + gsi::method ("top_circuit", static_cast (&db::Netlist::top_circuit), "@brief Gets the top circuit.\n" @@ -2126,12 +2158,6 @@ Class decl_dbNetlist ("db", "Netlist", "\n" "This convenience method has been added in version 0.29.5." ) + - gsi::method_ext ("nets_by_name", &nets_by_name_const_from_netlist, gsi::arg ("name_pattern"), - "@brief Gets the net objects for a given name filter (const version).\n" - "The name filter is a glob pattern. This method will return all \\Net objects matching the glob pattern.\n" - "\n\n" - "This constness variant has been introduced in version 0.28.4." - ) + gsi::iterator ("each_circuit_top_down", (db::Netlist::top_down_circuit_iterator (db::Netlist::*) ()) &db::Netlist::begin_top_down, (db::Netlist::top_down_circuit_iterator (db::Netlist::*) ()) &db::Netlist::end_top_down, "@brief Iterates over the circuits top-down\n" "Iterating top-down means the parent circuits come before the child circuits. " diff --git a/src/lvs/lvs/built-in-macros/_lvs_netter.rb b/src/lvs/lvs/built-in-macros/_lvs_netter.rb index 4b3a44f7c..15e0dbbad 100644 --- a/src/lvs/lvs/built-in-macros/_lvs_netter.rb +++ b/src/lvs/lvs/built-in-macros/_lvs_netter.rb @@ -652,8 +652,8 @@ CODE if ca.is_a?(String) && (!cb || cb == "*") n2c = {} - nl_a.circuits_by_name(ca).each { |c| name = cs ? c.name.upcase : c.name; n2c[name] ||= [ nil, nil ]; n2c[name][0] = c } - nl_b.circuits_by_name(ca).each { |c| name = cs ? c.name.upcase : c.name; n2c[name] ||= [ nil, nil ]; n2c[name][1] = c } + nl_a.circuits_by_name(ca, cs).each { |c| name = cs ? c.name.upcase : c.name; n2c[name] ||= [ nil, nil ]; n2c[name][0] = c } + nl_b.circuits_by_name(ca, cs).each { |c| name = cs ? c.name.upcase : c.name; n2c[name] ||= [ nil, nil ]; n2c[name][1] = c } circuits = [] n2c.keys.sort.each do |n| @@ -679,8 +679,8 @@ CODE if a.is_a?(String) && (!b || b == "*") n2n = {} - circuit_a.nets_by_name(a).each { |n| name = cs ? n.name.upcase : n.name; n2n[name] ||= [ nil, nil ]; n2n[name][0] = n } - circuit_b.nets_by_name(a).each { |n| name = cs ? n.name.upcase : n.name; n2n[name] ||= [ nil, nil ]; n2n[name][1] = n } + circuit_a.nets_by_name(a, cs).each { |n| name = cs ? n.name.upcase : n.name; n2n[name] ||= [ nil, nil ]; n2n[name][0] = n } + circuit_b.nets_by_name(a, cs).each { |n| name = cs ? n.name.upcase : n.name; n2n[name] ||= [ nil, nil ]; n2n[name][1] = n } nets = [] n2n.keys.sort.each do |n| diff --git a/testdata/ruby/dbNetlist.rb b/testdata/ruby/dbNetlist.rb index aaf5e9cad..fa0b859e8 100644 --- a/testdata/ruby/dbNetlist.rb +++ b/testdata/ruby/dbNetlist.rb @@ -111,9 +111,17 @@ class DBNetlist_TestClass < TestBase assert_equal(nl.circuits_by_name("X*").collect { |x| x.name }, [ "XYZ" ]) assert_equal(nl.circuits_by_name("x*").collect { |x| x.name }, []) + assert_equal(nl.circuits_by_name("X*", true).collect { |x| x.name }, [ "XYZ" ]) + assert_equal(nl.circuits_by_name("x*", true).collect { |x| x.name }, []) + assert_equal(nl.circuits_by_name("X*", false).collect { |x| x.name }, [ "XYZ" ]) + assert_equal(nl.circuits_by_name("x*", false).collect { |x| x.name }, [ "XYZ" ]) nl.case_sensitive = false assert_equal(nl.circuits_by_name("X*").collect { |x| x.name }, [ "XYZ" ]) assert_equal(nl.circuits_by_name("x*").collect { |x| x.name }, [ "XYZ" ]) + assert_equal(nl.circuits_by_name("X*", true).collect { |x| x.name }, [ "XYZ" ]) + assert_equal(nl.circuits_by_name("x*", true).collect { |x| x.name }, []) + assert_equal(nl.circuits_by_name("X*", false).collect { |x| x.name }, [ "XYZ" ]) + assert_equal(nl.circuits_by_name("x*", false).collect { |x| x.name }, [ "XYZ" ]) nl.case_sensitive = true assert_equal(nl.circuits_by_name("???").collect { |x| x.name }, [ "XYZ", "UVW" ]) assert_equal(nl.circuits_by_name("*").collect { |x| x.name }, [ "XYZ", "UVW" ]) @@ -719,7 +727,31 @@ class DBNetlist_TestClass < TestBase assert_equal(c.net_by_name("net1").inspect, "nil") nl.case_sensitive = false assert_equal(c.net_by_name("net1").name, "NET1") + assert_equal(c.nets_by_name("NET*").collect(&:name), ["NET1"]) + assert_equal(c.nets_by_name("net*").collect(&:name), ["NET1"]) + assert_equal(c.nets_by_name("NET*", true).collect(&:name), ["NET1"]) + assert_equal(c.nets_by_name("net*", true).collect(&:name), []) + assert_equal(c.nets_by_name("NET*", false).collect(&:name), ["NET1"]) + assert_equal(c.nets_by_name("net*", false).collect(&:name), ["NET1"]) + assert_equal(nl.nets_by_name("NET*").collect(&:name), ["NET1"]) + assert_equal(nl.nets_by_name("net*").collect(&:name), ["NET1"]) + assert_equal(nl.nets_by_name("NET*", true).collect(&:name), ["NET1"]) + assert_equal(nl.nets_by_name("net*", true).collect(&:name), []) + assert_equal(nl.nets_by_name("NET*", false).collect(&:name), ["NET1"]) + assert_equal(nl.nets_by_name("net*", false).collect(&:name), ["NET1"]) nl.case_sensitive = true + assert_equal(c.nets_by_name("NET*").collect(&:name), ["NET1"]) + assert_equal(c.nets_by_name("net*").collect(&:name), []) + assert_equal(c.nets_by_name("NET*", true).collect(&:name), ["NET1"]) + assert_equal(c.nets_by_name("net*", true).collect(&:name), []) + assert_equal(c.nets_by_name("NET*", false).collect(&:name), ["NET1"]) + assert_equal(c.nets_by_name("net*", false).collect(&:name), ["NET1"]) + assert_equal(nl.nets_by_name("NET*").collect(&:name), ["NET1"]) + assert_equal(nl.nets_by_name("net*").collect(&:name), []) + assert_equal(nl.nets_by_name("NET*", true).collect(&:name), ["NET1"]) + assert_equal(nl.nets_by_name("net*", true).collect(&:name), []) + assert_equal(nl.nets_by_name("NET*", false).collect(&:name), ["NET1"]) + assert_equal(nl.nets_by_name("net*", false).collect(&:name), ["NET1"]) net2 = c.create_net net2.name = "NET2" From bfe49c22e3aedf69df8bb5175f1599fd6535aa99 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sun, 25 May 2025 19:42:14 +0200 Subject: [PATCH 08/11] Properly using 'long' and 'unsigned long' in tl::sprintf to fit Windows definition of 'long' --- src/tl/tl/tlString.cc | 6 +++--- src/tl/unit_tests/tlStringTests.cc | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/tl/tl/tlString.cc b/src/tl/tl/tlString.cc index d57dee236..7bd12c832 100644 --- a/src/tl/tl/tlString.cc +++ b/src/tl/tl/tlString.cc @@ -1975,17 +1975,17 @@ sprintf (const char *f, const std::vector &vv, unsigned int a0) os.setf (std::ios::uppercase); } if (a < vv.size ()) { - os << vv [a].to_ulong (); + os << vv [a].to_ulonglong (); } } else if (*cp == 'u' || *cp == 'U') { os.setf (std::ios_base::fmtflags (0), std::ios::basefield); if (a < vv.size ()) { - os << vv [a].to_ulong (); + os << vv [a].to_ulonglong (); } } else if (*cp == 'd' || *cp == 'D') { os.setf (std::ios_base::fmtflags (0), std::ios::basefield); if (a < vv.size ()) { - os << vv [a].to_long (); + os << vv [a].to_longlong (); } } else if (*cp == 's' || *cp == 'S') { os.setf (std::ios_base::fmtflags (0), std::ios::basefield); diff --git a/src/tl/unit_tests/tlStringTests.cc b/src/tl/unit_tests/tlStringTests.cc index 634b38e6e..8d8696b09 100644 --- a/src/tl/unit_tests/tlStringTests.cc +++ b/src/tl/unit_tests/tlStringTests.cc @@ -57,6 +57,20 @@ TEST(1) EXPECT_EQ (tl::sprintf("%lu %llu %02x", 1, 2, 167), "1 2 a7"); EXPECT_EQ (tl::sprintf("%lu %llu %02X", 1, 2, 761), "1 2 2F9"); EXPECT_EQ (tl::sprintf("%c%c", 'a', 'X'), "aX"); + + // 64bit numbers + EXPECT_EQ (tl::sprintf("%x", 0x1000000000ll), "1000000000"); + EXPECT_EQ (tl::sprintf("%lx", 0x1000000000ll), "1000000000"); + EXPECT_EQ (tl::sprintf("%llx", 0x1000000000ll), "1000000000"); + EXPECT_EQ (tl::sprintf("%d", 100000000000ll), "100000000000"); + EXPECT_EQ (tl::sprintf("%ld", 100000000000ll), "100000000000"); + EXPECT_EQ (tl::sprintf("%lld", 100000000000ll), "100000000000"); + EXPECT_EQ (tl::sprintf("%d", -100000000000ll), "-100000000000"); + EXPECT_EQ (tl::sprintf("%ld", -100000000000ll), "-100000000000"); + EXPECT_EQ (tl::sprintf("%lld", -100000000000ll), "-100000000000"); + EXPECT_EQ (tl::sprintf("%u", 100000000000ull), "100000000000"); + EXPECT_EQ (tl::sprintf("%lu", 100000000000ull), "100000000000"); + EXPECT_EQ (tl::sprintf("%llu", 100000000000ull), "100000000000"); } TEST(1a) From 010fa2d5ba20bb195b531b4202bc0a3ffce72504 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Tue, 27 May 2025 00:48:10 +0200 Subject: [PATCH 09/11] Avoiding a segfault when trying to run Ruby from a non-Ruby thread --- src/rba/rba/rbaUtils.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/rba/rba/rbaUtils.cc b/src/rba/rba/rbaUtils.cc index bdb9e5c16..887ae0471 100644 --- a/src/rba/rba/rbaUtils.cc +++ b/src/rba/rba/rbaUtils.cc @@ -450,6 +450,10 @@ VALUE rba_funcall2_checked (VALUE obj, ID id, int argc, VALUE *args) // HINT: the ugly (VALUE) cast is required since there is only one form of rb_protect rb_protect_init (); // see above + if (! ruby_native_thread_p ()) { + throw tl::Exception (tl::to_string (tr ("Can't execute Ruby callbacks from non-Ruby threads"))); + } + RUBY_BEGIN_EXEC ret = rb_protect (&rb_funcall2_wrap, (VALUE) &p, &error); RUBY_END_EXEC From 0cb5f356592ca050c37af947efbd390f324b66ea Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Tue, 27 May 2025 21:07:28 +0200 Subject: [PATCH 10/11] Allowing the polygon neighborhood visitor to specify a variant type for deep mode --- src/db/db/dbCellVariants.cc | 22 +++++++++++ src/db/db/dbCellVariants.h | 45 +++++++++++++++++++++++ src/db/db/dbCompoundOperation.cc | 7 +++- src/db/db/dbCompoundOperation.h | 8 ++-- src/db/db/dbPolygonNeighborhood.cc | 40 ++++++++++++++------ src/db/db/dbPolygonNeighborhood.h | 32 ++++++++++++++-- src/db/db/gsiDeclDbCell.cc | 35 ++++++++++++++++++ src/db/db/gsiDeclDbPolygonNeighborhood.cc | 14 +++++++ 8 files changed, 184 insertions(+), 19 deletions(-) diff --git a/src/db/db/dbCellVariants.cc b/src/db/db/dbCellVariants.cc index 74ab634a4..f4d928289 100644 --- a/src/db/db/dbCellVariants.cc +++ b/src/db/db/dbCellVariants.cc @@ -712,6 +712,28 @@ VariantsCollectorBase::create_var_instances_tl_invariant (db::Cell &in_cell, std // ------------------------------------------------------------------------------------------ +TransformationReducer * +make_reducer (ReducerType type) +{ + + switch (type) { + case Orientation: + return new OrientationReducer (); + case Orthogonal: + return new OrthogonalTransformationReducer (); + case Magnification: + return new MagnificationReducer (); + case XYAnisotropyAndMagnification: + return new XYAnisotropyAndMagnificationReducer (); + case MagnificationAndOrientation: + return new MagnificationAndOrientationReducer (); + default: + return 0; + } +} + +// ------------------------------------------------------------------------------------------ + VariantStatistics::VariantStatistics () : mp_red () { diff --git a/src/db/db/dbCellVariants.h b/src/db/db/dbCellVariants.h index 18e21f11a..b33e40c81 100644 --- a/src/db/db/dbCellVariants.h +++ b/src/db/db/dbCellVariants.h @@ -166,6 +166,51 @@ private: int64_t m_grid; }; +/** + * @brief An enum describing a reducer type + * + * This enum is used to create a generic reducer (parameterless) from the code. + */ +enum ReducerType +{ + /** + * @brief No specific reducer + */ + NoReducer = 0, + + /** + * @brief Rotation/mirror variants + */ + Orientation = 1, + + /** + * @brief Orthogonal transformations (rotations of multiple of 90 degree) variants + */ + Orthogonal = 2, + + /** + * @brief Scaling variants + */ + Magnification = 3, + + /** + * @brief Scaling and x/y assymmetry variants (i.e. anisotropic size) + */ + XYAnisotropyAndMagnification = 4, + + /** + * @brief Scaling and orientation variants + */ + MagnificationAndOrientation = 5 +}; + +/** + * @brief Creates a TransformationReducer from the type enum + * + * This function returns 0 if the type is NoReducer or invalid. + */ +DB_PUBLIC TransformationReducer *make_reducer (ReducerType type); + /** * @brief A class computing variants for cells according to a given criterion * diff --git a/src/db/db/dbCompoundOperation.cc b/src/db/db/dbCompoundOperation.cc index cd9f8dcad..80445387f 100644 --- a/src/db/db/dbCompoundOperation.cc +++ b/src/db/db/dbCompoundOperation.cc @@ -302,7 +302,7 @@ CompoundTransformationReducer::is_translation_invariant () const // --------------------------------------------------------------------------------------------- -CompoundRegionMultiInputOperationNode::CompoundRegionMultiInputOperationNode (const std::vector &children) +CompoundRegionMultiInputOperationNode::CompoundRegionMultiInputOperationNode (const std::vector &children, bool no_init) { for (std::vector::const_iterator c = children.begin (); c != children.end (); ++c) { (*c)->keep (); @@ -362,6 +362,11 @@ CompoundRegionMultiInputOperationNode::init () for (tl::shared_collection::iterator i = m_children.begin (); i != m_children.end (); ++i) { m_vars.add (i->vars ()); } + + // add the local variant reducer + if (local_vars ()) { + m_vars.add (local_vars ()); + } } CompoundRegionMultiInputOperationNode::~CompoundRegionMultiInputOperationNode () diff --git a/src/db/db/dbCompoundOperation.h b/src/db/db/dbCompoundOperation.h index 4f109553a..78c8661c3 100644 --- a/src/db/db/dbCompoundOperation.h +++ b/src/db/db/dbCompoundOperation.h @@ -453,7 +453,7 @@ class DB_PUBLIC CompoundRegionMultiInputOperationNode : public CompoundRegionOperationNode { public: - CompoundRegionMultiInputOperationNode (const std::vector &children); + CompoundRegionMultiInputOperationNode (const std::vector &children, bool no_init = false); CompoundRegionMultiInputOperationNode (); CompoundRegionMultiInputOperationNode (CompoundRegionOperationNode *child); CompoundRegionMultiInputOperationNode (CompoundRegionOperationNode *a, CompoundRegionOperationNode *b); @@ -521,14 +521,16 @@ protected: CompoundRegionOperationNode *child (unsigned int index); const CompoundRegionOperationNode *child (unsigned int index) const; + virtual const TransformationReducer *local_vars () const { return 0; } + + void init (); + private: tl::shared_collection m_children; // maps child#,layer# to layer# of child: std::map, unsigned int> m_map_layer_to_child; std::vector m_inputs; CompoundTransformationReducer m_vars; - - void init (); }; diff --git a/src/db/db/dbPolygonNeighborhood.cc b/src/db/db/dbPolygonNeighborhood.cc index 21a7a9696..35fe0b384 100644 --- a/src/db/db/dbPolygonNeighborhood.cc +++ b/src/db/db/dbPolygonNeighborhood.cc @@ -28,38 +28,42 @@ namespace db { PolygonNeighborhoodVisitor::PolygonNeighborhoodVisitor () - : m_result_type (db::CompoundRegionOperationNode::ResultType::Edges) + : m_result_type (db::CompoundRegionOperationNode::ResultType::Edges), m_variant_type (db::NoReducer) { disconnect_outputs (); } void -PolygonNeighborhoodVisitor::connect_output (Layout * /*layout*/, std::unordered_set *polygons) const +PolygonNeighborhoodVisitor::connect_output (Layout * /*layout*/, std::unordered_set *polygons, const db::ICplxTrans &trans) const { disconnect_outputs (); mp_polygons = polygons; + m_trans = trans; } void -PolygonNeighborhoodVisitor::connect_output (db::Layout *layout, std::unordered_set *polygons) const +PolygonNeighborhoodVisitor::connect_output (db::Layout *layout, std::unordered_set *polygons, const db::ICplxTrans &trans) const { disconnect_outputs (); mp_layout = layout; mp_polygon_refs = polygons; + m_trans = trans; } void -PolygonNeighborhoodVisitor::connect_output (db::Layout * /*layout*/, std::unordered_set *edges) const +PolygonNeighborhoodVisitor::connect_output (db::Layout * /*layout*/, std::unordered_set *edges, const db::ICplxTrans &trans) const { disconnect_outputs (); mp_edges = edges; + m_trans = trans; } void -PolygonNeighborhoodVisitor::connect_output (Layout * /*layout*/, std::unordered_set *edge_pairs) const +PolygonNeighborhoodVisitor::connect_output (Layout * /*layout*/, std::unordered_set *edge_pairs, const db::ICplxTrans &trans) const { disconnect_outputs (); mp_edge_pairs = edge_pairs; + m_trans = trans; } void @@ -76,10 +80,10 @@ void PolygonNeighborhoodVisitor::output_polygon (const db::PolygonWithProperties &poly) { if (mp_polygons) { - mp_polygons->insert (poly); + mp_polygons->insert (poly.transformed (m_trans)); } else if (mp_polygon_refs) { tl_assert (mp_layout != 0); - mp_polygon_refs->insert (db::PolygonRefWithProperties (db::PolygonRef (poly, mp_layout->shape_repository ()), poly.properties_id ())); + mp_polygon_refs->insert (db::PolygonRefWithProperties (db::PolygonRef (poly.transformed (m_trans), mp_layout->shape_repository ()), poly.properties_id ())); } else { throw tl::Exception (tl::to_string (tr ("PolygonNeighborhoodVisitor is not configured for edge output (use 'result_type=Edges')"))); } @@ -91,7 +95,7 @@ PolygonNeighborhoodVisitor::output_edge (const db::EdgeWithProperties &edge) if (mp_edges == 0) { throw tl::Exception (tl::to_string (tr ("PolygonNeighborhoodVisitor is not configured for edge output (use 'result_type=Edges')"))); } - mp_edges->insert (edge); + mp_edges->insert (edge.transformed (m_trans)); } void @@ -100,16 +104,22 @@ PolygonNeighborhoodVisitor::output_edge_pair (const db::EdgePairWithProperties & if (mp_edge_pairs == 0) { throw tl::Exception (tl::to_string (tr ("PolygonNeighborhoodVisitor is not configured for edge pair output (use 'result_type=EdgePairs')"))); } - mp_edge_pairs->insert (edge_pair); + mp_edge_pairs->insert (edge_pair.transformed (m_trans)); } // -------------------------------------------------------------------------------------------------- PolygonNeighborhoodCompoundOperationNode::PolygonNeighborhoodCompoundOperationNode (const std::vector &children, PolygonNeighborhoodVisitor *visitor, db::Coord dist) - : CompoundRegionMultiInputOperationNode (children), m_dist (dist), mp_visitor (visitor) + : CompoundRegionMultiInputOperationNode (children, true /*no implicit init()*/), + m_dist (dist), mp_visitor (visitor) { tl_assert (visitor != 0); visitor->keep (); + + m_vars.reset (db::make_reducer (visitor->variant_type ())); + + // must be called after local_vars() is available + init (); } db::Coord @@ -170,12 +180,19 @@ PolygonNeighborhoodCompoundOperationNode::compute_local_impl (CompoundRegionOper tl_assert (interactions.num_subjects () == 1); tl_assert (! results.empty ()); + db::ICplxTrans var_trans, var_trans_inv; + if (proc->vars ()) { + var_trans_inv = proc->vars ()->single_variant_transformation (cell->cell_index ()); + var_trans = var_trans_inv.inverted (); + } + try { - mp_visitor->connect_output (layout, &results.front ()); + mp_visitor->connect_output (layout, &results.front (), var_trans_inv); const T &pr = interactions.begin_subjects ()->second; db::PolygonWithProperties subject (pr.instantiate (), pr.properties_id ()); + subject.transform (var_trans); PolygonNeighborhoodVisitor::neighbors_type neighbors; @@ -191,6 +208,7 @@ PolygonNeighborhoodCompoundOperationNode::compute_local_impl (CompoundRegionOper for (auto p = others.front ().begin (); p != others.front ().end (); ++p) { n.push_back (db::PolygonWithProperties (p->instantiate (), p->properties_id ())); + n.back ().transform (var_trans); } } diff --git a/src/db/db/dbPolygonNeighborhood.h b/src/db/db/dbPolygonNeighborhood.h index 17bd13178..25314f6dd 100644 --- a/src/db/db/dbPolygonNeighborhood.h +++ b/src/db/db/dbPolygonNeighborhood.h @@ -58,22 +58,22 @@ public: /** * @brief Configure the polygon output */ - void connect_output (db::Layout * /*layout*/, std::unordered_set *polygons) const; + void connect_output (db::Layout * /*layout*/, std::unordered_set *polygons, const db::ICplxTrans &trans) const; /** * @brief Configure the polygon ref output */ - void connect_output (db::Layout *layout, std::unordered_set *polygons) const; + void connect_output (db::Layout *layout, std::unordered_set *polygons, const db::ICplxTrans &trans) const; /** * @brief Configure the edge output */ - void connect_output (db::Layout * /*layout*/, std::unordered_set *edges) const; + void connect_output (db::Layout * /*layout*/, std::unordered_set *edges, const db::ICplxTrans &trans) const; /** * @brief Configure the edge pair output */ - void connect_output (db::Layout * /*layout*/, std::unordered_set *edge_pairs) const; + void connect_output (db::Layout * /*layout*/, std::unordered_set *edge_pairs, const db::ICplxTrans &trans) const; /** * @brief Disconnects output @@ -102,6 +102,22 @@ public: return m_result_type; } + /** + * @brief Sets the variant type + */ + void set_variant_type (db::ReducerType variant_type) + { + m_variant_type = variant_type; + } + + /** + * @brief Gets the variant type + */ + db::ReducerType variant_type () const + { + return m_variant_type; + } + /** * @brief Delivers a polygon * This function is only permitted if the result type is Region. @@ -122,11 +138,13 @@ public: private: db::CompoundRegionOperationNode::ResultType m_result_type; + db::ReducerType m_variant_type; mutable std::unordered_set *mp_polygons; mutable std::unordered_set *mp_polygon_refs; mutable std::unordered_set *mp_edges; mutable std::unordered_set *mp_edge_pairs; mutable db::Layout *mp_layout; + mutable db::ICplxTrans m_trans; }; /** @@ -148,6 +166,11 @@ public: return false; } + virtual const TransformationReducer *local_vars () const + { + return m_vars.get (); + } + protected: virtual db::Coord computed_dist () const; virtual std::string generated_description () const; @@ -162,6 +185,7 @@ protected: private: db::Coord m_dist; tl::weak_ptr mp_visitor; + std::unique_ptr m_vars; template void compute_local_impl (CompoundRegionOperationCache * /*cache*/, db::Layout * /*layout*/, db::Cell * /*cell*/, const shape_interactions & /*interactions*/, std::vector > & /*results*/, const db::LocalProcessorBase * /*proc*/) const; diff --git a/src/db/db/gsiDeclDbCell.cc b/src/db/db/gsiDeclDbCell.cc index 4b4bc70a5..0e2f6f119 100644 --- a/src/db/db/gsiDeclDbCell.cc +++ b/src/db/db/gsiDeclDbCell.cc @@ -22,6 +22,7 @@ #include "gsiDecl.h" #include "gsiDeclDbMetaInfo.h" +#include "gsiEnums.h" #include "gsiDeclDbHelpers.h" #include "dbLayout.h" @@ -4655,5 +4656,39 @@ Class decl_DCellInstArray ("db", "DCellInstArray", "This class has been introduced in version 0.25." ); +gsi::Enum decl_VariantType ("db", "VariantType", + gsi::enum_const ("NoVariants", db::NoReducer, + "@brief No variants needed." + ) + + gsi::enum_const ("Orientation", db::Orientation, + "@brief Orientation variants needed.\n" + "For example, the edge orientation selection operation needs this variant type." + ) + + gsi::enum_const ("Orthogonal", db::Orthogonal, + "@brief Orthogonal transformations (rotations by multiples of 90 degree) need variants.\n" + "For example, the diagonal edge selection operation needs this variant type." + ) + + gsi::enum_const ("Magnification", db::Magnification, + "@brief Scaling variants needed.\n" + "For example, distance measurements or the isotropic sizing operations needs this variant type." + ) + + gsi::enum_const ("XYAnisotropyAndMagnification", db::XYAnisotropyAndMagnification, + "@brief Scaling and anisotropy variants needed.\n" + "For example, the anisotropic sizing operation needs this variant type." + ) + + gsi::enum_const ("MagnificationAndOrientation", db::MagnificationAndOrientation, + "@brief Scaling and orientation variants needed.\n" + "For example, the 'move' operation needs this variant type." + ), + "@brief This class represents the cell variant type for various methods.\n" + "\n" + "Cell variants are needed in hierarchical applications, when operations are to be " + "performed on cell level, but the operations are not transformation invariant.\n" + "In that case, a variant type needs to be specified in order to make the algorithm " + "separate the cells by their absolute orientation or by their accumulated magnification.\n" + "\n" + "This enum has been introduced in version 0.30.2." +); + } diff --git a/src/db/db/gsiDeclDbPolygonNeighborhood.cc b/src/db/db/gsiDeclDbPolygonNeighborhood.cc index 37c0ffded..b8c9ebb5c 100644 --- a/src/db/db/gsiDeclDbPolygonNeighborhood.cc +++ b/src/db/db/gsiDeclDbPolygonNeighborhood.cc @@ -109,6 +109,20 @@ Class decl_PolygonNeighborhoodVisitorImpl ( ) + gsi::method ("result_type", &PolygonNeighborhoodVisitorImpl::result_type, "@brief Gets the result type\n" + ) + + gsi::method ("variant_type=", &PolygonNeighborhoodVisitorImpl::set_variant_type, gsi::arg ("variant_type"), + "@brief Configures the variant type\n" + "The variant type configures transformation variant formation. The polygons presented to the visitor are " + "normalized to the given variant type. For example, specify \\VariantType#Orientation to force orientation variants " + "in the cell tree. Polygons presented to the visitor are normalized to 'as if top' orientation with this variant type.\n" + "\n" + "This property was introduced in version 0.30.2." + ) + + gsi::method ("variant_type", &PolygonNeighborhoodVisitorImpl::variant_type, + "@brief Gets the variant type\n" + "See \\variant_type= for a description of this property.\n" + "\n" + "This property was introduced in version 0.30.2." ), "@brief A visitor for the neighborhood of polygons in the input\n" "\n" From 2a9acd1264cc9595228bbdeea5337905feaeb914 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Tue, 27 May 2025 22:25:47 +0200 Subject: [PATCH 11/11] Added tests --- testdata/ruby/dbCellTests.rb | 23 ++++++++++ testdata/ruby/dbPolygonNeighborhood.rb | 63 ++++++++++++++++++++++++++ 2 files changed, 86 insertions(+) diff --git a/testdata/ruby/dbCellTests.rb b/testdata/ruby/dbCellTests.rb index dec702c68..dc92a7ea7 100644 --- a/testdata/ruby/dbCellTests.rb +++ b/testdata/ruby/dbCellTests.rb @@ -348,6 +348,29 @@ class DBCellTests_TestClass < TestBase end + # variant enums + def test_VariantType + + vt = RBA::VariantType::NoVariants + assert_equal(vt.to_s, "NoVariants") + + vt = RBA::VariantType::Orientation + assert_equal(vt.to_s, "Orientation") + + vt = RBA::VariantType::Orthogonal + assert_equal(vt.to_s, "Orthogonal") + + vt = RBA::VariantType::Magnification + assert_equal(vt.to_s, "Magnification") + + vt = RBA::VariantType::XYAnisotropyAndMagnification + assert_equal(vt.to_s, "XYAnisotropyAndMagnification") + + vt = RBA::VariantType::MagnificationAndOrientation + assert_equal(vt.to_s, "MagnificationAndOrientation") + + end + end load("test_epilogue.rb") diff --git a/testdata/ruby/dbPolygonNeighborhood.rb b/testdata/ruby/dbPolygonNeighborhood.rb index e5d5aaf67..0bdfaf33f 100644 --- a/testdata/ruby/dbPolygonNeighborhood.rb +++ b/testdata/ruby/dbPolygonNeighborhood.rb @@ -65,6 +65,29 @@ class PMyVisitor2 < RBA::PolygonNeighborhoodVisitor end +class PMyVisitor4Deep < RBA::PolygonNeighborhoodVisitor + + def initialize + self.result_type = RBA::CompoundRegionOperationNode::ResultType::Region + self.variant_type = RBA::VariantType::Orientation + end + + def neighbors(layout, cell, polygon, neighborhood) + prim_box = polygon.bbox + neighborhood.each do |inp, others| + others.each do |other| + other_box = other.bbox + top_part = prim_box.top - other_box.top + bot_part = other_box.bottom - prim_box.bottom + if top_part > 0 && bot_part > 0 && top_part > 2 * bot_part + output(polygon) + end + end + end + end + +end + class DBPolygonNeighborhood_TestClass < TestBase # basic events @@ -136,6 +159,46 @@ class DBPolygonNeighborhood_TestClass < TestBase end + # full example with deep mode, variant building + def test_3 + + ly = RBA::Layout::new + l1 = ly.layer(1, 0) + l2 = ly.layer(2, 0) + + top = ly.create_cell("TOP") + child = ly.create_cell("CHILD") + + child.shapes(l1).insert(RBA::Box::new(-5000, -100, 5000, 100)) + child.shapes(l2).insert(RBA::Box::new(-1100, -3000, -900, 1000)) + child.shapes(l2).insert(RBA::Box::new(-100, -2000, 100, 2000)) + child.shapes(l2).insert(RBA::Box::new(900, -1000, 1100, 3000)) + + top.insert(RBA::CellInstArray::new(child, RBA::Trans::new(RBA::Vector::new(0, -5000)))) + top.insert(RBA::CellInstArray::new(child, RBA::Trans::new(RBA::Trans::M0, RBA::Vector::new(0, 5000)))) + top.insert(RBA::CellInstArray::new(child, RBA::Trans::new(RBA::Trans::R90, RBA::Vector::new(-10000, 0)))) + + dss = RBA::DeepShapeStore::new + # Ruby does not like to be called from threads, so none given here: + dss.threads = 0 + l1r = RBA::Region::new(RBA::RecursiveShapeIterator::new(ly, top, l1), dss) + l2r = RBA::Region::new(RBA::RecursiveShapeIterator::new(ly, top, l2), dss) + + overlap = l1r & l2r + puts overlap.to_s + + children = [ + RBA::CompoundRegionOperationNode::new_secondary(overlap) + ] + visitor = PMyVisitor4Deep::new + node = RBA::CompoundRegionOperationNode::new_polygon_neighborhood(children, visitor, -1) + + errors = l2r.complex_op(node) + + assert_equal(errors.to_s, "(900,-6000;900,-2000;1100,-2000;1100,-6000);(-1100,4000;-1100,8000;-900,8000;-900,4000)") + + end + end load("test_epilogue.rb")