vyges loom hold-fix — CLI reference
Generated from vyges loom hold-fix --help — this page is the tool’s own output, verbatim.
vyges loom hold-fix — post-route hold-fix ECO (insert series delay on hold-violating capture pins)
usage:
vyges loom hold-fix run JOB [-o OUT] [--json] [--fail-on-violation] hold-fix -> delayed netlist
vyges loom hold-fix check JOB validate the job
vyges loom hold-fix demo hold-fix a built-in example (no files)
flags:
-o FILE write the hold-fixed netlist to FILE (default: stdout)
--json emit the before/after report as JSON
--eco FILE write the ECO manifest (insertions) as JSON — for a physical applier
--fail-on-violation exit 3 if the result still has negative hold slack (CI gate)
-q, --quiet suppress non-essential output
-v, --verbose extra detail on stderr
--describe print a machine-readable JSON description of the command
-h, --help show this help
-V, --version show version
Contract
Generated from vyges loom hold-fix --describe.
hold-fix
post-route hold-fix ECO (insert series delay on hold-violating capture pins)
Maturity: structured
run {job}
| Input | Type | Required | Description |
|---|---|---|---|
job | string | yes | path to the hold-fix job file (design, netlist, lib, clock, buffer, hold margin) |
out | string | no | write the hold-fixed netlist to FILE (default: stdout) |
eco | string | no | write the ECO manifest (insertions) as JSON, for a physical applier |
Consumes: netlist, liberty, timing_report
Artifacts: netlist (out), eco_manifest (eco)
Assertion: hold-eco — none; this operation establishes no engineering claim
Provenance limitations
- The job names the netlist, Liberty and timing report; input_hash covers the job path and arguments, not their contents.
- KNOWN DEFECT: on at least one real block this toolchain reports hold violations that OpenSTA and sign-off both say do not exist, and the CAUSE IS NOT YET IDENTIFIED. Measured on a routed sky130 block with the same netlist, SDC, SPEF and liberty given to both: setup WNS 6.7322 against OpenSTA 6.85 (1.7% apart), but hold WHS -1.0682 against OpenSTA +0.88 and sign-off +0.8821 – out by 1.95 ns and disagreeing about the sign. Asked about the endpoint this toolchain calls worst, OpenSTA answers No paths found. On that block this engine inserts 599 delay cells into a design already hold-clean by 0.88 ns.
- Two explanations have been tested and REJECTED, recorded so they are not re-run: it is not the async check taxonomy, since vyges-sta-si implements recovery and removal, reads the removal table rather than the data hold table, and has a test asserting it; and it is not unconstrained input ports, since that block’s SDC constrains the port in question at 12 ns and varying the job-level input_delay does not move the result at all.
- Until the cause is found: cross-check the worst hold endpoints against your sign-off timer before applying a plan; treat async reset endpoints as suspect, since that is where this has been seen; and exclude instances with dont_touch, which accepts globs. The plan-and-apply split keeps it recoverable – this engine emits a plan and never mutates a design – but the plan must be reviewed.