This release is a pre-release and may not be stable for production use.
awesome-vunit-vcs
Verification components for VUnit that feel like VUnit's own: Ethernet, QSPI flash, I2C, MDIO, AXI4 monitoring and slaves, and property-based testing with Hypothesis inside the simulation.
Connect a component to the pins of your design and it sends, receives and checks traffic for you. Your testbench stays in VHDL, and the components do the protocol work in Python behind the scenes.
VHDL handles simulation timing. Python handles verification semantics.
📖 Documentation: https://awesome-vunit-vcs.readthedocs.io
Highlights
- Native VUnit components. Handles made by
new_<component>,commessages,wait_until_idle,resetand ordinary VUnit check failures. One context clause per family is all a testbench needs. - Checks you would otherwise write by hand. Monitors check preamble, SFD, FCS, frame length, PHY errors, control characters, inter-frame gaps and metavalues, each check switchable.
- Good and deliberately broken traffic. Sources send bad FCS, short preambles, wrong SFDs, errors and short gaps as easily as clean frames.
- Scoreboards, statistics and Wireshark captures with simulation timestamps, and AXI4 latency percentiles, bandwidth and backpressure next to VUnit's own AXI components.
- Property-based testing in VHDL. Hypothesis draws the stimulus, your testbench runs it through the design, and a failure shrinks to the smallest input that still fails.
- Python where it helps. Build frames, model a flash, I2C or MDIO device or write strategies in plain
Python, including in
pytestwithout a simulator.
What's inside
| Family | Interfaces | Components |
|---|---|---|
| Ethernet | GMII (1G, 2.5G), MII (10M, 100M), RGMII (10M–1G), RMII (10M, 100M) | source, monitor, protocol checker |
| XGMII family, 2.5G to 400G: 2.5GMII, 5GMII, XGMII, 25GMII, XLGMII, CGMII, 200GMII, 400GMII | source, monitor, protocol checker | |
| AXI-Stream MAC client, any width, with backpressure | source, sink, monitor, protocol checker | |
| Flash | QSPI NOR flash, x1, x2 and x4 lanes | flash responder, QSPI master, QSPI protocol checker |
| I2C | Standard-mode, Fast-mode, Fast-mode Plus; 7- and 10-bit addresses; SMBus PEC | master, target with Python device models (registers, 24Cxx EEPROM, your own), monitor, protocol checker |
| MDIO | Clause 22 management frames of Ethernet PHYs | PHY with a register file or a Python device model and a clock-to-output delay, master |
| AXI4 | AXI4 and AXI4-Lite, data 8 to 1024 bits, IDs, FIXED/INCR/WRAP bursts, narrow and unaligned transfers | monitor with shadow memory scoreboard and performance statistics, protocol checker, read and write slaves on a sparse 64-bit memory |
| Property-based testing | Any design | property_pkg: Hypothesis strategies, stateful tests, scores, lockup handling, replay |
Every component is tested with GHDL and NVC in CI.
Property-based testing, by example
examples/property has a small, runnable example for each common technique, many
with a planted bug you can switch on to watch Hypothesis find and shrink it:
- scalar, composite and stateful properties, and resource lifecycles with Hypothesis Bundles
- interleaved event schedules, recursive grammar-based inputs, and timing and clock ratio/phase (CDC)
- fault injection, invalid-input mutation, and lockup handling and recovery
- differential, round-trip and metamorphic properties, with hardware bit-pattern strategies
- targeting with scores, swarm testing, and a paired check that AXI4-Stream TVALID does not wait for TREADY
See Technique examples for the full list.
Install
Requirements: CPython 3.10–3.14, GHDL or NVC, and on Linux or macOS a C compiler with the Python
development headers. Pre-releases are on PyPI (pip install --pre awesome-vunit-vcs). The development
version on GitHub needs two unreleased dependencies, pinned
to tested commits: VUnit with package setup hooks and
vunit-python-bridge. Install them, then the package,
from GitHub:
pip install -r https://raw.githubusercontent.com/ru551n/awesome-vunit-vcs/main/tests/packaging/unreleased-requirements.txt
pip install "awesome-vunit-vcs @ git+https://github.com/ru551n/awesome-vunit-vcs"
pip install hypothesis # only for property-based testing
The installation guide covers optional extras and installing from a clone.
Get started
- Quick start:
a GMII testbench with a scoreboard and a Wireshark capture in five minutes. From a clone, run it
with
VUNIT_SIMULATOR=nvc python examples/quickstart/run.py --output-path ../vunit_out. - Cookbook: step-by-step recipes, from a first test to error injection, flash boot and property-based testing.
examples/: complete, tested projects that the documentation is built from.
Add the components to a VUnit run script with vu.add_package("vunit-python-bridge", allow_setup=True)
and vu.add_package("awesome-vunit-vcs"), as the quick start shows.
Status
Alpha: the APIs can still change before the first release. The roadmap lists what comes next.
For AI agents
- llms.txt and llms-full.txt index the documentation.
api/vhdl.json,api/python.jsonandapi/examples.jsonon Read the Docs give exact signatures and map each cookbook task to its example.- AGENTS.md is for agents working on this repository.
Contributing
Contributions are welcome: see CONTRIBUTING.md, and ARCHITECTURE.md for the design.
License
Metadata
Release files for awesome-vunit-vcs 0.1.0a1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| awesome_vunit_vcs-0.1.0a1.tar.gz | 811.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| awesome_vunit_vcs-0.1.0a1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.3 MB
Release files / awesome_vunit_vcs-0.1.0a1.tar.gz
| Download URL | awesome_vunit_vcs-0.1.0a1.tar.gz |
|---|---|
| Size | 811.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d3354650d98bdfdc3dd0b55e162a903ee3ddd6709d1c5d39ea57dd8aa70ed01d
|
|
BLAKE2b-256 checksum How to use checksums |
bd89e0c4700fd5f586f345483f3e4c0a5d2cf799e4404ef1643275e8106a87d3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.
Transparency logRelease files / awesome_vunit_vcs-0.1.0a1-py3-none-any.whl
| Download URL | awesome_vunit_vcs-0.1.0a1-py3-none-any.whl |
|---|---|
| Size | 453.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a3698d4241152becc1fa056377014def103c5d8cc95c9f61bdc463496e0520dd
|
|
BLAKE2b-256 checksum How to use checksums |
cd19d78fd0aebe71d5a3d72b2bf3d08d84366ae7df4147d7830c9a3deb858446
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.
Transparency log