blob: 966827688ec4d554afce39c0faa5df0d22d0823d [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 FEOL
#================================================
#----------------------ESD-----------------------
#================================================
# Rule ESD.1: Minimum width of an ESD implant area. is 0.6µm
logger.info('Executing rule ESD.1')
esd1_l1 = esd.width(0.6.um, euclidian).polygons(0.001)
esd1_l1.output('ESD.1', 'ESD.1 : Minimum width of an ESD implant area. : 0.6µm')
esd1_l1.forget
# Rule ESD.2: Minimum space between two ESD implant areas. (Merge if the space is less than 0.6um). is 0.6µm
logger.info('Executing rule ESD.2')
esd2_l1 = esd.space(0.6.um, euclidian).polygons(0.001)
esd2_l1.output('ESD.2', 'ESD.2 : Minimum space between two ESD implant areas. (Merge if the space is less than 0.6um). : 0.6µm')
esd2_l1.forget
# Rule ESD.3a: Minimum space to NCOMP. is 0.6µm
logger.info('Executing rule ESD.3a')
esd3a_l1 = esd.separation(ncomp, 0.6.um, euclidian).polygons(0.001)
esd3a_l1.output('ESD.3a', 'ESD.3a : Minimum space to NCOMP. : 0.6µm')
esd3a_l1.forget
# Rule ESD.3b: Min/max space to a butted PCOMP.
logger.info('Executing rule ESD.3b')
esd3b_l1 = esd.not_outside(pcomp)
esd3b_l1.output('ESD.3b', 'ESD.3b : Min/max space to a butted PCOMP.')
esd3b_l1.forget
# Rule ESD.4a: Extension beyond NCOMP. is 0.24µm
logger.info('Executing rule ESD.4a')
esd4a_l1 = esd.edges.not_interacting(pcomp).enclosing(ncomp.edges, 0.24.um, euclidian).polygons(0.001)
esd4a_l1.output('ESD.4a', 'ESD.4a : Extension beyond NCOMP. : 0.24µm')
esd4a_l1.forget
# Rule ESD.4b: Minimum overlap of an ESD implant edge to a COMP. is 0.45µm
logger.info('Executing rule ESD.4b')
esd4b_l1 = esd.overlap(comp, 0.45.um, euclidian).polygons(0.001)
esd4b_l1.output('ESD.4b', 'ESD.4b : Minimum overlap of an ESD implant edge to a COMP. : 0.45µm')
esd4b_l1.forget
# Rule ESD.5a: Minimum ESD area (um2). is 0.49µm²
logger.info('Executing rule ESD.5a')
esd5a_l1 = esd.with_area(nil, 0.49.um)
esd5a_l1.output('ESD.5a', 'ESD.5a : Minimum ESD area (um2). : 0.49µm²')
esd5a_l1.forget
# Rule ESD.5b: Minimum field area enclosed by ESD implant (um2). is 0.49µm²
logger.info('Executing rule ESD.5b')
esd5b_l1 = esd.holes.with_area(nil, 0.49.um)
esd5b_l1.output('ESD.5b', 'ESD.5b : Minimum field area enclosed by ESD implant (um2). : 0.49µm²')
esd5b_l1.forget
# Rule ESD.6: Extension perpendicular to Poly2 gate. is 0.45µm
logger.info('Executing rule ESD.6')
esd6_l1 = esd.edges.enclosing(poly2.edges.interacting(tgate.edges), 0.45.um, projection).polygons(0.001)
esd6_l1.output('ESD.6', 'ESD.6 : Extension perpendicular to Poly2 gate. : 0.45µm')
esd6_l1.forget
# Rule ESD.7: No ESD implant inside PCOMP.
logger.info('Executing rule ESD.7')
esd7_l1 = esd.not_outside(pcomp)
esd7_l1.output('ESD.7', 'ESD.7 : No ESD implant inside PCOMP.')
esd7_l1.forget
# Rule ESD.8: Minimum space to Nplus/Pplus. is 0.3µm
logger.info('Executing rule ESD.8')
esd8_l1 = esd.separation(nplus.or(pplus), 0.3.um).polygons
esd8_l1.output('ESD.8', 'ESD.8 : Minimum space to Nplus/Pplus. : 0.3µm')
esd8_l1.forget
# Rule ESD.pl: Minimum gate length of thick gate NMOS. is 0.4µm
logger.info('Executing rule ESD.pl')
esdpl_l1 = poly2.interacting(esd).edges.and(tgate.edges).width(0.4.um, euclidian).polygons(0.001).overlapping(dualgate)
esdpl_l1.output('ESD.pl', 'ESD.pl : Minimum gate length of thick gate NMOS. : 0.4µm')
esdpl_l1.forget
end #FEOL