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

#================================
# ------ BJT CONNECTIONS --------
#================================
logger.info('Starting LVS BJT CONNECTIONS')

# ========================================
# ---- VNPN (isolated collector) (5V) ----
# ========================================

# vnpn_5x5 nodes connections
connect(npn_05p00x05p00_e, contact)
connect(npn_05p00x05p00_b, contact)
connect(npn_05p00x05p00_c, contact)

# vnpn_0p54x16 nodes connections
connect(npn_00p54x16p00_e, contact)
connect(npn_00p54x16p00_b, contact)
connect(npn_00p54x16p00_c, contact)

# vnpn_0p54x8 nodes connections
connect(npn_00p54x08p00_e, contact)
connect(npn_00p54x08p00_b, contact)
connect(npn_00p54x08p00_c, contact)

# vnpn_0p54x2 nodes connections
connect(npn_00p54x02p00_e, contact)
connect(npn_00p54x02p00_b, contact)
connect(npn_00p54x02p00_c, contact)

# ===========================================
# ---- VNPN (isolated collector) (3.3V) ----
# ===========================================

# vnpn_5x5_3p3 nodes connections
connect(npn_05p00x05p00_e_3p3, contact)
connect(npn_05p00x05p00_b_3p3, contact)
connect(npn_05p00x05p00_c_3p3, contact)

# vnpn_0p54x16_3p3 nodes connections
connect(npn_00p54x16p00_e_3p3, contact)
connect(npn_00p54x16p00_b_3p3, contact)
connect(npn_00p54x16p00_c_3p3, contact)

# vnpn_0p54x8_3p3 nodes connections
connect(npn_00p54x08p00_e_3p3, contact)
connect(npn_00p54x08p00_b_3p3, contact)
connect(npn_00p54x08p00_c_3p3, contact)

# vnpn_0p54x2_3p3 nodes connections
connect(npn_00p54x02p00_e_3p3, contact)
connect(npn_00p54x02p00_b_3p3, contact)
connect(npn_00p54x02p00_c_3p3, contact)


# ========================================
# ---- VPNP (Psub as collector) (6V) ----
# ========================================

# vpnp_6p0_10x10 nodes connections
connect(pnp_10p00x10p00_e, contact)
connect(pnp_10p00x10p00_b, contact)
connect(pnp_10p00x10p00_c, contact)

# vpnp_6p0_5x5 nodes connections
connect(pnp_05p00x05p00_e, contact)
connect(pnp_05p00x05p00_b, contact)
connect(pnp_05p00x05p00_c, contact)

# vpnp_6p0_0p42x20 nodes connections
connect(pnp_00p42x20p00_e, contact)
connect(pnp_00p42x20p00_b, contact)
connect(pnp_00p42x20p00_c, contact)

# vpnp_6p0_0p42x10 nodes connections
connect(pnp_00p42x10p00_e, contact)
connect(pnp_00p42x10p00_b, contact)
connect(pnp_00p42x10p00_c, contact)

# vpnp_6p0_0p42x5 nodes connections
connect(pnp_00p42x05p00_e, contact)
connect(pnp_00p42x05p00_b, contact)
connect(pnp_00p42x05p00_c, contact)