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

#================================
# ----- MOS-SAB EXTRACTION ------
#================================

logger.info('Starting MOS SAB EXTRACTION')

# ==============
# ---- NMOS ----
# ==============
logger.info('Starting NMOS SAB EXTRACTION')

# nmos_1p8_sab: 1.8V ESD NMOS transistor outside DNWELL
logger.info('Extracting nfet_01v8_dss transistor')
extract_devices(mos4('nfet_01v8_dss'), { 'SD' => nsd, 'G' => ngate_sab_1p8v, 
                                         'tS' => nsd, 'tD' => nsd, 'tG' => poly2_con, 
                                         'W' => sub })

# nmos_1p8_dw_sab: 1.8V ESD NMOS transistor INSIDE DNWELL
logger.info('Extracting nfet_01v8_dn_dss transistor')
extract_devices(mos4('nfet_01v8_dn_dss'), { 'SD' => nsd_dn, 'G' => ngate_dw_sab_1p8v, 
                                            'tS' => nsd_dn, 'tD' => nsd_dn, 'tG' => poly2_con,
                                            'W' => dnw_pw_con })

# nmos_5p0_sab: 5V ESD NMOS transistor outside DNWELL
logger.info('Extracting nfet_05v0_dss transistor')
extract_devices(mos4('nfet_05v0_dss'), { 'SD' => nsd, 'G' => ngate_sab_5v, 
                                         'tS' => nsd, 'tD' => nsd, 'tG' => poly2_con, 
                                         'W' => sub })

# nmos_5p0_dw_sab: 5V ESD NMOS transistor inside DNWELL
logger.info('Extracting nfet_05v0_dn_dss transistor')
extract_devices(mos4('nfet_05v0_dn_dss'), { 'SD' => nsd_dn, 'G' => ngate_dw_sab_5v, 
                                            'tS' => nsd_dn, 'tD' => nsd_dn, 'tG' => poly2_con,
                                            'W' => dnw_pw_con })

# nmos_6p0_sab: 6V ESD NMOS transistor outside DNWELL
logger.info('Extracting nfet_06v0_dss transistor')
extract_devices(mos4('nfet_06v0_dss'), { 'SD' => nsd, 'G' => ngate_sab_6v, 
                                         'tS' => nsd, 'tD' => nsd, 
                                         'tG' => poly2_con, 
                                         'W' => sub })

# nmos_6p0_dw_sab: 6V ESD NMOS transistor inside DNWELL
logger.info('Extracting nfet_06v0_dn_dss transistor')
extract_devices(mos4('nfet_06v0_dn_dss'), { 'SD' => nsd_dn, 'G' => ngate_dw_sab_6v, 
                                            'tS' => nsd_dn, 'tD' => nsd_dn, 'tG' => poly2_con,
                                            'W' => dnw_pw_con })
