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 00000000..c317b75e Binary files /dev/null and b/klayout/drc/testing/testcases/unit/mcell.gds differ 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