Skip to content

WorldofKerry/Python2Verilog

Repository files navigation

Moved to https://github.com/WorldofKerry/ToHDL

Open In Colab pypi py versions pypi downloads pytest

python2verilog

  • This tool facilitates the conversion of select Python functions (including generators!) into synthesizable sequential SystemVerilog
  • Ideal for quickly translating higher-level "CPU code" into hardware descriptions for use on FPGAs, without needing to interface with or including a CPU in the design
  • Testbenches can be automatically generated if the user uses the function within their Python code or provides explicit test cases
from python2verilog import verilogify

@verilogify
def hrange(base, limit, step):
    i = base
    while i < limit:
        yield i
        i += step
print(list(hrange(0, 10, 3)))

A live transpile demo can be found here.

Specifications

Some constrains on Python functions include:

  • Supports only signed integral input/output and operations
  • Must be a pure function

Unsupported Python paradigms include but are not limited to the following:

  • Global (nonlocal) variables, instead declare them within the function with minimal overhead
  • Keyword parameters and default arguments, instead use explicit positional arguments

Usage and Installation

Try it in Google Collab or check out examples/!

python3 -m pip install --upgrade pip

python3 -m pip install python2verilog

Tested Generations

You may find the output of the integration testing as a Github Artifact available for download.

For Developers

To setup pre-commit, run pre-commit install.

Github Issues are used for tracking.

Sphinx is used for the docs. Follow the sphinx workflow to generate a local copy.

Testing

Requirements

For most up-to-date information, refer to the pytest workflow or the packaging workflow.

A Ubuntu environment (WSL2 works too, make sure to have the repo on the Ubuntu partition, as os.mkfifo is used to avoid writing to disk)

Install required python libraries with python3 -m pip install -r tests/requirements.txt

For automatic Verilog simulation and testing, install Icarus Verilog and its dependencies with sudo apt-get install iverilog expected (uses the unbuffer in expected).

The online simulator EDA Playground can be used as a subsitute if you manually copy-paste the module and testbench files to it.

Running Tests

To run tests, use python3 -m pytest.

CLI arguments for test configuration can be found in tests/conftest.py.

Use git clean -dxf to remove gitignored and generated files.