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

    #================================================
    #----------------------SAB-----------------------
    #================================================ 

    # Rule SB.1: min. sab width is 0.43µm
    logger.info('Executing rule SB.1')
    sb1_l1  = sab.width(0.43.um, euclidian).polygons(0.001)
    sb1_l1.output('SB.1', 'SB.1 : min. sab width : 0.43µm')
    sb1_l1.forget 

    # Rule SB.2: min. sab spacing is 0.43µm
    logger.info('Executing rule SB.2')
    sb2_l1  = sab.outside(otp_mk).space(0.43.um, euclidian).polygons(0.001)
    sb2_l1.output('SB.2', 'SB.2 : min. sab spacing : 0.43µm')
    sb2_l1.forget 

    # Rule SB.3: Space from salicide block to unrelated COMP. is 0.22µm
    logger.info('Executing rule SB.3')
    sb3_l1  = sab.outside(comp).outside(otp_mk).separation(comp.outside(sab), 0.22.um, euclidian).polygons(0.001)
    sb3_l1.output('SB.3', 'SB.3 : Space from salicide block to unrelated COMP. : 0.22µm')
    sb3_l1.forget 

    # Rule SB.4: Space from salicide block to contact. is 0.22um
    # Rule SB.4: Space from salicide block to contact for OTP cell area (identified by OTP_MK) is 0.16µm
    logger.info('Executing rule SB.4')
    sb4_l1 = sab.outside(otp_mk).separation(contact, 0.22.um, euclidian).polygons(0.001)
    sb4_l2 = sab.not_outside(otp_mk).separation(contact, 0.16.um, euclidian).polygons(0.001)
    sb4_l3 = sab.and(contact)
    sb4_l = sb4_l1.or(sb4_l2).or(sb4_l3)
    sb4_l.output('SB.4', 'SB.4 : Space from salicide block to contact: 0.22.um , Space from salicide block to contact for OTP cell area (identified by OTP_MK): 0.16.um')
    sb4_l.forget
    sb4_l1.forget
    sb4_l2.forget

    # Rule SB.5a: Space from salicide block to unrelated Poly2 on field. is 0.3µm
    # Rule SB.5a: Space from salicide block to unrelated Poly2 on field for OTP cell area (identified by OTP_MK) is 0.28µm
    logger.info('Executing rule SB.5a')
    sb5a_l1  = sab.outside(poly2.not(comp)).outside(otp_mk).separation(poly2.not(comp).outside(sab), 0.3.um, euclidian).polygons(0.001)
    sb5a_l2  = sab.outside(poly2.not(comp)).not_outside(otp_mk).separation(poly2.not(comp).outside(sab), 0.28.um, euclidian).polygons(0.001)
    sb5a_l = sb5a_l1.or(sb5a_l2)
    sb5a_l.output('SB.5a', 'SB.5a : Space from salicide block to unrelated Poly2 on field : 0.3µm, Space from salicide block to unrelated Poly2 on field for OTP cell area (identified by OTP_MK): 0.28µm')
    sb5a_l.forget 
    sb5a_l1.forget 
    sb5a_l2.forget 

    # Rule SB.5b: Space from salicide block to unrelated Poly2 on COMP. is 0.4µm
    # Rule SB.5b: Space from salicide block to unrelated Poly2 on COMP for OTP cell area (identified by OTP_MK) is 0.26 um
    logger.info('Executing rule SB.5b')
    sb5b_l1  = sab.outside(tgate).outside(otp_mk).separation(tgate.outside(sab), 0.4.um, euclidian).polygons(0.001)
    sb5b_l2  = sab.outside(tgate).not_outside(otp_mk).separation(tgate.outside(sab), 0.26.um, euclidian).polygons(0.001)
    sb5b_l = sb5b_l1.or(sb5b_l2)
    sb5b_l.output('SB.5b', 'SB.5b : Space from salicide block to unrelated Poly2 on COMP : 0.4µm , Space from salicide block to unrelated Poly2 on COMP for OTP cell area (identified by OTP_MK): 0.26µm')
    sb5b_l.forget
    sb5b_l1.forget
    sb5b_l2.forget

    # Rule SB.6: Salicide block extension beyond related COMP. is 0.22µm
    logger.info('Executing rule SB.6')
    sb6_l1 = sab.enclosing(comp, 0.22.um, euclidian).polygons(0.001)
    sb6_l1.output('SB.6', 'SB.6 : Salicide block extension beyond related COMP. : 0.22µm')
    sb6_l1.forget

    # Rule SB.7: COMP extension beyond related salicide block. is 0.22µm
    logger.info('Executing rule SB.7')
    sb7_l1 = comp.enclosing(sab, 0.22.um, euclidian).polygons
    sb7_l1.output('SB.7', 'SB.7 : COMP extension beyond related salicide block. : 0.22µm')
    sb7_l1.forget

    # Rule SB.8: Non-salicided contacts are forbidden.
    logger.info('Executing rule SB.8')
    sb8_l1 = contact.and(sab)
    sb8_l1.output('SB.8', 'SB.8 : Non-salicided contacts are forbidden.')
    sb8_l1.forget

    # Rule SB.9: Salicide block extension beyond unsalicided Poly2 is 0.22µm
    # Rule SB.9: Salicide block extension beyond unsalicided Poly2 for OTP cell area (identified by OTP_MK) is 0.16µm
    logger.info('Executing rule SB.9')
    sb9_l1 = poly2.and(sab).enclosed(sab.outside(otp_mk), 0.22.um, euclidian).polygons
    sb9_l2 = poly2.and(sab).enclosed(sab.not_outside(otp_mk), 0.16.um, euclidian).polygons
    sb9_l = sb9_l1.or(sb9_l2)
    sb9_l.output('SB.9', 'SB.9 : Salicide block extension beyond unsalicided Poly2 : 0.22µm , Salicide block extension beyond unsalicided Poly2 for OTP cell area (identified by OTP_MK): 0.16µm')
    sb9_l.forget
    sb9_l1.forget
    sb9_l2.forget

    # Rule SB.10: Poly2 extension beyond related salicide block. is 0.22µm
    logger.info('Executing rule SB.10')
    sb10_l1 = poly2.enclosing(sab, 0.22.um, euclidian).polygons(0.001)
    sb10_l1.output('SB.10', 'SB.10 : Poly2 extension beyond related salicide block. : 0.22µm')
    sb10_l1.forget

    # Rule SB.11: Overlap with COMP. is 0.22µm
    # Rule SB.11: Overlap with COMP for OTP cell area (identified by OTP_MK) is 0.06µm
    logger.info('Executing rule SB.11')
    sb11_l1 = sab.outside(otp_mk).overlap(comp, 0.22.um, euclidian).polygons
    sb11_l2 = sab.not_outside(otp_mk).overlap(comp, 0.06.um, euclidian).polygons
    sb11_l = sb11_l1.or(sb11_l2)
    sb11_l.output('SB.11', 'SB.11 : Overlap with COMP : 0.22µm , Overlap with COMP for OTP cell area (identified by OTP_MK): 0.06µm')
    sb11_l1.forget
    sb11_l2.forget
    sb11_l.forget

    # Rule SB.12: Overlap with Poly2. is 0.22µm
    logger.info('Executing rule SB.12')
    sb12_l1 = sab.outside(otp_mk).overlap(poly2.outside(otp_mk), 0.22.um, euclidian).polygons
    sb12_l1.output('SB.12', 'SB.12 : Overlap with Poly2. : 0.22µm')
    sb12_l1.forget

    # Rule SB.13: Min. area (um2). is 2µm²
    logger.info('Executing rule SB.13')
    sb13_l1  = sab.outside(otp_mk).with_area(nil, 2.um)
    sb13_l1.output('SB.13', 'SB.13 : Min. area (um2). : 2µm²')
    sb13_l1.forget 

    # Rule SB.14a: Space from unsalicided Nplus Poly2 to unsalicided Pplus Poly2. (Unsalicided Nplus Poly2 must not fall within a square of 0.56um x 0.56um at unsalicided Pplus Poly2 corners). is 0.56µm
    logger.info('Executing rule SB.14a')
    sb14a_l1 = poly2.and(nplus).and(sab).separation(poly2.and(pplus).and(sab), 0.56.um, square).polygons
    sb14a_l1.output('SB.14a', 'SB.14a : Space from unsalicided Nplus Poly2 to unsalicided Pplus Poly2. (Unsalicided Nplus Poly2 must not fall within a square of 0.56um x 0.56um at unsalicided Pplus Poly2 corners). : 0.56µm')
    sb14a_l1.forget

    # Rule SB.14b: Space from unsalicided Nplus Poly2 to P-channel gate. (Unsalicided Nplus Poly2 must not fall within a square of 0.56um x 0.56um at P-channel gate corners). is 0.56µm
    logger.info('Executing rule SB.14b')
    sb14b_l1 = poly2.and(nplus).and(sab).separation(pgate, 0.56.um, square).polygons
    sb14b_l1.output('SB.14b', 'SB.14b : Space from unsalicided Nplus Poly2 to P-channel gate. (Unsalicided Nplus Poly2 must not fall within a square of 0.56um x 0.56um at P-channel gate corners). : 0.56µm')
    sb14b_l1.forget

    # Rule SB.15a: Space from unsalicided Poly2 to unrelated Nplus/Pplus. is 0.18µm
    logger.info('Executing rule SB.15a')
    sb15a_l1  = poly2.and(sab).separation(nplus.or(pplus), 0.18.um, euclidian).polygons(0.001)
    sb15a_l1.output('SB.15a', 'SB.15a : Space from unsalicided Poly2 to unrelated Nplus/Pplus. : 0.18µm')
    sb15a_l1.forget

    # Rule SB.15b: Space from unsalicided Poly2 to unrelated Nplus/Pplus along Poly2 line is 0.32 um
    logger.info('Executing rule SB.15b')
    sb15b_l1  = poly2.and(sab).separation(nplus.or(pplus), 0.32.um, euclidian).polygons(0.001).interacting(poly2)
    sb15b_l1.output('SB.15b', 'SB.15b : Space from unsalicided Poly2 to unrelated Nplus/Pplus. : 0.18µm')
    sb15b_l1.forget

    # Rule SB.16: SAB layer cannot exist on 1.8V, 3.3V and 6V CMOS transistor’s active area
    ## (transistors used for core circuit). It can only exist on CMOS transistors marked by LVS_IO layer (transistors covered by LVS_IO)
    logger.info('Executing rule SB.16')
    sb16_exclude = sab.outside(otp_mk).outside(lvs_io)
    sb16_l1 = sb16_exclude.interacting(tgate)
    sb16_l1.output('SB.16', "SB.16 : SAB layer cannot exist on 3.3V and 5V/6V CMOS transistors'
                        Poly and COMP area of the core circuit (Excluding the transistors used for ESD purpose).
                        It can only exist on CMOS transistors marked by LVS_IO, OTP_MK, ESD_MK layers.")
    sb16_l1.forget
    sb16_exclude.forget    

end #FEOL
