blob: 1f723ae38914e1d2866736d316a1e3900bba1978 [file] [log] [blame]
################################################################################################
# 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 })