Vyges Loom · Optimizer
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.
Used by: anyone left with hold violations after detailed routing — the ones the setup-side ECOs can't touch.
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.
.lib + .spef + constraints ──► vyges-hold-fix ──► hold-fixed netlist + before/after WHS & WNS
Open place-and-route flows repair hold before detailed routing; the parasitics that detailed routing adds can then re-open it, with no later repair stage. vyges-hold-fix works after routing: with a .spef it scores against the real routed interconnect, targeting the residual hold the flow leaves behind. Each round is scored by a full timing build on the mutated netlist, and a move is kept only if worst hold improves and setup stays met. It decides which capture pins to delay and how deep a chain each needs; placement and routing of the inserted cells go back to the flow.
The built-in demo closes a two-flop hold violation (worst hold slack −0.20 → +0.10 ns, met) with a short delay chain while setup stays met. Sign-off is still the golden timer — these numbers are a fast, license-free guide.
A .holdfix file is a superset of a sta-si timing job — the same design/netlist/lib/sdc/spef keys — plus the hold knobs: the buffer: delay cell to insert, a hold_margin: target, rounds: (low/medium/high), and dont_touch globs.
Standard CLI: --json, --quiet, --verbose, --fail-on-violation for CI.
Driven entirely by your Liberty + constraints — no foundry-confidential data, runs out of the box on open PDKs. See all the engines & the data spine →