Mitch Bailey
07/13/2021, 4:15 PMchip_io
macro. I've extracted the layout; flattening all the cells with _example_
in the name. netgen is seg-faulting. You might be able to recreate it by making the following changes to scripts/tcl_scripts/magic.tcl
diff --git a/scripts/tcl_commands/magic.tcl b/scripts/tcl_commands/magic.tcl
index 6a7904e..6f9ec84 100755
--- a/scripts/tcl_commands/magic.tcl
+++ b/scripts/tcl_commands/magic.tcl
@@ -151,6 +151,9 @@ proc run_magic_spice_export {args} {
set commands \
"
if { \[info exist ::env(MAGIC_EXT_USE_GDS)\] && \$::env(MAGIC_EXT_USE_GDS) } {
+ cif istyle sky130(vendor)
+ gds flatglob *__example_*
+ gds flatten true
gds read \$::env(CURRENT_GDS)
} else {
and then in caravel/openlane
, add the following to chip_io/config.tcl
,
diff --git a/openlane/chip_io/config.tcl b/openlane/chip_io/config.tcl
index 1581aa4..1bdb3c5 100755
--- a/openlane/chip_io/config.tcl
+++ b/openlane/chip_io/config.tcl
@@ -51,4 +51,9 @@ set ::env(LVS_CONNECT_BY_LABEL) 1
# "There are areas of ntap and ptap and/or low voltage and high voltage that magic can't parse properly from the GDS. \
Those aren't parts of devices, so they don't affect the extraction, but they may raise overlap errors". Tim E.
set ::env(QUIT_ON_ILLEGAL_OVERLAPS) 0
+
+set ::env(LVS_EXTRA_STD_CELL_LIBRARY) "\
+ $::env(PDK_ROOT)/sky130A/libs.ref/sky130_fd_io/spice/sky130_fd_io.spice\
+ $::env(PDK_ROOT)/sky130A/libs.ref/sky130_fd_io/spice/sky130_ef_io.spice"
and run the following commands in docker.
gunzip ../gds/chip_io.gz
flow.tcl -design chip_io -tag lvs -lvs -gds ../gds/chip_io.gz -net ../verilog/gl/chip_io.v
Here's the seg-fault output.
Contents of circuit 1: Circuit: 'sky130_fd_io__gpiov2_obpredrvr'
Circuit sky130_fd_io__gpiov2_obpredrvr contains 164 device instances.
Class: sky130_fd_io__gpiov2_octl_mux instances: 1
Class: sky130_fd_io__gpiov2_pdpredrvr_strong_nr3 instances: 1
Class: sky130_fd_pr__nfet_g5v0d10v5 instances: 63
Class: sky130_fd_pr__res_generic_po instances: 1
Class: sky130_fd_io__gpiov2_pupredrvr_strong_nd2 instances: 1
Class: sky130_fd_pr__pfet_g5v0d10v5 instances: 61
Class: sky130_fd_pr__res_generic_m1 instances: 36
Circuit contains 119 nets.
Contents of circuit 2: Circuit: 'sky130_fd_io__gpiov2_obpredrvr'
Circuit sky130_fd_io__gpiov2_obpredrvr contains 151 device instances.
Class: sky130_fd_io__gpiov2_octl_mux instances: 1
Class: sky130_fd_io__gpiov2_pdpredrvr_strong_nr3 instances: 1
Class: sky130_fd_pr__nfet_g5v0d10v5 instances: 53
Class: sky130_fd_io__gpiov2_pupredrvr_strong_nd2 instances: 2
Class: sky130_fd_pr__pfet_g5v0d10v5 instances: 59
Class: sky130_fd_pr__res_generic_m1 instances: 35
Circuit contains 116 nets.
Circuit 1 contains 164 devices, Circuit 2 contains 151 devices. *** MISMATCH ***
Circuit 1 contains 109 nets, Circuit 2 contains 105 nets. *** MISMATCH ***
Program received signal SIGSEGV, Segmentation fault.