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

#================================================
#------------ DEVICES CONNECTIVITY --------------
#================================================

logger.info('Starting GF180BCDLite LVS connectivity setup')

#================================
# ----- GENERAL CONNECTIONS -----
#================================

logger.info('Starting GF180BCDLite LVS connectivity setup (Inter-layer)')

# Inter-layer
connect(sub, ptap)
connect(lvpwell_con, ptap)
connect(lvpwell_con, ptap_dn)
connect(dnw_pw_con, ptap_dn)
connect(dnwell, ntap_dn)
connect(nwell_con, ntap)
connect(ptap, contact)
connect(ptap_dn, contact)
connect(ntap, contact)
connect(ntap_dn, contact)
connect(psd, contact)
connect(psd_dn, contact)
connect(nsd, contact)
connect(nsd_dn, contact)
connect(poly2_con, contact)
connect(contact, metal1_con)
connect(metal1_con, via1)
connect(via1, metal2_con)

case METAL_LEVEL
when '3LM', '4LM', '5LM', '6LM'
  connect(metal2_con, via2_n_cap)
  connect(via2_n_cap, metal3_con)
  connect(metal3_con, metal3_label)
end
case METAL_LEVEL
when '4LM', '5LM', '6LM'
  connect(metal3_con, via3_n_cap)
  connect(via3_n_cap, metal4_con)
  connect(metal4_con, metal4_label)
end
case METAL_LEVEL
when '5LM', '6LM'
  connect(metal4_con, via4_n_cap)
  connect(via4_n_cap, metal5_con)
  connect(metal5_con, metal5_label)
end
case METAL_LEVEL
when '6LM'
  connect(metal5_con, via5_n_cap)
  connect(via5_n_cap, metaltop_con)
  connect(metaltop_con, metaltop_label)
end
connect(top_via, top_metal_con)
connect(top_metal, top_metal_label)

# Attaching labels
connect(comp, comp_label)
connect(poly2_con, poly2_label)
connect(metal1_con, metal1_label)
connect(metal2_ncap, metal2_label)

logger.info('Starting GF180BCDLite LVS connectivity setup (Global)')

# Global
connect_global(sub, substrate_name)

logger.info('Starting GF180BCDLite LVS connectivity setup (Multifinger Devices)')

# Multifinger Devices
connect_implicit('*')
