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 fpganinja/taxi_eth_mac_10g    # 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), fpganinja (Corundum, Taxi Ethernet/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 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 projects (Quartus support coming soon). 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 builds on the work of several outstanding open-source projects. We gratefully acknowledge:

Project Role in RouteRTL
NVC Primary VHDL simulator for Cocotb 2.0+ simulation
GHDL VHDL analysis, linting, and secondary simulation backend
Cocotb Python-based verification framework powering rr sim
Verilator Verilog/SystemVerilog simulation and linting backend
Icarus Verilog Lightweight Verilog simulation backend
xpm_vhdl Open-source VHDL implementation of Xilinx XPM macros
Rich Terminal formatting for CLI output
Jinja2 Template engine for code generation

RouteRTL would not be possible without these projects and their maintainers.

Contributing

The best way to contribute is to use RouteRTL and tell us what breaks. To report a bug, suggest a feature, or share how you're using it, email support@routertl.dev. Include the output of rr doctor when reporting issues.

See CONTRIBUTING.md for details.

Contact

Built and maintained by Daniel J. Mazureroutertl.dev · support@routertl.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.11.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (10.6 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

routertl-3.11.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (11.0 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

routertl-3.11.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (10.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

routertl-3.11.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (11.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

routertl-3.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (10.6 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

routertl-3.11.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (11.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

routertl-3.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (10.1 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

routertl-3.11.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (10.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

File details

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

File metadata

File hashes

Hashes for routertl-3.11.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 598f56a2ecc71902cdd9abb4554db1cbca20bc37742825bc81322fcfb4ec5b82
MD5 304d0a8b9f5d40d932699182e416055a
BLAKE2b-256 99374ce3ad0a2482bbaecebca6ad0386f7a2b35f62fe15a7abafd8c07e9bcad8

See more details on using hashes here.

Provenance

The following attestation bundles were made for routertl-3.11.0-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.11.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for routertl-3.11.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 baeb0f1d2a95a49d49bfc7edeb4f10f0787c51ae06bf70f0009f65b3c895aa81
MD5 1e4080b19582b2626136bc2a854cd61c
BLAKE2b-256 d7ae4805fda1bbec08690e9886ede36522200ebe62092c5daf3eda3e46f9a332

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for routertl-3.11.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9fb069d320b4db9a07aaa5382d57d3f3727575d542be8f3c4f7b7a29d78e4aa7
MD5 2fe9b0764ac374eea4285bf34b4b0b65
BLAKE2b-256 90b93707ad018930b4c34ebbb4e8d419ea60d7e80197319545f819b3aad0dcd2

See more details on using hashes here.

Provenance

The following attestation bundles were made for routertl-3.11.0-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.11.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for routertl-3.11.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 4df4f378a20089c7d5983c7ce322f79f2e2abf7f79575a2b7945bdfafda77d66
MD5 a09266006bb7a1d11999abe185be4d41
BLAKE2b-256 1b7f27c855ec5d249a562bdf2415495b86d69234e61c5c45318871a015a8c32c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for routertl-3.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8bda6ec350a73f8ac7dcdde838d1c537bb1a60ad3f77ff2101c540a74613e3b6
MD5 20099fe15c02617a0dcaa1a0cdd68959
BLAKE2b-256 4fb19e7665a011b61575219b9beab205f7a80830178bbc53b0acc617443a9d6a

See more details on using hashes here.

Provenance

The following attestation bundles were made for routertl-3.11.0-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.11.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for routertl-3.11.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 ebd2901df1e2d6e0fa10cd94468ebd5cac7af942d1736706ad915e7297e56793
MD5 c48e17a870d2b3fe1fa917e52035fddb
BLAKE2b-256 be1357a4cadfc251213678a8425a7e00fb2c655bf88bdebd660c68583e401113

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for routertl-3.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7a9c825ba5faac108729eb2f586c711de5df50c7d36d7f716befd4f53a15b898
MD5 c6a52c7f4e5c26cf0926f5a1f1a0f86a
BLAKE2b-256 1a91a9be4046865df4c450a0608789ac2a5e305e8d56fa0cc1cf8a28bf8a6a04

See more details on using hashes here.

Provenance

The following attestation bundles were made for routertl-3.11.0-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.11.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for routertl-3.11.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 022f579598ac7250e3c8183486bd1f24ab0228dd2b3b3452207f399f2390b5de
MD5 c48c3121994315928b24bb6ce4c5a609
BLAKE2b-256 91868850ad5e45de1b94bbca54a58519aa4ace9fdc30f12b9fbcb828322fa1a8

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