Vyges Loom · Optimizer
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.
Used by: anyone with leakage budget to recover after timing closes — or a few stubborn paths to speed up.
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:
.lib + constraints ──► vyges-vt-swap ──► resized netlist + before/after timing & leakage
Because the swap keeps the same footprint, placement and routing are untouched — run it as a post-place ECO and hand the netlist back to the flow. It reports total cell leakage before and after (read from the .lib's cell_leakage_power) alongside the timing it preserved; the built-in demo recovers a large share of leakage on a met design without moving WNS below zero. It's pure Rust — experiment with GPUs too via rust-gpu.
Sign-off is still the golden timer — these numbers are a fast, license-free guide.
A .vtswap file lists the iso-footprint Vt families fastest → slowest (low-Vt → high-Vt), the objective (leakage or timing), an effort budget, and dont_touch globs. Add a spef: to score against real interconnect. The legal flavors come entirely from your .lib.
Standard CLI: --json, --quiet, --verbose, --fail-on-violation for CI.
Swapping is driven entirely by your Liberty — the Vt flavors and their delay/leakage — so vyges-vt-swap carries no foundry-confidential data. See all the engines & the data spine →