no_corner¶
Forbidden corners: vertices where the boundary turns by a given angle, or by any angle in a range. The companion to no_angle, and not a substitute for it.
Semantics¶
The two ask different questions. no_angle looks at one edge and asks whether its
direction is allowed; this looks at a vertex and asks whether the turn between two
edges is. A right-angle bend is built from a 0° edge and a 90° edge, both perfectly
legal orientations, so no setting of no_angle can see it without also flagging every
straight orthogonal run on the die. GF180’s PL.6 is the rule that needs it: “90 degree
bends on the COMP are not allowed”.
value is the forbidden turn in degrees, matched on its absolute size so that a convex
and a concave bend of the same sharpness both count, within tolerance. With min
and max the rule forbids a range of turns instead and value is not read: “no
corner sharper than a right angle” is min: 90.005 and max: 180.
Corners are taken from the merged layer, so a bend that only exists because two drawn
shapes were butted together counts, and one that two shapes merge away does not. A right
angle is exact — the dot product of two integer edges is zero or it is not; any other
turn is a float angle against a float bound, which is what tolerance is for.
Layers¶
layers[0]— the layer whose corners are read.layers[1]— optional. Only corners lying inside this layer count, sampled as a 0.1 µm square around the vertex, so a bend within 0.1 µm of the layer’s own edge is not flagged (GF180’s reference seeds each corner with a dot grown by 0.1 µm).
Parameters¶
toleranceOptional, degrees, default 1. How far a turn may differ from
valueand still count.min/maxOptional, degrees. Forbid every turn from
mintomaxinclusive; either one left out is 0 or 180.outside(a layer param)Optional. Corners inside this layer are exempt.
Violation markers¶
One point marker per forbidden corner, at the vertex.
KLayout equivalent¶
corners(angle) (unioned with corners(-angle)), or corners(min..max).
Example¶
- id: PL.6
check: no_corner
layers: [poly2_drawn, comp_no_ymtp]
value: 90.0
layer_params:
outside: ymtp_mk