From 56dead96622d45b550a8feeac9eb0beb0c9c791c Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sun, 23 Aug 2020 19:20:53 +0200 Subject: [PATCH] LEF/DEF component maskshift: some implementation tuning and test updates. --- .../lefdef/db_plugin/dbLEFDEFImporter.cc | 4 +- .../lefdef/unit_tests/dbLEFDEFImportTests.cc | 6 +- testdata/lefdef/masks-2/au.oas.gz | Bin 3217 -> 3190 bytes testdata/lefdef/masks-2/in.def | 44 ++++++++++++++ testdata/lefdef/masks-2/in.lef | 56 ++++++++++++++++++ testdata/lefdef/masks-2/in.map | 56 ++++++++++++++++++ testdata/lefdef/masks-2/in_tech.lef | 41 +++++++++++++ 7 files changed, 203 insertions(+), 4 deletions(-) create mode 100644 testdata/lefdef/masks-2/in.def create mode 100644 testdata/lefdef/masks-2/in.lef create mode 100644 testdata/lefdef/masks-2/in.map create mode 100644 testdata/lefdef/masks-2/in_tech.lef diff --git a/src/plugins/streamers/lefdef/db_plugin/dbLEFDEFImporter.cc b/src/plugins/streamers/lefdef/db_plugin/dbLEFDEFImporter.cc index 6ec7ae99b..9187412d6 100644 --- a/src/plugins/streamers/lefdef/db_plugin/dbLEFDEFImporter.cc +++ b/src/plugins/streamers/lefdef/db_plugin/dbLEFDEFImporter.cc @@ -295,8 +295,10 @@ unsigned int GeometryBasedLayoutGenerator::mask_for (const std::string &ln, unsigned int m, unsigned int mshift, const LEFDEFNumberOfMasks *nm) const { // for FIXEDMASK we don't do any mask shifting - if (m_fixedmask || m == 0 || mshift == 0 || !nm) { + if (m_fixedmask || mshift == 0) { return m; + } else if (m == 0) { + return mshift; } else { return (m + mshift - 2) % nm->number_of_masks (ln) + 1; } diff --git a/src/plugins/streamers/lefdef/unit_tests/dbLEFDEFImportTests.cc b/src/plugins/streamers/lefdef/unit_tests/dbLEFDEFImportTests.cc index e082869a8..a5af38f95 100644 --- a/src/plugins/streamers/lefdef/unit_tests/dbLEFDEFImportTests.cc +++ b/src/plugins/streamers/lefdef/unit_tests/dbLEFDEFImportTests.cc @@ -274,17 +274,17 @@ TEST(14) TEST(15) { - run_test (_this, "def6", "lef:cells.lef+lef:tech.lef+def:in.def.gz", "au.oas.gz", default_options ()); + run_test (_this, "def6", "lef:cells.lef+lef:tech.lef+def:in.def.gz", "au-new.oas.gz", default_options ()); } TEST(16) { 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.oas.gz", options); + run_test (_this, "def7", "lef:cells.lef+lef:tech.lef+def:in.def.gz", "au-new.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", "au_with_map_file.oas.gz", options); + run_test (_this, "def7", "map:in.map+lef:cells.lef+lef:tech.lef+def:in.def.gz", "au_with_map_file-new.oas.gz", options); } TEST(17) diff --git a/testdata/lefdef/masks-2/au.oas.gz b/testdata/lefdef/masks-2/au.oas.gz index 4f2623eabd324d2091876e892aae4768c35662ba..0cceaa128b5334ba2ddfbc2ed792871b2f12f4b1 100644 GIT binary patch delta 125 zcmbOz`AuSj1gBJ5MP;Q(GxI4%k!B`lUS5&gjHehOLX&klFNoyzFxvDo+KOCezQkzL z!zeP5wUueI9G9fXB}TXm6Hr39n1PvbvJY1}A5du?NabYKON>CZ7q}F7VY2lPcly4!KEM|oXo(;C~}$k5+g*(=BHc}8381b B9XkL3 diff --git a/testdata/lefdef/masks-2/in.def b/testdata/lefdef/masks-2/in.def new file mode 100644 index 000000000..2c162e44b --- /dev/null +++ b/testdata/lefdef/masks-2/in.def @@ -0,0 +1,44 @@ + +VERSION 5.8 ; +DIVIDERCHAR "/" ; +BUSBITCHARS "[]" ; +DESIGN mapfile ; +UNITS DISTANCE MICRONS 1000 ; + +DIEAREA ( 0 0 ) ( 3000 3000 ) ; + +COMPONENTMASKSHIFT M2 M1 M0PO ; + +COMPONENTS 3 ; + +- comp1 mask_macro + + PLACED ( 0 0 ) N ; +- comp1 mask_macro + + MASKSHIFT 2 + + PLACED ( 1000 0 ) N ; +- comp1 mask_macro + + MASKSHIFT 221 + + PLACED ( 2000 0 ) N ; + +- comp1 nomask_macro + + PLACED ( 0 1000 ) N ; +- comp1 nomask_macro + + MASKSHIFT 2 + + PLACED ( 1000 1000 ) N ; +- comp1 nomask_macro + + MASKSHIFT 221 + + PLACED ( 2000 1000 ) N ; + +- comp1 fixedmask_macro + + PLACED ( 0 2000 ) N ; +- comp1 fixedmask_macro + + MASKSHIFT 2 + + PLACED ( 1000 2000 ) N ; +- comp1 fixedmask_macro + + MASKSHIFT 221 + + PLACED ( 2000 2000 ) N ; + +END COMPONENTS ; + +END DESIGN + diff --git a/testdata/lefdef/masks-2/in.lef b/testdata/lefdef/masks-2/in.lef new file mode 100644 index 000000000..89cb2d9f0 --- /dev/null +++ b/testdata/lefdef/masks-2/in.lef @@ -0,0 +1,56 @@ + +MACRO nomask_macro + CLASS CORE ; + ORIGIN 0.3 0.3 ; + SIZE 0.6 BY 0.6 ; + PIN Z + PORT + LAYER M0PO ; + RECT -0.07 -0.03 0.07 0.03 ; + LAYER M1 ; + RECT 0.07 -0.03 0.13 0.03 ; + LAYER M2 ; + RECT -0.13 -0.03 -0.07 0.03 ; + VIA 0.0 0.2 square_nomask ; + VIA 0.0 -0.2 square_nomask ; + END + END Z +END nomask_macro + +MACRO mask_macro + CLASS CORE ; + ORIGIN 0.3 0.3 ; + SIZE 0.6 BY 0.6 ; + PIN Z + PORT + LAYER M0PO ; + RECT MASK 2 -0.07 -0.03 0.07 0.03 ; + LAYER M1 ; + RECT MASK 2 0.07 -0.03 0.13 0.03 ; + LAYER M2 ; + RECT MASK 1 -0.13 -0.03 -0.07 0.03 ; + VIA MASK 200 0.0 0.2 square ; + VIA 0.0 -0.2 square ; + END + END Z +END mask_macro + +MACRO fixedmask_macro + CLASS CORE ; + FIXEDMASK ; + ORIGIN 0.3 0.3 ; + SIZE 0.6 BY 0.6 ; + PIN Z + PORT + LAYER M0PO ; + RECT MASK 2 -0.07 -0.03 0.07 0.03 ; + LAYER M1 ; + RECT MASK 2 0.07 -0.03 0.13 0.03 ; + LAYER M2 ; + RECT MASK 1 -0.13 -0.03 -0.07 0.03 ; + VIA MASK 200 0.0 0.2 square ; + VIA 0.0 -0.2 square ; + END + END Z +END fixedmask_macro + diff --git a/testdata/lefdef/masks-2/in.map b/testdata/lefdef/masks-2/in.map new file mode 100644 index 000000000..4981df24d --- /dev/null +++ b/testdata/lefdef/masks-2/in.map @@ -0,0 +1,56 @@ +DIEAREA ALL 4 0 +NAME M0PO 1 1 +M0PO LEFPIN,PIN 1 2 +M0PO VIA 1 3 +M0PO NET:MASK:1 1 100 +M0PO NET:MASK:2 1 200 +M0PO SPNET:MASK:1 1 101 +M0PO SPNET:MASK:2 1 201 +M0PO VIA:MASK:1 1 102 +M0PO VIA:MASK:2 1 202 +M0PO LEFPIN,PIN:MASK:1 1 110 +M0PO LEFPIN,PIN:MASK:2 1 210 +NAME VIA0 2 1 +VIA0 LEFPIN,PIN 2 2 +VIA0 VIA 2 3 +VIA0 NET:MASK:1 2 100 +VIA0 NET:MASK:2 2 200 +VIA0 SPNET:MASK:1 2 101 +VIA0 SPNET:MASK:2 2 201 +VIA0 VIA:MASK:1 2 102 +VIA0 VIA:MASK:2 2 202 +VIA0 LEFPIN,PIN:MASK:1 2 110 +VIA0 LEFPIN,PIN:MASK:2 2 210 +NAME M1 3 1 +M1 PIN,LEFPIN 3 2 +M1 VIA 3 3 +M1 NET:MASK:1 3 100 +M1 NET:MASK:2 3 200 +M1 SPNET:MASK:1 3 101 +M1 SPNET:MASK:2 3 201 +M1 VIA:MASK:1 3 102 +M1 VIA:MASK:2 3 202 +M1 PIN,LEFPIN:MASK:1 3 110 +M1 PIN,LEFPIN:MASK:2 3 210 +NAME VIA1 4 1 +VIA1 PIN,LEFPIN 4 2 +VIA1 VIA 4 3 +VIA1 NET:MASK:1 4 100 +VIA1 NET:MASK:2 4 200 +VIA1 SPNET:MASK:1 4 101 +VIA1 SPNET:MASK:2 4 201 +VIA1 VIA:MASK:1 4 102 +VIA1 VIA:MASK:2 4 202 +VIA1 PIN,LEFPIN:MASK:1 4 110 +VIA1 PIN,LEFPIN:MASK:2 4 210 +NAME M2 5 1 +M2 PIN,LEFPIN 5 2 +M2 VIA 5 3 +M2 NET:MASK:1 5 100 +M2 NET:MASK:2 5 200 +M2 SPNET:MASK:1 5 101 +M2 SPNET:MASK:2 5 201 +M2 VIA:MASK:1 5 102 +M2 VIA:MASK:2 5 202 +M2 PIN,LEFPIN:MASK:1 5 110 +M2 PIN,LEFPIN:MASK:2 5 210 diff --git a/testdata/lefdef/masks-2/in_tech.lef b/testdata/lefdef/masks-2/in_tech.lef new file mode 100644 index 000000000..4414b627f --- /dev/null +++ b/testdata/lefdef/masks-2/in_tech.lef @@ -0,0 +1,41 @@ +LAYER M0PO + TYPE MASTERSLICE ; + WIDTH 0.02 ; + MASK 2 ; +END M0PO +LAYER VIA0 + TYPE CUT ; + MASK 2 ; +END VIA0 +LAYER M1 + TYPE MASTERSLICE ; + WIDTH 0.024 ; + MASK 2 ; +END M1 +LAYER VIA1 + TYPE CUT ; + MASK 2 ; +END VIA1 +LAYER M2 + TYPE MASTERSLICE ; + WIDTH 0.03 ; + MASK 2 ; +END M2 + +VIA square + LAYER M0PO ; + RECT MASK 2 -0.06 -0.06 0.06 0.06 ; + LAYER VIA0 ; + RECT -0.06 -0.06 0.06 0.06 ; + LAYER M1 ; + RECT MASK 1 -0.06 -0.06 0.06 0.06 ; +END square + +VIA square_nomask + LAYER M0PO ; + RECT -0.06 -0.06 0.06 0.06 ; + LAYER VIA0 ; + RECT -0.06 -0.06 0.06 0.06 ; + LAYER M1 ; + RECT -0.06 -0.06 0.06 0.06 ; +END square_nomask