From 97061f6e13c4d01368053dfe9ec842812fd84ec1 Mon Sep 17 00:00:00 2001 From: FaragElsayed2 Date: Mon, 3 Apr 2023 17:07:20 +0200 Subject: [PATCH] Adding MCELL table for GF180MCU DRC --- klayout/drc/rule_decks/mcell.drc | 47 +++++ klayout/drc/testing/testcases/unit/mcell.gds | Bin 0 -> 17168 bytes klayout/drc/testing/testcases/unit/mcell.svg | 184 +++++++++++++++++++ 3 files changed, 231 insertions(+) create mode 100644 klayout/drc/rule_decks/mcell.drc create mode 100644 klayout/drc/testing/testcases/unit/mcell.gds create mode 100644 klayout/drc/testing/testcases/unit/mcell.svg diff --git a/klayout/drc/rule_decks/mcell.drc b/klayout/drc/rule_decks/mcell.drc new file mode 100644 index 00000000..345f9698 --- /dev/null +++ b/klayout/drc/rule_decks/mcell.drc @@ -0,0 +1,47 @@ +# frozen_string_literal: true + +################################################################################################ +# Copyright 2022 GlobalFoundries PDK Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +################################################################################################ + +if FEOL + #================================================ + #---------------------MCELL---------------------- + #================================================ + + # Rule MC.1: min. mcell width is 0.4µm + logger.info('Executing rule MC.1') + mc1_l1 = mcell_feol_mk.width(0.4.um, euclidian) + mc1_l1.output('MC.1', 'MC.1 : min. mcell width : 0.4µm') + mc1_l1.forget + + # Rule MC.2: min. mcell spacing is 0.4µm + logger.info('Executing rule MC.2') + mc2_l1 = mcell_feol_mk.space(0.4.um, euclidian) + mc2_l1.output('MC.2', 'MC.2 : min. mcell spacing : 0.4µm') + mc2_l1.forget + + # Rule MC.3: Minimum Mcell area is 0.35µm² + logger.info('Executing rule MC.3') + mc3_l1 = mcell_feol_mk.with_area(nil, 0.35.um) + mc3_l1.output('MC.3', 'MC.3 : Minimum Mcell area : 0.35µm²') + mc3_l1.forget + + # Rule MC.4: Minimum area enclosed by Mcell is 0.35µm² + logger.info('Executing rule MC.4') + mc4_l1 = mcell_feol_mk.holes.with_area(nil, 0.35.um) + mc4_l1.output('MC.4', 'MC.4 : Minimum area enclosed by Mcell : 0.35µm²') + mc4_l1.forget +end diff --git a/klayout/drc/testing/testcases/unit/mcell.gds b/klayout/drc/testing/testcases/unit/mcell.gds new file mode 100644 index 0000000000000000000000000000000000000000..c317b75e7fde27fcb379b49dcb52eb9aabead1e0 GIT binary patch literal 17168 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 D%A?U_ literal 0 HcmV?d00001 diff --git a/klayout/drc/testing/testcases/unit/mcell.svg b/klayout/drc/testing/testcases/unit/mcell.svg new file mode 100644 index 00000000..01d5eb71 --- /dev/null +++ b/klayout/drc/testing/testcases/unit/mcell.svg @@ -0,0 +1,184 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +MC.1 +MC.1 +MC.1 +MC.1 +MC.1 +MC.1 +MC.1 +MC.1 +MC.1 +MC.1 +MC.1 +MC.2 +MC.2 +MC.2 +MC.4 +Basic +Larger +MC.3 +Basic +Larger +Cor2Cor_90Deg +Notch +45deg +Enclose +Corner2Corner +Corner2Edge +Singular +Overlap +Touch +Space +MC.2 +Cor2Cor_90Deg +Notch +45deg +Enclose +Corner2Corner +Corner2Edge +Singular +Overlap +Touch +Space +Corner2Edge +Width_45deg +Corner_45Deg +Corner2Corner +Width +Default Pass. Minus 2xMinGrid to Fail +LIMITATION: Please ensure width*sqrt(2) < width+statusOvlpTc +Default Pass. Minus 2xMinGrid to Fail +MC.1 +Corner2Edge +Width_45deg +Corner_45Deg +Corner2Corner +Singular +Width +Default Pass. Minus 2xMinGrid to Fail +LIMITATION: Please ensure width*sqrt(2) < width+statusOvlpTc +Default Pass. Minus 2xMinGrid to Fail +MC.4 +MC.4 +MC.4 +MC.4 +MC.3 +MC.3 +MC.3 +MC.3 +MC.2 +MC.2 +MC.2 +MC.2 +MC.2 +MC.2 +MC.2 +MC.2 +MC.2 + + \ No newline at end of file