Added cifinput handlers to track NWELL and HVI and pull them up into
higher levels of the hierarchy so that they combine properly with
some geometry used in the I/O cells to patch over the top.
diff --git a/sky130/magic/sky130.tech b/sky130/magic/sky130.tech
index 06e7b15..fa71d6b 100644
--- a/sky130/magic/sky130.tech
+++ b/sky130/magic/sky130.tech
@@ -2291,10 +2291,24 @@
variants *
labels SUBPIN port
+ templayer nwellarea NWELL
+ copyup nwelcheck
+
+ # Copy nwell areas up for diffusion checks
+ templayer xnwelcheck nwelcheck
+ copyup nwelcheck
+
+ templayer hvarea HVI
+ copyup hvcheck
+
+ # Copy high-voltage (HVI) areas up for diffusion checks
+ templayer xhvcheck hvcheck
+ copyup hvcheck
+
# Always draw pwell under p-tap and n-diff. This is not always
# necessary but works better with deep nwell for correct extraction.
layer pwell TAP,DIFF
- and-not NWELL
+ and-not NWELL,nwelcheck
grow 130
grow 420
shrink 420
@@ -2303,7 +2317,7 @@
labels DNWELL
layer npn DNWELL
- and-not NWELL
+ and-not NWELL,nwelcheck
and NPNID
layer rpw PWRES
@@ -2312,11 +2326,11 @@
templayer ndiffarea DIFF,DIFFTXT,DIFFPIN,barediff
and-not POLY
- and-not NWELL
+ and-not NWELL,nwelcheck
and-not PSDM
and-not DIODE
and-not DIFFRES
- and-not HVI
+ and-not HVI,hvcheck
and NSDM
and-not CORELI
copyup ndifcheck
@@ -2336,11 +2350,11 @@
templayer mvndiffarea DIFF,DIFFTXT,DIFFPIN,barediff
and-not POLY
- and-not NWELL
+ and-not NWELL,nwelcheck
and-not PSDM
and-not DIODE
and-not DIFFRES
- and HVI
+ and HVI,hvcheck
and NSDM
copyup ndifcheck
labels DIFF
@@ -2361,40 +2375,40 @@
layer ndiode DIFF,barediff
and NSDM
and DIODE
- and-not NWELL
+ and-not NWELL,nwelcheck
and-not POLY
and-not PSDM
- and-not HVI
+ and-not HVI,hvcheck
and-not LVTN
labels DIFF
layer ndiodelvt DIFF,barediff
and NSDM
and DIODE
- and-not NWELL
+ and-not NWELL,nwelcheck
and-not POLY
and-not PSDM
- and-not HVI
+ and-not HVI,hvcheck
and LVTN
labels DIFF
templayer ndiodearea DIODE
and NSDM
- and-not HVI
- and-not NWELL
+ and-not HVI,hvcheck
+ and-not NWELL,nwelcheck
copyup DIODE,NSDM
layer ndiffres DIFFRES
and NSDM
- and-not HVI
+ and-not HVI,hvcheck
labels DIFF
templayer pdiffarea DIFF,DIFFTXT,DIFFPIN,barediff
and-not POLY
- and NWELL
+ and NWELL,nwelcheck
and-not NSDM
and-not DIODE
- and-not HVI
+ and-not HVI,hvcheck
and PSDM
copyup pdifcheck
labels DIFF
@@ -2410,7 +2424,7 @@
layer mvndiode DIFF,barediff
and NSDM
and DIODE
- and HVI
+ and HVI,hvcheck
and-not POLY
and-not PSDM
and-not LVTN
@@ -2419,7 +2433,7 @@
layer nndiode DIFF,barediff
and NSDM
and DIODE
- and HVI
+ and HVI,hvcheck
and-not POLY
and-not PSDM
and LVTN
@@ -2427,20 +2441,20 @@
templayer mvndiodearea DIODE
and NSDM
- and HVI
- and-not NWELL
+ and HVI,hvcheck
+ and-not NWELL,nwelcheck
copyup DIODE,NSDM
layer mvndiffres DIFFRES
and NSDM
- and HVI
+ and HVI,hvcheck
labels DIFF
templayer mvpdiffarea DIFF,DIFFTXT,DIFFPIN,barediff
and-not POLY
- and NWELL
+ and NWELL,nwelcheck
and-not NSDM
- and HVI
+ and HVI,hvcheck
and-not DIODE
and-not DIFFRES
and PSDM
@@ -2463,7 +2477,7 @@
and PSDM
and-not POLY
and-not NSDM
- and-not HVI
+ and-not HVI,hvcheck
and-not LVTN
and-not HVTP
and DIODE
@@ -2473,7 +2487,7 @@
and PSDM
and-not POLY
and-not NSDM
- and-not HVI
+ and-not HVI,hvcheck
and LVTN
and-not HVTP
and DIODE
@@ -2483,7 +2497,7 @@
and PSDM
and-not POLY
and-not NSDM
- and-not HVI
+ and-not HVI,hvcheck
and-not LVTN
and HVTP
and DIODE
@@ -2491,7 +2505,7 @@
templayer pdiodearea DIODE
and PSDM
- and-not HVI
+ and-not HVI,hvcheck
copyup DIODE,PSDM
# Define pfet areas as known pdiff, regardless of the presence of a well.
@@ -2500,7 +2514,7 @@
and POLY
or baretrans
and-not NSDM
- and-not HVI
+ and-not HVI,hvcheck
layer pfet pfetarea
and-not LVTN
@@ -2557,13 +2571,13 @@
and PSDM
and-not POLY
and-not NSDM
- and HVI
+ and HVI,hvcheck
and DIODE
labels DIFF
templayer mvpdiodearea DIODE
and PSDM
- and HVI
+ and HVI,hvcheck
copyup DIODE,PSDM
# Define pfet areas as known pdiff,
@@ -2574,7 +2588,7 @@
and POLY
or baretrans
and-not NSDM
- and HVI
+ and HVI,hvcheck
layer mvpfet mvpfetarea
and-not ESDID
@@ -2587,7 +2601,7 @@
layer pdiff DIFF,DIFFTXT,DIFFPIN,barediff
and-not NSDM
and-not POLY
- and-not HVI
+ and-not HVI,hvcheck
and-not DIODE
and-not DIFFRES
labels DIFF
@@ -2600,8 +2614,8 @@
layer pdiffres DIFFRES
and PSDM
- and NWELL
- and-not HVI
+ and NWELL,nwelcheck
+ and-not HVI,hvcheck
labels DIFF
layer nfet DIFF,barediff
@@ -2609,7 +2623,7 @@
or baretrans
and-not PSDM
and NSDM
- and-not HVI
+ and-not HVI,hvcheck
and-not LVTN
and-not SONOS
and-not STDCELL
@@ -2621,8 +2635,8 @@
or baretrans
and-not PSDM
and NSDM
- and-not NWELL
- and-not HVI
+ and-not NWELL,nwelcheck
+ and-not HVI,hvcheck
and-not LVTN
and-not SONOS
and STDCELL
@@ -2633,7 +2647,7 @@
or baretrans
and-not PSDM
and NSDM
- and-not NWELL
+ and-not NWELL,nwelcheck
and COREID
labels DIFF
@@ -2642,7 +2656,7 @@
or baretrans
and-not PSDM
and NSDM
- and-not NWELL
+ and-not NWELL,nwelcheck
and COREID
# Shrink-grow operation eliminates the smaller npass device
shrink 70
@@ -2656,7 +2670,7 @@
and POLY
and-not PSDM
and NSDM
- and-not NWELL
+ and-not NWELL,nwelcheck
and COREID
labels DIFF
@@ -2665,7 +2679,7 @@
or baretrans
and-not PSDM
and NSDM
- and-not HVI
+ and-not HVI,hvcheck
and LVTN
and-not SONOS
labels DIFF
@@ -2675,17 +2689,17 @@
or baretrans
and-not PSDM
and NSDM
- and-not HVI
+ and-not HVI,hvcheck
and LVTN
and SONOS
labels DIFF
templayer nsdarea TAP
and NSDM
- and NWELL
+ and NWELL,nwelcheck
and-not POLY
and-not PSDM
- and-not HVI
+ and-not HVI,hvcheck
and-not CORELI
copyup nsubcheck
@@ -2695,7 +2709,7 @@
layer nsd TAP,TAPTXT
and NSDM
and-not POLY
- and-not HVI
+ and-not HVI,hvcheck
labels TAP
labels TAPTXT text
@@ -2714,10 +2728,10 @@
templayer psdarea TAP
and PSDM
- and-not NWELL
+ and-not NWELL,nwelcheck
and-not POLY
and-not NSDM
- and-not HVI
+ and-not HVI,hvcheck
and-not pfetexpand
copyup psubcheck
@@ -2727,7 +2741,7 @@
layer psd TAP
and PSDM
and-not POLY
- and-not HVI
+ and-not HVI,hvcheck
labels TAP
labels TAPTXT text
@@ -2743,7 +2757,7 @@
layer mvpdiff DIFF,DIFFTXT,DIFFPIN,barediff
and-not NSDM
and-not POLY
- and HVI
+ and HVI,hvcheck
and mvpfetexpand
labels DIFF
variants (vendor)
@@ -2755,8 +2769,8 @@
layer mvpdiffres DIFFRES
and PSDM
- and NWELL
- and HVI
+ and NWELL,nwelcheck
+ and HVI,hvcheck
and-not mvrdpioedge
labels DIFF
@@ -2766,7 +2780,7 @@
and-not PSDM
and NSDM
and-not LVTN
- and HVI
+ and HVI,hvcheck
grow 350
templayer mvnnfetarea DIFF,TAP,barediff
@@ -2775,7 +2789,7 @@
and-not PSDM
and NSDM
and LVTN
- and HVI
+ and HVI,hvcheck
and-not mvnfetarea
layer mvnfetesd DIFF,barediff
@@ -2783,7 +2797,7 @@
or baretrans
and-not PSDM
and NSDM
- and HVI
+ and HVI,hvcheck
and ESDID
and-not mvnnfetarea
labels DIFF
@@ -2793,7 +2807,7 @@
or baretrans
and-not PSDM
and NSDM
- and HVI
+ and HVI,hvcheck
and-not ESDID
and-not mvnnfetarea
labels DIFF
@@ -2808,10 +2822,10 @@
templayer mvnsdarea TAP
and NSDM
- and NWELL
+ and NWELL,nwelcheck
and-not POLY
and-not PSDM
- and HVI
+ and HVI,hvcheck
copyup mvnsubcheck
layer mvnsd mvnsdarea
@@ -2819,7 +2833,7 @@
layer mvnsd TAP,TAPTXT
and NSDM
- and HVI
+ and HVI,hvcheck
labels TAP
labels TAPTXT text
@@ -2832,10 +2846,10 @@
templayer mvpsdarea DIFF,barediff
and PSDM
- and-not NWELL
+ and-not NWELL,nwelcheck
and-not POLY
and-not NSDM
- and HVI
+ and HVI,hvcheck
and-not mvpfetexpand
copyup mvpsubcheck
@@ -2844,7 +2858,7 @@
layer mvpsd TAP,TAPTXT
and PSDM
- and HVI
+ and HVI,hvcheck
labels TAP
labels TAPTXT text
@@ -2862,7 +2876,7 @@
and-not PSDM
and-not NSDM
and-not POLY
- and-not HVI
+ and-not HVI,hvcheck
and-not pfetexpand
and psdexpand
@@ -2870,14 +2884,14 @@
and-not PSDM
and-not NSDM
and-not POLY
- and-not HVI
+ and-not HVI,hvcheck
and nsdexpand
layer mvpsd TAP
and-not PSDM
and-not NSDM
and-not POLY
- and HVI
+ and HVI,hvcheck
and-not mvpfetexpand
and mvpsdexpand
@@ -2885,7 +2899,7 @@
and-not PSDM
and-not NSDM
and-not POLY
- and HVI
+ and HVI,hvcheck
and mvnsdexpand
templayer hresarea POLY
@@ -2897,11 +2911,11 @@
grow 3000
templayer diffresarea DIFFRES
- and-not HVI
+ and-not HVI,hvcheck
grow 3000
templayer mvdiffresarea DIFFRES
- and HVI
+ and HVI,hvcheck
grow 3000
templayer resarea diffresarea,mvdiffresarea,hresarea,uresarea
@@ -2990,8 +3004,8 @@
or licont
and DIFF
and NSDM
- and-not NWELL
- and-not HVI
+ and-not NWELL,nwelcheck
+ and-not HVI,hvcheck
layer ndc ndcbase
grow 85
@@ -3007,8 +3021,8 @@
or licont
and DIFF,TAP
and NSDM
- and NWELL
- and-not HVI
+ and NWELL,nwelcheck
+ and-not HVI,hvcheck
layer nsc nscbase
grow 85
@@ -3024,8 +3038,8 @@
or licont
and DIFF
and PSDM
- and NWELL
- and-not HVI
+ and NWELL,nwelcheck
+ and-not HVI,hvcheck
layer pdc pdcbase
grow 85
@@ -3042,7 +3056,7 @@
and DIFF
and PSDM
and pfetexpand
- and-not HVI
+ and-not HVI,hvcheck
layer pdc pdcnowell
grow 85
@@ -3058,9 +3072,9 @@
or licont
and DIFF,TAP
and PSDM
- and-not NWELL
+ and-not NWELL,nwelcheck
and-not pfetexpand
- and-not HVI
+ and-not HVI,hvcheck
layer psc pscbase
grow 85
@@ -3095,7 +3109,7 @@
and DIODE
and-not POLY
and-not PSDM
- and-not HVI
+ and-not HVI,hvcheck
and-not LVTN
layer ndic ndicbase
@@ -3115,7 +3129,7 @@
and DIODE
and-not POLY
and-not PSDM
- and-not HVI
+ and-not HVI,hvcheck
and LVTN
layer ndilvtc ndilvtcbase
@@ -3135,7 +3149,7 @@
and DIODE
and-not POLY
and-not NSDM
- and-not HVI
+ and-not HVI,hvcheck
and-not LVTN
and-not HVTP
@@ -3156,7 +3170,7 @@
and DIODE
and-not POLY
and-not NSDM
- and-not HVI
+ and-not HVI,hvcheck
and LVTN
and-not HVTP
@@ -3177,7 +3191,7 @@
and DIODE
and-not POLY
and-not NSDM
- and-not HVI
+ and-not HVI,hvcheck
and-not LVTN
and HVTP
@@ -3195,8 +3209,8 @@
or licont
and DIFF
and NSDM
- and-not NWELL
- and HVI
+ and-not NWELL,nwelcheck
+ and HVI,hvcheck
layer mvndc mvndcbase
grow 85
@@ -3212,8 +3226,8 @@
or licont
and DIFF,TAP
and NSDM
- and NWELL
- and HVI
+ and NWELL,nwelcheck
+ and HVI,hvcheck
layer mvnsc mvnscbase
grow 85
@@ -3229,8 +3243,8 @@
or licont
and DIFF
and PSDM
- and NWELL
- and HVI
+ and NWELL,nwelcheck
+ and HVI,hvcheck
layer mvpdc mvpdcbase
grow 85
@@ -3248,7 +3262,7 @@
and PSDM
and mvpfetexpand
and MET1
- and HVI
+ and HVI,hvcheck
layer mvpdc mvpdcnowell
grow 85
@@ -3264,9 +3278,9 @@
or licont
and DIFF,TAP
and PSDM
- and-not NWELL
+ and-not NWELL,nwelcheck
and-not mvpfetexpand
- and HVI
+ and HVI,hvcheck
layer mvpsc mvpscbase
grow 85
@@ -3286,7 +3300,7 @@
and-not POLY
and-not PSDM
and-not LVTN
- and HVI
+ and HVI,hvcheck
layer mvndic mvndicbase
grow 85
@@ -3306,7 +3320,7 @@
and-not POLY
and-not PSDM
and LVTN
- and HVI
+ and HVI,hvcheck
layer nndic nndicbase
grow 85
@@ -3325,7 +3339,7 @@
and DIODE
and-not POLY
and-not NSDM
- and HVI
+ and HVI,hvcheck
layer mvpdic mvpdicbase
grow 85
@@ -3574,7 +3588,7 @@
and LI
and DIODE
and NSDM
- and-not HVI
+ and-not HVI,hvcheck
layer ndic ndiccopy
grow 85
@@ -3588,7 +3602,7 @@
and LI
and DIODE
and NSDM
- and HVI
+ and HVI,hvcheck
layer mvndic mvndiccopy
grow 85
@@ -3602,7 +3616,7 @@
and LI
and DIODE
and PSDM
- and-not HVI
+ and-not HVI,hvcheck
layer pdic pdiccopy
grow 85
@@ -3616,7 +3630,7 @@
and LI
and DIODE
and PSDM
- and HVI
+ and HVI,hvcheck
layer mvpdic mvpdiccopy
grow 85
@@ -3778,8 +3792,8 @@
layer var POLY
and TAP
and NSDM
- and NWELL
- and-not HVI
+ and NWELL,nwelcheck
+ and-not HVI,hvcheck
and-not HVTP
# NOTE: Else forms a varactor that is not in the vendor netlist.
and-not COREID
@@ -3788,16 +3802,16 @@
layer varhvt POLY
and TAP
and NSDM
- and NWELL
- and-not HVI
+ and NWELL,nwelcheck
+ and-not HVI,hvcheck
and HVTP
labels POLY
layer mvvar POLY
and TAP
and NSDM
- and NWELL
- and HVI
+ and NWELL,nwelcheck
+ and HVI,hvcheck
labels POLY
calma NWELL 64 20