Vyges Loom · Physical implementation
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.
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
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.
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.
Exit status is the verdict: 0 placed · 2 vacuous or error.
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 →