Vyges Loom · Physical implementation

vyges-dpl

Seat every cell on a legal site — then prove it.

Legalization, filler cells, mirroring and a checker across all nine placement-rule families.

View source on GitHub →

What it does

Used by: anyone between global placement and routing — an illegal placement turns into a routing failure or a DRC error later, and much harder to trace.

Global placement puts cells close to where they should be, not where they can be. Detailed placement moves each one onto a legal site — on a row, aligned to the site grid, overlapping nothing — while moving it as little as possible.

vyges-dpl legalizes with a negotiation legalizer (or a diamond search, if you choose), honouring edge spacing, padding, one-site gaps and pins kept clear of power-via metal. It places and removes filler cells, optimizes cell mirroring for wirelength, and checks any placement — its own or anyone else's.

.odb  ──►  vyges-dpl  ──►  legalized .odb + placement check (per rule family)

A checker that tells you what it checked

check-placement evaluates all nine rule families: site alignment, placed, overlap, in-rows, region placement, padding, edge spacing, blocked layers and one-site gaps. Each failing cell is named under the family that failed it.

Edge spacing reads the library's own cell-edge rules and the technology's spacing table straight from the database — no separate rule file to keep in sync.

A family that cannot run on a design is named in the report, never passed over in silence — a clean verdict from a partial check must not read as a complete one.

Every instance accounted for

Status is legalized, clean, vacuous, failed or error — and vacuous is not clean: a design with no instances is an absent placement, not a legal one. Any instance left out of a run is named and counted, so nothing disappears from the answer unnoticed.

Try it

$ vyges install physical   # one-time: fetch the implementation engines into ~/.vyges/bin
$ vyges physical dpl detailed-placement design.odb --out-odb legal.odb   # legalize every cell
$ vyges physical dpl check-placement legal.odb   # check all nine rule families
$ vyges physical dpl filler-placement legal.odb 'FILL*' --out-odb filled.odb   # fill the row gaps

Exit status is the verdict: 0 legalized, clean or vacuous (read the count) · 1 a cell could not be seated, or a check found violations · 2 error.

Where it sits in the flow

After gpl and rsz, and again after cts adds clock buffers — then grt routes what it seated.

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 →