Comments (2)
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.
from docker.
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:
- Simulation. Can be done with GHDL, but also with ModelSim/QuestaSim, Riviera, etc. Might use some framework/tool, such as VUnit or cocotb.
- Synthesis. Can be done with GHDL + yosys, but also with Vivado, Precision, Quartus, Icecube...
- Place and route. Can be done with arachne-pnr or nextpnr, but also with Vivado, Quartus or Icecube.
- Programming/configuration of the device. Can be done with iceprog, but also with Xilinx cables, Digilent's JTAG...
- Formal verification. Can be done with Symbiyosys, but also with commercial tools (don't know any specific name).
Hence, the points are:
- Most users don't want to do all five tasks.
- Users that want to do all five tasks, might not want to execute everything at the same time, or on the same workstation. Say, one might generate the bitstream in a Windows workstation and copy it to a RPi in order to execute iceprog without dealing with buggy FTDI support on Windows.
- Some users might want to combine some tasks with open source tools and others with vendor tools. For example,
ghdl --synth
can be used as a kind of transpiler, to convert VHDL 2008 sources to a "less demanding" language variant that is accepted by other tools with poor language support. - In CI environments or in low-cost SBCs, size matters. The following are compressed sizes:
- Simulation or
ghdl --synth
: >75MB. - Synthesis with yosys: >200MB.
- P&R with nextpnr: >340MB.
- Icestorm >55MB.
- Formal verification with symbiyosys: >220MB. Note that this includes the minimal installation. If multiple solvers are installed, it gets significantly larger.
- Simulation or
- Almost all the images we provide, although tagged with different names, are built incrementally. For example, the image for synthesis with yosys shares all the layers except the last with one of the images for simulation. The image for formal verification is based on the one for synthesis with yosys. As a result, the volume of data required to pull 3-4 images should not be much larger than an equivalent single image with all the tools in it.
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.
from docker.
Related Issues (20)
- Ensure that artifacts are traceable
- Pulling from Docker Hub fails. HOT 1
- Add nextpnr-ecp5 to ghdl/synth:nextpnr image? HOT 4
- nextpnr GUI HOT 1
- Runtime dependencies for libboost HOT 1
- Add image to debug GHDL and/or binaries generate with GHDL HOT 5
- gtkwave does not run for the expected time within a testbench HOT 1
- At least `ghdl/synth:beta` and `formal` images are 14 days outdated HOT 13
- ECP5 components HOT 5
- ghdl/synth:beta image a691ca20ad4b broken HOT 9
- Docker Resource Consumption Updates HOT 1
- pip issue in ghdl/vunit:gcc-master (and others?) HOT 6
- Remove GCC from run/* images
- Add/enable libbacktrace in containers with LLVM backend HOT 1
- Code coverage stopped working after switch to Debian Bullseye and gcc 9.1 HOT 26
- Update info about running GUI
- Keep GHDL release versions on the Docker Hub
- Closed
- VUnit Docker Image not working
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from docker.