################################################################################################
# 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, 'G' => ngate_1p8_dn, 
                  'tS' => nsd, 'tD' => nsd, '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, 'G' => ngate_5p0_dn, 
                  'tS' => nsd, 'tD' => nsd, '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, 'G' => ngate_6p0_dn, 
                  'tS' => nsd, 'tD' => nsd, '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 })
