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

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

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

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

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

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

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

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

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


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

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

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

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


