NEXTPNR-ECP5(1)

✨ NEXTPNR-ECP5 ✨

okay bestie come CLOSE because this is the manual page for nextpnr-ecp5, and honestly it's giving "the whole pipeline in one binary" πŸ’… we're talking Next Generation Place and Route, version 0.10-5, and it lives under the manual section 1 for General Commands. yes it's a lot of flags. no you don't have to memorise them all. let's get into it 🫢


🌸 NAME 🌸

nextpnr-ecp5 β€” Next Generation Place and Route πŸ’–


πŸ¦‹ DESCRIPTION πŸ¦‹

nextpnr-ecp5 is Next Generation Place and Route, and this particular one is Version 0.10-5 ⭐ it takes your design from "a pile of logic" to "actually placed and routed", and it gives you approximately one million knobs to turn while it does it. no cap.

🧁 General options

the everyday stuff, the buttons you'll actually be mashing:

  • -h, --help β€” show help πŸ™‹β€β™€οΈ
  • -v, --verbose β€” verbose output, aka it tells you everything
  • -q, --quiet β€” quiet mode, only errors and warnings get shown 🀫
  • --Werror β€” turn warnings into errors. dramatic but valid πŸ’€
  • -l, --log arg β€” log file; all log messages are written to this file regardless of -q πŸ“
  • --debug β€” debug output
  • --debug-placer β€” debug output from the placer only
  • --debug-router β€” debug output from the router only
  • --threads arg β€” number of threads for passes where this is configurable 🧡
  • -f, --force β€” keep running after errors. chaotic. iconic.
  • --run arg β€” python file to execute instead of default flow 🐍
  • --pre-pack arg β€” python file to run before packing
  • --pre-place arg β€” python file to run before placement
  • --pre-route arg β€” python file to run before routing
  • --post-route arg β€” python file to run after routing
  • --on-failure arg β€” python file to run in event of crash for design introspection 😭 (when it all goes wrong, this is your little forensic buddy)
  • --json arg β€” JSON design file to ingest
  • --write arg β€” JSON design file to write
  • --top arg β€” name of top module πŸ‘‘
  • --seed arg β€” seed value for random number generator 🎲
  • -r, --randomize-seed β€” randomize seed value for random number generator
  • --placer arg β€” placer algorithm to use; available: sa, heap, static; default: heap
  • --router arg β€” router algorithm to use; available: router1, router2; default: router1
  • --slack_redist_iter arg β€” number of iterations between slack redistribution
  • --cstrweight arg β€” placer weighting for relative constraint satisfaction
  • --starttemp arg β€” placer SA start temperature 🌑️
  • --pack-only β€” pack design only without placement or routing
  • --no-route β€” process design without routing
  • --no-place β€” process design without placement
  • --no-pack β€” process design without packing
  • --ignore-loops β€” ignore combinational loops in timing analysis
  • --ignore-rel-clk β€” ignore clock-to-clock relations in timing checks
  • -V, --version β€” show version
  • --test β€” check architecture database integrity βœ…
  • --freq arg β€” set target frequency for design in MHz
  • --timing-allow-fail β€” allow timing to fail in design (it's fine, it's fine, everything's fine πŸ™ˆ)
  • --no-tmdriv β€” disable timing-driven placement
  • --sdc arg β€” Generic timing constraints SDC file to load
  • --sdf arg β€” SDF delay back-annotation file to write
  • --sdf-cvc β€” enable tweaks for SDF file compatibility with the CVC simulator
  • --no-print-critical-path-source β€” disable printing of the line numbers associated with each net in the critical path
  • --placer-heap-alpha arg β€” placer heap alpha value (float, default: 0.1)
  • --placer-heap-beta arg β€” placer heap maximum placement density (float, default: 0.9)
  • --placer-heap-critexp arg β€” placer heap criticality exponent (int, default: 2)
  • --placer-heap-timingweight arg β€” placer heap timing weight (int, default: 10)
  • --placer-heap-cell-placement-timeout arg β€” allow placer to attempt up to max(10000, total cells^2 / N) iterations to place a cell (int N, default: 8, 0 for no timeout)
  • --static-dump-density β€” write density csv files during placer-static flow
  • --parallel-refine β€” use new experimental parallelised engine for placement refinement ⚑
  • --router2-heatmap arg β€” prefix for router2 resource congestion heatmaps πŸ”₯
  • --tmg-ripup β€” enable experimental timing-driven ripup in router
  • --router2-tmg-ripup β€” enable experimental timing-driven ripup in router (deprecated; use --tmg-ripup instead) πŸ’€
  • --router2-alt-weights β€” use alternate router2 weights
  • --report arg β€” write timing and utilization report in JSON format to file
  • --detailed-timing-report β€” Append detailed net timing data to the JSON report
  • --placed-svg arg β€” write render of placement to SVG file 🎨
  • --routed-svg arg β€” write render of routing to SVG file

🧚 Architecture specific options

this is the ECP5 part, the part that actually knows what chip you're talking to:

  • --package arg β€” select device package (defaults to CABGA381)
  • --speed arg β€” select device speedgrade (6, 7 or 8)
  • --basecfg arg β€” base chip configuration in Trellis text format (deprecated)
  • --override-basecfg arg β€” base chip configuration in Trellis text format
  • --textcfg arg β€” textual configuration in Trellis format to write
  • --lpf arg β€” LPF pin constraint file(s) πŸ“Œ
  • --lpf-allow-unconstrained β€” don't require LPF file(s) to constrain all IO
  • --no-promote-globals β€” disable all global promotion
  • --out-of-context β€” disable IO buffer insertion and global promotion/routing, for building pre-routed blocks (experimental)
  • --disable-router-lutperm β€” don't allow the router to permute LUT inputs
πŸŽ€ heads up bestie: --basecfg is deprecated, and --router2-tmg-ripup is deprecated too (use --tmg-ripup instead). also --out-of-context and --parallel-refine are on their experimental arc β€” slay responsibly πŸ’…

and that's the whole thing, you made it to the end ily πŸ₯Ή this was nextpnr-ecp5 version 0.10-5, from March 2026 β€” go place and route something gorgeous, you've got this πŸ’–βœ¨πŸ¦‹

πŸ“¦ where this page comes from