vyges physical grt — CLI reference
Generated from vyges physical grt --help — this page is the tool’s own output, verbatim.
vyges-grt — global routing: route guides from a placed design
USAGE:
vyges-grt route <job.json> [-o REPORT.json]
vyges-grt --describe
vyges-grt --help
vyges-grt --version
JOB (JSON):
{ "lefs": [..], "liberty": [..], "def": ".." | "db": "..", "timer_slacks": "..",
"steps": [ STEP, .. ] }
timer_slacks: slacks captured from a reference timer, `<call> <net> <f32 hex bits>` per line.
With liberty and no clock every net is unconstrained; with a clock and a period the slacks are timed at each
read (captured timer_slacks, when given, answer instead); with a clock and neither, a pass that reads slacks is refused.
STEP is one of
{ "cmd": "set_routing_layers", "signal": [lo, hi], "clock": [lo, hi] }
{ "cmd": "layer_adjustment", "layers": [lo, hi], "value": f } (one layer: lo == hi)
{ "cmd": "global_adjustment", "value": f } (the `*` form)
{ "cmd": "region_adjustment", "rect_um": [x0, y0, x1, y1], "layer": l, "value": f }
{ "cmd": "macro_extension", "value": n } (set_macro_extension: tiles)
{ "cmd": "routing_alpha", "alpha": f, "nets": [..] | "min_fanout": n | "min_hpwl": um | "clock_nets": true }
{ "cmd": "nets_to_route", "patterns": [..] } (Tcl globs)
{ "cmd": "global_route", "verbose": b, "allow_congestion": b, "grid_origin": [x, y],
"skip_large_fanout": n, "congestion_iterations": n, "critical_nets_percentage": f,
"resistance_aware": b, "res_aware_nets_percentage": f, "use_cugr": b }
(use_cugr: CUGR — its model and every stage written to the file $VYGC_OUT names)
{ "cmd": "create_clock", "ports": [..], "name": s, "period": f, "waveform": [r, f] } (user units: the slacks are timed)
{ "cmd": "set_input_delay" | "set_output_delay", "value": f | "period_times": f,
"ports": [..] | "inputs_except_clocks" | "outputs" } (relative to the clock's rise edge)
{ "cmd": "set_layer_rc", "layer" | "via": name, "resistance": f } (user units)
{ "cmd": "propagated_clock" }
{ "cmd": "estimate_parasitics", "placement": b } (what a timer read with no estimate of its own sees)
{ "cmd": "write_parasitics", "path": ".." } (the networks the slacks are read from)
{ "cmd": "write_spef", "path": "..", "source": "partial" | "routed" }
{ "cmd": "write_guides", "path": ".." }
{ "cmd": "write_db", "path": ".." } (the database as global_route leaves it: guides, gcell grid, what detailed routing reads)
{ "cmd": "antenna_wires", "path": ".." } (the wires antenna checking synthesises from the guides)
{ "cmd": "repair_antennas", "diode_cell": s, "iterations": n, "ratio_margin": f, "jumper_only": b,
"diode_only": b, "allow_congestion": b, "violations": "..", "trace": ".." }
diode_cell: the master to repair with (its one signal terminal); without it, the first
CORE ANTENNACELL with diffusion area. Jumpers, then diodes legalized in place, then the
dirty nets rerouted. violations (optional): the reference checker's answers, captured
(`VYGA|viol|…` lines), in place of this engine's own check.
OPTIONS:
-o FILE write the JSON report to FILE instead of stdout
--json accepted; the report is JSON either way
--describe print a machine-readable JSON description of the command
EXIT STATUS:
0 routed every step ran; the report lists each global_route and every file written
0 up_to_date every global_route routed no net because every routable net already has
wiring (each call's already_wired counts them); nothing needed routing
2 vacuous every step ran but none produced anything (no global_route, no file written),
or every global_route found no routable net (GRT-0007). NOT a pass
2 error usage, unreadable input, a failed write, congestion without allow_congestion,
or an input the reference rejects too (`reason` carries its code and text)
3 refused a step needs a feature not modelled yet (named in `reason`)
Contract
Generated from vyges physical grt --describe.
grt
global routing from a placed design: route guides per net, from a job that replays a routing script’s steps (layer settings, adjustments, global_route, antenna repair, write_guides)
Maturity: structured
route {job}
| Input | Type | Required | Description |
|---|---|---|---|
job | [‘string’, ‘object’] | yes | the JSON job {lefs, liberty, def | db, steps: [{cmd, …}]} – see –help for the step list: a path to the file, or the job object itself (the server writes it to a content-addressed file) |
report | string | no | write the JSON report to FILE instead of stdout |
Consumes: job
Artifacts: route_guides (guides_written)
Assertion: globally-routed — passes when status is one of routed, up_to_date
Provenance limitations
- status is one of routed, up_to_date, vacuous, refused or error. UP_TO_DATE: every global_route routed no net because every routable net already has wiring – each call’s already_wired counts them, the evidence the check ran. VACUOUS IS NOT ROUTED: every step ran but none produced anything – no global_route and no file written – or every global_route found no routable net (GRT-0007: no net with at least 2 terms), so nothing was routed. Exit status is 0 for routed and up_to_date, 2 for vacuous and for error, 3 for refused.
- input_hash covers the argument vector, not the content of the job file or of the design files it names.
- Correlated end to end on the guide files it writes, compared against a fresh reference run: 85 of 85 cases of the reference router’s own global-routing regression suite, 2026-09-25 – 80 exact from the scripts’ inputs, and 5 exact on a database whose pin access points vyges-drt pin_access wrote. Both routers are covered (the default one and the CUGR one), with timing-driven routing timed by this engine’s own timer and no captured slacks. The correlation harness is not part of this repository.
- write_db is correlated on the database it writes: on 84 of 84 comparable cases of the same suite it equals the reference’s database right after global routing – every net’s guides in order, the gcell grid, the routing layers and the grt_use_cugr property – 2026-09-26. Detailed-routing that database with vyges-drt gives a DEF byte-identical to the reference’s global_route plus detailed_route on 67 of them, antenna-repair jumper routes included, and differs on none; of the rest the detailed router refuses 9 and the reference itself routes nothing on 8. Not written: the gcell grid’s per-cell capacity and usage, which nothing downstream reads.
- repair_antennas checks the antennas itself and inserts jumpers and diodes; a captured
violationsfile can stand in for its check, as an ORACLE. timer_slacks, when given, also answers the timer’s reads from a captured file instead of computing them. - REFUSED rather than approximated: reading pin access points during antenna checking or antenna-wire synthesis; incremental routing with no CUGR route in the session; database edits the incremental bracket does not model (named); RC commands before any liberty library; a clock period with no liberty library to time it; any step not listed in –help.
- Global routing that ends congested without allow_congestion is an error, as it is in the reference (after the guides are saved).
- The Steiner trees are built by vyges-stt and the placement parasitics by vyges-est, each correlated separately.