Messed with the MiM cap definition before finally determining that the real problem is the same as the failure to compute W and L correctly for extended drain devices; i.e., the algorithm is wrong with the terminals are on a different plane.
diff --git a/sky130/magic/sky130.tech b/sky130/magic/sky130.tech index 9549bb0..e17b2c8 100644 --- a/sky130/magic/sky130.tech +++ b/sky130/magic/sky130.tech
@@ -5404,11 +5404,11 @@ # MiM cap contact rules (VIA3) - width mimcc/m3 320 "MiM cap contact width < %d (via3.1 + 2 * via3.4)" + width mimcc/c1 320 "MiM cap contact width < %d (via3.1 + 2 * via3.4)" spacing mimcc mimcc 80 touching_ok "MiM cap contact spacing < %d (via3.2 - 2 * via3.4)" surround mimcc/m4 *m4 5 directional \ "Metal4 overlap of MiM cap contact in one direction < %d (met4.3 - via3.4)" - exact_overlap mimcc/m3 + exact_overlap mimcc/c1 width *mimcap2 2000 "MiM cap width < %d (cap2m.1)" spacing *mimcap2 *mimcap2 840 touching_ok "MiM cap spacing < %d (cap2m.2a)" @@ -5428,12 +5428,12 @@ # MiM cap contact rules (VIA4) - width mim2cc/m4 1180 "MiM2 cap contact width < %d (via4.1 + 2 * via4.4)" + width mim2cc/c2 1180 "MiM2 cap contact width < %d (via4.1 + 2 * via4.4)" spacing mim2cc mim2cc 420 touching_ok \ "MiM2 cap contact spacing < %d (via4.2 - 2 * via4.4)" surround mim2cc/m5 *m5 120 absence_illegal \ "Metal5 overlap of MiM2 cap contact < %d (met5.3 - via4.4)" - exact_overlap mim2cc/m4 + exact_overlap mim2cc/c2 #endif (MIM) @@ -6008,10 +6008,8 @@ pwell,space/w a=area #ifdef MIM - device subcircuit sky130_fd_pr__cap_mim_m3_1 *mimcap m3 \ - nwell,pwell,space/w error w=w l=l - device subcircuit sky130_fd_pr__cap_mim_m3_2 *mimcap2 m4,mimcc/m4 \ - nwell,pwell,space/w error w=w l=l + device subcircuit sky130_fd_pr__cap_mim_m3_1 *mimcap *m3 w=w l=l + device subcircuit sky130_fd_pr__cap_mim_m3_2 *mimcap2 *m4 w=w l=l #endif (MIM) variants (orig)