Travailler avec des logiciels libres

En 2020, l’unité d’enseignement Conception de Circuits Numériques s’est entièrement déroulée à distance. Dans ce contexte, les étudiants ont pu utiliser des outils de développement VHDL libres que nous avons fournis pré-installés dans une machine virtuelle.

Cette page donne les instructions d’installation de ces outils selon deux modalités possibles :

Liste des logiciels recommandés

Pour avoir un environnement de simulation complet, vous pouvez utiliser les logiciels suivants :

Recette pour la construction de la machine virtuelle

La machine virtuelle que nous proposons a été testée avec VirtualBox 6.0. Vous pouvez la construire vous-mêmes en utilisant les indications suivantes :

  1. Télécharger une image de CD d’installation par le réseau de Debian 10.3 « Buster ».
  2. Télécharger et installer VirtualBox 6.0.
  3. Ouvrir VirtualBox et créer une nouvelle machine virtuelle :
    • Nom : CoCiNum (choisir un autre nom si vous avez déjà une VM qui possède le même nom).
    • Type : Linux
    • Version : Debian (32-bit)
    • Taille de la mémoire : 1024 Mio
    • Créer un disque dur virtuel maintenant
    • Garder les options par défaut pour le disque dur : taille 8 Gio, type de fichier VDI
  4. Dans VirtualBox, ouvrir la fenêtre de configuration de la nouvelle machine virtuelle :
    • Général → Avancé → Presse-papier partagé : Bidirectionnel.
    • Système → Accélération : désactiver VT-x ou AMD-V si le support matériel de la virtualisation n’est pas activé dans le BIOS de votre PC.
    • Stockage → Contrôleur IDE : sélectionner l’icône représentant un CD. À droite du champ Lecteur optique, pressez l’autre icône représentant un CD, puis Choisissez un fichier de disque optique virtuel. Sélectionnez le fichier debian-10.3.0-i386-netinst.iso.
    • USB : choisir USB 1.1
    • Pressez OK pour terminer la configuration.
  5. Démarrez la machine virtuelle.

L’installation de Debian dans la machine virtuelle s’effectue de la manière suivante :

  1. Dans le menu de l’installeur, choisir Graphical Install.
  2. Choisir les paramètres de langue, de situation géographique, de clavier.
  3. Nom de la machine : cocinum-vm.
  4. Configurer le réseau : ne rien faire.
  5. Mot de passe du superutilisateur (« root ») : laisser vide.
  6. Nom complet du nouvel utilisateur : Conception de Circuits Numériques.
  7. Identifiant pour le compte utilisateur : cocinum.
  8. Mot de passe pour le nouvel utilisateur : c0c1num (avec un « zéro » et un « un » à la place du « o » et du « i »).
  9. Partitionner les disques : Assisté - utiliser un disque entier.
  10. Schéma de partitionnement : Tout dans une seule partition.
  11. Accepter les modifications.
  12. Faut-il analyser un autre CD ou DVD : Non.
  13. Acceptez les choix par défaut pour l’accès aux dépôts de paquets.
  14. Participer à l’étude statistique sur l’utilisation des paquets?: Non.
  15. Sélection des logiciels :
    • Environnement de bureau Debian → LXQt.
    • Utilitaires usuels du système.
    • On peut désactiver l’installation du serveur d’impression.
  16. Installer le programme de démarrage GRUB sur le secteur d’amorçage : Oui.
  17. Choisir /dev/sda.

À la fin de l’installation, la machine virtuelle redémarre. Connectez-vous avec l’utilisateur cocinum.

La machine virtuelle que nous distribuons est configurée pour :

Nous pouvons également retirer les logiciels qui ne sont pas indispensable pour nos activités : LibreOffice, Thunderbird, lecteurs audio et vidéo.

Si vous prévoyez d’installer les Guest additions de VirtualBox, ouvrez un terminal et exécutez cette commande :

sudo apt install gcc make perl linux-headers-686

L’installation des logiciels de simulation VHDL est détaillée ci-après.

Installation sous GNU/Linux

Les instructions d’installation on été testées sous Ubuntu 19.10, Ubuntu 20.04 et Debian 10.3.

GHDL

Sous Ubuntu 19.10, Debian 10.3, ou des versions ultérieures, exécutez la commande suivante dans un terminal :

sudo apt install ghdl-llvm

Pour les versions précédentes d’Ubuntu, à partir de la version 18.04, GHDL peut s’installer de la manière suivante :

wget http://fr.archive.ubuntu.com/ubuntu/pool/universe/g/ghdl/ghdl_0.35+git20181129+dfsg-4ubuntu1_amd64.deb
wget http://fr.archive.ubuntu.com/ubuntu/pool/universe/g/ghdl/ghdl-llvm_0.35+git20181129+dfsg-4ubuntu1_amd64.deb
sudo dpkg -i ghdl_0.35+git20181129+dfsg-4ubuntu1_amd64.deb
# Cette commande se termine avec une erreur mais elle sera réparée par la commande suivante
sudo dpkg -i ghdl-llvm_0.35+git20181129+dfsg-4ubuntu1_amd64.deb
sudo apt -f install

GtkWave et CocoTB

Ces commandes installent les outils de test et d’affichage des chronogrammes :

sudo apt install gtkwave python3 python3-dev python3-tk python3-pip make gcc
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10
sudo pip3 install cocotb

Logisim-evolution

Logisim-evolution est distribué sous la forme d’un fichier jar à copier dans /opt :

sudo apt install default-jre
sudo wget -P /opt https://github.com/reds-heig/logisim-evolution/releases/download/v3.3.0/logisim-evolution-3.3.0-all.jar

Outil de gestion de version

Installer git à l’aide du gestionnaire de paquets :

sudo apt install git

Éditeur de texte

Cette commande installe l’éditeur Gedit. Vous pouvez en installer un autre selon vos préférences.

sudo apt install gedit gedit-plugins

Outils de compilation pour l’architecture RISC-V

Disponible seulement à partir d’Ubuntu 19.10.

sudo apt install gcc-riscv64-unknown-elf

Terminaux pour ports série

Cette commande installe trois logiciels terminaux pour ports série, graphiques ou en ligne de commande :

sudo apt install gtkterm minicom picocom

Tester l’installation de GHDL et cocotb

Créer les dossiers de travail :

mkdir -p ghdl-demo/src
mkdir -p ghdl-demo/tests

Nous utiliserons les trois fichiers suivants :

library ieee;
use ieee.std_logic_1164.all;

entity InToOut is
    port(
        x : in std_logic;
        y : out std_logic
    );
end InToOut;

architecture Behavioral of InToOut is
begin
    y <= x;
end Behavioral;
import cocotb
from cocotb.triggers import Timer

import tkinter as tk
from datetime import datetime, timedelta

led_color_on  = "lime"
led_color_off = "dark slate gray"

refresh_time = timedelta(milliseconds=40)

class Gui:
	def __init__(self, dut):
		self.dut = dut

		self.root = tk.Tk()
		self.root.protocol("WM_DELETE_WINDOW", self.on_close)

		btn = tk.Button(self.root, text="Click here")
		btn.pack(side=tk.TOP)
		btn.bind("<ButtonPress>", self.on_press)
		btn.bind("<ButtonRelease>", self.on_release)

		self.canvas = tk.Canvas(self.root, width=100, height=100, bg="black", relief="flat")
		self.canvas.pack(side=tk.BOTTOM)
		self.led = self.canvas.create_oval(10, 10, 90, 90, fill=led_color_off)

		self.state = 0
		self.closed = False
		self.last_update = datetime.now()

	def on_close(self):
		self.root.quit()
		self.closed = True

	def on_press(self, evt):
		self.state = 1

	def on_release(self, evt):
		self.state = 0

	def update(self):
		t = datetime.now()
		delta = t - self.last_update

		if delta >= refresh_time:
			self.last_update = t
			self.dut.x = self.state
			self.canvas.itemconfig(self.led, fill=led_color_on if self.dut.y.value.binstr == '1' else led_color_off)

		self.root.update()

@cocotb.test()
def run(dut):
	gui = Gui(dut)

	dut.x = 0

	while not gui.closed:
		yield Timer(250, "us")
		gui.update()
SRCDIR = $(PWD)/../src
VHDL_SOURCES = $(SRCDIR)/InToOut.vhd
TOPLEVEL = intoout
MODULE = test_intoout
SIM = ghdl
SIM_ARGS = --wave=InToOut.ghw
export COCOTB_REDUCED_LOG_FMT = 1

include $(shell cocotb-config --makefiles)/Makefile.inc
include $(shell cocotb-config --makefiles)/Makefile.sim

Dans un terminal, déplacez-vous vers le dossier ghdl-demo/tests à l’aide de la commande cd, puis exécutez la commande make. Dans la machine virtuelle que nous fournissons, les fichiers sont déjà présents :

cd ghdl-demo/tests
make

Une fenêtre tk doit s’afficher. Chaque pression sur le bouton met à '1' l’entrée x de l’entité InToOut. Sous le bouton, un disque coloré se met au vert lorsque la sortie y vaut '1'.

Après avoir fermé la fenêtre tk, affichez les chronogrammes :

gtkwave InToOut.ghw

Dans les panneaux de gauche, sélectionnez les signaux x et y. Réglez le niveau de zoom pour observer leurs variations sur toute la durée de simulation.