A Python to VHDL compiler
Project description
CoHDL
CoHDL is a hardware description language embedded in Python. It translates a subset of Python into synthesizable VHDL.
examples/introduction
You can find an introduction and many examples in this documentation repository.
features
At its core CoHDLs language model is very similar to VHDL. Designs are made up of signals and variables built from types like Bit
and BitVector
. There are concurrent contexts, for expressions that would appear in the architecture scope of VHDL entities and sequential contexts equivalent to VHDL processes.
Code that uses only basic features also found in VHDL (if-statements, signal/variable assignments, arithmetic operators and so on) essentially looks like VHDL written in Python syntax. On top of that CoHDL supplies many additional features
coroutines
The initial motivation for CoHDL was to explore how well coroutines, found in many modern programming languages, translate to the domain of hardware description languages.
CoHDL turns Pythons async/await style coroutines into VHDL state machines. This process is completely deterministic and allows clock accurate modeling of sequential processes. The main advantage over explicit state machine implementations is, that coroutines are reusable.
Common sequences such as AXI transactions can be defined once and instantiated whenever needed.
supported Python subset
The following is an incomplete list of Python constructs supported in synthesizable contexts
- statements
- if
- for
- if expressions
- generator expressions
- most operators
- functions
- arbitrary argument types
- default arguments
- keyword arguments
- variadic arguments
- compile time recursion
- compile time evaluated builtin functions
- classes
- member access
- methods
- operator overloading
- inheritance
- overriding methods
- python container types
- list
- dict
- coroutines
meta programming
Since CoHDL is embedded in Python, it is possible to run arbitrary code before and after the compilation. This can be used to load configuration files or run external programs like simulators or synthesis tools on the generated VHDL.
For a working example of this checkout cohdl_xil. It generates Makefile projects for CoHDL designs targeting Xilinx FPGAs.
getting started
CoHDL requires Python3.10 or higher and has no further dependencies. You can install it by running
python3 -m pip install cohdl
in a terminal window. You should then be able to run the code snippets, found in the introduction repository and implement own designs.
Project details
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 cohdl-0.2.3.tar.gz
.
File metadata
- Download URL: cohdl-0.2.3.tar.gz
- Upload date:
- Size: 186.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.11.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 52e88737457cc6089537f4bfb1fae50563386d3a9238c20f90bbb6eb169af76f |
|
MD5 | 040767ece54efb831223e2be0fd4bb93 |
|
BLAKE2b-256 | b3063db7d581193a03718de79c10f2b1a16ba4f1abf5a9370c7e2fbf1ef58bd9 |
File details
Details for the file cohdl-0.2.3-py3-none-any.whl
.
File metadata
- Download URL: cohdl-0.2.3-py3-none-any.whl
- Upload date:
- Size: 213.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.11.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d6044c1511a896d8afa3e9f6d4f78f6c384c5f3ffae34701416fc6ca8ff367cd |
|
MD5 | e7131dba7c49d6c5a946fbacd4db2d47 |
|
BLAKE2b-256 | aa384d383626bda97a384aad04736bc2b617d91c112bb6f0ca912b203d088892 |