The FPGA CLI ecosystem. IP registry with license detection, 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.
pip install routertl
Python 3.14 note: routertl 3.21.1+ installs cleanly on Python 3.14, but
rr sim(cocotb-backed simulation) is temporarily unavailable there — cocotb 2.0.x hardcodes a Python ≤3.13 limit in its build script. Use Python 3.10–3.13 for sim work; everything else (rr pkg,rr lint, registry, MCP server) works on 3.14. The conditional drops once cocotb 2.1 ships with 3.14 support upstream.
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]
IP Registry. Cross-Language Dependency Resolution.
rr pkg search ethernet # browse the catalog
rr pkg add fpganinja/taxi::taxi_eth_mac_1g # Verilog — single module from a repo
rr pkg add open-logic/olo_base_fifo_async # VHDL — library deps auto-resolved
rr pkg add openhwgroup/cva6 # SystemVerilog — full RISC-V SoC
The registry detects licenses (MIT, GPL, CERN-OHL) and warns about copyleft conflicts. Every package is scanned with role computation — tops, components, and primitives classified automatically.
When you install a package, RouteRTL:
- Queries the registry for dependency metadata
- Resolves missing libraries and modules to their provider packages
- Auto-installs transitive dependencies
- Compiles everything in the correct order
- Lints and reports results
Pre-packaged from open-logic, fpganinja (Corundum, Taxi Ethernet/AXI/PCIe), OpenHW Group (CVA6/CORE-V), PULP Platform (AXI, common cells), Analog Devices, VUnit, Enclustra, NEORV32, and more. Pinned by commit SHA in a lock file.
What You Get
| Three-Register Architecture | rr pkg (IPs), rr rules (design rules with exact-part + IP-version scoping), rr ref (reference designs — buildable projects with version-pinned IP deps). Overview → |
| IP Package Manager | Growing registry with license detection, cross-language dependency graphs, lock files, R1–R9 description quality pipeline (validator + scanner self-heal + submit gate + CI gate + weekly drift guard), 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 — 69 IPs, flat multi-root VHDL library. All 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 rules check # match design rules to current toolchain
rr ref list / install # scaffold from a reference design
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 migrateimports Vivado projects (Quartus support coming soon). Or runrr initinside an existing repo and adjust thepaths: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. Mazure — routertl.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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file routertl-3.21.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.
File metadata
- Download URL: routertl-3.21.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
- Upload date:
- Size: 17.8 MB
- Tags: CPython 3.14, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.20
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e08c04a935920c303d78f80c0bd851032195998389ea66a005cb5246d981deba
|
|
| MD5 |
2a9909d0a93589a69c41d40bcef36fad
|
|
| BLAKE2b-256 |
aaa5b8b5aa0d682231dd1e2c7aa6e0e56f27641e0049a3fa2c518c45aba740b7
|
File details
Details for the file routertl-3.21.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.
File metadata
- Download URL: routertl-3.21.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
- Upload date:
- Size: 18.0 MB
- Tags: CPython 3.13, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.20
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8292e4c3aa765002c9bbf9b015bc64298a8c708ac73166c2a21ac8c451f9b43c
|
|
| MD5 |
ab3f46f8823d6c31b420166c4e0baf31
|
|
| BLAKE2b-256 |
a272da99b87c7f96641660756121378c8872d390cb8fcb43859b2a2cdcd44b95
|
File details
Details for the file routertl-3.21.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.
File metadata
- Download URL: routertl-3.21.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
- Upload date:
- Size: 18.1 MB
- Tags: CPython 3.12, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.20
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
389127f2b0cb0eed2dfe3c914a2060bc5063d0beee7d73cd95b09e5cc22eedad
|
|
| MD5 |
3b844cc1550398e5d4f093f272cee69a
|
|
| BLAKE2b-256 |
95badbe3b87829f93b71ec7d0944a41c2a6dde96444a8f5edaebd937fd6e9a42
|
File details
Details for the file routertl-3.21.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.
File metadata
- Download URL: routertl-3.21.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
- Upload date:
- Size: 18.8 MB
- Tags: CPython 3.11, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.20
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
de7ee94d4e218ddd0fedfa91bdbc631d2a3d1f500988959b66011ecb8385e7a4
|
|
| MD5 |
230ef1e851d52c578c19140ae7763ef3
|
|
| BLAKE2b-256 |
c8cd8928b156617490054f42aabeab48dad2b2b6c0613270032a503bfcc5ef74
|
File details
Details for the file routertl-3.21.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.
File metadata
- Download URL: routertl-3.21.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
- Upload date:
- Size: 17.9 MB
- Tags: CPython 3.10, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.20
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
28b37860f3d06b4e35e06731f1ced762527effe06a010a34d53c3d3dc23db58f
|
|
| MD5 |
6002c13b1868b981574117b824068e36
|
|
| BLAKE2b-256 |
59b07c00dd780cb814cbe771eaa511aaa2a3ceb6a60fb664bdcf26f649321108
|