| ################################################################################################ |
| # 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. |
| ################################################################################################ |
| |
| #================================================ |
| #------------ DEVICES CONNECTIVITY -------------- |
| #================================================ |
| |
| logger.info('Starting GF180 LVS connectivity setup') |
| |
| #================================ |
| # ----- GENERAL CONNECTIONS ----- |
| #================================ |
| |
| logger.info('Starting GF180 LVS connectivity setup (Inter-layer)') |
| |
| # Inter-layer |
| connect(sub, ptap) |
| connect(dnwell, ntap_dw) |
| connect(nwell_con, ntap) |
| connect(ptap, contact) |
| connect(ptap_dw, contact) |
| connect(ntap, contact) |
| connect(ntap_dw, contact) |
| connect(psd, contact) |
| connect(psd_dw, contact) |
| connect(nsd, contact) |
| connect(poly2_con, contact) |
| connect(contact, metal1) |
| connect(metal1, via1) |
| connect(via1, metal2_ncap) |
| if METAL_LEVEL != '2LM' |
| connect(metal2_ncap, via2) |
| connect(via2, metal3_ncap) |
| if METAL_LEVEL != '3LM' |
| connect(metal3_ncap, via3) |
| connect(via3, metal4_ncap) |
| if METAL_LEVEL != '4LM' |
| connect(metal4_ncap, via4) |
| connect(via4, metal5_ncap) |
| if METAL_LEVEL != '5LM' |
| connect(metal5_ncap, via5) |
| connect(via5, metaltop) |
| end |
| end |
| end |
| end |
| |
| logger.info('Starting GF180 LVS connectivity setup (Attaching labels)') |
| |
| # Attaching labels |
| connect(comp, comp_label) |
| connect(poly2_con, poly2_label) |
| connect(metal1, metal1_label) |
| connect(metal2_ncap, metal2_label) |
| if METAL_LEVEL != '2LM' |
| connect(metal3_ncap, metal3_label) |
| if METAL_LEVEL != '3LM' |
| connect(metal4_ncap, metal4_label) |
| if METAL_LEVEL != '4LM' |
| connect(metal5_ncap, metal5_label) |
| connect(metaltop, metaltop_label) if METAL_LEVEL != '5LM' |
| end |
| end |
| end |
| |
| logger.info('Starting GF180 LVS connectivity setup (Global)') |
| |
| # Global |
| connect_global(sub, substrate_name) |
| |
| logger.info('Starting GF180 LVS connectivity setup (Multifinger Devices)') |
| |
| # Multifinger Devices |
| connect_implicit('*') |
| |
| |
| #================================ |
| # ------ BJT CONNECTIONS -------- |
| #================================ |
| logger.info('Starting LVS BJT CONNECTIONS') |
| |
| # ============== |
| # ---- vnpn ---- |
| # ============== |
| |
| # npn_02p00x02p00 nodes connections |
| connect(npn_02p00x02p00_e, contact) |
| connect(npn_02p00x02p00_b, contact) |
| connect(npn_02p00x02p00_c, contact) |
| |
| # npn_05p00x05p00 nodes connections |
| connect(npn_05p00x05p00_e, contact) |
| connect(npn_05p00x05p00_b, contact) |
| connect(npn_05p00x05p00_c, contact) |
| |
| # ============== |
| # ---- vpnp ---- |
| # ============== |
| |
| # pnp_10p00x10p00 nodes connections |
| connect(pnp_10p00x10p00_e, contact) |
| connect(pnp_10p00x10p00_b, contact) |
| connect(pnp_10p00x10p00_c, contact) |
| |
| # pnp_05p00x05p00 nodes connections |
| connect(pnp_05p00x05p00_e, contact) |
| connect(pnp_05p00x05p00_b, contact) |
| connect(pnp_05p00x05p00_c, contact) |
| |
| # pnp_05p00x00p42 nodes connections |
| connect(pnp_05p00x00p42_e, contact) |
| connect(pnp_05p00x00p42_b, contact) |
| connect(pnp_05p00x00p42_c, contact) |
| |
| # pnp_1p2x2p5 nodes connections |
| connect(pnp_1p2x2p5_e, contact) |
| connect(pnp_1p2x2p5_b, contact) |
| connect(pnp_1p2x2p5_c, contact) |
| |
| # pnp_00p46x1p2 nodes connections |
| connect(pnp_00p46x1p2_e, contact) |
| connect(pnp_00p46x1p2_b, contact) |
| connect(pnp_00p46x1p2_c, contact) |
| |
| # pnp_00p46x00p46 nodes connections |
| connect(pnp_00p46x00p46_e, contact) |
| connect(pnp_00p46x00p46_b, contact) |
| connect(pnp_00p46x00p46_c, contact) |
| |
| |
| #================================ |
| # ----- DIODE CONNECTIONS ------- |
| #================================ |
| |
| logger.info('Starting LVS DIODE CONNECTIONS') |
| |
| # diode_np_1p8 |
| connect(diode_np_1p8_terminal_n, contact) |
| |
| # diode_pn_1p8 |
| connect(diode_pn_1p8_terminal_p, contact) |
| |
| # diode_np_3p3 |
| connect(diode_np_3p3_terminal_n, contact) |
| |
| # diode_pn_3p3 |
| connect(diode_pn_3p3_terminal_p, contact) |
| |
| # diode_nwp |
| connect(diode_nwp_terminal_n, contact) |
| connect(diode_nwp_terminal_p, contact) |
| |
| # diode_np_1p8_nat |
| connect(diode_np_1p8_nat_terminal_n, contact) |
| |
| # diode_np_3p3_nat |
| connect(diode_np_3p3_nat_terminal_n, contact) |
| |
| # diode_dnwpw |
| connect(diode_dnwpw_terminal_p, contact) |
| |
| # diode_dnwps |
| connect(diode_dnwps_terminal_p, contact) |
| |
| |
| #================================== |
| # ------ MIMCAP CONNECTIONS ------- |
| #================================== |
| |
| logger.info('Starting LVS MIMCAP CONNECTIONS') |
| |
| case MIM_OPTION |
| when 'A' |
| if MIM_CAP |
| connect(metal2, mim_virtual) |
| connect(fuse_cap, via2) |
| end |
| when 'B' |
| if MIM_CAP |
| connect(topmin1_metal, mimtm_virtual) |
| connect(fuse_cap, top_via) |
| end |
| if MIM_CAP_STACK |
| connect(topmin1_metal, mimtm_stack1_virtual) |
| connect(fuse_cap, top_via) |
| connect(topmin2_metal, mimtm_stack2_virtual) |
| connect(fuse2_cap, topmin1_via) |
| end |
| end |
| |
| |
| #======================================== |
| # ------ PN Varactors CONNECTIONS ------- |
| #======================================== |
| |
| # pnvar_1p8 varactor nodes connections |
| connect(pnvar_1p8_terminal_n, contact) |
| connect(pnvar_1p8_terminal_p, contact) |
| |
| |
| #================================ |
| # ---- RESISTOR DERIVATIONS ----- |
| #================================ |
| |
| logger.info('Starting LVS RESISTOR CONNECTIONS') |
| |
| connect(nplus_cont, contact) |
| connect(pplus_cont, contact) |