From d8c00deb4017c570afba41aa3c6b144d44659bd9 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sat, 20 Jan 2024 21:33:35 +0100 Subject: [PATCH] Fixed issue #1594 --- src/drc/drc/built-in-macros/_drc_netter.rb | 3 +- src/drc/unit_tests/drcSimpleTests.cc | 36 +++++++++++++++++++++ testdata/drc/issue_1594.drc | 15 +++++++++ testdata/drc/issue_1594.gds | Bin 0 -> 804 bytes testdata/drc/issue_1594_au.cir | 5 +++ 5 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 testdata/drc/issue_1594.drc create mode 100644 testdata/drc/issue_1594.gds create mode 100644 testdata/drc/issue_1594_au.cir diff --git a/src/drc/drc/built-in-macros/_drc_netter.rb b/src/drc/drc/built-in-macros/_drc_netter.rb index 99823336b5..1985cc67cc 100644 --- a/src/drc/drc/built-in-macros/_drc_netter.rb +++ b/src/drc/drc/built-in-macros/_drc_netter.rb @@ -702,7 +702,8 @@ def _make_data @l2n = RBA::LayoutToNetlist::new(@engine._dss) else layout = @engine.source.layout - @l2n = RBA::LayoutToNetlist::new(layout.top_cell.name, layout.dbu) + cell_name = @engine.source.cell_name + @l2n = RBA::LayoutToNetlist::new(cell_name, layout.dbu) end @l2n.name = "DRC" diff --git a/src/drc/unit_tests/drcSimpleTests.cc b/src/drc/unit_tests/drcSimpleTests.cc index 62d6201680..4fcba65e64 100644 --- a/src/drc/unit_tests/drcSimpleTests.cc +++ b/src/drc/unit_tests/drcSimpleTests.cc @@ -1617,3 +1617,39 @@ TEST(89_deep_with_mag_cop_size_aniso) run_test (_this, "89", true); } +TEST(90_issue1594_dual_top) +{ + std::string rs = tl::testdata (); + rs += "/drc/issue_1594.drc"; + + std::string input = tl::testdata (); + input += "/drc/issue_1594.gds"; + + std::string au = tl::testdata (); + au += "/drc/issue_1594_au.cir"; + + std::string output = this->tmp_file ("tmp.cir"); + + { + // Set some variables + lym::Macro config; + config.set_text (tl::sprintf ( + "$drc_force_gc = true\n" + "$drc_test_source = '%s'\n" + "$drc_test_target = '%s'\n" + , input, output) + ); + config.set_interpreter (lym::Macro::Ruby); + EXPECT_EQ (config.run (), 0); + } + + lym::Macro drc; + drc.load_from (rs); + EXPECT_EQ (drc.run (), 0); + + // verify + + CHECKPOINT (); + compare_netlists (_this, output, au); +} + diff --git a/testdata/drc/issue_1594.drc b/testdata/drc/issue_1594.drc new file mode 100644 index 0000000000..63d7ea7dce --- /dev/null +++ b/testdata/drc/issue_1594.drc @@ -0,0 +1,15 @@ +source($drc_test_source, "TOP1") + +# This is just a smoke test without actual devices + +l1 = input(1, 0) +l2 = input(2, 0) +l3 = input(3, 0) + +connect(l1, l2) +connect(l2, l3) + +writer = RBA::NetlistSpiceWriter::new + +netlist.write($drc_test_target, writer, "netlist") + diff --git a/testdata/drc/issue_1594.gds b/testdata/drc/issue_1594.gds new file mode 100644 index 0000000000000000000000000000000000000000..fa9036ee393b17ffb977ea98d46467d370e60667 GIT binary patch literal 804 zcma)3u}Z^G6g_z_c?lY&N`)dB92^6piwH$*aS;VGbSRx29sCFvH%CE-Zu$usoW;>k zaC9sVrP%28z9cURrJ)@j=W*UW_nvbf6olv_u!Q>s3r%dnhpOJ;33YMS1)9=1?%W-o zzdetRPUF4d&at9EvfI-7sA?%G(FG{`E z^107YYdJyML!;ptt9n`0#LvrscKFn(W z#f#dunDYatJ4j#iTJM1