Further refinement on the xcircuit libraries, especially for sky130_fd_pr.
diff --git a/sky130/xcircuit/sky130.xcircuitrc b/sky130/xcircuit/sky130.xcircuitrc index c39c00e..a329697 100644 --- a/sky130/xcircuit/sky130.xcircuitrc +++ b/sky130/xcircuit/sky130.xcircuitrc
@@ -8,3 +8,121 @@ library 3 load sky130_fd_pr library make TECHNAME_digital library 4 load sky130_fd_sc_hd +# +# Load math libraries +namespace path {::tcl::mathop ::tcl::mathfunc} + +# Deal with SPICE-type unit suffixes +proc unit_val {unit} { + if {$unit == "T"} { + return 1.0E9 + } elseif {$unit == "G"} { + return 1.0E9 + } elseif {$unit == "M"} { + return 1.0E6 + } elseif {$unit == "k"} { + return 1.0E3 + } elseif {$unit == "m"} { + return 1.0E-3 + } elseif {$unit == "u"} { + return 1.0E-6 + } elseif {$unit == "n"} { + return 1.0E-9 + } elseif {$unit == "p"} { + return 1.0E-12 + } elseif {$unit == "f"} { + return 1.0E-15 + } elseif {$unit == "a"} { + return 1.0E-18 + } else { + return 1.0 + } +} + +#----------------------------------------------- +# Procedures used with sky130_fd_pr library +#----------------------------------------------- + +proc limit_low {value limit} { + if {$value < $limit} { + set rval $limit + } else { + set rval $value + } + return [format "%1.3f" $rval] +} + +# Return MiM cap capacitance value in fF +proc get_mim_value {l w mult} { + return [* $l $w $mult] +} + +# Return high-res poly resistor value in kOhms +proc get_xres_value {l name} { + case $name in \ + res_high_po_0p35 {set rval [* 2.0 [/ $l 0.35]]} \ + res_high_po_0p69 {set rval [* 2.0 [/ $l 0.69]]} \ + res_high_po_1p41 {set rval [* 2.0 [/ $l 1.41]]} \ + res_high_po_2p85 {set rval [* 2.0 [/ $l 2.85]]} \ + res_high_po_5p73 {set rval [* 2.0 [/ $l 5.73]]} \ + default {set rval 0} + return [format "%1.3f" $rval] +} + +# Get VPP cap values according to model (values in fF) +proc get_vpp_noshield_value {name mult} { + case $name in \ + 02p4x04p6_m1m2_noshield {set cval 4.627} \ + 02p7x06p1_m1m2m3m4_shieldl1_fingercap {set cval 12.549} \ + 02p7x11p1_m1m2m3m4_shieldl1_fingercap {set cval 12.399} \ + 02p7x21p1_m1m2m3m4_shieldl1_fingercap {set cval 46.896} \ + 02p7x41p1_m1m2m3m4_shieldl1_fingercap {set cval 93.188} \ + 02p9x06p1_m1m2m3m4_shieldl1_fingercap2 {set cval 13.125} \ + 04p4x04p6_l1m1m2_noshield {set cval 10.281} \ + 04p4x04p6_m1m2_noshield {set cval 8.150} \ + 04p4x04p6_m1m2_noshield_o2 {set cval 9.841} \ + 04p4x04p6_m1m2_shieldl1 {set cval 8.879} \ + 04p4x04p6_m1m2m3_shieldl1 {set cval 11.117} \ + 08p6x07p8_l1m1m2_noshield {set cval 41.828} \ + 08p6x07p8_m1m2_noshield {set cval 35.826} \ + 08p6x07p8_m1m2_shieldl1 {set cval 34.782} \ + 08p6x07p8_m1m2m3_shieldl1 {set cval 43.728} \ + 11p3x11p3_m1m2m3m4_shieldl1_wafflecap {set cval 112.497} \ + 11p5x11p7_l1m1m2_noshield {set cval 96.064} \ + 11p5x11p7_m1m2_noshield {set cval 75.963} \ + 11p5x11p7_m1m2_shieldl1 {set cval 78.124} \ + 11p5x11p7_m1m2m3_shieldl1 {set cval 98.696} \ + 11p5x11p7_m1m4_noshield {set cval 111.693} \ + 44p7x23p1_pol1m1m2m3m4m5_noshield {set cval 1495.053} \ + default {set cval 0} + return [* $cval $mult] +} + +proc get_vpp_shield_value {name mult} { + case $name in \ + 04p4x04p6_m1m2m3_shieldl1m5_floatm4 {set cval 11.443} \ + 04p4x04p6_m1m2m3_shieldl1m5_floatm4_top {set cval 12.098} \ + 05p9x05p9_m1m2m3m4_shieldl1_wafflecap {set cval 28.577} \ + 06p8x06p1_l1m1m2m3_shieldpom4 {set cval 36.122} \ + 06p8x06p1_l1m1m2m3_shieldpom4_top {set cval 36.666} \ + 06p8x06p1_m1m2m3_shieldl1m4 {set cval 28.220} \ + 06p8x06p1_m1m2m3_shieldl1m4_top {set cval 27.723} \ + 08p6x07p8_m1m2m3_shieldl1m5_floatm4 {set cval 43.643} \ + 08p6x07p8_m1m2m3_shieldl1m5_floatm4_top {set 6.363} \ + 11p3x11p8_l1m1m2m3m4_shieldm5_nhvtop {set cval 183.472} \ + 11p5x11p7_l1m1m2m3_shieldm4 {set cval 123.258} \ + 11p5x11p7_l1m1m2m3_shieldm4_top {set cval 493.018} \ + 11p5x11p7_l1m1m2m3_shieldpom4 {set cval 128.617} \ + 11p5x11p7_l1m1m2m3_shieldpom4_top {set cval 516.838} \ + 11p5x11p7_l1m1m2m3m4_shieldm5 {set cval 141.412} \ + 11p5x11p7_l1m1m2m3m4_shieldm5_top {set cval 565.641} \ + 11p5x11p7_l1m1m2m3m4_shieldpom5 {set cval 147.117} \ + 11p5x11p7_l1m1m2m3m4_shieldpom5_top {set cval 588.113} \ + 11p5x11p7_m1m2m3_shieldl1m5_floatm4 {set cval 100.308} \ + 11p5x11p7_m1m2m3_shieldl1m5_floatm4_top {set cval 78.913} \ + 11p5x11p7_m1m2m3m4_shieldl1m5 {set cval 120.658} \ + 11p5x11p7_m1m2m3m4_shieldl1m5_top {set cval 482.574} \ + 11p5x11p7_m1m2m3m4_shieldm5 {set cval 111.909} \ + default {set cval 0} + return [* $cval $mult] +}
diff --git a/sky130/xcircuit/sky130_fd_pr.lps b/sky130/xcircuit/sky130_fd_pr.lps index 501168b..a4bb081 100644 --- a/sky130/xcircuit/sky130_fd_pr.lps +++ b/sky130/xcircuit/sky130_fd_pr.lps
@@ -5,13 +5,14 @@ % % Depend sky130_fd_pr::NPNModel generic::arrowhead +% Depend sky130_fd_pr::PNPModel generic::arrowhead % XCircuitLib library objects /sky130_fd_pr::pMOS3term { <</@mult 1 /@model (pfet_01v8) -(lindex {pfet_01v8 pfet_01v8_lvt pfet_01v8_hvt pfet_g5v0d10v5} 0) pop /@subs -(avdd) /p_yps2 48 /p_xps2 16 /p_yps1 0 /p_xps1 16 /p_yps 16 /p_xps 16 /p_rot 0 /@fingers -(1) /@class (X) /@width (1) /@length (0.18) /@index (?) /p_jst 28 >> begingate +(lindex {pfet_01v8 pfet_01v8_lvt pfet_01v8_hvt} 0) pop /@subs (avdd) /p_yps2 48 /p_xps2 +16 /p_yps1 0 /p_xps1 16 /p_yps 16 /p_xps 16 /p_rot 0 /@fingers (1) /@class +(X) /@width (1) /@length (0.18) /@index (?) /p_jst 28 >> begingate 1 1.000 -44 -28 -44 28 2 polygon 1 1.000 -60 0 -64 0 2 polygon 1 1.000 0 -64 0 -28 -32 -28 -32 28 0 28 0 64 6 polygon @@ -21,13 +22,13 @@ (D) {/Times-Roman cf} 2 13 0.000 1.000 0 -64 pinlabel (G) {/Times-Roman cf} 2 7 0.000 1.000 -64 0 pinlabel 0.180 0.545 0.341 scb -mark @fingers ( NF=) @mult ( M=) @length ( L=) @width ( W=) @model -( sky130_fd_pr__) @subs ( %pD %pG %pS ) @index @class (spice:) +mark @mult ( mult=) @mult ( m=) @fingers ( nf=) @length ( l=) @width ( w=) +@model ( sky130_fd_pr__) @subs ( %pD %pG %pS ) @index @class (spice:) {/Times-Roman cf} ctmk 4 360.000 1.000 -196 -139 infolabel mark ( %x %y) @width ( ) @length (sim:p %pG %pD %pS ) {/Times-Roman cf} ctmk 4 0.000 1.000 -196 -187 infolabel 0.647 0.165 0.165 scb -mark @fingers (NF=) {CR} @mult {hS} (=) {hS} (X) {CR} @length (=) {Tf} (L) {hS} +mark @fingers (NF=) {CR} @mult {hS} (=) {hS} (M) {CR} @length (=) {Tf} (L) {hS} {CR} @width (=) {Ts} (W) {/Times-Roman cf} ctmk p_jst p_rot 0.700 p_xps1 p_yps1 label 0.000 0.000 1.000 scb @@ -37,18 +38,44 @@ endgate } def -1.000 90.000 <</@model (pfet_01v8) /p_xps 32 /p_yps -32 /p_xps1 48 /p_yps1 -40 /p_rot 270 -/p_xps2 -32 >> /sky130_fd_pr::pMOS3term libinst -<</@model (pfet_01v8) /@length (0.50) /@subs (dvdd3) >> /sky130_fd_pr::pMOS3term libinst -1.000 90.000 <</@model (pfet_01v8) /p_xps 32 /p_yps -32 /p_xps1 48 /p_yps1 -40 /p_rot 270 -/p_xps2 -32 /@length (0.50) /@subs (dvdd3) >> /sky130_fd_pr::pMOS3term libinst +/sky130_fd_pr::pMOS4term { +<</p_jst 28 /@index (?) /@length (0.18) /@width (1) /@class (X) /@fingers (1) /p_rot +0 /p_xps 16 /p_yps 16 /p_xps1 16 /p_yps1 -16 /p_xps2 16 /p_yps2 48 /@model +(pfet_01v8) (lindex {pfet_01v8 pfet_01v8_lvt pfet_01v8_hvt} 0) pop /@mult +1 >> begingate +1 1.000 -44 -28 -44 28 2 polygon +1 1.000 -60 0 -64 0 2 polygon +1 1.000 0 -64 0 -28 -32 -28 -32 28 0 28 0 64 6 polygon +1 1.000 -52 0 8 0.000 360.000 xcarc +1.000 0.000 0.000 scb +(S) {/Times-Roman cf} 2 9 0.000 1.000 0 64 pinlabel +(D) {/Times-Roman cf} 2 13 0.000 1.000 0 -64 pinlabel +(G) {/Times-Roman cf} 2 7 0.000 1.000 -64 0 pinlabel +0.180 0.545 0.341 scb +mark @mult ( mult=) @mult ( m=) @fingers ( nf=) @length ( l=) @width ( w=) +@model ( %pD %pG %pS %pB sky130_fd_pr__) @index @class (spice:) +{/Times-Roman cf} ctmk 4 360.000 1.000 -196 -139 infolabel +mark ( %x %y) @width ( ) @length (sim:p %pG %pD %pS ) {/Times-Roman cf} ctmk 4 +0.000 1.000 -196 -187 infolabel +0.647 0.165 0.165 scb +mark @fingers {hS} (=) {Tf} (NF) {CR} @mult {hS} (=) {Tf} (M) {CR} @length {hS} +(=) {Tf} (L) {hS} {CR} @width {hS} (=) {Ts} {hS} (W ) {/Times-Roman cf} ctmk +p_jst p_rot 0.700 p_xps1 p_yps1 label +0.000 0.000 1.000 scb +mark @index @class {/Times-Roman cf} ctmk 16 p_rot 0.700 p_xps2 p_yps2 label +sce +mark @model {/Times-RomanISO cf} ctmk 16 p_rot 0.700 p_xps p_yps label +1 1.000 -32 0 32 0 2 polygon +1.000 0.000 0.000 scb +(B) {/Times-Roman cf} 2 4 0.000 1.000 32 0 pinlabel +endgate +} def /sky130_fd_pr::nMOS3term { <</@subs (agnd) /p_yps2 -16 /p_xps2 16 /p_yps1 8 /p_xps1 16 /p_yps 40 /p_xps 16 /p_rot 0 /@fingers (1) /@class (X) /@width (1) /@length (0.18) /@mult 1 /@model -(nfet_01v8) -(lindex {nfet_01v8 nfet_01v8_lvt nfet_01v8_hvt nfet_g5v0d10v5} 0) pop /@index -(?) /p_jst 28 >> begingate +(nfet_01v8) (lindex {nfet_01v8 nfet_01v8_lvt nfet_01v8_hvt} 0) pop /@index (?) /p_jst +28 >> begingate 1 1.000 0 -64 0 -28 -32 -28 -32 28 0 28 0 64 6 polygon 1 1.000 -44 -28 -44 28 2 polygon 1 1.000 -44 0 -64 0 2 polygon @@ -57,13 +84,13 @@ (S) {/Times-Roman cf} 2 13 0.000 1.000 0 -64 pinlabel (D) {/Times-Roman cf} 2 9 0.000 1.000 0 64 pinlabel 0.180 0.545 0.341 scb -mark @fingers ( m=) @length ( l=) @width ( w=) @model ( sky130_fd_pr__) @subs -( %pD %pG %pS ) @index @class (spice:) {/Times-Roman cf} ctmk 4 0.000 1.000 --244 -139 infolabel +mark @mult ( mult=) @fingers ( m=) @length ( l=) @width ( w=) @model +( sky130_fd_pr__) @subs ( %pD %pG %pS ) @index @class (spice:) +{/Times-Roman cf} ctmk 4 0.000 1.000 -244 -139 infolabel mark ( %x %y) @width ( ) @length (sim:n %pG %pD %pS ) {/Times-Roman cf} ctmk 4 0.000 1.000 -244 -187 infolabel 0.647 0.165 0.165 scb -mark @fingers (=) {Tf} {Tf} (X) {CR} @length (=) {Tf} (L) {hS} {CR} @width (=) +mark @fingers (=) {Tf} {Tf} (M) {CR} @length (=) {Tf} (L) {hS} {CR} @width (=) {Ts} (W) {/Times-Roman cf} ctmk p_jst p_rot 0.700 p_xps2 p_yps2 label 0.000 0.000 1.000 scb mark @index @class {/Times-Roman cf} ctmk 20 p_rot 0.700 p_xps p_yps label @@ -72,6 +99,171 @@ endgate } def +/sky130_fd_pr::nMOS4term { +<</p_jst 28 /@index (?) /@model (nfet_01v8) +(lindex {nfet_01v8 nfet_01v8_lvt nfet_01v8_hvt} 0) pop /@mult 1 /@length (0.18) /@width +(1) /@class (X) /@fingers (1) /p_rot 0 /p_xps 16 /p_yps 40 /p_xps1 16 /p_yps1 +24 /p_xps2 16 /p_yps2 -16 >> begingate +1 1.000 0 -64 0 -28 -32 -28 -32 28 0 28 0 64 6 polygon +1 1.000 -44 -28 -44 28 2 polygon +1 1.000 -44 0 -64 0 2 polygon +1.000 0.000 0.000 scb +(G) {/Times-Roman cf} 2 7 0.000 1.000 -64 0 pinlabel +(S) {/Times-Roman cf} 2 13 0.000 1.000 0 -64 pinlabel +(D) {/Times-Roman cf} 2 9 0.000 1.000 0 64 pinlabel +0.180 0.545 0.341 scb +mark @mult ( mult=) @fingers ( m=) @fingers ( nf=) @length ( l=) @width ( w=) +@model ( %pD %pG %pS %pB sky130_fd_pr__) @index @class (spice:) +{/Times-Roman cf} ctmk 4 0.000 1.000 -244 -139 infolabel +mark ( %x %y) @width ( ) @length (sim:n %pG %pD %pS ) {/Times-Roman cf} ctmk 4 +0.000 1.000 -244 -187 infolabel +0.647 0.165 0.165 scb +mark @fingers {hS} (=) {Tf} (NF) {CR} @fingers {hS} (=) {Tf} {Tf} (M) {CR} +@length {hS} (=) {Tf} (L) {hS} {CR} @width {hS} (=) {Ts} {hS} (W ) +{/Times-Roman cf} ctmk p_jst p_rot 0.700 p_xps2 p_yps2 label +0.000 0.000 1.000 scb +mark @index @class {/Times-Roman cf} ctmk 16 p_rot 0.700 p_xps p_yps label +sce +mark @model {/Times-RomanISO cf} ctmk 20 p_rot 0.700 p_xps1 p_yps1 label +1 1.000 -32 0 32 0 2 polygon +1.000 0.000 0.000 scb +(B) {/Times-Roman cf} 2 4 0.000 1.000 32 0 pinlabel +endgate +} def + +/sky130_fd_pr::hvnMOS3term { +<</p_jst 28 /@index (?) /@mult 1 /@length (0.50) /@width (1) /@class (X) /@fingers +(1) /p_rot 0 /p_xps 16 /p_yps 40 /p_xps1 16 /p_yps1 8 /p_xps2 16 /p_yps2 +-16 /@subs (agnd) >> begingate +0.800 0.800 0.800 scb +496 1.000 -44 -28 -44 28 -38 28 -38 -28 4 polygon +sce +1 1.000 0 -64 0 -28 -32 -28 -32 28 0 28 0 64 6 polygon +1 1.000 -44 0 -64 0 2 polygon +1.000 0.000 0.000 scb +(G) {/Times-Roman cf} 2 7 0.000 1.000 -64 0 pinlabel +(S) {/Times-Roman cf} 2 13 0.000 1.000 0 -64 pinlabel +(D) {/Times-Roman cf} 2 9 0.000 1.000 0 64 pinlabel +0.180 0.545 0.341 scb +mark @mult ( mult=) @fingers ( m=) @length ( l=) @width +( sky130_fd_pr__nfet_g5v0d10v5 w=) @subs ( %pD %pG %pS ) @index @class (spice:) +{/Times-Roman cf} ctmk 4 0.000 1.000 -244 -139 infolabel +mark ( %x %y) @width ( ) @length (sim:n %pG %pD %pS ) {/Times-Roman cf} ctmk 4 +0.000 1.000 -244 -187 infolabel +0.647 0.165 0.165 scb +mark @fingers (=) {Tf} {Tf} (M) {CR} @length (=) {Tf} (L) {hS} {CR} @width (=) +{Ts} (W) {/Times-Roman cf} ctmk p_jst p_rot 0.700 p_xps2 p_yps2 label +0.000 0.000 1.000 scb +mark @index @class {/Times-Roman cf} ctmk 20 p_rot 0.700 p_xps p_yps label +sce +(nfet_g5v0d10v5) {/Times-RomanISO cf} 2 20 p_rot 0.700 p_xps1 p_yps1 label +0 1.000 -44 -28 -44 28 -38 28 -38 -28 4 polygon +endgate +} def + +/sky130_fd_pr::hvnMOS4term { +<</p_yps2 -16 /p_xps2 16 /p_yps1 24 /p_xps1 16 /p_yps 40 /p_xps 16 /p_rot 0 /@fingers +(1) /@class (X) /@width (1) /@length (0.50) /@mult 1 /@index (?) /p_jst +28 >> begingate +0.800 0.800 0.800 scb +496 1.000 -44 -28 -44 28 -38 28 -38 -28 4 polygon +sce +1 1.000 0 -64 0 -28 -32 -28 -32 28 0 28 0 64 6 polygon +1 1.000 -44 0 -64 0 2 polygon +1.000 0.000 0.000 scb +(G) {/Times-Roman cf} 2 7 0.000 1.000 -64 0 pinlabel +(S) {/Times-Roman cf} 2 13 0.000 1.000 0 -64 pinlabel +(D) {/Times-Roman cf} 2 9 0.000 1.000 0 64 pinlabel +0.180 0.545 0.341 scb +mark @mult ( mult=) @fingers ( m=) @fingers ( nf=) @length ( l=) @width +( %pD %pG %pS %pB sky130_fd_pr__nfet_g5v0d10v5 w=) @index @class (spice:) +{/Times-Roman cf} ctmk 4 0.000 1.000 -244 -139 infolabel +mark ( %x %y) @width ( ) @length (sim:n %pG %pD %pS ) {/Times-Roman cf} ctmk 4 +0.000 1.000 -244 -187 infolabel +0.647 0.165 0.165 scb +mark @fingers {hS} (=) {Tf} (NF) {CR} @fingers {hS} (=) {Tf} {Tf} (M) {CR} +@length {hS} (=) {Tf} (L) {hS} {CR} @width {hS} (=) {Ts} {hS} (W ) +{/Times-Roman cf} ctmk p_jst p_rot 0.700 p_xps2 p_yps2 label +0.000 0.000 1.000 scb +mark @index @class {/Times-Roman cf} ctmk 16 p_rot 0.700 p_xps p_yps label +sce +1 1.000 -32 0 32 0 2 polygon +1.000 0.000 0.000 scb +(B) {/Times-Roman cf} 2 4 0.000 1.000 32 0 pinlabel +sce +0 1.000 -44 -28 -44 28 -38 28 -38 -28 4 polygon +(nfet_g5v0d10v5) {/Times-RomanISO cf} 2 20 p_rot 0.700 p_xps1 p_yps1 label +endgate +} def + +/sky130_fd_pr::hvpMOS3term { +<</p_jst 28 /@index (?) /@length (0.50) /@width (1) /@class (X) /@fingers (1) /p_rot +0 /p_xps 16 /p_yps 16 /p_xps1 16 /p_yps1 0 /p_xps2 16 /p_yps2 48 /@subs +(avdd) /@mult 1 >> begingate +0.800 0.800 0.800 scb +496 1.000 -44 -28 -44 28 -38 28 -38 -28 4 polygon +sce +1 1.000 -60 0 -64 0 2 polygon +1 1.000 0 -64 0 -28 -32 -28 -32 28 0 28 0 64 6 polygon +1 1.000 -52 0 8 0.000 360.000 xcarc +1.000 0.000 0.000 scb +(S) {/Times-Roman cf} 2 9 0.000 1.000 0 64 pinlabel +(D) {/Times-Roman cf} 2 13 0.000 1.000 0 -64 pinlabel +(G) {/Times-Roman cf} 2 7 0.000 1.000 -64 0 pinlabel +0.180 0.545 0.341 scb +mark @mult ( mult=) @mult ( m=) @fingers ( nf=) @length ( l=) @width +( sky130_fd_pr__pfet_g5v0d10v5 w=) @subs ( %pD %pG %pS ) @index @class (spice:) +{/Times-Roman cf} ctmk 4 360.000 1.000 -196 -139 infolabel +mark ( %x %y) @width ( ) @length (sim:p %pG %pD %pS ) {/Times-Roman cf} ctmk 4 +0.000 1.000 -196 -187 infolabel +0.647 0.165 0.165 scb +mark @fingers (NF=) {CR} @mult {hS} (=) {hS} (M) {CR} @length (=) {Tf} (L) {hS} +{CR} @width (=) {Ts} (W) {/Times-Roman cf} ctmk p_jst p_rot 0.700 p_xps1 p_yps1 +label +0.000 0.000 1.000 scb +mark @index @class {/Times-Roman cf} ctmk 16 p_rot 0.700 p_xps2 p_yps2 label +sce +(pfet_g5v0d10v5) {/Times-RomanISO cf} 2 16 p_rot 0.700 p_xps p_yps label +0 1.000 -44 -28 -44 28 -38 28 -38 -28 4 polygon +endgate +} def + +/sky130_fd_pr::hvpMOS4term { +<</@mult 1 /p_yps2 48 /p_xps2 16 /p_yps1 -16 /p_xps1 16 /p_yps 16 /p_xps 16 /p_rot +0 /@fingers (1) /@class (X) /@width (1) /@length (0.50) /@index (?) /p_jst +28 >> begingate +0.800 0.800 0.800 scb +496 1.000 -44 -28 -44 28 -38 28 -38 -28 4 polygon +sce +1 1.000 -60 0 -64 0 2 polygon +1 1.000 0 -64 0 -28 -32 -28 -32 28 0 28 0 64 6 polygon +1 1.000 -52 0 8 0.000 360.000 xcarc +1.000 0.000 0.000 scb +(S) {/Times-Roman cf} 2 9 0.000 1.000 0 64 pinlabel +(D) {/Times-Roman cf} 2 13 0.000 1.000 0 -64 pinlabel +(G) {/Times-Roman cf} 2 7 0.000 1.000 -64 0 pinlabel +0.180 0.545 0.341 scb +mark @mult ( mult=) @mult ( m=) @fingers ( nf=) @length ( l=) @width +( %pD %pG %pS %pB sky130_fd_pr__pfet_g5v0d10v5 w=) @index @class (spice:) +{/Times-Roman cf} ctmk 4 360.000 1.000 -196 -139 infolabel +mark ( %x %y) @width ( ) @length (sim:p %pG %pD %pS ) {/Times-Roman cf} ctmk 4 +0.000 1.000 -196 -187 infolabel +0.647 0.165 0.165 scb +mark @fingers {hS} (=) {Tf} (NF) {CR} @mult {hS} (=) {Tf} (M) {CR} @length {hS} +(=) {Tf} (L) {hS} {CR} @width {hS} (=) {Ts} {hS} (W ) {/Times-Roman cf} ctmk +p_jst p_rot 0.700 p_xps1 p_yps1 label +0.000 0.000 1.000 scb +mark @index @class {/Times-Roman cf} ctmk 16 p_rot 0.700 p_xps2 p_yps2 label +sce +(pfet_g5v0d10v5) {/Times-RomanISO cf} 2 16 p_rot 0.700 p_xps p_yps label +1 1.000 -32 0 32 0 2 polygon +1.000 0.000 0.000 scb +(B) {/Times-Roman cf} 2 4 0.000 1.000 32 0 pinlabel +sce +0 1.000 -44 -28 -44 28 -38 28 -38 -28 4 polygon +endgate +} def + /generic::arrowhead { % nonetwork begingate @@ -85,11 +277,10 @@ } def /sky130_fd_pr::NPNModel { -<</@subs (agnd) /p_yps2 56 /p_xps2 16 /p_yps1 0 /p_xps1 16 /p_yps 24 /p_xps 16 /p_rot -0 /@length (10.16) /@width (0.2) /@m (1) /@model -(rf_npn_05v5_W1p00L1p00) -(lindex {rf_npn_05v5_W1p00L1p00 rf_npn_05v5_W1p00L2p00} 0) pop /@index (?) /@class -(X) >> begingate +<</@mult 1 /@subs (agnd) /p_yps2 56 /p_xps2 16 /p_yps1 0 /p_xps1 16 /p_yps 24 /p_xps +16 /p_rot 0 /@model (rf_npn_05v5_W1p00L1p00) +(lindex {rf_npn_05v5_W1p00L1p00 rf_npn_05v5_W1p00L2p00 rf_npn_11v0_W1p00L1p00} 0) pop /@index +(?) /@class (X) >> begingate 1 1.000 -48 0 -64 0 2 polygon 1 1.000 -48 48 -48 -48 2 polygon 1 1.000 0 48 -48 22 2 polygon @@ -102,43 +293,67 @@ (B) {/Times-Roman cf} 2 7 0.000 1.000 -64 0 pinlabel (E) {/Times-Roman cf} 2 13 0.000 1.000 0 -64 pinlabel 0.180 0.545 0.341 scb -mark @m ( M=) @length ( L=) @width ( W=) @model ( sky130_fd_pr__) @subs -( %pC %pB %pE ) @index @class (spice:) {/Times-Roman cf} ctmk 4 0.000 1.000 --244 -139 infolabel +mark @mult ( mult=) @mult ( m=) @model ( sky130_fd_pr__) @subs ( %pC %pB %pE ) +@index @class (spice:) {/Times-Roman cf} ctmk 4 0.000 1.000 -244 -139 infolabel (sim:b %pB %pE %pC) {/Times-Roman cf} 2 4 0.000 1.000 -244 -187 infolabel 0.000 0.000 1.000 scb mark @index @class {/Times-Roman cf} ctmk 16 p_rot 0.700 p_xps2 p_yps2 label sce mark @model {/Times-RomanISO cf} ctmk 16 p_rot 0.700 p_xps p_yps label 0.647 0.165 0.165 scb -mark @m {Tf} (=) {Tf} (X) {CR} @length {Tf} (=) {Tf} (L) {CR} @width {Ts} {hS} -(=) {Ts} {hS} (W) {/Times-Roman cf} ctmk 28 p_rot 0.700 p_xps1 p_yps1 label +mark @mult {Tf} (=) {Tf} (M) {/Times-Roman cf} ctmk 28 p_rot 0.700 p_xps1 +p_yps1 label endgate } def -1.000 90.000 <</@model (rf_npn_05v5_W1p00L1p00) /p_yps -40 /p_xps2 -32 /p_xps 32 /p_xps1 48 -/p_yps1 -32 /p_rot 270 >> /sky130_fd_pr::NPNModel libinst +/sky130_fd_pr::PNPModel { +<</@mult 1 /@class (X) /@index (?) /@model (rf_pnp_05v5_W0p68L0p68) +(lindex {rf_pnp_05v5_W0p68L0p68 rf_pnp_05v5_W3p40L3p40} 0) pop /p_rot 0 /p_xps +16 /p_yps 24 /p_xps1 16 /p_yps1 0 /p_xps2 16 /p_yps2 56 /@subs (agnd) >> begingate +1 1.000 -48 0 -64 0 2 polygon +1 1.000 -48 48 -48 -48 2 polygon +1 1.000 0 48 -48 22 2 polygon +1 1.000 0 48 0 64 2 polygon +1 1.000 0 -48 -48 -22 2 polygon +1 1.000 0 -48 0 -64 2 polygon +1.000 241.557 -48 22 generic::arrowhead +1.000 0.000 0.000 scb +(C) {/Times-Roman cf} 2 13 0.000 1.000 0 -64 pinlabel +(B) {/Times-Roman cf} 2 7 0.000 1.000 -64 0 pinlabel +(E) {/Times-Roman cf} 2 1 0.000 1.000 0 64 pinlabel +0.180 0.545 0.341 scb +mark @mult ( mult=) @mult ( m=) @model ( sky130_fd_pr__) @subs ( %pC %pB %pE ) +@index @class (spice:) {/Times-Roman cf} ctmk 4 0.000 1.000 -244 -139 infolabel +(sim:b %pB %pE %pC) {/Times-Roman cf} 2 4 0.000 1.000 -244 -187 infolabel +0.000 0.000 1.000 scb +mark @index @class {/Times-Roman cf} ctmk 16 p_rot 0.700 p_xps2 p_yps2 label +sce +mark @model {/Times-RomanISO cf} ctmk 16 p_rot 0.700 p_xps p_yps label +0.647 0.165 0.165 scb +mark @mult {Tf} (=) {Tf} (M) {/Times-Roman cf} ctmk 28 p_rot 0.700 p_xps1 +p_yps1 label +endgate +} def /sky130_fd_pr::HighResModel { -<</@substype (sub) (lindex {sub well} 0) pop /@subs (avdd) /@width (1) /@length -(1) /p_yps2 -48 /p_xps2 32 /@model (res_high_po_0p35) +<</@subs (avdd) /@length (1) /p_yps2 16 /p_xps2 32 /@model (res_high_po_0p35) (lindex {res_high_po_0p35 res_high_po_0p69 res_high_po_1p41 res_high_po_2p85 res_high_po_5p73} 0) pop /p_yps1 -0 /p_xps1 32 /p_yps 32 /p_xps 32 /p_rot 0 /@class (X) /@value (1.0) /@units -(k) /@index (?) /p_jst 20 >> begingate +-32 /p_xps1 32 /p_yps 48 /p_xps 32 /p_rot 0 /@class (X) /@value (5.714) +(get_xres_value @length @model) pop /@index (?) /p_jst 20 >> begingate 1 1.000 0 64 0 36 2 polygon 1 1.000 0 -64 0 -36 2 polygon 1 1.000 0 -36 14 -30 -14 -18 14 -6 -14 6 14 18 -14 30 0 36 8 polygon 1.000 0.000 0.000 scb -(1) {/Times-Roman cf} 2 9 0.000 1.000 0 64 pinlabel -(2) {/Times-Roman cf} 2 13 0.000 1.000 0 -64 pinlabel +(r1) {/Times-Roman cf} 2 9 0.000 1.000 0 64 pinlabel +(r0) {/Times-Roman cf} 2 13 0.000 1.000 0 -64 pinlabel 0.180 0.545 0.341 scb -mark @subs (=) @substype ( ) @width ( W=) @length ( L=) @units @value ( R=) -@model ( %p1 %p2 sky130_fd_pr__) @index @class (spice:) {/Times-Roman cf} ctmk -4 0.000 1.000 -208 -160 infolabel -(sim:r %p1 %p2) {/Times-Roman cf} 2 4 0.000 1.000 -208 -208 infolabel +mark @length (k l=) @value ( r=) @model ( sky130_fd_pr__) @subs ( %pr0 %pr1 ) +@index @class (spice:) {/Times-Roman cf} ctmk 4 0.000 1.000 -208 -160 infolabel +(sim:r %pr0 %pr1) {/Times-Roman cf} 2 4 0.000 1.000 -208 -208 infolabel 0.647 0.165 0.165 scb -mark (W) {/Symbol cf} @units {hS} @value {/Times-Roman cf} ctmk p_jst p_rot -0.700 p_xps1 p_yps1 label +mark (\265m) {/Times-RomanISO cf} @length (= ) {Tf} (L) {CR} {/Times-Roman cf} +(W) {/Symbol cf} (k) {hS} @value {hS} (=) {Ts} (R ) {/Times-Roman cf} ctmk +p_jst p_rot 0.700 p_xps1 p_yps1 label 0.000 0.000 1.000 scb mark @index @class {/Times-Roman cf} ctmk 20 p_rot 0.700 p_xps p_yps label sce @@ -147,37 +362,272 @@ } def /sky130_fd_pr::MiMCap { -<</@substype (sub) (lindex {sub well} 0) pop /@subs (agnd) /@fingers (1) /@length -(1) /@width (1) /p_yps2 -8 /p_xps2 48 /p_yps1 24 /p_xps1 48 /p_yps 56 /p_xps -48 /p_rot 0 /@class (X) /@value (1.0) /@units (p) /@index (?) /p_jst 20 >> -begingate +<</@mult 1 /@model (m3_1) (lindex {m3_1 m3_2} 0) pop /@length (1) /@width (1) /p_yps2 +-24 /p_xps2 48 /p_yps1 8 /p_xps1 48 /p_yps 72 /p_xps 48 /p_rot 0 /@class +(X) /@value (1) (get_mim_value @length @width @mult) pop /@index (?) /p_jst +20 >> begingate 1 1.000 0 -64 0 -6 2 polygon 1 1.000 0 64 0 6 2 polygon 1 1.000 -32 6 32 6 2 polygon 1.000 0.000 0.000 scb -(1) {/Times-Roman cf} 2 9 0.000 1.000 0 64 pinlabel -(2) {/Times-Roman cf} 2 13 0.000 1.000 0 -64 pinlabel +(c1) {/Times-Roman cf} 2 9 0.000 1.000 0 64 pinlabel +(c0) {/Times-Roman cf} 2 13 0.000 1.000 0 -64 pinlabel 0.180 0.545 0.341 scb -mark @subs (=) @substype ( ) @fingers ( M=) @width ( W=) @length ( L=) @units -@value ( %p1 %p2 MIM C=) @index (spice:C) {/Times-Roman cf} ctmk 4 0.000 1.000 --208 -160 infolabel -(sim:c %p1 %p2) {/Times-Roman cf} 2 4 0.000 1.000 -208 -208 infolabel +mark @mult ( mult=) @mult ( m=) @width ( w=) @length (f l=) @value ( c=) @model +( %pc0 %pc1 sky130_fd_pr__cap_mim_) @index @class (spice:) {/Times-Roman cf} +ctmk 4 0.000 1.000 -208 -160 infolabel +(sim:c %pc0 %pc1) {/Times-Roman cf} 2 4 0.000 1.000 -208 -208 infolabel 0.647 0.165 0.165 scb -mark (F) @units {hS} @value {/Times-Roman cf} ctmk p_jst p_rot 0.700 p_xps1 -p_yps1 label +mark (fF) {hS} @value {hS} (=) {Ts} {hS} ( ) {Tf} (C) {/Times-Roman cf} ctmk +p_jst p_rot 0.700 p_xps1 p_yps1 label 0.000 0.000 1.000 scb mark @index @class {/Times-Roman cf} ctmk 20 p_rot 0.700 p_xps p_yps label 0.647 0.165 0.165 scb -mark @fingers {Tf} (=) {Tf} (X) {CR} @length {Tf} (=) {Tf} (L) {CR} @width {Ts} -{hS} (=) {Ts} {hS} (W) {/Times-RomanISO cf} ctmk 28 p_rot 0.700 p_xps2 p_yps2 -label +mark @mult {Tf} (=) {Tf} (M) {CR} (\265m) {/Times-RomanISO cf} @length {Tf} (=) +{Tf} (L) {CR} (\265m) {/Times-RomanISO cf} @width {Ts} {hS} (=) {Ts} {hS} (W) +{/Times-RomanISO cf} ctmk 28 p_rot 0.700 p_xps2 p_yps2 label sce 1 1.000 0 -80 74 66.000 114.000 xcarc +mark @model {/Times-Roman cf} ctmk 16 p_rot 0.700 32 32 label endgate } def -1.000 90.000 <</@substype (sub) /p_xps -48 /p_yps 24 /p_yps1 -24 /p_xps2 80 /p_yps2 -24 -/p_rot 270 >> /sky130_fd_pr::MiMCap libinst +/sky130_fd_pr::VPPCap2term { +<</@sub (gnd) /p_jst 20 /@index (?) /@value (4.627) +(get_vpp_noshield_val @model @mult) pop /@class (X) /p_rot 0 /p_xps 48 /p_yps +48 /p_xps1 48 /p_yps1 -16 /p_xps2 48 /p_yps2 -40 /@model +(02p4x04p6_m1m2_noshield) +(lindex { 02p4x04p6_m1m2_noshield 02p7x06p1_m1m2m3m4_shieldl1_fingercap 02p7x11p1_m1m2m3m4_shieldl1_fingercap 02p7x21p1_m1m2m3m4_shieldl1_fingercap 02p7x41p1_m1m2m3m4_shieldl1_fingercap 02p9x06p1_m1m2m3m4_shieldl1_fingercap2 04p4x04p6_l1m1m2_noshield 04p4x04p6_m1m2_noshield 04p4x04p6_m1m2_noshield_o2 04p4x04p6_m1m2_shieldl1 04p4x04p6_m1m2m3_shieldl1 08p6x07p8_l1m1m2_noshield 08p6x07p8_m1m2_noshield 08p6x07p8_m1m2_shieldl1 08p6x07p8_m1m2m3_shieldl1 11p3x11p3_m1m2m3m4_shieldl1_wafflecap 11p5x11p7_l1m1m2_noshield 11p5x11p7_m1m2_noshield 11p5x11p7_m1m2_shieldl1 11p5x11p7_m1m2m3_shieldl1 11p5x11p7_m1m4_noshield 44p7x23p1_pol1m1m2m3m4m5_noshield} 0) pop /@mult +1 >> begingate +1 1.000 0 -64 0 -6 2 polygon +1 1.000 0 64 0 6 2 polygon +1 1.000 -32 6 32 6 2 polygon +1.000 0.000 0.000 scb +(c1) {/Times-Roman cf} 2 9 0.000 1.000 0 64 pinlabel +(c0) {/Times-Roman cf} 2 13 0.000 1.000 0 -64 pinlabel +0.180 0.545 0.341 scb +mark @mult ( mult=) @mult (f m=) @value ( c=) @model ( sky130_fd_pr__cap_vpp_) +@sub ( %pc0 %pc1 ) @index @class (spice:) {/Times-Roman cf} ctmk 4 0.000 1.000 +-208 -160 infolabel +(sim:c %pc0 %pc1) {/Times-Roman cf} 2 4 0.000 1.000 -208 -208 infolabel +0.647 0.165 0.165 scb +mark (fF) {hS} @value {hS} (=) {Ts} {hS} ( ) {Tf} (C) {/Times-Roman cf} ctmk +p_jst p_rot 0.700 p_xps1 p_yps1 label +0.000 0.000 1.000 scb +mark @index @class {/Times-Roman cf} ctmk 20 p_rot 0.700 p_xps p_yps label +0.647 0.165 0.165 scb +mark @mult {Tf} (=) {Tf} (M) {/Times-RomanISO cf} ctmk 28 p_rot 0.700 p_xps2 +p_yps2 label +sce +1 1.000 0 -80 74 66.000 114.000 xcarc +mark @model {/Times-Roman cf} ctmk 20 0.000 0.700 48 16 label +endgate +} def + +/sky130_fd_pr::VPPCap3term { +<</@mult 1 /@model (02p4x04p6_m1m2_noshield) +(lindex {02p4x04p6_m1m2_noshield 02p7x06p1_m1m2m3m4_shieldl1_fingercap 02p7x11p1_m1m2m3m4_shieldl1_fingercap 02p7x21p1_m1m2m3m4_shieldl1_fingercap 02p7x41p1_m1m2m3m4_shieldl1_fingercap 02p9x06p1_m1m2m3m4_shieldl1_fingercap2 04p4x04p6_l1m1m2_noshield 04p4x04p6_m1m2_noshield 04p4x04p6_m1m2_noshield_o2 04p4x04p6_m1m2_shieldl1 04p4x04p6_m1m2m3_shieldl1 08p6x07p8_l1m1m2_noshield 08p6x07p8_m1m2_noshield 08p6x07p8_m1m2_shieldl1 08p6x07p8_m1m2m3_shieldl1 11p3x11p3_m1m2m3m4_shieldl1_wafflecap 11p5x11p7_l1m1m2_noshield 11p5x11p7_m1m2_noshield 11p5x11p7_m1m2_shieldl1 11p5x11p7_m1m2m3_shieldl1 11p5x11p7_m1m4_noshield 44p7x23p1_pol1m1m2m3m4m5_noshield} 0) pop /p_yps2 +-40 /p_xps2 48 /p_yps1 -16 /p_xps1 48 /p_yps 48 /p_xps 48 /p_rot 0 /@class +(X) /@value (4.627) (get_vpp_noshield_value @model @mult) pop /@index +(?) /p_jst 20 >> begingate +1 1.000 0 -64 0 -6 2 polygon +1 1.000 0 64 0 6 2 polygon +1 1.000 -32 6 32 6 2 polygon +1.000 0.000 0.000 scb +(c1) {/Times-Roman cf} 2 9 0.000 1.000 0 64 pinlabel +(c0) {/Times-Roman cf} 2 13 0.000 1.000 0 -64 pinlabel +0.180 0.545 0.341 scb +mark @mult ( mult=) @mult (f m=) @value ( c=) @model +( %pc0 %pc1 %pb sky130_fd_pr__cap_vpp_) @index @class (spice:) +{/Times-Roman cf} ctmk 4 360.000 1.000 -208 -160 infolabel +(sim:c %pc0 %pc1) {/Times-Roman cf} 2 4 0.000 1.000 -208 -208 infolabel +0.647 0.165 0.165 scb +mark (fF) {hS} @value {hS} (=) {Ts} {hS} ( ) {Tf} (C) {/Times-Roman cf} ctmk +p_jst p_rot 0.700 p_xps1 p_yps1 label +0.000 0.000 1.000 scb +mark @index @class {/Times-Roman cf} ctmk 20 p_rot 0.700 p_xps p_yps label +0.647 0.165 0.165 scb +mark @mult {Tf} (=) {Tf} (M) {/Times-RomanISO cf} ctmk 20 p_rot 0.700 p_xps2 +p_yps2 label +sce +1 1.000 0 -80 74 66.000 114.000 xcarc +497 1.000 -32 -48 4 0.000 360.000 xcarc +1.000 0.000 0.000 scb +(b) {/Times-Roman cf} 2 7 0.000 1.000 -32 -48 pinlabel +sce +mark @model {/Times-Roman cf} ctmk 20 0.000 0.700 48 16 label +endgate +} def + +/sky130_fd_pr::VPPShieldCap { +<</p_jst 20 /@index (?) /@value (11.443) +(get_vpp_shield_value @model @mult) pop /@class (X) /p_rot 0 /p_xps 48 /p_yps +40 /p_xps1 50 /p_yps1 -24 /p_xps2 48 /p_yps2 -40 /@model +(04p4x04p6_m1m2m3_shieldl1m5_floatm4) +(lindex {04p4x04p6_m1m2m3_shieldl1m5_floatm4 04p4x04p6_m1m2m3_shieldl1m5_floatm4_top 05p9x05p9_m1m2m3m4_shieldl1_wafflecap 06p8x06p1_l1m1m2m3_shieldpom4 06p8x06p1_l1m1m2m3_shieldpom4_top 06p8x06p1_m1m2m3_shieldl1m4 06p8x06p1_m1m2m3_shieldl1m4_top 08p6x07p8_m1m2m3_shieldl1m5_floatm4 08p6x07p8_m1m2m3_shieldl1m5_floatm4_top 11p3x11p8_l1m1m2m3m4_shieldm5_nhvtop 11p5x11p7_l1m1m2m3_shieldm4 11p5x11p7_l1m1m2m3_shieldm4_top 11p5x11p7_l1m1m2m3_shieldpom4 11p5x11p7_l1m1m2m3_shieldpom4_top 11p5x11p7_l1m1m2m3m4_shieldm5 11p5x11p7_l1m1m2m3m4_shieldm5_top 11p5x11p7_l1m1m2m3m4_shieldpom5 11p5x11p7_l1m1m2m3m4_shieldpom5_top 11p5x11p7_l1m1m2m3m4_shieldpom5_x 11p5x11p7_l1m1m2m3m4_shieldpom5_x6 11p5x11p7_l1m1m2m3m4_shieldpom5_x7 11p5x11p7_l1m1m2m3m4_shieldpom5_x8 11p5x11p7_l1m1m2m3m4_shieldpom5_x9 11p5x11p7_l1m1m2m3m4_shieldpom5_xtop 11p5x11p7_m1m2m3_shieldl1m5_floatm4 11p5x11p7_m1m2m3_shieldl1m5_floatm4_top 11p5x11p7_m1m2m3m4_shieldl1m5 11p5x11p7_m1m2m3m4_shieldl1m5_top 11p5x11p7_m1m2m3m4_shieldm5} 0) pop /@mult +1 >> begingate +1 1.000 0 -64 0 -6 2 polygon +1 1.000 0 64 0 6 2 polygon +1 1.000 -32 6 32 6 2 polygon +1.000 0.000 0.000 scb +(c1) {/Times-Roman cf} 2 9 0.000 1.000 0 64 pinlabel +(c0) {/Times-Roman cf} 2 13 0.000 1.000 0 -64 pinlabel +0.180 0.545 0.341 scb +mark @mult ( mult=) @mult (f m=) @value ( c=) @model +( %pc0 %pc1 %pmet5 %pb sky130_fd_pr__cap_vpp_) @index @class (spice:) +{/Times-Roman cf} ctmk 4 0.000 1.000 -208 -160 infolabel +(sim:c %pc0 %pc1) {/Times-Roman cf} 2 4 0.000 1.000 -208 -208 infolabel +0.647 0.165 0.165 scb +mark (fF) {hS} @value {hS} (=) {Ts} {hS} ( ) {Tf} (C) {/Times-Roman cf} ctmk +p_jst p_rot 0.700 p_xps1 p_yps1 label +0.000 0.000 1.000 scb +mark @index @class {/Times-Roman cf} ctmk 20 p_rot 0.700 p_xps p_yps label +0.647 0.165 0.165 scb +mark @mult {Tf} (=) {Tf} (M) {/Times-RomanISO cf} ctmk 28 p_rot 0.700 p_xps2 +p_yps2 label +sce +1 1.000 0 -80 74 66.000 114.000 xcarc +497 1.000 -32 -48 4 0.000 360.000 xcarc +1.000 0.000 0.000 scb +(b) {/Times-Roman cf} 2 7 0.000 1.000 -32 -48 pinlabel +sce +mark @model {/Times-Roman cf} ctmk 20 0.000 0.700 48 8 label +497 1.000 -32 32 4 0.000 360.000 xcarc +1.000 0.000 0.000 scb +(met5) {/Times-Roman cf} 2 7 0.000 1.000 -32 32 pinlabel +endgate +} def + +/sky130_fd_pr::nDiode { +<</p_jst 28 /@index (?) /@model (pw2nd_05v5) +(lindex {pw2nd_05v5 pw2nd_05v5_lvt pw2nd_05v5_nvt} 0) pop /@mult 1 /@class (D) /p_rot +0 /p_xps 48 /p_yps 24 /p_xps1 48 /p_yps1 -8 /p_xps2 48 /p_yps2 -32 >> begingate +1.000 0.000 0.000 scb +(N) {/Times-Roman cf} 2 13 0.000 1.000 0 -64 pinlabel +(P) {/Times-Roman cf} 2 9 0.000 1.000 0 64 pinlabel +0.180 0.545 0.341 scb +mark @mult ( mult=) @mult ( m=) @model ( %pP %pN sky130_fd_pr__diode_) @index +@class (spice:) {/Times-Roman cf} ctmk 4 0.000 1.000 -244 -139 infolabel +(sim:d %pP %pN %x %y) {/Times-Roman cf} 2 4 0.000 1.000 -244 -187 infolabel +0.647 0.165 0.165 scb +(=1) {Tf} {Tf} (M) {/Times-Roman cf} 5 p_jst p_rot 0.700 p_xps2 p_yps2 label +0.000 0.000 1.000 scb +mark @index @class {/Times-Roman cf} ctmk 20 p_rot 0.700 p_xps p_yps label +sce +mark @model {/Times-RomanISO cf} ctmk 20 p_rot 0.700 p_xps1 p_yps1 label +497 1.000 0 -24 -32 24 32 24 0 -24 4 polygon +1 1.000 -32 -24 32 -24 2 polygon +1 1.000 0 24 0 64 2 polygon +1 1.000 0 -24 0 -64 2 polygon +endgate +} def + +/sky130_fd_pr::pDiode { +<</p_yps2 -32 /p_xps2 48 /p_yps1 -8 /p_xps1 48 /p_yps 24 /p_xps 48 /p_rot 0 /@class +(D) /@mult 1 /@model (pd2nw_05v5) +(lindex {pd2nw_05v5 pd2nw_05v5_hvt pd2nw_05v5_lvt} 0) pop /@index (?) /p_jst 28 >> +begingate +1.000 0.000 0.000 scb +(N) {/Times-Roman cf} 2 13 0.000 1.000 0 -64 pinlabel +(P) {/Times-Roman cf} 2 9 0.000 1.000 0 64 pinlabel +0.180 0.545 0.341 scb +mark @mult ( mult=) @mult ( m=) @model ( %pP %pN sky130_fd_pr__diode_) @index +@class (spice:) {/Times-Roman cf} ctmk 4 0.000 1.000 -244 -139 infolabel +(sim:d %pP %pN %x %y) {/Times-Roman cf} 2 4 0.000 1.000 -244 -187 infolabel +0.647 0.165 0.165 scb +(=1) {Tf} {Tf} (M) {/Times-Roman cf} 5 p_jst p_rot 0.700 p_xps2 p_yps2 label +0.000 0.000 1.000 scb +mark @index @class {/Times-Roman cf} ctmk 20 p_rot 0.700 p_xps p_yps label +sce +mark @model {/Times-RomanISO cf} ctmk 20 p_rot 0.700 p_xps1 p_yps1 label +1 1.000 -32 -24 32 -24 2 polygon +1 1.000 0 24 0 64 2 polygon +1 1.000 0 -24 0 -64 2 polygon +0 -24 beginpath +32 24 1 polyc +0 24 1 polyc +4 24 8 20 8 16 curveto +8 12 4 8 0 8 curveto +-4 8 -8 +12 -8 16 curveto +-8 20 -4 24 0 24 curveto +-32 24 1 polyc +0 -24 1 polyc +497 1.000 endpath +endgate +} def + +/sky130_fd_pr::hvnDiode { +<</p_yps2 -32 /p_xps2 48 /p_yps1 -8 /p_xps1 48 /p_yps 24 /p_xps 48 /p_rot 0 /@class +(D) /@mult 1 /@model (pw2nd_11v0) +(lindex {pw2nd_11v0 pw2nd_11v0_no_rs} 0) pop /@index (?) /p_jst 28 >> begingate +1.000 0.000 0.000 scb +(N) {/Times-Roman cf} 2 13 0.000 1.000 0 -64 pinlabel +(P) {/Times-Roman cf} 2 9 0.000 1.000 0 64 pinlabel +0.180 0.545 0.341 scb +mark @mult ( mult=) @mult ( m=) @model ( %pP %pN sky130_fd_pr__diode_) @index +@class (spice:) {/Times-Roman cf} ctmk 4 0.000 1.000 -244 -139 infolabel +(sim:d %pP %pN %x %y) {/Times-Roman cf} 2 4 0.000 1.000 -244 -187 infolabel +0.647 0.165 0.165 scb +(=1) {Tf} {Tf} (M) {/Times-Roman cf} 5 p_jst p_rot 0.700 p_xps2 p_yps2 label +0.000 0.000 1.000 scb +mark @index @class {/Times-Roman cf} ctmk 20 p_rot 0.700 p_xps p_yps label +sce +mark @model {/Times-RomanISO cf} ctmk 20 p_rot 0.700 p_xps1 p_yps1 label +497 1.000 0 -24 -32 24 32 24 0 -24 4 polygon +1 1.000 0 24 0 64 2 polygon +1 1.000 0 -32 0 -64 2 polygon +0.800 0.800 0.800 scb +496 1.000 -32 -32 -32 -24 32 -24 32 -32 4 polygon +sce +0 1.000 -32 -32 -32 -24 32 -24 32 -32 4 polygon +endgate +} def + +/sky130_fd_pr::hvpDiode { +<</p_jst 28 /@index (?) /@model (pd2nw_11v0) +(lindex {pd2nw_11v0 pd2nw_11v0_no_rs} 0) pop /@mult 1 /@class (D) /p_rot 0 /p_xps +48 /p_yps 24 /p_xps1 48 /p_yps1 -8 /p_xps2 48 /p_yps2 -32 >> begingate +0.800 0.800 0.800 scb +496 1.000 -32 -32 -32 -24 32 -24 32 -32 4 polygon +1.000 0.000 0.000 scb +(N) {/Times-Roman cf} 2 13 0.000 1.000 0 -64 pinlabel +(P) {/Times-Roman cf} 2 9 0.000 1.000 0 64 pinlabel +0.180 0.545 0.341 scb +mark @mult ( mult=) @mult ( m=) @model ( %pP %pN sky130_fd_pr__diode_) @index +@class (spice:) {/Times-Roman cf} ctmk 4 0.000 1.000 -244 -139 infolabel +(sim:d %pP %pN %x %y) {/Times-Roman cf} 2 4 0.000 1.000 -244 -187 infolabel +0.647 0.165 0.165 scb +(=1) {Tf} {Tf} (M) {/Times-Roman cf} 5 p_jst p_rot 0.700 p_xps2 p_yps2 label +0.000 0.000 1.000 scb +mark @index @class {/Times-Roman cf} ctmk 20 p_rot 0.700 p_xps p_yps label +sce +mark @model {/Times-RomanISO cf} ctmk 20 p_rot 0.700 p_xps1 p_yps1 label +1 1.000 0 24 0 64 2 polygon +1 1.000 0 -32 0 -64 2 polygon +0 -24 beginpath +32 24 1 polyc +0 24 1 polyc +4 24 8 20 8 16 curveto +8 12 4 8 0 8 curveto +-4 8 -8 +12 -8 16 curveto +-8 20 -4 24 0 24 curveto +-32 24 1 polyc +0 -24 1 polyc +497 1.000 endpath +0 1.000 -32 -32 -32 -24 32 -24 32 -32 4 polygon +endgate +} def + +1.000 90.000 <</@value (1) /@model (m3_1) /p_xps -48 /p_yps 24 /p_yps1 -24 /p_xps2 80 /p_rot +270 >> /sky130_fd_pr::MiMCap libinst +1.000 90.000 <</@model (pfet_01v8) /p_xps 32 /p_yps -32 /p_xps1 48 /p_yps1 -40 /p_rot 270 +/p_xps2 -32 >> /sky130_fd_pr::pMOS3term libinst +1.000 90.000 <</@model (pfet_01v8) /p_xps 32 /p_yps -32 /p_xps1 48 /p_yps1 -40 /p_rot 270 +/p_xps2 -32 /@length (0.50) /@subs (dvdd3) >> /sky130_fd_pr::pMOS3term libinst +1.000 90.000 <</@model (rf_npn_05v5_W1p00L1p00) /p_yps -40 /p_xps2 -32 /p_xps 32 /p_xps1 48 +/p_yps1 -32 /p_rot 270 >> /sky130_fd_pr::NPNModel libinst /sky130_fd_pr::IndModel { <</@size (175) /@width (2.5) /@sep (2.5) /@turns (6.5) /@substype (sub)
diff --git a/sky130/xcircuit/sky130_fd_sc_hd.lps b/sky130/xcircuit/sky130_fd_sc_hd.lps index 1a243f4..30cc4e5 100644 --- a/sky130/xcircuit/sky130_fd_sc_hd.lps +++ b/sky130/xcircuit/sky130_fd_sc_hd.lps
@@ -7,7 +7,7 @@ % XCircuitLib library objects /sky130_fd_sc_hd::conb { -<</@strength (1) (lindex {1 2} 0) pop /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@VPB +<</@strength (1) (lindex {1} 0) pop /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1.000 0.000 0.000 scb (HI) {/Times-Roman cf} 2 4 0.000 1.000 64 64 pinlabel @@ -413,7 +413,7 @@ } def /sky130_fd_sc_hd::or3 { -<</@strength (1) (lindex {0 1 2 4} 1) pop /@VGND (gnd) /@VPWR (vdd1v8) /@index +<</@strength (1) (lindex {1 2 4} 1) pop /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1.000 0.000 0.000 scb (X) {/Times-Roman cf} 2 4 0.000 1.000 64 0 pinlabel @@ -623,7 +623,7 @@ } def /sky130_fd_sc_hd::einvn { -<</@strength (1) (lindex {1 2 4 8} 0) pop /@VGND (gnd) /@VPWR (vdd1v8) /@index +<</@strength (1) (lindex {0 1 2 4 8} 1) pop /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 0 1.000 -32 -40 -32 40 40 0 3 polygon 1 1.000 -32 0 -64 0 2 polygon @@ -712,7 +712,7 @@ /sky130_fd_sc_hd::clkinv { <</@VNB (gnd) /@VPB (vdd1v8) /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@strength -(1) (lindex {1 2 4 6 8 12 16} 0) pop >> begingate +(1) (lindex {1 2 4 8 16} 0) pop >> begingate 0 1.000 -32 -40 -32 40 40 0 3 polygon 1 1.000 -32 0 -64 0 2 polygon 1 1.000 56 0 64 0 2 polygon @@ -737,7 +737,7 @@ } def /sky130_fd_sc_hd::clkbuf { -<</@strength (1) (lindex {1 2 4 6 8 12 16} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND +<</@strength (1) (lindex {1 2 4 8 16} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 0 1.000 -32 -40 -32 40 40 0 3 polygon 1 1.000 -32 0 -64 0 2 polygon @@ -795,7 +795,7 @@ } def /sky130_fd_sc_hd::mux2i { -<</@strength (1) (lindex {1 2 4 8} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND +<</@strength (1) (lindex {1 2 4} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1 1.000 0 16 -32 16 2 polygon 1 1.000 80 -16 96 -16 2 polygon @@ -829,7 +829,7 @@ } def /sky130_fd_sc_hd::mux4 { -<</@strength (1) (lindex {1 2 4 8} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND +<</@strength (1) (lindex {1 2 4} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1 1.000 0 96 -32 96 2 polygon 1 1.000 80 32 96 32 2 polygon @@ -873,7 +873,7 @@ } def /sky130_fd_sc_hd::nand2b { -<</@strength (1) (lindex {1 2 4 8} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND +<</@strength (1) (lindex {1 2 4} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1 1.000 0 -48 -64 -48 -64 48 0 48 4 polygon 1 1.000 56 0 8 0.000 360.000 xcarc @@ -1007,7 +1007,7 @@ } def /sky130_fd_sc_hd::nor2b { -<</@strength (1) (lindex {1 2 4 8} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND +<</@strength (1) (lindex {1 2 4} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1 1.000 56 0 8 0.000 360.000 xcarc 1.000 0.000 0.000 scb @@ -1289,7 +1289,7 @@ } def /sky130_fd_sc_hd::or2b { -<</@strength (1) (lindex {0 1 2 4} 1) pop /@VGND (gnd) /@VPWR (vdd1v8) /@index +<</@strength (1) (lindex {1 2 4} 1) pop /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1.000 0.000 0.000 scb (X) {/Times-Roman cf} 2 4 0.000 1.000 64 0 pinlabel @@ -1322,7 +1322,7 @@ /sky130_fd_sc_hd::or3b { <</@VNB (gnd) /@VPB (vdd1v8) /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@strength -(1) (lindex {0 1 2 4} 1) pop >> begingate +(1) (lindex {1 2 4} 1) pop >> begingate 1.000 0.000 0.000 scb (X) {/Times-Roman cf} 2 4 0.000 1.000 64 0 pinlabel (A) {/Times-Roman cf} 2 7 0.000 1.000 -96 32 pinlabel @@ -1439,7 +1439,7 @@ /sky130_fd_sc_hd::dfxtp { <</@VNB (gnd) /@VPB (vdd1v8) /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@strength -(1) (lindex {1 2} 0) pop >> begingate +(1) (lindex {1 2 4} 0) pop >> begingate 1.000 0.000 0.000 scb (Q) {/Times-Roman cf} 2 4 0.000 1.000 64 64 pinlabel (D) {/Times-Roman cf} 2 7 0.000 1.000 -96 64 pinlabel @@ -1471,7 +1471,7 @@ } def /sky130_fd_sc_hd::dfrtn { -<</@strength (1) (lindex {1 2} 0) pop /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@VPB +<</@strength (1) (lindex {1} 0) pop /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1.000 0.000 0.000 scb (Q) {/Times-Roman cf} 2 4 0.000 1.000 64 64 pinlabel @@ -1509,7 +1509,7 @@ } def /sky130_fd_sc_hd::dfstp { -<</@strength (1) (lindex {1 2} 0) pop /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@VPB +<</@strength (1) (lindex {1 2 4} 0) pop /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1.000 0.000 0.000 scb (Q) {/Times-Roman cf} 2 4 0.000 1.000 64 64 pinlabel @@ -1548,7 +1548,7 @@ /sky130_fd_sc_hd::dfrtp { <</@VNB (gnd) /@VPB (vdd1v8) /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@strength -(1) (lindex {1 2} 0) pop >> begingate +(1) (lindex {1 2 4} 0) pop >> begingate 1.000 0.000 0.000 scb (Q) {/Times-Roman cf} 2 4 0.000 1.000 64 64 pinlabel (D) {/Times-Roman cf} 2 7 0.000 1.000 -96 64 pinlabel @@ -1758,7 +1758,7 @@ /sky130_fd_sc_hd::dfbbp { <</@VNB (gnd) /@VPB (vdd1v8) /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@strength -(1) (lindex {1 2} 0) pop >> begingate +(1) (lindex {1} 0) pop >> begingate 1.000 0.000 0.000 scb (Q) {/Times-Roman cf} 2 4 0.000 1.000 64 64 pinlabel (D) {/Times-Roman cf} 2 7 0.000 1.000 -96 64 pinlabel @@ -1805,7 +1805,7 @@ /sky130_fd_sc_hd::dlrtp { <</@VNB (gnd) /@VPB (vdd1v8) /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@strength -(1) (lindex {1 2} 0) pop >> begingate +(1) (lindex {1 2 4} 0) pop >> begingate 1.000 0.000 0.000 scb (Q) {/Times-Roman cf} 2 4 0.000 1.000 64 64 pinlabel (D) {/Times-Roman cf} 2 7 0.000 1.000 -96 64 pinlabel @@ -1842,7 +1842,7 @@ } def /sky130_fd_sc_hd::dlxtn { -<</@strength (1) (lindex {1 2} 0) pop /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@VPB +<</@strength (1) (lindex {1 2 4} 0) pop /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1.000 0.000 0.000 scb (Q) {/Times-Roman cf} 2 4 0.000 1.000 64 64 pinlabel @@ -1876,7 +1876,7 @@ /sky130_fd_sc_hd::dlxtp { <</@VNB (gnd) /@VPB (vdd1v8) /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@strength -(1) (lindex {1 2} 0) pop >> begingate +(1) (lindex {1} 0) pop >> begingate 1.000 0.000 0.000 scb (Q) {/Times-Roman cf} 2 4 0.000 1.000 64 64 pinlabel (D) {/Times-Roman cf} 2 7 0.000 1.000 -96 64 pinlabel @@ -1989,7 +1989,7 @@ } def /sky130_fd_sc_hd::dlxbp { -<</@strength (1) (lindex {1 2} 0) pop /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@VPB +<</@strength (1) (lindex {1} 0) pop /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1.000 0.000 0.000 scb (Q) {/Times-Roman cf} 2 4 0.000 1.000 64 64 pinlabel @@ -2071,7 +2071,7 @@ /sky130_fd_sc_hd::dlclkp { <</@VNB (gnd) /@VPB (vdd1v8) /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@strength -(1) (lindex {1 2} 0) pop >> begingate +(1) (lindex {1 2 4} 0) pop >> begingate 1.000 0.000 0.000 scb (GCLK) {/Times-Roman cf} 2 4 0.000 1.000 64 64 pinlabel (GATE) {/Times-Roman cf} 2 13 0.000 1.000 -16 -64 pinlabel @@ -2104,7 +2104,7 @@ } def /sky130_fd_sc_hd::ha { -<</@strength (1) (lindex {1 2} 0) pop /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@VPB +<</@strength (1) (lindex {1 2 4} 0) pop /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1.000 0.000 0.000 scb (SUM) {/Times-Roman cf} 2 4 0.000 1.000 96 64 pinlabel @@ -2144,7 +2144,7 @@ /sky130_fd_sc_hd::fah { <</@VNB (gnd) /@VPB (vdd1v8) /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@strength -(1) (lindex {1 2} 0) pop >> begingate +(1) (lindex {1} 0) pop >> begingate 1.000 0.000 0.000 scb (SUM) {/Times-Roman cf} 2 4 0.000 1.000 96 64 pinlabel (A) {/Times-Roman cf} 2 7 0.000 1.000 -96 64 pinlabel @@ -2187,7 +2187,7 @@ } def /sky130_fd_sc_hd::fahcon { -<</@strength (1) (lindex {1 2} 0) pop /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@VPB +<</@strength (1) (lindex {1} 0) pop /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1.000 0.000 0.000 scb (SUM) {/Times-Roman cf} 2 4 0.000 1.000 96 64 pinlabel @@ -2233,7 +2233,7 @@ /sky130_fd_sc_hd::fahcin { <</@VNB (gnd) /@VPB (vdd1v8) /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@strength -(1) (lindex {1 2} 0) pop >> begingate +(1) (lindex {1} 0) pop >> begingate 1.000 0.000 0.000 scb (SUM) {/Times-Roman cf} 2 4 0.000 1.000 96 64 pinlabel (A) {/Times-Roman cf} 2 7 0.000 1.000 -96 64 pinlabel @@ -2278,7 +2278,7 @@ /sky130_fd_sc_hd::a32oi { <</@VNB (gnd) /@VPB (vdd1v8) /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@strength -(1) (lindex {1 2 4 8} 0) pop >> begingate +(1) (lindex {1 2 4} 0) pop >> begingate 1 1.000 56 0 8 0.000 360.000 xcarc 1.000 0.000 0.000 scb (Y) {/Times-Roman cf} 2 4 0.000 1.000 96 0 pinlabel @@ -2326,7 +2326,7 @@ } def /sky130_fd_sc_hd::a21oi { -<</@strength (1) (lindex {1 2 4 8} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND +<</@strength (1) (lindex {1 2 4} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1 1.000 56 0 8 0.000 360.000 xcarc 1.000 0.000 0.000 scb @@ -2366,7 +2366,7 @@ /sky130_fd_sc_hd::a211oi { <</@VNB (gnd) /@VPB (vdd1v8) /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@strength -(1) (lindex {1 2 4 8} 0) pop >> begingate +(1) (lindex {1 2 4} 0) pop >> begingate 1 1.000 74 0 8 0.000 360.000 xcarc 1.000 0.000 0.000 scb (Y) {/Times-Roman cf} 2 4 0.000 1.000 96 0 pinlabel @@ -2408,7 +2408,7 @@ } def /sky130_fd_sc_hd::a221oi { -<</@strength (1) (lindex {1 2 4 8} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND +<</@strength (1) (lindex {1 2 4} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1 1.000 90 -32 8 0.000 360.000 xcarc 1.000 0.000 0.000 scb @@ -2460,7 +2460,7 @@ /sky130_fd_sc_hd::a21o { <</@VNB (gnd) /@VPB (vdd1v8) /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@strength -(1) (lindex {1 2 4 8} 0) pop >> begingate +(1) (lindex {1 2 4} 0) pop >> begingate 1.000 0.000 0.000 scb (X) {/Times-Roman cf} 2 4 0.000 1.000 64 0 pinlabel (A1) {/Times-Roman cf} 2 7 0.000 1.000 -192 80 pinlabel @@ -2497,7 +2497,7 @@ } def /sky130_fd_sc_hd::o21a { -<</@strength (1) (lindex {1 2 4 8} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND +<</@strength (1) (lindex {1 2 4} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1.000 0.000 0.000 scb (X) {/Times-Roman cf} 2 4 0.000 1.000 64 0 pinlabel @@ -2536,7 +2536,7 @@ /sky130_fd_sc_hd::a41oi { <</@VNB (gnd) /@VPB (vdd1v8) /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@strength -(1) (lindex {1 2 4 8} 0) pop >> begingate +(1) (lindex {1 2 4} 0) pop >> begingate 1 1.000 56 0 8 0.000 360.000 xcarc 1.000 0.000 0.000 scb (Y) {/Times-Roman cf} 2 4 0.000 1.000 96 0 pinlabel @@ -2581,7 +2581,7 @@ /sky130_fd_sc_hd::a31oi { <</@VNB (gnd) /@VPB (vdd1v8) /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@strength -(1) (lindex {1 2 4 8} 0) pop >> begingate +(1) (lindex {1 2 4} 0) pop >> begingate 1 1.000 56 0 8 0.000 360.000 xcarc 1.000 0.000 0.000 scb (Y) {/Times-Roman cf} 2 4 0.000 1.000 96 0 pinlabel @@ -2624,7 +2624,7 @@ /sky130_fd_sc_hd::a21boi { <</@VNB (gnd) /@VPB (vdd1v8) /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@strength -(1) (lindex {1 2 4 8} 0) pop >> begingate +(1) (lindex {0 1 2 4} 1) pop >> begingate 1 1.000 56 0 8 0.000 360.000 xcarc 1.000 0.000 0.000 scb (Y) {/Times-Roman cf} 2 4 0.000 1.000 96 0 pinlabel @@ -2665,7 +2665,7 @@ } def /sky130_fd_sc_hd::a22oi { -<</@strength (1) (lindex {1 2 4 8} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND +<</@strength (1) (lindex {1 2 4} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1 1.000 56 0 8 0.000 360.000 xcarc 1.000 0.000 0.000 scb @@ -2710,7 +2710,7 @@ } def /sky130_fd_sc_hd::a311oi { -<</@strength (1) (lindex {1 2 4 8} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND +<</@strength (1) (lindex {1 2 4} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1 1.000 74 0 8 0.000 360.000 xcarc 1.000 0.000 0.000 scb @@ -2757,7 +2757,7 @@ /sky130_fd_sc_hd::a222oi { <</@VNB (gnd) /@VPB (vdd1v8) /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@strength -(1) (lindex {1 2 4 8} 0) pop >> begingate +(1) (lindex {1} 0) pop >> begingate 1 1.000 90 -32 8 0.000 360.000 xcarc 1.000 0.000 0.000 scb (Y) {/Times-Roman cf} 2 4 0.000 1.000 128 -32 pinlabel @@ -2811,7 +2811,7 @@ } def /sky130_fd_sc_hd::a2111oi { -<</@strength (1) (lindex {1 2 4 8} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND +<</@strength (1) (lindex {0 1 2 4} 1) pop /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1 1.000 90 -16 8 0.000 360.000 xcarc 1.000 0.000 0.000 scb @@ -2859,7 +2859,7 @@ /sky130_fd_sc_hd::a2bb2oi { <</@VNB (gnd) /@VPB (vdd1v8) /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@strength -(1) (lindex {1 2 4 8} 0) pop >> begingate +(1) (lindex {1 2 4} 0) pop >> begingate 1 1.000 72 0 8 0.000 360.000 xcarc 1.000 0.000 0.000 scb (Y) {/Times-Roman cf} 2 4 0.000 1.000 96 0 pinlabel @@ -2906,7 +2906,7 @@ } def /sky130_fd_sc_hd::a32o { -<</@strength (1) (lindex {1 2 4 8} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND +<</@strength (1) (lindex {1 2 4} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1.000 0.000 0.000 scb (X) {/Times-Roman cf} 2 4 0.000 1.000 64 0 pinlabel @@ -2955,7 +2955,7 @@ /sky130_fd_sc_hd::a2111o { <</@VNB (gnd) /@VPB (vdd1v8) /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@strength -(1) (lindex {1 2 4 8} 0) pop >> begingate +(1) (lindex {1 2 4} 0) pop >> begingate 1.000 0.000 0.000 scb (X) {/Times-Roman cf} 2 4 0.000 1.000 96 -16 pinlabel (A1) {/Times-Roman cf} 2 7 0.000 1.000 -192 96 pinlabel @@ -3001,7 +3001,7 @@ /sky130_fd_sc_hd::o21ai { <</@VNB (gnd) /@VPB (vdd1v8) /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@strength -(1) (lindex {1 2 4 8} 0) pop >> begingate +(1) (lindex {0 1 2 4} 1) pop >> begingate 1 1.000 56 -32 8 0.000 360.000 xcarc 1.000 0.000 0.000 scb (Y) {/Times-Roman cf} 2 4 0.000 1.000 80 -32 pinlabel @@ -3040,7 +3040,7 @@ } def /sky130_fd_sc_hd::a41o { -<</@strength (1) (lindex {1 2 4 8} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND +<</@strength (1) (lindex {1 2 4} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1.000 0.000 0.000 scb (X) {/Times-Roman cf} 2 4 0.000 1.000 64 0 pinlabel @@ -3084,7 +3084,7 @@ } def /sky130_fd_sc_hd::o31ai { -<</@strength (1) (lindex {1 2 4 8} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND +<</@strength (1) (lindex {1 2 4} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1 1.000 56 -32 8 0.000 360.000 xcarc 1.000 0.000 0.000 scb @@ -3128,7 +3128,7 @@ /sky130_fd_sc_hd::o41ai { <</@VNB (gnd) /@VPB (vdd1v8) /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@strength -(1) (lindex {1 2 4 8} 0) pop >> begingate +(1) (lindex {1 2 4} 0) pop >> begingate 1 1.000 56 -32 8 0.000 360.000 xcarc 1.000 0.000 0.000 scb (Y) {/Times-Roman cf} 2 4 0.000 1.000 96 -32 pinlabel @@ -3174,7 +3174,7 @@ /sky130_fd_sc_hd::a22o { <</@VNB (gnd) /@VPB (vdd1v8) /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@strength -(1) (lindex {1 2 4 8} 0) pop >> begingate +(1) (lindex {1 2 4} 0) pop >> begingate 1.000 0.000 0.000 scb (X) {/Times-Roman cf} 2 4 0.000 1.000 64 0 pinlabel (A1) {/Times-Roman cf} 2 7 0.000 1.000 -192 80 pinlabel @@ -3217,7 +3217,7 @@ } def /sky130_fd_sc_hd::a211o { -<</@strength (1) (lindex {1 2 4 8} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND +<</@strength (1) (lindex {1 2 4} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1.000 0.000 0.000 scb (X) {/Times-Roman cf} 2 4 0.000 1.000 96 0 pinlabel @@ -3260,7 +3260,7 @@ /sky130_fd_sc_hd::a221o { <</@VNB (gnd) /@VPB (vdd1v8) /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@strength -(1) (lindex {1 2 4 8} 0) pop >> begingate +(1) (lindex {1 2 4} 0) pop >> begingate 1.000 0.000 0.000 scb (X) {/Times-Roman cf} 2 4 0.000 1.000 96 -32 pinlabel (A1) {/Times-Roman cf} 2 7 0.000 1.000 -192 96 pinlabel @@ -3309,7 +3309,7 @@ } def /sky130_fd_sc_hd::a21bo { -<</@strength (1) (lindex {1 2 4 8} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND +<</@strength (1) (lindex {1 2 4} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1.000 0.000 0.000 scb (X) {/Times-Roman cf} 2 4 0.000 1.000 64 0 pinlabel @@ -3350,7 +3350,7 @@ } def /sky130_fd_sc_hd::a31o { -<</@strength (1) (lindex {1 2 4 8} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND +<</@strength (1) (lindex {1 2 4} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1.000 0.000 0.000 scb (X) {/Times-Roman cf} 2 4 0.000 1.000 64 0 pinlabel @@ -3393,7 +3393,7 @@ /sky130_fd_sc_hd::a311o { <</@VNB (gnd) /@VPB (vdd1v8) /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@strength -(1) (lindex {1 2 4 8} 0) pop >> begingate +(1) (lindex {1 2 4} 0) pop >> begingate 1.000 0.000 0.000 scb (Y) {/Times-Roman cf} 2 4 0.000 1.000 96 0 pinlabel (A1) {/Times-Roman cf} 2 7 0.000 1.000 -192 96 pinlabel @@ -3437,7 +3437,7 @@ } def /sky130_fd_sc_hd::o21bai { -<</@strength (1) (lindex {1 2 4 8} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND +<</@strength (1) (lindex {1 2 4} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1 1.000 56 0 8 0.000 360.000 xcarc 1.000 0.000 0.000 scb @@ -3478,7 +3478,7 @@ } def /sky130_fd_sc_hd::o211ai { -<</@strength (1) (lindex {1 2 4 8} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND +<</@strength (1) (lindex {1 2 4} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1 1.000 72 -32 8 0.000 360.000 xcarc 1.000 0.000 0.000 scb @@ -3520,7 +3520,7 @@ } def /sky130_fd_sc_hd::o22ai { -<</@strength (1) (lindex {1 2 4 8} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND +<</@strength (1) (lindex {1 2 4} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1 1.000 56 -32 8 0.000 360.000 xcarc 1.000 0.000 0.000 scb @@ -3569,7 +3569,7 @@ /sky130_fd_sc_hd::o2111ai { <</@VNB (gnd) /@VPB (vdd1v8) /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@strength -(1) (lindex {1 2 4 8} 0) pop >> begingate +(1) (lindex {1 2 4} 0) pop >> begingate 1 1.000 104 -48 8 0.000 360.000 xcarc 1.000 0.000 0.000 scb (Y) {/Times-Roman cf} 2 4 0.000 1.000 128 -48 pinlabel @@ -3616,7 +3616,7 @@ /sky130_fd_sc_hd::o2bb2ai { <</@VNB (gnd) /@VPB (vdd1v8) /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@strength -(1) (lindex {1 2 4 8} 0) pop >> begingate +(1) (lindex {1 2 4} 0) pop >> begingate 1 1.000 56 -32 8 0.000 360.000 xcarc 1.000 0.000 0.000 scb (Y) {/Times-Roman cf} 2 4 0.000 1.000 96 -32 pinlabel @@ -3666,7 +3666,7 @@ /sky130_fd_sc_hd::o311ai { <</@VNB (gnd) /@VPB (vdd1v8) /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@strength -(1) (lindex {1 2 4 8} 0) pop >> begingate +(1) (lindex {0 1 2 4} 1) pop >> begingate 1 1.000 72 -32 8 0.000 360.000 xcarc 1.000 0.000 0.000 scb (Y) {/Times-Roman cf} 2 4 0.000 1.000 96 -32 pinlabel @@ -3711,7 +3711,7 @@ /sky130_fd_sc_hd::o32ai { <</@VNB (gnd) /@VPB (vdd1v8) /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@strength -(1) (lindex {1 2 4 8} 0) pop >> begingate +(1) (lindex {1 2 4} 0) pop >> begingate 1 1.000 56 -32 8 0.000 360.000 xcarc 1.000 0.000 0.000 scb (Y) {/Times-Roman cf} 2 4 0.000 1.000 96 -32 pinlabel @@ -3762,7 +3762,7 @@ /sky130_fd_sc_hd::o221ai { <</@VNB (gnd) /@VPB (vdd1v8) /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@strength -(1) (lindex {1 2 4 8} 0) pop >> begingate +(1) (lindex {1 2 4} 0) pop >> begingate 1 1.000 104 -48 8 0.000 360.000 xcarc 1.000 0.000 0.000 scb (Y) {/Times-Roman cf} 2 4 0.000 1.000 128 -48 pinlabel @@ -3814,7 +3814,7 @@ } def /sky130_fd_sc_hd::o221a { -<</@strength (1) (lindex {1 2 4 8} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND +<</@strength (1) (lindex {1 2 4} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1.000 0.000 0.000 scb (X) {/Times-Roman cf} 2 4 0.000 1.000 128 -48 pinlabel @@ -3867,7 +3867,7 @@ /sky130_fd_sc_hd::o31a { <</@VNB (gnd) /@VPB (vdd1v8) /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@strength -(1) (lindex {1 2 4 8} 0) pop >> begingate +(1) (lindex {1 2 4} 0) pop >> begingate 1.000 0.000 0.000 scb (X) {/Times-Roman cf} 2 4 0.000 1.000 64 -32 pinlabel (A1) {/Times-Roman cf} 2 7 0.000 1.000 -192 48 pinlabel @@ -3909,7 +3909,7 @@ /sky130_fd_sc_hd::o21ba { <</@VNB (gnd) /@VPB (vdd1v8) /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@strength -(1) (lindex {1 2 4 8} 0) pop >> begingate +(1) (lindex {1 2 4} 0) pop >> begingate 1.000 0.000 0.000 scb (X) {/Times-Roman cf} 2 4 0.000 1.000 64 0 pinlabel (A1) {/Times-Roman cf} 2 7 0.000 1.000 -192 80 pinlabel @@ -3948,7 +3948,7 @@ } def /sky130_fd_sc_hd::o41a { -<</@strength (1) (lindex {1 2 4 8} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND +<</@strength (1) (lindex {1 2 4} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1.000 0.000 0.000 scb (X) {/Times-Roman cf} 2 4 0.000 1.000 64 -32 pinlabel @@ -3993,7 +3993,7 @@ } def /sky130_fd_sc_hd::o32a { -<</@strength (1) (lindex {1 2 4 8} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND +<</@strength (1) (lindex {1 2 4} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1.000 0.000 0.000 scb (X) {/Times-Roman cf} 2 4 0.000 1.000 64 -32 pinlabel @@ -4044,7 +4044,7 @@ /sky130_fd_sc_hd::o211a { <</@VNB (gnd) /@VPB (vdd1v8) /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@strength -(1) (lindex {1 2 4 8} 0) pop >> begingate +(1) (lindex {1 2 4} 0) pop >> begingate 1.000 0.000 0.000 scb (X) {/Times-Roman cf} 2 4 0.000 1.000 96 -32 pinlabel (A1) {/Times-Roman cf} 2 7 0.000 1.000 -192 64 pinlabel @@ -4084,7 +4084,7 @@ } def /sky130_fd_sc_hd::o311a { -<</@strength (1) (lindex {1 2 4 8} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND +<</@strength (1) (lindex {1 2 4} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1.000 0.000 0.000 scb (X) {/Times-Roman cf} 2 4 0.000 1.000 96 -32 pinlabel @@ -4128,7 +4128,7 @@ } def /sky130_fd_sc_hd::o2bb2a { -<</@strength (1) (lindex {1 2 4 8} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND +<</@strength (1) (lindex {1 2 4} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1.000 0.000 0.000 scb (X) {/Times-Roman cf} 2 4 0.000 1.000 64 -32 pinlabel @@ -4178,7 +4178,7 @@ /sky130_fd_sc_hd::o22a { <</@VNB (gnd) /@VPB (vdd1v8) /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@strength -(1) (lindex {1 2 4 8} 0) pop >> begingate +(1) (lindex {1 2 4} 0) pop >> begingate 1.000 0.000 0.000 scb (X) {/Times-Roman cf} 2 4 0.000 1.000 64 -32 pinlabel (A1) {/Times-Roman cf} 2 7 0.000 1.000 -192 48 pinlabel @@ -4224,7 +4224,7 @@ } def /sky130_fd_sc_hd::o2111a { -<</@strength (1) (lindex {1 2 4 8} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND +<</@strength (1) (lindex {1 2 4} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1.000 0.000 0.000 scb (X) {/Times-Roman cf} 2 4 0.000 1.000 128 -48 pinlabel @@ -4300,7 +4300,7 @@ } def /sky130_fd_sc_hd::diode { -<</@strength (1) (lindex {1 2} 0) pop /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@VPB +<</@strength (1) (lindex {2} 0) pop /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 1.000 0.000 0.000 scb (DIODE) {/Times-Roman cf} 2 7 0.000 1.000 -96 32 pinlabel @@ -4323,7 +4323,7 @@ } def /sky130_fd_sc_hd::bufinv { -<</@strength (1) (lindex {1 2 4 6 8 12 16} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND +<</@strength (1) (lindex {8 16} 0) pop /@index (?) /@VPWR (vdd1v8) /@VGND (gnd) /@VPB (vdd1v8) /@VNB (gnd) >> begingate 0 1.000 48 -40 48 40 120 0 3 polygon 1 1.000 128 0 8 0.000 360.000 xcarc @@ -4351,7 +4351,7 @@ /sky130_fd_sc_hd::bufbuf { <</@VNB (gnd) /@VPB (vdd1v8) /@VGND (gnd) /@VPWR (vdd1v8) /@index (?) /@strength -(1) (lindex {1 2 4 6 8 12 16} 0) pop >> begingate +(1) (lindex {8 16} 0) pop >> begingate 0 1.000 48 -40 48 40 120 0 3 polygon 1 1.000 -32 0 -64 0 2 polygon 1 1.000 120 0 128 0 2 polygon