Final LVS run reports for caravel and caravan top levels, showing LVS

clean.  Provides the netgen report, JSON file, and run-time log of
each.  Modified the scripts to tee into the run-time log file and to
add the SPICE netlist of the simple_por.  Corrected the simple_por
netlist to make the xhigh resistors non-width-specific, since the
width-specific ID mask is not a GDS layer and cannot be reconstructed
from GDS (at least not with the current tech file in magic).
This commit is contained in:
Tim Edwards 2022-11-11 15:40:08 -05:00
parent fffc4cb2ee
commit cca54a2a74
10 changed files with 125172 additions and 1022 deletions

View File

@ -10,6 +10,7 @@
# magic layout. # magic layout.
# #
# Written by Tim Edwards for MPW-7 10/11/2022 # Written by Tim Edwards for MPW-7 10/11/2022
# Updated/fixed 11/08/2022
#------------------------------------------------------------------- #-------------------------------------------------------------------
echo ${PDK_ROOT:=/usr/share/pdk} > /dev/null echo ${PDK_ROOT:=/usr/share/pdk} > /dev/null
@ -17,8 +18,10 @@ echo ${PDK:=sky130A} > /dev/null
# Generate DEF of chip_io # Generate DEF of chip_io
echo "Generating DEF view of chip_io" echo "Generating DEF view of chip_io"
magic -d OGL -rcfile ${PDK_ROOT}/${PDK}/libs.tech/magic/${PDK}.magicrc << EOF magic -dnull -noconsole -rcfile ${PDK_ROOT}/${PDK}/libs.tech/magic/${PDK}.magicrc << EOF
load chip_io load chip_io
select top cell
expand
property flatten true property flatten true
flatten -doproperty chip_io_flat flatten -doproperty chip_io_flat
load chip_io_flat load chip_io_flat
@ -28,7 +31,20 @@ select top cell
extract do local extract do local
extract no all extract no all
extract all extract all
def write chip_io # Declare all signals to be SPECIALNETS
set globals(vccd) 1
set globals(vssd) 1
set globals(vddio) 1
set globals(vssio) 1
set globals(vdda1) 1
set globals(vssa1) 1
set globals(vccd1) 1
set globals(vssd1) 1
set globals(vdda2) 1
set globals(vssa2) 1
set globals(vccd2) 1
set globals(vssd2) 1
def write chip_io -units 400
quit -noprompt quit -noprompt
EOF EOF
@ -36,8 +52,10 @@ rm *.ext
# Generate DEF of chip_io_alt # Generate DEF of chip_io_alt
echo "Generating DEF view of chip_io_alt" echo "Generating DEF view of chip_io_alt"
magic -d OGL -rcfile ${PDK_ROOT}/${PDK}/libs.tech/magic/${PDK}.magicrc << EOF magic -dnull -noconsole -rcfile ${PDK_ROOT}/${PDK}/libs.tech/magic/${PDK}.magicrc << EOF
load chip_io_alt load chip_io_alt
select top cell
expand
property flatten true property flatten true
flatten -doproperty chip_io_alt_flat flatten -doproperty chip_io_alt_flat
load chip_io_alt_flat load chip_io_alt_flat
@ -47,7 +65,20 @@ select top cell
extract do local extract do local
extract no all extract no all
extract all extract all
def write chip_io_alt # Declare all signals to be SPECIALNETS
set globals(vccd) 1
set globals(vssd) 1
set globals(vddio) 1
set globals(vssio) 1
set globals(vdda1) 1
set globals(vssa1) 1
set globals(vccd1) 1
set globals(vssd1) 1
set globals(vdda2) 1
set globals(vssa2) 1
set globals(vccd2) 1
set globals(vssd2) 1
def write chip_io_alt -units 400
quit -noprompt quit -noprompt
EOF EOF

View File

@ -88,7 +88,7 @@ EOF
rm -f *.ext rm -f *.ext
fi fi
cat > netgenD.tcl << EOF cat > netgenE.tcl << EOF
puts stdout "Reading netlist caravan.spice" puts stdout "Reading netlist caravan.spice"
set circuit1 [readnet spice $CARAVEL_ROOT/spi/lvs/caravan.spice] set circuit1 [readnet spice $CARAVEL_ROOT/spi/lvs/caravan.spice]
puts stdout "Reading SPICE netlists of I/O" puts stdout "Reading SPICE netlists of I/O"
@ -128,11 +128,11 @@ readnet verilog $LITEX_ROOT/verilog/gl/mgmt_core_wrapper.v \$circuit2
puts stdout "Reading top gate-level verilog module" puts stdout "Reading top gate-level verilog module"
readnet verilog $CARAVEL_ROOT/verilog/gl/caravan-signoff.v \$circuit2 readnet verilog $CARAVEL_ROOT/verilog/gl/caravan-signoff.v \$circuit2
# Cells in management core wrapper (layout) are prefixed with RL_ or KF_ # Cells in management core wrapper (layout) are prefixed with unique 2-letter prefix
set cells1 [cells list -all \$circuit1] set cells1 [cells list -all \$circuit1]
set cells2 [cells list -all \$circuit2] set cells2 [cells list -all \$circuit2]
foreach cell \$cells1 { foreach cell \$cells1 {
if {[regexp "\\[A-Z\\]\\[A-Z\\]_(.+)" \$cell match cellname]} { if {[regexp {.._(.+)} \$cell match cellname]} {
if {([lsearch \$cells2 \$cell] < 0) && ([lsearch \$cells2 \$cellname] >= 0) && ([lsearch \$cells1 \$cellname] < 0)} { if {([lsearch \$cells2 \$cell] < 0) && ([lsearch \$cells2 \$cellname] >= 0) && ([lsearch \$cells1 \$cellname] < 0)} {
equate classes "\$circuit1 \$cell" "\$circuit2 \$cellname" equate classes "\$circuit1 \$cell" "\$circuit2 \$cellname"
puts stdout "Matching pins of \$cell in circuit 1 and \$cellname in circuit 2" puts stdout "Matching pins of \$cell in circuit 1 and \$cellname in circuit 2"
@ -140,7 +140,7 @@ foreach cell \$cells1 {
} }
} }
# Ignore fill cells in standard cell sets that have two-letter prefixes. # Ignore fill cells in standard cell sets that have two-letter prefixes.
if {[regexp {\\[A-Z\\]\\[A-Z\\]_sky130_fd_sc_[^_]+__fill_[[:digit:]]+} \$cell match]} { if {[regexp {.._sky130_fd_sc_[^_]+__fill_[[:digit:]]+} \$cell match]} {
ignore class "\$circuit1 \$cell" ignore class "\$circuit1 \$cell"
} }
} }
@ -152,7 +152,7 @@ EOF
export NETGEN_COLUMNS=90 export NETGEN_COLUMNS=90
export MAGIC_EXT_USE_GDS=1 export MAGIC_EXT_USE_GDS=1
netgen -batch source netgenD.tcl >& caravan_3_lvs.log netgen -batch source netgenE.tcl 2>&1 | tee caravan_3_lvs.log
rm netgenD.tcl rm netgenE.tcl
exit 0 exit 0

View File

@ -131,7 +131,7 @@ readnet verilog $CARAVEL_ROOT/verilog/gl/caravel-signoff.v \$circuit2
set cells1 [cells list -all \$circuit1] set cells1 [cells list -all \$circuit1]
set cells2 [cells list -all \$circuit2] set cells2 [cells list -all \$circuit2]
foreach cell \$cells1 { foreach cell \$cells1 {
if {[regexp "\\[A-Z\\]\\[A-Z\\]_(.+)" \$cell match cellname]} { if {[regexp ".._(.+)" \$cell match cellname]} {
if {([lsearch \$cells2 \$cell] < 0) && ([lsearch \$cells2 \$cellname] >= 0) && ([lsearch \$cells1 \$cellname] < 0)} { if {([lsearch \$cells2 \$cell] < 0) && ([lsearch \$cells2 \$cellname] >= 0) && ([lsearch \$cells1 \$cellname] < 0)} {
equate classes "\$circuit1 \$cell" "\$circuit2 \$cellname" equate classes "\$circuit1 \$cell" "\$circuit2 \$cellname"
puts stdout "Matching pins of \$cell in circuit 1 and \$cellname in circuit 2" puts stdout "Matching pins of \$cell in circuit 1 and \$cellname in circuit 2"
@ -139,7 +139,7 @@ foreach cell \$cells1 {
} }
} }
# Ignore fill cells in standard cell sets that have two-letter prefixes. # Ignore fill cells in standard cell sets that have two-letter prefixes.
if {[regexp {\\[A-Z\\]\\[A-Z\\]_sky130_fd_sc_[^_]+__fill_[[:digit:]]+} \$cell match]} { if {[regexp {.._sky130_fd_sc_[^_]+__fill_[[:digit:]]+} \$cell match]} {
ignore class "\$circuit1 \$cell" ignore class "\$circuit1 \$cell"
} }
} }
@ -151,7 +151,7 @@ EOF
export NETGEN_COLUMNS=90 export NETGEN_COLUMNS=90
export MAGIC_EXT_USE_GDS=1 export MAGIC_EXT_USE_GDS=1
netgen -batch source netgenD.tcl >& caravel_3_lvs.log netgen -batch source netgenD.tcl 2>&1 | tee caravel_3_lvs.log
rm netgenD.tcl rm netgenD.tcl
exit 0 exit 0

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -6983,6 +6983,46 @@ B
Cell pin lists are equivalent. Cell pin lists are equivalent.
Device classes NF_sky130_fd_sc_hd__nor4b_2 and sky130_fd_sc_hd__nor4b_2 are equivalent. Device classes NF_sky130_fd_sc_hd__nor4b_2 and sky130_fd_sc_hd__nor4b_2 are equivalent.
Circuit 1 cell sky130_fd_pr__cap_mim_m3_1 and Circuit 2 cell sky130_fd_pr__cap_mim_m3_1 are black boxes.
Warning: Equate pins: cell sky130_fd_pr__cap_mim_m3_1 is a placeholder, treated as a black box.
Warning: Equate pins: cell sky130_fd_pr__cap_mim_m3_1 is a placeholder, treated as a black box.
Subcircuit pins:
Circuit 1: sky130_fd_pr__cap_mim_m3_1 |Circuit 2: sky130_fd_pr__cap_mim_m3_1
--------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------
1 |1
2 |2
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Cell pin lists are equivalent.
Device classes sky130_fd_pr__cap_mim_m3_1 and sky130_fd_pr__cap_mim_m3_1 are equivalent.
Circuit 1 cell sky130_fd_pr__cap_mim_m3_2 and Circuit 2 cell sky130_fd_pr__cap_mim_m3_2 are black boxes.
Warning: Equate pins: cell sky130_fd_pr__cap_mim_m3_2 is a placeholder, treated as a black box.
Warning: Equate pins: cell sky130_fd_pr__cap_mim_m3_2 is a placeholder, treated as a black box.
Subcircuit pins:
Circuit 1: sky130_fd_pr__cap_mim_m3_2 |Circuit 2: sky130_fd_pr__cap_mim_m3_2
--------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------
1 |1
2 |2
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Cell pin lists are equivalent.
Device classes sky130_fd_pr__cap_mim_m3_2 and sky130_fd_pr__cap_mim_m3_2 are equivalent.
Circuit 1 cell sky130_fd_pr__res_xhigh_po and Circuit 2 cell sky130_fd_pr__res_xhigh_po are black boxes.
Warning: Equate pins: cell sky130_fd_pr__res_xhigh_po is a placeholder, treated as a black box.
Warning: Equate pins: cell sky130_fd_pr__res_xhigh_po is a placeholder, treated as a black box.
Subcircuit pins:
Circuit 1: sky130_fd_pr__res_xhigh_po |Circuit 2: sky130_fd_pr__res_xhigh_po
--------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------
1 |1
2 |2
3 |3
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Cell pin lists are equivalent.
Device classes sky130_fd_pr__res_xhigh_po and sky130_fd_pr__res_xhigh_po are equivalent.
Circuit 1 cell sky130_fd_pr__res_generic_pd__hv and Circuit 2 cell sky130_fd_pr__res_generic_pd__hv are black boxes. Circuit 1 cell sky130_fd_pr__res_generic_pd__hv and Circuit 2 cell sky130_fd_pr__res_generic_pd__hv are black boxes.
Warning: Equate pins: cell sky130_fd_pr__res_generic_pd__hv is a placeholder, treated as a black box. Warning: Equate pins: cell sky130_fd_pr__res_generic_pd__hv is a placeholder, treated as a black box.
Warning: Equate pins: cell sky130_fd_pr__res_generic_pd__hv is a placeholder, treated as a black box. Warning: Equate pins: cell sky130_fd_pr__res_generic_pd__hv is a placeholder, treated as a black box.
@ -18099,20 +18139,46 @@ flash_io3_di
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Cell pin lists are equivalent. Cell pin lists are equivalent.
Device classes mgmt_core_wrapper and mgmt_core_wrapper are equivalent. Device classes mgmt_core_wrapper and mgmt_core_wrapper are equivalent.
Flattening unmatched subcell QJ_sky130_fd_pr__pfet_g5v0d10v5_3YBPVB in circuit simple_por (0)(4 instances)
Flattening unmatched subcell QJ_sky130_fd_pr__pfet_g5v0d10v5_YUHPXE in circuit simple_por (0)(1 instance)
Flattening unmatched subcell QJ_sky130_fd_pr__nfet_g5v0d10v5_ZK8HQC in circuit simple_por (0)(1 instance)
Flattening unmatched subcell QJ_sky130_fd_pr__nfet_g5v0d10v5_PKVMTM in circuit simple_por (0)(1 instance)
Flattening unmatched subcell QJ_sky130_fd_pr__cap_mim_m3_1_WRT4AW in circuit simple_por (0)(1 instance)
Flattening unmatched subcell QJ_sky130_fd_pr__pfet_g5v0d10v5_YEUEBV in circuit simple_por (0)(1 instance)
Flattening unmatched subcell QJ_sky130_fd_pr__pfet_g5v0d10v5_YUHPBG in circuit simple_por (0)(1 instance)
Flattening unmatched subcell QJ_sky130_fd_pr__cap_mim_m3_2_W5U4AW in circuit simple_por (0)(1 instance)
Flattening unmatched subcell QJ_sky130_fd_pr__pfet_g5v0d10v5_ZEUEFZ in circuit simple_por (0)(1 instance)
Flattening unmatched subcell QJ_sky130_fd_pr__res_xhigh_po_0p69_S5N9F3 in circuit simple_por (0)(1 instance)
Flattening unmatched subcell QJ_sky130_fd_pr__nfet_g5v0d10v5_TGFUGS in circuit simple_por (0)(1 instance)
Circuit 2 cell simple_por is a black box; will not flatten Circuit 1 Class simple_por (0): Merged 20 parallel devices.
Warning: Equate pins: cell simple_por is a placeholder, treated as a black box. Class simple_por (0): Merged 24 series devices.
Subcircuit summary:
Circuit 1: simple_por |Circuit 2: simple_por
--------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------
sky130_fd_pr__pfet_g5v0d10v5 (21->8) |sky130_fd_pr__pfet_g5v0d10v5 (8)
sky130_fd_pr__nfet_g5v0d10v5 (9->3) |sky130_fd_pr__nfet_g5v0d10v5 (3)
sky130_fd_pr__cap_mim_m3_1 (1) |sky130_fd_pr__cap_mim_m3_1 (1)
sky130_fd_pr__cap_mim_m3_2 (1) |sky130_fd_pr__cap_mim_m3_2 (1)
QJ_sky130_fd_sc_hvl__buf_8 (2) |sky130_fd_sc_hvl__buf_8 (2)
QJ_sky130_fd_sc_hvl__inv_8 (1) |sky130_fd_sc_hvl__inv_8 (1)
sky130_fd_pr__res_xhigh_po (28->3) |sky130_fd_pr__res_xhigh_po (4->3)
QJ_sky130_fd_sc_hvl__schmittbuf_1 (1) |sky130_fd_sc_hvl__schmittbuf_1 (1)
Number of devices: 20 |Number of devices: 20
Number of nets: 17 |Number of nets: 17
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Netlists match uniquely.
Subcircuit pins: Subcircuit pins:
Circuit 1: simple_por |Circuit 2: simple_por Circuit 1: simple_por |Circuit 2: simple_por
--------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------
vdd3v3 |vdd3v3
vdd1v8 |vdd1v8
porb_h |porb_h porb_h |porb_h
por_l |por_l
porb_l |porb_l porb_l |porb_l
vss1v8 |vss1v8 por_l |por_l
vss3v3 |vss3v3 vss3v3 |vss3v3
vdd3v3 |vdd3v3
vss1v8 |vss1v8
vdd1v8 |vdd1v8
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Cell pin lists are equivalent. Cell pin lists are equivalent.
Device classes simple_por and simple_por are equivalent. Device classes simple_por and simple_por are equivalent.

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,5 @@
# NOTE: Hand-edited to change res_xhigh_po_0p69 resistors to res_xhigh_po resistors with W=0.69
# because the former device does not get recognized when reading from GDS.
.subckt simple_por vdd3v3 vss3v3 porb_h porb_l por_l vdd1v8 vss1v8 .subckt simple_por vdd3v3 vss3v3 porb_h porb_l por_l vdd1v8 vss1v8
*.iopin vdd3v3 *.iopin vdd3v3
*.iopin vss3v3 *.iopin vss3v3
@ -14,14 +16,16 @@ XM1 net3 net7 net5 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 W=2 nf=1 ad='int((n
XM2 net2 net3 vss3v3 vss3v3 sky130_fd_pr__nfet_g5v0d10v5 L=0.8 W=2 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' XM2 net2 net3 vss3v3 vss3v3 sky130_fd_pr__nfet_g5v0d10v5 L=0.8 W=2 nf=1 ad='int((nf+1)/2) * W/nf * 0.29'
+ as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' + as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)'
+ nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1 + nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1
XR1 net4 vdd3v3 vss3v3 sky130_fd_pr__res_xhigh_po_0p69 L=500 mult=1 m=1 # XR1 net4 vdd3v3 vss3v3 sky130_fd_pr__res_xhigh_po_0p69 L=500 mult=1 m=1
XR1 net4 vdd3v3 vss3v3 sky130_fd_pr__res_xhigh_po W=0.69 L=500 mult=1 m=1
XM4 net5 net6 vdd3v3 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 W=2 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' XM4 net5 net6 vdd3v3 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 W=2 nf=1 ad='int((nf+1)/2) * W/nf * 0.29'
+ as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' + as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)'
+ nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1 + nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1
XM5 net3 net3 vss3v3 vss3v3 sky130_fd_pr__nfet_g5v0d10v5 L=0.8 W=14 nf=7 ad='int((nf+1)/2) * W/nf * 0.29' XM5 net3 net3 vss3v3 vss3v3 sky130_fd_pr__nfet_g5v0d10v5 L=0.8 W=14 nf=7 ad='int((nf+1)/2) * W/nf * 0.29'
+ as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' + as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)'
+ nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1 + nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1
XR2 vss3v3 net4 vss3v3 sky130_fd_pr__res_xhigh_po_0p69 L=150 mult=1 m=1 # XR2 vss3v3 net4 vss3v3 sky130_fd_pr__res_xhigh_po_0p69 L=150 mult=1 m=1
XR2 vss3v3 net4 vss3v3 sky130_fd_pr__res_xhigh_po W=0.69 L=150 mult=1 m=1
XM7 net2 net2 net1 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 W=2 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' XM7 net2 net2 net1 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 W=2 nf=1 ad='int((nf+1)/2) * W/nf * 0.29'
+ as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' + as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)'
+ nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1 + nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1
@ -43,7 +47,8 @@ XM12 net8 net1 vdd3v3 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 W=2 nf=1 ad='int
XM13 net9 net2 net8 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 W=2 nf=1 ad='int((nf+1)/2) * W/nf * 0.29' XM13 net9 net2 net8 vdd3v3 sky130_fd_pr__pfet_g5v0d10v5 L=0.8 W=2 nf=1 ad='int((nf+1)/2) * W/nf * 0.29'
+ as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)' + as='int((nf+2)/2) * W/nf * 0.29' pd='2*int((nf+1)/2) * (W/nf + 0.29)' ps='2*int((nf+2)/2) * (W/nf + 0.29)'
+ nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1 + nrd='0.29 / W' nrs='0.29 / W' sa=0 sb=0 sd=0 mult=1 m=1
XR3 vss3v3 vss3v3 vss3v3 sky130_fd_pr__res_xhigh_po_0p69 L=25 mult=2 m=2 # XR3 vss3v3 vss3v3 vss3v3 sky130_fd_pr__res_xhigh_po_0p69 L=25 mult=2 m=2
XR3 vss3v3 vss3v3 vss3v3 sky130_fd_pr__res_xhigh_po W=0.69 L=25 mult=2 m=2
x2 net10 vss3v3 vss3v3 vdd3v3 vdd3v3 porb_h sky130_fd_sc_hvl__buf_8 x2 net10 vss3v3 vss3v3 vdd3v3 vdd3v3 porb_h sky130_fd_sc_hvl__buf_8
x3 net10 vss1v8 vss1v8 vdd1v8 vdd1v8 porb_l sky130_fd_sc_hvl__buf_8 x3 net10 vss1v8 vss1v8 vdd1v8 vdd1v8 porb_l sky130_fd_sc_hvl__buf_8
x4 net10 vss1v8 vss1v8 vdd1v8 vdd1v8 por_l sky130_fd_sc_hvl__inv_8 x4 net10 vss1v8 vss1v8 vdd1v8 vdd1v8 por_l sky130_fd_sc_hvl__inv_8