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

#================================
# ---- RESISTOR EXTRACTIONS -----
#================================

logger.info('Starting RESISTOR EXTRACTION')

#====================
# ---- Diff RES ----
#====================

# nplus_u (3-terminal unsalicided n+ diffusion resistor (outside DNWELL))
logger.info('Extracting nplus_u device')
extract_devices(resistor_with_bulk('nplus_u', 60, BResistor), { 'R' => nplus_u_layer, 'C' => nplus_cont, 'W' => sub })

# nplus_u_dw (3-terminal unsalicided n+ diffusion resistor (inside DNWELL))
logger.info('Extracting nplus_u_dw device')
extract_devices(resistor_with_bulk('nplus_u_dw', 60, BResistor),
                { 'R' => nplus_u_dw_layer, 'C' => nplus_cont, 'W' => lvpwell_con })

# pplus_u (3-terminal unsalicided P+ diffusion resistor (outside DNWELL))
logger.info('Extracting pplus_u device')
extract_devices(resistor_with_bulk('pplus_u', 185, BResistor),
                { 'R' => pplus_u_layer, 'C' => pplus_cont, 'W' => nwell_con })

# pplus_u_dw (3-terminal unsalicided P+ diffusion resistor (inside DNWELL))
logger.info('Extracting pplus_u_dw device')
extract_devices(resistor_with_bulk('pplus_u_dw', 185, BResistor),
                { 'R' => pplus_u_dw_layer, 'C' => pplus_dw_cont, 'W' => dnwell })

# nplus_s (3-terminal salicided N+ diffusion resistor (outside DNWELL))
logger.info('Extracting nplus_s device')
extract_devices(resistor_with_bulk('nplus_s', 6.3, BResistor), { 'R' => nplus_s_layer, 'C' => nplus_cont, 'W' => sub })

# nplus_s_dw (3-terminal salicided N+ diffusion resistor (inside DNWELL))
logger.info('Extracting nplus_s_dw device')
extract_devices(resistor_with_bulk('nplus_s_dw', 6.3, BResistor),
                { 'R' => nplus_s_dw_layer, 'C' => nplus_cont, 'W' => lvpwell_con })

# pplus_s (3-terminal salicided P+ diffusion resistor (outside DNWELL))
logger.info('Extracting pplus_s device')
extract_devices(resistor_with_bulk('pplus_s', 7, BResistor),
                { 'R' => pplus_s_layer, 'C' => pplus_cont, 'W' => nwell_con })

# pplus_s_dw (3-terminal salicided P+ diffusion resistor (inside DNWELL))
logger.info('Extracting pplus_s_dw device')
extract_devices(resistor_with_bulk('pplus_s_dw', 7, BResistor),
                { 'R' => pplus_s_dw_layer, 'C' => pplus_dw_cont, 'W' => dnwell })

#====================
# ---- PWELL RES ----
#====================

# pwell (3-terminal low voltage pwell resistor for 1.8V/6V process (inside DNWELL only))
logger.info('Extracting PWELL device')
extract_devices(resistor_with_bulk('pwell', 1000, BResistor), 
                { 'R' => pwell_res, 'C' => lvpwell_con, 'W' => dnwell })


                
#====================
# ---- POLY RES ----
#====================

# npolyf_u (3-terminal unsalicided n+ poly resistor (outside DNWELL))
logger.info('Extracting npolyf_u device')
extract_devices(resistor_with_bulk('npolyf_u', 310, BResistor), 
                { 'R' => npolyf_u_layer, 'C' => poly2_con, 'W' => sub })

# npolyf_u_dw (3-terminal unsalicided n+ poly resistor (inside DNWELL))
logger.info('Extracting npolyf_u_dw device')
extract_devices(resistor_with_bulk('npolyf_u_dw', 310, BResistor),
                { 'R' => npolyf_u_dw_layer, 'C' => poly2_con, 'W' => dnwell })

# ppolyf_u (3-terminal unsalicided p+ poly resistor (outside DNWELL))
logger.info('Extracting ppolyf_u device')
extract_devices(resistor_with_bulk('ppolyf_u', 350, BResistor),
                 { 'R' => ppolyf_u_layer, 'C' => poly2_con, 'W' => sub })

# ppolyf_u_dw (3-terminal unsalicided p+ poly resistor (inside DNWELL))
logger.info('Extracting ppolyf_u_dw device')
extract_devices(resistor_with_bulk('ppolyf_u_dw', 350, BResistor),
                { 'R' => ppolyf_u_dw_layer, 'C' => poly2_con, 'W' => dnwell })

# npolyf_s (3-terminal salicided n+ poly resistor (outside DNWELL))
logger.info('Extracting npolyf_s device')
extract_devices(resistor_with_bulk('npolyf_s', 6.8, BResistor),
                { 'R' => npolyf_s_layer, 'C' => poly2_con, 'W' => sub })

# npolyf_s_dw (3-terminal salicided n+ poly resistor (inside DNWELL))
logger.info('Extracting npolyf_s_dw device')
extract_devices(resistor_with_bulk('npolyf_s_dw', 6.8, BResistor),
                { 'R' => npolyf_s_dw_layer, 'C' => poly2_con, 'W' => dnwell })

# ppolyf_s (3-terminal salicided p+ poly resistor (outside DNWELL))
logger.info('Extracting ppolyf_s device')
extract_devices(resistor_with_bulk('ppolyf_s', 7.3, BResistor), 
                { 'R' => ppolyf_s_layer, 'C' => poly2_con, 'W' => sub })

# ppolyf_s_dw (3-terminal salicided p+ poly resistor (inside DNWELL))
logger.info('Extracting ppolyf_s_dw device')
extract_devices(resistor_with_bulk('ppolyf_s_dw', 7.3, BResistor),
                { 'R' => ppolyf_s_dw_layer, 'C' => poly2_con, 'W' => dnwell })


#========================
# ---- POLY High RES ----
#========================

case POLY_RES
when '1k'

  # ppolyf_u_1k (3-terminal 1k high-Rs p+ poly resistor on field oxide (outside DNWELL))
  logger.info('Extracting ppolyf_u_1k device')
  extract_devices(resistor_with_bulk('ppolyf_u_1k', 1000, BResistor),
                  { 'R' => ppolyf_u_1k_layer, 'C' => poly2_con, 'W' => sub })

  # ppolyf_u_1k_dw (3-terminal 1k high-Rs p+ poly resistor on field oxide (inside DNWELL))
  logger.info('Extracting ppolyf_u_1k_dw device')
  extract_devices(resistor_with_bulk('ppolyf_u_1k_dw', 1000, BResistor),
                  { 'R' => ppolyf_u_1k_dw_layer, 'C' => poly2_con, 'W' => dnwell })


when '2k'

   # ppolyf_u_2k (3-terminal 2k high-Rs p+ poly resistor on field oxide (outside DNWELL))
   logger.info('Extracting ppolyf_u_2k device')
   extract_devices(resistor_with_bulk('ppolyf_u_2k', 2000, BResistor),
                   { 'R' => ppolyf_u_2k_layer, 'C' => poly2_con, 'W' => sub })
  
   # ppolyf_u_2k_dw (3-terminal 2k high-Rs p+ poly resistor on field oxide (inside DNWELL))
   logger.info('Extracting ppolyf_u_2k_dw device')
   extract_devices(resistor_with_bulk('ppolyf_u_2k_dw', 2000, BResistor),
                   { 'R' => ppolyf_u_2k_dw_layer, 'C' => poly2_con, 'W' => dnwell })

end
#=============================
# ---- POLY Free High RES ----
#=============================

# ppolyf_u_fhr_16p0_lv (3-terminal free high-Rs p+ poly res. On field oxide (LV/MV area outside DNWELL))
logger.info('Extracting ppolyf_u_fhr_16p0_lv device')
extract_devices(resistor_with_bulk('ppolyf_u_fhr_16p0_lv', 6000, BResistor),
                 { 'R' => ppolyf_u_fhr_16p0_lv_layer, 'C' => poly2_con, 'W' => sub })

# ppolyf_u_fhr_16p0_lv_dw (3-terminal free high-Rs p+ poly res. On field oxide (LV/MV area inside DNWELL))
logger.info('Extracting ppolyf_u_fhr_16p0_lv_dw device')
extract_devices(resistor_with_bulk('ppolyf_u_fhr_16p0_lv_dw', 6000, BResistor),
                { 'R' => ppolyf_u_fhr_16p0_lv_dw_layer, 'C' => poly2_con, 'W' => dnwell })
