################################################################################################
# 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 transistor Inside DNWEL')
extract_devices(mos4('nfet_01v8_dn'),
                { 'SD' => nsd_dn, 'G' => ngate_1p8_dn, 
                  'tS' => nsd_dn, 'tD' => nsd, 'tG' => poly2_con, 'W' => lvpwell_con })

# pfet_01v8: Model for LV PMOS outside Dnwell [pmos_1p8]
logger.info('Extracting pfet_01v8 transistor Inside DNWEL')
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 transistor Inside DNWEL')
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 })

#===========================
# ---- 3.3V TRANSISTORS ----
#===========================

logger.info('Starting 3.3V TRANSISTORS EXTRACTION')

# nfet_03v3: Model for 3.3V NMOS outside Dnwell [nmos_3p3]
logger.info('Extracting nfet_03v3 transistor outside DNWEL')
extract_devices(mos4('nfet_03v3'),
                { 'SD' => nsd, 'G' => ngate_3p3, 
                  'tS' => nsd, 'tD' => nsd, 'tG' => poly2_con, 'W' => sub })

# nfet_03v3_dn: Model for 3.3V NMOS Inside Dnwell [nmos_3p3_dw]
logger.info('Extracting nfet_03v3 transistor Inside DNWEL')
extract_devices(mos4('nfet_03v3_dn'),
                { 'SD' => nsd_dn, 'G' => ngate_3p3_dn, 
                  'tS' => nsd_dn, 'tD' => nsd_dn, 'tG' => poly2_con, 'W' => lvpwell_con })

# pfet_03v3: Model for 3.3V PMOS outside Dnwell [pmos_3p3]
logger.info('Extracting pfet_03v3 transistor Inside DNWEL')
extract_devices(mos4('pfet_03v3'),
                { 'SD' => psd, 'G' => pgate_3p3, 
                  'tS' => psd, 'tD' => psd, 'tG' => poly2_con, 'W' => nwell_con })

# pfet_03v3_dn: Model for 3.3V PMOS Inside Dnwell [pmos_3p3_dw]
logger.info('Extracting pfet_03v3 transistor Inside DNWEL')
extract_devices(mos4('pfet_03v3_dn'),
                { 'SD' => psd_dn, 'G' => pgate_3p3_dn, 
                  'tS' => psd_dn, 'tD' => psd_dn, 'tG' => poly2_con, 'W' => dnwell })

# nfet_03v3_nvt: Model for 3.3V native Vt NMOS [nmos_3p3_nat]
logger.info('Extracting nfet_03v3_nvt transistor')
extract_devices(mos4('nfet_03v3_nvt'),
                { 'SD' => nsd, 'G' => ngate_3p3_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 outside DNWEL')
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 transistor Inside DNWEL')
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 Inside DNWEL')
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 transistor Inside DNWEL')
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 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 transistor Inside DNWEL')
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 })
