Made corrections to GF DRC rules in magic based on feedback from
klayout checks. There are additional corrections to be made, but
these were the "low-hanging fruit".
diff --git a/VERSION b/VERSION
index 168ef9f..5abf950 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.0.467
+1.0.468
diff --git a/gf180mcu/magic/gf180mcu.tcl b/gf180mcu/magic/gf180mcu.tcl
index e3a28f9..c0f2e94 100644
--- a/gf180mcu/magic/gf180mcu.tcl
+++ b/gf180mcu/magic/gf180mcu.tcl
@@ -76,6 +76,7 @@
dict set ruleset mmetal_spacing 0.38 ;# Metal spacing rule (above metal1)
dict set ruleset sblk_to_cont 0.33 ;# resistor to contact center
dict set ruleset sblk_diff_space 0.44 ;# resistor to guard ring
+ dict set ruleset sblk_diff_space 0.60 ;# resistor to guard ring
}
#-----------------------------------------------------
@@ -2591,11 +2592,11 @@
plus_contact_type nsc \
sub_type nwell \
end_surround $poly_surround \
- end_spacing 0.44 \
+ end_spacing 0.60 \
end_to_end_space 0.52 \
res_to_endcont $sblk_to_cont \
res_spacing $polyres_spacing \
- res_diff_spacing 0.44 \
+ res_diff_spacing 0.60 \
mask_clearance 0.52 \
overlap_compress 0.36 \
]
@@ -2620,11 +2621,11 @@
plus_contact_type psc \
sub_type pwell \
end_surround $poly_surround \
- end_spacing 0.44 \
+ end_spacing 0.60 \
end_to_end_space 0.52 \
res_to_endcont $sblk_to_cont \
res_spacing $polyres_spacing \
- res_diff_spacing 0.44 \
+ res_diff_spacing 0.60 \
mask_clearance 0.52 \
overlap_compress 0.36 \
]
diff --git a/gf180mcu/magic/gf180mcu.tech b/gf180mcu/magic/gf180mcu.tech
index 8234d73..7270795 100644
--- a/gf180mcu/magic/gf180mcu.tech
+++ b/gf180mcu/magic/gf180mcu.tech
@@ -822,17 +822,19 @@
calma 49 0
#endif (HRPOLY1K)
- # rnps requires NPLUS
- # rnp requires NPLUS
- # rnd requires NPLUS
+ # rnps requires NPLUS surround 0.18um
+ # rnp requires NPLUS surround 0.3um
+ # rnd requires NPLUS surround 0.18um
layer NPLUS
- bloat-all rnps *poly
bloat-all rnp *poly
+ grow 120
+ bloat-all rnps *poly
bloat-all rnd *ndiff
- grow 200
- grow 200
- shrink 200
+ grow 180
+ grow 180
+ shrink 180
+ mask-hints NPLUS
calma 32 0
# standard generation of NPLUS
@@ -864,17 +866,18 @@
mask-hints NPLUS
calma 32 0
- # rpps requires PPLUS
- # rpp requires PPLUS
- # rpd requires PPLUS
+ # rpps requires PPLUS surround 0.18um
+ # rpp requires PPLUS surround 0.30um
+ # rpd requires PPLUS surround 0.18um
layer PPLUS
- bloat-all rpps *poly
bloat-all rpp *poly
+ grow 120
+ bloat-all rpps *poly
bloat-all rpd *pdiff
- grow 200
- grow 200
- shrink 200
+ grow 180
+ grow 180
+ shrink 180
mask-hints PPLUS
calma 31 0
@@ -1277,6 +1280,7 @@
and allfets
grow 220
bloat-or allsblkdev * 0 space/a 220
+ bloat-or allpolysblkres * 0 space/a 280
grow 215
shrink 215
mask-hints SBLK
@@ -2874,7 +2878,7 @@
width allnwell 860 "N-well width < %d (NW.1a)"
spacing allnwell allnwell 600 touching_ok "N-well spacing < %d (NW.2a)"
# rnw spacing is to unrelated nwell only.
- spacing rnw allnwell 1400 touching_ok "N-well resistor spacing < %d (NW.4)"
+ spacing rnw allnwell 1400 touching_ok "N-well resistor spacing < %d (NW.2b)"
width rnw 2000 "N-well resistor width < %d (NW.1b)"
variants (full)
@@ -3005,13 +3009,13 @@
# SBLK - more rules to do here (note PRES refers only to unsalicided resistor)
#-----------------------------------------------------------------------------
- spacing allpolysblkres allpolysblkres 250 touching_ok \
- "Poly resistor spacing < %d (PRES.2)
+ spacing allpolysblkres allpolysblkres 400 touching_ok \
+ "Poly resistor spacing < %d (PRES/LRES.2)
spacing allpolysblkres allpolynonres 600 touching_ok \
- "Poly resistor spacing to unrelated poly < %d (PRES.4)"
+ "Poly resistor spacing to unrelated poly < %d (PRES/LRES.4)"
spacing allpolysblkres allactive,allactiveres 600 touching_illegal \
- "Poly resistor spacing to diffusion < %d (PRES.3)"
+ "Poly resistor spacing to diffusion < %d (PRES/LRES.3)"
spacing allactiveres allactiveres 400 touching_ok \
"Diffusion resistor spacing < %d (NDRES.2)
@@ -3249,9 +3253,9 @@
surround v3/m4 *m4 50 30 directional \
"Metal4 overlap of Via3 < %d in one direction (V3.4i - V3.4)"
- width *m4,rm4 200 "Metal4 width < %d (M4.1)"
- spacing allm4,obsm4 allm4,obsm4 210 touching_ok "Metal4 spacing < %d (M4.2a)"
- area allm4,obsm4 144000 200 "Metal4 minimum area < %a (M4.3)"
+ width *m4,rm4 230 "Metal4 width < %d (M4.1)"
+ spacing allm4,obsm4 allm4,obsm4 280 touching_ok "Metal4 spacing < %d (M4.2a)"
+ area allm4,obsm4 144000 230 "Metal4 minimum area < %a (M4.3)"
variants (fast),(full)
widespacing allm4,obsm4 10000 allm4,obsm4 300 touching_ok \
@@ -3318,9 +3322,9 @@
surround v4/m5 *m5 50 30 directional \
"Metal5 overlap of Via4 < %d in one direction (V4.4i - V4.4)"
- width *m5,rm5 200 "Metal5 width < %d (M5.1)"
- spacing allm5,obsm5 allm5,obsm5 210 touching_ok "Metal5 spacing < %d (M5.2a)"
- area allm5,obsm5 144000 200 "Metal5 minimum area < %a (M5.3)"
+ width *m5,rm5 230 "Metal5 width < %d (M5.1)"
+ spacing allm5,obsm5 allm5,obsm5 280 touching_ok "Metal5 spacing < %d (M5.2a)"
+ area allm5,obsm5 144000 230 "Metal5 minimum area < %a (M5.3)"
variants (fast),(full)
widespacing allm5,obsm5 10000 allm5,obsm5 300 touching_ok \
@@ -3448,12 +3452,12 @@
# RPP,RNP
#--------------------------------------------------
width rpp 800 "ppolyres minimum width < %d (PRES.1)"
- width rnp 800 "npolyres minimum width < %d (NRES.1)"
+ width rnp 800 "npolyres minimum width < %d (LRES.1)"
spacing rpp rpp 400 touching_ok "ppolyres minimum spacing < %d (PRES.2)"
- spacing rnp rnp 400 touching_ok "npolyres minimum spacing < %d (NRES.2)"
+ spacing rnp rnp 400 touching_ok "npolyres minimum spacing < %d (LRES.2)"
- spacing rpp pc 215 touching_illegal "rpp spacing to Cont < %d (PRES.8 - CO.6)"
- spacing rnp pc 215 touching_illegal "rnp spacing to Cont < %d (NRES.8 - CO.6)"
+ spacing rpp pc 215 touching_illegal "rpp spacing to Cont < %d (PRES.7 - CO.6)"
+ spacing rnp pc 215 touching_illegal "rnp spacing to Cont < %d (LRES.7 - CO.6)"
#ifdef HRPOLY1K
#--------------------------------------------------