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

#==================================
# ------ PISCAP DERIVATIONS -------
#==================================

logger.info('Starting PISCAP DERIVATIONS')

piscap_exclude = mos_cap_mk.join(sab).join(esd)
                            .join(polyfuse).join(cap_mk).join(diode_mk)
                            .join(nat).join(v5_xtor).join(drc_bjt)
                            .join(lvs_bjt).join(fhres).join(fusewindow_d)
                            .join(lvs_rf).join(fusetop).join(resistor)

pis_ngate = nplus.and(tgate).and(nwell).and(piscap).interacting(mim_l_mk).not(piscap_exclude)

# pis_1p8 (1.8V PIS capacitor (outside DNWELL))
pis_1p8_gate = pis_ngate.not(dnwell).not(dualgate).not(dv2)

# pis_1p8_dw (1.8V PIS capacitor (inside DNWEL)
pis_1p8_dw_gate = pis_ngate.and(dnwell).not(dualgate).not(dv2)

# pis_6p0 (6V PIS capacitor (outside DNWELL))
pis_6p0_gate = pis_ngate.not(dnwell).and(dv2).not(dualgate)

# pis_6p0_dw (6V PIS capacitor (inside DNWEL)
pis_6p0_dw_gate = pis_ngate.and(dnwell).and(dv2).not(dualgate)
