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 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.9.0-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.9.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (10.3 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

routertl-3.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (10.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

routertl-3.9.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (10.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

routertl-3.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (9.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

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

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

routertl-3.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (9.4 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

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

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

File details

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

File metadata

File hashes

Hashes for routertl-3.9.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c13d7dc633189a9f1f6472c65c06b2b591e511c5b282c741262c20ec9f173932
MD5 825afbf1612747238e0a59fa76576a79
BLAKE2b-256 c300616725bd308d56e18b392f735d574ab33d12ed6d5c9460bddff98031a80a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for routertl-3.9.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 015700880bdebf42ee8d3d8596bc26188c4f1a534d8f07ea5ce2d864be05c01c
MD5 35851b47fc11213264e1b229589c03da
BLAKE2b-256 d70c4c89ff090cca26453459a2b30bc2146c6f4b47dbf3c86fbf85494f038be5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for routertl-3.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 55001cac27c371d42301275960a602c39bb4a55aa6079d3c36ee97bc4da8540b
MD5 c6fdf62a9ee3b08cb8d9ac7e9f7852cf
BLAKE2b-256 cbeb53b87065cb3203046dbbe9df1143218dd5d8c0e93349da46fe27bd8460df

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for routertl-3.9.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 9f1cb93b869a3bf1a925bc566ad7a0c365a7a11c25e1f3625c948cd78bea5bea
MD5 efc77faf4fd091c731d8971790f3c8fc
BLAKE2b-256 9dd662c0121b7b8bdf593ccb8a3ee3fcb9fbd36474f94262dca9ee5f395fdc65

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for routertl-3.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 211ad0ef75aa37283307f84bc2106af23af25fab4d92229c3891204ff3184395
MD5 4b928acbd62d77c38f7690937500f43e
BLAKE2b-256 40204d6427accff93451a4616524bddc4cf7d4fe0b76182d663262f16369b04f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for routertl-3.9.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 d24bbe82682a556977b6272bff895f4707f4833a2284986212e917e44987f7c4
MD5 a2c4bc258066183b4fa1b79d35cce148
BLAKE2b-256 3e1fe9036a02e8434faf16006d57497894f4d5e19c3c54ed311f3a2a1bf9149b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for routertl-3.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 61e1cb4c92a7f6fee3d467df3d234dd79aadf58ae8f3e029e8a48449630e4787
MD5 8dd55fad84ef4ab3aa04d55ac736a1a3
BLAKE2b-256 9488344e3cae11fceca5007a044aaf29dc6873c4ddcfb75a793ebb5fb524f346

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for routertl-3.9.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 3abd961360a7e9b6f89c94aebdcb90799dfdd827f9a1fddacec33ed46290b9bf
MD5 0e7961482d238b623ee539dc59a6c4eb
BLAKE2b-256 e85c0468f1c01a25cb5b198d9449d9a7c7dd20b47141bcf3e90df521c4926125

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