Hands-on: DAQ Firmware Design with the colibri VHDL library
In this tutorial, you will design and test a simple DAQ firmware using colibri VHDL components.
Content
This tutorial will guide you through the design of a simple data acquisition firmware using colibri components.
You will:
- design your own block implementing a Finite State Machine (FSM) using colibri templates and guidelines.
- learn how to add formal verification to your components using the open source toolchains.
- compose your top-level design using ready-made verified components from the colibri library.
- design a constrained random testbench for the top-level to complete the validation of the design.
Prerequisites
The tutorial is hands-on: it is best to prepare your system installing the following prerequisites:
Option 1: docker (simplest)
We have prepared a all-in-one docker image that you can use in this tutorial. All the tools are already available and configured.
docker pull gitlab-registry.cern.ch/colibri/hdl_containers/colibri_de:latest
Note: podman can be used instead of docker
Option 2: install from sources
If you want to install the tools yourself, this is the list:
- https://github.com/YosysHQ/oss-cad-suite-build
- https://github.com/nickg/nvc
- https://github.com/VUnit/vunit
- A waveform viewer (e.g. Surfer)
Recommended tools (optional)
Colibri usage will be demonstrated in VS Code using the following two plugins:
Additionally two Python plugins are recommended:
We recommend using the same tools to follow the tutorial, except if you have already established different coding preferences.
Materials
We have prepared some source code which will help us fit our hands-on tutorial in the 3 hours of allocated time.
Starting point repository
A starting point to follow the tutorial can be found at the following link:
https://crnbox.cern.ch/remote.php/dav/public-files/ghWk0Dg43I3Yvu0/fdf26_colibri_tutorial.zip
It is a zip archive containing files that we will use, but will not be the focus of our tutorial.
Solved repository
The finished tutorial code can be found on GitLab: readout_design · master · colibri / tutorials · GitLab
It can be used as a reference during the live demonstration.