Skip to content

Commit

Permalink
Updating rule deck tolerance value to be 1.dbu
Browse files Browse the repository at this point in the history
  • Loading branch information
FaragElsayed2 committed Apr 5, 2023
1 parent f540526 commit 50850ad
Showing 1 changed file with 8 additions and 8 deletions.
16 changes: 8 additions & 8 deletions klayout/drc/rule_decks/hres.drc
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ if FEOL

# Rule HRES.4: Minimum RESISTOR overlap of Poly2 resistor is 0.4µm.
logger.info('Executing rule HRES.4')
hres4_l1 = hres_poly.enclosed(resistor, 0.4.um, euclidian).polygons(0.001.um)
hres4_l1 = hres_poly.enclosed(resistor, 0.4.um, euclidian).polygons(1.dbu)
hres4_l2 = hres_poly.not_outside(resistor).not(resistor)
hres4_l = hres4_l1.or(hres4_l2)
hres4_l.output('HRES.4', 'HRES.4 : Minimum RESISTOR overlap of Poly2 resistor: 0.4µm')
Expand All @@ -61,7 +61,7 @@ if FEOL

# Rule HRES.6: Minimum RESISTOR space to COMP is 0.3.um.
logger.info('Executing rule HRES.6')
hres6_l1 = resistor.interacting(hres1_poly).separation(comp, 0.3.um, euclidian).polygons(0.001.um)
hres6_l1 = resistor.interacting(hres1_poly).separation(comp, 0.3.um, euclidian).polygons(1.dbu)
hres6_l2 = comp.not_outside(resistor.interacting(hres1_poly))
hres6_l = hres6_l1.or(hres6_l2)
hres6_l.output('HRES.6', 'HRES.6 : Minimum RESISTOR space to COMP: 0.3um')
Expand All @@ -72,7 +72,7 @@ if FEOL

# Rule HRES.7: Minimum Pplus overlap of contact on Poly2 resistor is 0.2µm.
logger.info('Executing rule HRES.7')
hres7_l1 = contact.and(hres_poly).enclosed(pplus, 0.2.um, euclidian).polygons(0.001.um)
hres7_l1 = contact.and(hres_poly).enclosed(pplus, 0.2.um, euclidian).polygons(1.dbu)
hres7_l2 = contact.and(hres_poly).not_outside(pplus).not(pplus)
hres7_l = hres7_l1.or(hres7_l2)
hres7_l.output('HRES.7', 'HRES.7 : Minimum Pplus overlap of contact on Poly2 resistor: 0.2µm')
Expand All @@ -83,18 +83,18 @@ if FEOL
# Rule HRES.8: Minimum space from salicide block to contact on Poly2 resistor is 0.22.um.
logger.info('Executing rule HRES.8')
hres8_l1 = contact.and(hres_poly).separation(sab,
0.22.um).polygons(0.001.um).or(contact.and(hres_poly).interacting(sab))
0.22.um).polygons(1.dbu).or(contact.and(hres_poly).interacting(sab))
hres8_l1.output('HRES.8', 'HRES.8 : Minimum space from salicide block to contact on Poly2 resistor: 0.22.um')
hres8_l1.forget

# Rule HRES.9: Minimum salicide block overlap of Poly2 resistor in width direction is 0.28.um.
logger.info('Executing rule HRES.9')
hres9_sab = sab.interacting(pplus).interacting(res_mk).interacting(resistor)
hres9_clear_sab = hres9_sab.not(hres_poly)
hres9_bad_inside_edge = hres9_sab.edges.inside_part(hres_poly).extended(0, 0, 0.001.um, 0.001.um)
hres9_bad_inside_edge = hres9_sab.edges.inside_part(hres_poly).extended(0, 0, 1.dbu, 1.dbu)
.interacting(hres9_clear_sab, 1, 1)
hres9_sab_hole = hres9_sab.holes.and(hres_poly)
hres9_l1 = hres_poly.enclosed(hres9_sab, 0.28.um, euclidian).polygons(0.001.um)
hres9_l1 = hres_poly.enclosed(hres9_sab, 0.28.um, euclidian).polygons(1.dbu)
hres9_l2 = hres9_bad_inside_edge.or(hres9_sab_hole)
hres9_l = hres9_l1.or(hres9_l2)
hres9_l.output('HRES.9', 'HRES.9 : Minimum salicide block overlap of Poly2 resistor in width direction: 0.28.um')
Expand All @@ -110,7 +110,7 @@ if FEOL
logger.info('Executing rule HRES.10')
pplus1_hres10 = pplus.and(sab).drc(width != 0.1.um)
pplus2_hres10 = pplus.not_overlapping(sab).edges
hres10_l1 = pplus1_hres10.or(pplus2_hres10).extended(0, 0, 0.001.um, 0.001.um).interacting(hres_poly)
hres10_l1 = pplus1_hres10.or(pplus2_hres10).extended(0, 0, 1.dbu, 1.dbu).interacting(hres_poly)
hres10_l1.output('HRES.10', 'HRES.10 : Minimum & maximum Pplus overlap of SAB: 0.1.um')
hres10_l1.forget
pplus1_hres10.forget
Expand All @@ -136,7 +136,7 @@ if FEOL
## and both side (X and Y) are greater than 80 um.
## Then the minimum spacing to adjacent RES_MK layer is 20µm.
logger.info('Executing rule HRES.12b')
hres12b = res_mk.with_area(15_000.001.um, nil).edges.with_length(80.001.um, nil)
hres12b = res_mk.with_area(15_000.um + 1.dbu, nil).edges.with_length(80.um + 1.dbu, nil)
hres12b_l1 = hres12b.separation(res_mk.edges, 20.um)
hres12b_l1.output('HRES.12b',
'HRES.12b : If the size of single RES_MK mark layer is greater than 15000 um2
Expand Down

0 comments on commit 50850ad

Please sign in to comment.