################################################################################################
# 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')

# cap_nmos_01v8
logger.info('Extracting cap_nmos_01v8 device')
extract_devices(capacitor('cap_nmos_01v8', 4.4e-15, MosCap),
                { 'P1' => nmos_gate_1p8, 'P2' => lvpwell_con, 'tA' => poly2_con, 'tB' => nsd })

# cap_nmos_01v8_dn
logger.info('Extracting cap_nmos_01v8_dn device')
extract_devices(capacitor('cap_nmos_01v8_dn', 4.4e-15, MosCap),
                { 'P1' => nmos_gate_1p8_dw, 'P2' => lvpwell_con, 'tA' => poly2_con, 'tB' => nsd })

# cap_pmos_01v8
logger.info('Extracting cap_pmos_01v8 device')
extract_devices(capacitor('cap_pmos_01v8', 4.4e-15, MosCap),
                { 'P1' => pmos_gate_1p8, 'P2' => nwell_con, 'tA' => poly2_con, 'tB' => psd })

# cap_pmos_01v8_dn
logger.info('Extracting cap_pmos_01v8_dn device')
extract_devices(capacitor('cap_pmos_01v8_dn', 4.4e-15, MosCap),
                { 'P1' => pmos_gate_1p8_dw, 'P2' => dnwell, 'tA' => poly2_con, 'tB' => psd_dn })

# cap_nmos_06v0
logger.info('Extracting cap_nmos_06v0 device')
extract_devices(capacitor('cap_nmos_06v0', 2.3e-15, MosCap),
                { 'P1' => nmoscap_6p0_g, 'P2' => lvpwell_con, 'tA' => poly2_con, 'tB' => nsd })

# cap_nmos_06v0_dn
logger.info('Extracting cap_nmos_06v0_dn device')
extract_devices(capacitor('cap_nmos_06v0_dn', 2.3e-15, MosCap),
                { 'P1' => nmoscap_6p0_dw_g, 'P2' => lvpwell_con, 'tA' => poly2_con, 'tB' => nsd })

# cap_pmos_06v0
logger.info('Extracting cap_pmos_06v0 device')
extract_devices(capacitor('cap_pmos_06v0', 2.3e-15, MosCap),
                { 'P1' => pmoscap_6p0_g, 'P2' => nwell_con, 'tA' => poly2_con, 'tB' => psd })

# cap_pmos_06v0_dn
logger.info('Extracting cap_pmos_06v0_dn device')
extract_devices(capacitor('cap_pmos_06v0_dn', 2.3e-15, MosCap),
                { 'P1' => pmoscap_6p0_dw_g, 'P2' => dnwell, 'tA' => poly2_con, 'tB' => psd_dn })

# cap_nmos_01v8_nwell capacitor
logger.info('Extracting cap_nmos_01v8_nwell device')
extract_devices(capacitor('cap_nmos_01v8_nwell', 4.4e-15, MosCap),
                { 'P1' => nmoscap_1p8_nwell_g, 'P2' => nwell_con, 'tA' => poly2_con, 'tB' => ntap })

# cap_nmos_01v8_dnwell capacitor
logger.info('Extracting cap_nmos_01v8_dnwell device')
extract_devices(capacitor('cap_nmos_01v8_dnwell', 4.4e-15, MosCap),
                { 'P1' => nmoscap_1p8_dnwell_g, 'P2' => dnwell, 'tA' => poly2_con, 'tB' => ntap })

# cap_nmos_06v0_nwell capacitor
logger.info('Extracting cap_nmos_06v0_nwell device')
extract_devices(capacitor('cap_nmos_06v0_nwell', 2.3e-15, MosCap),
                { 'P1' => nmoscap_6p0_nwell_g, 'P2' => nwell_con, 'tA' => poly2_con, 'tB' => ntap })

# cap_nmos_06v0_dnwell capacitor
logger.info('Extracting cap_nmos_06v0_dnwell device')
extract_devices(capacitor('cap_nmos_06v0_dnwell', 2.3e-15, MosCap),
                { 'P1' => nmoscap_6p0_dnwell_g, 'P2' => dnwell, 'tA' => poly2_con, 'tB' => ntap })

