Vyges Loom · Physical implementation

vyges-stt

The shape of every net, before it is routed.

Rectilinear Steiner minimal trees over a net's pins — the starting point for parasitic estimation, repair and routing.

View source on GitHub →

What it does

Used by: every engine that needs to know how a net will be wired before it is — estimation, repair and global routing all start here.

Before a net is routed, its wiring is a guess — and the quality of that guess decides how good every estimate built on it can be. The standard guess is a rectilinear Steiner minimal tree: the shortest set of horizontal and vertical wires that connects all of a net's pins.

vyges-stt builds it two ways: a fast table-driven construction tuned for the small nets that make up most of a design, and Prim–Dijkstra, which trades total wirelength against source-to-sink path length — the knob that matters for timing-critical nets.

pin coordinates + driver (JSON)  ──►  vyges-stt  ──►  Steiner tree (branches, Steiner points, wirelength)

One net, or a whole design at once

run builds one tree; batch builds a tree for every net in a file; check verifies a tree you already have for self-overlap. Each answers in JSON, or in the printed tree format your existing flow expects.

The same library is what est, rsz and grt build on — so the tree you inspect is exactly the tree they use.

A tree that overlaps itself is reported as a finding with its own exit code, not passed downstream.

A net with no pins is not a success

Status is ok, failed, vacuous or error. A net with no pins — or a batch of none — is vacuous: nothing was built, and it is not a pass.

Try it

$ vyges install loom   # one-time: fetch the Loom suite into ~/.vyges/bin
$ vyges loom stt run net.json   # one net's tree
$ vyges loom stt batch nets.json -o trees.json   # every net in a file
$ vyges loom stt check tree.json   # verify a tree you already have

Exit status is the verdict: 0 ok · 1 the tree failed its self-overlap check · 2 vacuous or error.

Where it sits in the flow

Underneath the implementation flow: est turns its trees into RC networks, rsz places repeaters along them, and grt starts routing from them.

Open core · Apache-2.0

A clean-room Rust engine working on the shared design database through vyges-opendb, so the block you check is the block you built. See all the engines & the data spine →