Nets, antenna, paths

Nets, antenna, paths

Without connect, antenna / connected() / nets() have no graph identity; nets= on a spacing check falls back to geometric components of a|b. soft_connect is ERC: it counts for connected() / floating(), but is not conducting for nets= / antenna.

← Language overview

connect

Available · yields net graph

connect m1, via
connect via, m2
connect psub, global="SUB"
connect reset

Conducting neighbourhood, transitive. Touch is enough (interacting). global= binds a name. connect reset clears the graph and starts a new block.

Input Result The via connects two metals

Notes

  • Touch without overlap connects.
  • Three arguments: a chain a–b–c in one line.
  • Without connect, antenna stays inactive; nets= on a spacing check uses geometric components of a|b.

soft_connect

Available · yields ERC

soft_connect nwell, tap

ERC connection: counts for connected() / floating(), but not for nets= / antenna (second union-find). Check: connected(nwell, tap) == 0.

Input Result

Notes

  • An open soft connection is an ERC error, not a short.
  • Two metals that only meet through soft_connect stay different nets for space … nets=different.

label

Available · yields net names

label m1, txt

Text on a polygon → net name (label plus a texts layer). Without a label only geometry-connect plus global names.

Input Result VDD VDD

Notes

  • Text outside the polygon: no label.
  • Two names on one polygon: the later label overwrites the earlier name on that net.

nets / floating / connected

Available · yields polygons / 0–1

layer v = nets(m1, "VDD*")
layer f = floating(m1)
check "P" : connected(a, b) == 0

nets filters by label/glob. floating keeps shapes without a label and without another connected shape. connected(a, b) keeps A-shapes that have a path to B. As a check it behaves like count (dummy marker).

Input Result VDD ?

Notes

  • Without connect: connected() / floating() / antenna have no graph; nets= on spacing uses geometric components of a|b.
  • Transitive over vias. soft_connect counts for connected() / floating(), not for nets= / antenna.

antenna

Available · yields scalar check

antenna(gate, m1) > 200
antenna(gate, m1, how=perimeter) > 50
antenna(gate, m1 | m2, accumulate=yes) > 400
antenna(gate, m1, output=metal) > 200
antenna(gate, m1, diode=ndiode, factor=10) > 200

Ratio of metal (default: area) to gate. Needs connect gate–via–metal. Markers: gate shapes over the limit, with output=metal the metal shapes of the net. accumulate=yes sums every non-gate layer of the net. diode= + factor= adds factor * diode measure to the denominator.

Input Result gate

Notes

  • No diode: full metal/gate ratio.
  • factor scales diode area (or perimeter when how=perimeter).
  • accumulate=yes stacks higher metals and vias of the same net, not only the metal argument.
  • output=metal marks the metal of the net instead of the gates.
  • how=perimeter: edge length instead of area.
  • An unconnected gate is skipped (no node / denominator 0).