diff --git a/src/plugins/streamers/lefdef/db_plugin/dbLEFImporter.cc b/src/plugins/streamers/lefdef/db_plugin/dbLEFImporter.cc index a3da23ab1..c4060aec4 100644 --- a/src/plugins/streamers/lefdef/db_plugin/dbLEFImporter.cc +++ b/src/plugins/streamers/lefdef/db_plugin/dbLEFImporter.cc @@ -1046,9 +1046,9 @@ LEFImporter::do_read (db::Layout &layout) if (test ("END")) { - // END LIBRARY terminates the file expect ("LIBRARY"); - break; + // END LIBRARY should terminate the file, but we allow to continue, so we can cat LEF files: + // break; } else if (test ("VERSION")) { diff --git a/src/plugins/streamers/lefdef/unit_tests/dbLEFDEFImportTests.cc b/src/plugins/streamers/lefdef/unit_tests/dbLEFDEFImportTests.cc index 593aa04d6..bc9526c93 100644 --- a/src/plugins/streamers/lefdef/unit_tests/dbLEFDEFImportTests.cc +++ b/src/plugins/streamers/lefdef/unit_tests/dbLEFDEFImportTests.cc @@ -512,3 +512,12 @@ TEST(113_masks_1) ) } +TEST(114_lef_skips_end_library) +{ + 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, "lef-skips-end-library", "lef:in.lef+def:in.def", "au.oas", opt, false); +} + diff --git a/testdata/lefdef/lef-skips-end-library/au.oas b/testdata/lefdef/lef-skips-end-library/au.oas new file mode 100644 index 000000000..436fa32c6 Binary files /dev/null and b/testdata/lefdef/lef-skips-end-library/au.oas differ diff --git a/testdata/lefdef/lef-skips-end-library/in.def b/testdata/lefdef/lef-skips-end-library/in.def new file mode 100644 index 000000000..6220e6ab0 --- /dev/null +++ b/testdata/lefdef/lef-skips-end-library/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 + NET VDD + SPECIAL + DIRECTION INOUT + USE POWER + + LAYER M2 ( -320 0 ) ( 320 37520 ) ++ FIXED ( 37520 3920 ) W ; +- VSS + 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/lef-skips-end-library/in.lef b/testdata/lefdef/lef-skips-end-library/in.lef new file mode 100644 index 000000000..26ff0b93c --- /dev/null +++ b/testdata/lefdef/lef-skips-end-library/in.lef @@ -0,0 +1,67 @@ +VERSION 5.7 ; + +BUSBITCHARS "[]" ; +DIVIDERCHAR "/" ; +UNITS + DATABASE MICRONS 1000 ; +END UNITS + +MANUFACTURINGGRID 0.002 ; + +USEMINSPACING OBS OFF ; + +END LIBRARY + +LAYER overlap + TYPE OVERLAP ; +END overlap + +LAYER contact + TYPE CUT ; +END contact + +END LIBRARY + +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 + +END LIBRARY +LAYER via4 + TYPE CUT ; +END via4 + +LAYER metal5 + TYPE ROUTING ; + DIRECTION HORIZONTAL ; +END metal5 + +END LIBRARY