################################################################################################
# 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 EXTRACTION -------
#==================================

logger.info('Starting MOSCAP EXTRACTION')

#=====================
# --- NMOS 1P8 CAP ---
#=====================

# cap_nmos_01v8 capacitor: 1.8V inversion-mode NMOS capacitor (outside DNWELL) [nmoscap_1p8]
logger.info('Extracting cap_nmos_01v8 device')
extract_devices(capacitor('cap_nmos_01v8', 4.4e-15, MosCap),
                { 'P1' => cap_nmos_01v8_g, 'P2' => lvpwell_con, 'tA' => poly2_con, 'tB' => nsd })

# cap_nmos_01v8_dn capacitor: 1.8V inversion-mode NMOS capacitor (inside DNWELL) [nmoscap_1p8_dw]
logger.info('Extracting cap_nmos_01v8_dn device')
extract_devices(capacitor('cap_nmos_01v8_dn', 4.4e-15, MosCap),
                { 'P1' => cap_nmos_01v8_dn_g, 'P2' => lvpwell_con, 'tA' => poly2_con, 'tB' => nsd })

#=====================
# --- PMOS 1P8 CAP ---
#=====================

# cap_pmos_01v8 capacitor: 1.8V inversion-mode PMOS capacitor (outside DNWELL) [pmoscap_1p8]
logger.info('Extracting cap_pmos_01v8 device')
extract_devices(capacitor('cap_pmos_01v8', 4.4e-15, MosCap),
                { 'P1' => cap_pmos_01v8_g, 'P2' => nwell_con, 'tA' => poly2_con, 'tB' => psd })

# cap_pmos_01v8_dn capacitor: 1.8V inversion-mode PMOS capacitor (inside DNWELL) [pmoscap_1p8_dw]
logger.info('Extracting cap_pmos_01v8_dn device')
extract_devices(capacitor('cap_pmos_01v8_dn', 4.4e-15, MosCap),
                { 'P1' => cap_pmos_01v8_dn_g, 'P2' => dnwell, 'tA' => poly2_con, 'tB' => psd_dw })

#=====================
# --- NMOS 6P0 CAP ---
#=====================

# cap_nmos_06v0 capacitor: 6.0V inversion-mode NMOS capacitor (outside DNWELL) [nmoscap_6p0]
logger.info('Extracting cap_nmos_06v0 device')
extract_devices(capacitor('cap_nmos_06v0', 2.3e-15, MosCap),
                { 'P1' => cap_nmos_06v0_g, 'P2' => lvpwell_con, 'tA' => poly2_con, 'tB' => nsd })

# cap_nmos_06v0_dn capacitor: 6.0V inversion-mode NMOS capacitor (inside DNWELL) [nmoscap_6p0_dw]
logger.info('Extracting cap_nmos_06v0_dn device')
extract_devices(capacitor('cap_nmos_06v0_dn', 2.3e-15, MosCap),
                { 'P1' => cap_nmos_06v0_dn_g, 'P2' => lvpwell_con, 'tA' => poly2_con, 'tB' => nsd })

#=====================
# --- PMOS 6P0 CAP ---
#=====================

# cap_pmos_06v0 capacitor: 6.0V inversion-mode PMOS capacitor (outside DNWELL) [pmoscap_6p0]
logger.info('Extracting cap_pmos_06v0 device')
extract_devices(capacitor('cap_pmos_06v0', 2.3e-15, MosCap),
                { 'P1' => cap_pmos_06v0_g, 'P2' => nwell_con, 'tA' => poly2_con, 'tB' => psd })

# cap_pmos_06v0_dn capacitor: 6.0V inversion-mode PMOS capacitor (inside DNWELL) [pmoscap_6p0_dw]
logger.info('Extracting cap_pmos_06v0_dn device')
extract_devices(capacitor('cap_pmos_06v0_dn', 2.3e-15, MosCap),
                { 'P1' => cap_pmos_06v0_dn_g, 'P2' => dnwell, 'tA' => poly2_con, 'tB' => psd_dw })

#===========================
# --- NMOS-NWELL 1P8 CAP ---
#===========================

# cap_nmos_01v8_nwell capacitor: 1.8V NMOS in Nwell capacitor (outside DNWELL) [nmoscap_1p8_nwell]
logger.info('Extracting cap_nmos_01v8_nwell device')
extract_devices(capacitor('cap_nmos_01v8_nwell', 4.4e-15, MosCap),
                { 'P1' => cap_nmos_01v8_nwell_g, 'P2' => nwell_con, 'tA' => poly2_con, 'tB' => ntap })

#============================
# --- NMOS-DNWELL 1P8 CAP ---
#============================

# cap_nmos_01v8_dnwell capacitor: 1.8V NMOS in Nwell capacitor (inside DNWELL) [nmoscap_1p8_dnwell]
logger.info('Extracting cap_nmos_01v8_dnwell device')
extract_devices(capacitor('cap_nmos_01v8_dnwell', 4.4e-15, MosCap),
                { 'P1' => cap_nmos_01v8_dnwell_g, 'P2' => dnwell, 'tA' => poly2_con, 'tB' => ntap })

#===========================
# --- NMOS-NWELL 6P0 CAP ---
#===========================

# cap_nmos_06v0_nwell capacitor: 6V NMOS in Nwell capacitor (outside DNWELL) [nmoscap_6p0_nwell]
logger.info('Extracting cap_nmos_06v0_nwell device')
extract_devices(capacitor('cap_nmos_06v0_nwell', 2.3e-15, MosCap),
                { 'P1' => cap_nmos_06v0_nwell_g, 'P2' => nwell_con, 'tA' => poly2_con, 'tB' => ntap })

#============================
# --- NMOS-DNWELL 6P0 CAP ---
#============================

# cap_nmos_06v0_dnwell capacitor: 6V NMOS in Nwell capacitor (inside DNWELL) [nmoscap_6p0_dnwell]
logger.info('Extracting cap_nmos_06v0_dnwell device')
extract_devices(capacitor('cap_nmos_06v0_dnwell', 2.3e-15, MosCap),
                { 'P1' => cap_nmos_06v0_dnwell_g, 'P2' => dnwell, 'tA' => poly2_con, 'tB' => ntap })


