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 176642309..a6c99e04d 100644 --- a/src/plugins/streamers/lefdef/unit_tests/dbLEFDEFImportTests.cc +++ b/src/plugins/streamers/lefdef/unit_tests/dbLEFDEFImportTests.cc @@ -326,26 +326,26 @@ TEST(lef8) TEST(def1) { - run_test (_this, "def1", "lef:in.lef+def:in.def", "au2.oas.gz", default_options ()); + run_test (_this, "def1", "lef:in.lef+def:in.def", "au2_2.oas.gz", default_options ()); } TEST(def2) { db::LEFDEFReaderOptions options = default_options (); options.set_cell_outline_layer ("OUTLINE (10/0)"); - run_test (_this, "def2", "lef:0.lef+lef:1.lef+def:in.def.gz", "au.oas.gz", options); + run_test (_this, "def2", "lef:0.lef+lef:1.lef+def:in.def.gz", "au_2.oas.gz", options); } TEST(def3) { db::LEFDEFReaderOptions options = default_options (); options.set_cell_outline_layer ("OUTLINE (13/0)"); - run_test (_this, "def3", "lef:in.lef+def:in.def", "au.oas.gz", options); + run_test (_this, "def3", "lef:in.lef+def:in.def", "au_2.oas.gz", options); } TEST(def4) { - run_test (_this, "def4", "lef:in.lef+def:in.def", "au2.oas.gz", default_options ()); + run_test (_this, "def4", "lef:in.lef+def:in.def", "au2_2.oas.gz", default_options ()); } TEST(def5) @@ -355,17 +355,17 @@ TEST(def5) TEST(def6) { - run_test (_this, "def6", "lef:cells.lef+lef:tech.lef+def:in.def.gz", "au-new.oas.gz", default_options ()); + run_test (_this, "def6", "lef:cells.lef+lef:tech.lef+def:in.def.gz", "au-new_2.oas.gz", default_options ()); } TEST(def7) { db::LEFDEFReaderOptions options = default_options (); options.set_placement_blockage_layer ("PLACEMENT_BLK (11/0)"); - run_test (_this, "def7", "lef:cells.lef+lef:tech.lef+def:in.def.gz", "au-new.oas.gz", options); + run_test (_this, "def7", "lef:cells.lef+lef:tech.lef+def:in.def.gz", "au-new_2.oas.gz", options); options.set_placement_blockage_layer ("PLACEMENT_BLK (60/0)"); - run_test (_this, "def7", "map:in.map+lef:cells.lef+lef:tech.lef+def:in.def.gz", "au2_with_map_file-new.oas.gz", options); + run_test (_this, "def7", "map:in.map+lef:cells.lef+lef:tech.lef+def:in.def.gz", "au2_with_map_file-new_2.oas.gz", options); } TEST(def8) @@ -377,9 +377,9 @@ TEST(def9) { db::LEFDEFReaderOptions options = default_options (); options.set_separate_groups (true); - run_test (_this, "def9", "lef:tech.lef+lef:cells_modified.lef+def:in.def", "au-new.oas.gz", options); + run_test (_this, "def9", "lef:tech.lef+lef:cells_modified.lef+def:in.def", "au-new_2.oas.gz", options); - run_test (_this, "def9", "lef:tech.lef+lef:cells_modified.lef+def:in.def", "au_nogroups-new.oas.gz", default_options ()); + run_test (_this, "def9", "lef:tech.lef+lef:cells_modified.lef+def:in.def", "au_nogroups-new_2.oas.gz", default_options ()); } TEST(def10) @@ -413,7 +413,7 @@ TEST(def14) { db::LEFDEFReaderOptions opt = default_options (); opt.set_macro_resolution_mode (1); - run_test (_this, "def14", "map:test.map+lef:tech.lef+lef:stdlib.lef+def:test.def", "au.oas.gz", opt); + run_test (_this, "def14", "map:test.map+lef:tech.lef+lef:stdlib.lef+def:test.def", "au_2.oas.gz", opt); } TEST(def15) @@ -429,7 +429,7 @@ TEST(def16) // (complete example) db::LEFDEFReaderOptions opt = default_options (); opt.set_macro_resolution_mode (1); - run_test (_this, "def16", "lef:a.lef+lef:tech.lef+def:a.def", "au.oas.gz", opt); + run_test (_this, "def16", "lef:a.lef+lef:tech.lef+def:a.def", "au_2.oas.gz", opt); } TEST(100) @@ -886,6 +886,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 000000000..3c942ff58 Binary files /dev/null and b/testdata/lefdef/issue-1307c/au.oas differ diff --git a/testdata/lefdef/issue-1307c/in.def b/testdata/lefdef/issue-1307c/in.def new file mode 100644 index 000000000..7a79e05f9 --- /dev/null +++ b/testdata/lefdef/issue-1307c/in.def @@ -0,0 +1,34 @@ +VERSION 5.7 ; +DIVIDERCHAR "/" ; +BUSBITCHARS "[]" ; +DESIGN test ; +UNITS DISTANCE MICRONS 2000 ; + +DIEAREA ( 0 0 ) ( 37520 7840 ) ; + +PINS 12 ; +- VDD_PIN + NET VDD + SPECIAL + DIRECTION INOUT + USE POWER + + LAYER M2 ( -320 0 ) ( 320 37520 ) ++ FIXED ( 37520 3920 ) W ; +- VSS_PIN + NET VSS + SPECIAL + DIRECTION INOUT + USE GROUND + + PORT + + LAYER M2 ( -18760 0 ) ( 18760 640 ) ++ FIXED ( 18760 -320 ) N + + PORT + + LAYER M2 ( -18760 0 ) ( 18760 640 ) ++ FIXED ( 18760 8160 ) S + ; +END PINS + +SPECIALNETS 4 ; +- VSS ( * VSS ) ++ ROUTED M2 640 + SHAPE FOLLOWPIN ( 0 0 ) ( 37520 * ) +NEW M2 640 + SHAPE FOLLOWPIN ( 0 7840 ) ( 37520 * ) + + USE GROUND + ; +- VDD ( * VDD ) ++ ROUTED M2 640 + SHAPE FOLLOWPIN ( 0 3920 ) ( 37520 * ) + + USE POWER + ; +END SPECIALNETS +END DESIGN diff --git a/testdata/lefdef/issue-1307c/in.lef b/testdata/lefdef/issue-1307c/in.lef new file mode 100644 index 000000000..3e497ca36 --- /dev/null +++ b/testdata/lefdef/issue-1307c/in.lef @@ -0,0 +1,63 @@ +VERSION 5.7 ; + +BUSBITCHARS "[]" ; +DIVIDERCHAR "/" ; +UNITS + DATABASE MICRONS 1000 ; +END UNITS + +MANUFACTURINGGRID 0.002 ; + +USEMINSPACING OBS OFF ; + +LAYER overlap + TYPE OVERLAP ; +END overlap + +LAYER contact + TYPE CUT ; +END contact + +LAYER metal1 + TYPE ROUTING ; + DIRECTION HORIZONTAL ; +END metal1 + +LAYER via1 + TYPE CUT ; +END via1 + +LAYER metal2 + TYPE ROUTING ; + DIRECTION VERTICAL ; +END metal2 + +LAYER via2 + TYPE CUT ; +END via2 + +LAYER metal3 + TYPE ROUTING ; + DIRECTION HORIZONTAL ; +END metal3 + +LAYER via3 + TYPE CUT ; +END via3 + +LAYER metal4 + TYPE ROUTING ; + DIRECTION VERTICAL ; +END metal4 + +LAYER via4 + TYPE CUT ; +END via4 + +LAYER metal5 + TYPE ROUTING ; + DIRECTION HORIZONTAL ; +END metal5 + + +END LIBRARY diff --git a/testdata/lefdef/issue-489/au.oas b/testdata/lefdef/issue-489/au.oas index 436fa32c6..a7cae1c1e 100644 Binary files a/testdata/lefdef/issue-489/au.oas and b/testdata/lefdef/issue-489/au.oas differ diff --git a/testdata/lefdef/lef-skips-end-library/au.oas b/testdata/lefdef/lef-skips-end-library/au.oas index 436fa32c6..a7cae1c1e 100644 Binary files a/testdata/lefdef/lef-skips-end-library/au.oas and b/testdata/lefdef/lef-skips-end-library/au.oas differ diff --git a/testdata/lefdef/mapfile/au.oas.gz b/testdata/lefdef/mapfile/au.oas.gz index ceadab980..6ab12cc90 100644 Binary files a/testdata/lefdef/mapfile/au.oas.gz and b/testdata/lefdef/mapfile/au.oas.gz differ diff --git a/testdata/lefdef/masks-1/au.oas.gz b/testdata/lefdef/masks-1/au.oas.gz index 4d8805a01..63d18bc9a 100644 Binary files a/testdata/lefdef/masks-1/au.oas.gz and b/testdata/lefdef/masks-1/au.oas.gz differ diff --git a/testdata/lefdef/masks-1/au_map.oas.gz b/testdata/lefdef/masks-1/au_map.oas.gz index e158ced2c..a9e1e8f44 100644 Binary files a/testdata/lefdef/masks-1/au_map.oas.gz and b/testdata/lefdef/masks-1/au_map.oas.gz differ diff --git a/testdata/lefdef/masks-1/au_plugin_alt_lef.oas.gz b/testdata/lefdef/masks-1/au_plugin_alt_lef.oas.gz index 9f2f877cc..854bca284 100644 Binary files a/testdata/lefdef/masks-1/au_plugin_alt_lef.oas.gz and b/testdata/lefdef/masks-1/au_plugin_alt_lef.oas.gz differ diff --git a/testdata/lefdef/masks-1/au_plugin_def.oas.gz b/testdata/lefdef/masks-1/au_plugin_def.oas.gz index dd9c9bc00..5edbb0bbe 100644 Binary files a/testdata/lefdef/masks-1/au_plugin_def.oas.gz and b/testdata/lefdef/masks-1/au_plugin_def.oas.gz differ