################################################################################################
# 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 = lvpwell.join(pplus).join(resistor)
                        .join(esd).join(sab).join(dni)
                        .join(pwhv).join(fusewindow_d).join(polyfuse)
                        .join(schottky_diode).join(zener).join(res_mk)
                        .join(diode_mk).join(v5_xtor).join(drc_bjt)
                        .join(nat).join(fhres).join(mos_cap_mk)
                        .join(mvsd).join(mvpsd).join(elmd_mk)
                        .join(elmd2_mk).join(lvs_rf).join(lvs_source)
                        .join(mk_35v).join(well_diode_mk).join(esd_hbm_mk)
                        .join(mos_mk_type1).join(swfet_mk).join(lvs_35v)
                        .join(hvpddd).join(hvpolyrs).join(ldmos_xtor)

ngate_nw = ngate.and(piscap).and(nwell).not(piscap_exclude)

ngate_nw_lv = ngate_nw.not(dualgate2_d)
ngate_nw_mv = ngate_nw.and(dualgate2_d)

#====================
# --- PIS 1P8 CAP ---
#====================

# cap_pis_01v8: Model for 1.8V PIS capacitor (outside DNWELL) [pis_1p8]
cap_pis_01v8_gate = ngate_nw_lv.not(dnwell)

# cap_pis_01v8_dn: Model for (1.8V PIS capacitor (inside DNWEL) [pis_1p8_dw]
cap_pis_01v8_dn_gate = ngate_nw_lv.and(dnwell)

#====================
# --- PIS 6P0 CAP ---
#====================

# cap_pis_06v0: Model for 6V PIS capacitor (outside DNWELL) [pis_6p0]
cap_pis_06v0_gate = ngate_nw_mv.not(dnwell)

# cap_pis_06v0_dn: Model for 6V PIS capacitor (inside DNWEL) [pis_6p0_dw]
cap_pis_06v0_dn_gate = ngate_nw_mv.and(dnwell)
