ghdl / docker

Scripts to build and use docker images including GHDL
40 stars 10 forks source link

Docker image for the whole design flow #20

Closed marph91 closed 4 years ago

marph91 commented 4 years ago

Hi, is there a docker image, which contains the tools for the whole design flow (ghdl, ghdlsynth, yosys, nextpnr and icestorm)? I could only find images containing single tools.

eine commented 4 years ago

Hi @marph91!

No, there is no such a single fat image that includes everything. This is a design decission. Hence, please, let me elaborate, and do not hesitate to argue against any of the following points. I'd be actually so glad to discuss this.

There are five related but different tasks during the development and testing of VHDL designs:

Hence, the points are:

This last point is explained in the README, although I reckon that it might not be easy to understand, unless you know what to look for:

Each of the following images includes a tool on top of a debian:buster-slim image:

ghdl/synth:yosys: includes YosysHQ/yosys (master).

ghdl/cache:yosys-gnat: includes libgnat-8 on top of ghdl/synth:yosys.

A ghdl/ghdl: image is created based on the corresponding ghdl/run: image.

Which means that ghdl/ghdl:buster-mcode is based on ghdl/run:buster-mcode. ghdl/run:buster-mcode is based on debian:buster-slim.

ghdl/synth:latest: includes ghdl/ghdl with synthesis features enabled on top of a ghdl/run:buster-mcode image.

ghdl/synth:beta: includes ghdl from ghdl/synth:latest along with ghdlsynth-beta built as a module for YosysHQ/yosys, on top of ghdl/cache:yosys-gnat.

Then, image ghdl/synth:formal is built, which includes the tarball from ghdl/cache:formal and Python3 on top of ghdl/synth:beta.


Now that I explained the context, let me answer your question:

(ghdl, ghdlsynth, yosys, nextpnr and icestorm)

The suggested approach is to execute three containers: one for synthesis, another one for P&R and a last one to program the device. See https://github.com/tgingold/ghdlsynth-beta#docker. Regarding the note at the botton, it is technically possible to use icestorm on Windows from inside a Docker container, but it is not exactly plug & play: https://github.com/ghdl/docker/tree/master/usbip

Alternatively, due to the kind of modular infrastructure we use to build our images, you can reuse most of the content to build a single image that includes all of the tools. In this case, that would be merging three images into one. There are several possible approaches to do so. Should you be interested, please let me know.

marph91 commented 4 years ago

Thank you very much for the detailed answer!

Actually, I was looking exactly for https://github.com/tgingold/ghdlsynth-beta#docker, but looked at the wrong places. The approach with executing three containers worked for me. There is no additional effort needed to merge the images.

I'm not very familiar with docker images and had only my use case in mind. So I thought the easiest solution was a single image with all the tools. But as there are multiple tools available for each step, I agree that the modularity is essential for many users.