blob: e17eaad1180e88c583c18a47f11d51acab6e6804 [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_s (Model for Salicide N+ diffusion resistor)
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_u (Model for Unsalicide N+ diffusion resistor)
logger.info('Extracting nplus_u device')
extract_devices(resistor_with_bulk('nplus_u', 60, BResistor),
{ 'R' => nplus_u_layer, 'C' => nplus_cont, 'W' => sub })
# pplus_s (Model for Salicide P+ diffusion resistor)
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_u (Model for Unsalicide P+ diffusion resistor)
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 })
#====================
# ---- POLY RES ----
#====================
# npolyf_s (Model for Salicide N+poly resistor on field)
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_u (Model for Unsalicide N+poly resistor on field)
logger.info('Extracting npolyf_u device')
extract_devices(resistor_with_bulk('npolyf_u', 310, BResistor),
{ 'R' => npolyf_u_layer, 'C' => poly2_con, 'W' => sub })
# ppolyf_s (Model for Salicide P+poly resistor on field)
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_u (Model for Unsalicide P+poly resistor on field)
logger.info('Extracting ppolyf_u device')
extract_devices(resistor_with_bulk('ppolyf_u', 350, BResistor),
{ 'R' => ppolyf_u_layer, 'C' => poly2_con, 'W' => sub })
#====================
# ---- POLY HRES ----
#====================
# npolyf_u_1k (Model for Unsalicide 1k high Rs N+poly resistor on field)
logger.info('Extracting npolyf_u_1k device')
extract_devices(resistor_with_bulk('npolyf_u_1k', 1000, BResistor),
{ 'R' => npolyf_u_1k_layer, 'C' => poly2_con, 'W' => sub })
# ppolyf_u_1k (Model for Unsalicide 1k high Rs P+poly resistor on field)
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_2k (Model for Unsalicide 2k high Rs P+poly resistor on field)
logger.info('Extracting ppolyf_u_2k device')
extract_devices(resistor_with_bulk('ppolyf_u_2k', 2000, BResistor),
{ 'R' => ppolyf_u_2k_layer, 'C' => ppolyf_u_2k_cont, 'W' => sub })
#====================
# ---- NWELL RES ----
#====================
# nwell (Model for n-well diffusion resistor)
logger.info('Extracting nwell device')
extract_devices(resistor_with_bulk('nwell', 1000, BResistor),
{ 'R' => nwell_res, 'C' => nwell_con, 'W' => sub })