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

logger.info('Starting PISCAP EXTRACTION')

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

# cap_pis_01v8: Model for 1.8V PIS capacitor (outside DNWELL) [pis_1p8]
logger.info('Extracting cap_pis_01v8 device')
extract_devices(capacitor('cap_pis_01v8', 4.4e-15, PisCap),
                { 'P1' => cap_pis_01v8_gate, 'P2' => nwell_con, 
                  'tA' => poly2_con, 'tB' => ntap })

# cap_pis_01v8_dn: Model for (1.8V PIS capacitor (inside DNWEL) [pis_1p8_dw]
logger.info('Extracting cap_pis_01v8_dn device')
extract_devices(capacitor('cap_pis_01v8_dn', 4.4e-15, PisCap),
                { 'P1' => cap_pis_01v8_dn_gate, 'P2' => dnwell, 
                  'tA' => poly2_con, 'tB' => ntap })

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

# cap_pis_06v0: Model for 6V PIS capacitor (outside DNWELL) [pis_6p0]
logger.info('Extracting cap_pis_06v0 device')
extract_devices(capacitor('cap_pis_06v0', 4.4e-15, PisCap),
                { 'P1' => cap_pis_06v0_gate, 'P2' => nwell_con, 
                  'tA' => poly2_con, 'tB' => ntap })

# cap_pis_06v0_dn: Model for 6V PIS capacitor (inside DNWEL) [pis_6p0_dw]
logger.info('Extracting cap_pis_06v0_dn device')
extract_devices(capacitor('cap_pis_06v0_dn', 4.4e-15, PisCap),
                { 'P1' => cap_pis_06v0_dn_gate, 'P2' => dnwell, 
                  'tA' => poly2_con, 'tB' => ntap })
