FPGA development helper for installing OSS CAD Suite and running build/flash flows.
Project description
devlab
devlab is a Python CLI package for FPGA development. It installs the
matching OSS CAD Suite build for the current operating system, creates a small
FPGA project, and runs build/flash commands from devlab.toml.
Install
pip install devlab-fpga
For local development from this repository:
pip install -e .
Commands
devlab doctor
devlab install
devlab new blink
devlab new blink-vhdl --hdl vhdl
cd blink
devlab build
devlab flash
devlab install downloads OSS CAD Suite release 2026-07-06 from
YosysHQ. The installer selects the correct asset for:
- Linux x64
- Linux arm64
- macOS x64
- macOS arm64
- Windows x64
The default install location is ~/.devlab. Set DEVLAB_HOME to use a
different directory.
devlab build, devlab flash, and devlab flash --detect automatically run
OSS CAD Suite tools with the installed suite environment, including the
official bin, py3bin, VIRTUAL_ENV, VERILATOR_ROOT, and GHDL_PREFIX
settings. You do not need to manually source environment for those commands.
devlab doctor also checks that ghdl and the Yosys GHDL plugin are present.
On Windows, OSS CAD Suite may be distributed as a 7-Zip self-extracting .exe
archive. devlab install extracts it automatically into ~/.devlab/toolchains
without opening an installer:
devlab install
The installed tree keeps the official OSS CAD Suite layout:
~/.devlab/toolchains/oss-cad-suite-2026-07-06-windows-x64/
oss-cad-suite/
bin/
environment.bat
environment.ps1
OSS CAD Suite Source
Default release:
https://github.com/YosysHQ/oss-cad-suite-build/releases/tag/2026-07-06
Example assets:
https://github.com/YosysHQ/oss-cad-suite-build/releases/download/2026-07-06/oss-cad-suite-linux-arm64-20260706.tgz
https://github.com/YosysHQ/oss-cad-suite-build/releases/download/2026-07-06/oss-cad-suite-windows-x64-20260706.exe
Downloaded archives are verified with the SHA-256 digest published by the GitHub release API.
Project Format
devlab new blink creates:
blink/
devlab.toml
pins.cst
src/top.v
Use --hdl vhdl to create src/top.vhd instead:
devlab new blink-vhdl --hdl vhdl
Default devlab.toml:
[fpga]
family = "GW1N-9C"
device = "GW1NR-LV9QN88PC6/I5"
cst = "pins.cst"
[build]
top = "top"
sources = ["src/top.v"]
constraints = "pins.cst"
build_dir = "build"
[flash]
board = "tangnano9k"
mode = "sram"
verify = false
For Gowin, family is the FPGA series used by the packer and place-and-route
flow, for example GW1N-9C. device is the complete part number, for example
GW1NR-LV9QN88PC6/I5. pins.cst is the Gowin constraints file.
Update pins.cst and [flash].board for the real FPGA board before building
and flashing hardware.
Build Flows
For Gowin GW1N-9C / GW1NR-LV9QN88PC6/I5, devlab build runs:
yosys
nextpnr-himbaechel
gowin_pack
The iCE40 and ECP5 flows are still available by setting family = "ice40" or
family = "ecp5" in devlab.toml.
For iCE40, it runs:
yosys
nextpnr-ice40
icepack
devlab flash uses openFPGALoader. By default it writes SRAM, so the FPGA
loses the design after power cycling. Use flash mode to write the bitstream to
non-volatile memory:
devlab flash --mode flash
Before writing flash on board variants where flash may or may not be populated, run detection:
devlab flash --detect
devlab flash --detect --board tangnano9k
Persistent flash can also be configured in devlab.toml:
[flash]
board = "tangnano9k"
mode = "flash"
verify = false
# external_flash = true
# offset = "0"
For Tang Nano 9K/Gowin, flash write verification may print
writing verification not supported and fail the CRC check even when the flash
write completed. Keep verify = false unless the selected board/programming
path explicitly supports flash verification.
When sources end in .vhd or .vhdl, devlab build runs Yosys with the
GHDL plugin before synthesis. devlab resolves the plugin from the installed
OSS CAD Suite tree, for example share/yosys/plugins/ghdl.so on Linux, and
falls back to Yosys' plugin search path if a direct path is not found.
Use --dry-run to print the commands without executing them:
devlab build --dry-run
devlab flash --dry-run --board tangnano9k
devlab flash --dry-run --mode flash
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file devlab_fpga-0.1.6.tar.gz.
File metadata
- Download URL: devlab_fpga-0.1.6.tar.gz
- Upload date:
- Size: 14.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
af1e59ae001cace44701997a5fc37b23f8df91cb0c70080c6edb9bfcabe844e7
|
|
| MD5 |
69df7927a360cbe826c1a0e5eb8574e7
|
|
| BLAKE2b-256 |
11aa5708c14d4cc5a8d18aa91f327eb346e704cd456b56732ca8f9f6e07f4af2
|
Provenance
The following attestation bundles were made for devlab_fpga-0.1.6.tar.gz:
Publisher:
workflow.yml on UNIT-Electronics-Labs/unit_devlab_lib
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
devlab_fpga-0.1.6.tar.gz -
Subject digest:
af1e59ae001cace44701997a5fc37b23f8df91cb0c70080c6edb9bfcabe844e7 - Sigstore transparency entry: 2103348897
- Sigstore integration time:
-
Permalink:
UNIT-Electronics-Labs/unit_devlab_lib@90ac17fceb1b4b5e25588051c348f69839a46e19 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/UNIT-Electronics-Labs
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@90ac17fceb1b4b5e25588051c348f69839a46e19 -
Trigger Event:
push
-
Statement type:
File details
Details for the file devlab_fpga-0.1.6-py3-none-any.whl.
File metadata
- Download URL: devlab_fpga-0.1.6-py3-none-any.whl
- Upload date:
- Size: 14.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d2d372a7f01bafb2457a2d10dfba7b75352ba57e7437dcb4cf81772ea1e45040
|
|
| MD5 |
891052ecb4ab301495d7fbadae764593
|
|
| BLAKE2b-256 |
b325b22311659aca35bdc3d8ccb9224eb7d73f79a2e087d378c98081ea31381e
|
Provenance
The following attestation bundles were made for devlab_fpga-0.1.6-py3-none-any.whl:
Publisher:
workflow.yml on UNIT-Electronics-Labs/unit_devlab_lib
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
devlab_fpga-0.1.6-py3-none-any.whl -
Subject digest:
d2d372a7f01bafb2457a2d10dfba7b75352ba57e7437dcb4cf81772ea1e45040 - Sigstore transparency entry: 2103348965
- Sigstore integration time:
-
Permalink:
UNIT-Electronics-Labs/unit_devlab_lib@90ac17fceb1b4b5e25588051c348f69839a46e19 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/UNIT-Electronics-Labs
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@90ac17fceb1b4b5e25588051c348f69839a46e19 -
Trigger Event:
push
-
Statement type: