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

    #================================================
    #---------------------METAL1---------------------
    #================================================

    # Rule M1.1: min. metal1 width is 0.23µm
    logger.info('Executing rule M1.1')
    m11_l1  = metal1.not(sramcore).width(0.23.um, euclidian).polygons(0.001)
    m11_l1.output('M1.1', 'M1.1 : min. metal1 width : 0.23µm')
    m11_l1.forget

    # Rule M1.2a: min. metal1 spacing is 0.23µm
    logger.info('Executing rule M1.2a')
    m12a_l1  = metal1.space(0.23.um, euclidian).polygons(0.001)
    m12a_l1.output('M1.2a', 'M1.2a : min. metal1 spacing : 0.23µm')
    m12a_l1.forget

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

    # Rule M1.3: Minimum Metal1 area is 0.1444µm²
    logger.info('Executing rule M1.3')
    m13_l1  = metal1.with_area(nil, 0.1444.um)
    m13_l1.output('M1.3', 'M1.3 : Minimum Metal1 area : 0.1444µm²')
    m13_l1.forget
        
end #BEOL
