RouteRTL
Command-line SDK for FPGA projects: simulation, linting, IP packages and vendor builds from one project.yml.
RouteRTL is a command-line SDK for FPGA development. A project is described in
project.yml. RouteRTL reads the HDL sources, works out the compile order
from the code, and drives the simulators, linters and vendor tools. The CLI
command is rr.
Main functions:
- Source discovery and dependency resolution for VHDL, Verilog and SystemVerilog. File lists and compile order are derived from the sources.
- An IP package manager (
rr pkg) backed by a public registry. Package dependencies are resolved across languages, and each package carries a license classification. - cocotb 2.1+ simulation (
rr sim run) with shipped bus-functional models. - Linting (
rr lint) with configurable profiles. - Synthesis, implementation and bitstream generation for AMD/Xilinx, Altera, Lattice and Microchip devices, plus an open-source Yosys/nextpnr flow.
- An MCP server and agent skills for use with AI coding agents.
Installation
python3 -m venv .venv
source .venv/bin/activate
pip install routertl
Release wheels are built for Python 3.10 to 3.14.
On Ubuntu 24.04+, Debian 12+ and other systems with an externally managed
Python, a plain pip install routertl outside a virtual environment fails
with error: externally-managed-environment. Use the virtual environment
above, or pipx install routertl for a global CLI. Not recommended:
--break-system-packages. It installs into the system Python and can
break system packages.
Optional extras: routertl[mcp] (MCP server), routertl[docker] (Docker
tool images) and routertl[web] (web services). The base install does not
include them.
Platform notes for Linux, WSL2 and macOS are in the Installation Guide.
Quick start
This example uses the uart_loopback template. It installs the
open-logic/olo_intf_uart package from the registry, lints the design and
runs two cocotb tests on NVC.
mkdir my_uart && cd my_uart
rr init --template uart_loopback --name my_uart
rr lint
rr sim run
rr init --template creates the project in the current directory. The
template declares the UART package, so rr init installs it. To add a
package to any project, run rr pkg add <vendor>/<package>.
rr init --list-templates lists the other templates. first_success uses
only open-source tools (Icarus Verilog and Yosys) and needs no vendor license.
To create an empty project for a specific device:
rr init --name my_project --vendor xilinx --part xc7z020clg400-1
To import an existing Vivado (.xpr) or Quartus (.qpf / .qsf) project, use
rr migrate run <project>.
IP packages
rr pkg search ethernet
rr pkg add open-logic/olo_base_fifo_async
rr pkg add fpganinja/taxi::taxi_eth_mac_1g
rr hierarchy --forest
rr pkg add resolves the package's HDL dependencies, including dependencies
between VHDL and Verilog sources. rr hierarchy --forest prints the resolved
design hierarchy. The registry is at
registry.routertl.dev.
Commands
| Area | Commands |
|---|---|
| Project | rr init, rr migrate run, rr status, rr doctor, rr hierarchy |
| Packages | rr pkg search, rr pkg add, rr pkg update, rr deps graph |
| Lint | rr lint |
| Simulation | rr sim run, rr sim list, rr sim scaffold, rr testgen, rr watch |
| Build | rr synth run, rr implementation run, rr bitstream run, rr report |
| Hardware | rr program run |
| Tools | rr eda install <tool>, rr docker install <env> |
| Waveforms | rr routewave |
| AI agents | rr mcp install, rr skills install, rr skills search |
rr --help --all lists every command. rr help <command> shows the manual
page for one command.
Supported tools
| Function | Tools |
|---|---|
| Simulation | NVC, GHDL, Verilator, Icarus Verilog. Questa, Riviera-PRO, Active-HDL and Xcelium when installed. |
| Synthesis and implementation | Vivado, Quartus Pro and Standard, Lattice Radiant and Diamond, Microchip Libero, Yosys with nextpnr |
| Waveforms | RouteWave (rr routewave), GTKWave |
rr eda install builds NVC, GHDL, Verilator, Icarus Verilog and Yosys from
pinned sources. rr docker install provides container images for vendor
tools.
Simulation API
import cocotb
from routertl.sim import Tb
@cocotb.test()
async def test_my_module(dut):
tb = Tb(dut)
await tb.start_clock()
await tb.reset()
Each test file ends with a call to run_simulation(...) and runs with
rr sim run <test>. rr sim bfms lists the shipped bus-functional models.
They include AXI4, AXI4-Lite, AXI4-Stream, APB, Avalon-MM, Avalon-ST,
Wishbone, UART, SPI, I2C and GMII.
Use with AI agents
RouteRTL includes an MCP server (rr_* tools for schema lookup, lint,
simulation and diagnosis) and a set of agent skills. In the project
directory:
pip install 'routertl[mcp]' # MCP server dependencies (not in the base install)
rr mcp install # registers the routertl server in ./.mcp.json
rr skills install # copies the agent skills into ./.claude/skills
rr skills install --scope user installs the skills for all projects.
rr skills search <words> finds a skill. Details are in
MCP Server.
Documentation
| Topic | Link |
|---|---|
| First project | First Steps Tutorial |
| Writing simulations | Cocotb Quickstart |
| Protocol drivers | Driver Cookbook |
project.yml fields |
project.yml Reference |
| Existing projects | Existing Project Migration |
| Errors | Troubleshooting |
| All documents | Documentation Index |
Requirements
| Tool | Required | Notes |
|---|---|---|
| Python 3.10 to 3.14 | Yes | CLI and simulation framework |
| Git | Yes | Version control and dependency tracking |
| NVC | Recommended | Default VHDL simulator. rr eda install nvc builds the pinned release. Ubuntu 24.04 has no nvc apt package. The release .deb also works. |
| GHDL >= 6.0 | Recommended | VHDL analysis for rr lint. rr eda install ghdl builds the pinned release. Ubuntu 24.04 apt provides 4.1.0, which rr lint does not accept. |
| Vendor tools | Optional | Vivado, Quartus, Radiant, Diamond or Libero, installed locally or with rr docker install |
Acknowledgments
RouteRTL uses the following open-source projects:
| Project | Use in RouteRTL |
|---|---|
| NVC | Default VHDL simulator |
| GHDL | VHDL analysis, linting and simulation |
| cocotb | Python verification framework used by rr sim |
| Verilator | Verilog/SystemVerilog simulation and linting |
| Icarus Verilog | Verilog simulation |
| xpm_vhdl | VHDL models of Xilinx XPM macros |
| Rich | Terminal output |
| Jinja2 | Code generation templates |
Support
Bug reports and feature requests: support@routertl.dev. Please include the
output of rr doctor. See CONTRIBUTING.md for
contributions.
RouteRTL is developed and maintained by Daniel J. Mazure (routertl.dev).
Licensing
RouteRTL is distributed under two licenses:
| Component | License | Terms |
|---|---|---|
| CLI, build system, cocotb drivers, hooks, documentation, examples | MIT | Use, modification and redistribution with attribution |
Compiled core (routertl_core/*.so) |
RouteRTL Core License 1.0 | 30-day evaluation; then free for registered individuals; a commercial license for organizations of any size; no competing product |
| Compiled core, academic use | RouteRTL Academic License 1.0 | Teaching and published non-commercial research at accredited institutions and non-profit public research institutes |
The RouteRTL Core License 1.0 applies from release 5.1.0. Releases before 5.1.0 remain under the PolyForm Shield License 1.0.0 they were published with.
Licensing questions
| Question | Answer |
|---|---|
| Evaluation? | Anyone may use RouteRTL, including its paid features, for 30 days. |
| Individual use after the evaluation? | Free of charge for an individual's own benefit, after free registration. Paid features need a seat. |
| Use in a company? | After the 30-day evaluation, an organization of any size needs a commercial license: a named seat per engineer or a company-wide Enterprise license. See routertl.dev/pricing. |
| Open-hardware project? | Free for a hardware design whose sources are published under an open license. This covers the project, not other use by the organization that runs it. |
| Commercial products? | Permitted under a commercial license. RouteRTL places no claim on the designs built with it. |
| Modification of the CLI or build system? | Permitted under the MIT license. |
| Working around the licence key check? | Not permitted under the RouteRTL Core License. |
| Redistribution of the PyPI wheel? | Permitted, unmodified. |
| What counts as competing? | Distributing an FPGA SDK that replaces RouteRTL. Using RouteRTL to build an FPGA product is not competing. |
Copyright 2024-2026 Daniel J. Mazure
Metadata
Release files for routertl 5.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| routertl-5.1.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl | CPython 3.14 | CPython 3.14 | Linux glibc 2.17+ x86-64 | Details |
| routertl-5.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl | CPython 3.13 | CPython 3.13 | Linux glibc 2.17+ x86-64 | Details |
| routertl-5.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl | CPython 3.12 | CPython 3.12 | Linux glibc 2.17+ x86-64 | Details |
| routertl-5.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl | CPython 3.11 | CPython 3.11 | Linux glibc 2.17+ x86-64 | Details |
| routertl-5.1.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl | CPython 3.10 | CPython 3.10 | Linux glibc 2.17+ x86-64 | Details |
Total release size: 485.3 MB
Release files / routertl-5.1.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
| Download URL | routertl-5.1.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl |
|---|---|
| Size | 94.9 MB |
| Tags | CPython 3.14 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
efbf9a58ec331c5adb3f45c2e16eb96688daed976a23053d7a3a0b3f1673e78f
|
|
BLAKE2b-256 checksum How to use checksums |
f33838dd177eb91e6e24913220a1e8de92f03b30c725e9d40c6c5fd4735a060f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.22
|
Release files / routertl-5.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
| Download URL | routertl-5.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl |
|---|---|
| Size | 94.3 MB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
659c22c2bc567f6ece383b46ef43b3409c432388d14d1b522b29176f6715935d
|
|
BLAKE2b-256 checksum How to use checksums |
37b607e33bf553e7517607903d98b451f1db3a3ad9d73ed15ceb35415b4f7874
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.22
|
Release files / routertl-5.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
| Download URL | routertl-5.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl |
|---|---|
| Size | 94.4 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
1c0054b55a55001e4a6ec6da4bb41492da238075beda20705e53c0a8318951f2
|
|
BLAKE2b-256 checksum How to use checksums |
19fb29a1abc41870555cde79e4d0f6be4e5d827b5e7a683ef14d00b4d577e4c2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.22
|
Release files / routertl-5.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
| Download URL | routertl-5.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl |
|---|---|
| Size | 100.7 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
c2636d0d82803cfb044bcee23a4dfd010a1e208f2dcac90cc424a8cf04460c8a
|
|
BLAKE2b-256 checksum How to use checksums |
4f285ac396848b3bc175b132c5b48051151795adc790dd958d4e55bf410ad283
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.22
|
Release files / routertl-5.1.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
| Download URL | routertl-5.1.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl |
|---|---|
| Size | 100.9 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
3063b2a01844601df2307a3c0d183196be90c8aa392285fb27814698bdaa9985
|
|
BLAKE2b-256 checksum How to use checksums |
613696216a13ffb5053cdb46a3c563b69280ae9bb874bb37cb8010786ff93f5f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.22
|
Security for routertl 5.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.