Add files via upload
							parent
							
								
									14ab45a97f
								
							
						
					
					
						commit
						8e44d8bb37
					
				@ -0,0 +1,17 @@
 | 
			
		||||
# magic -rcfile magic.tcl
 | 
			
		||||
 | 
			
		||||
source ../magic/.magic_tech/.magicrc
 | 
			
		||||
 | 
			
		||||
# openwrapper for non-cmdline
 | 
			
		||||
set cmdline 0
 | 
			
		||||
if {[catch {openwrapper}]} {
 | 
			
		||||
   set cmdline 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gds read toysram_bit.gds
 | 
			
		||||
load toysram_bit
 | 
			
		||||
 | 
			
		||||
# quit if commandline
 | 
			
		||||
if {$cmdline} {
 | 
			
		||||
   quit
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,33 @@
 | 
			
		||||
# magic -rcfile magic.tcl
 | 
			
		||||
 | 
			
		||||
source ../magic/.magic_tech/.magicrc
 | 
			
		||||
 | 
			
		||||
# openwrapper for non-cmdline
 | 
			
		||||
set cmdline 0
 | 
			
		||||
if {[catch {openwrapper}]} {
 | 
			
		||||
   set cmdline 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gds read toysram_bit.gds
 | 
			
		||||
load toysram_bit
 | 
			
		||||
select
 | 
			
		||||
 | 
			
		||||
# create toysram_bit.ext
 | 
			
		||||
extract cell toysram_bit
 | 
			
		||||
 | 
			
		||||
#wtf what are these doing?  do i want lvs? which options?
 | 
			
		||||
# create toysram_bit.spice
 | 
			
		||||
ext2spice scale off
 | 
			
		||||
# for spice sim
 | 
			
		||||
ext2spice -F -f ngspice
 | 
			
		||||
 | 
			
		||||
# create toysram_bit.sim
 | 
			
		||||
ext2sim -R -C
 | 
			
		||||
 | 
			
		||||
# create lef
 | 
			
		||||
lef write
 | 
			
		||||
 | 
			
		||||
# quit if commandline
 | 
			
		||||
if {$cmdline} {
 | 
			
		||||
   quit
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,90 @@
 | 
			
		||||
# magic -rcfile magic.tcl
 | 
			
		||||
 | 
			
		||||
source ../magic/.magic_tech/.magicrc
 | 
			
		||||
 | 
			
		||||
# openwrapper for non-cmdline
 | 
			
		||||
set cmdline 0
 | 
			
		||||
if {[catch {openwrapper}]} {
 | 
			
		||||
   set cmdline 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gds read toysram_bit.gds
 | 
			
		||||
load toysram_bit
 | 
			
		||||
 | 
			
		||||
irsim $PDK_ROOT/sky130A/libs.tech/irsim/sky130A_1v98_27.prm toysram_bit.sim
 | 
			
		||||
h VDD
 | 
			
		||||
l GND_0
 | 
			
		||||
l GND_1
 | 
			
		||||
ana inv1_q inv2_q WWL WBL WBLb RWL0 RBL0 RWL1 RBL1
 | 
			
		||||
 | 
			
		||||
h RWL0
 | 
			
		||||
h RWL1
 | 
			
		||||
s 100
 | 
			
		||||
 | 
			
		||||
# write 1
 | 
			
		||||
h WWL
 | 
			
		||||
h WBL
 | 
			
		||||
l WBLb
 | 
			
		||||
# RBL's are floating except when pulled to 0 - force/release
 | 
			
		||||
u RBL0
 | 
			
		||||
u RBL1
 | 
			
		||||
s 10
 | 
			
		||||
x RBL0
 | 
			
		||||
x RBL1
 | 
			
		||||
s 10
 | 
			
		||||
s 100
 | 
			
		||||
s 100
 | 
			
		||||
l WWL
 | 
			
		||||
s 100
 | 
			
		||||
 | 
			
		||||
# write 0
 | 
			
		||||
h WWL
 | 
			
		||||
l WBL
 | 
			
		||||
h WBLb
 | 
			
		||||
# RBL's are floating except when pulled to 0 - force/release
 | 
			
		||||
u RBL0
 | 
			
		||||
u RBL1
 | 
			
		||||
s 10
 | 
			
		||||
x RBL0
 | 
			
		||||
x RBL1
 | 
			
		||||
s 10
 | 
			
		||||
s 100
 | 
			
		||||
s 100
 | 
			
		||||
l WWL
 | 
			
		||||
s 100
 | 
			
		||||
 | 
			
		||||
# write 1
 | 
			
		||||
h WWL
 | 
			
		||||
h WBL
 | 
			
		||||
l WBLb
 | 
			
		||||
# RBL's are floating except when pulled to 0 - force/release
 | 
			
		||||
u RBL0
 | 
			
		||||
u RBL1
 | 
			
		||||
s 10
 | 
			
		||||
x RBL0
 | 
			
		||||
x RBL1
 | 
			
		||||
s 10
 | 
			
		||||
s 100
 | 
			
		||||
s 100
 | 
			
		||||
l WWL
 | 
			
		||||
s 100
 | 
			
		||||
 | 
			
		||||
# disable rwl's
 | 
			
		||||
l RWL0
 | 
			
		||||
l RWL1
 | 
			
		||||
# RBL's are floating except when pulled to 0 - force/release
 | 
			
		||||
u RBL0
 | 
			
		||||
u RBL1
 | 
			
		||||
s 10
 | 
			
		||||
x RBL0
 | 
			
		||||
x RBL1
 | 
			
		||||
s 10
 | 
			
		||||
s 100
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# quit if commandline
 | 
			
		||||
if {$cmdline} {
 | 
			
		||||
   quit
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,455 @@
 | 
			
		||||
#---------------------------------------------------------------
 | 
			
		||||
# Setup file for netgen LVS
 | 
			
		||||
# SkyWater sky130A
 | 
			
		||||
#---------------------------------------------------------------
 | 
			
		||||
permute default
 | 
			
		||||
property default
 | 
			
		||||
property parallel none
 | 
			
		||||
 | 
			
		||||
# Allow override of default #columns in the output format.
 | 
			
		||||
catch {format $env(NETGEN_COLUMNS)}
 | 
			
		||||
 | 
			
		||||
#---------------------------------------------------------------
 | 
			
		||||
# For the following, get the cell lists from
 | 
			
		||||
# circuit1 and circuit2.
 | 
			
		||||
#---------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
set cells1 [cells list -all -circuit1]
 | 
			
		||||
set cells2 [cells list -all -circuit2]
 | 
			
		||||
 | 
			
		||||
# NOTE:  In accordance with the LVS manager GUI, the schematic is
 | 
			
		||||
# always circuit2, so some items like property "par1" only need to
 | 
			
		||||
# be specified for circuit2.
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
# Resistors (except metal)
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
 | 
			
		||||
set devices {}
 | 
			
		||||
lappend devices sky130_fd_pr__res_iso_pw
 | 
			
		||||
lappend devices sky130_fd_pr__res_high_po_0p35
 | 
			
		||||
lappend devices sky130_fd_pr__res_high_po_0p69
 | 
			
		||||
lappend devices sky130_fd_pr__res_high_po_1p41
 | 
			
		||||
lappend devices sky130_fd_pr__res_high_po_2p85
 | 
			
		||||
lappend devices sky130_fd_pr__res_high_po_5p73
 | 
			
		||||
lappend devices sky130_fd_pr__res_high_po
 | 
			
		||||
lappend devices sky130_fd_pr__res_xhigh_po_0p35
 | 
			
		||||
lappend devices sky130_fd_pr__res_xhigh_po_0p69
 | 
			
		||||
lappend devices sky130_fd_pr__res_xhigh_po_1p41
 | 
			
		||||
lappend devices sky130_fd_pr__res_xhigh_po_2p85
 | 
			
		||||
lappend devices sky130_fd_pr__res_xhigh_po_5p73
 | 
			
		||||
lappend devices sky130_fd_pr__res_xhigh_po
 | 
			
		||||
lappend devices sky130_fd_pr__res_generic_nd
 | 
			
		||||
lappend devices sky130_fd_pr__res_generic_pd
 | 
			
		||||
lappend devices sky130_fd_pr__res_generic_nd__hv
 | 
			
		||||
lappend devices sky130_fd_pr__res_generic_pd__hv
 | 
			
		||||
lappend devices mrdn_hv mrdp_hv
 | 
			
		||||
 | 
			
		||||
foreach dev $devices {
 | 
			
		||||
    if {[lsearch $cells1 $dev] >= 0} {
 | 
			
		||||
	permute "-circuit1 $dev" 1 2
 | 
			
		||||
	property "-circuit1 $dev" series enable
 | 
			
		||||
	property "-circuit1 $dev" series {w critical}
 | 
			
		||||
	property "-circuit1 $dev" series {l add}
 | 
			
		||||
	property "-circuit1 $dev" parallel enable
 | 
			
		||||
	property "-circuit1 $dev" parallel {l critical}
 | 
			
		||||
	property "-circuit1 $dev" parallel {w add}
 | 
			
		||||
	property "-circuit1 $dev" parallel {value par}
 | 
			
		||||
	property "-circuit1 $dev" tolerance {l 0.01} {w 0.01}
 | 
			
		||||
	# Ignore these properties
 | 
			
		||||
	property "-circuit1 $dev" delete mult
 | 
			
		||||
    }
 | 
			
		||||
    if {[lsearch $cells2 $dev] >= 0} {
 | 
			
		||||
	permute "-circuit2 $dev" 1 2
 | 
			
		||||
	property "-circuit2 $dev" series enable
 | 
			
		||||
	property "-circuit2 $dev" series {w critical}
 | 
			
		||||
	property "-circuit2 $dev" series {l add}
 | 
			
		||||
	property "-circuit2 $dev" parallel enable
 | 
			
		||||
	property "-circuit2 $dev" parallel {l critical}
 | 
			
		||||
	property "-circuit2 $dev" parallel {w add}
 | 
			
		||||
	property "-circuit2 $dev" parallel {value par}
 | 
			
		||||
	property "-circuit2 $dev" tolerance {l 0.01} {w 0.01}
 | 
			
		||||
	# Ignore these properties
 | 
			
		||||
	property "-circuit2 $dev" delete mult
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
# MRM (metal) resistors and poly resistor
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
 | 
			
		||||
set devices {}
 | 
			
		||||
lappend devices sky130_fd_pr__res_generic_po
 | 
			
		||||
lappend devices sky130_fd_pr__res_generic_l1
 | 
			
		||||
lappend devices sky130_fd_pr__res_generic_m1
 | 
			
		||||
lappend devices sky130_fd_pr__res_generic_m2
 | 
			
		||||
lappend devices sky130_fd_pr__res_generic_m3
 | 
			
		||||
lappend devices sky130_fd_pr__res_generic_m4
 | 
			
		||||
lappend devices sky130_fd_pr__res_generic_m5
 | 
			
		||||
 | 
			
		||||
foreach dev $devices {
 | 
			
		||||
    if {[lsearch $cells1 $dev] >= 0} {
 | 
			
		||||
	permute "-circuit1 $dev" end_a end_b
 | 
			
		||||
	property "-circuit1 $dev" series enable
 | 
			
		||||
	property "-circuit1 $dev" series {w critical}
 | 
			
		||||
	property "-circuit1 $dev" series {l add}
 | 
			
		||||
	property "-circuit1 $dev" parallel enable
 | 
			
		||||
	property "-circuit1 $dev" parallel {l critical}
 | 
			
		||||
	property "-circuit1 $dev" parallel {w add}
 | 
			
		||||
	property "-circuit1 $dev" parallel {value par}
 | 
			
		||||
	property "-circuit1 $dev" tolerance {l 0.01} {w 0.01}
 | 
			
		||||
	# Ignore these properties
 | 
			
		||||
	property "-circuit1 $dev" delete mult
 | 
			
		||||
    }
 | 
			
		||||
    if {[lsearch $cells2 $dev] >= 0} {
 | 
			
		||||
	permute "-circuit2 $dev" end_a end_b
 | 
			
		||||
	property "-circuit2 $dev" series enable
 | 
			
		||||
	property "-circuit2 $dev" series {w critical}
 | 
			
		||||
	property "-circuit2 $dev" series {l add}
 | 
			
		||||
	property "-circuit2 $dev" parallel enable
 | 
			
		||||
	property "-circuit2 $dev" parallel {l critical}
 | 
			
		||||
	property "-circuit2 $dev" parallel {w add}
 | 
			
		||||
	property "-circuit2 $dev" parallel {value par}
 | 
			
		||||
	property "-circuit2 $dev" tolerance {l 0.01} {w 0.01}
 | 
			
		||||
	# Ignore these properties
 | 
			
		||||
	property "-circuit2 $dev" delete mult
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
# (MOS) transistors
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
 | 
			
		||||
set devices {}
 | 
			
		||||
lappend devices sky130_fd_pr__nfet_01v8
 | 
			
		||||
lappend devices sky130_fd_pr__nfet_01v8_lvt
 | 
			
		||||
lappend devices sky130_fd_bs_flash__special_sonosfet_star
 | 
			
		||||
lappend devices sky130_fd_pr__nfet_g5v0d10v5
 | 
			
		||||
lappend devices sky130_fd_pr__nfet_05v0_nvt
 | 
			
		||||
lappend devices sky130_fd_pr__pfet_01v8
 | 
			
		||||
lappend devices sky130_fd_pr__pfet_01v8_lvt
 | 
			
		||||
lappend devices sky130_fd_pr__pfet_01v8_mvt
 | 
			
		||||
lappend devices sky130_fd_pr__pfet_01v8_hvt
 | 
			
		||||
lappend devices sky130_fd_pr__pfet_g5v0d10v5
 | 
			
		||||
lappend devices sky130_fd_pr__special_pfet_pass
 | 
			
		||||
lappend devices sky130_fd_pr__special_nfet_pass
 | 
			
		||||
lappend devices sky130_fd_pr__special_nfet_latch
 | 
			
		||||
lappend devices sky130_fd_pr__cap_var_lvt
 | 
			
		||||
lappend devices sky130_fd_pr__cap_var_hvt
 | 
			
		||||
lappend devices sky130_fd_pr__cap_var
 | 
			
		||||
lappend devices sky130_fd_pr__nfet_20v0_nvt
 | 
			
		||||
lappend devices sky130_fd_pr__nfet_20v0
 | 
			
		||||
lappend devices sky130_fd_pr__pfet_20v0
 | 
			
		||||
 | 
			
		||||
foreach dev $devices {
 | 
			
		||||
    if {[lsearch $cells1 $dev] >= 0} {
 | 
			
		||||
	permute "-circuit1 $dev" 1 3
 | 
			
		||||
	property "-circuit1 $dev" parallel enable
 | 
			
		||||
	property "-circuit1 $dev" parallel {l critical}
 | 
			
		||||
	property "-circuit1 $dev" parallel {w add}
 | 
			
		||||
	property "-circuit1 $dev" tolerance {w 0.01} {l 0.01}
 | 
			
		||||
	# Ignore these properties
 | 
			
		||||
	property "-circuit1 $dev" delete as ad ps pd mult sa sb sd nf nrd nrs area perim topography
 | 
			
		||||
    }
 | 
			
		||||
    if {[lsearch $cells2 $dev] >= 0} {
 | 
			
		||||
	permute "-circuit2 $dev" 1 3
 | 
			
		||||
	property "-circuit2 $dev" parallel enable
 | 
			
		||||
	property "-circuit2 $dev" parallel {l critical}
 | 
			
		||||
	property "-circuit2 $dev" parallel {w add}
 | 
			
		||||
	property "-circuit2 $dev" tolerance {w 0.01} {l 0.01}
 | 
			
		||||
	# Ignore these properties
 | 
			
		||||
	property "-circuit2 $dev" delete as ad ps pd mult sa sb sd nf nrd nrs area perim topography
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#---------------------------------------------------------------------
 | 
			
		||||
# (MOS) ESD transistors.  Note that the ESD transistors have a flanged
 | 
			
		||||
# gate.  Magic disagrees slightly on how to interpret the width of the
 | 
			
		||||
# devices, so the tolerance is increased to 7% to cover the difference
 | 
			
		||||
#---------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
lappend devices sky130_fd_pr__esd_nfet_g5v0d10v5
 | 
			
		||||
lappend devices sky130_fd_pr__esd_pfet_g5v0d10v5
 | 
			
		||||
 | 
			
		||||
foreach dev $devices {
 | 
			
		||||
    if {[lsearch $cells1 $dev] >= 0} {
 | 
			
		||||
	permute "-circuit1 $dev" 1 3
 | 
			
		||||
	property "-circuit1 $dev" parallel enable
 | 
			
		||||
	property "-circuit1 $dev" parallel {l critical}
 | 
			
		||||
	property "-circuit1 $dev" parallel {w add}
 | 
			
		||||
	property "-circuit1 $dev" tolerance {w 0.07} {l 0.01}
 | 
			
		||||
	# Ignore these properties
 | 
			
		||||
	property "-circuit1 $dev" delete as ad ps pd mult sa sb sd nf nrd nrs area perim topography
 | 
			
		||||
    }
 | 
			
		||||
    if {[lsearch $cells2 $dev] >= 0} {
 | 
			
		||||
	permute "-circuit2 $dev" 1 3
 | 
			
		||||
	property "-circuit2 $dev" parallel enable
 | 
			
		||||
	property "-circuit2 $dev" parallel {l critical}
 | 
			
		||||
	property "-circuit2 $dev" parallel {w add}
 | 
			
		||||
	property "-circuit2 $dev" tolerance {w 0.07} {l 0.01}
 | 
			
		||||
	# Ignore these properties
 | 
			
		||||
	property "-circuit2 $dev" delete as ad ps pd mult sa sb sd nf nrd nrs area perim topography
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
# diodes
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
 | 
			
		||||
set devices {}
 | 
			
		||||
lappend devices sky130_fd_pr__diode_pw2nd_05v5
 | 
			
		||||
lappend devices sky130_fd_pr__diode_pw2nd_05v5_lvt
 | 
			
		||||
lappend devices sky130_fd_pr__diode_pw2nd_05v5_nvt
 | 
			
		||||
lappend devices sky130_fd_pr__diode_pd2nw_05v5
 | 
			
		||||
lappend devices sky130_fd_pr__diode_pd2nw_05v5_lvt
 | 
			
		||||
lappend devices sky130_fd_pr__diode_pd2nw_05v5_hvt
 | 
			
		||||
lappend devices sky130_fd_pr__diode_pw2nd_11v0
 | 
			
		||||
lappend devices sky130_fd_pr__diode_pd2nw_11v0
 | 
			
		||||
 | 
			
		||||
foreach dev $devices {
 | 
			
		||||
    if {[lsearch $cells1 $dev] >= 0} {
 | 
			
		||||
	property "-circuit1 $dev" parallel enable
 | 
			
		||||
	property "-circuit1 $dev" parallel {area add}
 | 
			
		||||
	property "-circuit1 $dev" parallel {value add}
 | 
			
		||||
	property "-circuit1 $dev" tolerance {area 0.02}
 | 
			
		||||
	# Ignore these properties
 | 
			
		||||
	property "-circuit1 $dev" delete mult perim
 | 
			
		||||
    }
 | 
			
		||||
    if {[lsearch $cells2 $dev] >= 0} {
 | 
			
		||||
	property "-circuit2 $dev" parallel enable
 | 
			
		||||
	property "-circuit2 $dev" parallel {area add}
 | 
			
		||||
	property "-circuit2 $dev" parallel {value add}
 | 
			
		||||
	property "-circuit2 $dev" tolerance {area 0.02}
 | 
			
		||||
	# Ignore these properties
 | 
			
		||||
	property "-circuit2 $dev" delete mult perim
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
# capacitors
 | 
			
		||||
# MiM capacitors
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
 | 
			
		||||
set devices {}
 | 
			
		||||
lappend devices sky130_fd_pr__cap_mim_m3_1
 | 
			
		||||
lappend devices sky130_fd_pr__cap_mim_m3_2
 | 
			
		||||
 | 
			
		||||
foreach dev $devices {
 | 
			
		||||
    if {[lsearch $cells1 $dev] >= 0} {
 | 
			
		||||
	property "-circuit1 $dev" parallel enable
 | 
			
		||||
	property "-circuit1 $dev" parallel {area add}
 | 
			
		||||
	property "-circuit1 $dev" parallel {value add}
 | 
			
		||||
	property "-circuit1 $dev" tolerance {l 0.01} {w 0.01}
 | 
			
		||||
	# Ignore these properties
 | 
			
		||||
	property "-circuit1 $dev" delete mult perim mf
 | 
			
		||||
    }
 | 
			
		||||
    if {[lsearch $cells2 $dev] >= 0} {
 | 
			
		||||
	property "-circuit2 $dev" parallel enable
 | 
			
		||||
	property "-circuit2 $dev" parallel {area add}
 | 
			
		||||
	property "-circuit2 $dev" parallel {value add}
 | 
			
		||||
	property "-circuit2 $dev" tolerance {l 0.01} {w 0.01}
 | 
			
		||||
	# Ignore these properties
 | 
			
		||||
	property "-circuit2 $dev" delete mult perim mf
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
# Fixed-layout devices
 | 
			
		||||
# bipolar transistors,
 | 
			
		||||
# VPP capacitors
 | 
			
		||||
#-------------------------------------------
 | 
			
		||||
 | 
			
		||||
set devices {}
 | 
			
		||||
lappend devices sky130_fd_pr__npn_05v5_W1p00L1p00
 | 
			
		||||
lappend devices sky130_fd_pr__npn_05v5_W1p00L2p00
 | 
			
		||||
lappend devices sky130_fd_pr__pnp_05v5_W0p68L0p68
 | 
			
		||||
lappend devices sky130_fd_pr__pnp_05v5_W3p40L3p40
 | 
			
		||||
lappend devices sky130_fd_pr__npn_05v5
 | 
			
		||||
lappend devices sky130_fd_pr__pnp_05v5
 | 
			
		||||
lappend devices sky130_fd_pr__npn_11v0
 | 
			
		||||
 | 
			
		||||
lappend devices sky130_fd_pr__cap_vpp_11p5x11p7_lim5_shield
 | 
			
		||||
lappend devices sky130_fd_pr__cap_vpp_11p5x11p7_m3_lim5_shield
 | 
			
		||||
lappend devices sky130_fd_pr__cap_vpp_11p5x11p7_m4_shield
 | 
			
		||||
lappend devices sky130_fd_pr__cap_vpp_11p5x11p7_pom4_shield
 | 
			
		||||
lappend devices sky130_fd_pr__cap_vpp_4p4x4p6_m3_lim5_shield
 | 
			
		||||
lappend devices sky130_fd_pr__cap_vpp_6p8x6p1_lim4_shield
 | 
			
		||||
lappend devices sky130_fd_pr__cap_vpp_6p8x6p1_polym4_shield
 | 
			
		||||
lappend devices sky130_fd_pr__cap_vpp_8p6x7p9_m3_lim5_shield
 | 
			
		||||
lappend devices sky130_fd_pr__cap_vpp_11p5x11p7_m3_li_shield
 | 
			
		||||
lappend devices sky130_fd_pr__cap_vpp_11p5x11p7_m3_shield
 | 
			
		||||
lappend devices sky130_fd_pr__cap_vpp_1p8x1p8_li_shield
 | 
			
		||||
lappend devices sky130_fd_pr__cap_vpp_1p8x1p8_m3_shield
 | 
			
		||||
lappend devices sky130_fd_pr__cap_vpp_4p4x4p6_m3_li_shield
 | 
			
		||||
lappend devices sky130_fd_pr__cap_vpp_4p4x4p6_m3_shield
 | 
			
		||||
lappend devices sky130_fd_pr__cap_vpp_8p6x7p9_m3_li_shield
 | 
			
		||||
lappend devices sky130_fd_pr__cap_vpp_8p6x7p9_m3_shield
 | 
			
		||||
lappend devices sky130_fd_pr__ind_04_01
 | 
			
		||||
lappend devices sky130_fd_pr__ind_04_02
 | 
			
		||||
 | 
			
		||||
foreach dev $devices {
 | 
			
		||||
    if {[lsearch $cells1 $dev] >= 0} {
 | 
			
		||||
	property "-circuit1 $dev" parallel enable
 | 
			
		||||
	# Ignore these properties
 | 
			
		||||
	property "-circuit1 $dev" delete mult
 | 
			
		||||
    }
 | 
			
		||||
    if {[lsearch $cells2 $dev] >= 0} {
 | 
			
		||||
	property "-circuit2 $dev" parallel enable
 | 
			
		||||
	# Ignore these properties
 | 
			
		||||
	property "-circuit2 $dev" delete mult
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#---------------------------------------------------------------
 | 
			
		||||
# Schematic cells which are not extractable
 | 
			
		||||
#---------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
set devices {sky130_fd_io__condiode sky130_fd_io__tap_1}
 | 
			
		||||
 | 
			
		||||
foreach dev $devices {
 | 
			
		||||
    if {[lsearch $cells1 $dev] >= 0} {
 | 
			
		||||
    	ignore class "-circuit1 $dev"
 | 
			
		||||
    }
 | 
			
		||||
    if {[lsearch $cells2 $dev] >= 0} {
 | 
			
		||||
	ignore class "-circuit2 $dev"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#---------------------------------------------------------------
 | 
			
		||||
# Digital cells (ignore decap, fill, and tap cells)
 | 
			
		||||
# Make a separate list for each supported library
 | 
			
		||||
#---------------------------------------------------------------
 | 
			
		||||
# e.g., ignore class "-circuit2 sky130_fc_sc_hd__decap_3"
 | 
			
		||||
#---------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
if { [info exist ::env(MAGIC_EXT_USE_GDS)] && $::env(MAGIC_EXT_USE_GDS) } {
 | 
			
		||||
    foreach cell $cells1 {
 | 
			
		||||
#        if {[regexp {sky130_fd_sc_[^_]+__decap_[[:digit:]]+} $cell match]} {
 | 
			
		||||
#            ignore class "-circuit1 $cell"
 | 
			
		||||
#        }
 | 
			
		||||
        if {[regexp {sky130_fd_sc_[^_]+__fill_[[:digit:]]+} $cell match]} {
 | 
			
		||||
            ignore class "-circuit1 $cell"
 | 
			
		||||
        }
 | 
			
		||||
        if {[regexp {sky130_fd_sc_[^_]+__tapvpwrvgnd_[[:digit:]]+} $cell match]} {
 | 
			
		||||
            ignore class "-circuit1 $cell"
 | 
			
		||||
        }
 | 
			
		||||
        if {[regexp {sky130_ef_sc_[^_]+__fakediode_[[:digit:]]+} $cell match]} {
 | 
			
		||||
            ignore class "-circuit1 $cell"
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    foreach cell $cells2 {
 | 
			
		||||
#        if {[regexp {sky130_fd_sc_[^_]+__decap_[[:digit:]]+} $cell match]} {
 | 
			
		||||
#            ignore class "-circuit2 $cell"
 | 
			
		||||
#        }
 | 
			
		||||
        if {[regexp {sky130_fd_sc_[^_]+__fill_[[:digit:]]+} $cell match]} {
 | 
			
		||||
            ignore class "-circuit2 $cell"
 | 
			
		||||
        }
 | 
			
		||||
        if {[regexp {sky130_fd_sc_[^_]+__tapvpwrvgnd_[[:digit:]]+} $cell match]} {
 | 
			
		||||
            ignore class "-circuit2 $cell"
 | 
			
		||||
        }
 | 
			
		||||
        if {[regexp {sky130_ef_sc_[^_]+__fakediode_[[:digit:]]+} $cell match]} {
 | 
			
		||||
            ignore class "-circuit2 $cell"
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#---------------------------------------------------------------
 | 
			
		||||
# Allow the fill, decap, etc., cells to be parallelized
 | 
			
		||||
#---------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
foreach cell $cells1 {
 | 
			
		||||
    if {[regexp {sky130_ef_sc_[^_]+__decap_[[:digit:]]+} $cell match]} {
 | 
			
		||||
	property "-circuit1 $cell" parallel enable
 | 
			
		||||
    }
 | 
			
		||||
    if {[regexp {sky130_fd_sc_[^_]+__decap_[[:digit:]]+} $cell match]} {
 | 
			
		||||
	property "-circuit1 $cell" parallel enable
 | 
			
		||||
    }
 | 
			
		||||
    if {[regexp {sky130_fd_sc_[^_]+__fill_[[:digit:]]+} $cell match]} {
 | 
			
		||||
	property "-circuit1 $cell" parallel enable
 | 
			
		||||
    }
 | 
			
		||||
    if {[regexp {sky130_fd_sc_[^_]+__tapvpwrvgnd_[[:digit:]]+} $cell match]} {
 | 
			
		||||
	property "-circuit1 $cell" parallel enable
 | 
			
		||||
    }
 | 
			
		||||
    if {[regexp {sky130_fd_sc_[^_]+__diode_[[:digit:]]+} $cell match]} {
 | 
			
		||||
	property "-circuit1 $cell" parallel enable
 | 
			
		||||
    }
 | 
			
		||||
    if {[regexp {sky130_fd_sc_[^_]+__fill_diode_[[:digit:]]+} $cell match]} {
 | 
			
		||||
	property "-circuit1 $cell" parallel enable
 | 
			
		||||
    }
 | 
			
		||||
    if {[regexp {sky130_ef_sc_[^_]+__fakediode_[[:digit:]]+} $cell match]} {
 | 
			
		||||
	property "-circuit1 $cell" parallel enable
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
foreach cell $cells2 {
 | 
			
		||||
    if {[regexp {sky130_ef_sc_[^_]+__decap_[[:digit:]]+} $cell match]} {
 | 
			
		||||
	property "-circuit2 $cell" parallel enable
 | 
			
		||||
    }
 | 
			
		||||
    if {[regexp {sky130_fd_sc_[^_]+__decap_[[:digit:]]+} $cell match]} {
 | 
			
		||||
	property "-circuit2 $cell" parallel enable
 | 
			
		||||
    }
 | 
			
		||||
    if {[regexp {sky130_fd_sc_[^_]+__fill_[[:digit:]]+} $cell match]} {
 | 
			
		||||
	property "-circuit2 $cell" parallel enable
 | 
			
		||||
    }
 | 
			
		||||
    if {[regexp {sky130_fd_sc_[^_]+__tapvpwrvgnd_[[:digit:]]+} $cell match]} {
 | 
			
		||||
	property "-circuit2 $cell" parallel enable
 | 
			
		||||
    }
 | 
			
		||||
    if {[regexp {sky130_fd_sc_[^_]+__diode_[[:digit:]]+} $cell match]} {
 | 
			
		||||
	property "-circuit2 $cell" parallel enable
 | 
			
		||||
    }
 | 
			
		||||
    if {[regexp {sky130_fd_sc_[^_]+__fill_diode_[[:digit:]]+} $cell match]} {
 | 
			
		||||
	property "-circuit2 $cell" parallel enable
 | 
			
		||||
    }
 | 
			
		||||
    if {[regexp {sky130_ef_sc_[^_]+__fakediode_[[:digit:]]+} $cell match]} {
 | 
			
		||||
	property "-circuit2 $cell" parallel enable
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#---------------------------------------------------------------
 | 
			
		||||
# Handle cells captured from Electric
 | 
			
		||||
#
 | 
			
		||||
# Find cells of the form "<library>__<cellname>" in the netlist
 | 
			
		||||
# from Electric where the extracted layout netlist has only
 | 
			
		||||
# "<cellname>".  Cross-check by ensuring that the full name
 | 
			
		||||
# "<library>__<cellname>" does not exist in both cells, and that
 | 
			
		||||
# the truncated name "<cellname>" does not exist in both cells.
 | 
			
		||||
#---------------------------------------------------------------
 | 
			
		||||
# e.g., hydra_spi_controller__hydra_spi_controller
 | 
			
		||||
#---------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
foreach cell $cells1 {
 | 
			
		||||
    if {[regexp "(.+)__(.+)" $cell match library cellname]} {
 | 
			
		||||
        if {([lsearch $cells2 $cell] < 0) && \
 | 
			
		||||
                ([lsearch $cells2 $cellname] >= 0) && \
 | 
			
		||||
                ([lsearch $cells1 $cellname] < 0)} {
 | 
			
		||||
            equate classes "-circuit1 $cell" "-circuit2 $cellname"
 | 
			
		||||
	    puts stdout "Matching pins of $cell in circuit 1 and $cellname in circuit 2"
 | 
			
		||||
	    equate pins "-circuit1 $cell" "-circuit2 $cellname"
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
foreach cell $cells2 {
 | 
			
		||||
    if {[regexp "(.+)__(.+)" $cell match library cellname]} {
 | 
			
		||||
        if {([lsearch $cells1 $cell] < 0) && \
 | 
			
		||||
                ([lsearch $cells1 $cellname] >= 0) && \
 | 
			
		||||
                ([lsearch $cells2 $cellname] < 0)} {
 | 
			
		||||
            equate classes "-circuit1 $cellname" "-circuit2 $cell"
 | 
			
		||||
	    puts stdout "Matching pins of $cellname in circuit 1 and $cell in circuit 2"
 | 
			
		||||
	    equate pins "-circuit1 $cellname" "-circuit2 $cell"
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Match pins on black-box cells if LVS is called with "-blackbox"
 | 
			
		||||
if {[model blackbox]} {
 | 
			
		||||
    foreach cell $cells1 {
 | 
			
		||||
	if {[model "-circuit1 $cell"] == "blackbox"} {
 | 
			
		||||
	    if {[lsearch $cells2 $cell] >= 0} {
 | 
			
		||||
		puts stdout "Matching pins of $cell in circuits 1 and 2"
 | 
			
		||||
		equate pins "-circuit1 $cell" "-circuit2 $cell"
 | 
			
		||||
	    }
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#---------------------------------------------------------------
 | 
			
		||||
					Loading…
					
					
				
		Reference in New Issue