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

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

# res_ppo_3t_uns [PPOLYF_U]
logger.info('Extracting res_ppo_3t_uns resistor')
extract_devices(resistor_with_bulk('res_ppo_3t_uns', 350, BResistor), { 'R' => ppolyf_u_layer, 'C' => poly2_con, 'W' => sub })

# res_ppo_3t_uns_dn [PPOLYF_U_DW]
logger.info('Extracting res_ppo_3t_uns_dn resistor')
extract_devices(resistor_with_bulk('res_ppo_3t_uns_dn', 350, BResistor),
                { 'R' => ppolyf_u_dw_layer, 'C' => poly2_con, 'W' => dnwell })

# res_ppo_3t_sal [PPOLYF_S]
logger.info('Extracting res_ppo_3t_sal resistor')
extract_devices(resistor_with_bulk('res_ppo_3t_sal', 7.3, BResistor), { 'R' => ppolyf_s_layer, 'C' => poly2_con, 'W' => sub })

# res_ppo_3t_sal_dn [PPOLYF_S_DW]
logger.info('Extracting res_ppo_3t_sal_dn resistor')
extract_devices(resistor_with_bulk('res_ppo_3t_sal_dn', 7.3, BResistor),
                { 'R' => ppolyf_s_dw_layer, 'C' => poly2_con, 'W' => dnwell })
