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

#================================
# ---- RESISTOR DERIVATIONS -----
#================================

logger.info('Starting RESISTOR DERIVATIONS')


#==========================
# --- PPOLY-RES EXCLUDE ---
#==========================

ppoly_exclude =  comp.join(nplus).join(esd)
                     .join(resistor).join(polyfuse).join(cap_mk)
                     .join(fusewindow_d).join(polyfuse).join(drc_bjt)
                     .join(lvs_bjt).outside(fhres).join(fusetop)
                     .join(diode_mk).join(piscap).join(mos_cap_mk)
                     .join(mim_l_mk).join(nat).join(v5_xtor)

#====================
# ---- POLY RES ----
#====================

ppoly_res = pplus.and(poly2).and(res_mk).not(ppoly_exclude)

# ppolyf_u (3-terminal unsalicided p+ poly resistor (outside DNWELL))
ppolyf_u_layer = ppoly_res.and(sab).not(dnwell)

# ppolyf_u_dw (3-terminal unsalicided p+ poly resistor (inside DNWELL))
ppolyf_u_dw_layer = ppoly_res.and(sab).and(dnwell)

# ppolyf_s (3-terminal salicided p+ poly resistor (outside DNWELL))
ppolyf_s_layer = ppoly_res.not_interacting(sab).not(dnwell)

# ppolyf_s_dw (3-terminal salicided p+ poly resistor (inside DNWELL))
ppolyf_s_dw_layer = ppoly_res.not_interacting(sab).and(dnwell)
