Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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}
InputTypeRequiredDescription
job[‘string’, ‘object’]yesthe 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)
reportstringnowrite 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 violations file 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.