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

#==================================
# ------ GENERAL DERIVATIONS ------
#==================================

ncomp           = comp.and(nplus)
pcomp           = comp.and(pplus)
tgate           = poly2.and(comp).not(res_mk)

ngate           = nplus.and(tgate)
nsd             = ncomp.outside(nwell).interacting(ngate).not(ngate).not(res_mk)
ptap            = pcomp.outside(nwell).outside(dnwell).not(res_mk)

pgate           = pplus.and(tgate)
psd             = pcomp.inside(nwell).interacting(pgate).not(pgate).not(res_mk)
ntap            = ncomp.inside(nwell).not(res_mk)

ngate_dw        = ngate.and(lvpwell).and(dnwell)
ptap_dw         = pcomp.inside(lvpwell).inside(dnwell).not(res_mk)

pgate_dw        = pgate.inside(dnwell).outside(lvpwell)
ntap_dw         = ncomp.outside(lvpwell).inside(dnwell).not(res_mk)

psd_dw          = pcomp.not(lvpwell).and(dnwell).interacting(pgate).not(pgate).not(res_mk)
nwell_con       = nwell.not(res_mk)
lvpwell_con     = lvpwell.not(res_mk)
poly2_con       = poly2.not(res_mk)


# Splitting vias into cap-vias(connected to fusetop), ncap-vias(connected to metals)
if METAL_LEVEL != '2LM'
    via2_ncap = via2.not(fusetop)
    via2_cap  = via2.and(fusetop)
    if METAL_LEVEL != '3LM'
      via3_ncap = via3.not(fusetop)
      via3_cap  = via3.and(fusetop)
      if METAL_LEVEL != '4LM'
        via4_ncap = via4.not(fusetop)
        via4_cap  = via4.and(fusetop)
        if METAL_LEVEL != '5LM'
          via5_ncap = via5.not(fusetop)
          via5_cap  = via5.and(fusetop)
        end
      end
    end
  end
