blob: edf813d80e754b502cacf274d3ee44cd03278cfa [file] [log] [blame]
################################################################################################
# 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
#====================================================
#-------------------- TOP Metal----------------------
#====================================================
# Rule TM.1a : Min Passivation Opening is 40µm
logger.info('Executing rule TM.1a')
tm1a_l1 = pad.extents.width(40.0.um).polygons(0.001)
tm1a_l1.output('TM.1a','TM.1a : Min Passivation Opening is 40µm')
tm1a_l1.forget
# Rule TM.2a : Min UBM Opening (defined by the layers UBMPArray) is 60µm
logger.info('Executing rule TM.2a')
tm2a_l1 = ubmparray.extents.width(60.um)
tm2a_l1.output('TM.2a','TM.2a : Min UBM Opening (defined by the layers UBMPArray) is 60µm')
tm2a_l1.forget
# Rule TM.3a : Min Bump Pad is 72µm
logger.info('Executing rule TM.3a')
tm3a_l1 = top_metal.extents.width(72.um).polygons(0.001)
tm3a_l1.output('TM.3a','TM.3a : Min Bump Pad is 72µm')
tm3a_l1.forget
# Rule TM.4 : Space from centre of bump pad (pad mask) to Die Edge (Outer edge of GUARD_RING_MK marking) is 90µm
logger.info('Executing rule TM.4')
tm4_l1 = pad.middle.separation(guard_ring_mk,90.um)
tm4_l1.output('TM.4','TM.4 : Space from centre of bump pad (pad mask) to Die Edge (Outer edge of GUARD_RING_MK marking) is 90µm')
tm4_l1.forget
# Rule TM.5 : Min allowable bump pitch is 148 µm
logger.info('Executing rule TM.5')
tm5_l1 = pad.middle.space(148.um).polygons(0.001)
tm5_l1.output('TM.5','TM.5: Min allowable bump pitch is 148 µm ')
tm5_l1.forget
ubm = ubmpperi.or(ubmparray.or(ubmeplate))
# Rule TM.6 : Pad without UBM layers is not allowed except the Pad under PROBE_MK marking.
logger.info('Executing rule TM.6')
tm6_l1 = pad.not_interacting(ubm).not(probe_mk)
tm6_l1.output('TM.6','TM.6 : Pad without UBM layers is not allowed except the Pad under PROBE_MK marking.')
tm6_l1.forget
# Rule TM.7 : Shape of the Pad shall be at least octagonal (or more closer to circular) except the Pad under PROBE_MK marking.
logger.info('Executing rule TM.7')
tm7_l1 = pad.drc(primary.edges.count < 8).not(probe_mk)
tm7_l1.output('TM.7','TM.7 : Shape of the Pad shall be at least octagonal (or more closer to circular) except the Pad under PROBE_MK marking.')
tm7_l1.forget
# Rule TM.8 Space from edge of top via to the edge of UBM opening is 2.0 µm
logger.info('Executing rule TM.8')
tm8_l1 = ubm.extents.separation(top_via,2.0.um).polygons(0.001)
tm8_l1.output('TM.8','TM.8 : Space from edge of top via or metal_shield_via to the edge of UBM opening is 2.0 µm')
tm8_l1.forget
end #BEOL