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

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

dnwell_n        = dnwell.not(lvpwell)
dnwell_p        = dnwell.and(lvpwell)

all_nwell       = dnwell_n.join(nwell)
all_nwell_pw    = dnwell.join(nwell)

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

nactive         = ncomp.not(all_nwell)
nactive_pw      = ncomp.not(all_nwell_pw)
ngate           = nactive.and(tgate)
ngate_pw        = nactive_pw.and(tgate)
nsd             = nactive.interacting(ngate).not(ngate).not(res_mk)
ptap            = pcomp.not(all_nwell_pw).not(res_mk)

pactive         = pcomp.and(all_nwell)
pgate           = pactive.and(tgate)
psd             = pactive.interacting(pgate).not(pgate).not(res_mk)
ntap            = ncomp.and(all_nwell_pw).not(res_mk)

ngate_dn        = ngate.and(dnwell_p)
ptap_dn         = ptap.and(dnwell_p).outside(well_diode_mk)

pgate_dn        = pgate.and(dnwell_n)
ntap_dn         = ntap.and(dnwell_n)

psd_dn          = pcomp.and(dnwell_n).interacting(pgate_dn).not(pgate_dn).not(res_mk)
nsd_dn          = ncomp.and(dnwell_p).interacting(ngate_dn).not(ngate_dn).not(res_mk)

nwell_con       = nwell.not(res_mk)
lvpwell_con     = lvpwell.not(res_mk)
poly2_con       = poly2.not(res_mk).not(plfuse)

metal1_con      = metal1.not(mom_mk).not(mom_m1_mk)
metal2_con      = metal2.not(mom_mk).not(mom_m2_mk)

case METAL_LEVEL
when '3LM', '4LM', '5LM', '6LM'
  metal3_con = metal3.not(mom_mk).not(mom_m3_mk)
  via2_n_cap = via2.not(fusetop)
  via2_cap = via2.and(fusetop)
end
case METAL_LEVEL
when '4LM', '5LM', '6LM'
  metal4_con = metal4.not(mom_mk).not(mom_m4_mk)
  via3_n_cap = via3.not(fusetop)
  via3_cap = via3.and(fusetop)
end
case METAL_LEVEL
when '5LM', '6LM'
  metal5_con = metal5.not(mom_mk).not(mom_m5_mk)
  via4_n_cap = via4.not(fusetop)
  via4_cap = via4.and(fusetop)
end
case METAL_LEVEL
when '6LM'
  metaltop_con = metaltop.not(mom_mk)
  via5_n_cap = via5.not(fusetop)
  via5_cap = via5.and(fusetop)
end

case METAL_LEVEL
when '2LM'
  top_metal_con = metal2_con
  top_via_n_cap = via1.not(fusetop)
  top_via_cap = via1.and(fusetop)
when '3LM'
  top_metal_con = metal3_con
  top_via_n_cap = via2.not(fusetop)
  top_via_cap = via2.and(fusetop)
when '4LM'
  top_metal_con = metal4.not(mom_mk).not(mom_m4_mk)
  top_via_n_cap = via3.not(fusetop)
  top_via_cap = via3.and(fusetop)
when '5LM'
  top_metal_con = metal5.not(mom_mk).not(mom_m5_mk)
  top_via_n_cap = via4.not(fusetop)
  top_via_cap = via4.and(fusetop)
when '6LM'
  top_metal_con = metaltop.not(mom_mk)
  top_via_n_cap = via5.not(fusetop)
  top_via_cap = via5.and(fusetop)
else
  logger.error("Unknown metal stack #{METAL_LEVEL}")
  raise
end
