hdl containers f2f1ef containers?longCache=true&style=flat square community user%20guide HTML f2f1ef?longCache=true&style=flat square&logo=asciidoctor development HTML f2f1ef?longCache=true&style=flat square&logo=asciidoctor

hdl packages f2f1ef hdl awesome f2f1ef hdl constraints f2f1ef hdl smoke—​tests f2f1ef

This repository contains scripts and GitHub Actions (GHA) YAML workflows for building, testing and deploying OCI images (aka Docker | Podman images) including open source electronic design automation (EDA) tooling. All of them are pushed to gcr.io/hdl-containers, and mirrored to ghcr.io/hdl and hub.docker.com/u/hdlc:

hdl—​containers 555555 hdl 555555 hdlc 555555

Find usage guidelines and how to contribute in the following sections:

Do you want to improve this page? Edit it on GitHub!

Collections and architectures

Images are organised in collections and built for multiple architectures. A collection is a set of images which share a common ancestor; a base layer. Having images with a common ancestor allows reducing bandwidth and disk usage when pulling several of them. See docs.docker.com: About storage drivers | Images and layers.

Collections:

  • debian/bullseye based on ARCHITECTURE/debian:bullseye-slim (default)

  • debian/buster based on ARCHITECTURE/debian:buster-slim

  • centos/7 based on ARCHITECTURE/centos:7

Architectures:

Each image is published to ]IMAGE 555555 and ]IMAGE 555555.

However, the ARCHITECURE and COLLECTION are optional because:

  • Images for the default architecture are mirrored to IMAGE 555555 and IMAGE 555555.

  • Images of the default collection are mirrored to IMAGE 555555 and IMAGE 555555.

  • Images of the default collection for the default architecture are mirrored to hdlc 555555.

  • Images of the default collection for the default architecture which are not build or pkg are mirrored to IMAGE 555555 and IMAGE 555555.

Image names and tags in this documentation are provided without the registry prefix. Hence, one of the prefixes listed above needs to be used when actually pulling/using the images. See User Guide for further details.

The table below shows the tools available in the default collection for the default architecture. Some tools are available in a subset of collections or for a subset of architectures only. Browse the registries and/or the Continuous Integration workflows for finding images available in collections other than the default.

Tools and images

By default, latest development versions (branches master|main) of tools are built. Then, smoke tests are executed and, if successful, the corresponding images are updated in the registries. However, some specific tools are not built from sources, but installed through system package managers. Those are marked with ! in the table below.

Package images are not to be used for executing the tools, but for composing images including multiple resources. See Development: Package images for further details.

Tool

Image

Included in

Package

Ready-to-use

S

I

F

P

Others

apicula

apicula&logo=Docker&logoColor=fff

latest?longCache=true&style=flat square&label=apicula&logo=Docker&logoColor=fff

-

-

-

-

-

arache-pnr

arachne pnr&logo=Docker&logoColor=fff

latest?longCache=true&style=flat square&label=arachne pnr&logo=Docker&logoColor=fff

-

-

-

-

-

boolector

boolector&logo=Docker&logoColor=fff

-

-

-

F

-

-

cocotb

-

-

S

-

-

-

-

cvc

cvc&logo=Docker&logoColor=fff

-

-

-

F

-

-

ghdl

ghdl&logo=Docker&logoColor=fff llvm&logo=Docker&logoColor=fff

latest?longCache=true&style=flat square&label=ghdl&logo=Docker&logoColor=fff llvm&logo=Docker&logoColor=fff

S

I

F

-

ghdl/yosys

ghdl-yosys-plugin

ghdl yosys plugin&logo=Docker&logoColor=fff

yosys&logo=Docker&logoColor=fff

-

I

F

-

-

graphviz !

-

-

-

I

F

-

yosys, ghdl/yosys

gtkwave

gtkwave&logo=Docker&logoColor=fff

-

-

-

-

-

-

icestorm

icestorm&logo=Docker&logoColor=fff

latest?longCache=true&style=flat square&label=icestorm&logo=Docker&logoColor=fff

-

I

-

P

nextpnr/icestorm

iverilog

iverilog&logo=Docker&logoColor=fff

latest?longCache=true&style=flat square&label=iverilog&logo=Docker&logoColor=fff

-

-

-

-

-

klayout

klayout&logo=Docker&logoColor=fff

latest?longCache=true&style=flat square&label=klayout&logo=Docker&logoColor=fff

-

-

-

-

-

magic

magic&logo=Docker&logoColor=fff

latest?longCache=true&style=flat square&label=magic&logo=Docker&logoColor=fff

-

-

-

-

-

netgen

netgen&logo=Docker&logoColor=fff

latest?longCache=true&style=flat square&label=netgen&logo=Docker&logoColor=fff

-

-

-

-

-

nextpnr

generic&logo=Docker&logoColor=fff ice40&logo=Docker&logoColor=fff nexus&logo=Docker&logoColor=fff ecp5&logo=Docker&logoColor=fff

generic&logo=Docker&logoColor=fff ice40&logo=Docker&logoColor=fff ecp5&logo=Docker&logoColor=fff icestorm&logo=Docker&logoColor=fff prjoxide&logo=Docker&logoColor=fff prjtrellis&logo=Docker&logoColor=fff latest?longCache=true&style=flat square&label=nextpnr&logo=Docker&logoColor=fff

-

I

-

-

-

openfpgaloader

openfpgaloader&logo=Docker&logoColor=fff

latest?longCache=true&style=flat square&label=openfpgaloader&logo=Docker&logoColor=fff

-

-

-

-

-

openocd !

-

-

-

-

-

P

-

pono

pono&logo=Docker&logoColor=fff

-

-

-

F

-

-

prjoxide

prjoxide&logo=Docker&logoColor=fff

latest?longCache=true&style=flat square&label=prjoxide&logo=Docker&logoColor=fff

-

-

-

-

nextpnr/prjoxide

prjtrellis

prjtrellis&logo=Docker&logoColor=fff

latest?longCache=true&style=flat square&label=prjtrellis&logo=Docker&logoColor=fff

-

I

-

-

nextpnr/prjtrellis

superprove

superprove&logo=Docker&logoColor=fff

-

-

-

F

-

-

symbiyosys

symbiyosys&logo=Docker&logoColor=fff

-

-

-

F

-

-

verilator

verilator&logo=Docker&logoColor=fff

latest?longCache=true&style=flat square&label=verilator&logo=Docker&logoColor=fff

S

-

-

-

-

vtr

vtr&logo=Docker&logoColor=fff

latest?longCache=true&style=flat square&label=vtr&logo=Docker&logoColor=fff

-

-

-

-

-

vunit

-

-

S

-

-

-

-

yices2

yices2&logo=Docker&logoColor=fff

-

-

-

F

-

-

xyce

xyce&logo=Docker&logoColor=fff

latest?longCache=true&style=flat square&label=xyce&logo=Docker&logoColor=fff

-

-

-

-

-

yosys

yosys&logo=Docker&logoColor=fff

latest?longCache=true&style=flat square&label=yosys&logo=Docker&logoColor=fff

-

I

F

-

ghdl/yosys

z3

z3&logo=Docker&logoColor=fff

-

-

-

F

-

-

Images including multiple tools

  • Simulation:

    • latest?longCache=true&style=flat square&label=sim&logo=Docker&logoColor=fff GHDL + Verilator

    • osvb&logo=Docker&logoColor=fff cocotb, OSVVM and VUnit; on top of sim.

    • scypy slim&logo=Docker&logoColor=fff matplotlib and numpy, on top of sim.

    • scypy&logo=Docker&logoColor=fff osvb on top of scypy-slim.

    • octave slim&logo=Docker&logoColor=fff octave, on top of sim.

    • octave&logo=Docker&logoColor=fff osvb on top of octave-slim.

  • Implementation: GHDL + Yosys + nextpnr

    • ice40&logo=Docker&logoColor=fff nextpnr-ice40 only, and icestorm&logo=Docker&logoColor=fff including icestorm.

    • ecp5&logo=Docker&logoColor=fff nextpnr-ecp5 only, and prjtrellis&logo=Docker&logoColor=fff including prjtrellis.

    • generic&logo=Docker&logoColor=fff nextpnr-generic only.

    • pnr&logo=Docker&logoColor=fff all nextpnr targets (ecp5, ice40, and generic).

    • latest?longCache=true&style=flat square&label=impl&logo=Docker&logoColor=fff impl:pnr, including icestorm and prjtrellis.

  • Formal:

    • latest?longCache=true&style=flat square&label=formal&logo=Docker&logoColor=fff all solvers depending on Python 3.

    • min&logo=Docker&logoColor=fff Z3 only.

    • all&logo=Docker&logoColor=fff all solvers, depending on either Python 2 or Python 3.

  • Programming: latest?longCache=true&style=flat square&label=prog&logo=Docker&logoColor=fff

To Do

Context

This project started in GitHub repository ghdl/ghdl (which was named tgingold/ghdl back then). The main purpose was testing GHDL on multiple GNU/Linux distributions (Debian, Ubuntu and Fedora), since Travis CI supported Ubuntu only and Docker. For each target platform, two images were used, one for building and another one for testing.

Later, most of the Docker related sources were split to repository ghdl/docker. There, some additional simulation tools were added, such as VUnit and GtkWave. Images including the ghdl-language-server were also added. When synthesis features were added to GHDL, and since it provides a plugin for Yosys, tools for providing a complete open source workflow were requested. Those were nextpnr, icestorm, prjtrellis, SymbiYosys, etc.

At some point, ghdl/docker had as much content related to non-GHDL tools, as resources related to the organisation. At the same time, SymbiFlow aimed at gathering open source projects for providing an integrated open source EDA solution. However, it did not have official container images and help was wanted. This repository was initially created for moving all the tools which were not part of GHDL, from ghdl/docker to symbiflow/containers. However, apart from adding known Verilog tools, the scope was widened. Hence, the repository was published in hdl/containers.

References