Modified the "wafflefill" cifoutput style to deal with the problem
of certain positional offsets preventing FOM fill in otherwise
fillable areas; this causes poly fill to fill those areas so that
the areas become too low density in diffusion. The solution is to
add an in-between pass that uses the same size fill shapes as the
FOM first pass, but with a Y offset of half the FOM fill row pitch.
The proper solution is to have a progressive Y offset like the
progressive X offset, but that needs to be coded in magic.
diff --git a/sky130/magic/sky130.tech b/sky130/magic/sky130.tech
index 678af96..942b449 100644
--- a/sky130/magic/sky130.tech
+++ b/sky130/magic/sky130.tech
@@ -1900,9 +1900,23 @@
shrink 2035
grow 2035
+# Temporary: pass1a fills in areas that are pathologically unable to
+# fit fomfill_pass1 due to offsets. It should be fixed by implementing
+# a proper slots Y offset in addition to the X offset.
+
+ templayer obstruct_fom_pass1a fomfill_pass1
+ grow 1590
+ or obstruct_fom
+ templayer fomfill_pass1a topbox
+ slots 0 4080 1600 0 4080 1600 1360 2840
+ and-not obstruct_fom_pass1a
+ and topbox
+ shrink 2035
+ grow 2035
+
#---------------------------------------------------
- templayer obstruct_poly_pass1 fomfill_pass1
+ templayer obstruct_poly_pass1 fomfill_pass1,fomfill_pass1a
grow 300
or obstruct_poly
templayer polyfill_pass1 topbox
@@ -1914,7 +1928,7 @@
#---------------------------------------------------
- templayer obstruct_fom_pass2 fomfill_pass1
+ templayer obstruct_fom_pass2 fomfill_pass1,fomfill_pass1a
grow 1290
or polyfill_pass1
grow 300
@@ -1930,7 +1944,7 @@
templayer obstruct_poly_coarse polyfill_pass1
grow 60
- or fomfill_pass1,fomfill_pass2
+ or fomfill_pass1,fomfill_pass1a,fomfill_pass2
grow 300
or obstruct_poly
templayer polyfill_coarse topbox
@@ -1943,7 +1957,7 @@
#---------------------------------------------------
templayer obstruct_poly_medium polyfill_pass1,polyfill_coarse
grow 60
- or fomfill_pass1,fomfill_pass2
+ or fomfill_pass1,fomfill_pass1a,fomfill_pass2
grow 300
or obstruct_poly
templayer polyfill_medium topbox
@@ -1956,7 +1970,7 @@
#---------------------------------------------------
templayer obstruct_poly_fine polyfill_pass1,polyfill_coarse,polyfill_medium
grow 60
- or fomfill_pass1,fomfill_pass2
+ or fomfill_pass1,fomfill_pass1a,fomfill_pass2
grow 300
or obstruct_poly
templayer polyfill_fine topbox
@@ -1968,7 +1982,7 @@
#---------------------------------------------------
- templayer obstruct_fom_coarse fomfill_pass1,fomfill_pass2
+ templayer obstruct_fom_coarse fomfill_pass1,fomfill_pass1a,fomfill_pass2
grow 1290
or polyfill_pass1,polyfill_coarse,polyfill_medium,polyfill_fine
grow 300
@@ -1982,7 +1996,7 @@
#---------------------------------------------------
- templayer obstruct_fom_fine fomfill_pass1,fomfill_pass2,fomfill_coarse
+ templayer obstruct_fom_fine fomfill_pass1,fomfill_pass1a,fomfill_pass2,fomfill_coarse
grow 1290
or polyfill_pass1,polyfill_coarse,polyfill_medium,polyfill_fine
grow 300
@@ -1996,6 +2010,7 @@
#---------------------------------------------------
layer FOMFILL fomfill_pass1
+ or fomfill_pass1a
or fomfill_pass2
or fomfill_coarse
or fomfill_fine