Vyges™ Loom

Commercial-grade engines for silicon implementation and sign-off — the engines that build the block, the optimizers that close the loop, and the checks that prove it.

The engines weave on the loom; VyBox Sley drives the weave.

driven by declarative job files over one cross-engine data spine.

TL;DR: the sign-off math — and the timing/leakage fixes — you used to pay a vendor for. Open, scriptable, CI-native. Apache-2.0.

The deterministic execution layer behind AI-native silicon design — the engines that turn AI reasoning into real chip implementation, on your hardware.

The Loom suite: external inputs (.ext, .char, .vcd/.saif, .gds/.oas + rules, .v/.json netlist, .sdc, sample series / AC sweep) enter; a Foundation · the design data band (opendb — the design database and 2.5D/3D chiplet assembly, shown beside the routed .odb every other engine reads, fed by .3dbx/.3dbv + .bmap and producing a structural + die-to-die verdict and an assembly SVG), a Physical implementation · floorplan, placement, power, routing, fill band (syn, ifp, upf, mpl, tap, pdn, ppl, pad, fin, gpl, rsz, dpl, dft, cts, stt, est, grt, drt — the engines that build the design database the others read, producing a mapped netlist, the UPF power intent, rows / die area, taps / endcaps, power grid, pin slots, pad ring, scan chains, fill shapes, a placement check, Steiner trees, SPEF, route guides and a routed DEF; mpl, gpl, rsz and cts write into the database itself and so have no separate result), a Sign-off · analyze group (extract, char, power, sta-si, em-ir, thermal, lvs, meas, ant, psm — ant reading a routed .odb and reporting antenna violations, psm checking the power grid and its static IR drop), an Optimizers · act group (resize, vt-swap, buffer-insert, hold-fix, remap, rmp), and a Verification · prove / view group (drc, cdc, glitch, lec, gds-view) compose over shared artifacts (.spef, .lib, activity) and one timing graph; results (WNS/TNS, IR-drop/EM, temp/hotspot, MATCH/MISMATCH, fixed netlist, re-mapped netlist, SNR/THD/gain/phase-margin, DRC violations, CDC/glitch/LEC verdicts, layout SVG, antenna violations) come out. A dashed loop shows the incremental cone-localized timing update. The engines validated for analog and mixed-signal (extract, em-ir, thermal, lvs, and the geometry engines drc and gds-view) carry a double border; .gds + rules also feeds extract directly via its gds-to-net adapter.

Hover to zoom · click to open the full-size diagram

This architecture is written up in full — figure and all — in our paper, Vyges Loom: A Shared Data-Spine Architecture (open access, DOI-archived).

Built for silicon teams doing real sign-off — startups without seven-figure EDA budgets, platform teams standardizing CI flows, and foundries enabling reproducible PDK validation.

Why now? Proprietary sign-off tools were built for monolithic flows — not CI, not reproducibility, and not open ecosystems.

Every engine, one spine

A software architecture, not an EDA bundle. Each engine takes a declarative job file and produces a standard artifact, and they share a cross-engine data spine — the output of one is the input of the next, with no glue scripts and no silent copy-drift.

The flow runs top to bottom, RTL to GDS. Pick an engine to see what it does, what it reads and writes, and how to run it.

vyges-syn

Logic synthesis · Synthesis

RTL in, a mapped netlist out — synthesis inside the suite, so a flow runs from RTL to layout without leaving it.

What it does

Elaborates SystemVerilog, synthesizes it on the shared AIG core, and maps it onto the Liberty library's cells, writing a structural Verilog netlist. A timing-driven resynthesis pass reworks the logic around each failing gate output after placement, from Ashenhurst–Curtis decompositions.

In → out

.sv RTL + .lib  ──►  vyges-syn  ──►  mapped netlist (.v)

Run it

$ vyges install physical
$ vyges physical syn synthesize --liberty cells.lib -o mapped.v rtl/top.sv --top top
$ vyges physical syn acd-resynth --liberty cells.lib --sdc top.sdc --apply -o out.odb placed.odb
Install
vyges install physical — with the physical engines
Command
vyges physical syn
License
Apache-2.0

Used by: anyone taking RTL to gates who wants synthesis on the same core as restructuring and formal.

Source on GitHub → · Releases

vyges-remap

Logic-level area · Synthesis

Multi-output technology re-mapping — recovers the area a one-output-at-a-time mapper leaves behind, and proves the function did not change before it hands the netlist on.

What it does

A conventional technology mapper covers one output at a time, so a cell that could have driven several outputs gets duplicated once per output. In arithmetic and datapath logic, where sub-expressions are shared everywhere, that duplication is a standing area tax. vyges-remap re-maps the same logic with a multi-output covering, then reports the before/after cell and area delta against a single-output baseline it computes itself — so the gain is measured, not asserted.

In → out

mapped netlist  ──►  vyges-remap  ──►  smaller netlist + measured delta, equivalence-checked

Run it

$ vyges install loom
$ export VYGES_EMAP=/path/to/emap VYGES_YOSYS=$(which yosys) VYGES_ABC=$(which abc)
$ vyges loom remap emap --verilog block.v --top block --liberty sky130.lib -o block_remapped.v
$ vyges loom remap emap --aig block.aig --genlib cells.genlib --json
Install
vyges install loom — with the Loom suite
Command
vyges loom remap
License
Apache-2.0

Used by: anyone whose block is over its area budget after synthesis — particularly datapath, where the shared structure is the whole point.

Source on GitHub → · Releases

vyges-rmp

Logic restructuring · Synthesis

Restructure the logic, not just the cells — re-synthesis of timing-critical or area-heavy regions, with every rewrite checkable for equivalence.

What it does

Pulls the logic behind every failing end point (or an area-heavy region) out of the design, re-synthesizes it on an AIG, and puts the result back. Searches over rewrite sequences — annealing or genetic — find the best worst slack. Built on the same AIG and SAT core as the formal engine, so every rewrite can be proved equivalent.

In → out

.odb + .lib + .sdc  ──►  vyges-rmp  ──►  restructured .odb

Run it

$ vyges install physical
$ vyges physical rmp resynth design.odb --liberty cells.lib --sdc design.sdc -o out.odb
$ vyges physical rmp resynth-annealing design.odb --liberty cells.lib --sdc design.sdc -o out.odb
Install
vyges install physical — with the physical engines
Command
vyges physical rmp
License
Apache-2.0

Used by: anyone closing timing or recovering area after placement, where resizing alone is not enough.

Source on GitHub → · Releases

vyges-lec

Equivalence prover · Synthesis

Logic equivalence check — did that synthesis, ECO or hand-edit keep the logic the same? Prove two netlists compute the same function across all inputs — or get the one input where they differ.

What it does

Every synthesis, ECO and hand-edit is a promise that the logic still means the same thing. Simulation can only spot-check that promise on the vectors you happened to run. vyges-lec proves it across all 2n inputs at once — or hands you the one input where the promise broke. It is the formal complement to simulation: it builds a canonical decision diagram for every output of both designs, so equal functions are provably equal, and a mismatch yields a concrete counter-example.

In → out

golden.v + revised.v + .lib  ──►  vyges-lec  ──►  EQUIVALENT ✓ / NOT ✗ (+ counter-example)

Run it

$ vyges install physical
$ vyges physical lec check golden.v revised.v --lib cells.lib
$ vyges physical lec check golden.v revised.v --lib cells.lib --json
$ vyges physical lec check golden.v revised.v --lib cells.lib --fail-on-diff
Install
vyges install physical — with the physical engines
Command
vyges physical lec
License
Apache-2.0

Used by: anyone who edits a netlist after synthesis — an ECO, a clock-gate insertion, a hand-fix — and needs to know the logic still means the same thing.

Source on GitHub → · Releases

vyges-ifp

Floorplan & rows · Floorplan · power · IO

Turn a die rectangle into a floorplan a tool can place into.

What it does

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.

In → out

.odb + die/core rectangles + site  ──►  vyges-ifp  ──►  rows, core area, instance census

Run it

$ vyges install physical
$ vyges physical ifp run design.odb --die-area '0 0 200 200' \
$ vyges physical ifp run design.odb ... --row-parity EVEN
$ vyges physical ifp run design.odb ... --dry-run
Install
vyges install physical — with the physical engines
Command
vyges physical ifp
License
Apache-2.0

Used by: anyone starting a block — this is the first thing that runs, and everything downstream inherits whatever it decides.

Source on GitHub → · Releases

vyges-upf

Power intent · Floorplan · power · IO

Power intent for multi-supply designs — which logic sits in which domain, and what guards each crossing.

What it does

Reads a UPF file into the design database — power domains, logic ports, power switches, isolation and level-shifter strategies — and writes the database's intent back out as UPF. It then evaluates the intent, inserting the isolation and level-shifter cells it calls for. A UPF construct it cannot read exactly is refused, never guessed at.

In → out

.odb + .upf  ──►  vyges-upf  ──►  .odb with power domains · .upf

Run it

$ vyges install physical
$ vyges physical upf run design.odb intent.upf -o out.odb
$ vyges physical upf eval out.odb -o eval.odb --liberty cells.lib
$ vyges physical upf write eval.odb -o intent.upf
Install
vyges install physical — with the physical engines
Command
vyges physical upf
License
Apache-2.0

Used by: anyone with more than one supply: analog and mixed-signal chips, and digital blocks with switched or retention domains.

Source on GitHub → · Releases

vyges-pad

IO ring & pads · Floorplan · power · IO

Lay the IO ring around the die, and place what sits in it.

What it does

The IO ring is the band of rows around the die that pads, corners and bumps are placed into. Its geometry is unforgiving: the ring is the die inset by an offset, its corners sized from the corner site, and its four edges truncated to whole sites — a remainder that does not fill a site is given up rather than rounded out.

In → out

.odb + site names + offset  ──►  vyges-pad  ──►  IO rows (name, site, origin, orientation, pitch), placed pads and corners

Run it

$ vyges install physical
$ vyges physical pad make-io-sites design.odb --horizontal-site IOSITE \
$ vyges physical pad place-corners design.odb --master CORNER_PAD
$ vyges physical pad place-pad design.odb --row IO_EAST --location 120 \
Install
vyges install physical — with the physical engines
Command
vyges physical pad
License
Apache-2.0

Used by: anyone taking a block to a package — the ring is the boundary between your design and the outside world.

Source on GitHub → · Releases

vyges-ppl

IO pin placement · Floorplan · power · IO

Put the IO pins where they cost the least wire.

What it does

Every pin on a block boundary is a decision that the router then has to live with. Placed badly, pins add wire to every net that reaches them — and unlike most placement problems, this one has a clean optimum within a section.

In → out

.odb + layer choice + constraints  ──►  vyges-ppl  ──►  pin positions, total wirelength, unplaced pins named

Run it

$ vyges install physical
$ vyges physical ppl slots design.odb --hor-layers met3 --ver-layers met2
$ vyges physical ppl place-pins design.odb --hor-layers met3 --ver-layers met2
$ vyges physical ppl place-pins design.odb ... --min-distance 2 --corner-avoidance 5
$ vyges physical ppl place-pins design.odb ... --evaluate reference.json
Install
vyges install physical — with the physical engines
Command
vyges physical ppl
License
Apache-2.0

Used by: anyone placing pins on a block boundary, where a bad assignment costs wirelength on every net that crosses it.

Source on GitHub → · Releases

vyges-mpl

Macro placement · Floorplan · power · IO

Put the macros where the block can be built around them.

What it does

Macros are the immovable furniture of a block. Once they are down, they define the channels the standard cells live in, the paths the power straps take, and the wire length every net after them has to pay. Put them badly and no amount of downstream effort recovers it.

In → out

.odb + macro coordinates or a netlist to cluster  ──►  vyges-mpl  ──►  macro locations, orientations, placement blockages

Run it

$ vyges install physical
$ vyges physical mpl place-macro design.odb \
$ vyges physical mpl place-macro design.odb --macro sram0=120500,240800 --dbu
$ vyges physical mpl run design.odb
Install
vyges install physical — with the physical engines
Command
vyges physical mpl
License
Apache-2.0

Used by: anyone hardening a block with SRAMs, register files or hard IP — where the macros sit decides the shape of everything placed after them.

Source on GitHub → · Releases

vyges-tap

Well taps & endcaps · Floorplan · power · IO

Cut the rows around macros, and place the physical cells that keep them legal.

What it does

Rows cannot run through a placed macro, and a row that simply stops needs its ends capped. Meanwhile the wells under the standard cells have to be tied to supply at a spacing the process dictates. Both are invisible in simulation and both are silicon failures when wrong.

In → out

.odb with macros  ──►  vyges-tap  ──►  cut rows + taps + endcaps (master, position, orientation)

Run it

$ vyges install physical
$ vyges physical tap cut-rows design.odb --halo-x 2 --halo-y 2
$ vyges physical tap place-endcaps design.odb --corner CORNER_A
$ vyges physical tap place-tapcells design.odb --master TAPCELL --distance 25
$ vyges physical tap tapcell design.odb --tapcell-master T --endcap-master E
$ vyges physical tap ripup design.odb --tap-prefix TAP_
Install
vyges install physical — with the physical engines
Command
vyges physical tap
License
Apache-2.0

Used by: anyone with a macro in their floorplan, or a process that requires well taps at a maximum spacing.

Source on GitHub → · Releases

vyges-pdn

Power grid · Floorplan · power · IO

Build the power grid — and refuse the one the technology cannot hold.

What it does

The power distribution network is the structure everything else sits inside. It is built from a small vocabulary — rings around the core, straps across it, follow pins along the standard-cell rows — and then vias connect the layers wherever those shapes cross.

In → out

.odb + grid spec (rings, straps, follow pins)  ──►  vyges-pdn  ──►  grid shapes, vias, block terminals

Run it

$ vyges install physical
$ vyges physical pdn generate design.odb --out-def pdn.def \
$ vyges physical pdn generate design.odb --out-def pdn.def --power VDD --ground VSS \
$ vyges physical pdn --describe
Install
vyges install physical — with the physical engines
Command
vyges physical pdn
License
Apache-2.0

Used by: anyone who needs power to reach the cells — and anyone who has debugged a grid that looked fine until the via stage.

Source on GitHub → · Releases

vyges-psm

Power-grid analysis · Floorplan · power · IO

Find the open strap where the grid is built — connectivity and static IR drop on the design database, before extraction.

What it does

Reads the power grid straight from the design database and answers two questions: is every instance actually connected to the supply, and how much voltage does it lose on the way (static IR drop, per node, with optional electromigration). It can also export the grid as a SPICE deck for an independent solve.

In → out

.odb (+ voltage file)  ──►  vyges-psm  ──►  connectivity verdict · IR drop · SPICE

Run it

$ vyges install physical
$ vyges physical psm check design.odb --net VDD
$ vyges physical psm analyze design.odb --net VDD
$ vyges physical psm write-spice design.odb grid.sp --net VDD --save-solution vdd.sol
Install
vyges install physical — with the physical engines
Command
vyges physical psm
License
Apache-2.0

Used by: anyone building a power grid who wants a starved macro or a disconnected strap caught at floorplan, not at sign-off.

Source on GitHub → · Releases

vyges-gpl

Global placement · Placement

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

What it does

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.

In → out

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

Run it

$ vyges install physical
$ vyges physical gpl global_placement job.json
$ vyges physical gpl global_placement job.json -o report.json
Install
vyges install physical — with the physical engines
Command
vyges physical gpl
License
Apache-2.0

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

Source on GitHub → · Releases

vyges-rsz

Electrical & timing repair · Placement

Repair the placed design before you trust its timing.

What it does

A freshly placed design breaks electrical rules everywhere: wires too long for their driver, nets loaded past their capacitance limit, transitions slower than the library allows. Until those are fixed, a timing report is measuring a circuit that will not behave as modelled.

In → out

.odb + Liberty + SDC + JSON job  ──►  vyges-rsz  ──►  repaired design (DEF) + decision trace

Run it

$ vyges install physical
$ vyges physical rsz repair_design job.json
$ vyges physical rsz buffer_ports job.json
Install
vyges install physical — with the physical engines
Command
vyges physical rsz
License
Apache-2.0

Used by: anyone closing a placed block — slew, capacitance and wire-length violations have to be gone before timing means anything.

Source on GitHub → · Releases

vyges-dpl

Detailed placement · Placement

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

What it does

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.

In → out

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

Run it

$ vyges install physical
$ vyges physical dpl detailed-placement design.odb --out-odb legal.odb
$ vyges physical dpl check-placement legal.odb
$ vyges physical dpl filler-placement legal.odb 'FILL*' --out-odb filled.odb
Install
vyges install physical — with the physical engines
Command
vyges physical dpl
License
Apache-2.0

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.

Source on GitHub → · Releases

vyges-dft

Scan insertion · Placement

A chip has to be testable once it is made — scan replacement and chain stitching on the placed design.

What it does

Replaces each flip-flop with its scan equivalent from the library and stitches them into scan chains, so a tester can set and read every register. The chain plan — how many chains, how long, in what order — is reported before it is executed, so you see what will change before it does.

In → out

.odb + .lib + .sdc  ──►  vyges-dft  ──►  scan-stitched .odb + chain plan

Run it

$ vyges install physical
$ vyges physical dft report design.odb --liberty cells.lib --sdc design.sdc
$ vyges physical dft run design.odb --liberty cells.lib --sdc design.sdc --max-length 100 -o scanned.odb
Install
vyges install physical — with the physical engines
Command
vyges physical dft
License
Apache-2.0

Used by: anyone taking a design to production silicon, where every part has to pass a tester.

Source on GitHub → · Releases

vyges-cts

Clock tree synthesis · Clock

Find every clock, choose its buffers, and collect every sink it has to reach.

What it does

Before a clock tree can be built, the tool has to know what it is building with and what it has to reach. Which buffers may drive a clock? Which nets are clocks at all, once they pass through clock gates and bidirectional pads? Which flip-flops sit at the end of each one?

In → out

.odb + Liberty + SDC + JSON job  ──►  vyges-cts  ──►  clock nets, sinks and buffer choices (JSON)

Run it

$ vyges install physical
$ vyges physical cts clock_tree_synthesis job.json
$ vyges physical cts clock_tree_synthesis job.json -o cts.json
Install
vyges install physical — with the physical engines
Command
vyges physical cts
License
Apache-2.0

Used by: anyone with a clocked design — which is every design; the clock network is where skew, power and hold all begin.

Source on GitHub → · Releases

vyges-stt

Steiner trees · Routing

The shape of every net, before it is routed.

What it does

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.

In → out

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

Run it

$ vyges install loom
$ vyges loom stt run net.json
$ vyges loom stt batch nets.json -o trees.json
$ vyges loom stt check tree.json
Install
vyges install loom — with the Loom suite
Command
vyges loom stt
License
Apache-2.0

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.

Source on GitHub → · Releases

vyges-est

Parasitic estimation · Routing

Every net's RC, from placement — without waiting for the router.

What it does

Timing a placed design needs the resistance and capacitance of wires that do not exist yet. Parasitic estimation fills that gap: it predicts each net's wiring and turns the prediction into an RC network the timer can use.

In → out

.odb / LEF + DEF + Liberty + JSON job  ──►  vyges-est  ──►  .spef per corner

Run it

$ vyges install loom
$ vyges loom est estimate job.json
$ vyges loom est estimate job.json -o est.json
Install
vyges install loom — with the Loom suite
Command
vyges loom est
License
Apache-2.0

Used by: anyone timing a placed design — placement-stage timing is only as good as its parasitic estimate.

Source on GitHub → · Releases

vyges-grt

Global routing · Routing

Plan every net's route across the die — the guides detailed routing works within.

What it does

Routing a whole design wire by wire, all at once, is intractable. Global routing breaks it up: it divides the die into a coarse grid, decides which grid cells and layers each net will pass through, and resolves congestion before a single real wire is drawn.

In → out

.odb / LEF + DEF + JSON job  ──►  vyges-grt  ──►  route guides + .odb + SPEF

Run it

$ vyges install physical
$ vyges physical grt route job.json
$ vyges physical grt route job.json -o grt.json
Install
vyges install physical — with the physical engines
Command
vyges physical grt
License
Apache-2.0

Used by: anyone routing a block — global routing decides where congestion lands and which nets get the short way through.

Source on GitHub → · Releases

vyges-drt

Detailed routing · Routing

Turn route guides into real wires and vias — until no design-rule marker stands.

What it does

Global routing says which region each net passes through. Detailed routing draws the actual wires and vias, on tracks, obeying every spacing, width and via rule the technology defines — and keeps repairing until the design is clean.

In → out

.odb with route guides  ──►  vyges-drt  ──►  routed DEF or .odb + JSON report

Run it

$ vyges install physical
$ vyges physical drt detailed_route --db guided.odb --out routed.def
$ vyges physical drt pin_access --db placed.odb --out access.odb
Install
vyges install physical — with the physical engines
Command
vyges physical drt
License
Apache-2.0

Used by: anyone taking a block to GDS — detailed routing is where the design becomes manufacturable metal.

Source on GitHub → · Releases

vyges-ant

Process-damage check · Routing

Find antenna violations before they become silicon failures.

What it does

During fabrication, a long run of metal connected to a transistor gate acts as an antenna: it collects charge from the plasma etch and dumps it through the thin gate oxide. Too much metal per unit of gate area and the oxide is damaged — a device that passes every simulation and fails in silicon. The foundry states the limit as a set of ratios in the LEF, and the layout has to stay under them.

In → out

routed .odb  ──►  vyges-ant  ──►  antenna violations (gate · layer · value vs limit), CI exit code

Run it

$ vyges install loom
$ vyges loom ant check design.odb
$ vyges loom ant check design.odb -o antenna.json
$ vyges loom ant explain design.odb --net net123
Install
vyges install loom — with the Loom suite
Command
vyges loom ant
License
Apache-2.0

Used by: anyone taking a routed block to a foundry — antenna damage passes every simulation, survives every functional test, and turns up as yield loss.

Source on GitHub → · Releases

vyges-fin

Density fill · Finish · sign-off

Fill the gaps until every layer meets its density floor.

What it does

Foundries require each metal layer to carry a minimum density across the die, because chemical-mechanical polishing behaves badly over large empty regions. Meeting that floor means placing fill shapes into every gap the design leaves — without touching a real wire, a real instance or a real obstruction.

In → out

.odb + JSON fill rules  ──►  vyges-fin  ──►  fill shapes (layer, mask, OPC flag, coordinates)

Run it

$ vyges install physical
$ vyges physical fin density-fill design.odb --rules fill-rules.json
$ vyges physical fin density-fill design.odb --rules fill-rules.json \
$ vyges physical fin density-fill design.odb --rules fill-rules.json --dry-run
Install
vyges install physical — with the physical engines
Command
vyges physical fin
License
Apache-2.0

Used by: anyone streaming out to a foundry — density rules are a tape-out gate, and fill is how you pass them.

Source on GitHub → · Releases

vyges-extract

Physical-truth extractor · Finish · sign-off

Interconnect parasitic extraction — turn a layout's RC into SPEF, from one declarative job, so timing and power see the real wires. Analog and mixed-signal layouts too — RC is geometry, not cell-specific.

What it does

vyges-extract reads a layout and the PDK's parasitic rules and produces SPEF — the resistance and capacitance of every net. That's what lets static timing and power analysis reason about the actual interconnect, not an idealized one. SPEF is the standard hand-off the downstream engines expect. Extraction accuracy is governed by the PDK's parasitic rules — the engine is open, the calibration is foundry-specific; it handles hierarchical, full-chip designs.

In → out

layout (DEF/LEF) + parasitic rules  ──►  vyges-extract  ──►  .spef (RC parasitics)

Run it

$ vyges install loom
$ vyges loom extract demo
$ vyges loom extract run design.ext -o design.spef
$ vyges loom extract run design.ext --json
Install
vyges install loom — with the Loom suite
Command
vyges loom extract
License
Apache-2.0

Used by: physical-design flows that want timing and power to see real wires — not estimates.

Source on GitHub → · Releases

vyges-sta-si

Timing decision function · Finish · sign-off

Static timing analysis with signal integrity — WNS / TNS and the worst path, from one declarative job, with a CI gate that fails on a violation.

What it does

vyges-sta-si checks whether the design meets timing — reporting worst negative slack (WNS), total negative slack (TNS), and the critical path — while accounting for signal-integrity coupling between nets (crosstalk-induced delay and noise effects). It reads the .lib from vyges-char and the .spef from vyges-extract — the two upstream artifacts on the spine. The timing results and slack metrics are sign-off compatible with standard Liberty and SPEF inputs — no proprietary formats, no hidden transforms.

In → out

.lib + .spef + design & constraints  ──►  vyges-sta-si  ──►  WNS / TNS / worst path

Run it

$ vyges install loom
$ vyges loom sta-si demo
$ vyges loom sta-si run top.sta -o top.rpt
$ vyges loom sta-si run top.sta --fail-on-violation
$ vyges loom sta-si run top.sta --sdf top.sdf
$ vyges loom sta-si sdc-lint top.sta
Install
vyges install loom — with the Loom suite
Command
vyges loom sta-si
License
Apache-2.0

Used by: platform and PD teams gating timing on every commit — sign-off as a check, not a late-stage review.

Source on GitHub → · Releases

vyges-power

Activity & power solver · Finish · sign-off

Power analysis — leakage + internal + switching from a netlist and activity, against a budget. Emits the per-instance activity that em-ir needs.

What it does

vyges-power reads a gate-level netlist and the Liberty models and computes power — leakage, internal, and switching — from either a vectored activity file (VCD) or vectorless probabilistic toggling. Just as importantly, it emits the per-instance activity / current map that vyges-em-ir consumes, so IR-drop is solved from real per-instance current instead of a worst-case assumption — closing the char → power → em-ir loop.

In → out

netlist + .lib + activity (VCD / vectorless)  ──►  vyges-power  ──►  power report + activity map → em-ir

Run it

$ vyges install loom
$ vyges loom power demo
$ vyges loom power run block.pwr
$ vyges loom power run block.pwr --fail-on-budget
Install
vyges install loom — with the Loom suite
Command
vyges loom power
License
Apache-2.0

Used by: teams who need a power number early — and the activity map that makes IR-drop analysis real.

Source on GitHub → · Releases

vyges-em-ir

Power-budget enforcer · Finish · sign-off

Power-integrity sign-off — solve the power-distribution network for IR-drop and electromigration against a budget, from one declarative job. Digital, analog and mixed-signal power grids alike — it's grid physics, not a standard-cell construct.

What it does

vyges-em-ir takes the design's power-distribution network (PDN) and solves it — reporting IR-drop (how much supply voltage the grid loses) and checking electromigration (EM) current limits against a budget. The per-switch energy seam from vyges-char feeds its dynamic solve, so power integrity is consistent with the cells' characterized behavior. It reports both steady-state and dynamic IR-drop. This turns power integrity from a late, manual sign-off step into a deterministic, CI-gated check.

In → out

design + PDN + IR/EM budget  ──►  vyges-em-ir  ──►  IR-drop map + EM check

Run it

$ vyges install loom
$ vyges loom em-ir demo
$ vyges loom em-ir run block.emir -o block.rpt
$ vyges loom em-ir run block.emir --fail-on-violation
Install
vyges install loom — with the Loom suite
Command
vyges loom em-ir
License
Apache-2.0

Used by: teams enforcing power budgets before tape-out, not after surprises.

Source on GitHub → · Releases

vyges-thermal

Hotspot & temperature · Finish · sign-off

On-chip thermal sign-off — the peak temperature and the hotspot from the same power map, with electro-thermal coupling. Analog and mixed-signal blocks too — heat flow is technology-agnostic.

What it does

vyges-thermal takes the design's floorplan power map — the per-instance power vyges-power already produces — and solves the die's heat flow: where the heat concentrates, the peak temperature, and the hotspot location, with a PASS/FAIL against a temperature limit. It is the thermal dual of vyges-em-ir: the same grid solve, temperature where em-ir has voltage. And because leakage rises with temperature, it runs the electro-thermal loop to a fixed point — leakage heats the die, the hotter die leaks more — so you get the real operating temperature, not a cold-start estimate. This turns thermal from a late packaging surprise into a deterministic, CI-gated check.

In → out

floorplan + power map + temp limit  ──►  vyges-thermal  ──►  temperature field + hotspot

Run it

$ vyges install loom
$ vyges loom thermal demo
$ vyges loom thermal run block.thermal -o block.rpt
$ vyges loom thermal run block.thermal --fail-on-violation
Install
vyges install loom — with the Loom suite
Command
vyges loom thermal
License
Apache-2.0

Used by: teams that want to find the hotspot before the package does.

Source on GitHub → · Releases

vyges-drc

Geometry-rule enforcer · Finish · sign-off

Geometric design-rule check — does the layout obey the foundry's rules? Width, spacing, area, density, antenna and enclosure on a GDS or OASIS layout — plus a metal-fill generator. Digital, analog and mixed-signal alike — geometry is technology-agnostic.

What it does

A layout is only manufacturable if its geometry obeys the foundry's rules. vyges-drc is the geometric sibling of lvs — LVS asks does the layout implement the schematic?, DRC asks does it obey the rules? It checks six rule classes — width, spacing, area, windowed density, per-net antenna ratio, and enclosure — and, where a layer is too sparse, it generates metal fill to hit the density target and writes a filled GDS back out. It rides the same clean-room vyges-layout kernel vyges-lvs uses, so the physical-verification pair is one toolset, one language, one install.

In → out

GDS + a .drc rule deck  ──►  vyges-drc  ──►  violations (text / JSON, CI exit code)

Run it

$ vyges install loom
$ vyges loom drc demo
$ vyges loom drc check block.gds --rules sky130.drc
$ vyges loom drc check block.gds --rules sky130.drc --fail-on-violation
$ vyges loom drc fill block.gds --rules sky130.drc -o filled.gds
Install
vyges install loom — with the Loom suite
Command
vyges loom drc
License
Apache-2.0

Used by: anyone taping out — and anyone who wants the geometry checked in seconds inside CI, not in a six-figure tool.

Source on GitHub → · Releases

vyges-lvs

Layout-correctness checker · Finish · sign-off

Layout-vs-schematic — does the layout implement the schematic? A MATCH / MISMATCH verdict with diagnostics that name where it diverges. Digital, analog and mixed-signal netlists alike — the device-graph compare is technology-agnostic.

What it does

A layout is only correct if it implements the schematic — same devices, same connectivity. vyges-lvs proves that by matching the two netlists as graphs, independent of how nets and instances happen to be named (name-independent colour-refinement). When they don't match, the only thing that matters is where — so it names the unmatched devices and nets, where the open incumbent (Netgen) prints a terse "do not match." It can also extract the layout netlist straight from GDS, so you don't need a separate extractor in the loop.

In → out

layout netlist (or GDS + rules) + schematic  ──►  vyges-lvs  ──►  MATCH / MISMATCH + diagnostics

Run it

$ vyges install loom
$ vyges loom lvs demo
$ vyges loom lvs run block.lvs
$ vyges loom lvs run block.lvs --fail-on-mismatch
$ vyges loom lvs extract block.gds --rules sky130.rules --top block
Install
vyges install loom — with the Loom suite
Command
vyges loom lvs
License
Apache-2.0

Used by: anyone signing off a layout — and anyone who has lost an afternoon to a cryptic mismatch report.

Source on GitHub → · Releases

vyges-opendb

Design database · chiplets · Foundation

The design database, and the chiplet assembly layer on top of it — read a 2.5D/3D assembly, check its structure, check that its die-to-die interfaces actually connect, and draw it. One binary, no GUI, no Tcl.

What it does

vyges-opendb is a safe Rust API and CLI over OpenROAD's OpenDB — the in-memory design database that physical steps read and edit. It sits a layer below the sign-off engines: not an analysis, but the design data an analysis operates on. The division of labour is simple: OpenDB provides the data model; Vyges Loom provides the executable workflows built on that model.

In → out

3Dblox assembly  ──►  vyges-opendb  ──►  structural verdict + interface verdict + a drawing

Run it

$ vyges install loom
$ vyges opendb info --input design.odb
$ vyges opendb read-3dblox --input stack.3dbx --output stack.odb
$ vyges opendb check-3dblox --input stack.odb
$ vyges opendb check-d2d --input stack.3dbx
$ vyges opendb view-3dblox --input stack.3dbx --output stack.svg
Install
vyges install loom — with the Loom suite
Command
vyges opendb
License
Apache-2.0

Used by: anyone building a multi-die product, and any step that needs to read or edit a placed design directly.

Source on GitHub → · Releases

vyges-sdc

Timing constraints · Constraints

Timing constraints you can trust — the SDC every stage of the flow times against, read once, checked, and written back the same way every time.

What it does

Every timing result in the flow is only as good as the constraints behind it, and a wrong constraint does not produce a wrong-looking report: it produces a clean one. vyges-sdc reads SDC into the same constraint model the Loom timer uses, so the checker and the timer always agree about what a file says. It checks the constraints against the design — coverage, consistency, and the clock domains an IP declares — and writes them back in one canonical form. Nothing is dropped silently: anything it does not carry is listed by name, never guessed at.

In → out

.sdc + netlist + .lib  ──►  vyges-sdc  ──►  findings · coverage · canonical .sdc

Run it

$ vyges install physical
$ vyges physical sdc check --sdc design.sdc --netlist design.v --lib cells.lib
$ vyges physical sdc check --sdc design.sdc --netlist design.v --lib cells.lib --json
$ vyges physical sdc write --sdc design.sdc -o normalised.sdc
Install
vyges install physical — with the physical engines
Command
vyges physical sdc
License
Apache-2.0

Used by: anyone who writes or inherits an SDC — for a new block, an integrated IP, or a flow handed from one tool to the next — and needs to know the constraints mean what they say.

Source on GitHub → · Releases

vyges-resize

Gate sizing · Timing ECO

Gate sizing — pick a better drive strength for each cell to close setup timing or recover area. Where sign-off says what's wrong, this fixes it.

What it does

vyges-resize reads a netlist + Liberty + constraints and picks a better drive strength for each cell — upsizing cells on the critical path to close setup violations, downsizing cells with slack to recover area — then emits the resized netlist and a before/after timing report. The logic never changes; only the cell variant does. Every candidate is scored by the vyges-sta-si timer — it's pure Rust, so you can experiment with GPUs too via rust-gpu. It picks sizes, not locations: placement and routing stay the flow's job.

In → out

netlist + .lib + constraints  ──►  vyges-resize  ──►  resized netlist + before/after timing

Run it

$ vyges install loom
$ vyges loom resize demo
$ vyges loom resize run top.resize -o sized.v
$ vyges loom resize run top.resize --fail-on-violation
Install
vyges install loom — with the Loom suite
Command
vyges loom resize
License
Apache-2.0

Used by: anyone closing timing on a synthesized or placed netlist — or trimming area/power once it's met.

Source on GitHub → · Releases

vyges-vt-swap

Leakage / speed trade · Timing ECO

Threshold-voltage swapping — trade a cell for a higher- or lower-Vt flavor of the same footprint to cut leakage while holding timing, or to close setup.

What it does

A higher-Vt flavor of a gate is slower but leaks far less; a lower-Vt flavor is faster but leakier. vyges-vt-swap is the sibling of vyges-resize — same idea, same timer-scored loop, but it trades threshold voltage (leakage/speed) rather than drive strength (area/speed). Two objectives, the inverse of each other:

In → out

netlist + .lib + constraints  ──►  vyges-vt-swap  ──►  resized netlist + before/after timing & leakage

Run it

$ vyges install loom
$ vyges loom vt-swap demo
$ vyges loom vt-swap run top.vtswap -o swapped.v
$ vyges loom vt-swap run top.vtswap --json
Install
vyges install loom — with the Loom suite
Command
vyges loom vt-swap
License
Apache-2.0

Used by: anyone with leakage budget to recover after timing closes — or a few stubborn paths to speed up.

Source on GitHub → · Releases

vyges-buffer-insert

Transition fixup · Timing ECO

Buffer insertion — when a net is so heavily loaded its driver's transition blows past the limit, split it: a fresh buffer takes over a share of the sinks so the driver switches faster.

What it does

The third of the Loom optimizers, after resize and vt-swap. Those swap a cell for one with the same footprint; this one adds cells. vyges-buffer-insert finds the driver whose output transition most exceeds the limit, splits its net (a fresh buffer drives half the sinks, the driver keeps the rest), rebuilds the timer on the mutated netlist, and keeps the insertion if the worst transition dropped without breaking setup — repeating until every net is under the limit.

In → out

netlist + .lib + constraints  ──►  vyges-buffer-insert  ──►  buffered netlist + before/after slew & timing

Run it

$ vyges install loom
$ vyges loom buffer-insert demo
$ vyges loom buffer-insert run top.bufins -o buffered.v
$ vyges loom buffer-insert run top.bufins --json
Install
vyges install loom — with the Loom suite
Command
vyges loom buffer-insert
License
Apache-2.0

Used by: anyone chasing a max-transition / slew violation on a high-fanout net.

Source on GitHub → · Releases

vyges-hold-fix

Post-route hold · Timing ECO

Post-route hold-fix ECO — data reaching a capture flop too early? Insert a delay cell in series on the offending pin, deepening a chain only where hold stays negative, until the hold constraint is met.

What it does

The hold counterpart to resize, vt-swap and buffer-insert — all of which fix the late / setup corner. Hold is the opposite problem: data arrives at a capture flop too early on the min-delay path. vyges-hold-fix reads the timer's per-endpoint hold slacks, inserts a delay cell in series on each hold-violating capture pin, grows a delay chain only where hold stays negative, and keeps a move only if the worst hold slack improved without pushing setup negative — so a slow clock's ample setup slack pays for hold closure, never the reverse.

In → out

routed netlist + .lib + .spef + constraints  ──►  vyges-hold-fix  ──►  hold-fixed netlist + before/after WHS & WNS

Run it

$ vyges install loom
$ vyges loom hold-fix demo
$ vyges loom hold-fix run top.holdfix -o fixed.v
$ vyges loom hold-fix run top.holdfix --json
Install
vyges install loom — with the Loom suite
Command
vyges loom hold-fix
License
Apache-2.0

Used by: anyone left with hold violations after detailed routing — the ones the setup-side ECOs can't touch.

Source on GitHub → · Releases

vyges-cdc

Clock-domain guard · Structural checks

Clock-domain-crossing check — the metastability bug a simulator can't see. Find every signal that crosses between unrelated clocks without a synchronizer, named and located.

What it does

When a signal launched on one clock is captured by a flop on an unrelated clock, the capture can go metastable. That failure is invisible to a lockstep gate-level simulator — it samples one settled value per tick. Catching it is a purely structural graph question: vyges-cdc assigns each flop a clock domain by tracing its clock pin back to an SDC clock source, walks each capture flop's data cone to the flops that launch it, and reports every cross-domain crossing — flagging the ones that aren't a clean synchronizer.

In → out

netlist + .lib + .sdc  ──►  vyges-cdc  ──►  crossings (OK / unsynchronized), CI exit code

Run it

$ vyges install loom
$ vyges loom cdc check design.v --lib cells.lib --sdc design.sdc
$ vyges loom cdc check design.v --lib cells.lib --sdc design.sdc --json
$ vyges loom cdc check design.v --lib cells.lib --sdc design.sdc --fail-on-violation
Install
vyges install loom — with the Loom suite
Command
vyges loom cdc
License
Apache-2.0

Used by: anyone integrating IP across multiple clocks — where the bug shows up in silicon, not in the testbench.

Source on GitHub → · Releases

vyges-glitch

Glitch / hazard finder · Structural checks

Static glitch / hazard analysis — find where a signal can momentarily glitch before it settles. The reconvergent-fanout hazard a cycle-based simulator steps right over.

What it does

When one signal reaches a gate's output by more than one path, those paths can disagree for a moment — and the output glitches before it settles. That is exactly what a lockstep gate-level simulator cannot see: it samples one settled value per tick and steps over the intermediate glitch. vyges-glitch catches it as a structural + timing question — it traces reconvergent fan-out and classifies each hazard static (paths of differing inversion parity) or dynamic (same parity, a delay-skewed settling window).

In → out

netlist + .lib  ──►  vyges-glitch  ──►  hazards (static / dynamic, with the window), CI exit code

Run it

$ vyges install loom
$ vyges loom glitch check design.v --lib cells.lib
$ vyges loom glitch check design.v --lib cells.lib --json
$ vyges loom glitch check design.v --lib cells.lib --fail-on-violation
Install
vyges install loom — with the Loom suite
Command
vyges loom glitch
License
Apache-2.0

Used by: anyone whose design feeds an async path, a latch, or a clock gate — where a transient glitch becomes a real bug.

Source on GitHub → · Releases

vyges-char

Parallel model compiler · Library · analog

Standard-cell characterization — generate Liberty (.lib) timing & power models from SPICE, in parallel, from one declarative job.

What it does

vyges-char takes SPICE models and a cell list and produces a Liberty library — the timing and power model every downstream sign-off step (STA, power) depends on. It orchestrates the underlying SPICE runs in parallel, which is the piece the open-source flow has historically lacked; it is validated against reference Liberty for the open PDKs. The emitted Liberty is standard Liberty that downstream sign-off tools consume directly, and supports multi-corner, multi-voltage characterization.

In → out

SPICE models + cell list  ──►  vyges-char  ──►  .lib (Liberty timing & power)

Run it

$ vyges install loom
$ vyges loom char demo
$ vyges loom char run inv.char -o inv.lib
$ vyges loom char library cells.charlib -o out/
Install
vyges install loom — with the Loom suite
Command
vyges loom char
License
Apache-2.0

Used by: PDK teams, standard-cell library developers, and platform teams validating reusable IP.

Source on GitHub → · Releases

vyges-meas

Analog measurement · Library · analog

Analog measurement you can defend — SNR, SINAD, THD, SFDR from a captured tone; gain, bandwidth, unity-gain frequency and phase margin from a sweep. Every number states the method that produced it, and refuses the inputs it cannot measure that way.

What it does

“SNR” on its own is not a measurement. The same capture, measured by two honest tools, can differ by several dB purely on convention: whether the fundamental bin is excluded from noise, how many harmonics are counted, whether DC is in the band, what happens to a harmonic that aliases onto another. vyges-meas does not implement “SNR” — it implements one closed method, states every choice it makes, and refuses a capture it cannot measure that way rather than returning a number that quietly means something else.

In → out

captured tone / AC sweep  ──►  vyges-meas  ──►  SNR · SINAD · THD · SFDR · gain · BW · phase margin

Run it

$ vyges install loom
$ vyges loom meas demo
$ vyges loom meas spectral tone.series --fundamental-bin 16 --metric thd
$ vyges loom meas spectral tone.series --fundamental-bin 16 --metric snr --target 60
$ vyges loom meas transfer ac.sweep --metric phase-margin
Install
vyges install loom — with the Loom suite
Command
vyges loom meas
License
Apache-2.0

Used by: anyone signing off an ADC, DAC, PLL or amplifier from simulation or bench data — where the number goes in a datasheet and has to survive review.

Source on GitHub → · Releases

vyges-gds-view

Layout viewer · View

Headless GDS / OASIS layout viewer — render a layout to a layered SVG and overlay exactly where DRC or LVS flagged a problem. The where to the what, in any browser, no GUI to install.

What it does

drc and lvs tell you what is wrong with a layout. They don't show you where. vyges-gds-view closes that loop: render the GDS to a single self-contained SVG — every shape coloured by its layer, a legend, the Y axis the right way up — and drop the violation coordinates on top. Open it in any browser, commit it to a report, or diff it in CI. No display server, no GUI toolkit.

In → out

GDS (+ violation marks)  ──►  vyges-gds-view  ──►  a layered SVG with the overlay

Run it

$ vyges install loom
$ vyges loom gds-view demo -o demo.svg
$ vyges loom gds-view render block.gds -o block.svg
$ vyges loom gds-view render block.gds --marks viols.txt -o block.svg
Install
vyges install loom — with the Loom suite
Command
vyges loom gds-view
License
Apache-2.0

Used by: anyone debugging a DRC/LVS failure in CI — where you need to see the spot, not just read a coordinate.

Source on GitHub → · Releases

New · formal verification on RTL

vyges-formal

Simulation shows a design does the right thing on the tests someone wrote. A property campaign asks the stronger question while the RTL is still changing: does it keep its promises on every input sequence? vyges-formal binds your monitors into the RTL, proves or refutes every property and cover, replays every counterexample in simulation as a second witness, re-proves mutants to measure the property set, and writes one report tied to the git commit of the RTL it ran on.

$ vyges install physical
$ vyges formal run manifest.toml --out formal-out   # prove, replay, mutate, report
$ vyges formal replay manifest.toml <id> --out formal-out   # one counterexample, cycle by cycle

Exit status gates CI: 0 when every result is as expected, 2 when anything is not. Source and manifest format on GitHub →

Digital and analog / mixed-signal. Four of these — extract, em-ir, thermal, lvs — extend to analog & mixed-signal physical & integrity verification (connectivity, RC, IR/EM, thermal), and meas is analog natively: it measures the block's behaviour from captures and sweeps rather than its layout. Digital functional/timing sign-off stays digital.

Seconds, not stages

One binary per step. Nothing to stand up, nothing to orchestrate, no container to warm. Iterate on a floorplan or a grid as fast as you can think of the next thing to try.

Errors you can act on

Not “failed”. Which cell, which layer, which rule rejected it and what it wanted instead — so the next thing you do is the fix, not a bisect.

It fails before it writes

An illegal grid or an unbuildable floorplan costs you a message, not a corrupted database and an afternoon working out where it went wrong.

Bringing a block through this? Tell us what you are building — we work directly with the teams using these, and turnaround on a real blocker is measured in days.

Underneath · the geometry kernel

vyges-layout — the clean-room Rust geometry kernel the layout-side tools ride on: it reads both GDSII and OASIS (the compact modern format, compressed or not) and does the boolean / flatten the engines need — so vyges-lvs, drc and gds-view take a layout in either format, no external converter. A foundation library, not a sign-off engine — it emits geometry, not a verdict — so it sits beneath the engines rather than among them.

vyges-loom — the cross-engine data spine

.odb ─► ifp · mpl · tap · pdn · ppl · pad ─► gpl · rsz · dpl · cts ─► grt ─► drt ─► fin ─► routed .odb ─► ant
                                        └─► stt ─► est ─► .spef ─► sta-si
.ext ─► extract ─► .spef ──┐
.char ─► char ─► .lib ─────┼─► sta-si ─► WNS/TNS
                           └─► power ─► activity ─┬─► em-ir ─► IR/EM
                                                  └─► thermal ─► temp/hotspot
.gds/.oas + rules ─► lvs ─► MATCH / MISMATCH   ·   drc ─► DRC violations   ·   gds-view ─► layout SVG
.v/.json + .lib + .sdc ─► cdc · glitch · lec ─► crossings · hazards · EQUIVALENT? (+ counter-example)

One declarative job file per run; one standard artifact out; the next engine reads it directly — every engine shares the vyges-loom spine, so there are no glue scripts and no silent copy-drift. The same files a foundry's sign-off team expects (Liberty, SPEF) — produced by an open, scriptable, CI-native flow instead of a black box.

It's real software

$ vyges install loom
# fetch the Loom suite on demand — prebuilt from its public release into ~/.vyges/bin
$ vyges loom char demo  ·  vyges loom extract demo  ·  vyges loom sta-si demo  ·  vyges loom em-ir demo  ·  vyges loom power demo  ·  vyges loom thermal demo  ·  vyges loom lvs demo
$ vyges loom resize demo  ·  vyges loom vt-swap demo  ·  vyges loom buffer-insert demo  ·  vyges loom hold-fix demo  ·  vyges loom drc demo  ·  vyges loom gds-view demo
# a zero-setup demo per analyze / optimize engine — built-in example, no inputs · the structural checkers (cdc, glitch, lec) run on a netlist — see each engine above

Standard Liberty / SPEF outputs drop straight into existing sign-off flows, and the engines are CI-exercised on the open PDKs (sky130, gf180) — that's what "commercial-grade" means here.

New · AI optional · runs on your hardware

Three ways to drive Loom — AI is optional

A model reasons; Vyges executes. Reach the same engines three ways — from the CLI & CI, from your AI IDE, or by registering a model and letting vyges drive it. Bring any AI model — general-purpose (Claude, GPT, Grok), open-weight (Qwen, Llama, DeepSeek), or a semiconductor-specific model such as SemiKong. If it can call tools, it can drive Loom through vyges mcp. It all runs on your hardware — no cloud, no upload, no auth.

1 · CLI & CI

No AI at all

vyges loom drc run … — scriptable, CI-native, reproducible. The deterministic core stands on its own.

2 · AI IDE — bring your model

Claude Code · Cursor · VS Code

Point any MCP client at vyges mcp; your assistant calls the engines as tools. You bring the model, Vyges brings the tools.

3 · vyges model run — autonomous

Register a model; Vyges drives it

Register a local model with vyges model; vyges model run runs the reason → act → observe loop itself — for CI, air-gapped, and autonomous flows.

Every engineer already knows how to use Claude or Cursor. Now those same assistants can drive real silicon implementation tools.

See it actually happen

A published conformance run — on a clean runner, not our laptop

We publish the run. An AI agent is handed a set of plain-English requests and nothing else — no fine-tuning, no hard-coded command lines — and has to work out which engine to reach for from the engines' own --describe contracts, then run them on a fresh GitHub Actions machine. The report shows what it picked, what it ran, and what came back. It is a demo bundle of the suite, sized to run in minutes on a free runner — not every engine on this page, and the fixtures are small.

Read the latest run report →

Runs on demand rather than on a schedule, so the report is dated — the timestamp on it is the run you are reading. Source and fixtures: vyges-loom-testbench.

Already using SemiKong?

Keep your model. Register it with vyges model, point it at vyges mcp, and it can drive DRC, LVS, timing, extraction, and optimization against your own PDK and private IP — entirely on local hardware.

$ vyges install loom
$ vyges mcp setup  # register Loom with the AI IDEs on your machine
# then, in your IDE: "run DRC on this GDS against the sky130 deck installed locally"

All three routes are the same binary. vyges loom, vyges mcp and vyges model ship in the Vyges CLI — install once and you have all three, whether or not you ever point a model at them.

Routes 2 and 3 both run through vyges mcp, the local MCP server — how the engines describe themselves, and how you control what an agent is allowed to change. How it works →

Deterministic execution

The AI is a driver, never inside the engines. Pull it out and the exact same flow runs headless in CI — reproducible, the way a tapeout demands.

Your design never leaves your box

A plain local subprocess over stdio — no server, no port, no auth. The right trust model for RTL, layout, and PDKs under NDA.

loom.feedback — the agent's eyes

One call returns a rendered layout, categorized DRC verdicts, and a score — so an agent can debug a layout, not just pass/fail it.

Walkthrough: Point your AI IDE at your own silicon tools →

See it live: an off-the-shelf model drives every Loom engine, from a fresh install → — no fine-tuning, no orchestration code, running in a clean cloud environment.

Already on OpenLane / LibreLane? Drop these in.

These are sign-off engines, not another flow — single std-only binaries, seconds not stages, no nix store and no 60-stage orchestration to sanity-check timing. You keep running LibreLane for place-and-route; you just enter it cleaner and verify its output with a faster, more legible checker.

Right after Yosys (pre-P&R) — shift the gate left

Catch a broken constraint, a timing wall, a power problem — or a clock-domain crossing, a glitch, a logic change an ECO slipped in — before you spend an hour in P&R, so you re-spin the heavy flow fewer times.

EngineRuns onCatches early
sta-sisynth netlist + .lib + SDCbroken constraints, a timing wall, bad clock setup
powersynth netlist + .lib + VCD/vectorlessa power / activity problem while it's still cheap to fix
cdcsynth netlist + .lib + SDCan unsynchronized clock-domain crossing — before it's a silicon-only metastability bug
glitchsynth netlist + .liba reconvergent-fanout glitch on an async / latch / clock-gate path
lectwo netlists + .liba synthesis re-run or hand-ECO that silently changed the logic

After the flow produces layout — independent fast sign-off

Run on LibreLane's own DEF/GDS for a second opinion — faster than re-spinning the flow, and it names what diverges where the built-in tools stay terse.

EngineRuns onRole
extractrouted DEFSPEF — second opinion vs OpenRCX (0.997 on a routed block)
sta-sinetlist + real SPEFpost-route timing with the actual parasitics
em-irPDN + currentsIR-drop / electromigration
thermalfloorplan + power mappeak temperature + the hotspot (with leakage ⇄ temp coupling)
lvsextracted GDS + schematicMATCH / MISMATCH with readable diagnostics vs Netgen
drcrouted GDS/OASIS + rule deckgeometry second opinion vs Magic / KLayout — width/space/area/density/antenna/enclosure (+ metal fill)
gds-viewGDS/OASIS + violation markssee where a DRC/LVS failure is — a layered SVG overlay, no GUI

Honest note: these don't change LibreLane's optimizer, so they don't make P&R itself faster. "Faster convergence" means fewer expensive flow spins (you enter with clean inputs) and an independent verdict that catches what the flow's own tools miss or report cryptically. char isn't in this loop — it builds libraries, not per-design checks.

Open core. The moat is the calibration, not the engine.

Every engine here is Apache-2.0, on GitHub, runnable today — and orchestrated end-to-end inside VyBox Sley (the flow container, in early access). What stays private is the only thing that should: the per-foundry calibration plugins (NDA), which encode confidential process data. The engine is open; the fab-specific accuracy is gated.

That mirrors how the rest of the flow treats OpenROAD, Yosys, KLayout, and Magic — commodity steps, openly usable, with the value in how Vyges composes and signs off on them.

Where the engines fit

vyges CLI ─► Catalog + PDK ─► Vyges Loom (engines + spine) ─► VyBox Sley ─► Silicon

This is the missing layer between PDKs and containers — where sign-off becomes software.

Want the design rationale first? Read the papers behind Loom — the data-spine architecture and how we let AI drive it safely →

Questions, or found a bug? Join the discussion on GitHub →