From 44901f88859fd98251633cdf04cd0911067b4cc8 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Thu, 3 Aug 2023 23:03:39 +0200 Subject: [PATCH] Fixed part of issue #1307: using pin names for the pin labels in DEF importer, generating pin names on pin name property + generating net names on net name property for pin shapes. --- .../lefdef/db_plugin/dbDEFImporter.cc | 14 ++-- .../lefdef/unit_tests/dbLEFDEFImportTests.cc | 9 +++ testdata/lefdef/issue-1307c/au.oas | Bin 0 -> 582 bytes testdata/lefdef/issue-1307c/in.def | 34 ++++++++++ testdata/lefdef/issue-1307c/in.lef | 63 ++++++++++++++++++ 5 files changed, 115 insertions(+), 5 deletions(-) create mode 100644 testdata/lefdef/issue-1307c/au.oas create mode 100644 testdata/lefdef/issue-1307c/in.def create mode 100644 testdata/lefdef/issue-1307c/in.lef diff --git a/src/plugins/streamers/lefdef/db_plugin/dbDEFImporter.cc b/src/plugins/streamers/lefdef/db_plugin/dbDEFImporter.cc index 1a58a5061..e68e60bb6 100644 --- a/src/plugins/streamers/lefdef/db_plugin/dbDEFImporter.cc +++ b/src/plugins/streamers/lefdef/db_plugin/dbDEFImporter.cc @@ -1153,8 +1153,7 @@ DEFImporter::read_pins (db::Layout &layout, db::Cell &design, double scale) { while (test ("-")) { - take (); // pin name - + std::string pin_name = get (); std::string net; std::string dir; std::map , std::vector > geometry; @@ -1281,7 +1280,7 @@ DEFImporter::read_pins (db::Layout &layout, db::Cell &design, double scale) if (flush || ! peek ("+")) { // TODO: put a label on every single object? - std::string label = net; + std::string label = pin_name; /* don't add the direction currently, a name is sufficient if (! dir.empty ()) { label += ":"; @@ -1296,9 +1295,14 @@ DEFImporter::read_pins (db::Layout &layout, db::Cell &design, double scale) if (! dl.empty ()) { db::properties_id_type prop_id = 0; - if (produce_pin_props ()) { + if (produce_pin_props () || produce_net_props ()) { db::PropertiesRepository::properties_set props; - props.insert (std::make_pair (pin_prop_name_id (), tl::Variant (label))); + if (produce_pin_props ()) { + props.insert (std::make_pair (pin_prop_name_id (), tl::Variant (label))); + } + if (produce_net_props ()) { + props.insert (std::make_pair (net_prop_name_id (), tl::Variant (net))); + } prop_id = layout.properties_repository ().properties_id (props); } diff --git a/src/plugins/streamers/lefdef/unit_tests/dbLEFDEFImportTests.cc b/src/plugins/streamers/lefdef/unit_tests/dbLEFDEFImportTests.cc index 788770b82..f2bbd750d 100644 --- a/src/plugins/streamers/lefdef/unit_tests/dbLEFDEFImportTests.cc +++ b/src/plugins/streamers/lefdef/unit_tests/dbLEFDEFImportTests.cc @@ -882,6 +882,15 @@ TEST(131_patternname) run_test (_this, "patternname", "map:v.map+lef:v.lef+def:v.def", "au.oas.gz", default_options (), false); } +TEST(132_issue1307_pin_names) +{ + db::LEFDEFReaderOptions opt = default_options (); + opt.set_produce_pin_names (true); + opt.set_pin_property_name (2); + opt.set_cell_outline_layer ("OUTLINE (13/0)"); + run_test (_this, "issue-1307c", "lef:in.lef+def:in.def", "au.oas", opt, false); +} + TEST(200_lefdef_plugin) { db::Layout ly; diff --git a/testdata/lefdef/issue-1307c/au.oas b/testdata/lefdef/issue-1307c/au.oas new file mode 100644 index 0000000000000000000000000000000000000000..3c942ff581117e37c7597cce84535cf1598cb0f0 GIT binary patch literal 582 zcmY!lcJ=kt^>+;R4CduxWH!_@V0gjKC?n3q!6L)YEF;ds&!EJR>XUoMnybM;fb~F; z;|1o9>4KX(8~>b$4qRRSKbqrK6n{_8gJqfL$jXNzHa^&6B!{rtFC$hI5 zKl>z`Wr<|P0uu&apbwJ6g*~68S{QbIY?`yej$c?gnE7?fQXlr2J0$f^aGqRYTx9Uc z__Rim!N<)VMLrW4H%a`IJXoXlu*gl$ZGjuxL!Jdu8^d|HB_bsy8fWRBaGcWl(ZHY~ g@(cqr*fUIw2bdVAGBPSN7BenqWMpU