################################################################################################
# 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 CONNECTIONS -----
#================================

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

# Inter-layer
connect(sub, ptap)
connect(dnwell, ntap)
connect(nwell_con, ntap)
connect(ptap, contact)
connect(ntap, contact)
connect(psd, contact)
connect(nsd, contact)
connect(poly2_con, contact)
connect(contact, metal1)
connect(metal1, via1)
connect(via1, metal2)

case METAL_LEVEL
when '3LM', '4LM', '5LM', '6LM'
  connect(metal2, via2_n_cap)
  connect(via2_n_cap, metal3)
  connect(metal3, metal3_label)
end
case METAL_LEVEL
when '4LM', '5LM', '6LM'
  connect(metal3, via3_n_cap)
  connect(via3_n_cap, metal4)
  connect(metal4, metal4_label)
end
case METAL_LEVEL
when '5LM', '6LM'
  connect(metal4, via4_n_cap)
  connect(via4_n_cap, metal5)
  connect(metal5, metal5_label)
end
case METAL_LEVEL
when '6LM'
  connect(metal5, via5_n_cap)
  connect(via5_n_cap, metaltop)
  connect(metaltop, metaltop_label)
end
connect(top_via, top_metal)
connect(top_metal, top_metal_label)

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

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

# Global
connect_global(sub, substrate_name)

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

# Multifinger Devices
connect_implicit('*')
