################################################################################################
# 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.
################################################################################################

#================================
# ---- Varactor EXTRACTION ----
#================================

logger.info('Starting VARACTOR EXTRACTION')

#========================
# --- PN 1P8 VARACTOR ---
#========================

# cap_var_pd2nw_01v8: Model for 1.8V Scalable PN-varactor (outside DNWELL) [pn_varactor_1p8]
logger.info('Extracting cap_var_pd2nw_01v8 varactor')
extract_devices(capacitor('cap_var_pd2nw_01v8', 4.4e-15, VarCap),
                 { "P1" => cap_var_pd2nw_01v8_terminal_p, "P2" => nwell_con,
                   "tA" => cap_var_pd2nw_01v8_terminal_p, "tB" => nwell_con })

# cap_var_pd2nw_01v8_dn: Model for 1.8V Scalable PN-varactor (inside DNWELL) [pn_varactor_1p8_dw]
logger.info('Extracting cap_var_pd2nw_01v8_dn')
extract_devices(capacitor('cap_var_pd2nw_01v8_dn', 4.4e-15, VarCap),
                 { "P1" => cap_var_pd2nw_01v8_dn_terminal_p, "P2" => dnwell,
                   "tA" => cap_var_pd2nw_01v8_dn_terminal_p, "tB" => dnwell })

#========================
# --- PN 6P0 VARACTOR ---
#========================

# cap_var_pd2nw_06v0: Model for 6V Scalable PN-varactor (outside DNWELL) [pn_varactor_6p0]
logger.info('Extracting cap_var_pd2nw_06v0')
extract_devices(capacitor('cap_var_pd2nw_06v0', 4.4e-15, VarCap),
                 { "P1" => cap_var_pd2nw_06v0_terminal_p, "P2" => nwell_con,
                   "tA" => cap_var_pd2nw_06v0_terminal_p, "tB" => nwell_con })

# cap_var_pd2nw_06v0_dn: Model for 6V Scalable PN-varactor (inside DNWELL) [pn_varactor_6p0_dw]
logger.info('Extracting cap_var_pd2nw_06v0_dn')
extract_devices(capacitor('cap_var_pd2nw_06v0_dn', 4.4e-15, VarCap),
                 { "P1" => cap_var_pd2nw_06v0_dn_terminal_p, "P2" => dnwell,
                   "tA" => cap_var_pd2nw_06v0_dn_terminal_p, "tB" => dnwell })

#=========================
# --- MOS 1P8 VARACTOR ---
#=========================

# cap_var_fet_01v8: Model for 1.8V Scalable MOS-varactor (outside DNWELL) [mos_varactor_1p8]
logger.info('Extracting cap_var_fet_01v8')
extract_devices(capacitor('cap_var_fet_01v8', 4.4e-15, VarCap),
                { 'P1' => cap_var_fet_01v8_gate, 'P2' => nwell_con,
                  'tA' => poly2_con, 'tB' => ntap })

# cap_var_fet_01v8_dn: Model for 1.8V Scalable MOS-varactor (inside DNWELL) [mos_varactor_1p8_dw]
logger.info('Extracting cap_var_fet_01v8_dn')
extract_devices(capacitor('cap_var_fet_01v8_dn', 4.4e-15, VarCap),
                { 'P1' => cap_var_fet_01v8_dn_gate, 'P2' => dnwell,
                  'tA' => poly2_con, 'tB' => ntap })

#=========================
# --- MOS 6P0 VARACTOR ---
#=========================

# cap_var_fet_06v0: Model for 6V Scalable MOS-varactor (outside DNWELL) [mos_varactor_6p0]
logger.info('Extracting cap_var_fet_06v0')
extract_devices(capacitor('cap_var_fet_06v0', 4.4e-15, VarCap),
                { 'P1' => cap_var_fet_06v0_gate, 'P2' => nwell_con,
                 'tA' => poly2_con, 'tB' => ntap })

# cap_var_fet_06v0_dn: Model for 6V Scalable MOS-varactor (inside DNWELL) [mos_varactor_6p0_dw]
logger.info('Extracting cap_var_fet_06v0_dn')
extract_devices(capacitor('cap_var_fet_06v0_dn', 4.4e-15, VarCap),
                { 'P1' => cap_var_fet_06v0_dn_gate, 'P2' => dnwell,
                  'tA' => poly2_con, 'tB' => ntap })
