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

#================================
# ------ DIODE EXTRACTION -------
#================================

logger.info('Starting DIODE EXTRACTION')

#================================
# ---- LV DIODE DERIVATIONS ----
#================================

# diode_np_1p8 (Model for 1.8V N+/Pwell diode outside DNWell)
logger.info('Extracting diode_np_1p8')
extract_devices(diode('diode_np_1p8'), { 'N' => diode_np_1p8_terminal_n, 'P' => lvpwell_con })

# diode_np_1p8_dw (Model for 1.8V N+/Pwell diode inside DNWell)
logger.info('Extracting diode_np_1p8_dw')
extract_devices(diode('diode_np_1p8_dw'), { 'N' => diode_np_1p8_dw_terminal_n, 'P' => lvpwell_con })

# diode_pn_1p8 (Model for 1.8V P+/Nwell diode outside DNWell)
logger.info('Extracting diode_pn_1p8')
extract_devices(diode('diode_pn_1p8'), { 'N' => nwell_con, 'P' => diode_pn_1p8_terminal_p })

# diode_pn_1p8_dw (Model for 1.8V P+/Nwell diode inside DNWell)
logger.info('Extracting diode_pn_1p8_dw')
extract_devices(diode('diode_pn_1p8_dw'), { 'N' => nwell_con, 'P' => diode_pn_1p8_dw_terminal_p })


#================================
# ---- MV DIODE DERIVATIONS ----
#================================

# diode_np_3p3 (Model for 3.3V N+/Pwell diode outside DNwell)
logger.info('Extracting diode_np_3p3')
extract_devices(diode('diode_np_3p3'), { 'N' => diode_np_3p3_terminal_n, 'P' => lvpwell_con })

# diode_pn_3p3 (Model for 3.3V P+/Nwell diode outside DNwell)
logger.info('Extracting diode_pn_3p3')
extract_devices(diode('diode_pn_3p3'), { 'N' => nwell_con, 'P' => diode_pn_3p3_terminal_p })

# diode_np_3p3_dw (Model for 3.3V N+/Pwell diode inside DNwell)
logger.info('Extracting diode_np_3p3_dw')
extract_devices(diode('diode_np_3p3_dw'), { 'N' => diode_np_3p3_dw_terminal_n, 'P' => lvpwell_con })

# diode_pn_3p3_dw (Model for 3.3V P+/Nwell diode inside DNwell)
logger.info('Extracting diode_pn_3p3_dw')
extract_devices(diode('diode_pn_3p3_dw'), { 'N' => nwell_con, 'P' => diode_pn_3p3_dw_terminal_p })

# diode_np_6p0 (Model for 6V N+/Pwell diode outside Dnwell)
logger.info('Extracting diode_np_6p0')
extract_devices(diode('diode_np_6p0'), { 'N' => diode_np_6p0_terminal_n, 'P' => lvpwell_con })

# diode_pn_6p0 (Model for 6V P+/Nwell diode outside DNwell)
logger.info('Extracting diode_pn_6p0')
extract_devices(diode('diode_pn_6p0'), { 'N' => nwell_con, 'P' => diode_pn_6p0_terminal_p })

# diode_np_6p0_dw (Model for 6V N+/Pwell diode inside DNwell)
logger.info('Extracting diode_np_6p0_dw')
extract_devices(diode('diode_np_6p0_dw'), { 'N' => diode_np_6p0_dw_terminal_n, 'P' => lvpwell_con })

# diode_pn_6p0_dw (Model for 6V P+/Nwell diode inside DNwell)
logger.info('Extracting diode_pn_6p0_dw')
extract_devices(diode('diode_pn_6p0_dw'), { 'N' => nwell_con, 'P' => diode_pn_6p0_dw_terminal_p })
