Skip to main content

FPGA build system with 2,000+ IP package manager. Cross-language dependency resolution, smart linting, multi-vendor synthesis — one pip install.

Project description

RouteRTL
The FPGA build system that reads your HDL and figures it out.

Website PyPI Registry MIT License PolyForm Shield Python 3.10+ Cocotb 2.0


pip install routertl

RouteRTL is a command-line FPGA SDK with a built-in IP package manager. Install a UART core, an AXI interconnect, or a full RISC-V SoC — dependencies are resolved automatically from the source code. No manual file lists. No compilation order. No "works on my machine."

Install an IP, See It Work

rr init --non-interactive --no-venv
rr pkg add open-logic/olo_intf_uart
rr lint olo_intf_uart
  + open-logic/olo_intf_uart ^4.4.1
  Resolving 1 package(s) from https://registry.routertl.dev
    open-logic/olo_intf_uart: ^4.4.1 -> 4.4.1
  Written ip.lock (1 packages)

  Lint passed  (ghdl)

RouteRTL cloned the package, resolved 8 transitive VHDL dependencies, compiled them in the correct library order, and linted — all from one command.

rr hierarchy --forest

  olo_intf_uart  (olo_intf_uart.vhd, 8 files)
  |-- olo_base_strobe_gen
  |   +-- [1 pkgs: olo_base_pkg_math]
  |-- olo_intf_sync
  |   +-- [1 pkgs: olo_base_pkg_attribute]
  +-- [3 pkgs: olo_base_pkg_logic, olo_base_pkg_math, olo_base_pkg_string]

2,000+ IP Blocks. Cross-Language Dependency Resolution.

rr pkg search ethernet                    # browse the catalog
rr pkg add alexforencich/eth_arb_mux      # Verilog — deps auto-expanded
rr pkg add grlib/greth                    # VHDL — library deps auto-resolved
rr pkg add openhwgroup/cva6              # SystemVerilog — full SoC

The registry knows what every package provides and what it needs — both VHDL libraries and Verilog modules. When you install a package, RouteRTL:

  1. Queries the registry for dependency metadata
  2. Resolves missing libraries and modules to their provider packages
  3. Auto-installs transitive dependencies
  4. Compiles everything in the correct order
  5. Lints and reports results

Pre-packaged from open-logic, GRLIB (LEON/NOEL-V), alexforencich (verilog-ethernet, verilog-axi), OpenHW Group (CVA6/CORE-V), VUnit, Enclustra, and more. Pinned by commit SHA in a lock file.

What You Get

IP Package Manager 2,000+ blocks, cross-language dependency graphs, lock files, rr pkg search/add/update
Auto-Discovery Point at a source tree — VHDL, Verilog, SystemVerilog hierarchy resolved automatically
Multi-Vendor Synthesis Vivado, Quartus (Pro/Standard), Radiant, Libero — change one word in project.yml
Cocotb 2.0+ Simulation rr sim, rr testgen, rr watch — NVC, GHDL, Verilator, Icarus, QuestaSim
Protocol Drivers UART, SPI, I2C, QSPI, AXI4-Lite, AXI4, Avalon-MM — included, zero extra deps
Smart Linting Hierarchy-aware, incremental, multi-pass — rr lint just works
Code Generation Bus bridges (AXI/Avalon/Native), register banks (VHDL + C headers + HTML docs)
Pre-Commit Gates Lint + simulate + YAML check on every commit
Docker EDA Provisioning rr docker install vivado — headless vendor tool setup, same environment everywhere

Battle-Tested

Validated against real-world codebases with zero configuration beyond rr init:

  • open-logic — 77 entities, 4 IP areas, flat multi-root library. 77/77 files resolved, 0 violations.
  • NEORV32 — 56 entities, deep monolithic SoC, complex generics. 0 violations.

The CLI

rr init                       # scaffold a project
rr hierarchy --forest         # design hierarchy
rr lint                       # smart lint (GHDL + Verilator)
rr sim test_my_module         # simulate (cocotb 2.0+)
rr testgen edge_counter       # generate test boilerplate
rr watch                      # re-run on save
rr synth run my_top           # synthesize
rr implementation             # place & route
rr bitstream                  # generate bitstream
rr report                     # utilization & timing
rr deps graph                 # dependency visualization
rr pkg search / add / update  # IP package manager
rr migrate                    # import existing Vivado/Quartus projects
rr docker install vivado      # headless EDA provisioning
rr doctor                     # toolchain health check

Both routertl and rr work as entry points.

Quick Start

1. Install

pip install routertl

For platform-specific instructions (Linux, WSL2, macOS), see the Installation Guide.

2. Initialize

rr init --name my_project --vendor xilinx --part xc7z020clg400-1

Creates project.yml, directory structure, virtual environment, and pre-commit hooks.

Existing project? rr migrate imports Vivado and Quartus projects. Or run rr init inside an existing repo and adjust the paths: block.

3. Add IP and Build

rr pkg add open-logic/olo_base_fifo_sync  # install with deps
rr lint                                    # verify everything compiles
rr sim test_my_module                      # run simulation
rr synth run my_top                        # synthesize

Simulation API

from routertl.sim import Tb, run_simulation, UartSource, SignalCollector

@cocotb.test()
async def test_my_module(dut):
    tb = Tb(dut)
    await tb.start_clock()
    await tb.reset()
    # Your test logic here

Native protocol drivers included: AXI4-Lite, AXI4, Avalon-MM, Native Memory, UART, SPI, I2C — with passive monitors and bridge scoreboards.

Who Is This For?

  • FPGA engineers who want reproducible, scriptable builds instead of vendor GUI projects
  • Teams integrating FPGA into CI/CD pipelines
  • Multi-vendor shops targeting Xilinx, Intel/Altera, Lattice, and Microchip from one project.yml

Documentation

I want to...

Goal Link
Create my first project First Steps Tutorial
Write a simulation Cocotb Quickstart
Use a protocol driver Driver Cookbook
Understand project.yml project.yml Reference
Migrate an existing project Existing Project Migration
Fix an error Troubleshooting
Browse all docs Documentation Index

Prerequisites

Tool Required Notes
Python 3.10+ Yes CLI and simulation framework
Git Yes Version control and dependency tracking
NVC Recommended VHDL simulator for Cocotb 2.0+ (.deb)
GHDL Recommended VHDL analyzer (fast linting)
Vendor tools Optional Vivado / Quartus / Radiant / Libero — or rr docker install

Acknowledgments

RouteRTL stands on the shoulders of outstanding open-source projects: NVC · GHDL · Cocotb · xpm_vhdl · Verilator · Icarus Verilog · Rich · Jinja2

Contributing

The best way to contribute is to use RouteRTL and tell us what breaks — open an issue, suggest a feature, or share how you're using it. Run rr doctor and include the output if reporting a bug.

See CONTRIBUTING.md for details.

Contact

Built and maintained by Daniel J. Mazureroutertl.dev

Licensing

RouteRTL uses a dual-license model:

Component License You can...
CLI, build system, cocotb drivers, hooks, docs MIT Use, modify, redistribute — no restrictions
Compiled core (routertl_core/*.so) PolyForm Shield 1.0.0 Use for any purpose except building a competing product
Licensing FAQ
Question Answer
Can I use RouteRTL commercially? Yes — use it to build, simulate, and ship your FPGA products without restriction.
Can I modify the CLI or build system? Yes — they're MIT-licensed. Fork, extend, contribute PRs — all welcome.
Can I decompile the .so modules? No — that violates the PolyForm Shield license.
Can I redistribute the PyPI wheel? Yes — as-is, per standard PyPI terms.
What counts as "competing"? Building and distributing an FPGA SDK that substitutes for RouteRTL. Using RouteRTL to build your own product is not competing.

Copyright 2026 Daniel J. Mazure

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

routertl-3.8.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (9.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

routertl-3.8.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (10.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

routertl-3.8.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (10.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

routertl-3.8.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (10.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

routertl-3.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (9.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

routertl-3.8.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (10.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

routertl-3.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (9.3 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

routertl-3.8.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (10.0 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

File details

Details for the file routertl-3.8.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for routertl-3.8.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 821c9872b6e364c5ff3ea5579a8b33885ee6626ac3cd0b742a4c082339f865d7
MD5 7c1a0256179f53dabc27b8bc5ccab546
BLAKE2b-256 774adb6aa6ce37ec33e372f8d22ec97c071370d5b2eb58683fcf52025cf7cad5

See more details on using hashes here.

Provenance

The following attestation bundles were made for routertl-3.8.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: build-wheels.yml on djmazure/routertl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file routertl-3.8.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for routertl-3.8.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 7bdfe1d328fb211a338a9b6d9066d8c8dd8e6efc3b9c21e092017fd29829bf85
MD5 82c1ef8249959f03cb4c1b85f754e022
BLAKE2b-256 bb574e0d348ec15cd88b72eebdf5b4401e275753e7aaea75c04e26d3d652b51c

See more details on using hashes here.

File details

Details for the file routertl-3.8.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for routertl-3.8.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 90fa30e347688da6c43baec9b58bc75256637cf9b119b10af7c477638d0e3005
MD5 f772c5ba529e37af4579ef7e14e68a37
BLAKE2b-256 caaba39d79ca3004b0f775ed9a59707bb491ba6e9c243ef192277889f85a3d2e

See more details on using hashes here.

Provenance

The following attestation bundles were made for routertl-3.8.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: build-wheels.yml on djmazure/routertl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file routertl-3.8.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for routertl-3.8.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 154f4050260c40f5d13c3c0af1937bfd4262f09c02b472d2e4001ffa28d50648
MD5 bb928defdfe023ce76036e3146ad2886
BLAKE2b-256 1103e2513fc76dcccb2797242b428b18b79f94e7d0bcca50c0bfbdadd302fc2a

See more details on using hashes here.

File details

Details for the file routertl-3.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for routertl-3.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e3f364db56fe8805423657628c79e473d2337057173edcbbc7d5240a8799e6c4
MD5 969c934e8d3379257e18a60e36881f6c
BLAKE2b-256 87ec1549775a92d725d49ea76012b5ef8f1530c4d56090dbc0441497e4952ad3

See more details on using hashes here.

Provenance

The following attestation bundles were made for routertl-3.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: build-wheels.yml on djmazure/routertl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file routertl-3.8.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for routertl-3.8.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 5cbf95478fc401b93ca8e1374965ca157e68a166d3b621673b32486f21382381
MD5 3325b9c01c59290a7705e8307b3ffe23
BLAKE2b-256 cf002b6d5e8b2b37f94552ad91b0f2169053ebfed72e225fbea810acce8a5224

See more details on using hashes here.

File details

Details for the file routertl-3.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for routertl-3.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6ac2aed4464632fcf24cc59f866514570b4488121f2a8425361796b390427f1f
MD5 677d48529cb0d5e699934fb0c05f30a2
BLAKE2b-256 3d1c91d59bdcd1c10d5681dcb58dd3b160e0b24bcb09cd87ff0760ae7eb3d16c

See more details on using hashes here.

Provenance

The following attestation bundles were made for routertl-3.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: build-wheels.yml on djmazure/routertl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file routertl-3.8.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for routertl-3.8.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 acdebc9ab4875c1b2f81a4a5defb04c9377e2b3d377ee0d95dfcf57f6997a8bf
MD5 23330907dace00ff710c264b08f7c0de
BLAKE2b-256 eb1c1ade6fb7cd6d0a884a2cd26585dd37c362d18893665153d0c125ab6e7025

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page