Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

vyges-tools/resize

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

vyges-resize

STA-driven gate sizing: a gate-level netlist in, a resized netlist out — drive strengths chosen to close timing, scored by a real static-timing engine.

Vyges open EDA tools. Commercial-grade silicon optimization, built on open standards and plain file formats — accessible to everyone, not only teams who can license a six-figure tool. vyges-resize is the first of the "close-timing" engines: where the analysis tools say what's wrong, this one fixes it.

What it does

vyges-resize reads a netlist + Liberty + constraints and picks a better drive strength for each cell — upsizing cells on critical paths 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.

  netlist + .lib + constraints ──[ vyges-resize ]──►  resized netlist  (+ before/after timing)

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: physical placement / legalization / routing stay the flow's job. Run it beside the open flow — size the synthesized netlist, then hand the better netlist to place-and-route, or run it as an independent, legible second opinion.

How it works

A keep-best loop over the timer: rank the critical path, try a stronger variant on each of its instances (speculatively, via the timer's checkpoint/restore), commit the best move that improves setup without breaking hold, and repeat until timing is met or no move helps — then a downsizing pass recovers area where slack allows. Pure std Rust; fully unit-tested offline.

The job

A .resize file is a superset of a .sta timing job, plus the resize knobs:

design:     top
netlist:    top.v
lib:        tt.lib
spef:       top.spef               # optional — post-place ECO sizing (see below)
clock:      clk 1.2
input_slew: 0.02
output_load: 0.01
group:      INV  INV2  INV4        # interchangeable cells, weakest -> strongest (repeatable)
group:      NAND2 NAND2X2 NAND2X4
objective:  timing                 # timing | area  (default: timing)
effort:     medium                 # low | medium | high
dont_touch: clk_* *scan*           # instance-name globs to leave alone

The legal moves come from the group: families you declare (the drive-strength / Vt set from your PDK). Nothing is foundry-confidential — the .lib already encodes delay, transition, and power per variant.

Use it

cargo build --release            # std-only (depends on the open vyges-sta-si timer)

vyges-resize run   top.resize -o sized.v          # size -> resized netlist
vyges-resize run   top.resize --json              # before/after report as JSON
vyges-resize run   top.resize --fail-on-violation # exit 3 if still violating (CI gate)
vyges-resize check top.resize                     # validate the job
vyges-resize demo                                 # size a built-in example (no files)
# common flags: -o FILE · --json · -q/--quiet · -v/--verbose · -h/--help · -V/--version

See examples/inv_chain.resize for a runnable example.

Open core

vyges-resize is open and contains no foundry-confidential data — sizing is driven entirely by the .lib (the legal variants and their delay/power) and the constraints. It runs out of the box on open PDKs and on any PDK whose Liberty you have.

Post-place ECO mode

Name a spef: in the job and sizing is scored against the real interconnect the placed design presents — wire RC, effective capacitance, fan-out — instead of ideal nets. This is where drive-strength sizing earns its keep: a gate driving a long, heavily-loaded net is the one that actually needs a stronger variant, and that only shows up once the parasitics are in. Run it as a post-place ECO: place → extract (SPEF) → vyges-resize → hand the resized netlist back for legalization. Without a spef: it sizes pre-place against ideal interconnect; the report states which mode it ran in.

Domain coverage

vyges-resize operates on the standard-cell digital abstraction — it swaps standard-cell drive strengths (the iso-footprint variant families you declare), each candidate scored by the digital vyges-sta-si timer. That makes it a digital optimization engine: it applies wherever a design is built from characterized standard cells with drive-strength variants in the Liberty. It does not apply to analog / mixed-signal blocks — they have no standard-cell drive-strength variants and no Liberty-arc analogue for the timer to score. For analog / mixed-signal physical and integrity coverage, reach for the analog-capable Vyges engines — lvs, layout, em-ir, thermal, and extract.

Status & bounds

v0 sizes a netlist → netlist on the variant families you declare; objective timing closes setup WNS (and recovers area where slack allows), pre-place (ideal interconnect) or post-place (with SPEF, above). It is not a place-and-route tool — it decides sizes and hands physical realization back to the flow. Pre-place candidates are scored by a fast cone-localized incremental timing pass; with SPEF each candidate is scored by a full timing pass today (correct; the incremental score under parasitics lands behind the same loop). Sign- off is still the golden timer — vyges-resize's numbers are a fast, license-free guide.

Releases

Packages

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.