blob: 3ff40eacebe43f7ef7223a7f4064ac233e83bb30 [file] [log] [blame]
################################################################################################
# Copyright 2023 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.
################################################################################################
#================================
# ----- DIODE DERIVATIONS -------
#================================
logger.info('Starting DIODE DERIVATIONS')
# diode_np_1p8
diode_np_1p8_terminal_n = ncomp.not(poly2).not(dualgate).outside(dnwell)
.not(res_mk).not(sab).not(lvs_bjt).interacting(diode_mk)
diode_np_1p8_terminal_p = diode_mk.interacting(pcomp).not(poly2).not(dualgate).outside(dnwell)
.not(res_mk).not(sab).not(lvs_bjt)
# diode_pn_1p8
diode_pn_1p8_terminal_p = pcomp.inside(nwell).not(poly2).not(dualgate).outside(dnwell)
.not(res_mk).not(sab).not(lvs_bjt).interacting(diode_mk)
# diode_np_3p3
diode_np_3p3_terminal_n = ncomp.not(poly2).and(dualgate).outside(dnwell)
.not(res_mk).not(sab).not(lvs_bjt).interacting(diode_mk)
diode_np_3p3_terminal_p = diode_mk.interacting(pcomp).not(poly2).and(dualgate).outside(dnwell)
.not(res_mk).not(sab).not(lvs_bjt)
# diode_pn_3p3
diode_pn_3p3_terminal_p = pcomp.inside(nwell).not(poly2).and(dualgate)
.outside(dnwell).not(res_mk).not(sab).not(lvs_bjt).interacting(diode_mk)
# diode_nwp
diode_nwp_terminal_p = pcomp.interacting(well_diode_mk).not(lvs_bjt).not(nat).not(res_mk).not(res_mk_type1)
diode_nwp_terminal_n = well_diode_mk.covering(nwell)
# diode_np_1p8_nat
diode_np_1p8_nat_terminal_n = ncomp.not(poly2).and(nat).not(dualgate).outside(dnwell)
.not(res_mk).not(sab).not(lvs_bjt).interacting(diode_mk)
diode_np_1p8_nat_terminal_p = pcomp.not(poly2).not(dualgate).outside(dnwell).and(nat)
.not(res_mk).not(sab).not(lvs_bjt).interacting(diode_mk)
# diode_np_3p3_nat
diode_np_3p3_nat_terminal_n = ncomp.not(poly2).and(nat).and(dualgate).outside(dnwell)
.not(res_mk).not(sab).not(lvs_bjt).interacting(diode_mk)
diode_np_3p3_nat_terminal_p = pcomp.not(poly2).and(dualgate).outside(dnwell).and(nat)
.not(res_mk).not(sab).not(lvs_bjt).interacting(diode_mk)
# diode_dnwpw
diode_dnwpw_terminal_p = pcomp.inside(dnwell).interacting(well_diode_mk).and(diode_mk)
.not(lvs_bjt).not(nat).not(res_mk_type1)
# diode_dnwps
diode_dnwps_terminal_p = ptap.extents.covering(dnwell).not_interacting(nat).not_interacting(res_mk_type1)
.not_covering(dualgate).interacting(well_diode_mk).interacting(diode_mk)