################################################################################################
# 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 BEOL

    if METAL_LEVEL == '5LM' || METAL_LEVEL == '6LM'
        #================================================
        #---------------------METAL5---------------------
        #================================================ 

        # Rule M5.1: min. metal5 width is 0.28µm
        logger.info('Executing rule M5.1')
        m51_l1  = metal5.width(0.28.um, euclidian).polygons(0.001)
        m51_l1.output('M5.1', 'M5.1 : min. metal5 width : 0.28µm')
        m51_l1.forget 

        # Rule M5.2a: min. metal5 spacing is 0.28µm
        logger.info('Executing rule M5.2a')
        m52a_l1  = metal5.space(0.28.um, euclidian).polygons(0.001)
        m52a_l1.output('M5.2a', 'M5.2a : min. metal5 spacing : 0.28µm')
        m52a_l1.forget 

        # Rule M5.2b: Space to wide Metal5 (length & width > 10um) is 0.3µm
        logger.info('Executing rule M5.2b')
        m52b_l1  = metal5.separation(metal5.not_interacting(metal5.edges.with_length(nil, 10.um)), 0.3.um, euclidian).polygons(0.001)
        m52b_l1.output('M5.2b', 'M5.2b : Space to wide Metal5 (length & width > 10um) : 0.3µm')
        m52b_l1.forget 

        # Rule M5.3: Minimum metal5 area is 0.1444µm²
        logger.info('Executing rule M5.3')
        m53_l1  = metal5.with_area(nil, 0.1444.um)
        m53_l1.output('M5.3', 'M5.3 : Minimum metal5 area : 0.1444µm²')
        m53_l1.forget
    end #METAL_LEVEL
end #BEOL
