From c227cb9ef3e17a0a4d52ccc6066ba764cb37adcb Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sun, 3 Jul 2022 00:08:14 +0200 Subject: [PATCH 1/5] Small bug fix - constness was not intended for Device#net_for_terminal on non-const mode --- src/db/db/gsiDeclDbNetlist.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/db/db/gsiDeclDbNetlist.cc b/src/db/db/gsiDeclDbNetlist.cc index 6d3762e1d..8f99bcc56 100644 --- a/src/db/db/gsiDeclDbNetlist.cc +++ b/src/db/db/gsiDeclDbNetlist.cc @@ -260,7 +260,7 @@ static const db::Net *net_for_terminal_by_name_const (const db::Device *device, } } -static const db::Net *net_for_terminal_by_name (db::Device *device, const std::string &name) +static db::Net *net_for_terminal_by_name (db::Device *device, const std::string &name) { if (! device->device_class () || ! device->device_class ()->has_terminal_with_name (name)) { return 0; From c700d2ed978cbcf760254a9a164aaf0a373fb654 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sun, 3 Jul 2022 09:40:17 +0200 Subject: [PATCH 2/5] Better LVS template - align needs to come before simplify --- src/lvs/lvs/templates/lvs.lym | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/lvs/lvs/templates/lvs.lym b/src/lvs/lvs/templates/lvs.lym index 7b74b5643..f3ab2e958 100644 --- a/src/lvs/lvs/templates/lvs.lym +++ b/src/lvs/lvs/templates/lvs.lym @@ -98,13 +98,16 @@ connect_global(ptie, "SUBSTRATE") # ------------------------------------------------------------------- # Netlist and compare -# Netlist normalization -netlist.simplify +# Netlist extraction +netlist -# Hierarchy alignment (flatten out unmatched cells) +# Hierarchy alignment (flatten out unmatched cells, specifically device cells) align -# Netlist vs. netlist +# Netlist normalization and device combination +netlist.simplify + +# Netlist vs. netlist check compare From 75d686a63f1f47166b98c81431f7ed3714e54313 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Mon, 4 Jul 2022 00:52:55 +0200 Subject: [PATCH 3/5] Changing default "is_merged" status for Edges and Region to false. This was a problem with universal DRC which does not specifically set the merged status. Furthermore, the default for DeepRegion and DeepEdges was "false" already and now is aligned. --- src/db/db/dbFlatEdges.cc | 6 ++---- src/db/db/dbFlatRegion.cc | 2 +- src/db/db/dbOriginalLayerEdges.cc | 2 +- src/db/db/dbOriginalLayerRegion.cc | 2 +- src/drc/unit_tests/drcSimpleTests.cc | 10 ++++++++++ testdata/drc/drcSimpleTests_55.drc | 20 ++++++++++++++++++++ testdata/drc/drcSimpleTests_55.gds | Bin 0 -> 53144 bytes testdata/drc/drcSimpleTests_55d.gds | Bin 0 -> 1102 bytes testdata/drc/drcSimpleTests_au55.gds | Bin 0 -> 14878 bytes testdata/drc/drcSimpleTests_au55d.gds | Bin 0 -> 13678 bytes 10 files changed, 35 insertions(+), 7 deletions(-) create mode 100644 testdata/drc/drcSimpleTests_55.drc create mode 100644 testdata/drc/drcSimpleTests_55.gds create mode 100644 testdata/drc/drcSimpleTests_55d.gds create mode 100644 testdata/drc/drcSimpleTests_au55.gds create mode 100644 testdata/drc/drcSimpleTests_au55d.gds diff --git a/src/db/db/dbFlatEdges.cc b/src/db/db/dbFlatEdges.cc index bfb75087c..8f1e1ae02 100644 --- a/src/db/db/dbFlatEdges.cc +++ b/src/db/db/dbFlatEdges.cc @@ -82,7 +82,7 @@ void FlatEdges::invalidate_cache () void FlatEdges::init () { - m_is_merged = true; + m_is_merged = false; m_merged_edges_valid = false; } @@ -321,9 +321,7 @@ const db::RecursiveShapeIterator *FlatEdges::iter () const void FlatEdges::do_insert (const db::Edge &edge) { - if (! empty ()) { - m_is_merged = false; - } + m_is_merged = empty (); mp_edges->insert (edge); invalidate_cache (); diff --git a/src/db/db/dbFlatRegion.cc b/src/db/db/dbFlatRegion.cc index a2314efe1..e12344c92 100644 --- a/src/db/db/dbFlatRegion.cc +++ b/src/db/db/dbFlatRegion.cc @@ -82,7 +82,7 @@ void FlatRegion::invalidate_cache () void FlatRegion::init () { - m_is_merged = true; + m_is_merged = false; m_merged_polygons_valid = false; } diff --git a/src/db/db/dbOriginalLayerEdges.cc b/src/db/db/dbOriginalLayerEdges.cc index 0282d77e1..a3e4c9f33 100644 --- a/src/db/db/dbOriginalLayerEdges.cc +++ b/src/db/db/dbOriginalLayerEdges.cc @@ -270,7 +270,7 @@ OriginalLayerEdges::less (const Edges &other) const void OriginalLayerEdges::init () { - m_is_merged = true; + m_is_merged = false; m_merged_edges_valid = false; } diff --git a/src/db/db/dbOriginalLayerRegion.cc b/src/db/db/dbOriginalLayerRegion.cc index 2049fb93f..f02ff0268 100644 --- a/src/db/db/dbOriginalLayerRegion.cc +++ b/src/db/db/dbOriginalLayerRegion.cc @@ -382,7 +382,7 @@ OriginalLayerRegion::less (const Region &other) const void OriginalLayerRegion::init () { - m_is_merged = true; + m_is_merged = false; m_merged_polygons_valid = false; } diff --git a/src/drc/unit_tests/drcSimpleTests.cc b/src/drc/unit_tests/drcSimpleTests.cc index eed4957f8..30681c13b 100644 --- a/src/drc/unit_tests/drcSimpleTests.cc +++ b/src/drc/unit_tests/drcSimpleTests.cc @@ -1318,3 +1318,13 @@ TEST(54_issue1011) run_test (_this, "54", false); } +TEST(55_drccount) +{ + run_test (_this, "55", false); +} + +TEST(55d_drccount) +{ + run_test (_this, "55", true); +} + diff --git a/testdata/drc/drcSimpleTests_55.drc b/testdata/drc/drcSimpleTests_55.drc new file mode 100644 index 000000000..7d3663fd3 --- /dev/null +++ b/testdata/drc/drcSimpleTests_55.drc @@ -0,0 +1,20 @@ + +source $drc_test_source +target $drc_test_target + +if $drc_test_deep + deep +end + +licon = input(66, 44) + +licon.output(66, 44) + +licon_cluster = licon.sized(0.2).sized(-0.2) + +single = licon_cluster.drc(secondary(licon).count == 1) +single.sized(0.1).output(100, 0) + +single = licon_cluster.drc(if_any(secondary(licon).count == 1)) +single.sized(0.1).output(101, 0) + diff --git a/testdata/drc/drcSimpleTests_55.gds b/testdata/drc/drcSimpleTests_55.gds new file mode 100644 index 0000000000000000000000000000000000000000..962ce17eb7b3d910311b5f657a7d4aa58ebb5d93 GIT binary patch literal 53144 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 literal 0 HcmV?d00001 diff --git a/testdata/drc/drcSimpleTests_au55d.gds b/testdata/drc/drcSimpleTests_au55d.gds new file mode 100644 index 0000000000000000000000000000000000000000..600937dbd603bbb10f682165754cc9c09655ee25 GIT binary patch literal 13678 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 literal 0 HcmV?d00001 From 26901454c4b6e00ca0b50edfca9b2f59af7ee3cb Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Mon, 4 Jul 2022 13:41:30 +0200 Subject: [PATCH 4/5] Fixed a doc typo --- src/db/db/gsiDeclDbNetlist.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/db/db/gsiDeclDbNetlist.cc b/src/db/db/gsiDeclDbNetlist.cc index 8f99bcc56..def41f731 100644 --- a/src/db/db/gsiDeclDbNetlist.cc +++ b/src/db/db/gsiDeclDbNetlist.cc @@ -2832,7 +2832,7 @@ Class db_NetlistSpiceReader (db_NetlistReader, "db", "Ne "Use the SPICE reader like this:\n" "\n" "@code\n" - "writer = RBA::NetlistSpiceReader::new\n" + "reader = RBA::NetlistSpiceReader::new\n" "netlist = RBA::Netlist::new\n" "netlist.read(path, reader)\n" "@/code\n" From 8cdf0601598a408165375bf9414c4c5e8372bf21 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Fri, 8 Jul 2022 01:35:39 +0200 Subject: [PATCH 5/5] Prevent segfaults with rulers when there is no manager object --- src/ant/ant/antService.cc | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/src/ant/ant/antService.cc b/src/ant/ant/antService.cc index 7db0555f0..b7a4f55a9 100644 --- a/src/ant/ant/antService.cc +++ b/src/ant/ant/antService.cc @@ -1530,8 +1530,10 @@ Service::mouse_click_event (const db::DPoint &p, unsigned int buttons, bool prio db::DPoint pt = snap1 (p, m_obj_snap && tpl.snap ()).second; // begin the transaction - tl_assert (! manager ()->transacting ()); - manager ()->transaction (tl::to_string (tr ("Create ruler"))); + if (manager ()) { + tl_assert (! manager ()->transacting ()); + manager ()->transaction (tl::to_string (tr ("Create ruler"))); + } m_current = ant::Object (pt, pt, 0, tpl); show_message (); @@ -1539,7 +1541,9 @@ Service::mouse_click_event (const db::DPoint &p, unsigned int buttons, bool prio insert_ruler (m_current, true); // end the transaction - manager ()->commit (); + if (manager ()) { + manager ()->commit (); + } } else if (tpl.mode () == ant::Template::RulerAutoMetric) { @@ -1567,8 +1571,10 @@ Service::mouse_click_event (const db::DPoint &p, unsigned int buttons, bool prio if (ee.any) { // begin the transaction - tl_assert (! manager ()->transacting ()); - manager ()->transaction (tl::to_string (tr ("Create ruler"))); + if (manager ()) { + tl_assert (! manager ()->transacting ()); + manager ()->transaction (tl::to_string (tr ("Create ruler"))); + } m_current = ant::Object (ee.first, ee.second, 0, tpl); show_message (); @@ -1576,7 +1582,9 @@ Service::mouse_click_event (const db::DPoint &p, unsigned int buttons, bool prio insert_ruler (m_current, true); // end the transaction - manager ()->commit (); + if (manager ()) { + manager ()->commit (); + } } @@ -1603,8 +1611,10 @@ Service::mouse_click_event (const db::DPoint &p, unsigned int buttons, bool prio // create the ruler object // begin the transaction - tl_assert (! manager ()->transacting ()); - manager ()->transaction (tl::to_string (tr ("Create ruler"))); + if (manager ()) { + tl_assert (! manager ()->transacting ()); + manager ()->transaction (tl::to_string (tr ("Create ruler"))); + } show_message (); @@ -1615,7 +1625,9 @@ Service::mouse_click_event (const db::DPoint &p, unsigned int buttons, bool prio clear_transient_selection (); // end the transaction - manager ()->commit (); + if (manager ()) { + manager ()->commit (); + } } @@ -2256,9 +2268,13 @@ Service::menu_activated (const std::string &symbol) if (symbol == "ant::clear_all_rulers_internal") { clear_rulers (); } else if (symbol == "ant::clear_all_rulers") { - manager ()->transaction (tl::to_string (tr ("Clear all rulers"))); + if (manager ()) { + manager ()->transaction (tl::to_string (tr ("Clear all rulers"))); + } clear_rulers (); - manager ()->commit (); + if (manager ()) { + manager ()->commit (); + } } else { lay::Plugin::menu_activated (symbol); }