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

tolerance

Optional, degrees, default 1. How far a turn may differ from value and still count.

min / max

Optional, degrees. Forbid every turn from min to max inclusive; 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