################################################################################################
# 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')

# nmos_1p8_dw (LV NMOS Inside Dnwell)
logger.info('Extracting nmos_1p8 transistor Inside DNWEL')
extract_devices(mos4('nmos_1p8_dw'),
                { 'SD' => nsd, 'G' => ngate_1p8_dw, 
                'tS' => nsd, 'tD' => nsd, 'tG' => poly2_con, 'W' => lvpwell_con })

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

# pmos_1p8_dw (LV PMOS Inside Dnwell)
logger.info('Extracting pmos_1p8 transistor Inside DNWEL')
extract_devices(mos4('pmos_1p8_dw'),
                { 'SD' => psd_dw, 'G' => pgate_1p8_dw, 
                'tS' => psd_dw, 'tD' => psd_dw, 'tG' => poly2_con, 'W' => dnwell })

# pmos_1p8 (LV PMOS outside Dnwell)
logger.info('Extracting pmos_1p8 transistor Inside DNWEL')
extract_devices(mos4('pmos_1p8'),
                { 'SD' => psd, 'G' => pgate_1p8, 
                'tS' => psd, 'tD' => psd, 'tG' => poly2_con, 'W' => nwell_con })

# nmos_1p8_nat (LV native Vt NMOS)
logger.info('Extracting native nmos_1p8 transistor')
extract_devices(mos4('nmos_1p8_nat'),
                { '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')

# nmos_3p3_dw (NMOS Inside Dnwell)
logger.info('Extracting nmos_3p3 transistor Inside DNWEL')
extract_devices(mos4('nmos_3p3_dw'),
                { 'SD' => nsd, 'G' => ngate_3p3_dw, 
                'tS' => nsd, 'tD' => nsd, 'tG' => poly2_con, 'W' => lvpwell_con })

# nmos_3p3 (NMOS outside Dnwell)
logger.info('Extracting nmos_3p3 transistor outside DNWEL')
extract_devices(mos4('nmos_3p3'),
                { 'SD' => nsd, 'G' => ngate_3p3, 
                'tS' => nsd, 'tD' => nsd, 'tG' => poly2_con, 'W' => sub })

# pmos_3p3_dw (PMOS Inside Dnwell)
logger.info('Extracting pmos_3p3 transistor Inside DNWEL')
extract_devices(mos4('pmos_3p3_dw'),
                { 'SD' => psd_dw, 'G' => pgate_3p3_dw, 
                'tS' => psd_dw, 'tD' => psd_dw, 'tG' => poly2_con, 'W' => dnwell })

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

# nmos_3p3_nat (3.3 native Vt NMOS)
logger.info('Extracting native nmos_3p3 transistor')
extract_devices(mos4('nmos_3p3_nat'),
                { 'SD' => nsd, 'G' => ngate_3p3_nat, 
                'tS' => nsd, 'tD' => nsd, 'tG' => poly2_con, 'W' => sub })


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

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

# nmos_6p0_dw (MV NMOS Inside Dnwell)
logger.info('Extracting nmos_6p0 transistor Inside DNWEL')
extract_devices(mos4('nmos_6p0_dw'),
                { 'SD' => nsd, 'G' => ngate_6p0_dw, 
                'tS' => nsd, 'tD' => nsd, 'tG' => poly2_con, 'W' => lvpwell_con })

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

# pmos_6p0_dw (MV PMOS Inside Dnwell)
logger.info('Extracting pmos_6p0 transistor Inside DNWEL')
extract_devices(mos4('pmos_6p0_dw'),
                { 'SD' => psd_dw, 'G' => pgate_6p0_dw, 
                'tS' => psd_dw, 'tD' => psd_dw, 'tG' => poly2_con, 'W' => dnwell })

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

# nmos_6p0_nat (MV native Vt NMOS)
logger.info('Extracting native nmos_6p0 transistor')
extract_devices(mos4('nmos_6p0_nat'),
                { 'SD' => nsd, 'G' => ngate_6p0_nat, 
                'tS' => nsd, 'tD' => nsd, 'tG' => poly2_con, 'W' => sub })


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

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

# nmos_5p0_dw (MV NMOS Inside Dnwell)
logger.info('Extracting nmos_5p0 transistor Inside DNWEL')
extract_devices(mos4('nmos_5p0_dw'),
                { 'SD' => nsd, 'G' => ngate_5p0_dw, 
                'tS' => nsd, 'tD' => nsd, 'tG' => poly2_con, 'W' => lvpwell_con })

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

# pmos_5p0_dw (MV PMOS Inside Dnwell)
logger.info('Extracting pmos_5p0 transistor Inside DNWEL')
extract_devices(mos4('pmos_5p0_dw'),
                { 'SD' => psd_dw, 'G' => pgate_5p0_dw, 
                'tS' => psd_dw, 'tD' => psd_dw, 'tG' => poly2_con, 'W' => dnwell })

# pmos_5p0 (MV PMOS outside Dnwell)
logger.info('Extracting pmos_5p0 transistor Inside DNWEL')
extract_devices(mos4('pmos_5p0'),
                { 'SD' => psd, 'G' => pgate_5p0, 
                'tS' => psd, 'tD' => psd, 'tG' => poly2_con, 'W' => nwell_con })