UCSBarchlab / PyRTL

A collection of classes providing simple hardware specification, simulation, tracing, and testing suitable for teaching and research. Simplicity, usability, clarity, and extensibility are the overarching goals, rather than performance or optimization.
http://ucsbarchlab.github.io/PyRTL
BSD 3-Clause "New" or "Revised" License
253 stars 76 forks source link

PyRTL

PyPI version Build Status Code Coverage Documentation Status Binder

PyRTL provides a collection of classes for Pythonic register-transfer level design, simulation, tracing, and testing suitable for teaching and research. Simplicity, usability, clarity, and extensibility rather than performance or optimization is the overarching goal. Features include:

What README would be complete without a screenshot? Below you can see the waveform rendered right on the terminal for a small state machine written in PyRTL.

Command-line waveform for PyRTL state machine

Tutorials and Documentation

Package Contents

If you are just getting started with PyRTL it is suggested that you start with the examples/ first to get a sense of the "thinking with PyRTLs" required to design hardware in this way. If you are looking for a deeper understanding, dive into the code for the object Block. It is the core data structure at the heart of PyRTL and defines its semantics at a high level -- everything is converted to or from the small, simple set of primitives defined there.

The package contains the following files and directories:

Testing requires the Python packages tox and pytest. Once installed a complete test of the system should be possible with the simple command tox and nothing more.

Contributing to PyRTL

Picking a first project

Coding style

Workflow

Documentation

Using PyRTL

We love to hear from users about their projects, and if there are issues we will try our best to push fixes quickly. You can read more about how we have been using it in our research at UCSB both in simulation and on FPGAs in our PyRTL paper at FPL.

Related Projects

It is always important to point out that PyRTL builds on the ideas of several other related projects as we all share the common goal of trying to make hardware design a better experience! You can read more about those relationships on our PyRTL project web page.