Converts a subset of python generator functions into synthesizable sequential SystemVerilog
Project description
python2verilog
- This tool facilitates the conversion of select Python generator functions 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, Modes
@verilogify(mode=Modes.WRITE)
def hrange(base, limit, step):
i = base
while i < limit:
yield i
i += step
print(list(hrange(0, 10, 3)))
Specifications
Constrains on Python functions include:
- Supports only
if
andwhile
blocks - Supports only signed integral input/output and operations
- Must be a generator function
- Must be a pure function
Unsupported Python paradigms include but are not limited to the following:
- Regular functions that use the
return
keyword, insteadyield
once for
loops, instead rewrite as awhile
loop- Global (nonlocal) variables, instead declare them within the function with minimal overhead
- Keyword arguments, instead use positional arguments
- Function calls, instead use the decorator on each of the subfunctions and manually connect together
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.
Creating A New Integration Test
To create a new test case and set up configs, run python3 tests/integration/new_test_case.py <test-name>
.
Running Tests
To run tests, use python3 -m pytest --write
.
Additional CLI flags can be found in tests/conftest.py.
Use git clean -dxf
to remove gitignored and generated files.
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 Distribution
Built Distribution
File details
Details for the file python2verilog-0.2.1.tar.gz
.
File metadata
- Download URL: python2verilog-0.2.1.tar.gz
- Upload date:
- Size: 51.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.18
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 27d221aaf73accb62d417a13275d12a924dcd02d5cca4011a0a7d38298b37620 |
|
MD5 | 3c96563845382274d6454f8f49469b46 |
|
BLAKE2b-256 | d86f78358b9b0287b8680d76b0231207dd6e5d5f8d70ca8eae2bccfa4d180622 |
File details
Details for the file python2verilog-0.2.1-py3-none-any.whl
.
File metadata
- Download URL: python2verilog-0.2.1-py3-none-any.whl
- Upload date:
- Size: 59.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.18
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a4b15f39c7b60da0a30c755463a209b146af541632f83238ab61178a3f11a522 |
|
MD5 | 2492a941e348daaeb2919eee4c4c0b93 |
|
BLAKE2b-256 | 374141a8cdb81dd0cfa7a2de344965015329bc94832deb92c27a2083c906661b |