Added a couple of missing rules to the magic tech file for sky130 regarding the distance of N-diffusion and P-tap to high-voltage nwell, and for high-voltage N-diffusion to any (high- or low- voltage) nwell. In most cases these rules were effectively checked by other rules, but near deep-nwell edges in particular, the nwell edge can be too close to diffusion in pwell without being flagged as an error.
diff --git a/VERSION b/VERSION index 35ddd16..9b52297 100644 --- a/VERSION +++ b/VERSION
@@ -1 +1 @@ -1.0.519 +1.0.520
diff --git a/sky130/magic/sky130.tech b/sky130/magic/sky130.tech index f2b1bfa..be435ab 100644 --- a/sky130/magic/sky130.tech +++ b/sky130/magic/sky130.tech
@@ -1732,6 +1732,14 @@ grow-min 840 bridge 700 600 + # Diffusion spacing to mvnwell. Note: mvdiff to any well + # (mv or lv) is the same rule and can be checked by regular + # edge-based rules. Only mvwell to lvdiff needs a CIF rule. + templayer difftap_near_mvnwell mvnwell + grow 430 + and alldifflv + + # Simple spacing checks to lvnwell must use CIF-DRC rule # Note that HVI may *abut* lvnwell; this can only be handled # with mask-hints layers. @@ -4369,14 +4377,16 @@ "MV Diffusion spacing < %d (diff/tap.15a)" spacing alldiffmv *mvnsd,*mvpsd 270 touching_ok \ "MV Diffusion to MV tap spacing < %d (diff/tap.3)" - spacing *mvndiff,mvnfet,mvnfetesd,mvnnfet,nnfet,*mvndiode,*nndiode,mvndiffres,mvvar *mvpsd 370 \ - touching_ok "MV P-Diffusion to MV N-tap spacing < %d (diff/tap.15b)" - spacing *mvnsd,*mvpdiff,mvpfet,mvpfetesd,mvvar,*mvpdiode *mvpsd,*psd 760 touching_illegal \ + spacing *mvndiff,mvnfet,mvnfetesd,mvnnfet,nnfet,*mvndiode,*nndiode,mvndiffres,mvvar \ + *mvpsd 370 touching_ok \ + "MV P-Diffusion to MV N-tap spacing < %d (diff/tap.15b)" + spacing *mvnsd,*mvpdiff,mvpfet,mvpfetesd,mvvar,*mvpdiode *mvpsd,*psd 760 \ + touching_illegal \ "MV Diffusion in N-well to P-tap spacing < %d (diff/tap.20 + diff/tap.17,19)" spacing *ndiff,*ndiode,nfet allnwell 340 touching_illegal \ "N-Diffusion spacing to N-well < %d (diff/tap.9)" - spacing *mvndiff,*mvndiode,mvnfet,mvnnfet,nnfet allnwell 340 touching_illegal \ - "N-Diffusion spacing to N-well < %d (diff/tap.9)" + spacing *mvndiff,*mvndiode,mvnfet,mvnnfet,nnfet allnwell 430 touching_illegal \ + "N-Diffusion spacing to N-well < %d (diff/tap.24)" spacing *psd allnwell 130 touching_illegal \ "P-tap spacing to N-well < %d (diff/tap.11)" spacing *mvpsd allnwell 130 touching_illegal \ @@ -4399,6 +4409,8 @@ "MV diffusion to LV nwell spacing < %d (hvi.5 + nsd/psd.5)" cifspacing nwell_or_hvi nwell_or_hvi 700 touching_ok \ "HVI to HVI or LV nwell spacing < %d (hvi.5)" + cifmaxwidth difftap_near_mvnwell 0 bend_illegal \ + "Spacing of N-Diffusion or P-tap to MV nwell < 0.43um (diff/tap.18,20)" variants (fast),(full) spacing allnfets allpactivenonfet 270 touching_illegal \