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

#==================================
# ------ MOSCAP DERIVATIONS -------
#==================================

logger.info('Starting MOSCAP DERIVATIONS')

moscap_exclude = 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(piscap)
                    .join(mim_l_mk).join(fusetop).join(resistor)

moscap_ngate = nplus.and(tgate).interacting(mos_cap_mk)
moscap_pgate = pplus.and(tgate).interacting(mos_cap_mk)

# nmoscap_1p8 capacitor
nmos_gate_1p8 = moscap_ngate.not(nwell).not(dnwell).not(dv2).not(dualgate)

# nmoscap_1p8_dw capacitor
nmos_gate_1p8_dw = moscap_ngate.and(dnwell).not(nwell).not(dv2).not(dualgate)

# pmoscap_1p8 capacitor
pmos_gate_1p8 = moscap_pgate.not(dnwell).and(nwell).not(dv2).not(dualgate)

# pmoscap_1p8_dw capacitor
pmos_gate_1p8_dw = moscap_pgate.and(dnwell).not(dv2).not(dualgate)

# nmoscap_6p0 capacitor
nmoscap_6p0_g = moscap_ngate.not(nwell).not(dnwell).and(dv2).not(dualgate)

# nmoscap_6p0_dw capacitor
nmoscap_6p0_dw_g = moscap_ngate.and(dnwell).not(nwell).and(dv2).not(dualgate)

# pmoscap_6p0 capacitor
pmoscap_6p0_g = moscap_pgate.not(dnwell).and(nwell).and(dv2).not(dualgate)

# pmoscap_6p0_dw capacitor
pmoscap_6p0_dw_g = moscap_pgate.and(dnwell).and(dv2).not(dualgate)

# nmoscap_1p8_nwell capacitor
nmoscap_1p8_nwell_g = moscap_ngate.not(dnwell).and(nwell).not(dv2).not(dualgate)

# nmoscap_1p8_dnwell capacitor
nmoscap_1p8_dnwell_g = moscap_ngate.and(nwell).and(dnwell).not(dv2).not(dualgate)

# nmoscap_6p0_nwell capacitor
nmoscap_6p0_nwell_g = moscap_ngate.not(dnwell).and(nwell).and(dv2).not(dualgate)

# nmoscap_6p0_dnwell capacitor
nmoscap_6p0_dnwell_g = moscap_ngate.and(nwell).and(dnwell).and(dv2).not(dualgate)
