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

#================================
# ----- MOSFET EXTRACTION -------
#================================

logger.info('Starting MOSFET EXTRACTION')

#=================================
# ---- LV (1.8V) TRANSISTORS ----
#=================================

logger.info('Starting LV (1.8V) TRANSISTORS EXTRACTION')

# nfet_01v8: Model for LV NMOS outside Dnwell [nmos_1p8]
logger.info('Extracting nfet_01v8 transistor outside DNWEL')
extract_devices(mos4('nfet_01v8'),
                { 'SD' => nsd, 'G' => ngate_1p8, 
                  'tS' => nsd, 'tD' => nsd, 'tG' => poly2_con, 'W' => sub })

# nfet_01v8_dn: Model for LV NMOS Inside Dnwell [nmos_1p8 _dw]
logger.info('Extracting nfet_01v8_dn transistor Inside DNWEL')
extract_devices(mos4('nfet_01v8_dn'),
                { 'SD' => nsd_dn, 'G' => ngate_1p8_dn, 
                  'tS' => nsd_dn, 'tD' => nsd_dn, 'tG' => poly2_con, 'W' => lvpwell_con })

# pfet_01v8: Model for LV PMOS outside Dnwell [pmos_1p8]
logger.info('Extracting pfet_01v8 transistor')
extract_devices(mos4('pfet_01v8'),
                { 'SD' => psd, 'G' => pgate_1p8, 
                  'tS' => psd, 'tD' => psd, 'tG' => poly2_con, 'W' => nwell_con })

# pfet_01v8_dn: Model for LV PMOS Inside Dnwell [pmos_1p8_dw] 
logger.info('Extracting pfet_01v8_dn transistor')
extract_devices(mos4('pfet_01v8_dn'),
                { 'SD' => psd_dn, 'G' => pgate_1p8_dn, 
                  'tS' => psd_dn, 'tD' => psd_dn, 'tG' => poly2_con, 'W' => dnwell })

# nfet_01v8_nvt: Model for LV native Vt NMOS [nmos_1p8_nat]
logger.info('Extracting nfet_01v8_nvt transistor')
extract_devices(mos4('nfet_01v8_nvt'),
                { 'SD' => nsd, 'G' => ngate_1p8_nat, 
                  'tS' => nsd, 'tD' => nsd, 'tG' => poly2_con, 'W' => sub })

#==============================
# ---- MV (5V) TRANSISTORS ----
#==============================

logger.info('Starting MV(5V) TRANSISTORS EXTRACTION')

# nfet_05v0: Model for MV NMOS outside Dnwell [nmos_5p0]
logger.info('Extracting nfet_05v0 transistor')
extract_devices(mos4('nfet_05v0'),
                { 'SD' => nsd, 'G' => ngate_5p0, 
                  'tS' => nsd, 'tD' => nsd, 'tG' => poly2_con, 'W' => sub })

# nfet_05v0_dn: Model for MV NMOS Inside Dnwell [nmos_5p0_dw]
logger.info('Extracting nfet_05v0_dn transistor')
extract_devices(mos4('nfet_05v0_dn'),
                { 'SD' => nsd_dn, 'G' => ngate_5p0_dn, 
                  'tS' => nsd_dn, 'tD' => nsd_dn, 'tG' => poly2_con, 'W' => lvpwell_con })

# pfet_05v0: Model for MV PMOS Outside Dnwell [pmos_5p0]
logger.info('Extracting pfet_05v0 transistor')
extract_devices(mos4('pfet_05v0'),
                { 'SD' => psd, 'G' => pgate_5p0, 
                  'tS' => psd, 'tD' => psd, 'tG' => poly2_con, 'W' => nwell_con })

# pfet_05v0_dn: Model for MV PMOS Inside Dnwell [pmos_5p0_dw]
logger.info('Extracting pfet_05v0_dn transistor')
extract_devices(mos4('pfet_05v0_dn'),
                { 'SD' => psd_dn, 'G' => pgate_5p0_dn, 
                  'tS' => psd_dn, 'tD' => psd_dn, 'tG' => poly2_con, 'W' => dnwell })

#==============================
# ---- MV (6V) TRANSISTORS ----
#==============================

logger.info('Starting MV(6V) TRANSISTORS EXTRACTION')

# nfet_06v0: Model for MV NMOS outside Dnwell [nmos_6p0]
logger.info('Extracting nfet_06v0 transistor outside DNWEL')
extract_devices(mos4('nfet_06v0'),
                { 'SD' => nsd, 'G' => ngate_6p0, 
                  'tS' => nsd, 'tD' => nsd, 'tG' => poly2_con, 'W' => sub })

# nfet_06v0_dn: Model for MV NMOS Inside Dnwell [nmos_6p0_dw]
logger.info('Extracting nfet_06v0_dn transistor Inside DNWEL')
extract_devices(mos4('nfet_06v0_dn'),
                { 'SD' => nsd_dn, 'G' => ngate_6p0_dn, 
                  'tS' => nsd_dn, 'tD' => nsd_dn, 'tG' => poly2_con, 'W' => lvpwell_con })

# pfet_06v0: Model for MV PMOS Outside Dnwell [pmos_6p0]
logger.info('Extracting pfet_06v0 transistor Inside DNWEL')
extract_devices(mos4('pfet_06v0'),
                { 'SD' => psd, 'G' => pgate_6p0, 
                  'tS' => psd, 'tD' => psd, 'tG' => poly2_con, 'W' => nwell_con })

# pfet_06v0_dn: Model for MV PMOS Inside Dnwell [pmos_6p0_dw]
logger.info('Extracting pfet_06v0_dn transistor')
extract_devices(mos4('pfet_06v0_dn'),
                { 'SD' => psd_dn, 'G' => pgate_6p0_dn, 
                  'tS' => psd_dn, 'tD' => psd_dn, 'tG' => poly2_con, 'W' => dnwell })

# nfet_06v0_nvt: Model for 6.0V Native Vt NMOS [nmos_6p0_nat]
logger.info('Extracting nfet_06v0_nvt transistor')
extract_devices(mos4('nfet_06v0_nvt'),
                { 'SD' => nsd, 'G' => ngate_6p0_nat, 
                  'tS' => nsd, 'tD' => nsd, 'tG' => poly2_con, 'W' => sub })

# pfet_06v0_nvt_dn: Model for 6.0V Native Vt PMOS Inside Dnwell [pmos_6p0_nat_dw]
logger.info('Extracting pfet_06v0_nvt_dn transistor')
extract_devices(mos4('pfet_06v0_nvt_dn'),
                { 'SD' => psd_dn, 'G' => pgate_6p0_nat_dn, 
                  'tS' => psd_dn, 'tD' => psd_dn, 'tG' => poly2_con, 'W' => dnwell })
