Vyges Loom · Optimizer
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.
Used by: anyone chasing a max-transition / slew violation on a high-fanout net.
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.
.lib + constraints ──► vyges-buffer-insert ──► buffered netlist + before/after slew & timing
Because inserting a buffer changes the netlist topology, each candidate is scored by a full timing build on the mutated netlist — correct, and bounded by the effort budget. A buffer costs a little delay, so on a met design the engine lets it consume slack as long as timing stays met; on a violating one it requires the move not to get worse. It is a pre-place structural fixup: it decides where in the logical net to split and hands placement of the new buffer back to the flow.
The built-in demo relieves a four-fanout net's transition with one buffer while keeping timing met. Sign-off is still the golden timer — these numbers are a fast, license-free guide.
A .bufins file names the buffer: cell to insert, a max_slew: transition limit, a min_fanout: threshold, an effort budget, and dont_touch globs. Add a spef: to score against real interconnect.
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 →