Vyges Loom · Physical implementation

vyges-gpl

Spread the standard cells across the core — the first placement every later stage refines.

Reproducible to the operation: the same design gives the same placement, every run, on every machine.

View source on GitHub →

What it does

Used by: anyone taking a netlist to layout — global placement decides where every cell starts, and every later stage inherits it.

After the floorplan and the macros, the standard cells need somewhere to go. Global placement finds a position for every one of them that keeps connected cells close — the starting point legalization, clock-tree synthesis and routing all build on.

vyges-gpl builds the placer's view of the design — instances, nets, pins and regions, fixed cells snapped to sites, padding and pin-density area adjustment — then runs the bound-to-bound initial placement, solving for the positions that minimize wirelength across the whole netlist.

.odb + JSON job  ──►  vyges-gpl  ──►  placed design (DEF) + per-round report

The same answer every time

A placement that moves between runs is a placement you cannot debug. vyges-gpl performs the solver's arithmetic in a fixed, declared operation order, so the result is the same on a laptop, in CI and on a build farm — and a change in the placement means a change in the design, never in the machine.

Every placement round is reported as it runs — the wirelength it reached and the solver iterations it took — so convergence is something you read, not something you assume.

Fixed instances are snapped to their sites before anything moves, so the cells you placed by hand stay exactly where you put them.

A run that placed nothing says so

Status is one of placed, vacuous or error — and vacuous is not placed. A job with no placement step reports that it did nothing, and the declared assertion passes only on placed, so a no-op cannot slip through CI as a success.

Try it

$ vyges install physical   # one-time: fetch the implementation engines into ~/.vyges/bin
$ vyges physical gpl global_placement job.json   # place the design the job describes
$ vyges physical gpl global_placement job.json -o report.json   # keep the per-round report

Exit status is the verdict: 0 placed · 2 vacuous or error.

Where it sits in the flow

After ifp, mpl, tap and pdn have built the floorplan, and before rsz repairs the placed design and dpl seats every cell on a legal site.

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 →