Vyges Loom · Physical construction
Turn a die rectangle into a floorplan a tool can place into.
Die area, core area, the site grid, and the rows every later stage fills — including hybrid sites and row parity.
Used by: anyone starting a block — this is the first thing that runs, and everything downstream inherits whatever it decides.
A floorplan is not a rectangle. It is a core area snapped to a site grid, tiled with rows of a definite height, orientation and phase — and every placer, every tap inserter and every power grid after it is built on those rows. Get the grid wrong and nothing downstream is legal.
vyges-ifp takes the die and core rectangles in microns, resolves the site set, and builds the rows. Hybrid sites tile from their declared row pattern; row parity trims the count where a design needs an even or odd number of rows.
.odb + die/core rectangles + site ──► vyges-ifp ──► rows, core area, instance census
The core’s lower-left corner is snapped up to the site grid; the upper right is left alone. What finally gets stored is what the rows cover — not the rectangle you passed in.
That is deliberate, and it is load-bearing. A caller that reads the core area back will not always see its own argument, because the honest answer is the area the design actually has. An engine that echoed your input would be easier to explain and wrong.
Rows are numbered globally across sites, so adding a site renumbers the rows after it — stated up front rather than discovered downstream.
A macro larger than the core is refused before anything is snapped or written, and a design with both an empty die and an oversized macro reports the die first — the checks run in a fixed order so the same input always produces the same complaint.
A database with no DBU scale is an error, not an assumed scale. Guessing the units of a floorplan is how a block ends up a thousand times too big.
Scope, stated plainly: this implements the explicit-rectangle form. The utilization / aspect-ratio form, which derives the die from placed cell area, is not built — pass rectangles. UPF power domains are a known gap: the floorplan geometry matches, the power-domain instances are not inserted.
Exit status is the verdict: 0 applied · 1 refused (empty die, core outside it, no row fits) · 2 error — so CI gates on the exit code without parsing prose.
A clean-room Rust engine writing the shared design database through vyges-opendb, so the block you check is the block you built. See all the engines & the data spine →