From 56dc93f677c4c1567c0fbf317a7ef18d8f03031a Mon Sep 17 00:00:00 2001 From: RehabSayed-G Date: Thu, 16 Mar 2023 16:54:54 +0200 Subject: [PATCH 1/3] updating the last version of gdsfactory based pcells --- sky130/cells/klayout/pymacros/README.md | 3 + .../cells/klayout/pymacros/cells/__init__.py | 87 ++ sky130/cells/klayout/pymacros/cells/bjt.py | 94 ++ sky130/cells/klayout/pymacros/cells/cap.py | 183 ++++ sky130/cells/klayout/pymacros/cells/diode.py | 208 ++++ .../cells/klayout/pymacros/cells/draw_bjt.py | 66 ++ .../cells/klayout/pymacros/cells/draw_cap.py | 368 +++++++ .../klayout/pymacros/cells/draw_diode.py | 239 +++++ .../cells/klayout/pymacros/cells/draw_fet.py | 957 ++++++++++++++++++ .../klayout/pymacros/cells/draw_guard_ring.py | 95 ++ .../cells/klayout/pymacros/cells/draw_rf.py | 83 ++ .../cells/klayout/pymacros/cells/draw_vpp.py | 41 + sky130/cells/klayout/pymacros/cells/fet.py | 263 +++++ ...fd_pr__cap_vpp_02p4x04p6_m1m2_noshield.cdl | 22 + ...fd_pr__cap_vpp_02p4x04p6_m1m2_noshield.gds | Bin 0 -> 4314 bytes ..._02p7x06p1_m1m2m3m4_shieldl1_fingercap.cdl | 22 + ..._02p7x06p1_m1m2m3m4_shieldl1_fingercap.gds | Bin 0 -> 6406 bytes ..._02p7x11p1_m1m2m3m4_shieldl1_fingercap.cdl | 22 + ..._02p7x11p1_m1m2m3m4_shieldl1_fingercap.gds | Bin 0 -> 7942 bytes ..._02p7x21p1_m1m2m3m4_shieldl1_fingercap.cdl | 22 + ..._02p7x21p1_m1m2m3m4_shieldl1_fingercap.gds | Bin 0 -> 11142 bytes ..._02p7x41p1_m1m2m3m4_shieldl1_fingercap.cdl | 22 + ..._02p7x41p1_m1m2m3m4_shieldl1_fingercap.gds | Bin 0 -> 17542 bytes ...02p9x06p1_m1m2m3m4_shieldl1_fingercap2.cdl | 22 + ...02p9x06p1_m1m2m3m4_shieldl1_fingercap2.gds | Bin 0 -> 8998 bytes ...ap_vpp_03p9x03p9_m1m2_shieldl1_floatm3.cdl | 22 + ...ap_vpp_03p9x03p9_m1m2_shieldl1_floatm3.gds | Bin 0 -> 4426 bytes ..._pr__cap_vpp_04p4x04p6_l1m1m2_noshield.cdl | 22 + ..._pr__cap_vpp_04p4x04p6_l1m1m2_noshield.gds | Bin 0 -> 11614 bytes ...pp_04p4x04p6_l1m1m2_noshield_o2subcell.cdl | 22 + ...pp_04p4x04p6_l1m1m2_noshield_o2subcell.gds | Bin 0 -> 10830 bytes ..._vpp_04p4x04p6_l1m1m2_shieldpo_floatm3.cdl | 22 + ..._vpp_04p4x04p6_l1m1m2_shieldpo_floatm3.gds | Bin 0 -> 17742 bytes ...fd_pr__cap_vpp_04p4x04p6_m1m2_noshield.cdl | 22 + ...fd_pr__cap_vpp_04p4x04p6_m1m2_noshield.gds | Bin 0 -> 9594 bytes ...pr__cap_vpp_04p4x04p6_m1m2_noshield_o2.cdl | 22 + ...pr__cap_vpp_04p4x04p6_m1m2_noshield_o2.gds | Bin 0 -> 6508 bytes ...fd_pr__cap_vpp_04p4x04p6_m1m2_shieldl1.cdl | 22 + ...fd_pr__cap_vpp_04p4x04p6_m1m2_shieldl1.gds | Bin 0 -> 10410 bytes ..._pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1.cdl | 22 + ..._pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1.gds | Bin 0 -> 14238 bytes ...pp_04p4x04p6_m1m2m3_shieldl1m5_floatm4.cdl | 22 + ...pp_04p4x04p6_m1m2m3_shieldl1m5_floatm4.gds | Bin 0 -> 15042 bytes ...4p4x04p6_m1m2m3_shieldl1m5_floatm4_top.cdl | 22 + ...4p4x04p6_m1m2m3_shieldl1m5_floatm4_top.gds | Bin 0 -> 15720 bytes ..._05p9x05p9_m1m2m3m4_shieldl1_wafflecap.cdl | 22 + ..._05p9x05p9_m1m2m3m4_shieldl1_wafflecap.gds | Bin 0 -> 14358 bytes ..._cap_vpp_06p8x06p1_l1m1m2m3_shieldpom4.cdl | 22 + ..._cap_vpp_06p8x06p1_l1m1m2m3_shieldpom4.gds | Bin 0 -> 27076 bytes ..._vpp_06p8x06p1_l1m1m2m3_shieldpom4_top.cdl | 22 + ..._vpp_06p8x06p1_l1m1m2m3_shieldpom4_top.gds | Bin 0 -> 27742 bytes ...r__cap_vpp_06p8x06p1_m1m2m3_shieldl1m4.cdl | 22 + ...r__cap_vpp_06p8x06p1_m1m2m3_shieldl1m4.gds | Bin 0 -> 20560 bytes ...ap_vpp_06p8x06p1_m1m2m3_shieldl1m4_top.cdl | 22 + ...ap_vpp_06p8x06p1_m1m2m3_shieldl1m4_top.gds | Bin 0 -> 21222 bytes ..._pr__cap_vpp_08p6x07p8_l1m1m2_noshield.cdl | 22 + ..._pr__cap_vpp_08p6x07p8_l1m1m2_noshield.gds | Bin 0 -> 22942 bytes ...pp_08p6x07p8_l1m1m2_noshield_o2subcell.cdl | 22 + ...pp_08p6x07p8_l1m1m2_noshield_o2subcell.gds | Bin 0 -> 15830 bytes ..._vpp_08p6x07p8_l1m1m2_shieldpo_floatm3.cdl | 22 + ..._vpp_08p6x07p8_l1m1m2_shieldpo_floatm3.gds | Bin 0 -> 34958 bytes ...fd_pr__cap_vpp_08p6x07p8_m1m2_noshield.cdl | 22 + ...fd_pr__cap_vpp_08p6x07p8_m1m2_noshield.gds | Bin 0 -> 12456 bytes ...fd_pr__cap_vpp_08p6x07p8_m1m2_shieldl1.cdl | 22 + ...fd_pr__cap_vpp_08p6x07p8_m1m2_shieldl1.gds | Bin 0 -> 20650 bytes ..._pr__cap_vpp_08p6x07p8_m1m2m3_shieldl1.cdl | 22 + ..._pr__cap_vpp_08p6x07p8_m1m2m3_shieldl1.gds | Bin 0 -> 26974 bytes ...pp_08p6x07p8_m1m2m3_shieldl1m5_floatm4.cdl | 22 + ...pp_08p6x07p8_m1m2m3_shieldl1m5_floatm4.gds | Bin 0 -> 28438 bytes ...8p6x07p8_m1m2m3_shieldl1m5_floatm4_top.cdl | 22 + ...8p6x07p8_m1m2m3_shieldl1m5_floatm4_top.gds | Bin 0 -> 29116 bytes ..._11p3x11p3_m1m2m3m4_shieldl1_wafflecap.cdl | 22 + ..._11p3x11p3_m1m2m3m4_shieldl1_wafflecap.gds | Bin 0 -> 37750 bytes ..._vpp_11p3x11p8_l1m1m2m3m4_shieldm5_nhv.cdl | 22 + ..._vpp_11p3x11p8_l1m1m2m3m4_shieldm5_nhv.gds | Bin 0 -> 103952 bytes ...p_11p3x11p8_l1m1m2m3m4_shieldm5_nhvtop.cdl | 22 + ...p_11p3x11p8_l1m1m2m3m4_shieldm5_nhvtop.gds | Bin 0 -> 104478 bytes ..._pr__cap_vpp_11p5x11p7_l1m1m2_noshield.cdl | 22 + ..._pr__cap_vpp_11p5x11p7_l1m1m2_noshield.gds | Bin 0 -> 33484 bytes ...r__cap_vpp_11p5x11p7_l1m1m2_shieldpom3.cdl | 22 + ...r__cap_vpp_11p5x11p7_l1m1m2_shieldpom3.gds | Bin 0 -> 50480 bytes ...r__cap_vpp_11p5x11p7_l1m1m2m3_shieldm4.cdl | 22 + ...r__cap_vpp_11p5x11p7_l1m1m2m3_shieldm4.gds | Bin 0 -> 50528 bytes ...ap_vpp_11p5x11p7_l1m1m2m3_shieldm4_top.cdl | 22 + ...ap_vpp_11p5x11p7_l1m1m2m3_shieldm4_top.gds | Bin 0 -> 51190 bytes ..._cap_vpp_11p5x11p7_l1m1m2m3_shieldpom4.cdl | 22 + ..._cap_vpp_11p5x11p7_l1m1m2m3_shieldpom4.gds | Bin 0 -> 59108 bytes ..._vpp_11p5x11p7_l1m1m2m3_shieldpom4_top.cdl | 22 + ..._vpp_11p5x11p7_l1m1m2m3_shieldpom4_top.gds | Bin 0 -> 59774 bytes ..._cap_vpp_11p5x11p7_l1m1m2m3m4_shieldm5.cdl | 22 + ..._cap_vpp_11p5x11p7_l1m1m2m3m4_shieldm5.gds | Bin 0 -> 61716 bytes ..._vpp_11p5x11p7_l1m1m2m3m4_shieldm5_top.cdl | 22 + ..._vpp_11p5x11p7_l1m1m2m3m4_shieldm5_top.gds | Bin 0 -> 62382 bytes ...ap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5.cdl | 22 + ...ap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5.gds | Bin 0 -> 70296 bytes ...pp_11p5x11p7_l1m1m2m3m4_shieldpom5_top.cdl | 22 + ...pp_11p5x11p7_l1m1m2m3m4_shieldpom5_top.gds | Bin 0 -> 70966 bytes ..._vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x.cdl | 22 + ..._vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x.gds | Bin 0 -> 70300 bytes ...vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x6.cdl | 22 + ...vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x6.gds | Bin 0 -> 71306 bytes ...vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x7.cdl | 22 + ...vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x7.gds | Bin 0 -> 71242 bytes ...vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x8.cdl | 22 + ...vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x8.gds | Bin 0 -> 71562 bytes ...vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x9.cdl | 22 + ...vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x9.gds | Bin 0 -> 71498 bytes ...p_11p5x11p7_l1m1m2m3m4_shieldpom5_xtop.cdl | 22 + ...p_11p5x11p7_l1m1m2m3m4_shieldpom5_xtop.gds | Bin 0 -> 70966 bytes ...fd_pr__cap_vpp_11p5x11p7_m1m2_noshield.cdl | 22 + ...fd_pr__cap_vpp_11p5x11p7_m1m2_noshield.gds | Bin 0 -> 25320 bytes ...fd_pr__cap_vpp_11p5x11p7_m1m2_shieldl1.cdl | 22 + ...fd_pr__cap_vpp_11p5x11p7_m1m2_shieldl1.gds | Bin 0 -> 29656 bytes ..._pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1.cdl | 22 + ..._pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1.gds | Bin 0 -> 40972 bytes ...pp_11p5x11p7_m1m2m3_shieldl1m5_floatm4.cdl | 22 + ...pp_11p5x11p7_m1m2m3_shieldl1m5_floatm4.gds | Bin 0 -> 43424 bytes ...1p5x11p7_m1m2m3_shieldl1m5_floatm4_top.cdl | 22 + ...1p5x11p7_m1m2m3_shieldl1m5_floatm4_top.gds | Bin 0 -> 44102 bytes ..._cap_vpp_11p5x11p7_m1m2m3m4_shieldl1m5.cdl | 22 + ..._cap_vpp_11p5x11p7_m1m2m3m4_shieldl1m5.gds | Bin 0 -> 55252 bytes ..._vpp_11p5x11p7_m1m2m3m4_shieldl1m5_top.cdl | 22 + ..._vpp_11p5x11p7_m1m2m3m4_shieldl1m5_top.gds | Bin 0 -> 55918 bytes ...r__cap_vpp_11p5x11p7_m1m2m3m4_shieldm5.cdl | 22 + ...r__cap_vpp_11p5x11p7_m1m2m3m4_shieldm5.gds | Bin 0 -> 48080 bytes ...fd_pr__cap_vpp_11p5x11p7_m1m4_noshield.cdl | 22 + ...fd_pr__cap_vpp_11p5x11p7_m1m4_noshield.gds | Bin 0 -> 47560 bytes ..._vpp_11p5x11p7_pol1m1m2m3m4m5_noshield.cdl | 22 + ..._vpp_11p5x11p7_pol1m1m2m3m4m5_noshield.gds | Bin 0 -> 32786 bytes ..._vpp_11p5x23p1_pol1m1m2m3m4m5_noshield.cdl | 22 + ..._vpp_11p5x23p1_pol1m1m2m3m4m5_noshield.gds | Bin 0 -> 32786 bytes ..._vpp_22p5x11p7_pol1m1m2m3m4m5_noshield.cdl | 22 + ..._vpp_22p5x11p7_pol1m1m2m3m4m5_noshield.gds | Bin 0 -> 62994 bytes ..._vpp_22p5x23p1_pol1m1m2m3m4m5_noshield.cdl | 22 + ..._vpp_22p5x23p1_pol1m1m2m3m4m5_noshield.gds | Bin 0 -> 62994 bytes ..._vpp_33p6x11p7_pol1m1m2m3m4m5_noshield.cdl | 22 + ..._vpp_33p6x11p7_pol1m1m2m3m4m5_noshield.gds | Bin 0 -> 94290 bytes ..._vpp_33p6x23p1_pol1m1m2m3m4m5_noshield.cdl | 22 + ..._vpp_33p6x23p1_pol1m1m2m3m4m5_noshield.gds | Bin 0 -> 94290 bytes ..._vpp_44p7x11p7_pol1m1m2m3m4m5_noshield.cdl | 22 + ..._vpp_44p7x11p7_pol1m1m2m3m4m5_noshield.gds | Bin 0 -> 124882 bytes ..._vpp_44p7x23p1_pol1m1m2m3m4m5_noshield.cdl | 22 + ..._vpp_44p7x23p1_pol1m1m2m3m4m5_noshield.gds | Bin 0 -> 125244 bytes ..._vpp_55p8x11p7_pol1m1m2m3m4m5_noshield.cdl | 22 + ..._vpp_55p8x11p7_pol1m1m2m3m4m5_noshield.gds | Bin 0 -> 156242 bytes ...x11p7_pol1m1m2m3m4m5_noshield_m5pullin.cdl | 22 + ...x11p7_pol1m1m2m3m4m5_noshield_m5pullin.gds | Bin 0 -> 156258 bytes ..._vpp_55p8x23p1_pol1m1m2m3m4m5_noshield.cdl | 22 + ..._vpp_55p8x23p1_pol1m1m2m3m4m5_noshield.gds | Bin 0 -> 156242 bytes ...x23p1_pol1m1m2m3m4m5_noshield_m5pullin.cdl | 22 + ...x23p1_pol1m1m2m3m4m5_noshield_m5pullin.gds | Bin 0 -> 156258 bytes ...55p8x23p1_pol1m1m2m3m4m5_noshield_test.cdl | 22 + ...55p8x23p1_pol1m1m2m3m4m5_noshield_test.gds | Bin 0 -> 156250 bytes .../npn/sky130_fd_pr__npn_05v5_W1p00L1p00.gds | Bin 0 -> 21918 bytes .../npn/sky130_fd_pr__npn_05v5_W1p00L2p00.gds | Bin 0 -> 24414 bytes .../npn/sky130_fd_pr__npn_11v0_W1p00L1p00.gds | Bin 0 -> 24372 bytes .../pnp/sky130_fd_pr__pnp_05v5_W0p68L0p68.gds | Bin 0 -> 7866 bytes .../pnp/sky130_fd_pr__pnp_05v5_W3p40L3p40.gds | Bin 0 -> 28274 bytes .../photodiode/sky130_fd_pr__photodiode.gds | Bin 0 -> 31608 bytes .../sky130_fd_pr__rf_npn_05v5_W1p00L4p00.gds | Bin 0 -> 47088 bytes .../sky130_fd_pr__rf_npn_05v5_W1p00L8p00.gds | Bin 0 -> 60208 bytes .../sky130_fd_pr__rf_npn_05v5_W2p00L2p00.gds | Bin 0 -> 44464 bytes .../sky130_fd_pr__rf_npn_05v5_W2p00L4p00.gds | Bin 0 -> 52336 bytes .../sky130_fd_pr__rf_npn_05v5_W2p00L8p00.gds | Bin 0 -> 69488 bytes .../sky130_fd_pr__rf_npn_05v5_W5p00L5p00.gds | Bin 0 -> 77040 bytes .../rf_coils/sky130_fd_pr__rf_test_coil1.gds | Bin 0 -> 6616 bytes .../rf_coils/sky130_fd_pr__rf_test_coil2.gds | Bin 0 -> 18400 bytes .../rf_coils/sky130_fd_pr__rf_test_coil3.gds | Bin 0 -> 26784 bytes ...130_fd_pr__rf_nfet_01v8_aM02W1p65L0p15.gds | Bin 0 -> 7778 bytes ...130_fd_pr__rf_nfet_01v8_aM02W1p65L0p18.gds | Bin 0 -> 7778 bytes ...130_fd_pr__rf_nfet_01v8_aM02W1p65L0p25.gds | Bin 0 -> 7778 bytes ...130_fd_pr__rf_nfet_01v8_aM02W3p00L0p15.gds | Bin 0 -> 11042 bytes ...130_fd_pr__rf_nfet_01v8_aM02W3p00L0p18.gds | Bin 0 -> 11042 bytes ...130_fd_pr__rf_nfet_01v8_aM02W3p00L0p25.gds | Bin 0 -> 11042 bytes ...130_fd_pr__rf_nfet_01v8_aM02W5p00L0p15.gds | Bin 0 -> 15202 bytes ...130_fd_pr__rf_nfet_01v8_aM02W5p00L0p18.gds | Bin 0 -> 15586 bytes ...130_fd_pr__rf_nfet_01v8_aM02W5p00L0p25.gds | Bin 0 -> 15586 bytes ...130_fd_pr__rf_nfet_01v8_aM04W1p65L0p15.gds | Bin 0 -> 10574 bytes ...130_fd_pr__rf_nfet_01v8_aM04W1p65L0p18.gds | Bin 0 -> 10574 bytes ...130_fd_pr__rf_nfet_01v8_aM04W1p65L0p25.gds | Bin 0 -> 10958 bytes ...130_fd_pr__rf_nfet_01v8_aM04W3p00L0p15.gds | Bin 0 -> 15612 bytes ...130_fd_pr__rf_nfet_01v8_aM04W3p00L0p18.gds | Bin 0 -> 15740 bytes ...130_fd_pr__rf_nfet_01v8_aM04W3p00L0p25.gds | Bin 0 -> 15996 bytes ...130_fd_pr__rf_nfet_01v8_aM04W5p00L0p15.gds | Bin 0 -> 22076 bytes ...130_fd_pr__rf_nfet_01v8_aM04W5p00L0p18.gds | Bin 0 -> 22204 bytes ...130_fd_pr__rf_nfet_01v8_aM04W5p00L0p25.gds | Bin 0 -> 22460 bytes ...130_fd_pr__rf_nfet_01v8_bM02W1p65L0p15.gds | Bin 0 -> 11138 bytes ...130_fd_pr__rf_nfet_01v8_bM02W1p65L0p18.gds | Bin 0 -> 11218 bytes ...130_fd_pr__rf_nfet_01v8_bM02W1p65L0p25.gds | Bin 0 -> 11218 bytes ...130_fd_pr__rf_nfet_01v8_bM02W3p00L0p15.gds | Bin 0 -> 14706 bytes ...130_fd_pr__rf_nfet_01v8_bM02W3p00L0p18.gds | Bin 0 -> 14706 bytes ...130_fd_pr__rf_nfet_01v8_bM02W3p00L0p25.gds | Bin 0 -> 14706 bytes ...130_fd_pr__rf_nfet_01v8_bM02W5p00L0p15.gds | Bin 0 -> 20210 bytes ...130_fd_pr__rf_nfet_01v8_bM02W5p00L0p18.gds | Bin 0 -> 20210 bytes ...130_fd_pr__rf_nfet_01v8_bM02W5p00L0p25.gds | Bin 0 -> 20210 bytes ...130_fd_pr__rf_nfet_01v8_bM04W1p65L0p15.gds | Bin 0 -> 15038 bytes ...130_fd_pr__rf_nfet_01v8_bM04W1p65L0p18.gds | Bin 0 -> 15550 bytes ...130_fd_pr__rf_nfet_01v8_bM04W1p65L0p25.gds | Bin 0 -> 15614 bytes ...130_fd_pr__rf_nfet_01v8_bM04W3p00L0p15.gds | Bin 0 -> 20492 bytes ...130_fd_pr__rf_nfet_01v8_bM04W3p00L0p18.gds | Bin 0 -> 21004 bytes ...130_fd_pr__rf_nfet_01v8_bM04W3p00L0p25.gds | Bin 0 -> 21068 bytes ...130_fd_pr__rf_nfet_01v8_bM04W5p00L0p15.gds | Bin 0 -> 27724 bytes ...130_fd_pr__rf_nfet_01v8_bM04W5p00L0p18.gds | Bin 0 -> 28236 bytes ...130_fd_pr__rf_nfet_01v8_bM04W5p00L0p25.gds | Bin 0 -> 28300 bytes ...30_fd_pr__rf_nfet_01v8_hcM04W3p00L0p15.gds | Bin 0 -> 22374 bytes ...30_fd_pr__rf_nfet_01v8_hcM04W5p00L0p15.gds | Bin 0 -> 32292 bytes ...fd_pr__rf_nfet_01v8_lvt_aF02W0p42L0p15.gds | Bin 0 -> 3828 bytes ...fd_pr__rf_nfet_01v8_lvt_aF02W0p84L0p15.gds | Bin 0 -> 4276 bytes ...fd_pr__rf_nfet_01v8_lvt_aF02W1p65L0p15.gds | Bin 0 -> 4808 bytes ...fd_pr__rf_nfet_01v8_lvt_aF02W3p00L0p15.gds | Bin 0 -> 6516 bytes ...fd_pr__rf_nfet_01v8_lvt_aF04W0p42L0p15.gds | Bin 0 -> 5720 bytes ...fd_pr__rf_nfet_01v8_lvt_aF04W0p84L0p15.gds | Bin 0 -> 7344 bytes ...fd_pr__rf_nfet_01v8_lvt_aF04W1p65L0p15.gds | Bin 0 -> 8152 bytes ...fd_pr__rf_nfet_01v8_lvt_aF04W3p00L0p15.gds | Bin 0 -> 10992 bytes ...fd_pr__rf_nfet_01v8_lvt_aF06W0p42L0p15.gds | Bin 0 -> 7800 bytes ...fd_pr__rf_nfet_01v8_lvt_aF06W0p84L0p15.gds | Bin 0 -> 9464 bytes ...fd_pr__rf_nfet_01v8_lvt_aF06W1p65L0p15.gds | Bin 0 -> 11256 bytes ...fd_pr__rf_nfet_01v8_lvt_aF06W3p00L0p15.gds | Bin 0 -> 15032 bytes ...fd_pr__rf_nfet_01v8_lvt_aF08W0p42L0p15.gds | Bin 0 -> 10200 bytes ...fd_pr__rf_nfet_01v8_lvt_aF08W0p84L0p15.gds | Bin 0 -> 12808 bytes ...fd_pr__rf_nfet_01v8_lvt_aF08W1p65L0p15.gds | Bin 0 -> 14168 bytes ...fd_pr__rf_nfet_01v8_lvt_aF08W3p00L0p15.gds | Bin 0 -> 19464 bytes ...fd_pr__rf_nfet_01v8_lvt_aM02W1p65L0p15.gds | Bin 0 -> 7850 bytes ...fd_pr__rf_nfet_01v8_lvt_aM02W1p65L0p18.gds | Bin 0 -> 7850 bytes ...fd_pr__rf_nfet_01v8_lvt_aM02W1p65L0p25.gds | Bin 0 -> 7850 bytes ...fd_pr__rf_nfet_01v8_lvt_aM02W3p00L0p15.gds | Bin 0 -> 11114 bytes ...fd_pr__rf_nfet_01v8_lvt_aM02W3p00L0p18.gds | Bin 0 -> 11114 bytes ...fd_pr__rf_nfet_01v8_lvt_aM02W3p00L0p25.gds | Bin 0 -> 11114 bytes ...fd_pr__rf_nfet_01v8_lvt_aM02W5p00L0p15.gds | Bin 0 -> 15658 bytes ...fd_pr__rf_nfet_01v8_lvt_aM02W5p00L0p18.gds | Bin 0 -> 15658 bytes ...fd_pr__rf_nfet_01v8_lvt_aM02W5p00L0p25.gds | Bin 0 -> 15082 bytes ...fd_pr__rf_nfet_01v8_lvt_aM04W1p65L0p15.gds | Bin 0 -> 10646 bytes ...fd_pr__rf_nfet_01v8_lvt_aM04W1p65L0p18.gds | Bin 0 -> 10646 bytes ...fd_pr__rf_nfet_01v8_lvt_aM04W1p65L0p25.gds | Bin 0 -> 11030 bytes ...fd_pr__rf_nfet_01v8_lvt_aM04W3p00L0p15.gds | Bin 0 -> 15684 bytes ...fd_pr__rf_nfet_01v8_lvt_aM04W3p00L0p18.gds | Bin 0 -> 15812 bytes ...fd_pr__rf_nfet_01v8_lvt_aM04W3p00L0p25.gds | Bin 0 -> 16068 bytes ...fd_pr__rf_nfet_01v8_lvt_aM04W5p00L0p15.gds | Bin 0 -> 22148 bytes ...fd_pr__rf_nfet_01v8_lvt_aM04W5p00L0p18.gds | Bin 0 -> 22276 bytes ...fd_pr__rf_nfet_01v8_lvt_aM04W5p00L0p25.gds | Bin 0 -> 22532 bytes ...fd_pr__rf_nfet_01v8_lvt_bM02W1p65L0p15.gds | Bin 0 -> 11210 bytes ...fd_pr__rf_nfet_01v8_lvt_bM02W1p65L0p18.gds | Bin 0 -> 11290 bytes ...fd_pr__rf_nfet_01v8_lvt_bM02W1p65L0p25.gds | Bin 0 -> 11290 bytes ...fd_pr__rf_nfet_01v8_lvt_bM02W3p00L0p15.gds | Bin 0 -> 14778 bytes ...fd_pr__rf_nfet_01v8_lvt_bM02W3p00L0p18.gds | Bin 0 -> 14778 bytes ...fd_pr__rf_nfet_01v8_lvt_bM02W3p00L0p25.gds | Bin 0 -> 14778 bytes ...fd_pr__rf_nfet_01v8_lvt_bM02W5p00L0p15.gds | Bin 0 -> 20282 bytes ...fd_pr__rf_nfet_01v8_lvt_bM02W5p00L0p18.gds | Bin 0 -> 20282 bytes ...fd_pr__rf_nfet_01v8_lvt_bM02W5p00L0p25.gds | Bin 0 -> 20282 bytes ...fd_pr__rf_nfet_01v8_lvt_bM04W1p65L0p15.gds | Bin 0 -> 15110 bytes ...fd_pr__rf_nfet_01v8_lvt_bM04W1p65L0p18.gds | Bin 0 -> 15622 bytes ...fd_pr__rf_nfet_01v8_lvt_bM04W1p65L0p25.gds | Bin 0 -> 15686 bytes ...fd_pr__rf_nfet_01v8_lvt_bM04W3p00L0p15.gds | Bin 0 -> 20564 bytes ...fd_pr__rf_nfet_01v8_lvt_bM04W3p00L0p18.gds | Bin 0 -> 21076 bytes ...fd_pr__rf_nfet_01v8_lvt_bM04W3p00L0p25.gds | Bin 0 -> 21140 bytes ...fd_pr__rf_nfet_01v8_lvt_bM04W5p00L0p15.gds | Bin 0 -> 27796 bytes ...fd_pr__rf_nfet_01v8_lvt_bM04W5p00L0p18.gds | Bin 0 -> 28308 bytes ...fd_pr__rf_nfet_01v8_lvt_bM04W5p00L0p25.gds | Bin 0 -> 28372 bytes ...fd_pr__rf_nfet_01v8_lvt_cM02W1p65L0p15.gds | Bin 0 -> 10058 bytes ...fd_pr__rf_nfet_01v8_lvt_cM02W1p65L0p18.gds | Bin 0 -> 10138 bytes ...fd_pr__rf_nfet_01v8_lvt_cM02W1p65L0p25.gds | Bin 0 -> 10138 bytes ...fd_pr__rf_nfet_01v8_lvt_cM02W3p00L0p15.gds | Bin 0 -> 13050 bytes ...fd_pr__rf_nfet_01v8_lvt_cM02W3p00L0p18.gds | Bin 0 -> 13050 bytes ...fd_pr__rf_nfet_01v8_lvt_cM02W3p00L0p25.gds | Bin 0 -> 13050 bytes ...fd_pr__rf_nfet_01v8_lvt_cM02W5p00L0p15.gds | Bin 0 -> 17594 bytes ...fd_pr__rf_nfet_01v8_lvt_cM02W5p00L0p18.gds | Bin 0 -> 17594 bytes ...fd_pr__rf_nfet_01v8_lvt_cM02W5p00L0p25.gds | Bin 0 -> 17594 bytes ...fd_pr__rf_nfet_01v8_lvt_cM04W1p65L0p15.gds | Bin 0 -> 12902 bytes ...fd_pr__rf_nfet_01v8_lvt_cM04W1p65L0p18.gds | Bin 0 -> 13190 bytes ...fd_pr__rf_nfet_01v8_lvt_cM04W1p65L0p25.gds | Bin 0 -> 13254 bytes ...fd_pr__rf_nfet_01v8_lvt_cM04W3p00L0p15.gds | Bin 0 -> 17428 bytes ...fd_pr__rf_nfet_01v8_lvt_cM04W3p00L0p18.gds | Bin 0 -> 17684 bytes ...fd_pr__rf_nfet_01v8_lvt_cM04W3p00L0p25.gds | Bin 0 -> 17748 bytes ...fd_pr__rf_nfet_01v8_lvt_cM04W5p00L0p15.gds | Bin 0 -> 23060 bytes ...fd_pr__rf_nfet_01v8_lvt_cM04W5p00L0p18.gds | Bin 0 -> 23316 bytes ...fd_pr__rf_nfet_01v8_lvt_cM04W5p00L0p25.gds | Bin 0 -> 23380 bytes ...30_fd_pr__rf_nfet_01v8_mcM04W3p00L0p15.gds | Bin 0 -> 20390 bytes ...30_fd_pr__rf_nfet_01v8_mcM04W5p00L0p15.gds | Bin 0 -> 29682 bytes .../sky130_fd_pr__rf_nfet_20v0_aup.gds | Bin 0 -> 105426 bytes .../sky130_fd_pr__rf_nfet_20v0_noptap_iso.gds | Bin 0 -> 181086 bytes .../sky130_fd_pr__rf_nfet_20v0_nvt_aup.gds | Bin 0 -> 106004 bytes ...130_fd_pr__rf_nfet_20v0_nvt_noptap_iso.gds | Bin 0 -> 181162 bytes ...ky130_fd_pr__rf_nfet_20v0_nvt_withptap.gds | Bin 0 -> 120878 bytes ...0_fd_pr__rf_nfet_20v0_nvt_withptap_iso.gds | Bin 0 -> 241710 bytes .../sky130_fd_pr__rf_nfet_20v0_withptap.gds | Bin 0 -> 120174 bytes ...ky130_fd_pr__rf_nfet_20v0_withptap_iso.gds | Bin 0 -> 241526 bytes ...ky130_fd_pr__rf_nfet_20v0_zvt_withptap.gds | Bin 0 -> 91840 bytes ...d_pr__rf_nfet_g5v0d10v5_aM04W3p00L0p50.gds | Bin 0 -> 17836 bytes ...d_pr__rf_nfet_g5v0d10v5_aM04W5p00L0p50.gds | Bin 0 -> 23148 bytes ...d_pr__rf_nfet_g5v0d10v5_aM04W7p00L0p50.gds | Bin 0 -> 29906 bytes ...d_pr__rf_nfet_g5v0d10v5_aM10W3p00L0p50.gds | Bin 0 -> 31640 bytes ...d_pr__rf_nfet_g5v0d10v5_aM10W5p00L0p50.gds | Bin 0 -> 42882 bytes ...d_pr__rf_nfet_g5v0d10v5_aM10W7p00L0p50.gds | Bin 0 -> 56638 bytes ...d_pr__rf_nfet_g5v0d10v5_bM02W3p00L0p50.gds | Bin 0 -> 16910 bytes ...d_pr__rf_nfet_g5v0d10v5_bM02W5p00L0p50.gds | Bin 0 -> 22838 bytes ...d_pr__rf_nfet_g5v0d10v5_bM04W3p00L0p50.gds | Bin 0 -> 22740 bytes ...d_pr__rf_nfet_g5v0d10v5_bM04W5p00L0p50.gds | Bin 0 -> 30588 bytes ...d_pr__rf_nfet_g5v0d10v5_bM04W7p00L0p50.gds | Bin 0 -> 38370 bytes ...d_pr__rf_nfet_g5v0d10v5_bM10W3p00L0p50.gds | Bin 0 -> 41216 bytes ...d_pr__rf_nfet_g5v0d10v5_bM10W5p00L0p50.gds | Bin 0 -> 53522 bytes ...d_pr__rf_nfet_g5v0d10v5_bM10W7p00L0p50.gds | Bin 0 -> 68622 bytes ...130_fd_pr__rf_pfet_01v8_aF02W0p84L0p15.gds | Bin 0 -> 4262 bytes ...130_fd_pr__rf_pfet_01v8_aF02W1p68L0p15.gds | Bin 0 -> 5222 bytes ...130_fd_pr__rf_pfet_01v8_aF02W2p00L0p15.gds | Bin 0 -> 5178 bytes ...130_fd_pr__rf_pfet_01v8_aF02W3p00L0p15.gds | Bin 0 -> 6502 bytes ...130_fd_pr__rf_pfet_01v8_aF02W5p00L0p15.gds | Bin 0 -> 8614 bytes ...130_fd_pr__rf_pfet_01v8_aF04W0p84L0p15.gds | Bin 0 -> 6986 bytes ...130_fd_pr__rf_pfet_01v8_aF04W1p68L0p15.gds | Bin 0 -> 8482 bytes ...130_fd_pr__rf_pfet_01v8_aF04W2p00L0p15.gds | Bin 0 -> 8778 bytes ...130_fd_pr__rf_pfet_01v8_aF04W3p00L0p15.gds | Bin 0 -> 10698 bytes ...130_fd_pr__rf_pfet_01v8_aF04W5p00L0p15.gds | Bin 0 -> 13898 bytes ...130_fd_pr__rf_pfet_01v8_aF06W0p84L0p15.gds | Bin 0 -> 9642 bytes ...130_fd_pr__rf_pfet_01v8_aF06W1p68L0p15.gds | Bin 0 -> 11242 bytes ...130_fd_pr__rf_pfet_01v8_aF06W2p00L0p15.gds | Bin 0 -> 12138 bytes ...130_fd_pr__rf_pfet_01v8_aF06W3p00L0p15.gds | Bin 0 -> 14826 bytes ...130_fd_pr__rf_pfet_01v8_aF08W0p84L0p15.gds | Bin 0 -> 12106 bytes ...130_fd_pr__rf_pfet_01v8_aF08W1p68L0p15.gds | Bin 0 -> 14154 bytes ...130_fd_pr__rf_pfet_01v8_aM02W1p65L0p15.gds | Bin 0 -> 7830 bytes ...130_fd_pr__rf_pfet_01v8_aM02W1p65L0p18.gds | Bin 0 -> 7830 bytes ...130_fd_pr__rf_pfet_01v8_aM02W1p65L0p25.gds | Bin 0 -> 7830 bytes ...130_fd_pr__rf_pfet_01v8_aM02W3p00L0p15.gds | Bin 0 -> 11094 bytes ...130_fd_pr__rf_pfet_01v8_aM02W3p00L0p18.gds | Bin 0 -> 11094 bytes ...130_fd_pr__rf_pfet_01v8_aM02W3p00L0p25.gds | Bin 0 -> 11094 bytes ...130_fd_pr__rf_pfet_01v8_aM02W5p00L0p15.gds | Bin 0 -> 15638 bytes ...130_fd_pr__rf_pfet_01v8_aM02W5p00L0p18.gds | Bin 0 -> 15638 bytes ...130_fd_pr__rf_pfet_01v8_aM02W5p00L0p25.gds | Bin 0 -> 15702 bytes ...130_fd_pr__rf_pfet_01v8_aM04W1p65L0p15.gds | Bin 0 -> 10626 bytes ...130_fd_pr__rf_pfet_01v8_aM04W1p65L0p18.gds | Bin 0 -> 10626 bytes ...130_fd_pr__rf_pfet_01v8_aM04W1p65L0p25.gds | Bin 0 -> 11010 bytes ...130_fd_pr__rf_pfet_01v8_aM04W3p00L0p15.gds | Bin 0 -> 15616 bytes ...130_fd_pr__rf_pfet_01v8_aM04W3p00L0p18.gds | Bin 0 -> 15744 bytes ...130_fd_pr__rf_pfet_01v8_aM04W3p00L0p25.gds | Bin 0 -> 16000 bytes ...130_fd_pr__rf_pfet_01v8_aM04W5p00L0p15.gds | Bin 0 -> 22080 bytes ...130_fd_pr__rf_pfet_01v8_aM04W5p00L0p18.gds | Bin 0 -> 22208 bytes ...130_fd_pr__rf_pfet_01v8_aM04W5p00L0p25.gds | Bin 0 -> 22464 bytes ...130_fd_pr__rf_pfet_01v8_bM02W1p65L0p15.gds | Bin 0 -> 11190 bytes ...130_fd_pr__rf_pfet_01v8_bM02W1p65L0p18.gds | Bin 0 -> 11270 bytes ...130_fd_pr__rf_pfet_01v8_bM02W1p65L0p25.gds | Bin 0 -> 11270 bytes ...130_fd_pr__rf_pfet_01v8_bM02W3p00L0p15.gds | Bin 0 -> 14758 bytes ...130_fd_pr__rf_pfet_01v8_bM02W3p00L0p18.gds | Bin 0 -> 14758 bytes ...130_fd_pr__rf_pfet_01v8_bM02W3p00L0p25.gds | Bin 0 -> 14758 bytes ...130_fd_pr__rf_pfet_01v8_bM02W5p00L0p15.gds | Bin 0 -> 20262 bytes ...130_fd_pr__rf_pfet_01v8_bM02W5p00L0p18.gds | Bin 0 -> 20262 bytes ...130_fd_pr__rf_pfet_01v8_bM02W5p00L0p25.gds | Bin 0 -> 20262 bytes ...130_fd_pr__rf_pfet_01v8_bM04W1p65L0p15.gds | Bin 0 -> 15090 bytes ...130_fd_pr__rf_pfet_01v8_bM04W1p65L0p18.gds | Bin 0 -> 15602 bytes ...130_fd_pr__rf_pfet_01v8_bM04W1p65L0p25.gds | Bin 0 -> 15666 bytes ...130_fd_pr__rf_pfet_01v8_bM04W3p00L0p15.gds | Bin 0 -> 20544 bytes ...130_fd_pr__rf_pfet_01v8_bM04W3p00L0p18.gds | Bin 0 -> 21056 bytes ...130_fd_pr__rf_pfet_01v8_bM04W3p00L0p25.gds | Bin 0 -> 21120 bytes ...130_fd_pr__rf_pfet_01v8_bM04W5p00L0p15.gds | Bin 0 -> 27776 bytes ...130_fd_pr__rf_pfet_01v8_bM04W5p00L0p18.gds | Bin 0 -> 28288 bytes ...130_fd_pr__rf_pfet_01v8_bM04W5p00L0p25.gds | Bin 0 -> 28352 bytes ...30_fd_pr__rf_pfet_01v8_hcM04W3p00L0p15.gds | Bin 0 -> 22432 bytes ...30_fd_pr__rf_pfet_01v8_hcM04W5p00L0p15.gds | Bin 0 -> 32256 bytes ...fd_pr__rf_pfet_01v8_lvt_aM02W3p00L0p35.gds | Bin 0 -> 11294 bytes ...fd_pr__rf_pfet_01v8_lvt_aM02W3p00L0p50.gds | Bin 0 -> 11678 bytes ...fd_pr__rf_pfet_01v8_lvt_aM02W5p00L0p35.gds | Bin 0 -> 15838 bytes ...fd_pr__rf_pfet_01v8_lvt_aM02W5p00L0p50.gds | Bin 0 -> 16222 bytes ...fd_pr__rf_pfet_01v8_lvt_aM04W3p00L0p35.gds | Bin 0 -> 15690 bytes ...fd_pr__rf_pfet_01v8_lvt_aM04W3p00L0p50.gds | Bin 0 -> 16202 bytes ...fd_pr__rf_pfet_01v8_lvt_aM04W5p00L0p35.gds | Bin 0 -> 22154 bytes ...fd_pr__rf_pfet_01v8_lvt_aM04W5p00L0p50.gds | Bin 0 -> 22666 bytes ...30_fd_pr__rf_pfet_01v8_mcM04W3p00L0p15.gds | Bin 0 -> 20972 bytes ...30_fd_pr__rf_pfet_01v8_mcM04W5p00L0p15.gds | Bin 0 -> 29100 bytes ...fd_pr__rf_pfet_01v8_mvt_aF02W0p84L0p15.gds | Bin 0 -> 4334 bytes .../sky130_fd_pr__rf_pfet_20v0_withptap.gds | Bin 0 -> 271496 bytes .../cells/klayout/pymacros/cells/globals.py | 67 ++ sky130/cells/klayout/pymacros/cells/gr.py | 102 ++ .../klayout/pymacros/cells/layers_def.py | 101 ++ .../klayout/pymacros/cells/parent_res.py | 273 +++++ .../klayout/pymacros/cells/res_diff_child.py | 731 +++++++++++++ .../pymacros/cells/res_diff_klayout_panel.py | 87 ++ .../pymacros/cells/res_klayout_panel.py | 132 +++ .../klayout/pymacros/cells/res_metal_child.py | 109 ++ .../pymacros/cells/res_metal_klayout_panel.py | 119 +++ .../klayout/pymacros/cells/res_poly_child.py | 559 ++++++++++ .../pymacros/cells/res_poly_klayout_panel.py | 172 ++++ sky130/cells/klayout/pymacros/cells/rf.py | 128 +++ .../klayout/pymacros/cells/via_generator.py | 476 +++++++++ sky130/cells/klayout/pymacros/cells/vias.py | 208 ++++ sky130/cells/klayout/pymacros/cells/vpp.py | 57 ++ sky130/cells/klayout/pymacros/sky130.lym | 50 + 383 files changed, 7598 insertions(+) create mode 100644 sky130/cells/klayout/pymacros/README.md create mode 100644 sky130/cells/klayout/pymacros/cells/__init__.py create mode 100644 sky130/cells/klayout/pymacros/cells/bjt.py create mode 100644 sky130/cells/klayout/pymacros/cells/cap.py create mode 100644 sky130/cells/klayout/pymacros/cells/diode.py create mode 100644 sky130/cells/klayout/pymacros/cells/draw_bjt.py create mode 100644 sky130/cells/klayout/pymacros/cells/draw_cap.py create mode 100644 sky130/cells/klayout/pymacros/cells/draw_diode.py create mode 100644 sky130/cells/klayout/pymacros/cells/draw_fet.py create mode 100644 sky130/cells/klayout/pymacros/cells/draw_guard_ring.py create mode 100644 sky130/cells/klayout/pymacros/cells/draw_rf.py create mode 100644 sky130/cells/klayout/pymacros/cells/draw_vpp.py create mode 100644 sky130/cells/klayout/pymacros/cells/fet.py create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p4x04p6_m1m2_noshield.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p4x04p6_m1m2_noshield.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x06p1_m1m2m3m4_shieldl1_fingercap.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x06p1_m1m2m3m4_shieldl1_fingercap.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x11p1_m1m2m3m4_shieldl1_fingercap.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x11p1_m1m2m3m4_shieldl1_fingercap.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x21p1_m1m2m3m4_shieldl1_fingercap.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x21p1_m1m2m3m4_shieldl1_fingercap.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x41p1_m1m2m3m4_shieldl1_fingercap.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x41p1_m1m2m3m4_shieldl1_fingercap.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p9x06p1_m1m2m3m4_shieldl1_fingercap2.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p9x06p1_m1m2m3m4_shieldl1_fingercap2.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_03p9x03p9_m1m2_shieldl1_floatm3.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_03p9x03p9_m1m2_shieldl1_floatm3.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_noshield.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_noshield.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_noshield_o2subcell.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_noshield_o2subcell.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_shieldpo_floatm3.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_shieldpo_floatm3.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_noshield.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_noshield.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_noshield_o2.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_noshield_o2.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_shieldl1.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_shieldl1.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1m5_floatm4.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1m5_floatm4.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1m5_floatm4_top.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1m5_floatm4_top.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_05p9x05p9_m1m2m3m4_shieldl1_wafflecap.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_05p9x05p9_m1m2m3m4_shieldl1_wafflecap.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_06p8x06p1_l1m1m2m3_shieldpom4.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_06p8x06p1_l1m1m2m3_shieldpom4.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_06p8x06p1_l1m1m2m3_shieldpom4_top.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_06p8x06p1_l1m1m2m3_shieldpom4_top.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_06p8x06p1_m1m2m3_shieldl1m4.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_06p8x06p1_m1m2m3_shieldl1m4.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_06p8x06p1_m1m2m3_shieldl1m4_top.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_06p8x06p1_m1m2m3_shieldl1m4_top.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_noshield.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_noshield.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_noshield_o2subcell.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_noshield_o2subcell.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_shieldpo_floatm3.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_shieldpo_floatm3.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_m1m2_noshield.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_m1m2_noshield.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_m1m2_shieldl1.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_m1m2_shieldl1.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_m1m2m3_shieldl1.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_m1m2m3_shieldl1.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_m1m2m3_shieldl1m5_floatm4.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_m1m2m3_shieldl1m5_floatm4.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_m1m2m3_shieldl1m5_floatm4_top.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_m1m2m3_shieldl1m5_floatm4_top.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p3x11p3_m1m2m3m4_shieldl1_wafflecap.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p3x11p3_m1m2m3m4_shieldl1_wafflecap.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p3x11p8_l1m1m2m3m4_shieldm5_nhv.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p3x11p8_l1m1m2m3m4_shieldm5_nhv.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p3x11p8_l1m1m2m3m4_shieldm5_nhvtop.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p3x11p8_l1m1m2m3m4_shieldm5_nhvtop.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2_noshield.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2_noshield.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2_shieldpom3.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2_shieldpom3.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldm4.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldm4.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldm4_top.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldm4_top.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldpom4.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldpom4.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldpom4_top.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldpom4_top.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldm5.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldm5.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldm5_top.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldm5_top.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_top.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_top.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x6.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x6.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x7.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x7.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x8.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x8.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x9.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x9.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_xtop.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_xtop.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2_noshield.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2_noshield.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2_shieldl1.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2_shieldl1.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1m5_floatm4.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1m5_floatm4.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1m5_floatm4_top.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1m5_floatm4_top.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldl1m5.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldl1m5.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldl1m5_top.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldl1m5_top.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldm5.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldm5.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m4_noshield.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m4_noshield.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_pol1m1m2m3m4m5_noshield.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_pol1m1m2m3m4m5_noshield.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x23p1_pol1m1m2m3m4m5_noshield.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x23p1_pol1m1m2m3m4m5_noshield.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_22p5x11p7_pol1m1m2m3m4m5_noshield.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_22p5x11p7_pol1m1m2m3m4m5_noshield.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_22p5x23p1_pol1m1m2m3m4m5_noshield.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_22p5x23p1_pol1m1m2m3m4m5_noshield.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_33p6x11p7_pol1m1m2m3m4m5_noshield.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_33p6x11p7_pol1m1m2m3m4m5_noshield.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_33p6x23p1_pol1m1m2m3m4m5_noshield.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_33p6x23p1_pol1m1m2m3m4m5_noshield.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_44p7x11p7_pol1m1m2m3m4m5_noshield.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_44p7x11p7_pol1m1m2m3m4m5_noshield.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_44p7x23p1_pol1m1m2m3m4m5_noshield.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_44p7x23p1_pol1m1m2m3m4m5_noshield.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x11p7_pol1m1m2m3m4m5_noshield.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x11p7_pol1m1m2m3m4m5_noshield.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x11p7_pol1m1m2m3m4m5_noshield_m5pullin.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x11p7_pol1m1m2m3m4m5_noshield_m5pullin.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x23p1_pol1m1m2m3m4m5_noshield.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x23p1_pol1m1m2m3m4m5_noshield.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x23p1_pol1m1m2m3m4m5_noshield_m5pullin.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x23p1_pol1m1m2m3m4m5_noshield_m5pullin.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x23p1_pol1m1m2m3m4m5_noshield_test.cdl create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x23p1_pol1m1m2m3m4m5_noshield_test.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/bjt/npn/sky130_fd_pr__npn_05v5_W1p00L1p00.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/bjt/npn/sky130_fd_pr__npn_05v5_W1p00L2p00.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/bjt/npn/sky130_fd_pr__npn_11v0_W1p00L1p00.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/bjt/pnp/sky130_fd_pr__pnp_05v5_W0p68L0p68.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/bjt/pnp/sky130_fd_pr__pnp_05v5_W3p40L3p40.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/photodiode/sky130_fd_pr__photodiode.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_bjt/sky130_fd_pr__rf_npn_05v5_W1p00L4p00.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_bjt/sky130_fd_pr__rf_npn_05v5_W1p00L8p00.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_bjt/sky130_fd_pr__rf_npn_05v5_W2p00L2p00.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_bjt/sky130_fd_pr__rf_npn_05v5_W2p00L4p00.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_bjt/sky130_fd_pr__rf_npn_05v5_W2p00L8p00.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_bjt/sky130_fd_pr__rf_npn_05v5_W5p00L5p00.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_coils/sky130_fd_pr__rf_test_coil1.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_coils/sky130_fd_pr__rf_test_coil2.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_coils/sky130_fd_pr__rf_test_coil3.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM02W1p65L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM02W1p65L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM02W1p65L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM02W3p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM02W3p00L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM02W3p00L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM02W5p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM02W5p00L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM02W5p00L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM04W1p65L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM04W1p65L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM04W1p65L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM04W3p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM04W3p00L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM04W3p00L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM04W5p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM04W5p00L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM04W5p00L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM02W1p65L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM02W1p65L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM02W1p65L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM02W3p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM02W3p00L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM02W3p00L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM02W5p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM02W5p00L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM02W5p00L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM04W1p65L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM04W1p65L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM04W1p65L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM04W3p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM04W3p00L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM04W3p00L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM04W5p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM04W5p00L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM04W5p00L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_hcM04W3p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_hcM04W5p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF02W0p42L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF02W0p84L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF02W1p65L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF02W3p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF04W0p42L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF04W0p84L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF04W1p65L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF04W3p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF06W0p42L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF06W0p84L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF06W1p65L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF06W3p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF08W0p42L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF08W0p84L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF08W1p65L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF08W3p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aM02W1p65L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aM02W1p65L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aM02W1p65L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aM02W3p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aM02W3p00L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aM02W3p00L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aM02W5p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aM02W5p00L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aM02W5p00L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aM04W1p65L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aM04W1p65L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aM04W1p65L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aM04W3p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aM04W3p00L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aM04W3p00L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aM04W5p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aM04W5p00L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aM04W5p00L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM02W1p65L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM02W1p65L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM02W1p65L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM02W3p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM02W3p00L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM02W3p00L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM02W5p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM02W5p00L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM02W5p00L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM04W1p65L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM04W1p65L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM04W1p65L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM04W3p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM04W3p00L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM04W3p00L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM04W5p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM04W5p00L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM04W5p00L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM02W1p65L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM02W1p65L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM02W1p65L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM02W3p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM02W3p00L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM02W3p00L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM02W5p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM02W5p00L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM02W5p00L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM04W1p65L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM04W1p65L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM04W1p65L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM04W3p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM04W3p00L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM04W3p00L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM04W5p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM04W5p00L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM04W5p00L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_mcM04W3p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_mcM04W5p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_20v0_aup.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_20v0_noptap_iso.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_20v0_nvt_aup.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_20v0_nvt_noptap_iso.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_20v0_nvt_withptap.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_20v0_nvt_withptap_iso.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_20v0_withptap.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_20v0_withptap_iso.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_20v0_zvt_withptap.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_g5v0d10v5_aM04W3p00L0p50.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_g5v0d10v5_aM04W5p00L0p50.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_g5v0d10v5_aM04W7p00L0p50.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_g5v0d10v5_aM10W3p00L0p50.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_g5v0d10v5_aM10W5p00L0p50.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_g5v0d10v5_aM10W7p00L0p50.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_g5v0d10v5_bM02W3p00L0p50.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_g5v0d10v5_bM02W5p00L0p50.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_g5v0d10v5_bM04W3p00L0p50.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_g5v0d10v5_bM04W5p00L0p50.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_g5v0d10v5_bM04W7p00L0p50.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_g5v0d10v5_bM10W3p00L0p50.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_g5v0d10v5_bM10W5p00L0p50.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_g5v0d10v5_bM10W7p00L0p50.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF02W0p84L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF02W1p68L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF02W2p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF02W3p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF02W5p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF04W0p84L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF04W1p68L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF04W2p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF04W3p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF04W5p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF06W0p84L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF06W1p68L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF06W2p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF06W3p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF08W0p84L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF08W1p68L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM02W1p65L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM02W1p65L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM02W1p65L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM02W3p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM02W3p00L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM02W3p00L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM02W5p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM02W5p00L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM02W5p00L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM04W1p65L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM04W1p65L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM04W1p65L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM04W3p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM04W3p00L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM04W3p00L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM04W5p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM04W5p00L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM04W5p00L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM02W1p65L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM02W1p65L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM02W1p65L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM02W3p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM02W3p00L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM02W3p00L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM02W5p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM02W5p00L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM02W5p00L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM04W1p65L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM04W1p65L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM04W1p65L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM04W3p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM04W3p00L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM04W3p00L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM04W5p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM04W5p00L0p18.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM04W5p00L0p25.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_hcM04W3p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_hcM04W5p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_lvt_aM02W3p00L0p35.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_lvt_aM02W3p00L0p50.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_lvt_aM02W5p00L0p35.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_lvt_aM02W5p00L0p50.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_lvt_aM04W3p00L0p35.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_lvt_aM04W3p00L0p50.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_lvt_aM04W5p00L0p35.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_lvt_aM04W5p00L0p50.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_mcM04W3p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_mcM04W5p00L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_mvt_aF02W0p84L0p15.gds create mode 100644 sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_20v0_withptap.gds create mode 100644 sky130/cells/klayout/pymacros/cells/globals.py create mode 100644 sky130/cells/klayout/pymacros/cells/gr.py create mode 100644 sky130/cells/klayout/pymacros/cells/layers_def.py create mode 100644 sky130/cells/klayout/pymacros/cells/parent_res.py create mode 100644 sky130/cells/klayout/pymacros/cells/res_diff_child.py create mode 100644 sky130/cells/klayout/pymacros/cells/res_diff_klayout_panel.py create mode 100644 sky130/cells/klayout/pymacros/cells/res_klayout_panel.py create mode 100644 sky130/cells/klayout/pymacros/cells/res_metal_child.py create mode 100644 sky130/cells/klayout/pymacros/cells/res_metal_klayout_panel.py create mode 100644 sky130/cells/klayout/pymacros/cells/res_poly_child.py create mode 100644 sky130/cells/klayout/pymacros/cells/res_poly_klayout_panel.py create mode 100644 sky130/cells/klayout/pymacros/cells/rf.py create mode 100644 sky130/cells/klayout/pymacros/cells/via_generator.py create mode 100644 sky130/cells/klayout/pymacros/cells/vias.py create mode 100644 sky130/cells/klayout/pymacros/cells/vpp.py create mode 100644 sky130/cells/klayout/pymacros/sky130.lym diff --git a/sky130/cells/klayout/pymacros/README.md b/sky130/cells/klayout/pymacros/README.md new file mode 100644 index 000000000..cd122659b --- /dev/null +++ b/sky130/cells/klayout/pymacros/README.md @@ -0,0 +1,3 @@ +# Skywater130_PCells + +Contains klayout pcells generator. diff --git a/sky130/cells/klayout/pymacros/cells/__init__.py b/sky130/cells/klayout/pymacros/cells/__init__.py new file mode 100644 index 000000000..a6b2da74d --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/__init__.py @@ -0,0 +1,87 @@ + +# Copyright 2022 Skywater 130nm pdk development +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +#============================================================================ +# ---------------- Pcells Generators for Klayout of sky ---------------- +#============================================================================ + +import pya +from cells.vias import vias_gen + +from .fet import * +from .diode import * +from .bjt import * +from .vpp import * +from .rf import * +from .cap import * +from .gr import * +from .res_poly_klayout_panel import res_poly +from .res_diff_klayout_panel import res_diff +from .res_metal_klayout_panel import res_metal + + + + +# It's a Python class that inherits from the pya.Library class +class sky130(pya.Library): + """ + The library where we will put the PCell into + """ + + def __init__(self): + # Set the description + self.description = "sky130 Pcells" + + # Create the PCell declarations + # MOS DEVICES + self.layout().register_pcell("pfet", pfet()) + self.layout().register_pcell("nfet", nfet()) + + # BJT + self.layout().register_pcell("npn_bjt", npn_bjt()) # npn_05v5_1p00x1p00, npn_05v5_1p00x2p00 , npn_11v0_1p00x1p00 + self.layout().register_pcell("pnp_bjt", pnp_bjt()) # pnp_05v5_0p68x0p68 , pnp_05v5_3p40x3p40 + + + # CAP Devices + self.layout().register_pcell("cap_vpp", cap_vpp()) # VPP devices + self.layout().register_pcell("cap_var", cap_var()) # varactor devices + self.layout().register_pcell("mim_cap", mim_cap()) # mim cap devices + + + # DIODE DEVICES + + self.layout().register_pcell("photodiode", photo_diode()) + self.layout().register_pcell("n_diode", n_diode()) + self.layout().register_pcell("p_diode", p_diode()) + + + # RF Devices + self.layout().register_pcell("rf_mosfet", rf_mosfet()) # rf mosfets + self.layout().register_pcell("rf_bjt", rf_bjt()) # rf bjt + self.layout().register_pcell("rf_coils", rf_coils()) # rf coils + + + # vias + self.layout().register_pcell("vias_gen", vias_gen()) # vias generator + self.layout().register_pcell("guard_ring_gen", guard_ring_gen()) # vias generator + + # Resistor + self.layout().register_pcell("res_diff", res_diff()) # Res diff generator + self.layout().register_pcell("res_poly", res_poly()) # Res poly generator + self.layout().register_pcell("res_metal", res_metal()) # Res metal generator + + # Register us with the name "skywater130". + self.register("skywater130") diff --git a/sky130/cells/klayout/pymacros/cells/bjt.py b/sky130/cells/klayout/pymacros/cells/bjt.py new file mode 100644 index 000000000..fc0d7e818 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/bjt.py @@ -0,0 +1,94 @@ +# Copyright 2022 Skywater 130nm pdk development +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +######################################################################################################################## +# BJT Generator for skywater130 +######################################################################################################################## + + +import pya +from .draw_bjt import * +from .globals import * + + + +class npn_bjt(pya.PCellDeclarationHelper): + """ + NPN BJT Generator for Skywater130 + """ + + def __init__(self): + + # Important: initialize the super class + super(npn_bjt, self).__init__() + self.Type_handle = self.param("type", self.TypeList, "type") + + for i in BJT_NPN_DEV : + self.Type_handle.add_choice(i, i) + + + + self.param("Model", self.TypeString, "Model", default="sky130_fd_pr__npn",readonly=True) + + def display_text_impl(self): + # Provide a descriptive text for the cell + return str(self.type) + + def produce_impl(self): + + # This is the main part of the implementation: create the layout + + self.percision = 1/self.layout.dbu + #self.cell.flatten(1) + npn_instance = draw_npn(layout=self.layout,device_name=self.type) + write_cells = pya.CellInstArray(npn_instance.cell_index(), pya.Trans(pya.Point(0, 0)), + pya.Vector(0, 0), pya.Vector(0, 0),1 , 1) + self.cell.flatten(1) + self.cell.insert(write_cells) + self.layout.cleanup() + +class pnp_bjt(pya.PCellDeclarationHelper): + """ + PNP BJT Generator for Skywater130 + """ + + def __init__(self): + + # Important: initialize the super class + super(pnp_bjt, self).__init__() + self.Type_handle = self.param("Type", self.TypeList, "Type") + + for i in BJT_PNP_DEV : + self.Type_handle.add_choice(i, i) + + + self.param("Model", self.TypeString, "Model", default="sky130_fd_pr__pnp",readonly=True) + + def display_text_impl(self): + # Provide a descriptive text for the cell + return str(self.Type) + + def produce_impl(self): + + # This is the main part of the implementation: create the layout + + self.percision = 1/self.layout.dbu + pnp_instance = draw_pnp(layout=self.layout,device_name=self.Type) + write_cells = pya.CellInstArray(pnp_instance.cell_index(), pya.Trans(pya.Point(0, 0)), + pya.Vector(0, 0), pya.Vector(0, 0),1 , 1) + self.cell.flatten(1) + self.cell.insert(write_cells) + + self.layout.cleanup() diff --git a/sky130/cells/klayout/pymacros/cells/cap.py b/sky130/cells/klayout/pymacros/cells/cap.py new file mode 100644 index 000000000..a929d6721 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/cap.py @@ -0,0 +1,183 @@ +# Copyright 2022 Skywater 130nm pdk development +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +######################################################################################################################## +# cap(Varactor-MIM) Generator for skywater130 +######################################################################################################################## + + +import pya + +from .draw_cap import * +from .globals import * + + +l_min = 0.18 +w_min = 1 +grw_min = 0.17 + +l_mim = 2 +l_mim2 = 2.16 + +class cap_var(pya.PCellDeclarationHelper): + """ + Cap(Varactor) Generator for Skywater130 + """ + + def __init__(self): + # Initialize super class. + super(cap_var, self).__init__() + + #===================== PARAMETERS DECLARATIONS ===================== + + self.Type_handle = self.param("type", self.TypeList, "Device Type") + self.Type_handle.add_choice("sky130_fd_pr__cap_var_lvt","sky130_fd_pr__cap_var_lvt") + self.Type_handle.add_choice("sky130_fd_pr__cap_var_hvt","sky130_fd_pr__cap_var_hvt") + + + self.param("l", self.TypeDouble, "length", default=l_min, unit="um") + self.param("w", self.TypeDouble, "width", default=w_min, unit="um") + self.param("tap_con_col", self.TypeInt, "tap Contacts Columns", default=1) + + self.param("gr", self.TypeBoolean, "Gaurd Ring", default=0) + self.param("grw", self.TypeDouble, "Gaurd Ring Width", default=grw_min, unit="um") + + self.param("nf", self.TypeDouble, "Number of Fingers", default=1) + #self.param("n", self.TypeDouble, "instance number", default=1) + + self.param("area", self.TypeDouble,"Area", readonly=True, unit="um^2") + self.param("perim", self.TypeDouble,"Perimeter", readonly=True, unit="um") + self.param("cap_value", self.TypeDouble,"Cap Value", readonly=True, unit="fF") + + + def display_text_impl(self): + # Provide a descriptive text for the cell + return "Varactor(L=" + ('%.3f' % self.l) + ",W=" + ('%.3f' % self.w) + ")" + + def coerce_parameters_impl(self): + # We employ coerce_parameters_impl to decide whether the handle or the + # numeric parameter has changed (by comparing against the effective + # radius ru) and set ru to the effective radius. We also update the + # numerical value or the shape, depending on which on has not changed. + self.area = self.w * self.l + self.perim = 2*(self.w + self.l) + self.cap_value = 4.4* self.area + + if self.l < l_min : + self.l = l_min + + if self.w < w_min: + self.w = w_min + + if self.grw < grw_min: + self.grw = grw_min + + def can_create_from_shape_impl(self): + # Implement the "Create PCell from shape" protocol: we can use any shape which + # has a finite bounding box + return self.shape.is_box() or self.shape.is_polygon() or self.shape.is_path() + + def parameters_from_shape_impl(self): + # Implement the "Create PCell from shape" protocol: we set r and l from the shape's + # bounding box width and layer + self.r = self.shape.bbox().width() * self.layout.dbu / 2 + self.l = self.layout.get_info(self.layer) + + def transformation_from_shape_impl(self): + # Implement the "Create PCell from shape" protocol: we use the center of the shape's + # bounding box to determine the transformation + return pya.Trans(self.shape.bbox().center()) + + def produce_impl(self): + instance = draw_cap_var(layout= self.layout , l=self.l, w=self.w, type=self.type,tap_con_col=self.tap_con_col, gr= self.gr , grw= self.grw, nf=self.nf) + write_cells = pya.CellInstArray(instance.cell_index(), pya.Trans(pya.Point(0, 0)), + pya.Vector(0, 0), pya.Vector(0, 0), 1, 1) + self.cell.insert(write_cells) + self.cell.flatten(1) + + +class mim_cap(pya.PCellDeclarationHelper): + """ + Cap(mim) Generator for Skywater130 + """ + + def __init__(self): + # Initialize super class. + super(mim_cap, self).__init__() + + #===================== PARAMETERS DECLARATIONS ===================== + + self.Type_handle = self.param("type", self.TypeList, "Device Type") + self.Type_handle.add_choice("sky130_fd_pr__model__cap_mim","sky130_fd_pr__model__cap_mim") + self.Type_handle.add_choice("sky130_fd_pr__model__cap_mim_m4","sky130_fd_pr__model__cap_mim_m4") + + + self.param("l", self.TypeDouble, "length", default=l_mim, unit="um") + self.param("w", self.TypeDouble, "width", default=l_mim, unit="um") + + #self.param("n", self.TypeInt, "instance number", default=1) + + self.param("area", self.TypeDouble,"Area", readonly=True, unit="um^2") + self.param("perim", self.TypeDouble,"Perimeter", readonly=True, unit="um") + self.param("cap_value", self.TypeDouble,"Cap Value", readonly=True, unit="fF") + + def display_text_impl(self): + # Provide a descriptive text for the cell + return "mimcap(L=" + ('%.3f' % self.l) + ",W=" + ('%.3f' % self.w) + ")" + + def coerce_parameters_impl(self): + # We employ coerce_parameters_impl to decide whether the handle or the + # numeric parameter has changed (by comparing against the effective + # radius ru) and set ru to the effective radius. We also update the + # numerical value or the shape, depending on which on has not changed. + self.area = self.w * self.l + self.perim = 2*(self.w + self.l) + self.cap_value = 2*self.area + + if self.type == "sky130_fd_pr__model__cap_mim_m4": + if self.l < l_mim2 : + self.l = l_mim2 + + if self.w < l_mim2: + self.w = l_mim2 + else : + if self.l < l_mim : + self.l = l_mim + + if self.w < l_mim: + self.w = l_mim + + def can_create_from_shape_impl(self): + # Implement the "Create PCell from shape" protocol: we can use any shape which + # has a finite bounding box + return self.shape.is_box() or self.shape.is_polygon() or self.shape.is_path() + + def parameters_from_shape_impl(self): + # Implement the "Create PCell from shape" protocol: we set r and l from the shape's + # bounding box width and layer + self.r = self.shape.bbox().width() * self.layout.dbu / 2 + self.l = self.layout.get_info(self.layer) + + def transformation_from_shape_impl(self): + # Implement the "Create PCell from shape" protocol: we use the center of the shape's + # bounding box to determine the transformation + return pya.Trans(self.shape.bbox().center()) + + def produce_impl(self): + instance = draw_mim_cap(layout= self.layout , l=self.l, w=self.w, type=self.type) + write_cells = pya.CellInstArray(instance.cell_index(), pya.Trans(pya.Point(0, 0)), + pya.Vector(0, 0), pya.Vector(0, 0), 1, 1) + self.cell.insert(write_cells) + self.cell.flatten(1) diff --git a/sky130/cells/klayout/pymacros/cells/diode.py b/sky130/cells/klayout/pymacros/cells/diode.py new file mode 100644 index 000000000..6db22965d --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/diode.py @@ -0,0 +1,208 @@ +# Copyright 2022 Skywater 130nm pdk development +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +######################################################################################################################## +# DIODE Generator for skywater130 +######################################################################################################################## + + +import pya + +from .draw_diode import * +from .globals import * + + +class photo_diode(pya.PCellDeclarationHelper): + """ + photo diode Generator for Skywater130 + """ + + def __init__(self): + + # Important: initialize the super class + super(photo_diode, self).__init__() + self.Type_handle = self.param("Type", self.TypeList, "Type") + + for i in PHOTO_D_DEV : + self.Type_handle.add_choice(i, i) + + + self.param("Model", self.TypeString, "Model", default="sky130_fd_pr__photodiode",readonly=True) + + def display_text_impl(self): + # Provide a descriptive text for the cell + return str(self.Type) + + def produce_impl(self): + + # This is the main part of the implementation: create the layout + + self.percision = 1/self.layout.dbu + ph_d_instance = draw_photodiode(layout=self.layout,device_name=self.Type) + + write_cells = pya.CellInstArray(ph_d_instance.cell_index(), pya.Trans(pya.Point(0, 0)), + pya.Vector(0, 0), pya.Vector(0, 0),1 , 1) + self.cell.flatten(1) + self.cell.insert(write_cells) + + self.layout.cleanup() + +d_min = 0.45 +grw_min = 0.17 + +class n_diode(pya.PCellDeclarationHelper): + """ + N-Diode Generator for Skywater130 + """ + + def __init__(self): + # Initialize super class. + super(n_diode, self).__init__() + + #===================== PARAMETERS DECLARATIONS ===================== + + self.Type_handle = self.param("type", self.TypeList, "Device Type") + self.Type_handle.add_choice("sky130_fd_pr__diode_pw2nd_05v5", "sky130_fd_pr__diode_pw2nd_05v5") + self.Type_handle.add_choice("sky130_fd_pr__diode_pw2nd_05v5_lvt", "sky130_fd_pr__diode_pw2nd_05v5_lvt") + self.Type_handle.add_choice("sky130_fd_pr__diode_pw2nd_05v5_nvt", "sky130_fd_pr__diode_pw2nd_05v5_nvt") + self.Type_handle.add_choice("sky130_fd_pr__diode_pw2nd_11v0", "sky130_fd_pr__diode_pw2nd_11v0") + + self.param("w", self.TypeDouble, "width", default=d_min, unit="um") + self.param("l", self.TypeDouble, "length", default=d_min, unit="um") + self.param("cath_w", self.TypeDouble, "Cathode Width", default=grw_min, unit="um") + + self.param("area", self.TypeDouble,"Area", readonly=True, unit="um^2") + self.param("perim", self.TypeDouble,"Perimeter", readonly=True, unit="um") + + #self.param("n", self.TypeInt, "n", default=1) + + def display_text_impl(self): + # Provide a descriptive text for the cell + return "n_diode(L=" + ('%.3f' % self.l) + ",W=" + ('%.3f' % self.w) + ")" + + def coerce_parameters_impl(self): + # We employ coerce_parameters_impl to decide whether the handle or the + # numeric parameter has changed (by comparing against the effective + # radius ru) and set ru to the effective radius. We also update the + # numerical value or the shape, depending on which on has not changed. + self.area = self.w * self.l + self.perim = 2*(self.w + self.l) + + if self.l < d_min : + self.l = d_min + + if self.w < d_min : + self.w = d_min + + if self.cath_w < grw_min: + self.cath_w = grw_min + + def can_create_from_shape_impl(self): + # Implement the "Create PCell from shape" protocol: we can use any shape which + # has a finite bounding box + return self.shape.is_box() or self.shape.is_polygon() or self.shape.is_path() + + def parameters_from_shape_impl(self): + # Implement the "Create PCell from shape" protocol: we set r and l from the shape's + # bounding box width and layer + self.r = self.shape.bbox().width() * self.layout.dbu / 2 + self.l = self.layout.get_info(self.layer) + + def transformation_from_shape_impl(self): + # Implement the "Create PCell from shape" protocol: we use the center of the shape's + # bounding box to determine the transformation + return pya.Trans(self.shape.bbox().center()) + + def produce_impl(self): + instance = draw_diode(layout= self.layout ,d_type="n", l=self.l, w=self.w, type=self.type,cath_w=self.cath_w) + write_cells = pya.CellInstArray(instance.cell_index(), pya.Trans(pya.Point(0, 0)), + pya.Vector(0, 0), pya.Vector(0, 0), 1, 1) + self.cell.insert(write_cells) + self.cell.flatten(1) + + +class p_diode(pya.PCellDeclarationHelper): + """ + N-Diode Generator for Skywater130 + """ + + def __init__(self): + # Initialize super class. + super(p_diode, self).__init__() + + #===================== PARAMETERS DECLARATIONS ===================== + + self.Type_handle = self.param("type", self.TypeList, "Device Type") + self.Type_handle.add_choice("sky130_fd_pr__diode_pd2nw_05v5", "sky130_fd_pr__diode_pd2nw_05v5") + self.Type_handle.add_choice("sky130_fd_pr__diode_pd2nw_05v5_lvt", "sky130_fd_pr__diode_pd2nw_05v5_lvt") + self.Type_handle.add_choice("sky130_fd_pr__diode_pd2nw_05v5_hvt", "sky130_fd_pr__diode_pd2nw_05v5_hvt") + self.Type_handle.add_choice("sky130_fd_pr__diode_pd2nw_11v0", "sky130_fd_pr__diode_pd2nw_11v0") + + self.param("w", self.TypeDouble, "width", default=d_min, unit="um") + self.param("l", self.TypeDouble, "length", default=d_min, unit="um") + self.param("cath_w", self.TypeDouble, "Cathode width", default=grw_min, unit="um") + self.param("grw", self.TypeDouble, "Gaurd Ring width", default=grw_min, unit="um") + + self.param("area", self.TypeDouble,"Area", readonly=True, unit="um^2") + self.param("perim", self.TypeDouble,"Perimeter", readonly=True, unit="um") + + #self.param("n", self.TypeInt, "n", default=1) + + def display_text_impl(self): + # Provide a descriptive text for the cell + return "p_diode(L=" + ('%.3f' % self.l) + ",W=" + ('%.3f' % self.w) + ")" + + def coerce_parameters_impl(self): + # We employ coerce_parameters_impl to decide whether the handle or the + # numeric parameter has changed (by comparing against the effective + # radius ru) and set ru to the effective radius. We also update the + # numerical value or the shape, depending on which on has not changed. + self.area = self.w * self.l + self.perim = 2*(self.w + self.l) + + if self.l < d_min : + self.l = d_min + + if self.w < d_min : + self.w = d_min + + if self.grw < grw_min: + self.grw = grw_min + + if self.cath_w < grw_min: + self.cath_w = grw_min + + def can_create_from_shape_impl(self): + # Implement the "Create PCell from shape" protocol: we can use any shape which + # has a finite bounding box + return self.shape.is_box() or self.shape.is_polygon() or self.shape.is_path() + + def parameters_from_shape_impl(self): + # Implement the "Create PCell from shape" protocol: we set r and l from the shape's + # bounding box width and layer + self.r = self.shape.bbox().width() * self.layout.dbu / 2 + self.l = self.layout.get_info(self.layer) + + def transformation_from_shape_impl(self): + # Implement the "Create PCell from shape" protocol: we use the center of the shape's + # bounding box to determine the transformation + return pya.Trans(self.shape.bbox().center()) + + def produce_impl(self): + instance = draw_diode(layout= self.layout ,d_type="p", l=self.l, w=self.w, type=self.type,grw=self.grw, cath_w=self.cath_w) + write_cells = pya.CellInstArray(instance.cell_index(), pya.Trans(pya.Point(0, 0)), + pya.Vector(0, 0), pya.Vector(0, 0), 1, 1) + self.cell.insert(write_cells) + self.cell.flatten(1) diff --git a/sky130/cells/klayout/pymacros/cells/draw_bjt.py b/sky130/cells/klayout/pymacros/cells/draw_bjt.py new file mode 100644 index 000000000..fb72fb8e6 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/draw_bjt.py @@ -0,0 +1,66 @@ + +# Copyright 2022 Skywater 130nm pdk development +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +######################################################################################################################## +## BJT Pcells Generators for Klayout of skywater130 +######################################################################################################################## + + +import pya +import os +from .globals import * +import gdsfactory as gf + + +gds_p_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),"fixed_devices/bjt" )# parent file path + + +def draw_npn(layout, device_name): + + ''' + drawing NPN devices + ''' + gds_path = f"{gds_p_path}/npn" + + if device_name in BJT_NPN_DEV : + layout.read(f"{gds_path}/{device_name}.gds") + cell_name = device_name + else : + cell_name = device_name + + + + return layout.cell(cell_name) + + + +def draw_pnp(layout, device_name): + + ''' + drawing PNP devices + ''' + gds_path = f"{gds_p_path}/pnp" + + if device_name in BJT_PNP_DEV : + layout.read(f"{gds_path}/{device_name}.gds") + cell_name = device_name + else : + cell_name = device_name + + + return layout.cell(cell_name) + + diff --git a/sky130/cells/klayout/pymacros/cells/draw_cap.py b/sky130/cells/klayout/pymacros/cells/draw_cap.py new file mode 100644 index 000000000..4d85a6f23 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/draw_cap.py @@ -0,0 +1,368 @@ +import gdsfactory as gf + +from .via_generator import * +from .layers_def import * + + +def draw_cap_var( + layout, + type="sky130_fd_pr__cap_var_lvt", + l: float = 0.18, + w: float = 1, + tap_con_col: int = 1, + gr: int = 1, + grw: float = 0.17, + nf: int = 1, +): + + """ + Retern varactor + + Args: + layout : layout object + l : float of gate length + w : float of gate width + tap_con_col : int of tap contacts columns + gr : boolaen of having guard ring + grw : float of guard ring width + nf : integer of number of fingers + + + """ + + c = gf.Component("sky_cap_var_dev") + + c_inst = gf.Component("dev inst") + + # used dimensions and layers + + end_cap = 0.15 + con_size = (0.17, 0.17) + con_enc = (0.05, 0.08) + con_spacing = (0.17, 0.17) + con_t_enc = (0.06, 0.12) + gate_con_spacing = 0.195 + tap_nsdm_enc = 0.125 + nwell_enclosing = 0.18 + tap_spacing = 0.27 + hv_enc = 0.18 + nwell_spacing = 1.27 + + # draw the channel tap and poly and thier contacts + + tap_con = ( + (tap_con_col * con_size[0]) + + ((tap_con_col - 1) * con_size[0]) + + 3 * con_t_enc[0] + ) + tap_w = gate_con_spacing + tap_con + + tap = c_inst.add_ref( + gf.components.rectangle(size=(l + 2 * tap_w, w), layer=tap_layer) + ) + + # adding nsdm + nsdm = c_inst.add_ref( + gf.components.rectangle( + size=( + tap.xmax - tap.xmin + 2 * tap_nsdm_enc, + tap.ymax - tap.ymin + 2 * tap_nsdm_enc, + ), + layer=nsdm_layer, + ) + ) + nsdm.move((tap.xmin - tap_nsdm_enc, tap.ymin - tap_nsdm_enc)) + + tap_con = via_stack( + x_range=(0, tap_w - gate_con_spacing), + y_range=(0.06, w - 0.06), + base_layer=tap_layer, + metal_level=1, + ) + c_inst.add_array( + component=tap_con, columns=2, rows=1, spacing=(tap_w + l + gate_con_spacing, 0) + ) + + poly = c_inst.add_ref( + gf.components.rectangle(size=(l, w + 2 * end_cap), layer=poly_layer) + ) + poly.move((tap_w, -end_cap)) + + if l < (con_size[0] + 2 * con_enc[0]): + pc_x = con_size[0] + 2 * con_enc[0] + else: + pc_x = l + + pc_y = con_size[1] + 2 * con_enc[1] + + c_pc = gf.Component("poly con") + + rect_pc = c_pc.add_ref(gf.components.rectangle(size=(pc_x, pc_y), layer=poly_layer)) + + poly_con = via_stack( + x_range=(rect_pc.xmin, rect_pc.xmax), + y_range=(rect_pc.ymin, rect_pc.ymax), + base_layer=poly_layer, + metal_level=1, + li_enc_dir="H", + ) + c_pc.add_ref(poly_con) + + pc = c_inst.add_array( + component=c_pc, rows=2, columns=1, spacing=(0, pc_y + w + 2 * end_cap) + ) + pc.move((tap_w - ((pc_x - l) / 2), -pc_y - end_cap)) + + # adding nwell + nwell = c_inst.add_ref( + gf.components.rectangle( + size=(tap.xmax - tap.xmin + 2 * nwell_enclosing, pc.ymax - pc.ymin), + layer=nwell_layer, + ) + ) + nwell.move((tap.xmin - nwell_enclosing, pc.ymin)) + + # c.add_ref(c_inst) + c.add_array( + component=c_inst, + columns=1, + rows=nf, + spacing=(0, (c_inst.ymax - c_inst.ymin) + nwell_spacing), + ) + + if gr == 1: + c_temp = gf.Component("gr form") + g_r_in = c_temp.add_ref( + gf.components.rectangle( + size=( + (c_inst.xmax - c_inst.xmin) + 2 * tap_spacing, + nf * (c_inst.ymax - c_inst.ymin) + + (nf - 1) * nwell_spacing + + 2 * tap_spacing, + ), + layer=tap_layer, + ) + ) + g_r_in.move((c_inst.xmin - tap_spacing, c_inst.ymin - tap_spacing)) + g_r_out = c_temp.add_ref( + gf.components.rectangle( + size=( + g_r_in.xmax - g_r_in.xmin + 2 * grw, + g_r_in.ymax - g_r_in.ymin + 2 * grw, + ), + layer=tap_layer, + ) + ) + g_r_out.move((g_r_in.xmin - grw, g_r_in.ymin - grw)) + g_r = c.add_ref( + gf.geometry.boolean(A=g_r_out, B=g_r_in, operation="A-B", layer=tap_layer) + ) + + g_r_li = c.add_ref( + gf.geometry.boolean(A=g_r_out, B=g_r_in, operation="A-B", layer=li_layer) + ) + + g_psdm_in = c_temp.add_ref( + gf.components.rectangle( + size=( + g_r_in.xmax - g_r_in.xmin - 2 * tap_nsdm_enc, + g_r_in.ymax - g_r_in.ymin - 2 * tap_nsdm_enc, + ), + layer=psdm_layer, + ) + ) + g_psdm_in.move((g_r_in.xmin + tap_nsdm_enc, g_r_in.ymin + tap_nsdm_enc)) + g_psdm_out = c_temp.add_ref( + gf.components.rectangle( + size=( + g_r_out.xmax - g_r_out.xmin + 2 * tap_nsdm_enc, + g_r_out.ymax - g_r_out.ymin + 2 * tap_nsdm_enc, + ), + layer=psdm_layer, + ) + ) + g_psdm_out.move((g_r_out.xmin - tap_nsdm_enc, g_r_out.ymin - tap_nsdm_enc)) + + g_psdm = c.add_ref( + gf.geometry.boolean( + A=g_psdm_out, B=g_psdm_in, operation="A-B", layer=psdm_layer + ) + ) + + if grw < con_size[0] + 2 * con_t_enc[0]: + g_con_range = (g_r_in.ymin, g_r_in.ymax) + else: + g_con_range = (g_r_out.ymin, g_r_out.ymax) + + g_licon_u = c.add_ref( + via_generator( + x_range=(g_r_in.xmin + 0.17, g_r_in.xmax - 0.17), + y_range=(g_r_in.ymax, g_r_out.ymax), + via_enclosure=con_t_enc, + via_layer=licon_layer, + via_size=con_size, + via_spacing=con_spacing, + ) + ) + + g_licon_d = c.add_ref( + via_generator( + x_range=(g_r_in.xmin + 0.17, g_r_in.xmax - 0.17), + y_range=(g_r_out.ymin, g_r_in.ymin), + via_enclosure=con_t_enc, + via_layer=licon_layer, + via_size=con_size, + via_spacing=con_spacing, + ) + ) + + g_licon_l = c.add_ref( + via_generator( + x_range=(g_r_out.xmin, g_r_in.xmin), + y_range=g_con_range, + via_enclosure=con_t_enc, + via_layer=licon_layer, + via_size=con_size, + via_spacing=con_spacing, + ) + ) + + g_licon_r = c.add_ref( + via_generator( + x_range=(g_r_in.xmax, g_r_out.xmax), + y_range=g_con_range, + via_enclosure=con_t_enc, + via_layer=licon_layer, + via_size=con_size, + via_spacing=con_spacing, + ) + ) + + if type == "sky130_fd_pr__cap_var_hvt": + hvtp = c_inst.add_ref( + gf.components.rectangle( + size=(l + 2 * hv_enc, w + 2 * hv_enc), layer=hvtp_layer + ) + ) + hvtp.move((poly.xmin - hv_enc, tap.ymin - hv_enc)) + + c.write_gds("cap_var_temp.gds") + layout.read("cap_var_temp.gds") + cell_name = "sky_cap_var_dev" + + return layout.cell(cell_name) + + +def draw_mim_cap( + layout, + type="sky130_fd_pr__model__cap_mim", + l: float = 2, + w: float = 2, +): + + """ + Retern mim cap + + Args: + layout : layout object + l : float of capm length + w : float of capm width + + + """ + + c = gf.Component("sky_mim_cap_dev") + + # used dimensions and layers + + bottom_layer = m3_layer + upper_layer = m4_layer + lbl = m4_lbl + via_layer = via3_layer + via_size = (0.2, 0.2) + via_enc = (0.09, 0.065) + via_spacing = (0.2, 0.2) + cap_layer = capm_layer + cap_enc = 0.195 + m_dn_enc = 0.2 + m_up_spacing = 1.355 + m_up_w = 0.48 + + if type == "sky130_fd_pr__model__cap_mim_m4": + bottom_layer = m4_layer + upper_layer = m5_layer + lbl = m5_lbl + via_layer = via4_layer + via_size = (0.8, 0.8) + via_enc = (0.31, 0.31) + via_spacing = (0.8, 0.8) + cap_layer = cap2m_layer + cap_enc = 0.08 + m_dn_enc = 0.4 + m_up_spacing = 1.68 + m_up_w = 1.6 + + side_enc = (0.02, 0.06) + + # drawing cap identifier and bottom , upper layers + cap = c.add_ref(gf.components.rectangle(size=(w, l), layer=cap_layer)) + + m_up1 = c.add_ref( + gf.components.rectangle( + size=(cap.xmax - cap.xmin - 2 * cap_enc, cap.ymax - cap.ymin - 2 * cap_enc), + layer=upper_layer, + ) + ) + m_up1.move((cap.xmin + cap_enc, cap.ymin + cap_enc)) + + m_dn = c.add_ref( + gf.components.rectangle( + size=( + m_dn_enc + + cap_enc + + m_up1.xmax + - m_up1.xmin + + m_up_spacing + + m_up_w + + side_enc[0], + cap.ymax - cap.ymin + 2 * m_dn_enc, + ), + layer=bottom_layer, + ) + ) + m_dn.move((cap.xmin - m_dn_enc, cap.ymin - m_dn_enc)) + + m_up2 = c.add_ref( + gf.components.rectangle( + size=(m_up_w, m_dn.ymax - m_dn.ymin - 2 * side_enc[1]), layer=upper_layer + ) + ) + m_up2.move((m_up1.xmax + m_up_spacing, m_dn.ymin + side_enc[1])) + + # generating vias + + via_1 = via_generator( + x_range=(m_up1.xmin, m_up1.xmax), + y_range=(m_up1.ymin, m_up1.ymax), + via_enclosure=via_enc, + via_layer=via_layer, + via_size=via_size, + via_spacing=via_spacing, + ) + c.add_ref(via_1) + + via_2 = via_generator( + x_range=(m_up2.xmin, m_up2.xmax), + y_range=(m_up2.ymin, m_up2.ymax), + via_enclosure=via_enc, + via_layer=via_layer, + via_size=via_size, + via_spacing=via_spacing, + ) + c.add_ref(via_2) + + c.write_gds("mim_cap_temp.gds") + layout.read("mim_cap_temp.gds") + cell_name = "sky_mim_cap_dev" + + return layout.cell(cell_name) diff --git a/sky130/cells/klayout/pymacros/cells/draw_diode.py b/sky130/cells/klayout/pymacros/cells/draw_diode.py new file mode 100644 index 000000000..5afa5f6f1 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/draw_diode.py @@ -0,0 +1,239 @@ +# Copyright 2022 Skywater 130nm pdk development +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +######################################################################################################################## +## Diode Pcells Generators for Klayout of skywater130 +######################################################################################################################## + + +import os + +from .via_generator import * +from .globals import * +from .layers_def import * +import gdsfactory as gf + + +gds_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),"fixed_devices/photodiode" ) # parent file path + + +def draw_photodiode(layout, device_name): + + ''' + drawing photo diode device + ''' + + if device_name in PHOTO_D_DEV : + layout.read(f"{gds_path}/{device_name}.gds") + cell_name = device_name + else : + cell_name = device_name + + return layout.cell(cell_name) + +def draw_diode ( + layout , + d_type = "n", + w : float = 0.45, + l: float = 0.45, + type = "sky130_fd_pr__diode_pw2nd_05v5", + cath_w : float = 0.17, + grw : float = 0.17, +) : + + ''' + Retern diode + + Args: + layout : layout object + d_type : string of the diode type [n,p] + w : float of the diode width + l: float of the diode length + type : string of the device type + cath_w : float of cathode width in case of p_diode + grw : float of the gaurd ring width + + ''' + + c = gf.Component("sky_diode_dev") + + c_inst = gf.Component("dev inst") + + + # used dimensions and layers + + npsd_enc = 0.125 + diff_tap_spacing : float = 0.37 + + + + con_size = (0.17,0.17) + con_spacing = (0.19,0.19) + d_con_enc = (0.06,0.06) + t_con_enc = (0.12,0.12) + + + li_enc = 0.08 + m1_enc = 0.03 + + con_layer = [licon_layer, mcon_layer] + + lvt_enc : float = 0.18 + + hv_enc = 0.185 + + nwell_enc = 0.185 + + + + if d_type == "n": + d_npsd_layer = nsdm_layer + t_npsd_layer = psdm_layer + elif d_type == "p": + d_npsd_layer = psdm_layer + t_npsd_layer = nsdm_layer + + # generating diff and areaid_diode and its contacts + diff = c_inst.add_ref(gf.components.rectangle(size=(w,l),layer=diff_layer)) + diode = c_inst.add_ref(gf.components.rectangle(size=(w,l),layer=areaid_dio_layer)) + + + d_npsd = c_inst.add_ref(gf.components.rectangle(size=(w+ 2*npsd_enc, l+ 2*npsd_enc),layer=d_npsd_layer)) + d_npsd.move((-npsd_enc,-npsd_enc)) + + + for i in range(2): + d_con = c_inst.add_ref(via_generator(x_range=(0,w),y_range=(0,l),via_enclosure=d_con_enc,via_layer=con_layer[i],via_size=con_size,via_spacing=con_spacing)) + + d_li = c_inst.add_ref(gf.components.rectangle(size=(diode.xmax - diode.xmin + 2*(li_enc-d_con_enc[0]),d_con.ymax - d_con.ymin + 2*li_enc),layer=li_layer)) + d_li.move((-(li_enc-d_con_enc[0]) , d_con.ymin -li_enc)) + d_m1 = c_inst.add_ref(gf.components.rectangle(size=(w,d_li.ymax - d_li.ymin + 2*m1_enc),layer=m1_layer)) + d_m1.movey(d_li.ymin - m1_enc) + + # generating gaurd ring and its contacts + c_temp = gf.Component("temp store") + tap_in = c_temp.add_ref(gf.components.rectangle(size=(w +2*diff_tap_spacing,l +2*diff_tap_spacing) + ,layer=tap_layer)) + tap_in.move((-diff_tap_spacing,-diff_tap_spacing)) + tap_out = c_temp.add_ref(gf.components.rectangle(size=(tap_in.xmax - tap_in.xmin + 2*cath_w, tap_in.ymax - tap_in.ymin + 2*cath_w),layer=tap_layer)) + tap_out.move((tap_in.xmin - cath_w, tap_in.ymin-cath_w)) + tap = c_inst.add_ref(gf.geometry.boolean(A=tap_out, B = tap_in, operation="A-B",layer=tap_layer)) + + + t_npsd_in = c_temp.add_ref(gf.components.rectangle(size=(tap_in.xmax - tap_in.xmin - 2*npsd_enc, tap_in.ymax - tap_in.ymin - 2*npsd_enc) + ,layer=t_npsd_layer)) + t_npsd_in.move((tap_in.xmin + npsd_enc, tap_in.ymin + npsd_enc)) + t_npsd_out = c_temp.add_ref(gf.components.rectangle(size=(tap_out.xmax - tap_out.xmin + 2*npsd_enc, tap_out.ymax - tap_out.ymin + 2*npsd_enc) + ,layer=t_npsd_layer)) + t_npsd_out.move((tap_out.xmin - npsd_enc, tap_out.ymin - npsd_enc)) + t_npsd = c_inst.add_ref(gf.geometry.boolean(A=t_npsd_out, B=t_npsd_in, operation="A-B",layer=t_npsd_layer)) + + if cath_w < con_size[0] + 2*t_con_enc[0]: + t_con_range = (tap_in.xmin, tap_in.xmax) + else : + t_con_range = (tap_out.xmin, tap_out.xmax) + + t_licon_u = c_inst.add_ref(via_generator(x_range=t_con_range,y_range=(tap_in.ymax,tap_out.ymax),via_enclosure=t_con_enc + , via_layer=licon_layer,via_size=con_size,via_spacing=con_spacing)) + + t_licon_d = c_inst.add_ref(via_generator(x_range=t_con_range,y_range=(tap_out.ymin,tap_in.ymin),via_enclosure=t_con_enc + , via_layer=licon_layer,via_size=con_size,via_spacing=con_spacing)) + + t_licon_l = c_inst.add_ref(via_generator(x_range=(tap_out.xmin, tap_in.xmin),y_range=(tap_in.ymin +0.17,tap_in.ymax-0.17),via_enclosure=t_con_enc + , via_layer=licon_layer,via_size=con_size,via_spacing=con_spacing)) + + t_licon_r = c_inst.add_ref(via_generator(x_range=(tap_in.xmax, tap_out.xmax),y_range=(tap_in.ymin +0.17,tap_in.ymax-0.17),via_enclosure=t_con_enc + , via_layer=licon_layer,via_size=con_size,via_spacing=con_spacing)) + + tap_li_in = c_temp.add_ref(gf.components.rectangle(size=(w+2*diff_tap_spacing,l+2*diff_tap_spacing),layer=li_layer)) + tap_li_in.move((-diff_tap_spacing,-diff_tap_spacing)) + tap_li_out = c_temp.add_ref(gf.components.rectangle(size=(tap_in.xmax - tap_in.xmin + 2*cath_w, tap_in.ymax - tap_in.ymin + 2*cath_w),layer=li_layer)) + tap_li_out.move((tap_in.xmin - cath_w, tap_in.ymin-cath_w)) + tap_li = c_inst.add_ref(gf.geometry.boolean(A=tap_li_out, B = tap_li_in, operation="A-B",layer=li_layer)) + + if type == "sky130_fd_pr__diode_pw2nd_05v5_lvt" or type == "sky130_fd_pr__diode_pw2nd_05v5_nvt" or type == "sky130_fd_pr__diode_pd2nw_05v5_lvt": + lvt = c_inst.add_ref(gf.components.rectangle(size=(w+2*lvt_enc,l+2*lvt_enc),layer=lvtn_layer)) + lvt.move((-lvt_enc,-lvt_enc)) + + if type == "sky130_fd_pr__diode_pw2nd_05v5_nvt" or type == "sky130_fd_pr__diode_pw2nd_11v0" : + hvntm = c_inst.add_ref(gf.components.rectangle(size=(w+2*hv_enc,l+2*hv_enc),layer=hvntm_layer)) + hvntm.move((diode.xmin - hv_enc, diode.ymin - hv_enc)) + + if type == "sky130_fd_pr__diode_pd2nw_05v5_hvt" : + hvt = c_inst.add_ref(gf.components.rectangle(size=(w+2*lvt_enc,l+2*lvt_enc),layer=hvtp_layer)) + hvt.move((-lvt_enc,-lvt_enc)) + + if type == "sky130_fd_pr__diode_pw2nd_05v5_nvt" or type == "sky130_fd_pr__diode_pw2nd_11v0" : + hvi = c_inst.add_ref(gf.components.rectangle(size=(tap_out.xmax - tap_out.xmin + 2*hv_enc, tap_out.ymax - tap_out.ymin + 2*hv_enc),layer=hvi_layer)) + hvi.move((tap_out.xmin - hv_enc, tap_out.ymin - hv_enc)) + + # drawing nwell and outer gaurd ring in case of p-diode + if d_type == "p": + + if type == "sky130_fd_pr__diode_pd2nw_11v0": + nwell_enc = 0.34 + + nwell = c_inst.add_ref(gf.components.rectangle(size=(tap_out.xmax - tap_out.xmin + 2*nwell_enc, tap_out.ymax - tap_out.ymin + 2*nwell_enc),layer=nwell_layer)) + nwell.move((tap_out.xmin - nwell_enc, tap_out.ymin - nwell_enc)) + + gr_in = c_temp.add_ref(gf.components.rectangle(size = (c_inst.xmax-c_inst.xmin + 2*diff_tap_spacing,c_inst.ymax - c_inst.ymin + 2*diff_tap_spacing ) + , layer= tap_layer)) + gr_in.move((c_inst.xmin - diff_tap_spacing, c_inst.ymin - diff_tap_spacing)) + gr_out = c_temp.add_ref(gf.components.rectangle(size=(gr_in.xmax - gr_in.xmin + 2*grw, gr_in.ymax - gr_in.ymin + 2*grw),layer=tap_layer)) + gr_out.move((gr_in.xmin - grw, gr_in.ymin - grw)) + gr = c.add_ref(gf.geometry.boolean(A=gr_out, B=gr_in , operation= "A-B", layer=tap_layer)) + + gr_li = c.add_ref(gf.geometry.boolean(A=gr_out, B=gr_in , operation= "A-B", layer=li_layer)) + + g_psdm_in = c.add_ref(gf.components.rectangle(size=(gr_in.xmax - gr_in.xmin - 2*npsd_enc, gr_in.ymax - gr_in.ymin - 2*npsd_enc),layer=psdm_layer)) + g_psdm_in.move((gr_in.xmin + npsd_enc, gr_in.ymin + npsd_enc)) + g_psdm_out = c.add_ref(gf.components.rectangle(size=(gr_out.xmax - gr_out.xmin + 2*npsd_enc, gr_out.ymax - gr_out.ymin + 2*npsd_enc),layer=psdm_layer)) + g_psdm_out.move((gr_out.xmin - npsd_enc, gr_out.ymin - npsd_enc)) + + + if grw < con_size[0] + 2*t_con_enc[0] : + g_con_range = (gr_in.ymin , gr_in.ymax ) + else : + g_con_range = (gr_out.ymin , gr_out.ymax ) + + g_licon_u = c.add_ref(via_generator(x_range=(gr_in.xmin + 0.17, gr_in.xmax-0.17),y_range=(gr_in.ymax,gr_out.ymax),via_enclosure=t_con_enc + , via_layer=licon_layer,via_size=con_size,via_spacing=con_spacing)) + + g_licon_d = c.add_ref(via_generator(x_range=(gr_in.xmin + 0.17, gr_in.xmax-0.17),y_range=(gr_out.ymin,gr_in.ymin),via_enclosure=t_con_enc + , via_layer=licon_layer,via_size=con_size,via_spacing=con_spacing)) + + g_licon_l = c.add_ref(via_generator(x_range=(gr_out.xmin, gr_in.xmin),y_range=g_con_range,via_enclosure=t_con_enc + , via_layer=licon_layer,via_size=con_size,via_spacing=con_spacing)) + + g_licon_r = c.add_ref(via_generator(x_range=(gr_in.xmax, gr_out.xmax),y_range=g_con_range,via_enclosure=t_con_enc + , via_layer=licon_layer,via_size=con_size,via_spacing=con_spacing)) + + + if type == "sky130_fd_pr__diode_pd2nw_11v0": + hvi = c.add_ref(gf.components.rectangle(size=(gr_out.xmax - gr_out.xmin + 2*hv_enc, gr_out.ymax - gr_out.ymin + 2*hv_enc),layer=hvi_layer)) + hvi.move((gr_out.xmin - hv_enc, gr_out.ymin - hv_enc)) + + + + + c.add_ref(c_inst) + + c.write_gds("diode_temp.gds") + layout.read("diode_temp.gds") + cell_name = "sky_diode_dev" + + + return layout.cell(cell_name) + diff --git a/sky130/cells/klayout/pymacros/cells/draw_fet.py b/sky130/cells/klayout/pymacros/cells/draw_fet.py new file mode 100644 index 000000000..a636d6533 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/draw_fet.py @@ -0,0 +1,957 @@ +# Copyright 2022 Skywater 130nm pdk development +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +######################################################################################################################## +## Mosfets Pcells Generators for Klayout of skywater130 +######################################################################################################################## + +from math import ceil, floor +import numpy as np + +import gdsfactory as gf +from gdsfactory.types import Float2, LayerSpec +from .via_generator import * +from .layers_def import * + + +#@gf.cell +def draw_nfet( + layout , + l : float = 0.15, + w : float = 0.42, + sd_con_col : int = 1, + inter_sd_l : float = 0.3,#0.21 , + nf : int = 1, + grw : float = 0.17 , + type = "sky130_fd_pr__nfet_01v8", + bulk = "None", + con_bet_fin : int = 1, + gate_con_pos = "alternating", + interdig : int = 0, + patt = "", + #n = 1 + + +) : #-> gf.Component: + + ''' + Retern nfet + + Args: + layout : layout object + l : Float of gate length + w : Float of gate width + sd_l : Float of source and drain diffusion length + inter_sd_l : Float of source and drain diffusion length between fingers + nf : integer of number of fingers + M : integer of number of multipliers + grw : gaurd ring width when enabled + type : string of the device type + bulk : String of bulk connection type (None, Bulk Tie, Guard Ring) + con_bet_fin : boolean of having contacts for diffusion between fingers + gate_con_pos : string of choosing the gate contact position (bottom, top, alternating ) + + ''' + # used layers and dimensions + + end_cap: float = 0.2 + diff_tap_spacing : float = 0.32 + poly_tap_spacing : float = 0.27 + + diff_nsdm_enc : float = 0.125 + tap_psdm_enc : float = 0.125 + + + gate_npc_ext = 0.11 + npc_spacing = 0.27 + + + gate_lvt_enc : float = 0.18 + + + hv_enclosing : float = 0.185 + + + areaid_lvn_enc : float = 0.1 + + #m1_m1lic_sp = 0.28+ mcon_enc[0] - end_cap + + licon_size = (0.17,0.17) + licon_spacing = (0.19,0.19) + licon_dt_enc = (0.04,0.06) + + licon_p_enc = (0.05,0.08) + + + sd_l_con = ((sd_con_col)*licon_size[0]) + ((sd_con_col-1)*licon_spacing[0]) + 2*licon_dt_enc[0] + sd_l = sd_l_con + 0.05 + + # gds components to store a single instance and the generated device + c = gf.Component("sky_nfet_dev") + + c_inst = gf.Component("dev_temp") + + # generating sd diffusion + + + if interdig == 1 and nf >1 and nf != len(patt) and patt !="": + nf = len(patt) + + l_d = sd_l + nf*l + (nf-1)*inter_sd_l + sd_l # diffution total length + rect_d = gf.components.rectangle(size = (l_d,w), layer= diff_layer) + sd_diff = c_inst.add_ref(rect_d) + + # generatin sd contacts + + sd_con = via_stack(x_range = (0,sd_l),y_range=(0,w),base_layer=diff_layer,metal_level=1) + c_inst.add_array(component=sd_con,columns=2,rows=1,spacing=(sd_l+ nf*l + (nf-1)*inter_sd_l,0)) + + + + if con_bet_fin == 1 and nf>1: + inter_sd_con = via_stack(x_range = (sd_l + l,sd_l + l+ inter_sd_l),y_range=(0,w),base_layer=diff_layer,metal_level=1) + c_inst.add_array(component=inter_sd_con,columns=nf-1,rows=1,spacing=(l+inter_sd_l,0)) + + + + # generating poly + + if (l <= licon_size[0]+ 2*licon_p_enc[0]) : + pc_x = licon_p_enc[0] +licon_size[0] + licon_p_enc[0] + + else : + pc_x = l + + pc_size = (pc_x, licon_p_enc[1] +licon_size[1] + licon_p_enc[1]) + + c_pc = gf.Component("poly con") + + rect_pc = c_pc.add_ref(gf.components.rectangle(size=pc_size,layer=poly_layer)) + + + poly_con = via_stack(x_range=(rect_pc.xmin, rect_pc.xmax),y_range=(rect_pc.ymin, rect_pc.ymax),base_layer=poly_layer,metal_level=1,li_enc_dir="H") + c_pc.add_ref(poly_con) + + if nf == 1 : + poly = c_inst.add_ref(gf.components.rectangle(size=(l,w+2*end_cap),layer=poly_layer)) + poly.move((sd_l,-end_cap)) + + if gate_con_pos == "bottom": + mv = 0 + nr = 1 + elif gate_con_pos == "top" : + mv = pc_size[1]+ w + 2*end_cap + nr = 1 + else : + mv = 0 + nr = 2 + + pc = c_inst.add_array(component=c_pc,rows=nr,columns=1, spacing=(0,pc_size[1]+w+2*end_cap)) + pc.move((sd_l- ((pc_x - l)/2), -pc_size[1] - end_cap + mv)) + + + + + else : + + w_p1 = end_cap + w + end_cap # poly total width + + if inter_sd_l < (npc_spacing + 2*gate_npc_ext) : + + if gate_con_pos == "alternating": + w_p1 += 0.2 + w_p2 = w_p1 + e_c = 0.2 + else : + w_p2 = w_p1 + licon_p_enc[1] +licon_size[1] + licon_p_enc[1] + npc_spacing + 0.1 + e_c = 0 + + if gate_con_pos == "bottom" : + p_mv = -end_cap - (w_p2-w_p1) + else : + p_mv = -end_cap + + else : + w_p2 = w_p1 + p_mv = -end_cap + e_c = 0 + + rect_p1 = gf.components.rectangle(size = (l,w_p1), layer= poly_layer) + rect_p2 = gf.components.rectangle(size = (l,w_p2), layer= poly_layer) + poly1 = c_inst.add_array(rect_p1, rows= 1 , columns= ceil(nf/2) , spacing= [2*(inter_sd_l+l), 0 ]) + poly1.move((sd_l,-end_cap - e_c)) + + + poly2 = c_inst.add_array(rect_p2, rows= 1 , columns= floor(nf/2) , spacing= [2*(inter_sd_l+l), 0 ]) + poly2.move((sd_l+l+inter_sd_l,p_mv)) + + + #generating poly contacts setups + + if gate_con_pos == "bottom": + mv_1 = 0 + mv_2 = - (w_p2-w_p1) + elif gate_con_pos == "top" : + mv_1 = pc_size[1]+ w_p1 + mv_2 = pc_size[1]+ w_p2 + else : + mv_1 = -e_c + mv_2 = pc_size[1]+ w_p2 + + + nc1 = ceil(nf/2) + nc2 = floor(nf/2) + + pc_spacing = 2*(inter_sd_l + l) + + # generating poly contacts + + pc1 = c_inst.add_array(component=c_pc,rows=1,columns=nc1,spacing=(pc_spacing,0)) + pc1.move((sd_l- ((pc_x - l)/2), -pc_size[1] - end_cap + mv_1)) + + pc2 = c_inst.add_array(component=c_pc,rows=1,columns=nc2,spacing=(pc_spacing,0)) + pc2.move((sd_l- ((pc_x - l)/2) + (inter_sd_l + l), -pc_size[1] - end_cap + mv_2)) + + + + if interdig == 1 : + if nf == len(patt): + pat = list(patt) + nt = [] # list to store the symbols of transistors and thier number nt(number of transistors) + [nt.append(x) for x in pat if x not in nt] + nl = int(len(nt)) + + m2_spacing = 0.14 + via1_size = (0.15,0.15) + via1_enc = (0.085,0.055) + via1_spacing = (0.17,0.17) + via2_size = (0.2,0.2) + via2_enc = (0.085,0.065) + via2_spacing = (0.2,0.2) + + m2_y = via1_size[1]+2*via1_enc[1] + m2 = gf.components.rectangle(size=(sd_diff.xmax - sd_diff.xmin, m2_y),layer=m2_layer) + + if gate_con_pos == "alternating": + pat_o = [] + pat_e = [] + + for i in range(int(nf)): + if i%2 == 0 : + pat_e.append(pat[i]) + else : + pat_o.append(pat[i]) + + nt_o = [] + [nt_o.append(x) for x in pat_o if x not in nt_o] + + nt_e = [] + [nt_e.append(x) for x in pat_e if x not in nt_e] + + nl_b = len(nt_e) + nl_u = len(nt_o) + + m2_y = via2_size[1]+2*via2_enc[1] + m2 = gf.components.rectangle(size=(sd_diff.xmax - sd_diff.xmin, m2_y),layer=m2_layer) + + m2_arrb = c_inst.add_array(component=m2, columns=1, rows=nl_b,spacing= (0, -m2_y - m2_spacing)) + m2_arrb.movey(pc1.ymin - m2_spacing - m2_y) + + m2_arru = c_inst.add_array(component=m2, columns=1, rows=nl_u,spacing= (0, m2_y + m2_spacing)) + m2_arru.movey(pc2.ymax + m2_spacing) + + + for i in range(nl_u): + for j in range(floor(nf/2)): + if pat_o[j] == nt_o[i]: + m1 = c_inst.add_ref(gf.components.rectangle( + size=(poly_con.xmax - poly_con.xmin , ((pc2.ymax + (i+1)*(m2_spacing+ m2_y)) - pc2.ymin )),layer=m1_layer)) + m1.move(((sd_l- ((poly_con.xmax - poly_con.xmin - l)/2) + (2*j +1)*(l+inter_sd_l)) + , (pc2.ymin+0.06))) + via1_dr = via_generator(x_range=(m1.xmin,m1.xmax),y_range=(m2_arru.ymin + i*(m2_y+m2_spacing),m2_arru.ymin + i*(m2_y+m2_spacing)+m2_y) + , via_enclosure=via1_enc,via_layer=via1_layer,via_size=via1_size,via_spacing=via1_spacing) + via1 = c_inst.add_ref(via1_dr) + c_inst.add_label(f"{pat_o[j]}",position=((via1.xmax+via1.xmin)/2, (via1.ymax+via1.ymin)/2),layer=m1_lbl) + + + + for i in range(nl_b): + for j in range(ceil(nf/2)): + if pat_e[j] == nt_e[i]: + + m1 = c_inst.add_ref(gf.components.rectangle( + size=(poly_con.xmax - poly_con.xmin , ((pc1.ymax + (i+1)*(m2_spacing+ m2_y)) -pc1.ymin )),layer=m1_layer)) + m1.move(((sd_l- ((poly_con.xmax - poly_con.xmin - l)/2) + (2*j)*(l+inter_sd_l)), -(m1.ymax - m1.ymin) + (pc1.ymax-0.06))) + via1_dr = via_generator(x_range=(m1.xmin,m1.xmax),y_range=(m2_arrb.ymax - i*(m2_spacing+m2_y) - m2_y,m2_arrb.ymax - i*(m2_spacing+m2_y)) + , via_enclosure=via1_enc,via_layer=via1_layer,via_size=via1_size,via_spacing=via1_spacing) + via1 = c_inst.add_ref(via1_dr) + c_inst.add_label(f"{pat_e[j]}",position=((via1.xmax+via1.xmin)/2, (via1.ymax+via1.ymin)/2),layer=m1_lbl) + + + + m3_x = via2_size[0] + 2*via2_enc[0] + m3_spacing = 0.3 + + for i in range(nl_b): + for j in range(nl_u): + if nt_e[i] == nt_o[j]: + + m2_join_b = c_inst.add_ref(gf.components.rectangle(size=(m2_y+ (i+1)*(m3_spacing+m3_x),m2_y),layer=m2_layer) + .move((m2_arrb.xmin -(m2_y + (i+1)*(m3_spacing+m3_x)),m2_arrb.ymax - i*(m2_spacing+m2_y) - m2_y))) + m2_join_u = c_inst.add_ref(gf.components.rectangle(size=(m2_y+ (i+1)*(m3_spacing+m3_x),m2_y),layer=m2_layer) + .move((m2_arru.xmin -( m2_y + (i+1)*(m3_spacing+m3_x) ),m2_arru.ymin + j*(m2_spacing+m2_y)))) + m3 = c_inst.add_ref(gf.components.rectangle(size=(m3_x, m2_join_u.ymax - m2_join_b.ymin),layer=m1_layer)) + m3.move((m2_join_b.xmin,m2_join_b.ymin)) + via2_dr = via_generator(x_range=(m3.xmin,m3.xmax),y_range=(m2_join_b.ymin,m2_join_b.ymax),via_enclosure=via1_enc,via_size=via1_size + ,via_layer=via1_layer,via_spacing=via1_spacing) + via2 = c_inst.add_array(component=via2_dr,columns=1,rows=2,spacing=(0,m2_join_u.ymin-m2_join_b.ymin)) + + + + elif gate_con_pos == "top" : + + m2_arr = c_inst.add_array(component=m2, columns=1, rows=nl , spacing=(0,m2.ymax-m2.ymin + m2_spacing)) + m2_arr.movey(pc2.ymax + m2_spacing) + + for i in range(nl): + for j in range(int(nf)): + if pat[j] == nt[i]: + m1 = c_inst.add_ref(gf.components.rectangle( + size=(poly_con.xmax - poly_con.xmin , ((pc2.ymax + (i+1)*(m2_spacing+ m2_y)) - ((1-j%2)*pc1.ymin) - (j%2)*pc2.ymin )),layer=m1_layer)) + m1.move(((sd_l- ((poly_con.xmax - poly_con.xmin - l)/2) + j*(l+inter_sd_l)) + , (1-j%2)*(pc1.ymin+0.06) + (j%2)*(pc2.ymin+0.06))) + via1_dr = via_generator(x_range=(m1.xmin,m1.xmax),y_range=(m2_arr.ymin + i*(m2_spacing+m2_y),m2_arr.ymin + i*(m2_spacing+m2_y)+m2_y) + , via_enclosure=via1_enc,via_layer=via1_layer,via_size=via1_size,via_spacing=via1_spacing) + via1 = c_inst.add_ref(via1_dr) + c_inst.add_label(f"{pat[j]}",position=((via1.xmax+via1.xmin)/2, (via1.ymax+via1.ymin)/2),layer=m1_lbl) + + + + elif gate_con_pos == "bottom" : + + m2_arr = c_inst.add_array(component=m2, columns=1, rows=nl , spacing=(0,-m2_y - m2_spacing)) + m2_arr.movey(pc2.ymin - m2_spacing - m2_y) + + for i in range(nl): + for j in range(int(nf)): + if pat[j] == nt[i]: + + m1 = c_inst.add_ref(gf.components.rectangle( + size=(poly_con.xmax - poly_con.xmin , ((pc1.ymax + (i+1)*(m2_spacing+ m2_y)) - (j%2)*pc1.ymin - (1-j%2)*pc2.ymin)),layer=m1_layer)) + m1.move(((sd_l- ((poly_con.xmax - poly_con.xmin - l)/2) + j*(l+inter_sd_l)), -(m1.ymax - m1.ymin) + (1-j%2)*(pc1.ymax-0.06)+ (j%2)*(pc2.ymax-0.06))) + via1_dr = via_generator(x_range=(m1.xmin,m1.xmax),y_range=(m2_arr.ymax - i*(m2_spacing+m2_y) -m2_y,m2_arr.ymax - i*(m2_spacing+m2_y) ) + , via_enclosure=via1_enc,via_layer=via1_layer,via_size=via1_size,via_spacing=via1_spacing) + via1 = c_inst.add_ref(via1_dr) + c_inst.add_label(f"{pat[j]}",position=((via1.xmax+via1.xmin)/2, (via1.ymax+via1.ymin)/2),layer=m1_lbl) + + + + + + + # generating bulk + if bulk == "None": + nsdm = c_inst.add_ref(gf.components.rectangle(size=(l_d+ 2*diff_nsdm_enc, w+ 2*diff_nsdm_enc),layer= nsdm_layer)) + nsdm.move((-diff_nsdm_enc,-diff_nsdm_enc)) + + if type=="sky130_fd_pr__nfet_g5v0d10v5" or type== "sky130_fd_pr__nfet_05v0_nvt" or type == "sky130_fd_pr__nfet_03v3_nvt": + hvntm = c_inst.add_ref(gf.components.rectangle(size=(l_d+2*hv_enclosing,w+2*hv_enclosing),layer=hvntm_layer)) + hvntm.move((sd_diff.xmin - hv_enclosing, sd_diff.ymin- hv_enclosing)) + + + elif bulk == "bulk tie": + rect_bulk = c_inst.add_ref(gf.components.rectangle(size=(sd_l*1.5,w),layer=tap_layer)) + rect_bulk.connect("e1",destination=sd_diff.ports["e3"]) + nsdm = c_inst.add_ref(gf.components.rectangle(size=(sd_diff.xmax - sd_diff.xmin +diff_nsdm_enc,w + 2*diff_nsdm_enc),layer=nsdm_layer)) + nsdm.move((-diff_nsdm_enc,-diff_nsdm_enc)) + psdm = c_inst.add_ref(gf.components.rectangle(size=(rect_bulk.xmax - rect_bulk.xmin +tap_psdm_enc, w+ 2*tap_psdm_enc), layer= psdm_layer)) + psdm.connect("e1",destination = nsdm.ports["e3"]) + + bulk_con = via_stack(x_range= (rect_bulk.xmin+0.1,rect_bulk.xmax-0.1),y_range=(rect_bulk.ymin,rect_bulk.ymax),base_layer=tap_layer,metal_level=0) + c_inst.add_ref(bulk_con) + + + if type=="sky130_fd_pr__nfet_g5v0d10v5" or type== "sky130_fd_pr__nfet_05v0_nvt" or type == "sky130_fd_pr__nfet_03v3_nvt": + hvntm = c_inst.add_ref(gf.components.rectangle(size=(l_d+hv_enclosing,w+2*hv_enclosing),layer=hvntm_layer)) + hvntm.move((sd_diff.xmin - hv_enclosing, sd_diff.ymin- hv_enclosing)) + + + + + + elif bulk == "Gaurd Ring": + + nsdm = c_inst.add_ref(gf.components.rectangle(size=(l_d+ 2*diff_nsdm_enc, w+ 2*diff_nsdm_enc),layer= nsdm_layer)) + nsdm.move((-diff_nsdm_enc,-diff_nsdm_enc)) + c.add_ref(c_inst) + + c_temp = gf.Component("temp_store") + rect_bulk_in = c_temp.add_ref(gf.components.rectangle(size=((c_inst.xmax - c_inst.xmin) + 2*diff_tap_spacing, + (c_inst.ymax - c_inst.ymin) + 2*poly_tap_spacing ) + , layer= tap_layer)) + rect_bulk_in.move((c_inst.xmin -diff_tap_spacing,c_inst.ymin - poly_tap_spacing)) + rect_bulk_out = c_temp.add_ref(gf.components.rectangle(size=((rect_bulk_in.xmax - rect_bulk_in.xmin) + 2*grw,(rect_bulk_in.ymax - rect_bulk_in.ymin) + 2*grw ) + , layer= tap_layer)) + rect_bulk_out.move((rect_bulk_in.xmin - grw , rect_bulk_in.ymin -grw )) + B = c.add_ref(gf.geometry.boolean(A= rect_bulk_out , B = rect_bulk_in , operation= "A-B", layer= tap_layer) ) + + psdm_in = c_temp.add_ref(gf.components.rectangle(size=((rect_bulk_in.xmax - rect_bulk_in.xmin) - 2*tap_psdm_enc, (rect_bulk_in.ymax - rect_bulk_in.ymin) - 2*tap_psdm_enc ) + , layer= psdm_layer)) + psdm_in.move((rect_bulk_in.xmin + tap_psdm_enc, rect_bulk_in.ymin + tap_psdm_enc)) + psdm_out = c_temp.add_ref(gf.components.rectangle(size=((rect_bulk_out.xmax - rect_bulk_out.xmin) + 2*tap_psdm_enc, (rect_bulk_out.ymax - rect_bulk_out.ymin) + 2*tap_psdm_enc ) + , layer= nsdm_layer)) + psdm_out.move((rect_bulk_out.xmin - tap_psdm_enc, rect_bulk_out.ymin - tap_psdm_enc)) + psdm = c.add_ref(gf.geometry.boolean(A= psdm_out , B = psdm_in , operation= "A-B", layer= psdm_layer) ) + + + + # generating contacts + + + ring_con_bot = c.add_ref(via_generator(x_range=(rect_bulk_in.xmin + 0.17,rect_bulk_in.xmax-0.17),y_range=(rect_bulk_out.ymin,rect_bulk_in.ymin) + , via_enclosure=licon_dt_enc, via_layer=licon_layer,via_size=licon_size,via_spacing=licon_spacing)) + + ring_con_up = c.add_ref(via_generator(x_range=(rect_bulk_in.xmin+0.17,rect_bulk_in.xmax-0.17),y_range=(rect_bulk_in.ymax,rect_bulk_out.ymax) + , via_enclosure=licon_dt_enc, via_layer=licon_layer,via_size=licon_size,via_spacing=licon_spacing)) + + ring_con_r = c.add_ref(via_generator(x_range=(rect_bulk_out.xmin,rect_bulk_in.xmin),y_range=(rect_bulk_in.ymin+0.17,rect_bulk_in.ymax-0.17) + , via_enclosure=licon_dt_enc, via_layer=licon_layer,via_size=licon_size,via_spacing=licon_spacing)) + + ring_con_l = c.add_ref(via_generator(x_range=(rect_bulk_in.xmax,rect_bulk_out.xmax),y_range=(rect_bulk_in.ymin+0.17,rect_bulk_in.ymax-0.17) + , via_enclosure=licon_dt_enc, via_layer=licon_layer,via_size=licon_size,via_spacing=licon_spacing)) + + tap_li_in = c_temp.add_ref(gf.components.rectangle(size=((l_d ) + 2*diff_tap_spacing, + (c_inst.ymax - c_inst.ymin) + 2*poly_tap_spacing ) + , layer= li_layer)) + tap_li_in.move((-diff_tap_spacing,c_inst.ymin - poly_tap_spacing)) + tap_li_out = c_temp.add_ref(gf.components.rectangle(size=((rect_bulk_in.xmax - rect_bulk_in.xmin) + 2*grw,(rect_bulk_in.ymax - rect_bulk_in.ymin) + 2*grw ) + , layer= li_layer)) + tap_li_out.move((rect_bulk_in.xmin - grw , rect_bulk_in.ymin -grw )) + li = c.add_ref(gf.geometry.boolean(A= rect_bulk_out , B = rect_bulk_in , operation= "A-B", layer= li_layer) ) + + + + # generating hvi for high voltage + if type=="sky130_fd_pr__nfet_g5v0d10v5" or type== "sky130_fd_pr__nfet_05v0_nvt" or type == "sky130_fd_pr__nfet_03v3_nvt": + hvi = c.add_ref(gf.components.rectangle(size=(rect_bulk_out.xmax-rect_bulk_out.xmin + 2*hv_enclosing + , rect_bulk_out.ymax - rect_bulk_out.ymin + 2*hv_enclosing),layer=hvi_layer)) + hvi.move((rect_bulk_out.xmin-hv_enclosing, rect_bulk_out.ymin-hv_enclosing)) + + + hvntm = c_inst.add_ref(gf.components.rectangle(size=(l_d+2*hv_enclosing,w+2*hv_enclosing),layer=hvntm_layer)) + hvntm.move((sd_diff.xmin - hv_enclosing, sd_diff.ymin- hv_enclosing)) + + + + if bulk != "Gaurd Ring": + c.add_ref(c_inst) + + + # generating hvi and hvntm for high voltage + if type=="sky130_fd_pr__nfet_g5v0d10v5" or type== "sky130_fd_pr__nfet_05v0_nvt" or type == "sky130_fd_pr__nfet_03v3_nvt" : + hvi = c.add_ref(gf.components.rectangle(size=(c_inst.xmax-c_inst.xmin + 2*hv_enclosing + , (c_inst.ymax - c_inst.ymin )+ 2*hv_enclosing),layer=hvi_layer)) + hvi.move((c_inst.xmin-hv_enclosing, c_inst.ymin-hv_enclosing)) + + + + + if type == "sky130_fd_pr__nfet_01v8_lvt": + lvt = c_inst.add_ref(gf.components.rectangle(size= (nf*l + (nf-1)*inter_sd_l + 2*gate_lvt_enc, w + 2*gate_lvt_enc) + , layer= lvtn_layer)) + lvt.move((sd_l - gate_lvt_enc,-gate_lvt_enc)) + + if type == "sky130_fd_pr__nfet_03v3_nvt" or type == "sky130_fd_pr__nfet_05v0_nvt": + + nvt = c_inst.add_ref(gf.components.rectangle(size= (nf*l + (nf-1)*inter_sd_l + 2*gate_lvt_enc, w + 2*gate_lvt_enc) + , layer= lvtn_layer)) + nvt.move((sd_l - gate_lvt_enc,-gate_lvt_enc)) + + if type == "sky130_fd_pr__nfet_03v3_nvt" : + areaid_lvn = gf.components.rectangle(size=(l+2*areaid_lvn_enc,w+2*areaid_lvn_enc),layer=areaid_lvn_layer) + areaid_lvn_arr = c_inst.add_array(component=areaid_lvn,columns=nf,rows=1,spacing=[l+inter_sd_l,0]) + areaid_lvn_arr.move((sd_l-areaid_lvn_enc , sd_diff.ymin - areaid_lvn_enc)) + + + # creating layout and cell in klayout + c.write_gds(f"nfet_temp.gds") + layout.read(f"nfet_temp.gds") + cell_name = "sky_nfet_dev" + + + return layout.cell(cell_name) + #return c + + +#@gf.cell +def draw_pfet( + layout , + l : float = 0.15, + w : float = 0.42, + sd_con_col : int = 1, + inter_sd_l : float = 0.5,#0.21 , + nf : int = 5, + grw : float = 0.17 , + type = "sky130_fd_pr__pfet_01v8", + bulk = "None", + con_bet_fin : int = 1, + gate_con_pos = "alternating", + interdig : int = 1, + patt = "", + #n = 1 + + +) -> gf.Component: + + ''' + Retern pfet + + Args: + layout : layout object + l : Float of gate length + w : Float of gate width + sd_con_col : integer of number of contacts columns contained in source and drain area + inter_sd_l : Float of source and drain diffusion length between fingers + nf : integer of number of fingers + M : integer of number of multipliers + grw : gaurd ring width when enabled + type : string of the device type + bulk : String of bulk connection type (None, Bulk Tie, Guard Ring) + con_bet_fin : boolean of having contacts for diffusion between fingers + gate_con_pos : string of choosing the gate contact position (bottom, top, alternating ) + + + ''' + + # used layers and dimensions + + end_cap: float = 0.2 # may be increases to solve the met1 drc prob + diff_tap_spacing : float = 0.32 + poly_tap_spacing : float = 0.27 + + diff_psdm_enc : float = 0.125 + tap_nsdm_enc : float = 0.125 + + nwell_enclosing : float = 0.18 + + if type == "sky130_fd_pr__pfet_g5v0d10v5" : + nwell_enclosing = 0.34 + + + gate_npc_ext = 0.11 + npc_spacing = 0.27 + + + gate_lvt_enc : float = 0.18 + + gate_hvt_enc : float = 0.18 + + licon_size = (0.17,0.17) + licon_spacing = (0.19,0.19) + licon_dt_enc = (0.04,0.06) + + licon_t_enc = 0.12 + + licon_p_enc = (0.05,0.08) + + + #m1_m1lic_sp = 0.28+ mcon_enc[0] - end_cap + + sd_l_con = ((sd_con_col)*licon_size[0]) + ((sd_con_col-1)*licon_spacing[0]) + 2*licon_dt_enc[0] + sd_l = sd_l_con + 0.05 + + + + # gds components to store a single instance and the generated device + c = gf.Component("sky_pfet_dev") + + c_inst = gf.Component("dev_temp") + + + + # generating sd diffusion + + if interdig == 1 and nf >1 and nf != len(patt) and patt !="": + nf = len(patt) + + l_d = sd_l + nf*l + (nf-1)*inter_sd_l + sd_l # diffution total length + rect_d = gf.components.rectangle(size = (l_d,w), layer= diff_layer) + sd_diff = c_inst.add_ref(rect_d) + + + # generatin sd contacts + + sd_con = via_stack(x_range = (0,sd_l),y_range=(0,w),base_layer=diff_layer,metal_level=1) + c_inst.add_array(component=sd_con,columns=2,rows=1,spacing=(sd_l+ nf*l + (nf-1)*inter_sd_l,0)) + + if con_bet_fin == 1 and nf>1: + inter_sd_con = via_stack(x_range = (sd_l + l,sd_l + l+ inter_sd_l),y_range=(0,w),base_layer=diff_layer,metal_level=1) + c_inst.add_array(component=inter_sd_con,columns=nf-1,rows=1,spacing=(l+inter_sd_l,0)) + + + + # generating poly + + if (l <= licon_size[0] +2*licon_p_enc[0]) : + pc_x = licon_p_enc[0] +licon_size[0] + licon_p_enc[0] + + else : + pc_x = l + + pc_size = (pc_x, licon_p_enc[1] +licon_size[1] + licon_p_enc[1]) + + c_pc = gf.Component("poly con") + + rect_pc = c_pc.add_ref(gf.components.rectangle(size=pc_size,layer=poly_layer)) + + + poly_con = via_stack(x_range=(rect_pc.xmin, rect_pc.xmax),y_range=(rect_pc.ymin, rect_pc.ymax),base_layer=poly_layer,metal_level=1,li_enc_dir="H") + c_pc.add_ref(poly_con) + + if nf == 1 : + poly = c_inst.add_ref(gf.components.rectangle(size=(l,w+2*end_cap),layer=poly_layer)) + poly.move((sd_l,-end_cap)) + + if gate_con_pos == "bottom": + mv = 0 + nr = 1 + elif gate_con_pos == "top" : + mv = pc_size[1]+ w + 2*end_cap + nr = 1 + else : + mv = 0 + nr = 2 + + pc = c_inst.add_array(component=c_pc,rows=nr,columns=1, spacing=(0,pc_size[1]+w+2*end_cap)) + pc.move((sd_l- ((pc_x - l)/2), -pc_size[1] - end_cap + mv)) + + + + else : + + w_p1 = end_cap + w + end_cap # poly total width + + if inter_sd_l < (npc_spacing + 2*gate_npc_ext) : + + if gate_con_pos == "alternating": + w_p1 += 0.2 + w_p2 = w_p1 + e_c = 0.2 + else : + w_p2 = w_p1 + licon_p_enc[1] +licon_size[1] + licon_p_enc[1] + npc_spacing + 0.1 + e_c = 0 + + if gate_con_pos == "bottom" : + p_mv = -end_cap - (w_p2-w_p1) + else : + p_mv = -end_cap + + else : + w_p2 = w_p1 + p_mv = -end_cap + e_c = 0 + + rect_p1 = gf.components.rectangle(size = (l,w_p1), layer= poly_layer) + rect_p2 = gf.components.rectangle(size = (l,w_p2), layer= poly_layer) + poly1 = c_inst.add_array(rect_p1, rows= 1 , columns= ceil(nf/2) , spacing= [2*(inter_sd_l+l), 0 ]) + poly1.move((sd_l,-end_cap - e_c)) + + + poly2 = c_inst.add_array(rect_p2, rows= 1 , columns= floor(nf/2) , spacing= [2*(inter_sd_l+l), 0 ]) + poly2.move((sd_l+l+inter_sd_l,p_mv)) + + + #generating poly contacts setups + + if gate_con_pos == "bottom": + mv_1 = 0 + mv_2 = - (w_p2-w_p1) + elif gate_con_pos == "top" : + mv_1 = pc_size[1]+ w_p1 + mv_2 = pc_size[1]+ w_p2 + else : + mv_1 = -e_c + mv_2 = pc_size[1]+ w_p2 + + + nc1 = ceil(nf/2) + nc2 = floor(nf/2) + + pc_spacing = 2*(inter_sd_l + l) + + # generating poly contacts + + pc1 = c_inst.add_array(component=c_pc,rows=1,columns=nc1,spacing=(pc_spacing,0)) + pc1.move((sd_l- ((pc_x - l)/2), -pc_size[1] - end_cap + mv_1)) + + pc2 = c_inst.add_array(component=c_pc,rows=1,columns=nc2,spacing=(pc_spacing,0)) + pc2.move((sd_l- ((pc_x - l)/2) + (inter_sd_l + l), -pc_size[1] - end_cap + mv_2)) + + + + if interdig == 1 : + if nf == len(patt) : + pat = list(patt) + nt = [] # list to store the symbols of transistors and thier number nt(number of transistors) + [nt.append(x) for x in pat if x not in nt] + nl = len(nt) + + m2_spacing = 0.14 + via1_size = (0.15,0.15) + via1_enc = (0.085,0.055) + via1_spacing = (0.17,0.17) + via2_size = (0.2,0.2) + via2_enc = (0.085,0.065) + via2_spacing = (0.2,0.2) + + m2_y = via1_size[1]+2*via1_enc[1] + m2 = gf.components.rectangle(size=(sd_diff.xmax - sd_diff.xmin, m2_y),layer=m2_layer) + + if gate_con_pos == "alternating": + pat_o = [] + pat_e = [] + + for i in range(int(nf)): + if i%2 == 0 : + pat_e.append(pat[i]) + else : + pat_o.append(pat[i]) + + nt_o = [] + [nt_o.append(x) for x in pat_o if x not in nt_o] + + nt_e = [] + [nt_e.append(x) for x in pat_e if x not in nt_e] + + nl_b = len(nt_e) + nl_u = len(nt_o) + + m2_y = via2_size[1]+2*via2_enc[1] + m2 = gf.components.rectangle(size=(sd_diff.xmax - sd_diff.xmin, m2_y),layer=m2_layer) + + m2_arrb = c_inst.add_array(component=m2, columns=1, rows=nl_b,spacing= (0, -m2_y - m2_spacing)) + m2_arrb.movey(pc1.ymin - m2_spacing - m2_y) + + m2_arru = c_inst.add_array(component=m2, columns=1, rows=nl_u,spacing= (0, m2_y + m2_spacing)) + m2_arru.movey(pc2.ymax + m2_spacing) + + + for i in range(nl_u): + for j in range(floor(nf/2)): + if pat_o[j] == nt_o[i]: + m1 = c_inst.add_ref(gf.components.rectangle( + size=(poly_con.xmax - poly_con.xmin , ((pc2.ymax + (i+1)*(m2_spacing+ m2_y)) - pc2.ymin )),layer=m1_layer)) + m1.move(((sd_l- ((poly_con.xmax - poly_con.xmin - l)/2) + (2*j +1)*(l+inter_sd_l)) + , (pc2.ymin+0.06))) + via1_dr = via_generator(x_range=(m1.xmin,m1.xmax),y_range=(m2_arru.ymin + i*(m2_y+m2_spacing),m2_arru.ymin + i*(m2_y+m2_spacing)+m2_y) + , via_enclosure=via1_enc,via_layer=via1_layer,via_size=via1_size,via_spacing=via1_spacing) + via1 = c_inst.add_ref(via1_dr) + c_inst.add_label(f'{pat_o[j]}',position=((via1.xmax+via1.xmin)/2, (via1.ymax+via1.ymin)/2),layer=m1_lbl) + #c_inst.add_label(f'G_{pat_o[j]}{n}',position=((via1.xmax+via1.xmin)/2, (pc2.ymin + pc2.ymax)/2),layer=m1_lbl) + + + + for i in range(nl_b): + for j in range(ceil(nf/2)): + if pat_e[j] == nt_e[i]: + + m1 = c_inst.add_ref(gf.components.rectangle( + size=(poly_con.xmax - poly_con.xmin , ((pc1.ymax + (i+1)*(m2_spacing+ m2_y)) -pc1.ymin )),layer=m1_layer)) + m1.move(((sd_l- ((poly_con.xmax - poly_con.xmin - l)/2) + (2*j)*(l+inter_sd_l)), -(m1.ymax - m1.ymin) + (pc1.ymax-0.06))) + via1_dr = via_generator(x_range=(m1.xmin,m1.xmax),y_range=(m2_arrb.ymax - i*(m2_spacing+m2_y) - m2_y,m2_arrb.ymax - i*(m2_spacing+m2_y)) + , via_enclosure=via1_enc,via_layer=via1_layer,via_size=via1_size,via_spacing=via1_spacing) + via1 = c_inst.add_ref(via1_dr) + c_inst.add_label(f'{pat_e[j]}',position=((via1.xmax+via1.xmin)/2, (via1.ymax+via1.ymin)/2),layer=m1_lbl) + #c_inst.add_label(f'G_{pat_e[j]}{n}',position=((via1.xmax+via1.xmin)/2, (pc1.ymin + pc1.ymax)/2),layer=m1_lbl) + + + m3_x = via2_size[0] + 2*via2_enc[0] + m3_spacing = 0.3 + + for i in range(nl_b): + for j in range(nl_u): + if nt_e[i] == nt_o[j]: + + m2_join_b = c_inst.add_ref(gf.components.rectangle(size=(m2_y+ (i+1)*(m3_spacing+m3_x),m2_y),layer=m2_layer) + .move((m2_arrb.xmin -(m2_y + (i+1)*(m3_spacing+m3_x)),m2_arrb.ymax - i*(m2_spacing+m2_y) - m2_y))) + m2_join_u = c_inst.add_ref(gf.components.rectangle(size=(m2_y+ (i+1)*(m3_spacing+m3_x),m2_y),layer=m2_layer) + .move((m2_arru.xmin -( m2_y + (i+1)*(m3_spacing+m3_x) ),m2_arru.ymin + j*(m2_spacing+m2_y)))) + m3 = c_inst.add_ref(gf.components.rectangle(size=(m3_x, m2_join_u.ymax - m2_join_b.ymin),layer=m1_layer)) + m3.move((m2_join_b.xmin,m2_join_b.ymin)) + via2_dr = via_generator(x_range=(m3.xmin,m3.xmax),y_range=(m2_join_b.ymin,m2_join_b.ymax),via_enclosure=via1_enc,via_size=via1_size + ,via_layer=via1_layer,via_spacing=via1_spacing) + via2 = c_inst.add_array(component=via2_dr,columns=1,rows=2,spacing=(0,m2_join_u.ymin-m2_join_b.ymin)) + + + + elif gate_con_pos == "top" : + + m2_arr = c_inst.add_array(component=m2, columns=1, rows=nl , spacing=(0,m2.ymax-m2.ymin + m2_spacing)) + m2_arr.movey(pc2.ymax + m2_spacing) + + for i in range(nl): + for j in range(int(nf)): + if pat[j] == nt[i]: + m1 = c_inst.add_ref(gf.components.rectangle( + size=(poly_con.xmax - poly_con.xmin , ((pc2.ymax + (i+1)*(m2_spacing+ m2_y)) - ((1-j%2)*pc1.ymin) - (j%2)*pc2.ymin )),layer=m1_layer)) + m1.move(((sd_l- ((poly_con.xmax - poly_con.xmin - l)/2) + j*(l+inter_sd_l)) + , (1-j%2)*(pc1.ymin+0.06) + (j%2)*(pc2.ymin+0.06))) + via1_dr = via_generator(x_range=(m1.xmin,m1.xmax),y_range=(m2_arr.ymin + i*(m2_spacing+m2_y),m2_arr.ymin + i*(m2_spacing+m2_y)+m2_y) + , via_enclosure=via1_enc,via_layer=via1_layer,via_size=via1_size,via_spacing=via1_spacing) + via1 = c_inst.add_ref(via1_dr) + c_inst.add_label(f'{pat[j]}',position=((via1.xmax+via1.xmin)/2, (via1.ymax+via1.ymin)/2),layer=m1_lbl) + #c_inst.add_label(f'G_{pat[j]}{n}',position=((via1.xmax+via1.xmin)/2, (pc2.ymin + pc2.ymax)/2),layer=m1_lbl) + + + elif gate_con_pos == "bottom" : + + m2_arr = c_inst.add_array(component=m2, columns=1, rows=nl , spacing=(0,-m2_y - m2_spacing)) + m2_arr.movey(pc2.ymin - m2_spacing - m2_y) + + for i in range(nl): + for j in range(int(nf)): + if pat[j] == nt[i]: + + m1 = c_inst.add_ref(gf.components.rectangle( + size=(poly_con.xmax - poly_con.xmin , ((pc1.ymax + (i+1)*(m2_spacing+ m2_y)) - (j%2)*pc1.ymin - (1-j%2)*pc2.ymin)),layer=m1_layer)) + m1.move(((sd_l- ((poly_con.xmax - poly_con.xmin - l)/2) + j*(l+inter_sd_l)), -(m1.ymax - m1.ymin) + (1-j%2)*(pc1.ymax-0.06)+ (j%2)*(pc2.ymax-0.06))) + via1_dr = via_generator(x_range=(m1.xmin,m1.xmax),y_range=(m2_arr.ymax - i*(m2_spacing+m2_y) -m2_y,m2_arr.ymax - i*(m2_spacing+m2_y) ) + , via_enclosure=via1_enc,via_layer=via1_layer,via_size=via1_size,via_spacing=via1_spacing) + via1 = c_inst.add_ref(via1_dr) + c_inst.add_label(f'{pat[j]}',position=((via1.xmax+via1.xmin)/2, (via1.ymax+via1.ymin)/2),layer=m1_lbl) + #c_inst.add_label(f'G_{pat[j]}{n}',position=((via1.xmax+via1.xmin)/2, (pc2.ymin + pc2.ymax)/2),layer=m1_lbl) + + + # generating bulk + if bulk == "None": + psdm = c_inst.add_ref(gf.components.rectangle(size=(l_d+ 2*diff_psdm_enc, w+ 2*diff_psdm_enc),layer= psdm_layer)) + psdm.move((-diff_psdm_enc,-diff_psdm_enc)) + + + elif bulk == "bulk tie": + rect_bulk = c_inst.add_ref(gf.components.rectangle(size=(1.3*sd_l,w),layer=tap_layer)) + rect_bulk.connect("e1",destination=sd_diff.ports["e3"]) + psdm = c_inst.add_ref(gf.components.rectangle(size=(sd_diff.xmax - sd_diff.xmin + diff_psdm_enc,w + 2*diff_psdm_enc),layer=psdm_layer)) + psdm.move((-diff_psdm_enc,-diff_psdm_enc)) + nsdm = c_inst.add_ref(gf.components.rectangle(size=(rect_bulk.xmax - rect_bulk.xmin +tap_nsdm_enc, w+ 2*tap_nsdm_enc), layer= nsdm_layer)) + nsdm.move((rect_bulk.xmin,rect_bulk.ymin - tap_nsdm_enc)) + + bulk_con = via_stack(x_range= (rect_bulk.xmin+0.1,rect_bulk.xmax-0.1),y_range=(rect_bulk.ymin,rect_bulk.ymax),base_layer=tap_layer,metal_level=0) + c_inst.add_ref(bulk_con) + + + + elif bulk == "Gaurd Ring": + + psdm = c_inst.add_ref(gf.components.rectangle(size=(l_d+ 2*diff_psdm_enc, w+ 2*diff_psdm_enc),layer= psdm_layer)) + psdm.move((-diff_psdm_enc,-diff_psdm_enc)) + c.add_ref(c_inst) + + c_temp = gf.Component("temp_store") + rect_bulk_in = c_temp.add_ref(gf.components.rectangle(size=((c_inst.xmax - c_inst.xmin) + 2*diff_tap_spacing, + (c_inst.ymax - c_inst.ymin) + 2*poly_tap_spacing ) + , layer= tap_layer)) + + rect_bulk_in.move((c_inst.xmin-diff_tap_spacing,c_inst.ymin - poly_tap_spacing)) + rect_bulk_out = c_temp.add_ref(gf.components.rectangle(size=((rect_bulk_in.xmax - rect_bulk_in.xmin) + 2*grw,(rect_bulk_in.ymax - rect_bulk_in.ymin) + 2*grw ) + , layer= tap_layer)) + rect_bulk_out.move((rect_bulk_in.xmin - grw , rect_bulk_in.ymin -grw )) + B = c.add_ref(gf.geometry.boolean(A= rect_bulk_out , B = rect_bulk_in , operation= "A-B", layer= tap_layer) ) + + nsdm_in = c_temp.add_ref(gf.components.rectangle(size=((rect_bulk_in.xmax - rect_bulk_in.xmin) - 2*tap_nsdm_enc, (rect_bulk_in.ymax - rect_bulk_in.ymin) - 2*tap_nsdm_enc ) + , layer= nsdm_layer)) + nsdm_in.move((rect_bulk_in.xmin + tap_nsdm_enc, rect_bulk_in.ymin + tap_nsdm_enc)) + nsdm_out = c_temp.add_ref(gf.components.rectangle(size=((rect_bulk_out.xmax - rect_bulk_out.xmin) + 2*tap_nsdm_enc, (rect_bulk_out.ymax - rect_bulk_out.ymin) + 2*tap_nsdm_enc ) + , layer= nsdm_layer)) + nsdm_out.move((rect_bulk_out.xmin - tap_nsdm_enc, rect_bulk_out.ymin - tap_nsdm_enc)) + nsdm = c.add_ref(gf.geometry.boolean(A= nsdm_out , B = nsdm_in , operation= "A-B", layer= nsdm_layer) ) + + # adding contacts + + if grw < licon_size[0] + 2*licon_t_enc : + g_con_range = (B.ymin , B.ymax ) + else : + g_con_range = (B.ymin , B.ymax ) + + ring_con_bot = c.add_ref(via_generator(x_range=(rect_bulk_in.xmin+0.17,rect_bulk_in.xmax-0.17),y_range=(rect_bulk_out.ymin,rect_bulk_in.ymin) + , via_enclosure=licon_dt_enc, via_layer=licon_layer,via_size=licon_size,via_spacing=licon_spacing)) + + ring_con_up = c.add_ref(via_generator(x_range=(rect_bulk_in.xmin+0.17,rect_bulk_in.xmax-0.17),y_range=(rect_bulk_in.ymax,rect_bulk_out.ymax) + , via_enclosure=licon_dt_enc, via_layer=licon_layer,via_size=licon_size,via_spacing=licon_spacing)) + + ring_con_r = c.add_ref(via_generator(x_range=(rect_bulk_out.xmin,rect_bulk_in.xmin),y_range=g_con_range + , via_enclosure=licon_dt_enc, via_layer=licon_layer,via_size=licon_size,via_spacing=licon_spacing)) + + ring_con_l = c.add_ref(via_generator(x_range=(rect_bulk_in.xmax,rect_bulk_out.xmax),y_range=g_con_range + , via_enclosure=licon_dt_enc, via_layer=licon_layer,via_size=licon_size,via_spacing=licon_spacing)) + + tap_li_in = c_temp.add_ref(gf.components.rectangle(size=((l_d ) + 2*diff_tap_spacing, + (c_inst.ymax - c_inst.ymin) + 2*poly_tap_spacing ) + , layer= li_layer)) + tap_li_in.move((-diff_tap_spacing,c_inst.ymin - poly_tap_spacing)) + tap_li_out = c_temp.add_ref(gf.components.rectangle(size=((rect_bulk_in.xmax - rect_bulk_in.xmin) + 2*grw,(rect_bulk_in.ymax - rect_bulk_in.ymin) + 2*grw ) + , layer= li_layer)) + tap_li_out.move((rect_bulk_in.xmin - grw , rect_bulk_in.ymin -grw )) + li = c.add_ref(gf.geometry.boolean(A= rect_bulk_out , B = rect_bulk_in , operation= "A-B", layer= li_layer) ) + + + # generating nwell + nwell = c.add_ref(gf.components.rectangle(size=(nsdm_out.xmax-nsdm_out.xmin + 2*nwell_enclosing, nsdm_out.ymax-nsdm_out.ymin + 2*nwell_enclosing) + , layer=nwell_layer)) + nwell.move((nsdm_out.xmin - nwell_enclosing, nsdm_out.ymin - nwell_enclosing )) + + + + + + if bulk != "Gaurd Ring": + c.add_ref(c_inst) + + # nwell generation + nwell = c.add_ref(gf.components.rectangle(size=(c_inst.xmax - c_inst.xmin + 2*nwell_enclosing + , (c_inst.ymax-c_inst.ymin) + 2*nwell_enclosing),layer=nwell_layer)) + nwell.move((c_inst.xmin-nwell_enclosing,c_inst.ymin-nwell_enclosing)) + + + if type == "sky130_fd_pr__pfet_01v8_lvt": + lvt = c_inst.add_ref(gf.components.rectangle(size= (nf*l + (nf-1)*inter_sd_l + 2*gate_lvt_enc, w + 2*gate_lvt_enc) + , layer= lvtn_layer)) + lvt.move((sd_l - gate_lvt_enc,-gate_lvt_enc)) + + + if type == "sky130_fd_pr__pfet_01v8_hvt": + hvt = c_inst.add_ref(gf.components.rectangle(size= (nf*l + (nf-1)*inter_sd_l + 2*gate_hvt_enc, w + 2*gate_hvt_enc) + , layer= hvtp_layer)) + hvt.move((sd_l - gate_hvt_enc,-gate_hvt_enc)) + + if type == "sky130_fd_pr__pfet_g5v0d10v5" : + hvi = c.add_ref(gf.components.rectangle(size=(nwell.xmax-nwell.xmin,nwell.ymax-nwell.ymin),layer=hvi_layer)) + hvi.move((nwell.xmin,nwell.ymin)) + + + # creating layout and cell in klayout + c.write_gds(f"pfet_temp.gds") + layout.read(f"pfet_temp.gds") + cell_name = "sky_pfet_dev" + + + return layout.cell(cell_name) + #return c + + +if __name__ == "__main__": + c = draw_pfet() + c.show() + \ No newline at end of file diff --git a/sky130/cells/klayout/pymacros/cells/draw_guard_ring.py b/sky130/cells/klayout/pymacros/cells/draw_guard_ring.py new file mode 100644 index 000000000..d7d8aacae --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/draw_guard_ring.py @@ -0,0 +1,95 @@ +# Copyright 2022 Skywater 130nm pdk development +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +######################################################################################################################## +## Guard Ring Pcells Generators for Klayout of skywater130 +######################################################################################################################## + + +from .via_generator import * +from .globals import * +from .layers_def import * +import gdsfactory as gf + +def draw_gr ( + layout , + in_l : float = 1, + in_w : float = 1, + grw : float = 0.17, + con_lev = "li" +) : + + ''' + layout : layout object + in_l : float of the inner length of the ring + in_w : float of the inner width of the ring + grw : float of the guard ring width + con_lev : connection level of (li, metal1) + + ''' + + con_size = (0.17,0.17) + con_spacing = (0.19, 0.19) + con_enc = (0.12, 0.12) + + c = gf.Component("sky_ring_gen") + c_temp = gf.Component("temp_store") + + inner = c_temp.add_ref(gf.components.rectangle(size=(in_w, in_l), layer=tap_layer)) + outer = c_temp.add_ref(gf.components.rectangle(size=(inner.xmax - inner.xmin + 2*grw , inner.ymax - inner.ymin + 2*grw), layer=tap_layer)) + outer.move((-grw, -grw)) + + gr = c.add_ref(gf.geometry.boolean(A=outer, B=inner , operation="A-B", layer=tap_layer)) + + if con_lev == "li" or con_lev == "metal1": + li = c.add_ref(gf.geometry.boolean(A=outer, B=inner, operation="A-B", layer=li_layer)) + + if grw < con_size[0] + 2*con_enc[0]: + con_range = (inner.xmin, inner.xmax) + else : + con_range = (outer.xmin, outer.xmax) + + licon_l = c.add_ref(via_generator(x_range=(outer.xmin, inner.xmin), y_range=(inner.ymin + 0.17 , inner.ymax - 0.17), via_enclosure=con_enc, via_layer=licon_layer + , via_size=con_size, via_spacing=con_spacing)) + licon_r = c.add_ref(via_generator(x_range=(inner.xmax, outer.xmax), y_range=(inner.ymin + 0.17 , inner.ymax - 0.17), via_enclosure=con_enc, via_layer=licon_layer + , via_size=con_size, via_spacing=con_spacing)) + licon_t = c.add_ref(via_generator(x_range=con_range, y_range=(inner.ymax, outer.ymax), via_enclosure=con_enc, via_layer=licon_layer + , via_size=con_size, via_spacing=con_spacing)) + licon_b = c.add_ref(via_generator(x_range=con_range, y_range=(outer.ymin, inner.ymin), via_enclosure=con_enc, via_layer=licon_layer + , via_size=con_size, via_spacing=con_spacing)) + + + + if con_lev == "metal1" : + m1 = c.add_ref(gf.geometry.boolean(A=outer, B=inner, operation="A-B", layer=m1_layer)) + + mcon_l = c.add_ref(via_generator(x_range=(outer.xmin, inner.xmin), y_range=(inner.ymin + 0.17 , inner.ymax - 0.17), via_enclosure=con_enc, via_layer=mcon_layer + , via_size=con_size, via_spacing=con_spacing)) + mcon_r = c.add_ref(via_generator(x_range=(inner.xmax, outer.xmax), y_range=(inner.ymin + 0.17 , inner.ymax - 0.17), via_enclosure=con_enc, via_layer=mcon_layer + , via_size=con_size, via_spacing=con_spacing)) + mcon_t = c.add_ref(via_generator(x_range=con_range, y_range=(inner.ymax, outer.ymax), via_enclosure=con_enc, via_layer=mcon_layer + , via_size=con_size, via_spacing=con_spacing)) + mcon_b = c.add_ref(via_generator(x_range=con_range, y_range=(outer.ymin, inner.ymin), via_enclosure=con_enc, via_layer=mcon_layer + , via_size=con_size, via_spacing=con_spacing)) + + + + c.write_gds("ring_temp.gds") + layout.read("ring_temp.gds") + cell_name = "sky_ring_gen" + + + + return layout.cell(cell_name) diff --git a/sky130/cells/klayout/pymacros/cells/draw_rf.py b/sky130/cells/klayout/pymacros/cells/draw_rf.py new file mode 100644 index 000000000..5205dbb25 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/draw_rf.py @@ -0,0 +1,83 @@ +# Copyright 2022 Skywater 130nm pdk development +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +######################################################################################################################## +## RF Devices Pcells Generators for Klayout of skywater130 +######################################################################################################################## + + +import pya +import os +from .globals import * +import gdsfactory as gf + + + +gds_p_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),"fixed_devices/rf" ) # parent file path + + + +def draw_rf_mosfet(layout, device_name): + + ''' + drawing rf mosfet devices + ''' + gds_path = f"{gds_p_path}/rf_mosfet" # gds file path + + + if device_name in RF_MOSFET_DEV : + layout.read(f"{gds_path}/{device_name}.gds") + cell_name = device_name + else : + cell_name = device_name + + + return layout.cell(cell_name) + +def draw_rf_bjt(layout, device_name): + ''' + drawing rf mosfet devices + ''' + + gds_path = f"{gds_p_path}/rf_bjt" # gds file path + + + + if device_name in RF_BJT_DEV : + layout.read(f"{gds_path}/{device_name}.gds") + cell_name = device_name + else : + cell_name = device_name + + + return layout.cell(cell_name) + + +def draw_rf_coils(layout, device_name): + ''' + drawing rf coils devices + ''' + + gds_path = f"{gds_p_path}/rf_coils" # gds file path + + + + if device_name in RF_COILS_DEV : + layout.read(f"{gds_path}/{device_name}.gds") + cell_name = device_name + else : + cell_name = device_name + + return layout.cell(cell_name) diff --git a/sky130/cells/klayout/pymacros/cells/draw_vpp.py b/sky130/cells/klayout/pymacros/cells/draw_vpp.py new file mode 100644 index 000000000..865958d8f --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/draw_vpp.py @@ -0,0 +1,41 @@ +# Copyright 2022 Skywater 130nm pdk development +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +######################################################################################################################## +## VPP CAP Pcells Generators for Klayout of skywater130 +######################################################################################################################## + + +import os +from .globals import * +import gdsfactory as gf + + +gds_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),"fixed_devices/VPP" ) + + +def draw_vpp(layout, device_name): + ''' + drawing VPP Capacitors devices + ''' + + if device_name in VPP_CAP_DEV : + layout.read(f"{gds_path}/{device_name}.gds") + cell_name = device_name + else: + cell_name = device_name + return layout.cell(cell_name) + + diff --git a/sky130/cells/klayout/pymacros/cells/fet.py b/sky130/cells/klayout/pymacros/cells/fet.py new file mode 100644 index 000000000..01ea21ac8 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fet.py @@ -0,0 +1,263 @@ +# Copyright 2022 Skywater 130nm pdk development +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +######################################################################################################################## +# MOSFET (PFET) Generator for skywater130 +######################################################################################################################## + +from select import select +import pya +from .draw_fet import * + +fet_01v8_l = 0.15 +fet_g5v0_l = 0.5 + +fet_w = 0.42 + +fet_ld = 0.3 +fet_inter_ld = 0.3 +fet_01v8_grw = 0.17 +pfet_g5v0_grw = 0.3 + +pfet_01v8_lvt_l = 0.35 +nfet_g5v0_nvt_l = 0.9 + + +class pfet(pya.PCellDeclarationHelper): + """ + PMOS Generator for Skywater130 + """ + + def __init__(self): + # Initialize super class. + super(pfet, self).__init__() + + #===================== PARAMETERS DECLARATIONS ===================== + + self.param("con_bet_fin", self.TypeBoolean, "Contact Between Fingers", default=1) + + self.Type_handle = self.param("type", self.TypeList, "Device Type") + self.Type_handle.add_choice("sky130_fd_pr__pfet_01v8", "sky130_fd_pr__pfet_01v8") + self.Type_handle.add_choice("sky130_fd_pr__pfet_01v8_lvt", "sky130_fd_pr__pfet_01v8_lvt") + self.Type_handle.add_choice("sky130_fd_pr__pfet_01v8_hvt", "sky130_fd_pr__pfet_01v8_hvt") + self.Type_handle.add_choice("sky130_fd_pr__pfet_g5v0d10v5", "sky130_fd_pr__pfet_g5v0d10v5") + self.Type_handle = self.param("bulk", self.TypeList, "Bulk Type") + self.Type_handle.add_choice("None", "None") + self.Type_handle.add_choice("bulk tie", "bulk tie") + self.Type_handle.add_choice("Gaurd Ring", "Gaurd Ring") + self.Type_handle = self.param("gate_con_pos", self.TypeList, "Gate Contact Position") + self.Type_handle.add_choice("top", "top") + self.Type_handle.add_choice("bottom", "bottom") + self.Type_handle.add_choice("alternating", "alternating") + + + + self.param("l", self.TypeDouble, "length", default=fet_01v8_l, unit="um") + self.param("w", self.TypeDouble, "Width", default=fet_w, unit="um") + self.param("sd_con_col", self.TypeInt, "Diffusion Contacts Columns", default=1) + self.param("inter_sd_l", self.TypeDouble, "Between Fingers Diffusion Length", default=fet_inter_ld, unit="um") + self.param("nf", self.TypeInt, "Number of Fingers", default=1) + self.param("grw", self.TypeDouble, "Guard Ring Width", default=fet_01v8_grw, unit="um") + self.param("area", self.TypeDouble,"Area", readonly=True, unit="um^2") + self.param("perim", self.TypeDouble,"Perimeter", readonly=True, unit="um") + + self.param("interdig", self.TypeBoolean, "Interdigitation", default=0) + self.param("patt", self.TypeString,"Pattern in case of Interdigitation", default= "") + + #self.param("n", self.TypeInt, "inst_num", default=1) + + def display_text_impl(self): + # Provide a descriptive text for the cell + return "pfet(L=" + ('%.3f' % self.l) + ",W=" + ('%.3f' % self.w) + ")" + + def coerce_parameters_impl(self): + # We employ coerce_parameters_impl to decide whether the handle or the + # numeric parameter has changed (by comparing against the effective + # radius ru) and set ru to the effective radius. We also update the + # numerical value or the shape, depending on which on has not changed. + self.area = self.w * self.l + self.perim = 2*(self.w + self.l) + # w,l must be larger or equal than min. values. + if self.type == "sky130_fd_pr__pfet_g5v0d10v5": + if (self.l) < fet_g5v0_l: + self.l = fet_g5v0_l + if (self.w) < fet_w: + self.w = fet_w + if (self.grw) < pfet_g5v0_grw : + self.grw = pfet_g5v0_grw + else : + if (self.l) < fet_01v8_l: + self.l = fet_01v8_l + if (self.w) < fet_w: + self.w = fet_w + if (self.grw) < fet_01v8_grw : + self.grw = fet_01v8_grw + + if self.type == "sky130_fd_pr__pfet_01v8_lvt": + if (self.l) < pfet_01v8_lvt_l : + self.l = pfet_01v8_lvt_l + else : + if (self.l) < fet_01v8_l : + self.l = fet_01v8_l + + if (self.sd_con_col) < 1 : + self.sd_con_col = 1 + + if (self.inter_sd_l) < fet_inter_ld and self.con_bet_fin == 1: + self.inter_sd_l = fet_inter_ld + elif (self.inter_sd_l) < 0.21 and self.con_bet_fin == 0: + self.inter_sd_l = 0.21 + + if self.interdig == 1 and self.gate_con_pos != "alternating": + self.inter_sd_l = 0.5 + + + + def can_create_from_shape_impl(self): + # Implement the "Create PCell from shape" protocol: we can use any shape which + # has a finite bounding box + return self.shape.is_box() or self.shape.is_polygon() or self.shape.is_path() + + def parameters_from_shape_impl(self): + # Implement the "Create PCell from shape" protocol: we set r and l from the shape's + # bounding box width and layer + self.r = self.shape.bbox().width() * self.layout.dbu / 2 + self.l = self.layout.get_info(self.layer) + + def transformation_from_shape_impl(self): + # Implement the "Create PCell from shape" protocol: we use the center of the shape's + # bounding box to determine the transformation + return pya.Trans(self.shape.bbox().center()) + + def produce_impl(self): + instance = draw_pfet(layout= self.layout , l=self.l, w=self.w, sd_con_col=self.sd_con_col, inter_sd_l=self.inter_sd_l, nf=self.nf, grw=self.grw + , type = self.type, bulk=self.bulk, con_bet_fin=self.con_bet_fin,gate_con_pos= self.gate_con_pos, interdig=self.interdig, patt=self.patt) + write_cells = pya.CellInstArray(instance.cell_index(), pya.Trans(pya.Point(0, 0)), + pya.Vector(0, 0), pya.Vector(0, 0), 1, 1) + self.cell.insert(write_cells) + self.cell.flatten(1) + + +class nfet(pya.PCellDeclarationHelper): + """ + NMOS Generator for Skywater130 + """ + + def __init__(self): + # Initialize super class. + super(nfet, self).__init__() + + #===================== PARAMETERS DECLARATIONS ===================== + + self.param("con_bet_fin", self.TypeBoolean, "Contact Between Fingers", default=1) + self.Type_handle = self.param("type", self.TypeList, "Device Type") + self.Type_handle.add_choice("sky130_fd_pr__nfet_01v8", "sky130_fd_pr__nfet_01v8") + self.Type_handle.add_choice("sky130_fd_pr__nfet_01v8_lvt", "sky130_fd_pr__nfet_01v8_lvt") + self.Type_handle.add_choice("sky130_fd_pr__nfet_03v3_nvt","sky130_fd_pr__nfet_03v3_nvt") + self.Type_handle.add_choice("sky130_fd_pr__nfet_05v0_nvt","sky130_fd_pr__nfet_05v0_nvt") + self.Type_handle.add_choice("sky130_fd_pr__nfet_g5v0d10v5","sky130_fd_pr__nfet_g5v0d10v5") + self.Type_handle = self.param("bulk", self.TypeList, "Bulk Type") + self.Type_handle.add_choice("None", "None") + self.Type_handle.add_choice("bulk tie", "bulk tie") + self.Type_handle.add_choice("Gaurd Ring", "Gaurd Ring") + self.Type_handle = self.param("gate_con_pos", self.TypeList, "Gate Contact Position") + self.Type_handle.add_choice("top", "top") + self.Type_handle.add_choice("bottom", "bottom") + self.Type_handle.add_choice("alternating", "alternating") + + + self.param("l", self.TypeDouble, "length", default=fet_01v8_l, unit="um") + self.param("w", self.TypeDouble, "Width", default=fet_w, unit="um") + self.param("sd_con_col", self.TypeDouble, "Diffusion Contacts Columns", default=fet_ld, unit="um") + self.param("inter_sd_l", self.TypeDouble, "Between Fingers Diffusion Length", default=fet_inter_ld, unit="um") + self.param("nf", self.TypeInt, "Number of Fingers", default=1) + self.param("grw", self.TypeDouble, "Guard Ring Width", default=fet_01v8_grw, unit="um") + self.param("area", self.TypeDouble,"Area", readonly=True, unit="um^2") + self.param("perim", self.TypeDouble,"Perimeter", readonly=True, unit="um") + + self.param("interdig", self.TypeBoolean, "Interdigitation", default=0) + self.param("patt", self.TypeString,"Pattern in case of Interdigitation", default= "") + + #self.param("n", self.TypeInt, "inst_num", default=1) + + def display_text_impl(self): + # Provide a descriptive text for the cell + return "nfet(L=" + ('%.3f' % self.l) + ",W=" + ('%.3f' % self.w) + ")" + + def coerce_parameters_impl(self): + # We employ coerce_parameters_impl to decide whether the handle or the + # numeric parameter has changed (by comparing against the effective + # radius ru) and set ru to the effective radius. We also update the + # numerical value or the shape, depending on which on has not changed. + self.area = self.w * self.l + self.perim = 2*(self.w + self.l) + # w,l must be larger or equal than min. values. + if self.type == "sky130_fd_pr__nfet_03v3_nvt" or self.type == "sky130_fd_pr__nfet_05v0_nvt" or self.type == "sky130_fd_pr__nfet_g5v0d10v5": + if (self.l) < fet_g5v0_l: + self.l = fet_g5v0_l + if (self.w) < fet_w: + self.w = fet_w + if (self.grw) < pfet_g5v0_grw : + self.grw = pfet_g5v0_grw + + if self.type == "sky130_fd_pr__nfet_05v0_nvt": + if (self.l) < nfet_g5v0_nvt_l: + self.l = nfet_g5v0_nvt_l + + else : + if (self.l) < fet_01v8_l: + self.l = fet_01v8_l + if (self.w) < fet_w: + self.w = fet_w + if (self.grw) < fet_01v8_grw : + self.grw = fet_01v8_grw + + + if (self.sd_con_col) < 1 : + self.sd_con_col = 1 + + if (self.inter_sd_l) < fet_inter_ld and self.con_bet_fin == 1: + self.inter_sd_l = fet_inter_ld + elif self.inter_sd_l < 0.21 and self.con_bet_fin == 0 : + self.inter_sd_l = 0.21 + + if self.interdig == 1 and self.gate_con_pos != "alternating": + self.inter_sd_l = 0.5 + + + def can_create_from_shape_impl(self): + # Implement the "Create PCell from shape" protocol: we can use any shape which + # has a finite bounding box + return self.shape.is_box() or self.shape.is_polygon() or self.shape.is_path() + + def parameters_from_shape_impl(self): + # Implement the "Create PCell from shape" protocol: we set r and l from the shape's + # bounding box width and layer + self.r = self.shape.bbox().width() * self.layout.dbu / 2 + self.l = self.layout.get_info(self.layer) + + def transformation_from_shape_impl(self): + # Implement the "Create PCell from shape" protocol: we use the center of the shape's + # bounding box to determine the transformation + return pya.Trans(self.shape.bbox().center()) + + def produce_impl(self): + instance = draw_nfet(layout= self.layout , l=self.l, w=self.w, sd_con_col=self.sd_con_col, inter_sd_l=self.inter_sd_l, nf=self.nf, grw=self.grw + , type= self.type , bulk=self.bulk, con_bet_fin=self.con_bet_fin,gate_con_pos= self.gate_con_pos, interdig=self.interdig, patt=self.patt) + write_cells = pya.CellInstArray(instance.cell_index(), pya.Trans(pya.Point(0, 0)), + pya.Vector(0, 0), pya.Vector(0, 0), 1, 1) + self.cell.insert(write_cells) + self.cell.flatten(1) + diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p4x04p6_m1m2_noshield.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p4x04p6_m1m2_noshield.cdl new file mode 100644 index 000000000..114de0abe --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p4x04p6_m1m2_noshield.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_02p4x04p6_m1m2_noshield C0 C1 SUB cap_1 cap_2 + +Cx C0 C1 SUB cap_1 cap_2 sky130_fd_pr__cap_vpp_02p4x04p6_m1m2_noshield + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p4x04p6_m1m2_noshield.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p4x04p6_m1m2_noshield.gds new file mode 100644 index 0000000000000000000000000000000000000000..ff5d63ec95b79a4a9eb0616e00e2d94d9ac78667 GIT binary patch literal 4314 zcmbuC&x;#n7{{NPNhUuw+09CcP3=VwJxIaqS`-mv)~+B39@Gt1gjlT7s?}gYS`Q^y zFM{XA>P18l3+~y2hv0$-=}lSiAMl_e;vZoAKEINz?K9iDbJ)-3`@Y}#zR%1%$upEw zn!ZTKleG3LHRvcEq5ElN@qb!R^Gk1DS$nuYeEr;T^zLx@>em2{CpJEM^qC*N`s=aHZy);nvzK0=3VXLDyu}HpXc*=R{tcbeK)7;ot?-}`;Mf* z0xMXLabYmX$NU{$zY;l;?{qz0KZ<%q^O&6n@cEB9c^x($=BIu2GufY_ekc2FJoFO| zp2r9K=;JwE2Sb1LvewV!y7~G!xqcfD{h8cYvedD$lP^)ZZAW-|0FSuD`mA=MC3Ucpc|CgU?Rav)Es`hDB~+fz01=p56jo-zxWW zKKnVB{WH2=lAoQ{d?E6)Uo>Bcd>aqz=W)&#BAmKgArbUx@q^UcL@O*GuYW zALk30+e zy|~8tM&wdY^M$S-kY5{Xe!Z*v-|0FS*3awC3-#xF>Yvf|qTFA_viUq!t9wS*!}`^i zO_Y^^<~v;nOV^){?L1b0W^^44{fB*i?fKH@?0-Cehkbr*f9pQK>-~?u<3rxR#%=7w zWBBZJJ-mPFYfqHR1NA#yZ-@6!eXX&br>p+9(e?QEM}13$aZmkAPS=a*{;RJ^#%=XC zovt5He|@6<#z6f}*W=$G_0`78dRP5U*W>3`eR*NrQ-AJs{eb$br2gu*`e$_gfcmqE z`YQwVJ6(^TU-hM9W!6={)Aj#6zfT>q|GvfVefAyp-wS?x@9f~W0(}~j`#0|2ovwq6 z-#`2O(q9(%?&SUx{j2n!#>8|m^hW8GpFmJ9vM3 zPWE46?|*;8cmw+vT;0U|zh_R@>4xUFaC*Ey;{JD2s#1P$LUn3!7oXy-Vf71Y_HusD zUBhML_r-XA_8?N9_4(`Ze54#pFt>GIwdh^v<5Nw{K0)dml=t$}{V*+br&sVR@qxJ4 zZgXur`fifFjEoc5gUoNh9~bEQiP)dwdai81!`xNxjIM9&^S>|m#`2Tzi5gdNUztC_ mk9#wt>sR+xU&y_AT<%R+eS%)6@io$>I zC%+C_6tpN65vkCFc=2E_20SRed6OboFCs`mP*4i~|L-%;&dg@^$+}HRf9*5R?|t5R z=Y3{p$HgvmCATXG-J%Qdhd)8?-}7O-cKZD6T&sQRM7z7%ZXbW4+dkLrwp;tU2VQC2 z-<@rDW;^>jbDjO|wU<^-o;h)5wtZ^l?29K?k?CBc6dhc6{lL-hKEL(Ak+1h&zO?+5 z+Z7r0;ybHXt~wWwg>K5l+d|iJGvg(k(tG~QT=nmi%^xMM#F6p@e(T~t>f));MJ{dz z{Cfx2roJok9NDl=a>CKjKOp&-%x_ zKQHrlm?M8{zocy5EB{vFc-BAc{f79pPmqhBEk{%GnlY}#k%7Kj5YPRdk{;vAK7Ya2 zpBcG+&L5%vq5k@JevIxUHpb}kL}-eQGDg(BjPI&H|tNJ zS9tw;yej^LvSj<)*Th$jWB>B{D-k#AkKGhsx$SN7m57^ueM$TtZ;M}7F4_K;b@7#3 zJK`%5H|y8t#P9Kj_%-F6?N>e(Us-)Zd?n&${qk$#E2I0wS0Zlu!Ey1G;h6YJ#7#e* z6u-x7;>XHK+YkQ~Us?J{d?n%o>$88^cf5Zn*>{X9t^Q*k`;LB(*TrZ5CCAPB>^u5O z_8mQ?)ql)m-_h^!s`%``6(`VnYzLI@MUupFp^Uz=3 zSF-OIS0ZlKXWy}YkJrR!|8X3|O`m;7U&+3sr|j#$#q8%_>6qk}ccctza1mExtZe<9 zU*>ZMYVlb~Nsn=*<;SbyRUS-9k8!2tSHH)7;s@-VcT+Ym;@Tsw#PNaiXI=W$FeN?4 zm6jiTEAtNDNXdCKuC(Uw{*k)O=R8Q(Wn5|1=e)V@JYOa2GOo1hbKb1W>#by6#+6om z?i+f%-b#9mD=nYW)Z2>UPRkFfu8{s{e-^Y3*1 zN7(rTxs}Kd~fCat6yda&&QRPe-nN8EAF4?Q#LQaM_h^H+52bi{3}c1RenoJk8!2t zN9*Fn&!nWsxYF{2N%4X!Dd{n;H2t4s-NKhM#JUBHE0guZZI$mn9`pOB;i}t9$a~y1 z{5ueQhj*W09iR8~>s6RPBl(q&@x1#S)(ONIo92gqNIp4Ce(f);2kzlycy9CY`3{8n zq?w&KZ^7|QYDdqYKv)8xqe2x8< z%h&OP!Tlol_rCrrV;}qdwsAg%`NNK{`^{L--1wSrtY=}qe;&env4Z_jm~ZTd!hB=@ z7v>xNRhVz=|H6EuzY6n>{gcbr{iFM{ba2D{N4}rv{z>k)#`P-9H|A5AZ>(owKCdtP zm+b4`!hEhL^GP#b`*-mDIX}Mf`Bj(CyLtbv{-F);>gW8=etB0PJ&f=BS6p>EUV8cv NwmIMRSMXbQ{{bT7T($rJ literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x11p1_m1m2m3m4_shieldl1_fingercap.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x11p1_m1m2m3m4_shieldl1_fingercap.cdl new file mode 100644 index 000000000..83b45be80 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x11p1_m1m2m3m4_shieldl1_fingercap.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_02p7x11p1_m1m2m3m4_shieldl1_fingercap C0 C1 SUB + +Cx C0 C1 SUB sky130_fd_pr__cap_vpp_02p7x11p1_m1m2m3m4_shieldl1_fingercap + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x11p1_m1m2m3m4_shieldl1_fingercap.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x11p1_m1m2m3m4_shieldl1_fingercap.gds new file mode 100644 index 0000000000000000000000000000000000000000..79d36483093429a6ba00cff6f0e3ff5c504123d2 GIT binary patch literal 7942 zcmbuEU5Hd=7{}jpX6DR{&g!nat*xt>ntiM*?Kpx|B)hH|C_=b(krY$-QHySDE=UGl zdDVx|2L%;|ArS>$WEXX_Hwj$?UUgUOO+pZ12tq-z)boFz^FJSY=2@Lq)}KD-{hjAM zXU=*5XJ%aFLRWHYgV619f&9Twko)&|7|k6!)ohKmj~;H%o@loZJwMw%IXl}P+cvx7 zm1c9c*`8_6Y@2D#Y;VuKIDO>!;p5Hr(dn07IC4TpIyX?N?3{Rg$G-1BzxL4XZy!AO z@xdqE+KSOH`hWe(HRqz9&<(n1Md-%dXm3dl>3x4>uJ%{TEzfA3lr7~x`E98Gn2QEO zS8>tm0DrH+xoHen#)m${&quC-{f0j|SDALvP&7Gq`*!7D+2@zuZmJ#6U3$yhdv)&N zH_~IPbEUxy-;v&^lUqCcl@FxL6LL^{QwC*mrB2Frf9!GpSF`;qqAl;2@zW_AG7xoA zwrBkV-XGWb%Ms!zUHzAoBNz4Gq-@XnlinXtzy7I=m7it%QsOm3os=ydeK(<=`#mK* z)X5wC3EzLT>;5^vi~hT^{ox0PWQH<-GVIa$lTyzf|4n{)U4622R((?Hre8j-K8foQ z^CG2g`jK2en18}~^&>KW{oFMF>Us6a+J5y(shj=lE%g&Fs9z^rw!iF>`sDH%^+~Cl z{Toy2CtOs&K~C9z&lUB_6=&2ZrEd0LIj26^yH0&l>ZadUQa|AZ_4~+@?XP-IeX{>i z^+~Cl{RcLwpYXE!1LP*#zvFB5$-!sUC#7!oUp=XQ!mH}9CMRwG&L7n$hh9^kl)Bk} z%^~&4;U4u#shj@rb@j=$XVoXAZu;v^t54pwRee(GroX;l{e<)CuP6I$|L*hZlNI`v7Zcl437k}p1gN#qXdq|{9xxr6*Bkvs57D}OK!xdWd>?x0Ru`GaxD9ry|7 z)kprs+s*k)zIdNR?!Y6ZZu-a_^iQ~;KJo|qk-F(4ci@xA9eAXbKNyGHfuC?uedJHP z-RzItflnfL;E`7TU>tG>K8f5xowV`?6JAgs`4ew9=a1ZhPa=2Vkyid-9C8PK z!prI-f8y zb+bQm2mMLp4t&zeAB>ZH@ji*%L7kMk*&n%s{t4&RNB&?xQa63c7w?nE9eAYFO&_^~ z{s|YLl~0E=#n$cYi#7|5saClI+>*2K;;YQOT^&#Cy)u&$n>=sE)6GBK>}K4wQW?IX?VD z$Ah;rzW%3kBdcUS!tmtM`>*WL@t`?AK3+LWHzM!xm%Zh=ZCP)_qX=Nc+3MtU(`vfKjw|| zj^icK7j@F=k9ngnUT+e8Q75hbxNhL#^(Nt=PFg;$8+drVNqDG}^l@3pdZ5?efXl51 za`c_ArzR2gc;0^g)xPRk*DIAa25%UMF{mZtco<|DzZ`|*N z`N4gJ`GeN{`Fa`aRc<~!URj0xdRyA*nSCB99AC!s5uRVv%jWU!?DI%Po^3~t%XRZ~ z$}N&*sFSk2qhFOQfnWVCB|Owg%dg3^E&Teal<-g|O&{5PP{x0i;Wha`>g2)B^DiA! zuN-73p0AUJU;alud>4dyc#7xiq~S+zs#o2Rp?JPd8h-Gzdg03%is$R3<@f7(557o= z^Bzc@(>H zm%Z(3L($Yz OyW}+Y$!}GD%kDqZ4Cht= literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x21p1_m1m2m3m4_shieldl1_fingercap.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x21p1_m1m2m3m4_shieldl1_fingercap.cdl new file mode 100644 index 000000000..000dfb10a --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x21p1_m1m2m3m4_shieldl1_fingercap.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_02p7x21p1_m1m2m3m4_shieldl1_fingercap C0 C1 SUB + +Cx C0 C1 SUB sky130_fd_pr__cap_vpp_02p7x21p1_m1m2m3m4_shieldl1_fingercap + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x21p1_m1m2m3m4_shieldl1_fingercap.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x21p1_m1m2m3m4_shieldl1_fingercap.gds new file mode 100644 index 0000000000000000000000000000000000000000..71a2bdae5e68e9bf66261f55576c171eca22a877 GIT binary patch literal 11142 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 TJ>}USoUq}z(|)_`w;28pq91Q` literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x41p1_m1m2m3m4_shieldl1_fingercap.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x41p1_m1m2m3m4_shieldl1_fingercap.cdl new file mode 100644 index 000000000..080a4658c --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x41p1_m1m2m3m4_shieldl1_fingercap.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_02p7x41p1_m1m2m3m4_shieldl1_fingercap C0 C1 SUB + +Cx C0 C1 SUB sky130_fd_pr__cap_vpp_02p7x41p1_m1m2m3m4_shieldl1_fingercap + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x41p1_m1m2m3m4_shieldl1_fingercap.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x41p1_m1m2m3m4_shieldl1_fingercap.gds new file mode 100644 index 0000000000000000000000000000000000000000..fd71f1faa6578830abd57de74cc3aa15ee1058bb GIT binary patch literal 17542 zcmbuHU2L6o9mk*cv}fJeV0h-{HY%_qFX9T@&XCv6Z3l)htHK!~lUkrKUW;QD+`x%Y zLz=#28aU(nJ$Y6Tjc*d%pknjPAEFX2u7; z&;RrMp67pFI?p#}SutzQ3fXy0&DoBu3IF4-riOpt+Fa~^;6-@zg&Lnk}NxGU6!@>&vEH0{5NtF$8&$F=HHkVS2ky@S#ebp z|G9>HyL4^q*46Lw*L&GgURU$qaE|?1adok};nUm2#W?35a(iRLwPQB!y?*V@f5eRI zv#fBzJRZYr=H~S$_qitP!A(Kq1$miexC;S0CUfjRLG5G^#DfXWqmT&&7OTLLboc}^ae&VG37tBiR|9o7&`HMdJ zCh~Cpp_=@}S^0;|TI|0#CEt8$P`-&god0sad~>i}zKJ~aUn$5>9FhNuS&02thvb{D zb;>u9hx1=A%TJt;|GHU@{WnJCn?v35P2}PHH>>g!r{%wCR%8FIyEH<5?_kL!=WdGMgF-$WkzPgiySiPQ3*Hmk9JU{t>O zRJVK+c{qQ6S$^V#{QYJ*_MaS*Z~mxLzKJ}X|3pE4;)whw%tGw<_schb*e>5h9?pM! zO1`;oP`-&g^!L`}C(g>>Yt~}_v2pq45BlVr$iw-475Ryi^83t6>_0Lr-+Z)7zKJ}X z|8Plu;+Xu0%~I??I3VAAs6)PqJeNnB~~-9+Gc`zKJ}X|J^D1=ADD`P2{0}M@@d>to%F7TI}CGF5mo4pL`Q}IDc0~ ze&VG3U1lZrZyT0x*1F`I$iw-!mgFan$-mVs#s0SjH@|sAzKJ~a zztJn->{=$@L>~IL9G7qIJSg8p9{M*|l5Zjp=U-itpExG}YO@skUmcKd zUezJrL>|uHJR{${@`!vBdFWSq<(r$A$v2UQ{>J0-%}od8o5(|dLsfp_wEPWbHTEwb zm2Y0rE#E{Q&hIG8Pn?k7VU}b6D?{?l^_}ufhMV*k>9`R13~<(tUE z`4>;gH!m5KZz2!|sRza&3#O#b<1DfZh3ly4#r=bu}U zpEx4_T(c1S=k&`rm$%C|k%#k_P02UU9+Yn)5B;WI`DXJn`6lwvUs{u&I4ggtS&RK8 z|sBmgFan$uF9v*l!t-Z?<;GH<5?) zn`h*kg(LD!PhQ4}E@aP2c3_*7VKj^J}id=i|9=@^f?MCh~ATKey-n#A*5b{GR7Q z9{T79a^D>4mS-XlefAcdpEx0({RQVE5B*n%05o9wMP*Nplrt~*qdpExU@{aO8ZI3N97KHp?-N6$na`s@vP{fU$E z*&p&e$V316VfiL|OL`{q&}VPT`H5rl*`M+}$V30x0r}>09r8@%q0iog^G)_9oNFQv zefB2wP4*`A&8R=&I`$^?P4*_tP2}PHr>pW4r{%Lh;dzjU{(({XCVLZlCi2kVUzVRZ zA)oyT&x1Vl*_-hGP4*`AOyr^eL_vPyh*_+Te zk%vBe6W)K~tbFz-JP-2FXKzB^WN$*xjQSI<>#N95oRrW0q<%b{kA5VdZ?ZR`XCe=M z_9ndk#4-8oPk0{Wq5t53e3QKiJrjB8vp3;`gd7aaun66P^co=-)jm-(+t>&qN;j>`gd7aY8=(6P^co=%XLWeUrTj zJrjB8vp3=V#1Z-IPk0{Wp^ttf_f7UD^i1TT&)$UdP4*`A&8R=&I`$^?6KCbKKdB!N z=d(AVZ?ZR`XGZ-A*ReODpExO>{Ym|JIG?=&qN;j>`gd7aY8=(6P^co=(9JWZ?ZR`XGZ-A*ReODpEx3){Ym|J zI3N8;?wjmQ=$XhvAN@$~o9s>Ko5(|dOHF>_tbFz-JP-2FXK%v$H`$xeGo${5>)4yn zPn?v`{-l09oR5Aa_f7UD^i1TT&)$Ud6UXGUKjC?hhdz4~`X+l5dM5JFM?aGL=9Nd} zo5({S{YdVc>`ge|L>~I+M{?iXbWpyDJoMR{@ct90<+DHGbs!J@%SYv#S9HrWk%xXq zS$^V#eD)`tk396zkL1^HuJ4p*A`gA`CcOW|5&7&-I3IcFU)nF~GVPsukg z8I*4#4}JC~y#B;l`Rq@49mqq!JTBj4Z$i&R9{TJ}I6rYx{yMV~`xgw$H!tjxZz2!p zvp3=V#4-8oPk0~5L%)4MzRBK%o{2p4*Urc{*_+Tek%#`8Uil__6Z$6d&}VPL`#0H} z&^M$0gzHvS`!=lFv8Uo6t9rhd%m|+&9^q&^M8XK6?}1 zf8wls_9r|K^3Y#0F5hHtLeE4V`s__OKXFn%`xBlAdFZ1b$$gW(2|W{e=(9KB{KPT& zMY9z9=tpwjWN*UxCh~B8^Nf6xy$O92dG6y2Mf~p6j{5gs+RiE9J5sk~E0&Y%;rtqV zb$8BFuE(nE=-<)X;JY^9$=9#f`4@eFK4xW>k(hbP_09j%dh&GEx9-4oY{#B~%}<{C z{EPps_2lWS&)(L0@`UyJKGurtboXJEzJ)EHczkb||9bTKgZ)`>eX#!x>wP`J>%C#UuP1oEHLUmfeZLDlpBvWu z{K5V&xIWnb1=k19p9R3$71dk2lSKKHzc6pFdoGlK0QX^{0M6 zZ(LtLf3W|J>-~H_`TKw4`uh2U=jVd!gXi0V>-qR{e@MR`>)-X&{@1^6+VVeK_-_21 zczqr}#^cP~+^wG<3;D&DmI;<<9**ewiD+mh$Lfscw|=Pm=JoRaN!~Ye zGrIqlk2II-c^xF@GdH98+&9kUeVUxh+>GXPzvwM~V~+Hgn~`6*P1ntz3%vgP=L4>v zIj_HdeE$CH&)a_g`SkbS;D6TnXYlwn%;)`b|M+;B+&AXt3H#UJ^La;)_hHgwZbtqY zJpUW!pTX<5!9Ro7PlJC3&))|B44%IY{-=5WS*riPxHbQ~F0T8;-*r*Re{I&^bl zqSdq)QqNB_Z+E5Eg|Oc(8ys{e-Uzh<;|pG;}j z9;^6Qg)iE3baBsg|KNiuEk2Uc;MJ1557=|lMSDHW$4|b9k9;xm=bV3d{_YX?e9!Ym z)5Cmx)<)_?Da%j}2ci>8P9_{bOW zkuPrNZ&_pGAM+>fZ;6X>e&ajt7n`@ZUo?H{{JBniT)&79UEI#kyz!4|^TyBoGlTi_ zdiyKx7dszvpJ@8j`LoXWSU(XTx)}M%@4V~zV!?WtE}9v_R^5>jCdVX)jKKo($qUm8iKJrC;7wc3_2VO7#7C|e`N`q^ll(E+4|K8q{&{rk`>&;u}=7+7HsCkQ~|IhOO-}C=3uK!qd{|Ec*efMVD zufLUCUa;q;i}reT{VwtEe%bxvo=4p;njZRh-RXXD@e22gricE8zq?=D@vQqr(?kE< zhWo|&kGNknJ@ohZ+-K`2_J8Jn(e%*Yo^$`0zj1$CoQwU%MfZzcK7ZK$iKb7@?|$Dt z_YG|B_f=@UoON*!`xn3IesT9_-7lIR=I^whU&tTxb@%TS>p#EL&L8uf|AG6(g-!R1 zrib~1b@z{H_Y%e(i0iSx`&0Ley@%Z|njYpiUva7l=K%>81q!~LS^Q~i9# zqyPErCDQlkV$}cC(f9a8`W{`3`ky-b9=}N6ql;1hQ%B$97wLO+G3tNn=zIJkeUC0i z{ZAczk6)zk(Z#6$siW`lk7<3Mbus9F>gap?B7Ki8M*ZJ>!TY}Tq{G3bBl=zIJkeUC0i{ZAczkAF<-`>cyW|5Hcb;}_|BbTR6G z>gap?B7Ki8M*UA6eUD$H@6pAm|I<~YH@X>IhPw@5C!80B-__*gFyAG#R%**E6T^@_|JU5w_>b(70_i{zqzJ{`^w>-h3y_ zf2P8>&5tggsGXmhpL-_$&YvqZU)III-+JDC?N3x_zO0LZzjw-gy?<9|zO0LZzyD!d z_t$Lyeo=De0efz`Xs=iMr*{3_Z@aH|s3bmgG4k^sLw@m8Nqp#HU5xzAt9;*@_8EY4lxh2xb#b(R9BcdC)yMMrT}r*3 zEz7wzE%Cde=6Ul!ZRh5t%)DPwefJAq-}}*Q^}ViL-`DJ187*_$@mrU9J)EU}@FlN@ zv($IK?)7k%`u-nmKkR$Dxhpfboj+^I^}<=kx5_-e)xvGZZ@=mF#o;(wYgRI*FSG<>Gxnh z6YFOkKaKV)SkKz{I-kLM*6X)F5B2)(&qKX_`}1F~AB`XMSG|5TesKQl^`r5F{+d`H zoFD)GYU_EZ+^@Erw~6)db^Ks`CXP@4a{rld|DRaT`cOaN{bgdkb;-2*`NaB3=YQVc rPmkn(i*fxW{}$t5ejM_Di_tl4?;RIYZ(niyXY7`j`_rb}Zm0hM4J}GD literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_03p9x03p9_m1m2_shieldl1_floatm3.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_03p9x03p9_m1m2_shieldl1_floatm3.cdl new file mode 100644 index 000000000..3965f884f --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_03p9x03p9_m1m2_shieldl1_floatm3.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_03p9x03p9_m1m2_shieldl1_floatm3 C0 C1 MET3 SUB + +Cx C0 C1 MET3 SUB sky130_fd_pr__cap_vpp_03p9x03p9_m1m2_shieldl1_floatm3 + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_03p9x03p9_m1m2_shieldl1_floatm3.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_03p9x03p9_m1m2_shieldl1_floatm3.gds new file mode 100644 index 0000000000000000000000000000000000000000..daf9bb77a88c21931eb2b20f3857b111c31bd531 GIT binary patch literal 4426 zcmcIoO^X#*5Utn!x>X#5fgv*LLU82=WX30c6DEEIMg&o_nN4FHC6XC@I6)IPZj*(O zjSJ1@fv70?0q$ZpF8l%R6m%oFkXajHJm=n9-PQW;9n6@Pe&@cbd#X-Vb@!WAO35Ub zjh#%6N(cXVbXx0uSvmjHuM@rT>ikUAzf@Ic&-AOy{eCsx>+k)AAJyE%+>UDg#|!6X zXJ#j=^RpMv{5;na8O@7tzWsgovB&oo_8xxt_2AFx)3UKhWGeq_rtV6Sat$MwUu3dY zwy(`ax_d>l)XMfkhi(&CSjzqt7C3!WmYS1HPEbrqx?27PP{z;dA()UjuKq1a@ zvO&8Je#^gV^><&Pv3HTXYOuJ2HSCJ;TfXn#cAwwX4gJ{}ZgD+7(lL>X#EvArvEX~@|mA|6`7NKMcAW!a(MDyRn(dkm*P`5`HEHxV-D3H ze*g2W(7FYC9vS=_-)UFeGDLsi7kE~5pJ7&iG+4}|AFwOJ|8f0>-?`%XirE^^SA;#v zr_OAf*I(m5UVo;zEzYNQtCgB;$XU>?nBrr< zO#5Efi03HdiQ;rTKYLCd_0|ZUvnwvaFEDGJ6_NeZSrXxo_K!JRT9K18pj{FEB)_E< z{8lZ91Ha|_zyHnq1Mf3FYZQ4O@lb?4%I6;5WA>i2_hRr5;~(Jrle_Py5W}3b@ldqu zuzy%Q_ddpa_Sr>UJZV>iKgwq<_Swar*xG_W$>$#O6rE<;!ZQx`VSLvQr+t8&=A@1D zQMBu@KN`=?6?qwt`HAc`d5VIA`xLP+8c#XIV$j57Y#W2IOpamk+`QN)9-NP&(`>Fu z*d2caDg68QSD6%2uIun~J^w#pWJ57Ic9X{~8FBCB*AeqCSvgi7KXSU);^X=s%I~>j ur{}x-cS_2!^3eFFv-4|^>e&-5_N2?bKdrskjNWdh_EX;<47INScI7?liud*a literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_noshield.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_noshield.cdl new file mode 100644 index 000000000..adb43a060 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_noshield.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_noshield C0 C1 SUB + +Cx C0 C1 SUB sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_noshield + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_noshield.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_noshield.gds new file mode 100644 index 0000000000000000000000000000000000000000..d683bc6c1800b7080fa679a1820e4d266a240e6a GIT binary patch literal 11614 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 IJ;dkX|8}z=9smFU literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_shieldpo_floatm3.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_shieldpo_floatm3.cdl new file mode 100644 index 000000000..96adada27 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_shieldpo_floatm3.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_shieldpo_floatm3 C0 C1 MET3 SUB + +Cx C0 C1 MET3 SUB sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_shieldpo_floatm3 + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_shieldpo_floatm3.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_shieldpo_floatm3.gds new file mode 100644 index 0000000000000000000000000000000000000000..0e9f487d7cff9772826545e8f2bfbdda7ee1b9c9 GIT binary patch literal 17742 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 A-T(jq literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_noshield_o2.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_noshield_o2.cdl new file mode 100644 index 000000000..63c868cd8 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_noshield_o2.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_noshield_o2 C0 C1 SUB + +Cx C0 C1 SUB sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_noshield_o2 + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_noshield_o2.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_noshield_o2.gds new file mode 100644 index 0000000000000000000000000000000000000000..acfdf465c6ce2dbf3ab249b83d827e80ef041eef GIT binary patch literal 6508 zcmbuDU5Hd=7{}lFIx{;vvmYQ^YhH|Abz!vX;$}ijWg?UprtU>Ilew!cwIA$eT9$Yb zL{ZR22-;0S&X;z z&&(5&kPn5hC6^ETLk|DAKwMmb4 zqvu!F)EjuNO?s>wJwN$Kz4Dee>9KC~{Nju175{3J9_vQW&rhhA|FKPatQ$Q)V8i<% ze9$I6Zbr|qVN&zD*FI^J*PV5vcl`(cP_K&l$Il_@v2OJI@>l9rCflUPy3zAXXVgoI zZPH`i==p^M>J@%(lOF3v&(A%mUha!F>9KCSufLt^2kx_vajm!F{(CsX%du|UdY}6* z;}?#ppYoRa1>-T_FMh7Ru{5Q=5%qiT|4e@APxXz-Y4we$yM8&2Kjmfh%SLDX<+CA- z;yhNcz^1&2`NO)g&^^w;-L(YD|Mrj&;6K7KP7UdZgleVXEnDlnjvzfZgldwA9Lxa zM6T40PJV8$=H{+th+L@~oqX=cT>2@ID|KVne0*=Xt+`<}!yB<~?3%CpF_(VIi?MF( zny>d+C9WSSZ^gQ?$NDi4*AHWLN_`{h?)_hl>xXghwE9NWUB4FBkCd0yuNj^7gX?cS zjz8rs_3OqS;~$FSHx5s!Z$!Q8@z*eax&G8gGsL`;y0Po^*Zp|i>8HfJqtEq6=v@Cn z%wOgYUds@g2RQzBRDMkjyZw&qq>GeoY`jZQxIV=n!a$d$U$$*)||+<`+G zB3J50C!hN^Et)y&*xW4qdON!0plb`&qt!>VEY#^^HT*S~u3$e7|;H zePewrer{y#yzdX<_co6|<#qK3jZNRL#_^}Tpnlbev3ujM#PJ&krqwrAdW^pu$8W5R zsc$Uz7=IGSpYpo;iLuA{OL6=uFQ{KK_85O5j^9|ER^M3YG5&lUzp*f;zA@ip{L=ry z^-pEA_iKCy1RtAEjP{-u8hPx^O}^rU|m>G_p4 z&6oZie3CxvM$ec29X#pZMbeZ0U8Ltr{|=t??;`0-|1Q$=rGE!c`gf7^rGFRc`2ic= z*Zy53eQw6P{O4u;XvY5Yzu55`+=oB3Il2$)59&s|FZWLkrv?4%!yy^VhwUMGAQws@ z*_?w}d#KbLzsT)UsIf1V{DbOh*gc-?UtDgSIQ818<=Mu}?8@B9g~syi@x}T1*@c9=ugt`&+>`L{fT&b8} tejKy=9Q^k){0*;JH=gSleN)ceUjN*cUxNR2sEj9vk3JR8eHko<{{d+Rl}-Qv literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_shieldl1.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_shieldl1.cdl new file mode 100644 index 000000000..dc02ad934 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_shieldl1.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_shieldl1 C0 C1 SUB + +Cx C0 C1 SUB sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_shieldl1 + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_shieldl1.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_shieldl1.gds new file mode 100644 index 0000000000000000000000000000000000000000..1de0ae822e1876493fe93ed34977b7fb49b4133e GIT binary patch literal 10410 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 Y-3N>Q*6QGO`>YJ?pT-?4uTH1<4~%egwg3PC literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1.cdl new file mode 100644 index 000000000..f1f28b284 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1 C0 C1 SUB + +Cx C0 C1 SUB sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1 + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1.gds new file mode 100644 index 0000000000000000000000000000000000000000..828d5213835b59eb6b9f272947d17722bd41a657 GIT binary patch literal 14238 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 V2B%lU{rab$X-5gE?gL}D`XA9Q=f?m5 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1m5_floatm4.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1m5_floatm4.cdl new file mode 100644 index 000000000..383a2350c --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1m5_floatm4.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1m5_floatm4 C0 C1 MET5 SUB + +Cx C0 C1 MET5 SUB sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1m5_floatm4 + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1m5_floatm4.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1m5_floatm4.gds new file mode 100644 index 0000000000000000000000000000000000000000..dce4d90f04947bb38a9edaf204b761cd6fed3b7a GIT binary patch literal 15042 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 HjIH8-n#M%E literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1m5_floatm4_top.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1m5_floatm4_top.cdl new file mode 100644 index 000000000..cfeb92366 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1m5_floatm4_top.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1m5_floatm4_top C0 C1 M5 SUB + +Cx C0 C1 M5 SUB sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1m5_floatm4_top + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1m5_floatm4_top.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1m5_floatm4_top.gds new file mode 100644 index 0000000000000000000000000000000000000000..477b1d8938da4afd4757705029240cd68b024198 GIT binary patch literal 15720 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 Am;e9( literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_05p9x05p9_m1m2m3m4_shieldl1_wafflecap.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_05p9x05p9_m1m2m3m4_shieldl1_wafflecap.cdl new file mode 100644 index 000000000..76eab20c1 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_05p9x05p9_m1m2m3m4_shieldl1_wafflecap.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_05p9x05p9_m1m2m3m4_shieldl1_wafflecap C0 C1 SUB + +Cx C0 C1 SUB sky130_fd_pr__cap_vpp_05p9x05p9_m1m2m3m4_shieldl1_wafflecap + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_05p9x05p9_m1m2m3m4_shieldl1_wafflecap.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_05p9x05p9_m1m2m3m4_shieldl1_wafflecap.gds new file mode 100644 index 0000000000000000000000000000000000000000..6ca8d242d02008f5be4f123cf50603c2690ffaaa GIT binary patch literal 14358 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_06p8x06p1_l1m1m2m3_shieldpom4.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_06p8x06p1_l1m1m2m3_shieldpom4.cdl new file mode 100644 index 000000000..a3a85155e --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_06p8x06p1_l1m1m2m3_shieldpom4.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_06p8x06p1_l1m1m2m3_shieldpom4 C0 C1 MET4 SUB + +Cx C0 C1 MET4 SUB sky130_fd_pr__cap_vpp_06p8x06p1_l1m1m2m3_shieldpom4 + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_06p8x06p1_l1m1m2m3_shieldpom4.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_06p8x06p1_l1m1m2m3_shieldpom4.gds new file mode 100644 index 0000000000000000000000000000000000000000..2f410580c762d31f8d4d1be6bd4b7067be6dc9a3 GIT binary patch literal 27076 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 E2TE^31poj5 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_06p8x06p1_m1m2m3_shieldl1m4.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_06p8x06p1_m1m2m3_shieldl1m4.cdl new file mode 100644 index 000000000..30a40ebcc --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_06p8x06p1_m1m2m3_shieldl1m4.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_06p8x06p1_m1m2m3_shieldl1m4 C0 C1 MET4 SUB + +Cx C0 C1 MET4 SUB sky130_fd_pr__cap_vpp_06p8x06p1_m1m2m3_shieldl1m4 + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_06p8x06p1_m1m2m3_shieldl1m4.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_06p8x06p1_m1m2m3_shieldl1m4.gds new file mode 100644 index 0000000000000000000000000000000000000000..ce99b1d15c8541d97ca22889b41a407a2f0f2a52 GIT binary patch literal 20560 zcmc(n4UAmZS%&Y<&dkov&hGr|?5uYikX5B94H31Q$OKoQ#B~BKr8P|&!K%o#m@1_S zG6_VDg-}2Rn(|YtKtx?pg|<>F6Tn5NDi%T}gs6%D1th9sRpKv1fS@v=M8OEe_nhy% z_sqJvpM_TujyBKw{q8g8+rEmqepw5mI+1^bUb3%kBQ)apL?zK0Lq zeBk(dP8>h^!13ch@UD}`A3AyR_<=(wZ+*Z0@8I$K58nU!`)@w};Jxqt!TV0!ckupO zs%pB}`L^31{pRm{`qP)b<>=>M_xQ(l?yj!u1g&(hrImKCs=BMK>g`o`tySGt-85RX z{-5=)t>+6j_xtyvZPOlCmHam*f0}*Ult0_23pbzf??wCDynodF))Tb9?|fBleAW0( zg@d22s@aFCN~FH=KVFCA)15-<>wo5TNPTi+A@%Xcy$-1lFBeiD{;<~}^;O#kk^10i zuS4>cR~J(6Kjw8vz4t;P_1=5D4ykvaETrB&yR(% z;>sQFi{!k%NZvhU`;1Sa*mrw&hZt=Iqo7k=SL*xyouzT zUy+>iE|N1oL~_QBNY3~Y$r*nlIpb2as_sfi5#y#VF>(0W3H{180Fh8^Zd-nI4 z9ivS0jR(9A$*0d3QeQvfbx3{kxkBpWiPs_Z(a#i8U;8_+L+Wey6jC1?_By1#@>_+} z`+cuN>dQY-NPX#|*CF+#w-!?Gob@`S-ue1M>Winm4ym`kQb>LNYxaoO#Z{Y(@I-Q6 zUnHkpk(~aCJ>ZtnAMf^Y{FCztiXIg>=8zw{30TZLjro;ow8oU&}@6<6MX2 zYq<`o4<0I{-h0NkgVdLD9a3M+bx6IH>yR&UapgAmMRHzOB&U6moPLSq^jjon|3q^3 zUnJ+ah}OTCJAUts=8KIpKIUP6YUlgTLav2Tu0!g>T!++G>`SD+{Gx9M$-B7@skd_- zQlI}~oREvFpL1U%=XFJL+84>`mq<>(MRN8}Bxk=x@@pBd1M8-(Z@#_i&RSKc>TWJn z?W()YI&JW(&TU6N{LUNxz-V+ z<2~Ph-~Vf0-`(N!MU~cfgH5}(-s0m+9A2{aEf+^W?sajp-|ID>@cJZkdd%xJzwGsC zCgX?K7d6j`ga7urX#JYs|6ToOUhMy=?Zd-`+$$KLBKH#NHSJzQoqG=CUPQg7-K$cb z$-Rua$i0xd$hApbwDG)azPA3oO#fT=X}%f!h>ss}?MuGC5r-$dE{^R%f%Q+#U-tSq zbNyDY*L=$B>zNz(dcEdXz0Nu{jbp|i<2Uol^(!8Ak=JD{R@2(2PWzC4QLkzJPkAQ$ zMO|dSsf!#J{)j8z>veH{t;_4AHN5%a{92iM_mKNy`y<|d&92weTHan~eyxtr7yT3I z8^=u~pI@KiQx|z%>NTx>>a-8L)<5bspUinC`$fIx3ts0q;B#EKE<`(SFEjqi^*?`a z;d{n4*Qdz1Cl^`EQLlN{>s&uAdUF7=ZkI47bMSIQ0{%d{D^~ZRH zvq${;6q$F(Yufz8^~?MOnYXCd+@JGI<~`~n^CF(eyh&YT-lAWk_3LZlbg=IT8mWx(zY=35B8-Mf0 zLOgOY@;7bF;xnE_JaRGeS%>3I`-OPv`7AT?S!du+Y>bQen{n%eU<-WLf#C_57u>Iu^x-a&Rxi4DY==Wab z*KP0b3%PE|#pwF&?f15N|5(VeAQ!JTewJSHZN=V&{92ioH};?7+`ZR*ap{2jqUE9A zw);JO6+4f+FIpb@i{IhC*dDnrS|0ifpLbtuJ>tG-d86O{FF$XcKPu$Bk&Ds!TlkyY z)@KSi7UW`d{uWQV*S@t7k6euWj%l33&KC;t$i>L-o_25PdkXQ$#mFE0was-~wr=_K z9RJpi9l5yGeEivN@~Hdb`ggl8THbj6@JIjYzBv9v_eIM?fB0Va#nD0cMax5f^{?C) z*M8l7(elt=ey#g8|IPhn@wKtP^ilW4-n-lvEf3r8+WF@E)%z~{g7eDL1XnCW*^|Llk?fTz-TOrpyxfoslY{$HVFEa0ti_!d(w)>L%%zwO2 z=W+MNX#T@z-o+D{cge+Q{!QDxIIqu|Qbo_bF!{hl+#3L6YpXVGro_j<*axwDPkGRM4A3nq*7bAc4 zb-r#J{X-$^HgYjqzpa0(dsDk$Y`Y5Lk&BT(`#$$JUsH%jE=KKCd4qd{ z#X>xC@e2Rc{QD36-?n2tvF-O2PL^ywwp_G&y8Z`tTd?;(?C00@`yci$Nd5lD)<^ks z#^3+wGyZR^x?9~h9{9i8t2UZ8UzhBIyY8L-*^vCRrvk2U+a z?GO64V(0b#TB7CibKkD^@jI8?7rVJnqUE8Vo;$3sVz1@xic^VMax6K ze}nhGrkywTi}ROwL+r1dc3HYH?u)CRa9^}M^w+-MeUW=8?TeO&{?OJ9 zj1_V8fcv85p+7$0e$9*SkHtLtdw%VF&G?!8s{11IKK&Oh58I#G=JdbjS@)-+4e_yk zHMP%sAoybXnVYpQS|0j~``xekjJMDGhrJj{#4-;@M@_@!NVVKl9vH zh(|77&8Oen=GU}-Khk!W-0x&EZ;*?YHy%H>W8R>Bk$Hn$ zjOLHD-39lVKX@JH4RSG>KiH0W1Fxpd8z~oq`Gf74H}FN~4RSG>KhkzDxzGH;>o9MS zi_!eScFY@iBJ&2h7|kDPyDzxU{K4xmZ;*@8{K0n28+bJ@y3hQP>*4ul-oO``H}J%0 z{$M-i4g8vC-Dm#D^{{>B4SX@J+3j`3X#U_nJ$u&g-{R&ezkiFCH@3fMV;yhN)@&jk zxfuCv8|!!-+j$X>T#WpVjd8rLy}u^nk&BVPblANmTWjJ&JaRGedp6ebmfuo{M=nNw zzwciEcMI{z#mHZ=u}=Gg>k9G6#mFE0yL+p@R)|L~M*iB5x;M1kfbV2Xizp$W&w0CiE{t)IXziw44BFr8_#5Z(JIUi0a^A?r==|-q{f$FD zZZ`g;kao$%sQvX9-JAY=As)H-O8R^4|0wVODDOX{-{fM{|FyjT!@U0xk6e5u{k`^o z`FbDs%jf5K$?nJGVle*uC*12_o}+mw7XyF!DIYg|yY}ojRgmLGE=I?1ul`Eg+of%N z(Jr|dwZHHw-|yDpIof`wTnzS~->G5V*?eM-=A~Q={C)Shx9?x(XkN<2z#l&5-sq+| znwN4h@JC;CZ+zbz%}co$_>;W#X`nCxfqTA|L^uW zel6=ebCsArPiDDjdE@cJZ*RL_^PC_5wzwVp9eWMhuW8@&x*hQ<=f8W#eKCFJ(0tMI z#{TpBOw3z+Zd>HMk&Ds!+pE9zxQ%sdfBR73%-Saxt=`!G&D?+1`}7~uZ*no}|6YCi zIkjU=|7+TLOSu@FKeprd_V8<-bAMgjZr*>!3BS|B_z`<2?eCV0mNyrKNNRje{I|Sn&;eK6SrfZXCK72mP=-^qIHtYv%oC{=&CB^jmrV zMdnRB(elvezD4^Y_bq%ex__}wnOXa+U&KvopIo%Ov3=G_c&wj9JaRGexliM9-xl%6 z#mMj4I+1ycb1yP)k&Ds%)qcu7&OJWFBNro|bqf7v-6GO&axv;Z>m)qZO(Gt-82OW# zd#u~=As)FH`K%N1SU-w*7gGJ$`OPKOi2t82LOW;_>__;*pDy&+q5quKv;-pS5#OE*@^4 zKiQ5xz7;)k00wM{F?SX9_y#Xo#x}0&eM56e~e+yW9OKkKhg5W_VGKHvzOUD?Y?OB z(C6Bv-I~w3za$=xedZ2)ae3svXnAA%tvr5MyD)wr^B%bv&3}6xf1DrI&741xbu+mb zt)J6&)@OXy?~rvnxfreA*^cK9yqf3S=lLVo8;>7#o_p|X+V?3Jcbbns+wuH|FY??+ zE=JFPj6d!@oPUwuxgZxUZ|whG&;Q~FeB89R3mG@$Vl;mC>a(AdQ@;P=`pEZRw7hZu z@z?Y56Vtz0VYz5|=ua>{(tk^_h#nJn>TlRS9FV3FO=@4WS~Z~vZWK5_o_hd=weCw^n=uHvdrb4v%iue_zAX!nYuyVxq;T6C9M z#Vy74!&%#hQ~tUBLdCVc{6L-&S$(b44-zKv9U)SO3@RkbJULk^0JCcpXw7@2g0C^ii)v>dO}@QeXaYuS4pK zwhtop!82ZmyUcy#fsE>_jnyr?><$LdiS8$A@%l$D^hQFy$-3j-dU0Q z%on{5`J^r`+~&SW&g+Zh-GjDIndJ0OB&XjZIr}G)v)>{)$44aRxQXN(Uy+>SE|PP8 zL~_oXNY42c$vN*LIpaelXWWS7j4zR#@h6fqE=4=Omm0rcX8bbl8RzS_SDbmXef=@> zGy8vN|DM`0$|PTX(Cd(V@7Ua?YDb&iNI| zIqxDl<3l88+=%3iFOi(_Cz3NhMa|1%VILRG-}Ui+yU*7%>3*?i!`i;fUhA2PgAZ7L zEf=YeavhQ{F zMz6JPKWf|FRB`+%``U8R>h<$|XY#MV;`P-IfAHIOEuXbx^KUi&ne7m{c(%Fy!J;4M z!MGyVJ-KMdyWW4_|0`eL-RAQ}k=A#EHM_R%@bM)spSSic7l%LPb#c7c>m{G``Z#lP z#Oo!$?Da_|K5HP4BI|M9wL{i^T(j{Y+*_W#`W;gO2mD;S?5_Y&$Q?OsEjdk*AY zM7^Zlt5TlHy^OlZy^y-dwMkvH@w{Wcw*FnB|E>Eq-wb}j$B(%5C12l&%SXK~j_g5! z^-sxP_4+7t#T9@;Ye^Z@ySxD^u?tbYEiB%pKasw1+(h#F`V^nK$m>!sY3);|eb}}BQ7`#a&NJCB>Lp+FI>!N@z5Cauc?dnnvMO} z`kw2L@d~Gp`t>O??~s?Y`HAb7`3W*_Q7^eS=b6lV)J5h+Jdt^my2!jmzeMZT*Y`i) zf4aYD=jmtcSlwB1@ZEOqEf=lc=+C~(z4nb2@yNx-@Oa7UtBumzG!*a{`~vh7yC!t z7cFn}d#~~9w)YPexo*kD==$yL^|pHdRFPvrE?#c@%)RW}ioLV>wK6Sl>_5l3d$0TA z+%Q1})P2$NM!)^ve%?BNT9NZc zE=K2X=I?S_pRCBSAQz+aH+#&z_RSUX$i>L-n8rEme6AuMxfuD~6YkCZKt()qG4cn0 zYjfSYty?}(vhS|0lI*STNv-`$@VuZ#V;kGL=P-r>GzdDwo}&Nt_;JmJ0=&42jJyLck=F1Z-ZziGRd-Dm#ib(sIj#c2L#JMMdUBKJLVF}nY; zPMX^F#`;NId(8fAxoCOg`D32LWBwEI$i>KKp2cf@vLYV282QX|_{@JI9=RC#y}j;n z|Hg-SYF5;1kkgwDzof1EXrJ|8VzBmQjyt&+9eK?{*ZfX-&_%oT#WqD@47es z$%=U7V&qTkdoT2R_17xmk&BT(c;3B5`yL9f1M$ek$e;fm_xcZ2#3L6Yf9aRpTYg(b zJaRGe7vA9BV74M2xp${kebMsJ?_cZvFKOqE{o?#3UK{%hC)^kLxiy|>dD#BoW%tF!kGU^e9{Ni^?7ql7 zl=el-Lx0)U4U83W_@Miu<)J^??|#X1?vKPg`g?xueBJmN|GN7k^FI9-Ef3qD*yi-V zy@6pO>>AmWMviF6mm$o-3APYn7`op}RaWZobbqxmCkci#O@Ci4clXnEuD zV>{*z+83EO$i-;>NZXxtpZSB=VcsAYqxpmFm^biB+Psl+F_=Htj(G!LWZobbqxmCk z_p)OxPL_Bga^5-_)o3phhKExvzBfn>3 z9dG`Qig@H=z^k6euW1sm(MKe(zQ9=RC#ga2@E@i!~tk&BVP^d9$??dQ4l z1LBd3k-uy|SH(;3oy)`{7bAaU>rVX9S1aO?i;>UIYw=g^u82o2M*bc<@7yc*yj0@_ z`!~6Gr1|=p+IYiX`{f$VOSu^Mt2XZOr{7Yec_|kIe`41i{^XBqG%w|1;B%btIesP0 zOSu^MoF_caUrF;)E(Sj11ds7k(!7+5fzLR_W89WBFXdw3bDiLE{ggB>u_J95wANTWTYCLcEV{$PV|NW!x^)J+DUdqM5pMToNP2a9PJ5B}UxRHy| z@!PGx(Drs|Tc5N`E=KLoeBAfDwOOO>cgn?J|M{I7=AE@CYcwzAV&Lz&+r2&iTBCU> z7XyF!arcJT*JxhK#lRna(Y?|AHJX=lG4RKE|I>Qijzgk(DHj7jt^3Ve$@`yZUdqM5 zpXB{t&HJBdUdqM5U(NeJ&HJBdUdqM5=iH~CRoJ#-Yrh{$(elRi%Wm% z?#aby{QrNq&+%(n-Uwneh1jlZZzy zMn2ys!|PnAh(|6)e)}5t+Gi@_k&BVvdfq+0Z$v*J9=RC#JSXDu{3zm)i;>Uo=ix5? zN{!FixhEGlo99oqqtEyv@A)PdEpMEEi!HzJrtcMO6#hMf(?)V}quHN3T#ef+8Na)I ze%bBwKl{nLh5av?_nY-gu7}5ubrXI``x=k+Q{q>vy)}xdX4{Y4>^l$o0nKN1f*${F3%{%Ehhb z8ZVUU}34^+FNbxS}t0> z-u@1M@JHtTwY7h?BJcSp7pua>% ze@(gg`OBS$wY_G4W#@UwXRYZS^LKn9efW8tpRv9F^ecGB{0@8Z9^2RJ>hGA(ZP))= zQ64ehw4Lr(_TK!rdn>Ji|E}V1!RX_L59%x1qiRI9+r|F@GJO*D literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_noshield.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_noshield.cdl new file mode 100644 index 000000000..af6616c7f --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_noshield.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_noshield C0 C1 SUB + +Cx C0 C1 SUB sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_noshield + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_noshield.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_noshield.gds new file mode 100644 index 0000000000000000000000000000000000000000..778513d365775fa629e33209b73d08603a2668bd GIT binary patch literal 22942 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 L+Wv`Ar&IkOJ8{a$ literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_noshield_o2subcell.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_noshield_o2subcell.cdl new file mode 100644 index 000000000..2b0f03fe7 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_noshield_o2subcell.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_noshield_o2subcell + +Cx sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_noshield_o2subcell + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_noshield_o2subcell.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_noshield_o2subcell.gds new file mode 100644 index 0000000000000000000000000000000000000000..289ba685920da27f00a797d6dff47d99bc435936 GIT binary patch literal 15830 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 hb1J`zu--ra>>cURO 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 g^@Ki8)OXLIL&0!FBb9RL6T literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p3x11p8_l1m1m2m3m4_shieldm5_nhvtop.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p3x11p8_l1m1m2m3m4_shieldm5_nhvtop.cdl new file mode 100644 index 000000000..d69c34001 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p3x11p8_l1m1m2m3m4_shieldm5_nhvtop.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_11p3x11p8_l1m1m2m3m4_shieldm5_nhvtop C0 M5 SUB + +Cx C0 M5 SUB sky130_fd_pr__cap_vpp_11p3x11p8_l1m1m2m3m4_shieldm5_nhvtop + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p3x11p8_l1m1m2m3m4_shieldm5_nhvtop.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p3x11p8_l1m1m2m3m4_shieldm5_nhvtop.gds new file mode 100644 index 0000000000000000000000000000000000000000..53c24fe9669baa7d44201ba91e1e2b313061e7b3 GIT binary patch literal 104478 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldm4.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldm4.cdl new file mode 100644 index 000000000..b42fc7395 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldm4.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldm4 C0 C1 MET4 SUB + +Cx C0 C1 MET4 SUB sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldm4 + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldm4.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldm4.gds new file mode 100644 index 0000000000000000000000000000000000000000..1ee3f03f386fdbd469a2bca340e09c5431ca63c9 GIT binary patch literal 50528 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

N- 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 amgCnf$5j9En>hZ{zsnlc(QfV9-v0%H|KINb literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x9.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x9.cdl new file mode 100644 index 000000000..590bfe64a --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x9.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x9 C0 C1 M5A SUB + +Cx C0 C1 M5A SUB sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x9 + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x9.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x9.gds new file mode 100644 index 0000000000000000000000000000000000000000..25a469b89df9d14b264c6b7b195cf0300d81c824 GIT binary patch literal 71498 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 G@qYo2f7{>y literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_xtop.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_xtop.cdl new file mode 100644 index 000000000..cfae9c0d2 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_xtop.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_xtop C0 C1 M5 SUB + +Cx C0 C1 M5 SUB sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_xtop + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_xtop.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_xtop.gds new file mode 100644 index 0000000000000000000000000000000000000000..05dc892737ac2c58d42ebc83cc34bd046d627ec9 GIT binary patch literal 70966 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 H>aYG6M&A@i literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2_shieldl1.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2_shieldl1.cdl new file mode 100644 index 000000000..2d4fe8b53 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2_shieldl1.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_11p5x11p7_m1m2_shieldl1 C0 C1 SUB + +Cx C0 C1 SUB sky130_fd_pr__cap_vpp_11p5x11p7_m1m2_shieldl1 + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2_shieldl1.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2_shieldl1.gds new file mode 100644 index 0000000000000000000000000000000000000000..82c08aaff68663f61e1dead3d58f74c97dda88ae GIT binary patch literal 29656 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1.cdl new file mode 100644 index 000000000..31df834e1 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1 C0 C1 SUB + +Cx C0 C1 SUB sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1 + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1.gds new file mode 100644 index 0000000000000000000000000000000000000000..a392bff05329fc2f4b85865657177589a9939558 GIT binary patch literal 40972 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 Xtz*3Y@>jgTzO)S5KkfEUYwdpkK9U8+ literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1m5_floatm4.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1m5_floatm4.cdl new file mode 100644 index 000000000..05a96bf86 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1m5_floatm4.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1m5_floatm4 C0 C1 MET5 SUB + +Cx C0 C1 MET5 SUB sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1m5_floatm4 + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1m5_floatm4.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1m5_floatm4.gds new file mode 100644 index 0000000000000000000000000000000000000000..c30af6608357773469c55ef703fbb34043b28346 GIT binary patch literal 43424 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 V%$lD0$`{**o+0~po&DQc`(Fa&V;TSe literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1m5_floatm4_top.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1m5_floatm4_top.cdl new file mode 100644 index 000000000..448c673f1 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1m5_floatm4_top.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1m5_floatm4_top C0 C1 M5 SUB + +Cx C0 C1 M5 SUB sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1m5_floatm4_top + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1m5_floatm4_top.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1m5_floatm4_top.gds new file mode 100644 index 0000000000000000000000000000000000000000..77e58a667e55b94ac9c4f04c2851930a390be207 GIT binary patch literal 44102 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldl1m5_top.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldl1m5_top.cdl new file mode 100644 index 000000000..6a367a93e --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldl1m5_top.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldl1m5_top C0 C1 M5 SUB + +Cx C0 C1 M5 SUB sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldl1m5_top + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldl1m5_top.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldl1m5_top.gds new file mode 100644 index 0000000000000000000000000000000000000000..94e311f4e506954709cdeb7124084153de46ea22 GIT binary patch literal 55918 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 Ib7$-S0)%0(;Q#;t literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldm5.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldm5.cdl new file mode 100644 index 000000000..89d8a74a1 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldm5.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldm5 C0 C1 MET5 SUB + +Cx C0 C1 MET5 SUB sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldm5 + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldm5.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldm5.gds new file mode 100644 index 0000000000000000000000000000000000000000..d9df5b26f34260232587ad8649b295cd46b22466 GIT binary patch literal 48080 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_pol1m1m2m3m4m5_noshield.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_pol1m1m2m3m4m5_noshield.cdl new file mode 100644 index 000000000..213183970 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_pol1m1m2m3m4m5_noshield.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_11p5x11p7_pol1m1m2m3m4m5_noshield + +Cx sky130_fd_pr__cap_vpp_11p5x11p7_pol1m1m2m3m4m5_noshield + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_pol1m1m2m3m4m5_noshield.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_pol1m1m2m3m4m5_noshield.gds new file mode 100644 index 0000000000000000000000000000000000000000..0c1209f8968dd5a2976572457dcd6e0dbf96b39c GIT binary patch literal 32786 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 Hw72#DKQ4AM literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x23p1_pol1m1m2m3m4m5_noshield.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x23p1_pol1m1m2m3m4m5_noshield.cdl new file mode 100644 index 000000000..d3c559df1 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x23p1_pol1m1m2m3m4m5_noshield.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_11p5x23p1_pol1m1m2m3m4m5_noshield + +Cx sky130_fd_pr__cap_vpp_11p5x23p1_pol1m1m2m3m4m5_noshield + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x23p1_pol1m1m2m3m4m5_noshield.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x23p1_pol1m1m2m3m4m5_noshield.gds new file mode 100644 index 0000000000000000000000000000000000000000..39e57a1d5fcfe0a0c7a88d4550ff328f33eca87b GIT binary patch literal 32786 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_22p5x11p7_pol1m1m2m3m4m5_noshield.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_22p5x11p7_pol1m1m2m3m4m5_noshield.cdl new file mode 100644 index 000000000..db21025de --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_22p5x11p7_pol1m1m2m3m4m5_noshield.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_22p5x11p7_pol1m1m2m3m4m5_noshield + +Cx sky130_fd_pr__cap_vpp_22p5x11p7_pol1m1m2m3m4m5_noshield + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_22p5x11p7_pol1m1m2m3m4m5_noshield.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_22p5x11p7_pol1m1m2m3m4m5_noshield.gds new file mode 100644 index 0000000000000000000000000000000000000000..f03feb88f19f2949e4c89a324431ba488cd4c8ea GIT binary patch literal 62994 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 M{8Qq6II;Kt0cbcgTmS$7 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_22p5x23p1_pol1m1m2m3m4m5_noshield.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_22p5x23p1_pol1m1m2m3m4m5_noshield.cdl new file mode 100644 index 000000000..03f4a547e --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_22p5x23p1_pol1m1m2m3m4m5_noshield.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_22p5x23p1_pol1m1m2m3m4m5_noshield + +Cx sky130_fd_pr__cap_vpp_22p5x23p1_pol1m1m2m3m4m5_noshield + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_22p5x23p1_pol1m1m2m3m4m5_noshield.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_22p5x23p1_pol1m1m2m3m4m5_noshield.gds new file mode 100644 index 0000000000000000000000000000000000000000..36e3b6569b35400907ca17503c586ed54504404e GIT binary patch literal 62994 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 G_x?ZDQKtm} literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_33p6x11p7_pol1m1m2m3m4m5_noshield.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_33p6x11p7_pol1m1m2m3m4m5_noshield.cdl new file mode 100644 index 000000000..55ff8bd45 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_33p6x11p7_pol1m1m2m3m4m5_noshield.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_33p6x11p7_pol1m1m2m3m4m5_noshield + +Cx sky130_fd_pr__cap_vpp_33p6x11p7_pol1m1m2m3m4m5_noshield + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_33p6x11p7_pol1m1m2m3m4m5_noshield.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_33p6x11p7_pol1m1m2m3m4m5_noshield.gds new file mode 100644 index 0000000000000000000000000000000000000000..582d6c4397605889182a68b061c198dfedee4307 GIT binary patch literal 94290 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 R;fHw1Mfp#NufwA{|39|ZBP9R; literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_33p6x23p1_pol1m1m2m3m4m5_noshield.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_33p6x23p1_pol1m1m2m3m4m5_noshield.cdl new file mode 100644 index 000000000..d99baedbe --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_33p6x23p1_pol1m1m2m3m4m5_noshield.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_33p6x23p1_pol1m1m2m3m4m5_noshield + +Cx sky130_fd_pr__cap_vpp_33p6x23p1_pol1m1m2m3m4m5_noshield + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_33p6x23p1_pol1m1m2m3m4m5_noshield.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_33p6x23p1_pol1m1m2m3m4m5_noshield.gds new file mode 100644 index 0000000000000000000000000000000000000000..8c4f3a7f01fbc16569c30cb7c01918529c786fee GIT binary patch literal 94290 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_44p7x11p7_pol1m1m2m3m4m5_noshield.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_44p7x11p7_pol1m1m2m3m4m5_noshield.cdl new file mode 100644 index 000000000..f3801ae20 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_44p7x11p7_pol1m1m2m3m4m5_noshield.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_44p7x11p7_pol1m1m2m3m4m5_noshield + +Cx sky130_fd_pr__cap_vpp_44p7x11p7_pol1m1m2m3m4m5_noshield + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_44p7x11p7_pol1m1m2m3m4m5_noshield.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_44p7x11p7_pol1m1m2m3m4m5_noshield.gds new file mode 100644 index 0000000000000000000000000000000000000000..83286101d60b5b89bf58fae0dc53f6ea857c827f GIT binary patch literal 124882 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 wd)L@!KiW$VyZzVvyzM!8A2d-WI1%&uP+yDRo literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_44p7x23p1_pol1m1m2m3m4m5_noshield.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_44p7x23p1_pol1m1m2m3m4m5_noshield.cdl new file mode 100644 index 000000000..b70df97c5 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_44p7x23p1_pol1m1m2m3m4m5_noshield.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_44p7x23p1_pol1m1m2m3m4m5_noshield C0 C1 SUB + +Cx C0 C1 SUB sky130_fd_pr__cap_vpp_44p7x23p1_pol1m1m2m3m4m5_noshield + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_44p7x23p1_pol1m1m2m3m4m5_noshield.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_44p7x23p1_pol1m1m2m3m4m5_noshield.gds new file mode 100644 index 0000000000000000000000000000000000000000..e0dddea6d4fffff031e4cca76c01194db99929e7 GIT binary patch literal 125244 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 A%>V!Z literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x11p7_pol1m1m2m3m4m5_noshield_m5pullin.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x11p7_pol1m1m2m3m4m5_noshield_m5pullin.cdl new file mode 100644 index 000000000..5bbce2cfe --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x11p7_pol1m1m2m3m4m5_noshield_m5pullin.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_55p8x11p7_pol1m1m2m3m4m5_noshield_m5pullin + +Cx sky130_fd_pr__cap_vpp_55p8x11p7_pol1m1m2m3m4m5_noshield_m5pullin + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x11p7_pol1m1m2m3m4m5_noshield_m5pullin.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x11p7_pol1m1m2m3m4m5_noshield_m5pullin.gds new file mode 100644 index 0000000000000000000000000000000000000000..afec93bc2aca5b3697843428bc0bea43a047004d GIT binary patch literal 156258 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/bjt/npn/sky130_fd_pr__npn_05v5_W1p00L2p00.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/bjt/npn/sky130_fd_pr__npn_05v5_W1p00L2p00.gds new file mode 100644 index 0000000000000000000000000000000000000000..614b8448ef6b5867b022af9d40e149dedf9a4a2e GIT binary patch literal 24414 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/bjt/npn/sky130_fd_pr__npn_11v0_W1p00L1p00.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/bjt/npn/sky130_fd_pr__npn_11v0_W1p00L1p00.gds new file mode 100644 index 0000000000000000000000000000000000000000..ff1993b9aed806635c2e5a8db9fe1479ba88a8dd GIT binary patch literal 24372 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/photodiode/sky130_fd_pr__photodiode.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/photodiode/sky130_fd_pr__photodiode.gds new file mode 100644 index 0000000000000000000000000000000000000000..90127dfe93f724124d8b154016ea55140a876a63 GIT binary patch literal 31608 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�-FfMpJ2_9-Zq6Iid3*bHelU;o1dsE^bl�-y34Rav#|EJng^fy#4%% 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_bjt/sky130_fd_pr__rf_npn_05v5_W1p00L4p00.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_bjt/sky130_fd_pr__rf_npn_05v5_W1p00L4p00.gds new file mode 100644 index 0000000000000000000000000000000000000000..c8267e53e896c6cd312cb3c72b3de587577bbed2 GIT binary patch literal 47088 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

1Lh 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 z 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_bjt/sky130_fd_pr__rf_npn_05v5_W2p00L2p00.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_bjt/sky130_fd_pr__rf_npn_05v5_W2p00L2p00.gds new file mode 100644 index 0000000000000000000000000000000000000000..ce598ddf57e33ac347a6cca0cff245923ccf6417 GIT binary patch literal 44464 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_bjt/sky130_fd_pr__rf_npn_05v5_W2p00L4p00.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_bjt/sky130_fd_pr__rf_npn_05v5_W2p00L4p00.gds new file mode 100644 index 0000000000000000000000000000000000000000..536749acba61bda1b232be713290eeba6a6bdcae GIT binary patch literal 52336 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_bjt/sky130_fd_pr__rf_npn_05v5_W5p00L5p00.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_bjt/sky130_fd_pr__rf_npn_05v5_W5p00L5p00.gds new file mode 100644 index 0000000000000000000000000000000000000000..9316015a31f89d10102d566779435295608fd75f GIT binary patch literal 77040 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�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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_coils/sky130_fd_pr__rf_test_coil1.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_coils/sky130_fd_pr__rf_test_coil1.gds new file mode 100644 index 0000000000000000000000000000000000000000..3890733b54c74a951019bd5435429590c12140f5 GIT binary patch literal 6616 zcma)>3uu;Q6vxlLZJ!f2^YW4DROZamTHYchyv>m*xlD9|}~)AF{{`9J49zMK1=w@>)|y`1OyKj%D`^SsaV zj^Y%HjivT!u_kA!DJ7^i41@I`i^P zTz9&{{eowr^6{`!TJA7BJJx%4WvBz4X);<8S^Gm=`vp{h_J5wqbr%LGFa5=QJdf*) zX1_3iy!w3`xbA8#GkD`2<{w9dH2c+BpPpzG*>f z_pb{>V*It-ugAEf9tb_g-)Q!z`9u5YCy4&TztQae`P1=%AB+?HV*HF|kMfW82R|VE zV*MG-?)Q&%!~E|r%G*n@ewdAB7kcKOXnCpXLFiUxhlD;T_v#nrsUC!W@sW_w2jvlZ zUH^;nblopL5)$hl_Nev0yj1ld@@7?bNa%xdum3I=HGe?l%|jbPB7cH%uReDNbL*#x zz&5vu@+O5eyU?pg{-PcTJ@VIR_9#94B2EzT!@tq&{`@EEw_5#!@LO0E68?j7Z~Q2S z9}s?_H<~@l|B%C~2cdgvVMyqMa<6}sBTf+ULvJ*@fBcxM4(t8}V*mPMVMy#>TJD=a z=A)}s4?=&UC?xb+?$__HBs!PQ3|{zx`QXfuW_LsN5xUP&|*wXm+7@{X$=PTJ=A?t9ql^gd<%Owuu2FWD3@GlyY&5&j>wo(VqAHnL@Zxltl|CWOUbV%iCtCPC^FJLx z8NgbibuwH^vpd%JKRUPt-j8w49VR!$&2EhGpWY@*@7O)M;D)&wl$)rWK=q&58^l}B zAAG6C6y=gN?zXCSk3XyJVyzdW*&FzK()CZ*M_POp(M0K={M_^1x8|U{zF*VpsxR00 z&W_XUTPvA^ECjnHTs8`2{?}>t;)aea)?2u&dZ+isccHqavh>>}tjsK=Q?IerO z-Qw^5N^pG^^zJ9^CH)Fu{evDpWo&d#!mkS&gTxY)Cyigmhk0wJ?h4=`8IQA)1IYfI za@`H46oi!BMaD^YkIS!zI@ujO{UbUl?TnnGKRjD|*lF+_lza743NT;LGv~<;b+TM? zeWmV%YmcD~SMJg4JY&9X&hu74uRlENdho@sKH(cNz!!XCw?qtx1u;qgJpPF)WIPLt z^oQq?n>xN2V>}1tUVX_;=H3_db~03U<_cNId-v#EVa|ebj~??2z5eh#RQ9U9d-R8A zE%(Kb`sy1oz?ZEP#DG||JgMHj#V}rY%h7qc_Ht!$3 zSML8-Znt8$IX9wSP~Wu|yj3l}#&1>k%`p2Tw`-;eQ&XWP<##7X**{ZKaov>(x_e!j zfL$mxl||+hsYgg>mg)*Qv()VhDMd(h`xf(01vqOsrlewSH(zJ9-F)XWB^A-08M^lO z%y4;|l1j5{@M_H*VM;3WOTMZc(=(JXC6(?H82|N!ZWdBhh0(eGrKG}2vKf|4JE{?8 z>6y@0ue_Z!o9bs3&cw(r(Ck9zwXt4ySvg}Pn?cKNquI~5^649AA_Wqb$nCJAVB&qG!fa^S1HPV~R$Xj2c`rME<6L zzbgb9Ime48Gt^Mp1M)SB$5K|?c*)?A4QtB`-(9=Q30bkrDBd<++_OQ;N$Pg)E7>~F N)$OHqn@IZ^^dCxC@Pq&W literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_coils/sky130_fd_pr__rf_test_coil2.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_coils/sky130_fd_pr__rf_test_coil2.gds new file mode 100644 index 0000000000000000000000000000000000000000..909999b16eae34a04e450611f474c90aa7b8a66c GIT binary patch literal 18400 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_coils/sky130_fd_pr__rf_test_coil3.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_coils/sky130_fd_pr__rf_test_coil3.gds new file mode 100644 index 0000000000000000000000000000000000000000..0537acb061a37b8e54c9fc0981f8630b295a4a29 GIT binary patch literal 26784 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM02W1p65L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM02W1p65L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..46e89059d0e565b5b902e8af2f4ab0878e5099c4 GIT binary patch literal 7778 zcmb`MU8q$>6vyYBv(G-~nudiYrWHNdLy6sM`B6mpnOJ7v2Zc}vK`%t67tO-xp{NIw zsE7!%Ac>&pxreCdj3VeE5Gg2$o(e*u=q04}o0&oy{elZd*Z~@9h0N!1EZOvqtVgn(c$TXPmLz0o?buN|KQ~6 zho@%NuGuj;GquLKMZNyL8(&`cz}XKk-nHe^+t0kSZ;xBvPt2ZQ&g|LHxqLy_ZFTw8 zUANG!T-dXCS3B3e+xS+=?6Y7OZ9KcixmJDulb{!ecLu#^cCTMt_`kL57PAit#lNT?|Gar2eyF&`#`r6G;zlPbZZQ>q|3+KGpSApK@%ddD;>*6X@d=yz z@e1Fw7_o~J?fU!$Ti0vO4VIMbtuU?GMH{c~PtCu7?%Sa6MP>(sUNn2F9v|p>pO-|3 zU7Sl#{OCnLC-cUCQ}L6h!S;~9fEL(bWQFF}+r{WV_LuoD`)l~O{>A)UPW`pb?|y6Fzt;07`fsWq@`7DdewzGq{%Zf5 z#yP*|8rS*WR6o9t#`=r6u#0oWH#Yy~>iO#~S}mNl{ykliHDMQRyxM;?efE{D&psRb z$4cfKtUk>y+IXwJx6GcqWWK&AIrzx_-|V7|x9Ytg)8n6cAUf<~N}oRybc35qqQfrE zrDy%XUD)=vWKKReXRqgp3z8~}xJ1R7tw~GlqapITw z3!2W`#e^O|)F1vu>JGb@sz07%-_eWg8+I|Zf7CfT>R&{MT}Kwn+zleX|7m+FdaXSu~^@VW>4z7zXZM5do}1qvnTc0`k*iPbI@nv`gT2aj$dE@k@&?fru_39 ze$f{+zuqp+;lKY%(2M!npcl>Fx_=|w&#y?iaOzbC$bONMYFf& zpXaC(^dfcO=Z!RbQqT8xf4>y14$)JWp7r-Dv+_^e{_{POxXHhmil66*8@)*U*u_-* z^f`X~{V0-sz%JT&>-zD-`te`T*6r-XPJB8dmPm|8#2v2OGt>-O_Trq<7M z#Erh7#qI54B7XLlK4t$!zV~An&EA?no+Hob3tHWKyO^kd`k&7=`oG|LiyymKzaP%3 zKjLQpMB--u#8mt|N8IQOTHM|)rsB8!e=%{tMc=@z44_6YJ-kLdW@4 z&~)A|M*Vy}BD=YJ!}wpo1Z z+_g*dCyyLBcxZI|*ul|}!-r0Us<_fw`+ucot)2C{Ypk${#^2?>Zn-vlCsKEf#l>37 z?*i4kY}@$QT`bgE#sBa}+vg>=w~=~>Et-9HuS9+S;}B=Qp(OKQ7i}G_`rbc5m%ULE z9d>a{|5){|M(%j0+I^%X@8q$IHeU5#(+})CLC2~lIZ-q&d5f6+&?}K(GSR9Bzo+k^sy`K zw?6AN>oV)LoL+lA^x7@c{?GTCMdkl|uW^U5-?Qc|&A05@xP7M`0Co}1{>yCkcGhOw z{m|ZBo43|xv)=)V*sAA15gWe`(lgc*!=?GQjeFYlS>+rl^yB9U_o?nFceO>cchl}Y YyO{9GBC>C+|4T%^>KY>&SY(;|7szAk5&!@I literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM02W1p65L0p18.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM02W1p65L0p18.gds new file mode 100644 index 0000000000000000000000000000000000000000..0694b18e8d53374255363f4208213a3ece1aceec GIT binary patch literal 7778 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 GZTBC$1sBW! literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM02W1p65L0p25.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM02W1p65L0p25.gds new file mode 100644 index 0000000000000000000000000000000000000000..88d7d19a625f4bcf0d85478b7be1a7fdc8dbeee9 GIT binary patch literal 7778 zcmbuEO{`s28HU&S+vnVy+5jn#N(WAKpry7|+G>o@(rOw+Nn3&;ffEzjfdah&F{yQ+ z!lZ>L127Q>Iv~LTLk9*1jOf6GkT58f0TAOvNeCf^5h1+KTI=0E_wKz;!PA^Pz29E% z`hM2WUVEQVg>jgKU88aMUKr^gpHb)kd&bqHKRdVY8+(^$9$0QXvRpoLX8G`$(?4JC z-S>+_%b(o2cmF;6HV)kKgS{L3ZwX4guzb@cCF|I455Jr#D%3cXjK zrT6I~gz5|9a4b~Y$Kjf=`;JNwy56o&M?X6l!u+^md#%NH^fz|%_^=*7ljj|M*6SFB2Vhv!o}^YAwZI^Uo>%%3Le^r+)Z1sT=;y-umVFJ-LwP;{1HW z(XZ5(?55Vh*8E%g#fS1Iy}ACKq&HtpSeSnC*H-}TY4@^$9-+T%U><@G}yT^G}JF&Ne>ahYh2FisF1cGLQy_`HAh^*>X2=(n0S zq+jf2sekJ0{QLY5?q4~-`E|+f;)aI!#cr1Tv;W$EUw(b-gMP7_tNPzmzuVjUZ}n{I zYkq5sS5!~z=AO>{*rMm&h~6CCmh`6V?fKQw&u&h-*_#c~VK-OlsRjC)iW@!gM;79r zyqa{=vn@&&?dA$Sd80Rp8@*YIe{z#*^+{@P&i|^vWjAFXtRL-W@{d2W!ax0H%3jn@ zRX_AK$y@rVS;}AS#+Q=bjAstnP1y(ihYyl|^jt%9*v(aX>W1E=Zs^TY{b)zs(3{i^ zyIHCq?Wi02nyOp0n}zx@KZ%?9YZ5nhvlKt=h#S30+_B%xQv9?dZuB)3ceI-;;%D5^ zn~WQJvowC}8{|FzPeby?ZkF<=9eJZS$v^g+S<0Vwn(?_qc2o9t{kQ1j z^M&;0=y~~<-rV$jc%*&4WSnPDsV(={%<4cIe^d6h|1J9Ip`@?*ucV)vhsyf#zmwja z{4VKD*$4f{bClwx-ozXEuBi1x;zVas2lS@wMgPQ!-lPubP1%cjo{!MiR6WpB zkI3%xb*KJZpI=ORljjcXrtE|M8Gq^&&u5wR6W4#Ht`F*2=hU6`UsL@=yIH6|?eK@* zB<{F>WR~Km9d(Q68&h?QcC%1F+A(hEO~wtoSsK6CPV)yn^9M3-u$!g%!#+mc*xzcZ zZqaTQ>PI{3hTf!paevG#)sJ@6FP@J~)h*i1Lj7n*-O!uV4ZB&YUu>tkp{IV3x?wj< z^<$rA{<43Y)FJNQnWgzlJN%$G8HduW7uQ7y2W-TO~x|Datw*GO-2uEB2le3S3b9X<0L|IGWE@*C}D!T;o+ zNjH7GMd_m5Ea>q=-1s+%8@pMGA3x~uZ=%C)TE9(Y(fL;S-!Kj*Lv`awud%8xj-=dn z)9kjLf8_IA*tTnS*C&RFKNNVQ!#Kdrf>i{|2OB`v!t`_{GKv&_dyH~pv~x{2&&QGY=d+b{p; z8xlu+*PZFJ%us%QR_MzwzUx&y@m+YP-|?D?vz_1l?Xw!O@y>nxvuIo zhu!Se=lQ`thko&;hUl=H*5_5B-}h0)>!^eN9ZGztsb8mW&UdPtn2kO}PeUIlG&B?{i>idUJ zb)&gzy?(z~rJuI;q1ylEeQ50^)%s%CuG-vvh@RrSaY+27+_Jx{}@0%7zX literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM02W3p00L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM02W3p00L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..39214c44828f89b2706aa0481640ce3da04f6f27 GIT binary patch literal 11042 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 Lg%M3PvvK+l{{SX6 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM02W3p00L0p18.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM02W3p00L0p18.gds new file mode 100644 index 0000000000000000000000000000000000000000..7a6d1a41aeee41a7fb4af360c4b92ae3a28fb835 GIT binary patch literal 11042 zcmbuFTc{mp6~|}a=InEAEAf&x4@FS4l=hsYZDO?{$w^v^)=HA96zfK5@?uS6tCd30 zK1jV#MKJ`dAW}qMs}@=m#RqR7J}G?=Q4z(UAk~*5i1`0~-~4B0UuNw#o)UgNYv%v0 zHEVrq&7L{CD2skEDE9UG#qC8;|MAnC`u`jH<-;F-bmzeK&+E@m)?|p zUcaaDk8bVuqA;y9m+6Tgz3I5kh4EMZ%O|qmmCrZCFLpEX-~UI}4gS>-9dYByq*6!{peuU*Zfu1kIaLyzW-d- zn}fTu-ju!5|KJTe_Y;c!2Mt#?^}Fn*j)!{UMqg8LqbL5vAbySyUdnotykR$G@AN|?&RO3?kTSoqx!Q?sXzPIr0&?wh4ruI*I>6OwvOrCn;Ty7r2NZn>iB&8Eq$6* z(wn`bjfZm(pU3~Il=%mvx_+^z*x>%PdO)@R!-D$w z{<5GxtV?~&X#L)ac>T+s-gD&)OWwm`R_Vj{JpzA z_;=r#?mKg)|8}SDf8Wy{_?BvPU&FO`Yoo|+>Ug_<=k)7aSzq({tY0^`y7j}qYOfwv z|9!c|OPZh9&BL*t_|cohjoysn=RD#@UsG`>yBWkkxF*Lv_-TuZJK4=3e$FFq^d@m* zH>3DDumAO|HwSOedQ4?BRzhG zW%gh5ne2aPmT~-}b6IbeugiK<_Ri}kPW%#oP5DiBGw{!O_(gBx7rPnxr%&-q{c6f@ zvYSi%v+wa=Q~MtO^lxIY|I52Ie=f@3zZ>?B=y%yo9q-KF`1jfG>StS&-()uf|C~qP zpf~9o>}J$IoX7k@U-MGdGk>b%Vf^e{^d|cjof++4&ZF+=P3n%_jOx#M)E#|I)jiqG zp#Gf4+(2(KH?W)0{3u?`b?ZIVqUx6HW>7!Qqi*O;>W1Bn>c@H14Smf^Sx^0{6 zICVpBQa9{oR6ow6Zs<+wme#Ep)sOS28~U2hWIgk%Iv&PP-O!uV4V@X)kNHXeGQZ8< z5yc|A8TIerQ&~5Bb3=64%}CFj*!rY$ulZqK@h1H)yD59;^%EyL;y2M@HzPf9q9cA2 z9dG4C~;@_lyv71r`F zf9d+kd%J$ro$EFi=D(%y{VnUw&EHh|in4d+k2<^VCVt!f6Zz*n{IY*c{3m_I$Ul9C zU;59)f4l!8|D1rL4^^~@=B%r6sNn%fm4J$;If{x#8KH<#%LU(9-Qcqr>l**oLMPyg1euleV!@0+)F z>$y(y&h?w*9lN=3!a{f%&JM)L0*vY@Swm<7l**o>@bMnmoH_2n_ zi;A*`dh&$6<{z`ZG;itFv(M47|7%K@>}H@R&*;d1P3e-|4D?(l{YU&YwGWfs4Em3K zLf+f|$UAm3%6~df^+!+rA$7-YE~`ItmipI}mVLn*i8poUpL5XRw9!2pYO&p z>-lRge|$dV`b~6PzZvQI{Dp3KTSIi%%}7tqHnwxFYW_Coa>Ly2-aqVfbnO3{(j~hY z=*csF$iKPy>70L4_RjrFp3sp$6CHLl(zDOevHwkU*v(~n<`jC9Jfw9i${xm#j`&UV z>AEULdh&;k{F&%eUMq%r?NdI#vwuxKx3hoEWuM>C5xPlg{a629Xt?=f z`Ip_)@lO5t>8#_sDy#$1VK*1*tNf?u4Cz)bWIaTO-L$^y3Vl~my{0Zxua)%L@Bdj%pZ>Mlsk`qvxqD)2HGPkwj;%ch z>e%>xO7(taytlmL=;_PUtEZOfhpjnO`=6ad%rku_X-ijg&#_adPZCh)6}_w#SJgd> KS6tD`!{UEa;dinC literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM02W3p00L0p25.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM02W3p00L0p25.gds new file mode 100644 index 0000000000000000000000000000000000000000..9b159cc150a0aaec08beba49aa7557d2c0b91da6 GIT binary patch literal 11042 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM02W5p00L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM02W5p00L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..b04f2b648b1137cd6e11dca4a3996e869679e806 GIT binary patch literal 15202 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 R^@u{h?fVh`l+CPL{Rfeg&6WTF literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM02W5p00L0p18.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM02W5p00L0p18.gds new file mode 100644 index 0000000000000000000000000000000000000000..273792844566bdc48c06baa10a7ffb833cfcc220 GIT binary patch literal 15586 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 NT6bgqS>4&7`X8VZawz}+ literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM02W5p00L0p25.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM02W5p00L0p25.gds new file mode 100644 index 0000000000000000000000000000000000000000..c5fc6667717b0ffdeef39ba6cfbd8845b838408e GIT binary patch literal 15586 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM04W1p65L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM04W1p65L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..0e73812f4523b9873cece82a6fce6119d39b6652 GIT binary patch literal 10574 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 Qk}~3I(4WyPm z%rWMgb6w6(RT`#I+C3Pi52u0t@focAzIRwX@`cCtzjxpA?0w5~4=?1wPlDd7 zE9reaOR2hUn2x3D`eC{u?YUv3@!p!!hdH>Gd& z?`-4ayY8iwO#963{EQ#J>2aGL|4mK)?;56^X@mS17g8F1rHrrd_*6xUj?ez6PXE2$ zKlxyMd~~kuzn-6?d4Bek`i$PLI!jZ)k7G`@%gPK9N$^&DH&-od4e6 zv^U@%ywIV13Eiyy_4=2;-5)l7uXFcc8DHP=!Lj!E%KEMMx4!YSFQJ>8_O~*A?~gs> z&-{+C|vnV))m^zV5!J+G$ccU}MUZ>+B``=jgMSKr|)WnM=*$CzhG zUC>R}r!RhY|Lr@@{vE~V8b#d6uUirq-HhV*Tpw1>KdvuP{Mm^TcYaq(;-Z^T{Oyazzqa_tdyBu}i^V@S_s0IoQ^jvqw->)DJ&a$yR{ZAl zr^RndU+Yh=>Ri_N2j@G~xU+5s|J zX#N&=7T@AOE%Bk7+xe*<{)Va>e&#o zJ-xRjd83h8&CGYt=Taq`r z8Rbtq^2Xm#d1u`W@~0hn<2T70-Hh_j?UXlu@`vP&Zbtc!|6cN*{IDf?qnlCwv?Fi) z4V8D+%^-i;F>d@O<3=~P8$Wf!Z&J71Z_TKFqnk_Kqu;b7Z*()tpLXPpzoGKZx*6n8 zJI0OQWc=u6G=AM%rMcoS-rb?%X5HK-K6NL)N!^KWM)jYm9r0)KH&ooLn?ZcW$-4>0 zZw{0{x+#6_^@}+8h;QOUHzPm$1U~i+6Cb*{ou9n%H&ovE=Vp-qMEf+piT3S=@@3r& z{G-1X-}t*7%9nLB@Dqo;iEolOx*6q99DKw#@u8dc-=wnW{gm#X!soA*<2}z`<^Idh zCzndzJnvG!O!7uI>-_uTbN{GwZR`2f>7Tsl*UWjTe>2Lj=lN=N{HjwP_onr`?fli_ z%lEHOmixb9&FP=&`@fpf*XGB4625%@R1<%`|Eg(!U;TRS|5xU(=l*=JK?Xy5;9D(mx0?>{|%>;wPM`Jny5oPAUOmu^a5TOY0?__)59_|VPBpZ5{@*&pyj zeCTH6=Q@s$>$-^#-HiO)2jb(t(8PysMt-mF&HHoT`mXE0%+FV@|3#fkw<_NKEeAhQ z{iU0m-Y;$O&wf|@rr$f5(!29_r2Bj~-ci=q_?Zs1FJ#?Z-5%Y!_ z#hayCNZ^<)$ z-d}3!_}clS-Q+vPZ&nA2-;^Hu$A^l);a`e>Y#xgJ!@m{3Ir?7lo6^_Dr~ZtS`Zv6+ z-_gwjv7d3`H>m@DQ+gPmapE_r1AbF_=+EzEki$F z)?dCq&^+b$TQ$iezu&4EoxijrU;GVK$E=&d`k@_l#&5C?&`s%U=Rdc*T>PvT`r$l6 zH>3R{zaLS&{C>n#KUp_}^~XGO-ZTFVRmZHG!TC=+#);qLyhk^sug#x!)Cqq>jXUdR zF#h};DSv*xGv&*=xs9LogWqHx@te{5p&jQNev|VE-Hg@`?WjBchN^qk&7l6Yqwe@k z>W*$k^}pKq^UtKbZWoi5tXp(5TEDc*&j<21)V`5*GuS^k&zU#Qf0KDbH>3HZ9rK3Y zWZrVWHKX~X9rK32q2?{?W-x!WW8Uza%p1BH&EM6==RTXdasO>nH*_r4HIiEImPmbIzjZglL#`rGP@?d(yuIh^q-FN1J<(D5hvwY~m z2OcZC;_L0Ty5(B*I(_9@^g4eo>UHJ0!p~KgR6U-nPPZKVKGdAF4g|&lO@jVqb=zN-PAbN`X|3FzDnOUV7w3?x*7RL|1G}p&syR`HzWW2 zbH%sV*%BYRxyk?8?sF}*=lc=EPq*an&7ZulD0=?neTDmFeRpfIt2%n(@bOP*1HVx} zSJRvRlC0iNe)9B*JC3dNroZVoW9#mD&Di)ZTKz6?wyXNc;Zv{EuXmN(`Ny3-w~4=b l&)v}9OovaT>y^#vBPUOtU_fg#`oDVQZl=G-sd^r#{{bf|95Mg^ literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM04W1p65L0p25.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM04W1p65L0p25.gds new file mode 100644 index 0000000000000000000000000000000000000000..c38358f8837ec11b2fa9442e709050e466cced3b GIT binary patch literal 10958 zcmb`NOQ>B}9me;0pL1WdC05dA;6SBFj7e;h_|8oeCHTUd6s4j^X_JBWaY?HXaUj}B zqtuF8X+PROJicUIdDFtb9P{o0Y3Zg}cB1Nbazu#K>+mCb4{@+$}%jMVm?e(qy zWADB8UMHs*7yV*T?CbT5cNabV$4{^I{|EZxdp>>f(3=m=&)+`ZzA&F(I6uGZ{JDGQ z2M>Mr*!+|4KX~JZ4{aa0>3s*c58qT2dj_L-Zr*?Ny-)t|@>@Cm-ocfNR{zLkXZZ7SAxjqc; z%lGo?k8AcmFTZqCYsk*)$Lovk9j^P{a}8e7T0jT!KgHqxZN%rkM>m(=zg|D6bD{pUZb&!nFV{!aU$2i#)~DQ` za{kpLdHyxUAP!_+baS`)buFg)m&I?cpXK`2ia)s~$DLkVlep++6rcH{_|5fwS^U{+ zbKI31Y7!USjN&tY6u+fK$n)Lz$17PMmR?_)fA*z#e&4sI?^{!P=k>e($GE=Usrq=?-_N}bc#D{K1{=wrKdq8XTryBgV&NI4spgaEPhU^>t zvO)QhZU+AGgV{IHwM8C@@+I92{F8rY-}HM8%9nIA@DHw6td~^p6E!D4(%;fe9q;Tv z<3>7v_|38UpXMzoJ@gM%H~xys8~@PUCI9}D*>9$MT7FY{XZ+C{bKRp~)ue88Gpe6) z)Q#Vy{xomNsD8##H~xyMJLzUnKjWwyznRt?>1I^_>_fTk*^4!)8{LfRXB>6oH>p3( zTQaJjany~!qUuh%8Pv}>>c($UH@X?sKY3Tqd-9i>pk3x|41O^)rsT@tf3*ZbtR5-j?%TTdzsp=w_5Z&E5Q*cl;)O!*53YV;ptkH>n%ljOu3`eaBx>eNVa> z^nd+n$NN)7`I2r1e%^D)oA)1+ zywS}lf8KNO@&04tLpSX&-%s`aR`0)-yg#;%cfLP*e|DSV{59YI=JdXN|C`cxKL1NU z&k1}yKTLe+X5?p`#mD+<;zKthKhJM`JikqR=w{^SJqaK0PbNNe)Ba`s=N?(upS1eF zWdGDUzGQ#bI=*E8**ebt+wrHmZS?u6j_dPN@9!_`zSbT#t5&-*&Fo`6VxF{K$%oE7mGiqCUv8mQT_Cnxb(fE;wIe;;?rk* z^uMBfNjC#OdEz7git;7hjQo0zq|d#cXz)++qnqu|hg;{5ag$3LFTcs>X6gAN-xBiWfWM9SKXaCqd(%pZa z^Tgr#Z!!ERZyypnr^` zZ}?66hHggvOP|jue)@dIRNSPSL43whH-3}4(aos-D-oZ%iEmOj^P0QW&vk>}|Q{6w`KEw0%+zVq(e&)qTq%suDkci(l##hlguI_p$B zq$@w`So^RmKkM*fG;6tURA1}QeU|L2^Lt~t?;mgITtBFDq)nAM{jE-rbW{4y^IrO= zugSjIbv5y!n~|UWY1((HUnY5=o8EVJ)wi%OZq>&;-$gk4PU5VMfYhBfNGZ`C+aX2asYD#tRz literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM04W3p00L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM04W3p00L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..3ce81e362913e38bf72f4405617d0bfde0a3a7a0 GIT binary patch literal 15612 zcmcJWU#O*38OFb}|DAo#*=Mv;%bbdCyb!4o4HHBg9W!%O7{?4NPlXO<=7^)B7nKDT z-b5i0B|%2ezcE5845YeILcHk0uC&Xnz{-d$=&&O4gsl;QZIy$_y$4JTazx^8z-*B+m zJx*GmoJi}VS<_552hAnTJ_g>tJ8D_re$9D zHIrR~=H%vV=B)XduHykMhg&-Qb*q~Xlo?#+AN{Urb{$s3pXu;LO*guExZgj1UVR-= z-}iL*QqzQP9_jaQJR|S@S^)A_{;Fw0H}7BYU$!v*Q*^DDtM5(Fcm(l%D#>v@^>fPMH`lK#e$%Jjvh_

;El& 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM04W5p00L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM04W5p00L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..a8caafca83bbacb65133f851c1b3626f6adb9cfb GIT binary patch literal 22076 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM04W5p00L0p18.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM04W5p00L0p18.gds new file mode 100644 index 0000000000000000000000000000000000000000..bf1123df94cb263cb27f01645ef0367ab7236206 GIT binary patch literal 22204 zcmc(nZK$nfTF0Ng_F8MNwa-5L?DMjZ922Z2gv_xc8lJukM?Dr!zRmHNVUwE%6=6(8 zvoeOFf=CSd5JVcN3{rLwnQ=x?iJ4v?GW;+wIF<9knr}0d2uZ~h(*Jke_y1mN?Y*CC z+dfEVIQ-`PpZkBmUHA3e_w%gf>c-umTkbAd8gxI^E$M&!Sz7r2R}RLHeg287u0FYS z|Gis}Ji4{@=>1y{-GARNZ=JmAS59sH;w>kyx$7q$IeGHtlaE|=s_Tv|k3MzXlh^*t z-~QSAKY8Z0AAkN&?mpLDGD>P6|6gh!u65n`;Gny{8y_EZcXZ>6mby_lzLkj;NcjUzQmma?Nz6ZA+f9$@khaY z+@*w7rcVBC#?7hzE#1`ho!K_$KYDfXH@;c?N6o8q|KWcxe)Gta#cxVa+u!&~@tcQl zDt=RX>OWM+Z*EMB-;|#E*X#Hj>$um=J;uLQ$8R2dvb1kX?`?k|?^Nw9%VVzUZi{Y8 zPyG{l@tf02i{F%<`d4l${>FEUf5p5h_m8K=-}qedkIiZBAHG@q=4h+8TRRd_)bTgITl@nv8UN}hO59epyAVG}+|bP|ev~6__)Ov!^;Tx_qa1O=->80v zZtl^4;)cKRx#A~&)FZuj{QM&gEUX7QsOal>yCzo@q|iy!5P8~#T1J9IONALWP}{>JBupZL}5>G+8o zev`Q2GqdEJ{!cmfJ^Uv79=e(Bf0Se2!*8+|jJ@ULA~{O0C8#cxXQ z^-q3K{eD)t|06TvLpOE3*FX4+((mQJoN@K5TFcVStpC%0Exy(FXT*nYX8!TH;#>K- z8S$Z;nSc0uW!$6RpOJB+o7=`;&YzCoZ zXXN?$U8sLehhF)+gO|@pz366E|Ju`e{riajLjU#={{{a(;=kbENBkH37aD*3#E11` z5|{b)_|4(<#b-)S{ezRm-}p}P56qMOe%?xwH@vNEd_(_6HX$Q%47c@y%H+CzFO8V&$=60$3d;z(9LB1QjT?t z&t%=Ao6^(vS-1F2)^F5XnXO;Sv2O7*n--z4tnru5$U zQ;xXfH;I4LTbae5a>N~fqv9UAnZ%!R#2vp$+|kV}{*)u`_!|}X(9I-Av+7IpU7rB<|>@^xpVWj=1ADiGS2vnZ=)S z#2tU5;vTx0#Gi7+9luH3(akLWlq2r=8x{A^%_RPmBkuT3;*M@+@uwVd$8QqvphjJUIi@#BM8@id~FXcG5(0=3j;^+Kd zulKgkI>X2MYm_f^Q`-^WH_dx(g^&AJqkN&8iJyHAANyaUe4(3(pYd_-V*DoO zE_5?He=$ycjNinEZf1VQiI4G{_|VPF&p7cheiI+MnfVzf=SIfg_)Zx==f`@zH-3y0 zALDP7FLX0`eq)^Y7=NRDp__@HapGhAjq-(VCVs}pb06b3dG13uv*$m?iI4G{_|VPF z&p7cheiI+MnfVzfKE`k2LpL)&?!SLij(rQi$-aedX8RZA*f;T;?3+<pa|61WogXMSJyraT-zk3H|JCbh`<$C--{jnc&&h-jJ?tA!6 z?tA#m?EXhN?i=_U-za|WU-f$0K6!`VB=7K1T>> z`rmVuFLX2Uuc)82J5m1|u;72#&pC>AIbWHyALpyetbNMSE`F2t(ao&=xDTj(?hmvNX&>Fp+NT`t z;xlO%-OSqO980^LZ%x{b^KE6;KILc^ze&63X4XFEaD1H4O?>F)UVi$G-=zO>zOT&s z&pI97Bd_{kZs_|K=%)1E^~e1SANN-iAG&G(e)5a^1owUJA71?T_c zT1WpZ|Ftvvdl#mz&yR11Uo9_wzv5BltLj~<)a7}<{wpSZ|D}F^f_2!=4Vn|yDd(Qh z&BgoQf}i{zOv?SC@s)Ca7?_Li?-u;zAwKf6QNGa4#7{r*(eFn2LN^mXd4P}nXp}E> zGx4*I@v*)et|v9raxMI({Ij*58cfC%oFW1eq|5xe1 zdE|?w|EBcb_VFLRx%eCZqxg@SH|PFi&lkVB`RU>}rKjzar>sA7I4*uudg>p3srb#& z-NkQ8@Ab#|c3Ad5@}Kt*;p`A<3W9$%yK zK6Eq5f69^f_#2h?p_@tmQ;xjHZ<6=uW|sd^PWg|Y{D@r+)T%{3db4Z%R-7 z#2J61;)tJk2G8bx;*8%Uj`&RJz3r3d>>K32$-aSZX8Q;01Rv|i#D{KX{%A-05AC!6 zK=vJUGuwZn9r z=P%}2b(a0QN7;Vf3CAn;WOEX&`s&7pK}L(lYI!knVml<$3BI>@qF>KAJyw=`|MNr z8$T>Q_9Oh#Q$PC@ev^F&pD8`{vrpkS*@y6(+4+NV>{Iv~b?yk=OwJ!X=h07|{~Fbw z(9LB3q#W~v-(()p&20as9C5;L5{Ia_GCMy|j&*|HWF17kmC}3XpK`2I{Eb?Vp_|G1 ziE`u#ev>>vH?#8_@A-&3@Bd8Vj&5f0ryTQ)-z1JvZ>99!@l%fZ#^0!ThHfV7pK{DM z{zkeX6m38MQ;xjHZxTmzGs}OAJ8zK6e2@x)I&gURz3 z*U3Bljmo>w%{}suIJ16C>S6tu(tG<)o^x&_|4q(e=w^0)q@Vcczljgs%>2=g&Uv)Y z`4MuCLpQVYW3(e5?c;~|(9O)xJkd|)uTk}cZYJkX%FzyflXZY@O7ETjmAA{j%lm8g z-=OLW-P~jU<=n}L>B%{0gZD-OSFfd``r==kudR)e*Y6+xqwC zmw&G_^F7Ml-%LLM;7)skMGG+51;Q+AB@jsrJK@Ye0}wA`+i1we>PXYw%_vkaV7J>=gOw!-uate zS<3NUN6JI`iEeuQb$s{CfBt;ncjeRE$M2t1@_PX2rmoMozu>3u_y?EGh>t(!Hvcco zfBtNr`{8!c@z?9~?O!+V=XXAq-qK&)!^}WK6KOmwX**7`!V{p#nFymTf92{T(k36M7uk6ws=*ygz=fP*WGk$T@4pf z+xRwWyW_Sy&)#rjnVVXhe!C&>8^6#w{#C{1ue!;J@lRiOZa;qF@^^ds$8*21+B-LE mf1udi(5-7UcV2(TxwCYrcSIklMt%|IkS2U*jVr2o*!?dV5UWf8 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM04W5p00L0p25.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_aM04W5p00L0p25.gds new file mode 100644 index 0000000000000000000000000000000000000000..5e100d47e8759ef9da6ab249a0849a4294dc0793 GIT binary patch literal 22460 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM02W1p65L0p18.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM02W1p65L0p18.gds new file mode 100644 index 0000000000000000000000000000000000000000..9b8a81ab93d55675feb1c9abec5f205f51ba203b GIT binary patch literal 11218 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM02W1p65L0p25.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM02W1p65L0p25.gds new file mode 100644 index 0000000000000000000000000000000000000000..142407f69f2d50990ad9bd43de159782dbe6d87a GIT binary patch literal 11218 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM02W3p00L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM02W3p00L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..921d9a2ab3375c3784ee2c1a5fa57b6aab765b04 GIT binary patch literal 14706 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM02W3p00L0p18.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM02W3p00L0p18.gds new file mode 100644 index 0000000000000000000000000000000000000000..f35f99dd84f77057920601d71b29590c3966705c GIT binary patch literal 14706 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 Zr?i(-o8F|WwjH~+zv*pdY)4|h_z$SO!D#>h literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM02W3p00L0p25.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM02W3p00L0p25.gds new file mode 100644 index 0000000000000000000000000000000000000000..836a8db7ad671f02f9685295afaf107d96d30069 GIT binary patch literal 14706 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM02W5p00L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM02W5p00L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..720d0b722aecf3e8362a9bcf4fb792cd5bd3811f GIT binary patch literal 20210 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM02W5p00L0p25.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM02W5p00L0p25.gds new file mode 100644 index 0000000000000000000000000000000000000000..055bf2fd7048f657d8c895498b30646bfe17569b GIT binary patch literal 20210 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 Cw%zvt literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM04W1p65L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM04W1p65L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..f1d88dd846f0c876efcf74239290c6bd09efa8e4 GIT binary patch literal 15038 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 XIrXMrPO7)P`*vOO&N6rN;#~26lq}NY literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM04W3p00L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM04W3p00L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..c88c13402239c3869ac6e6cea6895c3d0915dcc7 GIT binary patch literal 20492 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM04W3p00L0p18.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM04W3p00L0p18.gds new file mode 100644 index 0000000000000000000000000000000000000000..ad4c754ce3ee6250a1d101929438b8e91a57819b GIT binary patch literal 21004 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM04W3p00L0p25.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM04W3p00L0p25.gds new file mode 100644 index 0000000000000000000000000000000000000000..be3552b73175855f12fd073fa3185a79b998ea14 GIT binary patch literal 21068 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM04W5p00L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM04W5p00L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..dd06de89c7ef66e310d8f94c31eecad73e9975ff GIT binary patch literal 27724 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM04W5p00L0p18.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM04W5p00L0p18.gds new file mode 100644 index 0000000000000000000000000000000000000000..a146eb9544a11136ec4920fb79039124a78feba3 GIT binary patch literal 28236 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 QHynT6_td$+EG~Bc2WaXHYXATM literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM04W5p00L0p25.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_bM04W5p00L0p25.gds new file mode 100644 index 0000000000000000000000000000000000000000..93452aac27d0b693267fa190864508cf780dad8a GIT binary patch literal 28300 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 tqVgW$U;1_(;>WwOdhw0-+pbtbJonp9G_i#I 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF02W0p84L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF02W0p84L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..3865c6620eb35774210b24c405fddbe4f7a7b4ee GIT binary patch literal 4276 zcmbuC+iM+F6vo%goEf9UHtO*b%^x5V=}A&)i&k@Mi>M7vQi=r`D@|TZo6y!mD~jNg z2womUs}%(wL_|~&^ic$TYN7a6@Ik@LgLp$k1TlW!-uvs!oMgtHc*5|VtUbTI)?Sx$ z=2&L2B{merw%a27@fB6xkH*>YM^BB6b@Ii-`O2|8Kem`3U0gVkcScTb&zDY~$PexA zj2`H$Y~Ol+XJzCLvv!i+J@L%8`@VSl*B#TJY0My_I{nneEk6S`9jkdu^;SGtk=e$Jm9(H&qB%3E?t)o{mD4d?=F5R=fK4uRPzw}&*v}j z%o920PfFh9FK83b`jKPbNZlO5E)^f<1O6N5qY_{A24Z;`7rqCj={Gnp>{8gv^Vi${ zp?=-@Z>S%hC-5B|zT=qZ9_McjufCJ2@1$M*SK&7>ziW8GK9>6iOToBVHJ{wn^- zGk-mNepGnI&G}1yD%8yl?9#6JsqoP+p5uAB50xD4(k}jqO8wFHe5GF%+WNr1m*T(j z{Cod;MmvYaCvgoF>iQaXDb{QGGC0I@-)9e|uiac*sj(@5#S7DdMW- zBb<|Q<9WMK#O>_T|KJ%nc`5ypmo~+}o_}#t#UDPuP`}2{uWEgJ`1}f=&kt4l>-LbB zy@fI^gI%il*5jkEJ;&TI&s29V*riQ;@|@?=_X{OQyR?b7FFjYTFFD$!O?>>6=Q$sY zUvok``LJH@uL+kwJ-@N9GzUS|CsM4}@|q*(A3T*D?b0S*TzadIgGx^Og!Nkgngf?V z_*b9P&V9mqE&qT0yZXVe;*ek3=|8O3`e*KWt>IyFykB>GzkhxncfX+ST=N@l@C;wC e`seEC1>|s_ZNe|0{gZR^v-}z5t9S*pW&Z+#xb58l literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF02W1p65L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF02W1p65L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..26ba4259a80db99d1e0ae07b5b858686bea177a1 GIT binary patch literal 4808 zcmb`LO=w(I6vxl|oQcLZg=r;P=uSjZnh&EbMM;{pB~&Y>DFur>70t$~v6ey$f-6A^ zx^fXeXu*ZLDBV;jxDvsYZUh$*7u_g`_(dtDAjb2*_x|U;_h#NrCpcaFC+EK3J^y>| znUi!Rmsk?n8O3r)BK?O~RCzxc=Wo1xZenV@SbnisIb9T|my1`IUpiBaPn_LboH~1^ zc>d7%?%*bN_(P<< zEbY6i)?6LdnxChiXvXdz&3HfVe&#A2x~hAAtsOS!HGf5YX`HI-<@#3m z^swd9zrBJ(oEqZgH_Juudj*F$HN?YbdeZu*W|{R*)p*c9IQXZ6Gv{&|;^7k<{8Pc3 zb2$z1$&>my(D9Y%XQHcL>d%N%w>A5ZezsivUP+ZRacY2v&-jM*Pfb3y{;3)d)(;%& zM+JxaQA0fL4;=cB3J!5;tff-}CHhIrHu9PXbA-qh7; zU!L>H-CzCw``zDm{YdEVSpEFVopgSg z`cchX(>Rs$t)D;KA2{?6)yz@MkK6VhLp+`= z^@D$K1I*t_{^(CP_tXdGC;VV;nmDyO|0+Cuo4NaYNtH8kYJlIw{Hf#zkGVI%{H*Xe zFXtwebCX(|pFKS07S2oEVE$Ej^bhi)|Eb7}I5m_X&v9;2H<+JqRz8243a{)ZudN^L zd#e7_+kgE0U-Wa4bCPqBTAPo0{^0zz_2K^CYW7L3%?n;zpXr%3PSy2he|YWz%XhWL zYdpx;^UGD6zpH`#$$9HL9q|g^h*LxU&2#D>Jp3E2@ge{H^24`@Qv?24XXb^Pd)2y9 z^&I8;JzMUt_$_~K)RFrjj`O?qMqa+ReEt3r2k+J!`Q%;8XIH$Mx@(+TtAE9Rblq~v zKVHEhP7U$0+j8+yuiy};*7(`-?^oPax6fSPp$`zF>ihEft32xGII7`LKkQ@I8+qIp zxa>i%;LJTb4dqAwfH(K&6ujvxry-tPxnIE}P7U$ocnl|Gu0t-yrPo l`3`1u6|WEM|BLbWW9xOTWqPO@*h4*2_FCe literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF02W3p00L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF02W3p00L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..2724636bc6549e9393cc12a7e2fe42b90a81e3f9 GIT binary patch literal 6516 zcmbW5U5Hgx7>2*S&pF%qIWtZ%7L$r~WrWfE6eUs3_)Anujv@$gFdQM8bWjr%0`Dq< z>ZS`zFz6zJqKksM3xcA+AcHQ1f^G^T`lE{wqUn9tTJPFtpW|L*b3~r;+xyw;U2CsB z-}YExxixG3#U4hQ>X9iES^5q zIlOCf`rypcqOh&a)>M zI>(PKp0VZ)W~;txK9aiXfX{l?iqYK0YzuQ_uOiSn@Y61S8|vb@N~)c1u4BD(ot<%? zyZ!v~pUsB8u%U@!$G*9T_h3$(S4e;>lnL@hv%wdzB1s}2thj>9%l}^C3eN96uy6a$ zRb1gWvypdgV4~PPw?Fvd4)_^_Jz!s9r0r&{wI!F2W4EF%;&}fGXb-)Ean|GZ&XgQ| z0DA~^5yzcB==Y!>f7}MvVh`F+HtzP~EbjPi@Mc|(+Vit5{(P7FO2~bs{`y(dpPyqr zczx2A>(5u7<^_L#^FoITB*Z8|6J=VpPpPx4y!1xX95pfVc>mus4<2QGEulZ+5daR2n-+u94 z_F74Ltcxk1Ig8(YesK+Itc$28^V4H~kskAlDW5s%F~3NUbur~LXX|;NUo574ei8L# zetOI=(qn!xqy zT*1#j^1j$O?0pgSQ<PmlQ{;W0mb$Ar(E^q4;qo~w)3@1N*+Ki`D+!m!CfKN5W(Nn)i>2&z$s_KN7yHi;3}h z9{V2s$gAGZ#A^TR8=rljzNq&Gv8Vr6e9n^|=P&BLL0rjaZu*hP&FeD1V>m|vvFx|s5r zKlc62ejc&!U-tV5$7`QI=A_U3k?>qyO!&-6kNG3vxw=^OpX=^FIMaPv-<2G>)&DHw zU;X*j|1P2L;s4mpv68MYqb}ljt=~9{t517B@*93UZ!d=NMdYE+T#k!rKaLx6 zL@)R_UYkF|Jn838b`iN;01SSQk^i zedE3E`%8~?G3DpyywB$Y=lSOZKI`*U#O*z*K&&Isa-N z%FUX)jz8}5xBc@q>%Kw0zwbNviSzut?!TAh_m1uNY!u%hAJ{g(e;>aD_IHsFThsmn D&(gg? literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF04W0p42L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF04W0p42L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..f8929711976016b0624e8d08a96fbc921bb89520 GIT binary patch literal 5720 zcmbuDOK4qH6o%J%-WyG8gj9)k)PeYjnxqk1d?n4Jw7xJ&u?TYUl}U?+S_&2g2O^k( z6A`Vg4=5rCI&$Dd2M!$BiBKUTr~^Atd?7+bG5-JBd)>27a_`PfyrukMo&D{#_S$Q& z^N>#$6r$Wdn_%VKJv`y?vd8w)2S=91$L<+f8ofniFe~nyeCgJ^KY#DHz0)7x{Lblz7G!4;@lbBoL*5iAx21AY z%I&EP$nZdhuwN8Om!Y2o`hmBbE=zv7i197u2R;7-xNk)o^OfcgfQQ`_*F%0<`C-Qw zs~9_sz+MgXGZD3$4tM9%vyRL51`1B?rgeTMjKBC4dv^~0zp6C73;tm@#q}`$8lOJu zxa?%5>3v{fH|@y#^=s~TiDYw#-}FbY+!NDX9sFDVE;z3IFi>y>?WUgZcl$ppLA>|sjz3sPuOepti<;$RrU|s zP3t|U#utA&zI;1SaB4S=@Qt&MYu+0uIJKKb`1F+HGSnc~p$bmzrV&2h@3{Q;K*6cq zG{TpUIiHPff&Pq*pxxBhr{CXN{_?*aSG*f2IJKKb`0N$O<#z-MPVJ@e$+7-T$w;|ug}V3ju+F9kbm@kF&&HZ>0$5R6!DN}T&joTeA}=0 z-{w4z>s{k7u0@>S^x5AOajV^Q1D^5gJAx_vl4l&Mk@!3LZ*!iH#jo!gh&vx}>rh49 zYB!C<&vA^OTwCE+?WU3VJNak)As>rBL7g%G`tD?kxYceNiJ#*bx4vVU!oS*0Bk_0g z&-g<=8vo|+KRAEU`_IF*^L?Yw4_>=8Pf*4uu$!)luf`|eIWGIBQe7YHrZGNy*>T1D zm6D^~G{zUVJFbDfVf<8bw428G67Q|#`Yx@M9POqt9`6S0>WduhrZGN!-tpo2B1gMv zjL&a!eAr*e(QX>!3p^X)y7p&NawLgK^{^*r{wLf`{`PcdfXY&}R^$*@(@9Ljx=Kpm( zV$yXWRtL84?R|9n+LgDu>E-FU;{HlRJeCXfFQ&xS&;! literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF04W0p84L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF04W0p84L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..d36481549040af4b2f232e921a4684570d43d588 GIT binary patch literal 7344 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 VpL>p-J$Hsb(n+h>Hrv4<{2yo{pcw!F literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF06W0p42L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF06W0p42L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..975fec49b3877da7866de38f9c82312f848953c3 GIT binary patch literal 7800 zcmbuEO{i5>6vy{H=iGBY-pdqTg&!lESXn(kDy0wK^W%wHNzW%m5tpKDkd&DSN`X-X zIcSuiWmpMC4H`8Ff(8w&K~5S3Mvx71U=&42M$zm4Uu&;>_BrpKt=_K0|MlPJclO$Q zuf6s;_qyCAE_F*9iJNi_{Ntxl`g>)PKmYWB6|2U3yPoLn+1u;w-PL<$*OU8t<16;B z>FwUXulLy0`0Wpl?^(U_-tj#vZgXxdZQe8a+8x_Yeem1bji287&RY-9xFyX<5BZh$ zkhPu5uS(oOm(NSwe7Aglim+dDE;$7KBG6ObH$CLC1gSd5jW4_x}~_$$AO-APJGj)^?Y(zxpX>EaN?Ur z_|AIey4^s*iElcHAJh0di!e{8G0v5RChNe%H%0s0@q0dbT)FgMq2%bB#`xyv%H`h{ zN{+s1h2I#?f9Da5dpqL&Jm8PEG2qch<5Y=Ux;wvYk6LbDq% z1Mp4J9%ev^cc&5Q2Ioe;EOho+uIB8lDca}qmO)q0|24W}(f^Iyv059p$~fizen)G3 zen-1=x}!%>L%6F)W+cu_Uf;T?*S9XluWu~Z`^!9>@$+y-#~X_$JFfT7j$h*bnclzi zzFtpt7wYfd@Ym;<7mk;DIoBt@>h;vv^){c43BA5CQN%xJeK?Qld!_Z?5bogoL$o7* zS~~*$1##0iE$2^(Z%!)L{5eo?;+sbJY_sm%%vTW6zmWU%P0JOa)PHhJd5(dVNEDp- zrV+k*LAm@ypy0$ejqncRX1|Rifr1m?G{Ps(Y0T;3KrwIPn?~j@J)>Oqa-iVEH;wRJ zUqMH(-W-Q0;uhaD5`X6bHL2!HI7g;X4O(+}-N~#kj>cjf}s& zK)Lp3fr1m?bP#X#6Z( zEA&m_hxNV0a~;WXT}{c+H;wV!N94G#Ov%wVjq%(^M2>aIlpK9i;|Hy8Sbv9U=lOx>h}!kF`ccjQNd4$Z{kQyGhjILX zeAroN#<_)WiuSPo^`-OUgyu#Ib0X&m75j$k-PiK|De*(p&k{dG{V(xD)c+Dc#Q9a? z`J~HvOOc;_#r%nH8kxWJPvx?A0|h6(X@qZXQ;ze%{zbuwZyMo;I6q3`AL9Hd@k5*+ zCBB1w%yIJ#rmq;c_@5GOylC)aia+P>Kfiw) zU!xUokMbtyHTe$b1$=x!PS8Jn#_!u} z=U=Wv+`^ew_*ndd`e*#&n?~Z7Z+;MW_bVL-m2uNIjm^JYhq#3^t?;q<2ldbR#W(fw z`{x(b&*J&DbrE}|{C=tRHK%QwGQzFL3jllSeleCx3C)%r)Dyl=1NJ8P7$ z)*t%heS64HhVKuo75q=0L%gEih-ZrST3*%-TzKA+lW(xS#&}sb@Zot!K71aC@v?5< z!}ErGcpk_2?l~Rn$k{^4(>IOrvhL_VJTJ(F=V^?Wbpt=Af7V;Z0gdsJH{ip1PcA$U zWBmW^U-l>ZpOZh_zlg)P*XECLmPeL1^vV17THf-`^2qXrK6&3>%lGq+zocLs{k&PG zyl=1NE$=K3Y~AUzf8SoqTi)0@+Pcvv@7rtn{<>?P6weW;<>Y;PEid(rat{avJi??3PkKM%hk?OeZOW|}_&X%%ciGxr}!U?j@` literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF06W0p84L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF06W0p84L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..c7b17d400c69908ac84f6d531c28705b2b273fc8 GIT binary patch literal 9464 zcmbuFU5Hgx6vy{HU-x4sQy2?JAHsSNu^K-rC8?QFN7PapM~b2@X4*qjjV6LZ5m*oT z5JX8?hJ{pA5EVf|o4@O{MP)S5a(X{@1?f>29+W zI%}PKuO>5*iOr%)WX4QI{^6%mc)cRZo_OTo@|8o)Jr6af_BEUP_B0>cvwMGYX!(KF z&B+7%n>)vbZoYeHYW1o+hNhO^WXwRE-Zt{wEnB{P=eITMKfCdb*Y2G#i_(CHtXB_7 z&6w&HhnZ50|9Qte{J=g$6w&GO# z;9#eQc*I#*tns(>g2rE=E-sHBe!#(hONFy`YJkT&!D0O^70%kJ-FSEY_3MP2Bm5Gt z@$bm18uUK~^c4~0_r{J=g?|*?$raOzmaeZ*`*;3)Gof_b=PHlk{1u4hHkE|d4=4s3c&rJ}-4mGRCKaJ)Gqk*+hQ?<=pIOa@mQT3TN%q8F<7Eo{G4^Q)h}F9O9;eL;Tbbk8{Ghaegh8xUHQU zh(FpZdoB4FFZ7DMft?!4pZKhD$ziYHV5f%ohIA0DyHE0+igm+I4Xq#Zux{`zm33P? zHL(8rUCPz}&Z%(LP7UzYlgicZ%&BnJPMv|ry1`SiZt&F5`Vl8M#7_kWJ2l83)N^ZG z>lNo#7dtg{ezkeZ)jszM4t8o+p8XGX?`1i!5wGbFvKFyZW!%=E`P%=aes=GFuD@%2 zb=SvzAobkdA5`=OTi=|r-go1XN8pfORPZ)GorZYa$KY^(Q^DK&+i8eL9RY{>LIrQ@ zi_;K~JOGFMpn|vg;WWe}55XZnso-sXIt}rt&El_uW9=?^Y?b)4-3D;E6yeoJ5|Q>{Ai*7pHTnROVF51y3s@bFYva{vhPx*?pZsvSpPbB`0t_r6?p71>V6OXyMu@S9{P8IM;?Rk z;rXS5NBliJKNWbqQ$zm7a(_~7-in&GxZTyq@`X^n%{`9}(HTh6qQ{}JD`swO#MLzj4D`XEJ^qM>+IU#nc zj0gGnALXg!sA3QD?f%Ut>c6D{|M-*>d@|Q7{K8HR#gBQ28$6X9H57k0|A^b#se$;@ zB^q~n$}9ZBP7TG6d59Z4l^it`e>eY#-`c5x__Oac?&_ph_=TMsiXZb3H+U*JYAF70 z{t>^mQv>nWp3%7LgI?hmc4{bo%tPGZspP1k_`CT>{MJql#NUwIm-tNMv{(3rof?WC z^AI<9DmiK>{%-yezqM0c{PX2l33qT4k11pk0{>PpgvK> zURq!9KB&j{M}_#hJpbNbsK3|izDHZVB2FWAYTN!7_{uruu=hAeC^*=uAs(O7gG=A@ z3J!K^h)>rlSG~t8IM}HnKD(e?J@X0EpN#`#J33 z-FPW)&rP^|zXO+l9tioj=O%o<-+<5e;}G9CuW|RC^9mkzYKXVzF8=fV0$jeIhIo5! z!gu)3^@9*^^G5i5y@&sNKMe8z*T20##eYZs$o-2r+<58vlVct+Z(s-S#!GqT9rK8J z!#s53rF<*zPU-o#@@9$pcjKiz^NxAIbB7)AyYW( zQp>@+@lxK_H{n|Q;MNU0csE|o weto_fw%_31+VOvO797LRtNOiUMLsW0M$H`g26xBk_K9(P39D7GDw>%807nH04gdfE literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF06W1p65L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF06W1p65L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..4b8d694dbb12de29b556763593a0f71d23fa0a37 GIT binary patch literal 11256 zcmcJVO{iU07037eIOpE`-m@m~qNFW2sFWa4lhoF*XrG^7y6e zoZne{@3r?n`zANlX_!Xo#=$V1OauFmpF!u(hlcehKK#hRTMlep_~6#X2e-B!ys-7r z3m%hT>4{ts2@IzbgJ9*%?cO1NU+pYH;xOni^lr~4zTaJGAji-O{-9O)c;@Q`K z^K0)qmu{?r4E3rR#?zGQmkraSslINQcBTEhM%L`lr8K$2_>&gDSmNRxX}mk7@kaJf zrur55^(zOdO7->hf8&Pg$SwZ!hP1(R>vQ(IKdtSpPnRz*XLTQ0Lp=rVJR7%y4 zQ(8OSu>MC%#6`Ql=x^p8%q;)t@7Wjeh>I5Q^~r-b`cgyX6(hg;cJ}H&HN+z>%AZ-t zDvr;peE(%)k?koVYqYYnSS>#xN{yWZ;$AIsk8 zOhY{4V&qp>vRD78As%rt@;%S*Y^*GQRaifr^NSYmZNK-^Jo=9h@ra9&@9i{?_Txi5 z;^I=j%(v>2_4}~h`+URtS@SI}+V#cu7k~Ib_C^;Q;t>}k|G${;dHyK>>hrzhuQK1u zdhhtNSLc4O?Q2NCiHqC%f1*AAtE=XH-tK+8VRe&@zr{tn-X8ysKYS{CquU$e5f>wW z_U`P>{?ZVSxET4K=LMVpmcJ^jKalf_7VmAp_tQN3j}PΠ?f`G>`Vm3yczHsZLAiqEot0j&JCCQd z{>z3}KW1+si;H%BaRiG$wAbzA*S2$PHJsWTfVgPa-7he-E{>e+% zcK^D)%^08cbMgIy{ds)6u9r()FX!>uV~@x)@HNA#H4Zh59agKK-0t z>^%Q?dk0E?u$A+3tNY^(>yOx&TU@m3?e=y2HFhfV*T3HokGL55V!xAM0~GnVdPUMJnARndtD17pE}`D zKM~*SS{V7%36J`T_+Hn-$ftgMZlQi6dpB{>;=T1F&+xA~zc~7O&M#WL*QcL&^k2jy zE=E4%jK}zkc*MoXClCE5zevBmU4>EqnJ46B{)pryE=KvekG%LI`Te{ZrY z+Tk?M<6_{~Hg0&6vn`tEaWU|5{nzfDv;F6My?6hZJ(9h(n_4vAR|kK(gV@mRki9&s`9ndf-Se-V$k82Ri|cwNxJ^L}Xl`G&JsnQw8?uDAVT|Ks_)<1)VWdIc7E*m%u_t(uZZXKw=nWqCwQzM5#QHOVdOJU@tD6NzR%yn$Y-Cx>nb&?;nMc&pP4U$NCXD{}C6ro&P%HPyO&#I6roL>V!}I#2wDB9iKYk zQ9lvi>sn~>-uX+N@Ti}N?{zJVeCmX^!smxh`>7K?^%KeObuEnYb06oH70!PP`8jvs zi<~=nuDI>|(edd&`Byl__V_rw0~LtxmWzC{q=8hyC?Q9Zj6J|+U;>M zXg~MSZoD}yugArp{mb&x{iq+Ypbq82M`_v$t`7Lp(9rH z_dnyH_xQe?zg+M2{rzX2>Y#D=_n+l2*L!_`|CsOlMR7J--}0;Onn#*9ng`{2fBq{?zp4Mc{}%WD z=j*+`zjw^jJk-3K&!arAdVS5C`8+K1PV=Z-@AWlrG!HfJ+UKFDe)O5&h52JK`d_Yl x{*8S8IO5-6deg#pR`))^&sX#JN(N7xe}B5pzJYZ9*x7Su_!?8*1t-RF`VY>pk+T2* literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF06W3p00L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF06W3p00L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..4ab700db7130c2bb9559cbdc66568d1832f92dcb GIT binary patch literal 15032 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF08W0p42L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF08W0p42L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..dab8d1d9c0349750c512ad832bffe3f0e0d5f41f GIT binary patch literal 10200 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF08W3p00L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aF08W3p00L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..97fa4c9acbc1064a233f40600c60a9c49ab133cb GIT binary patch literal 19464 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 D7CrK+ literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aM02W1p65L0p18.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aM02W1p65L0p18.gds new file mode 100644 index 0000000000000000000000000000000000000000..75359b314b56aa306365e0cda25e6f4c50d00ee1 GIT binary patch literal 7850 zcmbuEU#O*38OGQC_w9X#Q8Y$lbS^|NP()|O=8tCK%$YHUQekGS5Ns1TbJM5?H9=7l zj53Kzl0dsCB&f@vE~3z@67i-xi7rf{2oglY8zH3Ux7K?0x4wP8Z;d)f4nODl*0a|8 zzU$Ao_CBEr<1h((M&odM80kNLMxFoPKW-lW=41PA+Pge^-*W4rxW3j&1r}3MYHSUi>n4fAnxkfojH}$-%?>7JBFUfCC&m_Moeb7IBPi;38`}Yd| zT$71zZq)tr6Uo2g-;;lCo*4F%Bl%DM*b=S$t>quvDS!Or56K(d?9JcnTXV;}kKQQw ztkx&Gnb&8Y|5X3%U%Zrj8-FS&U)0Ttf3lhO!u&wX(G!Yax~V<5eg5+Jv|IdF^Dn=- zLwf?LJ@_gbk=9bKlyg@O|LB|U)0TtfBNs_n>|-hzNniOKXLMICVq2tTZ-S5 zUY;M@;>Sn)CO+afYkuOyNBkx}bhGAPys5SDs&ap(C3A*u>iJ;&w3}-F@UN)4Mcu5_ zk9IS~kKb$*Ke{QsI)3wE@|*KtC%-9u(BJ$vrU_-RMn_)X$QH*4|7c8VK6@k8Q9H_sP8^M=o4 z-te2X`I}sse3L)7#D{L4&(FN$Ur}|#KQ$}$qaAg_Z&EjOvsS;@PIbdi{UCKiH(kH{ ze$x3{y?=F{_uRkI`R)5re*dh$zxv)kedCw+uk$@$D8-A$p*#Mj&OXkc0|lu&y4hF% zB7WW*>+i3=_s>v#YxlcO{mT2_Q2dM^@0Xdpw}{{DeSi6W_@>tF^XdFI=YPxRf2Q3$icJ&F=o__?ZXx7xS~Cd{H+m{^oPZ*ZixXd{H+m ze&S?*5WgAsg>-Xme{72%AMu;`;=0SM`H2%B@tgS3&6=Nk-1wi${h5}NAEy0j>iOXO z#e3x8PI{3hTo)a=w_{cw4-kLS5)1i zZdU5Ydw@E}`(-9^#P>sHZT-@YI^#EqBlepqeQ^G1N4@c{sQHY#S=qm|W1YtLTPE{} zZr09^ct2E}@qTE&rGM-FMP2gq!T5R3y2Ec$2XwQx{%A*>_)Y2%`^}VI9iMfFe?`>+ zKXr+$tUsPJ-}p_|9lE);{+=w~pWJ_WZ}UB+$$J;w^!t0KN~-&*&X3E-;Z$foJqokX zTrrY!=asYDcE7;Si(%)U+0lEX@e}{X&|Ixr9txk@-Q54+eP_-szxD8$<%18Ldn{Gu zllD6OO0Cy?mr7@y?<)UOUO(16|E4AHpNVu+&$rK2_Rn5RzUGOR_|Q%J^IcTqx1U9N z?#kWxHdQh1Qo8G##2fF*nVyTG{@1?i-PS*G(!Uw+SQ^)qUgrPx@~%frd}luXT1&nY zM>q9+(7(7U`S@E7{Xl%^=9>TBa;dOLRV$ca0(buQI!?oHpruVR}P=Rg@- z=N#ZZIes==tk~{8dg}DaBd2x9Tu_hP*gtZQhdu IGMk3~1N6-v-T(jq literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aM02W1p65L0p25.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aM02W1p65L0p25.gds new file mode 100644 index 0000000000000000000000000000000000000000..846a45def0e99e46f18adddca0dfed8c77d88460 GIT binary patch literal 7850 zcmbuEO~_rv9meN=oqOMq1}kYwOcrk1MXND+)g%_N`D_XOBp)b(UIdecrpb$mLQDm1 zx=AX=MOvs`w2MN!=(3Aq7hTmwp$IPG$D#&tqk>2gR}y@FGxMBt?wfPwt<9B}pLxza zGynhp%*>g4Zm7aAjKbEzFnliz^dFzW!v8N1t20lY+i~~y`H9EpD^JbmPo0>bI&u8$ zeEW`PcF#{fb9VmNkG3yAxMOAKy+7Q(vV3m{8%L7|_FmlegV+A_$$ba@cGn+%_wdoM zby66i`m!U8XCYKy8HR(Q+As{aggb5-DemPEhTjo?({TK1(oJ0-e>H?&|KzX9Z_e&X zep7n%f2|(>Tf?w1tY`euivFJMzdreeOrLg)zp;s*ao4>Og6VNhkH3(A%TNCJP3LVo z|E~C_SDN^9{|91y??~}Y52@eFAxz(GIQoYEE#1`hc71Q~k6urHb9_AcP3gV<$u8Az zNwxWRi@(>u(aoi@pIGtNR4(|*De_RipB%}5^!J8n?Y~m~v7PeAPyUd+(ap~MJ-;+Vl}Q+j)SDgI`C4GzY8)O(%vwRE9l{JcJHc6|B|AC>!O5Bgu~lh@xue!c52 z$KQ4T*cZ@EukVHRoBh*U(|w<9YKRZrw7)Mtt&w8=SM6_U{^ju}Dj)N=8aHHIbh9)* z^)HRz-haFDAAX$19cc~{2V`7y)8lvf<2qZl{_vrj_IK5f_)76F{iC^_$KT)He@Fk+ zSbDaNPd6OwQ6ADwU2m_y1%LJH(}&r+Srhq zpqsj0jGwtq{59W7@h_R%`u)U-kN9iK7j?7Xr_T7Oe@*$KZWjFHIhLRNYswdOa}EDQ z_aDDmss8v)>Am%f?XD+(l{x)$@|)6o{nVZNH~pX?_YK`F-9OrqH~yN+JL+a3f7+2Z zev`b>%~Jlco$|&{{*b)U%~Jl%6Y^*NnB9CyrXUw@~0hn<2T70-7MuF z+bM7S+`)&;FJC zX8c|yzbU=_eBakTUs6Zr747l^$B%!!JNawAm;7UMcfY@SL2cQezTKksg{Yg0`@=&1)CoWJt0`a9&4Qo$;iG;v z<%_ym@DnHZjrdLKj&811|H+G~erB~(v8b-5^xpXs+g(fkDsy@%`AzA)e)bRU6Z?lr z9O$O>qMvz!-(()delw*P{d_OPUsLlCzvf-y;`@<>`%gRa#BcJw5Z#ns9G^Plucc;#tsT;aksvqsB8-A1e#eOqO^`jki!(UT%i@I5;AML0cev`VPo2B~E zj=JHmsk%koEYy$Z0CkS%%S_^k&xg#?{G}ar#%~fw>^D<-@BOD8^~PUQ_cQ8dVgI5X z^E5u+GP#fFW@-P7=R?KG^NYA6uZenoQI~wZH-4@&@9>$_0o^RkKiUx|ev>-Helw*P z$7kN*ucOf=HK#pC9K~%+4rzCKJhn(>Q}1eu5jz->Sw1PKYnul^qJ%H z)2B|JOI7)QdmW!E^_tI8X|MBH<#XlrvhMR|4QKyRt)!c}e&fB${%S+=P1QO5Kz!(C z$T%tVedze}_4fFC+kW184zBC( zYQx!z;+Jmfdas}J4Ss%$F!7t_<4(~shvbmYw^mbgm9XP!A(2uor_#HC$ruXD^ zY~$8G(2i|kAK*MUyc9MlwqyH_96h}Es5Y6K>T&7SFVSOruc~9@H_*JUW}B<;6H;G9 OMZea~f`6*a#^DS8_54Tx literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aM02W3p00L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aM02W3p00L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..de74f0acd42886cefb56c7fd8c64c4ad5197c5c4 GIT binary patch literal 11114 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 h=x>5{YBe_x@ga*7Mo_G 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%0DpLWy@eNC&I+r^-MwBtVY^|6p~!!AbS z=jRxU)6YlZQ{{Xk9$a2O^o%olkvd=(&Azn$v?EURB6aY73(X$tnYZX`S{=|+7iTbk zxz2c_7kRIRT{Qdu&A*?otnREA+&50EyW7Q}{l#yBO7vcGL~MNd3Iu!l-_%il%eBxQ(8=p%lk`d_vGzuCRI*K++vi&xA)cCmXt?d)GB8(BAb zx<%8uT@3Wq*Rzgw$j{f%bZ!>|J#n&sBz|#lB*!mC`#082{IdV7X@1=<2L9P+qGSJA z({yeZ13mjpbnHKCn$GQFpr_8{P5njk#x6$rQ)hJ4Uqpvp+@$|(d;ib-1I`Wnom%AF zfnC)3Va>X=^RwMQ*ALUFRK0v)etUg5Ak_8t?iy1z0GWV{5vw^OP0@} zbltA%j=OF@b8hjeyU#4{y7SznysP+Md#&t^z)Roj%-%P=^u4b9FzU5)F4DQs;$S>@ zZzB%ww|QZ9QR7n1IigvwS-;RFmS6RpR(&z`G!!B;pf4Dub&LA%x7Kf7bJy+O9$rp6ESg)7o;rP! b4wpvsf_mg>@`8H|bF}xRogAkY**N_dY|lGA literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aM04W3p00L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aM04W3p00L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..1e6e9304411f34f45f9fd5ad9900de3a0e6c94eb GIT binary patch literal 15684 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aM04W3p00L0p18.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aM04W3p00L0p18.gds new file mode 100644 index 0000000000000000000000000000000000000000..a60ab13b7a632d2128453a56ba72a412a8363c7c GIT binary patch literal 15812 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 dvYKqG-$F=f{TJle@Bgam@43aYG literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aM04W3p00L0p25.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aM04W3p00L0p25.gds new file mode 100644 index 0000000000000000000000000000000000000000..d16e55ee03d468f54a4ef0d3821748a37da3b602 GIT binary patch literal 16068 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aM04W5p00L0p18.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_aM04W5p00L0p18.gds new file mode 100644 index 0000000000000000000000000000000000000000..682cf326bad4d8aea7e436a249dcbdf5f5dd67d9 GIT binary patch literal 22276 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM02W1p65L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM02W1p65L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..c98b3952e6c760faa05a30b78aa18c75d5e07990 GIT binary patch literal 11210 zcmcJVYsef|9mZ#Gv-|G8Z%Av~7>!b@v{KVHsl+G}^-a=Byi`q6q7_}#T$CnFOq*c9 zLhJ{j`a!gam$pkiTzGTbv@WJVclhf(R!_(Ui zAG%|@W$WpeO^=?wWBRT)Y`Olx))Oz?_WCU+wruHL=t>f^ zo9Tc20*&E14d$kj<1a+rRCyRtlb^ZZ@4mPsK3?XW|Lvjw&9Q&`JPwEt-JJ8UR{g>E z^(>owQ2iGSZO~5fUwU=?HGg(4`ocKm5Bo4MGpU2@o-A++n_3y5Zzkh9( z4enC9e^@eqw%$uORi5gCe^)jBoz3zp@10+lTzZ?{OE*$O{3rJEJeR5z1{zdnD_hxCCU3hx|zy9 z^~gK^8I|{-n~D5WkG$hI$ve84%0KnUJARY=hjt65@}GYw=6$%OBzZ?SQ~9SJdB<;( z_t0*^RQ{<)-tn8{9oIxbn;Rx2bp4{bL&Z#r@CdQ(Cu=sK0T^ z-Y&&bx~cM3e|LBE^}bmWAG*27KmM5N%5N_BqTiI>+CSsO$M{Wr=w`~#ecMFW8TT6| zaYHwyxAspxUii(fK9A5%=~e#?A^z**{d0Ds=KdGe_*%*QnBGe_Ri5+@k3_$@^vCEo zr3e3|YEsWQ>i=qONF*xJ~(yZmPVR-`JUsjjYTbNO*CDCws3wew%!KL7b= zSk`_16i=M{Zr-_X|6T%;9#QsK9Ff_1G>*uW{(p_A^NRBs(fHmNTb?0_H6*s^rej=O z1B!8Z4X}ng?`fE^*PwF6+UxwiWLUe>O|QYW_Lq;gx8Hj@wo6Xw2huLOxv2g8$@caK zdLF0U{L3Y27u{Uce)rpP2;D3x8GErtACHbssC_>sD9ip9BG3y>FI*q0@3;kOJ^Q*T%B%Zt zE&rZJ*xxh`NWbW&`)`V0b$vFCk8{?^^R%CzE*U;oq?;;l9Up#P_|5La%CB@&daHkU zHpZ1_VB!mz7rL36U&H5b?fPT>i`GwwBl`<+h3q%P*W8}C{&oFi-)%4F`g3^^|DDxm zSgwPm9r5~@QJ-HyH+R(Hx5hvGQ}mmod!pZzUXA}6fBuQ+H;1o^ep7nVKUj_a8UGyp z19LU)=kuF0P_zHZ=r{fO-4wsUi?n}#KVFaK%B^}Y-IU%se(Ft*MZdYcA^J_}Nq^@% z(QkH-M87FL>CfI9{buJ`(Qis`_iG?vGd2HEPw~f3{2_5iH&gMa9(l(%qw*efGm-!CT`_Kx%_WH&x|xa}^@tn(85Osn zn~C^QkGSDCi5t3^ieIRwxZx*$khr0nsrXTkxZ#^oaSOVch#%{eb;tTOi5t3^ieL9j z`kdS*@7@X@*Wc*ow)X3ve%beiSC(YoLpM|VAK#zS|I!yLRKGzt7xd4*N&hDMW*Aq& z)c)DkeFJgtU0$K$9&|Gif9jEU{3dxvH&gki9_tRj$+`>e7EG-_=E=U#{7v?KbThU8 z(+}4T{m-cDCg^73`k@}{4!_B|LpM|Fk8$$3!}v`;cf!01rapfeN2o8&)?t6(bs)FW^BXH?#TZYJ_aJ@SU% zByZ?uDu2wAxG{f|xS^Y=__5E7|DnFM|Co~pvatV{(p&F8*eCF@f0+2t&6J;U5_iUL z68|u-f~ojZkGSKXQE?BtnTS92h&z6hxTBkn|FVX-(#>@LtTT4~TB_}geg2F&|F4Ws zW*2YFj~zdF=;-v+?T4nvZ=3tA)Ooi$c+)e{YVYo6qSf%buGR=#I*V(0F4u5w7N1)# z{M=0bvi*j0vs(K+mvb(69_MCj+Mm?V&DONf^W}M*o7LKHI5(@ce*x!awe~p|nmhNZ zmtUnlqBs{H&GNTy_S?MPfg*nFZNyRJybj&;x#OJwK7QLb{HWT0Slm-GoKr|QIiJWM zisuxN`U8FMVNws>4Cfi&i}m{=`e0BpoL5LUGrbsxDShoe==J!{IM313CBylobkp-~ zTJM}w%$?KK;@xnLSSu%Ai~Onb>N#N3_~_sHZYsy`bB?C+>N!ZUkLtV5*>{yWzc)Rr zTUhp+9$b@+^|kDwWe<-)Y|U7t9x$Jc7Kun J5B0yF{STe3OLPDL literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM02W1p65L0p18.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM02W1p65L0p18.gds new file mode 100644 index 0000000000000000000000000000000000000000..98b5d0e49d97717abf423f5e635e7265e2e7f42b GIT binary patch literal 11290 zcmcJVYp5Mp8HQ)yX7982IVG)WV>F6bQL(8_Qqn{u>d8fkw?dLqt=bJWmuhpfZ36ir zh~SSZ;tdsBLPZJfA1T#hE7*!vs!$awVikpIL8_I~f{LR4@O{>rchAf|GwU>!ZjqsxDP)|o8Nx>+yV(CKDx&pP@azfSGHw{-JcZaTC1%1zV52d5`*o=$H*JUxE+ z(5=%=n@?|_9zA{Q^oI9r+H&pYlUHqh_okDZw`bYf-rz0Ew{3gZBX>Rbrri%*@%1~d zJCJP{Bs}Ej>!H7xW%*J!+n?o^bhC|FzOIuEvixPlzxeXO+t!VDoc!kF<7{!mVCQuq zC)wBZvaI(d2_McbSf3v}b?n%g>B$pE&t&}zv+M<5ar9eV@h44J9K{&-WcdZ%Y)!Ti z|Eg@(dq%vcWPU8#O&t#rwdsdPqTXD1D(X$ytNQDM|FzNocq+eFs2HCvIX;(V*i9X8 z)yq@RcP}f6j-NTFUk?5^R{Yf+ zx7zzLUE{kYd%JWU*-ag<`d^_ReAAUdT&C$N7H)U_t_ur^`mgc3J@#FGmB#c)Hd>#*WBI_I z82@?cuhx8fe_da!&vE>`zH1%I@6@^9DLLG#86mr=*r6Wk9RL>Kh7GS(zAxAj#IzM z!|nO?{u#%G&S9J&I_#$PZR6*A zRMYW>dt9x*s`tpI{Kj92afN3n#RrKCyXp7}{jTags-{0m!$8po2mZi zJo*m3N#9{NQ~ejtQ~#r<{~>*k-AwgA&xOq2(czNBjonPe&w0#S^fPMS2D_P4D_g@q9?*F1Bd1E(I`Ewq5qn}ZE2fLZbpYzBYy-D8K%~bxJN8ad7 z@(6efM8_zUa2c z*L|PX-9PD^Zv74@c)AbiVTaItjai0I@-Y;tXIk=;YuTig9JpY=GqfZ?tfBPS4sFu1} zt^VXmf0MUKUt>4j-%Wbf5%ovh<1EN{dfh3Gx6Tjh=lR!`pW|;jUafCaeB5V{(V2`pIx{u?3){8+ZdI;NR``VejosYZo_`o; z`Dgs_5AloLO!@EL9sTz9RVcr~ZYKP9Pb*f9ANS=MHEzLfCdQBRh#S30+}O=j{NsnB z-^q;?%5SintN5pH@Nd#LA+Ca{{-Ms~P2Fdd-(WWr{^@V}F5Eu~(s$U+)cQr7%s=9v zQS&a?&BXlUJp7|K@r&I|`R}|s=H2;Og~~hF%|!m3$GD?68F%bvYW(vDv~Ti5X>TaG zbd$zIc2mb&=P!O3cl?`-e~7DKYWz8mx}%>_bq{tkQGd>(?&wYGj@?YvfAIR4_u!W$ z$s4P{+p9KvoQZn*<0(!I)#q)%S4CWOzDYpa!m0mesghMjNg>K)j#8m zj`26qg}x}bn!fX3)SKNSQE$rL>YwK$`gXjwBz=qBO!Y74(Rb)g`Y&9!V5u=QhTB+@C z)boGi9d3~D>FlEQ`LPoR4;`JJy5-RH#PPXrmCpOBgX1s8ReQI+7*`G7Rkc>&;#plQ z`*M0O^S(yo@yfo#Xr|YK=bc@^}+W_vi~-a-PG}weeHd_AH?&9kCqJkb+Vh@ zw`=mBKNkHCKUEUH*iHLy%WrPqLmg7qr(s{EcAWRxl)k#J(-i;t>>IV|z29Pbzs2;v zOH=+0`zE#g8um4Hyd3|&#)%)}XNLV+*-hD7$DjQ<;y#ak(OP^B`&PB%4g03G_`N^) zeD+P7>esL@R=a-h+9E%#-62obaP`kTn`jo~@PewlKu?;FQ&6N~vDj_dDoL0^z>5`(^=zfCOe3;K3# z_U%&6_p6`K?L^kVh3{AI3(Y8d_r;)xTtVL08k43cA|v Peam~_TlDr&>}UT2ql~7Ti_)Cr*d~F1 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 Ue5rt|9Xz~p=xw352Vl?r4|%3yb^rhX literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM02W3p00L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM02W3p00L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..2deec9f4e9c5faae2c234b742c7c01a95e6aed74 GIT binary patch literal 14778 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 X*9}g@`yV6MC!yWWHG79<;D_`dLc;uC literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_20v0_nvt_withptap_iso.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_20v0_nvt_withptap_iso.gds new file mode 100644 index 0000000000000000000000000000000000000000..e5a6bc9c804604a6a5f762ab81c7f7692ea4085c GIT binary patch literal 241710 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

!W)AG$PTqfUK^mO)*SufvQG)lgC%=+vf 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

(Kol0*OR$f<{$m<@Bh-rqi^ET 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_20v0_withptap.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_20v0_withptap.gds new file mode 100644 index 0000000000000000000000000000000000000000..d7e76442072cfd6ff2208be68feb792e17c62a2d GIT binary patch literal 120174 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 DJYInP literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_20v0_withptap_iso.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_20v0_withptap_iso.gds new file mode 100644 index 0000000000000000000000000000000000000000..460d362f9c15b0d23fbf23e4038a18cd0a362d90 GIT binary patch literal 241526 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 IWAfnt1q5P5+W-In literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_g5v0d10v5_aM04W3p00L0p50.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_g5v0d10v5_aM04W3p00L0p50.gds new file mode 100644 index 0000000000000000000000000000000000000000..5b133cac1a5320c39803ca58f486bca65ac7fe77 GIT binary patch literal 17836 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_g5v0d10v5_aM04W5p00L0p50.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_g5v0d10v5_aM04W5p00L0p50.gds new file mode 100644 index 0000000000000000000000000000000000000000..7aa37b834bfa7b979115f232d5c3480f4361c93d GIT binary patch literal 23148 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_g5v0d10v5_aM04W7p00L0p50.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_g5v0d10v5_aM04W7p00L0p50.gds new file mode 100644 index 0000000000000000000000000000000000000000..b46ca3601fb6be31430ee96898ca2d27b8f1e5d0 GIT binary patch literal 29906 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_g5v0d10v5_aM10W3p00L0p50.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_g5v0d10v5_aM10W3p00L0p50.gds new file mode 100644 index 0000000000000000000000000000000000000000..5b0f9c8186ff76e07d69950b5d668ccd4477071a GIT binary patch literal 31640 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_g5v0d10v5_aM10W5p00L0p50.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_g5v0d10v5_aM10W5p00L0p50.gds new file mode 100644 index 0000000000000000000000000000000000000000..bee7bcbfe9df1cf723b9252d7337768a64c0a3e4 GIT binary patch literal 42882 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 E2G?n#%K!iX literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_g5v0d10v5_bM02W3p00L0p50.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_g5v0d10v5_bM02W3p00L0p50.gds new file mode 100644 index 0000000000000000000000000000000000000000..75b3cbdee8e3aa34405e755926b1a63d85ad7881 GIT binary patch literal 16910 zcmb`OYm8l08HV?qGjq;d&Rko-Qv5+g3{4{gwLws{(~CwBi4;^YFo~8DfkLH%sTxE0 zLm-L~?+_D0j6~uM5mAhS8YKpd7mSI&s8<4B&_s-gQQv2+{qB9v%-LTrFb1FY-Rs@o zx7PmFx6ka|Q*??}(Jqb~X%(+4M)W^^Mh5yN|^OoN5Ce5pFZrjt^Y|Lvj@z0`| z+@=3M)W?4pMbgb(v484w*>CpF$bM6L7{B-X>^G<1m;I*n&_8oR_E&r$`)AA(n*FMk zV)Sxd$4}QB(=wu)I^GyRjk`Ph$4Yj#WWOmr^mm@hezSXh_M6f}|M-UNulP{*kDD8s z{lsMc#4?#Tx*5$sjk`PhnLp=Y-somD|1?fxldoj|pUdNo^XEA8##8a39H04@$CJO@ zn_G*H_U6u2dvo1q__=NM-kdo~^>k~ou&%S`>Rp#!xqR)uOP8;{>dO6jRS$C3#vMQP zu+I9x3w_q{TXfdXAK_UWSDD|`OL%N6Gf>enx-+1jaDNH=wSbzS+M@e_?bR^ET~@vB8qpqs}I zR6x#u?$GOMgjKz~m{HHaVC&BF&tpNFGa~c3d-IIU`HOW1>8AAlNU~E{%f?{@9$ow6}eEo zZhcLB=%$W`exl(wTaRSFDZSA@dsR`){zkD6)SOq1p_@7$`bU1A{bqYx_M6fh{p~w* z+_AMaiHmMV@fk;4{3dbHO~)_0oVup=_{LQ=e&X)*lRwLJH>)0QEjp^}a`g_!J-PIJ z+|%bgANLED`Sv52_hDyV^~IH+C1-xDHR!O5cU`+@&;I4TSFgBNHC@HVGmhP^GoCr@ zjJh@Qd0Y3?4Xt8rzW%+}s>d!2)UA%|^LV-MyYE-c@6o>N)=c|Vx~b#+b-&7=_N)A6 z>wfK9`AzA~{_o{+6Y5)xhvd_hZc1Z(5)Ea($YP7vF7;KmBX% z*FR{_E1o&8HAgq4H|9TkgS^iu*GFsOLpOCi^b;4q**-b@O~)TLzqyymds{w#)A82L z&GAR?%W*rpzY`ylH@X?cAANfrzx?blP+#qDyFUs8GW`}6vg z{>e|u`yG7}*-~>}_gr*S#~b|l{$5zbN0EYmRAODoCJxDiM&}qlf2Q*DE~B0`Qs;lNZ#mXlt1Ih8(&4`opdwEpX)^4TtAb% z(ak9TG){TrCx1xZ=w_5ZTqk^7KNBCi8TnZ!e5{{|58aIXCEX1CEZPw zF7vObxXhdWpBTjFIC1ft#6>rw_^cCgS-*;kn{+dX&p6`ZH;IdGM)A`+J(<_9TXOtk zI+xbZlpd}hKIU)YWBz93PkG8u{`et2bTjf#J*D2E`+o1^HM#Gjo6-G0^$GPo`Um|F z()ZBKsQ(dXq>OL2%J`=A#`R;}@J(&0i4Wb3{CrNr&w88q(9Out=Olc5ZZh$qn~|S9 zi+APx&5<=Ze^Ywn{K*p^`J4FCyh=uX^2A5}CjK<9l98Y5hmZO(@u%xrGV-^s&vo10 zP?NevH>3Jx9DNgi#V4|#{#zbzTtALexA;x!7Tt{MmvP*;@mJJ+JLzU{|7INbE&L|; zEp#)we=&~FE%;6D+vsL=|7IMYd-0omZbdhv&##Q5@8YkhzMFJ2=)a7k@8UPJ9IOuKgLn__$#XJlWqp}&p7rSev^HNZbti$anwD2le$mm zEg986{dZwrvA6W`+d3DzIUo05{Pf?7^3i|sCkB4{EI#^gMfs9$27dZ1KKgG(`I2r1 z{*jHj?ni!Ale$MYqxxqYeHVX4?YpF#!T#ep0d>ps1CzQ%H>3Jx9QzKx$^Jt(qy3l0 zY5(JA|3l`DZbtKG9P`FkQS(l^8O)z`qV8Egle$MYqxxqY`wo9a?YpF#!Tw_$`yRi^ zzDGBs{m(q{F@F;ux*7TToJih$Zmg)hlWqq2Gmg0UP2!@PQT(}4<*NFd`*Ka{4&99E zk8$*E{1w%=lWqq6n{m`Fev`UIH>3JZ<5ai!sb5IlqMK3uGLE{%S5bAFbTg=5#?g22 zoAh6FGwQ!-oa!Gx^$)3gbTg`d#!)x;DynXhZU*(kIO+z!N!_5EQTW6XE4StilK{uoNN#j&E_^BUA-JqLM{VJ9IOuKgN+aev`b@c}qt5k9JgRJLK2D zgQ)nl{*G=2&%YVRb3gnQAJ2ZC|CPrZfB#{fsaw|Hq;Ap8sD2qo-QusPx=p$n)Gysiw8MNR2xeVWd{;{D>P_~ zpBRWgdxPdeUwgEs-|LxvKQ%0V|NFgR=jS~wKg`c;eMxI4-IU&c{Ri@+&$U0R{d-@{ z*&CHF{ja2sH?9x)t$07T>ip?Ent#P-%JZ8y9wfh$^ZKz~tRwk4@5I6PYXk9Ff8NI( z%KO=)j-b9e2Xa2?{gd*7%oE-8`VG5&j2nG(_L(z}WxpxC@%r(52kXJ_D<*N#%_u(O zh>PDOF1i`T=Q$&BdG2Tu7u}5FGmg0UP2!@PQGEUl8FA^qCUMctD1LfBt?~F7pQw6C zx*61`-!rH9s!!*UbmdhZZ`?nvV>H+4=KVF~{r5n9bAG?~HrXf6t32LVKOFaadDHLZ zP3evK4|)He^Xq#*J9AR5?}{txTl(t!`uzNx5cZWheMR0Mru5K1bz%0Ky>|AS(nJ5m z-?QJGygmC(>5cxhk2HVw7xPbCvA?4E<7eLZOy-SlM)PMJ^Tuy7?{wah(fk?5yz!gN z8{LfNpZ2ll&HiToi7WPZG=Kce8=uL%(amW7jAP#TP3E7@TQZtIL2FBro4Wp^l<&~F@F;u^EV?udEz5~6Cb)6 z`N^OABKcQ*F6TdL4*Psi_D}M}NB$M%OS&2O$rB&>SClX5X5jDsOrO2()!g+x6qA2p zjc)p1S`U0aD)Z;}0Qv^MA5?rye@8ci`v>Fb8~9E72D%yb5600q@SF6Hbl#Ft|6m+_ z1HVb%KsTfQ!8qy$ze(Ms^OlV2hjHvX{1vtDl5Ph3k8$if{3iPj-Hi4hW4vv1=_{hJad`UM0KkI~#^{Xgf(#^onJn=E_it;7h4E#Jtqi^wi z&7^Okn^FH_9DNJFN&iacEgAJM#?iOZ^SzSvEp#*LUyP$~;Wz1D>AWSQ{>3=@7XFIr zTS+&A{>3=@7Jieyg>FXui*fWV{1ujehEs`zG~k zrf(=oH>3L}b&8MrHSwXFk)JxnNBx@k(9IS8{N1tg`w1O+NA+N(dwQEdrmWIW}CU@@|oG@rOk}~k3TaL|9$Q3=(Tr0c+GXE4)47E z@PXGH9=_(z!~5>M<5v#vI{o@nw_kJW^`{Si`TVJCf8q24r%wIMsRvG;xUIQ-A!%WBsV&T}HO**!wmH{~PRuq7&1i3i|2;|n*DhPQ z;ov>|d2h3}IoC8R&u^O9^=9c{^pj_9yQ!H!-ZVr0>*CLkw*G6I=HQ1W{Y$m|W3$bb z&6TvH{xtJfiSHic-?qAWRcXJ^zi?mio1^*SH>F4a`~0Ivir-v3SNx{*)W7(2@taG( zTl}W<)W6)0zp@?ovNU?S6l%BS~+K%5`J6HUs^j`n+_nYR}zo=gRpyP)6 zgKp}2>fhWi{z~-+|E9U0`;Wi8_$!|-{^RD$bN`lVkN%t6R~5f0J?;N?JAQNLzT!8f zr~ch`{FRRs|E@VO{uAx^E1xd@6J|30(KpMwTl}pts_sHJllmi$b%)<%-JzS=`inS? z6F=(@vhL8$Z2d)?#u>hrtUGiwTYto{?(kQ(<7WM}*L&xW>#RHcChHE}%+_DTJyQIv zKkmc2LpP7Cznhwo_Rr0-e>QK_I6tJlT0V36_nHRXls?}7i~QTaDF4Ts#@zYU;y0y_ z`*nVF?US>ak7}%{VRQD@l1o#1_$SVv&HnS}@`W2;p&sxj&Z4dV(th-g=GejL)(bb@ zdfP1=Nc}z9dYhupYBZl3;}^BM(ap2{enzzau`(j_;6fRZDg8N(Xy#?=%R~Ru5jCGz z^wrAmzmM_nlpS>Q>WLoR7-#&g7v;E~(MNN<`iHvLSDUSa(Y^QIe#bqBuY2tshxgxi z&x6nHu1g=$UBB?Zeb-|j{=ew!!uztmw$BbXNA2&lYcEQ)X?C>M_yaGyy!^MRzm2b* z!*T!OT_tw?vW~N#)gB<-9P;n~oO&(4NxS$>>AmgGY2TRnNA24?9p|)i&`n)W{d-zb z_|1cxi{F&q>*x6Z-{w;t@u8bTe)^B!q~G{W_rKkHv?BEEd*wyz;z#a`KV`pJJguC* ztr=;*X=m^M&%JWyxwPH6b%aFTFQw<}=bua4m+bD{ix%Fjew=4_y#00e-uvL;1NR@< zhx%r*_m0Q3pRYeL?T))TYV{dJ`{fH}o1HTM^Ewar|G4CD+V!=Us6JOF>RNuCiS53y z_}5y$pV5i&sgC=1XkAJ-b$xtYO!!x{uj5~9?*s9no0)&{4JB@Uv19B9(oNkb+V2}* z^H=@-IcdpWW)eKd1D}*R+l`Ui09EYEQZ;y*GbzpDw-ybpk(})A@;R z4*B=KQ+y`v;y0!Dj*t48eM^7;=2aK;YozBUll!8ZS^qY4&d{&T&vnFyZn}T%xiwK= z#L+H(lf0mtZhu;RY+j+dO4bM0kBtA!`1+W8SnYg5?f;87ra&+jY4-~P-X z{OWJ`Tau6Px70Ys{bl^Ee^t-cGmmP0{Yl5!yY$2--PHA7|MHD0s8?xyf4k$%w*D^N z)b(Ef%AXeB>J1(7p_`eXpEJ<^rFVCv-{|I0|MAm*6CeFIGylw$`mFy}dH=cNhUyR9 z)b-x+6Sw~2;;;N_@#`5h?jt?*ud04&-&}ip@tM+l{qrM@^R(96pO5iL{TMi@te|9|L!%#U-_lt z-!-r4_cMR=pZuHj8{Hi0|A{x1_RT%5W5#7l@9jVB;G=yLAG$f@XWaNJHE#TjKR7Uc z@{Zpm@A%B2{2!SN>Tmr+9jQBX zGpj%1sC)dCPZmG*-(K&{AJ^G;@SE&A=w`P6M4Z+ye%3E!-J+Y>`X!Ei17D@~jnK_x z{~(Ti3%|*}g>Gj17jY|pRQ%@Zj}^ZuJz*{}8u)eeqZ7+zs7K&R^md&J=&;w~BwkJd@{d^v>cp7hh8Rrt~!bb9zo? z{O0_-ir*t(d-{<@>S$F8>(E3~aMrq$%dPiyBl-}F^=&920#kX{%-{@x6fA%fL z&3f%>Cv7{5u~Fm7|Gept8oE46O%^ZXD@ z)-TuDH}IS68|dcH{=xcX{3h#`ahuutC603of2Gc?(9Puh;yInX^ZZ_^yoYWk`DdSH z-0Z(5<3=~L@e@bh@mDJEp_@tmiDTX4H(B@SX14w#PW6MI`hnC9x|!7vajZLhm0EY9 zo5}hkj&+aUWZk2i+4?7rb&KC*-J+Y>`i(fPTl}nF$ht*0v-L|Hb%U=`brZTdP(Rc? zev`V#Z)WvR9CeSsQgt7?nbbe)gy%NaPvy7D`r-Mly`Db5@Z5&qnLWSJPuivb zm1;M1GkJa_j&|{zw2N+L?MFZL{6_zIeuF%>p_|$BTeKq|?c;~|(9O)xb0$8XKTUk- z=8&J~KKv%nefZ7n`HwjAhTkM_(XW$m(T?g5KlKNxJ9KlX{>VG?XOeg3&&=|_srRdBm-hor+C?|B_K9QM z_)W%*Zf4^rj=bYH$ve84<)1j_9e<_fJ#;gff8wY+{FSP^(9NX&h$HX#P4bRzX8GUx zv*O$S`HuL|%^^Si#$Ty^<6kzD{u4*u@K-8tp_@tmh-2RHo6H-!nav+@)D3=bJxO65ItGs!=3 z0B-qFo0|HP4Z{3dxvH?#alJIXtL@(;;7x|!vleU9gD_C1s5Zgewy{^p$La}(!( z<&)+7=ksfOz4!Tb4&I6gPyul!Q+^Yg3r zdT;%5oq5M^GVkc-(EL+(_)Y3A?%Q&x{^&P#SE+tefAl|?eE#P;dBbm#H*_=0U!1d= zKh9s~4>E7)W;TDsQ8)N1RX3rVN&OH<-QqW?Uvx98--y%t!O!}EtQ&MQTR+6HZt+!W z-G*)^>z6p@9ly!^qnp|MN1W;pKlKNxJ9IOvKjNqxe3h!3(9NWNh@)=so74@unbi+< zM%_?iMXp-+MKsKkNH5 zPTrebP?t@=S8DqG$@cxriT*iH_{kUKy-jq}?{7{U|M>gK)9yd@{oIeMKHs4FZmA~I z@gI3VccT9rZ!F`!g!f0~@7}K-e}8mZ|Jetr5B>#@NnOPL*fOh+Des?7^uONcbEV$u zd$jDonveGS`18v}e&!iprTXiB2b1+f{-Pb)r#;c{?V8#AQ~%lgjGiiaGiyJ74z2d%=h7`{7v0R-=lu@ajrS{B z(k{B0wND)5#&6Otx;eG|_Wk0B`{Cl>GLQJBU!1=&|K_8`ZywkA#C=Wasej`_@mD@m z{2S(l+`s;v;x~`ItN2anY5Qw$Dt?oHzefK}>8XG9dBtD(c=4~A&&&P%+Y9E;TsbU$ zQ+nF|_FIeJ+|m9_|4r$sf9HF}Z|;7e_)Y1l|HLbc-`vw#M*F7p)UW!SsNbdkDE`W6 z>vydFMqev_bMfuPZ%R+wU-*sUH%C_#zbQTS&+it0XE&L|?7CtlEzldY~W=y~sXKHtt3TqXJN%WZyU@+#{3MRL z!*5b|=%)0v|I{6RllqJMw#@2}IO-06rRpwpGdVwrqwesV)E&B+)gN)x9sWwyUFc>~ zf5cID_)Y2#-OTEbIO-0+N&UrrTW0k~9Ce4kQgs))IdJ~)+(-RZK2hq{&#&3@AMN0y z{Yv>mHJ8|EZ+4(~pdBb0+yoGKi`6G^b!*4Qw z=w>#55vTgWPyImZ2Hni+hdAmMU#03cbTg@6;y5?)o1B~IW_EtA=|kDf<4v>n7aeC` zt-nh*b-j20SbkB{G>59Uf9*K4tiMY)b-mY5KdC$VU#Yqa-Aw9_e)5|$=)cKt&OkT) z8#E-fKi|^Nr~LdW@uYqphQIRB;y-C__xFG0gT=S{(_@q`baTK@{_&gS9ltr0e|+TM z#7F+k%)j^##kcfp9r2-?Lw@ETzsbDEeOnIAKl?uOZ?f+*|7N!T6UVuOzf$=K-Av9O z;yCy4o1A~>W_JEXoX%hT>n%BV(M{=T{d4Z)uY9KXH_YVxryZU<@S8k$pqttA2X)50 zQGX`$hi+!`$2!Bu`Z4jLo0*@VqciXPeBET;(amiBiDTaJS8CovH>G@o7wY6#C@;$ zdH&%(JoliR+4B!^oZI+J&TVuvJHLtJ+{9n`MDg?d*Iw@(Kj#GJ9_L4;>M3+HIltKF z@v;9`$``sh;OE@NZ*p$qH?#A5Mf(&!_Ae73x|#VICqBk+;zKu&_{;AkYk&XB=#%>S z?-$kI&ve{7tF<8A)b;WFPxzNrqxe_;rXxOdGxM)~w)pfLXW~8(AG&G(Zh8Ju``z~= zGv8I6U)$fm`2I}&~Fe1A8QzxaNz?fqB~PeNC%R+C?{yv|oN_pMUSzOV$3WYUIZ|#{5e+b$z`3i~P(Fesle} zW?X(VYyVl~Z=(HYk-rK5v&i2sjeq}5)yMa=4|n8yIR2QrKAyh`zklxxzweFv!1x~T z2OW?2%kRHwKi|aq{e--<-*WG6HU4?|TORrSHxqvU-kexp@xrPn-%@uvzJ}C&`MGXDJJ^--tT+XTKk;6-t8QF zn(1%Ov%Y7&-{t)-Ywta~88!3GLUVF%zWJGEPXF;UH}UtMm>=Es>bswI&FS6SF6>@> z-R|z|Zri=%wp(An`^qzKJbmG5r{8#H_ZMGy`sqJ^&BfEFUvT>3nbXaYg{7Z5`<7=s z{|oQ`&uh>B#Z&Kl*UN5dPA(-8Mwc34alL6q8}rTiW^`=6S!za?&GG*e)PMborDtCg zKTmJg#|urfajt2$pVF)xAN}mvo33vbx0_~`|M(yCb8q!OM|b_$RR8sRi0t z<8R5XpQuaoKl;l<&D!zN`5VqY_eH8nuQvPchO6J2lS|jVEbisI{foNc54qcoFTVMP zbG234Kf*9YUTex~@=KHCu=x|#V$e_ran{K<~g8{N$6uN5ik zf8wT>r=_>`mn@ted&H}}NX+M@a6{MC5ln|rKd#3c`?N4XyTN3+V>bT$5%_j8YG zte#o=ciQ!h7ix`KndtwC_{)EKY4?0X8A|`$v@_=iLXC@Gyk;y!;fxee%eo5 z=D&%rKmRlTwEV%3Zf5?=?=Nv#cZnbCul(rv>-E9;$NbV>)z9y9{rzF%L+V@AW%HJf z+b`GILAt5ygZ}mN#kc++9r2-?nSbpY#dqjU9r2-?nSb^5#kck&9r2-?nSVtGDqU|@ zKG6{$x|#X6juhY4r#s?9H#7hC!^L;_Z5{EUo0)(7>&2&YUbF+^LpL-3+$pVvPuBYW z)gCoBLN}j0JpPnh`pe=sN5543ru4!5!N2&D;&1uG;$JjhGVEuZ=f0?X(fFJ5uPx(m zN>Af&URC0^{BnuEXl?bK}*;Z%R+&A9`u=o9he3Z%R-7tKTbrbM0NlZ%QBZ zlPB~Wd1KOV=w{Y`f6YUpABa zGfu>1{7mAan^}Cy5f^_;#SPs|;xo>~W&BOzqMKQK$`KcTOT`V{OyZA}C&VRxOyZ)O zS$xV77k^8|4c$!QlPBzZ1r`yPIieGlEt_CLz8@8LJu_u{^l+5Sg4 z_C5S2`yRTP?tiQ^@{_+NKJwR`<)_~GP3n)|%<3QI)PMNtKS;l!n_2%+j&Z}+QsWl7 znT#LvgmyE3OxlfZX6>gO?Z$7?Zgewif0R?Z@zZ`tyV1?8{gk8K_*$ynp_@tjnWway z`D@Z{bTex|gO?Z($q?GD{c+CO5SQu|pyOxlfZ zX6>gO?Z$7?Zgewif0TQ$_-Q})q21_a)_%&-ZhS4(?$FJo{XFM!?&SH;x1W4uCs68H`zDP&20am9Qy|TmJby_`**#b z#^>CF-{jnb&&EK( z<_SLLPfPhiHxob4dH8t#YbjsoX5!~L6Ccl?E#(W{O#D3O;^X7wxLd{PYt( z`p?84{aTs%$y0pfuZcfi7plzsk9AFFR2pd_D`#?q?^(Q>qoh{e=dGA zK2IRslpg+}`pv&}`1<^1%GHfLK5-U*v&0K(yr~!C9i069!o>J+ojkzTQvDIS`R3vH zyuVBw$Mt>U^9#Cfy*}9fc>n9u!|m^1pO#<8PL}xb`3Kb_-hWeEblOv|502l_d&{^V z(|XSML&hE5%*H?Nul~o!I0RJ>*Q;J1jL-F`C-JGT>w!*v%JsqiJEpp3`NQ=r|7jOX}sju$qIR8qmjnYkB@Av;i{PFXOZ~RzCeCTH8XI~-y<_kLFLpL-3`iqK>{fPTO zeCTH8Uwgdx4!y4h(9bypALkPjAG(?O883W{w}}tk%>0}K@Nqsc@u8cUpM4x3 z`@4w`-OT*t`QdG~SNY%aQzicoo7=EVv-_-TN_~Z$3$sd!rkyn*je9EzI;%}*SGjuaq zKgl!Vl7A-gBQGnn_>?0q{+5axx|zf$Pl-$Zn#7O1uFT?7j=1<+DsJdz5}!OLF8OZ~ zAKlF2Q;xX!TPkkoW)eT%$9|U9zOSmz<|F$3lzum#HJm@>Ilg#*#FQ^|Gw~CLc^{t- zsbt=xo9X;l{t=)2YpJ;8AN3C=@yQc>X10D%j&%cnORXEBo5}h?Irbm?Ci@P$Icxu+-^st0>UZ*w^K&rif3DMS_)Yo^ z-OT!ra*P{(lW~jtR%YWzo>On~zoqIOx|!6Ua?~5YNxjj{tp1dv-uO-GANQ@y>d!o* z-ps$2s(0vSQh&-(Z~P|pMmMwiQ;vG$H>rQzw=%0g^PGA!|68iwp_@tlDM!8Wo75ZK z%<4}$>W$x|{&C;Rtp3b@<_+`TWZs~gv*r&z^4G*i{+gMeJi$l)nE24m%+EOCWBg2f z=w{}ppYYLtCO&jC^Rv#-@2o#2{f};D{m*kE&uu(Enmo6~b7f`r{Kj*Fo(~(IA55Mb z(ar4nk#i1t$N9%3@6gRG|9DQ|+`w}~OPw1+HLE+H*|AGeC7>)lX-*R%;wMHNO^ijWk1s6H}yNZd1m#*}s{; zka>%4X7iVF?0fiHK2rQV|JUn-^jmyB%2dCFZYJjk%F%E5P5KSp%=(XV?3?&a_RY9& zWww7(j(rnK`K%=({lth@MIYTXUp zOx9n@F>mmj%o}twn?ICe-@#I8Z<06YW|lwX8Tmv0ndA?;ndJ}V$Q%4El{cZA zN&Z}Rv5foWCpt3z=w>$lQBL`XpZtU59lDw2ALXbwzLu(Y=;n<2({K1q`VGIC^&jOJ zH~c2!hHhr#M>+Bae@o>}=w^~Xlp}BPo8&LLndNVk)BM5D{DI6HbTgYjlw;oFYpHn~ zx|z&h@{DmO|4ham-OR?Ha;!V}P4X`8TbbqG(SOrkr{|Yrf6(JM_5MG)nLNKxj^`Hq zEgvm@o?q(q!Se&>9Nu^2{L}JN`W@X&-aq7=g^%-BOZh@K6F=uXe4PJU$``ts_&I0d zEK(&N=wDbpB~6U+Ctf|KZA-V$^^e^Rga z$FF?(oJ3O$1l&n)xS}F zTVE=Eh!5S&{A<<6XUnMv#D{KX{^jah{dn<1eCVeAN3}%h`!`ho$m@&LZ1`@g zQ~SQ#>M6IyPx)S%om;gAzr7jh8=z|MU5b1BQoGL|z|EK+JoegIyAKk3`HbEFzjhzQ z{Y1699r?{zDdjh%5BiV3skHl;PBiobq}}Ld)_%&-ZhR)~MmP7g|M~s?FRd=$ zsK(##{cA>OMb(O=b!q6^_V(u3%G)$c?{5wtAKiZEgo5aO$X7P1OZD{w#J9|{SLpPK5Q;t5yZ_@whru4!3 zQ;vG$H>r2rw=%0g?WF#+zoqIOx|!6UI@ABu)ui9i%~}0VS>l`Ai}&9PdVC+-=y8>X4Zbn(Qf=E?T-6aX6>gO z?Z)5o@#3fb_4@wy*Kbu_Kd(O06Wyj>nKHLutF}ltr4Rb~S39dGwEsWWqjEWP^F;Bl zE5((UTK}{MkN54tgL}msd&R3bmECyrbvNF017CqVTqC|mZ}lp@&PC14&**h7bhG|D l{)5)&xK3=VcmH2&L|-;Hmp(ScnSlpcM&td=b{{|n=FFdhH^ literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_g5v0d10v5_bM04W5p00L0p50.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_g5v0d10v5_bM04W5p00L0p50.gds new file mode 100644 index 0000000000000000000000000000000000000000..35fc5aab506c2fa1c8895e5ffb23746c415dd8a2 GIT binary patch literal 30588 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_g5v0d10v5_bM10W3p00L0p50.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_g5v0d10v5_bM10W3p00L0p50.gds new file mode 100644 index 0000000000000000000000000000000000000000..7048b1a470042f6a8b66ac946ada294865ae8633 GIT binary patch literal 41216 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 JzhlQX{~y4U+GPL$ literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_g5v0d10v5_bM10W7p00L0p50.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_g5v0d10v5_bM10W7p00L0p50.gds new file mode 100644 index 0000000000000000000000000000000000000000..9cd4349cc10f69f1d4e92144eaa068a9fba3790c GIT binary patch literal 68622 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 I4b+j!e{VA(`2YX_ literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF02W2p00L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF02W2p00L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..bda29caeef101ce011cadc00a5c7764ab90f43db GIT binary patch literal 5178 zcmbW5PiS0K6vof{GcU;)HNt497F6u2#5$9-*ep@4NSY^WK}uyXj;?_`jn8=L+9=6Zi){pHvC-QMd*`xj1j=bxS5 z=yp$cH+o0RI$7)Z(v`9v*(j$#hs}wT5(ruGd4Gq z!S1Hn)C~09iY|n>bjI>~%<^f^pRnRS^2KaoEi3Nlx~Cs#EiSmvVVmZ>=?y%5)7txr z)iX;^Jq?;O1P7R*bdbJa*1BevT_|<(AsNgN^$oDq6uUK0;cVZ9xjqUCKwzvalpE-YK zCCm_Zz^@>j0lSVTSFn03b^8@F#-$h^t$@zZCvf@%w)a4(?LN*B;!=z|e#)OApTA?1 zcjK(s@78f=v4AmBdHy8#&!@lo`Kh+u{Ji|+SN-$()zZ(s z1OEq8>x8q8`LI)?^$91Gb-3O7g#B5mp3vkc@RxC--Y&KM2&{;S`*UOCvmewm$d% zrNwjJzZCJt`q3vj`j?VpTpHu)lN^0Z$uTaC@${dsdH)0b$NSHvYjOYN=zpN#=%2jP z2v48n=zpN#TwJ;f&v%ZzG`r$?DdN%klcRqrIr^5yc-D^`&##mm}r91MW|L{5c)ALgHS;nP^kNOWh*N=Yb>Mte7 zxK#bL*1vQ^WBuf~eknPwUn)NISM;xFfA#%M{q;liwFlwnP^s-pSTEvIjJx&iY5vfE zhx=!w|Mp$~mcKXQ>kjx^F17t0{2?yIc(wk^)&9@AvHxekl2x z^Xfle;k_?Vzob;x7ZI0Ye6;@rKD&r_ZQk<({Q~u1Tsj};C*SeBlzzxd5g#kRI4OKJ z@(I>S-|5+k!ncb{cj4)qyp(y#OJn|b$}dhT|KWbZ{texK-$d3o#{C!W=NGH@lRX;h z@?@#JuNarg-%fn;gXglpN+rj*G{$Fdd9L+QspJ@!#(4YDbJhJN$G9}cr>}aR?+2dq z?+JLu$%pak`C6*h&v7_Mtv2|eJSU7x5pU%69%&wNjFS)Jjl5eo@@gJ&)$?Vs-yOyHD$SsZ+SK_>tmI j$A|C0z~dVneESvq4vhcbO&#DjILqfxpYr?!=E?1U;YIp? literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF02W3p00L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF02W3p00L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..ab46016e0b275d3d7ac8fa8d5e8ccfe2b0d65605 GIT binary patch literal 6502 zcmbuEONbm*6ozkAch|gn#wcSXnh*sg5XLx@M2wpxGkKv21~LhOh&F*FAc@YH_#hyt z8=nLe+^8FOZrq5XZj3uoaG@@Qh%a1-AU?pA8^`nAd;hAg?&&*ZoDlxWsrv5uB| zZf0EJa@TO{v)t`>nf>7_t9`#EFD{(DIJ0fKbLLcM@qDLq{!C}_%<0EE(=$)(=$za? zz4iFE#p&ro(~C2AIyc#9?VNq_u7jVx{ny=lKf2?sH%}aO>syJ{i>q0^*>B6*pwA<%%2e-M*={>kI$&rE9Nm&7JVISbR;xx!nF1Q|`KT#ls7yPM_;Me&KXy z;gNF}UGrM!R=sNDU0e0uL8}f2ue)6_k-If+3Ln{%X6SFzmn$7#8{$&C-tB6iuXRmt zt-H7RukEqEZ=DmKv;M~Xy&NWU}+O`{sOYM3;KN%`m z1;5wlpNjlzmiK$hzq!)U3zpyFQoG)rzmFf=5cpEx3;dXLL#>0x+iqF0gG)>QUZI2Y zhmRfEvu_nE*mE8Kzzwe}4$K~ne0&0-g186VWy`e3*~YDOX~A}@#ie$=zXRGsZ&;q& z?D5`O>BIrsLl&3Xb7ZpQl`me`$)xCmjBzaK5gnDITBAjlqAZp9lX<>Bh8wIQ*At9RA_G zCU|_p;lEVld|bK$pMMy5DbosGYVlX^JOLb~xlO^`DSG zlO7)IpFD8nFV#37mnL}n1V{f%HO|MS37$M7pM?C<(T75Qsl}81hok>eIQk+@@%V(p zzZ8zRG{xh8Y*X-G>Q}-4m~>OxKOFu`H4gvqUK2b%;qYIoaXv0xj*s(>``mAVmole` zOD*2t|H$Ld=Ck)Ng(EK2{Ep|7Fu!!dv;M)c|D+RwY)wqP2{J4%x(H7)!di%%VuuXYwf_k9NzHfv z^XckO`&{TxsXe^K2lC7HhrGn4sr>#v%THg)@3n_d<)?n~h(rCk$>LJG-tGUv?(>bi zJ?@KLm9idjX^;OJpRot6|Bc@(g(EIa@r|bg*Lt;5IO5V2@4gOP_x^?>E=}?Iqk*Sy z)S*5ShmY60`!`$bpS=U+dlcU%o+B}-eLtATf8?Z|!$0eU>jQc3+xXUKSOjU%qzFU5+BaS#e;`M>NK8Li9IKQurkJktC@_iNc@2)*RYa3s!%axAb x9KM&@zkL3-9l7lH4aVC~knJ}O_1`zte+HjDYv=VLe*Qam?9jo$57|0R_a7A`nb!aS literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF02W5p00L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF02W5p00L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..d5caeab8f6e12234319f8fc1647c3d08a98862b0 GIT binary patch literal 8614 zcmbW7U5Hgx7>3vRopBm+0>Z$Ine|nCu)o+Btou(>ZgjbNblKvz^JQ=Qnqb?3-Nw z_@>j7llv!6Pi+ceywTdW^R@dP{_3Oa_wV`q-VfhDd@!tNIcIOr=j_el5ZVjtVOMA` zt%vE*zM~dep?xR0hnKgue-mHdh2a&gU5DdbtUl5Rp>BVN4u`R2?USdD&Yb8xcXp<8 z>gf~bLUS~P|9#fRCwA7e{mwd=vhE1&MfETeCdg4cV@q_&_-cXIvbuOFrONzH^v5&* z1@peP$h*2+`hfXX7wveQRp#$4`t>J682vbe#*r?^@3Hl&sY^;+-P5MLX!>w6`HvA@F5vi6<>J0E(~ z7KrOwT7m2e%x49%-DWFr3kj~?y!r115==jK=)ms1r8(T%8EjpaoC$-=+7IqLnEBZZ z(ly9t5H8wC%Y$wFE^n^1-EMW!ju%&;(l(Lz{~b;>SFo&l>G2>^7tOXc_Ph= zbemwGvc;pv7Kjt)_{P+-$y6E}j9GFh|bK3WYSQn@L{CMQgX&(6p zM8_v59=UUx7we+qlXLKklwVvhlk$sJch?_}{30ItMb9TE9{EK)>Z0e9e`r<8pYz+4 ze@I;A=f@*|PV>l*AL;ny#3O%B^I~0eeDdG+M#?V^Z%X+^tGnxuM}85H+@j}`6Oa5N z9(B?4$v^ye$}cXwkn)RGck|&&n5Amprp3gYsW?Yfn)I~2p^Bi51=AZLQn*XS{#-BeP85%-`JMC#_t817wh6|e%7C|PS)?n^%G;?Y;{rnaMs_Z{wwpDCm!<` z@u-WQ&pP9={vsZA(et%_)%nl1eoL$+vd{CD{}%dd_3v+54$IP9*X7c?Ew9x@J0ADf zEuPXJiN2fl%XvAiAN@P)X!YX$E%{tOym|EhC7*T1XZ>^9xUnuede$E3K zm%8YUPyW1bo(^#z4ctikCTF>SE{)GRYGLN&0?j0 z?#Yiwei4uSqUVznkNhGYbaO^v|X7$%#jP5s$j)`Q*eSzlcX&^nCKGZx+=zi3@6j z!LG0In{TH>N~|s|5+NJoOt9H@u-WQPfk4Yi+I#U&nLh7eo=kDSn2X*!R@x`r=U+J-_yS@*974iAP=Z{KkvPYrWMa9(B?4!`kH4w|9w0U99*!i|ZHf z3)@Fc)-PjqzgIq=mVDhu`FXfcZNFvrh3>QB{x132$8mq#_}Zu0zSKVN>&NS-`yeCZ z$Lp8T%dc@Y59L;l?0DbtHSg9?T0c0S^<&NXt98)4sl|Du~b|m`Q6J(peJwdkLR4D(x aLirgs&+x~8;`#5cL;D|2{(zmQ8U6!Xv3)@R literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF04W0p84L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF04W0p84L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..09d6c83b1b1b00a22bedd4e9f2e05dfc97e85843 GIT binary patch literal 6986 zcmbuEO=w+37>4Kk=BCD4G5%Bo?n}_5jWh~M(xmYxp@Eoc74=flxDYW$5wxI)U9>Bg zwG=@_RIG}MqJnNjx^v@3LS3pG7q*}aMH}CDX5M?wx#ylqZj6g3esi8P-+VLYJ2$r` zH?c{~NEDkn6X8GpM3vufit}fmd|`awSbOEM_Uc-@y|&U`U3vVu_SpFIlkKB(V-xp} ztxirXjIEB}V$5)o-7$S~|NOakFWfr&<;`!Nd2rc`WP!Wq{oFlm8IxZgn<D_FsM%rIAM^PO;cBomeS4%+pO`h5R{Gm7iJDe({F%eXii z_T#UeFDA#GFCt!EZ)N`Yw3|0MS|aAPaWODIuj9P*Mb68(*mHirU;WhEpBI<^_V>H$ zW3Qv@P`~p9lh;u{o&isc*XyVJk2x=Sxgfn5ak0yvE$@H)DX#qx*WOhynZfUfix@A@ zU-9#u&dc8}NRM%GGe3F?*TWZMoL_riPsAJNXP)$!zewM%%TvDZ7|4GM9pmiA#-(+3 zjC&UkFU=fu8T56B@34z=rnNi2b9&kP{sg%Ss^_88us;nPDahTA5En6CuYmW>Psnt} znAVF0H=aiKKwQMQ^?k>1^ZSlresvwAHGnF9g8K~E`)qoBde&W^vQk^Pf3)bXj~2t% zqZ`={X4i$zY1g&hoPU)1j`y#-e+-(9&9BcNaMzQ%zOq053FAI&b$_nL!Nofb_1(jc z?A|@76V5?>|I|Ua*H=Mg2k=bZ@EyPt@kXCdIz8I~Jn7pG;MwKRlska=8$R|X;u9$T zg_`BR_<8EQ{G$@#*|-?+2lxbI-qu4U!n1KP;K%PdFIg%Po{ftEKfTX+8J5gE zEaBO>81Oky`~~Wd`9=FSLR>_=ynnU&(PRBYdaR!q@>wT(te;4aaWUj`o%FbFksjk> z$mcns$MYl7V_XdR`5NZBhxBMe>nE}g+xmHS^(S|Jyw826$Nd-S+x_|i}dXI_YC=Q3%Q=cdJh%Me#88Tix{`($Mc`JXp6q*!i(UP%;F)sG> z_57ZP_Y$7pV+GlFBE&_E*PmbS=f7Z~d!64Q-eEQ_?hX6NKh77K4}B5wzUG%FBCke2 z+wbzvzAq7Z+qk%i&%Ei2oR_{B%D>nA^2AX7$w`-YdSi*m+s4H}{=ANP(-%1}<6zFrvk@GSxhVt(5nJ;ue5&mPSA*`GyvjEi0V zbou;P56@BSIDAh&Cya}Tm-}PYKV5hgA93ru@kZa)4fB@!DZO&P3C(Zo*ULx!?0s0@ zK>m6UsSa8<y?>htLD^!<3FuRg3gXx-|&e!S6FAGGHe^Q+IP@A>gY z-=2SXx{o}@nZF-z_J45euK9>t-;Fo=%3F2Ny0s2J-sr1toqh0iR~`L$qi>%(tY7Cq z``+0{x37)9&P^ZB&s6#OL-p*>;AFw{WB0p=|FiS^?`PrT8{RDZZ$i;4kWTUY*#n0c M=ADnPK-1Lx2Oebhv;Y7A literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF04W1p68L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF04W1p68L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..2c8d2debd953a34b290749d9ba8a959f2b44dbd2 GIT binary patch literal 8482 zcmc(kO^97*8OPuIan7Ac)L14;YCznUSZA8FCMs<{rU^Agp-CxJ>$T8i)7Hea3Z;UZ zBKXnbLUd82u5_me6?9QIg}6usb)f_cDOL(CDg_Y~wDJFY-uHjcxp(Hi(}aQ(hF|76 z=XajxJnz>{CbempMrrS0n2x7`{_r)J`}@tq_OXYbSl_=kJ^Rq~{DtZC!rAHhvu7Tk zuC0IN;Pk=cYX|OIKY!c7yVuUI-fH$Haq;*Z}vwDF6N{_xrRPp7?2<>~FU zJbk<~rS{#!bTqZ^AEr~O{lFkKslAc9cYd(BCU!N#6ZVKebWi;}h@nQztj*sRx%mbtU)p zaBAN(OuN#)=-GEtnp{%ve$wOL^)qqv(p(3R$GGfT9GAoU_U3io_6D& zBX@mTWibY&0zILtVEFNrnm_99S2|8UoDy+U*TdhD-yr*|Y303)`lr$=Z^HfUSMzhk z&G}aI8*|_ILz*d1b#xw6*O&Uu_p(R5JO|Levu`TiuYb;uUMqk5T+Sa<-iVu({M<)gJd?b{%`Nj^fB$p+#lPd7^D%U?Xem8Y&za?LBQ`h_X=ltf) z?6qI-h)3Mq&L96=_sTb$li4>FUz(pf@u=U#BW~K?sWjTjRlj!f?RJbGrL^))TG`W{ zICA>Vod25qr>|ap>oPmesn6Vd&$04^vg70qmOU^1N_T4Yt$eQI)pIEkH+6k;2fSx$ zv?u@7H#=0}4($X3#ZAS-FFRJwUv{kYTHdiHud6*evnH=c9oybNemdVj=1og|wdW7k z^ZkSM`u&4_xt{3D<fED`ub-U=D9pO^Ta}FZG+(ve)X2#D{pq&6+>a zO2J#Xy(1oRv*r)KnZ410j(Eh)ny*g?k$?Q>j(Eh)njd-op&dZ^hlQgbD{Zt(p(%-nV*u zRX-Cq4^{g2*X;30jOPU9jftBTpHJR+`&Nbd>7~ER^$6NpFfTB-=8o3 zpt>*Vd!yry6RKZvQ`h_ZhyE`@|6(owf@7X=eqY1qhfTiE4b$g_xp02W`HVC98GqB~ zzPWIIZ}Q2DZ<3einzj7Q6Y?^DO!5*pYx(0o<;N#KBrkEZmY;Qk$NDkxh@0E_)QxXa zcRaVSRzK^XysUqdyu{5~e(obLzDfRgZsB(MIXCf5&P{xC;ryH%f8G<1_c!r~n>C+t z!eiV_JmO}}XP)6P|4cmMX3b~);j#WqJmO}}k3PMa`^Wi7A2~OPn+xaXrvBm4KNFAs znKeK9B%l7_Lp9D z@1Ob>pBuj2qdfW^0AJ#3OFj{HD}D zxhwk+kGNU$+dpM*rPL4ch?_M({XYBs`GrT^tog$)Wxv0^@Q9l=pWmwJdh8D-9&xkg zH^0d~`y#&gN8uI)6u|KhIvHv|kH~;2*@8gkQe&m-|_T^yB zkN$fd7m_#nUs&^FeaegRE5wiWSy=O<|MF&iDDNHpmtU?g?O*I~@?-o9$shY$VJ*L| zMc@4%uA6xDAzxpb-|y`@oVUN<)$+UUP4C~^?`yutedTO^4@ljf2j%+G`X^6z9`8K! z6_4lS>r4Ircm46XKy`Z^c;3&}QC?U5`VaTlpWZ&ccHG!;@~`}NQ$K}YenTW*zhP?X Zzmpz3r~X~xH%v$Gz58VLCwk5}{SWpPfUy7o literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF04W2p00L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF04W2p00L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..f492228ada659013737afa4d5374ed3c1af9867a GIT binary patch literal 8778 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 SCyeg6|DL;(Z?7riad-<+GBzs! literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF04W5p00L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF04W5p00L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..031c6714da33e707a7642b58b90b126b2d410560 GIT binary patch literal 13898 zcmbuGO^9As9mdc5Ig^+snUADQ8z{wHTkA}dYW<)lO&Wur6XPLa894 z1gcg9MHi*$LKGJ&1s4s)ZbsTgDWVH2RIrK!QY=J@t4ibl_dn-3_uhBr{->i6`L)lz zzxSN`ob%pk51lkk!!$~V2E%kR4eWpX8Fc>o*5UNa4?Vhecy;~U=hn|ZyuSYMx%Kns zKL5!2>e^TCSby;3>XDD%etvcJ-qrJKx2Lo`n%sHp@%P^I{Linv@5D3j{>hV{Jev+p zf={3BU+Q49ElG6VaBW(LFer?mKc`{-92 zF0Z6SF530Y{&IeT$q!RnxHkJD9=T|Fug^Gmqi;6UxT5@BwE>&|a+=>qgC9xDJTafM z^hlnEu|3}1{=B!8`Mzx9e9`Xval^$UHebs{yB_+B|H;0%^t? zT#Ux|`)quC#)phcE^aw~S+C&(Htr|Pd$8fspUt;iwCkJaul2r|z3Fco;!P|ULx1P{ zC9j|6zk~f!_WOzU`VW6#^Zunh|4j`StwVCruD74R<4>++Z+f929=W)kzxcZCAM?ef zZ)9Jzymx$`r}@kuAL5aV^2-~;=KnU{7(Ywtz=brwGX3zevv=q5cjP~D_3B$s^Ts*z zvHR~kUOu6-0_B~Tp0hizPig+s4X@r{Z!yb7yS}*ry)*4iwfygt=6FLD9<(>ez;e-Y z_sbh2uV8s&q)YjYF?ZP-`g#}QO#2ySeci+xHvcTK=eC{E+mGhs>-tn# z*QYw`cf9ir{8mcu_`2;}d+UjNZnhn4xoCNN{X72TQue0bYlufKM*f_AQy6#t&W3p8 zV&sqS$lmzx4e`ju$WMRC-rzz*JaRGe>1qDy+@HAXQ@KCU@~}TV`V;Z!PmFwe!lOSC zk6es=dcvbW5szGqe0sv8KM{{yjC}f=JC*yZd?WWaC!UJ?!=t}S^XL!X8Tj;sM}L*( zc`gP%J>k(`rFou{mXU{gJrP-yieDWB!%qc`gP%J>k(`rFou< zfzLYOv3`~2c`gP%`v;GopOxl$E(Si&Irv3>esOpvKfh>s@BU*PJjNIC$i>K~Cp`KS z@yNx2U5(w7hr!(Gwp1iFo8<9N&vP;G=?RbiD$Vm;41D_AcQN-T?*DA=PqaMTe|YpK;?bKJ`SgTG zeO7lDy1Altf{(XAQp8u^DU$MU@7uWjx8~-zVoUrma zPV+n$1D}&tyz#9qn&-I~_`^fl8$REnd7g`rZ~JG@<-C8yYrdcNk7#-L{ljDbh#*A|AOI`8+2c&oAPUi;>U!1CM`x6!FN#$Y-7LSbq_ZT#Wp|Yjz%Hr~PxQ4G-RI zeOfNsb>DyGJk0vr`aGQZGQf`pP%VG?@u=G4V(Xoh6g`n^S4~I z>+SE)UG4KX)_I5LUmc%y#%KLSoqLHh=T{w{b;4u)L_Bga^4TYNJ2*e=jL-K3pYNZ@ zxa49qKK*g-#P>(!+=*PAIe+SmPk(syC*qNdkxx%}^e5txi;+)%c=RXYk&BT}Pk8hv z;*pDyPfwgX(O=~oxxYEFd;YYkKRo)YG>`u9oq)c7yxsy0^{?zG@dEzmD5szGqe0sv8KM{{yjC|GykM$Gr$i>KK|KPEI zL_Bga^66RUPU1G_Pn-I~qdyVfdo8rQ_x(#xc=RXYd#{C&PfvLCC*pgrg^^EBc=RXY zd#{Dt`J9{Ji=3O_i!ao!j`#8((DJcw#hv_8H@{|0-=<&&6PT?qghhk#WhzXnejujLZA0 z(#G{%494d^#>E#Imt2g-XMgNo$@`~rBkvo|-^%rH|KPFymFBVj_|ES6RcHUQPI#3Pb0>0f=KQJi{PcrIe5&hGhD zr+<3FqrXb?JQo9>p77|e(mc<_z^5lX`l~e0b20GgXWzx#pUAlrxoCOVA0GXQc=RSl zK0V>lpNK~;Mm{~^(VvJ%E=E2*;nAOnM=nM_J#p^D{;Pa5_s98JxgPe1M}L*((I39^ zbbtT!ghzjs=6Nm#K0V>lU!{4Ti-Av1c=T6kp66oVPv4Wzt){QG_=-IbxwzK<{PcEU z&7Su=Et==K82F>_W{;lv9H)7ni-FI7>4-P{M~mipE(SjPgL5bLkI1zL34S2U;}GbFuj4e9G2;=KSlc z{m(aetvOfIIh)SaM4hjd^Rv9af_|5u%l(Sh|K|5w%U}LrUZ2Vt-|}96tMy@Aaxog; z@3Zk)U&eRN_|f=VtuNz}i_!RgpN-4@V0`C{AC14&{$N~kF&f|RvvJv9jPIQBqw)D3 zF^)Xw`^Iw7uD93kGwt)y^scBNu1p-|+{3$lmDnhIr&++St>ti6BSv-jZqIr9taJ}&#&@?PKPZ(jR-jPLU= zjC{R^H4lid?^U_pJANIPpAXDK?*ZN)_BrKxudkm&zJBKGJ*M|sx!&vhx|yfv(7fwB z^1OO|ja#3i%vG|>L-Qu*`OEcQU%mgY>p%Bcvu`^4$8yFm*L%nRf1h9f z9HJid-2Ps*@yqqz@tHIK*XPJ1WB%oOzt8()E1&lVe!kxJkG8*mc8CAjbzQ^dEBUWQ o`#bl`Zzz~=zu{oN4Hf-P)ZkY({>%J^!(I2^dr$V~>~qHHzYj*9#Q*>R literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF06W0p84L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF06W0p84L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..aa1552eed5ca754b225fcf4991289401296a7b81 GIT binary patch literal 9642 zcmbuFU8o(^7036PIWyB8~p9&QOUwlwPeDI|r_+SKmP^#(wzxV#1z30rCb#tya$p5nT z{AR7S_nNil+@q^q;YzouSGYZ{hkyL(HGaRasDF3wgIl&OtsK5<<;eXjEB7B>Idb?{ zzh7C}@`p=SZr`)?)0>u#T(bS@r6XG|c5Xvi{bKpi9ee-t!pWcQe)FPdpFVVh+f*5M zujjdYf9PC&M&Wk4`pm+ubDP(d2>0*K^^Zc|$@KYXmmYQf^;ljE{2o{Th@Qyl?%0bL9nYys_TBfBDL5K=TeU0^A`*P#kowc+9!+p`_(;{0_Sm z>ur8R$Y8V%{yz-7lpO6+*gJXpAy+<^RDPuvUmXiv{asRWv`fX0COe4yH@M*scmh|s z4csxG@Ai;KxxEqZWq!Xl$9%5?vl-WI%=Am-OS^P)H(xvzxbpT)!FjvX;H$3!SN|(h zaNaI8c={>c#@@icwET1MFNHlnuU7u#n7@=9^OssY<0QxUrQ~Rr&g5ggRj8HT+2Btk zE&m3dH53)=?f4^KJQTR{k4eeVF17eI)O*-J`9GNITy?KHm#SXl^V;C&srOm@Xj{m8 zydx>|rd>Lf|L#Wp--Eq+1?P`6q~$K~uuEaj_rJl{X9liD=Oa%gN4wPGi+={Lydo(% z+NBoHID7Yn_@xD&f7+$6cg9aYn%6*JUAtx$f{6JVkrlaASS>@(q!X6%+Kzk zy!!}|?s9J7gQTZ^gK~mhiuE?HCuk1;Kg7mj<|6(J*zv<`yxHgJ?;j^Z$S+O=_eq!t z3wPp_|A9E~^l`3w{csSj9}ev6F+Kdm@%wN*?!)nruN6=KrEvfLORLzVLeL>0DoY8?L8X*K0p}`@;3TeJTD%eZ}+j9qKI97duqc@|oD7qQdUa zW7hfd9I9)L`r!n?ef%YMxH_un!Bqc|?)Z!hu;tlKpI*^oa1GGzF@ATil5iHKK0y5FB5ex0o zeKt?O_7##@u}+(xiVt@9h67r5cONy*VJoylu{v+w;C@w1Obtv*98uuEaj z`#bvI?D;*!V~6=3`eVF5p99Pz|9nU}*L;7As(CewXC0AaeM$X$0P7QcTyOVB<@aLX z_XO5WE;REuXFl4E^J$@}_@YVqvjUO&RjsCad=eN%H8t{L@{@#_eLcRs;Qmp6x zFKx_!oGYFWH#nG-&kfI8I`#ZC_%-zZ7SFyh$NX>bYnZ<+p8n^Ue+}NxY4qPY=68#y z|2gJ&gJ&I+pX2?d#dChl@&44{`AL)YQ{wrQvTkUXTJ_Vf1J{2oDLLAu7GE6-9M6IN zspM#vTKpR3cO!rHG49_S^Sj0K{N|XS4W99npX2?d!LyH&pJV>F_&MJ{8vF?L%X8y+ zkn-GUms;mHECM%tIVm~Xr8D{1KYJ(Ocq{hcw@LdC<4j?fV!hozGrs&^;HBcEu$%m} ze|IeSpQz!#d^E(}|4CB%rCn;p&+8aBd8s(575^;%jN99#M*P)|5O?)nQu?J`YQ@j% z7&m#TIH?u?EdPw(+oeYQ^?yU$gNKsRFYQt*eqP78$xFpat@vm8XZ+qSHR2yW5#k=5 zpOk)Sms;`jI>t?2Do$#}Kg&Pk_jaif|9CmXJ^nB${n9SA;^%dYo4iz<)QW$Wf5z|a z(ineye?n{R%FiY2Pg2-B`wKtE=yQ!!pKGL3pKluR&3J#k zHGltfd&9mLw^mtwt>_vZ#KpSR>_ms-3(H}LtqBbUDqSiCM*+-q#KIyx-G*J`XMa z`}+6KC;YeS2hT6#i0hs8BTjXsx}lwXT<_#ncd8@R4ejLPdM7`rJHG!Rk4fF^2z*@c zWpz0X_zeSd?0?St~Bo&Mu`r+@8xi_hL?r~L11^gpD{pT#GW@^1nBk@DB| k_%D8c3?AP=SN8vN)WhFP@m_=Pk1suN_1?e_VCuX71BpKEr~m)} literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF06W1p68L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF06W1p68L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..060ab5492973c9dba4677e46d14407b1f30ce03b GIT binary patch literal 11242 zcmcJVU5H&*7037eIOpCwGirs25-o@bf+gyV=|@sa&3CB@R{DXc)Uic_Si~4>K`QuC zgj!leib{*7dQ8BY@PnZ)|s&tojc$!lEnqfMW>emj_RcYT>@#|9>uVw#4s^5TLzj2VN zRKJOSuf4fCwBP?+o7Q-5{bBoiHm&TfkKKOw)(@D?8%hQChNgnyjVV*&Gz(>fV>zW!2vk8x+d_1xp?8&=3$?AhNpBoA@X+IxNS;Ex_^ zs5-^SpZ+y_^q2QQJmO-L(8#`9(b9V&v0LJo+!<5f_*GW&X_e znD=q}-1atPE)f^4eP{hwKL2w6i+=_4Z^6If`KSDM=YEgwX-L0^78k?*Kb^h$nTB|k z#l?<)tUdo{r|j9k+j#$>Vf~2xY;n=r+vC6BSFdER{z^kU;$q|vAJ5+Cnud79#mJ}5 z@lSL8Vs$dtFIv2}e)8avU&Qme3L~F>;?aK*-^Zm;{+c~zCx(sRCG7a0vOVmvG~HX@ za`?{Ux&F)YZ@YN$zZW<$?zru)+mDtvloKO=g5}Ig&)So=`d6Q7c=59-5f`m}=Li;m z_;%ZA|6?oogAHf46B8G$-TgiD5x9mE$IrHjor}|NEqT9I$g6yR{aznQ&tFcw+<%>T z`|^qB<8Yyj!-ZVWvggxF`T5o3)|r3V^T&PMdf%_-=_k)mUcR*F$B*Xc$B)L(55~Ek z**Ej^FkS4gU(Yix)B`W&`Qh*K^Duf|{T*!P=Lefj{bl|gZSO$Ud+hT$Xe;KoEpFS- z#KnUP^JBqJ<_-U5Hy2xh;^^B}qs2vwx99JIKR#gYBer^N2NZ|b+0PaiEgt&h#TUto zFGl%?U(I<(*ES?CaWTs8&slza@poV$}cYrJT3^T0`;@7o+^%Ps>mL z$q&g(T-+@`9{EK)@{7CqtUG*>b%!rT>yJ9|s9VG%E=E4%jK}zkc*MoXXP)6P|3p0E zV&r>2&*lEJei;YWEpahgzur&t=s!NhBQ8e1_tQN3j}PΠ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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF08W0p84L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF08W0p84L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..33dd7319b305fd3f566785b03115374228c7b46b GIT binary patch literal 12106 zcmbuFPmCN#6^Co4XL@I5XLoI3{)9wu#dHGs@Llcb?ApGT-WP|)1hbo@u%1N`}O_$bD#Y3p~DBaFMMqK;(goO_g&b& zc;Vxp-#&Qgi^sO_K7H`m2M=C6cI4KB7Z1HHgniZU-6tMAdgjt&FTLZ`vv2*uqj%mO zt{Xa6uUEPHU=%{V(GSN%z1a_Y!ht=NmHV?01`im2*WeFxTznu5_S)fT@=u5Qb@=t` zdtn&rH!|+&wZr3w>9xM;_tKb}=!{=P8UVg&CE`^Xs2Ka#Ff9a)lZUmEf7X{+}IyU;6zmXwbYE7af22vOTNk?Ee3zu=={)e~XKDym|jy`Kc41`b9kAqUTd5 z9`%cO#6{2VKa#xa?m|4`qUSSC?my$7(e7J}i_ZNc4<7kvG%v=*WqzK&Q+wBXZ?N${ zR9JmC1mdC{U%dZ%e{9a;*Dn_04S6RrJ->f{@~W>E;t>};f7kP0%IePWjptCLp0#YKxZpMT4r zUP|7^hYRtDi=JO^Ca?ZUAs%tj^ZUO@UUf?$9&yq0sk8TKoBvk7*soIkqQyJMPaZt- zi+HiFOwVVWc#L1fkM||h^Lb8qJUw` zbO%;)_op`{B=4>B$hb zZYaF+8M_@87wvfTbH|YK=Z+!#Ep-g*_t;Z>DunfW;&paBfAjft{^s*ncm8NCoj+Rh z&$m@Pb}(^Vm-DzT?_B@j@pS#c<2zh`kgmV6H=Pf|mG0~J^7&(XM%*8GHRsnKO6S9? zIluqEbUyUX*YoO~P3QN{mhracmsWUoxYy(zF0=Yx-r+Ls_~QI(uJGo?6+RO`uJDthEtFYdsZ_;Cl$obyjMcaZQO zJNH+14OZ|>x)I`{#hdlF{B?E!^VXjL^5LxCF^>ZF|jd|m^e`dDX>2JmTU~ zKkv`X6YCe^{1NF>;{KDVeqv;g#X8`$|74$i29NzijD4WRMbGCw!Q=fA@#6cF>G`bl zc&z^-e%wDYJ)id+kN021kMDn`=d;e^vHpwrasSBleAYQU);|$Hu78=H&pMCC`Y+X7?vL#Gx&2Y=`SMep!NWE_Tc5`=I8wSvTT0tsynW^#T`MVwaFV)Ao^R@K+#GzdeU$l60d^gVbZ?kn*>#){cvAzB-_^kUY^nWd% zI?2Dn{=ML9-x0O%h;#c-%il%+wcwL?h5oPQv;Hvt75dkfANvIJSLh!WeCl6e|8M!M zGt|FA|GeOne}(>~%D|ze4}J;B)_D-!0mE%XRtwiFDpy z)@kyu(7(3w_CqDx-$V6GA^SdYac=)_`2(AO_(R+OL_Ff6=kqT;c=cU{ zc*I4|U$aFSpZg%<5f?q5`-V5J3-O4HogPP_#uw#@Uj57RQ-6$$PW_{YQr+XX6q1*?=+)18 z)QvC76TSME<){7_7oGYiCsN&$7YfNsT=eSaJnF_5<%wSX%kooyjEheF>;Fh~Prp$} zUgDxxzt*YE!|8m;cLj0LuG6{xkcV-TUsPVv8~?KU8Gnq6&iFU%XS_DPK;0sFiHqL& zIgh&WMR}rE|FZnlALC-KKYw4@{_lSOrT#$QN6*V_KP|tP=ht98`4Eq|==uCCp64?Bbs-*c(esD7{`FLl3-VyT7@2|x1^YKo9 z?UCfq?{CEM^YKo9d~@>W_ZQ;$`FN*4c{%y>>pOA$e7w`2{y6ztZz{wiF3#Qm6Rq{* zkLKAr*6b%)CxgXBJKoIS^5eWQzuC{>5f?o__NC@G`zgF;zv=mLUod~`ooO5pzq#JK z{%ysx^Wt@)Z*kG{3-6DupVX0$cfLRJ^d9NG zA&#Gqclvto^d9NGA&#GqclxvUj_)fQ$86pnO@2P!>1*C=9%|kZCx1TP>1*C<9%K3#n~{lBw*>AllD(!3!~{(QVMzvi9hk=7mJ`1yFJFE6g&RzJkk zb@K5}Kkkn_H+x?3`Q_(Eoa^M{-9CNCGQaV?@7=$+Kbo)SsOLtU{P}oie$AT&zwy00 zm;ZQc|FZJ=vqc}1Ie0StU9|s;`Sb6GnQy;gHVp3Xg!k;<+Xmm}_rq>Hf9sj#uUTji F{tq1S`*i>S literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF08W1p68L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aF08W1p68L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..2e77923fc638d54fd5902004096a80ffd0508176 GIT binary patch literal 14154 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM02W1p65L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM02W1p65L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..12a11734652bae8ed28d85eab7d135bb8ab223f5 GIT binary patch literal 7830 zcmb`MU8r5f8HQ*7t-a4NN|e};8Y@EeLM6@7nxrCf5|c_aRfvib(49bXpwyp3qAiwQ zROp2UQ7A?52bA8l^je{{*HsFF7eWxdP{b=QL`uaQ5#MKK-nG^~XRS#M-61^5H}lT- zeKX(8n!R?Y!Z3`&&cQJJJPh=Q&tT!-yN1=7Up=*Q)9(4&$@%)}`TX?Se0}ZI6Z73G zzuq@L@r&IzKCrUB=jJ23*H>;1VcTeO+x}W8-^y*Yj>=}p-;>$ffX zUtUiBq5Ybj{#$zdqBHH+wExTN{I45^ZD9-fPktohe^Y#2?W6S&M!)TEuikCi^ZXu+ z^Lsy%555d&AK+@+rHi_V)a2(vRLtdUJd#=}p;t_4vU5=${R-wf~m<$A0pU z9{&)(*v*pv@%xH(N%Q>67GIMVySdaKKmDeMlfLH1Nk26Ycj$9{6DJ?$-yGbT;x}dA zJbx|y(vOqgTz)L+P1$?(L3@k39Gq+MtUO{j7xzb6|LlLZmUK(cv?yJ)n^~XhSNf*D zXJ2dX_NMr{+6RZq?d|&R(s%5S1^?~+wXi?({_V<-eUIJr{_WCNccyun-rW!#cC(}( zznXND*Bhe4ZkF`JFOqKbpN8nLn(X>xny$~T^<#aO-t4ar*0)qY z=u7R?PpKV!_(#Y7$@Oso`}g+t`8)fw*5YmDc%&gYVK>#@-oKml<6TK#^Mj-xo4d;T ziJq=g8H)SvSuf9!sbNbh$H)ZeDhc8vjihuBOi;6qi%|iV2BX0C2abq`2@yC9O zA3gCy;>K>CFMie!oyoePH%sd`I-$8cuG}wb$Xx-usrKIa8~;1$CTAL=!)})J)k@M; zA2mdW-7M)xSERg0|7u9y*v(@8>c{${uc>uMPyI#~)}MCP9lgoAV>e6dANy(D(X;-L zb;oX&)}MK1-I;%rys?|5{OL#D=xZwPXg3S_(~rE-o8*n%Eae~jDR1=T56K(5S<1iq zP0D+Ebwl#TZkF<=A9f9$8c(UU(UZ|r6%fA(oOso1rD z&A}zgU3OFU;{HX)yqoBlf3u`#pQ2;`n&_~b*5~J|o*%{g*Ft;y{x#FE`hJ$4KfWLF z{Q8s54xV3`(+~6cpDFw1{Qdn%=Ons#erBSN=WnLS`^Ryu<@R*GLC!Vo zrq8zv8ei)yeVl(Yjw`!a8lOF~;r_8O{~h<2h4%LSr7M5xc<_0uYjgGo#Vflhd++*i z4x-~+G|^!h5GjX-nhRC z`+FYmcfKE9s#?}(dVRyeX~i$Qsh0NqZ_>}cNqRHho255pZ|e_ix?g^l_h;tldCfid z%go_tW&LBr{2vVQVh(wo(uq&Hf`-R`gp&~L>JGO z%=77q8@)-~aoo&O{Pbhq(AU(wMY~y;Kl*8X()pOlx?wj<>ot6g~UaM2Foh>8mS~u6m~-I_zdiPy9UBh~JF+UUt*_Kc9aK^-rAWzQ^-*K~J3M ziQmL8cC+L^-Y-=r@qTH3qW|msq@Hto@BDL4v(MuFD3dzGZmPYgr%uqD)L|SqQ}&`> z-|wTors@zqbs4$%erRF-n1AAD{!QY>ZkFPwA915Mi9e2;S&E;2#ErhD;*NH+5I^ff z+^nBT+}O=h{PZJk^d|AgaWhNt(~r2(*HqlmZWiKaeK_ypy*88gHrP$I7uTQj4t-74 zEqdxVa!?~QNrx0F}4+K}4Cn(@-E(-txGGr zDSNM;ce>~X=Nh7m?|L&k^|?OcJw^H{^O%VqySYKX+Ma)Til60M8?x?vO#L&)pLdmh zE7V@qF4bPG*sH%!d-dA2_=$T}S;bG>tNf0r-_w?NR0oglKYaK9VKn{vrqS-b=l-L& zA6ke_zcbXawa<|{Hvhh-?;o=r)gAlqyFk76)cN$|);U)D-*}G28b8Ze2kt*|S8p!= R(^!L5t^0_zo-D%ohLv literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM02W1p65L0p18.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM02W1p65L0p18.gds new file mode 100644 index 0000000000000000000000000000000000000000..cf292a858d8516c9235c6f82ca56a65bb23f0a54 GIT binary patch literal 7830 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM02W3p00L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM02W3p00L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..6e78aa646a1e332e69861a4b31dcfa7e1e48070e GIT binary patch literal 11094 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 C79h+3 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM02W3p00L0p18.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM02W3p00L0p18.gds new file mode 100644 index 0000000000000000000000000000000000000000..8673c5f79208290a2009d7a4e6108447fa198f82 GIT binary patch literal 11094 zcmbuFU8rSc8OPWDT4$e6EvApjxsaeB5j|(doXKjKPt6=P9IcRaSIo>!rqgJa5adNz zNd=Jv8ANnZx1$M}QFPH4M0epuL`f7$7cq4cK}7%G`@a9R);?#i=jgPD;djn|z5n&R z@4KGoS$plXtGXIiqiWw^SlwI=^pDqI?&s@<^}`=~Z0o@0?A)2z`3tkzg>$p>=gvMd z+uVBe(Cj0(Z|?uVf%BW2r#8=T9jdB5qsif;Up#o*FTQu_9Vec@{@dTY_wH)nBshEh zYR*2MR#m+|tWH+-#<04wy7tPE=DWYDrXLc&-g2GarJFiFeoa;N`iCFQeshW6$1mi#lb^ICF1ooee(~2&R26ZTo@_~6bTf)S{CoC|{@D^Ax*7Sse=9fV`9trU z8OH1w;_U|86wf2dsntZ~Hv+?4Oti zWB=%1*>8@&oc*TsF#hld*>8?+&wf*SuYdFwjn(=`KWfRk(amW6jAPyS8*1H2H-q&v zj&+>o5IlbiArI9?@Fg-tr3d5_D6?cgFAdRc*;{4&Iyn zru1Ha^<1vo!HXR}D+jtc-~V#`mH5-|WZ&}7I+QQz<|2Qmf6_PTpQih!DShYsi+@r7 z!-sB0{zd&4AG#U&7wsQDbkqLV>9o3kY5%SnR(q;7?q7qGx^{o;U*BciU-I?2{QJwC zf6@N>zG6n}TRsr4Z&CiRZ|J7aU+({N^LsV*vuOV(?^2yj^8WW7uYTBneTdJC`ZZm5 zru1(99`D}&>hCL8za{^DEl2NBqDVJ&yw^YeYxYgP+7chS8TpAbc`(N}>o?~3ru5$U z_@{@nzv0W-KQ#}>{^jpxzq#_h>^G%{@mDvpzv1)QziMv8{t`J6#&5E2bTe8%<5)NThFW*h&0zhEW8L^o){SmP>mOZ}*FE}qhgx^i z&0zhEW8L^o){SmP>t`JGgWn|Y(aqiRzt+8v`ZJdv&)46S9$tTZ?4OB`{WBv!^Tfye zO?>EPIU76>ZiJteS@c4;zKug^D}S!4K;84 z%s(-hKgX#%{3dmWZbtRTIQky`hN}Cdn?e0Ej=aZjlK1Fll>dw)Z}6MsO*(I3ls}9k zZ}2y~nEljGIo@0U9H;N#H|aa*X4HSCf5^V&FSNvmZtmu1-uN48-uRh+VvzqFXW#If z>>s)r?Oz(F>xZA~2f1$OW_0}+N8aFT_;U91{-GT2-G7dgxA;x+7Tt{UmvPh${)VcX zq?mlRoqF!mb*lf}@``))yL3~>d)H5&#!vq?@u8cMfArbx8^5h3 zK6EqkGtcTwp1(QJexjSw!};T5{w6-=Z$^IRiI4f4_|VOTem@`S{z2V#-+y!6xPO=n z>#yS<{4M*<_1_kMq4b^WFMifZeAaIg7u}5Fr+rd<{KSXEPyWIvKKCi&a{n@k+r589 z@fk;4{3h{}zc7lQ`sY*f(mxB=uhF%RKJVX*M0t7G{5wG zt^SfepDIj!;dto}qWi;ToxjvC^QV5H>(+Gr_MP9)=er&6TOV=L^Lt^6t96-0cK{Yy_~zd5}j`%USgfAp2?H^+yv-;^Huhc{(^!#`*L(7Y-3*EeQ=!HPuzi%-8 zzQJ^Tm;B$6f7B2AXHqxmzErrae&+o2Y1T>qZ>aSo-Q4V-Kld5(miv!M-lCgP{xXid z#cz_g=w_6^j3aN;{nJ$5CfyA3mvvI7tluP$(M{>S*N<_`6MsYXgQS~>Vn213?!SfX z1AbG-d*i2lQXJM#|ADLn-HiGVai|mGo74fiDZMv7@=H2k6 zJb(H}Io|6h4tYlWhUzCtH*e^V&p6`XH_2mkQ+jWF=11RR{wDi?Zbto!aqJiVhPoa} zH-rAgIIa_ZlR8E>rHAvUZ{auTTlmeWe~rFYo?G7CGQB^MZbtnJKYeQ~znSj)(#@!U z@tnYQ;`zZO5715Nz3We(Q>kv!=U0W)4Z0cC596p){3d-MowrbW7@xey-%$C8pL|RV z?w=f||KV?_K9Y1Z=zokOZ}FStExH-yFXPBt{0)`2NjHQ1WgK~n-z0C*%_x79-((-q&8Yt}4sZ8A*CCy^ zP{(@nk8$KVev>>zH>HPu@*RIe)e(N~M~T7xkK^3`@SD^Tx*6U77)PGqZ>T&-x*5EG zso$CVR{fWj^euEV>R*hbZ{auTTj-|y*P3KKf9n0$>xb3ps(!$+ZSx$$9LC+Vh+@646*tTy>o_SK(hi4Wb3{OMU(O3ia zc^1`Px1Tk1pSAmr`&oA3`t?l8YwmB&+7IT%zLdX3ch`S^_gQuLL53`W=_=ig6x@58d1r|L9!&=j8jZ{=e9A{ilj6-PG}J z{5e10DZtNnRZM*8y9R{|{Uv|s5BQdzYKb4++~z;h-G9wAy;eTmlDy$%>c=$yQdRn{ zqiR)Es#>k7)yH$KzV%#srCQbM(<{{~--A@&TiIKmzVn{Dj-UMh&!+CLvz@r>=&g6m z&rRRMXy(@KBhB3SeoM*u>E8O5qj%5G<`w%@6TA7xoj%sY-`>ZTuhX@9mUA7u=hSU; VJJX%ZD>~QU$j);uX@ADm{{U?Sa=`!q literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM02W3p00L0p25.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM02W3p00L0p25.gds new file mode 100644 index 0000000000000000000000000000000000000000..1ab9a7986868c0f8bb87e9cf63098d7a7d70ab38 GIT binary patch literal 11094 zcmbuFORQa08OQf|?Q`zqTpp=tr2{59K*ZY%(#oK=r4^B)hDS7waMZLNDAHOUrojO| zqSogGO~k}F(uo5gB%&tZL>)OX1|u;-2m^Is(1A>h@&8+E|M%YK-o3w;dIFf86z4D=tb!P394AC?b(`rO_dHW#N(EY6%=EY6-i%KE9$Tdi}GHWxqM+z5J&1 zo&H_9|LK*v-`Q0S=@;GX?7#9))D``f+SsS@K5$-f6d=z|HRxE z`$w;5zd8O^_M6hf{)a!yesgq3_M6gs{lvWfS=C#yn)9jNOE;y5{@@ z{VV^>eslG!*>6e@`=33P{pQN8*>6hk^-pihb)UY}kh-IrQT=I0uJG4XE|YEs^{3tF z_3SsPJGv=7jGwyGze(NGeJgg>zuLb>=Zj+FA+>+B;bqS$Ch4ZG@9e+j*J@3EbMS%e zH>LObi)Zq>AH2}w({iAj%ll_ue^vi0*Jt1Ahg*~{>1LO|+CRGXFZK;|bKCxv`)}=^ zx}Nq=6JLA(jQm~uH-2<8@^{7Webn(H@a#6n-r#= zzv}=N=lMH0s(xO|^Q-In%Ja?j>iNACf7kq>Uvx9-fAU4GlS#+?uI9%judkM0 z*|@0n)ir+ND}KHd-!1LuU-?~KKcV}-x8YzziI#5adVBpY`6utpzR4dO;zKth|LE7* zH$L4EAG#U&iF4!09KU(l@f^P?J&Ye8@tgRF-;DgkiI4bAeCTH6U-^`tyN~Ge%dUp= zYc&6)o4Vc`Kke3(FZ?y1&HgoWBlfTSIQvcZQtoR?5Br}T$o`st&HkBrAoiEq`-$J2 zK9>Ea^sxWQ1KDquZ^?dBdgvdQ*CM>kLDkK<{xC2^>j&b9!sc|RW48~78<~@Fs zd5>;J^PhIid;B#u?~`r@^PhIid;BKz9^H)QKkbmYr< zR56{4&R6Fn(dVN}y1&*9=Pv4H`rKvu{$1lIzI6V5v|&1TN;iG}?2FIm>kD1)>|gPx z{uRIJbFbA3WCHqb3z4gbx z^0n+YSGTg?lpgxam$ToTem(n5>7jpiWA@klOZLyq8)N_Eo7r!cH)X#mJ?wwHKl^LG zlKo?If9xN=n*HYJ+u3hQ@9m%G4|V7BS54JD>1I%W+EI7>CUr+Qqx#d1y5l#gd%ADM zsQ!FTp&vfKn2ZD6l-@gj+R-2Wni@~i&8^taJi%`=4*aI{uz%JWeslii>^G%{e&#uT zlX*=4ru1Gvd1l>^f0O&5o6-8A9sS_1seB~e4Au|(9C>5^Gszpe8Rd_5)D3@4)h+2} zP(Ru+Z}6MU8+0?8KdGJShoAaE>V|Gc^`jkm#%Gd8bW?h7{rKEM-uV1#k~efS${+2> z8~&QgThh%Sf3zcS_)YSLZbtb_?UXnCE_M-`KKNGEbGr?A4fN(_tr19(>{-%{T}ihK{uuM`dMe}`>a2cIMB@t?f=Ayzoz2A zPdtgi^M~uiiQnY8hi*#mjh}f=-kJY3HJ+rKLH=pSIPsf|1KpG!_Rl!+n~Vd$8RegO zM%>K5nupLs@|n0GZ_)_ZjGrZ|82$X`wQ z$RGa1z)zg`h`XkINjEG1x|-4U4;q^34PNnY?`KpwQNF_2l60@AG=1Sl=@_ zd|Vo@^f%t}8@k_%#g)6u&zwGS^8Urc51w3{e&GIdc~qBr*YUaNuCqGU=B!n2Xr0_A zmoAzcA6G-^ru3b2)n~Q;WZ(GT4e^bnoAy^{N#&~fuAt+rozEh^|M`5Mbk^2=p?||+ zs-OP&s7J~o) literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM02W5p00L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM02W5p00L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..08f29ea9525cce679f266ec6ab949fa388c4fb73 GIT binary patch literal 15638 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM02W5p00L0p18.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM02W5p00L0p18.gds new file mode 100644 index 0000000000000000000000000000000000000000..151b7ef468dcb06a3130b34809baf44a1dc85056 GIT binary patch literal 15638 zcmbuGZHT5-8OQJEW$t-)c4l^FcV=aCKZKx|EbF+swz(PZx*Db>zLf|%B)j{ewp><| zL@5dBjR++PvM(V-5`G9;!jk$By%Bv#2?>*sSPNnai@wBGbp6hC{^!1*ndiP9-A0z* z`oGWrT<7gN=REhbQ`J?!8dSS`{p!Z5XaDij8~gj-e*NIbAGzYnwe{mi*H4~WUq5wx z{p9gu53R3V@$iB5kA84%-$(YJTwA+k?c@~)s%m90^S(o0diTx0_|BW}Ir75g-}>e~ zcUHS+g4*l1Q~PjKRrNx@x}mBU`_)plXK7&V-B(rpON?J{xb;5QMSDJ6uBuM|{N3&s zSD$phX!>UVN)sR7+>KQw$|p|q(|-J-+AU6Oe~v%=k;VOORn7dQA#u?~d*0dp{@*ubcya7sdc*zV@}uq-O%L0@E%#qsI_Q4U^w7VU`(Jp@ z{fpw1{x9VI7ryBJ1u^LVz`R>5&cMowb5Gg-n=YE(*?!86%!^;#a+~`_(?kF4qwW_+ z%kCFV5B>E)_ZPn8{#ra3`-kV;FU~yWe$n(WK7DWh8Q$i8(Vm6=e(t|GSa!c?dZ)ks zvCrG=9SxZ`bTOJg$}w;FMdmHln;Fd?<(N18BJ-B&&5Y)ca?Bh4!k667{N?9i|Cu-Z zBJ+k%jOLGW%pHD_c|#YY`J){3hF@gfQoWfI=TGO~Y2SByueA8EonPqU`1$AiXZDYt zb>EhswP?Pii-CV|y~VPh+5HWBAF#17U9=~g$3MrX+|Cp37ccmM`$f|?`}6rXsr{UL z=%UV_RU6iYer5f?tY58E^V}b{Tv=6H|Il538plhlFRwJ?OTFk~RDbV=xc>7vzkU94 z|Ig$69`m2~`JLlW@-r^zqQ)oR-^Sw8e|w(pFCxD7{U!2G>OX#TQT|EuKl5Ij%O7^n z|9P+PJU(w{eRs8Q=YPi9cYXW*RJ~bMOQ&poKGSe{xAn<%(Vn;SXOn;1ocjxHZR6i2 z&UO2Tf3Y0;nD3S1+=|Vg>7wbK@hM09*=t4GjV?y*ryT9ZUuf-4x;Ul%I}W?Q@T~iH zh==3$_wRSVIGA_8XnJS=8RrGttC&A=@fII{(e%*IxZ@WYcj^_VjsM`+-hOfTkhfnn zJ&ZqpjmIxM=}zPNg)#}`fSjE}#zzNfP~bM}b)MSI@qAAHu@deq9l zt6^`^&L7i7d*111oLM)Ff1$0Lq>I7&q1^JT?iaT|;eOHdF#g=j?iaT{=6=!iPCw%} zv(Lw`@HHR58F63ir`?RdNV}<5jM`t{YUlrRHi!Rec){)V|E7!fJZwLH;*0o*FGham z86Wd6;zJiBKXF(;#1~mN=wh^fD960v7nwJ7aoYTmclZm>xS#x^9@E3|W8c9qvhUy% zqy2|+qrUqKpLhRA?03g!{o^Bl3eA^vaf+Y($1jri_{AvyDaX3UUuf$->0+?{DaXEv zUu54z7pLu?oE!K>&W%)WW^{fGF7$aH{Jce*_oR!#{8Mhh<{!VvyrYYzcdj4Gv2WuS z*|*WfX#b`h`zHRvv+n2o&CfgIGfu>1{6ylSi__w>?ucLbyvJqz65sUB_&jIb;TKtV z=wh_~D95_PUuf$t>0+?{D965mUu54v7o+`ya@-s6i`*Mhy_wPdfpXm2@Qd8r(8cKf zMmh2ZzewJoi&6eij=aGyl0T{5%xU?c1GH&Q%G=7w0-QX8l zH>uvtX#G%*amQb1aX;rT^+e|{&&gZ-B6*80 zM)^xQ@)o~H{-$~}qx_|u?Qh9n_`Lhs|MK&&|Ll9j7uomliP8Q?IrcsLg|E4v`)7V0 z#%JHaFS2jo6Qliua_k%UMfMMLG1@=s?|a_O-rJD8Ll>j`qa1mMzwoU4$-n%(v;RCN z@9>M{9l99hALW>L{Dn5}Nf(3jk8+F~evxrQ7pILM>lVMr`o%9s>o>)*`Nz-vL*^Y_ zjOL$mtUG*#w(gQH2Inv3Soiov);+oyt$)g~@8K8O|Io!~|DzoH9{$49?&ti;&%^bz z@T~hq_C0)}>7k!}kNAbQ@8M_vOAPLxJZIm-FS75Uixc-hy??ZF8h26SCQcmx>`(ds zbk6_G)r&m;#s1S1`rq=`Pr6@Rw)dITE1JG}{IZ{Ws@3oJ|4ibh`)g(tpZiDeueSE> z{vodZ#{S=Q(e%#vlw;iRi;Nq(sPW71C++=V^ZuOorxV{#=KiJkpU>I+?)T5vFnzAJ z_x|F<&)2Q-VO+W2i;OGdBSz!P=TpXo&$lAuf-XkmLpjC;zsR_tiyEJi6|wIZ{QYWf zKkJydtZ$LH=%V6J8s7=uAB@$X*3bP`x3!V|7jo{T^^>XncT)WmzW*4jf71D=d!?xQ zC-pzQKR@d8&;6G9=U$60>V7+^eeL)2)1FU^pWp9oykAd!zo+$^-w$nkKQ-z7P*?jl z^d)03= zBrnm$4f#3dClBzGA0j?+vaxVO9i__uw|{o>Ld z_lu@?jvxLd`)-i_i_4F@Uo<`RZ@r42 z(l62U&_DmG`^AMP+%K9Q`q^U`KasmQ@kP@^|5p315x+RU=6=!iPCxrFaoL|m;-ZUD ze9G}}pYV&LtK2V|-Wi{m%rmh><`G>qz0*&8`b~V1exr-i`ak@W`^A~BxL-6qj6e9Q z`^Dh__lu^7{{A)YFFfP^zBqn=9NT{wC;G|w720}Cy0{j^w|y?Xcd`9XOz&Mx7j-_3 ztXX!xZ;DTz6JI2c)4XPy-r0Z3u}|R_*@w_Y(>wj-$=p6)|Anvl`kxcWKfi2hKl>c< z3vE9mKKohXp6>WOXP?1eX!}Xh#Ycn6ETowCSXZQz9PCmx9XtaJQg zeYN{U(>uqX`dO#=Me+b$G`-VLo-)tmugE;0i>8Nu<_W*ZI>awV=MVQp;&5*)wEB`R z2J=rG);sYFZ9hx87@S{}W1qt>vX0P2)5HEVPxuR8cYiHj9s4==@Qa*##22IUk8DlR@i~ielK<%lmb?&zZFo#UU%+4$jS z{2=3oE=J==J6Wf+Ut}CozcNklj88e*iNDa=k#sTGe`qK77TPUxZ$THM`wQjBJNzR3 zKo_I@qa1mUUnCDxy_r$|Q!ec_<`>zE&_&Zb$B%N{8;CD*j-rdv{eg0z{ezoMQe&+JP>b-r0W2(NFv$?MU@zn%?Q>{N&u{{wQ+pql?k`PaM_>@kKs|po^w= z#%IpxH*FW`H@X=0pK^HHf9QXzH#6!#?PQ;%{UY~RbkX$A_A}3vWBx_Xadgr2PCs!d zNBlzTQ_{uY{3j0QEb&F|0qCOXo$*sSyC>l1z5uxgpo`J{mvY=&@fF&AAn9Uof2E(a zll~W4JCZI2_ZQ01PW&S0Ai8LJXa6Zjp5rfk)&1;;`FW?GeiDcN7ryTOXFcWToqp=) z-b8$nc|;eZ`xEa8$lKwy4ar+{G0I=^guEqxMDiA0jPjTMQI7r>+I>FhV(|Wfesb@p z|03rAx)|O6X(!`M`$h5)U5xUVdkXW+{Y7LP(8cKdqa6LlUugYFx)}7IeU^5z|BCDb z=%VSJ>xXizJN$(<9!VF2`yb_4XZS_(5M4AqjL*J-UnCFli_!i;Ira_wg_aLV7xVrx zZ(a1ypF8{29aVinubQdqcl2zv%wITj-L7x&^Gr3rd*<*xrty>hjr;J!c9#6I+P!`HVepgTLI{CN$ciTMgZ>WFcFWU1o)~m%I ze%IiiWn1;rY3dhy_u0Jit~t~6u>KAI7JRJ!nO}K5^u|D?7fw;#IcL*s3;-@_WqEAzdN}1<0mhjyq~`HA)Qqw6OQT;4RRz5Y86ox1Y+pM3Y_w;wtCwr@Rg`z_7h ze$e~i_4Gb9(=>yf-R8Pxu+VLmnte+>&G!b0mxwgC)EDQ zA(#H8|Ces+`BwjG9>4q7rs-bTG`+tMIrk@hFWuDhR)1eZ&HqAkpBi%Qk)}a6^}N+T zy^_bB**zrVqMOn9&4KKjdv?ejcW7|w=63%1+ccK^CiBK`N*|s7k#v6h^8WQMXqwqq zw0}6e@{nHO*zd55|VSH11=pS62{guyT|G>OD_D{W% z{bv8s>^G%{|fDYF@ELK*}r055c`+@nEmGR1KDp%59hyF)^9Fdo&Bct(7#aDU-?S* zFPPh`e`i^L<{hpk6)4v~*yhAsm{G%Othucc$m2bzm?Q~K8RkN8!sli%#TH~UTLt^U~$>viI+Vr6cGe^V@>n`hho z%|F!cDP23hIl@;pBD(ohyMOj%_RYO{gz_cboa8UB-;-WHdEG)cH@*Jl*RSI5YpQyl zUcXIz=w{@fbbr8yZrZ=5VRZk|_!oDZ)n=aiPv<(V`?nMJr_8T8ljqlYZbSttKa3mPug3hd`}4ZzZWxkvqnn=pr2U=!QM|veC;uk( z-+xGX`=5M%ZO?VL-I{;pd>NlF^51mcn$k!8*N)!5nwJ%;x~p{_AK?pfpqmF`|Dtjq zf2Cpz|Drh;`{xg4f91LCpEnQ2e(s)(Z|-<7`%UTL`ga}9{>qoKf0uc<-9P)Wyl-=> zBhvZ>~I?*KbM>{mg;= zH(3k)n$kl*>&9=gZv1Ane%dYFll|uM-t0G}hvUz5v%m6m_RpBz*uV4J*>5f!&3;pQ z>-g+h_oI2Q%-($7OH+F2CvMs6%9paA_@#g8p`UZdZ*uPV%;@}S$G+n?*>`j^+JD+n zH}F@U$^Jz%s2}**cl;*%j&5$Z|I{7)mFKdb`a?g`!~LV~;5Vr|_{^yO(2jrj&C&16 z^Kkr`ZuVE6&V3QT_@%e{2Vd9g&-avT?;P^Ho0N;vO+9b*_ura*{a+1<58aIXy&q@a z)ZIhkLpQhcH+SjrO8O@(|%o~5D=ACpisK2yh-uO-Cjc!KsC+?W{ z^q+@h-somDf7&r`{FRz_(#>H0v}4}*P3DbmM)T*KsQa8><(Yhbi)K*&@vFWkze(Lk zH>HR1L)~Zm%5&LI{imO({_~u=kKd&3qnlCvryVr_ze)X1{T50O=db#n{FSG(pZZTf z(nCM@F2*;xci}Um`xota|A4>ph3x13LwO#KPu;?AQn&D#QT?JFbql{q{X#dR`bC}* zcjRBC;x6fC5P!5&d?mk0+@YJ&Th~uJ;*Rkv6?aKDgZl^Vh&%iyaffb3@kcx24!=qK zrG5*e_@kZTEBPxGcS$#c_@f1Oc$i+02vev`OEH>3EY z9dU=>B<@nbg;D%bCy6`iXQkpU>1Ggrv?K2Do5UTuDZMrRXh+=PuT1Ggr zv?K2Do5UTu8O0y%h&%iy@t687jN*?v$@@0yr^)*^bTfMYMx5g#{!M)7X5?p{_?W+m z58aIX+*7%CaDO$qcc7aS?;rmBOzZZ&-Q?cRewe<$uPH?I`KvxZ8-D)Ue@OoF`P_ET z%jc{4^EZ!ws*L}@kZD}$rpIsdr}uC2o9TU%{HEVOwastS=Z{;~=jRj0*FL3jbzY|5 zx0xP)lAoL>ZpnF*b3->Bzmw)a;q%$C{Z0KpR{AeodsFGZu>07A`dH2f|KO4AH<$H! zKe{P>Yke(#;*fQXzQ1x@n$h|ue7--nzSO_gmHIDaeJTD6qxI2_b>TNz7rGg(k2=x$ zOUakQwV&nsVd{D7{@|zXl5Zw?KU#k#*59(f)EUO7{+Nu5ZbswNj&bpuu3Kg_K6Q$5 zsb41JqMOn9v}0WSrt6-$Y5a}!`MvAM{mMIDuf8^9`njKUQ_n~De~VwIo&08p*8}-Y z>7)L`qd!0B{U+!A)aQpxc`x1El>cLX_Mf`J{+syF&B#CaT=q@BWk`JJX5?r7)P3e} zrn)QL+*E(J%pV`~H}NrlGx9S}e9Yg(hi*oG>d@*%xjt1so9ol6c~SfM;otdi_L~d) zv)`27dj6>nem47;3s)}Aep7nrU-)(Qn~M)+zbQTRFYU|zO8u;pc`cdyV*mVl_E$ci z{qyE}yPtEO`a?c{v;UQR{-*TS`Qz^%%>K%A+21wC@84tbm+I#grGA<(=K47>uZYJV z$d~G$DIfE~pBVUgotXWiVpTQFoIB8@*AG*A>-zD}y^#IpjxS`tDLwRaZj4{4bE99* zFEKbj;)HRzf0&GmZbsu%zZr-6ZIVamru5eNbAI@E{WI~Qo7?%Pzm)yv%w^ecN^c#X z{o$O`>wh8rpqqLg`WXj*EVg;@HnV;Wx=6#y6$6j!&HQzM9Y9oVqHXzbQTRQ@4me zle$H}W>mk3bMl1vH_5}47lqQp@u_=^U#Yss_|(6|p#Bl3tdsbw)OwO`Ue!K6?N}#% zlX{45N^hM%?U*NilXE~frMLPyXWDW8ChI^qrMLRoXX-5bU#WVQbaVXkhq2cW+7Wm7 zP2vvSjN*@W#6A8>#eLGvApU7b-r+aNJ9IP3KiZM^_)YRY^;;O_KkcYH_$yU+l5Pg| zhj!ev@SAH7X1^&tJilF^$$pc2Tm4#kJpv*ymkKMH|r+!<+2{0` zc_I72{lSdt2kqGB^!Z02bpYMmu6~gB)Q?K#J@te8Ok$A#Jg08sH>uy~W>mjv$GPD* z*++CUI=|FT`;4FSgPa?>8J!>JOx|+tmCD1L2Wv?Fiuo8%3;8RZZ4 zkvykv2I%mZR z=g)l^Qb*8D>8HPuUZ?PztOLIpz5k&d>%?EFcucw(y#Jvc>&9=g zZgg|I^%E!fD|H{h&wU`V+<)h_ME(3i_rKlU=H_N_UPr&CK6pb%yFGt?|C&AD;Op^b zesBNq?b7&4zhgf5vSRzWW@XRd6L;Tv?5>Ub?>)A0_b2ZiFY7>)G_PkbIZ+{7&V5 z(%)jJU+BNVFf~q^Ut9nFS<=MytAD=6e%D*;;CH}TPx)Q&(e>Xk`dM*TbLu>(I6Xb& z?t{92NH_I-)c>K;&wBZrKK$;-K6L!$d8^;!@^fPPf%wqPP2(RL8~==auj-#(m&~=Z z8dth0eRTXWKfm*jkG};l@uj~7D4ggo=gU0}-^?3_#E))n@?SH$|C(v~+A%dGalx0V zZ`1rsR_SkDm8;6qO}Tn$`nqgut}1?->7C8op25u@xb>!MulqlHdm`Nm)Z3Ap4!!67 z<8#yBSxlVUg~!uZt{r{dMU*o$dj{`5bj$c`UbA0o+Ri^1sbj5sGy8qrk&e>W;aiVh WKejWYb9qgDb@pxTYg+p=)%+KCjpU#J literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM04W1p65L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM04W1p65L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..a84ab8cb7f4fcf9b7bf0d6159a171f0675af1ce3 GIT binary patch literal 10626 zcmcJVU8r409mVH-?Q_oUO^p&Qu|W|(5UFXRZ5n-$Buy-7YsIETDcD;fxgf3WC9z71 zQUzZcL_tI}7Ay!>`mA8}O=v+>`XCe$#2|U{p;S@uLB#c&nRWI)_wMt*mb9mo-(~Gt z^Rf2q*)u06HEEbe>A+x^KAr~pkI!J~?}NkU!owF2fB4YG=Gl#{^BWuIH#fF6&wX*@ z(BUr~-T2%m4&CzU!&^sgz5CGC;agMMH=2Cx_*1vt_2RRye&pmYZhq#658RgyOoG~* z*HZgb4HKm2I%o8w;=zbSpE ze_z`^zCD{Mnf95x`RPA?)BQHx|FnJVDM#-3O>)omRz~^H|6JN#yU>z$(aorR%F!-iW+4)A4IH$bNHhXYrfTSNgB}wfe2~Vf|`{mr}~QxxBuV`S0~j zYXknl%N@#>(9P*58*8 z>mIu4^|P;j)<2K0um8=RCAaB4EvXmX+^v4EuYL9B`>^f)P%paa`uqIzpOk*BJ=YQ+ zx@mvk_2@&-!Fab z^L~ojA3t5%ojlW$cG1nK{hs&VQog)DqxPr&F73|#(~@@4&8YpJ_w!Qw+}~~O-@f$z zeO7bnA&vJ_E!Wnxen~fVy}N!b`6q8GzRB|~@u8cMzxi_UP2bfLAG#U&c}MGdnmyGL zAG#U&=XVs}{O>LCp_`Hay8r6Fy{Ps3r!AS2=%%i(%#U*8gT=q#AB%r%9*q4H?QLn_ zY>pMbDLrhzQ6KP|Q~gc9OzA8A>DAKz!Q~Fs@2s0a|0zem@tgD;-HiI5%c-yU=|803 z=;m(y=lE;MPsF$O)t30s&E5Rmcl-+~H~ifH%pgCmlN)}M+|bP^zg$ka z;U_;xZs=x|AI~Y{=lL}mH@X>(pK^>F|AHEK*3Dr2lw;iZO~#FGM&r-rG;aKiA2M!q zGaCO)drZbXd#NSkMmMAJQ;vS)H|aOJ8TFrXv2$}w*I3u@e1H-qt0j(+1e=|8%;TmQ)oze#TR%_u+i3F)l*uKj~KxL$tgru3EX z5B3T8*gu%~(9OutbBd4W*2ITyMt=4Q_}D*~_|VPB&prVk`v(&rx@mvipKAXUp1+o^ z_ng1V{>$et<*fZlZr^0z(zk!>Yrp6GwOs#`rT(@3Epz?S&EEZy&u^Mr!|&GpQRVbc zb$?N*>pSO1_46LapWn}w`1AX{(*C~jbwVD9@iMePuqZQ}|fFOnm5OEE{5(JSAwG07^7Ed+$9u!Xhi*oG_8Iut zcbNFl&B*WdXZ!QlxBm3qpPuvYj``1X&HOicu1A{xrl0SbV%sxJ8~J?Y``dSZJ}~{ssS9{A2TI>>pk&eslD#;y0zQY(Jk5)ZctQFs~>-J)h)K zuZMp6iQgm#e5Ul!Pe1XSDxPyYFQSxN5r%_x7$kvo2q{L#%Qf69?N z{sonL*3BS)%8@&MlibnGD1Y`j?AzG?nC#oo&29U)rS+fn10U;;i4Wb3{Ooh^vHvmg zp_`GPeGWeMKPEnOGxD>~!NGXQlVkgTz~^#WKQKA*fHXe&HyUGoSD-WETlP0!cZb6aBkzVM<2O( zZM9DR^+wb>*Y`ZHe_y9Rj%uyvs`6a=T=irLFrUlxCmcMe=SsRMdFOqt{^@5*x#=q{ z=X-TerJJf}rGN5V@ioU<;zKth|43&#`Z@kiOMK{NG#|pY5JY`CS%1*JB?#{(60--|h0dDC&Xu z(9Lb_AMdu$?*|5YhWXuvIopz7x+%Te{*s@6zsEOtxh1~*@A{R!{yP8iSxo-5S`WmJ zZf^4*>*lYP@@LQYTXNs{nEEsKzphLAU7Xe>tw>sz8rG$+m38TToB5O1CG{eI^18%t z=JeaIwf)V>dyk*K=XIz}zm!mIXFhrVy|YM(}deOIWXU**PZE4LM98*@8(rkZo w;{LnuT3J_j{aw_>@8atBp7P&u{JzzF3H|!r#BTooYb@)EcKcYSN_(9C2TaxllK=n! literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM04W1p65L0p18.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM04W1p65L0p18.gds new file mode 100644 index 0000000000000000000000000000000000000000..5804fa99dd188e057839365662fea5ed126f7c1f GIT binary patch literal 10626 zcmcJVU8o&b8HU&Xo3r=MNr;jvu|Z2wL5VTZnnV#v(nO7^3Q1F?w%rkuK(V%mR0|bB zK~Y-#K`4UtqPdHgiWd5V-dO}MypbYasHh+)lv?yoitn@5yfd@U+4CJ+n_a?_zO&wM zt?yfF*38=3sY=5%O8W-G^x-tne|!c@e?Ks+9{k+Hhu(W|arxq6?V@}(~< z4jy{w=;E^h^eNRfm4~XAyIew<-rml})mr}2P^0VSMr?(WpDLwmd zX!?KWFzrd}^gr6rpD*=apZ->+fAwEqQ&N$C^1;|YzuNkj>a(Y<4|(nULrSLeGM!(a zpZelAT~~8ceNX23*s#~h_|;qXn}d%PzbU=fzpk<8 z`|hp|HSVmN_4w=kN#k$#r@<+$-6JLbs_W~&j<2)7*5UPRqKudhzGH*L>Zb@8p zbG!J_{B)nstNNdwE&a~!Xi2~5X4F6NqyD?k|5g20-zfdA>0Vbq3DPgR>Hcf~txM0} z8`bt@)%ce!*M6k`mu~8McmLVqpXl8RzgZnCep7nrA0H_GhQBNRv3Vf&51%W3Gv8Ah zzbU=9|Ma5jCja2^miW-k?fldaze(Njn^FB}N8Rw7)D7K?>PI{3hQFcemUT0z-}rB3 z+>`IMWZdXxG=ADKZu}Q-%n^FF>BX9gB`RBMbqx@+{-uN3T z@2s0a{8eTg;GCrJ}>n%rHA#yNBvBE)X$9k z)CnK;Gx4FDk)Jx@qkbknbTjf(Cw$b;#D{L$e}jgl@2B+s6rR79u6NI0)5fpwxBULj zI{Ul&Q~k{8*Y*F>P3gJ*tNQ02@%!hh_`F99A5(1Jk7};{K9%>In$ow8AIGRqJcT`EY6ey#H+8 zf4AL#y#6(g*@ZGbGv9a8P3gVspYd%vUvC*-j;rT`>HFGr{Ca*D`F!Q^UDG`NM`O9S zrN0+4b-jE4Z1Jn|%ij-O(fzHsgPOYB^`F>$zT;fT{?PERWq%l&%inKp@pGocZ*s28 z`%6vf*R}uAcS`@}_-N_hlpgj!{&Vr0lW!HjDLwR8hl{`ApNhXS5BK}?{;4|W{j(-{ zpqrY9-v0ABPWk5ZovD1XZXS*OXo6>vz?DO=){@+mXvTg?T zqaFR=H(7uA`B77P*gxw&pASvV1Af+jX0ZOb&OG5aS$F8B^ss-{9e$H}z;8zDkLMWU z=egEUq;AADqx$7`svmyp2dNvnxn2EO zcla7=-Qj0FX9nw!=R7{1{|)8Ky19*?y5l#gdwzeYDZRJ;v}4}$`PS6DXWb0upLWz8 zze(NE&8Yslo$8LC`a|lDZbtRb=TP;}`wji)bFTVFr~mqTZ~j~-|9rkRm3P+7Ab;9X zcl;*xM>nJTzZU&dx14uP>PB31yZW*2@Hf=D!_WH74Avj-d9>SkQ%mZQ-~Vbx`#0?v zCw`N0fm}mSARfnvb!SjoD?9=#7))BfHJwIokN#(tD(vtU9bkpyz_50h> z`_FW(_@+N;i4Wb3{No+PH-54uK6Eqkvp?y2-oH$I=w{@fEQ+6ho5c_Dp_`GPI?XO< zovD5%@4e`z^xpZWPWY&wi4Wb3{L~2_^)vCIn~|S7;bZ?d@u8cMpE}{o|F&HdAG&G( zx|->Hul4hWVLF$pHxAMyRc{(3E!P_-$M*h!&*N!*-{i!d()i@xh>Y)0yd&xLd#les zaPiW8i!VNSY4O1Q_dQ&y`f8(AH(!saYcE`nsIzCHs7v>y&sEQAUUq8^&bQ3xDe0!J zZ(W!6>r6JdN9*XvEr~ahZt8l!U;XgO=i-{g}hi#v^jXP4%T4`ki*G42@{DEqj7-7ff6M#Vl+q$G0_m$Z|}3t$9w1gU$AgV^DFD@ zwfFw7bIv|z-`=7uhQ+AZGZ+@{F9!OL&!F@7{loIU&s;kAjsxrG&a7`-SYN+zZhhn2 z*^BE34u0AyNZC(`-Zm-89DS;v2+KR;_YKC8b=H+8(7?-u{?tJ!a+KIymm zBYmNNa-=AxrFa;`h;sdLPkycbJ#W+V zHlz8|fAN#W^|AiwUS3$=@EvQM)v%Y(NedBX)F#gishK!4DM&tK9KRV;{{E5b&UX{n4UDJ?p z(amW5p66R zZ}`pV{4IYf`&L#P;zKvL^K;(u*Hmu!Isb`4ejFz^{3f}fn^AtLopQrZevsVI%_zU= z`*PjWzc!?9bTg`-cGQi(rs__*8PrcZ>c($UH@X?spW3Nz{L~Mr8{LfRpMNyhJ^xQb z>P9!C`e{eq_-m@}q?c&s~kh;;$sQ$^@a@~{PHl%KJGpe6< z)Q!KU>Q1^D)K5F=#&1$Lx*64<+No~*)DNi}-HhrVU6<<~{k$P{qnlCvw4-kPHC1=g z&7gkTQ8#{*y3x(3{?tx&gf*p_}$s`wzXp_3!`sj`!?O^826nZ;$11m%rRF&0D$| zjo-6B?Dk*fv-$n7FQ2~o^ZvhS|Jm(d^Gxqen!m|=(@47M_ov?eTl>$ME*pLS*zI5Q zPyKFsKV$x>|9m{1-`@T;fA4Sm`cLm~YLnjIDo%f2z5i4kKGbvlROgTP1Rc-s4;AsJ z_m7J9_sy@pf9gBl-rw~dZ|^_*j`!@Jm2Y$XrZu{|zwhR+bzty(UKh;S{ds*brEk5z zy#LlZijQ^G#K-z-Mt+{d_;@ax_|VPB&vOhP&ovVtx*7R-55mWLk%-)Lt`mQ*7Fkj#1@VVGO zKAQbC|CIe>^Jwg!d?owM@^JQ>(!=?e&t|_lyHOsNr6T7I-Hgs(dcW5^)BC;oY`%WUr8>SaKaO*r z@tfp;Zb}dR%oD#!4yoUY(nEjx-bntM$^k#QBzC{w?OgvH=X^81$@ebGK)KkdjJe@*3{bTi1GcI1xVBzJT( z%Ku8oXPqZE)_;@S(9I}6+L0T6ll)S@6{GxUM{f9QDz~JYL4LF&H~c2Kp_@^Dv}3)( zUsKmz(#_!d<2g-kJikqHLpP)RXh&}NP4Y|qR*dqa9l7DJsoauo2KmvB-0+*^hHggr z(T?2k*HmsvH-r4r{!0F|zcS@Zy19*?-0_>_j^B*(ryaTDH_0E}jPj=)x#O>?+>>qw z`O}Wv@tfq1ZbtcE@%Vq&wSJds{Z_-Yuaa)+_`>ynvX*_5zcs{%Zbts{o7u-Y#ylWC zbTjggG*9+F%->A=9_gm{SJnQe^ZaAoW!%{}8Zs`r8I3=GPxj6K(hwiI8TpsKo_)*j zZio-vjQr$G-Q;glH@X?sPtN$r-Nc7(Mt*X_M}8(gbTjgk6F%}Y@u8cMpPcZKpNS9M zw0}iqY5%PAf6cJCr6}Jp&_8pQ*AC=dxo&c7_al5BEmrnSj^8egPx_6^_>%HGQe3sW zyyxCCXYXGB?0sj~?>&F_rF>WXzrB|FM&Q-&b@te6(d*I^QLml*s@m7h-l+WV)OozN z;e4mA6X~Xor*-A(`n)vz?w;>e@_p-lqw3_t_d+J)rSDZLN)P+r^u0%?|5Dcw{Y_Pz z$-L1`&%dw!k@mFs#xFI*hi*pxr9;`byssfXbTjgk1MSlHW);(ZTDqy@?REXm_P%`h zagF;0-2lICID1jgIO(R2xBYjt_tpF^4!`@c4;_DXe4*dt^1C$pf%wqPP2;b%$6q}y z-^=n{Y&hG{zF4}crA{=RRF zIoI6lq*3anemZWUmp+mf^dCP9Gyi{bZ*=6ETlSo`zH#WPjl(x=Y}{~YK`lnAjyuN6eoBLrQ<|KT z-n@JCUz#Vmp|QF{0;wC{K>qv z+n-)6<6gLPiW+y;&DrsvH$DIKNtMR?6#tW!!>jbWbW_)-$G^qD^lQc6m6FMt;y0yF zSD-3db$!y7x_-~0{8MVVe^~Q*HjQ?V4r*Xi_4|t4!{c9zd-V8gaZkSfTHLSKybtVP z)n2c8@1*ag_ikRbncZ?y*{%H(v@^b%QvbIt$E*5Xx~c2a)mnD@lz(_;@i%;;_=o11 zvA_SH;x`9BEPhjZ*njUg#c%d6Dt=RXr+-l=4f9_*(vo?jo6-DCw=$al=v!sp<6~MfZ*()7KXJ?(f5Rt=pZwSBo#W>^^Tuy7 zZ*)_7=-2$R-(>!|-Ad`5e%;;E%2#xcd$i^1IN$S5VDo6^JnC%-CwbMgG*H>G#_2TzuH55Lrsd83=r{E1`U_#0~8SvQ0E6UV&qo6H;C zjOI@q^Tuy7@7!+XrumnprFZ%V zcb9&L_q3#6bTjIItS1u2KY6JoK6Eqkk3Oz*L*pG^+>&vlo6-0ee^Go(_qD`_Zbtsz z3&q#}cT0Te<|co+|J3}=^D}RBGxD>}x}I2n6W{duNB(*1hacUH{N#y#Coi?cH=V!8 zKX3iMZ?mkAg$kty>xVWD&z@e*KnpjXV$lWjh@19)Lwjl%UuuYtd?%-dam!T z_S1uL`$<2vZ!T!fv$o*&HqNA`K4mceTWaZbp8_xpK2&dH$(feW!kxZc6VQKXJ=iFZ>N3DE?)0 zE%vk5@S98eq)WS|^sxWQ*~Q=R`Qo3LXUG1LYLouW@i&X#lpgj!ysr4o(c6mOlpgvA zqvCIPfAJ5@QMaEuA#c==N#4-SD1XF}H~bBix2&5%{)i)Q_)YSLZbtbdj=bS-sJvy} z4Dv@DdBbm#H*_<~A93Ujze(P5yOmM?h$CH~c1fLpP)R5l7zeH&ouTZU*@yj=bSF$s4*E<&QY>hTkNAx!uYrf5eeD z{0)`2teZjpCMT40ck-u}oV(~|bp9?rS$s>kw#0{SMt=ICZs^~nZqUuBeu$%P@HbT5 zWZewvhdAm6ze(Mon^FA`N8R9WsJh9z8PpGP)D3=xOPd>qi`U!`D!G%eool zk2vZEze(Mon^FA`N8RFYsJhL%8PqRv>>KN_7BgQYvf7KpC*5$KsTj#-~aC| zzQLzj;_FK{BmZz$@eLnri4Wb3{G4-)oAb}ahi*oGo|EzM{A}VwHzPmu=@; zo6++(^TfyeO?>EPp$a}U4C zxtH6mjLtveICt?kR6S?i49;KT`22<6*zP0};KmFo2+4tFB8THTS4EpEuhe^Na zX4F4%^o!r5|Lm`f`p@U2`se(le@MURX4F4%^o!4=|Lm`f`sX=|etG^f=@;FM`X`Ql z@tgFY{gqMwJSX7e`N70L{rs?^ZvOS@Zg-$Xa(-alRcisQKfzsYk0e$&qn_5GvX--Yk5%lkdIU!Siw zKcCHezUpd!)BEc!?KA()?;p2)eyQV|cmJS%&`sCRyz$L>|2i|ioL|-F^!Y}+Ilq-r z`*YsEZX~|#hiQ--{MmL_5CmB z#NZ$0{4j?(Z}FSbLx1nAdVZPD6@Sk>tJ}{x%eeFVqe{k&ZbsuL zj&b8R8Fy~CG8#W|j6a|MrpBFhGZ;VjDaOzJ%VgZ>W;A}{7&m^C@#l6cqwy2R`1AeK z)VQ;52IJ?P9i5^2)A`%*@8$d*nP+t8kNX5Z?jH^1%eoo(sb75D{~F4dbu;jjCw%0u zp?q0413&A8kM(OPU)IgQpYNYq_k8~}weDFrgY_qlyyG{?Ke`#^pLz1lN9J!%PA~H} zrFZUM=DG58nZLRE?J|E;dgx#NPVt*7>&0(M5B*E}t^n)b@R{OYGEa^DlfMHRDvu^ZnvTm%48Lc1p5%zh0ey^mC&`n+M?4LODoS)xKohMm0_r`wC*?fPiq>k{L zy58A;etuKk=I1w4?PT2y>X$hB!EZ7jbW?iRKj$WXll8=JM(1aKe$Y7c=g&&Ufo?|g zCysIE&%dU|lXWv#f8rP?ev`bTo6G!;AHVbBohyIbClkl6=0X|cDr=N44 z@pAq*)Ouvy4CkpX+x*4rMam*KAL#=1l%^?58vCjBS@`!Fq@0@>*Q=ait|B!V=H>3I| zj&;V@@af`bJ?r(({ukd--n%U7e#840$a@!b)9+svzh(_W9yB^Lr=xP3fKf@n=du;}=@e4!Wsvboz()72oKbmiW-k$lrgd_y#|2 zi4Wb3{EMUFTfDm^K6G=F|H|q2cRl9+4V^WNzjAHA-l;JEO6k+{zhe6Rn|*wL9zVo~ zZbp8-Cy&qLaKGsI>-FjW_s#VGi2N_>?0c@|>hILQbW_(m{d^A<|H4x(@#XKQR?hX; z`pcg^<>z1O(GJ9qZf^3QGrj)mDgUhgv?X=RkE#F7<6kM~ufD&lf9*Hi{IC5!{CNKP z^VIjck57}`qx1J&dfv|b>7kwb>w9VSzyGoeFL?F+*Z0oz{QCD7+s{88(V{)3V`X&k g6PI0b?(7P@vKGFkD*7xf9JplP$1bip7>k4Sf9;G(a{vGU literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM04W3p00L0p18.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM04W3p00L0p18.gds new file mode 100644 index 0000000000000000000000000000000000000000..4cde6f4523cd8560ac55fbdc88b0b9483a584e29 GIT binary patch literal 15744 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM04W3p00L0p25.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM04W3p00L0p25.gds new file mode 100644 index 0000000000000000000000000000000000000000..9c27d27f4e4f6fc0530d58c3968e96bab3e41373 GIT binary patch literal 16000 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM04W5p00L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM04W5p00L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..5d8be3d3de38e43e1fc3d99522e0c4e1288ee80e GIT binary patch literal 22080 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 =RF%IzKkOpz_bQ+Q5gBuvt~!Gzw$4+ z{x#-~?)vf9ek=Rty6xFFm3Ouuf8nLbWRXP)Ud^Ka6Ba&x)<56{Z=S02gj zADU-%*H8QTFUOcabM}nvo60-ek3aiz_RYEPW#3dD`tzq}zw&VQ=gsl&&&Jk2^{@I) z_RWQz**BGU*3UUJ_(48@OvW*tONGiqzjw4e{}lFrn0-^9cltBG*XgiNV|Z)J^m8ZW z=92Sktp9T#$ljdx5!ZouvK-i|4Q{I<>vNopZQ~)SU;7TkCdCIcKfswkM>u}OSu{N)I-0i-=zQKX4HSq zKjw||+hpFz&1nA8^Y>Zh`P)2_@4wtX%IBTq&*$7XxPP16H^|NC{*lVPoPF*eT!;Gx zxf$I*D93#RukvvAxqp<;!}fFEz&E*X;F;0=BbC$rAD{a_et1sdewp5%Os$)go5Ax3#lw;lCRchU&+zg&SD95_NH(592X0(1%IjtLf)(>Rekeku^p&aW5 zuTtwKRekeku^N$-zZC+YpMkaa+A4v%!NU&^sg z@GG?rQf{6R`>YdulXZY^D(~DsshrjcKIaW&9gv&KL!WhmSNT%*Sr1%CdFZoF@J-eM zo~bb{N7{W~$Ze{)XooXh!PPVdg=hpD`?e%1*d>&C<*HzS|>-1I->>i%c) z98Yd4@2sEp)K2-dA0Oh8o6GsVv$I!uH2b_)a2@4g`|)Uhr99e?pBVUz z6CUGNDKF(_;Ils1=d2%-=OA)Zd1w16$2{X#Y8+E;?v8!N8Qt~$sP1Yg4 zsl3zYdlKHe`2NJ?y^Gw8-oN;s29NJ=OgwTk@>w5vtUD8r+>CtYnSL_=Ci6gUD(~z+ z6=Wuc}djDda zsh9Du)b&zs2KCcU>Y@E6=P zGy493_Z-Uc{$sL^$W7&){pURkkM}PVkKBxW>fxNA{>me{{-GH>zvA7BNXpIN`IT}!r{J4Bhmf1f!}jx>f^YI1f^SC8 zuax6C1;0}3DdlGH{K|Vi_3-|0avgG0d1w16M?di^)t{7`!Sfg8c<#eD8Aoz6dj6vv z^NepYkLkLF%ER`v&hRT=&OYmj>nIO>);Ye(I>s}Vclzuz#+m(Bsd-De8O$H$SU314 z^GI$+>xXiTGrq|@rt20e58Kap<5y}v@tM!WVE^zrG7{_?4PZeC9K8ne&VLKKsw)zR&(Mqx(PC$D@7|kKBy>RF9tXsGsL&$a5UI89hIz zdgM_*KExw8m-Bh<#j8A;eVzxoj`Gg&r=57TyHZ}t&A?}$F;48iO7$b<=A`Fe|NQbU zeQ$n^+RyJd6sDhBDmRrM-~JK5(Vz75)559iG?(&C#hw1#FqfPASxeeMZt6On{*1~} z&&+Er@yN}{@4uP7=^wSkBR3;|@M!ji=eEQnH<$R=jsE<&r?OLbYQFFbw`e_(o61M~ z|GCkh|Jvj4&%lRxp*;RbBTZM==iIq^k?;tTe9x?W9lDM`xkU1=D+_# ze_P^U>ED+4$>-9a=kwnSGJIYB3C--b;YH_NdBHpPXZou3yDRt8-%Ij3{+_EYx%i#e zpMG!axrx61{+s3dKXs+v=daPRFx-3jd7rv;d<5V26^2i6g)2UL)#c}xF`Utrrkno* DB*O++ literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM04W5p00L0p18.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_aM04W5p00L0p18.gds new file mode 100644 index 0000000000000000000000000000000000000000..22ba8e45e16e4faebfef79877dd3136e337dfe99 GIT binary patch literal 22208 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 CyQ2>P literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM02W1p65L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM02W1p65L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..13ee963a1c24fc9a0a13a821854db323bd545239 GIT binary patch literal 11190 zcmcJVYp7jE8HQ)y*4}5IlaTZlqfuhjR%)6iN{k}WCQU1$HEPllt>{6`MQLJUYKsAd z*dIdmhhP!4wI~&>f+A9}{_uhqjGz$|Z(zX-La`zWiWL;`eP-6X)?WLpHOEA{OL=nM zHSf%P-#2UaUbA;7LO%?`rd~hX6ngrPSFiE!t^MN8JI-u>(YEEIhnG*CUS2+ZbotcL zBkx+?w*BsxEWhPd+g^BR`>7Z2xMka^?K?uaY%qHH?t6FM{QZaj`qI5$yY5pD+c5|;L-f5A0BOaC_Y*R21I(Z3~)?{V=l56HOa=G^!V zKO^CD91tHbbI!ke#rR(iVex(Hr(_(P@yq|E&(6Q$59gCFjxT>4Up{pF<@J^R+5F2# zTgLa8?x*Z`*1val{==;yjP6l_zgM$(n*Nq<>U!2c+>`tjf0g`0b5FN_^jHX!e`~DM zH5Wdtxkxv4y>oopjlZ7!=Hx)~o6$H@caNpLWEJzoO!fy4j5XhS~i0 zw#cix^?p%v;SKs*x~c24^Izc~?@RuQe@p(cxi9Y@{Vw^<;)BU=O3#izJd^z9NNbV# zo6SiW>+7UN?lep2%T>P{nZu};3$9_xZ;vYRr zd)5y%_77^Vxl4abH+8);f3#bCYx0{*Ym(oTp7r<6CBNB!XY!lUv;MH0{AO<<`AzBF z{-3707w@S_-AB^RT>WWB-SJmc-J@=1>Q6iBj^Cv2=w`0|w4?6$P3j-}Et#u-@%~iz z@wS@O9o@{;pLWz8ze(L=za?|^ryX_2Z&G)3Ggp7wQFr_%b&vg)%+-Hq*l)>P{ip9vaW7t3lep2%T>P{n zZu}J$cht>H{Inx({3dauo4NRDN8I>L;*b57oQr=szWZx_dN zx<0#qH2nR&$v60FO?>F)YX0e$)K-3T>DkF|O79$>dE#UKCO&jC=jU_RqV5wuFPMDp zMK`5)j!!#Y_|3lFPtZ;2v;G@n{@10?&*3J;{%5ry2PKOW`dhjwJ?kGIOMY|V@#Ht9 zNB`yOQqMRV{~Dej;`7V+=UR8yc3)>r<*pZ3E7uRV%&%Nu#KF9l^zdPNUZ&?)KA)ug z%=pO*e$#m|rN{WnXE=Sn)-#-*-sYa+Hh!Gf{V8rfTP__7la0kIci(#BMfkUCy}!Qc zFXx{=-@Cr&mGn=hd&3;>P<^DE(r4@2@DKl`b@^Mh-CuL*H(F5AOn?jx^|e4?AqYq{=~*LvNv zZhLQQiPh^)^uNJTUNi2;(oJ1odEb=v!_N!9 z+5e*QEZvme=^r0Vd7B)nN#4-S)$-?ku`55L=DyolpR@aNV_zxbo9Yyb`o?pQlFSR; zoSUDXTbt|O`7h_!xZYB~#`W3ywfPrbt33aqk>B*(T+V;;1>IZcG}nLB9IV%SiF8xf zV}08C@BcI3fB$u<-@!vQ=@;Ext^dX5{?M2|{Y<~BzSO_T=YDikdguJfPp*IRK)>Y2 zq+fJ1*FW{~{??X1u6uuKz5Wy3XIFI3AOGC`&{!X%_pahs|6YIP`d*P=>NMD#>J_Pz z(O5roefRtr-~D&R=lQpdAJ6?Xj>m=5o!T+Z*Bm^U#&7d;{-EpeT*AbUZra~Azy6@! zKim3W*qZXf`XEn{8ZYYRD*4I9&+{|$=DFHr-sq<1-!{K^f2h6l7OC~@`=-1;yZ<)o z?>OTArg=cdMK?WuTmEL(XWRTZ8(n;+_Vc@I#`hKJrmlC+4?i#bX8%#uSGp;^(?33& z^2&27`Gv%VZsy`^dH-$Pf5h+i-?sRxJhH!#SE%|#-Q3xIe-*la!#BIHbN~5zIsTs6 zb64(zg({p|@%}W&uSkAVde%SMo%|L5 zl>8%ecizwYH|Lh-@T19Z`u)2tf1~GX|NeHmAI&v)=x^z!^v?OyZt+C&n@by#-;|#9 z_r8(*X8&07o6@uX@b=_4dzU7^DZSgTeTa3#{!~%xhW&~46S*tzXWig8SvUC1-1?y% z>juBcxxXu%8~hcuZlZ2x)=%6YwSE?~->`ll>jvG-tsmMkF20HyH|pjp;}bW2 zleqDlx%gu{%f2_hswVp$x|!Sm_|B8@7d|^f^%r$>mGRj(8Q)~zjPoj) z+dupI+(6z3n`fxJN8QZipLWz8ze(NE&0PIy$GXFBvhHHPC3EYKINA4!-(=rMH*@n%CnX4b46InleZmg(rqi(J;K6Ph&llsSbmCV(jcGL}jMb$0pW~P3$qi*<3 z>V|IS>PMX9jrdLShHmEa$3C;DIvOr5bF=i^bMfb9 z^4I;hoSQZJ=efLhPHW$V~p_}nM<6EiyP(&Y%YR2;l>1NQ2d6?2yK8JZdzB$D?d9r3a zpOkJo-nR8pD4%oZbd7wsoFg`_Q?J$hx$F2{&$jt7e(rk9IY?uEv*#e?KC16GtM4ZZ zeq(x8snTyuuR0oE@i(SlN!d@|Rr1~N=-M#dSR8!yZ3k{>ep`7_z3H0?^|trG?tS~U N-LKdGWBor2{{?FCHKPCk literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM02W1p65L0p18.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM02W1p65L0p18.gds new file mode 100644 index 0000000000000000000000000000000000000000..21c707f1bca1739a83f1781ccf7b0227b35c12e0 GIT binary patch literal 11270 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 GU;G#AnM?5i literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM02W3p00L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM02W3p00L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..e3f25c3d1889621832bb41fd19b703f74319f6f8 GIT binary patch literal 14758 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 i!^ydo6*rSt#DLK!A|JRSnB9_t%*L^ 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 Rz31$C#aX2`&4|;@e*v$!nZ^JB literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM02W5p00L0p18.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM02W5p00L0p18.gds new file mode 100644 index 0000000000000000000000000000000000000000..630bcd2766fb010f20381d32bdeb912b3ed54ebe GIT binary patch literal 20262 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM02W5p00L0p25.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM02W5p00L0p25.gds new file mode 100644 index 0000000000000000000000000000000000000000..1ef07a6b06fb2446f74661a01dee332aefa016d4 GIT binary patch literal 20262 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM04W1p65L0p18.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM04W1p65L0p18.gds new file mode 100644 index 0000000000000000000000000000000000000000..b39e1dc95a662bc25bb44d813023a9d3d7f3c807 GIT binary patch literal 15602 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 Q-~K(9zq6eCoH$$jA3ngu8UO$Q literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM04W3p00L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM04W3p00L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..f8e37b56ac0c9da4282c71cd9b744da59f5161db GIT binary patch literal 20544 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 G#s2_haM7Ru literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM04W3p00L0p18.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM04W3p00L0p18.gds new file mode 100644 index 0000000000000000000000000000000000000000..3b09a57857c408acbeee8517e7934040d66b3b7b GIT binary patch literal 21056 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

*H)>XdHkcyIfhM~b)Q^NTsA{RiEY-s_+K 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM04W5p00L0p18.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM04W5p00L0p18.gds new file mode 100644 index 0000000000000000000000000000000000000000..c446cff9121250f7b6556e4d43062359801cc7d5 GIT binary patch literal 28288 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 Ww*CLj*-pIq_#3~sT{{cneDl8`we|G? literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM04W5p00L0p25.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_bM04W5p00L0p25.gds new file mode 100644 index 0000000000000000000000000000000000000000..374b61592344b6b388fd70fb9517ceba045c8ab5 GIT binary patch literal 28352 zcmcJYZLDQiUB>r4_nvdleV;pTckZ+(sa90#bOs!2#Y(500$RqGmZnV!+{Cm+(zg+8 zV`B^?LQFN3C^6+lq~QxDhDy^Sez1<3YClLN@dMEirD{k)Gb2&QBASfPZ>{yLea^jS z{||EqhLm6DS?k$rt^Zo8^qSe`@|j-qhGs_pz=!|PQPnw>s|M3oxbPpU)nl)?BO5X`uS5wfB5#}r;i?e^U>3q;XZt^K;?Zkv z{;N-Y{o0d%eDxC_yYns0<^AC5gNwQP+^}f|E4}7z&0w|HT-98)XEyb?nZ3GcdarIO zH_m3=RQcR`(@gZQt!3Z(kF~^yZf^5mpW5HwwohyL&C4#&|8DAUsr}{L|C7z&V6W*n zgN+&f|1fc1zN~-!=12JR(Po)(4L`1__=RS;Ie6oVx7@Tl|K>B}{t~~NQvdgq{=cDV z=HIIx{9(&Q{Z*@=F;zYqza9SdKgoV`|Bq+CDSg!c_R;ux-aHSEJ38?%<)i)+WAp!l z=IyCcuW;jDwJ+UNd8a?ME8m{`^K~G;)Q`e#{;je8pVT}(E$<(-oV`;0k#4GdwEZ3a zjhD0E+d|lfCjCY? zr}h8P&*lD`>>K)TN>BYS`{#zVe{SvGKbQA!xHAPsmt`;YKc@aX)$H9I-2dQRci*@5 z(7W&6dhmh!9=Wuu&VTwlan*&lekZQFq*eXxkHE@fy6R)!?zql=D7tFNValO81DwNN zkV9v{%zusWFSP>D&2k2e<={Qv`Wl*fov!sB^63q?z4_*`{WR8>!A)xSZ<}W6RV`;e zuf#9iRQc$B+~MEU+Q)AmK9v2Y^wIs0&y$N7%i1#<%crJ~Wld+m%I!HfR-RREL^p3A z>x*`!&bF(*^|;P{Sl9Z;W_5FL*F*Q;|H#(q2e<9Zi@xH@qsm4{c5%h;yC?n0Ib-ne z>epk~ zYGawE+-(l7Z<>R5Xg7Xwgy-~kbn}i0yL-fcfZZ&A<&)Wez&sTD_x)Y=oBJQgepC9+ z>@w2+UhO#AH}@UMep7nrUoYdYJeU3J=9Ka8DdVqvGW++KQ^vnq#&51Yko~6g&i)T? zQD#*;!>_hn)^b5NRUY~m)gFFxX)gOs>7jq&NcLAgm;DRok=Q?fF8j^l`?BAZ9=1Oy z<2UC|X1^&t^!Lm7&B0vuo6AHo{{85j2!(XX>C*7RVf94Ip$-Ln=qxqvA^M>DK-q6ix{;0>i;WwGLblt*e{;0>i z;jery`v3)MMW8o6K9fZecWk)MMW8o6KLjZecWk)Jy-!Upe~kxx91!7VpaE-r_e$cusSH zZU*_EdYpUsE1%4M&c9L~w$HhT-{joGXG#zKoO}39&OQ8QbpBC~a}R&zx$NisE9GJP zoO}2ypUghaKm5`|Kj$8PlXDNBx$XSRZ)^OvN_Xz7OKL+;O6JCmdQy>YN*`^1hky3( zv)^1<&wf*Sr+=`Zc7IKKXQd_WqMIu3^bar7TM4zl@ZBw!Kcc-S-Hh5_etq_>s7Cp4{LT;BQUHSp>rMF#$ZvTM7 zs<)-`|6s4#pPy=G^i;F=p&Z{y<>js8X#B_8?|;AA(x2tMEqk9B6p-~4G@ z-rF0O>#b&Z{msQ(KCI){n}QNQ`g!QV+ix<)Uu>D) zyh%4zKDvK)_?KRh{guz_@A5C1uZaB%pUr-AaVz^x>0$fBQ`ujswL|+u^Hl5~d?owM z`448lDLrhz|Et+=4)msv_D$)be@=;&_*b6E{yFnNx4-|(%Fc?{;EI+rT2ttz$~)U1 zyqJCSztIvOx;f3y`omwTb%&qzmpEnp9ei6Jzqv7=$8SpS>_2hde?I%o1E0u#Q+nv% z_krv;_g|C!ru5Li_sZls4zh>SR`+4(A z`{wH7*>6hkY@a;C`Xm3CtQ&MQT0g@#W#8~WTH-@DBma`_y=iypFIwV5H>de$l&A2U zy|M9c`A^RTPjP^hE$UFEd zFJwRYr<8Z@AIiyl_)YR2x*6p^>XCQxS1Ru&-3;}?|k-i{%{@6 z9dt7~f2hZ~htK5PLpP)Ik34bc4|3ixH#HyVru5GElc(^Jzf64SX5=SN;3IFC_|VPB zPoBa@-ZJr_n~|S!a^FGTtkil+x*6Pm&<;M@uaqz8X5iaTT zVU)k9N8ZF=sl1tVGsvIRBX8q3$=m2=l)tG*-oS5?H_*)}f24Znv!DFIb;uj&W|Tju zN8Z3^k~h%JY59Y56Tiv1iQkOQPwH`Q<2O0C(aq@mrXKeX_$$w3Klcx%yfc4MK0KBE zl`m%>&wr)7(?9pUdEd?b%?P#cl5Ph3k9zDo{3iPj-Hi4h_1Jg#D=%a}=VvJo`_I0^ zZ?f<3nbJc)`wqX!{=;uZ`;U6;JN%W}cS$#c{YO3a9e$I2hi*puZ}1~|-Z*c_pNX2c zq?^I~QIC1UXEJZ-W;B1)W8UyrYTlA=2KkeE%o~1_c|$j&`J*25hTmk~(sc`?`J*25 zhQCttmUJ_iKk6}W_)X>w-JCXm1Oc!%6&h1lb^X)ejz^(aQ|7#JKLw6youi= zZ=#z~{-hpx6MyA}>|Zm3{E2_%Z1$VvO>|Rw*njdS?VIG!blt)ze^QUUiNEss?C1S= zDG%ExZ{jz}oA}Hqe=gsbeJclB;zKv5`ROalL{RchTN-3-6b<+J)bx;g3nk3WC#8ol?qTkQ>7rq3NnH&vecuQ2iX4gLJI{rpC6R(a!1 z6V9h{{oWn=x$wIFdF2Q{u6Oh3=6dYkcu)45hnBM6l)f{*rTv-f^SsXdYfJVOx~X~Z z^z%6u`kDG)NI%l&TMAX)>1UiX&&&VGmc+wxDdpYq{f6q^7hj(^aD9{ac3jt#9$x>@ zXS&M=uhVtP=T|1p|NMVWFW>h0nX&b=@J97@{PQ(q<%<{Ma@yba`JFL8{g29NKPspF zsGRFZ{pa&b)5`U&%FgxE*FNMA`_t@wPPtOLDZO)kY2W?VCCdJ7KYz6H;k+(a|G6dW z6W!GM?Y#c#by|02{d8TQb;)ieK%AuAlnjII4dsp1Gf$*Ju4k*XNvJ z{G2}~?Vy{{_$QrTJa?g+I@ePFCXH{>`B|Uabe+!gv*dTm={M)MNx#v}sQ;7RztTRs z8TFrfw9ETnlXlU~sQpRLzqE^PM(tCNc6oj_X&2p$+Mo3NPP^!4)IRlSm*;G%E-&j>-}Y_4?VsX*w#2`1?(rOd zb9Vgseat^|h4$XH%DtZ-;lJqb=;pO!`)7xL^#j>&u3eM;ru5PMx5K~oPuXwo`OWM% zrHB6YHRE1IMzz@=Mu&z&sZF z557P9&5f(G-<00je(z!J8?Bq!SGHu`pqtV9p&s9H#9#Su+21!$#O)7$C;QF$*Jr;e zJ?#Jd*RtOnekl7*>7jq&y6mrfDf<`9>tg@nZ)Lx^#66kfVoDF&U()k0@iUh{nEj^o z(9izGU#Wdd`|RJuVE|1=5+P6tJgZ)cA z_AP#seT!~J`#06o{>9J!h3s2&Gupq@W8dPd)V@u+8SG!`v2XF4>|1m*+P~@kL;E+~ ze-yHB(amW8a!xYuoS!E1j&4TtpYA`@Zo2;{q+N6~YM=9qb_XxEq+N6~YM=W&{M@2hYfh!5S2{LB+R=Fh~3ZbtqTC;5pVeuxjJM*ejFe>UeY?qkx=5g*U_ zi~Li{JLjM82(s_^?xD%PLpP)SM?LmGev^HVZbti`dYpUsD|PNA-3-n@>T&MkH#v9F z&FK849(e=5N!~y=qx?ZV@&OI6;HFv+=a-lesbSN|4r`O(9P)nje6X-;jh$vThh(w{_XekxMy!^ z$+&yc&1n48W8C;FHSVOF!T4vckXQST=SP!$hi*paKlONSz+b87hNPRp^8@vGZb<(n zp+cS;(9P)iA=Ud@_VfI}b$D(-H>2kV>hauwukxkr=lP+OcdkFmd2YaO^4x%KM$Zqa zp4K0J)*ocup_|eA<35RbOYh$bnKyJZnm_6hfBYtKM>nJRbDxEe`!5q8x*7R7C-8B8 znE24m$j^NyzQKzv@u8cMpYsJj=Z=XF-HiOiiFHr>Dz)yDZU*b0IN>9HmGULs4E)3i zAMvY{FX?9BCr|e;fMK`1UOFi~2zDn)e zq?^I>KlRwR_)YdLx*6@?R8RXBKl>N5Z_&+Z`?@tedQ-HhT-J?0&MrRF{9W-$Nk zGvdzvt5n>RZU*tE9`lahWZu!uX#T0kxbd5eJ6*Rh8b9?IH~vbEJL%?>@w4yno9sLM zX0-pvGsKPjQ>nNm-3;PKJ>rJnByQ+t6hG<_H~c2?OV=%o;zvE=hQCsAOS&1vk9x!n zze(KC%_x54S>i_ityJ8SZU*tA9&y8O5;t@+iXZie8-A1crRx?(@uMDb!(XYmCEX0- zM?K<(-z0A6W)wfp8REwIQ>nNm-3;PKJ>rJnByQ+t6hG<_H~c2?OV=%o;zvE=hQCsA zOS&1vk9x!nze(KC%_x4X)58m@tMyy?wEm86E_6RX@ty!5?++^FOS(D5f9SK>Z*Fd7 zzbU=*{+m3{xXJ$}<3=~5@pHcN+{^iE^4yDVM$f9HmGULs4DMfu6F%Zs zDPPjfz)zg;5x+|Ll5Pfm;)IX*RmzuiGw>51-rEpAllM00X7v7sIN>9HCO&jC@)IX~ z#LvWsZbp8_iI4G{_|VPBPn_`)e-j_N8Tr}gJh!p`O`h9QUMP&7-?&fazLooDllxY5 zGrE7J9{0`oD|O$TbThbrrXKyqZ_(Au9XIhtq(fd#8 z@!k`E<(IRcpWm1A&izk0?>+IGy!S*mqxYYTlXH{tSH6_T&->4_t@)26QvJe_)>yclNJI{L{WJjN(r{;*P&kaZkD#ynm)1amQ~GcXTs~ zKY4HR*rK%Y{+@sYk!@SE}DhH-r9DkACAf={LF= z^`CvheLMT6QupmiH-r0k>hW_Q{3bv5K{unH|4@%{%nzzRQQT|Ly0~`3??$mVc$C#+$yIW2z*@Z_@ZD zd_Q2Uf1}?InAHBl59GKneosr{j&3^sll&L+{f|lh+1vHAr04U!t;y%+(M^9of0Cbj zAmX%qye0icH{Jh9@gqL|{P?7D;v1EBetx#BZ@vfM?**9tUVtgRbACs^A26wZ6TY9I z`ES?P%BdXR^jTZQ8K!onn~v|K>-V(({r!hY<%~ay&xFtCkM~dUVcsv|`x#^Fd-U_o zlhz0Oi*>;MGWp&Yx+%Rg{u4gGJ=Xr{=eJAy`L|^`|Grvl`6=b@wU!(AYOP8){oAgV zbAHf&|GECQvH`!X?7ix~ep^}neJA>DOV8wN(WKwD#BUNC{#moQIk@#_ZoB2ioAPKb X@@r#Gz7;wr4>X;)9I61tf92gfc0W&CygRZiV&;B z6p@hnL<=h5I1&tys2D3T7#}g3T2XAUK0>0y#7Btuhy)}mYU=m1e(Sr=zGu3Brx3k_ ze5Sv>KKr-!+P}5-K4Kn=zw^PXu0C~e=H7#| z4;&mkaOU9bnft!`;M7%b{Mv*2U;T}zuKDJx&z?H<(o<)z`kHQkY316}55MrXKls3B zUUcI}zWV3i^NKsW6D!HySHGCOFRypq>gHm1W4C%_u{+tF++OOs&2wG1@p#uAxq8aU z-4QpneR-$r2L18d!Z$ZAuluc3JoQJngx`1}{E>M}?r+un=620%DxT)wU5osU=OX{E zxt9CekB4vW+#SBDc$)u6J^scE;U6*Q9RFtRe`D=8=eGPm>Hpdh^T}@yOdKkNo(B zbIw0?&v7?ih`iK4`4u0`&vxb=zRA2JZf5h3{^8Mo6OXu=`Q+JpTjV!ccS^r16(8(B zdGN?@;+K9^&hr^J{KgC6Gk)wR8^4WzRo#qKD{t-by#7tx91Zt>{43#Y+|;AI5;qf{ zJbNFF{O0~aA84Ze~9DcOQ=Y=H9a+zo~edACLSdUg=k5=97Qt*2v#@ zG4k)2x90ir$loZB{P=~5PyX#u{c|PNYZ!&K9=FIq=E}#GR3PRGv)q=bv%lj+TI_(L;lhqg}3~wDe;J#nLqh>c$;UY#3OEIzP%&gA3nq*Zf5@Y z-tgQH=OvC`w+|lw=!x*XAA7{{>-Ir^@zL--jvhDS_;vfB?{W8e^m!wWU$+nXKJPvb z_nSC=-QM@VtzSQ--)C!{%A+rc^KY)7Jybu3{4(zH%6Y8BBW`B?;wg=vJof|Q5jQix zjGO#&oRxUQ&CD<3Ca;|TN<89b=9lv$&;4*-;`nv@;P|`W?uYXd$FJK5efQhv!Q)OG zziuD&ecrb8)hFix;t@A}{1Y9fzJI*FTRpbey}VofvW0G?TmA9{DU-`qt~>rNe%{?p zPOM!23dQ)D@Ezr{T5P?z+daPeU9Y?MzSkVQ;q~_&yzaHHc`&N#OWo_5_WXap*YV2# z$6j>@I=`-f#Jbyl<AXG^6#nk82`rqiu`-#%kunq;+@^@sfQoAER0H*quTKlw)wMt*br6_MXm ze6auI!6UzkSNc_%`5XTk>+a-zQ?l+7H?#G3{1cjYx2gTt_o#KJ#LZ;=ArI>|`Aybs z;%2sflLwFdCLVD!^U1@yPkxhizx1mzTmQ*}M}8B(^s6%S$-{Mn{EfP9l(?B(Kgfee z{ziEvZYDl?xbBeOUW8oN&m^ib(8!i*G=MPcKsv|9{Ei?;%4S|zoUNt zx?ZTz9jm$bD&2o7ZYn-F{ah6~4Ls_V7)`)BJoJLI2II=Z0@8 zp8A`|!f*WD@Hfq4xxewD@Xg7$gl{UI<{#f2e&c7tADcH1`xAYGar76o_I>M=$8{z=8w6) z81u(ed~p1jCwR;s6OXu=`OFhM=8uU-+{}FD2_Eyu#3OEIKJx^R`D5Y{H#47kg2((Z z@raw5zo>8jx$Z7KJSEp%;%0XJr5*Qu_$K###Levfk9OR*;hWsQmHk#`_iwc0z6-xm z_gy7!Cih>oFZf56yS?8MLUU^}Ua!cGyj-Nc#4f###hPav44|(v&Z{iU* zGoL)v9r;b_uk@=jt3UGKk>A8G{i@7-@=&+rZ&cluxS7;1dGN^JD6hoL#3v7RPkxiS zCvIl-PaZt-n|Q>{c|LWI-}qSgeEwiRiVv>;^ppCd|BZ^3xS7-+`=|cNZ<f&8+^( zL%+%2sD78Yne?AL%vd{y{YB&FbS)unCf~pC{R!Xu z@coU+_ddkUneTt%$!dKwyZZsTx?fw+J+!&6`w8Nv;{Ee~$lv;r@V0digAehDn=}61 z{qMh(sayY~*2^oV+}Aw~Kc=?#^B?lJ#^LRpni7w=Ipgceklsx1Kbhtlevkahqj&0j zeoXhnm5TTCAM(o+L3!l~S|wh2LRgvk<%yWQ@`S4rzdRwU%>431PF{I}R*7Gp&{bys z(o5nvH+2s1;IW@m{}neCA3lDyTU!s$RKDVyieKvYeluWnrE2vS_1XM{_IFPIZC;uC zW7R6Yxp6XlQ}Hza#$SeSP96&1R6O-JpBH}PpNGF`J}>wA+(G|MK7Vlh=FI1hsK4I$ zZ9N&jx&5Z_O~upx?`ZCkzwzVY@0eHQ{_gjNZ|*%id{gl>|K1bfoBQ7rzNz@2KYowa zUHQD3XyOq!=lS#--=yDVzm-}4X~($XH)`BU+)T!gH#@2O$-8<~-IutT)IaU0dwi3+ zCvIl-U)rhu@u`1E-4i#n`llUrkJqTWFL5)ef7(&^_$GBv+|25~v{U`#Q~!{KC8-h14x^b6)*YKh$5N>W2Db{VYuChwao2 zzDeB>H?#UF?Nm4T)DNU?h?`mc(2lynYgFBoxS7-s?Wh}kle!^pX7y9rsc!J8A4uI0 zH?#WTHy;@H(NFiNaW8Q*8GqU_?)WC-PTb7KzqHf1<1_w{aVKtOX&w$H++-xM%IUDWeu$e{{m_oO!EaREl(?DH5ACQMe3QB%Zf5mEJL(4Cq<+eNE3^8c9d(1> zsJba}GpV2QoJ!-x^B=~mQ0Jq>&1VnaKb7ZK8YevN_aNtixT*Ny{TJ;RCp?q$Q1)A? zcDRr_?(Zz=jJ~5+4v^s0nb!C%|Cf4e3SElZz`Vp%s28kYChvLp9@dsKG$h{ zlX;A1Dn6Kh^7rxFX7k6Uq~r^F*}X8zhc!dt&~N<89b=C58C-s(S2iAUVb{N;ZRZ{??^#3OEI{?gBcw|xDS zc*M=j=Q$7ap65S}PiXECH{%wPPp#_meBf27Ax==)USW^(^V zJL;_bW?&_COx)D=!TK-lROk5AJDg}f5jV5@SK2Y(@ESFrOWaKEe`v=%$2VC=h?|P1 z{b!xQH(AHnT3#X<>5z$#&LRe3NyYxT$!WpLHJJE4{ zZ+4k@#Lam={l+)xciC@c)_>YDZupHFw-Ps#@#8n(sQ=Y>_NclqaWkoZ+EM@bCUsBT z%<8|iQ{CfJ|B$*TZf5mQJL(>WvOqweud>Ylin)qiQH`p2jKA$3pO%<7+Z zoHx8iowpJ<=bS(42H&K9@Xf4#N;}mrKJ^Q!TjJ)t`lWuTzed#!^~d^InA8v3sT+Kg zx*=|6^;6oZZt$reNZk-Ov-+VOb%WQax+!rpsUO-=H~1!XL)^^jr?gYu;8Q=4x*=}P z)Xzcx`P3k43wf)lk z)n}a6PU!eGhfMB;%J@|(p87}c58piYLv{Qr6(96@PE7xKer(cj;%3(W^4wGBj@sj$ zFUW6%5;qke%)k0T9QVdIOv&*RH?!lXpOZI6|4rUQByK7`n14<0D$wuIpG{eQqg8P; z>;L#5yvbioiAUVb{KZGZE6<_T4~R$H%>3n7hQIo!Q{oXfXZ-m657)2OTGrj|-<$I2 zU#Wf-H)q!0OZ>Gz4&P)h;hT#0$N!Muy*BbLd}K=U5;wE_v?DLRNnYaSy!^DoHyIE2 ztL|s8|K+b&eX`bnCGRZ|H)q~oICT8HC&K#^y#Hb15jQiR_w4a_f8N9^@84HuzTY37 zegAsy`@>$pUJ~DXl=ly`hLraYZdV;EUcUc`?StdzI-&j;f7c;#&O_Zk===T6+4o=P zzQ5V)KcCy^w^=^7so&T5AV*H6Zc>!-nj9_f7YIqGs`zUG*0L^fwh| z{<6Z=<>#9C3jm`9or4c{>&I7bIeq6%as1EJpZ&`W-RD);`|RubyIxw~C9V5XEzj@E t;yYB2f6|ThHw3=vt~+ix+?!{%hqr1q*kBJg-f{X?U7pJMToaeO{{?ZVe%$~7 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_hcM04W5p00L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_hcM04W5p00L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..c29d732e30627c1f0ece9cf1c1bc8bed88fbbb4d GIT binary patch literal 32256 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_lvt_aM02W3p00L0p35.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_lvt_aM02W3p00L0p35.gds new file mode 100644 index 0000000000000000000000000000000000000000..6c8cea01799c07be90596f5ae2440c0d98890543 GIT binary patch literal 11294 zcmbuFO{iU08HV@y+vnu|rIAz{6Ho^_D23i6wMi?6Bu%W^)JlJ-6zx$-f?#Z8nnnr= zMZ~K3gD8S6iX%G^L5pCEAWqbYf&=LwXf5I&4m3Kb6A|BMt@ZA`Pwv@YVm#&c$$j^F z*SFUCzP0w*=boyrhSjLrGZ}O6lk>CZ=JRu>=Vwo! zIzQjsd*R^x%!Tvw58S=E@4@|NH#bjgp56cEs@gf496IvZ19$!G*-N(_d;aEcJ@e50 z)t*TZq5fYZjAvCJKgEAM`L8Sf zeN{F5pjv#b<&@v0o4OwQXYb8^bDiJiH>Gd&@67S17jxX%OD&0uZZ3^q{KR4Wt53J| zxXs8v{9E>o{@D^Ax*7S2&%B9mdfsL<|H;Yht3T8dAG&#&|5!Kwqc>`-Kdh?Jk6MoI z*6-3yUGJ{{7XRp9*>8@&ko~6g&_6kl{SAMa{S)&*?5{tT{pNH%`%US+@h8t{-M+7l zvA5;6JGFk&OLN+pY6zb zpFP`>yrY{@{!=^UA3ynr^G(N`nSEJb?5xKp~L4?d+6rk`I+~h&)*+p-{8d# z<*U%m;=f)?r1M|?8;8}-YK`-Ma9r#3yCviE`M9M2bS_CZFFW7z_=^7;&c`eIiA%p` z6#tsf$1;BW{$=^$42kk{4fnr=^$kezVqDM8Br=Fn+DG zhxIe3PiDU1L4s*)->!X8_KBNZ!%SDE}+_vTx-#E%Bk7k)Jr!4RKBC2HlM6hj!Erev`UEH>3KY z9d(1hq3R~-W>7!0qi*n<)D5~B)er5c8~hDbH%T{x`k@_lgWsfX(9NiRXh+@PZ>YLS zx*60Dc_we<-z0D7W|TkLvF`XAYTc7=2J25d)*Zjex}%%X`loiPAN8ZQ`dXnKh(#w zul{>WeCTH6AOBX*oyzm%sg~OxQY}a~b-g$K=<)0uzpf=dbTjf3hxrrVWZdXxG=AdX zBfg0b-HiOKGxKNtO~#FGM&oCl@v;6UK6KOm>m}>?SMT4$=imJP-p{|6^1kN%E&CgC zu6LggmhSJa|Et+IEL^{__zR_P&99$-cIUXfzac&(KJRbLC_e25f6YE~{ny1`D7`m6 z_fg_I7VZbtEGM_l|S@sqzWiqAe~-PqqI>xXVe>zDi*fASYH?&L4@_?OkklIQP* z`rtmnx^Vw6=^x#6|Ffq4^!a%z2e z_1tZG|MvCo=j$t7?~BjAO`pFNvTxJpZ-w5!#Xqn3`-S(%&D!@T*__cX!zn?gh&*%6i{h*uD!|{&~W`D!qXaCqd82g8R$bNJ5#q2kw_r_=b z#Nk{tnFqQlJ@gX?zsWpOzlG96|M2$gZ>ag;XFiFy_xoAr*)4hg4PVOh=Wkl&dT;!c zr6e@{hY=48|thlK4*5~zJ5RR zCl2#A=?C4E-Wxx)Qyl!ngR7s;ep7m{pYhR-@tf>pbW?h-pZg%^2KPsk^CR6K3#0Rc zcI;F94OIt8H-r68JN6BJlYN73M*D|$>>KK5IM>X&xZ3I2wvgQS~5{iQgnfBe)xqz=)|sQzh3-QY8+8+0?OAKoWWH@tr^sh{-z zp)jf+=1d%FzoGg|x*6Pmh(p~GzoF_b>1I%Ww4?6uo75e;8Py-{s5|^7^_TiBjOvee z)E)kYs=K6{LH*H=y2Ec$cj#tRf3#z*@i$a1l5Pg|m*S}I@Kb+~x~<<2R`zbW?io`AIw08Gl2qL( zOrJYQH!pksSQtO^#K-*2^tpp{Gx9S}e9YU#hi*oG=82DaoA}U8``4QFfAz4suc}`& zs3ukY+JRPXZTIBxuCMcYx?0;aIjSDgD}6^`{2kT7#p+eN>W@5n^3<96HcM7@@0Nv(DJSxxs@ccGTbvtWHrIe%Ea{;K81`!#9lrmkNyZ(xlURU#7%d)HV zT}$m%?NaU4n!WmD-m7mqonC3LYV_%q_A1}Q)cd8CUG;tUJaF$F$Mb6ZKfUShqu!3) zd*mJOQrA25Q+m_)NSd*A&yi+qe7~sd+1al8&Lj6Pj^?WU+7nmuk2~jB6aVsaY~_>6 b)pPW9^nnw1_0Hw0`WhVG+SgQTGp_y%z=1dM literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_lvt_aM02W3p00L0p50.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_lvt_aM02W3p00L0p50.gds new file mode 100644 index 0000000000000000000000000000000000000000..93ffc1b5e1501b8dcf31a48c7d736a37efef9908 GIT binary patch literal 11678 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

K5^Tw&UEkPvaZ!TGJmZV^=DZ97m-3tivR!s literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_lvt_aM02W5p00L0p35.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_lvt_aM02W5p00L0p35.gds new file mode 100644 index 0000000000000000000000000000000000000000..96e15e41c02429462b2196c2e74678ce73836d79 GIT binary patch literal 15838 zcmbuGYlxgz9me0e?CfN+*-Ns!H8vm$t);|vn_g@al_pITZB%-rrC=8&iK5YlG%b`? z5h>mfZLwc$5v3p%tt~>3NyLBB+c&+nY~IWw~}?>{C^Sbn?D zd!F}P{^#;vSnXWwsNL_Ws)fDc<3lcfFYBhRcbBSay8r#U z={r^anIUICslTP0x<2V&uIt}bRdaV#)#k^BTzOc2>87rS{`SS$Z*IOT`%USM{+UCn z_XV~6Q$tcOx~c1p{`TLhih4W$7;^9@{Vv^%>Ysf%`}%(v5+Ay`!M{JnZ)YCA8O3eO zMQZ;QBRr+{qnj6vwSU4te>nRK&t(6+c{uhj{2=?y#XZ??N*^7+iTW2`%YJj|f$TS> zhyJZ~{|irL|5o!X{ohvizwk`=E|PzH>EeWzoWLdAJF_cHDpJN4c*lB z(2sZYr+ZWOo4OYIyJxcBoOvYsP3fV(w0$l-y8q^; zo3h`O9{M-c{Wk}XWWOoB(N7zRU;oJ=iCb!W%_x4UoZ63{7((KPZbtD-<<$PhNPu%dEct(Gs_@#2EvY+^IAL52?M)6DK&eXn|#0}k?8o&Dd z>s+U^La+X}hirXFv5;=+%4GjX{HsT^-@M>w*>6g3^jH7X+4Z#Q(wSTMrfNhtpKkUK z-j#iWUyo3}q?^pC7gVJkIYie|1vpR_Ax?r6E(^ zA>H)(yP_qc{7L>x+tqS4NB-10pmG20l=uYwgs*DOp_{v#+fTVIPh`J2e=z$^ z>5cuzzc9%DLap7Tn}gWDcs%>fr5)LCN)PL2+~~i_xKY1(w(%ow_zM*`{KPLYh#zNs z`xANonVq>j|4iwP?N2%0bJ^di**%f{ru5K1qxWje|H9v8|BSgS_V?6x{O0Wb>^G%{ z_4nJ^U-(q^_sw?f-}LG1HwVkvZ%PmAADqs9bMu4QZ%S|Uv(AVc>(3-^=w=kZR8Dcj zPy8TpLpP)NQI5FbD^%Q)ZU*tA9C5>M5;t@+iXY{O8~#GYE$L3Ea za*7{*;s=Qvx*5ff^-0`Vzb0`*H>3Eaa*7*%;s=Qvx*5ffa>NZ^q2iWwGl(DMh#P*B zxS^X-{3u7<@E0m>NjHP|QI5FbH;Eg%8O4wNYs(XA`<@{=H_%O8Z(M(rS5hcf1%c0(#;_M?9b+U`#&9$deP0Oe#()z z;V*nW`^n$x>y7c}I(Z|0le`h#jPl39uH5c{_Ikz-(r$D!YCq)|H++Q}x1^iF_)(61 z3%|*}g>FXs7vm6ZbW*f8tEuK>SVe26QvZA5yvJvY-5c`;a%Fn^FEiIr0X4h3ZSv%^-iE9C-tN zle_`ljPeJ{_1oEB_*C|jzt`6rS2I@D-8_>-te@Nv{XFul`_u2~5_!2kb zZxT0jGm2j-r?}xKevr7Kn^F8IN8Iog>i49ZLHsC3-0+*k4c(05M>*n#zff^Yx*6nu zlp}8VP2z@bM)6DKPG>*y<37X<-HhTl`;&a`_irDPb06J|&VR~r?&3E&chSx0{AHf8 zZ!zyo_APWX+P^5b<%#S!*>}-R>EZfe->3dU?fdx2UlW7F--0sTH)$_OE^V=!UN6-2ChUcdf zeqZmG`t|vH-G1^M_6_nMlXH7C|MC7Yt^HG;Kj-I*qxXNbzJJY?chvW<*?x4&{21}~ z9?pJqNzbEcpDBHEemOqMBU^t}Je6OXE6?k1>8AA1&%T7;WL=Err&IT*x_Louk zsTbXh>Zcs_;y0-u-HhsIA0n>oOQ!QOGm7t&=kH_jP4`z^)BS4_Uvx8yFXf0Uev`PO zn^AmO|BNf^-(+0T&1ifn$GGA*z3-VD#&CCY>|1<}STmg)(#;L~*MvXqTk@Of+>qb&{#EZEV}91b z<}c^?t^Yh zZ>&F+Q$6@u!;mk_?yy0 zfA^2sZ_a!p`%USgzr8#A3t!FtwmF{vP0U}~N&E`c9^yuO60dEppX;;}zuCJc`%LML z?Z;0$@tcezx+%TUPn;-6{7m|RZb}dR^b@~HKk%E;_*0H?$6u)aB;5?gpZUW$rToZz zMSr84*Tn6|PyL1RQ9u5~z)wBfzL4uTmoLfno6;M{5C8J%>^D~)%zjgPqn|ia5AiS5 z{gQ58((I>yw445$+y~u^+Mmj)9{jW)(r$D!YCrv-zbyB^@He^t^X6sE?Z?0HrR+Bs zcV@pSy>a~TFTRxh=F%6l-<00yXPmb@l*iwsALyp^&`&>!pGiOPo61HthC`X*|o5TU#lpfYkoba2BBYrcQf0SdK@fRv?NjHP|QI2uL zZ!&J^W;A{&&Z>v_F<&722)Ze~vH#Rd-cSB&lJ}#VQT|V!jF0x3_|VPBPyUXNyxqiy zZbp9IzmfOw{>>!sK{uoPhjQdy_zRVHCEX12uT+onKm6o>kh~AwjPgIqac<)?Ik(Zx z==`P}amH_QZlIge8{WHL zXZ7{a&pN?xvX9_1rH6jjIewFMjNgpl-3<0`%CT?YH$2j9JRC|(c2Ky)F*thYU#1Y+$ z_HW7&C;TRHNcXKNy)pijW1itJ)O<*~8Ju5~W1izT$=lG)D1RePyiXv0h1yS&ZU*mv zD91j7-((%5o6;NmPdVQA;5T_6gKkFef9NOW=)Xxn&`s%$^;3@L4ERmf0lF!@(N8;R z`{)n%K{s_R^s~?7H`6`2Z~Y@Z^s`UmH#x`fn$kl*=N$e*okRFJj}ph9UwnS_`C(PR zHb0+#fjoEQW$M>d|D2kr&oA`;d$nENQuQuqRWnuZtu0-jyKv_E?cd?`ST(m}X5XFo z^-BLoefI4d%a^LH+k2nA`_SQ|>-XMsc>V6r9lihmyKDEy(Ovtct;5ecddHO?-KBAT zVaU}xR8YF9>yu;cXT3aQ)obj#8oFQltf;0ghkok8Z>DFwd{(3}=RVS#{r}GGp3&&i z56FEw(oMI2rSw1itVyvPzrNwKqPs?)b+=Vl>p{))6GN`<*1DH&>iTH=KQ=bkG$--< zKKAilOZ+hMyI#Jl$$cO`baR7$?^yjO<$F^DdY!{s)pu>RR<%kutko;i>#E7MTInoUI9(04 z_x9hs_k$l9U-{>Lw`a84I^6A+kKT6k4F~er*87OQXEL>I7avKlym!=}kM_6sKCt)J r^Ym*@pUvMJ*~c2krnOUN{6X%u@3w)VlZ5IB}QYSfFTBvs6j7`F~kcsqQv)EYrpI4nK}C#m?7k8 z-?QGmzO}yZTYJx*PBo~yRj=CL=~mZP9sS2wXTzTlbq9BT{GN+1SzSMMV*Sk7_4Tu- z*3X?R@Govx4Nbp%y+AW>fl08aeuI?=6^0eKIXz(vu^71{$f>4 z_Ft=uUX}gk^aJ|4bW?iMe}9_)U_HNv@-_PRnCJW`|Jl^vn*JRBQtdw^@2&d(=`oid zlta3y&qIIr{OmX9ZqI&GdaHkCP*wP5XUClVOI4wpk$>txn)}zEHs_H#8W>3jRH}!dQ{w;pI&Hww?XTPb>LVy3&>^G+# z%6?ON=pP)({=#Rne_$So{nPhmzd2mYep7ll|FB-aIdgsXo6%K2{$%zSDjxjv=E>N<`#afhE*!~zQ+gQx!k@F>T)a2?P3fV3 zPrd%ar?P*Kxy}0b*6S~PHT(CP+pK@7Ucb3~B>PS2t?|#iGxy!hb7RtX=w{S^X`I%H zpB{wt9l9CyUmB-%CSOhZ4&99Uk8$)J{=#RnpZ=>q57$rM;Wz0!d}h>tY1~uUPycZp z`VQTU`Y(-pwf5Dd@6gSO{a4>Vd*@cw%4v=N{g~Xh&`o{5b^Q%LcRT!M=e^l)N^kX7 zf2^vx$MpE|l?HV$NxJ!1yMOM}**AJigYqTaoaC?XzdOGF`2PKb>R$KH&hulY`?hq` z_pfD@n4VvB|GBVREmb3)Upm()*56H7Ul1SHC2rH#ub+?d{jK)z;QqYD&-%E(o6Ot1 zzkB{k>zn&wyuP{f@^wdRV{(0T)7PK0z8yTjY*^nUKl7rSo`2H%2KT8}f83rw`iQUB z(;scuU-@5r{WsXZS8sTJQhW<%)vrGtb8&y}UsInq`*(|fbU6D9U(WuKc{uj(dNljZ z`QzDdN)PAXt!G!_FI4Zb@4L;}c7OGXo?8`v=ivqwchb!ue#Q|uev`P-%_x4x5jXxq z#hr9>oA}8eev`c6H@C}Q_ak}#%-$&PpD8`u|K2aM-|XL&{igKLKc(+=$Y0@$**|3- ziv0tv9ltrfmi?ymaQ^G&i`pGkS zBmX9OLpP)RrE$t1e)0#&8@d_gk8$J;U!n4rbTh~w05L&>R-lje&H|Fxs`M?IKLRT z>(T5tIk(VF>8mjvoaz=o^$V$6bTg`7#!X&iUEq;@_MK`1RP2*Iz_^Dq=-J+XO z{mxvH>z3ym>K9VC=w?*EjH7Px6{>ENZU*(sIO-O^N!_BG(p&47anvpTLe*{3&7gjH z$41;EJ)9OQ?xdSR{EQ=R{3daun^F9XBX0bKiaY7%Ht~};{3dzBZ*G@A`j-7O>09>C zjQTf?Q{UpJe<6K~ZbtpfIQkY}q53xIX3)Qkqi^w>^ews>^)KUw>Rf5B7LH{z2 zzQu3Sx9DcnziFKM7C-$9>05L&>R<9q-pId6-q6h`e`%cZhM)XF@`i3k`C}Y;!&j)h zCEX12$2jta-z0D7W|Tk1kvIH>%3IRSAb*S_Z}?5}hHggrOXHL`{NxXkH*_<~-|%00 z);OWLzddGWUTcwV>hsp~Z~E)mH@tF8eCTH6=RU#w+&4^o=w{^a|0MgSJ~}2obTjhz zZppqrKgCiU5Fff3`FT!T`o6}hhRo%gbS>$o^w$03`%HX%|6$@oH@EZeJ(m52f6M;8 z=COGG#TT;Q-1GVDH>J16&pPq3eiI+Mxt*W5@fRv?{KTIa#7~{DZ`6;;zM-4Z{xObu z@fT{|q?_B!&${uOtQ)@>t)Fw2xH)%C;zl>4_!&ps_zM+x(#;@##t}Dulep2%D1Ocv z;^y2ji5uOF;%6N5;y0NW-P~?|){VbV>&8$0BnIo}oLl*x)~oZ+Jm-dd{+ZHS>z{KD zALpNm58aIX)CoT7$Ha$jMt;sYe4KwKK6EqkbI#%8+%xf^n-l%@`(e&0?wif`Cp`C| zn-lM!4S(ma*>5iYGW$*GTlc^Ab3P0n%;$%>sQ1n2ru5L?{YLhi%jadkDLwh?_p5q; z8NPqd?>8Iq@m$3DX3`hLXHI-Rs{Paf`%8V8>?^t%?JwilSNtaXif%^x%Q?WjoDU}R zrgNiaG(Y2*7r)88=w>uO{YzfyZ(}(T zXF9)=>Sx0H{|(po^U3Dtvq{e8785+OEIp=L=in=Umx*zD_z{ zc65EknXa$+&2(-_H#ePM>*?ngjq_(^EwA77&n->q>c6UptrguV&|LKEF)KP5-ei zKR?mW{y0AuYA!yI{igI*KYfgk{xHjIuZ%%zR&u>Z({lk~C-<E>$eUpSckh1yU2 z>}TS^*gyZ<>^FCRF8fUBVf^ef@tgA(WxpxC)lZ(7hx#*F2f8Ue^fM3sLahfs>q)#Q z_75)4{=z?G-@v@Q-Ov7ZU(V|{dtb}zH>J16kDoeY|4iaQH>HRE{uS9@sCvdvJttn# z?q`3xhx7UiwVtG#8{hwJIX{?({Wn<$elzMH#<5TMP1b>KN)OjRyfm-BQ2ofd>Bq!N zV?TLj|IO(yXP+s(b$-qd@|2!WOkFSOW>7zjW8d)?YTuJ?2K&#r*+bc1_+s|Ynj7Cg zZO9*f*2(-P`-pBz57$rL@SEffzZvB(J-=w3>G`E5*FiU<{-I8YoBA<{8{LfJr#{#x z@^8+4A?M$e-nxGLob&ii@{q1uQ+lhPI2lj;g^DNXW{|(MPSrVn>KzgXx*6Sn7{@yC zncRoaP3f)ibD!tF%l+TvK7ejU_g}_w?&CK(_tDMh{AV2JKK??T`$;#0^Ph3_FaARH zZPLx4e;G&L;xAMkC*2JCmvNk%_)X4DbTc|X8AqSsH|e`{-I~(F{Lwe~P5K7E8TAk2 zs9XGns@tTSLH(wARJZu4Ur61en^FBTj=IHXQn%=4RKJ{4)D7oXq3R~-W>7zjqi*q= z)GfLh)i389dFK2xsY7&AdTag|N51hFs-BW=2KRr)k!SpcFJ(XZs6P+q=e~*Gq>k{J z(fyNgb{Rxe~XH33tMK}HZ zD_f+0Ke^%l%fGqBKRhrdK6EqkQ|I`pe-j_N8Tr#Xb$+vc&Tq)Mjc!KgH~Y*!vHyj- zPSVZb`xnO1C-@7W&wjptsXuSse?I3qAHPW-qMOn8FN|ZI_)X4%blsZLTj%dTm-l_@ z{xR8ibTiuj-e7v%X1pUv|xnHRMCnTK)AZ!X`L=QpK?@v~3(P2xz`ttq|L zPoJ@F`ma#yPP!SapK-*E-z08yGm4*a#Esu1{&d}%QT+5dKKkCok8W<~CvN;EapO0m z_!-B(;V;y_CEX16k3OaT>0gs|pqo+sGmg5)ZxTnkZq2Cv8OJ{1FVub{-3;oN`$T$g zsQZV>dqZ?{)BD3M_YZvBKTLewKg`Hao#3N>Onm5O30$+J)Jen#XtU8 z5AW(Xz3a}k(6~N}rkBi)>XWm~lpbDx)9(Uoxc;;j#dU`N9g}sSoBDj~S?Ty{-;~aL zt^@J)q??=kw>RIFcQv-7J(zuD%$39XzDv5P&ztjqsQIqjK7Ln~>p*83t!^;b`1Uq{bHTnFMqHz)e*{ZH>F<>TM= z;D`9o%}xHRn)|Pr(%0+xUE#W`^t;09Rdwm6UcDrJUAnbbt4H+Qc3U;OZ?Ja5(f7Q+ zuGSr2?QvD-ey(=o2X4OM>TB}e)>qT-(M*i({8Q;GpB;724fhS+ee|Xs`qfk0`3H@2 jtaWcXZ_+dFajtdj=Hu73uH|)Ii{Dw>e64BicE9>RFRKh$ literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_lvt_aM04W3p00L0p35.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_lvt_aM04W3p00L0p35.gds new file mode 100644 index 0000000000000000000000000000000000000000..6ed07a1d16f0ec4175816b0a1c9fd794b81a8579 GIT binary patch literal 15690 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 VZ(t+;^SYMK{`J?QZAZUf{12sr@vi^? literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_lvt_aM04W3p00L0p50.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_lvt_aM04W3p00L0p50.gds new file mode 100644 index 0000000000000000000000000000000000000000..28e4e53721a78c2acd2960b667533001f2eacdf7 GIT binary patch literal 16202 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 DCG{C; literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_lvt_aM04W5p00L0p35.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_lvt_aM04W5p00L0p35.gds new file mode 100644 index 0000000000000000000000000000000000000000..fe1176eb75fca881f108675a790ebec5d0743581 GIT binary patch literal 22154 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_lvt_aM04W5p00L0p50.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_lvt_aM04W5p00L0p50.gds new file mode 100644 index 0000000000000000000000000000000000000000..1ea7b4c3d0b77881ddec5ec3feab00fca280f63a GIT binary patch literal 22666 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 M8SzhPwI`bY0cEMN-v9sr literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_mcM04W3p00L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_mcM04W3p00L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..d176a8914b0158a7e383aee0068aaf91fff5d3f4 GIT binary patch literal 20972 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_mcM04W5p00L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_01v8_mcM04W5p00L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..675a652065ba4f542bd6929ccbc05aa09d5201ab GIT binary patch literal 29100 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 Z>-l$BzRiWd@%^c9$MBG?|3@%|@;}Tr@oNA8 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_20v0_withptap.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_pfet_20v0_withptap.gds new file mode 100644 index 0000000000000000000000000000000000000000..8e8762cf5c06363cbb3799c0a914ea4c3232e051 GIT binary patch literal 271496 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/globals.py b/sky130/cells/klayout/pymacros/cells/globals.py new file mode 100644 index 000000000..c5a0765b2 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/globals.py @@ -0,0 +1,67 @@ +# Copyright 2022 Skywater 130nm pdk development +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +######################################################################################################################## +# Global parameters generation +######################################################################################################################## + +import glob +import os +# Listing device names + +fixed_dev_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),"fixed_devices" ) # parent file path + +BJT_NPN_DEV = glob.glob (f"{fixed_dev_path}/bjt/npn/*") + +for i in range(len(BJT_NPN_DEV)): + BJT_NPN_DEV[i] = BJT_NPN_DEV[i].split("/")[-1] + BJT_NPN_DEV[i] = BJT_NPN_DEV[i][:-4] + + +BJT_PNP_DEV = glob.glob (f"{fixed_dev_path}/bjt/pnp/*") + +for i in range(len(BJT_PNP_DEV)): + BJT_PNP_DEV[i] = BJT_PNP_DEV[i].split("/")[-1] + BJT_PNP_DEV[i] = BJT_PNP_DEV[i][:-4] + + +VPP_CAP_DEV= glob.glob (f"{fixed_dev_path}/VPP/*") + +for i in range(len(VPP_CAP_DEV)): + VPP_CAP_DEV[i] = VPP_CAP_DEV[i].split("/")[-1] + VPP_CAP_DEV[i] = VPP_CAP_DEV[i][:-4] + + +PHOTO_D_DEV = glob.glob (f"{fixed_dev_path}/photodiode/*") +for i in range(len(PHOTO_D_DEV)): + PHOTO_D_DEV[i] = PHOTO_D_DEV[i].split("/")[-1] + PHOTO_D_DEV[i] = PHOTO_D_DEV[i][:-4] + +RF_MOSFET_DEV = glob.glob (f"{fixed_dev_path}/rf/rf_mosfet/*") +for i in range(len(RF_MOSFET_DEV)): + RF_MOSFET_DEV[i] = RF_MOSFET_DEV[i].split("/")[-1] + RF_MOSFET_DEV[i] = RF_MOSFET_DEV[i][:-4] + +RF_BJT_DEV = glob.glob (f"{fixed_dev_path}/rf/rf_bjt/*") +for i in range(len(RF_BJT_DEV)): + RF_BJT_DEV[i] = RF_BJT_DEV[i].split("/")[-1] + RF_BJT_DEV[i] = RF_BJT_DEV[i][:-4] + +RF_COILS_DEV = glob.glob (f"{fixed_dev_path}/rf/rf_coils/*") +for i in range(len(RF_COILS_DEV)): + RF_COILS_DEV[i] = RF_COILS_DEV[i].split("/")[-1] + RF_COILS_DEV[i] = RF_COILS_DEV[i][:-4] + +#print (VPP_CAP_DEV) diff --git a/sky130/cells/klayout/pymacros/cells/gr.py b/sky130/cells/klayout/pymacros/cells/gr.py new file mode 100644 index 000000000..9f3425190 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/gr.py @@ -0,0 +1,102 @@ +# Copyright 2022 Skywater 130nm pdk development +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +######################################################################################################################## +# Guard Ring Generator for skywater130 +######################################################################################################################## + +import pya +from .draw_guard_ring import * + +min_s = 0.27 +min_w = 0.17 +min_w_m1 = 0.23 +min_s_m1 = 0.38 + +class guard_ring_gen(pya.PCellDeclarationHelper): + """ + Guard Ring Generator for Skywater130 + """ + + def __init__(self): + # Initialize super class. + super(guard_ring_gen, self).__init__() + + #===================== PARAMETERS DECLARATIONS ===================== + + self.param("in_w", self.TypeDouble, "Inner Width", default=min_s, unit="um") + self.param("in_l", self.TypeDouble, "Inner Length", default=min_s, unit="um") + self.param("grw", self.TypeDouble, "Guard Ring Width", default=min_w, unit="um") + + + self.Type_handle = self.param("con_lev", self.TypeList, "Connection Level") + self.Type_handle.add_choice("None", "None") + self.Type_handle.add_choice("li", "li") + self.Type_handle.add_choice("metal1", "metal1") + + def display_text_impl(self): + # Provide a descriptive text for the cell + return f"Guard Ring(Ring Width = {self.grw})" + + def coerce_parameters_impl(self): + # We employ coerce_parameters_impl to decide whether the handle or the + # numeric parameter has changed (by comparing against the effective + # radius ru) and set ru to the effective radius. We also update the + # numerical value or the shape, depending on which on has not changed. + # w,l must be larger or equal than min. values. + + + if self.con_lev == "metal1": + if self.grw < min_w_m1 : + self.grw = min_w_m1 + + if self.in_l < min_s_m1 : + self.in_l = min_s_m1 + + if self.in_w < min_s_m1 : + self.in_w = min_s_m1 + else : + if self.grw < min_w : + self.grw = min_w + + if self.in_l < min_s : + self.in_l = min_s + + if self.in_w < min_s : + self.in_w = min_s + + def can_create_from_shape_impl(self): + # Implement the "Create PCell from shape" protocol: we can use any shape which + # has a finite bounding box + return self.shape.is_box() or self.shape.is_polygon() or self.shape.is_path() + + def parameters_from_shape_impl(self): + # Implement the "Create PCell from shape" protocol: we set r and l from the shape's + # bounding box width and layer + self.r = self.shape.bbox().width() * self.layout.dbu / 2 + self.l = self.layout.get_info(self.layer) + + def transformation_from_shape_impl(self): + # Implement the "Create PCell from shape" protocol: we use the center of the shape's + # bounding box to determine the transformation + return pya.Trans(self.shape.bbox().center()) + + def produce_impl(self): + instance = draw_gr(layout=self.layout, in_l=self.in_l, in_w=self.in_w , grw= self.grw , con_lev=self.con_lev) + write_cells = pya.CellInstArray(instance.cell_index(), pya.Trans(pya.Point(0, 0)), + pya.Vector(0, 0), pya.Vector(0, 0), 1, 1) + self.cell.insert(write_cells) + self.cell.flatten(1) + \ No newline at end of file diff --git a/sky130/cells/klayout/pymacros/cells/layers_def.py b/sky130/cells/klayout/pymacros/cells/layers_def.py new file mode 100644 index 000000000..d9d751a6c --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/layers_def.py @@ -0,0 +1,101 @@ +# Copyright 2022 Skywater 130nm pdk development +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +######################################################################################################################## +# Skywater 130nm Layers parameters generation +######################################################################################################################## + +from importlib.util import LazyLoader +from gdsfactory.types import LayerSpec + +diff_layer : LayerSpec = (65,20) +diff_lbl : LayerSpec = (65,6) + +tap_layer : LayerSpec = (65,44) +tap_lbl : LayerSpec = (65,5) + +nwell_layer : LayerSpec = (64,20) + +dnwell_layer : LayerSpec = (64,18) + +hvtp_layer : LayerSpec = (78,44) # high_vt PMOS + +hvi_layer : LayerSpec = (75,20) # high voltage layer for voltages higher than 1.8v + +lvtn_layer : LayerSpec = (125,44) # low_vt NMOS + +poly_layer : LayerSpec = (66,20) + +hvntm_layer : LayerSpec = (125,20) # high voltage n-implant + +nsdm_layer : LayerSpec = (93,44) + +psdm_layer : LayerSpec = (94,20) + +npc_layer : LayerSpec = (95,20) + +licon_layer : LayerSpec = (66,44) + +li_layer : LayerSpec = (67,20) +li_lbl : LayerSpec = (67,5) + +mcon_layer : LayerSpec = (67,44) + +m1_layer : LayerSpec = (68,20) +m1_lbl : LayerSpec = (68,5) + +via1_layer : LayerSpec = (68,44) + +m2_layer : LayerSpec = (69,20) +m2_lbl : LayerSpec = (69,5) + +via2_layer : LayerSpec = (69,44) + +m3_layer : LayerSpec = (70,20) +m3_lbl : LayerSpec = (70,5) + +via3_layer : LayerSpec = (70,44) + +m4_layer : LayerSpec = (71,20) +m4_lbl : LayerSpec = (71,5) + +via4_layer : LayerSpec = (71,44) + +m5_layer : LayerSpec = (72,20) +m5_lbl : LayerSpec = (72,5) + +pr_bound_layer : LayerSpec = (235,4) + +areaid_lvn_layer : LayerSpec = (81,60) + +areaid_dio_layer : LayerSpec = (81,23) + +capm_layer : LayerSpec = (89,44) + +cap2m_layer : LayerSpec = (97,44) + + +######res +diff_res : LayerSpec = (65,13) +poly_res : LayerSpec = (66,13) +rpm_drawing : LayerSpec = (86,20) +rpm_high_drawing : LayerSpec = (79,20) +pwell_res : LayerSpec = (64,13) +li1_res : LayerSpec = (67,13) +met1_res : LayerSpec = (68,13) +met2_res : LayerSpec = (69,13) +met3_res : LayerSpec = (70,13) +met4_res : LayerSpec = (71,13) +met5_res : LayerSpec = (72,13) diff --git a/sky130/cells/klayout/pymacros/cells/parent_res.py b/sky130/cells/klayout/pymacros/cells/parent_res.py new file mode 100644 index 000000000..be3e74bd2 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/parent_res.py @@ -0,0 +1,273 @@ +# Copyright 2022 Skywater 130nm pdk development +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +# res Generator for skywater130 + +import gdsfactory as gf +import math + +from abc import ABC, abstractmethod + +# ##############CONSTANT############3 + + +CONTACT_SPACE=0.19 +CONTACT_S=0.18 +CONTACT_N=10 +############################3 +class draw_res(ABC): + """parent abstracted class for the backend of the res + Args: + type (str): type of the res + """ + + def __init__(self, type): + self.type_ = type + self.c = gf.Component(self.type_) + + def set_l_w(self, len, wid): + """set the length and width of the res + Args: + len(float): length of the resistor + wid(float): width of the resistor + """ + self.l_res = len + self.w_res = wid + + def draw_rect_layer(self, layer_names, l_space, w_space): + """draw the rect layers of the res + Args: + layer_names(list[layers]): + list of the layer names + l_space(list[float]): + [0.5*length of the layers - 0.5*length of the marked layer] + w_space(list[float]): + [0.5*width of the layers - 0.5*width of the marked layer] + + """ + for layer_, l, w in zip(layer_names, l_space, w_space): + self.c.add_ref( + gf.components.rectangle( + size=(self.w_res + 2 * w, self.l_res + 2 * l), + layer=layer_, + centered=True, + ) + ) + + def draw_frame_layer(self, lay_nm, l_sp, w_sp, thi): + """draw the frame layers of the res + Args: + lay_nm(list[layers]): + list of the layer names + l_sp(list[float]): + [0.5*length of the layers - 0.5*length of the marked layer] + w_sp(list[float]): + [0.5*width of the layers - 0.5*width of the marked layer] + thi(list[float]): + list of the thickness of the frame + + """ + for layer_, l, w, thick in zip(lay_nm, l_sp, w_sp, thi): + l_h = thick + w_h = self.w_res + 2 * w + + l_v = self.l_res + 2 * l - 2 * thick + w_v = thick + + res1 = self.c.add_ref( + gf.components.rectangle( + size=(w_h, l_h), layer=layer_, centered=True + ) + ) + res2 = self.c.add_ref( + gf.components.rectangle( + size=(w_h, l_h), layer=layer_, centered=True + ) + ) + + res1.movey(0.5 * l_v + 0.5 * l_h) + res2.movey(-1 * (0.5 * l_v + 0.5 * l_h)) + + res1 = self.c.add_ref( + gf.components.rectangle( + size=(w_v, l_v), layer=layer_, centered=True + ) + ) + res2 = self.c.add_ref( + gf.components.rectangle( + size=(w_v, l_v), layer=layer_, centered=True + ) + ) + + res1.movex(0.5 * w_h - 0.5 * w_v) + res2.movex(-1 * (0.5 * w_h - 0.5 * w_v)) + + def draw_contact_layer_h( + self, layer_names, l_space, sizes_w, sizes_l, s_fit_in, s_btw + ): + """draw the horizontal contact layers of the res + Args: + layer_names(list[layers]): + list of the layer names + l_space(list[float]): + [0.5*length of the layers - 0.5*length of the marked layer] + sizes_w(list[float]): + list of contacts width + sizes_l(list[float]): + list of contacts length + s_fit_in(list[float]): + list of total length to fit contacts in + s_btw(list[float]): + list of the spaces btw the contacts + + """ + for layer_, l, size_l, size_w, space_fit, space_btw in zip( + layer_names, l_space, sizes_l, sizes_w, s_fit_in, s_btw + ): + + counts = math.floor((space_fit) / (size_w + space_btw)) + if counts < 1: + counts = 1 + res = gf.components.rectangle( + size=(size_w, size_l), layer=layer_, centered=True + ) + res_ar1 = self.c.add_array( + res, + rows=1, + columns=counts, + spacing=(size_w + space_btw, size_w + space_btw), + ) + res_ar2 = self.c.add_array( + res, + rows=1, + columns=counts, + spacing=(size_w + space_btw, size_w + space_btw), + ) + + res_ar1.movey(size_l * 0.5 + l + self.l_res * 0.5) + res_ar2.movey(-1 * (size_l * 0.5 + l + self.l_res * 0.5)) + + res_ar1.movex(-(counts - 1) * (size_w + space_btw) * 0.5) + res_ar2.movex(-(counts - 1) * (size_w + space_btw) * 0.5) + + def draw_contact_layer_v( + self, + layer_names, + l_space, + sizes_w, + sizes_l, + space_fit_in, + spaces_btw=None, + ): + """draw the vertical contact layers of the res + Args: + layer_names(list[layers]): + list of the layer names + l_space(list[float]): + [0.5*length of the layers - 0.5*length of the marked layer] + sizes_w(list[float]): + list of contacts width + sizes_l(list[float]): + list of contacts length + space_fit_in(list[float]): + list of total length to fit contacts in + spaces_btw(list[float]): + list of the spaces btw the contacts + """ + if spaces_btw is None: + spaces_btw = sizes_w + for layer_, l, size_l, size_w, space_fit, space_btw in zip( + layer_names, + l_space, + sizes_l, + sizes_w, + space_fit_in, + spaces_btw, + ): + + counts = math.floor((space_fit) / (size_w + space_btw)) + res = gf.components.rectangle( + size=(size_w, size_l), layer=layer_, centered=True + ) + res_ar1 = self.c.add_array( + res, + rows=counts, + columns=1, + spacing=(size_l + space_btw, size_l + space_btw), + ) + res_ar2 = self.c.add_array( + res, + rows=counts, + columns=1, + spacing=(size_l + space_btw, size_l + space_btw), + ) + + res_ar1.movey(-(counts - 1) * size_l) + res_ar2.movey(-(counts - 1) * size_l) + + res_ar1.movex(0.5 * self.w_res + l + 0.5 * size_w) + res_ar2.movex(-(0.5 * self.w_res + l + 0.5 * size_w)) + + def draw_2dArr_layer(self, layer_names, mcon_d, l_up=0, l_down=0, n=0): + """draw the 2d contact layers of the res + Args: + layer_names(list[layers]): list of the layer names + mcon_d(list[float]): list of contacts thickness + l_up(list[float]): upper contacts array space from marked layer + l_down(list[float]): down contacts array space from marked layer + n(list[float]): list of the 1 for 2d arr and 0 for 1d arr + """ + res = gf.components.rectangle( + size=(mcon_d, mcon_d), layer=layer_names, centered=True + ) + + counts_arr = math.floor(self.w_res / (2*CONTACT_S)) + if counts_arr <= 0: + counts_arr = 1 + if counts_arr % 2 == 0 and counts_arr > CONTACT_N: + counts_arr = counts_arr - 1 + res_ar1 = self.c.add_array( + res, + rows=6, + columns=counts_arr + n, + spacing=(mcon_d + CONTACT_SPACE, mcon_d + CONTACT_SPACE), + ) + res_ar2 = self.c.add_array( + res, + rows=6, + columns=counts_arr + n, + spacing=(mcon_d + CONTACT_SPACE, mcon_d + CONTACT_SPACE), + ) + + res_ar1.movey(mcon_d * 0.5 + l_up + (self.l_res) * 0.5) + res_ar2.movey(-1 * (mcon_d * 0.5 + l_down + (self.l_res) * 0.5)) + if (counts_arr + n) != 1: + # res_ar1.movex(-1*(mcon_d * 0.5 + 0.5*self.w_res)) + # res_ar2.movex(-1 * (mcon_d * 0.5 +0.5*self.w_res)) + res_ar1.movex(-(counts_arr + n - 1) * CONTACT_S) + res_ar2.movex(-(counts_arr + n - 1) * CONTACT_S) + + def get_c(self): + """get component + + Returns: + c(gf.component): layout creates + """ + return self.c + + @abstractmethod + def your_res(): + """must override in the child class""" + pass diff --git a/sky130/cells/klayout/pymacros/cells/res_diff_child.py b/sky130/cells/klayout/pymacros/cells/res_diff_child.py new file mode 100644 index 000000000..6977e64d6 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/res_diff_child.py @@ -0,0 +1,731 @@ +# Copyright 2022 Skywater 130nm pdk development +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + + +# res Generator for skywater130 + +from .layers_def import ( + diff_layer, + diff_res, + nsdm_layer, + tap_layer, + psdm_layer, + li_layer, + licon_layer, + m1_layer, + mcon_layer, + hvi_layer, + hvntm_layer, + nwell_layer, +) +from .parent_res import draw_res + +# ##########constant################# +# [l,w] +# react +DIFF_RES = 0 +DIFF_LAYER_ND = [0.515, 0] +NSDM_LAYER_ND = [0.64, 0.125] +# HVT +HVI_ND = [1.43, 0.915, 0.7, 0.21] +HVNTM_ND = [0.7, 0.185] +# [l,w,thickness] +# frame +TAP_ND_LVT = [1.125, 0.61, 0.17] +PSDM_ND_LVT = [1.25, 0.735, 0.42] +LI_ND_LVT = [1.125, 0.61, 0.17] +# HVT +TAP_ND_HVT = [1.245, 0.73, 0.29] +PSDM_ND_HVT = [1.37, 0.855, 0.54] +LI_ND_HVT = [1.185, 0.67, 0.17] +# [l,w,thickness_l,thickness_w,space] +# CONTACT H +LICON1_ND_LVT = [0.285, 0.17, 0.17, 0, 0.17] +LICON2_ND_LVT = [0.955, 0.17, 0.17, 0, 0.17] +MCON_ND_LVT = [0.185, 0.17, 0.17, 0, 0.19] +M1_ND_LVT = [0.025, 0.49, 0, 0, 0] +LI1_ND_LVT = [0.085, 0.2, 0, 0, 0] +LI2_ND_LVT = [0.285, 0.17, 0, 0, 0] +# HVT +LICON2_ND_HVT = 1.015 + +# CONTACT V +LICON3_ND_LVT = [0.44, 0.17, 0.17, 1.37, 0.17] +# HVT +LICON3_ND_HVT = 0.5 + +# #####PD +NWELL_PD = [1.305, 0.79] +# HVT +NWELL_PD_HVT = [1.575, 1.06] +HVI_PD_HVT = [1.575, 1.06] +# frame +TAP_PD_HVT = [1.245, 0.73, 0.29] +PSDM_PD_HVT = [1.37, 0.855, 0.54] +LI_PD_HVT = [1.185, 0.67, 0.17] + + +################################# + + +class res_diff_draw(draw_res): + """child class for the backend of the diff res + Args: + type_ (str): type of the res + """ + + def __init__(self, type_): + super().__init__(type_) + + def your_res( + self, + layout, + type="sky130_fd_pr__res_nd_lvt", + l: float = 2.1, + w: float = 0.42, + gr: int = 1, + ): + """draw the res with calling the parent func with right data + + Args: + layout(layout): drawing layout + type(float): type of the resistor + l(float): length of the resistor + w(float): width of the resistor + gr(int): guard ring of the resistor + + """ + self.set_l_w(l, w) + if type == "sky130_fd_pr__res_nd_lvt": + + # rects + layer_names = [diff_res, diff_layer, nsdm_layer] + l1 = [DIFF_RES, DIFF_LAYER_ND[0], NSDM_LAYER_ND[0]] + w1 = [DIFF_RES, DIFF_LAYER_ND[1], NSDM_LAYER_ND[1]] + + self.draw_rect_layer(layer_names, l1, w1) + + # frams + layer_names = [tap_layer, psdm_layer, li_layer] + l1 = [TAP_ND_LVT[0], PSDM_ND_LVT[0], LI_ND_LVT[0]] + w1 = [TAP_ND_LVT[1], PSDM_ND_LVT[1], LI_ND_LVT[1]] + thick = [TAP_ND_LVT[2], PSDM_ND_LVT[2], LI_ND_LVT[2]] + + if gr == 1: + self.draw_frame_layer(layer_names, l1, w1, thick) + + # countacts + + layer_names = [ + licon_layer, + licon_layer, + mcon_layer, + m1_layer, + li_layer, + li_layer, + ] + l1 = [ + LICON1_ND_LVT[0], + LICON2_ND_LVT[0], + MCON_ND_LVT[0], + M1_ND_LVT[0], + LI1_ND_LVT[0], + LI2_ND_LVT[0], + ] + sizes_l = [ + LICON1_ND_LVT[1], + LICON2_ND_LVT[1], + MCON_ND_LVT[1], + M1_ND_LVT[1], + LI1_ND_LVT[1], + LI2_ND_LVT[1], + ] + sizes_w = [ + LICON1_ND_LVT[2], + LICON2_ND_LVT[2], + MCON_ND_LVT[2], + w - 0.05, + w - 0.12, + w + 0.04, + ] + space_fit_in = [ + w, + w + 0.34, + w - 0.12, + M1_ND_LVT[3], + LI1_ND_LVT[3], + LI2_ND_LVT[3], + ] + spaces = [ + LICON1_ND_LVT[4], + LICON2_ND_LVT[4], + MCON_ND_LVT[4], + M1_ND_LVT[4], + LI1_ND_LVT[4], + LI2_ND_LVT[4], + ] + + if gr == 0: + layer_names = [ + licon_layer, + mcon_layer, + m1_layer, + li_layer, + li_layer, + ] + l1 = [ + LICON1_ND_LVT[0], + MCON_ND_LVT[0], + M1_ND_LVT[0], + LI1_ND_LVT[0], + LI2_ND_LVT[0], + ] + sizes_l = [ + LICON1_ND_LVT[1], + MCON_ND_LVT[1], + M1_ND_LVT[1], + LI1_ND_LVT[1], + LI2_ND_LVT[1], + ] + sizes_w = [ + LICON1_ND_LVT[2], + MCON_ND_LVT[2], + w - 0.05, + w - 0.12, + w + 0.04, + ] + space_fit_in = [ + w, + w - 0.12, + M1_ND_LVT[3], + LI1_ND_LVT[3], + LI2_ND_LVT[3], + ] + spaces = [ + LICON1_ND_LVT[4], + MCON_ND_LVT[4], + M1_ND_LVT[4], + LI1_ND_LVT[4], + LI2_ND_LVT[4], + ] + + self.draw_contact_layer_h( + layer_names, l1, sizes_w, sizes_l, space_fit_in, spaces + ) + if gr: + layer_names = [licon_layer] + l1 = [LICON3_ND_LVT[0]] + sizes_l = [LICON3_ND_LVT[1]] + sizes_w = [LICON3_ND_LVT[2]] + space_fit_in = [l + LICON3_ND_LVT[3]] + spaces = [LICON3_ND_LVT[4]] + self.draw_contact_layer_v( + layer_names, l1, sizes_w, sizes_l, space_fit_in, spaces + ) + + c = self.get_c() + c.write_gds("res_temp.gds") + layout.read("res_temp.gds") + cell_name = type + return layout.cell(cell_name) + elif type == "sky130_fd_pr__res_nd_hvt": + # rects + layer_names = [ + diff_res, + diff_layer, + nsdm_layer, + hvi_layer, + hvntm_layer, + ] + l1 = [ + DIFF_RES, + DIFF_LAYER_ND[0], + NSDM_LAYER_ND[0], + HVI_ND[0], + HVNTM_ND[0], + ] + w1 = [ + DIFF_RES, + DIFF_LAYER_ND[1], + NSDM_LAYER_ND[1], + HVI_ND[1], + HVNTM_ND[1], + ] + + if gr == 0: + layer_names = [ + diff_res, + diff_layer, + nsdm_layer, + hvi_layer, + hvntm_layer, + ] + l1 = [ + DIFF_RES, + DIFF_LAYER_ND[0], + NSDM_LAYER_ND[0], + HVI_ND[2], + HVNTM_ND[0], + ] + w1 = [ + DIFF_RES, + DIFF_LAYER_ND[1], + NSDM_LAYER_ND[1], + HVI_ND[3], + HVNTM_ND[1], + ] + + self.draw_rect_layer(layer_names, l1, w1) + + # frams + layer_names = [tap_layer, psdm_layer, li_layer] + + l1 = [TAP_ND_HVT[0], PSDM_ND_HVT[0], LI_ND_HVT[0]] + w1 = [TAP_ND_HVT[1], PSDM_ND_HVT[1], LI_ND_HVT[1]] + thick = [TAP_ND_HVT[2], PSDM_ND_HVT[2], LI_ND_HVT[2]] + + if gr: + self.draw_frame_layer(layer_names, l1, w1, thick) + + # countacts + + layer_names = [ + licon_layer, + licon_layer, + mcon_layer, + m1_layer, + li_layer, + li_layer, + ] + + l1 = [ + LICON1_ND_LVT[0], + LICON2_ND_HVT, + MCON_ND_LVT[0], + M1_ND_LVT[0], + LI1_ND_LVT[0], + LI2_ND_LVT[0], + ] + sizes_l = [ + LICON1_ND_LVT[1], + LICON2_ND_LVT[1], + MCON_ND_LVT[1], + M1_ND_LVT[1], + LI1_ND_LVT[1], + LI2_ND_LVT[1], + ] + sizes_w = [ + LICON1_ND_LVT[2], + LICON2_ND_LVT[2], + MCON_ND_LVT[2], + w - 0.05, + w - 0.12, + w + 0.04, + ] + space_fit_in = [ + w, + w + 0.34, + w - 0.12, + M1_ND_LVT[3], + LI1_ND_LVT[3], + LI2_ND_LVT[3], + ] + spaces = [ + LICON1_ND_LVT[4], + LICON2_ND_LVT[4], + MCON_ND_LVT[4], + M1_ND_LVT[4], + LI1_ND_LVT[4], + LI2_ND_LVT[4], + ] + + if gr == 0: + layer_names = [ + licon_layer, + mcon_layer, + m1_layer, + li_layer, + li_layer, + ] + + l1 = [ + LICON1_ND_LVT[0], + MCON_ND_LVT[0], + M1_ND_LVT[0], + LI1_ND_LVT[0], + LI2_ND_LVT[0], + ] + sizes_l = [ + LICON1_ND_LVT[1], + MCON_ND_LVT[1], + M1_ND_LVT[1], + LI1_ND_LVT[1], + LI2_ND_LVT[1], + ] + sizes_w = [ + LICON1_ND_LVT[2], + MCON_ND_LVT[2], + w - 0.05, + w - 0.12, + w + 0.04, + ] + space_fit_in = [ + w, + w - 0.12, + M1_ND_LVT[3], + LI1_ND_LVT[3], + LI2_ND_LVT[3], + ] + spaces = [ + LICON1_ND_LVT[4], + MCON_ND_LVT[4], + M1_ND_LVT[4], + LI1_ND_LVT[4], + LI2_ND_LVT[4], + ] + + self.draw_contact_layer_h( + layer_names, l1, sizes_w, sizes_l, space_fit_in, spaces + ) + + layer_names = [licon_layer] + l1 = [LICON3_ND_HVT] + sizes_l = [LICON3_ND_LVT[1]] + sizes_w = [LICON3_ND_LVT[2]] + space_fit_in = [l + LICON3_ND_LVT[3]] + spaces = [LICON3_ND_LVT[4]] + + if gr: + self.draw_contact_layer_v( + layer_names, l1, sizes_w, sizes_l, space_fit_in, spaces + ) + + c = self.get_c() + c.write_gds("res_temp.gds") + layout.read("res_temp.gds") + cell_name = type + return layout.cell(cell_name) + elif type == "sky130_fd_pr__res_pd_lvt": + + # rects + layer_names = [ + diff_res, + diff_layer, + psdm_layer, + nwell_layer, + ] + + l1 = [DIFF_RES, DIFF_LAYER_ND[0], NSDM_LAYER_ND[0], NWELL_PD[0]] + w1 = [DIFF_RES, DIFF_LAYER_ND[1], NSDM_LAYER_ND[1], NWELL_PD[1]] + + if gr == 0: + layer_names = [ + diff_res, + diff_layer, + psdm_layer, + ] + l1 = [DIFF_RES, DIFF_LAYER_ND[0], NSDM_LAYER_ND[0]] + w1 = [DIFF_RES, DIFF_LAYER_ND[1], NSDM_LAYER_ND[1]] + + self.draw_rect_layer(layer_names, l1, w1) + + # frams + layer_names = [tap_layer, nsdm_layer, li_layer] + l1 = [TAP_ND_LVT[0], PSDM_ND_LVT[0], LI_ND_LVT[0]] + w1 = [TAP_ND_LVT[1], PSDM_ND_LVT[1], LI_ND_LVT[1]] + thick = [TAP_ND_LVT[2], PSDM_ND_LVT[2], LI_ND_LVT[2]] + + if gr: + + self.draw_frame_layer(layer_names, l1, w1, thick) + + # countacts + + layer_names = [ + licon_layer, + licon_layer, + mcon_layer, + m1_layer, + li_layer, + li_layer, + ] + l1 = [ + LICON1_ND_LVT[0], + LICON2_ND_LVT[0], + MCON_ND_LVT[0], + M1_ND_LVT[0], + LI1_ND_LVT[0], + LI2_ND_LVT[0], + ] + sizes_l = [ + LICON1_ND_LVT[1], + LICON2_ND_LVT[1], + MCON_ND_LVT[1], + M1_ND_LVT[1], + LI1_ND_LVT[1], + LI2_ND_LVT[1], + ] + sizes_w = [ + LICON1_ND_LVT[2], + LICON2_ND_LVT[2], + MCON_ND_LVT[2], + w - 0.05, + w - 0.12, + w + 0.04, + ] + space_fit_in = [ + w, + w + 0.34, + w - 0.12, + M1_ND_LVT[3], + LI1_ND_LVT[3], + LI2_ND_LVT[3], + ] + spaces = [ + LICON1_ND_LVT[4], + LICON2_ND_LVT[4], + MCON_ND_LVT[4], + M1_ND_LVT[4], + LI1_ND_LVT[4], + LI2_ND_LVT[4], + ] + + if gr == 0: + + layer_names = [ + licon_layer, + mcon_layer, + m1_layer, + li_layer, + li_layer, + ] + l1 = [ + LICON1_ND_LVT[0], + MCON_ND_LVT[0], + M1_ND_LVT[0], + LI1_ND_LVT[0], + LI2_ND_LVT[0], + ] + sizes_l = [ + LICON1_ND_LVT[1], + MCON_ND_LVT[1], + M1_ND_LVT[1], + LI1_ND_LVT[1], + LI2_ND_LVT[1], + ] + sizes_w = [ + LICON1_ND_LVT[2], + MCON_ND_LVT[2], + w - 0.05, + w - 0.12, + w + 0.04, + ] + space_fit_in = [ + w, + w - 0.12, + M1_ND_LVT[3], + LI1_ND_LVT[3], + LI2_ND_LVT[3], + ] + spaces = [ + LICON1_ND_LVT[4], + MCON_ND_LVT[4], + M1_ND_LVT[4], + LI1_ND_LVT[4], + LI2_ND_LVT[4], + ] + + self.draw_contact_layer_h( + layer_names, l1, sizes_w, sizes_l, space_fit_in, spaces + ) + + layer_names = [licon_layer] + l1 = [LICON3_ND_LVT[0]] + sizes_l = [LICON3_ND_LVT[1]] + sizes_w = [LICON3_ND_LVT[2]] + space_fit_in = [l + LICON3_ND_LVT[3]] + spaces = [LICON3_ND_LVT[4]] + if gr: + + self.draw_contact_layer_v( + layer_names, l1, sizes_w, sizes_l, space_fit_in, spaces + ) + + c = self.get_c() + c.write_gds("res_temp.gds") + layout.read("res_temp.gds") + cell_name = type + return layout.cell(cell_name) + elif type == "sky130_fd_pr__res_pd_hvt": + + # rects + layer_names = [ + diff_res, + diff_layer, + psdm_layer, + hvi_layer, + nwell_layer, + ] + l1 = [ + DIFF_RES, + DIFF_LAYER_ND[0], + NSDM_LAYER_ND[0], + HVI_PD_HVT[0], + NWELL_PD_HVT[0], + ] + w1 = [ + DIFF_RES, + DIFF_LAYER_ND[1], + NSDM_LAYER_ND[1], + HVI_PD_HVT[1], + NWELL_PD_HVT[1], + ] + + if gr == 0: + layer_names = [ + diff_res, + diff_layer, + psdm_layer, + hvi_layer, + ] + l1 = [DIFF_RES, DIFF_LAYER_ND[0], NSDM_LAYER_ND[0], HVI_ND[2]] + w1 = [DIFF_RES, DIFF_LAYER_ND[1], NSDM_LAYER_ND[1], HVI_ND[3]] + self.draw_rect_layer(layer_names, l1, w1) + + # frams + layer_names = [tap_layer, nsdm_layer, li_layer] + l1 = [TAP_PD_HVT[0], PSDM_PD_HVT[0], LI_PD_HVT[0]] + w1 = [TAP_PD_HVT[1], PSDM_PD_HVT[1], LI_PD_HVT[1]] + thick = [TAP_PD_HVT[2], PSDM_PD_HVT[2], LI_PD_HVT[2]] + + if gr: + + self.draw_frame_layer(layer_names, l1, w1, thick) + + # countacts + + layer_names = [ + licon_layer, + licon_layer, + mcon_layer, + m1_layer, + li_layer, + li_layer, + ] + l1 = [ + LICON1_ND_LVT[0], + LICON2_ND_HVT, + MCON_ND_LVT[0], + M1_ND_LVT[0], + LI1_ND_LVT[0], + LI2_ND_LVT[0], + ] + sizes_l = [ + LICON1_ND_LVT[1], + LICON2_ND_LVT[1], + MCON_ND_LVT[1], + M1_ND_LVT[1], + LI1_ND_LVT[1], + LI2_ND_LVT[1], + ] + sizes_w = [ + LICON1_ND_LVT[2], + LICON2_ND_LVT[2], + MCON_ND_LVT[2], + w - 0.05, + w - 0.12, + w + 0.04, + ] + space_fit_in = [ + w, + w + 0.34, + w - 0.12, + M1_ND_LVT[3], + LI1_ND_LVT[3], + LI2_ND_LVT[3], + ] + spaces = [ + LICON1_ND_LVT[4], + LICON2_ND_LVT[4], + MCON_ND_LVT[4], + M1_ND_LVT[4], + LI1_ND_LVT[4], + LI2_ND_LVT[4], + ] + + if gr == 0: + layer_names = [ + licon_layer, + mcon_layer, + m1_layer, + li_layer, + li_layer, + ] + l1 = [ + LICON1_ND_LVT[0], + MCON_ND_LVT[0], + M1_ND_LVT[0], + LI1_ND_LVT[0], + LI2_ND_LVT[0], + ] + sizes_l = [ + LICON1_ND_LVT[1], + MCON_ND_LVT[1], + M1_ND_LVT[1], + LI1_ND_LVT[1], + LI2_ND_LVT[1], + ] + sizes_w = [ + LICON1_ND_LVT[2], + MCON_ND_LVT[2], + w - 0.05, + w - 0.12, + w + 0.04, + ] + space_fit_in = [ + w, + w - 0.12, + M1_ND_LVT[3], + LI1_ND_LVT[3], + LI2_ND_LVT[3], + ] + spaces = [ + LICON1_ND_LVT[4], + MCON_ND_LVT[4], + M1_ND_LVT[4], + LI1_ND_LVT[4], + LI2_ND_LVT[4], + ] + + self.draw_contact_layer_h( + layer_names, l1, sizes_w, sizes_l, space_fit_in, spaces + ) + layer_names = [licon_layer] + l1 = [LICON3_ND_HVT] + sizes_l = [LICON3_ND_LVT[1]] + sizes_w = [LICON3_ND_LVT[2]] + space_fit_in = [l + LICON3_ND_LVT[3]] + spaces = [LICON3_ND_LVT[4]] + if gr: + + self.draw_contact_layer_v( + layer_names, l1, sizes_w, sizes_l, space_fit_in, spaces + ) + + c = self.get_c() + c.write_gds("res_temp.gds") + layout.read("res_temp.gds") + cell_name = type + return layout.cell(cell_name) diff --git a/sky130/cells/klayout/pymacros/cells/res_diff_klayout_panel.py b/sky130/cells/klayout/pymacros/cells/res_diff_klayout_panel.py new file mode 100644 index 000000000..a08a3501e --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/res_diff_klayout_panel.py @@ -0,0 +1,87 @@ +# Copyright 2022 Skywater 130nm pdk development +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +from .res_klayout_panel import res +from .res_diff_child import res_diff_draw + +# ################constants################ +L_MIN = 2.1 +W_MIN = 0.42 +# ##############sheet resistances +RES_ND_LVT = 772.2 # sheet res for sky130_fd_pr__res_nd_lvt +RES_ND_HVT = 714.28 # sheet res for sky130_fd_pr__res_nd_hvt +RES_PD = 1172.33 # sheet res for sky130_fd_pr__res_pd_lvt,hvt +########################################## + + +class res_diff(res): + """child class for the front end of the diff res (klayout panel) + Args: + res(class): parent class for all types of resistors + l_min(float): minimum length of the resistor + w_min(float): minimum width of the resistor + + """ + + def __init__(self): + super().__init__(L_MIN, W_MIN) # (l_min,w_min) + + # types of resistor you need to add + # it goes in var self.type + + self.Type_handle.add_choice( + "sky130_fd_pr__res_nd_lvt", "sky130_fd_pr__res_nd_lvt" + ) + self.Type_handle.add_choice( + "sky130_fd_pr__res_nd_hvt", "sky130_fd_pr__res_nd_hvt" + ) + + self.Type_handle.add_choice( + "sky130_fd_pr__res_pd_lvt", "sky130_fd_pr__res_pd_lvt" + ) + self.Type_handle.add_choice( + "sky130_fd_pr__res_pd_hvt", "sky130_fd_pr__res_pd_hvt" + ) + + def coerce_parameters_impl(self): + """(override func) check the minimum values of l and w + + decide whether the handle or the numeric parameter has + changed (by comparing against the effective + radius ru) and set ru to the effective radius. We also update the + numerical value or the shape, depending on which on has not changed + + + """ + super().coerce_parameters_impl(L_MIN, W_MIN) # (l_min,w_min) + # res_value = sheet res * area + if self.type == "sky130_fd_pr__res_nd_lvt": + self.res_value = RES_ND_LVT * self.area + elif self.type == "sky130_fd_pr__res_nd_hvt": + self.res_value = RES_ND_HVT * self.area + else: + self.res_value = RES_PD * self.area + + def produce_impl(self): + """(override func)call the implementation backend code + create instance and pass it to the parent func + + instance(layout): the result layout to show + + """ + drw = res_diff_draw(self.type) + instance = drw.your_res( + self.layout, l=self.len, w=self.w, type=self.type, gr=self.gr + ) + super().produce_impl(instance) diff --git a/sky130/cells/klayout/pymacros/cells/res_klayout_panel.py b/sky130/cells/klayout/pymacros/cells/res_klayout_panel.py new file mode 100644 index 000000000..41060cbfe --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/res_klayout_panel.py @@ -0,0 +1,132 @@ +# Copyright 2022 Skywater 130nm pdk development +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +# res Generator for skywater130 + +import pya + + +class res(pya.PCellDeclarationHelper): + """parent class for the front end of the res (klayout panel) + Args: + l_min(float): minimum length of the resistor + w_min(float): minimum width of the resistor + """ + + def __init__(self, l_min, w_min): + # Initialize super class. + super(res, self).__init__() + + # ===================== PARAMETERS DECLARATIONS ===================== + + self.Type_handle = self.param("type", self.TypeList, "Device Type") + + self.param("len", self.TypeDouble, "length", default=l_min, unit="um") + self.param("w", self.TypeDouble, "width", default=w_min, unit="um") + + self.param("gr", self.TypeBoolean, "Gaurd Ring", default=1) + self.param( + "area", self.TypeDouble, "Area", readonly=True, unit="um^2" + ) + self.param( + "res_value", + self.TypeDouble, + "Res Value", + readonly=True, + unit="ohms", + ) + + def display_text_impl(self): + """Provide a descriptive text for the cell + Return: + (str):the res name with len and w + """ + + # Provide a descriptive text for the cell + return ( + "Resistor_" + + str(self.type) + + "(L=" + + ("%.3f" % self.len) + + ",W=" + + ("%.3f" % self.w) + + ")" + ) + + def coerce_parameters_impl(self, l_min, w_min): + """check the minimum values of l and w + + decide whether the handle or the numeric parameter has + changed (by comparing against the effective + radius ru) and set ru to the effective radius. We also update the + numerical value or the shape, depending on which on has not changed + Args: + l_min(float): minimum length of the resistor + w_min(float): minimum width of the resistor + + """ + + self.area = self.w * self.len + + if self.len < l_min: + self.len = l_min + + if self.w < w_min: + self.w = w_min + + def can_create_from_shape_impl(self): + """Implement the Create PCell + + we can use any shape which has a finite bounding box + """ + + return ( + self.shape.is_box() + or self.shape.is_polygon() + or self.shape.is_path() + ) + + def parameters_from_shape_impl(self): + """Implement the "Create PCell from shape" protocol: + + we set r and l from the shape's bounding box width and layer + """ + self.r = self.shape.bbox().width() * self.layout.dbu / 2 + self.len = self.layout.get_info(self.layer) + + def transformation_from_shape_impl(self): + """Implement the "Create PCell from shape" protocol: + + we use the center of the shape's bounding box + to determine the transformation + """ + return pya.Trans(self.shape.bbox().center()) + + def produce_impl(self, instance): + """call the implementation backend code + Args: + instance(layout): the result layout to show + + """ + write_cells = pya.CellInstArray( + instance.cell_index(), + pya.Trans(pya.Point(0, 0)), + pya.Vector(0, 0), + pya.Vector(0, 0), + 1, + 1, + ) + self.cell.insert(write_cells) + self.cell.flatten(1) diff --git a/sky130/cells/klayout/pymacros/cells/res_metal_child.py b/sky130/cells/klayout/pymacros/cells/res_metal_child.py new file mode 100644 index 000000000..018ca4f02 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/res_metal_child.py @@ -0,0 +1,109 @@ +# Copyright 2022 Skywater 130nm pdk development +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + + +# res Generator for skywater130 + +from .layers_def import ( + li1_res, + li_layer, + met1_res, + met2_res, + met3_res, + met4_res, + met5_res, + m1_layer, + m2_layer, + m3_layer, + m4_layer, + m5_layer, +) +from .parent_res import draw_res +from gdsfactory.types import LayerSpec + +# ########constants########## +# ONLY FOR GENERIC RES +L_MIN_G = 0.17 +W_MIN_G = 0.17 +# REACT +LI_LYAER_G = [0.285, 0] + + +# ########################## +class res_metal_draw(draw_res): + """child class for the backend of the metal res + Args: + type_ (str): type of the res + """ + + def __init__(self, type_): + super().__init__(type_) + # self.l=l + # self.w=w + # self.your_res() + + def gen_res(self, ly1: LayerSpec, ly2: LayerSpec): + """draw the different metal res + + Args: + ly1(LayerSpec): marked layer + ly2(LayerSpec): overlapping layer + + """ + layer_names = [ly1, ly2] + l1 = [0, LI_LYAER_G[0]] + w1 = [0, LI_LYAER_G[1]] + self.draw_rect_layer(layer_names, l1, w1) + + def your_res( + self, + layout, + type="sky130_fd_pr__res_generic_l1", + l: float = L_MIN_G, + w: float = W_MIN_G, + ): + """draw the res with calling the parent func with right data + + Args: + layout(layout): drawing layout + type(str): type of the resistor + l(float): length of the resistor + w(float): width of the resistor + + """ + self.set_l_w(l, w) + + if type == "sky130_fd_pr__res_generic_l1": + self.gen_res(li1_res, li_layer) + + elif type == "sky130_fd_pr__res_generic_m1": + self.gen_res(met1_res, m1_layer) + + elif type == "sky130_fd_pr__res_generic_m2": + self.gen_res(met2_res, m2_layer) + + elif type == "sky130_fd_pr__res_generic_m3": + self.gen_res(met3_res, m3_layer) + + elif type == "sky130_fd_pr__res_generic_m4": + self.gen_res(met4_res, m4_layer) + + elif type == "sky130_fd_pr__res_generic_m5": + self.gen_res(met5_res, m5_layer) + c = self.get_c() + c.write_gds("res_temp.gds") + layout.read("res_temp.gds") + cell_name = type + return layout.cell(cell_name) diff --git a/sky130/cells/klayout/pymacros/cells/res_metal_klayout_panel.py b/sky130/cells/klayout/pymacros/cells/res_metal_klayout_panel.py new file mode 100644 index 000000000..94b4c951d --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/res_metal_klayout_panel.py @@ -0,0 +1,119 @@ +# Copyright 2022 Skywater 130nm pdk development +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +from .res_klayout_panel import res +from .res_metal_child import res_metal_draw + +# ################constants################ +L_MIN = 0.17 +W_MIN = 0.17 + +L_MIN_M1 = 0.14 +L_MIN_M2 = 0.14 +L_MIN_M3 = 0.3 +L_MIN_M4 = 0.3 +L_MIN_M5 = 1.6 + +# ##############sheet resistances +RES_GEN = 442.9 # sheet res for sky130_fd_pr__res_generic_l1 + + +RES_M1 = 6.377 # sheet res for sky130_fd_pr__res_generic_m1 +RES_M2 = 6.377 # sheet res for sky130_fd_pr__res_generic_m2 +RES_M3 = 0.522 # sheet res for sky130_fd_pr__res_generic_m3 +RES_M4 = 0.522 # sheet res for sky130_fd_pr__res_generic_m4 +RES_M5 = 0.0113 # sheet res for sky130_fd_pr__res_generic_m5 + +########################################## + + +class res_metal(res): + """child class for the front end of the poly res (klayout panel) + Args: + res(class): parent class for all types of resistors + l_min(float): minimum length of the resistor + w_min(float): minimum width of the resistor + + """ + + def __init__(self): + super().__init__(L_MIN, W_MIN) # (l_min,w_min) + + # types of resistor you need to add + # it goes in var self.type + + self.Type_handle.add_choice( + "sky130_fd_pr__res_generic_l1", "sky130_fd_pr__res_generic_l1" + ) + self.Type_handle.add_choice( + "sky130_fd_pr__res_generic_m1", "sky130_fd_pr__res_generic_m1" + ) + self.Type_handle.add_choice( + "sky130_fd_pr__res_generic_m2", "sky130_fd_pr__res_generic_m2" + ) + + self.Type_handle.add_choice( + "sky130_fd_pr__res_generic_m3", "sky130_fd_pr__res_generic_m3" + ) + self.Type_handle.add_choice( + "sky130_fd_pr__res_generic_m4", "sky130_fd_pr__res_generic_m4" + ) + self.Type_handle.add_choice( + "sky130_fd_pr__res_generic_m5", "sky130_fd_pr__res_generic_m5" + ) + + def coerce_parameters_impl(self): + """(override func) check the minimum values of l and w + + decide whether the handle or the numeric parameter has + changed (by comparing against the effective + radius ru) and set ru to the effective radius. We also update the + numerical value or the shape, depending on which on has not changed + + + """ + + # res_value = sheet res * area + if self.type == "sky130_fd_pr__res_generic_l1": + super().coerce_parameters_impl(L_MIN, W_MIN) # (l_min,w_min) + self.res_value = RES_GEN * self.area + + elif self.type == "sky130_fd_pr__res_generic_m1": + super().coerce_parameters_impl(L_MIN_M1, L_MIN_M1) + self.res_value = RES_M1 * self.area + elif self.type == "sky130_fd_pr__res_generic_m2": + super().coerce_parameters_impl(L_MIN_M2, L_MIN_M2) + self.res_value = RES_M2 * self.area + elif self.type == "sky130_fd_pr__res_generic_m3": + super().coerce_parameters_impl(L_MIN_M3, L_MIN_M3) + self.res_value = RES_M3 * self.area + elif self.type == "sky130_fd_pr__res_generic_m4": + super().coerce_parameters_impl(L_MIN_M4, L_MIN_M4) + self.res_value = RES_M4 * self.area + elif self.type == "sky130_fd_pr__res_generic_m5": + super().coerce_parameters_impl(L_MIN_M5, L_MIN_M5) + self.res_value = RES_M5 * self.area + + def produce_impl(self): + """(override func)call the implementation backend code + create instance and pass it to the parent func + + instance(layout): the result layout to show + + """ + drw = res_metal_draw(self.type) + instance = drw.your_res( + self.layout, l=self.len, w=self.w, type=self.type + ) + super().produce_impl(instance) diff --git a/sky130/cells/klayout/pymacros/cells/res_poly_child.py b/sky130/cells/klayout/pymacros/cells/res_poly_child.py new file mode 100644 index 000000000..4119e62bc --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/res_poly_child.py @@ -0,0 +1,559 @@ +# Copyright 2022 Skywater 130nm pdk development +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + + +# res Generator for skywater130 + +import math +from .layers_def import ( + + tap_layer, + psdm_layer, + nsdm_layer, + li_layer, + licon_layer, + m1_layer, + mcon_layer, + rpm_drawing, + rpm_high_drawing, + npc_layer, + poly_layer, + poly_res, + pwell_res, + dnwell_layer, + nwell_layer, + + +) +from .parent_res import draw_res + +# ########constants########## +# ONLY FOR GENERIC RES +L_MIN_G = 1.65 +W_MIN_G = 0.42 + +# react +POLY_LAYER_G = [2.15, 0] +# FRAME +TAP_LI_LAYER_G = [2.8, 0.65, 0.17] +PSDM_LAYER_G = [2.925, 0.775, 0.42] + +# CONTACTS H +LICON1_LAYER_G = [1.9, 0.17, 0.17, 0, 0.17] +LICON2_LAYER_G = [2.63, 0.17, 0.17, 0, 0.17] +NPC_LAYER_G = [1.8, 0.37, 0, 0, 0] +LI1_LAYER_G = [0.085, 1.815, 0, 0, 0] +LI2_LAYER_G = [1.9, 0.17, 0, 0, 0] +M1_LAYER_G = [0.025, 2.105, 0, 0, 0] +# CONTACT V +LICON_LAYER_G = [0.48, 0.17, 0.17, 4.98, 0.17] +# 2D ARRAY +MCON_LAYER_G = [0.17, 0.09, 1.89] +# ################################### + + +# ONLY FOR ISO RES +L_MIN_ISO = 26.5 +W_MIN_ISO = 2.65 + +# react +DNWELL=[1.82,1.03] +# FRAME +NWELL=[2.22,1.43,1.43] +TAP_LI_LAYER_ISO = [1.59, 0.8, 0.17] +NSDM_LAYER_ISO = [1.715, 0.925, 0.42] +# CONTACTS H +TAP_ISO=[0,0.53,0,0,0] +PSDM_ISO=[-0.125,0.78,0,0,0] +LI_ISO=[0,0.53,0,0,0] +M1_ISO=[0.055,0.325,0,0,0] +LICON_ISO=[0.01,0.17,0.17,0,0.17] +LICON_ISO2=0.35 +LICON_ISO3=1.42 +MCON_ISO=[0.13,0.17,0.17,0,0.19] +# CONTACTS H +LICON_ISO_H=[0.63,0.17,0.17,2.1,0.17] +# ############################### +# THE REST OF THE RES +L_MIN = 0.5 +W_MIN = 0.35 +W_MIN_0P35 = 0.35 +W_MIN_0P69 = 0.69 +W_MIN_1P41 = 1.41 +W_MIN_2P85 = 2.85 +W_MIN_5P73 = 5.73 +GR = 1 +RPM_LAYER = 0.29 +EXTRA_LEN = 0.12 + +# REACT +POLY_RES = [0, 0] +POLY_LAYER = [2.1, 0] +PSDM_LAYER = [2.875, 0.775] +PSDM_LAYER_NO_GR = [2.21, 0.11] +NPC_LAYER = [2.195, 0.095] +RPM_LAUER = [2.3, 0] +RPM_FOR_LAYERS = [0.46, 0.29, 0.2, 0.2, 0.2] +# FRAME +TAP_LI_LAYER = [2.75, 0.65, 0.17] +# CONTACTS H +LICON1_LAYER = [0.02, 2, 0.19, 0, 0.52] +LICON2_LAYER = [2.58, 0.17, 0.17, 0, 0.17] +LI_LAYER = [-0.06, 2.16, 0, 0, 0] +M1_LAYER = [-0.035, 2.105, 0, 0, 0] +LICON1_LAYER_NO_GR = 2 + +# CONTACT V +LICON_LAYER = [0.48, 0.17, 0.17, 4.31, 0.17] +# 2D ARRAY +MCON_LAYER = [0.17, 0.035, 1.83] + + +# ########################## +class res_poly_draw(draw_res): + """child class for the backend of the poly res + Args: + type_ (str): type of the res + """ + + def __init__(self, type_): + super().__init__(type_) + # self.l=l + # self.w=w + # self.your_res() + + def poly_res( + self, + l: float = L_MIN, + w: float = W_MIN, + gr: int = GR, + n_mcon: int = 0, + rpm: float = RPM_LAYER, + xhigh: int = 0, + ): + """draw the res the specific res with right data + + Args: + l(float): length of the resistor + w(float): width of the resistor + gr(int): guard ring of the resistor + n_mcon(float): mcon_layer number of columns + rpm(float): rpm layer width + xhigh(int): select high or xhigh poly res + + """ + # rects + self.set_l_w(l + EXTRA_LEN, w) + rpm_layer = rpm_drawing + if xhigh: + rpm_layer = rpm_high_drawing + layer_names = [poly_res, poly_layer, psdm_layer, npc_layer, rpm_layer] + l1 = [POLY_RES[0], POLY_LAYER[0], PSDM_LAYER[0], NPC_LAYER[0], RPM_LAUER[0]] + w1 = [POLY_RES[1], POLY_LAYER[1], PSDM_LAYER[1], NPC_LAYER[1], rpm] + if gr == 0: + layer_names = [poly_res, poly_layer, psdm_layer, npc_layer, rpm_layer] + l1 = [ + POLY_RES[0], + POLY_LAYER[0], + PSDM_LAYER_NO_GR[0], + NPC_LAYER[0], + RPM_LAUER[0], + ] + w1 = [POLY_RES[1], POLY_LAYER[1], PSDM_LAYER_NO_GR[1], NPC_LAYER[1], rpm] + self.draw_rect_layer(layer_names, l1, w1) + + # frams + layer_names = [tap_layer, li_layer] + l1 = [TAP_LI_LAYER[0], TAP_LI_LAYER[0]] + w1 = [TAP_LI_LAYER[1], TAP_LI_LAYER[1]] + thick = [TAP_LI_LAYER[2], TAP_LI_LAYER[2]] + if gr: + + self.draw_frame_layer(layer_names, l1, w1, thick) + + # countacts + + layer_names = [licon_layer, licon_layer, li_layer, m1_layer] + l1 = [LICON1_LAYER[0], LICON2_LAYER[0], LI_LAYER[0], M1_LAYER[0]] + sizes_l = [LICON1_LAYER[1], LICON2_LAYER[1], LI_LAYER[1], M1_LAYER[1]] + sizes_w = [LICON1_LAYER[2], LICON2_LAYER[2], w, w - 0.1] + space_fit_in = [w + 0.1, w + 0.34, LI_LAYER[3], M1_LAYER[3]] + spaces = [LICON1_LAYER[4], LICON2_LAYER[4], LI_LAYER[4], M1_LAYER[4]] + + if gr == 0: + layer_names = [licon_layer, li_layer, m1_layer] + l1 = [LICON1_LAYER[0], LI_LAYER[0], M1_LAYER[0]] + sizes_l = [LICON1_LAYER_NO_GR, LI_LAYER[1], M1_LAYER[1]] + sizes_w = [LICON1_LAYER[2], w, w - 0.1] + space_fit_in = [w + 0.1, LI_LAYER[3], M1_LAYER[3]] + spaces = [LICON1_LAYER[4], LI_LAYER[4], M1_LAYER[4]] + + self.draw_contact_layer_h( + layer_names, l1, sizes_w, sizes_l, space_fit_in, spaces + ) + + # vertical contacts + + layer_names = [licon_layer] + l1 = [LICON_LAYER[0]] + sizes_l = [LICON_LAYER[1]] + sizes_w = [LICON_LAYER[2]] + space_fit_in = [l + LICON_LAYER[3]] + spaces = [LICON_LAYER[4]] + + if gr: + + self.draw_contact_layer_v( + layer_names, l1, sizes_w, sizes_l, space_fit_in, spaces + ) + + # 2d arr + self.draw_2dArr_layer( + mcon_layer, MCON_LAYER[0], MCON_LAYER[1], MCON_LAYER[2], n_mcon + ) + + def your_res( + self, + layout, + type="sky130_fd_pr__res_generic_po", + l: float = L_MIN_G, + w: float = W_MIN_G, + gr: int = GR, + ): + """draw the res with calling the parent func with right data + + Args: + layout(layout): drawing layout + type(str): type of the resistor + l(float): length of the resistor + w(float): width of the resistor + gr(int): guard ring of the resistor + + """ + self.set_l_w(l, w) + + if type == "sky130_fd_pr__res_generic_po": + # rects + layer_names = [poly_res, poly_layer] + l1 = [POLY_RES[0], POLY_LAYER_G[0]] + w1 = [POLY_RES[1], POLY_LAYER_G[1]] + + self.draw_rect_layer(layer_names, l1, w1) + + # frams + layer_names = [tap_layer, psdm_layer, li_layer] + l1 = [TAP_LI_LAYER_G[0], PSDM_LAYER_G[0], TAP_LI_LAYER_G[0]] + w1 = [TAP_LI_LAYER_G[1], PSDM_LAYER_G[1], TAP_LI_LAYER_G[1]] + thick = [TAP_LI_LAYER_G[2], PSDM_LAYER_G[2], TAP_LI_LAYER_G[2]] + if gr: + + self.draw_frame_layer(layer_names, l1, w1, thick) + + # countacts + + layer_names = [ + licon_layer, + licon_layer, + npc_layer, + li_layer, + li_layer, + m1_layer, + ] + # npc + counts_arr = math.floor(w / 0.36) + if counts_arr <= 0: + counts_arr = 1 + w_met = w - 0.21 + if counts_arr == 1: + w_met = 0.37 + ## + l1 = [ + LICON1_LAYER_G[0], + LICON2_LAYER_G[0], + NPC_LAYER_G[0], + LI1_LAYER_G[0], + LI2_LAYER_G[0], + M1_LAYER_G[0], + ] + sizes_l = [ + LICON1_LAYER_G[1], + LICON2_LAYER_G[1], + NPC_LAYER_G[1], + LI1_LAYER_G[1], + LI2_LAYER_G[1], + M1_LAYER_G[1], + ] + sizes_w = [LICON1_LAYER_G[2], LICON2_LAYER_G[2], w_met, w - 0.16, w, w] + space_fit_in = [ + w, + w + 0.68, + NPC_LAYER_G[3], + LI1_LAYER_G[3], + LI2_LAYER_G[3], + M1_LAYER_G[3], + ] + spaces = [ + LICON1_LAYER_G[4], + LICON2_LAYER_G[4], + NPC_LAYER_G[4], + LI1_LAYER_G[4], + LI2_LAYER_G[4], + M1_LAYER_G[4], + ] + + if gr == 0: + layer_names = [ + licon_layer, + npc_layer, + li_layer, + li_layer, + m1_layer, + ] + l1 = [ + LICON1_LAYER_G[0], + NPC_LAYER_G[0], + LI1_LAYER_G[0], + LI2_LAYER_G[0], + M1_LAYER_G[0], + ] + sizes_l = [ + LICON1_LAYER_G[1], + NPC_LAYER_G[1], + LI1_LAYER_G[1], + LI2_LAYER_G[1], + M1_LAYER_G[1], + ] + sizes_w = [LICON1_LAYER_G[2], w_met, w - 0.16, w, w] + space_fit_in = [ + w, + w + 0.68, + LI1_LAYER_G[3], + LI2_LAYER_G[3], + M1_LAYER_G[3], + ] + spaces = [ + LICON1_LAYER_G[4], + NPC_LAYER_G[4], + LI1_LAYER_G[4], + LI2_LAYER_G[4], + M1_LAYER_G[4], + ] + + self.draw_contact_layer_h( + layer_names, l1, sizes_w, sizes_l, space_fit_in, spaces + ) + + layer_names = [licon_layer] + l1 = [LICON_LAYER_G[0]] + sizes_l = [LICON_LAYER_G[1]] + sizes_w = [LICON_LAYER_G[2]] + space_fit_in = [l + LICON_LAYER_G[3]] + spaces = [LICON_LAYER_G[4]] + + if gr: + + self.draw_contact_layer_v( + layer_names, l1, sizes_w, sizes_l, space_fit_in, spaces + ) + + # 2d arr + self.draw_2dArr_layer( + mcon_layer, MCON_LAYER_G[0], MCON_LAYER_G[1], MCON_LAYER_G[2] + ) # 0.09,1.9 + c = self.get_c() + c.write_gds("res_temp.gds") + layout.read("res_temp.gds") + cell_name = type + return layout.cell(cell_name) + + elif type == "sky130_fd_pr__res_iso_pw": + # rects + layer_names = [pwell_res, dnwell_layer] + l1 = [0, DNWELL[0]] + w1 = [0, DNWELL[1]] + if gr==0: + layer_names = [pwell_res] + l1 = [0] + w1 = [0] + + self.draw_rect_layer(layer_names, l1, w1) + + # frams + layer_names = [nwell_layer, tap_layer,nsdm_layer ,li_layer] + l1 = [NWELL[0], TAP_LI_LAYER_ISO[0], NSDM_LAYER_ISO[0],TAP_LI_LAYER_ISO[0]] + w1 = [NWELL[1], TAP_LI_LAYER_ISO[1], NSDM_LAYER_ISO[1],TAP_LI_LAYER_ISO[1]] + thick = [NWELL[2], TAP_LI_LAYER_ISO[2], NSDM_LAYER_ISO[2],TAP_LI_LAYER_ISO[2]] + + if gr: + + self.draw_frame_layer(layer_names, l1, w1, thick) + + # countacts + + layer_names = [ + tap_layer, + psdm_layer, + li_layer, + m1_layer, + licon_layer, + licon_layer, + licon_layer, + mcon_layer + ] + + l1 = [ + TAP_ISO[0], + PSDM_ISO[0], + LI_ISO[0], + M1_ISO[0], + LICON_ISO[0], + LICON_ISO2, + LICON_ISO3, + MCON_ISO[0] + ] + sizes_l = [ + TAP_ISO[1], + PSDM_ISO[1], + LI_ISO[1], + M1_ISO[1], + LICON_ISO[1], + LICON_ISO[1], + LICON_ISO[1], + MCON_ISO[1] + ] + sizes_w = [w-0.4, w-0.15, w-0.48, w - 0.4, LICON_ISO[2],LICON_ISO[2],LICON_ISO[2],MCON_ISO[2]] + space_fit_in = [ + TAP_ISO[3], + PSDM_ISO[3], + LI_ISO[3], + M1_ISO[3], + w-0.6, + w-0.6, + w+0.76, + w-0.49 + ] + spaces = [ + TAP_ISO[4], + PSDM_ISO[4], + LI_ISO[4], + M1_ISO[4], + LICON_ISO[4], + LICON_ISO[4], + LICON_ISO[4], + MCON_ISO[4] + ] + + if gr == 0: + layer_names = [ + tap_layer, + psdm_layer, + li_layer, + m1_layer, + licon_layer, + licon_layer, + mcon_layer + ] + + l1 = [ + TAP_ISO[0], + PSDM_ISO[0], + LI_ISO[0], + M1_ISO[0], + LICON_ISO[0], + LICON_ISO2, + MCON_ISO[0] + ] + sizes_l = [ + TAP_ISO[1], + PSDM_ISO[1], + LI_ISO[1], + M1_ISO[1], + LICON_ISO[1], + LICON_ISO[1], + MCON_ISO[1] + ] + sizes_w = [w-0.4, w-0.15, w-0.48, w - 0.4, LICON_ISO[2],LICON_ISO[2],MCON_ISO[2]] + space_fit_in = [ + TAP_ISO[3], + PSDM_ISO[3], + LI_ISO[3], + M1_ISO[3], + w-0.6, + w-0.6, + w-0.49 + ] + spaces = [ + TAP_ISO[4], + PSDM_ISO[4], + LI_ISO[4], + M1_ISO[4], + LICON_ISO[4], + LICON_ISO[4], + MCON_ISO[4] + ] + + self.draw_contact_layer_h( + layer_names, l1, sizes_w, sizes_l, space_fit_in, spaces + ) + + layer_names = [licon_layer] + l1 = [LICON_ISO_H[0]] + sizes_l = [LICON_ISO_H[1]] + sizes_w = [LICON_ISO_H[2]] + space_fit_in = [l + LICON_ISO_H[3]] + spaces = [LICON_ISO_H[4]] + + if gr: + + self.draw_contact_layer_v( + layer_names, l1, sizes_w, sizes_l, space_fit_in, spaces + ) + + + c = self.get_c() + c.write_gds("res_temp.gds") + layout.read("res_temp.gds") + cell_name = type + return layout.cell(cell_name) + + + elif type == "sky130_fd_pr__res_high_po_0p35": + self.poly_res(l, W_MIN_0P35, gr, 0, RPM_FOR_LAYERS[0]) + elif type == "sky130_fd_pr__res_high_po_0p69": + self.poly_res(l, W_MIN_0P69, gr, 1, RPM_FOR_LAYERS[1]) + elif type == "sky130_fd_pr__res_high_po_1p41": + self.poly_res(l, W_MIN_1P41, gr, 1, RPM_FOR_LAYERS[2]) + elif type == "sky130_fd_pr__res_high_po_2p85": + self.poly_res(l, W_MIN_2P85, gr, 1, RPM_FOR_LAYERS[3]) + elif type == "sky130_fd_pr__res_high_po_5p73": + self.poly_res(l, W_MIN_5P73, gr, 1, RPM_FOR_LAYERS[4]) + # high + + elif type == "sky130_fd_pr__res_xhigh_po_0p35": + self.poly_res(l, W_MIN_0P35, gr, 0, RPM_FOR_LAYERS[0], 1) + elif type == "sky130_fd_pr__res_xhigh_po_0p69": + self.poly_res(l, W_MIN_0P69, gr, 1, RPM_FOR_LAYERS[1], 1) + elif type == "sky130_fd_pr__res_xhigh_po_1p41": + self.poly_res(l, W_MIN_1P41, gr, 1, RPM_FOR_LAYERS[2], 1) + elif type == "sky130_fd_pr__res_xhigh_po_2p85": + self.poly_res(l, W_MIN_2P85, gr, 1, RPM_FOR_LAYERS[3], 1) + elif type == "sky130_fd_pr__res_xhigh_po_5p73": + self.poly_res(l, W_MIN_5P73, gr, 1, RPM_FOR_LAYERS[4], 1) + + c = self.get_c() + c.write_gds("res_temp.gds") + layout.read("res_temp.gds") + cell_name = type + return layout.cell(cell_name) diff --git a/sky130/cells/klayout/pymacros/cells/res_poly_klayout_panel.py b/sky130/cells/klayout/pymacros/cells/res_poly_klayout_panel.py new file mode 100644 index 000000000..6fccc4712 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/res_poly_klayout_panel.py @@ -0,0 +1,172 @@ +# Copyright 2022 Skywater 130nm pdk development +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +from .res_klayout_panel import res +from .res_poly_child import res_poly_draw +# ################constants################ +L_MIN = 1.65 +W_MIN = 0.33 +L_MIN_ISO=26.5 +W_MIN_ISO=2.65 +L_MIN_PO = 0.5 +W_MIN_0P35 = 0.35 +W_MIN_0P69 = 0.69 +W_MIN_1P41 = 1.41 +W_MIN_2P85 = 2.85 +W_MIN_5P73 = 5.73 + +# ##############sheet resistances +RES_GEN = 442.6 # sheet res for sky130_fd_pr__res_generic_po + +RES_ISO = 153.3 # sheet res for sky130_fd_pr__res_iso_pw + +RES_0P35 = 8971.42 # sheet res for sky130_fd_pr__res_high_po_0p35 +RES_0P69 = 2308.5 # sheet res for sky130_fd_pr__res_high_po_0p69 +RES_1P41 = 552.76 # sheet res for sky130_fd_pr__res_high_po_1p41 +RES_2P85 = 135.3 # sheet res for sky130_fd_pr__res_high_po_2p85 +RES_5P73 = 33.47 # sheet res for sky130_fd_pr__res_high_po_5p73 +# XHIGH +RES_XH_0P35 = 22468.57 # sheet res for sky130_fd_pr__res_xhigh_po_0p35 +RES_XH_0P69 = 5779.7 # sheet res for sky130_fd_pr__res_xhigh_po_0p69 +RES_XH_1P41 = 1384.63 # sheet res for sky130_fd_pr__res_xhigh_po_1p41 +RES_XH_2P85 = 338.87 # sheet res for sky130_fd_pr__res_xhigh_po_2p85 +RES_XH_5P73 = 83.8 # sheet res for sky130_fd_pr__res_xhigh_po_5p73 +########################################## + + +class res_poly(res): + """child class for the front end of the poly res (klayout panel) + Args: + res(class): parent class for all types of resistors + l_min(float): minimum length of the resistor + w_min(float): minimum width of the resistor + + """ + + def __init__(self): + super().__init__(L_MIN_PO, W_MIN) # (l_min,w_min) + + # types of resistor you need to add + # it goes in var self.type + + self.Type_handle.add_choice( + "sky130_fd_pr__res_generic_po", "sky130_fd_pr__res_generic_po" + ) + self.Type_handle.add_choice( + "sky130_fd_pr__res_iso_pw", "sky130_fd_pr__res_iso_pw" + ) + self.Type_handle.add_choice( + "sky130_fd_pr__res_high_po_0p35", "sky130_fd_pr__res_high_po_0p35" + ) + self.Type_handle.add_choice( + "sky130_fd_pr__res_high_po_0p69", "sky130_fd_pr__res_high_po_0p69" + ) + + self.Type_handle.add_choice( + "sky130_fd_pr__res_high_po_1p41", "sky130_fd_pr__res_high_po_1p41" + ) + self.Type_handle.add_choice( + "sky130_fd_pr__res_high_po_2p85", "sky130_fd_pr__res_high_po_2p85" + ) + self.Type_handle.add_choice( + "sky130_fd_pr__res_high_po_5p73", "sky130_fd_pr__res_high_po_5p73" + ) + + self.Type_handle.add_choice( + "sky130_fd_pr__res_xhigh_po_0p35", + "sky130_fd_pr__res_xhigh_po_0p35", + ) + self.Type_handle.add_choice( + "sky130_fd_pr__res_xhigh_po_0p69", + "sky130_fd_pr__res_xhigh_po_0p69", + ) + self.Type_handle.add_choice( + "sky130_fd_pr__res_xhigh_po_1p41", + "sky130_fd_pr__res_xhigh_po_1p41", + ) + self.Type_handle.add_choice( + "sky130_fd_pr__res_xhigh_po_2p85", + "sky130_fd_pr__res_xhigh_po_2p85", + ) + self.Type_handle.add_choice( + "sky130_fd_pr__res_xhigh_po_5p73", + "sky130_fd_pr__res_xhigh_po_5p73", + ) + + def coerce_parameters_impl(self): + """(override func) check the minimum values of l and w + + decide whether the handle or the numeric parameter has + changed (by comparing against the effective + radius ru) and set ru to the effective radius. We also update the + numerical value or the shape, depending on which on has not changed + + + """ + + # res_value = sheet res * area + if self.type == "sky130_fd_pr__res_generic_po": + super().coerce_parameters_impl(L_MIN, W_MIN) # (l_min,w_min) + self.res_value = RES_GEN * self.area + + elif self.type == "sky130_fd_pr__res_iso_pw": + super().coerce_parameters_impl(L_MIN_ISO, W_MIN_ISO) + self.res_value = RES_ISO * self.area + + elif self.type == "sky130_fd_pr__res_high_po_0p35": + super().coerce_parameters_impl(L_MIN_PO, W_MIN_0P35) + self.res_value = RES_0P35 * self.area + + elif self.type == "sky130_fd_pr__res_high_po_0p69": + super().coerce_parameters_impl(L_MIN_PO, W_MIN_0P69) + self.res_value = RES_0P69 * self.area + elif self.type == "sky130_fd_pr__res_high_po_1p41": + super().coerce_parameters_impl(L_MIN_PO, W_MIN_1P41) + self.res_value = RES_1P41 * self.area + elif self.type == "sky130_fd_pr__res_high_po_2p85": + super().coerce_parameters_impl(L_MIN_PO, W_MIN_2P85) + self.res_value = RES_2P85 * self.area + + elif self.type == "sky130_fd_pr__res_high_po_5p73": + super().coerce_parameters_impl(L_MIN_PO, W_MIN_5P73) + self.res_value = RES_5P73 * self.area + + elif self.type == "sky130_fd_pr__res_xhigh_po_0p35": + super().coerce_parameters_impl(L_MIN_PO, W_MIN_0P35) + self.res_value = RES_XH_0P35 * self.area + elif self.type == "sky130_fd_pr__res_xhigh_po_0p69": + super().coerce_parameters_impl(L_MIN_PO, W_MIN_0P69) + self.res_value = RES_XH_0P69 * self.area + elif self.type == "sky130_fd_pr__res_xhigh_po_1p41": + super().coerce_parameters_impl(L_MIN_PO, W_MIN_1P41) + self.res_value = RES_XH_1P41 * self.area + elif self.type == "sky130_fd_pr__res_xhigh_po_2p85": + super().coerce_parameters_impl(L_MIN_PO, W_MIN_2P85) + self.res_value = RES_XH_2P85 * self.area + elif self.type == "sky130_fd_pr__res_xhigh_po_5p73": + super().coerce_parameters_impl(L_MIN_PO, W_MIN_5P73) + self.res_value = RES_XH_5P73 * self.area + + def produce_impl(self): + """(override func)call the implementation backend code + create instance and pass it to the parent func + + instance(layout): the result layout to show + + """ + drw = res_poly_draw(self.type) + instance = drw.your_res( + self.layout, l=self.len, w=self.w, type=self.type, gr=self.gr + ) + super().produce_impl(instance) diff --git a/sky130/cells/klayout/pymacros/cells/rf.py b/sky130/cells/klayout/pymacros/cells/rf.py new file mode 100644 index 000000000..2beee027e --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/rf.py @@ -0,0 +1,128 @@ +# Copyright 2022 Skywater 130nm pdk development +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +######################################################################################################################## +# RF DEVICES Generator for skywater130 +######################################################################################################################## + +import pya +from .draw_rf import * +from .globals import * + +class rf_mosfet(pya.PCellDeclarationHelper): + """ + rf mosfet Generator for Skywater130 + """ + + def __init__(self): + + # Important: initialize the super class + super(rf_mosfet, self).__init__() + self.Type_handle = self.param("Type", self.TypeList, "Type") + + for i in RF_MOSFET_DEV : + self.Type_handle.add_choice(i, i) + + + self.param("Model", self.TypeString, "Model", default="sky130_fd_pr__",readonly=True) + + def display_text_impl(self): + # Provide a descriptive text for the cell + return str(self.Type) + + def produce_impl(self): + + # This is the main part of the implementation: create the layout + + self.percision = 1/self.layout.dbu + rf_mos_instance = draw_rf_mosfet(layout=self.layout,device_name=self.Type) + + write_cells = pya.CellInstArray(rf_mos_instance.cell_index(), pya.Trans(pya.Point(0, 0)), + pya.Vector(0, 0), pya.Vector(0, 0),1 , 1) + self.cell.flatten(1) + self.cell.insert(write_cells) + + self.layout.cleanup() + +class rf_bjt(pya.PCellDeclarationHelper): + """ + rf bjt Generator for Skywater130 + """ + + def __init__(self): + + # Important: initialize the super class + super(rf_bjt, self).__init__() + self.Type_handle = self.param("Type", self.TypeList, "Type") + for i in RF_BJT_DEV : + self.Type_handle.add_choice(i, i) + + + self.param("Model", self.TypeString, "Model", default="sky130_fd_pr__",readonly=True) + + + def display_text_impl(self): + # Provide a descriptive text for the cell + return str(self.Type) + + def produce_impl(self): + + # This is the main part of the implementation: create the layout + + self.percision = 1/self.layout.dbu + rf_bjt_instance = draw_rf_bjt(layout=self.layout,device_name=self.Type) + + write_cells = pya.CellInstArray(rf_bjt_instance.cell_index(), pya.Trans(pya.Point(0, 0)), + pya.Vector(0, 0), pya.Vector(0, 0),1 , 1) + self.cell.flatten(1) + self.cell.insert(write_cells) + + self.layout.cleanup() + + +class rf_coils(pya.PCellDeclarationHelper): + """ + rf coils Generator for Skywater130 + """ + + def __init__(self): + + # Important: initialize the super class + super(rf_coils, self).__init__() + self.Type_handle = self.param("Type", self.TypeList, "Type") + for i in RF_COILS_DEV : + self.Type_handle.add_choice(i, i) + + + self.param("Model", self.TypeString, "Model", default="sky130_fd_pr__",readonly=True) + + def display_text_impl(self): + # Provide a descriptive text for the cell + return str(self.Type) + + def produce_impl(self): + + # This is the main part of the implementation: create the layout + + self.percision = 1/self.layout.dbu + rf_coils_instance = draw_rf_coils(layout=self.layout,device_name=self.Type) + + write_cells = pya.CellInstArray(rf_coils_instance.cell_index(), pya.Trans(pya.Point(0, 0)), + pya.Vector(0, 0), pya.Vector(0, 0),1 , 1) + self.cell.flatten(1) + self.cell.insert(write_cells) + + self.layout.cleanup() + \ No newline at end of file diff --git a/sky130/cells/klayout/pymacros/cells/via_generator.py b/sky130/cells/klayout/pymacros/cells/via_generator.py new file mode 100644 index 000000000..c82c26782 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/via_generator.py @@ -0,0 +1,476 @@ +# Copyright 2022 Skywater 130nm pdk development +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +######################################################################################################################## +# via Generator for skywater130 +######################################################################################################################## + + +from math import ceil, floor +from tracemalloc import start +import gdsfactory as gf +from gdsfactory.types import Float2 , LayerSpec +from .layers_def import * + +@gf.cell +def via_generator( + x_range : Float2 = (0,1) , + y_range : Float2 = (0,1) , + via_size : Float2 = (0.17,0.17), + via_layer : LayerSpec = (66,44), + via_enclosure : Float2 = (0.06,0.06), + via_spacing : Float2 = (0.17,0.17) + + +) -> gf.Component(): + + """ + return only vias withen the range xrange and yrange while enclosing by via_enclosure + and set number of rows and number of coloumns according to ranges and via size and spacing + + """ + + c = gf.Component() + + width = x_range[1] - x_range[0] + length = y_range[1] - y_range[0] + nr = floor(length / (via_size[1] + via_spacing[1])) + if (length - nr*via_size[1] - (nr-1)*via_spacing[1])/2 < via_enclosure[1]: + nr -= 1 + + if nr <1 : + nr = 1 + + nc = ceil(width / (via_size[0]+via_spacing[0])) + + + if (round(width - nc*via_size[0] - (nc-1)*via_spacing[0],2))/2 < via_enclosure[0]: + nc -= 1 + + if nc<1 : + nc =1 + + + via_sp = (via_size[0]+via_spacing[0],via_size[1]+via_spacing[1]) + + rect_via = gf.components.rectangle(size = via_size , layer= via_layer) + + via_arr = c.add_array(rect_via, rows= nr, columns= nc , spacing=via_sp) + + via_arr.move((x_range[0],y_range[0])) + + via_arr.movex((width - nc*via_size[0] - (nc-1)*via_spacing[0])/2) + via_arr.movey((length - nr*via_size[1] - (nr-1)*via_spacing[1])/2) + + return c + +@gf.cell +def via_stack ( + x_range : Float2 = (0,1), + y_range : Float2 = (0,1), + base_layer : LayerSpec = diff_layer, + slotted_licon : int = 0, + metal_level : int = 1, + li_enc_dir = "V" + +) -> gf.Component : + + """ + return via stack till the metal level indicated where : + metal_level 0 : till li + metal_level 1 : till m1 + metal_level 2 : till m2 + metal_level 3 : till m3 + metal_level 4 : till m4 + metal_level 5 : till m5 + withen the range xrange and yrange and expecting the base_layer to be drawen + + """ + + c = gf.Component() + + # vias dimensions + + if slotted_licon == 1 : + licon_size = (0.19,2) + + else : + licon_size = (0.17,0.17) + + mcon_size = (0.17,0.17) + + + if base_layer == diff_layer or base_layer == tap_layer : + con_enc = (0.06,0.06) + + #elif base_layer == tap_layer: + # con_enc = (0.1,0.06) + + + elif base_layer == poly_layer : + con_enc = (0.05,0.08) + npc_enc = 0.01 + npc = c.add_ref(gf.components.rectangle(size=(x_range[1]-x_range[0]+2*npc_enc, y_range[1]-y_range[0]+2*npc_enc),layer=npc_layer)) + npc.move((x_range[0]-npc_enc, y_range[0]-npc_enc)) + + else : + pass + + if li_enc_dir == "H": + li_enc = (0.08,0) + m1_enc = (0.06,0.03) + elif li_enc_dir == "V" : + li_enc = (0,0.08) + m1_enc = (0.03,0.06) + + con_spacing = (0.19,0.19) + + via1_size = (0.15,0.15) + via1_spacing = (0.17,0.17) + via1_enc = (0.055,0.085) + + via2_size = (0.2,0.2) + via2_enc = (0.04,0.085) + via2_spacing = (0.2,0.2) + + via3_size = (0.2,0.2) + via3_enc = (0.06,0.09) + via3_spacing = (0.2,0.2) + + via4_size = (0.8,0.8) + via4_enc = (0.19,0.19) + via4_spacing = (0.8,0.8) + + + if metal_level >= 0 : + licon_gen = via_generator(x_range=x_range,y_range=y_range,via_size=licon_size,via_enclosure=con_enc,via_layer=licon_layer,via_spacing=con_spacing) + licon = c.add_ref(licon_gen) + + + li = c.add_ref(gf.components.rectangle(size=(licon.xmax-licon.xmin+(2*li_enc[0]),licon.ymax-licon.ymin+(2*li_enc[1])),layer=li_layer)) + li.move((licon.xmin-li_enc[0], licon.ymin-li_enc[1])) + + if metal_level >= 1 : + mcon_gen = via_generator(x_range=x_range,y_range=y_range,via_size=mcon_size,via_enclosure=con_enc,via_layer=mcon_layer,via_spacing=con_spacing) + mcon = c.add_ref(mcon_gen) + + + + if (mcon.xmax-mcon.xmin + 2*m1_enc[0]) < (via1_size[0] + 2*via1_enc[0]) and metal_level >=2: + m1_x = via1_size[0] + 2*via1_enc[0] + + + else : + m1_x = mcon.xmax-mcon.xmin + 2*m1_enc[0] + + + if (mcon.ymax-mcon.ymin + 2*m1_enc[1]) < (via1_size[1] + 2*via1_enc[1]) and metal_level >=2 : + m1_y = via1_size[1] + 2*via1_enc[1] + + else : + m1_y = mcon.ymax-mcon.ymin + 2*m1_enc[1] + + m1_a = 0.084 + + if (m1_x*m1_y)< m1_a : + m1_x = m1_a/m1_y + + + + m1_mx = (m1_x - (mcon.xmax - mcon.xmin))/2 + m1_my = (m1_y - (mcon.ymax - mcon.ymin))/2 + + + m1 = c.add_ref(gf.components.rectangle(size=(m1_x,m1_y),layer=m1_layer)) + m1.move((mcon.xmin - m1_mx, mcon.ymin - m1_my)) + + if metal_level >=2 : + via1_gen = via_generator(x_range= (m1.xmin, m1.xmax), y_range=(m1.ymin,m1.ymax),via_size=via1_size,via_enclosure=via1_enc + ,via_layer=via1_layer,via_spacing=via1_spacing) + via1 = c.add_ref(via1_gen) + + if (via1.xmax-via1.xmin) > (via1.ymax - via1.ymin): + m2_enc = (0.055,0.085) + else : + m2_enc = (0.085,0.055) + + if (via1.xmax-via1.xmin + 2*m2_enc[0]) < (via2_size[0] + 2*via2_enc[0]) and metal_level >=3: + m2_x = via2_size[0] + 2*via2_enc[0] + + + else : + m2_x = via1.xmax-via1.xmin + 2*m2_enc[0] + + + if (via1.ymax-via1.ymin + 2*m2_enc[1]) < (via2_size[1] + 2*via2_enc[1]) and metal_level >=3: + m2_y = via2_size[1] + 2*via2_enc[1] + + + else : + m2_y = via1.ymax-via1.ymin + 2*m2_enc[1] + + m2_mx = (m2_x - (via1.xmax - via1.xmin))/2 + m2_my = (m2_y - (via1.ymax - via1.ymin))/2 + + m2 = c.add_ref(gf.components.rectangle(size=(m2_x,m2_y),layer=m2_layer)) + m2.move((via1.xmin - m2_mx, via1.ymin -m2_my)) + + if metal_level >= 3 : + via2_gen = via_generator(x_range= (m2.xmin, m2.xmax), y_range=(m2.ymin,m2.ymax),via_size=via2_size,via_enclosure=via2_enc + ,via_layer=via2_layer,via_spacing=via2_spacing) + via2 = c.add_ref(via2_gen) + + m3_enc = (0.065,0.065) + + if (via2.xmax-via2.xmin + 2*m3_enc[0]) < (via3_size[0] + 2*via3_enc[0]) and metal_level >= 4: + m3_x = via3_size[0] + 2*via3_enc[0] + + else : + m3_x = via2.xmax-via2.xmin + 2*m3_enc[0] + + + if (via2.ymax-via2.ymin + 2*m3_enc[1]) < (via3_size[1] + 2*via3_enc[1]) and metal_level >=4: + m3_y = via3_size[1] + 2*via3_enc[1] + + else : + m3_y = via2.ymax-via2.ymin + 2*m3_enc[1] + + m3_mx = (m3_x - (via2.xmax - via2.xmin))/2 + m3_my = (m3_y - (via2.ymax - via2.ymin))/2 + + + m3 = c.add_ref(gf.components.rectangle(size=(m3_x,m3_y),layer=m3_layer)) + m3.move((via2.xmin - m3_mx, via2.ymin - m3_my)) + + if metal_level >= 4 : + via3_gen = via_generator(x_range= (m3.xmin, m3.xmax), y_range=(m3.ymin,m3.ymax),via_size=via3_size,via_enclosure=via3_enc + ,via_layer=via3_layer,via_spacing=via3_spacing) + via3 = c.add_ref(via3_gen) + + m4_enc = (0.065,0.065) + + if (via3.xmax-via3.xmin + 2*m4_enc[0]) < (via4_size[0] + 2*via4_enc[0]) and metal_level >=5: + m4_x = via4_size[0] + 2*via4_enc[0] + + else : + m4_x = via3.xmax-via3.xmin + 2*m4_enc[0] + + + if (via3.ymax-via3.ymin + 2*m4_enc[1]) < (via4_size[1] + 2*via4_enc[1]) and metal_level >=5: + m4_y = via4_size[1] + 2*via4_enc[1] + + + else : + m4_y = via3.ymax-via3.ymin + 2*m4_enc[1] + + m4_mx = (m4_x- (via3.xmax - via3.xmin))/2 + m4_my = (m4_y- (via3.ymax - via3.ymin))/2 + + m4 = c.add_ref(gf.components.rectangle(size=(m4_x,m4_y),layer=m4_layer)) + m4.move(( via3.xmin-m4_mx , via3.ymin- m4_my )) + + if metal_level >= 5 : + via4_gen = via_generator(x_range= (m4.xmin, m4.xmax), y_range=(m4.ymin,m4.ymax),via_size=via4_size,via_enclosure=via4_enc + ,via_layer=via4_layer,via_spacing=via4_spacing) + via4 = c.add_ref(via4_gen) + + m5_enc = (0.31,0.31) + m5_min_w = 1.6 + if (via4.xmax-via4.xmin + 2*m5_enc[0]) < m5_min_w: + m5_x = m5_min_w + + else : + m5_x = via4.xmax-via4.xmin + 2*m5_enc[0] + + + if (via4.ymax-via4.ymin + 2*m5_enc[1]) < m5_min_w: + m5_y = m5_min_w + + + else : + m5_y = via4.ymax-via4.ymin + 2*m5_enc[1] + + + + m5_a = 4 + if (m5_x*m5_y)< m5_a : + m5_x = m5_a/m5_y + + m5_mx = (m5_x - (via4.xmax - via4.xmin))/2 + m5_my = (m5_y - (via4.ymax - via4.ymin))/2 + + m5 = c.add_ref(gf.components.rectangle(size=(m5_x,m5_y),layer=m5_layer)) + m5.move((via4.xmin - m5_mx, via4.ymin - m5_my)) + + return c + +#@gf.cell +def vias_gen_draw( + layout, + l : float = 1.0, + w : float = 1.0, + start_layer = "poly", + end_layer = "metal5" + + +) : #-> gf.Component : + ''' + draws a vias stack from the start_layer to the end_layer and also draws the start and end layers where : + l : float of the length that vias will be drawn in + w : float of the width that vias will drawn in + start_layer : string of the first layer to be drawn that takes input of (poly,p_tap,n_tap,p_diff,n_diff,li,metal1:5) + end_layer : string of the last layer to be drawn that takes input of (poly,p_tap,n_tap,p_diff,n_diff,li,metal1:5) + + ''' + c = gf.Component("via") + + base_layers = ["poly","n_diff","p_diff","n_tap","p_tap"] + metal_layers = ["li","metal1","metal2","metal3","metal4","metal5"] + + + if start_layer in base_layers : + level_1 = -1 + else : + for i in range(len(metal_layers)): + if start_layer == metal_layers[i]: + level_1 = i + + if end_layer in base_layers : + level_2 = -1 + else : + for i in range(len(metal_layers)): + if end_layer == metal_layers[i]: + level_2 = i + + + if level_1 <= -1 and level_2 >= -1 : + if start_layer == "poly" or end_layer == "poly": + npc_enc = 0.05 + poly = c.add_ref(gf.components.rectangle(size=(l,w),layer = poly_layer)) + npc = c.add_ref(gf.components.rectangle(size=(l+2*npc_enc,w+2*npc_enc),layer=npc_layer)).move((-npc_enc, -npc_enc)) + if "diff" in start_layer or "diff" in end_layer: + n_p_enc = 0.125 + nwell_enc = 0.18 + diff = c.add_ref(gf.components.rectangle(size=(l,w),layer = diff_layer)) + if "n_" in start_layer or "n_" in end_layer : + nsdm = c.add_ref(gf.components.rectangle(size=(l+2*n_p_enc,w+2*n_p_enc),layer=nsdm_layer)).move((-n_p_enc,-n_p_enc)) + else : + psdm = c.add_ref(gf.components.rectangle(size=(l+2*n_p_enc,w+2*n_p_enc),layer=psdm_layer)).move((-n_p_enc,-n_p_enc)) + nwell = c.add_ref(gf.components.rectangle(size=(l+2*nwell_enc,w+2*nwell_enc),layer=nwell_layer)).move((-nwell_enc,-nwell_enc)) + if "tap" in start_layer or "tap" in end_layer: + n_p_enc = 0.125 + nwell_enc = 0.18 + tap = c.add_ref(gf.components.rectangle(size=(l,w),layer = tap_layer)) + if "n_" in start_layer or "n_" in end_layer: + nsdm = c.add_ref(gf.components.rectangle(size=(l+2*n_p_enc,w+2*n_p_enc),layer=nsdm_layer)).move((-n_p_enc,-n_p_enc)) + nwell = c.add_ref(gf.components.rectangle(size=(l+2*nwell_enc,w+2*nwell_enc),layer=nwell_layer)).move((-nwell_enc,-nwell_enc)) + else : + psdm = c.add_ref(gf.components.rectangle(size=(l+2*n_p_enc,w+2*n_p_enc),layer=psdm_layer)).move((-n_p_enc,-n_p_enc)) + + if level_1 <= 0 and level_2 >= 0: + li = c.add_ref(gf.components.rectangle(size=(l,w),layer = li_layer)) + + if level_1 <= 1 and level_2 >= 1: + m1 = c.add_ref(gf.components.rectangle(size=(l,w),layer = m1_layer)) + + if level_1 <= 2 and level_2 >= 2: + m2 = c.add_ref(gf.components.rectangle(size=(l,w),layer = m2_layer)) + + if level_1 <= 3 and level_2 >= 3: + m3 = c.add_ref(gf.components.rectangle(size=(l,w),layer = m3_layer)) + + if level_1 <= 4 and level_2 >= 4: + m4 = c.add_ref(gf.components.rectangle(size=(l,w),layer = m4_layer)) + + if level_1 <= 5 and level_2 >= 5: + m5 = c.add_ref(gf.components.rectangle(size=(l,w),layer = m5_layer)) + + if level_1 <= -1 and level_2 > -1 : + + + licon_size = (0.17,0.17) + + licon_spacing = (0.17,0.17) + + if start_layer == "poly": + licon_enc = (0.08,0.05) + elif "diff" in start_layer : + licon_enc = (0.12,0.06) #(0.06,0.04) + elif "tap" in start_layer : + licon_enc = (0.12,0.06) + + + + licon = via_generator(x_range=(0,l),y_range=(0,w),via_size=licon_size,via_layer=licon_layer,via_enclosure=licon_enc,via_spacing=licon_spacing) + c.add_ref(licon) + + if level_1 <= 0 and level_2 > 0 : + mcon_size = (0.17,0.17) + mcon_enc = (0.06,0.03) + mcon_spacing = (0.19,0.19) + + + mcon = via_generator(x_range=(0,l),y_range=(0,w),via_size=mcon_size,via_layer=mcon_layer,via_enclosure=mcon_enc,via_spacing=mcon_spacing) + c.add_ref(mcon) + + if level_1 <= 1 and level_2 > 1 : + via1_size = (0.15,0.15) + via1_enc = (0.085,0.055) + via1_spacing = (0.17,0.17) + + + + via1 = via_generator(x_range=(0,l),y_range=(0,w),via_size=via1_size,via_layer=via1_layer,via_enclosure=via1_enc,via_spacing=via1_spacing) + c.add_ref(via1) + + if level_1 <= 2 and level_2 > 2 : + via2_size = (0.2,0.2) + via2_enc = (0.085,0.065) + via2_spacing = (0.2,0.2) + + + via2 = via_generator(x_range=(0,l),y_range=(0,w),via_size=via2_size,via_layer=via2_layer,via_enclosure=via2_enc,via_spacing=via2_spacing) + c.add_ref(via2) + + if level_1 <= 3 and level_2 > 3 : + via3_size = (0.2,0.2) + via3_enc = (0.09,0.065) + via3_spacing = (0.2,0.2) + + + via3 = via_generator(x_range=(0,l),y_range=(0,w),via_size=via3_size,via_layer=via3_layer,via_enclosure=via3_enc,via_spacing=via3_spacing) + c.add_ref(via3) + + if level_1 <= 4 and level_2 > 4 : + via4_size = (0.8,0.8) + via4_enc = (0.31,0.31) + via4_spacing = (0.8,0.8) + + via4 = via_generator(x_range=(0,l),y_range=(0,w),via_size=via4_size,via_layer=via4_layer,via_enclosure=via4_enc,via_spacing=via4_spacing) + c.add_ref(via4) + + # creating layout and cell in klayout + c.write_gds("vias_temp.gds") + layout.read("vias_temp.gds") + cell_name = "via" + + return layout.cell(cell_name) + #return c + +# testing the generated methods +if __name__ == "__main__": + c = vias_gen_draw(start_layer="li",end_layer="poly") + c.show() + \ No newline at end of file diff --git a/sky130/cells/klayout/pymacros/cells/vias.py b/sky130/cells/klayout/pymacros/cells/vias.py new file mode 100644 index 000000000..704a4da23 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/vias.py @@ -0,0 +1,208 @@ +# Copyright 2022 Skywater 130nm pdk development +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +######################################################################################################################## +# Vias Generator for skywater130 +######################################################################################################################## + +import pya +from .via_generator import * + +licon_size = (0.17,0.17) + +licon_spacing = (0.17,0.17) + +mcon_size = (0.17,0.17) +mcon_enc = (0.06,0.03) +mcon_spacing = (0.19,0.19) + +via1_size = (0.15,0.15) +via1_enc = (0.085,0.055) +via1_spacing = (0.17,0.17) + +via2_size = (0.2,0.2) +via2_enc = (0.085,0.065) +via2_spacing = (0.2,0.2) + +via3_size = (0.2,0.2) +via3_enc = (0.09,0.065) +via3_spacing = (0.2,0.2) + +via4_size = (0.8,0.8) +via4_enc = (0.31,0.31) +via4_spacing = (0.8,0.8) + + +class vias_gen(pya.PCellDeclarationHelper): + """ + Vias Generator for Skywater130 + """ + def __init__(self): + # Initialize super class. + super(vias_gen, self).__init__() + + #===================== PARAMETERS DECLARATIONS ===================== + + self.param("l", self.TypeDouble, "length", default=1, unit="um") + self.param("w", self.TypeDouble, "width", default=1, unit="um") + + self.Type_handle = self.param("start_layer", self.TypeList, "Start Layer") + self.Type_handle.add_choice("poly","poly") + self.Type_handle.add_choice("p_tap","p_tap") + self.Type_handle.add_choice("n_tap","n_tap") + self.Type_handle.add_choice("p_diff","p_diff") + self.Type_handle.add_choice("n_diff","n_diff") + self.Type_handle.add_choice("li","li") + self.Type_handle.add_choice("metal1","metal1") + self.Type_handle.add_choice("metal2","metal2") + self.Type_handle.add_choice("metal3","metal3") + self.Type_handle.add_choice("metal4","metal4") + + self.Type_handle = self.param("end_layer", self.TypeList, "End Layer") + self.Type_handle.add_choice("li","li") + self.Type_handle.add_choice("metal1","metal1") + self.Type_handle.add_choice("metal2","metal2") + self.Type_handle.add_choice("metal3","metal3") + self.Type_handle.add_choice("metal4","metal4") + self.Type_handle.add_choice("metal5","metal5") + + + + def display_text_impl(self): + # Provide a descriptive text for the cell + return "via (L=" + ('%.3f' % self.l) + ",W=" + ('%.3f' % self.w) + ")" + + def coerce_parameters_impl(self): + # We employ coerce_parameters_impl to decide whether the handle or the + # numeric parameter has changed (by comparing against the effective + # radius ru) and set ru to the effective radius. We also update the + # numerical value or the shape, depending on which on has not changed. + + base_layers = ["poly","n_diff","p_diff","n_tap","p_tap"] + metal_layers = ["li","metal1","metal2","metal3","metal4","metal5"] + + if self.start_layer in base_layers : + level_1 = -1 + else : + for i in range(len(metal_layers)): + if self.start_layer == metal_layers[i]: + level_1 = i + + if self.end_layer in base_layers : + level_2 = -1 + else : + for i in range(len(metal_layers)): + if self.end_layer == metal_layers[i]: + level_2 = i + + #if level_1 < level_2 : + # temp_layer = self.start_layer + # self.start_layer = self.end_layer + # self.end_layer = temp_layer + + if level_1 <= -1 and level_2 > -1 : + + if self.start_layer == "poly": + licon_enc = (0.08,0.05) + elif "diff" in self.start_layer : + licon_enc = (0.12,0.06) #(0.06,0.04) + elif "tap" in self.start_layer : + licon_enc = (0.12,0.06) + else : + licon_enc = (0.12,0.12) + + if self.l < (licon_size[0]+2*licon_enc[0]): + self.l = licon_size[0]+2*licon_enc[0] + + + if self.w < (licon_size[1]+2*licon_enc[1]): + self.w = licon_size[1]+2*licon_enc[1] + + if level_1 <= 0 and level_2 > 0 : + + if self.l < (mcon_size[0]+2*mcon_enc[0]): + self.l = mcon_size[0]+2*mcon_enc[0] + + + if self.w < (mcon_size[1]+2*mcon_enc[1]): + self.w = mcon_size[1]+2*mcon_enc[1] + + if level_1 <= 1 and level_2 > 1 : + + if self.l < (via1_size[0]+2*via1_enc[0]): + self.l = via1_size[0]+2*via1_enc[0] + + + if self.w < (via1_size[1]+2*via1_enc[1]): + self.w = via1_size[1]+2*via1_enc[1] + + if level_1 <= 2 and level_2 > 2 : + + if self.l < (via2_size[0]+2*via2_enc[0]): + self.l = via2_size[0]+2*via2_enc[0] + + + if self.w < (via2_size[1]+2*via2_enc[1]): + self.w = via2_size[1]+2*via2_enc[1] + + if level_1 <= 3 and level_2 > 3 : + + if self.l < (via3_size[0]+2*via3_enc[0]): + self.l = (via3_size[0]+2*via3_enc[0]) + + + if self.w < (via3_size[1]+2*via3_enc[1]): + self.w = via3_size[1]+2*via3_enc[1] + + if level_1 <= 4 and level_2 > 4 : + + if self.l < (via4_size[0]+2*via4_enc[0]): + self.l = via4_size[0]+2*via4_enc[0] + + + if self.w < (via4_size[1]+2*via4_enc[1]): + self.w = via4_size[1]+2*via4_enc[1] + + + + + + def can_create_from_shape_impl(self): + # Implement the "Create PCell from shape" protocol: we can use any shape which + # has a finite bounding box + return self.shape.is_box() or self.shape.is_polygon() or self.shape.is_path() + + def parameters_from_shape_impl(self): + # Implement the "Create PCell from shape" protocol: we set r and l from the shape's + # bounding box width and layer + self.r = self.shape.bbox().width() * self.layout.dbu / 2 + self.l = self.layout.get_info(self.layer) + + def transformation_from_shape_impl(self): + # Implement the "Create PCell from shape" protocol: we use the center of the shape's + # bounding box to determine the transformation + return pya.Trans(self.shape.bbox().center()) + + def produce_impl(self): + instance = vias_gen_draw(layout= self.layout , l=self.l, w=self.w, start_layer=self.start_layer, end_layer=self.end_layer) + write_cells = pya.CellInstArray(instance.cell_index(), pya.Trans(pya.Point(0, 0)), + pya.Vector(0, 0), pya.Vector(0, 0), 1, 1) + self.cell.insert(write_cells) + self.cell.flatten(1) + + + + + \ No newline at end of file diff --git a/sky130/cells/klayout/pymacros/cells/vpp.py b/sky130/cells/klayout/pymacros/cells/vpp.py new file mode 100644 index 000000000..120d8b4b6 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/vpp.py @@ -0,0 +1,57 @@ +# Copyright 2022 Skywater 130nm pdk development +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +######################################################################################################################## +# VPP CAP Generator for skywater130 +######################################################################################################################## + + +import pya +from .draw_vpp import * +from .globals import * + +class cap_vpp(pya.PCellDeclarationHelper): + """ + VPP Cap Generator for Skywater130 + """ + + def __init__(self): + + # Important: initialize the super class + super(cap_vpp, self).__init__() + self.Type_handle = self.param("Type", self.TypeList, "Type") + + + for i in range(len(VPP_CAP_DEV)) : + self.Type_handle.add_choice(VPP_CAP_DEV[i], VPP_CAP_DEV[i]) + + + self.param("Model", self.TypeString, "Model", default="sky130_fd_pr__cap_vpp",readonly=True) + + def display_text_impl(self): + # Provide a descriptive text for the cell + return str(self.Type) + + def produce_impl(self): + + # This is the main part of the implementation: create the layout + + self.percision = 1/self.layout.dbu + vpp_instance = draw_vpp(layout=self.layout,device_name=self.Type) + write_cells = pya.CellInstArray(vpp_instance.cell_index(), pya.Trans(pya.Point(0, 0)), + pya.Vector(0, 0), pya.Vector(0, 0),1 , 1) + self.cell.flatten(1) + self.cell.insert(write_cells) + self.layout.cleanup() \ No newline at end of file diff --git a/sky130/cells/klayout/pymacros/sky130.lym b/sky130/cells/klayout/pymacros/sky130.lym new file mode 100644 index 000000000..7916c66fb --- /dev/null +++ b/sky130/cells/klayout/pymacros/sky130.lym @@ -0,0 +1,50 @@ + + + + + + pymacros + + + + true + false + + false + + + python + + + +import sys +import os + +technology_macros_path = os.path.dirname(os.path.abspath(__file__)) +sys.path.insert(0, technology_macros_path) + +from cells import sky130 + +# Instantiate and register the library +sky130() + +print("## Sky130 PDK Pcells loaded.") +print(sys.path) + + + From b5364b3f673ceae1abe016273da3a365bf070ce8 Mon Sep 17 00:00:00 2001 From: RehabSayed-G Date: Thu, 14 Dec 2023 11:33:55 +0200 Subject: [PATCH 2/3] fixing pre-commit issues --- .../cells/klayout/pymacros/cells/__init__.py | 84 +- sky130/cells/klayout/pymacros/cells/bjt.py | 80 +- sky130/cells/klayout/pymacros/cells/cap.py | 155 +- sky130/cells/klayout/pymacros/cells/diode.py | 206 +- .../cells/klayout/pymacros/cells/draw_bjt.py | 45 +- .../cells/klayout/pymacros/cells/draw_cap.py | 65 +- .../klayout/pymacros/cells/draw_diode.py | 510 ++-- .../cells/klayout/pymacros/cells/draw_fet.py | 2200 ++++++++++++----- .../klayout/pymacros/cells/draw_guard_ring.py | 161 +- .../cells/klayout/pymacros/cells/draw_rf.py | 67 +- .../cells/klayout/pymacros/cells/draw_vpp.py | 23 +- sky130/cells/klayout/pymacros/cells/fet.py | 316 ++- ...fd_pr__cap_vpp_02p4x04p6_m1m2_noshield.cdl | 4 +- ..._02p7x06p1_m1m2m3m4_shieldl1_fingercap.cdl | 4 +- ..._02p7x11p1_m1m2m3m4_shieldl1_fingercap.cdl | 4 +- ..._02p7x21p1_m1m2m3m4_shieldl1_fingercap.cdl | 4 +- ..._02p7x41p1_m1m2m3m4_shieldl1_fingercap.cdl | 4 +- ...02p9x06p1_m1m2m3m4_shieldl1_fingercap2.cdl | 4 +- ...ap_vpp_03p9x03p9_m1m2_shieldl1_floatm3.cdl | 4 +- ..._pr__cap_vpp_04p4x04p6_l1m1m2_noshield.cdl | 4 +- ...pp_04p4x04p6_l1m1m2_noshield_o2subcell.cdl | 6 +- ..._vpp_04p4x04p6_l1m1m2_shieldpo_floatm3.cdl | 4 +- ...fd_pr__cap_vpp_04p4x04p6_m1m2_noshield.cdl | 4 +- ...pr__cap_vpp_04p4x04p6_m1m2_noshield_o2.cdl | 4 +- ...fd_pr__cap_vpp_04p4x04p6_m1m2_shieldl1.cdl | 4 +- ..._pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1.cdl | 4 +- ...pp_04p4x04p6_m1m2m3_shieldl1m5_floatm4.cdl | 4 +- ...4p4x04p6_m1m2m3_shieldl1m5_floatm4_top.cdl | 4 +- ..._05p9x05p9_m1m2m3m4_shieldl1_wafflecap.cdl | 4 +- ..._cap_vpp_06p8x06p1_l1m1m2m3_shieldpom4.cdl | 4 +- ..._vpp_06p8x06p1_l1m1m2m3_shieldpom4_top.cdl | 4 +- ...r__cap_vpp_06p8x06p1_m1m2m3_shieldl1m4.cdl | 4 +- ...ap_vpp_06p8x06p1_m1m2m3_shieldl1m4_top.cdl | 4 +- ..._pr__cap_vpp_08p6x07p8_l1m1m2_noshield.cdl | 4 +- ...pp_08p6x07p8_l1m1m2_noshield_o2subcell.cdl | 6 +- ..._vpp_08p6x07p8_l1m1m2_shieldpo_floatm3.cdl | 4 +- ...fd_pr__cap_vpp_08p6x07p8_m1m2_noshield.cdl | 4 +- ...fd_pr__cap_vpp_08p6x07p8_m1m2_shieldl1.cdl | 4 +- ..._pr__cap_vpp_08p6x07p8_m1m2m3_shieldl1.cdl | 4 +- ...pp_08p6x07p8_m1m2m3_shieldl1m5_floatm4.cdl | 4 +- ...8p6x07p8_m1m2m3_shieldl1m5_floatm4_top.cdl | 4 +- ..._11p3x11p3_m1m2m3m4_shieldl1_wafflecap.cdl | 4 +- ..._vpp_11p3x11p8_l1m1m2m3m4_shieldm5_nhv.cdl | 4 +- ...p_11p3x11p8_l1m1m2m3m4_shieldm5_nhvtop.cdl | 4 +- ..._pr__cap_vpp_11p5x11p7_l1m1m2_noshield.cdl | 4 +- ...r__cap_vpp_11p5x11p7_l1m1m2_shieldpom3.cdl | 4 +- ...r__cap_vpp_11p5x11p7_l1m1m2m3_shieldm4.cdl | 4 +- ...ap_vpp_11p5x11p7_l1m1m2m3_shieldm4_top.cdl | 4 +- ..._cap_vpp_11p5x11p7_l1m1m2m3_shieldpom4.cdl | 4 +- ..._vpp_11p5x11p7_l1m1m2m3_shieldpom4_top.cdl | 4 +- ..._cap_vpp_11p5x11p7_l1m1m2m3m4_shieldm5.cdl | 4 +- ..._vpp_11p5x11p7_l1m1m2m3m4_shieldm5_top.cdl | 4 +- ...ap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5.cdl | 4 +- ...pp_11p5x11p7_l1m1m2m3m4_shieldpom5_top.cdl | 4 +- ..._vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x.cdl | 4 +- ...vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x6.cdl | 4 +- ...vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x7.cdl | 4 +- ...vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x8.cdl | 4 +- ...vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x9.cdl | 4 +- ...p_11p5x11p7_l1m1m2m3m4_shieldpom5_xtop.cdl | 4 +- ...fd_pr__cap_vpp_11p5x11p7_m1m2_noshield.cdl | 4 +- ...fd_pr__cap_vpp_11p5x11p7_m1m2_shieldl1.cdl | 4 +- ..._pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1.cdl | 4 +- ...pp_11p5x11p7_m1m2m3_shieldl1m5_floatm4.cdl | 4 +- ...1p5x11p7_m1m2m3_shieldl1m5_floatm4_top.cdl | 4 +- ..._cap_vpp_11p5x11p7_m1m2m3m4_shieldl1m5.cdl | 4 +- ..._vpp_11p5x11p7_m1m2m3m4_shieldl1m5_top.cdl | 4 +- ...r__cap_vpp_11p5x11p7_m1m2m3m4_shieldm5.cdl | 4 +- ...fd_pr__cap_vpp_11p5x11p7_m1m4_noshield.cdl | 4 +- ..._vpp_11p5x11p7_pol1m1m2m3m4m5_noshield.cdl | 6 +- ..._vpp_11p5x23p1_pol1m1m2m3m4m5_noshield.cdl | 6 +- ..._vpp_22p5x11p7_pol1m1m2m3m4m5_noshield.cdl | 6 +- ..._vpp_22p5x23p1_pol1m1m2m3m4m5_noshield.cdl | 6 +- ..._vpp_33p6x11p7_pol1m1m2m3m4m5_noshield.cdl | 6 +- ..._vpp_33p6x23p1_pol1m1m2m3m4m5_noshield.cdl | 6 +- ..._vpp_44p7x11p7_pol1m1m2m3m4m5_noshield.cdl | 6 +- ..._vpp_44p7x23p1_pol1m1m2m3m4m5_noshield.cdl | 4 +- ..._vpp_55p8x11p7_pol1m1m2m3m4m5_noshield.cdl | 6 +- ...x11p7_pol1m1m2m3m4m5_noshield_m5pullin.cdl | 6 +- ..._vpp_55p8x23p1_pol1m1m2m3m4m5_noshield.cdl | 6 +- ...x23p1_pol1m1m2m3m4m5_noshield_m5pullin.cdl | 6 +- ...55p8x23p1_pol1m1m2m3m4m5_noshield_test.cdl | 6 +- .../cells/klayout/pymacros/cells/globals.py | 47 +- sky130/cells/klayout/pymacros/cells/gr.py | 69 +- .../klayout/pymacros/cells/layers_def.py | 105 +- .../klayout/pymacros/cells/parent_res.py | 52 +- .../klayout/pymacros/cells/res_diff_child.py | 32 +- .../pymacros/cells/res_diff_klayout_panel.py | 4 +- .../pymacros/cells/res_klayout_panel.py | 12 +- .../klayout/pymacros/cells/res_metal_child.py | 17 +- .../pymacros/cells/res_metal_klayout_panel.py | 4 +- .../klayout/pymacros/cells/res_poly_child.py | 158 +- .../pymacros/cells/res_poly_klayout_panel.py | 11 +- sky130/cells/klayout/pymacros/cells/rf.py | 114 +- .../klayout/pymacros/cells/via_generator.py | 782 +++--- sky130/cells/klayout/pymacros/cells/vias.py | 253 +- sky130/cells/klayout/pymacros/cells/vpp.py | 50 +- 97 files changed, 3686 insertions(+), 2244 deletions(-) diff --git a/sky130/cells/klayout/pymacros/cells/__init__.py b/sky130/cells/klayout/pymacros/cells/__init__.py index a6b2da74d..34a47f40a 100644 --- a/sky130/cells/klayout/pymacros/cells/__init__.py +++ b/sky130/cells/klayout/pymacros/cells/__init__.py @@ -1,38 +1,36 @@ - -# Copyright 2022 Skywater 130nm pdk development +# Copyright 2022 Skywater 130nm pdk development # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. -# +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. -# +# # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -#============================================================================ +# ============================================================================ # ---------------- Pcells Generators for Klayout of sky ---------------- -#============================================================================ +# ============================================================================ import pya + from cells.vias import vias_gen -from .fet import * -from .diode import * -from .bjt import * -from .vpp import * -from .rf import * -from .cap import * -from .gr import * -from .res_poly_klayout_panel import res_poly +from .bjt import npn_bjt, pnp_bjt +from .cap import cap_var, mim_cap +from .diode import n_diode, p_diode, photo_diode +from .fet import nfet, pfet +from .gr import guard_ring_gen from .res_diff_klayout_panel import res_diff from .res_metal_klayout_panel import res_metal - - +from .res_poly_klayout_panel import res_poly +from .rf import rf_bjt, rf_coils, rf_mosfet +from .vpp import cap_vpp # It's a Python class that inherits from the pya.Library class @@ -45,43 +43,45 @@ def __init__(self): # Set the description self.description = "sky130 Pcells" - # Create the PCell declarations + # Create the PCell declarations # MOS DEVICES self.layout().register_pcell("pfet", pfet()) self.layout().register_pcell("nfet", nfet()) # BJT - self.layout().register_pcell("npn_bjt", npn_bjt()) # npn_05v5_1p00x1p00, npn_05v5_1p00x2p00 , npn_11v0_1p00x1p00 - self.layout().register_pcell("pnp_bjt", pnp_bjt()) # pnp_05v5_0p68x0p68 , pnp_05v5_3p40x3p40 - - - # CAP Devices - self.layout().register_pcell("cap_vpp", cap_vpp()) # VPP devices - self.layout().register_pcell("cap_var", cap_var()) # varactor devices - self.layout().register_pcell("mim_cap", mim_cap()) # mim cap devices - + self.layout().register_pcell( + "npn_bjt", npn_bjt() + ) # npn_05v5_1p00x1p00, npn_05v5_1p00x2p00 , npn_11v0_1p00x1p00 + self.layout().register_pcell( + "pnp_bjt", pnp_bjt() + ) # pnp_05v5_0p68x0p68 , pnp_05v5_3p40x3p40 + + # CAP Devices + self.layout().register_pcell("cap_vpp", cap_vpp()) # VPP devices + self.layout().register_pcell("cap_var", cap_var()) # varactor devices + self.layout().register_pcell("mim_cap", mim_cap()) # mim cap devices # DIODE DEVICES self.layout().register_pcell("photodiode", photo_diode()) self.layout().register_pcell("n_diode", n_diode()) self.layout().register_pcell("p_diode", p_diode()) - - - # RF Devices - self.layout().register_pcell("rf_mosfet", rf_mosfet()) # rf mosfets - self.layout().register_pcell("rf_bjt", rf_bjt()) # rf bjt - self.layout().register_pcell("rf_coils", rf_coils()) # rf coils - - - # vias - self.layout().register_pcell("vias_gen", vias_gen()) # vias generator - self.layout().register_pcell("guard_ring_gen", guard_ring_gen()) # vias generator - - # Resistor - self.layout().register_pcell("res_diff", res_diff()) # Res diff generator - self.layout().register_pcell("res_poly", res_poly()) # Res poly generator - self.layout().register_pcell("res_metal", res_metal()) # Res metal generator + + # RF Devices + self.layout().register_pcell("rf_mosfet", rf_mosfet()) # rf mosfets + self.layout().register_pcell("rf_bjt", rf_bjt()) # rf bjt + self.layout().register_pcell("rf_coils", rf_coils()) # rf coils + + # vias + self.layout().register_pcell("vias_gen", vias_gen()) # vias generator + self.layout().register_pcell( + "guard_ring_gen", guard_ring_gen() + ) # vias generator + + # Resistor + self.layout().register_pcell("res_diff", res_diff()) # Res diff generator + self.layout().register_pcell("res_poly", res_poly()) # Res poly generator + self.layout().register_pcell("res_metal", res_metal()) # Res metal generator # Register us with the name "skywater130". self.register("skywater130") diff --git a/sky130/cells/klayout/pymacros/cells/bjt.py b/sky130/cells/klayout/pymacros/cells/bjt.py index fc0d7e818..f83986788 100644 --- a/sky130/cells/klayout/pymacros/cells/bjt.py +++ b/sky130/cells/klayout/pymacros/cells/bjt.py @@ -1,15 +1,15 @@ -# Copyright 2022 Skywater 130nm pdk development +# Copyright 2022 Skywater 130nm pdk development # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. -# +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. -# +# # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . @@ -19,9 +19,9 @@ import pya -from .draw_bjt import * -from .globals import * +from .draw_bjt import draw_npn, draw_pnp +from .globals import BJT_NPN_DEV, BJT_PNP_DEV class npn_bjt(pya.PCellDeclarationHelper): @@ -30,64 +30,82 @@ class npn_bjt(pya.PCellDeclarationHelper): """ def __init__(self): - # Important: initialize the super class - super(npn_bjt, self).__init__() + super().__init__() self.Type_handle = self.param("type", self.TypeList, "type") - - for i in BJT_NPN_DEV : + + for i in BJT_NPN_DEV: self.Type_handle.add_choice(i, i) - - - self.param("Model", self.TypeString, "Model", default="sky130_fd_pr__npn",readonly=True) + self.param( + "Model", + self.TypeString, + "Model", + default="sky130_fd_pr__npn", + readonly=True, + ) def display_text_impl(self): # Provide a descriptive text for the cell return str(self.type) - - def produce_impl(self): + def produce_impl(self): # This is the main part of the implementation: create the layout - self.percision = 1/self.layout.dbu - #self.cell.flatten(1) - npn_instance = draw_npn(layout=self.layout,device_name=self.type) - write_cells = pya.CellInstArray(npn_instance.cell_index(), pya.Trans(pya.Point(0, 0)), - pya.Vector(0, 0), pya.Vector(0, 0),1 , 1) + self.percision = 1 / self.layout.dbu + # self.cell.flatten(1) + npn_instance = draw_npn(layout=self.layout, device_name=self.type) + write_cells = pya.CellInstArray( + npn_instance.cell_index(), + pya.Trans(pya.Point(0, 0)), + pya.Vector(0, 0), + pya.Vector(0, 0), + 1, + 1, + ) self.cell.flatten(1) self.cell.insert(write_cells) self.layout.cleanup() - + + class pnp_bjt(pya.PCellDeclarationHelper): """ PNP BJT Generator for Skywater130 """ def __init__(self): - # Important: initialize the super class - super(pnp_bjt, self).__init__() + super().__init__() self.Type_handle = self.param("Type", self.TypeList, "Type") - for i in BJT_PNP_DEV : + for i in BJT_PNP_DEV: self.Type_handle.add_choice(i, i) - - self.param("Model", self.TypeString, "Model", default="sky130_fd_pr__pnp",readonly=True) + self.param( + "Model", + self.TypeString, + "Model", + default="sky130_fd_pr__pnp", + readonly=True, + ) def display_text_impl(self): # Provide a descriptive text for the cell return str(self.Type) - - def produce_impl(self): + def produce_impl(self): # This is the main part of the implementation: create the layout - self.percision = 1/self.layout.dbu - pnp_instance = draw_pnp(layout=self.layout,device_name=self.Type) - write_cells = pya.CellInstArray(pnp_instance.cell_index(), pya.Trans(pya.Point(0, 0)), - pya.Vector(0, 0), pya.Vector(0, 0),1 , 1) + self.percision = 1 / self.layout.dbu + pnp_instance = draw_pnp(layout=self.layout, device_name=self.Type) + write_cells = pya.CellInstArray( + pnp_instance.cell_index(), + pya.Trans(pya.Point(0, 0)), + pya.Vector(0, 0), + pya.Vector(0, 0), + 1, + 1, + ) self.cell.flatten(1) self.cell.insert(write_cells) diff --git a/sky130/cells/klayout/pymacros/cells/cap.py b/sky130/cells/klayout/pymacros/cells/cap.py index a929d6721..1757b202b 100644 --- a/sky130/cells/klayout/pymacros/cells/cap.py +++ b/sky130/cells/klayout/pymacros/cells/cap.py @@ -1,15 +1,15 @@ -# Copyright 2022 Skywater 130nm pdk development +# Copyright 2022 Skywater 130nm pdk development # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. -# +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. -# +# # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . @@ -20,16 +20,15 @@ import pya -from .draw_cap import * -from .globals import * +from .draw_cap import draw_cap_var, draw_mim_cap - -l_min = 0.18 +l_min = 0.18 w_min = 1 -grw_min = 0.17 +grw_min = 0.17 + +l_mim = 2 +l_mim2 = 2.16 -l_mim = 2 -l_mim2 = 2.16 class cap_var(pya.PCellDeclarationHelper): """ @@ -38,52 +37,56 @@ class cap_var(pya.PCellDeclarationHelper): def __init__(self): # Initialize super class. - super(cap_var, self).__init__() + super().__init__() - #===================== PARAMETERS DECLARATIONS ===================== + # ===================== PARAMETERS DECLARATIONS ===================== - self.Type_handle = self.param("type", self.TypeList, "Device Type") - self.Type_handle.add_choice("sky130_fd_pr__cap_var_lvt","sky130_fd_pr__cap_var_lvt") - self.Type_handle.add_choice("sky130_fd_pr__cap_var_hvt","sky130_fd_pr__cap_var_hvt") - + self.Type_handle = self.param("type", self.TypeList, "Device Type") + self.Type_handle.add_choice( + "sky130_fd_pr__cap_var_lvt", "sky130_fd_pr__cap_var_lvt" + ) + self.Type_handle.add_choice( + "sky130_fd_pr__cap_var_hvt", "sky130_fd_pr__cap_var_hvt" + ) self.param("l", self.TypeDouble, "length", default=l_min, unit="um") self.param("w", self.TypeDouble, "width", default=w_min, unit="um") self.param("tap_con_col", self.TypeInt, "tap Contacts Columns", default=1) self.param("gr", self.TypeBoolean, "Gaurd Ring", default=0) - self.param("grw", self.TypeDouble, "Gaurd Ring Width", default=grw_min, unit="um") + self.param( + "grw", self.TypeDouble, "Gaurd Ring Width", default=grw_min, unit="um" + ) self.param("nf", self.TypeDouble, "Number of Fingers", default=1) - #self.param("n", self.TypeDouble, "instance number", default=1) + # self.param("n", self.TypeDouble, "instance number", default=1) - self.param("area", self.TypeDouble,"Area", readonly=True, unit="um^2") - self.param("perim", self.TypeDouble,"Perimeter", readonly=True, unit="um") - self.param("cap_value", self.TypeDouble,"Cap Value", readonly=True, unit="fF") + self.param("area", self.TypeDouble, "Area", readonly=True, unit="um^2") + self.param("perim", self.TypeDouble, "Perimeter", readonly=True, unit="um") + self.param("cap_value", self.TypeDouble, "Cap Value", readonly=True, unit="fF") - def display_text_impl(self): # Provide a descriptive text for the cell - return "Varactor(L=" + ('%.3f' % self.l) + ",W=" + ('%.3f' % self.w) + ")" - + return "Varactor(L=" + ("%.3f" % self.l) + ",W=" + ("%.3f" % self.w) + ")" + def coerce_parameters_impl(self): # We employ coerce_parameters_impl to decide whether the handle or the # numeric parameter has changed (by comparing against the effective # radius ru) and set ru to the effective radius. We also update the # numerical value or the shape, depending on which on has not changed. - self.area = self.w * self.l - self.perim = 2*(self.w + self.l) - self.cap_value = 4.4* self.area + self.area = self.w * self.l + self.perim = 2 * (self.w + self.l) + self.cap_value = 4.4 * self.area + + if self.l < l_min: + self.l = l_min - if self.l < l_min : - self.l = l_min - if self.w < w_min: self.w = w_min - + if self.grw < grw_min: self.grw = grw_min - + def can_create_from_shape_impl(self): # Implement the "Create PCell from shape" protocol: we can use any shape which # has a finite bounding box @@ -99,11 +102,26 @@ def transformation_from_shape_impl(self): # Implement the "Create PCell from shape" protocol: we use the center of the shape's # bounding box to determine the transformation return pya.Trans(self.shape.bbox().center()) - + def produce_impl(self): - instance = draw_cap_var(layout= self.layout , l=self.l, w=self.w, type=self.type,tap_con_col=self.tap_con_col, gr= self.gr , grw= self.grw, nf=self.nf) - write_cells = pya.CellInstArray(instance.cell_index(), pya.Trans(pya.Point(0, 0)), - pya.Vector(0, 0), pya.Vector(0, 0), 1, 1) + instance = draw_cap_var( + layout=self.layout, + l_c=self.l, + w=self.w, + type=self.type, + tap_con_col=self.tap_con_col, + gr=self.gr, + grw=self.grw, + nf=self.nf, + ) + write_cells = pya.CellInstArray( + instance.cell_index(), + pya.Trans(pya.Point(0, 0)), + pya.Vector(0, 0), + pya.Vector(0, 0), + 1, + 1, + ) self.cell.insert(write_cells) self.cell.flatten(1) @@ -115,50 +133,53 @@ class mim_cap(pya.PCellDeclarationHelper): def __init__(self): # Initialize super class. - super(mim_cap, self).__init__() + super().__init__() - #===================== PARAMETERS DECLARATIONS ===================== + # ===================== PARAMETERS DECLARATIONS ===================== - self.Type_handle = self.param("type", self.TypeList, "Device Type") - self.Type_handle.add_choice("sky130_fd_pr__model__cap_mim","sky130_fd_pr__model__cap_mim") - self.Type_handle.add_choice("sky130_fd_pr__model__cap_mim_m4","sky130_fd_pr__model__cap_mim_m4") - + self.Type_handle = self.param("type", self.TypeList, "Device Type") + self.Type_handle.add_choice( + "sky130_fd_pr__model__cap_mim", "sky130_fd_pr__model__cap_mim" + ) + self.Type_handle.add_choice( + "sky130_fd_pr__model__cap_mim_m4", "sky130_fd_pr__model__cap_mim_m4" + ) self.param("l", self.TypeDouble, "length", default=l_mim, unit="um") self.param("w", self.TypeDouble, "width", default=l_mim, unit="um") - - #self.param("n", self.TypeInt, "instance number", default=1) - self.param("area", self.TypeDouble,"Area", readonly=True, unit="um^2") - self.param("perim", self.TypeDouble,"Perimeter", readonly=True, unit="um") - self.param("cap_value", self.TypeDouble,"Cap Value", readonly=True, unit="fF") + # self.param("n", self.TypeInt, "instance number", default=1) + + self.param("area", self.TypeDouble, "Area", readonly=True, unit="um^2") + self.param("perim", self.TypeDouble, "Perimeter", readonly=True, unit="um") + self.param("cap_value", self.TypeDouble, "Cap Value", readonly=True, unit="fF") def display_text_impl(self): # Provide a descriptive text for the cell - return "mimcap(L=" + ('%.3f' % self.l) + ",W=" + ('%.3f' % self.w) + ")" + return "mimcap(L=" + ("%.3f" % self.l) + ",W=" + ("%.3f" % self.w) + ")" def coerce_parameters_impl(self): # We employ coerce_parameters_impl to decide whether the handle or the # numeric parameter has changed (by comparing against the effective # radius ru) and set ru to the effective radius. We also update the # numerical value or the shape, depending on which on has not changed. - self.area = self.w * self.l - self.perim = 2*(self.w + self.l) - self.cap_value = 2*self.area + self.area = self.w * self.l + self.perim = 2 * (self.w + self.l) + self.cap_value = 2 * self.area if self.type == "sky130_fd_pr__model__cap_mim_m4": - if self.l < l_mim2 : - self.l = l_mim2 - + if self.l < l_mim2: + self.l = l_mim2 + if self.w < l_mim2: self.w = l_mim2 - else : - if self.l < l_mim : - self.l = l_mim - + else: + if self.l < l_mim: + self.l = l_mim + if self.w < l_mim: self.w = l_mim - + def can_create_from_shape_impl(self): # Implement the "Create PCell from shape" protocol: we can use any shape which # has a finite bounding box @@ -174,10 +195,18 @@ def transformation_from_shape_impl(self): # Implement the "Create PCell from shape" protocol: we use the center of the shape's # bounding box to determine the transformation return pya.Trans(self.shape.bbox().center()) - + def produce_impl(self): - instance = draw_mim_cap(layout= self.layout , l=self.l, w=self.w, type=self.type) - write_cells = pya.CellInstArray(instance.cell_index(), pya.Trans(pya.Point(0, 0)), - pya.Vector(0, 0), pya.Vector(0, 0), 1, 1) + instance = draw_mim_cap( + layout=self.layout, l_c=self.l, w=self.w, type=self.type + ) + write_cells = pya.CellInstArray( + instance.cell_index(), + pya.Trans(pya.Point(0, 0)), + pya.Vector(0, 0), + pya.Vector(0, 0), + 1, + 1, + ) self.cell.insert(write_cells) self.cell.flatten(1) diff --git a/sky130/cells/klayout/pymacros/cells/diode.py b/sky130/cells/klayout/pymacros/cells/diode.py index 6db22965d..522ddba1c 100644 --- a/sky130/cells/klayout/pymacros/cells/diode.py +++ b/sky130/cells/klayout/pymacros/cells/diode.py @@ -1,15 +1,15 @@ -# Copyright 2022 Skywater 130nm pdk development +# Copyright 2022 Skywater 130nm pdk development # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. -# +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. -# +# # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . @@ -20,8 +20,8 @@ import pya -from .draw_diode import * -from .globals import * +from .draw_diode import draw_diode, draw_photodiode +from .globals import PHOTO_D_DEV class photo_diode(pya.PCellDeclarationHelper): @@ -30,38 +30,49 @@ class photo_diode(pya.PCellDeclarationHelper): """ def __init__(self): - # Important: initialize the super class - super(photo_diode, self).__init__() + super().__init__() self.Type_handle = self.param("Type", self.TypeList, "Type") - - for i in PHOTO_D_DEV : + + for i in PHOTO_D_DEV: self.Type_handle.add_choice(i, i) - - - self.param("Model", self.TypeString, "Model", default="sky130_fd_pr__photodiode",readonly=True) + + self.param( + "Model", + self.TypeString, + "Model", + default="sky130_fd_pr__photodiode", + readonly=True, + ) def display_text_impl(self): # Provide a descriptive text for the cell return str(self.Type) - - def produce_impl(self): + def produce_impl(self): # This is the main part of the implementation: create the layout - self.percision = 1/self.layout.dbu - ph_d_instance = draw_photodiode(layout=self.layout,device_name=self.Type) - - write_cells = pya.CellInstArray(ph_d_instance.cell_index(), pya.Trans(pya.Point(0, 0)), - pya.Vector(0, 0), pya.Vector(0, 0),1 , 1) + self.percision = 1 / self.layout.dbu + ph_d_instance = draw_photodiode(layout=self.layout, device_name=self.Type) + + write_cells = pya.CellInstArray( + ph_d_instance.cell_index(), + pya.Trans(pya.Point(0, 0)), + pya.Vector(0, 0), + pya.Vector(0, 0), + 1, + 1, + ) self.cell.flatten(1) self.cell.insert(write_cells) - + self.layout.cleanup() + d_min = 0.45 grw_min = 0.17 + class n_diode(pya.PCellDeclarationHelper): """ N-Diode Generator for Skywater130 @@ -69,46 +80,56 @@ class n_diode(pya.PCellDeclarationHelper): def __init__(self): # Initialize super class. - super(n_diode, self).__init__() - - #===================== PARAMETERS DECLARATIONS ===================== - - self.Type_handle = self.param("type", self.TypeList, "Device Type") - self.Type_handle.add_choice("sky130_fd_pr__diode_pw2nd_05v5", "sky130_fd_pr__diode_pw2nd_05v5") - self.Type_handle.add_choice("sky130_fd_pr__diode_pw2nd_05v5_lvt", "sky130_fd_pr__diode_pw2nd_05v5_lvt") - self.Type_handle.add_choice("sky130_fd_pr__diode_pw2nd_05v5_nvt", "sky130_fd_pr__diode_pw2nd_05v5_nvt") - self.Type_handle.add_choice("sky130_fd_pr__diode_pw2nd_11v0", "sky130_fd_pr__diode_pw2nd_11v0") + super().__init__() + + # ===================== PARAMETERS DECLARATIONS ===================== + + self.Type_handle = self.param("type", self.TypeList, "Device Type") + self.Type_handle.add_choice( + "sky130_fd_pr__diode_pw2nd_05v5", "sky130_fd_pr__diode_pw2nd_05v5" + ) + self.Type_handle.add_choice( + "sky130_fd_pr__diode_pw2nd_05v5_lvt", "sky130_fd_pr__diode_pw2nd_05v5_lvt" + ) + self.Type_handle.add_choice( + "sky130_fd_pr__diode_pw2nd_05v5_nvt", "sky130_fd_pr__diode_pw2nd_05v5_nvt" + ) + self.Type_handle.add_choice( + "sky130_fd_pr__diode_pw2nd_11v0", "sky130_fd_pr__diode_pw2nd_11v0" + ) self.param("w", self.TypeDouble, "width", default=d_min, unit="um") self.param("l", self.TypeDouble, "length", default=d_min, unit="um") - self.param("cath_w", self.TypeDouble, "Cathode Width", default=grw_min, unit="um") + self.param( + "cath_w", self.TypeDouble, "Cathode Width", default=grw_min, unit="um" + ) - self.param("area", self.TypeDouble,"Area", readonly=True, unit="um^2") - self.param("perim", self.TypeDouble,"Perimeter", readonly=True, unit="um") + self.param("area", self.TypeDouble, "Area", readonly=True, unit="um^2") + self.param("perim", self.TypeDouble, "Perimeter", readonly=True, unit="um") - #self.param("n", self.TypeInt, "n", default=1) + # self.param("n", self.TypeInt, "n", default=1) def display_text_impl(self): # Provide a descriptive text for the cell - return "n_diode(L=" + ('%.3f' % self.l) + ",W=" + ('%.3f' % self.w) + ")" - + return "n_diode(L=" + ("%.3f" % self.l) + ",W=" + ("%.3f" % self.w) + ")" + def coerce_parameters_impl(self): # We employ coerce_parameters_impl to decide whether the handle or the # numeric parameter has changed (by comparing against the effective # radius ru) and set ru to the effective radius. We also update the # numerical value or the shape, depending on which on has not changed. - self.area = self.w * self.l - self.perim = 2*(self.w + self.l) + self.area = self.w * self.l + self.perim = 2 * (self.w + self.l) - if self.l < d_min : + if self.l < d_min: self.l = d_min - - if self.w < d_min : + + if self.w < d_min: self.w = d_min - + if self.cath_w < grw_min: self.cath_w = grw_min - + def can_create_from_shape_impl(self): # Implement the "Create PCell from shape" protocol: we can use any shape which # has a finite bounding box @@ -124,11 +145,24 @@ def transformation_from_shape_impl(self): # Implement the "Create PCell from shape" protocol: we use the center of the shape's # bounding box to determine the transformation return pya.Trans(self.shape.bbox().center()) - + def produce_impl(self): - instance = draw_diode(layout= self.layout ,d_type="n", l=self.l, w=self.w, type=self.type,cath_w=self.cath_w) - write_cells = pya.CellInstArray(instance.cell_index(), pya.Trans(pya.Point(0, 0)), - pya.Vector(0, 0), pya.Vector(0, 0), 1, 1) + instance = draw_diode( + layout=self.layout, + d_type="n", + l_d=self.l, + w=self.w, + type=self.type, + cath_w=self.cath_w, + ) + write_cells = pya.CellInstArray( + instance.cell_index(), + pya.Trans(pya.Point(0, 0)), + pya.Vector(0, 0), + pya.Vector(0, 0), + 1, + 1, + ) self.cell.insert(write_cells) self.cell.flatten(1) @@ -140,50 +174,62 @@ class p_diode(pya.PCellDeclarationHelper): def __init__(self): # Initialize super class. - super(p_diode, self).__init__() + super().__init__() + + # ===================== PARAMETERS DECLARATIONS ===================== + + self.Type_handle = self.param("type", self.TypeList, "Device Type") + self.Type_handle.add_choice( + "sky130_fd_pr__diode_pd2nw_05v5", "sky130_fd_pr__diode_pd2nw_05v5" + ) + self.Type_handle.add_choice( + "sky130_fd_pr__diode_pd2nw_05v5_lvt", "sky130_fd_pr__diode_pd2nw_05v5_lvt" + ) + self.Type_handle.add_choice( + "sky130_fd_pr__diode_pd2nw_05v5_hvt", "sky130_fd_pr__diode_pd2nw_05v5_hvt" + ) + self.Type_handle.add_choice( + "sky130_fd_pr__diode_pd2nw_11v0", "sky130_fd_pr__diode_pd2nw_11v0" + ) - #===================== PARAMETERS DECLARATIONS ===================== - - self.Type_handle = self.param("type", self.TypeList, "Device Type") - self.Type_handle.add_choice("sky130_fd_pr__diode_pd2nw_05v5", "sky130_fd_pr__diode_pd2nw_05v5") - self.Type_handle.add_choice("sky130_fd_pr__diode_pd2nw_05v5_lvt", "sky130_fd_pr__diode_pd2nw_05v5_lvt") - self.Type_handle.add_choice("sky130_fd_pr__diode_pd2nw_05v5_hvt", "sky130_fd_pr__diode_pd2nw_05v5_hvt") - self.Type_handle.add_choice("sky130_fd_pr__diode_pd2nw_11v0", "sky130_fd_pr__diode_pd2nw_11v0") - self.param("w", self.TypeDouble, "width", default=d_min, unit="um") self.param("l", self.TypeDouble, "length", default=d_min, unit="um") - self.param("cath_w", self.TypeDouble, "Cathode width", default=grw_min, unit="um") - self.param("grw", self.TypeDouble, "Gaurd Ring width", default=grw_min, unit="um") + self.param( + "cath_w", self.TypeDouble, "Cathode width", default=grw_min, unit="um" + ) + self.param( + "grw", self.TypeDouble, "Gaurd Ring width", default=grw_min, unit="um" + ) - self.param("area", self.TypeDouble,"Area", readonly=True, unit="um^2") - self.param("perim", self.TypeDouble,"Perimeter", readonly=True, unit="um") + self.param("area", self.TypeDouble, "Area", readonly=True, unit="um^2") + self.param("perim", self.TypeDouble, "Perimeter", readonly=True, unit="um") - #self.param("n", self.TypeInt, "n", default=1) + # self.param("n", self.TypeInt, "n", default=1) def display_text_impl(self): # Provide a descriptive text for the cell - return "p_diode(L=" + ('%.3f' % self.l) + ",W=" + ('%.3f' % self.w) + ")" - + return "p_diode(L=" + ("%.3f" % self.l) + ",W=" + ("%.3f" % self.w) + ")" + def coerce_parameters_impl(self): # We employ coerce_parameters_impl to decide whether the handle or the # numeric parameter has changed (by comparing against the effective # radius ru) and set ru to the effective radius. We also update the # numerical value or the shape, depending on which on has not changed. - self.area = self.w * self.l - self.perim = 2*(self.w + self.l) + self.area = self.w * self.l + self.perim = 2 * (self.w + self.l) - if self.l < d_min : + if self.l < d_min: self.l = d_min - - if self.w < d_min : + + if self.w < d_min: self.w = d_min - + if self.grw < grw_min: self.grw = grw_min if self.cath_w < grw_min: self.cath_w = grw_min - + def can_create_from_shape_impl(self): # Implement the "Create PCell from shape" protocol: we can use any shape which # has a finite bounding box @@ -199,10 +245,24 @@ def transformation_from_shape_impl(self): # Implement the "Create PCell from shape" protocol: we use the center of the shape's # bounding box to determine the transformation return pya.Trans(self.shape.bbox().center()) - + def produce_impl(self): - instance = draw_diode(layout= self.layout ,d_type="p", l=self.l, w=self.w, type=self.type,grw=self.grw, cath_w=self.cath_w) - write_cells = pya.CellInstArray(instance.cell_index(), pya.Trans(pya.Point(0, 0)), - pya.Vector(0, 0), pya.Vector(0, 0), 1, 1) + instance = draw_diode( + layout=self.layout, + d_type="p", + l_d=self.l, + w=self.w, + type=self.type, + grw=self.grw, + cath_w=self.cath_w, + ) + write_cells = pya.CellInstArray( + instance.cell_index(), + pya.Trans(pya.Point(0, 0)), + pya.Vector(0, 0), + pya.Vector(0, 0), + 1, + 1, + ) self.cell.insert(write_cells) self.cell.flatten(1) diff --git a/sky130/cells/klayout/pymacros/cells/draw_bjt.py b/sky130/cells/klayout/pymacros/cells/draw_bjt.py index fb72fb8e6..23955898e 100644 --- a/sky130/cells/klayout/pymacros/cells/draw_bjt.py +++ b/sky130/cells/klayout/pymacros/cells/draw_bjt.py @@ -1,16 +1,15 @@ - -# Copyright 2022 Skywater 130nm pdk development +# Copyright 2022 Skywater 130nm pdk development # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. -# +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. -# +# # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . @@ -19,48 +18,40 @@ ######################################################################################################################## -import pya import os -from .globals import * -import gdsfactory as gf +from .globals import BJT_NPN_DEV, BJT_PNP_DEV -gds_p_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),"fixed_devices/bjt" )# parent file path +gds_p_path = os.path.join( + os.path.dirname(os.path.abspath(__file__)), "fixed_devices/bjt" +) # parent file path def draw_npn(layout, device_name): - - ''' - drawing NPN devices - ''' + """ + drawing NPN devices + """ gds_path = f"{gds_p_path}/npn" - if device_name in BJT_NPN_DEV : + if device_name in BJT_NPN_DEV: layout.read(f"{gds_path}/{device_name}.gds") - cell_name = device_name - else : + cell_name = device_name + else: cell_name = device_name - - return layout.cell(cell_name) - def draw_pnp(layout, device_name): - - ''' + """ drawing PNP devices - ''' + """ gds_path = f"{gds_p_path}/pnp" - - if device_name in BJT_PNP_DEV : + + if device_name in BJT_PNP_DEV: layout.read(f"{gds_path}/{device_name}.gds") cell_name = device_name - else : + else: cell_name = device_name - return layout.cell(cell_name) - - diff --git a/sky130/cells/klayout/pymacros/cells/draw_cap.py b/sky130/cells/klayout/pymacros/cells/draw_cap.py index 4d85a6f23..46d982f49 100644 --- a/sky130/cells/klayout/pymacros/cells/draw_cap.py +++ b/sky130/cells/klayout/pymacros/cells/draw_cap.py @@ -1,26 +1,41 @@ import gdsfactory as gf -from .via_generator import * -from .layers_def import * +from .layers_def import ( + cap2m_layer, + capm_layer, + hvtp_layer, + li_layer, + licon_layer, + m3_layer, + m4_layer, + m5_layer, + nsdm_layer, + nwell_layer, + poly_layer, + psdm_layer, + tap_layer, + via3_layer, + via4_layer, +) +from .via_generator import via_generator, via_stack def draw_cap_var( layout, type="sky130_fd_pr__cap_var_lvt", - l: float = 0.18, + l_c: float = 0.18, w: float = 1, tap_con_col: int = 1, gr: int = 1, grw: float = 0.17, nf: int = 1, ): - """ Retern varactor Args: layout : layout object - l : float of gate length + l_c : float of gate length w : float of gate width tap_con_col : int of tap contacts columns gr : boolaen of having guard ring @@ -58,7 +73,7 @@ def draw_cap_var( tap_w = gate_con_spacing + tap_con tap = c_inst.add_ref( - gf.components.rectangle(size=(l + 2 * tap_w, w), layer=tap_layer) + gf.components.rectangle(size=(l_c + 2 * tap_w, w), layer=tap_layer) ) # adding nsdm @@ -80,18 +95,21 @@ def draw_cap_var( metal_level=1, ) c_inst.add_array( - component=tap_con, columns=2, rows=1, spacing=(tap_w + l + gate_con_spacing, 0) + component=tap_con, + columns=2, + rows=1, + spacing=(tap_w + l_c + gate_con_spacing, 0), ) poly = c_inst.add_ref( - gf.components.rectangle(size=(l, w + 2 * end_cap), layer=poly_layer) + gf.components.rectangle(size=(l_c, w + 2 * end_cap), layer=poly_layer) ) poly.move((tap_w, -end_cap)) - if l < (con_size[0] + 2 * con_enc[0]): + if l_c < (con_size[0] + 2 * con_enc[0]): pc_x = con_size[0] + 2 * con_enc[0] else: - pc_x = l + pc_x = l_c pc_y = con_size[1] + 2 * con_enc[1] @@ -111,7 +129,7 @@ def draw_cap_var( pc = c_inst.add_array( component=c_pc, rows=2, columns=1, spacing=(0, pc_y + w + 2 * end_cap) ) - pc.move((tap_w - ((pc_x - l) / 2), -pc_y - end_cap)) + pc.move((tap_w - ((pc_x - l_c) / 2), -pc_y - end_cap)) # adding nwell nwell = c_inst.add_ref( @@ -154,11 +172,11 @@ def draw_cap_var( ) ) g_r_out.move((g_r_in.xmin - grw, g_r_in.ymin - grw)) - g_r = c.add_ref( + c.add_ref( gf.geometry.boolean(A=g_r_out, B=g_r_in, operation="A-B", layer=tap_layer) ) - g_r_li = c.add_ref( + c.add_ref( gf.geometry.boolean(A=g_r_out, B=g_r_in, operation="A-B", layer=li_layer) ) @@ -183,7 +201,7 @@ def draw_cap_var( ) g_psdm_out.move((g_r_out.xmin - tap_nsdm_enc, g_r_out.ymin - tap_nsdm_enc)) - g_psdm = c.add_ref( + c.add_ref( gf.geometry.boolean( A=g_psdm_out, B=g_psdm_in, operation="A-B", layer=psdm_layer ) @@ -194,7 +212,7 @@ def draw_cap_var( else: g_con_range = (g_r_out.ymin, g_r_out.ymax) - g_licon_u = c.add_ref( + c.add_ref( via_generator( x_range=(g_r_in.xmin + 0.17, g_r_in.xmax - 0.17), y_range=(g_r_in.ymax, g_r_out.ymax), @@ -205,7 +223,7 @@ def draw_cap_var( ) ) - g_licon_d = c.add_ref( + c.add_ref( via_generator( x_range=(g_r_in.xmin + 0.17, g_r_in.xmax - 0.17), y_range=(g_r_out.ymin, g_r_in.ymin), @@ -216,7 +234,7 @@ def draw_cap_var( ) ) - g_licon_l = c.add_ref( + c.add_ref( via_generator( x_range=(g_r_out.xmin, g_r_in.xmin), y_range=g_con_range, @@ -227,7 +245,7 @@ def draw_cap_var( ) ) - g_licon_r = c.add_ref( + c.add_ref( via_generator( x_range=(g_r_in.xmax, g_r_out.xmax), y_range=g_con_range, @@ -241,7 +259,7 @@ def draw_cap_var( if type == "sky130_fd_pr__cap_var_hvt": hvtp = c_inst.add_ref( gf.components.rectangle( - size=(l + 2 * hv_enc, w + 2 * hv_enc), layer=hvtp_layer + size=(l_c + 2 * hv_enc, w + 2 * hv_enc), layer=hvtp_layer ) ) hvtp.move((poly.xmin - hv_enc, tap.ymin - hv_enc)) @@ -256,16 +274,15 @@ def draw_cap_var( def draw_mim_cap( layout, type="sky130_fd_pr__model__cap_mim", - l: float = 2, + l_c: float = 2, w: float = 2, ): - """ Retern mim cap Args: layout : layout object - l : float of capm length + l_c : float of capm length w : float of capm width @@ -277,7 +294,6 @@ def draw_mim_cap( bottom_layer = m3_layer upper_layer = m4_layer - lbl = m4_lbl via_layer = via3_layer via_size = (0.2, 0.2) via_enc = (0.09, 0.065) @@ -291,7 +307,6 @@ def draw_mim_cap( if type == "sky130_fd_pr__model__cap_mim_m4": bottom_layer = m4_layer upper_layer = m5_layer - lbl = m5_lbl via_layer = via4_layer via_size = (0.8, 0.8) via_enc = (0.31, 0.31) @@ -305,7 +320,7 @@ def draw_mim_cap( side_enc = (0.02, 0.06) # drawing cap identifier and bottom , upper layers - cap = c.add_ref(gf.components.rectangle(size=(w, l), layer=cap_layer)) + cap = c.add_ref(gf.components.rectangle(size=(w, l_c), layer=cap_layer)) m_up1 = c.add_ref( gf.components.rectangle( diff --git a/sky130/cells/klayout/pymacros/cells/draw_diode.py b/sky130/cells/klayout/pymacros/cells/draw_diode.py index 5afa5f6f1..47b5f6d5c 100644 --- a/sky130/cells/klayout/pymacros/cells/draw_diode.py +++ b/sky130/cells/klayout/pymacros/cells/draw_diode.py @@ -1,15 +1,15 @@ -# Copyright 2022 Skywater 130nm pdk development +# Copyright 2022 Skywater 130nm pdk development # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. -# +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. -# +# # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . @@ -20,83 +20,93 @@ import os -from .via_generator import * -from .globals import * -from .layers_def import * import gdsfactory as gf - -gds_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),"fixed_devices/photodiode" ) # parent file path +from .globals import PHOTO_D_DEV +from .layers_def import ( + areaid_dio_layer, + diff_layer, + hvi_layer, + hvntm_layer, + hvtp_layer, + li_layer, + licon_layer, + lvtn_layer, + m1_layer, + mcon_layer, + nsdm_layer, + nwell_layer, + psdm_layer, + tap_layer, +) +from .via_generator import via_generator + +gds_path = os.path.join( + os.path.dirname(os.path.abspath(__file__)), "fixed_devices/photodiode" +) # parent file path def draw_photodiode(layout, device_name): + """ + drawing photo diode device + """ - ''' - drawing photo diode device - ''' - - if device_name in PHOTO_D_DEV : + if device_name in PHOTO_D_DEV: layout.read(f"{gds_path}/{device_name}.gds") cell_name = device_name - else : - cell_name = device_name + else: + cell_name = device_name return layout.cell(cell_name) -def draw_diode ( - layout , - d_type = "n", - w : float = 0.45, - l: float = 0.45, - type = "sky130_fd_pr__diode_pw2nd_05v5", - cath_w : float = 0.17, - grw : float = 0.17, -) : - - ''' - Retern diode - - Args: - layout : layout object + +def draw_diode( + layout, + d_type="n", + w: float = 0.45, + l_d: float = 0.45, + type="sky130_fd_pr__diode_pw2nd_05v5", + cath_w: float = 0.17, + grw: float = 0.17, +): + """ + Retern diode + + Args: + layout : layout object d_type : string of the diode type [n,p] w : float of the diode width - l: float of the diode length + l_d: float of the diode length type : string of the device type cath_w : float of cathode width in case of p_diode - grw : float of the gaurd ring width + grw : float of the gaurd ring width - ''' + """ c = gf.Component("sky_diode_dev") c_inst = gf.Component("dev inst") - - # used dimensions and layers + # used dimensions and layers npsd_enc = 0.125 - diff_tap_spacing : float = 0.37 - - - - con_size = (0.17,0.17) - con_spacing = (0.19,0.19) - d_con_enc = (0.06,0.06) - t_con_enc = (0.12,0.12) + diff_tap_spacing: float = 0.37 + con_size = (0.17, 0.17) + con_spacing = (0.19, 0.19) + d_con_enc = (0.06, 0.06) + t_con_enc = (0.12, 0.12) li_enc = 0.08 m1_enc = 0.03 con_layer = [licon_layer, mcon_layer] - lvt_enc : float = 0.18 + lvt_enc: float = 0.18 - hv_enc = 0.185 + hv_enc = 0.185 - nwell_enc = 0.185 - - + nwell_enc = 0.185 if d_type == "n": d_npsd_layer = nsdm_layer @@ -104,136 +114,342 @@ def draw_diode ( elif d_type == "p": d_npsd_layer = psdm_layer t_npsd_layer = nsdm_layer - - # generating diff and areaid_diode and its contacts - diff = c_inst.add_ref(gf.components.rectangle(size=(w,l),layer=diff_layer)) - diode = c_inst.add_ref(gf.components.rectangle(size=(w,l),layer=areaid_dio_layer)) + # generating diff and areaid_diode and its contacts + c_inst.add_ref(gf.components.rectangle(size=(w, l_d), layer=diff_layer)) + diode = c_inst.add_ref( + gf.components.rectangle(size=(w, l_d), layer=areaid_dio_layer) + ) - d_npsd = c_inst.add_ref(gf.components.rectangle(size=(w+ 2*npsd_enc, l+ 2*npsd_enc),layer=d_npsd_layer)) - d_npsd.move((-npsd_enc,-npsd_enc)) + d_npsd = c_inst.add_ref( + gf.components.rectangle( + size=(w + 2 * npsd_enc, l_d + 2 * npsd_enc), layer=d_npsd_layer + ) + ) + d_npsd.move((-npsd_enc, -npsd_enc)) - for i in range(2): - d_con = c_inst.add_ref(via_generator(x_range=(0,w),y_range=(0,l),via_enclosure=d_con_enc,via_layer=con_layer[i],via_size=con_size,via_spacing=con_spacing)) - - d_li = c_inst.add_ref(gf.components.rectangle(size=(diode.xmax - diode.xmin + 2*(li_enc-d_con_enc[0]),d_con.ymax - d_con.ymin + 2*li_enc),layer=li_layer)) - d_li.move((-(li_enc-d_con_enc[0]) , d_con.ymin -li_enc)) - d_m1 = c_inst.add_ref(gf.components.rectangle(size=(w,d_li.ymax - d_li.ymin + 2*m1_enc),layer=m1_layer)) + d_con = c_inst.add_ref( + via_generator( + x_range=(0, w), + y_range=(0, l_d), + via_enclosure=d_con_enc, + via_layer=con_layer[i], + via_size=con_size, + via_spacing=con_spacing, + ) + ) + + d_li = c_inst.add_ref( + gf.components.rectangle( + size=( + diode.xmax - diode.xmin + 2 * (li_enc - d_con_enc[0]), + d_con.ymax - d_con.ymin + 2 * li_enc, + ), + layer=li_layer, + ) + ) + d_li.move((-(li_enc - d_con_enc[0]), d_con.ymin - li_enc)) + d_m1 = c_inst.add_ref( + gf.components.rectangle( + size=(w, d_li.ymax - d_li.ymin + 2 * m1_enc), layer=m1_layer + ) + ) d_m1.movey(d_li.ymin - m1_enc) - # generating gaurd ring and its contacts + # generating gaurd ring and its contacts c_temp = gf.Component("temp store") - tap_in = c_temp.add_ref(gf.components.rectangle(size=(w +2*diff_tap_spacing,l +2*diff_tap_spacing) - ,layer=tap_layer)) - tap_in.move((-diff_tap_spacing,-diff_tap_spacing)) - tap_out = c_temp.add_ref(gf.components.rectangle(size=(tap_in.xmax - tap_in.xmin + 2*cath_w, tap_in.ymax - tap_in.ymin + 2*cath_w),layer=tap_layer)) - tap_out.move((tap_in.xmin - cath_w, tap_in.ymin-cath_w)) - tap = c_inst.add_ref(gf.geometry.boolean(A=tap_out, B = tap_in, operation="A-B",layer=tap_layer)) - - - t_npsd_in = c_temp.add_ref(gf.components.rectangle(size=(tap_in.xmax - tap_in.xmin - 2*npsd_enc, tap_in.ymax - tap_in.ymin - 2*npsd_enc) - ,layer=t_npsd_layer)) + tap_in = c_temp.add_ref( + gf.components.rectangle( + size=(w + 2 * diff_tap_spacing, l_d + 2 * diff_tap_spacing), layer=tap_layer + ) + ) + tap_in.move((-diff_tap_spacing, -diff_tap_spacing)) + tap_out = c_temp.add_ref( + gf.components.rectangle( + size=( + tap_in.xmax - tap_in.xmin + 2 * cath_w, + tap_in.ymax - tap_in.ymin + 2 * cath_w, + ), + layer=tap_layer, + ) + ) + tap_out.move((tap_in.xmin - cath_w, tap_in.ymin - cath_w)) + c_inst.add_ref( + gf.geometry.boolean(A=tap_out, B=tap_in, operation="A-B", layer=tap_layer) + ) + + t_npsd_in = c_temp.add_ref( + gf.components.rectangle( + size=( + tap_in.xmax - tap_in.xmin - 2 * npsd_enc, + tap_in.ymax - tap_in.ymin - 2 * npsd_enc, + ), + layer=t_npsd_layer, + ) + ) t_npsd_in.move((tap_in.xmin + npsd_enc, tap_in.ymin + npsd_enc)) - t_npsd_out = c_temp.add_ref(gf.components.rectangle(size=(tap_out.xmax - tap_out.xmin + 2*npsd_enc, tap_out.ymax - tap_out.ymin + 2*npsd_enc) - ,layer=t_npsd_layer)) + t_npsd_out = c_temp.add_ref( + gf.components.rectangle( + size=( + tap_out.xmax - tap_out.xmin + 2 * npsd_enc, + tap_out.ymax - tap_out.ymin + 2 * npsd_enc, + ), + layer=t_npsd_layer, + ) + ) t_npsd_out.move((tap_out.xmin - npsd_enc, tap_out.ymin - npsd_enc)) - t_npsd = c_inst.add_ref(gf.geometry.boolean(A=t_npsd_out, B=t_npsd_in, operation="A-B",layer=t_npsd_layer)) - - if cath_w < con_size[0] + 2*t_con_enc[0]: + c_inst.add_ref( + gf.geometry.boolean( + A=t_npsd_out, B=t_npsd_in, operation="A-B", layer=t_npsd_layer + ) + ) + + if cath_w < con_size[0] + 2 * t_con_enc[0]: t_con_range = (tap_in.xmin, tap_in.xmax) - else : + else: t_con_range = (tap_out.xmin, tap_out.xmax) - t_licon_u = c_inst.add_ref(via_generator(x_range=t_con_range,y_range=(tap_in.ymax,tap_out.ymax),via_enclosure=t_con_enc - , via_layer=licon_layer,via_size=con_size,via_spacing=con_spacing)) - - t_licon_d = c_inst.add_ref(via_generator(x_range=t_con_range,y_range=(tap_out.ymin,tap_in.ymin),via_enclosure=t_con_enc - , via_layer=licon_layer,via_size=con_size,via_spacing=con_spacing)) - - t_licon_l = c_inst.add_ref(via_generator(x_range=(tap_out.xmin, tap_in.xmin),y_range=(tap_in.ymin +0.17,tap_in.ymax-0.17),via_enclosure=t_con_enc - , via_layer=licon_layer,via_size=con_size,via_spacing=con_spacing)) - - t_licon_r = c_inst.add_ref(via_generator(x_range=(tap_in.xmax, tap_out.xmax),y_range=(tap_in.ymin +0.17,tap_in.ymax-0.17),via_enclosure=t_con_enc - , via_layer=licon_layer,via_size=con_size,via_spacing=con_spacing)) - - tap_li_in = c_temp.add_ref(gf.components.rectangle(size=(w+2*diff_tap_spacing,l+2*diff_tap_spacing),layer=li_layer)) - tap_li_in.move((-diff_tap_spacing,-diff_tap_spacing)) - tap_li_out = c_temp.add_ref(gf.components.rectangle(size=(tap_in.xmax - tap_in.xmin + 2*cath_w, tap_in.ymax - tap_in.ymin + 2*cath_w),layer=li_layer)) - tap_li_out.move((tap_in.xmin - cath_w, tap_in.ymin-cath_w)) - tap_li = c_inst.add_ref(gf.geometry.boolean(A=tap_li_out, B = tap_li_in, operation="A-B",layer=li_layer)) - - if type == "sky130_fd_pr__diode_pw2nd_05v5_lvt" or type == "sky130_fd_pr__diode_pw2nd_05v5_nvt" or type == "sky130_fd_pr__diode_pd2nw_05v5_lvt": - lvt = c_inst.add_ref(gf.components.rectangle(size=(w+2*lvt_enc,l+2*lvt_enc),layer=lvtn_layer)) - lvt.move((-lvt_enc,-lvt_enc)) - - if type == "sky130_fd_pr__diode_pw2nd_05v5_nvt" or type == "sky130_fd_pr__diode_pw2nd_11v0" : - hvntm = c_inst.add_ref(gf.components.rectangle(size=(w+2*hv_enc,l+2*hv_enc),layer=hvntm_layer)) - hvntm.move((diode.xmin - hv_enc, diode.ymin - hv_enc)) - - if type == "sky130_fd_pr__diode_pd2nw_05v5_hvt" : - hvt = c_inst.add_ref(gf.components.rectangle(size=(w+2*lvt_enc,l+2*lvt_enc),layer=hvtp_layer)) - hvt.move((-lvt_enc,-lvt_enc)) - - if type == "sky130_fd_pr__diode_pw2nd_05v5_nvt" or type == "sky130_fd_pr__diode_pw2nd_11v0" : - hvi = c_inst.add_ref(gf.components.rectangle(size=(tap_out.xmax - tap_out.xmin + 2*hv_enc, tap_out.ymax - tap_out.ymin + 2*hv_enc),layer=hvi_layer)) + c_inst.add_ref( + via_generator( + x_range=t_con_range, + y_range=(tap_in.ymax, tap_out.ymax), + via_enclosure=t_con_enc, + via_layer=licon_layer, + via_size=con_size, + via_spacing=con_spacing, + ) + ) + + c_inst.add_ref( + via_generator( + x_range=t_con_range, + y_range=(tap_out.ymin, tap_in.ymin), + via_enclosure=t_con_enc, + via_layer=licon_layer, + via_size=con_size, + via_spacing=con_spacing, + ) + ) + + c_inst.add_ref( + via_generator( + x_range=(tap_out.xmin, tap_in.xmin), + y_range=(tap_in.ymin + 0.17, tap_in.ymax - 0.17), + via_enclosure=t_con_enc, + via_layer=licon_layer, + via_size=con_size, + via_spacing=con_spacing, + ) + ) + + c_inst.add_ref( + via_generator( + x_range=(tap_in.xmax, tap_out.xmax), + y_range=(tap_in.ymin + 0.17, tap_in.ymax - 0.17), + via_enclosure=t_con_enc, + via_layer=licon_layer, + via_size=con_size, + via_spacing=con_spacing, + ) + ) + + tap_li_in = c_temp.add_ref( + gf.components.rectangle( + size=(w + 2 * diff_tap_spacing, l_d + 2 * diff_tap_spacing), layer=li_layer + ) + ) + tap_li_in.move((-diff_tap_spacing, -diff_tap_spacing)) + tap_li_out = c_temp.add_ref( + gf.components.rectangle( + size=( + tap_in.xmax - tap_in.xmin + 2 * cath_w, + tap_in.ymax - tap_in.ymin + 2 * cath_w, + ), + layer=li_layer, + ) + ) + tap_li_out.move((tap_in.xmin - cath_w, tap_in.ymin - cath_w)) + c_inst.add_ref( + gf.geometry.boolean(A=tap_li_out, B=tap_li_in, operation="A-B", layer=li_layer) + ) + + if ( + type == "sky130_fd_pr__diode_pw2nd_05v5_lvt" + or type == "sky130_fd_pr__diode_pw2nd_05v5_nvt" + or type == "sky130_fd_pr__diode_pd2nw_05v5_lvt" + ): + lvt = c_inst.add_ref( + gf.components.rectangle( + size=(w + 2 * lvt_enc, l_d + 2 * lvt_enc), layer=lvtn_layer + ) + ) + lvt.move((-lvt_enc, -lvt_enc)) + + if ( + type == "sky130_fd_pr__diode_pw2nd_05v5_nvt" + or type == "sky130_fd_pr__diode_pw2nd_11v0" + ): + hvntm = c_inst.add_ref( + gf.components.rectangle( + size=(w + 2 * hv_enc, l_d + 2 * hv_enc), layer=hvntm_layer + ) + ) + hvntm.move((diode.xmin - hv_enc, diode.ymin - hv_enc)) + + if type == "sky130_fd_pr__diode_pd2nw_05v5_hvt": + hvt = c_inst.add_ref( + gf.components.rectangle( + size=(w + 2 * lvt_enc, l_d + 2 * lvt_enc), layer=hvtp_layer + ) + ) + hvt.move((-lvt_enc, -lvt_enc)) + + if ( + type == "sky130_fd_pr__diode_pw2nd_05v5_nvt" + or type == "sky130_fd_pr__diode_pw2nd_11v0" + ): + hvi = c_inst.add_ref( + gf.components.rectangle( + size=( + tap_out.xmax - tap_out.xmin + 2 * hv_enc, + tap_out.ymax - tap_out.ymin + 2 * hv_enc, + ), + layer=hvi_layer, + ) + ) hvi.move((tap_out.xmin - hv_enc, tap_out.ymin - hv_enc)) - # drawing nwell and outer gaurd ring in case of p-diode + # drawing nwell and outer gaurd ring in case of p-diode if d_type == "p": - if type == "sky130_fd_pr__diode_pd2nw_11v0": - nwell_enc = 0.34 - - nwell = c_inst.add_ref(gf.components.rectangle(size=(tap_out.xmax - tap_out.xmin + 2*nwell_enc, tap_out.ymax - tap_out.ymin + 2*nwell_enc),layer=nwell_layer)) + nwell_enc = 0.34 + + nwell = c_inst.add_ref( + gf.components.rectangle( + size=( + tap_out.xmax - tap_out.xmin + 2 * nwell_enc, + tap_out.ymax - tap_out.ymin + 2 * nwell_enc, + ), + layer=nwell_layer, + ) + ) nwell.move((tap_out.xmin - nwell_enc, tap_out.ymin - nwell_enc)) - gr_in = c_temp.add_ref(gf.components.rectangle(size = (c_inst.xmax-c_inst.xmin + 2*diff_tap_spacing,c_inst.ymax - c_inst.ymin + 2*diff_tap_spacing ) - , layer= tap_layer)) + gr_in = c_temp.add_ref( + gf.components.rectangle( + size=( + c_inst.xmax - c_inst.xmin + 2 * diff_tap_spacing, + c_inst.ymax - c_inst.ymin + 2 * diff_tap_spacing, + ), + layer=tap_layer, + ) + ) gr_in.move((c_inst.xmin - diff_tap_spacing, c_inst.ymin - diff_tap_spacing)) - gr_out = c_temp.add_ref(gf.components.rectangle(size=(gr_in.xmax - gr_in.xmin + 2*grw, gr_in.ymax - gr_in.ymin + 2*grw),layer=tap_layer)) + gr_out = c_temp.add_ref( + gf.components.rectangle( + size=( + gr_in.xmax - gr_in.xmin + 2 * grw, + gr_in.ymax - gr_in.ymin + 2 * grw, + ), + layer=tap_layer, + ) + ) gr_out.move((gr_in.xmin - grw, gr_in.ymin - grw)) - gr = c.add_ref(gf.geometry.boolean(A=gr_out, B=gr_in , operation= "A-B", layer=tap_layer)) - - gr_li = c.add_ref(gf.geometry.boolean(A=gr_out, B=gr_in , operation= "A-B", layer=li_layer)) - - g_psdm_in = c.add_ref(gf.components.rectangle(size=(gr_in.xmax - gr_in.xmin - 2*npsd_enc, gr_in.ymax - gr_in.ymin - 2*npsd_enc),layer=psdm_layer)) + c.add_ref( + gf.geometry.boolean(A=gr_out, B=gr_in, operation="A-B", layer=tap_layer) + ) + + c.add_ref( + gf.geometry.boolean(A=gr_out, B=gr_in, operation="A-B", layer=li_layer) + ) + + g_psdm_in = c.add_ref( + gf.components.rectangle( + size=( + gr_in.xmax - gr_in.xmin - 2 * npsd_enc, + gr_in.ymax - gr_in.ymin - 2 * npsd_enc, + ), + layer=psdm_layer, + ) + ) g_psdm_in.move((gr_in.xmin + npsd_enc, gr_in.ymin + npsd_enc)) - g_psdm_out = c.add_ref(gf.components.rectangle(size=(gr_out.xmax - gr_out.xmin + 2*npsd_enc, gr_out.ymax - gr_out.ymin + 2*npsd_enc),layer=psdm_layer)) + g_psdm_out = c.add_ref( + gf.components.rectangle( + size=( + gr_out.xmax - gr_out.xmin + 2 * npsd_enc, + gr_out.ymax - gr_out.ymin + 2 * npsd_enc, + ), + layer=psdm_layer, + ) + ) g_psdm_out.move((gr_out.xmin - npsd_enc, gr_out.ymin - npsd_enc)) - - if grw < con_size[0] + 2*t_con_enc[0] : - g_con_range = (gr_in.ymin , gr_in.ymax ) - else : - g_con_range = (gr_out.ymin , gr_out.ymax ) - - g_licon_u = c.add_ref(via_generator(x_range=(gr_in.xmin + 0.17, gr_in.xmax-0.17),y_range=(gr_in.ymax,gr_out.ymax),via_enclosure=t_con_enc - , via_layer=licon_layer,via_size=con_size,via_spacing=con_spacing)) - - g_licon_d = c.add_ref(via_generator(x_range=(gr_in.xmin + 0.17, gr_in.xmax-0.17),y_range=(gr_out.ymin,gr_in.ymin),via_enclosure=t_con_enc - , via_layer=licon_layer,via_size=con_size,via_spacing=con_spacing)) - - g_licon_l = c.add_ref(via_generator(x_range=(gr_out.xmin, gr_in.xmin),y_range=g_con_range,via_enclosure=t_con_enc - , via_layer=licon_layer,via_size=con_size,via_spacing=con_spacing)) - - g_licon_r = c.add_ref(via_generator(x_range=(gr_in.xmax, gr_out.xmax),y_range=g_con_range,via_enclosure=t_con_enc - , via_layer=licon_layer,via_size=con_size,via_spacing=con_spacing)) - + if grw < con_size[0] + 2 * t_con_enc[0]: + g_con_range = (gr_in.ymin, gr_in.ymax) + else: + g_con_range = (gr_out.ymin, gr_out.ymax) + + c.add_ref( + via_generator( + x_range=(gr_in.xmin + 0.17, gr_in.xmax - 0.17), + y_range=(gr_in.ymax, gr_out.ymax), + via_enclosure=t_con_enc, + via_layer=licon_layer, + via_size=con_size, + via_spacing=con_spacing, + ) + ) + + c.add_ref( + via_generator( + x_range=(gr_in.xmin + 0.17, gr_in.xmax - 0.17), + y_range=(gr_out.ymin, gr_in.ymin), + via_enclosure=t_con_enc, + via_layer=licon_layer, + via_size=con_size, + via_spacing=con_spacing, + ) + ) + + c.add_ref( + via_generator( + x_range=(gr_out.xmin, gr_in.xmin), + y_range=g_con_range, + via_enclosure=t_con_enc, + via_layer=licon_layer, + via_size=con_size, + via_spacing=con_spacing, + ) + ) + + c.add_ref( + via_generator( + x_range=(gr_in.xmax, gr_out.xmax), + y_range=g_con_range, + via_enclosure=t_con_enc, + via_layer=licon_layer, + via_size=con_size, + via_spacing=con_spacing, + ) + ) if type == "sky130_fd_pr__diode_pd2nw_11v0": - hvi = c.add_ref(gf.components.rectangle(size=(gr_out.xmax - gr_out.xmin + 2*hv_enc, gr_out.ymax - gr_out.ymin + 2*hv_enc),layer=hvi_layer)) + hvi = c.add_ref( + gf.components.rectangle( + size=( + gr_out.xmax - gr_out.xmin + 2 * hv_enc, + gr_out.ymax - gr_out.ymin + 2 * hv_enc, + ), + layer=hvi_layer, + ) + ) hvi.move((gr_out.xmin - hv_enc, gr_out.ymin - hv_enc)) - - - c.add_ref(c_inst) c.write_gds("diode_temp.gds") layout.read("diode_temp.gds") cell_name = "sky_diode_dev" - return layout.cell(cell_name) - diff --git a/sky130/cells/klayout/pymacros/cells/draw_fet.py b/sky130/cells/klayout/pymacros/cells/draw_fet.py index a636d6533..dcd2051a9 100644 --- a/sky130/cells/klayout/pymacros/cells/draw_fet.py +++ b/sky130/cells/klayout/pymacros/cells/draw_fet.py @@ -1,15 +1,15 @@ -# Copyright 2022 Skywater 130nm pdk development +# Copyright 2022 Skywater 130nm pdk development # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. -# +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. -# +# # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . @@ -18,242 +18,298 @@ ######################################################################################################################## from math import ceil, floor -import numpy as np import gdsfactory as gf -from gdsfactory.types import Float2, LayerSpec -from .via_generator import * -from .layers_def import * - -#@gf.cell +from .layers_def import ( + areaid_lvn_layer, + diff_layer, + hvi_layer, + hvntm_layer, + hvtp_layer, + li_layer, + licon_layer, + lvtn_layer, + m1_layer, + m1_lbl, + m2_layer, + nsdm_layer, + nwell_layer, + poly_layer, + psdm_layer, + tap_layer, + via1_layer, +) +from .via_generator import via_generator, via_stack + + +# @gf.cell def draw_nfet( - layout , - l : float = 0.15, - w : float = 0.42, - sd_con_col : int = 1, - inter_sd_l : float = 0.3,#0.21 , - nf : int = 1, - grw : float = 0.17 , - type = "sky130_fd_pr__nfet_01v8", - bulk = "None", - con_bet_fin : int = 1, - gate_con_pos = "alternating", - interdig : int = 0, - patt = "", - #n = 1 - - -) : #-> gf.Component: - - ''' + layout, + l_gate: float = 0.15, + w: float = 0.42, + sd_con_col: int = 1, + inter_sd_l: float = 0.3, # 0.21 , + nf: int = 1, + grw: float = 0.17, + type="sky130_fd_pr__nfet_01v8", + bulk="None", + con_bet_fin: int = 1, + gate_con_pos="alternating", + interdig: int = 0, + patt="", + # n = 1 +): # -> gf.Component: + """ Retern nfet - Args: - layout : layout object - l : Float of gate length + Args: + layout : layout object + l : Float of gate length w : Float of gate width sd_l : Float of source and drain diffusion length - inter_sd_l : Float of source and drain diffusion length between fingers - nf : integer of number of fingers - M : integer of number of multipliers - grw : gaurd ring width when enabled - type : string of the device type + inter_sd_l : Float of source and drain diffusion length between fingers + nf : integer of number of fingers + M : integer of number of multipliers + grw : gaurd ring width when enabled + type : string of the device type bulk : String of bulk connection type (None, Bulk Tie, Guard Ring) con_bet_fin : boolean of having contacts for diffusion between fingers gate_con_pos : string of choosing the gate contact position (bottom, top, alternating ) - ''' - # used layers and dimensions - + """ + # used layers and dimensions + end_cap: float = 0.2 - diff_tap_spacing : float = 0.32 - poly_tap_spacing : float = 0.27 - - diff_nsdm_enc : float = 0.125 - tap_psdm_enc : float = 0.125 - - - gate_npc_ext = 0.11 - npc_spacing = 0.27 - - - gate_lvt_enc : float = 0.18 - - - hv_enclosing : float = 0.185 - - - areaid_lvn_enc : float = 0.1 - - #m1_m1lic_sp = 0.28+ mcon_enc[0] - end_cap - - licon_size = (0.17,0.17) - licon_spacing = (0.19,0.19) - licon_dt_enc = (0.04,0.06) - - licon_p_enc = (0.05,0.08) - - - sd_l_con = ((sd_con_col)*licon_size[0]) + ((sd_con_col-1)*licon_spacing[0]) + 2*licon_dt_enc[0] - sd_l = sd_l_con + 0.05 - - # gds components to store a single instance and the generated device - c = gf.Component("sky_nfet_dev") + diff_tap_spacing: float = 0.32 + poly_tap_spacing: float = 0.27 - c_inst = gf.Component("dev_temp") + diff_nsdm_enc: float = 0.125 + tap_psdm_enc: float = 0.125 - # generating sd diffusion - - - if interdig == 1 and nf >1 and nf != len(patt) and patt !="": - nf = len(patt) + gate_npc_ext = 0.11 + npc_spacing = 0.27 - l_d = sd_l + nf*l + (nf-1)*inter_sd_l + sd_l # diffution total length - rect_d = gf.components.rectangle(size = (l_d,w), layer= diff_layer) - sd_diff = c_inst.add_ref(rect_d) + gate_lvt_enc: float = 0.18 - # generatin sd contacts + hv_enclosing: float = 0.185 - sd_con = via_stack(x_range = (0,sd_l),y_range=(0,w),base_layer=diff_layer,metal_level=1) - c_inst.add_array(component=sd_con,columns=2,rows=1,spacing=(sd_l+ nf*l + (nf-1)*inter_sd_l,0)) + areaid_lvn_enc: float = 0.1 + # m1_m1lic_sp = 0.28+ mcon_enc[0] - end_cap + licon_size = (0.17, 0.17) + licon_spacing = (0.19, 0.19) + licon_dt_enc = (0.04, 0.06) - if con_bet_fin == 1 and nf>1: - inter_sd_con = via_stack(x_range = (sd_l + l,sd_l + l+ inter_sd_l),y_range=(0,w),base_layer=diff_layer,metal_level=1) - c_inst.add_array(component=inter_sd_con,columns=nf-1,rows=1,spacing=(l+inter_sd_l,0)) - + licon_p_enc = (0.05, 0.08) + sd_l_con = ( + ((sd_con_col) * licon_size[0]) + + ((sd_con_col - 1) * licon_spacing[0]) + + 2 * licon_dt_enc[0] + ) + sd_l = sd_l_con + 0.05 - # generating poly + # gds components to store a single instance and the generated device + c = gf.Component("sky_nfet_dev") - if (l <= licon_size[0]+ 2*licon_p_enc[0]) : - pc_x = licon_p_enc[0] +licon_size[0] + licon_p_enc[0] - - else : - pc_x = l - - pc_size = (pc_x, licon_p_enc[1] +licon_size[1] + licon_p_enc[1]) + c_inst = gf.Component("dev_temp") - c_pc = gf.Component("poly con") + # generating sd diffusion - rect_pc = c_pc.add_ref(gf.components.rectangle(size=pc_size,layer=poly_layer)) + if interdig == 1 and nf > 1 and nf != len(patt) and patt != "": + nf = len(patt) + l_d = sd_l + nf * l_gate + (nf - 1) * inter_sd_l + sd_l # diffution total length + rect_d = gf.components.rectangle(size=(l_d, w), layer=diff_layer) + sd_diff = c_inst.add_ref(rect_d) - poly_con = via_stack(x_range=(rect_pc.xmin, rect_pc.xmax),y_range=(rect_pc.ymin, rect_pc.ymax),base_layer=poly_layer,metal_level=1,li_enc_dir="H") + # generatin sd contacts + + sd_con = via_stack( + x_range=(0, sd_l), y_range=(0, w), base_layer=diff_layer, metal_level=1 + ) + c_inst.add_array( + component=sd_con, + columns=2, + rows=1, + spacing=(sd_l + nf * l_gate + (nf - 1) * inter_sd_l, 0), + ) + + if con_bet_fin == 1 and nf > 1: + inter_sd_con = via_stack( + x_range=(sd_l + l_gate, sd_l + l_gate + inter_sd_l), + y_range=(0, w), + base_layer=diff_layer, + metal_level=1, + ) + c_inst.add_array( + component=inter_sd_con, + columns=nf - 1, + rows=1, + spacing=(l_gate + inter_sd_l, 0), + ) + + # generating poly + + if l_gate <= licon_size[0] + 2 * licon_p_enc[0]: + pc_x = licon_p_enc[0] + licon_size[0] + licon_p_enc[0] + + else: + pc_x = l_gate + + pc_size = (pc_x, licon_p_enc[1] + licon_size[1] + licon_p_enc[1]) + + c_pc = gf.Component("poly con") + + rect_pc = c_pc.add_ref(gf.components.rectangle(size=pc_size, layer=poly_layer)) + + poly_con = via_stack( + x_range=(rect_pc.xmin, rect_pc.xmax), + y_range=(rect_pc.ymin, rect_pc.ymax), + base_layer=poly_layer, + metal_level=1, + li_enc_dir="H", + ) c_pc.add_ref(poly_con) - if nf == 1 : - poly = c_inst.add_ref(gf.components.rectangle(size=(l,w+2*end_cap),layer=poly_layer)) - poly.move((sd_l,-end_cap)) + if nf == 1: + poly = c_inst.add_ref( + gf.components.rectangle(size=(l_gate, w + 2 * end_cap), layer=poly_layer) + ) + poly.move((sd_l, -end_cap)) if gate_con_pos == "bottom": mv = 0 nr = 1 - elif gate_con_pos == "top" : - mv = pc_size[1]+ w + 2*end_cap + elif gate_con_pos == "top": + mv = pc_size[1] + w + 2 * end_cap nr = 1 - else : - mv = 0 + else: + mv = 0 nr = 2 - - pc = c_inst.add_array(component=c_pc,rows=nr,columns=1, spacing=(0,pc_size[1]+w+2*end_cap)) - pc.move((sd_l- ((pc_x - l)/2), -pc_size[1] - end_cap + mv)) - - + pc = c_inst.add_array( + component=c_pc, + rows=nr, + columns=1, + spacing=(0, pc_size[1] + w + 2 * end_cap), + ) + pc.move((sd_l - ((pc_x - l_gate) / 2), -pc_size[1] - end_cap + mv)) - else : - + else: w_p1 = end_cap + w + end_cap # poly total width - if inter_sd_l < (npc_spacing + 2*gate_npc_ext) : - + if inter_sd_l < (npc_spacing + 2 * gate_npc_ext): if gate_con_pos == "alternating": w_p1 += 0.2 w_p2 = w_p1 e_c = 0.2 - else : - w_p2 = w_p1 + licon_p_enc[1] +licon_size[1] + licon_p_enc[1] + npc_spacing + 0.1 + else: + w_p2 = ( + w_p1 + + licon_p_enc[1] + + licon_size[1] + + licon_p_enc[1] + + npc_spacing + + 0.1 + ) e_c = 0 - if gate_con_pos == "bottom" : - p_mv = -end_cap - (w_p2-w_p1) - else : + if gate_con_pos == "bottom": + p_mv = -end_cap - (w_p2 - w_p1) + else: p_mv = -end_cap - else : + else: w_p2 = w_p1 p_mv = -end_cap e_c = 0 - - rect_p1 = gf.components.rectangle(size = (l,w_p1), layer= poly_layer) - rect_p2 = gf.components.rectangle(size = (l,w_p2), layer= poly_layer) - poly1 = c_inst.add_array(rect_p1, rows= 1 , columns= ceil(nf/2) , spacing= [2*(inter_sd_l+l), 0 ]) - poly1.move((sd_l,-end_cap - e_c)) - - poly2 = c_inst.add_array(rect_p2, rows= 1 , columns= floor(nf/2) , spacing= [2*(inter_sd_l+l), 0 ]) - poly2.move((sd_l+l+inter_sd_l,p_mv)) - - - #generating poly contacts setups + rect_p1 = gf.components.rectangle(size=(l_gate, w_p1), layer=poly_layer) + rect_p2 = gf.components.rectangle(size=(l_gate, w_p2), layer=poly_layer) + poly1 = c_inst.add_array( + rect_p1, + rows=1, + columns=ceil(nf / 2), + spacing=[2 * (inter_sd_l + l_gate), 0], + ) + poly1.move((sd_l, -end_cap - e_c)) + + poly2 = c_inst.add_array( + rect_p2, + rows=1, + columns=floor(nf / 2), + spacing=[2 * (inter_sd_l + l_gate), 0], + ) + poly2.move((sd_l + l_gate + inter_sd_l, p_mv)) + + # generating poly contacts setups if gate_con_pos == "bottom": mv_1 = 0 - mv_2 = - (w_p2-w_p1) - elif gate_con_pos == "top" : - mv_1 = pc_size[1]+ w_p1 - mv_2 = pc_size[1]+ w_p2 - else : + mv_2 = -(w_p2 - w_p1) + elif gate_con_pos == "top": + mv_1 = pc_size[1] + w_p1 + mv_2 = pc_size[1] + w_p2 + else: mv_1 = -e_c - mv_2 = pc_size[1]+ w_p2 - - - nc1 = ceil(nf/2) - nc2 = floor(nf/2) - - pc_spacing = 2*(inter_sd_l + l) - - # generating poly contacts - - pc1 = c_inst.add_array(component=c_pc,rows=1,columns=nc1,spacing=(pc_spacing,0)) - pc1.move((sd_l- ((pc_x - l)/2), -pc_size[1] - end_cap + mv_1)) - - pc2 = c_inst.add_array(component=c_pc,rows=1,columns=nc2,spacing=(pc_spacing,0)) - pc2.move((sd_l- ((pc_x - l)/2) + (inter_sd_l + l), -pc_size[1] - end_cap + mv_2)) - - - - if interdig == 1 : - if nf == len(patt): + mv_2 = pc_size[1] + w_p2 + + nc1 = ceil(nf / 2) + nc2 = floor(nf / 2) + + pc_spacing = 2 * (inter_sd_l + l_gate) + + # generating poly contacts + + pc1 = c_inst.add_array( + component=c_pc, rows=1, columns=nc1, spacing=(pc_spacing, 0) + ) + pc1.move((sd_l - ((pc_x - l_gate) / 2), -pc_size[1] - end_cap + mv_1)) + + pc2 = c_inst.add_array( + component=c_pc, rows=1, columns=nc2, spacing=(pc_spacing, 0) + ) + pc2.move( + ( + sd_l - ((pc_x - l_gate) / 2) + (inter_sd_l + l_gate), + -pc_size[1] - end_cap + mv_2, + ) + ) + + if interdig == 1: + if nf == len(patt): pat = list(patt) - nt = [] # list to store the symbols of transistors and thier number nt(number of transistors) + nt = ( + [] + ) # list to store the symbols of transistors and thier number nt(number of transistors) [nt.append(x) for x in pat if x not in nt] nl = int(len(nt)) m2_spacing = 0.14 - via1_size = (0.15,0.15) - via1_enc = (0.085,0.055) - via1_spacing = (0.17,0.17) - via2_size = (0.2,0.2) - via2_enc = (0.085,0.065) - via2_spacing = (0.2,0.2) + via1_size = (0.15, 0.15) + via1_enc = (0.085, 0.055) + via1_spacing = (0.17, 0.17) + via2_size = (0.2, 0.2) + via2_enc = (0.085, 0.065) - m2_y = via1_size[1]+2*via1_enc[1] - m2 = gf.components.rectangle(size=(sd_diff.xmax - sd_diff.xmin, m2_y),layer=m2_layer) + m2_y = via1_size[1] + 2 * via1_enc[1] + m2 = gf.components.rectangle( + size=(sd_diff.xmax - sd_diff.xmin, m2_y), layer=m2_layer + ) if gate_con_pos == "alternating": pat_o = [] pat_e = [] for i in range(int(nf)): - if i%2 == 0 : + if i % 2 == 0: pat_e.append(pat[i]) - else : + else: pat_o.append(pat[i]) - + nt_o = [] [nt_o.append(x) for x in pat_o if x not in nt_o] @@ -262,473 +318,894 @@ def draw_nfet( nl_b = len(nt_e) nl_u = len(nt_o) - - m2_y = via2_size[1]+2*via2_enc[1] - m2 = gf.components.rectangle(size=(sd_diff.xmax - sd_diff.xmin, m2_y),layer=m2_layer) - m2_arrb = c_inst.add_array(component=m2, columns=1, rows=nl_b,spacing= (0, -m2_y - m2_spacing)) + m2_y = via2_size[1] + 2 * via2_enc[1] + m2 = gf.components.rectangle( + size=(sd_diff.xmax - sd_diff.xmin, m2_y), layer=m2_layer + ) + + m2_arrb = c_inst.add_array( + component=m2, + columns=1, + rows=nl_b, + spacing=(0, -m2_y - m2_spacing), + ) m2_arrb.movey(pc1.ymin - m2_spacing - m2_y) - m2_arru = c_inst.add_array(component=m2, columns=1, rows=nl_u,spacing= (0, m2_y + m2_spacing)) + m2_arru = c_inst.add_array( + component=m2, + columns=1, + rows=nl_u, + spacing=(0, m2_y + m2_spacing), + ) m2_arru.movey(pc2.ymax + m2_spacing) - for i in range(nl_u): - for j in range(floor(nf/2)): + for j in range(floor(nf / 2)): if pat_o[j] == nt_o[i]: - m1 = c_inst.add_ref(gf.components.rectangle( - size=(poly_con.xmax - poly_con.xmin , ((pc2.ymax + (i+1)*(m2_spacing+ m2_y)) - pc2.ymin )),layer=m1_layer)) - m1.move(((sd_l- ((poly_con.xmax - poly_con.xmin - l)/2) + (2*j +1)*(l+inter_sd_l)) - , (pc2.ymin+0.06))) - via1_dr = via_generator(x_range=(m1.xmin,m1.xmax),y_range=(m2_arru.ymin + i*(m2_y+m2_spacing),m2_arru.ymin + i*(m2_y+m2_spacing)+m2_y) - , via_enclosure=via1_enc,via_layer=via1_layer,via_size=via1_size,via_spacing=via1_spacing) + m1 = c_inst.add_ref( + gf.components.rectangle( + size=( + poly_con.xmax - poly_con.xmin, + ( + ( + pc2.ymax + + (i + 1) * (m2_spacing + m2_y) + ) + - pc2.ymin + ), + ), + layer=m1_layer, + ) + ) + m1.move( + ( + ( + sd_l + - ( + (poly_con.xmax - poly_con.xmin - l_gate) + / 2 + ) + + (2 * j + 1) * (l_gate + inter_sd_l) + ), + (pc2.ymin + 0.06), + ) + ) + via1_dr = via_generator( + x_range=(m1.xmin, m1.xmax), + y_range=( + m2_arru.ymin + i * (m2_y + m2_spacing), + m2_arru.ymin + i * (m2_y + m2_spacing) + m2_y, + ), + via_enclosure=via1_enc, + via_layer=via1_layer, + via_size=via1_size, + via_spacing=via1_spacing, + ) via1 = c_inst.add_ref(via1_dr) - c_inst.add_label(f"{pat_o[j]}",position=((via1.xmax+via1.xmin)/2, (via1.ymax+via1.ymin)/2),layer=m1_lbl) - - - + c_inst.add_label( + f"{pat_o[j]}", + position=( + (via1.xmax + via1.xmin) / 2, + (via1.ymax + via1.ymin) / 2, + ), + layer=m1_lbl, + ) + for i in range(nl_b): - for j in range(ceil(nf/2)): + for j in range(ceil(nf / 2)): if pat_e[j] == nt_e[i]: - - m1 = c_inst.add_ref(gf.components.rectangle( - size=(poly_con.xmax - poly_con.xmin , ((pc1.ymax + (i+1)*(m2_spacing+ m2_y)) -pc1.ymin )),layer=m1_layer)) - m1.move(((sd_l- ((poly_con.xmax - poly_con.xmin - l)/2) + (2*j)*(l+inter_sd_l)), -(m1.ymax - m1.ymin) + (pc1.ymax-0.06))) - via1_dr = via_generator(x_range=(m1.xmin,m1.xmax),y_range=(m2_arrb.ymax - i*(m2_spacing+m2_y) - m2_y,m2_arrb.ymax - i*(m2_spacing+m2_y)) - , via_enclosure=via1_enc,via_layer=via1_layer,via_size=via1_size,via_spacing=via1_spacing) + m1 = c_inst.add_ref( + gf.components.rectangle( + size=( + poly_con.xmax - poly_con.xmin, + ( + ( + pc1.ymax + + (i + 1) * (m2_spacing + m2_y) + ) + - pc1.ymin + ), + ), + layer=m1_layer, + ) + ) + m1.move( + ( + ( + sd_l + - ( + (poly_con.xmax - poly_con.xmin - l_gate) + / 2 + ) + + (2 * j) * (l_gate + inter_sd_l) + ), + -(m1.ymax - m1.ymin) + (pc1.ymax - 0.06), + ) + ) + via1_dr = via_generator( + x_range=(m1.xmin, m1.xmax), + y_range=( + m2_arrb.ymax - i * (m2_spacing + m2_y) - m2_y, + m2_arrb.ymax - i * (m2_spacing + m2_y), + ), + via_enclosure=via1_enc, + via_layer=via1_layer, + via_size=via1_size, + via_spacing=via1_spacing, + ) via1 = c_inst.add_ref(via1_dr) - c_inst.add_label(f"{pat_e[j]}",position=((via1.xmax+via1.xmin)/2, (via1.ymax+via1.ymin)/2),layer=m1_lbl) - - - - m3_x = via2_size[0] + 2*via2_enc[0] + c_inst.add_label( + f"{pat_e[j]}", + position=( + (via1.xmax + via1.xmin) / 2, + (via1.ymax + via1.ymin) / 2, + ), + layer=m1_lbl, + ) + + m3_x = via2_size[0] + 2 * via2_enc[0] m3_spacing = 0.3 - + for i in range(nl_b): for j in range(nl_u): if nt_e[i] == nt_o[j]: - - m2_join_b = c_inst.add_ref(gf.components.rectangle(size=(m2_y+ (i+1)*(m3_spacing+m3_x),m2_y),layer=m2_layer) - .move((m2_arrb.xmin -(m2_y + (i+1)*(m3_spacing+m3_x)),m2_arrb.ymax - i*(m2_spacing+m2_y) - m2_y))) - m2_join_u = c_inst.add_ref(gf.components.rectangle(size=(m2_y+ (i+1)*(m3_spacing+m3_x),m2_y),layer=m2_layer) - .move((m2_arru.xmin -( m2_y + (i+1)*(m3_spacing+m3_x) ),m2_arru.ymin + j*(m2_spacing+m2_y)))) - m3 = c_inst.add_ref(gf.components.rectangle(size=(m3_x, m2_join_u.ymax - m2_join_b.ymin),layer=m1_layer)) - m3.move((m2_join_b.xmin,m2_join_b.ymin)) - via2_dr = via_generator(x_range=(m3.xmin,m3.xmax),y_range=(m2_join_b.ymin,m2_join_b.ymax),via_enclosure=via1_enc,via_size=via1_size - ,via_layer=via1_layer,via_spacing=via1_spacing) - via2 = c_inst.add_array(component=via2_dr,columns=1,rows=2,spacing=(0,m2_join_u.ymin-m2_join_b.ymin)) - - - - elif gate_con_pos == "top" : - - m2_arr = c_inst.add_array(component=m2, columns=1, rows=nl , spacing=(0,m2.ymax-m2.ymin + m2_spacing)) + m2_join_b = c_inst.add_ref( + gf.components.rectangle( + size=( + m2_y + (i + 1) * (m3_spacing + m3_x), + m2_y, + ), + layer=m2_layer, + ).move( + ( + m2_arrb.xmin + - (m2_y + (i + 1) * (m3_spacing + m3_x)), + m2_arrb.ymax + - i * (m2_spacing + m2_y) + - m2_y, + ) + ) + ) + m2_join_u = c_inst.add_ref( + gf.components.rectangle( + size=( + m2_y + (i + 1) * (m3_spacing + m3_x), + m2_y, + ), + layer=m2_layer, + ).move( + ( + m2_arru.xmin + - (m2_y + (i + 1) * (m3_spacing + m3_x)), + m2_arru.ymin + j * (m2_spacing + m2_y), + ) + ) + ) + m3 = c_inst.add_ref( + gf.components.rectangle( + size=(m3_x, m2_join_u.ymax - m2_join_b.ymin), + layer=m1_layer, + ) + ) + m3.move((m2_join_b.xmin, m2_join_b.ymin)) + via2_dr = via_generator( + x_range=(m3.xmin, m3.xmax), + y_range=(m2_join_b.ymin, m2_join_b.ymax), + via_enclosure=via1_enc, + via_size=via1_size, + via_layer=via1_layer, + via_spacing=via1_spacing, + ) + c_inst.add_array( + component=via2_dr, + columns=1, + rows=2, + spacing=(0, m2_join_u.ymin - m2_join_b.ymin), + ) + + elif gate_con_pos == "top": + m2_arr = c_inst.add_array( + component=m2, + columns=1, + rows=nl, + spacing=(0, m2.ymax - m2.ymin + m2_spacing), + ) m2_arr.movey(pc2.ymax + m2_spacing) - + for i in range(nl): for j in range(int(nf)): if pat[j] == nt[i]: - m1 = c_inst.add_ref(gf.components.rectangle( - size=(poly_con.xmax - poly_con.xmin , ((pc2.ymax + (i+1)*(m2_spacing+ m2_y)) - ((1-j%2)*pc1.ymin) - (j%2)*pc2.ymin )),layer=m1_layer)) - m1.move(((sd_l- ((poly_con.xmax - poly_con.xmin - l)/2) + j*(l+inter_sd_l)) - , (1-j%2)*(pc1.ymin+0.06) + (j%2)*(pc2.ymin+0.06))) - via1_dr = via_generator(x_range=(m1.xmin,m1.xmax),y_range=(m2_arr.ymin + i*(m2_spacing+m2_y),m2_arr.ymin + i*(m2_spacing+m2_y)+m2_y) - , via_enclosure=via1_enc,via_layer=via1_layer,via_size=via1_size,via_spacing=via1_spacing) + m1 = c_inst.add_ref( + gf.components.rectangle( + size=( + poly_con.xmax - poly_con.xmin, + ( + ( + pc2.ymax + + (i + 1) * (m2_spacing + m2_y) + ) + - ((1 - j % 2) * pc1.ymin) + - (j % 2) * pc2.ymin + ), + ), + layer=m1_layer, + ) + ) + m1.move( + ( + ( + sd_l + - ( + (poly_con.xmax - poly_con.xmin - l_gate) + / 2 + ) + + j * (l_gate + inter_sd_l) + ), + (1 - j % 2) * (pc1.ymin + 0.06) + + (j % 2) * (pc2.ymin + 0.06), + ) + ) + via1_dr = via_generator( + x_range=(m1.xmin, m1.xmax), + y_range=( + m2_arr.ymin + i * (m2_spacing + m2_y), + m2_arr.ymin + i * (m2_spacing + m2_y) + m2_y, + ), + via_enclosure=via1_enc, + via_layer=via1_layer, + via_size=via1_size, + via_spacing=via1_spacing, + ) via1 = c_inst.add_ref(via1_dr) - c_inst.add_label(f"{pat[j]}",position=((via1.xmax+via1.xmin)/2, (via1.ymax+via1.ymin)/2),layer=m1_lbl) - - - - elif gate_con_pos == "bottom" : - - m2_arr = c_inst.add_array(component=m2, columns=1, rows=nl , spacing=(0,-m2_y - m2_spacing)) + c_inst.add_label( + f"{pat[j]}", + position=( + (via1.xmax + via1.xmin) / 2, + (via1.ymax + via1.ymin) / 2, + ), + layer=m1_lbl, + ) + + elif gate_con_pos == "bottom": + m2_arr = c_inst.add_array( + component=m2, + columns=1, + rows=nl, + spacing=(0, -m2_y - m2_spacing), + ) m2_arr.movey(pc2.ymin - m2_spacing - m2_y) - + for i in range(nl): for j in range(int(nf)): if pat[j] == nt[i]: - - m1 = c_inst.add_ref(gf.components.rectangle( - size=(poly_con.xmax - poly_con.xmin , ((pc1.ymax + (i+1)*(m2_spacing+ m2_y)) - (j%2)*pc1.ymin - (1-j%2)*pc2.ymin)),layer=m1_layer)) - m1.move(((sd_l- ((poly_con.xmax - poly_con.xmin - l)/2) + j*(l+inter_sd_l)), -(m1.ymax - m1.ymin) + (1-j%2)*(pc1.ymax-0.06)+ (j%2)*(pc2.ymax-0.06))) - via1_dr = via_generator(x_range=(m1.xmin,m1.xmax),y_range=(m2_arr.ymax - i*(m2_spacing+m2_y) -m2_y,m2_arr.ymax - i*(m2_spacing+m2_y) ) - , via_enclosure=via1_enc,via_layer=via1_layer,via_size=via1_size,via_spacing=via1_spacing) + m1 = c_inst.add_ref( + gf.components.rectangle( + size=( + poly_con.xmax - poly_con.xmin, + ( + ( + pc1.ymax + + (i + 1) * (m2_spacing + m2_y) + ) + - (j % 2) * pc1.ymin + - (1 - j % 2) * pc2.ymin + ), + ), + layer=m1_layer, + ) + ) + m1.move( + ( + ( + sd_l + - ( + (poly_con.xmax - poly_con.xmin - l_gate) + / 2 + ) + + j * (l_gate + inter_sd_l) + ), + -(m1.ymax - m1.ymin) + + (1 - j % 2) * (pc1.ymax - 0.06) + + (j % 2) * (pc2.ymax - 0.06), + ) + ) + via1_dr = via_generator( + x_range=(m1.xmin, m1.xmax), + y_range=( + m2_arr.ymax - i * (m2_spacing + m2_y) - m2_y, + m2_arr.ymax - i * (m2_spacing + m2_y), + ), + via_enclosure=via1_enc, + via_layer=via1_layer, + via_size=via1_size, + via_spacing=via1_spacing, + ) via1 = c_inst.add_ref(via1_dr) - c_inst.add_label(f"{pat[j]}",position=((via1.xmax+via1.xmin)/2, (via1.ymax+via1.ymin)/2),layer=m1_lbl) - - - - - - - # generating bulk + c_inst.add_label( + f"{pat[j]}", + position=( + (via1.xmax + via1.xmin) / 2, + (via1.ymax + via1.ymin) / 2, + ), + layer=m1_lbl, + ) + + # generating bulk if bulk == "None": - nsdm = c_inst.add_ref(gf.components.rectangle(size=(l_d+ 2*diff_nsdm_enc, w+ 2*diff_nsdm_enc),layer= nsdm_layer)) - nsdm.move((-diff_nsdm_enc,-diff_nsdm_enc)) - - if type=="sky130_fd_pr__nfet_g5v0d10v5" or type== "sky130_fd_pr__nfet_05v0_nvt" or type == "sky130_fd_pr__nfet_03v3_nvt": - hvntm = c_inst.add_ref(gf.components.rectangle(size=(l_d+2*hv_enclosing,w+2*hv_enclosing),layer=hvntm_layer)) - hvntm.move((sd_diff.xmin - hv_enclosing, sd_diff.ymin- hv_enclosing)) + nsdm = c_inst.add_ref( + gf.components.rectangle( + size=(l_d + 2 * diff_nsdm_enc, w + 2 * diff_nsdm_enc), layer=nsdm_layer + ) + ) + nsdm.move((-diff_nsdm_enc, -diff_nsdm_enc)) + + if ( + type == "sky130_fd_pr__nfet_g5v0d10v5" + or type == "sky130_fd_pr__nfet_05v0_nvt" + or type == "sky130_fd_pr__nfet_03v3_nvt" + ): + hvntm = c_inst.add_ref( + gf.components.rectangle( + size=(l_d + 2 * hv_enclosing, w + 2 * hv_enclosing), + layer=hvntm_layer, + ) + ) + hvntm.move((sd_diff.xmin - hv_enclosing, sd_diff.ymin - hv_enclosing)) - elif bulk == "bulk tie": - rect_bulk = c_inst.add_ref(gf.components.rectangle(size=(sd_l*1.5,w),layer=tap_layer)) - rect_bulk.connect("e1",destination=sd_diff.ports["e3"]) - nsdm = c_inst.add_ref(gf.components.rectangle(size=(sd_diff.xmax - sd_diff.xmin +diff_nsdm_enc,w + 2*diff_nsdm_enc),layer=nsdm_layer)) - nsdm.move((-diff_nsdm_enc,-diff_nsdm_enc)) - psdm = c_inst.add_ref(gf.components.rectangle(size=(rect_bulk.xmax - rect_bulk.xmin +tap_psdm_enc, w+ 2*tap_psdm_enc), layer= psdm_layer)) - psdm.connect("e1",destination = nsdm.ports["e3"]) - - bulk_con = via_stack(x_range= (rect_bulk.xmin+0.1,rect_bulk.xmax-0.1),y_range=(rect_bulk.ymin,rect_bulk.ymax),base_layer=tap_layer,metal_level=0) + rect_bulk = c_inst.add_ref( + gf.components.rectangle(size=(sd_l * 1.5, w), layer=tap_layer) + ) + rect_bulk.connect("e1", destination=sd_diff.ports["e3"]) + nsdm = c_inst.add_ref( + gf.components.rectangle( + size=( + sd_diff.xmax - sd_diff.xmin + diff_nsdm_enc, + w + 2 * diff_nsdm_enc, + ), + layer=nsdm_layer, + ) + ) + nsdm.move((-diff_nsdm_enc, -diff_nsdm_enc)) + psdm = c_inst.add_ref( + gf.components.rectangle( + size=( + rect_bulk.xmax - rect_bulk.xmin + tap_psdm_enc, + w + 2 * tap_psdm_enc, + ), + layer=psdm_layer, + ) + ) + psdm.connect("e1", destination=nsdm.ports["e3"]) + + bulk_con = via_stack( + x_range=(rect_bulk.xmin + 0.1, rect_bulk.xmax - 0.1), + y_range=(rect_bulk.ymin, rect_bulk.ymax), + base_layer=tap_layer, + metal_level=0, + ) c_inst.add_ref(bulk_con) - - - if type=="sky130_fd_pr__nfet_g5v0d10v5" or type== "sky130_fd_pr__nfet_05v0_nvt" or type == "sky130_fd_pr__nfet_03v3_nvt": - hvntm = c_inst.add_ref(gf.components.rectangle(size=(l_d+hv_enclosing,w+2*hv_enclosing),layer=hvntm_layer)) - hvntm.move((sd_diff.xmin - hv_enclosing, sd_diff.ymin- hv_enclosing)) - - - + if ( + type == "sky130_fd_pr__nfet_g5v0d10v5" + or type == "sky130_fd_pr__nfet_05v0_nvt" + or type == "sky130_fd_pr__nfet_03v3_nvt" + ): + hvntm = c_inst.add_ref( + gf.components.rectangle( + size=(l_d + hv_enclosing, w + 2 * hv_enclosing), layer=hvntm_layer + ) + ) + hvntm.move((sd_diff.xmin - hv_enclosing, sd_diff.ymin - hv_enclosing)) elif bulk == "Gaurd Ring": - - nsdm = c_inst.add_ref(gf.components.rectangle(size=(l_d+ 2*diff_nsdm_enc, w+ 2*diff_nsdm_enc),layer= nsdm_layer)) - nsdm.move((-diff_nsdm_enc,-diff_nsdm_enc)) + nsdm = c_inst.add_ref( + gf.components.rectangle( + size=(l_d + 2 * diff_nsdm_enc, w + 2 * diff_nsdm_enc), layer=nsdm_layer + ) + ) + nsdm.move((-diff_nsdm_enc, -diff_nsdm_enc)) c.add_ref(c_inst) c_temp = gf.Component("temp_store") - rect_bulk_in = c_temp.add_ref(gf.components.rectangle(size=((c_inst.xmax - c_inst.xmin) + 2*diff_tap_spacing, - (c_inst.ymax - c_inst.ymin) + 2*poly_tap_spacing ) - , layer= tap_layer)) - rect_bulk_in.move((c_inst.xmin -diff_tap_spacing,c_inst.ymin - poly_tap_spacing)) - rect_bulk_out = c_temp.add_ref(gf.components.rectangle(size=((rect_bulk_in.xmax - rect_bulk_in.xmin) + 2*grw,(rect_bulk_in.ymax - rect_bulk_in.ymin) + 2*grw ) - , layer= tap_layer)) - rect_bulk_out.move((rect_bulk_in.xmin - grw , rect_bulk_in.ymin -grw )) - B = c.add_ref(gf.geometry.boolean(A= rect_bulk_out , B = rect_bulk_in , operation= "A-B", layer= tap_layer) ) - - psdm_in = c_temp.add_ref(gf.components.rectangle(size=((rect_bulk_in.xmax - rect_bulk_in.xmin) - 2*tap_psdm_enc, (rect_bulk_in.ymax - rect_bulk_in.ymin) - 2*tap_psdm_enc ) - , layer= psdm_layer)) - psdm_in.move((rect_bulk_in.xmin + tap_psdm_enc, rect_bulk_in.ymin + tap_psdm_enc)) - psdm_out = c_temp.add_ref(gf.components.rectangle(size=((rect_bulk_out.xmax - rect_bulk_out.xmin) + 2*tap_psdm_enc, (rect_bulk_out.ymax - rect_bulk_out.ymin) + 2*tap_psdm_enc ) - , layer= nsdm_layer)) - psdm_out.move((rect_bulk_out.xmin - tap_psdm_enc, rect_bulk_out.ymin - tap_psdm_enc)) - psdm = c.add_ref(gf.geometry.boolean(A= psdm_out , B = psdm_in , operation= "A-B", layer= psdm_layer) ) - - + rect_bulk_in = c_temp.add_ref( + gf.components.rectangle( + size=( + (c_inst.xmax - c_inst.xmin) + 2 * diff_tap_spacing, + (c_inst.ymax - c_inst.ymin) + 2 * poly_tap_spacing, + ), + layer=tap_layer, + ) + ) + rect_bulk_in.move( + (c_inst.xmin - diff_tap_spacing, c_inst.ymin - poly_tap_spacing) + ) + rect_bulk_out = c_temp.add_ref( + gf.components.rectangle( + size=( + (rect_bulk_in.xmax - rect_bulk_in.xmin) + 2 * grw, + (rect_bulk_in.ymax - rect_bulk_in.ymin) + 2 * grw, + ), + layer=tap_layer, + ) + ) + rect_bulk_out.move((rect_bulk_in.xmin - grw, rect_bulk_in.ymin - grw)) + c.add_ref( + gf.geometry.boolean( + A=rect_bulk_out, B=rect_bulk_in, operation="A-B", layer=tap_layer + ) + ) + + psdm_in = c_temp.add_ref( + gf.components.rectangle( + size=( + (rect_bulk_in.xmax - rect_bulk_in.xmin) - 2 * tap_psdm_enc, + (rect_bulk_in.ymax - rect_bulk_in.ymin) - 2 * tap_psdm_enc, + ), + layer=psdm_layer, + ) + ) + psdm_in.move( + (rect_bulk_in.xmin + tap_psdm_enc, rect_bulk_in.ymin + tap_psdm_enc) + ) + psdm_out = c_temp.add_ref( + gf.components.rectangle( + size=( + (rect_bulk_out.xmax - rect_bulk_out.xmin) + 2 * tap_psdm_enc, + (rect_bulk_out.ymax - rect_bulk_out.ymin) + 2 * tap_psdm_enc, + ), + layer=nsdm_layer, + ) + ) + psdm_out.move( + (rect_bulk_out.xmin - tap_psdm_enc, rect_bulk_out.ymin - tap_psdm_enc) + ) + psdm = c.add_ref( + gf.geometry.boolean( + A=psdm_out, B=psdm_in, operation="A-B", layer=psdm_layer + ) + ) # generating contacts - - ring_con_bot = c.add_ref(via_generator(x_range=(rect_bulk_in.xmin + 0.17,rect_bulk_in.xmax-0.17),y_range=(rect_bulk_out.ymin,rect_bulk_in.ymin) - , via_enclosure=licon_dt_enc, via_layer=licon_layer,via_size=licon_size,via_spacing=licon_spacing)) - - ring_con_up = c.add_ref(via_generator(x_range=(rect_bulk_in.xmin+0.17,rect_bulk_in.xmax-0.17),y_range=(rect_bulk_in.ymax,rect_bulk_out.ymax) - , via_enclosure=licon_dt_enc, via_layer=licon_layer,via_size=licon_size,via_spacing=licon_spacing)) - - ring_con_r = c.add_ref(via_generator(x_range=(rect_bulk_out.xmin,rect_bulk_in.xmin),y_range=(rect_bulk_in.ymin+0.17,rect_bulk_in.ymax-0.17) - , via_enclosure=licon_dt_enc, via_layer=licon_layer,via_size=licon_size,via_spacing=licon_spacing)) - - ring_con_l = c.add_ref(via_generator(x_range=(rect_bulk_in.xmax,rect_bulk_out.xmax),y_range=(rect_bulk_in.ymin+0.17,rect_bulk_in.ymax-0.17) - , via_enclosure=licon_dt_enc, via_layer=licon_layer,via_size=licon_size,via_spacing=licon_spacing)) - - tap_li_in = c_temp.add_ref(gf.components.rectangle(size=((l_d ) + 2*diff_tap_spacing, - (c_inst.ymax - c_inst.ymin) + 2*poly_tap_spacing ) - , layer= li_layer)) - tap_li_in.move((-diff_tap_spacing,c_inst.ymin - poly_tap_spacing)) - tap_li_out = c_temp.add_ref(gf.components.rectangle(size=((rect_bulk_in.xmax - rect_bulk_in.xmin) + 2*grw,(rect_bulk_in.ymax - rect_bulk_in.ymin) + 2*grw ) - , layer= li_layer)) - tap_li_out.move((rect_bulk_in.xmin - grw , rect_bulk_in.ymin -grw )) - li = c.add_ref(gf.geometry.boolean(A= rect_bulk_out , B = rect_bulk_in , operation= "A-B", layer= li_layer) ) - - - - # generating hvi for high voltage - if type=="sky130_fd_pr__nfet_g5v0d10v5" or type== "sky130_fd_pr__nfet_05v0_nvt" or type == "sky130_fd_pr__nfet_03v3_nvt": - hvi = c.add_ref(gf.components.rectangle(size=(rect_bulk_out.xmax-rect_bulk_out.xmin + 2*hv_enclosing - , rect_bulk_out.ymax - rect_bulk_out.ymin + 2*hv_enclosing),layer=hvi_layer)) - hvi.move((rect_bulk_out.xmin-hv_enclosing, rect_bulk_out.ymin-hv_enclosing)) - - - hvntm = c_inst.add_ref(gf.components.rectangle(size=(l_d+2*hv_enclosing,w+2*hv_enclosing),layer=hvntm_layer)) - hvntm.move((sd_diff.xmin - hv_enclosing, sd_diff.ymin- hv_enclosing)) - - + c.add_ref( + via_generator( + x_range=(rect_bulk_in.xmin + 0.17, rect_bulk_in.xmax - 0.17), + y_range=(rect_bulk_out.ymin, rect_bulk_in.ymin), + via_enclosure=licon_dt_enc, + via_layer=licon_layer, + via_size=licon_size, + via_spacing=licon_spacing, + ) + ) + + c.add_ref( + via_generator( + x_range=(rect_bulk_in.xmin + 0.17, rect_bulk_in.xmax - 0.17), + y_range=(rect_bulk_in.ymax, rect_bulk_out.ymax), + via_enclosure=licon_dt_enc, + via_layer=licon_layer, + via_size=licon_size, + via_spacing=licon_spacing, + ) + ) + + c.add_ref( + via_generator( + x_range=(rect_bulk_out.xmin, rect_bulk_in.xmin), + y_range=(rect_bulk_in.ymin + 0.17, rect_bulk_in.ymax - 0.17), + via_enclosure=licon_dt_enc, + via_layer=licon_layer, + via_size=licon_size, + via_spacing=licon_spacing, + ) + ) + + c.add_ref( + via_generator( + x_range=(rect_bulk_in.xmax, rect_bulk_out.xmax), + y_range=(rect_bulk_in.ymin + 0.17, rect_bulk_in.ymax - 0.17), + via_enclosure=licon_dt_enc, + via_layer=licon_layer, + via_size=licon_size, + via_spacing=licon_spacing, + ) + ) + + tap_li_in = c_temp.add_ref( + gf.components.rectangle( + size=( + (l_d) + 2 * diff_tap_spacing, + (c_inst.ymax - c_inst.ymin) + 2 * poly_tap_spacing, + ), + layer=li_layer, + ) + ) + tap_li_in.move((-diff_tap_spacing, c_inst.ymin - poly_tap_spacing)) + tap_li_out = c_temp.add_ref( + gf.components.rectangle( + size=( + (rect_bulk_in.xmax - rect_bulk_in.xmin) + 2 * grw, + (rect_bulk_in.ymax - rect_bulk_in.ymin) + 2 * grw, + ), + layer=li_layer, + ) + ) + tap_li_out.move((rect_bulk_in.xmin - grw, rect_bulk_in.ymin - grw)) + c.add_ref( + gf.geometry.boolean( + A=rect_bulk_out, B=rect_bulk_in, operation="A-B", layer=li_layer + ) + ) + + # generating hvi for high voltage + if ( + type == "sky130_fd_pr__nfet_g5v0d10v5" + or type == "sky130_fd_pr__nfet_05v0_nvt" + or type == "sky130_fd_pr__nfet_03v3_nvt" + ): + hvi = c.add_ref( + gf.components.rectangle( + size=( + rect_bulk_out.xmax - rect_bulk_out.xmin + 2 * hv_enclosing, + rect_bulk_out.ymax - rect_bulk_out.ymin + 2 * hv_enclosing, + ), + layer=hvi_layer, + ) + ) + hvi.move( + (rect_bulk_out.xmin - hv_enclosing, rect_bulk_out.ymin - hv_enclosing) + ) + + hvntm = c_inst.add_ref( + gf.components.rectangle( + size=(l_d + 2 * hv_enclosing, w + 2 * hv_enclosing), + layer=hvntm_layer, + ) + ) + hvntm.move((sd_diff.xmin - hv_enclosing, sd_diff.ymin - hv_enclosing)) if bulk != "Gaurd Ring": c.add_ref(c_inst) + # generating hvi and hvntm for high voltage + if ( + type == "sky130_fd_pr__nfet_g5v0d10v5" + or type == "sky130_fd_pr__nfet_05v0_nvt" + or type == "sky130_fd_pr__nfet_03v3_nvt" + ): + hvi = c.add_ref( + gf.components.rectangle( + size=( + c_inst.xmax - c_inst.xmin + 2 * hv_enclosing, + (c_inst.ymax - c_inst.ymin) + 2 * hv_enclosing, + ), + layer=hvi_layer, + ) + ) + hvi.move((c_inst.xmin - hv_enclosing, c_inst.ymin - hv_enclosing)) - # generating hvi and hvntm for high voltage - if type=="sky130_fd_pr__nfet_g5v0d10v5" or type== "sky130_fd_pr__nfet_05v0_nvt" or type == "sky130_fd_pr__nfet_03v3_nvt" : - hvi = c.add_ref(gf.components.rectangle(size=(c_inst.xmax-c_inst.xmin + 2*hv_enclosing - , (c_inst.ymax - c_inst.ymin )+ 2*hv_enclosing),layer=hvi_layer)) - hvi.move((c_inst.xmin-hv_enclosing, c_inst.ymin-hv_enclosing)) - - - - if type == "sky130_fd_pr__nfet_01v8_lvt": - lvt = c_inst.add_ref(gf.components.rectangle(size= (nf*l + (nf-1)*inter_sd_l + 2*gate_lvt_enc, w + 2*gate_lvt_enc) - , layer= lvtn_layer)) - lvt.move((sd_l - gate_lvt_enc,-gate_lvt_enc)) - - if type == "sky130_fd_pr__nfet_03v3_nvt" or type == "sky130_fd_pr__nfet_05v0_nvt": - - nvt = c_inst.add_ref(gf.components.rectangle(size= (nf*l + (nf-1)*inter_sd_l + 2*gate_lvt_enc, w + 2*gate_lvt_enc) - , layer= lvtn_layer)) - nvt.move((sd_l - gate_lvt_enc,-gate_lvt_enc)) - - if type == "sky130_fd_pr__nfet_03v3_nvt" : - areaid_lvn = gf.components.rectangle(size=(l+2*areaid_lvn_enc,w+2*areaid_lvn_enc),layer=areaid_lvn_layer) - areaid_lvn_arr = c_inst.add_array(component=areaid_lvn,columns=nf,rows=1,spacing=[l+inter_sd_l,0]) - areaid_lvn_arr.move((sd_l-areaid_lvn_enc , sd_diff.ymin - areaid_lvn_enc)) - - - # creating layout and cell in klayout - c.write_gds(f"nfet_temp.gds") - layout.read(f"nfet_temp.gds") + lvt = c_inst.add_ref( + gf.components.rectangle( + size=( + nf * l_gate + (nf - 1) * inter_sd_l + 2 * gate_lvt_enc, + w + 2 * gate_lvt_enc, + ), + layer=lvtn_layer, + ) + ) + lvt.move((sd_l - gate_lvt_enc, -gate_lvt_enc)) + + if type == "sky130_fd_pr__nfet_03v3_nvt" or type == "sky130_fd_pr__nfet_05v0_nvt": + nvt = c_inst.add_ref( + gf.components.rectangle( + size=( + nf * l_gate + (nf - 1) * inter_sd_l + 2 * gate_lvt_enc, + w + 2 * gate_lvt_enc, + ), + layer=lvtn_layer, + ) + ) + nvt.move((sd_l - gate_lvt_enc, -gate_lvt_enc)) + + if type == "sky130_fd_pr__nfet_03v3_nvt": + areaid_lvn = gf.components.rectangle( + size=(l_gate + 2 * areaid_lvn_enc, w + 2 * areaid_lvn_enc), + layer=areaid_lvn_layer, + ) + areaid_lvn_arr = c_inst.add_array( + component=areaid_lvn, + columns=nf, + rows=1, + spacing=[l_gate + inter_sd_l, 0], + ) + areaid_lvn_arr.move((sd_l - areaid_lvn_enc, sd_diff.ymin - areaid_lvn_enc)) + + # creating layout and cell in klayout + c.write_gds("nfet_temp.gds") + layout.read("nfet_temp.gds") cell_name = "sky_nfet_dev" - return layout.cell(cell_name) - #return c + # return c -#@gf.cell +# @gf.cell def draw_pfet( - layout , - l : float = 0.15, - w : float = 0.42, - sd_con_col : int = 1, - inter_sd_l : float = 0.5,#0.21 , - nf : int = 5, - grw : float = 0.17 , - type = "sky130_fd_pr__pfet_01v8", - bulk = "None", - con_bet_fin : int = 1, - gate_con_pos = "alternating", - interdig : int = 1, - patt = "", - #n = 1 - - -) -> gf.Component: - - ''' + layout, + l_gate: float = 0.15, + w: float = 0.42, + sd_con_col: int = 1, + inter_sd_l: float = 0.5, # 0.21 , + nf: int = 5, + grw: float = 0.17, + type="sky130_fd_pr__pfet_01v8", + bulk="None", + con_bet_fin: int = 1, + gate_con_pos="alternating", + interdig: int = 1, + patt="", + # n = 1 +) -> gf.Component: + """ Retern pfet - Args: - layout : layout object - l : Float of gate length + Args: + layout : layout object + l : Float of gate length w : Float of gate width - sd_con_col : integer of number of contacts columns contained in source and drain area - inter_sd_l : Float of source and drain diffusion length between fingers - nf : integer of number of fingers - M : integer of number of multipliers - grw : gaurd ring width when enabled - type : string of the device type + sd_con_col : integer of number of contacts columns contained in source and drain area + inter_sd_l : Float of source and drain diffusion length between fingers + nf : integer of number of fingers + M : integer of number of multipliers + grw : gaurd ring width when enabled + type : string of the device type bulk : String of bulk connection type (None, Bulk Tie, Guard Ring) con_bet_fin : boolean of having contacts for diffusion between fingers gate_con_pos : string of choosing the gate contact position (bottom, top, alternating ) - ''' + """ - # used layers and dimensions + # used layers and dimensions - end_cap: float = 0.2 # may be increases to solve the met1 drc prob - diff_tap_spacing : float = 0.32 - poly_tap_spacing : float = 0.27 + end_cap: float = 0.2 # may be increases to solve the met1 drc prob + diff_tap_spacing: float = 0.32 + poly_tap_spacing: float = 0.27 - diff_psdm_enc : float = 0.125 - tap_nsdm_enc : float = 0.125 - - nwell_enclosing : float = 0.18 + diff_psdm_enc: float = 0.125 + tap_nsdm_enc: float = 0.125 - if type == "sky130_fd_pr__pfet_g5v0d10v5" : + nwell_enclosing: float = 0.18 + + if type == "sky130_fd_pr__pfet_g5v0d10v5": nwell_enclosing = 0.34 - gate_npc_ext = 0.11 - npc_spacing = 0.27 - - - gate_lvt_enc : float = 0.18 - - gate_hvt_enc : float = 0.18 + npc_spacing = 0.27 + + gate_lvt_enc: float = 0.18 - licon_size = (0.17,0.17) - licon_spacing = (0.19,0.19) - licon_dt_enc = (0.04,0.06) + gate_hvt_enc: float = 0.18 + + licon_size = (0.17, 0.17) + licon_spacing = (0.19, 0.19) + licon_dt_enc = (0.04, 0.06) licon_t_enc = 0.12 - licon_p_enc = (0.05,0.08) + licon_p_enc = (0.05, 0.08) + # m1_m1lic_sp = 0.28+ mcon_enc[0] - end_cap - #m1_m1lic_sp = 0.28+ mcon_enc[0] - end_cap - - sd_l_con = ((sd_con_col)*licon_size[0]) + ((sd_con_col-1)*licon_spacing[0]) + 2*licon_dt_enc[0] + sd_l_con = ( + ((sd_con_col) * licon_size[0]) + + ((sd_con_col - 1) * licon_spacing[0]) + + 2 * licon_dt_enc[0] + ) sd_l = sd_l_con + 0.05 - - - # gds components to store a single instance and the generated device + # gds components to store a single instance and the generated device c = gf.Component("sky_pfet_dev") c_inst = gf.Component("dev_temp") - - - # generating sd diffusion + # generating sd diffusion - if interdig == 1 and nf >1 and nf != len(patt) and patt !="": + if interdig == 1 and nf > 1 and nf != len(patt) and patt != "": nf = len(patt) - - l_d = sd_l + nf*l + (nf-1)*inter_sd_l + sd_l # diffution total length - rect_d = gf.components.rectangle(size = (l_d,w), layer= diff_layer) - sd_diff = c_inst.add_ref(rect_d) - - - # generatin sd contacts - - sd_con = via_stack(x_range = (0,sd_l),y_range=(0,w),base_layer=diff_layer,metal_level=1) - c_inst.add_array(component=sd_con,columns=2,rows=1,spacing=(sd_l+ nf*l + (nf-1)*inter_sd_l,0)) - - if con_bet_fin == 1 and nf>1: - inter_sd_con = via_stack(x_range = (sd_l + l,sd_l + l+ inter_sd_l),y_range=(0,w),base_layer=diff_layer,metal_level=1) - c_inst.add_array(component=inter_sd_con,columns=nf-1,rows=1,spacing=(l+inter_sd_l,0)) - - - - # generating poly - - if (l <= licon_size[0] +2*licon_p_enc[0]) : - pc_x = licon_p_enc[0] +licon_size[0] + licon_p_enc[0] - - else : - pc_x = l - - pc_size = (pc_x, licon_p_enc[1] +licon_size[1] + licon_p_enc[1]) - - c_pc = gf.Component("poly con") - - rect_pc = c_pc.add_ref(gf.components.rectangle(size=pc_size,layer=poly_layer)) + l_d = sd_l + nf * l_gate + (nf - 1) * inter_sd_l + sd_l # diffution total length + rect_d = gf.components.rectangle(size=(l_d, w), layer=diff_layer) + sd_diff = c_inst.add_ref(rect_d) - poly_con = via_stack(x_range=(rect_pc.xmin, rect_pc.xmax),y_range=(rect_pc.ymin, rect_pc.ymax),base_layer=poly_layer,metal_level=1,li_enc_dir="H") + # generatin sd contacts + + sd_con = via_stack( + x_range=(0, sd_l), y_range=(0, w), base_layer=diff_layer, metal_level=1 + ) + c_inst.add_array( + component=sd_con, + columns=2, + rows=1, + spacing=(sd_l + nf * l_gate + (nf - 1) * inter_sd_l, 0), + ) + + if con_bet_fin == 1 and nf > 1: + inter_sd_con = via_stack( + x_range=(sd_l + l_gate, sd_l + l_gate + inter_sd_l), + y_range=(0, w), + base_layer=diff_layer, + metal_level=1, + ) + c_inst.add_array( + component=inter_sd_con, + columns=nf - 1, + rows=1, + spacing=(l_gate + inter_sd_l, 0), + ) + + # generating poly + + if l_gate <= licon_size[0] + 2 * licon_p_enc[0]: + pc_x = licon_p_enc[0] + licon_size[0] + licon_p_enc[0] + + else: + pc_x = l_gate + + pc_size = (pc_x, licon_p_enc[1] + licon_size[1] + licon_p_enc[1]) + + c_pc = gf.Component("poly con") + + rect_pc = c_pc.add_ref(gf.components.rectangle(size=pc_size, layer=poly_layer)) + + poly_con = via_stack( + x_range=(rect_pc.xmin, rect_pc.xmax), + y_range=(rect_pc.ymin, rect_pc.ymax), + base_layer=poly_layer, + metal_level=1, + li_enc_dir="H", + ) c_pc.add_ref(poly_con) - if nf == 1 : - poly = c_inst.add_ref(gf.components.rectangle(size=(l,w+2*end_cap),layer=poly_layer)) - poly.move((sd_l,-end_cap)) + if nf == 1: + poly = c_inst.add_ref( + gf.components.rectangle(size=(l_gate, w + 2 * end_cap), layer=poly_layer) + ) + poly.move((sd_l, -end_cap)) if gate_con_pos == "bottom": mv = 0 nr = 1 - elif gate_con_pos == "top" : - mv = pc_size[1]+ w + 2*end_cap + elif gate_con_pos == "top": + mv = pc_size[1] + w + 2 * end_cap nr = 1 - else : - mv = 0 + else: + mv = 0 nr = 2 - - pc = c_inst.add_array(component=c_pc,rows=nr,columns=1, spacing=(0,pc_size[1]+w+2*end_cap)) - pc.move((sd_l- ((pc_x - l)/2), -pc_size[1] - end_cap + mv)) - + pc = c_inst.add_array( + component=c_pc, + rows=nr, + columns=1, + spacing=(0, pc_size[1] + w + 2 * end_cap), + ) + pc.move((sd_l - ((pc_x - l_gate) / 2), -pc_size[1] - end_cap + mv)) - else : - + else: w_p1 = end_cap + w + end_cap # poly total width - if inter_sd_l < (npc_spacing + 2*gate_npc_ext) : - + if inter_sd_l < (npc_spacing + 2 * gate_npc_ext): if gate_con_pos == "alternating": w_p1 += 0.2 w_p2 = w_p1 e_c = 0.2 - else : - w_p2 = w_p1 + licon_p_enc[1] +licon_size[1] + licon_p_enc[1] + npc_spacing + 0.1 + else: + w_p2 = ( + w_p1 + + licon_p_enc[1] + + licon_size[1] + + licon_p_enc[1] + + npc_spacing + + 0.1 + ) e_c = 0 - if gate_con_pos == "bottom" : - p_mv = -end_cap - (w_p2-w_p1) - else : + if gate_con_pos == "bottom": + p_mv = -end_cap - (w_p2 - w_p1) + else: p_mv = -end_cap - else : + else: w_p2 = w_p1 p_mv = -end_cap e_c = 0 - - rect_p1 = gf.components.rectangle(size = (l,w_p1), layer= poly_layer) - rect_p2 = gf.components.rectangle(size = (l,w_p2), layer= poly_layer) - poly1 = c_inst.add_array(rect_p1, rows= 1 , columns= ceil(nf/2) , spacing= [2*(inter_sd_l+l), 0 ]) - poly1.move((sd_l,-end_cap - e_c)) - - poly2 = c_inst.add_array(rect_p2, rows= 1 , columns= floor(nf/2) , spacing= [2*(inter_sd_l+l), 0 ]) - poly2.move((sd_l+l+inter_sd_l,p_mv)) - - - #generating poly contacts setups + rect_p1 = gf.components.rectangle(size=(l_gate, w_p1), layer=poly_layer) + rect_p2 = gf.components.rectangle(size=(l_gate, w_p2), layer=poly_layer) + poly1 = c_inst.add_array( + rect_p1, + rows=1, + columns=ceil(nf / 2), + spacing=[2 * (inter_sd_l + l_gate), 0], + ) + poly1.move((sd_l, -end_cap - e_c)) + + poly2 = c_inst.add_array( + rect_p2, + rows=1, + columns=floor(nf / 2), + spacing=[2 * (inter_sd_l + l_gate), 0], + ) + poly2.move((sd_l + l_gate + inter_sd_l, p_mv)) + + # generating poly contacts setups if gate_con_pos == "bottom": mv_1 = 0 - mv_2 = - (w_p2-w_p1) - elif gate_con_pos == "top" : - mv_1 = pc_size[1]+ w_p1 - mv_2 = pc_size[1]+ w_p2 - else : + mv_2 = -(w_p2 - w_p1) + elif gate_con_pos == "top": + mv_1 = pc_size[1] + w_p1 + mv_2 = pc_size[1] + w_p2 + else: mv_1 = -e_c - mv_2 = pc_size[1]+ w_p2 - - - nc1 = ceil(nf/2) - nc2 = floor(nf/2) - - pc_spacing = 2*(inter_sd_l + l) - - # generating poly contacts - - pc1 = c_inst.add_array(component=c_pc,rows=1,columns=nc1,spacing=(pc_spacing,0)) - pc1.move((sd_l- ((pc_x - l)/2), -pc_size[1] - end_cap + mv_1)) - - pc2 = c_inst.add_array(component=c_pc,rows=1,columns=nc2,spacing=(pc_spacing,0)) - pc2.move((sd_l- ((pc_x - l)/2) + (inter_sd_l + l), -pc_size[1] - end_cap + mv_2)) - - - - if interdig == 1 : - if nf == len(patt) : + mv_2 = pc_size[1] + w_p2 + + nc1 = ceil(nf / 2) + nc2 = floor(nf / 2) + + pc_spacing = 2 * (inter_sd_l + l_gate) + + # generating poly contacts + + pc1 = c_inst.add_array( + component=c_pc, rows=1, columns=nc1, spacing=(pc_spacing, 0) + ) + pc1.move((sd_l - ((pc_x - l_gate) / 2), -pc_size[1] - end_cap + mv_1)) + + pc2 = c_inst.add_array( + component=c_pc, rows=1, columns=nc2, spacing=(pc_spacing, 0) + ) + pc2.move( + ( + sd_l - ((pc_x - l_gate) / 2) + (inter_sd_l + l_gate), + -pc_size[1] - end_cap + mv_2, + ) + ) + + if interdig == 1: + if nf == len(patt): pat = list(patt) - nt = [] # list to store the symbols of transistors and thier number nt(number of transistors) + nt = ( + [] + ) # list to store the symbols of transistors and thier number nt(number of transistors) [nt.append(x) for x in pat if x not in nt] nl = len(nt) m2_spacing = 0.14 - via1_size = (0.15,0.15) - via1_enc = (0.085,0.055) - via1_spacing = (0.17,0.17) - via2_size = (0.2,0.2) - via2_enc = (0.085,0.065) - via2_spacing = (0.2,0.2) + via1_size = (0.15, 0.15) + via1_enc = (0.085, 0.055) + via1_spacing = (0.17, 0.17) + via2_size = (0.2, 0.2) + via2_enc = (0.085, 0.065) - m2_y = via1_size[1]+2*via1_enc[1] - m2 = gf.components.rectangle(size=(sd_diff.xmax - sd_diff.xmin, m2_y),layer=m2_layer) + m2_y = via1_size[1] + 2 * via1_enc[1] + m2 = gf.components.rectangle( + size=(sd_diff.xmax - sd_diff.xmin, m2_y), layer=m2_layer + ) if gate_con_pos == "alternating": pat_o = [] pat_e = [] for i in range(int(nf)): - if i%2 == 0 : + if i % 2 == 0: pat_e.append(pat[i]) - else : + else: pat_o.append(pat[i]) - + nt_o = [] [nt_o.append(x) for x in pat_o if x not in nt_o] @@ -737,221 +1214,580 @@ def draw_pfet( nl_b = len(nt_e) nl_u = len(nt_o) - - m2_y = via2_size[1]+2*via2_enc[1] - m2 = gf.components.rectangle(size=(sd_diff.xmax - sd_diff.xmin, m2_y),layer=m2_layer) - m2_arrb = c_inst.add_array(component=m2, columns=1, rows=nl_b,spacing= (0, -m2_y - m2_spacing)) + m2_y = via2_size[1] + 2 * via2_enc[1] + m2 = gf.components.rectangle( + size=(sd_diff.xmax - sd_diff.xmin, m2_y), layer=m2_layer + ) + + m2_arrb = c_inst.add_array( + component=m2, + columns=1, + rows=nl_b, + spacing=(0, -m2_y - m2_spacing), + ) m2_arrb.movey(pc1.ymin - m2_spacing - m2_y) - m2_arru = c_inst.add_array(component=m2, columns=1, rows=nl_u,spacing= (0, m2_y + m2_spacing)) + m2_arru = c_inst.add_array( + component=m2, + columns=1, + rows=nl_u, + spacing=(0, m2_y + m2_spacing), + ) m2_arru.movey(pc2.ymax + m2_spacing) - for i in range(nl_u): - for j in range(floor(nf/2)): + for j in range(floor(nf / 2)): if pat_o[j] == nt_o[i]: - m1 = c_inst.add_ref(gf.components.rectangle( - size=(poly_con.xmax - poly_con.xmin , ((pc2.ymax + (i+1)*(m2_spacing+ m2_y)) - pc2.ymin )),layer=m1_layer)) - m1.move(((sd_l- ((poly_con.xmax - poly_con.xmin - l)/2) + (2*j +1)*(l+inter_sd_l)) - , (pc2.ymin+0.06))) - via1_dr = via_generator(x_range=(m1.xmin,m1.xmax),y_range=(m2_arru.ymin + i*(m2_y+m2_spacing),m2_arru.ymin + i*(m2_y+m2_spacing)+m2_y) - , via_enclosure=via1_enc,via_layer=via1_layer,via_size=via1_size,via_spacing=via1_spacing) + m1 = c_inst.add_ref( + gf.components.rectangle( + size=( + poly_con.xmax - poly_con.xmin, + ( + ( + pc2.ymax + + (i + 1) * (m2_spacing + m2_y) + ) + - pc2.ymin + ), + ), + layer=m1_layer, + ) + ) + m1.move( + ( + ( + sd_l + - ( + (poly_con.xmax - poly_con.xmin - l_gate) + / 2 + ) + + (2 * j + 1) * (l_gate + inter_sd_l) + ), + (pc2.ymin + 0.06), + ) + ) + via1_dr = via_generator( + x_range=(m1.xmin, m1.xmax), + y_range=( + m2_arru.ymin + i * (m2_y + m2_spacing), + m2_arru.ymin + i * (m2_y + m2_spacing) + m2_y, + ), + via_enclosure=via1_enc, + via_layer=via1_layer, + via_size=via1_size, + via_spacing=via1_spacing, + ) via1 = c_inst.add_ref(via1_dr) - c_inst.add_label(f'{pat_o[j]}',position=((via1.xmax+via1.xmin)/2, (via1.ymax+via1.ymin)/2),layer=m1_lbl) - #c_inst.add_label(f'G_{pat_o[j]}{n}',position=((via1.xmax+via1.xmin)/2, (pc2.ymin + pc2.ymax)/2),layer=m1_lbl) + c_inst.add_label( + f"{pat_o[j]}", + position=( + (via1.xmax + via1.xmin) / 2, + (via1.ymax + via1.ymin) / 2, + ), + layer=m1_lbl, + ) + # c_inst.add_label(f'G_{pat_o[j]}{n}',position=((via1.xmax+via1.xmin)/2, (pc2.ymin + pc2.ymax)/2),layer=m1_lbl) - - for i in range(nl_b): - for j in range(ceil(nf/2)): + for j in range(ceil(nf / 2)): if pat_e[j] == nt_e[i]: - - m1 = c_inst.add_ref(gf.components.rectangle( - size=(poly_con.xmax - poly_con.xmin , ((pc1.ymax + (i+1)*(m2_spacing+ m2_y)) -pc1.ymin )),layer=m1_layer)) - m1.move(((sd_l- ((poly_con.xmax - poly_con.xmin - l)/2) + (2*j)*(l+inter_sd_l)), -(m1.ymax - m1.ymin) + (pc1.ymax-0.06))) - via1_dr = via_generator(x_range=(m1.xmin,m1.xmax),y_range=(m2_arrb.ymax - i*(m2_spacing+m2_y) - m2_y,m2_arrb.ymax - i*(m2_spacing+m2_y)) - , via_enclosure=via1_enc,via_layer=via1_layer,via_size=via1_size,via_spacing=via1_spacing) + m1 = c_inst.add_ref( + gf.components.rectangle( + size=( + poly_con.xmax - poly_con.xmin, + ( + ( + pc1.ymax + + (i + 1) * (m2_spacing + m2_y) + ) + - pc1.ymin + ), + ), + layer=m1_layer, + ) + ) + m1.move( + ( + ( + sd_l + - ( + (poly_con.xmax - poly_con.xmin - l_gate) + / 2 + ) + + (2 * j) * (l_gate + inter_sd_l) + ), + -(m1.ymax - m1.ymin) + (pc1.ymax - 0.06), + ) + ) + via1_dr = via_generator( + x_range=(m1.xmin, m1.xmax), + y_range=( + m2_arrb.ymax - i * (m2_spacing + m2_y) - m2_y, + m2_arrb.ymax - i * (m2_spacing + m2_y), + ), + via_enclosure=via1_enc, + via_layer=via1_layer, + via_size=via1_size, + via_spacing=via1_spacing, + ) via1 = c_inst.add_ref(via1_dr) - c_inst.add_label(f'{pat_e[j]}',position=((via1.xmax+via1.xmin)/2, (via1.ymax+via1.ymin)/2),layer=m1_lbl) - #c_inst.add_label(f'G_{pat_e[j]}{n}',position=((via1.xmax+via1.xmin)/2, (pc1.ymin + pc1.ymax)/2),layer=m1_lbl) - - - m3_x = via2_size[0] + 2*via2_enc[0] + c_inst.add_label( + f"{pat_e[j]}", + position=( + (via1.xmax + via1.xmin) / 2, + (via1.ymax + via1.ymin) / 2, + ), + layer=m1_lbl, + ) + # c_inst.add_label(f'G_{pat_e[j]}{n}',position=((via1.xmax+via1.xmin)/2, (pc1.ymin + pc1.ymax)/2),layer=m1_lbl) + + m3_x = via2_size[0] + 2 * via2_enc[0] m3_spacing = 0.3 - + for i in range(nl_b): for j in range(nl_u): if nt_e[i] == nt_o[j]: - - m2_join_b = c_inst.add_ref(gf.components.rectangle(size=(m2_y+ (i+1)*(m3_spacing+m3_x),m2_y),layer=m2_layer) - .move((m2_arrb.xmin -(m2_y + (i+1)*(m3_spacing+m3_x)),m2_arrb.ymax - i*(m2_spacing+m2_y) - m2_y))) - m2_join_u = c_inst.add_ref(gf.components.rectangle(size=(m2_y+ (i+1)*(m3_spacing+m3_x),m2_y),layer=m2_layer) - .move((m2_arru.xmin -( m2_y + (i+1)*(m3_spacing+m3_x) ),m2_arru.ymin + j*(m2_spacing+m2_y)))) - m3 = c_inst.add_ref(gf.components.rectangle(size=(m3_x, m2_join_u.ymax - m2_join_b.ymin),layer=m1_layer)) - m3.move((m2_join_b.xmin,m2_join_b.ymin)) - via2_dr = via_generator(x_range=(m3.xmin,m3.xmax),y_range=(m2_join_b.ymin,m2_join_b.ymax),via_enclosure=via1_enc,via_size=via1_size - ,via_layer=via1_layer,via_spacing=via1_spacing) - via2 = c_inst.add_array(component=via2_dr,columns=1,rows=2,spacing=(0,m2_join_u.ymin-m2_join_b.ymin)) - - - - elif gate_con_pos == "top" : - - m2_arr = c_inst.add_array(component=m2, columns=1, rows=nl , spacing=(0,m2.ymax-m2.ymin + m2_spacing)) + m2_join_b = c_inst.add_ref( + gf.components.rectangle( + size=( + m2_y + (i + 1) * (m3_spacing + m3_x), + m2_y, + ), + layer=m2_layer, + ).move( + ( + m2_arrb.xmin + - (m2_y + (i + 1) * (m3_spacing + m3_x)), + m2_arrb.ymax + - i * (m2_spacing + m2_y) + - m2_y, + ) + ) + ) + m2_join_u = c_inst.add_ref( + gf.components.rectangle( + size=( + m2_y + (i + 1) * (m3_spacing + m3_x), + m2_y, + ), + layer=m2_layer, + ).move( + ( + m2_arru.xmin + - (m2_y + (i + 1) * (m3_spacing + m3_x)), + m2_arru.ymin + j * (m2_spacing + m2_y), + ) + ) + ) + m3 = c_inst.add_ref( + gf.components.rectangle( + size=(m3_x, m2_join_u.ymax - m2_join_b.ymin), + layer=m1_layer, + ) + ) + m3.move((m2_join_b.xmin, m2_join_b.ymin)) + via2_dr = via_generator( + x_range=(m3.xmin, m3.xmax), + y_range=(m2_join_b.ymin, m2_join_b.ymax), + via_enclosure=via1_enc, + via_size=via1_size, + via_layer=via1_layer, + via_spacing=via1_spacing, + ) + c_inst.add_array( + component=via2_dr, + columns=1, + rows=2, + spacing=(0, m2_join_u.ymin - m2_join_b.ymin), + ) + + elif gate_con_pos == "top": + m2_arr = c_inst.add_array( + component=m2, + columns=1, + rows=nl, + spacing=(0, m2.ymax - m2.ymin + m2_spacing), + ) m2_arr.movey(pc2.ymax + m2_spacing) - + for i in range(nl): for j in range(int(nf)): if pat[j] == nt[i]: - m1 = c_inst.add_ref(gf.components.rectangle( - size=(poly_con.xmax - poly_con.xmin , ((pc2.ymax + (i+1)*(m2_spacing+ m2_y)) - ((1-j%2)*pc1.ymin) - (j%2)*pc2.ymin )),layer=m1_layer)) - m1.move(((sd_l- ((poly_con.xmax - poly_con.xmin - l)/2) + j*(l+inter_sd_l)) - , (1-j%2)*(pc1.ymin+0.06) + (j%2)*(pc2.ymin+0.06))) - via1_dr = via_generator(x_range=(m1.xmin,m1.xmax),y_range=(m2_arr.ymin + i*(m2_spacing+m2_y),m2_arr.ymin + i*(m2_spacing+m2_y)+m2_y) - , via_enclosure=via1_enc,via_layer=via1_layer,via_size=via1_size,via_spacing=via1_spacing) + m1 = c_inst.add_ref( + gf.components.rectangle( + size=( + poly_con.xmax - poly_con.xmin, + ( + ( + pc2.ymax + + (i + 1) * (m2_spacing + m2_y) + ) + - ((1 - j % 2) * pc1.ymin) + - (j % 2) * pc2.ymin + ), + ), + layer=m1_layer, + ) + ) + m1.move( + ( + ( + sd_l + - ( + (poly_con.xmax - poly_con.xmin - l_gate) + / 2 + ) + + j * (l_gate + inter_sd_l) + ), + (1 - j % 2) * (pc1.ymin + 0.06) + + (j % 2) * (pc2.ymin + 0.06), + ) + ) + via1_dr = via_generator( + x_range=(m1.xmin, m1.xmax), + y_range=( + m2_arr.ymin + i * (m2_spacing + m2_y), + m2_arr.ymin + i * (m2_spacing + m2_y) + m2_y, + ), + via_enclosure=via1_enc, + via_layer=via1_layer, + via_size=via1_size, + via_spacing=via1_spacing, + ) via1 = c_inst.add_ref(via1_dr) - c_inst.add_label(f'{pat[j]}',position=((via1.xmax+via1.xmin)/2, (via1.ymax+via1.ymin)/2),layer=m1_lbl) - #c_inst.add_label(f'G_{pat[j]}{n}',position=((via1.xmax+via1.xmin)/2, (pc2.ymin + pc2.ymax)/2),layer=m1_lbl) - - - elif gate_con_pos == "bottom" : - - m2_arr = c_inst.add_array(component=m2, columns=1, rows=nl , spacing=(0,-m2_y - m2_spacing)) + c_inst.add_label( + f"{pat[j]}", + position=( + (via1.xmax + via1.xmin) / 2, + (via1.ymax + via1.ymin) / 2, + ), + layer=m1_lbl, + ) + # c_inst.add_label(f'G_{pat[j]}{n}',position=((via1.xmax+via1.xmin)/2, (pc2.ymin + pc2.ymax)/2),layer=m1_lbl) + + elif gate_con_pos == "bottom": + m2_arr = c_inst.add_array( + component=m2, + columns=1, + rows=nl, + spacing=(0, -m2_y - m2_spacing), + ) m2_arr.movey(pc2.ymin - m2_spacing - m2_y) - + for i in range(nl): for j in range(int(nf)): if pat[j] == nt[i]: - - m1 = c_inst.add_ref(gf.components.rectangle( - size=(poly_con.xmax - poly_con.xmin , ((pc1.ymax + (i+1)*(m2_spacing+ m2_y)) - (j%2)*pc1.ymin - (1-j%2)*pc2.ymin)),layer=m1_layer)) - m1.move(((sd_l- ((poly_con.xmax - poly_con.xmin - l)/2) + j*(l+inter_sd_l)), -(m1.ymax - m1.ymin) + (1-j%2)*(pc1.ymax-0.06)+ (j%2)*(pc2.ymax-0.06))) - via1_dr = via_generator(x_range=(m1.xmin,m1.xmax),y_range=(m2_arr.ymax - i*(m2_spacing+m2_y) -m2_y,m2_arr.ymax - i*(m2_spacing+m2_y) ) - , via_enclosure=via1_enc,via_layer=via1_layer,via_size=via1_size,via_spacing=via1_spacing) + m1 = c_inst.add_ref( + gf.components.rectangle( + size=( + poly_con.xmax - poly_con.xmin, + ( + ( + pc1.ymax + + (i + 1) * (m2_spacing + m2_y) + ) + - (j % 2) * pc1.ymin + - (1 - j % 2) * pc2.ymin + ), + ), + layer=m1_layer, + ) + ) + m1.move( + ( + ( + sd_l + - ( + (poly_con.xmax - poly_con.xmin - l_gate) + / 2 + ) + + j * (l_gate + inter_sd_l) + ), + -(m1.ymax - m1.ymin) + + (1 - j % 2) * (pc1.ymax - 0.06) + + (j % 2) * (pc2.ymax - 0.06), + ) + ) + via1_dr = via_generator( + x_range=(m1.xmin, m1.xmax), + y_range=( + m2_arr.ymax - i * (m2_spacing + m2_y) - m2_y, + m2_arr.ymax - i * (m2_spacing + m2_y), + ), + via_enclosure=via1_enc, + via_layer=via1_layer, + via_size=via1_size, + via_spacing=via1_spacing, + ) via1 = c_inst.add_ref(via1_dr) - c_inst.add_label(f'{pat[j]}',position=((via1.xmax+via1.xmin)/2, (via1.ymax+via1.ymin)/2),layer=m1_lbl) - #c_inst.add_label(f'G_{pat[j]}{n}',position=((via1.xmax+via1.xmin)/2, (pc2.ymin + pc2.ymax)/2),layer=m1_lbl) - - - # generating bulk + c_inst.add_label( + f"{pat[j]}", + position=( + (via1.xmax + via1.xmin) / 2, + (via1.ymax + via1.ymin) / 2, + ), + layer=m1_lbl, + ) + # c_inst.add_label(f'G_{pat[j]}{n}',position=((via1.xmax+via1.xmin)/2, (pc2.ymin + pc2.ymax)/2),layer=m1_lbl) + + # generating bulk if bulk == "None": - psdm = c_inst.add_ref(gf.components.rectangle(size=(l_d+ 2*diff_psdm_enc, w+ 2*diff_psdm_enc),layer= psdm_layer)) - psdm.move((-diff_psdm_enc,-diff_psdm_enc)) - + psdm = c_inst.add_ref( + gf.components.rectangle( + size=(l_d + 2 * diff_psdm_enc, w + 2 * diff_psdm_enc), layer=psdm_layer + ) + ) + psdm.move((-diff_psdm_enc, -diff_psdm_enc)) elif bulk == "bulk tie": - rect_bulk = c_inst.add_ref(gf.components.rectangle(size=(1.3*sd_l,w),layer=tap_layer)) - rect_bulk.connect("e1",destination=sd_diff.ports["e3"]) - psdm = c_inst.add_ref(gf.components.rectangle(size=(sd_diff.xmax - sd_diff.xmin + diff_psdm_enc,w + 2*diff_psdm_enc),layer=psdm_layer)) - psdm.move((-diff_psdm_enc,-diff_psdm_enc)) - nsdm = c_inst.add_ref(gf.components.rectangle(size=(rect_bulk.xmax - rect_bulk.xmin +tap_nsdm_enc, w+ 2*tap_nsdm_enc), layer= nsdm_layer)) - nsdm.move((rect_bulk.xmin,rect_bulk.ymin - tap_nsdm_enc)) - - bulk_con = via_stack(x_range= (rect_bulk.xmin+0.1,rect_bulk.xmax-0.1),y_range=(rect_bulk.ymin,rect_bulk.ymax),base_layer=tap_layer,metal_level=0) + rect_bulk = c_inst.add_ref( + gf.components.rectangle(size=(1.3 * sd_l, w), layer=tap_layer) + ) + rect_bulk.connect("e1", destination=sd_diff.ports["e3"]) + psdm = c_inst.add_ref( + gf.components.rectangle( + size=( + sd_diff.xmax - sd_diff.xmin + diff_psdm_enc, + w + 2 * diff_psdm_enc, + ), + layer=psdm_layer, + ) + ) + psdm.move((-diff_psdm_enc, -diff_psdm_enc)) + nsdm = c_inst.add_ref( + gf.components.rectangle( + size=( + rect_bulk.xmax - rect_bulk.xmin + tap_nsdm_enc, + w + 2 * tap_nsdm_enc, + ), + layer=nsdm_layer, + ) + ) + nsdm.move((rect_bulk.xmin, rect_bulk.ymin - tap_nsdm_enc)) + + bulk_con = via_stack( + x_range=(rect_bulk.xmin + 0.1, rect_bulk.xmax - 0.1), + y_range=(rect_bulk.ymin, rect_bulk.ymax), + base_layer=tap_layer, + metal_level=0, + ) c_inst.add_ref(bulk_con) - - elif bulk == "Gaurd Ring": - - psdm = c_inst.add_ref(gf.components.rectangle(size=(l_d+ 2*diff_psdm_enc, w+ 2*diff_psdm_enc),layer= psdm_layer)) - psdm.move((-diff_psdm_enc,-diff_psdm_enc)) + psdm = c_inst.add_ref( + gf.components.rectangle( + size=(l_d + 2 * diff_psdm_enc, w + 2 * diff_psdm_enc), layer=psdm_layer + ) + ) + psdm.move((-diff_psdm_enc, -diff_psdm_enc)) c.add_ref(c_inst) - - c_temp = gf.Component("temp_store") - rect_bulk_in = c_temp.add_ref(gf.components.rectangle(size=((c_inst.xmax - c_inst.xmin) + 2*diff_tap_spacing, - (c_inst.ymax - c_inst.ymin) + 2*poly_tap_spacing ) - , layer= tap_layer)) - - rect_bulk_in.move((c_inst.xmin-diff_tap_spacing,c_inst.ymin - poly_tap_spacing)) - rect_bulk_out = c_temp.add_ref(gf.components.rectangle(size=((rect_bulk_in.xmax - rect_bulk_in.xmin) + 2*grw,(rect_bulk_in.ymax - rect_bulk_in.ymin) + 2*grw ) - , layer= tap_layer)) - rect_bulk_out.move((rect_bulk_in.xmin - grw , rect_bulk_in.ymin -grw )) - B = c.add_ref(gf.geometry.boolean(A= rect_bulk_out , B = rect_bulk_in , operation= "A-B", layer= tap_layer) ) - - nsdm_in = c_temp.add_ref(gf.components.rectangle(size=((rect_bulk_in.xmax - rect_bulk_in.xmin) - 2*tap_nsdm_enc, (rect_bulk_in.ymax - rect_bulk_in.ymin) - 2*tap_nsdm_enc ) - , layer= nsdm_layer)) - nsdm_in.move((rect_bulk_in.xmin + tap_nsdm_enc, rect_bulk_in.ymin + tap_nsdm_enc)) - nsdm_out = c_temp.add_ref(gf.components.rectangle(size=((rect_bulk_out.xmax - rect_bulk_out.xmin) + 2*tap_nsdm_enc, (rect_bulk_out.ymax - rect_bulk_out.ymin) + 2*tap_nsdm_enc ) - , layer= nsdm_layer)) - nsdm_out.move((rect_bulk_out.xmin - tap_nsdm_enc, rect_bulk_out.ymin - tap_nsdm_enc)) - nsdm = c.add_ref(gf.geometry.boolean(A= nsdm_out , B = nsdm_in , operation= "A-B", layer= nsdm_layer) ) - - # adding contacts - - if grw < licon_size[0] + 2*licon_t_enc : - g_con_range = (B.ymin , B.ymax ) - else : - g_con_range = (B.ymin , B.ymax ) - - ring_con_bot = c.add_ref(via_generator(x_range=(rect_bulk_in.xmin+0.17,rect_bulk_in.xmax-0.17),y_range=(rect_bulk_out.ymin,rect_bulk_in.ymin) - , via_enclosure=licon_dt_enc, via_layer=licon_layer,via_size=licon_size,via_spacing=licon_spacing)) - - ring_con_up = c.add_ref(via_generator(x_range=(rect_bulk_in.xmin+0.17,rect_bulk_in.xmax-0.17),y_range=(rect_bulk_in.ymax,rect_bulk_out.ymax) - , via_enclosure=licon_dt_enc, via_layer=licon_layer,via_size=licon_size,via_spacing=licon_spacing)) - - ring_con_r = c.add_ref(via_generator(x_range=(rect_bulk_out.xmin,rect_bulk_in.xmin),y_range=g_con_range - , via_enclosure=licon_dt_enc, via_layer=licon_layer,via_size=licon_size,via_spacing=licon_spacing)) - - ring_con_l = c.add_ref(via_generator(x_range=(rect_bulk_in.xmax,rect_bulk_out.xmax),y_range=g_con_range - , via_enclosure=licon_dt_enc, via_layer=licon_layer,via_size=licon_size,via_spacing=licon_spacing)) - - tap_li_in = c_temp.add_ref(gf.components.rectangle(size=((l_d ) + 2*diff_tap_spacing, - (c_inst.ymax - c_inst.ymin) + 2*poly_tap_spacing ) - , layer= li_layer)) - tap_li_in.move((-diff_tap_spacing,c_inst.ymin - poly_tap_spacing)) - tap_li_out = c_temp.add_ref(gf.components.rectangle(size=((rect_bulk_in.xmax - rect_bulk_in.xmin) + 2*grw,(rect_bulk_in.ymax - rect_bulk_in.ymin) + 2*grw ) - , layer= li_layer)) - tap_li_out.move((rect_bulk_in.xmin - grw , rect_bulk_in.ymin -grw )) - li = c.add_ref(gf.geometry.boolean(A= rect_bulk_out , B = rect_bulk_in , operation= "A-B", layer= li_layer) ) - - - # generating nwell - nwell = c.add_ref(gf.components.rectangle(size=(nsdm_out.xmax-nsdm_out.xmin + 2*nwell_enclosing, nsdm_out.ymax-nsdm_out.ymin + 2*nwell_enclosing) - , layer=nwell_layer)) - nwell.move((nsdm_out.xmin - nwell_enclosing, nsdm_out.ymin - nwell_enclosing )) - - - + c_temp = gf.Component("temp_store") + rect_bulk_in = c_temp.add_ref( + gf.components.rectangle( + size=( + (c_inst.xmax - c_inst.xmin) + 2 * diff_tap_spacing, + (c_inst.ymax - c_inst.ymin) + 2 * poly_tap_spacing, + ), + layer=tap_layer, + ) + ) + + rect_bulk_in.move( + (c_inst.xmin - diff_tap_spacing, c_inst.ymin - poly_tap_spacing) + ) + rect_bulk_out = c_temp.add_ref( + gf.components.rectangle( + size=( + (rect_bulk_in.xmax - rect_bulk_in.xmin) + 2 * grw, + (rect_bulk_in.ymax - rect_bulk_in.ymin) + 2 * grw, + ), + layer=tap_layer, + ) + ) + rect_bulk_out.move((rect_bulk_in.xmin - grw, rect_bulk_in.ymin - grw)) + B = c.add_ref( + gf.geometry.boolean( + A=rect_bulk_out, B=rect_bulk_in, operation="A-B", layer=tap_layer + ) + ) + + nsdm_in = c_temp.add_ref( + gf.components.rectangle( + size=( + (rect_bulk_in.xmax - rect_bulk_in.xmin) - 2 * tap_nsdm_enc, + (rect_bulk_in.ymax - rect_bulk_in.ymin) - 2 * tap_nsdm_enc, + ), + layer=nsdm_layer, + ) + ) + nsdm_in.move( + (rect_bulk_in.xmin + tap_nsdm_enc, rect_bulk_in.ymin + tap_nsdm_enc) + ) + nsdm_out = c_temp.add_ref( + gf.components.rectangle( + size=( + (rect_bulk_out.xmax - rect_bulk_out.xmin) + 2 * tap_nsdm_enc, + (rect_bulk_out.ymax - rect_bulk_out.ymin) + 2 * tap_nsdm_enc, + ), + layer=nsdm_layer, + ) + ) + nsdm_out.move( + (rect_bulk_out.xmin - tap_nsdm_enc, rect_bulk_out.ymin - tap_nsdm_enc) + ) + nsdm = c.add_ref( + gf.geometry.boolean( + A=nsdm_out, B=nsdm_in, operation="A-B", layer=nsdm_layer + ) + ) + + # adding contacts + + if grw < licon_size[0] + 2 * licon_t_enc: + g_con_range = (B.ymin, B.ymax) + else: + g_con_range = (B.ymin, B.ymax) + + c.add_ref( + via_generator( + x_range=(rect_bulk_in.xmin + 0.17, rect_bulk_in.xmax - 0.17), + y_range=(rect_bulk_out.ymin, rect_bulk_in.ymin), + via_enclosure=licon_dt_enc, + via_layer=licon_layer, + via_size=licon_size, + via_spacing=licon_spacing, + ) + ) + + c.add_ref( + via_generator( + x_range=(rect_bulk_in.xmin + 0.17, rect_bulk_in.xmax - 0.17), + y_range=(rect_bulk_in.ymax, rect_bulk_out.ymax), + via_enclosure=licon_dt_enc, + via_layer=licon_layer, + via_size=licon_size, + via_spacing=licon_spacing, + ) + ) + + c.add_ref( + via_generator( + x_range=(rect_bulk_out.xmin, rect_bulk_in.xmin), + y_range=g_con_range, + via_enclosure=licon_dt_enc, + via_layer=licon_layer, + via_size=licon_size, + via_spacing=licon_spacing, + ) + ) + + c.add_ref( + via_generator( + x_range=(rect_bulk_in.xmax, rect_bulk_out.xmax), + y_range=g_con_range, + via_enclosure=licon_dt_enc, + via_layer=licon_layer, + via_size=licon_size, + via_spacing=licon_spacing, + ) + ) + + tap_li_in = c_temp.add_ref( + gf.components.rectangle( + size=( + (l_d) + 2 * diff_tap_spacing, + (c_inst.ymax - c_inst.ymin) + 2 * poly_tap_spacing, + ), + layer=li_layer, + ) + ) + tap_li_in.move((-diff_tap_spacing, c_inst.ymin - poly_tap_spacing)) + tap_li_out = c_temp.add_ref( + gf.components.rectangle( + size=( + (rect_bulk_in.xmax - rect_bulk_in.xmin) + 2 * grw, + (rect_bulk_in.ymax - rect_bulk_in.ymin) + 2 * grw, + ), + layer=li_layer, + ) + ) + tap_li_out.move((rect_bulk_in.xmin - grw, rect_bulk_in.ymin - grw)) + c.add_ref( + gf.geometry.boolean( + A=rect_bulk_out, B=rect_bulk_in, operation="A-B", layer=li_layer + ) + ) + + # generating nwell + nwell = c.add_ref( + gf.components.rectangle( + size=( + nsdm_out.xmax - nsdm_out.xmin + 2 * nwell_enclosing, + nsdm_out.ymax - nsdm_out.ymin + 2 * nwell_enclosing, + ), + layer=nwell_layer, + ) + ) + nwell.move((nsdm_out.xmin - nwell_enclosing, nsdm_out.ymin - nwell_enclosing)) if bulk != "Gaurd Ring": c.add_ref(c_inst) - # nwell generation - nwell = c.add_ref(gf.components.rectangle(size=(c_inst.xmax - c_inst.xmin + 2*nwell_enclosing - , (c_inst.ymax-c_inst.ymin) + 2*nwell_enclosing),layer=nwell_layer)) - nwell.move((c_inst.xmin-nwell_enclosing,c_inst.ymin-nwell_enclosing)) - + # nwell generation + nwell = c.add_ref( + gf.components.rectangle( + size=( + c_inst.xmax - c_inst.xmin + 2 * nwell_enclosing, + (c_inst.ymax - c_inst.ymin) + 2 * nwell_enclosing, + ), + layer=nwell_layer, + ) + ) + nwell.move((c_inst.xmin - nwell_enclosing, c_inst.ymin - nwell_enclosing)) if type == "sky130_fd_pr__pfet_01v8_lvt": - lvt = c_inst.add_ref(gf.components.rectangle(size= (nf*l + (nf-1)*inter_sd_l + 2*gate_lvt_enc, w + 2*gate_lvt_enc) - , layer= lvtn_layer)) - lvt.move((sd_l - gate_lvt_enc,-gate_lvt_enc)) - + lvt = c_inst.add_ref( + gf.components.rectangle( + size=( + nf * l_gate + (nf - 1) * inter_sd_l + 2 * gate_lvt_enc, + w + 2 * gate_lvt_enc, + ), + layer=lvtn_layer, + ) + ) + lvt.move((sd_l - gate_lvt_enc, -gate_lvt_enc)) if type == "sky130_fd_pr__pfet_01v8_hvt": - hvt = c_inst.add_ref(gf.components.rectangle(size= (nf*l + (nf-1)*inter_sd_l + 2*gate_hvt_enc, w + 2*gate_hvt_enc) - , layer= hvtp_layer)) - hvt.move((sd_l - gate_hvt_enc,-gate_hvt_enc)) - - if type == "sky130_fd_pr__pfet_g5v0d10v5" : - hvi = c.add_ref(gf.components.rectangle(size=(nwell.xmax-nwell.xmin,nwell.ymax-nwell.ymin),layer=hvi_layer)) - hvi.move((nwell.xmin,nwell.ymin)) - - - # creating layout and cell in klayout - c.write_gds(f"pfet_temp.gds") - layout.read(f"pfet_temp.gds") + hvt = c_inst.add_ref( + gf.components.rectangle( + size=( + nf * l_gate + (nf - 1) * inter_sd_l + 2 * gate_hvt_enc, + w + 2 * gate_hvt_enc, + ), + layer=hvtp_layer, + ) + ) + hvt.move((sd_l - gate_hvt_enc, -gate_hvt_enc)) + + if type == "sky130_fd_pr__pfet_g5v0d10v5": + hvi = c.add_ref( + gf.components.rectangle( + size=(nwell.xmax - nwell.xmin, nwell.ymax - nwell.ymin), layer=hvi_layer + ) + ) + hvi.move((nwell.xmin, nwell.ymin)) + + # creating layout and cell in klayout + c.write_gds("pfet_temp.gds") + layout.read("pfet_temp.gds") cell_name = "sky_pfet_dev" - - + return layout.cell(cell_name) - #return c + # return c if __name__ == "__main__": c = draw_pfet() c.show() - \ No newline at end of file diff --git a/sky130/cells/klayout/pymacros/cells/draw_guard_ring.py b/sky130/cells/klayout/pymacros/cells/draw_guard_ring.py index d7d8aacae..0566bc190 100644 --- a/sky130/cells/klayout/pymacros/cells/draw_guard_ring.py +++ b/sky130/cells/klayout/pymacros/cells/draw_guard_ring.py @@ -1,15 +1,15 @@ -# Copyright 2022 Skywater 130nm pdk development +# Copyright 2022 Skywater 130nm pdk development # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. -# +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. -# +# # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . @@ -18,29 +18,23 @@ ######################################################################################################################## -from .via_generator import * -from .globals import * -from .layers_def import * import gdsfactory as gf -def draw_gr ( - layout , - in_l : float = 1, - in_w : float = 1, - grw : float = 0.17, - con_lev = "li" -) : +from .layers_def import li_layer, licon_layer, m1_layer, mcon_layer, tap_layer +from .via_generator import via_generator + - ''' - layout : layout object +def draw_gr(layout, in_l: float = 1, in_w: float = 1, grw: float = 0.17, con_lev="li"): + """ + layout : layout object in_l : float of the inner length of the ring - in_w : float of the inner width of the ring - grw : float of the guard ring width + in_w : float of the inner width of the ring + grw : float of the guard ring width con_lev : connection level of (li, metal1) - ''' + """ - con_size = (0.17,0.17) + con_size = (0.17, 0.17) con_spacing = (0.19, 0.19) con_enc = (0.12, 0.12) @@ -48,48 +42,115 @@ def draw_gr ( c_temp = gf.Component("temp_store") inner = c_temp.add_ref(gf.components.rectangle(size=(in_w, in_l), layer=tap_layer)) - outer = c_temp.add_ref(gf.components.rectangle(size=(inner.xmax - inner.xmin + 2*grw , inner.ymax - inner.ymin + 2*grw), layer=tap_layer)) + outer = c_temp.add_ref( + gf.components.rectangle( + size=(inner.xmax - inner.xmin + 2 * grw, inner.ymax - inner.ymin + 2 * grw), + layer=tap_layer, + ) + ) outer.move((-grw, -grw)) - gr = c.add_ref(gf.geometry.boolean(A=outer, B=inner , operation="A-B", layer=tap_layer)) + c.add_ref(gf.geometry.boolean(A=outer, B=inner, operation="A-B", layer=tap_layer)) if con_lev == "li" or con_lev == "metal1": - li = c.add_ref(gf.geometry.boolean(A=outer, B=inner, operation="A-B", layer=li_layer)) + c.add_ref( + gf.geometry.boolean(A=outer, B=inner, operation="A-B", layer=li_layer) + ) - if grw < con_size[0] + 2*con_enc[0]: + if grw < con_size[0] + 2 * con_enc[0]: con_range = (inner.xmin, inner.xmax) - else : + else: con_range = (outer.xmin, outer.xmax) - licon_l = c.add_ref(via_generator(x_range=(outer.xmin, inner.xmin), y_range=(inner.ymin + 0.17 , inner.ymax - 0.17), via_enclosure=con_enc, via_layer=licon_layer - , via_size=con_size, via_spacing=con_spacing)) - licon_r = c.add_ref(via_generator(x_range=(inner.xmax, outer.xmax), y_range=(inner.ymin + 0.17 , inner.ymax - 0.17), via_enclosure=con_enc, via_layer=licon_layer - , via_size=con_size, via_spacing=con_spacing)) - licon_t = c.add_ref(via_generator(x_range=con_range, y_range=(inner.ymax, outer.ymax), via_enclosure=con_enc, via_layer=licon_layer - , via_size=con_size, via_spacing=con_spacing)) - licon_b = c.add_ref(via_generator(x_range=con_range, y_range=(outer.ymin, inner.ymin), via_enclosure=con_enc, via_layer=licon_layer - , via_size=con_size, via_spacing=con_spacing)) - - - - if con_lev == "metal1" : - m1 = c.add_ref(gf.geometry.boolean(A=outer, B=inner, operation="A-B", layer=m1_layer)) - - mcon_l = c.add_ref(via_generator(x_range=(outer.xmin, inner.xmin), y_range=(inner.ymin + 0.17 , inner.ymax - 0.17), via_enclosure=con_enc, via_layer=mcon_layer - , via_size=con_size, via_spacing=con_spacing)) - mcon_r = c.add_ref(via_generator(x_range=(inner.xmax, outer.xmax), y_range=(inner.ymin + 0.17 , inner.ymax - 0.17), via_enclosure=con_enc, via_layer=mcon_layer - , via_size=con_size, via_spacing=con_spacing)) - mcon_t = c.add_ref(via_generator(x_range=con_range, y_range=(inner.ymax, outer.ymax), via_enclosure=con_enc, via_layer=mcon_layer - , via_size=con_size, via_spacing=con_spacing)) - mcon_b = c.add_ref(via_generator(x_range=con_range, y_range=(outer.ymin, inner.ymin), via_enclosure=con_enc, via_layer=mcon_layer - , via_size=con_size, via_spacing=con_spacing)) - - + c.add_ref( + via_generator( + x_range=(outer.xmin, inner.xmin), + y_range=(inner.ymin + 0.17, inner.ymax - 0.17), + via_enclosure=con_enc, + via_layer=licon_layer, + via_size=con_size, + via_spacing=con_spacing, + ) + ) + c.add_ref( + via_generator( + x_range=(inner.xmax, outer.xmax), + y_range=(inner.ymin + 0.17, inner.ymax - 0.17), + via_enclosure=con_enc, + via_layer=licon_layer, + via_size=con_size, + via_spacing=con_spacing, + ) + ) + c.add_ref( + via_generator( + x_range=con_range, + y_range=(inner.ymax, outer.ymax), + via_enclosure=con_enc, + via_layer=licon_layer, + via_size=con_size, + via_spacing=con_spacing, + ) + ) + c.add_ref( + via_generator( + x_range=con_range, + y_range=(outer.ymin, inner.ymin), + via_enclosure=con_enc, + via_layer=licon_layer, + via_size=con_size, + via_spacing=con_spacing, + ) + ) + + if con_lev == "metal1": + c.add_ref( + gf.geometry.boolean(A=outer, B=inner, operation="A-B", layer=m1_layer) + ) + + c.add_ref( + via_generator( + x_range=(outer.xmin, inner.xmin), + y_range=(inner.ymin + 0.17, inner.ymax - 0.17), + via_enclosure=con_enc, + via_layer=mcon_layer, + via_size=con_size, + via_spacing=con_spacing, + ) + ) + c.add_ref( + via_generator( + x_range=(inner.xmax, outer.xmax), + y_range=(inner.ymin + 0.17, inner.ymax - 0.17), + via_enclosure=con_enc, + via_layer=mcon_layer, + via_size=con_size, + via_spacing=con_spacing, + ) + ) + c.add_ref( + via_generator( + x_range=con_range, + y_range=(inner.ymax, outer.ymax), + via_enclosure=con_enc, + via_layer=mcon_layer, + via_size=con_size, + via_spacing=con_spacing, + ) + ) + c.add_ref( + via_generator( + x_range=con_range, + y_range=(outer.ymin, inner.ymin), + via_enclosure=con_enc, + via_layer=mcon_layer, + via_size=con_size, + via_spacing=con_spacing, + ) + ) c.write_gds("ring_temp.gds") layout.read("ring_temp.gds") cell_name = "sky_ring_gen" - - return layout.cell(cell_name) diff --git a/sky130/cells/klayout/pymacros/cells/draw_rf.py b/sky130/cells/klayout/pymacros/cells/draw_rf.py index 5205dbb25..04cc7a820 100644 --- a/sky130/cells/klayout/pymacros/cells/draw_rf.py +++ b/sky130/cells/klayout/pymacros/cells/draw_rf.py @@ -1,15 +1,15 @@ -# Copyright 2022 Skywater 130nm pdk development +# Copyright 2022 Skywater 130nm pdk development # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. -# +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. -# +# # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . @@ -18,66 +18,57 @@ ######################################################################################################################## -import pya import os -from .globals import * -import gdsfactory as gf - - -gds_p_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),"fixed_devices/rf" ) # parent file path +from .globals import RF_BJT_DEV, RF_COILS_DEV, RF_MOSFET_DEV +gds_p_path = os.path.join( + os.path.dirname(os.path.abspath(__file__)), "fixed_devices/rf" +) # parent file path def draw_rf_mosfet(layout, device_name): + """ + drawing rf mosfet devices + """ + gds_path = f"{gds_p_path}/rf_mosfet" # gds file path - ''' - drawing rf mosfet devices - ''' - gds_path = f"{gds_p_path}/rf_mosfet" # gds file path - - - if device_name in RF_MOSFET_DEV : + if device_name in RF_MOSFET_DEV: layout.read(f"{gds_path}/{device_name}.gds") cell_name = device_name - else : - cell_name = device_name - + else: + cell_name = device_name return layout.cell(cell_name) -def draw_rf_bjt(layout, device_name): - ''' - drawing rf mosfet devices - ''' - gds_path = f"{gds_p_path}/rf_bjt" # gds file path +def draw_rf_bjt(layout, device_name): + """ + drawing rf mosfet devices + """ + gds_path = f"{gds_p_path}/rf_bjt" # gds file path - - if device_name in RF_BJT_DEV : + if device_name in RF_BJT_DEV: layout.read(f"{gds_path}/{device_name}.gds") cell_name = device_name - else : - cell_name = device_name - + else: + cell_name = device_name return layout.cell(cell_name) def draw_rf_coils(layout, device_name): - ''' - drawing rf coils devices - ''' + """ + drawing rf coils devices + """ - gds_path = f"{gds_p_path}/rf_coils" # gds file path + gds_path = f"{gds_p_path}/rf_coils" # gds file path - - - if device_name in RF_COILS_DEV : + if device_name in RF_COILS_DEV: layout.read(f"{gds_path}/{device_name}.gds") cell_name = device_name - else : - cell_name = device_name + else: + cell_name = device_name return layout.cell(cell_name) diff --git a/sky130/cells/klayout/pymacros/cells/draw_vpp.py b/sky130/cells/klayout/pymacros/cells/draw_vpp.py index 865958d8f..4b364d91a 100644 --- a/sky130/cells/klayout/pymacros/cells/draw_vpp.py +++ b/sky130/cells/klayout/pymacros/cells/draw_vpp.py @@ -1,15 +1,15 @@ -# Copyright 2022 Skywater 130nm pdk development +# Copyright 2022 Skywater 130nm pdk development # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. -# +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. -# +# # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . @@ -19,23 +19,20 @@ import os -from .globals import * -import gdsfactory as gf +from .globals import VPP_CAP_DEV -gds_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),"fixed_devices/VPP" ) +gds_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "fixed_devices/VPP") def draw_vpp(layout, device_name): - ''' - drawing VPP Capacitors devices - ''' - - if device_name in VPP_CAP_DEV : + """ + drawing VPP Capacitors devices + """ + + if device_name in VPP_CAP_DEV: layout.read(f"{gds_path}/{device_name}.gds") cell_name = device_name else: cell_name = device_name return layout.cell(cell_name) - - diff --git a/sky130/cells/klayout/pymacros/cells/fet.py b/sky130/cells/klayout/pymacros/cells/fet.py index 01ea21ac8..d4c217afb 100644 --- a/sky130/cells/klayout/pymacros/cells/fet.py +++ b/sky130/cells/klayout/pymacros/cells/fet.py @@ -1,15 +1,15 @@ -# Copyright 2022 Skywater 130nm pdk development +# Copyright 2022 Skywater 130nm pdk development # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. -# +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. -# +# # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . @@ -17,9 +17,9 @@ # MOSFET (PFET) Generator for skywater130 ######################################################################################################################## -from select import select import pya -from .draw_fet import * + +from .draw_fet import draw_nfet, draw_pfet fet_01v8_l = 0.15 fet_g5v0_l = 0.5 @@ -32,7 +32,7 @@ pfet_g5v0_grw = 0.3 pfet_01v8_lvt_l = 0.35 -nfet_g5v0_nvt_l = 0.9 +nfet_g5v0_nvt_l = 0.9 class pfet(pya.PCellDeclarationHelper): @@ -42,89 +42,107 @@ class pfet(pya.PCellDeclarationHelper): def __init__(self): # Initialize super class. - super(pfet, self).__init__() - - #===================== PARAMETERS DECLARATIONS ===================== - - self.param("con_bet_fin", self.TypeBoolean, "Contact Between Fingers", default=1) - - self.Type_handle = self.param("type", self.TypeList, "Device Type") - self.Type_handle.add_choice("sky130_fd_pr__pfet_01v8", "sky130_fd_pr__pfet_01v8") - self.Type_handle.add_choice("sky130_fd_pr__pfet_01v8_lvt", "sky130_fd_pr__pfet_01v8_lvt") - self.Type_handle.add_choice("sky130_fd_pr__pfet_01v8_hvt", "sky130_fd_pr__pfet_01v8_hvt") - self.Type_handle.add_choice("sky130_fd_pr__pfet_g5v0d10v5", "sky130_fd_pr__pfet_g5v0d10v5") - self.Type_handle = self.param("bulk", self.TypeList, "Bulk Type") + super().__init__() + + # ===================== PARAMETERS DECLARATIONS ===================== + + self.param( + "con_bet_fin", self.TypeBoolean, "Contact Between Fingers", default=1 + ) + + self.Type_handle = self.param("type", self.TypeList, "Device Type") + self.Type_handle.add_choice( + "sky130_fd_pr__pfet_01v8", "sky130_fd_pr__pfet_01v8" + ) + self.Type_handle.add_choice( + "sky130_fd_pr__pfet_01v8_lvt", "sky130_fd_pr__pfet_01v8_lvt" + ) + self.Type_handle.add_choice( + "sky130_fd_pr__pfet_01v8_hvt", "sky130_fd_pr__pfet_01v8_hvt" + ) + self.Type_handle.add_choice( + "sky130_fd_pr__pfet_g5v0d10v5", "sky130_fd_pr__pfet_g5v0d10v5" + ) + self.Type_handle = self.param("bulk", self.TypeList, "Bulk Type") self.Type_handle.add_choice("None", "None") self.Type_handle.add_choice("bulk tie", "bulk tie") self.Type_handle.add_choice("Gaurd Ring", "Gaurd Ring") - self.Type_handle = self.param("gate_con_pos", self.TypeList, "Gate Contact Position") + self.Type_handle = self.param( + "gate_con_pos", self.TypeList, "Gate Contact Position" + ) self.Type_handle.add_choice("top", "top") self.Type_handle.add_choice("bottom", "bottom") self.Type_handle.add_choice("alternating", "alternating") - - self.param("l", self.TypeDouble, "length", default=fet_01v8_l, unit="um") self.param("w", self.TypeDouble, "Width", default=fet_w, unit="um") self.param("sd_con_col", self.TypeInt, "Diffusion Contacts Columns", default=1) - self.param("inter_sd_l", self.TypeDouble, "Between Fingers Diffusion Length", default=fet_inter_ld, unit="um") + self.param( + "inter_sd_l", + self.TypeDouble, + "Between Fingers Diffusion Length", + default=fet_inter_ld, + unit="um", + ) self.param("nf", self.TypeInt, "Number of Fingers", default=1) - self.param("grw", self.TypeDouble, "Guard Ring Width", default=fet_01v8_grw, unit="um") - self.param("area", self.TypeDouble,"Area", readonly=True, unit="um^2") - self.param("perim", self.TypeDouble,"Perimeter", readonly=True, unit="um") + self.param( + "grw", self.TypeDouble, "Guard Ring Width", default=fet_01v8_grw, unit="um" + ) + self.param("area", self.TypeDouble, "Area", readonly=True, unit="um^2") + self.param("perim", self.TypeDouble, "Perimeter", readonly=True, unit="um") self.param("interdig", self.TypeBoolean, "Interdigitation", default=0) - self.param("patt", self.TypeString,"Pattern in case of Interdigitation", default= "") + self.param( + "patt", self.TypeString, "Pattern in case of Interdigitation", default="" + ) + + # self.param("n", self.TypeInt, "inst_num", default=1) - #self.param("n", self.TypeInt, "inst_num", default=1) - def display_text_impl(self): # Provide a descriptive text for the cell - return "pfet(L=" + ('%.3f' % self.l) + ",W=" + ('%.3f' % self.w) + ")" - + return "pfet(L=" + ("%.3f" % self.l) + ",W=" + ("%.3f" % self.w) + ")" + def coerce_parameters_impl(self): # We employ coerce_parameters_impl to decide whether the handle or the # numeric parameter has changed (by comparing against the effective # radius ru) and set ru to the effective radius. We also update the # numerical value or the shape, depending on which on has not changed. - self.area = self.w * self.l - self.perim = 2*(self.w + self.l) + self.area = self.w * self.l + self.perim = 2 * (self.w + self.l) # w,l must be larger or equal than min. values. - if self.type == "sky130_fd_pr__pfet_g5v0d10v5": + if self.type == "sky130_fd_pr__pfet_g5v0d10v5": if (self.l) < fet_g5v0_l: - self.l = fet_g5v0_l + self.l = fet_g5v0_l if (self.w) < fet_w: self.w = fet_w - if (self.grw) < pfet_g5v0_grw : - self.grw = pfet_g5v0_grw - else : + if (self.grw) < pfet_g5v0_grw: + self.grw = pfet_g5v0_grw + else: if (self.l) < fet_01v8_l: - self.l = fet_01v8_l + self.l = fet_01v8_l if (self.w) < fet_w: self.w = fet_w - if (self.grw) < fet_01v8_grw : - self.grw = fet_01v8_grw - - if self.type == "sky130_fd_pr__pfet_01v8_lvt": - if (self.l) < pfet_01v8_lvt_l : - self.l = pfet_01v8_lvt_l - else : - if (self.l) < fet_01v8_l : - self.l = fet_01v8_l - - if (self.sd_con_col) < 1 : - self.sd_con_col = 1 - - if (self.inter_sd_l) < fet_inter_ld and self.con_bet_fin == 1: + if (self.grw) < fet_01v8_grw: + self.grw = fet_01v8_grw + + if self.type == "sky130_fd_pr__pfet_01v8_lvt": + if (self.l) < pfet_01v8_lvt_l: + self.l = pfet_01v8_lvt_l + else: + if (self.l) < fet_01v8_l: + self.l = fet_01v8_l + + if (self.sd_con_col) < 1: + self.sd_con_col = 1 + + if (self.inter_sd_l) < fet_inter_ld and self.con_bet_fin == 1: self.inter_sd_l = fet_inter_ld - elif (self.inter_sd_l) < 0.21 and self.con_bet_fin == 0: + elif (self.inter_sd_l) < 0.21 and self.con_bet_fin == 0: self.inter_sd_l = 0.21 if self.interdig == 1 and self.gate_con_pos != "alternating": - self.inter_sd_l = 0.5 - - - + self.inter_sd_l = 0.5 + def can_create_from_shape_impl(self): # Implement the "Create PCell from shape" protocol: we can use any shape which # has a finite bounding box @@ -135,21 +153,40 @@ def parameters_from_shape_impl(self): # bounding box width and layer self.r = self.shape.bbox().width() * self.layout.dbu / 2 self.l = self.layout.get_info(self.layer) - + def transformation_from_shape_impl(self): # Implement the "Create PCell from shape" protocol: we use the center of the shape's # bounding box to determine the transformation return pya.Trans(self.shape.bbox().center()) - + def produce_impl(self): - instance = draw_pfet(layout= self.layout , l=self.l, w=self.w, sd_con_col=self.sd_con_col, inter_sd_l=self.inter_sd_l, nf=self.nf, grw=self.grw - , type = self.type, bulk=self.bulk, con_bet_fin=self.con_bet_fin,gate_con_pos= self.gate_con_pos, interdig=self.interdig, patt=self.patt) - write_cells = pya.CellInstArray(instance.cell_index(), pya.Trans(pya.Point(0, 0)), - pya.Vector(0, 0), pya.Vector(0, 0), 1, 1) + instance = draw_pfet( + layout=self.layout, + l_gate=self.l, + w=self.w, + sd_con_col=self.sd_con_col, + inter_sd_l=self.inter_sd_l, + nf=self.nf, + grw=self.grw, + type=self.type, + bulk=self.bulk, + con_bet_fin=self.con_bet_fin, + gate_con_pos=self.gate_con_pos, + interdig=self.interdig, + patt=self.patt, + ) + write_cells = pya.CellInstArray( + instance.cell_index(), + pya.Trans(pya.Point(0, 0)), + pya.Vector(0, 0), + pya.Vector(0, 0), + 1, + 1, + ) self.cell.insert(write_cells) self.cell.flatten(1) - - + + class nfet(pya.PCellDeclarationHelper): """ NMOS Generator for Skywater130 @@ -157,86 +194,117 @@ class nfet(pya.PCellDeclarationHelper): def __init__(self): # Initialize super class. - super(nfet, self).__init__() - - #===================== PARAMETERS DECLARATIONS ===================== - - self.param("con_bet_fin", self.TypeBoolean, "Contact Between Fingers", default=1) - self.Type_handle = self.param("type", self.TypeList, "Device Type") - self.Type_handle.add_choice("sky130_fd_pr__nfet_01v8", "sky130_fd_pr__nfet_01v8") - self.Type_handle.add_choice("sky130_fd_pr__nfet_01v8_lvt", "sky130_fd_pr__nfet_01v8_lvt") - self.Type_handle.add_choice("sky130_fd_pr__nfet_03v3_nvt","sky130_fd_pr__nfet_03v3_nvt") - self.Type_handle.add_choice("sky130_fd_pr__nfet_05v0_nvt","sky130_fd_pr__nfet_05v0_nvt") - self.Type_handle.add_choice("sky130_fd_pr__nfet_g5v0d10v5","sky130_fd_pr__nfet_g5v0d10v5") - self.Type_handle = self.param("bulk", self.TypeList, "Bulk Type") + super().__init__() + + # ===================== PARAMETERS DECLARATIONS ===================== + + self.param( + "con_bet_fin", self.TypeBoolean, "Contact Between Fingers", default=1 + ) + self.Type_handle = self.param("type", self.TypeList, "Device Type") + self.Type_handle.add_choice( + "sky130_fd_pr__nfet_01v8", "sky130_fd_pr__nfet_01v8" + ) + self.Type_handle.add_choice( + "sky130_fd_pr__nfet_01v8_lvt", "sky130_fd_pr__nfet_01v8_lvt" + ) + self.Type_handle.add_choice( + "sky130_fd_pr__nfet_03v3_nvt", "sky130_fd_pr__nfet_03v3_nvt" + ) + self.Type_handle.add_choice( + "sky130_fd_pr__nfet_05v0_nvt", "sky130_fd_pr__nfet_05v0_nvt" + ) + self.Type_handle.add_choice( + "sky130_fd_pr__nfet_g5v0d10v5", "sky130_fd_pr__nfet_g5v0d10v5" + ) + self.Type_handle = self.param("bulk", self.TypeList, "Bulk Type") self.Type_handle.add_choice("None", "None") self.Type_handle.add_choice("bulk tie", "bulk tie") self.Type_handle.add_choice("Gaurd Ring", "Gaurd Ring") - self.Type_handle = self.param("gate_con_pos", self.TypeList, "Gate Contact Position") + self.Type_handle = self.param( + "gate_con_pos", self.TypeList, "Gate Contact Position" + ) self.Type_handle.add_choice("top", "top") self.Type_handle.add_choice("bottom", "bottom") self.Type_handle.add_choice("alternating", "alternating") - self.param("l", self.TypeDouble, "length", default=fet_01v8_l, unit="um") self.param("w", self.TypeDouble, "Width", default=fet_w, unit="um") - self.param("sd_con_col", self.TypeDouble, "Diffusion Contacts Columns", default=fet_ld, unit="um") - self.param("inter_sd_l", self.TypeDouble, "Between Fingers Diffusion Length", default=fet_inter_ld, unit="um") + self.param( + "sd_con_col", + self.TypeDouble, + "Diffusion Contacts Columns", + default=fet_ld, + unit="um", + ) + self.param( + "inter_sd_l", + self.TypeDouble, + "Between Fingers Diffusion Length", + default=fet_inter_ld, + unit="um", + ) self.param("nf", self.TypeInt, "Number of Fingers", default=1) - self.param("grw", self.TypeDouble, "Guard Ring Width", default=fet_01v8_grw, unit="um") - self.param("area", self.TypeDouble,"Area", readonly=True, unit="um^2") - self.param("perim", self.TypeDouble,"Perimeter", readonly=True, unit="um") + self.param( + "grw", self.TypeDouble, "Guard Ring Width", default=fet_01v8_grw, unit="um" + ) + self.param("area", self.TypeDouble, "Area", readonly=True, unit="um^2") + self.param("perim", self.TypeDouble, "Perimeter", readonly=True, unit="um") self.param("interdig", self.TypeBoolean, "Interdigitation", default=0) - self.param("patt", self.TypeString,"Pattern in case of Interdigitation", default= "") + self.param( + "patt", self.TypeString, "Pattern in case of Interdigitation", default="" + ) + + # self.param("n", self.TypeInt, "inst_num", default=1) - #self.param("n", self.TypeInt, "inst_num", default=1) - def display_text_impl(self): # Provide a descriptive text for the cell - return "nfet(L=" + ('%.3f' % self.l) + ",W=" + ('%.3f' % self.w) + ")" + return "nfet(L=" + ("%.3f" % self.l) + ",W=" + ("%.3f" % self.w) + ")" def coerce_parameters_impl(self): # We employ coerce_parameters_impl to decide whether the handle or the # numeric parameter has changed (by comparing against the effective # radius ru) and set ru to the effective radius. We also update the # numerical value or the shape, depending on which on has not changed. - self.area = self.w * self.l - self.perim = 2*(self.w + self.l) + self.area = self.w * self.l + self.perim = 2 * (self.w + self.l) # w,l must be larger or equal than min. values. - if self.type == "sky130_fd_pr__nfet_03v3_nvt" or self.type == "sky130_fd_pr__nfet_05v0_nvt" or self.type == "sky130_fd_pr__nfet_g5v0d10v5": + if ( + self.type == "sky130_fd_pr__nfet_03v3_nvt" + or self.type == "sky130_fd_pr__nfet_05v0_nvt" + or self.type == "sky130_fd_pr__nfet_g5v0d10v5" + ): if (self.l) < fet_g5v0_l: - self.l = fet_g5v0_l + self.l = fet_g5v0_l if (self.w) < fet_w: self.w = fet_w - if (self.grw) < pfet_g5v0_grw : - self.grw = pfet_g5v0_grw + if (self.grw) < pfet_g5v0_grw: + self.grw = pfet_g5v0_grw if self.type == "sky130_fd_pr__nfet_05v0_nvt": if (self.l) < nfet_g5v0_nvt_l: - self.l = nfet_g5v0_nvt_l + self.l = nfet_g5v0_nvt_l - else : + else: if (self.l) < fet_01v8_l: - self.l = fet_01v8_l + self.l = fet_01v8_l if (self.w) < fet_w: self.w = fet_w - if (self.grw) < fet_01v8_grw : - self.grw = fet_01v8_grw - - - if (self.sd_con_col) < 1 : - self.sd_con_col = 1 - - if (self.inter_sd_l) < fet_inter_ld and self.con_bet_fin == 1: + if (self.grw) < fet_01v8_grw: + self.grw = fet_01v8_grw + + if (self.sd_con_col) < 1: + self.sd_con_col = 1 + + if (self.inter_sd_l) < fet_inter_ld and self.con_bet_fin == 1: self.inter_sd_l = fet_inter_ld - elif self.inter_sd_l < 0.21 and self.con_bet_fin == 0 : + elif self.inter_sd_l < 0.21 and self.con_bet_fin == 0: self.inter_sd_l = 0.21 - + if self.interdig == 1 and self.gate_con_pos != "alternating": - self.inter_sd_l = 0.5 - - + self.inter_sd_l = 0.5 + def can_create_from_shape_impl(self): # Implement the "Create PCell from shape" protocol: we can use any shape which # has a finite bounding box @@ -254,10 +322,28 @@ def transformation_from_shape_impl(self): return pya.Trans(self.shape.bbox().center()) def produce_impl(self): - instance = draw_nfet(layout= self.layout , l=self.l, w=self.w, sd_con_col=self.sd_con_col, inter_sd_l=self.inter_sd_l, nf=self.nf, grw=self.grw - , type= self.type , bulk=self.bulk, con_bet_fin=self.con_bet_fin,gate_con_pos= self.gate_con_pos, interdig=self.interdig, patt=self.patt) - write_cells = pya.CellInstArray(instance.cell_index(), pya.Trans(pya.Point(0, 0)), - pya.Vector(0, 0), pya.Vector(0, 0), 1, 1) + instance = draw_nfet( + layout=self.layout, + l_gate=self.l, + w=self.w, + sd_con_col=self.sd_con_col, + inter_sd_l=self.inter_sd_l, + nf=self.nf, + grw=self.grw, + type=self.type, + bulk=self.bulk, + con_bet_fin=self.con_bet_fin, + gate_con_pos=self.gate_con_pos, + interdig=self.interdig, + patt=self.patt, + ) + write_cells = pya.CellInstArray( + instance.cell_index(), + pya.Trans(pya.Point(0, 0)), + pya.Vector(0, 0), + pya.Vector(0, 0), + 1, + 1, + ) self.cell.insert(write_cells) self.cell.flatten(1) - diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p4x04p6_m1m2_noshield.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p4x04p6_m1m2_noshield.cdl index 114de0abe..11eeba181 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p4x04p6_m1m2_noshield.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p4x04p6_m1m2_noshield.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 SUB cap_1 cap_2 sky130_fd_pr__cap_vpp_02p4x04p6_m1m2_noshield -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x06p1_m1m2m3m4_shieldl1_fingercap.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x06p1_m1m2m3m4_shieldl1_fingercap.cdl index ee30b4a89..518ce4d4e 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x06p1_m1m2m3m4_shieldl1_fingercap.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x06p1_m1m2m3m4_shieldl1_fingercap.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 SUB sky130_fd_pr__cap_vpp_02p7x06p1_m1m2m3m4_shieldl1_fingercap -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x11p1_m1m2m3m4_shieldl1_fingercap.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x11p1_m1m2m3m4_shieldl1_fingercap.cdl index 83b45be80..dd2386ea1 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x11p1_m1m2m3m4_shieldl1_fingercap.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x11p1_m1m2m3m4_shieldl1_fingercap.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 SUB sky130_fd_pr__cap_vpp_02p7x11p1_m1m2m3m4_shieldl1_fingercap -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x21p1_m1m2m3m4_shieldl1_fingercap.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x21p1_m1m2m3m4_shieldl1_fingercap.cdl index 000dfb10a..c0967eccd 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x21p1_m1m2m3m4_shieldl1_fingercap.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x21p1_m1m2m3m4_shieldl1_fingercap.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 SUB sky130_fd_pr__cap_vpp_02p7x21p1_m1m2m3m4_shieldl1_fingercap -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x41p1_m1m2m3m4_shieldl1_fingercap.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x41p1_m1m2m3m4_shieldl1_fingercap.cdl index 080a4658c..54f76bfff 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x41p1_m1m2m3m4_shieldl1_fingercap.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p7x41p1_m1m2m3m4_shieldl1_fingercap.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 SUB sky130_fd_pr__cap_vpp_02p7x41p1_m1m2m3m4_shieldl1_fingercap -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p9x06p1_m1m2m3m4_shieldl1_fingercap2.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p9x06p1_m1m2m3m4_shieldl1_fingercap2.cdl index 18b2e8314..9d2c3bd40 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p9x06p1_m1m2m3m4_shieldl1_fingercap2.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_02p9x06p1_m1m2m3m4_shieldl1_fingercap2.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 SUB sky130_fd_pr__cap_vpp_02p9x06p1_m1m2m3m4_shieldl1_fingercap2 -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_03p9x03p9_m1m2_shieldl1_floatm3.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_03p9x03p9_m1m2_shieldl1_floatm3.cdl index 3965f884f..99f60b116 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_03p9x03p9_m1m2_shieldl1_floatm3.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_03p9x03p9_m1m2_shieldl1_floatm3.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 MET3 SUB sky130_fd_pr__cap_vpp_03p9x03p9_m1m2_shieldl1_floatm3 -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_noshield.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_noshield.cdl index adb43a060..111459af2 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_noshield.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_noshield.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 SUB sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_noshield -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_noshield_o2subcell.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_noshield_o2subcell.cdl index 042ef2e47..fca65f021 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_noshield_o2subcell.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_noshield_o2subcell.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -15,8 +15,8 @@ # # SPDX-License-Identifier: Apache-2.0 -.SUBCKT sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_noshield_o2subcell +.SUBCKT sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_noshield_o2subcell Cx sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_noshield_o2subcell -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_shieldpo_floatm3.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_shieldpo_floatm3.cdl index 96adada27..27c980304 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_shieldpo_floatm3.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_shieldpo_floatm3.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 MET3 SUB sky130_fd_pr__cap_vpp_04p4x04p6_l1m1m2_shieldpo_floatm3 -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_noshield.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_noshield.cdl index 19ca911c6..7f414f417 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_noshield.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_noshield.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 SUB sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_noshield -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_noshield_o2.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_noshield_o2.cdl index 63c868cd8..2fc44f5b1 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_noshield_o2.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_noshield_o2.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 SUB sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_noshield_o2 -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_shieldl1.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_shieldl1.cdl index dc02ad934..fa4e6b86f 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_shieldl1.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_shieldl1.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 SUB sky130_fd_pr__cap_vpp_04p4x04p6_m1m2_shieldl1 -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1.cdl index f1f28b284..136d1fc4e 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 SUB sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1 -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1m5_floatm4.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1m5_floatm4.cdl index 383a2350c..ed0cacadf 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1m5_floatm4.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1m5_floatm4.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 MET5 SUB sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1m5_floatm4 -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1m5_floatm4_top.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1m5_floatm4_top.cdl index cfeb92366..a938dd141 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1m5_floatm4_top.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1m5_floatm4_top.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 M5 SUB sky130_fd_pr__cap_vpp_04p4x04p6_m1m2m3_shieldl1m5_floatm4_top -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_05p9x05p9_m1m2m3m4_shieldl1_wafflecap.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_05p9x05p9_m1m2m3m4_shieldl1_wafflecap.cdl index 76eab20c1..0b6348eb8 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_05p9x05p9_m1m2m3m4_shieldl1_wafflecap.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_05p9x05p9_m1m2m3m4_shieldl1_wafflecap.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 SUB sky130_fd_pr__cap_vpp_05p9x05p9_m1m2m3m4_shieldl1_wafflecap -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_06p8x06p1_l1m1m2m3_shieldpom4.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_06p8x06p1_l1m1m2m3_shieldpom4.cdl index a3a85155e..01b50a16a 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_06p8x06p1_l1m1m2m3_shieldpom4.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_06p8x06p1_l1m1m2m3_shieldpom4.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 MET4 SUB sky130_fd_pr__cap_vpp_06p8x06p1_l1m1m2m3_shieldpom4 -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_06p8x06p1_l1m1m2m3_shieldpom4_top.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_06p8x06p1_l1m1m2m3_shieldpom4_top.cdl index 999a954f6..4646039fa 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_06p8x06p1_l1m1m2m3_shieldpom4_top.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_06p8x06p1_l1m1m2m3_shieldpom4_top.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 M4 SUB sky130_fd_pr__cap_vpp_06p8x06p1_l1m1m2m3_shieldpom4_top -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_06p8x06p1_m1m2m3_shieldl1m4.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_06p8x06p1_m1m2m3_shieldl1m4.cdl index 30a40ebcc..2668d2879 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_06p8x06p1_m1m2m3_shieldl1m4.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_06p8x06p1_m1m2m3_shieldl1m4.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 MET4 SUB sky130_fd_pr__cap_vpp_06p8x06p1_m1m2m3_shieldl1m4 -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_06p8x06p1_m1m2m3_shieldl1m4_top.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_06p8x06p1_m1m2m3_shieldl1m4_top.cdl index 9f6ba2f57..5fa88d550 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_06p8x06p1_m1m2m3_shieldl1m4_top.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_06p8x06p1_m1m2m3_shieldl1m4_top.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 M4 SUB sky130_fd_pr__cap_vpp_06p8x06p1_m1m2m3_shieldl1m4_top -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_noshield.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_noshield.cdl index af6616c7f..d1b88291b 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_noshield.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_noshield.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 SUB sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_noshield -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_noshield_o2subcell.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_noshield_o2subcell.cdl index 2b0f03fe7..52d9efdd9 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_noshield_o2subcell.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_noshield_o2subcell.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -15,8 +15,8 @@ # # SPDX-License-Identifier: Apache-2.0 -.SUBCKT sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_noshield_o2subcell +.SUBCKT sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_noshield_o2subcell Cx sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_noshield_o2subcell -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_shieldpo_floatm3.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_shieldpo_floatm3.cdl index d5dd8e5d1..c25671d11 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_shieldpo_floatm3.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_shieldpo_floatm3.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 MET3 SUB sky130_fd_pr__cap_vpp_08p6x07p8_l1m1m2_shieldpo_floatm3 -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_m1m2_noshield.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_m1m2_noshield.cdl index 6547dcc6c..be024e591 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_m1m2_noshield.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_m1m2_noshield.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 SUB sky130_fd_pr__cap_vpp_08p6x07p8_m1m2_noshield -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_m1m2_shieldl1.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_m1m2_shieldl1.cdl index c9ba3646c..d371ed437 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_m1m2_shieldl1.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_m1m2_shieldl1.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 SUB sky130_fd_pr__cap_vpp_08p6x07p8_m1m2_shieldl1 -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_m1m2m3_shieldl1.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_m1m2m3_shieldl1.cdl index cb9af6ffa..ee42d6c67 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_m1m2m3_shieldl1.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_m1m2m3_shieldl1.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 SUB sky130_fd_pr__cap_vpp_08p6x07p8_m1m2m3_shieldl1 -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_m1m2m3_shieldl1m5_floatm4.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_m1m2m3_shieldl1m5_floatm4.cdl index 01e77925a..ef3855f80 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_m1m2m3_shieldl1m5_floatm4.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_m1m2m3_shieldl1m5_floatm4.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 MET5 SUB sky130_fd_pr__cap_vpp_08p6x07p8_m1m2m3_shieldl1m5_floatm4 -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_m1m2m3_shieldl1m5_floatm4_top.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_m1m2m3_shieldl1m5_floatm4_top.cdl index 39317c244..4396a41e3 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_m1m2m3_shieldl1m5_floatm4_top.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_08p6x07p8_m1m2m3_shieldl1m5_floatm4_top.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 M5 SUB sky130_fd_pr__cap_vpp_08p6x07p8_m1m2m3_shieldl1m5_floatm4_top -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p3x11p3_m1m2m3m4_shieldl1_wafflecap.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p3x11p3_m1m2m3m4_shieldl1_wafflecap.cdl index e0ef11ed0..efc1a7b40 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p3x11p3_m1m2m3m4_shieldl1_wafflecap.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p3x11p3_m1m2m3m4_shieldl1_wafflecap.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 SUB sky130_fd_pr__cap_vpp_11p3x11p3_m1m2m3m4_shieldl1_wafflecap -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p3x11p8_l1m1m2m3m4_shieldm5_nhv.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p3x11p8_l1m1m2m3m4_shieldm5_nhv.cdl index bf41c3d59..e5fbb6aeb 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p3x11p8_l1m1m2m3m4_shieldm5_nhv.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p3x11p8_l1m1m2m3m4_shieldm5_nhv.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 MET5 sky130_fd_pr__cap_vpp_11p3x11p8_l1m1m2m3m4_shieldm5_nhv -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p3x11p8_l1m1m2m3m4_shieldm5_nhvtop.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p3x11p8_l1m1m2m3m4_shieldm5_nhvtop.cdl index d69c34001..e8351cf70 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p3x11p8_l1m1m2m3m4_shieldm5_nhvtop.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p3x11p8_l1m1m2m3m4_shieldm5_nhvtop.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 M5 SUB sky130_fd_pr__cap_vpp_11p3x11p8_l1m1m2m3m4_shieldm5_nhvtop -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2_noshield.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2_noshield.cdl index ebda933f5..800d32907 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2_noshield.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2_noshield.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 SUB sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2_noshield -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2_shieldpom3.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2_shieldpom3.cdl index b6a595819..e2fe693ab 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2_shieldpom3.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2_shieldpom3.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 MET3 SUB sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2_shieldpom3 -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldm4.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldm4.cdl index b42fc7395..5a8acc878 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldm4.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldm4.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 MET4 SUB sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldm4 -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldm4_top.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldm4_top.cdl index 6135313f4..d4d0ba68e 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldm4_top.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldm4_top.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 M4 SUB sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldm4_top -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldpom4.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldpom4.cdl index c7d887cac..44119b570 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldpom4.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldpom4.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 MET4 SUB sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldpom4 -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldpom4_top.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldpom4_top.cdl index f287d5d9d..1920407f4 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldpom4_top.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldpom4_top.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 M4 SUB sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldpom4_top -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldm5.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldm5.cdl index 378846e00..da38c67bd 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldm5.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldm5.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 MET5 SUB sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldm5 -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldm5_top.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldm5_top.cdl index a251f532b..814c371da 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldm5_top.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldm5_top.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 M5 SUB sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldm5_top -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5.cdl index 1e7a65af3..48627283b 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 MET5 SUB sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5 -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_top.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_top.cdl index 1c6f0bd7f..f0c0cb0ed 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_top.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_top.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 M5 SUB sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_top -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x.cdl index 7859be710..0c50a9ec9 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 MET5 SUB sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x6.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x6.cdl index 63f772b1c..6b3e7a551 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x6.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x6.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 M5A SUB sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x6 -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x7.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x7.cdl index c79ffe642..88080e11d 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x7.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x7.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 M5A SUB sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x7 -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x8.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x8.cdl index c8c6bee4e..b1e5188c8 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x8.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x8.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 M5A SUB sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x8 -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x9.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x9.cdl index 590bfe64a..14d8a0a64 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x9.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x9.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 M5A SUB sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x9 -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_xtop.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_xtop.cdl index cfae9c0d2..898cfd780 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_xtop.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_xtop.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 M5 SUB sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_xtop -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2_noshield.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2_noshield.cdl index eeda60108..3941b7713 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2_noshield.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2_noshield.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 SUB sky130_fd_pr__cap_vpp_11p5x11p7_m1m2_noshield -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2_shieldl1.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2_shieldl1.cdl index 2d4fe8b53..54be7e2f5 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2_shieldl1.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2_shieldl1.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 SUB sky130_fd_pr__cap_vpp_11p5x11p7_m1m2_shieldl1 -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1.cdl index 31df834e1..999d41fa8 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 SUB sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1 -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1m5_floatm4.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1m5_floatm4.cdl index 05a96bf86..8e1964500 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1m5_floatm4.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1m5_floatm4.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 MET5 SUB sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1m5_floatm4 -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1m5_floatm4_top.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1m5_floatm4_top.cdl index 448c673f1..da62a0dea 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1m5_floatm4_top.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1m5_floatm4_top.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 M5 SUB sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3_shieldl1m5_floatm4_top -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldl1m5.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldl1m5.cdl index 622d8d03b..7ab4718a2 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldl1m5.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldl1m5.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 MET5 SUB sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldl1m5 -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldl1m5_top.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldl1m5_top.cdl index 6a367a93e..7cbe7504a 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldl1m5_top.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldl1m5_top.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 M5 SUB sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldl1m5_top -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldm5.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldm5.cdl index 89d8a74a1..0149bf1f8 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldm5.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldm5.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 MET5 SUB sky130_fd_pr__cap_vpp_11p5x11p7_m1m2m3m4_shieldm5 -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m4_noshield.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m4_noshield.cdl index 8d8752ddb..33184d9a0 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m4_noshield.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_m1m4_noshield.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 SUB sky130_fd_pr__cap_vpp_11p5x11p7_m1m4_noshield -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_pol1m1m2m3m4m5_noshield.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_pol1m1m2m3m4m5_noshield.cdl index 213183970..a0fd54a09 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_pol1m1m2m3m4m5_noshield.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_pol1m1m2m3m4m5_noshield.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -15,8 +15,8 @@ # # SPDX-License-Identifier: Apache-2.0 -.SUBCKT sky130_fd_pr__cap_vpp_11p5x11p7_pol1m1m2m3m4m5_noshield +.SUBCKT sky130_fd_pr__cap_vpp_11p5x11p7_pol1m1m2m3m4m5_noshield Cx sky130_fd_pr__cap_vpp_11p5x11p7_pol1m1m2m3m4m5_noshield -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x23p1_pol1m1m2m3m4m5_noshield.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x23p1_pol1m1m2m3m4m5_noshield.cdl index d3c559df1..1b24bd6ee 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x23p1_pol1m1m2m3m4m5_noshield.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x23p1_pol1m1m2m3m4m5_noshield.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -15,8 +15,8 @@ # # SPDX-License-Identifier: Apache-2.0 -.SUBCKT sky130_fd_pr__cap_vpp_11p5x23p1_pol1m1m2m3m4m5_noshield +.SUBCKT sky130_fd_pr__cap_vpp_11p5x23p1_pol1m1m2m3m4m5_noshield Cx sky130_fd_pr__cap_vpp_11p5x23p1_pol1m1m2m3m4m5_noshield -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_22p5x11p7_pol1m1m2m3m4m5_noshield.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_22p5x11p7_pol1m1m2m3m4m5_noshield.cdl index db21025de..b7ddf7ad7 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_22p5x11p7_pol1m1m2m3m4m5_noshield.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_22p5x11p7_pol1m1m2m3m4m5_noshield.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -15,8 +15,8 @@ # # SPDX-License-Identifier: Apache-2.0 -.SUBCKT sky130_fd_pr__cap_vpp_22p5x11p7_pol1m1m2m3m4m5_noshield +.SUBCKT sky130_fd_pr__cap_vpp_22p5x11p7_pol1m1m2m3m4m5_noshield Cx sky130_fd_pr__cap_vpp_22p5x11p7_pol1m1m2m3m4m5_noshield -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_22p5x23p1_pol1m1m2m3m4m5_noshield.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_22p5x23p1_pol1m1m2m3m4m5_noshield.cdl index 03f4a547e..b2989951b 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_22p5x23p1_pol1m1m2m3m4m5_noshield.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_22p5x23p1_pol1m1m2m3m4m5_noshield.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -15,8 +15,8 @@ # # SPDX-License-Identifier: Apache-2.0 -.SUBCKT sky130_fd_pr__cap_vpp_22p5x23p1_pol1m1m2m3m4m5_noshield +.SUBCKT sky130_fd_pr__cap_vpp_22p5x23p1_pol1m1m2m3m4m5_noshield Cx sky130_fd_pr__cap_vpp_22p5x23p1_pol1m1m2m3m4m5_noshield -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_33p6x11p7_pol1m1m2m3m4m5_noshield.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_33p6x11p7_pol1m1m2m3m4m5_noshield.cdl index 55ff8bd45..eef7614b6 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_33p6x11p7_pol1m1m2m3m4m5_noshield.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_33p6x11p7_pol1m1m2m3m4m5_noshield.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -15,8 +15,8 @@ # # SPDX-License-Identifier: Apache-2.0 -.SUBCKT sky130_fd_pr__cap_vpp_33p6x11p7_pol1m1m2m3m4m5_noshield +.SUBCKT sky130_fd_pr__cap_vpp_33p6x11p7_pol1m1m2m3m4m5_noshield Cx sky130_fd_pr__cap_vpp_33p6x11p7_pol1m1m2m3m4m5_noshield -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_33p6x23p1_pol1m1m2m3m4m5_noshield.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_33p6x23p1_pol1m1m2m3m4m5_noshield.cdl index d99baedbe..5a966c42e 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_33p6x23p1_pol1m1m2m3m4m5_noshield.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_33p6x23p1_pol1m1m2m3m4m5_noshield.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -15,8 +15,8 @@ # # SPDX-License-Identifier: Apache-2.0 -.SUBCKT sky130_fd_pr__cap_vpp_33p6x23p1_pol1m1m2m3m4m5_noshield +.SUBCKT sky130_fd_pr__cap_vpp_33p6x23p1_pol1m1m2m3m4m5_noshield Cx sky130_fd_pr__cap_vpp_33p6x23p1_pol1m1m2m3m4m5_noshield -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_44p7x11p7_pol1m1m2m3m4m5_noshield.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_44p7x11p7_pol1m1m2m3m4m5_noshield.cdl index f3801ae20..9c615a309 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_44p7x11p7_pol1m1m2m3m4m5_noshield.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_44p7x11p7_pol1m1m2m3m4m5_noshield.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -15,8 +15,8 @@ # # SPDX-License-Identifier: Apache-2.0 -.SUBCKT sky130_fd_pr__cap_vpp_44p7x11p7_pol1m1m2m3m4m5_noshield +.SUBCKT sky130_fd_pr__cap_vpp_44p7x11p7_pol1m1m2m3m4m5_noshield Cx sky130_fd_pr__cap_vpp_44p7x11p7_pol1m1m2m3m4m5_noshield -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_44p7x23p1_pol1m1m2m3m4m5_noshield.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_44p7x23p1_pol1m1m2m3m4m5_noshield.cdl index b70df97c5..80ec3c196 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_44p7x23p1_pol1m1m2m3m4m5_noshield.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_44p7x23p1_pol1m1m2m3m4m5_noshield.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,4 +19,4 @@ Cx C0 C1 SUB sky130_fd_pr__cap_vpp_44p7x23p1_pol1m1m2m3m4m5_noshield -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x11p7_pol1m1m2m3m4m5_noshield.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x11p7_pol1m1m2m3m4m5_noshield.cdl index c06fd1233..269a677dd 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x11p7_pol1m1m2m3m4m5_noshield.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x11p7_pol1m1m2m3m4m5_noshield.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -15,8 +15,8 @@ # # SPDX-License-Identifier: Apache-2.0 -.SUBCKT sky130_fd_pr__cap_vpp_55p8x11p7_pol1m1m2m3m4m5_noshield +.SUBCKT sky130_fd_pr__cap_vpp_55p8x11p7_pol1m1m2m3m4m5_noshield Cx sky130_fd_pr__cap_vpp_55p8x11p7_pol1m1m2m3m4m5_noshield -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x11p7_pol1m1m2m3m4m5_noshield_m5pullin.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x11p7_pol1m1m2m3m4m5_noshield_m5pullin.cdl index 5bbce2cfe..b4da70ef8 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x11p7_pol1m1m2m3m4m5_noshield_m5pullin.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x11p7_pol1m1m2m3m4m5_noshield_m5pullin.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -15,8 +15,8 @@ # # SPDX-License-Identifier: Apache-2.0 -.SUBCKT sky130_fd_pr__cap_vpp_55p8x11p7_pol1m1m2m3m4m5_noshield_m5pullin +.SUBCKT sky130_fd_pr__cap_vpp_55p8x11p7_pol1m1m2m3m4m5_noshield_m5pullin Cx sky130_fd_pr__cap_vpp_55p8x11p7_pol1m1m2m3m4m5_noshield_m5pullin -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x23p1_pol1m1m2m3m4m5_noshield.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x23p1_pol1m1m2m3m4m5_noshield.cdl index 646715bfa..1913ea38a 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x23p1_pol1m1m2m3m4m5_noshield.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x23p1_pol1m1m2m3m4m5_noshield.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -15,8 +15,8 @@ # # SPDX-License-Identifier: Apache-2.0 -.SUBCKT sky130_fd_pr__cap_vpp_55p8x23p1_pol1m1m2m3m4m5_noshield +.SUBCKT sky130_fd_pr__cap_vpp_55p8x23p1_pol1m1m2m3m4m5_noshield Cx sky130_fd_pr__cap_vpp_55p8x23p1_pol1m1m2m3m4m5_noshield -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x23p1_pol1m1m2m3m4m5_noshield_m5pullin.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x23p1_pol1m1m2m3m4m5_noshield_m5pullin.cdl index f7a852ad4..242509984 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x23p1_pol1m1m2m3m4m5_noshield_m5pullin.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x23p1_pol1m1m2m3m4m5_noshield_m5pullin.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -15,8 +15,8 @@ # # SPDX-License-Identifier: Apache-2.0 -.SUBCKT sky130_fd_pr__cap_vpp_55p8x23p1_pol1m1m2m3m4m5_noshield_m5pullin +.SUBCKT sky130_fd_pr__cap_vpp_55p8x23p1_pol1m1m2m3m4m5_noshield_m5pullin Cx sky130_fd_pr__cap_vpp_55p8x23p1_pol1m1m2m3m4m5_noshield_m5pullin -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x23p1_pol1m1m2m3m4m5_noshield_test.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x23p1_pol1m1m2m3m4m5_noshield_test.cdl index b49f28adb..1005a491c 100644 --- a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x23p1_pol1m1m2m3m4m5_noshield_test.cdl +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_55p8x23p1_pol1m1m2m3m4m5_noshield_test.cdl @@ -1,4 +1,4 @@ - + # Copyright 2022 SkyWater PDK Authors # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -15,8 +15,8 @@ # # SPDX-License-Identifier: Apache-2.0 -.SUBCKT sky130_fd_pr__cap_vpp_55p8x23p1_pol1m1m2m3m4m5_noshield_test +.SUBCKT sky130_fd_pr__cap_vpp_55p8x23p1_pol1m1m2m3m4m5_noshield_test Cx sky130_fd_pr__cap_vpp_55p8x23p1_pol1m1m2m3m4m5_noshield_test -.ENDS +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/globals.py b/sky130/cells/klayout/pymacros/cells/globals.py index c5a0765b2..7c8c5ed40 100644 --- a/sky130/cells/klayout/pymacros/cells/globals.py +++ b/sky130/cells/klayout/pymacros/cells/globals.py @@ -1,67 +1,70 @@ -# Copyright 2022 Skywater 130nm pdk development +# Copyright 2022 Skywater 130nm pdk development # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. -# +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. -# +# # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . ######################################################################################################################## -# Global parameters generation +# Global parameters generation ######################################################################################################################## -import glob +import glob import os -# Listing device names -fixed_dev_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),"fixed_devices" ) # parent file path +# Listing device names + +fixed_dev_path = os.path.join( + os.path.dirname(os.path.abspath(__file__)), "fixed_devices" +) # parent file path -BJT_NPN_DEV = glob.glob (f"{fixed_dev_path}/bjt/npn/*") +BJT_NPN_DEV = glob.glob(f"{fixed_dev_path}/bjt/npn/*") for i in range(len(BJT_NPN_DEV)): - BJT_NPN_DEV[i] = BJT_NPN_DEV[i].split("/")[-1] + BJT_NPN_DEV[i] = BJT_NPN_DEV[i].split("/")[-1] BJT_NPN_DEV[i] = BJT_NPN_DEV[i][:-4] -BJT_PNP_DEV = glob.glob (f"{fixed_dev_path}/bjt/pnp/*") +BJT_PNP_DEV = glob.glob(f"{fixed_dev_path}/bjt/pnp/*") for i in range(len(BJT_PNP_DEV)): - BJT_PNP_DEV[i] = BJT_PNP_DEV[i].split("/")[-1] + BJT_PNP_DEV[i] = BJT_PNP_DEV[i].split("/")[-1] BJT_PNP_DEV[i] = BJT_PNP_DEV[i][:-4] -VPP_CAP_DEV= glob.glob (f"{fixed_dev_path}/VPP/*") +VPP_CAP_DEV = glob.glob(f"{fixed_dev_path}/VPP/*") for i in range(len(VPP_CAP_DEV)): - VPP_CAP_DEV[i] = VPP_CAP_DEV[i].split("/")[-1] + VPP_CAP_DEV[i] = VPP_CAP_DEV[i].split("/")[-1] VPP_CAP_DEV[i] = VPP_CAP_DEV[i][:-4] -PHOTO_D_DEV = glob.glob (f"{fixed_dev_path}/photodiode/*") +PHOTO_D_DEV = glob.glob(f"{fixed_dev_path}/photodiode/*") for i in range(len(PHOTO_D_DEV)): - PHOTO_D_DEV[i] = PHOTO_D_DEV[i].split("/")[-1] + PHOTO_D_DEV[i] = PHOTO_D_DEV[i].split("/")[-1] PHOTO_D_DEV[i] = PHOTO_D_DEV[i][:-4] -RF_MOSFET_DEV = glob.glob (f"{fixed_dev_path}/rf/rf_mosfet/*") +RF_MOSFET_DEV = glob.glob(f"{fixed_dev_path}/rf/rf_mosfet/*") for i in range(len(RF_MOSFET_DEV)): - RF_MOSFET_DEV[i] = RF_MOSFET_DEV[i].split("/")[-1] + RF_MOSFET_DEV[i] = RF_MOSFET_DEV[i].split("/")[-1] RF_MOSFET_DEV[i] = RF_MOSFET_DEV[i][:-4] -RF_BJT_DEV = glob.glob (f"{fixed_dev_path}/rf/rf_bjt/*") +RF_BJT_DEV = glob.glob(f"{fixed_dev_path}/rf/rf_bjt/*") for i in range(len(RF_BJT_DEV)): - RF_BJT_DEV[i] = RF_BJT_DEV[i].split("/")[-1] + RF_BJT_DEV[i] = RF_BJT_DEV[i].split("/")[-1] RF_BJT_DEV[i] = RF_BJT_DEV[i][:-4] -RF_COILS_DEV = glob.glob (f"{fixed_dev_path}/rf/rf_coils/*") +RF_COILS_DEV = glob.glob(f"{fixed_dev_path}/rf/rf_coils/*") for i in range(len(RF_COILS_DEV)): - RF_COILS_DEV[i] = RF_COILS_DEV[i].split("/")[-1] + RF_COILS_DEV[i] = RF_COILS_DEV[i].split("/")[-1] RF_COILS_DEV[i] = RF_COILS_DEV[i][:-4] -#print (VPP_CAP_DEV) +# print (VPP_CAP_DEV) diff --git a/sky130/cells/klayout/pymacros/cells/gr.py b/sky130/cells/klayout/pymacros/cells/gr.py index 9f3425190..6aee3af27 100644 --- a/sky130/cells/klayout/pymacros/cells/gr.py +++ b/sky130/cells/klayout/pymacros/cells/gr.py @@ -1,15 +1,15 @@ -# Copyright 2022 Skywater 130nm pdk development +# Copyright 2022 Skywater 130nm pdk development # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. -# +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. -# +# # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . @@ -18,13 +18,15 @@ ######################################################################################################################## import pya -from .draw_guard_ring import * + +from .draw_guard_ring import draw_gr min_s = 0.27 min_w = 0.17 min_w_m1 = 0.23 min_s_m1 = 0.38 + class guard_ring_gen(pya.PCellDeclarationHelper): """ Guard Ring Generator for Skywater130 @@ -32,16 +34,15 @@ class guard_ring_gen(pya.PCellDeclarationHelper): def __init__(self): # Initialize super class. - super(guard_ring_gen, self).__init__() + super().__init__() - #===================== PARAMETERS DECLARATIONS ===================== + # ===================== PARAMETERS DECLARATIONS ===================== self.param("in_w", self.TypeDouble, "Inner Width", default=min_s, unit="um") self.param("in_l", self.TypeDouble, "Inner Length", default=min_s, unit="um") self.param("grw", self.TypeDouble, "Guard Ring Width", default=min_w, unit="um") - - self.Type_handle = self.param("con_lev", self.TypeList, "Connection Level") + self.Type_handle = self.param("con_lev", self.TypeList, "Connection Level") self.Type_handle.add_choice("None", "None") self.Type_handle.add_choice("li", "li") self.Type_handle.add_choice("metal1", "metal1") @@ -49,34 +50,33 @@ def __init__(self): def display_text_impl(self): # Provide a descriptive text for the cell return f"Guard Ring(Ring Width = {self.grw})" - + def coerce_parameters_impl(self): # We employ coerce_parameters_impl to decide whether the handle or the # numeric parameter has changed (by comparing against the effective # radius ru) and set ru to the effective radius. We also update the - # numerical value or the shape, depending on which on has not changed. + # numerical value or the shape, depending on which on has not changed. # w,l must be larger or equal than min. values. - if self.con_lev == "metal1": - if self.grw < min_w_m1 : + if self.grw < min_w_m1: self.grw = min_w_m1 - if self.in_l < min_s_m1 : + if self.in_l < min_s_m1: self.in_l = min_s_m1 - - if self.in_w < min_s_m1 : - self.in_w = min_s_m1 - else : - if self.grw < min_w : + + if self.in_w < min_s_m1: + self.in_w = min_s_m1 + else: + if self.grw < min_w: self.grw = min_w - if self.in_l < min_s : + if self.in_l < min_s: self.in_l = min_s - - if self.in_w < min_s : - self.in_w = min_s - + + if self.in_w < min_s: + self.in_w = min_s + def can_create_from_shape_impl(self): # Implement the "Create PCell from shape" protocol: we can use any shape which # has a finite bounding box @@ -87,16 +87,27 @@ def parameters_from_shape_impl(self): # bounding box width and layer self.r = self.shape.bbox().width() * self.layout.dbu / 2 self.l = self.layout.get_info(self.layer) - + def transformation_from_shape_impl(self): # Implement the "Create PCell from shape" protocol: we use the center of the shape's # bounding box to determine the transformation return pya.Trans(self.shape.bbox().center()) - + def produce_impl(self): - instance = draw_gr(layout=self.layout, in_l=self.in_l, in_w=self.in_w , grw= self.grw , con_lev=self.con_lev) - write_cells = pya.CellInstArray(instance.cell_index(), pya.Trans(pya.Point(0, 0)), - pya.Vector(0, 0), pya.Vector(0, 0), 1, 1) + instance = draw_gr( + layout=self.layout, + in_l=self.in_l, + in_w=self.in_w, + grw=self.grw, + con_lev=self.con_lev, + ) + write_cells = pya.CellInstArray( + instance.cell_index(), + pya.Trans(pya.Point(0, 0)), + pya.Vector(0, 0), + pya.Vector(0, 0), + 1, + 1, + ) self.cell.insert(write_cells) self.cell.flatten(1) - \ No newline at end of file diff --git a/sky130/cells/klayout/pymacros/cells/layers_def.py b/sky130/cells/klayout/pymacros/cells/layers_def.py index d9d751a6c..c5fb15bfc 100644 --- a/sky130/cells/klayout/pymacros/cells/layers_def.py +++ b/sky130/cells/klayout/pymacros/cells/layers_def.py @@ -1,101 +1,100 @@ -# Copyright 2022 Skywater 130nm pdk development +# Copyright 2022 Skywater 130nm pdk development # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. -# +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. -# +# # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . ######################################################################################################################## -# Skywater 130nm Layers parameters generation +# Skywater 130nm Layers parameters generation ######################################################################################################################## -from importlib.util import LazyLoader from gdsfactory.types import LayerSpec -diff_layer : LayerSpec = (65,20) -diff_lbl : LayerSpec = (65,6) +diff_layer: LayerSpec = (65, 20) +diff_lbl: LayerSpec = (65, 6) -tap_layer : LayerSpec = (65,44) -tap_lbl : LayerSpec = (65,5) +tap_layer: LayerSpec = (65, 44) +tap_lbl: LayerSpec = (65, 5) -nwell_layer : LayerSpec = (64,20) +nwell_layer: LayerSpec = (64, 20) -dnwell_layer : LayerSpec = (64,18) +dnwell_layer: LayerSpec = (64, 18) -hvtp_layer : LayerSpec = (78,44) # high_vt PMOS +hvtp_layer: LayerSpec = (78, 44) # high_vt PMOS -hvi_layer : LayerSpec = (75,20) # high voltage layer for voltages higher than 1.8v +hvi_layer: LayerSpec = (75, 20) # high voltage layer for voltages higher than 1.8v -lvtn_layer : LayerSpec = (125,44) # low_vt NMOS +lvtn_layer: LayerSpec = (125, 44) # low_vt NMOS -poly_layer : LayerSpec = (66,20) +poly_layer: LayerSpec = (66, 20) -hvntm_layer : LayerSpec = (125,20) # high voltage n-implant +hvntm_layer: LayerSpec = (125, 20) # high voltage n-implant -nsdm_layer : LayerSpec = (93,44) +nsdm_layer: LayerSpec = (93, 44) -psdm_layer : LayerSpec = (94,20) +psdm_layer: LayerSpec = (94, 20) -npc_layer : LayerSpec = (95,20) +npc_layer: LayerSpec = (95, 20) -licon_layer : LayerSpec = (66,44) +licon_layer: LayerSpec = (66, 44) -li_layer : LayerSpec = (67,20) -li_lbl : LayerSpec = (67,5) +li_layer: LayerSpec = (67, 20) +li_lbl: LayerSpec = (67, 5) -mcon_layer : LayerSpec = (67,44) +mcon_layer: LayerSpec = (67, 44) -m1_layer : LayerSpec = (68,20) -m1_lbl : LayerSpec = (68,5) +m1_layer: LayerSpec = (68, 20) +m1_lbl: LayerSpec = (68, 5) -via1_layer : LayerSpec = (68,44) +via1_layer: LayerSpec = (68, 44) -m2_layer : LayerSpec = (69,20) -m2_lbl : LayerSpec = (69,5) +m2_layer: LayerSpec = (69, 20) +m2_lbl: LayerSpec = (69, 5) -via2_layer : LayerSpec = (69,44) +via2_layer: LayerSpec = (69, 44) -m3_layer : LayerSpec = (70,20) -m3_lbl : LayerSpec = (70,5) +m3_layer: LayerSpec = (70, 20) +m3_lbl: LayerSpec = (70, 5) -via3_layer : LayerSpec = (70,44) +via3_layer: LayerSpec = (70, 44) -m4_layer : LayerSpec = (71,20) -m4_lbl : LayerSpec = (71,5) +m4_layer: LayerSpec = (71, 20) +m4_lbl: LayerSpec = (71, 5) -via4_layer : LayerSpec = (71,44) +via4_layer: LayerSpec = (71, 44) -m5_layer : LayerSpec = (72,20) -m5_lbl : LayerSpec = (72,5) +m5_layer: LayerSpec = (72, 20) +m5_lbl: LayerSpec = (72, 5) -pr_bound_layer : LayerSpec = (235,4) +pr_bound_layer: LayerSpec = (235, 4) -areaid_lvn_layer : LayerSpec = (81,60) +areaid_lvn_layer: LayerSpec = (81, 60) -areaid_dio_layer : LayerSpec = (81,23) +areaid_dio_layer: LayerSpec = (81, 23) -capm_layer : LayerSpec = (89,44) +capm_layer: LayerSpec = (89, 44) -cap2m_layer : LayerSpec = (97,44) +cap2m_layer: LayerSpec = (97, 44) ######res -diff_res : LayerSpec = (65,13) -poly_res : LayerSpec = (66,13) -rpm_drawing : LayerSpec = (86,20) -rpm_high_drawing : LayerSpec = (79,20) -pwell_res : LayerSpec = (64,13) -li1_res : LayerSpec = (67,13) -met1_res : LayerSpec = (68,13) -met2_res : LayerSpec = (69,13) -met3_res : LayerSpec = (70,13) -met4_res : LayerSpec = (71,13) -met5_res : LayerSpec = (72,13) +diff_res: LayerSpec = (65, 13) +poly_res: LayerSpec = (66, 13) +rpm_drawing: LayerSpec = (86, 20) +rpm_high_drawing: LayerSpec = (79, 20) +pwell_res: LayerSpec = (64, 13) +li1_res: LayerSpec = (67, 13) +met1_res: LayerSpec = (68, 13) +met2_res: LayerSpec = (69, 13) +met3_res: LayerSpec = (70, 13) +met4_res: LayerSpec = (71, 13) +met5_res: LayerSpec = (72, 13) diff --git a/sky130/cells/klayout/pymacros/cells/parent_res.py b/sky130/cells/klayout/pymacros/cells/parent_res.py index be3e74bd2..a1d4ba83b 100644 --- a/sky130/cells/klayout/pymacros/cells/parent_res.py +++ b/sky130/cells/klayout/pymacros/cells/parent_res.py @@ -15,17 +15,19 @@ # res Generator for skywater130 -import gdsfactory as gf import math - from abc import ABC, abstractmethod +import gdsfactory as gf + # ##############CONSTANT############3 -CONTACT_SPACE=0.19 -CONTACT_S=0.18 -CONTACT_N=10 +CONTACT_SPACE = 0.19 +CONTACT_S = 0.18 +CONTACT_N = 10 + + ############################3 class draw_res(ABC): """parent abstracted class for the backend of the res @@ -57,10 +59,10 @@ def draw_rect_layer(self, layer_names, l_space, w_space): [0.5*width of the layers - 0.5*width of the marked layer] """ - for layer_, l, w in zip(layer_names, l_space, w_space): + for layer_, l_rect, w in zip(layer_names, l_space, w_space): self.c.add_ref( gf.components.rectangle( - size=(self.w_res + 2 * w, self.l_res + 2 * l), + size=(self.w_res + 2 * w, self.l_res + 2 * l_rect), layer=layer_, centered=True, ) @@ -79,36 +81,28 @@ def draw_frame_layer(self, lay_nm, l_sp, w_sp, thi): list of the thickness of the frame """ - for layer_, l, w, thick in zip(lay_nm, l_sp, w_sp, thi): + for layer_, l_frame, w, thick in zip(lay_nm, l_sp, w_sp, thi): l_h = thick w_h = self.w_res + 2 * w - l_v = self.l_res + 2 * l - 2 * thick + l_v = self.l_res + 2 * l_frame - 2 * thick w_v = thick res1 = self.c.add_ref( - gf.components.rectangle( - size=(w_h, l_h), layer=layer_, centered=True - ) + gf.components.rectangle(size=(w_h, l_h), layer=layer_, centered=True) ) res2 = self.c.add_ref( - gf.components.rectangle( - size=(w_h, l_h), layer=layer_, centered=True - ) + gf.components.rectangle(size=(w_h, l_h), layer=layer_, centered=True) ) res1.movey(0.5 * l_v + 0.5 * l_h) res2.movey(-1 * (0.5 * l_v + 0.5 * l_h)) res1 = self.c.add_ref( - gf.components.rectangle( - size=(w_v, l_v), layer=layer_, centered=True - ) + gf.components.rectangle(size=(w_v, l_v), layer=layer_, centered=True) ) res2 = self.c.add_ref( - gf.components.rectangle( - size=(w_v, l_v), layer=layer_, centered=True - ) + gf.components.rectangle(size=(w_v, l_v), layer=layer_, centered=True) ) res1.movex(0.5 * w_h - 0.5 * w_v) @@ -133,10 +127,9 @@ def draw_contact_layer_h( list of the spaces btw the contacts """ - for layer_, l, size_l, size_w, space_fit, space_btw in zip( + for layer_, l_h, size_l, size_w, space_fit, space_btw in zip( layer_names, l_space, sizes_l, sizes_w, s_fit_in, s_btw ): - counts = math.floor((space_fit) / (size_w + space_btw)) if counts < 1: counts = 1 @@ -156,8 +149,8 @@ def draw_contact_layer_h( spacing=(size_w + space_btw, size_w + space_btw), ) - res_ar1.movey(size_l * 0.5 + l + self.l_res * 0.5) - res_ar2.movey(-1 * (size_l * 0.5 + l + self.l_res * 0.5)) + res_ar1.movey(size_l * 0.5 + l_h + self.l_res * 0.5) + res_ar2.movey(-1 * (size_l * 0.5 + l_h + self.l_res * 0.5)) res_ar1.movex(-(counts - 1) * (size_w + space_btw) * 0.5) res_ar2.movex(-(counts - 1) * (size_w + space_btw) * 0.5) @@ -188,7 +181,7 @@ def draw_contact_layer_v( """ if spaces_btw is None: spaces_btw = sizes_w - for layer_, l, size_l, size_w, space_fit, space_btw in zip( + for layer_, l_v, size_l, size_w, space_fit, space_btw in zip( layer_names, l_space, sizes_l, @@ -196,7 +189,6 @@ def draw_contact_layer_v( space_fit_in, spaces_btw, ): - counts = math.floor((space_fit) / (size_w + space_btw)) res = gf.components.rectangle( size=(size_w, size_l), layer=layer_, centered=True @@ -217,8 +209,8 @@ def draw_contact_layer_v( res_ar1.movey(-(counts - 1) * size_l) res_ar2.movey(-(counts - 1) * size_l) - res_ar1.movex(0.5 * self.w_res + l + 0.5 * size_w) - res_ar2.movex(-(0.5 * self.w_res + l + 0.5 * size_w)) + res_ar1.movex(0.5 * self.w_res + l_v + 0.5 * size_w) + res_ar2.movex(-(0.5 * self.w_res + l_v + 0.5 * size_w)) def draw_2dArr_layer(self, layer_names, mcon_d, l_up=0, l_down=0, n=0): """draw the 2d contact layers of the res @@ -233,7 +225,7 @@ def draw_2dArr_layer(self, layer_names, mcon_d, l_up=0, l_down=0, n=0): size=(mcon_d, mcon_d), layer=layer_names, centered=True ) - counts_arr = math.floor(self.w_res / (2*CONTACT_S)) + counts_arr = math.floor(self.w_res / (2 * CONTACT_S)) if counts_arr <= 0: counts_arr = 1 if counts_arr % 2 == 0 and counts_arr > CONTACT_N: diff --git a/sky130/cells/klayout/pymacros/cells/res_diff_child.py b/sky130/cells/klayout/pymacros/cells/res_diff_child.py index 6977e64d6..757f2dd9b 100644 --- a/sky130/cells/klayout/pymacros/cells/res_diff_child.py +++ b/sky130/cells/klayout/pymacros/cells/res_diff_child.py @@ -19,16 +19,16 @@ from .layers_def import ( diff_layer, diff_res, - nsdm_layer, - tap_layer, - psdm_layer, + hvi_layer, + hvntm_layer, li_layer, licon_layer, m1_layer, mcon_layer, - hvi_layer, - hvntm_layer, + nsdm_layer, nwell_layer, + psdm_layer, + tap_layer, ) from .parent_res import draw_res @@ -93,7 +93,7 @@ def your_res( self, layout, type="sky130_fd_pr__res_nd_lvt", - l: float = 2.1, + l_res: float = 2.1, w: float = 0.42, gr: int = 1, ): @@ -102,14 +102,13 @@ def your_res( Args: layout(layout): drawing layout type(float): type of the resistor - l(float): length of the resistor + l_res(float): length of the resistor w(float): width of the resistor gr(int): guard ring of the resistor """ - self.set_l_w(l, w) + self.set_l_w(l_res, w) if type == "sky130_fd_pr__res_nd_lvt": - # rects layer_names = [diff_res, diff_layer, nsdm_layer] l1 = [DIFF_RES, DIFF_LAYER_ND[0], NSDM_LAYER_ND[0]] @@ -229,7 +228,7 @@ def your_res( l1 = [LICON3_ND_LVT[0]] sizes_l = [LICON3_ND_LVT[1]] sizes_w = [LICON3_ND_LVT[2]] - space_fit_in = [l + LICON3_ND_LVT[3]] + space_fit_in = [l_res + LICON3_ND_LVT[3]] spaces = [LICON3_ND_LVT[4]] self.draw_contact_layer_v( layer_names, l1, sizes_w, sizes_l, space_fit_in, spaces @@ -404,7 +403,7 @@ def your_res( l1 = [LICON3_ND_HVT] sizes_l = [LICON3_ND_LVT[1]] sizes_w = [LICON3_ND_LVT[2]] - space_fit_in = [l + LICON3_ND_LVT[3]] + space_fit_in = [l_res + LICON3_ND_LVT[3]] spaces = [LICON3_ND_LVT[4]] if gr: @@ -418,7 +417,6 @@ def your_res( cell_name = type return layout.cell(cell_name) elif type == "sky130_fd_pr__res_pd_lvt": - # rects layer_names = [ diff_res, @@ -448,7 +446,6 @@ def your_res( thick = [TAP_ND_LVT[2], PSDM_ND_LVT[2], LI_ND_LVT[2]] if gr: - self.draw_frame_layer(layer_names, l1, w1, thick) # countacts @@ -503,7 +500,6 @@ def your_res( ] if gr == 0: - layer_names = [ licon_layer, mcon_layer, @@ -555,10 +551,9 @@ def your_res( l1 = [LICON3_ND_LVT[0]] sizes_l = [LICON3_ND_LVT[1]] sizes_w = [LICON3_ND_LVT[2]] - space_fit_in = [l + LICON3_ND_LVT[3]] + space_fit_in = [l_res + LICON3_ND_LVT[3]] spaces = [LICON3_ND_LVT[4]] if gr: - self.draw_contact_layer_v( layer_names, l1, sizes_w, sizes_l, space_fit_in, spaces ) @@ -569,7 +564,6 @@ def your_res( cell_name = type return layout.cell(cell_name) elif type == "sky130_fd_pr__res_pd_hvt": - # rects layer_names = [ diff_res, @@ -611,7 +605,6 @@ def your_res( thick = [TAP_PD_HVT[2], PSDM_PD_HVT[2], LI_PD_HVT[2]] if gr: - self.draw_frame_layer(layer_names, l1, w1, thick) # countacts @@ -716,10 +709,9 @@ def your_res( l1 = [LICON3_ND_HVT] sizes_l = [LICON3_ND_LVT[1]] sizes_w = [LICON3_ND_LVT[2]] - space_fit_in = [l + LICON3_ND_LVT[3]] + space_fit_in = [l_res + LICON3_ND_LVT[3]] spaces = [LICON3_ND_LVT[4]] if gr: - self.draw_contact_layer_v( layer_names, l1, sizes_w, sizes_l, space_fit_in, spaces ) diff --git a/sky130/cells/klayout/pymacros/cells/res_diff_klayout_panel.py b/sky130/cells/klayout/pymacros/cells/res_diff_klayout_panel.py index a08a3501e..f60422013 100644 --- a/sky130/cells/klayout/pymacros/cells/res_diff_klayout_panel.py +++ b/sky130/cells/klayout/pymacros/cells/res_diff_klayout_panel.py @@ -12,8 +12,8 @@ # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -from .res_klayout_panel import res from .res_diff_child import res_diff_draw +from .res_klayout_panel import res # ################constants################ L_MIN = 2.1 @@ -82,6 +82,6 @@ def produce_impl(self): """ drw = res_diff_draw(self.type) instance = drw.your_res( - self.layout, l=self.len, w=self.w, type=self.type, gr=self.gr + self.layout, l_res=self.len, w=self.w, type=self.type, gr=self.gr ) super().produce_impl(instance) diff --git a/sky130/cells/klayout/pymacros/cells/res_klayout_panel.py b/sky130/cells/klayout/pymacros/cells/res_klayout_panel.py index 41060cbfe..61d899a38 100644 --- a/sky130/cells/klayout/pymacros/cells/res_klayout_panel.py +++ b/sky130/cells/klayout/pymacros/cells/res_klayout_panel.py @@ -27,7 +27,7 @@ class res(pya.PCellDeclarationHelper): def __init__(self, l_min, w_min): # Initialize super class. - super(res, self).__init__() + super().__init__() # ===================== PARAMETERS DECLARATIONS ===================== @@ -37,9 +37,7 @@ def __init__(self, l_min, w_min): self.param("w", self.TypeDouble, "width", default=w_min, unit="um") self.param("gr", self.TypeBoolean, "Gaurd Ring", default=1) - self.param( - "area", self.TypeDouble, "Area", readonly=True, unit="um^2" - ) + self.param("area", self.TypeDouble, "Area", readonly=True, unit="um^2") self.param( "res_value", self.TypeDouble, @@ -92,11 +90,7 @@ def can_create_from_shape_impl(self): we can use any shape which has a finite bounding box """ - return ( - self.shape.is_box() - or self.shape.is_polygon() - or self.shape.is_path() - ) + return self.shape.is_box() or self.shape.is_polygon() or self.shape.is_path() def parameters_from_shape_impl(self): """Implement the "Create PCell from shape" protocol: diff --git a/sky130/cells/klayout/pymacros/cells/res_metal_child.py b/sky130/cells/klayout/pymacros/cells/res_metal_child.py index 018ca4f02..7838ac397 100644 --- a/sky130/cells/klayout/pymacros/cells/res_metal_child.py +++ b/sky130/cells/klayout/pymacros/cells/res_metal_child.py @@ -16,22 +16,23 @@ # res Generator for skywater130 +from gdsfactory.types import LayerSpec + from .layers_def import ( li1_res, li_layer, - met1_res, - met2_res, - met3_res, - met4_res, - met5_res, m1_layer, m2_layer, m3_layer, m4_layer, m5_layer, + met1_res, + met2_res, + met3_res, + met4_res, + met5_res, ) from .parent_res import draw_res -from gdsfactory.types import LayerSpec # ########constants########## # ONLY FOR GENERIC RES @@ -71,7 +72,7 @@ def your_res( self, layout, type="sky130_fd_pr__res_generic_l1", - l: float = L_MIN_G, + l_res: float = L_MIN_G, w: float = W_MIN_G, ): """draw the res with calling the parent func with right data @@ -83,7 +84,7 @@ def your_res( w(float): width of the resistor """ - self.set_l_w(l, w) + self.set_l_w(l_res, w) if type == "sky130_fd_pr__res_generic_l1": self.gen_res(li1_res, li_layer) diff --git a/sky130/cells/klayout/pymacros/cells/res_metal_klayout_panel.py b/sky130/cells/klayout/pymacros/cells/res_metal_klayout_panel.py index 94b4c951d..32169d2d4 100644 --- a/sky130/cells/klayout/pymacros/cells/res_metal_klayout_panel.py +++ b/sky130/cells/klayout/pymacros/cells/res_metal_klayout_panel.py @@ -113,7 +113,5 @@ def produce_impl(self): """ drw = res_metal_draw(self.type) - instance = drw.your_res( - self.layout, l=self.len, w=self.w, type=self.type - ) + instance = drw.your_res(self.layout, l_res=self.len, w=self.w, type=self.type) super().produce_impl(instance) diff --git a/sky130/cells/klayout/pymacros/cells/res_poly_child.py b/sky130/cells/klayout/pymacros/cells/res_poly_child.py index 4119e62bc..91f943732 100644 --- a/sky130/cells/klayout/pymacros/cells/res_poly_child.py +++ b/sky130/cells/klayout/pymacros/cells/res_poly_child.py @@ -17,25 +17,23 @@ # res Generator for skywater130 import math -from .layers_def import ( - tap_layer, - psdm_layer, - nsdm_layer, +from .layers_def import ( + dnwell_layer, li_layer, licon_layer, m1_layer, mcon_layer, - rpm_drawing, - rpm_high_drawing, npc_layer, + nsdm_layer, + nwell_layer, poly_layer, poly_res, + psdm_layer, pwell_res, - dnwell_layer, - nwell_layer, - - + rpm_drawing, + rpm_high_drawing, + tap_layer, ) from .parent_res import draw_res @@ -69,22 +67,22 @@ W_MIN_ISO = 2.65 # react -DNWELL=[1.82,1.03] +DNWELL = [1.82, 1.03] # FRAME -NWELL=[2.22,1.43,1.43] +NWELL = [2.22, 1.43, 1.43] TAP_LI_LAYER_ISO = [1.59, 0.8, 0.17] NSDM_LAYER_ISO = [1.715, 0.925, 0.42] # CONTACTS H -TAP_ISO=[0,0.53,0,0,0] -PSDM_ISO=[-0.125,0.78,0,0,0] -LI_ISO=[0,0.53,0,0,0] -M1_ISO=[0.055,0.325,0,0,0] -LICON_ISO=[0.01,0.17,0.17,0,0.17] -LICON_ISO2=0.35 -LICON_ISO3=1.42 -MCON_ISO=[0.13,0.17,0.17,0,0.19] +TAP_ISO = [0, 0.53, 0, 0, 0] +PSDM_ISO = [-0.125, 0.78, 0, 0, 0] +LI_ISO = [0, 0.53, 0, 0, 0] +M1_ISO = [0.055, 0.325, 0, 0, 0] +LICON_ISO = [0.01, 0.17, 0.17, 0, 0.17] +LICON_ISO2 = 0.35 +LICON_ISO3 = 1.42 +MCON_ISO = [0.13, 0.17, 0.17, 0, 0.19] # CONTACTS H -LICON_ISO_H=[0.63,0.17,0.17,2.1,0.17] +LICON_ISO_H = [0.63, 0.17, 0.17, 2.1, 0.17] # ############################### # THE REST OF THE RES L_MIN = 0.5 @@ -136,7 +134,7 @@ def __init__(self, type_): def poly_res( self, - l: float = L_MIN, + l_res: float = L_MIN, w: float = W_MIN, gr: int = GR, n_mcon: int = 0, @@ -146,7 +144,7 @@ def poly_res( """draw the res the specific res with right data Args: - l(float): length of the resistor + l_res(float): length of the resistor w(float): width of the resistor gr(int): guard ring of the resistor n_mcon(float): mcon_layer number of columns @@ -155,7 +153,7 @@ def poly_res( """ # rects - self.set_l_w(l + EXTRA_LEN, w) + self.set_l_w(l_res + EXTRA_LEN, w) rpm_layer = rpm_drawing if xhigh: rpm_layer = rpm_high_drawing @@ -180,7 +178,6 @@ def poly_res( w1 = [TAP_LI_LAYER[1], TAP_LI_LAYER[1]] thick = [TAP_LI_LAYER[2], TAP_LI_LAYER[2]] if gr: - self.draw_frame_layer(layer_names, l1, w1, thick) # countacts @@ -210,11 +207,10 @@ def poly_res( l1 = [LICON_LAYER[0]] sizes_l = [LICON_LAYER[1]] sizes_w = [LICON_LAYER[2]] - space_fit_in = [l + LICON_LAYER[3]] + space_fit_in = [l_res + LICON_LAYER[3]] spaces = [LICON_LAYER[4]] if gr: - self.draw_contact_layer_v( layer_names, l1, sizes_w, sizes_l, space_fit_in, spaces ) @@ -228,7 +224,7 @@ def your_res( self, layout, type="sky130_fd_pr__res_generic_po", - l: float = L_MIN_G, + l_res: float = L_MIN_G, w: float = W_MIN_G, gr: int = GR, ): @@ -237,12 +233,12 @@ def your_res( Args: layout(layout): drawing layout type(str): type of the resistor - l(float): length of the resistor + l_res(float): length of the resistor w(float): width of the resistor gr(int): guard ring of the resistor """ - self.set_l_w(l, w) + self.set_l_w(l_res, w) if type == "sky130_fd_pr__res_generic_po": # rects @@ -258,7 +254,6 @@ def your_res( w1 = [TAP_LI_LAYER_G[1], PSDM_LAYER_G[1], TAP_LI_LAYER_G[1]] thick = [TAP_LI_LAYER_G[2], PSDM_LAYER_G[2], TAP_LI_LAYER_G[2]] if gr: - self.draw_frame_layer(layer_names, l1, w1, thick) # countacts @@ -359,11 +354,10 @@ def your_res( l1 = [LICON_LAYER_G[0]] sizes_l = [LICON_LAYER_G[1]] sizes_w = [LICON_LAYER_G[2]] - space_fit_in = [l + LICON_LAYER_G[3]] + space_fit_in = [l_res + LICON_LAYER_G[3]] spaces = [LICON_LAYER_G[4]] if gr: - self.draw_contact_layer_v( layer_names, l1, sizes_w, sizes_l, space_fit_in, spaces ) @@ -377,13 +371,13 @@ def your_res( layout.read("res_temp.gds") cell_name = type return layout.cell(cell_name) - + elif type == "sky130_fd_pr__res_iso_pw": # rects layer_names = [pwell_res, dnwell_layer] l1 = [0, DNWELL[0]] w1 = [0, DNWELL[1]] - if gr==0: + if gr == 0: layer_names = [pwell_res] l1 = [0] w1 = [0] @@ -391,13 +385,17 @@ def your_res( self.draw_rect_layer(layer_names, l1, w1) # frams - layer_names = [nwell_layer, tap_layer,nsdm_layer ,li_layer] - l1 = [NWELL[0], TAP_LI_LAYER_ISO[0], NSDM_LAYER_ISO[0],TAP_LI_LAYER_ISO[0]] - w1 = [NWELL[1], TAP_LI_LAYER_ISO[1], NSDM_LAYER_ISO[1],TAP_LI_LAYER_ISO[1]] - thick = [NWELL[2], TAP_LI_LAYER_ISO[2], NSDM_LAYER_ISO[2],TAP_LI_LAYER_ISO[2]] - - if gr: + layer_names = [nwell_layer, tap_layer, nsdm_layer, li_layer] + l1 = [NWELL[0], TAP_LI_LAYER_ISO[0], NSDM_LAYER_ISO[0], TAP_LI_LAYER_ISO[0]] + w1 = [NWELL[1], TAP_LI_LAYER_ISO[1], NSDM_LAYER_ISO[1], TAP_LI_LAYER_ISO[1]] + thick = [ + NWELL[2], + TAP_LI_LAYER_ISO[2], + NSDM_LAYER_ISO[2], + TAP_LI_LAYER_ISO[2], + ] + if gr: self.draw_frame_layer(layer_names, l1, w1, thick) # countacts @@ -410,7 +408,7 @@ def your_res( licon_layer, licon_layer, licon_layer, - mcon_layer + mcon_layer, ] l1 = [ @@ -421,7 +419,7 @@ def your_res( LICON_ISO[0], LICON_ISO2, LICON_ISO3, - MCON_ISO[0] + MCON_ISO[0], ] sizes_l = [ TAP_ISO[1], @@ -431,18 +429,27 @@ def your_res( LICON_ISO[1], LICON_ISO[1], LICON_ISO[1], - MCON_ISO[1] + MCON_ISO[1], + ] + sizes_w = [ + w - 0.4, + w - 0.15, + w - 0.48, + w - 0.4, + LICON_ISO[2], + LICON_ISO[2], + LICON_ISO[2], + MCON_ISO[2], ] - sizes_w = [w-0.4, w-0.15, w-0.48, w - 0.4, LICON_ISO[2],LICON_ISO[2],LICON_ISO[2],MCON_ISO[2]] space_fit_in = [ TAP_ISO[3], PSDM_ISO[3], LI_ISO[3], M1_ISO[3], - w-0.6, - w-0.6, - w+0.76, - w-0.49 + w - 0.6, + w - 0.6, + w + 0.76, + w - 0.49, ] spaces = [ TAP_ISO[4], @@ -452,7 +459,7 @@ def your_res( LICON_ISO[4], LICON_ISO[4], LICON_ISO[4], - MCON_ISO[4] + MCON_ISO[4], ] if gr == 0: @@ -463,7 +470,7 @@ def your_res( m1_layer, licon_layer, licon_layer, - mcon_layer + mcon_layer, ] l1 = [ @@ -473,7 +480,7 @@ def your_res( M1_ISO[0], LICON_ISO[0], LICON_ISO2, - MCON_ISO[0] + MCON_ISO[0], ] sizes_l = [ TAP_ISO[1], @@ -482,17 +489,25 @@ def your_res( M1_ISO[1], LICON_ISO[1], LICON_ISO[1], - MCON_ISO[1] + MCON_ISO[1], + ] + sizes_w = [ + w - 0.4, + w - 0.15, + w - 0.48, + w - 0.4, + LICON_ISO[2], + LICON_ISO[2], + MCON_ISO[2], ] - sizes_w = [w-0.4, w-0.15, w-0.48, w - 0.4, LICON_ISO[2],LICON_ISO[2],MCON_ISO[2]] space_fit_in = [ TAP_ISO[3], PSDM_ISO[3], LI_ISO[3], M1_ISO[3], - w-0.6, - w-0.6, - w-0.49 + w - 0.6, + w - 0.6, + w - 0.49, ] spaces = [ TAP_ISO[4], @@ -501,8 +516,8 @@ def your_res( M1_ISO[4], LICON_ISO[4], LICON_ISO[4], - MCON_ISO[4] - ] + MCON_ISO[4], + ] self.draw_contact_layer_h( layer_names, l1, sizes_w, sizes_l, space_fit_in, spaces @@ -512,45 +527,42 @@ def your_res( l1 = [LICON_ISO_H[0]] sizes_l = [LICON_ISO_H[1]] sizes_w = [LICON_ISO_H[2]] - space_fit_in = [l + LICON_ISO_H[3]] + space_fit_in = [l_res + LICON_ISO_H[3]] spaces = [LICON_ISO_H[4]] if gr: - self.draw_contact_layer_v( layer_names, l1, sizes_w, sizes_l, space_fit_in, spaces ) - c = self.get_c() c.write_gds("res_temp.gds") layout.read("res_temp.gds") cell_name = type return layout.cell(cell_name) - elif type == "sky130_fd_pr__res_high_po_0p35": - self.poly_res(l, W_MIN_0P35, gr, 0, RPM_FOR_LAYERS[0]) + self.poly_res(l_res, W_MIN_0P35, gr, 0, RPM_FOR_LAYERS[0]) elif type == "sky130_fd_pr__res_high_po_0p69": - self.poly_res(l, W_MIN_0P69, gr, 1, RPM_FOR_LAYERS[1]) + self.poly_res(l_res, W_MIN_0P69, gr, 1, RPM_FOR_LAYERS[1]) elif type == "sky130_fd_pr__res_high_po_1p41": - self.poly_res(l, W_MIN_1P41, gr, 1, RPM_FOR_LAYERS[2]) + self.poly_res(l_res, W_MIN_1P41, gr, 1, RPM_FOR_LAYERS[2]) elif type == "sky130_fd_pr__res_high_po_2p85": - self.poly_res(l, W_MIN_2P85, gr, 1, RPM_FOR_LAYERS[3]) + self.poly_res(l_res, W_MIN_2P85, gr, 1, RPM_FOR_LAYERS[3]) elif type == "sky130_fd_pr__res_high_po_5p73": - self.poly_res(l, W_MIN_5P73, gr, 1, RPM_FOR_LAYERS[4]) + self.poly_res(l_res, W_MIN_5P73, gr, 1, RPM_FOR_LAYERS[4]) # high elif type == "sky130_fd_pr__res_xhigh_po_0p35": - self.poly_res(l, W_MIN_0P35, gr, 0, RPM_FOR_LAYERS[0], 1) + self.poly_res(l_res, W_MIN_0P35, gr, 0, RPM_FOR_LAYERS[0], 1) elif type == "sky130_fd_pr__res_xhigh_po_0p69": - self.poly_res(l, W_MIN_0P69, gr, 1, RPM_FOR_LAYERS[1], 1) + self.poly_res(l_res, W_MIN_0P69, gr, 1, RPM_FOR_LAYERS[1], 1) elif type == "sky130_fd_pr__res_xhigh_po_1p41": - self.poly_res(l, W_MIN_1P41, gr, 1, RPM_FOR_LAYERS[2], 1) + self.poly_res(l_res, W_MIN_1P41, gr, 1, RPM_FOR_LAYERS[2], 1) elif type == "sky130_fd_pr__res_xhigh_po_2p85": - self.poly_res(l, W_MIN_2P85, gr, 1, RPM_FOR_LAYERS[3], 1) + self.poly_res(l_res, W_MIN_2P85, gr, 1, RPM_FOR_LAYERS[3], 1) elif type == "sky130_fd_pr__res_xhigh_po_5p73": - self.poly_res(l, W_MIN_5P73, gr, 1, RPM_FOR_LAYERS[4], 1) + self.poly_res(l_res, W_MIN_5P73, gr, 1, RPM_FOR_LAYERS[4], 1) c = self.get_c() c.write_gds("res_temp.gds") diff --git a/sky130/cells/klayout/pymacros/cells/res_poly_klayout_panel.py b/sky130/cells/klayout/pymacros/cells/res_poly_klayout_panel.py index 6fccc4712..696c23345 100644 --- a/sky130/cells/klayout/pymacros/cells/res_poly_klayout_panel.py +++ b/sky130/cells/klayout/pymacros/cells/res_poly_klayout_panel.py @@ -14,11 +14,12 @@ # along with this program. If not, see . from .res_klayout_panel import res from .res_poly_child import res_poly_draw + # ################constants################ L_MIN = 1.65 W_MIN = 0.33 -L_MIN_ISO=26.5 -W_MIN_ISO=2.65 +L_MIN_ISO = 26.5 +W_MIN_ISO = 2.65 L_MIN_PO = 0.5 W_MIN_0P35 = 0.35 W_MIN_0P69 = 0.69 @@ -65,7 +66,7 @@ def __init__(self): ) self.Type_handle.add_choice( "sky130_fd_pr__res_iso_pw", "sky130_fd_pr__res_iso_pw" - ) + ) self.Type_handle.add_choice( "sky130_fd_pr__res_high_po_0p35", "sky130_fd_pr__res_high_po_0p35" ) @@ -119,7 +120,7 @@ def coerce_parameters_impl(self): if self.type == "sky130_fd_pr__res_generic_po": super().coerce_parameters_impl(L_MIN, W_MIN) # (l_min,w_min) self.res_value = RES_GEN * self.area - + elif self.type == "sky130_fd_pr__res_iso_pw": super().coerce_parameters_impl(L_MIN_ISO, W_MIN_ISO) self.res_value = RES_ISO * self.area @@ -167,6 +168,6 @@ def produce_impl(self): """ drw = res_poly_draw(self.type) instance = drw.your_res( - self.layout, l=self.len, w=self.w, type=self.type, gr=self.gr + self.layout, l_res=self.len, w=self.w, type=self.type, gr=self.gr ) super().produce_impl(instance) diff --git a/sky130/cells/klayout/pymacros/cells/rf.py b/sky130/cells/klayout/pymacros/cells/rf.py index 2beee027e..0de2ddfe7 100644 --- a/sky130/cells/klayout/pymacros/cells/rf.py +++ b/sky130/cells/klayout/pymacros/cells/rf.py @@ -1,15 +1,15 @@ -# Copyright 2022 Skywater 130nm pdk development +# Copyright 2022 Skywater 130nm pdk development # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. -# +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. -# +# # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . @@ -18,8 +18,10 @@ ######################################################################################################################## import pya -from .draw_rf import * -from .globals import * + +from .draw_rf import draw_rf_bjt, draw_rf_coils, draw_rf_mosfet +from .globals import RF_BJT_DEV, RF_COILS_DEV, RF_MOSFET_DEV + class rf_mosfet(pya.PCellDeclarationHelper): """ @@ -27,68 +29,78 @@ class rf_mosfet(pya.PCellDeclarationHelper): """ def __init__(self): - # Important: initialize the super class - super(rf_mosfet, self).__init__() + super().__init__() self.Type_handle = self.param("Type", self.TypeList, "Type") - - for i in RF_MOSFET_DEV : + + for i in RF_MOSFET_DEV: self.Type_handle.add_choice(i, i) - - - self.param("Model", self.TypeString, "Model", default="sky130_fd_pr__",readonly=True) + + self.param( + "Model", self.TypeString, "Model", default="sky130_fd_pr__", readonly=True + ) def display_text_impl(self): # Provide a descriptive text for the cell return str(self.Type) def produce_impl(self): - # This is the main part of the implementation: create the layout - self.percision = 1/self.layout.dbu - rf_mos_instance = draw_rf_mosfet(layout=self.layout,device_name=self.Type) - - write_cells = pya.CellInstArray(rf_mos_instance.cell_index(), pya.Trans(pya.Point(0, 0)), - pya.Vector(0, 0), pya.Vector(0, 0),1 , 1) + self.percision = 1 / self.layout.dbu + rf_mos_instance = draw_rf_mosfet(layout=self.layout, device_name=self.Type) + + write_cells = pya.CellInstArray( + rf_mos_instance.cell_index(), + pya.Trans(pya.Point(0, 0)), + pya.Vector(0, 0), + pya.Vector(0, 0), + 1, + 1, + ) self.cell.flatten(1) self.cell.insert(write_cells) - + self.layout.cleanup() - + + class rf_bjt(pya.PCellDeclarationHelper): """ rf bjt Generator for Skywater130 """ - - def __init__(self): + def __init__(self): # Important: initialize the super class - super(rf_bjt, self).__init__() + super().__init__() self.Type_handle = self.param("Type", self.TypeList, "Type") - for i in RF_BJT_DEV : + for i in RF_BJT_DEV: self.Type_handle.add_choice(i, i) - - - self.param("Model", self.TypeString, "Model", default="sky130_fd_pr__",readonly=True) - + + self.param( + "Model", self.TypeString, "Model", default="sky130_fd_pr__", readonly=True + ) def display_text_impl(self): # Provide a descriptive text for the cell return str(self.Type) def produce_impl(self): - # This is the main part of the implementation: create the layout - self.percision = 1/self.layout.dbu - rf_bjt_instance = draw_rf_bjt(layout=self.layout,device_name=self.Type) - - write_cells = pya.CellInstArray(rf_bjt_instance.cell_index(), pya.Trans(pya.Point(0, 0)), - pya.Vector(0, 0), pya.Vector(0, 0),1 , 1) + self.percision = 1 / self.layout.dbu + rf_bjt_instance = draw_rf_bjt(layout=self.layout, device_name=self.Type) + + write_cells = pya.CellInstArray( + rf_bjt_instance.cell_index(), + pya.Trans(pya.Point(0, 0)), + pya.Vector(0, 0), + pya.Vector(0, 0), + 1, + 1, + ) self.cell.flatten(1) self.cell.insert(write_cells) - + self.layout.cleanup() @@ -98,31 +110,35 @@ class rf_coils(pya.PCellDeclarationHelper): """ def __init__(self): - # Important: initialize the super class - super(rf_coils, self).__init__() + super().__init__() self.Type_handle = self.param("Type", self.TypeList, "Type") - for i in RF_COILS_DEV : + for i in RF_COILS_DEV: self.Type_handle.add_choice(i, i) - - - self.param("Model", self.TypeString, "Model", default="sky130_fd_pr__",readonly=True) + + self.param( + "Model", self.TypeString, "Model", default="sky130_fd_pr__", readonly=True + ) def display_text_impl(self): # Provide a descriptive text for the cell return str(self.Type) def produce_impl(self): - # This is the main part of the implementation: create the layout - self.percision = 1/self.layout.dbu - rf_coils_instance = draw_rf_coils(layout=self.layout,device_name=self.Type) - - write_cells = pya.CellInstArray(rf_coils_instance.cell_index(), pya.Trans(pya.Point(0, 0)), - pya.Vector(0, 0), pya.Vector(0, 0),1 , 1) + self.percision = 1 / self.layout.dbu + rf_coils_instance = draw_rf_coils(layout=self.layout, device_name=self.Type) + + write_cells = pya.CellInstArray( + rf_coils_instance.cell_index(), + pya.Trans(pya.Point(0, 0)), + pya.Vector(0, 0), + pya.Vector(0, 0), + 1, + 1, + ) self.cell.flatten(1) self.cell.insert(write_cells) - + self.layout.cleanup() - \ No newline at end of file diff --git a/sky130/cells/klayout/pymacros/cells/via_generator.py b/sky130/cells/klayout/pymacros/cells/via_generator.py index c82c26782..59c5bdfd7 100644 --- a/sky130/cells/klayout/pymacros/cells/via_generator.py +++ b/sky130/cells/klayout/pymacros/cells/via_generator.py @@ -1,15 +1,15 @@ -# Copyright 2022 Skywater 130nm pdk development +# Copyright 2022 Skywater 130nm pdk development # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. -# +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. -# +# # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . @@ -19,74 +19,92 @@ from math import ceil, floor -from tracemalloc import start + import gdsfactory as gf -from gdsfactory.types import Float2 , LayerSpec -from .layers_def import * +from gdsfactory.types import Float2, LayerSpec + +from .layers_def import ( + diff_layer, + li_layer, + licon_layer, + m1_layer, + m2_layer, + m3_layer, + m4_layer, + m5_layer, + mcon_layer, + npc_layer, + nsdm_layer, + nwell_layer, + poly_layer, + psdm_layer, + tap_layer, + via1_layer, + via2_layer, + via3_layer, + via4_layer, +) + @gf.cell def via_generator( - x_range : Float2 = (0,1) , - y_range : Float2 = (0,1) , - via_size : Float2 = (0.17,0.17), - via_layer : LayerSpec = (66,44), - via_enclosure : Float2 = (0.06,0.06), - via_spacing : Float2 = (0.17,0.17) - - + x_range: Float2 = (0, 1), + y_range: Float2 = (0, 1), + via_size: Float2 = (0.17, 0.17), + via_layer: LayerSpec = (66, 44), + via_enclosure: Float2 = (0.06, 0.06), + via_spacing: Float2 = (0.17, 0.17), ) -> gf.Component(): - """ - return only vias withen the range xrange and yrange while enclosing by via_enclosure - and set number of rows and number of coloumns according to ranges and via size and spacing + return only vias withen the range xrange and yrange while enclosing by via_enclosure + and set number of rows and number of coloumns according to ranges and via size and spacing """ - + c = gf.Component() width = x_range[1] - x_range[0] length = y_range[1] - y_range[0] nr = floor(length / (via_size[1] + via_spacing[1])) - if (length - nr*via_size[1] - (nr-1)*via_spacing[1])/2 < via_enclosure[1]: + if (length - nr * via_size[1] - (nr - 1) * via_spacing[1]) / 2 < via_enclosure[1]: nr -= 1 - if nr <1 : + if nr < 1: nr = 1 - - nc = ceil(width / (via_size[0]+via_spacing[0])) - - if (round(width - nc*via_size[0] - (nc-1)*via_spacing[0],2))/2 < via_enclosure[0]: + nc = ceil(width / (via_size[0] + via_spacing[0])) + + if ( + round(width - nc * via_size[0] - (nc - 1) * via_spacing[0], 2) + ) / 2 < via_enclosure[0]: nc -= 1 - - if nc<1 : - nc =1 - - via_sp = (via_size[0]+via_spacing[0],via_size[1]+via_spacing[1]) + if nc < 1: + nc = 1 - rect_via = gf.components.rectangle(size = via_size , layer= via_layer) + via_sp = (via_size[0] + via_spacing[0], via_size[1] + via_spacing[1]) - via_arr = c.add_array(rect_via, rows= nr, columns= nc , spacing=via_sp) + rect_via = gf.components.rectangle(size=via_size, layer=via_layer) - via_arr.move((x_range[0],y_range[0])) + via_arr = c.add_array(rect_via, rows=nr, columns=nc, spacing=via_sp) - via_arr.movex((width - nc*via_size[0] - (nc-1)*via_spacing[0])/2) - via_arr.movey((length - nr*via_size[1] - (nr-1)*via_spacing[1])/2) + via_arr.move((x_range[0], y_range[0])) - return c + via_arr.movex((width - nc * via_size[0] - (nc - 1) * via_spacing[0]) / 2) + via_arr.movey((length - nr * via_size[1] - (nr - 1) * via_spacing[1]) / 2) -@gf.cell -def via_stack ( - x_range : Float2 = (0,1), - y_range : Float2 = (0,1), - base_layer : LayerSpec = diff_layer, - slotted_licon : int = 0, - metal_level : int = 1, - li_enc_dir = "V" + return c -) -> gf.Component : +@gf.cell +def via_stack( + x_range: Float2 = (0, 1), + y_range: Float2 = (0, 1), + base_layer: LayerSpec = diff_layer, + slotted_licon: int = 0, + metal_level: int = 1, + li_enc_dir="V", +) -> gf.Component: """ return via stack till the metal level indicated where : metal_level 0 : till li @@ -95,382 +113,486 @@ def via_stack ( metal_level 3 : till m3 metal_level 4 : till m4 metal_level 5 : till m5 - withen the range xrange and yrange and expecting the base_layer to be drawen + withen the range xrange and yrange and expecting the base_layer to be drawen """ c = gf.Component() - # vias dimensions + # vias dimensions - if slotted_licon == 1 : - licon_size = (0.19,2) + if slotted_licon == 1: + licon_size = (0.19, 2) - else : - licon_size = (0.17,0.17) - - mcon_size = (0.17,0.17) - + else: + licon_size = (0.17, 0.17) - if base_layer == diff_layer or base_layer == tap_layer : - con_enc = (0.06,0.06) - - #elif base_layer == tap_layer: + mcon_size = (0.17, 0.17) + + if base_layer == diff_layer or base_layer == tap_layer: + con_enc = (0.06, 0.06) + + # elif base_layer == tap_layer: # con_enc = (0.1,0.06) - - elif base_layer == poly_layer : - con_enc = (0.05,0.08) - npc_enc = 0.01 - npc = c.add_ref(gf.components.rectangle(size=(x_range[1]-x_range[0]+2*npc_enc, y_range[1]-y_range[0]+2*npc_enc),layer=npc_layer)) - npc.move((x_range[0]-npc_enc, y_range[0]-npc_enc)) - - else : - pass + elif base_layer == poly_layer: + con_enc = (0.05, 0.08) + npc_enc = 0.01 + npc = c.add_ref( + gf.components.rectangle( + size=( + x_range[1] - x_range[0] + 2 * npc_enc, + y_range[1] - y_range[0] + 2 * npc_enc, + ), + layer=npc_layer, + ) + ) + npc.move((x_range[0] - npc_enc, y_range[0] - npc_enc)) + + else: + pass if li_enc_dir == "H": - li_enc = (0.08,0) - m1_enc = (0.06,0.03) - elif li_enc_dir == "V" : - li_enc = (0,0.08) - m1_enc = (0.03,0.06) + li_enc = (0.08, 0) + m1_enc = (0.06, 0.03) + elif li_enc_dir == "V": + li_enc = (0, 0.08) + m1_enc = (0.03, 0.06) + + con_spacing = (0.19, 0.19) + + via1_size = (0.15, 0.15) + via1_spacing = (0.17, 0.17) + via1_enc = (0.055, 0.085) + + via2_size = (0.2, 0.2) + via2_enc = (0.04, 0.085) + via2_spacing = (0.2, 0.2) + + via3_size = (0.2, 0.2) + via3_enc = (0.06, 0.09) + via3_spacing = (0.2, 0.2) + + via4_size = (0.8, 0.8) + via4_enc = (0.19, 0.19) + via4_spacing = (0.8, 0.8) + + if metal_level >= 0: + licon_gen = via_generator( + x_range=x_range, + y_range=y_range, + via_size=licon_size, + via_enclosure=con_enc, + via_layer=licon_layer, + via_spacing=con_spacing, + ) + licon = c.add_ref(licon_gen) - con_spacing = (0.19,0.19) + li = c.add_ref( + gf.components.rectangle( + size=( + licon.xmax - licon.xmin + (2 * li_enc[0]), + licon.ymax - licon.ymin + (2 * li_enc[1]), + ), + layer=li_layer, + ) + ) + li.move((licon.xmin - li_enc[0], licon.ymin - li_enc[1])) + + if metal_level >= 1: + mcon_gen = via_generator( + x_range=x_range, + y_range=y_range, + via_size=mcon_size, + via_enclosure=con_enc, + via_layer=mcon_layer, + via_spacing=con_spacing, + ) + mcon = c.add_ref(mcon_gen) + + if (mcon.xmax - mcon.xmin + 2 * m1_enc[0]) < ( + via1_size[0] + 2 * via1_enc[0] + ) and metal_level >= 2: + m1_x = via1_size[0] + 2 * via1_enc[0] + + else: + m1_x = mcon.xmax - mcon.xmin + 2 * m1_enc[0] + + if (mcon.ymax - mcon.ymin + 2 * m1_enc[1]) < ( + via1_size[1] + 2 * via1_enc[1] + ) and metal_level >= 2: + m1_y = via1_size[1] + 2 * via1_enc[1] + + else: + m1_y = mcon.ymax - mcon.ymin + 2 * m1_enc[1] - via1_size = (0.15,0.15) - via1_spacing = (0.17,0.17) - via1_enc = (0.055,0.085) + m1_a = 0.084 - via2_size = (0.2,0.2) - via2_enc = (0.04,0.085) - via2_spacing = (0.2,0.2) + if (m1_x * m1_y) < m1_a: + m1_x = m1_a / m1_y - via3_size = (0.2,0.2) - via3_enc = (0.06,0.09) - via3_spacing = (0.2,0.2) + m1_mx = (m1_x - (mcon.xmax - mcon.xmin)) / 2 + m1_my = (m1_y - (mcon.ymax - mcon.ymin)) / 2 - via4_size = (0.8,0.8) - via4_enc = (0.19,0.19) - via4_spacing = (0.8,0.8) + m1 = c.add_ref(gf.components.rectangle(size=(m1_x, m1_y), layer=m1_layer)) + m1.move((mcon.xmin - m1_mx, mcon.ymin - m1_my)) + if metal_level >= 2: + via1_gen = via_generator( + x_range=(m1.xmin, m1.xmax), + y_range=(m1.ymin, m1.ymax), + via_size=via1_size, + via_enclosure=via1_enc, + via_layer=via1_layer, + via_spacing=via1_spacing, + ) + via1 = c.add_ref(via1_gen) - if metal_level >= 0 : - licon_gen = via_generator(x_range=x_range,y_range=y_range,via_size=licon_size,via_enclosure=con_enc,via_layer=licon_layer,via_spacing=con_spacing) - licon = c.add_ref(licon_gen) - - - li = c.add_ref(gf.components.rectangle(size=(licon.xmax-licon.xmin+(2*li_enc[0]),licon.ymax-licon.ymin+(2*li_enc[1])),layer=li_layer)) - li.move((licon.xmin-li_enc[0], licon.ymin-li_enc[1])) - - if metal_level >= 1 : - mcon_gen = via_generator(x_range=x_range,y_range=y_range,via_size=mcon_size,via_enclosure=con_enc,via_layer=mcon_layer,via_spacing=con_spacing) - mcon = c.add_ref(mcon_gen) - - - - if (mcon.xmax-mcon.xmin + 2*m1_enc[0]) < (via1_size[0] + 2*via1_enc[0]) and metal_level >=2: - m1_x = via1_size[0] + 2*via1_enc[0] - - - else : - m1_x = mcon.xmax-mcon.xmin + 2*m1_enc[0] - - - if (mcon.ymax-mcon.ymin + 2*m1_enc[1]) < (via1_size[1] + 2*via1_enc[1]) and metal_level >=2 : - m1_y = via1_size[1] + 2*via1_enc[1] - - else : - m1_y = mcon.ymax-mcon.ymin + 2*m1_enc[1] - - m1_a = 0.084 - - if (m1_x*m1_y)< m1_a : - m1_x = m1_a/m1_y - - - - m1_mx = (m1_x - (mcon.xmax - mcon.xmin))/2 - m1_my = (m1_y - (mcon.ymax - mcon.ymin))/2 + if (via1.xmax - via1.xmin) > (via1.ymax - via1.ymin): + m2_enc = (0.055, 0.085) + else: + m2_enc = (0.085, 0.055) + + if (via1.xmax - via1.xmin + 2 * m2_enc[0]) < ( + via2_size[0] + 2 * via2_enc[0] + ) and metal_level >= 3: + m2_x = via2_size[0] + 2 * via2_enc[0] + + else: + m2_x = via1.xmax - via1.xmin + 2 * m2_enc[0] + + if (via1.ymax - via1.ymin + 2 * m2_enc[1]) < ( + via2_size[1] + 2 * via2_enc[1] + ) and metal_level >= 3: + m2_y = via2_size[1] + 2 * via2_enc[1] + + else: + m2_y = via1.ymax - via1.ymin + 2 * m2_enc[1] + + m2_mx = (m2_x - (via1.xmax - via1.xmin)) / 2 + m2_my = (m2_y - (via1.ymax - via1.ymin)) / 2 + + m2 = c.add_ref(gf.components.rectangle(size=(m2_x, m2_y), layer=m2_layer)) + m2.move((via1.xmin - m2_mx, via1.ymin - m2_my)) + + if metal_level >= 3: + via2_gen = via_generator( + x_range=(m2.xmin, m2.xmax), + y_range=(m2.ymin, m2.ymax), + via_size=via2_size, + via_enclosure=via2_enc, + via_layer=via2_layer, + via_spacing=via2_spacing, + ) + via2 = c.add_ref(via2_gen) + m3_enc = (0.065, 0.065) - m1 = c.add_ref(gf.components.rectangle(size=(m1_x,m1_y),layer=m1_layer)) - m1.move((mcon.xmin - m1_mx, mcon.ymin - m1_my)) + if (via2.xmax - via2.xmin + 2 * m3_enc[0]) < ( + via3_size[0] + 2 * via3_enc[0] + ) and metal_level >= 4: + m3_x = via3_size[0] + 2 * via3_enc[0] - if metal_level >=2 : - via1_gen = via_generator(x_range= (m1.xmin, m1.xmax), y_range=(m1.ymin,m1.ymax),via_size=via1_size,via_enclosure=via1_enc - ,via_layer=via1_layer,via_spacing=via1_spacing) - via1 = c.add_ref(via1_gen) + else: + m3_x = via2.xmax - via2.xmin + 2 * m3_enc[0] - if (via1.xmax-via1.xmin) > (via1.ymax - via1.ymin): - m2_enc = (0.055,0.085) - else : - m2_enc = (0.085,0.055) - - if (via1.xmax-via1.xmin + 2*m2_enc[0]) < (via2_size[0] + 2*via2_enc[0]) and metal_level >=3: - m2_x = via2_size[0] + 2*via2_enc[0] - - - else : - m2_x = via1.xmax-via1.xmin + 2*m2_enc[0] - - - if (via1.ymax-via1.ymin + 2*m2_enc[1]) < (via2_size[1] + 2*via2_enc[1]) and metal_level >=3: - m2_y = via2_size[1] + 2*via2_enc[1] - - - else : - m2_y = via1.ymax-via1.ymin + 2*m2_enc[1] - - m2_mx = (m2_x - (via1.xmax - via1.xmin))/2 - m2_my = (m2_y - (via1.ymax - via1.ymin))/2 - - m2 = c.add_ref(gf.components.rectangle(size=(m2_x,m2_y),layer=m2_layer)) - m2.move((via1.xmin - m2_mx, via1.ymin -m2_my)) - - if metal_level >= 3 : - via2_gen = via_generator(x_range= (m2.xmin, m2.xmax), y_range=(m2.ymin,m2.ymax),via_size=via2_size,via_enclosure=via2_enc - ,via_layer=via2_layer,via_spacing=via2_spacing) - via2 = c.add_ref(via2_gen) + if (via2.ymax - via2.ymin + 2 * m3_enc[1]) < ( + via3_size[1] + 2 * via3_enc[1] + ) and metal_level >= 4: + m3_y = via3_size[1] + 2 * via3_enc[1] + + else: + m3_y = via2.ymax - via2.ymin + 2 * m3_enc[1] + + m3_mx = (m3_x - (via2.xmax - via2.xmin)) / 2 + m3_my = (m3_y - (via2.ymax - via2.ymin)) / 2 - m3_enc = (0.065,0.065) - - if (via2.xmax-via2.xmin + 2*m3_enc[0]) < (via3_size[0] + 2*via3_enc[0]) and metal_level >= 4: - m3_x = via3_size[0] + 2*via3_enc[0] - - else : - m3_x = via2.xmax-via2.xmin + 2*m3_enc[0] - - - if (via2.ymax-via2.ymin + 2*m3_enc[1]) < (via3_size[1] + 2*via3_enc[1]) and metal_level >=4: - m3_y = via3_size[1] + 2*via3_enc[1] - - else : - m3_y = via2.ymax-via2.ymin + 2*m3_enc[1] - - m3_mx = (m3_x - (via2.xmax - via2.xmin))/2 - m3_my = (m3_y - (via2.ymax - via2.ymin))/2 - - - m3 = c.add_ref(gf.components.rectangle(size=(m3_x,m3_y),layer=m3_layer)) + m3 = c.add_ref(gf.components.rectangle(size=(m3_x, m3_y), layer=m3_layer)) m3.move((via2.xmin - m3_mx, via2.ymin - m3_my)) - if metal_level >= 4 : - via3_gen = via_generator(x_range= (m3.xmin, m3.xmax), y_range=(m3.ymin,m3.ymax),via_size=via3_size,via_enclosure=via3_enc - ,via_layer=via3_layer,via_spacing=via3_spacing) + if metal_level >= 4: + via3_gen = via_generator( + x_range=(m3.xmin, m3.xmax), + y_range=(m3.ymin, m3.ymax), + via_size=via3_size, + via_enclosure=via3_enc, + via_layer=via3_layer, + via_spacing=via3_spacing, + ) via3 = c.add_ref(via3_gen) - m4_enc = (0.065,0.065) - - if (via3.xmax-via3.xmin + 2*m4_enc[0]) < (via4_size[0] + 2*via4_enc[0]) and metal_level >=5: - m4_x = via4_size[0] + 2*via4_enc[0] - - else : - m4_x = via3.xmax-via3.xmin + 2*m4_enc[0] - - - if (via3.ymax-via3.ymin + 2*m4_enc[1]) < (via4_size[1] + 2*via4_enc[1]) and metal_level >=5: - m4_y = via4_size[1] + 2*via4_enc[1] - - - else : - m4_y = via3.ymax-via3.ymin + 2*m4_enc[1] - - m4_mx = (m4_x- (via3.xmax - via3.xmin))/2 - m4_my = (m4_y- (via3.ymax - via3.ymin))/2 - - m4 = c.add_ref(gf.components.rectangle(size=(m4_x,m4_y),layer=m4_layer)) - m4.move(( via3.xmin-m4_mx , via3.ymin- m4_my )) - - if metal_level >= 5 : - via4_gen = via_generator(x_range= (m4.xmin, m4.xmax), y_range=(m4.ymin,m4.ymax),via_size=via4_size,via_enclosure=via4_enc - ,via_layer=via4_layer,via_spacing=via4_spacing) + m4_enc = (0.065, 0.065) + + if (via3.xmax - via3.xmin + 2 * m4_enc[0]) < ( + via4_size[0] + 2 * via4_enc[0] + ) and metal_level >= 5: + m4_x = via4_size[0] + 2 * via4_enc[0] + + else: + m4_x = via3.xmax - via3.xmin + 2 * m4_enc[0] + + if (via3.ymax - via3.ymin + 2 * m4_enc[1]) < ( + via4_size[1] + 2 * via4_enc[1] + ) and metal_level >= 5: + m4_y = via4_size[1] + 2 * via4_enc[1] + + else: + m4_y = via3.ymax - via3.ymin + 2 * m4_enc[1] + + m4_mx = (m4_x - (via3.xmax - via3.xmin)) / 2 + m4_my = (m4_y - (via3.ymax - via3.ymin)) / 2 + + m4 = c.add_ref(gf.components.rectangle(size=(m4_x, m4_y), layer=m4_layer)) + m4.move((via3.xmin - m4_mx, via3.ymin - m4_my)) + + if metal_level >= 5: + via4_gen = via_generator( + x_range=(m4.xmin, m4.xmax), + y_range=(m4.ymin, m4.ymax), + via_size=via4_size, + via_enclosure=via4_enc, + via_layer=via4_layer, + via_spacing=via4_spacing, + ) via4 = c.add_ref(via4_gen) - m5_enc = (0.31,0.31) - m5_min_w = 1.6 - if (via4.xmax-via4.xmin + 2*m5_enc[0]) < m5_min_w: + m5_enc = (0.31, 0.31) + m5_min_w = 1.6 + if (via4.xmax - via4.xmin + 2 * m5_enc[0]) < m5_min_w: m5_x = m5_min_w - - else : - m5_x = via4.xmax-via4.xmin + 2*m5_enc[0] - - if (via4.ymax-via4.ymin + 2*m5_enc[1]) < m5_min_w: + else: + m5_x = via4.xmax - via4.xmin + 2 * m5_enc[0] + + if (via4.ymax - via4.ymin + 2 * m5_enc[1]) < m5_min_w: m5_y = m5_min_w - - - else : - m5_y = via4.ymax-via4.ymin + 2*m5_enc[1] - - - - m5_a = 4 - if (m5_x*m5_y)< m5_a : - m5_x = m5_a/m5_y - - m5_mx = (m5_x - (via4.xmax - via4.xmin))/2 - m5_my = (m5_y - (via4.ymax - via4.ymin))/2 - - m5 = c.add_ref(gf.components.rectangle(size=(m5_x,m5_y),layer=m5_layer)) + + else: + m5_y = via4.ymax - via4.ymin + 2 * m5_enc[1] + + m5_a = 4 + if (m5_x * m5_y) < m5_a: + m5_x = m5_a / m5_y + + m5_mx = (m5_x - (via4.xmax - via4.xmin)) / 2 + m5_my = (m5_y - (via4.ymax - via4.ymin)) / 2 + + m5 = c.add_ref(gf.components.rectangle(size=(m5_x, m5_y), layer=m5_layer)) m5.move((via4.xmin - m5_mx, via4.ymin - m5_my)) return c -#@gf.cell + +# @gf.cell def vias_gen_draw( - layout, - l : float = 1.0, - w : float = 1.0, - start_layer = "poly", - end_layer = "metal5" - - -) : #-> gf.Component : - ''' + layout, l_vias: float = 1.0, w: float = 1.0, start_layer="poly", end_layer="metal5" +): # -> gf.Component : + """ draws a vias stack from the start_layer to the end_layer and also draws the start and end layers where : - l : float of the length that vias will be drawn in - w : float of the width that vias will drawn in + l_vias : float of the length that vias will be drawn in + w : float of the width that vias will drawn in start_layer : string of the first layer to be drawn that takes input of (poly,p_tap,n_tap,p_diff,n_diff,li,metal1:5) end_layer : string of the last layer to be drawn that takes input of (poly,p_tap,n_tap,p_diff,n_diff,li,metal1:5) - ''' + """ c = gf.Component("via") - base_layers = ["poly","n_diff","p_diff","n_tap","p_tap"] - metal_layers = ["li","metal1","metal2","metal3","metal4","metal5"] - + base_layers = ["poly", "n_diff", "p_diff", "n_tap", "p_tap"] + metal_layers = ["li", "metal1", "metal2", "metal3", "metal4", "metal5"] - if start_layer in base_layers : - level_1 = -1 - else : + if start_layer in base_layers: + level_1 = -1 + else: for i in range(len(metal_layers)): if start_layer == metal_layers[i]: level_1 = i - - if end_layer in base_layers : + + if end_layer in base_layers: level_2 = -1 - else : + else: for i in range(len(metal_layers)): if end_layer == metal_layers[i]: level_2 = i - - - if level_1 <= -1 and level_2 >= -1 : + + if level_1 <= -1 and level_2 >= -1: if start_layer == "poly" or end_layer == "poly": npc_enc = 0.05 - poly = c.add_ref(gf.components.rectangle(size=(l,w),layer = poly_layer)) - npc = c.add_ref(gf.components.rectangle(size=(l+2*npc_enc,w+2*npc_enc),layer=npc_layer)).move((-npc_enc, -npc_enc)) + c.add_ref(gf.components.rectangle(size=(l_vias, w), layer=poly_layer)) + c.add_ref( + gf.components.rectangle( + size=(l_vias + 2 * npc_enc, w + 2 * npc_enc), layer=npc_layer + ) + ).move((-npc_enc, -npc_enc)) if "diff" in start_layer or "diff" in end_layer: n_p_enc = 0.125 nwell_enc = 0.18 - diff = c.add_ref(gf.components.rectangle(size=(l,w),layer = diff_layer)) - if "n_" in start_layer or "n_" in end_layer : - nsdm = c.add_ref(gf.components.rectangle(size=(l+2*n_p_enc,w+2*n_p_enc),layer=nsdm_layer)).move((-n_p_enc,-n_p_enc)) - else : - psdm = c.add_ref(gf.components.rectangle(size=(l+2*n_p_enc,w+2*n_p_enc),layer=psdm_layer)).move((-n_p_enc,-n_p_enc)) - nwell = c.add_ref(gf.components.rectangle(size=(l+2*nwell_enc,w+2*nwell_enc),layer=nwell_layer)).move((-nwell_enc,-nwell_enc)) + c.add_ref(gf.components.rectangle(size=(l_vias, w), layer=diff_layer)) + if "n_" in start_layer or "n_" in end_layer: + c.add_ref( + gf.components.rectangle( + size=(l_vias + 2 * n_p_enc, w + 2 * n_p_enc), layer=nsdm_layer + ) + ).move((-n_p_enc, -n_p_enc)) + else: + c.add_ref( + gf.components.rectangle( + size=(l_vias + 2 * n_p_enc, w + 2 * n_p_enc), layer=psdm_layer + ) + ).move((-n_p_enc, -n_p_enc)) + c.add_ref( + gf.components.rectangle( + size=(l_vias + 2 * nwell_enc, w + 2 * nwell_enc), + layer=nwell_layer, + ) + ).move((-nwell_enc, -nwell_enc)) if "tap" in start_layer or "tap" in end_layer: n_p_enc = 0.125 nwell_enc = 0.18 - tap = c.add_ref(gf.components.rectangle(size=(l,w),layer = tap_layer)) + c.add_ref(gf.components.rectangle(size=(l_vias, w), layer=tap_layer)) if "n_" in start_layer or "n_" in end_layer: - nsdm = c.add_ref(gf.components.rectangle(size=(l+2*n_p_enc,w+2*n_p_enc),layer=nsdm_layer)).move((-n_p_enc,-n_p_enc)) - nwell = c.add_ref(gf.components.rectangle(size=(l+2*nwell_enc,w+2*nwell_enc),layer=nwell_layer)).move((-nwell_enc,-nwell_enc)) - else : - psdm = c.add_ref(gf.components.rectangle(size=(l+2*n_p_enc,w+2*n_p_enc),layer=psdm_layer)).move((-n_p_enc,-n_p_enc)) + c.add_ref( + gf.components.rectangle( + size=(l_vias + 2 * n_p_enc, w + 2 * n_p_enc), layer=nsdm_layer + ) + ).move((-n_p_enc, -n_p_enc)) + c.add_ref( + gf.components.rectangle( + size=(l_vias + 2 * nwell_enc, w + 2 * nwell_enc), + layer=nwell_layer, + ) + ).move((-nwell_enc, -nwell_enc)) + else: + c.add_ref( + gf.components.rectangle( + size=(l_vias + 2 * n_p_enc, w + 2 * n_p_enc), layer=psdm_layer + ) + ).move((-n_p_enc, -n_p_enc)) if level_1 <= 0 and level_2 >= 0: - li = c.add_ref(gf.components.rectangle(size=(l,w),layer = li_layer)) + c.add_ref(gf.components.rectangle(size=(l_vias, w), layer=li_layer)) if level_1 <= 1 and level_2 >= 1: - m1 = c.add_ref(gf.components.rectangle(size=(l,w),layer = m1_layer)) + c.add_ref(gf.components.rectangle(size=(l_vias, w), layer=m1_layer)) if level_1 <= 2 and level_2 >= 2: - m2 = c.add_ref(gf.components.rectangle(size=(l,w),layer = m2_layer)) + c.add_ref(gf.components.rectangle(size=(l_vias, w), layer=m2_layer)) if level_1 <= 3 and level_2 >= 3: - m3 = c.add_ref(gf.components.rectangle(size=(l,w),layer = m3_layer)) + c.add_ref(gf.components.rectangle(size=(l_vias, w), layer=m3_layer)) if level_1 <= 4 and level_2 >= 4: - m4 = c.add_ref(gf.components.rectangle(size=(l,w),layer = m4_layer)) + c.add_ref(gf.components.rectangle(size=(l_vias, w), layer=m4_layer)) if level_1 <= 5 and level_2 >= 5: - m5 = c.add_ref(gf.components.rectangle(size=(l,w),layer = m5_layer)) + c.add_ref(gf.components.rectangle(size=(l_vias, w), layer=m5_layer)) - if level_1 <= -1 and level_2 > -1 : + if level_1 <= -1 and level_2 > -1: + licon_size = (0.17, 0.17) + + licon_spacing = (0.17, 0.17) - - licon_size = (0.17,0.17) - - licon_spacing = (0.17,0.17) - if start_layer == "poly": - licon_enc = (0.08,0.05) - elif "diff" in start_layer : - licon_enc = (0.12,0.06) #(0.06,0.04) - elif "tap" in start_layer : - licon_enc = (0.12,0.06) - - - - licon = via_generator(x_range=(0,l),y_range=(0,w),via_size=licon_size,via_layer=licon_layer,via_enclosure=licon_enc,via_spacing=licon_spacing) + licon_enc = (0.08, 0.05) + elif "diff" in start_layer: + licon_enc = (0.12, 0.06) # (0.06,0.04) + elif "tap" in start_layer: + licon_enc = (0.12, 0.06) + + licon = via_generator( + x_range=(0, l_vias), + y_range=(0, w), + via_size=licon_size, + via_layer=licon_layer, + via_enclosure=licon_enc, + via_spacing=licon_spacing, + ) c.add_ref(licon) - - if level_1 <= 0 and level_2 > 0 : - mcon_size = (0.17,0.17) - mcon_enc = (0.06,0.03) - mcon_spacing = (0.19,0.19) - - - mcon = via_generator(x_range=(0,l),y_range=(0,w),via_size=mcon_size,via_layer=mcon_layer,via_enclosure=mcon_enc,via_spacing=mcon_spacing) - c.add_ref(mcon) - if level_1 <= 1 and level_2 > 1 : - via1_size = (0.15,0.15) - via1_enc = (0.085,0.055) - via1_spacing = (0.17,0.17) - - + if level_1 <= 0 and level_2 > 0: + mcon_size = (0.17, 0.17) + mcon_enc = (0.06, 0.03) + mcon_spacing = (0.19, 0.19) + + mcon = via_generator( + x_range=(0, l_vias), + y_range=(0, w), + via_size=mcon_size, + via_layer=mcon_layer, + via_enclosure=mcon_enc, + via_spacing=mcon_spacing, + ) + c.add_ref(mcon) - via1 = via_generator(x_range=(0,l),y_range=(0,w),via_size=via1_size,via_layer=via1_layer,via_enclosure=via1_enc,via_spacing=via1_spacing) + if level_1 <= 1 and level_2 > 1: + via1_size = (0.15, 0.15) + via1_enc = (0.085, 0.055) + via1_spacing = (0.17, 0.17) + + via1 = via_generator( + x_range=(0, l_vias), + y_range=(0, w), + via_size=via1_size, + via_layer=via1_layer, + via_enclosure=via1_enc, + via_spacing=via1_spacing, + ) c.add_ref(via1) - if level_1 <= 2 and level_2 > 2 : - via2_size = (0.2,0.2) - via2_enc = (0.085,0.065) - via2_spacing = (0.2,0.2) - - - via2 = via_generator(x_range=(0,l),y_range=(0,w),via_size=via2_size,via_layer=via2_layer,via_enclosure=via2_enc,via_spacing=via2_spacing) + if level_1 <= 2 and level_2 > 2: + via2_size = (0.2, 0.2) + via2_enc = (0.085, 0.065) + via2_spacing = (0.2, 0.2) + + via2 = via_generator( + x_range=(0, l_vias), + y_range=(0, w), + via_size=via2_size, + via_layer=via2_layer, + via_enclosure=via2_enc, + via_spacing=via2_spacing, + ) c.add_ref(via2) - if level_1 <= 3 and level_2 > 3 : - via3_size = (0.2,0.2) - via3_enc = (0.09,0.065) - via3_spacing = (0.2,0.2) - - - via3 = via_generator(x_range=(0,l),y_range=(0,w),via_size=via3_size,via_layer=via3_layer,via_enclosure=via3_enc,via_spacing=via3_spacing) + if level_1 <= 3 and level_2 > 3: + via3_size = (0.2, 0.2) + via3_enc = (0.09, 0.065) + via3_spacing = (0.2, 0.2) + + via3 = via_generator( + x_range=(0, l_vias), + y_range=(0, w), + via_size=via3_size, + via_layer=via3_layer, + via_enclosure=via3_enc, + via_spacing=via3_spacing, + ) c.add_ref(via3) - if level_1 <= 4 and level_2 > 4 : - via4_size = (0.8,0.8) - via4_enc = (0.31,0.31) - via4_spacing = (0.8,0.8) - - via4 = via_generator(x_range=(0,l),y_range=(0,w),via_size=via4_size,via_layer=via4_layer,via_enclosure=via4_enc,via_spacing=via4_spacing) + if level_1 <= 4 and level_2 > 4: + via4_size = (0.8, 0.8) + via4_enc = (0.31, 0.31) + via4_spacing = (0.8, 0.8) + + via4 = via_generator( + x_range=(0, l_vias), + y_range=(0, w), + via_size=via4_size, + via_layer=via4_layer, + via_enclosure=via4_enc, + via_spacing=via4_spacing, + ) c.add_ref(via4) - - # creating layout and cell in klayout + + # creating layout and cell in klayout c.write_gds("vias_temp.gds") layout.read("vias_temp.gds") cell_name = "via" - + return layout.cell(cell_name) - #return c + # return c + -# testing the generated methods +# testing the generated methods if __name__ == "__main__": - c = vias_gen_draw(start_layer="li",end_layer="poly") + c = vias_gen_draw(start_layer="li", end_layer="poly") c.show() - \ No newline at end of file diff --git a/sky130/cells/klayout/pymacros/cells/vias.py b/sky130/cells/klayout/pymacros/cells/vias.py index 704a4da23..7a8af67fe 100644 --- a/sky130/cells/klayout/pymacros/cells/vias.py +++ b/sky130/cells/klayout/pymacros/cells/vias.py @@ -1,15 +1,15 @@ -# Copyright 2022 Skywater 130nm pdk development +# Copyright 2022 Skywater 130nm pdk development # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. -# +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. -# +# # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . @@ -18,166 +18,150 @@ ######################################################################################################################## import pya -from .via_generator import * -licon_size = (0.17,0.17) - -licon_spacing = (0.17,0.17) +from .via_generator import vias_gen_draw + +licon_size = (0.17, 0.17) -mcon_size = (0.17,0.17) -mcon_enc = (0.06,0.03) -mcon_spacing = (0.19,0.19) +licon_spacing = (0.17, 0.17) -via1_size = (0.15,0.15) -via1_enc = (0.085,0.055) -via1_spacing = (0.17,0.17) +mcon_size = (0.17, 0.17) +mcon_enc = (0.06, 0.03) +mcon_spacing = (0.19, 0.19) -via2_size = (0.2,0.2) -via2_enc = (0.085,0.065) -via2_spacing = (0.2,0.2) +via1_size = (0.15, 0.15) +via1_enc = (0.085, 0.055) +via1_spacing = (0.17, 0.17) -via3_size = (0.2,0.2) -via3_enc = (0.09,0.065) -via3_spacing = (0.2,0.2) +via2_size = (0.2, 0.2) +via2_enc = (0.085, 0.065) +via2_spacing = (0.2, 0.2) -via4_size = (0.8,0.8) -via4_enc = (0.31,0.31) -via4_spacing = (0.8,0.8) +via3_size = (0.2, 0.2) +via3_enc = (0.09, 0.065) +via3_spacing = (0.2, 0.2) + +via4_size = (0.8, 0.8) +via4_enc = (0.31, 0.31) +via4_spacing = (0.8, 0.8) class vias_gen(pya.PCellDeclarationHelper): """ Vias Generator for Skywater130 """ + def __init__(self): # Initialize super class. - super(vias_gen, self).__init__() + super().__init__() - #===================== PARAMETERS DECLARATIONS ===================== + # ===================== PARAMETERS DECLARATIONS ===================== self.param("l", self.TypeDouble, "length", default=1, unit="um") self.param("w", self.TypeDouble, "width", default=1, unit="um") - - self.Type_handle = self.param("start_layer", self.TypeList, "Start Layer") - self.Type_handle.add_choice("poly","poly") - self.Type_handle.add_choice("p_tap","p_tap") - self.Type_handle.add_choice("n_tap","n_tap") - self.Type_handle.add_choice("p_diff","p_diff") - self.Type_handle.add_choice("n_diff","n_diff") - self.Type_handle.add_choice("li","li") - self.Type_handle.add_choice("metal1","metal1") - self.Type_handle.add_choice("metal2","metal2") - self.Type_handle.add_choice("metal3","metal3") - self.Type_handle.add_choice("metal4","metal4") - - self.Type_handle = self.param("end_layer", self.TypeList, "End Layer") - self.Type_handle.add_choice("li","li") - self.Type_handle.add_choice("metal1","metal1") - self.Type_handle.add_choice("metal2","metal2") - self.Type_handle.add_choice("metal3","metal3") - self.Type_handle.add_choice("metal4","metal4") - self.Type_handle.add_choice("metal5","metal5") - - + + self.Type_handle = self.param("start_layer", self.TypeList, "Start Layer") + self.Type_handle.add_choice("poly", "poly") + self.Type_handle.add_choice("p_tap", "p_tap") + self.Type_handle.add_choice("n_tap", "n_tap") + self.Type_handle.add_choice("p_diff", "p_diff") + self.Type_handle.add_choice("n_diff", "n_diff") + self.Type_handle.add_choice("li", "li") + self.Type_handle.add_choice("metal1", "metal1") + self.Type_handle.add_choice("metal2", "metal2") + self.Type_handle.add_choice("metal3", "metal3") + self.Type_handle.add_choice("metal4", "metal4") + + self.Type_handle = self.param("end_layer", self.TypeList, "End Layer") + self.Type_handle.add_choice("li", "li") + self.Type_handle.add_choice("metal1", "metal1") + self.Type_handle.add_choice("metal2", "metal2") + self.Type_handle.add_choice("metal3", "metal3") + self.Type_handle.add_choice("metal4", "metal4") + self.Type_handle.add_choice("metal5", "metal5") def display_text_impl(self): # Provide a descriptive text for the cell - return "via (L=" + ('%.3f' % self.l) + ",W=" + ('%.3f' % self.w) + ")" - + return "via (L=" + ("%.3f" % self.l) + ",W=" + ("%.3f" % self.w) + ")" + def coerce_parameters_impl(self): # We employ coerce_parameters_impl to decide whether the handle or the # numeric parameter has changed (by comparing against the effective # radius ru) and set ru to the effective radius. We also update the # numerical value or the shape, depending on which on has not changed. - - base_layers = ["poly","n_diff","p_diff","n_tap","p_tap"] - metal_layers = ["li","metal1","metal2","metal3","metal4","metal5"] - if self.start_layer in base_layers : - level_1 = -1 - else : + base_layers = ["poly", "n_diff", "p_diff", "n_tap", "p_tap"] + metal_layers = ["li", "metal1", "metal2", "metal3", "metal4", "metal5"] + + if self.start_layer in base_layers: + level_1 = -1 + else: for i in range(len(metal_layers)): if self.start_layer == metal_layers[i]: level_1 = i - - if self.end_layer in base_layers : + + if self.end_layer in base_layers: level_2 = -1 - else : + else: for i in range(len(metal_layers)): if self.end_layer == metal_layers[i]: level_2 = i - - #if level_1 < level_2 : + + # if level_1 < level_2 : # temp_layer = self.start_layer # self.start_layer = self.end_layer # self.end_layer = temp_layer - - if level_1 <= -1 and level_2 > -1 : + if level_1 <= -1 and level_2 > -1: if self.start_layer == "poly": - licon_enc = (0.08,0.05) - elif "diff" in self.start_layer : - licon_enc = (0.12,0.06) #(0.06,0.04) - elif "tap" in self.start_layer : - licon_enc = (0.12,0.06) - else : - licon_enc = (0.12,0.12) - - if self.l < (licon_size[0]+2*licon_enc[0]): - self.l = licon_size[0]+2*licon_enc[0] - - - if self.w < (licon_size[1]+2*licon_enc[1]): - self.w = licon_size[1]+2*licon_enc[1] - - if level_1 <= 0 and level_2 > 0 : - - if self.l < (mcon_size[0]+2*mcon_enc[0]): - self.l = mcon_size[0]+2*mcon_enc[0] - - - if self.w < (mcon_size[1]+2*mcon_enc[1]): - self.w = mcon_size[1]+2*mcon_enc[1] - - if level_1 <= 1 and level_2 > 1 : - - if self.l < (via1_size[0]+2*via1_enc[0]): - self.l = via1_size[0]+2*via1_enc[0] - - - if self.w < (via1_size[1]+2*via1_enc[1]): - self.w = via1_size[1]+2*via1_enc[1] - - if level_1 <= 2 and level_2 > 2 : - - if self.l < (via2_size[0]+2*via2_enc[0]): - self.l = via2_size[0]+2*via2_enc[0] - - - if self.w < (via2_size[1]+2*via2_enc[1]): - self.w = via2_size[1]+2*via2_enc[1] - - if level_1 <= 3 and level_2 > 3 : - - if self.l < (via3_size[0]+2*via3_enc[0]): - self.l = (via3_size[0]+2*via3_enc[0]) - - - if self.w < (via3_size[1]+2*via3_enc[1]): - self.w = via3_size[1]+2*via3_enc[1] - - if level_1 <= 4 and level_2 > 4 : - - if self.l < (via4_size[0]+2*via4_enc[0]): - self.l = via4_size[0]+2*via4_enc[0] - - - if self.w < (via4_size[1]+2*via4_enc[1]): - self.w = via4_size[1]+2*via4_enc[1] - - + licon_enc = (0.08, 0.05) + elif "diff" in self.start_layer: + licon_enc = (0.12, 0.06) # (0.06,0.04) + elif "tap" in self.start_layer: + licon_enc = (0.12, 0.06) + else: + licon_enc = (0.12, 0.12) + + if self.l < (licon_size[0] + 2 * licon_enc[0]): + self.l = licon_size[0] + 2 * licon_enc[0] + + if self.w < (licon_size[1] + 2 * licon_enc[1]): + self.w = licon_size[1] + 2 * licon_enc[1] + if level_1 <= 0 and level_2 > 0: + if self.l < (mcon_size[0] + 2 * mcon_enc[0]): + self.l = mcon_size[0] + 2 * mcon_enc[0] + if self.w < (mcon_size[1] + 2 * mcon_enc[1]): + self.w = mcon_size[1] + 2 * mcon_enc[1] + + if level_1 <= 1 and level_2 > 1: + if self.l < (via1_size[0] + 2 * via1_enc[0]): + self.l = via1_size[0] + 2 * via1_enc[0] + + if self.w < (via1_size[1] + 2 * via1_enc[1]): + self.w = via1_size[1] + 2 * via1_enc[1] + + if level_1 <= 2 and level_2 > 2: + if self.l < (via2_size[0] + 2 * via2_enc[0]): + self.l = via2_size[0] + 2 * via2_enc[0] + + if self.w < (via2_size[1] + 2 * via2_enc[1]): + self.w = via2_size[1] + 2 * via2_enc[1] + + if level_1 <= 3 and level_2 > 3: + if self.l < (via3_size[0] + 2 * via3_enc[0]): + self.l = via3_size[0] + 2 * via3_enc[0] + + if self.w < (via3_size[1] + 2 * via3_enc[1]): + self.w = via3_size[1] + 2 * via3_enc[1] + + if level_1 <= 4 and level_2 > 4: + if self.l < (via4_size[0] + 2 * via4_enc[0]): + self.l = via4_size[0] + 2 * via4_enc[0] + + if self.w < (via4_size[1] + 2 * via4_enc[1]): + self.w = via4_size[1] + 2 * via4_enc[1] def can_create_from_shape_impl(self): # Implement the "Create PCell from shape" protocol: we can use any shape which @@ -189,20 +173,27 @@ def parameters_from_shape_impl(self): # bounding box width and layer self.r = self.shape.bbox().width() * self.layout.dbu / 2 self.l = self.layout.get_info(self.layer) - + def transformation_from_shape_impl(self): # Implement the "Create PCell from shape" protocol: we use the center of the shape's # bounding box to determine the transformation return pya.Trans(self.shape.bbox().center()) def produce_impl(self): - instance = vias_gen_draw(layout= self.layout , l=self.l, w=self.w, start_layer=self.start_layer, end_layer=self.end_layer) - write_cells = pya.CellInstArray(instance.cell_index(), pya.Trans(pya.Point(0, 0)), - pya.Vector(0, 0), pya.Vector(0, 0), 1, 1) + instance = vias_gen_draw( + layout=self.layout, + l_vias=self.l, + w=self.w, + start_layer=self.start_layer, + end_layer=self.end_layer, + ) + write_cells = pya.CellInstArray( + instance.cell_index(), + pya.Trans(pya.Point(0, 0)), + pya.Vector(0, 0), + pya.Vector(0, 0), + 1, + 1, + ) self.cell.insert(write_cells) self.cell.flatten(1) - - - - - \ No newline at end of file diff --git a/sky130/cells/klayout/pymacros/cells/vpp.py b/sky130/cells/klayout/pymacros/cells/vpp.py index 120d8b4b6..7724e25bf 100644 --- a/sky130/cells/klayout/pymacros/cells/vpp.py +++ b/sky130/cells/klayout/pymacros/cells/vpp.py @@ -1,26 +1,28 @@ -# Copyright 2022 Skywater 130nm pdk development +# Copyright 2022 Skywater 130nm pdk development # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. -# +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. -# +# # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . ######################################################################################################################## -# VPP CAP Generator for skywater130 +# VPP CAP Generator for skywater130 ######################################################################################################################## import pya -from .draw_vpp import * -from .globals import * + +from .draw_vpp import draw_vpp +from .globals import VPP_CAP_DEV + class cap_vpp(pya.PCellDeclarationHelper): """ @@ -28,30 +30,38 @@ class cap_vpp(pya.PCellDeclarationHelper): """ def __init__(self): - # Important: initialize the super class - super(cap_vpp, self).__init__() + super().__init__() self.Type_handle = self.param("Type", self.TypeList, "Type") - - for i in range(len(VPP_CAP_DEV)) : + for i in range(len(VPP_CAP_DEV)): self.Type_handle.add_choice(VPP_CAP_DEV[i], VPP_CAP_DEV[i]) - - - self.param("Model", self.TypeString, "Model", default="sky130_fd_pr__cap_vpp",readonly=True) + + self.param( + "Model", + self.TypeString, + "Model", + default="sky130_fd_pr__cap_vpp", + readonly=True, + ) def display_text_impl(self): # Provide a descriptive text for the cell return str(self.Type) def produce_impl(self): - # This is the main part of the implementation: create the layout - self.percision = 1/self.layout.dbu - vpp_instance = draw_vpp(layout=self.layout,device_name=self.Type) - write_cells = pya.CellInstArray(vpp_instance.cell_index(), pya.Trans(pya.Point(0, 0)), - pya.Vector(0, 0), pya.Vector(0, 0),1 , 1) + self.percision = 1 / self.layout.dbu + vpp_instance = draw_vpp(layout=self.layout, device_name=self.Type) + write_cells = pya.CellInstArray( + vpp_instance.cell_index(), + pya.Trans(pya.Point(0, 0)), + pya.Vector(0, 0), + pya.Vector(0, 0), + 1, + 1, + ) self.cell.flatten(1) - self.cell.insert(write_cells) - self.layout.cleanup() \ No newline at end of file + self.cell.insert(write_cells) + self.layout.cleanup() From 9d7ecf1deeadf09708172e7a0a3f0d3f4381f81f Mon Sep 17 00:00:00 2001 From: RehabSayed-G Date: Thu, 14 Dec 2023 11:40:49 +0200 Subject: [PATCH 3/3] fix sky130.lym triailing whitspaces --- sky130/cells/klayout/pymacros/sky130.lym | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sky130/cells/klayout/pymacros/sky130.lym b/sky130/cells/klayout/pymacros/sky130.lym index 7916c66fb..713cc161c 100644 --- a/sky130/cells/klayout/pymacros/sky130.lym +++ b/sky130/cells/klayout/pymacros/sky130.lym @@ -6,12 +6,12 @@ # it under the terms of the GNU Affero General Public License as published # by the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. -# +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. -# +# # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -->

H9Q+n9`?1!`8oI5A`P3fVZyrKPy${YGm{v-zZ z!*%ioze(Ppn^FEyF8zBF`AzaB)mt*kAIgz8v|mwqlXNr4AIgz8_)YQ#-Hh@l-M{3Y zy*K+IK6G^V03Qa9C?GUqVgu`W{^LWBX97V=w{S^$`LpIii$hwW)MH+h#$X6+~{T$ zKl4o7%)d$8DKAQf@#~z<{BeFanYVPVFB#1r?a*)9uc&?}-3Ee`A9;$8{5A2Ro9p@c-h#iPzPI4#`%7Z*{e?Vb-z9%d_FZ%{+J7m> zzK`Ez-%s_HjP`%Zao@pTQTLsso5B5ua_l?!P4*phGunU1bNWsGoAevqjQY<$xpbj& zXJ?I1<^6NXEdPymU)AdQ#K`y0nMbm3mOM~BiSi}g4E)5&xD&t0_@{oAjK-gGj642{ z8uz4|!T3{-amQ~m?&xMT{;V^`o%Lrj?&xMT{*Ma@dpK|mYe?|2>>1NP> z@{Dr>`Db!&KsTfF1LK5`@iXzEn~|S5@e#j?58aIXfDrcGde%X&$#0^ z8F&2V*!aJ@s6D?b$`8Mh-~)Lt!N=5pru)adhB@ya`W=gY&C>K6k@0^c-~Ec_^CQK| z#@@agckj7=aLdhm1~=X?_FES1N{3hL^ws~5T07c1{`axY?1^eUsv6hP_fBKaP4m88 zzSr^d_rrLuDgUtk#^;)TZ*)NU^NiNSgG2g#jXCz*bfo?X?`=ln=lzV|*O-1^V~#!d zT~q(qbKlYWH|P5Koe1^A6t{HK^^e>a%l>yR&pys%_#r-Y)BZ{GH{rd}Nc{y_w%DO&UMqq@ToZruVhdP3d9$QT@;1y~oJ>*WY`T z`?7x5p&hiF_T?VGFT72+ApO4ZMSIgH{k~8;ar&fx`_1pVdiNKz`t8!|FWY%RdCGe} WwdqZ~YTL1M`^B#-=XP40D*gjG+m-|X literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM02W5p00L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM02W5p00L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..dda05ae2647e3a47885f9d3a5c33a5a84c283d1c GIT binary patch literal 20282 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM04W1p65L0p18.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM04W1p65L0p18.gds new file mode 100644 index 0000000000000000000000000000000000000000..3fda625771d2d31b50206328622b58b486c3e6ca GIT binary patch literal 15622 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM04W1p65L0p25.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM04W1p65L0p25.gds new file mode 100644 index 0000000000000000000000000000000000000000..1c381b26c2d36ed3add11a42b87a1785e898c16b GIT binary patch literal 15686 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM04W3p00L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM04W3p00L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..c5bd736e157e3b4c16ed1987d670c48d3a84e4e3 GIT binary patch literal 20564 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 WO`mvFZ5uYOKl`2K*)$Nxi~j*vCG2(p literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM04W3p00L0p18.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM04W3p00L0p18.gds new file mode 100644 index 0000000000000000000000000000000000000000..48d78026e9319cd6edbb446d9032acf8e140d677 GIT binary patch literal 21076 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 Jo0i3;>U*d|{OSMz literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM04W3p00L0p25.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM04W3p00L0p25.gds new file mode 100644 index 0000000000000000000000000000000000000000..796ca9de464e1aa27b295fb8ae9635566806960f GIT binary patch literal 21140 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 L%Gop)7n=VAohb~` literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM04W5p00L0p18.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM04W5p00L0p18.gds new file mode 100644 index 0000000000000000000000000000000000000000..865e272b417f0d11fa11c88b990f1aa091b5cff6 GIT binary patch literal 28308 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM04W5p00L0p25.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_bM04W5p00L0p25.gds new file mode 100644 index 0000000000000000000000000000000000000000..e4452a38bb80e4ce605b107463786c6f4285ca70 GIT binary patch literal 28372 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM02W1p65L0p18.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM02W1p65L0p18.gds new file mode 100644 index 0000000000000000000000000000000000000000..3e7d706bce8b603c8888ebf26908f91b3242ec3b GIT binary patch literal 10138 zcmcJVZHQgP9meOLd(XLd@4YKgqA@m#RB5HgnnYqElIm`fmiSU(6Vck%3pLqD-A&e) z1cC^q&<|EbZBbDPmX;8|h@=g^Kvht&f^9)4wWWo<PIeg(^z*gU>TF&w05!GwUi| zk)QtOJoA5ne%9{3D z;1d;#d1n{VZX=56yL+8pocNd1i?G-A*IWN9o&Wv_e$PiSeq6DC#2DH|v`6*uWcAs( z6{+J-9Mex(|7&ahj~O#~7JASAS>C@V>~;SQz4@KfS^vgrRDLvz-US!dfKFQN7m z#&lnswAQX0JNE2)osvT+aWmWM-vXf4vip$1mfYI?3K>O`$8acq5UtIzNJ|A_A+_`J8`#7~eD>>}Fh z^i?Ap4ooS~p`6s9Eh|_UB=N0|-zEhEY zX%|!ec^&;yUlM+;UG)C_JplE?JpjA^*gatNL;OAL=3Q|i#&oagtuDSXwQIYJe_8sg z?7VO2{r>F6Py0Leq2f_o`>TrGjc$Ju(QfPC@V_D+|M)$ubus#Wn|GX@S5NQUHN%7g zBjO|Kd<#v0J{kL;u+!f{nuS4+_9M%$xLV$l~Jf7^fUOo^Dhqn=KPDW zf2N8IP=HTR5v_6FL$Eir-mPfYHteGI2)~D6jH^A2dr<4fK*fCjoi|Wv{JM`-%pOO^ zu#0H18OQn`&ZYYweA)FcPGbLO|03+k{);!$?b%83cJARRJ@@cbJL@-iA)a6ReK#(g zIUFaF<3hWr@oCIBU;q3?r^8d3)sxiGE~fO|dz`L^XGQuasiR$#J~n>3M}^u0_qfLV zs^23+`Sl-gaoJ}m#78nN+C|0Z^;_%rsMcEKbPRL&j}<4rjsJ&TM0;q+p0m(z=|C;hXAj9<*pa(WT=s6Iafs}Ik+`70G$cqXDdNI@-mQ-qsm)qkqzFt7C6Twai;4Vs9rLDMWZtxksr-2z z^QK;8{ds19rLEXB=WX)F_Ay7W8Tz@%$s&Gl|Qdz-qefC z-}dX7%Af0madX|2MBLUchT`|n2NU1NwVUwoh8mBccC?F|-2Ub7-?;xZpZ~_5U)=ps z&wn_l@Ynri#q25M2fK)t#rtDTKRDg#Mf+R_y$HM2hvH*R$DY5U@rU%;2Y9~7;_+qI zV&DBIuK9UIzEh%IM0+$o_CL5R-9N{H{fmRQUH>BN(fTQl_L(jo%fmiCvH6axF@E+P z6RwkvRE-^oKeh7^(PD*C-lz9Dm|8{k^ z>jVBs)}3}y^$+zwad$Pop>{t1kDV_X^D}>>iZ7@~ELwk|cIs2@%wPU{7^=z4H0sYh zIlq~=$azh>sQDezb05L{aPK%hIiA{ge0y|#uzp&9vHTQ&sJ&j_P<*`4Fh1UYM8-$E zsQDezbDyS;`?p9P?P5yL`#g2L|BKYoE=nKDFL3^B%pc~j{Vx>1tv|+-ac5&?d*3jGfL1*jdNgeHCN@d|8aVeXLRaC z*z5O)M*RKfoZrEXHNvm8i%a+~?sxvh?j_E@2z%7OT|XE%yM8>GH|=6-{FrAx<@}fY zuk)XaQ*r;)qkngQ^Xxq6^kT|?>x-^#t>4y&_^n+`)Q{J3+^82hZnTT3@#A%@JM|*# zZu|92)t}d~Zq%1V-KW!Wg<8NaqCM^(_cxAPe`Q6E8~05yHGaH~<3_#6@uOW#jUU%3 zbzHw9b+n5qz1`n2e)P}rBROugi>dMBb(}ZUmBhTUb}=!3Sm)NWh!yo0v%RkVBJ9!n z+dNT!=Ff2;S$EpSRQ-7!Le>c@Sb^(%>egZ1P7XW868 z?x^2Cad)*p{tcTylIJ4+MEs|%-w;y-&v)4W@i!uTEfD(~(fHq3x@#bO)10)rnBTv9 z&)n$1t$RlM_l%LkMfAcdP*hQV2L;j1`oZs$`D$+0QqWs75 z8#{MkhE(+loNF5Ge6CFC>*uOa{L4AF#q>Jwh&u0xI`@R~51d;X`32r9puHM@j#G>G zC5)eF-gt)T%`XW)Rd4u9A$r?3GqvNJ{+`tZJLY4&w*)Q# literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM02W1p65L0p25.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM02W1p65L0p25.gds new file mode 100644 index 0000000000000000000000000000000000000000..137c5dcf8bf69b5bd154b7bbb0439d0cd1ba649f GIT binary patch literal 10138 zcmcJVTZ~;*9mdz$=bU}6(-cyuBQ+8*-YC*mOEsq0nHII)NTwwyMvj4ANa(a9v`rc{ zF}@L>)DUkW5Dmc>V*n#QC?@6-?i``Kdr{!JBsp-+swr=(%rLpxO?S0e;m5;mhR$>mJ{q7 z+s?JW4&ndYhWYZ)spaJ}la&+4&bZD6&b{g$2Zzz)`B;yAALF&I+)%iUZY%wxvabDi z@cR|ZWp5YJZV{#Qy`x?)4*u%(BJ6ejP3C`-_dk3Fey?(F?&6BW`<$a)M0-*XPo^)f zs7M_@;*5U5{BN!Ke*lBAANs)I<-va->~;SQz5A8dnSba>>S-5e^pkr2#Xd~$-=dEn zR&4J@Kd_5vulrx6AAZ^E#c|u~Mc9-2!KV=?^uym(q>grREj{C>US!lktUVaI_ z?{CEC*H@U|T3_SepdMIfq}G)fU0*dl*A;c5)|EK3zV_AUcew}g{TDv}P;u}T{2O)= z?e+Su()WJs^&-d0`VE9Vsqef4_4}e953zh5{tdebdsg3B^!h3P2CH$IQ4F1DC0QJK?0K5OpJz)MD{Cv~TyYh1w)1$6GUw&ZW;I%&f zb?NW2dEd~7{n?M7_IK<<lY6k zTw+3z5eX4>{sZriqk`D+#nzu8fL(-r^^6Gm(Jej`?%2$XWG1wW$|zP5`Wc<|{>AYV z-oFU@|5cF@cEndu5v_5I1^0&5`HHr-VHdSWggp#nTajO6Ev3&odxA^|Wx!?Q#McA|bm*?{B#f9m1?%_E-_wZah>o@vYI=}Y6 z{J3!DaGXev3+gqmr|)0lb%Qrnq>gq``qcR89u;ek+~XSa ztA3A+$%LAChyhjBNK8b(BF2Y{l5mxDY@JaoY zFL-@V+@IHX|Kjzcttt2yVbA(!4e4L(Uhe&iuqXB1Ls)$i_}Wmhg}Fhyi1wtuhoVy7 zd$1yPw2L{t`FYIyZv_^g@%}~Flm4l#xz)N}rmwkJX_=H`F@gFf#5^A#C4?P4x|UdMGy{gha@W*0N-m)9|F z>P5y)ySP^TtQ++r>t_81=IU2ojcc)Qm1iq5Z`#FN{=ANPQ$Hp0HoKU~pVu*O>P6;F zyO_(L*D-JEMdok)2IlhbyvgU?`E^C+O}m)OpVu*O>Ze5BW*0O0^E&2Dy~w<27jyaZ zI_6Ei$o#F}z+C=ZKa88}W=h0ub}<%z_5G5k z`$dtCulP9j-KTKPw=43Q673?|lku_t(TDQ=^H~!67e~+f{zcf6^-~<}OMN^>d}lSg z*nGy-7(aW)gzKauIbZApydTX!vKG^e4YY)WhuJ8uL@gqmr{{g1I^O?9>S!0GkL4FRe>Ub1^Vj|ti{I*x z@#Oe&JdKDajEiU3A7cJFf7~PK_0RE9d+@(lKYv;Mac;Bv2lCuTyEt=xYv`?h&{_Qg zsiR%Y=?9Nu{ve0p@fz_&#_ZzG#{SUoUwqf=+DkP;XLd2CKMh~IQTt14MEnKq;_i%p zT-STr>&5<8yc`==iL`}^wUdM5xUgWsZ zF6PFM*Rk%@i>$l#8kewQ_PJYuj9B; zFLL~77jxssbxIxAuSgy3Voq=SJjRdyIesL^jdn3Ne!PzJhPo*+Z_F-c<`3)K`Uzr1 z{l(&_ufGU;vi_DQ)(`XN`XO0&+QnS`c^%`XZc4;$b}Nmy|!S_4t|M-mvZwsV;Bbxn-slT#BYAC1G}hmbAK8?-pvU5-e&K& ze?dk1rCpT&RDLt(4&+zWCvvW7v`5Z0jrRJvDi;5G&TT2Z&O4&cJEG1#vHTd$d%;l9N26H#v)KN0ri`15?sxYzMqq7h%@+}LQ3Jhy1Xuk-mUd2SJ_U*ufc z=)cXnFhA_QBG2Qri@EWspBtm&|2E(6fa3r^q@DL+7jykb&P9#-Mb1T^s_*N1r%3N8 z>768d$LBt*$t#d+^SOVX~iGJx~( A5C8xG literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM02W3p00L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM02W3p00L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..864d1453265e041de0bdfb0d5cbf69394ebb1bb2 GIT binary patch literal 13050 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM02W3p00L0p18.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM02W3p00L0p18.gds new file mode 100644 index 0000000000000000000000000000000000000000..c60f58b92d3995391122dc923baeac8fed57feb7 GIT binary patch literal 13050 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM02W3p00L0p25.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM02W3p00L0p25.gds new file mode 100644 index 0000000000000000000000000000000000000000..fe96bbc4ffe97b2a0a55183843b6f3830280048a GIT binary patch literal 13050 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 Hai;hWZB*rb literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM02W5p00L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM02W5p00L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..e8333d6f009de46270f86cbaddeddac2b10fce7f GIT binary patch literal 17594 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM02W5p00L0p25.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM02W5p00L0p25.gds new file mode 100644 index 0000000000000000000000000000000000000000..61bb2fb2c6e9d86a6c65127da4dc080316c9a7e8 GIT binary patch literal 17594 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM04W1p65L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM04W1p65L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..7fa16fd67b7f3d063ef29645353df9649dc9895a GIT binary patch literal 12902 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM04W1p65L0p18.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM04W1p65L0p18.gds new file mode 100644 index 0000000000000000000000000000000000000000..8db8dc8e18ca39ca3495dd009db84d849f2af854 GIT binary patch literal 13190 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 Z@^flU-~3l=2M+GN_RZz_WKmow{trKb_7(sD literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM04W3p00L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM04W3p00L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..147ff9ed2079d903eb3764f4adb39ed3c1c74a3c GIT binary patch literal 17428 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 J(~LM>{SUQno|FIp literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM04W3p00L0p18.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM04W3p00L0p18.gds new file mode 100644 index 0000000000000000000000000000000000000000..3dd649484d65875f7548d820d210ac2bc070d95f GIT binary patch literal 17684 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 J7R34H{{WyJA=v-` literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM04W5p00L0p18.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM04W5p00L0p18.gds new file mode 100644 index 0000000000000000000000000000000000000000..9c5b695a67a3645da770fd428da4d322b7b94651 GIT binary patch literal 23316 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM04W5p00L0p25.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_lvt_cM04W5p00L0p25.gds new file mode 100644 index 0000000000000000000000000000000000000000..989f7d15f497ca068953bc4d77c01bebaa178bd1 GIT binary patch literal 23380 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 Cc$EbJ literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_mcM04W3p00L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_mcM04W3p00L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..8d2560679734fb8822d5a283212a75e28c3e8896 GIT binary patch literal 20390 zcmcJX35X?E8HKC+E&clSdp#2oB^rnbMiHZvMYCw)%p`GN$Rt5fV@FL!#UzHf;1b1M zBkudYpb}7A2!i5{0Wl)cxS$3}f{6QuA|i@56^(9scKnRvxbd4D zKf0M6|KxYYxBjw@_|VPFzxIjZo1E1VAG(?OqmGWB`W!#xxY5n*_^HFXQ{QCW(amiA zqmKMhw-O(^nfa+heyHE_#!`Q5Ci$TbKI*rWFLX2UPe0W(GtFV+oQ`wN1>My4-u!L+ zq4;L6=!g&9%>2~ZxUAGSXM-OII%#(Fz{wC{=Zf5I0`c3hT zU(yjDx|#X8&T`&y{Wdvo(9P`pVH~-~-%_~`-AwX7{J7@%3Dr8#k=&x2S$^X<<>&a> z55$LVW`63h?$kF~x0qLDwtmzhx72NUU8z4cll)Q#AN5EQu?F)$^&G{) zSV67h(h45^F8;l{nQ2dtEjucE8vH}ud46-dqsNy$9G*8i{<^)l{_3^G?|HZ`I{v!7*YA0I9^4d;G4ur%@kNAL2td zv-+{V@_8L0K6EqlM{eZzI(psE@z?FW^N-xf?|HZ`I{v!7*T1^29JlvlA3FZJebIl` zVtxjPH15-?^N)^ubX7+;wY}HRC&1CGOH(tGQVPLx;u z8~vmseM2|1{!QPcjA;Ef^mJ^pZs=yVevIR|@we1*hi)dvzwtNSF}41)4|inU(amiA zsk8o-Qs10Dt<*QA_pTpxm^bxXYTlun$^5BL-#C7AuKuB$S^ubmkNPG)bTjiuPIdg8 ze;hyLxY5n*_!&3;L-CnYe7?@?W~{p_>=<`zL=@{V!?mAL_XF z6zxyCsqJa~$=yo*mftS*C+6My{nWun{g(2DZYF+?bNzLtzBxUm)HkK~&YwE?sBhv! zH#0x=r++E+&5aL~`lj@>K0fN3_^5AYe(KLIEcMO#TB&bJPwV5OzKM_e=5GFhJ{jUS zhwmtUQ+jWG=1=~}uSxFE%`AV+liX9krE(v-ndF~3%$xcq^F}wb`BP_AKb4`rIk-=$ zZ%R*(A0PEid@--e%+Ga->kij1lj{z;nO%RlPICR{`e}0AkL!A6cKxRg*DdOsT({88 z?D|C=eAGAbp_`eXIz0bS-{iR`=2e+J|4;`X^-cUSugc6%9iE%0-%`&_p_|F`6Ls)W zzomSkn~9$~JU39^c7rrCRC$JwRoope*%d)J?F zQ}r9axiKt$Q+n!Wt?`@mg8iD(Q~%m)ir<`^T>Pf=)IYv!@we1xVCwT(IC$6GKm2_0 zoBV7NpD8`9Pp>%smg*&bdKx^`?{B_b`nK}aj`R)P%=*VT`i9@6Z?WIXtbdG)b47kL z&L!z))<698jrt~ii~Uw+{bL+`!{1VU3*Aim$2j_i-=uHoX4XH(#knSbOU^}fGwI*z zE#0BzE`F2yZ|t`+yZ^vyuSGP z`9{O0_$ z;xn_)uOmKtd__I{Ku7wHZf5--^4UwrKRTr&$Bk}g$4?#dLw%Fnpqp8KsDqFCCO&jC z^HYc1QQstgF|W!jf7HQ8eG`Aot1|ObXLxL>-}3rWpZwPCz5S;SKI*rWFLX0`eq{gT zp5r&kJ-V6YpE~%cZ{kBYck`2b{4H-Re)7+Lr1u^_^CW-F-z0bFW|lwpPyVTIl6!PB z%RhCPH}zX;-l3bx{HeovOMR2`7Tw(K{KZFo6Cd@>C4YH;Rlk|F=e6pa?$>)i*>SGt z0d!N_7uSEAzj>*v-dg-)^M1LX=T45_IcZpPpF!Eq_w{ zQ}e{!zwyfAH)lGRnZGGLtv|b|_|5sti{F&q>z}?yb>!bTrz1Xeb2mTp#&0t3*l%Sv zf5x$H_*-h-LN}B3;~QM$f2L=amdbtTW|Du#k$e0mxkop%{Kq)uA3ynrhPWi`A{vo+XH?#aRj=te*slJ77?$SSUgWn`S_{}Uo zF;4l#PmUqEMK^cLFS#LqEtMPc$MrLqpl|Wb#7g>xZf5;s9Jz^a7FLp* z*l%T)AI6c}_-3G~+=gx@`Q;mc=2Hni^ z!#Hw-ucdMmx|!sMapVTSNp8^1EI%<$xxr6knCXbTeCjenvy?_(r@*?$FIFe~csd_)T&j`>o9K&p6II{4I6f zg>EM2ALHm7ev`hTn_2%DM{e+&6V!#Hw--y}ciW|kkuksJIim7CDbBtMKJ zH~39*gKlQ|VH~-^Z<3$bZ)KJr#*rKREtQ+l%_KiF^+@kmo4GPz#(P)k=Fv*y`ty$X(9O(0`DO8~zqunmbTjj>y|wrzXLiJgZf5@R{^A?| zx+6YxGxHCBTYRIpcf^NoX8yrDi*I3(SH*kx|#XuGd}un;zKtx|9F4#(SQ69AG(?O=`%k1Z{kBY zGe3RCNB>QH=w{~U{V>-_-XFKTN!dX+_x1n$hH?CyDc;{#averDwY~S}KaAr#iQnWp z9Q&=5p8C07;%}+zF@CPc!IN|U_}1b#xentqrKk0|&r;vyI*i|xp8C1p;%}+@IezZv z!BcZT&*}J0?&J7O>Am%N&rIKWf8A1j58X`q&p7&z-=y#8X4Zek(RchN{g3@tX8mUz zeaGMO=HjRSb$fdJ^c}xR-|?AQ{~1T$@tgD=-OT#WIQovirTQMane?A=^c}xR-_gyi z|Es?$&uxRZEKvIk-Ata}7)KraCdYwpO7C6&7^maJPu?Nxh;C-juZ&}z@wL3Q_~~ce zp4O+&_)T(z&y=3}$r*l=9OE~or+)H|zopJ6{G3n0e#qvGA`YZV^C%UQa{eIQa?N7>mTRb=Cf2w=dZcv?d4oFrT5N%_1ZG;`29s42V~yp=F$v#~&0o5?bp7AqZ+=+(CeI=GP3epC-{$AqOZ}D4b)+u3nbl_; zb@7|jMK`nhd{3Y6t?>POlkc6Nn@it6**5?A`-(5FAKFj+{ zCcgOoP-Rx1-!s9-@2{Bn(ap@ycTV;5fjHOA__={}bLr;?+m3(mkm|p=WB8<-sb6*Y z+{(4ajL)so&85$;JL-o|_0909zM1)*Q}Rz){a%euX{f6f{C!|xoU{KDKSijM z1b@AL=m?w1JInXKOzu1UGo>#cf2qIV=lak0$ILbTfBuLOb>bWhRr-``9%i$`B@=&b){53kTVzkxlRedxeL MA61WGO&m7=26|SamH+?% literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_mcM04W5p00L0p15.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_01v8_mcM04W5p00L0p15.gds new file mode 100644 index 0000000000000000000000000000000000000000..4e78a32c4335d6b6897a0b3587cf0863bbab5a07 GIT binary patch literal 29682 zcmcJYd#I(?S%<%K+56njoHH|LE=@vdYg&m>CrxV`McZUD7EP+;hEPdPO_QnGT*f4= z2`Shb3Ra0CBGL>+TZQ?filB{*;?&kS6%)0NHVBUXqrxC%RFq&uL4VJ?)^F{-&zbMt z=1526N#Ach-+I^eTl<@R&UC|Wwwvp&o|)~wyPMJf@n>e@zrSU6`1psOy5YuS+b18` zKK0o4_G2fvA36Ep6Whmb_{clAAO665kG<^&-hS%XvD=TGy5a5J!MVYA-TcXS-1g-& z|9aD{XTSAVPQUN&?&?8u_u*@~`}|_p4cBJ7?QXa}+a2t#-r4G>XOz?l`QJIli(MCS^F;0s2E}hYUHpML z$o;wV#W&}Fu=u9pY5udHD84y&Rq;*5d;P`BrQJ)!;oLChf*E6;FNIjc?L!d^2nR!f%vzFCHJ`#jcCEnY5pBv>U(ibn$6_z22KY*J(Gt zNxO-gil;v9#y4qq+_y4o|Lnh)cF%osj2Cq;;%3r*%F%B8#?!^8{q=fp{#>Ws_$KWp zZYrMov>V@~{c+#Qto_EZ1Lh2op5A1uD9cr^~(*Aw5{pQA7if=03 zTmSNJmT_A-F-GMbaWl!Ea*P{(qwGH%4pZ2Y3!h2m?R;y#QUaZ~ZM{fry+H=ZdzzwuJ> z7(e`M{J74z;hT&baZ~Z$`sY7a#%*x(7?pR#%_M)yF>d&c$~)rb9eMqX8@|c7;hWj` zMY#*b*Eq#}7&qdk;%WOCH|lRZQ+&pc`zW6Jj2nLArQ$Ju_}TbzopHlA88_ml;=T2g zV@~-NenT{ZUTs$EW>}b`v+V_EU~_<29ZwKJBm9d;5=b zBJJk<*!XHWKhpksJ@sifzDc|B%&h%UPVL60{g8GOH?#Irj&|cUo-ID@uh)C?=bX5C zZ#h3UDi(3`-v0SRx&5CmzIour;+u-6^&j}V;+qE_FTSaG>Tg|B{Knrd{+4-7@mICY z>+|<5-SE(CcULz&Jkt%j;p=Af`Fi!L!Ml%sia*bFt5*+hd0+W7-mS)G^#9iS+UWKl z9X|Z%0}np5{o%(S+v7km|N45|bxmD2wFlIr>euUc_3N8Y#-Gxc z>kq24U+RWOhj(d{)`Mfdj>`YZ9z0_E);-uOdaqLI-iy6>%J#I(Kc<43Pp#dWPoJNd zPltBislM5{cl^!F?3?v6>ztlyM@KyLv}U&Arml~#jGM>bEY1Fw%DzkE_UwpT|Ed30 z+|>1P|M+t&adV1);2G`g^38+aTzpgU zG=DtuH}S~doaP_=TJg=TUo5_bHoSN&l^AtnpWW zb&T>NZcg#(H+++R!#A`3BTqc?H}Qy@(|r03-=yF0&8+_-Px<7J5AlebnLl_%CrCX( zhQB-_Pe|gXuJ?}r{IkUyykkT>;^s7;@xyP_xZ$(@g30)iCm#7X%8R%;#b?~`O~wu1 z%*K!W@W|i9BW_Of88>{Bal<#KjUOKQn|S1JX8!CymAvPEVMOvKZf5yYj(*2)RKG{u zO!}X4%s+gSc|+XH<`3m)H@-=`iJMvbS!bLoS$~a}%lhL~U9b1ff37cmuK4EiJ;gH> zPkr9NQop(IiQ=1z_xkMf~m`>u&c+??h!ZupHFH+<$_Fd09t zGj8}M<3`-f#*cFJ8-AnuE#l^s{v&VtuTgo^f8-xb^5;5vv^ z{e#C#{pRqRQopHq+I~FhH}R;~%zV}<{l@w=={MqL)_=@XJm#;7N8HSO>Y?ALzft`b zaWm;Z>cOM_MtKo86Q6qMH|jU(H{xd2f7F9V{U#o9GxIrTux>ejG+tI)h?~j!r5x)P z-(=kqH?#FiIrdF_lYNu8neCsHW8LF7o-01jk9xg#{&G&DUd~S@^%6I;`YA`h;Wu6` zKK)m(r}fis_$K{^XJ-9JIogfisCGx(O!hzehjl~$nXDV)X10E)2aozqJmO~NQxEHg z`Wv4w^|OD~>uLYtQGcU6>cyP`hZm8d6-4Hjk^~3$~sNcjRZe~8`ROSum*T&20 zOX6m-{wPPi_$KudH>cH4zu`Bk-|*?bVA6kFXWa2k#+|sCjX&jBclajjj<}hvKgzLg z@J-eYaWh*#lw;lCH)`EP+?=w0_T8qw*ZgVJ*fW3jnYZQ7PduKVjq-SY;s+C-eIAef zzfoSq&BW*VkH`6^QC`H&#OFDM$MdUEUc}ABXPw}&ei{{vxS9Bj6CUH&C@;?uvY zPnZ5T*RC!7ZYtip|KP9vL-9@CMG`j^@AVlc>Sg>)>LqSw^+!3?k5B!OdWoA^{fsm9 zGX5s@5;wE@qnzr+r+!Gi#LcXJ<_YyOe@yBnZf5mIIn|3#{g8Tzn_2y=Q#{tMiAUU= z=94$RN#1ea$}E58IUe)h#3yb}^T`|EByW5(%b#_E$NDkxh?~=V^2RsGJMLSV<Jvd5*`tH}Qy@na@1MW8Rv0#LdiSp5Za?Og!Rd=67FEUn%#QA0CnC zCUG-+eo~I-Hh$yt#pn55ulMdhT<6??Z*p!RZf56)D0i{=JioaQ&u!vn_WY*Y;_>1& zUM@c8pL#vbpXWaHnmqUM%(E*c#T^75jT_PALW?0_$Kp~xH)b9^4=G}@qF=lf6sjsPy3Je=J+P>o$<`< z{qw%RF6(CF<0GL)^^P59L@l_>EdO5jT_bGv!z}_$KRyxS6e=D5rIU z&-#I^8{%fRekjMf!E4mIiMW}pAIh2T(4`}Z4 zlNFUS>zezDn~L|YzrkCJH~8BT@raw5KYXru3;MDF^+P=3X67%>7H{#_N5ms;X8zKT z7H|3BhP*L8|Bge_`$?q`*hhi z*WWWD`zCQS+dnDCyu)wQyo?Ayf6Z2zVl&kg*>=Znwzt6uM2e_ZGMhi~%SB5r2SFUs-Uz&Ckr z5I3{u2j$rJ@lE!9;%2u0Q;vNfzwuo0IX~6wY5UoC@f%+$-aa$gf4M*VKEBDmPux_z zw|@3n&K>N(ChLZ{nXaGDmVIOW_7T}P))Y6h{bTjpi?{lZBjOP^GoO8yeS>|sQTs;3 z%_;i_&t3Y@{uk$Dd7Pi|As%sahhM%wSAQ~c z-)ZeT?^3;5t0v!@BW~{a{@jG${bccGer-fN;^q$jzVYwxsbqZr&));|_x_0U{XhQf z`2OF7@9zz6YX0**LWoD)+~Mn+v131(`l8DHjmGc&BOdvN^87Y+eSH7eO;%4SA{dw`09~cpjxS9FGKP}$E z{UhQLH?Qc|`M0cjwyfuG{A5+-$~B59ZtD8(_K*2XuP=V%pA>(|e0}aOyi|O1@x#S8 z6;JCQ{&?}tg*O!6RJ_+;_>{`3-JD%a+D+Wd+D|#!jo+wtN8C)>PdVC+Z_;k!X4Zbn z(QbT`cE^1yv-b0jhrE}5X^hG{;%1UR<>)tjlYS#^X8lJw+Kq40ZsKOve#+5qe3SOa zeJiu}(@!gZtn%tVbM?nc|Cx&S&L8T*qka>QxS9E}&g8TH@F5;?GxO(bz5HYnKExw# zW`6u+tGw0P4-k*Infd$#8}$zL%ro(bo0-phYP|USze+sfX6DB^^U-pCTCe2UL)=un zcl_d8kYAMtZLjq$mQ^VE8o2RlALP4pk*jL-O+@wrQJGxHf| zJjUI`BW`9shr{W%m519On=GMx8q%ZYJjs%5iSMH#s*DH?#8t&pGPlx!0(A zBW@=3Q;v4yo3x*}Ij#MiTgcz!{1WY|%+4=7XUUuAZ=>>#xS8ZnIr7Fg$(y*DLq`Zddc6+>Zcs_;+xb@+|24H&$+LZ{LT5NO8%ze zz0Y6#!JCTT_-Dl*m~YDc*{6$d&Rtu4Q}N#VIcJhL=T4KniJMvelp}BaM&%uGGs&NF z7lJ zXa5Z*;}`X4{@^ozAoGT}nav;G6H|`&#wK|XHx=*QzbQvQ<2UMabi~d2n+X;*#N{^= z=>2Q`{2KMBo%pmDG7pHGil_DSo)6Dt9^jjbr#|D1Z!(YZO~q56d5Yhtd4$h=3cext znJ4&-8b>_FGk9&k&px^Dg|dH|8xNQL(^R}Sf1VR~JU>i4;%4UaoW$e#Y2pz#GoSMZ z9_KF;kGPrn>{EE`UnU-LGxOP}@z}pjJmO~Nv(E5XcP1WjGxHfg-W&1!GkI?m<64=$ zKcXD(jqn@K7k|x6-XAf})XVsr)F1PrGOM3*)QjJ!dLwQo^)pYXm-%B-f6S}OtbWQ- zFMgxyjkuZA&pe}E=ATLZF)u5#`k7~V%s&%9=4ItHpSHPJ;$~7m`z!s# z{%ev4aZ~Z${gZOMC&o9)Bko(NckNIat;%1UR>y*4%zb1JTH?#aH zN8b1*`Nw@Lv-~MX-uR8mJK|=NKkJ;lS^p+^6F0N`DM#M;Ci%yGE3^D5N8b32$~)p_ zl0VNmJf44z@*-|d@yQ$CB!7G}%RkDg|M2NQNWT#`v;LzT`z~Ii_T7k^$^Ogpk>?!G zPm^{KHx=*Q|0u^f9p5C6xNoK6sZTrcO~wJ=R6OBR>5Z-0JuFo*18-`QDhx z=Vsz&_W7A|d~U~Y)aUkyo5|;Q%JI1szws-@=ksg5-rIhz^SK+}T_n#{nN8;wR?~gFg@f$TC@tKdowvha zc<=a8j(Lu6vJVh96;FNE8NSIn#y1sDecqemo9rX_X7>J+a;!7_M(u|YH9rU$HYy=$J<~2Ws;5ZFO$UI-#@9b=I_7FSJZd>y}tQm@mDp( zdVeZkzkzgP^czS&rm42$H@kjbHhhlISDMUwYc z7d}$FrQaJ7kGPrnk-y5%eX;lukGPrn%bLFnD$93i%#Dw#{}neC@6Df|VZ$4q9TAVX znfdh7=341L^N{{GaZ~Z$`spV;`p?88Ze~9Hw7FRN&pf36P25yG>fdT>`8xiUq*$jj zdTy;=-Jf54*Ix50zH48}yo&GIS9*S3>HZtn=l74F1<-xtX8|g?fBY;!Wp@9i73K1~ z{rS)Rtge5f#^Kl~H<{SWHL|vKc6M|88bd>nEn|N(?4r=rTbrD{!HATGZXjaEM;=vIEz(g_rJpYnYcgw5dCud zh_9u8t}uUg-9N@p_iyyLnaTL^J0oVlN&ClVMvQ$!aZ}gF=ifyA{LTpcRrR5XN8HT( z`DcsA?*hSxc*M=j=QB4RpT$i);%4T@_`h7ozjEsXb^I%5U+!-|KF@yUkGZM!NZeGs zxBp^(tKOL3mDEq%%<88c_2QeRD$ZR-E)9$MN^_fT@>48+fInVdcNW9~SE?DBc`;+yn6 ze@s7vuT=jY&M*`8@8JwK;qT!LIN|T%3^n2J;S4q5)6bmY=zo*58-L6lXSfM}4`;9m ze-CHaT|V=Mv#;s1o9X#e*HHO9HW+;#Q&U+(H^!g0?f#cGW{#-9{oT6O(>=G`b@!co MC@U*sL7eaY7jRz^GXMYp literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_20v0_aup.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_20v0_aup.gds new file mode 100644 index 0000000000000000000000000000000000000000..35572c5b2adc0f54ec8947ce2c287199b6a452c7 GIT binary patch literal 105426 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 W^_$(Sf5RJ>sczaI6Z>&w=l=!I&P(0^ literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_20v0_noptap_iso.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_20v0_noptap_iso.gds new file mode 100644 index 0000000000000000000000000000000000000000..fab064b941f1e42ded2e58ba4336a2d6e0bfc189 GIT binary patch literal 181086 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_20v0_nvt_aup.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_20v0_nvt_aup.gds new file mode 100644 index 0000000000000000000000000000000000000000..d119d3a9dea7dffdc2c683b76450fa6254b809f6 GIT binary patch literal 106004 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 z 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 A+W-In literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_20v0_nvt_withptap.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/rf/rf_mosfet/sky130_fd_pr__rf_nfet_20v0_nvt_withptap.gds new file mode 100644 index 0000000000000000000000000000000000000000..7ac0f31ae8048f4d0d261fda370be3b155e5f2e4 GIT binary patch literal 120878 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

~Huzu5U) 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldpom4.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldpom4.cdl new file mode 100644 index 000000000..c7d887cac --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldpom4.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldpom4 C0 C1 MET4 SUB + +Cx C0 C1 MET4 SUB sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldpom4 + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldpom4.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldpom4.gds new file mode 100644 index 0000000000000000000000000000000000000000..06e53e0bb1cc9a3095d9b49d2819fd96eb0c32a1 GIT binary patch literal 59108 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 aT6)5+mS$I3`k(*09l+^mu?E=Q-uS=j0+CJt literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldpom4_top.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldpom4_top.cdl new file mode 100644 index 000000000..f287d5d9d --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldpom4_top.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldpom4_top C0 C1 M4 SUB + +Cx C0 C1 M4 SUB sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldpom4_top + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldpom4_top.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3_shieldpom4_top.gds new file mode 100644 index 0000000000000000000000000000000000000000..999555559ccbc49a60e77fcc601d99aea1a83a4b GIT binary patch literal 59774 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 B?{xqG literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldm5.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldm5.cdl new file mode 100644 index 000000000..378846e00 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldm5.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldm5 C0 C1 MET5 SUB + +Cx C0 C1 MET5 SUB sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldm5 + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldm5.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldm5.gds new file mode 100644 index 0000000000000000000000000000000000000000..08df3df8030049504b48bc3ed4fb51d00f972257 GIT binary patch literal 61716 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldm5_top.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldm5_top.cdl new file mode 100644 index 000000000..a251f532b --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldm5_top.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldm5_top C0 C1 M5 SUB + +Cx C0 C1 M5 SUB sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldm5_top + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldm5_top.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldm5_top.gds new file mode 100644 index 0000000000000000000000000000000000000000..2f3b2c69e945bb7b1d835bb049379cc9ddcf6c04 GIT binary patch literal 62382 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_top.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_top.cdl new file mode 100644 index 000000000..1c6f0bd7f --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_top.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_top C0 C1 M5 SUB + +Cx C0 C1 M5 SUB sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_top + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_top.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_top.gds new file mode 100644 index 0000000000000000000000000000000000000000..d5cb6b9fdb348f7062558caf5153d1f79080c8a5 GIT binary patch literal 70966 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 H_QwAMs*D(m literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x6.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x6.cdl new file mode 100644 index 000000000..63f772b1c --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x6.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x6 C0 C1 M5A SUB + +Cx C0 C1 M5A SUB sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x6 + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x6.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x6.gds new file mode 100644 index 0000000000000000000000000000000000000000..1847eb88b5d1a53196c3e000fc3bba9ea18d1d0a GIT binary patch literal 71306 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 D%hjBO literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x7.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x7.cdl new file mode 100644 index 000000000..c79ffe642 --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x7.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x7 C0 C1 M5A SUB + +Cx C0 C1 M5A SUB sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x7 + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x7.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x7.gds new file mode 100644 index 0000000000000000000000000000000000000000..b772653dc5ec80d31a48fc37c29f4e2cb9723b53 GIT binary patch literal 71242 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 literal 0 HcmV?d00001 diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x8.cdl b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x8.cdl new file mode 100644 index 000000000..c8c6bee4e --- /dev/null +++ b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x8.cdl @@ -0,0 +1,22 @@ + +# Copyright 2022 SkyWater 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. +# +# SPDX-License-Identifier: Apache-2.0 + +.SUBCKT sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x8 C0 C1 M5A SUB + +Cx C0 C1 M5A SUB sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x8 + +.ENDS diff --git a/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x8.gds b/sky130/cells/klayout/pymacros/cells/fixed_devices/VPP/sky130_fd_pr__cap_vpp_11p5x11p7_l1m1m2m3m4_shieldpom5_x8.gds new file mode 100644 index 0000000000000000000000000000000000000000..4fbabaed7376f3b36c86a16027e0d035c09a56c9 GIT binary patch literal 71562 zcmeI5dypMxd8f~eG^6WiW~3QObCEP7&5TAjYyl3&>rmoiZX0upLjkd^5NsBR6^qMK z#uc)L#cW6*%Th@S! z@9Q&?`_+1st^5I#avt&f`Z;gkPQQKn^f{+D+#Bqz>CFxd_MY4u(Esr_u;Skr4i3Na z=U#L4QRg0i@fF8UzT)`t7rpT0@mHTbdHm?nljmKd|M!^VR~26Q{$iEH<#)s1XCBG@`FDnI?!7X6 zQ+Zl{ZY2E5&xb!}j^sZ34%^?{b5Z!F^0fZ!H^VpC_t<|-<()n?*ngRKll_+5Jk$O= zb6M0kXBVTssl2m3>xjCndy~54=9%hG-4XT8>0gifrt;4Etf!qn9=6uzlE^(Sr) z-<&)VzNtL*w@rp$d3X5R%*oszzdn3(>&4-l%G3Iz-wod!`)K&4^3>mQW%%akk?>9B zslQpmSQTXQOk?>9BslVYv;hP&@8@{PL_17C|6}Z_;p)99ax?RH zeJ8x#A8v_9Zf5?T*M&Ftw3c|}X6Db2hc|y`OFVKj^Y^|hynS*sT@T`so0-3GG`xlT zTjG(MnZNj_;Vr$XB_6q%`TL(8-ttsSJaRMhm%kF;f!}S3M{Z{R!Iy`3=&>#F$j!_j zcz$?;^DXhn&CDPCyYSY$za<{InfYs96W-9{TjG(MnLoTCyy4Hb#3MH|f87n?t$$%l zJaRMhHyj9W!*^QZk(-&n@x$S5dRggv?U(7nfYV)hd2JGE%C_B%-{N^@U}g>B_6q%`4dy&O?; =VzM^ci{;{l}!2 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